From 9476f2018e528b60a93965e7a6cf6c5f98d9366b Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sat, 31 Aug 2024 09:40:05 -0700 Subject: [PATCH 001/212] fix Barbarian Sundering Blow interaction with attacks from effect proxies like call lightning --- .../Models/CharacterUAContext.cs | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/SolastaUnfinishedBusiness/Models/CharacterUAContext.cs b/SolastaUnfinishedBusiness/Models/CharacterUAContext.cs index 2657f8de81..744dcdfbf0 100644 --- a/SolastaUnfinishedBusiness/Models/CharacterUAContext.cs +++ b/SolastaUnfinishedBusiness/Models/CharacterUAContext.cs @@ -413,10 +413,7 @@ public IEnumerator OnPhysicalAttackFinishedByMe(GameLocationBattleManager battle } private static void InflictCondition( - RulesetCharacter rulesetAttacker, - // ReSharper disable once SuggestBaseTypeForParameter - RulesetCharacter rulesetDefender, - string conditionName) + RulesetCharacter rulesetAttacker, RulesetCharacter rulesetDefender, string conditionName) { rulesetDefender.InflictCondition( conditionName, @@ -448,8 +445,11 @@ public IEnumerator OnMagicEffectAttackInitiatedOnMe( bool checkMagicalAttackDamage) { var damageType = activeEffect.EffectDescription.FindFirstDamageForm()?.DamageType; + var rulesetAttacker = attacker.RulesetCharacter; - if (damageType == null) + if (damageType == null || + rulesetAttacker == null || + rulesetAttacker is RulesetCharacterEffectProxy) { yield break; } @@ -466,8 +466,11 @@ public IEnumerator OnPhysicalAttackInitiatedOnMe( RulesetAttackMode attackMode) { var damageType = attackMode.EffectDescription.FindFirstDamageForm()?.DamageType; + var rulesetAttacker = attacker.RulesetCharacter; - if (damageType == null) + if (damageType == null || + rulesetAttacker == null || + rulesetAttacker is RulesetCharacterEffectProxy) { yield break; } @@ -509,7 +512,7 @@ private void AddBonusAttackAndDamageRoll( TurnOccurenceType.EndOfTurn, AttributeDefinitions.TagEffect, rulesetAttacker.guid, - rulesetAttacker.CurrentFaction.Name, + FactionDefinitions.HostileMonsters.Name, 1, conditionSunderingBlowAlly.Name, 0, From 78c81d591c13fa3cb5d4b55260715ae39b4f9bd1 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sat, 31 Aug 2024 19:49:53 -0700 Subject: [PATCH 002/212] remove IRollSavingThrowFinished dependency from Bountiful Luck and Lucky feats --- SolastaUnfinishedBusiness/Feats/OtherFeats.cs | 38 +++---------------- SolastaUnfinishedBusiness/Feats/RaceFeats.cs | 38 +++---------------- 2 files changed, 10 insertions(+), 66 deletions(-) diff --git a/SolastaUnfinishedBusiness/Feats/OtherFeats.cs b/SolastaUnfinishedBusiness/Feats/OtherFeats.cs index 1c1e681fa7..79a17b06b2 100644 --- a/SolastaUnfinishedBusiness/Feats/OtherFeats.cs +++ b/SolastaUnfinishedBusiness/Feats/OtherFeats.cs @@ -1939,37 +1939,9 @@ private static FeatDefinition BuildFeatLucky() return feat; } - private sealed class CustomBehaviorLucky( - // ReSharper disable once SuggestBaseTypeForParameterInConstructor - FeatureDefinitionPower powerLucky) - : ITryAlterOutcomeAttack, ITryAlterOutcomeAttributeCheck, ITryAlterOutcomeSavingThrow, IRollSavingThrowFinished + private sealed class CustomBehaviorLucky(FeatureDefinitionPower powerLucky) + : ITryAlterOutcomeAttack, ITryAlterOutcomeAttributeCheck, ITryAlterOutcomeSavingThrow { - private const string LuckyModifierTag = "LuckyModifierTag"; - private const string LuckySaveTag = "LuckySaveTag"; - - public void OnSavingThrowFinished( - RulesetCharacter rulesetCaster, - RulesetCharacter rulesetDefender, - int saveBonus, - string abilityScoreName, - BaseDefinition sourceDefinition, - List modifierTrends, - List advantageTrends, - int rollModifier, - int saveDC, - bool hasHitVisual, - ref RollOutcome outcome, - ref int outcomeDelta, - List effectForms) - { - var caster = GameLocationCharacter.GetFromActor(rulesetCaster); - - caster.UsedSpecialFeatures.TryAdd(LuckyModifierTag, 0); - caster.UsedSpecialFeatures.TryAdd(LuckySaveTag, 0); - caster.UsedSpecialFeatures[LuckyModifierTag] = saveBonus + rollModifier; - caster.UsedSpecialFeatures[LuckySaveTag] = saveDC; - } - public int HandlerPriority => -10; public IEnumerator OnTryAlterOutcomeAttack( @@ -2154,9 +2126,7 @@ public IEnumerator OnTryAlterOutcomeSavingThrow( if (!action.RolledSaveThrow || action.SaveOutcome != RollOutcome.Failure || helper != defender || - rulesetHelper.GetRemainingUsesOfPower(usablePower) == 0 || - !defender.UsedSpecialFeatures.TryGetValue(LuckyModifierTag, out var modifier) || - !defender.UsedSpecialFeatures.TryGetValue(LuckySaveTag, out var saveDC)) + rulesetHelper.GetRemainingUsesOfPower(usablePower) == 0) { yield break; } @@ -2174,6 +2144,8 @@ void ReactionValidated() { var dieRoll = rulesetHelper.RollDie(DieType.D20, RollContext.None, false, AdvantageType.None, out _, out _); + var modifier = saveModifier.SavingThrowModifier; + var saveDC = action.GetSaveDC(); var savingRoll = action.SaveOutcomeDelta - modifier + saveDC; if (dieRoll <= savingRoll) diff --git a/SolastaUnfinishedBusiness/Feats/RaceFeats.cs b/SolastaUnfinishedBusiness/Feats/RaceFeats.cs index a5711e8658..fdcef04c7f 100644 --- a/SolastaUnfinishedBusiness/Feats/RaceFeats.cs +++ b/SolastaUnfinishedBusiness/Feats/RaceFeats.cs @@ -613,37 +613,9 @@ private static FeatDefinitionWithPrerequisites BuildFeatBountifulLuck() return feat; } - private sealed class CustomBehaviorBountifulLuck( - // ReSharper disable once SuggestBaseTypeForParameterInConstructor - ConditionDefinition conditionBountifulLuck) - : ITryAlterOutcomeAttack, ITryAlterOutcomeAttributeCheck, ITryAlterOutcomeSavingThrow, IRollSavingThrowFinished + private sealed class CustomBehaviorBountifulLuck(ConditionDefinition conditionBountifulLuck) + : ITryAlterOutcomeAttack, ITryAlterOutcomeAttributeCheck, ITryAlterOutcomeSavingThrow { - private const string BountifulLuckModifierTag = "BountifulLuckModifierTag"; - private const string BountifulLuckSaveTag = "BountifulLuckSaveTag"; - - public void OnSavingThrowFinished( - RulesetCharacter rulesetCaster, - RulesetCharacter rulesetDefender, - int saveBonus, - string abilityScoreName, - BaseDefinition sourceDefinition, - List modifierTrends, - List advantageTrends, - int rollModifier, - int saveDC, - bool hasHitVisual, - ref RollOutcome outcome, - ref int outcomeDelta, - List effectForms) - { - var caster = GameLocationCharacter.GetFromActor(rulesetCaster); - - caster.UsedSpecialFeatures.TryAdd(BountifulLuckModifierTag, 0); - caster.UsedSpecialFeatures.TryAdd(BountifulLuckSaveTag, 0); - caster.UsedSpecialFeatures[BountifulLuckModifierTag] = saveBonus + rollModifier; - caster.UsedSpecialFeatures[BountifulLuckSaveTag] = saveDC; - } - public int HandlerPriority => -10; public IEnumerator OnTryAlterOutcomeAttack( @@ -830,13 +802,13 @@ public IEnumerator OnTryAlterOutcomeSavingThrow( helper.IsOppositeSide(defender.Side) || !helper.CanReact() || !helper.IsWithinRange(defender, 6) || - !helper.CanPerceiveTarget(defender) || - !defender.UsedSpecialFeatures.TryGetValue(BountifulLuckModifierTag, out var modifier) || - !defender.UsedSpecialFeatures.TryGetValue(BountifulLuckSaveTag, out var saveDC)) + !helper.CanPerceiveTarget(defender)) { yield break; } + var modifier = saveModifier.SavingThrowModifier; + var saveDC = action.GetSaveDC(); var savingRoll = action.SaveOutcomeDelta - modifier + saveDC; if (savingRoll != 1) From 721763aa23ddcb5bb4c68b5d3e10cb92f34b7f8f Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sat, 31 Aug 2024 20:09:54 -0700 Subject: [PATCH 003/212] change IRollSavingThrowInitiated and IRollSavingThrowFinished interfaces and allow RemoveCondition and ProcessConditionsMatchingInterruption to trigger them --- .../GameExtensions/RulesetActorExtensions.cs | 154 ++++++++++++++++++ .../Infrastructure/RulesetConditionCustom.cs | 6 +- .../Classes/InventorClass.cs | 12 +- SolastaUnfinishedBusiness/Feats/ArmorFeats.cs | 8 +- SolastaUnfinishedBusiness/Feats/OtherFeats.cs | 17 +- .../Interfaces/IRollSavingThrowFinished.cs | 4 +- .../Interfaces/IRollSavingThrowInitiated.cs | 4 +- .../Models/CharacterContext.cs | 11 +- .../Models/Level20SubclassesContext.cs | 23 ++- .../Patches/RulesetActorPatcher.cs | 108 ++++++++++++ .../Patches/RulesetEffectPatcher.cs | 65 ++------ .../RulesetImplementationManagerPatcher.cs | 63 ++----- .../Spells/SpellBuildersLevel04.cs | 26 ++- .../Spells/SpellBuildersLevel05.cs | 6 +- .../Builders/EldritchVersatility.cs | 20 ++- .../Subclasses/CollegeOfValiance.cs | 11 +- .../Subclasses/MartialForceKnight.cs | 18 +- .../Subclasses/MartialWarlord.cs | 4 +- .../Subclasses/RangerFeyWanderer.cs | 4 +- .../Subclasses/WizardWarMagic.cs | 6 +- 20 files changed, 395 insertions(+), 175 deletions(-) diff --git a/SolastaUnfinishedBusiness/Api/GameExtensions/RulesetActorExtensions.cs b/SolastaUnfinishedBusiness/Api/GameExtensions/RulesetActorExtensions.cs index d74d4e95f3..f276bf06f8 100644 --- a/SolastaUnfinishedBusiness/Api/GameExtensions/RulesetActorExtensions.cs +++ b/SolastaUnfinishedBusiness/Api/GameExtensions/RulesetActorExtensions.cs @@ -2,12 +2,166 @@ using System.Collections.Generic; using System.Linq; using JetBrains.Annotations; +using SolastaUnfinishedBusiness.Interfaces; +using SolastaUnfinishedBusiness.Subclasses; using static RuleDefinitions; namespace SolastaUnfinishedBusiness.Api.GameExtensions; internal static class RulesetActorExtensions { + private static void OnRollSavingThrowOath( + RulesetCharacter caster, + RulesetActor target, + BaseDefinition sourceDefinition, + string selfConditionName, + ConditionDefinition conditionDefinitionEnemy) + { + if (caster == null || + caster.Side == target.Side || + !caster.HasConditionOfCategoryAndType(AttributeDefinitions.TagEffect, selfConditionName)) + { + return; + } + + if (sourceDefinition is not SpellDefinition { castingTime: ActivationTime.Action } && + sourceDefinition is not FeatureDefinitionPower { RechargeRate: RechargeRate.ChannelDivinity } && + !caster.AllConditions.Any(x => x.Name.Contains("Smite"))) + { + return; + } + + var gameLocationCaster = GameLocationCharacter.GetFromActor(caster); + var gameLocationTarget = GameLocationCharacter.GetFromActor(target); + + if (gameLocationCaster == null || + gameLocationTarget == null || + !gameLocationCaster.IsWithinRange(gameLocationTarget, 2)) + { + return; + } + + target.InflictCondition( + conditionDefinitionEnemy.Name, + DurationType.Round, + 0, + TurnOccurenceType.StartOfTurn, + AttributeDefinitions.TagEffect, + caster.guid, + caster.CurrentFaction.Name, + 1, + conditionDefinitionEnemy.Name, + 0, + 0, + 0); + } + + internal static void MyRollSavingThrow( + this RulesetActor rulesetActorTarget, + RulesetCharacter rulesetActorCaster, + int saveBonus, + string abilityScoreName, + BaseDefinition sourceDefinition, + List modifierTrends, + List advantageTrends, + int rollModifier, + int saveDC, + bool hasHitVisual, + ref RollOutcome outcome, + ref int outcomeDelta, + List effectForms) + { + //PATCH: supports Oath of Ancients / Oath of Dread / Path of The Savagery + OnRollSavingThrowOath(rulesetActorCaster, rulesetActorTarget, sourceDefinition, + OathOfAncients.ConditionElderChampionName, + OathOfAncients.ConditionElderChampionEnemy); + OnRollSavingThrowOath(rulesetActorCaster, rulesetActorTarget, sourceDefinition, + OathOfDread.ConditionAspectOfDreadName, + OathOfDread.ConditionAspectOfDreadEnemy); + + var rulesetCharacterTarget = rulesetActorTarget as RulesetCharacter; + + //BEGIN PATCH + if (rulesetCharacterTarget != null) + { + PathOfTheSavagery.OnRollSavingThrowFuriousDefense(rulesetCharacterTarget, ref abilityScoreName); + + //PATCH: supports `OnSavingThrowInitiated` interface + foreach (var rollSavingThrowInitiated in rulesetCharacterTarget + .GetSubFeaturesByType()) + { + rollSavingThrowInitiated.OnSavingThrowInitiated( + rulesetActorCaster, + rulesetActorTarget, + ref saveBonus, + ref abilityScoreName, + sourceDefinition, + modifierTrends, + advantageTrends, + ref rollModifier, + ref saveDC, + ref hasHitVisual, + outcome, + outcomeDelta, + effectForms); + } + } + //END PATCH + + var saveRoll = rulesetActorTarget.RollDie( + DieType.D20, RollContext.SavingThrow, false, ComputeAdvantage(advantageTrends), + out var firstRoll, out var secondRoll); + + var totalRoll = saveRoll + saveBonus + rollModifier; + outcomeDelta = totalRoll - saveDC; + outcome = totalRoll < saveDC ? RollOutcome.Failure : RollOutcome.Success; + + foreach (var modifierTrend in modifierTrends) + { + if (modifierTrend.dieFlag == TrendInfoDieFlag.None || + modifierTrend is not { value: > 0, dieType: > DieType.D1 }) + { + continue; + } + + var additionalSaveDieRolled = rulesetActorTarget.AdditionalSaveDieRolled; + + additionalSaveDieRolled?.Invoke(rulesetActorTarget, modifierTrend); + } + + rulesetActorTarget.SaveRolled?.Invoke(rulesetActorTarget, abilityScoreName, sourceDefinition, outcome, saveDC, + totalRoll, + saveRoll, firstRoll, secondRoll, saveBonus + rollModifier, modifierTrends, advantageTrends, hasHitVisual); + + rulesetActorTarget.ProcessConditionsMatchingInterruption(ConditionInterruption.SavingThrow); + + //BEGIN PATCH + if (rulesetCharacterTarget == null) + { + return; + } + + //PATCH: supports `IRollSavingThrowFinished` interface + foreach (var rollSavingThrowFinished in rulesetCharacterTarget.GetSubFeaturesByType()) + { + rollSavingThrowFinished.OnSavingThrowFinished( + rulesetActorCaster, + rulesetActorTarget, + saveBonus, + abilityScoreName, + sourceDefinition, + modifierTrends, + advantageTrends, + rollModifier, + saveDC, + hasHitVisual, + ref outcome, + ref outcomeDelta, + effectForms); + } + //END PATCH + } + internal static void ModifyAttributeAndMax(this RulesetActor hero, string attributeName, int amount) { var attribute = hero.GetAttribute(attributeName); diff --git a/SolastaUnfinishedBusiness/Api/Infrastructure/RulesetConditionCustom.cs b/SolastaUnfinishedBusiness/Api/Infrastructure/RulesetConditionCustom.cs index 3578ccd851..3ad8609e11 100644 --- a/SolastaUnfinishedBusiness/Api/Infrastructure/RulesetConditionCustom.cs +++ b/SolastaUnfinishedBusiness/Api/Infrastructure/RulesetConditionCustom.cs @@ -94,13 +94,11 @@ protected static T GetFromPoolAndCopyOriginalRulesetCondition(RulesetCondition r return customCondition; } - public static bool GetCustomConditionFromCharacter( - RulesetCharacter rulesetCharacter, - out T supportCondition) + public static bool GetCustomConditionFromCharacter(RulesetActor rulesetActor, out T supportCondition) { // Main.Info($"Category is {Category}, Definition is {BindingDefinition.Name}"); supportCondition = - rulesetCharacter.TryGetConditionOfCategoryAndType(Category, BindingDefinition.Name, + rulesetActor.TryGetConditionOfCategoryAndType(Category, BindingDefinition.Name, out var rulesetCondition) ? rulesetCondition as T : null; diff --git a/SolastaUnfinishedBusiness/Classes/InventorClass.cs b/SolastaUnfinishedBusiness/Classes/InventorClass.cs index 1f604c4766..76d088c26f 100644 --- a/SolastaUnfinishedBusiness/Classes/InventorClass.cs +++ b/SolastaUnfinishedBusiness/Classes/InventorClass.cs @@ -928,8 +928,8 @@ void ReactionValidated() } public void OnSavingThrowInitiated( - RulesetCharacter caster, - RulesetCharacter defender, + RulesetActor rulesetActorCaster, + RulesetActor rulesetActorDefender, ref int saveBonus, ref string abilityScoreName, BaseDefinition sourceDefinition, @@ -942,8 +942,14 @@ public void OnSavingThrowInitiated( int outcomeDelta, List effectForms) { + if (rulesetActorDefender is not RulesetCharacter rulesetCharacter) + { + return; + } + var attunedItems = - defender.CharacterInventory?.items?.Count(x => x.AttunedToCharacter == defender.Name) ?? 0; + rulesetCharacter.CharacterInventory?.items?.Count(x => x.AttunedToCharacter == rulesetCharacter.Name) ?? + 0; rollModifier += attunedItems; modifierTrends.Add( diff --git a/SolastaUnfinishedBusiness/Feats/ArmorFeats.cs b/SolastaUnfinishedBusiness/Feats/ArmorFeats.cs index b1d34cba06..6b77a5b358 100644 --- a/SolastaUnfinishedBusiness/Feats/ArmorFeats.cs +++ b/SolastaUnfinishedBusiness/Feats/ArmorFeats.cs @@ -208,8 +208,8 @@ void ReactionValidated() // add +2 on DEX savings public void OnSavingThrowInitiated( - RulesetCharacter caster, - RulesetCharacter defender, + RulesetActor rulesetActorCaster, + RulesetActor rulesetActorDefender, ref int saveBonus, ref string abilityScoreName, BaseDefinition sourceDefinition, @@ -222,7 +222,9 @@ public void OnSavingThrowInitiated( int outcomeDelta, List effectForms) { - if (abilityScoreName != AttributeDefinitions.Dexterity || !defender.IsWearingShield()) + if (abilityScoreName != AttributeDefinitions.Dexterity || + rulesetActorDefender is not RulesetCharacter rulesetCharacterDefender || + !rulesetCharacterDefender.IsWearingShield()) { return; } diff --git a/SolastaUnfinishedBusiness/Feats/OtherFeats.cs b/SolastaUnfinishedBusiness/Feats/OtherFeats.cs index 79a17b06b2..ad7c609383 100644 --- a/SolastaUnfinishedBusiness/Feats/OtherFeats.cs +++ b/SolastaUnfinishedBusiness/Feats/OtherFeats.cs @@ -1066,8 +1066,8 @@ private sealed class CustomBehaviorDungeonDelver( ConditionDefinition conditionResistance) : IRollSavingThrowInitiated { public void OnSavingThrowInitiated( - RulesetCharacter caster, - RulesetCharacter defender, + RulesetActor rulesetActorCaster, + RulesetActor rulesetActorDefender, ref int saveBonus, ref string abilityScoreName, BaseDefinition sourceDefinition, @@ -1080,7 +1080,12 @@ public void OnSavingThrowInitiated( int outcomeDelta, List effectForms) { - if (caster is RulesetCharacterHero or RulesetCharacterMonster) + if (rulesetActorDefender is not RulesetCharacter rulesetCharacterDefender) + { + return; + } + + if (rulesetActorCaster is RulesetCharacterHero or RulesetCharacterMonster) { return; } @@ -1088,14 +1093,14 @@ public void OnSavingThrowInitiated( advantageTrends.Add( new TrendInfo(1, FeatureSourceType.Condition, conditionResistance.Name, conditionResistance)); - defender.InflictCondition( + rulesetCharacterDefender.InflictCondition( conditionResistance.Name, DurationType.Round, 0, TurnOccurenceType.EndOfTurn, AttributeDefinitions.TagEffect, - defender.guid, - defender.CurrentFaction.Name, + rulesetCharacterDefender.guid, + rulesetCharacterDefender.CurrentFaction.Name, 1, conditionResistance.Name, 0, diff --git a/SolastaUnfinishedBusiness/Interfaces/IRollSavingThrowFinished.cs b/SolastaUnfinishedBusiness/Interfaces/IRollSavingThrowFinished.cs index ad8a9a3536..e7984e8847 100644 --- a/SolastaUnfinishedBusiness/Interfaces/IRollSavingThrowFinished.cs +++ b/SolastaUnfinishedBusiness/Interfaces/IRollSavingThrowFinished.cs @@ -8,8 +8,8 @@ public interface IRollSavingThrowFinished { [UsedImplicitly] public void OnSavingThrowFinished( - RulesetCharacter caster, - RulesetCharacter defender, + RulesetActor rulesetActorCaster, + RulesetActor rulesetActorDefender, int saveBonus, string abilityScoreName, BaseDefinition sourceDefinition, diff --git a/SolastaUnfinishedBusiness/Interfaces/IRollSavingThrowInitiated.cs b/SolastaUnfinishedBusiness/Interfaces/IRollSavingThrowInitiated.cs index 69cd44da99..5ee4b6c4b2 100644 --- a/SolastaUnfinishedBusiness/Interfaces/IRollSavingThrowInitiated.cs +++ b/SolastaUnfinishedBusiness/Interfaces/IRollSavingThrowInitiated.cs @@ -8,8 +8,8 @@ public interface IRollSavingThrowInitiated { [UsedImplicitly] public void OnSavingThrowInitiated( - RulesetCharacter caster, - RulesetCharacter defender, + RulesetActor rulesetActorCaster, + RulesetActor rulesetActorDefender, ref int saveBonus, ref string abilityScoreName, BaseDefinition sourceDefinition, diff --git a/SolastaUnfinishedBusiness/Models/CharacterContext.cs b/SolastaUnfinishedBusiness/Models/CharacterContext.cs index d1d6a7fa00..bafe566426 100644 --- a/SolastaUnfinishedBusiness/Models/CharacterContext.cs +++ b/SolastaUnfinishedBusiness/Models/CharacterContext.cs @@ -1281,8 +1281,8 @@ public IEnumerator ComputeValidPositions(CursorLocationSelectPosition cursorLoca private sealed class RollSavingThrowInitiatedIndomitableSaving : IRollSavingThrowInitiated { public void OnSavingThrowInitiated( - RulesetCharacter caster, - RulesetCharacter defender, + RulesetActor rulesetActorCaster, + RulesetActor rulesetActorDefender, ref int saveBonus, ref string abilityScoreName, BaseDefinition sourceDefinition, @@ -1295,7 +1295,12 @@ public void OnSavingThrowInitiated( int outcomeDelta, List effectForms) { - var classLevel = defender.GetClassLevel(Fighter); + if (rulesetActorDefender is not RulesetCharacterHero rulesetCharacterDefender) + { + return; + } + + var classLevel = rulesetCharacterDefender.GetClassLevel(Fighter); rollModifier += classLevel; modifierTrends.Add( diff --git a/SolastaUnfinishedBusiness/Models/Level20SubclassesContext.cs b/SolastaUnfinishedBusiness/Models/Level20SubclassesContext.cs index e89bb7ed2c..6dd821b79b 100644 --- a/SolastaUnfinishedBusiness/Models/Level20SubclassesContext.cs +++ b/SolastaUnfinishedBusiness/Models/Level20SubclassesContext.cs @@ -1651,8 +1651,8 @@ public IEnumerator HandleReducedToZeroHpByMeOrAlly( private sealed class ModifySavingThrowHolyNimbus(FeatureDefinition featureDefinition) : IRollSavingThrowInitiated { public void OnSavingThrowInitiated( - RulesetCharacter caster, - RulesetCharacter defender, + RulesetActor rulesetActorCaster, + RulesetActor rulesetActorDefender, ref int saveBonus, ref string abilityScoreName, BaseDefinition sourceDefinition, @@ -1665,8 +1665,8 @@ public void OnSavingThrowInitiated( int outcomeDelta, List effectForms) { - if (abilityScoreName == AttributeDefinitions.Wisdom - && caster is RulesetCharacterMonster { CharacterFamily: "Fiend" or "Undead" }) + if (abilityScoreName == AttributeDefinitions.Wisdom && + rulesetActorCaster is RulesetCharacterMonster { CharacterFamily: "Fiend" or "Undead" }) { advantageTrends.Add( new TrendInfo(1, FeatureSourceType.CharacterFeature, featureDefinition.Name, featureDefinition)); @@ -1753,8 +1753,8 @@ private sealed class RollSavingThrowFinishedManaOverflow(FeatureDefinition featu : IRollSavingThrowFinished { public void OnSavingThrowFinished( - RulesetCharacter caster, - RulesetCharacter defender, + RulesetActor rulesetActorCaster, + RulesetActor rulesetActorDefender, int saveBonus, string abilityScoreName, BaseDefinition sourceDefinition, @@ -1767,10 +1767,15 @@ public void OnSavingThrowFinished( ref int outcomeDelta, List effectForms) { - var hero = defender.GetOriginalHero(); + if (outcome != RollOutcome.Success || + rulesetActorDefender is not RulesetCharacter rulesetCharacter) + { + return; + } + + var hero = rulesetCharacter.GetOriginalHero(); - if (outcome is not (RollOutcome.Success or RollOutcome.CriticalSuccess) || - hero == null) + if (hero == null) { return; } diff --git a/SolastaUnfinishedBusiness/Patches/RulesetActorPatcher.cs b/SolastaUnfinishedBusiness/Patches/RulesetActorPatcher.cs index 6e9d5ed757..a1e8d75688 100644 --- a/SolastaUnfinishedBusiness/Patches/RulesetActorPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/RulesetActorPatcher.cs @@ -441,6 +441,114 @@ SpellDefinition spellDefinition } } + [HarmonyPatch(typeof(RulesetActor), nameof(RulesetActor.RemoveCondition))] + [SuppressMessage("Minor Code Smell", "S101:Types should be named in PascalCase", Justification = "Patch")] + [UsedImplicitly] + public static class RemoveCondition_Patch + { + [UsedImplicitly] + public static IEnumerable Transpiler([NotNull] IEnumerable instructions) + { + var rollSavingThrowMethod = typeof(RulesetActor).GetMethod("RollSavingThrow"); + var myRollSavingThrowMethod = + typeof(RemoveCondition_Patch).GetMethod("RollSavingThrow"); + + return instructions + .ReplaceCalls(rollSavingThrowMethod, + "RulesetActor.RemoveCondition", + new CodeInstruction(OpCodes.Ldarg_1), + new CodeInstruction(OpCodes.Call, myRollSavingThrowMethod)); + } + + [UsedImplicitly] + public static void RollSavingThrow( + RulesetCharacter __instance, + int saveBonus, + string abilityScoreName, + BaseDefinition sourceDefinition, + List modifierTrends, + List advantageTrends, + int rollModifier, + int saveDC, + bool hasHitVisual, + ref RollOutcome outcome, + ref int outcomeDelta, + RulesetCondition rulesetCondition) + { + var caster = EffectHelpers.GetCharacterByGuid(rulesetCondition.SourceGuid); + var effectForms = new List(); + + rulesetCondition.BuildDummyEffectForms(effectForms); + __instance.MyRollSavingThrow( + caster, + saveBonus, + abilityScoreName, + sourceDefinition, + modifierTrends, + advantageTrends, + rollModifier, + saveDC, + hasHitVisual, + ref outcome, + ref outcomeDelta, + effectForms); + } + } + + [HarmonyPatch(typeof(RulesetActor), nameof(RulesetActor.ProcessConditionsMatchingInterruption))] + [SuppressMessage("Minor Code Smell", "S101:Types should be named in PascalCase", Justification = "Patch")] + [UsedImplicitly] + public static class ProcessConditionsMatchingInterruption_Patch + { + [UsedImplicitly] + public static IEnumerable Transpiler([NotNull] IEnumerable instructions) + { + var rollSavingThrowMethod = typeof(RulesetActor).GetMethod("RollSavingThrow"); + var myRollSavingThrowMethod = + typeof(RemoveCondition_Patch).GetMethod("RollSavingThrow"); + + return instructions + .ReplaceCalls(rollSavingThrowMethod, + "RulesetActor.ProcessConditionsMatchingInterruption", + new CodeInstruction(OpCodes.Ldloc_3), + new CodeInstruction(OpCodes.Call, myRollSavingThrowMethod)); + } + + [UsedImplicitly] + public static void RollSavingThrow( + RulesetCharacter __instance, + int saveBonus, + string abilityScoreName, + BaseDefinition sourceDefinition, + List modifierTrends, + List advantageTrends, + int rollModifier, + int saveDC, + bool hasHitVisual, + ref RollOutcome outcome, + ref int outcomeDelta, + RulesetCondition rulesetCondition) + { + var caster = EffectHelpers.GetCharacterByGuid(rulesetCondition.SourceGuid); + var effectForms = new List(); + + rulesetCondition.BuildDummyEffectForms(effectForms); + __instance.MyRollSavingThrow( + caster, + saveBonus, + abilityScoreName, + sourceDefinition, + modifierTrends, + advantageTrends, + rollModifier, + saveDC, + hasHitVisual, + ref outcome, + ref outcomeDelta, + effectForms); + } + } + [HarmonyPatch(typeof(RulesetActor), nameof(RulesetActor.RemoveConditionOfCategory))] [SuppressMessage("Minor Code Smell", "S101:Types should be named in PascalCase", Justification = "Patch")] [UsedImplicitly] diff --git a/SolastaUnfinishedBusiness/Patches/RulesetEffectPatcher.cs b/SolastaUnfinishedBusiness/Patches/RulesetEffectPatcher.cs index b2489e5bfe..e9c825c4ca 100644 --- a/SolastaUnfinishedBusiness/Patches/RulesetEffectPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/RulesetEffectPatcher.cs @@ -5,8 +5,6 @@ using JetBrains.Annotations; using SolastaUnfinishedBusiness.Api.GameExtensions; using SolastaUnfinishedBusiness.Api.Helpers; -using SolastaUnfinishedBusiness.Interfaces; -using SolastaUnfinishedBusiness.Subclasses; namespace SolastaUnfinishedBusiness.Patches; @@ -87,56 +85,19 @@ public static void RollSavingThrow( return; } - //PATCH: supports Oath of Ancients / Oath of Dread Path of The Savagery - RulesetImplementationManagerPatcher.TryRollSavingThrow_Patch.OnRollSavingThrowOath(caster, __instance, - sourceDefinition, OathOfAncients.ConditionElderChampionName, - OathOfAncients.ConditionElderChampionEnemy); - RulesetImplementationManagerPatcher.TryRollSavingThrow_Patch.OnRollSavingThrowOath(caster, __instance, - sourceDefinition, OathOfDread.ConditionAspectOfDreadName, - OathOfDread.ConditionAspectOfDreadEnemy); - PathOfTheSavagery.OnRollSavingThrowFuriousDefense(__instance, ref abilityScoreName); - - //PATCH: supports `IRollSavingThrowInitiated` interface - foreach (var rollSavingThrowInitiated in __instance.GetSubFeaturesByType()) - { - rollSavingThrowInitiated.OnSavingThrowInitiated( - caster, - __instance, - ref saveBonus, - ref abilityScoreName, - sourceDefinition, - modifierTrends, - advantageTrends, - ref rollModifier, - ref saveDC, - ref hasHitVisual, - outcome, - outcomeDelta, - effectForms); - } - - __instance.RollSavingThrow( - saveBonus, abilityScoreName, sourceDefinition, modifierTrends, advantageTrends, - rollModifier, saveDC, hasHitVisual, out outcome, out outcomeDelta); - - //PATCH: supports `IRollSavingThrowFinished` interface - foreach (var rollSavingThrowFinished in __instance.GetSubFeaturesByType()) - { - rollSavingThrowFinished.OnSavingThrowFinished( - caster, - __instance, - saveBonus, - abilityScoreName, - sourceDefinition, - modifierTrends, - advantageTrends, - rollModifier, - saveDC, - hasHitVisual, - ref outcome, - ref outcomeDelta, - effectForms); - } + __instance.MyRollSavingThrow( + caster, + saveBonus, + abilityScoreName, + sourceDefinition, + modifierTrends, + advantageTrends, + rollModifier, + saveDC, + hasHitVisual, + ref outcome, + ref outcomeDelta, + effectForms); } } } diff --git a/SolastaUnfinishedBusiness/Patches/RulesetImplementationManagerPatcher.cs b/SolastaUnfinishedBusiness/Patches/RulesetImplementationManagerPatcher.cs index fbaddd0033..b8f663395a 100644 --- a/SolastaUnfinishedBusiness/Patches/RulesetImplementationManagerPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/RulesetImplementationManagerPatcher.cs @@ -819,56 +819,19 @@ public static void RollSavingThrow( RulesetCharacter caster, List effectForms) { - //PATCH: supports Oath of Ancients / Oath of Dread Path of The Savagery - OnRollSavingThrowOath(caster, __instance, sourceDefinition, - OathOfAncients.ConditionElderChampionName, - OathOfAncients.ConditionElderChampionEnemy); - OnRollSavingThrowOath(caster, __instance, sourceDefinition, - OathOfDread.ConditionAspectOfDreadName, - OathOfDread.ConditionAspectOfDreadEnemy); - PathOfTheSavagery.OnRollSavingThrowFuriousDefense(__instance, ref abilityScoreName); - - //PATCH: supports `OnSavingThrowInitiated` interface - foreach (var rollSavingThrowInitiated in __instance.GetSubFeaturesByType()) - { - rollSavingThrowInitiated.OnSavingThrowInitiated( - caster, - __instance, - ref saveBonus, - ref abilityScoreName, - sourceDefinition, - modifierTrends, - advantageTrends, - ref rollModifier, - ref saveDC, - ref hasHitVisual, - outcome, - outcomeDelta, - effectForms); - } - - __instance.RollSavingThrow( - saveBonus, abilityScoreName, sourceDefinition, modifierTrends, advantageTrends, - rollModifier, saveDC, hasHitVisual, out outcome, out outcomeDelta); - - //PATCH: supports `IRollSavingThrowFinished` interface - foreach (var rollSavingThrowFinished in __instance.GetSubFeaturesByType()) - { - rollSavingThrowFinished.OnSavingThrowFinished( - caster, - __instance, - saveBonus, - abilityScoreName, - sourceDefinition, - modifierTrends, - advantageTrends, - rollModifier, - saveDC, - hasHitVisual, - ref outcome, - ref outcomeDelta, - effectForms); - } + __instance.MyRollSavingThrow( + caster, + saveBonus, + abilityScoreName, + sourceDefinition, + modifierTrends, + advantageTrends, + rollModifier, + saveDC, + hasHitVisual, + ref outcome, + ref outcomeDelta, + effectForms); } [UsedImplicitly] diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel04.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel04.cs index 514319516c..db2c238796 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel04.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel04.cs @@ -950,14 +950,12 @@ internal static SpellDefinition BuildAuraOfPerseverance() return spell; } - private sealed class ModifySavingThrowAuraOfPerseverance( - // ReSharper disable once SuggestBaseTypeForParameterInConstructor - SpellDefinition spellDefinition) + private sealed class ModifySavingThrowAuraOfPerseverance(SpellDefinition spellDefinition) : IRollSavingThrowInitiated { public void OnSavingThrowInitiated( - RulesetCharacter caster, - RulesetCharacter defender, + RulesetActor rulesetActorCaster, + RulesetActor rulesetActorDefender, ref int saveBonus, ref string abilityScoreName, BaseDefinition sourceDefinition, @@ -1059,8 +1057,8 @@ public void OnConditionRemoved(RulesetCharacter target, RulesetCondition ruleset } public void OnSavingThrowInitiated( - RulesetCharacter caster, - RulesetCharacter defender, + RulesetActor rulesetActorCaster, + RulesetActor rulesetActorDefender, ref int saveBonus, ref string abilityScoreName, BaseDefinition sourceDefinition, @@ -1467,8 +1465,8 @@ public void OnAttackComputeModifier(RulesetCharacter myself, } public void OnSavingThrowInitiated( - RulesetCharacter caster, - RulesetCharacter defender, + RulesetActor rulesetActorCaster, + RulesetActor rulesetActorDefender, ref int saveBonus, ref string abilityScoreName, BaseDefinition sourceDefinition, @@ -1574,8 +1572,8 @@ f is FeatureDefinitionConditionAffinity private sealed class RollSavingThrowFinishedIrresistiblePerformance : IRollSavingThrowFinished { public void OnSavingThrowFinished( - RulesetCharacter caster, - RulesetCharacter defender, + RulesetActor rulesetActorCaster, + RulesetActor rulesetActorDefender, int saveBonus, string abilityScoreName, BaseDefinition sourceDefinition, @@ -1588,14 +1586,14 @@ public void OnSavingThrowFinished( ref int outcomeDelta, List effectForms) { - if (caster == null || outcome == RollOutcome.Failure) + if (outcome == RollOutcome.Failure) { return; } - if (!defender.AllConditions.Any(x => + if (!rulesetActorDefender.AllConditions.Any(x => x.ConditionDefinition.IsSubtypeOf(ConditionDefinitions.ConditionCharmed.Name) && - x.SourceGuid == caster.Guid)) + x.SourceGuid == rulesetActorCaster?.Guid)) { return; } diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel05.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel05.cs index edceb65419..08a02ec715 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel05.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel05.cs @@ -963,8 +963,8 @@ public IEnumerator OnMagicEffectBeforeHitConfirmedOnMe( } public void OnSavingThrowFinished( - RulesetCharacter caster, - RulesetCharacter defender, + RulesetActor rulesetActorCaster, + RulesetActor rulesetActorDefender, int saveBonus, string abilityScoreName, BaseDefinition sourceDefinition, @@ -979,7 +979,7 @@ public void OnSavingThrowFinished( { if (outcome == RollOutcome.Success) { - GameLocationCharacter.GetFromActor(defender).UsedSpecialFeatures + GameLocationCharacter.GetFromActor(rulesetActorDefender).UsedSpecialFeatures .TryAdd(CircleOfMagicalNegationSavedTag, 0); } } diff --git a/SolastaUnfinishedBusiness/Subclasses/Builders/EldritchVersatility.cs b/SolastaUnfinishedBusiness/Subclasses/Builders/EldritchVersatility.cs index 654e4cc64d..72ac72857c 100644 --- a/SolastaUnfinishedBusiness/Subclasses/Builders/EldritchVersatility.cs +++ b/SolastaUnfinishedBusiness/Subclasses/Builders/EldritchVersatility.cs @@ -1340,13 +1340,23 @@ public override void SerializeAttributes(IAttributesSerializer serializer, IVers private sealed class EldritchWardSaveBonus : IRollSavingThrowInitiated { - public void OnSavingThrowInitiated(RulesetCharacter caster, RulesetCharacter defender, - ref int saveBonus, ref string abilityScoreName, BaseDefinition sourceDefinition, - List modifierTrends, List advantageTrends, ref int rollModifier, - ref int saveDC, ref bool hasHitVisual, RollOutcome outcome, int outcomeDelta, + public void OnSavingThrowInitiated( + RulesetActor rulesetActorCaster, + RulesetActor rulesetActorDefender, + ref int saveBonus, + ref string abilityScoreName, + BaseDefinition sourceDefinition, + List modifierTrends, + List advantageTrends, + ref int rollModifier, + ref int saveDC, + ref bool hasHitVisual, + RollOutcome outcome, + int outcomeDelta, List effectForms) { - GetCustomConditionFromCharacter(defender, out var supportCondition); + GetCustomConditionFromCharacter(rulesetActorDefender, out var supportCondition); + var acBonus = supportCondition.SaveBonus; rollModifier += acBonus; modifierTrends.Add(new TrendInfo(acBonus, FeatureSourceType.Condition, BindingDefinition.Name, diff --git a/SolastaUnfinishedBusiness/Subclasses/CollegeOfValiance.cs b/SolastaUnfinishedBusiness/Subclasses/CollegeOfValiance.cs index 01dd84a1d2..c84cbcaf82 100644 --- a/SolastaUnfinishedBusiness/Subclasses/CollegeOfValiance.cs +++ b/SolastaUnfinishedBusiness/Subclasses/CollegeOfValiance.cs @@ -164,12 +164,11 @@ public void MinRoll( } private sealed class RollSavingThrowFinishedDishearteningPerformance( - // ReSharper disable once SuggestBaseTypeForParameterInConstructor ConditionDefinition conditionDishearteningPerformance) : IRollSavingThrowFinished { public void OnSavingThrowFinished( - RulesetCharacter caster, - RulesetCharacter defender, + RulesetActor rulesetActorCaster, + RulesetActor rulesetActorDefender, int saveBonus, string abilityScoreName, BaseDefinition sourceDefinition, @@ -182,13 +181,13 @@ public void OnSavingThrowFinished( ref int outcomeDelta, List effectForms) { - if (outcome is RollOutcome.Failure or RollOutcome.CriticalFailure) + if (outcome == RollOutcome.Failure) { return; } // no need to check for source guid here - if (!defender.TryGetConditionOfCategoryAndType( + if (!rulesetActorDefender.TryGetConditionOfCategoryAndType( AttributeDefinitions.TagEffect, conditionDishearteningPerformance.Name, out var activeCondition)) { return; @@ -196,7 +195,7 @@ public void OnSavingThrowFinished( var bardCharacter = EffectHelpers.GetCharacterByGuid(activeCondition.SourceGuid); - defender.RemoveCondition(activeCondition); + rulesetActorDefender.RemoveCondition(activeCondition); if (bardCharacter is not { IsDeadOrDyingOrUnconscious: false }) { diff --git a/SolastaUnfinishedBusiness/Subclasses/MartialForceKnight.cs b/SolastaUnfinishedBusiness/Subclasses/MartialForceKnight.cs index ca26aa1d58..2f72b59b0f 100644 --- a/SolastaUnfinishedBusiness/Subclasses/MartialForceKnight.cs +++ b/SolastaUnfinishedBusiness/Subclasses/MartialForceKnight.cs @@ -863,8 +863,8 @@ public void OnCharacterTurnStarted(GameLocationCharacter locationCharacter) } public void OnSavingThrowInitiated( - RulesetCharacter caster, - RulesetCharacter defender, + RulesetActor rulesetActorCaster, + RulesetActor rulesetActorDefender, ref int saveBonus, ref string abilityScoreName, BaseDefinition sourceDefinition, @@ -877,12 +877,18 @@ public void OnSavingThrowInitiated( int outcomeDelta, List effectForms) { + if (rulesetActorDefender is not RulesetCharacter rulesetCharacterDefender) + { + return; + } + var changed = false; - var intelligence = ComputeBaseBonus(defender, AttributeDefinitions.Intelligence, out var intModifier); + var intelligence = + ComputeBaseBonus(rulesetCharacterDefender, AttributeDefinitions.Intelligence, out var intModifier); if (abilityScoreName == AttributeDefinitions.Wisdom) { - var wisdom = ComputeBaseBonus(defender, AttributeDefinitions.Wisdom, out _); + var wisdom = ComputeBaseBonus(rulesetCharacterDefender, AttributeDefinitions.Wisdom, out _); if (intelligence > wisdom) { @@ -893,7 +899,7 @@ public void OnSavingThrowInitiated( if (abilityScoreName == AttributeDefinitions.Charisma) { - var charisma = ComputeBaseBonus(defender, AttributeDefinitions.Charisma, out _); + var charisma = ComputeBaseBonus(rulesetCharacterDefender, AttributeDefinitions.Charisma, out _); if (intelligence > charisma) { @@ -911,7 +917,7 @@ public void OnSavingThrowInitiated( modifierTrends.RemoveAll(x => x.sourceType is FeatureSourceType.AbilityScore or FeatureSourceType.Proficiency); modifierTrends.AddRange(intModifier); - defender.LogCharacterUsedFeature(featureForceOfWill); + rulesetCharacterDefender.LogCharacterUsedFeature(featureForceOfWill); } private static int ComputeBaseBonus( diff --git a/SolastaUnfinishedBusiness/Subclasses/MartialWarlord.cs b/SolastaUnfinishedBusiness/Subclasses/MartialWarlord.cs index a57e53ec98..1829595c01 100644 --- a/SolastaUnfinishedBusiness/Subclasses/MartialWarlord.cs +++ b/SolastaUnfinishedBusiness/Subclasses/MartialWarlord.cs @@ -750,8 +750,8 @@ public void OnCharacterBattleStarted(GameLocationCharacter locationCharacter, bo } public void OnSavingThrowInitiated( - RulesetCharacter caster, - RulesetCharacter defender, + RulesetActor rulesetActorCaster, + RulesetActor rulesetActorDefender, ref int saveBonus, ref string abilityScoreName, BaseDefinition sourceDefinition, diff --git a/SolastaUnfinishedBusiness/Subclasses/RangerFeyWanderer.cs b/SolastaUnfinishedBusiness/Subclasses/RangerFeyWanderer.cs index 0f1da2ce0c..637998d468 100644 --- a/SolastaUnfinishedBusiness/Subclasses/RangerFeyWanderer.cs +++ b/SolastaUnfinishedBusiness/Subclasses/RangerFeyWanderer.cs @@ -263,8 +263,8 @@ public IEnumerator OnPowerOrSpellInitiatedByMe(CharacterActionMagicEffect action } public void OnSavingThrowInitiated( - RulesetCharacter caster, - RulesetCharacter defender, + RulesetActor rulesetActorCaster, + RulesetActor rulesetActorDefender, ref int saveBonus, ref string abilityScoreName, BaseDefinition sourceDefinition, diff --git a/SolastaUnfinishedBusiness/Subclasses/WizardWarMagic.cs b/SolastaUnfinishedBusiness/Subclasses/WizardWarMagic.cs index c66a67423e..074b82bbba 100644 --- a/SolastaUnfinishedBusiness/Subclasses/WizardWarMagic.cs +++ b/SolastaUnfinishedBusiness/Subclasses/WizardWarMagic.cs @@ -455,8 +455,8 @@ public void OnRollSavingCheckInitiated( } public void OnSavingThrowInitiated( - RulesetCharacter caster, - RulesetCharacter defender, + RulesetActor rulesetActorCaster, + RulesetActor rulesetActorDefender, ref int saveBonus, ref string abilityScoreName, BaseDefinition sourceDefinition, @@ -469,7 +469,7 @@ public void OnSavingThrowInitiated( int outcomeDelta, List effectForms) { - if (defender.ConcentratedSpell == null) + if (rulesetActorDefender is RulesetCharacter { ConcentratedSpell: null }) { return; } From ec8245c98a7dc217a250583d46af2da2c9c2802c Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sat, 31 Aug 2024 20:11:49 -0700 Subject: [PATCH 004/212] consolidate TryAlterOutcomeSavingThrow code --- .../Interfaces/ITryAlterOutcomeSavingThrow.cs | 28 +++++++++++++++- .../Patches/CharacterActionAttackPatcher.cs | 33 ++++++++----------- .../CharacterActionMagicEffectPatcher.cs | 22 ++++--------- .../CharacterActionSpendPowerPatcher.cs | 25 ++++++-------- 4 files changed, 57 insertions(+), 51 deletions(-) diff --git a/SolastaUnfinishedBusiness/Interfaces/ITryAlterOutcomeSavingThrow.cs b/SolastaUnfinishedBusiness/Interfaces/ITryAlterOutcomeSavingThrow.cs index 25bc3388cf..e317c30e6d 100644 --- a/SolastaUnfinishedBusiness/Interfaces/ITryAlterOutcomeSavingThrow.cs +++ b/SolastaUnfinishedBusiness/Interfaces/ITryAlterOutcomeSavingThrow.cs @@ -20,7 +20,33 @@ IEnumerator OnTryAlterOutcomeSavingThrow( internal static class TryAlterOutcomeSavingThrow { - internal static IEnumerable Handler( + internal static IEnumerator Handler( + GameLocationBattleManager battleManager, + CharacterAction action, + GameLocationCharacter attacker, + GameLocationCharacter defender, + ActionModifier actionModifier, + bool hasBorrowedLuck, + EffectDescription effectDescription) + { + // Legendary Resistance or Indomitable? + if (action.SaveOutcome == RuleDefinitions.RollOutcome.Failure) + { + yield return battleManager.HandleFailedSavingThrow( + action, attacker, defender, actionModifier, false, hasBorrowedLuck); + } + + //PATCH: support for `ITryAlterOutcomeSavingThrow` + foreach (var tryAlterOutcomeSavingThrow in TryAlterOutcomeSavingThrowHandler( + battleManager, action, attacker, defender, actionModifier, false, hasBorrowedLuck)) + { + yield return tryAlterOutcomeSavingThrow; + } + + defender.RulesetActor.GrantConditionOnSavingThrowOutcome(effectDescription, action.SaveOutcome, true); + } + + private static IEnumerable TryAlterOutcomeSavingThrowHandler( GameLocationBattleManager battleManager, CharacterAction action, GameLocationCharacter attacker, diff --git a/SolastaUnfinishedBusiness/Patches/CharacterActionAttackPatcher.cs b/SolastaUnfinishedBusiness/Patches/CharacterActionAttackPatcher.cs index 9213571213..dc4039f003 100644 --- a/SolastaUnfinishedBusiness/Patches/CharacterActionAttackPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/CharacterActionAttackPatcher.cs @@ -475,30 +475,25 @@ internal static IEnumerator ExecuteImpl(CharacterActionAttack __instance) // These bool information must be store as a class member, as it is passed to HandleFailedSavingThrow __instance.RolledSaveThrow = attackMode.TryRollSavingThrow( - rulesetCharacter, target.RulesetActor, attackModifier, - __instance.actualEffectForms, out var saveOutcome, out var saveOutcomeDelta); + rulesetCharacter, + target.RulesetActor, + attackModifier, + __instance.actualEffectForms, + out var saveOutcome, + out var saveOutcomeDelta); __instance.SaveOutcome = saveOutcome; __instance.SaveOutcomeDelta = saveOutcomeDelta; if (__instance.RolledSaveThrow) { - target.RulesetActor?.GrantConditionOnSavingThrowOutcome( - attackMode.EffectDescription, saveOutcome, true); - - // Legendary Resistance or Indomitable? - if (__instance.SaveOutcome == RollOutcome.Failure) - { - yield return battleManager.HandleFailedSavingThrow( - __instance, actingCharacter, target, attackModifier, false, hasBorrowedLuck); - } - - //PATCH: support for `ITryAlterOutcomeSavingThrow` - foreach (var tryAlterOutcomeSavingThrow in TryAlterOutcomeSavingThrow.Handler( - battleManager, __instance, actingCharacter, target, attackModifier, false, - hasBorrowedLuck)) - { - yield return tryAlterOutcomeSavingThrow; - } + yield return TryAlterOutcomeSavingThrow.Handler( + battleManager, + __instance, + actingCharacter, + target, + attackModifier, + hasBorrowedLuck, + attackMode.EffectDescription); } // Check for resulting actions, if any of them is a CharacterSpendPower w/ a Motion effect form, don't wait for hit animation diff --git a/SolastaUnfinishedBusiness/Patches/CharacterActionMagicEffectPatcher.cs b/SolastaUnfinishedBusiness/Patches/CharacterActionMagicEffectPatcher.cs index 8fcab7b565..e43034a21e 100644 --- a/SolastaUnfinishedBusiness/Patches/CharacterActionMagicEffectPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/CharacterActionMagicEffectPatcher.cs @@ -1194,6 +1194,7 @@ private static IEnumerator ExecuteMagicAttack( if (rulesetEffect.EffectDescription.RecurrentEffect == RecurrentEffect.No || (rulesetEffect.EffectDescription.RecurrentEffect & RecurrentEffect.OnActivation) != 0) { + // Saving throw? var hasBorrowedLuck = rulesetTarget.HasConditionOfTypeOrSubType(ConditionBorrowedLuck); __instance.RolledSaveThrow = rulesetEffect.TryRollSavingThrow( @@ -1208,27 +1209,16 @@ private static IEnumerator ExecuteMagicAttack( __instance.SaveOutcome = saveOutcome; __instance.SaveOutcomeDelta = saveOutcomeDelta; - rulesetTarget.GrantConditionOnSavingThrowOutcome( - rulesetEffect.EffectDescription, saveOutcome, false); - - // Legendary Resistance or Indomitable? - if (__instance.RolledSaveThrow && __instance.SaveOutcome == RollOutcome.Failure) + if (__instance.RolledSaveThrow) { - yield return battleManager.HandleFailedSavingThrow( + yield return TryAlterOutcomeSavingThrow.Handler( + battleManager, __instance, actingCharacter, target, attackModifier, - !needToRollDie, - hasBorrowedLuck); - } - - //PATCH: support for `ITryAlterOutcomeSavingThrow` - foreach (var tryAlterOutcomeSavingThrow in TryAlterOutcomeSavingThrow.Handler( - battleManager, __instance, actingCharacter, target, attackModifier, false, - hasBorrowedLuck)) - { - yield return tryAlterOutcomeSavingThrow; + hasBorrowedLuck, + rulesetEffect.EffectDescription); } } } diff --git a/SolastaUnfinishedBusiness/Patches/CharacterActionSpendPowerPatcher.cs b/SolastaUnfinishedBusiness/Patches/CharacterActionSpendPowerPatcher.cs index d9d0ae9dfd..31284bf9fe 100644 --- a/SolastaUnfinishedBusiness/Patches/CharacterActionSpendPowerPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/CharacterActionSpendPowerPatcher.cs @@ -126,7 +126,8 @@ private static IEnumerator ExecuteImpl(CharacterActionSpendPower __instance) if (activePower != null) { __instance.RolledSaveThrow = activePower.TryRollSavingThrow( - actingCharacter.RulesetCharacter, actingCharacter.Side, + actingCharacter.RulesetCharacter, + actingCharacter.Side, target.RulesetActor, actionModifier, activePower.EffectDescription.EffectForms, @@ -141,20 +142,14 @@ private static IEnumerator ExecuteImpl(CharacterActionSpendPower __instance) if (__instance.RolledSaveThrow) { - // Legendary Resistance or Indomitable? - if (__instance.SaveOutcome == RuleDefinitions.RollOutcome.Failure) - { - yield return battleManager.HandleFailedSavingThrow( - __instance, actingCharacter, target, actionModifier, false, hasBorrowedLuck); - } - - //PATCH: support for `ITryAlterOutcomeSavingThrow` - foreach (var tryAlterOutcomeSavingThrow in TryAlterOutcomeSavingThrow.Handler( - battleManager, __instance, actingCharacter, target, actionModifier, false, - hasBorrowedLuck)) - { - yield return tryAlterOutcomeSavingThrow; - } + yield return TryAlterOutcomeSavingThrow.Handler( + battleManager, + __instance, + actingCharacter, + target, + actionModifier, + hasBorrowedLuck, + rulesetEffect.EffectDescription); } // Apply the forms of the power From 88b43371f9a077b9c9ad81bedd5f19b5845936ad Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sun, 1 Sep 2024 20:33:35 -0700 Subject: [PATCH 005/212] refactor ITryAlterOutcomeSavingThrow to allow reactions on gadget's saves --- .../Api/DatabaseHelper-RELEASE.cs | 3 + .../CharacterActionExtensions.cs | 40 +-- .../GameExtensions/RulesetActorExtensions.cs | 19 +- .../Classes/InventorClass.cs | 37 +- SolastaUnfinishedBusiness/Feats/OtherFeats.cs | 57 +-- SolastaUnfinishedBusiness/Feats/RaceFeats.cs | 33 +- .../Interfaces/ITryAlterOutcomeSavingThrow.cs | 272 +++++++++++++- .../Patches/CharacterActionAttackPatcher.cs | 18 +- .../CharacterActionMagicEffectPatcher.cs | 54 +-- .../CharacterActionSpendPowerPatcher.cs | 20 +- .../FunctorEnvironmentEffectPatcher.cs | 338 ++++++++++++++++++ ...rSetGadgetConditionBySavingThrowPatcher.cs | 125 +++---- SolastaUnfinishedBusiness/Races/Imp.cs | 24 +- .../Builders/EldritchVersatility.cs | 23 +- .../Subclasses/CircleOfTheCosmos.cs | 53 +-- .../Subclasses/MartialRoyalKnight.cs | 45 +-- .../Subclasses/RangerFeyWanderer.cs | 18 +- .../Subclasses/RoguishOpportunist.cs | 15 +- .../Subclasses/SorcerousWildMagic.cs | 79 ++-- .../Subclasses/WizardWarMagic.cs | 19 +- 20 files changed, 939 insertions(+), 353 deletions(-) create mode 100644 SolastaUnfinishedBusiness/Patches/FunctorEnvironmentEffectPatcher.cs diff --git a/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs b/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs index 1151c55f7a..339110a7a0 100644 --- a/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs +++ b/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs @@ -291,6 +291,9 @@ internal static class CharacterSubclassDefinitions internal static class ConditionDefinitions { + internal static ConditionDefinition ConditionDomainMischiefBorrowedLuck { get; } = + GetDefinition("ConditionDomainMischiefBorrowedLuck"); + internal static ConditionDefinition ConditionSurged { get; } = GetDefinition("ConditionSurged"); diff --git a/SolastaUnfinishedBusiness/Api/GameExtensions/CharacterActionExtensions.cs b/SolastaUnfinishedBusiness/Api/GameExtensions/CharacterActionExtensions.cs index 6338c1382e..10387d3b2f 100644 --- a/SolastaUnfinishedBusiness/Api/GameExtensions/CharacterActionExtensions.cs +++ b/SolastaUnfinishedBusiness/Api/GameExtensions/CharacterActionExtensions.cs @@ -1,13 +1,26 @@ -using System; -using static RuleDefinitions; - -namespace SolastaUnfinishedBusiness.Api.GameExtensions; +namespace SolastaUnfinishedBusiness.Api.GameExtensions; internal static class CharacterActionExtensions { internal const string ShouldKeepConcentration = "ActionShouldKeepConcentration"; - // ReSharper disable once InconsistentNaming + internal static string FormatTitle(this CharacterAction action) + { + var magicEffect = action.actionParams.RulesetEffect; + + return magicEffect == null + ? Gui.Localize("Action/&AttackTitle") + : magicEffect.SourceDefinition.FormatTitle(); + } + + internal static bool ShouldKeepConcentrationOnPowerUseOrSpend(RulesetCharacter character) + { + var glc = GameLocationCharacter.GetFromActor(character); + + return glc != null && glc.UsedSpecialFeatures.ContainsKey(ShouldKeepConcentration); + } + +#if false internal static int GetSaveDC(this CharacterAction action) { var actionParams = action.actionParams; @@ -55,20 +68,5 @@ internal static int GetSaveDC(this CharacterAction action) return saveDc; } - - internal static string FormatTitle(this CharacterAction action) - { - var magicEffect = action.actionParams.RulesetEffect; - - return magicEffect == null - ? Gui.Localize("Action/&AttackTitle") - : magicEffect.SourceDefinition.FormatTitle(); - } - - internal static bool ShouldKeepConcentrationOnPowerUseOrSpend(RulesetCharacter character) - { - var glc = GameLocationCharacter.GetFromActor(character); - - return glc != null && glc.UsedSpecialFeatures.ContainsKey(ShouldKeepConcentration); - } +#endif } diff --git a/SolastaUnfinishedBusiness/Api/GameExtensions/RulesetActorExtensions.cs b/SolastaUnfinishedBusiness/Api/GameExtensions/RulesetActorExtensions.cs index f276bf06f8..9694a5dc0d 100644 --- a/SolastaUnfinishedBusiness/Api/GameExtensions/RulesetActorExtensions.cs +++ b/SolastaUnfinishedBusiness/Api/GameExtensions/RulesetActorExtensions.cs @@ -10,6 +10,8 @@ namespace SolastaUnfinishedBusiness.Api.GameExtensions; internal static class RulesetActorExtensions { + #region Saving Throw Handlers + private static void OnRollSavingThrowOath( RulesetCharacter caster, RulesetActor target, @@ -56,6 +58,11 @@ private static void OnRollSavingThrowOath( 0); } + // keep a tab on last SaveDC / SaveBonusAndRollModifier / SavingThrowAbility + internal static int SaveDC { get; private set; } + internal static int SaveBonusAndRollModifier { get; private set; } + internal static string SavingThrowAbility { get; private set; } + internal static void MyRollSavingThrow( this RulesetActor rulesetActorTarget, RulesetCharacter rulesetActorCaster, @@ -71,7 +78,7 @@ internal static void MyRollSavingThrow( ref int outcomeDelta, List effectForms) { - //PATCH: supports Oath of Ancients / Oath of Dread / Path of The Savagery + //PATCH: supports Oath of Ancients / Oath of Dread OnRollSavingThrowOath(rulesetActorCaster, rulesetActorTarget, sourceDefinition, OathOfAncients.ConditionElderChampionName, OathOfAncients.ConditionElderChampionEnemy); @@ -84,6 +91,7 @@ internal static void MyRollSavingThrow( //BEGIN PATCH if (rulesetCharacterTarget != null) { + //PATCH: supports Path of The Savagery PathOfTheSavagery.OnRollSavingThrowFuriousDefense(rulesetCharacterTarget, ref abilityScoreName); //PATCH: supports `OnSavingThrowInitiated` interface @@ -108,6 +116,11 @@ internal static void MyRollSavingThrow( } //END PATCH + // keep a tab on last SaveDC / SaveBonusAndRollModifier / SavingThrowAbility + SaveDC = saveDC; + SaveBonusAndRollModifier = saveBonus + rollModifier; + SavingThrowAbility = abilityScoreName; + var saveRoll = rulesetActorTarget.RollDie( DieType.D20, RollContext.SavingThrow, false, ComputeAdvantage(advantageTrends), out var firstRoll, out var secondRoll); @@ -162,6 +175,8 @@ internal static void MyRollSavingThrow( //END PATCH } + #endregion + internal static void ModifyAttributeAndMax(this RulesetActor hero, string attributeName, int amount) { var attribute = hero.GetAttribute(attributeName); @@ -264,7 +279,7 @@ public static IEnumerable FlattenFeatureList([NotNull] IEnume return features.SelectMany(f => f is FeatureDefinitionFeatureSet set ? FlattenFeatureList(set.FeatureSet) - : new List { f }); + : [f]); } [NotNull] diff --git a/SolastaUnfinishedBusiness/Classes/InventorClass.cs b/SolastaUnfinishedBusiness/Classes/InventorClass.cs index 76d088c26f..107a254d58 100644 --- a/SolastaUnfinishedBusiness/Classes/InventorClass.cs +++ b/SolastaUnfinishedBusiness/Classes/InventorClass.cs @@ -2,6 +2,7 @@ using System.Collections; using System.Collections.Generic; using System.Linq; +using JetBrains.Annotations; using SolastaUnfinishedBusiness.Api.GameExtensions; using SolastaUnfinishedBusiness.Api.Helpers; using SolastaUnfinishedBusiness.Api.LanguageExtensions; @@ -1004,9 +1005,10 @@ public IEnumerator OnTryAlterAttributeCheck( yield break; } + // any reaction within an attribute check flow must use the yielder as waiter yield return helper.MyReactToSpendPower( usablePower, - defender, + helper, "InventorFlashOfGeniusCheck", "SpendPowerInventorFlashOfGeniusCheckDescription".Formatted( Category.Reaction, defender.Name, helper.Name), @@ -1045,11 +1047,10 @@ void ReactionValidated() public IEnumerator OnTryAlterOutcomeSavingThrow( GameLocationBattleManager battleManager, - CharacterAction action, GameLocationCharacter attacker, GameLocationCharacter defender, GameLocationCharacter helper, - ActionModifier saveModifier, + SavingThrowData savingThrowData, bool hasHitVisual, bool hasBorrowedLuck) { @@ -1070,21 +1071,21 @@ public IEnumerator OnTryAlterOutcomeSavingThrow( var intelligence = rulesetHelper.TryGetAttributeValue(AttributeDefinitions.Intelligence); var bonus = Math.Max(AttributeDefinitions.ComputeAbilityScoreModifier(intelligence), 1); - if (!action.RolledSaveThrow || - action.SaveOutcome != RollOutcome.Failure || + if (savingThrowData.SaveOutcome != RollOutcome.Failure || + savingThrowData.SaveOutcomeDelta + bonus < 0 || !helper.CanReact() || !helper.CanPerceiveTarget(defender) || - rulesetHelper.GetRemainingUsesOfPower(usablePower) == 0 || - action.SaveOutcomeDelta + bonus < 0) + rulesetHelper.GetRemainingUsesOfPower(usablePower) == 0) { yield break; } + // any reaction within a saving flow must use the yielder as waiter yield return helper.MyReactToSpendPower( usablePower, - attacker, + helper, "InventorFlashOfGenius", - FormatReactionDescription(action, attacker, defender, helper), + FormatReactionDescription(savingThrowData.Title, attacker, defender, helper), ReactionValidated, battleManager); @@ -1092,14 +1093,11 @@ public IEnumerator OnTryAlterOutcomeSavingThrow( void ReactionValidated() { - action.SaveOutcomeDelta += bonus; + savingThrowData.SaveOutcomeDelta += bonus; + savingThrowData.SaveOutcome = + savingThrowData.SaveOutcomeDelta >= 0 ? RollOutcome.Success : RollOutcome.Failure; - if (action.SaveOutcomeDelta >= 0) - { - action.SaveOutcome = RollOutcome.Success; - } - - var extra = action.SaveOutcomeDelta >= 0 + var extra = savingThrowData.SaveOutcomeDelta >= 0 ? (ConsoleStyleDuplet.ParameterType.Positive, "Feedback/&RollCheckSuccessTitle") : (ConsoleStyleDuplet.ParameterType.Negative, "Feedback/&RollCheckFailureTitle"); @@ -1115,14 +1113,15 @@ void ReactionValidated() } private static string FormatReactionDescription( - CharacterAction action, - GameLocationCharacter attacker, + string sourceTitle, + [CanBeNull] GameLocationCharacter attacker, GameLocationCharacter defender, GameLocationCharacter helper) { var text = defender == helper ? "Self" : "Ally"; + var envTitle = Gui.Localize("Screen/&EditorLocationEnvironmentTitle"); return $"SpendPowerInventorFlashOfGeniusReactDescription{text}" - .Formatted(Category.Reaction, defender.Name, attacker.Name, action.FormatTitle()); + .Formatted(Category.Reaction, defender.Name, attacker?.Name ?? envTitle, sourceTitle); } } diff --git a/SolastaUnfinishedBusiness/Feats/OtherFeats.cs b/SolastaUnfinishedBusiness/Feats/OtherFeats.cs index ad7c609383..85cad91ca3 100644 --- a/SolastaUnfinishedBusiness/Feats/OtherFeats.cs +++ b/SolastaUnfinishedBusiness/Feats/OtherFeats.cs @@ -1984,6 +1984,7 @@ public IEnumerator OnTryAlterOutcomeAttack( yield break; } + // any reaction within an attack flow must use the attacker as waiter yield return helper.MyReactToSpendPower( usablePower, attacker, @@ -1995,6 +1996,8 @@ public IEnumerator OnTryAlterOutcomeAttack( void ReactionValidated() { + usablePower.Consume(); + var dieRoll = rulesetHelper.RollDie(DieType.D20, RollContext.None, false, AdvantageType.None, out _, out _); var previousRoll = action.AttackRoll; @@ -2067,9 +2070,10 @@ abilityCheckData.AbilityCheckRollOutcome is not (RollOutcome.Failure or RollOutc yield break; } + // any reaction within an attribute check flow must use the yielder as waiter yield return helper.MyReactToSpendPower( usablePower, - defender, + helper, "LuckyCheck", reactionValidated: ReactionValidated, battleManager: battleManager); @@ -2078,6 +2082,8 @@ abilityCheckData.AbilityCheckRollOutcome is not (RollOutcome.Failure or RollOutc void ReactionValidated() { + usablePower.Consume(); + var dieRoll = rulesetHelper.RollDie(DieType.D20, RollContext.None, false, AdvantageType.None, out _, out _); var previousRoll = abilityCheckData.AbilityCheckRoll; @@ -2117,28 +2123,27 @@ void ReactionValidated() public IEnumerator OnTryAlterOutcomeSavingThrow( GameLocationBattleManager battleManager, - CharacterAction action, GameLocationCharacter attacker, GameLocationCharacter defender, GameLocationCharacter helper, - ActionModifier saveModifier, + SavingThrowData savingThrowData, bool hasHitVisual, bool hasBorrowedLuck) { var rulesetHelper = helper.RulesetCharacter; var usablePower = PowerProvider.Get(powerLucky, rulesetHelper); - if (!action.RolledSaveThrow || - action.SaveOutcome != RollOutcome.Failure || + if (savingThrowData.SaveOutcome != RollOutcome.Failure || helper != defender || rulesetHelper.GetRemainingUsesOfPower(usablePower) == 0) { yield break; } + // any reaction within a saving flow must use the yielder as waiter yield return helper.MyReactToSpendPower( usablePower, - attacker, + helper, "LuckySaving", reactionValidated: ReactionValidated, battleManager: battleManager); @@ -2147,11 +2152,14 @@ public IEnumerator OnTryAlterOutcomeSavingThrow( void ReactionValidated() { + usablePower.Consume(); + var dieRoll = rulesetHelper.RollDie(DieType.D20, RollContext.None, false, AdvantageType.None, out _, out _); - var modifier = saveModifier.SavingThrowModifier; - var saveDC = action.GetSaveDC(); - var savingRoll = action.SaveOutcomeDelta - modifier + saveDC; + + var saveDC = savingThrowData.SaveDC; + var rollModifier = savingThrowData.SaveBonusAndRollModifier; + var savingRoll = savingThrowData.SaveOutcomeDelta - rollModifier + saveDC; if (dieRoll <= savingRoll) { @@ -2167,8 +2175,9 @@ void ReactionValidated() return; } - action.SaveOutcomeDelta += dieRoll - savingRoll; - action.SaveOutcome = action.SaveOutcomeDelta >= 0 ? RollOutcome.Success : RollOutcome.Failure; + savingThrowData.SaveOutcomeDelta += dieRoll - savingRoll; + savingThrowData.SaveOutcome = + savingThrowData.SaveOutcomeDelta >= 0 ? RollOutcome.Success : RollOutcome.Failure; rulesetHelper.LogCharacterActivatesAbility( "Feat/&FeatLuckyTitle", @@ -2287,35 +2296,33 @@ public IEnumerator OnPhysicalAttackBeforeHitConfirmedOnEnemy( public IEnumerator OnTryAlterOutcomeSavingThrow( GameLocationBattleManager battleManager, - CharacterAction action, GameLocationCharacter attacker, GameLocationCharacter defender, GameLocationCharacter helper, - ActionModifier actionModifier, + SavingThrowData savingThrowData, bool hasHitVisual, bool hasBorrowedLuck) { var rulesetHelper = helper.RulesetCharacter; var usablePower = PowerProvider.Get(PowerMageSlayerSaving, rulesetHelper); - var effectDescription = action.ActionParams.AttackMode?.EffectDescription ?? - action.ActionParams.RulesetEffect?.EffectDescription; - - if (helper != defender || - !action.RolledSaveThrow || - action.SaveOutcome != RollOutcome.Failure || + if (savingThrowData.SaveOutcome != RollOutcome.Failure || + helper != defender || rulesetHelper.GetRemainingUsesOfPower(usablePower) == 0 || - effectDescription?.savingThrowAbility is not + savingThrowData.SavingThrowAbility is not (AttributeDefinitions.Intelligence or AttributeDefinitions.Wisdom or AttributeDefinitions.Charisma)) { yield break; } + var envTitle = Gui.Localize("Screen/&EditorLocationEnvironmentTitle"); + + // any reaction within a saving flow must use the yielder as waiter yield return defender.MyReactToSpendPower( usablePower, - attacker, + defender, "MageSlayer", - "SpendPowerMageSlayerDescription".Formatted(Category.Reaction, attacker.Name), + "SpendPowerMageSlayerDescription".Formatted(Category.Reaction, attacker?.Name ?? envTitle), ReactionValidated, battleManager); @@ -2323,8 +2330,10 @@ public IEnumerator OnTryAlterOutcomeSavingThrow( void ReactionValidated() { - action.SaveOutcomeDelta = 0; - action.SaveOutcome = RollOutcome.Success; + usablePower.Consume(); + + savingThrowData.SaveOutcomeDelta = 0; + savingThrowData.SaveOutcome = RollOutcome.Success; } } diff --git a/SolastaUnfinishedBusiness/Feats/RaceFeats.cs b/SolastaUnfinishedBusiness/Feats/RaceFeats.cs index fdcef04c7f..ab71df011f 100644 --- a/SolastaUnfinishedBusiness/Feats/RaceFeats.cs +++ b/SolastaUnfinishedBusiness/Feats/RaceFeats.cs @@ -638,6 +638,7 @@ public IEnumerator OnTryAlterOutcomeAttack( yield break; } + // any reaction within an attack flow must use the attacker as waiter yield return helper.MyReactToDoNothing( ExtraActionId.DoNothingReaction, attacker, @@ -722,9 +723,10 @@ abilityCheckData.AbilityCheckRollOutcome is not (RollOutcome.Failure or RollOutc yield break; } + // any reaction within an attribute check flow must use the yielder as waiter yield return helper.MyReactToDoNothing( ExtraActionId.DoNothingReaction, - defender, + helper, "BountifulLuckCheck", "CustomReactionBountifulLuckCheckDescription".Formatted(Category.Reaction, defender.Name, helper.Name), ReactionValidated, @@ -788,16 +790,14 @@ void ReactionValidated() public IEnumerator OnTryAlterOutcomeSavingThrow( GameLocationBattleManager battleManager, - CharacterAction action, GameLocationCharacter attacker, GameLocationCharacter defender, GameLocationCharacter helper, - ActionModifier saveModifier, + SavingThrowData savingThrowData, bool hasHitVisual, bool hasBorrowedLuck) { - if (!action.RolledSaveThrow || - action.SaveOutcome != RollOutcome.Failure || + if (savingThrowData.SaveOutcome != RollOutcome.Failure || helper == defender || helper.IsOppositeSide(defender.Side) || !helper.CanReact() || @@ -807,21 +807,24 @@ public IEnumerator OnTryAlterOutcomeSavingThrow( yield break; } - var modifier = saveModifier.SavingThrowModifier; - var saveDC = action.GetSaveDC(); - var savingRoll = action.SaveOutcomeDelta - modifier + saveDC; + var saveDC = savingThrowData.SaveDC; + var rollModifier = savingThrowData.SaveBonusAndRollModifier; + var savingRoll = savingThrowData.SaveOutcomeDelta - rollModifier + saveDC; if (savingRoll != 1) { yield break; } + var envTitle = Gui.Localize("Screen/&EditorLocationEnvironmentTitle"); + + // any reaction within a saving flow must use the yielder as waiter yield return helper.MyReactToDoNothing( ExtraActionId.DoNothingReaction, - attacker, + helper, "BountifulLuckSaving", - "CustomReactionBountifulLuckSavingDescription".Formatted(Category.Reaction, defender.Name, - attacker.Name, helper.Name), + "CustomReactionBountifulLuckSavingDescription".Formatted( + Category.Reaction, defender.Name, attacker?.Name ?? envTitle, helper.Name), ReactionValidated, battleManager: battleManager); @@ -847,8 +850,9 @@ void ReactionValidated() return; } - action.SaveOutcomeDelta += dieRoll - savingRoll; - action.SaveOutcome = action.SaveOutcomeDelta >= 0 ? RollOutcome.Success : RollOutcome.Failure; + savingThrowData.SaveOutcomeDelta += dieRoll - savingRoll; + savingThrowData.SaveOutcome = + savingThrowData.SaveOutcomeDelta >= 0 ? RollOutcome.Success : RollOutcome.Failure; rulesetHelper.InflictCondition( conditionBountifulLuck.Name, @@ -1121,6 +1125,7 @@ public IEnumerator OnActionFinishedByMe(CharacterAction characterAction) yield break; } + // any reaction within a ByMe trigger should use the acting character as waiter yield return attacker.MyReactToDoNothing( ExtraActionId.DoNothingReaction, attacker, @@ -1274,6 +1279,7 @@ public IEnumerator OnMagicEffectFinishedByMe( var rulesetCharacter = attacker.RulesetCharacter; var usablePower = PowerProvider.Get(power, rulesetCharacter); + // any reaction within a ByMe trigger should use the acting character as waiter yield return attacker.MyReactToUsePower( ActionDefinitions.Id.PowerNoCost, usablePower, @@ -1815,6 +1821,7 @@ public IEnumerator OnTryAlterOutcomeAttack( yield break; } + // any reaction within an attack flow must use the attacker as waiter yield return attacker.MyReactToDoNothing( ExtraActionId.DoNothingReaction, attacker, diff --git a/SolastaUnfinishedBusiness/Interfaces/ITryAlterOutcomeSavingThrow.cs b/SolastaUnfinishedBusiness/Interfaces/ITryAlterOutcomeSavingThrow.cs index e317c30e6d..cd426fe0e4 100644 --- a/SolastaUnfinishedBusiness/Interfaces/ITryAlterOutcomeSavingThrow.cs +++ b/SolastaUnfinishedBusiness/Interfaces/ITryAlterOutcomeSavingThrow.cs @@ -2,6 +2,10 @@ using System.Linq; using JetBrains.Annotations; using SolastaUnfinishedBusiness.Api.GameExtensions; +using UnityEngine; +using static RuleDefinitions; +using static SolastaUnfinishedBusiness.Api.DatabaseHelper.ConditionDefinitions; +using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionPowers; namespace SolastaUnfinishedBusiness.Interfaces; @@ -9,49 +13,68 @@ public interface ITryAlterOutcomeSavingThrow { IEnumerator OnTryAlterOutcomeSavingThrow( GameLocationBattleManager battleManager, - CharacterAction action, - GameLocationCharacter attacker, + [CanBeNull] GameLocationCharacter attacker, GameLocationCharacter defender, GameLocationCharacter helper, - ActionModifier actionModifier, + SavingThrowData savingThrowData, bool hasHitVisual, - [UsedImplicitly] bool hasBorrowedLuck); + bool hasBorrowedLuck); +} + +public sealed class SavingThrowData +{ + public RollOutcome SaveOutcome { get; set; } + public int SaveOutcomeDelta { get; set; } + public ActionModifier SaveActionModifier { get; set; } + public string SavingThrowAbility { get; set; } + public int SaveDC { get; set; } + public int SaveBonusAndRollModifier { get; set; } + public BaseDefinition SourceDefinition { get; set; } + public EffectDescription EffectDescription { get; set; } + public string Title { get; set; } + [CanBeNull] public CharacterAction Action { get; set; } } internal static class TryAlterOutcomeSavingThrow { internal static IEnumerator Handler( GameLocationBattleManager battleManager, - CharacterAction action, - GameLocationCharacter attacker, + [CanBeNull] GameLocationCharacter attacker, GameLocationCharacter defender, - ActionModifier actionModifier, + SavingThrowData savingThrowData, bool hasBorrowedLuck, EffectDescription effectDescription) { // Legendary Resistance or Indomitable? - if (action.SaveOutcome == RuleDefinitions.RollOutcome.Failure) + if (savingThrowData.SaveOutcome == RollOutcome.Failure) { - yield return battleManager.HandleFailedSavingThrow( - action, attacker, defender, actionModifier, false, hasBorrowedLuck); + yield return HandleFailedSavingThrow( + battleManager, attacker, defender, savingThrowData, false, hasBorrowedLuck); } //PATCH: support for `ITryAlterOutcomeSavingThrow` foreach (var tryAlterOutcomeSavingThrow in TryAlterOutcomeSavingThrowHandler( - battleManager, action, attacker, defender, actionModifier, false, hasBorrowedLuck)) + battleManager, attacker, defender, savingThrowData, false, hasBorrowedLuck)) { yield return tryAlterOutcomeSavingThrow; + + if (savingThrowData.Action == null) + { + continue; + } + + savingThrowData.Action.SaveOutcome = savingThrowData.SaveOutcome; + savingThrowData.Action.SaveOutcomeDelta = savingThrowData.SaveOutcomeDelta; } - defender.RulesetActor.GrantConditionOnSavingThrowOutcome(effectDescription, action.SaveOutcome, true); + defender.RulesetActor.GrantConditionOnSavingThrowOutcome(effectDescription, savingThrowData.SaveOutcome, true); } private static IEnumerable TryAlterOutcomeSavingThrowHandler( GameLocationBattleManager battleManager, - CharacterAction action, GameLocationCharacter attacker, GameLocationCharacter defender, - ActionModifier actionModifier, + SavingThrowData savingThrowData, bool hasHitVisual, bool hasBorrowedLuck) { @@ -68,8 +91,227 @@ private static IEnumerable TryAlterOutcomeSavingThrowHandler( .GetSubFeaturesByType()) { yield return feature.OnTryAlterOutcomeSavingThrow( - battleManager, action, attacker, defender, unit, actionModifier, hasHitVisual, hasBorrowedLuck); + battleManager, attacker, defender, unit, savingThrowData, hasHitVisual, hasBorrowedLuck); + } + } + } + + internal static void TryRerollSavingThrow( + [CanBeNull] GameLocationCharacter attacker, + GameLocationCharacter defender, + SavingThrowData savingThrowData, + bool hasHitVisual) + { + var action = savingThrowData.Action; + var saveOutcome = RollOutcome.Neutral; + var saveOutcomeDelta = 0; + + // save comes from a gadget + if (action == null) + { + var actionModifier = new ActionModifier(); + var implementationService = ServiceRepository.GetService(); + + implementationService.TryRollSavingThrow( + null, + Side.Enemy, + defender.RulesetActor, + actionModifier, + false, + true, + savingThrowData.SavingThrowAbility, + savingThrowData.SaveDC, + false, + false, + false, + FeatureSourceType.Base, + [], + null, + null, + string.Empty, + savingThrowData.SourceDefinition, + string.Empty, + null, + out saveOutcome, + out saveOutcomeDelta); + } + else + { + // should never happen + if (attacker == null) + { + return; + } + + if (action.ActionParams.AttackMode != null) + { + action.ActionParams.AttackMode.TryRollSavingThrow( + attacker.RulesetCharacter, + defender.RulesetActor, + savingThrowData.SaveActionModifier, + action.ActionParams.AttackMode.EffectDescription.EffectForms, + out saveOutcome, out saveOutcomeDelta); + } + else + { + action.ActionParams.RulesetEffect?.TryRollSavingThrow( + attacker.RulesetCharacter, + attacker.Side, + defender.RulesetActor, + savingThrowData.SaveActionModifier, + action.ActionParams.RulesetEffect.EffectDescription.EffectForms, hasHitVisual, + out saveOutcome, out saveOutcomeDelta); + } + } + + savingThrowData.SaveOutcome = saveOutcome; + savingThrowData.SaveOutcomeDelta = saveOutcomeDelta; + } + + private static IEnumerator HandleFailedSavingThrow( + GameLocationBattleManager battleManager, + [CanBeNull] GameLocationCharacter attacker, + GameLocationCharacter defender, + SavingThrowData savingThrowData, + bool hasHitVisual, + bool hasBorrowedLuck) + { + var actionService = ServiceRepository.GetService(); + CharacterActionParams reactionParams; + int count; + + if (defender.HasLegendaryResistances && + defender.Side == Side.Enemy) + { + reactionParams = new CharacterActionParams(defender, ActionDefinitions.Id.UseLegendaryResistance); + count = actionService.PendingReactionRequestGroups.Count; + actionService.ReactToLegendaryResistSavingThrow(reactionParams); + + yield return battleManager.WaitForReactions(defender, actionService, count); + + if (reactionParams.ReactionValidated) + { + savingThrowData.SaveOutcome = RollOutcome.Success; } } + + if (savingThrowData.SaveOutcome == RollOutcome.Failure && + defender.HasIndomitableResistances) + { + reactionParams = new CharacterActionParams(defender, ActionDefinitions.Id.UseIndomitableResistance); + count = actionService.PendingReactionRequestGroups.Count; + actionService.ReactToIndomitableResistSavingThrow(reactionParams); + + yield return battleManager.WaitForReactions(defender, actionService, count); + + if (reactionParams.ReactionValidated) + { + TryRerollSavingThrow(attacker, defender, savingThrowData, hasHitVisual); + } + } + + if (savingThrowData.SaveOutcome == RollOutcome.Failure && + defender.CanBorrowLuck() && + !hasBorrowedLuck && + ComputeAdvantage(savingThrowData.SaveActionModifier.SavingThrowAdvantageTrends) != + AdvantageType.Disadvantage) + { + reactionParams = new CharacterActionParams(defender, ActionDefinitions.Id.BorrowLuck); + count = actionService.PendingReactionRequestGroups.Count; + actionService.ReactToBorrowLuck(reactionParams); + + yield return battleManager.WaitForReactions(defender, actionService, count); + + if (reactionParams.ReactionValidated) + { + TryRerollSavingThrow(attacker, defender, savingThrowData, hasHitVisual); + + if (savingThrowData.SaveOutcome == RollOutcome.Success) + { + defender.RulesetCharacter.AddConditionOfCategory( + AttributeDefinitions.TagCombat, + RulesetCondition.CreateActiveCondition( + defender.Guid, + ConditionDomainMischiefBorrowedLuck, + DurationType.Dispelled, + 0, + TurnOccurenceType.StartOfTurn, + defender.Guid, + defender.RulesetCharacter.CurrentFaction.Name)); + } + } + } + + if (savingThrowData.SaveOutcome == RollOutcome.Failure && + defender.CanUseDiamondSoul()) + { + reactionParams = new CharacterActionParams(defender, ActionDefinitions.Id.DiamondSoul); + count = actionService.PendingReactionRequestGroups.Count; + actionService.ReactToDiamondSoul(reactionParams); + + yield return battleManager.WaitForReactions(defender, actionService, count); + + if (reactionParams.ReactionValidated) + { + TryRerollSavingThrow(attacker, defender, savingThrowData, hasHitVisual); + } + } + + if (savingThrowData.SaveOutcome != RollOutcome.Failure) + { + yield break; + } + + battleManager.GetBestParametersForBardicDieRoll( + defender, + out var bestDie, + out _, + out var sourceCondition, + out var forceMaxRoll, + out var advantage); + + if (bestDie <= DieType.D1 || + defender.RulesetCharacter == null || + DiceMaxValue[(int)bestDie] < Mathf.Abs(savingThrowData.SaveOutcomeDelta)) + { + yield break; + } + + reactionParams = + new CharacterActionParams(defender, ActionDefinitions.Id.UseBardicInspiration) + { + IntParameter = (int)bestDie, IntParameter2 = (int)BardicInspirationUsageType.SavingThrow + }; + + var previousReactionCount = actionService.PendingReactionRequestGroups.Count; + + actionService.ReactToUseBardicInspiration(reactionParams); + + yield return battleManager.WaitForReactions(defender, actionService, previousReactionCount); + + if (!reactionParams.ReactionValidated) + { + yield break; + } + + var roll = defender.RulesetCharacter.RollBardicInspirationDie( + sourceCondition, savingThrowData.SaveOutcomeDelta, forceMaxRoll, advantage); + + savingThrowData.SaveOutcomeDelta += roll; + + var actionModifier = savingThrowData.SaveActionModifier; + + if (actionModifier != null) + { + actionModifier.SavingThrowModifier += roll; + actionModifier.SavingThrowModifierTrends.Add(new TrendInfo( + roll, FeatureSourceType.CharacterFeature, PowerBardGiveBardicInspiration.Name, null)); + } + + // change roll to success if appropriate + if (savingThrowData.SaveOutcomeDelta >= 0) + { + savingThrowData.SaveOutcome = RollOutcome.Success; + } } } diff --git a/SolastaUnfinishedBusiness/Patches/CharacterActionAttackPatcher.cs b/SolastaUnfinishedBusiness/Patches/CharacterActionAttackPatcher.cs index dc4039f003..c49a69cc85 100644 --- a/SolastaUnfinishedBusiness/Patches/CharacterActionAttackPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/CharacterActionAttackPatcher.cs @@ -481,17 +481,31 @@ internal static IEnumerator ExecuteImpl(CharacterActionAttack __instance) __instance.actualEffectForms, out var saveOutcome, out var saveOutcomeDelta); + __instance.SaveOutcome = saveOutcome; __instance.SaveOutcomeDelta = saveOutcomeDelta; if (__instance.RolledSaveThrow) { + var savingThrowData = new SavingThrowData + { + SaveActionModifier = attackModifier, + SaveOutcome = __instance.SaveOutcome, + SaveOutcomeDelta = __instance.SaveOutcomeDelta, + SaveDC = RulesetActorExtensions.SaveDC, + SaveBonusAndRollModifier = RulesetActorExtensions.SaveBonusAndRollModifier, + SavingThrowAbility = RulesetActorExtensions.SavingThrowAbility, + SourceDefinition = null, + EffectDescription = attackMode.EffectDescription, + Title = __instance.FormatTitle(), + Action = __instance + }; + yield return TryAlterOutcomeSavingThrow.Handler( battleManager, - __instance, actingCharacter, target, - attackModifier, + savingThrowData, hasBorrowedLuck, attackMode.EffectDescription); } diff --git a/SolastaUnfinishedBusiness/Patches/CharacterActionMagicEffectPatcher.cs b/SolastaUnfinishedBusiness/Patches/CharacterActionMagicEffectPatcher.cs index e43034a21e..ebf0a27481 100644 --- a/SolastaUnfinishedBusiness/Patches/CharacterActionMagicEffectPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/CharacterActionMagicEffectPatcher.cs @@ -988,7 +988,7 @@ private static IEnumerator ExecuteMagicAttack( CharacterActionMagicEffect __instance, RulesetEffect rulesetEffect, GameLocationCharacter target, - ActionModifier attackModifier, + ActionModifier actionModifier, List actualEffectForms, bool firstTarget, bool checkMagicalAttackDamage) @@ -1031,7 +1031,7 @@ private static IEnumerator ExecuteMagicAttack( rulesetEffect, actingCharacter, target, - attackModifier, + actionModifier, firstTarget, checkMagicalAttackDamage); } @@ -1045,10 +1045,10 @@ private static IEnumerator ExecuteMagicAttack( rulesetEffect, rulesetTarget, rulesetEffect.GetEffectSource(), - attackModifier.AttacktoHitTrends, - attackModifier.AttackAdvantageTrends, + actionModifier.AttacktoHitTrends, + actionModifier.AttackAdvantageTrends, false, - attackModifier.AttackRollModifier, + actionModifier.AttackRollModifier, out var outcome, out var successDelta, -1, @@ -1060,7 +1060,7 @@ private static IEnumerator ExecuteMagicAttack( if (__instance.AttackRollOutcome == RollOutcome.Failure) { yield return battleManager.HandleBardicInspirationForAttack( - __instance, actingCharacter, target, attackModifier); + __instance, actingCharacter, target, actionModifier); // BEGIN PATCH @@ -1078,7 +1078,7 @@ private static IEnumerator ExecuteMagicAttack( //PATCH: support for `ITryAlterOutcomeAttack` foreach (var tryAlterOutcomeAttack in TryAlterOutcomeAttack.HandlerNegativePriority( - battleManager, __instance, actingCharacter, target, attackModifier, null, + battleManager, __instance, actingCharacter, target, actionModifier, null, rulesetEffect)) { yield return tryAlterOutcomeAttack; @@ -1097,7 +1097,7 @@ private static IEnumerator ExecuteMagicAttack( target, null, rulesetEffect, - attackModifier, + actionModifier, __instance.AttackRoll, __instance.AttackSuccessDelta, effectDescription.RangeType == RangeType.RangeHit); @@ -1105,7 +1105,7 @@ private static IEnumerator ExecuteMagicAttack( //PATCH: support for `ITryAlterOutcomeAttack` foreach (var tryAlterOutcomeAttack in TryAlterOutcomeAttack.HandlerNonNegativePriority( - battleManager, __instance, actingCharacter, target, attackModifier, null, + battleManager, __instance, actingCharacter, target, actionModifier, null, rulesetEffect)) { yield return tryAlterOutcomeAttack; @@ -1117,10 +1117,10 @@ private static IEnumerator ExecuteMagicAttack( rulesetEffect, rulesetTarget, rulesetEffect.GetEffectSource(), - attackModifier.AttacktoHitTrends, - attackModifier.AttackAdvantageTrends, + actionModifier.AttacktoHitTrends, + actionModifier.AttackAdvantageTrends, false, - attackModifier.AttackRollModifier, + actionModifier.AttackRollModifier, out outcome, out successDelta, __instance.AttackRoll, @@ -1138,7 +1138,7 @@ private static IEnumerator ExecuteMagicAttack( __instance, actingCharacter, target, - attackModifier, + actionModifier, rulesetEffect, actualEffectForms, firstTarget, @@ -1152,9 +1152,9 @@ private static IEnumerator ExecuteMagicAttack( rulesetEffect, rulesetTarget, rulesetEffect.GetEffectSource(), - attackModifier.AttacktoHitTrends, - attackModifier.AttackAdvantageTrends, - false, attackModifier.AttackRollModifier, + actionModifier.AttacktoHitTrends, + actionModifier.AttackAdvantageTrends, + false, actionModifier.AttackRollModifier, out outcome, out successDelta, __instance.AttackRoll, @@ -1176,7 +1176,7 @@ private static IEnumerator ExecuteMagicAttack( __instance, actingCharacter, target, - attackModifier, + actionModifier, rulesetEffect, actualEffectForms, firstTarget, @@ -1201,22 +1201,36 @@ private static IEnumerator ExecuteMagicAttack( actingCharacter.RulesetCharacter, actingCharacter.Side, rulesetTarget, - attackModifier, + actionModifier, actualEffectForms, hasSavingThrowAnimation, out var saveOutcome, out var saveOutcomeDelta); + __instance.SaveOutcome = saveOutcome; __instance.SaveOutcomeDelta = saveOutcomeDelta; if (__instance.RolledSaveThrow) { + var savingThrowData = new SavingThrowData + { + SaveActionModifier = actionModifier, + SaveOutcome = __instance.SaveOutcome, + SaveOutcomeDelta = __instance.SaveOutcomeDelta, + SaveDC = RulesetActorExtensions.SaveDC, + SaveBonusAndRollModifier = RulesetActorExtensions.SaveBonusAndRollModifier, + SavingThrowAbility = RulesetActorExtensions.SavingThrowAbility, + SourceDefinition = null, + EffectDescription = rulesetEffect.EffectDescription, + Title = __instance.FormatTitle(), + Action = __instance + }; + yield return TryAlterOutcomeSavingThrow.Handler( battleManager, - __instance, actingCharacter, target, - attackModifier, + savingThrowData, hasBorrowedLuck, rulesetEffect.EffectDescription); } diff --git a/SolastaUnfinishedBusiness/Patches/CharacterActionSpendPowerPatcher.cs b/SolastaUnfinishedBusiness/Patches/CharacterActionSpendPowerPatcher.cs index 31284bf9fe..120bfadb5f 100644 --- a/SolastaUnfinishedBusiness/Patches/CharacterActionSpendPowerPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/CharacterActionSpendPowerPatcher.cs @@ -110,7 +110,7 @@ private static IEnumerator ExecuteImpl(CharacterActionSpendPower __instance) // END PATCH } - else + else if (activePower != null) { actingCharacter.RulesetCharacter.UseDevicePower(activePower.OriginItem, activePower.PowerDefinition); } @@ -134,6 +134,7 @@ private static IEnumerator ExecuteImpl(CharacterActionSpendPower __instance) false, out var saveOutcome, out var saveOutcomeDelta); + __instance.SaveOutcome = saveOutcome; __instance.SaveOutcomeDelta = saveOutcomeDelta; @@ -142,12 +143,25 @@ private static IEnumerator ExecuteImpl(CharacterActionSpendPower __instance) if (__instance.RolledSaveThrow) { + var savingThrowData = new SavingThrowData + { + SaveActionModifier = actionModifier, + SaveOutcome = __instance.SaveOutcome, + SaveOutcomeDelta = __instance.SaveOutcomeDelta, + SaveDC = RulesetActorExtensions.SaveDC, + SaveBonusAndRollModifier = RulesetActorExtensions.SaveBonusAndRollModifier, + SavingThrowAbility = RulesetActorExtensions.SavingThrowAbility, + SourceDefinition = null, + EffectDescription = rulesetEffect.EffectDescription, + Title = __instance.FormatTitle(), + Action = __instance + }; + yield return TryAlterOutcomeSavingThrow.Handler( battleManager, - __instance, actingCharacter, target, - actionModifier, + savingThrowData, hasBorrowedLuck, rulesetEffect.EffectDescription); } diff --git a/SolastaUnfinishedBusiness/Patches/FunctorEnvironmentEffectPatcher.cs b/SolastaUnfinishedBusiness/Patches/FunctorEnvironmentEffectPatcher.cs new file mode 100644 index 0000000000..50b8673085 --- /dev/null +++ b/SolastaUnfinishedBusiness/Patches/FunctorEnvironmentEffectPatcher.cs @@ -0,0 +1,338 @@ +using System.Collections; +using System.Diagnostics.CodeAnalysis; +using HarmonyLib; +using JetBrains.Annotations; +using SolastaUnfinishedBusiness.Api.GameExtensions; +using SolastaUnfinishedBusiness.Interfaces; +using TA; +using UnityEngine; + +namespace SolastaUnfinishedBusiness.Patches; + +[UsedImplicitly] +public class FunctorEnvironmentEffectPatcher +{ + //BUGFIX: vanilla only offers Bardic Inspiration during combat. This fixes that. + //code is vanilla, cleaned up by Rider, except for BEGIN / END patch block + [HarmonyPatch(typeof(FunctorEnvironmentEffect), nameof(FunctorEnvironmentEffect.Execute))] + [SuppressMessage("Minor Code Smell", "S101:Types should be named in PascalCase", Justification = "Patch")] + [UsedImplicitly] + public static class SelectCharacters_Patch + { + [UsedImplicitly] + public static bool Prefix( + out IEnumerator __result, + FunctorParametersDescription functorParameters) + { + __result = Execute(functorParameters); + + return false; + } + + private static IEnumerator TriggerEnvironmentEffectPosition( + GameLocationEnvironmentManager environmentManager, + GameLocationCharacter triggerer, + EnvironmentEffectDefinition environmentEffectDefinition, + int3 position, + int savingThrowDCOverride, + int addDice, + GameGadget sourceGadget, + bool isGlobalEnvironmentEffect) + { + var effectEnvironment = ServiceRepository.GetService() + .InstantiateEffectEnvironment(triggerer?.RulesetCharacter, environmentEffectDefinition, + savingThrowDCOverride, addDice, false, new BoxInt(), + triggerer?.LocationPosition ?? position, sourceGadget.UniqueNameId, + isGlobalEnvironmentEffect); + if (effectEnvironment.EffectDescription.TargetType == RuleDefinitions.TargetType.KindredSpirit) + { + Trace.LogError("Trying to trigger an effect targeting only the kindred spirit, not yet implemented!"); + } + else + { + var origin = new Vector3(); + + environmentManager.affectedCharacters.Clear(); + + if (effectEnvironment.EffectDescription.TargetType == RuleDefinitions.TargetType.Self) + { + environmentManager.affectedCharacters.Add(triggerer); + origin = ServiceRepository.GetService() + .GetWorldPositionFromGridPosition(position); + } + else if (effectEnvironment.EffectDescription.IsAoE) + { + var fromGridPosition = ServiceRepository.GetService() + .GetWorldPositionFromGridPosition(triggerer?.LocationPosition ?? position); + var direction = new Vector3(); + var shapeType = effectEnvironment.EffectDescription.ShapeType; + var service = ServiceRepository.GetService(); + + service.ComputeTargetingParameters( + fromGridPosition, + null, + new int3(), shapeType, + effectEnvironment.EffectDescription.RangeType, + ref origin, ref direction); + service.ComputeTargetsOfAreaOfEffect( + origin, + direction, + new Vector3(), + shapeType, + RuleDefinitions.Side.Neutral, + environmentEffectDefinition.EffectDescription, + effectEnvironment.ComputeTargetParameter(), + effectEnvironment.ComputeTargetParameter2(), + environmentManager.affectedCharacters, + false, + groundOnly: effectEnvironment.EffectDescription.AffectOnlyGround); + } + + environmentManager.EnvironmentEffectTriggered?.Invoke(effectEnvironment, origin); + + yield return TriggerEnvironmentEffect(environmentManager, effectEnvironment); + } + } + + private static IEnumerator TriggerEnvironmentEffectBox( + GameLocationEnvironmentManager environmentManager, + GameLocationCharacter triggerer, + EnvironmentEffectDefinition environmentEffectDefinition, + BoxInt boxTargetArea, + int savingThrowOverride, + int addDice, + GameGadget sourceGadget, + bool isGlobalEnvironmentEffect) + { + var effectEnvironment = ServiceRepository.GetService() + .InstantiateEffectEnvironment(triggerer?.RulesetCharacter, environmentEffectDefinition, + savingThrowOverride, addDice, true, boxTargetArea, new int3(), sourceGadget.UniqueNameId, + isGlobalEnvironmentEffect); + + environmentManager.affectedCharacters.Clear(); + + ServiceRepository.GetService().ComputeTargetsOfAreaOfEffect( + boxTargetArea, + RuleDefinitions.Side.Neutral, + environmentEffectDefinition.EffectDescription, + effectEnvironment.ComputeTargetParameter(), + effectEnvironment.ComputeTargetParameter2(), + environmentManager.affectedCharacters); + + var origin = boxTargetArea.Center - new Vector3(0.0f, boxTargetArea.Size.y / 2f, 0.0f); + + environmentManager.EnvironmentEffectTriggered?.Invoke(effectEnvironment, origin); + + yield return TriggerEnvironmentEffect(environmentManager, effectEnvironment); + } + + private static IEnumerator TriggerEnvironmentEffect( + GameLocationEnvironmentManager environmentManager, + RulesetEffectEnvironment activeEnvironmentEffect) + { + var service = ServiceRepository.GetService(); + + service.ClearDamageFormsByIndex(); + + for (var index = 0; index < environmentManager.affectedCharacters.Count; ++index) + { + var affectedCharacter = environmentManager.affectedCharacters[index]; + var recurrentEffect = activeEnvironmentEffect.EffectDescription.RecurrentEffect; + + if (recurrentEffect == RuleDefinitions.RecurrentEffect.No || + (recurrentEffect & RuleDefinitions.RecurrentEffect.OnActivation) != + RuleDefinitions.RecurrentEffect.No) + { + var actionModifier = new ActionModifier(); + var rolledSaveThrow = activeEnvironmentEffect.TryRollSavingThrow( + null, + RuleDefinitions.Side.Neutral, + affectedCharacter.RulesetActor, + actionModifier, + activeEnvironmentEffect.EffectDescription.EffectForms, + true, + out var saveOutcome, + out var saveOutcomeDelta); + + if (rolledSaveThrow) + { + var battleManager = ServiceRepository.GetService() + as GameLocationBattleManager; + var hasBorrowedLuck = affectedCharacter.RulesetActor.HasConditionOfTypeOrSubType( + RuleDefinitions.ConditionBorrowedLuck); + var savingThrowData = new SavingThrowData + { + SaveActionModifier = actionModifier, + SaveOutcome = saveOutcome, + SaveOutcomeDelta = saveOutcomeDelta, + SaveDC = RulesetActorExtensions.SaveDC, + SaveBonusAndRollModifier = RulesetActorExtensions.SaveBonusAndRollModifier, + SavingThrowAbility = RulesetActorExtensions.SavingThrowAbility, + SourceDefinition = activeEnvironmentEffect.SourceDefinition, + EffectDescription = activeEnvironmentEffect.EffectDescription, + Title = activeEnvironmentEffect.SourceDefinition.FormatTitle(), + Action = null + }; + + yield return TryAlterOutcomeSavingThrow.Handler( + battleManager, + null, + affectedCharacter, + savingThrowData, + hasBorrowedLuck, + activeEnvironmentEffect.EffectDescription); + } + + var formsParams = new RulesetImplementationDefinitions.ApplyFormsParams(); + + formsParams.FillSourceAndTarget(null, affectedCharacter.RulesetActor); + formsParams.FillFromActiveEffect(activeEnvironmentEffect); + formsParams.FillSpecialParameters( + rolledSaveThrow, activeEnvironmentEffect.AddDice, 0, 0, 0, + actionModifier, saveOutcome, saveOutcomeDelta, false, index, + environmentManager.affectedCharacters.Count, null); + formsParams.effectSourceType = RuleDefinitions.EffectSourceType.Environment; + service.ApplyEffectForms( + activeEnvironmentEffect.EffectDescription.EffectForms, + formsParams, + null, + out _, + out _, + effectApplication: activeEnvironmentEffect.EffectDescription.EffectApplication, + filters: activeEnvironmentEffect.EffectDescription.EffectFormFilters); + } + + environmentManager.EnvironmentEffectImpactTriggered?.Invoke(activeEnvironmentEffect, affectedCharacter); + } + + if (activeEnvironmentEffect.IsOnGoing()) + { + activeEnvironmentEffect.RemainingRounds = RuleDefinitions.ComputeRoundsDuration( + activeEnvironmentEffect.EffectDescription.DurationType, + activeEnvironmentEffect.EffectDescription.DurationParameter); + activeEnvironmentEffect.TerminatedSelf += environmentManager.ActiveEnvironmentEffectTerminatedSelf; + environmentManager.activeEnvironmentEffects.Add(activeEnvironmentEffect); + environmentManager.activeEnvironmentEffects.Sort((effectA, effectB) => + -(effectA.SourceDefinition is EnvironmentEffectDefinition sourceDefinition1 + ? sourceDefinition1.Priority + : 0).CompareTo(effectB.SourceDefinition is EnvironmentEffectDefinition sourceDefinition2 + ? sourceDefinition2.Priority + : 0)); + environmentManager.RegisterGlobalActiveEffect(activeEnvironmentEffect); + } + else + { + activeEnvironmentEffect.Terminate(false); + } + + service.ClearDamageFormsByIndex(); + } + + private static IEnumerator Execute( + FunctorParametersDescription functorParameters) + { + GameLocationCharacter actingCharacter = null; + + if (functorParameters.ActingCharacters.Count > 0) + { + actingCharacter = functorParameters.ActingCharacters[0]; + } + + var environmentManager = + ServiceRepository.GetService() as GameLocationEnvironmentManager; + + if (!environmentManager) + { + Trace.LogError("Missing environmentService in FunctorEnvironmentEffect"); + } + else + { + var positioningService = ServiceRepository.GetService(); + var rulesetImplementationService = ServiceRepository.GetService(); + + while (rulesetImplementationService.IsApplyingEffects()) + { + yield return null; + } + + if (functorParameters.IsGlobalEnvironmentEffect) + { + yield return TriggerEnvironmentEffectPosition( + environmentManager, + actingCharacter, + functorParameters.EnvironmentEffectDefinition, + int3.zero, + functorParameters.SavingThrowOverride, + functorParameters.AddDice, + functorParameters.SourceGadget.GameGadget, + functorParameters.IsGlobalEnvironmentEffect); + } + + if (functorParameters.BoxColliders.Count > 0) + { + foreach (var t in functorParameters.BoxColliders) + { + if (!t) + { + continue; + } + + var min = t.bounds.min; + var max = t.bounds.max; + + yield return TriggerEnvironmentEffectBox( + environmentManager, + actingCharacter, + functorParameters.EnvironmentEffectDefinition, + new BoxInt( + new int3( + Mathf.RoundToInt(min.x), + Mathf.RoundToInt(min.y), + Mathf.RoundToInt(min.z)), + new int3( + Mathf.RoundToInt(max.x) - 1, + Mathf.RoundToInt(max.y) - 1, + Mathf.RoundToInt(max.z) - 1)), + functorParameters.SavingThrowOverride, + functorParameters.AddDice, + functorParameters.SourceGadget.GameGadget, + functorParameters.IsGlobalEnvironmentEffect); + } + } + + if (functorParameters.Nodes.Count > 0) + { + // ReSharper disable once ForeachCanBePartlyConvertedToQueryUsingAnotherGetEnumerator + foreach (var t in functorParameters.Nodes) + { + if (t) + { + yield return TriggerEnvironmentEffectPosition( + environmentManager, + actingCharacter, + functorParameters.EnvironmentEffectDefinition, + positioningService.GetGridPositionFromWorldPosition(t.transform), + functorParameters.SavingThrowOverride, + functorParameters.AddDice, + functorParameters.SourceGadget.GameGadget, + functorParameters.IsGlobalEnvironmentEffect); + } + } + } + + if (functorParameters.Nodes.Empty() && functorParameters.BoxColliders.Empty()) + { + yield return TriggerEnvironmentEffectPosition( + environmentManager, + actingCharacter, + functorParameters.EnvironmentEffectDefinition, + positioningService.GetGridPositionFromWorldPosition(functorParameters.SourceGadget.transform), + functorParameters.SavingThrowOverride, + functorParameters.AddDice, + functorParameters.SourceGadget.GameGadget, + functorParameters.IsGlobalEnvironmentEffect); + } + } + } + } +} diff --git a/SolastaUnfinishedBusiness/Patches/FunctorSetGadgetConditionBySavingThrowPatcher.cs b/SolastaUnfinishedBusiness/Patches/FunctorSetGadgetConditionBySavingThrowPatcher.cs index baaa30b09c..43db339378 100644 --- a/SolastaUnfinishedBusiness/Patches/FunctorSetGadgetConditionBySavingThrowPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/FunctorSetGadgetConditionBySavingThrowPatcher.cs @@ -1,12 +1,11 @@ -#if false -using System; +using System; using System.Collections; -using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using HarmonyLib; using JetBrains.Annotations; +using SolastaUnfinishedBusiness.Api.GameExtensions; +using SolastaUnfinishedBusiness.Builders; using SolastaUnfinishedBusiness.Interfaces; -using UnityEngine; namespace SolastaUnfinishedBusiness.Patches; @@ -21,6 +20,10 @@ public static class FunctorSetGadgetConditionBySavingThrowPatcher [UsedImplicitly] public static class SelectCharacters_Patch { + private static readonly EffectDescription EmptyEffectDescription = EffectDescriptionBuilder + .Create() + .Build(); + [UsedImplicitly] public static bool Prefix( out IEnumerator __result, @@ -58,12 +61,10 @@ private static IEnumerator ExecuteSaveOnCharacter( var actionModifier = new ActionModifier(); var implementationService = ServiceRepository.GetService(); - var effectFormList = new List(); var rulesetCharacter = actingCharacter.RulesetCharacter; var abilityScoreName = functorParameters.AbilityCheck.AbilityScoreName; var gadgetDefinition = functorParameters.GadgetDefinition; - - implementationService.TryRollSavingThrow( + var rolledSavingThrow = implementationService.TryRollSavingThrow( null, RuleDefinitions.Side.Enemy, rulesetCharacter, @@ -76,99 +77,69 @@ private static IEnumerator ExecuteSaveOnCharacter( false, false, RuleDefinitions.FeatureSourceType.Base, - effectFormList, + EmptyEffectDescription.EffectForms, null, null, string.Empty, gadgetDefinition, string.Empty, null, - out var outcome, + out var saveOutcome, out var saveOutcomeDelta); var worldGadget = !functorParameters.BoolParameter ? functorParameters.TargetGadget : functorParameters.SourceGadget; - var battleManager = ServiceRepository.GetService() - as GameLocationBattleManager; - - if (outcome == RuleDefinitions.RollOutcome.Failure) + if (rolledSavingThrow) { - battleManager!.GetBestParametersForBardicDieRoll( - actingCharacter, - out var bestDie, - out _, - out var sourceCondition, - out var forceMaxRoll, - out var advantage); - - if (bestDie > RuleDefinitions.DieType.D1 && - actingCharacter.RulesetCharacter != null) + var battleManager = ServiceRepository.GetService() + as GameLocationBattleManager; + var hasBorrowedLuck = + rulesetCharacter.HasConditionOfTypeOrSubType(RuleDefinitions.ConditionBorrowedLuck); + var savingThrowData = new SavingThrowData { - // Is the die enough to overcome the failure? - if (RuleDefinitions.DiceMaxValue[(int)bestDie] >= Mathf.Abs(saveOutcomeDelta)) - { - var reactionParams = - new CharacterActionParams(actingCharacter, - ActionDefinitions.Id.UseBardicInspiration) - { - IntParameter = (int)bestDie, - IntParameter2 = (int)RuleDefinitions.BardicInspirationUsageType.SavingThrow - }; - - var actionService = ServiceRepository.GetService(); - var previousReactionCount = actionService.PendingReactionRequestGroups.Count; - - actionService.ReactToUseBardicInspiration(reactionParams); - - yield return battleManager.WaitForReactions(actingCharacter, actionService, - previousReactionCount); - - if (reactionParams.ReactionValidated) - { - // Now we have a shot at succeeding on the ability check - var roll = actingCharacter.RulesetCharacter.RollBardicInspirationDie( - sourceCondition, saveOutcomeDelta, forceMaxRoll, advantage); - - if (roll >= Mathf.Abs(saveOutcomeDelta)) - { - // The roll is now a success! - outcome = RuleDefinitions.RollOutcome.Success; - } - } - } - } + SaveActionModifier = actionModifier, + SaveOutcome = saveOutcome, + SaveOutcomeDelta = saveOutcomeDelta, + SaveDC = RulesetActorExtensions.SaveDC, + SaveBonusAndRollModifier = RulesetActorExtensions.SaveBonusAndRollModifier, + SavingThrowAbility = RulesetActorExtensions.SavingThrowAbility, + SourceDefinition = gadgetDefinition, + EffectDescription = EmptyEffectDescription, + Title = gadgetDefinition.FormatTitle(), + Action = null + }; + + yield return TryAlterOutcomeSavingThrow.Handler( + battleManager, + null, + actingCharacter, + savingThrowData, + hasBorrowedLuck, + EmptyEffectDescription); } - //PATCH: support for `ITryAlterOutcomeAttributeCheck` - // foreach (var tryAlterOutcomeSavingThrow in TryAlterOutcomeSavingThrow.Handler( - // battleManager, null, actingCharacter, null, new ActionModifier(), true, false)) - // { - // yield return tryAlterOutcomeSavingThrow; - // } - - //END PATCH - - if (outcome is RuleDefinitions.RollOutcome.Success or RuleDefinitions.RollOutcome.CriticalSuccess) + if (saveOutcome == RuleDefinitions.RollOutcome.Success) { - var conditionIndex = Array.IndexOf(worldGadget.ConditionChoices(), - functorParameters.TargetConditionState.name); - worldGadget.GameGadget.SetCondition(conditionIndex, functorParameters.TargetConditionState.state, + var conditionIndex = Array.IndexOf( + worldGadget.ConditionChoices(), functorParameters.TargetConditionState.name); + + worldGadget.GameGadget.SetCondition( + conditionIndex, + functorParameters.TargetConditionState.state, functorParameters.ActingCharacters); - yield break; } - - // ReSharper disable once InvertIf - if (functorParameters.HasAlternateTargetConditionState) + else if (functorParameters.HasAlternateTargetConditionState) { - var conditionIndex = Array.IndexOf(worldGadget.ConditionChoices(), - functorParameters.AlternateTargetConditionState.name); - worldGadget.GameGadget.SetCondition(conditionIndex, + var conditionIndex = Array.IndexOf( + worldGadget.ConditionChoices(), functorParameters.AlternateTargetConditionState.name); + + worldGadget.GameGadget.SetCondition( + conditionIndex, functorParameters.AlternateTargetConditionState.state, functorParameters.ActingCharacters); } } } } -#endif diff --git a/SolastaUnfinishedBusiness/Races/Imp.cs b/SolastaUnfinishedBusiness/Races/Imp.cs index 97fd0ba3c1..2c2f589e2b 100644 --- a/SolastaUnfinishedBusiness/Races/Imp.cs +++ b/SolastaUnfinishedBusiness/Races/Imp.cs @@ -603,6 +603,7 @@ public IEnumerator OnTryAlterOutcomeAttack( yield break; } + // any reaction within an attack flow must use the attacker as waiter yield return attacker.MyReactToSpendPower( usablePower, attacker, @@ -625,28 +626,28 @@ void ReactionValidated() public IEnumerator OnTryAlterOutcomeSavingThrow( GameLocationBattleManager battleManager, - CharacterAction action, GameLocationCharacter attacker, GameLocationCharacter defender, GameLocationCharacter helper, - ActionModifier actionModifier, - bool hasHitVisual, [UsedImplicitly] bool hasBorrowedLuck) + SavingThrowData savingThrowData, + bool hasHitVisual, + bool hasBorrowedLuck) { var rulesetHelper = helper.RulesetCharacter; var usablePower = PowerProvider.Get(powerImpBadlandDrawInspiration, rulesetHelper); if (helper != defender || - !action.RolledSaveThrow || - action.SaveOutcome != RollOutcome.Failure || - rulesetHelper.GetRemainingUsesOfPower(usablePower) == 0 || - action.SaveOutcomeDelta < -InspirationValue) + savingThrowData.SaveOutcome != RollOutcome.Failure || + savingThrowData.SaveOutcomeDelta + InspirationValue < 0 || + rulesetHelper.GetRemainingUsesOfPower(usablePower) == 0) { yield break; } - yield return defender.MyReactToSpendPower( + // any reaction within a saving flow must use the yielder as waiter + yield return helper.MyReactToSpendPower( usablePower, - attacker, + helper, "DrawInspiration", reactionValidated: ReactionValidated, battleManager: battleManager); @@ -655,9 +656,8 @@ public IEnumerator OnTryAlterOutcomeSavingThrow( void ReactionValidated() { - action.RolledSaveThrow = true; - action.SaveOutcomeDelta = 0; - action.SaveOutcome = RollOutcome.Success; + savingThrowData.SaveOutcomeDelta = 0; + savingThrowData.SaveOutcome = RollOutcome.Success; } } } diff --git a/SolastaUnfinishedBusiness/Subclasses/Builders/EldritchVersatility.cs b/SolastaUnfinishedBusiness/Subclasses/Builders/EldritchVersatility.cs index 72ac72857c..578358dcd7 100644 --- a/SolastaUnfinishedBusiness/Subclasses/Builders/EldritchVersatility.cs +++ b/SolastaUnfinishedBusiness/Subclasses/Builders/EldritchVersatility.cs @@ -1074,6 +1074,7 @@ public IEnumerator OnTryAlterOutcomeAttack( yield break; } + // any reaction within an attack flow must use the attacker as waiter yield return helper.MyReactToDoNothing( ExtraActionId.DoNothingReaction, attacker, @@ -1193,16 +1194,14 @@ private class EldritchWardAidSave : ITryAlterOutcomeSavingThrow { public IEnumerator OnTryAlterOutcomeSavingThrow( GameLocationBattleManager battleManager, - CharacterAction action, GameLocationCharacter attacker, GameLocationCharacter defender, GameLocationCharacter helper, - ActionModifier saveModifier, + SavingThrowData savingThrowData, bool hasHitVisual, bool hasBorrowedLuck) { - if (!action.RolledSaveThrow || - action.SaveOutcome != RollOutcome.Failure || + if (savingThrowData.SaveOutcome != RollOutcome.Failure || helper.IsOppositeSide(defender.Side)) { yield break; @@ -1224,7 +1223,7 @@ public IEnumerator OnTryAlterOutcomeSavingThrow( yield break; } - var requiredSaveAddition = -action.SaveOutcomeDelta; + var requiredSaveAddition = -savingThrowData.SaveOutcomeDelta; var modifier = GetAbilityScoreModifier(helperCharacter, AttributeDefinitions.Wisdom, supportCondition); var console = Gui.Game.GameConsole; var entry = @@ -1236,7 +1235,7 @@ public IEnumerator OnTryAlterOutcomeSavingThrow( console.AddCharacterEntry(helperCharacter, entry); entry.AddParameter(ConsoleStyleDuplet.ParameterType.Positive, $"{requiredSaveAddition}"); entry.AddParameter(ConsoleStyleDuplet.ParameterType.SuccessfulRoll, - Gui.Format(GameConsole.SaveSuccessOutcome, action.GetSaveDC().ToString())); + Gui.Format(GameConsole.SaveSuccessOutcome, savingThrowData.SaveDC.ToString())); if (alreadyWarded) { @@ -1252,8 +1251,8 @@ public IEnumerator OnTryAlterOutcomeSavingThrow( } eldritchWardSupportCondition.SaveBonus += requiredSaveAddition; - action.SaveOutcome = RollOutcome.Success; - action.SaveOutcomeDelta = 0; + savingThrowData.SaveOutcome = RollOutcome.Success; + savingThrowData.SaveOutcomeDelta = 0; console.AddEntry(entry); yield break; @@ -1266,9 +1265,10 @@ public IEnumerator OnTryAlterOutcomeSavingThrow( yield break; } + // any reaction within a saving flow must use the yielder as waiter yield return helper.MyReactToDoNothing( ExtraActionId.DoNothingReaction, - attacker, + helper, "EldritchWard", "CustomReactionEldritchWard".Formatted(Category.Reaction, defender.Name), ReactionValidated, @@ -1288,8 +1288,9 @@ void ReactionValidated() defenderCharacter, out eldritchWardSupportCondition); eldritchWardSupportCondition.SaveBonus = requiredSaveAddition; - action.SaveOutcome = RollOutcome.Success; - action.SaveOutcomeDelta = 0; + savingThrowData.SaveOutcomeDelta = 0; + savingThrowData.SaveOutcome = RollOutcome.Success; + console.AddEntry(entry); } } diff --git a/SolastaUnfinishedBusiness/Subclasses/CircleOfTheCosmos.cs b/SolastaUnfinishedBusiness/Subclasses/CircleOfTheCosmos.cs index 85ebffd351..6d06257ceb 100644 --- a/SolastaUnfinishedBusiness/Subclasses/CircleOfTheCosmos.cs +++ b/SolastaUnfinishedBusiness/Subclasses/CircleOfTheCosmos.cs @@ -810,6 +810,7 @@ public IEnumerator OnTryAlterOutcomeAttack( yield break; } + // any reaction within an attack flow must use the attacker as waiter yield return helper.MyReactToSpendPower( usablePower, attacker, @@ -872,9 +873,10 @@ public IEnumerator OnTryAlterAttributeCheck( yield break; } + // any reaction within an attribute check flow must use the yielder as waiter yield return helper.MyReactToSpendPower( usablePower, - defender, + helper, "WealCosmosOmenCheck", "SpendPowerWealCosmosOmenCheckDescription".Formatted( Category.Reaction, defender.Name, helper.Name), @@ -922,20 +924,17 @@ void ReactionValidated() public IEnumerator OnTryAlterOutcomeSavingThrow( GameLocationBattleManager battleManager, - CharacterAction action, GameLocationCharacter attacker, GameLocationCharacter defender, GameLocationCharacter helper, - ActionModifier saveModifier, + SavingThrowData savingThrowData, bool hasHitVisual, bool hasBorrowedLuck) { var rulesetHelper = helper.RulesetCharacter; var usablePower = PowerProvider.Get(powerPool, rulesetHelper); - if (!action.RolledSaveThrow || - action.SaveOutcome != RollOutcome.Failure || - action.SaveOutcomeDelta + MaxDieTypeValue < 0 || + if (savingThrowData.SaveOutcomeDelta + MaxDieTypeValue < 0 || !helper.CanReact() || helper.IsOppositeSide(defender.Side) || !helper.IsWithinRange(defender, 6) || @@ -945,12 +944,15 @@ public IEnumerator OnTryAlterOutcomeSavingThrow( yield break; } + var envTitle = Gui.Localize("Screen/&EditorLocationEnvironmentTitle"); + + // any reaction within a saving flow must use the yielder as waiter yield return helper.MyReactToSpendPower( usablePower, - attacker, + helper, "WealCosmosOmenSaving", "SpendPowerWealCosmosOmenSavingDescription".Formatted( - Category.Reaction, defender.Name, attacker.Name, helper.Name), + Category.Reaction, defender.Name, attacker?.Name ?? envTitle, helper.Name), ReactionValidated, battleManager); @@ -960,18 +962,18 @@ void ReactionValidated() { var dieRoll = rulesetHelper.RollDie(DieType, RollContext.None, false, AdvantageType.None, out _, out _); - action.RolledSaveThrow = true; - action.SaveOutcomeDelta += dieRoll; + savingThrowData.SaveOutcomeDelta += dieRoll; (ConsoleStyleDuplet.ParameterType, string) extra; - if (action.SaveOutcomeDelta >= 0) + if (savingThrowData.SaveOutcomeDelta >= 0) { - action.SaveOutcome = RollOutcome.Success; + savingThrowData.SaveOutcome = RollOutcome.Success; extra = (ConsoleStyleDuplet.ParameterType.Positive, "Feedback/&RollCheckSuccessTitle"); } else { + savingThrowData.SaveOutcome = RollOutcome.Failure; extra = (ConsoleStyleDuplet.ParameterType.Negative, "Feedback/&RollCheckFailureTitle"); } @@ -1025,6 +1027,7 @@ public IEnumerator OnTryAlterOutcomeAttack( yield break; } + // any reaction within an attack flow must use the attacker as waiter yield return helper.MyReactToSpendPower( usablePower, attacker, @@ -1088,9 +1091,10 @@ abilityCheckData.AbilityCheckRollOutcome is not (RollOutcome.Success or RollOutc yield break; } + // any reaction within an attribute check flow must use the yielder as waiter yield return helper.MyReactToSpendPower( usablePower, - defender, + helper, "WoeCosmosOmenCheck", "SpendPowerWoeCosmosOmenCheckDescription".Formatted( Category.Reaction, defender.Name, helper.Name), @@ -1139,20 +1143,18 @@ void ReactionValidated() public IEnumerator OnTryAlterOutcomeSavingThrow( GameLocationBattleManager battleManager, - CharacterAction action, GameLocationCharacter attacker, GameLocationCharacter defender, GameLocationCharacter helper, - ActionModifier saveModifier, + SavingThrowData savingThrowData, bool hasHitVisual, bool hasBorrowedLuck) { var rulesetHelper = helper.RulesetCharacter; var usablePower = PowerProvider.Get(powerPool, rulesetHelper); - if (!action.RolledSaveThrow || - action.SaveOutcome != RollOutcome.Success || - action.SaveOutcomeDelta - MaxDieTypeValue >= 0 || + if (savingThrowData.SaveOutcome != RollOutcome.Success || + savingThrowData.SaveOutcomeDelta - MaxDieTypeValue >= 0 || !helper.CanReact() || !helper.IsOppositeSide(defender.Side) || !helper.IsWithinRange(defender, 6) || @@ -1162,12 +1164,15 @@ public IEnumerator OnTryAlterOutcomeSavingThrow( yield break; } + var envTitle = Gui.Localize("Screen/&EditorLocationEnvironmentTitle"); + + // any reaction within a saving flow must use the yielder as waiter yield return helper.MyReactToSpendPower( usablePower, - attacker, + helper, "WoeCosmosOmenSaving", "SpendPowerWoeCosmosOmenSavingDescription".Formatted( - Category.Reaction, defender.Name, attacker.Name, helper.Name), + Category.Reaction, defender.Name, attacker?.Name ?? envTitle, helper.Name), ReactionValidated, battleManager); @@ -1178,18 +1183,18 @@ void ReactionValidated() var dieRoll = -rulesetHelper.RollDie(DieType, RollContext.None, false, AdvantageType.None, out _, out _); - action.RolledSaveThrow = true; - action.SaveOutcomeDelta += dieRoll; + savingThrowData.SaveOutcomeDelta += dieRoll; (ConsoleStyleDuplet.ParameterType, string) extra; - if (action.SaveOutcomeDelta < 0) + if (savingThrowData.SaveOutcomeDelta < 0) { - action.SaveOutcome = RollOutcome.Failure; + savingThrowData.SaveOutcome = RollOutcome.Failure; extra = (ConsoleStyleDuplet.ParameterType.Negative, "Feedback/&RollCheckFailureTitle"); } else { + savingThrowData.SaveOutcome = RollOutcome.Success; extra = (ConsoleStyleDuplet.ParameterType.Positive, "Feedback/&RollCheckSuccessTitle"); } diff --git a/SolastaUnfinishedBusiness/Subclasses/MartialRoyalKnight.cs b/SolastaUnfinishedBusiness/Subclasses/MartialRoyalKnight.cs index 6cd41b12b6..0702f4ec45 100644 --- a/SolastaUnfinishedBusiness/Subclasses/MartialRoyalKnight.cs +++ b/SolastaUnfinishedBusiness/Subclasses/MartialRoyalKnight.cs @@ -233,11 +233,10 @@ private class TryAlterOutcomeSavingThrowInspiringProtection(FeatureDefinitionPow { public IEnumerator OnTryAlterOutcomeSavingThrow( GameLocationBattleManager battleManager, - CharacterAction action, GameLocationCharacter attacker, GameLocationCharacter defender, GameLocationCharacter helper, - ActionModifier saveModifier, + SavingThrowData savingThrowData, bool hasHitVisual, bool hasBorrowedLuck) { @@ -252,25 +251,25 @@ public IEnumerator OnTryAlterOutcomeSavingThrow( yield break; } - RulesetEntity.TryGetEntity(activeCondition.SourceGuid, out var rulesetOriginalHelper); + RulesetEntity.TryGetEntity(activeCondition.SourceGuid, out var rulesetHelper); - var originalHelper = GameLocationCharacter.GetFromActor(rulesetOriginalHelper); - var usablePower = PowerProvider.Get(powerInspiringProtection, rulesetOriginalHelper); + var originalHelper = GameLocationCharacter.GetFromActor(rulesetHelper); + var usablePower = PowerProvider.Get(powerInspiringProtection, rulesetHelper); - if (!action.RolledSaveThrow || - action.SaveOutcome != RollOutcome.Failure || + if (savingThrowData.SaveOutcome != RollOutcome.Failure || !originalHelper.CanReact() || !originalHelper.CanPerceiveTarget(defender) || - rulesetOriginalHelper.GetRemainingUsesOfPower(usablePower) == 0) + rulesetHelper.GetRemainingUsesOfPower(usablePower) == 0) { yield break; } + // any reaction within a saving flow must use the yielder as waiter yield return originalHelper.MyReactToSpendPower( usablePower, - attacker, + originalHelper, "RoyalKnightInspiringProtection", - FormatReactionDescription(action, attacker, defender, originalHelper), + FormatReactionDescription(savingThrowData.Title, attacker, defender, originalHelper), ReactionValidated, battleManager); @@ -278,36 +277,22 @@ public IEnumerator OnTryAlterOutcomeSavingThrow( void ReactionValidated() { - rulesetOriginalHelper.UsePower(usablePower); - - action.RolledSaveThrow = action.ActionParams.RulesetEffect == null - ? action.ActionParams.AttackMode.TryRollSavingThrow( - attacker.RulesetCharacter, - defender.RulesetActor, - saveModifier, action.ActionParams.AttackMode.EffectDescription.EffectForms, - out var saveOutcome, out var saveOutcomeDelta) - : action.ActionParams.RulesetEffect.TryRollSavingThrow( - attacker.RulesetCharacter, - attacker.Side, - defender.RulesetActor, - saveModifier, action.ActionParams.RulesetEffect.EffectDescription.EffectForms, hasHitVisual, - out saveOutcome, out saveOutcomeDelta); - - action.SaveOutcome = saveOutcome; - action.SaveOutcomeDelta = saveOutcomeDelta; + rulesetHelper.UsePower(usablePower); + TryAlterOutcomeSavingThrow.TryRerollSavingThrow(attacker, defender, savingThrowData, hasHitVisual); } } private static string FormatReactionDescription( - CharacterAction action, - GameLocationCharacter attacker, + string sourceTitle, + [CanBeNull] GameLocationCharacter attacker, GameLocationCharacter defender, GameLocationCharacter helper) { var text = defender == helper ? "Self" : "Ally"; + var envTitle = Gui.Localize("Screen/&EditorLocationEnvironmentTitle"); return $"SpendPowerRoyalKnightInspiringProtectionDescription{text}" - .Formatted(Category.Reaction, defender.Name, attacker.Name, action.FormatTitle()); + .Formatted(Category.Reaction, defender.Name, attacker?.Name ?? envTitle, sourceTitle); } } } diff --git a/SolastaUnfinishedBusiness/Subclasses/RangerFeyWanderer.cs b/SolastaUnfinishedBusiness/Subclasses/RangerFeyWanderer.cs index 637998d468..69edadd394 100644 --- a/SolastaUnfinishedBusiness/Subclasses/RangerFeyWanderer.cs +++ b/SolastaUnfinishedBusiness/Subclasses/RangerFeyWanderer.cs @@ -286,22 +286,17 @@ public void OnSavingThrowInitiated( public IEnumerator OnTryAlterOutcomeSavingThrow( GameLocationBattleManager battleManager, - CharacterAction action, GameLocationCharacter attacker, GameLocationCharacter defender, GameLocationCharacter helper, - ActionModifier actionModifier, + SavingThrowData savingThrowData, bool hasHitVisual, bool hasBorrowedLuck) { - if (!action.RolledSaveThrow || - action.SaveOutcome != RollOutcome.Success || - !HasCharmedOrFrightened( - action.ActionParams.activeEffect?.EffectDescription.EffectForms ?? - action.ActionParams.AttackMode?.EffectDescription.EffectForms ?? - []) || + if (savingThrowData.SaveOutcome != RollOutcome.Success || + !HasCharmedOrFrightened(savingThrowData.EffectDescription.EffectForms) || !helper.CanReact() || - !helper.IsOppositeSide(attacker.Side) || + (attacker != null && !helper.IsOppositeSide(attacker.Side)) || !helper.IsWithinRange(defender, 24) || !helper.CanPerceiveTarget(defender)) { @@ -311,10 +306,11 @@ public IEnumerator OnTryAlterOutcomeSavingThrow( var rulesetHelper = helper.RulesetCharacter; var usablePower = PowerProvider.Get(powerBeguilingTwist, rulesetHelper); + // any reaction within a saving flow must use the yielder as waiter yield return helper.MyReactToSpendPowerBundle( usablePower, [attacker], - attacker, + helper, powerBeguilingTwist.Name, ReactionValidated, battleManager: battleManager); @@ -323,7 +319,7 @@ public IEnumerator OnTryAlterOutcomeSavingThrow( void ReactionValidated(ReactionRequestSpendBundlePower reactionRequest) { - attacker.SpendActionType(ActionDefinitions.ActionType.Reaction); + helper.SpendActionType(ActionDefinitions.ActionType.Reaction); } } diff --git a/SolastaUnfinishedBusiness/Subclasses/RoguishOpportunist.cs b/SolastaUnfinishedBusiness/Subclasses/RoguishOpportunist.cs index 2c4bb02d62..2d244c7e3b 100644 --- a/SolastaUnfinishedBusiness/Subclasses/RoguishOpportunist.cs +++ b/SolastaUnfinishedBusiness/Subclasses/RoguishOpportunist.cs @@ -368,33 +368,30 @@ public IEnumerator OnPhysicalAttackFinishedByMeOrAlly( public IEnumerator OnTryAlterOutcomeSavingThrow( GameLocationBattleManager battleManager, - CharacterAction action, GameLocationCharacter attacker, GameLocationCharacter defender, GameLocationCharacter helper, - ActionModifier saveModifier, + SavingThrowData savingThrowData, bool hasHitVisual, bool hasBorrowedLuck) { - if (!helper.IsOppositeSide(defender.Side) || - !action.RolledSaveThrow || - action.SaveOutcome != RollOutcome.Failure || + if (savingThrowData.SaveOutcome != RollOutcome.Failure || + !helper.IsOppositeSide(defender.Side) || helper.IsMyTurn()) { yield break; } - var rulesetAttacker = attacker.RulesetCharacter; var rulesetDefender = defender.RulesetActor; rulesetDefender.InflictCondition( conditionSeizeTheChance.Name, DurationType.Round, 0, - TurnOccurenceType.EndOfSourceTurn, + TurnOccurenceType.EndOfTurn, TagEffect, - rulesetAttacker.guid, - rulesetAttacker.CurrentFaction.Name, + rulesetDefender.guid, + FactionDefinitions.HostileMonsters.Name, 1, conditionSeizeTheChance.Name, 0, diff --git a/SolastaUnfinishedBusiness/Subclasses/SorcerousWildMagic.cs b/SolastaUnfinishedBusiness/Subclasses/SorcerousWildMagic.cs index f1880d83a7..7d5f64b2d0 100644 --- a/SolastaUnfinishedBusiness/Subclasses/SorcerousWildMagic.cs +++ b/SolastaUnfinishedBusiness/Subclasses/SorcerousWildMagic.cs @@ -622,6 +622,7 @@ public IEnumerator OnTryAlterOutcomeAttack( yield break; } + // any reaction within an attack flow must use the attacker as waiter yield return helper.MyReactToSpendPower( usablePower, attacker, @@ -704,31 +705,32 @@ void ReactionValidated() public IEnumerator OnTryAlterOutcomeSavingThrow( GameLocationBattleManager battleManager, - CharacterAction action, GameLocationCharacter attacker, GameLocationCharacter defender, GameLocationCharacter helper, - ActionModifier actionModifier, + SavingThrowData savingThrowData, bool hasHitVisual, bool hasBorrowedLuck) { var rulesetHelper = helper.RulesetCharacter; var usablePower = PowerProvider.Get(PowerTidesOfChaos, rulesetHelper); - if (!action.RolledSaveThrow || - action.SaveOutcome is not RollOutcome.Failure || + if (savingThrowData.SaveOutcome is not RollOutcome.Failure || helper != defender || rulesetHelper.GetRemainingUsesOfPower(usablePower) == 0) { yield break; } + var envTitle = Gui.Localize("Screen/&EditorLocationEnvironmentTitle"); + + // any reaction within a saving flow must use the yielder as waiter yield return helper.MyReactToSpendPower( usablePower, - attacker, + helper, "TidesOfChaosSave", "SpendPowerTidesOfChaosSaveDescription" - .Formatted(Category.Reaction, attacker.Name, action.FormatTitle()), + .Formatted(Category.Reaction, attacker?.Name ?? envTitle, savingThrowData.Title), ReactionValidated, battleManager); @@ -739,22 +741,9 @@ void ReactionValidated() List advantageTrends = [new(1, FeatureSourceType.CharacterFeature, PowerTidesOfChaos.Name, PowerTidesOfChaos)]; - actionModifier.SavingThrowAdvantageTrends.SetRange(advantageTrends); + savingThrowData.SaveActionModifier.SavingThrowAdvantageTrends.SetRange(advantageTrends); - action.RolledSaveThrow = action.ActionParams.RulesetEffect == null - ? action.ActionParams.AttackMode.TryRollSavingThrow( - attacker.RulesetCharacter, - defender.RulesetActor, - actionModifier, action.ActionParams.AttackMode.EffectDescription.EffectForms, - out var saveOutcome, out var saveOutcomeDelta) - : action.ActionParams.RulesetEffect.TryRollSavingThrow( - attacker.RulesetCharacter, - attacker.Side, - defender.RulesetActor, - actionModifier, action.ActionParams.RulesetEffect.EffectDescription.EffectForms, hasHitVisual, - out saveOutcome, out saveOutcomeDelta); - action.SaveOutcome = saveOutcome; - action.SaveOutcomeDelta = saveOutcomeDelta; + TryAlterOutcomeSavingThrow.TryRerollSavingThrow(attacker, defender, savingThrowData, hasHitVisual); rulesetHelper.LogCharacterActivatesAbility( PowerTidesOfChaos.GuiPresentation.Title, @@ -812,6 +801,7 @@ public IEnumerator OnTryAlterOutcomeAttack( yield break; } + // any reaction within an attack flow must use the attacker as waiter yield return helper.MyReactToSpendPower( usablePower, attacker, @@ -921,9 +911,10 @@ public IEnumerator OnTryAlterAttributeCheck( yield break; } + // any reaction within an attribute check flow must use the yielder as waiter yield return helper.MyReactToSpendPower( usablePower, - defender, + helper, stringParameter, $"SpendPower{stringParameter}Description".Formatted(Category.Reaction, defender.Name), ReactionValidated, @@ -999,11 +990,10 @@ void ReactionValidated() public IEnumerator OnTryAlterOutcomeSavingThrow( GameLocationBattleManager battleManager, - CharacterAction action, GameLocationCharacter attacker, GameLocationCharacter defender, GameLocationCharacter helper, - ActionModifier saveModifier, + SavingThrowData savingThrowData, bool hasHitVisual, bool hasBorrowedLuck) { @@ -1013,7 +1003,7 @@ public IEnumerator OnTryAlterOutcomeSavingThrow( if (helper == defender || !helper.CanReact() || rulesetHelper.GetRemainingUsesOfPower(usablePower) == 0 || - Math.Abs(action.SaveOutcomeDelta) > 4) + Math.Abs(savingThrowData.SaveOutcomeDelta) > 4) { yield break; } @@ -1021,14 +1011,12 @@ public IEnumerator OnTryAlterOutcomeSavingThrow( string stringParameter; if (helper.Side == defender.Side && - action.RolledSaveThrow && - action.SaveOutcome == RollOutcome.Failure) + savingThrowData.SaveOutcome == RollOutcome.Failure) { stringParameter = "BendLuckSaving"; } else if (helper.Side != defender.Side && - action.RolledSaveThrow && - action.SaveOutcome == RollOutcome.Success) + savingThrowData.SaveOutcome == RollOutcome.Success) { stringParameter = "BendLuckEnemySaving"; } @@ -1037,9 +1025,10 @@ public IEnumerator OnTryAlterOutcomeSavingThrow( yield break; } + // any reaction within a saving flow must use the yielder as waiter yield return helper.MyReactToSpendPower( usablePower, - attacker, + helper, stringParameter, $"SpendPower{stringParameter}Description".Formatted(Category.Reaction, defender.Name), ReactionValidated, @@ -1055,17 +1044,11 @@ void ReactionValidated() var dieRoll = rulesetHelper.RollDie( DieType.D4, RollContext.None, false, AdvantageType.None, out _, out _); - if (helper.Side == attacker.Side) + if (helper.Side == attacker?.Side) { - saveModifier.SavingThrowAdvantageTrends.Add( - new TrendInfo(dieRoll, FeatureSourceType.Power, powerBendLuck.Name, powerBendLuck) - { - dieType = DieType.D4, dieFlag = TrendInfoDieFlag.None - }); - - action.SaveOutcomeDelta += dieRoll; - saveModifier.SavingThrowModifier += dieRoll; - action.SaveOutcome = action.SaveOutcomeDelta >= 0 ? RollOutcome.Success : RollOutcome.Failure; + savingThrowData.SaveOutcomeDelta += dieRoll; + savingThrowData.SaveOutcome = + savingThrowData.SaveOutcomeDelta >= 0 ? RollOutcome.Success : RollOutcome.Failure; rulesetHelper.LogCharacterActivatesAbility( powerBendLuck.GuiPresentation.Title, @@ -1075,22 +1058,16 @@ void ReactionValidated() extra: [ (ConsoleStyleDuplet.ParameterType.AbilityInfo, Gui.FormatDieTitle(DieType.D4)), - (action.SaveOutcome > 0 + (savingThrowData.SaveOutcome > 0 ? ConsoleStyleDuplet.ParameterType.Positive : ConsoleStyleDuplet.ParameterType.Negative, dieRoll.ToString()) ]); } else { - saveModifier.SavingThrowAdvantageTrends.Add( - new TrendInfo(-dieRoll, FeatureSourceType.Power, powerBendLuck.Name, powerBendLuck) - { - dieType = DieType.D4, dieFlag = TrendInfoDieFlag.None - }); - - action.SaveOutcomeDelta -= dieRoll; - saveModifier.SavingThrowModifier -= dieRoll; - action.SaveOutcome = action.SaveOutcomeDelta >= 0 ? RollOutcome.Success : RollOutcome.Failure; + savingThrowData.SaveOutcomeDelta -= dieRoll; + savingThrowData.SaveOutcome = + savingThrowData.SaveOutcomeDelta >= 0 ? RollOutcome.Success : RollOutcome.Failure; rulesetHelper.LogCharacterActivatesAbility( powerBendLuck.GuiPresentation.Title, @@ -1100,7 +1077,7 @@ void ReactionValidated() extra: [ (ConsoleStyleDuplet.ParameterType.AbilityInfo, Gui.FormatDieTitle(DieType.D4)), - (action.SaveOutcome > 0 + (savingThrowData.SaveOutcome > 0 ? ConsoleStyleDuplet.ParameterType.Positive : ConsoleStyleDuplet.ParameterType.Negative, dieRoll.ToString()) ]); diff --git a/SolastaUnfinishedBusiness/Subclasses/WizardWarMagic.cs b/SolastaUnfinishedBusiness/Subclasses/WizardWarMagic.cs index 074b82bbba..797272193b 100644 --- a/SolastaUnfinishedBusiness/Subclasses/WizardWarMagic.cs +++ b/SolastaUnfinishedBusiness/Subclasses/WizardWarMagic.cs @@ -188,6 +188,7 @@ public IEnumerator OnTryAlterOutcomeAttack( yield break; } + // any reaction within an attack flow must use the attacker as waiter yield return helper.MyReactToDoNothing( ExtraActionId.DoNothingReaction, attacker, @@ -237,11 +238,10 @@ void ReactionValidated() public IEnumerator OnTryAlterOutcomeSavingThrow( GameLocationBattleManager battleManager, - CharacterAction action, GameLocationCharacter attacker, GameLocationCharacter defender, GameLocationCharacter helper, - ActionModifier saveModifier, + SavingThrowData savingThrowData, bool hasHitVisual, bool hasBorrowedLuck) { @@ -249,19 +249,19 @@ public IEnumerator OnTryAlterOutcomeSavingThrow( var intelligence = rulesetHelper.TryGetAttributeValue(AttributeDefinitions.Intelligence); var bonus = Math.Max(AttributeDefinitions.ComputeAbilityScoreModifier(intelligence), 1); - if (!action.RolledSaveThrow || - action.SaveOutcome != RollOutcome.Failure || - action.SaveOutcomeDelta + bonus < 0 || + if (savingThrowData.SaveOutcome != RollOutcome.Failure || + savingThrowData.SaveOutcomeDelta + bonus < 0 || helper != defender || !helper.CanReact() || - !helper.CanPerceiveTarget(attacker)) + (attacker != null && !helper.CanPerceiveTarget(attacker))) { yield break; } + // any reaction within a saving flow must use the yielder as waiter yield return helper.MyReactToDoNothing( ExtraActionId.DoNothingReaction, - attacker, + helper, "ArcaneDeflectionSaving", "CustomReactionArcaneDeflectionSavingDescription".Formatted(Category.Reaction), ReactionValidated, @@ -287,8 +287,9 @@ void ReactionValidated() 0, 0); - action.SaveOutcomeDelta += bonus; - action.SaveOutcome = RollOutcome.Success; + savingThrowData.SaveOutcomeDelta += bonus; + savingThrowData.SaveOutcome = RollOutcome.Success; + helper.RulesetCharacter.LogCharacterUsedFeature( featureArcaneDeflection, "Feedback/&ArcaneDeflectionSavingRoll", From 769a3c7bdf935a0a7245a9f5e24f341dc25fcdb6 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sun, 1 Sep 2024 22:05:54 -0700 Subject: [PATCH 006/212] improve saving roll reaction modal descriptions --- SolastaUnfinishedBusiness/Feats/OtherFeats.cs | 11 ++++++++--- SolastaUnfinishedBusiness/Feats/RaceFeats.cs | 2 +- SolastaUnfinishedBusiness/Races/Imp.cs | 13 +++++++++---- .../Subclasses/CircleOfTheCosmos.cs | 4 ++-- .../Subclasses/SorcerousWildMagic.cs | 7 +++++-- .../Subclasses/WizardWarMagic.cs | 5 ++++- .../Translations/de/Feats/OtherFeats-de.txt | 8 ++++---- .../Translations/de/Feats/Races-de.txt | 2 +- .../Translations/de/Inventor-de.txt | 8 ++++---- .../Translations/de/Races/Imp-de.txt | 11 ++++++++--- .../de/SubClasses/CircleOfTheCosmos-de.txt | 4 ++-- .../de/SubClasses/MartialRoyalKnight-de.txt | 6 +++--- .../de/SubClasses/SorcerousWildMagic-de.txt | 6 +++--- .../de/SubClasses/WizardWarMagic-de.txt | 4 ++-- .../Translations/en/Feats/OtherFeats-en.txt | 8 ++++---- .../Translations/en/Feats/Races-en.txt | 2 +- .../Translations/en/Inventor-en.txt | 8 ++++---- .../Translations/en/Races/Imp-en.txt | 11 ++++++++--- .../en/SubClasses/CircleOfTheCosmos-en.txt | 4 ++-- .../en/SubClasses/MartialRoyalKnight-en.txt | 6 +++--- .../en/SubClasses/SorcerousWildMagic-en.txt | 6 +++--- .../en/SubClasses/WizardWarMagic-en.txt | 4 ++-- .../Translations/es/Feats/OtherFeats-es.txt | 8 ++++---- .../Translations/es/Feats/Races-es.txt | 2 +- .../Translations/es/Inventor-es.txt | 8 ++++---- .../Translations/es/Races/Imp-es.txt | 11 ++++++++--- .../es/SubClasses/CircleOfTheCosmos-es.txt | 4 ++-- .../es/SubClasses/MartialRoyalKnight-es.txt | 6 +++--- .../es/SubClasses/SorcerousWildMagic-es.txt | 6 +++--- .../es/SubClasses/WizardWarMagic-es.txt | 4 ++-- .../Translations/fr/Feats/OtherFeats-fr.txt | 8 ++++---- .../Translations/fr/Feats/Races-fr.txt | 2 +- .../Translations/fr/Inventor-fr.txt | 8 ++++---- .../Translations/fr/Races/Imp-fr.txt | 11 ++++++++--- .../fr/SubClasses/CircleOfTheCosmos-fr.txt | 4 ++-- .../fr/SubClasses/MartialRoyalKnight-fr.txt | 6 +++--- .../fr/SubClasses/SorcerousWildMagic-fr.txt | 6 +++--- .../fr/SubClasses/WizardWarMagic-fr.txt | 4 ++-- .../Translations/it/Feats/OtherFeats-it.txt | 8 ++++---- .../Translations/it/Feats/Races-it.txt | 2 +- .../Translations/it/Inventor-it.txt | 8 ++++---- .../Translations/it/Races/Imp-it.txt | 11 ++++++++--- .../it/SubClasses/CircleOfTheCosmos-it.txt | 4 ++-- .../it/SubClasses/MartialRoyalKnight-it.txt | 6 +++--- .../it/SubClasses/SorcerousWildMagic-it.txt | 6 +++--- .../it/SubClasses/WizardWarMagic-it.txt | 4 ++-- .../Translations/ja/Feats/OtherFeats-ja.txt | 8 ++++---- .../Translations/ja/Feats/Races-ja.txt | 2 +- .../Translations/ja/Inventor-ja.txt | 8 ++++---- .../Translations/ja/Races/Imp-ja.txt | 11 ++++++++--- .../ja/SubClasses/CircleOfTheCosmos-ja.txt | 4 ++-- .../ja/SubClasses/MartialRoyalKnight-ja.txt | 6 +++--- .../ja/SubClasses/SorcerousWildMagic-ja.txt | 6 +++--- .../ja/SubClasses/WizardWarMagic-ja.txt | 4 ++-- .../Translations/ko/Feats/OtherFeats-ko.txt | 8 ++++---- .../Translations/ko/Feats/Races-ko.txt | 2 +- .../Translations/ko/Inventor-ko.txt | 8 ++++---- .../Translations/ko/Races/Imp-ko.txt | 11 ++++++++--- .../ko/SubClasses/CircleOfTheCosmos-ko.txt | 4 ++-- .../ko/SubClasses/MartialRoyalKnight-ko.txt | 6 +++--- .../ko/SubClasses/SorcerousWildMagic-ko.txt | 6 +++--- .../ko/SubClasses/WizardWarMagic-ko.txt | 4 ++-- .../Translations/pt-BR/Feats/OtherFeats-pt-BR.txt | 8 ++++---- .../Translations/pt-BR/Feats/Races-pt-BR.txt | 2 +- .../Translations/pt-BR/Inventor-pt-BR.txt | 8 ++++---- .../Translations/pt-BR/Races/Imp-pt-BR.txt | 11 ++++++++--- .../pt-BR/SubClasses/CircleOfTheCosmos-pt-BR.txt | 4 ++-- .../pt-BR/SubClasses/MartialRoyalKnight-pt-BR.txt | 6 +++--- .../pt-BR/SubClasses/SorcerousWildMagic-pt-BR.txt | 6 +++--- .../pt-BR/SubClasses/WizardWarMagic-pt-BR.txt | 4 ++-- .../Translations/ru/Feats/OtherFeats-ru.txt | 8 ++++---- .../Translations/ru/Feats/Races-ru.txt | 2 +- .../Translations/ru/Inventor-ru.txt | 8 ++++---- .../Translations/ru/Races/Imp-ru.txt | 11 ++++++++--- .../ru/SubClasses/CircleOfTheCosmos-ru.txt | 4 ++-- .../ru/SubClasses/MartialRoyalKnight-ru.txt | 6 +++--- .../ru/SubClasses/SorcerousWildMagic-ru.txt | 6 +++--- .../ru/SubClasses/WizardWarMagic-ru.txt | 4 ++-- .../Translations/zh-CN/Feats/OtherFeats-zh-CN.txt | 8 ++++---- .../Translations/zh-CN/Feats/Races-zh-CN.txt | 2 +- .../Translations/zh-CN/Inventor-zh-CN.txt | 8 ++++---- .../Translations/zh-CN/Races/Imp-zh-CN.txt | 11 ++++++++--- .../zh-CN/SubClasses/CircleOfTheCosmos-zh-CN.txt | 4 ++-- .../zh-CN/SubClasses/MartialRoyalKnight-zh-CN.txt | 6 +++--- .../zh-CN/SubClasses/SorcerousWildMagic-zh-CN.txt | 6 +++--- .../zh-CN/SubClasses/WizardWarMagic-zh-CN.txt | 4 ++-- 86 files changed, 299 insertions(+), 233 deletions(-) diff --git a/SolastaUnfinishedBusiness/Feats/OtherFeats.cs b/SolastaUnfinishedBusiness/Feats/OtherFeats.cs index 85cad91ca3..2943733e09 100644 --- a/SolastaUnfinishedBusiness/Feats/OtherFeats.cs +++ b/SolastaUnfinishedBusiness/Feats/OtherFeats.cs @@ -2140,13 +2140,17 @@ public IEnumerator OnTryAlterOutcomeSavingThrow( yield break; } + var envTitle = Gui.Localize("Screen/&EditorLocationEnvironmentTitle"); + // any reaction within a saving flow must use the yielder as waiter yield return helper.MyReactToSpendPower( usablePower, helper, "LuckySaving", - reactionValidated: ReactionValidated, - battleManager: battleManager); + "SpendPowerLuckySavingDescription".Formatted( + Category.Reaction, attacker?.Name ?? envTitle, savingThrowData.Title), + ReactionValidated, + battleManager); yield break; @@ -2322,7 +2326,8 @@ savingThrowData.SavingThrowAbility is not usablePower, defender, "MageSlayer", - "SpendPowerMageSlayerDescription".Formatted(Category.Reaction, attacker?.Name ?? envTitle), + "SpendPowerMageSlayerDescription".Formatted( + Category.Reaction, attacker?.Name ?? envTitle, savingThrowData.Title), ReactionValidated, battleManager); diff --git a/SolastaUnfinishedBusiness/Feats/RaceFeats.cs b/SolastaUnfinishedBusiness/Feats/RaceFeats.cs index ab71df011f..db27c41662 100644 --- a/SolastaUnfinishedBusiness/Feats/RaceFeats.cs +++ b/SolastaUnfinishedBusiness/Feats/RaceFeats.cs @@ -824,7 +824,7 @@ public IEnumerator OnTryAlterOutcomeSavingThrow( helper, "BountifulLuckSaving", "CustomReactionBountifulLuckSavingDescription".Formatted( - Category.Reaction, defender.Name, attacker?.Name ?? envTitle, helper.Name), + Category.Reaction, defender.Name, attacker?.Name ?? envTitle, savingThrowData.Title), ReactionValidated, battleManager: battleManager); diff --git a/SolastaUnfinishedBusiness/Races/Imp.cs b/SolastaUnfinishedBusiness/Races/Imp.cs index 2c2f589e2b..8ef1eff230 100644 --- a/SolastaUnfinishedBusiness/Races/Imp.cs +++ b/SolastaUnfinishedBusiness/Races/Imp.cs @@ -5,6 +5,7 @@ using SolastaUnfinishedBusiness.Api; using SolastaUnfinishedBusiness.Api.GameExtensions; using SolastaUnfinishedBusiness.Api.Helpers; +using SolastaUnfinishedBusiness.Api.LanguageExtensions; using SolastaUnfinishedBusiness.Behaviors; using SolastaUnfinishedBusiness.Builders; using SolastaUnfinishedBusiness.Builders.Features; @@ -607,7 +608,7 @@ public IEnumerator OnTryAlterOutcomeAttack( yield return attacker.MyReactToSpendPower( usablePower, attacker, - "DrawInspiration", + "DrawInspirationAttack", reactionValidated: ReactionValidated, battleManager: battleManager); @@ -644,13 +645,17 @@ public IEnumerator OnTryAlterOutcomeSavingThrow( yield break; } + var envTitle = Gui.Localize("Screen/&EditorLocationEnvironmentTitle"); + // any reaction within a saving flow must use the yielder as waiter yield return helper.MyReactToSpendPower( usablePower, helper, - "DrawInspiration", - reactionValidated: ReactionValidated, - battleManager: battleManager); + "DrawInspirationSaving", + "SpendPowerDrawInspirationSavingDescription".Formatted( + Category.Reaction, attacker?.Name ?? envTitle, savingThrowData.Title), + ReactionValidated, + battleManager); yield break; diff --git a/SolastaUnfinishedBusiness/Subclasses/CircleOfTheCosmos.cs b/SolastaUnfinishedBusiness/Subclasses/CircleOfTheCosmos.cs index 6d06257ceb..493dbcaf8e 100644 --- a/SolastaUnfinishedBusiness/Subclasses/CircleOfTheCosmos.cs +++ b/SolastaUnfinishedBusiness/Subclasses/CircleOfTheCosmos.cs @@ -952,7 +952,7 @@ public IEnumerator OnTryAlterOutcomeSavingThrow( helper, "WealCosmosOmenSaving", "SpendPowerWealCosmosOmenSavingDescription".Formatted( - Category.Reaction, defender.Name, attacker?.Name ?? envTitle, helper.Name), + Category.Reaction, defender.Name, attacker?.Name ?? envTitle, savingThrowData.Title), ReactionValidated, battleManager); @@ -1172,7 +1172,7 @@ public IEnumerator OnTryAlterOutcomeSavingThrow( helper, "WoeCosmosOmenSaving", "SpendPowerWoeCosmosOmenSavingDescription".Formatted( - Category.Reaction, defender.Name, attacker?.Name ?? envTitle, helper.Name), + Category.Reaction, defender.Name, attacker?.Name ?? envTitle, savingThrowData.Title), ReactionValidated, battleManager); diff --git a/SolastaUnfinishedBusiness/Subclasses/SorcerousWildMagic.cs b/SolastaUnfinishedBusiness/Subclasses/SorcerousWildMagic.cs index 7d5f64b2d0..315591a6d9 100644 --- a/SolastaUnfinishedBusiness/Subclasses/SorcerousWildMagic.cs +++ b/SolastaUnfinishedBusiness/Subclasses/SorcerousWildMagic.cs @@ -723,7 +723,7 @@ public IEnumerator OnTryAlterOutcomeSavingThrow( } var envTitle = Gui.Localize("Screen/&EditorLocationEnvironmentTitle"); - + // any reaction within a saving flow must use the yielder as waiter yield return helper.MyReactToSpendPower( usablePower, @@ -1025,12 +1025,15 @@ public IEnumerator OnTryAlterOutcomeSavingThrow( yield break; } + var envTitle = Gui.Localize("Screen/&EditorLocationEnvironmentTitle"); + // any reaction within a saving flow must use the yielder as waiter yield return helper.MyReactToSpendPower( usablePower, helper, stringParameter, - $"SpendPower{stringParameter}Description".Formatted(Category.Reaction, defender.Name), + $"SpendPower{stringParameter}Description".Formatted(Category.Reaction, + defender.Name, attacker?.Name ?? envTitle, savingThrowData.Title), ReactionValidated, battleManager); diff --git a/SolastaUnfinishedBusiness/Subclasses/WizardWarMagic.cs b/SolastaUnfinishedBusiness/Subclasses/WizardWarMagic.cs index 797272193b..59b9f8647d 100644 --- a/SolastaUnfinishedBusiness/Subclasses/WizardWarMagic.cs +++ b/SolastaUnfinishedBusiness/Subclasses/WizardWarMagic.cs @@ -258,12 +258,15 @@ public IEnumerator OnTryAlterOutcomeSavingThrow( yield break; } + var envTitle = Gui.Localize("Screen/&EditorLocationEnvironmentTitle"); + // any reaction within a saving flow must use the yielder as waiter yield return helper.MyReactToDoNothing( ExtraActionId.DoNothingReaction, helper, "ArcaneDeflectionSaving", - "CustomReactionArcaneDeflectionSavingDescription".Formatted(Category.Reaction), + "CustomReactionArcaneDeflectionSavingDescription".Formatted( + Category.Reaction, attacker?.Name ?? envTitle, savingThrowData.Title), ReactionValidated, battleManager: battleManager); diff --git a/SolastaUnfinishedBusiness/Translations/de/Feats/OtherFeats-de.txt b/SolastaUnfinishedBusiness/Translations/de/Feats/OtherFeats-de.txt index 561deb8d49..f0d3093ef5 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Feats/OtherFeats-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Feats/OtherFeats-de.txt @@ -145,13 +145,13 @@ Reaction/&SpendPowerLuckyEnemyAttackDescription=Ein Feind hat Sie getroffen. Sie Reaction/&SpendPowerLuckyEnemyAttackReactDescription=Würfeln Sie einen W20, um den Angriffswurf zu ersetzen. Reaction/&SpendPowerLuckyEnemyAttackReactTitle=Glücklich Reaction/&SpendPowerLuckyEnemyAttackTitle=Glücklich -Reaction/&SpendPowerLuckySavingDescription=Dir ist ein Rettungswurf misslungen. Du kannst reagieren, indem du einen W20 würfelst und den Rettungswurf ersetzst. +Reaction/&SpendPowerLuckySavingDescription=Dir ist ein Rettungswurf gegen {1} von {0} misslungen. Du kannst reagieren, indem du einen W20 würfelst und den Wurf ersetzst. Reaction/&SpendPowerLuckySavingReactDescription=Würfeln Sie einen W20, um den Rettungswurf zu ersetzen. Reaction/&SpendPowerLuckySavingReactTitle=Glücklich Reaction/&SpendPowerLuckySavingTitle=Glücklich -Reaction/&SpendPowerMageSlayerDescription=Der Rettungswurf gegen {0} ist Ihnen misslungen. Sie können stattdessen dafür sorgen, dass Ihr Wurf erfolgreich ist. -Reaction/&SpendPowerMageSlayerReactDescription=Sorgen Sie stattdessen dafür, dass Sie erfolgreich sind. -Reaction/&SpendPowerMageSlayerReactTitle=Gelingen +Reaction/&SpendPowerMageSlayerDescription=Ein Rettungswurf gegen {1} von {0} ist Ihnen misslungen. Sie können reagieren, um erfolgreich zu sein. +Reaction/&SpendPowerMageSlayerReactDescription=Gelingen. +Reaction/&SpendPowerMageSlayerReactTitle=Magiertöter Reaction/&SpendPowerMageSlayerTitle=Magiertöter Reaction/&SpendPowerReactiveResistanceDescription={0} wird dich gleich treffen! Du kannst deine Reaktion nutzen, um {1} bis zum Ende seines Zuges Widerstand zu leisten. Reaction/&SpendPowerReactiveResistanceReactDescription=Leisten Sie Widerstand. diff --git a/SolastaUnfinishedBusiness/Translations/de/Feats/Races-de.txt b/SolastaUnfinishedBusiness/Translations/de/Feats/Races-de.txt index 9ccf83315b..75cfc56dc4 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Feats/Races-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Feats/Races-de.txt @@ -75,7 +75,7 @@ Reaction/&CustomReactionBountifulLuckCheckDescription={0} hat einen Kontrollwurf Reaction/&CustomReactionBountifulLuckCheckReactDescription=Würfeln Sie einen W20, um den Kontrollwurf zu ersetzen. Reaction/&CustomReactionBountifulLuckCheckReactTitle=Reichhaltiges Glück Reaction/&CustomReactionBountifulLuckCheckTitle=Reichhaltiges Glück -Reaction/&CustomReactionBountifulLuckSavingDescription={0} hat einen Rettungswurf gegen {1} nicht geschafft. {2} kann reagieren, indem er einen W20 würfelt und den Rettungswurf ersetzt. +Reaction/&CustomReactionBountifulLuckSavingDescription={0} hat einen Rettungswurf gegen {2} von {1} nicht geschafft. Du kannst reagieren, indem du einen W20 würfelst und den Wurf ersetzst. Reaction/&CustomReactionBountifulLuckSavingReactDescription=Würfeln Sie einen W20, um den Rettungswurf zu ersetzen. Reaction/&CustomReactionBountifulLuckSavingReactTitle=Reichhaltiges Glück Reaction/&CustomReactionBountifulLuckSavingTitle=Reichhaltiges Glück diff --git a/SolastaUnfinishedBusiness/Translations/de/Inventor-de.txt b/SolastaUnfinishedBusiness/Translations/de/Inventor-de.txt index 32ad74c95a..5c7cc6462b 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Inventor-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Inventor-de.txt @@ -39,10 +39,10 @@ Reaction/&SpendPowerInventorFlashOfGeniusCheckDescription={0} hat einen Kontroll Reaction/&SpendPowerInventorFlashOfGeniusCheckReactDescription=Würfeln Sie einen W20, um den Kontrollwurf zu ersetzen. Reaction/&SpendPowerInventorFlashOfGeniusCheckReactTitle=Reagieren Reaction/&SpendPowerInventorFlashOfGeniusCheckTitle=Ein Geistesblitz -Reaction/&SpendPowerInventorFlashOfGeniusReactDescription=Setzen Sie diese Kraft ein, um Verbündeten bei ihrem Rettungswurf zu helfen. -Reaction/&SpendPowerInventorFlashOfGeniusReactDescriptionAlly={0} hat einen Rettungswurf gegen {2} von {1} nicht geschafft. Sie können Ihre Reaktion nutzen, um improvisierte Hilfe zu holen, die den Wurf erfolgreich macht. -Reaction/&SpendPowerInventorFlashOfGeniusReactDescriptionSelf={0} hat einen Rettungswurf gegen {2} von {1} nicht geschafft und kann mithilfe einer Reaktion improvisierende Hilfe leisten, die den Wurf zum Erfolg werden lässt. -Reaction/&SpendPowerInventorFlashOfGeniusReactTitle=Reagieren +Reaction/&SpendPowerInventorFlashOfGeniusReactDescription=Gelingen +Reaction/&SpendPowerInventorFlashOfGeniusReactDescriptionAlly={0} hat einen Rettungswurf gegen {2} von {1} nicht geschafft. Sie können reagieren, indem Sie Ihren Intelligenzmodifikator zum Wurf hinzufügen und ihn erfolgreich machen. +Reaction/&SpendPowerInventorFlashOfGeniusReactDescriptionSelf={0} hat einen Rettungswurf gegen {2} von {1} nicht geschafft und kann reagieren, indem er deinen Intelligenzmodifikator zum Wurf hinzufügt und ihn so zum Erfolg führt. +Reaction/&SpendPowerInventorFlashOfGeniusReactTitle=Ein Geistesblitz Reaction/&SpendPowerInventorFlashOfGeniusTitle=Ein Geistesblitz Reaction/&SpendPowerSoulOfArtificeDescription=Du erhältst eine Anzahl Trefferpunkte zurück, die deiner Schurkenstufe entspricht, und stehst auf. Reaction/&SpendPowerSoulOfArtificeReactDescription=Du erhältst eine Anzahl Trefferpunkte zurück, die deiner Schurkenstufe entspricht, und stehst auf. diff --git a/SolastaUnfinishedBusiness/Translations/de/Races/Imp-de.txt b/SolastaUnfinishedBusiness/Translations/de/Races/Imp-de.txt index fb06470001..a705ad6999 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Races/Imp-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Races/Imp-de.txt @@ -40,9 +40,14 @@ Race/&RaceImpForestTitle=Waldkobold Race/&RaceImpInfernalDescription=Interplaneare Experimente während der Manacalon-Ära führten dazu, dass Dämonen und andere Kreaturen in die materielle Ebene gebracht wurden. Während viele dieser Kreaturen schließlich eingedämmt oder verbannt wurden, konnten sich die hinterhältigen Kobolde verstecken, sich heimlich anpassen und seitdem in verschiedenen Ecken der Badlands gedeihen. Nun haben sich einige von ihnen entschieden, hervorzukommen und die Welt um sie herum zu erkunden, auch wenn die Menschen darin ihrer dämonischen Natur vielleicht nicht wohlgesonnen sind. Race/&RaceImpInfernalTitle=Höllenwichtel Race/&RaceImpTitle=Imp -Reaction/&SpendPowerDrawInspirationDescription=Sie sind kurz davor, einen Angriffswurf oder Rettungswurf zu verfehlen. Geben Sie Kraft aus, um Ihrem Angriffswurf oder Rettungswurf 3 hinzuzufügen. -Reaction/&SpendPowerDrawInspirationReactTitle=Ausgeben -Reaction/&SpendPowerDrawInspirationTitle=Inspiration aus etwas ziehen +Reaction/&SpendPowerDrawInspirationAttackDescription=Sie sind kurz davor, einen Angriffswurf zu verfehlen. Sie können reagieren, indem Sie dem Angriffswurf 3 hinzufügen. +Reaction/&SpendPowerDrawInspirationAttackReactDescription=Addiere 3 zum Wurf. +Reaction/&SpendPowerDrawInspirationAttackReactTitle=Lassen Sie sich inspirieren +Reaction/&SpendPowerDrawInspirationAttackTitle=Lassen Sie sich inspirieren +Reaction/&SpendPowerDrawInspirationSavingDescription=Dir ist ein Rettungswurf gegen {1} von {0} misslungen. Du kannst reagieren, indem du dem Wurf 3 hinzufügst. +Reaction/&SpendPowerDrawInspirationSavingReactDescription=Addiere 3 zum Wurf. +Reaction/&SpendPowerDrawInspirationSavingReactTitle=Lassen Sie sich inspirieren +Reaction/&SpendPowerDrawInspirationSavingTitle=Lassen Sie sich inspirieren Tooltip/&SelectAnAlly=Bitte wählen Sie einen Verbündeten aus. Tooltip/&TargetAlreadyAssisted=Das Ziel wurde bereits unterstützt. Tooltip/&TargetOutOfRange=Ziel ist außerhalb der Reichweite. diff --git a/SolastaUnfinishedBusiness/Translations/de/SubClasses/CircleOfTheCosmos-de.txt b/SolastaUnfinishedBusiness/Translations/de/SubClasses/CircleOfTheCosmos-de.txt index 6819aa1c05..b5d836f998 100644 --- a/SolastaUnfinishedBusiness/Translations/de/SubClasses/CircleOfTheCosmos-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/SubClasses/CircleOfTheCosmos-de.txt @@ -40,7 +40,7 @@ Reaction/&SpendPowerWealCosmosOmenCheckDescription={0} hat einen Kontrollwurf ni Reaction/&SpendPowerWealCosmosOmenCheckReactDescription=Würfeln Sie einen W6, um einem Verbündeten bei seinem Kontrollwurf zu helfen. Reaction/&SpendPowerWealCosmosOmenCheckReactTitle=Wohl Reaction/&SpendPowerWealCosmosOmenCheckTitle=Kosmisches Omen: Wohlergehen -Reaction/&SpendPowerWealCosmosOmenSavingDescription={0} hat einen Rettungswurf gegen {1} nicht geschafft. {2} kann reagieren, indem er einen W6 würfelt und das Ergebnis zum Rettungswurf addiert. +Reaction/&SpendPowerWealCosmosOmenSavingDescription={0} hat einen Rettungswurf gegen {2} von {1} nicht geschafft. Du kannst reagieren, indem du einen W6 würfelst und das Ergebnis zum Wurf addierst. Reaction/&SpendPowerWealCosmosOmenSavingReactDescription=Würfeln Sie einen W6, um einem Verbündeten bei seinem Rettungswurf zu helfen. Reaction/&SpendPowerWealCosmosOmenSavingReactTitle=Wohl Reaction/&SpendPowerWealCosmosOmenSavingTitle=Kosmisches Omen: Wohlergehen @@ -52,7 +52,7 @@ Reaction/&SpendPowerWoeCosmosOmenCheckDescription={0} hat einen erfolgreichen Ko Reaction/&SpendPowerWoeCosmosOmenCheckReactDescription=Würfeln Sie einen W6, um einen Gegner mit seinem Kontrollwurf abzulenken. Reaction/&SpendPowerWoeCosmosOmenCheckReactTitle=Woe Reaction/&SpendPowerWoeCosmosOmenCheckTitle=Kosmisches Omen: Wehe -Reaction/&SpendPowerWoeCosmosOmenSavingDescription={0} schafft einen Rettungswurf gegen {1}. {2} kann reagieren, indem er einen W6 würfelt und das Ergebnis vom Rettungswurf abzieht. +Reaction/&SpendPowerWoeCosmosOmenSavingDescription={0} gelingt ein Rettungswurf gegen {2} von {1}. Du kannst reagieren, indem du einen W6 würfelst und das Ergebnis vom Wurf abziehst. Reaction/&SpendPowerWoeCosmosOmenSavingReactDescription=Würfeln Sie einen W6, um einen Gegner mit seinem Rettungswurf abzulenken. Reaction/&SpendPowerWoeCosmosOmenSavingReactTitle=Woe Reaction/&SpendPowerWoeCosmosOmenSavingTitle=Kosmisches Omen: Wehe diff --git a/SolastaUnfinishedBusiness/Translations/de/SubClasses/MartialRoyalKnight-de.txt b/SolastaUnfinishedBusiness/Translations/de/SubClasses/MartialRoyalKnight-de.txt index eab0c7012f..da5529178a 100644 --- a/SolastaUnfinishedBusiness/Translations/de/SubClasses/MartialRoyalKnight-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/SubClasses/MartialRoyalKnight-de.txt @@ -8,9 +8,9 @@ Feature/&PowerRoyalKnightRallyingCryDescription=Ab der 3. Stufe ersetzen Sie Ihr Feature/&PowerRoyalKnightRallyingCryTitle=Schlachtruf Feature/&PowerRoyalKnightSpiritedSurgeDescription=Ab der 18. Stufe gewährt Ihnen Ihr Inspiring Surge außerdem 1 Runde lang einen Vorteil bei allen Angriffen, Rettungswürfen und Fähigkeitswürfen. Feature/&PowerRoyalKnightSpiritedSurgeTitle=Temperamentvolle Woge -Reaction/&SpendPowerRoyalKnightInspiringProtectionDescriptionAlly={0} hat den Rettungswurf gegen {2} von {1} nicht geschafft. Du kannst deine Reaktion nutzen, um Hilfe zu improvisieren, die den Rettungswurf wiederholt. -Reaction/&SpendPowerRoyalKnightInspiringProtectionDescriptionSelf={0} hat den Rettungswurf gegen {2} von {1} nicht bestanden und kann eine Reaktion aufwenden, um Hilfe zu improvisieren, mit der der Rettungswurf wiederholt wird. -Reaction/&SpendPowerRoyalKnightInspiringProtectionReactDescription=Setzen Sie diese Kraft ein, um Verbündeten bei ihrem Rettungswurf zu helfen. +Reaction/&SpendPowerRoyalKnightInspiringProtectionDescriptionAlly={0} hat einen Rettungswurf gegen {2} von {1} nicht geschafft. Du kannst reagieren und den Rettungswurf wiederholen. +Reaction/&SpendPowerRoyalKnightInspiringProtectionDescriptionSelf={0} hat einen Rettungswurf gegen {2} von {1} nicht geschafft und kann reagieren, indem er den Rettungswurf wiederholt. +Reaction/&SpendPowerRoyalKnightInspiringProtectionReactDescription=Führen Sie den Speichervorgang erneut aus. Reaction/&SpendPowerRoyalKnightInspiringProtectionReactTitle=Inspirierender Schutz Reaction/&SpendPowerRoyalKnightInspiringProtectionTitle=Inspirierender Schutz Subclass/&MartialRoyalKnightDescription=Ein Ritter, der andere durch mutige Taten im Kampf zu Höchstleistungen inspiriert. Ein Banneret ist ein erfahrener Krieger, doch wenn er eine Gruppe von Verbündeten anführt, kann er selbst die am schlechtesten ausgerüstete Miliz in eine wilde Kriegsbande verwandeln. diff --git a/SolastaUnfinishedBusiness/Translations/de/SubClasses/SorcerousWildMagic-de.txt b/SolastaUnfinishedBusiness/Translations/de/SubClasses/SorcerousWildMagic-de.txt index d976e4e765..9425a82520 100644 --- a/SolastaUnfinishedBusiness/Translations/de/SubClasses/SorcerousWildMagic-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/SubClasses/SorcerousWildMagic-de.txt @@ -85,11 +85,11 @@ Reaction/&SpendPowerBendLuckEnemyCheckDescription={0} gelingt ein Kontrol Reaction/&SpendPowerBendLuckEnemyCheckReactDescription=Würfeln Sie einen d4, um das Ergebnis vom Kontrollwurf abzuziehen. Reaction/&SpendPowerBendLuckEnemyCheckReactTitle=Bend Luck Reaction/&SpendPowerBendLuckEnemyCheckTitle=Bend Luck -Reaction/&SpendPowerBendLuckEnemySavingDescription={0} gelingt ein Rettungswurf. Sie können reagieren, indem Sie einen d4 würfeln und das Ergebnis vom Rettungswurf abziehen. +Reaction/&SpendPowerBendLuckEnemySavingDescription={0} gelingt ein Rettungswurf gegen {2} von {1}. Sie können reagieren, indem Sie einen d4 würfeln und das Ergebnis vom Wurf abziehen. Reaction/&SpendPowerBendLuckEnemySavingReactDescription=Würfeln Sie einen d4, um das Ergebnis vom Rettungswurf abzuziehen. Reaction/&SpendPowerBendLuckEnemySavingReactTitle=Bend Luck Reaction/&SpendPowerBendLuckEnemySavingTitle=Bend Luck -Reaction/&SpendPowerBendLuckSavingDescription={0} hat einen Rettungswurf nicht geschafft. Sie können reagieren, indem Sie einen d4 würfeln und das Ergebnis zum Rettungswurf hinzufügen. +Reaction/&SpendPowerBendLuckSavingDescription={0} hat einen Rettungswurf gegen {2} von {1} nicht geschafft. Du kannst reagieren, indem du einen d4 würfelst und das Ergebnis zum Rettungswurf addierst. Reaction/&SpendPowerBendLuckSavingReactDescription=Würfeln Sie einen d4, um das Ergebnis zum Rettungswurf hinzuzufügen. Reaction/&SpendPowerBendLuckSavingReactTitle=Bend Luck Reaction/&SpendPowerBendLuckSavingTitle=Bend Luck @@ -97,7 +97,7 @@ Reaction/&SpendPowerTidesOfChaosAttackDescription=Sie haben einen Angriff verpas Reaction/&SpendPowerTidesOfChaosAttackReactDescription=Führen Sie den Angriff mit Vorteil aus. Reaction/&SpendPowerTidesOfChaosAttackReactTitle=Gezeiten des Chaos Reaction/&SpendPowerTidesOfChaosAttackTitle=Gezeiten des Chaos -Reaction/&SpendPowerTidesOfChaosSaveDescription=Du hast einen Save verpasst. Du kannst Tides of Chaos gegen {0}s {1} einsetzen und den Save mit Vorteil wiederholen. +Reaction/&SpendPowerTidesOfChaosSaveDescription=Ihr Rettungswurf gegen {1} von {0} ist fehlgeschlagen. Sie können reagieren und den Rettungswurf mit Vorteil wiederholen. Reaction/&SpendPowerTidesOfChaosSaveReactDescription=Rollen Sie den Save mit Vorteil. Reaction/&SpendPowerTidesOfChaosSaveReactTitle=Gezeiten des Chaos Reaction/&SpendPowerTidesOfChaosSaveTitle=Gezeiten des Chaos diff --git a/SolastaUnfinishedBusiness/Translations/de/SubClasses/WizardWarMagic-de.txt b/SolastaUnfinishedBusiness/Translations/de/SubClasses/WizardWarMagic-de.txt index 3d95b6bc46..4444aecade 100644 --- a/SolastaUnfinishedBusiness/Translations/de/SubClasses/WizardWarMagic-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/SubClasses/WizardWarMagic-de.txt @@ -16,8 +16,8 @@ Reaction/&CustomReactionArcaneDeflectionAttackDescription=Sie werden gleich von Reaction/&CustomReactionArcaneDeflectionAttackReactDescription=Einen Fehler erzwingen Reaction/&CustomReactionArcaneDeflectionAttackReactTitle=Arkane Ablenkung Reaction/&CustomReactionArcaneDeflectionAttackTitle=Arkane Ablenkung -Reaction/&CustomReactionArcaneDeflectionSavingDescription=Ihr Rettungswurf ist fehlgeschlagen. Sie können Ihre Reaktion nutzen, um Ihren Intelligenzmodifikator zum Rettungswurf hinzuzufügen und ihn stattdessen erfolgreich zu machen. -Reaction/&CustomReactionArcaneDeflectionSavingReactDescription=Einen Fehler erzwingen +Reaction/&CustomReactionArcaneDeflectionSavingDescription=Dir ist ein Rettungswurf gegen {1} von {0}> misslungen. Du kannst deine Reaktion nutzen, um deinen Intelligenzmodifikator zum Wurf hinzuzufügen und ihn erfolgreich zu machen. +Reaction/&CustomReactionArcaneDeflectionSavingReactDescription=Gelingen Reaction/&CustomReactionArcaneDeflectionSavingReactTitle=Arkane Ablenkung Reaction/&CustomReactionArcaneDeflectionSavingTitle=Arkane Ablenkung Subclass/&WizardWarMagicDescription=Verschiedene arkane Schulen sind darauf spezialisiert, Zauberer für den Krieg auszubilden. Die Tradition der Kriegsmagie vermischt Prinzipien der Beschwörung und Bannung, anstatt sich auf eine dieser Schulen zu spezialisieren. Sie lehrt Techniken, die die Zauber eines Zauberers verstärken, und bietet Zauberern gleichzeitig Methoden, ihre eigene Verteidigung zu stärken. Anhänger dieser Tradition sind als Kriegsmagier bekannt. Sie sehen ihre Magie sowohl als Waffe als auch als Rüstung, eine Ressource, die jedem Stück Stahl überlegen ist. Kriegsmagier handeln im Kampf schnell und nutzen ihre Zauber, um die taktische Kontrolle über eine Situation zu erlangen. Ihre Zauber schlagen hart zu, während ihre Verteidigungsfähigkeiten die Gegenangriffsversuche ihrer Gegner vereiteln. Kriegsmagier sind auch geschickt darin, die magische Energie anderer Zauberer gegen sich selbst zu wenden. diff --git a/SolastaUnfinishedBusiness/Translations/en/Feats/OtherFeats-en.txt b/SolastaUnfinishedBusiness/Translations/en/Feats/OtherFeats-en.txt index c32a092e9d..575f049b95 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Feats/OtherFeats-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Feats/OtherFeats-en.txt @@ -145,13 +145,13 @@ Reaction/&SpendPowerLuckyEnemyAttackDescription=An enemy hit you. You can react Reaction/&SpendPowerLuckyEnemyAttackReactDescription=Roll a d20 to replace the attack roll. Reaction/&SpendPowerLuckyEnemyAttackReactTitle=Lucky Reaction/&SpendPowerLuckyEnemyAttackTitle=Lucky -Reaction/&SpendPowerLuckySavingDescription=You failed a saving roll. You can react to roll a d20 and replace the saving roll. +Reaction/&SpendPowerLuckySavingDescription=You failed a saving roll against {0}'s {1}. You can react to roll a d20 and replace the roll. Reaction/&SpendPowerLuckySavingReactDescription=Roll a d20 to replace the saving roll. Reaction/&SpendPowerLuckySavingReactTitle=Lucky Reaction/&SpendPowerLuckySavingTitle=Lucky -Reaction/&SpendPowerMageSlayerDescription=You failed a saving throw against {0}. You can cause yourself to succeed instead. -Reaction/&SpendPowerMageSlayerReactDescription=Cause yourself to succeed instead. -Reaction/&SpendPowerMageSlayerReactTitle=Succeed +Reaction/&SpendPowerMageSlayerDescription=You failed a saving roll against {0}'s {1}. You can react to succeed. +Reaction/&SpendPowerMageSlayerReactDescription=Succeed. +Reaction/&SpendPowerMageSlayerReactTitle=Mage Slayer Reaction/&SpendPowerMageSlayerTitle=Mage Slayer Reaction/&SpendPowerReactiveResistanceDescription={0} is about to hit you! you can use your reaction to give yourself resistance to {1} until the end of its turn Reaction/&SpendPowerReactiveResistanceReactDescription=Give yourself resistance. diff --git a/SolastaUnfinishedBusiness/Translations/en/Feats/Races-en.txt b/SolastaUnfinishedBusiness/Translations/en/Feats/Races-en.txt index be225994c1..d009cc7969 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Feats/Races-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Feats/Races-en.txt @@ -75,7 +75,7 @@ Reaction/&CustomReactionBountifulLuckCheckDescription={0} failed a check roll. { Reaction/&CustomReactionBountifulLuckCheckReactDescription=Roll a d20 to replace the check roll. Reaction/&CustomReactionBountifulLuckCheckReactTitle=Bountiful Luck Reaction/&CustomReactionBountifulLuckCheckTitle=Bountiful Luck -Reaction/&CustomReactionBountifulLuckSavingDescription={0} failed a save roll against {1}. {2} can react to roll a d20 and replace the saving roll. +Reaction/&CustomReactionBountifulLuckSavingDescription={0} failed a saving roll against {1}'s {2}. You can react to roll a d20 and replace the roll. Reaction/&CustomReactionBountifulLuckSavingReactDescription=Roll a d20 to replace the saving roll. Reaction/&CustomReactionBountifulLuckSavingReactTitle=Bountiful Luck Reaction/&CustomReactionBountifulLuckSavingTitle=Bountiful Luck diff --git a/SolastaUnfinishedBusiness/Translations/en/Inventor-en.txt b/SolastaUnfinishedBusiness/Translations/en/Inventor-en.txt index 7f9fc518d0..c30cca12f1 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Inventor-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Inventor-en.txt @@ -39,10 +39,10 @@ Reaction/&SpendPowerInventorFlashOfGeniusCheckDescription={0} failed a check rol Reaction/&SpendPowerInventorFlashOfGeniusCheckReactDescription=Roll a d20 to replace the check roll. Reaction/&SpendPowerInventorFlashOfGeniusCheckReactTitle=React Reaction/&SpendPowerInventorFlashOfGeniusCheckTitle=Flash of Genius -Reaction/&SpendPowerInventorFlashOfGeniusReactDescription=Spend use of this power to help ally with their saving roll. -Reaction/&SpendPowerInventorFlashOfGeniusReactDescriptionAlly={0} failed a save roll against {1}'s {2}. You can spend your reaction to improvise help that will turn the roll into success. -Reaction/&SpendPowerInventorFlashOfGeniusReactDescriptionSelf={0} failed a save roll against {1}'s {2} and can spend reaction to improvise help that will turn the roll into success. -Reaction/&SpendPowerInventorFlashOfGeniusReactTitle=React +Reaction/&SpendPowerInventorFlashOfGeniusReactDescription=Succeed +Reaction/&SpendPowerInventorFlashOfGeniusReactDescriptionAlly={0} failed a save roll against {1}'s {2}. You can react to add your Intelligence modifier to the roll and make it succeed. +Reaction/&SpendPowerInventorFlashOfGeniusReactDescriptionSelf={0} failed a save roll against {1}'s {2} and can react to add your Intelligence modifier to the roll and make it succeed. +Reaction/&SpendPowerInventorFlashOfGeniusReactTitle=Flash of Genius Reaction/&SpendPowerInventorFlashOfGeniusTitle=Flash of Genius Reaction/&SpendPowerSoulOfArtificeDescription=You regain a number of hit points equal to your rogue level, and stand up. Reaction/&SpendPowerSoulOfArtificeReactDescription=You regain a number of hit points equal to your rogue level, and stand up. diff --git a/SolastaUnfinishedBusiness/Translations/en/Races/Imp-en.txt b/SolastaUnfinishedBusiness/Translations/en/Races/Imp-en.txt index 54e941150f..32b1437c34 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Races/Imp-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Races/Imp-en.txt @@ -40,9 +40,14 @@ Race/&RaceImpForestTitle=Forest Imp Race/&RaceImpInfernalDescription=Interplanear experiments during the Manacalon era led to demons and other creatures being brought into the material plane. While many of these creatures were eventually contained or banished, the sneaky imps were able to hide away, secretly adapting and thriving in various pockets of the Badlands ever since. Now, some of them have decided to emerge and explore the world around them, even if those in it may not take kindly to their demonic nature. Race/&RaceImpInfernalTitle=Infernal Imp Race/&RaceImpTitle=Imp -Reaction/&SpendPowerDrawInspirationDescription=You are about to miss an attack roll or a saving throw. Spend power to add 3 to attack roll or saving throw. -Reaction/&SpendPowerDrawInspirationReactTitle=Spend -Reaction/&SpendPowerDrawInspirationTitle=Draw Inspiration +Reaction/&SpendPowerDrawInspirationAttackDescription=You are about to miss an attack roll. You can react to add 3 to the attack roll. +Reaction/&SpendPowerDrawInspirationAttackReactDescription=Add 3 to the roll. +Reaction/&SpendPowerDrawInspirationAttackReactTitle=Draw Inspiration +Reaction/&SpendPowerDrawInspirationAttackTitle=Draw Inspiration +Reaction/&SpendPowerDrawInspirationSavingDescription=You failed a saving roll against {0}'s {1}. You can react to add 3 to the roll. +Reaction/&SpendPowerDrawInspirationSavingReactDescription=Add 3 to the roll. +Reaction/&SpendPowerDrawInspirationSavingReactTitle=Draw Inspiration +Reaction/&SpendPowerDrawInspirationSavingTitle=Draw Inspiration Tooltip/&SelectAnAlly=Please select an ally. Tooltip/&TargetAlreadyAssisted=Target is already assisted. Tooltip/&TargetOutOfRange=Target is out of range. diff --git a/SolastaUnfinishedBusiness/Translations/en/SubClasses/CircleOfTheCosmos-en.txt b/SolastaUnfinishedBusiness/Translations/en/SubClasses/CircleOfTheCosmos-en.txt index 300d356ee8..d3e3ce08a0 100644 --- a/SolastaUnfinishedBusiness/Translations/en/SubClasses/CircleOfTheCosmos-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/SubClasses/CircleOfTheCosmos-en.txt @@ -40,7 +40,7 @@ Reaction/&SpendPowerWealCosmosOmenCheckDescription={0} failed a check roll. {1} Reaction/&SpendPowerWealCosmosOmenCheckReactDescription=Roll a D6 to help an ally with their check roll. Reaction/&SpendPowerWealCosmosOmenCheckReactTitle=Weal Reaction/&SpendPowerWealCosmosOmenCheckTitle=Cosmic Omen: Weal -Reaction/&SpendPowerWealCosmosOmenSavingDescription={0} failed a save roll against {1}. {2} can react to roll a D6 and add the result to the save roll. +Reaction/&SpendPowerWealCosmosOmenSavingDescription={0} failed a saving roll against {1}'s {2}. You can react to roll a D6 and add the result to the roll. Reaction/&SpendPowerWealCosmosOmenSavingReactDescription=Roll a D6 to help an ally with their saving roll. Reaction/&SpendPowerWealCosmosOmenSavingReactTitle=Weal Reaction/&SpendPowerWealCosmosOmenSavingTitle=Cosmic Omen: Weal @@ -52,7 +52,7 @@ Reaction/&SpendPowerWoeCosmosOmenCheckDescription={0} succeed a check roll. {1} Reaction/&SpendPowerWoeCosmosOmenCheckReactDescription=Roll a D6 to distract an enemy with their check roll. Reaction/&SpendPowerWoeCosmosOmenCheckReactTitle=Woe Reaction/&SpendPowerWoeCosmosOmenCheckTitle=Cosmic Omen: Woe -Reaction/&SpendPowerWoeCosmosOmenSavingDescription={0} succeed a save roll against {1}. {2} can react to roll a D6 and subtract the result from the save roll. +Reaction/&SpendPowerWoeCosmosOmenSavingDescription={0} succeed a saving roll against {1}'s {2}. You can react to roll a D6 and subtract the result from the roll. Reaction/&SpendPowerWoeCosmosOmenSavingReactDescription=Roll a D6 to distract an enemy with their saving roll. Reaction/&SpendPowerWoeCosmosOmenSavingReactTitle=Woe Reaction/&SpendPowerWoeCosmosOmenSavingTitle=Cosmic Omen: Woe diff --git a/SolastaUnfinishedBusiness/Translations/en/SubClasses/MartialRoyalKnight-en.txt b/SolastaUnfinishedBusiness/Translations/en/SubClasses/MartialRoyalKnight-en.txt index 1c4f9ef08c..7c23e3eb74 100644 --- a/SolastaUnfinishedBusiness/Translations/en/SubClasses/MartialRoyalKnight-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/SubClasses/MartialRoyalKnight-en.txt @@ -8,9 +8,9 @@ Feature/&PowerRoyalKnightRallyingCryDescription=Starting at 3rd level, you repla Feature/&PowerRoyalKnightRallyingCryTitle=Rallying Cry Feature/&PowerRoyalKnightSpiritedSurgeDescription=Starting at 18th level, your Inspiring Surge also grants advantage on all attacks, saving throws and ability checks for 1 round. Feature/&PowerRoyalKnightSpiritedSurgeTitle=Spirited Surge -Reaction/&SpendPowerRoyalKnightInspiringProtectionDescriptionAlly={0} failed save roll against {1}'s {2}. You can spend your reaction to improvise help that will reroll the save. -Reaction/&SpendPowerRoyalKnightInspiringProtectionDescriptionSelf={0} failed save roll against {1}'s {2} and can spend reaction to improvise help that will reroll the save. -Reaction/&SpendPowerRoyalKnightInspiringProtectionReactDescription=Spend use of this power to help ally with their saving roll. +Reaction/&SpendPowerRoyalKnightInspiringProtectionDescriptionAlly={0} failed a saving roll against {1}'s {2}. You can react to reroll the save. +Reaction/&SpendPowerRoyalKnightInspiringProtectionDescriptionSelf={0} failed a saving roll against {1}'s {2} and can react to reroll the save. +Reaction/&SpendPowerRoyalKnightInspiringProtectionReactDescription=Reroll the save. Reaction/&SpendPowerRoyalKnightInspiringProtectionReactTitle=Inspiring Protection Reaction/&SpendPowerRoyalKnightInspiringProtectionTitle=Inspiring Protection Subclass/&MartialRoyalKnightDescription=A knight who inspires greatness in others by committing brave deeds in battle. A Banneret is a skilled warrior, but one leading a band of allies can transform even the most poorly equipped militia into a ferocious war band. diff --git a/SolastaUnfinishedBusiness/Translations/en/SubClasses/SorcerousWildMagic-en.txt b/SolastaUnfinishedBusiness/Translations/en/SubClasses/SorcerousWildMagic-en.txt index dfa713200e..05cdcb67c7 100644 --- a/SolastaUnfinishedBusiness/Translations/en/SubClasses/SorcerousWildMagic-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/SubClasses/SorcerousWildMagic-en.txt @@ -85,11 +85,11 @@ Reaction/&SpendPowerBendLuckEnemyCheckDescription={0} succeed a check rol Reaction/&SpendPowerBendLuckEnemyCheckReactDescription=Roll a d4 to subtract the result from the check roll. Reaction/&SpendPowerBendLuckEnemyCheckReactTitle=Bend Luck Reaction/&SpendPowerBendLuckEnemyCheckTitle=Bend Luck -Reaction/&SpendPowerBendLuckEnemySavingDescription={0} succeed a saving roll. You can react to roll a d4 and subtract the result from the saving roll. +Reaction/&SpendPowerBendLuckEnemySavingDescription={0} succeed a saving roll against {1}'s {2}. You can react to roll a d4 and subtract the result from the roll. Reaction/&SpendPowerBendLuckEnemySavingReactDescription=Roll a d4 to subtract the result from the saving roll. Reaction/&SpendPowerBendLuckEnemySavingReactTitle=Bend Luck Reaction/&SpendPowerBendLuckEnemySavingTitle=Bend Luck -Reaction/&SpendPowerBendLuckSavingDescription={0} failed a saving roll. You can react to roll a d4 and add the result to the saving roll. +Reaction/&SpendPowerBendLuckSavingDescription={0} failed a saving roll against {1}'s {2}. You can react to roll a d4 and add the result to the saving roll. Reaction/&SpendPowerBendLuckSavingReactDescription=Roll a d4 to add the result to the saving roll. Reaction/&SpendPowerBendLuckSavingReactTitle=Bend Luck Reaction/&SpendPowerBendLuckSavingTitle=Bend Luck @@ -97,7 +97,7 @@ Reaction/&SpendPowerTidesOfChaosAttackDescription=You missed an attack. You can Reaction/&SpendPowerTidesOfChaosAttackReactDescription=Roll the attack with advantage. Reaction/&SpendPowerTidesOfChaosAttackReactTitle=Tides of Chaos Reaction/&SpendPowerTidesOfChaosAttackTitle=Tides of Chaos -Reaction/&SpendPowerTidesOfChaosSaveDescription=You missed a save. You can use Tides of Chaos against {0}'s {1} and reroll the save with advantage. +Reaction/&SpendPowerTidesOfChaosSaveDescription=You failed a saving roll against {0}'s {1}. You can react to reroll the save with advantage. Reaction/&SpendPowerTidesOfChaosSaveReactDescription=Roll the save with advantage. Reaction/&SpendPowerTidesOfChaosSaveReactTitle=Tides of Chaos Reaction/&SpendPowerTidesOfChaosSaveTitle=Tides of Chaos diff --git a/SolastaUnfinishedBusiness/Translations/en/SubClasses/WizardWarMagic-en.txt b/SolastaUnfinishedBusiness/Translations/en/SubClasses/WizardWarMagic-en.txt index b1ecffb000..a1ca700e7a 100644 --- a/SolastaUnfinishedBusiness/Translations/en/SubClasses/WizardWarMagic-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/SubClasses/WizardWarMagic-en.txt @@ -16,8 +16,8 @@ Reaction/&CustomReactionArcaneDeflectionAttackDescription=You are about to be hi Reaction/&CustomReactionArcaneDeflectionAttackReactDescription=Force a failure Reaction/&CustomReactionArcaneDeflectionAttackReactTitle=Arcane Deflection Reaction/&CustomReactionArcaneDeflectionAttackTitle=Arcane Deflection -Reaction/&CustomReactionArcaneDeflectionSavingDescription=You failed a saving throw. You can use your reaction to add your Intelligence modifier to the saving roll and make it succeed instead. -Reaction/&CustomReactionArcaneDeflectionSavingReactDescription=Force a failure +Reaction/&CustomReactionArcaneDeflectionSavingDescription=You failed a saving roll against {0}>'s {1}. You can react to add your Intelligence modifier to the roll and make it succeed. +Reaction/&CustomReactionArcaneDeflectionSavingReactDescription=Succeed Reaction/&CustomReactionArcaneDeflectionSavingReactTitle=Arcane Deflection Reaction/&CustomReactionArcaneDeflectionSavingTitle=Arcane Deflection Subclass/&WizardWarMagicDescription=A variety of arcane colleges specialize in training wizards for war. The tradition of War Magic blends principles of evocation and abjuration, rather than specializing in either of those schools. It teaches techniques that empower a caster's spells, while also providing methods for wizards to bolster their own defenses. Followers of this tradition are known as war mages. They see their magic as both a weapon and armor, a resource superior to any piece of steel. War mages act fast in battle, using their spells to seize tactical control of a situation. Their spells strike hard, while their defensive skills foil their opponents' attempts to counterattack. War mages are also adept at turning other spell casters' magical energy against them. diff --git a/SolastaUnfinishedBusiness/Translations/es/Feats/OtherFeats-es.txt b/SolastaUnfinishedBusiness/Translations/es/Feats/OtherFeats-es.txt index be0a2d26c9..119e37f6e6 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Feats/OtherFeats-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Feats/OtherFeats-es.txt @@ -145,13 +145,13 @@ Reaction/&SpendPowerLuckyEnemyAttackDescription=Un enemigo te ha golpeado. Puede Reaction/&SpendPowerLuckyEnemyAttackReactDescription=Lanza un d20 para reemplazar la tirada de ataque. Reaction/&SpendPowerLuckyEnemyAttackReactTitle=Afortunado Reaction/&SpendPowerLuckyEnemyAttackTitle=Afortunado -Reaction/&SpendPowerLuckySavingDescription=Fallaste una tirada de salvación. Puedes reaccionar para tirar un d20 y reemplazar la tirada de salvación. +Reaction/&SpendPowerLuckySavingDescription=Fallaste una tirada de salvación contra el {1} de {0}. Puedes reaccionar tirando un d20 y reemplazar la tirada. Reaction/&SpendPowerLuckySavingReactDescription=Tira un d20 para reemplazar la tirada de salvación. Reaction/&SpendPowerLuckySavingReactTitle=Afortunado Reaction/&SpendPowerLuckySavingTitle=Afortunado -Reaction/&SpendPowerMageSlayerDescription=Fallaste una tirada de salvación contra {0}. Puedes hacer que tú mismo la superes. -Reaction/&SpendPowerMageSlayerReactDescription=Haz que tú mismo triunfes. -Reaction/&SpendPowerMageSlayerReactTitle=Tener éxito +Reaction/&SpendPowerMageSlayerDescription=Fallaste una tirada de salvación contra el {1} de {0}. Puedes reaccionar para tener éxito. +Reaction/&SpendPowerMageSlayerReactDescription=Tener éxito. +Reaction/&SpendPowerMageSlayerReactTitle=Asesino de magos Reaction/&SpendPowerMageSlayerTitle=Asesino de magos Reaction/&SpendPowerReactiveResistanceDescription={0} está a punto de golpearte. Puedes usar tu reacción para darte resistencia a {1} hasta el final de su turno. Reaction/&SpendPowerReactiveResistanceReactDescription=Date resistencia. diff --git a/SolastaUnfinishedBusiness/Translations/es/Feats/Races-es.txt b/SolastaUnfinishedBusiness/Translations/es/Feats/Races-es.txt index af31fcff72..c3f612335a 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Feats/Races-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Feats/Races-es.txt @@ -75,7 +75,7 @@ Reaction/&CustomReactionBountifulLuckCheckDescription={0} falló una tirada de v Reaction/&CustomReactionBountifulLuckCheckReactDescription=Lanza un d20 para reemplazar la tirada de verificación. Reaction/&CustomReactionBountifulLuckCheckReactTitle=Suerte abundante Reaction/&CustomReactionBountifulLuckCheckTitle=Suerte abundante -Reaction/&CustomReactionBountifulLuckSavingDescription={0} falló una tirada de salvación contra {1}. {2} puede reaccionar para tirar un d20 y reemplazar la tirada de salvación. +Reaction/&CustomReactionBountifulLuckSavingDescription={0} falló una tirada de salvación contra {2} de {1}. Puedes reaccionar para tirar un d20 y reemplazar la tirada. Reaction/&CustomReactionBountifulLuckSavingReactDescription=Tira un d20 para reemplazar la tirada de salvación. Reaction/&CustomReactionBountifulLuckSavingReactTitle=Suerte abundante Reaction/&CustomReactionBountifulLuckSavingTitle=Suerte abundante diff --git a/SolastaUnfinishedBusiness/Translations/es/Inventor-es.txt b/SolastaUnfinishedBusiness/Translations/es/Inventor-es.txt index cea009b052..f3c062424b 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Inventor-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Inventor-es.txt @@ -39,10 +39,10 @@ Reaction/&SpendPowerInventorFlashOfGeniusCheckDescription={0} falló una tirada Reaction/&SpendPowerInventorFlashOfGeniusCheckReactDescription=Lanza un d20 para reemplazar la tirada de verificación. Reaction/&SpendPowerInventorFlashOfGeniusCheckReactTitle=Reaccionar Reaction/&SpendPowerInventorFlashOfGeniusCheckTitle=Destello de genio -Reaction/&SpendPowerInventorFlashOfGeniusReactDescription=Utiliza este poder para ayudar a tu aliado con su tirada de salvación. -Reaction/&SpendPowerInventorFlashOfGeniusReactDescriptionAlly={0} falló una tirada de salvación contra el {2} de {1}. Puedes gastar tu reacción para improvisar una ayuda que convierta la tirada en un éxito. -Reaction/&SpendPowerInventorFlashOfGeniusReactDescriptionSelf={0} falló una tirada de salvación contra {2} de {1} y puede gastar reacción para improvisar ayuda que convertirá la tirada en éxito. -Reaction/&SpendPowerInventorFlashOfGeniusReactTitle=Reaccionar +Reaction/&SpendPowerInventorFlashOfGeniusReactDescription=Tener éxito +Reaction/&SpendPowerInventorFlashOfGeniusReactDescriptionAlly={0} falló una tirada de salvación contra {2} de {1}. Puedes reaccionar para sumar tu modificador de Inteligencia a la tirada y hacer que tenga éxito. +Reaction/&SpendPowerInventorFlashOfGeniusReactDescriptionSelf={0} falló una tirada de salvación contra {2} de {1} y puede reaccionar para agregar su modificador de Inteligencia a la tirada y hacer que tenga éxito. +Reaction/&SpendPowerInventorFlashOfGeniusReactTitle=Destello de genio Reaction/&SpendPowerInventorFlashOfGeniusTitle=Destello de genio Reaction/&SpendPowerSoulOfArtificeDescription=Recuperas una cantidad de puntos de vida igual a tu nivel de pícaro y te pones de pie. Reaction/&SpendPowerSoulOfArtificeReactDescription=Recuperas una cantidad de puntos de vida igual a tu nivel de pícaro y te levantas. diff --git a/SolastaUnfinishedBusiness/Translations/es/Races/Imp-es.txt b/SolastaUnfinishedBusiness/Translations/es/Races/Imp-es.txt index 28a6682162..d31e7954da 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Races/Imp-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Races/Imp-es.txt @@ -40,9 +40,14 @@ Race/&RaceImpForestTitle=Diablillo del bosque Race/&RaceImpInfernalDescription=Los experimentos interplanetarios durante la era de Manacalon llevaron a demonios y otras criaturas al plano material. Si bien muchas de estas criaturas fueron finalmente contenidas o desterradas, los escurridizos duendes pudieron esconderse, adaptándose en secreto y prosperando en varios rincones de las Tierras Baldías desde entonces. Ahora, algunos de ellos han decidido emerger y explorar el mundo que los rodea, incluso si a quienes están en él no les agrada su naturaleza demoníaca. Race/&RaceImpInfernalTitle=Diablillo infernal Race/&RaceImpTitle=Imp -Reaction/&SpendPowerDrawInspirationDescription=Estás a punto de fallar una tirada de ataque o una tirada de salvación. Gasta poder para sumar 3 a la tirada de ataque o a la tirada de salvación. -Reaction/&SpendPowerDrawInspirationReactTitle=Gastar -Reaction/&SpendPowerDrawInspirationTitle=Inspiración para pintar +Reaction/&SpendPowerDrawInspirationAttackDescription=Estás a punto de fallar una tirada de ataque. Puedes reaccionar para sumar 3 a la tirada de ataque. +Reaction/&SpendPowerDrawInspirationAttackReactDescription=Añade 3 al rollo. +Reaction/&SpendPowerDrawInspirationAttackReactTitle=Dibujar inspiración +Reaction/&SpendPowerDrawInspirationAttackTitle=Dibujar inspiración +Reaction/&SpendPowerDrawInspirationSavingDescription=Fallaste una tirada de salvación contra el {1} de {0}. Puedes reaccionar para sumar 3 a la tirada. +Reaction/&SpendPowerDrawInspirationSavingReactDescription=Añade 3 al rollo. +Reaction/&SpendPowerDrawInspirationSavingReactTitle=Dibujar inspiración +Reaction/&SpendPowerDrawInspirationSavingTitle=Dibujar inspiración Tooltip/&SelectAnAlly=Por favor seleccione un aliado. Tooltip/&TargetAlreadyAssisted=El objetivo ya está asistido. Tooltip/&TargetOutOfRange=El objetivo está fuera de alcance. diff --git a/SolastaUnfinishedBusiness/Translations/es/SubClasses/CircleOfTheCosmos-es.txt b/SolastaUnfinishedBusiness/Translations/es/SubClasses/CircleOfTheCosmos-es.txt index fdd1420034..55a12a77ec 100644 --- a/SolastaUnfinishedBusiness/Translations/es/SubClasses/CircleOfTheCosmos-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/SubClasses/CircleOfTheCosmos-es.txt @@ -40,7 +40,7 @@ Reaction/&SpendPowerWealCosmosOmenCheckDescription={0} falló una tirada de veri Reaction/&SpendPowerWealCosmosOmenCheckReactDescription=Lanza un D6 para ayudar a un aliado con su tirada de verificación. Reaction/&SpendPowerWealCosmosOmenCheckReactTitle=Roncha Reaction/&SpendPowerWealCosmosOmenCheckTitle=Presagio cósmico: prosperidad -Reaction/&SpendPowerWealCosmosOmenSavingDescription={0} falló una tirada de salvación contra {1}. {2} puede reaccionar tirando un D6 y añadir el resultado a la tirada de salvación. +Reaction/&SpendPowerWealCosmosOmenSavingDescription={0} falló una tirada de salvación contra {2} de {1}. Puedes reaccionar tirando un D6 y sumar el resultado a la tirada. Reaction/&SpendPowerWealCosmosOmenSavingReactDescription=Lanza un D6 para ayudar a un aliado con su tirada de salvación. Reaction/&SpendPowerWealCosmosOmenSavingReactTitle=Roncha Reaction/&SpendPowerWealCosmosOmenSavingTitle=Presagio cósmico: prosperidad @@ -52,7 +52,7 @@ Reaction/&SpendPowerWoeCosmosOmenCheckDescription={0} tiene éxito en una tirada Reaction/&SpendPowerWoeCosmosOmenCheckReactDescription=Tira un D6 para distraer a un enemigo con su tirada de control. Reaction/&SpendPowerWoeCosmosOmenCheckReactTitle=Woe Reaction/&SpendPowerWoeCosmosOmenCheckTitle=Presagio cósmico: aflicción -Reaction/&SpendPowerWoeCosmosOmenSavingDescription={0} tiene éxito en una tirada de salvación contra {1}. {2} puede reaccionar tirando un D6 y restar el resultado de la tirada de salvación. +Reaction/&SpendPowerWoeCosmosOmenSavingDescription={0} supera una tirada de salvación contra el {2} de {1}. Puedes reaccionar tirando un D6 y restar el resultado de la tirada. Reaction/&SpendPowerWoeCosmosOmenSavingReactDescription=Lanza un D6 para distraer a un enemigo con su tirada de salvación. Reaction/&SpendPowerWoeCosmosOmenSavingReactTitle=Woe Reaction/&SpendPowerWoeCosmosOmenSavingTitle=Presagio cósmico: aflicción diff --git a/SolastaUnfinishedBusiness/Translations/es/SubClasses/MartialRoyalKnight-es.txt b/SolastaUnfinishedBusiness/Translations/es/SubClasses/MartialRoyalKnight-es.txt index 65489bd537..757b325ff5 100644 --- a/SolastaUnfinishedBusiness/Translations/es/SubClasses/MartialRoyalKnight-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/SubClasses/MartialRoyalKnight-es.txt @@ -8,9 +8,9 @@ Feature/&PowerRoyalKnightRallyingCryDescription=A partir del nivel 3, reemplazas Feature/&PowerRoyalKnightRallyingCryTitle=Grito de guerra Feature/&PowerRoyalKnightSpiritedSurgeDescription=A partir del nivel 18, tu Oleada inspiradora también otorga ventaja en todos los ataques, tiradas de salvación y pruebas de característica durante 1 asalto. Feature/&PowerRoyalKnightSpiritedSurgeTitle=Oleada enérgica -Reaction/&SpendPowerRoyalKnightInspiringProtectionDescriptionAlly={0} tirada de salvación fallida contra {2} de {1}. Puedes gastar tu reacción para improvisar ayuda que repetirá la tirada de salvación. -Reaction/&SpendPowerRoyalKnightInspiringProtectionDescriptionSelf={0} falló en la tirada de salvación contra {1} y {2} y puede gastar reacción para improvisar una ayuda que repita la tirada de salvación. -Reaction/&SpendPowerRoyalKnightInspiringProtectionReactDescription=Utiliza este poder para ayudar a tu aliado con su tirada de salvación. +Reaction/&SpendPowerRoyalKnightInspiringProtectionDescriptionAlly={0} falló una tirada de salvación contra {2} de {1}. Puedes reaccionar para repetir la tirada de salvación. +Reaction/&SpendPowerRoyalKnightInspiringProtectionDescriptionSelf={0} falló una tirada de salvación contra {2} de {1} y puede reaccionar para repetir la tirada de salvación. +Reaction/&SpendPowerRoyalKnightInspiringProtectionReactDescription=Repetir la partida guardada. Reaction/&SpendPowerRoyalKnightInspiringProtectionReactTitle=Protección inspiradora Reaction/&SpendPowerRoyalKnightInspiringProtectionTitle=Protección inspiradora Subclass/&MartialRoyalKnightDescription=Un caballero que inspira grandeza en los demás al realizar actos valientes en la batalla. Un Banneret es un guerrero hábil, pero quien lidera un grupo de aliados puede transformar incluso la milicia peor equipada en una feroz banda de guerra. diff --git a/SolastaUnfinishedBusiness/Translations/es/SubClasses/SorcerousWildMagic-es.txt b/SolastaUnfinishedBusiness/Translations/es/SubClasses/SorcerousWildMagic-es.txt index 769a542737..f959e75c66 100644 --- a/SolastaUnfinishedBusiness/Translations/es/SubClasses/SorcerousWildMagic-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/SubClasses/SorcerousWildMagic-es.txt @@ -85,11 +85,11 @@ Reaction/&SpendPowerBendLuckEnemyCheckDescription={0} supera una tirada d Reaction/&SpendPowerBendLuckEnemyCheckReactDescription=Tira un d4 para restar el resultado de la tirada de verificación. Reaction/&SpendPowerBendLuckEnemyCheckReactTitle=Doblar la suerte Reaction/&SpendPowerBendLuckEnemyCheckTitle=Doblar la suerte -Reaction/&SpendPowerBendLuckEnemySavingDescription={0} supera una tirada de salvación. Puedes reaccionar tirando un d4 y restar el resultado de la tirada de salvación. +Reaction/&SpendPowerBendLuckEnemySavingDescription={0} supera una tirada de salvación contra el {2} de {1}. Puedes reaccionar tirando un d4 y restar el resultado de la tirada. Reaction/&SpendPowerBendLuckEnemySavingReactDescription=Tira un d4 para restar el resultado de la tirada de salvación. Reaction/&SpendPowerBendLuckEnemySavingReactTitle=Doblar la suerte Reaction/&SpendPowerBendLuckEnemySavingTitle=Doblar la suerte -Reaction/&SpendPowerBendLuckSavingDescription={0} Falló una tirada de salvación. Puedes reaccionar tirando un d4 y añadir el resultado a la tirada de salvación. +Reaction/&SpendPowerBendLuckSavingDescription={0} falló una tirada de salvación contra {2} de {1}. Puedes reaccionar tirando un d4 y añadir el resultado a la tirada de salvación. Reaction/&SpendPowerBendLuckSavingReactDescription=Tira un d4 para añadir el resultado a la tirada de salvación. Reaction/&SpendPowerBendLuckSavingReactTitle=Doblar la suerte Reaction/&SpendPowerBendLuckSavingTitle=Doblar la suerte @@ -97,7 +97,7 @@ Reaction/&SpendPowerTidesOfChaosAttackDescription=Fallaste un ataque. Puedes usa Reaction/&SpendPowerTidesOfChaosAttackReactDescription=Lanza el ataque con ventaja. Reaction/&SpendPowerTidesOfChaosAttackReactTitle=Mareas del caos Reaction/&SpendPowerTidesOfChaosAttackTitle=Mareas del caos -Reaction/&SpendPowerTidesOfChaosSaveDescription=No hiciste una tirada de salvación. Puedes usar Mareas del caos contra el {1} de {0} y repetir la tirada de salvación con ventaja. +Reaction/&SpendPowerTidesOfChaosSaveDescription=Fallaste una tirada de salvación contra el {1} de {0}. Puedes reaccionar para repetir la tirada de salvación con ventaja. Reaction/&SpendPowerTidesOfChaosSaveReactDescription=Realiza la tirada de salvación con ventaja. Reaction/&SpendPowerTidesOfChaosSaveReactTitle=Mareas del caos Reaction/&SpendPowerTidesOfChaosSaveTitle=Mareas del caos diff --git a/SolastaUnfinishedBusiness/Translations/es/SubClasses/WizardWarMagic-es.txt b/SolastaUnfinishedBusiness/Translations/es/SubClasses/WizardWarMagic-es.txt index 1045d1b2ce..b638248a72 100644 --- a/SolastaUnfinishedBusiness/Translations/es/SubClasses/WizardWarMagic-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/SubClasses/WizardWarMagic-es.txt @@ -16,8 +16,8 @@ Reaction/&CustomReactionArcaneDeflectionAttackDescription=Estás a punto de reci Reaction/&CustomReactionArcaneDeflectionAttackReactDescription=Forzar un fracaso Reaction/&CustomReactionArcaneDeflectionAttackReactTitle=Desviación arcana Reaction/&CustomReactionArcaneDeflectionAttackTitle=Desviación arcana -Reaction/&CustomReactionArcaneDeflectionSavingDescription=Fallaste una tirada de salvación. Puedes usar tu reacción para sumar tu modificador de Inteligencia a la tirada de salvación y hacer que tenga éxito. -Reaction/&CustomReactionArcaneDeflectionSavingReactDescription=Forzar un fracaso +Reaction/&CustomReactionArcaneDeflectionSavingDescription=Fallaste una tirada de salvación contra el {1} de {0}>. Puedes usar tu reacción para sumar tu modificador de Inteligencia a la tirada y hacer que tenga éxito. +Reaction/&CustomReactionArcaneDeflectionSavingReactDescription=Tener éxito Reaction/&CustomReactionArcaneDeflectionSavingReactTitle=Desviación arcana Reaction/&CustomReactionArcaneDeflectionSavingTitle=Desviación arcana Subclass/&WizardWarMagicDescription=Una variedad de escuelas arcanas se especializan en entrenar a magos para la guerra. La tradición de la Magia de Guerra combina los principios de evocación y abjuración, en lugar de especializarse en una de esas escuelas. Enseña técnicas que potencian los hechizos de un lanzador, al mismo tiempo que proporciona métodos para que los magos refuercen sus propias defensas. Los seguidores de esta tradición son conocidos como magos de guerra. Ven su magia como un arma y una armadura, un recurso superior a cualquier pieza de acero. Los magos de guerra actúan rápido en la batalla, usando sus hechizos para tomar el control táctico de una situación. Sus hechizos golpean con fuerza, mientras que sus habilidades defensivas frustran los intentos de sus oponentes de contraatacar. Los magos de guerra también son expertos en volver la energía mágica de otros lanzadores de hechizos en su contra. diff --git a/SolastaUnfinishedBusiness/Translations/fr/Feats/OtherFeats-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Feats/OtherFeats-fr.txt index beec8f7b4d..bcbc900461 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Feats/OtherFeats-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Feats/OtherFeats-fr.txt @@ -145,13 +145,13 @@ Reaction/&SpendPowerLuckyEnemyAttackDescription=Un ennemi vous a frappé. Vous p Reaction/&SpendPowerLuckyEnemyAttackReactDescription=Lancez un d20 pour remplacer le jet d'attaque. Reaction/&SpendPowerLuckyEnemyAttackReactTitle=Chanceux Reaction/&SpendPowerLuckyEnemyAttackTitle=Chanceux -Reaction/&SpendPowerLuckySavingDescription=Vous avez raté un jet de sauvegarde. Vous pouvez réagir en lançant un d20 et en remplaçant le jet de sauvegarde. +Reaction/&SpendPowerLuckySavingDescription=Vous avez raté un jet de sauvegarde contre le {1} de {0}. Vous pouvez réagir pour lancer un d20 et remplacer le jet. Reaction/&SpendPowerLuckySavingReactDescription=Lancez un d20 pour remplacer le jet de sauvegarde. Reaction/&SpendPowerLuckySavingReactTitle=Chanceux Reaction/&SpendPowerLuckySavingTitle=Chanceux -Reaction/&SpendPowerMageSlayerDescription=Vous avez raté un jet de sauvegarde contre {0}. Vous pouvez vous forcer à le réussir à la place. -Reaction/&SpendPowerMageSlayerReactDescription=Faites plutôt en sorte que vous réussissiez. -Reaction/&SpendPowerMageSlayerReactTitle=Réussir +Reaction/&SpendPowerMageSlayerDescription=Vous avez échoué à un jet de sauvegarde contre le {1} de {0}. Vous pouvez réagir pour réussir. +Reaction/&SpendPowerMageSlayerReactDescription=Réussir. +Reaction/&SpendPowerMageSlayerReactTitle=Tueur de mages Reaction/&SpendPowerMageSlayerTitle=Tueur de mages Reaction/&SpendPowerReactiveResistanceDescription={0} est sur le point de vous frapper ! Vous pouvez utiliser votre réaction pour vous donner une résistance à {1} jusqu'à la fin de son tour Reaction/&SpendPowerReactiveResistanceReactDescription=Donnez-vous de la résistance. diff --git a/SolastaUnfinishedBusiness/Translations/fr/Feats/Races-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Feats/Races-fr.txt index 764604cde0..4fbc5e3c4c 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Feats/Races-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Feats/Races-fr.txt @@ -75,7 +75,7 @@ Reaction/&CustomReactionBountifulLuckCheckDescription={0} a échoué à un jet d Reaction/&CustomReactionBountifulLuckCheckReactDescription=Lancez un d20 pour remplacer le jet de contrôle. Reaction/&CustomReactionBountifulLuckCheckReactTitle=Chance abondante Reaction/&CustomReactionBountifulLuckCheckTitle=Chance abondante -Reaction/&CustomReactionBountifulLuckSavingDescription={0} a échoué à un jet de sauvegarde contre {1}. {2} peut réagir pour lancer un d20 et remplacer le jet de sauvegarde. +Reaction/&CustomReactionBountifulLuckSavingDescription={0} a raté un jet de sauvegarde contre le {2} de {1}. Vous pouvez réagir pour lancer un d20 et remplacer le jet. Reaction/&CustomReactionBountifulLuckSavingReactDescription=Lancez un d20 pour remplacer le jet de sauvegarde. Reaction/&CustomReactionBountifulLuckSavingReactTitle=Chance abondante Reaction/&CustomReactionBountifulLuckSavingTitle=Chance abondante diff --git a/SolastaUnfinishedBusiness/Translations/fr/Inventor-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Inventor-fr.txt index 9f6a1a4ec6..ad0b5cf6c5 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Inventor-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Inventor-fr.txt @@ -39,10 +39,10 @@ Reaction/&SpendPowerInventorFlashOfGeniusCheckDescription={0} a échoué à un j Reaction/&SpendPowerInventorFlashOfGeniusCheckReactDescription=Lancez un d20 pour remplacer le jet de contrôle. Reaction/&SpendPowerInventorFlashOfGeniusCheckReactTitle=Réagir Reaction/&SpendPowerInventorFlashOfGeniusCheckTitle=Un éclair de génie -Reaction/&SpendPowerInventorFlashOfGeniusReactDescription=Utilisez ce pouvoir pour aider votre allié avec son jet de sauvegarde. -Reaction/&SpendPowerInventorFlashOfGeniusReactDescriptionAlly={0} a échoué à un jet de sauvegarde contre le {2} de {1}. Vous pouvez dépenser votre réaction pour improviser une aide qui transformera le jet en succès. -Reaction/&SpendPowerInventorFlashOfGeniusReactDescriptionSelf={0} a échoué à un jet de sauvegarde contre le {2} de {1} et peut dépenser une réaction pour improviser une aide qui transformera le jet en succès. -Reaction/&SpendPowerInventorFlashOfGeniusReactTitle=Réagir +Reaction/&SpendPowerInventorFlashOfGeniusReactDescription=Réussir +Reaction/&SpendPowerInventorFlashOfGeniusReactDescriptionAlly={0} a échoué à un jet de sauvegarde contre le {2} de {1}. Vous pouvez réagir pour ajouter votre modificateur d'Intelligence au jet et le faire réussir. +Reaction/&SpendPowerInventorFlashOfGeniusReactDescriptionSelf={0} a échoué à un jet de sauvegarde contre le {2} de {1} et peut réagir pour ajouter votre modificateur d'Intelligence au jet et le faire réussir. +Reaction/&SpendPowerInventorFlashOfGeniusReactTitle=Un éclair de génie Reaction/&SpendPowerInventorFlashOfGeniusTitle=Flash de génie Reaction/&SpendPowerSoulOfArtificeDescription=Vous récupérez un nombre de points de vie égal à votre niveau de voleur, et vous vous relevez. Reaction/&SpendPowerSoulOfArtificeReactDescription=Vous récupérez un nombre de points de vie égal à votre niveau de voleur, et vous vous relevez. diff --git a/SolastaUnfinishedBusiness/Translations/fr/Races/Imp-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Races/Imp-fr.txt index 235cf6fc6a..f9ff4c402a 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Races/Imp-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Races/Imp-fr.txt @@ -40,9 +40,14 @@ Race/&RaceImpForestTitle=Lutin de la forêt Race/&RaceImpInfernalDescription=Des expériences interplanaires menées durant l'ère Manacalon ont conduit à l'introduction de démons et d'autres créatures dans le plan matériel. Si nombre de ces créatures ont fini par être contenues ou bannies, les diablotins sournois ont pu se cacher, s'adaptant et prospérant secrètement dans diverses zones des Badlands depuis lors. Aujourd'hui, certains d'entre eux ont décidé d'émerger et d'explorer le monde qui les entoure, même si ceux qui y vivent ne prennent pas forcément à cœur leur nature démoniaque. Race/&RaceImpInfernalTitle=Lutin infernal Race/&RaceImpTitle=Imp -Reaction/&SpendPowerDrawInspirationDescription=Vous êtes sur le point de rater un jet d'attaque ou un jet de sauvegarde. Dépensez de la puissance pour ajouter 3 au jet d'attaque ou au jet de sauvegarde. -Reaction/&SpendPowerDrawInspirationReactTitle=Dépenser -Reaction/&SpendPowerDrawInspirationTitle=Dessiner l'inspiration +Reaction/&SpendPowerDrawInspirationAttackDescription=Vous êtes sur le point de rater un jet d'attaque. Vous pouvez réagir pour ajouter 3 au jet d'attaque. +Reaction/&SpendPowerDrawInspirationAttackReactDescription=Ajoutez 3 au jet. +Reaction/&SpendPowerDrawInspirationAttackReactTitle=Dessiner l'inspiration +Reaction/&SpendPowerDrawInspirationAttackTitle=Dessiner l'inspiration +Reaction/&SpendPowerDrawInspirationSavingDescription=Vous avez raté un jet de sauvegarde contre le {1} de {0}. Vous pouvez réagir pour ajouter 3 au jet. +Reaction/&SpendPowerDrawInspirationSavingReactDescription=Ajoutez 3 au jet. +Reaction/&SpendPowerDrawInspirationSavingReactTitle=Dessiner l'inspiration +Reaction/&SpendPowerDrawInspirationSavingTitle=Dessiner l'inspiration Tooltip/&SelectAnAlly=Veuillez sélectionner un allié. Tooltip/&TargetAlreadyAssisted=La cible est déjà assistée. Tooltip/&TargetOutOfRange=La cible est hors de portée. diff --git a/SolastaUnfinishedBusiness/Translations/fr/SubClasses/CircleOfTheCosmos-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/SubClasses/CircleOfTheCosmos-fr.txt index eb8ced2d68..45c2a6fcad 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/SubClasses/CircleOfTheCosmos-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/SubClasses/CircleOfTheCosmos-fr.txt @@ -40,7 +40,7 @@ Reaction/&SpendPowerWealCosmosOmenCheckDescription={0} a échoué à un jet de t Reaction/&SpendPowerWealCosmosOmenCheckReactDescription=Lancez un D6 pour aider un allié avec son jet de contrôle. Reaction/&SpendPowerWealCosmosOmenCheckReactTitle=Bonheur Reaction/&SpendPowerWealCosmosOmenCheckTitle=Présage cosmique : Weal -Reaction/&SpendPowerWealCosmosOmenSavingDescription={0} a échoué à un jet de sauvegarde contre {1}. {2} peut réagir en lançant un D6 et ajouter le résultat au jet de sauvegarde. +Reaction/&SpendPowerWealCosmosOmenSavingDescription={0} a raté un jet de sauvegarde contre le {2} de {1}. Vous pouvez réagir pour lancer un D6 et ajouter le résultat au jet. Reaction/&SpendPowerWealCosmosOmenSavingReactDescription=Lancez un D6 pour aider un allié avec son jet de sauvegarde. Reaction/&SpendPowerWealCosmosOmenSavingReactTitle=Bonheur Reaction/&SpendPowerWealCosmosOmenSavingTitle=Présage cosmique : Weal @@ -52,7 +52,7 @@ Reaction/&SpendPowerWoeCosmosOmenCheckDescription={0} réussit un jet de test. { Reaction/&SpendPowerWoeCosmosOmenCheckReactDescription=Lancez un D6 pour distraire un ennemi avec son jet de contrôle. Reaction/&SpendPowerWoeCosmosOmenCheckReactTitle=Woe Reaction/&SpendPowerWoeCosmosOmenCheckTitle=Présage cosmique : Malheur -Reaction/&SpendPowerWoeCosmosOmenSavingDescription={0} réussit un jet de sauvegarde contre {1}. {2} peut réagir pour lancer un D6 et soustraire le résultat du jet de sauvegarde. +Reaction/&SpendPowerWoeCosmosOmenSavingDescription={0} réussit un jet de sauvegarde contre le {2} de {1}. Vous pouvez réagir pour lancer un D6 et soustraire le résultat du jet. Reaction/&SpendPowerWoeCosmosOmenSavingReactDescription=Lancez un D6 pour distraire un ennemi avec son jet de sauvegarde. Reaction/&SpendPowerWoeCosmosOmenSavingReactTitle=Woe Reaction/&SpendPowerWoeCosmosOmenSavingTitle=Présage cosmique : Malheur diff --git a/SolastaUnfinishedBusiness/Translations/fr/SubClasses/MartialRoyalKnight-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/SubClasses/MartialRoyalKnight-fr.txt index 17c5e01a47..1a54d22988 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/SubClasses/MartialRoyalKnight-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/SubClasses/MartialRoyalKnight-fr.txt @@ -8,9 +8,9 @@ Feature/&PowerRoyalKnightRallyingCryDescription=À partir du niveau 3, vous remp Feature/&PowerRoyalKnightRallyingCryTitle=Cri de ralliement Feature/&PowerRoyalKnightSpiritedSurgeDescription=À partir du niveau 18, votre Surtension inspirante confère également un avantage sur toutes les attaques, jets de sauvegarde et tests de caractéristique pendant 1 round. Feature/&PowerRoyalKnightSpiritedSurgeTitle=Surtension fougueuse -Reaction/&SpendPowerRoyalKnightInspiringProtectionDescriptionAlly={0} a échoué au jet de sauvegarde contre le {2} de {1}. Vous pouvez dépenser votre réaction pour improviser une aide qui relancera le jet de sauvegarde. -Reaction/&SpendPowerRoyalKnightInspiringProtectionDescriptionSelf={0} a échoué au jet de sauvegarde contre le {2} de {1} et peut dépenser une réaction pour improviser une aide qui relancera le jet de sauvegarde. -Reaction/&SpendPowerRoyalKnightInspiringProtectionReactDescription=Utilisez ce pouvoir pour aider votre allié avec son jet de sauvegarde. +Reaction/&SpendPowerRoyalKnightInspiringProtectionDescriptionAlly={0} a raté un jet de sauvegarde contre le {2} de {1}. Vous pouvez réagir pour relancer le jet de sauvegarde. +Reaction/&SpendPowerRoyalKnightInspiringProtectionDescriptionSelf={0} a échoué à un jet de sauvegarde contre le {2} de {1} et peut réagir pour relancer le jet de sauvegarde. +Reaction/&SpendPowerRoyalKnightInspiringProtectionReactDescription=Relancer la sauvegarde. Reaction/&SpendPowerRoyalKnightInspiringProtectionReactTitle=Inspirer la protection Reaction/&SpendPowerRoyalKnightInspiringProtectionTitle=Inspirer la protection Subclass/&MartialRoyalKnightDescription=Un chevalier qui inspire la grandeur aux autres en accomplissant des actes de bravoure au combat. Un Banneret est un guerrier habile, mais celui qui dirige une bande d'alliés peut transformer même la milice la plus mal équipée en une bande de guerre féroce. diff --git a/SolastaUnfinishedBusiness/Translations/fr/SubClasses/SorcerousWildMagic-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/SubClasses/SorcerousWildMagic-fr.txt index f0cbfb8a41..e214ade09c 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/SubClasses/SorcerousWildMagic-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/SubClasses/SorcerousWildMagic-fr.txt @@ -85,11 +85,11 @@ Reaction/&SpendPowerBendLuckEnemyCheckDescription={0} réussit un jet de Reaction/&SpendPowerBendLuckEnemyCheckReactDescription=Lancez un d4 pour soustraire le résultat du jet de contrôle. Reaction/&SpendPowerBendLuckEnemyCheckReactTitle=Courber la chance Reaction/&SpendPowerBendLuckEnemyCheckTitle=Courber la chance -Reaction/&SpendPowerBendLuckEnemySavingDescription={0} réussit un jet de sauvegarde. Vous pouvez réagir en lançant un d4 et soustraire le résultat du jet de sauvegarde. +Reaction/&SpendPowerBendLuckEnemySavingDescription={0} réussit un jet de sauvegarde contre le {2} de {1}. Vous pouvez réagir pour lancer un d4 et soustraire le résultat du jet. Reaction/&SpendPowerBendLuckEnemySavingReactDescription=Lancez un d4 pour soustraire le résultat du jet de sauvegarde. Reaction/&SpendPowerBendLuckEnemySavingReactTitle=Courber la chance Reaction/&SpendPowerBendLuckEnemySavingTitle=Courber la chance -Reaction/&SpendPowerBendLuckSavingDescription={0} a raté un jet de sauvegarde. Vous pouvez réagir en lançant un d4 et ajouter le résultat au jet de sauvegarde. +Reaction/&SpendPowerBendLuckSavingDescription={0} a raté un jet de sauvegarde contre le {2} de {1}. Vous pouvez réagir pour lancer un d4 et ajouter le résultat au jet de sauvegarde. Reaction/&SpendPowerBendLuckSavingReactDescription=Lancez un d4 pour ajouter le résultat au jet de sauvegarde. Reaction/&SpendPowerBendLuckSavingReactTitle=Courber la chance Reaction/&SpendPowerBendLuckSavingTitle=Pliez la chance @@ -97,7 +97,7 @@ Reaction/&SpendPowerTidesOfChaosAttackDescription=Vous avez raté une attaque. V Reaction/&SpendPowerTidesOfChaosAttackReactDescription=Lancez l'attaque avec avantage. Reaction/&SpendPowerTidesOfChaosAttackReactTitle=Marées du chaos Reaction/&SpendPowerTidesOfChaosAttackTitle=Marées du chaos -Reaction/&SpendPowerTidesOfChaosSaveDescription=Vous avez raté une sauvegarde. Vous pouvez utiliser Marées du Chaos contre le {1} de {0} et relancer la sauvegarde avec avantage. +Reaction/&SpendPowerTidesOfChaosSaveDescription=Vous avez raté un jet de sauvegarde contre le {1} de {0}. Vous pouvez réagir pour relancer le jet de sauvegarde avec avantage. Reaction/&SpendPowerTidesOfChaosSaveReactDescription=Lancez la sauvegarde avec avantage. Reaction/&SpendPowerTidesOfChaosSaveReactTitle=Marées du chaos Reaction/&SpendPowerTidesOfChaosSaveTitle=Marées du chaos diff --git a/SolastaUnfinishedBusiness/Translations/fr/SubClasses/WizardWarMagic-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/SubClasses/WizardWarMagic-fr.txt index 8cbd92f629..1f62886e1a 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/SubClasses/WizardWarMagic-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/SubClasses/WizardWarMagic-fr.txt @@ -16,8 +16,8 @@ Reaction/&CustomReactionArcaneDeflectionAttackDescription=Vous êtes sur le poin Reaction/&CustomReactionArcaneDeflectionAttackReactDescription=Forcer un échec Reaction/&CustomReactionArcaneDeflectionAttackReactTitle=Déviation des Arcanes Reaction/&CustomReactionArcaneDeflectionAttackTitle=Déviation des arcanes -Reaction/&CustomReactionArcaneDeflectionSavingDescription=Vous avez raté un jet de sauvegarde. Vous pouvez utiliser votre réaction pour ajouter votre modificateur d'Intelligence au jet de sauvegarde et le faire réussir. -Reaction/&CustomReactionArcaneDeflectionSavingReactDescription=Forcer un échec +Reaction/&CustomReactionArcaneDeflectionSavingDescription=Vous avez raté un jet de sauvegarde contre le {0}>{1}. Vous pouvez utiliser votre réaction pour ajouter votre modificateur d'Intelligence au jet et le faire réussir. +Reaction/&CustomReactionArcaneDeflectionSavingReactDescription=Réussir Reaction/&CustomReactionArcaneDeflectionSavingReactTitle=Déviation des arcanes Reaction/&CustomReactionArcaneDeflectionSavingTitle=Déviation des arcanes Subclass/&WizardWarMagicDescription=Plusieurs écoles de magie noire se spécialisent dans la formation des sorciers à la guerre. La tradition de la magie de guerre associe les principes d'évocation et d'abjuration, plutôt que de se spécialiser dans l'une ou l'autre de ces écoles. Elle enseigne des techniques qui renforcent les sorts d'un lanceur, tout en fournissant des méthodes permettant aux sorciers de renforcer leurs propres défenses. Les adeptes de cette tradition sont connus sous le nom de mages de guerre. Ils considèrent leur magie à la fois comme une arme et une armure, une ressource supérieure à n'importe quelle pièce d'acier. Les mages de guerre agissent rapidement au combat, utilisant leurs sorts pour prendre le contrôle tactique d'une situation. Leurs sorts frappent fort, tandis que leurs compétences défensives déjouent les tentatives de contre-attaque de leurs adversaires. Les mages de guerre sont également experts dans l'art de retourner l'énergie magique des autres lanceurs de sorts contre eux. diff --git a/SolastaUnfinishedBusiness/Translations/it/Feats/OtherFeats-it.txt b/SolastaUnfinishedBusiness/Translations/it/Feats/OtherFeats-it.txt index f428febc85..59d39cb39f 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Feats/OtherFeats-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Feats/OtherFeats-it.txt @@ -145,13 +145,13 @@ Reaction/&SpendPowerLuckyEnemyAttackDescription=Un nemico ti ha colpito. Puoi re Reaction/&SpendPowerLuckyEnemyAttackReactDescription=Tira un d20 per sostituire il tiro per colpire. Reaction/&SpendPowerLuckyEnemyAttackReactTitle=Fortunato Reaction/&SpendPowerLuckyEnemyAttackTitle=Fortunato -Reaction/&SpendPowerLuckySavingDescription=Hai fallito un tiro salvezza. Puoi reagire lanciando un d20 e sostituire il tiro salvezza. +Reaction/&SpendPowerLuckySavingDescription=Hai fallito un tiro salvezza contro {0} di {1}. Puoi reagire tirando un d20 e sostituire il tiro. Reaction/&SpendPowerLuckySavingReactDescription=Tira un d20 per sostituire il tiro salvezza. Reaction/&SpendPowerLuckySavingReactTitle=Fortunato Reaction/&SpendPowerLuckySavingTitle=Fortunato -Reaction/&SpendPowerMageSlayerDescription=Hai fallito un tiro salvezza contro {0}. Puoi invece farti superare. -Reaction/&SpendPowerMageSlayerReactDescription=Piuttosto, fai in modo che tu riesca. -Reaction/&SpendPowerMageSlayerReactTitle=Avere successo +Reaction/&SpendPowerMageSlayerDescription=Hai fallito un tiro salvezza contro {1} di {0}. Puoi reagire per avere successo. +Reaction/&SpendPowerMageSlayerReactDescription=Avere successo. +Reaction/&SpendPowerMageSlayerReactTitle=Cacciatore di maghi Reaction/&SpendPowerMageSlayerTitle=Cacciatore di maghi Reaction/&SpendPowerReactiveResistanceDescription={0} sta per colpirti! Puoi usare la tua reazione per darti resistenza a {1} fino alla fine del suo turno Reaction/&SpendPowerReactiveResistanceReactDescription=Creati una resistenza. diff --git a/SolastaUnfinishedBusiness/Translations/it/Feats/Races-it.txt b/SolastaUnfinishedBusiness/Translations/it/Feats/Races-it.txt index a66f5088a1..a4149be074 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Feats/Races-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Feats/Races-it.txt @@ -75,7 +75,7 @@ Reaction/&CustomReactionBountifulLuckCheckDescription={0} ha fallito un tiro di Reaction/&CustomReactionBountifulLuckCheckReactDescription=Tira un d20 per sostituire il tiro di controllo. Reaction/&CustomReactionBountifulLuckCheckReactTitle=Buona fortuna Reaction/&CustomReactionBountifulLuckCheckTitle=Fortuna abbondante -Reaction/&CustomReactionBountifulLuckSavingDescription={0} ha fallito un tiro salvezza contro {1}. {2} può reagire tirando un d20 e sostituire il tiro salvezza. +Reaction/&CustomReactionBountifulLuckSavingDescription={0} ha fallito un tiro salvezza contro {2} di {1}. Puoi reagire tirando un d20 e sostituire il tiro. Reaction/&CustomReactionBountifulLuckSavingReactDescription=Tira un d20 per sostituire il tiro salvezza. Reaction/&CustomReactionBountifulLuckSavingReactTitle=Buona fortuna Reaction/&CustomReactionBountifulLuckSavingTitle=Buona fortuna diff --git a/SolastaUnfinishedBusiness/Translations/it/Inventor-it.txt b/SolastaUnfinishedBusiness/Translations/it/Inventor-it.txt index 5837ab2265..b44e9f386e 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Inventor-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Inventor-it.txt @@ -39,10 +39,10 @@ Reaction/&SpendPowerInventorFlashOfGeniusCheckDescription={0} ha fallito un tiro Reaction/&SpendPowerInventorFlashOfGeniusCheckReactDescription=Tira un d20 per sostituire il tiro di controllo. Reaction/&SpendPowerInventorFlashOfGeniusCheckReactTitle=Reagire Reaction/&SpendPowerInventorFlashOfGeniusCheckTitle=Lampo di genio -Reaction/&SpendPowerInventorFlashOfGeniusReactDescription=Utilizza questo potere per aiutare l'alleato nel suo tiro salvezza. -Reaction/&SpendPowerInventorFlashOfGeniusReactDescriptionAlly={0} ha fallito un tiro salvezza contro {2} di {1}. Puoi usare la tua reazione per improvvisare un aiuto che trasformerà il tiro in un successo. -Reaction/&SpendPowerInventorFlashOfGeniusReactDescriptionSelf={0} non ha superato il tiro salvezza contro {2} di {1} e può usare la reazione per improvvisare un aiuto che trasformerà il tiro in un successo. -Reaction/&SpendPowerInventorFlashOfGeniusReactTitle=Reagire +Reaction/&SpendPowerInventorFlashOfGeniusReactDescription=Avere successo +Reaction/&SpendPowerInventorFlashOfGeniusReactDescriptionAlly={0} ha fallito un tiro salvezza contro {2} di {1}. Puoi reagire aggiungendo il tuo modificatore di Intelligenza al tiro e farlo riuscire. +Reaction/&SpendPowerInventorFlashOfGeniusReactDescriptionSelf={0} ha fallito un tiro salvezza contro {2} di {1} e può reagire aggiungendo il tuo modificatore di Intelligenza al tiro e facendolo riuscire. +Reaction/&SpendPowerInventorFlashOfGeniusReactTitle=Lampo di genio Reaction/&SpendPowerInventorFlashOfGeniusTitle=Lampo di genio Reaction/&SpendPowerSoulOfArtificeDescription=Recuperi un numero di punti ferita pari al tuo livello da ladro e ti rialzi. Reaction/&SpendPowerSoulOfArtificeReactDescription=Recuperi un numero di punti ferita pari al tuo livello da ladro e ti rialzi. diff --git a/SolastaUnfinishedBusiness/Translations/it/Races/Imp-it.txt b/SolastaUnfinishedBusiness/Translations/it/Races/Imp-it.txt index 234e450fd8..27e5119946 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Races/Imp-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Races/Imp-it.txt @@ -40,9 +40,14 @@ Race/&RaceImpForestTitle=Folletto della foresta Race/&RaceImpInfernalDescription=Gli esperimenti interplanetari durante l'era di Manacalon portarono demoni e altre creature a essere portati nel piano materiale. Mentre molte di queste creature furono alla fine contenute o bandite, gli imp furtivi riuscirono a nascondersi, adattandosi segretamente e prosperando in varie sacche delle Badlands da allora. Ora, alcuni di loro hanno deciso di emergere ed esplorare il mondo che li circonda, anche se chi vi si trova potrebbe non prendere bene la loro natura demoniaca. Race/&RaceImpInfernalTitle=Folletto infernale Race/&RaceImpTitle=Imp -Reaction/&SpendPowerDrawInspirationDescription=Stai per fallire un tiro per colpire o un tiro salvezza. Spendi potere per aggiungere 3 al tiro per colpire o al tiro salvezza. -Reaction/&SpendPowerDrawInspirationReactTitle=Trascorrere -Reaction/&SpendPowerDrawInspirationTitle=Trai ispirazione +Reaction/&SpendPowerDrawInspirationAttackDescription=Stai per mancare un tiro di attacco. Puoi reagire aggiungendo 3 al tiro di attacco. +Reaction/&SpendPowerDrawInspirationAttackReactDescription=Aggiungere 3 al tiro. +Reaction/&SpendPowerDrawInspirationAttackReactTitle=Trai ispirazione +Reaction/&SpendPowerDrawInspirationAttackTitle=Trai ispirazione +Reaction/&SpendPowerDrawInspirationSavingDescription=Hai fallito un tiro salvezza contro {1} di {0}. Puoi reagire aggiungendo 3 al tiro. +Reaction/&SpendPowerDrawInspirationSavingReactDescription=Aggiungere 3 al tiro. +Reaction/&SpendPowerDrawInspirationSavingReactTitle=Trai ispirazione +Reaction/&SpendPowerDrawInspirationSavingTitle=Trai ispirazione Tooltip/&SelectAnAlly=Seleziona un alleato. Tooltip/&TargetAlreadyAssisted=Il bersaglio è già assistito. Tooltip/&TargetOutOfRange=Il bersaglio è fuori portata. diff --git a/SolastaUnfinishedBusiness/Translations/it/SubClasses/CircleOfTheCosmos-it.txt b/SolastaUnfinishedBusiness/Translations/it/SubClasses/CircleOfTheCosmos-it.txt index d87a2746fa..a37965ada0 100644 --- a/SolastaUnfinishedBusiness/Translations/it/SubClasses/CircleOfTheCosmos-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/SubClasses/CircleOfTheCosmos-it.txt @@ -40,7 +40,7 @@ Reaction/&SpendPowerWealCosmosOmenCheckDescription={0} non ha superato un tiro d Reaction/&SpendPowerWealCosmosOmenCheckReactDescription=Tira un D6 per aiutare un alleato nel suo tiro di controllo. Reaction/&SpendPowerWealCosmosOmenCheckReactTitle=Benessere Reaction/&SpendPowerWealCosmosOmenCheckTitle=Presagio Cosmico: Benessere -Reaction/&SpendPowerWealCosmosOmenSavingDescription={0} ha fallito un tiro salvezza contro {1}. {2} può reagire tirando un D6 e aggiungendo il risultato al tiro salvezza. +Reaction/&SpendPowerWealCosmosOmenSavingDescription={0} ha fallito un tiro salvezza contro {2} di {1}. Puoi reagire tirando un D6 e aggiungendo il risultato al tiro. Reaction/&SpendPowerWealCosmosOmenSavingReactDescription=Tira un D6 per aiutare un alleato nel suo tiro salvezza. Reaction/&SpendPowerWealCosmosOmenSavingReactTitle=Bene Reaction/&SpendPowerWealCosmosOmenSavingTitle=Presagio Cosmico: Benessere @@ -52,7 +52,7 @@ Reaction/&SpendPowerWoeCosmosOmenCheckDescription={0} supera un tiro di controll Reaction/&SpendPowerWoeCosmosOmenCheckReactDescription=Tira un D6 per distrarre un nemico durante il suo tiro di controllo. Reaction/&SpendPowerWoeCosmosOmenCheckReactTitle=Woe Reaction/&SpendPowerWoeCosmosOmenCheckTitle=Presagio Cosmico: Guai -Reaction/&SpendPowerWoeCosmosOmenSavingDescription={0} supera un tiro salvezza contro {1}. {2} può reagire tirando un D6 e sottraendo il risultato dal tiro salvezza. +Reaction/&SpendPowerWoeCosmosOmenSavingDescription={0} supera un tiro salvezza contro {2} di {1}. Puoi reagire tirando un D6 e sottraendo il risultato dal tiro. Reaction/&SpendPowerWoeCosmosOmenSavingReactDescription=Tira un D6 per distrarre un nemico durante il tiro salvezza. Reaction/&SpendPowerWoeCosmosOmenSavingReactTitle=Woe Reaction/&SpendPowerWoeCosmosOmenSavingTitle=Presagio Cosmico: Guai diff --git a/SolastaUnfinishedBusiness/Translations/it/SubClasses/MartialRoyalKnight-it.txt b/SolastaUnfinishedBusiness/Translations/it/SubClasses/MartialRoyalKnight-it.txt index 584a082db2..d6521cc91f 100644 --- a/SolastaUnfinishedBusiness/Translations/it/SubClasses/MartialRoyalKnight-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/SubClasses/MartialRoyalKnight-it.txt @@ -8,9 +8,9 @@ Feature/&PowerRoyalKnightRallyingCryDescription=A partire dal 3° livello, sosti Feature/&PowerRoyalKnightRallyingCryTitle=Grido di battaglia Feature/&PowerRoyalKnightSpiritedSurgeDescription=A partire dal 18° livello, la tua Impulso Ispiratore garantisce anche vantaggio su tutti gli attacchi, tiri salvezza e prove di abilità per 1 round. Feature/&PowerRoyalKnightSpiritedSurgeTitle=Ondata di spirito -Reaction/&SpendPowerRoyalKnightInspiringProtectionDescriptionAlly={0} ha fallito il tiro salvezza contro {2} di {1}. Puoi usare la tua reazione per improvvisare un aiuto che ripeterà il tiro salvezza. -Reaction/&SpendPowerRoyalKnightInspiringProtectionDescriptionSelf={0} ha fallito il tiro salvezza contro {2} di {1} e può usare la reazione per improvvisare un aiuto che ripeterà il tiro salvezza. -Reaction/&SpendPowerRoyalKnightInspiringProtectionReactDescription=Utilizza questo potere per aiutare l'alleato nel suo tiro salvezza. +Reaction/&SpendPowerRoyalKnightInspiringProtectionDescriptionAlly={0} ha fallito un tiro salvezza contro {2} di {1}. Puoi reagire per ripetere il tiro salvezza. +Reaction/&SpendPowerRoyalKnightInspiringProtectionDescriptionSelf={0} non ha superato un tiro salvezza contro {2} di {1} e può reagire ripetendo il tiro salvezza. +Reaction/&SpendPowerRoyalKnightInspiringProtectionReactDescription=Ripeti il ​​salvataggio. Reaction/&SpendPowerRoyalKnightInspiringProtectionReactTitle=Protezione ispiratrice Reaction/&SpendPowerRoyalKnightInspiringProtectionTitle=Protezione ispiratrice Subclass/&MartialRoyalKnightDescription=Un cavaliere che ispira grandezza negli altri compiendo atti coraggiosi in battaglia. Un Banneret è un guerriero abile, ma uno che guida una banda di alleati può trasformare anche la milizia meno equipaggiata in una feroce banda di guerra. diff --git a/SolastaUnfinishedBusiness/Translations/it/SubClasses/SorcerousWildMagic-it.txt b/SolastaUnfinishedBusiness/Translations/it/SubClasses/SorcerousWildMagic-it.txt index 7158d94003..3a5bc15aee 100644 --- a/SolastaUnfinishedBusiness/Translations/it/SubClasses/SorcerousWildMagic-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/SubClasses/SorcerousWildMagic-it.txt @@ -85,11 +85,11 @@ Reaction/&SpendPowerBendLuckEnemyCheckDescription={0} supera un tiro di c Reaction/&SpendPowerBendLuckEnemyCheckReactDescription=Tira un d4 per sottrarre il risultato dal tiro di controllo. Reaction/&SpendPowerBendLuckEnemyCheckReactTitle=Piegare la fortuna Reaction/&SpendPowerBendLuckEnemyCheckTitle=Piegare la fortuna -Reaction/&SpendPowerBendLuckEnemySavingDescription={0} supera un tiro salvezza. Puoi reagire tirando un d4 e sottraendo il risultato dal tiro salvezza. +Reaction/&SpendPowerBendLuckEnemySavingDescription={0} supera un tiro salvezza contro {2} di {1}. Puoi reagire tirando un d4 e sottraendo il risultato dal tiro. Reaction/&SpendPowerBendLuckEnemySavingReactDescription=Tira un d4 per sottrarre il risultato dal tiro salvezza. Reaction/&SpendPowerBendLuckEnemySavingReactTitle=Piegare la fortuna Reaction/&SpendPowerBendLuckEnemySavingTitle=Piegare la fortuna -Reaction/&SpendPowerBendLuckSavingDescription={0} ha fallito un tiro salvezza. Puoi reagire tirando un d4 e aggiungendo il risultato al tiro salvezza. +Reaction/&SpendPowerBendLuckSavingDescription={0} ha fallito un tiro salvezza contro {2} di {1}. Puoi reagire tirando un d4 e aggiungendo il risultato al tiro salvezza. Reaction/&SpendPowerBendLuckSavingReactDescription=Tira un d4 per aggiungere il risultato al tiro salvezza. Reaction/&SpendPowerBendLuckSavingReactTitle=Piegare la fortuna Reaction/&SpendPowerBendLuckSavingTitle=Piegare la fortuna @@ -97,7 +97,7 @@ Reaction/&SpendPowerTidesOfChaosAttackDescription=Hai mancato un attacco. Puoi u Reaction/&SpendPowerTidesOfChaosAttackReactDescription=Esegui l'attacco con vantaggio. Reaction/&SpendPowerTidesOfChaosAttackReactTitle=Maree del Caos Reaction/&SpendPowerTidesOfChaosAttackTitle=Maree del Caos -Reaction/&SpendPowerTidesOfChaosSaveDescription=Hai saltato un salvataggio. Puoi usare Tides of Chaos contro {1} di {0} e ripetere il salvataggio con vantaggio. +Reaction/&SpendPowerTidesOfChaosSaveDescription=Hai fallito un tiro salvezza contro {0} di {1}. Puoi reagire e ripetere il tiro salvezza con vantaggio. Reaction/&SpendPowerTidesOfChaosSaveReactDescription=Esegui il tiro salvezza con vantaggio. Reaction/&SpendPowerTidesOfChaosSaveReactTitle=Maree del Caos Reaction/&SpendPowerTidesOfChaosSaveTitle=Maree del Caos diff --git a/SolastaUnfinishedBusiness/Translations/it/SubClasses/WizardWarMagic-it.txt b/SolastaUnfinishedBusiness/Translations/it/SubClasses/WizardWarMagic-it.txt index bda440e9ea..47f9a41356 100644 --- a/SolastaUnfinishedBusiness/Translations/it/SubClasses/WizardWarMagic-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/SubClasses/WizardWarMagic-it.txt @@ -16,8 +16,8 @@ Reaction/&CustomReactionArcaneDeflectionAttackDescription=Stai per essere colpit Reaction/&CustomReactionArcaneDeflectionAttackReactDescription=Forzare un fallimento Reaction/&CustomReactionArcaneDeflectionAttackReactTitle=Deviazione Arcana Reaction/&CustomReactionArcaneDeflectionAttackTitle=Deviazione Arcana -Reaction/&CustomReactionArcaneDeflectionSavingDescription=Hai fallito un tiro salvezza. Puoi usare la tua reazione per aggiungere il tuo modificatore di Intelligenza al tiro salvezza e farlo invece riuscire. -Reaction/&CustomReactionArcaneDeflectionSavingReactDescription=Forzare un fallimento +Reaction/&CustomReactionArcaneDeflectionSavingDescription=Hai fallito un tiro salvezza contro {0}> di {1}. Puoi usare la tua reazione per aggiungere il tuo modificatore di Intelligenza al tiro e farlo riuscire. +Reaction/&CustomReactionArcaneDeflectionSavingReactDescription=Avere successo Reaction/&CustomReactionArcaneDeflectionSavingReactTitle=Deviazione Arcana Reaction/&CustomReactionArcaneDeflectionSavingTitle=Deviazione Arcana Subclass/&WizardWarMagicDescription=Una varietà di college arcani è specializzata nell'addestramento di maghi per la guerra. La tradizione della magia di guerra fonde i principi di evocazione e abiura, piuttosto che specializzarsi in una di queste scuole. Insegna tecniche che potenziano gli incantesimi di un incantatore, fornendo anche metodi per i maghi per rafforzare le proprie difese. I seguaci di questa tradizione sono noti come maghi di guerra. Vedono la loro magia sia come un'arma che come un'armatura, una risorsa superiore a qualsiasi pezzo di acciaio. I maghi di guerra agiscono rapidamente in battaglia, usando i loro incantesimi per prendere il controllo tattico di una situazione. I loro incantesimi colpiscono duramente, mentre le loro abilità difensive sventano i tentativi di contrattacco degli avversari. I maghi di guerra sono anche abili nel rivolgere l'energia magica di altri incantatori contro di loro. diff --git a/SolastaUnfinishedBusiness/Translations/ja/Feats/OtherFeats-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Feats/OtherFeats-ja.txt index 55fa8f782a..6d570c8921 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Feats/OtherFeats-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Feats/OtherFeats-ja.txt @@ -145,13 +145,13 @@ Reaction/&SpendPowerLuckyEnemyAttackDescription=敵があなたを攻撃しま Reaction/&SpendPowerLuckyEnemyAttackReactDescription=D20をロールして攻撃ロールを置き換えます。 Reaction/&SpendPowerLuckyEnemyAttackReactTitle=ラッキー Reaction/&SpendPowerLuckyEnemyAttackTitle=ラッキー -Reaction/&SpendPowerLuckySavingDescription=セービングロールに失敗しました。 d20 のロールに反応してセービングロールを交換することができます。 +Reaction/&SpendPowerLuckySavingDescription={0}{1} に対するセービング ロールに失敗しました。反応して d20 をロールし、ロールを置き換えることができます。 Reaction/&SpendPowerLuckySavingReactDescription=D20 をロールしてセービング ロールを交換します。 Reaction/&SpendPowerLuckySavingReactTitle=ラッキー Reaction/&SpendPowerLuckySavingTitle=ラッキー -Reaction/&SpendPowerMageSlayerDescription={0} に対するセーヴィング スローに失敗しました。代わりに自分自身を成功させることもできます。 -Reaction/&SpendPowerMageSlayerReactDescription=代わりに、あなた自身が成功するように努めてください。 -Reaction/&SpendPowerMageSlayerReactTitle=成功する +Reaction/&SpendPowerMageSlayerDescription={0}{1} に対するセービング ロールに失敗しました。反応すれば成功します。 +Reaction/&SpendPowerMageSlayerReactDescription=成功する。 +Reaction/&SpendPowerMageSlayerReactTitle=メイジスレイヤー Reaction/&SpendPowerMageSlayerTitle=メイジスレイヤー Reaction/&SpendPowerReactiveResistanceDescription={0} があなたを攻撃しようとしています!あなたは自分の反応を利用して、ターン終了時まで {1} に対する耐性を自分に与えることができます Reaction/&SpendPowerReactiveResistanceReactDescription=自分自身に抵抗を与えてください。 diff --git a/SolastaUnfinishedBusiness/Translations/ja/Feats/Races-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Feats/Races-ja.txt index e763fa23f6..3c2c7f95ef 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Feats/Races-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Feats/Races-ja.txt @@ -75,7 +75,7 @@ Reaction/&CustomReactionBountifulLuckCheckDescription={0} はチェックロー Reaction/&CustomReactionBountifulLuckCheckReactDescription=D20 をロールしてチェックロールを交換します。 Reaction/&CustomReactionBountifulLuckCheckReactTitle=幸運の女神 Reaction/&CustomReactionBountifulLuckCheckTitle=豊かな幸運 -Reaction/&CustomReactionBountifulLuckSavingDescription={0} は {1} に対するセーブロールに失敗しました。 {2} は d20 のロールに反応してセービングロールを置き換えることができます。 +Reaction/&CustomReactionBountifulLuckSavingDescription={0}{1}{2} に対するセーヴィング ロールに失敗しました。反応して d20 をロールし、ロールを置き換えることができます。 Reaction/&CustomReactionBountifulLuckSavingReactDescription=D20 をロールしてセービング ロールを交換します。 Reaction/&CustomReactionBountifulLuckSavingReactTitle=幸運の女神 Reaction/&CustomReactionBountifulLuckSavingTitle=豊かな幸運 diff --git a/SolastaUnfinishedBusiness/Translations/ja/Inventor-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Inventor-ja.txt index 9dddd45093..78b5f3b584 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Inventor-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Inventor-ja.txt @@ -39,10 +39,10 @@ Reaction/&SpendPowerInventorFlashOfGeniusCheckDescription={0} はチェックロ Reaction/&SpendPowerInventorFlashOfGeniusCheckReactDescription=D20 をロールしてチェックロールを交換します。 Reaction/&SpendPowerInventorFlashOfGeniusCheckReactTitle=反応する Reaction/&SpendPowerInventorFlashOfGeniusCheckTitle=天才のひらめき -Reaction/&SpendPowerInventorFlashOfGeniusReactDescription=このパワーを使用して、味方のセービングロールを支援します。 -Reaction/&SpendPowerInventorFlashOfGeniusReactDescriptionAlly={0}{1}{2} に対するセーブロールに失敗しました。あなたの反応を使って、ロールを成功に導く即興の助けをすることができます。 -Reaction/&SpendPowerInventorFlashOfGeniusReactDescriptionSelf={0}{1}{2} に対するセーヴロールに失敗しましたが、反応を消費して即興で助けを与え、ロールを成功に変えることができました。 -Reaction/&SpendPowerInventorFlashOfGeniusReactTitle=反応する +Reaction/&SpendPowerInventorFlashOfGeniusReactDescription=成功する +Reaction/&SpendPowerInventorFlashOfGeniusReactDescriptionAlly={0}{1}{2} に対するセーヴロールに失敗しました。反応して、ロールに Intelligence 修正値を追加し、成功させることができます。 +Reaction/&SpendPowerInventorFlashOfGeniusReactDescriptionSelf={0}{1}{2} に対するセーヴロールに失敗しましたが、反応してロールに Intelligence 修正値を追加し、成功させることができます。 +Reaction/&SpendPowerInventorFlashOfGeniusReactTitle=天才のひらめき Reaction/&SpendPowerInventorFlashOfGeniusTitle=天才の閃光 Reaction/&SpendPowerSoulOfArtificeDescription=あなたは自分のローグ レベルに等しいヒット ポイントを回復し、立ち上がります。 Reaction/&SpendPowerSoulOfArtificeReactDescription=あなたは自分のローグ レベルに等しいヒット ポイントを回復し、立ち上がります。 diff --git a/SolastaUnfinishedBusiness/Translations/ja/Races/Imp-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Races/Imp-ja.txt index a9f67bf3c2..89fc3221b1 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Races/Imp-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Races/Imp-ja.txt @@ -40,9 +40,14 @@ Race/&RaceImpForestTitle=フォレストインプ Race/&RaceImpInfernalDescription=マナカロン時代の次元間実験により、悪魔や他の生物が物質次元に持ち込まれました。これらの生き物の多くは最終的には封じ込められるか追放されましたが、卑劣なインプは隠れることができ、それ以来密かにバッドランズのさまざまな場所に適応して繁栄しています。今、彼らの中には、たとえそこにいる人々が彼らの悪魔的な性質を好意的に思わないとしても、出てきて周囲の世界を探索することを決心した人もいます。 Race/&RaceImpInfernalTitle=インファナル・インプ Race/&RaceImpTitle=Imp -Reaction/&SpendPowerDrawInspirationDescription=攻撃ロールまたはセーヴィング スローをミスしそうになっています。パワーを消費してアタックロールまたはセーヴィングスローに3を追加します。 -Reaction/&SpendPowerDrawInspirationReactTitle=過ごす -Reaction/&SpendPowerDrawInspirationTitle=インスピレーションを引き出す +Reaction/&SpendPowerDrawInspirationAttackDescription=攻撃ロールに失敗しそうです。反応して攻撃ロールに 3 を加えることができます。 +Reaction/&SpendPowerDrawInspirationAttackReactDescription=ロールに 3 を追加します。 +Reaction/&SpendPowerDrawInspirationAttackReactTitle=インスピレーションを描く +Reaction/&SpendPowerDrawInspirationAttackTitle=インスピレーションを描く +Reaction/&SpendPowerDrawInspirationSavingDescription={0}{1} に対するセービング ロールに失敗しました。ロールに 3 を追加して反応することができます。 +Reaction/&SpendPowerDrawInspirationSavingReactDescription=ロールに 3 を追加します。 +Reaction/&SpendPowerDrawInspirationSavingReactTitle=インスピレーションを描く +Reaction/&SpendPowerDrawInspirationSavingTitle=インスピレーションを描く Tooltip/&SelectAnAlly=味方を選択してください。 Tooltip/&TargetAlreadyAssisted=ターゲットはすでに支援されています。 Tooltip/&TargetOutOfRange=ターゲットが範囲外です。 diff --git a/SolastaUnfinishedBusiness/Translations/ja/SubClasses/CircleOfTheCosmos-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/SubClasses/CircleOfTheCosmos-ja.txt index 07d5e35854..9d59563e09 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/SubClasses/CircleOfTheCosmos-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/SubClasses/CircleOfTheCosmos-ja.txt @@ -40,7 +40,7 @@ Reaction/&SpendPowerWealCosmosOmenCheckDescription={0} はチェックロール Reaction/&SpendPowerWealCosmosOmenCheckReactDescription=D6 をロールして、味方のチェック ロールを支援します。 Reaction/&SpendPowerWealCosmosOmenCheckReactTitle=ウェル Reaction/&SpendPowerWealCosmosOmenCheckTitle=コズミック・オーメン:ウィール -Reaction/&SpendPowerWealCosmosOmenSavingDescription={0} は {1} に対するセーブロールに失敗しました。 {2} は D6 をロールして結果を保存ロールに追加することに反応できます。 +Reaction/&SpendPowerWealCosmosOmenSavingDescription={0}{1}{2} に対するセービング ロールに失敗しました。反応して D6 をロールし、その結果をロールに追加できます。 Reaction/&SpendPowerWealCosmosOmenSavingReactDescription=D6 をロールして味方のセービング ロールを助けます。 Reaction/&SpendPowerWealCosmosOmenSavingReactTitle=ウェル Reaction/&SpendPowerWealCosmosOmenSavingTitle=コズミック・オーメン:ウィール @@ -52,7 +52,7 @@ Reaction/&SpendPowerWoeCosmosOmenCheckDescription={0} はチェックロール Reaction/&SpendPowerWoeCosmosOmenCheckReactDescription=D6 をロールして、チェック ロールで敵の注意をそらします。 Reaction/&SpendPowerWoeCosmosOmenCheckReactTitle=Woe Reaction/&SpendPowerWoeCosmosOmenCheckTitle=コズミック・オーメン: 災い -Reaction/&SpendPowerWoeCosmosOmenSavingDescription={0} は {1} に対してセーブロールに成功しました。 {2} は D6 をロールして、セーブロールから結果を減算することに反応できます。 +Reaction/&SpendPowerWoeCosmosOmenSavingDescription={0}{1}{2} に対してセービング ロールに成功しました。反応して D6 をロールし、その結果をロールから差し引くことができます。 Reaction/&SpendPowerWoeCosmosOmenSavingReactDescription=D6 をロールして、セービング ロールで敵の注意をそらします。 Reaction/&SpendPowerWoeCosmosOmenSavingReactTitle=Woe Reaction/&SpendPowerWoeCosmosOmenSavingTitle=コズミック・オーメン: 災い diff --git a/SolastaUnfinishedBusiness/Translations/ja/SubClasses/MartialRoyalKnight-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/SubClasses/MartialRoyalKnight-ja.txt index c0d7740e37..d89d6fb72e 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/SubClasses/MartialRoyalKnight-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/SubClasses/MartialRoyalKnight-ja.txt @@ -8,9 +8,9 @@ Feature/&PowerRoyalKnightRallyingCryDescription=レベル 3 から、セカン Feature/&PowerRoyalKnightRallyingCryTitle=結集する叫び Feature/&PowerRoyalKnightSpiritedSurgeDescription=レベル 18 から、Inspiring Surge はすべての攻撃、セーヴィング スロー、および 1 ラウンドの能力チェックにアドバンテージを与えます。 Feature/&PowerRoyalKnightSpiritedSurgeTitle=スピリットサージ -Reaction/&SpendPowerRoyalKnightInspiringProtectionDescriptionAlly={0}{1}{2} に対するセーヴロールに失敗しました。反応を消費して即興で助けを出し、セーヴを再ロールすることができます。 -Reaction/&SpendPowerRoyalKnightInspiringProtectionDescriptionSelf={0}{1}{2} に対するセーブ ロールに失敗しました。リアクションを消費してセーブを再ロールする即興のヘルプを作成できます。 -Reaction/&SpendPowerRoyalKnightInspiringProtectionReactDescription=このパワーを利用して、味方のセービング ロールを支援してください。 +Reaction/&SpendPowerRoyalKnightInspiringProtectionDescriptionAlly={0}{1}{2} に対するセービング ロールに失敗しました。セービングを再ロールするために反応できます。 +Reaction/&SpendPowerRoyalKnightInspiringProtectionDescriptionSelf={0}{1}{2} に対するセーヴィング ロールに失敗しましたが、セーヴィングを再ロールするために反応できます。 +Reaction/&SpendPowerRoyalKnightInspiringProtectionReactDescription=セーブを再ロールします。 Reaction/&SpendPowerRoyalKnightInspiringProtectionReactTitle=感動的な保護 Reaction/&SpendPowerRoyalKnightInspiringProtectionTitle=感動的な保護 Subclass/&MartialRoyalKnightDescription=戦いで勇敢な行為を行うことで他人の偉大さを鼓舞する騎士。バナーレットは熟練した戦士ですが、味方の一団を率いると、最も装備が不十分な民兵さえも凶暴な戦闘集団に変えることができます。 diff --git a/SolastaUnfinishedBusiness/Translations/ja/SubClasses/SorcerousWildMagic-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/SubClasses/SorcerousWildMagic-ja.txt index 4aff95129a..5e20fed27f 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/SubClasses/SorcerousWildMagic-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/SubClasses/SorcerousWildMagic-ja.txt @@ -85,11 +85,11 @@ Reaction/&SpendPowerBendLuckEnemyCheckDescription={0} はチェックロ Reaction/&SpendPowerBendLuckEnemyCheckReactDescription=D4 をロールして、チェック ロールの結果から結果を減算します。 Reaction/&SpendPowerBendLuckEnemyCheckReactTitle=ベンドラック Reaction/&SpendPowerBendLuckEnemyCheckTitle=ベンドラック -Reaction/&SpendPowerBendLuckEnemySavingDescription={0} はセービング ロールに成功します。反応して d4 をロールし、その結果をセービング ロールから減算できます。 +Reaction/&SpendPowerBendLuckEnemySavingDescription={0}{1}{2} に対するセービング ロールに成功しました。反応して d4 をロールし、その結果をロールから差し引くことができます。 Reaction/&SpendPowerBendLuckEnemySavingReactDescription=D4 をロールして、その結果をセービング ロールから減算します。 Reaction/&SpendPowerBendLuckEnemySavingReactTitle=ベンドラック Reaction/&SpendPowerBendLuckEnemySavingTitle=ベンドラック -Reaction/&SpendPowerBendLuckSavingDescription={0} はセービング ロールに失敗しました。反応して d4 をロールし、その結果をセービング ロールに追加できます。 +Reaction/&SpendPowerBendLuckSavingDescription={0}{1}{2} に対するセーヴィング ロールに失敗しました。反応して d4 をロールし、その結果をセーヴィング ロールに追加できます。 Reaction/&SpendPowerBendLuckSavingReactDescription=D4 をロールして、その結果をセービング ロールに追加します。 Reaction/&SpendPowerBendLuckSavingReactTitle=ベンドラック Reaction/&SpendPowerBendLuckSavingTitle=ベンドラック @@ -97,7 +97,7 @@ Reaction/&SpendPowerTidesOfChaosAttackDescription=攻撃を失敗しました。 Reaction/&SpendPowerTidesOfChaosAttackReactDescription=攻撃を有利に進めます。 Reaction/&SpendPowerTidesOfChaosAttackReactTitle=混沌の潮流 Reaction/&SpendPowerTidesOfChaosAttackTitle=混沌の潮流 -Reaction/&SpendPowerTidesOfChaosSaveDescription=セーブに失敗しました。{0}{1} に対して Tides of Chaos を使用し、セーブを有利に再ロールできます。 +Reaction/&SpendPowerTidesOfChaosSaveDescription={0}{1} に対するセーヴィング ロールに失敗しました。反応して、セーヴィングを有利に再ロールすることができます。 Reaction/&SpendPowerTidesOfChaosSaveReactDescription=セーブを有利にロールします。 Reaction/&SpendPowerTidesOfChaosSaveReactTitle=混沌の潮流 Reaction/&SpendPowerTidesOfChaosSaveTitle=混沌の潮流 diff --git a/SolastaUnfinishedBusiness/Translations/ja/SubClasses/WizardWarMagic-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/SubClasses/WizardWarMagic-ja.txt index 84e46c98cd..c262afbbc4 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/SubClasses/WizardWarMagic-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/SubClasses/WizardWarMagic-ja.txt @@ -16,8 +16,8 @@ Reaction/&CustomReactionArcaneDeflectionAttackDescription=攻撃を受けよう Reaction/&CustomReactionArcaneDeflectionAttackReactDescription=強制的に失敗させる Reaction/&CustomReactionArcaneDeflectionAttackReactTitle=難解な偏向 Reaction/&CustomReactionArcaneDeflectionAttackTitle=難解な偏向 -Reaction/&CustomReactionArcaneDeflectionSavingDescription=セーヴィングスローに失敗しました。リアクションを使用して、知力修正をセービングロールに追加し、代わりに成功させることができます。 -Reaction/&CustomReactionArcaneDeflectionSavingReactDescription=強制的に失敗させる +Reaction/&CustomReactionArcaneDeflectionSavingDescription={0}>{1} に対するセービング ロールに失敗しました。反応を使用して、ロールに Intelligence 修正値を追加し、成功させることができます。 +Reaction/&CustomReactionArcaneDeflectionSavingReactDescription=成功する Reaction/&CustomReactionArcaneDeflectionSavingReactTitle=難解な偏向 Reaction/&CustomReactionArcaneDeflectionSavingTitle=難解な偏向 Subclass/&WizardWarMagicDescription=さまざまな難解な大学が戦争のための魔法使いの訓練を専門としています。戦争魔術の伝統は、どちらかの流派に特化するのではなく、喚起とアブジュレーションの原則を融合させたものです。それは術者の呪文に力を与える技術を教えると同時に、魔法使いが自身の防御を強化する方法も提供します。この伝統の信奉者は戦争魔術師として知られています。彼らは自分たちの魔法を武器と鎧の両方、どんな鋼鉄よりも優れた資源であると考えています。戦争魔術師は戦闘中に素早く行動し、呪文を使って状況を戦術的にコントロールします。彼らの呪文は強力に攻撃しますが、防御スキルは相手の反撃の試みを阻止します。戦争魔術師は、他の呪文詠唱者の魔法のエネルギーを自分たちに向けることにも熟達しています。 diff --git a/SolastaUnfinishedBusiness/Translations/ko/Feats/OtherFeats-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Feats/OtherFeats-ko.txt index c2089a7da4..8b5f1743bf 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Feats/OtherFeats-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Feats/OtherFeats-ko.txt @@ -145,13 +145,13 @@ Reaction/&SpendPowerLuckyEnemyAttackDescription=적이 당신을 공격했습니 Reaction/&SpendPowerLuckyEnemyAttackReactDescription=공격 굴림을 대체하려면 d20을 굴립니다. Reaction/&SpendPowerLuckyEnemyAttackReactTitle=운이 좋은 Reaction/&SpendPowerLuckyEnemyAttackTitle=운이 좋은 -Reaction/&SpendPowerLuckySavingDescription=저장 판정에 실패했습니다. 반응하여 d20을 굴리고 저장 굴림을 교체할 수 있습니다. +Reaction/&SpendPowerLuckySavingDescription={0}{1}에 대한 세이빙 롤에 실패했습니다. d20을 굴리고 롤을 대체하여 반응할 수 있습니다. Reaction/&SpendPowerLuckySavingReactDescription=저장 롤을 교체하려면 d20을 굴립니다. Reaction/&SpendPowerLuckySavingReactTitle=운이 좋은 Reaction/&SpendPowerLuckySavingTitle=운이 좋은 -Reaction/&SpendPowerMageSlayerDescription=당신은 {0}에 대한 내성 굴림에 실패했습니다. 대신에 스스로 성공할 수 있습니다. -Reaction/&SpendPowerMageSlayerReactDescription=대신 자신이 성공하도록 하세요. -Reaction/&SpendPowerMageSlayerReactTitle=성공하다 +Reaction/&SpendPowerMageSlayerDescription={0}{1}에 대한 세이빙 롤에 실패했습니다. 성공하려면 반응할 수 있습니다. +Reaction/&SpendPowerMageSlayerReactDescription=성공하세요. +Reaction/&SpendPowerMageSlayerReactTitle=마법사 사냥꾼 Reaction/&SpendPowerMageSlayerTitle=메이지 슬레이어 Reaction/&SpendPowerReactiveResistanceDescription={0}이(가) 곧 당신을 공격할 것입니다! 당신은 반응을 사용하여 턴이 끝날 때까지 {1}에 저항할 수 있습니다. Reaction/&SpendPowerReactiveResistanceReactDescription=스스로 저항하십시오. diff --git a/SolastaUnfinishedBusiness/Translations/ko/Feats/Races-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Feats/Races-ko.txt index 9138bb0181..e622038f1f 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Feats/Races-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Feats/Races-ko.txt @@ -75,7 +75,7 @@ Reaction/&CustomReactionBountifulLuckCheckDescription={0}이(가) 수표 판정 Reaction/&CustomReactionBountifulLuckCheckReactDescription=체크 롤을 교체하려면 d20을 굴립니다. Reaction/&CustomReactionBountifulLuckCheckReactTitle=풍성한 행운 Reaction/&CustomReactionBountifulLuckCheckTitle=풍성한 행운 -Reaction/&CustomReactionBountifulLuckSavingDescription={0}이(가) {1}에 대한 저장 롤에 실패했습니다. {2}는 d20을 굴리고 저장 굴림을 교체하는 데 반응할 수 있습니다. +Reaction/&CustomReactionBountifulLuckSavingDescription={0}은(는) {1}{2}에 대한 세이빙 롤에 실패했습니다. d20을 굴리고 롤을 대체하여 반응할 수 있습니다. Reaction/&CustomReactionBountifulLuckSavingReactDescription=저장 롤을 교체하려면 d20을 굴립니다. Reaction/&CustomReactionBountifulLuckSavingReactTitle=풍성한 행운 Reaction/&CustomReactionBountifulLuckSavingTitle=풍성한 행운 diff --git a/SolastaUnfinishedBusiness/Translations/ko/Inventor-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Inventor-ko.txt index 7eb3d95ad4..9db18568c2 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Inventor-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Inventor-ko.txt @@ -39,10 +39,10 @@ Reaction/&SpendPowerInventorFlashOfGeniusCheckDescription={0}이(가) 수표 판 Reaction/&SpendPowerInventorFlashOfGeniusCheckReactDescription=체크 롤을 교체하려면 d20을 굴립니다. Reaction/&SpendPowerInventorFlashOfGeniusCheckReactTitle=반응하다 Reaction/&SpendPowerInventorFlashOfGeniusCheckTitle=천재의 섬광 -Reaction/&SpendPowerInventorFlashOfGeniusReactDescription=이 힘을 사용하여 동맹의 세이브 롤을 돕습니다. -Reaction/&SpendPowerInventorFlashOfGeniusReactDescriptionAlly={0}이(가) {1}{2}에 대한 저장 롤에 실패했습니다. 당신은 반응을 통해 롤을 성공으로 바꿀 수 있는 즉흥적인 도움을 줄 수 있습니다. -Reaction/&SpendPowerInventorFlashOfGeniusReactDescriptionSelf={0}{1}{2}에 대한 저장 판정에 실패했으며 반응을 사용하여 판정을 성공으로 바꿀 수 있는 즉석 도움을 줄 수 있습니다. . -Reaction/&SpendPowerInventorFlashOfGeniusReactTitle=반응하다 +Reaction/&SpendPowerInventorFlashOfGeniusReactDescription=성공하다 +Reaction/&SpendPowerInventorFlashOfGeniusReactDescriptionAlly={0}이(가) {1}{2}에 대한 세이브 롤에 실패했습니다. 당신은 반응하여 롤에 지능 수정치를 추가하여 성공시킬 수 있습니다. +Reaction/&SpendPowerInventorFlashOfGeniusReactDescriptionSelf={0}은(는) {1}{2}에 대한 세이브 롤에 실패했으며, 반응하여 롤에 지능 수정치를 추가하여 성공할 수 있습니다. +Reaction/&SpendPowerInventorFlashOfGeniusReactTitle=천재의 섬광 Reaction/&SpendPowerInventorFlashOfGeniusTitle=빠른 재치 Reaction/&SpendPowerSoulOfArtificeDescription=당신은 도적 레벨과 동일한 양의 생명력을 회복하고 일어섭니다. Reaction/&SpendPowerSoulOfArtificeReactDescription=당신은 도적 레벨과 동일한 양의 생명력을 회복하고 일어섭니다. diff --git a/SolastaUnfinishedBusiness/Translations/ko/Races/Imp-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Races/Imp-ko.txt index 77930c6015..cc5487483a 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Races/Imp-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Races/Imp-ko.txt @@ -40,9 +40,14 @@ Race/&RaceImpForestTitle=숲의 임프 Race/&RaceImpInfernalDescription=마나칼론 시대의 행성간 실험으로 인해 악마와 다른 생물이 물질계로 들어오게 되었습니다. 이 생물 중 다수가 결국 격리되거나 추방되는 동안 교활한 임프들은 숨어서 그 이후로 황무지의 다양한 지역에서 비밀리에 적응하고 번성할 수 있었습니다. 이제 그들 중 일부는 비록 그 안에 있는 사람들이 그들의 악마적인 본성을 친절하게 받아들이지 않더라도 나타나서 주변 세계를 탐험하기로 결정했습니다. Race/&RaceImpInfernalTitle=지옥불 임프 Race/&RaceImpTitle=Imp -Reaction/&SpendPowerDrawInspirationDescription=곧 공격 굴림이나 내성 굴림을 놓치게 됩니다. 공격 굴림이나 내성 굴림에 3을 추가하려면 전력을 소비하세요. -Reaction/&SpendPowerDrawInspirationReactTitle=경비 -Reaction/&SpendPowerDrawInspirationTitle=영감을 그리다 +Reaction/&SpendPowerDrawInspirationAttackDescription=공격 굴림을 놓치려고 합니다. 공격 굴림에 3을 더하기 위해 반응할 수 있습니다. +Reaction/&SpendPowerDrawInspirationAttackReactDescription=롤에 3을 더합니다. +Reaction/&SpendPowerDrawInspirationAttackReactTitle=영감을 얻으세요 +Reaction/&SpendPowerDrawInspirationAttackTitle=영감을 얻으세요 +Reaction/&SpendPowerDrawInspirationSavingDescription={0}{1}에 대한 세이빙 롤에 실패했습니다. 롤에 3을 더하기 위해 반응할 수 있습니다. +Reaction/&SpendPowerDrawInspirationSavingReactDescription=롤에 3을 더합니다. +Reaction/&SpendPowerDrawInspirationSavingReactTitle=영감을 얻으세요 +Reaction/&SpendPowerDrawInspirationSavingTitle=영감을 얻으세요 Tooltip/&SelectAnAlly=동맹을 선택해주세요. Tooltip/&TargetAlreadyAssisted=대상은 이미 지원되었습니다. Tooltip/&TargetOutOfRange=대상이 범위를 벗어났습니다. diff --git a/SolastaUnfinishedBusiness/Translations/ko/SubClasses/CircleOfTheCosmos-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/SubClasses/CircleOfTheCosmos-ko.txt index df916ad00d..db2280d070 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/SubClasses/CircleOfTheCosmos-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/SubClasses/CircleOfTheCosmos-ko.txt @@ -40,7 +40,7 @@ Reaction/&SpendPowerWealCosmosOmenCheckDescription={0}이(가) 수표 판정에 Reaction/&SpendPowerWealCosmosOmenCheckReactDescription=D6을 굴려서 동맹국의 수표 굴림을 돕습니다. Reaction/&SpendPowerWealCosmosOmenCheckReactTitle=복리 Reaction/&SpendPowerWealCosmosOmenCheckTitle=우주적 징조: 안녕 -Reaction/&SpendPowerWealCosmosOmenSavingDescription={0}이(가) {1}에 대한 저장 롤에 실패했습니다. {2}는 D6을 굴리고 결과를 저장 굴림에 추가하는 데 반응할 수 있습니다. +Reaction/&SpendPowerWealCosmosOmenSavingDescription={0}은(는) {1}{2}에 대한 세이빙 롤에 실패했습니다. D6을 굴려 결과를 롤에 추가할 수 있습니다. Reaction/&SpendPowerWealCosmosOmenSavingReactDescription=D6을 굴려 아군의 세이브 롤을 돕습니다. Reaction/&SpendPowerWealCosmosOmenSavingReactTitle=복리 Reaction/&SpendPowerWealCosmosOmenSavingTitle=우주적 징조: 웰 @@ -52,7 +52,7 @@ Reaction/&SpendPowerWoeCosmosOmenCheckDescription={0}은 수표 굴림에 성공 Reaction/&SpendPowerWoeCosmosOmenCheckReactDescription=D6을 굴려 적의 체크 굴림으로 주의를 분산시키세요. Reaction/&SpendPowerWoeCosmosOmenCheckReactTitle=Woe Reaction/&SpendPowerWoeCosmosOmenCheckTitle=우주적 징조: 비애 -Reaction/&SpendPowerWoeCosmosOmenSavingDescription={0}은(는) {1}에 대한 저장 판정에 성공했습니다. {2}는 D6을 굴리고 저장 굴림에서 결과를 뺄 때 반응할 수 있습니다. +Reaction/&SpendPowerWoeCosmosOmenSavingDescription={0}{1}{2}에 대한 세이빙 롤에 성공했습니다. D6을 굴려 반응하고 롤에서 결과를 뺄 수 있습니다. Reaction/&SpendPowerWoeCosmosOmenSavingReactDescription=D6를 굴려 적의 세이브 롤로 주의를 분산시키세요. Reaction/&SpendPowerWoeCosmosOmenSavingReactTitle=Woe Reaction/&SpendPowerWoeCosmosOmenSavingTitle=우주적 징조: 비애 diff --git a/SolastaUnfinishedBusiness/Translations/ko/SubClasses/MartialRoyalKnight-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/SubClasses/MartialRoyalKnight-ko.txt index a92ed2a56b..9128604b61 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/SubClasses/MartialRoyalKnight-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/SubClasses/MartialRoyalKnight-ko.txt @@ -8,9 +8,9 @@ Feature/&PowerRoyalKnightRallyingCryDescription=3레벨부터 당신은 세컨 Feature/&PowerRoyalKnightRallyingCryTitle=집결의 외침 Feature/&PowerRoyalKnightSpiritedSurgeDescription=18레벨부터 Inspiring Surge는 1라운드 동안 모든 공격, 내성 굴림 및 능력 점검에 이점을 부여합니다. Feature/&PowerRoyalKnightSpiritedSurgeTitle=씩씩한 파도 -Reaction/&SpendPowerRoyalKnightInspiringProtectionDescriptionAlly={0}이(가) {1}{2}에 대한 저장 롤에 실패했습니다. 당신은 저장을 다시 굴릴 도움을 즉석에서 만들기 위해 반응을 보낼 수 있습니다. -Reaction/&SpendPowerRoyalKnightInspiringProtectionDescriptionSelf={0}이(가) {1}{2}에 대한 저장 롤에 실패했으며 저장을 다시 롤할 수 있도록 즉석에서 도움을 주기 위해 반응을 소비할 수 있습니다. -Reaction/&SpendPowerRoyalKnightInspiringProtectionReactDescription=이 힘을 사용하여 동맹의 세이브 롤을 돕습니다. +Reaction/&SpendPowerRoyalKnightInspiringProtectionDescriptionAlly={0}이(가) {1}{2}에 대한 세이브 롤에 실패했습니다. 세이브를 다시 굴리기 위해 반응할 수 있습니다. +Reaction/&SpendPowerRoyalKnightInspiringProtectionDescriptionSelf={0}은(는) {1}{2}에 대한 세이빙 롤에 실패했으며, 이에 대응하여 세이브를 다시 굴릴 수 있습니다. +Reaction/&SpendPowerRoyalKnightInspiringProtectionReactDescription=저장을 다시 합니다. Reaction/&SpendPowerRoyalKnightInspiringProtectionReactTitle=감동적인 보호 Reaction/&SpendPowerRoyalKnightInspiringProtectionTitle=감동적인 보호 Subclass/&MartialRoyalKnightDescription=전투에서 용감한 행동을 펼쳐 타인에게 위대함을 불어넣는 기사. 배너렛은 숙련된 전사이지만, 동맹군을 이끄는 사람은 장비가 가장 열악한 민병대라도 흉포한 전쟁 집단으로 변모시킬 수 있습니다. diff --git a/SolastaUnfinishedBusiness/Translations/ko/SubClasses/SorcerousWildMagic-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/SubClasses/SorcerousWildMagic-ko.txt index 3bffa47a11..8a0be891fa 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/SubClasses/SorcerousWildMagic-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/SubClasses/SorcerousWildMagic-ko.txt @@ -85,11 +85,11 @@ Reaction/&SpendPowerBendLuckEnemyCheckDescription={0} 체크 롤에 성 Reaction/&SpendPowerBendLuckEnemyCheckReactDescription=D4를 굴려 수표 굴림에서 결과를 뺍니다. Reaction/&SpendPowerBendLuckEnemyCheckReactTitle=행운을 구부려라 Reaction/&SpendPowerBendLuckEnemyCheckTitle=행운을 구부려라 -Reaction/&SpendPowerBendLuckEnemySavingDescription={0} 세이빙 롤에 성공합니다. d4를 굴려 반응하고 세이빙 롤에서 결과를 뺄 수 있습니다. +Reaction/&SpendPowerBendLuckEnemySavingDescription={0}{1}{2}에 대한 세이빙 롤에 성공했습니다. d4를 굴려 반응하고 롤에서 결과를 뺄 수 있습니다. Reaction/&SpendPowerBendLuckEnemySavingReactDescription=D4를 굴려 저장 굴림에서 결과를 뺍니다. Reaction/&SpendPowerBendLuckEnemySavingReactTitle=행운을 구부려라 Reaction/&SpendPowerBendLuckEnemySavingTitle=행운을 구부려라 -Reaction/&SpendPowerBendLuckSavingDescription={0}은(는) 세이빙 롤에 실패했습니다. d4를 굴려 반응하고 결과를 세이빙 롤에 추가할 수 있습니다. +Reaction/&SpendPowerBendLuckSavingDescription={0}은(는) {1}{2}에 대한 세이빙 롤에 실패했습니다. d4를 굴려 반응하고 결과를 세이빙 롤에 추가할 수 있습니다. Reaction/&SpendPowerBendLuckSavingReactDescription=D4를 굴려 결과를 저장 굴림에 추가합니다. Reaction/&SpendPowerBendLuckSavingReactTitle=행운을 구부려라 Reaction/&SpendPowerBendLuckSavingTitle=벤드 럭 @@ -97,7 +97,7 @@ Reaction/&SpendPowerTidesOfChaosAttackDescription=공격을 놓쳤습니다. Reaction/&SpendPowerTidesOfChaosAttackReactDescription=공격을 유리하게 전개하세요. Reaction/&SpendPowerTidesOfChaosAttackReactTitle=혼돈의 물결 Reaction/&SpendPowerTidesOfChaosAttackTitle=혼돈의 물결 -Reaction/&SpendPowerTidesOfChaosSaveDescription=세이브를 놓쳤습니다. {0}{1}에 대해 Tides of Chaos를 사용하고 세이브를 유리하게 다시 굴릴 수 있습니다. +Reaction/&SpendPowerTidesOfChaosSaveDescription={0}{1}에 대한 세이빙 롤에 실패했습니다. 이점을 가지고 세이브를 다시 굴릴 수 있습니다. Reaction/&SpendPowerTidesOfChaosSaveReactDescription=세이브를 유리하게 굴리세요. Reaction/&SpendPowerTidesOfChaosSaveReactTitle=혼돈의 물결 Reaction/&SpendPowerTidesOfChaosSaveTitle=혼돈의 물결 diff --git a/SolastaUnfinishedBusiness/Translations/ko/SubClasses/WizardWarMagic-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/SubClasses/WizardWarMagic-ko.txt index e67b99d98b..daa2a4cdb6 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/SubClasses/WizardWarMagic-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/SubClasses/WizardWarMagic-ko.txt @@ -16,8 +16,8 @@ Reaction/&CustomReactionArcaneDeflectionAttackDescription=당신은 곧 공격 Reaction/&CustomReactionArcaneDeflectionAttackReactDescription=실패를 강요하다 Reaction/&CustomReactionArcaneDeflectionAttackReactTitle=비전 편향 Reaction/&CustomReactionArcaneDeflectionAttackTitle=비전 편향 -Reaction/&CustomReactionArcaneDeflectionSavingDescription=당신은 내성 굴림에 실패했습니다. 당신은 반응을 사용하여 지능 수정자를 저장 굴림에 추가하고 대신 성공하게 만들 수 있습니다. -Reaction/&CustomReactionArcaneDeflectionSavingReactDescription=실패를 강요하다 +Reaction/&CustomReactionArcaneDeflectionSavingDescription={0}>{1}에 대한 세이빙 롤에 실패했습니다. 반응을 사용하여 롤에 지능 수정치를 추가하여 성공시킬 수 있습니다. +Reaction/&CustomReactionArcaneDeflectionSavingReactDescription=성공하다 Reaction/&CustomReactionArcaneDeflectionSavingReactTitle=비전 편향 Reaction/&CustomReactionArcaneDeflectionSavingTitle=비전 편향 Subclass/&WizardWarMagicDescription=다양한 비전 대학은 전쟁을 위한 마법사 훈련을 전문으로 합니다. 전쟁 마법의 전통은 두 학파 중 하나를 전문으로 하기보다는 소환과 포기의 원칙을 혼합합니다. 시전자의 주문을 강화하는 기술을 가르치는 동시에 마법사가 자신의 방어력을 강화할 수 있는 방법도 제공합니다. 이 전통을 따르는 사람들은 전쟁 마법사로 알려져 있습니다. 그들은 그들의 마법을 무기이자 갑옷, 즉 그 어떤 강철보다도 뛰어난 자원으로 여깁니다. 전쟁 마법사는 상황을 전술적으로 통제하기 위해 주문을 사용하여 전투에서 빠르게 행동합니다. 그들의 주문은 강력한 공격을 가하는 반면, 방어 기술은 상대방의 반격 시도를 좌절시킵니다. 전쟁 마법사는 다른 주문 시전자의 마법 에너지를 자신에게 불리하게 돌리는 데에도 능숙합니다. diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Feats/OtherFeats-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Feats/OtherFeats-pt-BR.txt index 1ad42942ed..aebd86059f 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Feats/OtherFeats-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Feats/OtherFeats-pt-BR.txt @@ -145,13 +145,13 @@ Reaction/&SpendPowerLuckyEnemyAttackDescription=Um inimigo te atingiu. Você pod Reaction/&SpendPowerLuckyEnemyAttackReactDescription=Role um d20 para substituir a jogada de ataque. Reaction/&SpendPowerLuckyEnemyAttackReactTitle=Sortudo Reaction/&SpendPowerLuckyEnemyAttackTitle=Sortudo -Reaction/&SpendPowerLuckySavingDescription=Você falhou em um teste de resistência. Você pode reagir para rolar um d20 e substituir o teste de resistência. +Reaction/&SpendPowerLuckySavingDescription=Você falhou em um teste de resistência contra {1} de {0}. Você pode reagir rolando um d20 e substituir o teste. Reaction/&SpendPowerLuckySavingReactDescription=Role um d20 para substituir a jogada de resistência. Reaction/&SpendPowerLuckySavingReactTitle=Sortudo Reaction/&SpendPowerLuckySavingTitle=Sortudo -Reaction/&SpendPowerMageSlayerDescription=Você falhou em um teste de resistência contra {0}. Em vez disso, você pode ter sucesso. -Reaction/&SpendPowerMageSlayerReactDescription=Em vez disso, faça com que você tenha sucesso. -Reaction/&SpendPowerMageSlayerReactTitle=Ter sucesso +Reaction/&SpendPowerMageSlayerDescription=Você falhou em um teste de resistência contra {1} de {0}. Você pode reagir para ter sucesso. +Reaction/&SpendPowerMageSlayerReactDescription=Ter sucesso. +Reaction/&SpendPowerMageSlayerReactTitle=Matador de Magos Reaction/&SpendPowerMageSlayerTitle=Matador de Magos Reaction/&SpendPowerReactiveResistanceDescription={0} está prestes a atingir você! você pode usar sua reação para se dar resistência a {1} até o final do turno dele Reaction/&SpendPowerReactiveResistanceReactDescription=Dê a si mesmo resistência. diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Feats/Races-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Feats/Races-pt-BR.txt index eec67bb7e8..3f2f3a1c51 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Feats/Races-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Feats/Races-pt-BR.txt @@ -75,7 +75,7 @@ Reaction/&CustomReactionBountifulLuckCheckDescription={0} falhou em um teste. {1 Reaction/&CustomReactionBountifulLuckCheckReactDescription=Role um d20 para substituir o teste. Reaction/&CustomReactionBountifulLuckCheckReactTitle=Sorte abundante Reaction/&CustomReactionBountifulLuckCheckTitle=Sorte abundante -Reaction/&CustomReactionBountifulLuckSavingDescription={0} falhou em um teste de resistência contra {1}. {2} pode reagir rolando um d20 e substituir o teste de resistência. +Reaction/&CustomReactionBountifulLuckSavingDescription={0} falhou em um teste de resistência contra {2} de {1}. Você pode reagir rolando um d20 e substituir o teste. Reaction/&CustomReactionBountifulLuckSavingReactDescription=Role um d20 para substituir a jogada de resistência. Reaction/&CustomReactionBountifulLuckSavingReactTitle=Sorte abundante Reaction/&CustomReactionBountifulLuckSavingTitle=Sorte abundante diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Inventor-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Inventor-pt-BR.txt index 8b03986517..72b9dbcaa6 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Inventor-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Inventor-pt-BR.txt @@ -39,10 +39,10 @@ Reaction/&SpendPowerInventorFlashOfGeniusCheckDescription={0} falhou em um teste Reaction/&SpendPowerInventorFlashOfGeniusCheckReactDescription=Role um d20 para substituir o teste. Reaction/&SpendPowerInventorFlashOfGeniusCheckReactTitle=Reagir Reaction/&SpendPowerInventorFlashOfGeniusCheckTitle=Flash de gênio -Reaction/&SpendPowerInventorFlashOfGeniusReactDescription=Use esse poder para ajudar o aliado com seu teste de resistência. -Reaction/&SpendPowerInventorFlashOfGeniusReactDescriptionAlly={0} falhou em um teste de resistência contra {2} de {1}. Você pode gastar sua reação para improvisar ajuda que transformará o teste em sucesso. -Reaction/&SpendPowerInventorFlashOfGeniusReactDescriptionSelf={0} falhou em um teste de resistência contra {2} de {1} e pode gastar reação para improvisar ajuda que transformará o teste em sucesso. -Reaction/&SpendPowerInventorFlashOfGeniusReactTitle=Reagir +Reaction/&SpendPowerInventorFlashOfGeniusReactDescription=Ter sucesso +Reaction/&SpendPowerInventorFlashOfGeniusReactDescriptionAlly={0} falhou em um teste de resistência contra {2} de {1}. Você pode reagir para adicionar seu modificador de Inteligência ao teste e fazê-lo ter sucesso. +Reaction/&SpendPowerInventorFlashOfGeniusReactDescriptionSelf={0} falhou em um teste de resistência contra {2} de {1} e pode reagir adicionando seu modificador de Inteligência ao teste e torná-lo bem-sucedido. +Reaction/&SpendPowerInventorFlashOfGeniusReactTitle=Flash de gênio Reaction/&SpendPowerInventorFlashOfGeniusTitle=Flash de gênio Reaction/&SpendPowerSoulOfArtificeDescription=Você recupera uma quantidade de pontos de vida igual ao seu nível de ladino e se levanta. Reaction/&SpendPowerSoulOfArtificeReactDescription=Você recupera uma quantidade de pontos de vida igual ao seu nível de ladino e se levanta. diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Races/Imp-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Races/Imp-pt-BR.txt index 6f32acb642..9ae47e2963 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Races/Imp-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Races/Imp-pt-BR.txt @@ -40,9 +40,14 @@ Race/&RaceImpForestTitle=Diabrete da Floresta Race/&RaceImpInfernalDescription=Experimentos interplanetares durante a era Manacalon levaram demônios e outras criaturas a serem trazidos para o plano material. Enquanto muitas dessas criaturas foram eventualmente contidas ou banidas, os diabinhos furtivos conseguiram se esconder, adaptando-se secretamente e prosperando em vários bolsões das Badlands desde então. Agora, alguns deles decidiram emergir e explorar o mundo ao seu redor, mesmo que aqueles nele possam não aceitar gentilmente sua natureza demoníaca. Race/&RaceImpInfernalTitle=Diabrete Infernal Race/&RaceImpTitle=Imp -Reaction/&SpendPowerDrawInspirationDescription=Você está prestes a perder uma jogada de ataque ou um teste de resistência. Gaste poder para adicionar 3 à jogada de ataque ou teste de resistência. -Reaction/&SpendPowerDrawInspirationReactTitle=Gastar -Reaction/&SpendPowerDrawInspirationTitle=Desenhe Inspiração +Reaction/&SpendPowerDrawInspirationAttackDescription=Você está prestes a perder uma jogada de ataque. Você pode reagir para adicionar 3 à jogada de ataque. +Reaction/&SpendPowerDrawInspirationAttackReactDescription=Adicione 3 ao rolo. +Reaction/&SpendPowerDrawInspirationAttackReactTitle=Desenhe Inspiração +Reaction/&SpendPowerDrawInspirationAttackTitle=Desenhe Inspiração +Reaction/&SpendPowerDrawInspirationSavingDescription=Você falhou em um teste de resistência contra {1} de {0}. Você pode reagir para adicionar 3 ao teste. +Reaction/&SpendPowerDrawInspirationSavingReactDescription=Adicione 3 ao rolo. +Reaction/&SpendPowerDrawInspirationSavingReactTitle=Desenhe Inspiração +Reaction/&SpendPowerDrawInspirationSavingTitle=Desenhe Inspiração Tooltip/&SelectAnAlly=Selecione um aliado. Tooltip/&TargetAlreadyAssisted=O alvo já está assistido. Tooltip/&TargetOutOfRange=O alvo está fora do alcance. diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/SubClasses/CircleOfTheCosmos-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/SubClasses/CircleOfTheCosmos-pt-BR.txt index 82791bbc0d..c4e359cc36 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/SubClasses/CircleOfTheCosmos-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/SubClasses/CircleOfTheCosmos-pt-BR.txt @@ -40,7 +40,7 @@ Reaction/&SpendPowerWealCosmosOmenCheckDescription={0} falhou em um teste. {1} p Reaction/&SpendPowerWealCosmosOmenCheckReactDescription=Role um D6 para ajudar um aliado com seu teste. Reaction/&SpendPowerWealCosmosOmenCheckReactTitle=Bem Reaction/&SpendPowerWealCosmosOmenCheckTitle=Presságio Cósmico: Bem-estar -Reaction/&SpendPowerWealCosmosOmenSavingDescription={0} falhou em salvar contra {1}. {2} pode reagir para lançar um D6 e adicionar o resultado à jogada de salvamento. +Reaction/&SpendPowerWealCosmosOmenSavingDescription={0} falhou em um teste de resistência contra {2} de {1}. Você pode reagir para rolar um D6 e adicionar o resultado ao teste. Reaction/&SpendPowerWealCosmosOmenSavingReactDescription=Jogue um D6 para ajudar um aliado com sua jogada de resistência. Reaction/&SpendPowerWealCosmosOmenSavingReactTitle=Bem Reaction/&SpendPowerWealCosmosOmenSavingTitle=Presságio Cósmico: Bem-estar @@ -52,7 +52,7 @@ Reaction/&SpendPowerWoeCosmosOmenCheckDescription={0} obtém sucesso em um teste Reaction/&SpendPowerWoeCosmosOmenCheckReactDescription=Role um D6 para distrair um inimigo com seu teste. Reaction/&SpendPowerWoeCosmosOmenCheckReactTitle=Woe Reaction/&SpendPowerWoeCosmosOmenCheckTitle=Presságio Cósmico: Ai -Reaction/&SpendPowerWoeCosmosOmenSavingDescription={0} obtém sucesso em uma jogada de resistência contra {1}. {2} pode reagir rolando um D6 e subtrair o resultado da jogada de resistência. +Reaction/&SpendPowerWoeCosmosOmenSavingDescription={0} tenha sucesso em um teste de resistência contra {2} de {1}. Você pode reagir para rolar um D6 e subtrair o resultado do teste. Reaction/&SpendPowerWoeCosmosOmenSavingReactDescription=Jogue um D6 para distrair um inimigo com sua jogada de resistência. Reaction/&SpendPowerWoeCosmosOmenSavingReactTitle=Woe Reaction/&SpendPowerWoeCosmosOmenSavingTitle=Presságio Cósmico: Ai diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/SubClasses/MartialRoyalKnight-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/SubClasses/MartialRoyalKnight-pt-BR.txt index caa74909be..6675a41bff 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/SubClasses/MartialRoyalKnight-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/SubClasses/MartialRoyalKnight-pt-BR.txt @@ -8,9 +8,9 @@ Feature/&PowerRoyalKnightRallyingCryDescription=A partir do 3º nível, você su Feature/&PowerRoyalKnightRallyingCryTitle=Grito de guerra Feature/&PowerRoyalKnightSpiritedSurgeDescription=A partir do 18º nível, seu Surto Inspirador também concede vantagem em todos os ataques, testes de resistência e testes de habilidade por 1 rodada. Feature/&PowerRoyalKnightSpiritedSurgeTitle=Surto Espirituoso -Reaction/&SpendPowerRoyalKnightInspiringProtectionDescriptionAlly={0} falhou na jogada de salvamento contra {2} de {1}. Você pode gastar sua reação para improvisar ajuda que irá rolar novamente a jogada. -Reaction/&SpendPowerRoyalKnightInspiringProtectionDescriptionSelf={0} falhou no teste de resistência contra {2} de {1} e pode gastar reação para improvisar ajuda que irá repetir o teste. -Reaction/&SpendPowerRoyalKnightInspiringProtectionReactDescription=Use esse poder para ajudar o aliado com seu teste de resistência. +Reaction/&SpendPowerRoyalKnightInspiringProtectionDescriptionAlly={0} falhou em um teste de resistência contra {2} de {1}. Você pode reagir para repetir o teste. +Reaction/&SpendPowerRoyalKnightInspiringProtectionDescriptionSelf={0} falhou em um teste de resistência contra {2} de {1} e pode reagir e repetir o teste. +Reaction/&SpendPowerRoyalKnightInspiringProtectionReactDescription=Repita o salvamento. Reaction/&SpendPowerRoyalKnightInspiringProtectionReactTitle=Proteção inspiradora Reaction/&SpendPowerRoyalKnightInspiringProtectionTitle=Proteção inspiradora Subclass/&MartialRoyalKnightDescription=Um cavaleiro que inspira grandeza nos outros ao cometer feitos corajosos em batalha. Um Banneret é um guerreiro habilidoso, mas um que lidera um bando de aliados pode transformar até mesmo a milícia mais mal equipada em um bando de guerra feroz. diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/SubClasses/SorcerousWildMagic-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/SubClasses/SorcerousWildMagic-pt-BR.txt index 306851aba0..445174acbb 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/SubClasses/SorcerousWildMagic-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/SubClasses/SorcerousWildMagic-pt-BR.txt @@ -85,11 +85,11 @@ Reaction/&SpendPowerBendLuckEnemyCheckDescription={0} ter sucesso em uma Reaction/&SpendPowerBendLuckEnemyCheckReactDescription=Role um d4 para subtrair o resultado do teste. Reaction/&SpendPowerBendLuckEnemyCheckReactTitle=Dobre a sorte Reaction/&SpendPowerBendLuckEnemyCheckTitle=Dobre a sorte -Reaction/&SpendPowerBendLuckEnemySavingDescription={0} tenha sucesso em um teste de resistência. Você pode reagir para rolar um d4 e subtrair o resultado do teste de resistência. +Reaction/&SpendPowerBendLuckEnemySavingDescription={0} tenha sucesso em um teste de resistência contra {2} de {1}. Você pode reagir rolando um d4 e subtrair o resultado do teste. Reaction/&SpendPowerBendLuckEnemySavingReactDescription=Role um d4 para subtrair o resultado do teste de salvamento. Reaction/&SpendPowerBendLuckEnemySavingReactTitle=Dobre a sorte Reaction/&SpendPowerBendLuckEnemySavingTitle=Dobre a sorte -Reaction/&SpendPowerBendLuckSavingDescription={0} falhou em um teste de resistência. Você pode reagir rolando um d4 e adicionar o resultado ao teste de resistência. +Reaction/&SpendPowerBendLuckSavingDescription={0} falhou em um teste de resistência contra {2} de {1}. Você pode reagir rolando um d4 e adicionar o resultado ao teste de resistência. Reaction/&SpendPowerBendLuckSavingReactDescription=Role um d4 para adicionar o resultado ao teste de resistência. Reaction/&SpendPowerBendLuckSavingReactTitle=Dobre a sorte Reaction/&SpendPowerBendLuckSavingTitle=Dobre a sorte @@ -97,7 +97,7 @@ Reaction/&SpendPowerTidesOfChaosAttackDescription=Você errou um ataque. Você p Reaction/&SpendPowerTidesOfChaosAttackReactDescription=Role o ataque com vantagem. Reaction/&SpendPowerTidesOfChaosAttackReactTitle=Marés do Caos Reaction/&SpendPowerTidesOfChaosAttackTitle=Marés do Caos -Reaction/&SpendPowerTidesOfChaosSaveDescription=Você perdeu um salvamento. Você pode usar Tides of Chaos contra {1} de {0} e rolar novamente o salvamento com vantagem. +Reaction/&SpendPowerTidesOfChaosSaveDescription=Você falhou em um teste de resistência contra {1} de {0}. Você pode reagir para refazer o teste de resistência com vantagem. Reaction/&SpendPowerTidesOfChaosSaveReactDescription=Role a defesa com vantagem. Reaction/&SpendPowerTidesOfChaosSaveReactTitle=Marés do Caos Reaction/&SpendPowerTidesOfChaosSaveTitle=Marés do Caos diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/SubClasses/WizardWarMagic-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/SubClasses/WizardWarMagic-pt-BR.txt index 889339b72e..33988f2796 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/SubClasses/WizardWarMagic-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/SubClasses/WizardWarMagic-pt-BR.txt @@ -16,8 +16,8 @@ Reaction/&CustomReactionArcaneDeflectionAttackDescription=Você está prestes a Reaction/&CustomReactionArcaneDeflectionAttackReactDescription=Forçar uma falha Reaction/&CustomReactionArcaneDeflectionAttackReactTitle=Deflexão Arcana Reaction/&CustomReactionArcaneDeflectionAttackTitle=Deflexão Arcana -Reaction/&CustomReactionArcaneDeflectionSavingDescription=Você falhou em um teste de resistência. Você pode usar sua reação para adicionar seu modificador de Inteligência ao teste de resistência e fazê-lo ter sucesso. -Reaction/&CustomReactionArcaneDeflectionSavingReactDescription=Forçar uma falha +Reaction/&CustomReactionArcaneDeflectionSavingDescription=Você falhou em um teste de resistência contra {0}> {1}. Você pode usar sua reação para adicionar seu modificador de Inteligência ao teste e fazê-lo ter sucesso. +Reaction/&CustomReactionArcaneDeflectionSavingReactDescription=Ter sucesso Reaction/&CustomReactionArcaneDeflectionSavingReactTitle=Deflexão Arcana Reaction/&CustomReactionArcaneDeflectionSavingTitle=Deflexão Arcana Subclass/&WizardWarMagicDescription=Uma variedade de faculdades arcanas se especializam em treinar magos para a guerra. A tradição da Magia de Guerra mistura princípios de evocação e abjuração, em vez de se especializar em qualquer uma dessas escolas. Ela ensina técnicas que fortalecem as magias de um conjurador, ao mesmo tempo em que fornece métodos para os magos reforçarem suas próprias defesas. Os seguidores dessa tradição são conhecidos como magos de guerra. Eles veem sua magia como uma arma e armadura, um recurso superior a qualquer pedaço de aço. Os magos de guerra agem rápido na batalha, usando suas magias para tomar o controle tático de uma situação. Suas magias atacam com força, enquanto suas habilidades defensivas frustram as tentativas de seus oponentes de contra-atacar. Os magos de guerra também são adeptos de transformar a energia mágica de outros conjuradores de magia contra eles. diff --git a/SolastaUnfinishedBusiness/Translations/ru/Feats/OtherFeats-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Feats/OtherFeats-ru.txt index 8a48df7fa7..f89a99fa84 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Feats/OtherFeats-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Feats/OtherFeats-ru.txt @@ -145,13 +145,13 @@ Reaction/&SpendPowerLuckyEnemyAttackDescription=Противник попал п Reaction/&SpendPowerLuckyEnemyAttackReactDescription=Бросьте d20, чтобы заменить бросок атаки. Reaction/&SpendPowerLuckyEnemyAttackReactTitle=Везунчик Reaction/&SpendPowerLuckyEnemyAttackTitle=Везунчик -Reaction/&SpendPowerLuckySavingDescription=Вы провалили спасбросок. Вы можете реакцией бросить d20 и заменить спасбросок. +Reaction/&SpendPowerLuckySavingDescription=Вы провалили спасбросок против {0}'s {1}. Вы можете отреагировать, бросив d20 и заменив бросок. Reaction/&SpendPowerLuckySavingReactDescription=Бросьте d20, чтобы заменить спасбросок. Reaction/&SpendPowerLuckySavingReactTitle=Везунчик Reaction/&SpendPowerLuckySavingTitle=Везунчик -Reaction/&SpendPowerMageSlayerDescription=Вы провалили спасбросок против {0}. Вы можете вместо этого обратить его в успех. -Reaction/&SpendPowerMageSlayerReactDescription=Вместо этого обратите спасбросок в успех. -Reaction/&SpendPowerMageSlayerReactTitle=Преуспеть +Reaction/&SpendPowerMageSlayerDescription=Вы провалили спасбросок против {0}'s {1}. Вы можете отреагировать, чтобы добиться успеха. +Reaction/&SpendPowerMageSlayerReactDescription=Преуспевать. +Reaction/&SpendPowerMageSlayerReactTitle=Убийца магов Reaction/&SpendPowerMageSlayerTitle=Убийца магов Reaction/&SpendPowerReactiveResistanceDescription={0} вот-вот ударит вас! Вы можете использовать свою реакцию, чтобы получить сопротивление стихии {1} до конца этого хода. Reaction/&SpendPowerReactiveResistanceReactDescription=Получите сопротивление. diff --git a/SolastaUnfinishedBusiness/Translations/ru/Feats/Races-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Feats/Races-ru.txt index bbdb887ab7..d91a59d3c8 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Feats/Races-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Feats/Races-ru.txt @@ -75,7 +75,7 @@ Reaction/&CustomReactionBountifulLuckCheckDescription={0} проваливает Reaction/&CustomReactionBountifulLuckCheckReactDescription=Бросьте d20, чтобы заменить проверку. Reaction/&CustomReactionBountifulLuckCheckReactTitle=Бездонная удача Reaction/&CustomReactionBountifulLuckCheckTitle=Бездонная удача -Reaction/&CustomReactionBountifulLuckSavingDescription={0} проваливает спасбросок против {1}. {2} может использовать реакцию для броска d20 и замены спасброска. +Reaction/&CustomReactionBountifulLuckSavingDescription={0} провалил спасбросок против {2} {1}. Вы можете отреагировать, бросив d20 и заменив бросок. Reaction/&CustomReactionBountifulLuckSavingReactDescription=Бросьте d20, чтобы заменить спасбросок. Reaction/&CustomReactionBountifulLuckSavingReactTitle=Бездонная удача Reaction/&CustomReactionBountifulLuckSavingTitle=Бездонная удача diff --git a/SolastaUnfinishedBusiness/Translations/ru/Inventor-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Inventor-ru.txt index 26771c3531..70dcae1f43 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Inventor-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Inventor-ru.txt @@ -39,10 +39,10 @@ Reaction/&SpendPowerInventorFlashOfGeniusCheckDescription={0} провалива Reaction/&SpendPowerInventorFlashOfGeniusCheckReactDescription=Бросьте d20, чтобы заменить результат проверки. Reaction/&SpendPowerInventorFlashOfGeniusCheckReactTitle=Реакция Reaction/&SpendPowerInventorFlashOfGeniusCheckTitle=Проблеск гениальности -Reaction/&SpendPowerInventorFlashOfGeniusReactDescription=Используйте эту способность, чтобы помочь союзнику в спасброске. -Reaction/&SpendPowerInventorFlashOfGeniusReactDescriptionAlly={0} провалил спасбросок против {2} {1}. Вы можете использовать свою реакцию на импровизированную помощь, которая превратит спасбросок в успешный. -Reaction/&SpendPowerInventorFlashOfGeniusReactDescriptionSelf={0} провалил спасбросок против {2} {1} и может использовать реакцию на импровизированную помощь, которая превратит спасбросок в успешный. -Reaction/&SpendPowerInventorFlashOfGeniusReactTitle=Реакция +Reaction/&SpendPowerInventorFlashOfGeniusReactDescription=Преуспевать +Reaction/&SpendPowerInventorFlashOfGeniusReactDescriptionAlly={0} провалил спасбросок против {2} {1}. Вы можете отреагировать, чтобы добавить свой модификатор Интеллекта к броску и сделать его успешным. +Reaction/&SpendPowerInventorFlashOfGeniusReactDescriptionSelf={0} провалил спасбросок против {2} {1} и может отреагировать, чтобы добавить свой модификатор Интеллекта к броску и сделать его успешным. +Reaction/&SpendPowerInventorFlashOfGeniusReactTitle=Вспышка гениальности Reaction/&SpendPowerInventorFlashOfGeniusTitle=Проблеск гениальности Reaction/&SpendPowerSoulOfArtificeDescription=Вы восстанавливаете количество хитов, равное вашему уровню Изобретателя, и поднимаетесь. Reaction/&SpendPowerSoulOfArtificeReactDescription=Вы восстанавливаете количество хитов, равное вашему уровню Изобретателя, и поднимаетесь. diff --git a/SolastaUnfinishedBusiness/Translations/ru/Races/Imp-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Races/Imp-ru.txt index 50867ae0db..7270e8f9c9 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Races/Imp-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Races/Imp-ru.txt @@ -40,9 +40,14 @@ Race/&RaceImpForestTitle=Лесной бес Race/&RaceImpInfernalDescription=Межпланарные эксперименты, проводившиеся в эпоху Манакалона, привели к тому, что демоны и другие существа проникли на материальный план. И хотя многие из этих существ были в конце концов пойманы или изгнаны, хитрым бесам удалось скрыться, незаметно приспособившись и продолжая жить с тех пор в различных уголках Пустошей. Теперь некоторые из них решили проявить себя и исследовать окружающий мир, даже если его обитатели не очень-то жалуют их демоническую природу. Race/&RaceImpInfernalTitle=Инфернальный бес Race/&RaceImpTitle=Бес -Reaction/&SpendPowerDrawInspirationDescription=Вы промахиваетесь атакой или проваливаете спасбросок. Используйте способность, чтобы добавить +3 к броску атаки или спасброску. -Reaction/&SpendPowerDrawInspirationReactTitle=Использовать -Reaction/&SpendPowerDrawInspirationTitle=Вдохновение +Reaction/&SpendPowerDrawInspirationAttackDescription=Вы собираетесь пропустить атакующий бросок. Вы можете отреагировать, чтобы добавить 3 к атакующему броску. +Reaction/&SpendPowerDrawInspirationAttackReactDescription=Добавьте 3 к броску. +Reaction/&SpendPowerDrawInspirationAttackReactTitle=Черпайте вдохновение +Reaction/&SpendPowerDrawInspirationAttackTitle=Черпайте вдохновение +Reaction/&SpendPowerDrawInspirationSavingDescription=Вы провалили спасбросок против {0}'s {1}. Вы можете отреагировать, чтобы добавить 3 к броску. +Reaction/&SpendPowerDrawInspirationSavingReactDescription=Добавьте 3 к броску. +Reaction/&SpendPowerDrawInspirationSavingReactTitle=Черпайте вдохновение +Reaction/&SpendPowerDrawInspirationSavingTitle=Черпайте вдохновение Tooltip/&SelectAnAlly=Пожалуйста, выберите союзника. Tooltip/&TargetAlreadyAssisted=С этой целью уже помогают. Tooltip/&TargetOutOfRange=Цель находится за пределами досягаемости. diff --git a/SolastaUnfinishedBusiness/Translations/ru/SubClasses/CircleOfTheCosmos-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/SubClasses/CircleOfTheCosmos-ru.txt index cc73670966..177db0b2a8 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/SubClasses/CircleOfTheCosmos-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/SubClasses/CircleOfTheCosmos-ru.txt @@ -40,7 +40,7 @@ Reaction/&SpendPowerWealCosmosOmenCheckDescription={0} проваливает п Reaction/&SpendPowerWealCosmosOmenCheckReactDescription=Бросьте D6, чтобы помочь союзнику с проверкой. Reaction/&SpendPowerWealCosmosOmenCheckReactTitle=Благо Reaction/&SpendPowerWealCosmosOmenCheckTitle=Космическое знамение: Благо -Reaction/&SpendPowerWealCosmosOmenSavingDescription={0} проваливает спасбросок против {1}. {2} может реакцией бросить D6 и добавить результат к спасброску. +Reaction/&SpendPowerWealCosmosOmenSavingDescription={0} провалил спасбросок против {2} {1}. Вы можете отреагировать, бросив D6 и добавив результат к броску. Reaction/&SpendPowerWealCosmosOmenSavingReactDescription=Бросьте D6, чтобы помочь союзнику в спасброске. Reaction/&SpendPowerWealCosmosOmenSavingReactTitle=Благо Reaction/&SpendPowerWealCosmosOmenSavingTitle=Космическое знамение: Благо @@ -52,7 +52,7 @@ Reaction/&SpendPowerWoeCosmosOmenCheckDescription={0} проходит пров Reaction/&SpendPowerWoeCosmosOmenCheckReactDescription=Бросьте D6, чтобы отвлечь противника от броска проверки. Reaction/&SpendPowerWoeCosmosOmenCheckReactTitle=Горе Reaction/&SpendPowerWoeCosmosOmenCheckTitle=Космическое знамение: Горе -Reaction/&SpendPowerWoeCosmosOmenSavingDescription={0} проходит спасбросок против {1}. {2} может реакцией бросить D6 и вычесть результат из спасброска. +Reaction/&SpendPowerWoeCosmosOmenSavingDescription={0} успешно пройти спасительный бросок против {2} {1}. Вы можете отреагировать, бросив D6, и вычесть результат из броска. Reaction/&SpendPowerWoeCosmosOmenSavingReactDescription=Бросьте D6, чтобы отвлечь врага от спасброска. Reaction/&SpendPowerWoeCosmosOmenSavingReactTitle=Горе Reaction/&SpendPowerWoeCosmosOmenSavingTitle=Космическое знамение: Горе diff --git a/SolastaUnfinishedBusiness/Translations/ru/SubClasses/MartialRoyalKnight-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/SubClasses/MartialRoyalKnight-ru.txt index a29b69ced0..3958944016 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/SubClasses/MartialRoyalKnight-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/SubClasses/MartialRoyalKnight-ru.txt @@ -8,9 +8,9 @@ Feature/&PowerRoyalKnightRallyingCryDescription=Начиная с 3-го уро Feature/&PowerRoyalKnightRallyingCryTitle=Объединяющий клич Feature/&PowerRoyalKnightSpiritedSurgeDescription=Начиная с 18-го уровня, ваш Вдохновляющий всплеск также даёт преимущество на все атаки, спасброски и проверки навыков на 1 раунд. Feature/&PowerRoyalKnightSpiritedSurgeTitle=Энергичный всплеск -Reaction/&SpendPowerRoyalKnightInspiringProtectionDescriptionAlly={0} провалил спасбросок от {2} {1}. Вы можете потратить реакцию, чтобы сымпровизировать помощь, позволяющую перебросить спасбросок. -Reaction/&SpendPowerRoyalKnightInspiringProtectionDescriptionSelf={0} провалил спасбросок от {2} {1} и может потратить реакцию, чтобы сымпровизировать помощь, позволяющую перебросить спасбросок. -Reaction/&SpendPowerRoyalKnightInspiringProtectionReactDescription=Потратьте использование этой силы, чтобы помочь союзнику с его спасброском. +Reaction/&SpendPowerRoyalKnightInspiringProtectionDescriptionAlly={0} провалил спасбросок против {2} {1}. Вы можете отреагировать, чтобы перебросить спасбросок. +Reaction/&SpendPowerRoyalKnightInspiringProtectionDescriptionSelf={0} провалил спасбросок против {2} {1} и может отреагировать, чтобы перебросить спасбросок. +Reaction/&SpendPowerRoyalKnightInspiringProtectionReactDescription=Перезапустите сохранение. Reaction/&SpendPowerRoyalKnightInspiringProtectionReactTitle=Вдохновляющая защита Reaction/&SpendPowerRoyalKnightInspiringProtectionTitle=Вдохновляющая защита Subclass/&MartialRoyalKnightDescription=Рыцарь, который пробуждает величие в других, совершая храбрые боевые подвиги. Рыцарь пурпурного дракона - искусный воин, но возглавив группу союзников, он может превратить даже самое плохо оснащенное ополчение в свирепую боевую дружину. diff --git a/SolastaUnfinishedBusiness/Translations/ru/SubClasses/SorcerousWildMagic-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/SubClasses/SorcerousWildMagic-ru.txt index 086e18c0e2..3181c6d113 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/SubClasses/SorcerousWildMagic-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/SubClasses/SorcerousWildMagic-ru.txt @@ -85,11 +85,11 @@ Reaction/&SpendPowerBendLuckEnemyCheckDescription={0} преуспел в Reaction/&SpendPowerBendLuckEnemyCheckReactDescription=Бросьте d4, чтобы вычесть результат из броска проверки. Reaction/&SpendPowerBendLuckEnemyCheckReactTitle=Подчинение удачи Reaction/&SpendPowerBendLuckEnemyCheckTitle=Подчинение удачи -Reaction/&SpendPowerBendLuckEnemySavingDescription={0} преуспел в спасброске. Вы можете использовать реакцию, совершив бросок d4 и вычтя результат из спасброска. +Reaction/&SpendPowerBendLuckEnemySavingDescription={0} успешно пройти спасительный бросок против {2} {1}. Вы можете отреагировать, бросив d4, и вычесть результат из броска. Reaction/&SpendPowerBendLuckEnemySavingReactDescription=Бросьте d4, чтобы вычесть результат из спасброска. Reaction/&SpendPowerBendLuckEnemySavingReactTitle=Подчинение удачи Reaction/&SpendPowerBendLuckEnemySavingTitle=Подчинение удачи -Reaction/&SpendPowerBendLuckSavingDescription={0} провалил спасбросок. Вы можете использовать реакцию, совершив бросок d4 и прибавив результат к спасброску. +Reaction/&SpendPowerBendLuckSavingDescription={0} провалил спасбросок против {2} {1}. Вы можете отреагировать, бросив d4, и добавить результат к спасброску. Reaction/&SpendPowerBendLuckSavingReactDescription=Бросьте d4, чтобы добавить результат к спасброску. Reaction/&SpendPowerBendLuckSavingReactTitle=Подчинение удачи Reaction/&SpendPowerBendLuckSavingTitle=Подчинение удачи @@ -97,7 +97,7 @@ Reaction/&SpendPowerTidesOfChaosAttackDescription=Ваша атака прома Reaction/&SpendPowerTidesOfChaosAttackReactDescription=Совершите атаку с преимуществом. Reaction/&SpendPowerTidesOfChaosAttackReactTitle=Поток хаоса Reaction/&SpendPowerTidesOfChaosAttackTitle=Поток хаоса -Reaction/&SpendPowerTidesOfChaosSaveDescription=Вы можете использовать Поток хаоса против {1} {0} и повторно совершить спасбросок с преимуществом. +Reaction/&SpendPowerTidesOfChaosSaveDescription=Вы провалили спасбросок против {0}'s {1}. Вы можете отреагировать, чтобы перебросить спасбросок с преимуществом. Reaction/&SpendPowerTidesOfChaosSaveReactDescription=Совершите спасбросок с преимуществом. Reaction/&SpendPowerTidesOfChaosSaveReactTitle=Поток хаоса Reaction/&SpendPowerTidesOfChaosSaveTitle=Поток хаоса diff --git a/SolastaUnfinishedBusiness/Translations/ru/SubClasses/WizardWarMagic-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/SubClasses/WizardWarMagic-ru.txt index 67e85693e7..8e4c09855f 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/SubClasses/WizardWarMagic-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/SubClasses/WizardWarMagic-ru.txt @@ -16,8 +16,8 @@ Reaction/&CustomReactionArcaneDeflectionAttackDescription=Атака вот-во Reaction/&CustomReactionArcaneDeflectionAttackReactDescription=Вызвать промах Reaction/&CustomReactionArcaneDeflectionAttackReactTitle=Магическое отражение Reaction/&CustomReactionArcaneDeflectionAttackTitle=Магическое отражение -Reaction/&CustomReactionArcaneDeflectionSavingDescription=Вы проваливаете спасбросок. Вместо этого вы можете использовать свою реакцию, чтобы добавить ваш модификатор Интеллекта к спасброску и вызвать успех. -Reaction/&CustomReactionArcaneDeflectionSavingReactDescription=Вызвать успех +Reaction/&CustomReactionArcaneDeflectionSavingDescription=Вы провалили спасбросок против {0}>'s {1}. Вы можете использовать свою реакцию, чтобы добавить свой модификатор Интеллекта к броску и сделать его успешным. +Reaction/&CustomReactionArcaneDeflectionSavingReactDescription=Преуспевать Reaction/&CustomReactionArcaneDeflectionSavingReactTitle=Магическое отражение Reaction/&CustomReactionArcaneDeflectionSavingTitle=Магическое отражение Subclass/&WizardWarMagicDescription=Разнообразные магические коллегии специализируются на подготовке волшебников к войне. Традиция военной магии сочетает в себе принципы воплощения и ограждения, не концентрируясь на какой-то из этих школ. Она учит техникам, усиливающим заклинания, также предлагая волшебникам методы поддержки своей защиты. Последователи этой традиции известны как военные маги. Они рассматривают свою магию и как оружие, и как броню — средство мощнее любого куска стали. Военные маги действуют в бою быстро, используя свои заклинания для получения тактического контроля над ситуацией. Их заклинания бьют сильно, в то время как их защита расстраивает попытки их противников контратаковать. Военные маги также мастаки использования магической энергии своих противников против них самих. diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Feats/OtherFeats-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Feats/OtherFeats-zh-CN.txt index 221ce954b4..42662460c4 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Feats/OtherFeats-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Feats/OtherFeats-zh-CN.txt @@ -145,13 +145,13 @@ Reaction/&SpendPowerLuckyEnemyAttackDescription=敌人命中你。你可以以 Reaction/&SpendPowerLuckyEnemyAttackReactDescription=投掷 d20 来替换攻击检定。 Reaction/&SpendPowerLuckyEnemyAttackReactTitle=幸运 Reaction/&SpendPowerLuckyEnemyAttackTitle=幸运 -Reaction/&SpendPowerLuckySavingDescription=你未能通过豁免检定。你可以反应投掷 d20 并替换豁免结果。 +Reaction/&SpendPowerLuckySavingDescription=您未能通过对抗 {0{1 的豁免检定。您可以做出反应,投掷 d20 并替换检定结果。 Reaction/&SpendPowerLuckySavingReactDescription=投掷 d20 来替换豁免结果。 Reaction/&SpendPowerLuckySavingReactTitle=幸运 Reaction/&SpendPowerLuckySavingTitle=幸运 -Reaction/&SpendPowerMageSlayerDescription=你对{0}的豁免失败。相反,你可以让自己成功。 -Reaction/&SpendPowerMageSlayerReactDescription=而是让自己成功。 -Reaction/&SpendPowerMageSlayerReactTitle=成功 +Reaction/&SpendPowerMageSlayerDescription=您未能成功对抗{0{1。您可以做出反应以取得成功。 +Reaction/&SpendPowerMageSlayerReactDescription=成功。 +Reaction/&SpendPowerMageSlayerReactTitle=法师杀手 Reaction/&SpendPowerMageSlayerTitle=巫师杀手 Reaction/&SpendPowerReactiveResistanceDescription={0}即将命中你!你可以反应来获得抗性{1},直到回合结束 Reaction/&SpendPowerReactiveResistanceReactDescription=给予抗性。 diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Feats/Races-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Feats/Races-zh-CN.txt index 0ea9447e0a..c3d64207f8 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Feats/Races-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Feats/Races-zh-CN.txt @@ -75,7 +75,7 @@ Reaction/&CustomReactionBountifulLuckCheckDescription={0} 检定失败。 {1} Reaction/&CustomReactionBountifulLuckCheckReactDescription=投掷 d20 来替换检定结果。 Reaction/&CustomReactionBountifulLuckCheckReactTitle=好运连连 Reaction/&CustomReactionBountifulLuckCheckTitle=好运连连 -Reaction/&CustomReactionBountifulLuckSavingDescription={0} 对 {1} 的豁免检定失败。 {2} 可以做出反应来投掷 d20 并替换豁免结果。 +Reaction/&CustomReactionBountifulLuckSavingDescription={0> 未能通过对抗 {1>{2> 的豁免检定。您可以做出反应,投掷 d20 并替换检定结果。 Reaction/&CustomReactionBountifulLuckSavingReactDescription=投掷 d20 来替换豁免结果。 Reaction/&CustomReactionBountifulLuckSavingReactTitle=好运连连 Reaction/&CustomReactionBountifulLuckSavingTitle=好运连连 diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Inventor-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Inventor-zh-CN.txt index 462e963574..4cab35e3d0 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Inventor-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Inventor-zh-CN.txt @@ -39,10 +39,10 @@ Reaction/&SpendPowerInventorFlashOfGeniusCheckDescription={0} 检定失败。 {1 Reaction/&SpendPowerInventorFlashOfGeniusCheckReactDescription=投掷 d20 来替换检定结果。 Reaction/&SpendPowerInventorFlashOfGeniusCheckReactTitle=反应 Reaction/&SpendPowerInventorFlashOfGeniusCheckTitle=灵光一闪 -Reaction/&SpendPowerInventorFlashOfGeniusReactDescription=使用此能力来帮助盟友进行豁免检定。 -Reaction/&SpendPowerInventorFlashOfGeniusReactDescriptionAlly={0}{1}{2} 的豁免检定失败。你可以花费你的反应提供帮助从而使检定成功。 -Reaction/&SpendPowerInventorFlashOfGeniusReactDescriptionSelf={0}{1}{2} 的豁免检定失败,可以花费反应提供帮助从而使检定成功. -Reaction/&SpendPowerInventorFlashOfGeniusReactTitle=反应 +Reaction/&SpendPowerInventorFlashOfGeniusReactDescription=成功 +Reaction/&SpendPowerInventorFlashOfGeniusReactDescriptionAlly={0 在对抗 {1{2 时未能成功掷骰。您可以做出反应,将您的智力调整值添加到掷骰中,并使其成功。 +Reaction/&SpendPowerInventorFlashOfGeniusReactDescriptionSelf={0 在对抗 {1{2 的豁免检定中失败,并且可以做出反应将你的智力调整值添加到检定中并使其成功。 +Reaction/&SpendPowerInventorFlashOfGeniusReactTitle=天才的闪光 Reaction/&SpendPowerInventorFlashOfGeniusTitle=灵光一闪 Reaction/&SpendPowerSoulOfArtificeDescription=你恢复了与你的盗贼等级等量的生命值,然后站了起来。 Reaction/&SpendPowerSoulOfArtificeReactDescription=你恢复了与你的盗贼等级等量的生命值,然后站了起来。 diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Races/Imp-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Races/Imp-zh-CN.txt index 1a7130eb5d..629793c96b 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Races/Imp-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Races/Imp-zh-CN.txt @@ -40,9 +40,14 @@ Race/&RaceImpForestTitle=森林小魔鬼 Race/&RaceImpInfernalDescription=马纳卡隆时代的星际实验导致恶魔和其他生物被带入物质位面。虽然其中许多生物最终被收容或驱逐,但这些鬼鬼祟祟的小魔鬼却能够躲藏起来,从那时起就秘密适应并在荒地的各个地方繁衍生息。现在,它们中的一些成员决定出现并探索周围的世界,即使可能不会善待它们的恶魔本性。 Race/&RaceImpInfernalTitle=地狱小魔鬼 Race/&RaceImpTitle=小魔鬼 -Reaction/&SpendPowerDrawInspirationDescription=你即将错过一次攻击检定或一次豁免检定。花费力量使攻击检定或豁免检定增加 3 点。 -Reaction/&SpendPowerDrawInspirationReactTitle=花费 -Reaction/&SpendPowerDrawInspirationTitle=汲取灵感 +Reaction/&SpendPowerDrawInspirationAttackDescription=您即将错过一次攻击掷骰。您可以做出反应,将攻击掷骰加 3。 +Reaction/&SpendPowerDrawInspirationAttackReactDescription=将掷出的数加 3。 +Reaction/&SpendPowerDrawInspirationAttackReactTitle=汲取灵感 +Reaction/&SpendPowerDrawInspirationAttackTitle=汲取灵感 +Reaction/&SpendPowerDrawInspirationSavingDescription=您未能成功对抗 {0{1。您可以做出反应,将结果加 3。 +Reaction/&SpendPowerDrawInspirationSavingReactDescription=将掷出的数加 3。 +Reaction/&SpendPowerDrawInspirationSavingReactTitle=汲取灵感 +Reaction/&SpendPowerDrawInspirationSavingTitle=汲取灵感 Tooltip/&SelectAnAlly=请选择一个盟友。 Tooltip/&TargetAlreadyAssisted=目标已经得到协助。 Tooltip/&TargetOutOfRange=目标超出范围。 diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/SubClasses/CircleOfTheCosmos-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/SubClasses/CircleOfTheCosmos-zh-CN.txt index 9261982e75..290e1f40b5 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/SubClasses/CircleOfTheCosmos-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/SubClasses/CircleOfTheCosmos-zh-CN.txt @@ -40,7 +40,7 @@ Reaction/&SpendPowerWealCosmosOmenCheckDescription={0} 检定失败。 {1} 可 Reaction/&SpendPowerWealCosmosOmenCheckReactDescription=投掷 D6 来帮助盟友进行检定。 Reaction/&SpendPowerWealCosmosOmenCheckReactTitle=吉兆 Reaction/&SpendPowerWealCosmosOmenCheckTitle=宇宙预兆:吉兆 -Reaction/&SpendPowerWealCosmosOmenSavingDescription={0} 对 {1} 的豁免检定失败。 {2} 可以做出反应来掷骰子 D6 并将其加入到豁免结果中。 +Reaction/&SpendPowerWealCosmosOmenSavingDescription={0 在对抗 {1{2 时未能成功掷骰。您可以做出反应掷出 D6 并将结果添加到掷骰中。 Reaction/&SpendPowerWealCosmosOmenSavingReactDescription=投掷 d6 来帮助盟友豁免。 Reaction/&SpendPowerWealCosmosOmenSavingReactTitle=吉兆 Reaction/&SpendPowerWealCosmosOmenSavingTitle=宇宙预兆:吉兆 @@ -52,7 +52,7 @@ Reaction/&SpendPowerWoeCosmosOmenCheckDescription={0} 成功检定。 {1} 可以 Reaction/&SpendPowerWoeCosmosOmenCheckReactDescription=投掷 D6 来通过豁免结果来分散敌人的注意力。 Reaction/&SpendPowerWoeCosmosOmenCheckReactTitle=凶兆 Reaction/&SpendPowerWoeCosmosOmenCheckTitle=宇宙预兆:凶兆 -Reaction/&SpendPowerWoeCosmosOmenSavingDescription={0} 成功对抗 {1} 的豁免检定。 {2} 可以做出反应,掷出 D6 并将其从豁免结果中减去。 +Reaction/&SpendPowerWoeCosmosOmenSavingDescription={0 成功通过了对抗 {1{2 的豁免检定。您可以做出反应,投掷 D6 并从检定结果中减去结果。 Reaction/&SpendPowerWoeCosmosOmenSavingReactDescription=投掷 d6 干扰敌人的豁免。 Reaction/&SpendPowerWoeCosmosOmenSavingReactTitle=凶兆 Reaction/&SpendPowerWoeCosmosOmenSavingTitle=宇宙预兆:凶兆 diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/SubClasses/MartialRoyalKnight-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/SubClasses/MartialRoyalKnight-zh-CN.txt index 8b5facc867..a2ae47edfe 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/SubClasses/MartialRoyalKnight-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/SubClasses/MartialRoyalKnight-zh-CN.txt @@ -8,9 +8,9 @@ Feature/&PowerRoyalKnightRallyingCryDescription=从第 3 级开始,你可以 Feature/&PowerRoyalKnightRallyingCryTitle=重整姿态 Feature/&PowerRoyalKnightSpiritedSurgeDescription=从 18 级开始,你的振奋之潮也会在 1 回合内给予盟友攻击,豁免和属性检定优势。 Feature/&PowerRoyalKnightSpiritedSurgeTitle=奋力之潮 -Reaction/&SpendPowerRoyalKnightInspiringProtectionDescriptionAlly={0} 豁免检定对抗 {1}{2}失败。你可以使用你的反应即兴帮助他,重新进行豁免掷骰。 -Reaction/&SpendPowerRoyalKnightInspiringProtectionDescriptionSelf={0} 豁免检定对抗 {1}{2}失败。你可以使用你的反应即兴帮助他,重新进行豁免掷骰。 -Reaction/&SpendPowerRoyalKnightInspiringProtectionReactDescription=使用这个能力帮助盟友重新掷骰。 +Reaction/&SpendPowerRoyalKnightInspiringProtectionDescriptionAlly={0 未能成功对抗 {1{2。您可以做出反应,重新进行保存。 +Reaction/&SpendPowerRoyalKnightInspiringProtectionDescriptionSelf={0 在对抗 {1{2 时未能成功进行豁免检定,可以做出反应重新进行豁免检定。 +Reaction/&SpendPowerRoyalKnightInspiringProtectionReactDescription=重新进行保存。 Reaction/&SpendPowerRoyalKnightInspiringProtectionReactTitle=振奋守护 Reaction/&SpendPowerRoyalKnightInspiringProtectionTitle=振奋守护 Subclass/&MartialRoyalKnightDescription=一名通过在战斗中做出勇敢的事迹来激发他人的伟大骑士。旗将是一名技艺娴熟的战士,但领导一队盟友甚至可以将装备最差的民兵变成一支激昂的战斗团队。 diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/SubClasses/SorcerousWildMagic-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/SubClasses/SorcerousWildMagic-zh-CN.txt index ea683a1a6a..982e8e832b 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/SubClasses/SorcerousWildMagic-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/SubClasses/SorcerousWildMagic-zh-CN.txt @@ -85,11 +85,11 @@ Reaction/&SpendPowerBendLuckEnemyCheckDescription={0} 成功完成检查 Reaction/&SpendPowerBendLuckEnemyCheckReactDescription=掷一个 d4 来从检查掷骰中减去结果。 Reaction/&SpendPowerBendLuckEnemyCheckReactTitle=扭转运气 Reaction/&SpendPowerBendLuckEnemyCheckTitle=扭转运气 -Reaction/&SpendPowerBendLuckEnemySavingDescription={0} 成功进行豁免掷骰。您可以做出反应,掷出 d4 并从豁免掷骰中减去结果。 +Reaction/&SpendPowerBendLuckEnemySavingDescription={0> 成功通过了对抗 {1>{2> 的豁免检定。您可以做出反应,投掷 d4 并从检定结果中减去。 Reaction/&SpendPowerBendLuckEnemySavingReactDescription=掷一个 d4 来从保存掷骰中减去结果。 Reaction/&SpendPowerBendLuckEnemySavingReactTitle=扭转运气 Reaction/&SpendPowerBendLuckEnemySavingTitle=扭转运气 -Reaction/&SpendPowerBendLuckSavingDescription={0} 未能通过豁免检定。您可以做出反应,投掷 d4 并将结果添加到豁免检定中。 +Reaction/&SpendPowerBendLuckSavingDescription={0 在对抗 {1{2 时未能通过豁免检定。您可以做出反应,投掷 d4 并将结果添加到豁免检定中。 Reaction/&SpendPowerBendLuckSavingReactDescription=掷一个 d4 将结果添加到保存掷骰中。 Reaction/&SpendPowerBendLuckSavingReactTitle=扭转运气 Reaction/&SpendPowerBendLuckSavingTitle=扭转运气 @@ -97,7 +97,7 @@ Reaction/&SpendPowerTidesOfChaosAttackDescription=您错过了一次攻击。您 Reaction/&SpendPowerTidesOfChaosAttackReactDescription=充分利用优势发起攻击。 Reaction/&SpendPowerTidesOfChaosAttackReactTitle=混沌之潮 Reaction/&SpendPowerTidesOfChaosAttackTitle=混沌之潮 -Reaction/&SpendPowerTidesOfChaosSaveDescription=您错过了一次保存。您可以使用“混沌之潮”对抗 {0{1,并重新掷出保存,以获得优势。 +Reaction/&SpendPowerTidesOfChaosSaveDescription=您未能成功对抗 {0{1。您可以做出反应,重新掷骰,以获得优势。 Reaction/&SpendPowerTidesOfChaosSaveReactDescription=利用优势进行保存。 Reaction/&SpendPowerTidesOfChaosSaveReactTitle=混沌之潮 Reaction/&SpendPowerTidesOfChaosSaveTitle=混沌之潮 diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/SubClasses/WizardWarMagic-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/SubClasses/WizardWarMagic-zh-CN.txt index 54ce50f200..77f210ea8e 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/SubClasses/WizardWarMagic-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/SubClasses/WizardWarMagic-zh-CN.txt @@ -16,8 +16,8 @@ Reaction/&CustomReactionArcaneDeflectionAttackDescription=你即将受到攻击 Reaction/&CustomReactionArcaneDeflectionAttackReactDescription=强制失败 Reaction/&CustomReactionArcaneDeflectionAttackReactTitle=奥术偏斜 Reaction/&CustomReactionArcaneDeflectionAttackTitle=奥术偏斜 -Reaction/&CustomReactionArcaneDeflectionSavingDescription=你的豁免失败了。你可以利用你的反应将你的智力调整值添加到豁免检定中并使其成功。 -Reaction/&CustomReactionArcaneDeflectionSavingReactDescription=强制失败 +Reaction/&CustomReactionArcaneDeflectionSavingDescription=您未能成功对抗{0}>{1>。您可以使用您的反应将您的智力调整值添加到掷骰中并使其成功。 +Reaction/&CustomReactionArcaneDeflectionSavingReactDescription=成功 Reaction/&CustomReactionArcaneDeflectionSavingReactTitle=奥术偏斜 Reaction/&CustomReactionArcaneDeflectionSavingTitle=奥术偏斜 Subclass/&WizardWarMagicDescription=许多奥术学院专门培养用于战争的法师。战争之传承精妙地融合了塑能与防护的机理,而非专精于独一学派。它既授予施法者增进法术威力的技巧,同时也为法师提供了改良防御能力的手法。这个奥术传承的追随者们被称为战法师。他们将他们的魔法视为武器和盔甲,比任何一块钢铁都更为坚韧的材料。战法师在战斗中行动迅速,用他们的法术夺取对战局的战术控制。他们的法术迅猛非常,而他们的防守技巧挫败了对手的反击势头。战法师也善于导引其他施法者的魔法能量反过来攻击他们。 From fa400d5c1bfdeabaf040962651b9d0db538a155e Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sun, 1 Sep 2024 23:32:29 -0700 Subject: [PATCH 007/212] improve Sorcerer Wild Magic tides of chaos to react on checks --- .../Subclasses/SorcerousWildMagic.cs | 54 ++++++++++++++++++- .../de/SubClasses/SorcerousWildMagic-de.txt | 7 ++- .../en/SubClasses/SorcerousWildMagic-en.txt | 7 ++- .../es/SubClasses/SorcerousWildMagic-es.txt | 7 ++- .../fr/SubClasses/SorcerousWildMagic-fr.txt | 7 ++- .../it/SubClasses/SorcerousWildMagic-it.txt | 7 ++- .../ja/SubClasses/SorcerousWildMagic-ja.txt | 7 ++- .../ko/SubClasses/SorcerousWildMagic-ko.txt | 7 ++- .../SubClasses/SorcerousWildMagic-pt-BR.txt | 7 ++- .../ru/SubClasses/SorcerousWildMagic-ru.txt | 7 ++- .../SubClasses/SorcerousWildMagic-zh-CN.txt | 7 ++- 11 files changed, 113 insertions(+), 11 deletions(-) diff --git a/SolastaUnfinishedBusiness/Subclasses/SorcerousWildMagic.cs b/SolastaUnfinishedBusiness/Subclasses/SorcerousWildMagic.cs index 315591a6d9..4eda7a420c 100644 --- a/SolastaUnfinishedBusiness/Subclasses/SorcerousWildMagic.cs +++ b/SolastaUnfinishedBusiness/Subclasses/SorcerousWildMagic.cs @@ -598,7 +598,8 @@ action is not CharacterActionCastSpell actionCastSpell || } } - private sealed class CustomBehaviorTidesOfChaos : ITryAlterOutcomeAttack, ITryAlterOutcomeSavingThrow + private sealed class CustomBehaviorTidesOfChaos + : ITryAlterOutcomeAttack, ITryAlterOutcomeAttributeCheck, ITryAlterOutcomeSavingThrow { public int HandlerPriority => -5; // ensure it triggers after bend luck @@ -703,6 +704,57 @@ void ReactionValidated() } } + public IEnumerator OnTryAlterAttributeCheck( + GameLocationBattleManager battleManager, + AbilityCheckData abilityCheckData, + GameLocationCharacter defender, + GameLocationCharacter helper) + { + var rulesetHelper = helper.RulesetCharacter; + var usablePower = PowerProvider.Get(PowerTidesOfChaos, rulesetHelper); + + if (abilityCheckData.AbilityCheckRollOutcome is not (RollOutcome.Failure or RollOutcome.CriticalFailure) || + helper != defender || + rulesetHelper.GetRemainingUsesOfPower(usablePower) == 0) + { + yield break; + } + + // any reaction within a saving flow must use the yielder as waiter + yield return helper.MyReactToSpendPower( + usablePower, + helper, + "TidesOfChaosCheck", + "SpendPowerTidesOfChaosCheckDescription".Formatted(Category.Reaction), + ReactionValidated, + battleManager); + + yield break; + + void ReactionValidated() + { + List advantageTrends = + [new(1, FeatureSourceType.CharacterFeature, PowerTidesOfChaos.Name, PowerTidesOfChaos)]; + + abilityCheckData.AbilityCheckActionModifier.AbilityCheckAdvantageTrends.SetRange(advantageTrends); + + var dieRoll = rulesetHelper.RollDie( + DieType.D20, RollContext.None, false, AdvantageType.Advantage, out _, out _); + + abilityCheckData.AbilityCheckSuccessDelta += dieRoll - abilityCheckData.AbilityCheckRoll; + abilityCheckData.AbilityCheckRoll = dieRoll; + abilityCheckData.AbilityCheckRollOutcome = abilityCheckData.AbilityCheckSuccessDelta >= 0 + ? RollOutcome.Success + : RollOutcome.Failure; + + rulesetHelper.LogCharacterActivatesAbility( + PowerTidesOfChaos.GuiPresentation.Title, + "Feedback/&TidesOfChaosAdvantageCheck", + tooltipContent: PowerTidesOfChaos.Name, + tooltipClass: "PowerDefinition"); + } + } + public IEnumerator OnTryAlterOutcomeSavingThrow( GameLocationBattleManager battleManager, GameLocationCharacter attacker, diff --git a/SolastaUnfinishedBusiness/Translations/de/SubClasses/SorcerousWildMagic-de.txt b/SolastaUnfinishedBusiness/Translations/de/SubClasses/SorcerousWildMagic-de.txt index 9425a82520..f60ee30652 100644 --- a/SolastaUnfinishedBusiness/Translations/de/SubClasses/SorcerousWildMagic-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/SubClasses/SorcerousWildMagic-de.txt @@ -48,7 +48,7 @@ Feature/&PowerSorcerousWildMagicD19Description=Bis zu drei Kreaturen deiner Wahl Feature/&PowerSorcerousWildMagicD19Title=Blitzschlag Feature/&PowerSorcerousWildMagicD20Description=Du erhältst alle verbrauchten Zauberpunkte zurück. Feature/&PowerSorcerousWildMagicD20Title=Zauberei auffüllen -Feature/&PowerSorcerousWildMagicTidesOfChaosDescription=Sie können die Kräfte des Zufalls und des Chaos manipulieren, um einen misslungenen Angriffswurf oder Rettungswurf mit Vorteil zu wiederholen. Sie können diese Funktion einmal pro langer Pause nutzen. Sie können auch einmal während Ihres Zuges als freie Aktion auf der Wild Magic Surge-Tabelle würfeln und eine Verwendung davon zurückgewinnen. +Feature/&PowerSorcerousWildMagicTidesOfChaosDescription=Sie können die Kräfte des Zufalls und des Chaos manipulieren, um einen fehlgeschlagenen Angriffswurf, Attributscheck oder Rettungswurf mit Vorteil zu wiederholen. Sie können diese Funktion einmal pro langer Pause verwenden. Sie können auch einmal während Ihres Zuges als freie Aktion auf der Wild Magic Surge-Tabelle würfeln und eine Verwendung davon zurückerhalten. Feature/&PowerSorcerousWildMagicTidesOfChaosTitle=Gezeiten des Chaos Feature/&PowerSorcerousWildMagicWildMagicSurgeDescription=Ihr Zaubern kann Wellen ungezähmter Magie entfesseln. Einmal pro Runde würfeln Sie einen W20, unmittelbar nachdem Sie einen Zauberspruch der 1. Stufe oder höher gewirkt haben. Wenn Sie weniger oder gleich {0} würfeln, würfeln Sie auf der Tabelle „Wild Magic Surge“. Wenn dieser Effekt ein Zauber ist, ist er zu wild, um von Ihrer Metamagie beeinflusst zu werden, und er erfordert keine Konzentration. Feature/&PowerSorcerousWildMagicWildMagicSurgeTitle=Wilde magische Welle @@ -61,6 +61,7 @@ Feedback/&BendLuckSavingToHitRoll={0} hat {1} verwendet und würfelt eine {2}, u Feedback/&ControlledChaosDieChoice={0} wählt {2} auf {1} und aktiviert {3} Feedback/&ControlledChaosDieRoll={0} würfelt eine {2} und eine {3} mit {1} Würfel Feedback/&RecoverSpellSlotOfLevel={0} stellt einen Zauberplatz der Stufe {2} wieder her +Feedback/&TidesOfChaosAdvantageCheck={0} verwendet {1}, um den Scheck mit Vorteil zu würfeln Feedback/&TidesOfChaosAdvantageSavingThrow={0} nutzt {1}, um den Rettungswurf mit Vorteil zu würfeln Feedback/&TidesOfChaosForcedSurge={1} zwingt {0}, automatisch auf der Wild Surge-Tabelle zu würfeln Feedback/&WidSurgeChanceDieRoll={0} würfelt eine {2} mit {1} Zufallswürfel @@ -97,6 +98,10 @@ Reaction/&SpendPowerTidesOfChaosAttackDescription=Sie haben einen Angriff verpas Reaction/&SpendPowerTidesOfChaosAttackReactDescription=Führen Sie den Angriff mit Vorteil aus. Reaction/&SpendPowerTidesOfChaosAttackReactTitle=Gezeiten des Chaos Reaction/&SpendPowerTidesOfChaosAttackTitle=Gezeiten des Chaos +Reaction/&SpendPowerTidesOfChaosCheckDescription=Sie haben einen Kontrollwurf nicht bestanden. Sie können reagieren, indem Sie den Kontrollwurf mit Vorteil wiederholen. +Reaction/&SpendPowerTidesOfChaosCheckReactDescription=Rollen Sie den Scheck mit Vorteil. +Reaction/&SpendPowerTidesOfChaosCheckReactTitle=Gezeiten des Chaos +Reaction/&SpendPowerTidesOfChaosCheckTitle=Gezeiten des Chaos Reaction/&SpendPowerTidesOfChaosSaveDescription=Ihr Rettungswurf gegen {1} von {0} ist fehlgeschlagen. Sie können reagieren und den Rettungswurf mit Vorteil wiederholen. Reaction/&SpendPowerTidesOfChaosSaveReactDescription=Rollen Sie den Save mit Vorteil. Reaction/&SpendPowerTidesOfChaosSaveReactTitle=Gezeiten des Chaos diff --git a/SolastaUnfinishedBusiness/Translations/en/SubClasses/SorcerousWildMagic-en.txt b/SolastaUnfinishedBusiness/Translations/en/SubClasses/SorcerousWildMagic-en.txt index 05cdcb67c7..31fe77b4b3 100644 --- a/SolastaUnfinishedBusiness/Translations/en/SubClasses/SorcerousWildMagic-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/SubClasses/SorcerousWildMagic-en.txt @@ -48,7 +48,7 @@ Feature/&PowerSorcerousWildMagicD19Description=Up to three creatures you choose Feature/&PowerSorcerousWildMagicD19Title=Lightning Strike Feature/&PowerSorcerousWildMagicD20Description=You regain all expended sorcery points. Feature/&PowerSorcerousWildMagicD20Title=Refill Sorcery -Feature/&PowerSorcerousWildMagicTidesOfChaosDescription=You can manipulate the forces of chance and chaos to reroll with advantage a failed attack roll or saving throw. You can use this feature once per long rest. You can also, once during your turn as a free action, roll on the Wild Magic Surge table and regain one use of it. +Feature/&PowerSorcerousWildMagicTidesOfChaosDescription=You can manipulate the forces of chance and chaos to reroll with advantage a failed attack roll, attribute check, or saving throw. You can use this feature once per long rest. You can also, once during your turn as a free action, roll on the Wild Magic Surge table and regain one use of it. Feature/&PowerSorcerousWildMagicTidesOfChaosTitle=Tides of Chaos Feature/&PowerSorcerousWildMagicWildMagicSurgeDescription=Your spellcasting can unleash surges of untamed magic. Once per turn, you roll a d20 immediately after you cast a sorcerer spell of 1st level or higher. If you roll less or equal {0}, roll on the Wild Magic Surge table. If that effect is a spell, it is too wild to be affected by your Metamagic, and it doesn't require concentration. Feature/&PowerSorcerousWildMagicWildMagicSurgeTitle=Wild Magic Surge @@ -61,6 +61,7 @@ Feedback/&BendLuckSavingToHitRoll={0} used {1} and rolls a {2} to add {3} to the Feedback/&ControlledChaosDieChoice={0} chooses {2} on {1} and activates {3} Feedback/&ControlledChaosDieRoll={0} rolls a {2} and a {3} on {1} die Feedback/&RecoverSpellSlotOfLevel={0} recovers one level {2} spell slot +Feedback/&TidesOfChaosAdvantageCheck={0} uses {1} to roll the check with advantage Feedback/&TidesOfChaosAdvantageSavingThrow={0} uses {1} to roll the saving throw with advantage Feedback/&TidesOfChaosForcedSurge={1} forces {0} to automatically roll on the wild surge table Feedback/&WidSurgeChanceDieRoll={0} rolls a {2} on {1} chance die @@ -97,6 +98,10 @@ Reaction/&SpendPowerTidesOfChaosAttackDescription=You missed an attack. You can Reaction/&SpendPowerTidesOfChaosAttackReactDescription=Roll the attack with advantage. Reaction/&SpendPowerTidesOfChaosAttackReactTitle=Tides of Chaos Reaction/&SpendPowerTidesOfChaosAttackTitle=Tides of Chaos +Reaction/&SpendPowerTidesOfChaosCheckDescription=You failed a check roll. You can react to reroll the check with advantage. +Reaction/&SpendPowerTidesOfChaosCheckReactDescription=Roll the check with advantage. +Reaction/&SpendPowerTidesOfChaosCheckReactTitle=Tides of Chaos +Reaction/&SpendPowerTidesOfChaosCheckTitle=Tides of Chaos Reaction/&SpendPowerTidesOfChaosSaveDescription=You failed a saving roll against {0}'s {1}. You can react to reroll the save with advantage. Reaction/&SpendPowerTidesOfChaosSaveReactDescription=Roll the save with advantage. Reaction/&SpendPowerTidesOfChaosSaveReactTitle=Tides of Chaos diff --git a/SolastaUnfinishedBusiness/Translations/es/SubClasses/SorcerousWildMagic-es.txt b/SolastaUnfinishedBusiness/Translations/es/SubClasses/SorcerousWildMagic-es.txt index f959e75c66..fd2eb0621e 100644 --- a/SolastaUnfinishedBusiness/Translations/es/SubClasses/SorcerousWildMagic-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/SubClasses/SorcerousWildMagic-es.txt @@ -48,7 +48,7 @@ Feature/&PowerSorcerousWildMagicD19Description=Hasta tres criaturas que elijas d Feature/&PowerSorcerousWildMagicD19Title=Rayo Feature/&PowerSorcerousWildMagicD20Description=Recuperas todos los puntos de hechicería gastados. Feature/&PowerSorcerousWildMagicD20Title=Recarga de hechicería -Feature/&PowerSorcerousWildMagicTidesOfChaosDescription=Puedes manipular las fuerzas del azar y el caos para repetir con ventaja una tirada de ataque o una tirada de salvación fallidas. Puede utilizar esta función una vez por descanso prolongado. También puedes, una vez durante tu turno como acción gratuita, tirar en la tabla Wild Magic Surge y recuperar un uso de ella. +Feature/&PowerSorcerousWildMagicTidesOfChaosDescription=Puedes manipular las fuerzas del azar y el caos para repetir con ventaja una tirada de ataque, una verificación de atributos o una tirada de salvación fallidas. Puedes usar esta característica una vez por cada descanso prolongado. También puedes, una vez durante tu turno como acción gratuita, tirar en la tabla de Oleada de magia salvaje y recuperar un uso de ella. Feature/&PowerSorcerousWildMagicTidesOfChaosTitle=Mareas del caos Feature/&PowerSorcerousWildMagicWildMagicSurgeDescription=Tus lanzamientos de conjuros pueden desatar oleadas de magia indomable. Una vez por turno, lanzas un d20 inmediatamente después de lanzar un conjuro de hechicero de nivel 1 o superior. Si obtienes un resultado menor o igual a {0}, lanza en la tabla de Oleada de magia salvaje. Si ese efecto es un conjuro, es demasiado salvaje para verse afectado por tu metamagia y no requiere concentración. Feature/&PowerSorcerousWildMagicWildMagicSurgeTitle=Oleada de magia salvaje @@ -61,6 +61,7 @@ Feedback/&BendLuckSavingToHitRoll={0} usó {1} y saca un {2} para agregar {3} a Feedback/&ControlledChaosDieChoice={0} elige {2} en {1} y activa {3} Feedback/&ControlledChaosDieRoll={0} saca un {2} y un {3} en el dado {1} Feedback/&RecoverSpellSlotOfLevel={0} recupera un espacio de hechizo de nivel {2} +Feedback/&TidesOfChaosAdvantageCheck={0} usa {1} para tirar el cheque con ventaja Feedback/&TidesOfChaosAdvantageSavingThrow={0} usa {1} para realizar la tirada de salvación con ventaja Feedback/&TidesOfChaosForcedSurge={1} obliga a {0} a rodar automáticamente en la tabla de aumento salvaje Feedback/&WidSurgeChanceDieRoll={0} lanza un {2} en {1} dado de probabilidad @@ -97,6 +98,10 @@ Reaction/&SpendPowerTidesOfChaosAttackDescription=Fallaste un ataque. Puedes usa Reaction/&SpendPowerTidesOfChaosAttackReactDescription=Lanza el ataque con ventaja. Reaction/&SpendPowerTidesOfChaosAttackReactTitle=Mareas del caos Reaction/&SpendPowerTidesOfChaosAttackTitle=Mareas del caos +Reaction/&SpendPowerTidesOfChaosCheckDescription=Fallaste una tirada de verificación. Puedes reaccionar para repetir la tirada de verificación con ventaja. +Reaction/&SpendPowerTidesOfChaosCheckReactDescription=Rueda el cheque con ventaja. +Reaction/&SpendPowerTidesOfChaosCheckReactTitle=Mareas del caos +Reaction/&SpendPowerTidesOfChaosCheckTitle=Mareas del caos Reaction/&SpendPowerTidesOfChaosSaveDescription=Fallaste una tirada de salvación contra el {1} de {0}. Puedes reaccionar para repetir la tirada de salvación con ventaja. Reaction/&SpendPowerTidesOfChaosSaveReactDescription=Realiza la tirada de salvación con ventaja. Reaction/&SpendPowerTidesOfChaosSaveReactTitle=Mareas del caos diff --git a/SolastaUnfinishedBusiness/Translations/fr/SubClasses/SorcerousWildMagic-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/SubClasses/SorcerousWildMagic-fr.txt index e214ade09c..9ca97265fd 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/SubClasses/SorcerousWildMagic-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/SubClasses/SorcerousWildMagic-fr.txt @@ -48,7 +48,7 @@ Feature/&PowerSorcerousWildMagicD19Description=Jusqu'à trois créatures que vou Feature/&PowerSorcerousWildMagicD19Title=Coup de foudre Feature/&PowerSorcerousWildMagicD20Description=Vous récupérez tous les points de sorcellerie dépensés. Feature/&PowerSorcerousWildMagicD20Title=Recharge Sorcellerie -Feature/&PowerSorcerousWildMagicTidesOfChaosDescription=Vous pouvez manipuler les forces du hasard et du chaos pour relancer avec avantage un jet d'attaque ou de sauvegarde raté. Vous pouvez utiliser cette capacité une fois par repos long. Vous pouvez également, une fois pendant votre tour en tant qu'action gratuite, lancer un jet sur la table de Déferlement de Magie Sauvage et en récupérer une utilisation. +Feature/&PowerSorcerousWildMagicTidesOfChaosDescription=Vous pouvez manipuler les forces du hasard et du chaos pour relancer avec avantage un jet d'attaque, un test d'attribut ou un jet de sauvegarde raté. Vous pouvez utiliser cette capacité une fois par repos long. Vous pouvez également, une fois pendant votre tour en tant qu'action gratuite, lancer un jet sur la table de Déferlement de Magie Sauvage et en récupérer une utilisation. Feature/&PowerSorcerousWildMagicTidesOfChaosTitle=Marées du chaos Feature/&PowerSorcerousWildMagicWildMagicSurgeDescription=Vos sorts peuvent déclencher des vagues de magie sauvage. Une fois par tour, vous lancez un d20 immédiatement après avoir lancé un sort d'ensorceleur de niveau 1 ou supérieur. Si vous obtenez un résultat inférieur ou égal à {0}, lancez sur le tableau des vagues de magie sauvage. Si cet effet est un sort, il est trop sauvage pour être affecté par votre métamagie et ne nécessite pas de concentration. Feature/&PowerSorcerousWildMagicWildMagicSurgeTitle=Surtension magique sauvage @@ -61,6 +61,7 @@ Feedback/&BendLuckSavingToHitRoll={0} a utilisé {1} et lance un {2} pour ajoute Feedback/&ControlledChaosDieChoice={0} choisit {2} sur {1} et active {3} Feedback/&ControlledChaosDieRoll={0} lance un {2} et un {3} sur le dé {1} Feedback/&RecoverSpellSlotOfLevel={0} récupère un emplacement de sort de niveau {2} +Feedback/&TidesOfChaosAdvantageCheck={0} utilise {1} pour lancer le test avec avantage Feedback/&TidesOfChaosAdvantageSavingThrow={0} utilise {1} pour lancer le jet de sauvegarde avec avantage Feedback/&TidesOfChaosForcedSurge={1} force {0} à lancer automatiquement le dé sur la table de surtension sauvage Feedback/&WidSurgeChanceDieRoll={0} lance un dé de chance {2} sur {1} @@ -97,6 +98,10 @@ Reaction/&SpendPowerTidesOfChaosAttackDescription=Vous avez raté une attaque. V Reaction/&SpendPowerTidesOfChaosAttackReactDescription=Lancez l'attaque avec avantage. Reaction/&SpendPowerTidesOfChaosAttackReactTitle=Marées du chaos Reaction/&SpendPowerTidesOfChaosAttackTitle=Marées du chaos +Reaction/&SpendPowerTidesOfChaosCheckDescription=Vous avez raté un jet de test. Vous pouvez réagir pour relancer le test avec avantage. +Reaction/&SpendPowerTidesOfChaosCheckReactDescription=Lancez le test avec avantage. +Reaction/&SpendPowerTidesOfChaosCheckReactTitle=Marées du chaos +Reaction/&SpendPowerTidesOfChaosCheckTitle=Marées du chaos Reaction/&SpendPowerTidesOfChaosSaveDescription=Vous avez raté un jet de sauvegarde contre le {1} de {0}. Vous pouvez réagir pour relancer le jet de sauvegarde avec avantage. Reaction/&SpendPowerTidesOfChaosSaveReactDescription=Lancez la sauvegarde avec avantage. Reaction/&SpendPowerTidesOfChaosSaveReactTitle=Marées du chaos diff --git a/SolastaUnfinishedBusiness/Translations/it/SubClasses/SorcerousWildMagic-it.txt b/SolastaUnfinishedBusiness/Translations/it/SubClasses/SorcerousWildMagic-it.txt index 3a5bc15aee..592c9c8779 100644 --- a/SolastaUnfinishedBusiness/Translations/it/SubClasses/SorcerousWildMagic-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/SubClasses/SorcerousWildMagic-it.txt @@ -48,7 +48,7 @@ Feature/&PowerSorcerousWildMagicD19Description=Fino a tre creature da te scelte Feature/&PowerSorcerousWildMagicD19Title=Fulmine Feature/&PowerSorcerousWildMagicD20Description=Recuperi tutti i punti stregoneria spesi. Feature/&PowerSorcerousWildMagicD20Title=Ricarica la stregoneria -Feature/&PowerSorcerousWildMagicTidesOfChaosDescription=Puoi manipolare le forze del caso e del caos per ripetere con vantaggio un tiro per colpire o un tiro salvezza fallito. Puoi usare questa caratteristica una volta per riposo lungo. Puoi anche, una volta durante il tuo turno come azione gratuita, tirare sulla tabella Wild Magic Surge e recuperarne un utilizzo. +Feature/&PowerSorcerousWildMagicTidesOfChaosDescription=Puoi manipolare le forze del caso e del caos per ripetere con vantaggio un tiro per colpire fallito, una prova di attributo o un tiro salvezza. Puoi usare questa caratteristica una volta per riposo lungo. Puoi anche, una volta durante il tuo turno come azione gratuita, tirare sulla tabella Wild Magic Surge e recuperarne un utilizzo. Feature/&PowerSorcerousWildMagicTidesOfChaosTitle=Maree del Caos Feature/&PowerSorcerousWildMagicWildMagicSurgeDescription=Il tuo lancio di incantesimi può scatenare ondate di magia selvaggia. Una volta per turno, tiri un d20 subito dopo aver lanciato un incantesimo da stregone di 1° livello o superiore. Se tiri un risultato uguale o inferiore a {0}, tira sulla tabella Wild Magic Surge. Se quell'effetto è un incantesimo, è troppo selvaggio per essere influenzato dalla tua Metamagia e non richiede concentrazione. Feature/&PowerSorcerousWildMagicWildMagicSurgeTitle=Ondata di magia selvaggia @@ -61,6 +61,7 @@ Feedback/&BendLuckSavingToHitRoll={0} ha usato {1} e tira un {2} per aggiungere Feedback/&ControlledChaosDieChoice={0} sceglie {2} su {1} e attiva {3} Feedback/&ControlledChaosDieRoll={0} tira un {2} e un {3} sul dado {1} Feedback/&RecoverSpellSlotOfLevel={0} recupera uno slot incantesimo di livello {2} +Feedback/&TidesOfChaosAdvantageCheck={0} usa {1} per tirare il controllo con vantaggio Feedback/&TidesOfChaosAdvantageSavingThrow={0} usa {1} per effettuare il tiro salvezza con vantaggio Feedback/&TidesOfChaosForcedSurge={1} forza {0} a tirare automaticamente sulla tabella delle ondate selvagge Feedback/&WidSurgeChanceDieRoll={0} tira un {2} su {1} dado possibilità @@ -97,6 +98,10 @@ Reaction/&SpendPowerTidesOfChaosAttackDescription=Hai mancato un attacco. Puoi u Reaction/&SpendPowerTidesOfChaosAttackReactDescription=Esegui l'attacco con vantaggio. Reaction/&SpendPowerTidesOfChaosAttackReactTitle=Maree del Caos Reaction/&SpendPowerTidesOfChaosAttackTitle=Maree del Caos +Reaction/&SpendPowerTidesOfChaosCheckDescription=Hai fallito un check roll. Puoi reagire e ripetere il check con vantaggio. +Reaction/&SpendPowerTidesOfChaosCheckReactDescription=Fai un assegno con vantaggio. +Reaction/&SpendPowerTidesOfChaosCheckReactTitle=Maree del Caos +Reaction/&SpendPowerTidesOfChaosCheckTitle=Maree del Caos Reaction/&SpendPowerTidesOfChaosSaveDescription=Hai fallito un tiro salvezza contro {0} di {1}. Puoi reagire e ripetere il tiro salvezza con vantaggio. Reaction/&SpendPowerTidesOfChaosSaveReactDescription=Esegui il tiro salvezza con vantaggio. Reaction/&SpendPowerTidesOfChaosSaveReactTitle=Maree del Caos diff --git a/SolastaUnfinishedBusiness/Translations/ja/SubClasses/SorcerousWildMagic-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/SubClasses/SorcerousWildMagic-ja.txt index 5e20fed27f..f3aee0129c 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/SubClasses/SorcerousWildMagic-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/SubClasses/SorcerousWildMagic-ja.txt @@ -48,7 +48,7 @@ Feature/&PowerSorcerousWildMagicD19Description=あなたのターンが終了す Feature/&PowerSorcerousWildMagicD19Title=落雷 Feature/&PowerSorcerousWildMagicD20Description=消費した魔術ポイントをすべて回復します。 Feature/&PowerSorcerousWildMagicD20Title=補充魔法 -Feature/&PowerSorcerousWildMagicTidesOfChaosDescription=偶然と混沌の力を操作して、失敗した攻撃ロールまたはセーヴィング スローを有利に再ロールすることができます。この機能は、大休憩ごとに 1 回使用できます。また、自分のターン中に 1 回、フリー アクションとして、ワイルド マジック サージ テーブルをロールして、1 回の使用回数を回復することもできます。 +Feature/&PowerSorcerousWildMagicTidesOfChaosDescription=偶然と混沌の力を操作して、失敗した攻撃ロール、属性チェック、セーヴィング スローを有利に再ロールすることができます。この機能は、大休憩ごとに 1 回使用できます。また、自分のターン中に 1 回、フリー アクションとして、ワイルド マジック サージ テーブルをロールして、1 回の使用回数を回復することもできます。 Feature/&PowerSorcerousWildMagicTidesOfChaosTitle=混沌の潮流 Feature/&PowerSorcerousWildMagicWildMagicSurgeDescription=あなたの呪文詠唱は、制御不能な魔法の波動を解き放つことができます。1 ターンに 1 回、1 レベル以上のソーサラー呪文を詠唱した直後に d20 をロールします。ロールの結果が {0} 以下だった場合、ワイルド マジック サージ テーブルをロールします。その効果が呪文である場合、それはメタマジックの影響を受けるにはワイルドすぎるため、集中力は必要ありません。 Feature/&PowerSorcerousWildMagicWildMagicSurgeTitle=ワイルドマジックサージ @@ -61,6 +61,7 @@ Feedback/&BendLuckSavingToHitRoll={0} は {1} を使用し、{2} をロールし Feedback/&ControlledChaosDieChoice={0} は {1} で {2} を選択し、{3} をアクティブにします Feedback/&ControlledChaosDieRoll={0} は {1} 個のサイコロで {2} と {3} をロールします Feedback/&RecoverSpellSlotOfLevel={0} はレベル {2} の呪文スロットを 1 つ回復します +Feedback/&TidesOfChaosAdvantageCheck={0}は{1}を使用して有利なチェックをロールします Feedback/&TidesOfChaosAdvantageSavingThrow={0}は{1}を使用してセーヴィングスローを有利にロールします Feedback/&TidesOfChaosForcedSurge={1} は {0} にワイルドサージテーブルを自動的にロールさせる Feedback/&WidSurgeChanceDieRoll={0} は {1} のチャンスダイスで {2} をロールします @@ -97,6 +98,10 @@ Reaction/&SpendPowerTidesOfChaosAttackDescription=攻撃を失敗しました。 Reaction/&SpendPowerTidesOfChaosAttackReactDescription=攻撃を有利に進めます。 Reaction/&SpendPowerTidesOfChaosAttackReactTitle=混沌の潮流 Reaction/&SpendPowerTidesOfChaosAttackTitle=混沌の潮流 +Reaction/&SpendPowerTidesOfChaosCheckDescription=チェックロールに失敗しました。反応して、有利な状態でチェックを再ロールすることができます。 +Reaction/&SpendPowerTidesOfChaosCheckReactDescription=チェックを有利にロールします。 +Reaction/&SpendPowerTidesOfChaosCheckReactTitle=混沌の潮流 +Reaction/&SpendPowerTidesOfChaosCheckTitle=混沌の潮流 Reaction/&SpendPowerTidesOfChaosSaveDescription={0}{1} に対するセーヴィング ロールに失敗しました。反応して、セーヴィングを有利に再ロールすることができます。 Reaction/&SpendPowerTidesOfChaosSaveReactDescription=セーブを有利にロールします。 Reaction/&SpendPowerTidesOfChaosSaveReactTitle=混沌の潮流 diff --git a/SolastaUnfinishedBusiness/Translations/ko/SubClasses/SorcerousWildMagic-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/SubClasses/SorcerousWildMagic-ko.txt index 8a0be891fa..20071f9ba6 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/SubClasses/SorcerousWildMagic-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/SubClasses/SorcerousWildMagic-ko.txt @@ -48,7 +48,7 @@ Feature/&PowerSorcerousWildMagicD19Description=당신의 턴이 끝나기 전에 Feature/&PowerSorcerousWildMagicD19Title=번개 충격 Feature/&PowerSorcerousWildMagicD20Description=소모한 마법 포인트를 모두 회복합니다. Feature/&PowerSorcerousWildMagicD20Title=리필 마법 -Feature/&PowerSorcerousWildMagicTidesOfChaosDescription=우연과 혼돈의 힘을 조종하여 실패한 공격 굴림이나 세이빙 스로우를 유리하게 다시 굴릴 수 있습니다. 이 기능은 긴 휴식당 한 번 사용할 수 있습니다. 또한, 턴 중 한 번 자유 행동으로 Wild Magic Surge 테이블을 굴려 한 번 사용할 수 있습니다. +Feature/&PowerSorcerousWildMagicTidesOfChaosDescription=우연과 혼돈의 힘을 조종하여 실패한 공격 굴림, 속성 검사 또는 세이빙 스로우를 유리하게 다시 굴릴 수 있습니다. 이 기능은 긴 휴식당 한 번 사용할 수 있습니다. 또한, 턴 중 한 번 자유 행동으로 Wild Magic Surge 테이블을 굴려 한 번 사용할 수 있습니다. Feature/&PowerSorcerousWildMagicTidesOfChaosTitle=혼돈의 파도 Feature/&PowerSorcerousWildMagicWildMagicSurgeDescription=당신의 주문 시전은 길들여지지 않은 마법의 급증을 불러일으킬 수 있습니다. 턴당 한 번, 1레벨 이상의 마법사 주문을 시전한 직후에 d20을 굴립니다. {0} 이하로 굴리면 Wild Magic Surge 표에서 굴립니다. 그 효과가 주문이라면, 당신의 Metamagic에 영향을 받기에는 너무 거칠고 집중이 필요하지 않습니다. Feature/&PowerSorcerousWildMagicWildMagicSurgeTitle=와일드 매직 서지 @@ -61,6 +61,7 @@ Feedback/&BendLuckSavingToHitRoll={0}은(는) {1}을(를) 사용했고 {2}를 Feedback/&ControlledChaosDieChoice={0}는 {1}에서 {2}를 선택하고 {3}을 활성화합니다. Feedback/&ControlledChaosDieRoll={0}는 {1} 주사위에 {2}와 {3}을 굴립니다. Feedback/&RecoverSpellSlotOfLevel={0}은 {2}레벨 주문 슬롯 1개를 회복합니다. +Feedback/&TidesOfChaosAdvantageCheck={0}은 {1}을 사용하여 유리한 체크를 굴립니다. Feedback/&TidesOfChaosAdvantageSavingThrow={0}은 {1}을 사용하여 이점을 가지고 세이빙 스로우를 굴립니다. Feedback/&TidesOfChaosForcedSurge={1}는 {0}이(가) Wild Surge 테이블에서 자동으로 롤링되도록 강제합니다. Feedback/&WidSurgeChanceDieRoll={0}는 {1} 확률로 주사위를 굴릴 때 {2}를 굴립니다. @@ -97,6 +98,10 @@ Reaction/&SpendPowerTidesOfChaosAttackDescription=공격을 놓쳤습니다. Reaction/&SpendPowerTidesOfChaosAttackReactDescription=공격을 유리하게 전개하세요. Reaction/&SpendPowerTidesOfChaosAttackReactTitle=혼돈의 물결 Reaction/&SpendPowerTidesOfChaosAttackTitle=혼돈의 물결 +Reaction/&SpendPowerTidesOfChaosCheckDescription=당신은 체크 롤에 실패했습니다. 당신은 이점을 가지고 체크를 다시 굴리는 것에 반응할 수 있습니다. +Reaction/&SpendPowerTidesOfChaosCheckReactDescription=수표를 유리하게 굴리세요. +Reaction/&SpendPowerTidesOfChaosCheckReactTitle=혼돈의 물결 +Reaction/&SpendPowerTidesOfChaosCheckTitle=혼돈의 물결 Reaction/&SpendPowerTidesOfChaosSaveDescription={0}{1}에 대한 세이빙 롤에 실패했습니다. 이점을 가지고 세이브를 다시 굴릴 수 있습니다. Reaction/&SpendPowerTidesOfChaosSaveReactDescription=세이브를 유리하게 굴리세요. Reaction/&SpendPowerTidesOfChaosSaveReactTitle=혼돈의 물결 diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/SubClasses/SorcerousWildMagic-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/SubClasses/SorcerousWildMagic-pt-BR.txt index 445174acbb..d49666fb2e 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/SubClasses/SorcerousWildMagic-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/SubClasses/SorcerousWildMagic-pt-BR.txt @@ -48,7 +48,7 @@ Feature/&PowerSorcerousWildMagicD19Description=Até três criaturas que você es Feature/&PowerSorcerousWildMagicD19Title=Relâmpago Feature/&PowerSorcerousWildMagicD20Description=Você recupera todos os pontos de feitiçaria gastos. Feature/&PowerSorcerousWildMagicD20Title=Recarga de Feitiçaria -Feature/&PowerSorcerousWildMagicTidesOfChaosDescription=Você pode manipular as forças do acaso e do caos para rolar novamente com vantagem uma jogada de ataque ou teste de resistência falha. Você pode usar essa habilidade uma vez por descanso longo. Você também pode, uma vez durante seu turno como uma ação livre, rolar na tabela Wild Magic Surge e recuperar um uso dela. +Feature/&PowerSorcerousWildMagicTidesOfChaosDescription=Você pode manipular as forças do acaso e do caos para rolar novamente com vantagem uma jogada de ataque, teste de atributo ou teste de resistência falhado. Você pode usar esta habilidade uma vez por descanso longo. Você também pode, uma vez durante seu turno como uma ação livre, rolar na tabela Wild Magic Surge e recuperar um uso dela. Feature/&PowerSorcerousWildMagicTidesOfChaosTitle=Marés do Caos Feature/&PowerSorcerousWildMagicWildMagicSurgeDescription=Sua conjuração pode liberar surtos de magia indomável. Uma vez por turno, você rola um d20 imediatamente após conjurar uma magia de feiticeiro de 1º nível ou superior. Se você rolar menos ou igual a {0}, role na tabela Surto de Magia Selvagem. Se esse efeito for uma magia, ela é selvagem demais para ser afetada pela sua Metamagia e não requer concentração. Feature/&PowerSorcerousWildMagicWildMagicSurgeTitle=Surto de Magia Selvagem @@ -61,6 +61,7 @@ Feedback/&BendLuckSavingToHitRoll={0} usou {1} e rola um {2} para adicionar {3} Feedback/&ControlledChaosDieChoice={0} escolhe {2} em {1} e ativa {3} Feedback/&ControlledChaosDieRoll={0} rola um {2} e um {3} no dado {1} Feedback/&RecoverSpellSlotOfLevel={0} recupera um slot de magia de nível {2} +Feedback/&TidesOfChaosAdvantageCheck={0} usa {1} para rolar o teste com vantagem Feedback/&TidesOfChaosAdvantageSavingThrow={0} usa {1} para rolar o teste de resistência com vantagem Feedback/&TidesOfChaosForcedSurge={1} força {0} a rolar automaticamente na tabela de surtos selvagens Feedback/&WidSurgeChanceDieRoll={0} rola um {2} em {1} dado de chance @@ -97,6 +98,10 @@ Reaction/&SpendPowerTidesOfChaosAttackDescription=Você errou um ataque. Você p Reaction/&SpendPowerTidesOfChaosAttackReactDescription=Role o ataque com vantagem. Reaction/&SpendPowerTidesOfChaosAttackReactTitle=Marés do Caos Reaction/&SpendPowerTidesOfChaosAttackTitle=Marés do Caos +Reaction/&SpendPowerTidesOfChaosCheckDescription=Você falhou em um teste. Você pode reagir para refazer o teste com vantagem. +Reaction/&SpendPowerTidesOfChaosCheckReactDescription=Role o cheque com vantagem. +Reaction/&SpendPowerTidesOfChaosCheckReactTitle=Marés do Caos +Reaction/&SpendPowerTidesOfChaosCheckTitle=Marés do Caos Reaction/&SpendPowerTidesOfChaosSaveDescription=Você falhou em um teste de resistência contra {1} de {0}. Você pode reagir para refazer o teste de resistência com vantagem. Reaction/&SpendPowerTidesOfChaosSaveReactDescription=Role a defesa com vantagem. Reaction/&SpendPowerTidesOfChaosSaveReactTitle=Marés do Caos diff --git a/SolastaUnfinishedBusiness/Translations/ru/SubClasses/SorcerousWildMagic-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/SubClasses/SorcerousWildMagic-ru.txt index 3181c6d113..727359eaa5 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/SubClasses/SorcerousWildMagic-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/SubClasses/SorcerousWildMagic-ru.txt @@ -48,7 +48,7 @@ Feature/&PowerSorcerousWildMagicD19Description=До трёх существ на Feature/&PowerSorcerousWildMagicD19Title=Удар молнии Feature/&PowerSorcerousWildMagicD20Description=Вы восстанавливаете все потраченные единицы чародейства. Feature/&PowerSorcerousWildMagicD20Title=Пополнение чародейства -Feature/&PowerSorcerousWildMagicTidesOfChaosDescription=Вы можете манипулировать силами случая и хаоса, чтобы совершать с преимуществом повторные броски атаки или спасброски всякий раз, когда ваша первая попытка терпит неудачу. Сделав это, вы должны совершить продолжительный отдых, прежде чем вы сможете использовать это умение ещё раз. Вы также можете один раз в свой ход свободным действием совершить бросок по таблице Волны дикой магии и восстановить таким образом одно использование данного умения. +Feature/&PowerSorcerousWildMagicTidesOfChaosDescription=Вы можете манипулировать силами случайности и хаоса, чтобы перебросить с преимуществом проваленный бросок атаки, проверку атрибута или спасбросок. Вы можете использовать эту возможность один раз за длительный отдых. Вы также можете один раз во время своего хода в качестве свободного действия сделать бросок по таблице Wild Magic Surge и восстановить одно ее использование. Feature/&PowerSorcerousWildMagicTidesOfChaosTitle=Поток хаоса Feature/&PowerSorcerousWildMagicWildMagicSurgeDescription=Ваше колдовство может вызвать волны дикой магии. Сразу после накладывания вами заклинания чародея как минимум 1-го уровня вы бросаете кость d20. Если результат броска меньше или равен {0}, бросьте кость по таблице Волна дикой магии для создания случайного магического эффекта. Волна может возникать только один раз за ход. Если эффект волны является заклинанием, он слишком непредсказуем, чтобы его можно было модифицировать метамагией, он также не требует концентрации. Feature/&PowerSorcerousWildMagicWildMagicSurgeTitle=Волна дикой магии @@ -61,6 +61,7 @@ Feedback/&BendLuckSavingToHitRoll={0} использовал {1} и бросае Feedback/&ControlledChaosDieChoice={0} выбирает {2} на {1} и активирует {3} Feedback/&ControlledChaosDieRoll={0} выбрасывает {2} и {3} на кости {1} Feedback/&RecoverSpellSlotOfLevel={0} восстанавливает одну ячейку заклинания уровня {2} +Feedback/&TidesOfChaosAdvantageCheck={0} использует {1} для броска проверки с преимуществом Feedback/&TidesOfChaosAdvantageSavingThrow={0} использует {1} для совершения спасброска с преимуществом Feedback/&TidesOfChaosForcedSurge={1} заставляет {0} автоматически совершить бросок по таблице Волна дикой магии Feedback/&WidSurgeChanceDieRoll={0} выбрасывает {2} на кости вероятности {1} @@ -97,6 +98,10 @@ Reaction/&SpendPowerTidesOfChaosAttackDescription=Ваша атака прома Reaction/&SpendPowerTidesOfChaosAttackReactDescription=Совершите атаку с преимуществом. Reaction/&SpendPowerTidesOfChaosAttackReactTitle=Поток хаоса Reaction/&SpendPowerTidesOfChaosAttackTitle=Поток хаоса +Reaction/&SpendPowerTidesOfChaosCheckDescription=Вы провалили проверку. Вы можете отреагировать, чтобы перебросить проверку с преимуществом. +Reaction/&SpendPowerTidesOfChaosCheckReactDescription=Проведите проверку с преимуществом. +Reaction/&SpendPowerTidesOfChaosCheckReactTitle=Приливы Хаоса +Reaction/&SpendPowerTidesOfChaosCheckTitle=Приливы Хаоса Reaction/&SpendPowerTidesOfChaosSaveDescription=Вы провалили спасбросок против {0}'s {1}. Вы можете отреагировать, чтобы перебросить спасбросок с преимуществом. Reaction/&SpendPowerTidesOfChaosSaveReactDescription=Совершите спасбросок с преимуществом. Reaction/&SpendPowerTidesOfChaosSaveReactTitle=Поток хаоса diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/SubClasses/SorcerousWildMagic-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/SubClasses/SorcerousWildMagic-zh-CN.txt index 982e8e832b..c133cece62 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/SubClasses/SorcerousWildMagic-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/SubClasses/SorcerousWildMagic-zh-CN.txt @@ -48,7 +48,7 @@ Feature/&PowerSorcerousWildMagicD19Description=在你的回合结束前,你周 Feature/&PowerSorcerousWildMagicD19Title=雷击 Feature/&PowerSorcerousWildMagicD20Description=你恢复了所有消耗的魔法点数。 Feature/&PowerSorcerousWildMagicD20Title=补充魔法 -Feature/&PowerSorcerousWildMagicTidesOfChaosDescription=您可以操纵机会和混乱的力量,以优势重新掷出失败的攻击掷骰或豁免掷骰。您可以在每次长时间休息时使用此功能一次。您还可以在您的回合中以自由动作掷出一次狂野魔法涌动表并重新获得一次使用权。 +Feature/&PowerSorcerousWildMagicTidesOfChaosDescription=您可以操纵机会和混乱的力量,以优势重新掷出失败的攻击掷骰、属性检定或豁免掷骰。您可以在每次长时间休息时使用此功能一次。您还可以在您的回合中以自由动作掷出一次狂野魔法激增表并重新获得一次使用权。 Feature/&PowerSorcerousWildMagicTidesOfChaosTitle=混沌之潮 Feature/&PowerSorcerousWildMagicWildMagicSurgeDescription=您的施法可以释放狂野魔法的浪潮。每回合一次,您在施放 1 级或更高级别的巫师法术后立即掷出 d20。如果您掷出的点数小于或等于 {0},则在狂野魔法浪潮表上掷骰子。如果该效果是法术,则它太狂野而无法受到您的超魔法的影响,并且不需要集中注意力。 Feature/&PowerSorcerousWildMagicWildMagicSurgeTitle=狂野魔法涌动 @@ -61,6 +61,7 @@ Feedback/&BendLuckSavingToHitRoll={0} 使用 {1} 并掷出 {2},将 {3} 添加 Feedback/&ControlledChaosDieChoice={0} 在 {1} 上选择 {2} 并激活 {3} Feedback/&ControlledChaosDieRoll={0} 在 {1} 个骰子上掷出 {2} 和 {3} Feedback/&RecoverSpellSlotOfLevel={0} 恢复一个等级 {2} 法术位 +Feedback/&TidesOfChaosAdvantageCheck={0} 利用 {1} 的优势掷出支票 Feedback/&TidesOfChaosAdvantageSavingThrow={0} 使用 {1} 进行豁免检定并获得优势 Feedback/&TidesOfChaosForcedSurge={1} 强制 {0} 自动在狂野激增表上滚动 Feedback/&WidSurgeChanceDieRoll={0} 在 {1} 个机会骰子上掷出 {2} @@ -97,6 +98,10 @@ Reaction/&SpendPowerTidesOfChaosAttackDescription=您错过了一次攻击。您 Reaction/&SpendPowerTidesOfChaosAttackReactDescription=充分利用优势发起攻击。 Reaction/&SpendPowerTidesOfChaosAttackReactTitle=混沌之潮 Reaction/&SpendPowerTidesOfChaosAttackTitle=混沌之潮 +Reaction/&SpendPowerTidesOfChaosCheckDescription=您未通过检查。您可以做出反应,重新进行检查以获得优势。 +Reaction/&SpendPowerTidesOfChaosCheckReactDescription=以优势滚动支票。 +Reaction/&SpendPowerTidesOfChaosCheckReactTitle=混沌之潮 +Reaction/&SpendPowerTidesOfChaosCheckTitle=混沌之潮 Reaction/&SpendPowerTidesOfChaosSaveDescription=您未能成功对抗 {0{1。您可以做出反应,重新掷骰,以获得优势。 Reaction/&SpendPowerTidesOfChaosSaveReactDescription=利用优势进行保存。 Reaction/&SpendPowerTidesOfChaosSaveReactTitle=混沌之潮 From a1383ddbec129126100e2989d396b663e1702d3c Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Mon, 2 Sep 2024 08:34:32 -0700 Subject: [PATCH 008/212] minor clean up and tweaks --- .../ITryAlterOutcomeAttributeCheck.cs | 24 ++- .../Models/CharacterUAContext.cs | 2 +- .../Models/SharedSpellsContext.cs | 160 +++++++++--------- .../RulesetImplementationManagerPatcher.cs | 46 ----- 4 files changed, 91 insertions(+), 141 deletions(-) diff --git a/SolastaUnfinishedBusiness/Interfaces/ITryAlterOutcomeAttributeCheck.cs b/SolastaUnfinishedBusiness/Interfaces/ITryAlterOutcomeAttributeCheck.cs index a268eb1e29..6a61d5138a 100644 --- a/SolastaUnfinishedBusiness/Interfaces/ITryAlterOutcomeAttributeCheck.cs +++ b/SolastaUnfinishedBusiness/Interfaces/ITryAlterOutcomeAttributeCheck.cs @@ -321,11 +321,12 @@ internal static IEnumerator HandleITryAlterOutcomeAttributeCheck( GameLocationCharacter actingCharacter, AbilityCheckData abilityCheckData) { - yield return HandleBardicRollOnFailure(actingCharacter, abilityCheckData); - - var actionService = ServiceRepository.GetService(); var battleManager = ServiceRepository.GetService() as GameLocationBattleManager; + + yield return HandleBardicRollOnFailure(battleManager, actingCharacter, abilityCheckData); + + var actionService = ServiceRepository.GetService(); var locationCharacterService = ServiceRepository.GetService(); var contenders = Gui.Battle?.AllContenders ?? @@ -355,18 +356,18 @@ internal static IEnumerator HandleITryAlterOutcomeAttributeCheck( } private static IEnumerator HandleBardicRollOnFailure( - GameLocationCharacter actingCharacter, AbilityCheckData abilityCheckData) + GameLocationBattleManager battleManager, + GameLocationCharacter actingCharacter, + AbilityCheckData abilityCheckData) { var actionService = ServiceRepository.GetService(); - var battleManager = ServiceRepository.GetService() - as GameLocationBattleManager; if (abilityCheckData.AbilityCheckRollOutcome != RollOutcome.Failure) { yield break; } - battleManager!.GetBestParametersForBardicDieRoll( + battleManager.GetBestParametersForBardicDieRoll( actingCharacter, out var bestDie, out _, @@ -375,13 +376,8 @@ private static IEnumerator HandleBardicRollOnFailure( out var advantage); if (bestDie <= DieType.D1 || - actingCharacter.RulesetCharacter == null) - { - yield break; - } - - // Is the die enough to overcome the failure? - if (DiceMaxValue[(int)bestDie] < Mathf.Abs(abilityCheckData.AbilityCheckSuccessDelta)) + actingCharacter.RulesetCharacter == null || + DiceMaxValue[(int)bestDie] < Mathf.Abs(abilityCheckData.AbilityCheckSuccessDelta)) { yield break; } diff --git a/SolastaUnfinishedBusiness/Models/CharacterUAContext.cs b/SolastaUnfinishedBusiness/Models/CharacterUAContext.cs index 744dcdfbf0..e81e8928e4 100644 --- a/SolastaUnfinishedBusiness/Models/CharacterUAContext.cs +++ b/SolastaUnfinishedBusiness/Models/CharacterUAContext.cs @@ -512,7 +512,7 @@ private void AddBonusAttackAndDamageRoll( TurnOccurenceType.EndOfTurn, AttributeDefinitions.TagEffect, rulesetAttacker.guid, - FactionDefinitions.HostileMonsters.Name, + FactionDefinitions.Party.Name, 1, conditionSunderingBlowAlly.Name, 0, diff --git a/SolastaUnfinishedBusiness/Models/SharedSpellsContext.cs b/SolastaUnfinishedBusiness/Models/SharedSpellsContext.cs index 8a35707d91..259c105d18 100644 --- a/SolastaUnfinishedBusiness/Models/SharedSpellsContext.cs +++ b/SolastaUnfinishedBusiness/Models/SharedSpellsContext.cs @@ -351,80 +351,80 @@ internal int GetCasterLevel() internal static readonly List InitiateCastingSlots = [ - new SlotsByLevelDuplet { Slots = [1], Level = 01 }, - new SlotsByLevelDuplet { Slots = [1], Level = 02 }, - new SlotsByLevelDuplet { Slots = [1], Level = 03 }, - new SlotsByLevelDuplet { Slots = [1], Level = 04 }, - new SlotsByLevelDuplet { Slots = [1], Level = 05 }, - new SlotsByLevelDuplet { Slots = [1], Level = 06 }, - new SlotsByLevelDuplet { Slots = [1], Level = 07 }, - new SlotsByLevelDuplet { Slots = [1], Level = 08 }, - new SlotsByLevelDuplet { Slots = [1], Level = 09 }, - new SlotsByLevelDuplet { Slots = [1], Level = 10 }, - new SlotsByLevelDuplet { Slots = [1], Level = 11 }, - new SlotsByLevelDuplet { Slots = [1], Level = 12 }, - new SlotsByLevelDuplet { Slots = [1], Level = 13 }, - new SlotsByLevelDuplet { Slots = [1], Level = 14 }, - new SlotsByLevelDuplet { Slots = [1], Level = 15 }, - new SlotsByLevelDuplet { Slots = [1], Level = 16 }, - new SlotsByLevelDuplet { Slots = [1], Level = 17 }, - new SlotsByLevelDuplet { Slots = [1], Level = 18 }, - new SlotsByLevelDuplet { Slots = [1], Level = 19 }, - new SlotsByLevelDuplet { Slots = [1], Level = 20 } + new() { Slots = [1], Level = 01 }, + new() { Slots = [1], Level = 02 }, + new() { Slots = [1], Level = 03 }, + new() { Slots = [1], Level = 04 }, + new() { Slots = [1], Level = 05 }, + new() { Slots = [1], Level = 06 }, + new() { Slots = [1], Level = 07 }, + new() { Slots = [1], Level = 08 }, + new() { Slots = [1], Level = 09 }, + new() { Slots = [1], Level = 10 }, + new() { Slots = [1], Level = 11 }, + new() { Slots = [1], Level = 12 }, + new() { Slots = [1], Level = 13 }, + new() { Slots = [1], Level = 14 }, + new() { Slots = [1], Level = 15 }, + new() { Slots = [1], Level = 16 }, + new() { Slots = [1], Level = 17 }, + new() { Slots = [1], Level = 18 }, + new() { Slots = [1], Level = 19 }, + new() { Slots = [1], Level = 20 } ]; internal static readonly List RaceCastingSlots = [ - new SlotsByLevelDuplet { Slots = [0, 0], Level = 01 }, - new SlotsByLevelDuplet { Slots = [0, 0], Level = 02 }, - new SlotsByLevelDuplet { Slots = [1, 0], Level = 03 }, - new SlotsByLevelDuplet { Slots = [1, 0], Level = 04 }, - new SlotsByLevelDuplet { Slots = [1, 1], Level = 05 }, - new SlotsByLevelDuplet { Slots = [1, 1], Level = 06 }, - new SlotsByLevelDuplet { Slots = [1, 1], Level = 07 }, - new SlotsByLevelDuplet { Slots = [1, 1], Level = 08 }, - new SlotsByLevelDuplet { Slots = [1, 1], Level = 09 }, - new SlotsByLevelDuplet { Slots = [1, 1], Level = 10 }, - new SlotsByLevelDuplet { Slots = [1, 1], Level = 11 }, - new SlotsByLevelDuplet { Slots = [1, 1], Level = 12 }, - new SlotsByLevelDuplet { Slots = [1, 1], Level = 13 }, - new SlotsByLevelDuplet { Slots = [1, 1], Level = 14 }, - new SlotsByLevelDuplet { Slots = [1, 1], Level = 15 }, - new SlotsByLevelDuplet { Slots = [1, 1], Level = 16 }, - new SlotsByLevelDuplet { Slots = [1, 1], Level = 17 }, - new SlotsByLevelDuplet { Slots = [1, 1], Level = 18 }, - new SlotsByLevelDuplet { Slots = [1, 1], Level = 19 }, - new SlotsByLevelDuplet { Slots = [1, 1], Level = 20 } + new() { Slots = [0, 0], Level = 01 }, + new() { Slots = [0, 0], Level = 02 }, + new() { Slots = [1, 0], Level = 03 }, + new() { Slots = [1, 0], Level = 04 }, + new() { Slots = [1, 1], Level = 05 }, + new() { Slots = [1, 1], Level = 06 }, + new() { Slots = [1, 1], Level = 07 }, + new() { Slots = [1, 1], Level = 08 }, + new() { Slots = [1, 1], Level = 09 }, + new() { Slots = [1, 1], Level = 10 }, + new() { Slots = [1, 1], Level = 11 }, + new() { Slots = [1, 1], Level = 12 }, + new() { Slots = [1, 1], Level = 13 }, + new() { Slots = [1, 1], Level = 14 }, + new() { Slots = [1, 1], Level = 15 }, + new() { Slots = [1, 1], Level = 16 }, + new() { Slots = [1, 1], Level = 17 }, + new() { Slots = [1, 1], Level = 18 }, + new() { Slots = [1, 1], Level = 19 }, + new() { Slots = [1, 1], Level = 20 } ]; internal static readonly List RaceEmptyCastingSlots = [ - new SlotsByLevelDuplet { Slots = [0], Level = 01 }, - new SlotsByLevelDuplet { Slots = [0], Level = 02 }, - new SlotsByLevelDuplet { Slots = [0], Level = 03 }, - new SlotsByLevelDuplet { Slots = [0], Level = 04 }, - new SlotsByLevelDuplet { Slots = [0], Level = 05 }, - new SlotsByLevelDuplet { Slots = [0], Level = 06 }, - new SlotsByLevelDuplet { Slots = [0], Level = 07 }, - new SlotsByLevelDuplet { Slots = [0], Level = 08 }, - new SlotsByLevelDuplet { Slots = [0], Level = 09 }, - new SlotsByLevelDuplet { Slots = [0], Level = 10 }, - new SlotsByLevelDuplet { Slots = [0], Level = 11 }, - new SlotsByLevelDuplet { Slots = [0], Level = 12 }, - new SlotsByLevelDuplet { Slots = [0], Level = 13 }, - new SlotsByLevelDuplet { Slots = [0], Level = 14 }, - new SlotsByLevelDuplet { Slots = [0], Level = 15 }, - new SlotsByLevelDuplet { Slots = [0], Level = 16 }, - new SlotsByLevelDuplet { Slots = [0], Level = 17 }, - new SlotsByLevelDuplet { Slots = [0], Level = 18 }, - new SlotsByLevelDuplet { Slots = [0], Level = 19 }, - new SlotsByLevelDuplet { Slots = [0], Level = 20 } + new() { Slots = [0], Level = 01 }, + new() { Slots = [0], Level = 02 }, + new() { Slots = [0], Level = 03 }, + new() { Slots = [0], Level = 04 }, + new() { Slots = [0], Level = 05 }, + new() { Slots = [0], Level = 06 }, + new() { Slots = [0], Level = 07 }, + new() { Slots = [0], Level = 08 }, + new() { Slots = [0], Level = 09 }, + new() { Slots = [0], Level = 10 }, + new() { Slots = [0], Level = 11 }, + new() { Slots = [0], Level = 12 }, + new() { Slots = [0], Level = 13 }, + new() { Slots = [0], Level = 14 }, + new() { Slots = [0], Level = 15 }, + new() { Slots = [0], Level = 16 }, + new() { Slots = [0], Level = 17 }, + new() { Slots = [0], Level = 18 }, + new() { Slots = [0], Level = 19 }, + new() { Slots = [0], Level = 20 } ]; // game uses IndexOf(0) on these sub lists reason why the last 0 there private static readonly List WarlockCastingSlots = [ - new SlotsByLevelDuplet + new() { Slots = [ @@ -438,7 +438,7 @@ internal int GetCasterLevel() Level = 01 }, - new SlotsByLevelDuplet + new() { Slots = [ @@ -452,7 +452,7 @@ internal int GetCasterLevel() Level = 02 }, - new SlotsByLevelDuplet + new() { Slots = [ @@ -466,7 +466,7 @@ internal int GetCasterLevel() Level = 03 }, - new SlotsByLevelDuplet + new() { Slots = [ @@ -480,7 +480,7 @@ internal int GetCasterLevel() Level = 04 }, - new SlotsByLevelDuplet + new() { Slots = [ @@ -494,7 +494,7 @@ internal int GetCasterLevel() Level = 05 }, - new SlotsByLevelDuplet + new() { Slots = [ @@ -508,7 +508,7 @@ internal int GetCasterLevel() Level = 06 }, - new SlotsByLevelDuplet + new() { Slots = [ @@ -522,7 +522,7 @@ internal int GetCasterLevel() Level = 07 }, - new SlotsByLevelDuplet + new() { Slots = [ @@ -536,7 +536,7 @@ internal int GetCasterLevel() Level = 08 }, - new SlotsByLevelDuplet + new() { Slots = [ @@ -550,7 +550,7 @@ internal int GetCasterLevel() Level = 09 }, - new SlotsByLevelDuplet + new() { Slots = [ @@ -564,7 +564,7 @@ internal int GetCasterLevel() Level = 10 }, - new SlotsByLevelDuplet + new() { Slots = [ @@ -578,7 +578,7 @@ internal int GetCasterLevel() Level = 11 }, - new SlotsByLevelDuplet + new() { Slots = [ @@ -592,7 +592,7 @@ internal int GetCasterLevel() Level = 12 }, - new SlotsByLevelDuplet + new() { Slots = [ @@ -606,7 +606,7 @@ internal int GetCasterLevel() Level = 13 }, - new SlotsByLevelDuplet + new() { Slots = [ @@ -620,7 +620,7 @@ internal int GetCasterLevel() Level = 14 }, - new SlotsByLevelDuplet + new() { Slots = [ @@ -634,7 +634,7 @@ internal int GetCasterLevel() Level = 15 }, - new SlotsByLevelDuplet + new() { Slots = [ @@ -648,7 +648,7 @@ internal int GetCasterLevel() Level = 16 }, - new SlotsByLevelDuplet + new() { Slots = [ @@ -662,7 +662,7 @@ internal int GetCasterLevel() Level = 17 }, - new SlotsByLevelDuplet + new() { Slots = [ @@ -676,7 +676,7 @@ internal int GetCasterLevel() Level = 18 }, - new SlotsByLevelDuplet + new() { Slots = [ @@ -690,7 +690,7 @@ internal int GetCasterLevel() Level = 19 }, - new SlotsByLevelDuplet + new() { Slots = [ diff --git a/SolastaUnfinishedBusiness/Patches/RulesetImplementationManagerPatcher.cs b/SolastaUnfinishedBusiness/Patches/RulesetImplementationManagerPatcher.cs index b8f663395a..919faa9350 100644 --- a/SolastaUnfinishedBusiness/Patches/RulesetImplementationManagerPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/RulesetImplementationManagerPatcher.cs @@ -862,52 +862,6 @@ sourceDefinition is not return senseMode == null || !glTarget.IsWithinRange(glCaster, senseMode.SenseRange); } - - internal static void OnRollSavingThrowOath( - RulesetCharacter caster, - RulesetActor target, - BaseDefinition sourceDefinition, - string selfConditionName, - ConditionDefinition conditionDefinitionEnemy) - { - if (caster == null || - caster.Side == target.Side || - !caster.HasConditionOfCategoryAndType(AttributeDefinitions.TagEffect, selfConditionName)) - { - return; - } - - if (sourceDefinition is not SpellDefinition { castingTime: ActivationTime.Action } && - sourceDefinition is not FeatureDefinitionPower { RechargeRate: RechargeRate.ChannelDivinity } && - !caster.AllConditions.Any(x => x.Name.Contains("Smite"))) - { - return; - } - - var gameLocationCaster = GameLocationCharacter.GetFromActor(caster); - var gameLocationTarget = GameLocationCharacter.GetFromActor(target); - - if (gameLocationCaster == null || - gameLocationTarget == null || - !gameLocationCaster.IsWithinRange(gameLocationTarget, 2)) - { - return; - } - - target.InflictCondition( - conditionDefinitionEnemy.Name, - DurationType.Round, - 0, - TurnOccurenceType.StartOfTurn, - AttributeDefinitions.TagEffect, - caster.guid, - caster.CurrentFaction.Name, - 1, - conditionDefinitionEnemy.Name, - 0, - 0, - 0); - } } [HarmonyPatch(typeof(RulesetImplementationManager), nameof(RulesetImplementationManager.ApplyConditionForm))] From d3cee685db50518e28d8e4f130ed2f68359bd9e0 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Mon, 2 Sep 2024 08:38:22 -0700 Subject: [PATCH 009/212] fix Party Editor to register/unregister powers from feats --- .../Displays/PartyEditor.cs | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/SolastaUnfinishedBusiness/Displays/PartyEditor.cs b/SolastaUnfinishedBusiness/Displays/PartyEditor.cs index 761a55b71b..a132f2ed89 100644 --- a/SolastaUnfinishedBusiness/Displays/PartyEditor.cs +++ b/SolastaUnfinishedBusiness/Displays/PartyEditor.cs @@ -307,6 +307,13 @@ ToolTypeDefinition tool when chr.TrainedToolTypes.Contains(tool) => () => { chr.TrainFeats([feat]); + foreach (var power in feat.Features.OfType()) + { + var usablePower = new RulesetUsablePower(power, null, null); + + chr.UsablePowers.Add(usablePower); + } + LevelUpContext.RecursiveGrantCustomFeatures( chr, AttributeDefinitions.TagFeat, feat.Features); } @@ -316,6 +323,17 @@ ToolTypeDefinition tool when chr.TrainedToolTypes.Contains(tool) => () => { chr.TrainedFeats.Remove(feat); + foreach (var power in feat.Features.OfType()) + { + var usablePower = + chr.UsablePowers.FirstOrDefault(p => p.PowerDefinition == power); + + if (usablePower != null) + { + chr.UsablePowers.Remove(usablePower); + } + } + LevelUpContext.RecursiveRemoveCustomFeatures( chr, AttributeDefinitions.TagFeat, feat.Features); } From 270421b2aa682262186d52c96f4e72a9ff32a9ac Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Mon, 2 Sep 2024 08:45:19 -0700 Subject: [PATCH 010/212] improve versatilities to react on attribute checks --- .../Builders/EldritchVersatility.cs | 72 +++++++++++++++---- 1 file changed, 59 insertions(+), 13 deletions(-) diff --git a/SolastaUnfinishedBusiness/Subclasses/Builders/EldritchVersatility.cs b/SolastaUnfinishedBusiness/Subclasses/Builders/EldritchVersatility.cs index 578358dcd7..c4036d1998 100644 --- a/SolastaUnfinishedBusiness/Subclasses/Builders/EldritchVersatility.cs +++ b/SolastaUnfinishedBusiness/Subclasses/Builders/EldritchVersatility.cs @@ -857,14 +857,35 @@ public IEnumerator OnSpellCasted( if (glc != null) { - glc.RollAbilityCheck(AttributeDefinitions.Intelligence, - SkillDefinitions.Arcana, + var abilityCheckRoll = glc.RollAbilityCheck( + AttributeDefinitions.Intelligence, SkillDefinitions.Arcana, 14 + spellLevel + Math.Max(-6, spellLevel - supportCondition.CurrentPoints), - AdvantageType.None, checkModifier, false, -1, out var abilityCheckRollOutcome, - out _, true); + AdvantageType.None, + checkModifier, + false, + -1, + out var rollOutcome, + out var successDelta, + true); + + //PATCH: support for Bardic Inspiration roll off battle and ITryAlterOutcomeAttributeCheck + var abilityCheckData = new AbilityCheckData + { + AbilityCheckRoll = abilityCheckRoll, + AbilityCheckRollOutcome = rollOutcome, + AbilityCheckSuccessDelta = successDelta, + AbilityCheckActionModifier = checkModifier + }; + + yield return TryAlterOutcomeAttributeCheck + .HandleITryAlterOutcomeAttributeCheck(castAction.ActingCharacter, abilityCheckData); + + castAction.AbilityCheckRoll = abilityCheckData.AbilityCheckRoll; + castAction.AbilityCheckRollOutcome = abilityCheckData.AbilityCheckRollOutcome; + castAction.AbilityCheckSuccessDelta = abilityCheckData.AbilityCheckSuccessDelta; // Fails check - if (abilityCheckRollOutcome > RollOutcome.Success) + if (castAction.AbilityCheckRollOutcome > RollOutcome.Success) { yield break; } @@ -876,8 +897,8 @@ public IEnumerator OnSpellCasted( } var console = Gui.Game.GameConsole; - var entry = new GameConsoleEntry("Feedback/BattlefieldShorthandCopySpellSuccess", - console.consoleTableDefinition) { Indent = true }; + var entry = new GameConsoleEntry( + "Feedback/BattlefieldShorthandCopySpellSuccess", console.consoleTableDefinition) { Indent = true }; console.AddCharacterEntry(featureOwner, entry); entry.AddParameter( @@ -907,14 +928,39 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, AttributeDefinitions.ComputeAbilityScoreModifier( featureOwner.TryGetAttributeValue(AttributeDefinitions.Intelligence)) }; + checkModifier.AbilityCheckModifierTrends.Add(new TrendInfo(checkModifier.AbilityCheckModifier, FeatureSourceType.CharacterFeature, "PowerPatronEldritchSurgeVersatilitySwitchPool", null)); - gameLocationCharacter.RollAbilityCheck("Intelligence", "Arcana", supportCondition.CreateSlotDC, - AdvantageType.None, checkModifier, false, -1, out var abilityCheckRollOutcome, - out _, true); - // If success increase DC, other wise decrease DC - var createSuccess = abilityCheckRollOutcome <= RollOutcome.Success; + var abilityCheckRoll = gameLocationCharacter.RollAbilityCheck( + AttributeDefinitions.Intelligence, SkillDefinitions.Arcana, + supportCondition.CreateSlotDC, + AdvantageType.None, + checkModifier, + false, + -1, + out var rollOutcome, + out var successDelta, + true); + + //PATCH: support for Bardic Inspiration roll off battle and ITryAlterOutcomeAttributeCheck + var abilityCheckData = new AbilityCheckData + { + AbilityCheckRoll = abilityCheckRoll, + AbilityCheckRollOutcome = rollOutcome, + AbilityCheckSuccessDelta = successDelta, + AbilityCheckActionModifier = checkModifier + }; + + yield return TryAlterOutcomeAttributeCheck + .HandleITryAlterOutcomeAttributeCheck(action.ActingCharacter, abilityCheckData); + + action.AbilityCheckRoll = abilityCheckData.AbilityCheckRoll; + action.AbilityCheckRollOutcome = abilityCheckData.AbilityCheckRollOutcome; + action.AbilityCheckSuccessDelta = abilityCheckData.AbilityCheckSuccessDelta; + + // If success increase DC, otherwise decrease DC + var createSuccess = action.AbilityCheckRollOutcome <= RollOutcome.Success; // Log to notify outcome and new DC var console = Gui.Game.GameConsole; @@ -930,7 +976,7 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, console.AddEntry(entry); // If fails - if (abilityCheckRollOutcome > RollOutcome.Success) + if (action.AbilityCheckRollOutcome > RollOutcome.Success) { supportCondition.TryEarnOrSpendPoints(PointAction.Modify, PointUsage.BattlefieldConversionFailure); yield break; From 520c270d6defc381a1d0f5056771ae4d28d67b4b Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Mon, 2 Sep 2024 11:10:55 -0700 Subject: [PATCH 011/212] improve ability checks to also allow reactions on success --- SolastaUnfinishedBusiness/Feats/OtherFeats.cs | 5 +- .../Patches/ActivitiesBreakFreePatcher.cs | 12 +- .../CharacterActionBreakFreePatcher.cs | 17 +- .../CharacterActionCastSpellPatcher.cs | 141 ++++++++ .../CharacterActionMoveStepClimbPatcher.cs | 316 ++++++++++++++++++ .../CharacterActionMoveStepJumpPatcher.cs | 109 ++++++ .../Patches/CharacterActionUsePowerPatcher.cs | 156 ++++++++- .../Builders/EldritchVersatility.cs | 10 +- 8 files changed, 753 insertions(+), 13 deletions(-) create mode 100644 SolastaUnfinishedBusiness/Patches/CharacterActionMoveStepClimbPatcher.cs create mode 100644 SolastaUnfinishedBusiness/Patches/CharacterActionMoveStepJumpPatcher.cs diff --git a/SolastaUnfinishedBusiness/Feats/OtherFeats.cs b/SolastaUnfinishedBusiness/Feats/OtherFeats.cs index 2943733e09..e27bdddaa8 100644 --- a/SolastaUnfinishedBusiness/Feats/OtherFeats.cs +++ b/SolastaUnfinishedBusiness/Feats/OtherFeats.cs @@ -1188,8 +1188,9 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, AbilityCheckActionModifier = actionModifier }; - yield return TryAlterOutcomeAttributeCheck - .HandleITryAlterOutcomeAttributeCheck(actingCharacter, abilityCheckData); + var battleManager = ServiceRepository.GetService(); + + yield return battleManager.HandleFailedAbilityCheck(action, actingCharacter, actionModifier); if (abilityCheckData.AbilityCheckRollOutcome is RollOutcome.Success or RollOutcome.CriticalSuccess) { diff --git a/SolastaUnfinishedBusiness/Patches/ActivitiesBreakFreePatcher.cs b/SolastaUnfinishedBusiness/Patches/ActivitiesBreakFreePatcher.cs index f9004637e4..dcb3ac74d4 100644 --- a/SolastaUnfinishedBusiness/Patches/ActivitiesBreakFreePatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/ActivitiesBreakFreePatcher.cs @@ -77,8 +77,16 @@ public static IEnumerator Postfix( AttributeDefinitions.Strength, string.Empty, actionModifier); var abilityCheckRoll = gameLocationCharacter.RollAbilityCheck( - AttributeDefinitions.Strength, string.Empty, checkDC, AdvantageType.None, actionModifier, - false, -1, out var rollOutcome, out var successDelta, true); + AttributeDefinitions.Strength, + string.Empty, + checkDC, + AdvantageType.None, + actionModifier, + false, + -1, + out var rollOutcome, + out var successDelta, + true); //PATCH: support for Bardic Inspiration roll off battle and ITryAlterOutcomeAttributeCheck var abilityCheckData = new AbilityCheckData diff --git a/SolastaUnfinishedBusiness/Patches/CharacterActionBreakFreePatcher.cs b/SolastaUnfinishedBusiness/Patches/CharacterActionBreakFreePatcher.cs index c63013bd16..368b397361 100644 --- a/SolastaUnfinishedBusiness/Patches/CharacterActionBreakFreePatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/CharacterActionBreakFreePatcher.cs @@ -106,8 +106,16 @@ private static IEnumerator Process(CharacterActionBreakFree __instance) abilityScoreName, proficiencyName, actionModifier); var abilityCheckRoll = __instance.ActingCharacter.RollAbilityCheck( - abilityScoreName, proficiencyName, checkDC, AdvantageType.None, actionModifier, false, - -1, out var rollOutcome, out var successDelta, true); + abilityScoreName, + proficiencyName, + checkDC, + AdvantageType.None, + actionModifier, + false, + -1, + out var rollOutcome, + out var successDelta, + true); //PATCH: support for Bardic Inspiration roll off battle and ITryAlterOutcomeAttributeCheck var abilityCheckData = new AbilityCheckData @@ -118,8 +126,9 @@ private static IEnumerator Process(CharacterActionBreakFree __instance) AbilityCheckActionModifier = actionModifier }; - yield return TryAlterOutcomeAttributeCheck - .HandleITryAlterOutcomeAttributeCheck(__instance.ActingCharacter, abilityCheckData); + var battleManager = ServiceRepository.GetService(); + + yield return battleManager.HandleFailedAbilityCheck(__instance, __instance.ActingCharacter, actionModifier); __instance.AbilityCheckRoll = abilityCheckData.AbilityCheckRoll; __instance.AbilityCheckRollOutcome = abilityCheckData.AbilityCheckRollOutcome; diff --git a/SolastaUnfinishedBusiness/Patches/CharacterActionCastSpellPatcher.cs b/SolastaUnfinishedBusiness/Patches/CharacterActionCastSpellPatcher.cs index 1f76086728..73530d4268 100644 --- a/SolastaUnfinishedBusiness/Patches/CharacterActionCastSpellPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/CharacterActionCastSpellPatcher.cs @@ -1,4 +1,5 @@ using System; +using System.Collections; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Linq; @@ -11,6 +12,7 @@ using SolastaUnfinishedBusiness.Behaviors; using SolastaUnfinishedBusiness.Interfaces; using SolastaUnfinishedBusiness.Models; +using static RuleDefinitions; namespace SolastaUnfinishedBusiness.Patches; @@ -139,4 +141,143 @@ public static bool Prefix([NotNull] CharacterActionCastSpell __instance) return false; } } + + //PATCH: allow check reactions on cast spell regardless of success / failure + [HarmonyPatch(typeof(CharacterActionCastSpell), nameof(CharacterActionCastSpell.CounterEffectAction))] + [SuppressMessage("Minor Code Smell", "S101:Types should be named in PascalCase", Justification = "Patch")] + [UsedImplicitly] + public static class CounterEffectAction_Patch + { + [UsedImplicitly] + public static bool Prefix(ref IEnumerator __result, CharacterActionCastSpell __instance, + CharacterAction counterAction) + { + __result = Process(__instance, counterAction); + + return false; + } + + private static IEnumerator Process( + CharacterActionCastSpell actionCastSpell, + CharacterAction counterAction) + { + if (actionCastSpell.ActionParams.TargetAction == null) + { + yield break; + } + + var actingCharacter = actionCastSpell.ActingCharacter; + var rulesetCharacter = actingCharacter.RulesetCharacter; + var actionParams = actionCastSpell.ActionParams.TargetAction.ActionParams; + var actionModifier = actionParams.ActionModifiers[0]; + + foreach (var effectForm in actionParams.RulesetEffect.EffectDescription.EffectForms) + { + if (effectForm.FormType != EffectForm.EffectFormType.Counter) + { + continue; + } + + var counterForm = effectForm.CounterForm; + var counteredSpell = actionParams.TargetAction.ActionParams.RulesetEffect as RulesetEffectSpell; + var counteredSpellDefinition = counteredSpell!.SpellDefinition; + var slotLevel = counteredSpell.SlotLevel; + + if (counterForm.AutomaticSpellLevel + actionCastSpell.addSpellLevel >= slotLevel) + { + actionCastSpell.ActionParams.TargetAction.Countered = true; + } + else if (counterForm.CheckBaseDC != 0) + { + var checkDC = counterForm.CheckBaseDC + slotLevel; + + rulesetCharacter + .EnumerateFeaturesToBrowse(rulesetCharacter.FeaturesToBrowse); + + foreach (var featureDefinition in rulesetCharacter.FeaturesToBrowse) + { + var definitionMagicAffinity = (FeatureDefinitionMagicAffinity)featureDefinition; + + if (definitionMagicAffinity.CounterspellAffinity == AdvantageType.None) + { + continue; + } + + var advTrend = definitionMagicAffinity.CounterspellAffinity == AdvantageType.Advantage + ? 1 + : -1; + + actionModifier.AbilityCheckAdvantageTrends.Add(new TrendInfo( + advTrend, FeatureSourceType.CharacterFeature, definitionMagicAffinity.Name, null)); + } + + if (counteredSpell.CounterAffinity != AdvantageType.None) + { + var advTrend = counteredSpell.CounterAffinity == AdvantageType.Advantage + ? 1 + : -1; + + actionModifier.AbilityCheckAdvantageTrends.Add(new TrendInfo( + advTrend, FeatureSourceType.CharacterFeature, counteredSpell.CounterAffinityOrigin, null)); + } + + var proficiencyName = string.Empty; + + if (counterForm.AddProficiencyBonus) + { + proficiencyName = "ForcedProficiency"; + } + + var abilityCheckRoll = actingCharacter.RollAbilityCheck( + actionCastSpell.activeSpell.SpellRepertoire.SpellCastingAbility, + proficiencyName, + checkDC, + AdvantageType.None, + actionModifier, + false, + 0, + out var outcome, + out var successDelta, + true); + + var abilityCheckData = new AbilityCheckData + { + AbilityCheckRoll = abilityCheckRoll, + AbilityCheckRollOutcome = outcome, + AbilityCheckSuccessDelta = successDelta, + AbilityCheckActionModifier = actionModifier + }; + + var battleManager = ServiceRepository.GetService(); + + yield return battleManager + .HandleFailedAbilityCheck(actionCastSpell, actingCharacter, actionModifier); + + actionCastSpell.AbilityCheckRoll = abilityCheckData.AbilityCheckRoll; + actionCastSpell.AbilityCheckRollOutcome = abilityCheckData.AbilityCheckRollOutcome; + actionCastSpell.AbilityCheckSuccessDelta = abilityCheckData.AbilityCheckSuccessDelta; + + if (counterAction.AbilityCheckRollOutcome == RollOutcome.Success) + { + actionCastSpell.ActionParams.TargetAction.Countered = true; + } + } + + if (!actionParams.TargetAction.Countered || + rulesetCharacter.SpellCounter == null) + { + continue; + } + + var unknown = string.IsNullOrEmpty(counteredSpell.IdentifiedBy); + + actionCastSpell.ActingCharacter.RulesetCharacter.SpellCounter( + rulesetCharacter, + actionCastSpell.ActionParams.TargetAction.ActingCharacter.RulesetCharacter, + counteredSpellDefinition, + actionCastSpell.ActionParams.TargetAction.Countered, + unknown); + } + } + } } diff --git a/SolastaUnfinishedBusiness/Patches/CharacterActionMoveStepClimbPatcher.cs b/SolastaUnfinishedBusiness/Patches/CharacterActionMoveStepClimbPatcher.cs new file mode 100644 index 0000000000..3cc978acfe --- /dev/null +++ b/SolastaUnfinishedBusiness/Patches/CharacterActionMoveStepClimbPatcher.cs @@ -0,0 +1,316 @@ +using System; +using System.Collections; +using System.Diagnostics.CodeAnalysis; +using System.Linq; +using HarmonyLib; +using JetBrains.Annotations; +using SolastaUnfinishedBusiness.Interfaces; +using UnityEngine; +using Coroutine = TA.Coroutine; + +namespace SolastaUnfinishedBusiness.Patches; + +[UsedImplicitly] +public static class CharacterActionMoveStepClimbPatcher +{ + //PATCH: allow check reactions on climb checks regardless of success / failure + [HarmonyPatch(typeof(CharacterActionMoveStepClimb), nameof(CharacterActionMoveStepClimb.ExecuteImpl))] + [SuppressMessage("Minor Code Smell", "S101:Types should be named in PascalCase", Justification = "Patch")] + [UsedImplicitly] + public static class ExecuteImpl_Patch + { + [UsedImplicitly] + public static bool Prefix(ref IEnumerator __result, CharacterActionMoveStepClimb __instance) + { + __result = Process(__instance); + + return false; + } + + private static IEnumerator Process(CharacterActionMoveStepClimb action) + { + var actingCharacter = action.ActingCharacter; + var actionModifier = action.ActionParams.ActionModifiers[0]; + var battleService = ServiceRepository.GetService(); + var positioningService = ServiceRepository.GetService(); + var actionService = ServiceRepository.GetService(); + + yield return CharacterActionStandUp.StandUp(actingCharacter, true); + + var moveCost = 0; + + if (action.ActionId == ActionDefinitions.Id.TacticalMove) + { + moveCost += action.MovePath.Sum(pathStep => pathStep.moveCost); + } + + if (moveCost == 0 && action.dc > 0) + { + moveCost = CharacterActionMoveStepClimb.ComputeClimbingCost( + actingCharacter, action.startPosition, action.landingPosition); + } + + yield return action.WaitForCanMove(action.landingPosition, actingCharacter.Orientation, moveCost); + + if (action.CanMove) + { + if (actingCharacter.LocationPosition == action.startPosition) + { + var fastClimber = false; + var flag = actingCharacter.CanMoveInSituation(RulesetCharacter.MotionRange.ExpertClimber); + + // ReSharper disable once ForeachCanBePartlyConvertedToQueryUsingAnotherGetEnumerator + foreach (var movementModifier in action.ActionParams.ActingCharacter.RulesetCharacter + .GetMovementModifiers()) + { + if ((movementModifier as IMovementAffinityProvider).FastClimber) + { + fastClimber = true; + } + } + + var num1 = action.dc > 0 ? 1 : 0; + var failed = false; + var criticalFail = false; + var offset = action.landingPosition - action.startPosition; + var num2 = Mathf.Abs(offset.y); + + if (num1 != 0 && + !flag && + num2 > 1 && + !action.easyClimb && + !actingCharacter.RulesetCharacter.MoveModes.ContainsKey(1)) + { + const RuleDefinitions.AdvantageType BASE_AFFINITY = RuleDefinitions.AdvantageType.None; + + var abilityCheckRoll = actingCharacter.RollAbilityCheck( + AttributeDefinitions.Strength, + SkillDefinitions.Athletics, + action.dc, + BASE_AFFINITY, + actionModifier, + false, + -1, + out var outcome, + out var successDelta, + true); + + var abilityCheckData = new AbilityCheckData + { + AbilityCheckRoll = abilityCheckRoll, + AbilityCheckRollOutcome = outcome, + AbilityCheckSuccessDelta = successDelta, + AbilityCheckActionModifier = actionModifier + }; + + var battleManager = ServiceRepository.GetService(); + + yield return battleManager + .HandleFailedAbilityCheck(action, actingCharacter, actionModifier); + + action.AbilityCheckRoll = abilityCheckData.AbilityCheckRoll; + action.AbilityCheckRollOutcome = abilityCheckData.AbilityCheckRollOutcome; + action.AbilityCheckSuccessDelta = abilityCheckData.AbilityCheckSuccessDelta; + + if (action.AbilityCheckRollOutcome == RuleDefinitions.RollOutcome.Failure) + { + failed = true; + criticalFail = outcome == RuleDefinitions.RollOutcome.CriticalFailure; + } + } + + var climbingDirection = action.landingPosition.y > action.startPosition.y ? 1f : -1f; + var failAltitude = 0; + var orientation = offset.x != 0 || offset.z != 0 + ? climbingDirection <= 0.0 + ? positioningService.GetLocationOrientationFromTo( + action.landingPosition, action.startPosition) + : positioningService.GetLocationOrientationFromTo( + action.startPosition, action.landingPosition) + : actingCharacter.Orientation; + var canMove = true; + + actingCharacter.TurnTowards(orientation); + + yield return actingCharacter.EventSystem.UpdateMotionsAndWaitForEvent( + GameLocationCharacterEventSystem.Event.RotationEnd); + + if (action.ActionId == ActionDefinitions.Id.TacticalMove) + { + yield return battleService.HandleCharacterMoveStart( + actingCharacter, action.landingPosition); + } + + if (!actingCharacter.CanContinueMoving(action.ActionId)) + { + action.MovePath.Clear(); + action.Abort(CharacterAction.InterruptionType.Failed); + } + else + { + if (failed) + { + var num3 = climbingDirection > 0.0 + ? action.landingPosition.y - 1 + : action.startPosition.y - 1; + var min = climbingDirection > 0.0 + ? action.startPosition.y + 1 + : action.landingPosition.y + 1; + failAltitude = min != num3 + ? criticalFail ? num3 : RandomExtensions.RangeInclusive(min, num3 - 1, true) + : num3; + } + + var climbPosition = climbingDirection <= 0.0 ? action.landingPosition : action.startPosition; + + actingCharacter.Climbing = true; + + if (action.abortASAP && battleService.IsBattleInProgress) + { + action.abortASAP = false; + } + + var y = action.startPosition.y + (int)climbingDirection; + while (Math.Abs(y - (action.landingPosition.y + (double)climbingDirection)) > 0 && + !action.abortASAP) + { + var time = 0.0f; + + climbPosition.y = y; + + for (canMove = positioningService.CanPlaceCharacter( + actingCharacter, climbPosition, CellHelpers.PlacementMode.OnTheMove); + !canMove && time < 2.0; + canMove = positioningService.CanPlaceCharacter(actingCharacter, climbPosition, + CellHelpers.PlacementMode.OnTheMove)) + { + actingCharacter.StopMoving(orientation); + + yield return Coroutine.WaitForSeconds(0.2f); + + time += 0.2f; + } + + if (canMove) + { + var lastMove = y == action.landingPosition.y; + + if (lastMove) + { + climbPosition = action.landingPosition; + } + + actingCharacter.StartClimbTo( + climbPosition, orientation, climbingDirection, lastMove, fastClimber); + + yield return actingCharacter.EventSystem.UpdateMotionsAndWaitForEvent( + GameLocationCharacterEventSystem.Event.MovementStepEnd); + + if (failed && y == failAltitude) + { + if (battleService.HasBattleStarted) + { + actingCharacter.UsedTacticalMoves += moveCost; + } + + action.Abort(CharacterAction.InterruptionType.Failed); + actingCharacter.Climbing = false; + actingCharacter.FinishMoveTo(climbPosition, orientation); + + yield break; + } + + actingCharacter.FinishMoveTo(climbPosition, orientation); + y += climbingDirection > 0.0 ? 1 : -1; + + if (action.abortASAP && battleService.IsBattleInProgress) + { + action.abortASAP = false; + } + + if (action.abortASAP && + !actingCharacter.RulesetCharacter.IsDeadOrDyingOrUnconscious && + GameLocationCharacter.IsValidCharacter(actingCharacter)) + { + var wait = true; + var timeout = 1f; + while (wait) + { + if (actionService.CanMovementQueuedActionProceed(actingCharacter, + PathfindingNode.InformationFlag.Climbing, out var result)) + { + wait = false; + + if (result) + { + continue; + } + + actionService.CancelMovementWarmUp(actingCharacter); + action.abortASAP = false; + } + else + { + yield return Coroutine.WaitForSeconds(0.1f); + timeout -= 0.1f; + + if (timeout > 0) + { + continue; + } + + actionService.CancelMovementWarmUp(actingCharacter); + wait = false; + action.abortASAP = false; + } + } + } + + if (action.abortASAP && battleService.IsBattleInProgress) + { + action.abortASAP = false; + } + } + else + { + break; + } + } + + if (canMove && !failed && action.landingPosition == actingCharacter.LocationPosition) + { + action.abortASAP = false; + + if (battleService.HasBattleStarted) + { + actingCharacter.UsedTacticalMoves += moveCost; + } + + actingCharacter.SignalClimbFinished( + action.startPosition, action.landingPosition, action.easyClimb); + actingCharacter.FinishMoveTo(action.landingPosition, orientation); + } + + if (action.ActionId == ActionDefinitions.Id.TacticalMove) + { + yield return battleService.HandleCharacterMoveEnd(actingCharacter); + } + } + } + } + else + { + action.MovePath.Clear(); + action.Abort(CharacterAction.InterruptionType.Failed); + } + + if (!action.abortASAP) + { + actingCharacter.Climbing = false; + actingCharacter.CheckCharacterFooting(false); + } + + action.CheckAndProcessMovementFinished(); + } + } +} diff --git a/SolastaUnfinishedBusiness/Patches/CharacterActionMoveStepJumpPatcher.cs b/SolastaUnfinishedBusiness/Patches/CharacterActionMoveStepJumpPatcher.cs new file mode 100644 index 0000000000..33519d20b0 --- /dev/null +++ b/SolastaUnfinishedBusiness/Patches/CharacterActionMoveStepJumpPatcher.cs @@ -0,0 +1,109 @@ +using System.Collections; +using System.Diagnostics.CodeAnalysis; +using HarmonyLib; +using JetBrains.Annotations; +using SolastaUnfinishedBusiness.Interfaces; + +namespace SolastaUnfinishedBusiness.Patches; + +[UsedImplicitly] +public static class CharacterActionMoveStepJumpPatcher +{ + //PATCH: allow check reactions on jump checks regardless of success / failure + [HarmonyPatch(typeof(CharacterActionMoveStepJump), nameof(CharacterActionMoveStepJump.RollChecksIfNecessary))] + [SuppressMessage("Minor Code Smell", "S101:Types should be named in PascalCase", Justification = "Patch")] + [UsedImplicitly] + public static class RollChecksIfNecessary_Patch + { + [UsedImplicitly] + public static bool Prefix(ref IEnumerator __result, CharacterActionMoveStepJump __instance) + { + __result = Process(__instance); + + return false; + } + + private static IEnumerator Process(CharacterActionMoveStepJump action) + { + var actingCharacter = action.ActingCharacter; + var actionModifier = action.ActionParams.ActionModifiers[0]; + + if (CharacterActionMoveStepJump.NeedsAcrobaticsCheck(action.landingPosition)) + { + const int CHECK_DC = 10; + const RuleDefinitions.AdvantageType BASE_AFFINITY = RuleDefinitions.AdvantageType.None; + + var abilityCheckRoll = actingCharacter.RollAbilityCheck( + AttributeDefinitions.Dexterity, + SkillDefinitions.Acrobatics, + CHECK_DC, + BASE_AFFINITY, + actionModifier, + false, + -1, + out var outcome, + out var successDelta, + true); + + var abilityCheckData = new AbilityCheckData + { + AbilityCheckRoll = abilityCheckRoll, + AbilityCheckRollOutcome = outcome, + AbilityCheckSuccessDelta = successDelta, + AbilityCheckActionModifier = actionModifier + }; + + var battleManager = ServiceRepository.GetService(); + + yield return battleManager + .HandleFailedAbilityCheck(action, actingCharacter, actionModifier); + + action.AbilityCheckRoll = abilityCheckData.AbilityCheckRoll; + action.AbilityCheckRollOutcome = abilityCheckData.AbilityCheckRollOutcome; + action.AbilityCheckSuccessDelta = abilityCheckData.AbilityCheckSuccessDelta; + } + + if (action.AbilityCheckRollOutcome != RuleDefinitions.RollOutcome.Failure && + CharacterActionMoveStepJump.NeedsAthleticsCheck(action.ActingCharacter, action.jumpPosition, + action.landingPosition)) + { + const int CHECK_DC = 15; + const RuleDefinitions.AdvantageType BASE_AFFINITY = RuleDefinitions.AdvantageType.None; + + var abilityCheckRoll = action.ActingCharacter.RollAbilityCheck( + AttributeDefinitions.Strength, + SkillDefinitions.Athletics, + CHECK_DC, + BASE_AFFINITY, + action.ActionParams.ActionModifiers[0], + false, + -1, + out var outcome, + out var successDelta, + true); + + var abilityCheckData = new AbilityCheckData + { + AbilityCheckRoll = abilityCheckRoll, + AbilityCheckRollOutcome = outcome, + AbilityCheckSuccessDelta = successDelta, + AbilityCheckActionModifier = actionModifier + }; + + var battleManager = ServiceRepository.GetService(); + + yield return battleManager + .HandleFailedAbilityCheck(action, actingCharacter, actionModifier); + + action.AbilityCheckRoll = abilityCheckData.AbilityCheckRoll; + action.AbilityCheckRollOutcome = abilityCheckData.AbilityCheckRollOutcome; + action.AbilityCheckSuccessDelta = abilityCheckData.AbilityCheckSuccessDelta; + } + else if (CharacterActionMoveStepJump.AutomaticPenalty( + action.ActingCharacter, action.jumpPosition, action.landingPosition)) + { + action.AbilityCheckRollOutcome = RuleDefinitions.RollOutcome.Failure; + } + } + } +} diff --git a/SolastaUnfinishedBusiness/Patches/CharacterActionUsePowerPatcher.cs b/SolastaUnfinishedBusiness/Patches/CharacterActionUsePowerPatcher.cs index aa0d42f9a2..ab78cd7526 100644 --- a/SolastaUnfinishedBusiness/Patches/CharacterActionUsePowerPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/CharacterActionUsePowerPatcher.cs @@ -1,10 +1,12 @@ -using System.Diagnostics.CodeAnalysis; +using System.Collections; +using System.Diagnostics.CodeAnalysis; using System.Linq; using HarmonyLib; using JetBrains.Annotations; using SolastaUnfinishedBusiness.Api.GameExtensions; using SolastaUnfinishedBusiness.Behaviors; using SolastaUnfinishedBusiness.Interfaces; +using static RuleDefinitions; namespace SolastaUnfinishedBusiness.Patches; @@ -129,4 +131,156 @@ private static void CalculateExtraChargeUsage( .ItemUsed?.Invoke(usableDevice.ItemDefinition.Name); } } + + //PATCH: allow check reactions on cast spell regardless of success / failure + [HarmonyPatch(typeof(CharacterActionUsePower), nameof(CharacterActionUsePower.CounterEffectAction))] + [SuppressMessage("Minor Code Smell", "S101:Types should be named in PascalCase", Justification = "Patch")] + [UsedImplicitly] + public static class CounterEffectAction_Patch + { + [UsedImplicitly] + public static bool Prefix( + ref IEnumerator __result, CharacterActionUsePower __instance, CharacterAction counterAction) + { + __result = Process(__instance, counterAction); + + return false; + } + + private static IEnumerator Process(CharacterActionUsePower actionUsePower, CharacterAction counterAction) + { + if (actionUsePower.ActionParams.TargetAction == null) + { + yield break; + } + + var actingCharacter = actionUsePower.ActingCharacter; + var rulesetCharacter = actingCharacter.RulesetCharacter; + var actionParams = actionUsePower.ActionParams.TargetAction.ActionParams; + var actionModifier = actionParams.ActionModifiers[0]; + + foreach (var effectForm in actionParams.RulesetEffect.EffectDescription.EffectForms) + { + if (effectForm.FormType != EffectForm.EffectFormType.Counter) + { + continue; + } + + var counterForm = effectForm.CounterForm; + var counteredSpell = actionParams.TargetAction.ActionParams.RulesetEffect as RulesetEffectSpell; + var counteredSpellDefinition = counteredSpell!.SpellDefinition; + var slotLevel = counteredSpell.SlotLevel; + + if (counterForm.AutomaticSpellLevel >= slotLevel) + { + actionUsePower.ActionParams.TargetAction.Countered = true; + } + else if (counterForm.CheckBaseDC != 0) + { + var checkDC = counterForm.CheckBaseDC + slotLevel; + + rulesetCharacter + .EnumerateFeaturesToBrowse(rulesetCharacter.FeaturesToBrowse); + + foreach (var featureDefinition in rulesetCharacter.FeaturesToBrowse) + { + var definitionMagicAffinity = (FeatureDefinitionMagicAffinity)featureDefinition; + + if (definitionMagicAffinity.CounterspellAffinity == AdvantageType.None) + { + continue; + } + + var advTrend = definitionMagicAffinity.CounterspellAffinity == AdvantageType.Advantage + ? 1 + : -1; + + actionModifier.AbilityCheckAdvantageTrends.Add(new TrendInfo( + advTrend, FeatureSourceType.CharacterFeature, definitionMagicAffinity.Name, null)); + } + + if (counteredSpell.CounterAffinity != AdvantageType.None) + { + var advTrend = counteredSpell.CounterAffinity == AdvantageType.Advantage + ? 1 + : -1; + + actionModifier.AbilityCheckAdvantageTrends + .Add(new TrendInfo(advTrend, + FeatureSourceType.CharacterFeature, + counteredSpell.CounterAffinityOrigin, null)); + } + + var abilityScoreName = AttributeDefinitions.Charisma; + + foreach (var spellRepertoire in rulesetCharacter.SpellRepertoires + .Where(repertoire => + repertoire.SpellCastingFeature.SpellCastingOrigin + is FeatureDefinitionCastSpell.CastingOrigin.Class + or FeatureDefinitionCastSpell.CastingOrigin.Subclass)) + { + abilityScoreName = spellRepertoire.SpellCastingFeature.SpellcastingAbility; + + break; + } + + var proficiencyName = string.Empty; + + if (counterForm.AddProficiencyBonus) + { + proficiencyName = "ForcedProficiency"; + } + + var abilityCheckRoll = actingCharacter.RollAbilityCheck( + abilityScoreName, + proficiencyName, + checkDC, + AdvantageType.None, + actionModifier, + false, + 0, + out var outcome, + out var successDelta, + true); + + var abilityCheckData = new AbilityCheckData + { + AbilityCheckRoll = abilityCheckRoll, + AbilityCheckRollOutcome = outcome, + AbilityCheckSuccessDelta = successDelta, + AbilityCheckActionModifier = actionModifier + }; + + var battleManager = ServiceRepository.GetService(); + + yield return battleManager + .HandleFailedAbilityCheck(actionUsePower, actingCharacter, actionModifier); + + actionUsePower.AbilityCheckRoll = abilityCheckData.AbilityCheckRoll; + actionUsePower.AbilityCheckRollOutcome = abilityCheckData.AbilityCheckRollOutcome; + actionUsePower.AbilityCheckSuccessDelta = abilityCheckData.AbilityCheckSuccessDelta; + + if (counterAction.AbilityCheckRollOutcome == RollOutcome.Success) + { + actionUsePower.ActionParams.TargetAction.Countered = true; + } + } + + if (!actionParams.TargetAction.Countered || + rulesetCharacter.SpellCounter == null) + { + continue; + } + + var unknown = string.IsNullOrEmpty(counteredSpell.IdentifiedBy); + + rulesetCharacter.SpellCounter( + rulesetCharacter, + actionUsePower.ActionParams.TargetAction.ActingCharacter.RulesetCharacter, + counteredSpellDefinition, + actionUsePower.ActionParams.TargetAction.Countered, + unknown); + } + } + } } diff --git a/SolastaUnfinishedBusiness/Subclasses/Builders/EldritchVersatility.cs b/SolastaUnfinishedBusiness/Subclasses/Builders/EldritchVersatility.cs index c4036d1998..d92f3a2bad 100644 --- a/SolastaUnfinishedBusiness/Subclasses/Builders/EldritchVersatility.cs +++ b/SolastaUnfinishedBusiness/Subclasses/Builders/EldritchVersatility.cs @@ -877,8 +877,9 @@ public IEnumerator OnSpellCasted( AbilityCheckActionModifier = checkModifier }; - yield return TryAlterOutcomeAttributeCheck - .HandleITryAlterOutcomeAttributeCheck(castAction.ActingCharacter, abilityCheckData); + var battleManager = ServiceRepository.GetService(); + + yield return battleManager.HandleFailedAbilityCheck(castAction, glc, checkModifier); castAction.AbilityCheckRoll = abilityCheckData.AbilityCheckRoll; castAction.AbilityCheckRollOutcome = abilityCheckData.AbilityCheckRollOutcome; @@ -952,8 +953,9 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, AbilityCheckActionModifier = checkModifier }; - yield return TryAlterOutcomeAttributeCheck - .HandleITryAlterOutcomeAttributeCheck(action.ActingCharacter, abilityCheckData); + var battleManager = ServiceRepository.GetService(); + + yield return battleManager.HandleFailedAbilityCheck(action, gameLocationCharacter, checkModifier); action.AbilityCheckRoll = abilityCheckData.AbilityCheckRoll; action.AbilityCheckRollOutcome = abilityCheckData.AbilityCheckRollOutcome; From 83cc9897d06cc69812d60c39a999f49b0f1e3f61 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Mon, 2 Sep 2024 11:19:08 -0700 Subject: [PATCH 012/212] remove hasBorrowedLuck from ITryAlterOutcomeSavingThrow interface --- SolastaUnfinishedBusiness/Classes/InventorClass.cs | 3 +-- SolastaUnfinishedBusiness/Feats/OtherFeats.cs | 6 ++---- SolastaUnfinishedBusiness/Feats/RaceFeats.cs | 3 +-- .../Interfaces/ITryAlterOutcomeSavingThrow.cs | 10 ++++------ SolastaUnfinishedBusiness/Races/Imp.cs | 3 +-- .../Subclasses/Builders/EldritchVersatility.cs | 3 +-- .../Subclasses/CircleOfTheCosmos.cs | 6 ++---- .../Subclasses/MartialRoyalKnight.cs | 3 +-- .../Subclasses/RangerFeyWanderer.cs | 3 +-- .../Subclasses/RoguishOpportunist.cs | 3 +-- .../Subclasses/SorcerousWildMagic.cs | 6 ++---- SolastaUnfinishedBusiness/Subclasses/WizardWarMagic.cs | 3 +-- 12 files changed, 18 insertions(+), 34 deletions(-) diff --git a/SolastaUnfinishedBusiness/Classes/InventorClass.cs b/SolastaUnfinishedBusiness/Classes/InventorClass.cs index 107a254d58..1aa5e0c360 100644 --- a/SolastaUnfinishedBusiness/Classes/InventorClass.cs +++ b/SolastaUnfinishedBusiness/Classes/InventorClass.cs @@ -1051,8 +1051,7 @@ public IEnumerator OnTryAlterOutcomeSavingThrow( GameLocationCharacter defender, GameLocationCharacter helper, SavingThrowData savingThrowData, - bool hasHitVisual, - bool hasBorrowedLuck) + bool hasHitVisual) { var rulesetDefender = defender.RulesetActor; diff --git a/SolastaUnfinishedBusiness/Feats/OtherFeats.cs b/SolastaUnfinishedBusiness/Feats/OtherFeats.cs index e27bdddaa8..df04e28881 100644 --- a/SolastaUnfinishedBusiness/Feats/OtherFeats.cs +++ b/SolastaUnfinishedBusiness/Feats/OtherFeats.cs @@ -2128,8 +2128,7 @@ public IEnumerator OnTryAlterOutcomeSavingThrow( GameLocationCharacter defender, GameLocationCharacter helper, SavingThrowData savingThrowData, - bool hasHitVisual, - bool hasBorrowedLuck) + bool hasHitVisual) { var rulesetHelper = helper.RulesetCharacter; var usablePower = PowerProvider.Get(powerLucky, rulesetHelper); @@ -2305,8 +2304,7 @@ public IEnumerator OnTryAlterOutcomeSavingThrow( GameLocationCharacter defender, GameLocationCharacter helper, SavingThrowData savingThrowData, - bool hasHitVisual, - bool hasBorrowedLuck) + bool hasHitVisual) { var rulesetHelper = helper.RulesetCharacter; var usablePower = PowerProvider.Get(PowerMageSlayerSaving, rulesetHelper); diff --git a/SolastaUnfinishedBusiness/Feats/RaceFeats.cs b/SolastaUnfinishedBusiness/Feats/RaceFeats.cs index db27c41662..971e12382c 100644 --- a/SolastaUnfinishedBusiness/Feats/RaceFeats.cs +++ b/SolastaUnfinishedBusiness/Feats/RaceFeats.cs @@ -794,8 +794,7 @@ public IEnumerator OnTryAlterOutcomeSavingThrow( GameLocationCharacter defender, GameLocationCharacter helper, SavingThrowData savingThrowData, - bool hasHitVisual, - bool hasBorrowedLuck) + bool hasHitVisual) { if (savingThrowData.SaveOutcome != RollOutcome.Failure || helper == defender || diff --git a/SolastaUnfinishedBusiness/Interfaces/ITryAlterOutcomeSavingThrow.cs b/SolastaUnfinishedBusiness/Interfaces/ITryAlterOutcomeSavingThrow.cs index cd426fe0e4..cd3d61b066 100644 --- a/SolastaUnfinishedBusiness/Interfaces/ITryAlterOutcomeSavingThrow.cs +++ b/SolastaUnfinishedBusiness/Interfaces/ITryAlterOutcomeSavingThrow.cs @@ -17,8 +17,7 @@ IEnumerator OnTryAlterOutcomeSavingThrow( GameLocationCharacter defender, GameLocationCharacter helper, SavingThrowData savingThrowData, - bool hasHitVisual, - bool hasBorrowedLuck); + bool hasHitVisual); } public sealed class SavingThrowData @@ -54,7 +53,7 @@ internal static IEnumerator Handler( //PATCH: support for `ITryAlterOutcomeSavingThrow` foreach (var tryAlterOutcomeSavingThrow in TryAlterOutcomeSavingThrowHandler( - battleManager, attacker, defender, savingThrowData, false, hasBorrowedLuck)) + battleManager, attacker, defender, savingThrowData, false)) { yield return tryAlterOutcomeSavingThrow; @@ -75,8 +74,7 @@ private static IEnumerable TryAlterOutcomeSavingThrowHandler( GameLocationCharacter attacker, GameLocationCharacter defender, SavingThrowData savingThrowData, - bool hasHitVisual, - bool hasBorrowedLuck) + bool hasHitVisual) { var locationCharacterService = ServiceRepository.GetService(); var contenders = @@ -91,7 +89,7 @@ private static IEnumerable TryAlterOutcomeSavingThrowHandler( .GetSubFeaturesByType()) { yield return feature.OnTryAlterOutcomeSavingThrow( - battleManager, attacker, defender, unit, savingThrowData, hasHitVisual, hasBorrowedLuck); + battleManager, attacker, defender, unit, savingThrowData, hasHitVisual); } } } diff --git a/SolastaUnfinishedBusiness/Races/Imp.cs b/SolastaUnfinishedBusiness/Races/Imp.cs index 8ef1eff230..21d80194a1 100644 --- a/SolastaUnfinishedBusiness/Races/Imp.cs +++ b/SolastaUnfinishedBusiness/Races/Imp.cs @@ -631,8 +631,7 @@ public IEnumerator OnTryAlterOutcomeSavingThrow( GameLocationCharacter defender, GameLocationCharacter helper, SavingThrowData savingThrowData, - bool hasHitVisual, - bool hasBorrowedLuck) + bool hasHitVisual) { var rulesetHelper = helper.RulesetCharacter; var usablePower = PowerProvider.Get(powerImpBadlandDrawInspiration, rulesetHelper); diff --git a/SolastaUnfinishedBusiness/Subclasses/Builders/EldritchVersatility.cs b/SolastaUnfinishedBusiness/Subclasses/Builders/EldritchVersatility.cs index d92f3a2bad..7bd0bfdb36 100644 --- a/SolastaUnfinishedBusiness/Subclasses/Builders/EldritchVersatility.cs +++ b/SolastaUnfinishedBusiness/Subclasses/Builders/EldritchVersatility.cs @@ -1246,8 +1246,7 @@ public IEnumerator OnTryAlterOutcomeSavingThrow( GameLocationCharacter defender, GameLocationCharacter helper, SavingThrowData savingThrowData, - bool hasHitVisual, - bool hasBorrowedLuck) + bool hasHitVisual) { if (savingThrowData.SaveOutcome != RollOutcome.Failure || helper.IsOppositeSide(defender.Side)) diff --git a/SolastaUnfinishedBusiness/Subclasses/CircleOfTheCosmos.cs b/SolastaUnfinishedBusiness/Subclasses/CircleOfTheCosmos.cs index 493dbcaf8e..8fa4bb8f09 100644 --- a/SolastaUnfinishedBusiness/Subclasses/CircleOfTheCosmos.cs +++ b/SolastaUnfinishedBusiness/Subclasses/CircleOfTheCosmos.cs @@ -928,8 +928,7 @@ public IEnumerator OnTryAlterOutcomeSavingThrow( GameLocationCharacter defender, GameLocationCharacter helper, SavingThrowData savingThrowData, - bool hasHitVisual, - bool hasBorrowedLuck) + bool hasHitVisual) { var rulesetHelper = helper.RulesetCharacter; var usablePower = PowerProvider.Get(powerPool, rulesetHelper); @@ -1147,8 +1146,7 @@ public IEnumerator OnTryAlterOutcomeSavingThrow( GameLocationCharacter defender, GameLocationCharacter helper, SavingThrowData savingThrowData, - bool hasHitVisual, - bool hasBorrowedLuck) + bool hasHitVisual) { var rulesetHelper = helper.RulesetCharacter; var usablePower = PowerProvider.Get(powerPool, rulesetHelper); diff --git a/SolastaUnfinishedBusiness/Subclasses/MartialRoyalKnight.cs b/SolastaUnfinishedBusiness/Subclasses/MartialRoyalKnight.cs index 0702f4ec45..02dc3a2156 100644 --- a/SolastaUnfinishedBusiness/Subclasses/MartialRoyalKnight.cs +++ b/SolastaUnfinishedBusiness/Subclasses/MartialRoyalKnight.cs @@ -237,8 +237,7 @@ public IEnumerator OnTryAlterOutcomeSavingThrow( GameLocationCharacter defender, GameLocationCharacter helper, SavingThrowData savingThrowData, - bool hasHitVisual, - bool hasBorrowedLuck) + bool hasHitVisual) { var rulesetDefender = defender.RulesetActor; diff --git a/SolastaUnfinishedBusiness/Subclasses/RangerFeyWanderer.cs b/SolastaUnfinishedBusiness/Subclasses/RangerFeyWanderer.cs index 69edadd394..d04d006d3b 100644 --- a/SolastaUnfinishedBusiness/Subclasses/RangerFeyWanderer.cs +++ b/SolastaUnfinishedBusiness/Subclasses/RangerFeyWanderer.cs @@ -290,8 +290,7 @@ public IEnumerator OnTryAlterOutcomeSavingThrow( GameLocationCharacter defender, GameLocationCharacter helper, SavingThrowData savingThrowData, - bool hasHitVisual, - bool hasBorrowedLuck) + bool hasHitVisual) { if (savingThrowData.SaveOutcome != RollOutcome.Success || !HasCharmedOrFrightened(savingThrowData.EffectDescription.EffectForms) || diff --git a/SolastaUnfinishedBusiness/Subclasses/RoguishOpportunist.cs b/SolastaUnfinishedBusiness/Subclasses/RoguishOpportunist.cs index 2d244c7e3b..28ab5110de 100644 --- a/SolastaUnfinishedBusiness/Subclasses/RoguishOpportunist.cs +++ b/SolastaUnfinishedBusiness/Subclasses/RoguishOpportunist.cs @@ -372,8 +372,7 @@ public IEnumerator OnTryAlterOutcomeSavingThrow( GameLocationCharacter defender, GameLocationCharacter helper, SavingThrowData savingThrowData, - bool hasHitVisual, - bool hasBorrowedLuck) + bool hasHitVisual) { if (savingThrowData.SaveOutcome != RollOutcome.Failure || !helper.IsOppositeSide(defender.Side) || diff --git a/SolastaUnfinishedBusiness/Subclasses/SorcerousWildMagic.cs b/SolastaUnfinishedBusiness/Subclasses/SorcerousWildMagic.cs index 4eda7a420c..8e2f0ca5b4 100644 --- a/SolastaUnfinishedBusiness/Subclasses/SorcerousWildMagic.cs +++ b/SolastaUnfinishedBusiness/Subclasses/SorcerousWildMagic.cs @@ -761,8 +761,7 @@ public IEnumerator OnTryAlterOutcomeSavingThrow( GameLocationCharacter defender, GameLocationCharacter helper, SavingThrowData savingThrowData, - bool hasHitVisual, - bool hasBorrowedLuck) + bool hasHitVisual) { var rulesetHelper = helper.RulesetCharacter; var usablePower = PowerProvider.Get(PowerTidesOfChaos, rulesetHelper); @@ -1046,8 +1045,7 @@ public IEnumerator OnTryAlterOutcomeSavingThrow( GameLocationCharacter defender, GameLocationCharacter helper, SavingThrowData savingThrowData, - bool hasHitVisual, - bool hasBorrowedLuck) + bool hasHitVisual) { var rulesetHelper = helper.RulesetCharacter; var usablePower = PowerProvider.Get(powerBendLuck, rulesetHelper); diff --git a/SolastaUnfinishedBusiness/Subclasses/WizardWarMagic.cs b/SolastaUnfinishedBusiness/Subclasses/WizardWarMagic.cs index 59b9f8647d..b6f3b754ab 100644 --- a/SolastaUnfinishedBusiness/Subclasses/WizardWarMagic.cs +++ b/SolastaUnfinishedBusiness/Subclasses/WizardWarMagic.cs @@ -242,8 +242,7 @@ public IEnumerator OnTryAlterOutcomeSavingThrow( GameLocationCharacter defender, GameLocationCharacter helper, SavingThrowData savingThrowData, - bool hasHitVisual, - bool hasBorrowedLuck) + bool hasHitVisual) { var rulesetHelper = helper.RulesetCharacter; var intelligence = rulesetHelper.TryGetAttributeValue(AttributeDefinitions.Intelligence); From c29b296da45377512732a59b62ec453bc9aa7fab Mon Sep 17 00:00:00 2001 From: Dovel Date: Mon, 2 Sep 2024 21:59:12 +0300 Subject: [PATCH 013/212] update russian translation --- .../Translations/ru/Feats/OtherFeats-ru.txt | 6 +++--- .../Translations/ru/Feats/Races-ru.txt | 2 +- .../Translations/ru/Inventor-ru.txt | 8 ++++---- .../Translations/ru/Races/Imp-ru.txt | 16 ++++++++-------- .../ru/SubClasses/CircleOfTheCosmos-ru.txt | 4 ++-- .../ru/SubClasses/MartialRoyalKnight-ru.txt | 6 +++--- .../ru/SubClasses/SorcerousWildMagic-ru.txt | 18 +++++++++--------- .../ru/SubClasses/WizardWarMagic-ru.txt | 4 ++-- 8 files changed, 32 insertions(+), 32 deletions(-) diff --git a/SolastaUnfinishedBusiness/Translations/ru/Feats/OtherFeats-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Feats/OtherFeats-ru.txt index f89a99fa84..b286208ef4 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Feats/OtherFeats-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Feats/OtherFeats-ru.txt @@ -145,12 +145,12 @@ Reaction/&SpendPowerLuckyEnemyAttackDescription=Противник попал п Reaction/&SpendPowerLuckyEnemyAttackReactDescription=Бросьте d20, чтобы заменить бросок атаки. Reaction/&SpendPowerLuckyEnemyAttackReactTitle=Везунчик Reaction/&SpendPowerLuckyEnemyAttackTitle=Везунчик -Reaction/&SpendPowerLuckySavingDescription=Вы провалили спасбросок против {0}'s {1}. Вы можете отреагировать, бросив d20 и заменив бросок. +Reaction/&SpendPowerLuckySavingDescription=Вы провалили спасбросок против {1} {0}. Вы можете реакцией бросить d20 и заменить спасбросок. Reaction/&SpendPowerLuckySavingReactDescription=Бросьте d20, чтобы заменить спасбросок. Reaction/&SpendPowerLuckySavingReactTitle=Везунчик Reaction/&SpendPowerLuckySavingTitle=Везунчик -Reaction/&SpendPowerMageSlayerDescription=Вы провалили спасбросок против {0}'s {1}. Вы можете отреагировать, чтобы добиться успеха. -Reaction/&SpendPowerMageSlayerReactDescription=Преуспевать. +Reaction/&SpendPowerMageSlayerDescription=Вы провалили спасбросок против {1} {0}. Вы можете реакцией обратить его в успех. +Reaction/&SpendPowerMageSlayerReactDescription=Преуспеть. Reaction/&SpendPowerMageSlayerReactTitle=Убийца магов Reaction/&SpendPowerMageSlayerTitle=Убийца магов Reaction/&SpendPowerReactiveResistanceDescription={0} вот-вот ударит вас! Вы можете использовать свою реакцию, чтобы получить сопротивление стихии {1} до конца этого хода. diff --git a/SolastaUnfinishedBusiness/Translations/ru/Feats/Races-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Feats/Races-ru.txt index d91a59d3c8..c05723307d 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Feats/Races-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Feats/Races-ru.txt @@ -75,7 +75,7 @@ Reaction/&CustomReactionBountifulLuckCheckDescription={0} проваливает Reaction/&CustomReactionBountifulLuckCheckReactDescription=Бросьте d20, чтобы заменить проверку. Reaction/&CustomReactionBountifulLuckCheckReactTitle=Бездонная удача Reaction/&CustomReactionBountifulLuckCheckTitle=Бездонная удача -Reaction/&CustomReactionBountifulLuckSavingDescription={0} провалил спасбросок против {2} {1}. Вы можете отреагировать, бросив d20 и заменив бросок. +Reaction/&CustomReactionBountifulLuckSavingDescription={0} провалил спасбросок против {2} {1}. Вы можете реакцией бросить d20 и заменить бросок. Reaction/&CustomReactionBountifulLuckSavingReactDescription=Бросьте d20, чтобы заменить спасбросок. Reaction/&CustomReactionBountifulLuckSavingReactTitle=Бездонная удача Reaction/&CustomReactionBountifulLuckSavingTitle=Бездонная удача diff --git a/SolastaUnfinishedBusiness/Translations/ru/Inventor-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Inventor-ru.txt index 70dcae1f43..8f43c82ef3 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Inventor-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Inventor-ru.txt @@ -39,10 +39,10 @@ Reaction/&SpendPowerInventorFlashOfGeniusCheckDescription={0} провалива Reaction/&SpendPowerInventorFlashOfGeniusCheckReactDescription=Бросьте d20, чтобы заменить результат проверки. Reaction/&SpendPowerInventorFlashOfGeniusCheckReactTitle=Реакция Reaction/&SpendPowerInventorFlashOfGeniusCheckTitle=Проблеск гениальности -Reaction/&SpendPowerInventorFlashOfGeniusReactDescription=Преуспевать -Reaction/&SpendPowerInventorFlashOfGeniusReactDescriptionAlly={0} провалил спасбросок против {2} {1}. Вы можете отреагировать, чтобы добавить свой модификатор Интеллекта к броску и сделать его успешным. -Reaction/&SpendPowerInventorFlashOfGeniusReactDescriptionSelf={0} провалил спасбросок против {2} {1} и может отреагировать, чтобы добавить свой модификатор Интеллекта к броску и сделать его успешным. -Reaction/&SpendPowerInventorFlashOfGeniusReactTitle=Вспышка гениальности +Reaction/&SpendPowerInventorFlashOfGeniusReactDescription=Преуспеть +Reaction/&SpendPowerInventorFlashOfGeniusReactDescriptionAlly={0} провалил спасбросок против {2} {1}. Вы можете реакцией добавить свой модификатор Интеллекта к броску и превратить его в успешный. +Reaction/&SpendPowerInventorFlashOfGeniusReactDescriptionSelf={0} провалил спасбросок против {2} {1} и может реакцией добавить свой модификатор Интеллекта к броску и превратить его в успешный. +Reaction/&SpendPowerInventorFlashOfGeniusReactTitle=Проблеск гениальности Reaction/&SpendPowerInventorFlashOfGeniusTitle=Проблеск гениальности Reaction/&SpendPowerSoulOfArtificeDescription=Вы восстанавливаете количество хитов, равное вашему уровню Изобретателя, и поднимаетесь. Reaction/&SpendPowerSoulOfArtificeReactDescription=Вы восстанавливаете количество хитов, равное вашему уровню Изобретателя, и поднимаетесь. diff --git a/SolastaUnfinishedBusiness/Translations/ru/Races/Imp-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Races/Imp-ru.txt index 7270e8f9c9..f9c98b19a6 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Races/Imp-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Races/Imp-ru.txt @@ -40,14 +40,14 @@ Race/&RaceImpForestTitle=Лесной бес Race/&RaceImpInfernalDescription=Межпланарные эксперименты, проводившиеся в эпоху Манакалона, привели к тому, что демоны и другие существа проникли на материальный план. И хотя многие из этих существ были в конце концов пойманы или изгнаны, хитрым бесам удалось скрыться, незаметно приспособившись и продолжая жить с тех пор в различных уголках Пустошей. Теперь некоторые из них решили проявить себя и исследовать окружающий мир, даже если его обитатели не очень-то жалуют их демоническую природу. Race/&RaceImpInfernalTitle=Инфернальный бес Race/&RaceImpTitle=Бес -Reaction/&SpendPowerDrawInspirationAttackDescription=Вы собираетесь пропустить атакующий бросок. Вы можете отреагировать, чтобы добавить 3 к атакующему броску. -Reaction/&SpendPowerDrawInspirationAttackReactDescription=Добавьте 3 к броску. -Reaction/&SpendPowerDrawInspirationAttackReactTitle=Черпайте вдохновение -Reaction/&SpendPowerDrawInspirationAttackTitle=Черпайте вдохновение -Reaction/&SpendPowerDrawInspirationSavingDescription=Вы провалили спасбросок против {0}'s {1}. Вы можете отреагировать, чтобы добавить 3 к броску. -Reaction/&SpendPowerDrawInspirationSavingReactDescription=Добавьте 3 к броску. -Reaction/&SpendPowerDrawInspirationSavingReactTitle=Черпайте вдохновение -Reaction/&SpendPowerDrawInspirationSavingTitle=Черпайте вдохновение +Reaction/&SpendPowerDrawInspirationAttackDescription=Вы промахиваетесь атакой. Реакцией вы можете добавить бонус +3 к броску атаки. +Reaction/&SpendPowerDrawInspirationAttackReactDescription=Добавить бонус +3 к броску. +Reaction/&SpendPowerDrawInspirationAttackReactTitle=Вдохновение +Reaction/&SpendPowerDrawInspirationAttackTitle=Вдохновение +Reaction/&SpendPowerDrawInspirationSavingDescription=Вы проваливаете спасбросок против {1} {0}. Реакцией вы можете добавить бонус +3 к броску. +Reaction/&SpendPowerDrawInspirationSavingReactDescription=Добавить бонус +3 к броску. +Reaction/&SpendPowerDrawInspirationSavingReactTitle=Вдохновение +Reaction/&SpendPowerDrawInspirationSavingTitle=Вдохновение Tooltip/&SelectAnAlly=Пожалуйста, выберите союзника. Tooltip/&TargetAlreadyAssisted=С этой целью уже помогают. Tooltip/&TargetOutOfRange=Цель находится за пределами досягаемости. diff --git a/SolastaUnfinishedBusiness/Translations/ru/SubClasses/CircleOfTheCosmos-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/SubClasses/CircleOfTheCosmos-ru.txt index 177db0b2a8..4dfedde338 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/SubClasses/CircleOfTheCosmos-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/SubClasses/CircleOfTheCosmos-ru.txt @@ -40,7 +40,7 @@ Reaction/&SpendPowerWealCosmosOmenCheckDescription={0} проваливает п Reaction/&SpendPowerWealCosmosOmenCheckReactDescription=Бросьте D6, чтобы помочь союзнику с проверкой. Reaction/&SpendPowerWealCosmosOmenCheckReactTitle=Благо Reaction/&SpendPowerWealCosmosOmenCheckTitle=Космическое знамение: Благо -Reaction/&SpendPowerWealCosmosOmenSavingDescription={0} провалил спасбросок против {2} {1}. Вы можете отреагировать, бросив D6 и добавив результат к броску. +Reaction/&SpendPowerWealCosmosOmenSavingDescription={0} провалил спасбросок против {2} {1}. Вы можете реакцией совершить бросок D6 и добавть результат к спасброску. Reaction/&SpendPowerWealCosmosOmenSavingReactDescription=Бросьте D6, чтобы помочь союзнику в спасброске. Reaction/&SpendPowerWealCosmosOmenSavingReactTitle=Благо Reaction/&SpendPowerWealCosmosOmenSavingTitle=Космическое знамение: Благо @@ -52,7 +52,7 @@ Reaction/&SpendPowerWoeCosmosOmenCheckDescription={0} проходит пров Reaction/&SpendPowerWoeCosmosOmenCheckReactDescription=Бросьте D6, чтобы отвлечь противника от броска проверки. Reaction/&SpendPowerWoeCosmosOmenCheckReactTitle=Горе Reaction/&SpendPowerWoeCosmosOmenCheckTitle=Космическое знамение: Горе -Reaction/&SpendPowerWoeCosmosOmenSavingDescription={0} успешно пройти спасительный бросок против {2} {1}. Вы можете отреагировать, бросив D6, и вычесть результат из броска. +Reaction/&SpendPowerWoeCosmosOmenSavingDescription={0} проходит спасбросок против {2} {1}. Вы можете реакцией совершить бросок D6 и вычесть результат из спасброска. Reaction/&SpendPowerWoeCosmosOmenSavingReactDescription=Бросьте D6, чтобы отвлечь врага от спасброска. Reaction/&SpendPowerWoeCosmosOmenSavingReactTitle=Горе Reaction/&SpendPowerWoeCosmosOmenSavingTitle=Космическое знамение: Горе diff --git a/SolastaUnfinishedBusiness/Translations/ru/SubClasses/MartialRoyalKnight-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/SubClasses/MartialRoyalKnight-ru.txt index 3958944016..714235f54d 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/SubClasses/MartialRoyalKnight-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/SubClasses/MartialRoyalKnight-ru.txt @@ -8,9 +8,9 @@ Feature/&PowerRoyalKnightRallyingCryDescription=Начиная с 3-го уро Feature/&PowerRoyalKnightRallyingCryTitle=Объединяющий клич Feature/&PowerRoyalKnightSpiritedSurgeDescription=Начиная с 18-го уровня, ваш Вдохновляющий всплеск также даёт преимущество на все атаки, спасброски и проверки навыков на 1 раунд. Feature/&PowerRoyalKnightSpiritedSurgeTitle=Энергичный всплеск -Reaction/&SpendPowerRoyalKnightInspiringProtectionDescriptionAlly={0} провалил спасбросок против {2} {1}. Вы можете отреагировать, чтобы перебросить спасбросок. -Reaction/&SpendPowerRoyalKnightInspiringProtectionDescriptionSelf={0} провалил спасбросок против {2} {1} и может отреагировать, чтобы перебросить спасбросок. -Reaction/&SpendPowerRoyalKnightInspiringProtectionReactDescription=Перезапустите сохранение. +Reaction/&SpendPowerRoyalKnightInspiringProtectionDescriptionAlly={0} провалил спасбросок против {2} {1}. Вы можете реакцией повторно совершить спасбросок. +Reaction/&SpendPowerRoyalKnightInspiringProtectionDescriptionSelf={0} провалил спасбросок против {2} {1} и может реакцией повторно совершить спасбросок. +Reaction/&SpendPowerRoyalKnightInspiringProtectionReactDescription=Повторить спасбросок. Reaction/&SpendPowerRoyalKnightInspiringProtectionReactTitle=Вдохновляющая защита Reaction/&SpendPowerRoyalKnightInspiringProtectionTitle=Вдохновляющая защита Subclass/&MartialRoyalKnightDescription=Рыцарь, который пробуждает величие в других, совершая храбрые боевые подвиги. Рыцарь пурпурного дракона - искусный воин, но возглавив группу союзников, он может превратить даже самое плохо оснащенное ополчение в свирепую боевую дружину. diff --git a/SolastaUnfinishedBusiness/Translations/ru/SubClasses/SorcerousWildMagic-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/SubClasses/SorcerousWildMagic-ru.txt index 727359eaa5..aa117adc1a 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/SubClasses/SorcerousWildMagic-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/SubClasses/SorcerousWildMagic-ru.txt @@ -48,7 +48,7 @@ Feature/&PowerSorcerousWildMagicD19Description=До трёх существ на Feature/&PowerSorcerousWildMagicD19Title=Удар молнии Feature/&PowerSorcerousWildMagicD20Description=Вы восстанавливаете все потраченные единицы чародейства. Feature/&PowerSorcerousWildMagicD20Title=Пополнение чародейства -Feature/&PowerSorcerousWildMagicTidesOfChaosDescription=Вы можете манипулировать силами случайности и хаоса, чтобы перебросить с преимуществом проваленный бросок атаки, проверку атрибута или спасбросок. Вы можете использовать эту возможность один раз за длительный отдых. Вы также можете один раз во время своего хода в качестве свободного действия сделать бросок по таблице Wild Magic Surge и восстановить одно ее использование. +Feature/&PowerSorcerousWildMagicTidesOfChaosDescription=Вы можете манипулировать силами случая и хаоса, чтобы совершать с преимуществом повторные броски атаки, проверки характеристик или спасброски всякий раз, когда ваша первая попытка терпит неудачу. Сделав это, вы должны совершить продолжительный отдых, прежде чем вы сможете использовать это умение ещё раз. Вы также можете один раз в свой ход свободным действием совершить бросок по таблице Волны дикой магии и восстановить таким образом одно использование данного умения. Feature/&PowerSorcerousWildMagicTidesOfChaosTitle=Поток хаоса Feature/&PowerSorcerousWildMagicWildMagicSurgeDescription=Ваше колдовство может вызвать волны дикой магии. Сразу после накладывания вами заклинания чародея как минимум 1-го уровня вы бросаете кость d20. Если результат броска меньше или равен {0}, бросьте кость по таблице Волна дикой магии для создания случайного магического эффекта. Волна может возникать только один раз за ход. Если эффект волны является заклинанием, он слишком непредсказуем, чтобы его можно было модифицировать метамагией, он также не требует концентрации. Feature/&PowerSorcerousWildMagicWildMagicSurgeTitle=Волна дикой магии @@ -61,7 +61,7 @@ Feedback/&BendLuckSavingToHitRoll={0} использовал {1} и бросае Feedback/&ControlledChaosDieChoice={0} выбирает {2} на {1} и активирует {3} Feedback/&ControlledChaosDieRoll={0} выбрасывает {2} и {3} на кости {1} Feedback/&RecoverSpellSlotOfLevel={0} восстанавливает одну ячейку заклинания уровня {2} -Feedback/&TidesOfChaosAdvantageCheck={0} использует {1} для броска проверки с преимуществом +Feedback/&TidesOfChaosAdvantageCheck={0} использует {1} для совершения проверки с преимуществом Feedback/&TidesOfChaosAdvantageSavingThrow={0} использует {1} для совершения спасброска с преимуществом Feedback/&TidesOfChaosForcedSurge={1} заставляет {0} автоматически совершить бросок по таблице Волна дикой магии Feedback/&WidSurgeChanceDieRoll={0} выбрасывает {2} на кости вероятности {1} @@ -86,11 +86,11 @@ Reaction/&SpendPowerBendLuckEnemyCheckDescription={0} преуспел в Reaction/&SpendPowerBendLuckEnemyCheckReactDescription=Бросьте d4, чтобы вычесть результат из броска проверки. Reaction/&SpendPowerBendLuckEnemyCheckReactTitle=Подчинение удачи Reaction/&SpendPowerBendLuckEnemyCheckTitle=Подчинение удачи -Reaction/&SpendPowerBendLuckEnemySavingDescription={0} успешно пройти спасительный бросок против {2} {1}. Вы можете отреагировать, бросив d4, и вычесть результат из броска. +Reaction/&SpendPowerBendLuckEnemySavingDescription={0} проходит спасбросок против {2} {1}. Вы можете реакцией совершить бросок d4 и вычесть результат из спасброска. Reaction/&SpendPowerBendLuckEnemySavingReactDescription=Бросьте d4, чтобы вычесть результат из спасброска. Reaction/&SpendPowerBendLuckEnemySavingReactTitle=Подчинение удачи Reaction/&SpendPowerBendLuckEnemySavingTitle=Подчинение удачи -Reaction/&SpendPowerBendLuckSavingDescription={0} провалил спасбросок против {2} {1}. Вы можете отреагировать, бросив d4, и добавить результат к спасброску. +Reaction/&SpendPowerBendLuckSavingDescription={0} провалил спасбросок против {2} {1}. Вы можете реакцией совершить бросок d4 и добавить результат к спасброску. Reaction/&SpendPowerBendLuckSavingReactDescription=Бросьте d4, чтобы добавить результат к спасброску. Reaction/&SpendPowerBendLuckSavingReactTitle=Подчинение удачи Reaction/&SpendPowerBendLuckSavingTitle=Подчинение удачи @@ -98,11 +98,11 @@ Reaction/&SpendPowerTidesOfChaosAttackDescription=Ваша атака прома Reaction/&SpendPowerTidesOfChaosAttackReactDescription=Совершите атаку с преимуществом. Reaction/&SpendPowerTidesOfChaosAttackReactTitle=Поток хаоса Reaction/&SpendPowerTidesOfChaosAttackTitle=Поток хаоса -Reaction/&SpendPowerTidesOfChaosCheckDescription=Вы провалили проверку. Вы можете отреагировать, чтобы перебросить проверку с преимуществом. -Reaction/&SpendPowerTidesOfChaosCheckReactDescription=Проведите проверку с преимуществом. -Reaction/&SpendPowerTidesOfChaosCheckReactTitle=Приливы Хаоса -Reaction/&SpendPowerTidesOfChaosCheckTitle=Приливы Хаоса -Reaction/&SpendPowerTidesOfChaosSaveDescription=Вы провалили спасбросок против {0}'s {1}. Вы можете отреагировать, чтобы перебросить спасбросок с преимуществом. +Reaction/&SpendPowerTidesOfChaosCheckDescription=Вы провалили проверку. Вы можете реакцией повторно совершить проверку с преимуществом. +Reaction/&SpendPowerTidesOfChaosCheckReactDescription=Совершите проверку с преимуществом. +Reaction/&SpendPowerTidesOfChaosCheckReactTitle=Поток хаоса +Reaction/&SpendPowerTidesOfChaosCheckTitle=Поток хаоса +Reaction/&SpendPowerTidesOfChaosSaveDescription=Вы провалили спасбросок против {1} {0}. Вы можете реакцией повторно совершить спасбросок с преимуществом. Reaction/&SpendPowerTidesOfChaosSaveReactDescription=Совершите спасбросок с преимуществом. Reaction/&SpendPowerTidesOfChaosSaveReactTitle=Поток хаоса Reaction/&SpendPowerTidesOfChaosSaveTitle=Поток хаоса diff --git a/SolastaUnfinishedBusiness/Translations/ru/SubClasses/WizardWarMagic-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/SubClasses/WizardWarMagic-ru.txt index 8e4c09855f..f07cb5e94d 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/SubClasses/WizardWarMagic-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/SubClasses/WizardWarMagic-ru.txt @@ -16,8 +16,8 @@ Reaction/&CustomReactionArcaneDeflectionAttackDescription=Атака вот-во Reaction/&CustomReactionArcaneDeflectionAttackReactDescription=Вызвать промах Reaction/&CustomReactionArcaneDeflectionAttackReactTitle=Магическое отражение Reaction/&CustomReactionArcaneDeflectionAttackTitle=Магическое отражение -Reaction/&CustomReactionArcaneDeflectionSavingDescription=Вы провалили спасбросок против {0}>'s {1}. Вы можете использовать свою реакцию, чтобы добавить свой модификатор Интеллекта к броску и сделать его успешным. -Reaction/&CustomReactionArcaneDeflectionSavingReactDescription=Преуспевать +Reaction/&CustomReactionArcaneDeflectionSavingDescription=Вы провалили спасбросок против {1}> {0}. Вы можете реакцией добавить свой модификатор Интеллекта к броску и превратить его в успешный. +Reaction/&CustomReactionArcaneDeflectionSavingReactDescription=Преуспеть Reaction/&CustomReactionArcaneDeflectionSavingReactTitle=Магическое отражение Reaction/&CustomReactionArcaneDeflectionSavingTitle=Магическое отражение Subclass/&WizardWarMagicDescription=Разнообразные магические коллегии специализируются на подготовке волшебников к войне. Традиция военной магии сочетает в себе принципы воплощения и ограждения, не концентрируясь на какой-то из этих школ. Она учит техникам, усиливающим заклинания, также предлагая волшебникам методы поддержки своей защиты. Последователи этой традиции известны как военные маги. Они рассматривают свою магию и как оружие, и как броню — средство мощнее любого куска стали. Военные маги действуют в бою быстро, используя свои заклинания для получения тактического контроля над ситуацией. Их заклинания бьют сильно, в то время как их защита расстраивает попытки их противников контратаковать. Военные маги также мастаки использования магической энергии своих противников против них самих. From 31477308cda2900bdc12204aa6616a803e8ff670 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Mon, 2 Sep 2024 13:04:25 -0700 Subject: [PATCH 014/212] improve ability checks / saving checks code to correctly populate action with bardic inspiration parameters --- SolastaUnfinishedBusiness/Feats/OtherFeats.cs | 11 ++++++----- .../ITryAlterOutcomeAttributeCheck.cs | 11 ++++++++++- .../Interfaces/ITryAlterOutcomeSavingThrow.cs | 10 +++++++++- .../Patches/ActivitiesBreakFreePatcher.cs | 3 ++- .../Patches/CharacterActionBreakFreePatcher.cs | 8 ++++---- .../Patches/CharacterActionCastSpellPatcher.cs | 9 ++++----- .../CharacterActionMagicEffectPatcher.cs | 3 ++- .../CharacterActionMoveStepClimbPatcher.cs | 9 ++++----- .../CharacterActionMoveStepJumpPatcher.cs | 18 ++++++++---------- .../Patches/CharacterActionShovePatcher.cs | 5 ++++- .../Patches/CharacterActionUsePowerPatcher.cs | 9 ++++----- ...rSetGadgetConditionByAbilityCheckPatcher.cs | 3 ++- .../GameLocationBattleManagerPatcher.cs | 3 ++- .../Subclasses/Builders/EldritchVersatility.cs | 16 ++++++++-------- 14 files changed, 69 insertions(+), 49 deletions(-) diff --git a/SolastaUnfinishedBusiness/Feats/OtherFeats.cs b/SolastaUnfinishedBusiness/Feats/OtherFeats.cs index df04e28881..eaf2b0acdc 100644 --- a/SolastaUnfinishedBusiness/Feats/OtherFeats.cs +++ b/SolastaUnfinishedBusiness/Feats/OtherFeats.cs @@ -712,7 +712,8 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, attacker.BurnOneMainAttack(); - var abilityCheckData = new AbilityCheckData { AbilityCheckActionModifier = new ActionModifier() }; + var abilityCheckData = + new AbilityCheckData { AbilityCheckActionModifier = new ActionModifier(), Action = action }; yield return ResolveContest(attacker, defender, abilityCheckData); @@ -1185,12 +1186,12 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, AbilityCheckRoll = abilityCheckRoll, AbilityCheckRollOutcome = rollOutcome, AbilityCheckSuccessDelta = successDelta, - AbilityCheckActionModifier = actionModifier + AbilityCheckActionModifier = actionModifier, + Action = action }; - var battleManager = ServiceRepository.GetService(); - - yield return battleManager.HandleFailedAbilityCheck(action, actingCharacter, actionModifier); + yield return TryAlterOutcomeAttributeCheck + .HandleITryAlterOutcomeAttributeCheck(actingCharacter, abilityCheckData); if (abilityCheckData.AbilityCheckRollOutcome is RollOutcome.Success or RollOutcome.CriticalSuccess) { diff --git a/SolastaUnfinishedBusiness/Interfaces/ITryAlterOutcomeAttributeCheck.cs b/SolastaUnfinishedBusiness/Interfaces/ITryAlterOutcomeAttributeCheck.cs index 6a61d5138a..19275ae82d 100644 --- a/SolastaUnfinishedBusiness/Interfaces/ITryAlterOutcomeAttributeCheck.cs +++ b/SolastaUnfinishedBusiness/Interfaces/ITryAlterOutcomeAttributeCheck.cs @@ -26,6 +26,7 @@ public sealed class AbilityCheckData public RollOutcome AbilityCheckRollOutcome { get; set; } public int AbilityCheckSuccessDelta { get; set; } public ActionModifier AbilityCheckActionModifier { get; set; } + public CharacterAction Action { get; set; } } internal static class TryAlterOutcomeAttributeCheck @@ -370,7 +371,7 @@ private static IEnumerator HandleBardicRollOnFailure( battleManager.GetBestParametersForBardicDieRoll( actingCharacter, out var bestDie, - out _, + out var bestModifier, out var sourceCondition, out var forceMaxRoll, out var advantage); @@ -403,6 +404,14 @@ private static IEnumerator HandleBardicRollOnFailure( abilityCheckData.AbilityCheckSuccessDelta += roll; + var action = abilityCheckData.Action; + + if (action != null) + { + action.BardicDieType = bestDie; + action.FeatureName = bestModifier.Name; + } + var actionModifier = abilityCheckData.AbilityCheckActionModifier; if (actionModifier != null) diff --git a/SolastaUnfinishedBusiness/Interfaces/ITryAlterOutcomeSavingThrow.cs b/SolastaUnfinishedBusiness/Interfaces/ITryAlterOutcomeSavingThrow.cs index cd3d61b066..d2c39d99e0 100644 --- a/SolastaUnfinishedBusiness/Interfaces/ITryAlterOutcomeSavingThrow.cs +++ b/SolastaUnfinishedBusiness/Interfaces/ITryAlterOutcomeSavingThrow.cs @@ -263,7 +263,7 @@ private static IEnumerator HandleFailedSavingThrow( battleManager.GetBestParametersForBardicDieRoll( defender, out var bestDie, - out _, + out var bestModifier, out var sourceCondition, out var forceMaxRoll, out var advantage); @@ -297,6 +297,14 @@ private static IEnumerator HandleFailedSavingThrow( savingThrowData.SaveOutcomeDelta += roll; + var action = savingThrowData.Action; + + if (action != null) + { + action.BardicDieType = bestDie; + action.FeatureName = bestModifier.Name; + } + var actionModifier = savingThrowData.SaveActionModifier; if (actionModifier != null) diff --git a/SolastaUnfinishedBusiness/Patches/ActivitiesBreakFreePatcher.cs b/SolastaUnfinishedBusiness/Patches/ActivitiesBreakFreePatcher.cs index dcb3ac74d4..1c1157b05c 100644 --- a/SolastaUnfinishedBusiness/Patches/ActivitiesBreakFreePatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/ActivitiesBreakFreePatcher.cs @@ -94,7 +94,8 @@ public static IEnumerator Postfix( AbilityCheckRoll = abilityCheckRoll, AbilityCheckRollOutcome = rollOutcome, AbilityCheckSuccessDelta = successDelta, - AbilityCheckActionModifier = actionModifier + AbilityCheckActionModifier = actionModifier, + Action = null }; yield return TryAlterOutcomeAttributeCheck diff --git a/SolastaUnfinishedBusiness/Patches/CharacterActionBreakFreePatcher.cs b/SolastaUnfinishedBusiness/Patches/CharacterActionBreakFreePatcher.cs index 368b397361..79953ee80a 100644 --- a/SolastaUnfinishedBusiness/Patches/CharacterActionBreakFreePatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/CharacterActionBreakFreePatcher.cs @@ -123,12 +123,12 @@ private static IEnumerator Process(CharacterActionBreakFree __instance) AbilityCheckRoll = abilityCheckRoll, AbilityCheckRollOutcome = rollOutcome, AbilityCheckSuccessDelta = successDelta, - AbilityCheckActionModifier = actionModifier + AbilityCheckActionModifier = actionModifier, + Action = __instance }; - var battleManager = ServiceRepository.GetService(); - - yield return battleManager.HandleFailedAbilityCheck(__instance, __instance.ActingCharacter, actionModifier); + yield return TryAlterOutcomeAttributeCheck + .HandleITryAlterOutcomeAttributeCheck(__instance.ActingCharacter, abilityCheckData); __instance.AbilityCheckRoll = abilityCheckData.AbilityCheckRoll; __instance.AbilityCheckRollOutcome = abilityCheckData.AbilityCheckRollOutcome; diff --git a/SolastaUnfinishedBusiness/Patches/CharacterActionCastSpellPatcher.cs b/SolastaUnfinishedBusiness/Patches/CharacterActionCastSpellPatcher.cs index 73530d4268..879ad00346 100644 --- a/SolastaUnfinishedBusiness/Patches/CharacterActionCastSpellPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/CharacterActionCastSpellPatcher.cs @@ -245,13 +245,12 @@ private static IEnumerator Process( AbilityCheckRoll = abilityCheckRoll, AbilityCheckRollOutcome = outcome, AbilityCheckSuccessDelta = successDelta, - AbilityCheckActionModifier = actionModifier + AbilityCheckActionModifier = actionModifier, + Action = actionCastSpell }; - var battleManager = ServiceRepository.GetService(); - - yield return battleManager - .HandleFailedAbilityCheck(actionCastSpell, actingCharacter, actionModifier); + yield return TryAlterOutcomeAttributeCheck + .HandleITryAlterOutcomeAttributeCheck(actingCharacter, abilityCheckData); actionCastSpell.AbilityCheckRoll = abilityCheckData.AbilityCheckRoll; actionCastSpell.AbilityCheckRollOutcome = abilityCheckData.AbilityCheckRollOutcome; diff --git a/SolastaUnfinishedBusiness/Patches/CharacterActionMagicEffectPatcher.cs b/SolastaUnfinishedBusiness/Patches/CharacterActionMagicEffectPatcher.cs index ebf0a27481..111408f721 100644 --- a/SolastaUnfinishedBusiness/Patches/CharacterActionMagicEffectPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/CharacterActionMagicEffectPatcher.cs @@ -1287,7 +1287,8 @@ private static IEnumerator ExecuteMagicAttack( yield break; } - var abilityCheckData = new AbilityCheckData { AbilityCheckActionModifier = new ActionModifier() }; + var abilityCheckData = + new AbilityCheckData { AbilityCheckActionModifier = new ActionModifier(), Action = __instance }; yield return TryAlterOutcomeAttributeCheck.ResolveRolls( actingCharacter, target, ActionDefinitions.Id.Shove, abilityCheckData); diff --git a/SolastaUnfinishedBusiness/Patches/CharacterActionMoveStepClimbPatcher.cs b/SolastaUnfinishedBusiness/Patches/CharacterActionMoveStepClimbPatcher.cs index 3cc978acfe..89261681f8 100644 --- a/SolastaUnfinishedBusiness/Patches/CharacterActionMoveStepClimbPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/CharacterActionMoveStepClimbPatcher.cs @@ -100,13 +100,12 @@ private static IEnumerator Process(CharacterActionMoveStepClimb action) AbilityCheckRoll = abilityCheckRoll, AbilityCheckRollOutcome = outcome, AbilityCheckSuccessDelta = successDelta, - AbilityCheckActionModifier = actionModifier + AbilityCheckActionModifier = actionModifier, + Action = action }; - var battleManager = ServiceRepository.GetService(); - - yield return battleManager - .HandleFailedAbilityCheck(action, actingCharacter, actionModifier); + yield return TryAlterOutcomeAttributeCheck + .HandleITryAlterOutcomeAttributeCheck(actingCharacter, abilityCheckData); action.AbilityCheckRoll = abilityCheckData.AbilityCheckRoll; action.AbilityCheckRollOutcome = abilityCheckData.AbilityCheckRollOutcome; diff --git a/SolastaUnfinishedBusiness/Patches/CharacterActionMoveStepJumpPatcher.cs b/SolastaUnfinishedBusiness/Patches/CharacterActionMoveStepJumpPatcher.cs index 33519d20b0..53644945e7 100644 --- a/SolastaUnfinishedBusiness/Patches/CharacterActionMoveStepJumpPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/CharacterActionMoveStepJumpPatcher.cs @@ -50,13 +50,12 @@ private static IEnumerator Process(CharacterActionMoveStepJump action) AbilityCheckRoll = abilityCheckRoll, AbilityCheckRollOutcome = outcome, AbilityCheckSuccessDelta = successDelta, - AbilityCheckActionModifier = actionModifier + AbilityCheckActionModifier = actionModifier, + Action = action }; - var battleManager = ServiceRepository.GetService(); - - yield return battleManager - .HandleFailedAbilityCheck(action, actingCharacter, actionModifier); + yield return TryAlterOutcomeAttributeCheck + .HandleITryAlterOutcomeAttributeCheck(actingCharacter, abilityCheckData); action.AbilityCheckRoll = abilityCheckData.AbilityCheckRoll; action.AbilityCheckRollOutcome = abilityCheckData.AbilityCheckRollOutcome; @@ -87,13 +86,12 @@ private static IEnumerator Process(CharacterActionMoveStepJump action) AbilityCheckRoll = abilityCheckRoll, AbilityCheckRollOutcome = outcome, AbilityCheckSuccessDelta = successDelta, - AbilityCheckActionModifier = actionModifier + AbilityCheckActionModifier = actionModifier, + Action = action }; - var battleManager = ServiceRepository.GetService(); - - yield return battleManager - .HandleFailedAbilityCheck(action, actingCharacter, actionModifier); + yield return TryAlterOutcomeAttributeCheck + .HandleITryAlterOutcomeAttributeCheck(actingCharacter, abilityCheckData); action.AbilityCheckRoll = abilityCheckData.AbilityCheckRoll; action.AbilityCheckRollOutcome = abilityCheckData.AbilityCheckRollOutcome; diff --git a/SolastaUnfinishedBusiness/Patches/CharacterActionShovePatcher.cs b/SolastaUnfinishedBusiness/Patches/CharacterActionShovePatcher.cs index fe79efe423..c7d2f3fc16 100644 --- a/SolastaUnfinishedBusiness/Patches/CharacterActionShovePatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/CharacterActionShovePatcher.cs @@ -31,7 +31,10 @@ private static IEnumerator Execute(CharacterActionShove characterActionShove) var isTopple = characterActionShove.ActionParams.BoolParameter; var isSameSide = actingCharacter.Side == target.Side; var isIncapacitated = target.RulesetCharacter.IsIncapacitated; - var abilityCheckData = new AbilityCheckData { AbilityCheckActionModifier = new ActionModifier() }; + var abilityCheckData = new AbilityCheckData + { + AbilityCheckActionModifier = new ActionModifier(), Action = characterActionShove + }; //BEGIN PATCH // original code diff --git a/SolastaUnfinishedBusiness/Patches/CharacterActionUsePowerPatcher.cs b/SolastaUnfinishedBusiness/Patches/CharacterActionUsePowerPatcher.cs index ab78cd7526..c958c9c7d5 100644 --- a/SolastaUnfinishedBusiness/Patches/CharacterActionUsePowerPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/CharacterActionUsePowerPatcher.cs @@ -248,13 +248,12 @@ is FeatureDefinitionCastSpell.CastingOrigin.Class AbilityCheckRoll = abilityCheckRoll, AbilityCheckRollOutcome = outcome, AbilityCheckSuccessDelta = successDelta, - AbilityCheckActionModifier = actionModifier + AbilityCheckActionModifier = actionModifier, + Action = actionUsePower }; - var battleManager = ServiceRepository.GetService(); - - yield return battleManager - .HandleFailedAbilityCheck(actionUsePower, actingCharacter, actionModifier); + yield return TryAlterOutcomeAttributeCheck + .HandleITryAlterOutcomeAttributeCheck(actingCharacter, abilityCheckData); actionUsePower.AbilityCheckRoll = abilityCheckData.AbilityCheckRoll; actionUsePower.AbilityCheckRollOutcome = abilityCheckData.AbilityCheckRollOutcome; diff --git a/SolastaUnfinishedBusiness/Patches/FunctorSetGadgetConditionByAbilityCheckPatcher.cs b/SolastaUnfinishedBusiness/Patches/FunctorSetGadgetConditionByAbilityCheckPatcher.cs index 909ba36ed3..91461dba14 100644 --- a/SolastaUnfinishedBusiness/Patches/FunctorSetGadgetConditionByAbilityCheckPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/FunctorSetGadgetConditionByAbilityCheckPatcher.cs @@ -173,7 +173,8 @@ private static IEnumerator ExecuteCheckOnCharacter( AbilityCheckRoll = abilityCheckRoll, AbilityCheckRollOutcome = rollOutcome, AbilityCheckSuccessDelta = successDelta, - AbilityCheckActionModifier = actionModifier + AbilityCheckActionModifier = actionModifier, + Action = null }; yield return TryAlterOutcomeAttributeCheck diff --git a/SolastaUnfinishedBusiness/Patches/GameLocationBattleManagerPatcher.cs b/SolastaUnfinishedBusiness/Patches/GameLocationBattleManagerPatcher.cs index 4a8a49c760..e2ec78e2be 100644 --- a/SolastaUnfinishedBusiness/Patches/GameLocationBattleManagerPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/GameLocationBattleManagerPatcher.cs @@ -239,7 +239,8 @@ public static IEnumerator Process( AbilityCheckRoll = action.AbilityCheckRoll, AbilityCheckRollOutcome = action.AbilityCheckRollOutcome, AbilityCheckSuccessDelta = action.AbilityCheckSuccessDelta, - AbilityCheckActionModifier = actionModifier + AbilityCheckActionModifier = actionModifier, + Action = action }; yield return TryAlterOutcomeAttributeCheck.HandleITryAlterOutcomeAttributeCheck(checker, abilityCheckData); diff --git a/SolastaUnfinishedBusiness/Subclasses/Builders/EldritchVersatility.cs b/SolastaUnfinishedBusiness/Subclasses/Builders/EldritchVersatility.cs index 7bd0bfdb36..dfe4b8996a 100644 --- a/SolastaUnfinishedBusiness/Subclasses/Builders/EldritchVersatility.cs +++ b/SolastaUnfinishedBusiness/Subclasses/Builders/EldritchVersatility.cs @@ -874,12 +874,12 @@ public IEnumerator OnSpellCasted( AbilityCheckRoll = abilityCheckRoll, AbilityCheckRollOutcome = rollOutcome, AbilityCheckSuccessDelta = successDelta, - AbilityCheckActionModifier = checkModifier + AbilityCheckActionModifier = checkModifier, + Action = castAction }; - var battleManager = ServiceRepository.GetService(); - - yield return battleManager.HandleFailedAbilityCheck(castAction, glc, checkModifier); + yield return TryAlterOutcomeAttributeCheck + .HandleITryAlterOutcomeAttributeCheck(glc, abilityCheckData); castAction.AbilityCheckRoll = abilityCheckData.AbilityCheckRoll; castAction.AbilityCheckRollOutcome = abilityCheckData.AbilityCheckRollOutcome; @@ -950,12 +950,12 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, AbilityCheckRoll = abilityCheckRoll, AbilityCheckRollOutcome = rollOutcome, AbilityCheckSuccessDelta = successDelta, - AbilityCheckActionModifier = checkModifier + AbilityCheckActionModifier = checkModifier, + Action = action }; - var battleManager = ServiceRepository.GetService(); - - yield return battleManager.HandleFailedAbilityCheck(action, gameLocationCharacter, checkModifier); + yield return TryAlterOutcomeAttributeCheck + .HandleITryAlterOutcomeAttributeCheck(gameLocationCharacter, abilityCheckData); action.AbilityCheckRoll = abilityCheckData.AbilityCheckRoll; action.AbilityCheckRollOutcome = abilityCheckData.AbilityCheckRollOutcome; From 4945b3f250e02e5c053e50bb6e9bf352dad4556b Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Mon, 2 Sep 2024 13:20:45 -0700 Subject: [PATCH 015/212] remove superfluous yield break / yield return null --- SolastaUnfinishedBusiness/Actions/CharacterActionDoNothing.cs | 2 +- .../Actions/CharacterActionWildlingFeralAgility.cs | 2 -- .../Actions/CharacterActionWildshapeSwapAttackToggle.cs | 4 +--- SolastaUnfinishedBusiness/DataViewer/BlueprintLoader.cs | 4 ++-- .../Patches/CharacterActionRecklessPatcher.cs | 2 -- .../Patches/CharacterActionSpendPowerPatcher.cs | 2 -- 6 files changed, 4 insertions(+), 12 deletions(-) diff --git a/SolastaUnfinishedBusiness/Actions/CharacterActionDoNothing.cs b/SolastaUnfinishedBusiness/Actions/CharacterActionDoNothing.cs index 8e7a823609..5665dcf933 100644 --- a/SolastaUnfinishedBusiness/Actions/CharacterActionDoNothing.cs +++ b/SolastaUnfinishedBusiness/Actions/CharacterActionDoNothing.cs @@ -10,6 +10,6 @@ public class CharacterActionDoNothing(CharacterActionParams actionParams) : Char { public override IEnumerator ExecuteImpl() { - yield return null; + yield break; } } diff --git a/SolastaUnfinishedBusiness/Actions/CharacterActionWildlingFeralAgility.cs b/SolastaUnfinishedBusiness/Actions/CharacterActionWildlingFeralAgility.cs index 02ffd40c97..f23c9026d5 100644 --- a/SolastaUnfinishedBusiness/Actions/CharacterActionWildlingFeralAgility.cs +++ b/SolastaUnfinishedBusiness/Actions/CharacterActionWildlingFeralAgility.cs @@ -45,7 +45,5 @@ public override IEnumerator ExecuteImpl() 0, 0, 0); - - yield return null; } } diff --git a/SolastaUnfinishedBusiness/Actions/CharacterActionWildshapeSwapAttackToggle.cs b/SolastaUnfinishedBusiness/Actions/CharacterActionWildshapeSwapAttackToggle.cs index e61430d5e6..4d448acae2 100644 --- a/SolastaUnfinishedBusiness/Actions/CharacterActionWildshapeSwapAttackToggle.cs +++ b/SolastaUnfinishedBusiness/Actions/CharacterActionWildshapeSwapAttackToggle.cs @@ -26,7 +26,7 @@ public override IEnumerator ExecuteImpl() var gameLocationCharacter = GameLocationCharacter.GetFromActor(rulesetCharacter); - if (gameLocationCharacter == null || gameLocationCharacter.HasAttackedSinceLastTurn) + if (gameLocationCharacter is not {HasAttackedSinceLastTurn: false}) { yield break; } @@ -35,7 +35,5 @@ public override IEnumerator ExecuteImpl() (monsterDef.AttackIterations[1], monsterDef.AttackIterations[0]); monster.RefreshAttackModes(); - - yield return null; } } diff --git a/SolastaUnfinishedBusiness/DataViewer/BlueprintLoader.cs b/SolastaUnfinishedBusiness/DataViewer/BlueprintLoader.cs index d1abefa05e..3b9d69b475 100644 --- a/SolastaUnfinishedBusiness/DataViewer/BlueprintLoader.cs +++ b/SolastaUnfinishedBusiness/DataViewer/BlueprintLoader.cs @@ -53,8 +53,8 @@ private IEnumerator LoadBlueprints() // iterate over all DBs / BPs and collect them var blueprints = new List(); - foreach (IEnumerable db in databases.Values.OrderBy(db => - db.GetType().GetGenericArguments()[0].Name)) + foreach (var db in databases.Values.OrderBy(db => + db.GetType().GetGenericArguments()[0].Name).Cast>()) { yield return null; diff --git a/SolastaUnfinishedBusiness/Patches/CharacterActionRecklessPatcher.cs b/SolastaUnfinishedBusiness/Patches/CharacterActionRecklessPatcher.cs index 3c86aaf100..cba09a5f5a 100644 --- a/SolastaUnfinishedBusiness/Patches/CharacterActionRecklessPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/CharacterActionRecklessPatcher.cs @@ -62,8 +62,6 @@ private static IEnumerator Process( action.ActingCharacter.RulesetCharacter.AddConditionOfCategory( AttributeDefinitions.TagCombat, activeCondition2); - - yield return null; } } } diff --git a/SolastaUnfinishedBusiness/Patches/CharacterActionSpendPowerPatcher.cs b/SolastaUnfinishedBusiness/Patches/CharacterActionSpendPowerPatcher.cs index 120bfadb5f..f9c6d703f5 100644 --- a/SolastaUnfinishedBusiness/Patches/CharacterActionSpendPowerPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/CharacterActionSpendPowerPatcher.cs @@ -353,8 +353,6 @@ private static IEnumerator ExecuteImpl(CharacterActionSpendPower __instance) } __instance.PersistantEffectAction(); - - yield return null; } } } From 6227ba0c5a980504fb71e744f005e37a717869f9 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Mon, 2 Sep 2024 13:27:35 -0700 Subject: [PATCH 016/212] fix Martial Commander coordinated defense to require an attack first [VANILLA] --- SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs | 2 ++ SolastaUnfinishedBusiness/Models/FixesContext.cs | 8 +++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs b/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs index 339110a7a0..a63caefabc 100644 --- a/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs +++ b/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs @@ -1721,6 +1721,8 @@ internal static class FeatureDefinitionPointPools internal static class FeatureDefinitionPowers { + internal static FeatureDefinitionPower PowerMartialCommanderCoordinatedDefense { get; } = + GetDefinition("PowerMartialCommanderCoordinatedDefense"); internal static FeatureDefinitionPower PowerIncubus_Drain { get; } = GetDefinition("PowerIncubus_Drain"); diff --git a/SolastaUnfinishedBusiness/Models/FixesContext.cs b/SolastaUnfinishedBusiness/Models/FixesContext.cs index 8db3278ba8..44047d3bbc 100644 --- a/SolastaUnfinishedBusiness/Models/FixesContext.cs +++ b/SolastaUnfinishedBusiness/Models/FixesContext.cs @@ -47,7 +47,6 @@ internal static void Load() internal static void LateLoad() { - AddAdditionalActionTitles(); ExtendCharmImmunityToDemonicInfluence(); FixAdditionalDamageRestrictions(); FixAdditionalDamageRogueSneakAttack(); @@ -63,6 +62,7 @@ internal static void LateLoad() FixGorillaWildShapeRocksToUnlimited(); FixLanguagesPointPoolsToIncludeAllLanguages(); FixMartialArtsProgression(); + FixMartialCommanderCoordinatedDefense(); FixMountaineerBonusShoveRestrictions(); FixMummyDreadfulGlareSavingAttribute(); FixPowerDragonbornBreathWeaponDiceProgression(); @@ -405,6 +405,12 @@ private static void FixMartialArtsProgression() } } + private static void FixMartialCommanderCoordinatedDefense() + { + PowerMartialCommanderCoordinatedDefense.AddCustomSubFeatures( + new ValidatorsValidatePowerUse(ValidatorsCharacter.HasAttacked)); + } + private static void FixMinorMagicEffectsIssues() { // fix issues with bad targeting From f6f8b4126cb07716eb80ee999f98da9c49f74e59 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Mon, 2 Sep 2024 15:40:39 -0700 Subject: [PATCH 017/212] tweak Martial Commander fix to hide the action instead of power if not attacked yet --- SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs | 5 +++-- SolastaUnfinishedBusiness/Models/FixesContext.cs | 7 ++++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs b/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs index a63caefabc..ef51afb4c6 100644 --- a/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs +++ b/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs @@ -932,6 +932,9 @@ internal static FeatureDefinitionAbilityCheckAffinity internal static class FeatureDefinitionActionAffinitys { + internal static FeatureDefinitionActionAffinity ActionAffinityMartialCommanderCoordinatedDefense { get; } = + GetDefinition("ActionAffinityMartialCommanderCoordinatedDefense"); + internal static FeatureDefinitionActionAffinity ActionAffinityAggressive { get; } = GetDefinition("ActionAffinityAggressive"); @@ -1721,8 +1724,6 @@ internal static class FeatureDefinitionPointPools internal static class FeatureDefinitionPowers { - internal static FeatureDefinitionPower PowerMartialCommanderCoordinatedDefense { get; } = - GetDefinition("PowerMartialCommanderCoordinatedDefense"); internal static FeatureDefinitionPower PowerIncubus_Drain { get; } = GetDefinition("PowerIncubus_Drain"); diff --git a/SolastaUnfinishedBusiness/Models/FixesContext.cs b/SolastaUnfinishedBusiness/Models/FixesContext.cs index 44047d3bbc..4595b37654 100644 --- a/SolastaUnfinishedBusiness/Models/FixesContext.cs +++ b/SolastaUnfinishedBusiness/Models/FixesContext.cs @@ -47,6 +47,7 @@ internal static void Load() internal static void LateLoad() { + AddAdditionalActionTitles(); ExtendCharmImmunityToDemonicInfluence(); FixAdditionalDamageRestrictions(); FixAdditionalDamageRogueSneakAttack(); @@ -407,10 +408,10 @@ private static void FixMartialArtsProgression() private static void FixMartialCommanderCoordinatedDefense() { - PowerMartialCommanderCoordinatedDefense.AddCustomSubFeatures( - new ValidatorsValidatePowerUse(ValidatorsCharacter.HasAttacked)); + ActionAffinityMartialCommanderCoordinatedDefense.AddCustomSubFeatures( + new ValidateDefinitionApplication(ValidatorsCharacter.HasAttacked)); } - + private static void FixMinorMagicEffectsIssues() { // fix issues with bad targeting From 127071dd60d2c0998d4837782e5e1aadc470e0a2 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Mon, 2 Sep 2024 15:41:01 -0700 Subject: [PATCH 018/212] remove invalid lines from cantrips translation files --- .../Translations/de/Spells/Cantrips-de.txt | 3 --- .../Translations/es/Spells/Cantrips-es.txt | 3 --- .../Translations/fr/Spells/Cantrips-fr.txt | 3 --- .../Translations/it/Spells/Cantrips-it.txt | 3 --- .../Translations/ja/Spells/Cantrips-ja.txt | 3 --- .../Translations/ko/Spells/Cantrips-ko.txt | 3 --- .../Translations/pt-BR/Spells/Cantrips-pt-BR.txt | 3 --- .../Translations/zh-CN/Spells/Cantrips-zh-CN.txt | 3 --- 8 files changed, 24 deletions(-) diff --git a/SolastaUnfinishedBusiness/Translations/de/Spells/Cantrips-de.txt b/SolastaUnfinishedBusiness/Translations/de/Spells/Cantrips-de.txt index 85ef552b06..9b28a0bec0 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Spells/Cantrips-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Spells/Cantrips-de.txt @@ -1,6 +1,3 @@ - -=EMPTY -=EMPTY Condition/&ConditionAcidClawsDescription=-1 bis AC. Condition/&ConditionAcidClawsTitle=Säure brennen Condition/&ConditionBoomingBladeSheathedDescription=Du bist von dröhnender Energie umgeben. Wenn du dich freiwillig 1,5 Meter oder mehr bewegst, erleidest du Donnerschaden. diff --git a/SolastaUnfinishedBusiness/Translations/es/Spells/Cantrips-es.txt b/SolastaUnfinishedBusiness/Translations/es/Spells/Cantrips-es.txt index e10919ee4d..eedf4828ad 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Spells/Cantrips-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Spells/Cantrips-es.txt @@ -1,6 +1,3 @@ - -=EMPTY -=EMPTY Condition/&ConditionAcidClawsDescription=-1 a CA. Condition/&ConditionAcidClawsTitle=Quemadura por ácido Condition/&ConditionBoomingBladeSheathedDescription=Estás envuelto en una energía explosiva. Si te mueves voluntariamente 1,5 m o más, recibirás daño por trueno. diff --git a/SolastaUnfinishedBusiness/Translations/fr/Spells/Cantrips-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Spells/Cantrips-fr.txt index 7ae137775b..f3d559b0d3 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Spells/Cantrips-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Spells/Cantrips-fr.txt @@ -1,6 +1,3 @@ - -=EMPTY -=EMPTY Condition/&ConditionAcidClawsDescription=-1 à AC. Condition/&ConditionAcidClawsTitle=Brûlures acides Condition/&ConditionBoomingBladeSheathedDescription=Vous êtes enveloppé d'une énergie tonitruante. Si vous vous déplacez volontairement de 1,50 m ou plus, vous subissez des dégâts de foudre. diff --git a/SolastaUnfinishedBusiness/Translations/it/Spells/Cantrips-it.txt b/SolastaUnfinishedBusiness/Translations/it/Spells/Cantrips-it.txt index 544ea564ff..379adaeb70 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Spells/Cantrips-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Spells/Cantrips-it.txt @@ -1,6 +1,3 @@ - -=EMPTY -=EMPTY Condition/&ConditionAcidClawsDescription=-1 a CA. Condition/&ConditionAcidClawsTitle=Ustione da acido Condition/&ConditionBoomingBladeSheathedDescription=Sei avvolto in un'energia rimbombante. Se ti sposti volontariamente di 5 piedi o più, subisci danni da tuono. diff --git a/SolastaUnfinishedBusiness/Translations/ja/Spells/Cantrips-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Spells/Cantrips-ja.txt index 8bd13bb30d..1a06a53be8 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Spells/Cantrips-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Spells/Cantrips-ja.txt @@ -1,6 +1,3 @@ - -=EMPTY -=EMPTY Condition/&ConditionAcidClawsDescription=アーマークラスが1下がります。 Condition/&ConditionAcidClawsTitle=アシッドバーン Condition/&ConditionBoomingBladeSheathedDescription=あなたは轟くエネルギーに包まれています。あなたが自発的に 5 フィート以上移動すると、雷のダメージを受けます。 diff --git a/SolastaUnfinishedBusiness/Translations/ko/Spells/Cantrips-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Spells/Cantrips-ko.txt index 8636474cde..3cc702d5a6 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Spells/Cantrips-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Spells/Cantrips-ko.txt @@ -1,6 +1,3 @@ - -=EMPTY -=EMPTY Condition/&ConditionAcidClawsDescription=방어구 등급이 1 감소합니다. Condition/&ConditionAcidClawsTitle=산성 화상 Condition/&ConditionBoomingBladeSheathedDescription=당신은 폭발하는 에너지에 싸여 있습니다. 만약 당신이 5피트 이상 기꺼이 이동한다면, 당신은 천둥 피해를 입습니다. diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Cantrips-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Cantrips-pt-BR.txt index d06bc388d8..f464c901d8 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Cantrips-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Cantrips-pt-BR.txt @@ -1,6 +1,3 @@ - -=EMPTY -=EMPTY Condition/&ConditionAcidClawsDescription=-1 para CA. Condition/&ConditionAcidClawsTitle=Queimadura ácida Condition/&ConditionBoomingBladeSheathedDescription=Você está envolto em energia estrondosa. Se você se mover voluntariamente 5 pés ou mais, você recebe dano de trovão. diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Cantrips-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Cantrips-zh-CN.txt index 4b942cb238..5db8fb4ea3 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Cantrips-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Cantrips-zh-CN.txt @@ -1,6 +1,3 @@ - -=EMPTY -=EMPTY Condition/&ConditionAcidClawsDescription=护甲等级降低 1。 Condition/&ConditionAcidClawsTitle=强酸灼伤 Condition/&ConditionBoomingBladeSheathedDescription=你被轰隆隆的能量所笼罩。如果你主动移动 5 英尺或以上,你就会受到雷击伤害。 From a4536be7df16a3dd3d4cf269dd5def4cc75fa0c8 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Mon, 2 Sep 2024 18:56:36 -0700 Subject: [PATCH 019/212] improve Maneuvering Attack, and Martial Warlord strategic repositioning to use a run animation --- .../Subclasses/Builders/GambitsBuilders.cs | 30 +++++++++++++++---- .../Subclasses/MartialWarlord.cs | 26 +++++++++++++--- 2 files changed, 46 insertions(+), 10 deletions(-) diff --git a/SolastaUnfinishedBusiness/Subclasses/Builders/GambitsBuilders.cs b/SolastaUnfinishedBusiness/Subclasses/Builders/GambitsBuilders.cs index 1535d77842..00b5ef78ba 100644 --- a/SolastaUnfinishedBusiness/Subclasses/Builders/GambitsBuilders.cs +++ b/SolastaUnfinishedBusiness/Subclasses/Builders/GambitsBuilders.cs @@ -1307,7 +1307,7 @@ public IEnumerator OnPhysicalAttackFinishedByMe( yield break; } - attacker.CurrentActionRankByType[ActionDefinitions.ActionType.Bonus]++; + attacker.SpendActionType(ActionDefinitions.ActionType.Bonus); rulesetCharacter.UpdateUsageForPower(pool, 1); } @@ -1925,6 +1925,13 @@ public IEnumerator ComputeValidPositions(CursorLocationSelectPosition cursorLoca public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, BaseDefinition baseDefinition) { + var actionManager = ServiceRepository.GetService() as GameLocationActionManager; + + if (!actionManager) + { + yield break; + } + action.ActionParams.activeEffect.EffectDescription.rangeParameter = 6; var actingCharacter = action.ActingCharacter; @@ -1932,9 +1939,10 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, var targetRulesetCharacter = targetCharacter.RulesetCharacter; var targetPosition = action.ActionParams.Positions[0]; var actionParams = - new CharacterActionParams(targetCharacter, ActionDefinitions.Id.TacticalMove) + new CharacterActionParams(targetCharacter, ActionDefinitions.Id.TacticalMove, + ActionDefinitions.MoveStance.Run, targetPosition, LocationDefinitions.Orientation.North) { - Positions = { targetPosition } + BoolParameter3 = false, BoolParameter5 = false }; targetCharacter.UsedTacticalMoves = 0; @@ -1956,11 +1964,21 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, EffectHelpers.StartVisualEffect(actingCharacter, targetCharacter, FeatureDefinitionPowers.PowerDomainSunHeraldOfTheSun, EffectHelpers.EffectType.Effect); - targetCharacter.CurrentActionRankByType[ActionDefinitions.ActionType.Reaction]++; + targetCharacter.SpendActionType(ActionDefinitions.ActionType.Reaction); - ServiceRepository.GetService().ExecuteAction(actionParams, null, true); + actionManager.actionChainByCharacter.TryGetValue(targetCharacter, out var actionChainSlot); - yield break; + var collection = actionChainSlot?.actionQueue; + + if (collection != null && + !collection.Empty() && + collection[0].action is CharacterActionMoveStepWalk) + { + actionParams.BoolParameter2 = true; + } + + actionManager.ExecuteActionChain( + new CharacterActionChainParams(actionParams.ActingCharacter, actionParams), null, false); } public int PositionRange => 12; diff --git a/SolastaUnfinishedBusiness/Subclasses/MartialWarlord.cs b/SolastaUnfinishedBusiness/Subclasses/MartialWarlord.cs index 1829595c01..0b77b51e3f 100644 --- a/SolastaUnfinishedBusiness/Subclasses/MartialWarlord.cs +++ b/SolastaUnfinishedBusiness/Subclasses/MartialWarlord.cs @@ -480,6 +480,13 @@ public IEnumerator ComputeValidPositions(CursorLocationSelectPosition cursorLoca public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, BaseDefinition baseDefinition) { + var actionManager = ServiceRepository.GetService() as GameLocationActionManager; + + if (!actionManager) + { + yield break; + } + action.ActionParams.activeEffect.EffectDescription.rangeParameter = 6; var actingCharacter = action.ActingCharacter; @@ -487,9 +494,10 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, var targetRulesetCharacter = targetCharacter.RulesetCharacter; var targetPosition = action.ActionParams.Positions[0]; var actionParams = - new CharacterActionParams(targetCharacter, ActionDefinitions.Id.TacticalMove) + new CharacterActionParams(targetCharacter, ActionDefinitions.Id.TacticalMove, + ActionDefinitions.MoveStance.Run, targetPosition, LocationDefinitions.Orientation.North) { - Positions = { targetPosition } + BoolParameter3 = false, BoolParameter5 = false }; targetCharacter.UsedTacticalMoves = 0; @@ -511,9 +519,19 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, EffectHelpers.StartVisualEffect(actingCharacter, targetCharacter, FeatureDefinitionPowers.PowerDomainSunHeraldOfTheSun, EffectHelpers.EffectType.Effect); - ServiceRepository.GetService().ExecuteAction(actionParams, null, true); + actionManager.actionChainByCharacter.TryGetValue(targetCharacter, out var actionChainSlot); + + var collection = actionChainSlot?.actionQueue; + + if (collection != null && + !collection.Empty() && + collection[0].action is CharacterActionMoveStepWalk) + { + actionParams.BoolParameter2 = true; + } - yield break; + actionManager.ExecuteActionChain( + new CharacterActionChainParams(actionParams.ActingCharacter, actionParams), null, false); } public int PositionRange => 12; From 2151a2e5da1aff2dd181419caab680a3b7e8636d Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Mon, 2 Sep 2024 18:58:31 -0700 Subject: [PATCH 020/212] improve game log to avoid voxelization warning messages from custom campaigns to flood the same --- .../Patches/WorldSectorPatcher.cs | 68 +++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 SolastaUnfinishedBusiness/Patches/WorldSectorPatcher.cs diff --git a/SolastaUnfinishedBusiness/Patches/WorldSectorPatcher.cs b/SolastaUnfinishedBusiness/Patches/WorldSectorPatcher.cs new file mode 100644 index 0000000000..64e5ab8ef6 --- /dev/null +++ b/SolastaUnfinishedBusiness/Patches/WorldSectorPatcher.cs @@ -0,0 +1,68 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Reflection; +using System.Reflection.Emit; +using HarmonyLib; +using JetBrains.Annotations; +using SolastaUnfinishedBusiness.Api.Helpers; +using Object = UnityEngine.Object; + +namespace SolastaUnfinishedBusiness.Patches; + +[UsedImplicitly] +public static class WorldSectorPatcher +{ + [HarmonyPatch(typeof(WorldSector), nameof(WorldSector.Voxelize))] + [SuppressMessage("Minor Code Smell", "S101:Types should be named in PascalCase", Justification = "Patch")] + [UsedImplicitly] + public static class SetHighlightVisibility_Patch + { + [UsedImplicitly] + public static IEnumerable Transpiler([NotNull] IEnumerable instructions) + { + var logError1Method = typeof(Trace).GetMethod("LogWarning", BindingFlags.Public | BindingFlags.Static, + Type.DefaultBinder, [typeof(string)], null); + var logError2Method = typeof(Trace).GetMethod("LogWarning", BindingFlags.Public | BindingFlags.Static, + Type.DefaultBinder, [typeof(string), typeof(object[])], null); + var logError3Method = typeof(Trace).GetMethod("LogWarning", BindingFlags.Public | BindingFlags.Static, + Type.DefaultBinder, [typeof(string), typeof(Object), typeof(object[])], null); + + var myLogError2Method = typeof(SetHighlightVisibility_Patch).GetMethod("LogWarning", + BindingFlags.Public | BindingFlags.Static, + Type.DefaultBinder, [typeof(string), typeof(object[])], null); + var myLogError3Method = typeof(SetHighlightVisibility_Patch).GetMethod("LogWarning", + BindingFlags.Public | BindingFlags.Static, + Type.DefaultBinder, [typeof(string), typeof(Object), typeof(object[])], null); + + return instructions + .ReplaceCalls(logError1Method, "WorldSector.Voxelize1", + new CodeInstruction(OpCodes.Pop)) + .ReplaceCalls(logError2Method, "WorldSector.Voxelize2", + new CodeInstruction(OpCodes.Call, myLogError2Method)) + .ReplaceCalls(logError3Method, "WorldSector.Voxelize3", + new CodeInstruction(OpCodes.Call, myLogError3Method)); + } + + [UsedImplicitly] +#pragma warning disable IDE0060 + public static void LogWarning( + [UsedImplicitly] string errorMessage, + [UsedImplicitly] params object[] args) +#pragma warning restore IDE0060 + { + // empty + } + + [UsedImplicitly] +#pragma warning disable IDE0060 + public static void LogWarning( + [UsedImplicitly] string errorMessage, + [UsedImplicitly] Object obj, + params object[] args) +#pragma warning restore IDE0060 + { + // empty + } + } +} From 7c580b4f1e2c93ed6b1fd0b1cefdf63967d3e33f Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Mon, 2 Sep 2024 18:59:17 -0700 Subject: [PATCH 021/212] fix RulesetActor.RefreshAttributes patch to only loop over up-to-date attributes --- SolastaUnfinishedBusiness/Patches/RulesetActorPatcher.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/SolastaUnfinishedBusiness/Patches/RulesetActorPatcher.cs b/SolastaUnfinishedBusiness/Patches/RulesetActorPatcher.cs index a1e8d75688..04525965c1 100644 --- a/SolastaUnfinishedBusiness/Patches/RulesetActorPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/RulesetActorPatcher.cs @@ -964,7 +964,8 @@ private static void RefreshClassModifiers(RulesetActor actor) return; } - foreach (var attribute in actor.Attributes) + foreach (var attribute in actor.Attributes + .Where(x => x.Value.UpToDate)) { foreach (var modifier in attribute.Value.ActiveModifiers) { From e3d92e571d00e3bcb398842309564d81432e6a5e Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Mon, 2 Sep 2024 20:01:23 -0700 Subject: [PATCH 022/212] add Dissonant Whispers spell --- ...esentation-InvalidSyntaxTranslation-en.txt | 4 + .../UnfinishedBusinessBlueprints/Assets.txt | 4 + ...teSpellStoringWandOfDissonantWhispers.json | 358 ++++++++++++ .../SpellStoringWandOfDissonantWhispers.json | 257 +++++++++ .../SpellDefinition/DissonantWhispers.json | 354 ++++++++++++ Documentation/Spells.md | 524 +++++++++--------- .../Models/SpellsContext.cs | 1 + .../Properties/Resources.Designer.cs | 10 + .../Properties/Resources.resx | 5 + .../Resources/Spells/DissonantWhispers.png | Bin 0 -> 12849 bytes .../Spells/SpellBuildersLevel01.cs | 114 ++++ .../Translations/de/Spells/Spells01-de.txt | 2 + .../Translations/en/Spells/Spells01-en.txt | 2 + .../Translations/es/Spells/Spells01-es.txt | 2 + .../Translations/fr/Spells/Spells01-fr.txt | 2 + .../Translations/it/Spells/Spells01-it.txt | 2 + .../Translations/ja/Spells/Spells01-ja.txt | 2 + .../Translations/ko/Spells/Spells01-ko.txt | 2 + .../pt-BR/Spells/Spells01-pt-BR.txt | 2 + .../Translations/ru/Spells/Spells01-ru.txt | 2 + .../zh-CN/Spells/Spells01-zh-CN.txt | 2 + 21 files changed, 1391 insertions(+), 260 deletions(-) create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerCreateSpellStoringWandOfDissonantWhispers.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/ItemDefinition/SpellStoringWandOfDissonantWhispers.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/DissonantWhispers.json create mode 100644 SolastaUnfinishedBusiness/Resources/Spells/DissonantWhispers.png diff --git a/Diagnostics/CE-Definitions-GuiPresentation-InvalidSyntaxTranslation-en.txt b/Diagnostics/CE-Definitions-GuiPresentation-InvalidSyntaxTranslation-en.txt index 77064506c8..7ba25ae168 100644 --- a/Diagnostics/CE-Definitions-GuiPresentation-InvalidSyntaxTranslation-en.txt +++ b/Diagnostics/CE-Definitions-GuiPresentation-InvalidSyntaxTranslation-en.txt @@ -1264,6 +1264,8 @@ PowerCreateSpellStoringWandOfDetectMagic Title='Detect Magic'. PowerCreateSpellStoringWandOfDetectMagic Description='Create a wand that can cast Detect Magic (I) spell using your Artificer spell attack modifier and save DC.'. PowerCreateSpellStoringWandOfDetectPoisonAndDisease Title='Detect Poison and Disease'. PowerCreateSpellStoringWandOfDetectPoisonAndDisease Description='Create a wand that can cast Detect Poison and Disease (I) spell using your Artificer spell attack modifier and save DC.'. +PowerCreateSpellStoringWandOfDissonantWhispers Title='Dissonant Whispers'. +PowerCreateSpellStoringWandOfDissonantWhispers Description='Create a wand that can cast Dissonant Whispers (I) spell using your Artificer spell attack modifier and save DC.'. PowerCreateSpellStoringWandOfEarthTremor Title='Earth Tremor'. PowerCreateSpellStoringWandOfEarthTremor Description='Create a wand that can cast Earth Tremor (I) spell using your Artificer spell attack modifier and save DC.'. PowerCreateSpellStoringWandOfEnhanceAbility Title='Enhance Ability'. @@ -1798,6 +1800,8 @@ SpellStoringWandOfDetectMagic Title='Wand of Detect Magic'. SpellStoringWandOfDetectMagic Description='This wand allows casting the Detect Magic spell using spell casting stats of the Artificer who created it.'. SpellStoringWandOfDetectPoisonAndDisease Title='Wand of Detect Poison and Disease'. SpellStoringWandOfDetectPoisonAndDisease Description='This wand allows casting the Detect Poison and Disease spell using spell casting stats of the Artificer who created it.'. +SpellStoringWandOfDissonantWhispers Title='Wand of Dissonant Whispers'. +SpellStoringWandOfDissonantWhispers Description='This wand allows casting the Dissonant Whispers spell using spell casting stats of the Artificer who created it.'. SpellStoringWandOfEarthTremor Title='Wand of Earth Tremor'. SpellStoringWandOfEarthTremor Description='This wand allows casting the Earth Tremor spell using spell casting stats of the Artificer who created it.'. SpellStoringWandOfEnhanceAbility Title='Wand of Enhance Ability'. diff --git a/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt b/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt index 303b8f7d68..06feae2323 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt +++ b/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt @@ -3117,6 +3117,7 @@ PowerCreateSpellStoringWandOfDarkvision FeatureDefinitionPowerSharedPool Feature PowerCreateSpellStoringWandOfDetectEvilAndGood FeatureDefinitionPowerSharedPool FeatureDefinition c3203e0f-0e77-56d8-86da-73e22107707a PowerCreateSpellStoringWandOfDetectMagic FeatureDefinitionPowerSharedPool FeatureDefinition 1898af57-819e-5e81-861e-4948a5e8ad5d PowerCreateSpellStoringWandOfDetectPoisonAndDisease FeatureDefinitionPowerSharedPool FeatureDefinition 99a9adc4-e7b4-55a2-a606-ed192b8761b3 +PowerCreateSpellStoringWandOfDissonantWhispers FeatureDefinitionPowerSharedPool FeatureDefinition 3cdfcada-8b8a-5599-b7b0-ec9c8ea50675 PowerCreateSpellStoringWandOfEarthTremor FeatureDefinitionPowerSharedPool FeatureDefinition f6785f5d-7b01-5d61-b85e-8e4eb20dd0dc PowerCreateSpellStoringWandOfEnhanceAbility FeatureDefinitionPowerSharedPool FeatureDefinition 6b586704-ffaf-5d38-ab50-115568e8f9b1 PowerCreateSpellStoringWandOfEntangle FeatureDefinitionPowerSharedPool FeatureDefinition e986e4ec-8073-5b88-b073-82166b07f749 @@ -5935,6 +5936,7 @@ PowerCreateSpellStoringWandOfDarkvision FeatureDefinitionPowerSharedPool Feature PowerCreateSpellStoringWandOfDetectEvilAndGood FeatureDefinitionPowerSharedPool FeatureDefinitionPower c3203e0f-0e77-56d8-86da-73e22107707a PowerCreateSpellStoringWandOfDetectMagic FeatureDefinitionPowerSharedPool FeatureDefinitionPower 1898af57-819e-5e81-861e-4948a5e8ad5d PowerCreateSpellStoringWandOfDetectPoisonAndDisease FeatureDefinitionPowerSharedPool FeatureDefinitionPower 99a9adc4-e7b4-55a2-a606-ed192b8761b3 +PowerCreateSpellStoringWandOfDissonantWhispers FeatureDefinitionPowerSharedPool FeatureDefinitionPower 3cdfcada-8b8a-5599-b7b0-ec9c8ea50675 PowerCreateSpellStoringWandOfEarthTremor FeatureDefinitionPowerSharedPool FeatureDefinitionPower f6785f5d-7b01-5d61-b85e-8e4eb20dd0dc PowerCreateSpellStoringWandOfEnhanceAbility FeatureDefinitionPowerSharedPool FeatureDefinitionPower 6b586704-ffaf-5d38-ab50-115568e8f9b1 PowerCreateSpellStoringWandOfEntangle FeatureDefinitionPowerSharedPool FeatureDefinitionPower e986e4ec-8073-5b88-b073-82166b07f749 @@ -8335,6 +8337,7 @@ SpellStoringWandOfDarkvision ItemDefinition ItemDefinition c0e87ea8-f654-5aae-90 SpellStoringWandOfDetectEvilAndGood ItemDefinition ItemDefinition 6bae061b-b4d8-5a31-9cd1-e8fdaf200eed SpellStoringWandOfDetectMagic ItemDefinition ItemDefinition 38583cd3-9d35-5240-9c24-f4e9eee9e60e SpellStoringWandOfDetectPoisonAndDisease ItemDefinition ItemDefinition 397a9d80-baf8-505f-808f-7df86e5c8de8 +SpellStoringWandOfDissonantWhispers ItemDefinition ItemDefinition 2f16c6e7-5a0d-5b07-89e6-b53f433567e8 SpellStoringWandOfEarthTremor ItemDefinition ItemDefinition e4c1eb68-0a74-5269-b12e-5f19026189aa SpellStoringWandOfEnhanceAbility ItemDefinition ItemDefinition 7d2b47e2-5062-5db7-8bab-220b2a74e26c SpellStoringWandOfEntangle ItemDefinition ItemDefinition 63c85249-2fb7-55f5-b577-19521bb06cce @@ -12142,6 +12145,7 @@ CrusadersMantle SpellDefinition SpellDefinition d2077997-23c2-5d34-84b3-794a89ef Dawn SpellDefinition SpellDefinition 1cc6ddda-bf5c-5961-9675-18e262a1f43d DetectMagicCantrip SpellDefinition SpellDefinition 6ccf60b4-cfd7-5180-9a92-beb9454bfdfd DispelMagicSpell SpellDefinition SpellDefinition c084fb4d-4762-5f1d-9e44-814a6af63b9f +DissonantWhispers SpellDefinition SpellDefinition a3308f76-57c3-56a7-acaa-9c505d7fdaa7 DivineWrath SpellDefinition SpellDefinition 754381b9-32f7-575a-b831-aa815f9dd566 DivineWrathNecrotic SpellDefinition SpellDefinition 6627d4c5-b7ad-517a-8f1f-60d2af400885 DivineWrathRadiant SpellDefinition SpellDefinition e6d29d57-ae9f-5d52-938b-4a5fb7d44cf7 diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerCreateSpellStoringWandOfDissonantWhispers.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerCreateSpellStoringWandOfDissonantWhispers.json new file mode 100644 index 0000000000..545578bcd2 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerCreateSpellStoringWandOfDissonantWhispers.json @@ -0,0 +1,358 @@ +{ + "$type": "FeatureDefinitionPowerSharedPool, SolastaUnfinishedBusiness", + "effectDescription": { + "$type": "EffectDescription, Assembly-CSharp", + "rangeType": "Self", + "rangeParameter": 0, + "halfDamageOnAMiss": false, + "hitAffinitiesByTargetTag": [], + "targetType": "Self", + "itemSelectionType": "None", + "targetParameter": 1, + "targetParameter2": 2, + "emissiveBorder": "None", + "emissiveParameter": 1, + "requiresTargetProximity": false, + "targetProximityDistance": 6, + "targetExcludeCaster": false, + "canBePlacedOnCharacter": true, + "affectOnlyGround": false, + "targetFilteringMethod": "CharacterOnly", + "targetFilteringTag": "No", + "requiresVisibilityForPosition": true, + "inviteOptionalAlly": false, + "slotTypes": [], + "recurrentEffect": "No", + "retargetAfterDeath": false, + "retargetActionType": "Bonus", + "poolFilterDiceNumber": 5, + "poolFilterDieType": "D8", + "trapRangeType": "Triggerer", + "targetConditionName": "", + "targetConditionAsset": null, + "targetSide": "All", + "durationType": "Permanent", + "durationParameter": 0, + "endOfEffect": "EndOfTurn", + "hasSavingThrow": false, + "disableSavingThrowOnAllies": false, + "savingThrowAbility": "Dexterity", + "ignoreCover": false, + "grantedConditionOnSave": null, + "rollSaveOnlyIfRelevantForms": false, + "hasShoveRoll": false, + "createdByCharacter": true, + "difficultyClassComputation": "SpellCastingFeature", + "savingThrowDifficultyAbility": "Wisdom", + "fixedSavingThrowDifficultyClass": 15, + "savingThrowAffinitiesBySense": [], + "savingThrowAffinitiesByFamily": [], + "damageAffinitiesByFamily": [], + "advantageForEnemies": false, + "canBeDispersed": false, + "hasVelocity": false, + "velocityCellsPerRound": 2, + "velocityType": "AwayFromSourceOriginalPosition", + "restrictedCreatureFamilies": [], + "immuneCreatureFamilies": [], + "restrictedCharacterSizes": [], + "hasLimitedEffectPool": false, + "effectPoolAmount": 60, + "effectApplication": "All", + "effectFormFilters": [], + "effectForms": [ + { + "$type": "EffectForm, Assembly-CSharp", + "formType": "Summon", + "addBonusMode": "None", + "applyLevel": "No", + "levelType": "ClassLevel", + "levelMultiplier": 1, + "diceByLevelTable": [], + "createdByCharacter": true, + "createdByCondition": false, + "hasSavingThrow": true, + "savingThrowAffinity": "None", + "dcModifier": 0, + "canSaveToCancel": false, + "saveOccurence": "EndOfTurn", + "summonForm": { + "$type": "SummonForm, Assembly-CSharp", + "summonType": "InventoryItem", + "itemDefinition": "Definition:SpellStoringWandOfDissonantWhispers:2f16c6e7-5a0d-5b07-89e6-b53f433567e8", + "trackItem": true, + "monsterDefinitionName": "", + "number": 1, + "conditionDefinition": null, + "persistOnConcentrationLoss": true, + "decisionPackage": null, + "effectProxyDefinitionName": null + }, + "hasFilterId": false, + "filterId": 0 + } + ], + "specialFormsDescription": "", + "effectAdvancement": { + "$type": "EffectAdvancement, Assembly-CSharp", + "effectIncrementMethod": "None", + "incrementMultiplier": 1, + "additionalTargetsPerIncrement": 0, + "additionalSubtargetsPerIncrement": 0, + "additionalDicePerIncrement": 0, + "additionalSpellLevelPerIncrement": 0, + "additionalSummonsPerIncrement": 0, + "additionalHPPerIncrement": 0, + "additionalTempHPPerIncrement": 0, + "additionalTargetCellsPerIncrement": 0, + "additionalItemBonus": 0, + "additionalWeaponDie": 0, + "alteredDuration": "None" + }, + "speedType": "Instant", + "speedParameter": 10.0, + "offsetImpactTimeBasedOnDistance": false, + "offsetImpactTimeBasedOnDistanceFactor": 0.1, + "offsetImpactTimePerTarget": 0.0, + "effectParticleParameters": { + "$type": "EffectParticleParameters, Assembly-CSharp", + "casterParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "c61bb30a4b6e80642a36538c6ff1d675", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "casterSelfParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "casterQuickSpellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "targetParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "effectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "effectSubTargetParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "zoneParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "beforeImpactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "impactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectImpactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceParticlePerIndex": "", + "activeEffectSurfaceParticlePerIndexCount": 0, + "emissiveBorderCellStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderCellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderCellEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "f4489c0ea1762ec4dbe7fedbbcf0d4a8", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "3b107035e3bdbc6418aedb674221f5e3", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "forceApplyZoneParticle": false, + "applyEmissionColorOnWeapons": false, + "emissionColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "emissionColorFadeInDuration": 0.0, + "emissionColorFadeOutDuration": 0.0 + }, + "effectAIParameters": { + "$type": "EffectAIParameters, Assembly-CSharp", + "aoeScoreMultiplier": 1.0, + "cooldownForCaster": 0, + "cooldownForBattle": 0, + "sortingScoreMultiplier": 1.0, + "dynamicCooldown": false + }, + "animationMagicEffect": "Animation1", + "lightCounterDispellsEffect": false, + "hideSavingThrowAnimation": false + }, + "delegatedToAction": false, + "surrogateToSpell": null, + "triggeredBySpecialMove": false, + "activationTime": "Action", + "autoActivationRequiredTargetSenseType": "None", + "autoActivationRequiredTargetCreatureTag": "", + "autoActivationPowerTag": "", + "triggeringPower": null, + "copyTargetingFromTriggeringPower": false, + "reactionContext": "None", + "damageTypes": [], + "reactionName": "", + "reactionActingCharacterParamIdx": 0, + "reactionAttackerParamIdx": -1, + "hasCastingFailure": false, + "castingSuccessComputation": "CasterLevel", + "canUseInDialog": false, + "disableIfConditionIsOwned": null, + "disableIfTargetConditionIsOwned": null, + "rechargeRate": "LongRest", + "costPerUse": 1, + "spellcastingFeature": null, + "usesDetermination": "Fixed", + "abilityScoreDetermination": "Explicit", + "usesAbilityScoreName": "Charisma", + "fixedUsesPerRecharge": 1, + "abilityScore": "Intelligence", + "attackHitComputation": "AbilityScore", + "fixedAttackHit": 0, + "abilityScoreBonusToAttack": false, + "proficiencyBonusToAttack": false, + "uniqueInstance": true, + "showCasting": true, + "shortTitleOverride": "", + "overriddenPower": null, + "includeBaseDescription": false, + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "Dissonant Whispers", + "description": "Create a wand that can cast Dissonant Whispers (I) spell using your Artificer spell attack modifier and save DC.", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "6b5b3868-2125-599d-a33d-8122477ebb41", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "3cdfcada-8b8a-5599-b7b0-ec9c8ea50675", + "contentPack": 9999, + "name": "PowerCreateSpellStoringWandOfDissonantWhispers" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ItemDefinition/SpellStoringWandOfDissonantWhispers.json b/Diagnostics/UnfinishedBusinessBlueprints/ItemDefinition/SpellStoringWandOfDissonantWhispers.json new file mode 100644 index 0000000000..5fa3b4a491 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/ItemDefinition/SpellStoringWandOfDissonantWhispers.json @@ -0,0 +1,257 @@ +{ + "$type": "ItemDefinition, Assembly-CSharp", + "inDungeonEditor": false, + "merchantCategory": "MagicDevice", + "weight": 0.5, + "slotTypes": [ + "UtilitySlot", + "ContainerSlot" + ], + "slotsWhereActive": [ + "MainHandSlot", + "OffHandSlot", + "UtilitySlot" + ], + "activeOnGround": false, + "destroyedWhenUnequiped": false, + "forceEquip": false, + "forceEquipSlot": "", + "canBeStacked": false, + "stackSize": 10, + "defaultStackCount": -1, + "costs": [ + 0, + 0, + 0, + 0, + 0 + ], + "itemTags": [ + "Wood" + ], + "activeTags": [], + "inactiveTags": [], + "magical": true, + "requiresAttunement": false, + "requiresIdentification": false, + "requiredAttunementClasses": [], + "itemRarity": "Rare", + "incompatibleWithMonkReturnMissile": false, + "staticProperties": [], + "isArmor": false, + "isWeapon": false, + "isAmmunition": false, + "isUsableDevice": true, + "usableDeviceDescription": { + "$type": "UsableDeviceDescription, Assembly-CSharp", + "usage": "Charges", + "chargesCapital": "Fixed", + "chargesCapitalNumber": 6, + "chargesCapitalDie": "D1", + "chargesCapitalBonus": 0, + "rechargeRate": "None", + "rechargeNumber": 1, + "rechargeDie": "D1", + "rechargeBonus": 0, + "outOfChargesConsequence": "Destroy", + "magicAttackBonus": -2, + "saveDC": -2, + "deviceFunctions": [ + { + "$type": "DeviceFunctionDescription, Assembly-CSharp", + "parentUsage": "ByFunction", + "useAffinity": "ChargeCost", + "useAmount": 1, + "rechargeRate": "Dawn", + "durationType": "Instantaneous", + "canOverchargeSpell": false, + "type": "Spell", + "spellDefinition": "Definition:DissonantWhispers:a3308f76-57c3-56a7-acaa-9c505d7fdaa7", + "featureDefinitionPower": null + } + ], + "usableDeviceTags": [], + "onUseParticle": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + } + }, + "isTool": false, + "isMusicalInstrument": false, + "musicalInstrumentDefinition": null, + "isStarterPack": false, + "isContainerItem": false, + "isLightSourceItem": false, + "isFocusItem": true, + "focusItemDefinition": { + "$type": "FocusItemDescription, Assembly-CSharp", + "focusType": "Arcane", + "shownAsFocus": true + }, + "isWealthPile": false, + "isSpellbook": false, + "isDocument": false, + "isFood": false, + "isFactionRelic": false, + "personalityFlagOccurences": [], + "soundEffectDescriptionOverride": { + "$type": "SoundEffectDescription, Assembly-CSharp", + "startEvent": { + "$type": "AK.Wwise.Event, AK.Wwise.Unity.API.WwiseTypes", + "WwiseObjectReference": null, + "idInternal": 0, + "valueGuidInternal": { + "$type": "System.Byte[], mscorlib", + "$value": "" + } + }, + "stopEvent": { + "$type": "AK.Wwise.Event, AK.Wwise.Unity.API.WwiseTypes", + "WwiseObjectReference": null, + "idInternal": 0, + "valueGuidInternal": { + "$type": "System.Byte[], mscorlib", + "$value": "" + } + }, + "startSwitch": { + "$type": "AK.Wwise.Switch, AK.Wwise.Unity.API.WwiseTypes", + "WwiseObjectReference": null, + "groupIdInternal": 0, + "groupGuidInternal": { + "$type": "System.Byte[], mscorlib", + "$value": "" + }, + "idInternal": 0, + "valueGuidInternal": { + "$type": "System.Byte[], mscorlib", + "$value": "" + } + }, + "stopSwitch": { + "$type": "AK.Wwise.Switch, AK.Wwise.Unity.API.WwiseTypes", + "WwiseObjectReference": null, + "groupIdInternal": 0, + "groupGuidInternal": { + "$type": "System.Byte[], mscorlib", + "$value": "" + }, + "idInternal": 0, + "valueGuidInternal": { + "$type": "System.Byte[], mscorlib", + "$value": "" + } + }, + "guiStoreBody": { + "$type": "AK.Wwise.Event, AK.Wwise.Unity.API.WwiseTypes", + "WwiseObjectReference": null, + "idInternal": 0, + "valueGuidInternal": { + "$type": "System.Byte[], mscorlib", + "$value": "" + } + }, + "guiPickBody": { + "$type": "AK.Wwise.Event, AK.Wwise.Unity.API.WwiseTypes", + "WwiseObjectReference": null, + "idInternal": 0, + "valueGuidInternal": { + "$type": "System.Byte[], mscorlib", + "$value": "" + } + }, + "guiStoreOther": { + "$type": "AK.Wwise.Event, AK.Wwise.Unity.API.WwiseTypes", + "WwiseObjectReference": null, + "idInternal": 0, + "valueGuidInternal": { + "$type": "System.Byte[], mscorlib", + "$value": "" + } + }, + "guiPickOther": { + "$type": "AK.Wwise.Event, AK.Wwise.Unity.API.WwiseTypes", + "WwiseObjectReference": null, + "idInternal": 0, + "valueGuidInternal": { + "$type": "System.Byte[], mscorlib", + "$value": "" + } + } + }, + "soundEffectOnHitDescriptionOverride": { + "$type": "SoundEffectOnHitDescription, Assembly-CSharp", + "switchOnHit": { + "$type": "AK.Wwise.Switch, AK.Wwise.Unity.API.WwiseTypes", + "WwiseObjectReference": null, + "groupIdInternal": 0, + "groupGuidInternal": { + "$type": "System.Byte[], mscorlib", + "$value": "" + }, + "idInternal": 0, + "valueGuidInternal": { + "$type": "System.Byte[], mscorlib", + "$value": "" + } + } + }, + "itemPresentation": { + "$type": "ItemPresentation, Assembly-CSharp", + "unidentifiedTitle": "Equipment/&WandSpecialTitle", + "unidentifiedDescription": "Equipment/&WandSpecialDescription", + "overrideSubtype": "None", + "assetReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "scaleFactorWhileWielded": 1.0, + "useArmorAddressableName": false, + "isArmorAddressableNameGenderSpecific": false, + "armorAddressableName": "", + "maleArmorAddressableName": "", + "femaleArmorAddressableName": "", + "useCustomArmorMaterial": false, + "customArmorMaterial": "", + "ignoreCustomArmorMaterialOnCommonClothes": false, + "hasCrownVariationMask": false, + "crownVariationMask": 0, + "sameBehavioursForMaleAndFemale": true, + "maleBodyPartBehaviours": [], + "femaleBodyPartBehaviours": [], + "itemFlags": [], + "serializedVersion": 1 + }, + "clueSuspectPairs": [], + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "Wand of Dissonant Whispers", + "description": "This wand allows casting the Dissonant Whispers spell using spell casting stats of the Artificer who created it.", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "99f5e6021bff7994bb5b9f6832f8145a", + "m_SubObjectName": "WandOfMagicMissiles", + "m_SubObjectType": "UnityEngine.Sprite, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "2f16c6e7-5a0d-5b07-89e6-b53f433567e8", + "contentPack": 9999, + "name": "SpellStoringWandOfDissonantWhispers" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/DissonantWhispers.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/DissonantWhispers.json new file mode 100644 index 0000000000..e57fd8e93c --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/DissonantWhispers.json @@ -0,0 +1,354 @@ +{ + "$type": "SpellDefinition, Assembly-CSharp", + "spellsBundle": false, + "subspellsList": [], + "compactSubspellsTooltip": false, + "implemented": true, + "schoolOfMagic": "SchoolEnchantment", + "spellLevel": 1, + "ritual": false, + "uniqueInstance": false, + "castingTime": "Action", + "reactionContext": "None", + "ritualCastingTime": "Action", + "requiresConcentration": false, + "effectDescription": { + "$type": "EffectDescription, Assembly-CSharp", + "rangeType": "Distance", + "rangeParameter": 12, + "halfDamageOnAMiss": false, + "hitAffinitiesByTargetTag": [], + "targetType": "IndividualsUnique", + "itemSelectionType": "None", + "targetParameter": 1, + "targetParameter2": 2, + "emissiveBorder": "None", + "emissiveParameter": 1, + "requiresTargetProximity": false, + "targetProximityDistance": 6, + "targetExcludeCaster": false, + "canBePlacedOnCharacter": true, + "affectOnlyGround": false, + "targetFilteringMethod": "CharacterOnly", + "targetFilteringTag": "No", + "requiresVisibilityForPosition": true, + "inviteOptionalAlly": false, + "slotTypes": [], + "recurrentEffect": "No", + "retargetAfterDeath": false, + "retargetActionType": "Bonus", + "poolFilterDiceNumber": 5, + "poolFilterDieType": "D8", + "trapRangeType": "Triggerer", + "targetConditionName": "", + "targetConditionAsset": null, + "targetSide": "Enemy", + "durationType": "Instantaneous", + "durationParameter": 1, + "endOfEffect": "EndOfTurn", + "hasSavingThrow": true, + "disableSavingThrowOnAllies": false, + "savingThrowAbility": "Wisdom", + "ignoreCover": true, + "grantedConditionOnSave": null, + "rollSaveOnlyIfRelevantForms": false, + "hasShoveRoll": false, + "createdByCharacter": true, + "difficultyClassComputation": "SpellCastingFeature", + "savingThrowDifficultyAbility": "Wisdom", + "fixedSavingThrowDifficultyClass": 10, + "savingThrowAffinitiesBySense": [], + "savingThrowAffinitiesByFamily": [], + "damageAffinitiesByFamily": [], + "advantageForEnemies": false, + "canBeDispersed": false, + "hasVelocity": false, + "velocityCellsPerRound": 2, + "velocityType": "AwayFromSourceOriginalPosition", + "restrictedCreatureFamilies": [], + "immuneCreatureFamilies": [], + "restrictedCharacterSizes": [], + "hasLimitedEffectPool": false, + "effectPoolAmount": 60, + "effectApplication": "All", + "effectFormFilters": [], + "effectForms": [ + { + "$type": "EffectForm, Assembly-CSharp", + "formType": "Damage", + "addBonusMode": "None", + "applyLevel": "No", + "levelType": "ClassLevel", + "levelMultiplier": 1, + "diceByLevelTable": [], + "createdByCharacter": true, + "createdByCondition": false, + "hasSavingThrow": true, + "savingThrowAffinity": "HalfDamage", + "dcModifier": 0, + "canSaveToCancel": false, + "saveOccurence": "EndOfTurn", + "damageForm": { + "$type": "DamageForm, Assembly-CSharp", + "versatile": false, + "diceNumber": 3, + "dieType": "D6", + "overrideWithBardicInspirationDie": false, + "versatileDieType": "D1", + "bonusDamage": 0, + "damageType": "DamagePsychic", + "ancestryType": "Sorcerer", + "healFromInflictedDamage": "Never", + "hitPointsFloor": 0, + "forceKillOnZeroHp": false, + "specialDeathCondition": null, + "ignoreFlyingCharacters": false, + "ignoreCriticalDoubleDice": false + }, + "hasFilterId": false, + "filterId": 0 + } + ], + "specialFormsDescription": "", + "effectAdvancement": { + "$type": "EffectAdvancement, Assembly-CSharp", + "effectIncrementMethod": "PerAdditionalSlotLevel", + "incrementMultiplier": 1, + "additionalTargetsPerIncrement": 0, + "additionalSubtargetsPerIncrement": 0, + "additionalDicePerIncrement": 1, + "additionalSpellLevelPerIncrement": 0, + "additionalSummonsPerIncrement": 0, + "additionalHPPerIncrement": 0, + "additionalTempHPPerIncrement": 0, + "additionalTargetCellsPerIncrement": 0, + "additionalItemBonus": 0, + "additionalWeaponDie": 0, + "alteredDuration": "None" + }, + "speedType": "Instant", + "speedParameter": 10.0, + "offsetImpactTimeBasedOnDistance": false, + "offsetImpactTimeBasedOnDistanceFactor": 0.1, + "offsetImpactTimePerTarget": 0.0, + "effectParticleParameters": { + "$type": "EffectParticleParameters, Assembly-CSharp", + "casterParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "2a5fb39a57ad3754ebaaaccd9e92e9ce", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "casterSelfParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "casterQuickSpellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "targetParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "effectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "05c5c0f49bcabdf449d3dc9ba3ae10cb", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "effectSubTargetParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "zoneParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "beforeImpactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "impactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "c50fd7065bb34304ca1f1a3a02dcd532", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectImpactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceParticlePerIndex": "", + "activeEffectSurfaceParticlePerIndexCount": 0, + "emissiveBorderCellStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderCellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderCellEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "forceApplyZoneParticle": false, + "applyEmissionColorOnWeapons": false, + "emissionColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "emissionColorFadeInDuration": 0.0, + "emissionColorFadeOutDuration": 0.0 + }, + "effectAIParameters": { + "$type": "EffectAIParameters, Assembly-CSharp", + "aoeScoreMultiplier": 1.0, + "cooldownForCaster": 0, + "cooldownForBattle": 0, + "sortingScoreMultiplier": 1.0, + "dynamicCooldown": false + }, + "animationMagicEffect": "Animation0", + "lightCounterDispellsEffect": false, + "hideSavingThrowAnimation": false + }, + "aiParameters": { + "$type": "SpellAIParameters, Assembly-CSharp", + "learnPriority": "Low", + "preparePriority": "Low" + }, + "concentrationAction": "None", + "verboseComponent": true, + "somaticComponent": false, + "materialComponentType": "Mundane", + "specificMaterialComponentTag": "Diamond", + "specificMaterialComponentCostGp": 100, + "specificMaterialComponentConsumed": true, + "terminateOnItemUnequip": false, + "displayConditionDuration": false, + "vocalSpellSemeType": "Attack", + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "Spell/&DissonantWhispersTitle", + "description": "Spell/&DissonantWhispersDescription", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "6b5b3868-2125-599d-a33d-8122477ebb41", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "a3308f76-57c3-56a7-acaa-9c505d7fdaa7", + "contentPack": 9999, + "name": "DissonantWhispers" +} \ No newline at end of file diff --git a/Documentation/Spells.md b/Documentation/Spells.md index 2144380039..bba88dce5b 100644 --- a/Documentation/Spells.md +++ b/Documentation/Spells.md @@ -251,828 +251,832 @@ Detect nearby magic objects or creatures. TMP For the duration you sense the presence and location of poisonous creatures and diseases within 6 cells of you. -# 63. - Divine Favor (V,S) level 1 Evocation [Concentration] [SOL] +# 63. - Dissonant Whispers (V) level 1 Enchantment [UB] + +You whisper a discordant melody that only one creature of your choice within range can hear, wracking it with terrible pain. The target must make a Wisdom saving throw. On a failed save, it takes 3d6 psychic damage and must immediately use its reaction, if available, to move as far as its speed allows away from you. The creature doesn't move into obviously dangerous ground, such as a fire or a pit. On a successful save, the target takes half as much damage and doesn't have to move away. When you cast this spell using a spell slot of 2nd level or higher, the damage increases by 1d6 for each slot level above 1st. + +# 64. - Divine Favor (V,S) level 1 Evocation [Concentration] [SOL] Gain additional radiant damage for a limited time. -# 64. - *Earth Tremor* © (V,S) level 1 Evocation [UB] +# 65. - *Earth Tremor* © (V,S) level 1 Evocation [UB] You strike the ground and unleash a tremor of seismic force, hurling up earth, rock, and sand. -# 65. - *Ensnaring Strike* © (V) level 1 Conjuration [Concentration] [UB] +# 66. - *Ensnaring Strike* © (V) level 1 Conjuration [Concentration] [UB] The next time you hit a creature with a weapon attack before this spell ends, a writhing mass of thorny vines appears at the point of impact, and the target must succeed on a Strength saving throw or be restrained by the magical vines until the spell ends.While restrained by this spell, the target takes 1d6 piercing damage at the start of each of its turns. A creature restrained by the vines can use its action to make a Strength check against your spell save DC. -# 66. - Entangle (V,S) level 1 Conjuration [Concentration] [SOL] +# 67. - Entangle (V,S) level 1 Conjuration [Concentration] [SOL] Creatures in a four-cell square area are restrained if they fail a STR saving throw -# 67. - Expeditious Retreat (V,S) level 1 Transmutation [Concentration] [SOL] +# 68. - Expeditious Retreat (V,S) level 1 Transmutation [Concentration] [SOL] Gain movement points and become able to dash as a bonus action for a limited time. -# 68. - Faerie Fire (V) level 1 Evocation [Concentration] [SOL] +# 69. - Faerie Fire (V) level 1 Evocation [Concentration] [SOL] Highlight creatures to give advantage to anyone attacking them. -# 69. - False Life (V,S) level 1 Necromancy [SOL] +# 70. - False Life (V,S) level 1 Necromancy [SOL] Gain a few temporary hit points for a limited time. -# 70. - Feather Fall (V) level 1 Transmutation [SOL] +# 71. - Feather Fall (V) level 1 Transmutation [SOL] Provide a safe landing when you or an ally falls. -# 71. - *Find Familiar* © (V,S) level 1 Conjuration [UB] +# 72. - *Find Familiar* © (V,S) level 1 Conjuration [UB] You gain the service of a familiar. The familiar can use the help action, and you can cast any touch or melee hit spell through the familiar. -# 72. - Fog Cloud (V,S) level 1 Conjuration [Concentration] [SOL] +# 73. - Fog Cloud (V,S) level 1 Conjuration [Concentration] [SOL] Generate a sphere of thick fog for a limited time. The area is heavily obscured, penalizing creatures inside it that rely on sight. -# 73. - *Gift of Alacrity* © (V,S) level 1 Divination [UB] +# 74. - *Gift of Alacrity* © (V,S) level 1 Divination [UB] You touch a willing creature. For the duration, the target can add 1d8 to its initiative rolls. -# 74. - Goodberry (V,S) level 1 Transmutation [SOL] +# 75. - Goodberry (V,S) level 1 Transmutation [SOL] Creates 10 berries infused with magic. Eating a berry restores 1 hit point and provides sustenance for a long rest. Berries vanish after a long rest. -# 75. - Grease (V,S) level 1 Conjuration [SOL] +# 76. - Grease (V,S) level 1 Conjuration [SOL] Cover an area of 2 x 2 cells with grease. Creatures trying to cross it may fall prone. -# 76. - Guiding Bolt (V,S) level 1 Evocation [SOL] +# 77. - Guiding Bolt (V,S) level 1 Evocation [SOL] Launch a radiant attack against an enemy and make them easy to hit. -# 77. - *Hail of Thorns* © (V) level 1 Conjuration [Concentration] [UB] +# 78. - *Hail of Thorns* © (V) level 1 Conjuration [Concentration] [UB] The next time you hit a creature with a ranged weapon attack before the spell ends, this spell creates a rain of thorns that sprouts from your ranged weapon or ammunition. In addition to the normal effect of the attack, the target of the attack and each creature within 5 feet of it must make a Dexterity saving throw. A creature takes 1d10 piercing damage on a failed save, or half as much damage on a successful one. -# 78. - Healing Word (V) level 1 Evocation [SOL] +# 79. - Healing Word (V) level 1 Evocation [SOL] Heal an ally you can see. -# 79. - Hellish Rebuke (V,S) level 1 Evocation [SOL] +# 80. - Hellish Rebuke (V,S) level 1 Evocation [SOL] When you are damaged by a creature within range, you can use your reaction to inflict fire damage back. -# 80. - Heroism (V,S) level 1 Enchantment [Concentration] [SOL] +# 81. - Heroism (V,S) level 1 Enchantment [Concentration] [SOL] An ally gains temporary hit points and cannot be frightened for a limited time. -# 81. - Hideous Laughter (V,S) level 1 Enchantment [Concentration] [SOL] +# 82. - Hideous Laughter (V,S) level 1 Enchantment [Concentration] [SOL] Make an enemy helpless with irresistible laughter. -# 82. - Hunter's Mark (V) level 1 Divination [Concentration] [SOL] +# 83. - Hunter's Mark (V) level 1 Divination [Concentration] [SOL] An enemy gets additional damage from you, and you can easily detect it for a limited time. -# 83. - *Ice Knife* © (S) level 1 Conjuration [UB] +# 84. - *Ice Knife* © (S) level 1 Conjuration [UB] You create a shard of ice and fling it at one creature within range. Make a ranged spell attack against the target. On a hit, the target takes 1d10 piercing damage. Hit or miss, the shard then explodes. The target and each creature within 5 feet of the point where the ice exploded must succeed on a Dexterity saving throw or take 2d6 cold damage. When you cast this spell using a spell slot of 2nd level or higher, both the cold and piercing damage increase by 1 die for each slot level above 1st. -# 84. - Identify (M,V,S) level 1 Divination [SOL] +# 85. - Identify (M,V,S) level 1 Divination [SOL] Identify the hidden properties of an object. -# 85. - Inflict Wounds (V,S) level 1 Necromancy [SOL] +# 86. - Inflict Wounds (V,S) level 1 Necromancy [SOL] Deal necrotic damage to an enemy you hit. -# 86. - Jump (V,S) level 1 Transmutation [SOL] +# 87. - Jump (V,S) level 1 Transmutation [SOL] Increase an ally's jumping distance. -# 87. - Jump (V,S) level 1 Transmutation [SOL] +# 88. - Jump (V,S) level 1 Transmutation [SOL] Increase an ally's jumping distance. -# 88. - Longstrider (V,S) level 1 Transmutation [SOL] +# 89. - Longstrider (V,S) level 1 Transmutation [SOL] Increases an ally's speed by two cells per turn. -# 89. - Mage Armor (V,S) level 1 Abjuration [SOL] +# 90. - Mage Armor (V,S) level 1 Abjuration [SOL] Provide magical armor to an ally who doesn't wear armor. -# 90. - Magic Missile (V,S) level 1 Evocation [SOL] +# 91. - Magic Missile (V,S) level 1 Evocation [SOL] Strike one or more enemies with projectiles that can't miss. -# 91. - *Magnify Gravity* © (V,S) level 1 Transmutation [UB] +# 92. - *Magnify Gravity* © (V,S) level 1 Transmutation [UB] Sharply increase gravity in a 10-foot-radius sphere to crush and slow targets. -# 92. - Malediction (V,S) level 1 Enchantment [Concentration] [SOL] +# 93. - Malediction (V,S) level 1 Enchantment [Concentration] [SOL] Until the spell ends, whenever you hit a target with an attack you deal an extra 1d6 magical damage of the same type as the attack's damage. -# 93. - Mule (V,S) level 1 Transmutation [UB] +# 94. - Mule (V,S) level 1 Transmutation [UB] The recipient of this spell is able to ignore the effects of heavy loads or armor on movement speed. They can also carry slightly more weight. -# 94. - Protect vs Evil & Good (V,S) level 1 Abjuration [Concentration] [SOL] +# 95. - Protect vs Evil & Good (V,S) level 1 Abjuration [Concentration] [SOL] Touch an ally to give them protection from evil or good creatures for a limited time. -# 95. - Radiant Motes (V,S) level 1 Evocation [UB] +# 96. - Radiant Motes (V,S) level 1 Evocation [UB] Unleashes a swarm of 4 radiant projectiles that deal 1d4 radiant damage each. When you cast this spell using a spell slot of 2nd level or higher, the spell creates 1 more projectile for each slot above 1st. -# 96. - *Sanctuary* © (V,S) level 1 Abjuration [UB] +# 97. - *Sanctuary* © (V,S) level 1 Abjuration [UB] You ward a creature within range against attack. Until the spell ends, any creature who targets the warded creature with an attack or a harmful spell must first make a Wisdom saving throw. On a failed save, the creature loses the attack or spell. This spell doesn't protect the warded creature from area effects. If the warded creature makes an attack or casts a spell, this spell ends. -# 97. - *Searing Smite* © (V) level 1 Evocation [Concentration] [UB] +# 98. - *Searing Smite* © (V) level 1 Evocation [Concentration] [UB] On your next hit your weapon flares with white-hot intensity, and the attack deals an extra 1d6 fire damage to the target and causes the target to ignite in flames. At the start of each of its turns the target must make a successful Constitution saving throw to stop burning, or take 1d6 fire damage. Higher Levels: for each slot level above 1st, the initial extra damage dealt by the attack increases by 1d6. -# 98. - Shield (V,S) level 1 Abjuration [SOL] +# 99. - Shield (V,S) level 1 Abjuration [SOL] Increase your AC by 5 just before you would take a hit. -# 99. - Shield of Faith (V,S) level 1 Abjuration [Concentration] [SOL] +# 100. - Shield of Faith (V,S) level 1 Abjuration [Concentration] [SOL] Increase an ally's AC by 2 for a limited time. -# 100. - Sleep (V,S) level 1 Enchantment [SOL] +# 101. - Sleep (V,S) level 1 Enchantment [SOL] Put a number of creatures to sleep for a limited time. Roll 5d8: the total is how many hit points of creatures this spell can affect. -# 101. - *Tasha's Caustic Brew* © (V,S) level 1 Evocation [Concentration] [UB] +# 102. - *Tasha's Caustic Brew* © (V,S) level 1 Evocation [Concentration] [UB] A stream of acid emanates from you in a line 30 feet long and 5 feet wide in a direction you choose. Each creature in the line must succeed on a Dexterity saving throw or be covered in acid for the spell's duration or until a creature uses its action to scrape or wash the acid off itself or another creature. A creature covered in the acid takes 2d4 acid damage at start of each of its turns. When you cast this spell using a spell slot 2nd level or higher, the damage increases by 2d4 for each slot level above 1st. -# 102. - *Thunderous Smite* © (V) level 1 Evocation [Concentration] [UB] +# 103. - *Thunderous Smite* © (V) level 1 Evocation [Concentration] [UB] On your next hit your weapon rings with thunder and the attack deals an extra 2d6 thunder damage to the target. Additionally, if the target is a creature, it must succeed on a Strength saving throw or be pushed 10 ft away from you and knocked prone. -# 103. - Thunderwave (V,S) level 1 Evocation [SOL] +# 104. - Thunderwave (V,S) level 1 Evocation [SOL] Emit a wave of force that causes damage and pushes creatures and objects away. -# 104. - Tiefling's Hellish Rebuke (V,S) level 1 Evocation [SOL] +# 105. - Tiefling's Hellish Rebuke (V,S) level 1 Evocation [SOL] When you are damaged by a creature withing range, you can use your reaction to inflict fire damage back at them. This tiefling version of the spell is more powerful than the common one but cannot use a higher level Spell Slot to increase damage. -# 105. - *Witch Bolt* © (V,S) level 1 Evocation [Concentration] [UB] +# 106. - *Witch Bolt* © (V,S) level 1 Evocation [Concentration] [UB] A beam of crackling, blue energy lances out toward a creature within range, forming a sustained arc of lightning between you and the target. Make a ranged spell attack against that creature. On a hit, the target takes 1d12 lightning damage, and on each of your turns for the duration, you can use your action to deal 1d12 lightning damage to the target automatically. The spell ends if you use your action to do anything else. The spell also ends if the target is ever outside the spell's range. When you cast this spell using a spell slot of 2nd level or higher, the damage increases by 1d12 for each slot level above 1st. -# 106. - *Wrathful Smite* © (V) level 1 Evocation [Concentration] [UB] +# 107. - *Wrathful Smite* © (V) level 1 Evocation [Concentration] [UB] Your next hit deals additional 1d6 psychic damage. If target fails WIS saving throw its mind explodes in pain, and it becomes frightened. -# 107. - *Zephyr Strike* © (V) level 1 Transmutation [Concentration] [UB] +# 108. - *Zephyr Strike* © (V) level 1 Transmutation [Concentration] [UB] You move like the wind. For the duration, your movement doesn't provoke opportunity attacks. Once before the spell ends, you can give yourself advantage on one weapon attack roll on your turn. That attack deals an extra 1d8 force damage on a hit. Whether you hit or miss, your walking speed increases by 30 feet until the end of that turn. -# 108. - Acid Arrow (V,S) level 2 Evocation [SOL] +# 109. - Acid Arrow (V,S) level 2 Evocation [SOL] Launch an acid arrow that deals some damage even if you miss your shot. -# 109. - *Aganazzar's Scorcher* © (V,S) level 2 Evocation [UB] +# 110. - *Aganazzar's Scorcher* © (V,S) level 2 Evocation [UB] A line of roaring flame 30 feet long and 5 feet wide emanates from you in a direction you choose. Each creature in the line must make a Dexterity saving throw. A creature takes 3d10 fire damage on a failed save, or half as much damage on a successful one. When you cast this spell using a spell slot of 3rd level or higher, the damage increases by 1d10 for each slot level above 2nd. -# 110. - Aid (V,S) level 2 Abjuration [SOL] +# 111. - Aid (V,S) level 2 Abjuration [SOL] Temporarily increases hit points for up to three allies. -# 111. - Barkskin (V,S) level 2 Transmutation [Concentration] [SOL] +# 112. - Barkskin (V,S) level 2 Transmutation [Concentration] [SOL] Gives you or an ally you can touch an AC of at least 16. -# 112. - Blindness (V) level 2 Necromancy [SOL] +# 113. - Blindness (V) level 2 Necromancy [SOL] Blind an enemy for one minute. -# 113. - Blur (V) level 2 Illusion [Concentration] [SOL] +# 114. - Blur (V) level 2 Illusion [Concentration] [SOL] Makes you blurry and harder to hit for up to one minute. -# 114. - *Borrowed Knowledge* © (V,S) level 2 Divination [UB] +# 115. - *Borrowed Knowledge* © (V,S) level 2 Divination [UB] You draw on knowledge from spirits of the past. Choose one skill in which you lack proficiency. For 1 hour, you have proficiency in the chosen skill. The spell ends early if you cast it again. -# 115. - Branding Smite (V) level 2 Evocation [Concentration] [SOL] +# 116. - Branding Smite (V) level 2 Evocation [Concentration] [SOL] Your next hit causes additional radiant damage and your target becomes luminous. -# 116. - Calm Emotions (V,S) level 2 Enchantment [Concentration] [SOL] +# 117. - Calm Emotions (V,S) level 2 Enchantment [Concentration] [SOL] Stops allies from being charmed or frightened and makes hostile humanoids indifferent. -# 117. - *Cloud of Daggers* © (V,S) level 2 Conjuration [Concentration] [UB] +# 118. - *Cloud of Daggers* © (V,S) level 2 Conjuration [Concentration] [UB] You fill the air with spinning daggers in a cube 5 feet on each side, centered on a point you choose within range. A creature takes 4d4 slashing damage when it enters the spell's area for the first time on a turn or starts its turn there. When you cast this spell using a spell slot of 3rd level or higher, the damage increases by 2d4 for each slot level above 2nd. -# 118. - Color Burst (V,S) level 2 Illusion [UB] +# 119. - Color Burst (V,S) level 2 Illusion [UB] Burst a luminous cube that briefly blinds anyone within 10 ft. 8d10 is how many hit points of creatures this spell can affect. -# 119. - Conjure Goblinoids (V,S) level 2 Conjuration [Concentration] [UB] +# 120. - Conjure Goblinoids (V,S) level 2 Conjuration [Concentration] [UB] Conjures 2 goblins who obey your orders unless you lose concentration. -# 120. - Darkness (V) level 2 Evocation [Concentration] [SOL] +# 121. - Darkness (V) level 2 Evocation [Concentration] [SOL] Create an area of magical darkness. -# 121. - Darkvision (V,S) level 2 Transmutation [SOL] +# 122. - Darkvision (V,S) level 2 Transmutation [SOL] Grant Darkvision to the target. -# 122. - Enhance Ability (V,S) level 2 Transmutation [Concentration] [SOL] +# 123. - Enhance Ability (V,S) level 2 Transmutation [Concentration] [SOL] Grant temporary powers to an ally for up to one hour. -# 123. - Find Traps (V,S) level 2 Evocation [SOL] +# 124. - Find Traps (V,S) level 2 Evocation [SOL] Spot mechanical and magical traps, but not natural hazards. -# 124. - Flame Blade (V,S) level 2 Evocation [Concentration] [SOL] +# 125. - Flame Blade (V,S) level 2 Evocation [Concentration] [SOL] Evokes a fiery blade for ten minutes that you can wield in battle. -# 125. - Flaming Sphere (V,S) level 2 Evocation [Concentration] [SOL] +# 126. - Flaming Sphere (V,S) level 2 Evocation [Concentration] [SOL] Summons a movable, burning sphere. -# 126. - Heat Metal (V,S) level 2 Transmutation [Concentration] [SOL] +# 127. - Heat Metal (V,S) level 2 Transmutation [Concentration] [SOL] Causes metallic armor worn by a target creature to glow red hot, causing fire damage and disadvantage to attack rolls and ability checks. The damage can be repeated every turn with a bonus action. -# 127. - Hold Person (V,S) level 2 Enchantment [Concentration] [SOL] +# 128. - Hold Person (V,S) level 2 Enchantment [Concentration] [SOL] Paralyze a humanoid you can see for a limited time. -# 128. - Invisibility (V,S) level 2 Illusion [Concentration] [SOL] +# 129. - Invisibility (V,S) level 2 Illusion [Concentration] [SOL] Make an ally invisible for a limited time. -# 129. - *Kinetic Jaunt* © (S) level 2 Evocation [Concentration] [UB] +# 130. - *Kinetic Jaunt* © (S) level 2 Evocation [Concentration] [UB] You magically empower your movement with dance like steps, giving yourself the following benefits for the duration: • Your walking speed increases by 10 feet. • You don't provoke opportunity attacks. • You can move through the space of any creature. -# 130. - Knock (V) level 2 Transmutation [SOL] +# 131. - Knock (V) level 2 Transmutation [SOL] Magically open locked doors, chests, and the like. -# 131. - Lesser Restoration (V,S) level 2 Abjuration [SOL] +# 132. - Lesser Restoration (V,S) level 2 Abjuration [SOL] Remove a detrimental condition from an ally. -# 132. - Levitate (V,S) level 2 Transmutation [Concentration] [SOL] +# 133. - Levitate (V,S) level 2 Transmutation [Concentration] [SOL] Allow a creature to levitate and gain control of its aerial movement for a limited time. Can affect enemies if their size is medium or smaller. -# 133. - Levitate (V,S) level 2 Transmutation [Concentration] [SOL] +# 134. - Levitate (V,S) level 2 Transmutation [Concentration] [SOL] Allow a creature to levitate and gain control of its aerial movement for a limited time. Can affect enemies if their size is medium or smaller. -# 134. - Magic Weapon (V,S) level 2 Transmutation [Concentration] [SOL] +# 135. - Magic Weapon (V,S) level 2 Transmutation [Concentration] [SOL] A nonmagical weapon becomes a +1 weapon for up to one hour. -# 135. - *Mirror Image* © (V,S) level 2 Illusion [UB] +# 136. - *Mirror Image* © (V,S) level 2 Illusion [UB] Three illusory duplicates of yourself appear in your space. Until the spell ends, each time a creature targets you with an attack, roll a d20 to determine whether the attack instead targets one of your duplicates. If you have 3 duplicates, you must roll a 6 or higher to change the attack's target to a duplicate. With 2 duplicates, you must roll an 8 or higher. With 1 duplicate, you must roll an 11 or higher. A duplicate's AC is equal to 10 + your Dexterity modifier. If an attack hits a duplicate, the duplicate is destroyed. A duplicate can be destroyed only by an attack that hits it. It ignores all other damage and effects. The spell ends when all three duplicates are destroyed. A creature is unaffected by this spell if it is Blinded, or has Blindsight, Truesight or Tremorsense (doesn't apply if you don't touch ground). -# 136. - Misty Step (V) level 2 Conjuration [SOL] +# 137. - Misty Step (V) level 2 Conjuration [SOL] Teleports you to a free cell you can see, no more than 6 cells away. -# 137. - Moon Beam (V,S) level 2 Evocation [Concentration] [SOL] +# 138. - Moon Beam (V,S) level 2 Evocation [Concentration] [SOL] Conjures a vertical column of moonlight which causes radiant damage. Shapechangers have disadvantage on the save. -# 138. - Noxious Spray (V,S) level 2 Evocation [UB] +# 139. - Noxious Spray (V,S) level 2 Evocation [UB] You unleash a spray of noxious gases on a target within range. Make a ranged spell attack. On a hit, the target takes 4d6 poison damage and must succeed on a Constitution saving throw or spend all its next turn retching and heaving, unable to move or take actions. Constructs, elementals and undead are unaffected by this spell. When you cast this spell using a slot of 3rd level or higher, you can target one additional creature for each slot level above 2nd. -# 139. - Pass Without Trace (V,S) level 2 Abjuration [Concentration] [SOL] +# 140. - Pass Without Trace (V,S) level 2 Abjuration [Concentration] [SOL] Make yourself and up to 5 allies stealthier for one hour. -# 140. - Petal Storm (V,S) level 2 Conjuration [Concentration] [UB] +# 141. - Petal Storm (V,S) level 2 Conjuration [Concentration] [UB] Choose an unoccupied 15-foot cube of air that you can see within range. An elemental force of swirling winds appears in the cube and lasts for the spell's duration. The cloud heavily obscures its area. Any creature that enters the storm for the first time on a turn or starts its turn there must make a Strength saving throw. On a failed save, the creature takes 3d4 slashing damage. As a bonus action, you can move the storm up to 30 ft in any direction. -# 141. - Prayer of Healing (V) level 2 Evocation [SOL] +# 142. - Prayer of Healing (V) level 2 Evocation [SOL] Heal multiple allies at the same time. -# 142. - Protect Threshold (V,S) level 2 Abjuration [UB] +# 143. - Protect Threshold (V,S) level 2 Abjuration [UB] Tracing arcane sigils along its boundary, you can ward a doorway, window, or other portal from entry. For the duration, an invisible eldritch creature stalks the warded portal. Any creature that attempts to pass through the portal must make a Wisdom saving throw or take 4d6 psychic damage, or half as much on a successful save. -# 143. - Protection from Poison (V,S) level 2 Abjuration [SOL] +# 144. - Protection from Poison (V,S) level 2 Abjuration [SOL] Cures and protects against poison. -# 144. - Ray of Enfeeblement (V,S) level 2 Necromancy [Concentration] [SOL] +# 145. - Ray of Enfeeblement (V,S) level 2 Necromancy [Concentration] [SOL] Weaken an enemy so they deal less damage for one minute. -# 145. - *Rime's Binding Ice* © (S) level 2 Evocation [UB] +# 146. - *Rime's Binding Ice* © (S) level 2 Evocation [UB] A burst of cold energy emanates from you in a 30-foot cone. Each creature in that area must make a Constitution saving throw. On a failed save, a creature takes 3d8 cold damage and is hindered by ice formations for 1 minute, or until it uses an action to break away the ice. A creature hindered by ice has its speed reduced to 0. On a successful save, a creature takes half as much damage and isn't hindered by ice. -# 146. - Scorching Ray (V,S) level 2 Evocation [SOL] +# 147. - Scorching Ray (V,S) level 2 Evocation [SOL] Fling rays of fire at one or more enemies. -# 147. - See Invisibility (V,S) level 2 Divination [SOL] +# 148. - See Invisibility (V,S) level 2 Divination [SOL] You can see invisible creatures. -# 148. - *Shadow Blade* © (V,S) level 2 Illusion [Concentration] [UB] +# 149. - *Shadow Blade* © (V,S) level 2 Illusion [Concentration] [UB] You weave together threads of shadow to create a dagger of solidified gloom in your hand. It deals 2d8 psychic damage on a hit and has the finesse, light, and thrown properties. In addition, when you use it to attack a target that is in dim light or darkness, you make the attack roll with advantage. -# 149. - Shatter (V,S) level 2 Evocation [SOL] +# 150. - Shatter (V,S) level 2 Evocation [SOL] Triggers a sudden noise that causes Thunder Damage in a 2-cell radius. -# 150. - Silence (V,S) level 2 Illusion [Concentration] [SOL] +# 151. - Silence (V,S) level 2 Illusion [Concentration] [SOL] Creates a sphere four cells in radius, inside which sound cannot exist. Stops thunder damage and prevents spellcasting using verbal components. -# 151. - *Snilloc's Snowball Storm* © (V,S) level 2 Evocation [UB] +# 152. - *Snilloc's Snowball Storm* © (V,S) level 2 Evocation [UB] A flurry of magic snowballs erupts from a point you choose within range. Each creature in a 3x3 cube centered on that point must make a Dexterity saving throw. A creature takes 3d8 cold damage on a failed save, or half as much damage on a successful one. When you cast this spell using a spell slot of 3rd level or higher, the damage increases by 1d8 for each slot level above 2nd. -# 152. - Spider Climb (V,S) level 2 Transmutation [Concentration] [SOL] +# 153. - Spider Climb (V,S) level 2 Transmutation [Concentration] [SOL] Touch an ally to allow them to climb walls like a spider for a limited time. -# 153. - Spike Growth (V,S) level 2 Transmutation [Concentration] [SOL] +# 154. - Spike Growth (V,S) level 2 Transmutation [Concentration] [SOL] Grows spikes and thorns in the area, making the terrain difficult and causing damage for every cell of movement. -# 154. - Spiritual Weapon (V,S) level 2 Evocation [SOL] +# 155. - Spiritual Weapon (V,S) level 2 Evocation [SOL] Summon a weapon that fights for you. -# 155. - *Tasha's Mind Whip* © (V) level 2 Enchantment [UB] +# 156. - *Tasha's Mind Whip* © (V) level 2 Enchantment [UB] You psychically lash out at one creature you can see within range. The target must make an Intelligence saving throw. On a failed save, the target takes 3d6 psychic damage, and it can't take a reaction until the end of its next turn. Moreover, on its next turn, it must choose whether it gets a move, an action, or a bonus action; it gets only one of the three. On a successful save, the target takes half as much damage and suffers none of the spell's other effects. When you cast this spell using a spell slot of 3rd level or higher, you can target one additional creature for each slot level above 2nd. -# 156. - *Warding Bond* © (V,S) level 2 Abjuration [SOL] +# 157. - *Warding Bond* © (V,S) level 2 Abjuration [SOL] Creates a bond with the target, who gains +1 AC, +1 to saving throws and resistance to all damage, but you share all damage it receives. Lasts for one hour. -# 157. - *Web* © (V,S) level 2 Conjuration [Concentration] [UB] +# 158. - *Web* © (V,S) level 2 Conjuration [Concentration] [UB] You conjure a mass of thick, sticky webbing at a point of your choice within range. The webs fill a 20-foot cube from that point for the duration. The webs are difficult terrain and lightly obscure their area. Each creature that enters them during its turn must make a Dexterity saving throw. On a failed save, the creature is restrained as long as it remains in the webs or until it breaks free. A creature restrained by the webs can use its actions to make a Strength check against your spell save DC. If it succeeds, it is no longer restrained. -# 158. - *Wither and Bloom* © (V,S) level 2 Necromancy [UB] +# 159. - *Wither and Bloom* © (V,S) level 2 Necromancy [UB] You invoke both death and life upon a 10-foot-radius sphere centered on an ally. Each enemy in that area must make a Constitution saving throw, taking 2d6 necrotic damage on a failed save, or half as much damage on a successful one. In addition, the target spends and rolls one of its unspent Hit Dice and regain a number of hit points equal to the roll plus your spellcasting ability modifier. When you cast this spell using a spell slot of 3rd level or higher, the damage increases by 1d6 for each slot above 2nd, and the number of Hit Dice that can be spent and added to the healing roll increases by one for each slot above 2nd. -# 159. - Adder's Fangs (V,S) level 3 Conjuration [UB] +# 160. - Adder's Fangs (V,S) level 3 Conjuration [UB] You create the visage of a massive green snake that appears for an instant before bearing down on your foe. Choose a creature you can see within range. The target must make a constitution saving throw, taking 4d10 poison damage on a failure, or half as much damage on a successful one. A creature that fails its saving throw is also poisoned, and its speed is halved while poisoned by this spell. At the end of each of its turns, a target may make a constitution saving throw, ending the poison on a success. Otherwise, the poison lasts for 1 minute. When you cast this spell using a spell slot of 4th level or higher, you may target an additional creature within range for each slot level above 3rd. -# 160. - *Ashardalon's Stride* © (V,S) level 3 Transmutation [Concentration] [UB] +# 161. - *Ashardalon's Stride* © (V,S) level 3 Transmutation [Concentration] [UB] The billowing flames of a dragon blast from your feet, granting you explosive speed. For the duration, your speed increases by 20 feet and moving doesn't provoke opportunity attacks. When you move within 5 feet of a creature, it takes 1d6 fire damage from your trail of heat. A creature can take this damage only once during a turn. When you cast this spell using a spell slot of 4th level or higher, increase your speed by 5 feet for each spell slot level above 3rd. The spell deals an additional 1d6 fire damage for each slot level above 3rd. -# 161. - *Aura of Vitality* © (V) level 3 Evocation [Concentration] [UB] +# 162. - *Aura of Vitality* © (V) level 3 Evocation [Concentration] [UB] Healing energy radiates from you in an aura with a 30-foot radius. Until the spell ends, the aura moves with you, centered on you. You can use a bonus action to cause one creature in the aura (including you) to regain 2d6 hit points. -# 162. - Beacon of Hope (V,S) level 3 Abjuration [Concentration] [SOL] +# 163. - Beacon of Hope (V,S) level 3 Abjuration [Concentration] [SOL] Raise hope and vitality. -# 163. - Bestow Curse (V,S) level 3 Necromancy [Concentration] [SOL] +# 164. - Bestow Curse (V,S) level 3 Necromancy [Concentration] [SOL] Curses a creature you can touch. -# 164. - *Blinding Smite* © (V) level 3 Evocation [Concentration] [UB] +# 165. - *Blinding Smite* © (V) level 3 Evocation [Concentration] [UB] On your next hit your weapon flares with a bright light, and the attack deals an extra 3d8 radiant damage to the target. Additionally, the target must succeed on a Constitution saving throw or be blinded until the spell ends. A creature blinded by this spell makes another Constitution saving throw at the end of each of its turns. On a successful save, it is no longer blinded. -# 165. - Call Lightning (V,S) level 3 Conjuration [Concentration] [SOL] +# 166. - Call Lightning (V,S) level 3 Conjuration [Concentration] [SOL] Conjures a storm cloud from which you can call a vertical bolt of lightning to strike targets, dealing 3D10 lightning damage. Another bolt can be repeated every turn by using an action. -# 166. - Conjure Animal (V,S) level 3 Conjuration [Concentration] [SOL] +# 167. - Conjure Animal (V,S) level 3 Conjuration [Concentration] [SOL] Summon spirits in the form of beasts to help you in battle -# 167. - Corrupting Bolt (V,S) level 3 Necromancy [UB] +# 168. - Corrupting Bolt (V,S) level 3 Necromancy [UB] You can fire a pulse of necrotic energy that causes a creature's body to begin to wither and decay. Make a ranged attack against a creature. On a hit, the target takes 4d8 necrotic damage and must succeed a Constitution saving throw. On a failed saving throw, the next time you or an ally of yours hits the corrupted creature with an attack before the end of your next turn, the creature has vulnerability to all of that attack's damage, and then the corruption ends. When you cast this spell using a spell slot of 4th level or higher, the damage increases by 1d8 for each slot level above 3rd. -# 168. - Counterspell (S) level 3 Abjuration [SOL] +# 169. - Counterspell (S) level 3 Abjuration [SOL] Interrupt an enemy's spellcasting. -# 169. - Create Food (S) level 3 Conjuration [SOL] +# 170. - Create Food (S) level 3 Conjuration [SOL] Conjure 15 units of food. -# 170. - *Crusader's Mantle* © (V) level 3 Evocation [Concentration] [UB] +# 171. - *Crusader's Mantle* © (V) level 3 Evocation [Concentration] [UB] Surround yourself with a magical aura. Allies within the aura gain a bonus 1d4 radiant damage on their attacks. -# 171. - Daylight (V,S) level 3 Evocation [SOL] +# 172. - Daylight (V,S) level 3 Evocation [SOL] Summon a globe of bright light. -# 172. - Dispel Magic (V,S) level 3 Abjuration [SOL] +# 173. - Dispel Magic (V,S) level 3 Abjuration [SOL] End active spells on a creature or object. -# 173. - *Elemental Weapon* © (V,S) level 3 Transmutation [Concentration] [UB] +# 174. - *Elemental Weapon* © (V,S) level 3 Transmutation [Concentration] [UB] Imbue a non-magical weapon with elemental magic. It gains a +1 to attack and damage rolls, and it gains 1d4 of the corresponding element's damage. When casting with a 5 or 6 spell slots, the effects increased by one die while casting at a spell slot 7 or higher increases the effects by 2. -# 174. - Fear (V,S) level 3 Illusion [Concentration] [SOL] +# 175. - Fear (V,S) level 3 Illusion [Concentration] [SOL] Frighten creatures and force them to flee. -# 175. - Fireball (V,S) level 3 Evocation [SOL] +# 176. - Fireball (V,S) level 3 Evocation [SOL] Launch a fireball that explodes from a point of your choosing. -# 176. - *Flame Arrows* © (M,V,S) level 3 Transmutation [Concentration] [UB] +# 177. - *Flame Arrows* © (M,V,S) level 3 Transmutation [Concentration] [UB] You must be wielding a ranged weapon. When a target is hit by it, the target takes an extra 1d6 fire damage. The spell ends when twelve pieces of ammunition have been drawn from the quiver. When you cast this spell using a spell slot of 4th level or higher, the number of pieces of ammunition you can affect with this spell increases by two for each slot level above 3rd. -# 177. - Fly (V,S) level 3 Transmutation [Concentration] [SOL] +# 178. - Fly (V,S) level 3 Transmutation [Concentration] [SOL] An ally you touch gains the ability to fly for a limited time. -# 178. - Haste (V,S) level 3 Transmutation [Concentration] [SOL] +# 179. - Haste (V,S) level 3 Transmutation [Concentration] [SOL] Make an ally faster and more agile, and grant them an additional action for a limited time. -# 179. - *Hunger of Hadar* © (V,S) level 3 Transmutation [Concentration] [UB] +# 180. - *Hunger of Hadar* © (V,S) level 3 Transmutation [Concentration] [UB] You open a gateway to the dark between the stars, a region infested with unknown horrors. A 20-foot-radius sphere of blackness and bitter cold appears, centered on a point with range and lasting for the duration. The area extinguishes light, and creatures within it are blinded. Any creature that starts its turn in the area takes 2d6 cold damage. Any creature that ends its turn in the area must succeed on a Dexterity saving throw or take 2d6 acid damage as milky, otherworldly tentacles rub against it. -# 180. - Hypnotic Pattern (S) level 3 Illusion [Concentration] [SOL] +# 181. - Hypnotic Pattern (S) level 3 Illusion [Concentration] [SOL] Charms enemies to make them harmless until attacked, but also affects allies in range. -# 181. - *Intellect Fortress* © (V) level 3 Abjuration [Concentration] [UB] +# 182. - *Intellect Fortress* © (V) level 3 Abjuration [Concentration] [UB] For the duration, you or one willing creature you can see within range has resistance to psychic damage, as well as advantage on Intelligence, Wisdom, and Charisma saving throws. When you cast this spell using a spell slot of 4th level or higher, you may target an additional creature within range for each slot level above 3rd. -# 182. - *Life Transference* © (V,S) level 3 Necromancy [UB] +# 183. - *Life Transference* © (V,S) level 3 Necromancy [UB] You sacrifice some of your health to mend another creature's injuries. You take 4d8 necrotic damage, and one creature of your choice that you can see within range regains a number of hit points equal to twice the necrotic damage you take. When you cast this spell using a spell s lot of 4th level or higher, the damage increases by 1d8 for each slot level above 3rd. -# 183. - *Lightning Arrow* © (V,S) level 3 Transmutation [Concentration] [UB] +# 184. - *Lightning Arrow* © (V,S) level 3 Transmutation [Concentration] [UB] The next time you make a ranged weapon attack during the spell's duration, the weapon's ammunition, or the weapon itself if it's a thrown weapon, transforms into a bolt of lightning. Make the attack roll as normal. The target takes 3d8 lightning damage on a hit, or half as much damage on a miss. Whether you hit or miss, each creature within 10 feet of the target must make a Dexterity saving throw. Each of these creatures takes 2d8 lightning damage on a failed save, or half as much damage on a successful one. When you cast this spell using a spell slot of 4th level or higher, the damage for both effects of the spell increases by 1d8 for each slot level above 3rd. -# 184. - Lightning Bolt (V,S) level 3 Evocation [SOL] +# 185. - Lightning Bolt (V,S) level 3 Evocation [SOL] Unleash a stroke of lightning in a direction of your choice, damaging everyone it touches. -# 185. - Mass Healing Word (V) level 3 Evocation [SOL] +# 186. - Mass Healing Word (V) level 3 Evocation [SOL] Instantly heals up to six allies you can see. -# 186. - Protection from Energy (V,S) level 3 Abjuration [Concentration] [SOL] +# 187. - Protection from Energy (V,S) level 3 Abjuration [Concentration] [SOL] Touch one willing creature to give them resistance to this damage type. -# 187. - *Pulse Wave* © (V,S) level 3 Evocation [UB] +# 188. - *Pulse Wave* © (V,S) level 3 Evocation [UB] You create intense pressure, unleash it in a 30-foot cone, and decide whether the pressure pulls or pushes creatures and objects. Each creature in that cone must make a Constitution saving throw. A creature takes 6d6 force damage on a failed save, or half as much damage on a successful one. And every creature that fails the save is either pulled 15 feet toward you or pushed 15 feet away from you, depending on the choice you made for the spell. When you cast this spell using a spell slot of 4th level or higher, the damage increases by 1d6 and the distance pulled or pushed increases by 5 feet for each slot level above 3rd. -# 188. - Remove Curse (V,S) level 3 Abjuration [SOL] +# 189. - Remove Curse (V,S) level 3 Abjuration [SOL] Removes all curses affecting the target. -# 189. - Revivify (M,V,S) level 3 Necromancy [SOL] +# 190. - Revivify (M,V,S) level 3 Necromancy [SOL] Brings one creature back to life, up to 1 minute after death. -# 190. - Sleet Storm (V,S) level 3 Conjuration [Concentration] [SOL] +# 191. - Sleet Storm (V,S) level 3 Conjuration [Concentration] [SOL] Creates an area where the ground is slippery, vision is obscured, and concentration is harder. -# 191. - Slow (V,S) level 3 Transmutation [Concentration] [SOL] +# 192. - Slow (V,S) level 3 Transmutation [Concentration] [SOL] Slows and impairs the actions of up to 6 creatures. -# 192. - Spirit Guardians (V,S) level 3 Conjuration [Concentration] [SOL] +# 193. - Spirit Guardians (V,S) level 3 Conjuration [Concentration] [SOL] Call forth spirits to protect you. -# 193. - *Spirit Shroud* © (V,S) level 3 Necromancy [Concentration] [UB] +# 194. - *Spirit Shroud* © (V,S) level 3 Necromancy [Concentration] [UB] You call forth spirits of the dead, which flit around you for the spell's duration. The spirits are intangible and invulnerable. Until the spell ends, any attack you make deals 1d8 extra damage when you hit a creature within 10 ft of you. This damage is radiant, necrotic, or cold (your choice when you cast the spell). Any creature that takes this damage can't regain hit points until the start of your next turn. In addition, any enemy creature within 10ft of you when you cast, or that enters or starts its turn in that range has its movement speed lowered by 10ft until start of its next turn. When you cast this spell using a spell slot of 4th level or higher, the damage increases by 1d8 for every two slot levels above 3rd. -# 194. - Stinking Cloud (V,S) level 3 Conjuration [Concentration] [SOL] +# 195. - Stinking Cloud (V,S) level 3 Conjuration [Concentration] [SOL] Create a cloud of incapacitating, noxious gas. -# 195. - *Thunder Step* © (V) level 3 Conjuration [UB] +# 196. - *Thunder Step* © (V) level 3 Conjuration [UB] You teleport yourself to an unoccupied space you can see within range. Immediately after you disappear, a thunderous boom sounds, and each creature within 10 feet of the space you left must make a Constitution saving throw, taking 3d10 thunder damage on a failed save, or half as much damage on a successful one. You can also teleport one willing ally. When you cast this spell using a spell slot of 4th level or higher, the damage increases by 1d10 for each slot level above 3rd. -# 196. - Tongues (V) level 3 Divination [SOL] +# 197. - Tongues (V) level 3 Divination [SOL] Grants knowledge of all languages for one hour. -# 197. - Vampiric Touch (V,S) level 3 Necromancy [Concentration] [SOL] +# 198. - Vampiric Touch (V,S) level 3 Necromancy [Concentration] [SOL] Grants you a life-draining melee attack for one minute. -# 198. - Wind Wall (V,S) level 3 Evocation [Concentration] [SOL] +# 199. - Wind Wall (V,S) level 3 Evocation [Concentration] [SOL] Create a wall of wind that causes damage, pushes creatures and objects away, and disperses fogs and gases. -# 199. - Winter's Breath (V,S) level 3 Conjuration [UB] +# 200. - Winter's Breath (V,S) level 3 Conjuration [UB] Create a blast of cold wind to chill your enemies and knock them prone. -# 200. - *Aura of Life* © (V) level 4 Abjuration [Concentration] [UB] +# 201. - *Aura of Life* © (V) level 4 Abjuration [Concentration] [UB] Life-preserving energy radiates from you in an aura with a 30-foot radius. Until the spell ends, the aura moves with you, centered on you. Each non-hostile creature in the aura, including you, has resistance to necrotic damage, and its hit point maximum can't be reduced. In addition, a non-hostile, living creature regains 1 hit point when it starts its turn in the aura with 0 hit points. -# 201. - *Aura of Purity* © (V) level 4 Abjuration [Concentration] [UB] +# 202. - *Aura of Purity* © (V) level 4 Abjuration [Concentration] [UB] Purifying energy radiates from you in an aura with a 30-foot radius. Until the spell ends, the aura moves with you, centered on you. Each non-hostile creature in the aura, including you, can't become diseased, has resistance to poison damage, and has advantage on saving throws against effects that cause any of the following conditions: blinded, charmed, deafened, frightened, paralyzed, poisoned, and stunned. -# 202. - Banishment (V,S) level 4 Abjuration [Concentration] [SOL] +# 203. - Banishment (V,S) level 4 Abjuration [Concentration] [SOL] Banishes a creature as long as you concentrate. The creature can be permanently banished if it is extraplanar. -# 203. - Black Tentacles (V,S) level 4 Conjuration [Concentration] [SOL] +# 204. - Black Tentacles (V,S) level 4 Conjuration [Concentration] [SOL] Conjures black tentacles that restrain and damage creatures within the area of effect. -# 204. - Blessing of Rime (V,S) level 4 Evocation [UB] +# 205. - Blessing of Rime (V,S) level 4 Evocation [UB] You summon a chill wind that numbs the pain of your allies. Choose up to three creatures within range. Each creature gains 3d8 temporary hit points for the duration. While a creature has these hit points, if it would make a Constitution saving throw, it gains advantage on the roll. When you cast this spell using a spell slot of 5th level or higher, the temporary hit points increase by 1d8 for each slot level above 4th. -# 205. - Blight (V,S) level 4 Necromancy [SOL] +# 206. - Blight (V,S) level 4 Necromancy [SOL] Drains life from a creature, causing massive necrotic damage. -# 206. - Brain Bulwark (V) level 4 Abjuration [UB] +# 207. - Brain Bulwark (V) level 4 Abjuration [UB] For the duration, you or one willing creature you can see within range has resistance to psychic damage, as well as Immunity to the Charmed, Frightened, Fear, Mind dominated and Mind controlled conditions. -# 207. - Confusion (V,S) level 4 Enchantment [Concentration] [SOL] +# 208. - Confusion (V,S) level 4 Enchantment [Concentration] [SOL] Creates confusion and erratic behavior in a creature, possibly leading it to attack its allies. -# 208. - Conjure 4 Elementals (V,S) level 4 Conjuration [Concentration] [SOL] +# 209. - Conjure 4 Elementals (V,S) level 4 Conjuration [Concentration] [SOL] 4 elementals are conjured (CR 1/2). -# 209. - Conjure Minor Elementals (V,S) level 4 Conjuration [Concentration] [SOL] +# 210. - Conjure Minor Elementals (V,S) level 4 Conjuration [Concentration] [SOL] Conjure elemental creatures under your command, which are dismissed when the spell ends or is broken. -# 210. - Death Ward (V,S) level 4 Abjuration [SOL] +# 211. - Death Ward (V,S) level 4 Abjuration [SOL] Protects the creature once against instant death or being reduced to 0 hit points. -# 211. - Dimension Door (V) level 4 Conjuration [SOL] +# 212. - Dimension Door (V) level 4 Conjuration [SOL] Transfers the caster and a friendly creature to a specified destination. -# 212. - Dominate Beast (V,S) level 4 Enchantment [Concentration] [SOL] +# 213. - Dominate Beast (V,S) level 4 Enchantment [Concentration] [SOL] Grants you control over an enemy beast. -# 213. - Dreadful Omen (V,S) level 4 Enchantment [SOL] +# 214. - Dreadful Omen (V,S) level 4 Enchantment [SOL] You whisper dreadful words that cause immense mental anguish in your enemies. On a failed wisdom saving throw, they take psychic damage and become frightened until the end of their next turn, moving away from you as much as possible. On a successful save, they take half as much damage and are not frightened. -# 214. - *Elemental Bane* © (V,S) level 4 Transmutation [Concentration] [UB] +# 215. - *Elemental Bane* © (V,S) level 4 Transmutation [Concentration] [UB] Choose one creature you can see within range, and choose one of the following damage types: acid, cold, fire, lightning, or thunder. The target must succeed on a Constitution saving throw or be affected by the spell for its duration. The first time each turn the affected target takes non-recurrent damage of the chosen type, the target takes an extra 2d6 damage of that type. Moreover, the target loses any resistance to that damage type until the spell ends. When you cast this spell using a spell slot of 5th level or higher, you can target one additional creature for each slot level above 4th. The creatures must be within 30 feet of each other when you target them. -# 215. - Fire Shield (V,S) level 4 Evocation [SOL] +# 216. - Fire Shield (V,S) level 4 Evocation [SOL] Grants resistance to fire or cold, and damages creatures attacking the caster with melee attacks. -# 216. - Freedom of Movement (V,S) level 4 Abjuration [SOL] +# 217. - Freedom of Movement (V,S) level 4 Abjuration [SOL] Grants immunity to movement restrictions, as well as being paralyzed or restrained. -# 217. - Giant Insect (V,S) level 4 Transmutation [Concentration] [SOL] +# 218. - Giant Insect (V,S) level 4 Transmutation [Concentration] [SOL] Conjures a giant version of a natural insect or arthropod. -# 218. - *Gravity Sinkhole* © (V,S) level 4 Evocation [UB] +# 219. - *Gravity Sinkhole* © (V,S) level 4 Evocation [UB] A 20-foot-radius sphere of crushing force forms at a point you can see within range and tugs at the creatures there. Each creature in the sphere must make a Constitution saving throw. On a failed save, the creature takes 5d10 force damage, and is pulled in a straight line toward the center of the sphere, ending in an unoccupied space as close to the center as possible. On a successful save, the creature takes half as much damage and isn't pulled. When you cast this spell using a spell slot of 5th level or higher, the damage increases by 1d10 for each slot level above 4th. -# 219. - Greater Invisibility (V,S) level 4 Illusion [Concentration] [SOL] +# 220. - Greater Invisibility (V,S) level 4 Illusion [Concentration] [SOL] Target becomes invisible for the duration, even when attacking or casting spells. -# 220. - Guardian of Faith (V) level 4 Conjuration [SOL] +# 221. - Guardian of Faith (V) level 4 Conjuration [SOL] Conjures a large spectral guardian that damages approaching enemies. -# 221. - *Guardian of Nature* © (V) level 4 Transmutation [Concentration] [UB] +# 222. - *Guardian of Nature* © (V) level 4 Transmutation [Concentration] [UB] A nature spirit answers your call and transforms you into a powerful guardian. The transformation lasts until the spell ends. You choose between a Beast or a Tree form. -# 222. - Ice Storm (V,S) level 4 Evocation [SOL] +# 223. - Ice Storm (V,S) level 4 Evocation [SOL] Causes bludgeoning and cold damage in the area, and turns the ground into difficult terrain. -# 223. - Identify Creatures (V,S) level 4 Divination [SOL] +# 224. - Identify Creatures (V,S) level 4 Divination [SOL] Reveals full bestiary knowledge for the affected creatures. -# 224. - Irresistible Performance (V) level 4 Enchantment [UB] +# 225. - Irresistible Performance (V) level 4 Enchantment [UB] You weave a song into the air, causing those who hear it to applaud its magnificence. All creatures of your choice inside a 30-foot-cube within range must make a Charisma saving throw or be forced to clap and shout until the start of your next turn. A creature that is charmed by you always fails this saving throw. A clapping creature cannot perform any actions that require their hands or mouth but can otherwise act normally. This spell has no effect on creatures that are immune to charm. -# 225. - *Mordenkainen's Faithful Hound* © (V,S) level 4 Conjuration [UB] +# 226. - *Mordenkainen's Faithful Hound* © (V,S) level 4 Conjuration [UB] You conjure a phantom watchdog in an unoccupied space that you can see within range, where it remains for the duration. The hound has Darkvision up to 60 ft, Truesight up to 80 ft, is invisible to all creatures except you and can't be harmed. During each of your turns, the hound can attempt to bite one creature within 5 feet of it that is hostile to you as a free action. The hound's attack bonus is equal to your spellcasting ability modifier + your proficiency bonus. On a hit, it deals 4d8 piercing damage. -# 226. - Phantasmal Killer (V,S) level 4 Illusion [Concentration] [SOL] +# 227. - Phantasmal Killer (V,S) level 4 Illusion [Concentration] [SOL] Causes psychic damage to the target creature with each turn, unless a saving throw is successful or the effect ends. -# 227. - Psionic Blast (V) level 4 Evocation [UB] +# 228. - Psionic Blast (V) level 4 Evocation [UB] You unleash a debilitating wave of mental power in a 30-foot cone. Each creature in the area must make an Intelligence saving throw. On a failed save, a target takes 5d8 psychic damage, becomes dazzled and has its movement speed halved until the end of your next turn. On a successful save, a target only takes half as much damage. When you cast this spell using a spell slot of 4th level or higher, the damage increases by 1d8 for each slot level above 4th. -# 228. - *Raulothim's Psychic Lance* © (V) level 4 Enchantment [UB] +# 229. - *Raulothim's Psychic Lance* © (V) level 4 Enchantment [UB] You unleash a shimmering lance of psychic power from your forehead at a creature that you can see within range. It must succeed on an Intelligence saving throw or take 7d6 psychic damage and be incapacitated until the end of your next turn. On a successful save, the creature takes half damage and isn't incapacitated. At Higher Levels. When you cast this spell using a spell slot of 4th level or higher, the damage increases by 1d6 for each slot level above 4th. -# 229. - *Sickening Radiance* © (V,S) level 4 Evocation [Concentration] [UB] +# 230. - *Sickening Radiance* © (V,S) level 4 Evocation [Concentration] [UB] Dim light spreads within a 30-foot-radius sphere centered on a point you choose within range. The light spreads around corners, and it lasts until the spell ends. When a creature moves into the spell's area for the first time on a turn or starts its turn there, that creature must succeed on a Constitution saving throw or take 4d10 radiant damage, and it suffers one level of exhaustion and emits a dim light in a 5-foot radius. This light makes it impossible for the creature to benefit from being invisible. The light and any levels of exhaustion caused by this spell go away when the spell ends. -# 230. - *Staggering Smite* © (V) level 4 Evocation [Concentration] [UB] +# 231. - *Staggering Smite* © (V) level 4 Evocation [Concentration] [UB] The next time you hit a creature with a weapon attack during this spell's duration, your weapon pierces both body and mind, and the attack deals an extra 4d6 psychic damage to the target. The target must make a Wisdom saving throw. On a failed save, it has disadvantage on attack rolls and ability checks, and can't take reactions, until the end of its next turn. -# 231. - Stoneskin (M,V,S) level 4 Abjuration [Concentration] [SOL] +# 232. - Stoneskin (M,V,S) level 4 Abjuration [Concentration] [SOL] Grants resistance to non-magical bludgeoning, slashing, and piercing damage. -# 232. - *Vitriolic Sphere* © (V,S) level 4 Evocation [UB] +# 233. - *Vitriolic Sphere* © (V,S) level 4 Evocation [UB] You point at a place within range, and a glowing 1-foot ball of emerald acid streaks there and explodes in a 20-foot radius. Each creature in that area must make a Dexterity saving throw. On a failed save, a creature takes 10d4 acid damage and 5d4 acid damage at the end of its next turn. On a successful save, a creature takes half the initial damage and no damage at the end of its next turn. When you cast this spell using a spell slot of 5th level or higher, the initial damage increases by 2d4 for each slot level above 4th. -# 233. - Wall of Fire (V,S) level 4 Evocation [Concentration] [SOL] +# 234. - Wall of Fire (V,S) level 4 Evocation [Concentration] [SOL] Create a burning wall that injures creatures in or next to it. -# 234. - *Banishing Smite* © (V) level 5 Abjuration [Concentration] [UB] +# 235. - *Banishing Smite* © (V) level 5 Abjuration [Concentration] [UB] Your next hit deals additional 5d10 force damage with your weapon. Additionally, if this attack reduces the target to 50 hit points of fewer, you banish it for 1 min. -# 235. - *Circle of Power* © (V) level 5 Abjuration [Concentration] [UB] +# 236. - *Circle of Power* © (V) level 5 Abjuration [Concentration] [UB] Divine energy radiates from you, distorting and diffusing magical energy within 30 feet of you. Until the spell ends, the sphere moves with you, centered on you. For the duration, each friendly creature in the area, including you, has advantage on saving throws against spells and other magical effects. Additionally, when an affected creature succeeds on a saving throw made against a spell or magical effect that allows it to make a saving throw to take only half damage, it instead takes no damage if it succeeds on the saving throws. -# 236. - Cloudkill (V,S) level 5 Conjuration [Concentration] [SOL] +# 237. - Cloudkill (V,S) level 5 Conjuration [Concentration] [SOL] Creates an obscuring and poisonous cloud. The cloud moves every round. -# 237. - Cone of Cold (V,S) level 5 Evocation [SOL] +# 238. - Cone of Cold (V,S) level 5 Evocation [SOL] Inflicts massive cold damage in the cone of effect. -# 238. - Conjure Elemental (V,S) level 5 Conjuration [Concentration] [SOL] +# 239. - Conjure Elemental (V,S) level 5 Conjuration [Concentration] [SOL] Conjures an elemental of the chosen element that fights alongside you. If you lose concentration, the elemental remains and becomes hostile. -# 239. - Contagion (V,S) level 5 Necromancy [SOL] +# 240. - Contagion (V,S) level 5 Necromancy [SOL] Hit a creature to inflict a disease from the options. -# 240. - *Dawn* © (V,S) level 5 Evocation [Concentration] [UB] +# 241. - *Dawn* © (V,S) level 5 Evocation [Concentration] [UB] The light of dawn shines down on a location you specify within range. Until the spell ends, a 30-foot-radius, 40-foot-high cylinder of bright light glimmers there. This light is sunlight. When the cylinder appears, each creature in it must make a Constitution saving throw, taking 4d10 radiant damage on a failed save, or half as much damage on a successful one. A creature must also make this saving throw whenever it ends its turn in the cylinder. If you're within 60 feet of the cylinder, you can move it up to 60 feet as a bonus action on your turn. -# 241. - *Destructive Wave* © (V) level 5 Evocation [UB] +# 242. - *Destructive Wave* © (V) level 5 Evocation [UB] You strike the ground, creating a burst of divine energy that ripples outward from you. Each creature you choose within 30 feet of you must succeed on a Constitution saving throw or take 5d6 thunder damage, as well as 5d6 radiant or necrotic damage, and be knocked prone. A creature that succeeds on its saving throw takes half as much damage and isn't knocked prone. -# 242. - Dispel Evil and Good (V,S) level 5 Abjuration [Concentration] [SOL] +# 243. - Dispel Evil and Good (V,S) level 5 Abjuration [Concentration] [SOL] Celestial, elementals, feys, fiends, and undead have disadvantage on attacks against you. This spell also allows you to cancel hostile enchantments or dismiss extraplanar creatures hit by your attacks once. -# 243. - Dominate Person (V,S) level 5 Enchantment [Concentration] [SOL] +# 244. - Dominate Person (V,S) level 5 Enchantment [Concentration] [SOL] Grants you control over an enemy creature. -# 244. - *Far Step* © (V) level 5 Conjuration [Concentration] [UB] +# 245. - *Far Step* © (V) level 5 Conjuration [Concentration] [UB] You teleport up to 60 ft to an unoccupied space you can see. On each of your turns before the spell ends, you can use a bonus action to teleport in this way again. -# 245. - Flame Strike (V,S) level 5 Evocation [SOL] +# 246. - Flame Strike (V,S) level 5 Evocation [SOL] Conjures a burning column of fire and radiance affecting all creatures inside. -# 246. - Greater Restoration (V,S) level 5 Abjuration [SOL] +# 247. - Greater Restoration (V,S) level 5 Abjuration [SOL] Removes one detrimental condition, such as a charm or curse, or an effect that reduces an ability score or hit points. -# 247. - Hold Monster (V,S) level 5 Enchantment [Concentration] [SOL] +# 248. - Hold Monster (V,S) level 5 Enchantment [Concentration] [SOL] Paralyzes a creature unless it succeeds a WIS saving throw. No effect on undead. -# 248. - *Immolation* © (V) level 5 Evocation [Concentration] [UB] +# 249. - *Immolation* © (V) level 5 Evocation [Concentration] [UB] Flames wreathe one creature you can see within range. The target must make a Dexterity saving throw. It takes 8d6 fire damage on a failed save, or half as much damage on a successful one. On a failed save, the target also burns for the spell's duration. The burning target sheds bright light in a 30-foot radius and dim light for an additional 30 feet and takes 8d6 fire damage at the start of each of its turns. -# 249. - Insect Plague (V,S) level 5 Conjuration [Concentration] [SOL] +# 250. - Insect Plague (V,S) level 5 Conjuration [Concentration] [SOL] Summons a sphere of biting insects. -# 250. - Mantle of Thorns (V,S) level 5 Transmutation [Concentration] [UB] +# 251. - Mantle of Thorns (V,S) level 5 Transmutation [Concentration] [UB] Surround yourself with an aura of thorns. Those that start or walk through take 2d8 piercing damage. This damage scales at higher levels by 1d8 per slot. -# 251. - Mass Cure Wounds (V,S) level 5 Evocation [SOL] +# 252. - Mass Cure Wounds (V,S) level 5 Evocation [SOL] Heals up to 6 creatures. -# 252. - Mind Twist (V,S) level 5 Enchantment [SOL] +# 253. - Mind Twist (V,S) level 5 Enchantment [SOL] Causes massive psychic damage to all creatures around you, and incapacitates them if they fail their INT saving throw. -# 253. - Raise Dead (M,V,S) level 5 Necromancy [SOL] +# 254. - Raise Dead (M,V,S) level 5 Necromancy [SOL] Brings one creature back to life, up to 10 days after death. -# 254. - *Skill Empowerment* © (V,S) level 5 Divination [UB] +# 255. - *Skill Empowerment* © (V,S) level 5 Divination [UB] Your magic deepens a creature's understanding of its own talent. You touch one willing creature and give it expertise in one skill of your choice; until the spell ends, the creature doubles its proficiency bonus for ability checks it makes that use the chosen skill. For 1 hour, you have proficiency in the chosen skill. The spell ends early if you cast it again. You must choose a skill in which the target is proficient and that isn't already benefiting from expertise. -# 255. - Sonic Boom (V,S) level 5 Evocation [UB] +# 256. - Sonic Boom (V,S) level 5 Evocation [UB] A small orb the same color as the balloon used appears at a point you choose within range then expands with a loud crack into an explosion of force. Each creature in a 30-foot radius must make a Strength saving throw. A target is pushed up to 30 feet away from the center and dealt 6d8 thunder damage on a failed save, or half as much damage and no movement on a successful one. -# 256. - *Steel Wind Strike* © (M,S) level 5 Conjuration [UB] +# 257. - *Steel Wind Strike* © (M,S) level 5 Conjuration [UB] You flourish the weapon used in the casting and then vanish to strike like the wind. Choose up to five creatures you can see within range. Make a melee spell attack against each target. On a hit, a target takes 6d10 force damage. You can then teleport to an unoccupied space you can see within 5 feet of one of the targets you hit or missed. -# 257. - *Synaptic Static* © (V) level 5 Evocation [UB] +# 258. - *Synaptic Static* © (V) level 5 Evocation [UB] You choose a point within range and cause psychic energy to explode there. Each creature in a 20-foot-radius sphere centered on that point must make an Intelligence saving throw. A target takes 8d6 psychic damage on a failed save, or half as much damage on a successful After a failed save, a target has muddled thoughts for 1 minute. During that time, it rolls a d6 and subtracts the number rolled from all its attack rolls and ability checks. The target can make an Intelligence saving throw at the end of each of its turns, ending the effect on itself on a success. -# 258. - *Telekinesis* © (V,S) level 5 Transmutation [Concentration] [UB] +# 259. - *Telekinesis* © (V,S) level 5 Transmutation [Concentration] [UB] You can try to move a Huge or smaller creature. Make an ability check with your spellcasting ability contested by the creature's Strength check. If you win the contest, you move the creature up to 30 feet in any direction, but not beyond the range of this spell. Until the end of your next turn, the creature is restrained in your telekinetic grip. On subsequent rounds, you can use your action to attempt to maintain your telekinetic grip on the creature by repeating the contest, or target a new creature, ending the restrained effect on the previously affected creature. -# 259. - Blade Barrier (V,S) level 6 Evocation [Concentration] [SOL] +# 260. - Blade Barrier (V,S) level 6 Evocation [Concentration] [SOL] Conjures a wall of razor sharp blades which causes 6d10 slashing damage to anyone crossing it -# 260. - Chain Lightning (V,S) level 6 Evocation [SOL] +# 261. - Chain Lightning (V,S) level 6 Evocation [SOL] Target a creature with lightning, which can arc to 3 other targets within 6 cells. -# 261. - Circle of Death (M,V,S) level 6 Necromancy [SOL] +# 262. - Circle of Death (M,V,S) level 6 Necromancy [SOL] A sphere of negative energy causes Necrotic damage from a point you choose -# 262. - Conjure Fey (V,S) level 6 Conjuration [Concentration] [SOL] +# 263. - Conjure Fey (V,S) level 6 Conjuration [Concentration] [SOL] Conjures a fey creature of challenge rating 1 to 6 to fight alongside you. If you lose concentration, the creature stays but becomes hostile. -# 263. - Disintegrate (V,S) level 6 Transmutation [SOL] +# 264. - Disintegrate (V,S) level 6 Transmutation [SOL] Causes massive force damage on the target, which can be disintegrated if reduced to 0 hit points -# 264. - Eyebite (V,S) level 6 Necromancy [Concentration] [SOL] +# 265. - Eyebite (V,S) level 6 Necromancy [Concentration] [SOL] Your eyes gain a specific property which can target a creature each turn -# 265. - *Fizban's Platinum Shield* © (M,V,S) level 6 Abjuration [Concentration] [UB] +# 266. - *Fizban's Platinum Shield* © (M,V,S) level 6 Abjuration [Concentration] [UB] You create a field of silvery light that surrounds a creature of your choice within range. The field sheds dim light out to 5 feet. While surrounded by the field, a creature gains the following benefits: • The creature has half cover. @@ -1080,59 +1084,59 @@ You create a field of silvery light that surrounds a creature of your choice wit • If the creature is subjected to an effect that allows it to make a Dexterity saving throw to take only half damage, the creature instead takes no damage if it succeeds on the saving throw, and only half damage if it fails. As a bonus action on subsequent turns, you can move the field to another creature within 60 feet of the field. -# 266. - Flash Freeze (V,S) level 6 Evocation [UB] +# 267. - Flash Freeze (V,S) level 6 Evocation [UB] You attempt to encase a creature you can see within range in a prison of solid ice. The target must make a Dexterity saving throw. On a failed save, the target takes 10d6 cold damage and becomes restrained in layers of thick ice. On a successful save, the target takes half as much damage and is not restrained. The spell can only be used on creatures up to large size. To break out, the restrained target can make a Strength check as an action against your spell save DC. On success, the target escapes and is no longer restrained. When you cast this spell using a spell slot of 7th level or higher, the cold damage increases by 2d6 for each slot level above 6th. -# 267. - Freezing Sphere (V,S) level 6 Evocation [SOL] +# 268. - Freezing Sphere (V,S) level 6 Evocation [SOL] Toss a huge ball of cold energy that explodes on impact -# 268. - Globe Of Invulnerability (V,S) level 6 Abjuration [Concentration] [SOL] +# 269. - Globe Of Invulnerability (V,S) level 6 Abjuration [Concentration] [SOL] A sphere surrounding you prevents any spell up to 5th level to affect anyone inside it. -# 269. - Harm (V,S) level 6 Necromancy [SOL] +# 270. - Harm (V,S) level 6 Necromancy [SOL] Inflicts devastating necrotic damage and reduces the maximum hit points accordingly. Cannot drop the target below 1 hit points -# 270. - Heal (V,S) level 6 Evocation [SOL] +# 271. - Heal (V,S) level 6 Evocation [SOL] Heals 70 hit points and also removes blindness and diseases -# 271. - Heroes Feast (M,V,S) level 6 Conjuration [SOL] +# 272. - Heroes Feast (M,V,S) level 6 Conjuration [SOL] Summons a feast which cures most ailments and grants immunity to poisonand being frightened, WIS save advantage, and increased maximum hitpoints -# 272. - Hilarity (V) level 6 Enchantment [Concentration] [SOL] +# 273. - Hilarity (V) level 6 Enchantment [Concentration] [SOL] Choose one target. They fall down laughing, becoming prone and incapacitated, and take psychic damage until they save at the end of one of their turns, or until the spell ends. -# 273. - Poison Wave (M,V,S) level 6 Evocation [UB] +# 274. - Poison Wave (M,V,S) level 6 Evocation [UB] A poisonous wave erupts from you, engulfing those close by. Each creature within the spell's radius must make a Constitution saving throw, taking 6d10 poison damage on a failure, or half as much damage on a successful one. A creature who fails their saving throw is also poisoned for 1 minute, and can repeat the saving throw at the end of each of its turn. When you cast this spell using a slot of 7th level or higher, the damage increases by 1d10 for each slot level above 6th. -# 274. - Ring of Blades (M,V,S) level 6 Conjuration [Concentration] [UB] +# 275. - Ring of Blades (M,V,S) level 6 Conjuration [Concentration] [UB] You raise both hands as you evoke six transparent blades around you as a bonus action. When you cast this spell, and as a bonus action on each subsequent turn, you can throw one of these blades at a creature within 60 feet from you. Make a ranged spell attack. On a hit, the target takes 4d10 force damage. When you cast this spell using a spell slot of 7th level or higher, the damage of each blade increases by 1d10 for each slot level above 6th. -# 275. - *Scatter* © (V) level 6 Conjuration [UB] +# 276. - *Scatter* © (V) level 6 Conjuration [UB] The air quivers around up to five creatures of your choice that you can see within range. An unwilling creature must succeed on a Wisdom saving throw to resist this spell. You teleport each affected target to an unoccupied space that you can see within 120 feet of you. That space must be on the ground or on a floor. -# 276. - Shelter from Energy (V,S) level 6 Abjuration [UB] +# 277. - Shelter from Energy (V,S) level 6 Abjuration [UB] Choose one of the following damage types: acid, cold, fire, lightning, necrotic, radiant, or thunder, and then choose up to six willing creatures that you can see within range. For 1 hour, targets have resistance to that damage type. When you cast this spell using a spell slot of 7th level or higher, you may target up to one additional willing creature for each slot level above 6th. -# 277. - Sunbeam (V,S) level 6 Evocation [Concentration] [SOL] +# 278. - Sunbeam (V,S) level 6 Evocation [Concentration] [SOL] You conjure a line of radiance which can burn and blind creatures in the line of effect; undead and oozes save with disadvantage. The beam can be retargeted each turn -# 278. - *Tasha's Otherworldly Guise* © (M,V,S) level 6 Transmutation [Concentration] [UB] +# 279. - *Tasha's Otherworldly Guise* © (M,V,S) level 6 Transmutation [Concentration] [UB] Uttering an incantation, you draw on the magic of the Lower Planes or Upper Planes (your choice) to transform yourself. -# 279. - *Tenser's Transformation* © (V,S) level 6 Transmutation [Concentration] [UB] +# 280. - *Tenser's Transformation* © (V,S) level 6 Transmutation [Concentration] [UB] You endow yourself with endurance and martial prowess fueled by magic. Until the spell ends, you can't cast spells, and you gain the following benefits: • You gain 50 temporary hit points. If any of these remain when the spell ends, they are lost. @@ -1142,178 +1146,178 @@ You endow yourself with endurance and martial prowess fueled by magic. Until the • You can attack twice, instead of once, when you take the Attack action on your turn. Immediately after the spell ends, you must succeed on a DC 15 Constitution saving throw or suffer one level of exhaustion. -# 280. - True Seeing (V,S) level 6 Divination [SOL] +# 281. - True Seeing (V,S) level 6 Divination [SOL] A creature you touch gains True Sight for one hour -# 281. - Wall of Thorns (V,S) level 6 Conjuration [Concentration] [SOL] +# 282. - Wall of Thorns (V,S) level 6 Conjuration [Concentration] [SOL] Creates a wall of tough of needle-sharp thorns, that hurts and slows every creature in it. -# 282. - Arcane Sword (M,V,S) level 7 Evocation [Concentration] [SOL] +# 283. - Arcane Sword (M,V,S) level 7 Evocation [Concentration] [SOL] Summon a weapon that fights for you. -# 283. - Conjure Celestial (V,S) level 7 Conjuration [Concentration] [SOL] +# 284. - Conjure Celestial (V,S) level 7 Conjuration [Concentration] [SOL] Conjures a celestial creature of challenge rating 4 that fights alongside you. If you lose concentration, the creature is dismissed. -# 284. - *Crown of Stars* © (V,S) level 7 Evocation [UB] +# 285. - *Crown of Stars* © (V,S) level 7 Evocation [UB] Seven star-like motes of light appear and orbit your head until the spell ends. You can use a bonus action to send one of the motes streaking toward one creature or object within 120 feet of you. When you do so, make a ranged spell attack. On a hit, the target takes 4d12 radiant damage. Whether you hit or miss, the mote is expended. The spell ends early if you expend the last mote. If you have four or more motes remaining, they shed bright light in a 30-foot radius and dim light for an additional 30 feet. If you have one to three motes remaining, they shed dim light in a 30-foot radius. When you cast this spell using a spell slot of 8th level or higher, the number of motes created increases by two for each slot level above 7th. -# 285. - Delayed Blast Fireball (V,S) level 7 Evocation [Concentration] [SOL] +# 286. - Delayed Blast Fireball (V,S) level 7 Evocation [Concentration] [SOL] Conjures a ball of fire that grows more powerful with time, detonating when a creature enters its space or when the spell ends. -# 286. - Divine Word (V) level 7 Evocation [SOL] +# 287. - Divine Word (V) level 7 Evocation [SOL] Utter a divine word that inflicts various negative conditions on enemies you can see, based on their HP. Also banishes all celestials, elementals, feys, and fiends if they fail their saving throws. -# 287. - *Draconic Transformation* © (M,V,S) level 7 Transmutation [Concentration] [UB] +# 288. - *Draconic Transformation* © (M,V,S) level 7 Transmutation [Concentration] [UB] With a roar, you draw on the magic of dragons to transform yourself, taking on draconic features. You gain the following benefits until the spell ends: • You have blindsight with a range of 30 feet. • When you cast this spell, and as a bonus action on subsequent turns for the duration, you can exhale shimmering energy in a 60-foot cone. Each creature in that area must make a Dexterity saving throw, taking 6d8 force damage on a failed save, or half as much damage on a successful one. • Incorporeal wings sprout from your back, giving you a flying speed of 60 feet. -# 288. - Finger of Death (V,S) level 7 Necromancy [SOL] +# 289. - Finger of Death (V,S) level 7 Necromancy [SOL] Send negative energy coursing through a creature within range. -# 289. - Fire Storm (V,S) level 7 Evocation [SOL] +# 290. - Fire Storm (V,S) level 7 Evocation [SOL] Causes a wide wall of roaring flames to burst up wherever you choose within range. -# 290. - Gravity Slam (V,S) level 7 Transmutation [SOL] +# 291. - Gravity Slam (V,S) level 7 Transmutation [SOL] Increase gravity to slam everyone in a specific area onto the ground. -# 291. - Prismatic Spray (V,S) level 7 Evocation [SOL] +# 292. - Prismatic Spray (V,S) level 7 Evocation [SOL] Each creature within the cone of effect is randomly affected by one or two (roll 8 on d8) rays with the following effects: -# 292. - Regenerate (V,S) level 7 Transmutation [SOL] +# 293. - Regenerate (V,S) level 7 Transmutation [SOL] Touch a creature and stimulate its natural healing ability. -# 293. - Rescue the Dying (V) level 7 Transmutation [UB] +# 294. - Rescue the Dying (V) level 7 Transmutation [UB] With a word, you call positive energy into the target's body to heal and ward it. The target regains a number of hit points equal to 4d10 + 30. It also gains temporary hit points equal to half that amount and resistance to all damage, both lasting until the end of your next turn. When you cast this spell using a spell slot of 8th level or higher, the healing increases by 2d10 for each slot level above 7th. -# 294. - Resurrection (M,V,S) level 7 Necromancy [SOL] +# 295. - Resurrection (M,V,S) level 7 Necromancy [SOL] Brings one creature back to life, up to 100 years after death. -# 295. - *Reverse Gravity* © (V,S) level 7 Transmutation [Concentration] [UB] +# 296. - *Reverse Gravity* © (V,S) level 7 Transmutation [Concentration] [UB] This spell reverses gravity in a 50-foot-radius, 100-foot-high cylinder centered on a point within range. -# 296. - Symbol (V,S) level 7 Abjuration [SOL] +# 297. - Symbol (V,S) level 7 Abjuration [SOL] Inscribe a glyph on a surface. When an enemy starts its turn in the area or enters it, the glyph's effect is applied in a sphere with a 12-cell radius. -# 297. - *Abi-Dalzim's Horrid Wilting* © (V,S) level 8 Necromancy [UB] +# 298. - *Abi-Dalzim's Horrid Wilting* © (V,S) level 8 Necromancy [UB] You draw the moisture from every creature in a 30-foot cube centered on a point you choose within range. Each creature in that area must make a Constitution saving throw. Constructs and undead aren't affected, and plants and ice elementals make this saving throw with disadvantage. A creature takes 10d8 necrotic damage on a failed save, or half as much damage on a successful one. -# 298. - Divine Blade (V,S) level 8 Evocation [Concentration] [SOL] +# 299. - Divine Blade (V,S) level 8 Evocation [Concentration] [SOL] A glowing blade of pure energy springs from your hand. On a hit, the target takes 6d8 radiant damage and must roll a Wisdom saving throw to avoid being stunned until the end of its next turn. -# 299. - Dominate Monster (V,S) level 8 Enchantment [Concentration] [SOL] +# 300. - Dominate Monster (V,S) level 8 Enchantment [Concentration] [SOL] Grants you control over an enemy creature of any type. -# 300. - Earthquake (V,S) level 8 Evocation [Concentration] [SOL] +# 301. - Earthquake (V,S) level 8 Evocation [Concentration] [SOL] You create a seismic disturbance that violently shakes the ground and the creatures standing on it for the duration of the spell. -# 301. - Feeblemind (V,S) level 8 Enchantment [SOL] +# 302. - Feeblemind (V,S) level 8 Enchantment [SOL] You blast the mind of one creature, attempting to shatter its intellect and personality. The target takes 4d6 psychic damage and must make an Intelligence saving throw. On a failed save, the creature's Intelligence, Charisma and Wisdom scores become 1 and it is unable to cast spells. These effects last for 1 minute. -# 302. - Holy Aura (V,S) level 8 Abjuration [Concentration] [SOL] +# 303. - Holy Aura (V,S) level 8 Abjuration [Concentration] [SOL] Allies within 6 cells of you when you cast Holy Aura gain advantage on all saving throws, and other creatures have disadvantage on attack rolls against them until the spell ends. In addition, when a fiend or an undead hits an affected creature with a melee attack, they must succeed on a Constitution saving throw or be blinded until the spell ends. -# 303. - Incendiary Cloud (V,S) level 8 Conjuration [Concentration] [SOL] +# 304. - Incendiary Cloud (V,S) level 8 Conjuration [Concentration] [SOL] A cloud of smoke appears in a sphere with a 4-cell radius. The cloud damages each creature inside it, and moves away from you each turn until the end of the spell's duration or until a moderate wind disperses the cloud. -# 304. - *Maddening Darkness* © (V) level 8 Evocation [Concentration] [UB] +# 305. - *Maddening Darkness* © (V) level 8 Evocation [Concentration] [UB] Magical darkness spreads from a point you choose within range to fill a 60-foot-radius sphere until the spell ends. Shrieks, gibbering, and mad laughter can be heard within the sphere. On activation, and whenever a creature ends its turn in the sphere, it must make a Wisdom saving throw, taking 6d8 psychic damage on a failed save, or half as much damage on a successful one. -# 305. - Maze (V,S) level 8 Abjuration [Concentration] [SOL] +# 306. - Maze (V,S) level 8 Abjuration [Concentration] [SOL] You banish a creature that you can see within range into a labyrinthine demiplane. The target remains there for the spell's duration or until it escapes the maze. -# 306. - *Mind Blank* © (V,S) level 8 Transmutation [UB] +# 307. - *Mind Blank* © (V,S) level 8 Transmutation [UB] Until the spell ends, one willing creature you touch is immune to psychic damage, any effect that would sense its emotions or read its thoughts, divination spells, and the charmed condition. -# 307. - Power Word Stun (V) level 8 Enchantment [SOL] +# 308. - Power Word Stun (V) level 8 Enchantment [SOL] Overwhelm the mind of a creature that has 150 hit points or fewer, leaving it stunned. -# 308. - Soul Expulsion (V,S) level 8 Necromancy [UB] +# 309. - Soul Expulsion (V,S) level 8 Necromancy [UB] You blast a foe's soul with magical power, causing it to glow with otherwordly light. Choose one creature that you can see within range, which must make a Charisma saving throw. On a failed saving throw, the target takes 11d8 necrotic damage and is stunned until the start of your next turn. On a successful saving throw, the target takes half damage and isn't stunned. Each enemy other than the target that is within 60 feet of the target must make a Wisdom saving throw. On a failed save, a creature takes 7d8 radiant damage and has disadvantage on attack rolls until the end of your next turn. On a successful saving throw a creature takes half damage and nothing else. When this spell targets undead, the spell ignores any resistance or immunity to necrotic damage, and the target has disadvantage on the saving throw. When you cast this spell using a spell slot of 9th level, both the necrotic damage and radiant damage increase by 2d8. -# 309. - Spell Ward (V,S) level 8 Abjuration [Concentration] [SOL] +# 310. - Spell Ward (V,S) level 8 Abjuration [Concentration] [SOL] Creates a mobile globe that is impenetrable to enemy spells cast from outside it. -# 310. - Sunburst (V,S) level 8 Evocation [SOL] +# 311. - Sunburst (V,S) level 8 Evocation [SOL] Brilliant sunlight blazes in a sphere with a 12-cell radius. Each creature that fails a Constitution saving throw takes radiant damage and is blinded for 1 minute. Any darkness created by a spell in the area is dispelled. -# 311. - Thunderstorm (V,S) level 8 Transmutation [SOL] +# 312. - Thunderstorm (V,S) level 8 Transmutation [SOL] You create a blast of thunder in a sphere that causes thunder and lightning damage to everyone, and can blind or stun those who fail a CON saving throw. -# 312. - Wild Shapes (V,S) level 8 Transmutation [Concentration] [SOL] +# 313. - Wild Shapes (V,S) level 8 Transmutation [Concentration] [SOL] Turns other creatures in to beasts for one day. -# 313. - *Foresight* © (V,S) level 9 Transmutation [UB] +# 314. - *Foresight* © (V,S) level 9 Transmutation [UB] You touch a willing creature and bestow a limited ability to see into the immediate future. For the duration, the target can't be surprised and has advantage on attack rolls, ability checks, and saving throws. Additionally, other creatures have disadvantage on attack rolls against the target for the duration. -# 314. - *Invulnerability* © (M,V,S) level 9 Abjuration [Concentration] [UB] +# 315. - *Invulnerability* © (M,V,S) level 9 Abjuration [Concentration] [UB] You are immune to all damage until the spell ends. -# 315. - *Mass Heal* © (V,S) level 9 Transmutation [UB] +# 316. - *Mass Heal* © (V,S) level 9 Transmutation [UB] A flood of healing energy flows from you into injured creatures around you. You restore 120 hit points each to 6 creatures that you can see within range. Creatures healed by this spell are also cured of all diseases and any effect making them blinded or deafened. This spell has no effect on undead or constructs. -# 316. - *Meteor Swarm* © (V,S) level 9 Transmutation [UB] +# 317. - *Meteor Swarm* © (V,S) level 9 Transmutation [UB] Blazing orbs of fire plummet to the ground at a single point you can see within range. Each creature in a 40-foot-radius sphere centered on the point you choose must make a Dexterity saving throw. The sphere spreads around corners. A creature takes 20d6 fire damage and 20d6 bludgeoning damage on a failed save, or half as much damage on a successful one. A creature in the area of more than one fiery burst is affected only once. -# 317. - *Power Word Heal* © (V,S) level 9 Enchantment [UB] +# 318. - *Power Word Heal* © (V,S) level 9 Enchantment [UB] A wave of healing energy washes over the creature you touch. The target regains all its hit points. If the creature is charmed, frightened, paralyzed, or stunned, the condition ends. If the creature is prone, it can use its reaction to stand up. This spell has no effect on undead or constructs. -# 318. - *Power Word Kill* © (V,S) level 9 Transmutation [UB] +# 319. - *Power Word Kill* © (V,S) level 9 Transmutation [UB] You utter a word of power that can compel one creature you can see within range to die instantly. If the creature you choose has 100 hit points or fewer, it dies. Otherwise, the spell has no effect. -# 319. - *Psychic Scream* © (S) level 9 Enchantment [UB] +# 320. - *Psychic Scream* © (S) level 9 Enchantment [UB] You unleash the power of your mind to blast the intellect of up to ten creatures of your choice that you can see within range. Each target must make an Intelligence saving throw. On a failed save, a target takes 14d6 psychic damage and is stunned for 1 minute. On a successful save, a target takes half as much damage and isn't stunned. A stunned target can make an Intelligence saving throw at the end of each of its turns. On a successful save, the stunning effect ends. -# 320. - *Shapechange* © (M,V,S) level 9 Transmutation [Concentration] [UB] +# 321. - *Shapechange* © (M,V,S) level 9 Transmutation [Concentration] [UB] You assume the form of a different creature for the duration. The new form can be of any creature with a challenge rating equal to your level or lower. -# 321. - *Time Stop* © (V) level 9 Transmutation [UB] +# 322. - *Time Stop* © (V) level 9 Transmutation [UB] You briefly stop the flow of time for everyone but yourself. No time passes for other creatures, while you take 1d4+1 turns in a row, during which you can use actions and move as normal. This spell ends if one of the actions you use during this period, or any effects that you create during this period, affects a creature other than you. -# 322. - *Weird* © (V,S) level 9 Illusion [Concentration] [UB] +# 323. - *Weird* © (V,S) level 9 Illusion [Concentration] [UB] Drawing on the deepest fears of a group of creatures, you create illusory creatures in their minds, visible only to them. Each enemy in a 30-foot-radius sphere centered on a point of your choice within range must make a Wisdom saving throw. On a failed save, a creature becomes frightened for the duration. The illusion calls on the creature's deepest fears, manifesting its worst nightmares as an implacable threat. At the end of each of the frightened creature's turns, it must succeed on a Wisdom saving throw or take 4d10 psychic damage. On a successful save, the spell ends for that creature. diff --git a/SolastaUnfinishedBusiness/Models/SpellsContext.cs b/SolastaUnfinishedBusiness/Models/SpellsContext.cs index a69157d550..3957b0dee9 100644 --- a/SolastaUnfinishedBusiness/Models/SpellsContext.cs +++ b/SolastaUnfinishedBusiness/Models/SpellsContext.cs @@ -268,6 +268,7 @@ internal static void LateLoad() RegisterSpell(CausticZap, 0, SpellListSorcerer, SpellListWizard, spellListInventorClass); RegisterSpell(BuildChaosBolt(), 0, SpellListSorcerer); RegisterSpell(BuildChromaticOrb(), 0, SpellListSorcerer, SpellListWizard); + RegisterSpell(BuildDissonantWhispers(), 0, SpellListBard); RegisterSpell(EarthTremor, 0, SpellListBard, SpellListDruid, SpellListSorcerer, SpellListWizard); RegisterSpell(EnsnaringStrike, 0, SpellListRanger); RegisterSpell(ElementalInfusion, 0, SpellListDruid, SpellListRanger, SpellListSorcerer, SpellListWizard); diff --git a/SolastaUnfinishedBusiness/Properties/Resources.Designer.cs b/SolastaUnfinishedBusiness/Properties/Resources.Designer.cs index 442ef83978..74f8539340 100644 --- a/SolastaUnfinishedBusiness/Properties/Resources.Designer.cs +++ b/SolastaUnfinishedBusiness/Properties/Resources.Designer.cs @@ -1199,6 +1199,16 @@ public static byte[] DeadeyeIcon { } } + /// + /// Looks up a localized resource of type System.Byte[]. + /// + public static byte[] DissonantWhispers { + get { + object obj = ResourceManager.GetObject("DissonantWhispers", resourceCulture); + return ((byte[])(obj)); + } + } + /// /// Looks up a localized resource of type System.Byte[]. /// diff --git a/SolastaUnfinishedBusiness/Properties/Resources.resx b/SolastaUnfinishedBusiness/Properties/Resources.resx index eb0645b7dc..bd9d2013f0 100644 --- a/SolastaUnfinishedBusiness/Properties/Resources.resx +++ b/SolastaUnfinishedBusiness/Properties/Resources.resx @@ -1683,6 +1683,11 @@ PublicKeyToken=b03f5f7f11d50a3a + + ../Resources/Spells/DissonantWhispers.png;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b03f5f7f11d50a3a + + ../Resources/Spells/ChromaticOrb.png;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a diff --git a/SolastaUnfinishedBusiness/Resources/Spells/DissonantWhispers.png b/SolastaUnfinishedBusiness/Resources/Spells/DissonantWhispers.png new file mode 100644 index 0000000000000000000000000000000000000000..06560e1047a862167a05970110a0885b6f2c213e GIT binary patch literal 12849 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 as GameLocationActionManager; + + if (!actionManager || + action.SaveOutcome == RollOutcome.Success || + !target.CanReact()) + { + yield break; + } + + var position = GetCandidatePosition(action.ActingCharacter, target); + var actionParams = + new CharacterActionParams( + target, Id.TacticalMove, MoveStance.Run, position, LocationDefinitions.Orientation.North) + { + BoolParameter3 = false, BoolParameter5 = false + }; + + actionManager.actionChainByCharacter.TryGetValue(target, out var actionChainSlot); + + var collection = actionChainSlot?.actionQueue; + + if (collection != null && + !collection.Empty() && + collection[0].action is CharacterActionMoveStepWalk) + { + actionParams.BoolParameter2 = true; + } + + target.SpendActionType(ActionType.Reaction); + actionManager.ExecuteActionChain( + new CharacterActionChainParams(actionParams.ActingCharacter, actionParams), null, false); + } + + private static int3 GetCandidatePosition(GameLocationCharacter caster, GameLocationCharacter target) + { + var positioningService = ServiceRepository.GetService(); + var tacticalMoves = target.MaxTacticalMoves; + var boxInt = new BoxInt(target.LocationPosition, int3.zero, int3.zero); + var position = target.LocationPosition; + var distance = -1f; + + boxInt.Inflate(tacticalMoves, 0, tacticalMoves); + + foreach (var candidatePosition in boxInt.EnumerateAllPositionsWithin()) + { + if (!positioningService.CanPlaceCharacter( + target, candidatePosition, CellHelpers.PlacementMode.Station) || + !positioningService.CanCharacterStayAtPosition_Floor( + target, candidatePosition, onlyCheckCellsWithRealGround: true) || + positioningService.IsDangerousPosition(target, candidatePosition)) + { + continue; + } + + var candidateDistance = int3.Distance(candidatePosition, caster.LocationPosition); + + if (candidateDistance < distance) + { + continue; + } + + distance = candidateDistance; + position = candidatePosition; + } + + return position; + } + } + + #endregion + #region Ice Blade internal static SpellDefinition BuildIceBlade() diff --git a/SolastaUnfinishedBusiness/Translations/de/Spells/Spells01-de.txt b/SolastaUnfinishedBusiness/Translations/de/Spells/Spells01-de.txt index b123089865..90d05768c5 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Spells/Spells01-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Spells/Spells01-de.txt @@ -74,6 +74,8 @@ Spell/&ChaosBoltDescription=Führe einen Fernangriff mit Zauber gegen ein Ziel a Spell/&ChaosBoltTitle=Chaosblitz Spell/&ChromaticOrbDescription=Du schleuderst eine Energiekugel mit 4 Zoll Durchmesser auf eine Kreatur, die du in Reichweite sehen kannst. Du wählst Säure, Kälte, Feuer, Blitz, Gift oder Donner als Art der Kugel, die du erschaffst, und führst dann einen Fernkampf-Zauberangriff gegen das Ziel aus. Wenn der Angriff trifft, erleidet die Kreatur 3W8 Schaden der von dir gewählten Art. Spell/&ChromaticOrbTitle=Chromatische Kugel +Spell/&DissonantWhispersDescription=Du flüsterst eine dissonante Melodie, die nur eine Kreatur deiner Wahl in Reichweite hören kann, und quälst sie mit schrecklichen Schmerzen. Das Ziel muss einen Weisheitsrettungswurf machen. Bei einem misslungenen Rettungswurf erleidet es 3W6 psychischen Schaden und muss sofort seine Reaktion, falls möglich, nutzen, um sich so weit wie seine Geschwindigkeit es zulässt von dir wegzubewegen. Die Kreatur bewegt sich nicht auf offensichtlich gefährliches Gelände, wie etwa ein Feuer oder eine Grube. Bei einem erfolgreichen Rettungswurf erleidet das Ziel nur halb so viel Schaden und muss sich nicht wegbewegen. Wenn du diesen Zauber mit einem Zauberplatz der 2. Stufe oder höher wirkst, erhöht sich der Schaden um 1W6 für jede Stufe über der 1. +Spell/&DissonantWhispersTitle=Dissonantes Flüstern Spell/&EarthTremorDescription=Sie schlagen auf den Boden und lösen ein Erdbeben mit seismischer Kraft aus, das Erde, Steine und Sand aufwirbelt. Spell/&EarthTremorTitle=Erdbeben Spell/&ElementalInfusionDescription=Der Zauber fängt einen Teil der eingehenden Energie ein, schwächt so seine Wirkung auf Sie ab und speichert sie für Ihren nächsten Nahkampfangriff. Sie sind bis zum Beginn Ihres nächsten Zuges resistent gegen die auslösende Schadensart. Außerdem erleidet das Ziel beim ersten Nahkampfangriff in Ihrem nächsten Zug zusätzlich 1W6 Schaden der auslösenden Art und der Zauber endet. Wenn Sie diesen Zauber mit einem Zauberplatz der 2. Stufe oder höher wirken, erhöht sich der zusätzliche Schaden um 1W6 für jede Stufe über der 1. diff --git a/SolastaUnfinishedBusiness/Translations/en/Spells/Spells01-en.txt b/SolastaUnfinishedBusiness/Translations/en/Spells/Spells01-en.txt index 5873806d9b..e15e94b18d 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Spells/Spells01-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Spells/Spells01-en.txt @@ -74,6 +74,8 @@ Spell/&ChaosBoltDescription=Make a ranged spell attack against a target. On a hi Spell/&ChaosBoltTitle=Chaos Bolt Spell/&ChromaticOrbDescription=You hurl a 4-inch-diameter sphere of energy at a creature that you can see within range. You choose acid, cold, fire, lightning, poison, or thunder for the type of orb you create, and then make a ranged spell attack against the target. If the attack hits, the creature takes 3d8 damage of the type you chose. Spell/&ChromaticOrbTitle=Chromatic Orb +Spell/&DissonantWhispersDescription=You whisper a discordant melody that only one creature of your choice within range can hear, wracking it with terrible pain. The target must make a Wisdom saving throw. On a failed save, it takes 3d6 psychic damage and must immediately use its reaction, if available, to move as far as its speed allows away from you. The creature doesn't move into obviously dangerous ground, such as a fire or a pit. On a successful save, the target takes half as much damage and doesn't have to move away. When you cast this spell using a spell slot of 2nd level or higher, the damage increases by 1d6 for each slot level above 1st. +Spell/&DissonantWhispersTitle=Dissonant Whispers Spell/&EarthTremorDescription=You strike the ground and unleash a tremor of seismic force, hurling up earth, rock, and sand. Spell/&EarthTremorTitle=Earth Tremor Spell/&ElementalInfusionDescription=The spell captures some of the incoming energy, lessening its effect on you and storing it for your next melee attack. You have resistance to the triggering damage type until the start of your next turn. Also, the first time you hit with a melee attack on your next turn, the target takes an extra 1d6 damage of the triggering type, and the spell ends. When you cast this spell using a spell slot of 2nd level or higher, the extra damage increases by 1d6 for each slot level above 1st. diff --git a/SolastaUnfinishedBusiness/Translations/es/Spells/Spells01-es.txt b/SolastaUnfinishedBusiness/Translations/es/Spells/Spells01-es.txt index 252a9fd797..436fa5f93f 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Spells/Spells01-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Spells/Spells01-es.txt @@ -74,6 +74,8 @@ Spell/&ChaosBoltDescription=Realiza un ataque de hechizo a distancia contra un o Spell/&ChaosBoltTitle=Rayo del caos Spell/&ChromaticOrbDescription=Lanzas una esfera de energía de 4 pulgadas de diámetro a una criatura que puedas ver dentro del alcance. Eliges ácido, frío, fuego, relámpago, veneno o trueno como el tipo de orbe que creas y luego realizas un ataque de hechizo a distancia contra el objetivo. Si el ataque impacta, la criatura recibe 3d8 puntos de daño del tipo que elegiste. Spell/&ChromaticOrbTitle=Orbe cromático +Spell/&DissonantWhispersDescription=Susurras una melodía discordante que solo una criatura de tu elección que esté dentro del alcance puede oír, atormentándola con un dolor terrible. El objetivo debe realizar una tirada de salvación de Sabiduría. Si falla, sufre 3d6 puntos de daño psíquico y debe usar inmediatamente su reacción, si está disponible, para alejarse de ti tanto como su velocidad le permita. La criatura no se mueve hacia un terreno obviamente peligroso, como un fuego o un pozo. Si tiene éxito, el objetivo sufre la mitad del daño y no tiene que alejarse. Cuando lanzas este conjuro usando un espacio de conjuro de nivel 2 o superior, el daño aumenta en 1d6 por cada nivel de espacio por encima del 1. +Spell/&DissonantWhispersTitle=Susurros disonantes Spell/&EarthTremorDescription=Golpeas el suelo y desatas un temblor de fuerza sísmica, arrojando tierra, rocas y arena. Spell/&EarthTremorTitle=Terremoto Spell/&ElementalInfusionDescription=El hechizo captura parte de la energía entrante, lo que reduce su efecto sobre ti y la almacena para tu próximo ataque cuerpo a cuerpo. Tienes resistencia al tipo de daño desencadenante hasta el comienzo de tu próximo turno. Además, la primera vez que impactas con un ataque cuerpo a cuerpo en tu próximo turno, el objetivo sufre 1d6 puntos de daño adicionales del tipo desencadenante y el hechizo termina. Cuando lanzas este hechizo usando un espacio de hechizo de nivel 2 o superior, el daño adicional aumenta en 1d6 por cada nivel de espacio por encima del 1. diff --git a/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells01-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells01-fr.txt index 52785ab272..64fc4b2efa 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells01-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells01-fr.txt @@ -74,6 +74,8 @@ Spell/&ChaosBoltDescription=Lancez une attaque à distance contre une cible. En Spell/&ChaosBoltTitle=Éclair du chaos Spell/&ChromaticOrbDescription=Vous lancez une sphère d'énergie de 10 cm de diamètre sur une créature que vous pouvez voir à portée. Vous choisissez l'acide, le froid, le feu, la foudre, le poison ou le tonnerre comme type d'orbe que vous créez, puis effectuez une attaque de sort à distance contre la cible. Si l'attaque touche, la créature subit 3d8 dégâts du type que vous avez choisi. Spell/&ChromaticOrbTitle=Orbe chromatique +Spell/&DissonantWhispersDescription=Vous murmurez une mélodie discordante que seule une créature de votre choix à portée peut entendre, la secouant d'une douleur terrible. La cible doit réussir un jet de sauvegarde de Sagesse. En cas d'échec, elle subit 3d6 dégâts psychiques et doit immédiatement utiliser sa réaction, si elle en a la possibilité, pour s'éloigner de vous aussi loin que sa vitesse le lui permet. La créature ne se déplace pas sur un terrain manifestement dangereux, comme un feu ou une fosse. En cas de réussite, la cible subit la moitié des dégâts et n'a pas à s'éloigner. Lorsque vous lancez ce sort en utilisant un emplacement de sort de niveau 2 ou supérieur, les dégâts augmentent de 1d6 pour chaque niveau d'emplacement au-dessus du 1er. +Spell/&DissonantWhispersTitle=Chuchotements dissonants Spell/&EarthTremorDescription=Vous frappez le sol et déclenchez une secousse de force sismique, projetant de la terre, des roches et du sable. Spell/&EarthTremorTitle=Tremblement de terre Spell/&ElementalInfusionDescription=Le sort capture une partie de l'énergie entrante, réduisant son effet sur vous et la stockant pour votre prochaine attaque au corps à corps. Vous bénéficiez d'une résistance au type de dégâts déclencheur jusqu'au début de votre prochain tour. De plus, la première fois que vous touchez avec une attaque au corps à corps lors de votre prochain tour, la cible subit 1d6 dégâts supplémentaires du type déclencheur et le sort prend fin. Lorsque vous lancez ce sort en utilisant un emplacement de sort de niveau 2 ou supérieur, les dégâts supplémentaires augmentent de 1d6 pour chaque niveau d'emplacement au-dessus du 1er. diff --git a/SolastaUnfinishedBusiness/Translations/it/Spells/Spells01-it.txt b/SolastaUnfinishedBusiness/Translations/it/Spells/Spells01-it.txt index 50ec2507cc..1e55a1f07a 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Spells/Spells01-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Spells/Spells01-it.txt @@ -74,6 +74,8 @@ Spell/&ChaosBoltDescription=Esegui un attacco magico a distanza contro un bersag Spell/&ChaosBoltTitle=Fulmine del Caos Spell/&ChromaticOrbDescription=Scagli una sfera di energia di 4 pollici di diametro contro una creatura che puoi vedere entro il raggio d'azione. Scegli acido, freddo, fuoco, fulmine, veleno o tuono per il tipo di sfera che crei, quindi esegui un attacco magico a distanza contro il bersaglio. Se l'attacco colpisce, la creatura subisce 3d8 danni del tipo che hai scelto. Spell/&ChromaticOrbTitle=Sfera cromatica +Spell/&DissonantWhispersDescription=Sussurri una melodia discordante che solo una creatura a tua scelta entro il raggio d'azione può sentire, lacerandola con un dolore terribile. Il bersaglio deve effettuare un tiro salvezza su Saggezza. Se fallisce il tiro salvezza, subisce 3d6 danni psichici e deve usare immediatamente la sua reazione, se disponibile, per allontanarsi da te il più lontano possibile dalla sua velocità. La creatura non si sposta in un terreno palesemente pericoloso, come un fuoco o una fossa. Se supera il tiro salvezza, il bersaglio subisce la metà dei danni e non deve allontanarsi. Quando lanci questo incantesimo usando uno slot incantesimo di 2° livello o superiore, il danno aumenta di 1d6 per ogni livello di slot superiore al 1°. +Spell/&DissonantWhispersTitle=Sussurri dissonanti Spell/&EarthTremorDescription=Colpisci il terreno e scateni una scossa di forza sismica, scagliando in aria terra, rocce e sabbia. Spell/&EarthTremorTitle=Tremore della Terra Spell/&ElementalInfusionDescription=L'incantesimo cattura parte dell'energia in arrivo, riducendone l'effetto su di te e conservandola per il tuo prossimo attacco in mischia. Hai resistenza al tipo di danno scatenante fino all'inizio del tuo prossimo turno. Inoltre, la prima volta che colpisci con un attacco in mischia nel tuo prossimo turno, il bersaglio subisce 1d6 danni extra del tipo scatenante e l'incantesimo termina. Quando lanci questo incantesimo usando uno slot incantesimo di 2° livello o superiore, il danno extra aumenta di 1d6 per ogni livello di slot superiore al 1°. diff --git a/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells01-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells01-ja.txt index 6f6e6419a7..a747e576b0 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells01-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells01-ja.txt @@ -74,6 +74,8 @@ Spell/&ChaosBoltDescription=ターゲットに対して遠隔呪文攻撃を行 Spell/&ChaosBoltTitle=カオスボルト Spell/&ChromaticOrbDescription=範囲内に見える生き物に直径 4 インチのエネルギーの球を投げます。作成するオーブの種類として酸、冷気、火、稲妻、毒、または雷を選択し、ターゲットに対して遠隔呪文攻撃を行います。攻撃が命中した場合、そのクリーチャーはあなたが選んだタイプに 3d8 のダメージを受けます。 Spell/&ChromaticOrbTitle=クロマティックオーブ +Spell/&DissonantWhispersDescription=範囲内にいる選択した 1 体のクリーチャーにのみ聞こえる不協和音のメロディーをささやき、そのクリーチャーにひどい苦痛を与えます。ターゲットは【判断力】セーヴィング スローを行わなければなりません。セーヴィング スローに失敗すると、ターゲットは 3d6 の精神ダメージを受け、可能であれば、即座にリアクションを使用して、移動速度が許す限り遠くまで移動して、ターゲットから離れなければなりません。クリーチャーは、火や穴など、明らかに危険な地面には移動しません。セーヴィング スローに成功すると、ターゲットは半分のダメージを受け、離れる必要もありません。この呪文を 2 レベル以上の呪文スロットを使用して発動すると、1 レベルを超える各スロット レベルごとにダメージが 1d6 増加します。 +Spell/&DissonantWhispersTitle=不協和音のささやき Spell/&EarthTremorDescription=地面を叩き、地震力の揺れを引き起こし、土、岩、砂を巻き上げます。 Spell/&EarthTremorTitle=アーストレマー Spell/&ElementalInfusionDescription=この呪文は入ってくるエネルギーの一部を捕捉し、あなたへの影響を軽減し、次の近接攻撃に備えて蓄えます。次のターンの開始時まで、あなたは誘発ダメージタイプに対する耐性を持ちます。また、次のターンで初めて近接攻撃を当てたとき、ターゲットは誘発タイプに追加の 1d6 ダメージを受け、呪文は終了します。あなたが第 2 レベル以上の呪文スロットを使用してこの呪文を唱えると、追加ダメージは第 1 レベル以上のスロット レベルごとに 1d6 増加します。 diff --git a/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells01-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells01-ko.txt index 35819edd1a..5caef179fd 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells01-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells01-ko.txt @@ -74,6 +74,8 @@ Spell/&ChaosBoltDescription=대상에게 원거리 주문 공격을 합니다. Spell/&ChaosBoltTitle=카오스볼트 Spell/&ChromaticOrbDescription=범위 내에서 볼 수 있는 생물에게 직경 4인치의 에너지 구체를 던집니다. 생성하는 오브 유형에 대해 산성, 냉기, 불, 번개, 독 또는 천둥을 선택한 다음 대상에 대해 원거리 주문 공격을 가합니다. 공격이 적중하면 생물은 선택한 유형의 3d8 피해를 입습니다. Spell/&ChromaticOrbTitle=색채의 오브 +Spell/&DissonantWhispersDescription=당신은 범위 내에서 당신이 선택한 한 생명체만 들을 수 있는 불협화음의 멜로디를 속삭이며, 끔찍한 고통으로 그 생명체를 괴롭힙니다. 대상은 지혜 구원 굴림을 해야 합니다. 구원에 실패하면, 대상은 3d6의 사이킥 피해를 입고, 가능하다면 즉시 반응을 사용하여 속도가 허락하는 한 멀리 당신에게서 멀어져야 합니다. 그 생명체는 불이나 구덩이와 같이 명백히 위험한 곳으로 이동하지 않습니다. 구원에 성공하면, 대상은 절반의 피해를 입고, 멀어질 필요가 없습니다. 2레벨 이상의 주문 슬롯을 사용하여 이 주문을 시전하면, 1레벨 위의 슬롯 레벨마다 피해가 1d6씩 증가합니다. +Spell/&DissonantWhispersTitle=불협화음의 속삭임 Spell/&EarthTremorDescription=당신은 땅을 치고 지진력의 진동을 일으키고 흙, 바위, 모래를 던집니다. Spell/&EarthTremorTitle=대지진 Spell/&ElementalInfusionDescription=이 주문은 들어오는 에너지의 일부를 포착하여 그 효과를 줄이고 다음 근접 공격을 위해 저장합니다. 다음 턴이 시작될 때까지 유발 피해 유형에 대한 저항력을 갖습니다. 또한 다음 턴에 처음으로 근접 공격을 가할 때 대상은 발동 유형의 추가 1d6 피해를 입고 주문이 종료됩니다. 2레벨 이상의 주문 슬롯을 사용하여 이 주문을 시전하면 1레벨 이상의 각 슬롯 레벨마다 추가 피해가 1d6씩 증가합니다. diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells01-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells01-pt-BR.txt index 2e6c599d8b..eb1f095a68 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells01-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells01-pt-BR.txt @@ -74,6 +74,8 @@ Spell/&ChaosBoltDescription=Faça um ataque mágico à distância contra um alvo Spell/&ChaosBoltTitle=Raio do Caos Spell/&ChromaticOrbDescription=Você arremessa uma esfera de energia de 4 polegadas de diâmetro em uma criatura que você pode ver dentro do alcance. Você escolhe ácido, frio, fogo, relâmpago, veneno ou trovão para o tipo de orbe que você cria, e então faz um ataque de magia à distância contra o alvo. Se o ataque acertar, a criatura sofre 3d8 de dano do tipo que você escolheu. Spell/&ChromaticOrbTitle=Orbe Cromático +Spell/&DissonantWhispersDescription=Você sussurra uma melodia dissonante que somente uma criatura de sua escolha dentro do alcance pode ouvir, atormentando-a com uma dor terrível. O alvo deve fazer um teste de resistência de Sabedoria. Em um teste falho, ele sofre 3d6 de dano psíquico e deve usar imediatamente sua reação, se disponível, para se mover o mais longe que sua velocidade permitir para longe de você. A criatura não se move para um terreno obviamente perigoso, como uma fogueira ou um poço. Em um teste bem-sucedido, o alvo sofre metade do dano e não precisa se afastar. Quando você conjura esta magia usando um espaço de magia de 2º nível ou superior, o dano aumenta em 1d6 para cada nível de espaço acima do 1º. +Spell/&DissonantWhispersTitle=Sussurros Dissonantes Spell/&EarthTremorDescription=Você atinge o chão e desencadeia um tremor de força sísmica, arremessando terra, pedras e areia. Spell/&EarthTremorTitle=Tremor de terra Spell/&ElementalInfusionDescription=A magia captura parte da energia recebida, diminuindo seu efeito em você e armazenando-a para seu próximo ataque corpo a corpo. Você tem resistência ao tipo de dano desencadeador até o início do seu próximo turno. Além disso, na primeira vez que você acerta com um ataque corpo a corpo no seu próximo turno, o alvo recebe 1d6 de dano extra do tipo desencadeador, e a magia termina. Quando você conjura esta magia usando um espaço de magia de 2º nível ou superior, o dano extra aumenta em 1d6 para cada nível de espaço acima do 1º. diff --git a/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells01-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells01-ru.txt index b14435f47c..317e7c01a1 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells01-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells01-ru.txt @@ -74,6 +74,8 @@ Spell/&ChaosBoltDescription=Вы бросаете волнистую, трепе Spell/&ChaosBoltTitle=Снаряд хаоса Spell/&ChromaticOrbDescription=Вы бросаете 4-дюймовую сферу энергии в существо, которое видите в пределах дистанции. Выберите звук, кислоту, огонь, холод, электричество или яд при создании сферы, а затем совершите по цели дальнобойную атаку заклинанием. Если атака попадает, существо получает 3d8 урона выбранного вида. Spell/&ChromaticOrbTitle=Цветной шарик +Spell/&DissonantWhispersDescription=Вы шепчете диссонирующую мелодию, которую может услышать только одно существо по вашему выбору в пределах досягаемости, причиняя ему ужасную боль. Цель должна сделать спасбросок Мудрости. При провале она получает 3d6 психического урона и должна немедленно использовать свою реакцию, если она доступна, чтобы отойти от вас как можно дальше, насколько позволяет ее скорость. Существо не перемещается в явно опасную местность, такую ​​как огонь или яма. При успешном спасброске цель получает половину урона и ей не нужно отходить. Когда вы произносите это заклинание, используя ячейку заклинания 2-го уровня или выше, урон увеличивается на 1d6 за каждый уровень ячейки выше 1-го. +Spell/&DissonantWhispersTitle=Диссонансный шепот Spell/&EarthTremorDescription=Вы сотрясаете землю в пределах дистанции. Все существа, кроме вас, в этой области должны совершить спасбросок Ловкости. При провале существо получает 1к6 дробящего урона и сбивается с ног. Если поверхность представляет собой рыхлую землю или камень, то область воздействия становится труднопроходимой местностью. Spell/&EarthTremorTitle=Дрожь земли Spell/&ElementalInfusionDescription=Заклинание поглощает часть энергии, направленной на вас, ослабляя эффект и запасая эту энергию для использования во время следующей рукопашной атаки. До начала своего следующего хода вы получаете сопротивление тому виду урона, который спровоцировал данное заклинание. Кроме того, когда вы впервые попадаете рукопашной атакой в следующем ходу, цель получает дополнительно 1d6 урона этого вида, после чего заклинание заканчивается. Если вы накладываете это заклинание, используя ячейку 2-го уровня или выше, то дополнительный урон увеличивается на 1d6 за каждый уровень ячейки выше 1-го. diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells01-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells01-zh-CN.txt index d185b9414c..6786d78833 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells01-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells01-zh-CN.txt @@ -74,6 +74,8 @@ Spell/&ChaosBoltDescription=对目标进行远程法术攻击。命中后,目 Spell/&ChaosBoltTitle=混乱箭 Spell/&ChromaticOrbDescription=你向范围内你能看到的一个生物投掷一个直径 4 寸的能量球。你选择强酸、冷冻、火焰、闪电、毒素或雷鸣作为你创造的球体类型,然后对目标进行远程法术攻击。如果攻击命中,该生物将受到你选择类型的 3d8 点伤害。 Spell/&ChromaticOrbTitle=繁彩球 +Spell/&DissonantWhispersDescription=你低声吟唱着一段刺耳的旋律,只有你选择的范围内的一个生物可以听到,这让目标痛苦不堪。目标必须进行一次感知豁免检定。如果豁免失败,目标将受到 3d6 精神伤害,并且必须立即使用其反应(如果可用)以尽可能快的速度远离你。该生物不会移动到明显危险的地方,例如火或坑。如果豁免成功,目标受到的伤害减半,并且不必离开。当你使用 2 级或更高级别的法术位施放此法术时,伤害每高于 1 级法术位等级增加 1d6。 +Spell/&DissonantWhispersTitle=不和谐的私语 Spell/&EarthTremorDescription=你撞击地面并释放出地震力的颤抖,将泥土、岩石和沙子掀起。 Spell/&EarthTremorTitle=地颤 Spell/&ElementalInfusionDescription=该法术会捕获一些传入的能量,减轻其对你的影响,并将其储存起来以供你的下一次近战攻击。在你的下一个回合开始之前,你对触发伤害类型有抗性。此外,当你在下个回合第一次进行近战攻击时,目标会受到触发类型的额外 1d6 点伤害,并且该法术结束。当你使用 2 环或更高环阶的法术位施放此法术时,每高于 1 环阶的法术位环阶,额外伤害就会增加 1d6。 From a3145614455197283895393670e64a6fafccb8a6 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Mon, 2 Sep 2024 21:29:47 -0700 Subject: [PATCH 023/212] add MyExecuteActionTacticalMove --- .../Api/DatabaseHelper-RELEASE.cs | 3 + .../GameLocationCharacterExtensions.cs | 29 ++ SolastaUnfinishedBusiness/Feats/RaceFeats.cs | 6 +- .../Models/CharacterUAContext.cs | 11 +- .../Spells/SpellBuildersLevel01.cs | 295 ++++++++++++++---- .../Subclasses/Builders/GambitsBuilders.cs | 29 +- .../Subclasses/MartialWarlord.cs | 29 +- 7 files changed, 284 insertions(+), 118 deletions(-) diff --git a/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs b/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs index ef51afb4c6..afe49cf513 100644 --- a/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs +++ b/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs @@ -3912,6 +3912,9 @@ internal static class DecisionPackageDefinitions internal static DecisionPackageDefinition DefaultSupportCasterWithBackupAttacksDecisions { get; } = GetDefinition("DefaultSupportCasterWithBackupAttacksDecisions"); + internal static DecisionPackageDefinition Idle { get; } = + GetDefinition("Idle"); + internal static DecisionPackageDefinition IdleGuard_Default { get; } = GetDefinition("IdleGuard_Default"); } diff --git a/SolastaUnfinishedBusiness/Api/GameExtensions/GameLocationCharacterExtensions.cs b/SolastaUnfinishedBusiness/Api/GameExtensions/GameLocationCharacterExtensions.cs index 7bc7aeef45..c788cf9aa2 100644 --- a/SolastaUnfinishedBusiness/Api/GameExtensions/GameLocationCharacterExtensions.cs +++ b/SolastaUnfinishedBusiness/Api/GameExtensions/GameLocationCharacterExtensions.cs @@ -129,6 +129,35 @@ internal static void MyExecuteActionStabilizeAndStandUp( actionService.ExecuteInstantSingleAction(new CharacterActionParams(character, Id.StandUp)); } + internal static void MyExecuteActionTacticalMove(this GameLocationCharacter character, int3 position) + { + var actionManager = ServiceRepository.GetService() as GameLocationActionManager; + + if (!actionManager) + { + return; + } + + var actionParams = new CharacterActionParams( + character, Id.TacticalMove, MoveStance.Run, position, LocationDefinitions.Orientation.North) + { + BoolParameter3 = false, BoolParameter5 = false + }; + + actionManager!.actionChainByCharacter.TryGetValue(character, out var actionChainSlot); + + var collection = actionChainSlot?.actionQueue; + + if (collection is { Count: > 0 } && + collection[0].action is CharacterActionMoveStepWalk) + { + actionParams.BoolParameter2 = true; + } + + actionManager.ExecuteActionChain( + new CharacterActionChainParams(actionParams.ActingCharacter, actionParams), null, false); + } + // // mod custom reactions // diff --git a/SolastaUnfinishedBusiness/Feats/RaceFeats.cs b/SolastaUnfinishedBusiness/Feats/RaceFeats.cs index 971e12382c..7380fe31bc 100644 --- a/SolastaUnfinishedBusiness/Feats/RaceFeats.cs +++ b/SolastaUnfinishedBusiness/Feats/RaceFeats.cs @@ -1467,12 +1467,14 @@ internal static IEnumerator ExecuteImpl(CharacterActionCharge characterActionCha ActionDefinitions.Id.TacticalMove, ActionDefinitions.MoveStance.Charge, destination, orientation) { AttackMode = characterActionCharge.ActionParams.AttackMode }; + var characterActionMoveStepWalk = new CharacterActionMoveStepWalk(chargeActionParams, actionID, path); + var attackActionParams = new CharacterActionParams( characterActionCharge.ActingCharacter, ActionDefinitions.Id.AttackFree, characterActionCharge.ActionParams.AttackMode, characterActionCharge.ActionParams.TargetCharacters[0], - characterActionCharge.ActionParams - .ActionModifiers[0]); // { BoolParameter = true, BoolParameter2 = true }; + characterActionCharge.ActionParams.ActionModifiers[0]); + var characterActionAttack = new CharacterActionAttack(attackActionParams); characterActionCharge.ResultingActions.Add(characterActionMoveStepWalk); diff --git a/SolastaUnfinishedBusiness/Models/CharacterUAContext.cs b/SolastaUnfinishedBusiness/Models/CharacterUAContext.cs index e81e8928e4..1dacfe3583 100644 --- a/SolastaUnfinishedBusiness/Models/CharacterUAContext.cs +++ b/SolastaUnfinishedBusiness/Models/CharacterUAContext.cs @@ -1581,13 +1581,8 @@ private IEnumerator HandleWithdraw(CharacterAction action, GameLocationCharacter yield return GameUiContext.SelectPosition(action, powerWithdraw); var rulesetAttacker = attacker.RulesetCharacter; - var targetPosition = action.ActionParams.Positions[0]; - var distance = int3.Distance(attacker.LocationPosition, targetPosition); - var actionParams = - new CharacterActionParams(attacker, ActionDefinitions.Id.TacticalMove) - { - Positions = { targetPosition } - }; + var position = action.ActionParams.Positions[0]; + var distance = int3.Distance(attacker.LocationPosition, position); attacker.UsedTacticalMoves -= (int)distance; @@ -1611,7 +1606,7 @@ private IEnumerator HandleWithdraw(CharacterAction action, GameLocationCharacter 0, 0); - ServiceRepository.GetService().ExecuteAction(actionParams, null, true); + attacker.MyExecuteActionTacticalMove(position); } private IEnumerator HandleKnockOut(GameLocationCharacter attacker, GameLocationCharacter defender) diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs index 33ea93ff6b..131e5918fc 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs @@ -1230,6 +1230,236 @@ public bool HasLeap() #endregion + #region Command + + internal static SpellDefinition BuildCommand() + { + const string NAME = "CommandSpell"; + + var powerPool = FeatureDefinitionPowerBuilder + .Create($"Power{NAME}") + .SetGuiPresentationNoContent(true) + .SetUsesFixed(ActivationTime.NoCost) + .AddToDB(); + + var conditionApproach = ConditionDefinitionBuilder + .Create($"Condition{NAME}Approach") + .SetGuiPresentation(Category.Condition) + .AddToDB(); + + conditionApproach.AddCustomSubFeatures(new CharacterTurnStartListenerCommandApproach(conditionApproach)); + + var powerApproach = FeatureDefinitionPowerSharedPoolBuilder + .Create($"Power{NAME}Approach") + .SetGuiPresentation(Category.Feature) + .SetSharedPool(ActivationTime.NoCost, powerPool) + .SetShowCasting(false) + .SetEffectDescription( + EffectDescriptionBuilder + .Create() + .SetDurationData(DurationType.Round) + .SetTargetingData(Side.Enemy, RangeType.Distance, 12, TargetType.IndividualsUnique) + .SetEffectForms(EffectFormBuilder.ConditionForm(conditionApproach)) + .Build()) + .AddToDB(); + + var conditionFlee = ConditionDefinitionBuilder + .Create($"Condition{NAME}Flee") + .SetGuiPresentation(Category.Condition) + .AddToDB(); + + conditionFlee.AddCustomSubFeatures(new CharacterTurnStartListenerCommandFlee(conditionFlee)); + + var powerFlee = FeatureDefinitionPowerSharedPoolBuilder + .Create($"Power{NAME}Flee") + .SetGuiPresentation(Category.Feature) + .SetSharedPool(ActivationTime.NoCost, powerPool) + .SetShowCasting(false) + .SetEffectDescription( + EffectDescriptionBuilder + .Create() + .SetDurationData(DurationType.Round) + .SetTargetingData(Side.Enemy, RangeType.Distance, 12, TargetType.IndividualsUnique) + .SetEffectForms(EffectFormBuilder.ConditionForm(conditionFlee)) + .Build()) + .AddToDB(); + + var conditionGrovel = ConditionDefinitionBuilder + .Create($"Condition{NAME}Grovel") + .SetGuiPresentation(Category.Condition) + .AddToDB(); + + var powerGrovel = FeatureDefinitionPowerSharedPoolBuilder + .Create($"Power{NAME}Grovel") + .SetGuiPresentation(Category.Feature) + .SetSharedPool(ActivationTime.NoCost, powerPool) + .SetShowCasting(false) + .SetEffectDescription( + EffectDescriptionBuilder + .Create() + .SetDurationData(DurationType.Round) + .SetTargetingData(Side.Enemy, RangeType.Distance, 12, TargetType.IndividualsUnique) + .SetEffectForms(EffectFormBuilder.ConditionForm(conditionGrovel)) + .Build()) + .AddToDB(); + + var conditionHalt = ConditionDefinitionBuilder + .Create($"Condition{NAME}Halt") + .SetGuiPresentation(Category.Condition) + .AddToDB(); + + conditionHalt.battlePackage = DecisionPackageDefinitions.Idle; + + var powerHalt = FeatureDefinitionPowerSharedPoolBuilder + .Create($"Power{NAME}Halt") + .SetGuiPresentation(Category.Feature) + .SetSharedPool(ActivationTime.NoCost, powerPool) + .SetShowCasting(false) + .SetEffectDescription( + EffectDescriptionBuilder + .Create() + .SetDurationData(DurationType.Round) + .SetTargetingData(Side.Enemy, RangeType.Distance, 12, TargetType.IndividualsUnique) + .SetEffectForms(EffectFormBuilder.ConditionForm(conditionHalt)) + .Build()) + .AddToDB(); + + PowerBundle.RegisterPowerBundle(powerPool, false, + powerApproach, powerFlee, powerGrovel, powerHalt); + + var spell = SpellDefinitionBuilder + .Create(NAME) + .SetGuiPresentation(Category.Spell, Command) + .SetSchoolOfMagic(SchoolOfMagicDefinitions.SchoolEnchantment) + .SetSpellLevel(1) + .SetCastingTime(ActivationTime.Action) + .SetMaterialComponent(MaterialComponentType.Mundane) + .SetVerboseComponent(true) + .SetSomaticComponent(false) + .SetVocalSpellSameType(VocalSpellSemeType.Attack) + .SetEffectDescription( + EffectDescriptionBuilder + .Create() + .UseQuickAnimations() + .SetTargetingData(Side.Enemy, RangeType.Distance, 12, TargetType.IndividualsUnique) + .SetEffectAdvancement(EffectIncrementMethod.PerAdditionalSlotLevel, + additionalTargetsPerIncrement: 1) + .SetSavingThrowData(false, AttributeDefinitions.Wisdom, true, + EffectDifficultyClassComputation.SpellCastingFeature) + .Build()) + .AddCustomSubFeatures(new PowerOrSpellFinishedByMeCommand(powerPool)) + .AddToDB(); + + return spell; + } + + private static int3 GetCandidatePosition( + GameLocationCharacter caster, + GameLocationCharacter target, + bool isFar = true) + { + var positioningService = ServiceRepository.GetService(); + var tacticalMoves = target.MaxTacticalMoves; + var boxInt = new BoxInt(target.LocationPosition, int3.zero, int3.zero); + var position = target.LocationPosition; + var distance = -1f; + + boxInt.Inflate(tacticalMoves, 0, tacticalMoves); + + foreach (var candidatePosition in boxInt.EnumerateAllPositionsWithin()) + { + if (!positioningService.CanPlaceCharacter( + target, candidatePosition, CellHelpers.PlacementMode.Station) || + !positioningService.CanCharacterStayAtPosition_Floor( + target, candidatePosition, onlyCheckCellsWithRealGround: true) || + positioningService.IsDangerousPosition(target, candidatePosition)) + { + continue; + } + + var candidateDistance = int3.Distance(candidatePosition, caster.LocationPosition); + + if ((isFar && candidateDistance < distance) || + (!isFar && candidateDistance > distance)) + { + continue; + } + + distance = candidateDistance; + position = candidatePosition; + } + + return position; + } + + private sealed class PowerOrSpellFinishedByMeCommand(FeatureDefinitionPower powerPool) : IPowerOrSpellFinishedByMe + { + public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, BaseDefinition baseDefinition) + { + if (action.Countered || action.ExecutionFailed) + { + yield break; + } + + var caster = action.ActingCharacter; + var rulesetCaster = caster.RulesetCharacter; + var usablePower = PowerProvider.Get(powerPool, rulesetCaster); + + foreach (var target in action.ActionParams.TargetCharacters) + { + yield return caster.MyReactToSpendPowerBundle( + usablePower, + [target], + caster, + "CommandSpell"); + } + } + } + + private sealed class CharacterTurnStartListenerCommandApproach( + ConditionDefinition conditionApproach) : ICharacterTurnStartListener + { + public void OnCharacterTurnStarted(GameLocationCharacter locationCharacter) + { + var rulesetCharacter = locationCharacter.RulesetCharacter; + + if (!rulesetCharacter.TryGetConditionOfCategoryAndType( + AttributeDefinitions.TagEffect, conditionApproach.Name, out var activeCondition)) + { + return; + } + + var rulesetCaster = EffectHelpers.GetCharacterByGuid(activeCondition.SourceGuid); + var caster = GameLocationCharacter.GetFromActor(rulesetCaster); + var position = GetCandidatePosition(caster, locationCharacter, false); + + locationCharacter.MyExecuteActionTacticalMove(position); + } + } + + private sealed class CharacterTurnStartListenerCommandFlee( + ConditionDefinition conditionFlee) : ICharacterTurnStartListener + { + public void OnCharacterTurnStarted(GameLocationCharacter locationCharacter) + { + var rulesetCharacter = locationCharacter.RulesetCharacter; + + if (!rulesetCharacter.TryGetConditionOfCategoryAndType( + AttributeDefinitions.TagEffect, conditionFlee.Name, out var activeCondition)) + { + return; + } + + var rulesetCaster = EffectHelpers.GetCharacterByGuid(activeCondition.SourceGuid); + var caster = GameLocationCharacter.GetFromActor(rulesetCaster); + var position = GetCandidatePosition(caster, locationCharacter); + + locationCharacter.MyExecuteActionTacticalMove(position); + } + } + + #endregion + #region Dissonant Whispers internal static SpellDefinition BuildDissonantWhispers() @@ -1261,16 +1491,21 @@ internal static SpellDefinition BuildDissonantWhispers() .SetDamageForm(DamageTypePsychic, 3, DieType.D6) .Build()) .Build()) - .AddCustomSubFeatures(new PowerOrSpellFinishedByMeBuildDissonantWhispers()) + .AddCustomSubFeatures(new PowerOrSpellFinishedByMeDissonantWhispers()) .AddToDB(); return spell; } - private sealed class PowerOrSpellFinishedByMeBuildDissonantWhispers : IPowerOrSpellFinishedByMe + private sealed class PowerOrSpellFinishedByMeDissonantWhispers : IPowerOrSpellFinishedByMe { public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, BaseDefinition baseDefinition) { + if (action.Countered || action.ExecutionFailed) + { + yield break; + } + var target = action.ActionParams.TargetCharacters[0]; var actionManager = ServiceRepository.GetService() as GameLocationActionManager; @@ -1281,63 +1516,11 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, yield break; } - var position = GetCandidatePosition(action.ActingCharacter, target); - var actionParams = - new CharacterActionParams( - target, Id.TacticalMove, MoveStance.Run, position, LocationDefinitions.Orientation.North) - { - BoolParameter3 = false, BoolParameter5 = false - }; - - actionManager.actionChainByCharacter.TryGetValue(target, out var actionChainSlot); - - var collection = actionChainSlot?.actionQueue; - - if (collection != null && - !collection.Empty() && - collection[0].action is CharacterActionMoveStepWalk) - { - actionParams.BoolParameter2 = true; - } - target.SpendActionType(ActionType.Reaction); - actionManager.ExecuteActionChain( - new CharacterActionChainParams(actionParams.ActingCharacter, actionParams), null, false); - } - private static int3 GetCandidatePosition(GameLocationCharacter caster, GameLocationCharacter target) - { - var positioningService = ServiceRepository.GetService(); - var tacticalMoves = target.MaxTacticalMoves; - var boxInt = new BoxInt(target.LocationPosition, int3.zero, int3.zero); - var position = target.LocationPosition; - var distance = -1f; - - boxInt.Inflate(tacticalMoves, 0, tacticalMoves); - - foreach (var candidatePosition in boxInt.EnumerateAllPositionsWithin()) - { - if (!positioningService.CanPlaceCharacter( - target, candidatePosition, CellHelpers.PlacementMode.Station) || - !positioningService.CanCharacterStayAtPosition_Floor( - target, candidatePosition, onlyCheckCellsWithRealGround: true) || - positioningService.IsDangerousPosition(target, candidatePosition)) - { - continue; - } - - var candidateDistance = int3.Distance(candidatePosition, caster.LocationPosition); - - if (candidateDistance < distance) - { - continue; - } - - distance = candidateDistance; - position = candidatePosition; - } + var position = GetCandidatePosition(action.ActingCharacter, target); - return position; + target.MyExecuteActionTacticalMove(position); } } diff --git a/SolastaUnfinishedBusiness/Subclasses/Builders/GambitsBuilders.cs b/SolastaUnfinishedBusiness/Subclasses/Builders/GambitsBuilders.cs index 00b5ef78ba..06ce6b7783 100644 --- a/SolastaUnfinishedBusiness/Subclasses/Builders/GambitsBuilders.cs +++ b/SolastaUnfinishedBusiness/Subclasses/Builders/GambitsBuilders.cs @@ -1925,25 +1925,12 @@ public IEnumerator ComputeValidPositions(CursorLocationSelectPosition cursorLoca public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, BaseDefinition baseDefinition) { - var actionManager = ServiceRepository.GetService() as GameLocationActionManager; - - if (!actionManager) - { - yield break; - } - action.ActionParams.activeEffect.EffectDescription.rangeParameter = 6; var actingCharacter = action.ActingCharacter; var targetCharacter = action.ActionParams.TargetCharacters[0]; var targetRulesetCharacter = targetCharacter.RulesetCharacter; var targetPosition = action.ActionParams.Positions[0]; - var actionParams = - new CharacterActionParams(targetCharacter, ActionDefinitions.Id.TacticalMove, - ActionDefinitions.MoveStance.Run, targetPosition, LocationDefinitions.Orientation.North) - { - BoolParameter3 = false, BoolParameter5 = false - }; targetCharacter.UsedTacticalMoves = 0; targetRulesetCharacter.InflictCondition( @@ -1964,21 +1951,11 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, EffectHelpers.StartVisualEffect(actingCharacter, targetCharacter, FeatureDefinitionPowers.PowerDomainSunHeraldOfTheSun, EffectHelpers.EffectType.Effect); + targetCharacter.UsedTacticalMoves = 0; targetCharacter.SpendActionType(ActionDefinitions.ActionType.Reaction); + targetCharacter.MyExecuteActionTacticalMove(targetPosition); - actionManager.actionChainByCharacter.TryGetValue(targetCharacter, out var actionChainSlot); - - var collection = actionChainSlot?.actionQueue; - - if (collection != null && - !collection.Empty() && - collection[0].action is CharacterActionMoveStepWalk) - { - actionParams.BoolParameter2 = true; - } - - actionManager.ExecuteActionChain( - new CharacterActionChainParams(actionParams.ActingCharacter, actionParams), null, false); + yield break; } public int PositionRange => 12; diff --git a/SolastaUnfinishedBusiness/Subclasses/MartialWarlord.cs b/SolastaUnfinishedBusiness/Subclasses/MartialWarlord.cs index 0b77b51e3f..ba280a1a94 100644 --- a/SolastaUnfinishedBusiness/Subclasses/MartialWarlord.cs +++ b/SolastaUnfinishedBusiness/Subclasses/MartialWarlord.cs @@ -480,27 +480,13 @@ public IEnumerator ComputeValidPositions(CursorLocationSelectPosition cursorLoca public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, BaseDefinition baseDefinition) { - var actionManager = ServiceRepository.GetService() as GameLocationActionManager; - - if (!actionManager) - { - yield break; - } - action.ActionParams.activeEffect.EffectDescription.rangeParameter = 6; var actingCharacter = action.ActingCharacter; var targetCharacter = action.ActionParams.TargetCharacters[0]; var targetRulesetCharacter = targetCharacter.RulesetCharacter; var targetPosition = action.ActionParams.Positions[0]; - var actionParams = - new CharacterActionParams(targetCharacter, ActionDefinitions.Id.TacticalMove, - ActionDefinitions.MoveStance.Run, targetPosition, LocationDefinitions.Orientation.North) - { - BoolParameter3 = false, BoolParameter5 = false - }; - targetCharacter.UsedTacticalMoves = 0; targetRulesetCharacter.InflictCondition( ConditionDisengaging, DurationType.Round, @@ -519,19 +505,10 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, EffectHelpers.StartVisualEffect(actingCharacter, targetCharacter, FeatureDefinitionPowers.PowerDomainSunHeraldOfTheSun, EffectHelpers.EffectType.Effect); - actionManager.actionChainByCharacter.TryGetValue(targetCharacter, out var actionChainSlot); - - var collection = actionChainSlot?.actionQueue; - - if (collection != null && - !collection.Empty() && - collection[0].action is CharacterActionMoveStepWalk) - { - actionParams.BoolParameter2 = true; - } + targetCharacter.UsedTacticalMoves = 0; + targetCharacter.MyExecuteActionTacticalMove(targetPosition); - actionManager.ExecuteActionChain( - new CharacterActionChainParams(actionParams.ActingCharacter, actionParams), null, false); + yield break; } public int PositionRange => 12; From ca8e7a00a69e6a937dafc0aed217515936235cc2 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Tue, 3 Sep 2024 08:58:24 -0700 Subject: [PATCH 024/212] add Command spell translations --- .../Translations/de/Spells/Spells01-de.txt | 10 ++++++++++ .../Translations/en/Spells/Spells01-en.txt | 10 ++++++++++ .../Translations/es/Spells/Spells01-es.txt | 10 ++++++++++ .../Translations/fr/Spells/Spells01-fr.txt | 10 ++++++++++ .../Translations/it/Spells/Spells01-it.txt | 10 ++++++++++ .../Translations/ja/Spells/Spells01-ja.txt | 10 ++++++++++ .../Translations/ko/Spells/Spells01-ko.txt | 10 ++++++++++ .../Translations/pt-BR/Spells/Spells01-pt-BR.txt | 10 ++++++++++ .../Translations/ru/Spells/Spells01-ru.txt | 10 ++++++++++ .../Translations/zh-CN/Spells/Spells01-zh-CN.txt | 10 ++++++++++ 10 files changed, 100 insertions(+) diff --git a/SolastaUnfinishedBusiness/Translations/de/Spells/Spells01-de.txt b/SolastaUnfinishedBusiness/Translations/de/Spells/Spells01-de.txt index 90d05768c5..0751bffd18 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Spells/Spells01-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Spells/Spells01-de.txt @@ -30,6 +30,14 @@ Condition/&ConditionWitchBoltTitle=Hexenbolzen Feature/&FeatureGiftOfAlacrityDescription=Sie können Ihren Initiativewürfen 1W8 hinzufügen. Feature/&FeatureGiftOfAlacrityTitle=Gabe der Schnelligkeit Feature/&PowerChaosBoltDescription=Verursache {0} Schaden. +Feature/&PowerCommandSpellApproachDescription=Das Ziel bewegt sich auf dem kürzesten und direktesten Weg auf Sie zu und beendet seinen Zug, wenn es sich Ihnen näher als 1,5 m nähert. +Feature/&PowerCommandSpellApproachTitle=Ansatz +Feature/&PowerCommandSpellFleeDescription=Das Ziel verbringt seinen Zug damit, sich mit den schnellsten verfügbaren Mitteln von Ihnen zu entfernen. +Feature/&PowerCommandSpellFleeTitle=Fliehen +Feature/&PowerCommandSpellGrovelDescription=Das Ziel fällt zu Boden und beendet dann seinen Zug. +Feature/&PowerCommandSpellGrovelTitle=Kriechen +Feature/&PowerCommandSpellHaltDescription=Das Ziel bewegt sich nicht und unternimmt keine Aktionen. Eine fliegende Kreatur bleibt in der Luft, vorausgesetzt, sie kann dies. Wenn sie sich bewegen muss, um in der Luft zu bleiben, fliegt sie die Mindeststrecke, die erforderlich ist, um in der Luft zu bleiben. +Feature/&PowerCommandSpellHaltTitle=Halt Feature/&PowerStrikeWithTheWindDescription=Verleiht Ihrem nächsten Angriff einen Vorteil und verursacht bei einem Treffer zusätzlich 1W8 Schaden. Unabhängig davon, ob Sie treffen oder verfehlen, erhöht sich Ihre Gehgeschwindigkeit bis zum Ende dieses Zuges um 30 Fuß. Feature/&PowerStrikeWithTheWindTitle=Schlag mit dem Wind Feedback/&AdditionalDamageElementalInfusionAcidFormat=Absorbiere Elemente! @@ -74,6 +82,8 @@ Spell/&ChaosBoltDescription=Führe einen Fernangriff mit Zauber gegen ein Ziel a Spell/&ChaosBoltTitle=Chaosblitz Spell/&ChromaticOrbDescription=Du schleuderst eine Energiekugel mit 4 Zoll Durchmesser auf eine Kreatur, die du in Reichweite sehen kannst. Du wählst Säure, Kälte, Feuer, Blitz, Gift oder Donner als Art der Kugel, die du erschaffst, und führst dann einen Fernkampf-Zauberangriff gegen das Ziel aus. Wenn der Angriff trifft, erleidet die Kreatur 3W8 Schaden der von dir gewählten Art. Spell/&ChromaticOrbTitle=Chromatische Kugel +Spell/&CommandSpellDescription=Sie sprechen einen einwortigen Befehl zu einer Kreatur, die Sie in Reichweite sehen können. Das Ziel muss einen Weisheitsrettungswurf bestehen oder dem Befehl in seinem nächsten Zug folgen. Der Zauber hat wirkungslos, wenn das Ziel untot ist, wenn es Ihre Sprache nicht versteht oder wenn Ihr Befehl ihm direkt schadet. Es folgen einige typische Befehle und ihre Wirkungen. Sie können einen anderen als den hier beschriebenen Befehl erteilen. In diesem Fall bestimmt der DM, wie sich das Ziel verhält. Wenn das Ziel Ihrem Befehl nicht folgen kann, endet der Zauber.\n• Annäherung: Das Ziel bewegt sich auf dem kürzesten und direktesten Weg auf Sie zu und beendet seinen Zug, wenn es sich Ihnen näher als 1,52 m nähert.\n• Fliehen: Das Ziel verbringt seinen Zug damit, sich auf dem schnellsten verfügbaren Weg von Ihnen wegzubewegen.\n• Kriechen: Das Ziel fällt hin und beendet dann seinen Zug.\n• Halt: Das Ziel bewegt sich nicht und unternimmt keine Aktionen. Eine fliegende Kreatur bleibt in der Luft, sofern sie dazu in der Lage ist. Wenn es sich bewegen muss, um in der Luft zu bleiben, fliegt es die Mindestdistanz, die erforderlich ist, um in der Luft zu bleiben.\nWenn du diesen Zauber mit einem Zauberplatz der 2. Stufe oder höher wirkst, kannst du für jede Platzstufe über der 2. eine zusätzliche Kreatur in Reichweite anvisieren. +Spell/&CommandSpellTitle=Befehl Spell/&DissonantWhispersDescription=Du flüsterst eine dissonante Melodie, die nur eine Kreatur deiner Wahl in Reichweite hören kann, und quälst sie mit schrecklichen Schmerzen. Das Ziel muss einen Weisheitsrettungswurf machen. Bei einem misslungenen Rettungswurf erleidet es 3W6 psychischen Schaden und muss sofort seine Reaktion, falls möglich, nutzen, um sich so weit wie seine Geschwindigkeit es zulässt von dir wegzubewegen. Die Kreatur bewegt sich nicht auf offensichtlich gefährliches Gelände, wie etwa ein Feuer oder eine Grube. Bei einem erfolgreichen Rettungswurf erleidet das Ziel nur halb so viel Schaden und muss sich nicht wegbewegen. Wenn du diesen Zauber mit einem Zauberplatz der 2. Stufe oder höher wirkst, erhöht sich der Schaden um 1W6 für jede Stufe über der 1. Spell/&DissonantWhispersTitle=Dissonantes Flüstern Spell/&EarthTremorDescription=Sie schlagen auf den Boden und lösen ein Erdbeben mit seismischer Kraft aus, das Erde, Steine und Sand aufwirbelt. diff --git a/SolastaUnfinishedBusiness/Translations/en/Spells/Spells01-en.txt b/SolastaUnfinishedBusiness/Translations/en/Spells/Spells01-en.txt index e15e94b18d..b063214914 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Spells/Spells01-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Spells/Spells01-en.txt @@ -30,6 +30,14 @@ Condition/&ConditionWitchBoltTitle=Witch Bolt Feature/&FeatureGiftOfAlacrityDescription=You can add 1d8 to your initiative rolls. Feature/&FeatureGiftOfAlacrityTitle=Gift of Alacrity Feature/&PowerChaosBoltDescription=Use {0} damage. +Feature/&PowerCommandSpellApproachDescription=The target moves toward you by the shortest and most direct route, ending its turn if it moves within 5 feet of you. +Feature/&PowerCommandSpellApproachTitle=Approach +Feature/&PowerCommandSpellFleeDescription=The target spends its turn moving away from you by the fastest available means. +Feature/&PowerCommandSpellFleeTitle=Flee +Feature/&PowerCommandSpellGrovelDescription=The target falls prone and then ends its turn. +Feature/&PowerCommandSpellGrovelTitle=Grovel +Feature/&PowerCommandSpellHaltDescription=The target doesn't move and takes no actions. A flying creature stays aloft, provided that it is able to do so. If it must move to stay aloft, it flies the minimum distance needed to remain in the air. +Feature/&PowerCommandSpellHaltTitle=Halt Feature/&PowerStrikeWithTheWindDescription=Grant advantage to your next attack, and deals an extra 1d8 damage on a hit. Whether you hit or miss, your walking speed increases by 30 feet until the end of that turn. Feature/&PowerStrikeWithTheWindTitle=Strike with The Wind Feedback/&AdditionalDamageElementalInfusionAcidFormat=Absorb Elements! @@ -74,6 +82,8 @@ Spell/&ChaosBoltDescription=Make a ranged spell attack against a target. On a hi Spell/&ChaosBoltTitle=Chaos Bolt Spell/&ChromaticOrbDescription=You hurl a 4-inch-diameter sphere of energy at a creature that you can see within range. You choose acid, cold, fire, lightning, poison, or thunder for the type of orb you create, and then make a ranged spell attack against the target. If the attack hits, the creature takes 3d8 damage of the type you chose. Spell/&ChromaticOrbTitle=Chromatic Orb +Spell/&CommandSpellDescription=You speak a one-word command to a creature you can see within range. The target must succeed on a Wisdom saving throw or follow the command on its next turn. The spell has no effect if the target is undead, if it doesn't understand your language, or if your command is directly harmful to it. Some typical commands and their effects follow. You might issue a command other than one described here. If you do so, the DM determines how the target behaves. If the target can't follow your command, the spell ends.\n• Approach: The target moves toward you by the shortest and most direct route, ending its turn if it moves within 5 feet of you.\n• Flee: The target spends its turn moving away from you by the fastest available means.\n• Grovel: The target falls prone and then ends its turn.\n• Halt: The target doesn't move and takes no actions. A flying creature stays aloft, provided that it is able to do so. If it must move to stay aloft, it flies the minimum distance needed to remain in the air.\nWhen you cast this spell using a spell slot of 2nd level or higher, you may target an additional creature within range for each slot level above 2nd. +Spell/&CommandSpellTitle=Command Spell/&DissonantWhispersDescription=You whisper a discordant melody that only one creature of your choice within range can hear, wracking it with terrible pain. The target must make a Wisdom saving throw. On a failed save, it takes 3d6 psychic damage and must immediately use its reaction, if available, to move as far as its speed allows away from you. The creature doesn't move into obviously dangerous ground, such as a fire or a pit. On a successful save, the target takes half as much damage and doesn't have to move away. When you cast this spell using a spell slot of 2nd level or higher, the damage increases by 1d6 for each slot level above 1st. Spell/&DissonantWhispersTitle=Dissonant Whispers Spell/&EarthTremorDescription=You strike the ground and unleash a tremor of seismic force, hurling up earth, rock, and sand. diff --git a/SolastaUnfinishedBusiness/Translations/es/Spells/Spells01-es.txt b/SolastaUnfinishedBusiness/Translations/es/Spells/Spells01-es.txt index 436fa5f93f..0f490b915c 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Spells/Spells01-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Spells/Spells01-es.txt @@ -30,6 +30,14 @@ Condition/&ConditionWitchBoltTitle=Rayo de bruja Feature/&FeatureGiftOfAlacrityDescription=Puedes añadir 1d8 a tus tiradas de iniciativa. Feature/&FeatureGiftOfAlacrityTitle=Don de prontitud Feature/&PowerChaosBoltDescription=Utilice {0} de daño. +Feature/&PowerCommandSpellApproachDescription=El objetivo se mueve hacia ti por la ruta más corta y directa, y finaliza su turno si se mueve a menos de 5 pies de ti. +Feature/&PowerCommandSpellApproachTitle=Acercarse +Feature/&PowerCommandSpellFleeDescription=El objetivo pasa su turno alejándose de ti por el medio más rápido disponible. +Feature/&PowerCommandSpellFleeTitle=Huir +Feature/&PowerCommandSpellGrovelDescription=El objetivo cae boca abajo y luego termina su turno. +Feature/&PowerCommandSpellGrovelTitle=Arrastrarse +Feature/&PowerCommandSpellHaltDescription=El objetivo no se mueve y no realiza ninguna acción. Una criatura voladora se mantiene en el aire, siempre que pueda hacerlo. Si debe moverse para mantenerse en el aire, vuela la distancia mínima necesaria para permanecer en el aire. +Feature/&PowerCommandSpellHaltTitle=Detener Feature/&PowerStrikeWithTheWindDescription=Otorga ventaja a tu próximo ataque y causa 1d8 puntos de daño extra en cada impacto. Ya sea que impactes o falles, tu velocidad al caminar aumenta en 30 pies hasta el final de ese turno. Feature/&PowerStrikeWithTheWindTitle=Golpea con el viento Feedback/&AdditionalDamageElementalInfusionAcidFormat=¡Absorbe elementos! @@ -74,6 +82,8 @@ Spell/&ChaosBoltDescription=Realiza un ataque de hechizo a distancia contra un o Spell/&ChaosBoltTitle=Rayo del caos Spell/&ChromaticOrbDescription=Lanzas una esfera de energía de 4 pulgadas de diámetro a una criatura que puedas ver dentro del alcance. Eliges ácido, frío, fuego, relámpago, veneno o trueno como el tipo de orbe que creas y luego realizas un ataque de hechizo a distancia contra el objetivo. Si el ataque impacta, la criatura recibe 3d8 puntos de daño del tipo que elegiste. Spell/&ChromaticOrbTitle=Orbe cromático +Spell/&CommandSpellDescription=Pronuncias una orden de una palabra a una criatura que puedas ver dentro del alcance. El objetivo debe tener éxito en una tirada de salvación de Sabiduría o seguir la orden en su siguiente turno. El hechizo no tiene efecto si el objetivo es un no-muerto, si no entiende tu idioma o si tu orden es directamente dañina para él. A continuación se indican algunas órdenes típicas y sus efectos. Puedes dar una orden distinta a las descritas aquí. Si lo haces, el DM determina cómo se comporta el objetivo. Si el objetivo no puede seguir tu orden, el hechizo termina.\n• Acercarse: el objetivo se mueve hacia ti por la ruta más corta y directa, y termina su turno si se mueve a 5 pies o menos de ti.\n• Huir: el objetivo pasa su turno alejándose de ti por el medio más rápido disponible.\n• Arrastrarse: el objetivo cae boca abajo y luego termina su turno.\n• Detenerse: el objetivo no se mueve y no realiza ninguna acción. Una criatura voladora se mantiene en el aire, siempre que pueda hacerlo. Si debe moverse para mantenerse en el aire, vuela la distancia mínima necesaria para permanecer en el aire.\nCuando lanzas este hechizo usando un espacio de hechizo de nivel 2 o superior, puedes seleccionar una criatura adicional dentro del alcance por cada nivel de espacio por encima del 2. +Spell/&CommandSpellTitle=Dominio Spell/&DissonantWhispersDescription=Susurras una melodía discordante que solo una criatura de tu elección que esté dentro del alcance puede oír, atormentándola con un dolor terrible. El objetivo debe realizar una tirada de salvación de Sabiduría. Si falla, sufre 3d6 puntos de daño psíquico y debe usar inmediatamente su reacción, si está disponible, para alejarse de ti tanto como su velocidad le permita. La criatura no se mueve hacia un terreno obviamente peligroso, como un fuego o un pozo. Si tiene éxito, el objetivo sufre la mitad del daño y no tiene que alejarse. Cuando lanzas este conjuro usando un espacio de conjuro de nivel 2 o superior, el daño aumenta en 1d6 por cada nivel de espacio por encima del 1. Spell/&DissonantWhispersTitle=Susurros disonantes Spell/&EarthTremorDescription=Golpeas el suelo y desatas un temblor de fuerza sísmica, arrojando tierra, rocas y arena. diff --git a/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells01-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells01-fr.txt index 64fc4b2efa..1121bf2f49 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells01-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells01-fr.txt @@ -30,6 +30,14 @@ Condition/&ConditionWitchBoltTitle=Boulon de sorcière Feature/&FeatureGiftOfAlacrityDescription=Vous pouvez ajouter 1d8 à vos jets d'initiative. Feature/&FeatureGiftOfAlacrityTitle=Don d'empressement Feature/&PowerChaosBoltDescription=Utilisez {0} dégâts. +Feature/&PowerCommandSpellApproachDescription=La cible se déplace vers vous par le chemin le plus court et le plus direct, mettant fin à son tour si elle se déplace à moins de 5 pieds de vous. +Feature/&PowerCommandSpellApproachTitle=Approche +Feature/&PowerCommandSpellFleeDescription=La cible passe son tour à s'éloigner de vous par le moyen le plus rapide disponible. +Feature/&PowerCommandSpellFleeTitle=Fuir +Feature/&PowerCommandSpellGrovelDescription=La cible tombe à terre et termine son tour. +Feature/&PowerCommandSpellGrovelTitle=Ramper +Feature/&PowerCommandSpellHaltDescription=La cible ne bouge pas et n'entreprend aucune action. Une créature volante reste en l'air, à condition qu'elle en soit capable. Si elle doit se déplacer pour rester en l'air, elle parcourt la distance minimale nécessaire pour rester en l'air. +Feature/&PowerCommandSpellHaltTitle=Arrêt Feature/&PowerStrikeWithTheWindDescription=Accorde un avantage à votre prochaine attaque et inflige 1d8 points de dégâts supplémentaires en cas de réussite. Que vous touchiez ou ratiez, votre vitesse de marche augmente de 9 mètres jusqu'à la fin de ce tour. Feature/&PowerStrikeWithTheWindTitle=Frappez avec le vent Feedback/&AdditionalDamageElementalInfusionAcidFormat=Absorbez les éléments ! @@ -74,6 +82,8 @@ Spell/&ChaosBoltDescription=Lancez une attaque à distance contre une cible. En Spell/&ChaosBoltTitle=Éclair du chaos Spell/&ChromaticOrbDescription=Vous lancez une sphère d'énergie de 10 cm de diamètre sur une créature que vous pouvez voir à portée. Vous choisissez l'acide, le froid, le feu, la foudre, le poison ou le tonnerre comme type d'orbe que vous créez, puis effectuez une attaque de sort à distance contre la cible. Si l'attaque touche, la créature subit 3d8 dégâts du type que vous avez choisi. Spell/&ChromaticOrbTitle=Orbe chromatique +Spell/&CommandSpellDescription=Vous donnez un ordre d'un seul mot à une créature visible à portée. La cible doit réussir un jet de sauvegarde de Sagesse ou suivre l'ordre à son prochain tour. Le sort n'a aucun effet si la cible est morte-vivante, si elle ne comprend pas votre langue ou si votre ordre lui est directement nuisible. Voici quelques ordres typiques et leurs effets. Vous pouvez donner un ordre autre que celui décrit ici. Si vous le faites, le MD détermine comment la cible se comporte. Si la cible ne peut pas suivre votre ordre, le sort prend fin.\n• Approche : la cible se déplace vers vous par le chemin le plus court et le plus direct, mettant fin à son tour si elle se déplace à 1,50 mètre ou moins de vous.\n• Fuir : la cible passe son tour à s'éloigner de vous par le moyen le plus rapide disponible.\n• Ramper : la cible tombe à terre puis termine son tour.\n• Halte : la cible ne bouge pas et n'entreprend aucune action. Une créature volante reste en l'air, à condition qu'elle en soit capable. S'il doit se déplacer pour rester en l'air, il vole sur la distance minimale nécessaire pour rester en l'air.\nLorsque vous lancez ce sort en utilisant un emplacement de sort de niveau 2 ou supérieur, vous pouvez cibler une créature supplémentaire à portée pour chaque niveau d'emplacement au-dessus du niveau 2. +Spell/&CommandSpellTitle=Commande Spell/&DissonantWhispersDescription=Vous murmurez une mélodie discordante que seule une créature de votre choix à portée peut entendre, la secouant d'une douleur terrible. La cible doit réussir un jet de sauvegarde de Sagesse. En cas d'échec, elle subit 3d6 dégâts psychiques et doit immédiatement utiliser sa réaction, si elle en a la possibilité, pour s'éloigner de vous aussi loin que sa vitesse le lui permet. La créature ne se déplace pas sur un terrain manifestement dangereux, comme un feu ou une fosse. En cas de réussite, la cible subit la moitié des dégâts et n'a pas à s'éloigner. Lorsque vous lancez ce sort en utilisant un emplacement de sort de niveau 2 ou supérieur, les dégâts augmentent de 1d6 pour chaque niveau d'emplacement au-dessus du 1er. Spell/&DissonantWhispersTitle=Chuchotements dissonants Spell/&EarthTremorDescription=Vous frappez le sol et déclenchez une secousse de force sismique, projetant de la terre, des roches et du sable. diff --git a/SolastaUnfinishedBusiness/Translations/it/Spells/Spells01-it.txt b/SolastaUnfinishedBusiness/Translations/it/Spells/Spells01-it.txt index 1e55a1f07a..5d24565cac 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Spells/Spells01-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Spells/Spells01-it.txt @@ -30,6 +30,14 @@ Condition/&ConditionWitchBoltTitle=Fulmine della strega Feature/&FeatureGiftOfAlacrityDescription=Puoi aggiungere 1d8 ai tuoi tiri di iniziativa. Feature/&FeatureGiftOfAlacrityTitle=Dono di Alacrità Feature/&PowerChaosBoltDescription=Usa {0} danni. +Feature/&PowerCommandSpellApproachDescription=Il bersaglio si muove verso di te seguendo il percorso più breve e diretto e termina il suo turno se si sposta entro 1,5 metri da te. +Feature/&PowerCommandSpellApproachTitle=Approccio +Feature/&PowerCommandSpellFleeDescription=Il bersaglio trascorre il suo turno allontanandosi da te con il mezzo più veloce disponibile. +Feature/&PowerCommandSpellFleeTitle=Fuggire +Feature/&PowerCommandSpellGrovelDescription=Il bersaglio cade prono e poi termina il suo turno. +Feature/&PowerCommandSpellGrovelTitle=Umiliarsi +Feature/&PowerCommandSpellHaltDescription=Il bersaglio non si muove e non compie azioni. Una creatura volante rimane in aria, a patto che sia in grado di farlo. Se deve muoversi per rimanere in aria, vola per la distanza minima necessaria per rimanere in aria. +Feature/&PowerCommandSpellHaltTitle=Fermarsi Feature/&PowerStrikeWithTheWindDescription=Concedi vantaggio al tuo prossimo attacco e infliggi 1d8 danni extra a colpo andato a segno. Che tu colpisca o meno, la tua velocità di camminata aumenta di 30 piedi fino alla fine di quel turno. Feature/&PowerStrikeWithTheWindTitle=Colpire con il vento Feedback/&AdditionalDamageElementalInfusionAcidFormat=Assorbi gli elementi! @@ -74,6 +82,8 @@ Spell/&ChaosBoltDescription=Esegui un attacco magico a distanza contro un bersag Spell/&ChaosBoltTitle=Fulmine del Caos Spell/&ChromaticOrbDescription=Scagli una sfera di energia di 4 pollici di diametro contro una creatura che puoi vedere entro il raggio d'azione. Scegli acido, freddo, fuoco, fulmine, veleno o tuono per il tipo di sfera che crei, quindi esegui un attacco magico a distanza contro il bersaglio. Se l'attacco colpisce, la creatura subisce 3d8 danni del tipo che hai scelto. Spell/&ChromaticOrbTitle=Sfera cromatica +Spell/&CommandSpellDescription=Pronuncia un comando di una sola parola a una creatura che puoi vedere entro il raggio d'azione. Il bersaglio deve superare un tiro salvezza su Saggezza o seguire il comando nel suo turno successivo. L'incantesimo non ha effetto se il bersaglio è un non morto, se non capisce la tua lingua o se il tuo comando gli è direttamente dannoso. Seguono alcuni comandi tipici e i loro effetti. Potresti impartire un comando diverso da quelli descritti qui. Se lo fai, il DM determina come si comporta il bersaglio. Se il bersaglio non può seguire il tuo comando, l'incantesimo termina.\n• Avvicinamento: il bersaglio si muove verso di te attraverso la via più breve e diretta, terminando il suo turno se si muove entro 5 piedi da te.\n• Fuga: il bersaglio trascorre il suo turno allontanandosi da te con il mezzo più veloce disponibile.\n• Umiliarsi: il bersaglio cade prono e poi termina il suo turno.\n• Arresto: il bersaglio non si muove e non esegue azioni. Una creatura volante rimane in aria, a condizione che sia in grado di farlo. Se deve muoversi per restare in aria, vola per la distanza minima necessaria per restare in aria.\nQuando lanci questo incantesimo usando uno slot incantesimo di 2° livello o superiore, puoi scegliere come bersaglio una creatura aggiuntiva entro il raggio d'azione per ogni livello dello slot superiore al 2°. +Spell/&CommandSpellTitle=Comando Spell/&DissonantWhispersDescription=Sussurri una melodia discordante che solo una creatura a tua scelta entro il raggio d'azione può sentire, lacerandola con un dolore terribile. Il bersaglio deve effettuare un tiro salvezza su Saggezza. Se fallisce il tiro salvezza, subisce 3d6 danni psichici e deve usare immediatamente la sua reazione, se disponibile, per allontanarsi da te il più lontano possibile dalla sua velocità. La creatura non si sposta in un terreno palesemente pericoloso, come un fuoco o una fossa. Se supera il tiro salvezza, il bersaglio subisce la metà dei danni e non deve allontanarsi. Quando lanci questo incantesimo usando uno slot incantesimo di 2° livello o superiore, il danno aumenta di 1d6 per ogni livello di slot superiore al 1°. Spell/&DissonantWhispersTitle=Sussurri dissonanti Spell/&EarthTremorDescription=Colpisci il terreno e scateni una scossa di forza sismica, scagliando in aria terra, rocce e sabbia. diff --git a/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells01-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells01-ja.txt index a747e576b0..36d0742619 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells01-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells01-ja.txt @@ -30,6 +30,14 @@ Condition/&ConditionWitchBoltTitle=ウィッチボルト Feature/&FeatureGiftOfAlacrityDescription=イニシアチブロールに 1d8 を追加できます。 Feature/&FeatureGiftOfAlacrityTitle=敏捷性の贈り物 Feature/&PowerChaosBoltDescription={0} ダメージを与えます。 +Feature/&PowerCommandSpellApproachDescription=ターゲットは最短かつ最も直接的な経路であなたに向かって移動し、あなたの 5 フィート以内に移動した場合にターンを終了します。 +Feature/&PowerCommandSpellApproachTitle=アプローチ +Feature/&PowerCommandSpellFleeDescription=ターゲットは、そのターン、利用可能な最速の手段であなたから離れていきます。 +Feature/&PowerCommandSpellFleeTitle=逃げる +Feature/&PowerCommandSpellGrovelDescription=対象はうつ伏せになり、その後ターンを終了します。 +Feature/&PowerCommandSpellGrovelTitle=グローベル +Feature/&PowerCommandSpellHaltDescription=対象は移動せず、アクションも行いません。飛行中のクリーチャーは、それが可能である限り、空中に留まります。空中に留まるために移動する必要がある場合、空中に留まるために必要な最小距離を飛行します。 +Feature/&PowerCommandSpellHaltTitle=停止 Feature/&PowerStrikeWithTheWindDescription=次の攻撃にアドバンテージを与え、ヒット時に追加の 1d8 ダメージを与えます。当たっても外れても、そのターンが終了するまで歩行速度が 30 フィート増加します。 Feature/&PowerStrikeWithTheWindTitle=風とストライク Feedback/&AdditionalDamageElementalInfusionAcidFormat=エレメントを吸収せよ! @@ -74,6 +82,8 @@ Spell/&ChaosBoltDescription=ターゲットに対して遠隔呪文攻撃を行 Spell/&ChaosBoltTitle=カオスボルト Spell/&ChromaticOrbDescription=範囲内に見える生き物に直径 4 インチのエネルギーの球を投げます。作成するオーブの種類として酸、冷気、火、稲妻、毒、または雷を選択し、ターゲットに対して遠隔呪文攻撃を行います。攻撃が命中した場合、そのクリーチャーはあなたが選んだタイプに 3d8 のダメージを受けます。 Spell/&ChromaticOrbTitle=クロマティックオーブ +Spell/&CommandSpellDescription=あなたは、範囲内にいるあなたが見ることができるクリーチャーに、一言の命令を告げます。ターゲットは、【判断力】セーヴィング・スローに成功するか、次のターンに命令に従わなければなりません。ターゲットがアンデッドであったり、あなたの言語を理解していなかったり、あなたの命令が直接的にターゲットに害を及ぼす場合、呪文は効果がありません。いくつかの典型的な命令とその効果を次に示します。ここで説明されている以外の命令を発してもよいでしょう。その場合、DM がターゲットの行動を決定します。ターゲットがあなたの命令に従えない場合、呪文は終了します。\n• 接近: ターゲットは最短かつ最も直接的な経路であなたに向かって移動し、ターゲットがあなたの 5 フィート以内に移動した場合にターンを終了します。\n• 逃走: ターゲットは、利用可能な最速の手段であなたから離れることにターンを費やします。\n• 卑屈: ターゲットは倒れてうつ伏せになり、その後ターンを終了します。\n• 停止: ターゲットは移動せず、アクションも行いません。飛行クリーチャーは、それが可能である限り、空中に留まります。空中に留まるために移動する必要がある場合、空中に留まるために必要な最小距離を飛行します。\n2 レベル以上の呪文スロットを使用してこの呪文を発動する場合、2 レベルを超える各スロット レベルごとに、範囲内の追加のクリーチャーをターゲットにすることができます。 +Spell/&CommandSpellTitle=指示 Spell/&DissonantWhispersDescription=範囲内にいる選択した 1 体のクリーチャーにのみ聞こえる不協和音のメロディーをささやき、そのクリーチャーにひどい苦痛を与えます。ターゲットは【判断力】セーヴィング スローを行わなければなりません。セーヴィング スローに失敗すると、ターゲットは 3d6 の精神ダメージを受け、可能であれば、即座にリアクションを使用して、移動速度が許す限り遠くまで移動して、ターゲットから離れなければなりません。クリーチャーは、火や穴など、明らかに危険な地面には移動しません。セーヴィング スローに成功すると、ターゲットは半分のダメージを受け、離れる必要もありません。この呪文を 2 レベル以上の呪文スロットを使用して発動すると、1 レベルを超える各スロット レベルごとにダメージが 1d6 増加します。 Spell/&DissonantWhispersTitle=不協和音のささやき Spell/&EarthTremorDescription=地面を叩き、地震力の揺れを引き起こし、土、岩、砂を巻き上げます。 diff --git a/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells01-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells01-ko.txt index 5caef179fd..906e809176 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells01-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells01-ko.txt @@ -30,6 +30,14 @@ Condition/&ConditionWitchBoltTitle=마녀 볼트 Feature/&FeatureGiftOfAlacrityDescription=이니셔티브 롤에 1d8을 추가할 수 있습니다. Feature/&FeatureGiftOfAlacrityTitle=민첩함의 선물 Feature/&PowerChaosBoltDescription={0} 피해를 사용하세요. +Feature/&PowerCommandSpellApproachDescription=타겟은 가장 짧고 직접적인 경로로 당신을 향해 이동하며, 타겟이 당신으로부터 5피트 이내로 접근하면 턴이 끝납니다. +Feature/&PowerCommandSpellApproachTitle=접근하다 +Feature/&PowerCommandSpellFleeDescription=타겟은 가능한 가장 빠른 수단을 통해 당신에게서 멀어지며 턴을 보냅니다. +Feature/&PowerCommandSpellFleeTitle=서두르다 +Feature/&PowerCommandSpellGrovelDescription=타겟이 엎어진 후 턴이 끝납니다. +Feature/&PowerCommandSpellGrovelTitle=기다 +Feature/&PowerCommandSpellHaltDescription=대상은 움직이지 않고 아무런 행동도 취하지 않습니다. 날아다니는 생물은 공중에 머물러 있을 수만 있다면 공중에 머물러 있습니다. 공중에 머물러야 한다면 공중에 머무르는 데 필요한 최소한의 거리를 날아갑니다. +Feature/&PowerCommandSpellHaltTitle=정지 Feature/&PowerStrikeWithTheWindDescription=다음 공격에 이점을 부여하고 적중 시 1d8의 추가 피해를 입힙니다. 맞히든 놓치든, 회전이 끝날 때까지 걷는 속도가 30피트 증가합니다. Feature/&PowerStrikeWithTheWindTitle=바람으로 공격하다 Feedback/&AdditionalDamageElementalInfusionAcidFormat=요소를 흡수하세요! @@ -74,6 +82,8 @@ Spell/&ChaosBoltDescription=대상에게 원거리 주문 공격을 합니다. Spell/&ChaosBoltTitle=카오스볼트 Spell/&ChromaticOrbDescription=범위 내에서 볼 수 있는 생물에게 직경 4인치의 에너지 구체를 던집니다. 생성하는 오브 유형에 대해 산성, 냉기, 불, 번개, 독 또는 천둥을 선택한 다음 대상에 대해 원거리 주문 공격을 가합니다. 공격이 적중하면 생물은 선택한 유형의 3d8 피해를 입습니다. Spell/&ChromaticOrbTitle=색채의 오브 +Spell/&CommandSpellDescription=당신은 범위 내에서 볼 수 있는 생물에게 한 단어 명령을 내립니다. 대상은 지혜 구원 굴림에 성공해야 하고 그렇지 않으면 다음 턴에 명령을 따라야 합니다. 대상이 언데드이거나, 당신의 언어를 이해하지 못하거나, 당신의 명령이 대상에게 직접적으로 해롭다면 이 주문은 효과가 없습니다. 일부 전형적인 명령과 그 효과가 뒤따릅니다. 여기에 설명된 것 외의 명령을 내릴 수도 있습니다. 그렇게 할 경우 DM은 대상의 행동을 결정합니다. 대상이 명령을 따를 수 없다면 주문은 끝납니다.\n• 접근: 대상은 가장 짧고 직접적인 경로로 당신에게 다가오며, 5피트 이내로 이동하면 턴을 끝냅니다.\n• 도망: 대상은 가능한 가장 빠른 수단으로 당신에게서 멀어지며 턴을 보냅니다.\n• 기어다니기: 대상은 엎드린 다음 턴을 끝냅니다.\n• 정지: 대상은 움직이지 않고 아무런 행동도 취하지 않습니다. 날아다니는 생물은 공중에 머물러야 합니다. 공중에 머물기 위해 이동해야 하는 경우, 공중에 머무르는 데 필요한 최소한의 거리를 날아갑니다.\n2레벨 이상의 주문 슬롯을 사용하여 이 주문을 시전할 경우, 2레벨을 넘는 슬롯 레벨마다 범위 내에 있는 추가 생물을 대상으로 지정할 수 있습니다. +Spell/&CommandSpellTitle=명령 Spell/&DissonantWhispersDescription=당신은 범위 내에서 당신이 선택한 한 생명체만 들을 수 있는 불협화음의 멜로디를 속삭이며, 끔찍한 고통으로 그 생명체를 괴롭힙니다. 대상은 지혜 구원 굴림을 해야 합니다. 구원에 실패하면, 대상은 3d6의 사이킥 피해를 입고, 가능하다면 즉시 반응을 사용하여 속도가 허락하는 한 멀리 당신에게서 멀어져야 합니다. 그 생명체는 불이나 구덩이와 같이 명백히 위험한 곳으로 이동하지 않습니다. 구원에 성공하면, 대상은 절반의 피해를 입고, 멀어질 필요가 없습니다. 2레벨 이상의 주문 슬롯을 사용하여 이 주문을 시전하면, 1레벨 위의 슬롯 레벨마다 피해가 1d6씩 증가합니다. Spell/&DissonantWhispersTitle=불협화음의 속삭임 Spell/&EarthTremorDescription=당신은 땅을 치고 지진력의 진동을 일으키고 흙, 바위, 모래를 던집니다. diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells01-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells01-pt-BR.txt index eb1f095a68..65aa7c3116 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells01-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells01-pt-BR.txt @@ -30,6 +30,14 @@ Condition/&ConditionWitchBoltTitle=Parafuso de Bruxa Feature/&FeatureGiftOfAlacrityDescription=Você pode adicionar 1d8 às suas jogadas de iniciativa. Feature/&FeatureGiftOfAlacrityTitle=Presente da presteza Feature/&PowerChaosBoltDescription=Use {0} de dano. +Feature/&PowerCommandSpellApproachDescription=O alvo se move em sua direção pela rota mais curta e direta, terminando seu turno se ele se mover a menos de 1,5 metro de você. +Feature/&PowerCommandSpellApproachTitle=Abordagem +Feature/&PowerCommandSpellFleeDescription=O alvo passa seu turno se afastando de você da maneira mais rápida possível. +Feature/&PowerCommandSpellFleeTitle=Fugir +Feature/&PowerCommandSpellGrovelDescription=O alvo cai no chão e então termina seu turno. +Feature/&PowerCommandSpellGrovelTitle=Rastejar +Feature/&PowerCommandSpellHaltDescription=O alvo não se move e não realiza nenhuma ação. Uma criatura voadora permanece no ar, desde que seja capaz de fazê-lo. Se ela tiver que se mover para permanecer no ar, ela voa a distância mínima necessária para permanecer no ar. +Feature/&PowerCommandSpellHaltTitle=Parar Feature/&PowerStrikeWithTheWindDescription=Conceda vantagem ao seu próximo ataque e causa 1d8 de dano extra em um acerto. Não importa se você acerta ou erra, sua velocidade de caminhada aumenta em 30 pés até o fim daquele turno. Feature/&PowerStrikeWithTheWindTitle=Ataque com o vento Feedback/&AdditionalDamageElementalInfusionAcidFormat=Absorva elementos! @@ -74,6 +82,8 @@ Spell/&ChaosBoltDescription=Faça um ataque mágico à distância contra um alvo Spell/&ChaosBoltTitle=Raio do Caos Spell/&ChromaticOrbDescription=Você arremessa uma esfera de energia de 4 polegadas de diâmetro em uma criatura que você pode ver dentro do alcance. Você escolhe ácido, frio, fogo, relâmpago, veneno ou trovão para o tipo de orbe que você cria, e então faz um ataque de magia à distância contra o alvo. Se o ataque acertar, a criatura sofre 3d8 de dano do tipo que você escolheu. Spell/&ChromaticOrbTitle=Orbe Cromático +Spell/&CommandSpellDescription=Você fala um comando de uma palavra para uma criatura que você pode ver dentro do alcance. O alvo deve ter sucesso em um teste de resistência de Sabedoria ou seguir o comando em seu próximo turno. A magia não tem efeito se o alvo for morto-vivo, se ele não entender sua língua ou se seu comando for diretamente prejudicial a ele. Alguns comandos típicos e seus efeitos seguem. Você pode emitir um comando diferente daquele descrito aqui. Se você fizer isso, o Mestre determina como o alvo se comporta. Se o alvo não puder seguir seu comando, a magia termina.\n• Aproximar-se: O alvo se move em sua direção pela rota mais curta e direta, terminando seu turno se ele se mover a 1,5 m de você.\n• Fugir: O alvo gasta seu turno se afastando de você pelo meio mais rápido disponível.\n• Rastejar: O alvo cai e então termina seu turno.\n• Parar: O alvo não se move e não realiza nenhuma ação. Uma criatura voadora permanece no ar, desde que seja capaz de fazê-lo. Se ele precisar se mover para permanecer no ar, ele voa a distância mínima necessária para permanecer no ar.\nQuando você conjura esta magia usando um espaço de magia de 2º nível ou superior, você pode escolher uma criatura adicional dentro do alcance para cada nível de espaço acima de 2º. +Spell/&CommandSpellTitle=Comando Spell/&DissonantWhispersDescription=Você sussurra uma melodia dissonante que somente uma criatura de sua escolha dentro do alcance pode ouvir, atormentando-a com uma dor terrível. O alvo deve fazer um teste de resistência de Sabedoria. Em um teste falho, ele sofre 3d6 de dano psíquico e deve usar imediatamente sua reação, se disponível, para se mover o mais longe que sua velocidade permitir para longe de você. A criatura não se move para um terreno obviamente perigoso, como uma fogueira ou um poço. Em um teste bem-sucedido, o alvo sofre metade do dano e não precisa se afastar. Quando você conjura esta magia usando um espaço de magia de 2º nível ou superior, o dano aumenta em 1d6 para cada nível de espaço acima do 1º. Spell/&DissonantWhispersTitle=Sussurros Dissonantes Spell/&EarthTremorDescription=Você atinge o chão e desencadeia um tremor de força sísmica, arremessando terra, pedras e areia. diff --git a/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells01-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells01-ru.txt index 317e7c01a1..69b1002e9e 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells01-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells01-ru.txt @@ -30,6 +30,14 @@ Condition/&ConditionWitchBoltTitle=Ведьмин снаряд Feature/&FeatureGiftOfAlacrityDescription=Вы можете добавить 1d8 к вашим броскам инициативы. Feature/&FeatureGiftOfAlacrityTitle=Дар готовности Feature/&PowerChaosBoltDescription=Использован урон типа {0}. +Feature/&PowerCommandSpellApproachDescription=Цель движется к вам по кратчайшему и самому прямому маршруту, заканчивая свой ход, если она перемещается в пределах 5 футов от вас. +Feature/&PowerCommandSpellApproachTitle=Подход +Feature/&PowerCommandSpellFleeDescription=Цель тратит свой ход на то, чтобы удалиться от вас максимально быстрым доступным способом. +Feature/&PowerCommandSpellFleeTitle=Бежать +Feature/&PowerCommandSpellGrovelDescription=Цель падает ничком и завершает свой ход. +Feature/&PowerCommandSpellGrovelTitle=Пресмыкаться +Feature/&PowerCommandSpellHaltDescription=Цель не двигается и не предпринимает никаких действий. Летающее существо остается в воздухе, если оно может это сделать. Если ему нужно двигаться, чтобы оставаться в воздухе, оно пролетает минимальное расстояние, необходимое для того, чтобы оставаться в воздухе. +Feature/&PowerCommandSpellHaltTitle=Остановить Feature/&PowerStrikeWithTheWindDescription=Дарует преимущество на вашу следующую атаку оружием и наносит дополнительно 1d8 урона силовым полем при попадании. Вне зависимости от того, попали вы или промахнулись, ваша скорость ходьбы увеличивается на 30 футов до конца этого хода. Feature/&PowerStrikeWithTheWindTitle=Удар Зефира Feedback/&AdditionalDamageElementalInfusionAcidFormat=Поглощение стихий! @@ -74,6 +82,8 @@ Spell/&ChaosBoltDescription=Вы бросаете волнистую, трепе Spell/&ChaosBoltTitle=Снаряд хаоса Spell/&ChromaticOrbDescription=Вы бросаете 4-дюймовую сферу энергии в существо, которое видите в пределах дистанции. Выберите звук, кислоту, огонь, холод, электричество или яд при создании сферы, а затем совершите по цели дальнобойную атаку заклинанием. Если атака попадает, существо получает 3d8 урона выбранного вида. Spell/&ChromaticOrbTitle=Цветной шарик +Spell/&CommandSpellDescription=Вы произносите однословную команду существу, которое видите в пределах досягаемости. Цель должна преуспеть в спасброске Мудрости или выполнить команду на следующем ходу. Заклинание не действует, если цель — нежить, если она не понимает вашего языка или если ваша команда наносит ей прямой вред. Далее следуют некоторые типичные команды и их эффекты. Вы можете отдать команду, отличную от описанной здесь. Если вы это сделаете, DM определит, как поведет себя цель. Если цель не может выполнить вашу команду, заклинание заканчивается.\n• Приближение: цель движется к вам по кратчайшему и самому прямому маршруту, заканчивая свой ход, если она движется в пределах 5 футов от вас.\n• Бегство: цель проводит свой ход, удаляясь от вас максимально быстрым доступным способом.\n• Пресмыкание: цель падает ничком, а затем заканчивает свой ход.\n• Остановка: цель не двигается и не совершает никаких действий. Летающее существо остается в воздухе, при условии, что оно может это сделать. Если ему необходимо двигаться, чтобы оставаться в воздухе, он пролетает минимальное расстояние, необходимое для того, чтобы оставаться в воздухе.\nКогда вы произносите это заклинание, используя ячейку заклинания 2-го уровня или выше, вы можете выбрать в качестве цели дополнительное существо в пределах дальности для каждого уровня ячейки выше 2-го. +Spell/&CommandSpellTitle=Команда Spell/&DissonantWhispersDescription=Вы шепчете диссонирующую мелодию, которую может услышать только одно существо по вашему выбору в пределах досягаемости, причиняя ему ужасную боль. Цель должна сделать спасбросок Мудрости. При провале она получает 3d6 психического урона и должна немедленно использовать свою реакцию, если она доступна, чтобы отойти от вас как можно дальше, насколько позволяет ее скорость. Существо не перемещается в явно опасную местность, такую ​​как огонь или яма. При успешном спасброске цель получает половину урона и ей не нужно отходить. Когда вы произносите это заклинание, используя ячейку заклинания 2-го уровня или выше, урон увеличивается на 1d6 за каждый уровень ячейки выше 1-го. Spell/&DissonantWhispersTitle=Диссонансный шепот Spell/&EarthTremorDescription=Вы сотрясаете землю в пределах дистанции. Все существа, кроме вас, в этой области должны совершить спасбросок Ловкости. При провале существо получает 1к6 дробящего урона и сбивается с ног. Если поверхность представляет собой рыхлую землю или камень, то область воздействия становится труднопроходимой местностью. diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells01-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells01-zh-CN.txt index 6786d78833..42b6c2bf16 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells01-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells01-zh-CN.txt @@ -30,6 +30,14 @@ Condition/&ConditionWitchBoltTitle=巫术箭 Feature/&FeatureGiftOfAlacrityDescription=你可以将 1d8 添加到你的先攻掷骰中。 Feature/&FeatureGiftOfAlacrityTitle=灵敏之赐 Feature/&PowerChaosBoltDescription=使用{0}伤害。 +Feature/&PowerCommandSpellApproachDescription=目标通过最短、最直接的路线向您移动,如果它移动到距离您 5 英尺以内,则结束其回合。 +Feature/&PowerCommandSpellApproachTitle=方法 +Feature/&PowerCommandSpellFleeDescription=目标会利用自己的回合以最快的方式远离你。 +Feature/&PowerCommandSpellFleeTitle=逃跑 +Feature/&PowerCommandSpellGrovelDescription=目标倒下然后结束其回合。 +Feature/&PowerCommandSpellGrovelTitle=拜倒 +Feature/&PowerCommandSpellHaltDescription=目标不移动也不采取任何行动。飞行生物只要有能力就会停留在空中。如果必须移动才能停留在空中,它会飞行保持在空中所需的最短距离。 +Feature/&PowerCommandSpellHaltTitle=停止 Feature/&PowerStrikeWithTheWindDescription=为你的下一次攻击提供优势,并在命中时造成额外 1d8 伤害。无论你命中还是未命中,你的步行速度都会增加 30 尺,直到该回合结束。 Feature/&PowerStrikeWithTheWindTitle=乘风而击 Feedback/&AdditionalDamageElementalInfusionAcidFormat=元素注能! @@ -74,6 +82,8 @@ Spell/&ChaosBoltDescription=对目标进行远程法术攻击。命中后,目 Spell/&ChaosBoltTitle=混乱箭 Spell/&ChromaticOrbDescription=你向范围内你能看到的一个生物投掷一个直径 4 寸的能量球。你选择强酸、冷冻、火焰、闪电、毒素或雷鸣作为你创造的球体类型,然后对目标进行远程法术攻击。如果攻击命中,该生物将受到你选择类型的 3d8 点伤害。 Spell/&ChromaticOrbTitle=繁彩球 +Spell/&CommandSpellDescription=你对范围内可见的生物说出一个单词命令。目标必须成功通过感知豁免检定,否则在下一回合执行命令。如果目标是不死生物、无法理解你的语言或你的命令对其有直接伤害,则该法术无效。以下是一些典型命令及其效果。你可以发出除此处所述以外的命令。如果你这样做,DM 会确定目标的行为方式。如果目标无法遵循你的命令,法术将结束。\n• 接近:目标以最短、最直接的路线向你移动,如果移动到距离你 5 英尺以内,则结束其回合。\n• 逃跑:目标在其回合中以最快的方式远离你。\n• 匍匐:目标倒下,然后结束其回合。\n• 停止:目标不移动,不采取任何行动。飞行生物会停留在空中,前提是它能够这样做。如果它必须移动才能保持在空中,它会飞行保持在空中所需的最短距离。\n当你使用 2 级或更高级别的法术位施放此法术时,你可以将高于 2 级的每个法术位等级作为范围内的一个额外生物作为目标。 +Spell/&CommandSpellTitle=命令 Spell/&DissonantWhispersDescription=你低声吟唱着一段刺耳的旋律,只有你选择的范围内的一个生物可以听到,这让目标痛苦不堪。目标必须进行一次感知豁免检定。如果豁免失败,目标将受到 3d6 精神伤害,并且必须立即使用其反应(如果可用)以尽可能快的速度远离你。该生物不会移动到明显危险的地方,例如火或坑。如果豁免成功,目标受到的伤害减半,并且不必离开。当你使用 2 级或更高级别的法术位施放此法术时,伤害每高于 1 级法术位等级增加 1d6。 Spell/&DissonantWhispersTitle=不和谐的私语 Spell/&EarthTremorDescription=你撞击地面并释放出地震力的颤抖,将泥土、岩石和沙子掀起。 From 9a22b107fbe0dd5aa7e6521ea4e49b1e29dd0374 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Tue, 3 Sep 2024 09:20:22 -0700 Subject: [PATCH 025/212] update diagnostics --- ...esentation-InvalidSyntaxTranslation-en.txt | 4 + .../UnfinishedBusinessBlueprints/Assets.txt | 24 + .../ConditionCommandSpellApproach.json | 155 +++++ .../ConditionCommandSpellFlee.json | 292 ++++++++++ .../ConditionCommandSpellGrovel.json | 155 +++++ .../ConditionCommandSpellHalt.json | 155 +++++ .../ConditionCommandSpellSelf.json | 161 ++++++ .../PowerCommandSpell.json | 202 +++++++ .../PowerCommandSpellApproach.json | 355 ++++++++++++ .../PowerCommandSpellFlee.json | 355 ++++++++++++ .../PowerCommandSpellGrovel.json | 355 ++++++++++++ .../PowerCommandSpellHalt.json | 355 ++++++++++++ ...rCreateSpellStoringWandOfCommandSpell.json | 358 ++++++++++++ .../SpellStoringWandOfCommandSpell.json | 257 +++++++++ .../SpellDefinition/CommandSpell.json | 346 +++++++++++ .../SpellPowerCommandSpell.json | 198 +++++++ .../SpellPowerCommandSpellApproach.json | 193 +++++++ .../SpellPowerCommandSpellFlee.json | 193 +++++++ .../SpellPowerCommandSpellGrovel.json | 193 +++++++ .../SpellPowerCommandSpellHalt.json | 193 +++++++ Documentation/Spells.md | 541 +++++++++--------- 21 files changed, 4774 insertions(+), 266 deletions(-) create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellApproach.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellFlee.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellGrovel.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellHalt.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellSelf.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerCommandSpell.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerCommandSpellApproach.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerCommandSpellFlee.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerCommandSpellGrovel.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerCommandSpellHalt.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerCreateSpellStoringWandOfCommandSpell.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/ItemDefinition/SpellStoringWandOfCommandSpell.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpell.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/SpellPowerCommandSpell.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/SpellPowerCommandSpellApproach.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/SpellPowerCommandSpellFlee.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/SpellPowerCommandSpellGrovel.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/SpellPowerCommandSpellHalt.json diff --git a/Diagnostics/CE-Definitions-GuiPresentation-InvalidSyntaxTranslation-en.txt b/Diagnostics/CE-Definitions-GuiPresentation-InvalidSyntaxTranslation-en.txt index 7ba25ae168..5d6539cd83 100644 --- a/Diagnostics/CE-Definitions-GuiPresentation-InvalidSyntaxTranslation-en.txt +++ b/Diagnostics/CE-Definitions-GuiPresentation-InvalidSyntaxTranslation-en.txt @@ -1248,6 +1248,8 @@ PowerCreateSpellStoringWandOfColorBurst Title='Color Burst'. PowerCreateSpellStoringWandOfColorBurst Description='Create a wand that can cast Color Burst (II) spell using your Artificer spell attack modifier and save DC.'. PowerCreateSpellStoringWandOfColorSpray Title='Color Spray'. PowerCreateSpellStoringWandOfColorSpray Description='Create a wand that can cast Color Spray (I) spell using your Artificer spell attack modifier and save DC.'. +PowerCreateSpellStoringWandOfCommandSpell Title='Command'. +PowerCreateSpellStoringWandOfCommandSpell Description='Create a wand that can cast Command (I) spell using your Artificer spell attack modifier and save DC.'. PowerCreateSpellStoringWandOfComprehendLanguages Title='Comprehend Languages'. PowerCreateSpellStoringWandOfComprehendLanguages Description='Create a wand that can cast Comprehend Languages (I) spell using your Artificer spell attack modifier and save DC.'. PowerCreateSpellStoringWandOfConjureGoblinoids Title='Conjure Goblinoids'. @@ -1784,6 +1786,8 @@ SpellStoringWandOfColorBurst Title='Wand of Color Burst'. SpellStoringWandOfColorBurst Description='This wand allows casting the Color Burst spell using spell casting stats of the Artificer who created it.'. SpellStoringWandOfColorSpray Title='Wand of Color Spray'. SpellStoringWandOfColorSpray Description='This wand allows casting the Color Spray spell using spell casting stats of the Artificer who created it.'. +SpellStoringWandOfCommandSpell Title='Wand of Command'. +SpellStoringWandOfCommandSpell Description='This wand allows casting the Command spell using spell casting stats of the Artificer who created it.'. SpellStoringWandOfComprehendLanguages Title='Wand of Comprehend Languages'. SpellStoringWandOfComprehendLanguages Description='This wand allows casting the Comprehend Languages spell using spell casting stats of the Artificer who created it.'. SpellStoringWandOfConjureGoblinoids Title='Wand of Conjure Goblinoids'. diff --git a/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt b/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt index 06feae2323..8b7d203d94 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt +++ b/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt @@ -692,6 +692,11 @@ ConditionCollegeOfLifeFly ConditionDefinition ConditionDefinition 2b3fe597-4816- ConditionCollegeOfThespianCombatInspirationCombat ConditionDefinition ConditionDefinition 70a1a942-fa69-5449-9f20-8fdfe857701d ConditionCollegeOfThespianCombatInspirationMovement ConditionDefinition ConditionDefinition 8fb4a5b0-92b5-546f-b7bb-732be8851e14 ConditionCollegeOfValianceDishearteningPerformance ConditionDefinition ConditionDefinition 8b075dec-4ac0-5331-b23e-df6924fdb447 +ConditionCommandSpellApproach ConditionDefinition ConditionDefinition bc446416-951a-5ad8-a0a0-f0e1eae119f4 +ConditionCommandSpellFlee ConditionDefinition ConditionDefinition b52e3cc4-15af-5123-a861-3fae68460977 +ConditionCommandSpellGrovel ConditionDefinition ConditionDefinition 6422ce36-c309-52f9-b699-bddb61fde71e +ConditionCommandSpellHalt ConditionDefinition ConditionDefinition d20e7a46-e706-5c54-8bea-955b2054193a +ConditionCommandSpellSelf ConditionDefinition ConditionDefinition 7b73b84d-697d-5018-9cff-85b0fba12033 ConditionCorruptingBolt ConditionDefinition ConditionDefinition c47e9ae4-841b-53af-b40f-2cb08dfa7d08 ConditionCrownOfStars ConditionDefinition ConditionDefinition 2d6f7c70-16fc-550b-83ff-f2e945b43449 ConditionCrusadersMantle ConditionDefinition ConditionDefinition 04a3a8c7-cf68-5a07-a0c1-9aabc911cad9 @@ -3063,6 +3068,11 @@ PowerCollegeOfThespianImprovedTerrificPerformance FeatureDefinitionPower Feature PowerCollegeOfThespianTerrificPerformance FeatureDefinitionPower FeatureDefinition ed5f8e89-7ca7-59ee-bd76-b9f936d0797a PowerCollegeOfValianceDishearteningPerformance FeatureDefinitionPower FeatureDefinition 1f54f672-43cd-52b3-8e3e-c9077a7f8eb4 PowerCollegeOfValianceHeroicInspiration FeatureDefinitionPower FeatureDefinition 5b82d737-651e-5bc2-b18b-1963f134f1b5 +PowerCommandSpell FeatureDefinitionPower FeatureDefinition 05222420-c747-5093-9ba6-b5995338b633 +PowerCommandSpellApproach FeatureDefinitionPowerSharedPool FeatureDefinition 18ae3db8-2589-5b95-b795-4f54e5aae89e +PowerCommandSpellFlee FeatureDefinitionPowerSharedPool FeatureDefinition 7920093b-60b8-5b72-8217-8e863e38bdea +PowerCommandSpellGrovel FeatureDefinitionPowerSharedPool FeatureDefinition 35f18407-8050-5283-ba7f-3a5863aa555e +PowerCommandSpellHalt FeatureDefinitionPowerSharedPool FeatureDefinition ba84cf9e-4373-5a11-af15-41395a314cde PowerCreateInfusedReplicaAmuletOfHealth FeatureDefinitionPowerSharedPool FeatureDefinition 241cfb02-8421-5f82-8f11-300407bff7c7 PowerCreateInfusedReplicaBackpack_Bag_Of_Holding FeatureDefinitionPowerSharedPool FeatureDefinition 41031a48-4461-5e48-8a60-f7da9a7bd597 PowerCreateInfusedReplicaBeltOfGiantHillStrength FeatureDefinitionPowerSharedPool FeatureDefinition bbd152a7-2d27-5836-a649-3f466da89ce6 @@ -3109,6 +3119,7 @@ PowerCreateSpellStoringWandOfChromaticOrb FeatureDefinitionPowerSharedPool Featu PowerCreateSpellStoringWandOfCloudOfDaggers FeatureDefinitionPowerSharedPool FeatureDefinition ec91a2df-2e17-5e23-a557-b0a29988b1a0 PowerCreateSpellStoringWandOfColorBurst FeatureDefinitionPowerSharedPool FeatureDefinition 209756fb-1b4b-56ba-9e2b-6ef71ee0d83b PowerCreateSpellStoringWandOfColorSpray FeatureDefinitionPowerSharedPool FeatureDefinition f8ac5039-bbe2-55ee-973f-85909724c643 +PowerCreateSpellStoringWandOfCommandSpell FeatureDefinitionPowerSharedPool FeatureDefinition e90dc523-a327-589e-bc84-4a3a73b789d7 PowerCreateSpellStoringWandOfComprehendLanguages FeatureDefinitionPowerSharedPool FeatureDefinition 9c84c91e-85d6-53c9-8ace-bd06c87d300c PowerCreateSpellStoringWandOfConjureGoblinoids FeatureDefinitionPowerSharedPool FeatureDefinition 4e9b245c-0e4b-5690-95c7-467acccdd814 PowerCreateSpellStoringWandOfCureWounds FeatureDefinitionPowerSharedPool FeatureDefinition ef499f3d-b8d9-5292-a819-c9285ffc4c88 @@ -5882,6 +5893,11 @@ PowerCollegeOfThespianImprovedTerrificPerformance FeatureDefinitionPower Feature PowerCollegeOfThespianTerrificPerformance FeatureDefinitionPower FeatureDefinitionPower ed5f8e89-7ca7-59ee-bd76-b9f936d0797a PowerCollegeOfValianceDishearteningPerformance FeatureDefinitionPower FeatureDefinitionPower 1f54f672-43cd-52b3-8e3e-c9077a7f8eb4 PowerCollegeOfValianceHeroicInspiration FeatureDefinitionPower FeatureDefinitionPower 5b82d737-651e-5bc2-b18b-1963f134f1b5 +PowerCommandSpell FeatureDefinitionPower FeatureDefinitionPower 05222420-c747-5093-9ba6-b5995338b633 +PowerCommandSpellApproach FeatureDefinitionPowerSharedPool FeatureDefinitionPower 18ae3db8-2589-5b95-b795-4f54e5aae89e +PowerCommandSpellFlee FeatureDefinitionPowerSharedPool FeatureDefinitionPower 7920093b-60b8-5b72-8217-8e863e38bdea +PowerCommandSpellGrovel FeatureDefinitionPowerSharedPool FeatureDefinitionPower 35f18407-8050-5283-ba7f-3a5863aa555e +PowerCommandSpellHalt FeatureDefinitionPowerSharedPool FeatureDefinitionPower ba84cf9e-4373-5a11-af15-41395a314cde PowerCreateInfusedReplicaAmuletOfHealth FeatureDefinitionPowerSharedPool FeatureDefinitionPower 241cfb02-8421-5f82-8f11-300407bff7c7 PowerCreateInfusedReplicaBackpack_Bag_Of_Holding FeatureDefinitionPowerSharedPool FeatureDefinitionPower 41031a48-4461-5e48-8a60-f7da9a7bd597 PowerCreateInfusedReplicaBeltOfGiantHillStrength FeatureDefinitionPowerSharedPool FeatureDefinitionPower bbd152a7-2d27-5836-a649-3f466da89ce6 @@ -5928,6 +5944,7 @@ PowerCreateSpellStoringWandOfChromaticOrb FeatureDefinitionPowerSharedPool Featu PowerCreateSpellStoringWandOfCloudOfDaggers FeatureDefinitionPowerSharedPool FeatureDefinitionPower ec91a2df-2e17-5e23-a557-b0a29988b1a0 PowerCreateSpellStoringWandOfColorBurst FeatureDefinitionPowerSharedPool FeatureDefinitionPower 209756fb-1b4b-56ba-9e2b-6ef71ee0d83b PowerCreateSpellStoringWandOfColorSpray FeatureDefinitionPowerSharedPool FeatureDefinitionPower f8ac5039-bbe2-55ee-973f-85909724c643 +PowerCreateSpellStoringWandOfCommandSpell FeatureDefinitionPowerSharedPool FeatureDefinitionPower e90dc523-a327-589e-bc84-4a3a73b789d7 PowerCreateSpellStoringWandOfComprehendLanguages FeatureDefinitionPowerSharedPool FeatureDefinitionPower 9c84c91e-85d6-53c9-8ace-bd06c87d300c PowerCreateSpellStoringWandOfConjureGoblinoids FeatureDefinitionPowerSharedPool FeatureDefinitionPower 4e9b245c-0e4b-5690-95c7-467acccdd814 PowerCreateSpellStoringWandOfCureWounds FeatureDefinitionPowerSharedPool FeatureDefinitionPower ef499f3d-b8d9-5292-a819-c9285ffc4c88 @@ -8329,6 +8346,7 @@ SpellStoringWandOfChromaticOrb ItemDefinition ItemDefinition f81eac13-8db9-57f5- SpellStoringWandOfCloudOfDaggers ItemDefinition ItemDefinition a9043899-f63b-587b-ad52-0658c4da225f SpellStoringWandOfColorBurst ItemDefinition ItemDefinition 9244c429-490f-59a2-942c-3cd08edc5bec SpellStoringWandOfColorSpray ItemDefinition ItemDefinition c0453877-01a5-5123-907a-971a14bc4ef8 +SpellStoringWandOfCommandSpell ItemDefinition ItemDefinition 252920d8-129e-5ae7-a5fc-6bdccebf1d4f SpellStoringWandOfComprehendLanguages ItemDefinition ItemDefinition caf4a9d0-9bc1-5062-9f72-3fb1362256cd SpellStoringWandOfConjureGoblinoids ItemDefinition ItemDefinition 10451765-8ee3-5656-82d8-5ebd6af3aa4c SpellStoringWandOfCureWounds ItemDefinition ItemDefinition 24c65d7b-0f85-5048-abf5-75e525e5ea43 @@ -12129,6 +12147,7 @@ ChromaticOrbDamageThunder SpellDefinition SpellDefinition 65e7665c-05b4-5745-b52 CircleOfMagicalNegation SpellDefinition SpellDefinition c03e2ec6-3fd5-5943-8750-0f75c275d9e0 CloudOfDaggers SpellDefinition SpellDefinition c95adfd0-7613-54ea-8270-b3624ae4dd78 ColorBurst SpellDefinition SpellDefinition c79e03ee-1d09-569f-85d9-27a50cfc7110 +CommandSpell SpellDefinition SpellDefinition 289ffbc5-ef5c-56b1-b6ba-79d88e236887 ConjureElementalInvisibleStalker SpellDefinition SpellDefinition 4f4b45b0-1a32-55c5-ab58-66d105a6f07f CorruptingBolt SpellDefinition SpellDefinition 715e1a9b-115f-5036-99b9-bf54f7e34f01 CreateDeadRisenGhost SpellDefinition SpellDefinition 02a12317-e3e2-5833-9611-eeaaead7c151 @@ -12291,6 +12310,11 @@ SpellPowerCollegeOfAudacityAudaciousWhirl SpellDefinition SpellDefinition f96604 SpellPowerCollegeOfAudacityDefensiveWhirl SpellDefinition SpellDefinition a7aa8a20-6587-5e36-b0bf-a9aa9d0b7d1b SpellPowerCollegeOfAudacityMobileWhirl SpellDefinition SpellDefinition 5ddb314c-e9bc-5cfc-ac92-bf42a53ea3f9 SpellPowerCollegeOfAudacitySlashingWhirl SpellDefinition SpellDefinition c5b8d92b-1c10-5ba8-be85-cd7db9609aef +SpellPowerCommandSpell SpellDefinition SpellDefinition af1672a4-ce02-5b90-a2ee-e34669a559e0 +SpellPowerCommandSpellApproach SpellDefinition SpellDefinition 152fd62b-c5e0-567a-a035-7f4f39023003 +SpellPowerCommandSpellFlee SpellDefinition SpellDefinition 8bd2bff0-c47d-5c51-9c83-82f46e5531bd +SpellPowerCommandSpellGrovel SpellDefinition SpellDefinition 41423887-4200-5abf-b070-c71f30076690 +SpellPowerCommandSpellHalt SpellDefinition SpellDefinition 22b80e7c-5b05-58a6-94cb-6ff9e7db04bd SpellPowerCreateSpellStoringWandOfAid SpellDefinition SpellDefinition 6918f728-abe9-5d29-8fe1-4615b153f054 SpellPowerCreateSpellStoringWandOfBlur SpellDefinition SpellDefinition df53557a-f022-5107-821c-f9ffec20339d SpellPowerCreateSpellStoringWandOfCureWounds SpellDefinition SpellDefinition 266af657-efd7-52ff-9e78-17ac1538ca14 diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellApproach.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellApproach.json new file mode 100644 index 0000000000..873b04ceed --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellApproach.json @@ -0,0 +1,155 @@ +{ + "$type": "ConditionDefinition, Assembly-CSharp", + "inDungeonEditor": false, + "parentCondition": null, + "conditionType": "Beneficial", + "features": [], + "allowMultipleInstances": false, + "silentWhenAdded": false, + "silentWhenRemoved": false, + "silentWhenRefreshed": false, + "terminateWhenRemoved": false, + "specialDuration": false, + "durationType": "Hour", + "durationParameterDie": "D4", + "durationParameter": 1, + "forceTurnOccurence": false, + "turnOccurence": "EndOfTurn", + "specialInterruptions": [], + "interruptionRequiresSavingThrow": false, + "interruptionSavingThrowComputationMethod": "SaveOverride", + "interruptionSavingThrowAbility": "", + "interruptionDamageThreshold": 0, + "keepConditionIfSavingThrowSucceeds": false, + "interruptionSavingThrowAffinity": "None", + "conditionTags": [], + "recurrentEffectForms": [], + "cancellingConditions": [], + "additionalDamageWhenHit": false, + "additionalDamageTypeDetermination": "Specific", + "additionalDamageType": "", + "additionalDamageQuantity": "AbilityBonus", + "additionalDamageDieType": "D1", + "additionalDamageDieNumber": 1, + "additionalConditionWhenHit": false, + "additionalCondition": null, + "additionalConditionDurationType": "Round", + "additionalConditionDurationParameter": 1, + "additionalConditionTurnOccurenceType": "StartOfTurn", + "conditionStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "conditionParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "conditionEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "recurrentEffectParticleReference": null, + "characterShaderReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "particlesBasedOnAncestryDamageType": false, + "ancestryType": "Sorcerer", + "acidParticleParameters": null, + "coldParticleParameters": null, + "fireParticleParameters": null, + "lightningParticleParameters": null, + "poisonParticleParameters": null, + "overrideCharacterShaderColors": false, + "firstCharacterShaderColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "secondCharacterShaderColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "timeToWaitBeforeApplyingShader": 0.5, + "timeToWaitBeforeRemovingShader": 0.5, + "possessive": false, + "amountOrigin": "None", + "baseAmount": 0, + "additiveAmount": false, + "sourceAbilityBonusMinValue": 1, + "subsequentOnRemoval": null, + "subsequentHasSavingThrow": false, + "subsequentSavingThrowAbilityScore": "Constitution", + "subsequentVariableForDC": "FrenzyExhaustionDC", + "subsequentDCIncrease": 5, + "effectFormsOnRemoved": [], + "forceBehavior": false, + "addBehavior": false, + "fearSource": false, + "battlePackage": null, + "explorationPackage": null, + "removedFromTheGame": false, + "permanentlyRemovedIfExtraPlanar": false, + "refundReceivedDamageWhenRemoved": false, + "followSourcePosition": false, + "disolveCharacterOnDeath": false, + "disolveParameters": { + "$type": "GraphicsCharacterDefinitions+DisolveParameters, Assembly-CSharp", + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "colorWidth": 0.0, + "noiseScale": 5.0, + "hueScale": 0.0, + "vertexOffset": 0.0, + "curve": { + "$type": "UnityEngine.AnimationCurve, UnityEngine.CoreModule" + }, + "startAfterDeathAnimation": false, + "duration": 0.0 + }, + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "Feature/&PowerCommandSpellApproachTitle", + "description": "Feature/&PowerCommandSpellApproachDescription", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "bc446416-951a-5ad8-a0a0-f0e1eae119f4", + "contentPack": 9999, + "name": "ConditionCommandSpellApproach" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellFlee.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellFlee.json new file mode 100644 index 0000000000..f76df98e53 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellFlee.json @@ -0,0 +1,292 @@ +{ + "$type": "ConditionDefinition, Assembly-CSharp", + "inDungeonEditor": false, + "parentCondition": "Definition:ConditionFrightened:5cbaee42aac310e42a407fc59bf65515", + "conditionType": "Detrimental", + "features": [ + "Definition:ActionAffinityConditionFrightenedFear:12a1f5a969e9ef54cba8799bdbe30694" + ], + "allowMultipleInstances": false, + "silentWhenAdded": false, + "silentWhenRemoved": false, + "silentWhenRefreshed": false, + "terminateWhenRemoved": false, + "specialDuration": true, + "durationType": "Round", + "durationParameterDie": "D1", + "durationParameter": 0, + "forceTurnOccurence": true, + "turnOccurence": "EndOfTurn", + "specialInterruptions": [], + "interruptionRequiresSavingThrow": false, + "interruptionSavingThrowComputationMethod": "SaveOverride", + "interruptionSavingThrowAbility": "", + "interruptionDamageThreshold": 0, + "keepConditionIfSavingThrowSucceeds": false, + "interruptionSavingThrowAffinity": "None", + "conditionTags": [], + "recurrentEffectForms": [], + "cancellingConditions": [], + "additionalDamageWhenHit": false, + "additionalDamageTypeDetermination": "Specific", + "additionalDamageType": "", + "additionalDamageQuantity": "AbilityBonus", + "additionalDamageDieType": "D1", + "additionalDamageDieNumber": 1, + "additionalConditionWhenHit": false, + "additionalCondition": null, + "additionalConditionDurationType": "Round", + "additionalConditionDurationParameter": 1, + "additionalConditionTurnOccurenceType": "StartOfTurn", + "conditionStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "40ab6dfd54701724ab98b3f91c846a41", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "09122c24b2751d34a89764b8407ef696", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "characterShaderReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particlesBasedOnAncestryDamageType": false, + "ancestryType": "Sorcerer", + "acidParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "coldParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "fireParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "lightningParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "poisonParticleParameters": { + "$type": "ConditionParticleParameters, Assembly-CSharp", + "startParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "endParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + } + }, + "overrideCharacterShaderColors": false, + "firstCharacterShaderColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "secondCharacterShaderColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "timeToWaitBeforeApplyingShader": 0.5, + "timeToWaitBeforeRemovingShader": 0.5, + "possessive": false, + "amountOrigin": "None", + "baseAmount": 0, + "additiveAmount": false, + "sourceAbilityBonusMinValue": 1, + "subsequentOnRemoval": null, + "subsequentHasSavingThrow": false, + "subsequentSavingThrowAbilityScore": "Constitution", + "subsequentVariableForDC": "FrenzyExhaustionDC", + "subsequentDCIncrease": 5, + "effectFormsOnRemoved": [], + "forceBehavior": true, + "addBehavior": false, + "fearSource": true, + "battlePackage": "Definition:Fear:67e55218421c6034d8ec7952695e5831", + "explorationPackage": "Definition:Idle:47dfd6fd3d22b214cb8c446f2438f3c6", + "removedFromTheGame": false, + "permanentlyRemovedIfExtraPlanar": false, + "refundReceivedDamageWhenRemoved": false, + "followSourcePosition": false, + "disolveCharacterOnDeath": false, + "disolveParameters": { + "$type": "GraphicsCharacterDefinitions+DisolveParameters, Assembly-CSharp", + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "colorWidth": 0.0, + "noiseScale": 5.0, + "hueScale": 0.0, + "vertexOffset": 0.0, + "curve": { + "$type": "UnityEngine.AnimationCurve, UnityEngine.CoreModule" + }, + "startAfterDeathAnimation": false, + "duration": 0.0 + }, + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "Feature/&PowerCommandSpellFleeTitle", + "description": "Feature/&PowerCommandSpellFleeDescription", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "b52e3cc4-15af-5123-a861-3fae68460977", + "contentPack": 9999, + "name": "ConditionCommandSpellFlee" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellGrovel.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellGrovel.json new file mode 100644 index 0000000000..d93f644744 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellGrovel.json @@ -0,0 +1,155 @@ +{ + "$type": "ConditionDefinition, Assembly-CSharp", + "inDungeonEditor": false, + "parentCondition": null, + "conditionType": "Beneficial", + "features": [], + "allowMultipleInstances": false, + "silentWhenAdded": false, + "silentWhenRemoved": false, + "silentWhenRefreshed": false, + "terminateWhenRemoved": false, + "specialDuration": false, + "durationType": "Hour", + "durationParameterDie": "D4", + "durationParameter": 1, + "forceTurnOccurence": false, + "turnOccurence": "EndOfTurn", + "specialInterruptions": [], + "interruptionRequiresSavingThrow": false, + "interruptionSavingThrowComputationMethod": "SaveOverride", + "interruptionSavingThrowAbility": "", + "interruptionDamageThreshold": 0, + "keepConditionIfSavingThrowSucceeds": false, + "interruptionSavingThrowAffinity": "None", + "conditionTags": [], + "recurrentEffectForms": [], + "cancellingConditions": [], + "additionalDamageWhenHit": false, + "additionalDamageTypeDetermination": "Specific", + "additionalDamageType": "", + "additionalDamageQuantity": "AbilityBonus", + "additionalDamageDieType": "D1", + "additionalDamageDieNumber": 1, + "additionalConditionWhenHit": false, + "additionalCondition": null, + "additionalConditionDurationType": "Round", + "additionalConditionDurationParameter": 1, + "additionalConditionTurnOccurenceType": "StartOfTurn", + "conditionStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "conditionParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "conditionEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "recurrentEffectParticleReference": null, + "characterShaderReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "particlesBasedOnAncestryDamageType": false, + "ancestryType": "Sorcerer", + "acidParticleParameters": null, + "coldParticleParameters": null, + "fireParticleParameters": null, + "lightningParticleParameters": null, + "poisonParticleParameters": null, + "overrideCharacterShaderColors": false, + "firstCharacterShaderColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "secondCharacterShaderColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "timeToWaitBeforeApplyingShader": 0.5, + "timeToWaitBeforeRemovingShader": 0.5, + "possessive": false, + "amountOrigin": "None", + "baseAmount": 0, + "additiveAmount": false, + "sourceAbilityBonusMinValue": 1, + "subsequentOnRemoval": null, + "subsequentHasSavingThrow": false, + "subsequentSavingThrowAbilityScore": "Constitution", + "subsequentVariableForDC": "FrenzyExhaustionDC", + "subsequentDCIncrease": 5, + "effectFormsOnRemoved": [], + "forceBehavior": false, + "addBehavior": false, + "fearSource": false, + "battlePackage": null, + "explorationPackage": null, + "removedFromTheGame": false, + "permanentlyRemovedIfExtraPlanar": false, + "refundReceivedDamageWhenRemoved": false, + "followSourcePosition": false, + "disolveCharacterOnDeath": false, + "disolveParameters": { + "$type": "GraphicsCharacterDefinitions+DisolveParameters, Assembly-CSharp", + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "colorWidth": 0.0, + "noiseScale": 5.0, + "hueScale": 0.0, + "vertexOffset": 0.0, + "curve": { + "$type": "UnityEngine.AnimationCurve, UnityEngine.CoreModule" + }, + "startAfterDeathAnimation": false, + "duration": 0.0 + }, + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "Feature/&PowerCommandSpellGrovelTitle", + "description": "Feature/&PowerCommandSpellGrovelDescription", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "6422ce36-c309-52f9-b699-bddb61fde71e", + "contentPack": 9999, + "name": "ConditionCommandSpellGrovel" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellHalt.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellHalt.json new file mode 100644 index 0000000000..2ca4deee36 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellHalt.json @@ -0,0 +1,155 @@ +{ + "$type": "ConditionDefinition, Assembly-CSharp", + "inDungeonEditor": false, + "parentCondition": null, + "conditionType": "Beneficial", + "features": [], + "allowMultipleInstances": false, + "silentWhenAdded": false, + "silentWhenRemoved": false, + "silentWhenRefreshed": false, + "terminateWhenRemoved": false, + "specialDuration": false, + "durationType": "Hour", + "durationParameterDie": "D4", + "durationParameter": 1, + "forceTurnOccurence": false, + "turnOccurence": "EndOfTurn", + "specialInterruptions": [], + "interruptionRequiresSavingThrow": false, + "interruptionSavingThrowComputationMethod": "SaveOverride", + "interruptionSavingThrowAbility": "", + "interruptionDamageThreshold": 0, + "keepConditionIfSavingThrowSucceeds": false, + "interruptionSavingThrowAffinity": "None", + "conditionTags": [], + "recurrentEffectForms": [], + "cancellingConditions": [], + "additionalDamageWhenHit": false, + "additionalDamageTypeDetermination": "Specific", + "additionalDamageType": "", + "additionalDamageQuantity": "AbilityBonus", + "additionalDamageDieType": "D1", + "additionalDamageDieNumber": 1, + "additionalConditionWhenHit": false, + "additionalCondition": null, + "additionalConditionDurationType": "Round", + "additionalConditionDurationParameter": 1, + "additionalConditionTurnOccurenceType": "StartOfTurn", + "conditionStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "conditionParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "conditionEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "recurrentEffectParticleReference": null, + "characterShaderReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "particlesBasedOnAncestryDamageType": false, + "ancestryType": "Sorcerer", + "acidParticleParameters": null, + "coldParticleParameters": null, + "fireParticleParameters": null, + "lightningParticleParameters": null, + "poisonParticleParameters": null, + "overrideCharacterShaderColors": false, + "firstCharacterShaderColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "secondCharacterShaderColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "timeToWaitBeforeApplyingShader": 0.5, + "timeToWaitBeforeRemovingShader": 0.5, + "possessive": false, + "amountOrigin": "None", + "baseAmount": 0, + "additiveAmount": false, + "sourceAbilityBonusMinValue": 1, + "subsequentOnRemoval": null, + "subsequentHasSavingThrow": false, + "subsequentSavingThrowAbilityScore": "Constitution", + "subsequentVariableForDC": "FrenzyExhaustionDC", + "subsequentDCIncrease": 5, + "effectFormsOnRemoved": [], + "forceBehavior": false, + "addBehavior": false, + "fearSource": false, + "battlePackage": "Definition:Idle:47dfd6fd3d22b214cb8c446f2438f3c6", + "explorationPackage": null, + "removedFromTheGame": false, + "permanentlyRemovedIfExtraPlanar": false, + "refundReceivedDamageWhenRemoved": false, + "followSourcePosition": false, + "disolveCharacterOnDeath": false, + "disolveParameters": { + "$type": "GraphicsCharacterDefinitions+DisolveParameters, Assembly-CSharp", + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "colorWidth": 0.0, + "noiseScale": 5.0, + "hueScale": 0.0, + "vertexOffset": 0.0, + "curve": { + "$type": "UnityEngine.AnimationCurve, UnityEngine.CoreModule" + }, + "startAfterDeathAnimation": false, + "duration": 0.0 + }, + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "Feature/&PowerCommandSpellHaltTitle", + "description": "Feature/&PowerCommandSpellHaltDescription", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "d20e7a46-e706-5c54-8bea-955b2054193a", + "contentPack": 9999, + "name": "ConditionCommandSpellHalt" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellSelf.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellSelf.json new file mode 100644 index 0000000000..637fd0041b --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellSelf.json @@ -0,0 +1,161 @@ +{ + "$type": "ConditionDefinition, Assembly-CSharp", + "inDungeonEditor": false, + "parentCondition": null, + "conditionType": "Beneficial", + "features": [ + "Definition:PowerCommandSpell:05222420-c747-5093-9ba6-b5995338b633", + "Definition:PowerCommandSpellApproach:18ae3db8-2589-5b95-b795-4f54e5aae89e", + "Definition:PowerCommandSpellFlee:7920093b-60b8-5b72-8217-8e863e38bdea", + "Definition:PowerCommandSpellGrovel:35f18407-8050-5283-ba7f-3a5863aa555e", + "Definition:PowerCommandSpellHalt:ba84cf9e-4373-5a11-af15-41395a314cde" + ], + "allowMultipleInstances": false, + "silentWhenAdded": false, + "silentWhenRemoved": false, + "silentWhenRefreshed": false, + "terminateWhenRemoved": false, + "specialDuration": false, + "durationType": "Hour", + "durationParameterDie": "D4", + "durationParameter": 1, + "forceTurnOccurence": false, + "turnOccurence": "EndOfTurn", + "specialInterruptions": [], + "interruptionRequiresSavingThrow": false, + "interruptionSavingThrowComputationMethod": "SaveOverride", + "interruptionSavingThrowAbility": "", + "interruptionDamageThreshold": 0, + "keepConditionIfSavingThrowSucceeds": false, + "interruptionSavingThrowAffinity": "None", + "conditionTags": [], + "recurrentEffectForms": [], + "cancellingConditions": [], + "additionalDamageWhenHit": false, + "additionalDamageTypeDetermination": "Specific", + "additionalDamageType": "", + "additionalDamageQuantity": "AbilityBonus", + "additionalDamageDieType": "D1", + "additionalDamageDieNumber": 1, + "additionalConditionWhenHit": false, + "additionalCondition": null, + "additionalConditionDurationType": "Round", + "additionalConditionDurationParameter": 1, + "additionalConditionTurnOccurenceType": "StartOfTurn", + "conditionStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "conditionParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "conditionEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "recurrentEffectParticleReference": null, + "characterShaderReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "particlesBasedOnAncestryDamageType": false, + "ancestryType": "Sorcerer", + "acidParticleParameters": null, + "coldParticleParameters": null, + "fireParticleParameters": null, + "lightningParticleParameters": null, + "poisonParticleParameters": null, + "overrideCharacterShaderColors": false, + "firstCharacterShaderColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "secondCharacterShaderColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "timeToWaitBeforeApplyingShader": 0.5, + "timeToWaitBeforeRemovingShader": 0.5, + "possessive": false, + "amountOrigin": "None", + "baseAmount": 0, + "additiveAmount": false, + "sourceAbilityBonusMinValue": 1, + "subsequentOnRemoval": null, + "subsequentHasSavingThrow": false, + "subsequentSavingThrowAbilityScore": "Constitution", + "subsequentVariableForDC": "FrenzyExhaustionDC", + "subsequentDCIncrease": 5, + "effectFormsOnRemoved": [], + "forceBehavior": false, + "addBehavior": false, + "fearSource": false, + "battlePackage": null, + "explorationPackage": null, + "removedFromTheGame": false, + "permanentlyRemovedIfExtraPlanar": false, + "refundReceivedDamageWhenRemoved": false, + "followSourcePosition": false, + "disolveCharacterOnDeath": false, + "disolveParameters": { + "$type": "GraphicsCharacterDefinitions+DisolveParameters, Assembly-CSharp", + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "colorWidth": 0.0, + "noiseScale": 5.0, + "hueScale": 0.0, + "vertexOffset": 0.0, + "curve": { + "$type": "UnityEngine.AnimationCurve, UnityEngine.CoreModule" + }, + "startAfterDeathAnimation": false, + "duration": 0.0 + }, + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": true, + "title": "Feature/&NoContentTitle", + "description": "Feature/&NoContentTitle", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "7b73b84d-697d-5018-9cff-85b0fba12033", + "contentPack": 9999, + "name": "ConditionCommandSpellSelf" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerCommandSpell.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerCommandSpell.json new file mode 100644 index 0000000000..2f8d3a5160 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerCommandSpell.json @@ -0,0 +1,202 @@ +{ + "$type": "FeatureDefinitionPower, Assembly-CSharp", + "effectDescription": { + "$type": "EffectDescription, Assembly-CSharp", + "rangeType": "Self", + "rangeParameter": 0, + "halfDamageOnAMiss": false, + "hitAffinitiesByTargetTag": [], + "targetType": "Self", + "itemSelectionType": "Equiped", + "targetParameter": 1, + "targetParameter2": 2, + "emissiveBorder": "None", + "emissiveParameter": 1, + "requiresTargetProximity": false, + "targetProximityDistance": 6, + "targetExcludeCaster": false, + "canBePlacedOnCharacter": true, + "affectOnlyGround": false, + "targetFilteringMethod": "AllCharacterAndGadgets", + "targetFilteringTag": "No", + "requiresVisibilityForPosition": true, + "inviteOptionalAlly": false, + "slotTypes": [], + "recurrentEffect": "No", + "retargetAfterDeath": false, + "retargetActionType": "Bonus", + "poolFilterDiceNumber": 5, + "poolFilterDieType": "D8", + "trapRangeType": "Triggerer", + "targetConditionName": "", + "targetConditionAsset": null, + "targetSide": "Enemy", + "durationType": "Instantaneous", + "durationParameter": 1, + "endOfEffect": "EndOfTurn", + "hasSavingThrow": false, + "disableSavingThrowOnAllies": false, + "savingThrowAbility": "Dexterity", + "ignoreCover": false, + "grantedConditionOnSave": null, + "rollSaveOnlyIfRelevantForms": false, + "hasShoveRoll": false, + "createdByCharacter": false, + "difficultyClassComputation": "SpellCastingFeature", + "savingThrowDifficultyAbility": "Wisdom", + "fixedSavingThrowDifficultyClass": 15, + "savingThrowAffinitiesBySense": [], + "savingThrowAffinitiesByFamily": [], + "damageAffinitiesByFamily": [], + "advantageForEnemies": false, + "canBeDispersed": false, + "hasVelocity": false, + "velocityCellsPerRound": 2, + "velocityType": "AwayFromSourceOriginalPosition", + "restrictedCreatureFamilies": [], + "immuneCreatureFamilies": [], + "restrictedCharacterSizes": [], + "hasLimitedEffectPool": false, + "effectPoolAmount": 60, + "effectApplication": "All", + "effectFormFilters": [], + "effectForms": [], + "specialFormsDescription": "", + "effectAdvancement": { + "$type": "EffectAdvancement, Assembly-CSharp", + "effectIncrementMethod": "None", + "incrementMultiplier": 1, + "additionalTargetsPerIncrement": 0, + "additionalSubtargetsPerIncrement": 0, + "additionalDicePerIncrement": 0, + "additionalSpellLevelPerIncrement": 0, + "additionalSummonsPerIncrement": 0, + "additionalHPPerIncrement": 0, + "additionalTempHPPerIncrement": 0, + "additionalTargetCellsPerIncrement": 0, + "additionalItemBonus": 0, + "additionalWeaponDie": 0, + "alteredDuration": "None" + }, + "speedType": "Instant", + "speedParameter": 10.0, + "offsetImpactTimeBasedOnDistance": false, + "offsetImpactTimeBasedOnDistanceFactor": 0.1, + "offsetImpactTimePerTarget": 0.0, + "effectParticleParameters": { + "$type": "EffectParticleParameters, Assembly-CSharp", + "casterParticleReference": null, + "casterSelfParticleReference": null, + "casterQuickSpellParticleReference": null, + "targetParticleReference": null, + "effectParticleReference": null, + "effectSubTargetParticleReference": null, + "zoneParticleReference": null, + "beforeImpactParticleReference": null, + "impactParticleReference": null, + "activeEffectImpactParticleReference": null, + "activeEffectCellStartParticleReference": null, + "activeEffectCellParticleReference": null, + "activeEffectCellEndParticleReference": null, + "activeEffectSurfaceStartParticleReference": null, + "activeEffectSurfaceParticleReference": null, + "activeEffectSurfaceEndParticleReference": null, + "activeEffectSurfaceParticlePerIndex": "", + "activeEffectSurfaceParticlePerIndexCount": 0, + "emissiveBorderCellStartParticleReference": null, + "emissiveBorderCellParticleReference": null, + "emissiveBorderCellEndParticleReference": null, + "emissiveBorderSurfaceStartParticleReference": null, + "emissiveBorderSurfaceParticleReference": null, + "emissiveBorderSurfaceEndParticleReference": null, + "conditionStartParticleReference": null, + "conditionParticleReference": null, + "conditionEndParticleReference": null, + "forceApplyZoneParticle": false, + "applyEmissionColorOnWeapons": false, + "emissionColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "emissionColorFadeInDuration": 0.0, + "emissionColorFadeOutDuration": 0.0 + }, + "effectAIParameters": { + "$type": "EffectAIParameters, Assembly-CSharp", + "aoeScoreMultiplier": 1.0, + "cooldownForCaster": 0, + "cooldownForBattle": 0, + "sortingScoreMultiplier": 1.0, + "dynamicCooldown": false + }, + "animationMagicEffect": "Animation0", + "lightCounterDispellsEffect": false, + "hideSavingThrowAnimation": false + }, + "delegatedToAction": false, + "surrogateToSpell": null, + "triggeredBySpecialMove": false, + "activationTime": "NoCost", + "autoActivationRequiredTargetSenseType": "None", + "autoActivationRequiredTargetCreatureTag": "", + "autoActivationPowerTag": "", + "triggeringPower": null, + "copyTargetingFromTriggeringPower": false, + "reactionContext": "None", + "damageTypes": [], + "reactionName": "", + "reactionActingCharacterParamIdx": 0, + "reactionAttackerParamIdx": -1, + "hasCastingFailure": false, + "castingSuccessComputation": "CasterLevel", + "canUseInDialog": false, + "disableIfConditionIsOwned": null, + "disableIfTargetConditionIsOwned": null, + "rechargeRate": "AtWill", + "costPerUse": 1, + "spellcastingFeature": null, + "usesDetermination": "Fixed", + "abilityScoreDetermination": "Explicit", + "usesAbilityScoreName": "Charisma", + "fixedUsesPerRecharge": 1, + "abilityScore": "Intelligence", + "attackHitComputation": "AbilityScore", + "fixedAttackHit": 0, + "abilityScoreBonusToAttack": false, + "proficiencyBonusToAttack": false, + "uniqueInstance": false, + "showCasting": true, + "shortTitleOverride": "", + "overriddenPower": null, + "includeBaseDescription": false, + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": true, + "title": "Feature/&NoContentTitle", + "description": "Feature/&NoContentTitle", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "05222420-c747-5093-9ba6-b5995338b633", + "contentPack": 9999, + "name": "PowerCommandSpell" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerCommandSpellApproach.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerCommandSpellApproach.json new file mode 100644 index 0000000000..2aa873448a --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerCommandSpellApproach.json @@ -0,0 +1,355 @@ +{ + "$type": "FeatureDefinitionPowerSharedPool, SolastaUnfinishedBusiness", + "effectDescription": { + "$type": "EffectDescription, Assembly-CSharp", + "rangeType": "Distance", + "rangeParameter": 12, + "halfDamageOnAMiss": false, + "hitAffinitiesByTargetTag": [], + "targetType": "IndividualsUnique", + "itemSelectionType": "None", + "targetParameter": 1, + "targetParameter2": 2, + "emissiveBorder": "None", + "emissiveParameter": 1, + "requiresTargetProximity": false, + "targetProximityDistance": 6, + "targetExcludeCaster": false, + "canBePlacedOnCharacter": true, + "affectOnlyGround": false, + "targetFilteringMethod": "CharacterOnly", + "targetFilteringTag": "No", + "requiresVisibilityForPosition": true, + "inviteOptionalAlly": false, + "slotTypes": [], + "recurrentEffect": "No", + "retargetAfterDeath": false, + "retargetActionType": "Bonus", + "poolFilterDiceNumber": 5, + "poolFilterDieType": "D8", + "trapRangeType": "Triggerer", + "targetConditionName": "", + "targetConditionAsset": null, + "targetSide": "Enemy", + "durationType": "Round", + "durationParameter": 0, + "endOfEffect": "EndOfTurn", + "hasSavingThrow": false, + "disableSavingThrowOnAllies": false, + "savingThrowAbility": "Dexterity", + "ignoreCover": false, + "grantedConditionOnSave": null, + "rollSaveOnlyIfRelevantForms": false, + "hasShoveRoll": false, + "createdByCharacter": true, + "difficultyClassComputation": "SpellCastingFeature", + "savingThrowDifficultyAbility": "Wisdom", + "fixedSavingThrowDifficultyClass": 15, + "savingThrowAffinitiesBySense": [], + "savingThrowAffinitiesByFamily": [], + "damageAffinitiesByFamily": [], + "advantageForEnemies": false, + "canBeDispersed": false, + "hasVelocity": false, + "velocityCellsPerRound": 2, + "velocityType": "AwayFromSourceOriginalPosition", + "restrictedCreatureFamilies": [], + "immuneCreatureFamilies": [], + "restrictedCharacterSizes": [], + "hasLimitedEffectPool": false, + "effectPoolAmount": 60, + "effectApplication": "All", + "effectFormFilters": [], + "effectForms": [ + { + "$type": "EffectForm, Assembly-CSharp", + "formType": "Condition", + "addBonusMode": "None", + "applyLevel": "No", + "levelType": "ClassLevel", + "levelMultiplier": 1, + "diceByLevelTable": [], + "createdByCharacter": true, + "createdByCondition": false, + "hasSavingThrow": false, + "savingThrowAffinity": "None", + "dcModifier": 0, + "canSaveToCancel": false, + "saveOccurence": "EndOfTurn", + "conditionForm": { + "$type": "ConditionForm, Assembly-CSharp", + "conditionDefinitionName": "ConditionCommandSpellApproach", + "conditionDefinition": "Definition:ConditionCommandSpellApproach:bc446416-951a-5ad8-a0a0-f0e1eae119f4", + "operation": "Add", + "conditionsList": [], + "applyToSelf": false, + "forceOnSelf": false + }, + "hasFilterId": false, + "filterId": 0 + } + ], + "specialFormsDescription": "", + "effectAdvancement": { + "$type": "EffectAdvancement, Assembly-CSharp", + "effectIncrementMethod": "None", + "incrementMultiplier": 1, + "additionalTargetsPerIncrement": 0, + "additionalSubtargetsPerIncrement": 0, + "additionalDicePerIncrement": 0, + "additionalSpellLevelPerIncrement": 0, + "additionalSummonsPerIncrement": 0, + "additionalHPPerIncrement": 0, + "additionalTempHPPerIncrement": 0, + "additionalTargetCellsPerIncrement": 0, + "additionalItemBonus": 0, + "additionalWeaponDie": 0, + "alteredDuration": "None" + }, + "speedType": "Instant", + "speedParameter": 10.0, + "offsetImpactTimeBasedOnDistance": false, + "offsetImpactTimeBasedOnDistanceFactor": 0.1, + "offsetImpactTimePerTarget": 0.0, + "effectParticleParameters": { + "$type": "EffectParticleParameters, Assembly-CSharp", + "casterParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "81560ac3813217d4d9fd281d5e73c234", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "casterSelfParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "casterQuickSpellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "targetParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "effectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "effectSubTargetParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "zoneParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "beforeImpactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "impactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectImpactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceParticlePerIndex": "", + "activeEffectSurfaceParticlePerIndexCount": 0, + "emissiveBorderCellStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderCellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderCellEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "forceApplyZoneParticle": false, + "applyEmissionColorOnWeapons": false, + "emissionColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "emissionColorFadeInDuration": 0.0, + "emissionColorFadeOutDuration": 0.0 + }, + "effectAIParameters": { + "$type": "EffectAIParameters, Assembly-CSharp", + "aoeScoreMultiplier": 1.0, + "cooldownForCaster": 0, + "cooldownForBattle": 0, + "sortingScoreMultiplier": 1.0, + "dynamicCooldown": false + }, + "animationMagicEffect": "Animation0", + "lightCounterDispellsEffect": false, + "hideSavingThrowAnimation": false + }, + "delegatedToAction": false, + "surrogateToSpell": null, + "triggeredBySpecialMove": false, + "activationTime": "NoCost", + "autoActivationRequiredTargetSenseType": "None", + "autoActivationRequiredTargetCreatureTag": "", + "autoActivationPowerTag": "", + "triggeringPower": null, + "copyTargetingFromTriggeringPower": false, + "reactionContext": "None", + "damageTypes": [], + "reactionName": "", + "reactionActingCharacterParamIdx": 0, + "reactionAttackerParamIdx": -1, + "hasCastingFailure": false, + "castingSuccessComputation": "CasterLevel", + "canUseInDialog": false, + "disableIfConditionIsOwned": null, + "disableIfTargetConditionIsOwned": null, + "rechargeRate": "AtWill", + "costPerUse": 1, + "spellcastingFeature": null, + "usesDetermination": "Fixed", + "abilityScoreDetermination": "Explicit", + "usesAbilityScoreName": "Charisma", + "fixedUsesPerRecharge": 1, + "abilityScore": "Intelligence", + "attackHitComputation": "AbilityScore", + "fixedAttackHit": 0, + "abilityScoreBonusToAttack": false, + "proficiencyBonusToAttack": false, + "uniqueInstance": false, + "showCasting": false, + "shortTitleOverride": "", + "overriddenPower": null, + "includeBaseDescription": false, + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "Feature/&PowerCommandSpellApproachTitle", + "description": "Feature/&PowerCommandSpellApproachDescription", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "18ae3db8-2589-5b95-b795-4f54e5aae89e", + "contentPack": 9999, + "name": "PowerCommandSpellApproach" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerCommandSpellFlee.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerCommandSpellFlee.json new file mode 100644 index 0000000000..2afeb5eb09 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerCommandSpellFlee.json @@ -0,0 +1,355 @@ +{ + "$type": "FeatureDefinitionPowerSharedPool, SolastaUnfinishedBusiness", + "effectDescription": { + "$type": "EffectDescription, Assembly-CSharp", + "rangeType": "Distance", + "rangeParameter": 12, + "halfDamageOnAMiss": false, + "hitAffinitiesByTargetTag": [], + "targetType": "IndividualsUnique", + "itemSelectionType": "None", + "targetParameter": 1, + "targetParameter2": 2, + "emissiveBorder": "None", + "emissiveParameter": 1, + "requiresTargetProximity": false, + "targetProximityDistance": 6, + "targetExcludeCaster": false, + "canBePlacedOnCharacter": true, + "affectOnlyGround": false, + "targetFilteringMethod": "CharacterOnly", + "targetFilteringTag": "No", + "requiresVisibilityForPosition": true, + "inviteOptionalAlly": false, + "slotTypes": [], + "recurrentEffect": "No", + "retargetAfterDeath": false, + "retargetActionType": "Bonus", + "poolFilterDiceNumber": 5, + "poolFilterDieType": "D8", + "trapRangeType": "Triggerer", + "targetConditionName": "", + "targetConditionAsset": null, + "targetSide": "Enemy", + "durationType": "Round", + "durationParameter": 1, + "endOfEffect": "EndOfTurn", + "hasSavingThrow": false, + "disableSavingThrowOnAllies": false, + "savingThrowAbility": "Dexterity", + "ignoreCover": false, + "grantedConditionOnSave": null, + "rollSaveOnlyIfRelevantForms": false, + "hasShoveRoll": false, + "createdByCharacter": true, + "difficultyClassComputation": "SpellCastingFeature", + "savingThrowDifficultyAbility": "Wisdom", + "fixedSavingThrowDifficultyClass": 15, + "savingThrowAffinitiesBySense": [], + "savingThrowAffinitiesByFamily": [], + "damageAffinitiesByFamily": [], + "advantageForEnemies": false, + "canBeDispersed": false, + "hasVelocity": false, + "velocityCellsPerRound": 2, + "velocityType": "AwayFromSourceOriginalPosition", + "restrictedCreatureFamilies": [], + "immuneCreatureFamilies": [], + "restrictedCharacterSizes": [], + "hasLimitedEffectPool": false, + "effectPoolAmount": 60, + "effectApplication": "All", + "effectFormFilters": [], + "effectForms": [ + { + "$type": "EffectForm, Assembly-CSharp", + "formType": "Condition", + "addBonusMode": "None", + "applyLevel": "No", + "levelType": "ClassLevel", + "levelMultiplier": 1, + "diceByLevelTable": [], + "createdByCharacter": true, + "createdByCondition": false, + "hasSavingThrow": false, + "savingThrowAffinity": "None", + "dcModifier": 0, + "canSaveToCancel": false, + "saveOccurence": "EndOfTurn", + "conditionForm": { + "$type": "ConditionForm, Assembly-CSharp", + "conditionDefinitionName": "ConditionFrightenedFearEndOfNextTurn", + "conditionDefinition": "Definition:ConditionFrightenedFearEndOfNextTurn:9a680035ff5e74b49a03ef7daf0bc08d", + "operation": "Add", + "conditionsList": [], + "applyToSelf": false, + "forceOnSelf": false + }, + "hasFilterId": false, + "filterId": 0 + } + ], + "specialFormsDescription": "", + "effectAdvancement": { + "$type": "EffectAdvancement, Assembly-CSharp", + "effectIncrementMethod": "None", + "incrementMultiplier": 1, + "additionalTargetsPerIncrement": 0, + "additionalSubtargetsPerIncrement": 0, + "additionalDicePerIncrement": 0, + "additionalSpellLevelPerIncrement": 0, + "additionalSummonsPerIncrement": 0, + "additionalHPPerIncrement": 0, + "additionalTempHPPerIncrement": 0, + "additionalTargetCellsPerIncrement": 0, + "additionalItemBonus": 0, + "additionalWeaponDie": 0, + "alteredDuration": "None" + }, + "speedType": "Instant", + "speedParameter": 10.0, + "offsetImpactTimeBasedOnDistance": false, + "offsetImpactTimeBasedOnDistanceFactor": 0.1, + "offsetImpactTimePerTarget": 0.0, + "effectParticleParameters": { + "$type": "EffectParticleParameters, Assembly-CSharp", + "casterParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "81560ac3813217d4d9fd281d5e73c234", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "casterSelfParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "casterQuickSpellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "targetParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "effectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "effectSubTargetParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "zoneParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "beforeImpactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "impactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectImpactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceParticlePerIndex": "", + "activeEffectSurfaceParticlePerIndexCount": 0, + "emissiveBorderCellStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderCellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderCellEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "forceApplyZoneParticle": false, + "applyEmissionColorOnWeapons": false, + "emissionColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "emissionColorFadeInDuration": 0.0, + "emissionColorFadeOutDuration": 0.0 + }, + "effectAIParameters": { + "$type": "EffectAIParameters, Assembly-CSharp", + "aoeScoreMultiplier": 1.0, + "cooldownForCaster": 0, + "cooldownForBattle": 0, + "sortingScoreMultiplier": 1.0, + "dynamicCooldown": false + }, + "animationMagicEffect": "Animation0", + "lightCounterDispellsEffect": false, + "hideSavingThrowAnimation": false + }, + "delegatedToAction": false, + "surrogateToSpell": null, + "triggeredBySpecialMove": false, + "activationTime": "NoCost", + "autoActivationRequiredTargetSenseType": "None", + "autoActivationRequiredTargetCreatureTag": "", + "autoActivationPowerTag": "", + "triggeringPower": null, + "copyTargetingFromTriggeringPower": false, + "reactionContext": "None", + "damageTypes": [], + "reactionName": "", + "reactionActingCharacterParamIdx": 0, + "reactionAttackerParamIdx": -1, + "hasCastingFailure": false, + "castingSuccessComputation": "CasterLevel", + "canUseInDialog": false, + "disableIfConditionIsOwned": null, + "disableIfTargetConditionIsOwned": null, + "rechargeRate": "AtWill", + "costPerUse": 1, + "spellcastingFeature": null, + "usesDetermination": "Fixed", + "abilityScoreDetermination": "Explicit", + "usesAbilityScoreName": "Charisma", + "fixedUsesPerRecharge": 1, + "abilityScore": "Intelligence", + "attackHitComputation": "AbilityScore", + "fixedAttackHit": 0, + "abilityScoreBonusToAttack": false, + "proficiencyBonusToAttack": false, + "uniqueInstance": false, + "showCasting": false, + "shortTitleOverride": "", + "overriddenPower": null, + "includeBaseDescription": false, + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "Feature/&PowerCommandSpellFleeTitle", + "description": "Feature/&PowerCommandSpellFleeDescription", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "7920093b-60b8-5b72-8217-8e863e38bdea", + "contentPack": 9999, + "name": "PowerCommandSpellFlee" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerCommandSpellGrovel.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerCommandSpellGrovel.json new file mode 100644 index 0000000000..8c0700e674 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerCommandSpellGrovel.json @@ -0,0 +1,355 @@ +{ + "$type": "FeatureDefinitionPowerSharedPool, SolastaUnfinishedBusiness", + "effectDescription": { + "$type": "EffectDescription, Assembly-CSharp", + "rangeType": "Distance", + "rangeParameter": 12, + "halfDamageOnAMiss": false, + "hitAffinitiesByTargetTag": [], + "targetType": "IndividualsUnique", + "itemSelectionType": "None", + "targetParameter": 1, + "targetParameter2": 2, + "emissiveBorder": "None", + "emissiveParameter": 1, + "requiresTargetProximity": false, + "targetProximityDistance": 6, + "targetExcludeCaster": false, + "canBePlacedOnCharacter": true, + "affectOnlyGround": false, + "targetFilteringMethod": "CharacterOnly", + "targetFilteringTag": "No", + "requiresVisibilityForPosition": true, + "inviteOptionalAlly": false, + "slotTypes": [], + "recurrentEffect": "No", + "retargetAfterDeath": false, + "retargetActionType": "Bonus", + "poolFilterDiceNumber": 5, + "poolFilterDieType": "D8", + "trapRangeType": "Triggerer", + "targetConditionName": "", + "targetConditionAsset": null, + "targetSide": "Enemy", + "durationType": "Round", + "durationParameter": 0, + "endOfEffect": "EndOfTurn", + "hasSavingThrow": false, + "disableSavingThrowOnAllies": false, + "savingThrowAbility": "Dexterity", + "ignoreCover": false, + "grantedConditionOnSave": null, + "rollSaveOnlyIfRelevantForms": false, + "hasShoveRoll": false, + "createdByCharacter": true, + "difficultyClassComputation": "SpellCastingFeature", + "savingThrowDifficultyAbility": "Wisdom", + "fixedSavingThrowDifficultyClass": 15, + "savingThrowAffinitiesBySense": [], + "savingThrowAffinitiesByFamily": [], + "damageAffinitiesByFamily": [], + "advantageForEnemies": false, + "canBeDispersed": false, + "hasVelocity": false, + "velocityCellsPerRound": 2, + "velocityType": "AwayFromSourceOriginalPosition", + "restrictedCreatureFamilies": [], + "immuneCreatureFamilies": [], + "restrictedCharacterSizes": [], + "hasLimitedEffectPool": false, + "effectPoolAmount": 60, + "effectApplication": "All", + "effectFormFilters": [], + "effectForms": [ + { + "$type": "EffectForm, Assembly-CSharp", + "formType": "Condition", + "addBonusMode": "None", + "applyLevel": "No", + "levelType": "ClassLevel", + "levelMultiplier": 1, + "diceByLevelTable": [], + "createdByCharacter": true, + "createdByCondition": false, + "hasSavingThrow": false, + "savingThrowAffinity": "None", + "dcModifier": 0, + "canSaveToCancel": false, + "saveOccurence": "EndOfTurn", + "conditionForm": { + "$type": "ConditionForm, Assembly-CSharp", + "conditionDefinitionName": "ConditionCommandSpellGrovel", + "conditionDefinition": "Definition:ConditionCommandSpellGrovel:6422ce36-c309-52f9-b699-bddb61fde71e", + "operation": "Add", + "conditionsList": [], + "applyToSelf": false, + "forceOnSelf": false + }, + "hasFilterId": false, + "filterId": 0 + } + ], + "specialFormsDescription": "", + "effectAdvancement": { + "$type": "EffectAdvancement, Assembly-CSharp", + "effectIncrementMethod": "None", + "incrementMultiplier": 1, + "additionalTargetsPerIncrement": 0, + "additionalSubtargetsPerIncrement": 0, + "additionalDicePerIncrement": 0, + "additionalSpellLevelPerIncrement": 0, + "additionalSummonsPerIncrement": 0, + "additionalHPPerIncrement": 0, + "additionalTempHPPerIncrement": 0, + "additionalTargetCellsPerIncrement": 0, + "additionalItemBonus": 0, + "additionalWeaponDie": 0, + "alteredDuration": "None" + }, + "speedType": "Instant", + "speedParameter": 10.0, + "offsetImpactTimeBasedOnDistance": false, + "offsetImpactTimeBasedOnDistanceFactor": 0.1, + "offsetImpactTimePerTarget": 0.0, + "effectParticleParameters": { + "$type": "EffectParticleParameters, Assembly-CSharp", + "casterParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "81560ac3813217d4d9fd281d5e73c234", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "casterSelfParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "casterQuickSpellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "targetParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "effectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "effectSubTargetParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "zoneParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "beforeImpactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "impactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectImpactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceParticlePerIndex": "", + "activeEffectSurfaceParticlePerIndexCount": 0, + "emissiveBorderCellStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderCellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderCellEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "forceApplyZoneParticle": false, + "applyEmissionColorOnWeapons": false, + "emissionColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "emissionColorFadeInDuration": 0.0, + "emissionColorFadeOutDuration": 0.0 + }, + "effectAIParameters": { + "$type": "EffectAIParameters, Assembly-CSharp", + "aoeScoreMultiplier": 1.0, + "cooldownForCaster": 0, + "cooldownForBattle": 0, + "sortingScoreMultiplier": 1.0, + "dynamicCooldown": false + }, + "animationMagicEffect": "Animation0", + "lightCounterDispellsEffect": false, + "hideSavingThrowAnimation": false + }, + "delegatedToAction": false, + "surrogateToSpell": null, + "triggeredBySpecialMove": false, + "activationTime": "NoCost", + "autoActivationRequiredTargetSenseType": "None", + "autoActivationRequiredTargetCreatureTag": "", + "autoActivationPowerTag": "", + "triggeringPower": null, + "copyTargetingFromTriggeringPower": false, + "reactionContext": "None", + "damageTypes": [], + "reactionName": "", + "reactionActingCharacterParamIdx": 0, + "reactionAttackerParamIdx": -1, + "hasCastingFailure": false, + "castingSuccessComputation": "CasterLevel", + "canUseInDialog": false, + "disableIfConditionIsOwned": null, + "disableIfTargetConditionIsOwned": null, + "rechargeRate": "AtWill", + "costPerUse": 1, + "spellcastingFeature": null, + "usesDetermination": "Fixed", + "abilityScoreDetermination": "Explicit", + "usesAbilityScoreName": "Charisma", + "fixedUsesPerRecharge": 1, + "abilityScore": "Intelligence", + "attackHitComputation": "AbilityScore", + "fixedAttackHit": 0, + "abilityScoreBonusToAttack": false, + "proficiencyBonusToAttack": false, + "uniqueInstance": false, + "showCasting": false, + "shortTitleOverride": "", + "overriddenPower": null, + "includeBaseDescription": false, + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "Feature/&PowerCommandSpellGrovelTitle", + "description": "Feature/&PowerCommandSpellGrovelDescription", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "35f18407-8050-5283-ba7f-3a5863aa555e", + "contentPack": 9999, + "name": "PowerCommandSpellGrovel" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerCommandSpellHalt.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerCommandSpellHalt.json new file mode 100644 index 0000000000..0516a3104d --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerCommandSpellHalt.json @@ -0,0 +1,355 @@ +{ + "$type": "FeatureDefinitionPowerSharedPool, SolastaUnfinishedBusiness", + "effectDescription": { + "$type": "EffectDescription, Assembly-CSharp", + "rangeType": "Distance", + "rangeParameter": 12, + "halfDamageOnAMiss": false, + "hitAffinitiesByTargetTag": [], + "targetType": "IndividualsUnique", + "itemSelectionType": "None", + "targetParameter": 1, + "targetParameter2": 2, + "emissiveBorder": "None", + "emissiveParameter": 1, + "requiresTargetProximity": false, + "targetProximityDistance": 6, + "targetExcludeCaster": false, + "canBePlacedOnCharacter": true, + "affectOnlyGround": false, + "targetFilteringMethod": "CharacterOnly", + "targetFilteringTag": "No", + "requiresVisibilityForPosition": true, + "inviteOptionalAlly": false, + "slotTypes": [], + "recurrentEffect": "No", + "retargetAfterDeath": false, + "retargetActionType": "Bonus", + "poolFilterDiceNumber": 5, + "poolFilterDieType": "D8", + "trapRangeType": "Triggerer", + "targetConditionName": "", + "targetConditionAsset": null, + "targetSide": "Enemy", + "durationType": "Round", + "durationParameter": 0, + "endOfEffect": "EndOfTurn", + "hasSavingThrow": false, + "disableSavingThrowOnAllies": false, + "savingThrowAbility": "Dexterity", + "ignoreCover": false, + "grantedConditionOnSave": null, + "rollSaveOnlyIfRelevantForms": false, + "hasShoveRoll": false, + "createdByCharacter": true, + "difficultyClassComputation": "SpellCastingFeature", + "savingThrowDifficultyAbility": "Wisdom", + "fixedSavingThrowDifficultyClass": 15, + "savingThrowAffinitiesBySense": [], + "savingThrowAffinitiesByFamily": [], + "damageAffinitiesByFamily": [], + "advantageForEnemies": false, + "canBeDispersed": false, + "hasVelocity": false, + "velocityCellsPerRound": 2, + "velocityType": "AwayFromSourceOriginalPosition", + "restrictedCreatureFamilies": [], + "immuneCreatureFamilies": [], + "restrictedCharacterSizes": [], + "hasLimitedEffectPool": false, + "effectPoolAmount": 60, + "effectApplication": "All", + "effectFormFilters": [], + "effectForms": [ + { + "$type": "EffectForm, Assembly-CSharp", + "formType": "Condition", + "addBonusMode": "None", + "applyLevel": "No", + "levelType": "ClassLevel", + "levelMultiplier": 1, + "diceByLevelTable": [], + "createdByCharacter": true, + "createdByCondition": false, + "hasSavingThrow": false, + "savingThrowAffinity": "None", + "dcModifier": 0, + "canSaveToCancel": false, + "saveOccurence": "EndOfTurn", + "conditionForm": { + "$type": "ConditionForm, Assembly-CSharp", + "conditionDefinitionName": "ConditionCommandSpellHalt", + "conditionDefinition": "Definition:ConditionCommandSpellHalt:d20e7a46-e706-5c54-8bea-955b2054193a", + "operation": "Add", + "conditionsList": [], + "applyToSelf": false, + "forceOnSelf": false + }, + "hasFilterId": false, + "filterId": 0 + } + ], + "specialFormsDescription": "", + "effectAdvancement": { + "$type": "EffectAdvancement, Assembly-CSharp", + "effectIncrementMethod": "None", + "incrementMultiplier": 1, + "additionalTargetsPerIncrement": 0, + "additionalSubtargetsPerIncrement": 0, + "additionalDicePerIncrement": 0, + "additionalSpellLevelPerIncrement": 0, + "additionalSummonsPerIncrement": 0, + "additionalHPPerIncrement": 0, + "additionalTempHPPerIncrement": 0, + "additionalTargetCellsPerIncrement": 0, + "additionalItemBonus": 0, + "additionalWeaponDie": 0, + "alteredDuration": "None" + }, + "speedType": "Instant", + "speedParameter": 10.0, + "offsetImpactTimeBasedOnDistance": false, + "offsetImpactTimeBasedOnDistanceFactor": 0.1, + "offsetImpactTimePerTarget": 0.0, + "effectParticleParameters": { + "$type": "EffectParticleParameters, Assembly-CSharp", + "casterParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "81560ac3813217d4d9fd281d5e73c234", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "casterSelfParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "casterQuickSpellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "targetParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "effectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "effectSubTargetParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "zoneParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "beforeImpactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "impactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectImpactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceParticlePerIndex": "", + "activeEffectSurfaceParticlePerIndexCount": 0, + "emissiveBorderCellStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderCellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderCellEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "forceApplyZoneParticle": false, + "applyEmissionColorOnWeapons": false, + "emissionColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "emissionColorFadeInDuration": 0.0, + "emissionColorFadeOutDuration": 0.0 + }, + "effectAIParameters": { + "$type": "EffectAIParameters, Assembly-CSharp", + "aoeScoreMultiplier": 1.0, + "cooldownForCaster": 0, + "cooldownForBattle": 0, + "sortingScoreMultiplier": 1.0, + "dynamicCooldown": false + }, + "animationMagicEffect": "Animation0", + "lightCounterDispellsEffect": false, + "hideSavingThrowAnimation": false + }, + "delegatedToAction": false, + "surrogateToSpell": null, + "triggeredBySpecialMove": false, + "activationTime": "NoCost", + "autoActivationRequiredTargetSenseType": "None", + "autoActivationRequiredTargetCreatureTag": "", + "autoActivationPowerTag": "", + "triggeringPower": null, + "copyTargetingFromTriggeringPower": false, + "reactionContext": "None", + "damageTypes": [], + "reactionName": "", + "reactionActingCharacterParamIdx": 0, + "reactionAttackerParamIdx": -1, + "hasCastingFailure": false, + "castingSuccessComputation": "CasterLevel", + "canUseInDialog": false, + "disableIfConditionIsOwned": null, + "disableIfTargetConditionIsOwned": null, + "rechargeRate": "AtWill", + "costPerUse": 1, + "spellcastingFeature": null, + "usesDetermination": "Fixed", + "abilityScoreDetermination": "Explicit", + "usesAbilityScoreName": "Charisma", + "fixedUsesPerRecharge": 1, + "abilityScore": "Intelligence", + "attackHitComputation": "AbilityScore", + "fixedAttackHit": 0, + "abilityScoreBonusToAttack": false, + "proficiencyBonusToAttack": false, + "uniqueInstance": false, + "showCasting": false, + "shortTitleOverride": "", + "overriddenPower": null, + "includeBaseDescription": false, + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "Feature/&PowerCommandSpellHaltTitle", + "description": "Feature/&PowerCommandSpellHaltDescription", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "ba84cf9e-4373-5a11-af15-41395a314cde", + "contentPack": 9999, + "name": "PowerCommandSpellHalt" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerCreateSpellStoringWandOfCommandSpell.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerCreateSpellStoringWandOfCommandSpell.json new file mode 100644 index 0000000000..800ed4294f --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerCreateSpellStoringWandOfCommandSpell.json @@ -0,0 +1,358 @@ +{ + "$type": "FeatureDefinitionPowerSharedPool, SolastaUnfinishedBusiness", + "effectDescription": { + "$type": "EffectDescription, Assembly-CSharp", + "rangeType": "Self", + "rangeParameter": 0, + "halfDamageOnAMiss": false, + "hitAffinitiesByTargetTag": [], + "targetType": "Self", + "itemSelectionType": "None", + "targetParameter": 1, + "targetParameter2": 2, + "emissiveBorder": "None", + "emissiveParameter": 1, + "requiresTargetProximity": false, + "targetProximityDistance": 6, + "targetExcludeCaster": false, + "canBePlacedOnCharacter": true, + "affectOnlyGround": false, + "targetFilteringMethod": "CharacterOnly", + "targetFilteringTag": "No", + "requiresVisibilityForPosition": true, + "inviteOptionalAlly": false, + "slotTypes": [], + "recurrentEffect": "No", + "retargetAfterDeath": false, + "retargetActionType": "Bonus", + "poolFilterDiceNumber": 5, + "poolFilterDieType": "D8", + "trapRangeType": "Triggerer", + "targetConditionName": "", + "targetConditionAsset": null, + "targetSide": "All", + "durationType": "Permanent", + "durationParameter": 0, + "endOfEffect": "EndOfTurn", + "hasSavingThrow": false, + "disableSavingThrowOnAllies": false, + "savingThrowAbility": "Dexterity", + "ignoreCover": false, + "grantedConditionOnSave": null, + "rollSaveOnlyIfRelevantForms": false, + "hasShoveRoll": false, + "createdByCharacter": true, + "difficultyClassComputation": "SpellCastingFeature", + "savingThrowDifficultyAbility": "Wisdom", + "fixedSavingThrowDifficultyClass": 15, + "savingThrowAffinitiesBySense": [], + "savingThrowAffinitiesByFamily": [], + "damageAffinitiesByFamily": [], + "advantageForEnemies": false, + "canBeDispersed": false, + "hasVelocity": false, + "velocityCellsPerRound": 2, + "velocityType": "AwayFromSourceOriginalPosition", + "restrictedCreatureFamilies": [], + "immuneCreatureFamilies": [], + "restrictedCharacterSizes": [], + "hasLimitedEffectPool": false, + "effectPoolAmount": 60, + "effectApplication": "All", + "effectFormFilters": [], + "effectForms": [ + { + "$type": "EffectForm, Assembly-CSharp", + "formType": "Summon", + "addBonusMode": "None", + "applyLevel": "No", + "levelType": "ClassLevel", + "levelMultiplier": 1, + "diceByLevelTable": [], + "createdByCharacter": true, + "createdByCondition": false, + "hasSavingThrow": true, + "savingThrowAffinity": "None", + "dcModifier": 0, + "canSaveToCancel": false, + "saveOccurence": "EndOfTurn", + "summonForm": { + "$type": "SummonForm, Assembly-CSharp", + "summonType": "InventoryItem", + "itemDefinition": "Definition:SpellStoringWandOfCommandSpell:252920d8-129e-5ae7-a5fc-6bdccebf1d4f", + "trackItem": true, + "monsterDefinitionName": "", + "number": 1, + "conditionDefinition": null, + "persistOnConcentrationLoss": true, + "decisionPackage": null, + "effectProxyDefinitionName": null + }, + "hasFilterId": false, + "filterId": 0 + } + ], + "specialFormsDescription": "", + "effectAdvancement": { + "$type": "EffectAdvancement, Assembly-CSharp", + "effectIncrementMethod": "None", + "incrementMultiplier": 1, + "additionalTargetsPerIncrement": 0, + "additionalSubtargetsPerIncrement": 0, + "additionalDicePerIncrement": 0, + "additionalSpellLevelPerIncrement": 0, + "additionalSummonsPerIncrement": 0, + "additionalHPPerIncrement": 0, + "additionalTempHPPerIncrement": 0, + "additionalTargetCellsPerIncrement": 0, + "additionalItemBonus": 0, + "additionalWeaponDie": 0, + "alteredDuration": "None" + }, + "speedType": "Instant", + "speedParameter": 10.0, + "offsetImpactTimeBasedOnDistance": false, + "offsetImpactTimeBasedOnDistanceFactor": 0.1, + "offsetImpactTimePerTarget": 0.0, + "effectParticleParameters": { + "$type": "EffectParticleParameters, Assembly-CSharp", + "casterParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "c61bb30a4b6e80642a36538c6ff1d675", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "casterSelfParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "casterQuickSpellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "targetParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "effectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "effectSubTargetParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "zoneParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "beforeImpactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "impactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectImpactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceParticlePerIndex": "", + "activeEffectSurfaceParticlePerIndexCount": 0, + "emissiveBorderCellStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderCellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderCellEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "f4489c0ea1762ec4dbe7fedbbcf0d4a8", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "3b107035e3bdbc6418aedb674221f5e3", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "forceApplyZoneParticle": false, + "applyEmissionColorOnWeapons": false, + "emissionColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "emissionColorFadeInDuration": 0.0, + "emissionColorFadeOutDuration": 0.0 + }, + "effectAIParameters": { + "$type": "EffectAIParameters, Assembly-CSharp", + "aoeScoreMultiplier": 1.0, + "cooldownForCaster": 0, + "cooldownForBattle": 0, + "sortingScoreMultiplier": 1.0, + "dynamicCooldown": false + }, + "animationMagicEffect": "Animation1", + "lightCounterDispellsEffect": false, + "hideSavingThrowAnimation": false + }, + "delegatedToAction": false, + "surrogateToSpell": null, + "triggeredBySpecialMove": false, + "activationTime": "Action", + "autoActivationRequiredTargetSenseType": "None", + "autoActivationRequiredTargetCreatureTag": "", + "autoActivationPowerTag": "", + "triggeringPower": null, + "copyTargetingFromTriggeringPower": false, + "reactionContext": "None", + "damageTypes": [], + "reactionName": "", + "reactionActingCharacterParamIdx": 0, + "reactionAttackerParamIdx": -1, + "hasCastingFailure": false, + "castingSuccessComputation": "CasterLevel", + "canUseInDialog": false, + "disableIfConditionIsOwned": null, + "disableIfTargetConditionIsOwned": null, + "rechargeRate": "LongRest", + "costPerUse": 1, + "spellcastingFeature": null, + "usesDetermination": "Fixed", + "abilityScoreDetermination": "Explicit", + "usesAbilityScoreName": "Charisma", + "fixedUsesPerRecharge": 1, + "abilityScore": "Intelligence", + "attackHitComputation": "AbilityScore", + "fixedAttackHit": 0, + "abilityScoreBonusToAttack": false, + "proficiencyBonusToAttack": false, + "uniqueInstance": true, + "showCasting": true, + "shortTitleOverride": "", + "overriddenPower": null, + "includeBaseDescription": false, + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "Command", + "description": "Create a wand that can cast Command (I) spell using your Artificer spell attack modifier and save DC.", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "6edc0b78da56b1e4b94c3d7fb6c96dec", + "m_SubObjectName": "Command", + "m_SubObjectType": "UnityEngine.Sprite, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "e90dc523-a327-589e-bc84-4a3a73b789d7", + "contentPack": 9999, + "name": "PowerCreateSpellStoringWandOfCommandSpell" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ItemDefinition/SpellStoringWandOfCommandSpell.json b/Diagnostics/UnfinishedBusinessBlueprints/ItemDefinition/SpellStoringWandOfCommandSpell.json new file mode 100644 index 0000000000..fd8c2a1018 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/ItemDefinition/SpellStoringWandOfCommandSpell.json @@ -0,0 +1,257 @@ +{ + "$type": "ItemDefinition, Assembly-CSharp", + "inDungeonEditor": false, + "merchantCategory": "MagicDevice", + "weight": 0.5, + "slotTypes": [ + "UtilitySlot", + "ContainerSlot" + ], + "slotsWhereActive": [ + "MainHandSlot", + "OffHandSlot", + "UtilitySlot" + ], + "activeOnGround": false, + "destroyedWhenUnequiped": false, + "forceEquip": false, + "forceEquipSlot": "", + "canBeStacked": false, + "stackSize": 10, + "defaultStackCount": -1, + "costs": [ + 0, + 0, + 0, + 0, + 0 + ], + "itemTags": [ + "Wood" + ], + "activeTags": [], + "inactiveTags": [], + "magical": true, + "requiresAttunement": false, + "requiresIdentification": false, + "requiredAttunementClasses": [], + "itemRarity": "Rare", + "incompatibleWithMonkReturnMissile": false, + "staticProperties": [], + "isArmor": false, + "isWeapon": false, + "isAmmunition": false, + "isUsableDevice": true, + "usableDeviceDescription": { + "$type": "UsableDeviceDescription, Assembly-CSharp", + "usage": "Charges", + "chargesCapital": "Fixed", + "chargesCapitalNumber": 6, + "chargesCapitalDie": "D1", + "chargesCapitalBonus": 0, + "rechargeRate": "None", + "rechargeNumber": 1, + "rechargeDie": "D1", + "rechargeBonus": 0, + "outOfChargesConsequence": "Destroy", + "magicAttackBonus": -2, + "saveDC": -2, + "deviceFunctions": [ + { + "$type": "DeviceFunctionDescription, Assembly-CSharp", + "parentUsage": "ByFunction", + "useAffinity": "ChargeCost", + "useAmount": 1, + "rechargeRate": "Dawn", + "durationType": "Instantaneous", + "canOverchargeSpell": false, + "type": "Spell", + "spellDefinition": "Definition:CommandSpell:289ffbc5-ef5c-56b1-b6ba-79d88e236887", + "featureDefinitionPower": null + } + ], + "usableDeviceTags": [], + "onUseParticle": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + } + }, + "isTool": false, + "isMusicalInstrument": false, + "musicalInstrumentDefinition": null, + "isStarterPack": false, + "isContainerItem": false, + "isLightSourceItem": false, + "isFocusItem": true, + "focusItemDefinition": { + "$type": "FocusItemDescription, Assembly-CSharp", + "focusType": "Arcane", + "shownAsFocus": true + }, + "isWealthPile": false, + "isSpellbook": false, + "isDocument": false, + "isFood": false, + "isFactionRelic": false, + "personalityFlagOccurences": [], + "soundEffectDescriptionOverride": { + "$type": "SoundEffectDescription, Assembly-CSharp", + "startEvent": { + "$type": "AK.Wwise.Event, AK.Wwise.Unity.API.WwiseTypes", + "WwiseObjectReference": null, + "idInternal": 0, + "valueGuidInternal": { + "$type": "System.Byte[], mscorlib", + "$value": "" + } + }, + "stopEvent": { + "$type": "AK.Wwise.Event, AK.Wwise.Unity.API.WwiseTypes", + "WwiseObjectReference": null, + "idInternal": 0, + "valueGuidInternal": { + "$type": "System.Byte[], mscorlib", + "$value": "" + } + }, + "startSwitch": { + "$type": "AK.Wwise.Switch, AK.Wwise.Unity.API.WwiseTypes", + "WwiseObjectReference": null, + "groupIdInternal": 0, + "groupGuidInternal": { + "$type": "System.Byte[], mscorlib", + "$value": "" + }, + "idInternal": 0, + "valueGuidInternal": { + "$type": "System.Byte[], mscorlib", + "$value": "" + } + }, + "stopSwitch": { + "$type": "AK.Wwise.Switch, AK.Wwise.Unity.API.WwiseTypes", + "WwiseObjectReference": null, + "groupIdInternal": 0, + "groupGuidInternal": { + "$type": "System.Byte[], mscorlib", + "$value": "" + }, + "idInternal": 0, + "valueGuidInternal": { + "$type": "System.Byte[], mscorlib", + "$value": "" + } + }, + "guiStoreBody": { + "$type": "AK.Wwise.Event, AK.Wwise.Unity.API.WwiseTypes", + "WwiseObjectReference": null, + "idInternal": 0, + "valueGuidInternal": { + "$type": "System.Byte[], mscorlib", + "$value": "" + } + }, + "guiPickBody": { + "$type": "AK.Wwise.Event, AK.Wwise.Unity.API.WwiseTypes", + "WwiseObjectReference": null, + "idInternal": 0, + "valueGuidInternal": { + "$type": "System.Byte[], mscorlib", + "$value": "" + } + }, + "guiStoreOther": { + "$type": "AK.Wwise.Event, AK.Wwise.Unity.API.WwiseTypes", + "WwiseObjectReference": null, + "idInternal": 0, + "valueGuidInternal": { + "$type": "System.Byte[], mscorlib", + "$value": "" + } + }, + "guiPickOther": { + "$type": "AK.Wwise.Event, AK.Wwise.Unity.API.WwiseTypes", + "WwiseObjectReference": null, + "idInternal": 0, + "valueGuidInternal": { + "$type": "System.Byte[], mscorlib", + "$value": "" + } + } + }, + "soundEffectOnHitDescriptionOverride": { + "$type": "SoundEffectOnHitDescription, Assembly-CSharp", + "switchOnHit": { + "$type": "AK.Wwise.Switch, AK.Wwise.Unity.API.WwiseTypes", + "WwiseObjectReference": null, + "groupIdInternal": 0, + "groupGuidInternal": { + "$type": "System.Byte[], mscorlib", + "$value": "" + }, + "idInternal": 0, + "valueGuidInternal": { + "$type": "System.Byte[], mscorlib", + "$value": "" + } + } + }, + "itemPresentation": { + "$type": "ItemPresentation, Assembly-CSharp", + "unidentifiedTitle": "Equipment/&WandSpecialTitle", + "unidentifiedDescription": "Equipment/&WandSpecialDescription", + "overrideSubtype": "None", + "assetReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "scaleFactorWhileWielded": 1.0, + "useArmorAddressableName": false, + "isArmorAddressableNameGenderSpecific": false, + "armorAddressableName": "", + "maleArmorAddressableName": "", + "femaleArmorAddressableName": "", + "useCustomArmorMaterial": false, + "customArmorMaterial": "", + "ignoreCustomArmorMaterialOnCommonClothes": false, + "hasCrownVariationMask": false, + "crownVariationMask": 0, + "sameBehavioursForMaleAndFemale": true, + "maleBodyPartBehaviours": [], + "femaleBodyPartBehaviours": [], + "itemFlags": [], + "serializedVersion": 1 + }, + "clueSuspectPairs": [], + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "Wand of Command", + "description": "This wand allows casting the Command spell using spell casting stats of the Artificer who created it.", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "99f5e6021bff7994bb5b9f6832f8145a", + "m_SubObjectName": "WandOfMagicMissiles", + "m_SubObjectType": "UnityEngine.Sprite, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "252920d8-129e-5ae7-a5fc-6bdccebf1d4f", + "contentPack": 9999, + "name": "SpellStoringWandOfCommandSpell" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpell.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpell.json new file mode 100644 index 0000000000..82888b3d5d --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpell.json @@ -0,0 +1,346 @@ +{ + "$type": "SpellDefinition, Assembly-CSharp", + "spellsBundle": false, + "subspellsList": [], + "compactSubspellsTooltip": false, + "implemented": true, + "schoolOfMagic": "SchoolEnchantment", + "spellLevel": 1, + "ritual": false, + "uniqueInstance": false, + "castingTime": "Action", + "reactionContext": "None", + "ritualCastingTime": "Action", + "requiresConcentration": false, + "effectDescription": { + "$type": "EffectDescription, Assembly-CSharp", + "rangeType": "Distance", + "rangeParameter": 12, + "halfDamageOnAMiss": false, + "hitAffinitiesByTargetTag": [], + "targetType": "IndividualsUnique", + "itemSelectionType": "None", + "targetParameter": 1, + "targetParameter2": 2, + "emissiveBorder": "None", + "emissiveParameter": 1, + "requiresTargetProximity": false, + "targetProximityDistance": 6, + "targetExcludeCaster": false, + "canBePlacedOnCharacter": true, + "affectOnlyGround": false, + "targetFilteringMethod": "CharacterOnly", + "targetFilteringTag": "No", + "requiresVisibilityForPosition": true, + "inviteOptionalAlly": false, + "slotTypes": [], + "recurrentEffect": "No", + "retargetAfterDeath": false, + "retargetActionType": "Bonus", + "poolFilterDiceNumber": 5, + "poolFilterDieType": "D8", + "trapRangeType": "Triggerer", + "targetConditionName": "", + "targetConditionAsset": null, + "targetSide": "Enemy", + "durationType": "Round", + "durationParameter": 0, + "endOfEffect": "EndOfTurn", + "hasSavingThrow": true, + "disableSavingThrowOnAllies": false, + "savingThrowAbility": "Wisdom", + "ignoreCover": true, + "grantedConditionOnSave": null, + "rollSaveOnlyIfRelevantForms": false, + "hasShoveRoll": false, + "createdByCharacter": true, + "difficultyClassComputation": "SpellCastingFeature", + "savingThrowDifficultyAbility": "Wisdom", + "fixedSavingThrowDifficultyClass": 10, + "savingThrowAffinitiesBySense": [], + "savingThrowAffinitiesByFamily": [], + "damageAffinitiesByFamily": [], + "advantageForEnemies": false, + "canBeDispersed": false, + "hasVelocity": false, + "velocityCellsPerRound": 2, + "velocityType": "AwayFromSourceOriginalPosition", + "restrictedCreatureFamilies": [], + "immuneCreatureFamilies": [], + "restrictedCharacterSizes": [], + "hasLimitedEffectPool": false, + "effectPoolAmount": 60, + "effectApplication": "All", + "effectFormFilters": [], + "effectForms": [ + { + "$type": "EffectForm, Assembly-CSharp", + "formType": "Condition", + "addBonusMode": "None", + "applyLevel": "No", + "levelType": "ClassLevel", + "levelMultiplier": 1, + "diceByLevelTable": [], + "createdByCharacter": true, + "createdByCondition": false, + "hasSavingThrow": false, + "savingThrowAffinity": "None", + "dcModifier": 0, + "canSaveToCancel": false, + "saveOccurence": "EndOfTurn", + "conditionForm": { + "$type": "ConditionForm, Assembly-CSharp", + "conditionDefinitionName": "ConditionCommandSpellSelf", + "conditionDefinition": "Definition:ConditionCommandSpellSelf:7b73b84d-697d-5018-9cff-85b0fba12033", + "operation": "Add", + "conditionsList": [], + "applyToSelf": true, + "forceOnSelf": false + }, + "hasFilterId": false, + "filterId": 0 + } + ], + "specialFormsDescription": "", + "effectAdvancement": { + "$type": "EffectAdvancement, Assembly-CSharp", + "effectIncrementMethod": "PerAdditionalSlotLevel", + "incrementMultiplier": 1, + "additionalTargetsPerIncrement": 1, + "additionalSubtargetsPerIncrement": 0, + "additionalDicePerIncrement": 0, + "additionalSpellLevelPerIncrement": 0, + "additionalSummonsPerIncrement": 0, + "additionalHPPerIncrement": 0, + "additionalTempHPPerIncrement": 0, + "additionalTargetCellsPerIncrement": 0, + "additionalItemBonus": 0, + "additionalWeaponDie": 0, + "alteredDuration": "None" + }, + "speedType": "Instant", + "speedParameter": -1.0, + "offsetImpactTimeBasedOnDistance": false, + "offsetImpactTimeBasedOnDistanceFactor": 0.1, + "offsetImpactTimePerTarget": 0.0, + "effectParticleParameters": { + "$type": "EffectParticleParameters, Assembly-CSharp", + "casterParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "81560ac3813217d4d9fd281d5e73c234", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "casterSelfParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "casterQuickSpellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "81560ac3813217d4d9fd281d5e73c234", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "targetParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "effectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "effectSubTargetParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "zoneParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "beforeImpactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "impactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectImpactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceParticlePerIndex": "", + "activeEffectSurfaceParticlePerIndexCount": 0, + "emissiveBorderCellStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderCellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderCellEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "forceApplyZoneParticle": false, + "applyEmissionColorOnWeapons": false, + "emissionColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "emissionColorFadeInDuration": 0.0, + "emissionColorFadeOutDuration": 0.0 + }, + "effectAIParameters": { + "$type": "EffectAIParameters, Assembly-CSharp", + "aoeScoreMultiplier": 1.0, + "cooldownForCaster": 0, + "cooldownForBattle": 0, + "sortingScoreMultiplier": 1.0, + "dynamicCooldown": false + }, + "animationMagicEffect": "Animation0", + "lightCounterDispellsEffect": false, + "hideSavingThrowAnimation": false + }, + "aiParameters": { + "$type": "SpellAIParameters, Assembly-CSharp", + "learnPriority": "Low", + "preparePriority": "Low" + }, + "concentrationAction": "None", + "verboseComponent": true, + "somaticComponent": false, + "materialComponentType": "Mundane", + "specificMaterialComponentTag": "Diamond", + "specificMaterialComponentCostGp": 100, + "specificMaterialComponentConsumed": true, + "terminateOnItemUnequip": false, + "displayConditionDuration": false, + "vocalSpellSemeType": "Attack", + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "Spell/&CommandSpellTitle", + "description": "Spell/&CommandSpellDescription", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "6edc0b78da56b1e4b94c3d7fb6c96dec", + "m_SubObjectName": "Command", + "m_SubObjectType": "UnityEngine.Sprite, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "289ffbc5-ef5c-56b1-b6ba-79d88e236887", + "contentPack": 9999, + "name": "CommandSpell" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/SpellPowerCommandSpell.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/SpellPowerCommandSpell.json new file mode 100644 index 0000000000..b804c5f18b --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/SpellPowerCommandSpell.json @@ -0,0 +1,198 @@ +{ + "$type": "SpellDefinition, Assembly-CSharp", + "spellsBundle": false, + "subspellsList": [ + "Definition:SpellPowerCommandSpellApproach:152fd62b-c5e0-567a-a035-7f4f39023003", + "Definition:SpellPowerCommandSpellFlee:8bd2bff0-c47d-5c51-9c83-82f46e5531bd", + "Definition:SpellPowerCommandSpellGrovel:41423887-4200-5abf-b070-c71f30076690", + "Definition:SpellPowerCommandSpellHalt:22b80e7c-5b05-58a6-94cb-6ff9e7db04bd" + ], + "compactSubspellsTooltip": false, + "implemented": true, + "schoolOfMagic": "SchoolEvocation", + "spellLevel": 0, + "ritual": false, + "uniqueInstance": false, + "castingTime": "Action", + "reactionContext": "None", + "ritualCastingTime": "Action", + "requiresConcentration": false, + "effectDescription": { + "$type": "EffectDescription, Assembly-CSharp", + "rangeType": "Self", + "rangeParameter": 0, + "halfDamageOnAMiss": false, + "hitAffinitiesByTargetTag": [], + "targetType": "Self", + "itemSelectionType": "Equiped", + "targetParameter": 1, + "targetParameter2": 2, + "emissiveBorder": "None", + "emissiveParameter": 1, + "requiresTargetProximity": false, + "targetProximityDistance": 6, + "targetExcludeCaster": false, + "canBePlacedOnCharacter": true, + "affectOnlyGround": false, + "targetFilteringMethod": "AllCharacterAndGadgets", + "targetFilteringTag": "No", + "requiresVisibilityForPosition": true, + "inviteOptionalAlly": false, + "slotTypes": [], + "recurrentEffect": "No", + "retargetAfterDeath": false, + "retargetActionType": "Bonus", + "poolFilterDiceNumber": 5, + "poolFilterDieType": "D8", + "trapRangeType": "Triggerer", + "targetConditionName": "", + "targetConditionAsset": null, + "targetSide": "Enemy", + "durationType": "Instantaneous", + "durationParameter": 1, + "endOfEffect": "EndOfTurn", + "hasSavingThrow": false, + "disableSavingThrowOnAllies": false, + "savingThrowAbility": "Dexterity", + "ignoreCover": false, + "grantedConditionOnSave": null, + "rollSaveOnlyIfRelevantForms": false, + "hasShoveRoll": false, + "createdByCharacter": false, + "difficultyClassComputation": "SpellCastingFeature", + "savingThrowDifficultyAbility": "Wisdom", + "fixedSavingThrowDifficultyClass": 15, + "savingThrowAffinitiesBySense": [], + "savingThrowAffinitiesByFamily": [], + "damageAffinitiesByFamily": [], + "advantageForEnemies": false, + "canBeDispersed": false, + "hasVelocity": false, + "velocityCellsPerRound": 2, + "velocityType": "AwayFromSourceOriginalPosition", + "restrictedCreatureFamilies": [], + "immuneCreatureFamilies": [], + "restrictedCharacterSizes": [], + "hasLimitedEffectPool": false, + "effectPoolAmount": 60, + "effectApplication": "All", + "effectFormFilters": [], + "effectForms": [], + "specialFormsDescription": "", + "effectAdvancement": { + "$type": "EffectAdvancement, Assembly-CSharp", + "effectIncrementMethod": "None", + "incrementMultiplier": 1, + "additionalTargetsPerIncrement": 0, + "additionalSubtargetsPerIncrement": 0, + "additionalDicePerIncrement": 0, + "additionalSpellLevelPerIncrement": 0, + "additionalSummonsPerIncrement": 0, + "additionalHPPerIncrement": 0, + "additionalTempHPPerIncrement": 0, + "additionalTargetCellsPerIncrement": 0, + "additionalItemBonus": 0, + "additionalWeaponDie": 0, + "alteredDuration": "None" + }, + "speedType": "Instant", + "speedParameter": 10.0, + "offsetImpactTimeBasedOnDistance": false, + "offsetImpactTimeBasedOnDistanceFactor": 0.1, + "offsetImpactTimePerTarget": 0.0, + "effectParticleParameters": { + "$type": "EffectParticleParameters, Assembly-CSharp", + "casterParticleReference": null, + "casterSelfParticleReference": null, + "casterQuickSpellParticleReference": null, + "targetParticleReference": null, + "effectParticleReference": null, + "effectSubTargetParticleReference": null, + "zoneParticleReference": null, + "beforeImpactParticleReference": null, + "impactParticleReference": null, + "activeEffectImpactParticleReference": null, + "activeEffectCellStartParticleReference": null, + "activeEffectCellParticleReference": null, + "activeEffectCellEndParticleReference": null, + "activeEffectSurfaceStartParticleReference": null, + "activeEffectSurfaceParticleReference": null, + "activeEffectSurfaceEndParticleReference": null, + "activeEffectSurfaceParticlePerIndex": "", + "activeEffectSurfaceParticlePerIndexCount": 0, + "emissiveBorderCellStartParticleReference": null, + "emissiveBorderCellParticleReference": null, + "emissiveBorderCellEndParticleReference": null, + "emissiveBorderSurfaceStartParticleReference": null, + "emissiveBorderSurfaceParticleReference": null, + "emissiveBorderSurfaceEndParticleReference": null, + "conditionStartParticleReference": null, + "conditionParticleReference": null, + "conditionEndParticleReference": null, + "forceApplyZoneParticle": false, + "applyEmissionColorOnWeapons": false, + "emissionColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "emissionColorFadeInDuration": 0.0, + "emissionColorFadeOutDuration": 0.0 + }, + "effectAIParameters": { + "$type": "EffectAIParameters, Assembly-CSharp", + "aoeScoreMultiplier": 1.0, + "cooldownForCaster": 0, + "cooldownForBattle": 0, + "sortingScoreMultiplier": 1.0, + "dynamicCooldown": false + }, + "animationMagicEffect": "Animation0", + "lightCounterDispellsEffect": false, + "hideSavingThrowAnimation": false + }, + "aiParameters": { + "$type": "SpellAIParameters, Assembly-CSharp", + "learnPriority": "Low", + "preparePriority": "Low" + }, + "concentrationAction": "None", + "verboseComponent": true, + "somaticComponent": true, + "materialComponentType": "Mundane", + "specificMaterialComponentTag": "Diamond", + "specificMaterialComponentCostGp": 100, + "specificMaterialComponentConsumed": true, + "terminateOnItemUnequip": false, + "displayConditionDuration": false, + "vocalSpellSemeType": "None", + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": true, + "title": "Feature/&NoContentTitle", + "description": "Feature/&NoContentTitle", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "af1672a4-ce02-5b90-a2ee-e34669a559e0", + "contentPack": 9999, + "name": "SpellPowerCommandSpell" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/SpellPowerCommandSpellApproach.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/SpellPowerCommandSpellApproach.json new file mode 100644 index 0000000000..304ea03518 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/SpellPowerCommandSpellApproach.json @@ -0,0 +1,193 @@ +{ + "$type": "SpellDefinition, Assembly-CSharp", + "spellsBundle": false, + "subspellsList": [], + "compactSubspellsTooltip": false, + "implemented": true, + "schoolOfMagic": "SchoolEvocation", + "spellLevel": 0, + "ritual": false, + "uniqueInstance": false, + "castingTime": "Action", + "reactionContext": "None", + "ritualCastingTime": "Action", + "requiresConcentration": false, + "effectDescription": { + "$type": "EffectDescription, Assembly-CSharp", + "rangeType": "Self", + "rangeParameter": 0, + "halfDamageOnAMiss": false, + "hitAffinitiesByTargetTag": [], + "targetType": "Self", + "itemSelectionType": "Equiped", + "targetParameter": 1, + "targetParameter2": 2, + "emissiveBorder": "None", + "emissiveParameter": 1, + "requiresTargetProximity": false, + "targetProximityDistance": 6, + "targetExcludeCaster": false, + "canBePlacedOnCharacter": true, + "affectOnlyGround": false, + "targetFilteringMethod": "AllCharacterAndGadgets", + "targetFilteringTag": "No", + "requiresVisibilityForPosition": true, + "inviteOptionalAlly": false, + "slotTypes": [], + "recurrentEffect": "No", + "retargetAfterDeath": false, + "retargetActionType": "Bonus", + "poolFilterDiceNumber": 5, + "poolFilterDieType": "D8", + "trapRangeType": "Triggerer", + "targetConditionName": "", + "targetConditionAsset": null, + "targetSide": "Enemy", + "durationType": "Instantaneous", + "durationParameter": 1, + "endOfEffect": "EndOfTurn", + "hasSavingThrow": false, + "disableSavingThrowOnAllies": false, + "savingThrowAbility": "Dexterity", + "ignoreCover": false, + "grantedConditionOnSave": null, + "rollSaveOnlyIfRelevantForms": false, + "hasShoveRoll": false, + "createdByCharacter": false, + "difficultyClassComputation": "SpellCastingFeature", + "savingThrowDifficultyAbility": "Wisdom", + "fixedSavingThrowDifficultyClass": 15, + "savingThrowAffinitiesBySense": [], + "savingThrowAffinitiesByFamily": [], + "damageAffinitiesByFamily": [], + "advantageForEnemies": false, + "canBeDispersed": false, + "hasVelocity": false, + "velocityCellsPerRound": 2, + "velocityType": "AwayFromSourceOriginalPosition", + "restrictedCreatureFamilies": [], + "immuneCreatureFamilies": [], + "restrictedCharacterSizes": [], + "hasLimitedEffectPool": false, + "effectPoolAmount": 60, + "effectApplication": "All", + "effectFormFilters": [], + "effectForms": [], + "specialFormsDescription": "", + "effectAdvancement": { + "$type": "EffectAdvancement, Assembly-CSharp", + "effectIncrementMethod": "None", + "incrementMultiplier": 1, + "additionalTargetsPerIncrement": 0, + "additionalSubtargetsPerIncrement": 0, + "additionalDicePerIncrement": 0, + "additionalSpellLevelPerIncrement": 0, + "additionalSummonsPerIncrement": 0, + "additionalHPPerIncrement": 0, + "additionalTempHPPerIncrement": 0, + "additionalTargetCellsPerIncrement": 0, + "additionalItemBonus": 0, + "additionalWeaponDie": 0, + "alteredDuration": "None" + }, + "speedType": "Instant", + "speedParameter": 10.0, + "offsetImpactTimeBasedOnDistance": false, + "offsetImpactTimeBasedOnDistanceFactor": 0.1, + "offsetImpactTimePerTarget": 0.0, + "effectParticleParameters": { + "$type": "EffectParticleParameters, Assembly-CSharp", + "casterParticleReference": null, + "casterSelfParticleReference": null, + "casterQuickSpellParticleReference": null, + "targetParticleReference": null, + "effectParticleReference": null, + "effectSubTargetParticleReference": null, + "zoneParticleReference": null, + "beforeImpactParticleReference": null, + "impactParticleReference": null, + "activeEffectImpactParticleReference": null, + "activeEffectCellStartParticleReference": null, + "activeEffectCellParticleReference": null, + "activeEffectCellEndParticleReference": null, + "activeEffectSurfaceStartParticleReference": null, + "activeEffectSurfaceParticleReference": null, + "activeEffectSurfaceEndParticleReference": null, + "activeEffectSurfaceParticlePerIndex": "", + "activeEffectSurfaceParticlePerIndexCount": 0, + "emissiveBorderCellStartParticleReference": null, + "emissiveBorderCellParticleReference": null, + "emissiveBorderCellEndParticleReference": null, + "emissiveBorderSurfaceStartParticleReference": null, + "emissiveBorderSurfaceParticleReference": null, + "emissiveBorderSurfaceEndParticleReference": null, + "conditionStartParticleReference": null, + "conditionParticleReference": null, + "conditionEndParticleReference": null, + "forceApplyZoneParticle": false, + "applyEmissionColorOnWeapons": false, + "emissionColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "emissionColorFadeInDuration": 0.0, + "emissionColorFadeOutDuration": 0.0 + }, + "effectAIParameters": { + "$type": "EffectAIParameters, Assembly-CSharp", + "aoeScoreMultiplier": 1.0, + "cooldownForCaster": 0, + "cooldownForBattle": 0, + "sortingScoreMultiplier": 1.0, + "dynamicCooldown": false + }, + "animationMagicEffect": "Animation0", + "lightCounterDispellsEffect": false, + "hideSavingThrowAnimation": false + }, + "aiParameters": { + "$type": "SpellAIParameters, Assembly-CSharp", + "learnPriority": "Low", + "preparePriority": "Low" + }, + "concentrationAction": "None", + "verboseComponent": true, + "somaticComponent": true, + "materialComponentType": "Mundane", + "specificMaterialComponentTag": "Diamond", + "specificMaterialComponentCostGp": 100, + "specificMaterialComponentConsumed": true, + "terminateOnItemUnequip": false, + "displayConditionDuration": false, + "vocalSpellSemeType": "None", + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "Feature/&PowerCommandSpellApproachTitle", + "description": "Feature/&PowerCommandSpellApproachDescription", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "152fd62b-c5e0-567a-a035-7f4f39023003", + "contentPack": 9999, + "name": "SpellPowerCommandSpellApproach" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/SpellPowerCommandSpellFlee.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/SpellPowerCommandSpellFlee.json new file mode 100644 index 0000000000..d25ee9d8b5 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/SpellPowerCommandSpellFlee.json @@ -0,0 +1,193 @@ +{ + "$type": "SpellDefinition, Assembly-CSharp", + "spellsBundle": false, + "subspellsList": [], + "compactSubspellsTooltip": false, + "implemented": true, + "schoolOfMagic": "SchoolEvocation", + "spellLevel": 0, + "ritual": false, + "uniqueInstance": false, + "castingTime": "Action", + "reactionContext": "None", + "ritualCastingTime": "Action", + "requiresConcentration": false, + "effectDescription": { + "$type": "EffectDescription, Assembly-CSharp", + "rangeType": "Self", + "rangeParameter": 0, + "halfDamageOnAMiss": false, + "hitAffinitiesByTargetTag": [], + "targetType": "Self", + "itemSelectionType": "Equiped", + "targetParameter": 1, + "targetParameter2": 2, + "emissiveBorder": "None", + "emissiveParameter": 1, + "requiresTargetProximity": false, + "targetProximityDistance": 6, + "targetExcludeCaster": false, + "canBePlacedOnCharacter": true, + "affectOnlyGround": false, + "targetFilteringMethod": "AllCharacterAndGadgets", + "targetFilteringTag": "No", + "requiresVisibilityForPosition": true, + "inviteOptionalAlly": false, + "slotTypes": [], + "recurrentEffect": "No", + "retargetAfterDeath": false, + "retargetActionType": "Bonus", + "poolFilterDiceNumber": 5, + "poolFilterDieType": "D8", + "trapRangeType": "Triggerer", + "targetConditionName": "", + "targetConditionAsset": null, + "targetSide": "Enemy", + "durationType": "Instantaneous", + "durationParameter": 1, + "endOfEffect": "EndOfTurn", + "hasSavingThrow": false, + "disableSavingThrowOnAllies": false, + "savingThrowAbility": "Dexterity", + "ignoreCover": false, + "grantedConditionOnSave": null, + "rollSaveOnlyIfRelevantForms": false, + "hasShoveRoll": false, + "createdByCharacter": false, + "difficultyClassComputation": "SpellCastingFeature", + "savingThrowDifficultyAbility": "Wisdom", + "fixedSavingThrowDifficultyClass": 15, + "savingThrowAffinitiesBySense": [], + "savingThrowAffinitiesByFamily": [], + "damageAffinitiesByFamily": [], + "advantageForEnemies": false, + "canBeDispersed": false, + "hasVelocity": false, + "velocityCellsPerRound": 2, + "velocityType": "AwayFromSourceOriginalPosition", + "restrictedCreatureFamilies": [], + "immuneCreatureFamilies": [], + "restrictedCharacterSizes": [], + "hasLimitedEffectPool": false, + "effectPoolAmount": 60, + "effectApplication": "All", + "effectFormFilters": [], + "effectForms": [], + "specialFormsDescription": "", + "effectAdvancement": { + "$type": "EffectAdvancement, Assembly-CSharp", + "effectIncrementMethod": "None", + "incrementMultiplier": 1, + "additionalTargetsPerIncrement": 0, + "additionalSubtargetsPerIncrement": 0, + "additionalDicePerIncrement": 0, + "additionalSpellLevelPerIncrement": 0, + "additionalSummonsPerIncrement": 0, + "additionalHPPerIncrement": 0, + "additionalTempHPPerIncrement": 0, + "additionalTargetCellsPerIncrement": 0, + "additionalItemBonus": 0, + "additionalWeaponDie": 0, + "alteredDuration": "None" + }, + "speedType": "Instant", + "speedParameter": 10.0, + "offsetImpactTimeBasedOnDistance": false, + "offsetImpactTimeBasedOnDistanceFactor": 0.1, + "offsetImpactTimePerTarget": 0.0, + "effectParticleParameters": { + "$type": "EffectParticleParameters, Assembly-CSharp", + "casterParticleReference": null, + "casterSelfParticleReference": null, + "casterQuickSpellParticleReference": null, + "targetParticleReference": null, + "effectParticleReference": null, + "effectSubTargetParticleReference": null, + "zoneParticleReference": null, + "beforeImpactParticleReference": null, + "impactParticleReference": null, + "activeEffectImpactParticleReference": null, + "activeEffectCellStartParticleReference": null, + "activeEffectCellParticleReference": null, + "activeEffectCellEndParticleReference": null, + "activeEffectSurfaceStartParticleReference": null, + "activeEffectSurfaceParticleReference": null, + "activeEffectSurfaceEndParticleReference": null, + "activeEffectSurfaceParticlePerIndex": "", + "activeEffectSurfaceParticlePerIndexCount": 0, + "emissiveBorderCellStartParticleReference": null, + "emissiveBorderCellParticleReference": null, + "emissiveBorderCellEndParticleReference": null, + "emissiveBorderSurfaceStartParticleReference": null, + "emissiveBorderSurfaceParticleReference": null, + "emissiveBorderSurfaceEndParticleReference": null, + "conditionStartParticleReference": null, + "conditionParticleReference": null, + "conditionEndParticleReference": null, + "forceApplyZoneParticle": false, + "applyEmissionColorOnWeapons": false, + "emissionColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "emissionColorFadeInDuration": 0.0, + "emissionColorFadeOutDuration": 0.0 + }, + "effectAIParameters": { + "$type": "EffectAIParameters, Assembly-CSharp", + "aoeScoreMultiplier": 1.0, + "cooldownForCaster": 0, + "cooldownForBattle": 0, + "sortingScoreMultiplier": 1.0, + "dynamicCooldown": false + }, + "animationMagicEffect": "Animation0", + "lightCounterDispellsEffect": false, + "hideSavingThrowAnimation": false + }, + "aiParameters": { + "$type": "SpellAIParameters, Assembly-CSharp", + "learnPriority": "Low", + "preparePriority": "Low" + }, + "concentrationAction": "None", + "verboseComponent": true, + "somaticComponent": true, + "materialComponentType": "Mundane", + "specificMaterialComponentTag": "Diamond", + "specificMaterialComponentCostGp": 100, + "specificMaterialComponentConsumed": true, + "terminateOnItemUnequip": false, + "displayConditionDuration": false, + "vocalSpellSemeType": "None", + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "Feature/&PowerCommandSpellFleeTitle", + "description": "Feature/&PowerCommandSpellFleeDescription", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "8bd2bff0-c47d-5c51-9c83-82f46e5531bd", + "contentPack": 9999, + "name": "SpellPowerCommandSpellFlee" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/SpellPowerCommandSpellGrovel.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/SpellPowerCommandSpellGrovel.json new file mode 100644 index 0000000000..067695ae67 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/SpellPowerCommandSpellGrovel.json @@ -0,0 +1,193 @@ +{ + "$type": "SpellDefinition, Assembly-CSharp", + "spellsBundle": false, + "subspellsList": [], + "compactSubspellsTooltip": false, + "implemented": true, + "schoolOfMagic": "SchoolEvocation", + "spellLevel": 0, + "ritual": false, + "uniqueInstance": false, + "castingTime": "Action", + "reactionContext": "None", + "ritualCastingTime": "Action", + "requiresConcentration": false, + "effectDescription": { + "$type": "EffectDescription, Assembly-CSharp", + "rangeType": "Self", + "rangeParameter": 0, + "halfDamageOnAMiss": false, + "hitAffinitiesByTargetTag": [], + "targetType": "Self", + "itemSelectionType": "Equiped", + "targetParameter": 1, + "targetParameter2": 2, + "emissiveBorder": "None", + "emissiveParameter": 1, + "requiresTargetProximity": false, + "targetProximityDistance": 6, + "targetExcludeCaster": false, + "canBePlacedOnCharacter": true, + "affectOnlyGround": false, + "targetFilteringMethod": "AllCharacterAndGadgets", + "targetFilteringTag": "No", + "requiresVisibilityForPosition": true, + "inviteOptionalAlly": false, + "slotTypes": [], + "recurrentEffect": "No", + "retargetAfterDeath": false, + "retargetActionType": "Bonus", + "poolFilterDiceNumber": 5, + "poolFilterDieType": "D8", + "trapRangeType": "Triggerer", + "targetConditionName": "", + "targetConditionAsset": null, + "targetSide": "Enemy", + "durationType": "Instantaneous", + "durationParameter": 1, + "endOfEffect": "EndOfTurn", + "hasSavingThrow": false, + "disableSavingThrowOnAllies": false, + "savingThrowAbility": "Dexterity", + "ignoreCover": false, + "grantedConditionOnSave": null, + "rollSaveOnlyIfRelevantForms": false, + "hasShoveRoll": false, + "createdByCharacter": false, + "difficultyClassComputation": "SpellCastingFeature", + "savingThrowDifficultyAbility": "Wisdom", + "fixedSavingThrowDifficultyClass": 15, + "savingThrowAffinitiesBySense": [], + "savingThrowAffinitiesByFamily": [], + "damageAffinitiesByFamily": [], + "advantageForEnemies": false, + "canBeDispersed": false, + "hasVelocity": false, + "velocityCellsPerRound": 2, + "velocityType": "AwayFromSourceOriginalPosition", + "restrictedCreatureFamilies": [], + "immuneCreatureFamilies": [], + "restrictedCharacterSizes": [], + "hasLimitedEffectPool": false, + "effectPoolAmount": 60, + "effectApplication": "All", + "effectFormFilters": [], + "effectForms": [], + "specialFormsDescription": "", + "effectAdvancement": { + "$type": "EffectAdvancement, Assembly-CSharp", + "effectIncrementMethod": "None", + "incrementMultiplier": 1, + "additionalTargetsPerIncrement": 0, + "additionalSubtargetsPerIncrement": 0, + "additionalDicePerIncrement": 0, + "additionalSpellLevelPerIncrement": 0, + "additionalSummonsPerIncrement": 0, + "additionalHPPerIncrement": 0, + "additionalTempHPPerIncrement": 0, + "additionalTargetCellsPerIncrement": 0, + "additionalItemBonus": 0, + "additionalWeaponDie": 0, + "alteredDuration": "None" + }, + "speedType": "Instant", + "speedParameter": 10.0, + "offsetImpactTimeBasedOnDistance": false, + "offsetImpactTimeBasedOnDistanceFactor": 0.1, + "offsetImpactTimePerTarget": 0.0, + "effectParticleParameters": { + "$type": "EffectParticleParameters, Assembly-CSharp", + "casterParticleReference": null, + "casterSelfParticleReference": null, + "casterQuickSpellParticleReference": null, + "targetParticleReference": null, + "effectParticleReference": null, + "effectSubTargetParticleReference": null, + "zoneParticleReference": null, + "beforeImpactParticleReference": null, + "impactParticleReference": null, + "activeEffectImpactParticleReference": null, + "activeEffectCellStartParticleReference": null, + "activeEffectCellParticleReference": null, + "activeEffectCellEndParticleReference": null, + "activeEffectSurfaceStartParticleReference": null, + "activeEffectSurfaceParticleReference": null, + "activeEffectSurfaceEndParticleReference": null, + "activeEffectSurfaceParticlePerIndex": "", + "activeEffectSurfaceParticlePerIndexCount": 0, + "emissiveBorderCellStartParticleReference": null, + "emissiveBorderCellParticleReference": null, + "emissiveBorderCellEndParticleReference": null, + "emissiveBorderSurfaceStartParticleReference": null, + "emissiveBorderSurfaceParticleReference": null, + "emissiveBorderSurfaceEndParticleReference": null, + "conditionStartParticleReference": null, + "conditionParticleReference": null, + "conditionEndParticleReference": null, + "forceApplyZoneParticle": false, + "applyEmissionColorOnWeapons": false, + "emissionColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "emissionColorFadeInDuration": 0.0, + "emissionColorFadeOutDuration": 0.0 + }, + "effectAIParameters": { + "$type": "EffectAIParameters, Assembly-CSharp", + "aoeScoreMultiplier": 1.0, + "cooldownForCaster": 0, + "cooldownForBattle": 0, + "sortingScoreMultiplier": 1.0, + "dynamicCooldown": false + }, + "animationMagicEffect": "Animation0", + "lightCounterDispellsEffect": false, + "hideSavingThrowAnimation": false + }, + "aiParameters": { + "$type": "SpellAIParameters, Assembly-CSharp", + "learnPriority": "Low", + "preparePriority": "Low" + }, + "concentrationAction": "None", + "verboseComponent": true, + "somaticComponent": true, + "materialComponentType": "Mundane", + "specificMaterialComponentTag": "Diamond", + "specificMaterialComponentCostGp": 100, + "specificMaterialComponentConsumed": true, + "terminateOnItemUnequip": false, + "displayConditionDuration": false, + "vocalSpellSemeType": "None", + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "Feature/&PowerCommandSpellGrovelTitle", + "description": "Feature/&PowerCommandSpellGrovelDescription", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "41423887-4200-5abf-b070-c71f30076690", + "contentPack": 9999, + "name": "SpellPowerCommandSpellGrovel" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/SpellPowerCommandSpellHalt.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/SpellPowerCommandSpellHalt.json new file mode 100644 index 0000000000..3352ac2c11 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/SpellPowerCommandSpellHalt.json @@ -0,0 +1,193 @@ +{ + "$type": "SpellDefinition, Assembly-CSharp", + "spellsBundle": false, + "subspellsList": [], + "compactSubspellsTooltip": false, + "implemented": true, + "schoolOfMagic": "SchoolEvocation", + "spellLevel": 0, + "ritual": false, + "uniqueInstance": false, + "castingTime": "Action", + "reactionContext": "None", + "ritualCastingTime": "Action", + "requiresConcentration": false, + "effectDescription": { + "$type": "EffectDescription, Assembly-CSharp", + "rangeType": "Self", + "rangeParameter": 0, + "halfDamageOnAMiss": false, + "hitAffinitiesByTargetTag": [], + "targetType": "Self", + "itemSelectionType": "Equiped", + "targetParameter": 1, + "targetParameter2": 2, + "emissiveBorder": "None", + "emissiveParameter": 1, + "requiresTargetProximity": false, + "targetProximityDistance": 6, + "targetExcludeCaster": false, + "canBePlacedOnCharacter": true, + "affectOnlyGround": false, + "targetFilteringMethod": "AllCharacterAndGadgets", + "targetFilteringTag": "No", + "requiresVisibilityForPosition": true, + "inviteOptionalAlly": false, + "slotTypes": [], + "recurrentEffect": "No", + "retargetAfterDeath": false, + "retargetActionType": "Bonus", + "poolFilterDiceNumber": 5, + "poolFilterDieType": "D8", + "trapRangeType": "Triggerer", + "targetConditionName": "", + "targetConditionAsset": null, + "targetSide": "Enemy", + "durationType": "Instantaneous", + "durationParameter": 1, + "endOfEffect": "EndOfTurn", + "hasSavingThrow": false, + "disableSavingThrowOnAllies": false, + "savingThrowAbility": "Dexterity", + "ignoreCover": false, + "grantedConditionOnSave": null, + "rollSaveOnlyIfRelevantForms": false, + "hasShoveRoll": false, + "createdByCharacter": false, + "difficultyClassComputation": "SpellCastingFeature", + "savingThrowDifficultyAbility": "Wisdom", + "fixedSavingThrowDifficultyClass": 15, + "savingThrowAffinitiesBySense": [], + "savingThrowAffinitiesByFamily": [], + "damageAffinitiesByFamily": [], + "advantageForEnemies": false, + "canBeDispersed": false, + "hasVelocity": false, + "velocityCellsPerRound": 2, + "velocityType": "AwayFromSourceOriginalPosition", + "restrictedCreatureFamilies": [], + "immuneCreatureFamilies": [], + "restrictedCharacterSizes": [], + "hasLimitedEffectPool": false, + "effectPoolAmount": 60, + "effectApplication": "All", + "effectFormFilters": [], + "effectForms": [], + "specialFormsDescription": "", + "effectAdvancement": { + "$type": "EffectAdvancement, Assembly-CSharp", + "effectIncrementMethod": "None", + "incrementMultiplier": 1, + "additionalTargetsPerIncrement": 0, + "additionalSubtargetsPerIncrement": 0, + "additionalDicePerIncrement": 0, + "additionalSpellLevelPerIncrement": 0, + "additionalSummonsPerIncrement": 0, + "additionalHPPerIncrement": 0, + "additionalTempHPPerIncrement": 0, + "additionalTargetCellsPerIncrement": 0, + "additionalItemBonus": 0, + "additionalWeaponDie": 0, + "alteredDuration": "None" + }, + "speedType": "Instant", + "speedParameter": 10.0, + "offsetImpactTimeBasedOnDistance": false, + "offsetImpactTimeBasedOnDistanceFactor": 0.1, + "offsetImpactTimePerTarget": 0.0, + "effectParticleParameters": { + "$type": "EffectParticleParameters, Assembly-CSharp", + "casterParticleReference": null, + "casterSelfParticleReference": null, + "casterQuickSpellParticleReference": null, + "targetParticleReference": null, + "effectParticleReference": null, + "effectSubTargetParticleReference": null, + "zoneParticleReference": null, + "beforeImpactParticleReference": null, + "impactParticleReference": null, + "activeEffectImpactParticleReference": null, + "activeEffectCellStartParticleReference": null, + "activeEffectCellParticleReference": null, + "activeEffectCellEndParticleReference": null, + "activeEffectSurfaceStartParticleReference": null, + "activeEffectSurfaceParticleReference": null, + "activeEffectSurfaceEndParticleReference": null, + "activeEffectSurfaceParticlePerIndex": "", + "activeEffectSurfaceParticlePerIndexCount": 0, + "emissiveBorderCellStartParticleReference": null, + "emissiveBorderCellParticleReference": null, + "emissiveBorderCellEndParticleReference": null, + "emissiveBorderSurfaceStartParticleReference": null, + "emissiveBorderSurfaceParticleReference": null, + "emissiveBorderSurfaceEndParticleReference": null, + "conditionStartParticleReference": null, + "conditionParticleReference": null, + "conditionEndParticleReference": null, + "forceApplyZoneParticle": false, + "applyEmissionColorOnWeapons": false, + "emissionColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "emissionColorFadeInDuration": 0.0, + "emissionColorFadeOutDuration": 0.0 + }, + "effectAIParameters": { + "$type": "EffectAIParameters, Assembly-CSharp", + "aoeScoreMultiplier": 1.0, + "cooldownForCaster": 0, + "cooldownForBattle": 0, + "sortingScoreMultiplier": 1.0, + "dynamicCooldown": false + }, + "animationMagicEffect": "Animation0", + "lightCounterDispellsEffect": false, + "hideSavingThrowAnimation": false + }, + "aiParameters": { + "$type": "SpellAIParameters, Assembly-CSharp", + "learnPriority": "Low", + "preparePriority": "Low" + }, + "concentrationAction": "None", + "verboseComponent": true, + "somaticComponent": true, + "materialComponentType": "Mundane", + "specificMaterialComponentTag": "Diamond", + "specificMaterialComponentCostGp": 100, + "specificMaterialComponentConsumed": true, + "terminateOnItemUnequip": false, + "displayConditionDuration": false, + "vocalSpellSemeType": "None", + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "Feature/&PowerCommandSpellHaltTitle", + "description": "Feature/&PowerCommandSpellHaltDescription", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "22b80e7c-5b05-58a6-94cb-6ff9e7db04bd", + "contentPack": 9999, + "name": "SpellPowerCommandSpellHalt" +} \ No newline at end of file diff --git a/Documentation/Spells.md b/Documentation/Spells.md index bba88dce5b..e6c69214d1 100644 --- a/Documentation/Spells.md +++ b/Documentation/Spells.md @@ -231,852 +231,861 @@ You hurl a 4-inch-diameter sphere of energy at a creature that you can see withi Spray a luminous cone that briefly blinds your enemies. Roll 6d10: the total is how many hit points of creatures this spell can affect. -# 58. - Comprehend Languages (V,S) level 1 Divination [SOL] +# 58. - Command (V) level 1 Enchantment [UB] + +You speak a one-word command to a creature you can see within range. The target must succeed on a Wisdom saving throw or follow the command on its next turn. The spell has no effect if the target is undead, if it doesn't understand your language, or if your command is directly harmful to it. Some typical commands and their effects follow. You might issue a command other than one described here. If you do so, the DM determines how the target behaves. If the target can't follow your command, the spell ends. +• Approach: The target moves toward you by the shortest and most direct route, ending its turn if it moves within 5 feet of you. +• Flee: The target spends its turn moving away from you by the fastest available means. +• Grovel: The target falls prone and then ends its turn. +• Halt: The target doesn't move and takes no actions. A flying creature stays aloft, provided that it is able to do so. If it must move to stay aloft, it flies the minimum distance needed to remain in the air. +When you cast this spell using a spell slot of 2nd level or higher, you may target an additional creature within range for each slot level above 2nd. + +# 59. - Comprehend Languages (V,S) level 1 Divination [SOL] For the duration of the spell, you understand the literal meaning of any spoken words that you hear. -# 59. - Cure Wounds (V,S) level 1 Evocation [SOL] +# 60. - Cure Wounds (V,S) level 1 Evocation [SOL] Heal an ally by touch. -# 60. - Detect Evil and Good (V,S) level 1 Divination [Concentration] [SOL] +# 61. - Detect Evil and Good (V,S) level 1 Divination [Concentration] [SOL] Detect nearby creatures of evil or good nature. -# 61. - Detect Magic (V,S) level 1 Divination [Concentration] [SOL] +# 62. - Detect Magic (V,S) level 1 Divination [Concentration] [SOL] Detect nearby magic objects or creatures. -# 62. - Detect Poison and Disease (V,S) level 1 Divination [Concentration] [SOL] +# 63. - Detect Poison and Disease (V,S) level 1 Divination [Concentration] [SOL] TMP For the duration you sense the presence and location of poisonous creatures and diseases within 6 cells of you. -# 63. - Dissonant Whispers (V) level 1 Enchantment [UB] +# 64. - Dissonant Whispers (V) level 1 Enchantment [UB] You whisper a discordant melody that only one creature of your choice within range can hear, wracking it with terrible pain. The target must make a Wisdom saving throw. On a failed save, it takes 3d6 psychic damage and must immediately use its reaction, if available, to move as far as its speed allows away from you. The creature doesn't move into obviously dangerous ground, such as a fire or a pit. On a successful save, the target takes half as much damage and doesn't have to move away. When you cast this spell using a spell slot of 2nd level or higher, the damage increases by 1d6 for each slot level above 1st. -# 64. - Divine Favor (V,S) level 1 Evocation [Concentration] [SOL] +# 65. - Divine Favor (V,S) level 1 Evocation [Concentration] [SOL] Gain additional radiant damage for a limited time. -# 65. - *Earth Tremor* © (V,S) level 1 Evocation [UB] +# 66. - *Earth Tremor* © (V,S) level 1 Evocation [UB] You strike the ground and unleash a tremor of seismic force, hurling up earth, rock, and sand. -# 66. - *Ensnaring Strike* © (V) level 1 Conjuration [Concentration] [UB] +# 67. - *Ensnaring Strike* © (V) level 1 Conjuration [Concentration] [UB] The next time you hit a creature with a weapon attack before this spell ends, a writhing mass of thorny vines appears at the point of impact, and the target must succeed on a Strength saving throw or be restrained by the magical vines until the spell ends.While restrained by this spell, the target takes 1d6 piercing damage at the start of each of its turns. A creature restrained by the vines can use its action to make a Strength check against your spell save DC. -# 67. - Entangle (V,S) level 1 Conjuration [Concentration] [SOL] +# 68. - Entangle (V,S) level 1 Conjuration [Concentration] [SOL] Creatures in a four-cell square area are restrained if they fail a STR saving throw -# 68. - Expeditious Retreat (V,S) level 1 Transmutation [Concentration] [SOL] +# 69. - Expeditious Retreat (V,S) level 1 Transmutation [Concentration] [SOL] Gain movement points and become able to dash as a bonus action for a limited time. -# 69. - Faerie Fire (V) level 1 Evocation [Concentration] [SOL] +# 70. - Faerie Fire (V) level 1 Evocation [Concentration] [SOL] Highlight creatures to give advantage to anyone attacking them. -# 70. - False Life (V,S) level 1 Necromancy [SOL] +# 71. - False Life (V,S) level 1 Necromancy [SOL] Gain a few temporary hit points for a limited time. -# 71. - Feather Fall (V) level 1 Transmutation [SOL] +# 72. - Feather Fall (V) level 1 Transmutation [SOL] Provide a safe landing when you or an ally falls. -# 72. - *Find Familiar* © (V,S) level 1 Conjuration [UB] +# 73. - *Find Familiar* © (V,S) level 1 Conjuration [UB] You gain the service of a familiar. The familiar can use the help action, and you can cast any touch or melee hit spell through the familiar. -# 73. - Fog Cloud (V,S) level 1 Conjuration [Concentration] [SOL] +# 74. - Fog Cloud (V,S) level 1 Conjuration [Concentration] [SOL] Generate a sphere of thick fog for a limited time. The area is heavily obscured, penalizing creatures inside it that rely on sight. -# 74. - *Gift of Alacrity* © (V,S) level 1 Divination [UB] +# 75. - *Gift of Alacrity* © (V,S) level 1 Divination [UB] You touch a willing creature. For the duration, the target can add 1d8 to its initiative rolls. -# 75. - Goodberry (V,S) level 1 Transmutation [SOL] +# 76. - Goodberry (V,S) level 1 Transmutation [SOL] Creates 10 berries infused with magic. Eating a berry restores 1 hit point and provides sustenance for a long rest. Berries vanish after a long rest. -# 76. - Grease (V,S) level 1 Conjuration [SOL] +# 77. - Grease (V,S) level 1 Conjuration [SOL] Cover an area of 2 x 2 cells with grease. Creatures trying to cross it may fall prone. -# 77. - Guiding Bolt (V,S) level 1 Evocation [SOL] +# 78. - Guiding Bolt (V,S) level 1 Evocation [SOL] Launch a radiant attack against an enemy and make them easy to hit. -# 78. - *Hail of Thorns* © (V) level 1 Conjuration [Concentration] [UB] +# 79. - *Hail of Thorns* © (V) level 1 Conjuration [Concentration] [UB] The next time you hit a creature with a ranged weapon attack before the spell ends, this spell creates a rain of thorns that sprouts from your ranged weapon or ammunition. In addition to the normal effect of the attack, the target of the attack and each creature within 5 feet of it must make a Dexterity saving throw. A creature takes 1d10 piercing damage on a failed save, or half as much damage on a successful one. -# 79. - Healing Word (V) level 1 Evocation [SOL] +# 80. - Healing Word (V) level 1 Evocation [SOL] Heal an ally you can see. -# 80. - Hellish Rebuke (V,S) level 1 Evocation [SOL] +# 81. - Hellish Rebuke (V,S) level 1 Evocation [SOL] When you are damaged by a creature within range, you can use your reaction to inflict fire damage back. -# 81. - Heroism (V,S) level 1 Enchantment [Concentration] [SOL] +# 82. - Heroism (V,S) level 1 Enchantment [Concentration] [SOL] An ally gains temporary hit points and cannot be frightened for a limited time. -# 82. - Hideous Laughter (V,S) level 1 Enchantment [Concentration] [SOL] +# 83. - Hideous Laughter (V,S) level 1 Enchantment [Concentration] [SOL] Make an enemy helpless with irresistible laughter. -# 83. - Hunter's Mark (V) level 1 Divination [Concentration] [SOL] +# 84. - Hunter's Mark (V) level 1 Divination [Concentration] [SOL] An enemy gets additional damage from you, and you can easily detect it for a limited time. -# 84. - *Ice Knife* © (S) level 1 Conjuration [UB] +# 85. - *Ice Knife* © (S) level 1 Conjuration [UB] You create a shard of ice and fling it at one creature within range. Make a ranged spell attack against the target. On a hit, the target takes 1d10 piercing damage. Hit or miss, the shard then explodes. The target and each creature within 5 feet of the point where the ice exploded must succeed on a Dexterity saving throw or take 2d6 cold damage. When you cast this spell using a spell slot of 2nd level or higher, both the cold and piercing damage increase by 1 die for each slot level above 1st. -# 85. - Identify (M,V,S) level 1 Divination [SOL] +# 86. - Identify (M,V,S) level 1 Divination [SOL] Identify the hidden properties of an object. -# 86. - Inflict Wounds (V,S) level 1 Necromancy [SOL] +# 87. - Inflict Wounds (V,S) level 1 Necromancy [SOL] Deal necrotic damage to an enemy you hit. -# 87. - Jump (V,S) level 1 Transmutation [SOL] +# 88. - Jump (V,S) level 1 Transmutation [SOL] Increase an ally's jumping distance. -# 88. - Jump (V,S) level 1 Transmutation [SOL] +# 89. - Jump (V,S) level 1 Transmutation [SOL] Increase an ally's jumping distance. -# 89. - Longstrider (V,S) level 1 Transmutation [SOL] +# 90. - Longstrider (V,S) level 1 Transmutation [SOL] Increases an ally's speed by two cells per turn. -# 90. - Mage Armor (V,S) level 1 Abjuration [SOL] +# 91. - Mage Armor (V,S) level 1 Abjuration [SOL] Provide magical armor to an ally who doesn't wear armor. -# 91. - Magic Missile (V,S) level 1 Evocation [SOL] +# 92. - Magic Missile (V,S) level 1 Evocation [SOL] Strike one or more enemies with projectiles that can't miss. -# 92. - *Magnify Gravity* © (V,S) level 1 Transmutation [UB] +# 93. - *Magnify Gravity* © (V,S) level 1 Transmutation [UB] Sharply increase gravity in a 10-foot-radius sphere to crush and slow targets. -# 93. - Malediction (V,S) level 1 Enchantment [Concentration] [SOL] +# 94. - Malediction (V,S) level 1 Enchantment [Concentration] [SOL] Until the spell ends, whenever you hit a target with an attack you deal an extra 1d6 magical damage of the same type as the attack's damage. -# 94. - Mule (V,S) level 1 Transmutation [UB] +# 95. - Mule (V,S) level 1 Transmutation [UB] The recipient of this spell is able to ignore the effects of heavy loads or armor on movement speed. They can also carry slightly more weight. -# 95. - Protect vs Evil & Good (V,S) level 1 Abjuration [Concentration] [SOL] +# 96. - Protect vs Evil & Good (V,S) level 1 Abjuration [Concentration] [SOL] Touch an ally to give them protection from evil or good creatures for a limited time. -# 96. - Radiant Motes (V,S) level 1 Evocation [UB] +# 97. - Radiant Motes (V,S) level 1 Evocation [UB] Unleashes a swarm of 4 radiant projectiles that deal 1d4 radiant damage each. When you cast this spell using a spell slot of 2nd level or higher, the spell creates 1 more projectile for each slot above 1st. -# 97. - *Sanctuary* © (V,S) level 1 Abjuration [UB] +# 98. - *Sanctuary* © (V,S) level 1 Abjuration [UB] You ward a creature within range against attack. Until the spell ends, any creature who targets the warded creature with an attack or a harmful spell must first make a Wisdom saving throw. On a failed save, the creature loses the attack or spell. This spell doesn't protect the warded creature from area effects. If the warded creature makes an attack or casts a spell, this spell ends. -# 98. - *Searing Smite* © (V) level 1 Evocation [Concentration] [UB] +# 99. - *Searing Smite* © (V) level 1 Evocation [Concentration] [UB] On your next hit your weapon flares with white-hot intensity, and the attack deals an extra 1d6 fire damage to the target and causes the target to ignite in flames. At the start of each of its turns the target must make a successful Constitution saving throw to stop burning, or take 1d6 fire damage. Higher Levels: for each slot level above 1st, the initial extra damage dealt by the attack increases by 1d6. -# 99. - Shield (V,S) level 1 Abjuration [SOL] +# 100. - Shield (V,S) level 1 Abjuration [SOL] Increase your AC by 5 just before you would take a hit. -# 100. - Shield of Faith (V,S) level 1 Abjuration [Concentration] [SOL] +# 101. - Shield of Faith (V,S) level 1 Abjuration [Concentration] [SOL] Increase an ally's AC by 2 for a limited time. -# 101. - Sleep (V,S) level 1 Enchantment [SOL] +# 102. - Sleep (V,S) level 1 Enchantment [SOL] Put a number of creatures to sleep for a limited time. Roll 5d8: the total is how many hit points of creatures this spell can affect. -# 102. - *Tasha's Caustic Brew* © (V,S) level 1 Evocation [Concentration] [UB] +# 103. - *Tasha's Caustic Brew* © (V,S) level 1 Evocation [Concentration] [UB] A stream of acid emanates from you in a line 30 feet long and 5 feet wide in a direction you choose. Each creature in the line must succeed on a Dexterity saving throw or be covered in acid for the spell's duration or until a creature uses its action to scrape or wash the acid off itself or another creature. A creature covered in the acid takes 2d4 acid damage at start of each of its turns. When you cast this spell using a spell slot 2nd level or higher, the damage increases by 2d4 for each slot level above 1st. -# 103. - *Thunderous Smite* © (V) level 1 Evocation [Concentration] [UB] +# 104. - *Thunderous Smite* © (V) level 1 Evocation [Concentration] [UB] On your next hit your weapon rings with thunder and the attack deals an extra 2d6 thunder damage to the target. Additionally, if the target is a creature, it must succeed on a Strength saving throw or be pushed 10 ft away from you and knocked prone. -# 104. - Thunderwave (V,S) level 1 Evocation [SOL] +# 105. - Thunderwave (V,S) level 1 Evocation [SOL] Emit a wave of force that causes damage and pushes creatures and objects away. -# 105. - Tiefling's Hellish Rebuke (V,S) level 1 Evocation [SOL] +# 106. - Tiefling's Hellish Rebuke (V,S) level 1 Evocation [SOL] When you are damaged by a creature withing range, you can use your reaction to inflict fire damage back at them. This tiefling version of the spell is more powerful than the common one but cannot use a higher level Spell Slot to increase damage. -# 106. - *Witch Bolt* © (V,S) level 1 Evocation [Concentration] [UB] +# 107. - *Witch Bolt* © (V,S) level 1 Evocation [Concentration] [UB] A beam of crackling, blue energy lances out toward a creature within range, forming a sustained arc of lightning between you and the target. Make a ranged spell attack against that creature. On a hit, the target takes 1d12 lightning damage, and on each of your turns for the duration, you can use your action to deal 1d12 lightning damage to the target automatically. The spell ends if you use your action to do anything else. The spell also ends if the target is ever outside the spell's range. When you cast this spell using a spell slot of 2nd level or higher, the damage increases by 1d12 for each slot level above 1st. -# 107. - *Wrathful Smite* © (V) level 1 Evocation [Concentration] [UB] +# 108. - *Wrathful Smite* © (V) level 1 Evocation [Concentration] [UB] Your next hit deals additional 1d6 psychic damage. If target fails WIS saving throw its mind explodes in pain, and it becomes frightened. -# 108. - *Zephyr Strike* © (V) level 1 Transmutation [Concentration] [UB] +# 109. - *Zephyr Strike* © (V) level 1 Transmutation [Concentration] [UB] You move like the wind. For the duration, your movement doesn't provoke opportunity attacks. Once before the spell ends, you can give yourself advantage on one weapon attack roll on your turn. That attack deals an extra 1d8 force damage on a hit. Whether you hit or miss, your walking speed increases by 30 feet until the end of that turn. -# 109. - Acid Arrow (V,S) level 2 Evocation [SOL] +# 110. - Acid Arrow (V,S) level 2 Evocation [SOL] Launch an acid arrow that deals some damage even if you miss your shot. -# 110. - *Aganazzar's Scorcher* © (V,S) level 2 Evocation [UB] +# 111. - *Aganazzar's Scorcher* © (V,S) level 2 Evocation [UB] A line of roaring flame 30 feet long and 5 feet wide emanates from you in a direction you choose. Each creature in the line must make a Dexterity saving throw. A creature takes 3d10 fire damage on a failed save, or half as much damage on a successful one. When you cast this spell using a spell slot of 3rd level or higher, the damage increases by 1d10 for each slot level above 2nd. -# 111. - Aid (V,S) level 2 Abjuration [SOL] +# 112. - Aid (V,S) level 2 Abjuration [SOL] Temporarily increases hit points for up to three allies. -# 112. - Barkskin (V,S) level 2 Transmutation [Concentration] [SOL] +# 113. - Barkskin (V,S) level 2 Transmutation [Concentration] [SOL] Gives you or an ally you can touch an AC of at least 16. -# 113. - Blindness (V) level 2 Necromancy [SOL] +# 114. - Blindness (V) level 2 Necromancy [SOL] Blind an enemy for one minute. -# 114. - Blur (V) level 2 Illusion [Concentration] [SOL] +# 115. - Blur (V) level 2 Illusion [Concentration] [SOL] Makes you blurry and harder to hit for up to one minute. -# 115. - *Borrowed Knowledge* © (V,S) level 2 Divination [UB] +# 116. - *Borrowed Knowledge* © (V,S) level 2 Divination [UB] You draw on knowledge from spirits of the past. Choose one skill in which you lack proficiency. For 1 hour, you have proficiency in the chosen skill. The spell ends early if you cast it again. -# 116. - Branding Smite (V) level 2 Evocation [Concentration] [SOL] +# 117. - Branding Smite (V) level 2 Evocation [Concentration] [SOL] Your next hit causes additional radiant damage and your target becomes luminous. -# 117. - Calm Emotions (V,S) level 2 Enchantment [Concentration] [SOL] +# 118. - Calm Emotions (V,S) level 2 Enchantment [Concentration] [SOL] Stops allies from being charmed or frightened and makes hostile humanoids indifferent. -# 118. - *Cloud of Daggers* © (V,S) level 2 Conjuration [Concentration] [UB] +# 119. - *Cloud of Daggers* © (V,S) level 2 Conjuration [Concentration] [UB] You fill the air with spinning daggers in a cube 5 feet on each side, centered on a point you choose within range. A creature takes 4d4 slashing damage when it enters the spell's area for the first time on a turn or starts its turn there. When you cast this spell using a spell slot of 3rd level or higher, the damage increases by 2d4 for each slot level above 2nd. -# 119. - Color Burst (V,S) level 2 Illusion [UB] +# 120. - Color Burst (V,S) level 2 Illusion [UB] Burst a luminous cube that briefly blinds anyone within 10 ft. 8d10 is how many hit points of creatures this spell can affect. -# 120. - Conjure Goblinoids (V,S) level 2 Conjuration [Concentration] [UB] +# 121. - Conjure Goblinoids (V,S) level 2 Conjuration [Concentration] [UB] Conjures 2 goblins who obey your orders unless you lose concentration. -# 121. - Darkness (V) level 2 Evocation [Concentration] [SOL] +# 122. - Darkness (V) level 2 Evocation [Concentration] [SOL] Create an area of magical darkness. -# 122. - Darkvision (V,S) level 2 Transmutation [SOL] +# 123. - Darkvision (V,S) level 2 Transmutation [SOL] Grant Darkvision to the target. -# 123. - Enhance Ability (V,S) level 2 Transmutation [Concentration] [SOL] +# 124. - Enhance Ability (V,S) level 2 Transmutation [Concentration] [SOL] Grant temporary powers to an ally for up to one hour. -# 124. - Find Traps (V,S) level 2 Evocation [SOL] +# 125. - Find Traps (V,S) level 2 Evocation [SOL] Spot mechanical and magical traps, but not natural hazards. -# 125. - Flame Blade (V,S) level 2 Evocation [Concentration] [SOL] +# 126. - Flame Blade (V,S) level 2 Evocation [Concentration] [SOL] Evokes a fiery blade for ten minutes that you can wield in battle. -# 126. - Flaming Sphere (V,S) level 2 Evocation [Concentration] [SOL] +# 127. - Flaming Sphere (V,S) level 2 Evocation [Concentration] [SOL] Summons a movable, burning sphere. -# 127. - Heat Metal (V,S) level 2 Transmutation [Concentration] [SOL] +# 128. - Heat Metal (V,S) level 2 Transmutation [Concentration] [SOL] Causes metallic armor worn by a target creature to glow red hot, causing fire damage and disadvantage to attack rolls and ability checks. The damage can be repeated every turn with a bonus action. -# 128. - Hold Person (V,S) level 2 Enchantment [Concentration] [SOL] +# 129. - Hold Person (V,S) level 2 Enchantment [Concentration] [SOL] Paralyze a humanoid you can see for a limited time. -# 129. - Invisibility (V,S) level 2 Illusion [Concentration] [SOL] +# 130. - Invisibility (V,S) level 2 Illusion [Concentration] [SOL] Make an ally invisible for a limited time. -# 130. - *Kinetic Jaunt* © (S) level 2 Evocation [Concentration] [UB] +# 131. - *Kinetic Jaunt* © (S) level 2 Evocation [Concentration] [UB] You magically empower your movement with dance like steps, giving yourself the following benefits for the duration: • Your walking speed increases by 10 feet. • You don't provoke opportunity attacks. • You can move through the space of any creature. -# 131. - Knock (V) level 2 Transmutation [SOL] +# 132. - Knock (V) level 2 Transmutation [SOL] Magically open locked doors, chests, and the like. -# 132. - Lesser Restoration (V,S) level 2 Abjuration [SOL] +# 133. - Lesser Restoration (V,S) level 2 Abjuration [SOL] Remove a detrimental condition from an ally. -# 133. - Levitate (V,S) level 2 Transmutation [Concentration] [SOL] +# 134. - Levitate (V,S) level 2 Transmutation [Concentration] [SOL] Allow a creature to levitate and gain control of its aerial movement for a limited time. Can affect enemies if their size is medium or smaller. -# 134. - Levitate (V,S) level 2 Transmutation [Concentration] [SOL] +# 135. - Levitate (V,S) level 2 Transmutation [Concentration] [SOL] Allow a creature to levitate and gain control of its aerial movement for a limited time. Can affect enemies if their size is medium or smaller. -# 135. - Magic Weapon (V,S) level 2 Transmutation [Concentration] [SOL] +# 136. - Magic Weapon (V,S) level 2 Transmutation [Concentration] [SOL] A nonmagical weapon becomes a +1 weapon for up to one hour. -# 136. - *Mirror Image* © (V,S) level 2 Illusion [UB] +# 137. - *Mirror Image* © (V,S) level 2 Illusion [UB] Three illusory duplicates of yourself appear in your space. Until the spell ends, each time a creature targets you with an attack, roll a d20 to determine whether the attack instead targets one of your duplicates. If you have 3 duplicates, you must roll a 6 or higher to change the attack's target to a duplicate. With 2 duplicates, you must roll an 8 or higher. With 1 duplicate, you must roll an 11 or higher. A duplicate's AC is equal to 10 + your Dexterity modifier. If an attack hits a duplicate, the duplicate is destroyed. A duplicate can be destroyed only by an attack that hits it. It ignores all other damage and effects. The spell ends when all three duplicates are destroyed. A creature is unaffected by this spell if it is Blinded, or has Blindsight, Truesight or Tremorsense (doesn't apply if you don't touch ground). -# 137. - Misty Step (V) level 2 Conjuration [SOL] +# 138. - Misty Step (V) level 2 Conjuration [SOL] Teleports you to a free cell you can see, no more than 6 cells away. -# 138. - Moon Beam (V,S) level 2 Evocation [Concentration] [SOL] +# 139. - Moon Beam (V,S) level 2 Evocation [Concentration] [SOL] Conjures a vertical column of moonlight which causes radiant damage. Shapechangers have disadvantage on the save. -# 139. - Noxious Spray (V,S) level 2 Evocation [UB] +# 140. - Noxious Spray (V,S) level 2 Evocation [UB] You unleash a spray of noxious gases on a target within range. Make a ranged spell attack. On a hit, the target takes 4d6 poison damage and must succeed on a Constitution saving throw or spend all its next turn retching and heaving, unable to move or take actions. Constructs, elementals and undead are unaffected by this spell. When you cast this spell using a slot of 3rd level or higher, you can target one additional creature for each slot level above 2nd. -# 140. - Pass Without Trace (V,S) level 2 Abjuration [Concentration] [SOL] +# 141. - Pass Without Trace (V,S) level 2 Abjuration [Concentration] [SOL] Make yourself and up to 5 allies stealthier for one hour. -# 141. - Petal Storm (V,S) level 2 Conjuration [Concentration] [UB] +# 142. - Petal Storm (V,S) level 2 Conjuration [Concentration] [UB] Choose an unoccupied 15-foot cube of air that you can see within range. An elemental force of swirling winds appears in the cube and lasts for the spell's duration. The cloud heavily obscures its area. Any creature that enters the storm for the first time on a turn or starts its turn there must make a Strength saving throw. On a failed save, the creature takes 3d4 slashing damage. As a bonus action, you can move the storm up to 30 ft in any direction. -# 142. - Prayer of Healing (V) level 2 Evocation [SOL] +# 143. - Prayer of Healing (V) level 2 Evocation [SOL] Heal multiple allies at the same time. -# 143. - Protect Threshold (V,S) level 2 Abjuration [UB] +# 144. - Protect Threshold (V,S) level 2 Abjuration [UB] Tracing arcane sigils along its boundary, you can ward a doorway, window, or other portal from entry. For the duration, an invisible eldritch creature stalks the warded portal. Any creature that attempts to pass through the portal must make a Wisdom saving throw or take 4d6 psychic damage, or half as much on a successful save. -# 144. - Protection from Poison (V,S) level 2 Abjuration [SOL] +# 145. - Protection from Poison (V,S) level 2 Abjuration [SOL] Cures and protects against poison. -# 145. - Ray of Enfeeblement (V,S) level 2 Necromancy [Concentration] [SOL] +# 146. - Ray of Enfeeblement (V,S) level 2 Necromancy [Concentration] [SOL] Weaken an enemy so they deal less damage for one minute. -# 146. - *Rime's Binding Ice* © (S) level 2 Evocation [UB] +# 147. - *Rime's Binding Ice* © (S) level 2 Evocation [UB] A burst of cold energy emanates from you in a 30-foot cone. Each creature in that area must make a Constitution saving throw. On a failed save, a creature takes 3d8 cold damage and is hindered by ice formations for 1 minute, or until it uses an action to break away the ice. A creature hindered by ice has its speed reduced to 0. On a successful save, a creature takes half as much damage and isn't hindered by ice. -# 147. - Scorching Ray (V,S) level 2 Evocation [SOL] +# 148. - Scorching Ray (V,S) level 2 Evocation [SOL] Fling rays of fire at one or more enemies. -# 148. - See Invisibility (V,S) level 2 Divination [SOL] +# 149. - See Invisibility (V,S) level 2 Divination [SOL] You can see invisible creatures. -# 149. - *Shadow Blade* © (V,S) level 2 Illusion [Concentration] [UB] +# 150. - *Shadow Blade* © (V,S) level 2 Illusion [Concentration] [UB] You weave together threads of shadow to create a dagger of solidified gloom in your hand. It deals 2d8 psychic damage on a hit and has the finesse, light, and thrown properties. In addition, when you use it to attack a target that is in dim light or darkness, you make the attack roll with advantage. -# 150. - Shatter (V,S) level 2 Evocation [SOL] +# 151. - Shatter (V,S) level 2 Evocation [SOL] Triggers a sudden noise that causes Thunder Damage in a 2-cell radius. -# 151. - Silence (V,S) level 2 Illusion [Concentration] [SOL] +# 152. - Silence (V,S) level 2 Illusion [Concentration] [SOL] Creates a sphere four cells in radius, inside which sound cannot exist. Stops thunder damage and prevents spellcasting using verbal components. -# 152. - *Snilloc's Snowball Storm* © (V,S) level 2 Evocation [UB] +# 153. - *Snilloc's Snowball Storm* © (V,S) level 2 Evocation [UB] A flurry of magic snowballs erupts from a point you choose within range. Each creature in a 3x3 cube centered on that point must make a Dexterity saving throw. A creature takes 3d8 cold damage on a failed save, or half as much damage on a successful one. When you cast this spell using a spell slot of 3rd level or higher, the damage increases by 1d8 for each slot level above 2nd. -# 153. - Spider Climb (V,S) level 2 Transmutation [Concentration] [SOL] +# 154. - Spider Climb (V,S) level 2 Transmutation [Concentration] [SOL] Touch an ally to allow them to climb walls like a spider for a limited time. -# 154. - Spike Growth (V,S) level 2 Transmutation [Concentration] [SOL] +# 155. - Spike Growth (V,S) level 2 Transmutation [Concentration] [SOL] Grows spikes and thorns in the area, making the terrain difficult and causing damage for every cell of movement. -# 155. - Spiritual Weapon (V,S) level 2 Evocation [SOL] +# 156. - Spiritual Weapon (V,S) level 2 Evocation [SOL] Summon a weapon that fights for you. -# 156. - *Tasha's Mind Whip* © (V) level 2 Enchantment [UB] +# 157. - *Tasha's Mind Whip* © (V) level 2 Enchantment [UB] You psychically lash out at one creature you can see within range. The target must make an Intelligence saving throw. On a failed save, the target takes 3d6 psychic damage, and it can't take a reaction until the end of its next turn. Moreover, on its next turn, it must choose whether it gets a move, an action, or a bonus action; it gets only one of the three. On a successful save, the target takes half as much damage and suffers none of the spell's other effects. When you cast this spell using a spell slot of 3rd level or higher, you can target one additional creature for each slot level above 2nd. -# 157. - *Warding Bond* © (V,S) level 2 Abjuration [SOL] +# 158. - *Warding Bond* © (V,S) level 2 Abjuration [SOL] Creates a bond with the target, who gains +1 AC, +1 to saving throws and resistance to all damage, but you share all damage it receives. Lasts for one hour. -# 158. - *Web* © (V,S) level 2 Conjuration [Concentration] [UB] +# 159. - *Web* © (V,S) level 2 Conjuration [Concentration] [UB] You conjure a mass of thick, sticky webbing at a point of your choice within range. The webs fill a 20-foot cube from that point for the duration. The webs are difficult terrain and lightly obscure their area. Each creature that enters them during its turn must make a Dexterity saving throw. On a failed save, the creature is restrained as long as it remains in the webs or until it breaks free. A creature restrained by the webs can use its actions to make a Strength check against your spell save DC. If it succeeds, it is no longer restrained. -# 159. - *Wither and Bloom* © (V,S) level 2 Necromancy [UB] +# 160. - *Wither and Bloom* © (V,S) level 2 Necromancy [UB] You invoke both death and life upon a 10-foot-radius sphere centered on an ally. Each enemy in that area must make a Constitution saving throw, taking 2d6 necrotic damage on a failed save, or half as much damage on a successful one. In addition, the target spends and rolls one of its unspent Hit Dice and regain a number of hit points equal to the roll plus your spellcasting ability modifier. When you cast this spell using a spell slot of 3rd level or higher, the damage increases by 1d6 for each slot above 2nd, and the number of Hit Dice that can be spent and added to the healing roll increases by one for each slot above 2nd. -# 160. - Adder's Fangs (V,S) level 3 Conjuration [UB] +# 161. - Adder's Fangs (V,S) level 3 Conjuration [UB] You create the visage of a massive green snake that appears for an instant before bearing down on your foe. Choose a creature you can see within range. The target must make a constitution saving throw, taking 4d10 poison damage on a failure, or half as much damage on a successful one. A creature that fails its saving throw is also poisoned, and its speed is halved while poisoned by this spell. At the end of each of its turns, a target may make a constitution saving throw, ending the poison on a success. Otherwise, the poison lasts for 1 minute. When you cast this spell using a spell slot of 4th level or higher, you may target an additional creature within range for each slot level above 3rd. -# 161. - *Ashardalon's Stride* © (V,S) level 3 Transmutation [Concentration] [UB] +# 162. - *Ashardalon's Stride* © (V,S) level 3 Transmutation [Concentration] [UB] The billowing flames of a dragon blast from your feet, granting you explosive speed. For the duration, your speed increases by 20 feet and moving doesn't provoke opportunity attacks. When you move within 5 feet of a creature, it takes 1d6 fire damage from your trail of heat. A creature can take this damage only once during a turn. When you cast this spell using a spell slot of 4th level or higher, increase your speed by 5 feet for each spell slot level above 3rd. The spell deals an additional 1d6 fire damage for each slot level above 3rd. -# 162. - *Aura of Vitality* © (V) level 3 Evocation [Concentration] [UB] +# 163. - *Aura of Vitality* © (V) level 3 Evocation [Concentration] [UB] Healing energy radiates from you in an aura with a 30-foot radius. Until the spell ends, the aura moves with you, centered on you. You can use a bonus action to cause one creature in the aura (including you) to regain 2d6 hit points. -# 163. - Beacon of Hope (V,S) level 3 Abjuration [Concentration] [SOL] +# 164. - Beacon of Hope (V,S) level 3 Abjuration [Concentration] [SOL] Raise hope and vitality. -# 164. - Bestow Curse (V,S) level 3 Necromancy [Concentration] [SOL] +# 165. - Bestow Curse (V,S) level 3 Necromancy [Concentration] [SOL] Curses a creature you can touch. -# 165. - *Blinding Smite* © (V) level 3 Evocation [Concentration] [UB] +# 166. - *Blinding Smite* © (V) level 3 Evocation [Concentration] [UB] On your next hit your weapon flares with a bright light, and the attack deals an extra 3d8 radiant damage to the target. Additionally, the target must succeed on a Constitution saving throw or be blinded until the spell ends. A creature blinded by this spell makes another Constitution saving throw at the end of each of its turns. On a successful save, it is no longer blinded. -# 166. - Call Lightning (V,S) level 3 Conjuration [Concentration] [SOL] +# 167. - Call Lightning (V,S) level 3 Conjuration [Concentration] [SOL] Conjures a storm cloud from which you can call a vertical bolt of lightning to strike targets, dealing 3D10 lightning damage. Another bolt can be repeated every turn by using an action. -# 167. - Conjure Animal (V,S) level 3 Conjuration [Concentration] [SOL] +# 168. - Conjure Animal (V,S) level 3 Conjuration [Concentration] [SOL] Summon spirits in the form of beasts to help you in battle -# 168. - Corrupting Bolt (V,S) level 3 Necromancy [UB] +# 169. - Corrupting Bolt (V,S) level 3 Necromancy [UB] You can fire a pulse of necrotic energy that causes a creature's body to begin to wither and decay. Make a ranged attack against a creature. On a hit, the target takes 4d8 necrotic damage and must succeed a Constitution saving throw. On a failed saving throw, the next time you or an ally of yours hits the corrupted creature with an attack before the end of your next turn, the creature has vulnerability to all of that attack's damage, and then the corruption ends. When you cast this spell using a spell slot of 4th level or higher, the damage increases by 1d8 for each slot level above 3rd. -# 169. - Counterspell (S) level 3 Abjuration [SOL] +# 170. - Counterspell (S) level 3 Abjuration [SOL] Interrupt an enemy's spellcasting. -# 170. - Create Food (S) level 3 Conjuration [SOL] +# 171. - Create Food (S) level 3 Conjuration [SOL] Conjure 15 units of food. -# 171. - *Crusader's Mantle* © (V) level 3 Evocation [Concentration] [UB] +# 172. - *Crusader's Mantle* © (V) level 3 Evocation [Concentration] [UB] Surround yourself with a magical aura. Allies within the aura gain a bonus 1d4 radiant damage on their attacks. -# 172. - Daylight (V,S) level 3 Evocation [SOL] +# 173. - Daylight (V,S) level 3 Evocation [SOL] Summon a globe of bright light. -# 173. - Dispel Magic (V,S) level 3 Abjuration [SOL] +# 174. - Dispel Magic (V,S) level 3 Abjuration [SOL] End active spells on a creature or object. -# 174. - *Elemental Weapon* © (V,S) level 3 Transmutation [Concentration] [UB] +# 175. - *Elemental Weapon* © (V,S) level 3 Transmutation [Concentration] [UB] Imbue a non-magical weapon with elemental magic. It gains a +1 to attack and damage rolls, and it gains 1d4 of the corresponding element's damage. When casting with a 5 or 6 spell slots, the effects increased by one die while casting at a spell slot 7 or higher increases the effects by 2. -# 175. - Fear (V,S) level 3 Illusion [Concentration] [SOL] +# 176. - Fear (V,S) level 3 Illusion [Concentration] [SOL] Frighten creatures and force them to flee. -# 176. - Fireball (V,S) level 3 Evocation [SOL] +# 177. - Fireball (V,S) level 3 Evocation [SOL] Launch a fireball that explodes from a point of your choosing. -# 177. - *Flame Arrows* © (M,V,S) level 3 Transmutation [Concentration] [UB] +# 178. - *Flame Arrows* © (M,V,S) level 3 Transmutation [Concentration] [UB] You must be wielding a ranged weapon. When a target is hit by it, the target takes an extra 1d6 fire damage. The spell ends when twelve pieces of ammunition have been drawn from the quiver. When you cast this spell using a spell slot of 4th level or higher, the number of pieces of ammunition you can affect with this spell increases by two for each slot level above 3rd. -# 178. - Fly (V,S) level 3 Transmutation [Concentration] [SOL] +# 179. - Fly (V,S) level 3 Transmutation [Concentration] [SOL] An ally you touch gains the ability to fly for a limited time. -# 179. - Haste (V,S) level 3 Transmutation [Concentration] [SOL] +# 180. - Haste (V,S) level 3 Transmutation [Concentration] [SOL] Make an ally faster and more agile, and grant them an additional action for a limited time. -# 180. - *Hunger of Hadar* © (V,S) level 3 Transmutation [Concentration] [UB] +# 181. - *Hunger of Hadar* © (V,S) level 3 Transmutation [Concentration] [UB] You open a gateway to the dark between the stars, a region infested with unknown horrors. A 20-foot-radius sphere of blackness and bitter cold appears, centered on a point with range and lasting for the duration. The area extinguishes light, and creatures within it are blinded. Any creature that starts its turn in the area takes 2d6 cold damage. Any creature that ends its turn in the area must succeed on a Dexterity saving throw or take 2d6 acid damage as milky, otherworldly tentacles rub against it. -# 181. - Hypnotic Pattern (S) level 3 Illusion [Concentration] [SOL] +# 182. - Hypnotic Pattern (S) level 3 Illusion [Concentration] [SOL] Charms enemies to make them harmless until attacked, but also affects allies in range. -# 182. - *Intellect Fortress* © (V) level 3 Abjuration [Concentration] [UB] +# 183. - *Intellect Fortress* © (V) level 3 Abjuration [Concentration] [UB] For the duration, you or one willing creature you can see within range has resistance to psychic damage, as well as advantage on Intelligence, Wisdom, and Charisma saving throws. When you cast this spell using a spell slot of 4th level or higher, you may target an additional creature within range for each slot level above 3rd. -# 183. - *Life Transference* © (V,S) level 3 Necromancy [UB] +# 184. - *Life Transference* © (V,S) level 3 Necromancy [UB] You sacrifice some of your health to mend another creature's injuries. You take 4d8 necrotic damage, and one creature of your choice that you can see within range regains a number of hit points equal to twice the necrotic damage you take. When you cast this spell using a spell s lot of 4th level or higher, the damage increases by 1d8 for each slot level above 3rd. -# 184. - *Lightning Arrow* © (V,S) level 3 Transmutation [Concentration] [UB] +# 185. - *Lightning Arrow* © (V,S) level 3 Transmutation [Concentration] [UB] The next time you make a ranged weapon attack during the spell's duration, the weapon's ammunition, or the weapon itself if it's a thrown weapon, transforms into a bolt of lightning. Make the attack roll as normal. The target takes 3d8 lightning damage on a hit, or half as much damage on a miss. Whether you hit or miss, each creature within 10 feet of the target must make a Dexterity saving throw. Each of these creatures takes 2d8 lightning damage on a failed save, or half as much damage on a successful one. When you cast this spell using a spell slot of 4th level or higher, the damage for both effects of the spell increases by 1d8 for each slot level above 3rd. -# 185. - Lightning Bolt (V,S) level 3 Evocation [SOL] +# 186. - Lightning Bolt (V,S) level 3 Evocation [SOL] Unleash a stroke of lightning in a direction of your choice, damaging everyone it touches. -# 186. - Mass Healing Word (V) level 3 Evocation [SOL] +# 187. - Mass Healing Word (V) level 3 Evocation [SOL] Instantly heals up to six allies you can see. -# 187. - Protection from Energy (V,S) level 3 Abjuration [Concentration] [SOL] +# 188. - Protection from Energy (V,S) level 3 Abjuration [Concentration] [SOL] Touch one willing creature to give them resistance to this damage type. -# 188. - *Pulse Wave* © (V,S) level 3 Evocation [UB] +# 189. - *Pulse Wave* © (V,S) level 3 Evocation [UB] You create intense pressure, unleash it in a 30-foot cone, and decide whether the pressure pulls or pushes creatures and objects. Each creature in that cone must make a Constitution saving throw. A creature takes 6d6 force damage on a failed save, or half as much damage on a successful one. And every creature that fails the save is either pulled 15 feet toward you or pushed 15 feet away from you, depending on the choice you made for the spell. When you cast this spell using a spell slot of 4th level or higher, the damage increases by 1d6 and the distance pulled or pushed increases by 5 feet for each slot level above 3rd. -# 189. - Remove Curse (V,S) level 3 Abjuration [SOL] +# 190. - Remove Curse (V,S) level 3 Abjuration [SOL] Removes all curses affecting the target. -# 190. - Revivify (M,V,S) level 3 Necromancy [SOL] +# 191. - Revivify (M,V,S) level 3 Necromancy [SOL] Brings one creature back to life, up to 1 minute after death. -# 191. - Sleet Storm (V,S) level 3 Conjuration [Concentration] [SOL] +# 192. - Sleet Storm (V,S) level 3 Conjuration [Concentration] [SOL] Creates an area where the ground is slippery, vision is obscured, and concentration is harder. -# 192. - Slow (V,S) level 3 Transmutation [Concentration] [SOL] +# 193. - Slow (V,S) level 3 Transmutation [Concentration] [SOL] Slows and impairs the actions of up to 6 creatures. -# 193. - Spirit Guardians (V,S) level 3 Conjuration [Concentration] [SOL] +# 194. - Spirit Guardians (V,S) level 3 Conjuration [Concentration] [SOL] Call forth spirits to protect you. -# 194. - *Spirit Shroud* © (V,S) level 3 Necromancy [Concentration] [UB] +# 195. - *Spirit Shroud* © (V,S) level 3 Necromancy [Concentration] [UB] You call forth spirits of the dead, which flit around you for the spell's duration. The spirits are intangible and invulnerable. Until the spell ends, any attack you make deals 1d8 extra damage when you hit a creature within 10 ft of you. This damage is radiant, necrotic, or cold (your choice when you cast the spell). Any creature that takes this damage can't regain hit points until the start of your next turn. In addition, any enemy creature within 10ft of you when you cast, or that enters or starts its turn in that range has its movement speed lowered by 10ft until start of its next turn. When you cast this spell using a spell slot of 4th level or higher, the damage increases by 1d8 for every two slot levels above 3rd. -# 195. - Stinking Cloud (V,S) level 3 Conjuration [Concentration] [SOL] +# 196. - Stinking Cloud (V,S) level 3 Conjuration [Concentration] [SOL] Create a cloud of incapacitating, noxious gas. -# 196. - *Thunder Step* © (V) level 3 Conjuration [UB] +# 197. - *Thunder Step* © (V) level 3 Conjuration [UB] You teleport yourself to an unoccupied space you can see within range. Immediately after you disappear, a thunderous boom sounds, and each creature within 10 feet of the space you left must make a Constitution saving throw, taking 3d10 thunder damage on a failed save, or half as much damage on a successful one. You can also teleport one willing ally. When you cast this spell using a spell slot of 4th level or higher, the damage increases by 1d10 for each slot level above 3rd. -# 197. - Tongues (V) level 3 Divination [SOL] +# 198. - Tongues (V) level 3 Divination [SOL] Grants knowledge of all languages for one hour. -# 198. - Vampiric Touch (V,S) level 3 Necromancy [Concentration] [SOL] +# 199. - Vampiric Touch (V,S) level 3 Necromancy [Concentration] [SOL] Grants you a life-draining melee attack for one minute. -# 199. - Wind Wall (V,S) level 3 Evocation [Concentration] [SOL] +# 200. - Wind Wall (V,S) level 3 Evocation [Concentration] [SOL] Create a wall of wind that causes damage, pushes creatures and objects away, and disperses fogs and gases. -# 200. - Winter's Breath (V,S) level 3 Conjuration [UB] +# 201. - Winter's Breath (V,S) level 3 Conjuration [UB] Create a blast of cold wind to chill your enemies and knock them prone. -# 201. - *Aura of Life* © (V) level 4 Abjuration [Concentration] [UB] +# 202. - *Aura of Life* © (V) level 4 Abjuration [Concentration] [UB] Life-preserving energy radiates from you in an aura with a 30-foot radius. Until the spell ends, the aura moves with you, centered on you. Each non-hostile creature in the aura, including you, has resistance to necrotic damage, and its hit point maximum can't be reduced. In addition, a non-hostile, living creature regains 1 hit point when it starts its turn in the aura with 0 hit points. -# 202. - *Aura of Purity* © (V) level 4 Abjuration [Concentration] [UB] +# 203. - *Aura of Purity* © (V) level 4 Abjuration [Concentration] [UB] Purifying energy radiates from you in an aura with a 30-foot radius. Until the spell ends, the aura moves with you, centered on you. Each non-hostile creature in the aura, including you, can't become diseased, has resistance to poison damage, and has advantage on saving throws against effects that cause any of the following conditions: blinded, charmed, deafened, frightened, paralyzed, poisoned, and stunned. -# 203. - Banishment (V,S) level 4 Abjuration [Concentration] [SOL] +# 204. - Banishment (V,S) level 4 Abjuration [Concentration] [SOL] Banishes a creature as long as you concentrate. The creature can be permanently banished if it is extraplanar. -# 204. - Black Tentacles (V,S) level 4 Conjuration [Concentration] [SOL] +# 205. - Black Tentacles (V,S) level 4 Conjuration [Concentration] [SOL] Conjures black tentacles that restrain and damage creatures within the area of effect. -# 205. - Blessing of Rime (V,S) level 4 Evocation [UB] +# 206. - Blessing of Rime (V,S) level 4 Evocation [UB] You summon a chill wind that numbs the pain of your allies. Choose up to three creatures within range. Each creature gains 3d8 temporary hit points for the duration. While a creature has these hit points, if it would make a Constitution saving throw, it gains advantage on the roll. When you cast this spell using a spell slot of 5th level or higher, the temporary hit points increase by 1d8 for each slot level above 4th. -# 206. - Blight (V,S) level 4 Necromancy [SOL] +# 207. - Blight (V,S) level 4 Necromancy [SOL] Drains life from a creature, causing massive necrotic damage. -# 207. - Brain Bulwark (V) level 4 Abjuration [UB] +# 208. - Brain Bulwark (V) level 4 Abjuration [UB] For the duration, you or one willing creature you can see within range has resistance to psychic damage, as well as Immunity to the Charmed, Frightened, Fear, Mind dominated and Mind controlled conditions. -# 208. - Confusion (V,S) level 4 Enchantment [Concentration] [SOL] +# 209. - Confusion (V,S) level 4 Enchantment [Concentration] [SOL] Creates confusion and erratic behavior in a creature, possibly leading it to attack its allies. -# 209. - Conjure 4 Elementals (V,S) level 4 Conjuration [Concentration] [SOL] +# 210. - Conjure 4 Elementals (V,S) level 4 Conjuration [Concentration] [SOL] 4 elementals are conjured (CR 1/2). -# 210. - Conjure Minor Elementals (V,S) level 4 Conjuration [Concentration] [SOL] +# 211. - Conjure Minor Elementals (V,S) level 4 Conjuration [Concentration] [SOL] Conjure elemental creatures under your command, which are dismissed when the spell ends or is broken. -# 211. - Death Ward (V,S) level 4 Abjuration [SOL] +# 212. - Death Ward (V,S) level 4 Abjuration [SOL] Protects the creature once against instant death or being reduced to 0 hit points. -# 212. - Dimension Door (V) level 4 Conjuration [SOL] +# 213. - Dimension Door (V) level 4 Conjuration [SOL] Transfers the caster and a friendly creature to a specified destination. -# 213. - Dominate Beast (V,S) level 4 Enchantment [Concentration] [SOL] +# 214. - Dominate Beast (V,S) level 4 Enchantment [Concentration] [SOL] Grants you control over an enemy beast. -# 214. - Dreadful Omen (V,S) level 4 Enchantment [SOL] +# 215. - Dreadful Omen (V,S) level 4 Enchantment [SOL] You whisper dreadful words that cause immense mental anguish in your enemies. On a failed wisdom saving throw, they take psychic damage and become frightened until the end of their next turn, moving away from you as much as possible. On a successful save, they take half as much damage and are not frightened. -# 215. - *Elemental Bane* © (V,S) level 4 Transmutation [Concentration] [UB] +# 216. - *Elemental Bane* © (V,S) level 4 Transmutation [Concentration] [UB] Choose one creature you can see within range, and choose one of the following damage types: acid, cold, fire, lightning, or thunder. The target must succeed on a Constitution saving throw or be affected by the spell for its duration. The first time each turn the affected target takes non-recurrent damage of the chosen type, the target takes an extra 2d6 damage of that type. Moreover, the target loses any resistance to that damage type until the spell ends. When you cast this spell using a spell slot of 5th level or higher, you can target one additional creature for each slot level above 4th. The creatures must be within 30 feet of each other when you target them. -# 216. - Fire Shield (V,S) level 4 Evocation [SOL] +# 217. - Fire Shield (V,S) level 4 Evocation [SOL] Grants resistance to fire or cold, and damages creatures attacking the caster with melee attacks. -# 217. - Freedom of Movement (V,S) level 4 Abjuration [SOL] +# 218. - Freedom of Movement (V,S) level 4 Abjuration [SOL] Grants immunity to movement restrictions, as well as being paralyzed or restrained. -# 218. - Giant Insect (V,S) level 4 Transmutation [Concentration] [SOL] +# 219. - Giant Insect (V,S) level 4 Transmutation [Concentration] [SOL] Conjures a giant version of a natural insect or arthropod. -# 219. - *Gravity Sinkhole* © (V,S) level 4 Evocation [UB] +# 220. - *Gravity Sinkhole* © (V,S) level 4 Evocation [UB] A 20-foot-radius sphere of crushing force forms at a point you can see within range and tugs at the creatures there. Each creature in the sphere must make a Constitution saving throw. On a failed save, the creature takes 5d10 force damage, and is pulled in a straight line toward the center of the sphere, ending in an unoccupied space as close to the center as possible. On a successful save, the creature takes half as much damage and isn't pulled. When you cast this spell using a spell slot of 5th level or higher, the damage increases by 1d10 for each slot level above 4th. -# 220. - Greater Invisibility (V,S) level 4 Illusion [Concentration] [SOL] +# 221. - Greater Invisibility (V,S) level 4 Illusion [Concentration] [SOL] Target becomes invisible for the duration, even when attacking or casting spells. -# 221. - Guardian of Faith (V) level 4 Conjuration [SOL] +# 222. - Guardian of Faith (V) level 4 Conjuration [SOL] Conjures a large spectral guardian that damages approaching enemies. -# 222. - *Guardian of Nature* © (V) level 4 Transmutation [Concentration] [UB] +# 223. - *Guardian of Nature* © (V) level 4 Transmutation [Concentration] [UB] A nature spirit answers your call and transforms you into a powerful guardian. The transformation lasts until the spell ends. You choose between a Beast or a Tree form. -# 223. - Ice Storm (V,S) level 4 Evocation [SOL] +# 224. - Ice Storm (V,S) level 4 Evocation [SOL] Causes bludgeoning and cold damage in the area, and turns the ground into difficult terrain. -# 224. - Identify Creatures (V,S) level 4 Divination [SOL] +# 225. - Identify Creatures (V,S) level 4 Divination [SOL] Reveals full bestiary knowledge for the affected creatures. -# 225. - Irresistible Performance (V) level 4 Enchantment [UB] +# 226. - Irresistible Performance (V) level 4 Enchantment [UB] You weave a song into the air, causing those who hear it to applaud its magnificence. All creatures of your choice inside a 30-foot-cube within range must make a Charisma saving throw or be forced to clap and shout until the start of your next turn. A creature that is charmed by you always fails this saving throw. A clapping creature cannot perform any actions that require their hands or mouth but can otherwise act normally. This spell has no effect on creatures that are immune to charm. -# 226. - *Mordenkainen's Faithful Hound* © (V,S) level 4 Conjuration [UB] +# 227. - *Mordenkainen's Faithful Hound* © (V,S) level 4 Conjuration [UB] You conjure a phantom watchdog in an unoccupied space that you can see within range, where it remains for the duration. The hound has Darkvision up to 60 ft, Truesight up to 80 ft, is invisible to all creatures except you and can't be harmed. During each of your turns, the hound can attempt to bite one creature within 5 feet of it that is hostile to you as a free action. The hound's attack bonus is equal to your spellcasting ability modifier + your proficiency bonus. On a hit, it deals 4d8 piercing damage. -# 227. - Phantasmal Killer (V,S) level 4 Illusion [Concentration] [SOL] +# 228. - Phantasmal Killer (V,S) level 4 Illusion [Concentration] [SOL] Causes psychic damage to the target creature with each turn, unless a saving throw is successful or the effect ends. -# 228. - Psionic Blast (V) level 4 Evocation [UB] +# 229. - Psionic Blast (V) level 4 Evocation [UB] You unleash a debilitating wave of mental power in a 30-foot cone. Each creature in the area must make an Intelligence saving throw. On a failed save, a target takes 5d8 psychic damage, becomes dazzled and has its movement speed halved until the end of your next turn. On a successful save, a target only takes half as much damage. When you cast this spell using a spell slot of 4th level or higher, the damage increases by 1d8 for each slot level above 4th. -# 229. - *Raulothim's Psychic Lance* © (V) level 4 Enchantment [UB] +# 230. - *Raulothim's Psychic Lance* © (V) level 4 Enchantment [UB] You unleash a shimmering lance of psychic power from your forehead at a creature that you can see within range. It must succeed on an Intelligence saving throw or take 7d6 psychic damage and be incapacitated until the end of your next turn. On a successful save, the creature takes half damage and isn't incapacitated. At Higher Levels. When you cast this spell using a spell slot of 4th level or higher, the damage increases by 1d6 for each slot level above 4th. -# 230. - *Sickening Radiance* © (V,S) level 4 Evocation [Concentration] [UB] +# 231. - *Sickening Radiance* © (V,S) level 4 Evocation [Concentration] [UB] Dim light spreads within a 30-foot-radius sphere centered on a point you choose within range. The light spreads around corners, and it lasts until the spell ends. When a creature moves into the spell's area for the first time on a turn or starts its turn there, that creature must succeed on a Constitution saving throw or take 4d10 radiant damage, and it suffers one level of exhaustion and emits a dim light in a 5-foot radius. This light makes it impossible for the creature to benefit from being invisible. The light and any levels of exhaustion caused by this spell go away when the spell ends. -# 231. - *Staggering Smite* © (V) level 4 Evocation [Concentration] [UB] +# 232. - *Staggering Smite* © (V) level 4 Evocation [Concentration] [UB] The next time you hit a creature with a weapon attack during this spell's duration, your weapon pierces both body and mind, and the attack deals an extra 4d6 psychic damage to the target. The target must make a Wisdom saving throw. On a failed save, it has disadvantage on attack rolls and ability checks, and can't take reactions, until the end of its next turn. -# 232. - Stoneskin (M,V,S) level 4 Abjuration [Concentration] [SOL] +# 233. - Stoneskin (M,V,S) level 4 Abjuration [Concentration] [SOL] Grants resistance to non-magical bludgeoning, slashing, and piercing damage. -# 233. - *Vitriolic Sphere* © (V,S) level 4 Evocation [UB] +# 234. - *Vitriolic Sphere* © (V,S) level 4 Evocation [UB] You point at a place within range, and a glowing 1-foot ball of emerald acid streaks there and explodes in a 20-foot radius. Each creature in that area must make a Dexterity saving throw. On a failed save, a creature takes 10d4 acid damage and 5d4 acid damage at the end of its next turn. On a successful save, a creature takes half the initial damage and no damage at the end of its next turn. When you cast this spell using a spell slot of 5th level or higher, the initial damage increases by 2d4 for each slot level above 4th. -# 234. - Wall of Fire (V,S) level 4 Evocation [Concentration] [SOL] +# 235. - Wall of Fire (V,S) level 4 Evocation [Concentration] [SOL] Create a burning wall that injures creatures in or next to it. -# 235. - *Banishing Smite* © (V) level 5 Abjuration [Concentration] [UB] +# 236. - *Banishing Smite* © (V) level 5 Abjuration [Concentration] [UB] Your next hit deals additional 5d10 force damage with your weapon. Additionally, if this attack reduces the target to 50 hit points of fewer, you banish it for 1 min. -# 236. - *Circle of Power* © (V) level 5 Abjuration [Concentration] [UB] +# 237. - *Circle of Power* © (V) level 5 Abjuration [Concentration] [UB] Divine energy radiates from you, distorting and diffusing magical energy within 30 feet of you. Until the spell ends, the sphere moves with you, centered on you. For the duration, each friendly creature in the area, including you, has advantage on saving throws against spells and other magical effects. Additionally, when an affected creature succeeds on a saving throw made against a spell or magical effect that allows it to make a saving throw to take only half damage, it instead takes no damage if it succeeds on the saving throws. -# 237. - Cloudkill (V,S) level 5 Conjuration [Concentration] [SOL] +# 238. - Cloudkill (V,S) level 5 Conjuration [Concentration] [SOL] Creates an obscuring and poisonous cloud. The cloud moves every round. -# 238. - Cone of Cold (V,S) level 5 Evocation [SOL] +# 239. - Cone of Cold (V,S) level 5 Evocation [SOL] Inflicts massive cold damage in the cone of effect. -# 239. - Conjure Elemental (V,S) level 5 Conjuration [Concentration] [SOL] +# 240. - Conjure Elemental (V,S) level 5 Conjuration [Concentration] [SOL] Conjures an elemental of the chosen element that fights alongside you. If you lose concentration, the elemental remains and becomes hostile. -# 240. - Contagion (V,S) level 5 Necromancy [SOL] +# 241. - Contagion (V,S) level 5 Necromancy [SOL] Hit a creature to inflict a disease from the options. -# 241. - *Dawn* © (V,S) level 5 Evocation [Concentration] [UB] +# 242. - *Dawn* © (V,S) level 5 Evocation [Concentration] [UB] The light of dawn shines down on a location you specify within range. Until the spell ends, a 30-foot-radius, 40-foot-high cylinder of bright light glimmers there. This light is sunlight. When the cylinder appears, each creature in it must make a Constitution saving throw, taking 4d10 radiant damage on a failed save, or half as much damage on a successful one. A creature must also make this saving throw whenever it ends its turn in the cylinder. If you're within 60 feet of the cylinder, you can move it up to 60 feet as a bonus action on your turn. -# 242. - *Destructive Wave* © (V) level 5 Evocation [UB] +# 243. - *Destructive Wave* © (V) level 5 Evocation [UB] You strike the ground, creating a burst of divine energy that ripples outward from you. Each creature you choose within 30 feet of you must succeed on a Constitution saving throw or take 5d6 thunder damage, as well as 5d6 radiant or necrotic damage, and be knocked prone. A creature that succeeds on its saving throw takes half as much damage and isn't knocked prone. -# 243. - Dispel Evil and Good (V,S) level 5 Abjuration [Concentration] [SOL] +# 244. - Dispel Evil and Good (V,S) level 5 Abjuration [Concentration] [SOL] Celestial, elementals, feys, fiends, and undead have disadvantage on attacks against you. This spell also allows you to cancel hostile enchantments or dismiss extraplanar creatures hit by your attacks once. -# 244. - Dominate Person (V,S) level 5 Enchantment [Concentration] [SOL] +# 245. - Dominate Person (V,S) level 5 Enchantment [Concentration] [SOL] Grants you control over an enemy creature. -# 245. - *Far Step* © (V) level 5 Conjuration [Concentration] [UB] +# 246. - *Far Step* © (V) level 5 Conjuration [Concentration] [UB] You teleport up to 60 ft to an unoccupied space you can see. On each of your turns before the spell ends, you can use a bonus action to teleport in this way again. -# 246. - Flame Strike (V,S) level 5 Evocation [SOL] +# 247. - Flame Strike (V,S) level 5 Evocation [SOL] Conjures a burning column of fire and radiance affecting all creatures inside. -# 247. - Greater Restoration (V,S) level 5 Abjuration [SOL] +# 248. - Greater Restoration (V,S) level 5 Abjuration [SOL] Removes one detrimental condition, such as a charm or curse, or an effect that reduces an ability score or hit points. -# 248. - Hold Monster (V,S) level 5 Enchantment [Concentration] [SOL] +# 249. - Hold Monster (V,S) level 5 Enchantment [Concentration] [SOL] Paralyzes a creature unless it succeeds a WIS saving throw. No effect on undead. -# 249. - *Immolation* © (V) level 5 Evocation [Concentration] [UB] +# 250. - *Immolation* © (V) level 5 Evocation [Concentration] [UB] Flames wreathe one creature you can see within range. The target must make a Dexterity saving throw. It takes 8d6 fire damage on a failed save, or half as much damage on a successful one. On a failed save, the target also burns for the spell's duration. The burning target sheds bright light in a 30-foot radius and dim light for an additional 30 feet and takes 8d6 fire damage at the start of each of its turns. -# 250. - Insect Plague (V,S) level 5 Conjuration [Concentration] [SOL] +# 251. - Insect Plague (V,S) level 5 Conjuration [Concentration] [SOL] Summons a sphere of biting insects. -# 251. - Mantle of Thorns (V,S) level 5 Transmutation [Concentration] [UB] +# 252. - Mantle of Thorns (V,S) level 5 Transmutation [Concentration] [UB] Surround yourself with an aura of thorns. Those that start or walk through take 2d8 piercing damage. This damage scales at higher levels by 1d8 per slot. -# 252. - Mass Cure Wounds (V,S) level 5 Evocation [SOL] +# 253. - Mass Cure Wounds (V,S) level 5 Evocation [SOL] Heals up to 6 creatures. -# 253. - Mind Twist (V,S) level 5 Enchantment [SOL] +# 254. - Mind Twist (V,S) level 5 Enchantment [SOL] Causes massive psychic damage to all creatures around you, and incapacitates them if they fail their INT saving throw. -# 254. - Raise Dead (M,V,S) level 5 Necromancy [SOL] +# 255. - Raise Dead (M,V,S) level 5 Necromancy [SOL] Brings one creature back to life, up to 10 days after death. -# 255. - *Skill Empowerment* © (V,S) level 5 Divination [UB] +# 256. - *Skill Empowerment* © (V,S) level 5 Divination [UB] Your magic deepens a creature's understanding of its own talent. You touch one willing creature and give it expertise in one skill of your choice; until the spell ends, the creature doubles its proficiency bonus for ability checks it makes that use the chosen skill. For 1 hour, you have proficiency in the chosen skill. The spell ends early if you cast it again. You must choose a skill in which the target is proficient and that isn't already benefiting from expertise. -# 256. - Sonic Boom (V,S) level 5 Evocation [UB] +# 257. - Sonic Boom (V,S) level 5 Evocation [UB] A small orb the same color as the balloon used appears at a point you choose within range then expands with a loud crack into an explosion of force. Each creature in a 30-foot radius must make a Strength saving throw. A target is pushed up to 30 feet away from the center and dealt 6d8 thunder damage on a failed save, or half as much damage and no movement on a successful one. -# 257. - *Steel Wind Strike* © (M,S) level 5 Conjuration [UB] +# 258. - *Steel Wind Strike* © (M,S) level 5 Conjuration [UB] You flourish the weapon used in the casting and then vanish to strike like the wind. Choose up to five creatures you can see within range. Make a melee spell attack against each target. On a hit, a target takes 6d10 force damage. You can then teleport to an unoccupied space you can see within 5 feet of one of the targets you hit or missed. -# 258. - *Synaptic Static* © (V) level 5 Evocation [UB] +# 259. - *Synaptic Static* © (V) level 5 Evocation [UB] You choose a point within range and cause psychic energy to explode there. Each creature in a 20-foot-radius sphere centered on that point must make an Intelligence saving throw. A target takes 8d6 psychic damage on a failed save, or half as much damage on a successful After a failed save, a target has muddled thoughts for 1 minute. During that time, it rolls a d6 and subtracts the number rolled from all its attack rolls and ability checks. The target can make an Intelligence saving throw at the end of each of its turns, ending the effect on itself on a success. -# 259. - *Telekinesis* © (V,S) level 5 Transmutation [Concentration] [UB] +# 260. - *Telekinesis* © (V,S) level 5 Transmutation [Concentration] [UB] You can try to move a Huge or smaller creature. Make an ability check with your spellcasting ability contested by the creature's Strength check. If you win the contest, you move the creature up to 30 feet in any direction, but not beyond the range of this spell. Until the end of your next turn, the creature is restrained in your telekinetic grip. On subsequent rounds, you can use your action to attempt to maintain your telekinetic grip on the creature by repeating the contest, or target a new creature, ending the restrained effect on the previously affected creature. -# 260. - Blade Barrier (V,S) level 6 Evocation [Concentration] [SOL] +# 261. - Blade Barrier (V,S) level 6 Evocation [Concentration] [SOL] Conjures a wall of razor sharp blades which causes 6d10 slashing damage to anyone crossing it -# 261. - Chain Lightning (V,S) level 6 Evocation [SOL] +# 262. - Chain Lightning (V,S) level 6 Evocation [SOL] Target a creature with lightning, which can arc to 3 other targets within 6 cells. -# 262. - Circle of Death (M,V,S) level 6 Necromancy [SOL] +# 263. - Circle of Death (M,V,S) level 6 Necromancy [SOL] A sphere of negative energy causes Necrotic damage from a point you choose -# 263. - Conjure Fey (V,S) level 6 Conjuration [Concentration] [SOL] +# 264. - Conjure Fey (V,S) level 6 Conjuration [Concentration] [SOL] Conjures a fey creature of challenge rating 1 to 6 to fight alongside you. If you lose concentration, the creature stays but becomes hostile. -# 264. - Disintegrate (V,S) level 6 Transmutation [SOL] +# 265. - Disintegrate (V,S) level 6 Transmutation [SOL] Causes massive force damage on the target, which can be disintegrated if reduced to 0 hit points -# 265. - Eyebite (V,S) level 6 Necromancy [Concentration] [SOL] +# 266. - Eyebite (V,S) level 6 Necromancy [Concentration] [SOL] Your eyes gain a specific property which can target a creature each turn -# 266. - *Fizban's Platinum Shield* © (M,V,S) level 6 Abjuration [Concentration] [UB] +# 267. - *Fizban's Platinum Shield* © (M,V,S) level 6 Abjuration [Concentration] [UB] You create a field of silvery light that surrounds a creature of your choice within range. The field sheds dim light out to 5 feet. While surrounded by the field, a creature gains the following benefits: • The creature has half cover. @@ -1084,59 +1093,59 @@ You create a field of silvery light that surrounds a creature of your choice wit • If the creature is subjected to an effect that allows it to make a Dexterity saving throw to take only half damage, the creature instead takes no damage if it succeeds on the saving throw, and only half damage if it fails. As a bonus action on subsequent turns, you can move the field to another creature within 60 feet of the field. -# 267. - Flash Freeze (V,S) level 6 Evocation [UB] +# 268. - Flash Freeze (V,S) level 6 Evocation [UB] You attempt to encase a creature you can see within range in a prison of solid ice. The target must make a Dexterity saving throw. On a failed save, the target takes 10d6 cold damage and becomes restrained in layers of thick ice. On a successful save, the target takes half as much damage and is not restrained. The spell can only be used on creatures up to large size. To break out, the restrained target can make a Strength check as an action against your spell save DC. On success, the target escapes and is no longer restrained. When you cast this spell using a spell slot of 7th level or higher, the cold damage increases by 2d6 for each slot level above 6th. -# 268. - Freezing Sphere (V,S) level 6 Evocation [SOL] +# 269. - Freezing Sphere (V,S) level 6 Evocation [SOL] Toss a huge ball of cold energy that explodes on impact -# 269. - Globe Of Invulnerability (V,S) level 6 Abjuration [Concentration] [SOL] +# 270. - Globe Of Invulnerability (V,S) level 6 Abjuration [Concentration] [SOL] A sphere surrounding you prevents any spell up to 5th level to affect anyone inside it. -# 270. - Harm (V,S) level 6 Necromancy [SOL] +# 271. - Harm (V,S) level 6 Necromancy [SOL] Inflicts devastating necrotic damage and reduces the maximum hit points accordingly. Cannot drop the target below 1 hit points -# 271. - Heal (V,S) level 6 Evocation [SOL] +# 272. - Heal (V,S) level 6 Evocation [SOL] Heals 70 hit points and also removes blindness and diseases -# 272. - Heroes Feast (M,V,S) level 6 Conjuration [SOL] +# 273. - Heroes Feast (M,V,S) level 6 Conjuration [SOL] Summons a feast which cures most ailments and grants immunity to poisonand being frightened, WIS save advantage, and increased maximum hitpoints -# 273. - Hilarity (V) level 6 Enchantment [Concentration] [SOL] +# 274. - Hilarity (V) level 6 Enchantment [Concentration] [SOL] Choose one target. They fall down laughing, becoming prone and incapacitated, and take psychic damage until they save at the end of one of their turns, or until the spell ends. -# 274. - Poison Wave (M,V,S) level 6 Evocation [UB] +# 275. - Poison Wave (M,V,S) level 6 Evocation [UB] A poisonous wave erupts from you, engulfing those close by. Each creature within the spell's radius must make a Constitution saving throw, taking 6d10 poison damage on a failure, or half as much damage on a successful one. A creature who fails their saving throw is also poisoned for 1 minute, and can repeat the saving throw at the end of each of its turn. When you cast this spell using a slot of 7th level or higher, the damage increases by 1d10 for each slot level above 6th. -# 275. - Ring of Blades (M,V,S) level 6 Conjuration [Concentration] [UB] +# 276. - Ring of Blades (M,V,S) level 6 Conjuration [Concentration] [UB] You raise both hands as you evoke six transparent blades around you as a bonus action. When you cast this spell, and as a bonus action on each subsequent turn, you can throw one of these blades at a creature within 60 feet from you. Make a ranged spell attack. On a hit, the target takes 4d10 force damage. When you cast this spell using a spell slot of 7th level or higher, the damage of each blade increases by 1d10 for each slot level above 6th. -# 276. - *Scatter* © (V) level 6 Conjuration [UB] +# 277. - *Scatter* © (V) level 6 Conjuration [UB] The air quivers around up to five creatures of your choice that you can see within range. An unwilling creature must succeed on a Wisdom saving throw to resist this spell. You teleport each affected target to an unoccupied space that you can see within 120 feet of you. That space must be on the ground or on a floor. -# 277. - Shelter from Energy (V,S) level 6 Abjuration [UB] +# 278. - Shelter from Energy (V,S) level 6 Abjuration [UB] Choose one of the following damage types: acid, cold, fire, lightning, necrotic, radiant, or thunder, and then choose up to six willing creatures that you can see within range. For 1 hour, targets have resistance to that damage type. When you cast this spell using a spell slot of 7th level or higher, you may target up to one additional willing creature for each slot level above 6th. -# 278. - Sunbeam (V,S) level 6 Evocation [Concentration] [SOL] +# 279. - Sunbeam (V,S) level 6 Evocation [Concentration] [SOL] You conjure a line of radiance which can burn and blind creatures in the line of effect; undead and oozes save with disadvantage. The beam can be retargeted each turn -# 279. - *Tasha's Otherworldly Guise* © (M,V,S) level 6 Transmutation [Concentration] [UB] +# 280. - *Tasha's Otherworldly Guise* © (M,V,S) level 6 Transmutation [Concentration] [UB] Uttering an incantation, you draw on the magic of the Lower Planes or Upper Planes (your choice) to transform yourself. -# 280. - *Tenser's Transformation* © (V,S) level 6 Transmutation [Concentration] [UB] +# 281. - *Tenser's Transformation* © (V,S) level 6 Transmutation [Concentration] [UB] You endow yourself with endurance and martial prowess fueled by magic. Until the spell ends, you can't cast spells, and you gain the following benefits: • You gain 50 temporary hit points. If any of these remain when the spell ends, they are lost. @@ -1146,178 +1155,178 @@ You endow yourself with endurance and martial prowess fueled by magic. Until the • You can attack twice, instead of once, when you take the Attack action on your turn. Immediately after the spell ends, you must succeed on a DC 15 Constitution saving throw or suffer one level of exhaustion. -# 281. - True Seeing (V,S) level 6 Divination [SOL] +# 282. - True Seeing (V,S) level 6 Divination [SOL] A creature you touch gains True Sight for one hour -# 282. - Wall of Thorns (V,S) level 6 Conjuration [Concentration] [SOL] +# 283. - Wall of Thorns (V,S) level 6 Conjuration [Concentration] [SOL] Creates a wall of tough of needle-sharp thorns, that hurts and slows every creature in it. -# 283. - Arcane Sword (M,V,S) level 7 Evocation [Concentration] [SOL] +# 284. - Arcane Sword (M,V,S) level 7 Evocation [Concentration] [SOL] Summon a weapon that fights for you. -# 284. - Conjure Celestial (V,S) level 7 Conjuration [Concentration] [SOL] +# 285. - Conjure Celestial (V,S) level 7 Conjuration [Concentration] [SOL] Conjures a celestial creature of challenge rating 4 that fights alongside you. If you lose concentration, the creature is dismissed. -# 285. - *Crown of Stars* © (V,S) level 7 Evocation [UB] +# 286. - *Crown of Stars* © (V,S) level 7 Evocation [UB] Seven star-like motes of light appear and orbit your head until the spell ends. You can use a bonus action to send one of the motes streaking toward one creature or object within 120 feet of you. When you do so, make a ranged spell attack. On a hit, the target takes 4d12 radiant damage. Whether you hit or miss, the mote is expended. The spell ends early if you expend the last mote. If you have four or more motes remaining, they shed bright light in a 30-foot radius and dim light for an additional 30 feet. If you have one to three motes remaining, they shed dim light in a 30-foot radius. When you cast this spell using a spell slot of 8th level or higher, the number of motes created increases by two for each slot level above 7th. -# 286. - Delayed Blast Fireball (V,S) level 7 Evocation [Concentration] [SOL] +# 287. - Delayed Blast Fireball (V,S) level 7 Evocation [Concentration] [SOL] Conjures a ball of fire that grows more powerful with time, detonating when a creature enters its space or when the spell ends. -# 287. - Divine Word (V) level 7 Evocation [SOL] +# 288. - Divine Word (V) level 7 Evocation [SOL] Utter a divine word that inflicts various negative conditions on enemies you can see, based on their HP. Also banishes all celestials, elementals, feys, and fiends if they fail their saving throws. -# 288. - *Draconic Transformation* © (M,V,S) level 7 Transmutation [Concentration] [UB] +# 289. - *Draconic Transformation* © (M,V,S) level 7 Transmutation [Concentration] [UB] With a roar, you draw on the magic of dragons to transform yourself, taking on draconic features. You gain the following benefits until the spell ends: • You have blindsight with a range of 30 feet. • When you cast this spell, and as a bonus action on subsequent turns for the duration, you can exhale shimmering energy in a 60-foot cone. Each creature in that area must make a Dexterity saving throw, taking 6d8 force damage on a failed save, or half as much damage on a successful one. • Incorporeal wings sprout from your back, giving you a flying speed of 60 feet. -# 289. - Finger of Death (V,S) level 7 Necromancy [SOL] +# 290. - Finger of Death (V,S) level 7 Necromancy [SOL] Send negative energy coursing through a creature within range. -# 290. - Fire Storm (V,S) level 7 Evocation [SOL] +# 291. - Fire Storm (V,S) level 7 Evocation [SOL] Causes a wide wall of roaring flames to burst up wherever you choose within range. -# 291. - Gravity Slam (V,S) level 7 Transmutation [SOL] +# 292. - Gravity Slam (V,S) level 7 Transmutation [SOL] Increase gravity to slam everyone in a specific area onto the ground. -# 292. - Prismatic Spray (V,S) level 7 Evocation [SOL] +# 293. - Prismatic Spray (V,S) level 7 Evocation [SOL] Each creature within the cone of effect is randomly affected by one or two (roll 8 on d8) rays with the following effects: -# 293. - Regenerate (V,S) level 7 Transmutation [SOL] +# 294. - Regenerate (V,S) level 7 Transmutation [SOL] Touch a creature and stimulate its natural healing ability. -# 294. - Rescue the Dying (V) level 7 Transmutation [UB] +# 295. - Rescue the Dying (V) level 7 Transmutation [UB] With a word, you call positive energy into the target's body to heal and ward it. The target regains a number of hit points equal to 4d10 + 30. It also gains temporary hit points equal to half that amount and resistance to all damage, both lasting until the end of your next turn. When you cast this spell using a spell slot of 8th level or higher, the healing increases by 2d10 for each slot level above 7th. -# 295. - Resurrection (M,V,S) level 7 Necromancy [SOL] +# 296. - Resurrection (M,V,S) level 7 Necromancy [SOL] Brings one creature back to life, up to 100 years after death. -# 296. - *Reverse Gravity* © (V,S) level 7 Transmutation [Concentration] [UB] +# 297. - *Reverse Gravity* © (V,S) level 7 Transmutation [Concentration] [UB] This spell reverses gravity in a 50-foot-radius, 100-foot-high cylinder centered on a point within range. -# 297. - Symbol (V,S) level 7 Abjuration [SOL] +# 298. - Symbol (V,S) level 7 Abjuration [SOL] Inscribe a glyph on a surface. When an enemy starts its turn in the area or enters it, the glyph's effect is applied in a sphere with a 12-cell radius. -# 298. - *Abi-Dalzim's Horrid Wilting* © (V,S) level 8 Necromancy [UB] +# 299. - *Abi-Dalzim's Horrid Wilting* © (V,S) level 8 Necromancy [UB] You draw the moisture from every creature in a 30-foot cube centered on a point you choose within range. Each creature in that area must make a Constitution saving throw. Constructs and undead aren't affected, and plants and ice elementals make this saving throw with disadvantage. A creature takes 10d8 necrotic damage on a failed save, or half as much damage on a successful one. -# 299. - Divine Blade (V,S) level 8 Evocation [Concentration] [SOL] +# 300. - Divine Blade (V,S) level 8 Evocation [Concentration] [SOL] A glowing blade of pure energy springs from your hand. On a hit, the target takes 6d8 radiant damage and must roll a Wisdom saving throw to avoid being stunned until the end of its next turn. -# 300. - Dominate Monster (V,S) level 8 Enchantment [Concentration] [SOL] +# 301. - Dominate Monster (V,S) level 8 Enchantment [Concentration] [SOL] Grants you control over an enemy creature of any type. -# 301. - Earthquake (V,S) level 8 Evocation [Concentration] [SOL] +# 302. - Earthquake (V,S) level 8 Evocation [Concentration] [SOL] You create a seismic disturbance that violently shakes the ground and the creatures standing on it for the duration of the spell. -# 302. - Feeblemind (V,S) level 8 Enchantment [SOL] +# 303. - Feeblemind (V,S) level 8 Enchantment [SOL] You blast the mind of one creature, attempting to shatter its intellect and personality. The target takes 4d6 psychic damage and must make an Intelligence saving throw. On a failed save, the creature's Intelligence, Charisma and Wisdom scores become 1 and it is unable to cast spells. These effects last for 1 minute. -# 303. - Holy Aura (V,S) level 8 Abjuration [Concentration] [SOL] +# 304. - Holy Aura (V,S) level 8 Abjuration [Concentration] [SOL] Allies within 6 cells of you when you cast Holy Aura gain advantage on all saving throws, and other creatures have disadvantage on attack rolls against them until the spell ends. In addition, when a fiend or an undead hits an affected creature with a melee attack, they must succeed on a Constitution saving throw or be blinded until the spell ends. -# 304. - Incendiary Cloud (V,S) level 8 Conjuration [Concentration] [SOL] +# 305. - Incendiary Cloud (V,S) level 8 Conjuration [Concentration] [SOL] A cloud of smoke appears in a sphere with a 4-cell radius. The cloud damages each creature inside it, and moves away from you each turn until the end of the spell's duration or until a moderate wind disperses the cloud. -# 305. - *Maddening Darkness* © (V) level 8 Evocation [Concentration] [UB] +# 306. - *Maddening Darkness* © (V) level 8 Evocation [Concentration] [UB] Magical darkness spreads from a point you choose within range to fill a 60-foot-radius sphere until the spell ends. Shrieks, gibbering, and mad laughter can be heard within the sphere. On activation, and whenever a creature ends its turn in the sphere, it must make a Wisdom saving throw, taking 6d8 psychic damage on a failed save, or half as much damage on a successful one. -# 306. - Maze (V,S) level 8 Abjuration [Concentration] [SOL] +# 307. - Maze (V,S) level 8 Abjuration [Concentration] [SOL] You banish a creature that you can see within range into a labyrinthine demiplane. The target remains there for the spell's duration or until it escapes the maze. -# 307. - *Mind Blank* © (V,S) level 8 Transmutation [UB] +# 308. - *Mind Blank* © (V,S) level 8 Transmutation [UB] Until the spell ends, one willing creature you touch is immune to psychic damage, any effect that would sense its emotions or read its thoughts, divination spells, and the charmed condition. -# 308. - Power Word Stun (V) level 8 Enchantment [SOL] +# 309. - Power Word Stun (V) level 8 Enchantment [SOL] Overwhelm the mind of a creature that has 150 hit points or fewer, leaving it stunned. -# 309. - Soul Expulsion (V,S) level 8 Necromancy [UB] +# 310. - Soul Expulsion (V,S) level 8 Necromancy [UB] You blast a foe's soul with magical power, causing it to glow with otherwordly light. Choose one creature that you can see within range, which must make a Charisma saving throw. On a failed saving throw, the target takes 11d8 necrotic damage and is stunned until the start of your next turn. On a successful saving throw, the target takes half damage and isn't stunned. Each enemy other than the target that is within 60 feet of the target must make a Wisdom saving throw. On a failed save, a creature takes 7d8 radiant damage and has disadvantage on attack rolls until the end of your next turn. On a successful saving throw a creature takes half damage and nothing else. When this spell targets undead, the spell ignores any resistance or immunity to necrotic damage, and the target has disadvantage on the saving throw. When you cast this spell using a spell slot of 9th level, both the necrotic damage and radiant damage increase by 2d8. -# 310. - Spell Ward (V,S) level 8 Abjuration [Concentration] [SOL] +# 311. - Spell Ward (V,S) level 8 Abjuration [Concentration] [SOL] Creates a mobile globe that is impenetrable to enemy spells cast from outside it. -# 311. - Sunburst (V,S) level 8 Evocation [SOL] +# 312. - Sunburst (V,S) level 8 Evocation [SOL] Brilliant sunlight blazes in a sphere with a 12-cell radius. Each creature that fails a Constitution saving throw takes radiant damage and is blinded for 1 minute. Any darkness created by a spell in the area is dispelled. -# 312. - Thunderstorm (V,S) level 8 Transmutation [SOL] +# 313. - Thunderstorm (V,S) level 8 Transmutation [SOL] You create a blast of thunder in a sphere that causes thunder and lightning damage to everyone, and can blind or stun those who fail a CON saving throw. -# 313. - Wild Shapes (V,S) level 8 Transmutation [Concentration] [SOL] +# 314. - Wild Shapes (V,S) level 8 Transmutation [Concentration] [SOL] Turns other creatures in to beasts for one day. -# 314. - *Foresight* © (V,S) level 9 Transmutation [UB] +# 315. - *Foresight* © (V,S) level 9 Transmutation [UB] You touch a willing creature and bestow a limited ability to see into the immediate future. For the duration, the target can't be surprised and has advantage on attack rolls, ability checks, and saving throws. Additionally, other creatures have disadvantage on attack rolls against the target for the duration. -# 315. - *Invulnerability* © (M,V,S) level 9 Abjuration [Concentration] [UB] +# 316. - *Invulnerability* © (M,V,S) level 9 Abjuration [Concentration] [UB] You are immune to all damage until the spell ends. -# 316. - *Mass Heal* © (V,S) level 9 Transmutation [UB] +# 317. - *Mass Heal* © (V,S) level 9 Transmutation [UB] A flood of healing energy flows from you into injured creatures around you. You restore 120 hit points each to 6 creatures that you can see within range. Creatures healed by this spell are also cured of all diseases and any effect making them blinded or deafened. This spell has no effect on undead or constructs. -# 317. - *Meteor Swarm* © (V,S) level 9 Transmutation [UB] +# 318. - *Meteor Swarm* © (V,S) level 9 Transmutation [UB] Blazing orbs of fire plummet to the ground at a single point you can see within range. Each creature in a 40-foot-radius sphere centered on the point you choose must make a Dexterity saving throw. The sphere spreads around corners. A creature takes 20d6 fire damage and 20d6 bludgeoning damage on a failed save, or half as much damage on a successful one. A creature in the area of more than one fiery burst is affected only once. -# 318. - *Power Word Heal* © (V,S) level 9 Enchantment [UB] +# 319. - *Power Word Heal* © (V,S) level 9 Enchantment [UB] A wave of healing energy washes over the creature you touch. The target regains all its hit points. If the creature is charmed, frightened, paralyzed, or stunned, the condition ends. If the creature is prone, it can use its reaction to stand up. This spell has no effect on undead or constructs. -# 319. - *Power Word Kill* © (V,S) level 9 Transmutation [UB] +# 320. - *Power Word Kill* © (V,S) level 9 Transmutation [UB] You utter a word of power that can compel one creature you can see within range to die instantly. If the creature you choose has 100 hit points or fewer, it dies. Otherwise, the spell has no effect. -# 320. - *Psychic Scream* © (S) level 9 Enchantment [UB] +# 321. - *Psychic Scream* © (S) level 9 Enchantment [UB] You unleash the power of your mind to blast the intellect of up to ten creatures of your choice that you can see within range. Each target must make an Intelligence saving throw. On a failed save, a target takes 14d6 psychic damage and is stunned for 1 minute. On a successful save, a target takes half as much damage and isn't stunned. A stunned target can make an Intelligence saving throw at the end of each of its turns. On a successful save, the stunning effect ends. -# 321. - *Shapechange* © (M,V,S) level 9 Transmutation [Concentration] [UB] +# 322. - *Shapechange* © (M,V,S) level 9 Transmutation [Concentration] [UB] You assume the form of a different creature for the duration. The new form can be of any creature with a challenge rating equal to your level or lower. -# 322. - *Time Stop* © (V) level 9 Transmutation [UB] +# 323. - *Time Stop* © (V) level 9 Transmutation [UB] You briefly stop the flow of time for everyone but yourself. No time passes for other creatures, while you take 1d4+1 turns in a row, during which you can use actions and move as normal. This spell ends if one of the actions you use during this period, or any effects that you create during this period, affects a creature other than you. -# 323. - *Weird* © (V,S) level 9 Illusion [Concentration] [UB] +# 324. - *Weird* © (V,S) level 9 Illusion [Concentration] [UB] Drawing on the deepest fears of a group of creatures, you create illusory creatures in their minds, visible only to them. Each enemy in a 30-foot-radius sphere centered on a point of your choice within range must make a Wisdom saving throw. On a failed save, a creature becomes frightened for the duration. The illusion calls on the creature's deepest fears, manifesting its worst nightmares as an implacable threat. At the end of each of the frightened creature's turns, it must succeed on a Wisdom saving throw or take 4d10 psychic damage. On a successful save, the spell ends for that creature. From f45f637273ed1abcd1e3afe47555dcb58c2c00e5 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Tue, 3 Sep 2024 10:58:41 -0700 Subject: [PATCH 026/212] add Command reaction texts --- .../Translations/de/Spells/Spells01-de.txt | 4 ++++ .../Translations/en/Spells/Spells01-en.txt | 5 ++++- .../Translations/es/Spells/Spells01-es.txt | 4 ++++ .../Translations/fr/Spells/Spells01-fr.txt | 4 ++++ .../Translations/it/Spells/Spells01-it.txt | 4 ++++ .../Translations/ja/Spells/Spells01-ja.txt | 4 ++++ .../Translations/ko/Spells/Spells01-ko.txt | 4 ++++ .../Translations/pt-BR/Spells/Spells01-pt-BR.txt | 4 ++++ .../Translations/ru/Spells/Spells01-ru.txt | 4 ++++ .../Translations/zh-CN/Spells/Spells01-zh-CN.txt | 4 ++++ 10 files changed, 40 insertions(+), 1 deletion(-) diff --git a/SolastaUnfinishedBusiness/Translations/de/Spells/Spells01-de.txt b/SolastaUnfinishedBusiness/Translations/de/Spells/Spells01-de.txt index 0751bffd18..76e7b22003 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Spells/Spells01-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Spells/Spells01-de.txt @@ -71,6 +71,10 @@ Reaction/&ReactionSpendPowerBundleChaosBoltDescription=Wählen Sie eine Schadens Reaction/&ReactionSpendPowerBundleChaosBoltReactDescription=Wählen Sie eine Schadensart. Reaction/&ReactionSpendPowerBundleChaosBoltReactTitle=Chaosblitz Reaction/&ReactionSpendPowerBundleChaosBoltTitle=Chaosblitz +Reaction/&ReactionSpendPowerBundleCommandSpellDescription=Wählen Sie Ihren Befehl. +Reaction/&ReactionSpendPowerBundleCommandSpellReactDescription=Wählen Sie Ihren Befehl. +Reaction/&ReactionSpendPowerBundleCommandSpellReactTitle=Befehl +Reaction/&ReactionSpendPowerBundleCommandSpellTitle=Befehl Reaction/&SpendSpellSlotElementalInfusionDescription=Sie können resistent gegen eingehenden Elementarschaden werden und bei Ihrem nächsten Angriff zusätzlichen 1W6 Elementarschaden pro Zauberplatzstufe verursachen. Reaction/&SpendSpellSlotElementalInfusionReactDescription=Absorbieren Sie das eingehende Schadenselement Reaction/&SpendSpellSlotElementalInfusionReactTitle=Element absorbieren diff --git a/SolastaUnfinishedBusiness/Translations/en/Spells/Spells01-en.txt b/SolastaUnfinishedBusiness/Translations/en/Spells/Spells01-en.txt index b063214914..72d3a8251b 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Spells/Spells01-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Spells/Spells01-en.txt @@ -71,7 +71,10 @@ Reaction/&ReactionSpendPowerBundleChaosBoltDescription=Choose a damage type. Reaction/&ReactionSpendPowerBundleChaosBoltReactDescription=Choose a damage type. Reaction/&ReactionSpendPowerBundleChaosBoltReactTitle=Chaos Bolt Reaction/&ReactionSpendPowerBundleChaosBoltTitle=Chaos Bolt -Reaction/&SpendSpellSlotElementalInfusionDescription=You can become resistant to incoming elemental damage and deal additional 1d6 elemental damage per spell slot level on your next attack. +Reaction/&ReactionSpendPowerBundleCommandSpellDescription=Choose your command. +Reaction/&ReactionSpendPowerBundleCommandSpellReactDescription=Choose your command. +Reaction/&ReactionSpendPowerBundleCommandSpellReactTitle=Command +Reaction/&ReactionSpendPowerBundleCommandSpellTitle=CommandReaction/&SpendSpellSlotElementalInfusionDescription=You can become resistant to incoming elemental damage and deal additional 1d6 elemental damage per spell slot level on your next attack. Reaction/&SpendSpellSlotElementalInfusionReactDescription=Absorb the incoming damage element Reaction/&SpendSpellSlotElementalInfusionReactTitle=Absorb Element Reaction/&SpendSpellSlotElementalInfusionTitle=Incoming Element Attack! diff --git a/SolastaUnfinishedBusiness/Translations/es/Spells/Spells01-es.txt b/SolastaUnfinishedBusiness/Translations/es/Spells/Spells01-es.txt index 0f490b915c..6f9e41c776 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Spells/Spells01-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Spells/Spells01-es.txt @@ -71,6 +71,10 @@ Reaction/&ReactionSpendPowerBundleChaosBoltDescription=Elija un tipo de daño. Reaction/&ReactionSpendPowerBundleChaosBoltReactDescription=Elija un tipo de daño. Reaction/&ReactionSpendPowerBundleChaosBoltReactTitle=Rayo del caos Reaction/&ReactionSpendPowerBundleChaosBoltTitle=Descarga del caos +Reaction/&ReactionSpendPowerBundleCommandSpellDescription=Elige tu comando. +Reaction/&ReactionSpendPowerBundleCommandSpellReactDescription=Elige tu comando. +Reaction/&ReactionSpendPowerBundleCommandSpellReactTitle=Dominio +Reaction/&ReactionSpendPowerBundleCommandSpellTitle=Dominio Reaction/&SpendSpellSlotElementalInfusionDescription=Puedes volverte resistente al daño elemental entrante y causar 1d6 de daño elemental adicional por nivel de espacio de hechizo en tu próximo ataque. Reaction/&SpendSpellSlotElementalInfusionReactDescription=Absorber el elemento de daño entrante Reaction/&SpendSpellSlotElementalInfusionReactTitle=Elemento absorbente diff --git a/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells01-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells01-fr.txt index 1121bf2f49..2f131abe96 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells01-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells01-fr.txt @@ -71,6 +71,10 @@ Reaction/&ReactionSpendPowerBundleChaosBoltDescription=Choisissez un type de dé Reaction/&ReactionSpendPowerBundleChaosBoltReactDescription=Choisissez un type de dégâts. Reaction/&ReactionSpendPowerBundleChaosBoltReactTitle=Éclair du chaos Reaction/&ReactionSpendPowerBundleChaosBoltTitle=Éclair du chaos +Reaction/&ReactionSpendPowerBundleCommandSpellDescription=Choisissez votre commande. +Reaction/&ReactionSpendPowerBundleCommandSpellReactDescription=Choisissez votre commande. +Reaction/&ReactionSpendPowerBundleCommandSpellReactTitle=Commande +Reaction/&ReactionSpendPowerBundleCommandSpellTitle=Commande Reaction/&SpendSpellSlotElementalInfusionDescription=Vous pouvez devenir résistant aux dégâts élémentaires entrants et infliger 1d6 dégâts élémentaires supplémentaires par niveau d'emplacement de sort lors de votre prochaine attaque. Reaction/&SpendSpellSlotElementalInfusionReactDescription=Absorber l'élément de dégâts entrant Reaction/&SpendSpellSlotElementalInfusionReactTitle=Absorber l'élément diff --git a/SolastaUnfinishedBusiness/Translations/it/Spells/Spells01-it.txt b/SolastaUnfinishedBusiness/Translations/it/Spells/Spells01-it.txt index 5d24565cac..e77f77f79d 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Spells/Spells01-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Spells/Spells01-it.txt @@ -71,6 +71,10 @@ Reaction/&ReactionSpendPowerBundleChaosBoltDescription=Scegli un tipo di danno. Reaction/&ReactionSpendPowerBundleChaosBoltReactDescription=Scegli un tipo di danno. Reaction/&ReactionSpendPowerBundleChaosBoltReactTitle=Fulmine del Caos Reaction/&ReactionSpendPowerBundleChaosBoltTitle=Fulmine del Caos +Reaction/&ReactionSpendPowerBundleCommandSpellDescription=Scegli il tuo comando. +Reaction/&ReactionSpendPowerBundleCommandSpellReactDescription=Scegli il tuo comando. +Reaction/&ReactionSpendPowerBundleCommandSpellReactTitle=Comando +Reaction/&ReactionSpendPowerBundleCommandSpellTitle=Comando Reaction/&SpendSpellSlotElementalInfusionDescription=Puoi diventare resistente ai danni elementali in arrivo e infliggere 1d6 danni elementali aggiuntivi per livello dello slot incantesimo al tuo prossimo attacco. Reaction/&SpendSpellSlotElementalInfusionReactDescription=Assorbe l'elemento danno in arrivo Reaction/&SpendSpellSlotElementalInfusionReactTitle=Assorbi Elemento diff --git a/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells01-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells01-ja.txt index 36d0742619..9861863365 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells01-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells01-ja.txt @@ -71,6 +71,10 @@ Reaction/&ReactionSpendPowerBundleChaosBoltDescription=ダメージタイプを Reaction/&ReactionSpendPowerBundleChaosBoltReactDescription=ダメージタイプを選択してください。 Reaction/&ReactionSpendPowerBundleChaosBoltReactTitle=カオスボルト Reaction/&ReactionSpendPowerBundleChaosBoltTitle=カオスボルト +Reaction/&ReactionSpendPowerBundleCommandSpellDescription=コマンドを選択してください。 +Reaction/&ReactionSpendPowerBundleCommandSpellReactDescription=コマンドを選択してください。 +Reaction/&ReactionSpendPowerBundleCommandSpellReactTitle=指示 +Reaction/&ReactionSpendPowerBundleCommandSpellTitle=指示 Reaction/&SpendSpellSlotElementalInfusionDescription=あなたは受ける属性ダメージに対して耐性を持ち、次の攻撃時に呪文スロット レベルごとに追加の 1d6 属性ダメージを与えることができます。 Reaction/&SpendSpellSlotElementalInfusionReactDescription=受けるダメージ要素を吸収する Reaction/&SpendSpellSlotElementalInfusionReactTitle=エレメントを吸収 diff --git a/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells01-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells01-ko.txt index 906e809176..a0a30a9056 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells01-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells01-ko.txt @@ -71,6 +71,10 @@ Reaction/&ReactionSpendPowerBundleChaosBoltDescription=손상 유형을 선택 Reaction/&ReactionSpendPowerBundleChaosBoltReactDescription=손상 유형을 선택하세요. Reaction/&ReactionSpendPowerBundleChaosBoltReactTitle=카오스볼트 Reaction/&ReactionSpendPowerBundleChaosBoltTitle=카오스볼트 +Reaction/&ReactionSpendPowerBundleCommandSpellDescription=명령을 선택하세요. +Reaction/&ReactionSpendPowerBundleCommandSpellReactDescription=명령을 선택하세요. +Reaction/&ReactionSpendPowerBundleCommandSpellReactTitle=명령 +Reaction/&ReactionSpendPowerBundleCommandSpellTitle=명령 Reaction/&SpendSpellSlotElementalInfusionDescription=들어오는 원소 피해에 대한 저항력을 갖게 되며 다음 공격 시 주문 슬롯 레벨당 1d6 원소 피해를 추가로 입힐 수 있습니다. Reaction/&SpendSpellSlotElementalInfusionReactDescription=들어오는 피해 요소를 흡수합니다. Reaction/&SpendSpellSlotElementalInfusionReactTitle=요소를 흡수 diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells01-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells01-pt-BR.txt index 65aa7c3116..e90adf0fd5 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells01-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells01-pt-BR.txt @@ -71,6 +71,10 @@ Reaction/&ReactionSpendPowerBundleChaosBoltDescription=Escolha um tipo de dano. Reaction/&ReactionSpendPowerBundleChaosBoltReactDescription=Escolha um tipo de dano. Reaction/&ReactionSpendPowerBundleChaosBoltReactTitle=Raio do Caos Reaction/&ReactionSpendPowerBundleChaosBoltTitle=Raio do Caos +Reaction/&ReactionSpendPowerBundleCommandSpellDescription=Escolha seu comando. +Reaction/&ReactionSpendPowerBundleCommandSpellReactDescription=Escolha seu comando. +Reaction/&ReactionSpendPowerBundleCommandSpellReactTitle=Comando +Reaction/&ReactionSpendPowerBundleCommandSpellTitle=Comando Reaction/&SpendSpellSlotElementalInfusionDescription=Você pode se tornar resistente a dano elemental e causar 1d6 de dano elemental adicional por nível de magia no seu próximo ataque. Reaction/&SpendSpellSlotElementalInfusionReactDescription=Absorva o elemento de dano recebido Reaction/&SpendSpellSlotElementalInfusionReactTitle=Absorver Elemento diff --git a/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells01-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells01-ru.txt index 69b1002e9e..aa7e14ecbd 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells01-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells01-ru.txt @@ -71,6 +71,10 @@ Reaction/&ReactionSpendPowerBundleChaosBoltDescription=Выберите тип Reaction/&ReactionSpendPowerBundleChaosBoltReactDescription=Выберите тип урона. Reaction/&ReactionSpendPowerBundleChaosBoltReactTitle=Снаряд хаоса Reaction/&ReactionSpendPowerBundleChaosBoltTitle=Снаряд хаоса +Reaction/&ReactionSpendPowerBundleCommandSpellDescription=Выберите команду. +Reaction/&ReactionSpendPowerBundleCommandSpellReactDescription=Выберите команду. +Reaction/&ReactionSpendPowerBundleCommandSpellReactTitle=Команда +Reaction/&ReactionSpendPowerBundleCommandSpellTitle=Команда Reaction/&SpendSpellSlotElementalInfusionDescription=Вы можете получить сопротивление входящему стихийному урону и при следующей атаке нанести дополнительно 1d6 стихийного урона за уровень ячейки заклинания. Reaction/&SpendSpellSlotElementalInfusionReactDescription=Поглощает стихию входящего урона Reaction/&SpendSpellSlotElementalInfusionReactTitle=Поглотить стихию diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells01-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells01-zh-CN.txt index 42b6c2bf16..63adc9c36b 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells01-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells01-zh-CN.txt @@ -71,6 +71,10 @@ Reaction/&ReactionSpendPowerBundleChaosBoltDescription=选择伤害类型。 Reaction/&ReactionSpendPowerBundleChaosBoltReactDescription=选择伤害类型。 Reaction/&ReactionSpendPowerBundleChaosBoltReactTitle=混乱箭 Reaction/&ReactionSpendPowerBundleChaosBoltTitle=混乱箭 +Reaction/&ReactionSpendPowerBundleCommandSpellDescription=选择您的命令。 +Reaction/&ReactionSpendPowerBundleCommandSpellReactDescription=选择您的命令。 +Reaction/&ReactionSpendPowerBundleCommandSpellReactTitle=命令 +Reaction/&ReactionSpendPowerBundleCommandSpellTitle=命令 Reaction/&SpendSpellSlotElementalInfusionDescription=你可以抵抗来袭的元素伤害,并在下次攻击时每法术位环阶造成额外 1d6 元素伤害。 Reaction/&SpendSpellSlotElementalInfusionReactDescription=吸收来袭的伤害元素 Reaction/&SpendSpellSlotElementalInfusionReactTitle=吸收元素 From 2cf205ed2d3117c1c58f9ca49a65caacf0ee03a4 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Tue, 3 Sep 2024 20:56:06 -0700 Subject: [PATCH 027/212] add brain support code --- .../Builders/ConditionDefinitionBuilder.cs | 10 ++ .../DecisionPackageDefinitionBuilder.cs | 68 +++++++++++ .../ActivitiesBreakFreePatcher.cs | 5 +- ...ionsInfluenceFearSourceProximityPatcher.cs | 108 ++++++++++++++++++ 4 files changed, 188 insertions(+), 3 deletions(-) create mode 100644 SolastaUnfinishedBusiness/Builders/DecisionPackageDefinitionBuilder.cs rename SolastaUnfinishedBusiness/Patches/{ => Activities}/ActivitiesBreakFreePatcher.cs (97%) create mode 100644 SolastaUnfinishedBusiness/Patches/Considerations/ConsiderationsInfluenceFearSourceProximityPatcher.cs diff --git a/SolastaUnfinishedBusiness/Builders/ConditionDefinitionBuilder.cs b/SolastaUnfinishedBusiness/Builders/ConditionDefinitionBuilder.cs index b621d2ec40..0d680fc1fc 100644 --- a/SolastaUnfinishedBusiness/Builders/ConditionDefinitionBuilder.cs +++ b/SolastaUnfinishedBusiness/Builders/ConditionDefinitionBuilder.cs @@ -4,6 +4,7 @@ using JetBrains.Annotations; using SolastaUnfinishedBusiness.Api.GameExtensions; using SolastaUnfinishedBusiness.Api.LanguageExtensions; +using TA.AI; using UnityEngine.AddressableAssets; using static RuleDefinitions; @@ -46,6 +47,15 @@ internal ConditionDefinitionBuilder AllowMultipleInstances() return this; } + internal ConditionDefinitionBuilder SetBrain( + DecisionPackageDefinition battlePackage, bool forceBehavior, bool fearSource) + { + Definition.battlePackage = battlePackage; + Definition.forceBehavior = forceBehavior; + Definition.fearSource = fearSource; + return this; + } + internal ConditionDefinitionBuilder SetCancellingConditions(params ConditionDefinition[] values) { Definition.cancellingConditions.SetRange(values); diff --git a/SolastaUnfinishedBusiness/Builders/DecisionPackageDefinitionBuilder.cs b/SolastaUnfinishedBusiness/Builders/DecisionPackageDefinitionBuilder.cs new file mode 100644 index 0000000000..41a96033ec --- /dev/null +++ b/SolastaUnfinishedBusiness/Builders/DecisionPackageDefinitionBuilder.cs @@ -0,0 +1,68 @@ +using System; +using JetBrains.Annotations; +using SolastaUnfinishedBusiness.Api.LanguageExtensions; +using TA.AI; + +namespace SolastaUnfinishedBusiness.Builders; + +[UsedImplicitly] +internal class DecisionPackageDefinitionBuilder + : DefinitionBuilder +{ +#if false + internal DecisionPackageDefinitionBuilder AddWeightedDecisions( + params WeightedDecisionDescription[] weightedDecisionDescription) + { + Definition.Package.WeightedDecisions.AddRange(weightedDecisionDescription); + + return this; + } +#endif + + internal DecisionPackageDefinitionBuilder SetWeightedDecisions( + params WeightedDecisionDescription[] weightedDecisionDescription) + { + Definition.Package.WeightedDecisions.SetRange(weightedDecisionDescription); + + return this; + } + +#if false + internal DecisionPackageDefinitionBuilder CopyWeightedDecisions( + DecisionPackageDefinition decisionPackageDefinition, params int[] indexes) + { + var weightedDecisions = decisionPackageDefinition.Package.WeightedDecisions; + + if (indexes.Length == 0) + { + Definition.Package.WeightedDecisions.SetRange(weightedDecisions + .Select(d => d.DeepCopy())); + } + else + { + foreach (var index in indexes) + { + if (index < weightedDecisions.Count) + { + Definition.Package.WeightedDecisions.Add(weightedDecisions[index]); + } + } + } + + return this; + } +#endif + + #region Constructors + + protected DecisionPackageDefinitionBuilder(string name, Guid namespaceGuid) : base(name, namespaceGuid) + { + } + + protected DecisionPackageDefinitionBuilder(DecisionPackageDefinition original, string name, Guid namespaceGuid) + : base(original, name, namespaceGuid) + { + } + + #endregion +} diff --git a/SolastaUnfinishedBusiness/Patches/ActivitiesBreakFreePatcher.cs b/SolastaUnfinishedBusiness/Patches/Activities/ActivitiesBreakFreePatcher.cs similarity index 97% rename from SolastaUnfinishedBusiness/Patches/ActivitiesBreakFreePatcher.cs rename to SolastaUnfinishedBusiness/Patches/Activities/ActivitiesBreakFreePatcher.cs index 1c1157b05c..ae207d98ac 100644 --- a/SolastaUnfinishedBusiness/Patches/ActivitiesBreakFreePatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/Activities/ActivitiesBreakFreePatcher.cs @@ -10,10 +10,10 @@ using TA.AI.Activities; using static RuleDefinitions; -namespace SolastaUnfinishedBusiness.Patches; +namespace SolastaUnfinishedBusiness.Patches.Activities; [UsedImplicitly] -public static class ActivitiesBreakFreePatcher +public static class BreakFreePatcher { [HarmonyPatch(typeof(BreakFree), nameof(BreakFree.ExecuteImpl))] [SuppressMessage("Minor Code Smell", "S101:Types should be named in PascalCase", Justification = "Patch")] @@ -23,7 +23,6 @@ public static class BreakFree_Patch [UsedImplicitly] public static IEnumerator Postfix( [NotNull] IEnumerator values, - [NotNull] BreakFree __instance, AiLocationCharacter character, DecisionDefinition decisionDefinition) { diff --git a/SolastaUnfinishedBusiness/Patches/Considerations/ConsiderationsInfluenceFearSourceProximityPatcher.cs b/SolastaUnfinishedBusiness/Patches/Considerations/ConsiderationsInfluenceFearSourceProximityPatcher.cs new file mode 100644 index 0000000000..06a320cf0b --- /dev/null +++ b/SolastaUnfinishedBusiness/Patches/Considerations/ConsiderationsInfluenceFearSourceProximityPatcher.cs @@ -0,0 +1,108 @@ +using System.Diagnostics.CodeAnalysis; +using System.Linq; +using HarmonyLib; +using JetBrains.Annotations; +using TA.AI; +using TA.AI.Considerations; +using UnityEngine; + +namespace SolastaUnfinishedBusiness.Patches.Considerations; + +[UsedImplicitly] +public static class InfluenceFearSourceProximityPatcher +{ + //PATCH: allows this influence to be reverted if boolSecParameter is true + //used on Command Spell, approach command + [HarmonyPatch(typeof(InfluenceFearSourceProximity), nameof(InfluenceFearSourceProximity.Score))] + [SuppressMessage("Minor Code Smell", "S101:Types should be named in PascalCase", Justification = "Patch")] + [UsedImplicitly] + public static class Score_Patch + { + [UsedImplicitly] + public static bool Prefix( + DecisionContext context, + ConsiderationDescription consideration, + DecisionParameters parameters, + ScoringResult scoringResult) + { + Score(context, consideration, parameters, scoringResult); + + return false; + } + + // mainly vanilla code except for BEGIN/END blocks + private static void Score( + DecisionContext context, + ConsiderationDescription consideration, + DecisionParameters parameters, + ScoringResult scoringResult) + { + var denominator = consideration.IntParameter > 0 ? consideration.IntParameter : 1; + var floatParameter = consideration.FloatParameter; + var position = consideration.BoolParameter + ? context.position + : parameters.character.GameLocationCharacter.LocationPosition; + var numerator = 0.0f; + var rulesetCharacter = parameters.character.GameLocationCharacter.RulesetCharacter; + + foreach (var rulesetCondition in rulesetCharacter.ConditionsByCategory + .SelectMany(kvp => kvp.Value + .Where(rulesetCondition => + rulesetCondition.ConditionDefinition.ForceBehavior && + rulesetCondition.ConditionDefinition.FearSource))) + { + // ReSharper disable once ForeachCanBePartlyConvertedToQueryUsingAnotherGetEnumerator + foreach (var relevantEnemy in parameters.situationalInformation.RelevantEnemies) + { + if (relevantEnemy.Guid != rulesetCondition.SourceGuid) + { + continue; + } + + var distance = + parameters.situationalInformation.PositioningService + .ComputeDistanceBetweenCharactersApproximatingSize( + parameters.character.GameLocationCharacter, position, + relevantEnemy, relevantEnemy.LocationPosition); + + //BEGIN PATCH + if (consideration.boolSecParameter) + { + distance = floatParameter - distance + 1; + } + //END PATCH + + numerator += Mathf.Lerp(1f, 0.0f, Mathf.Clamp(distance / floatParameter, 0.0f, 1f)); + break; + } + + // ReSharper disable once ForeachCanBePartlyConvertedToQueryUsingAnotherGetEnumerator + foreach (var relevantAlly in parameters.situationalInformation.RelevantAllies) + { + if (relevantAlly.Guid != rulesetCondition.SourceGuid) + { + continue; + } + + var distance = + parameters.situationalInformation.PositioningService + .ComputeDistanceBetweenCharactersApproximatingSize( + parameters.character.GameLocationCharacter, position, relevantAlly, + relevantAlly.LocationPosition); + + //BEGIN PATCH + if (consideration.boolSecParameter) + { + distance = floatParameter - distance + 1; + } + //END PATCH + + numerator += Mathf.Lerp(1f, 0.0f, Mathf.Clamp(distance / floatParameter, 0.0f, 1f)); + break; + } + } + + scoringResult.Score = numerator / denominator; + } + } +} From ee941f5713333ab86f650dc040b4aaff3b0d1fdb Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Tue, 3 Sep 2024 20:57:54 -0700 Subject: [PATCH 028/212] add Command spell --- .../UnfinishedBusinessBlueprints/Assets.txt | 2 + .../ConditionCommandSpellApproach.json | 26 ++- .../ConditionCommandSpellFlee.json | 189 +++------------ .../ConditionCommandSpellGrovel.json | 16 +- .../ConditionCommandSpellHalt.json | 18 +- .../ConditionCommandSpellSelf.json | 4 +- .../DecisionDefinition/Move_Approach.json | 116 ++++++++++ .../DecisionPackageDefinition/Approach.json | 38 +++ .../PowerCommandSpellApproach.json | 4 +- .../PowerCommandSpellFlee.json | 6 +- .../PowerCommandSpellGrovel.json | 4 +- .../PowerCommandSpellHalt.json | 4 +- .../UnfinishedBusinessBlueprints/Types.txt | 1 + Documentation/Spells.md | 4 +- .../Api/DatabaseHelper-RELEASE.cs | 8 +- .../ChangelogHistory.txt | 15 ++ .../Models/SpellsContext.cs | 1 + .../Resources/Spells/DissonantWhispers.png | Bin 12849 -> 11518 bytes .../Spells/SpellBuildersLevel01.cs | 219 +++++++++++------- .../Translations/de/Spells/Spells01-de.txt | 4 +- .../Translations/en/Spells/Spells01-en.txt | 7 +- .../Translations/es/Spells/Spells01-es.txt | 4 +- .../Translations/fr/Spells/Spells01-fr.txt | 4 +- .../Translations/it/Spells/Spells01-it.txt | 4 +- .../Translations/ja/Spells/Spells01-ja.txt | 4 +- .../Translations/ko/Spells/Spells01-ko.txt | 4 +- .../pt-BR/Spells/Spells01-pt-BR.txt | 4 +- .../Translations/ru/Spells/Spells01-ru.txt | 4 +- .../zh-CN/Spells/Spells01-zh-CN.txt | 4 +- 29 files changed, 408 insertions(+), 310 deletions(-) create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/Move_Approach.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/Approach.json diff --git a/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt b/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt index 8b7d203d94..358f7628f8 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt +++ b/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt @@ -1242,6 +1242,8 @@ DecisionBreakFreeConditionGrappledRestrainedSpellWeb TA.AI.DecisionDefinition TA DecisionBreakFreeConditionNoxiousSpray TA.AI.DecisionDefinition TA.AI.DecisionDefinition 2f033fcf-d478-5581-94d9-27a3ad4496ad DecisionBreakFreeConditionRestrainedByEntangle TA.AI.DecisionDefinition TA.AI.DecisionDefinition 2a416669-5ec8-53c1-b07b-8fe6f29da4d2 DecisionBreakFreeConditionVileBrew TA.AI.DecisionDefinition TA.AI.DecisionDefinition 4b3278e8-334a-58d6-8c75-2f48e28b4e54 +Move_Approach TA.AI.DecisionDefinition TA.AI.DecisionDefinition 5cb2a87f-09a4-5fae-9b74-10516ea8a8ab +Approach TA.AI.DecisionPackageDefinition TA.AI.DecisionPackageDefinition 5043a0ec-c626-5877-bd87-c7bc0584366d DieTypeD3 DieTypeDefinition DieTypeDefinition 63dc904b-8d78-5406-90aa-e7e1f3eefd84 ProxyCircleOfTheWildfireCauterizingFlames EffectProxyDefinition EffectProxyDefinition 5d3d90cd-1858-5044-b4f6-586754122132 ProxyDawn EffectProxyDefinition EffectProxyDefinition 5c460453-060a-51c2-9099-a6a40908dba9 diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellApproach.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellApproach.json index 873b04ceed..cbb3dc9b04 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellApproach.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellApproach.json @@ -2,20 +2,22 @@ "$type": "ConditionDefinition, Assembly-CSharp", "inDungeonEditor": false, "parentCondition": null, - "conditionType": "Beneficial", + "conditionType": "Detrimental", "features": [], "allowMultipleInstances": false, "silentWhenAdded": false, "silentWhenRemoved": false, "silentWhenRefreshed": false, "terminateWhenRemoved": false, - "specialDuration": false, - "durationType": "Hour", + "specialDuration": true, + "durationType": "Round", "durationParameterDie": "D4", - "durationParameter": 1, + "durationParameter": 0, "forceTurnOccurence": false, "turnOccurence": "EndOfTurn", - "specialInterruptions": [], + "specialInterruptions": [ + "Moved" + ], "interruptionRequiresSavingThrow": false, "interruptionSavingThrowComputationMethod": "SaveOverride", "interruptionSavingThrowAbility": "", @@ -85,7 +87,7 @@ }, "timeToWaitBeforeApplyingShader": 0.5, "timeToWaitBeforeRemovingShader": 0.5, - "possessive": false, + "possessive": true, "amountOrigin": "None", "baseAmount": 0, "additiveAmount": false, @@ -96,10 +98,10 @@ "subsequentVariableForDC": "FrenzyExhaustionDC", "subsequentDCIncrease": 5, "effectFormsOnRemoved": [], - "forceBehavior": false, + "forceBehavior": true, "addBehavior": false, - "fearSource": false, - "battlePackage": null, + "fearSource": true, + "battlePackage": "Definition:Approach:5043a0ec-c626-5877-bd87-c7bc0584366d", "explorationPackage": null, "removedFromTheGame": false, "permanentlyRemovedIfExtraPlanar": false, @@ -132,9 +134,9 @@ "description": "Feature/&PowerCommandSpellApproachDescription", "spriteReference": { "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": null, - "m_SubObjectType": null + "m_AssetGUID": "5d503f63f4583dd4a9bd2460a783a470", + "m_SubObjectName": "ConditionSlowed", + "m_SubObjectType": "UnityEngine.Sprite, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" }, "color": { "$type": "UnityEngine.Color, UnityEngine.CoreModule", diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellFlee.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellFlee.json index f76df98e53..4a8e100df8 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellFlee.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellFlee.json @@ -1,11 +1,9 @@ { "$type": "ConditionDefinition, Assembly-CSharp", "inDungeonEditor": false, - "parentCondition": "Definition:ConditionFrightened:5cbaee42aac310e42a407fc59bf65515", + "parentCondition": null, "conditionType": "Detrimental", - "features": [ - "Definition:ActionAffinityConditionFrightenedFear:12a1f5a969e9ef54cba8799bdbe30694" - ], + "features": [], "allowMultipleInstances": false, "silentWhenAdded": false, "silentWhenRemoved": false, @@ -13,11 +11,13 @@ "terminateWhenRemoved": false, "specialDuration": true, "durationType": "Round", - "durationParameterDie": "D1", + "durationParameterDie": "D4", "durationParameter": 0, - "forceTurnOccurence": true, + "forceTurnOccurence": false, "turnOccurence": "EndOfTurn", - "specialInterruptions": [], + "specialInterruptions": [ + "Moved" + ], "interruptionRequiresSavingThrow": false, "interruptionSavingThrowComputationMethod": "SaveOverride", "interruptionSavingThrowAbility": "", @@ -41,170 +41,35 @@ "conditionStartParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" + "m_SubObjectName": null, + "m_SubObjectType": null }, "conditionParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "40ab6dfd54701724ab98b3f91c846a41", - "m_SubObjectName": "", - "m_SubObjectType": "" + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null }, "conditionEndParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "09122c24b2751d34a89764b8407ef696", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "recurrentEffectParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" + "m_SubObjectName": null, + "m_SubObjectType": null }, + "recurrentEffectParticleReference": null, "characterShaderReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" + "m_SubObjectName": null, + "m_SubObjectType": null }, "particlesBasedOnAncestryDamageType": false, "ancestryType": "Sorcerer", - "acidParticleParameters": { - "$type": "ConditionParticleParameters, Assembly-CSharp", - "startParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "particleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "endParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "recurrentEffectParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - } - }, - "coldParticleParameters": { - "$type": "ConditionParticleParameters, Assembly-CSharp", - "startParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "particleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "endParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "recurrentEffectParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - } - }, - "fireParticleParameters": { - "$type": "ConditionParticleParameters, Assembly-CSharp", - "startParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "particleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "endParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "recurrentEffectParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - } - }, - "lightningParticleParameters": { - "$type": "ConditionParticleParameters, Assembly-CSharp", - "startParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "particleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "endParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "recurrentEffectParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - } - }, - "poisonParticleParameters": { - "$type": "ConditionParticleParameters, Assembly-CSharp", - "startParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "particleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "endParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "recurrentEffectParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - } - }, + "acidParticleParameters": null, + "coldParticleParameters": null, + "fireParticleParameters": null, + "lightningParticleParameters": null, + "poisonParticleParameters": null, "overrideCharacterShaderColors": false, "firstCharacterShaderColor": { "$type": "UnityEngine.Color, UnityEngine.CoreModule", @@ -222,7 +87,7 @@ }, "timeToWaitBeforeApplyingShader": 0.5, "timeToWaitBeforeRemovingShader": 0.5, - "possessive": false, + "possessive": true, "amountOrigin": "None", "baseAmount": 0, "additiveAmount": false, @@ -237,7 +102,7 @@ "addBehavior": false, "fearSource": true, "battlePackage": "Definition:Fear:67e55218421c6034d8ec7952695e5831", - "explorationPackage": "Definition:Idle:47dfd6fd3d22b214cb8c446f2438f3c6", + "explorationPackage": null, "removedFromTheGame": false, "permanentlyRemovedIfExtraPlanar": false, "refundReceivedDamageWhenRemoved": false, @@ -269,9 +134,9 @@ "description": "Feature/&PowerCommandSpellFleeDescription", "spriteReference": { "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": null, - "m_SubObjectType": null + "m_AssetGUID": "5d503f63f4583dd4a9bd2460a783a470", + "m_SubObjectName": "ConditionSlowed", + "m_SubObjectType": "UnityEngine.Sprite, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" }, "color": { "$type": "UnityEngine.Color, UnityEngine.CoreModule", diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellGrovel.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellGrovel.json index d93f644744..2f3dcb97af 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellGrovel.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellGrovel.json @@ -2,17 +2,17 @@ "$type": "ConditionDefinition, Assembly-CSharp", "inDungeonEditor": false, "parentCondition": null, - "conditionType": "Beneficial", + "conditionType": "Detrimental", "features": [], "allowMultipleInstances": false, "silentWhenAdded": false, "silentWhenRemoved": false, "silentWhenRefreshed": false, "terminateWhenRemoved": false, - "specialDuration": false, - "durationType": "Hour", + "specialDuration": true, + "durationType": "Round", "durationParameterDie": "D4", - "durationParameter": 1, + "durationParameter": 0, "forceTurnOccurence": false, "turnOccurence": "EndOfTurn", "specialInterruptions": [], @@ -85,7 +85,7 @@ }, "timeToWaitBeforeApplyingShader": 0.5, "timeToWaitBeforeRemovingShader": 0.5, - "possessive": false, + "possessive": true, "amountOrigin": "None", "baseAmount": 0, "additiveAmount": false, @@ -132,9 +132,9 @@ "description": "Feature/&PowerCommandSpellGrovelDescription", "spriteReference": { "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": null, - "m_SubObjectType": null + "m_AssetGUID": "5e96eb4d8d8193a4cbddbf7477990f88", + "m_SubObjectName": "ConditionPossessed", + "m_SubObjectType": "UnityEngine.Sprite, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" }, "color": { "$type": "UnityEngine.Color, UnityEngine.CoreModule", diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellHalt.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellHalt.json index 2ca4deee36..f6c1c839cb 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellHalt.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellHalt.json @@ -2,17 +2,17 @@ "$type": "ConditionDefinition, Assembly-CSharp", "inDungeonEditor": false, "parentCondition": null, - "conditionType": "Beneficial", + "conditionType": "Detrimental", "features": [], "allowMultipleInstances": false, "silentWhenAdded": false, "silentWhenRemoved": false, "silentWhenRefreshed": false, "terminateWhenRemoved": false, - "specialDuration": false, - "durationType": "Hour", + "specialDuration": true, + "durationType": "Round", "durationParameterDie": "D4", - "durationParameter": 1, + "durationParameter": 0, "forceTurnOccurence": false, "turnOccurence": "EndOfTurn", "specialInterruptions": [], @@ -85,7 +85,7 @@ }, "timeToWaitBeforeApplyingShader": 0.5, "timeToWaitBeforeRemovingShader": 0.5, - "possessive": false, + "possessive": true, "amountOrigin": "None", "baseAmount": 0, "additiveAmount": false, @@ -96,7 +96,7 @@ "subsequentVariableForDC": "FrenzyExhaustionDC", "subsequentDCIncrease": 5, "effectFormsOnRemoved": [], - "forceBehavior": false, + "forceBehavior": true, "addBehavior": false, "fearSource": false, "battlePackage": "Definition:Idle:47dfd6fd3d22b214cb8c446f2438f3c6", @@ -132,9 +132,9 @@ "description": "Feature/&PowerCommandSpellHaltDescription", "spriteReference": { "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": null, - "m_SubObjectType": null + "m_AssetGUID": "5e96eb4d8d8193a4cbddbf7477990f88", + "m_SubObjectName": "ConditionPossessed", + "m_SubObjectType": "UnityEngine.Sprite, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" }, "color": { "$type": "UnityEngine.Color, UnityEngine.CoreModule", diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellSelf.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellSelf.json index 637fd0041b..39fec6e1b7 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellSelf.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellSelf.json @@ -11,8 +11,8 @@ "Definition:PowerCommandSpellHalt:ba84cf9e-4373-5a11-af15-41395a314cde" ], "allowMultipleInstances": false, - "silentWhenAdded": false, - "silentWhenRemoved": false, + "silentWhenAdded": true, + "silentWhenRemoved": true, "silentWhenRefreshed": false, "terminateWhenRemoved": false, "specialDuration": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/Move_Approach.json b/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/Move_Approach.json new file mode 100644 index 0000000000..ec7fc54346 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/Move_Approach.json @@ -0,0 +1,116 @@ +{ + "$type": "TA.AI.DecisionDefinition, Assembly-CSharp", + "decision": { + "$type": "TA.AI.DecisionDescription, Assembly-CSharp", + "description": "Go as close as possible to enemies.", + "scorer": { + "$type": "TA.AI.ActivityScorerDefinition, Assembly-CSharp", + "scorer": { + "$type": "TA.AI.ActivityScorer, Assembly-CSharp", + "considerations": [ + { + "$type": "TA.AI.WeightedConsiderationDescription, Assembly-CSharp", + "consideration": { + "$type": "TA.AI.ConsiderationDefinition, Assembly-CSharp", + "consideration": { + "$type": "TA.AI.ConsiderationDescription, Assembly-CSharp", + "considerationType": "IsValidMoveDestination", + "curve": { + "$type": "UnityEngine.AnimationCurve, UnityEngine.CoreModule" + }, + "stringParameter": "", + "floatParameter": 0.0, + "intParameter": 0, + "byteParameter": 0, + "boolParameter": false, + "boolSecParameter": false, + "boolTerParameter": false + }, + "name": "IsValidMoveDestination" + }, + "weight": 1.0 + }, + { + "$type": "TA.AI.WeightedConsiderationDescription, Assembly-CSharp", + "consideration": { + "$type": "TA.AI.ConsiderationDefinition, Assembly-CSharp", + "consideration": { + "$type": "TA.AI.ConsiderationDescription, Assembly-CSharp", + "considerationType": "InfluenceFearSourceProximity", + "curve": { + "$type": "UnityEngine.AnimationCurve, UnityEngine.CoreModule" + }, + "stringParameter": "", + "floatParameter": 6.0, + "intParameter": 1, + "byteParameter": 0, + "boolParameter": true, + "boolSecParameter": true, + "boolTerParameter": false + }, + "name": "PenalizeFearSourceProximityAtPosition" + }, + "weight": 1.0 + }, + { + "$type": "TA.AI.WeightedConsiderationDescription, Assembly-CSharp", + "consideration": { + "$type": "TA.AI.ConsiderationDefinition, Assembly-CSharp", + "consideration": { + "$type": "TA.AI.ConsiderationDescription, Assembly-CSharp", + "considerationType": "DistanceFromMe", + "curve": { + "$type": "UnityEngine.AnimationCurve, UnityEngine.CoreModule" + }, + "stringParameter": "", + "floatParameter": 20.0, + "intParameter": 0, + "byteParameter": 0, + "boolParameter": false, + "boolSecParameter": false, + "boolTerParameter": false + }, + "name": "IsCloseFromMe" + }, + "weight": 1.0 + } + ] + }, + "name": "MoveScorer_Approach" + }, + "activityType": "Move", + "stringParameter": "", + "stringSecParameter": "", + "boolParameter": false, + "boolSecParameter": false, + "floatParameter": 0.0, + "enumParameter": 0 + }, + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": true, + "title": "Feature/&NoContentTitle", + "description": "Feature/&NoContentTitle", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "5cb2a87f-09a4-5fae-9b74-10516ea8a8ab", + "contentPack": 9999, + "name": "Move_Approach" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/Approach.json b/Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/Approach.json new file mode 100644 index 0000000000..46837b018e --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/Approach.json @@ -0,0 +1,38 @@ +{ + "$type": "TA.AI.DecisionPackageDefinition, Assembly-CSharp", + "dungeonMakerPresence": false, + "package": { + "$type": "TA.AI.DecisionPackageDescription, Assembly-CSharp", + "weightedDecisions": [ + { + "$type": "TA.AI.WeightedDecisionDescription, Assembly-CSharp", + "decision": "Definition:Move_Approach:5cb2a87f-09a4-5fae-9b74-10516ea8a8ab", + "weight": 9.0, + "cooldown": 0, + "dynamicCooldown": false + } + ] + }, + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "Feature/&Emptystring", + "description": "Feature/&Emptystring", + "spriteReference": null, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "5043a0ec-c626-5877-bd87-c7bc0584366d", + "contentPack": 9999, + "name": "Approach" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerCommandSpellApproach.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerCommandSpellApproach.json index 2aa873448a..d831ee5c13 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerCommandSpellApproach.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerCommandSpellApproach.json @@ -31,8 +31,8 @@ "targetConditionName": "", "targetConditionAsset": null, "targetSide": "Enemy", - "durationType": "Round", - "durationParameter": 0, + "durationType": "Instantaneous", + "durationParameter": 1, "endOfEffect": "EndOfTurn", "hasSavingThrow": false, "disableSavingThrowOnAllies": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerCommandSpellFlee.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerCommandSpellFlee.json index 2afeb5eb09..a6ea50c236 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerCommandSpellFlee.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerCommandSpellFlee.json @@ -33,7 +33,7 @@ "targetSide": "Enemy", "durationType": "Round", "durationParameter": 1, - "endOfEffect": "EndOfTurn", + "endOfEffect": "StartOfTurn", "hasSavingThrow": false, "disableSavingThrowOnAllies": false, "savingThrowAbility": "Dexterity", @@ -78,8 +78,8 @@ "saveOccurence": "EndOfTurn", "conditionForm": { "$type": "ConditionForm, Assembly-CSharp", - "conditionDefinitionName": "ConditionFrightenedFearEndOfNextTurn", - "conditionDefinition": "Definition:ConditionFrightenedFearEndOfNextTurn:9a680035ff5e74b49a03ef7daf0bc08d", + "conditionDefinitionName": "ConditionCommandSpellFlee", + "conditionDefinition": "Definition:ConditionCommandSpellFlee:b52e3cc4-15af-5123-a861-3fae68460977", "operation": "Add", "conditionsList": [], "applyToSelf": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerCommandSpellGrovel.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerCommandSpellGrovel.json index 8c0700e674..9028d03538 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerCommandSpellGrovel.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerCommandSpellGrovel.json @@ -31,8 +31,8 @@ "targetConditionName": "", "targetConditionAsset": null, "targetSide": "Enemy", - "durationType": "Round", - "durationParameter": 0, + "durationType": "Instantaneous", + "durationParameter": 1, "endOfEffect": "EndOfTurn", "hasSavingThrow": false, "disableSavingThrowOnAllies": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerCommandSpellHalt.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerCommandSpellHalt.json index 0516a3104d..ee04aa5c39 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerCommandSpellHalt.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerCommandSpellHalt.json @@ -32,8 +32,8 @@ "targetConditionAsset": null, "targetSide": "Enemy", "durationType": "Round", - "durationParameter": 0, - "endOfEffect": "EndOfTurn", + "durationParameter": 1, + "endOfEffect": "StartOfTurn", "hasSavingThrow": false, "disableSavingThrowOnAllies": false, "savingThrowAbility": "Dexterity", diff --git a/Diagnostics/UnfinishedBusinessBlueprints/Types.txt b/Diagnostics/UnfinishedBusinessBlueprints/Types.txt index 804c8756cd..3b655bb6b9 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/Types.txt +++ b/Diagnostics/UnfinishedBusinessBlueprints/Types.txt @@ -68,4 +68,5 @@ RestActivityDefinition SpellDefinition SpellListDefinition TA.AI.DecisionDefinition +TA.AI.DecisionPackageDefinition WeaponTypeDefinition diff --git a/Documentation/Spells.md b/Documentation/Spells.md index e6c69214d1..d83b61c49f 100644 --- a/Documentation/Spells.md +++ b/Documentation/Spells.md @@ -233,11 +233,11 @@ Spray a luminous cone that briefly blinds your enemies. Roll 6d10: the total is # 58. - Command (V) level 1 Enchantment [UB] -You speak a one-word command to a creature you can see within range. The target must succeed on a Wisdom saving throw or follow the command on its next turn. The spell has no effect if the target is undead, if it doesn't understand your language, or if your command is directly harmful to it. Some typical commands and their effects follow. You might issue a command other than one described here. If you do so, the DM determines how the target behaves. If the target can't follow your command, the spell ends. +You speak a one-word command to a creature you can see within range. The target must succeed on a Wisdom saving throw or follow the command on its next turn. The spell has no effect if the target is undead. Commands follow: • Approach: The target moves toward you by the shortest and most direct route, ending its turn if it moves within 5 feet of you. • Flee: The target spends its turn moving away from you by the fastest available means. • Grovel: The target falls prone and then ends its turn. -• Halt: The target doesn't move and takes no actions. A flying creature stays aloft, provided that it is able to do so. If it must move to stay aloft, it flies the minimum distance needed to remain in the air. +• Halt: The target doesn't move and takes no actions. When you cast this spell using a spell slot of 2nd level or higher, you may target an additional creature within range for each slot level above 2nd. # 59. - Comprehend Languages (V,S) level 1 Divination [SOL] diff --git a/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs b/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs index afe49cf513..8bf2eb0b32 100644 --- a/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs +++ b/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs @@ -3908,13 +3908,11 @@ internal static class DecisionPackageDefinitions { internal static DecisionPackageDefinition DefaultMeleeWithBackupRangeDecisions { get; } = GetDefinition("DefaultMeleeWithBackupRangeDecisions"); - internal static DecisionPackageDefinition DefaultSupportCasterWithBackupAttacksDecisions { get; } = GetDefinition("DefaultSupportCasterWithBackupAttacksDecisions"); - - internal static DecisionPackageDefinition Idle { get; } = - GetDefinition("Idle"); - + + internal static DecisionPackageDefinition Fear { get; } = GetDefinition("Fear"); + internal static DecisionPackageDefinition Idle { get; } = GetDefinition("Idle"); internal static DecisionPackageDefinition IdleGuard_Default { get; } = GetDefinition("IdleGuard_Default"); } diff --git a/SolastaUnfinishedBusiness/ChangelogHistory.txt b/SolastaUnfinishedBusiness/ChangelogHistory.txt index 497a1eb308..e1eb01ff59 100644 --- a/SolastaUnfinishedBusiness/ChangelogHistory.txt +++ b/SolastaUnfinishedBusiness/ChangelogHistory.txt @@ -1,3 +1,18 @@ +1.5.97.30: + +- added Command [Bard, Cleric, Paladin], and Dissonant Whispers [Bard] spells +- fixed Barbarian Sundering Blow interaction with Call Lightning, and other proxy like powers +- fixed Lucky, and Mage Slayer feats double consumption +- fixed Martial Commander coordinated defense to require an attack first [VANILLA] +- fixed Party Editor to register/unregister powers from feats +- improved ability checks to also allow reactions on success [Circle of the Cosmos woe] +- improved Conversion Slots, and Shorthand versatilities to react on ability checks +- improved game log to avoid voxelization warning messages to flood the same [DM overlay trick] +- improved Maneuvering Attack, and Martial Warlord strategic repositioning to use a run stance +- improved saving roll reaction modal descriptions [Circle of the Cosmos, Sorcerer Wild Magic, etc.] +- improved Sorcerer Wild Magic tides of chaos to react on ability checks +- improved vanilla to allow reactions on gadget's saving roll [traps] + 1.5.97.29: - fixed cantrips **CRASH** if not a melee cantrip and hero has replace attack with cantrips diff --git a/SolastaUnfinishedBusiness/Models/SpellsContext.cs b/SolastaUnfinishedBusiness/Models/SpellsContext.cs index 3957b0dee9..24a3813e36 100644 --- a/SolastaUnfinishedBusiness/Models/SpellsContext.cs +++ b/SolastaUnfinishedBusiness/Models/SpellsContext.cs @@ -266,6 +266,7 @@ internal static void LateLoad() // 1st level RegisterSpell(CausticZap, 0, SpellListSorcerer, SpellListWizard, spellListInventorClass); + RegisterSpell(BuildCommand(), 0, SpellListBard, SpellListPaladin, SpellListCleric); RegisterSpell(BuildChaosBolt(), 0, SpellListSorcerer); RegisterSpell(BuildChromaticOrb(), 0, SpellListSorcerer, SpellListWizard); RegisterSpell(BuildDissonantWhispers(), 0, SpellListBard); diff --git a/SolastaUnfinishedBusiness/Resources/Spells/DissonantWhispers.png b/SolastaUnfinishedBusiness/Resources/Spells/DissonantWhispers.png index 06560e1047a862167a05970110a0885b6f2c213e..ac573b9fa8a23053c9a50d5675e001c57d44ace9 100644 GIT binary patch literal 11518 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 kFZ}1oJAO`(qn(nC00093P)t-sA`LYp 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.GetElement("Move_Afraid"); + var scorer = Object.Instantiate(moveAfraidDecision.Decision.scorer); + + scorer.name = "MoveScorer_Approach"; + // invert PenalizeVeryCloseEnemyProximityAtPosition behavior + scorer.scorer.WeightedConsiderations[2].Consideration.boolSecParameter = true; + // remove PenalizeVeryCloseEnemyProximityAtPosition + scorer.scorer.WeightedConsiderations.RemoveAt(1); + + var decision = DecisionDefinitionBuilder + .Create("Move_Approach") + .SetGuiPresentationNoContent(true) + .SetDecisionDescription( + "Go as close as possible to enemies.", + "Move", + scorer) + .AddToDB(); + + var approachPackage = DecisionPackageDefinitionBuilder + .Create("Approach") + .SetWeightedDecisions(new WeightedDecisionDescription { decision = decision, weight = 9 }) + .AddToDB(); + + #endregion + var conditionApproach = ConditionDefinitionBuilder .Create($"Condition{NAME}Approach") - .SetGuiPresentation(Category.Condition) + .SetGuiPresentation($"Power{NAME}Approach", Category.Feature, ConditionSlowed) + .SetConditionType(ConditionType.Detrimental) + .SetPossessive() + .SetSpecialDuration() + .SetBrain(approachPackage, true, true) + .SetSpecialInterruptions(ConditionInterruption.Moved) + .AddCustomSubFeatures(new OnConditionAddedOrRemovedCommandApproachOrFlee(true)) .AddToDB(); - conditionApproach.AddCustomSubFeatures(new CharacterTurnStartListenerCommandApproach(conditionApproach)); - var powerApproach = FeatureDefinitionPowerSharedPoolBuilder .Create($"Power{NAME}Approach") .SetGuiPresentation(Category.Feature) @@ -1257,19 +1292,24 @@ internal static SpellDefinition BuildCommand() .SetEffectDescription( EffectDescriptionBuilder .Create() - .SetDurationData(DurationType.Round) .SetTargetingData(Side.Enemy, RangeType.Distance, 12, TargetType.IndividualsUnique) .SetEffectForms(EffectFormBuilder.ConditionForm(conditionApproach)) .Build()) .AddToDB(); + // Flee + var conditionFlee = ConditionDefinitionBuilder .Create($"Condition{NAME}Flee") - .SetGuiPresentation(Category.Condition) + .SetGuiPresentation($"Power{NAME}Flee", Category.Feature, ConditionSlowed) + .SetConditionType(ConditionType.Detrimental) + .SetPossessive() + .SetSpecialDuration() + .SetBrain(DecisionPackageDefinitions.Fear, true, true) + .SetSpecialInterruptions(ConditionInterruption.Moved) + .AddCustomSubFeatures(new OnConditionAddedOrRemovedCommandApproachOrFlee(false)) .AddToDB(); - conditionFlee.AddCustomSubFeatures(new CharacterTurnStartListenerCommandFlee(conditionFlee)); - var powerFlee = FeatureDefinitionPowerSharedPoolBuilder .Create($"Power{NAME}Flee") .SetGuiPresentation(Category.Feature) @@ -1278,17 +1318,24 @@ internal static SpellDefinition BuildCommand() .SetEffectDescription( EffectDescriptionBuilder .Create() - .SetDurationData(DurationType.Round) + .SetDurationData(DurationType.Round, 1, TurnOccurenceType.StartOfTurn) .SetTargetingData(Side.Enemy, RangeType.Distance, 12, TargetType.IndividualsUnique) .SetEffectForms(EffectFormBuilder.ConditionForm(conditionFlee)) .Build()) .AddToDB(); + // Grovel + var conditionGrovel = ConditionDefinitionBuilder .Create($"Condition{NAME}Grovel") - .SetGuiPresentation(Category.Condition) + .SetGuiPresentation($"Power{NAME}Grovel", Category.Feature, ConditionPossessed) + .SetConditionType(ConditionType.Detrimental) + .SetPossessive() + .SetSpecialDuration() .AddToDB(); + conditionGrovel.AddCustomSubFeatures(new CharacterBeforeTurnStartListenerCommandGrovel()); + var powerGrovel = FeatureDefinitionPowerSharedPoolBuilder .Create($"Power{NAME}Grovel") .SetGuiPresentation(Category.Feature) @@ -1297,7 +1344,6 @@ internal static SpellDefinition BuildCommand() .SetEffectDescription( EffectDescriptionBuilder .Create() - .SetDurationData(DurationType.Round) .SetTargetingData(Side.Enemy, RangeType.Distance, 12, TargetType.IndividualsUnique) .SetEffectForms(EffectFormBuilder.ConditionForm(conditionGrovel)) .Build()) @@ -1305,11 +1351,13 @@ internal static SpellDefinition BuildCommand() var conditionHalt = ConditionDefinitionBuilder .Create($"Condition{NAME}Halt") - .SetGuiPresentation(Category.Condition) + .SetGuiPresentation($"Power{NAME}Halt", Category.Feature, ConditionPossessed) + .SetConditionType(ConditionType.Detrimental) + .SetPossessive() + .SetSpecialDuration() + .SetBrain(DecisionPackageDefinitions.Idle, true, false) .AddToDB(); - conditionHalt.battlePackage = DecisionPackageDefinitions.Idle; - var powerHalt = FeatureDefinitionPowerSharedPoolBuilder .Create($"Power{NAME}Halt") .SetGuiPresentation(Category.Feature) @@ -1318,14 +1366,21 @@ internal static SpellDefinition BuildCommand() .SetEffectDescription( EffectDescriptionBuilder .Create() - .SetDurationData(DurationType.Round) + .SetDurationData(DurationType.Round, 1, TurnOccurenceType.StartOfTurn) .SetTargetingData(Side.Enemy, RangeType.Distance, 12, TargetType.IndividualsUnique) .SetEffectForms(EffectFormBuilder.ConditionForm(conditionHalt)) .Build()) .AddToDB(); - PowerBundle.RegisterPowerBundle(powerPool, false, - powerApproach, powerFlee, powerGrovel, powerHalt); + PowerBundle.RegisterPowerBundle(powerPool, false, powerApproach, powerFlee, powerGrovel, powerHalt); + + var conditionSelf = ConditionDefinitionBuilder + .Create($"Condition{NAME}Self") + .SetGuiPresentationNoContent(true) + .SetSilent(Silent.WhenAddedOrRemoved) + .SetFeatures(powerPool, powerApproach, powerFlee, powerGrovel, powerHalt) + .AddCustomSubFeatures(AddUsablePowersFromCondition.Marker) + .AddToDB(); var spell = SpellDefinitionBuilder .Create(NAME) @@ -1341,11 +1396,15 @@ internal static SpellDefinition BuildCommand() EffectDescriptionBuilder .Create() .UseQuickAnimations() + .SetDurationData(DurationType.Round) .SetTargetingData(Side.Enemy, RangeType.Distance, 12, TargetType.IndividualsUnique) .SetEffectAdvancement(EffectIncrementMethod.PerAdditionalSlotLevel, additionalTargetsPerIncrement: 1) .SetSavingThrowData(false, AttributeDefinitions.Wisdom, true, EffectDifficultyClassComputation.SpellCastingFeature) + .SetEffectForms(EffectFormBuilder.ConditionForm( + conditionSelf, + ConditionForm.ConditionOperation.Add, true)) .Build()) .AddCustomSubFeatures(new PowerOrSpellFinishedByMeCommand(powerPool)) .AddToDB(); @@ -1353,45 +1412,6 @@ internal static SpellDefinition BuildCommand() return spell; } - private static int3 GetCandidatePosition( - GameLocationCharacter caster, - GameLocationCharacter target, - bool isFar = true) - { - var positioningService = ServiceRepository.GetService(); - var tacticalMoves = target.MaxTacticalMoves; - var boxInt = new BoxInt(target.LocationPosition, int3.zero, int3.zero); - var position = target.LocationPosition; - var distance = -1f; - - boxInt.Inflate(tacticalMoves, 0, tacticalMoves); - - foreach (var candidatePosition in boxInt.EnumerateAllPositionsWithin()) - { - if (!positioningService.CanPlaceCharacter( - target, candidatePosition, CellHelpers.PlacementMode.Station) || - !positioningService.CanCharacterStayAtPosition_Floor( - target, candidatePosition, onlyCheckCellsWithRealGround: true) || - positioningService.IsDangerousPosition(target, candidatePosition)) - { - continue; - } - - var candidateDistance = int3.Distance(candidatePosition, caster.LocationPosition); - - if ((isFar && candidateDistance < distance) || - (!isFar && candidateDistance > distance)) - { - continue; - } - - distance = candidateDistance; - position = candidatePosition; - } - - return position; - } - private sealed class PowerOrSpellFinishedByMeCommand(FeatureDefinitionPower powerPool) : IPowerOrSpellFinishedByMe { public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, BaseDefinition baseDefinition) @@ -1416,45 +1436,44 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, } } - private sealed class CharacterTurnStartListenerCommandApproach( - ConditionDefinition conditionApproach) : ICharacterTurnStartListener + private sealed class OnConditionAddedOrRemovedCommandApproachOrFlee( + bool onlyEndTurnIfWithin5Ft) : IOnConditionAddedOrRemoved { - public void OnCharacterTurnStarted(GameLocationCharacter locationCharacter) + public void OnConditionAdded(RulesetCharacter target, RulesetCondition rulesetCondition) { - var rulesetCharacter = locationCharacter.RulesetCharacter; + // bool + } - if (!rulesetCharacter.TryGetConditionOfCategoryAndType( - AttributeDefinitions.TagEffect, conditionApproach.Name, out var activeCondition)) + public void OnConditionRemoved(RulesetCharacter rulesetTarget, RulesetCondition rulesetCondition) + { + var target = GameLocationCharacter.GetFromActor(rulesetTarget); + + if (onlyEndTurnIfWithin5Ft) { - return; - } + var rulesetCaster = EffectHelpers.GetCharacterByGuid(rulesetCondition.SourceGuid); + var caster = GameLocationCharacter.GetFromActor(rulesetCaster); - var rulesetCaster = EffectHelpers.GetCharacterByGuid(activeCondition.SourceGuid); - var caster = GameLocationCharacter.GetFromActor(rulesetCaster); - var position = GetCandidatePosition(caster, locationCharacter, false); + if (!target.IsWithinRange(caster, 1)) + { + return; + } + } - locationCharacter.MyExecuteActionTacticalMove(position); + target.EndBattleTurn(Gui.Battle.CurrentRound); } } - private sealed class CharacterTurnStartListenerCommandFlee( - ConditionDefinition conditionFlee) : ICharacterTurnStartListener + private sealed class CharacterBeforeTurnStartListenerCommandGrovel : ICharacterTurnStartListener { public void OnCharacterTurnStarted(GameLocationCharacter locationCharacter) { - var rulesetCharacter = locationCharacter.RulesetCharacter; - - if (!rulesetCharacter.TryGetConditionOfCategoryAndType( - AttributeDefinitions.TagEffect, conditionFlee.Name, out var activeCondition)) + var actionService = ServiceRepository.GetService(); + var actionParams = new CharacterActionParams(locationCharacter, Id.DropProne) { - return; - } - - var rulesetCaster = EffectHelpers.GetCharacterByGuid(activeCondition.SourceGuid); - var caster = GameLocationCharacter.GetFromActor(rulesetCaster); - var position = GetCandidatePosition(caster, locationCharacter); + CanBeAborted = false, CanBeCancelled = false + }; - locationCharacter.MyExecuteActionTacticalMove(position); + actionService.ExecuteAction(actionParams, null, false); } } @@ -1522,6 +1541,46 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, target.MyExecuteActionTacticalMove(position); } + + + private static int3 GetCandidatePosition( + GameLocationCharacter caster, + GameLocationCharacter target, + bool isFar = true) + { + var positioningService = ServiceRepository.GetService(); + var tacticalMoves = target.MaxTacticalMoves; + var boxInt = new BoxInt(target.LocationPosition, int3.zero, int3.zero); + var position = target.LocationPosition; + var distance = -1f; + + boxInt.Inflate(tacticalMoves, 0, tacticalMoves); + + foreach (var candidatePosition in boxInt.EnumerateAllPositionsWithin()) + { + if (!positioningService.CanPlaceCharacter( + target, candidatePosition, CellHelpers.PlacementMode.Station) || + !positioningService.CanCharacterStayAtPosition_Floor( + target, candidatePosition, onlyCheckCellsWithRealGround: true) || + positioningService.IsDangerousPosition(target, candidatePosition)) + { + continue; + } + + var candidateDistance = int3.Distance(candidatePosition, caster.LocationPosition); + + if ((isFar && candidateDistance < distance) || + (!isFar && candidateDistance > distance)) + { + continue; + } + + distance = candidateDistance; + position = candidatePosition; + } + + return position; + } } #endregion diff --git a/SolastaUnfinishedBusiness/Translations/de/Spells/Spells01-de.txt b/SolastaUnfinishedBusiness/Translations/de/Spells/Spells01-de.txt index 76e7b22003..3f2b29d53e 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Spells/Spells01-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Spells/Spells01-de.txt @@ -36,7 +36,7 @@ Feature/&PowerCommandSpellFleeDescription=Das Ziel verbringt seinen Zug damit, s Feature/&PowerCommandSpellFleeTitle=Fliehen Feature/&PowerCommandSpellGrovelDescription=Das Ziel fällt zu Boden und beendet dann seinen Zug. Feature/&PowerCommandSpellGrovelTitle=Kriechen -Feature/&PowerCommandSpellHaltDescription=Das Ziel bewegt sich nicht und unternimmt keine Aktionen. Eine fliegende Kreatur bleibt in der Luft, vorausgesetzt, sie kann dies. Wenn sie sich bewegen muss, um in der Luft zu bleiben, fliegt sie die Mindeststrecke, die erforderlich ist, um in der Luft zu bleiben. +Feature/&PowerCommandSpellHaltDescription=Das Ziel bewegt sich nicht und führt keine Aktionen aus. Feature/&PowerCommandSpellHaltTitle=Halt Feature/&PowerStrikeWithTheWindDescription=Verleiht Ihrem nächsten Angriff einen Vorteil und verursacht bei einem Treffer zusätzlich 1W8 Schaden. Unabhängig davon, ob Sie treffen oder verfehlen, erhöht sich Ihre Gehgeschwindigkeit bis zum Ende dieses Zuges um 30 Fuß. Feature/&PowerStrikeWithTheWindTitle=Schlag mit dem Wind @@ -86,7 +86,7 @@ Spell/&ChaosBoltDescription=Führe einen Fernangriff mit Zauber gegen ein Ziel a Spell/&ChaosBoltTitle=Chaosblitz Spell/&ChromaticOrbDescription=Du schleuderst eine Energiekugel mit 4 Zoll Durchmesser auf eine Kreatur, die du in Reichweite sehen kannst. Du wählst Säure, Kälte, Feuer, Blitz, Gift oder Donner als Art der Kugel, die du erschaffst, und führst dann einen Fernkampf-Zauberangriff gegen das Ziel aus. Wenn der Angriff trifft, erleidet die Kreatur 3W8 Schaden der von dir gewählten Art. Spell/&ChromaticOrbTitle=Chromatische Kugel -Spell/&CommandSpellDescription=Sie sprechen einen einwortigen Befehl zu einer Kreatur, die Sie in Reichweite sehen können. Das Ziel muss einen Weisheitsrettungswurf bestehen oder dem Befehl in seinem nächsten Zug folgen. Der Zauber hat wirkungslos, wenn das Ziel untot ist, wenn es Ihre Sprache nicht versteht oder wenn Ihr Befehl ihm direkt schadet. Es folgen einige typische Befehle und ihre Wirkungen. Sie können einen anderen als den hier beschriebenen Befehl erteilen. In diesem Fall bestimmt der DM, wie sich das Ziel verhält. Wenn das Ziel Ihrem Befehl nicht folgen kann, endet der Zauber.\n• Annäherung: Das Ziel bewegt sich auf dem kürzesten und direktesten Weg auf Sie zu und beendet seinen Zug, wenn es sich Ihnen näher als 1,52 m nähert.\n• Fliehen: Das Ziel verbringt seinen Zug damit, sich auf dem schnellsten verfügbaren Weg von Ihnen wegzubewegen.\n• Kriechen: Das Ziel fällt hin und beendet dann seinen Zug.\n• Halt: Das Ziel bewegt sich nicht und unternimmt keine Aktionen. Eine fliegende Kreatur bleibt in der Luft, sofern sie dazu in der Lage ist. Wenn es sich bewegen muss, um in der Luft zu bleiben, fliegt es die Mindestdistanz, die erforderlich ist, um in der Luft zu bleiben.\nWenn du diesen Zauber mit einem Zauberplatz der 2. Stufe oder höher wirkst, kannst du für jede Platzstufe über der 2. eine zusätzliche Kreatur in Reichweite anvisieren. +Spell/&CommandSpellDescription=Sie sprechen einen einwortigen Befehl zu einer Kreatur in Reichweite, die Sie sehen können. Das Ziel muss einen Weisheitsrettungswurf bestehen oder dem Befehl in seinem nächsten Zug folgen. Der Zauber hat keine Wirkung, wenn das Ziel untot ist. Es gibt folgende Befehle:\n• Annäherung: Das Ziel bewegt sich auf dem kürzesten und direktesten Weg auf Sie zu und beendet seinen Zug, wenn es sich Ihnen näher als 1,52 m nähert.\n• Fliehen: Das Ziel verbringt seinen Zug damit, sich auf dem schnellsten verfügbaren Weg von Ihnen zu entfernen.\n• Kriechen: Das Ziel fällt hin und beendet dann seinen Zug.\n• Halt: Das Ziel bewegt sich nicht und unternimmt keine Aktionen.\nWenn Sie diesen Zauber mit einem Zauberplatz der 2. Stufe oder höher wirken, können Sie für jede Platzstufe über der 2. eine zusätzliche Kreatur in Reichweite als Ziel wählen. Spell/&CommandSpellTitle=Befehl Spell/&DissonantWhispersDescription=Du flüsterst eine dissonante Melodie, die nur eine Kreatur deiner Wahl in Reichweite hören kann, und quälst sie mit schrecklichen Schmerzen. Das Ziel muss einen Weisheitsrettungswurf machen. Bei einem misslungenen Rettungswurf erleidet es 3W6 psychischen Schaden und muss sofort seine Reaktion, falls möglich, nutzen, um sich so weit wie seine Geschwindigkeit es zulässt von dir wegzubewegen. Die Kreatur bewegt sich nicht auf offensichtlich gefährliches Gelände, wie etwa ein Feuer oder eine Grube. Bei einem erfolgreichen Rettungswurf erleidet das Ziel nur halb so viel Schaden und muss sich nicht wegbewegen. Wenn du diesen Zauber mit einem Zauberplatz der 2. Stufe oder höher wirkst, erhöht sich der Schaden um 1W6 für jede Stufe über der 1. Spell/&DissonantWhispersTitle=Dissonantes Flüstern diff --git a/SolastaUnfinishedBusiness/Translations/en/Spells/Spells01-en.txt b/SolastaUnfinishedBusiness/Translations/en/Spells/Spells01-en.txt index 72d3a8251b..3d8e7b4375 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Spells/Spells01-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Spells/Spells01-en.txt @@ -36,7 +36,7 @@ Feature/&PowerCommandSpellFleeDescription=The target spends its turn moving away Feature/&PowerCommandSpellFleeTitle=Flee Feature/&PowerCommandSpellGrovelDescription=The target falls prone and then ends its turn. Feature/&PowerCommandSpellGrovelTitle=Grovel -Feature/&PowerCommandSpellHaltDescription=The target doesn't move and takes no actions. A flying creature stays aloft, provided that it is able to do so. If it must move to stay aloft, it flies the minimum distance needed to remain in the air. +Feature/&PowerCommandSpellHaltDescription=The target doesn't move and takes no actions. Feature/&PowerCommandSpellHaltTitle=Halt Feature/&PowerStrikeWithTheWindDescription=Grant advantage to your next attack, and deals an extra 1d8 damage on a hit. Whether you hit or miss, your walking speed increases by 30 feet until the end of that turn. Feature/&PowerStrikeWithTheWindTitle=Strike with The Wind @@ -74,7 +74,8 @@ Reaction/&ReactionSpendPowerBundleChaosBoltTitle=Chaos Bolt Reaction/&ReactionSpendPowerBundleCommandSpellDescription=Choose your command. Reaction/&ReactionSpendPowerBundleCommandSpellReactDescription=Choose your command. Reaction/&ReactionSpendPowerBundleCommandSpellReactTitle=Command -Reaction/&ReactionSpendPowerBundleCommandSpellTitle=CommandReaction/&SpendSpellSlotElementalInfusionDescription=You can become resistant to incoming elemental damage and deal additional 1d6 elemental damage per spell slot level on your next attack. +Reaction/&ReactionSpendPowerBundleCommandSpellTitle=Command +Reaction/&SpendSpellSlotElementalInfusionDescription=You can become resistant to incoming elemental damage and deal additional 1d6 elemental damage per spell slot level on your next attack. Reaction/&SpendSpellSlotElementalInfusionReactDescription=Absorb the incoming damage element Reaction/&SpendSpellSlotElementalInfusionReactTitle=Absorb Element Reaction/&SpendSpellSlotElementalInfusionTitle=Incoming Element Attack! @@ -85,7 +86,7 @@ Spell/&ChaosBoltDescription=Make a ranged spell attack against a target. On a hi Spell/&ChaosBoltTitle=Chaos Bolt Spell/&ChromaticOrbDescription=You hurl a 4-inch-diameter sphere of energy at a creature that you can see within range. You choose acid, cold, fire, lightning, poison, or thunder for the type of orb you create, and then make a ranged spell attack against the target. If the attack hits, the creature takes 3d8 damage of the type you chose. Spell/&ChromaticOrbTitle=Chromatic Orb -Spell/&CommandSpellDescription=You speak a one-word command to a creature you can see within range. The target must succeed on a Wisdom saving throw or follow the command on its next turn. The spell has no effect if the target is undead, if it doesn't understand your language, or if your command is directly harmful to it. Some typical commands and their effects follow. You might issue a command other than one described here. If you do so, the DM determines how the target behaves. If the target can't follow your command, the spell ends.\n• Approach: The target moves toward you by the shortest and most direct route, ending its turn if it moves within 5 feet of you.\n• Flee: The target spends its turn moving away from you by the fastest available means.\n• Grovel: The target falls prone and then ends its turn.\n• Halt: The target doesn't move and takes no actions. A flying creature stays aloft, provided that it is able to do so. If it must move to stay aloft, it flies the minimum distance needed to remain in the air.\nWhen you cast this spell using a spell slot of 2nd level or higher, you may target an additional creature within range for each slot level above 2nd. +Spell/&CommandSpellDescription=You speak a one-word command to a creature you can see within range. The target must succeed on a Wisdom saving throw or follow the command on its next turn. The spell has no effect if the target is undead. Commands follow:\n• Approach: The target moves toward you by the shortest and most direct route, ending its turn if it moves within 5 feet of you.\n• Flee: The target spends its turn moving away from you by the fastest available means.\n• Grovel: The target falls prone and then ends its turn.\n• Halt: The target doesn't move and takes no actions.\nWhen you cast this spell using a spell slot of 2nd level or higher, you may target an additional creature within range for each slot level above 2nd. Spell/&CommandSpellTitle=Command Spell/&DissonantWhispersDescription=You whisper a discordant melody that only one creature of your choice within range can hear, wracking it with terrible pain. The target must make a Wisdom saving throw. On a failed save, it takes 3d6 psychic damage and must immediately use its reaction, if available, to move as far as its speed allows away from you. The creature doesn't move into obviously dangerous ground, such as a fire or a pit. On a successful save, the target takes half as much damage and doesn't have to move away. When you cast this spell using a spell slot of 2nd level or higher, the damage increases by 1d6 for each slot level above 1st. Spell/&DissonantWhispersTitle=Dissonant Whispers diff --git a/SolastaUnfinishedBusiness/Translations/es/Spells/Spells01-es.txt b/SolastaUnfinishedBusiness/Translations/es/Spells/Spells01-es.txt index 6f9e41c776..cd49d0c3f0 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Spells/Spells01-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Spells/Spells01-es.txt @@ -36,7 +36,7 @@ Feature/&PowerCommandSpellFleeDescription=El objetivo pasa su turno alejándose Feature/&PowerCommandSpellFleeTitle=Huir Feature/&PowerCommandSpellGrovelDescription=El objetivo cae boca abajo y luego termina su turno. Feature/&PowerCommandSpellGrovelTitle=Arrastrarse -Feature/&PowerCommandSpellHaltDescription=El objetivo no se mueve y no realiza ninguna acción. Una criatura voladora se mantiene en el aire, siempre que pueda hacerlo. Si debe moverse para mantenerse en el aire, vuela la distancia mínima necesaria para permanecer en el aire. +Feature/&PowerCommandSpellHaltDescription=El objetivo no se mueve y no realiza ninguna acción. Feature/&PowerCommandSpellHaltTitle=Detener Feature/&PowerStrikeWithTheWindDescription=Otorga ventaja a tu próximo ataque y causa 1d8 puntos de daño extra en cada impacto. Ya sea que impactes o falles, tu velocidad al caminar aumenta en 30 pies hasta el final de ese turno. Feature/&PowerStrikeWithTheWindTitle=Golpea con el viento @@ -86,7 +86,7 @@ Spell/&ChaosBoltDescription=Realiza un ataque de hechizo a distancia contra un o Spell/&ChaosBoltTitle=Rayo del caos Spell/&ChromaticOrbDescription=Lanzas una esfera de energía de 4 pulgadas de diámetro a una criatura que puedas ver dentro del alcance. Eliges ácido, frío, fuego, relámpago, veneno o trueno como el tipo de orbe que creas y luego realizas un ataque de hechizo a distancia contra el objetivo. Si el ataque impacta, la criatura recibe 3d8 puntos de daño del tipo que elegiste. Spell/&ChromaticOrbTitle=Orbe cromático -Spell/&CommandSpellDescription=Pronuncias una orden de una palabra a una criatura que puedas ver dentro del alcance. El objetivo debe tener éxito en una tirada de salvación de Sabiduría o seguir la orden en su siguiente turno. El hechizo no tiene efecto si el objetivo es un no-muerto, si no entiende tu idioma o si tu orden es directamente dañina para él. A continuación se indican algunas órdenes típicas y sus efectos. Puedes dar una orden distinta a las descritas aquí. Si lo haces, el DM determina cómo se comporta el objetivo. Si el objetivo no puede seguir tu orden, el hechizo termina.\n• Acercarse: el objetivo se mueve hacia ti por la ruta más corta y directa, y termina su turno si se mueve a 5 pies o menos de ti.\n• Huir: el objetivo pasa su turno alejándose de ti por el medio más rápido disponible.\n• Arrastrarse: el objetivo cae boca abajo y luego termina su turno.\n• Detenerse: el objetivo no se mueve y no realiza ninguna acción. Una criatura voladora se mantiene en el aire, siempre que pueda hacerlo. Si debe moverse para mantenerse en el aire, vuela la distancia mínima necesaria para permanecer en el aire.\nCuando lanzas este hechizo usando un espacio de hechizo de nivel 2 o superior, puedes seleccionar una criatura adicional dentro del alcance por cada nivel de espacio por encima del 2. +Spell/&CommandSpellDescription=Pronuncias una orden de una palabra a una criatura que puedas ver dentro del alcance. El objetivo debe superar una tirada de salvación de Sabiduría o seguir la orden en su siguiente turno. El conjuro no tiene efecto si el objetivo es un no-muerto. Las órdenes son las siguientes:\n• Acercarse: el objetivo se mueve hacia ti por la ruta más corta y directa, y termina su turno si se mueve a 5 pies o menos de ti.\n• Huir: el objetivo pasa su turno alejándose de ti por el medio más rápido disponible.\n• Arrastrarse: el objetivo cae boca abajo y luego termina su turno.\n• Detenerse: el objetivo no se mueve y no realiza ninguna acción.\nCuando lanzas este conjuro usando un espacio de conjuro de nivel 2 o superior, puedes seleccionar una criatura adicional dentro del alcance por cada nivel de espacio por encima del 2. Spell/&CommandSpellTitle=Dominio Spell/&DissonantWhispersDescription=Susurras una melodía discordante que solo una criatura de tu elección que esté dentro del alcance puede oír, atormentándola con un dolor terrible. El objetivo debe realizar una tirada de salvación de Sabiduría. Si falla, sufre 3d6 puntos de daño psíquico y debe usar inmediatamente su reacción, si está disponible, para alejarse de ti tanto como su velocidad le permita. La criatura no se mueve hacia un terreno obviamente peligroso, como un fuego o un pozo. Si tiene éxito, el objetivo sufre la mitad del daño y no tiene que alejarse. Cuando lanzas este conjuro usando un espacio de conjuro de nivel 2 o superior, el daño aumenta en 1d6 por cada nivel de espacio por encima del 1. Spell/&DissonantWhispersTitle=Susurros disonantes diff --git a/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells01-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells01-fr.txt index 2f131abe96..b5929151dd 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells01-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells01-fr.txt @@ -36,7 +36,7 @@ Feature/&PowerCommandSpellFleeDescription=La cible passe son tour à s'éloigner Feature/&PowerCommandSpellFleeTitle=Fuir Feature/&PowerCommandSpellGrovelDescription=La cible tombe à terre et termine son tour. Feature/&PowerCommandSpellGrovelTitle=Ramper -Feature/&PowerCommandSpellHaltDescription=La cible ne bouge pas et n'entreprend aucune action. Une créature volante reste en l'air, à condition qu'elle en soit capable. Si elle doit se déplacer pour rester en l'air, elle parcourt la distance minimale nécessaire pour rester en l'air. +Feature/&PowerCommandSpellHaltDescription=La cible ne bouge pas et n'effectue aucune action. Feature/&PowerCommandSpellHaltTitle=Arrêt Feature/&PowerStrikeWithTheWindDescription=Accorde un avantage à votre prochaine attaque et inflige 1d8 points de dégâts supplémentaires en cas de réussite. Que vous touchiez ou ratiez, votre vitesse de marche augmente de 9 mètres jusqu'à la fin de ce tour. Feature/&PowerStrikeWithTheWindTitle=Frappez avec le vent @@ -86,7 +86,7 @@ Spell/&ChaosBoltDescription=Lancez une attaque à distance contre une cible. En Spell/&ChaosBoltTitle=Éclair du chaos Spell/&ChromaticOrbDescription=Vous lancez une sphère d'énergie de 10 cm de diamètre sur une créature que vous pouvez voir à portée. Vous choisissez l'acide, le froid, le feu, la foudre, le poison ou le tonnerre comme type d'orbe que vous créez, puis effectuez une attaque de sort à distance contre la cible. Si l'attaque touche, la créature subit 3d8 dégâts du type que vous avez choisi. Spell/&ChromaticOrbTitle=Orbe chromatique -Spell/&CommandSpellDescription=Vous donnez un ordre d'un seul mot à une créature visible à portée. La cible doit réussir un jet de sauvegarde de Sagesse ou suivre l'ordre à son prochain tour. Le sort n'a aucun effet si la cible est morte-vivante, si elle ne comprend pas votre langue ou si votre ordre lui est directement nuisible. Voici quelques ordres typiques et leurs effets. Vous pouvez donner un ordre autre que celui décrit ici. Si vous le faites, le MD détermine comment la cible se comporte. Si la cible ne peut pas suivre votre ordre, le sort prend fin.\n• Approche : la cible se déplace vers vous par le chemin le plus court et le plus direct, mettant fin à son tour si elle se déplace à 1,50 mètre ou moins de vous.\n• Fuir : la cible passe son tour à s'éloigner de vous par le moyen le plus rapide disponible.\n• Ramper : la cible tombe à terre puis termine son tour.\n• Halte : la cible ne bouge pas et n'entreprend aucune action. Une créature volante reste en l'air, à condition qu'elle en soit capable. S'il doit se déplacer pour rester en l'air, il vole sur la distance minimale nécessaire pour rester en l'air.\nLorsque vous lancez ce sort en utilisant un emplacement de sort de niveau 2 ou supérieur, vous pouvez cibler une créature supplémentaire à portée pour chaque niveau d'emplacement au-dessus du niveau 2. +Spell/&CommandSpellDescription=Vous prononcez un ordre d'un seul mot à une créature visible à portée. La cible doit réussir un jet de sauvegarde de Sagesse ou suivre l'ordre à son prochain tour. Le sort n'a aucun effet si la cible est morte-vivante. Les ordres sont les suivants :\n• Approche : la cible se déplace vers vous par le chemin le plus court et le plus direct, mettant fin à son tour si elle se déplace à 1,50 mètre ou moins de vous.\n• Fuir : la cible passe son tour à s'éloigner de vous par le moyen le plus rapide disponible.\n• Ramper : la cible tombe à terre puis termine son tour.\n• Halte : la cible ne bouge pas et n'entreprend aucune action.\nLorsque vous lancez ce sort en utilisant un emplacement de sort de niveau 2 ou supérieur, vous pouvez cibler une créature supplémentaire à portée pour chaque niveau d'emplacement au-dessus du niveau 2. Spell/&CommandSpellTitle=Commande Spell/&DissonantWhispersDescription=Vous murmurez une mélodie discordante que seule une créature de votre choix à portée peut entendre, la secouant d'une douleur terrible. La cible doit réussir un jet de sauvegarde de Sagesse. En cas d'échec, elle subit 3d6 dégâts psychiques et doit immédiatement utiliser sa réaction, si elle en a la possibilité, pour s'éloigner de vous aussi loin que sa vitesse le lui permet. La créature ne se déplace pas sur un terrain manifestement dangereux, comme un feu ou une fosse. En cas de réussite, la cible subit la moitié des dégâts et n'a pas à s'éloigner. Lorsque vous lancez ce sort en utilisant un emplacement de sort de niveau 2 ou supérieur, les dégâts augmentent de 1d6 pour chaque niveau d'emplacement au-dessus du 1er. Spell/&DissonantWhispersTitle=Chuchotements dissonants diff --git a/SolastaUnfinishedBusiness/Translations/it/Spells/Spells01-it.txt b/SolastaUnfinishedBusiness/Translations/it/Spells/Spells01-it.txt index e77f77f79d..91bf5d9c91 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Spells/Spells01-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Spells/Spells01-it.txt @@ -36,7 +36,7 @@ Feature/&PowerCommandSpellFleeDescription=Il bersaglio trascorre il suo turno al Feature/&PowerCommandSpellFleeTitle=Fuggire Feature/&PowerCommandSpellGrovelDescription=Il bersaglio cade prono e poi termina il suo turno. Feature/&PowerCommandSpellGrovelTitle=Umiliarsi -Feature/&PowerCommandSpellHaltDescription=Il bersaglio non si muove e non compie azioni. Una creatura volante rimane in aria, a patto che sia in grado di farlo. Se deve muoversi per rimanere in aria, vola per la distanza minima necessaria per rimanere in aria. +Feature/&PowerCommandSpellHaltDescription=Il bersaglio non si muove e non intraprende alcuna azione. Feature/&PowerCommandSpellHaltTitle=Fermarsi Feature/&PowerStrikeWithTheWindDescription=Concedi vantaggio al tuo prossimo attacco e infliggi 1d8 danni extra a colpo andato a segno. Che tu colpisca o meno, la tua velocità di camminata aumenta di 30 piedi fino alla fine di quel turno. Feature/&PowerStrikeWithTheWindTitle=Colpire con il vento @@ -86,7 +86,7 @@ Spell/&ChaosBoltDescription=Esegui un attacco magico a distanza contro un bersag Spell/&ChaosBoltTitle=Fulmine del Caos Spell/&ChromaticOrbDescription=Scagli una sfera di energia di 4 pollici di diametro contro una creatura che puoi vedere entro il raggio d'azione. Scegli acido, freddo, fuoco, fulmine, veleno o tuono per il tipo di sfera che crei, quindi esegui un attacco magico a distanza contro il bersaglio. Se l'attacco colpisce, la creatura subisce 3d8 danni del tipo che hai scelto. Spell/&ChromaticOrbTitle=Sfera cromatica -Spell/&CommandSpellDescription=Pronuncia un comando di una sola parola a una creatura che puoi vedere entro il raggio d'azione. Il bersaglio deve superare un tiro salvezza su Saggezza o seguire il comando nel suo turno successivo. L'incantesimo non ha effetto se il bersaglio è un non morto, se non capisce la tua lingua o se il tuo comando gli è direttamente dannoso. Seguono alcuni comandi tipici e i loro effetti. Potresti impartire un comando diverso da quelli descritti qui. Se lo fai, il DM determina come si comporta il bersaglio. Se il bersaglio non può seguire il tuo comando, l'incantesimo termina.\n• Avvicinamento: il bersaglio si muove verso di te attraverso la via più breve e diretta, terminando il suo turno se si muove entro 5 piedi da te.\n• Fuga: il bersaglio trascorre il suo turno allontanandosi da te con il mezzo più veloce disponibile.\n• Umiliarsi: il bersaglio cade prono e poi termina il suo turno.\n• Arresto: il bersaglio non si muove e non esegue azioni. Una creatura volante rimane in aria, a condizione che sia in grado di farlo. Se deve muoversi per restare in aria, vola per la distanza minima necessaria per restare in aria.\nQuando lanci questo incantesimo usando uno slot incantesimo di 2° livello o superiore, puoi scegliere come bersaglio una creatura aggiuntiva entro il raggio d'azione per ogni livello dello slot superiore al 2°. +Spell/&CommandSpellDescription=Pronuncia un comando di una sola parola a una creatura che puoi vedere entro il raggio d'azione. Il bersaglio deve superare un tiro salvezza su Saggezza o seguire il comando nel suo turno successivo. L'incantesimo non ha effetto se il bersaglio è un non morto. I comandi seguono:\n• Avvicinamento: il bersaglio si muove verso di te attraverso la via più breve e diretta, terminando il suo turno se si muove entro 5 piedi da te.\n• Fuggire: il bersaglio trascorre il suo turno allontanandosi da te con il mezzo più veloce disponibile.\n• Umiliarsi: il bersaglio cade prono e poi termina il suo turno.\n• Arrestare: il bersaglio non si muove e non esegue azioni.\nQuando lanci questo incantesimo usando uno slot incantesimo di 2° livello o superiore, puoi prendere di mira una creatura aggiuntiva entro il raggio d'azione per ogni livello di slot superiore al 2°. Spell/&CommandSpellTitle=Comando Spell/&DissonantWhispersDescription=Sussurri una melodia discordante che solo una creatura a tua scelta entro il raggio d'azione può sentire, lacerandola con un dolore terribile. Il bersaglio deve effettuare un tiro salvezza su Saggezza. Se fallisce il tiro salvezza, subisce 3d6 danni psichici e deve usare immediatamente la sua reazione, se disponibile, per allontanarsi da te il più lontano possibile dalla sua velocità. La creatura non si sposta in un terreno palesemente pericoloso, come un fuoco o una fossa. Se supera il tiro salvezza, il bersaglio subisce la metà dei danni e non deve allontanarsi. Quando lanci questo incantesimo usando uno slot incantesimo di 2° livello o superiore, il danno aumenta di 1d6 per ogni livello di slot superiore al 1°. Spell/&DissonantWhispersTitle=Sussurri dissonanti diff --git a/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells01-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells01-ja.txt index 9861863365..724e99f8ba 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells01-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells01-ja.txt @@ -36,7 +36,7 @@ Feature/&PowerCommandSpellFleeDescription=ターゲットは、そのターン Feature/&PowerCommandSpellFleeTitle=逃げる Feature/&PowerCommandSpellGrovelDescription=対象はうつ伏せになり、その後ターンを終了します。 Feature/&PowerCommandSpellGrovelTitle=グローベル -Feature/&PowerCommandSpellHaltDescription=対象は移動せず、アクションも行いません。飛行中のクリーチャーは、それが可能である限り、空中に留まります。空中に留まるために移動する必要がある場合、空中に留まるために必要な最小距離を飛行します。 +Feature/&PowerCommandSpellHaltDescription=ターゲットは移動せず、アクションも実行しません。 Feature/&PowerCommandSpellHaltTitle=停止 Feature/&PowerStrikeWithTheWindDescription=次の攻撃にアドバンテージを与え、ヒット時に追加の 1d8 ダメージを与えます。当たっても外れても、そのターンが終了するまで歩行速度が 30 フィート増加します。 Feature/&PowerStrikeWithTheWindTitle=風とストライク @@ -86,7 +86,7 @@ Spell/&ChaosBoltDescription=ターゲットに対して遠隔呪文攻撃を行 Spell/&ChaosBoltTitle=カオスボルト Spell/&ChromaticOrbDescription=範囲内に見える生き物に直径 4 インチのエネルギーの球を投げます。作成するオーブの種類として酸、冷気、火、稲妻、毒、または雷を選択し、ターゲットに対して遠隔呪文攻撃を行います。攻撃が命中した場合、そのクリーチャーはあなたが選んだタイプに 3d8 のダメージを受けます。 Spell/&ChromaticOrbTitle=クロマティックオーブ -Spell/&CommandSpellDescription=あなたは、範囲内にいるあなたが見ることができるクリーチャーに、一言の命令を告げます。ターゲットは、【判断力】セーヴィング・スローに成功するか、次のターンに命令に従わなければなりません。ターゲットがアンデッドであったり、あなたの言語を理解していなかったり、あなたの命令が直接的にターゲットに害を及ぼす場合、呪文は効果がありません。いくつかの典型的な命令とその効果を次に示します。ここで説明されている以外の命令を発してもよいでしょう。その場合、DM がターゲットの行動を決定します。ターゲットがあなたの命令に従えない場合、呪文は終了します。\n• 接近: ターゲットは最短かつ最も直接的な経路であなたに向かって移動し、ターゲットがあなたの 5 フィート以内に移動した場合にターンを終了します。\n• 逃走: ターゲットは、利用可能な最速の手段であなたから離れることにターンを費やします。\n• 卑屈: ターゲットは倒れてうつ伏せになり、その後ターンを終了します。\n• 停止: ターゲットは移動せず、アクションも行いません。飛行クリーチャーは、それが可能である限り、空中に留まります。空中に留まるために移動する必要がある場合、空中に留まるために必要な最小距離を飛行します。\n2 レベル以上の呪文スロットを使用してこの呪文を発動する場合、2 レベルを超える各スロット レベルごとに、範囲内の追加のクリーチャーをターゲットにすることができます。 +Spell/&CommandSpellDescription=範囲内にいる、あなたが見ることができるクリーチャーに、一言の命令を告げる。対象は【判断力】セーヴィング・スローに成功するか、次のターンに命令に従わなければならない。対象がアンデッドの場合、この呪文は効果がない。命令は以下の通り:\n• 接近: 対象は最短かつ最も直線的な経路であなたに向かって移動し、対象から 5 フィート以内に移動したらターンを終了する。\n• 逃走: 対象はターンを費やして、利用可能な最速の手段であなたから離れる。\n• 卑屈: 対象はうつ伏せになり、その後ターンを終了する。\n• 停止: 対象は移動せず、アクションも行わない。\nこの呪文を 2 レベル以上の呪文スロットを使用して発動する場合、2 レベルを超える各スロット レベルごとに、範囲内にいるクリーチャーをさらに 1 体ターゲットにすることができる。 Spell/&CommandSpellTitle=指示 Spell/&DissonantWhispersDescription=範囲内にいる選択した 1 体のクリーチャーにのみ聞こえる不協和音のメロディーをささやき、そのクリーチャーにひどい苦痛を与えます。ターゲットは【判断力】セーヴィング スローを行わなければなりません。セーヴィング スローに失敗すると、ターゲットは 3d6 の精神ダメージを受け、可能であれば、即座にリアクションを使用して、移動速度が許す限り遠くまで移動して、ターゲットから離れなければなりません。クリーチャーは、火や穴など、明らかに危険な地面には移動しません。セーヴィング スローに成功すると、ターゲットは半分のダメージを受け、離れる必要もありません。この呪文を 2 レベル以上の呪文スロットを使用して発動すると、1 レベルを超える各スロット レベルごとにダメージが 1d6 増加します。 Spell/&DissonantWhispersTitle=不協和音のささやき diff --git a/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells01-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells01-ko.txt index a0a30a9056..86b97cf2ca 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells01-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells01-ko.txt @@ -36,7 +36,7 @@ Feature/&PowerCommandSpellFleeDescription=타겟은 가능한 가장 빠른 수 Feature/&PowerCommandSpellFleeTitle=서두르다 Feature/&PowerCommandSpellGrovelDescription=타겟이 엎어진 후 턴이 끝납니다. Feature/&PowerCommandSpellGrovelTitle=기다 -Feature/&PowerCommandSpellHaltDescription=대상은 움직이지 않고 아무런 행동도 취하지 않습니다. 날아다니는 생물은 공중에 머물러 있을 수만 있다면 공중에 머물러 있습니다. 공중에 머물러야 한다면 공중에 머무르는 데 필요한 최소한의 거리를 날아갑니다. +Feature/&PowerCommandSpellHaltDescription=대상은 움직이지 않고 아무런 행동도 취하지 않습니다. Feature/&PowerCommandSpellHaltTitle=정지 Feature/&PowerStrikeWithTheWindDescription=다음 공격에 이점을 부여하고 적중 시 1d8의 추가 피해를 입힙니다. 맞히든 놓치든, 회전이 끝날 때까지 걷는 속도가 30피트 증가합니다. Feature/&PowerStrikeWithTheWindTitle=바람으로 공격하다 @@ -86,7 +86,7 @@ Spell/&ChaosBoltDescription=대상에게 원거리 주문 공격을 합니다. Spell/&ChaosBoltTitle=카오스볼트 Spell/&ChromaticOrbDescription=범위 내에서 볼 수 있는 생물에게 직경 4인치의 에너지 구체를 던집니다. 생성하는 오브 유형에 대해 산성, 냉기, 불, 번개, 독 또는 천둥을 선택한 다음 대상에 대해 원거리 주문 공격을 가합니다. 공격이 적중하면 생물은 선택한 유형의 3d8 피해를 입습니다. Spell/&ChromaticOrbTitle=색채의 오브 -Spell/&CommandSpellDescription=당신은 범위 내에서 볼 수 있는 생물에게 한 단어 명령을 내립니다. 대상은 지혜 구원 굴림에 성공해야 하고 그렇지 않으면 다음 턴에 명령을 따라야 합니다. 대상이 언데드이거나, 당신의 언어를 이해하지 못하거나, 당신의 명령이 대상에게 직접적으로 해롭다면 이 주문은 효과가 없습니다. 일부 전형적인 명령과 그 효과가 뒤따릅니다. 여기에 설명된 것 외의 명령을 내릴 수도 있습니다. 그렇게 할 경우 DM은 대상의 행동을 결정합니다. 대상이 명령을 따를 수 없다면 주문은 끝납니다.\n• 접근: 대상은 가장 짧고 직접적인 경로로 당신에게 다가오며, 5피트 이내로 이동하면 턴을 끝냅니다.\n• 도망: 대상은 가능한 가장 빠른 수단으로 당신에게서 멀어지며 턴을 보냅니다.\n• 기어다니기: 대상은 엎드린 다음 턴을 끝냅니다.\n• 정지: 대상은 움직이지 않고 아무런 행동도 취하지 않습니다. 날아다니는 생물은 공중에 머물러야 합니다. 공중에 머물기 위해 이동해야 하는 경우, 공중에 머무르는 데 필요한 최소한의 거리를 날아갑니다.\n2레벨 이상의 주문 슬롯을 사용하여 이 주문을 시전할 경우, 2레벨을 넘는 슬롯 레벨마다 범위 내에 있는 추가 생물을 대상으로 지정할 수 있습니다. +Spell/&CommandSpellDescription=당신은 범위 내에서 볼 수 있는 생물에게 한 단어 명령을 내립니다. 대상은 지혜 구원 굴림에 성공해야 하고 그렇지 않으면 다음 턴에 명령을 따라야 합니다. 대상이 언데드인 경우 이 주문은 효과가 없습니다. 명령은 다음과 같습니다.\n• 접근: 대상은 가장 짧고 직접적인 경로로 당신을 향해 이동하며, 5피트 이내로 이동하면 턴을 끝냅니다.\n• 도망: 대상은 가능한 가장 빠른 수단으로 당신에게서 멀어지며 턴을 보냅니다.\n• 굴욕: 대상은 엎드린 다음 턴을 끝냅니다.\n• 정지: 대상은 움직이지 않고 아무런 행동도 취하지 않습니다.\n2레벨 이상의 주문 슬롯을 사용하여 이 주문을 시전할 때, 2레벨 이상의 슬롯 레벨마다 범위 내에 있는 추가 생물을 대상으로 지정할 수 있습니다. Spell/&CommandSpellTitle=명령 Spell/&DissonantWhispersDescription=당신은 범위 내에서 당신이 선택한 한 생명체만 들을 수 있는 불협화음의 멜로디를 속삭이며, 끔찍한 고통으로 그 생명체를 괴롭힙니다. 대상은 지혜 구원 굴림을 해야 합니다. 구원에 실패하면, 대상은 3d6의 사이킥 피해를 입고, 가능하다면 즉시 반응을 사용하여 속도가 허락하는 한 멀리 당신에게서 멀어져야 합니다. 그 생명체는 불이나 구덩이와 같이 명백히 위험한 곳으로 이동하지 않습니다. 구원에 성공하면, 대상은 절반의 피해를 입고, 멀어질 필요가 없습니다. 2레벨 이상의 주문 슬롯을 사용하여 이 주문을 시전하면, 1레벨 위의 슬롯 레벨마다 피해가 1d6씩 증가합니다. Spell/&DissonantWhispersTitle=불협화음의 속삭임 diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells01-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells01-pt-BR.txt index e90adf0fd5..1e9b5f760b 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells01-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells01-pt-BR.txt @@ -36,7 +36,7 @@ Feature/&PowerCommandSpellFleeDescription=O alvo passa seu turno se afastando de Feature/&PowerCommandSpellFleeTitle=Fugir Feature/&PowerCommandSpellGrovelDescription=O alvo cai no chão e então termina seu turno. Feature/&PowerCommandSpellGrovelTitle=Rastejar -Feature/&PowerCommandSpellHaltDescription=O alvo não se move e não realiza nenhuma ação. Uma criatura voadora permanece no ar, desde que seja capaz de fazê-lo. Se ela tiver que se mover para permanecer no ar, ela voa a distância mínima necessária para permanecer no ar. +Feature/&PowerCommandSpellHaltDescription=O alvo não se move e não realiza nenhuma ação. Feature/&PowerCommandSpellHaltTitle=Parar Feature/&PowerStrikeWithTheWindDescription=Conceda vantagem ao seu próximo ataque e causa 1d8 de dano extra em um acerto. Não importa se você acerta ou erra, sua velocidade de caminhada aumenta em 30 pés até o fim daquele turno. Feature/&PowerStrikeWithTheWindTitle=Ataque com o vento @@ -86,7 +86,7 @@ Spell/&ChaosBoltDescription=Faça um ataque mágico à distância contra um alvo Spell/&ChaosBoltTitle=Raio do Caos Spell/&ChromaticOrbDescription=Você arremessa uma esfera de energia de 4 polegadas de diâmetro em uma criatura que você pode ver dentro do alcance. Você escolhe ácido, frio, fogo, relâmpago, veneno ou trovão para o tipo de orbe que você cria, e então faz um ataque de magia à distância contra o alvo. Se o ataque acertar, a criatura sofre 3d8 de dano do tipo que você escolheu. Spell/&ChromaticOrbTitle=Orbe Cromático -Spell/&CommandSpellDescription=Você fala um comando de uma palavra para uma criatura que você pode ver dentro do alcance. O alvo deve ter sucesso em um teste de resistência de Sabedoria ou seguir o comando em seu próximo turno. A magia não tem efeito se o alvo for morto-vivo, se ele não entender sua língua ou se seu comando for diretamente prejudicial a ele. Alguns comandos típicos e seus efeitos seguem. Você pode emitir um comando diferente daquele descrito aqui. Se você fizer isso, o Mestre determina como o alvo se comporta. Se o alvo não puder seguir seu comando, a magia termina.\n• Aproximar-se: O alvo se move em sua direção pela rota mais curta e direta, terminando seu turno se ele se mover a 1,5 m de você.\n• Fugir: O alvo gasta seu turno se afastando de você pelo meio mais rápido disponível.\n• Rastejar: O alvo cai e então termina seu turno.\n• Parar: O alvo não se move e não realiza nenhuma ação. Uma criatura voadora permanece no ar, desde que seja capaz de fazê-lo. Se ele precisar se mover para permanecer no ar, ele voa a distância mínima necessária para permanecer no ar.\nQuando você conjura esta magia usando um espaço de magia de 2º nível ou superior, você pode escolher uma criatura adicional dentro do alcance para cada nível de espaço acima de 2º. +Spell/&CommandSpellDescription=Você fala um comando de uma palavra para uma criatura que você pode ver dentro do alcance. O alvo deve ter sucesso em um teste de resistência de Sabedoria ou seguir o comando em seu próximo turno. A magia não tem efeito se o alvo for morto-vivo. Os comandos seguem:\n• Aproximar: O alvo se move em sua direção pela rota mais curta e direta, terminando seu turno se ele se mover a 1,5 m de você.\n• Fugir: O alvo gasta seu turno se afastando de você pelo meio mais rápido disponível.\n• Rastejar: O alvo cai de bruços e então termina seu turno.\n• Parar: O alvo não se move e não realiza nenhuma ação.\nQuando você conjura esta magia usando um espaço de magia de 2º nível ou superior, você pode escolher uma criatura adicional dentro do alcance para cada nível de espaço acima de 2º. Spell/&CommandSpellTitle=Comando Spell/&DissonantWhispersDescription=Você sussurra uma melodia dissonante que somente uma criatura de sua escolha dentro do alcance pode ouvir, atormentando-a com uma dor terrível. O alvo deve fazer um teste de resistência de Sabedoria. Em um teste falho, ele sofre 3d6 de dano psíquico e deve usar imediatamente sua reação, se disponível, para se mover o mais longe que sua velocidade permitir para longe de você. A criatura não se move para um terreno obviamente perigoso, como uma fogueira ou um poço. Em um teste bem-sucedido, o alvo sofre metade do dano e não precisa se afastar. Quando você conjura esta magia usando um espaço de magia de 2º nível ou superior, o dano aumenta em 1d6 para cada nível de espaço acima do 1º. Spell/&DissonantWhispersTitle=Sussurros Dissonantes diff --git a/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells01-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells01-ru.txt index aa7e14ecbd..91ece93c20 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells01-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells01-ru.txt @@ -36,7 +36,7 @@ Feature/&PowerCommandSpellFleeDescription=Цель тратит свой ход Feature/&PowerCommandSpellFleeTitle=Бежать Feature/&PowerCommandSpellGrovelDescription=Цель падает ничком и завершает свой ход. Feature/&PowerCommandSpellGrovelTitle=Пресмыкаться -Feature/&PowerCommandSpellHaltDescription=Цель не двигается и не предпринимает никаких действий. Летающее существо остается в воздухе, если оно может это сделать. Если ему нужно двигаться, чтобы оставаться в воздухе, оно пролетает минимальное расстояние, необходимое для того, чтобы оставаться в воздухе. +Feature/&PowerCommandSpellHaltDescription=Цель не двигается и не предпринимает никаких действий. Feature/&PowerCommandSpellHaltTitle=Остановить Feature/&PowerStrikeWithTheWindDescription=Дарует преимущество на вашу следующую атаку оружием и наносит дополнительно 1d8 урона силовым полем при попадании. Вне зависимости от того, попали вы или промахнулись, ваша скорость ходьбы увеличивается на 30 футов до конца этого хода. Feature/&PowerStrikeWithTheWindTitle=Удар Зефира @@ -86,7 +86,7 @@ Spell/&ChaosBoltDescription=Вы бросаете волнистую, трепе Spell/&ChaosBoltTitle=Снаряд хаоса Spell/&ChromaticOrbDescription=Вы бросаете 4-дюймовую сферу энергии в существо, которое видите в пределах дистанции. Выберите звук, кислоту, огонь, холод, электричество или яд при создании сферы, а затем совершите по цели дальнобойную атаку заклинанием. Если атака попадает, существо получает 3d8 урона выбранного вида. Spell/&ChromaticOrbTitle=Цветной шарик -Spell/&CommandSpellDescription=Вы произносите однословную команду существу, которое видите в пределах досягаемости. Цель должна преуспеть в спасброске Мудрости или выполнить команду на следующем ходу. Заклинание не действует, если цель — нежить, если она не понимает вашего языка или если ваша команда наносит ей прямой вред. Далее следуют некоторые типичные команды и их эффекты. Вы можете отдать команду, отличную от описанной здесь. Если вы это сделаете, DM определит, как поведет себя цель. Если цель не может выполнить вашу команду, заклинание заканчивается.\n• Приближение: цель движется к вам по кратчайшему и самому прямому маршруту, заканчивая свой ход, если она движется в пределах 5 футов от вас.\n• Бегство: цель проводит свой ход, удаляясь от вас максимально быстрым доступным способом.\n• Пресмыкание: цель падает ничком, а затем заканчивает свой ход.\n• Остановка: цель не двигается и не совершает никаких действий. Летающее существо остается в воздухе, при условии, что оно может это сделать. Если ему необходимо двигаться, чтобы оставаться в воздухе, он пролетает минимальное расстояние, необходимое для того, чтобы оставаться в воздухе.\nКогда вы произносите это заклинание, используя ячейку заклинания 2-го уровня или выше, вы можете выбрать в качестве цели дополнительное существо в пределах дальности для каждого уровня ячейки выше 2-го. +Spell/&CommandSpellDescription=Вы произносите однословную команду существу, которое видите в пределах досягаемости. Цель должна преуспеть в спасброске Мудрости или выполнить команду на следующем ходу. Заклинание не действует, если цель — нежить. Команды следуют:\n• Приближение: цель движется к вам по кратчайшему и самому прямому маршруту, заканчивая свой ход, если она движется в пределах 5 футов от вас.\n• Бегство: цель проводит свой ход, удаляясь от вас максимально быстрым доступным способом.\n• Пресмыкание: цель падает ничком и затем заканчивает свой ход.\n• Остановка: цель не двигается и не совершает никаких действий.\nКогда вы произносите это заклинание, используя ячейку заклинания 2-го уровня или выше, вы можете нацелить дополнительное существо в пределах досягаемости для каждого уровня ячейки выше 2-го. Spell/&CommandSpellTitle=Команда Spell/&DissonantWhispersDescription=Вы шепчете диссонирующую мелодию, которую может услышать только одно существо по вашему выбору в пределах досягаемости, причиняя ему ужасную боль. Цель должна сделать спасбросок Мудрости. При провале она получает 3d6 психического урона и должна немедленно использовать свою реакцию, если она доступна, чтобы отойти от вас как можно дальше, насколько позволяет ее скорость. Существо не перемещается в явно опасную местность, такую ​​как огонь или яма. При успешном спасброске цель получает половину урона и ей не нужно отходить. Когда вы произносите это заклинание, используя ячейку заклинания 2-го уровня или выше, урон увеличивается на 1d6 за каждый уровень ячейки выше 1-го. Spell/&DissonantWhispersTitle=Диссонансный шепот diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells01-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells01-zh-CN.txt index 63adc9c36b..8e1efed586 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells01-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells01-zh-CN.txt @@ -36,7 +36,7 @@ Feature/&PowerCommandSpellFleeDescription=目标会利用自己的回合以最 Feature/&PowerCommandSpellFleeTitle=逃跑 Feature/&PowerCommandSpellGrovelDescription=目标倒下然后结束其回合。 Feature/&PowerCommandSpellGrovelTitle=拜倒 -Feature/&PowerCommandSpellHaltDescription=目标不移动也不采取任何行动。飞行生物只要有能力就会停留在空中。如果必须移动才能停留在空中,它会飞行保持在空中所需的最短距离。 +Feature/&PowerCommandSpellHaltDescription=目标不动也不采取任何行动。 Feature/&PowerCommandSpellHaltTitle=停止 Feature/&PowerStrikeWithTheWindDescription=为你的下一次攻击提供优势,并在命中时造成额外 1d8 伤害。无论你命中还是未命中,你的步行速度都会增加 30 尺,直到该回合结束。 Feature/&PowerStrikeWithTheWindTitle=乘风而击 @@ -86,7 +86,7 @@ Spell/&ChaosBoltDescription=对目标进行远程法术攻击。命中后,目 Spell/&ChaosBoltTitle=混乱箭 Spell/&ChromaticOrbDescription=你向范围内你能看到的一个生物投掷一个直径 4 寸的能量球。你选择强酸、冷冻、火焰、闪电、毒素或雷鸣作为你创造的球体类型,然后对目标进行远程法术攻击。如果攻击命中,该生物将受到你选择类型的 3d8 点伤害。 Spell/&ChromaticOrbTitle=繁彩球 -Spell/&CommandSpellDescription=你对范围内可见的生物说出一个单词命令。目标必须成功通过感知豁免检定,否则在下一回合执行命令。如果目标是不死生物、无法理解你的语言或你的命令对其有直接伤害,则该法术无效。以下是一些典型命令及其效果。你可以发出除此处所述以外的命令。如果你这样做,DM 会确定目标的行为方式。如果目标无法遵循你的命令,法术将结束。\n• 接近:目标以最短、最直接的路线向你移动,如果移动到距离你 5 英尺以内,则结束其回合。\n• 逃跑:目标在其回合中以最快的方式远离你。\n• 匍匐:目标倒下,然后结束其回合。\n• 停止:目标不移动,不采取任何行动。飞行生物会停留在空中,前提是它能够这样做。如果它必须移动才能保持在空中,它会飞行保持在空中所需的最短距离。\n当你使用 2 级或更高级别的法术位施放此法术时,你可以将高于 2 级的每个法术位等级作为范围内的一个额外生物作为目标。 +Spell/&CommandSpellDescription=你对范围内可见的生物说出一个单词命令。目标必须成功通过感知豁免检定,否则在下一回合执行命令。如果目标是不死生物,则该法术无效。命令如下:\n• 接近:目标以最短、最直接的路线向你移动,如果它移动到距离你 5 英尺以内,则结束其回合。\n• 逃跑:目标在其回合中以最快的方式远离你。\n• 卑躬屈膝:目标俯卧,然后结束其回合。\n• 停止:目标不移动也不采取任何行动。\n当你使用 2 级或更高级别的法术位施放此法术时,你可以将范围内的额外生物作为目标,每个高于 2 级的法术位等级都可以。 Spell/&CommandSpellTitle=命令 Spell/&DissonantWhispersDescription=你低声吟唱着一段刺耳的旋律,只有你选择的范围内的一个生物可以听到,这让目标痛苦不堪。目标必须进行一次感知豁免检定。如果豁免失败,目标将受到 3d6 精神伤害,并且必须立即使用其反应(如果可用)以尽可能快的速度远离你。该生物不会移动到明显危险的地方,例如火或坑。如果豁免成功,目标受到的伤害减半,并且不必离开。当你使用 2 级或更高级别的法术位施放此法术时,伤害每高于 1 级法术位等级增加 1d6。 Spell/&DissonantWhispersTitle=不和谐的私语 From e5c76050bb40a832654df4048abbed330f77b3f0 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Tue, 3 Sep 2024 22:42:07 -0700 Subject: [PATCH 029/212] improve mod UI to ensure anything that should be the same on MP sessions is under Gameplay --- .../Displays/GameUiDisplay.cs | 127 ------------------ .../Displays/ToolsDisplay.cs | 127 ++++++++++++++++++ SolastaUnfinishedBusiness/Displays/_ModUi.cs | 2 + 3 files changed, 129 insertions(+), 127 deletions(-) diff --git a/SolastaUnfinishedBusiness/Displays/GameUiDisplay.cs b/SolastaUnfinishedBusiness/Displays/GameUiDisplay.cs index 605c9213b7..c1558bea39 100644 --- a/SolastaUnfinishedBusiness/Displays/GameUiDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/GameUiDisplay.cs @@ -2,121 +2,11 @@ using SolastaUnfinishedBusiness.Api.ModKit; using SolastaUnfinishedBusiness.CustomUI; using SolastaUnfinishedBusiness.Models; -using UnityEngine; namespace SolastaUnfinishedBusiness.Displays; internal static class GameUiDisplay { - private static bool _selectedForSwap; - private static int _selectedX, _selectedY; - private static readonly string[] SetNames = ["1", "2", "3", "4", "5"]; - - private static void DisplayFormationGrid() - { - var selectedSet = Main.Settings.FormationGridSelectedSet; - - using (UI.HorizontalScope()) - { - UI.ActionButton(Gui.Localize("ModUi/&FormationResetAllSets"), () => - { - _selectedForSwap = false; - GameUiContext.ResetAllFormationGrids(); - }, - UI.Width(110f)); - - if (UI.SelectionGrid(ref selectedSet, SetNames, SetNames.Length, SetNames.Length, UI.Width(165f))) - { - _selectedForSwap = false; - Main.Settings.FormationGridSelectedSet = selectedSet; - GameUiContext.FillDefinitionFromFormationGrid(); - } - - UI.Label(Gui.Localize("ModUi/&FormationHelp1")); - } - - UI.Label(); - - for (var y = 0; y < GameUiContext.GridSize; y++) - { - using (UI.HorizontalScope()) - { - // first line - if (y == 0) - { - UI.ActionButton(Gui.Localize("ModUi/&FormationResetThisSet"), () => - { - _selectedForSwap = false; - GameUiContext.ResetFormationGrid(Main.Settings.FormationGridSelectedSet); - }, - UI.Width(110f)); - } - else - { - UI.Label("", UI.Width(110f)); - } - - for (var x = 0; x < GameUiContext.GridSize; x++) - { - var saveColor = GUI.color; - string label; - - if (Main.Settings.FormationGridSets[selectedSet][y][x] == 1) - { - // yep 256 not 255 for a light contrast - GUI.color = new Color(0x1E / 256f, 0x81 / 256f, 0xB0 / 256f); - label = "@"; - } - else - { - label = ".."; - } - - if (_selectedForSwap && _selectedX == x && _selectedY == y) - { - label = $"{label}"; - } - - UI.ActionButton(label, () => - { - // ReSharper disable once InlineTemporaryVariable - // ReSharper disable once AccessToModifiedClosure - var localX = x; - // ReSharper disable once InlineTemporaryVariable - // ReSharper disable once AccessToModifiedClosure - var localY = y; - - if (_selectedForSwap) - { - (Main.Settings.FormationGridSets[selectedSet][localY][localX], - Main.Settings.FormationGridSets[selectedSet][_selectedY][_selectedX]) = ( - Main.Settings.FormationGridSets[selectedSet][_selectedY][_selectedX], - Main.Settings.FormationGridSets[selectedSet][localY][localX]); - - GameUiContext.FillDefinitionFromFormationGrid(); - - _selectedForSwap = false; - } - else - { - _selectedX = localX; - _selectedY = localY; - _selectedForSwap = true; - } - }, UI.Width(30f)); - - GUI.color = saveColor; - } - - // first line - if (y <= 1) - { - UI.Label(Gui.Localize("ModUi/&FormationHelp" + (y + 2))); - } - } - } - } - internal static void DisplayGameUi() { #region Campaign @@ -368,23 +258,6 @@ internal static void DisplayGameUi() #endregion - #region Formation - - UI.Label(); - UI.Label(Gui.Localize("ModUi/&Formation")); - UI.Label(); - - if (Global.IsMultiplayer) - { - UI.Label(Gui.Localize("ModUi/&FormationError")); - } - else - { - DisplayFormationGrid(); - } - - #endregion - #region Input UI.Label(); diff --git a/SolastaUnfinishedBusiness/Displays/ToolsDisplay.cs b/SolastaUnfinishedBusiness/Displays/ToolsDisplay.cs index 0fde12258e..6f3f265d52 100644 --- a/SolastaUnfinishedBusiness/Displays/ToolsDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/ToolsDisplay.cs @@ -2,6 +2,7 @@ using System.Diagnostics; using SolastaUnfinishedBusiness.Api.ModKit; using SolastaUnfinishedBusiness.Models; +using UnityEngine; namespace SolastaUnfinishedBusiness.Displays; @@ -9,9 +10,118 @@ internal static class ToolsDisplay { internal const float DefaultFastTimeModifier = 1.5f; + private static bool _selectedForSwap; + private static int _selectedX, _selectedY; + private static readonly string[] SetNames = ["1", "2", "3", "4", "5"]; + private static string ExportFileName { get; set; } = ServiceRepository.GetService().GetUserName(); + private static void DisplayFormationGrid() + { + var selectedSet = Main.Settings.FormationGridSelectedSet; + + using (UI.HorizontalScope()) + { + UI.ActionButton(Gui.Localize("ModUi/&FormationResetAllSets"), () => + { + _selectedForSwap = false; + GameUiContext.ResetAllFormationGrids(); + }, + UI.Width(110f)); + + if (UI.SelectionGrid(ref selectedSet, SetNames, SetNames.Length, SetNames.Length, UI.Width(165f))) + { + _selectedForSwap = false; + Main.Settings.FormationGridSelectedSet = selectedSet; + GameUiContext.FillDefinitionFromFormationGrid(); + } + + UI.Label(Gui.Localize("ModUi/&FormationHelp1")); + } + + UI.Label(); + + for (var y = 0; y < GameUiContext.GridSize; y++) + { + using (UI.HorizontalScope()) + { + // first line + if (y == 0) + { + UI.ActionButton(Gui.Localize("ModUi/&FormationResetThisSet"), () => + { + _selectedForSwap = false; + GameUiContext.ResetFormationGrid(Main.Settings.FormationGridSelectedSet); + }, + UI.Width(110f)); + } + else + { + UI.Label("", UI.Width(110f)); + } + + for (var x = 0; x < GameUiContext.GridSize; x++) + { + var saveColor = GUI.color; + string label; + + if (Main.Settings.FormationGridSets[selectedSet][y][x] == 1) + { + // yep 256 not 255 for a light contrast + GUI.color = new Color(0x1E / 256f, 0x81 / 256f, 0xB0 / 256f); + label = "@"; + } + else + { + label = ".."; + } + + if (_selectedForSwap && _selectedX == x && _selectedY == y) + { + label = $"{label}"; + } + + UI.ActionButton(label, () => + { + // ReSharper disable once InlineTemporaryVariable + // ReSharper disable once AccessToModifiedClosure + var localX = x; + // ReSharper disable once InlineTemporaryVariable + // ReSharper disable once AccessToModifiedClosure + var localY = y; + + if (_selectedForSwap) + { + (Main.Settings.FormationGridSets[selectedSet][localY][localX], + Main.Settings.FormationGridSets[selectedSet][_selectedY][_selectedX]) = ( + Main.Settings.FormationGridSets[selectedSet][_selectedY][_selectedX], + Main.Settings.FormationGridSets[selectedSet][localY][localX]); + + GameUiContext.FillDefinitionFromFormationGrid(); + + _selectedForSwap = false; + } + else + { + _selectedX = localX; + _selectedY = localY; + _selectedForSwap = true; + } + }, UI.Width(30f)); + + GUI.color = saveColor; + } + + // first line + if (y <= 1) + { + UI.Label(Gui.Localize("ModUi/&FormationHelp" + (y + 2))); + } + } + } + } + internal static void DisplayTools() { DisplayGeneral(); @@ -163,6 +273,23 @@ private static void DisplayAdventure() Main.Settings.FasterTimeModifier = floatValue; } + #region Formation + + UI.Label(); + UI.Label(Gui.Localize("ModUi/&Formation")); + UI.Label(); + + if (Global.IsMultiplayer) + { + UI.Label(Gui.Localize("ModUi/&FormationError")); + } + else + { + DisplayFormationGrid(); + } + + #endregion + #if false UI.Label(); diff --git a/SolastaUnfinishedBusiness/Displays/_ModUi.cs b/SolastaUnfinishedBusiness/Displays/_ModUi.cs index c4467cc5e7..71098ea0cd 100644 --- a/SolastaUnfinishedBusiness/Displays/_ModUi.cs +++ b/SolastaUnfinishedBusiness/Displays/_ModUi.cs @@ -60,9 +60,11 @@ internal static class ModUi "CollegeOfGuts", "CollegeOfLife", "CollegeOfValiance", + "CommandSpell", "CrownOfStars", "CrusadersMantle", "Dawn", + "DissonantWhispers", "DivineWrath", "DomainNature", "DomainTempest", From f606150b47d174e6ed92c06439a2f574b9a4cb8d Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Wed, 4 Sep 2024 08:39:42 -0700 Subject: [PATCH 030/212] finalize Command and Dissonant Whisper spells behaviors and SFX --- .../ConditionCommandSpellApproach.json | 4 +- .../ConditionCommandSpellFlee.json | 4 +- .../SpellDefinition/CommandSpell.json | 8 +- .../SpellDefinition/DissonantWhispers.json | 4 +- Documentation/Spells.md | 4 +- .../Api/DatabaseHelper-RELEASE.cs | 2 + .../ChangelogHistory.txt | 1 + .../Spells/SpellBuildersLevel01.cs | 89 +++++++++---------- 8 files changed, 59 insertions(+), 57 deletions(-) diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellApproach.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellApproach.json index cbb3dc9b04..1dcd085b0a 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellApproach.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellApproach.json @@ -134,8 +134,8 @@ "description": "Feature/&PowerCommandSpellApproachDescription", "spriteReference": { "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", - "m_AssetGUID": "5d503f63f4583dd4a9bd2460a783a470", - "m_SubObjectName": "ConditionSlowed", + "m_AssetGUID": "5e96eb4d8d8193a4cbddbf7477990f88", + "m_SubObjectName": "ConditionPossessed", "m_SubObjectType": "UnityEngine.Sprite, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" }, "color": { diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellFlee.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellFlee.json index 4a8e100df8..8efe403127 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellFlee.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellFlee.json @@ -134,8 +134,8 @@ "description": "Feature/&PowerCommandSpellFleeDescription", "spriteReference": { "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", - "m_AssetGUID": "5d503f63f4583dd4a9bd2460a783a470", - "m_SubObjectName": "ConditionSlowed", + "m_AssetGUID": "5e96eb4d8d8193a4cbddbf7477990f88", + "m_SubObjectName": "ConditionPossessed", "m_SubObjectType": "UnityEngine.Sprite, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" }, "color": { diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpell.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpell.json index 82888b3d5d..b4e8fc0018 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpell.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpell.json @@ -127,7 +127,7 @@ "$type": "EffectParticleParameters, Assembly-CSharp", "casterParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "81560ac3813217d4d9fd281d5e73c234", + "m_AssetGUID": "623efe782aaa3a84fbd91053c5fd1b39", "m_SubObjectName": "", "m_SubObjectType": "" }, @@ -139,7 +139,7 @@ }, "casterQuickSpellParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "81560ac3813217d4d9fd281d5e73c234", + "m_AssetGUID": "", "m_SubObjectName": "", "m_SubObjectType": "" }, @@ -267,13 +267,13 @@ }, "conditionParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", + "m_AssetGUID": "499a6891e29b20d44a372c4728e9d26b", "m_SubObjectName": "", "m_SubObjectType": "" }, "conditionEndParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", + "m_AssetGUID": "5e46102198fad554587b73639eee3b36", "m_SubObjectName": "", "m_SubObjectType": "" }, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/DissonantWhispers.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/DissonantWhispers.json index e57fd8e93c..9ebe854941 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/DissonantWhispers.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/DissonantWhispers.json @@ -135,7 +135,7 @@ "$type": "EffectParticleParameters, Assembly-CSharp", "casterParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "2a5fb39a57ad3754ebaaaccd9e92e9ce", + "m_AssetGUID": "3bbee0a8901577e4bb5b9c9f198695c5", "m_SubObjectName": "", "m_SubObjectType": "" }, @@ -159,7 +159,7 @@ }, "effectParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "05c5c0f49bcabdf449d3dc9ba3ae10cb", + "m_AssetGUID": "be5fe98c7e555f94684032e273a1129a", "m_SubObjectName": "", "m_SubObjectType": "" }, diff --git a/Documentation/Spells.md b/Documentation/Spells.md index d83b61c49f..c2a7afe290 100644 --- a/Documentation/Spells.md +++ b/Documentation/Spells.md @@ -231,7 +231,7 @@ You hurl a 4-inch-diameter sphere of energy at a creature that you can see withi Spray a luminous cone that briefly blinds your enemies. Roll 6d10: the total is how many hit points of creatures this spell can affect. -# 58. - Command (V) level 1 Enchantment [UB] +# 58. - *Command* © (V) level 1 Enchantment [UB] You speak a one-word command to a creature you can see within range. The target must succeed on a Wisdom saving throw or follow the command on its next turn. The spell has no effect if the target is undead. Commands follow: • Approach: The target moves toward you by the shortest and most direct route, ending its turn if it moves within 5 feet of you. @@ -260,7 +260,7 @@ Detect nearby magic objects or creatures. TMP For the duration you sense the presence and location of poisonous creatures and diseases within 6 cells of you. -# 64. - Dissonant Whispers (V) level 1 Enchantment [UB] +# 64. - *Dissonant Whispers* © (V) level 1 Enchantment [UB] You whisper a discordant melody that only one creature of your choice within range can hear, wracking it with terrible pain. The target must make a Wisdom saving throw. On a failed save, it takes 3d6 psychic damage and must immediately use its reaction, if available, to move as far as its speed allows away from you. The creature doesn't move into obviously dangerous ground, such as a fire or a pit. On a successful save, the target takes half as much damage and doesn't have to move away. When you cast this spell using a spell slot of 2nd level or higher, the damage increases by 1d6 for each slot level above 1st. diff --git a/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs b/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs index 8bf2eb0b32..e6c68ec68d 100644 --- a/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs +++ b/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs @@ -1724,6 +1724,8 @@ internal static class FeatureDefinitionPointPools internal static class FeatureDefinitionPowers { + internal static FeatureDefinitionPower PowerBardTraditionVerbalOnslaught { get; } = + GetDefinition("PowerBardTraditionVerbalOnslaught"); internal static FeatureDefinitionPower PowerIncubus_Drain { get; } = GetDefinition("PowerIncubus_Drain"); diff --git a/SolastaUnfinishedBusiness/ChangelogHistory.txt b/SolastaUnfinishedBusiness/ChangelogHistory.txt index e1eb01ff59..b0f8c886d2 100644 --- a/SolastaUnfinishedBusiness/ChangelogHistory.txt +++ b/SolastaUnfinishedBusiness/ChangelogHistory.txt @@ -9,6 +9,7 @@ - improved Conversion Slots, and Shorthand versatilities to react on ability checks - improved game log to avoid voxelization warning messages to flood the same [DM overlay trick] - improved Maneuvering Attack, and Martial Warlord strategic repositioning to use a run stance +- improved mod UI to ensure all settings required to be in sync on MP sessions are now under Gameplay - improved saving roll reaction modal descriptions [Circle of the Cosmos, Sorcerer Wild Magic, etc.] - improved Sorcerer Wild Magic tides of chaos to react on ability checks - improved vanilla to allow reactions on gadget's saving roll [traps] diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs index 8609de57a2..846fa48470 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs @@ -12,7 +12,6 @@ using SolastaUnfinishedBusiness.Interfaces; using SolastaUnfinishedBusiness.Models; using SolastaUnfinishedBusiness.Validators; -using TA; using TA.AI; using UnityEngine; using UnityEngine.AddressableAssets; @@ -1275,7 +1274,7 @@ internal static SpellDefinition BuildCommand() var conditionApproach = ConditionDefinitionBuilder .Create($"Condition{NAME}Approach") - .SetGuiPresentation($"Power{NAME}Approach", Category.Feature, ConditionSlowed) + .SetGuiPresentation($"Power{NAME}Approach", Category.Feature, ConditionPossessed) .SetConditionType(ConditionType.Detrimental) .SetPossessive() .SetSpecialDuration() @@ -1301,7 +1300,7 @@ internal static SpellDefinition BuildCommand() var conditionFlee = ConditionDefinitionBuilder .Create($"Condition{NAME}Flee") - .SetGuiPresentation($"Power{NAME}Flee", Category.Feature, ConditionSlowed) + .SetGuiPresentation($"Power{NAME}Flee", Category.Feature, ConditionPossessed) .SetConditionType(ConditionType.Detrimental) .SetPossessive() .SetSpecialDuration() @@ -1405,6 +1404,7 @@ internal static SpellDefinition BuildCommand() .SetEffectForms(EffectFormBuilder.ConditionForm( conditionSelf, ConditionForm.ConditionOperation.Add, true)) + .SetParticleEffectParameters(Command) .Build()) .AddCustomSubFeatures(new PowerOrSpellFinishedByMeCommand(powerPool)) .AddToDB(); @@ -1412,11 +1412,13 @@ internal static SpellDefinition BuildCommand() return spell; } - private sealed class PowerOrSpellFinishedByMeCommand(FeatureDefinitionPower powerPool) : IPowerOrSpellFinishedByMe + private sealed class PowerOrSpellFinishedByMeCommand( + FeatureDefinitionPower powerPool, + params ConditionDefinition[] conditions) : IPowerOrSpellFinishedByMe { public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, BaseDefinition baseDefinition) { - if (action.Countered || action.ExecutionFailed) + if (action.Countered || action.ExecutionFailed || action.SaveOutcome == RollOutcome.Success) { yield break; } @@ -1431,7 +1433,30 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, usablePower, [target], caster, - "CommandSpell"); + "CommandSpell", + ReactionValidated); + + continue; + + void ReactionValidated(ReactionRequestSpendBundlePower reactionRequest) + { + if (!reactionRequest.Validated) + { + return; + } + + var rulesetTarget = target.RulesetCharacter; + var conditionsToRemove = rulesetCaster.AllConditions + .Where(x => + x.SourceGuid != caster.Guid && + conditions.Contains(x.ConditionDefinition)) + .ToList(); + + foreach (var condition in conditionsToRemove) + { + rulesetTarget.RemoveCondition(condition); + } + } } } } @@ -1459,7 +1484,8 @@ public void OnConditionRemoved(RulesetCharacter rulesetTarget, RulesetCondition } } - target.EndBattleTurn(Gui.Battle.CurrentRound); + target.SpendActionType(ActionType.Bonus); + target.SpendActionType(ActionType.Main); } } @@ -1500,7 +1526,6 @@ internal static SpellDefinition BuildDissonantWhispers() .Create() .SetTargetingData(Side.Enemy, RangeType.Distance, 12, TargetType.IndividualsUnique) .SetEffectAdvancement(EffectIncrementMethod.PerAdditionalSlotLevel, additionalDicePerIncrement: 1) - .SetParticleEffectParameters(ShadowDagger) .SetSavingThrowData(false, AttributeDefinitions.Wisdom, true, EffectDifficultyClassComputation.SpellCastingFeature) .SetEffectForms( @@ -1509,6 +1534,8 @@ internal static SpellDefinition BuildDissonantWhispers() .HasSavingThrow(EffectSavingThrowType.HalfDamage) .SetDamageForm(DamageTypePsychic, 3, DieType.D6) .Build()) + .SetCasterEffectParameters(Feeblemind) + .SetEffectEffectParameters(PowerBardTraditionVerbalOnslaught) .Build()) .AddCustomSubFeatures(new PowerOrSpellFinishedByMeDissonantWhispers()) .AddToDB(); @@ -1537,49 +1564,21 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, target.SpendActionType(ActionType.Reaction); - var position = GetCandidatePosition(action.ActingCharacter, target); + var aiService = ServiceRepository.GetService(); - target.MyExecuteActionTacticalMove(position); - } + aiService.TryGetAiFromGameCharacter(target, out var aiTarget); + var brain = aiTarget.BattleBrain; + var decisionsBackup = brain.Decisions.ToList(); - private static int3 GetCandidatePosition( - GameLocationCharacter caster, - GameLocationCharacter target, - bool isFar = true) - { - var positioningService = ServiceRepository.GetService(); - var tacticalMoves = target.MaxTacticalMoves; - var boxInt = new BoxInt(target.LocationPosition, int3.zero, int3.zero); - var position = target.LocationPosition; - var distance = -1f; + brain.decisions.SetRange(DecisionPackageDefinitions.Fear.Package.WeightedDecisions); - boxInt.Inflate(tacticalMoves, 0, tacticalMoves); + yield return brain.DecideNextActivity(); - foreach (var candidatePosition in boxInt.EnumerateAllPositionsWithin()) - { - if (!positioningService.CanPlaceCharacter( - target, candidatePosition, CellHelpers.PlacementMode.Station) || - !positioningService.CanCharacterStayAtPosition_Floor( - target, candidatePosition, onlyCheckCellsWithRealGround: true) || - positioningService.IsDangerousPosition(target, candidatePosition)) - { - continue; - } + var position = brain.SelectedDecision.context.position; - var candidateDistance = int3.Distance(candidatePosition, caster.LocationPosition); - - if ((isFar && candidateDistance < distance) || - (!isFar && candidateDistance > distance)) - { - continue; - } - - distance = candidateDistance; - position = candidatePosition; - } - - return position; + brain.decisions.SetRange(decisionsBackup); + target.MyExecuteActionTacticalMove(position); } } From 9e6e023253478ba1173dac72046bddb2871b7f08 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Wed, 4 Sep 2024 17:22:50 -0700 Subject: [PATCH 031/212] fix Bend Luck, Flash of Genius, Inspiring Protection, Shield Master, and Weal/Woe not consuming reaction --- SolastaUnfinishedBusiness/ChangelogHistory.txt | 3 ++- SolastaUnfinishedBusiness/Classes/InventorClass.cs | 7 ++++++- SolastaUnfinishedBusiness/Feats/ArmorFeats.cs | 5 ++++- .../Subclasses/CircleOfTheCosmos.cs | 12 ++++++++++++ .../Subclasses/MartialRoyalKnight.cs | 3 ++- .../Subclasses/SorcerousWildMagic.cs | 6 ++++++ 6 files changed, 32 insertions(+), 4 deletions(-) diff --git a/SolastaUnfinishedBusiness/ChangelogHistory.txt b/SolastaUnfinishedBusiness/ChangelogHistory.txt index b0f8c886d2..8df6e7e03a 100644 --- a/SolastaUnfinishedBusiness/ChangelogHistory.txt +++ b/SolastaUnfinishedBusiness/ChangelogHistory.txt @@ -4,7 +4,8 @@ - fixed Barbarian Sundering Blow interaction with Call Lightning, and other proxy like powers - fixed Lucky, and Mage Slayer feats double consumption - fixed Martial Commander coordinated defense to require an attack first [VANILLA] -- fixed Party Editor to register/unregister powers from feats +- fixed Party Editor to register/unregister powers from feats +- fixed Bend Luck, Flash of Genius, Inspiring Protection, Shield Master, and Weal/Woe not consuming reaction - improved ability checks to also allow reactions on success [Circle of the Cosmos woe] - improved Conversion Slots, and Shorthand versatilities to react on ability checks - improved game log to avoid voxelization warning messages to flood the same [DM overlay trick] diff --git a/SolastaUnfinishedBusiness/Classes/InventorClass.cs b/SolastaUnfinishedBusiness/Classes/InventorClass.cs index 1aa5e0c360..eb4b8c37f0 100644 --- a/SolastaUnfinishedBusiness/Classes/InventorClass.cs +++ b/SolastaUnfinishedBusiness/Classes/InventorClass.cs @@ -17,6 +17,7 @@ using SolastaUnfinishedBusiness.Properties; using SolastaUnfinishedBusiness.Subclasses.Builders; using SolastaUnfinishedBusiness.Validators; +using static ActionDefinitions; using static RuleDefinitions; using static SolastaUnfinishedBusiness.Api.DatabaseHelper; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.CharacterClassDefinitions; @@ -594,7 +595,7 @@ private static FeatureDefinitionFeatureSet BuildRitualCasting() FeatureDefinitionActionAffinityBuilder .Create("ActionAffinityInventorRituals") .SetGuiPresentationNoContent(true) - .SetAuthorizedActions(ActionDefinitions.Id.CastRitual) + .SetAuthorizedActions(Id.CastRitual) .AddToDB()) .AddToDB(); } @@ -1019,6 +1020,8 @@ public IEnumerator OnTryAlterAttributeCheck( void ReactionValidated() { + helper.SpendActionType(ActionType.Reaction); + var abilityCheckModifier = abilityCheckData.AbilityCheckActionModifier; abilityCheckModifier.AbilityCheckModifierTrends.Add( @@ -1092,6 +1095,8 @@ public IEnumerator OnTryAlterOutcomeSavingThrow( void ReactionValidated() { + helper.SpendActionType(ActionType.Reaction); + savingThrowData.SaveOutcomeDelta += bonus; savingThrowData.SaveOutcome = savingThrowData.SaveOutcomeDelta >= 0 ? RollOutcome.Success : RollOutcome.Failure; diff --git a/SolastaUnfinishedBusiness/Feats/ArmorFeats.cs b/SolastaUnfinishedBusiness/Feats/ArmorFeats.cs index 6b77a5b358..578de2ec21 100644 --- a/SolastaUnfinishedBusiness/Feats/ArmorFeats.cs +++ b/SolastaUnfinishedBusiness/Feats/ArmorFeats.cs @@ -8,6 +8,7 @@ using SolastaUnfinishedBusiness.Builders.Features; using SolastaUnfinishedBusiness.Interfaces; using SolastaUnfinishedBusiness.Validators; +using static ActionDefinitions; using static RuleDefinitions; using static EquipmentDefinitions; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatDefinitions; @@ -117,7 +118,7 @@ private static FeatDefinition BuildFeatShieldTechniques() var actionAffinityShieldTechniques = FeatureDefinitionActionAffinityBuilder .Create($"ActionAffinity{Name}") .SetGuiPresentationNoContent(true) - .SetAuthorizedActions(ActionDefinitions.Id.ShoveBonus) + .SetAuthorizedActions(Id.ShoveBonus) .AddCustomSubFeatures( new ValidateDefinitionApplication(ValidatorsCharacter.HasShield, ValidatorsCharacter.HasAttacked)) .AddToDB(); @@ -185,6 +186,8 @@ public IEnumerator OnMagicEffectBeforeHitConfirmedOnMe( void ReactionValidated() { + defender.SpendActionType(ActionType.Reaction); + actionModifier.DefenderDamageMultiplier *= 0.5f; rulesetDefender.DamageHalved(rulesetDefender, powerShieldTechniques); diff --git a/SolastaUnfinishedBusiness/Subclasses/CircleOfTheCosmos.cs b/SolastaUnfinishedBusiness/Subclasses/CircleOfTheCosmos.cs index 8fa4bb8f09..9523512554 100644 --- a/SolastaUnfinishedBusiness/Subclasses/CircleOfTheCosmos.cs +++ b/SolastaUnfinishedBusiness/Subclasses/CircleOfTheCosmos.cs @@ -824,6 +824,8 @@ public IEnumerator OnTryAlterOutcomeAttack( void ReactionValidated() { + helper.SpendActionType(ActionDefinitions.ActionType.Reaction); + var dieRoll = rulesetHelper.RollDie(DieType, RollContext.None, false, AdvantageType.None, out _, out _); attackModifier.AttacktoHitTrends.Add( @@ -887,6 +889,8 @@ public IEnumerator OnTryAlterAttributeCheck( void ReactionValidated() { + helper.SpendActionType(ActionDefinitions.ActionType.Reaction); + var dieRoll = rulesetHelper.RollDie(DieType, RollContext.None, false, AdvantageType.None, out _, out _); var abilityCheckModifier = abilityCheckData.AbilityCheckActionModifier; @@ -959,6 +963,8 @@ public IEnumerator OnTryAlterOutcomeSavingThrow( void ReactionValidated() { + helper.SpendActionType(ActionDefinitions.ActionType.Reaction); + var dieRoll = rulesetHelper.RollDie(DieType, RollContext.None, false, AdvantageType.None, out _, out _); savingThrowData.SaveOutcomeDelta += dieRoll; @@ -1040,6 +1046,8 @@ public IEnumerator OnTryAlterOutcomeAttack( void ReactionValidated() { + helper.SpendActionType(ActionDefinitions.ActionType.Reaction); + var dieRoll = -rulesetHelper.RollDie(DieType, RollContext.None, false, AdvantageType.None, out _, out _); @@ -1104,6 +1112,8 @@ abilityCheckData.AbilityCheckRollOutcome is not (RollOutcome.Success or RollOutc void ReactionValidated() { + helper.SpendActionType(ActionDefinitions.ActionType.Reaction); + var dieRoll = -rulesetHelper.RollDie(DieType, RollContext.None, false, AdvantageType.None, out _, out _); var abilityCheckModifier = abilityCheckData.AbilityCheckActionModifier; @@ -1178,6 +1188,8 @@ public IEnumerator OnTryAlterOutcomeSavingThrow( void ReactionValidated() { + helper.SpendActionType(ActionDefinitions.ActionType.Reaction); + var dieRoll = -rulesetHelper.RollDie(DieType, RollContext.None, false, AdvantageType.None, out _, out _); diff --git a/SolastaUnfinishedBusiness/Subclasses/MartialRoyalKnight.cs b/SolastaUnfinishedBusiness/Subclasses/MartialRoyalKnight.cs index 02dc3a2156..1950344cf5 100644 --- a/SolastaUnfinishedBusiness/Subclasses/MartialRoyalKnight.cs +++ b/SolastaUnfinishedBusiness/Subclasses/MartialRoyalKnight.cs @@ -276,7 +276,8 @@ public IEnumerator OnTryAlterOutcomeSavingThrow( void ReactionValidated() { - rulesetHelper.UsePower(usablePower); + helper.SpendActionType(ActionDefinitions.ActionType.Reaction); + TryAlterOutcomeSavingThrow.TryRerollSavingThrow(attacker, defender, savingThrowData, hasHitVisual); } } diff --git a/SolastaUnfinishedBusiness/Subclasses/SorcerousWildMagic.cs b/SolastaUnfinishedBusiness/Subclasses/SorcerousWildMagic.cs index 8e2f0ca5b4..0d839c934a 100644 --- a/SolastaUnfinishedBusiness/Subclasses/SorcerousWildMagic.cs +++ b/SolastaUnfinishedBusiness/Subclasses/SorcerousWildMagic.cs @@ -865,6 +865,8 @@ public IEnumerator OnTryAlterOutcomeAttack( void ReactionValidated() { + helper.SpendActionType(ActionDefinitions.ActionType.Reaction); + EffectHelpers.StartVisualEffect(helper, attacker, PowerDomainLawHolyRetribution, EffectHelpers.EffectType.Caster); @@ -975,6 +977,8 @@ public IEnumerator OnTryAlterAttributeCheck( void ReactionValidated() { + helper.SpendActionType(ActionDefinitions.ActionType.Reaction); + EffectHelpers.StartVisualEffect(helper, defender, PowerDomainLawHolyRetribution, EffectHelpers.EffectType.Caster); @@ -1091,6 +1095,8 @@ public IEnumerator OnTryAlterOutcomeSavingThrow( void ReactionValidated() { + helper.SpendActionType(ActionDefinitions.ActionType.Reaction); + EffectHelpers.StartVisualEffect(helper, defender, PowerDomainLawHolyRetribution, EffectHelpers.EffectType.Caster); From ed5ec4cfdd9e4f59297ce2bfa0a7a8772053b775 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Wed, 4 Sep 2024 17:23:56 -0700 Subject: [PATCH 032/212] fix Dwarven Fortitude, and Magical Guidance incorrectly consuming a reaction --- SolastaUnfinishedBusiness/ChangelogHistory.txt | 3 ++- SolastaUnfinishedBusiness/Feats/RaceFeats.cs | 2 +- SolastaUnfinishedBusiness/Models/CharacterContext.cs | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/SolastaUnfinishedBusiness/ChangelogHistory.txt b/SolastaUnfinishedBusiness/ChangelogHistory.txt index 8df6e7e03a..ca2c39a917 100644 --- a/SolastaUnfinishedBusiness/ChangelogHistory.txt +++ b/SolastaUnfinishedBusiness/ChangelogHistory.txt @@ -2,10 +2,11 @@ - added Command [Bard, Cleric, Paladin], and Dissonant Whispers [Bard] spells - fixed Barbarian Sundering Blow interaction with Call Lightning, and other proxy like powers +- fixed Bend Luck, Flash of Genius, Inspiring Protection, Shield Master, and Weal/Woe not consuming reaction +- fixed Dwarven Fortitude, and Magical Guidance incorrectly consuming a reaction - fixed Lucky, and Mage Slayer feats double consumption - fixed Martial Commander coordinated defense to require an attack first [VANILLA] - fixed Party Editor to register/unregister powers from feats -- fixed Bend Luck, Flash of Genius, Inspiring Protection, Shield Master, and Weal/Woe not consuming reaction - improved ability checks to also allow reactions on success [Circle of the Cosmos woe] - improved Conversion Slots, and Shorthand versatilities to react on ability checks - improved game log to avoid voxelization warning messages to flood the same [DM overlay trick] diff --git a/SolastaUnfinishedBusiness/Feats/RaceFeats.cs b/SolastaUnfinishedBusiness/Feats/RaceFeats.cs index 7380fe31bc..28e284d7e6 100644 --- a/SolastaUnfinishedBusiness/Feats/RaceFeats.cs +++ b/SolastaUnfinishedBusiness/Feats/RaceFeats.cs @@ -1126,7 +1126,7 @@ public IEnumerator OnActionFinishedByMe(CharacterAction characterAction) // any reaction within a ByMe trigger should use the acting character as waiter yield return attacker.MyReactToDoNothing( - ExtraActionId.DoNothingReaction, + ExtraActionId.DoNothingFree, attacker, "DwarvenFortitude", "CustomReactionDwarvenFortitudeDescription".Formatted(Category.Reaction), diff --git a/SolastaUnfinishedBusiness/Models/CharacterContext.cs b/SolastaUnfinishedBusiness/Models/CharacterContext.cs index bafe566426..d7a63d4217 100644 --- a/SolastaUnfinishedBusiness/Models/CharacterContext.cs +++ b/SolastaUnfinishedBusiness/Models/CharacterContext.cs @@ -1208,7 +1208,7 @@ public IEnumerator OnTryAlterAttributeCheck( } yield return helper.MyReactToDoNothing( - ExtraActionId.DoNothingReaction, + ExtraActionId.DoNothingFree, defender, "MagicalGuidanceCheck", "CustomReactionMagicalGuidanceCheckDescription" From 9f74e5be3dff932158a597a209f3d6007e5b0c50 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Wed, 4 Sep 2024 17:47:05 -0700 Subject: [PATCH 033/212] remove superfluous SetAllowedActionTypes() --- SolastaUnfinishedBusiness/Races/Wyrmkin.cs | 1 - SolastaUnfinishedBusiness/Subclasses/PathOfTheWildMagic.cs | 7 ------- 2 files changed, 8 deletions(-) diff --git a/SolastaUnfinishedBusiness/Races/Wyrmkin.cs b/SolastaUnfinishedBusiness/Races/Wyrmkin.cs index a570f37910..cc39de1094 100644 --- a/SolastaUnfinishedBusiness/Races/Wyrmkin.cs +++ b/SolastaUnfinishedBusiness/Races/Wyrmkin.cs @@ -416,7 +416,6 @@ private static CharacterRaceDefinition BuildCrystalWyrmkin(CharacterRaceDefiniti var actionAffinityCrystalWyrmkinCrystalDefense = FeatureDefinitionActionAffinityBuilder .Create($"ActionAffinity{Name}CrystalDefense") .SetGuiPresentation(Category.Feature) - .SetAllowedActionTypes() .SetAuthorizedActions((Id)ExtraActionId.CrystalDefenseOn) .AddToDB(); diff --git a/SolastaUnfinishedBusiness/Subclasses/PathOfTheWildMagic.cs b/SolastaUnfinishedBusiness/Subclasses/PathOfTheWildMagic.cs index 1edf8252a2..b32c6e54a6 100644 --- a/SolastaUnfinishedBusiness/Subclasses/PathOfTheWildMagic.cs +++ b/SolastaUnfinishedBusiness/Subclasses/PathOfTheWildMagic.cs @@ -68,7 +68,6 @@ public PathOfTheWildMagic() .Create(FeatureDefinitionActionAffinitys.ActionAffinityBarbarianRecklessAttack, $"ActionAffinity{Name}Reroll") .SetGuiPresentationNoContent(true) - .SetAllowedActionTypes() .SetAuthorizedActions((Id)ExtraActionId.WildSurgeReroll) .AddToDB(); @@ -307,7 +306,6 @@ private static WildSurgeEffect BuildWildSurgeTeleport() var actionAffinityTeleport = FeatureDefinitionActionAffinityBuilder .Create($"ActionAffinity{Name}Teleport") .SetGuiPresentationNoContent(true) - .SetAllowedActionTypes() .SetAuthorizedActions((Id)ExtraActionId.WildSurgeTeleport) .AddToDB(); @@ -315,7 +313,6 @@ private static WildSurgeEffect BuildWildSurgeTeleport() .Create(FeatureDefinitionActionAffinitys.ActionAffinityBarbarianRecklessAttack, $"ActionAffinity{Name}TeleportFree") .SetGuiPresentationNoContent(true) - .SetAllowedActionTypes() .SetAuthorizedActions((Id)ExtraActionId.WildSurgeTeleportFree) .AddToDB(); @@ -372,14 +369,12 @@ private static WildSurgeEffect BuildWildSurgeSummon() var actionAffinitySummon = FeatureDefinitionActionAffinityBuilder .Create($"ActionAffinity{Name}Summon") .SetGuiPresentationNoContent(true) - .SetAllowedActionTypes() .SetAuthorizedActions((Id)ExtraActionId.WildSurgeSummon) .AddToDB(); var actionAffinitySummonFree = FeatureDefinitionActionAffinityBuilder .Create($"ActionAffinity{Name}SummonFree") .SetGuiPresentationNoContent(true) - .SetAllowedActionTypes() .SetAuthorizedActions((Id)ExtraActionId.WildSurgeSummonFree) .AddToDB(); @@ -702,14 +697,12 @@ private static WildSurgeEffect BuildWildSurgeBolt() var actionAffinityBolt = FeatureDefinitionActionAffinityBuilder .Create($"ActionAffinity{Name}Bolt") .SetGuiPresentationNoContent(true) - .SetAllowedActionTypes() .SetAuthorizedActions((Id)ExtraActionId.WildSurgeBolt) .AddToDB(); var actionAffinityBoltFree = FeatureDefinitionActionAffinityBuilder .Create($"ActionAffinity{Name}BoltFree") .SetGuiPresentationNoContent(true) - .SetAllowedActionTypes() .SetAuthorizedActions((Id)ExtraActionId.WildSurgeBoltFree) .AddToDB(); From 63ac6452658c6bedbe814f56d443fe7f3832027f Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Wed, 4 Sep 2024 19:02:27 -0700 Subject: [PATCH 034/212] fix Arcane Deflection reaction translation --- .../GameLocationCharacterExtensions.cs | 2 + .../ReactionRequestSpendBundlePower.cs | 4 +- .../ReactionRequestSpendPowerCustom.cs | 4 +- .../CustomUI/ReactionRequestUsePowerCustom.cs | 4 +- .../Feats/MeleeCombatFeats.cs | 2 +- .../Models/CharacterUAContext.cs | 4 +- .../Spells/SpellBuildersLevel02.cs | 2 +- .../Spells/SpellBuildersLevel05.cs | 2 +- .../Subclasses/Builders/MetamagicBuilders.cs | 1 + .../Subclasses/CollegeOfAudacity.cs | 2 +- .../Subclasses/DomainTempest.cs | 2 +- .../Subclasses/MartialArcaneArcher.cs | 2 +- .../Subclasses/PathOfTheWildMagic.cs | 4 +- .../Subclasses/RangerFeyWanderer.cs | 2 +- .../Subclasses/SorcerousWildMagic.cs | 38 ++++++++++--------- .../de/SubClasses/WizardWarMagic-de.txt | 2 +- .../en/SubClasses/WizardWarMagic-en.txt | 2 +- .../es/SubClasses/WizardWarMagic-es.txt | 2 +- .../fr/SubClasses/WizardWarMagic-fr.txt | 2 +- .../it/SubClasses/WizardWarMagic-it.txt | 2 +- .../ja/SubClasses/WizardWarMagic-ja.txt | 2 +- .../ko/SubClasses/WizardWarMagic-ko.txt | 2 +- .../pt-BR/SubClasses/WizardWarMagic-pt-BR.txt | 2 +- .../ru/SubClasses/WizardWarMagic-ru.txt | 2 +- .../zh-CN/SubClasses/WizardWarMagic-zh-CN.txt | 2 +- 25 files changed, 52 insertions(+), 43 deletions(-) diff --git a/SolastaUnfinishedBusiness/Api/GameExtensions/GameLocationCharacterExtensions.cs b/SolastaUnfinishedBusiness/Api/GameExtensions/GameLocationCharacterExtensions.cs index c788cf9aa2..0268deda50 100644 --- a/SolastaUnfinishedBusiness/Api/GameExtensions/GameLocationCharacterExtensions.cs +++ b/SolastaUnfinishedBusiness/Api/GameExtensions/GameLocationCharacterExtensions.cs @@ -330,6 +330,7 @@ internal static IEnumerator MyReactToSpendPowerBundle( List targets, GameLocationCharacter waiter, string stringParameter, + string stringParameter2 = "", Action reactionValidated = null, Action reactionNotValidated = null, GameLocationBattleManager battleManager = null) @@ -349,6 +350,7 @@ internal static IEnumerator MyReactToSpendPowerBundle( var actionParams = new CharacterActionParams(character, Id.SpendPower) { StringParameter = stringParameter, + StringParameter2 = stringParameter2, ActionModifiers = actionModifiers, RulesetEffect = implementationService.InstantiateEffectPower(character.RulesetCharacter, usablePower, false), diff --git a/SolastaUnfinishedBusiness/CustomUI/ReactionRequestSpendBundlePower.cs b/SolastaUnfinishedBusiness/CustomUI/ReactionRequestSpendBundlePower.cs index bfc39e5a9a..77e9784ad4 100644 --- a/SolastaUnfinishedBusiness/CustomUI/ReactionRequestSpendBundlePower.cs +++ b/SolastaUnfinishedBusiness/CustomUI/ReactionRequestSpendBundlePower.cs @@ -179,7 +179,9 @@ public override string FormatDescription() { var format = $"Reaction/&ReactionSpendPowerBundle{ReactionParams.StringParameter}Description"; - return Gui.Format(format, _guiCharacter.Name); + return string.IsNullOrEmpty(reactionParams.StringParameter2) + ? Gui.Format(format, _guiCharacter.Name) + : reactionParams.StringParameter2; } public override string FormatReactTitle() diff --git a/SolastaUnfinishedBusiness/CustomUI/ReactionRequestSpendPowerCustom.cs b/SolastaUnfinishedBusiness/CustomUI/ReactionRequestSpendPowerCustom.cs index ef91132aea..adaade2ba0 100644 --- a/SolastaUnfinishedBusiness/CustomUI/ReactionRequestSpendPowerCustom.cs +++ b/SolastaUnfinishedBusiness/CustomUI/ReactionRequestSpendPowerCustom.cs @@ -5,8 +5,8 @@ public class ReactionRequestSpendPowerCustom(CharacterActionParams reactionParam { public override string FormatDescription() { - return string.IsNullOrEmpty(reactionParams.stringParameter2) + return string.IsNullOrEmpty(reactionParams.StringParameter2) ? base.FormatDescription() - : reactionParams.stringParameter2; + : reactionParams.StringParameter2; } } diff --git a/SolastaUnfinishedBusiness/CustomUI/ReactionRequestUsePowerCustom.cs b/SolastaUnfinishedBusiness/CustomUI/ReactionRequestUsePowerCustom.cs index 01360d6faa..0c88e0f752 100644 --- a/SolastaUnfinishedBusiness/CustomUI/ReactionRequestUsePowerCustom.cs +++ b/SolastaUnfinishedBusiness/CustomUI/ReactionRequestUsePowerCustom.cs @@ -31,8 +31,8 @@ public ReactionRequestUsePowerCustom( public override string FormatDescription() { - return string.IsNullOrEmpty(reactionParams.stringParameter2) + return string.IsNullOrEmpty(reactionParams.StringParameter2) ? base.FormatDescription() - : reactionParams.stringParameter2; + : reactionParams.StringParameter2; } } diff --git a/SolastaUnfinishedBusiness/Feats/MeleeCombatFeats.cs b/SolastaUnfinishedBusiness/Feats/MeleeCombatFeats.cs index f575e4ca6e..a5f2d3b10e 100644 --- a/SolastaUnfinishedBusiness/Feats/MeleeCombatFeats.cs +++ b/SolastaUnfinishedBusiness/Feats/MeleeCombatFeats.cs @@ -628,7 +628,7 @@ public IEnumerator OnPhysicalAttackBeforeHitConfirmedOnEnemy( [defender], attacker, powerPool.Name, - ReactionValidated, + reactionValidated: ReactionValidated, battleManager: battleManager); yield break; diff --git a/SolastaUnfinishedBusiness/Models/CharacterUAContext.cs b/SolastaUnfinishedBusiness/Models/CharacterUAContext.cs index 1dacfe3583..9319a02bcd 100644 --- a/SolastaUnfinishedBusiness/Models/CharacterUAContext.cs +++ b/SolastaUnfinishedBusiness/Models/CharacterUAContext.cs @@ -359,7 +359,7 @@ public IEnumerator OnPhysicalAttackBeforeHitConfirmedOnEnemy( [defender], attacker, powerBarbarianBrutalStrike.Name, - ReactionValidated, + reactionValidated: ReactionValidated, battleManager: battleManager); yield break; @@ -1519,7 +1519,7 @@ public IEnumerator OnPhysicalAttackBeforeHitConfirmedOnEnemy( [defender], attacker, powerRogueCunningStrike.Name, - ReactionValidated, + reactionValidated: ReactionValidated, battleManager: battleManager); yield break; diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel02.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel02.cs index 9149c1cd82..3e45ff607f 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel02.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel02.cs @@ -685,7 +685,7 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, [actingCharacter], actingCharacter, "BorrowedKnowledge", - ReactionValidated); + reactionValidated: ReactionValidated); yield break; diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel05.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel05.cs index 08a02ec715..0c853e0531 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel05.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel05.cs @@ -626,7 +626,7 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, [target], actingCharacter, "EmpoweredKnowledge", - ReactionValidated); + reactionValidated: ReactionValidated); yield break; diff --git a/SolastaUnfinishedBusiness/Subclasses/Builders/MetamagicBuilders.cs b/SolastaUnfinishedBusiness/Subclasses/Builders/MetamagicBuilders.cs index 9ed875f9d1..8ac5f7285b 100644 --- a/SolastaUnfinishedBusiness/Subclasses/Builders/MetamagicBuilders.cs +++ b/SolastaUnfinishedBusiness/Subclasses/Builders/MetamagicBuilders.cs @@ -408,6 +408,7 @@ public IEnumerator OnMagicEffectBeforeHitConfirmedOnEnemy( [defender], attacker, MetamagicTransmuted, + string.Empty, ReactionValidated, ReactionNotValidated, battleManager); diff --git a/SolastaUnfinishedBusiness/Subclasses/CollegeOfAudacity.cs b/SolastaUnfinishedBusiness/Subclasses/CollegeOfAudacity.cs index 8a07c13f91..91e47b8779 100644 --- a/SolastaUnfinishedBusiness/Subclasses/CollegeOfAudacity.cs +++ b/SolastaUnfinishedBusiness/Subclasses/CollegeOfAudacity.cs @@ -361,7 +361,7 @@ public IEnumerator OnPhysicalAttackBeforeHitConfirmedOnEnemy( [defender], attacker, powerAudaciousWhirl.Name, - ReactionValidated, + reactionValidated: ReactionValidated, battleManager: battleManager); yield break; diff --git a/SolastaUnfinishedBusiness/Subclasses/DomainTempest.cs b/SolastaUnfinishedBusiness/Subclasses/DomainTempest.cs index 6fb3616824..9128b07f77 100644 --- a/SolastaUnfinishedBusiness/Subclasses/DomainTempest.cs +++ b/SolastaUnfinishedBusiness/Subclasses/DomainTempest.cs @@ -374,7 +374,7 @@ action.AttackRollOutcome is not (RollOutcome.Success or RollOutcome.CriticalSucc [attacker], attacker, "WrathOfTheStorm", - ReactionValidated); + reactionValidated: ReactionValidated); yield break; diff --git a/SolastaUnfinishedBusiness/Subclasses/MartialArcaneArcher.cs b/SolastaUnfinishedBusiness/Subclasses/MartialArcaneArcher.cs index 3e257b350e..495976f880 100644 --- a/SolastaUnfinishedBusiness/Subclasses/MartialArcaneArcher.cs +++ b/SolastaUnfinishedBusiness/Subclasses/MartialArcaneArcher.cs @@ -624,7 +624,7 @@ public IEnumerator OnPhysicalAttackBeforeHitConfirmedOnEnemy( [defender], attacker, "ArcaneShot", - ReactionValidated, + reactionValidated: ReactionValidated, battleManager: battleManager); yield break; diff --git a/SolastaUnfinishedBusiness/Subclasses/PathOfTheWildMagic.cs b/SolastaUnfinishedBusiness/Subclasses/PathOfTheWildMagic.cs index b32c6e54a6..34db3fd505 100644 --- a/SolastaUnfinishedBusiness/Subclasses/PathOfTheWildMagic.cs +++ b/SolastaUnfinishedBusiness/Subclasses/PathOfTheWildMagic.cs @@ -998,8 +998,8 @@ private IEnumerator HandleControlledSurge(GameLocationCharacter character, List< [character], character, "ControlledSurge", - ReactionValidated, - ReactionNotValidated); + reactionValidated: ReactionValidated, + reactionNotValidated: ReactionNotValidated); rulesetAttacker.usablePowers = usablePowersOrig; diff --git a/SolastaUnfinishedBusiness/Subclasses/RangerFeyWanderer.cs b/SolastaUnfinishedBusiness/Subclasses/RangerFeyWanderer.cs index d04d006d3b..f1ad1061eb 100644 --- a/SolastaUnfinishedBusiness/Subclasses/RangerFeyWanderer.cs +++ b/SolastaUnfinishedBusiness/Subclasses/RangerFeyWanderer.cs @@ -311,7 +311,7 @@ public IEnumerator OnTryAlterOutcomeSavingThrow( [attacker], helper, powerBeguilingTwist.Name, - ReactionValidated, + reactionValidated: ReactionValidated, battleManager: battleManager); yield break; diff --git a/SolastaUnfinishedBusiness/Subclasses/SorcerousWildMagic.cs b/SolastaUnfinishedBusiness/Subclasses/SorcerousWildMagic.cs index 0d839c934a..b74362db71 100644 --- a/SolastaUnfinishedBusiness/Subclasses/SorcerousWildMagic.cs +++ b/SolastaUnfinishedBusiness/Subclasses/SorcerousWildMagic.cs @@ -456,8 +456,8 @@ private static IEnumerator HandleControlledChaos(GameLocationCharacter attacker, [attacker], attacker, "ControlledChaos", - ReactionValidated, - ReactionNotValidated); + reactionValidated: ReactionValidated, + reactionNotValidated: ReactionNotValidated); rulesetAttacker.UsablePowers.Remove(usablePowerFirst); rulesetAttacker.UsablePowers.Remove(usablePowerSecond); @@ -637,6 +637,10 @@ public IEnumerator OnTryAlterOutcomeAttack( void ReactionValidated() { + // this is an exception to rule and only happens + // as powers added at 1st level from subclasses won't have a class assigned + usablePower.Consume(); + List advantageTrends = [new(1, FeatureSourceType.CharacterFeature, PowerTidesOfChaos.Name, PowerTidesOfChaos)]; @@ -835,17 +839,17 @@ public IEnumerator OnTryAlterOutcomeAttack( yield break; } - string stringParameter; + string StringParameter; if (helper.Side == attacker.Side && action.AttackRollOutcome is RollOutcome.Failure) { - stringParameter = "BendLuckAttack"; + StringParameter = "BendLuckAttack"; } else if (helper.Side != attacker.Side && action.AttackRollOutcome is RollOutcome.Success) { - stringParameter = "BendLuckEnemyAttack"; + StringParameter = "BendLuckEnemyAttack"; } else { @@ -856,8 +860,8 @@ public IEnumerator OnTryAlterOutcomeAttack( yield return helper.MyReactToSpendPower( usablePower, attacker, - stringParameter, - $"SpendPower{stringParameter}Description".Formatted(Category.Reaction, defender.Name), + StringParameter, + $"SpendPower{StringParameter}Description".Formatted(Category.Reaction, defender.Name), ReactionValidated, battleManager); @@ -945,19 +949,19 @@ public IEnumerator OnTryAlterAttributeCheck( yield break; } - string stringParameter; + string StringParameter; if (helper.Side == defender.Side && abilityCheckData.AbilityCheckRoll > 0 && abilityCheckData.AbilityCheckRollOutcome is RollOutcome.Failure or RollOutcome.CriticalFailure) { - stringParameter = "BendLuckCheck"; + StringParameter = "BendLuckCheck"; } else if (helper.Side != defender.Side && abilityCheckData.AbilityCheckRoll > 0 && abilityCheckData.AbilityCheckRollOutcome is RollOutcome.Success or RollOutcome.CriticalSuccess) { - stringParameter = "BendLuckEnemyCheck"; + StringParameter = "BendLuckEnemyCheck"; } else { @@ -968,8 +972,8 @@ public IEnumerator OnTryAlterAttributeCheck( yield return helper.MyReactToSpendPower( usablePower, helper, - stringParameter, - $"SpendPower{stringParameter}Description".Formatted(Category.Reaction, defender.Name), + StringParameter, + $"SpendPower{StringParameter}Description".Formatted(Category.Reaction, defender.Name), ReactionValidated, battleManager); @@ -1062,17 +1066,17 @@ public IEnumerator OnTryAlterOutcomeSavingThrow( yield break; } - string stringParameter; + string StringParameter; if (helper.Side == defender.Side && savingThrowData.SaveOutcome == RollOutcome.Failure) { - stringParameter = "BendLuckSaving"; + StringParameter = "BendLuckSaving"; } else if (helper.Side != defender.Side && savingThrowData.SaveOutcome == RollOutcome.Success) { - stringParameter = "BendLuckEnemySaving"; + StringParameter = "BendLuckEnemySaving"; } else { @@ -1085,8 +1089,8 @@ public IEnumerator OnTryAlterOutcomeSavingThrow( yield return helper.MyReactToSpendPower( usablePower, helper, - stringParameter, - $"SpendPower{stringParameter}Description".Formatted(Category.Reaction, + StringParameter, + $"SpendPower{StringParameter}Description".Formatted(Category.Reaction, defender.Name, attacker?.Name ?? envTitle, savingThrowData.Title), ReactionValidated, battleManager); diff --git a/SolastaUnfinishedBusiness/Translations/de/SubClasses/WizardWarMagic-de.txt b/SolastaUnfinishedBusiness/Translations/de/SubClasses/WizardWarMagic-de.txt index 4444aecade..dcf32c8820 100644 --- a/SolastaUnfinishedBusiness/Translations/de/SubClasses/WizardWarMagic-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/SubClasses/WizardWarMagic-de.txt @@ -16,7 +16,7 @@ Reaction/&CustomReactionArcaneDeflectionAttackDescription=Sie werden gleich von Reaction/&CustomReactionArcaneDeflectionAttackReactDescription=Einen Fehler erzwingen Reaction/&CustomReactionArcaneDeflectionAttackReactTitle=Arkane Ablenkung Reaction/&CustomReactionArcaneDeflectionAttackTitle=Arkane Ablenkung -Reaction/&CustomReactionArcaneDeflectionSavingDescription=Dir ist ein Rettungswurf gegen {1} von {0}> misslungen. Du kannst deine Reaktion nutzen, um deinen Intelligenzmodifikator zum Wurf hinzuzufügen und ihn erfolgreich zu machen. +Reaction/&CustomReactionArcaneDeflectionSavingDescription=Dir ist ein Rettungswurf gegen {1} von {0} misslungen. Du kannst deine Reaktion nutzen, um deinen Intelligenzmodifikator zum Wurf hinzuzufügen und ihn erfolgreich zu machen. Reaction/&CustomReactionArcaneDeflectionSavingReactDescription=Gelingen Reaction/&CustomReactionArcaneDeflectionSavingReactTitle=Arkane Ablenkung Reaction/&CustomReactionArcaneDeflectionSavingTitle=Arkane Ablenkung diff --git a/SolastaUnfinishedBusiness/Translations/en/SubClasses/WizardWarMagic-en.txt b/SolastaUnfinishedBusiness/Translations/en/SubClasses/WizardWarMagic-en.txt index a1ca700e7a..24896c1dab 100644 --- a/SolastaUnfinishedBusiness/Translations/en/SubClasses/WizardWarMagic-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/SubClasses/WizardWarMagic-en.txt @@ -16,7 +16,7 @@ Reaction/&CustomReactionArcaneDeflectionAttackDescription=You are about to be hi Reaction/&CustomReactionArcaneDeflectionAttackReactDescription=Force a failure Reaction/&CustomReactionArcaneDeflectionAttackReactTitle=Arcane Deflection Reaction/&CustomReactionArcaneDeflectionAttackTitle=Arcane Deflection -Reaction/&CustomReactionArcaneDeflectionSavingDescription=You failed a saving roll against {0}>'s {1}. You can react to add your Intelligence modifier to the roll and make it succeed. +Reaction/&CustomReactionArcaneDeflectionSavingDescription=You failed a saving roll against {0}'s {1}. You can react to add your Intelligence modifier to the roll and make it succeed. Reaction/&CustomReactionArcaneDeflectionSavingReactDescription=Succeed Reaction/&CustomReactionArcaneDeflectionSavingReactTitle=Arcane Deflection Reaction/&CustomReactionArcaneDeflectionSavingTitle=Arcane Deflection diff --git a/SolastaUnfinishedBusiness/Translations/es/SubClasses/WizardWarMagic-es.txt b/SolastaUnfinishedBusiness/Translations/es/SubClasses/WizardWarMagic-es.txt index b638248a72..676d8bb416 100644 --- a/SolastaUnfinishedBusiness/Translations/es/SubClasses/WizardWarMagic-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/SubClasses/WizardWarMagic-es.txt @@ -16,7 +16,7 @@ Reaction/&CustomReactionArcaneDeflectionAttackDescription=Estás a punto de reci Reaction/&CustomReactionArcaneDeflectionAttackReactDescription=Forzar un fracaso Reaction/&CustomReactionArcaneDeflectionAttackReactTitle=Desviación arcana Reaction/&CustomReactionArcaneDeflectionAttackTitle=Desviación arcana -Reaction/&CustomReactionArcaneDeflectionSavingDescription=Fallaste una tirada de salvación contra el {1} de {0}>. Puedes usar tu reacción para sumar tu modificador de Inteligencia a la tirada y hacer que tenga éxito. +Reaction/&CustomReactionArcaneDeflectionSavingDescription=Fallaste una tirada de salvación contra el {1} de {0}. Puedes usar tu reacción para sumar tu modificador de Inteligencia a la tirada y hacer que tenga éxito. Reaction/&CustomReactionArcaneDeflectionSavingReactDescription=Tener éxito Reaction/&CustomReactionArcaneDeflectionSavingReactTitle=Desviación arcana Reaction/&CustomReactionArcaneDeflectionSavingTitle=Desviación arcana diff --git a/SolastaUnfinishedBusiness/Translations/fr/SubClasses/WizardWarMagic-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/SubClasses/WizardWarMagic-fr.txt index 1f62886e1a..dad9c5988d 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/SubClasses/WizardWarMagic-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/SubClasses/WizardWarMagic-fr.txt @@ -16,7 +16,7 @@ Reaction/&CustomReactionArcaneDeflectionAttackDescription=Vous êtes sur le poin Reaction/&CustomReactionArcaneDeflectionAttackReactDescription=Forcer un échec Reaction/&CustomReactionArcaneDeflectionAttackReactTitle=Déviation des Arcanes Reaction/&CustomReactionArcaneDeflectionAttackTitle=Déviation des arcanes -Reaction/&CustomReactionArcaneDeflectionSavingDescription=Vous avez raté un jet de sauvegarde contre le {0}>{1}. Vous pouvez utiliser votre réaction pour ajouter votre modificateur d'Intelligence au jet et le faire réussir. +Reaction/&CustomReactionArcaneDeflectionSavingDescription=Vous avez raté un jet de sauvegarde contre le {0}{1}. Vous pouvez utiliser votre réaction pour ajouter votre modificateur d'Intelligence au jet et le faire réussir. Reaction/&CustomReactionArcaneDeflectionSavingReactDescription=Réussir Reaction/&CustomReactionArcaneDeflectionSavingReactTitle=Déviation des arcanes Reaction/&CustomReactionArcaneDeflectionSavingTitle=Déviation des arcanes diff --git a/SolastaUnfinishedBusiness/Translations/it/SubClasses/WizardWarMagic-it.txt b/SolastaUnfinishedBusiness/Translations/it/SubClasses/WizardWarMagic-it.txt index 47f9a41356..6ce7f0ee23 100644 --- a/SolastaUnfinishedBusiness/Translations/it/SubClasses/WizardWarMagic-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/SubClasses/WizardWarMagic-it.txt @@ -16,7 +16,7 @@ Reaction/&CustomReactionArcaneDeflectionAttackDescription=Stai per essere colpit Reaction/&CustomReactionArcaneDeflectionAttackReactDescription=Forzare un fallimento Reaction/&CustomReactionArcaneDeflectionAttackReactTitle=Deviazione Arcana Reaction/&CustomReactionArcaneDeflectionAttackTitle=Deviazione Arcana -Reaction/&CustomReactionArcaneDeflectionSavingDescription=Hai fallito un tiro salvezza contro {0}> di {1}. Puoi usare la tua reazione per aggiungere il tuo modificatore di Intelligenza al tiro e farlo riuscire. +Reaction/&CustomReactionArcaneDeflectionSavingDescription=Hai fallito un tiro salvezza contro {0} di {1}. Puoi usare la tua reazione per aggiungere il tuo modificatore di Intelligenza al tiro e farlo riuscire. Reaction/&CustomReactionArcaneDeflectionSavingReactDescription=Avere successo Reaction/&CustomReactionArcaneDeflectionSavingReactTitle=Deviazione Arcana Reaction/&CustomReactionArcaneDeflectionSavingTitle=Deviazione Arcana diff --git a/SolastaUnfinishedBusiness/Translations/ja/SubClasses/WizardWarMagic-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/SubClasses/WizardWarMagic-ja.txt index c262afbbc4..d19f3dd723 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/SubClasses/WizardWarMagic-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/SubClasses/WizardWarMagic-ja.txt @@ -16,7 +16,7 @@ Reaction/&CustomReactionArcaneDeflectionAttackDescription=攻撃を受けよう Reaction/&CustomReactionArcaneDeflectionAttackReactDescription=強制的に失敗させる Reaction/&CustomReactionArcaneDeflectionAttackReactTitle=難解な偏向 Reaction/&CustomReactionArcaneDeflectionAttackTitle=難解な偏向 -Reaction/&CustomReactionArcaneDeflectionSavingDescription={0}>{1} に対するセービング ロールに失敗しました。反応を使用して、ロールに Intelligence 修正値を追加し、成功させることができます。 +Reaction/&CustomReactionArcaneDeflectionSavingDescription={0}{1} に対するセービング ロールに失敗しました。反応を使用して、ロールに Intelligence 修正値を追加し、成功させることができます。 Reaction/&CustomReactionArcaneDeflectionSavingReactDescription=成功する Reaction/&CustomReactionArcaneDeflectionSavingReactTitle=難解な偏向 Reaction/&CustomReactionArcaneDeflectionSavingTitle=難解な偏向 diff --git a/SolastaUnfinishedBusiness/Translations/ko/SubClasses/WizardWarMagic-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/SubClasses/WizardWarMagic-ko.txt index daa2a4cdb6..b164bb7fd0 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/SubClasses/WizardWarMagic-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/SubClasses/WizardWarMagic-ko.txt @@ -16,7 +16,7 @@ Reaction/&CustomReactionArcaneDeflectionAttackDescription=당신은 곧 공격 Reaction/&CustomReactionArcaneDeflectionAttackReactDescription=실패를 강요하다 Reaction/&CustomReactionArcaneDeflectionAttackReactTitle=비전 편향 Reaction/&CustomReactionArcaneDeflectionAttackTitle=비전 편향 -Reaction/&CustomReactionArcaneDeflectionSavingDescription={0}>{1}에 대한 세이빙 롤에 실패했습니다. 반응을 사용하여 롤에 지능 수정치를 추가하여 성공시킬 수 있습니다. +Reaction/&CustomReactionArcaneDeflectionSavingDescription={0}{1}에 대한 세이빙 롤에 실패했습니다. 반응을 사용하여 롤에 지능 수정치를 추가하여 성공시킬 수 있습니다. Reaction/&CustomReactionArcaneDeflectionSavingReactDescription=성공하다 Reaction/&CustomReactionArcaneDeflectionSavingReactTitle=비전 편향 Reaction/&CustomReactionArcaneDeflectionSavingTitle=비전 편향 diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/SubClasses/WizardWarMagic-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/SubClasses/WizardWarMagic-pt-BR.txt index 33988f2796..3f62b3e3db 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/SubClasses/WizardWarMagic-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/SubClasses/WizardWarMagic-pt-BR.txt @@ -16,7 +16,7 @@ Reaction/&CustomReactionArcaneDeflectionAttackDescription=Você está prestes a Reaction/&CustomReactionArcaneDeflectionAttackReactDescription=Forçar uma falha Reaction/&CustomReactionArcaneDeflectionAttackReactTitle=Deflexão Arcana Reaction/&CustomReactionArcaneDeflectionAttackTitle=Deflexão Arcana -Reaction/&CustomReactionArcaneDeflectionSavingDescription=Você falhou em um teste de resistência contra {0}> {1}. Você pode usar sua reação para adicionar seu modificador de Inteligência ao teste e fazê-lo ter sucesso. +Reaction/&CustomReactionArcaneDeflectionSavingDescription=Você falhou em um teste de resistência contra {0} {1}. Você pode usar sua reação para adicionar seu modificador de Inteligência ao teste e fazê-lo ter sucesso. Reaction/&CustomReactionArcaneDeflectionSavingReactDescription=Ter sucesso Reaction/&CustomReactionArcaneDeflectionSavingReactTitle=Deflexão Arcana Reaction/&CustomReactionArcaneDeflectionSavingTitle=Deflexão Arcana diff --git a/SolastaUnfinishedBusiness/Translations/ru/SubClasses/WizardWarMagic-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/SubClasses/WizardWarMagic-ru.txt index f07cb5e94d..d2b06fdaa3 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/SubClasses/WizardWarMagic-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/SubClasses/WizardWarMagic-ru.txt @@ -16,7 +16,7 @@ Reaction/&CustomReactionArcaneDeflectionAttackDescription=Атака вот-во Reaction/&CustomReactionArcaneDeflectionAttackReactDescription=Вызвать промах Reaction/&CustomReactionArcaneDeflectionAttackReactTitle=Магическое отражение Reaction/&CustomReactionArcaneDeflectionAttackTitle=Магическое отражение -Reaction/&CustomReactionArcaneDeflectionSavingDescription=Вы провалили спасбросок против {1}> {0}. Вы можете реакцией добавить свой модификатор Интеллекта к броску и превратить его в успешный. +Reaction/&CustomReactionArcaneDeflectionSavingDescription=Вы провалили спасбросок против {1} {0}. Вы можете реакцией добавить свой модификатор Интеллекта к броску и превратить его в успешный. Reaction/&CustomReactionArcaneDeflectionSavingReactDescription=Преуспеть Reaction/&CustomReactionArcaneDeflectionSavingReactTitle=Магическое отражение Reaction/&CustomReactionArcaneDeflectionSavingTitle=Магическое отражение diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/SubClasses/WizardWarMagic-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/SubClasses/WizardWarMagic-zh-CN.txt index 77f210ea8e..816c45734c 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/SubClasses/WizardWarMagic-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/SubClasses/WizardWarMagic-zh-CN.txt @@ -16,7 +16,7 @@ Reaction/&CustomReactionArcaneDeflectionAttackDescription=你即将受到攻击 Reaction/&CustomReactionArcaneDeflectionAttackReactDescription=强制失败 Reaction/&CustomReactionArcaneDeflectionAttackReactTitle=奥术偏斜 Reaction/&CustomReactionArcaneDeflectionAttackTitle=奥术偏斜 -Reaction/&CustomReactionArcaneDeflectionSavingDescription=您未能成功对抗{0}>{1>。您可以使用您的反应将您的智力调整值添加到掷骰中并使其成功。 +Reaction/&CustomReactionArcaneDeflectionSavingDescription=您未能成功对抗{0}{1}。您可以使用您的反应将您的智力调整值添加到掷骰中并使其成功。 Reaction/&CustomReactionArcaneDeflectionSavingReactDescription=成功 Reaction/&CustomReactionArcaneDeflectionSavingReactTitle=奥术偏斜 Reaction/&CustomReactionArcaneDeflectionSavingTitle=奥术偏斜 From af577a48fc75e17ba98d2795c239b7be07d849ed Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Wed, 4 Sep 2024 19:10:30 -0700 Subject: [PATCH 035/212] update translations --- .../Translations/de/Spells/Spells01-de.txt | 2 +- .../Translations/en/Spells/Spells01-en.txt | 2 +- .../Translations/es/Spells/Spells01-es.txt | 2 +- .../Translations/fr/Spells/Spells01-fr.txt | 2 +- .../Translations/it/Spells/Spells01-it.txt | 2 +- SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt | 2 +- .../Translations/ja/Spells/Spells01-ja.txt | 2 +- .../Translations/ko/Spells/Spells01-ko.txt | 2 +- .../Translations/pt-BR/Spells/Spells01-pt-BR.txt | 2 +- .../Translations/ru/Spells/Spells01-ru.txt | 2 +- .../Translations/zh-CN/Feats/OtherFeats-zh-CN.txt | 4 ++-- .../Translations/zh-CN/Feats/Races-zh-CN.txt | 2 +- .../Translations/zh-CN/Inventor-zh-CN.txt | 4 ++-- .../Translations/zh-CN/Races/Imp-zh-CN.txt | 2 +- .../Translations/zh-CN/Settings-zh-CN.txt | 2 +- .../Translations/zh-CN/Spells/Spells01-zh-CN.txt | 2 +- .../zh-CN/SubClasses/CircleOfTheCosmos-zh-CN.txt | 4 ++-- .../zh-CN/SubClasses/MartialRoyalKnight-zh-CN.txt | 4 ++-- .../zh-CN/SubClasses/SorcerousWildMagic-zh-CN.txt | 8 ++++---- 19 files changed, 26 insertions(+), 26 deletions(-) diff --git a/SolastaUnfinishedBusiness/Translations/de/Spells/Spells01-de.txt b/SolastaUnfinishedBusiness/Translations/de/Spells/Spells01-de.txt index 3f2b29d53e..0b715f2529 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Spells/Spells01-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Spells/Spells01-de.txt @@ -71,7 +71,7 @@ Reaction/&ReactionSpendPowerBundleChaosBoltDescription=Wählen Sie eine Schadens Reaction/&ReactionSpendPowerBundleChaosBoltReactDescription=Wählen Sie eine Schadensart. Reaction/&ReactionSpendPowerBundleChaosBoltReactTitle=Chaosblitz Reaction/&ReactionSpendPowerBundleChaosBoltTitle=Chaosblitz -Reaction/&ReactionSpendPowerBundleCommandSpellDescription=Wählen Sie Ihren Befehl. +Reaction/&ReactionSpendPowerBundleCommandSpellDescription=Befehl {0} zum: Reaction/&ReactionSpendPowerBundleCommandSpellReactDescription=Wählen Sie Ihren Befehl. Reaction/&ReactionSpendPowerBundleCommandSpellReactTitle=Befehl Reaction/&ReactionSpendPowerBundleCommandSpellTitle=Befehl diff --git a/SolastaUnfinishedBusiness/Translations/en/Spells/Spells01-en.txt b/SolastaUnfinishedBusiness/Translations/en/Spells/Spells01-en.txt index 3d8e7b4375..56ef8d3e75 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Spells/Spells01-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Spells/Spells01-en.txt @@ -71,7 +71,7 @@ Reaction/&ReactionSpendPowerBundleChaosBoltDescription=Choose a damage type. Reaction/&ReactionSpendPowerBundleChaosBoltReactDescription=Choose a damage type. Reaction/&ReactionSpendPowerBundleChaosBoltReactTitle=Chaos Bolt Reaction/&ReactionSpendPowerBundleChaosBoltTitle=Chaos Bolt -Reaction/&ReactionSpendPowerBundleCommandSpellDescription=Choose your command. +Reaction/&ReactionSpendPowerBundleCommandSpellDescription=Command {0} to: Reaction/&ReactionSpendPowerBundleCommandSpellReactDescription=Choose your command. Reaction/&ReactionSpendPowerBundleCommandSpellReactTitle=Command Reaction/&ReactionSpendPowerBundleCommandSpellTitle=Command diff --git a/SolastaUnfinishedBusiness/Translations/es/Spells/Spells01-es.txt b/SolastaUnfinishedBusiness/Translations/es/Spells/Spells01-es.txt index cd49d0c3f0..78e6ea8a1d 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Spells/Spells01-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Spells/Spells01-es.txt @@ -71,7 +71,7 @@ Reaction/&ReactionSpendPowerBundleChaosBoltDescription=Elija un tipo de daño. Reaction/&ReactionSpendPowerBundleChaosBoltReactDescription=Elija un tipo de daño. Reaction/&ReactionSpendPowerBundleChaosBoltReactTitle=Rayo del caos Reaction/&ReactionSpendPowerBundleChaosBoltTitle=Descarga del caos -Reaction/&ReactionSpendPowerBundleCommandSpellDescription=Elige tu comando. +Reaction/&ReactionSpendPowerBundleCommandSpellDescription=Comando {0} para: Reaction/&ReactionSpendPowerBundleCommandSpellReactDescription=Elige tu comando. Reaction/&ReactionSpendPowerBundleCommandSpellReactTitle=Dominio Reaction/&ReactionSpendPowerBundleCommandSpellTitle=Dominio diff --git a/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells01-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells01-fr.txt index b5929151dd..9f9b48e646 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells01-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells01-fr.txt @@ -71,7 +71,7 @@ Reaction/&ReactionSpendPowerBundleChaosBoltDescription=Choisissez un type de dé Reaction/&ReactionSpendPowerBundleChaosBoltReactDescription=Choisissez un type de dégâts. Reaction/&ReactionSpendPowerBundleChaosBoltReactTitle=Éclair du chaos Reaction/&ReactionSpendPowerBundleChaosBoltTitle=Éclair du chaos -Reaction/&ReactionSpendPowerBundleCommandSpellDescription=Choisissez votre commande. +Reaction/&ReactionSpendPowerBundleCommandSpellDescription=Commande {0} pour : Reaction/&ReactionSpendPowerBundleCommandSpellReactDescription=Choisissez votre commande. Reaction/&ReactionSpendPowerBundleCommandSpellReactTitle=Commande Reaction/&ReactionSpendPowerBundleCommandSpellTitle=Commande diff --git a/SolastaUnfinishedBusiness/Translations/it/Spells/Spells01-it.txt b/SolastaUnfinishedBusiness/Translations/it/Spells/Spells01-it.txt index 91bf5d9c91..4f1400f698 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Spells/Spells01-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Spells/Spells01-it.txt @@ -71,7 +71,7 @@ Reaction/&ReactionSpendPowerBundleChaosBoltDescription=Scegli un tipo di danno. Reaction/&ReactionSpendPowerBundleChaosBoltReactDescription=Scegli un tipo di danno. Reaction/&ReactionSpendPowerBundleChaosBoltReactTitle=Fulmine del Caos Reaction/&ReactionSpendPowerBundleChaosBoltTitle=Fulmine del Caos -Reaction/&ReactionSpendPowerBundleCommandSpellDescription=Scegli il tuo comando. +Reaction/&ReactionSpendPowerBundleCommandSpellDescription=Comando {0} per: Reaction/&ReactionSpendPowerBundleCommandSpellReactDescription=Scegli il tuo comando. Reaction/&ReactionSpendPowerBundleCommandSpellReactTitle=Comando Reaction/&ReactionSpendPowerBundleCommandSpellTitle=Comando diff --git a/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt index 6cbeff076c..4987cec92c 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt @@ -340,4 +340,4 @@ ModUi/&UseOfficialObscurementRules=公式の照明、遮蔽、視 ModUi/&UseOfficialObscurementRulesHelp=[それを知覚する攻撃者は ADV を獲得し、それを知覚しない攻撃者は DIS を獲得します。それを知覚できる防御者は DIS を獲得します\n 非常に隠された領域は盲目状態を引き起こし、クリーチャーに対する攻撃ロールには ADV が付与され、クリーチャーの攻撃ロールには DIS が付与されます\n 攻撃者に視力がない場合、個人をターゲットとするすべての遠距離呪文は発動できません。ただし、視力が必要であると明確に述べられていない呪文は除きます] ModUi/&UseOfficialSmallRacesDisWithHeavyWeapons=重火器を使用するときは小種族の公式ルールを使用してください[攻撃には不利] ModUi/&Visuals=ビジュアル: [再起動が必要] -ModUi/&WildSurgeDieRollThreshold=ソーサラー ワイルド マジック の確率ダイスしきい値を設定します:{0}>[ロールがしきい値以下であればワイルド サージが発動します] +ModUi/&WildSurgeDieRollThreshold=ソーサラー ワイルド マジック の確率ダイスしきい値を設定します:{0}[ロールがしきい値以下であればワイルド サージが発動します] diff --git a/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells01-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells01-ja.txt index 724e99f8ba..7ab4da1b30 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells01-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells01-ja.txt @@ -71,7 +71,7 @@ Reaction/&ReactionSpendPowerBundleChaosBoltDescription=ダメージタイプを Reaction/&ReactionSpendPowerBundleChaosBoltReactDescription=ダメージタイプを選択してください。 Reaction/&ReactionSpendPowerBundleChaosBoltReactTitle=カオスボルト Reaction/&ReactionSpendPowerBundleChaosBoltTitle=カオスボルト -Reaction/&ReactionSpendPowerBundleCommandSpellDescription=コマンドを選択してください。 +Reaction/&ReactionSpendPowerBundleCommandSpellDescription={0} コマンド: Reaction/&ReactionSpendPowerBundleCommandSpellReactDescription=コマンドを選択してください。 Reaction/&ReactionSpendPowerBundleCommandSpellReactTitle=指示 Reaction/&ReactionSpendPowerBundleCommandSpellTitle=指示 diff --git a/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells01-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells01-ko.txt index 86b97cf2ca..aeb26c3f80 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells01-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells01-ko.txt @@ -71,7 +71,7 @@ Reaction/&ReactionSpendPowerBundleChaosBoltDescription=손상 유형을 선택 Reaction/&ReactionSpendPowerBundleChaosBoltReactDescription=손상 유형을 선택하세요. Reaction/&ReactionSpendPowerBundleChaosBoltReactTitle=카오스볼트 Reaction/&ReactionSpendPowerBundleChaosBoltTitle=카오스볼트 -Reaction/&ReactionSpendPowerBundleCommandSpellDescription=명령을 선택하세요. +Reaction/&ReactionSpendPowerBundleCommandSpellDescription={0} 명령: Reaction/&ReactionSpendPowerBundleCommandSpellReactDescription=명령을 선택하세요. Reaction/&ReactionSpendPowerBundleCommandSpellReactTitle=명령 Reaction/&ReactionSpendPowerBundleCommandSpellTitle=명령 diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells01-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells01-pt-BR.txt index 1e9b5f760b..5d1d9cb0e4 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells01-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells01-pt-BR.txt @@ -71,7 +71,7 @@ Reaction/&ReactionSpendPowerBundleChaosBoltDescription=Escolha um tipo de dano. Reaction/&ReactionSpendPowerBundleChaosBoltReactDescription=Escolha um tipo de dano. Reaction/&ReactionSpendPowerBundleChaosBoltReactTitle=Raio do Caos Reaction/&ReactionSpendPowerBundleChaosBoltTitle=Raio do Caos -Reaction/&ReactionSpendPowerBundleCommandSpellDescription=Escolha seu comando. +Reaction/&ReactionSpendPowerBundleCommandSpellDescription=Comando {0} para: Reaction/&ReactionSpendPowerBundleCommandSpellReactDescription=Escolha seu comando. Reaction/&ReactionSpendPowerBundleCommandSpellReactTitle=Comando Reaction/&ReactionSpendPowerBundleCommandSpellTitle=Comando diff --git a/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells01-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells01-ru.txt index 91ece93c20..3f13aaf540 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells01-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells01-ru.txt @@ -71,7 +71,7 @@ Reaction/&ReactionSpendPowerBundleChaosBoltDescription=Выберите тип Reaction/&ReactionSpendPowerBundleChaosBoltReactDescription=Выберите тип урона. Reaction/&ReactionSpendPowerBundleChaosBoltReactTitle=Снаряд хаоса Reaction/&ReactionSpendPowerBundleChaosBoltTitle=Снаряд хаоса -Reaction/&ReactionSpendPowerBundleCommandSpellDescription=Выберите команду. +Reaction/&ReactionSpendPowerBundleCommandSpellDescription=Команда {0} для: Reaction/&ReactionSpendPowerBundleCommandSpellReactDescription=Выберите команду. Reaction/&ReactionSpendPowerBundleCommandSpellReactTitle=Команда Reaction/&ReactionSpendPowerBundleCommandSpellTitle=Команда diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Feats/OtherFeats-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Feats/OtherFeats-zh-CN.txt index 42662460c4..3c0e71121e 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Feats/OtherFeats-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Feats/OtherFeats-zh-CN.txt @@ -145,11 +145,11 @@ Reaction/&SpendPowerLuckyEnemyAttackDescription=敌人命中你。你可以以 Reaction/&SpendPowerLuckyEnemyAttackReactDescription=投掷 d20 来替换攻击检定。 Reaction/&SpendPowerLuckyEnemyAttackReactTitle=幸运 Reaction/&SpendPowerLuckyEnemyAttackTitle=幸运 -Reaction/&SpendPowerLuckySavingDescription=您未能通过对抗 {0{1 的豁免检定。您可以做出反应,投掷 d20 并替换检定结果。 +Reaction/&SpendPowerLuckySavingDescription=您未能通过对抗 {0}{1} 的豁免检定。您可以做出反应,投掷 d20 并替换检定结果。 Reaction/&SpendPowerLuckySavingReactDescription=投掷 d20 来替换豁免结果。 Reaction/&SpendPowerLuckySavingReactTitle=幸运 Reaction/&SpendPowerLuckySavingTitle=幸运 -Reaction/&SpendPowerMageSlayerDescription=您未能成功对抗{0{1。您可以做出反应以取得成功。 +Reaction/&SpendPowerMageSlayerDescription=您未能成功对抗{0}{1}。您可以做出反应以取得成功。 Reaction/&SpendPowerMageSlayerReactDescription=成功。 Reaction/&SpendPowerMageSlayerReactTitle=法师杀手 Reaction/&SpendPowerMageSlayerTitle=巫师杀手 diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Feats/Races-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Feats/Races-zh-CN.txt index c3d64207f8..9a524331d5 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Feats/Races-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Feats/Races-zh-CN.txt @@ -75,7 +75,7 @@ Reaction/&CustomReactionBountifulLuckCheckDescription={0} 检定失败。 {1} Reaction/&CustomReactionBountifulLuckCheckReactDescription=投掷 d20 来替换检定结果。 Reaction/&CustomReactionBountifulLuckCheckReactTitle=好运连连 Reaction/&CustomReactionBountifulLuckCheckTitle=好运连连 -Reaction/&CustomReactionBountifulLuckSavingDescription={0> 未能通过对抗 {1>{2> 的豁免检定。您可以做出反应,投掷 d20 并替换检定结果。 +Reaction/&CustomReactionBountifulLuckSavingDescription={0} 未能通过对抗 {1}{2} 的豁免检定。您可以做出反应,投掷 d20 并替换检定结果。 Reaction/&CustomReactionBountifulLuckSavingReactDescription=投掷 d20 来替换豁免结果。 Reaction/&CustomReactionBountifulLuckSavingReactTitle=好运连连 Reaction/&CustomReactionBountifulLuckSavingTitle=好运连连 diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Inventor-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Inventor-zh-CN.txt index 4cab35e3d0..8696a7a67b 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Inventor-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Inventor-zh-CN.txt @@ -40,8 +40,8 @@ Reaction/&SpendPowerInventorFlashOfGeniusCheckReactDescription=投掷 d20 来替 Reaction/&SpendPowerInventorFlashOfGeniusCheckReactTitle=反应 Reaction/&SpendPowerInventorFlashOfGeniusCheckTitle=灵光一闪 Reaction/&SpendPowerInventorFlashOfGeniusReactDescription=成功 -Reaction/&SpendPowerInventorFlashOfGeniusReactDescriptionAlly={0 在对抗 {1{2 时未能成功掷骰。您可以做出反应,将您的智力调整值添加到掷骰中,并使其成功。 -Reaction/&SpendPowerInventorFlashOfGeniusReactDescriptionSelf={0 在对抗 {1{2 的豁免检定中失败,并且可以做出反应将你的智力调整值添加到检定中并使其成功。 +Reaction/&SpendPowerInventorFlashOfGeniusReactDescriptionAlly={0} 在对抗 {1}{2} 时未能成功掷骰。您可以做出反应,将您的智力调整值添加到掷骰中,并使其成功。 +Reaction/&SpendPowerInventorFlashOfGeniusReactDescriptionSelf={0} 在对抗 {1}{2} 的豁免检定中失败,并且可以做出反应将你的智力调整值添加到检定中并使其成功。 Reaction/&SpendPowerInventorFlashOfGeniusReactTitle=天才的闪光 Reaction/&SpendPowerInventorFlashOfGeniusTitle=灵光一闪 Reaction/&SpendPowerSoulOfArtificeDescription=你恢复了与你的盗贼等级等量的生命值,然后站了起来。 diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Races/Imp-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Races/Imp-zh-CN.txt index 629793c96b..865edc8c45 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Races/Imp-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Races/Imp-zh-CN.txt @@ -44,7 +44,7 @@ Reaction/&SpendPowerDrawInspirationAttackDescription=您即将错过一次攻击 Reaction/&SpendPowerDrawInspirationAttackReactDescription=将掷出的数加 3。 Reaction/&SpendPowerDrawInspirationAttackReactTitle=汲取灵感 Reaction/&SpendPowerDrawInspirationAttackTitle=汲取灵感 -Reaction/&SpendPowerDrawInspirationSavingDescription=您未能成功对抗 {0{1。您可以做出反应,将结果加 3。 +Reaction/&SpendPowerDrawInspirationSavingDescription=您未能成功对抗 {0}{1}。您可以做出反应,将结果加 3。 Reaction/&SpendPowerDrawInspirationSavingReactDescription=将掷出的数加 3。 Reaction/&SpendPowerDrawInspirationSavingReactTitle=汲取灵感 Reaction/&SpendPowerDrawInspirationSavingTitle=汲取灵感 diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt index e9e117b450..3667bc9ddc 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt @@ -340,4 +340,4 @@ ModUi/&UseOfficialObscurementRules=使用官方照明、遮蔽和 ModUi/&UseOfficialObscurementRulesHelp=[能感知到防御者但无法感知到攻击者的防御者会获得 ADV,无法感知到攻击者但可以感知到防御者会获得 DIS\n 被严重遮挡的区域会造成致盲状态,对生物的攻击掷骰获得 ADV,而生物的攻击掷骰获得 DIS\n 如果攻击者没有视力,则无法施放针对个人的所有远距离法术,除了那些明确未说明需要视力的法术] ModUi/&UseOfficialSmallRacesDisWithHeavyWeapons=使用重型武器时请使用官方小型体型种族规则[你的攻击处于劣势] ModUi/&Visuals=视觉效果:[需要重启] -ModUi/&WildSurgeDieRollThreshold=设置巫师狂野魔法几率骰子阈值:{0}>[如果掷出的骰子小于或等于阈值,则触发狂野涌动] +ModUi/&WildSurgeDieRollThreshold=设置巫师狂野魔法几率骰子阈值:{0}[如果掷出的骰子小于或等于阈值,则触发狂野涌动] diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells01-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells01-zh-CN.txt index 8e1efed586..d1ee5c89ee 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells01-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells01-zh-CN.txt @@ -71,7 +71,7 @@ Reaction/&ReactionSpendPowerBundleChaosBoltDescription=选择伤害类型。 Reaction/&ReactionSpendPowerBundleChaosBoltReactDescription=选择伤害类型。 Reaction/&ReactionSpendPowerBundleChaosBoltReactTitle=混乱箭 Reaction/&ReactionSpendPowerBundleChaosBoltTitle=混乱箭 -Reaction/&ReactionSpendPowerBundleCommandSpellDescription=选择您的命令。 +Reaction/&ReactionSpendPowerBundleCommandSpellDescription=命令 {0} 执行: Reaction/&ReactionSpendPowerBundleCommandSpellReactDescription=选择您的命令。 Reaction/&ReactionSpendPowerBundleCommandSpellReactTitle=命令 Reaction/&ReactionSpendPowerBundleCommandSpellTitle=命令 diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/SubClasses/CircleOfTheCosmos-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/SubClasses/CircleOfTheCosmos-zh-CN.txt index 290e1f40b5..84ddac4a9a 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/SubClasses/CircleOfTheCosmos-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/SubClasses/CircleOfTheCosmos-zh-CN.txt @@ -40,7 +40,7 @@ Reaction/&SpendPowerWealCosmosOmenCheckDescription={0} 检定失败。 {1} 可 Reaction/&SpendPowerWealCosmosOmenCheckReactDescription=投掷 D6 来帮助盟友进行检定。 Reaction/&SpendPowerWealCosmosOmenCheckReactTitle=吉兆 Reaction/&SpendPowerWealCosmosOmenCheckTitle=宇宙预兆:吉兆 -Reaction/&SpendPowerWealCosmosOmenSavingDescription={0 在对抗 {1{2 时未能成功掷骰。您可以做出反应掷出 D6 并将结果添加到掷骰中。 +Reaction/&SpendPowerWealCosmosOmenSavingDescription={0} 在对抗 {1}{2} 时未能成功掷骰。您可以做出反应掷出 D6 并将结果添加到掷骰中。 Reaction/&SpendPowerWealCosmosOmenSavingReactDescription=投掷 d6 来帮助盟友豁免。 Reaction/&SpendPowerWealCosmosOmenSavingReactTitle=吉兆 Reaction/&SpendPowerWealCosmosOmenSavingTitle=宇宙预兆:吉兆 @@ -52,7 +52,7 @@ Reaction/&SpendPowerWoeCosmosOmenCheckDescription={0} 成功检定。 {1} 可以 Reaction/&SpendPowerWoeCosmosOmenCheckReactDescription=投掷 D6 来通过豁免结果来分散敌人的注意力。 Reaction/&SpendPowerWoeCosmosOmenCheckReactTitle=凶兆 Reaction/&SpendPowerWoeCosmosOmenCheckTitle=宇宙预兆:凶兆 -Reaction/&SpendPowerWoeCosmosOmenSavingDescription={0 成功通过了对抗 {1{2 的豁免检定。您可以做出反应,投掷 D6 并从检定结果中减去结果。 +Reaction/&SpendPowerWoeCosmosOmenSavingDescription={0} 成功通过了对抗 {1}{2} 的豁免检定。您可以做出反应,投掷 D6 并从检定结果中减去结果。 Reaction/&SpendPowerWoeCosmosOmenSavingReactDescription=投掷 d6 干扰敌人的豁免。 Reaction/&SpendPowerWoeCosmosOmenSavingReactTitle=凶兆 Reaction/&SpendPowerWoeCosmosOmenSavingTitle=宇宙预兆:凶兆 diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/SubClasses/MartialRoyalKnight-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/SubClasses/MartialRoyalKnight-zh-CN.txt index a2ae47edfe..3212bb910f 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/SubClasses/MartialRoyalKnight-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/SubClasses/MartialRoyalKnight-zh-CN.txt @@ -8,8 +8,8 @@ Feature/&PowerRoyalKnightRallyingCryDescription=从第 3 级开始,你可以 Feature/&PowerRoyalKnightRallyingCryTitle=重整姿态 Feature/&PowerRoyalKnightSpiritedSurgeDescription=从 18 级开始,你的振奋之潮也会在 1 回合内给予盟友攻击,豁免和属性检定优势。 Feature/&PowerRoyalKnightSpiritedSurgeTitle=奋力之潮 -Reaction/&SpendPowerRoyalKnightInspiringProtectionDescriptionAlly={0 未能成功对抗 {1{2。您可以做出反应,重新进行保存。 -Reaction/&SpendPowerRoyalKnightInspiringProtectionDescriptionSelf={0 在对抗 {1{2 时未能成功进行豁免检定,可以做出反应重新进行豁免检定。 +Reaction/&SpendPowerRoyalKnightInspiringProtectionDescriptionAlly={0} 未能成功对抗 {1}{2}。您可以做出反应,重新进行保存。 +Reaction/&SpendPowerRoyalKnightInspiringProtectionDescriptionSelf={0} 在对抗 {1}{2} 时未能成功进行豁免检定,可以做出反应重新进行豁免检定。 Reaction/&SpendPowerRoyalKnightInspiringProtectionReactDescription=重新进行保存。 Reaction/&SpendPowerRoyalKnightInspiringProtectionReactTitle=振奋守护 Reaction/&SpendPowerRoyalKnightInspiringProtectionTitle=振奋守护 diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/SubClasses/SorcerousWildMagic-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/SubClasses/SorcerousWildMagic-zh-CN.txt index c133cece62..a35d95ca4e 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/SubClasses/SorcerousWildMagic-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/SubClasses/SorcerousWildMagic-zh-CN.txt @@ -86,15 +86,15 @@ Reaction/&SpendPowerBendLuckEnemyCheckDescription={0} 成功完成检查 Reaction/&SpendPowerBendLuckEnemyCheckReactDescription=掷一个 d4 来从检查掷骰中减去结果。 Reaction/&SpendPowerBendLuckEnemyCheckReactTitle=扭转运气 Reaction/&SpendPowerBendLuckEnemyCheckTitle=扭转运气 -Reaction/&SpendPowerBendLuckEnemySavingDescription={0> 成功通过了对抗 {1>{2> 的豁免检定。您可以做出反应,投掷 d4 并从检定结果中减去。 +Reaction/&SpendPowerBendLuckEnemySavingDescription={0} 成功通过了对抗 {1}{2} 的豁免检定。您可以做出反应,投掷 d4 并从检定结果中减去。 Reaction/&SpendPowerBendLuckEnemySavingReactDescription=掷一个 d4 来从保存掷骰中减去结果。 Reaction/&SpendPowerBendLuckEnemySavingReactTitle=扭转运气 Reaction/&SpendPowerBendLuckEnemySavingTitle=扭转运气 -Reaction/&SpendPowerBendLuckSavingDescription={0 在对抗 {1{2 时未能通过豁免检定。您可以做出反应,投掷 d4 并将结果添加到豁免检定中。 +Reaction/&SpendPowerBendLuckSavingDescription={0} 在对抗 {1}{2} 时未能通过豁免检定。您可以做出反应,投掷 d4 并将结果添加到豁免检定中。 Reaction/&SpendPowerBendLuckSavingReactDescription=掷一个 d4 将结果添加到保存掷骰中。 Reaction/&SpendPowerBendLuckSavingReactTitle=扭转运气 Reaction/&SpendPowerBendLuckSavingTitle=扭转运气 -Reaction/&SpendPowerTidesOfChaosAttackDescription=您错过了一次攻击。您可以使用“混沌之潮”对付{0>,并重新发起一次有利的攻击。 +Reaction/&SpendPowerTidesOfChaosAttackDescription=您错过了一次攻击。您可以使用“混沌之潮”对付{0},并重新发起一次有利的攻击。 Reaction/&SpendPowerTidesOfChaosAttackReactDescription=充分利用优势发起攻击。 Reaction/&SpendPowerTidesOfChaosAttackReactTitle=混沌之潮 Reaction/&SpendPowerTidesOfChaosAttackTitle=混沌之潮 @@ -102,7 +102,7 @@ Reaction/&SpendPowerTidesOfChaosCheckDescription=您未通过检查。您可以 Reaction/&SpendPowerTidesOfChaosCheckReactDescription=以优势滚动支票。 Reaction/&SpendPowerTidesOfChaosCheckReactTitle=混沌之潮 Reaction/&SpendPowerTidesOfChaosCheckTitle=混沌之潮 -Reaction/&SpendPowerTidesOfChaosSaveDescription=您未能成功对抗 {0{1。您可以做出反应,重新掷骰,以获得优势。 +Reaction/&SpendPowerTidesOfChaosSaveDescription=您未能成功对抗 {0}{1}。您可以做出反应,重新掷骰,以获得优势。 Reaction/&SpendPowerTidesOfChaosSaveReactDescription=利用优势进行保存。 Reaction/&SpendPowerTidesOfChaosSaveReactTitle=混沌之潮 Reaction/&SpendPowerTidesOfChaosSaveTitle=混沌之潮 From 935182251d1aa31bcf313538ccf28951618b3d2a Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Wed, 4 Sep 2024 19:41:40 -0700 Subject: [PATCH 036/212] improve Command spell --- .../UnfinishedBusinessBlueprints/Assets.txt | 3 + .../ConditionCommandSpellApproach.json | 4 +- .../ConditionCommandSpellFlee.json | 4 +- .../ConditionCommandSpellMark.json | 155 ++++++++++++++++++ .../ActionAffinityCommandSpell.json | 48 ++++++ .../SpellDefinition/CommandSpell.json | 29 +++- .../SpellDefinition/DissonantWhispers.json | 2 +- .../Spells/SpellBuildersLevel01.cs | 40 ++++- 8 files changed, 274 insertions(+), 11 deletions(-) create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellMark.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionActionAffinity/ActionAffinityCommandSpell.json diff --git a/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt b/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt index 358f7628f8..14f25062a3 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt +++ b/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt @@ -696,6 +696,7 @@ ConditionCommandSpellApproach ConditionDefinition ConditionDefinition bc446416-9 ConditionCommandSpellFlee ConditionDefinition ConditionDefinition b52e3cc4-15af-5123-a861-3fae68460977 ConditionCommandSpellGrovel ConditionDefinition ConditionDefinition 6422ce36-c309-52f9-b699-bddb61fde71e ConditionCommandSpellHalt ConditionDefinition ConditionDefinition d20e7a46-e706-5c54-8bea-955b2054193a +ConditionCommandSpellMark ConditionDefinition ConditionDefinition 6c3dde6d-64eb-5e23-a14c-b820870f90ee ConditionCommandSpellSelf ConditionDefinition ConditionDefinition 7b73b84d-697d-5018-9cff-85b0fba12033 ConditionCorruptingBolt ConditionDefinition ConditionDefinition c47e9ae4-841b-53af-b40f-2cb08dfa7d08 ConditionCrownOfStars ConditionDefinition ConditionDefinition 2d6f7c70-16fc-550b-83ff-f2e945b43449 @@ -1593,6 +1594,7 @@ ActionAffinityBrutalStrikeToggle FeatureDefinitionActionAffinity FeatureDefiniti ActionAffinityCaveWyrmkinBonusShove FeatureDefinitionActionAffinity FeatureDefinition feed7d9e-34bd-51b7-99a4-7a152bfab68f ActionAffinityCircleOfTheWildfireSpirit FeatureDefinitionActionAffinity FeatureDefinition f129168e-25fa-5478-bde2-57246aca7066 ActionAffinityCollegeOfValianceHeroicInspiration FeatureDefinitionActionAffinity FeatureDefinition 951aafe4-9c11-50cf-a43d-8c23ace8983f +ActionAffinityCommandSpell FeatureDefinitionActionAffinity FeatureDefinition d57c78ae-570a-5fd6-b2fc-7eaca82a71bd ActionAffinityConditionBlind FeatureDefinitionActionAffinity FeatureDefinition ba8f244f-070a-5288-a482-e145ab83adef ActionAffinityCoordinatedAssaultToggle FeatureDefinitionActionAffinity FeatureDefinition 2052bab8-0723-5f23-ba11-b5340f444906 ActionAffinityCrystalWyrmkinConditionCrystalDefense FeatureDefinitionActionAffinity FeatureDefinition 1274559b-34e5-5c07-acbe-9d51d149959e @@ -4247,6 +4249,7 @@ ActionAffinityBrutalStrikeToggle FeatureDefinitionActionAffinity FeatureDefiniti ActionAffinityCaveWyrmkinBonusShove FeatureDefinitionActionAffinity FeatureDefinitionActionAffinity feed7d9e-34bd-51b7-99a4-7a152bfab68f ActionAffinityCircleOfTheWildfireSpirit FeatureDefinitionActionAffinity FeatureDefinitionActionAffinity f129168e-25fa-5478-bde2-57246aca7066 ActionAffinityCollegeOfValianceHeroicInspiration FeatureDefinitionActionAffinity FeatureDefinitionActionAffinity 951aafe4-9c11-50cf-a43d-8c23ace8983f +ActionAffinityCommandSpell FeatureDefinitionActionAffinity FeatureDefinitionActionAffinity d57c78ae-570a-5fd6-b2fc-7eaca82a71bd ActionAffinityConditionBlind FeatureDefinitionActionAffinity FeatureDefinitionActionAffinity ba8f244f-070a-5288-a482-e145ab83adef ActionAffinityCoordinatedAssaultToggle FeatureDefinitionActionAffinity FeatureDefinitionActionAffinity 2052bab8-0723-5f23-ba11-b5340f444906 ActionAffinityCrystalWyrmkinConditionCrystalDefense FeatureDefinitionActionAffinity FeatureDefinitionActionAffinity 1274559b-34e5-5c07-acbe-9d51d149959e diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellApproach.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellApproach.json index 1dcd085b0a..42996088e7 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellApproach.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellApproach.json @@ -3,7 +3,9 @@ "inDungeonEditor": false, "parentCondition": null, "conditionType": "Detrimental", - "features": [], + "features": [ + "Definition:ActionAffinityCommandSpell:d57c78ae-570a-5fd6-b2fc-7eaca82a71bd" + ], "allowMultipleInstances": false, "silentWhenAdded": false, "silentWhenRemoved": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellFlee.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellFlee.json index 8efe403127..48826ee336 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellFlee.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellFlee.json @@ -3,7 +3,9 @@ "inDungeonEditor": false, "parentCondition": null, "conditionType": "Detrimental", - "features": [], + "features": [ + "Definition:ActionAffinityCommandSpell:d57c78ae-570a-5fd6-b2fc-7eaca82a71bd" + ], "allowMultipleInstances": false, "silentWhenAdded": false, "silentWhenRemoved": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellMark.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellMark.json new file mode 100644 index 0000000000..99aef1d89b --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellMark.json @@ -0,0 +1,155 @@ +{ + "$type": "ConditionDefinition, Assembly-CSharp", + "inDungeonEditor": false, + "parentCondition": null, + "conditionType": "Beneficial", + "features": [], + "allowMultipleInstances": false, + "silentWhenAdded": true, + "silentWhenRemoved": true, + "silentWhenRefreshed": false, + "terminateWhenRemoved": false, + "specialDuration": false, + "durationType": "Hour", + "durationParameterDie": "D4", + "durationParameter": 1, + "forceTurnOccurence": false, + "turnOccurence": "EndOfTurn", + "specialInterruptions": [], + "interruptionRequiresSavingThrow": false, + "interruptionSavingThrowComputationMethod": "SaveOverride", + "interruptionSavingThrowAbility": "", + "interruptionDamageThreshold": 0, + "keepConditionIfSavingThrowSucceeds": false, + "interruptionSavingThrowAffinity": "None", + "conditionTags": [], + "recurrentEffectForms": [], + "cancellingConditions": [], + "additionalDamageWhenHit": false, + "additionalDamageTypeDetermination": "Specific", + "additionalDamageType": "", + "additionalDamageQuantity": "AbilityBonus", + "additionalDamageDieType": "D1", + "additionalDamageDieNumber": 1, + "additionalConditionWhenHit": false, + "additionalCondition": null, + "additionalConditionDurationType": "Round", + "additionalConditionDurationParameter": 1, + "additionalConditionTurnOccurenceType": "StartOfTurn", + "conditionStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "conditionParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "conditionEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "recurrentEffectParticleReference": null, + "characterShaderReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "particlesBasedOnAncestryDamageType": false, + "ancestryType": "Sorcerer", + "acidParticleParameters": null, + "coldParticleParameters": null, + "fireParticleParameters": null, + "lightningParticleParameters": null, + "poisonParticleParameters": null, + "overrideCharacterShaderColors": false, + "firstCharacterShaderColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "secondCharacterShaderColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "timeToWaitBeforeApplyingShader": 0.5, + "timeToWaitBeforeRemovingShader": 0.5, + "possessive": false, + "amountOrigin": "None", + "baseAmount": 0, + "additiveAmount": false, + "sourceAbilityBonusMinValue": 1, + "subsequentOnRemoval": null, + "subsequentHasSavingThrow": false, + "subsequentSavingThrowAbilityScore": "Constitution", + "subsequentVariableForDC": "FrenzyExhaustionDC", + "subsequentDCIncrease": 5, + "effectFormsOnRemoved": [], + "forceBehavior": false, + "addBehavior": false, + "fearSource": false, + "battlePackage": null, + "explorationPackage": null, + "removedFromTheGame": false, + "permanentlyRemovedIfExtraPlanar": false, + "refundReceivedDamageWhenRemoved": false, + "followSourcePosition": false, + "disolveCharacterOnDeath": false, + "disolveParameters": { + "$type": "GraphicsCharacterDefinitions+DisolveParameters, Assembly-CSharp", + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "colorWidth": 0.0, + "noiseScale": 5.0, + "hueScale": 0.0, + "vertexOffset": 0.0, + "curve": { + "$type": "UnityEngine.AnimationCurve, UnityEngine.CoreModule" + }, + "startAfterDeathAnimation": false, + "duration": 0.0 + }, + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": true, + "title": "Feature/&NoContentTitle", + "description": "Feature/&NoContentTitle", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "6c3dde6d-64eb-5e23-a14c-b820870f90ee", + "contentPack": 9999, + "name": "ConditionCommandSpellMark" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionActionAffinity/ActionAffinityCommandSpell.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionActionAffinity/ActionAffinityCommandSpell.json new file mode 100644 index 0000000000..1766815869 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionActionAffinity/ActionAffinityCommandSpell.json @@ -0,0 +1,48 @@ +{ + "$type": "FeatureDefinitionActionAffinity, Assembly-CSharp", + "allowedActionTypes": [ + false, + false, + true, + false, + false, + false + ], + "eitherMainOrBonus": false, + "maxAttacksNumber": -1, + "forbiddenActions": [], + "authorizedActions": [], + "restrictedActions": [], + "actionExecutionModifiers": [], + "specialBehaviour": "None", + "randomBehaviorDie": "D10", + "randomBehaviourOptions": [], + "rechargeReactionsAtEveryTurn": false, + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": true, + "title": "Feature/&NoContentTitle", + "description": "Feature/&NoContentTitle", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "d57c78ae-570a-5fd6-b2fc-7eaca82a71bd", + "contentPack": 9999, + "name": "ActionAffinityCommandSpell" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpell.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpell.json index b4e8fc0018..b25fe5d203 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpell.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpell.json @@ -73,6 +73,33 @@ "effectApplication": "All", "effectFormFilters": [], "effectForms": [ + { + "$type": "EffectForm, Assembly-CSharp", + "formType": "Condition", + "addBonusMode": "None", + "applyLevel": "No", + "levelType": "ClassLevel", + "levelMultiplier": 1, + "diceByLevelTable": [], + "createdByCharacter": true, + "createdByCondition": false, + "hasSavingThrow": true, + "savingThrowAffinity": "Negates", + "dcModifier": 0, + "canSaveToCancel": false, + "saveOccurence": "EndOfTurn", + "conditionForm": { + "$type": "ConditionForm, Assembly-CSharp", + "conditionDefinitionName": "ConditionCommandSpellMark", + "conditionDefinition": "Definition:ConditionCommandSpellMark:6c3dde6d-64eb-5e23-a14c-b820870f90ee", + "operation": "Add", + "conditionsList": [], + "applyToSelf": false, + "forceOnSelf": false + }, + "hasFilterId": false, + "filterId": 0 + }, { "$type": "EffectForm, Assembly-CSharp", "formType": "Condition", @@ -151,7 +178,7 @@ }, "effectParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", + "m_AssetGUID": "19f4a5c35fbee93479226bd045a5ec1f", "m_SubObjectName": "", "m_SubObjectType": "" }, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/DissonantWhispers.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/DissonantWhispers.json index 9ebe854941..f67fb88e24 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/DissonantWhispers.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/DissonantWhispers.json @@ -183,7 +183,7 @@ }, "impactParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "c50fd7065bb34304ca1f1a3a02dcd532", + "m_AssetGUID": "", "m_SubObjectName": "", "m_SubObjectType": "" }, diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs index 846fa48470..5faeb6b12b 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs @@ -1093,6 +1093,7 @@ public IEnumerator OnMagicEffectBeforeHitConfirmedOnEnemy( [defender], attacker, "ChaosBolt", + string.Empty, ReactionValidated, ReactionNotValidated, battleManager); @@ -1243,6 +1244,12 @@ internal static SpellDefinition BuildCommand() .SetUsesFixed(ActivationTime.NoCost) .AddToDB(); + var actionAffinityCanOnlyMove = FeatureDefinitionActionAffinityBuilder + .Create($"ActionAffinity{NAME}") + .SetGuiPresentationNoContent(true) + .SetAllowedActionTypes(false, false, true, false, false, false) + .AddToDB(); + // Approach #region Approach AI Behavior @@ -1279,6 +1286,7 @@ internal static SpellDefinition BuildCommand() .SetPossessive() .SetSpecialDuration() .SetBrain(approachPackage, true, true) + .SetFeatures(actionAffinityCanOnlyMove) .SetSpecialInterruptions(ConditionInterruption.Moved) .AddCustomSubFeatures(new OnConditionAddedOrRemovedCommandApproachOrFlee(true)) .AddToDB(); @@ -1305,6 +1313,7 @@ internal static SpellDefinition BuildCommand() .SetPossessive() .SetSpecialDuration() .SetBrain(DecisionPackageDefinitions.Fear, true, true) + .SetFeatures(actionAffinityCanOnlyMove) .SetSpecialInterruptions(ConditionInterruption.Moved) .AddCustomSubFeatures(new OnConditionAddedOrRemovedCommandApproachOrFlee(false)) .AddToDB(); @@ -1381,6 +1390,12 @@ internal static SpellDefinition BuildCommand() .AddCustomSubFeatures(AddUsablePowersFromCondition.Marker) .AddToDB(); + var conditionMark = ConditionDefinitionBuilder + .Create($"Condition{NAME}Mark") + .SetGuiPresentationNoContent(true) + .SetSilent(Silent.WhenAddedOrRemoved) + .AddToDB(); + var spell = SpellDefinitionBuilder .Create(NAME) .SetGuiPresentation(Category.Spell, Command) @@ -1401,24 +1416,32 @@ internal static SpellDefinition BuildCommand() additionalTargetsPerIncrement: 1) .SetSavingThrowData(false, AttributeDefinitions.Wisdom, true, EffectDifficultyClassComputation.SpellCastingFeature) - .SetEffectForms(EffectFormBuilder.ConditionForm( - conditionSelf, - ConditionForm.ConditionOperation.Add, true)) + .SetEffectForms( + EffectFormBuilder + .Create() + .HasSavingThrow(EffectSavingThrowType.Negates) + .SetConditionForm(conditionMark, ConditionForm.ConditionOperation.Add) + .Build(), + EffectFormBuilder.ConditionForm(conditionSelf, ConditionForm.ConditionOperation.Add, true)) .SetParticleEffectParameters(Command) + .SetEffectEffectParameters(SpareTheDying) .Build()) - .AddCustomSubFeatures(new PowerOrSpellFinishedByMeCommand(powerPool)) + .AddCustomSubFeatures( + new PowerOrSpellFinishedByMeCommand( + conditionMark, powerPool, conditionApproach, conditionFlee, conditionGrovel, conditionHalt)) .AddToDB(); return spell; } private sealed class PowerOrSpellFinishedByMeCommand( + ConditionDefinition conditionMark, FeatureDefinitionPower powerPool, params ConditionDefinition[] conditions) : IPowerOrSpellFinishedByMe { public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, BaseDefinition baseDefinition) { - if (action.Countered || action.ExecutionFailed || action.SaveOutcome == RollOutcome.Success) + if (action.Countered || action.ExecutionFailed) { yield break; } @@ -1427,13 +1450,16 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, var rulesetCaster = caster.RulesetCharacter; var usablePower = PowerProvider.Get(powerPool, rulesetCaster); - foreach (var target in action.ActionParams.TargetCharacters) + foreach (var target in action.ActionParams.TargetCharacters + .Where(x => x.RulesetActor.HasConditionOfCategoryAndType( + AttributeDefinitions.TagEffect, conditionMark.Name))) { yield return caster.MyReactToSpendPowerBundle( usablePower, [target], caster, "CommandSpell", + "ReactionSpendPowerBundleCommandSpellDescription".Formatted(Category.Reaction, target.Name), ReactionValidated); continue; @@ -1446,7 +1472,7 @@ void ReactionValidated(ReactionRequestSpendBundlePower reactionRequest) } var rulesetTarget = target.RulesetCharacter; - var conditionsToRemove = rulesetCaster.AllConditions + var conditionsToRemove = rulesetTarget.AllConditions .Where(x => x.SourceGuid != caster.Guid && conditions.Contains(x.ConditionDefinition)) From cb82f9a3dba9f33645063a006d2a34ca0e9e9b94 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Wed, 4 Sep 2024 19:43:53 -0700 Subject: [PATCH 037/212] rider clean up --- ...haracterActionWildshapeSwapAttackToggle.cs | 2 +- .../Models/TranslatorContext.cs | 14 ++++----- .../Activities/ActivitiesBreakFreePatcher.cs | 2 +- .../Subclasses/SorcerousWildMagic.cs | 30 +++++++++---------- 4 files changed, 24 insertions(+), 24 deletions(-) diff --git a/SolastaUnfinishedBusiness/Actions/CharacterActionWildshapeSwapAttackToggle.cs b/SolastaUnfinishedBusiness/Actions/CharacterActionWildshapeSwapAttackToggle.cs index 4d448acae2..388409d37b 100644 --- a/SolastaUnfinishedBusiness/Actions/CharacterActionWildshapeSwapAttackToggle.cs +++ b/SolastaUnfinishedBusiness/Actions/CharacterActionWildshapeSwapAttackToggle.cs @@ -26,7 +26,7 @@ public override IEnumerator ExecuteImpl() var gameLocationCharacter = GameLocationCharacter.GetFromActor(rulesetCharacter); - if (gameLocationCharacter is not {HasAttackedSinceLastTurn: false}) + if (gameLocationCharacter is not { HasAttackedSinceLastTurn: false }) { yield break; } diff --git a/SolastaUnfinishedBusiness/Models/TranslatorContext.cs b/SolastaUnfinishedBusiness/Models/TranslatorContext.cs index 07dd1647f7..00247aef8b 100644 --- a/SolastaUnfinishedBusiness/Models/TranslatorContext.cs +++ b/SolastaUnfinishedBusiness/Models/TranslatorContext.cs @@ -648,10 +648,10 @@ private static IEnumerator TranslateUserCampaignRoutine(string languageCode, [No foreach (var functor in userDialogState.functors) { - functor.stringParameter = functor.type switch + functor.StringParameter = functor.type switch { - "SetLocationStatus" => Translate(functor.stringParameter, languageCode), - _ => functor.stringParameter + "SetLocationStatus" => Translate(functor.StringParameter, languageCode), + _ => functor.StringParameter }; } } @@ -693,7 +693,7 @@ private static IEnumerator TranslateUserCampaignRoutine(string languageCode, [No if (outStart.type == "SetLocationStatus") { - outStart.stringParameter = Translate(outStart.stringParameter, languageCode); + outStart.StringParameter = Translate(outStart.StringParameter, languageCode); } } @@ -703,12 +703,12 @@ private static IEnumerator TranslateUserCampaignRoutine(string languageCode, [No outcome.DescriptionText = Translate(outcome.DescriptionText, languageCode); // magicSkySword : Only place parameters can be translated - outcome.validatorDescription.stringParameter = outcome.validatorDescription.type switch + outcome.validatorDescription.StringParameter = outcome.validatorDescription.type switch { QuestDefinitions.QuestValidatorType.EnterLocation or QuestDefinitions.QuestValidatorType.LeaveLocation => Translate( - outcome.validatorDescription.stringParameter, languageCode), - _ => outcome.validatorDescription.stringParameter + outcome.validatorDescription.StringParameter, languageCode), + _ => outcome.validatorDescription.StringParameter }; } } diff --git a/SolastaUnfinishedBusiness/Patches/Activities/ActivitiesBreakFreePatcher.cs b/SolastaUnfinishedBusiness/Patches/Activities/ActivitiesBreakFreePatcher.cs index ae207d98ac..1ce68d4658 100644 --- a/SolastaUnfinishedBusiness/Patches/Activities/ActivitiesBreakFreePatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/Activities/ActivitiesBreakFreePatcher.cs @@ -51,7 +51,7 @@ public static IEnumerator Postfix( var success = true; // no ability check - switch (decisionDefinition.Decision.stringParameter) + switch (decisionDefinition.Decision.StringParameter) { case AiContext.DoNothing: rulesetCharacter.RemoveCondition(restrainingCondition); diff --git a/SolastaUnfinishedBusiness/Subclasses/SorcerousWildMagic.cs b/SolastaUnfinishedBusiness/Subclasses/SorcerousWildMagic.cs index b74362db71..424906a0b1 100644 --- a/SolastaUnfinishedBusiness/Subclasses/SorcerousWildMagic.cs +++ b/SolastaUnfinishedBusiness/Subclasses/SorcerousWildMagic.cs @@ -839,17 +839,17 @@ public IEnumerator OnTryAlterOutcomeAttack( yield break; } - string StringParameter; + string stringParameter; if (helper.Side == attacker.Side && action.AttackRollOutcome is RollOutcome.Failure) { - StringParameter = "BendLuckAttack"; + stringParameter = "BendLuckAttack"; } else if (helper.Side != attacker.Side && action.AttackRollOutcome is RollOutcome.Success) { - StringParameter = "BendLuckEnemyAttack"; + stringParameter = "BendLuckEnemyAttack"; } else { @@ -860,8 +860,8 @@ public IEnumerator OnTryAlterOutcomeAttack( yield return helper.MyReactToSpendPower( usablePower, attacker, - StringParameter, - $"SpendPower{StringParameter}Description".Formatted(Category.Reaction, defender.Name), + stringParameter, + $"SpendPower{stringParameter}Description".Formatted(Category.Reaction, defender.Name), ReactionValidated, battleManager); @@ -949,19 +949,19 @@ public IEnumerator OnTryAlterAttributeCheck( yield break; } - string StringParameter; + string stringParameter; if (helper.Side == defender.Side && abilityCheckData.AbilityCheckRoll > 0 && abilityCheckData.AbilityCheckRollOutcome is RollOutcome.Failure or RollOutcome.CriticalFailure) { - StringParameter = "BendLuckCheck"; + stringParameter = "BendLuckCheck"; } else if (helper.Side != defender.Side && abilityCheckData.AbilityCheckRoll > 0 && abilityCheckData.AbilityCheckRollOutcome is RollOutcome.Success or RollOutcome.CriticalSuccess) { - StringParameter = "BendLuckEnemyCheck"; + stringParameter = "BendLuckEnemyCheck"; } else { @@ -972,8 +972,8 @@ public IEnumerator OnTryAlterAttributeCheck( yield return helper.MyReactToSpendPower( usablePower, helper, - StringParameter, - $"SpendPower{StringParameter}Description".Formatted(Category.Reaction, defender.Name), + stringParameter, + $"SpendPower{stringParameter}Description".Formatted(Category.Reaction, defender.Name), ReactionValidated, battleManager); @@ -1066,17 +1066,17 @@ public IEnumerator OnTryAlterOutcomeSavingThrow( yield break; } - string StringParameter; + string stringParameter; if (helper.Side == defender.Side && savingThrowData.SaveOutcome == RollOutcome.Failure) { - StringParameter = "BendLuckSaving"; + stringParameter = "BendLuckSaving"; } else if (helper.Side != defender.Side && savingThrowData.SaveOutcome == RollOutcome.Success) { - StringParameter = "BendLuckEnemySaving"; + stringParameter = "BendLuckEnemySaving"; } else { @@ -1089,8 +1089,8 @@ public IEnumerator OnTryAlterOutcomeSavingThrow( yield return helper.MyReactToSpendPower( usablePower, helper, - StringParameter, - $"SpendPower{StringParameter}Description".Formatted(Category.Reaction, + stringParameter, + $"SpendPower{stringParameter}Description".Formatted(Category.Reaction, defender.Name, attacker?.Name ?? envTitle, savingThrowData.Title), ReactionValidated, battleManager); From 21cb1834f0e7e9d49dcd9511d925953dc7627041 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Wed, 4 Sep 2024 20:01:58 -0700 Subject: [PATCH 038/212] add skipAnimationAndVFX to MyExecuteActionSpendPower and set to true on StopPowerConcentrationProvider and CharacterActionShovePatcher --- .../Api/GameExtensions/GameLocationCharacterExtensions.cs | 4 +++- .../CustomUI/StopPowerConcentrationProvider.cs | 2 +- SolastaUnfinishedBusiness/Feats/MeleeCombatFeats.cs | 2 +- SolastaUnfinishedBusiness/Models/Level20SubclassesContext.cs | 2 +- .../Patches/CharacterActionShovePatcher.cs | 2 +- SolastaUnfinishedBusiness/Races/Malakh.cs | 2 +- SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs | 4 ++-- SolastaUnfinishedBusiness/Spells/SpellBuildersLevel03.cs | 2 +- SolastaUnfinishedBusiness/Spells/SpellBuildersLevel04.cs | 4 ++-- .../Subclasses/Builders/InvocationsBuilders.cs | 4 ++-- .../Subclasses/CircleOfTheForestGuardian.cs | 2 +- SolastaUnfinishedBusiness/Subclasses/CircleOfTheWildfire.cs | 2 +- SolastaUnfinishedBusiness/Subclasses/CollegeOfAudacity.cs | 2 +- SolastaUnfinishedBusiness/Subclasses/InnovationVitriolist.cs | 2 +- SolastaUnfinishedBusiness/Subclasses/MartialArcaneArcher.cs | 2 +- SolastaUnfinishedBusiness/Subclasses/PathOfTheElements.cs | 2 +- SolastaUnfinishedBusiness/Subclasses/PathOfTheReaver.cs | 2 +- SolastaUnfinishedBusiness/Subclasses/PathOfTheWildMagic.cs | 2 +- SolastaUnfinishedBusiness/Subclasses/RangerSkyWarrior.cs | 2 +- SolastaUnfinishedBusiness/Subclasses/WayOfTheDragon.cs | 2 +- SolastaUnfinishedBusiness/Subclasses/WayOfTheWealAndWoe.cs | 2 +- SolastaUnfinishedBusiness/Subclasses/WizardWarMagic.cs | 2 +- 22 files changed, 27 insertions(+), 25 deletions(-) diff --git a/SolastaUnfinishedBusiness/Api/GameExtensions/GameLocationCharacterExtensions.cs b/SolastaUnfinishedBusiness/Api/GameExtensions/GameLocationCharacterExtensions.cs index 0268deda50..66a622bdbe 100644 --- a/SolastaUnfinishedBusiness/Api/GameExtensions/GameLocationCharacterExtensions.cs +++ b/SolastaUnfinishedBusiness/Api/GameExtensions/GameLocationCharacterExtensions.cs @@ -97,6 +97,7 @@ internal static void MyExecuteActionPowerNoCost( internal static void MyExecuteActionSpendPower( this GameLocationCharacter character, RulesetUsablePower usablePower, + bool skipAnimationAndVFX = false, params GameLocationCharacter[] targets) { var actionService = ServiceRepository.GetService(); @@ -107,7 +108,8 @@ internal static void MyExecuteActionSpendPower( StringParameter = usablePower.PowerDefinition.Name, RulesetEffect = implementationService.InstantiateEffectPower(rulesetCharacter, usablePower, false), UsablePower = usablePower, - targetCharacters = [.. targets] + targetCharacters = [.. targets], + SkipAnimationsAndVFX = skipAnimationAndVFX }; actionService.ExecuteInstantSingleAction(actionParams); diff --git a/SolastaUnfinishedBusiness/CustomUI/StopPowerConcentrationProvider.cs b/SolastaUnfinishedBusiness/CustomUI/StopPowerConcentrationProvider.cs index 05da63a5ef..b79d788633 100644 --- a/SolastaUnfinishedBusiness/CustomUI/StopPowerConcentrationProvider.cs +++ b/SolastaUnfinishedBusiness/CustomUI/StopPowerConcentrationProvider.cs @@ -29,6 +29,6 @@ public void Stop(RulesetCharacter character) var locationCharacter = GameLocationCharacter.GetFromActor(character); var usablePower = PowerProvider.Get(StopPower, character); - locationCharacter.MyExecuteActionSpendPower(usablePower, locationCharacter); + locationCharacter.MyExecuteActionSpendPower(usablePower, true, locationCharacter); } } diff --git a/SolastaUnfinishedBusiness/Feats/MeleeCombatFeats.cs b/SolastaUnfinishedBusiness/Feats/MeleeCombatFeats.cs index a5f2d3b10e..5fd75fed42 100644 --- a/SolastaUnfinishedBusiness/Feats/MeleeCombatFeats.cs +++ b/SolastaUnfinishedBusiness/Feats/MeleeCombatFeats.cs @@ -1538,7 +1538,7 @@ public IEnumerator OnPhysicalAttackFinishedByMe( var usablePower = PowerProvider.Get(power, rulesetAttacker); - attacker.MyExecuteActionSpendPower(usablePower, defender); + attacker.MyExecuteActionSpendPower(usablePower, false, defender); } } diff --git a/SolastaUnfinishedBusiness/Models/Level20SubclassesContext.cs b/SolastaUnfinishedBusiness/Models/Level20SubclassesContext.cs index 6dd821b79b..15b508b80f 100644 --- a/SolastaUnfinishedBusiness/Models/Level20SubclassesContext.cs +++ b/SolastaUnfinishedBusiness/Models/Level20SubclassesContext.cs @@ -1991,7 +1991,7 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, { var usablePower = PowerProvider.Get(powerQuiveringPalmDamage, rulesetAttacker); - attacker.MyExecuteActionSpendPower(usablePower, target); + attacker.MyExecuteActionSpendPower(usablePower, false, target); yield break; } diff --git a/SolastaUnfinishedBusiness/Patches/CharacterActionShovePatcher.cs b/SolastaUnfinishedBusiness/Patches/CharacterActionShovePatcher.cs index c7d2f3fc16..0e2cf03ae1 100644 --- a/SolastaUnfinishedBusiness/Patches/CharacterActionShovePatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/CharacterActionShovePatcher.cs @@ -119,7 +119,7 @@ private static IEnumerator Execute(CharacterActionShove characterActionShove) rulesetCharacter.GetRemainingUsesOfPower(usablePower) > 0 && usablePower.PowerDefinition.ActivationTime == ActivationTime.OnSuccessfulShoveAuto) { - actingCharacter.MyExecuteActionSpendPower(usablePower, target); + actingCharacter.MyExecuteActionSpendPower(usablePower, true, target); } } } diff --git a/SolastaUnfinishedBusiness/Races/Malakh.cs b/SolastaUnfinishedBusiness/Races/Malakh.cs index 9a0c6cc143..9f1d09d1bf 100644 --- a/SolastaUnfinishedBusiness/Races/Malakh.cs +++ b/SolastaUnfinishedBusiness/Races/Malakh.cs @@ -330,7 +330,7 @@ public void OnCharacterBeforeTurnEnded(GameLocationCharacter locationCharacter) var usablePower = PowerProvider.Get(powerAngelicRadianceDamage, rulesetAttacker); var targets = Gui.Battle.GetContenders(locationCharacter, withinRange: 3).ToArray(); - locationCharacter.MyExecuteActionSpendPower(usablePower, targets); + locationCharacter.MyExecuteActionSpendPower(usablePower, false, targets); } } } diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs index 3b06333a35..6c2fbe2136 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs @@ -910,7 +910,7 @@ public IEnumerator OnActionFinishedByMe(CharacterAction action) var attacker = GameLocationCharacter.GetFromActor(rulesetAttacker); var usablePower = PowerProvider.Get(powerBoomingBladeDamage, rulesetAttacker); - attacker.MyExecuteActionSpendPower(usablePower, defender); + attacker.MyExecuteActionSpendPower(usablePower, false, defender); } } @@ -1115,7 +1115,7 @@ rollOutcome is not (RollOutcome.Success or RollOutcome.CriticalSuccess)) var usablePower = PowerProvider.Get(powerResonatingStrikeDamage, rulesetAttacker); - attacker.MyExecuteActionSpendPower(usablePower, secondDefender); + attacker.MyExecuteActionSpendPower(usablePower, false, secondDefender); } } diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel03.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel03.cs index 6f259d506b..0fd18eba49 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel03.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel03.cs @@ -1228,7 +1228,7 @@ public void OnCharacterTurnStarted(GameLocationCharacter character) var caster = GameLocationCharacter.GetFromActor(rulesetCaster); var usablePower = PowerProvider.Get(powerHungerOfTheVoidDamageCold, rulesetCaster); - caster.MyExecuteActionSpendPower(usablePower, character); + caster.MyExecuteActionSpendPower(usablePower, false, character); } } diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel04.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel04.cs index db2c238796..6d7e895a6c 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel04.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel04.cs @@ -828,7 +828,7 @@ public void OnConditionRemoved(RulesetCharacter rulesetCharacter, RulesetConditi var character = GameLocationCharacter.GetFromActor(rulesetCharacter); var usablePower = PowerProvider.Get(power, rulesetCaster); - caster.MyExecuteActionSpendPower(usablePower, character); + caster.MyExecuteActionSpendPower(usablePower, false, character); } } @@ -1289,7 +1289,7 @@ private void DamageReceivedHandler( var usablePower = PowerProvider.Get(powerElementalBane, rulesetAttacker); - attacker.MyExecuteActionSpendPower(usablePower, defender); + attacker.MyExecuteActionSpendPower(usablePower, false, defender); } } diff --git a/SolastaUnfinishedBusiness/Subclasses/Builders/InvocationsBuilders.cs b/SolastaUnfinishedBusiness/Subclasses/Builders/InvocationsBuilders.cs index 1169de0d38..e6ca471bad 100644 --- a/SolastaUnfinishedBusiness/Subclasses/Builders/InvocationsBuilders.cs +++ b/SolastaUnfinishedBusiness/Subclasses/Builders/InvocationsBuilders.cs @@ -846,7 +846,7 @@ public void OnCharacterTurnStarted(GameLocationCharacter character) var caster = GameLocationCharacter.GetFromActor(rulesetCaster); var usablePower = PowerProvider.Get(powerPerniciousCloakDamage, rulesetCaster); - caster.MyExecuteActionSpendPower(usablePower, character); + caster.MyExecuteActionSpendPower(usablePower, false, character); } } @@ -1150,7 +1150,7 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, var usablePower = PowerProvider.Get(powerChillingHexDamage, rulesetAttacker); var targets = Gui.Battle.GetContenders(defender, isOppositeSide: false, withinRange: 1).ToArray(); - attacker.MyExecuteActionSpendPower(usablePower, targets); + attacker.MyExecuteActionSpendPower(usablePower, false, targets); } } diff --git a/SolastaUnfinishedBusiness/Subclasses/CircleOfTheForestGuardian.cs b/SolastaUnfinishedBusiness/Subclasses/CircleOfTheForestGuardian.cs index 8ce47e5a27..706ff35524 100644 --- a/SolastaUnfinishedBusiness/Subclasses/CircleOfTheForestGuardian.cs +++ b/SolastaUnfinishedBusiness/Subclasses/CircleOfTheForestGuardian.cs @@ -237,7 +237,7 @@ action.AttackRollOutcome is not (RollOutcome.Success or RollOutcome.CriticalSucc var usablePower = PowerProvider.Get(powerImprovedBarkWardDamage, rulesetDefender); - defender.MyExecuteActionSpendPower(usablePower, attacker); + defender.MyExecuteActionSpendPower(usablePower, false, attacker); } } } diff --git a/SolastaUnfinishedBusiness/Subclasses/CircleOfTheWildfire.cs b/SolastaUnfinishedBusiness/Subclasses/CircleOfTheWildfire.cs index 308ce5ee41..b282cc398d 100644 --- a/SolastaUnfinishedBusiness/Subclasses/CircleOfTheWildfire.cs +++ b/SolastaUnfinishedBusiness/Subclasses/CircleOfTheWildfire.cs @@ -541,7 +541,7 @@ void ReactionValidated() : PowerCauterizingFlamesHeal, rulesetSource); - source.MyExecuteActionSpendPower(usablePower, character); + source.MyExecuteActionSpendPower(usablePower, false, character); } } } diff --git a/SolastaUnfinishedBusiness/Subclasses/CollegeOfAudacity.cs b/SolastaUnfinishedBusiness/Subclasses/CollegeOfAudacity.cs index 91e47b8779..8dd8c3472c 100644 --- a/SolastaUnfinishedBusiness/Subclasses/CollegeOfAudacity.cs +++ b/SolastaUnfinishedBusiness/Subclasses/CollegeOfAudacity.cs @@ -291,7 +291,7 @@ public IEnumerator OnMagicEffectBeforeHitConfirmedOnEnemy( var usablePower = PowerProvider.Get(powerSlashingWhirlDamage, rulesetAttacker); var targets = Gui.Battle.GetContenders(attacker, withinRange: 1).Where(x => x != defender).ToArray(); - attacker.MyExecuteActionSpendPower(usablePower, targets); + attacker.MyExecuteActionSpendPower(usablePower, false, targets); } public bool IsValid(BaseDefinition definition, RulesetCharacter character, EffectDescription effectDescription) diff --git a/SolastaUnfinishedBusiness/Subclasses/InnovationVitriolist.cs b/SolastaUnfinishedBusiness/Subclasses/InnovationVitriolist.cs index fcfe728410..428f556b80 100644 --- a/SolastaUnfinishedBusiness/Subclasses/InnovationVitriolist.cs +++ b/SolastaUnfinishedBusiness/Subclasses/InnovationVitriolist.cs @@ -615,7 +615,7 @@ private void InflictDamage(GameLocationCharacter attacker, List 10; diff --git a/SolastaUnfinishedBusiness/Subclasses/WayOfTheWealAndWoe.cs b/SolastaUnfinishedBusiness/Subclasses/WayOfTheWealAndWoe.cs index a45950a419..9449c9be89 100644 --- a/SolastaUnfinishedBusiness/Subclasses/WayOfTheWealAndWoe.cs +++ b/SolastaUnfinishedBusiness/Subclasses/WayOfTheWealAndWoe.cs @@ -274,7 +274,7 @@ private static void InflictMartialArtDieDamage( var rulesetAttacker = attacker.RulesetCharacter; var usablePower = PowerProvider.Get(power, rulesetAttacker); - attacker.MyExecuteActionSpendPower(usablePower, defender); + attacker.MyExecuteActionSpendPower(usablePower, false, defender); } } diff --git a/SolastaUnfinishedBusiness/Subclasses/WizardWarMagic.cs b/SolastaUnfinishedBusiness/Subclasses/WizardWarMagic.cs index b6f3b754ab..32b889076a 100644 --- a/SolastaUnfinishedBusiness/Subclasses/WizardWarMagic.cs +++ b/SolastaUnfinishedBusiness/Subclasses/WizardWarMagic.cs @@ -322,7 +322,7 @@ private void HandleDeflectionShroud(GameLocationCharacter helper) .Take(3) .ToArray(); - helper.MyExecuteActionSpendPower(usablePower, targets); + helper.MyExecuteActionSpendPower(usablePower, false, targets); } } From fbbb0b65621df53be8789a2fa3162d64bfc727ea Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Wed, 4 Sep 2024 20:31:31 -0700 Subject: [PATCH 039/212] improve Victory Modal export behavior to allow heroes not in pool to be exported - fix #4915 --- .../Patches/HeroStatsColumnPatcher.cs | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 SolastaUnfinishedBusiness/Patches/HeroStatsColumnPatcher.cs diff --git a/SolastaUnfinishedBusiness/Patches/HeroStatsColumnPatcher.cs b/SolastaUnfinishedBusiness/Patches/HeroStatsColumnPatcher.cs new file mode 100644 index 0000000000..7479d1f03f --- /dev/null +++ b/SolastaUnfinishedBusiness/Patches/HeroStatsColumnPatcher.cs @@ -0,0 +1,32 @@ +using System.Diagnostics.CodeAnalysis; +using HarmonyLib; +using JetBrains.Annotations; +using UnityEngine; + +namespace SolastaUnfinishedBusiness.Patches; + +[UsedImplicitly] +public static class HeroStatsColumnPatcher +{ + [HarmonyPatch(typeof(HeroStatsColumn), nameof(HeroStatsColumn.Bind))] + [SuppressMessage("Minor Code Smell", "S101:Types should be named in PascalCase", Justification = "Patch")] + [UsedImplicitly] + public static class Bind_Patch + { + //PATCH: allow heroes not in pool (RESPEC ed) to be exported + [UsedImplicitly] + public static void Postfix(HeroStatsColumn __instance, RectTransform tooltipAnchor) + { + if (__instance.BuiltIn || + __instance.updateFileButton.interactable) + { + return; + } + + __instance.updateFileButton.gameObject.SetActive(true); + __instance.updateFileButtonTooltip.Anchor = tooltipAnchor; + __instance.updateFileButtonTooltip.AnchorMode = TooltipDefinitions.AnchorMode.LEFT_FREE; + __instance.updateFileButton.interactable = true; + } + } +} From e8eaafcf06d16b8640a57df65371cb6bb30acb71 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Wed, 4 Sep 2024 20:50:16 -0700 Subject: [PATCH 040/212] add Interface > Game UI > 'Enable CTRL click-drag to bypass quest items checks on drop' setting --- .../ChangelogHistory.txt | 2 ++ .../Displays/GameUiDisplay.cs | 20 +++++++++------ .../Patches/InventoryPanelPatcher.cs | 25 +++++++++++++++++++ SolastaUnfinishedBusiness/Settings.cs | 1 + .../Translations/de/Settings-de.txt | 3 ++- .../Translations/en/Settings-en.txt | 3 ++- .../Translations/es/Settings-es.txt | 3 ++- .../Translations/fr/Settings-fr.txt | 3 ++- .../Translations/it/Settings-it.txt | 3 ++- .../Translations/ja/Settings-ja.txt | 3 ++- .../Translations/ko/Settings-ko.txt | 3 ++- .../Translations/pt-BR/Settings-pt-BR.txt | 3 ++- .../Translations/ru/Settings-ru.txt | 3 ++- .../Translations/zh-CN/Settings-zh-CN.txt | 3 ++- 14 files changed, 61 insertions(+), 17 deletions(-) diff --git a/SolastaUnfinishedBusiness/ChangelogHistory.txt b/SolastaUnfinishedBusiness/ChangelogHistory.txt index ca2c39a917..d7e8ed79cd 100644 --- a/SolastaUnfinishedBusiness/ChangelogHistory.txt +++ b/SolastaUnfinishedBusiness/ChangelogHistory.txt @@ -1,6 +1,7 @@ 1.5.97.30: - added Command [Bard, Cleric, Paladin], and Dissonant Whispers [Bard] spells +- added Interface > Game UI > 'Enable CTRL click-drag to bypass quest items checks on drop' setting - fixed Barbarian Sundering Blow interaction with Call Lightning, and other proxy like powers - fixed Bend Luck, Flash of Genius, Inspiring Protection, Shield Master, and Weal/Woe not consuming reaction - fixed Dwarven Fortitude, and Magical Guidance incorrectly consuming a reaction @@ -15,6 +16,7 @@ - improved saving roll reaction modal descriptions [Circle of the Cosmos, Sorcerer Wild Magic, etc.] - improved Sorcerer Wild Magic tides of chaos to react on ability checks - improved vanilla to allow reactions on gadget's saving roll [traps] +- improved Victory Modal export behavior to allow heroes not in pool to be exported [VANILLA] 1.5.97.29: diff --git a/SolastaUnfinishedBusiness/Displays/GameUiDisplay.cs b/SolastaUnfinishedBusiness/Displays/GameUiDisplay.cs index c1558bea39..8a7b73ede0 100644 --- a/SolastaUnfinishedBusiness/Displays/GameUiDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/GameUiDisplay.cs @@ -365,13 +365,6 @@ internal static void DisplayGameUi() UI.Label(); - toggle = Main.Settings.EnableInvisibleCrownOfTheMagister; - if (UI.Toggle(Gui.Localize("ModUi/&EnableInvisibleCrownOfTheMagister"), ref toggle, UI.AutoWidth())) - { - Main.Settings.EnableInvisibleCrownOfTheMagister = toggle; - GameUiContext.SwitchCrownOfTheMagister(); - } - toggle = Main.Settings.DontDisplayHelmets; if (UI.Toggle(Gui.Localize("ModUi/&DontDisplayHelmets"), ref toggle, UI.AutoWidth())) { @@ -379,6 +372,19 @@ internal static void DisplayGameUi() ItemCraftingMerchantContext.SwitchSetBeltOfDwarvenKindBeardChances(); } + toggle = Main.Settings.DontDisplayHelmets; + if (UI.Toggle(Gui.Localize("ModUi/&EnableCtrlClickDragToBypassQuestItemsOnDrop"), ref toggle, UI.AutoWidth())) + { + Main.Settings.EnableCtrlClickDragToBypassQuestItemsOnDrop = toggle; + } + + toggle = Main.Settings.EnableInvisibleCrownOfTheMagister; + if (UI.Toggle(Gui.Localize("ModUi/&EnableInvisibleCrownOfTheMagister"), ref toggle, UI.AutoWidth())) + { + Main.Settings.EnableInvisibleCrownOfTheMagister = toggle; + GameUiContext.SwitchCrownOfTheMagister(); + } + UI.Label(); toggle = Main.Settings.ShowCraftingRecipeInDetailedTooltips; diff --git a/SolastaUnfinishedBusiness/Patches/InventoryPanelPatcher.cs b/SolastaUnfinishedBusiness/Patches/InventoryPanelPatcher.cs index 822ceb7aba..e6bfb526de 100644 --- a/SolastaUnfinishedBusiness/Patches/InventoryPanelPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/InventoryPanelPatcher.cs @@ -3,6 +3,7 @@ using JetBrains.Annotations; using SolastaUnfinishedBusiness.Behaviors; using SolastaUnfinishedBusiness.Models; +using UnityEngine; namespace SolastaUnfinishedBusiness.Patches; @@ -72,4 +73,28 @@ public static void Postfix(InventoryPanel __instance) CustomItemFilter.FilterItems(__instance); } } + + //PATCH: enable CTRL click-drag to bypass quest items checks on drop + [HarmonyPatch(typeof(InventoryPanel), nameof(InventoryPanel.EndInteraction))] + [SuppressMessage("Minor Code Smell", "S101:Types should be named in PascalCase", Justification = "Patch")] + [UsedImplicitly] + public static class EndInteraction_Patch + { + [UsedImplicitly] + public static void Prefix(InventoryPanel __instance, out bool __state) + { + __state = Main.Settings.EnableCtrlClickDragToBypassQuestItemsOnDrop && + (Input.GetKey(KeyCode.LeftControl) || Input.GetKey(KeyCode.RightControl)) && + __instance.DraggedItem.ItemDefinition.ItemTags.Remove(TagsDefinitions.ItemTagQuest); + } + + [UsedImplicitly] + public static void Postfix(InventoryPanel __instance, bool __state) + { + if (__state) + { + __instance.DraggedItem.ItemDefinition.ItemTags.Add(TagsDefinitions.ItemTagQuest); + } + } + } } diff --git a/SolastaUnfinishedBusiness/Settings.cs b/SolastaUnfinishedBusiness/Settings.cs index e12f91429e..c0b1ac4cab 100644 --- a/SolastaUnfinishedBusiness/Settings.cs +++ b/SolastaUnfinishedBusiness/Settings.cs @@ -461,6 +461,7 @@ public class Settings : UnityModManager.ModSettings // Inventory and Items public bool AddCustomIconsToOfficialItems { get; set; } public bool DisableAutoEquip { get; set; } + public bool EnableCtrlClickDragToBypassQuestItemsOnDrop { get; set; } public bool EnableInventoryFilteringAndSorting { get; set; } public bool EnableInventoryTaintNonProficientItemsRed { get; set; } public bool EnableInventoryTintKnownRecipesRed { get; set; } diff --git a/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt b/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt index 0f87e4fd0a..7ce5c5d754 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt @@ -89,7 +89,7 @@ ModUi/&DocsSubclasses=Unterklassen ModUi/&DocsSubraces=Subraces ModUi/&DocsVersatilities=Vielseitigkeit ModUi/&Donate=Spenden: {0} -ModUi/&DontDisplayHelmets=Helme nicht auf grafischen Charakteren anzeigen [Neustart erforderlich] +ModUi/&DontDisplayHelmets=Keine Helme auf Grafikcharakteren anzeigen [Neustart erforderlich] ModUi/&DontEndTurnAfterReady=Beenden Sie den Zug nicht nach der Verwendung von Bereitschaftsaktion [ermöglicht die Verwendung von Bonusaktionen oder zusätzlichen Hauptaktionen aus Eile oder anderen Quellen] ModUi/&DontFollowCharacterInBattle=Die Kampfkamera folgt nicht, wenn der Charakter bereits auf dem Bildschirm ist ModUi/&DontFollowMargin=+ Es sei denn, der Held ist ausgeschaltet oder innerhalb von % des Bildschirmrands @@ -234,6 +234,7 @@ ModUi/&MarkInvisibleTeleportersOnLevelMap=+ Markieren Sie nach der Entdeckung ModUi/&MaxAllowedClasses=Maximal zulässige Klassen ModUi/&Merchants=Händler: ModUi/&Metamagic=Metamagie +ModUi/&ModUi/&EnableCtrlClickDragToBypassQuestItemsOnDrop=Aktivieren Sie STRG Klicken-Ziehen, um die Überprüfung auf Questgegenstände beim Ablegen zu umgehen. ModUi/&Monsters=Monster: ModUi/&MovementGridWidthModifier=Multiplizieren Sie die Breite des Bewegungsrasters mit [%] ModUi/&MulticlassKeyHelp=UMSCHALT-Klick auf einen Zauber kehrt den verbrauchten Standardrepertoire-Slottyp um.\n[Hexenmeister gibt weiße Zauberslots aus und andere geben Paktgrüne aus] diff --git a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt index fe7aa9547d..3a344ac1ed 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt @@ -89,7 +89,7 @@ ModUi/&DocsSubclasses=Subclasses ModUi/&DocsSubraces=Subraces ModUi/&DocsVersatilities=Versatilities ModUi/&Donate=Donate: {0} -ModUi/&DontDisplayHelmets=Don't display helmets on graphic characters [Requires Restart] +ModUi/&DontDisplayHelmets=Don't display helmets on graphic characters [Requires Restart] ModUi/&DontEndTurnAfterReady=Don't end turn after using Ready Action [allows to use Bonus Action or any extra Main actions from Haste or other sources] ModUi/&DontFollowCharacterInBattle=Battle camera doesn't follow when character is already on screen ModUi/&DontFollowMargin=+ Unless hero is off or within % of screen edge @@ -341,3 +341,4 @@ ModUi/&UseOfficialObscurementRulesHelp=[attacker who perceive ModUi/&UseOfficialSmallRacesDisWithHeavyWeapons=Use official small races rules when wielding heavy weapons [your attacks have disadvantage] ModUi/&Visuals=Visuals: [Requires Restart] ModUi/&WildSurgeDieRollThreshold=Set Sorcerer Wild Magic chance die threshold:\n[wild surge triggers if rolls less or equal threshold] +ModUi/&ModUi/&EnableCtrlClickDragToBypassQuestItemsOnDrop=Enable CTRL click-drag to bypass quest items checks on drop diff --git a/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt b/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt index 3a168c438b..e601f4194a 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt @@ -89,7 +89,7 @@ ModUi/&DocsSubclasses=Subclases ModUi/&DocsSubraces=Subrazas ModUi/&DocsVersatilities=Versatilidades ModUi/&Donate=Donar: {0} -ModUi/&DontDisplayHelmets=No mostrar cascos en caracteres gráficos [Requiere reinicio] +ModUi/&DontDisplayHelmets=No mostrar cascos en personajes gráficos [Requiere reinicio] ModUi/&DontEndTurnAfterReady=No finalice el turno después de usar Acción lista [permite usar Acción adicional o cualquier acción principal adicional de Prisa u otras fuentes] ModUi/&DontFollowCharacterInBattle=La cámara de batalla no sigue cuando el personaje ya está en la pantalla ModUi/&DontFollowMargin=+ A menos que el héroe esté fuera o dentro del % del borde de la pantalla @@ -234,6 +234,7 @@ ModUi/&MarkInvisibleTeleportersOnLevelMap=+ También marca la ubicación de l ModUi/&MaxAllowedClasses=Clases máximas permitidas ModUi/&Merchants=Comerciantes: ModUi/&Metamagic=Metamagia +ModUi/&ModUi/&EnableCtrlClickDragToBypassQuestItemsOnDrop=Habilite la función CTRL de clic y arrastre para omitir las comprobaciones de objetos de misión al soltarlos ModUi/&Monsters=Monstruos: ModUi/&MovementGridWidthModifier=Multiplica el ancho de la cuadrícula de movimiento por [%] ModUi/&MulticlassKeyHelp=SHIFT hace clic en un hechizo para invertir el tipo de espacio de repertorio predeterminado consumido\n[Brujo gasta espacios de hechizo blancos y otros gastan los verdes de pacto] diff --git a/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt index a1da694555..35dc370ebf 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt @@ -89,7 +89,7 @@ ModUi/&DocsSubclasses=Sous-classes ModUi/&DocsSubraces=Sous-races ModUi/&DocsVersatilities=Polyvalences ModUi/&Donate=Faire un don : {0} -ModUi/&DontDisplayHelmets=Ne pas afficher les casques sur les personnages graphiques [Nécessite un redémarrage] +ModUi/&DontDisplayHelmets=Ne pas afficher les casques sur les personnages graphiques [Nécessite un redémarrage] ModUi/&DontEndTurnAfterReady=Ne terminez pas le tour après avoir utilisé Action Prête [permet d'utiliser une Action Bonus ou toute action Principale supplémentaire à partir de la Hâte ou d'autres sources] ModUi/&DontFollowCharacterInBattle=La caméra de combat ne suit pas lorsque le personnage est déjà à l'écran ModUi/&DontFollowMargin=+ Sauf si le héros est éteint ou à % du bord de l'écran @@ -234,6 +234,7 @@ ModUi/&MarkInvisibleTeleportersOnLevelMap=+ Marquez également l'emplacement ModUi/&MaxAllowedClasses=Classes maximales autorisées ModUi/&Merchants=Marchands : ModUi/&Metamagic=Métamagie +ModUi/&ModUi/&EnableCtrlClickDragToBypassQuestItemsOnDrop=Activez le clic-glisser CTRL pour contourner les vérifications des objets de quête lors de la chute ModUi/&Monsters=Monstres : ModUi/&MovementGridWidthModifier=Multipliez la largeur de la grille de mouvement par [%] ModUi/&MulticlassKeyHelp=SHIFT cliquez sur un sort pour inverser le type d'emplacement de répertoire par défaut consommé\n[Warlock dépense des emplacements de sorts blancs et d'autres dépensent des verts du pacte] diff --git a/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt b/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt index 2d55213db2..14370c2de6 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt @@ -89,7 +89,7 @@ ModUi/&DocsSubclasses=Sottoclassi ModUi/&DocsSubraces=Sottorazze ModUi/&DocsVersatilities=Versatilità ModUi/&Donate=Dona: {0} -ModUi/&DontDisplayHelmets=Non visualizzare i caschi sui caratteri grafici [Richiede il riavvio] +ModUi/&DontDisplayHelmets=Non visualizzare caschi sui personaggi grafici [Richiede riavvio] ModUi/&DontEndTurnAfterReady=Non terminare il turno dopo aver utilizzato Azione pronta [consente di utilizzare Azione bonus o qualsiasi azione principale extra da Rapidità o altre fonti]< /i> ModUi/&DontFollowCharacterInBattle=La telecamera di battaglia non segue quando il personaggio è già sullo schermo ModUi/&DontFollowMargin=+ A meno che l'eroe non sia spento o si trovi entro la % del bordo dello schermo @@ -234,6 +234,7 @@ ModUi/&MarkInvisibleTeleportersOnLevelMap=+ Contrassegna anche la posizione d ModUi/&MaxAllowedClasses=Classi massime consentite ModUi/&Merchants=Commercianti: ModUi/&Metamagic=Metamagia +ModUi/&ModUi/&EnableCtrlClickDragToBypassQuestItemsOnDrop=Abilita CTRL clic-trascinamento per ignorare i controlli oggetti missione al momento del rilascio ModUi/&Monsters=Mostri: ModUi/&MovementGridWidthModifier=Moltiplica la larghezza della griglia di movimento per [%] ModUi/&MulticlassKeyHelp=MAIUSC fare clic su un incantesimo inverte il tipo di slot di repertorio predefinito consumato\n[Stregone spende slot incantesimo bianchi e altri spendono quelli verdi del patto] diff --git a/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt index 4987cec92c..caba6463f2 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt @@ -89,7 +89,7 @@ ModUi/&DocsSubclasses=サブクラス ModUi/&DocsSubraces=サブレース ModUi/&DocsVersatilities=多用途性 ModUi/&Donate=寄付: {0} -ModUi/&DontDisplayHelmets=グラフィック キャラクターにヘルメットを表示しない[再起動が必要] +ModUi/&DontDisplayHelmets=グラフィック キャラクターに ヘルメット を表示しない [再起動が必要] ModUi/&DontEndTurnAfterReady=準備アクションを使用した後にターンを終了しない [ボーナスアクションまたはヘイストやその他のソースからの追加のメインアクションの使用を許可する] ModUi/&DontFollowCharacterInBattle=キャラクターがすでに画面上にある場合、戦闘カメラが追従しない ModUi/&DontFollowMargin=+ ヒーローがオフまたは画面端の % 以内でない場合 @@ -234,6 +234,7 @@ ModUi/&MarkInvisibleTeleportersOnLevelMap=+ 発見後にレベルマップ上 ModUi/&MaxAllowedClasses=許可されるクラスの最大数 ModUi/&Merchants=販売者: ModUi/&Metamagic=メタマジック +ModUi/&ModUi/&EnableCtrlClickDragToBypassQuestItemsOnDrop=CTRL クリックドラッグを有効にすると、ドロップ時の クエストアイテム チェックをバイパスできます ModUi/&Monsters=モンスター: ModUi/&MovementGridWidthModifier=移動グリッドの幅を乗算します [%] ModUi/&MulticlassKeyHelp=SHIFT で呪文をクリックすると、消費されるデフォルトのレパートリー スロット タイプが反転します\n[ウォーロックは白い呪文スロットを消費します他の人は協定の緑のものを使います] diff --git a/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt index b07ed20605..c19a28b9aa 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt @@ -89,7 +89,7 @@ ModUi/&DocsSubclasses=서브클래스 ModUi/&DocsSubraces=하위 경주 ModUi/&DocsVersatilities=다양성 ModUi/&Donate=기부: {0} -ModUi/&DontDisplayHelmets=그래픽 문자에 헬멧을 표시하지 마세요. [다시 시작해야 함] +ModUi/&DontDisplayHelmets=그래픽 캐릭터에 헬멧을 표시하지 마세요 [재시작 필요] ModUi/&DontEndTurnAfterReady=준비 행동을 사용한 후에 턴을 끝내지 마세요 [서둘러서 또는 다른 출처에서 보너스 행동이나 추가 주요 행동을 사용할 수 있음] ModUi/&DontFollowCharacterInBattle=캐릭터가 이미 화면에 있으면 전투 카메라가 따라오지 않습니다. ModUi/&DontFollowMargin=+ 영웅이 꺼져 있거나 화면 가장자리의 % 내에 있지 않은 경우 @@ -234,6 +234,7 @@ ModUi/&MarkInvisibleTeleportersOnLevelMap=+ 발견 후 레벨 지도에 보 ModUi/&MaxAllowedClasses=최대 허용 수업 ModUi/&Merchants=상점: ModUi/&Metamagic=메타매직 +ModUi/&ModUi/&EnableCtrlClickDragToBypassQuestItemsOnDrop=CTRL 클릭-드래그를 활성화하여 드롭 시 퀘스트 아이템 검사를 무시합니다. ModUi/&Monsters=괴물: ModUi/&MovementGridWidthModifier=이동 그리드 너비에 [%]를 곱합니다. ModUi/&MulticlassKeyHelp=주문을 SHIFT 클릭하면 소비되는 기본 레퍼토리 슬롯 유형이 반전됩니다.\n[워록은 흰색 주문 슬롯을 소비합니다. 다른 사람들은 녹색 계약을 사용합니다.] diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt index 5a525e364f..4449e68d40 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt @@ -89,7 +89,7 @@ ModUi/&DocsSubclasses=Subclasses ModUi/&DocsSubraces=Sub-raças ModUi/&DocsVersatilities=Versatilidades ModUi/&Donate=Doe: {0} -ModUi/&DontDisplayHelmets=Não exiba capacetes em caracteres gráficos [Requer reinicialização] +ModUi/&DontDisplayHelmets=Não exibir capacetes em personagens gráficos [Requer reinicialização] ModUi/&DontEndTurnAfterReady=Não termine o turno após usar Ação Pronta [permite usar Ação Bônus ou quaisquer ações Principais extras de Aceleração ou outras fontes] ModUi/&DontFollowCharacterInBattle=A câmera de batalha não segue quando o personagem já está na tela ModUi/&DontFollowMargin=+ A menos que o herói esteja desligado ou dentro de % da borda da tela @@ -234,6 +234,7 @@ ModUi/&MarkInvisibleTeleportersOnLevelMap=+ Marque também a localização do ModUi/&MaxAllowedClasses=Máximo de classes permitidas ModUi/&Merchants=Comerciantes: ModUi/&Metamagic=Metamágica +ModUi/&ModUi/&EnableCtrlClickDragToBypassQuestItemsOnDrop=Habilitar CTRL clicar e arrastar para ignorar as verificações de itens de missão ao soltar ModUi/&Monsters=Monstros: ModUi/&MovementGridWidthModifier=Multiplique a largura da grade de movimento por [%] ModUi/&MulticlassKeyHelp=SHIFT clicar em um feitiço inverte o tipo de slot de repertório padrão consumido\n[Warlock gasta slots de feitiço branco e outros gastam os verdes do pacto] diff --git a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt index 2d28dced49..8031f207cd 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt @@ -89,7 +89,7 @@ ModUi/&DocsSubclasses=Архетипы ModUi/&DocsSubraces=Разновидности ModUi/&DocsVersatilities=Универсалии ModUi/&Donate=Задонатить: {0} -ModUi/&DontDisplayHelmets=Скрывать шлемы на персонажах [Необходим перезапуск] +ModUi/&DontDisplayHelmets=Не отображать шлемы на графических персонажах [Требуется перезапуск] ModUi/&DontEndTurnAfterReady=Не заканчивать ход после использования действия Подготовка [позволяет использовать Бонусное действие или любые дополнительные основные действия от Ускорения или других источников] ModUi/&DontFollowCharacterInBattle=Боевая камера не следует за персонажем, если он уже на экране ModUi/&DontFollowMargin=+ Только если герой вне или в рамках % от границы экрана @@ -234,6 +234,7 @@ ModUi/&MarkInvisibleTeleportersOnLevelMap=+ Также помечать ме ModUi/&MaxAllowedClasses=Максимальное разрешённое количество классов ModUi/&Merchants=Торговцы: ModUi/&Metamagic=Метамагия +ModUi/&ModUi/&EnableCtrlClickDragToBypassQuestItemsOnDrop=Включите CTRL щелчок-перетаскивание, чтобы обойти проверки предметов задания при выпадении ModUi/&Monsters=Монстры: ModUi/&MovementGridWidthModifier=Увеличить ширину сетки передвижения на множитель [%] ModUi/&MulticlassKeyHelp=Нажатие с SHIFT по заклинанию переключает тип затрачиваемой ячейки по умолчанию\n[Колдун тратит белые ячейки заклинаний, а остальные - зелёные ячейки колдуна] diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt index 3667bc9ddc..9d9c03adb1 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt @@ -89,7 +89,7 @@ ModUi/&DocsSubclasses=文档:子职 ModUi/&DocsSubraces=文档:亚种 ModUi/&DocsVersatilities=多功能性 ModUi/&Donate=捐赠: {0} -ModUi/&DontDisplayHelmets=不在角色图像上显示头盔[需要重启] +ModUi/&DontDisplayHelmets=不要在图形角色上显示头盔[需要重启] ModUi/&DontEndTurnAfterReady=使用准备行动后不要结束回合[允许使用奖励行动或任何来自加速或其他来源的额外主要行动] ModUi/&DontFollowCharacterInBattle=当角色已经出现在屏幕上时,战斗镜头不会跟随 ModUi/&DontFollowMargin=+除非英雄不在屏幕内或在屏幕边缘的%范围内 @@ -234,6 +234,7 @@ ModUi/&MarkInvisibleTeleportersOnLevelMap=+发现后在关卡地图上标记 ModUi/&MaxAllowedClasses=最大允许职业 ModUi/&Merchants=商家: ModUi/&Metamagic=超魔 +ModUi/&ModUi/&EnableCtrlClickDragToBypassQuestItemsOnDrop=启用 CTRL 单击拖动以绕过任务物品 的丢弃检查 ModUi/&Monsters=怪物: ModUi/&MovementGridWidthModifier=将移动格子宽度乘以 [%] ModUi/&MulticlassKeyHelp=SHIFT点击法术会反转消耗的默认曲目槽类型\n[术士消耗白色法术位,其他职业消耗绿色的] From 7c28937730e036130ef088d824ecc99d97cdcd83 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Wed, 4 Sep 2024 21:57:42 -0700 Subject: [PATCH 041/212] fix save by location/campaign setting on multiplayer load --- .../TacticalAdventuresApplicationPatcher.cs | 62 ++++++++++++------- 1 file changed, 40 insertions(+), 22 deletions(-) diff --git a/SolastaUnfinishedBusiness/Patches/TacticalAdventuresApplicationPatcher.cs b/SolastaUnfinishedBusiness/Patches/TacticalAdventuresApplicationPatcher.cs index f41e873f40..951edcdbd0 100644 --- a/SolastaUnfinishedBusiness/Patches/TacticalAdventuresApplicationPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/TacticalAdventuresApplicationPatcher.cs @@ -8,6 +8,32 @@ namespace SolastaUnfinishedBusiness.Patches; [UsedImplicitly] public static class TacticalAdventuresApplicationPatcher { + private static bool EnableSaveByLocation(ref string __result) + { + //PATCH: EnableSaveByLocation + if (!Main.Settings.EnableSaveByLocation) + { + return true; + } + + // Modify the value returned by TacticalAdventuresApplication.SaveGameDirectory so that saves + // end up where we want them (by location/campaign) + var selectedCampaignService = ServiceRepository.GetService(); + + // handle exception when saving from world map or encounters on a user campaign + if (Gui.GameCampaign?.campaignDefinition?.IsUserCampaign == true && + selectedCampaignService is { LocationType: LocationType.StandardCampaign }) + { + (__result, _) = GetMostRecent(); + + return false; + } + + __result = selectedCampaignService?.SaveGameDirectory ?? DefaultSaveGameDirectory; + + return false; + } + [HarmonyPatch(typeof(TacticalAdventuresApplication), nameof(TacticalAdventuresApplication.SaveGameDirectory), MethodType.Getter)] [SuppressMessage("Minor Code Smell", "S101:Types should be named in PascalCase", Justification = "Patch")] @@ -17,28 +43,20 @@ public static class SaveGameDirectory_Getter_Patch [UsedImplicitly] public static bool Prefix(ref string __result) { - //PATCH: EnableSaveByLocation - if (!Main.Settings.EnableSaveByLocation) - { - return true; - } - - // Modify the value returned by TacticalAdventuresApplication.SaveGameDirectory so that saves - // end up where we want them (by location/campaign) - var selectedCampaignService = ServiceRepository.GetService(); - - // handle exception when saving from world map or encounters on a user campaign - if (Gui.GameCampaign?.campaignDefinition?.IsUserCampaign == true && - selectedCampaignService is { LocationType: LocationType.StandardCampaign }) - { - (__result, _) = GetMostRecent(); - - return false; - } - - __result = selectedCampaignService?.SaveGameDirectory ?? DefaultSaveGameDirectory; - - return false; + return EnableSaveByLocation(ref __result); + } + } + + [HarmonyPatch(typeof(TacticalAdventuresApplication), nameof(TacticalAdventuresApplication.MultiplayerFilesDirectory), + MethodType.Getter)] + [SuppressMessage("Minor Code Smell", "S101:Types should be named in PascalCase", Justification = "Patch")] + [UsedImplicitly] + public static class MultiplayerFilesDirectory_Getter_Patch + { + [UsedImplicitly] + public static bool Prefix(ref string __result) + { + return EnableSaveByLocation(ref __result); } } } From 48487956e79a9ba608c4781d26dad3a7fb32ae61 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Wed, 4 Sep 2024 22:00:56 -0700 Subject: [PATCH 042/212] restrict command spell to humanoids only --- .../SpellDefinition/CommandSpell.json | 4 +++- SolastaUnfinishedBusiness/ChangelogHistory.txt | 3 ++- SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs | 1 + .../Translations/de/Spells/Spells01-de.txt | 2 +- SolastaUnfinishedBusiness/Translations/en/Settings-en.txt | 2 +- .../Translations/en/Spells/Spells01-en.txt | 2 +- .../Translations/es/Spells/Spells01-es.txt | 2 +- .../Translations/fr/Spells/Spells01-fr.txt | 2 +- .../Translations/it/Spells/Spells01-it.txt | 2 +- .../Translations/ja/Spells/Spells01-ja.txt | 2 +- .../Translations/ko/Spells/Spells01-ko.txt | 2 +- .../Translations/pt-BR/Spells/Spells01-pt-BR.txt | 2 +- .../Translations/ru/Spells/Spells01-ru.txt | 2 +- .../Translations/zh-CN/Spells/Spells01-zh-CN.txt | 2 +- 14 files changed, 17 insertions(+), 13 deletions(-) diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpell.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpell.json index b25fe5d203..4a78eea613 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpell.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpell.json @@ -65,7 +65,9 @@ "hasVelocity": false, "velocityCellsPerRound": 2, "velocityType": "AwayFromSourceOriginalPosition", - "restrictedCreatureFamilies": [], + "restrictedCreatureFamilies": [ + "Humanoid" + ], "immuneCreatureFamilies": [], "restrictedCharacterSizes": [], "hasLimitedEffectPool": false, diff --git a/SolastaUnfinishedBusiness/ChangelogHistory.txt b/SolastaUnfinishedBusiness/ChangelogHistory.txt index d7e8ed79cd..f3b02a49fc 100644 --- a/SolastaUnfinishedBusiness/ChangelogHistory.txt +++ b/SolastaUnfinishedBusiness/ChangelogHistory.txt @@ -7,7 +7,8 @@ - fixed Dwarven Fortitude, and Magical Guidance incorrectly consuming a reaction - fixed Lucky, and Mage Slayer feats double consumption - fixed Martial Commander coordinated defense to require an attack first [VANILLA] -- fixed Party Editor to register/unregister powers from feats +- fixed Party Editor to register/unregister powers from feats +- fixed save by location/campaign setting on multiplayer load - improved ability checks to also allow reactions on success [Circle of the Cosmos woe] - improved Conversion Slots, and Shorthand versatilities to react on ability checks - improved game log to avoid voxelization warning messages to flood the same [DM overlay trick] diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs index 5faeb6b12b..f09f7807ce 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs @@ -1416,6 +1416,7 @@ internal static SpellDefinition BuildCommand() additionalTargetsPerIncrement: 1) .SetSavingThrowData(false, AttributeDefinitions.Wisdom, true, EffectDifficultyClassComputation.SpellCastingFeature) + .SetRestrictedCreatureFamilies(CharacterFamilyDefinitions.Humanoid.Name) .SetEffectForms( EffectFormBuilder .Create() diff --git a/SolastaUnfinishedBusiness/Translations/de/Spells/Spells01-de.txt b/SolastaUnfinishedBusiness/Translations/de/Spells/Spells01-de.txt index 0b715f2529..4a8667970d 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Spells/Spells01-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Spells/Spells01-de.txt @@ -86,7 +86,7 @@ Spell/&ChaosBoltDescription=Führe einen Fernangriff mit Zauber gegen ein Ziel a Spell/&ChaosBoltTitle=Chaosblitz Spell/&ChromaticOrbDescription=Du schleuderst eine Energiekugel mit 4 Zoll Durchmesser auf eine Kreatur, die du in Reichweite sehen kannst. Du wählst Säure, Kälte, Feuer, Blitz, Gift oder Donner als Art der Kugel, die du erschaffst, und führst dann einen Fernkampf-Zauberangriff gegen das Ziel aus. Wenn der Angriff trifft, erleidet die Kreatur 3W8 Schaden der von dir gewählten Art. Spell/&ChromaticOrbTitle=Chromatische Kugel -Spell/&CommandSpellDescription=Sie sprechen einen einwortigen Befehl zu einer Kreatur in Reichweite, die Sie sehen können. Das Ziel muss einen Weisheitsrettungswurf bestehen oder dem Befehl in seinem nächsten Zug folgen. Der Zauber hat keine Wirkung, wenn das Ziel untot ist. Es gibt folgende Befehle:\n• Annäherung: Das Ziel bewegt sich auf dem kürzesten und direktesten Weg auf Sie zu und beendet seinen Zug, wenn es sich Ihnen näher als 1,52 m nähert.\n• Fliehen: Das Ziel verbringt seinen Zug damit, sich auf dem schnellsten verfügbaren Weg von Ihnen zu entfernen.\n• Kriechen: Das Ziel fällt hin und beendet dann seinen Zug.\n• Halt: Das Ziel bewegt sich nicht und unternimmt keine Aktionen.\nWenn Sie diesen Zauber mit einem Zauberplatz der 2. Stufe oder höher wirken, können Sie für jede Platzstufe über der 2. eine zusätzliche Kreatur in Reichweite als Ziel wählen. +Spell/&CommandSpellDescription=Du sprichst einen einwortigen Befehl zu einer Kreatur in Reichweite, die du sehen kannst. Das Ziel muss einen Weisheitsrettungswurf bestehen oder dem Befehl in seinem nächsten Zug folgen. Der Zauber wirkt nur auf Humanoide. Es gibt folgende Befehle:\n• Annäherung: Das Ziel bewegt sich auf dem kürzesten und direktesten Weg auf dich zu und beendet seinen Zug, wenn es sich dir näher als 1,52 m nähert.\n• Fliehen: Das Ziel verbringt seinen Zug damit, sich auf dem schnellsten verfügbaren Weg von dir zu entfernen.\n• Kriechen: Das Ziel fällt hin und beendet dann seinen Zug.\n• Halt: Das Ziel bewegt sich nicht und unternimmt keine Aktionen.\nWenn du diesen Zauber mit einem Zauberplatz der 2. Stufe oder höher wirkst, kannst du für jede Platzstufe über der 2. eine zusätzliche Kreatur in Reichweite als Ziel wählen. Spell/&CommandSpellTitle=Befehl Spell/&DissonantWhispersDescription=Du flüsterst eine dissonante Melodie, die nur eine Kreatur deiner Wahl in Reichweite hören kann, und quälst sie mit schrecklichen Schmerzen. Das Ziel muss einen Weisheitsrettungswurf machen. Bei einem misslungenen Rettungswurf erleidet es 3W6 psychischen Schaden und muss sofort seine Reaktion, falls möglich, nutzen, um sich so weit wie seine Geschwindigkeit es zulässt von dir wegzubewegen. Die Kreatur bewegt sich nicht auf offensichtlich gefährliches Gelände, wie etwa ein Feuer oder eine Grube. Bei einem erfolgreichen Rettungswurf erleidet das Ziel nur halb so viel Schaden und muss sich nicht wegbewegen. Wenn du diesen Zauber mit einem Zauberplatz der 2. Stufe oder höher wirkst, erhöht sich der Schaden um 1W6 für jede Stufe über der 1. Spell/&DissonantWhispersTitle=Dissonantes Flüstern diff --git a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt index 3a344ac1ed..ddb8a78404 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt @@ -234,6 +234,7 @@ ModUi/&MarkInvisibleTeleportersOnLevelMap=+ Also mark the location of invisib ModUi/&MaxAllowedClasses=Max allowed classes ModUi/&Merchants=Merchants: ModUi/&Metamagic=Metamagic +ModUi/&ModUi/&EnableCtrlClickDragToBypassQuestItemsOnDrop=Enable CTRL click-drag to bypass quest items checks on drop ModUi/&Monsters=Monsters: ModUi/&MovementGridWidthModifier=Multiply the movement grid width by [%] ModUi/&MulticlassKeyHelp=SHIFT click on a spell inverts the default repertoire slot type consumed\n[Warlock spends white spell slots and others spend pact green ones] @@ -341,4 +342,3 @@ ModUi/&UseOfficialObscurementRulesHelp=[attacker who perceive ModUi/&UseOfficialSmallRacesDisWithHeavyWeapons=Use official small races rules when wielding heavy weapons [your attacks have disadvantage] ModUi/&Visuals=Visuals: [Requires Restart] ModUi/&WildSurgeDieRollThreshold=Set Sorcerer Wild Magic chance die threshold:\n[wild surge triggers if rolls less or equal threshold] -ModUi/&ModUi/&EnableCtrlClickDragToBypassQuestItemsOnDrop=Enable CTRL click-drag to bypass quest items checks on drop diff --git a/SolastaUnfinishedBusiness/Translations/en/Spells/Spells01-en.txt b/SolastaUnfinishedBusiness/Translations/en/Spells/Spells01-en.txt index 56ef8d3e75..54b9ed713b 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Spells/Spells01-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Spells/Spells01-en.txt @@ -86,7 +86,7 @@ Spell/&ChaosBoltDescription=Make a ranged spell attack against a target. On a hi Spell/&ChaosBoltTitle=Chaos Bolt Spell/&ChromaticOrbDescription=You hurl a 4-inch-diameter sphere of energy at a creature that you can see within range. You choose acid, cold, fire, lightning, poison, or thunder for the type of orb you create, and then make a ranged spell attack against the target. If the attack hits, the creature takes 3d8 damage of the type you chose. Spell/&ChromaticOrbTitle=Chromatic Orb -Spell/&CommandSpellDescription=You speak a one-word command to a creature you can see within range. The target must succeed on a Wisdom saving throw or follow the command on its next turn. The spell has no effect if the target is undead. Commands follow:\n• Approach: The target moves toward you by the shortest and most direct route, ending its turn if it moves within 5 feet of you.\n• Flee: The target spends its turn moving away from you by the fastest available means.\n• Grovel: The target falls prone and then ends its turn.\n• Halt: The target doesn't move and takes no actions.\nWhen you cast this spell using a spell slot of 2nd level or higher, you may target an additional creature within range for each slot level above 2nd. +Spell/&CommandSpellDescription=You speak a one-word command to a creature you can see within range. The target must succeed on a Wisdom saving throw or follow the command on its next turn. The spell only has effect on humanoids. Commands follow:\n• Approach: The target moves toward you by the shortest and most direct route, ending its turn if it moves within 5 feet of you.\n• Flee: The target spends its turn moving away from you by the fastest available means.\n• Grovel: The target falls prone and then ends its turn.\n• Halt: The target doesn't move and takes no actions.\nWhen you cast this spell using a spell slot of 2nd level or higher, you may target an additional creature within range for each slot level above 2nd. Spell/&CommandSpellTitle=Command Spell/&DissonantWhispersDescription=You whisper a discordant melody that only one creature of your choice within range can hear, wracking it with terrible pain. The target must make a Wisdom saving throw. On a failed save, it takes 3d6 psychic damage and must immediately use its reaction, if available, to move as far as its speed allows away from you. The creature doesn't move into obviously dangerous ground, such as a fire or a pit. On a successful save, the target takes half as much damage and doesn't have to move away. When you cast this spell using a spell slot of 2nd level or higher, the damage increases by 1d6 for each slot level above 1st. Spell/&DissonantWhispersTitle=Dissonant Whispers diff --git a/SolastaUnfinishedBusiness/Translations/es/Spells/Spells01-es.txt b/SolastaUnfinishedBusiness/Translations/es/Spells/Spells01-es.txt index 78e6ea8a1d..17683936cc 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Spells/Spells01-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Spells/Spells01-es.txt @@ -86,7 +86,7 @@ Spell/&ChaosBoltDescription=Realiza un ataque de hechizo a distancia contra un o Spell/&ChaosBoltTitle=Rayo del caos Spell/&ChromaticOrbDescription=Lanzas una esfera de energía de 4 pulgadas de diámetro a una criatura que puedas ver dentro del alcance. Eliges ácido, frío, fuego, relámpago, veneno o trueno como el tipo de orbe que creas y luego realizas un ataque de hechizo a distancia contra el objetivo. Si el ataque impacta, la criatura recibe 3d8 puntos de daño del tipo que elegiste. Spell/&ChromaticOrbTitle=Orbe cromático -Spell/&CommandSpellDescription=Pronuncias una orden de una palabra a una criatura que puedas ver dentro del alcance. El objetivo debe superar una tirada de salvación de Sabiduría o seguir la orden en su siguiente turno. El conjuro no tiene efecto si el objetivo es un no-muerto. Las órdenes son las siguientes:\n• Acercarse: el objetivo se mueve hacia ti por la ruta más corta y directa, y termina su turno si se mueve a 5 pies o menos de ti.\n• Huir: el objetivo pasa su turno alejándose de ti por el medio más rápido disponible.\n• Arrastrarse: el objetivo cae boca abajo y luego termina su turno.\n• Detenerse: el objetivo no se mueve y no realiza ninguna acción.\nCuando lanzas este conjuro usando un espacio de conjuro de nivel 2 o superior, puedes seleccionar una criatura adicional dentro del alcance por cada nivel de espacio por encima del 2. +Spell/&CommandSpellDescription=Pronuncias una orden de una palabra a una criatura que puedas ver dentro del alcance. El objetivo debe superar una tirada de salvación de Sabiduría o seguir la orden en su siguiente turno. El conjuro solo tiene efecto sobre humanoides. Las órdenes son las siguientes:\n• Acercarse: el objetivo se mueve hacia ti por la ruta más corta y directa, y termina su turno si se mueve a 5 pies o menos de ti.\n• Huir: el objetivo pasa su turno alejándose de ti por el medio más rápido disponible.\n• Arrastrarse: el objetivo cae boca abajo y luego termina su turno.\n• Detenerse: el objetivo no se mueve y no realiza ninguna acción.\nCuando lanzas este conjuro usando un espacio de conjuro de nivel 2 o superior, puedes seleccionar una criatura adicional dentro del alcance por cada nivel de espacio por encima del 2. Spell/&CommandSpellTitle=Dominio Spell/&DissonantWhispersDescription=Susurras una melodía discordante que solo una criatura de tu elección que esté dentro del alcance puede oír, atormentándola con un dolor terrible. El objetivo debe realizar una tirada de salvación de Sabiduría. Si falla, sufre 3d6 puntos de daño psíquico y debe usar inmediatamente su reacción, si está disponible, para alejarse de ti tanto como su velocidad le permita. La criatura no se mueve hacia un terreno obviamente peligroso, como un fuego o un pozo. Si tiene éxito, el objetivo sufre la mitad del daño y no tiene que alejarse. Cuando lanzas este conjuro usando un espacio de conjuro de nivel 2 o superior, el daño aumenta en 1d6 por cada nivel de espacio por encima del 1. Spell/&DissonantWhispersTitle=Susurros disonantes diff --git a/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells01-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells01-fr.txt index 9f9b48e646..399d97fde6 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells01-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells01-fr.txt @@ -86,7 +86,7 @@ Spell/&ChaosBoltDescription=Lancez une attaque à distance contre une cible. En Spell/&ChaosBoltTitle=Éclair du chaos Spell/&ChromaticOrbDescription=Vous lancez une sphère d'énergie de 10 cm de diamètre sur une créature que vous pouvez voir à portée. Vous choisissez l'acide, le froid, le feu, la foudre, le poison ou le tonnerre comme type d'orbe que vous créez, puis effectuez une attaque de sort à distance contre la cible. Si l'attaque touche, la créature subit 3d8 dégâts du type que vous avez choisi. Spell/&ChromaticOrbTitle=Orbe chromatique -Spell/&CommandSpellDescription=Vous prononcez un ordre d'un seul mot à une créature visible à portée. La cible doit réussir un jet de sauvegarde de Sagesse ou suivre l'ordre à son prochain tour. Le sort n'a aucun effet si la cible est morte-vivante. Les ordres sont les suivants :\n• Approche : la cible se déplace vers vous par le chemin le plus court et le plus direct, mettant fin à son tour si elle se déplace à 1,50 mètre ou moins de vous.\n• Fuir : la cible passe son tour à s'éloigner de vous par le moyen le plus rapide disponible.\n• Ramper : la cible tombe à terre puis termine son tour.\n• Halte : la cible ne bouge pas et n'entreprend aucune action.\nLorsque vous lancez ce sort en utilisant un emplacement de sort de niveau 2 ou supérieur, vous pouvez cibler une créature supplémentaire à portée pour chaque niveau d'emplacement au-dessus du niveau 2. +Spell/&CommandSpellDescription=Vous prononcez un ordre d'un seul mot à une créature visible à portée. La cible doit réussir un jet de sauvegarde de Sagesse ou suivre l'ordre à son prochain tour. Le sort n'a d'effet que sur les humanoïdes. Les ordres sont les suivants :\n• Approche : la cible se déplace vers vous par le chemin le plus court et le plus direct, mettant fin à son tour si elle se déplace à 1,50 mètre ou moins de vous.\n• Fuir : la cible passe son tour à s'éloigner de vous par le moyen le plus rapide disponible.\n• Ramper : la cible tombe à terre puis termine son tour.\n• Halte : la cible ne bouge pas et n'entreprend aucune action.\nLorsque vous lancez ce sort en utilisant un emplacement de sort de niveau 2 ou supérieur, vous pouvez cibler une créature supplémentaire à portée pour chaque niveau d'emplacement au-dessus du niveau 2. Spell/&CommandSpellTitle=Commande Spell/&DissonantWhispersDescription=Vous murmurez une mélodie discordante que seule une créature de votre choix à portée peut entendre, la secouant d'une douleur terrible. La cible doit réussir un jet de sauvegarde de Sagesse. En cas d'échec, elle subit 3d6 dégâts psychiques et doit immédiatement utiliser sa réaction, si elle en a la possibilité, pour s'éloigner de vous aussi loin que sa vitesse le lui permet. La créature ne se déplace pas sur un terrain manifestement dangereux, comme un feu ou une fosse. En cas de réussite, la cible subit la moitié des dégâts et n'a pas à s'éloigner. Lorsque vous lancez ce sort en utilisant un emplacement de sort de niveau 2 ou supérieur, les dégâts augmentent de 1d6 pour chaque niveau d'emplacement au-dessus du 1er. Spell/&DissonantWhispersTitle=Chuchotements dissonants diff --git a/SolastaUnfinishedBusiness/Translations/it/Spells/Spells01-it.txt b/SolastaUnfinishedBusiness/Translations/it/Spells/Spells01-it.txt index 4f1400f698..b8224104da 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Spells/Spells01-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Spells/Spells01-it.txt @@ -86,7 +86,7 @@ Spell/&ChaosBoltDescription=Esegui un attacco magico a distanza contro un bersag Spell/&ChaosBoltTitle=Fulmine del Caos Spell/&ChromaticOrbDescription=Scagli una sfera di energia di 4 pollici di diametro contro una creatura che puoi vedere entro il raggio d'azione. Scegli acido, freddo, fuoco, fulmine, veleno o tuono per il tipo di sfera che crei, quindi esegui un attacco magico a distanza contro il bersaglio. Se l'attacco colpisce, la creatura subisce 3d8 danni del tipo che hai scelto. Spell/&ChromaticOrbTitle=Sfera cromatica -Spell/&CommandSpellDescription=Pronuncia un comando di una sola parola a una creatura che puoi vedere entro il raggio d'azione. Il bersaglio deve superare un tiro salvezza su Saggezza o seguire il comando nel suo turno successivo. L'incantesimo non ha effetto se il bersaglio è un non morto. I comandi seguono:\n• Avvicinamento: il bersaglio si muove verso di te attraverso la via più breve e diretta, terminando il suo turno se si muove entro 5 piedi da te.\n• Fuggire: il bersaglio trascorre il suo turno allontanandosi da te con il mezzo più veloce disponibile.\n• Umiliarsi: il bersaglio cade prono e poi termina il suo turno.\n• Arrestare: il bersaglio non si muove e non esegue azioni.\nQuando lanci questo incantesimo usando uno slot incantesimo di 2° livello o superiore, puoi prendere di mira una creatura aggiuntiva entro il raggio d'azione per ogni livello di slot superiore al 2°. +Spell/&CommandSpellDescription=Pronuncia un comando di una sola parola a una creatura che puoi vedere entro il raggio d'azione. Il bersaglio deve superare un tiro salvezza su Saggezza o seguire il comando nel suo turno successivo. L'incantesimo ha effetto solo sugli umanoidi. I comandi seguono:\n• Avvicinamento: il bersaglio si muove verso di te attraverso la via più breve e diretta, terminando il suo turno se si muove entro 5 piedi da te.\n• Fuggire: il bersaglio trascorre il suo turno allontanandosi da te con il mezzo più veloce disponibile.\n• Umiliarsi: il bersaglio cade prono e poi termina il suo turno.\n• Arrestare: il bersaglio non si muove e non esegue azioni.\nQuando lanci questo incantesimo usando uno slot incantesimo di 2° livello o superiore, puoi prendere di mira una creatura aggiuntiva entro il raggio d'azione per ogni livello di slot superiore al 2°. Spell/&CommandSpellTitle=Comando Spell/&DissonantWhispersDescription=Sussurri una melodia discordante che solo una creatura a tua scelta entro il raggio d'azione può sentire, lacerandola con un dolore terribile. Il bersaglio deve effettuare un tiro salvezza su Saggezza. Se fallisce il tiro salvezza, subisce 3d6 danni psichici e deve usare immediatamente la sua reazione, se disponibile, per allontanarsi da te il più lontano possibile dalla sua velocità. La creatura non si sposta in un terreno palesemente pericoloso, come un fuoco o una fossa. Se supera il tiro salvezza, il bersaglio subisce la metà dei danni e non deve allontanarsi. Quando lanci questo incantesimo usando uno slot incantesimo di 2° livello o superiore, il danno aumenta di 1d6 per ogni livello di slot superiore al 1°. Spell/&DissonantWhispersTitle=Sussurri dissonanti diff --git a/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells01-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells01-ja.txt index 7ab4da1b30..b0e6e8f797 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells01-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells01-ja.txt @@ -86,7 +86,7 @@ Spell/&ChaosBoltDescription=ターゲットに対して遠隔呪文攻撃を行 Spell/&ChaosBoltTitle=カオスボルト Spell/&ChromaticOrbDescription=範囲内に見える生き物に直径 4 インチのエネルギーの球を投げます。作成するオーブの種類として酸、冷気、火、稲妻、毒、または雷を選択し、ターゲットに対して遠隔呪文攻撃を行います。攻撃が命中した場合、そのクリーチャーはあなたが選んだタイプに 3d8 のダメージを受けます。 Spell/&ChromaticOrbTitle=クロマティックオーブ -Spell/&CommandSpellDescription=範囲内にいる、あなたが見ることができるクリーチャーに、一言の命令を告げる。対象は【判断力】セーヴィング・スローに成功するか、次のターンに命令に従わなければならない。対象がアンデッドの場合、この呪文は効果がない。命令は以下の通り:\n• 接近: 対象は最短かつ最も直線的な経路であなたに向かって移動し、対象から 5 フィート以内に移動したらターンを終了する。\n• 逃走: 対象はターンを費やして、利用可能な最速の手段であなたから離れる。\n• 卑屈: 対象はうつ伏せになり、その後ターンを終了する。\n• 停止: 対象は移動せず、アクションも行わない。\nこの呪文を 2 レベル以上の呪文スロットを使用して発動する場合、2 レベルを超える各スロット レベルごとに、範囲内にいるクリーチャーをさらに 1 体ターゲットにすることができる。 +Spell/&CommandSpellDescription=範囲内にいる、あなたが見ることができるクリーチャーに、一言の命令を告げる。対象は、判断力セーヴィング・スローに成功するか、次のターンに命令に従わなければならない。この呪文はヒューマノイドにのみ効果がある。命令は以下の通り:\n• 接近: 対象は最短かつ最も直接的な経路であなたに向かって移動し、対象から 5 フィート以内に移動したらターンを終了する。\n• 逃走: 対象は、利用可能な最速の手段であなたから離れるターンを過ごす。\n• 卑屈: 対象はうつ伏せになり、その後ターンを終了する。\n• 停止: 対象は移動せず、アクションも行わない。\nこの呪文を 2 レベル以上の呪文スロットを使用して発動する場合、2 レベルを超える各スロット レベルごとに、範囲内にいるクリーチャーをさらに 1 体ターゲットにすることができる。 Spell/&CommandSpellTitle=指示 Spell/&DissonantWhispersDescription=範囲内にいる選択した 1 体のクリーチャーにのみ聞こえる不協和音のメロディーをささやき、そのクリーチャーにひどい苦痛を与えます。ターゲットは【判断力】セーヴィング スローを行わなければなりません。セーヴィング スローに失敗すると、ターゲットは 3d6 の精神ダメージを受け、可能であれば、即座にリアクションを使用して、移動速度が許す限り遠くまで移動して、ターゲットから離れなければなりません。クリーチャーは、火や穴など、明らかに危険な地面には移動しません。セーヴィング スローに成功すると、ターゲットは半分のダメージを受け、離れる必要もありません。この呪文を 2 レベル以上の呪文スロットを使用して発動すると、1 レベルを超える各スロット レベルごとにダメージが 1d6 増加します。 Spell/&DissonantWhispersTitle=不協和音のささやき diff --git a/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells01-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells01-ko.txt index aeb26c3f80..60f89d7d16 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells01-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells01-ko.txt @@ -86,7 +86,7 @@ Spell/&ChaosBoltDescription=대상에게 원거리 주문 공격을 합니다. Spell/&ChaosBoltTitle=카오스볼트 Spell/&ChromaticOrbDescription=범위 내에서 볼 수 있는 생물에게 직경 4인치의 에너지 구체를 던집니다. 생성하는 오브 유형에 대해 산성, 냉기, 불, 번개, 독 또는 천둥을 선택한 다음 대상에 대해 원거리 주문 공격을 가합니다. 공격이 적중하면 생물은 선택한 유형의 3d8 피해를 입습니다. Spell/&ChromaticOrbTitle=색채의 오브 -Spell/&CommandSpellDescription=당신은 범위 내에서 볼 수 있는 생물에게 한 단어 명령을 내립니다. 대상은 지혜 구원 굴림에 성공해야 하고 그렇지 않으면 다음 턴에 명령을 따라야 합니다. 대상이 언데드인 경우 이 주문은 효과가 없습니다. 명령은 다음과 같습니다.\n• 접근: 대상은 가장 짧고 직접적인 경로로 당신을 향해 이동하며, 5피트 이내로 이동하면 턴을 끝냅니다.\n• 도망: 대상은 가능한 가장 빠른 수단으로 당신에게서 멀어지며 턴을 보냅니다.\n• 굴욕: 대상은 엎드린 다음 턴을 끝냅니다.\n• 정지: 대상은 움직이지 않고 아무런 행동도 취하지 않습니다.\n2레벨 이상의 주문 슬롯을 사용하여 이 주문을 시전할 때, 2레벨 이상의 슬롯 레벨마다 범위 내에 있는 추가 생물을 대상으로 지정할 수 있습니다. +Spell/&CommandSpellDescription=당신은 범위 내에서 볼 수 있는 생물에게 한 단어 명령을 내립니다. 대상은 지혜 구원 굴림에 성공해야 하며, 그렇지 않으면 다음 턴에 명령을 따라야 합니다. 이 주문은 인간형 생물에게만 효과가 있습니다. 명령은 다음과 같습니다.\n• 접근: 대상은 가장 짧고 직접적인 경로로 당신을 향해 이동하며, 5피트 이내로 이동하면 턴을 끝냅니다.\n• 도망: 대상은 가능한 가장 빠른 수단으로 당신에게서 멀어지며 턴을 보냅니다.\n• 굴욕: 대상은 엎드린 다음 턴을 끝냅니다.\n• 정지: 대상은 움직이지 않고 아무런 행동도 취하지 않습니다.\n2레벨 이상의 주문 슬롯을 사용하여 이 주문을 시전할 때, 2레벨 이상의 슬롯 레벨마다 범위 내에 있는 추가 생물을 대상으로 지정할 수 있습니다. Spell/&CommandSpellTitle=명령 Spell/&DissonantWhispersDescription=당신은 범위 내에서 당신이 선택한 한 생명체만 들을 수 있는 불협화음의 멜로디를 속삭이며, 끔찍한 고통으로 그 생명체를 괴롭힙니다. 대상은 지혜 구원 굴림을 해야 합니다. 구원에 실패하면, 대상은 3d6의 사이킥 피해를 입고, 가능하다면 즉시 반응을 사용하여 속도가 허락하는 한 멀리 당신에게서 멀어져야 합니다. 그 생명체는 불이나 구덩이와 같이 명백히 위험한 곳으로 이동하지 않습니다. 구원에 성공하면, 대상은 절반의 피해를 입고, 멀어질 필요가 없습니다. 2레벨 이상의 주문 슬롯을 사용하여 이 주문을 시전하면, 1레벨 위의 슬롯 레벨마다 피해가 1d6씩 증가합니다. Spell/&DissonantWhispersTitle=불협화음의 속삭임 diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells01-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells01-pt-BR.txt index 5d1d9cb0e4..9a5b8ffaa6 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells01-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells01-pt-BR.txt @@ -86,7 +86,7 @@ Spell/&ChaosBoltDescription=Faça um ataque mágico à distância contra um alvo Spell/&ChaosBoltTitle=Raio do Caos Spell/&ChromaticOrbDescription=Você arremessa uma esfera de energia de 4 polegadas de diâmetro em uma criatura que você pode ver dentro do alcance. Você escolhe ácido, frio, fogo, relâmpago, veneno ou trovão para o tipo de orbe que você cria, e então faz um ataque de magia à distância contra o alvo. Se o ataque acertar, a criatura sofre 3d8 de dano do tipo que você escolheu. Spell/&ChromaticOrbTitle=Orbe Cromático -Spell/&CommandSpellDescription=Você fala um comando de uma palavra para uma criatura que você pode ver dentro do alcance. O alvo deve ter sucesso em um teste de resistência de Sabedoria ou seguir o comando em seu próximo turno. A magia não tem efeito se o alvo for morto-vivo. Os comandos seguem:\n• Aproximar: O alvo se move em sua direção pela rota mais curta e direta, terminando seu turno se ele se mover a 1,5 m de você.\n• Fugir: O alvo gasta seu turno se afastando de você pelo meio mais rápido disponível.\n• Rastejar: O alvo cai de bruços e então termina seu turno.\n• Parar: O alvo não se move e não realiza nenhuma ação.\nQuando você conjura esta magia usando um espaço de magia de 2º nível ou superior, você pode escolher uma criatura adicional dentro do alcance para cada nível de espaço acima de 2º. +Spell/&CommandSpellDescription=Você fala um comando de uma palavra para uma criatura que você pode ver dentro do alcance. O alvo deve ter sucesso em um teste de resistência de Sabedoria ou seguir o comando em seu próximo turno. A magia só tem efeito em humanoides. Os comandos seguem:\n• Aproximar: O alvo se move em sua direção pela rota mais curta e direta, terminando seu turno se ele se mover a 1,5 m de você.\n• Fugir: O alvo gasta seu turno se afastando de você pelo meio mais rápido disponível.\n• Rastejar: O alvo cai de bruços e então termina seu turno.\n• Parar: O alvo não se move e não realiza nenhuma ação.\nQuando você conjura esta magia usando um espaço de magia de 2º nível ou superior, você pode escolher uma criatura adicional dentro do alcance para cada nível de espaço acima de 2º. Spell/&CommandSpellTitle=Comando Spell/&DissonantWhispersDescription=Você sussurra uma melodia dissonante que somente uma criatura de sua escolha dentro do alcance pode ouvir, atormentando-a com uma dor terrível. O alvo deve fazer um teste de resistência de Sabedoria. Em um teste falho, ele sofre 3d6 de dano psíquico e deve usar imediatamente sua reação, se disponível, para se mover o mais longe que sua velocidade permitir para longe de você. A criatura não se move para um terreno obviamente perigoso, como uma fogueira ou um poço. Em um teste bem-sucedido, o alvo sofre metade do dano e não precisa se afastar. Quando você conjura esta magia usando um espaço de magia de 2º nível ou superior, o dano aumenta em 1d6 para cada nível de espaço acima do 1º. Spell/&DissonantWhispersTitle=Sussurros Dissonantes diff --git a/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells01-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells01-ru.txt index 3f13aaf540..ac87e71ba8 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells01-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells01-ru.txt @@ -86,7 +86,7 @@ Spell/&ChaosBoltDescription=Вы бросаете волнистую, трепе Spell/&ChaosBoltTitle=Снаряд хаоса Spell/&ChromaticOrbDescription=Вы бросаете 4-дюймовую сферу энергии в существо, которое видите в пределах дистанции. Выберите звук, кислоту, огонь, холод, электричество или яд при создании сферы, а затем совершите по цели дальнобойную атаку заклинанием. Если атака попадает, существо получает 3d8 урона выбранного вида. Spell/&ChromaticOrbTitle=Цветной шарик -Spell/&CommandSpellDescription=Вы произносите однословную команду существу, которое видите в пределах досягаемости. Цель должна преуспеть в спасброске Мудрости или выполнить команду на следующем ходу. Заклинание не действует, если цель — нежить. Команды следуют:\n• Приближение: цель движется к вам по кратчайшему и самому прямому маршруту, заканчивая свой ход, если она движется в пределах 5 футов от вас.\n• Бегство: цель проводит свой ход, удаляясь от вас максимально быстрым доступным способом.\n• Пресмыкание: цель падает ничком и затем заканчивает свой ход.\n• Остановка: цель не двигается и не совершает никаких действий.\nКогда вы произносите это заклинание, используя ячейку заклинания 2-го уровня или выше, вы можете нацелить дополнительное существо в пределах досягаемости для каждого уровня ячейки выше 2-го. +Spell/&CommandSpellDescription=Вы произносите однословную команду существу, которое видите в пределах досягаемости. Цель должна преуспеть в спасброске Мудрости или выполнить команду на следующем ходу. Заклинание действует только на гуманоидов. Команды следуют:\n• Приближение: цель движется к вам по кратчайшему и самому прямому маршруту, заканчивая свой ход, если она движется в пределах 5 футов от вас.\n• Бегство: цель проводит свой ход, удаляясь от вас максимально быстрым доступным способом.\n• Пресмыкание: цель падает ничком и затем заканчивает свой ход.\n• Остановка: цель не двигается и не совершает никаких действий.\nКогда вы произносите это заклинание, используя ячейку заклинания 2-го уровня или выше, вы можете нацелить дополнительное существо в пределах досягаемости для каждого уровня ячейки выше 2-го. Spell/&CommandSpellTitle=Команда Spell/&DissonantWhispersDescription=Вы шепчете диссонирующую мелодию, которую может услышать только одно существо по вашему выбору в пределах досягаемости, причиняя ему ужасную боль. Цель должна сделать спасбросок Мудрости. При провале она получает 3d6 психического урона и должна немедленно использовать свою реакцию, если она доступна, чтобы отойти от вас как можно дальше, насколько позволяет ее скорость. Существо не перемещается в явно опасную местность, такую ​​как огонь или яма. При успешном спасброске цель получает половину урона и ей не нужно отходить. Когда вы произносите это заклинание, используя ячейку заклинания 2-го уровня или выше, урон увеличивается на 1d6 за каждый уровень ячейки выше 1-го. Spell/&DissonantWhispersTitle=Диссонансный шепот diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells01-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells01-zh-CN.txt index d1ee5c89ee..c836ea7198 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells01-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells01-zh-CN.txt @@ -86,7 +86,7 @@ Spell/&ChaosBoltDescription=对目标进行远程法术攻击。命中后,目 Spell/&ChaosBoltTitle=混乱箭 Spell/&ChromaticOrbDescription=你向范围内你能看到的一个生物投掷一个直径 4 寸的能量球。你选择强酸、冷冻、火焰、闪电、毒素或雷鸣作为你创造的球体类型,然后对目标进行远程法术攻击。如果攻击命中,该生物将受到你选择类型的 3d8 点伤害。 Spell/&ChromaticOrbTitle=繁彩球 -Spell/&CommandSpellDescription=你对范围内可见的生物说出一个单词命令。目标必须成功通过感知豁免检定,否则在下一回合执行命令。如果目标是不死生物,则该法术无效。命令如下:\n• 接近:目标以最短、最直接的路线向你移动,如果它移动到距离你 5 英尺以内,则结束其回合。\n• 逃跑:目标在其回合中以最快的方式远离你。\n• 卑躬屈膝:目标俯卧,然后结束其回合。\n• 停止:目标不移动也不采取任何行动。\n当你使用 2 级或更高级别的法术位施放此法术时,你可以将范围内的额外生物作为目标,每个高于 2 级的法术位等级都可以。 +Spell/&CommandSpellDescription=你对范围内可见的生物说出一个单词命令。目标必须成功通过感知豁免检定,否则将在下一回合执行命令。此法术仅对人形生物有效。命令如下:\n• 接近:目标以最短、最直接的路线向你移动,如果它移动到你 5 英尺以内,则结束其回合。\n• 逃跑:目标在其回合中以最快的方式远离你。\n• 卑躬屈膝:目标倒下,然后结束其回合。\n• 停止:目标不移动,不采取任何行动。\n当你使用 2 级或更高级别的法术位施放此法术时,你可以将范围内的生物作为目标,每高于 2 级一个法术位等级。 Spell/&CommandSpellTitle=命令 Spell/&DissonantWhispersDescription=你低声吟唱着一段刺耳的旋律,只有你选择的范围内的一个生物可以听到,这让目标痛苦不堪。目标必须进行一次感知豁免检定。如果豁免失败,目标将受到 3d6 精神伤害,并且必须立即使用其反应(如果可用)以尽可能快的速度远离你。该生物不会移动到明显危险的地方,例如火或坑。如果豁免成功,目标受到的伤害减半,并且不必离开。当你使用 2 级或更高级别的法术位施放此法术时,伤害每高于 1 级法术位等级增加 1d6。 Spell/&DissonantWhispersTitle=不和谐的私语 From bd9687aa85590a99efd897abad5c41466d5efe79 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Thu, 5 Sep 2024 08:26:04 -0700 Subject: [PATCH 043/212] add custom AI to command flee --- ...derationsInfluenceEnemyProximityPatcher.cs | 74 +++++++++++++++++++ .../Spells/SpellBuildersLevel01.cs | 60 ++++++++++----- 2 files changed, 117 insertions(+), 17 deletions(-) create mode 100644 SolastaUnfinishedBusiness/Patches/Considerations/ConsiderationsInfluenceEnemyProximityPatcher.cs diff --git a/SolastaUnfinishedBusiness/Patches/Considerations/ConsiderationsInfluenceEnemyProximityPatcher.cs b/SolastaUnfinishedBusiness/Patches/Considerations/ConsiderationsInfluenceEnemyProximityPatcher.cs new file mode 100644 index 0000000000..07cd577c3a --- /dev/null +++ b/SolastaUnfinishedBusiness/Patches/Considerations/ConsiderationsInfluenceEnemyProximityPatcher.cs @@ -0,0 +1,74 @@ +using System.Diagnostics.CodeAnalysis; +using HarmonyLib; +using JetBrains.Annotations; +using TA.AI; +using TA.AI.Considerations; +using UnityEngine; + +namespace SolastaUnfinishedBusiness.Patches.Considerations; + +[UsedImplicitly] +public static class InfluenceEnemyProximityPatcher +{ + //PATCH: allows this influence to be reverted if boolSecParameter is true + //used on Command Spell, approach command + [HarmonyPatch(typeof(InfluenceEnemyProximity), nameof(InfluenceEnemyProximity.Score))] + [SuppressMessage("Minor Code Smell", "S101:Types should be named in PascalCase", Justification = "Patch")] + [UsedImplicitly] + public static class Score_Patch + { + [UsedImplicitly] + public static bool Prefix( + DecisionContext context, + ConsiderationDescription consideration, + DecisionParameters parameters, + ScoringResult scoringResult) + { + Score(context, consideration, parameters, scoringResult); + + return false; + } + + // mainly vanilla code except for BEGIN/END blocks + private static void Score( + DecisionContext context, + ConsiderationDescription consideration, + DecisionParameters parameters, + ScoringResult scoringResult) + { + var denominator = consideration.IntParameter > 0 ? consideration.IntParameter : 1; + var floatParameter = consideration.FloatParameter; + var position = consideration.BoolParameter + ? context.position + : parameters.character.GameLocationCharacter.LocationPosition; + var numerator = 0.0f; + + // ReSharper disable once ForeachCanBePartlyConvertedToQueryUsingAnotherGetEnumerator + foreach (var enemy in parameters.situationalInformation.RelevantEnemies) + { + if (!AiLocationDefinitions.IsRelevantTargetForCharacter( + parameters.character.GameLocationCharacter, + enemy, parameters.situationalInformation.HasRelevantPerceivedTarget)) + { + continue; + } + + var distance = + parameters.situationalInformation.PositioningService + .ComputeDistanceBetweenCharactersApproximatingSize( + parameters.character.GameLocationCharacter, position, enemy, enemy.LocationPosition); + + //BEGIN PATCH + if (consideration.boolSecParameter) + { + distance = floatParameter - distance + 1; + } + //END PATCH + + numerator += Mathf.Lerp(1f, 0.0f, Mathf.Clamp(distance / floatParameter, 0.0f, 1f)); + } + + scoringResult.Score = numerator / denominator; + } + } +} diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs index f09f7807ce..38746bbf40 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs @@ -1250,31 +1250,32 @@ internal static SpellDefinition BuildCommand() .SetAllowedActionTypes(false, false, true, false, false, false) .AddToDB(); + var moveAfraidDecision = DatabaseRepository.GetDatabase().GetElement("Move_Afraid"); + // Approach #region Approach AI Behavior - var moveAfraidDecision = DatabaseRepository.GetDatabase().GetElement("Move_Afraid"); - var scorer = Object.Instantiate(moveAfraidDecision.Decision.scorer); + var scorerApproach = Object.Instantiate(moveAfraidDecision.Decision.scorer); - scorer.name = "MoveScorer_Approach"; - // invert PenalizeVeryCloseEnemyProximityAtPosition behavior - scorer.scorer.WeightedConsiderations[2].Consideration.boolSecParameter = true; - // remove PenalizeVeryCloseEnemyProximityAtPosition - scorer.scorer.WeightedConsiderations.RemoveAt(1); + scorerApproach.name = "MoveScorer_Approach"; + // invert PenalizeFearSourceProximityAtPosition + scorerApproach.scorer.WeightedConsiderations[2].Consideration.boolSecParameter = true; + // invert PenalizeVeryCloseEnemyProximityAtPosition + scorerApproach.scorer.WeightedConsiderations[1].Consideration.boolSecParameter = true; - var decision = DecisionDefinitionBuilder + var decisionApproach = DecisionDefinitionBuilder .Create("Move_Approach") .SetGuiPresentationNoContent(true) .SetDecisionDescription( "Go as close as possible to enemies.", "Move", - scorer) + scorerApproach) .AddToDB(); - var approachPackage = DecisionPackageDefinitionBuilder + var packageApproach = DecisionPackageDefinitionBuilder .Create("Approach") - .SetWeightedDecisions(new WeightedDecisionDescription { decision = decision, weight = 9 }) + .SetWeightedDecisions(new WeightedDecisionDescription { decision = decisionApproach, weight = 9 }) .AddToDB(); #endregion @@ -1285,9 +1286,8 @@ internal static SpellDefinition BuildCommand() .SetConditionType(ConditionType.Detrimental) .SetPossessive() .SetSpecialDuration() - .SetBrain(approachPackage, true, true) + .SetBrain(packageApproach, true, true) .SetFeatures(actionAffinityCanOnlyMove) - .SetSpecialInterruptions(ConditionInterruption.Moved) .AddCustomSubFeatures(new OnConditionAddedOrRemovedCommandApproachOrFlee(true)) .AddToDB(); @@ -1306,15 +1306,38 @@ internal static SpellDefinition BuildCommand() // Flee + #region Flee AI Behavior + + var scorerFlee = Object.Instantiate(moveAfraidDecision.Decision.scorer); + + scorerFlee.name = "MoveScorer_Flee"; + // tweak IsCloseFromMe to differ a bit from Fear on location determination and force enemy to move further + scorerFlee.scorer.WeightedConsiderations[3].Consideration.floatParameter = 6; + + var decisionFlee = DecisionDefinitionBuilder + .Create("Move_Flee") + .SetGuiPresentationNoContent(true) + .SetDecisionDescription( + "Go as far as possible from enemies.", + "Move", + scorerFlee) + .AddToDB(); + + var packageFlee = DecisionPackageDefinitionBuilder + .Create("Flee") + .SetWeightedDecisions(new WeightedDecisionDescription { decision = decisionFlee, weight = 9 }) + .AddToDB(); + + #endregion + var conditionFlee = ConditionDefinitionBuilder .Create($"Condition{NAME}Flee") .SetGuiPresentation($"Power{NAME}Flee", Category.Feature, ConditionPossessed) .SetConditionType(ConditionType.Detrimental) .SetPossessive() .SetSpecialDuration() - .SetBrain(DecisionPackageDefinitions.Fear, true, true) + .SetBrain(packageFlee, true, true) .SetFeatures(actionAffinityCanOnlyMove) - .SetSpecialInterruptions(ConditionInterruption.Moved) .AddCustomSubFeatures(new OnConditionAddedOrRemovedCommandApproachOrFlee(false)) .AddToDB(); @@ -1340,10 +1363,9 @@ internal static SpellDefinition BuildCommand() .SetConditionType(ConditionType.Detrimental) .SetPossessive() .SetSpecialDuration() + .AddCustomSubFeatures(new CharacterBeforeTurnStartListenerCommandGrovel()) .AddToDB(); - conditionGrovel.AddCustomSubFeatures(new CharacterBeforeTurnStartListenerCommandGrovel()); - var powerGrovel = FeatureDefinitionPowerSharedPoolBuilder .Create($"Power{NAME}Grovel") .SetGuiPresentation(Category.Feature) @@ -1357,6 +1379,8 @@ internal static SpellDefinition BuildCommand() .Build()) .AddToDB(); + // Halt + var conditionHalt = ConditionDefinitionBuilder .Create($"Condition{NAME}Halt") .SetGuiPresentation($"Power{NAME}Halt", Category.Feature, ConditionPossessed) @@ -1382,6 +1406,8 @@ internal static SpellDefinition BuildCommand() PowerBundle.RegisterPowerBundle(powerPool, false, powerApproach, powerFlee, powerGrovel, powerHalt); + // Command Spell + var conditionSelf = ConditionDefinitionBuilder .Create($"Condition{NAME}Self") .SetGuiPresentationNoContent(true) From e2408f0ce66e8b539dc4ba0e07db9d4f7e756452 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Thu, 5 Sep 2024 08:26:34 -0700 Subject: [PATCH 044/212] minor tweaks on Booming Blade and Abilities Chain invocation --- .../Spells/SpellBuildersCantrips.cs | 23 ++++++++----------- .../Builders/InvocationsBuilders.cs | 7 +----- 2 files changed, 11 insertions(+), 19 deletions(-) diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs index 6c2fbe2136..d2618b9bfd 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs @@ -825,8 +825,7 @@ internal static SpellDefinition BuildBoomingBlade() conditionBoomingBladeSheathed.possessive = false; conditionBoomingBladeSheathed.AddCustomSubFeatures( - new ActionFinishedByMeConditionBoomingBladeSheathed( - conditionBoomingBladeSheathed, powerBoomingBladeDamage)); + new OnConditionAddedOrRemovedBoomingBladeSheathed(conditionBoomingBladeSheathed, powerBoomingBladeDamage)); var additionalDamageBoomingBlade = FeatureDefinitionAdditionalDamageBuilder .Create("AdditionalDamageBoomingBlade") @@ -884,24 +883,21 @@ internal static SpellDefinition BuildBoomingBlade() return spell; } - private sealed class ActionFinishedByMeConditionBoomingBladeSheathed( + private sealed class OnConditionAddedOrRemovedBoomingBladeSheathed( ConditionDefinition conditionBoomingBladeSheathed, - FeatureDefinitionPower powerBoomingBladeDamage) : IActionFinishedByMe + FeatureDefinitionPower powerBoomingBladeDamage) : IOnConditionAddedOrRemoved { - public IEnumerator OnActionFinishedByMe(CharacterAction action) + public void OnConditionAdded(RulesetCharacter target, RulesetCondition rulesetCondition) { - if (action.ActionId != Id.TacticalMove) - { - yield break; - } - - var defender = action.ActingCharacter; - var rulesetDefender = defender.RulesetCharacter; + // empty + } + public void OnConditionRemoved(RulesetCharacter rulesetDefender, RulesetCondition rulesetCondition) + { if (!rulesetDefender.TryGetConditionOfCategoryAndType( AttributeDefinitions.TagEffect, conditionBoomingBladeSheathed.Name, out var activeCondition)) { - yield break; + return; } rulesetDefender.RemoveCondition(activeCondition); @@ -909,6 +905,7 @@ public IEnumerator OnActionFinishedByMe(CharacterAction action) var rulesetAttacker = EffectHelpers.GetCharacterByGuid(activeCondition.SourceGuid); var attacker = GameLocationCharacter.GetFromActor(rulesetAttacker); var usablePower = PowerProvider.Get(powerBoomingBladeDamage, rulesetAttacker); + var defender = GameLocationCharacter.GetFromActor(rulesetDefender); attacker.MyExecuteActionSpendPower(usablePower, false, defender); } diff --git a/SolastaUnfinishedBusiness/Subclasses/Builders/InvocationsBuilders.cs b/SolastaUnfinishedBusiness/Subclasses/Builders/InvocationsBuilders.cs index e6ca471bad..371d82d51b 100644 --- a/SolastaUnfinishedBusiness/Subclasses/Builders/InvocationsBuilders.cs +++ b/SolastaUnfinishedBusiness/Subclasses/Builders/InvocationsBuilders.cs @@ -996,11 +996,6 @@ public IEnumerator OnActionFinishedByMe(CharacterAction action) { var actingCharacter = action.ActingCharacter; - if (actingCharacter.RulesetCharacter is not { IsDeadOrDyingOrUnconscious: false }) - { - yield break; - } - if (action.ActionType != ActionType.Bonus && //action.ActingCharacter.PerceptionState == ActionDefinitions.PerceptionState.OnGuard action.ActionDefinition.ActionScope == ActionScope.Battle) @@ -1068,7 +1063,7 @@ private static void SetChainBuff(RulesetCharacter rulesetCharacter, BaseDefiniti conditionDefinition.Name, DurationType.Minute, 1, - TurnOccurenceType.StartOfTurn, + TurnOccurenceType.EndOfTurn, AttributeDefinitions.TagEffect, rulesetCharacter.guid, rulesetCharacter.CurrentFaction.Name, From a47cbff599b31d28c88887691a38a19d80fcbb3d Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Thu, 5 Sep 2024 10:44:04 -0700 Subject: [PATCH 045/212] improve command spell target filtering based on target family and caster languages knowledge --- .../Spells/SpellBuildersLevel01.cs | 69 ++++++++++++++++++- .../Translations/de/Others-de.txt | 1 + .../Translations/en/Others-en.txt | 1 + .../Translations/es/Others-es.txt | 1 + .../Translations/fr/Others-fr.txt | 1 + .../Translations/it/Others-it.txt | 1 + .../Translations/ja/Others-ja.txt | 1 + .../Translations/ko/Others-ko.txt | 1 + .../Translations/pt-BR/Others-pt-BR.txt | 1 + .../Translations/ru/Others-ru.txt | 1 + .../Translations/zh-CN/Others-zh-CN.txt | 1 + 11 files changed, 77 insertions(+), 2 deletions(-) diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs index 38746bbf40..264a320c12 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs @@ -1442,7 +1442,6 @@ internal static SpellDefinition BuildCommand() additionalTargetsPerIncrement: 1) .SetSavingThrowData(false, AttributeDefinitions.Wisdom, true, EffectDifficultyClassComputation.SpellCastingFeature) - .SetRestrictedCreatureFamilies(CharacterFamilyDefinitions.Humanoid.Name) .SetEffectForms( EffectFormBuilder .Create() @@ -1464,8 +1463,74 @@ internal static SpellDefinition BuildCommand() private sealed class PowerOrSpellFinishedByMeCommand( ConditionDefinition conditionMark, FeatureDefinitionPower powerPool, - params ConditionDefinition[] conditions) : IPowerOrSpellFinishedByMe + params ConditionDefinition[] conditions) : IPowerOrSpellFinishedByMe, IFilterTargetingCharacter { + public bool EnforceFullSelection => true; + + public bool IsValid(CursorLocationSelectTarget __instance, GameLocationCharacter target) + { + var selectedTargets = __instance.SelectionService.SelectedTargets; + + if (selectedTargets.Any(selectedTarget => !target.IsWithinRange(selectedTarget, 6))) + { + __instance.actionModifier.FailureFlags.Add("Tooltip/&SecondTargetNotWithinRange"); + return false; + } + + var rulesetCaster = __instance.ActionParams.ActingCharacter.RulesetCharacter.GetOriginalHero(); + + if (rulesetCaster == null) + { + return false; + } + + var rulesetTarget = target.RulesetCharacter; + + if (rulesetTarget.CharacterFamily == "Dragon" && + !rulesetCaster.LanguageProficiencies.Contains("Language_Draconic")) + { + __instance.actionModifier.FailureFlags.Add("Tooltip/&TargetMustUnderstandYou"); + return false; + } + + if (rulesetTarget.CharacterFamily == "Fey" && + !rulesetCaster.LanguageProficiencies.Contains("Language_Elvish")) + { + __instance.actionModifier.FailureFlags.Add("Tooltip/&TargetMustUnderstandYou"); + return false; + } + + if (rulesetTarget.CharacterFamily is "Giant" or "Giant_Rugan" && + !rulesetCaster.LanguageProficiencies.Contains("Language_Giant")) + { + __instance.actionModifier.FailureFlags.Add("Tooltip/&TargetMustUnderstandYou"); + return false; + } + + if (rulesetTarget.CharacterFamily == "Fiend" && + !rulesetCaster.LanguageProficiencies.Contains("Language_Infernal")) + { + __instance.actionModifier.FailureFlags.Add("Tooltip/&TargetMustUnderstandYou"); + return false; + } + + if (rulesetTarget.CharacterFamily == "Elemental" && + !rulesetCaster.LanguageProficiencies.Contains("Language_Terran")) + { + __instance.actionModifier.FailureFlags.Add("Tooltip/&TargetMustUnderstandYou"); + return false; + } + + var result = rulesetTarget.CharacterFamily == "Humanoid"; + + if (!result) + { + __instance.actionModifier.FailureFlags.Add("Tooltip/&TargetMustUnderstandYou"); + } + + return result; + } + public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, BaseDefinition baseDefinition) { if (action.Countered || action.ExecutionFailed) diff --git a/SolastaUnfinishedBusiness/Translations/de/Others-de.txt b/SolastaUnfinishedBusiness/Translations/de/Others-de.txt index b47d989d08..fe0d7c2635 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Others-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Others-de.txt @@ -306,6 +306,7 @@ Tooltip/&Tag9000Title=Benutzerdefinierter Effekt Tooltip/&TagDamageChaosBoltTitle=Chaotischer Schaden Tooltip/&TagUnfinishedBusinessTitle=Unerledigte Aufgabe Tooltip/&TargetMeleeWeaponError=Auf dieses Ziel kann kein Nahkampfangriff ausgeführt werden, da es sich nicht innerhalb von {0} befindet +Tooltip/&TargetMustUnderstandYou=Das Ziel muss Ihren Befehl verstehen UI/&CustomFeatureSelectionStageDescription=Wählen Sie zusätzliche Funktionen für Ihre Klasse/Unterklasse aus. UI/&CustomFeatureSelectionStageFeatures=Merkmale UI/&CustomFeatureSelectionStageNotDone=Sie müssen alle verfügbaren Funktionen auswählen, bevor Sie fortfahren diff --git a/SolastaUnfinishedBusiness/Translations/en/Others-en.txt b/SolastaUnfinishedBusiness/Translations/en/Others-en.txt index 6f96c53baa..4bd01b6c52 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Others-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Others-en.txt @@ -306,6 +306,7 @@ Tooltip/&Tag9000Title=Custom Effect Tooltip/&TagDamageChaosBoltTitle=Chaotic Damage Tooltip/&TagUnfinishedBusinessTitle=Unfinished Business Tooltip/&TargetMeleeWeaponError=Can't perform melee attack on this target as not within {0} +Tooltip/&TargetMustUnderstandYou=Target must understand your command UI/&CustomFeatureSelectionStageDescription=Select extra features for your class/subclass. UI/&CustomFeatureSelectionStageFeatures=Features UI/&CustomFeatureSelectionStageNotDone=You must select all available features before proceeding diff --git a/SolastaUnfinishedBusiness/Translations/es/Others-es.txt b/SolastaUnfinishedBusiness/Translations/es/Others-es.txt index decb76d15b..3d63069fbb 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Others-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Others-es.txt @@ -306,6 +306,7 @@ Tooltip/&Tag9000Title=Efecto personalizado Tooltip/&TagDamageChaosBoltTitle=Daño caótico Tooltip/&TagUnfinishedBusinessTitle=Negocios inconclusos Tooltip/&TargetMeleeWeaponError=No se puede realizar un ataque cuerpo a cuerpo contra este objetivo porque no está dentro de {0} +Tooltip/&TargetMustUnderstandYou=El objetivo debe comprender tu orden UI/&CustomFeatureSelectionStageDescription=Seleccione funciones adicionales para su clase/subclase. UI/&CustomFeatureSelectionStageFeatures=Características UI/&CustomFeatureSelectionStageNotDone=Debe seleccionar todas las funciones disponibles antes de continuar diff --git a/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt index 785ddfe74c..9c3c80c01f 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt @@ -306,6 +306,7 @@ Tooltip/&Tag9000Title=Effet personnalisé Tooltip/&TagDamageChaosBoltTitle=Dégâts chaotiques Tooltip/&TagUnfinishedBusinessTitle=Inachevé Tooltip/&TargetMeleeWeaponError=Impossible d'effectuer une attaque au corps à corps sur cette cible car elle se trouve à {0} +Tooltip/&TargetMustUnderstandYou=La cible doit comprendre votre commande UI/&CustomFeatureSelectionStageDescription=Sélectionnez des fonctionnalités supplémentaires pour votre classe/sous-classe. UI/&CustomFeatureSelectionStageFeatures=Caractéristiques UI/&CustomFeatureSelectionStageNotDone=Vous devez sélectionner toutes les fonctionnalités disponibles avant de continuer diff --git a/SolastaUnfinishedBusiness/Translations/it/Others-it.txt b/SolastaUnfinishedBusiness/Translations/it/Others-it.txt index 5724b787f6..450ecac308 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Others-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Others-it.txt @@ -306,6 +306,7 @@ Tooltip/&Tag9000Title=Effetto personalizzato Tooltip/&TagDamageChaosBoltTitle=Danno caotico Tooltip/&TagUnfinishedBusinessTitle=Lavoro incompleto Tooltip/&TargetMeleeWeaponError=Non è possibile eseguire un attacco corpo a corpo su questo bersaglio poiché non si trova entro {0} +Tooltip/&TargetMustUnderstandYou=Il bersaglio deve capire il tuo comando UI/&CustomFeatureSelectionStageDescription=Seleziona funzionalità extra per la tua classe/sottoclasse. UI/&CustomFeatureSelectionStageFeatures=Caratteristiche UI/&CustomFeatureSelectionStageNotDone=È necessario selezionare tutte le funzionalità disponibili prima di procedere diff --git a/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt index 05a01e4f52..dafb41c8d4 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt @@ -306,6 +306,7 @@ Tooltip/&Tag9000Title=カスタムエフェクト Tooltip/&TagDamageChaosBoltTitle=カオスダメージ Tooltip/&TagUnfinishedBusinessTitle=未完の仕事 Tooltip/&TargetMeleeWeaponError={0} 内にないため、このターゲットに近接攻撃を実行できません +Tooltip/&TargetMustUnderstandYou=ターゲットはあなたのコマンドを理解する必要があります UI/&CustomFeatureSelectionStageDescription=クラス/サブクラスの追加機能を選択します。 UI/&CustomFeatureSelectionStageFeatures=特徴 UI/&CustomFeatureSelectionStageNotDone=続行する前に、利用可能な機能をすべて選択する必要があります diff --git a/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt index 4b288cc651..098ce42d86 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt @@ -306,6 +306,7 @@ Tooltip/&Tag9000Title=맞춤 효과 Tooltip/&TagDamageChaosBoltTitle=혼돈스러운 피해 Tooltip/&TagUnfinishedBusinessTitle=끝나지 않은 사업 Tooltip/&TargetMeleeWeaponError={0} 내에 없기 때문에 이 대상에 근접 공격을 수행할 수 없습니다. +Tooltip/&TargetMustUnderstandYou=타겟은 당신의 명령을 이해해야 합니다 UI/&CustomFeatureSelectionStageDescription=클래스/하위 클래스에 대한 추가 기능을 선택하세요. UI/&CustomFeatureSelectionStageFeatures=특징 UI/&CustomFeatureSelectionStageNotDone=계속하기 전에 사용 가능한 모든 기능을 선택해야 합니다. diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt index db09dc9cc4..a96206b858 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt @@ -306,6 +306,7 @@ Tooltip/&Tag9000Title=Efeito personalizado Tooltip/&TagDamageChaosBoltTitle=Dano Caótico Tooltip/&TagUnfinishedBusinessTitle=Negócios inacabados Tooltip/&TargetMeleeWeaponError=Não é possível realizar ataque corpo a corpo neste alvo, pois ele não está a {0} +Tooltip/&TargetMustUnderstandYou=O alvo deve entender seu comando UI/&CustomFeatureSelectionStageDescription=Selecione recursos extras para sua classe/subclasse. UI/&CustomFeatureSelectionStageFeatures=Características UI/&CustomFeatureSelectionStageNotDone=Você deve selecionar todos os recursos disponíveis antes de prosseguir diff --git a/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt index 0176b2c6e6..d810d483ea 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt @@ -306,6 +306,7 @@ Tooltip/&Tag9000Title=Кастомный эффект Tooltip/&TagDamageChaosBoltTitle=Хаотичный урон Tooltip/&TagUnfinishedBusinessTitle=Неоконченное Дело Tooltip/&TargetMeleeWeaponError=Невозможно провести атаку ближнего боя по этой цели, так как она находится вне пределов {0} +Tooltip/&TargetMustUnderstandYou=Цель должна понимать вашу команду. UI/&CustomFeatureSelectionStageDescription=Выберите дополнительные черты для вашего класса/архетипа. UI/&CustomFeatureSelectionStageFeatures=Черты UI/&CustomFeatureSelectionStageNotDone=Вы должны выбрать все черты перед продолжением diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt index 27c0e6174c..56cb3eb57a 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt @@ -306,6 +306,7 @@ Tooltip/&Tag9000Title=自定义效果 Tooltip/&TagDamageChaosBoltTitle=混沌伤害 Tooltip/&TagUnfinishedBusinessTitle=未竟之业 Tooltip/&TargetMeleeWeaponError=无法对该目标进行近战攻击,因为目标不在{0}内 +Tooltip/&TargetMustUnderstandYou=目标必须理解你的命令 UI/&CustomFeatureSelectionStageDescription=为你的职业/子职业选择额外的特性。 UI/&CustomFeatureSelectionStageFeatures=专长 UI/&CustomFeatureSelectionStageNotDone=在继续之前,你必须选择所有可用特性 From 6a9897ef7b6676b4b1d0fb078793f4360458308a Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Thu, 5 Sep 2024 16:58:07 -0700 Subject: [PATCH 046/212] improve Command Spell description --- .../Translations/de/Spells/Spells01-de.txt | 2 +- .../Translations/en/Spells/Spells01-en.txt | 2 +- .../Translations/es/Spells/Spells01-es.txt | 2 +- .../Translations/fr/Spells/Spells01-fr.txt | 2 +- .../Translations/it/Spells/Spells01-it.txt | 2 +- .../Translations/ja/Spells/Spells01-ja.txt | 2 +- .../Translations/ko/Spells/Spells01-ko.txt | 2 +- .../Translations/pt-BR/Spells/Spells01-pt-BR.txt | 2 +- .../Translations/ru/Spells/Spells01-ru.txt | 2 +- .../Translations/zh-CN/Spells/Spells01-zh-CN.txt | 2 +- 10 files changed, 10 insertions(+), 10 deletions(-) diff --git a/SolastaUnfinishedBusiness/Translations/de/Spells/Spells01-de.txt b/SolastaUnfinishedBusiness/Translations/de/Spells/Spells01-de.txt index 4a8667970d..5c1f29f399 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Spells/Spells01-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Spells/Spells01-de.txt @@ -86,7 +86,7 @@ Spell/&ChaosBoltDescription=Führe einen Fernangriff mit Zauber gegen ein Ziel a Spell/&ChaosBoltTitle=Chaosblitz Spell/&ChromaticOrbDescription=Du schleuderst eine Energiekugel mit 4 Zoll Durchmesser auf eine Kreatur, die du in Reichweite sehen kannst. Du wählst Säure, Kälte, Feuer, Blitz, Gift oder Donner als Art der Kugel, die du erschaffst, und führst dann einen Fernkampf-Zauberangriff gegen das Ziel aus. Wenn der Angriff trifft, erleidet die Kreatur 3W8 Schaden der von dir gewählten Art. Spell/&ChromaticOrbTitle=Chromatische Kugel -Spell/&CommandSpellDescription=Du sprichst einen einwortigen Befehl zu einer Kreatur in Reichweite, die du sehen kannst. Das Ziel muss einen Weisheitsrettungswurf bestehen oder dem Befehl in seinem nächsten Zug folgen. Der Zauber wirkt nur auf Humanoide. Es gibt folgende Befehle:\n• Annäherung: Das Ziel bewegt sich auf dem kürzesten und direktesten Weg auf dich zu und beendet seinen Zug, wenn es sich dir näher als 1,52 m nähert.\n• Fliehen: Das Ziel verbringt seinen Zug damit, sich auf dem schnellsten verfügbaren Weg von dir zu entfernen.\n• Kriechen: Das Ziel fällt hin und beendet dann seinen Zug.\n• Halt: Das Ziel bewegt sich nicht und unternimmt keine Aktionen.\nWenn du diesen Zauber mit einem Zauberplatz der 2. Stufe oder höher wirkst, kannst du für jede Platzstufe über der 2. eine zusätzliche Kreatur in Reichweite als Ziel wählen. +Spell/&CommandSpellDescription=Sie sprechen einen einwortigen Befehl zu einer Kreatur in Reichweite, die Sie sehen können. Das Ziel muss einen Weisheitsrettungswurf bestehen oder dem Befehl in seinem nächsten Zug folgen. Sie können nur Kreaturen befehligen, mit denen Sie eine gemeinsame Sprache sprechen, dazu gehören alle Humanoiden. Um einer nicht-humanoiden Kreatur Befehle zu erteilen, müssen Sie Drakonisch für Drachen, Elbisch für Feenwesen, Riesisch für Riesen, Höllisch für Unholde und Terranisch für Elementare beherrschen. Es gibt folgende Befehle:\n• Annäherung: Das Ziel bewegt sich auf dem kürzesten und direktesten Weg auf Sie zu und beendet seinen Zug, wenn es sich Ihnen näher als 1,52 m nähert.\n• Fliehen: Das Ziel verbringt seinen Zug damit, sich auf dem schnellsten verfügbaren Weg von Ihnen wegzubewegen.\n• Kriechen: Das Ziel fällt hin und beendet dann seinen Zug.\n• Halt: Das Ziel bewegt sich nicht und unternimmt keine Aktionen.\nWenn Sie diesen Zauber mit einem Zauberplatz der 2. Stufe oder höher wirken, können Sie für jede Zauberplatzstufe über der 2. eine zusätzliche Kreatur in Reichweite als Ziel wählen. Spell/&CommandSpellTitle=Befehl Spell/&DissonantWhispersDescription=Du flüsterst eine dissonante Melodie, die nur eine Kreatur deiner Wahl in Reichweite hören kann, und quälst sie mit schrecklichen Schmerzen. Das Ziel muss einen Weisheitsrettungswurf machen. Bei einem misslungenen Rettungswurf erleidet es 3W6 psychischen Schaden und muss sofort seine Reaktion, falls möglich, nutzen, um sich so weit wie seine Geschwindigkeit es zulässt von dir wegzubewegen. Die Kreatur bewegt sich nicht auf offensichtlich gefährliches Gelände, wie etwa ein Feuer oder eine Grube. Bei einem erfolgreichen Rettungswurf erleidet das Ziel nur halb so viel Schaden und muss sich nicht wegbewegen. Wenn du diesen Zauber mit einem Zauberplatz der 2. Stufe oder höher wirkst, erhöht sich der Schaden um 1W6 für jede Stufe über der 1. Spell/&DissonantWhispersTitle=Dissonantes Flüstern diff --git a/SolastaUnfinishedBusiness/Translations/en/Spells/Spells01-en.txt b/SolastaUnfinishedBusiness/Translations/en/Spells/Spells01-en.txt index 54b9ed713b..9c1ac28405 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Spells/Spells01-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Spells/Spells01-en.txt @@ -86,7 +86,7 @@ Spell/&ChaosBoltDescription=Make a ranged spell attack against a target. On a hi Spell/&ChaosBoltTitle=Chaos Bolt Spell/&ChromaticOrbDescription=You hurl a 4-inch-diameter sphere of energy at a creature that you can see within range. You choose acid, cold, fire, lightning, poison, or thunder for the type of orb you create, and then make a ranged spell attack against the target. If the attack hits, the creature takes 3d8 damage of the type you chose. Spell/&ChromaticOrbTitle=Chromatic Orb -Spell/&CommandSpellDescription=You speak a one-word command to a creature you can see within range. The target must succeed on a Wisdom saving throw or follow the command on its next turn. The spell only has effect on humanoids. Commands follow:\n• Approach: The target moves toward you by the shortest and most direct route, ending its turn if it moves within 5 feet of you.\n• Flee: The target spends its turn moving away from you by the fastest available means.\n• Grovel: The target falls prone and then ends its turn.\n• Halt: The target doesn't move and takes no actions.\nWhen you cast this spell using a spell slot of 2nd level or higher, you may target an additional creature within range for each slot level above 2nd. +Spell/&CommandSpellDescription=You speak a one-word command to a creature you can see within range. The target must succeed on a Wisdom saving throw or follow the command on its next turn. You can only command creatures you share a language with, which include all humanoids. To command a non-humanoid creature, you must know Draconic for Dragons, Elvish for Fey, Giant for Giants, Infernal for Fiends and Terran for Elementals. Commands follow:\n• Approach: The target moves toward you by the shortest and most direct route, ending its turn if it moves within 5 feet of you.\n• Flee: The target spends its turn moving away from you by the fastest available means.\n• Grovel: The target falls prone and then ends its turn.\n• Halt: The target doesn't move and takes no actions.\nWhen you cast this spell using a spell slot of 2nd level or higher, you may target an additional creature within range for each slot level above 2nd. Spell/&CommandSpellTitle=Command Spell/&DissonantWhispersDescription=You whisper a discordant melody that only one creature of your choice within range can hear, wracking it with terrible pain. The target must make a Wisdom saving throw. On a failed save, it takes 3d6 psychic damage and must immediately use its reaction, if available, to move as far as its speed allows away from you. The creature doesn't move into obviously dangerous ground, such as a fire or a pit. On a successful save, the target takes half as much damage and doesn't have to move away. When you cast this spell using a spell slot of 2nd level or higher, the damage increases by 1d6 for each slot level above 1st. Spell/&DissonantWhispersTitle=Dissonant Whispers diff --git a/SolastaUnfinishedBusiness/Translations/es/Spells/Spells01-es.txt b/SolastaUnfinishedBusiness/Translations/es/Spells/Spells01-es.txt index 17683936cc..c26459ec4b 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Spells/Spells01-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Spells/Spells01-es.txt @@ -86,7 +86,7 @@ Spell/&ChaosBoltDescription=Realiza un ataque de hechizo a distancia contra un o Spell/&ChaosBoltTitle=Rayo del caos Spell/&ChromaticOrbDescription=Lanzas una esfera de energía de 4 pulgadas de diámetro a una criatura que puedas ver dentro del alcance. Eliges ácido, frío, fuego, relámpago, veneno o trueno como el tipo de orbe que creas y luego realizas un ataque de hechizo a distancia contra el objetivo. Si el ataque impacta, la criatura recibe 3d8 puntos de daño del tipo que elegiste. Spell/&ChromaticOrbTitle=Orbe cromático -Spell/&CommandSpellDescription=Pronuncias una orden de una palabra a una criatura que puedas ver dentro del alcance. El objetivo debe superar una tirada de salvación de Sabiduría o seguir la orden en su siguiente turno. El conjuro solo tiene efecto sobre humanoides. Las órdenes son las siguientes:\n• Acercarse: el objetivo se mueve hacia ti por la ruta más corta y directa, y termina su turno si se mueve a 5 pies o menos de ti.\n• Huir: el objetivo pasa su turno alejándose de ti por el medio más rápido disponible.\n• Arrastrarse: el objetivo cae boca abajo y luego termina su turno.\n• Detenerse: el objetivo no se mueve y no realiza ninguna acción.\nCuando lanzas este conjuro usando un espacio de conjuro de nivel 2 o superior, puedes seleccionar una criatura adicional dentro del alcance por cada nivel de espacio por encima del 2. +Spell/&CommandSpellDescription=Pronuncias una orden de una palabra a una criatura que puedas ver dentro del alcance. El objetivo debe superar una tirada de salvación de Sabiduría o seguir la orden en su siguiente turno. Solo puedes dar órdenes a criaturas con las que compartes un idioma, lo que incluye a todos los humanoides. Para dar órdenes a una criatura no humanoide, debes saber Dracónico para Dragones, Élfico para Fey, Gigante para Gigantes, Infernal para Demonios y Terrano para Elementales. Las órdenes son las siguientes:\n• Acercarse: el objetivo se mueve hacia ti por la ruta más corta y directa, y termina su turno si se mueve a 5 pies o menos de ti.\n• Huir: el objetivo pasa su turno alejándose de ti por el medio más rápido disponible.\n• Arrastrarse: el objetivo cae boca abajo y luego termina su turno.\n• Detenerse: el objetivo no se mueve y no realiza ninguna acción.\nCuando lanzas este hechizo usando un espacio de hechizo de nivel 2 o superior, puedes seleccionar una criatura adicional dentro del alcance por cada nivel de espacio por encima del 2. Spell/&CommandSpellTitle=Dominio Spell/&DissonantWhispersDescription=Susurras una melodía discordante que solo una criatura de tu elección que esté dentro del alcance puede oír, atormentándola con un dolor terrible. El objetivo debe realizar una tirada de salvación de Sabiduría. Si falla, sufre 3d6 puntos de daño psíquico y debe usar inmediatamente su reacción, si está disponible, para alejarse de ti tanto como su velocidad le permita. La criatura no se mueve hacia un terreno obviamente peligroso, como un fuego o un pozo. Si tiene éxito, el objetivo sufre la mitad del daño y no tiene que alejarse. Cuando lanzas este conjuro usando un espacio de conjuro de nivel 2 o superior, el daño aumenta en 1d6 por cada nivel de espacio por encima del 1. Spell/&DissonantWhispersTitle=Susurros disonantes diff --git a/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells01-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells01-fr.txt index 399d97fde6..5638291100 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells01-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells01-fr.txt @@ -86,7 +86,7 @@ Spell/&ChaosBoltDescription=Lancez une attaque à distance contre une cible. En Spell/&ChaosBoltTitle=Éclair du chaos Spell/&ChromaticOrbDescription=Vous lancez une sphère d'énergie de 10 cm de diamètre sur une créature que vous pouvez voir à portée. Vous choisissez l'acide, le froid, le feu, la foudre, le poison ou le tonnerre comme type d'orbe que vous créez, puis effectuez une attaque de sort à distance contre la cible. Si l'attaque touche, la créature subit 3d8 dégâts du type que vous avez choisi. Spell/&ChromaticOrbTitle=Orbe chromatique -Spell/&CommandSpellDescription=Vous prononcez un ordre d'un seul mot à une créature visible à portée. La cible doit réussir un jet de sauvegarde de Sagesse ou suivre l'ordre à son prochain tour. Le sort n'a d'effet que sur les humanoïdes. Les ordres sont les suivants :\n• Approche : la cible se déplace vers vous par le chemin le plus court et le plus direct, mettant fin à son tour si elle se déplace à 1,50 mètre ou moins de vous.\n• Fuir : la cible passe son tour à s'éloigner de vous par le moyen le plus rapide disponible.\n• Ramper : la cible tombe à terre puis termine son tour.\n• Halte : la cible ne bouge pas et n'entreprend aucune action.\nLorsque vous lancez ce sort en utilisant un emplacement de sort de niveau 2 ou supérieur, vous pouvez cibler une créature supplémentaire à portée pour chaque niveau d'emplacement au-dessus du niveau 2. +Spell/&CommandSpellDescription=Vous donnez un ordre d'un seul mot à une créature que vous pouvez voir à portée. La cible doit réussir un jet de sauvegarde de Sagesse ou suivre l'ordre à son prochain tour. Vous ne pouvez commander qu'aux créatures avec lesquelles vous partagez une langue, ce qui inclut tous les humanoïdes. Pour commander une créature non-humanoïde, vous devez connaître le draconique pour les dragons, l'elfique pour les fées, le géant pour les géants, l'infernal pour les démons et le terran pour les élémentaires. Les ordres sont les suivants :\n• Approche : la cible se déplace vers vous par le chemin le plus court et le plus direct, mettant fin à son tour si elle se déplace à 1,50 mètre ou moins de vous.\n• Fuir : la cible passe son tour à s'éloigner de vous par le moyen le plus rapide disponible.\n• Ramper : la cible tombe à terre puis termine son tour.\n• Halte : la cible ne bouge pas et n'entreprend aucune action.\nLorsque vous lancez ce sort en utilisant un emplacement de sort de niveau 2 ou supérieur, vous pouvez cibler une créature supplémentaire à portée pour chaque niveau d'emplacement au-dessus du niveau 2. Spell/&CommandSpellTitle=Commande Spell/&DissonantWhispersDescription=Vous murmurez une mélodie discordante que seule une créature de votre choix à portée peut entendre, la secouant d'une douleur terrible. La cible doit réussir un jet de sauvegarde de Sagesse. En cas d'échec, elle subit 3d6 dégâts psychiques et doit immédiatement utiliser sa réaction, si elle en a la possibilité, pour s'éloigner de vous aussi loin que sa vitesse le lui permet. La créature ne se déplace pas sur un terrain manifestement dangereux, comme un feu ou une fosse. En cas de réussite, la cible subit la moitié des dégâts et n'a pas à s'éloigner. Lorsque vous lancez ce sort en utilisant un emplacement de sort de niveau 2 ou supérieur, les dégâts augmentent de 1d6 pour chaque niveau d'emplacement au-dessus du 1er. Spell/&DissonantWhispersTitle=Chuchotements dissonants diff --git a/SolastaUnfinishedBusiness/Translations/it/Spells/Spells01-it.txt b/SolastaUnfinishedBusiness/Translations/it/Spells/Spells01-it.txt index b8224104da..5039c4eadc 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Spells/Spells01-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Spells/Spells01-it.txt @@ -86,7 +86,7 @@ Spell/&ChaosBoltDescription=Esegui un attacco magico a distanza contro un bersag Spell/&ChaosBoltTitle=Fulmine del Caos Spell/&ChromaticOrbDescription=Scagli una sfera di energia di 4 pollici di diametro contro una creatura che puoi vedere entro il raggio d'azione. Scegli acido, freddo, fuoco, fulmine, veleno o tuono per il tipo di sfera che crei, quindi esegui un attacco magico a distanza contro il bersaglio. Se l'attacco colpisce, la creatura subisce 3d8 danni del tipo che hai scelto. Spell/&ChromaticOrbTitle=Sfera cromatica -Spell/&CommandSpellDescription=Pronuncia un comando di una sola parola a una creatura che puoi vedere entro il raggio d'azione. Il bersaglio deve superare un tiro salvezza su Saggezza o seguire il comando nel suo turno successivo. L'incantesimo ha effetto solo sugli umanoidi. I comandi seguono:\n• Avvicinamento: il bersaglio si muove verso di te attraverso la via più breve e diretta, terminando il suo turno se si muove entro 5 piedi da te.\n• Fuggire: il bersaglio trascorre il suo turno allontanandosi da te con il mezzo più veloce disponibile.\n• Umiliarsi: il bersaglio cade prono e poi termina il suo turno.\n• Arrestare: il bersaglio non si muove e non esegue azioni.\nQuando lanci questo incantesimo usando uno slot incantesimo di 2° livello o superiore, puoi prendere di mira una creatura aggiuntiva entro il raggio d'azione per ogni livello di slot superiore al 2°. +Spell/&CommandSpellDescription=Pronuncia un comando di una sola parola a una creatura che puoi vedere entro il raggio d'azione. Il bersaglio deve superare un tiro salvezza su Saggezza o eseguire il comando nel suo turno successivo. Puoi comandare solo creature con cui condividi una lingua, inclusi tutti gli umanoidi. Per comandare una creatura non umanoide, devi conoscere il Draconico per i Draghi, l'Elfico per i Fati, il Gigante per i Giganti, l'Infernale per i Demoni e il Terran per gli Elementali. I comandi seguono:\n• Avvicinamento: il bersaglio si muove verso di te attraverso la via più breve e diretta, terminando il suo turno se si muove entro 5 piedi da te.\n• Fuggire: il bersaglio trascorre il suo turno allontanandosi da te con il mezzo più veloce disponibile.\n• Umiliarsi: il bersaglio cade prono e poi termina il suo turno.\n• Arrestare: il bersaglio non si muove e non esegue azioni.\nQuando lanci questo incantesimo usando uno slot incantesimo di 2° livello o superiore, puoi prendere di mira una creatura aggiuntiva entro il raggio d'azione per ogni livello di slot superiore al 2°. Spell/&CommandSpellTitle=Comando Spell/&DissonantWhispersDescription=Sussurri una melodia discordante che solo una creatura a tua scelta entro il raggio d'azione può sentire, lacerandola con un dolore terribile. Il bersaglio deve effettuare un tiro salvezza su Saggezza. Se fallisce il tiro salvezza, subisce 3d6 danni psichici e deve usare immediatamente la sua reazione, se disponibile, per allontanarsi da te il più lontano possibile dalla sua velocità. La creatura non si sposta in un terreno palesemente pericoloso, come un fuoco o una fossa. Se supera il tiro salvezza, il bersaglio subisce la metà dei danni e non deve allontanarsi. Quando lanci questo incantesimo usando uno slot incantesimo di 2° livello o superiore, il danno aumenta di 1d6 per ogni livello di slot superiore al 1°. Spell/&DissonantWhispersTitle=Sussurri dissonanti diff --git a/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells01-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells01-ja.txt index b0e6e8f797..5d55bd190a 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells01-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells01-ja.txt @@ -86,7 +86,7 @@ Spell/&ChaosBoltDescription=ターゲットに対して遠隔呪文攻撃を行 Spell/&ChaosBoltTitle=カオスボルト Spell/&ChromaticOrbDescription=範囲内に見える生き物に直径 4 インチのエネルギーの球を投げます。作成するオーブの種類として酸、冷気、火、稲妻、毒、または雷を選択し、ターゲットに対して遠隔呪文攻撃を行います。攻撃が命中した場合、そのクリーチャーはあなたが選んだタイプに 3d8 のダメージを受けます。 Spell/&ChromaticOrbTitle=クロマティックオーブ -Spell/&CommandSpellDescription=範囲内にいる、あなたが見ることができるクリーチャーに、一言の命令を告げる。対象は、判断力セーヴィング・スローに成功するか、次のターンに命令に従わなければならない。この呪文はヒューマノイドにのみ効果がある。命令は以下の通り:\n• 接近: 対象は最短かつ最も直接的な経路であなたに向かって移動し、対象から 5 フィート以内に移動したらターンを終了する。\n• 逃走: 対象は、利用可能な最速の手段であなたから離れるターンを過ごす。\n• 卑屈: 対象はうつ伏せになり、その後ターンを終了する。\n• 停止: 対象は移動せず、アクションも行わない。\nこの呪文を 2 レベル以上の呪文スロットを使用して発動する場合、2 レベルを超える各スロット レベルごとに、範囲内にいるクリーチャーをさらに 1 体ターゲットにすることができる。 +Spell/&CommandSpellDescription=あなたは範囲内にいる、あなたが見ることができるクリーチャーに、一言の命令を告げる。対象は【判断力】セーヴィング・スローに成功するか、次のターンに命令に従わなければならない。あなたは、言語を共有するクリーチャーにのみ命令できる。これにはすべてのヒューマノイドが含まれる。非ヒューマノイドのクリーチャーに命令するには、ドラゴンはドラゴン語、フェイはエルフ語、巨人は巨人語、悪魔は地獄語、エレメンタルは地球語を知っている必要がある。命令は以下のとおり:\n• 接近: 対象は最短かつ最も直接的な経路であなたに向かって移動し、対象があなたから 5 フィート以内に移動した場合にターンを終了する。\n• 逃走: 対象は、利用可能な最速の手段であなたから離れることにターンを費やす。\n• 卑屈: 対象はうつ伏せになり、その後ターンを終了する。\n• 停止: 対象は移動せず、アクションも行わない。\nこの呪文を 2 レベル以上の呪文スロットを使用して発動する場合、2 レベルを超える各スロット レベルごとに、範囲内の追加クリーチャーをターゲットにすることができる。 Spell/&CommandSpellTitle=指示 Spell/&DissonantWhispersDescription=範囲内にいる選択した 1 体のクリーチャーにのみ聞こえる不協和音のメロディーをささやき、そのクリーチャーにひどい苦痛を与えます。ターゲットは【判断力】セーヴィング スローを行わなければなりません。セーヴィング スローに失敗すると、ターゲットは 3d6 の精神ダメージを受け、可能であれば、即座にリアクションを使用して、移動速度が許す限り遠くまで移動して、ターゲットから離れなければなりません。クリーチャーは、火や穴など、明らかに危険な地面には移動しません。セーヴィング スローに成功すると、ターゲットは半分のダメージを受け、離れる必要もありません。この呪文を 2 レベル以上の呪文スロットを使用して発動すると、1 レベルを超える各スロット レベルごとにダメージが 1d6 増加します。 Spell/&DissonantWhispersTitle=不協和音のささやき diff --git a/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells01-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells01-ko.txt index 60f89d7d16..f19e0159ec 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells01-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells01-ko.txt @@ -86,7 +86,7 @@ Spell/&ChaosBoltDescription=대상에게 원거리 주문 공격을 합니다. Spell/&ChaosBoltTitle=카오스볼트 Spell/&ChromaticOrbDescription=범위 내에서 볼 수 있는 생물에게 직경 4인치의 에너지 구체를 던집니다. 생성하는 오브 유형에 대해 산성, 냉기, 불, 번개, 독 또는 천둥을 선택한 다음 대상에 대해 원거리 주문 공격을 가합니다. 공격이 적중하면 생물은 선택한 유형의 3d8 피해를 입습니다. Spell/&ChromaticOrbTitle=색채의 오브 -Spell/&CommandSpellDescription=당신은 범위 내에서 볼 수 있는 생물에게 한 단어 명령을 내립니다. 대상은 지혜 구원 굴림에 성공해야 하며, 그렇지 않으면 다음 턴에 명령을 따라야 합니다. 이 주문은 인간형 생물에게만 효과가 있습니다. 명령은 다음과 같습니다.\n• 접근: 대상은 가장 짧고 직접적인 경로로 당신을 향해 이동하며, 5피트 이내로 이동하면 턴을 끝냅니다.\n• 도망: 대상은 가능한 가장 빠른 수단으로 당신에게서 멀어지며 턴을 보냅니다.\n• 굴욕: 대상은 엎드린 다음 턴을 끝냅니다.\n• 정지: 대상은 움직이지 않고 아무런 행동도 취하지 않습니다.\n2레벨 이상의 주문 슬롯을 사용하여 이 주문을 시전할 때, 2레벨 이상의 슬롯 레벨마다 범위 내에 있는 추가 생물을 대상으로 지정할 수 있습니다. +Spell/&CommandSpellDescription=당신은 범위 내에서 볼 수 있는 생물에게 한 단어 명령을 내립니다. 대상은 지혜 구원 굴림에 성공하거나 다음 턴에 명령을 따라야 합니다. 당신은 모든 인간형을 포함하여 당신과 언어를 공유하는 생물에게만 명령을 내릴 수 있습니다. 비인간형 생물을 명령하려면 드래곤의 경우 드라코닉, 페이의 경우 엘프, 거인의 경우 자이언트, 악마의 경우 인페르날, 엘리멘탈의 경우 테란을 알아야 합니다. 명령은 다음과 같습니다.\n• 접근: 대상은 가장 짧고 직접적인 경로로 당신에게 다가오며, 5피트 이내로 이동하면 턴을 끝냅니다.\n• 도망: 대상은 가능한 가장 빠른 수단으로 당신에게서 멀어지며 턴을 보냅니다.\n• 굴욕: 대상은 엎드린 다음 턴을 끝냅니다.\n• 정지: 대상은 움직이지 않고 아무런 행동도 취하지 않습니다.\n2레벨 이상의 주문 슬롯을 사용하여 이 주문을 시전할 때 2레벨을 넘는 슬롯 레벨마다 범위 내에 있는 추가 생물을 대상으로 지정할 수 있습니다. Spell/&CommandSpellTitle=명령 Spell/&DissonantWhispersDescription=당신은 범위 내에서 당신이 선택한 한 생명체만 들을 수 있는 불협화음의 멜로디를 속삭이며, 끔찍한 고통으로 그 생명체를 괴롭힙니다. 대상은 지혜 구원 굴림을 해야 합니다. 구원에 실패하면, 대상은 3d6의 사이킥 피해를 입고, 가능하다면 즉시 반응을 사용하여 속도가 허락하는 한 멀리 당신에게서 멀어져야 합니다. 그 생명체는 불이나 구덩이와 같이 명백히 위험한 곳으로 이동하지 않습니다. 구원에 성공하면, 대상은 절반의 피해를 입고, 멀어질 필요가 없습니다. 2레벨 이상의 주문 슬롯을 사용하여 이 주문을 시전하면, 1레벨 위의 슬롯 레벨마다 피해가 1d6씩 증가합니다. Spell/&DissonantWhispersTitle=불협화음의 속삭임 diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells01-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells01-pt-BR.txt index 9a5b8ffaa6..6510d7dea7 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells01-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells01-pt-BR.txt @@ -86,7 +86,7 @@ Spell/&ChaosBoltDescription=Faça um ataque mágico à distância contra um alvo Spell/&ChaosBoltTitle=Raio do Caos Spell/&ChromaticOrbDescription=Você arremessa uma esfera de energia de 4 polegadas de diâmetro em uma criatura que você pode ver dentro do alcance. Você escolhe ácido, frio, fogo, relâmpago, veneno ou trovão para o tipo de orbe que você cria, e então faz um ataque de magia à distância contra o alvo. Se o ataque acertar, a criatura sofre 3d8 de dano do tipo que você escolheu. Spell/&ChromaticOrbTitle=Orbe Cromático -Spell/&CommandSpellDescription=Você fala um comando de uma palavra para uma criatura que você pode ver dentro do alcance. O alvo deve ter sucesso em um teste de resistência de Sabedoria ou seguir o comando em seu próximo turno. A magia só tem efeito em humanoides. Os comandos seguem:\n• Aproximar: O alvo se move em sua direção pela rota mais curta e direta, terminando seu turno se ele se mover a 1,5 m de você.\n• Fugir: O alvo gasta seu turno se afastando de você pelo meio mais rápido disponível.\n• Rastejar: O alvo cai de bruços e então termina seu turno.\n• Parar: O alvo não se move e não realiza nenhuma ação.\nQuando você conjura esta magia usando um espaço de magia de 2º nível ou superior, você pode escolher uma criatura adicional dentro do alcance para cada nível de espaço acima de 2º. +Spell/&CommandSpellDescription=Você fala um comando de uma palavra para uma criatura que você pode ver dentro do alcance. O alvo deve ser bem-sucedido em um teste de resistência de Sabedoria ou seguir o comando em seu próximo turno. Você só pode comandar criaturas com as quais você compartilha um idioma, o que inclui todos os humanoides. Para comandar uma criatura não humanoide, você deve saber Dracônico para Dragões, Élfico para Feéricos, Gigante para Gigantes, Infernal para Demônios e Terrano para Elementais. Os comandos seguem:\n• Aproximar-se: O alvo se move em sua direção pela rota mais curta e direta, terminando seu turno se ele se mover a 1,5 m de você.\n• Fugir: O alvo gasta seu turno se afastando de você pelo meio mais rápido disponível.\n• Rastejar: O alvo cai e então termina seu turno.\n• Parar: O alvo não se move e não realiza nenhuma ação.\nQuando você conjura esta magia usando um espaço de magia de 2º nível ou superior, você pode escolher uma criatura adicional dentro do alcance para cada nível de espaço acima de 2º. Spell/&CommandSpellTitle=Comando Spell/&DissonantWhispersDescription=Você sussurra uma melodia dissonante que somente uma criatura de sua escolha dentro do alcance pode ouvir, atormentando-a com uma dor terrível. O alvo deve fazer um teste de resistência de Sabedoria. Em um teste falho, ele sofre 3d6 de dano psíquico e deve usar imediatamente sua reação, se disponível, para se mover o mais longe que sua velocidade permitir para longe de você. A criatura não se move para um terreno obviamente perigoso, como uma fogueira ou um poço. Em um teste bem-sucedido, o alvo sofre metade do dano e não precisa se afastar. Quando você conjura esta magia usando um espaço de magia de 2º nível ou superior, o dano aumenta em 1d6 para cada nível de espaço acima do 1º. Spell/&DissonantWhispersTitle=Sussurros Dissonantes diff --git a/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells01-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells01-ru.txt index ac87e71ba8..290278e778 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells01-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells01-ru.txt @@ -86,7 +86,7 @@ Spell/&ChaosBoltDescription=Вы бросаете волнистую, трепе Spell/&ChaosBoltTitle=Снаряд хаоса Spell/&ChromaticOrbDescription=Вы бросаете 4-дюймовую сферу энергии в существо, которое видите в пределах дистанции. Выберите звук, кислоту, огонь, холод, электричество или яд при создании сферы, а затем совершите по цели дальнобойную атаку заклинанием. Если атака попадает, существо получает 3d8 урона выбранного вида. Spell/&ChromaticOrbTitle=Цветной шарик -Spell/&CommandSpellDescription=Вы произносите однословную команду существу, которое видите в пределах досягаемости. Цель должна преуспеть в спасброске Мудрости или выполнить команду на следующем ходу. Заклинание действует только на гуманоидов. Команды следуют:\n• Приближение: цель движется к вам по кратчайшему и самому прямому маршруту, заканчивая свой ход, если она движется в пределах 5 футов от вас.\n• Бегство: цель проводит свой ход, удаляясь от вас максимально быстрым доступным способом.\n• Пресмыкание: цель падает ничком и затем заканчивает свой ход.\n• Остановка: цель не двигается и не совершает никаких действий.\nКогда вы произносите это заклинание, используя ячейку заклинания 2-го уровня или выше, вы можете нацелить дополнительное существо в пределах досягаемости для каждого уровня ячейки выше 2-го. +Spell/&CommandSpellDescription=Вы произносите однословную команду существу, которое видите в пределах досягаемости. Цель должна преуспеть в спасброске Мудрости или выполнить команду на следующем ходу. Вы можете командовать только существами, с которыми у вас общий язык, включая всех гуманоидов. Чтобы командовать негуманоидным существом, вы должны знать Драконий для драконов, Эльфийский для фей, Гигантский для великанов, Инфернальный для демонов и Терранский для элементалей. Команды следующие:\n• Приближение: цель движется к вам по кратчайшему и самому прямому маршруту, заканчивая свой ход, если она движется в пределах 5 футов от вас.\n• Бегство: цель проводит свой ход, удаляясь от вас максимально быстрым доступным способом.\n• Пресмыкание: цель падает ничком и затем заканчивает свой ход.\n• Остановка: цель не двигается и не предпринимает никаких действий.\nКогда вы произносите это заклинание, используя ячейку заклинания 2-го уровня или выше, вы можете выбрать в качестве цели дополнительное существо в пределах дальности для каждого уровня ячейки выше 2-го. Spell/&CommandSpellTitle=Команда Spell/&DissonantWhispersDescription=Вы шепчете диссонирующую мелодию, которую может услышать только одно существо по вашему выбору в пределах досягаемости, причиняя ему ужасную боль. Цель должна сделать спасбросок Мудрости. При провале она получает 3d6 психического урона и должна немедленно использовать свою реакцию, если она доступна, чтобы отойти от вас как можно дальше, насколько позволяет ее скорость. Существо не перемещается в явно опасную местность, такую ​​как огонь или яма. При успешном спасброске цель получает половину урона и ей не нужно отходить. Когда вы произносите это заклинание, используя ячейку заклинания 2-го уровня или выше, урон увеличивается на 1d6 за каждый уровень ячейки выше 1-го. Spell/&DissonantWhispersTitle=Диссонансный шепот diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells01-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells01-zh-CN.txt index c836ea7198..b12692d89c 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells01-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells01-zh-CN.txt @@ -86,7 +86,7 @@ Spell/&ChaosBoltDescription=对目标进行远程法术攻击。命中后,目 Spell/&ChaosBoltTitle=混乱箭 Spell/&ChromaticOrbDescription=你向范围内你能看到的一个生物投掷一个直径 4 寸的能量球。你选择强酸、冷冻、火焰、闪电、毒素或雷鸣作为你创造的球体类型,然后对目标进行远程法术攻击。如果攻击命中,该生物将受到你选择类型的 3d8 点伤害。 Spell/&ChromaticOrbTitle=繁彩球 -Spell/&CommandSpellDescription=你对范围内可见的生物说出一个单词命令。目标必须成功通过感知豁免检定,否则将在下一回合执行命令。此法术仅对人形生物有效。命令如下:\n• 接近:目标以最短、最直接的路线向你移动,如果它移动到你 5 英尺以内,则结束其回合。\n• 逃跑:目标在其回合中以最快的方式远离你。\n• 卑躬屈膝:目标倒下,然后结束其回合。\n• 停止:目标不移动,不采取任何行动。\n当你使用 2 级或更高级别的法术位施放此法术时,你可以将范围内的生物作为目标,每高于 2 级一个法术位等级。 +Spell/&CommandSpellDescription=你对范围内可见的生物说出一个单词命令。目标必须成功通过感知豁免检定,否则在下一回合执行命令。你只能命令与你同语的生物,包括所有类人生物。要命令非类人生物,你必须知道龙语(龙)、精灵语(精类)、巨人语(巨人)、地狱语(恶魔)和土语(元素)。命令如下:\n• 接近:目标以最短最直接的路线向你移动,如果它移动到你 5 英尺以内,则结束回合。\n• 逃跑:目标在其回合中以最快的方式远离你。\n• 卑躬屈膝:目标倒下,然后结束回合。\n• 停止:目标不移动,不采取任何行动。\n当你使用 2 级或更高级别的法术位施放此法术时,你可以将范围内的生物作为目标,每个高于 2 级的法术位等级都增加一个。 Spell/&CommandSpellTitle=命令 Spell/&DissonantWhispersDescription=你低声吟唱着一段刺耳的旋律,只有你选择的范围内的一个生物可以听到,这让目标痛苦不堪。目标必须进行一次感知豁免检定。如果豁免失败,目标将受到 3d6 精神伤害,并且必须立即使用其反应(如果可用)以尽可能快的速度远离你。该生物不会移动到明显危险的地方,例如火或坑。如果豁免成功,目标受到的伤害减半,并且不必离开。当你使用 2 级或更高级别的法术位施放此法术时,伤害每高于 1 级法术位等级增加 1d6。 Spell/&DissonantWhispersTitle=不和谐的私语 From 5a008b79ac8a7da90aa3c6375c0e7963cb5a6f4e Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Thu, 5 Sep 2024 20:16:17 -0700 Subject: [PATCH 047/212] fix vanilla brain - potential null exception on UpdateContextElementsIfNecessary - not setting up-to-date status to false on InvalidateMovePositionsOnly --- .../Patches/BrainPatcher.cs | 80 +++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 SolastaUnfinishedBusiness/Patches/BrainPatcher.cs diff --git a/SolastaUnfinishedBusiness/Patches/BrainPatcher.cs b/SolastaUnfinishedBusiness/Patches/BrainPatcher.cs new file mode 100644 index 0000000000..dbeb31824f --- /dev/null +++ b/SolastaUnfinishedBusiness/Patches/BrainPatcher.cs @@ -0,0 +1,80 @@ +using System.Collections; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using HarmonyLib; +using JetBrains.Annotations; +using TA.AI; + +namespace SolastaUnfinishedBusiness.Patches; + +[UsedImplicitly] +public static class BrainPatcher +{ + //BUGFIX: potential null exception on vanilla code + [HarmonyPatch(typeof(Brain), nameof(Brain.UpdateContextElementsIfNecessary))] + [SuppressMessage("Minor Code Smell", "S101:Types should be named in PascalCase", Justification = "Patch")] + [UsedImplicitly] + public static class UpdateContextElementsIfNecessary_Patch + { + [UsedImplicitly] + public static bool Prefix(out IEnumerator __result, Brain __instance, ContextType contextType) + { + __result = UpdateContextElementsIfNecessary(__instance, contextType); + + return false; + } + + private static IEnumerator UpdateContextElementsIfNecessary(Brain brain, ContextType contextType) + { + List decisionContexts = []; + + //BEGIN PATCH + //moved this off the IF block to ensure ELSE block won't fail if contexts doesn't have context type + //END PATCH + + brain.contexts.TryAdd(contextType, decisionContexts); + + if (!brain.contextUpToDateStatus.TryGetValue(contextType, out var isUpToDate)) + { + brain.contextUpToDateStatus.Add(contextType, true); + decisionContexts = brain.contexts[contextType]; + } + else + { + decisionContexts = brain.contexts[contextType]; + } + + if (isUpToDate) + { + yield break; + } + + decisionContexts.Clear(); + + yield return brain.BuildContextElements(contextType, decisionContexts); + + brain.contextUpToDateStatus[contextType] = true; + } + } + + //BUGFIX: vanilla was setting this to true when in reality should be false + [HarmonyPatch(typeof(Brain), nameof(Brain.InvalidateMovePositionsOnly))] + [SuppressMessage("Minor Code Smell", "S101:Types should be named in PascalCase", Justification = "Patch")] + [UsedImplicitly] + public static class InvalidateMovePositionsOnly_Patch + { + [UsedImplicitly] + public static bool Prefix(Brain __instance) + { + if (__instance.contexts.TryGetValue(ContextType.MovePosition, out var decisionContextList)) + { + decisionContextList.Clear(); + } + + __instance.contextUpToDateStatus.TryAdd(ContextType.MovePosition, false); + __instance.contextUpToDateStatus[ContextType.MovePosition] = false; + + return false; + } + } +} From 1b14a14e60f443afb271043990c7b03968b3f887 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Fri, 6 Sep 2024 08:47:37 -0700 Subject: [PATCH 048/212] prefer AllConditionsForEnumeration instead of AllConditions to avoid any un-welcome scenarios on enumerators change --- .../Api/GameExtensions/RulesetActorExtensions.cs | 7 ++++--- .../GameExtensions/RulesetCharacterExtensions.cs | 4 ++-- .../Behaviors/CustomSituationalContext.cs | 6 +++--- SolastaUnfinishedBusiness/Feats/ClassFeats.cs | 3 ++- .../FightingStyles/Interception.cs | 5 +++-- .../Models/CustomConditionsContext.cs | 8 ++++---- .../Models/LightingAndObscurementContext.cs | 2 +- .../Models/SpellPointsContext.cs | 2 +- SolastaUnfinishedBusiness/Models/ToolsContext.cs | 12 +++++++----- .../Patches/CharacterActionAttackPatcher.cs | 13 ++++++------- .../Patches/CharacterActionMagicEffectPatcher.cs | 13 ++++++------- ...iderationsInfluenceFearSourceProximityPatcher.cs | 9 ++++----- .../Patches/CursorLocationSelectTargetPatcher.cs | 2 +- .../Patches/RulesetActorPatcher.cs | 12 ++++++------ .../Patches/RulesetCharacterPatcher.cs | 5 ++--- .../RulesetImplementationManagerLocationPatcher.cs | 2 +- .../Spells/SpellBuildersLevel04.cs | 2 +- .../Subclasses/CircleOfTheCosmos.cs | 2 +- .../Subclasses/CircleOfTheLife.cs | 2 +- SolastaUnfinishedBusiness/Subclasses/OathOfDread.cs | 11 +++-------- .../Subclasses/WayOfTheDiscordance.cs | 4 ++-- .../Subclasses/WayOfTheStormSoul.cs | 2 +- .../Subclasses/WayOfTheWealAndWoe.cs | 2 +- .../Validators/ValidatorsCharacter.cs | 5 ++--- 24 files changed, 65 insertions(+), 70 deletions(-) diff --git a/SolastaUnfinishedBusiness/Api/GameExtensions/RulesetActorExtensions.cs b/SolastaUnfinishedBusiness/Api/GameExtensions/RulesetActorExtensions.cs index 9694a5dc0d..7c21852993 100644 --- a/SolastaUnfinishedBusiness/Api/GameExtensions/RulesetActorExtensions.cs +++ b/SolastaUnfinishedBusiness/Api/GameExtensions/RulesetActorExtensions.cs @@ -28,7 +28,7 @@ private static void OnRollSavingThrowOath( if (sourceDefinition is not SpellDefinition { castingTime: ActivationTime.Action } && sourceDefinition is not FeatureDefinitionPower { RechargeRate: RechargeRate.ChannelDivinity } && - !caster.AllConditions.Any(x => x.Name.Contains("Smite"))) + !caster.AllConditionsForEnumeration.Any(x => x.Name.Contains("Smite"))) { return; } @@ -293,7 +293,8 @@ internal static List GetSubFeaturesByType([CanBeNull] this RulesetActor ac if (actor != null) { - list.AddRange(actor.AllConditions.SelectMany(x => x.ConditionDefinition.GetAllSubFeaturesOfType())); + list.AddRange( + actor.AllConditionsForEnumeration.SelectMany(x => x.ConditionDefinition.GetAllSubFeaturesOfType())); } return list; @@ -310,7 +311,7 @@ internal static bool HasSubFeatureOfType([CanBeNull] this RulesetActor actor, return true; } - return actor?.AllConditions + return actor?.AllConditionsForEnumeration .SelectMany(x => x.ConditionDefinition.GetAllSubFeaturesOfType()) .FirstOrDefault() != null; } diff --git a/SolastaUnfinishedBusiness/Api/GameExtensions/RulesetCharacterExtensions.cs b/SolastaUnfinishedBusiness/Api/GameExtensions/RulesetCharacterExtensions.cs index b4240df485..2d5be5882d 100644 --- a/SolastaUnfinishedBusiness/Api/GameExtensions/RulesetCharacterExtensions.cs +++ b/SolastaUnfinishedBusiness/Api/GameExtensions/RulesetCharacterExtensions.cs @@ -536,7 +536,7 @@ internal static bool IsMyFavoriteEnemy(this RulesetCharacter me, RulesetCharacte internal static bool RemoveAllConditionsOfType(this RulesetCharacter character, params string[] types) { //should we return number of removed conditions, instead of whether we removed any? - var conditions = character?.AllConditions + var conditions = character?.AllConditionsForEnumeration .Where(c => types.Contains(c.conditionDefinition.Name)) .ToList(); @@ -580,7 +580,7 @@ internal static RulesetCharacterHero GetOriginalHero(this RulesetCharacter chara internal static bool HasTemporaryConditionOfType(this RulesetCharacter character, string conditionName) { - return character.AllConditions + return character.AllConditionsForEnumeration .Any(condition => condition.ConditionDefinition.IsSubtypeOf(conditionName) && condition.DurationType != DurationType.Permanent); } diff --git a/SolastaUnfinishedBusiness/Behaviors/CustomSituationalContext.cs b/SolastaUnfinishedBusiness/Behaviors/CustomSituationalContext.cs index 18fd304503..00b52a01ef 100644 --- a/SolastaUnfinishedBusiness/Behaviors/CustomSituationalContext.cs +++ b/SolastaUnfinishedBusiness/Behaviors/CustomSituationalContext.cs @@ -60,15 +60,15 @@ internal static bool IsContextValid( ExtraSituationalContext.IsNotConditionSource => // this is required whenever there is a SetMyAttackAdvantage (Taunted, Illuminating Strike, Honed Bear) - contextParams.target.Guid != contextParams.source.AllConditions.FirstOrDefault(x => + contextParams.target.Guid != contextParams.source.AllConditionsForEnumeration.FirstOrDefault(x => x.ConditionDefinition == contextParams.condition)?.SourceGuid && // this is required whenever there is a SetAttackOnMeAdvantage (Press the Advantage, Gambit Blind) - contextParams.source.Guid != contextParams.target.AllConditions.FirstOrDefault(x => + contextParams.source.Guid != contextParams.target.AllConditionsForEnumeration.FirstOrDefault(x => x.ConditionDefinition == contextParams.condition)?.SourceGuid, ExtraSituationalContext.IsNotConditionSourceNotRanged => // this is required whenever there is a SetMyAttackAdvantage (Wolf Leadership) - contextParams.source.Guid != contextParams.source.AllConditions.FirstOrDefault(x => + contextParams.source.Guid != contextParams.source.AllConditionsForEnumeration.FirstOrDefault(x => x.ConditionDefinition == contextParams.condition)?.SourceGuid && !contextParams.rangedAttack, diff --git a/SolastaUnfinishedBusiness/Feats/ClassFeats.cs b/SolastaUnfinishedBusiness/Feats/ClassFeats.cs index 3c29f75632..4735f8f832 100644 --- a/SolastaUnfinishedBusiness/Feats/ClassFeats.cs +++ b/SolastaUnfinishedBusiness/Feats/ClassFeats.cs @@ -492,7 +492,8 @@ public IEnumerator OnActionFinishedByMe(CharacterAction action) } var rulesetCondition = - rulesetCharacterMonster.AllConditions.FirstOrDefault(x => x.SourceGuid == TemporaryHitPointsGuid); + rulesetCharacterMonster.AllConditionsForEnumeration.FirstOrDefault(x => + x.SourceGuid == TemporaryHitPointsGuid); if (rulesetCondition != null) { diff --git a/SolastaUnfinishedBusiness/FightingStyles/Interception.cs b/SolastaUnfinishedBusiness/FightingStyles/Interception.cs index f69719ff31..2ae715395c 100644 --- a/SolastaUnfinishedBusiness/FightingStyles/Interception.cs +++ b/SolastaUnfinishedBusiness/FightingStyles/Interception.cs @@ -42,8 +42,9 @@ internal sealed class Interception : AbstractFightingStyle .Create($"ReduceDamage{Name}") .SetGuiPresentation(Name, Category.FightingStyle) .SetAlwaysActiveReducedDamage( - (_, defender) => defender.RulesetActor.AllConditions.FirstOrDefault( - x => x.ConditionDefinition.Name == $"Condition{Name}")!.Amount) + (_, defender) => + defender.RulesetActor.AllConditionsForEnumeration.FirstOrDefault( + x => x.ConditionDefinition.Name == $"Condition{Name}")!.Amount) .AddToDB()) .AddToDB())) .AddToDB()) diff --git a/SolastaUnfinishedBusiness/Models/CustomConditionsContext.cs b/SolastaUnfinishedBusiness/Models/CustomConditionsContext.cs index 75f7a8c514..dfea13600f 100644 --- a/SolastaUnfinishedBusiness/Models/CustomConditionsContext.cs +++ b/SolastaUnfinishedBusiness/Models/CustomConditionsContext.cs @@ -325,7 +325,7 @@ public void OnConditionAdded(RulesetCharacter target, RulesetCondition rulesetCo } else { - var conditions = target.allConditionsForEnumeration; + var conditions = target.AllConditionsForEnumeration; foreach (var condition in conditions .Where(condition => condition.ConditionDefinition.IsSubtypeOf("ConditionFlying"))) @@ -522,16 +522,16 @@ public IEnumerator OnActionFinishedByMe(CharacterAction characterAction) var actingCharacter = characterAction.ActingCharacter; var rulesetCharacter = actingCharacter.RulesetCharacter; - foreach (var rulesetCondition in rulesetCharacter.AllConditions + foreach (var rulesetCondition in rulesetCharacter.AllConditionsForEnumeration .Where(x => x.ConditionDefinition.Name == Taunted.Name) - .ToList() .Select(a => new { a, rulesetCaster = EffectHelpers.GetCharacterByGuid(a.SourceGuid) }) .Where(t => t.rulesetCaster != null) .Select(b => new { b, caster = GameLocationCharacter.GetFromActor(b.rulesetCaster) }) .Where(t => // ruleset amount carries the max range for the condition t.caster != null && !t.caster.IsWithinRange(actingCharacter, t.b.a.Amount)) - .Select(c => c.b.a)) + .Select(c => c.b.a) + .ToList()) { rulesetCharacter.RemoveCondition(rulesetCondition); } diff --git a/SolastaUnfinishedBusiness/Models/LightingAndObscurementContext.cs b/SolastaUnfinishedBusiness/Models/LightingAndObscurementContext.cs index cb63f7e36c..3701e09bac 100644 --- a/SolastaUnfinishedBusiness/Models/LightingAndObscurementContext.cs +++ b/SolastaUnfinishedBusiness/Models/LightingAndObscurementContext.cs @@ -234,7 +234,7 @@ private static bool IsBlindNotFromDarkness(RulesetActor actor) { return actor != null && - actor.AllConditions + actor.AllConditionsForEnumeration .Select(y => y.ConditionDefinition) .Any(x => x.IsSubtypeOf(ConditionBlinded.Name) && x != ConditionBlindedByDarkness); } diff --git a/SolastaUnfinishedBusiness/Models/SpellPointsContext.cs b/SolastaUnfinishedBusiness/Models/SpellPointsContext.cs index 9a2b4dba7e..784bbaa00a 100644 --- a/SolastaUnfinishedBusiness/Models/SpellPointsContext.cs +++ b/SolastaUnfinishedBusiness/Models/SpellPointsContext.cs @@ -253,7 +253,7 @@ void ConsumeSlot(int slot) internal static void ConvertAdditionalSlotsIntoSpellPointsBeforeRefreshSpellRepertoire(RulesetCharacterHero hero) { var usablePower = PowerProvider.Get(PowerSpellPoints, hero); - var activeConditions = hero.AllConditions.ToList(); + var activeConditions = hero.AllConditionsForEnumeration.ToList(); foreach (var activeCondition in activeConditions) { diff --git a/SolastaUnfinishedBusiness/Models/ToolsContext.cs b/SolastaUnfinishedBusiness/Models/ToolsContext.cs index 0d6c458961..c23409f0e7 100644 --- a/SolastaUnfinishedBusiness/Models/ToolsContext.cs +++ b/SolastaUnfinishedBusiness/Models/ToolsContext.cs @@ -272,14 +272,15 @@ private static void FinalizeRespec([NotNull] RulesetCharacterHero oldHero, private static void TransferConditionsOfCategory(RulesetActor oldHero, RulesetActor newHero, string category) { - if (!oldHero.conditionsByCategory.TryGetValue(category, out var conditions)) + if (!oldHero.ConditionsByCategory.TryGetValue(category, out var conditions)) { return; } newHero.AddConditionCategoryAsNeeded(category); - newHero.conditionsByCategory[category].AddRange(conditions); - newHero.allConditions.AddRange(conditions); + newHero.AllConditions.AddRange(conditions); + newHero.AllConditionsForEnumeration.AddRange(conditions); + newHero.ConditionsByCategory[category].AddRange(conditions); } private static void CleanupOldHeroConditions(RulesetCharacterHero oldHero, RulesetCharacterHero newHero) @@ -288,8 +289,9 @@ private static void CleanupOldHeroConditions(RulesetCharacterHero oldHero, Rules oldHero.allConditions .Where(c => !newHero.AllConditions.Contains(c)) .Do(c => c.Unregister()); - oldHero.allConditions.Clear(); - oldHero.conditionsByCategory.Clear(); + oldHero.AllConditions.Clear(); + oldHero.AllConditionsForEnumeration.Clear(); + oldHero.ConditionsByCategory.Clear(); } private static void CopyInventoryOver([NotNull] RulesetCharacter oldHero, int3 position) diff --git a/SolastaUnfinishedBusiness/Patches/CharacterActionAttackPatcher.cs b/SolastaUnfinishedBusiness/Patches/CharacterActionAttackPatcher.cs index c49a69cc85..0d60ce24f3 100644 --- a/SolastaUnfinishedBusiness/Patches/CharacterActionAttackPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/CharacterActionAttackPatcher.cs @@ -838,13 +838,12 @@ internal static IEnumerator ExecuteImpl(CharacterActionAttack __instance) rulesetDefender.matchingInterruption = true; rulesetDefender.matchingInterruptionConditions.Clear(); - foreach (var rulesetCondition in rulesetDefender.conditionsByCategory - .SelectMany(keyValuePair => keyValuePair.Value - .Where(rulesetCondition => - rulesetCondition.ConditionDefinition.HasSpecialInterruptionOfType( - (ConditionInterruption)ExtraConditionInterruption - .AfterWasAttackedNotBySource) && - rulesetCondition.SourceGuid != actingCharacter.Guid))) + foreach (var rulesetCondition in rulesetDefender.AllConditionsForEnumeration + .Where(rulesetCondition => + rulesetCondition.ConditionDefinition.HasSpecialInterruptionOfType( + (ConditionInterruption)ExtraConditionInterruption + .AfterWasAttackedNotBySource) && + rulesetCondition.SourceGuid != actingCharacter.Guid)) { rulesetDefender.matchingInterruptionConditions.Add(rulesetCondition); } diff --git a/SolastaUnfinishedBusiness/Patches/CharacterActionMagicEffectPatcher.cs b/SolastaUnfinishedBusiness/Patches/CharacterActionMagicEffectPatcher.cs index 111408f721..bc6b328242 100644 --- a/SolastaUnfinishedBusiness/Patches/CharacterActionMagicEffectPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/CharacterActionMagicEffectPatcher.cs @@ -1245,13 +1245,12 @@ private static IEnumerator ExecuteMagicAttack( rulesetTarget.matchingInterruption = true; rulesetTarget.matchingInterruptionConditions.Clear(); - foreach (var rulesetCondition in rulesetTarget.conditionsByCategory - .SelectMany(keyValuePair => keyValuePair.Value - .Where(rulesetCondition => - rulesetCondition.ConditionDefinition.HasSpecialInterruptionOfType( - (ConditionInterruption)ExtraConditionInterruption - .AfterWasAttackedNotBySource) && - rulesetCondition.SourceGuid != actingCharacter.Guid))) + foreach (var rulesetCondition in rulesetTarget.AllConditionsForEnumeration + .Where(rulesetCondition => + rulesetCondition.ConditionDefinition.HasSpecialInterruptionOfType( + (ConditionInterruption)ExtraConditionInterruption + .AfterWasAttackedNotBySource) && + rulesetCondition.SourceGuid != actingCharacter.Guid)) { rulesetTarget.matchingInterruptionConditions.Add(rulesetCondition); } diff --git a/SolastaUnfinishedBusiness/Patches/Considerations/ConsiderationsInfluenceFearSourceProximityPatcher.cs b/SolastaUnfinishedBusiness/Patches/Considerations/ConsiderationsInfluenceFearSourceProximityPatcher.cs index 06a320cf0b..4be9fdc4eb 100644 --- a/SolastaUnfinishedBusiness/Patches/Considerations/ConsiderationsInfluenceFearSourceProximityPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/Considerations/ConsiderationsInfluenceFearSourceProximityPatcher.cs @@ -45,11 +45,10 @@ private static void Score( var numerator = 0.0f; var rulesetCharacter = parameters.character.GameLocationCharacter.RulesetCharacter; - foreach (var rulesetCondition in rulesetCharacter.ConditionsByCategory - .SelectMany(kvp => kvp.Value - .Where(rulesetCondition => - rulesetCondition.ConditionDefinition.ForceBehavior && - rulesetCondition.ConditionDefinition.FearSource))) + foreach (var rulesetCondition in rulesetCharacter.AllConditionsForEnumeration + .Where(rulesetCondition => + rulesetCondition.ConditionDefinition.ForceBehavior && + rulesetCondition.ConditionDefinition.FearSource)) { // ReSharper disable once ForeachCanBePartlyConvertedToQueryUsingAnotherGetEnumerator foreach (var relevantEnemy in parameters.situationalInformation.RelevantEnemies) diff --git a/SolastaUnfinishedBusiness/Patches/CursorLocationSelectTargetPatcher.cs b/SolastaUnfinishedBusiness/Patches/CursorLocationSelectTargetPatcher.cs index ae2137f57f..4fad022d5a 100644 --- a/SolastaUnfinishedBusiness/Patches/CursorLocationSelectTargetPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/CursorLocationSelectTargetPatcher.cs @@ -80,7 +80,7 @@ rulesetEffectSpell.EffectDescription.RangeType is not (RangeType.Touch or RangeT .FirstOrDefault(x => x.RulesetCharacter is RulesetCharacterMonster rulesetCharacterMonster && rulesetCharacterMonster.MonsterDefinition.Name == OwlFamiliar && - rulesetCharacterMonster.AllConditions.Exists(y => + rulesetCharacterMonster.AllConditionsForEnumeration.Exists(y => y.ConditionDefinition == ConditionDefinitions.ConditionConjuredCreature && y.SourceGuid == actingCharacter.Guid)); diff --git a/SolastaUnfinishedBusiness/Patches/RulesetActorPatcher.cs b/SolastaUnfinishedBusiness/Patches/RulesetActorPatcher.cs index 04525965c1..ace4520048 100644 --- a/SolastaUnfinishedBusiness/Patches/RulesetActorPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/RulesetActorPatcher.cs @@ -568,7 +568,7 @@ public static void Prefix(RulesetActor __instance, string category, RulesetCondi return; } - if (!character.conditionsByCategory.ContainsKey(category)) + if (!character.ConditionsByCategory.ContainsKey(category)) { return; } @@ -596,7 +596,7 @@ public static void Prefix(RulesetActor __instance, string category) return; } - if (!character.conditionsByCategory.TryGetValue(category, out var value)) + if (!character.ConditionsByCategory.TryGetValue(category, out var value)) { return; } @@ -627,7 +627,7 @@ public static void Prefix(RulesetActor __instance, string category, List return; } - if (!character.conditionsByCategory.TryGetValue(category, out var value)) + if (!character.ConditionsByCategory.TryGetValue(category, out var value)) { return; } @@ -690,7 +690,7 @@ public static void Prefix(RulesetActor __instance, string category, string type) return; } - if (!character.conditionsByCategory.TryGetValue(category, out var value)) + if (!character.ConditionsByCategory.TryGetValue(category, out var value)) { return; } @@ -1110,7 +1110,7 @@ private static void EnumerateFeatureDefinitionSpellImmunity( __instance.EnumerateFeaturesToBrowse(featuresToBrowse, featuresOrigin); // ReSharper disable once ForeachCanBePartlyConvertedToQueryUsingAnotherGetEnumerator - foreach (var rulesetCondition in __instance.AllConditions) + foreach (var rulesetCondition in __instance.AllConditionsForEnumeration) { var immunityRemovingFeatures = rulesetCondition.conditionDefinition .GetAllSubFeaturesOfType(); @@ -1150,7 +1150,7 @@ private static void EnumerateFeatureDefinitionSpellImmunityLevel( __instance.EnumerateFeaturesToBrowse(featuresToBrowse, featuresOrigin); // ReSharper disable once ForeachCanBePartlyConvertedToQueryUsingAnotherGetEnumerator - foreach (var rulesetCondition in __instance.AllConditions) + foreach (var rulesetCondition in __instance.AllConditionsForEnumeration) { var immunityRemovingFeatures = rulesetCondition.conditionDefinition .GetAllSubFeaturesOfType(); diff --git a/SolastaUnfinishedBusiness/Patches/RulesetCharacterPatcher.cs b/SolastaUnfinishedBusiness/Patches/RulesetCharacterPatcher.cs index 582d914def..aeaa0933ad 100644 --- a/SolastaUnfinishedBusiness/Patches/RulesetCharacterPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/RulesetCharacterPatcher.cs @@ -349,12 +349,11 @@ private static void ProcessConditionsMatchingInterruptionSourceRageStop( .OfType() .ToList()) { - foreach (var rulesetCondition in targetRulesetCharacter.AllConditions + foreach (var rulesetCondition in targetRulesetCharacter.AllConditionsForEnumeration .Where(x => x.ConditionDefinition.SpecialInterruptions.Contains( (ConditionInterruption)ExtraConditionInterruption.SourceRageStop) && - x.SourceGuid == sourceCharacter.Guid) - .ToList()) + x.SourceGuid == sourceCharacter.Guid)) { targetRulesetCharacter.RemoveCondition(rulesetCondition); diff --git a/SolastaUnfinishedBusiness/Patches/RulesetImplementationManagerLocationPatcher.cs b/SolastaUnfinishedBusiness/Patches/RulesetImplementationManagerLocationPatcher.cs index eceb6b1422..0983462ade 100644 --- a/SolastaUnfinishedBusiness/Patches/RulesetImplementationManagerLocationPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/RulesetImplementationManagerLocationPatcher.cs @@ -112,7 +112,7 @@ private static void TeleportCharacter( if (Main.Settings.EnableTeleportToRemoveRestrained) { var rulesetCharacter = character.RulesetCharacter; - var conditionsToRemove = rulesetCharacter.AllConditions + var conditionsToRemove = rulesetCharacter.AllConditionsForEnumeration .Where(x => x.ConditionDefinition.IsSubtypeOf(ConditionRestrained) && (character.Side == Side.Ally || diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel04.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel04.cs index 6d7e895a6c..724af1e521 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel04.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel04.cs @@ -1591,7 +1591,7 @@ public void OnSavingThrowFinished( return; } - if (!rulesetActorDefender.AllConditions.Any(x => + if (!rulesetActorDefender.AllConditionsForEnumeration.Any(x => x.ConditionDefinition.IsSubtypeOf(ConditionDefinitions.ConditionCharmed.Name) && x.SourceGuid == rulesetActorCaster?.Guid)) { diff --git a/SolastaUnfinishedBusiness/Subclasses/CircleOfTheCosmos.cs b/SolastaUnfinishedBusiness/Subclasses/CircleOfTheCosmos.cs index 9523512554..6283a27dc4 100644 --- a/SolastaUnfinishedBusiness/Subclasses/CircleOfTheCosmos.cs +++ b/SolastaUnfinishedBusiness/Subclasses/CircleOfTheCosmos.cs @@ -1247,7 +1247,7 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, { var actingCharacter = action.ActingCharacter; var rulesetCharacter = actingCharacter.RulesetCharacter; - var activeCondition = rulesetCharacter.AllConditions.FirstOrDefault(x => + var activeCondition = rulesetCharacter.AllConditionsForEnumeration.FirstOrDefault(x => ConstellationFormConditions.Contains(x.Name)); if (activeCondition == null) diff --git a/SolastaUnfinishedBusiness/Subclasses/CircleOfTheLife.cs b/SolastaUnfinishedBusiness/Subclasses/CircleOfTheLife.cs index c7211a69f8..b1fe12ab8c 100644 --- a/SolastaUnfinishedBusiness/Subclasses/CircleOfTheLife.cs +++ b/SolastaUnfinishedBusiness/Subclasses/CircleOfTheLife.cs @@ -223,7 +223,7 @@ public void OnCharacterTurnStarted(GameLocationCharacter locationCharacter) locationCharacter.UsedSpecialFeatures.Add(VerdancyHealedTag, 1); - foreach (var rulesetCondition in rulesetCharacter.AllConditions + foreach (var rulesetCondition in rulesetCharacter.AllConditionsForEnumeration .Where(x => x.ConditionDefinition.Name is ConditionVerdancy or ConditionVerdancy14) .ToList()) { diff --git a/SolastaUnfinishedBusiness/Subclasses/OathOfDread.cs b/SolastaUnfinishedBusiness/Subclasses/OathOfDread.cs index 3de9cc3fa1..b383a282fc 100644 --- a/SolastaUnfinishedBusiness/Subclasses/OathOfDread.cs +++ b/SolastaUnfinishedBusiness/Subclasses/OathOfDread.cs @@ -1,5 +1,4 @@ using System.Collections; -using System.Linq; using JetBrains.Annotations; using SolastaUnfinishedBusiness.Api.GameExtensions; using SolastaUnfinishedBusiness.Api.Helpers; @@ -317,10 +316,8 @@ public void OnCharacterTurnStarted(GameLocationCharacter character) } var rulesetAttacker = EffectHelpers.GetCharacterByGuid(activeCondition.SourceGuid); - var hasFrightenedFromSource = rulesetCharacter.AllConditions.Any(x => - x.SourceGuid == rulesetAttacker.Guid && - (x.ConditionDefinition == ConditionDefinitions.ConditionFrightened || - x.ConditionDefinition.IsSubtypeOf(RuleDefinitions.ConditionFrightened))); + var hasFrightenedFromSource = rulesetCharacter.HasAnyConditionOfTypeOrSubType( + RuleDefinitions.ConditionFrightened); if (!hasFrightenedFromSource || rulesetAttacker is not { IsDeadOrDyingOrUnconscious: false }) @@ -376,9 +373,7 @@ public IEnumerator OnPhysicalAttackFinishedOnMeOrAlly( yield break; } - var hasFrightened = rulesetAttacker.AllConditions.Any(x => - x.ConditionDefinition == ConditionDefinitions.ConditionFrightened || - x.ConditionDefinition.IsSubtypeOf(RuleDefinitions.ConditionFrightened)); + var hasFrightened = rulesetAttacker.HasAnyConditionOfTypeOrSubType(RuleDefinitions.ConditionFrightened); if (!hasFrightened && !rulesetAttacker.HasConditionOfType(conditionMarkOfTheSubmission)) { diff --git a/SolastaUnfinishedBusiness/Subclasses/WayOfTheDiscordance.cs b/SolastaUnfinishedBusiness/Subclasses/WayOfTheDiscordance.cs index 84deca0e95..224703d006 100644 --- a/SolastaUnfinishedBusiness/Subclasses/WayOfTheDiscordance.cs +++ b/SolastaUnfinishedBusiness/Subclasses/WayOfTheDiscordance.cs @@ -388,7 +388,7 @@ public IEnumerator OnPhysicalAttackFinishedByMe( yield break; } - if (rulesetDefender.AllConditions.All(x => x.ConditionDefinition != conditionDiscordance)) + if (rulesetDefender.AllConditionsForEnumeration.All(x => x.ConditionDefinition != conditionDiscordance)) { rulesetDefender.InflictCondition( conditionDiscordance.Name, @@ -469,7 +469,7 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, var targets = action.actionParams.TargetCharacters .Where(x => x.RulesetActor is { IsDeadOrDyingOrUnconscious: false } - && x.RulesetActor.AllConditions.Count(y => + && x.RulesetActor.AllConditionsForEnumeration.Count(y => y.ConditionDefinition == conditionDiscordance) > 1) .ToList(); diff --git a/SolastaUnfinishedBusiness/Subclasses/WayOfTheStormSoul.cs b/SolastaUnfinishedBusiness/Subclasses/WayOfTheStormSoul.cs index c82ea9a647..b4aacad385 100644 --- a/SolastaUnfinishedBusiness/Subclasses/WayOfTheStormSoul.cs +++ b/SolastaUnfinishedBusiness/Subclasses/WayOfTheStormSoul.cs @@ -358,7 +358,7 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, var usablePower = PowerProvider.Get(powerEyeOfTheStormLeap, rulesetAttacker); var targets = Gui.Battle.GetContenders(attacker) .Where(x => - x.RulesetActor.AllConditions + x.RulesetActor.AllConditionsForEnumeration .Any(y => y.ConditionDefinition == conditionEyeOfTheStorm && y.SourceGuid == rulesetAttacker.Guid)) .ToArray(); diff --git a/SolastaUnfinishedBusiness/Subclasses/WayOfTheWealAndWoe.cs b/SolastaUnfinishedBusiness/Subclasses/WayOfTheWealAndWoe.cs index 9449c9be89..10e0d68c90 100644 --- a/SolastaUnfinishedBusiness/Subclasses/WayOfTheWealAndWoe.cs +++ b/SolastaUnfinishedBusiness/Subclasses/WayOfTheWealAndWoe.cs @@ -161,7 +161,7 @@ public void AfterRoll( } var conditionWealCount = - rulesetCharacter.AllConditions.Count(x => x.ConditionDefinition == conditionWeal); + rulesetCharacter.AllConditionsForEnumeration.Count(x => x.ConditionDefinition == conditionWeal); if (result == 1 || result - conditionWealCount > 1) { diff --git a/SolastaUnfinishedBusiness/Validators/ValidatorsCharacter.cs b/SolastaUnfinishedBusiness/Validators/ValidatorsCharacter.cs index afc7127461..bbc30f3bb4 100644 --- a/SolastaUnfinishedBusiness/Validators/ValidatorsCharacter.cs +++ b/SolastaUnfinishedBusiness/Validators/ValidatorsCharacter.cs @@ -253,9 +253,8 @@ internal static bool IsFreeOffhand(RulesetCharacter character) [MethodImpl(MethodImplOptions.AggressiveInlining)] internal static bool HasConditionWithSubFeatureOfType(this RulesetCharacter character) where T : class { - return character.conditionsByCategory - .Any(keyValuePair => keyValuePair.Value - .Any(rulesetCondition => rulesetCondition.ConditionDefinition.HasSubFeatureOfType())); + return character.AllConditionsForEnumeration + .Any(rulesetCondition => rulesetCondition.ConditionDefinition.HasSubFeatureOfType()); } [MethodImpl(MethodImplOptions.AggressiveInlining)] From a19f609451090525d72d09b8b977796bf2312852 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Fri, 6 Sep 2024 08:48:29 -0700 Subject: [PATCH 049/212] minor clean up and tweaks --- .../Api/DatabaseHelper-RELEASE.cs | 13 +++++++++---- .../Builders/EffectFormBuilder.cs | 2 +- .../Models/EncounterSpawnContext.cs | 15 +-------------- .../Models/SrdAndHouseRulesContext.cs | 2 +- .../Spells/SpellBuildersCantrips.cs | 5 +++-- .../Subclasses/WizardDeadMaster.cs | 3 +-- 6 files changed, 16 insertions(+), 24 deletions(-) diff --git a/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs b/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs index e6c68ec68d..e6f0ee9775 100644 --- a/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs +++ b/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs @@ -291,6 +291,9 @@ internal static class CharacterSubclassDefinitions internal static class ConditionDefinitions { + internal static ConditionDefinition ConditionDashing { get; } = + GetDefinition("ConditionDashing"); + internal static ConditionDefinition ConditionDomainMischiefBorrowedLuck { get; } = GetDefinition("ConditionDomainMischiefBorrowedLuck"); @@ -1595,6 +1598,9 @@ internal static class FeatureDefinitionMagicAffinitys internal static class FeatureDefinitionMovementAffinitys { + internal static FeatureDefinitionMovementAffinity MovementAffinityConditionDashing { get; } = + GetDefinition("MovementAffinityConditionDashing"); + internal static FeatureDefinitionMovementAffinity MovementAffinityBarbarianFastMovement { get; } = GetDefinition("MovementAffinityBarbarianFastMovement"); @@ -1726,6 +1732,7 @@ internal static class FeatureDefinitionPowers { internal static FeatureDefinitionPower PowerBardTraditionVerbalOnslaught { get; } = GetDefinition("PowerBardTraditionVerbalOnslaught"); + internal static FeatureDefinitionPower PowerIncubus_Drain { get; } = GetDefinition("PowerIncubus_Drain"); @@ -3910,13 +3917,11 @@ internal static class DecisionPackageDefinitions { internal static DecisionPackageDefinition DefaultMeleeWithBackupRangeDecisions { get; } = GetDefinition("DefaultMeleeWithBackupRangeDecisions"); + internal static DecisionPackageDefinition DefaultSupportCasterWithBackupAttacksDecisions { get; } = GetDefinition("DefaultSupportCasterWithBackupAttacksDecisions"); - - internal static DecisionPackageDefinition Fear { get; } = GetDefinition("Fear"); + internal static DecisionPackageDefinition Idle { get; } = GetDefinition("Idle"); - internal static DecisionPackageDefinition IdleGuard_Default { get; } = - GetDefinition("IdleGuard_Default"); } internal static class ToolTypeDefinitions diff --git a/SolastaUnfinishedBusiness/Builders/EffectFormBuilder.cs b/SolastaUnfinishedBusiness/Builders/EffectFormBuilder.cs index 541cd7127f..9a830f6385 100644 --- a/SolastaUnfinishedBusiness/Builders/EffectFormBuilder.cs +++ b/SolastaUnfinishedBusiness/Builders/EffectFormBuilder.cs @@ -452,7 +452,7 @@ internal EffectFormBuilder SetSummonCreatureForm( monsterDefinitionName = monsterDefinitionName, conditionDefinition = DatabaseHelper.ConditionDefinitions.ConditionMindControlledByCaster, persistOnConcentrationLoss = false, - decisionPackage = DatabaseHelper.DecisionPackageDefinitions.IdleGuard_Default, + decisionPackage = DatabaseHelper.DecisionPackageDefinitions.Idle, effectProxyDefinitionName = null }; diff --git a/SolastaUnfinishedBusiness/Models/EncounterSpawnContext.cs b/SolastaUnfinishedBusiness/Models/EncounterSpawnContext.cs index c72688d017..a7f63f9637 100644 --- a/SolastaUnfinishedBusiness/Models/EncounterSpawnContext.cs +++ b/SolastaUnfinishedBusiness/Models/EncounterSpawnContext.cs @@ -5,7 +5,6 @@ using SolastaUnfinishedBusiness.Api; using TA; using static RuleDefinitions; -using static SolastaUnfinishedBusiness.Api.DatabaseHelper.DecisionPackageDefinitions; namespace SolastaUnfinishedBusiness.Models; @@ -19,8 +18,6 @@ internal static class EncountersSpawnContext internal static readonly List EncounterCharacters = []; - private static ulong EncounterId { get; set; } = 10000; - internal static void AddToEncounter(RulesetCharacterHero hero) { if (EncounterCharacters.Count < MaxEncounterCharacters) @@ -161,17 +158,7 @@ private static void StageEncounter(int3 position) foreach (var gameLocationCharacter in EncounterCharacters .Select(character => characterService.CreateCharacter( - PlayerControllerManager.DmControllerId, character, Side.Enemy, - new GameLocationBehaviourPackage - { - BattleStartBehavior = - GameLocationBehaviourPackage.BattleStartBehaviorType.DoNotRaiseAlarm, - DecisionPackageDefinition = IdleGuard_Default, - EncounterId = EncounterId++, - FormationDefinition = EncounterCharacters.Count > 1 - ? DatabaseHelper.FormationDefinitions.Squad4 - : DatabaseHelper.FormationDefinitions.SingleCreature - }))) + PlayerControllerManager.DmControllerId, character, Side.Enemy))) { gameLocationCharacter.CollectExistingLightSources(true); gameLocationCharacter.RefreshActionPerformances(); diff --git a/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs b/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs index 7c4bde8cc1..b94c790b24 100644 --- a/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs +++ b/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs @@ -391,7 +391,7 @@ internal static void SwitchFilterOnHideousLaughter() if (!Main.Settings.RemoveHumanoidFilterOnHideousLaughter) { - HideousLaughter.effectDescription.restrictedCreatureFamilies.Add(CharacterFamilyDefinitions.Humanoid.Name); + HideousLaughter.effectDescription.restrictedCreatureFamilies.Add("Humanoid"); } } diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs index d2618b9bfd..5c47bc5321 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs @@ -15,6 +15,7 @@ using static RuleDefinitions; using static FeatureDefinitionAttributeModifier; using static SolastaUnfinishedBusiness.Api.DatabaseHelper; +using static SolastaUnfinishedBusiness.Api.DatabaseHelper.CharacterFamilyDefinitions; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.ConditionDefinitions; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionDamageAffinitys; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.SpellDefinitions; @@ -434,7 +435,7 @@ internal static SpellDefinition BuildMinorLifesteal() .SetDurationData(DurationType.Hour, 1) .SetTargetingData(Side.Enemy, RangeType.MeleeHit, 1, TargetType.IndividualsUnique) .SetEffectAdvancement(EffectIncrementMethod.CasterLevelTable, additionalDicePerIncrement: 1) - .AddImmuneCreatureFamilies(CharacterFamilyDefinitions.Construct, CharacterFamilyDefinitions.Undead) + .AddImmuneCreatureFamilies(Construct, Undead) .SetEffectForms( EffectFormBuilder .Create() @@ -774,7 +775,7 @@ internal static SpellDefinition BuildWrack() EffectDifficultyClassComputation.SpellCastingFeature, AttributeDefinitions.Wisdom, 12) - .AddImmuneCreatureFamilies(CharacterFamilyDefinitions.Construct, CharacterFamilyDefinitions.Undead) + .AddImmuneCreatureFamilies(Construct, Undead) .SetEffectForms( EffectFormBuilder .Create() diff --git a/SolastaUnfinishedBusiness/Subclasses/WizardDeadMaster.cs b/SolastaUnfinishedBusiness/Subclasses/WizardDeadMaster.cs index 393be71bd4..66e7389b19 100644 --- a/SolastaUnfinishedBusiness/Subclasses/WizardDeadMaster.cs +++ b/SolastaUnfinishedBusiness/Subclasses/WizardDeadMaster.cs @@ -13,7 +13,6 @@ using UnityEngine.AddressableAssets; using static RuleDefinitions; using static SolastaUnfinishedBusiness.Api.DatabaseHelper; -using static SolastaUnfinishedBusiness.Api.DatabaseHelper.CharacterFamilyDefinitions; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.ItemDefinitions; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.MonsterDefinitions; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.SpellDefinitions; @@ -343,7 +342,7 @@ public IEnumerator HandleReducedToZeroHpByMe( var rulesetDowned = downedCreature.RulesetCharacter; var characterFamily = rulesetDowned.CharacterFamily; - if (characterFamily == Construct.Name || characterFamily == Undead.Name) + if (characterFamily is "Construct" or "Undead") { yield break; } From a77ded5379377bb847631574f7fc4f9fcfb12fbe Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Fri, 6 Sep 2024 16:09:55 -0700 Subject: [PATCH 050/212] update diagnostics --- .../UnfinishedBusinessBlueprints/Assets.txt | 2 - .../ConditionCommandSpellApproach.json | 6 +-- .../ConditionCommandSpellFlee.json | 6 +-- .../DecisionDefinition/Move_Approach.json | 24 +++++----- .../ActionAffinityCommandSpell.json | 48 ------------------- .../PowerDomainColdSummonBlizzard.json | 2 +- .../PowerDomainFireSummonInferno.json | 2 +- ...tionWeaponSummonAdvancedSteelDefender.json | 2 +- ...erInnovationWeaponSummonSteelDefender.json | 2 +- ...vationArtilleristSummonFlamethrower15.json | 2 +- ...ovationArtilleristSummonFlamethrower3.json | 2 +- ...ovationArtilleristSummonFlamethrower9.json | 2 +- ...ationArtilleristSummonForceBallista15.json | 2 +- ...vationArtilleristSummonForceBallista3.json | 2 +- ...vationArtilleristSummonForceBallista9.json | 2 +- ...nnovationArtilleristSummonProtector15.json | 2 +- ...InnovationArtilleristSummonProtector3.json | 2 +- ...InnovationArtilleristSummonProtector9.json | 2 +- ...erRangerHellWalkerFiendishSpawnHezrou.json | 2 +- ...RangerHellWalkerFiendishSpawnMarilith.json | 2 +- ...SummonBeastCompanionKindredSpiritBear.json | 2 +- ...ummonBeastCompanionKindredSpiritEagle.json | 2 +- ...SummonBeastCompanionKindredSpiritWolf.json | 2 +- ...edPoolCircleOfTheWildfireSummonSpirit.json | 2 +- .../SpellDefinition/CommandSpell.json | 4 +- .../SpellDefinition/CreateDeadRisenGhost.json | 2 +- .../SpellDefinition/CreateDeadRisenGhoul.json | 2 +- .../CreateDeadRisenSkeleton.json | 2 +- .../CreateDeadRisenSkeleton_Archer.json | 2 +- .../CreateDeadRisenSkeleton_Enforcer.json | 2 +- .../CreateDeadRisenSkeleton_Knight.json | 2 +- .../CreateDeadRisenSkeleton_Marksman.json | 2 +- .../SpellDefinition/CreateDeadRisenWight.json | 2 +- .../CreateDeadRisenWightLord.json | 2 +- .../SpellDefinition/FindFamiliar.json | 2 +- .../ChangelogHistory.txt | 3 +- 36 files changed, 48 insertions(+), 103 deletions(-) delete mode 100644 Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionActionAffinity/ActionAffinityCommandSpell.json diff --git a/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt b/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt index 14f25062a3..d18ebc7345 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt +++ b/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt @@ -1594,7 +1594,6 @@ ActionAffinityBrutalStrikeToggle FeatureDefinitionActionAffinity FeatureDefiniti ActionAffinityCaveWyrmkinBonusShove FeatureDefinitionActionAffinity FeatureDefinition feed7d9e-34bd-51b7-99a4-7a152bfab68f ActionAffinityCircleOfTheWildfireSpirit FeatureDefinitionActionAffinity FeatureDefinition f129168e-25fa-5478-bde2-57246aca7066 ActionAffinityCollegeOfValianceHeroicInspiration FeatureDefinitionActionAffinity FeatureDefinition 951aafe4-9c11-50cf-a43d-8c23ace8983f -ActionAffinityCommandSpell FeatureDefinitionActionAffinity FeatureDefinition d57c78ae-570a-5fd6-b2fc-7eaca82a71bd ActionAffinityConditionBlind FeatureDefinitionActionAffinity FeatureDefinition ba8f244f-070a-5288-a482-e145ab83adef ActionAffinityCoordinatedAssaultToggle FeatureDefinitionActionAffinity FeatureDefinition 2052bab8-0723-5f23-ba11-b5340f444906 ActionAffinityCrystalWyrmkinConditionCrystalDefense FeatureDefinitionActionAffinity FeatureDefinition 1274559b-34e5-5c07-acbe-9d51d149959e @@ -4249,7 +4248,6 @@ ActionAffinityBrutalStrikeToggle FeatureDefinitionActionAffinity FeatureDefiniti ActionAffinityCaveWyrmkinBonusShove FeatureDefinitionActionAffinity FeatureDefinitionActionAffinity feed7d9e-34bd-51b7-99a4-7a152bfab68f ActionAffinityCircleOfTheWildfireSpirit FeatureDefinitionActionAffinity FeatureDefinitionActionAffinity f129168e-25fa-5478-bde2-57246aca7066 ActionAffinityCollegeOfValianceHeroicInspiration FeatureDefinitionActionAffinity FeatureDefinitionActionAffinity 951aafe4-9c11-50cf-a43d-8c23ace8983f -ActionAffinityCommandSpell FeatureDefinitionActionAffinity FeatureDefinitionActionAffinity d57c78ae-570a-5fd6-b2fc-7eaca82a71bd ActionAffinityConditionBlind FeatureDefinitionActionAffinity FeatureDefinitionActionAffinity ba8f244f-070a-5288-a482-e145ab83adef ActionAffinityCoordinatedAssaultToggle FeatureDefinitionActionAffinity FeatureDefinitionActionAffinity 2052bab8-0723-5f23-ba11-b5340f444906 ActionAffinityCrystalWyrmkinConditionCrystalDefense FeatureDefinitionActionAffinity FeatureDefinitionActionAffinity 1274559b-34e5-5c07-acbe-9d51d149959e diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellApproach.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellApproach.json index 42996088e7..3a81c19399 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellApproach.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellApproach.json @@ -4,7 +4,7 @@ "parentCondition": null, "conditionType": "Detrimental", "features": [ - "Definition:ActionAffinityCommandSpell:d57c78ae-570a-5fd6-b2fc-7eaca82a71bd" + "Definition:MovementAffinityConditionDashing:f04b97bac67dce94fae71500ae6412ad" ], "allowMultipleInstances": false, "silentWhenAdded": false, @@ -17,9 +17,7 @@ "durationParameter": 0, "forceTurnOccurence": false, "turnOccurence": "EndOfTurn", - "specialInterruptions": [ - "Moved" - ], + "specialInterruptions": [], "interruptionRequiresSavingThrow": false, "interruptionSavingThrowComputationMethod": "SaveOverride", "interruptionSavingThrowAbility": "", diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellFlee.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellFlee.json index 48826ee336..1e7d3da1d5 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellFlee.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellFlee.json @@ -4,7 +4,7 @@ "parentCondition": null, "conditionType": "Detrimental", "features": [ - "Definition:ActionAffinityCommandSpell:d57c78ae-570a-5fd6-b2fc-7eaca82a71bd" + "Definition:MovementAffinityConditionDashing:f04b97bac67dce94fae71500ae6412ad" ], "allowMultipleInstances": false, "silentWhenAdded": false, @@ -17,9 +17,7 @@ "durationParameter": 0, "forceTurnOccurence": false, "turnOccurence": "EndOfTurn", - "specialInterruptions": [ - "Moved" - ], + "specialInterruptions": [], "interruptionRequiresSavingThrow": false, "interruptionSavingThrowComputationMethod": "SaveOverride", "interruptionSavingThrowAbility": "", diff --git a/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/Move_Approach.json b/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/Move_Approach.json index ec7fc54346..f880591ed8 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/Move_Approach.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/Move_Approach.json @@ -36,19 +36,19 @@ "$type": "TA.AI.ConsiderationDefinition, Assembly-CSharp", "consideration": { "$type": "TA.AI.ConsiderationDescription, Assembly-CSharp", - "considerationType": "InfluenceFearSourceProximity", + "considerationType": "InfluenceEnemyProximity", "curve": { "$type": "UnityEngine.AnimationCurve, UnityEngine.CoreModule" }, - "stringParameter": "", - "floatParameter": 6.0, - "intParameter": 1, + "stringParameter": "ConditionCommandSpellApproach", + "floatParameter": 3.0, + "intParameter": 2, "byteParameter": 0, "boolParameter": true, - "boolSecParameter": true, + "boolSecParameter": false, "boolTerParameter": false }, - "name": "PenalizeFearSourceProximityAtPosition" + "name": "PenalizeVeryCloseEnemyProximityAtPosition" }, "weight": 1.0 }, @@ -58,19 +58,19 @@ "$type": "TA.AI.ConsiderationDefinition, Assembly-CSharp", "consideration": { "$type": "TA.AI.ConsiderationDescription, Assembly-CSharp", - "considerationType": "DistanceFromMe", + "considerationType": "InfluenceFearSourceProximity", "curve": { "$type": "UnityEngine.AnimationCurve, UnityEngine.CoreModule" }, - "stringParameter": "", - "floatParameter": 20.0, - "intParameter": 0, + "stringParameter": "ConditionCommandSpellApproach", + "floatParameter": 6.0, + "intParameter": 1, "byteParameter": 0, - "boolParameter": false, + "boolParameter": true, "boolSecParameter": false, "boolTerParameter": false }, - "name": "IsCloseFromMe" + "name": "PenalizeFearSourceProximityAtPosition" }, "weight": 1.0 } diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionActionAffinity/ActionAffinityCommandSpell.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionActionAffinity/ActionAffinityCommandSpell.json deleted file mode 100644 index 1766815869..0000000000 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionActionAffinity/ActionAffinityCommandSpell.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "$type": "FeatureDefinitionActionAffinity, Assembly-CSharp", - "allowedActionTypes": [ - false, - false, - true, - false, - false, - false - ], - "eitherMainOrBonus": false, - "maxAttacksNumber": -1, - "forbiddenActions": [], - "authorizedActions": [], - "restrictedActions": [], - "actionExecutionModifiers": [], - "specialBehaviour": "None", - "randomBehaviorDie": "D10", - "randomBehaviourOptions": [], - "rechargeReactionsAtEveryTurn": false, - "guiPresentation": { - "$type": "GuiPresentation, Assembly-CSharp", - "hidden": true, - "title": "Feature/&NoContentTitle", - "description": "Feature/&NoContentTitle", - "spriteReference": { - "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": null, - "m_SubObjectType": null - }, - "color": { - "$type": "UnityEngine.Color, UnityEngine.CoreModule", - "r": 1.0, - "g": 1.0, - "b": 1.0, - "a": 1.0 - }, - "symbolChar": "221E", - "sortOrder": 0, - "unusedInSolastaCOTM": false, - "usedInValleyDLC": false - }, - "contentCopyright": "UserContent", - "guid": "d57c78ae-570a-5fd6-b2fc-7eaca82a71bd", - "contentPack": 9999, - "name": "ActionAffinityCommandSpell" -} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerDomainColdSummonBlizzard.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerDomainColdSummonBlizzard.json index 3a6efc2245..fe51212359 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerDomainColdSummonBlizzard.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerDomainColdSummonBlizzard.json @@ -85,7 +85,7 @@ "number": 2, "conditionDefinition": "Definition:ConditionMindControlledByCaster:72691050707821744968bd0595150b86", "persistOnConcentrationLoss": false, - "decisionPackage": "Definition:IdleGuard_Default:232428b431ff2414eb8254fb1e9e4cf1", + "decisionPackage": "Definition:Idle:47dfd6fd3d22b214cb8c446f2438f3c6", "effectProxyDefinitionName": null }, "hasFilterId": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerDomainFireSummonInferno.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerDomainFireSummonInferno.json index b166887a22..afafd6e0d2 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerDomainFireSummonInferno.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerDomainFireSummonInferno.json @@ -85,7 +85,7 @@ "number": 2, "conditionDefinition": "Definition:ConditionMindControlledByCaster:72691050707821744968bd0595150b86", "persistOnConcentrationLoss": false, - "decisionPackage": "Definition:IdleGuard_Default:232428b431ff2414eb8254fb1e9e4cf1", + "decisionPackage": "Definition:Idle:47dfd6fd3d22b214cb8c446f2438f3c6", "effectProxyDefinitionName": null }, "hasFilterId": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerInnovationWeaponSummonAdvancedSteelDefender.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerInnovationWeaponSummonAdvancedSteelDefender.json index c59aa641b5..d883bc1098 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerInnovationWeaponSummonAdvancedSteelDefender.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerInnovationWeaponSummonAdvancedSteelDefender.json @@ -85,7 +85,7 @@ "number": 1, "conditionDefinition": "Definition:ConditionMindControlledByCaster:72691050707821744968bd0595150b86", "persistOnConcentrationLoss": false, - "decisionPackage": "Definition:IdleGuard_Default:232428b431ff2414eb8254fb1e9e4cf1", + "decisionPackage": "Definition:Idle:47dfd6fd3d22b214cb8c446f2438f3c6", "effectProxyDefinitionName": null }, "hasFilterId": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerInnovationWeaponSummonSteelDefender.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerInnovationWeaponSummonSteelDefender.json index e0921ae3c0..a592683d6f 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerInnovationWeaponSummonSteelDefender.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerInnovationWeaponSummonSteelDefender.json @@ -85,7 +85,7 @@ "number": 1, "conditionDefinition": "Definition:ConditionMindControlledByCaster:72691050707821744968bd0595150b86", "persistOnConcentrationLoss": false, - "decisionPackage": "Definition:IdleGuard_Default:232428b431ff2414eb8254fb1e9e4cf1", + "decisionPackage": "Definition:Idle:47dfd6fd3d22b214cb8c446f2438f3c6", "effectProxyDefinitionName": null }, "hasFilterId": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerInnovationArtilleristSummonFlamethrower15.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerInnovationArtilleristSummonFlamethrower15.json index b760fb2321..d5fd432a14 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerInnovationArtilleristSummonFlamethrower15.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerInnovationArtilleristSummonFlamethrower15.json @@ -85,7 +85,7 @@ "number": 1, "conditionDefinition": "Definition:ConditionMindControlledByCaster:72691050707821744968bd0595150b86", "persistOnConcentrationLoss": false, - "decisionPackage": "Definition:IdleGuard_Default:232428b431ff2414eb8254fb1e9e4cf1", + "decisionPackage": "Definition:Idle:47dfd6fd3d22b214cb8c446f2438f3c6", "effectProxyDefinitionName": null }, "hasFilterId": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerInnovationArtilleristSummonFlamethrower3.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerInnovationArtilleristSummonFlamethrower3.json index 651f9c184d..cfc393daff 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerInnovationArtilleristSummonFlamethrower3.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerInnovationArtilleristSummonFlamethrower3.json @@ -85,7 +85,7 @@ "number": 1, "conditionDefinition": "Definition:ConditionMindControlledByCaster:72691050707821744968bd0595150b86", "persistOnConcentrationLoss": false, - "decisionPackage": "Definition:IdleGuard_Default:232428b431ff2414eb8254fb1e9e4cf1", + "decisionPackage": "Definition:Idle:47dfd6fd3d22b214cb8c446f2438f3c6", "effectProxyDefinitionName": null }, "hasFilterId": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerInnovationArtilleristSummonFlamethrower9.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerInnovationArtilleristSummonFlamethrower9.json index 32ff6b9168..55901566f1 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerInnovationArtilleristSummonFlamethrower9.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerInnovationArtilleristSummonFlamethrower9.json @@ -85,7 +85,7 @@ "number": 1, "conditionDefinition": "Definition:ConditionMindControlledByCaster:72691050707821744968bd0595150b86", "persistOnConcentrationLoss": false, - "decisionPackage": "Definition:IdleGuard_Default:232428b431ff2414eb8254fb1e9e4cf1", + "decisionPackage": "Definition:Idle:47dfd6fd3d22b214cb8c446f2438f3c6", "effectProxyDefinitionName": null }, "hasFilterId": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerInnovationArtilleristSummonForceBallista15.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerInnovationArtilleristSummonForceBallista15.json index 3b5d4c130d..ff6cce5bca 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerInnovationArtilleristSummonForceBallista15.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerInnovationArtilleristSummonForceBallista15.json @@ -85,7 +85,7 @@ "number": 1, "conditionDefinition": "Definition:ConditionMindControlledByCaster:72691050707821744968bd0595150b86", "persistOnConcentrationLoss": false, - "decisionPackage": "Definition:IdleGuard_Default:232428b431ff2414eb8254fb1e9e4cf1", + "decisionPackage": "Definition:Idle:47dfd6fd3d22b214cb8c446f2438f3c6", "effectProxyDefinitionName": null }, "hasFilterId": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerInnovationArtilleristSummonForceBallista3.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerInnovationArtilleristSummonForceBallista3.json index 6a4f2a8284..ba15da179e 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerInnovationArtilleristSummonForceBallista3.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerInnovationArtilleristSummonForceBallista3.json @@ -85,7 +85,7 @@ "number": 1, "conditionDefinition": "Definition:ConditionMindControlledByCaster:72691050707821744968bd0595150b86", "persistOnConcentrationLoss": false, - "decisionPackage": "Definition:IdleGuard_Default:232428b431ff2414eb8254fb1e9e4cf1", + "decisionPackage": "Definition:Idle:47dfd6fd3d22b214cb8c446f2438f3c6", "effectProxyDefinitionName": null }, "hasFilterId": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerInnovationArtilleristSummonForceBallista9.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerInnovationArtilleristSummonForceBallista9.json index 1d09b45112..cc2d899412 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerInnovationArtilleristSummonForceBallista9.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerInnovationArtilleristSummonForceBallista9.json @@ -85,7 +85,7 @@ "number": 1, "conditionDefinition": "Definition:ConditionMindControlledByCaster:72691050707821744968bd0595150b86", "persistOnConcentrationLoss": false, - "decisionPackage": "Definition:IdleGuard_Default:232428b431ff2414eb8254fb1e9e4cf1", + "decisionPackage": "Definition:Idle:47dfd6fd3d22b214cb8c446f2438f3c6", "effectProxyDefinitionName": null }, "hasFilterId": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerInnovationArtilleristSummonProtector15.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerInnovationArtilleristSummonProtector15.json index 2ba1eceb9a..8b523d149a 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerInnovationArtilleristSummonProtector15.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerInnovationArtilleristSummonProtector15.json @@ -85,7 +85,7 @@ "number": 1, "conditionDefinition": "Definition:ConditionMindControlledByCaster:72691050707821744968bd0595150b86", "persistOnConcentrationLoss": false, - "decisionPackage": "Definition:IdleGuard_Default:232428b431ff2414eb8254fb1e9e4cf1", + "decisionPackage": "Definition:Idle:47dfd6fd3d22b214cb8c446f2438f3c6", "effectProxyDefinitionName": null }, "hasFilterId": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerInnovationArtilleristSummonProtector3.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerInnovationArtilleristSummonProtector3.json index 933c0d3ba9..0d0227f46b 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerInnovationArtilleristSummonProtector3.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerInnovationArtilleristSummonProtector3.json @@ -85,7 +85,7 @@ "number": 1, "conditionDefinition": "Definition:ConditionMindControlledByCaster:72691050707821744968bd0595150b86", "persistOnConcentrationLoss": false, - "decisionPackage": "Definition:IdleGuard_Default:232428b431ff2414eb8254fb1e9e4cf1", + "decisionPackage": "Definition:Idle:47dfd6fd3d22b214cb8c446f2438f3c6", "effectProxyDefinitionName": null }, "hasFilterId": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerInnovationArtilleristSummonProtector9.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerInnovationArtilleristSummonProtector9.json index 1a2be56cf0..900fb94fc0 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerInnovationArtilleristSummonProtector9.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerInnovationArtilleristSummonProtector9.json @@ -85,7 +85,7 @@ "number": 1, "conditionDefinition": "Definition:ConditionMindControlledByCaster:72691050707821744968bd0595150b86", "persistOnConcentrationLoss": false, - "decisionPackage": "Definition:IdleGuard_Default:232428b431ff2414eb8254fb1e9e4cf1", + "decisionPackage": "Definition:Idle:47dfd6fd3d22b214cb8c446f2438f3c6", "effectProxyDefinitionName": null }, "hasFilterId": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerRangerHellWalkerFiendishSpawnHezrou.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerRangerHellWalkerFiendishSpawnHezrou.json index 7ff059d4b8..bbfe1d1d80 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerRangerHellWalkerFiendishSpawnHezrou.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerRangerHellWalkerFiendishSpawnHezrou.json @@ -85,7 +85,7 @@ "number": 1, "conditionDefinition": "Definition:ConditionMindControlledByCaster:72691050707821744968bd0595150b86", "persistOnConcentrationLoss": false, - "decisionPackage": "Definition:IdleGuard_Default:232428b431ff2414eb8254fb1e9e4cf1", + "decisionPackage": "Definition:Idle:47dfd6fd3d22b214cb8c446f2438f3c6", "effectProxyDefinitionName": null }, "hasFilterId": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerRangerHellWalkerFiendishSpawnMarilith.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerRangerHellWalkerFiendishSpawnMarilith.json index dac68cac64..e57905b559 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerRangerHellWalkerFiendishSpawnMarilith.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerRangerHellWalkerFiendishSpawnMarilith.json @@ -85,7 +85,7 @@ "number": 1, "conditionDefinition": "Definition:ConditionMindControlledByCaster:72691050707821744968bd0595150b86", "persistOnConcentrationLoss": false, - "decisionPackage": "Definition:IdleGuard_Default:232428b431ff2414eb8254fb1e9e4cf1", + "decisionPackage": "Definition:Idle:47dfd6fd3d22b214cb8c446f2438f3c6", "effectProxyDefinitionName": null }, "hasFilterId": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerRangerWildMasterSummonBeastCompanionKindredSpiritBear.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerRangerWildMasterSummonBeastCompanionKindredSpiritBear.json index 3513315a33..1509d50faf 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerRangerWildMasterSummonBeastCompanionKindredSpiritBear.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerRangerWildMasterSummonBeastCompanionKindredSpiritBear.json @@ -85,7 +85,7 @@ "number": 1, "conditionDefinition": "Definition:ConditionMindControlledByCaster:72691050707821744968bd0595150b86", "persistOnConcentrationLoss": false, - "decisionPackage": "Definition:IdleGuard_Default:232428b431ff2414eb8254fb1e9e4cf1", + "decisionPackage": "Definition:Idle:47dfd6fd3d22b214cb8c446f2438f3c6", "effectProxyDefinitionName": null }, "hasFilterId": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerRangerWildMasterSummonBeastCompanionKindredSpiritEagle.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerRangerWildMasterSummonBeastCompanionKindredSpiritEagle.json index 58316cd9b7..43782a6b14 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerRangerWildMasterSummonBeastCompanionKindredSpiritEagle.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerRangerWildMasterSummonBeastCompanionKindredSpiritEagle.json @@ -85,7 +85,7 @@ "number": 1, "conditionDefinition": "Definition:ConditionMindControlledByCaster:72691050707821744968bd0595150b86", "persistOnConcentrationLoss": false, - "decisionPackage": "Definition:IdleGuard_Default:232428b431ff2414eb8254fb1e9e4cf1", + "decisionPackage": "Definition:Idle:47dfd6fd3d22b214cb8c446f2438f3c6", "effectProxyDefinitionName": null }, "hasFilterId": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerRangerWildMasterSummonBeastCompanionKindredSpiritWolf.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerRangerWildMasterSummonBeastCompanionKindredSpiritWolf.json index cff6a901b2..25f11dbcbf 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerRangerWildMasterSummonBeastCompanionKindredSpiritWolf.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerRangerWildMasterSummonBeastCompanionKindredSpiritWolf.json @@ -85,7 +85,7 @@ "number": 1, "conditionDefinition": "Definition:ConditionMindControlledByCaster:72691050707821744968bd0595150b86", "persistOnConcentrationLoss": false, - "decisionPackage": "Definition:IdleGuard_Default:232428b431ff2414eb8254fb1e9e4cf1", + "decisionPackage": "Definition:Idle:47dfd6fd3d22b214cb8c446f2438f3c6", "effectProxyDefinitionName": null }, "hasFilterId": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerSharedPoolCircleOfTheWildfireSummonSpirit.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerSharedPoolCircleOfTheWildfireSummonSpirit.json index 6d4f76a6da..d6774cdd8a 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerSharedPoolCircleOfTheWildfireSummonSpirit.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerSharedPoolCircleOfTheWildfireSummonSpirit.json @@ -85,7 +85,7 @@ "number": 1, "conditionDefinition": "Definition:ConditionMindControlledByCaster:72691050707821744968bd0595150b86", "persistOnConcentrationLoss": false, - "decisionPackage": "Definition:IdleGuard_Default:232428b431ff2414eb8254fb1e9e4cf1", + "decisionPackage": "Definition:Idle:47dfd6fd3d22b214cb8c446f2438f3c6", "effectProxyDefinitionName": null }, "hasFilterId": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpell.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpell.json index 4a78eea613..b25fe5d203 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpell.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpell.json @@ -65,9 +65,7 @@ "hasVelocity": false, "velocityCellsPerRound": 2, "velocityType": "AwayFromSourceOriginalPosition", - "restrictedCreatureFamilies": [ - "Humanoid" - ], + "restrictedCreatureFamilies": [], "immuneCreatureFamilies": [], "restrictedCharacterSizes": [], "hasLimitedEffectPool": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateDeadRisenGhost.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateDeadRisenGhost.json index d9bb21bdfd..881752c39b 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateDeadRisenGhost.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateDeadRisenGhost.json @@ -97,7 +97,7 @@ "number": 1, "conditionDefinition": "Definition:ConditionMindControlledByCaster:72691050707821744968bd0595150b86", "persistOnConcentrationLoss": false, - "decisionPackage": "Definition:IdleGuard_Default:232428b431ff2414eb8254fb1e9e4cf1", + "decisionPackage": "Definition:Idle:47dfd6fd3d22b214cb8c446f2438f3c6", "effectProxyDefinitionName": null }, "hasFilterId": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateDeadRisenGhoul.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateDeadRisenGhoul.json index eea0d57546..6e12c99c5a 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateDeadRisenGhoul.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateDeadRisenGhoul.json @@ -97,7 +97,7 @@ "number": 1, "conditionDefinition": "Definition:ConditionMindControlledByCaster:72691050707821744968bd0595150b86", "persistOnConcentrationLoss": false, - "decisionPackage": "Definition:IdleGuard_Default:232428b431ff2414eb8254fb1e9e4cf1", + "decisionPackage": "Definition:Idle:47dfd6fd3d22b214cb8c446f2438f3c6", "effectProxyDefinitionName": null }, "hasFilterId": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateDeadRisenSkeleton.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateDeadRisenSkeleton.json index 8064ccfce0..a43e347a8a 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateDeadRisenSkeleton.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateDeadRisenSkeleton.json @@ -97,7 +97,7 @@ "number": 1, "conditionDefinition": "Definition:ConditionMindControlledByCaster:72691050707821744968bd0595150b86", "persistOnConcentrationLoss": false, - "decisionPackage": "Definition:IdleGuard_Default:232428b431ff2414eb8254fb1e9e4cf1", + "decisionPackage": "Definition:Idle:47dfd6fd3d22b214cb8c446f2438f3c6", "effectProxyDefinitionName": null }, "hasFilterId": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateDeadRisenSkeleton_Archer.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateDeadRisenSkeleton_Archer.json index d2f1c5e367..1247b493ce 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateDeadRisenSkeleton_Archer.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateDeadRisenSkeleton_Archer.json @@ -97,7 +97,7 @@ "number": 1, "conditionDefinition": "Definition:ConditionMindControlledByCaster:72691050707821744968bd0595150b86", "persistOnConcentrationLoss": false, - "decisionPackage": "Definition:IdleGuard_Default:232428b431ff2414eb8254fb1e9e4cf1", + "decisionPackage": "Definition:Idle:47dfd6fd3d22b214cb8c446f2438f3c6", "effectProxyDefinitionName": null }, "hasFilterId": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateDeadRisenSkeleton_Enforcer.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateDeadRisenSkeleton_Enforcer.json index c7f61a3044..4f5e3976d0 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateDeadRisenSkeleton_Enforcer.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateDeadRisenSkeleton_Enforcer.json @@ -97,7 +97,7 @@ "number": 1, "conditionDefinition": "Definition:ConditionMindControlledByCaster:72691050707821744968bd0595150b86", "persistOnConcentrationLoss": false, - "decisionPackage": "Definition:IdleGuard_Default:232428b431ff2414eb8254fb1e9e4cf1", + "decisionPackage": "Definition:Idle:47dfd6fd3d22b214cb8c446f2438f3c6", "effectProxyDefinitionName": null }, "hasFilterId": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateDeadRisenSkeleton_Knight.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateDeadRisenSkeleton_Knight.json index b753903e53..7ac052e603 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateDeadRisenSkeleton_Knight.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateDeadRisenSkeleton_Knight.json @@ -97,7 +97,7 @@ "number": 1, "conditionDefinition": "Definition:ConditionMindControlledByCaster:72691050707821744968bd0595150b86", "persistOnConcentrationLoss": false, - "decisionPackage": "Definition:IdleGuard_Default:232428b431ff2414eb8254fb1e9e4cf1", + "decisionPackage": "Definition:Idle:47dfd6fd3d22b214cb8c446f2438f3c6", "effectProxyDefinitionName": null }, "hasFilterId": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateDeadRisenSkeleton_Marksman.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateDeadRisenSkeleton_Marksman.json index d238fd9e46..3d69b9b353 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateDeadRisenSkeleton_Marksman.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateDeadRisenSkeleton_Marksman.json @@ -97,7 +97,7 @@ "number": 1, "conditionDefinition": "Definition:ConditionMindControlledByCaster:72691050707821744968bd0595150b86", "persistOnConcentrationLoss": false, - "decisionPackage": "Definition:IdleGuard_Default:232428b431ff2414eb8254fb1e9e4cf1", + "decisionPackage": "Definition:Idle:47dfd6fd3d22b214cb8c446f2438f3c6", "effectProxyDefinitionName": null }, "hasFilterId": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateDeadRisenWight.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateDeadRisenWight.json index 3ad8163888..23530d06cf 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateDeadRisenWight.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateDeadRisenWight.json @@ -97,7 +97,7 @@ "number": 1, "conditionDefinition": "Definition:ConditionMindControlledByCaster:72691050707821744968bd0595150b86", "persistOnConcentrationLoss": false, - "decisionPackage": "Definition:IdleGuard_Default:232428b431ff2414eb8254fb1e9e4cf1", + "decisionPackage": "Definition:Idle:47dfd6fd3d22b214cb8c446f2438f3c6", "effectProxyDefinitionName": null }, "hasFilterId": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateDeadRisenWightLord.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateDeadRisenWightLord.json index 7e23d5e3b9..7fc0511bf9 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateDeadRisenWightLord.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateDeadRisenWightLord.json @@ -97,7 +97,7 @@ "number": 1, "conditionDefinition": "Definition:ConditionMindControlledByCaster:72691050707821744968bd0595150b86", "persistOnConcentrationLoss": false, - "decisionPackage": "Definition:IdleGuard_Default:232428b431ff2414eb8254fb1e9e4cf1", + "decisionPackage": "Definition:Idle:47dfd6fd3d22b214cb8c446f2438f3c6", "effectProxyDefinitionName": null }, "hasFilterId": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/FindFamiliar.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/FindFamiliar.json index 4ab31e5981..5ea060d309 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/FindFamiliar.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/FindFamiliar.json @@ -97,7 +97,7 @@ "number": 1, "conditionDefinition": "Definition:ConditionMindControlledByCaster:72691050707821744968bd0595150b86", "persistOnConcentrationLoss": false, - "decisionPackage": "Definition:IdleGuard_Default:232428b431ff2414eb8254fb1e9e4cf1", + "decisionPackage": "Definition:Idle:47dfd6fd3d22b214cb8c446f2438f3c6", "effectProxyDefinitionName": null }, "hasFilterId": false, diff --git a/SolastaUnfinishedBusiness/ChangelogHistory.txt b/SolastaUnfinishedBusiness/ChangelogHistory.txt index f3b02a49fc..3f3a621687 100644 --- a/SolastaUnfinishedBusiness/ChangelogHistory.txt +++ b/SolastaUnfinishedBusiness/ChangelogHistory.txt @@ -16,8 +16,9 @@ - improved mod UI to ensure all settings required to be in sync on MP sessions are now under Gameplay - improved saving roll reaction modal descriptions [Circle of the Cosmos, Sorcerer Wild Magic, etc.] - improved Sorcerer Wild Magic tides of chaos to react on ability checks +- improved spells documentation dump to include which classes can cast any given spell - improved vanilla to allow reactions on gadget's saving roll [traps] -- improved Victory Modal export behavior to allow heroes not in pool to be exported [VANILLA] +- improved victory modal export behavior to allow heroes not in pool to be exported [VANILLA] 1.5.97.29: From 9356166b1f395a92d2ca27f481b0c00064d24969 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Fri, 6 Sep 2024 16:13:01 -0700 Subject: [PATCH 051/212] improve spells documentation dump to include which classes can cast any given spell --- Documentation/Spells.md | 650 +++++++++--------- .../Api/DatabaseHelper-RELEASE.cs | 10 +- .../Models/DocumentationContext.cs | 31 + 3 files changed, 358 insertions(+), 333 deletions(-) diff --git a/Documentation/Spells.md b/Documentation/Spells.md index c2a7afe290..e991b7ae6c 100644 --- a/Documentation/Spells.md +++ b/Documentation/Spells.md @@ -1,216 +1,216 @@ -# 1. - Acid Claws (S) level 0 Transmutation [UB] +# 1. - Acid Claws (S) level 0 Transmutation ] [UB] Your fingernails sharpen, ready to deliver a corrosive attack. Make a melee spell attack against one creature within 5 ft of you. On a hit, the target takes 1d8 acid damage and has AC lowered by 1 for 1 round (not stacking). -# 2. - Acid Splash (V,S) level 0 Conjuration [SOL] +# 2. - Acid Splash (V,S) level 0 Conjuration [Artificer,Sorcerer,Wizard] [SOL] Launch an acid bolt. -# 3. - Annoying Bee (V,S) level 0 Illusion [SOL] +# 3. - Annoying Bee (V,S) level 0 Illusion [Druid,Sorcerer,Wizard] [SOL] The target sees an illusional bee harassing them and has disadvantage on concentration checks until the start of their next turn. -# 4. - *Blade Ward* © (V,S) level 0 Abjuration [UB] +# 4. - *Blade Ward* © (V,S) level 0 Abjuration ] [UB] You extend your hand and trace a sigil of warding in the air. Until the end of your next turn, you have resistance against bludgeoning, piercing, and slashing damage dealt by weapon attacks. -# 5. - *Booming Blade* © (M,S) level 0 Evocation [UB] +# 5. - *Booming Blade* © (M,S) level 0 Evocation ] [UB] You brandish the weapon used in the spell's casting and make a melee attack with it against one creature within 5 ft distance. On a hit, the target suffers the weapon attack's normal effects and then becomes sheathed in booming energy until the start of your next turn. If the target willingly moves 5 ft or more before then, the target takes 1d8 thunder damage, and the spell ends. At 5th level, the melee attack deals an extra 1d8 thunder damage to the target on a hit, and the damage the target takes for moving increases to 2d8. Both damage rolls increase by 1d8 at 11th and 17th levels. -# 6. - Chill Touch (V,S) level 0 Necromancy [SOL] +# 6. - Chill Touch (V,S) level 0 Necromancy [Sorcerer,Warlock,Wizard] [SOL] Deal damage to one enemy and prevent healing for a limited time. -# 7. - Dancing Lights (V,S) level 0 Evocation [Concentration] [SOL] +# 7. - Dancing Lights (V,S) level 0 Evocation [Concentration] [Bard,Sorcerer,Wizard] [SOL] Create dancing lights that move at your command. -# 8. - Dazzle (S) level 0 Illusion [SOL] +# 8. - Dazzle (S) level 0 Illusion [Bard,Sorcerer,Warlock,Wizard] [SOL] Lower a target's AC and prevent reaction until the start of its next turn. -# 9. - Eldritch Blast (V,S) level 0 Evocation [SOL] +# 9. - Eldritch Blast (V,S) level 0 Evocation [Warlock] [SOL] Unleash a beam of crackling energy with a ranged spell attack against the target. On a hit, it takes 1d10 force damage. -# 10. - Fire Bolt (V,S) level 0 Evocation [SOL] +# 10. - Fire Bolt (V,S) level 0 Evocation [Artificer,Sorcerer,Wizard] [SOL] Launch a fire bolt. -# 11. - *Green-Flame Blade* © (M,S) level 0 Evocation [UB] +# 11. - *Green-Flame Blade* © (M,S) level 0 Evocation ] [UB] You brandish the weapon used in the spell's casting and make a melee attack with it against one creature within 5 ft distance. On a hit, the target suffers the weapon attack's normal effects, and you can cause green fire to leap from the target to a different creature of your choice that you can see within 5 ft of it. The second creature takes fire damage equal to your spellcasting ability modifier. At 5th level, the melee attack deals an extra 1d8 fire damage to the target on a hit, and the fire damage to the second creature increases to 1d8 + your spellcasting ability modifier. Both damage rolls increase by 1d8 at 11th and 17th levels. -# 12. - Guidance (V,S) level 0 Divination [Concentration] [SOL] +# 12. - Guidance (V,S) level 0 Divination [Concentration] [Artificer,Cleric,Druid] [SOL] Increase an ally's ability checks for a limited time. -# 13. - *Gust* © (V,S) level 0 Transmutation [UB] +# 13. - *Gust* © (V,S) level 0 Transmutation ] [UB] Fire a blast of focused air at your target. -# 14. - Illuminating Sphere (V,S) level 0 Enchantment [UB] +# 14. - Illuminating Sphere (V,S) level 0 Enchantment ] [UB] Causes light sources such as torches and mana lamps in the area of effect to light up. -# 15. - *Infestation* © (V,S) level 0 Conjuration [UB] +# 15. - *Infestation* © (V,S) level 0 Conjuration ] [UB] You cause a cloud of mites, fleas, and other parasites to appear momentarily on one creature you can see within range. The target must succeed on a Constitution saving throw, or it takes 1d6 poison damage and moves 5 ft in a random direction. The spell's damage increases by an additional die at 5th, 11th and 17th level. -# 16. - Light (V) level 0 Evocation [SOL] +# 16. - Light (V) level 0 Evocation [Bard,Cleric,Sorcerer,Wizard] [SOL] An object you can touch emits a powerful light for a limited time. -# 17. - Light (V) level 0 Evocation [SOL] +# 17. - Light (V) level 0 Evocation ] [SOL] An object you can touch emits a powerful light for a limited time. -# 18. - *Lightning Lure* © (V) level 0 Evocation [UB] +# 18. - *Lightning Lure* © (V) level 0 Evocation ] [UB] You create a lash of lightning energy that strikes at one creature of your choice that you can see within 15 ft of you. The target must succeed on a Strength saving throw or be pulled up to 10 ft in a straight line toward you and then take 1d8 lightning damage. The spell's damage increases by an additional die at 5th, 11th and 17th level. -# 19. - *Mind Sliver* © (V) level 0 Enchantment [UB] +# 19. - *Mind Sliver* © (V) level 0 Enchantment ] [UB] You drive a disorienting spike of psychic energy into the mind of one creature you can see within range. The target must succeed on an Intelligence saving throw or take 1d6 psychic damage and subtract 1d4 from the next saving throw it makes before the end of your next turn. -# 20. - Minor Lifesteal (V,S) level 0 Necromancy [UB] +# 20. - Minor Lifesteal (V,S) level 0 Necromancy ] [UB] You drain vital energy from a nearby enemy creature. Make a melee spell attack against a creature within 5 ft of you. On a hit, the creature takes 1d6 necrotic damage, and you heal for half the damage dealt (rounded down). This spell has no effect on undead and constructs. The spell's damage increases by an additional die at 5th, 11th and 17th level. -# 21. - Poison Spray (V,S) level 0 Conjuration [SOL] +# 21. - Poison Spray (V,S) level 0 Conjuration [Artificer,Druid,Sorcerer,Warlock,Wizard] [SOL] Fire a poison spray at an enemy you can see, within range. -# 22. - *Primal Savagery* © (S) level 0 Transmutation [UB] +# 22. - *Primal Savagery* © (S) level 0 Transmutation ] [UB] You channel primal magic to cause your teeth or fingernails to sharpen, ready to deliver a corrosive attack. Make a melee spell attack against one creature within 5 ft of you. On a hit, the target takes 1d10 acid damage. The spell's damage increases by an additional die at 5th, 11th and 17th level. -# 23. - Produce Flame (V,S) level 0 Conjuration [SOL] +# 23. - Produce Flame (V,S) level 0 Conjuration [Druid] [SOL] Conjures a flickering flame in your hand, which generates light or can be hurled to inflict fire damage. -# 24. - Ray of Frost (V,S) level 0 Evocation [SOL] +# 24. - Ray of Frost (V,S) level 0 Evocation [Artificer,Sorcerer,Wizard] [SOL] Launch a freezing ray at an enemy to damage and slow them. -# 25. - Resistance (V,S) level 0 Abjuration [Concentration] [SOL] +# 25. - Resistance (V,S) level 0 Abjuration [Concentration] [Artificer,Cleric,Druid] [SOL] Grant an ally a one-time bonus to saving throws. -# 26. - Sacred Flame (V,S) level 0 Evocation [SOL] +# 26. - Sacred Flame (V,S) level 0 Evocation [Cleric] [SOL] Strike an enemy with radiant damage. -# 27. - *Sapping Sting* © (V,S) level 0 Necromancy [UB] +# 27. - *Sapping Sting* © (V,S) level 0 Necromancy ] [UB] You sap the vitality of one creature you can see in range. The target must succeed on a Constitution saving throw or take 1d4 necrotic damage and fall prone. -# 28. - Shadow Armor (V,S) level 0 Abjuration [SOL] +# 28. - Shadow Armor (V,S) level 0 Abjuration [Bard,Sorcerer,Warlock,Wizard] [SOL] Grants 3 temporary hit points for one minute. -# 29. - Shadow Dagger (V,S) level 0 Illusion [SOL] +# 29. - Shadow Dagger (V,S) level 0 Illusion [Bard,Sorcerer,Warlock,Wizard] [SOL] Launches an illusionary dagger that causes psychic damage. -# 30. - Shillelagh (V,S) level 0 Transmutation [SOL] +# 30. - Shillelagh (V,S) level 0 Transmutation [Druid] [SOL] Conjures a magical club whose attacks are magical and use your spellcasting ability instead of strength. -# 31. - Shine (V,S) level 0 Conjuration [SOL] +# 31. - Shine (V,S) level 0 Conjuration [Cleric,Sorcerer,Wizard] [SOL] An enemy you can see becomes luminous for a while. -# 32. - Shocking Grasp (V,S) level 0 Evocation [SOL] +# 32. - Shocking Grasp (V,S) level 0 Evocation [Artificer,Sorcerer,Wizard] [SOL] Damage and daze an enemy on a successful touch. -# 33. - Spare the Dying (S) level 0 Necromancy [SOL] +# 33. - Spare the Dying (S) level 0 Necromancy [Artificer,Cleric] [SOL] Touch a dying ally to stabilize them. -# 34. - Sparkle (V,S) level 0 Enchantment [SOL] +# 34. - Sparkle (V,S) level 0 Enchantment [Bard,Cleric,Druid,Sorcerer,Warlock,Wizard] [SOL] Target up to three objects that can be illuminated and light them up immediately. -# 35. - *Starry Wisp* © (V,S) level 0 Evocation [UB] +# 35. - *Starry Wisp* © (V,S) level 0 Evocation ] [UB] You launch a mote of light at one creature or object within range. Make a ranged spell attack against the target. On a hit, the target takes 1d8 Radiant damage, and until the end of your next turn, it emits Dim Light in a 10-foot radius and can't benefit from the Invisible condition. The spell's damage increases by an additional die at 5th, 11th and 17th level. -# 36. - Sunlit Blade (M,S) level 0 Evocation [UB] +# 36. - Sunlit Blade (M,S) level 0 Evocation ] [UB] You brandish the weapon used in the spell's casting and make a melee attack with it against one creature within 5 ft distance. On a hit, the target suffers the weapon attack's normal effects, and is enveloped in glowing radiant energy, shedding dim light for the turn. Next attack against this creature while it is highlighted is done with advantage. At 5th level, the melee attack deals an extra 1d8 radiant damage to the target. The damage increases by another 1d8 at 11th and 17th levels. -# 37. - *Sword Burst* © (V,S) level 0 Enchantment [UB] +# 37. - *Sword Burst* © (V,S) level 0 Enchantment ] [UB] You create a momentary circle of spectral blades that sweep around you. All other creatures within 5 ft of you must each succeed on a Dexterity saving throw or take 1d6 force damage. -# 38. - *Thorn Whip* © (V,S) level 0 Transmutation [UB] +# 38. - *Thorn Whip* © (V,S) level 0 Transmutation ] [UB] You create a long, whip-like vine covered in thorns that lashes out at your command toward a creature in range. Make a ranged spell attack against the target. If the attack hits, the creature takes 1d6 piercing damage, and you pull the creature up to 10 ft closer to you. -# 39. - *Thunderclap* © (V,S) level 0 Evocation [UB] +# 39. - *Thunderclap* © (V,S) level 0 Evocation ] [UB] Create a burst of thundering sound, forcing creatures adjacent to you to make a Constitution saving throw or take 1d6 thunder damage. The spell's damage increases by an additional die at 5th, 11th and 17th level. -# 40. - *Toll the Dead* © (V,S) level 0 Necromancy [UB] +# 40. - *Toll the Dead* © (V,S) level 0 Necromancy ] [UB] You point at one creature you can see within range, and the sound of a dolorous bell fills the air around it for a moment. The target must succeed on a Wisdom saving throw or take 1d6 necrotic damage. If the target is missing any of its hit points, it instead takes 1d12 necrotic damage. -# 41. - True Strike (S) level 0 Divination [Concentration] [SOL] +# 41. - True Strike (S) level 0 Divination [Concentration] [Bard,Sorcerer,Warlock,Wizard] [SOL] Increases your chance to hit a target you can see, one time. -# 42. - Venomous Spike (V,S) level 0 Enchantment [SOL] +# 42. - Venomous Spike (V,S) level 0 Enchantment [Druid] [SOL] A bone spike that pierces and poisons its target. -# 43. - Vicious Mockery (V) level 0 Enchantment [SOL] +# 43. - Vicious Mockery (V) level 0 Enchantment [Bard] [SOL] Unleash a torrent of magically-enhanced insults on a creature you can see. It must make a successful wisdom saving throw, or take psychic damage and have disadvantage on its next attack roll. The effect lasts until the end of its next turn. -# 44. - *Word of Radiance* © (V) level 0 Evocation [UB] +# 44. - *Word of Radiance* © (V) level 0 Evocation ] [UB] Create a brilliant flash of shimmering light, damaging all enemies around you. -# 45. - Wrack (V,S) level 0 Necromancy [UB] +# 45. - Wrack (V,S) level 0 Necromancy ] [UB] Unleash a wave of crippling pain at a creature within range. The target must make a Constitution saving throw or take 1d6 necrotic damage, and preventing them from dashing or disengaging. -# 46. - *Absorb Elements* © (S) level 1 Abjuration [UB] +# 46. - *Absorb Elements* © (S) level 1 Abjuration ] [UB] The spell captures some of the incoming energy, lessening its effect on you and storing it for your next melee attack. You have resistance to the triggering damage type until the start of your next turn. Also, the first time you hit with a melee attack on your next turn, the target takes an extra 1d6 damage of the triggering type, and the spell ends. When you cast this spell using a spell slot of 2nd level or higher, the extra damage increases by 1d6 for each slot level above 1st. -# 47. - Animal Friendship (V,S) level 1 Enchantment [SOL] +# 47. - Animal Friendship (V,S) level 1 Enchantment [Bard,Druid,Ranger] [SOL] Choose a beast that you can see within the spell's range. The beast must make a Wisdom saving throw or be charmed for the spell's duration. -# 48. - *Armor of Agathys* © (V,S) level 1 Abjuration [UB] +# 48. - *Armor of Agathys* © (V,S) level 1 Abjuration ] [UB] A protective elemental skin envelops you, covering you and your gear. You gain 5 temporary hit points per spell level for the duration. In addition, if a creature hits you with a melee attack while you have these temporary hit points, the creature takes 5 cold damage per spell level. -# 49. - *Arms of Hadar* © (V,S) level 1 Evocation [UB] +# 49. - *Arms of Hadar* © (V,S) level 1 Evocation ] [UB] You invoke the power of malevolent forces. Tendrils of dark energy erupt from you and batter all creatures within 10 feet of you. Each creature in that area must make a Strength saving throw. On a failed save, a target takes 2d6 necrotic damage and can't take reactions until the start of your next turn. On a successful save, the creature takes half damage, but suffers no other effect. When you cast this spell using a spell slot of 2nd level or higher, the damage increases by 1d6 for each slot level above 1st. -# 50. - Bane (V,S) level 1 Enchantment [Concentration] [SOL] +# 50. - Bane (V,S) level 1 Enchantment [Concentration] [Bard,Cleric] [SOL] Reduce your enemies' attack and saving throws for a limited time. -# 51. - Bless (V,S) level 1 Enchantment [Concentration] [SOL] +# 51. - Bless (V,S) level 1 Enchantment [Concentration] [Cleric,Paladin] [SOL] Increase your allies' saving throws and attack rolls for a limited time. -# 52. - Burning Hands (V,S) level 1 Evocation [SOL] +# 52. - Burning Hands (V,S) level 1 Evocation [Sorcerer,Wizard] [SOL] Spray a cone of fire in front of you. -# 53. - Caustic Zap (V,S) level 1 Evocation [UB] +# 53. - Caustic Zap (V,S) level 1 Evocation ] [UB] You send a jolt of green energy toward the target momentarily disorientating them as the spell burn some of their armor. The spell targets one enemy with a spell attack and deals 1d4 acid and 1d6 lightning damage and applies the dazzled condition. -# 54. - *Chaos Bolt* © (V,S) level 1 Evocation [UB] +# 54. - *Chaos Bolt* © (V,S) level 1 Evocation ] [UB] Make a ranged spell attack against a target. On a hit, the target takes 2d8 + 1d6 damage. Choose one of the d8s. The number rolled on that die determines the attack's damage type: 1: ◰ Acid 2: ◲ Cold @@ -219,873 +219,873 @@ Make a ranged spell attack against a target. On a hit, the target takes 2d8 + 1d 7: ◹ Psychic 8: ◼ Thunder If you roll the same number on both d8s, you can use your free action to target a different creature of your choice. Make a new attack roll against the new target, and make a new damage roll, which could cause the chaotic energy to leap again. A creature can be damaged only once by each casting of this spell. -# 55. - Charm Person (V,S) level 1 Enchantment [SOL] +# 55. - Charm Person (V,S) level 1 Enchantment [Bard,Druid,Sorcerer,Warlock,Wizard] [SOL] Makes an ally of an enemy. -# 56. - *Chromatic Orb* © (M,V,S) level 1 Evocation [UB] +# 56. - *Chromatic Orb* © (M,V,S) level 1 Evocation ] [UB] You hurl a 4-inch-diameter sphere of energy at a creature that you can see within range. You choose acid, cold, fire, lightning, poison, or thunder for the type of orb you create, and then make a ranged spell attack against the target. If the attack hits, the creature takes 3d8 damage of the type you chose. -# 57. - Color Spray (V,S) level 1 Illusion [SOL] +# 57. - Color Spray (V,S) level 1 Illusion [Sorcerer,Wizard] [SOL] Spray a luminous cone that briefly blinds your enemies. Roll 6d10: the total is how many hit points of creatures this spell can affect. -# 58. - *Command* © (V) level 1 Enchantment [UB] +# 58. - *Command* © (V) level 1 Enchantment ] [UB] -You speak a one-word command to a creature you can see within range. The target must succeed on a Wisdom saving throw or follow the command on its next turn. The spell has no effect if the target is undead. Commands follow: +You speak a one-word command to a creature you can see within range. The target must succeed on a Wisdom saving throw or follow the command on its next turn. You can only command creatures you share a language with, which include all humanoids. To command a non-humanoid creature, you must know Draconic for Dragons, Elvish for Fey, Giant for Giants, Infernal for Fiends and Terran for Elementals. Commands follow: • Approach: The target moves toward you by the shortest and most direct route, ending its turn if it moves within 5 feet of you. • Flee: The target spends its turn moving away from you by the fastest available means. • Grovel: The target falls prone and then ends its turn. • Halt: The target doesn't move and takes no actions. When you cast this spell using a spell slot of 2nd level or higher, you may target an additional creature within range for each slot level above 2nd. -# 59. - Comprehend Languages (V,S) level 1 Divination [SOL] +# 59. - Comprehend Languages (V,S) level 1 Divination [Bard,Sorcerer,Warlock,Wizard] [SOL] For the duration of the spell, you understand the literal meaning of any spoken words that you hear. -# 60. - Cure Wounds (V,S) level 1 Evocation [SOL] +# 60. - Cure Wounds (V,S) level 1 Evocation [Artificer,Bard,Cleric,Druid,Paladin,Ranger] [SOL] Heal an ally by touch. -# 61. - Detect Evil and Good (V,S) level 1 Divination [Concentration] [SOL] +# 61. - Detect Evil and Good (V,S) level 1 Divination [Concentration] [Cleric,Paladin] [SOL] Detect nearby creatures of evil or good nature. -# 62. - Detect Magic (V,S) level 1 Divination [Concentration] [SOL] +# 62. - Detect Magic (V,S) level 1 Divination [Concentration] [Artificer,Bard,Cleric,Druid,Paladin,Ranger,Sorcerer,Wizard] [SOL] Detect nearby magic objects or creatures. -# 63. - Detect Poison and Disease (V,S) level 1 Divination [Concentration] [SOL] +# 63. - Detect Poison and Disease (V,S) level 1 Divination [Concentration] [Druid] [SOL] TMP For the duration you sense the presence and location of poisonous creatures and diseases within 6 cells of you. -# 64. - *Dissonant Whispers* © (V) level 1 Enchantment [UB] +# 64. - *Dissonant Whispers* © (V) level 1 Enchantment ] [UB] You whisper a discordant melody that only one creature of your choice within range can hear, wracking it with terrible pain. The target must make a Wisdom saving throw. On a failed save, it takes 3d6 psychic damage and must immediately use its reaction, if available, to move as far as its speed allows away from you. The creature doesn't move into obviously dangerous ground, such as a fire or a pit. On a successful save, the target takes half as much damage and doesn't have to move away. When you cast this spell using a spell slot of 2nd level or higher, the damage increases by 1d6 for each slot level above 1st. -# 65. - Divine Favor (V,S) level 1 Evocation [Concentration] [SOL] +# 65. - Divine Favor (V,S) level 1 Evocation [Concentration] [Paladin] [SOL] Gain additional radiant damage for a limited time. -# 66. - *Earth Tremor* © (V,S) level 1 Evocation [UB] +# 66. - *Earth Tremor* © (V,S) level 1 Evocation ] [UB] You strike the ground and unleash a tremor of seismic force, hurling up earth, rock, and sand. -# 67. - *Ensnaring Strike* © (V) level 1 Conjuration [Concentration] [UB] +# 67. - *Ensnaring Strike* © (V) level 1 Conjuration [Concentration] ] [UB] The next time you hit a creature with a weapon attack before this spell ends, a writhing mass of thorny vines appears at the point of impact, and the target must succeed on a Strength saving throw or be restrained by the magical vines until the spell ends.While restrained by this spell, the target takes 1d6 piercing damage at the start of each of its turns. A creature restrained by the vines can use its action to make a Strength check against your spell save DC. -# 68. - Entangle (V,S) level 1 Conjuration [Concentration] [SOL] +# 68. - Entangle (V,S) level 1 Conjuration [Concentration] [Druid] [SOL] Creatures in a four-cell square area are restrained if they fail a STR saving throw -# 69. - Expeditious Retreat (V,S) level 1 Transmutation [Concentration] [SOL] +# 69. - Expeditious Retreat (V,S) level 1 Transmutation [Concentration] [Artificer,Sorcerer,Warlock,Wizard] [SOL] Gain movement points and become able to dash as a bonus action for a limited time. -# 70. - Faerie Fire (V) level 1 Evocation [Concentration] [SOL] +# 70. - Faerie Fire (V) level 1 Evocation [Concentration] [Artificer,Bard,Druid] [SOL] Highlight creatures to give advantage to anyone attacking them. -# 71. - False Life (V,S) level 1 Necromancy [SOL] +# 71. - False Life (V,S) level 1 Necromancy [Artificer,Sorcerer,Wizard] [SOL] Gain a few temporary hit points for a limited time. -# 72. - Feather Fall (V) level 1 Transmutation [SOL] +# 72. - Feather Fall (V) level 1 Transmutation [Artificer,Bard,Sorcerer,Wizard] [SOL] Provide a safe landing when you or an ally falls. -# 73. - *Find Familiar* © (V,S) level 1 Conjuration [UB] +# 73. - *Find Familiar* © (V,S) level 1 Conjuration ] [UB] You gain the service of a familiar. The familiar can use the help action, and you can cast any touch or melee hit spell through the familiar. -# 74. - Fog Cloud (V,S) level 1 Conjuration [Concentration] [SOL] +# 74. - Fog Cloud (V,S) level 1 Conjuration [Concentration] [Druid,Ranger,Sorcerer,Wizard] [SOL] Generate a sphere of thick fog for a limited time. The area is heavily obscured, penalizing creatures inside it that rely on sight. -# 75. - *Gift of Alacrity* © (V,S) level 1 Divination [UB] +# 75. - *Gift of Alacrity* © (V,S) level 1 Divination ] [UB] You touch a willing creature. For the duration, the target can add 1d8 to its initiative rolls. -# 76. - Goodberry (V,S) level 1 Transmutation [SOL] +# 76. - Goodberry (V,S) level 1 Transmutation [Druid,Ranger] [SOL] Creates 10 berries infused with magic. Eating a berry restores 1 hit point and provides sustenance for a long rest. Berries vanish after a long rest. -# 77. - Grease (V,S) level 1 Conjuration [SOL] +# 77. - Grease (V,S) level 1 Conjuration [Artificer,Wizard] [SOL] Cover an area of 2 x 2 cells with grease. Creatures trying to cross it may fall prone. -# 78. - Guiding Bolt (V,S) level 1 Evocation [SOL] +# 78. - Guiding Bolt (V,S) level 1 Evocation [Cleric] [SOL] Launch a radiant attack against an enemy and make them easy to hit. -# 79. - *Hail of Thorns* © (V) level 1 Conjuration [Concentration] [UB] +# 79. - *Hail of Thorns* © (V) level 1 Conjuration [Concentration] ] [UB] The next time you hit a creature with a ranged weapon attack before the spell ends, this spell creates a rain of thorns that sprouts from your ranged weapon or ammunition. In addition to the normal effect of the attack, the target of the attack and each creature within 5 feet of it must make a Dexterity saving throw. A creature takes 1d10 piercing damage on a failed save, or half as much damage on a successful one. -# 80. - Healing Word (V) level 1 Evocation [SOL] +# 80. - Healing Word (V) level 1 Evocation [Bard,Cleric,Druid] [SOL] Heal an ally you can see. -# 81. - Hellish Rebuke (V,S) level 1 Evocation [SOL] +# 81. - Hellish Rebuke (V,S) level 1 Evocation [Warlock] [SOL] When you are damaged by a creature within range, you can use your reaction to inflict fire damage back. -# 82. - Heroism (V,S) level 1 Enchantment [Concentration] [SOL] +# 82. - Heroism (V,S) level 1 Enchantment [Concentration] [Bard,Paladin] [SOL] An ally gains temporary hit points and cannot be frightened for a limited time. -# 83. - Hideous Laughter (V,S) level 1 Enchantment [Concentration] [SOL] +# 83. - Hideous Laughter (V,S) level 1 Enchantment [Concentration] [Bard,Wizard] [SOL] Make an enemy helpless with irresistible laughter. -# 84. - Hunter's Mark (V) level 1 Divination [Concentration] [SOL] +# 84. - Hunter's Mark (V) level 1 Divination [Concentration] [Ranger] [SOL] An enemy gets additional damage from you, and you can easily detect it for a limited time. -# 85. - *Ice Knife* © (S) level 1 Conjuration [UB] +# 85. - *Ice Knife* © (S) level 1 Conjuration ] [UB] You create a shard of ice and fling it at one creature within range. Make a ranged spell attack against the target. On a hit, the target takes 1d10 piercing damage. Hit or miss, the shard then explodes. The target and each creature within 5 feet of the point where the ice exploded must succeed on a Dexterity saving throw or take 2d6 cold damage. When you cast this spell using a spell slot of 2nd level or higher, both the cold and piercing damage increase by 1 die for each slot level above 1st. -# 86. - Identify (M,V,S) level 1 Divination [SOL] +# 86. - Identify (M,V,S) level 1 Divination [Artificer,Bard,Wizard] [SOL] Identify the hidden properties of an object. -# 87. - Inflict Wounds (V,S) level 1 Necromancy [SOL] +# 87. - Inflict Wounds (V,S) level 1 Necromancy [Cleric] [SOL] Deal necrotic damage to an enemy you hit. -# 88. - Jump (V,S) level 1 Transmutation [SOL] +# 88. - Jump (V,S) level 1 Transmutation [Artificer,Druid,Ranger,Sorcerer,Wizard] [SOL] Increase an ally's jumping distance. -# 89. - Jump (V,S) level 1 Transmutation [SOL] +# 89. - Jump (V,S) level 1 Transmutation ] [SOL] Increase an ally's jumping distance. -# 90. - Longstrider (V,S) level 1 Transmutation [SOL] +# 90. - Longstrider (V,S) level 1 Transmutation [Artificer,Bard,Druid,Ranger,Wizard] [SOL] Increases an ally's speed by two cells per turn. -# 91. - Mage Armor (V,S) level 1 Abjuration [SOL] +# 91. - Mage Armor (V,S) level 1 Abjuration [Sorcerer,Wizard] [SOL] Provide magical armor to an ally who doesn't wear armor. -# 92. - Magic Missile (V,S) level 1 Evocation [SOL] +# 92. - Magic Missile (V,S) level 1 Evocation [Sorcerer,Wizard] [SOL] Strike one or more enemies with projectiles that can't miss. -# 93. - *Magnify Gravity* © (V,S) level 1 Transmutation [UB] +# 93. - *Magnify Gravity* © (V,S) level 1 Transmutation ] [UB] Sharply increase gravity in a 10-foot-radius sphere to crush and slow targets. -# 94. - Malediction (V,S) level 1 Enchantment [Concentration] [SOL] +# 94. - Malediction (V,S) level 1 Enchantment [Concentration] [Warlock] [SOL] Until the spell ends, whenever you hit a target with an attack you deal an extra 1d6 magical damage of the same type as the attack's damage. -# 95. - Mule (V,S) level 1 Transmutation [UB] +# 95. - Mule (V,S) level 1 Transmutation ] [UB] The recipient of this spell is able to ignore the effects of heavy loads or armor on movement speed. They can also carry slightly more weight. -# 96. - Protect vs Evil & Good (V,S) level 1 Abjuration [Concentration] [SOL] +# 96. - Protect vs Evil & Good (V,S) level 1 Abjuration [Concentration] [Cleric,Paladin,Warlock,Wizard] [SOL] Touch an ally to give them protection from evil or good creatures for a limited time. -# 97. - Radiant Motes (V,S) level 1 Evocation [UB] +# 97. - Radiant Motes (V,S) level 1 Evocation ] [UB] Unleashes a swarm of 4 radiant projectiles that deal 1d4 radiant damage each. When you cast this spell using a spell slot of 2nd level or higher, the spell creates 1 more projectile for each slot above 1st. -# 98. - *Sanctuary* © (V,S) level 1 Abjuration [UB] +# 98. - *Sanctuary* © (V,S) level 1 Abjuration ] [UB] You ward a creature within range against attack. Until the spell ends, any creature who targets the warded creature with an attack or a harmful spell must first make a Wisdom saving throw. On a failed save, the creature loses the attack or spell. This spell doesn't protect the warded creature from area effects. If the warded creature makes an attack or casts a spell, this spell ends. -# 99. - *Searing Smite* © (V) level 1 Evocation [Concentration] [UB] +# 99. - *Searing Smite* © (V) level 1 Evocation [Concentration] ] [UB] On your next hit your weapon flares with white-hot intensity, and the attack deals an extra 1d6 fire damage to the target and causes the target to ignite in flames. At the start of each of its turns the target must make a successful Constitution saving throw to stop burning, or take 1d6 fire damage. Higher Levels: for each slot level above 1st, the initial extra damage dealt by the attack increases by 1d6. -# 100. - Shield (V,S) level 1 Abjuration [SOL] +# 100. - Shield (V,S) level 1 Abjuration [Sorcerer,Wizard] [SOL] Increase your AC by 5 just before you would take a hit. -# 101. - Shield of Faith (V,S) level 1 Abjuration [Concentration] [SOL] +# 101. - Shield of Faith (V,S) level 1 Abjuration [Concentration] [Cleric,Paladin] [SOL] Increase an ally's AC by 2 for a limited time. -# 102. - Sleep (V,S) level 1 Enchantment [SOL] +# 102. - Sleep (V,S) level 1 Enchantment [Bard,Sorcerer,Wizard] [SOL] Put a number of creatures to sleep for a limited time. Roll 5d8: the total is how many hit points of creatures this spell can affect. -# 103. - *Tasha's Caustic Brew* © (V,S) level 1 Evocation [Concentration] [UB] +# 103. - *Tasha's Caustic Brew* © (V,S) level 1 Evocation [Concentration] ] [UB] A stream of acid emanates from you in a line 30 feet long and 5 feet wide in a direction you choose. Each creature in the line must succeed on a Dexterity saving throw or be covered in acid for the spell's duration or until a creature uses its action to scrape or wash the acid off itself or another creature. A creature covered in the acid takes 2d4 acid damage at start of each of its turns. When you cast this spell using a spell slot 2nd level or higher, the damage increases by 2d4 for each slot level above 1st. -# 104. - *Thunderous Smite* © (V) level 1 Evocation [Concentration] [UB] +# 104. - *Thunderous Smite* © (V) level 1 Evocation [Concentration] ] [UB] On your next hit your weapon rings with thunder and the attack deals an extra 2d6 thunder damage to the target. Additionally, if the target is a creature, it must succeed on a Strength saving throw or be pushed 10 ft away from you and knocked prone. -# 105. - Thunderwave (V,S) level 1 Evocation [SOL] +# 105. - Thunderwave (V,S) level 1 Evocation [Bard,Druid,Sorcerer,Wizard] [SOL] Emit a wave of force that causes damage and pushes creatures and objects away. -# 106. - Tiefling's Hellish Rebuke (V,S) level 1 Evocation [SOL] +# 106. - Tiefling's Hellish Rebuke (V,S) level 1 Evocation ] [SOL] When you are damaged by a creature withing range, you can use your reaction to inflict fire damage back at them. This tiefling version of the spell is more powerful than the common one but cannot use a higher level Spell Slot to increase damage. -# 107. - *Witch Bolt* © (V,S) level 1 Evocation [Concentration] [UB] +# 107. - *Witch Bolt* © (V,S) level 1 Evocation [Concentration] ] [UB] A beam of crackling, blue energy lances out toward a creature within range, forming a sustained arc of lightning between you and the target. Make a ranged spell attack against that creature. On a hit, the target takes 1d12 lightning damage, and on each of your turns for the duration, you can use your action to deal 1d12 lightning damage to the target automatically. The spell ends if you use your action to do anything else. The spell also ends if the target is ever outside the spell's range. When you cast this spell using a spell slot of 2nd level or higher, the damage increases by 1d12 for each slot level above 1st. -# 108. - *Wrathful Smite* © (V) level 1 Evocation [Concentration] [UB] +# 108. - *Wrathful Smite* © (V) level 1 Evocation [Concentration] ] [UB] Your next hit deals additional 1d6 psychic damage. If target fails WIS saving throw its mind explodes in pain, and it becomes frightened. -# 109. - *Zephyr Strike* © (V) level 1 Transmutation [Concentration] [UB] +# 109. - *Zephyr Strike* © (V) level 1 Transmutation [Concentration] ] [UB] You move like the wind. For the duration, your movement doesn't provoke opportunity attacks. Once before the spell ends, you can give yourself advantage on one weapon attack roll on your turn. That attack deals an extra 1d8 force damage on a hit. Whether you hit or miss, your walking speed increases by 30 feet until the end of that turn. -# 110. - Acid Arrow (V,S) level 2 Evocation [SOL] +# 110. - Acid Arrow (V,S) level 2 Evocation [Wizard] [SOL] Launch an acid arrow that deals some damage even if you miss your shot. -# 111. - *Aganazzar's Scorcher* © (V,S) level 2 Evocation [UB] +# 111. - *Aganazzar's Scorcher* © (V,S) level 2 Evocation ] [UB] A line of roaring flame 30 feet long and 5 feet wide emanates from you in a direction you choose. Each creature in the line must make a Dexterity saving throw. A creature takes 3d10 fire damage on a failed save, or half as much damage on a successful one. When you cast this spell using a spell slot of 3rd level or higher, the damage increases by 1d10 for each slot level above 2nd. -# 112. - Aid (V,S) level 2 Abjuration [SOL] +# 112. - Aid (V,S) level 2 Abjuration [Artificer,Cleric,Paladin] [SOL] Temporarily increases hit points for up to three allies. -# 113. - Barkskin (V,S) level 2 Transmutation [Concentration] [SOL] +# 113. - Barkskin (V,S) level 2 Transmutation [Concentration] [Druid,Ranger] [SOL] Gives you or an ally you can touch an AC of at least 16. -# 114. - Blindness (V) level 2 Necromancy [SOL] +# 114. - Blindness (V) level 2 Necromancy [Bard,Cleric,Sorcerer,Wizard] [SOL] Blind an enemy for one minute. -# 115. - Blur (V) level 2 Illusion [Concentration] [SOL] +# 115. - Blur (V) level 2 Illusion [Concentration] [Artificer,Sorcerer,Wizard] [SOL] Makes you blurry and harder to hit for up to one minute. -# 116. - *Borrowed Knowledge* © (V,S) level 2 Divination [UB] +# 116. - *Borrowed Knowledge* © (V,S) level 2 Divination ] [UB] You draw on knowledge from spirits of the past. Choose one skill in which you lack proficiency. For 1 hour, you have proficiency in the chosen skill. The spell ends early if you cast it again. -# 117. - Branding Smite (V) level 2 Evocation [Concentration] [SOL] +# 117. - Branding Smite (V) level 2 Evocation [Concentration] [Paladin] [SOL] Your next hit causes additional radiant damage and your target becomes luminous. -# 118. - Calm Emotions (V,S) level 2 Enchantment [Concentration] [SOL] +# 118. - Calm Emotions (V,S) level 2 Enchantment [Concentration] [Bard,Cleric] [SOL] Stops allies from being charmed or frightened and makes hostile humanoids indifferent. -# 119. - *Cloud of Daggers* © (V,S) level 2 Conjuration [Concentration] [UB] +# 119. - *Cloud of Daggers* © (V,S) level 2 Conjuration [Concentration] ] [UB] You fill the air with spinning daggers in a cube 5 feet on each side, centered on a point you choose within range. A creature takes 4d4 slashing damage when it enters the spell's area for the first time on a turn or starts its turn there. When you cast this spell using a spell slot of 3rd level or higher, the damage increases by 2d4 for each slot level above 2nd. -# 120. - Color Burst (V,S) level 2 Illusion [UB] +# 120. - Color Burst (V,S) level 2 Illusion ] [UB] Burst a luminous cube that briefly blinds anyone within 10 ft. 8d10 is how many hit points of creatures this spell can affect. -# 121. - Conjure Goblinoids (V,S) level 2 Conjuration [Concentration] [UB] +# 121. - Conjure Goblinoids (V,S) level 2 Conjuration [Concentration] ] [UB] Conjures 2 goblins who obey your orders unless you lose concentration. -# 122. - Darkness (V) level 2 Evocation [Concentration] [SOL] +# 122. - Darkness (V) level 2 Evocation [Concentration] [Sorcerer,Warlock,Wizard] [SOL] Create an area of magical darkness. -# 123. - Darkvision (V,S) level 2 Transmutation [SOL] +# 123. - Darkvision (V,S) level 2 Transmutation [Artificer,Druid,Ranger,Sorcerer,Wizard] [SOL] Grant Darkvision to the target. -# 124. - Enhance Ability (V,S) level 2 Transmutation [Concentration] [SOL] +# 124. - Enhance Ability (V,S) level 2 Transmutation [Concentration] [Artificer,Bard,Cleric,Druid] [SOL] Grant temporary powers to an ally for up to one hour. -# 125. - Find Traps (V,S) level 2 Evocation [SOL] +# 125. - Find Traps (V,S) level 2 Evocation [Cleric,Druid,Ranger] [SOL] Spot mechanical and magical traps, but not natural hazards. -# 126. - Flame Blade (V,S) level 2 Evocation [Concentration] [SOL] +# 126. - Flame Blade (V,S) level 2 Evocation [Concentration] [Druid] [SOL] Evokes a fiery blade for ten minutes that you can wield in battle. -# 127. - Flaming Sphere (V,S) level 2 Evocation [Concentration] [SOL] +# 127. - Flaming Sphere (V,S) level 2 Evocation [Concentration] [Druid,Wizard] [SOL] Summons a movable, burning sphere. -# 128. - Heat Metal (V,S) level 2 Transmutation [Concentration] [SOL] +# 128. - Heat Metal (V,S) level 2 Transmutation [Concentration] [Artificer,Bard,Druid] [SOL] Causes metallic armor worn by a target creature to glow red hot, causing fire damage and disadvantage to attack rolls and ability checks. The damage can be repeated every turn with a bonus action. -# 129. - Hold Person (V,S) level 2 Enchantment [Concentration] [SOL] +# 129. - Hold Person (V,S) level 2 Enchantment [Concentration] [Bard,Cleric,Druid,Sorcerer,Warlock,Wizard] [SOL] Paralyze a humanoid you can see for a limited time. -# 130. - Invisibility (V,S) level 2 Illusion [Concentration] [SOL] +# 130. - Invisibility (V,S) level 2 Illusion [Concentration] [Artificer,Bard,Sorcerer,Warlock,Wizard] [SOL] Make an ally invisible for a limited time. -# 131. - *Kinetic Jaunt* © (S) level 2 Evocation [Concentration] [UB] +# 131. - *Kinetic Jaunt* © (S) level 2 Evocation [Concentration] ] [UB] You magically empower your movement with dance like steps, giving yourself the following benefits for the duration: • Your walking speed increases by 10 feet. • You don't provoke opportunity attacks. • You can move through the space of any creature. -# 132. - Knock (V) level 2 Transmutation [SOL] +# 132. - Knock (V) level 2 Transmutation [Bard,Sorcerer,Wizard] [SOL] Magically open locked doors, chests, and the like. -# 133. - Lesser Restoration (V,S) level 2 Abjuration [SOL] +# 133. - Lesser Restoration (V,S) level 2 Abjuration [Artificer,Bard,Cleric,Druid,Paladin,Ranger] [SOL] Remove a detrimental condition from an ally. -# 134. - Levitate (V,S) level 2 Transmutation [Concentration] [SOL] +# 134. - Levitate (V,S) level 2 Transmutation [Concentration] [Artificer,Sorcerer,Wizard] [SOL] Allow a creature to levitate and gain control of its aerial movement for a limited time. Can affect enemies if their size is medium or smaller. -# 135. - Levitate (V,S) level 2 Transmutation [Concentration] [SOL] +# 135. - Levitate (V,S) level 2 Transmutation [Concentration] ] [SOL] Allow a creature to levitate and gain control of its aerial movement for a limited time. Can affect enemies if their size is medium or smaller. -# 136. - Magic Weapon (V,S) level 2 Transmutation [Concentration] [SOL] +# 136. - Magic Weapon (V,S) level 2 Transmutation [Concentration] [Artificer,Paladin,Wizard] [SOL] A nonmagical weapon becomes a +1 weapon for up to one hour. -# 137. - *Mirror Image* © (V,S) level 2 Illusion [UB] +# 137. - *Mirror Image* © (V,S) level 2 Illusion ] [UB] Three illusory duplicates of yourself appear in your space. Until the spell ends, each time a creature targets you with an attack, roll a d20 to determine whether the attack instead targets one of your duplicates. If you have 3 duplicates, you must roll a 6 or higher to change the attack's target to a duplicate. With 2 duplicates, you must roll an 8 or higher. With 1 duplicate, you must roll an 11 or higher. A duplicate's AC is equal to 10 + your Dexterity modifier. If an attack hits a duplicate, the duplicate is destroyed. A duplicate can be destroyed only by an attack that hits it. It ignores all other damage and effects. The spell ends when all three duplicates are destroyed. A creature is unaffected by this spell if it is Blinded, or has Blindsight, Truesight or Tremorsense (doesn't apply if you don't touch ground). -# 138. - Misty Step (V) level 2 Conjuration [SOL] +# 138. - Misty Step (V) level 2 Conjuration [Sorcerer,Warlock,Wizard] [SOL] Teleports you to a free cell you can see, no more than 6 cells away. -# 139. - Moon Beam (V,S) level 2 Evocation [Concentration] [SOL] +# 139. - Moon Beam (V,S) level 2 Evocation [Concentration] [Druid] [SOL] Conjures a vertical column of moonlight which causes radiant damage. Shapechangers have disadvantage on the save. -# 140. - Noxious Spray (V,S) level 2 Evocation [UB] +# 140. - Noxious Spray (V,S) level 2 Evocation ] [UB] You unleash a spray of noxious gases on a target within range. Make a ranged spell attack. On a hit, the target takes 4d6 poison damage and must succeed on a Constitution saving throw or spend all its next turn retching and heaving, unable to move or take actions. Constructs, elementals and undead are unaffected by this spell. When you cast this spell using a slot of 3rd level or higher, you can target one additional creature for each slot level above 2nd. -# 141. - Pass Without Trace (V,S) level 2 Abjuration [Concentration] [SOL] +# 141. - Pass Without Trace (V,S) level 2 Abjuration [Concentration] [Druid,Ranger] [SOL] Make yourself and up to 5 allies stealthier for one hour. -# 142. - Petal Storm (V,S) level 2 Conjuration [Concentration] [UB] +# 142. - Petal Storm (V,S) level 2 Conjuration [Concentration] ] [UB] Choose an unoccupied 15-foot cube of air that you can see within range. An elemental force of swirling winds appears in the cube and lasts for the spell's duration. The cloud heavily obscures its area. Any creature that enters the storm for the first time on a turn or starts its turn there must make a Strength saving throw. On a failed save, the creature takes 3d4 slashing damage. As a bonus action, you can move the storm up to 30 ft in any direction. -# 143. - Prayer of Healing (V) level 2 Evocation [SOL] +# 143. - Prayer of Healing (V) level 2 Evocation [Cleric] [SOL] Heal multiple allies at the same time. -# 144. - Protect Threshold (V,S) level 2 Abjuration [UB] +# 144. - Protect Threshold (V,S) level 2 Abjuration ] [UB] Tracing arcane sigils along its boundary, you can ward a doorway, window, or other portal from entry. For the duration, an invisible eldritch creature stalks the warded portal. Any creature that attempts to pass through the portal must make a Wisdom saving throw or take 4d6 psychic damage, or half as much on a successful save. -# 145. - Protection from Poison (V,S) level 2 Abjuration [SOL] +# 145. - Protection from Poison (V,S) level 2 Abjuration [Artificer,Druid,Paladin,Ranger] [SOL] Cures and protects against poison. -# 146. - Ray of Enfeeblement (V,S) level 2 Necromancy [Concentration] [SOL] +# 146. - Ray of Enfeeblement (V,S) level 2 Necromancy [Concentration] [Sorcerer,Warlock,Wizard] [SOL] Weaken an enemy so they deal less damage for one minute. -# 147. - *Rime's Binding Ice* © (S) level 2 Evocation [UB] +# 147. - *Rime's Binding Ice* © (S) level 2 Evocation ] [UB] A burst of cold energy emanates from you in a 30-foot cone. Each creature in that area must make a Constitution saving throw. On a failed save, a creature takes 3d8 cold damage and is hindered by ice formations for 1 minute, or until it uses an action to break away the ice. A creature hindered by ice has its speed reduced to 0. On a successful save, a creature takes half as much damage and isn't hindered by ice. -# 148. - Scorching Ray (V,S) level 2 Evocation [SOL] +# 148. - Scorching Ray (V,S) level 2 Evocation [Sorcerer,Wizard] [SOL] Fling rays of fire at one or more enemies. -# 149. - See Invisibility (V,S) level 2 Divination [SOL] +# 149. - See Invisibility (V,S) level 2 Divination [Artificer,Bard,Sorcerer,Wizard] [SOL] You can see invisible creatures. -# 150. - *Shadow Blade* © (V,S) level 2 Illusion [Concentration] [UB] +# 150. - *Shadow Blade* © (V,S) level 2 Illusion [Concentration] ] [UB] You weave together threads of shadow to create a dagger of solidified gloom in your hand. It deals 2d8 psychic damage on a hit and has the finesse, light, and thrown properties. In addition, when you use it to attack a target that is in dim light or darkness, you make the attack roll with advantage. -# 151. - Shatter (V,S) level 2 Evocation [SOL] +# 151. - Shatter (V,S) level 2 Evocation [Bard,Sorcerer,Warlock,Wizard] [SOL] Triggers a sudden noise that causes Thunder Damage in a 2-cell radius. -# 152. - Silence (V,S) level 2 Illusion [Concentration] [SOL] +# 152. - Silence (V,S) level 2 Illusion [Concentration] [Bard,Cleric,Ranger] [SOL] Creates a sphere four cells in radius, inside which sound cannot exist. Stops thunder damage and prevents spellcasting using verbal components. -# 153. - *Snilloc's Snowball Storm* © (V,S) level 2 Evocation [UB] +# 153. - *Snilloc's Snowball Storm* © (V,S) level 2 Evocation ] [UB] A flurry of magic snowballs erupts from a point you choose within range. Each creature in a 3x3 cube centered on that point must make a Dexterity saving throw. A creature takes 3d8 cold damage on a failed save, or half as much damage on a successful one. When you cast this spell using a spell slot of 3rd level or higher, the damage increases by 1d8 for each slot level above 2nd. -# 154. - Spider Climb (V,S) level 2 Transmutation [Concentration] [SOL] +# 154. - Spider Climb (V,S) level 2 Transmutation [Concentration] [Artificer,Sorcerer,Warlock,Wizard] [SOL] Touch an ally to allow them to climb walls like a spider for a limited time. -# 155. - Spike Growth (V,S) level 2 Transmutation [Concentration] [SOL] +# 155. - Spike Growth (V,S) level 2 Transmutation [Concentration] [Druid,Ranger] [SOL] Grows spikes and thorns in the area, making the terrain difficult and causing damage for every cell of movement. -# 156. - Spiritual Weapon (V,S) level 2 Evocation [SOL] +# 156. - Spiritual Weapon (V,S) level 2 Evocation [Cleric] [SOL] Summon a weapon that fights for you. -# 157. - *Tasha's Mind Whip* © (V) level 2 Enchantment [UB] +# 157. - *Tasha's Mind Whip* © (V) level 2 Enchantment ] [UB] You psychically lash out at one creature you can see within range. The target must make an Intelligence saving throw. On a failed save, the target takes 3d6 psychic damage, and it can't take a reaction until the end of its next turn. Moreover, on its next turn, it must choose whether it gets a move, an action, or a bonus action; it gets only one of the three. On a successful save, the target takes half as much damage and suffers none of the spell's other effects. When you cast this spell using a spell slot of 3rd level or higher, you can target one additional creature for each slot level above 2nd. -# 158. - *Warding Bond* © (V,S) level 2 Abjuration [SOL] +# 158. - *Warding Bond* © (V,S) level 2 Abjuration ] [SOL] Creates a bond with the target, who gains +1 AC, +1 to saving throws and resistance to all damage, but you share all damage it receives. Lasts for one hour. -# 159. - *Web* © (V,S) level 2 Conjuration [Concentration] [UB] +# 159. - *Web* © (V,S) level 2 Conjuration [Concentration] ] [UB] You conjure a mass of thick, sticky webbing at a point of your choice within range. The webs fill a 20-foot cube from that point for the duration. The webs are difficult terrain and lightly obscure their area. Each creature that enters them during its turn must make a Dexterity saving throw. On a failed save, the creature is restrained as long as it remains in the webs or until it breaks free. A creature restrained by the webs can use its actions to make a Strength check against your spell save DC. If it succeeds, it is no longer restrained. -# 160. - *Wither and Bloom* © (V,S) level 2 Necromancy [UB] +# 160. - *Wither and Bloom* © (V,S) level 2 Necromancy ] [UB] You invoke both death and life upon a 10-foot-radius sphere centered on an ally. Each enemy in that area must make a Constitution saving throw, taking 2d6 necrotic damage on a failed save, or half as much damage on a successful one. In addition, the target spends and rolls one of its unspent Hit Dice and regain a number of hit points equal to the roll plus your spellcasting ability modifier. When you cast this spell using a spell slot of 3rd level or higher, the damage increases by 1d6 for each slot above 2nd, and the number of Hit Dice that can be spent and added to the healing roll increases by one for each slot above 2nd. -# 161. - Adder's Fangs (V,S) level 3 Conjuration [UB] +# 161. - Adder's Fangs (V,S) level 3 Conjuration ] [UB] You create the visage of a massive green snake that appears for an instant before bearing down on your foe. Choose a creature you can see within range. The target must make a constitution saving throw, taking 4d10 poison damage on a failure, or half as much damage on a successful one. A creature that fails its saving throw is also poisoned, and its speed is halved while poisoned by this spell. At the end of each of its turns, a target may make a constitution saving throw, ending the poison on a success. Otherwise, the poison lasts for 1 minute. When you cast this spell using a spell slot of 4th level or higher, you may target an additional creature within range for each slot level above 3rd. -# 162. - *Ashardalon's Stride* © (V,S) level 3 Transmutation [Concentration] [UB] +# 162. - *Ashardalon's Stride* © (V,S) level 3 Transmutation [Concentration] ] [UB] The billowing flames of a dragon blast from your feet, granting you explosive speed. For the duration, your speed increases by 20 feet and moving doesn't provoke opportunity attacks. When you move within 5 feet of a creature, it takes 1d6 fire damage from your trail of heat. A creature can take this damage only once during a turn. When you cast this spell using a spell slot of 4th level or higher, increase your speed by 5 feet for each spell slot level above 3rd. The spell deals an additional 1d6 fire damage for each slot level above 3rd. -# 163. - *Aura of Vitality* © (V) level 3 Evocation [Concentration] [UB] +# 163. - *Aura of Vitality* © (V) level 3 Evocation [Concentration] ] [UB] Healing energy radiates from you in an aura with a 30-foot radius. Until the spell ends, the aura moves with you, centered on you. You can use a bonus action to cause one creature in the aura (including you) to regain 2d6 hit points. -# 164. - Beacon of Hope (V,S) level 3 Abjuration [Concentration] [SOL] +# 164. - Beacon of Hope (V,S) level 3 Abjuration [Concentration] [Cleric] [SOL] Raise hope and vitality. -# 165. - Bestow Curse (V,S) level 3 Necromancy [Concentration] [SOL] +# 165. - Bestow Curse (V,S) level 3 Necromancy [Concentration] [Bard,Cleric,Wizard] [SOL] Curses a creature you can touch. -# 166. - *Blinding Smite* © (V) level 3 Evocation [Concentration] [UB] +# 166. - *Blinding Smite* © (V) level 3 Evocation [Concentration] ] [UB] On your next hit your weapon flares with a bright light, and the attack deals an extra 3d8 radiant damage to the target. Additionally, the target must succeed on a Constitution saving throw or be blinded until the spell ends. A creature blinded by this spell makes another Constitution saving throw at the end of each of its turns. On a successful save, it is no longer blinded. -# 167. - Call Lightning (V,S) level 3 Conjuration [Concentration] [SOL] +# 167. - Call Lightning (V,S) level 3 Conjuration [Concentration] [Druid] [SOL] Conjures a storm cloud from which you can call a vertical bolt of lightning to strike targets, dealing 3D10 lightning damage. Another bolt can be repeated every turn by using an action. -# 168. - Conjure Animal (V,S) level 3 Conjuration [Concentration] [SOL] +# 168. - Conjure Animal (V,S) level 3 Conjuration [Concentration] [Druid,Ranger] [SOL] Summon spirits in the form of beasts to help you in battle -# 169. - Corrupting Bolt (V,S) level 3 Necromancy [UB] +# 169. - Corrupting Bolt (V,S) level 3 Necromancy ] [UB] You can fire a pulse of necrotic energy that causes a creature's body to begin to wither and decay. Make a ranged attack against a creature. On a hit, the target takes 4d8 necrotic damage and must succeed a Constitution saving throw. On a failed saving throw, the next time you or an ally of yours hits the corrupted creature with an attack before the end of your next turn, the creature has vulnerability to all of that attack's damage, and then the corruption ends. When you cast this spell using a spell slot of 4th level or higher, the damage increases by 1d8 for each slot level above 3rd. -# 170. - Counterspell (S) level 3 Abjuration [SOL] +# 170. - Counterspell (S) level 3 Abjuration [Sorcerer,Warlock,Wizard] [SOL] Interrupt an enemy's spellcasting. -# 171. - Create Food (S) level 3 Conjuration [SOL] +# 171. - Create Food (S) level 3 Conjuration [Artificer,Cleric,Paladin] [SOL] Conjure 15 units of food. -# 172. - *Crusader's Mantle* © (V) level 3 Evocation [Concentration] [UB] +# 172. - *Crusader's Mantle* © (V) level 3 Evocation [Concentration] ] [UB] Surround yourself with a magical aura. Allies within the aura gain a bonus 1d4 radiant damage on their attacks. -# 173. - Daylight (V,S) level 3 Evocation [SOL] +# 173. - Daylight (V,S) level 3 Evocation [Cleric,Druid,Paladin,Ranger,Sorcerer] [SOL] Summon a globe of bright light. -# 174. - Dispel Magic (V,S) level 3 Abjuration [SOL] +# 174. - Dispel Magic (V,S) level 3 Abjuration [Artificer,Bard,Cleric,Druid,Paladin,Sorcerer,Warlock,Wizard] [SOL] End active spells on a creature or object. -# 175. - *Elemental Weapon* © (V,S) level 3 Transmutation [Concentration] [UB] +# 175. - *Elemental Weapon* © (V,S) level 3 Transmutation [Concentration] ] [UB] Imbue a non-magical weapon with elemental magic. It gains a +1 to attack and damage rolls, and it gains 1d4 of the corresponding element's damage. When casting with a 5 or 6 spell slots, the effects increased by one die while casting at a spell slot 7 or higher increases the effects by 2. -# 176. - Fear (V,S) level 3 Illusion [Concentration] [SOL] +# 176. - Fear (V,S) level 3 Illusion [Concentration] [Bard,Sorcerer,Warlock,Wizard] [SOL] Frighten creatures and force them to flee. -# 177. - Fireball (V,S) level 3 Evocation [SOL] +# 177. - Fireball (V,S) level 3 Evocation [Sorcerer,Wizard] [SOL] Launch a fireball that explodes from a point of your choosing. -# 178. - *Flame Arrows* © (M,V,S) level 3 Transmutation [Concentration] [UB] +# 178. - *Flame Arrows* © (M,V,S) level 3 Transmutation [Concentration] ] [UB] You must be wielding a ranged weapon. When a target is hit by it, the target takes an extra 1d6 fire damage. The spell ends when twelve pieces of ammunition have been drawn from the quiver. When you cast this spell using a spell slot of 4th level or higher, the number of pieces of ammunition you can affect with this spell increases by two for each slot level above 3rd. -# 179. - Fly (V,S) level 3 Transmutation [Concentration] [SOL] +# 179. - Fly (V,S) level 3 Transmutation [Concentration] [Artificer,Sorcerer,Warlock,Wizard] [SOL] An ally you touch gains the ability to fly for a limited time. -# 180. - Haste (V,S) level 3 Transmutation [Concentration] [SOL] +# 180. - Haste (V,S) level 3 Transmutation [Concentration] [Artificer,Sorcerer,Wizard] [SOL] Make an ally faster and more agile, and grant them an additional action for a limited time. -# 181. - *Hunger of Hadar* © (V,S) level 3 Transmutation [Concentration] [UB] +# 181. - *Hunger of Hadar* © (V,S) level 3 Transmutation [Concentration] ] [UB] You open a gateway to the dark between the stars, a region infested with unknown horrors. A 20-foot-radius sphere of blackness and bitter cold appears, centered on a point with range and lasting for the duration. The area extinguishes light, and creatures within it are blinded. Any creature that starts its turn in the area takes 2d6 cold damage. Any creature that ends its turn in the area must succeed on a Dexterity saving throw or take 2d6 acid damage as milky, otherworldly tentacles rub against it. -# 182. - Hypnotic Pattern (S) level 3 Illusion [Concentration] [SOL] +# 182. - Hypnotic Pattern (S) level 3 Illusion [Concentration] [Bard,Sorcerer,Warlock,Wizard] [SOL] Charms enemies to make them harmless until attacked, but also affects allies in range. -# 183. - *Intellect Fortress* © (V) level 3 Abjuration [Concentration] [UB] +# 183. - *Intellect Fortress* © (V) level 3 Abjuration [Concentration] ] [UB] For the duration, you or one willing creature you can see within range has resistance to psychic damage, as well as advantage on Intelligence, Wisdom, and Charisma saving throws. When you cast this spell using a spell slot of 4th level or higher, you may target an additional creature within range for each slot level above 3rd. -# 184. - *Life Transference* © (V,S) level 3 Necromancy [UB] +# 184. - *Life Transference* © (V,S) level 3 Necromancy ] [UB] You sacrifice some of your health to mend another creature's injuries. You take 4d8 necrotic damage, and one creature of your choice that you can see within range regains a number of hit points equal to twice the necrotic damage you take. When you cast this spell using a spell s lot of 4th level or higher, the damage increases by 1d8 for each slot level above 3rd. -# 185. - *Lightning Arrow* © (V,S) level 3 Transmutation [Concentration] [UB] +# 185. - *Lightning Arrow* © (V,S) level 3 Transmutation [Concentration] ] [UB] The next time you make a ranged weapon attack during the spell's duration, the weapon's ammunition, or the weapon itself if it's a thrown weapon, transforms into a bolt of lightning. Make the attack roll as normal. The target takes 3d8 lightning damage on a hit, or half as much damage on a miss. Whether you hit or miss, each creature within 10 feet of the target must make a Dexterity saving throw. Each of these creatures takes 2d8 lightning damage on a failed save, or half as much damage on a successful one. When you cast this spell using a spell slot of 4th level or higher, the damage for both effects of the spell increases by 1d8 for each slot level above 3rd. -# 186. - Lightning Bolt (V,S) level 3 Evocation [SOL] +# 186. - Lightning Bolt (V,S) level 3 Evocation [Sorcerer,Wizard] [SOL] Unleash a stroke of lightning in a direction of your choice, damaging everyone it touches. -# 187. - Mass Healing Word (V) level 3 Evocation [SOL] +# 187. - Mass Healing Word (V) level 3 Evocation [Cleric] [SOL] Instantly heals up to six allies you can see. -# 188. - Protection from Energy (V,S) level 3 Abjuration [Concentration] [SOL] +# 188. - Protection from Energy (V,S) level 3 Abjuration [Concentration] [Artificer,Cleric,Druid,Ranger,Sorcerer,Wizard] [SOL] Touch one willing creature to give them resistance to this damage type. -# 189. - *Pulse Wave* © (V,S) level 3 Evocation [UB] +# 189. - *Pulse Wave* © (V,S) level 3 Evocation ] [UB] You create intense pressure, unleash it in a 30-foot cone, and decide whether the pressure pulls or pushes creatures and objects. Each creature in that cone must make a Constitution saving throw. A creature takes 6d6 force damage on a failed save, or half as much damage on a successful one. And every creature that fails the save is either pulled 15 feet toward you or pushed 15 feet away from you, depending on the choice you made for the spell. When you cast this spell using a spell slot of 4th level or higher, the damage increases by 1d6 and the distance pulled or pushed increases by 5 feet for each slot level above 3rd. -# 190. - Remove Curse (V,S) level 3 Abjuration [SOL] +# 190. - Remove Curse (V,S) level 3 Abjuration [Cleric,Paladin,Warlock,Wizard] [SOL] Removes all curses affecting the target. -# 191. - Revivify (M,V,S) level 3 Necromancy [SOL] +# 191. - Revivify (M,V,S) level 3 Necromancy [Artificer,Cleric,Paladin] [SOL] Brings one creature back to life, up to 1 minute after death. -# 192. - Sleet Storm (V,S) level 3 Conjuration [Concentration] [SOL] +# 192. - Sleet Storm (V,S) level 3 Conjuration [Concentration] [Druid,Sorcerer,Wizard] [SOL] Creates an area where the ground is slippery, vision is obscured, and concentration is harder. -# 193. - Slow (V,S) level 3 Transmutation [Concentration] [SOL] +# 193. - Slow (V,S) level 3 Transmutation [Concentration] [Sorcerer,Wizard] [SOL] Slows and impairs the actions of up to 6 creatures. -# 194. - Spirit Guardians (V,S) level 3 Conjuration [Concentration] [SOL] +# 194. - Spirit Guardians (V,S) level 3 Conjuration [Concentration] [Cleric] [SOL] Call forth spirits to protect you. -# 195. - *Spirit Shroud* © (V,S) level 3 Necromancy [Concentration] [UB] +# 195. - *Spirit Shroud* © (V,S) level 3 Necromancy [Concentration] ] [UB] You call forth spirits of the dead, which flit around you for the spell's duration. The spirits are intangible and invulnerable. Until the spell ends, any attack you make deals 1d8 extra damage when you hit a creature within 10 ft of you. This damage is radiant, necrotic, or cold (your choice when you cast the spell). Any creature that takes this damage can't regain hit points until the start of your next turn. In addition, any enemy creature within 10ft of you when you cast, or that enters or starts its turn in that range has its movement speed lowered by 10ft until start of its next turn. When you cast this spell using a spell slot of 4th level or higher, the damage increases by 1d8 for every two slot levels above 3rd. -# 196. - Stinking Cloud (V,S) level 3 Conjuration [Concentration] [SOL] +# 196. - Stinking Cloud (V,S) level 3 Conjuration [Concentration] [Bard,Sorcerer,Wizard] [SOL] Create a cloud of incapacitating, noxious gas. -# 197. - *Thunder Step* © (V) level 3 Conjuration [UB] +# 197. - *Thunder Step* © (V) level 3 Conjuration ] [UB] You teleport yourself to an unoccupied space you can see within range. Immediately after you disappear, a thunderous boom sounds, and each creature within 10 feet of the space you left must make a Constitution saving throw, taking 3d10 thunder damage on a failed save, or half as much damage on a successful one. You can also teleport one willing ally. When you cast this spell using a spell slot of 4th level or higher, the damage increases by 1d10 for each slot level above 3rd. -# 198. - Tongues (V) level 3 Divination [SOL] +# 198. - Tongues (V) level 3 Divination [Bard,Cleric,Sorcerer,Warlock,Wizard] [SOL] Grants knowledge of all languages for one hour. -# 199. - Vampiric Touch (V,S) level 3 Necromancy [Concentration] [SOL] +# 199. - Vampiric Touch (V,S) level 3 Necromancy [Concentration] [Warlock,Wizard] [SOL] Grants you a life-draining melee attack for one minute. -# 200. - Wind Wall (V,S) level 3 Evocation [Concentration] [SOL] +# 200. - Wind Wall (V,S) level 3 Evocation [Concentration] [Druid,Ranger] [SOL] Create a wall of wind that causes damage, pushes creatures and objects away, and disperses fogs and gases. -# 201. - Winter's Breath (V,S) level 3 Conjuration [UB] +# 201. - Winter's Breath (V,S) level 3 Conjuration ] [UB] Create a blast of cold wind to chill your enemies and knock them prone. -# 202. - *Aura of Life* © (V) level 4 Abjuration [Concentration] [UB] +# 202. - *Aura of Life* © (V) level 4 Abjuration [Concentration] ] [UB] Life-preserving energy radiates from you in an aura with a 30-foot radius. Until the spell ends, the aura moves with you, centered on you. Each non-hostile creature in the aura, including you, has resistance to necrotic damage, and its hit point maximum can't be reduced. In addition, a non-hostile, living creature regains 1 hit point when it starts its turn in the aura with 0 hit points. -# 203. - *Aura of Purity* © (V) level 4 Abjuration [Concentration] [UB] +# 203. - *Aura of Purity* © (V) level 4 Abjuration [Concentration] ] [UB] Purifying energy radiates from you in an aura with a 30-foot radius. Until the spell ends, the aura moves with you, centered on you. Each non-hostile creature in the aura, including you, can't become diseased, has resistance to poison damage, and has advantage on saving throws against effects that cause any of the following conditions: blinded, charmed, deafened, frightened, paralyzed, poisoned, and stunned. -# 204. - Banishment (V,S) level 4 Abjuration [Concentration] [SOL] +# 204. - Banishment (V,S) level 4 Abjuration [Concentration] [Cleric,Paladin,Sorcerer,Warlock,Wizard] [SOL] Banishes a creature as long as you concentrate. The creature can be permanently banished if it is extraplanar. -# 205. - Black Tentacles (V,S) level 4 Conjuration [Concentration] [SOL] +# 205. - Black Tentacles (V,S) level 4 Conjuration [Concentration] [Wizard] [SOL] Conjures black tentacles that restrain and damage creatures within the area of effect. -# 206. - Blessing of Rime (V,S) level 4 Evocation [UB] +# 206. - Blessing of Rime (V,S) level 4 Evocation ] [UB] You summon a chill wind that numbs the pain of your allies. Choose up to three creatures within range. Each creature gains 3d8 temporary hit points for the duration. While a creature has these hit points, if it would make a Constitution saving throw, it gains advantage on the roll. When you cast this spell using a spell slot of 5th level or higher, the temporary hit points increase by 1d8 for each slot level above 4th. -# 207. - Blight (V,S) level 4 Necromancy [SOL] +# 207. - Blight (V,S) level 4 Necromancy [Druid,Sorcerer,Warlock,Wizard] [SOL] Drains life from a creature, causing massive necrotic damage. -# 208. - Brain Bulwark (V) level 4 Abjuration [UB] +# 208. - Brain Bulwark (V) level 4 Abjuration ] [UB] For the duration, you or one willing creature you can see within range has resistance to psychic damage, as well as Immunity to the Charmed, Frightened, Fear, Mind dominated and Mind controlled conditions. -# 209. - Confusion (V,S) level 4 Enchantment [Concentration] [SOL] +# 209. - Confusion (V,S) level 4 Enchantment [Concentration] [Bard,Druid,Sorcerer,Wizard] [SOL] Creates confusion and erratic behavior in a creature, possibly leading it to attack its allies. -# 210. - Conjure 4 Elementals (V,S) level 4 Conjuration [Concentration] [SOL] +# 210. - Conjure 4 Elementals (V,S) level 4 Conjuration [Concentration] ] [SOL] 4 elementals are conjured (CR 1/2). -# 211. - Conjure Minor Elementals (V,S) level 4 Conjuration [Concentration] [SOL] +# 211. - Conjure Minor Elementals (V,S) level 4 Conjuration [Concentration] [Druid,Wizard] [SOL] Conjure elemental creatures under your command, which are dismissed when the spell ends or is broken. -# 212. - Death Ward (V,S) level 4 Abjuration [SOL] +# 212. - Death Ward (V,S) level 4 Abjuration [Cleric,Paladin] [SOL] Protects the creature once against instant death or being reduced to 0 hit points. -# 213. - Dimension Door (V) level 4 Conjuration [SOL] +# 213. - Dimension Door (V) level 4 Conjuration [Bard,Sorcerer,Warlock,Wizard] [SOL] Transfers the caster and a friendly creature to a specified destination. -# 214. - Dominate Beast (V,S) level 4 Enchantment [Concentration] [SOL] +# 214. - Dominate Beast (V,S) level 4 Enchantment [Concentration] [Druid,Sorcerer] [SOL] Grants you control over an enemy beast. -# 215. - Dreadful Omen (V,S) level 4 Enchantment [SOL] +# 215. - Dreadful Omen (V,S) level 4 Enchantment [Bard,Warlock] [SOL] You whisper dreadful words that cause immense mental anguish in your enemies. On a failed wisdom saving throw, they take psychic damage and become frightened until the end of their next turn, moving away from you as much as possible. On a successful save, they take half as much damage and are not frightened. -# 216. - *Elemental Bane* © (V,S) level 4 Transmutation [Concentration] [UB] +# 216. - *Elemental Bane* © (V,S) level 4 Transmutation [Concentration] ] [UB] Choose one creature you can see within range, and choose one of the following damage types: acid, cold, fire, lightning, or thunder. The target must succeed on a Constitution saving throw or be affected by the spell for its duration. The first time each turn the affected target takes non-recurrent damage of the chosen type, the target takes an extra 2d6 damage of that type. Moreover, the target loses any resistance to that damage type until the spell ends. When you cast this spell using a spell slot of 5th level or higher, you can target one additional creature for each slot level above 4th. The creatures must be within 30 feet of each other when you target them. -# 217. - Fire Shield (V,S) level 4 Evocation [SOL] +# 217. - Fire Shield (V,S) level 4 Evocation [Sorcerer,Wizard] [SOL] Grants resistance to fire or cold, and damages creatures attacking the caster with melee attacks. -# 218. - Freedom of Movement (V,S) level 4 Abjuration [SOL] +# 218. - Freedom of Movement (V,S) level 4 Abjuration [Artificer,Bard,Cleric,Druid,Ranger] [SOL] Grants immunity to movement restrictions, as well as being paralyzed or restrained. -# 219. - Giant Insect (V,S) level 4 Transmutation [Concentration] [SOL] +# 219. - Giant Insect (V,S) level 4 Transmutation [Concentration] [Druid] [SOL] Conjures a giant version of a natural insect or arthropod. -# 220. - *Gravity Sinkhole* © (V,S) level 4 Evocation [UB] +# 220. - *Gravity Sinkhole* © (V,S) level 4 Evocation ] [UB] A 20-foot-radius sphere of crushing force forms at a point you can see within range and tugs at the creatures there. Each creature in the sphere must make a Constitution saving throw. On a failed save, the creature takes 5d10 force damage, and is pulled in a straight line toward the center of the sphere, ending in an unoccupied space as close to the center as possible. On a successful save, the creature takes half as much damage and isn't pulled. When you cast this spell using a spell slot of 5th level or higher, the damage increases by 1d10 for each slot level above 4th. -# 221. - Greater Invisibility (V,S) level 4 Illusion [Concentration] [SOL] +# 221. - Greater Invisibility (V,S) level 4 Illusion [Concentration] [Bard,Sorcerer,Wizard] [SOL] Target becomes invisible for the duration, even when attacking or casting spells. -# 222. - Guardian of Faith (V) level 4 Conjuration [SOL] +# 222. - Guardian of Faith (V) level 4 Conjuration [Cleric] [SOL] Conjures a large spectral guardian that damages approaching enemies. -# 223. - *Guardian of Nature* © (V) level 4 Transmutation [Concentration] [UB] +# 223. - *Guardian of Nature* © (V) level 4 Transmutation [Concentration] ] [UB] A nature spirit answers your call and transforms you into a powerful guardian. The transformation lasts until the spell ends. You choose between a Beast or a Tree form. -# 224. - Ice Storm (V,S) level 4 Evocation [SOL] +# 224. - Ice Storm (V,S) level 4 Evocation [Druid,Sorcerer,Wizard] [SOL] Causes bludgeoning and cold damage in the area, and turns the ground into difficult terrain. -# 225. - Identify Creatures (V,S) level 4 Divination [SOL] +# 225. - Identify Creatures (V,S) level 4 Divination [Wizard] [SOL] Reveals full bestiary knowledge for the affected creatures. -# 226. - Irresistible Performance (V) level 4 Enchantment [UB] +# 226. - Irresistible Performance (V) level 4 Enchantment ] [UB] You weave a song into the air, causing those who hear it to applaud its magnificence. All creatures of your choice inside a 30-foot-cube within range must make a Charisma saving throw or be forced to clap and shout until the start of your next turn. A creature that is charmed by you always fails this saving throw. A clapping creature cannot perform any actions that require their hands or mouth but can otherwise act normally. This spell has no effect on creatures that are immune to charm. -# 227. - *Mordenkainen's Faithful Hound* © (V,S) level 4 Conjuration [UB] +# 227. - *Mordenkainen's Faithful Hound* © (V,S) level 4 Conjuration ] [UB] You conjure a phantom watchdog in an unoccupied space that you can see within range, where it remains for the duration. The hound has Darkvision up to 60 ft, Truesight up to 80 ft, is invisible to all creatures except you and can't be harmed. During each of your turns, the hound can attempt to bite one creature within 5 feet of it that is hostile to you as a free action. The hound's attack bonus is equal to your spellcasting ability modifier + your proficiency bonus. On a hit, it deals 4d8 piercing damage. -# 228. - Phantasmal Killer (V,S) level 4 Illusion [Concentration] [SOL] +# 228. - Phantasmal Killer (V,S) level 4 Illusion [Concentration] [Wizard] [SOL] Causes psychic damage to the target creature with each turn, unless a saving throw is successful or the effect ends. -# 229. - Psionic Blast (V) level 4 Evocation [UB] +# 229. - Psionic Blast (V) level 4 Evocation ] [UB] You unleash a debilitating wave of mental power in a 30-foot cone. Each creature in the area must make an Intelligence saving throw. On a failed save, a target takes 5d8 psychic damage, becomes dazzled and has its movement speed halved until the end of your next turn. On a successful save, a target only takes half as much damage. When you cast this spell using a spell slot of 4th level or higher, the damage increases by 1d8 for each slot level above 4th. -# 230. - *Raulothim's Psychic Lance* © (V) level 4 Enchantment [UB] +# 230. - *Raulothim's Psychic Lance* © (V) level 4 Enchantment ] [UB] You unleash a shimmering lance of psychic power from your forehead at a creature that you can see within range. It must succeed on an Intelligence saving throw or take 7d6 psychic damage and be incapacitated until the end of your next turn. On a successful save, the creature takes half damage and isn't incapacitated. At Higher Levels. When you cast this spell using a spell slot of 4th level or higher, the damage increases by 1d6 for each slot level above 4th. -# 231. - *Sickening Radiance* © (V,S) level 4 Evocation [Concentration] [UB] +# 231. - *Sickening Radiance* © (V,S) level 4 Evocation [Concentration] ] [UB] Dim light spreads within a 30-foot-radius sphere centered on a point you choose within range. The light spreads around corners, and it lasts until the spell ends. When a creature moves into the spell's area for the first time on a turn or starts its turn there, that creature must succeed on a Constitution saving throw or take 4d10 radiant damage, and it suffers one level of exhaustion and emits a dim light in a 5-foot radius. This light makes it impossible for the creature to benefit from being invisible. The light and any levels of exhaustion caused by this spell go away when the spell ends. -# 232. - *Staggering Smite* © (V) level 4 Evocation [Concentration] [UB] +# 232. - *Staggering Smite* © (V) level 4 Evocation [Concentration] ] [UB] The next time you hit a creature with a weapon attack during this spell's duration, your weapon pierces both body and mind, and the attack deals an extra 4d6 psychic damage to the target. The target must make a Wisdom saving throw. On a failed save, it has disadvantage on attack rolls and ability checks, and can't take reactions, until the end of its next turn. -# 233. - Stoneskin (M,V,S) level 4 Abjuration [Concentration] [SOL] +# 233. - Stoneskin (M,V,S) level 4 Abjuration [Concentration] [Artificer,Druid,Ranger,Sorcerer,Wizard] [SOL] Grants resistance to non-magical bludgeoning, slashing, and piercing damage. -# 234. - *Vitriolic Sphere* © (V,S) level 4 Evocation [UB] +# 234. - *Vitriolic Sphere* © (V,S) level 4 Evocation ] [UB] You point at a place within range, and a glowing 1-foot ball of emerald acid streaks there and explodes in a 20-foot radius. Each creature in that area must make a Dexterity saving throw. On a failed save, a creature takes 10d4 acid damage and 5d4 acid damage at the end of its next turn. On a successful save, a creature takes half the initial damage and no damage at the end of its next turn. When you cast this spell using a spell slot of 5th level or higher, the initial damage increases by 2d4 for each slot level above 4th. -# 235. - Wall of Fire (V,S) level 4 Evocation [Concentration] [SOL] +# 235. - Wall of Fire (V,S) level 4 Evocation [Concentration] [Druid,Sorcerer,Wizard] [SOL] Create a burning wall that injures creatures in or next to it. -# 236. - *Banishing Smite* © (V) level 5 Abjuration [Concentration] [UB] +# 236. - *Banishing Smite* © (V) level 5 Abjuration [Concentration] ] [UB] Your next hit deals additional 5d10 force damage with your weapon. Additionally, if this attack reduces the target to 50 hit points of fewer, you banish it for 1 min. -# 237. - *Circle of Power* © (V) level 5 Abjuration [Concentration] [UB] +# 237. - *Circle of Power* © (V) level 5 Abjuration [Concentration] ] [UB] Divine energy radiates from you, distorting and diffusing magical energy within 30 feet of you. Until the spell ends, the sphere moves with you, centered on you. For the duration, each friendly creature in the area, including you, has advantage on saving throws against spells and other magical effects. Additionally, when an affected creature succeeds on a saving throw made against a spell or magical effect that allows it to make a saving throw to take only half damage, it instead takes no damage if it succeeds on the saving throws. -# 238. - Cloudkill (V,S) level 5 Conjuration [Concentration] [SOL] +# 238. - Cloudkill (V,S) level 5 Conjuration [Concentration] [Sorcerer,Wizard] [SOL] Creates an obscuring and poisonous cloud. The cloud moves every round. -# 239. - Cone of Cold (V,S) level 5 Evocation [SOL] +# 239. - Cone of Cold (V,S) level 5 Evocation [Sorcerer,Wizard] [SOL] Inflicts massive cold damage in the cone of effect. -# 240. - Conjure Elemental (V,S) level 5 Conjuration [Concentration] [SOL] +# 240. - Conjure Elemental (V,S) level 5 Conjuration [Concentration] [Druid,Wizard] [SOL] Conjures an elemental of the chosen element that fights alongside you. If you lose concentration, the elemental remains and becomes hostile. -# 241. - Contagion (V,S) level 5 Necromancy [SOL] +# 241. - Contagion (V,S) level 5 Necromancy [Cleric,Druid] [SOL] Hit a creature to inflict a disease from the options. -# 242. - *Dawn* © (V,S) level 5 Evocation [Concentration] [UB] +# 242. - *Dawn* © (V,S) level 5 Evocation [Concentration] ] [UB] The light of dawn shines down on a location you specify within range. Until the spell ends, a 30-foot-radius, 40-foot-high cylinder of bright light glimmers there. This light is sunlight. When the cylinder appears, each creature in it must make a Constitution saving throw, taking 4d10 radiant damage on a failed save, or half as much damage on a successful one. A creature must also make this saving throw whenever it ends its turn in the cylinder. If you're within 60 feet of the cylinder, you can move it up to 60 feet as a bonus action on your turn. -# 243. - *Destructive Wave* © (V) level 5 Evocation [UB] +# 243. - *Destructive Wave* © (V) level 5 Evocation ] [UB] You strike the ground, creating a burst of divine energy that ripples outward from you. Each creature you choose within 30 feet of you must succeed on a Constitution saving throw or take 5d6 thunder damage, as well as 5d6 radiant or necrotic damage, and be knocked prone. A creature that succeeds on its saving throw takes half as much damage and isn't knocked prone. -# 244. - Dispel Evil and Good (V,S) level 5 Abjuration [Concentration] [SOL] +# 244. - Dispel Evil and Good (V,S) level 5 Abjuration [Concentration] [Cleric,Paladin] [SOL] Celestial, elementals, feys, fiends, and undead have disadvantage on attacks against you. This spell also allows you to cancel hostile enchantments or dismiss extraplanar creatures hit by your attacks once. -# 245. - Dominate Person (V,S) level 5 Enchantment [Concentration] [SOL] +# 245. - Dominate Person (V,S) level 5 Enchantment [Concentration] [Bard,Sorcerer,Wizard] [SOL] Grants you control over an enemy creature. -# 246. - *Far Step* © (V) level 5 Conjuration [Concentration] [UB] +# 246. - *Far Step* © (V) level 5 Conjuration [Concentration] ] [UB] You teleport up to 60 ft to an unoccupied space you can see. On each of your turns before the spell ends, you can use a bonus action to teleport in this way again. -# 247. - Flame Strike (V,S) level 5 Evocation [SOL] +# 247. - Flame Strike (V,S) level 5 Evocation [Cleric] [SOL] Conjures a burning column of fire and radiance affecting all creatures inside. -# 248. - Greater Restoration (V,S) level 5 Abjuration [SOL] +# 248. - Greater Restoration (V,S) level 5 Abjuration [Artificer,Bard,Cleric,Druid] [SOL] Removes one detrimental condition, such as a charm or curse, or an effect that reduces an ability score or hit points. -# 249. - Hold Monster (V,S) level 5 Enchantment [Concentration] [SOL] +# 249. - Hold Monster (V,S) level 5 Enchantment [Concentration] [Bard,Sorcerer,Warlock,Wizard] [SOL] Paralyzes a creature unless it succeeds a WIS saving throw. No effect on undead. -# 250. - *Immolation* © (V) level 5 Evocation [Concentration] [UB] +# 250. - *Immolation* © (V) level 5 Evocation [Concentration] ] [UB] Flames wreathe one creature you can see within range. The target must make a Dexterity saving throw. It takes 8d6 fire damage on a failed save, or half as much damage on a successful one. On a failed save, the target also burns for the spell's duration. The burning target sheds bright light in a 30-foot radius and dim light for an additional 30 feet and takes 8d6 fire damage at the start of each of its turns. -# 251. - Insect Plague (V,S) level 5 Conjuration [Concentration] [SOL] +# 251. - Insect Plague (V,S) level 5 Conjuration [Concentration] [Cleric,Druid,Sorcerer] [SOL] Summons a sphere of biting insects. -# 252. - Mantle of Thorns (V,S) level 5 Transmutation [Concentration] [UB] +# 252. - Mantle of Thorns (V,S) level 5 Transmutation [Concentration] ] [UB] Surround yourself with an aura of thorns. Those that start or walk through take 2d8 piercing damage. This damage scales at higher levels by 1d8 per slot. -# 253. - Mass Cure Wounds (V,S) level 5 Evocation [SOL] +# 253. - Mass Cure Wounds (V,S) level 5 Evocation [Bard,Cleric,Druid] [SOL] Heals up to 6 creatures. -# 254. - Mind Twist (V,S) level 5 Enchantment [SOL] +# 254. - Mind Twist (V,S) level 5 Enchantment [Sorcerer,Warlock,Wizard] [SOL] Causes massive psychic damage to all creatures around you, and incapacitates them if they fail their INT saving throw. -# 255. - Raise Dead (M,V,S) level 5 Necromancy [SOL] +# 255. - Raise Dead (M,V,S) level 5 Necromancy [Bard,Cleric,Paladin] [SOL] Brings one creature back to life, up to 10 days after death. -# 256. - *Skill Empowerment* © (V,S) level 5 Divination [UB] +# 256. - *Skill Empowerment* © (V,S) level 5 Divination ] [UB] Your magic deepens a creature's understanding of its own talent. You touch one willing creature and give it expertise in one skill of your choice; until the spell ends, the creature doubles its proficiency bonus for ability checks it makes that use the chosen skill. For 1 hour, you have proficiency in the chosen skill. The spell ends early if you cast it again. You must choose a skill in which the target is proficient and that isn't already benefiting from expertise. -# 257. - Sonic Boom (V,S) level 5 Evocation [UB] +# 257. - Sonic Boom (V,S) level 5 Evocation ] [UB] A small orb the same color as the balloon used appears at a point you choose within range then expands with a loud crack into an explosion of force. Each creature in a 30-foot radius must make a Strength saving throw. A target is pushed up to 30 feet away from the center and dealt 6d8 thunder damage on a failed save, or half as much damage and no movement on a successful one. -# 258. - *Steel Wind Strike* © (M,S) level 5 Conjuration [UB] +# 258. - *Steel Wind Strike* © (M,S) level 5 Conjuration ] [UB] You flourish the weapon used in the casting and then vanish to strike like the wind. Choose up to five creatures you can see within range. Make a melee spell attack against each target. On a hit, a target takes 6d10 force damage. You can then teleport to an unoccupied space you can see within 5 feet of one of the targets you hit or missed. -# 259. - *Synaptic Static* © (V) level 5 Evocation [UB] +# 259. - *Synaptic Static* © (V) level 5 Evocation ] [UB] You choose a point within range and cause psychic energy to explode there. Each creature in a 20-foot-radius sphere centered on that point must make an Intelligence saving throw. A target takes 8d6 psychic damage on a failed save, or half as much damage on a successful After a failed save, a target has muddled thoughts for 1 minute. During that time, it rolls a d6 and subtracts the number rolled from all its attack rolls and ability checks. The target can make an Intelligence saving throw at the end of each of its turns, ending the effect on itself on a success. -# 260. - *Telekinesis* © (V,S) level 5 Transmutation [Concentration] [UB] +# 260. - *Telekinesis* © (V,S) level 5 Transmutation [Concentration] ] [UB] You can try to move a Huge or smaller creature. Make an ability check with your spellcasting ability contested by the creature's Strength check. If you win the contest, you move the creature up to 30 feet in any direction, but not beyond the range of this spell. Until the end of your next turn, the creature is restrained in your telekinetic grip. On subsequent rounds, you can use your action to attempt to maintain your telekinetic grip on the creature by repeating the contest, or target a new creature, ending the restrained effect on the previously affected creature. -# 261. - Blade Barrier (V,S) level 6 Evocation [Concentration] [SOL] +# 261. - Blade Barrier (V,S) level 6 Evocation [Concentration] [Cleric] [SOL] Conjures a wall of razor sharp blades which causes 6d10 slashing damage to anyone crossing it -# 262. - Chain Lightning (V,S) level 6 Evocation [SOL] +# 262. - Chain Lightning (V,S) level 6 Evocation [Sorcerer,Wizard] [SOL] Target a creature with lightning, which can arc to 3 other targets within 6 cells. -# 263. - Circle of Death (M,V,S) level 6 Necromancy [SOL] +# 263. - Circle of Death (M,V,S) level 6 Necromancy [Sorcerer,Warlock,Wizard] [SOL] A sphere of negative energy causes Necrotic damage from a point you choose -# 264. - Conjure Fey (V,S) level 6 Conjuration [Concentration] [SOL] +# 264. - Conjure Fey (V,S) level 6 Conjuration [Concentration] [Druid,Warlock] [SOL] Conjures a fey creature of challenge rating 1 to 6 to fight alongside you. If you lose concentration, the creature stays but becomes hostile. -# 265. - Disintegrate (V,S) level 6 Transmutation [SOL] +# 265. - Disintegrate (V,S) level 6 Transmutation [Sorcerer,Wizard] [SOL] Causes massive force damage on the target, which can be disintegrated if reduced to 0 hit points -# 266. - Eyebite (V,S) level 6 Necromancy [Concentration] [SOL] +# 266. - Eyebite (V,S) level 6 Necromancy [Concentration] [Bard,Sorcerer,Warlock,Wizard] [SOL] Your eyes gain a specific property which can target a creature each turn -# 267. - *Fizban's Platinum Shield* © (M,V,S) level 6 Abjuration [Concentration] [UB] +# 267. - *Fizban's Platinum Shield* © (M,V,S) level 6 Abjuration [Concentration] ] [UB] You create a field of silvery light that surrounds a creature of your choice within range. The field sheds dim light out to 5 feet. While surrounded by the field, a creature gains the following benefits: • The creature has half cover. @@ -1093,59 +1093,59 @@ You create a field of silvery light that surrounds a creature of your choice wit • If the creature is subjected to an effect that allows it to make a Dexterity saving throw to take only half damage, the creature instead takes no damage if it succeeds on the saving throw, and only half damage if it fails. As a bonus action on subsequent turns, you can move the field to another creature within 60 feet of the field. -# 268. - Flash Freeze (V,S) level 6 Evocation [UB] +# 268. - Flash Freeze (V,S) level 6 Evocation ] [UB] You attempt to encase a creature you can see within range in a prison of solid ice. The target must make a Dexterity saving throw. On a failed save, the target takes 10d6 cold damage and becomes restrained in layers of thick ice. On a successful save, the target takes half as much damage and is not restrained. The spell can only be used on creatures up to large size. To break out, the restrained target can make a Strength check as an action against your spell save DC. On success, the target escapes and is no longer restrained. When you cast this spell using a spell slot of 7th level or higher, the cold damage increases by 2d6 for each slot level above 6th. -# 269. - Freezing Sphere (V,S) level 6 Evocation [SOL] +# 269. - Freezing Sphere (V,S) level 6 Evocation [Wizard] [SOL] Toss a huge ball of cold energy that explodes on impact -# 270. - Globe Of Invulnerability (V,S) level 6 Abjuration [Concentration] [SOL] +# 270. - Globe Of Invulnerability (V,S) level 6 Abjuration [Concentration] [Sorcerer,Wizard] [SOL] A sphere surrounding you prevents any spell up to 5th level to affect anyone inside it. -# 271. - Harm (V,S) level 6 Necromancy [SOL] +# 271. - Harm (V,S) level 6 Necromancy [Cleric] [SOL] Inflicts devastating necrotic damage and reduces the maximum hit points accordingly. Cannot drop the target below 1 hit points -# 272. - Heal (V,S) level 6 Evocation [SOL] +# 272. - Heal (V,S) level 6 Evocation [Cleric,Druid] [SOL] Heals 70 hit points and also removes blindness and diseases -# 273. - Heroes Feast (M,V,S) level 6 Conjuration [SOL] +# 273. - Heroes Feast (M,V,S) level 6 Conjuration [Cleric,Druid] [SOL] Summons a feast which cures most ailments and grants immunity to poisonand being frightened, WIS save advantage, and increased maximum hitpoints -# 274. - Hilarity (V) level 6 Enchantment [Concentration] [SOL] +# 274. - Hilarity (V) level 6 Enchantment [Concentration] [Bard,Wizard] [SOL] Choose one target. They fall down laughing, becoming prone and incapacitated, and take psychic damage until they save at the end of one of their turns, or until the spell ends. -# 275. - Poison Wave (M,V,S) level 6 Evocation [UB] +# 275. - Poison Wave (M,V,S) level 6 Evocation ] [UB] A poisonous wave erupts from you, engulfing those close by. Each creature within the spell's radius must make a Constitution saving throw, taking 6d10 poison damage on a failure, or half as much damage on a successful one. A creature who fails their saving throw is also poisoned for 1 minute, and can repeat the saving throw at the end of each of its turn. When you cast this spell using a slot of 7th level or higher, the damage increases by 1d10 for each slot level above 6th. -# 276. - Ring of Blades (M,V,S) level 6 Conjuration [Concentration] [UB] +# 276. - Ring of Blades (M,V,S) level 6 Conjuration [Concentration] ] [UB] You raise both hands as you evoke six transparent blades around you as a bonus action. When you cast this spell, and as a bonus action on each subsequent turn, you can throw one of these blades at a creature within 60 feet from you. Make a ranged spell attack. On a hit, the target takes 4d10 force damage. When you cast this spell using a spell slot of 7th level or higher, the damage of each blade increases by 1d10 for each slot level above 6th. -# 277. - *Scatter* © (V) level 6 Conjuration [UB] +# 277. - *Scatter* © (V) level 6 Conjuration ] [UB] The air quivers around up to five creatures of your choice that you can see within range. An unwilling creature must succeed on a Wisdom saving throw to resist this spell. You teleport each affected target to an unoccupied space that you can see within 120 feet of you. That space must be on the ground or on a floor. -# 278. - Shelter from Energy (V,S) level 6 Abjuration [UB] +# 278. - Shelter from Energy (V,S) level 6 Abjuration ] [UB] Choose one of the following damage types: acid, cold, fire, lightning, necrotic, radiant, or thunder, and then choose up to six willing creatures that you can see within range. For 1 hour, targets have resistance to that damage type. When you cast this spell using a spell slot of 7th level or higher, you may target up to one additional willing creature for each slot level above 6th. -# 279. - Sunbeam (V,S) level 6 Evocation [Concentration] [SOL] +# 279. - Sunbeam (V,S) level 6 Evocation [Concentration] [Druid,Sorcerer,Wizard] [SOL] You conjure a line of radiance which can burn and blind creatures in the line of effect; undead and oozes save with disadvantage. The beam can be retargeted each turn -# 280. - *Tasha's Otherworldly Guise* © (M,V,S) level 6 Transmutation [Concentration] [UB] +# 280. - *Tasha's Otherworldly Guise* © (M,V,S) level 6 Transmutation [Concentration] ] [UB] Uttering an incantation, you draw on the magic of the Lower Planes or Upper Planes (your choice) to transform yourself. -# 281. - *Tenser's Transformation* © (V,S) level 6 Transmutation [Concentration] [UB] +# 281. - *Tenser's Transformation* © (V,S) level 6 Transmutation [Concentration] ] [UB] You endow yourself with endurance and martial prowess fueled by magic. Until the spell ends, you can't cast spells, and you gain the following benefits: • You gain 50 temporary hit points. If any of these remain when the spell ends, they are lost. @@ -1155,178 +1155,178 @@ You endow yourself with endurance and martial prowess fueled by magic. Until the • You can attack twice, instead of once, when you take the Attack action on your turn. Immediately after the spell ends, you must succeed on a DC 15 Constitution saving throw or suffer one level of exhaustion. -# 282. - True Seeing (V,S) level 6 Divination [SOL] +# 282. - True Seeing (V,S) level 6 Divination [Bard,Cleric,Sorcerer,Warlock,Wizard] [SOL] A creature you touch gains True Sight for one hour -# 283. - Wall of Thorns (V,S) level 6 Conjuration [Concentration] [SOL] +# 283. - Wall of Thorns (V,S) level 6 Conjuration [Concentration] [Druid] [SOL] Creates a wall of tough of needle-sharp thorns, that hurts and slows every creature in it. -# 284. - Arcane Sword (M,V,S) level 7 Evocation [Concentration] [SOL] +# 284. - Arcane Sword (M,V,S) level 7 Evocation [Concentration] [Bard,Wizard] [SOL] Summon a weapon that fights for you. -# 285. - Conjure Celestial (V,S) level 7 Conjuration [Concentration] [SOL] +# 285. - Conjure Celestial (V,S) level 7 Conjuration [Concentration] [Cleric] [SOL] Conjures a celestial creature of challenge rating 4 that fights alongside you. If you lose concentration, the creature is dismissed. -# 286. - *Crown of Stars* © (V,S) level 7 Evocation [UB] +# 286. - *Crown of Stars* © (V,S) level 7 Evocation ] [UB] Seven star-like motes of light appear and orbit your head until the spell ends. You can use a bonus action to send one of the motes streaking toward one creature or object within 120 feet of you. When you do so, make a ranged spell attack. On a hit, the target takes 4d12 radiant damage. Whether you hit or miss, the mote is expended. The spell ends early if you expend the last mote. If you have four or more motes remaining, they shed bright light in a 30-foot radius and dim light for an additional 30 feet. If you have one to three motes remaining, they shed dim light in a 30-foot radius. When you cast this spell using a spell slot of 8th level or higher, the number of motes created increases by two for each slot level above 7th. -# 287. - Delayed Blast Fireball (V,S) level 7 Evocation [Concentration] [SOL] +# 287. - Delayed Blast Fireball (V,S) level 7 Evocation [Concentration] [Sorcerer,Wizard] [SOL] Conjures a ball of fire that grows more powerful with time, detonating when a creature enters its space or when the spell ends. -# 288. - Divine Word (V) level 7 Evocation [SOL] +# 288. - Divine Word (V) level 7 Evocation [Cleric] [SOL] Utter a divine word that inflicts various negative conditions on enemies you can see, based on their HP. Also banishes all celestials, elementals, feys, and fiends if they fail their saving throws. -# 289. - *Draconic Transformation* © (M,V,S) level 7 Transmutation [Concentration] [UB] +# 289. - *Draconic Transformation* © (M,V,S) level 7 Transmutation [Concentration] ] [UB] With a roar, you draw on the magic of dragons to transform yourself, taking on draconic features. You gain the following benefits until the spell ends: • You have blindsight with a range of 30 feet. • When you cast this spell, and as a bonus action on subsequent turns for the duration, you can exhale shimmering energy in a 60-foot cone. Each creature in that area must make a Dexterity saving throw, taking 6d8 force damage on a failed save, or half as much damage on a successful one. • Incorporeal wings sprout from your back, giving you a flying speed of 60 feet. -# 290. - Finger of Death (V,S) level 7 Necromancy [SOL] +# 290. - Finger of Death (V,S) level 7 Necromancy [Sorcerer,Warlock,Wizard] [SOL] Send negative energy coursing through a creature within range. -# 291. - Fire Storm (V,S) level 7 Evocation [SOL] +# 291. - Fire Storm (V,S) level 7 Evocation [Cleric,Druid,Sorcerer] [SOL] Causes a wide wall of roaring flames to burst up wherever you choose within range. -# 292. - Gravity Slam (V,S) level 7 Transmutation [SOL] +# 292. - Gravity Slam (V,S) level 7 Transmutation [Druid,Sorcerer,Warlock,Wizard] [SOL] Increase gravity to slam everyone in a specific area onto the ground. -# 293. - Prismatic Spray (V,S) level 7 Evocation [SOL] +# 293. - Prismatic Spray (V,S) level 7 Evocation [Sorcerer,Wizard] [SOL] Each creature within the cone of effect is randomly affected by one or two (roll 8 on d8) rays with the following effects: -# 294. - Regenerate (V,S) level 7 Transmutation [SOL] +# 294. - Regenerate (V,S) level 7 Transmutation [Bard,Cleric,Druid] [SOL] Touch a creature and stimulate its natural healing ability. -# 295. - Rescue the Dying (V) level 7 Transmutation [UB] +# 295. - Rescue the Dying (V) level 7 Transmutation ] [UB] With a word, you call positive energy into the target's body to heal and ward it. The target regains a number of hit points equal to 4d10 + 30. It also gains temporary hit points equal to half that amount and resistance to all damage, both lasting until the end of your next turn. When you cast this spell using a spell slot of 8th level or higher, the healing increases by 2d10 for each slot level above 7th. -# 296. - Resurrection (M,V,S) level 7 Necromancy [SOL] +# 296. - Resurrection (M,V,S) level 7 Necromancy [Bard,Cleric,Druid] [SOL] Brings one creature back to life, up to 100 years after death. -# 297. - *Reverse Gravity* © (V,S) level 7 Transmutation [Concentration] [UB] +# 297. - *Reverse Gravity* © (V,S) level 7 Transmutation [Concentration] ] [UB] This spell reverses gravity in a 50-foot-radius, 100-foot-high cylinder centered on a point within range. -# 298. - Symbol (V,S) level 7 Abjuration [SOL] +# 298. - Symbol (V,S) level 7 Abjuration [Bard,Cleric,Wizard] [SOL] Inscribe a glyph on a surface. When an enemy starts its turn in the area or enters it, the glyph's effect is applied in a sphere with a 12-cell radius. -# 299. - *Abi-Dalzim's Horrid Wilting* © (V,S) level 8 Necromancy [UB] +# 299. - *Abi-Dalzim's Horrid Wilting* © (V,S) level 8 Necromancy ] [UB] You draw the moisture from every creature in a 30-foot cube centered on a point you choose within range. Each creature in that area must make a Constitution saving throw. Constructs and undead aren't affected, and plants and ice elementals make this saving throw with disadvantage. A creature takes 10d8 necrotic damage on a failed save, or half as much damage on a successful one. -# 300. - Divine Blade (V,S) level 8 Evocation [Concentration] [SOL] +# 300. - Divine Blade (V,S) level 8 Evocation [Concentration] [Cleric] [SOL] A glowing blade of pure energy springs from your hand. On a hit, the target takes 6d8 radiant damage and must roll a Wisdom saving throw to avoid being stunned until the end of its next turn. -# 301. - Dominate Monster (V,S) level 8 Enchantment [Concentration] [SOL] +# 301. - Dominate Monster (V,S) level 8 Enchantment [Concentration] [Bard,Sorcerer,Warlock,Wizard] [SOL] Grants you control over an enemy creature of any type. -# 302. - Earthquake (V,S) level 8 Evocation [Concentration] [SOL] +# 302. - Earthquake (V,S) level 8 Evocation [Concentration] [Cleric,Druid,Sorcerer] [SOL] You create a seismic disturbance that violently shakes the ground and the creatures standing on it for the duration of the spell. -# 303. - Feeblemind (V,S) level 8 Enchantment [SOL] +# 303. - Feeblemind (V,S) level 8 Enchantment [Bard,Druid,Warlock,Wizard] [SOL] You blast the mind of one creature, attempting to shatter its intellect and personality. The target takes 4d6 psychic damage and must make an Intelligence saving throw. On a failed save, the creature's Intelligence, Charisma and Wisdom scores become 1 and it is unable to cast spells. These effects last for 1 minute. -# 304. - Holy Aura (V,S) level 8 Abjuration [Concentration] [SOL] +# 304. - Holy Aura (V,S) level 8 Abjuration [Concentration] [Cleric] [SOL] Allies within 6 cells of you when you cast Holy Aura gain advantage on all saving throws, and other creatures have disadvantage on attack rolls against them until the spell ends. In addition, when a fiend or an undead hits an affected creature with a melee attack, they must succeed on a Constitution saving throw or be blinded until the spell ends. -# 305. - Incendiary Cloud (V,S) level 8 Conjuration [Concentration] [SOL] +# 305. - Incendiary Cloud (V,S) level 8 Conjuration [Concentration] [Sorcerer,Wizard] [SOL] A cloud of smoke appears in a sphere with a 4-cell radius. The cloud damages each creature inside it, and moves away from you each turn until the end of the spell's duration or until a moderate wind disperses the cloud. -# 306. - *Maddening Darkness* © (V) level 8 Evocation [Concentration] [UB] +# 306. - *Maddening Darkness* © (V) level 8 Evocation [Concentration] ] [UB] Magical darkness spreads from a point you choose within range to fill a 60-foot-radius sphere until the spell ends. Shrieks, gibbering, and mad laughter can be heard within the sphere. On activation, and whenever a creature ends its turn in the sphere, it must make a Wisdom saving throw, taking 6d8 psychic damage on a failed save, or half as much damage on a successful one. -# 307. - Maze (V,S) level 8 Abjuration [Concentration] [SOL] +# 307. - Maze (V,S) level 8 Abjuration [Concentration] [Wizard] [SOL] You banish a creature that you can see within range into a labyrinthine demiplane. The target remains there for the spell's duration or until it escapes the maze. -# 308. - *Mind Blank* © (V,S) level 8 Transmutation [UB] +# 308. - *Mind Blank* © (V,S) level 8 Transmutation ] [UB] Until the spell ends, one willing creature you touch is immune to psychic damage, any effect that would sense its emotions or read its thoughts, divination spells, and the charmed condition. -# 309. - Power Word Stun (V) level 8 Enchantment [SOL] +# 309. - Power Word Stun (V) level 8 Enchantment [Bard,Sorcerer,Warlock,Wizard] [SOL] Overwhelm the mind of a creature that has 150 hit points or fewer, leaving it stunned. -# 310. - Soul Expulsion (V,S) level 8 Necromancy [UB] +# 310. - Soul Expulsion (V,S) level 8 Necromancy ] [UB] You blast a foe's soul with magical power, causing it to glow with otherwordly light. Choose one creature that you can see within range, which must make a Charisma saving throw. On a failed saving throw, the target takes 11d8 necrotic damage and is stunned until the start of your next turn. On a successful saving throw, the target takes half damage and isn't stunned. Each enemy other than the target that is within 60 feet of the target must make a Wisdom saving throw. On a failed save, a creature takes 7d8 radiant damage and has disadvantage on attack rolls until the end of your next turn. On a successful saving throw a creature takes half damage and nothing else. When this spell targets undead, the spell ignores any resistance or immunity to necrotic damage, and the target has disadvantage on the saving throw. When you cast this spell using a spell slot of 9th level, both the necrotic damage and radiant damage increase by 2d8. -# 311. - Spell Ward (V,S) level 8 Abjuration [Concentration] [SOL] +# 311. - Spell Ward (V,S) level 8 Abjuration [Concentration] [Cleric,Wizard] [SOL] Creates a mobile globe that is impenetrable to enemy spells cast from outside it. -# 312. - Sunburst (V,S) level 8 Evocation [SOL] +# 312. - Sunburst (V,S) level 8 Evocation [Druid,Sorcerer,Wizard] [SOL] Brilliant sunlight blazes in a sphere with a 12-cell radius. Each creature that fails a Constitution saving throw takes radiant damage and is blinded for 1 minute. Any darkness created by a spell in the area is dispelled. -# 313. - Thunderstorm (V,S) level 8 Transmutation [SOL] +# 313. - Thunderstorm (V,S) level 8 Transmutation [Cleric,Druid,Wizard] [SOL] You create a blast of thunder in a sphere that causes thunder and lightning damage to everyone, and can blind or stun those who fail a CON saving throw. -# 314. - Wild Shapes (V,S) level 8 Transmutation [Concentration] [SOL] +# 314. - Wild Shapes (V,S) level 8 Transmutation [Concentration] ] [SOL] Turns other creatures in to beasts for one day. -# 315. - *Foresight* © (V,S) level 9 Transmutation [UB] +# 315. - *Foresight* © (V,S) level 9 Transmutation ] [UB] You touch a willing creature and bestow a limited ability to see into the immediate future. For the duration, the target can't be surprised and has advantage on attack rolls, ability checks, and saving throws. Additionally, other creatures have disadvantage on attack rolls against the target for the duration. -# 316. - *Invulnerability* © (M,V,S) level 9 Abjuration [Concentration] [UB] +# 316. - *Invulnerability* © (M,V,S) level 9 Abjuration [Concentration] ] [UB] You are immune to all damage until the spell ends. -# 317. - *Mass Heal* © (V,S) level 9 Transmutation [UB] +# 317. - *Mass Heal* © (V,S) level 9 Transmutation ] [UB] A flood of healing energy flows from you into injured creatures around you. You restore 120 hit points each to 6 creatures that you can see within range. Creatures healed by this spell are also cured of all diseases and any effect making them blinded or deafened. This spell has no effect on undead or constructs. -# 318. - *Meteor Swarm* © (V,S) level 9 Transmutation [UB] +# 318. - *Meteor Swarm* © (V,S) level 9 Transmutation ] [UB] Blazing orbs of fire plummet to the ground at a single point you can see within range. Each creature in a 40-foot-radius sphere centered on the point you choose must make a Dexterity saving throw. The sphere spreads around corners. A creature takes 20d6 fire damage and 20d6 bludgeoning damage on a failed save, or half as much damage on a successful one. A creature in the area of more than one fiery burst is affected only once. -# 319. - *Power Word Heal* © (V,S) level 9 Enchantment [UB] +# 319. - *Power Word Heal* © (V,S) level 9 Enchantment ] [UB] A wave of healing energy washes over the creature you touch. The target regains all its hit points. If the creature is charmed, frightened, paralyzed, or stunned, the condition ends. If the creature is prone, it can use its reaction to stand up. This spell has no effect on undead or constructs. -# 320. - *Power Word Kill* © (V,S) level 9 Transmutation [UB] +# 320. - *Power Word Kill* © (V,S) level 9 Transmutation ] [UB] You utter a word of power that can compel one creature you can see within range to die instantly. If the creature you choose has 100 hit points or fewer, it dies. Otherwise, the spell has no effect. -# 321. - *Psychic Scream* © (S) level 9 Enchantment [UB] +# 321. - *Psychic Scream* © (S) level 9 Enchantment ] [UB] You unleash the power of your mind to blast the intellect of up to ten creatures of your choice that you can see within range. Each target must make an Intelligence saving throw. On a failed save, a target takes 14d6 psychic damage and is stunned for 1 minute. On a successful save, a target takes half as much damage and isn't stunned. A stunned target can make an Intelligence saving throw at the end of each of its turns. On a successful save, the stunning effect ends. -# 322. - *Shapechange* © (M,V,S) level 9 Transmutation [Concentration] [UB] +# 322. - *Shapechange* © (M,V,S) level 9 Transmutation [Concentration] ] [UB] You assume the form of a different creature for the duration. The new form can be of any creature with a challenge rating equal to your level or lower. -# 323. - *Time Stop* © (V) level 9 Transmutation [UB] +# 323. - *Time Stop* © (V) level 9 Transmutation ] [UB] You briefly stop the flow of time for everyone but yourself. No time passes for other creatures, while you take 1d4+1 turns in a row, during which you can use actions and move as normal. This spell ends if one of the actions you use during this period, or any effects that you create during this period, affects a creature other than you. -# 324. - *Weird* © (V,S) level 9 Illusion [Concentration] [UB] +# 324. - *Weird* © (V,S) level 9 Illusion [Concentration] ] [UB] Drawing on the deepest fears of a group of creatures, you create illusory creatures in their minds, visible only to them. Each enemy in a 30-foot-radius sphere centered on a point of your choice within range must make a Wisdom saving throw. On a failed save, a creature becomes frightened for the duration. The illusion calls on the creature's deepest fears, manifesting its worst nightmares as an implacable threat. At the end of each of the frightened creature's turns, it must succeed on a Wisdom saving throw or take 4d10 psychic damage. On a successful save, the spell ends for that creature. diff --git a/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs b/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs index e6f0ee9775..d701422d21 100644 --- a/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs +++ b/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs @@ -291,9 +291,6 @@ internal static class CharacterSubclassDefinitions internal static class ConditionDefinitions { - internal static ConditionDefinition ConditionDashing { get; } = - GetDefinition("ConditionDashing"); - internal static ConditionDefinition ConditionDomainMischiefBorrowedLuck { get; } = GetDefinition("ConditionDomainMischiefBorrowedLuck"); @@ -2483,11 +2480,6 @@ internal static class FightingStyleDefinitions internal static class FormationDefinitions { internal static FormationDefinition Column2 { get; } = GetDefinition("Column2"); - - internal static FormationDefinition SingleCreature { get; } = - GetDefinition("SingleCreature"); - - internal static FormationDefinition Squad4 { get; } = GetDefinition("Squad4"); } internal static class GadgetBlueprints @@ -3921,6 +3913,8 @@ internal static class DecisionPackageDefinitions internal static DecisionPackageDefinition DefaultSupportCasterWithBackupAttacksDecisions { get; } = GetDefinition("DefaultSupportCasterWithBackupAttacksDecisions"); + internal static DecisionPackageDefinition Fear { get; } = GetDefinition("Fear"); + internal static DecisionPackageDefinition Idle { get; } = GetDefinition("Idle"); } diff --git a/SolastaUnfinishedBusiness/Models/DocumentationContext.cs b/SolastaUnfinishedBusiness/Models/DocumentationContext.cs index d26f345039..57f5369e55 100644 --- a/SolastaUnfinishedBusiness/Models/DocumentationContext.cs +++ b/SolastaUnfinishedBusiness/Models/DocumentationContext.cs @@ -5,7 +5,10 @@ using System.Text; using JetBrains.Annotations; using SolastaUnfinishedBusiness.Api.LanguageExtensions; +using SolastaUnfinishedBusiness.Classes; using SolastaUnfinishedBusiness.Displays; +using static SolastaUnfinishedBusiness.Api.DatabaseHelper.CharacterClassDefinitions; +using static SolastaUnfinishedBusiness.Api.DatabaseHelper.SpellListDefinitions; namespace SolastaUnfinishedBusiness.Models; @@ -318,6 +321,32 @@ private static void DumpRaces(string groupName, Func filte sw.WriteLine(outString.ToString()); } + private static readonly Dictionary SpellListClassMap = + new() + { + { InventorClass.SpellList, InventorClass.Class }, + { SpellListBard, Bard }, + { SpellListCleric, Cleric }, + { SpellListDruid, Druid }, + { SpellListPaladin, Paladin }, + { SpellListRanger, Ranger }, + { SpellListSorcerer, Sorcerer }, + { SpellListWarlock, Warlock }, + { SpellListWizard, Wizard } + }; + + private static string GetClassesWhichCanCastSpell(SpellDefinition spell) + { + var result = SpellListClassMap.Where(kvp => kvp.Key.SpellsByLevel + .SelectMany(x => x.Spells) + .Contains(spell)) + .Aggregate(" [", (current, kvp) => current + kvp.Value.FormatTitle() + ","); + + result = result.Substring(0, result.Length - 1) + "]"; + + return result; + } + private static void DumpOthers(string groupName, Func filter) where T : BaseDefinition { var outString = new StringBuilder(); @@ -367,6 +396,8 @@ x is SpellDefinition spellDefinition { title += " [" + Gui.Format("Tooltip/&TagConcentrationTitle") + "]"; } + + title += GetClassesWhichCanCastSpell(spellDefinition); } outString.AppendLine($"# {counter++}. - {title} {GetTag(featureDefinition)}"); From 031e625b75d6284c3cef5a2f0154eeed27a9065a Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Fri, 6 Sep 2024 16:14:05 -0700 Subject: [PATCH 052/212] nail Command and Dissonant Whisper brains --- .../Patches/BrainPatcher.cs | 28 +-- ...derationsInfluenceEnemyProximityPatcher.cs | 19 +- ...ionsInfluenceFearSourceProximityPatcher.cs | 21 +- .../Spells/SpellBuildersLevel01.cs | 185 +++++++----------- 4 files changed, 95 insertions(+), 158 deletions(-) diff --git a/SolastaUnfinishedBusiness/Patches/BrainPatcher.cs b/SolastaUnfinishedBusiness/Patches/BrainPatcher.cs index dbeb31824f..7599d9ecef 100644 --- a/SolastaUnfinishedBusiness/Patches/BrainPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/BrainPatcher.cs @@ -37,13 +37,10 @@ private static IEnumerator UpdateContextElementsIfNecessary(Brain brain, Context if (!brain.contextUpToDateStatus.TryGetValue(contextType, out var isUpToDate)) { brain.contextUpToDateStatus.Add(contextType, true); - decisionContexts = brain.contexts[contextType]; - } - else - { - decisionContexts = brain.contexts[contextType]; } + decisionContexts = brain.contexts[contextType]; + if (isUpToDate) { yield break; @@ -56,25 +53,4 @@ private static IEnumerator UpdateContextElementsIfNecessary(Brain brain, Context brain.contextUpToDateStatus[contextType] = true; } } - - //BUGFIX: vanilla was setting this to true when in reality should be false - [HarmonyPatch(typeof(Brain), nameof(Brain.InvalidateMovePositionsOnly))] - [SuppressMessage("Minor Code Smell", "S101:Types should be named in PascalCase", Justification = "Patch")] - [UsedImplicitly] - public static class InvalidateMovePositionsOnly_Patch - { - [UsedImplicitly] - public static bool Prefix(Brain __instance) - { - if (__instance.contexts.TryGetValue(ContextType.MovePosition, out var decisionContextList)) - { - decisionContextList.Clear(); - } - - __instance.contextUpToDateStatus.TryAdd(ContextType.MovePosition, false); - __instance.contextUpToDateStatus[ContextType.MovePosition] = false; - - return false; - } - } } diff --git a/SolastaUnfinishedBusiness/Patches/Considerations/ConsiderationsInfluenceEnemyProximityPatcher.cs b/SolastaUnfinishedBusiness/Patches/Considerations/ConsiderationsInfluenceEnemyProximityPatcher.cs index 07cd577c3a..7aaa8db5e7 100644 --- a/SolastaUnfinishedBusiness/Patches/Considerations/ConsiderationsInfluenceEnemyProximityPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/Considerations/ConsiderationsInfluenceEnemyProximityPatcher.cs @@ -1,4 +1,5 @@ using System.Diagnostics.CodeAnalysis; +using System.Linq; using HarmonyLib; using JetBrains.Annotations; using TA.AI; @@ -10,7 +11,7 @@ namespace SolastaUnfinishedBusiness.Patches.Considerations; [UsedImplicitly] public static class InfluenceEnemyProximityPatcher { - //PATCH: allows this influence to be reverted if boolSecParameter is true + //PATCH: allows this influence to be reverted if enemy has StringParameter condition name //used on Command Spell, approach command [HarmonyPatch(typeof(InfluenceEnemyProximity), nameof(InfluenceEnemyProximity.Score))] [SuppressMessage("Minor Code Smell", "S101:Types should be named in PascalCase", Justification = "Patch")] @@ -36,19 +37,20 @@ private static void Score( DecisionParameters parameters, ScoringResult scoringResult) { + var character = parameters.character.GameLocationCharacter; + var rulesetCharacter = character.RulesetCharacter; var denominator = consideration.IntParameter > 0 ? consideration.IntParameter : 1; var floatParameter = consideration.FloatParameter; - var position = consideration.BoolParameter - ? context.position - : parameters.character.GameLocationCharacter.LocationPosition; + var position = consideration.BoolParameter ? context.position : character.LocationPosition; var numerator = 0.0f; + var approachSourceGuid = rulesetCharacter.AllConditionsForEnumeration.FirstOrDefault(x => + x.ConditionDefinition.Name == consideration.StringParameter)?.SourceGuid ?? 0; // ReSharper disable once ForeachCanBePartlyConvertedToQueryUsingAnotherGetEnumerator foreach (var enemy in parameters.situationalInformation.RelevantEnemies) { if (!AiLocationDefinitions.IsRelevantTargetForCharacter( - parameters.character.GameLocationCharacter, - enemy, parameters.situationalInformation.HasRelevantPerceivedTarget)) + character, enemy, parameters.situationalInformation.HasRelevantPerceivedTarget)) { continue; } @@ -59,9 +61,10 @@ private static void Score( parameters.character.GameLocationCharacter, position, enemy, enemy.LocationPosition); //BEGIN PATCH - if (consideration.boolSecParameter) + if (enemy.Guid == approachSourceGuid) { - distance = floatParameter - distance + 1; + numerator += Mathf.Lerp(0.0f, 1f, Mathf.Clamp(distance / floatParameter, 0.0f, 1f)); + continue; } //END PATCH diff --git a/SolastaUnfinishedBusiness/Patches/Considerations/ConsiderationsInfluenceFearSourceProximityPatcher.cs b/SolastaUnfinishedBusiness/Patches/Considerations/ConsiderationsInfluenceFearSourceProximityPatcher.cs index 4be9fdc4eb..1ce04523d9 100644 --- a/SolastaUnfinishedBusiness/Patches/Considerations/ConsiderationsInfluenceFearSourceProximityPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/Considerations/ConsiderationsInfluenceFearSourceProximityPatcher.cs @@ -11,7 +11,7 @@ namespace SolastaUnfinishedBusiness.Patches.Considerations; [UsedImplicitly] public static class InfluenceFearSourceProximityPatcher { - //PATCH: allows this influence to be reverted if boolSecParameter is true + //PATCH: allows this influence to be reverted if enemy has StringParameter condition name //used on Command Spell, approach command [HarmonyPatch(typeof(InfluenceFearSourceProximity), nameof(InfluenceFearSourceProximity.Score))] [SuppressMessage("Minor Code Smell", "S101:Types should be named in PascalCase", Justification = "Patch")] @@ -37,13 +37,14 @@ private static void Score( DecisionParameters parameters, ScoringResult scoringResult) { + var character = parameters.character.GameLocationCharacter; + var rulesetCharacter = character.RulesetCharacter; var denominator = consideration.IntParameter > 0 ? consideration.IntParameter : 1; var floatParameter = consideration.FloatParameter; - var position = consideration.BoolParameter - ? context.position - : parameters.character.GameLocationCharacter.LocationPosition; + var position = consideration.BoolParameter ? context.position : character.LocationPosition; var numerator = 0.0f; - var rulesetCharacter = parameters.character.GameLocationCharacter.RulesetCharacter; + var approachSourceGuid = rulesetCharacter.AllConditionsForEnumeration.FirstOrDefault(x => + x.ConditionDefinition.Name == consideration.StringParameter)?.SourceGuid ?? 0; foreach (var rulesetCondition in rulesetCharacter.AllConditionsForEnumeration .Where(rulesetCondition => @@ -65,9 +66,10 @@ private static void Score( relevantEnemy, relevantEnemy.LocationPosition); //BEGIN PATCH - if (consideration.boolSecParameter) + if (relevantEnemy.Guid == approachSourceGuid) { - distance = floatParameter - distance + 1; + numerator += Mathf.Lerp(0.0f, 1f, Mathf.Clamp(distance / floatParameter, 0.0f, 1f)); + break; } //END PATCH @@ -90,9 +92,10 @@ private static void Score( relevantAlly.LocationPosition); //BEGIN PATCH - if (consideration.boolSecParameter) + if (relevantAlly.Guid == approachSourceGuid) { - distance = floatParameter - distance + 1; + numerator += Mathf.Lerp(0.0f, 1f, Mathf.Clamp(distance / floatParameter, 0.0f, 1f)); + break; } //END PATCH diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs index 264a320c12..4ec4c3175a 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs @@ -1244,25 +1244,26 @@ internal static SpellDefinition BuildCommand() .SetUsesFixed(ActivationTime.NoCost) .AddToDB(); - var actionAffinityCanOnlyMove = FeatureDefinitionActionAffinityBuilder - .Create($"ActionAffinity{NAME}") - .SetGuiPresentationNoContent(true) - .SetAllowedActionTypes(false, false, true, false, false, false) - .AddToDB(); - - var moveAfraidDecision = DatabaseRepository.GetDatabase().GetElement("Move_Afraid"); + var moveAfraidDecision = DatabaseRepository.GetDatabase().GetElement("Move_Afraid"); // Approach #region Approach AI Behavior + const string ConditionApproachName = $"Condition{NAME}Approach"; + var scorerApproach = Object.Instantiate(moveAfraidDecision.Decision.scorer); + // need to deep copy these objects to avoid mess with move afraid settings + scorerApproach.scorer = scorerApproach.scorer.DeepCopy(); scorerApproach.name = "MoveScorer_Approach"; - // invert PenalizeFearSourceProximityAtPosition - scorerApproach.scorer.WeightedConsiderations[2].Consideration.boolSecParameter = true; - // invert PenalizeVeryCloseEnemyProximityAtPosition - scorerApproach.scorer.WeightedConsiderations[1].Consideration.boolSecParameter = true; + + // remove IsCloseFromMe + scorerApproach.scorer.WeightedConsiderations.RemoveAt(3); + // invert PenalizeFearSourceProximityAtPosition if brain character has condition approach and enemy is condition source + scorerApproach.scorer.WeightedConsiderations[2].Consideration.stringParameter = ConditionApproachName; + // invert PenalizeVeryCloseEnemyProximityAtPosition if brain character has condition approach and enemy is condition source + scorerApproach.scorer.WeightedConsiderations[1].Consideration.stringParameter = ConditionApproachName; var decisionApproach = DecisionDefinitionBuilder .Create("Move_Approach") @@ -1281,16 +1282,17 @@ internal static SpellDefinition BuildCommand() #endregion var conditionApproach = ConditionDefinitionBuilder - .Create($"Condition{NAME}Approach") + .Create(ConditionApproachName) .SetGuiPresentation($"Power{NAME}Approach", Category.Feature, ConditionPossessed) .SetConditionType(ConditionType.Detrimental) .SetPossessive() .SetSpecialDuration() .SetBrain(packageApproach, true, true) - .SetFeatures(actionAffinityCanOnlyMove) - .AddCustomSubFeatures(new OnConditionAddedOrRemovedCommandApproachOrFlee(true)) + .SetFeatures(MovementAffinityConditionDashing) .AddToDB(); + conditionApproach.AddCustomSubFeatures(new ActionFinishedByMeApproach(conditionApproach)); + var powerApproach = FeatureDefinitionPowerSharedPoolBuilder .Create($"Power{NAME}Approach") .SetGuiPresentation(Category.Feature) @@ -1306,39 +1308,14 @@ internal static SpellDefinition BuildCommand() // Flee - #region Flee AI Behavior - - var scorerFlee = Object.Instantiate(moveAfraidDecision.Decision.scorer); - - scorerFlee.name = "MoveScorer_Flee"; - // tweak IsCloseFromMe to differ a bit from Fear on location determination and force enemy to move further - scorerFlee.scorer.WeightedConsiderations[3].Consideration.floatParameter = 6; - - var decisionFlee = DecisionDefinitionBuilder - .Create("Move_Flee") - .SetGuiPresentationNoContent(true) - .SetDecisionDescription( - "Go as far as possible from enemies.", - "Move", - scorerFlee) - .AddToDB(); - - var packageFlee = DecisionPackageDefinitionBuilder - .Create("Flee") - .SetWeightedDecisions(new WeightedDecisionDescription { decision = decisionFlee, weight = 9 }) - .AddToDB(); - - #endregion - var conditionFlee = ConditionDefinitionBuilder .Create($"Condition{NAME}Flee") .SetGuiPresentation($"Power{NAME}Flee", Category.Feature, ConditionPossessed) .SetConditionType(ConditionType.Detrimental) .SetPossessive() .SetSpecialDuration() - .SetBrain(packageFlee, true, true) - .SetFeatures(actionAffinityCanOnlyMove) - .AddCustomSubFeatures(new OnConditionAddedOrRemovedCommandApproachOrFlee(false)) + .SetBrain(DecisionPackageDefinitions.Fear, true, true) + .SetFeatures(MovementAffinityConditionDashing) .AddToDB(); var powerFlee = FeatureDefinitionPowerSharedPoolBuilder @@ -1460,6 +1437,31 @@ internal static SpellDefinition BuildCommand() return spell; } + private sealed class ActionFinishedByMeApproach(ConditionDefinition conditionApproach) : IActionFinishedByMe + { + public IEnumerator OnActionFinishedByMe(CharacterAction characterAction) + { + var actingCharacter = characterAction.ActingCharacter; + var rulesetCharacter = actingCharacter.RulesetCharacter; + + if (characterAction.ActionId != Id.TacticalMove || + actingCharacter.MovingToDestination || + !rulesetCharacter.TryGetConditionOfCategoryAndType( + AttributeDefinitions.TagEffect, conditionApproach.Name, out var activeCondition)) + { + yield break; + } + + var rulesetCaster = EffectHelpers.GetCharacterByGuid(activeCondition.SourceGuid); + var caster = GameLocationCharacter.GetFromActor(rulesetCaster); + + if (!caster.IsWithinRange(actingCharacter, 1)) + { + rulesetCharacter.RemoveCondition(activeCondition); + } + } + } + private sealed class PowerOrSpellFinishedByMeCommand( ConditionDefinition conditionMark, FeatureDefinitionPower powerPool, @@ -1480,55 +1482,31 @@ public bool IsValid(CursorLocationSelectTarget __instance, GameLocationCharacter var rulesetCaster = __instance.ActionParams.ActingCharacter.RulesetCharacter.GetOriginalHero(); if (rulesetCaster == null) - { - return false; - } - - var rulesetTarget = target.RulesetCharacter; - - if (rulesetTarget.CharacterFamily == "Dragon" && - !rulesetCaster.LanguageProficiencies.Contains("Language_Draconic")) { __instance.actionModifier.FailureFlags.Add("Tooltip/&TargetMustUnderstandYou"); return false; } - if (rulesetTarget.CharacterFamily == "Fey" && - !rulesetCaster.LanguageProficiencies.Contains("Language_Elvish")) - { - __instance.actionModifier.FailureFlags.Add("Tooltip/&TargetMustUnderstandYou"); - return false; - } - - if (rulesetTarget.CharacterFamily is "Giant" or "Giant_Rugan" && - !rulesetCaster.LanguageProficiencies.Contains("Language_Giant")) - { - __instance.actionModifier.FailureFlags.Add("Tooltip/&TargetMustUnderstandYou"); - return false; - } - - if (rulesetTarget.CharacterFamily == "Fiend" && - !rulesetCaster.LanguageProficiencies.Contains("Language_Infernal")) - { - __instance.actionModifier.FailureFlags.Add("Tooltip/&TargetMustUnderstandYou"); - return false; - } - - if (rulesetTarget.CharacterFamily == "Elemental" && - !rulesetCaster.LanguageProficiencies.Contains("Language_Terran")) - { - __instance.actionModifier.FailureFlags.Add("Tooltip/&TargetMustUnderstandYou"); - return false; - } - - var result = rulesetTarget.CharacterFamily == "Humanoid"; + var rulesetTarget = target.RulesetCharacter; - if (!result) + switch (rulesetTarget.CharacterFamily) { - __instance.actionModifier.FailureFlags.Add("Tooltip/&TargetMustUnderstandYou"); + case "Dragon" when + rulesetCaster.LanguageProficiencies.Contains("Language_Draconic"): + case "Elemental" when + rulesetCaster.LanguageProficiencies.Contains("Language_Terran"): + case "Fey" when + rulesetCaster.LanguageProficiencies.Contains("Language_Elvish"): + case "Fiend" when + rulesetCaster.LanguageProficiencies.Contains("Language_Infernal"): + case "Giant" or "Giant_Rugan" when + rulesetCaster.LanguageProficiencies.Contains("Language_Giant"): + case "Humanoid": + return true; + default: + __instance.actionModifier.FailureFlags.Add("Tooltip/&TargetMustUnderstandYou"); + return false; } - - return result; } public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, BaseDefinition baseDefinition) @@ -1564,7 +1542,7 @@ void ReactionValidated(ReactionRequestSpendBundlePower reactionRequest) } var rulesetTarget = target.RulesetCharacter; - var conditionsToRemove = rulesetTarget.AllConditions + var conditionsToRemove = rulesetTarget.AllConditionsForEnumeration .Where(x => x.SourceGuid != caster.Guid && conditions.Contains(x.ConditionDefinition)) @@ -1579,34 +1557,6 @@ void ReactionValidated(ReactionRequestSpendBundlePower reactionRequest) } } - private sealed class OnConditionAddedOrRemovedCommandApproachOrFlee( - bool onlyEndTurnIfWithin5Ft) : IOnConditionAddedOrRemoved - { - public void OnConditionAdded(RulesetCharacter target, RulesetCondition rulesetCondition) - { - // bool - } - - public void OnConditionRemoved(RulesetCharacter rulesetTarget, RulesetCondition rulesetCondition) - { - var target = GameLocationCharacter.GetFromActor(rulesetTarget); - - if (onlyEndTurnIfWithin5Ft) - { - var rulesetCaster = EffectHelpers.GetCharacterByGuid(rulesetCondition.SourceGuid); - var caster = GameLocationCharacter.GetFromActor(rulesetCaster); - - if (!target.IsWithinRange(caster, 1)) - { - return; - } - } - - target.SpendActionType(ActionType.Bonus); - target.SpendActionType(ActionType.Main); - } - } - private sealed class CharacterBeforeTurnStartListenerCommandGrovel : ICharacterTurnStartListener { public void OnCharacterTurnStarted(GameLocationCharacter locationCharacter) @@ -1682,20 +1632,24 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, target.SpendActionType(ActionType.Reaction); + // use enemy brain to decide position to go based on Fear package var aiService = ServiceRepository.GetService(); aiService.TryGetAiFromGameCharacter(target, out var aiTarget); var brain = aiTarget.BattleBrain; - var decisionsBackup = brain.Decisions.ToList(); - brain.decisions.SetRange(DecisionPackageDefinitions.Fear.Package.WeightedDecisions); + brain.StashDecisions(); + brain.RemoveAllDecisions(); + brain.AddDecisionPackage(DecisionPackageDefinitions.Fear); + brain.RegisterAllActiveDecisionPackages(); yield return brain.DecideNextActivity(); var position = brain.SelectedDecision.context.position; - brain.decisions.SetRange(decisionsBackup); + brain.UnstashDecisions(); + target.MyExecuteActionTacticalMove(position); } } @@ -2319,7 +2273,8 @@ public EffectDescription GetEffectDescription( RulesetEffect rulesetEffect) { var rulesetCondition = - character.AllConditions.FirstOrDefault(x => x.ConditionDefinition == conditionSkinOfRetribution); + character.AllConditionsForEnumeration.FirstOrDefault(x => + x.ConditionDefinition == conditionSkinOfRetribution); var effectLevel = rulesetCondition!.EffectLevel; var damageForm = effectDescription.FindFirstDamageForm(); From 662b692dc6945209b8610bd14565acccb6e18050 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Fri, 6 Sep 2024 16:22:12 -0700 Subject: [PATCH 053/212] fix Exploiter feat not checking for reactions from 2nd target onwards --- SolastaUnfinishedBusiness/ChangelogHistory.txt | 1 + SolastaUnfinishedBusiness/Feats/ClassFeats.cs | 9 +++++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/SolastaUnfinishedBusiness/ChangelogHistory.txt b/SolastaUnfinishedBusiness/ChangelogHistory.txt index 3f3a621687..8d71ffa646 100644 --- a/SolastaUnfinishedBusiness/ChangelogHistory.txt +++ b/SolastaUnfinishedBusiness/ChangelogHistory.txt @@ -5,6 +5,7 @@ - fixed Barbarian Sundering Blow interaction with Call Lightning, and other proxy like powers - fixed Bend Luck, Flash of Genius, Inspiring Protection, Shield Master, and Weal/Woe not consuming reaction - fixed Dwarven Fortitude, and Magical Guidance incorrectly consuming a reaction +- fixed Exploiter feat not checking for reactions from 2nd target onwards - fixed Lucky, and Mage Slayer feats double consumption - fixed Martial Commander coordinated defense to require an attack first [VANILLA] - fixed Party Editor to register/unregister powers from feats diff --git a/SolastaUnfinishedBusiness/Feats/ClassFeats.cs b/SolastaUnfinishedBusiness/Feats/ClassFeats.cs index 4735f8f832..d8032d923b 100644 --- a/SolastaUnfinishedBusiness/Feats/ClassFeats.cs +++ b/SolastaUnfinishedBusiness/Feats/ClassFeats.cs @@ -407,14 +407,19 @@ private static IEnumerator HandleReaction( { if (attackRollOutcome is not (RollOutcome.Success or RollOutcome.CriticalSuccess) || attacker == helper || - helper.IsMyTurn() || - !helper.CanReact()) + helper.IsMyTurn()) { yield break; } + // ReSharper disable once ForeachCanBePartlyConvertedToQueryUsingAnotherGetEnumerator foreach (var defender in targets) { + if (!helper.CanReact()) + { + yield break; + } + var (opportunityAttackMode, actionModifier) = helper.GetFirstMeleeModeThatCanAttack(defender, battleManager); From 2969fa9c0c53bd4ffe425a26510aa934fd35949c Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Fri, 6 Sep 2024 17:40:03 -0700 Subject: [PATCH 054/212] fix Patron Archfey misty step to only react against enemy effects --- SolastaUnfinishedBusiness/ChangelogHistory.txt | 1 + SolastaUnfinishedBusiness/Subclasses/PatronArchfey.cs | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/SolastaUnfinishedBusiness/ChangelogHistory.txt b/SolastaUnfinishedBusiness/ChangelogHistory.txt index 8d71ffa646..64be7dbcf1 100644 --- a/SolastaUnfinishedBusiness/ChangelogHistory.txt +++ b/SolastaUnfinishedBusiness/ChangelogHistory.txt @@ -9,6 +9,7 @@ - fixed Lucky, and Mage Slayer feats double consumption - fixed Martial Commander coordinated defense to require an attack first [VANILLA] - fixed Party Editor to register/unregister powers from feats +- fixed Patron Archfey misty step to only react against enemy effects - fixed save by location/campaign setting on multiplayer load - improved ability checks to also allow reactions on success [Circle of the Cosmos woe] - improved Conversion Slots, and Shorthand versatilities to react on ability checks diff --git a/SolastaUnfinishedBusiness/Subclasses/PatronArchfey.cs b/SolastaUnfinishedBusiness/Subclasses/PatronArchfey.cs index 9e18899dbf..611f3ee37d 100644 --- a/SolastaUnfinishedBusiness/Subclasses/PatronArchfey.cs +++ b/SolastaUnfinishedBusiness/Subclasses/PatronArchfey.cs @@ -351,6 +351,11 @@ public IEnumerator OnMagicEffectBeforeHitConfirmedOnMe( bool firstTarget, bool criticalHit) { + if (attacker.Side == defender.Side) + { + yield break; + } + yield return HandleReaction(battleManager, attacker, defender); } From 7f77ea76672db7b68b7cc2799310859e25d053c7 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Fri, 6 Sep 2024 17:59:44 -0700 Subject: [PATCH 055/212] invoke UsedTacticalMovesChanged after changing GameLocationCharacter.UsedTacticalMoves --- SolastaUnfinishedBusiness/Feats/RaceFeats.cs | 2 ++ SolastaUnfinishedBusiness/Models/CharacterUAContext.cs | 2 ++ .../Subclasses/Builders/GambitsBuilders.cs | 3 +++ SolastaUnfinishedBusiness/Subclasses/MartialWarlord.cs | 1 + SolastaUnfinishedBusiness/Subclasses/RoguishUmbralStalker.cs | 1 + 5 files changed, 9 insertions(+) diff --git a/SolastaUnfinishedBusiness/Feats/RaceFeats.cs b/SolastaUnfinishedBusiness/Feats/RaceFeats.cs index 28e284d7e6..4758cfcb10 100644 --- a/SolastaUnfinishedBusiness/Feats/RaceFeats.cs +++ b/SolastaUnfinishedBusiness/Feats/RaceFeats.cs @@ -1369,6 +1369,7 @@ public IEnumerator OnActionFinishedByMe(CharacterAction action) } actingCharacter.UsedTacticalMoves = usedTacticalMoves; + actingCharacter.UsedTacticalMovesChanged?.Invoke(actingCharacter); actingCharacter.UsedSpecialFeatures.Remove(UsedTacticalMoves); } @@ -1426,6 +1427,7 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, actingCharacter.UsedSpecialFeatures.TryAdd(UsedTacticalMoves, actingCharacter.UsedTacticalMoves); actingCharacter.UsedTacticalMoves = 0; + actingCharacter.UsedTacticalMovesChanged?.Invoke(actingCharacter); ServiceRepository.GetService().ExecuteAction(_actionParams, null, true); yield break; diff --git a/SolastaUnfinishedBusiness/Models/CharacterUAContext.cs b/SolastaUnfinishedBusiness/Models/CharacterUAContext.cs index 9319a02bcd..ce0adae6e8 100644 --- a/SolastaUnfinishedBusiness/Models/CharacterUAContext.cs +++ b/SolastaUnfinishedBusiness/Models/CharacterUAContext.cs @@ -1591,6 +1591,8 @@ private IEnumerator HandleWithdraw(CharacterAction action, GameLocationCharacter attacker.UsedTacticalMoves = 0; } + attacker.UsedTacticalMovesChanged?.Invoke(attacker); + rulesetAttacker.InflictCondition( ConditionDisengaging, DurationType.Round, diff --git a/SolastaUnfinishedBusiness/Subclasses/Builders/GambitsBuilders.cs b/SolastaUnfinishedBusiness/Subclasses/Builders/GambitsBuilders.cs index 06ce6b7783..e52278a13b 100644 --- a/SolastaUnfinishedBusiness/Subclasses/Builders/GambitsBuilders.cs +++ b/SolastaUnfinishedBusiness/Subclasses/Builders/GambitsBuilders.cs @@ -1467,6 +1467,7 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, // consume one tactical move actingCharacter.UsedTacticalMoves++; + actingCharacter.UsedTacticalMovesChanged?.Invoke(actingCharacter); var dieType = GetGambitDieSize(caster); int dieRoll; @@ -1933,6 +1934,7 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, var targetPosition = action.ActionParams.Positions[0]; targetCharacter.UsedTacticalMoves = 0; + targetCharacter.UsedTacticalMovesChanged?.Invoke(targetCharacter); targetRulesetCharacter.InflictCondition( ConditionDisengaging, DurationType.Round, @@ -1952,6 +1954,7 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, FeatureDefinitionPowers.PowerDomainSunHeraldOfTheSun, EffectHelpers.EffectType.Effect); targetCharacter.UsedTacticalMoves = 0; + targetCharacter.UsedTacticalMovesChanged?.Invoke(targetCharacter); targetCharacter.SpendActionType(ActionDefinitions.ActionType.Reaction); targetCharacter.MyExecuteActionTacticalMove(targetPosition); diff --git a/SolastaUnfinishedBusiness/Subclasses/MartialWarlord.cs b/SolastaUnfinishedBusiness/Subclasses/MartialWarlord.cs index ba280a1a94..064ef7e40f 100644 --- a/SolastaUnfinishedBusiness/Subclasses/MartialWarlord.cs +++ b/SolastaUnfinishedBusiness/Subclasses/MartialWarlord.cs @@ -506,6 +506,7 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, FeatureDefinitionPowers.PowerDomainSunHeraldOfTheSun, EffectHelpers.EffectType.Effect); targetCharacter.UsedTacticalMoves = 0; + targetCharacter.UsedTacticalMovesChanged?.Invoke(targetCharacter); targetCharacter.MyExecuteActionTacticalMove(targetPosition); yield break; diff --git a/SolastaUnfinishedBusiness/Subclasses/RoguishUmbralStalker.cs b/SolastaUnfinishedBusiness/Subclasses/RoguishUmbralStalker.cs index 80cc25b442..e76d7ef377 100644 --- a/SolastaUnfinishedBusiness/Subclasses/RoguishUmbralStalker.cs +++ b/SolastaUnfinishedBusiness/Subclasses/RoguishUmbralStalker.cs @@ -411,6 +411,7 @@ public IEnumerator OnPowerOrSpellInitiatedByMe(CharacterActionMagicEffect action actingCharacter.UsedSpecialFeatures.TryAdd("ShadowStride", 1); actingCharacter.UsedTacticalMoves += distance; + actingCharacter.UsedTacticalMovesChanged?.Invoke(actingCharacter); } } From 227160e2e80178d997196f4f387c7c0fc13b660a Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Fri, 6 Sep 2024 20:40:31 -0700 Subject: [PATCH 056/212] tweak Command Halt to use an action affinity instead of a replaced brain --- SolastaUnfinishedBusiness/Models/FixesContext.cs | 11 +++++++++++ .../Spells/SpellBuildersLevel01.cs | 13 +++++++++---- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/SolastaUnfinishedBusiness/Models/FixesContext.cs b/SolastaUnfinishedBusiness/Models/FixesContext.cs index 4595b37654..891f5d6a52 100644 --- a/SolastaUnfinishedBusiness/Models/FixesContext.cs +++ b/SolastaUnfinishedBusiness/Models/FixesContext.cs @@ -12,6 +12,7 @@ using SolastaUnfinishedBusiness.Interfaces; using SolastaUnfinishedBusiness.Subclasses; using SolastaUnfinishedBusiness.Validators; +using TA.AI; using UnityEngine; using static AttributeDefinitions; using static EquipmentDefinitions; @@ -39,6 +40,9 @@ namespace SolastaUnfinishedBusiness.Models; internal static class FixesContext { + internal static readonly DecisionDefinition DecisionMoveAfraid = + DatabaseRepository.GetDatabase().GetElement("Move_Afraid"); + internal static void Load() { InitMagicAffinitiesAndCastSpells(); @@ -56,6 +60,7 @@ internal static void LateLoad() FixBlackDragonLegendaryActions(); FixColorTables(); FixCriticalThresholdModifiers(); + FixDecisionMoveAfraid(); FixDivineBlade(); FixDragonBreathPowerSavingAttribute(); FixEagerForBattleTexts(); @@ -344,6 +349,12 @@ private static void FixColorTables() } } + private static void FixDecisionMoveAfraid() + { + //BUGFIX: allow actors to move a bit far on move_afraid by lowering consideration weight a bit + DecisionMoveAfraid.Decision.scorer.Scorer.WeightedConsiderations[3].weight = 0.95f; + } + private static void FixDivineBlade() { //BUGFIX: allows clerics to actually wield divine blade diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs index 4ec4c3175a..fdef783e1f 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs @@ -1244,15 +1244,13 @@ internal static SpellDefinition BuildCommand() .SetUsesFixed(ActivationTime.NoCost) .AddToDB(); - var moveAfraidDecision = DatabaseRepository.GetDatabase().GetElement("Move_Afraid"); - // Approach #region Approach AI Behavior const string ConditionApproachName = $"Condition{NAME}Approach"; - var scorerApproach = Object.Instantiate(moveAfraidDecision.Decision.scorer); + var scorerApproach = Object.Instantiate(FixesContext.DecisionMoveAfraid.Decision.scorer); // need to deep copy these objects to avoid mess with move afraid settings scorerApproach.scorer = scorerApproach.scorer.DeepCopy(); @@ -1364,7 +1362,12 @@ internal static SpellDefinition BuildCommand() .SetConditionType(ConditionType.Detrimental) .SetPossessive() .SetSpecialDuration() - .SetBrain(DecisionPackageDefinitions.Idle, true, false) + .SetFeatures( + FeatureDefinitionActionAffinityBuilder + .Create($"ActionAffinity{NAME}Halt") + .SetGuiPresentationNoContent(true) + .SetAllowedActionTypes(false, false, false, false, false, false) + .AddToDB()) .AddToDB(); var powerHalt = FeatureDefinitionPowerSharedPoolBuilder @@ -1631,6 +1634,8 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, } target.SpendActionType(ActionType.Reaction); + target.UsedTacticalMoves = 0; + target.UsedTacticalMovesChanged?.Invoke(target); // use enemy brain to decide position to go based on Fear package var aiService = ServiceRepository.GetService(); From 066b2d2a54c97dae0e697357dfe9b8d3d45b7018 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Fri, 6 Sep 2024 20:40:53 -0700 Subject: [PATCH 057/212] remove unused terms --- .../Translations/de/SubClasses/PathOfTheWildMagic-de.txt | 3 --- .../Translations/es/SubClasses/PathOfTheWildMagic-es.txt | 3 --- .../Translations/fr/SubClasses/PathOfTheWildMagic-fr.txt | 3 --- .../Translations/it/SubClasses/PathOfTheWildMagic-it.txt | 3 --- .../Translations/ja/SubClasses/PathOfTheWildMagic-ja.txt | 3 --- .../Translations/ko/SubClasses/PathOfTheWildMagic-ko.txt | 3 --- .../Translations/pt-BR/SubClasses/PathOfTheWildMagic-pt-BR.txt | 3 --- .../Translations/zh-CN/SubClasses/PathOfTheWildMagic-zh-CN.txt | 3 --- 8 files changed, 24 deletions(-) diff --git a/SolastaUnfinishedBusiness/Translations/de/SubClasses/PathOfTheWildMagic-de.txt b/SolastaUnfinishedBusiness/Translations/de/SubClasses/PathOfTheWildMagic-de.txt index a33ad2cf32..c5e6eea700 100644 --- a/SolastaUnfinishedBusiness/Translations/de/SubClasses/PathOfTheWildMagic-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/SubClasses/PathOfTheWildMagic-de.txt @@ -44,8 +44,6 @@ Feature/&PowerPathOfTheWildMagicBoltDescription=Ein Lichtblitz schießt aus dein Feature/&PowerPathOfTheWildMagicBoltTitle=Wilder Anstieg: Bolzen Feature/&PowerPathOfTheWildMagicMagicAwarenessDescription=Als Aktion können Sie Ihr Bewusstsein für die Präsenz konzentrierter Magie öffnen. Innerhalb der nächsten Minute kennen Sie den Standort aller Zaubersprüche und magischen Gegenstände im Umkreis von 60 Fuß um Sie herum. Feature/&PowerPathOfTheWildMagicMagicAwarenessTitle=Magisches Bewusstsein -Feature/&PowerPathOfTheWildMagicSummonBlastDescription=Der Geist explodiert und jedes Wesen im Umkreis von 1,52 m muss einen Rettungswurf für Geschicklichkeit bestehen oder erleidet 1W6 Kraftschaden. -Feature/&PowerPathOfTheWildMagicSummonBlastTitle=Wilder Anstieg: Geisterexplosion Feature/&PowerPathOfTheWildMagicSummonDescription=Wählen Sie einen Punkt, den Sie in einem Umkreis von 30 Fuß sehen können. Ein Ausbruch spiritueller Energie bricht aus dem Punkt hervor und jede Kreatur innerhalb eines 15 Fuß großen Würfels, der auf den Punkt zentriert ist, muss einen Rettungswurf für Geschicklichkeit machen. Bei einem misslungenen Rettungswurf erleidet die Kreatur 1W6 Kraftschaden. Dieser Schaden erhöht sich auf 2W6 auf der 11. Stufe und 3W6 auf der 17. Stufe. Bis Ihre Wut endet, können Sie diesen Effekt in jedem Ihrer Züge erneut als Bonusaktion verwenden. Feature/&PowerPathOfTheWildMagicSummonTitle=Wilder Anstieg: Geisterexplosion Feature/&PowerPathOfTheWildMagicTeleportDescription=Sie teleportieren sich bis zu 30 Fuß weit an einen für Sie sichtbaren freien Ort. @@ -54,7 +52,6 @@ Feature/&PowerPathOfTheWildMagicUnstableBacklashDescription=Nutzen Sie Ihre Reak Feature/&PowerPathOfTheWildMagicUnstableBacklashTitle=Instabiles Spiel Feature/&PowerPathOfTheWildMagicWildSurgeRerollDescription=Einmal pro Wut kannst du deine Bonusaktion nutzen, um auf der Wild Magic-Tabelle neu zu würfeln. Der neue Effekt ersetzt deinen aktuellen Wild Magic-Effekt. Feature/&PowerPathOfTheWildMagicWildSurgeRerollTitle=Wild Surge neu würfeln -Proxy/&ProxyPathOfTheWildMagicSummonTitle=Wild Surge: Beschworener Geist Reaction/&ReactionSpendPowerBundleControlledSurgeDescription=Wählen Sie einen Wild Surge-Effekt zum Aktivieren aus. Wenn keine Auswahl getroffen wird, wird standardmäßig der erste Effekt aktiviert. Reaction/&ReactionSpendPowerBundleControlledSurgeReactDescription=Aktiviere einen Wild Surge-Effekt. Reaction/&ReactionSpendPowerBundleControlledSurgeReactTitle=Aktivieren Sie diff --git a/SolastaUnfinishedBusiness/Translations/es/SubClasses/PathOfTheWildMagic-es.txt b/SolastaUnfinishedBusiness/Translations/es/SubClasses/PathOfTheWildMagic-es.txt index 2e78632c48..71b6f8193f 100644 --- a/SolastaUnfinishedBusiness/Translations/es/SubClasses/PathOfTheWildMagic-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/SubClasses/PathOfTheWildMagic-es.txt @@ -44,8 +44,6 @@ Feature/&PowerPathOfTheWildMagicBoltDescription=Un rayo de luz sale disparado de Feature/&PowerPathOfTheWildMagicBoltTitle=Oleada salvaje: Rayo Feature/&PowerPathOfTheWildMagicMagicAwarenessDescription=Como acción, puedes abrir tu conciencia a la presencia de magia concentrada. Durante el siguiente minuto, sabrás la ubicación de cualquier hechizo o elemento mágico que se encuentre a 60 pies de ti. Feature/&PowerPathOfTheWildMagicMagicAwarenessTitle=Conciencia mágica -Feature/&PowerPathOfTheWildMagicSummonBlastDescription=El espíritu explota, y cada criatura que se encuentre a 5 pies de él debe tener éxito en una tirada de salvación de Destreza o sufrir 1d6 de daño por fuerza. -Feature/&PowerPathOfTheWildMagicSummonBlastTitle=Oleada salvaje: Explosión espiritual Feature/&PowerPathOfTheWildMagicSummonDescription=Elige un punto que puedas ver a 30 pies de ti. Una explosión de energía espiritual brota del punto y cada criatura dentro de un cubo de 15 pies centrado en el punto debe realizar una tirada de salvación de Destreza. Si falla la tirada, la criatura sufre 1d6 puntos de daño por fuerza. Este daño aumenta a 2d6 en el nivel 11 y a 3d6 en el nivel 17. Hasta que tu furia termine, puedes volver a usar este efecto en cada uno de tus turnos como acción adicional. Feature/&PowerPathOfTheWildMagicSummonTitle=Oleada salvaje: explosión espiritual Feature/&PowerPathOfTheWildMagicTeleportDescription=Te teletransportas hasta 30 pies a un espacio desocupado que puedas ver. @@ -54,7 +52,6 @@ Feature/&PowerPathOfTheWildMagicUnstableBacklashDescription=Usa tu reacción par Feature/&PowerPathOfTheWildMagicUnstableBacklashTitle=Reacción inestable Feature/&PowerPathOfTheWildMagicWildSurgeRerollDescription=Una vez por furia, puedes usar tu acción adicional para volver a tirar en la tabla de Magia salvaje. El nuevo efecto reemplazará tu efecto de Magia salvaje actual. Feature/&PowerPathOfTheWildMagicWildSurgeRerollTitle=Repetición de oleada salvaje -Proxy/&ProxyPathOfTheWildMagicSummonTitle=Oleada salvaje: Espíritu invocado Reaction/&ReactionSpendPowerBundleControlledSurgeDescription=Selecciona un efecto de Oleada salvaje para activar. Si no realizas ninguna selección, se activará el primer efecto de forma predeterminada. Reaction/&ReactionSpendPowerBundleControlledSurgeReactDescription=Activa un efecto de Oleada salvaje. Reaction/&ReactionSpendPowerBundleControlledSurgeReactTitle=Activar diff --git a/SolastaUnfinishedBusiness/Translations/fr/SubClasses/PathOfTheWildMagic-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/SubClasses/PathOfTheWildMagic-fr.txt index a376b270ae..8b43845226 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/SubClasses/PathOfTheWildMagic-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/SubClasses/PathOfTheWildMagic-fr.txt @@ -44,8 +44,6 @@ Feature/&PowerPathOfTheWildMagicBoltDescription=Un éclair de lumière jaillit d Feature/&PowerPathOfTheWildMagicBoltTitle=Surtension sauvage : éclair Feature/&PowerPathOfTheWildMagicMagicAwarenessDescription=En tant qu'action, vous pouvez ouvrir votre conscience à la présence de magie concentrée. Au cours de la minute suivante, vous connaissez l'emplacement de tout sort ou objet magique situé à moins de 18 mètres de vous. Feature/&PowerPathOfTheWildMagicMagicAwarenessTitle=Conscience magique -Feature/&PowerPathOfTheWildMagicSummonBlastDescription=L'esprit explose et chaque créature à moins de 1,50 mètre de lui doit réussir un jet de sauvegarde de Dextérité ou subir 1d6 dégâts de force. -Feature/&PowerPathOfTheWildMagicSummonBlastTitle=Wild Surge : Explosion spirituelle Feature/&PowerPathOfTheWildMagicSummonDescription=Choisissez un point que vous pouvez voir à 9 mètres de vous. Une explosion d'énergie spirituelle jaillit du point et chaque créature dans un cube de 4,5 mètres centré sur le point doit effectuer un jet de sauvegarde de Dextérité. En cas d'échec, la créature subit 1d6 dégâts de force. Ces dégâts augmentent à 2d6 au niveau 11 et à 3d6 au niveau 17. Jusqu'à ce que votre rage prenne fin, vous pouvez utiliser cet effet à nouveau à chacun de vos tours en tant qu'action bonus. Feature/&PowerPathOfTheWildMagicSummonTitle=Wild Surge : Explosion spirituelle Feature/&PowerPathOfTheWildMagicTeleportDescription=Vous vous téléportez jusqu'à 30 pieds dans un espace inoccupé que vous pouvez voir. @@ -54,7 +52,6 @@ Feature/&PowerPathOfTheWildMagicUnstableBacklashDescription=Utilisez votre réac Feature/&PowerPathOfTheWildMagicUnstableBacklashTitle=Contrecoup instable Feature/&PowerPathOfTheWildMagicWildSurgeRerollDescription=Une fois par rage, vous pouvez utiliser votre action bonus pour relancer votre sort sur la table de Magie sauvage. Le nouvel effet remplacera votre effet de Magie sauvage actuel. Feature/&PowerPathOfTheWildMagicWildSurgeRerollTitle=Relancer Wild Surge -Proxy/&ProxyPathOfTheWildMagicSummonTitle=Wild Surge : Esprit invoqué Reaction/&ReactionSpendPowerBundleControlledSurgeDescription=Sélectionnez un effet Wild Surge à activer. Si aucune sélection n'est effectuée, le premier effet sera activé par défaut. Reaction/&ReactionSpendPowerBundleControlledSurgeReactDescription=Activez un effet Wild Surge. Reaction/&ReactionSpendPowerBundleControlledSurgeReactTitle=Activer diff --git a/SolastaUnfinishedBusiness/Translations/it/SubClasses/PathOfTheWildMagic-it.txt b/SolastaUnfinishedBusiness/Translations/it/SubClasses/PathOfTheWildMagic-it.txt index 1c3f777724..52799bd4d4 100644 --- a/SolastaUnfinishedBusiness/Translations/it/SubClasses/PathOfTheWildMagic-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/SubClasses/PathOfTheWildMagic-it.txt @@ -44,8 +44,6 @@ Feature/&PowerPathOfTheWildMagicBoltDescription=Un lampo di luce scocca dal tuo Feature/&PowerPathOfTheWildMagicBoltTitle=Ondata selvaggia: Fulmine Feature/&PowerPathOfTheWildMagicMagicAwarenessDescription=Come azione, puoi aprire la tua consapevolezza alla presenza di magia concentrata. Nel minuto successivo, conosci la posizione di qualsiasi incantesimo o oggetto magico entro 60 piedi da te. Feature/&PowerPathOfTheWildMagicMagicAwarenessTitle=Consapevolezza magica -Feature/&PowerPathOfTheWildMagicSummonBlastDescription=Lo spirito esplode e ogni creatura entro 1,5 metri da esso deve superare un tiro salvezza su Destrezza o subire 1d6 danni da forza. -Feature/&PowerPathOfTheWildMagicSummonBlastTitle=Wild Surge: Esplosione spirituale Feature/&PowerPathOfTheWildMagicSummonDescription=Scegli un punto che puoi vedere entro 30 piedi da te. Un'esplosione di energia spirituale erutta dal punto e ogni creatura entro un cubo di 15 piedi centrato sul punto deve effettuare un tiro salvezza su Destrezza. Se fallisce il tiro salvezza, la creatura subisce 1d6 danni da forza. Questi danni aumentano a 2d6 all'11° livello e a 3d6 al 17° livello. Finché la tua furia non finisce, puoi usare di nuovo questo effetto in ognuno dei tuoi turni come azione bonus. Feature/&PowerPathOfTheWildMagicSummonTitle=Wild Surge: Esplosione spirituale Feature/&PowerPathOfTheWildMagicTeleportDescription=Ti teletrasporti fino a 9 metri di distanza in uno spazio libero e visibile. @@ -54,7 +52,6 @@ Feature/&PowerPathOfTheWildMagicUnstableBacklashDescription=Usa la tua reazione Feature/&PowerPathOfTheWildMagicUnstableBacklashTitle=Gioco instabile Feature/&PowerPathOfTheWildMagicWildSurgeRerollDescription=Una volta per rabbia, puoi usare la tua azione bonus per ritirare sulla tabella Wild Magic. Il nuovo effetto sostituirà il tuo attuale effetto Wild Magic. Feature/&PowerPathOfTheWildMagicWildSurgeRerollTitle=Rilancia l'ondata selvaggia -Proxy/&ProxyPathOfTheWildMagicSummonTitle=Wild Surge: Spirito Evocato Reaction/&ReactionSpendPowerBundleControlledSurgeDescription=Seleziona un effetto Wild Surge da attivare. Se non viene effettuata alcuna selezione, il primo effetto verrà attivato per impostazione predefinita. Reaction/&ReactionSpendPowerBundleControlledSurgeReactDescription=Attiva un effetto Wild Surge. Reaction/&ReactionSpendPowerBundleControlledSurgeReactTitle=Attivare diff --git a/SolastaUnfinishedBusiness/Translations/ja/SubClasses/PathOfTheWildMagic-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/SubClasses/PathOfTheWildMagic-ja.txt index 82ca41f30a..31ff8f2024 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/SubClasses/PathOfTheWildMagic-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/SubClasses/PathOfTheWildMagic-ja.txt @@ -44,8 +44,6 @@ Feature/&PowerPathOfTheWildMagicBoltDescription=あなたの胸から光の矢 Feature/&PowerPathOfTheWildMagicBoltTitle=ワイルドサージ:ボルト Feature/&PowerPathOfTheWildMagicMagicAwarenessDescription=アクションとして、集中した魔法の存在に意識を開くことができます。次の 1 分間、60 フィート以内にあるすべての呪文や魔法のアイテムの位置がわかります。 Feature/&PowerPathOfTheWildMagicMagicAwarenessTitle=魔法の認識 -Feature/&PowerPathOfTheWildMagicSummonBlastDescription=精霊は爆発し、その周囲 5 フィート以内の各クリーチャーは敏捷セーヴィング スローに成功しなければ 1d6 の力場ダメージを受けます。 -Feature/&PowerPathOfTheWildMagicSummonBlastTitle=ワイルドサージ:スピリットブラスト Feature/&PowerPathOfTheWildMagicSummonDescription=30 フィート以内の見通せる地点を選択します。その地点から霊的エネルギーの爆発が噴出し、その地点を中心とした 15 フィートの立方体内の各クリーチャーは敏捷セーヴィング スローを行う必要があります。セーヴィングに失敗すると、クリーチャーは 1d6 の力場ダメージを受けます。このダメージは 11 レベルで 2d6、17 レベルで 3d6 に増加します。激怒が終了するまで、ボーナス アクションとして、各ターンにこの効果を再度使用できます。 Feature/&PowerPathOfTheWildMagicSummonTitle=ワイルドサージ:スピリットブラスト Feature/&PowerPathOfTheWildMagicTeleportDescription=視界内の空いているスペースまで最大 30 フィートテレポートします。 @@ -54,7 +52,6 @@ Feature/&PowerPathOfTheWildMagicUnstableBacklashDescription=反応を使用し Feature/&PowerPathOfTheWildMagicUnstableBacklashTitle=不安定な反発 Feature/&PowerPathOfTheWildMagicWildSurgeRerollDescription=激怒ごとに 1 回、ボーナス アクションを使用してワイルド マジック テーブルを再ロールできます。新しい効果は、現在のワイルド マジック効果に置き換わります。 Feature/&PowerPathOfTheWildMagicWildSurgeRerollTitle=ワイルドサージを再ロールする -Proxy/&ProxyPathOfTheWildMagicSummonTitle=ワイルドサージ:召喚されたスピリット Reaction/&ReactionSpendPowerBundleControlledSurgeDescription=有効にするワイルドサージ効果を選択します。選択しない場合は、デフォルトで最初の効果が有効になります。 Reaction/&ReactionSpendPowerBundleControlledSurgeReactDescription=ワイルドサージ効果を発動します。 Reaction/&ReactionSpendPowerBundleControlledSurgeReactTitle=活性化 diff --git a/SolastaUnfinishedBusiness/Translations/ko/SubClasses/PathOfTheWildMagic-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/SubClasses/PathOfTheWildMagic-ko.txt index 8214f42524..aa0339a7e1 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/SubClasses/PathOfTheWildMagic-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/SubClasses/PathOfTheWildMagic-ko.txt @@ -44,8 +44,6 @@ Feature/&PowerPathOfTheWildMagicBoltDescription=가슴에서 빛의 화살이 Feature/&PowerPathOfTheWildMagicBoltTitle=와일드 서지: 볼트 Feature/&PowerPathOfTheWildMagicMagicAwarenessDescription=행동으로, 당신은 집중된 마법의 존재에 대한 인식을 열 수 있습니다. 다음 1분 동안, 당신은 60피트 이내에 있는 모든 주문이나 마법 아이템의 위치를 알게 됩니다. Feature/&PowerPathOfTheWildMagicMagicAwarenessTitle=마법 인식 -Feature/&PowerPathOfTheWildMagicSummonBlastDescription=영혼은 폭발하고 5피트 내의 각 생물은 민첩 내성 굴림에 성공하거나 1d6의 강제 피해를 입어야 합니다. -Feature/&PowerPathOfTheWildMagicSummonBlastTitle=와일드 서지: 스피릿 블래스트 Feature/&PowerPathOfTheWildMagicSummonDescription=30피트 이내에서 볼 수 있는 지점을 선택하세요. 그 지점에서 영적 에너지가 폭발하고, 그 지점을 중심으로 15피트 큐브 내에 있는 각 생명체는 민첩성 세이빙 스로우를 해야 합니다. 세이브에 실패하면 생명체는 1d6의 포스 데미지를 입습니다. 이 데미지는 11레벨에서 2d6, 17레벨에서 3d6으로 증가합니다. 분노가 끝날 때까지 보너스 액션으로 각 턴에 이 효과를 다시 사용할 수 있습니다. Feature/&PowerPathOfTheWildMagicSummonTitle=와일드 서지: 스피릿 블라스트 Feature/&PowerPathOfTheWildMagicTeleportDescription=당신은 당신이 볼 수 있는 비어있는 공간으로 최대 30피트까지 순간이동합니다. @@ -54,7 +52,6 @@ Feature/&PowerPathOfTheWildMagicUnstableBacklashDescription=반응을 사용하 Feature/&PowerPathOfTheWildMagicUnstableBacklashTitle=불안정한 반발 Feature/&PowerPathOfTheWildMagicWildSurgeRerollDescription=분노당 한 번, 보너스 액션을 사용하여 Wild Magic 테이블에서 다시 굴릴 수 있습니다. 새로운 효과는 현재 Wild Magic 효과를 대체합니다. Feature/&PowerPathOfTheWildMagicWildSurgeRerollTitle=와일드 서지 재롤 -Proxy/&ProxyPathOfTheWildMagicSummonTitle=와일드 서지: 소환된 영혼 Reaction/&ReactionSpendPowerBundleControlledSurgeDescription=활성화할 Wild Surge 효과를 선택합니다. 선택하지 않으면 기본적으로 첫 번째 효과가 활성화됩니다. Reaction/&ReactionSpendPowerBundleControlledSurgeReactDescription=와일드 서지 효과를 활성화합니다. Reaction/&ReactionSpendPowerBundleControlledSurgeReactTitle=활성화 diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/SubClasses/PathOfTheWildMagic-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/SubClasses/PathOfTheWildMagic-pt-BR.txt index 73cca995d3..435bc27d0d 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/SubClasses/PathOfTheWildMagic-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/SubClasses/PathOfTheWildMagic-pt-BR.txt @@ -44,8 +44,6 @@ Feature/&PowerPathOfTheWildMagicBoltDescription=Um raio de luz dispara do seu pe Feature/&PowerPathOfTheWildMagicBoltTitle=Surto Selvagem: Bolt Feature/&PowerPathOfTheWildMagicMagicAwarenessDescription=Como uma ação, você pode abrir sua consciência para a presença de magia concentrada. No minuto seguinte, você sabe a localização de qualquer magia ou item mágico a até 60 pés de você. Feature/&PowerPathOfTheWildMagicMagicAwarenessTitle=Consciência Mágica -Feature/&PowerPathOfTheWildMagicSummonBlastDescription=O espírito explode, e cada criatura a até 1,5 m dele deve ser bem-sucedida em um teste de resistência de Destreza ou sofrerá 1d6 de dano de força. -Feature/&PowerPathOfTheWildMagicSummonBlastTitle=Surto Selvagem: Explosão Espiritual Feature/&PowerPathOfTheWildMagicSummonDescription=Escolha um ponto que você possa ver a até 30 pés de você. Uma explosão de energia espiritual irrompe do ponto e cada criatura dentro de um cubo de 15 pés centrado no ponto deve fazer um teste de resistência de Destreza. Em uma falha, a criatura sofre 1d6 de dano de força. Esse dano aumenta para 2d6 no 11º nível e 3d6 no 17º nível. Até que sua fúria termine, você pode usar esse efeito novamente em cada um dos seus turnos como uma ação bônus. Feature/&PowerPathOfTheWildMagicSummonTitle=Surto Selvagem: Explosão Espiritual Feature/&PowerPathOfTheWildMagicTeleportDescription=Você se teletransporta até 9 metros para um espaço desocupado que você pode ver. @@ -54,7 +52,6 @@ Feature/&PowerPathOfTheWildMagicUnstableBacklashDescription=Use sua reação par Feature/&PowerPathOfTheWildMagicUnstableBacklashTitle=Reação Instável Feature/&PowerPathOfTheWildMagicWildSurgeRerollDescription=Uma vez por fúria, você pode usar sua ação bônus para rolar novamente na tabela de Magia Selvagem. O novo efeito substituirá seu efeito atual de Magia Selvagem. Feature/&PowerPathOfTheWildMagicWildSurgeRerollTitle=Relançar Surto Selvagem -Proxy/&ProxyPathOfTheWildMagicSummonTitle=Wild Surge: Espírito Invocado Reaction/&ReactionSpendPowerBundleControlledSurgeDescription=Selecione um Wild Surge Effect para ativar. Se nenhuma seleção for feita, o primeiro efeito será ativado por padrão. Reaction/&ReactionSpendPowerBundleControlledSurgeReactDescription=Ative um efeito de Surto Selvagem. Reaction/&ReactionSpendPowerBundleControlledSurgeReactTitle=Ativar diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/SubClasses/PathOfTheWildMagic-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/SubClasses/PathOfTheWildMagic-zh-CN.txt index 3995022752..d7ff7014b6 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/SubClasses/PathOfTheWildMagic-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/SubClasses/PathOfTheWildMagic-zh-CN.txt @@ -44,8 +44,6 @@ Feature/&PowerPathOfTheWildMagicBoltDescription=一道光束从你的胸口射 Feature/&PowerPathOfTheWildMagicBoltTitle=狂野浪潮:闪电 Feature/&PowerPathOfTheWildMagicMagicAwarenessDescription=作为一种行动,你可以敞开心扉,感受集中魔法的存在。在接下来的一分钟内,你就能知道 60 英尺范围内任何法术或魔法物品的位置。 Feature/&PowerPathOfTheWildMagicMagicAwarenessTitle=魔法感知 -Feature/&PowerPathOfTheWildMagicSummonBlastDescription=灵魂爆炸,其 5 英尺范围内的每个生物必须成功进行敏捷豁免检定,否则将受到 1d6 力量伤害。 -Feature/&PowerPathOfTheWildMagicSummonBlastTitle=狂野浪潮:灵魂冲击 Feature/&PowerPathOfTheWildMagicSummonDescription=选择您周围 30 英尺内可见的一个点。一股精神能量从该点喷涌而出,以该点为中心 15 英尺立方体内的每个生物都必须进行敏捷豁免检定。如果豁免失败,该生物将受到 1d6 力场伤害。此伤害在 11 级时增加到 2d6,在 17 级时增加到 3d6。在您的愤怒结束之前,您可以在每个回合中以奖励动作再次使用此效果。 Feature/&PowerPathOfTheWildMagicSummonTitle=狂野浪潮:灵魂冲击 Feature/&PowerPathOfTheWildMagicTeleportDescription=你可以传送至最远 30 英尺处你可以看见的空闲空间。 @@ -54,7 +52,6 @@ Feature/&PowerPathOfTheWildMagicUnstableBacklashDescription=使用你的反应 Feature/&PowerPathOfTheWildMagicUnstableBacklashTitle=掌控浪潮 Feature/&PowerPathOfTheWildMagicWildSurgeRerollDescription=每怒一次,您可以使用奖励行动在狂野魔法表上重新掷骰。新效果将取代您当前的狂野魔法效果。 Feature/&PowerPathOfTheWildMagicWildSurgeRerollTitle=重掷狂野浪潮 -Proxy/&ProxyPathOfTheWildMagicSummonTitle=狂野浪潮:召唤灵魂 Reaction/&ReactionSpendPowerBundleControlledSurgeDescription=选择要激活的狂野涌动效果。如果未进行选择,则默认激活第一个效果。 Reaction/&ReactionSpendPowerBundleControlledSurgeReactDescription=激活狂野涌动效果。 Reaction/&ReactionSpendPowerBundleControlledSurgeReactTitle=启用 From 2bccab5a6bb10941995be417066bfe80d48e8e7f Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Fri, 6 Sep 2024 20:52:09 -0700 Subject: [PATCH 058/212] update diagnostics --- .../UnfinishedBusinessBlueprints/Assets.txt | 2 + .../ConditionCommandSpellHalt.json | 8 +- .../ActionAffinityCommandSpellHalt.json | 48 + .../PowerDomainColdSummonBlizzard.json | 2 +- .../PowerDomainFireSummonInferno.json | 2 +- ...tionWeaponSummonAdvancedSteelDefender.json | 2 +- ...erInnovationWeaponSummonSteelDefender.json | 2 +- ...vationArtilleristSummonFlamethrower15.json | 2 +- ...ovationArtilleristSummonFlamethrower3.json | 2 +- ...ovationArtilleristSummonFlamethrower9.json | 2 +- ...ationArtilleristSummonForceBallista15.json | 2 +- ...vationArtilleristSummonForceBallista3.json | 2 +- ...vationArtilleristSummonForceBallista9.json | 2 +- ...nnovationArtilleristSummonProtector15.json | 2 +- ...InnovationArtilleristSummonProtector3.json | 2 +- ...InnovationArtilleristSummonProtector9.json | 2 +- ...erRangerHellWalkerFiendishSpawnHezrou.json | 2 +- ...RangerHellWalkerFiendishSpawnMarilith.json | 2 +- ...SummonBeastCompanionKindredSpiritBear.json | 2 +- ...ummonBeastCompanionKindredSpiritEagle.json | 2 +- ...SummonBeastCompanionKindredSpiritWolf.json | 2 +- ...edPoolCircleOfTheWildfireSummonSpirit.json | 2 +- .../SpellDefinition/CreateDeadRisenGhost.json | 2 +- .../SpellDefinition/CreateDeadRisenGhoul.json | 2 +- .../CreateDeadRisenSkeleton.json | 2 +- .../CreateDeadRisenSkeleton_Archer.json | 2 +- .../CreateDeadRisenSkeleton_Enforcer.json | 2 +- .../CreateDeadRisenSkeleton_Knight.json | 2 +- .../CreateDeadRisenSkeleton_Marksman.json | 2 +- .../SpellDefinition/CreateDeadRisenWight.json | 2 +- .../CreateDeadRisenWightLord.json | 2 +- .../SpellDefinition/FindFamiliar.json | 2 +- Documentation/Spells.md | 1289 ++++++++++++----- 33 files changed, 1049 insertions(+), 356 deletions(-) create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionActionAffinity/ActionAffinityCommandSpellHalt.json diff --git a/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt b/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt index d18ebc7345..f6d8f30faf 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt +++ b/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt @@ -1594,6 +1594,7 @@ ActionAffinityBrutalStrikeToggle FeatureDefinitionActionAffinity FeatureDefiniti ActionAffinityCaveWyrmkinBonusShove FeatureDefinitionActionAffinity FeatureDefinition feed7d9e-34bd-51b7-99a4-7a152bfab68f ActionAffinityCircleOfTheWildfireSpirit FeatureDefinitionActionAffinity FeatureDefinition f129168e-25fa-5478-bde2-57246aca7066 ActionAffinityCollegeOfValianceHeroicInspiration FeatureDefinitionActionAffinity FeatureDefinition 951aafe4-9c11-50cf-a43d-8c23ace8983f +ActionAffinityCommandSpellHalt FeatureDefinitionActionAffinity FeatureDefinition aefc4f30-7712-50b2-8a52-9368185278ab ActionAffinityConditionBlind FeatureDefinitionActionAffinity FeatureDefinition ba8f244f-070a-5288-a482-e145ab83adef ActionAffinityCoordinatedAssaultToggle FeatureDefinitionActionAffinity FeatureDefinition 2052bab8-0723-5f23-ba11-b5340f444906 ActionAffinityCrystalWyrmkinConditionCrystalDefense FeatureDefinitionActionAffinity FeatureDefinition 1274559b-34e5-5c07-acbe-9d51d149959e @@ -4248,6 +4249,7 @@ ActionAffinityBrutalStrikeToggle FeatureDefinitionActionAffinity FeatureDefiniti ActionAffinityCaveWyrmkinBonusShove FeatureDefinitionActionAffinity FeatureDefinitionActionAffinity feed7d9e-34bd-51b7-99a4-7a152bfab68f ActionAffinityCircleOfTheWildfireSpirit FeatureDefinitionActionAffinity FeatureDefinitionActionAffinity f129168e-25fa-5478-bde2-57246aca7066 ActionAffinityCollegeOfValianceHeroicInspiration FeatureDefinitionActionAffinity FeatureDefinitionActionAffinity 951aafe4-9c11-50cf-a43d-8c23ace8983f +ActionAffinityCommandSpellHalt FeatureDefinitionActionAffinity FeatureDefinitionActionAffinity aefc4f30-7712-50b2-8a52-9368185278ab ActionAffinityConditionBlind FeatureDefinitionActionAffinity FeatureDefinitionActionAffinity ba8f244f-070a-5288-a482-e145ab83adef ActionAffinityCoordinatedAssaultToggle FeatureDefinitionActionAffinity FeatureDefinitionActionAffinity 2052bab8-0723-5f23-ba11-b5340f444906 ActionAffinityCrystalWyrmkinConditionCrystalDefense FeatureDefinitionActionAffinity FeatureDefinitionActionAffinity 1274559b-34e5-5c07-acbe-9d51d149959e diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellHalt.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellHalt.json index f6c1c839cb..90489c60c1 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellHalt.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellHalt.json @@ -3,7 +3,9 @@ "inDungeonEditor": false, "parentCondition": null, "conditionType": "Detrimental", - "features": [], + "features": [ + "Definition:ActionAffinityCommandSpellHalt:aefc4f30-7712-50b2-8a52-9368185278ab" + ], "allowMultipleInstances": false, "silentWhenAdded": false, "silentWhenRemoved": false, @@ -96,10 +98,10 @@ "subsequentVariableForDC": "FrenzyExhaustionDC", "subsequentDCIncrease": 5, "effectFormsOnRemoved": [], - "forceBehavior": true, + "forceBehavior": false, "addBehavior": false, "fearSource": false, - "battlePackage": "Definition:Idle:47dfd6fd3d22b214cb8c446f2438f3c6", + "battlePackage": null, "explorationPackage": null, "removedFromTheGame": false, "permanentlyRemovedIfExtraPlanar": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionActionAffinity/ActionAffinityCommandSpellHalt.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionActionAffinity/ActionAffinityCommandSpellHalt.json new file mode 100644 index 0000000000..e6e299ada7 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionActionAffinity/ActionAffinityCommandSpellHalt.json @@ -0,0 +1,48 @@ +{ + "$type": "FeatureDefinitionActionAffinity, Assembly-CSharp", + "allowedActionTypes": [ + false, + false, + false, + false, + false, + false + ], + "eitherMainOrBonus": false, + "maxAttacksNumber": -1, + "forbiddenActions": [], + "authorizedActions": [], + "restrictedActions": [], + "actionExecutionModifiers": [], + "specialBehaviour": "None", + "randomBehaviorDie": "D10", + "randomBehaviourOptions": [], + "rechargeReactionsAtEveryTurn": false, + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": true, + "title": "Feature/&NoContentTitle", + "description": "Feature/&NoContentTitle", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "aefc4f30-7712-50b2-8a52-9368185278ab", + "contentPack": 9999, + "name": "ActionAffinityCommandSpellHalt" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerDomainColdSummonBlizzard.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerDomainColdSummonBlizzard.json index fe51212359..ff4ff0be6a 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerDomainColdSummonBlizzard.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerDomainColdSummonBlizzard.json @@ -85,7 +85,7 @@ "number": 2, "conditionDefinition": "Definition:ConditionMindControlledByCaster:72691050707821744968bd0595150b86", "persistOnConcentrationLoss": false, - "decisionPackage": "Definition:Idle:47dfd6fd3d22b214cb8c446f2438f3c6", + "decisionPackage": null, "effectProxyDefinitionName": null }, "hasFilterId": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerDomainFireSummonInferno.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerDomainFireSummonInferno.json index afafd6e0d2..867271cdec 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerDomainFireSummonInferno.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerDomainFireSummonInferno.json @@ -85,7 +85,7 @@ "number": 2, "conditionDefinition": "Definition:ConditionMindControlledByCaster:72691050707821744968bd0595150b86", "persistOnConcentrationLoss": false, - "decisionPackage": "Definition:Idle:47dfd6fd3d22b214cb8c446f2438f3c6", + "decisionPackage": null, "effectProxyDefinitionName": null }, "hasFilterId": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerInnovationWeaponSummonAdvancedSteelDefender.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerInnovationWeaponSummonAdvancedSteelDefender.json index d883bc1098..6163132ef0 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerInnovationWeaponSummonAdvancedSteelDefender.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerInnovationWeaponSummonAdvancedSteelDefender.json @@ -85,7 +85,7 @@ "number": 1, "conditionDefinition": "Definition:ConditionMindControlledByCaster:72691050707821744968bd0595150b86", "persistOnConcentrationLoss": false, - "decisionPackage": "Definition:Idle:47dfd6fd3d22b214cb8c446f2438f3c6", + "decisionPackage": null, "effectProxyDefinitionName": null }, "hasFilterId": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerInnovationWeaponSummonSteelDefender.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerInnovationWeaponSummonSteelDefender.json index a592683d6f..40ec92e3fb 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerInnovationWeaponSummonSteelDefender.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerInnovationWeaponSummonSteelDefender.json @@ -85,7 +85,7 @@ "number": 1, "conditionDefinition": "Definition:ConditionMindControlledByCaster:72691050707821744968bd0595150b86", "persistOnConcentrationLoss": false, - "decisionPackage": "Definition:Idle:47dfd6fd3d22b214cb8c446f2438f3c6", + "decisionPackage": null, "effectProxyDefinitionName": null }, "hasFilterId": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerInnovationArtilleristSummonFlamethrower15.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerInnovationArtilleristSummonFlamethrower15.json index d5fd432a14..a69cd4558e 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerInnovationArtilleristSummonFlamethrower15.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerInnovationArtilleristSummonFlamethrower15.json @@ -85,7 +85,7 @@ "number": 1, "conditionDefinition": "Definition:ConditionMindControlledByCaster:72691050707821744968bd0595150b86", "persistOnConcentrationLoss": false, - "decisionPackage": "Definition:Idle:47dfd6fd3d22b214cb8c446f2438f3c6", + "decisionPackage": null, "effectProxyDefinitionName": null }, "hasFilterId": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerInnovationArtilleristSummonFlamethrower3.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerInnovationArtilleristSummonFlamethrower3.json index cfc393daff..541aa625c2 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerInnovationArtilleristSummonFlamethrower3.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerInnovationArtilleristSummonFlamethrower3.json @@ -85,7 +85,7 @@ "number": 1, "conditionDefinition": "Definition:ConditionMindControlledByCaster:72691050707821744968bd0595150b86", "persistOnConcentrationLoss": false, - "decisionPackage": "Definition:Idle:47dfd6fd3d22b214cb8c446f2438f3c6", + "decisionPackage": null, "effectProxyDefinitionName": null }, "hasFilterId": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerInnovationArtilleristSummonFlamethrower9.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerInnovationArtilleristSummonFlamethrower9.json index 55901566f1..7ec84505c1 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerInnovationArtilleristSummonFlamethrower9.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerInnovationArtilleristSummonFlamethrower9.json @@ -85,7 +85,7 @@ "number": 1, "conditionDefinition": "Definition:ConditionMindControlledByCaster:72691050707821744968bd0595150b86", "persistOnConcentrationLoss": false, - "decisionPackage": "Definition:Idle:47dfd6fd3d22b214cb8c446f2438f3c6", + "decisionPackage": null, "effectProxyDefinitionName": null }, "hasFilterId": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerInnovationArtilleristSummonForceBallista15.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerInnovationArtilleristSummonForceBallista15.json index ff6cce5bca..f35235fba3 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerInnovationArtilleristSummonForceBallista15.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerInnovationArtilleristSummonForceBallista15.json @@ -85,7 +85,7 @@ "number": 1, "conditionDefinition": "Definition:ConditionMindControlledByCaster:72691050707821744968bd0595150b86", "persistOnConcentrationLoss": false, - "decisionPackage": "Definition:Idle:47dfd6fd3d22b214cb8c446f2438f3c6", + "decisionPackage": null, "effectProxyDefinitionName": null }, "hasFilterId": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerInnovationArtilleristSummonForceBallista3.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerInnovationArtilleristSummonForceBallista3.json index ba15da179e..d259c9ba77 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerInnovationArtilleristSummonForceBallista3.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerInnovationArtilleristSummonForceBallista3.json @@ -85,7 +85,7 @@ "number": 1, "conditionDefinition": "Definition:ConditionMindControlledByCaster:72691050707821744968bd0595150b86", "persistOnConcentrationLoss": false, - "decisionPackage": "Definition:Idle:47dfd6fd3d22b214cb8c446f2438f3c6", + "decisionPackage": null, "effectProxyDefinitionName": null }, "hasFilterId": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerInnovationArtilleristSummonForceBallista9.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerInnovationArtilleristSummonForceBallista9.json index cc2d899412..bc5a178ed4 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerInnovationArtilleristSummonForceBallista9.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerInnovationArtilleristSummonForceBallista9.json @@ -85,7 +85,7 @@ "number": 1, "conditionDefinition": "Definition:ConditionMindControlledByCaster:72691050707821744968bd0595150b86", "persistOnConcentrationLoss": false, - "decisionPackage": "Definition:Idle:47dfd6fd3d22b214cb8c446f2438f3c6", + "decisionPackage": null, "effectProxyDefinitionName": null }, "hasFilterId": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerInnovationArtilleristSummonProtector15.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerInnovationArtilleristSummonProtector15.json index 8b523d149a..674444b1d6 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerInnovationArtilleristSummonProtector15.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerInnovationArtilleristSummonProtector15.json @@ -85,7 +85,7 @@ "number": 1, "conditionDefinition": "Definition:ConditionMindControlledByCaster:72691050707821744968bd0595150b86", "persistOnConcentrationLoss": false, - "decisionPackage": "Definition:Idle:47dfd6fd3d22b214cb8c446f2438f3c6", + "decisionPackage": null, "effectProxyDefinitionName": null }, "hasFilterId": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerInnovationArtilleristSummonProtector3.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerInnovationArtilleristSummonProtector3.json index 0d0227f46b..7765cb1e6f 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerInnovationArtilleristSummonProtector3.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerInnovationArtilleristSummonProtector3.json @@ -85,7 +85,7 @@ "number": 1, "conditionDefinition": "Definition:ConditionMindControlledByCaster:72691050707821744968bd0595150b86", "persistOnConcentrationLoss": false, - "decisionPackage": "Definition:Idle:47dfd6fd3d22b214cb8c446f2438f3c6", + "decisionPackage": null, "effectProxyDefinitionName": null }, "hasFilterId": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerInnovationArtilleristSummonProtector9.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerInnovationArtilleristSummonProtector9.json index 900fb94fc0..a09c6e385a 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerInnovationArtilleristSummonProtector9.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerInnovationArtilleristSummonProtector9.json @@ -85,7 +85,7 @@ "number": 1, "conditionDefinition": "Definition:ConditionMindControlledByCaster:72691050707821744968bd0595150b86", "persistOnConcentrationLoss": false, - "decisionPackage": "Definition:Idle:47dfd6fd3d22b214cb8c446f2438f3c6", + "decisionPackage": null, "effectProxyDefinitionName": null }, "hasFilterId": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerRangerHellWalkerFiendishSpawnHezrou.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerRangerHellWalkerFiendishSpawnHezrou.json index bbfe1d1d80..b91bee75a3 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerRangerHellWalkerFiendishSpawnHezrou.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerRangerHellWalkerFiendishSpawnHezrou.json @@ -85,7 +85,7 @@ "number": 1, "conditionDefinition": "Definition:ConditionMindControlledByCaster:72691050707821744968bd0595150b86", "persistOnConcentrationLoss": false, - "decisionPackage": "Definition:Idle:47dfd6fd3d22b214cb8c446f2438f3c6", + "decisionPackage": null, "effectProxyDefinitionName": null }, "hasFilterId": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerRangerHellWalkerFiendishSpawnMarilith.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerRangerHellWalkerFiendishSpawnMarilith.json index e57905b559..391044b672 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerRangerHellWalkerFiendishSpawnMarilith.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerRangerHellWalkerFiendishSpawnMarilith.json @@ -85,7 +85,7 @@ "number": 1, "conditionDefinition": "Definition:ConditionMindControlledByCaster:72691050707821744968bd0595150b86", "persistOnConcentrationLoss": false, - "decisionPackage": "Definition:Idle:47dfd6fd3d22b214cb8c446f2438f3c6", + "decisionPackage": null, "effectProxyDefinitionName": null }, "hasFilterId": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerRangerWildMasterSummonBeastCompanionKindredSpiritBear.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerRangerWildMasterSummonBeastCompanionKindredSpiritBear.json index 1509d50faf..6912b84b10 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerRangerWildMasterSummonBeastCompanionKindredSpiritBear.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerRangerWildMasterSummonBeastCompanionKindredSpiritBear.json @@ -85,7 +85,7 @@ "number": 1, "conditionDefinition": "Definition:ConditionMindControlledByCaster:72691050707821744968bd0595150b86", "persistOnConcentrationLoss": false, - "decisionPackage": "Definition:Idle:47dfd6fd3d22b214cb8c446f2438f3c6", + "decisionPackage": null, "effectProxyDefinitionName": null }, "hasFilterId": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerRangerWildMasterSummonBeastCompanionKindredSpiritEagle.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerRangerWildMasterSummonBeastCompanionKindredSpiritEagle.json index 43782a6b14..000830be3f 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerRangerWildMasterSummonBeastCompanionKindredSpiritEagle.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerRangerWildMasterSummonBeastCompanionKindredSpiritEagle.json @@ -85,7 +85,7 @@ "number": 1, "conditionDefinition": "Definition:ConditionMindControlledByCaster:72691050707821744968bd0595150b86", "persistOnConcentrationLoss": false, - "decisionPackage": "Definition:Idle:47dfd6fd3d22b214cb8c446f2438f3c6", + "decisionPackage": null, "effectProxyDefinitionName": null }, "hasFilterId": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerRangerWildMasterSummonBeastCompanionKindredSpiritWolf.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerRangerWildMasterSummonBeastCompanionKindredSpiritWolf.json index 25f11dbcbf..03e5b694d4 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerRangerWildMasterSummonBeastCompanionKindredSpiritWolf.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerRangerWildMasterSummonBeastCompanionKindredSpiritWolf.json @@ -85,7 +85,7 @@ "number": 1, "conditionDefinition": "Definition:ConditionMindControlledByCaster:72691050707821744968bd0595150b86", "persistOnConcentrationLoss": false, - "decisionPackage": "Definition:Idle:47dfd6fd3d22b214cb8c446f2438f3c6", + "decisionPackage": null, "effectProxyDefinitionName": null }, "hasFilterId": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerSharedPoolCircleOfTheWildfireSummonSpirit.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerSharedPoolCircleOfTheWildfireSummonSpirit.json index d6774cdd8a..1de98b872c 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerSharedPoolCircleOfTheWildfireSummonSpirit.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerSharedPoolCircleOfTheWildfireSummonSpirit.json @@ -85,7 +85,7 @@ "number": 1, "conditionDefinition": "Definition:ConditionMindControlledByCaster:72691050707821744968bd0595150b86", "persistOnConcentrationLoss": false, - "decisionPackage": "Definition:Idle:47dfd6fd3d22b214cb8c446f2438f3c6", + "decisionPackage": null, "effectProxyDefinitionName": null }, "hasFilterId": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateDeadRisenGhost.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateDeadRisenGhost.json index 881752c39b..b8dc76c389 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateDeadRisenGhost.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateDeadRisenGhost.json @@ -97,7 +97,7 @@ "number": 1, "conditionDefinition": "Definition:ConditionMindControlledByCaster:72691050707821744968bd0595150b86", "persistOnConcentrationLoss": false, - "decisionPackage": "Definition:Idle:47dfd6fd3d22b214cb8c446f2438f3c6", + "decisionPackage": null, "effectProxyDefinitionName": null }, "hasFilterId": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateDeadRisenGhoul.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateDeadRisenGhoul.json index 6e12c99c5a..1bbf85c49d 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateDeadRisenGhoul.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateDeadRisenGhoul.json @@ -97,7 +97,7 @@ "number": 1, "conditionDefinition": "Definition:ConditionMindControlledByCaster:72691050707821744968bd0595150b86", "persistOnConcentrationLoss": false, - "decisionPackage": "Definition:Idle:47dfd6fd3d22b214cb8c446f2438f3c6", + "decisionPackage": null, "effectProxyDefinitionName": null }, "hasFilterId": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateDeadRisenSkeleton.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateDeadRisenSkeleton.json index a43e347a8a..b6d5a6f925 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateDeadRisenSkeleton.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateDeadRisenSkeleton.json @@ -97,7 +97,7 @@ "number": 1, "conditionDefinition": "Definition:ConditionMindControlledByCaster:72691050707821744968bd0595150b86", "persistOnConcentrationLoss": false, - "decisionPackage": "Definition:Idle:47dfd6fd3d22b214cb8c446f2438f3c6", + "decisionPackage": null, "effectProxyDefinitionName": null }, "hasFilterId": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateDeadRisenSkeleton_Archer.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateDeadRisenSkeleton_Archer.json index 1247b493ce..7ac84a8c7b 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateDeadRisenSkeleton_Archer.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateDeadRisenSkeleton_Archer.json @@ -97,7 +97,7 @@ "number": 1, "conditionDefinition": "Definition:ConditionMindControlledByCaster:72691050707821744968bd0595150b86", "persistOnConcentrationLoss": false, - "decisionPackage": "Definition:Idle:47dfd6fd3d22b214cb8c446f2438f3c6", + "decisionPackage": null, "effectProxyDefinitionName": null }, "hasFilterId": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateDeadRisenSkeleton_Enforcer.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateDeadRisenSkeleton_Enforcer.json index 4f5e3976d0..19954ee760 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateDeadRisenSkeleton_Enforcer.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateDeadRisenSkeleton_Enforcer.json @@ -97,7 +97,7 @@ "number": 1, "conditionDefinition": "Definition:ConditionMindControlledByCaster:72691050707821744968bd0595150b86", "persistOnConcentrationLoss": false, - "decisionPackage": "Definition:Idle:47dfd6fd3d22b214cb8c446f2438f3c6", + "decisionPackage": null, "effectProxyDefinitionName": null }, "hasFilterId": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateDeadRisenSkeleton_Knight.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateDeadRisenSkeleton_Knight.json index 7ac052e603..14318d694e 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateDeadRisenSkeleton_Knight.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateDeadRisenSkeleton_Knight.json @@ -97,7 +97,7 @@ "number": 1, "conditionDefinition": "Definition:ConditionMindControlledByCaster:72691050707821744968bd0595150b86", "persistOnConcentrationLoss": false, - "decisionPackage": "Definition:Idle:47dfd6fd3d22b214cb8c446f2438f3c6", + "decisionPackage": null, "effectProxyDefinitionName": null }, "hasFilterId": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateDeadRisenSkeleton_Marksman.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateDeadRisenSkeleton_Marksman.json index 3d69b9b353..0b59d9e65a 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateDeadRisenSkeleton_Marksman.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateDeadRisenSkeleton_Marksman.json @@ -97,7 +97,7 @@ "number": 1, "conditionDefinition": "Definition:ConditionMindControlledByCaster:72691050707821744968bd0595150b86", "persistOnConcentrationLoss": false, - "decisionPackage": "Definition:Idle:47dfd6fd3d22b214cb8c446f2438f3c6", + "decisionPackage": null, "effectProxyDefinitionName": null }, "hasFilterId": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateDeadRisenWight.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateDeadRisenWight.json index 23530d06cf..5290a5a461 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateDeadRisenWight.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateDeadRisenWight.json @@ -97,7 +97,7 @@ "number": 1, "conditionDefinition": "Definition:ConditionMindControlledByCaster:72691050707821744968bd0595150b86", "persistOnConcentrationLoss": false, - "decisionPackage": "Definition:Idle:47dfd6fd3d22b214cb8c446f2438f3c6", + "decisionPackage": null, "effectProxyDefinitionName": null }, "hasFilterId": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateDeadRisenWightLord.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateDeadRisenWightLord.json index 7fc0511bf9..79c59d1fc1 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateDeadRisenWightLord.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateDeadRisenWightLord.json @@ -97,7 +97,7 @@ "number": 1, "conditionDefinition": "Definition:ConditionMindControlledByCaster:72691050707821744968bd0595150b86", "persistOnConcentrationLoss": false, - "decisionPackage": "Definition:Idle:47dfd6fd3d22b214cb8c446f2438f3c6", + "decisionPackage": null, "effectProxyDefinitionName": null }, "hasFilterId": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/FindFamiliar.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/FindFamiliar.json index 5ea060d309..38e24c8b22 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/FindFamiliar.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/FindFamiliar.json @@ -97,7 +97,7 @@ "number": 1, "conditionDefinition": "Definition:ConditionMindControlledByCaster:72691050707821744968bd0595150b86", "persistOnConcentrationLoss": false, - "decisionPackage": "Definition:Idle:47dfd6fd3d22b214cb8c446f2438f3c6", + "decisionPackage": null, "effectProxyDefinitionName": null }, "hasFilterId": false, diff --git a/Documentation/Spells.md b/Documentation/Spells.md index e991b7ae6c..91c474c831 100644 --- a/Documentation/Spells.md +++ b/Documentation/Spells.md @@ -1,216 +1,323 @@ -# 1. - Acid Claws (S) level 0 Transmutation ] [UB] +# 1. - Acid Claws (S) level 0 Transmutation [UB] + +**[Druid]** Your fingernails sharpen, ready to deliver a corrosive attack. Make a melee spell attack against one creature within 5 ft of you. On a hit, the target takes 1d8 acid damage and has AC lowered by 1 for 1 round (not stacking). -# 2. - Acid Splash (V,S) level 0 Conjuration [Artificer,Sorcerer,Wizard] [SOL] +# 2. - Acid Splash (V,S) level 0 Conjuration [SOL] + +**[Artificer,Sorcerer,Wizard]** Launch an acid bolt. -# 3. - Annoying Bee (V,S) level 0 Illusion [Druid,Sorcerer,Wizard] [SOL] +# 3. - Annoying Bee (V,S) level 0 Illusion [SOL] + +**[Druid,Sorcerer,Wizard]** The target sees an illusional bee harassing them and has disadvantage on concentration checks until the start of their next turn. -# 4. - *Blade Ward* © (V,S) level 0 Abjuration ] [UB] +# 4. - *Blade Ward* © (V,S) level 0 Abjuration [UB] + +**[Bard,Sorcerer,Warlock,Wizard]** You extend your hand and trace a sigil of warding in the air. Until the end of your next turn, you have resistance against bludgeoning, piercing, and slashing damage dealt by weapon attacks. -# 5. - *Booming Blade* © (M,S) level 0 Evocation ] [UB] +# 5. - *Booming Blade* © (M,S) level 0 Evocation [UB] + +**[Artificer,Sorcerer,Warlock,Wizard]** You brandish the weapon used in the spell's casting and make a melee attack with it against one creature within 5 ft distance. On a hit, the target suffers the weapon attack's normal effects and then becomes sheathed in booming energy until the start of your next turn. If the target willingly moves 5 ft or more before then, the target takes 1d8 thunder damage, and the spell ends. At 5th level, the melee attack deals an extra 1d8 thunder damage to the target on a hit, and the damage the target takes for moving increases to 2d8. Both damage rolls increase by 1d8 at 11th and 17th levels. -# 6. - Chill Touch (V,S) level 0 Necromancy [Sorcerer,Warlock,Wizard] [SOL] +# 6. - Chill Touch (V,S) level 0 Necromancy [SOL] + +**[Sorcerer,Warlock,Wizard]** Deal damage to one enemy and prevent healing for a limited time. -# 7. - Dancing Lights (V,S) level 0 Evocation [Concentration] [Bard,Sorcerer,Wizard] [SOL] +# 7. - Dancing Lights (V,S) level 0 Evocation [Concentration] [SOL] + +**[Bard,Sorcerer,Wizard]** Create dancing lights that move at your command. -# 8. - Dazzle (S) level 0 Illusion [Bard,Sorcerer,Warlock,Wizard] [SOL] +# 8. - Dazzle (S) level 0 Illusion [SOL] + +**[Bard,Sorcerer,Warlock,Wizard]** Lower a target's AC and prevent reaction until the start of its next turn. -# 9. - Eldritch Blast (V,S) level 0 Evocation [Warlock] [SOL] +# 9. - Eldritch Blast (V,S) level 0 Evocation [SOL] + +**[Warlock]** Unleash a beam of crackling energy with a ranged spell attack against the target. On a hit, it takes 1d10 force damage. -# 10. - Fire Bolt (V,S) level 0 Evocation [Artificer,Sorcerer,Wizard] [SOL] +# 10. - Fire Bolt (V,S) level 0 Evocation [SOL] + +**[Artificer,Sorcerer,Wizard]** Launch a fire bolt. -# 11. - *Green-Flame Blade* © (M,S) level 0 Evocation ] [UB] +# 11. - *Green-Flame Blade* © (M,S) level 0 Evocation [UB] + +**[Artificer,Sorcerer,Warlock,Wizard]** You brandish the weapon used in the spell's casting and make a melee attack with it against one creature within 5 ft distance. On a hit, the target suffers the weapon attack's normal effects, and you can cause green fire to leap from the target to a different creature of your choice that you can see within 5 ft of it. The second creature takes fire damage equal to your spellcasting ability modifier. At 5th level, the melee attack deals an extra 1d8 fire damage to the target on a hit, and the fire damage to the second creature increases to 1d8 + your spellcasting ability modifier. Both damage rolls increase by 1d8 at 11th and 17th levels. -# 12. - Guidance (V,S) level 0 Divination [Concentration] [Artificer,Cleric,Druid] [SOL] +# 12. - Guidance (V,S) level 0 Divination [Concentration] [SOL] + +**[Artificer,Cleric,Druid]** Increase an ally's ability checks for a limited time. -# 13. - *Gust* © (V,S) level 0 Transmutation ] [UB] +# 13. - *Gust* © (V,S) level 0 Transmutation [UB] + +**[Druid,Sorcerer,Wizard]** Fire a blast of focused air at your target. -# 14. - Illuminating Sphere (V,S) level 0 Enchantment ] [UB] +# 14. - Illuminating Sphere (V,S) level 0 Enchantment [UB] + +**[Bard,Sorcerer,Wizard]** Causes light sources such as torches and mana lamps in the area of effect to light up. -# 15. - *Infestation* © (V,S) level 0 Conjuration ] [UB] +# 15. - *Infestation* © (V,S) level 0 Conjuration [UB] + +**[Druid,Sorcerer,Warlock,Wizard]** You cause a cloud of mites, fleas, and other parasites to appear momentarily on one creature you can see within range. The target must succeed on a Constitution saving throw, or it takes 1d6 poison damage and moves 5 ft in a random direction. The spell's damage increases by an additional die at 5th, 11th and 17th level. -# 16. - Light (V) level 0 Evocation [Bard,Cleric,Sorcerer,Wizard] [SOL] +# 16. - Light (V) level 0 Evocation [SOL] + +**[Bard,Cleric,Sorcerer,Wizard]** An object you can touch emits a powerful light for a limited time. -# 17. - Light (V) level 0 Evocation ] [SOL] +# 17. - Light (V) level 0 Evocation [SOL] + An object you can touch emits a powerful light for a limited time. -# 18. - *Lightning Lure* © (V) level 0 Evocation ] [UB] +# 18. - *Lightning Lure* © (V) level 0 Evocation [UB] + +**[Artificer,Sorcerer,Warlock,Wizard]** You create a lash of lightning energy that strikes at one creature of your choice that you can see within 15 ft of you. The target must succeed on a Strength saving throw or be pulled up to 10 ft in a straight line toward you and then take 1d8 lightning damage. The spell's damage increases by an additional die at 5th, 11th and 17th level. -# 19. - *Mind Sliver* © (V) level 0 Enchantment ] [UB] +# 19. - *Mind Sliver* © (V) level 0 Enchantment [UB] + +**[Sorcerer,Warlock,Wizard]** You drive a disorienting spike of psychic energy into the mind of one creature you can see within range. The target must succeed on an Intelligence saving throw or take 1d6 psychic damage and subtract 1d4 from the next saving throw it makes before the end of your next turn. -# 20. - Minor Lifesteal (V,S) level 0 Necromancy ] [UB] +# 20. - Minor Lifesteal (V,S) level 0 Necromancy [UB] + +**[Bard,Sorcerer,Warlock,Wizard]** You drain vital energy from a nearby enemy creature. Make a melee spell attack against a creature within 5 ft of you. On a hit, the creature takes 1d6 necrotic damage, and you heal for half the damage dealt (rounded down). This spell has no effect on undead and constructs. The spell's damage increases by an additional die at 5th, 11th and 17th level. -# 21. - Poison Spray (V,S) level 0 Conjuration [Artificer,Druid,Sorcerer,Warlock,Wizard] [SOL] +# 21. - Poison Spray (V,S) level 0 Conjuration [SOL] + +**[Artificer,Druid,Sorcerer,Warlock,Wizard]** Fire a poison spray at an enemy you can see, within range. -# 22. - *Primal Savagery* © (S) level 0 Transmutation ] [UB] +# 22. - *Primal Savagery* © (S) level 0 Transmutation [UB] + +**[Druid]** You channel primal magic to cause your teeth or fingernails to sharpen, ready to deliver a corrosive attack. Make a melee spell attack against one creature within 5 ft of you. On a hit, the target takes 1d10 acid damage. The spell's damage increases by an additional die at 5th, 11th and 17th level. -# 23. - Produce Flame (V,S) level 0 Conjuration [Druid] [SOL] +# 23. - Produce Flame (V,S) level 0 Conjuration [SOL] + +**[Druid]** Conjures a flickering flame in your hand, which generates light or can be hurled to inflict fire damage. -# 24. - Ray of Frost (V,S) level 0 Evocation [Artificer,Sorcerer,Wizard] [SOL] +# 24. - Ray of Frost (V,S) level 0 Evocation [SOL] + +**[Artificer,Sorcerer,Wizard]** Launch a freezing ray at an enemy to damage and slow them. -# 25. - Resistance (V,S) level 0 Abjuration [Concentration] [Artificer,Cleric,Druid] [SOL] +# 25. - Resistance (V,S) level 0 Abjuration [Concentration] [SOL] + +**[Artificer,Cleric,Druid]** Grant an ally a one-time bonus to saving throws. -# 26. - Sacred Flame (V,S) level 0 Evocation [Cleric] [SOL] +# 26. - Sacred Flame (V,S) level 0 Evocation [SOL] + +**[Cleric]** Strike an enemy with radiant damage. -# 27. - *Sapping Sting* © (V,S) level 0 Necromancy ] [UB] +# 27. - *Sapping Sting* © (V,S) level 0 Necromancy [UB] + +**[Wizard]** You sap the vitality of one creature you can see in range. The target must succeed on a Constitution saving throw or take 1d4 necrotic damage and fall prone. -# 28. - Shadow Armor (V,S) level 0 Abjuration [Bard,Sorcerer,Warlock,Wizard] [SOL] +# 28. - Shadow Armor (V,S) level 0 Abjuration [SOL] + +**[Bard,Sorcerer,Warlock,Wizard]** Grants 3 temporary hit points for one minute. -# 29. - Shadow Dagger (V,S) level 0 Illusion [Bard,Sorcerer,Warlock,Wizard] [SOL] +# 29. - Shadow Dagger (V,S) level 0 Illusion [SOL] + +**[Bard,Sorcerer,Warlock,Wizard]** Launches an illusionary dagger that causes psychic damage. -# 30. - Shillelagh (V,S) level 0 Transmutation [Druid] [SOL] +# 30. - Shillelagh (V,S) level 0 Transmutation [SOL] + +**[Druid]** Conjures a magical club whose attacks are magical and use your spellcasting ability instead of strength. -# 31. - Shine (V,S) level 0 Conjuration [Cleric,Sorcerer,Wizard] [SOL] +# 31. - Shine (V,S) level 0 Conjuration [SOL] + +**[Cleric,Sorcerer,Wizard]** An enemy you can see becomes luminous for a while. -# 32. - Shocking Grasp (V,S) level 0 Evocation [Artificer,Sorcerer,Wizard] [SOL] +# 32. - Shocking Grasp (V,S) level 0 Evocation [SOL] + +**[Artificer,Sorcerer,Wizard]** Damage and daze an enemy on a successful touch. -# 33. - Spare the Dying (S) level 0 Necromancy [Artificer,Cleric] [SOL] +# 33. - Spare the Dying (S) level 0 Necromancy [SOL] + +**[Artificer,Cleric]** Touch a dying ally to stabilize them. -# 34. - Sparkle (V,S) level 0 Enchantment [Bard,Cleric,Druid,Sorcerer,Warlock,Wizard] [SOL] +# 34. - Sparkle (V,S) level 0 Enchantment [SOL] + +**[Bard,Cleric,Druid,Sorcerer,Warlock,Wizard]** Target up to three objects that can be illuminated and light them up immediately. -# 35. - *Starry Wisp* © (V,S) level 0 Evocation ] [UB] +# 35. - *Starry Wisp* © (V,S) level 0 Evocation [UB] + +**[Bard,Druid]** You launch a mote of light at one creature or object within range. Make a ranged spell attack against the target. On a hit, the target takes 1d8 Radiant damage, and until the end of your next turn, it emits Dim Light in a 10-foot radius and can't benefit from the Invisible condition. The spell's damage increases by an additional die at 5th, 11th and 17th level. -# 36. - Sunlit Blade (M,S) level 0 Evocation ] [UB] +# 36. - Sunlit Blade (M,S) level 0 Evocation [UB] + +**[Artificer,Sorcerer,Warlock,Wizard]** You brandish the weapon used in the spell's casting and make a melee attack with it against one creature within 5 ft distance. On a hit, the target suffers the weapon attack's normal effects, and is enveloped in glowing radiant energy, shedding dim light for the turn. Next attack against this creature while it is highlighted is done with advantage. At 5th level, the melee attack deals an extra 1d8 radiant damage to the target. The damage increases by another 1d8 at 11th and 17th levels. -# 37. - *Sword Burst* © (V,S) level 0 Enchantment ] [UB] +# 37. - *Sword Burst* © (V,S) level 0 Enchantment [UB] + +**[Artificer,Sorcerer,Warlock,Wizard]** You create a momentary circle of spectral blades that sweep around you. All other creatures within 5 ft of you must each succeed on a Dexterity saving throw or take 1d6 force damage. -# 38. - *Thorn Whip* © (V,S) level 0 Transmutation ] [UB] +# 38. - *Thorn Whip* © (V,S) level 0 Transmutation [UB] + +**[Artificer,Druid]** You create a long, whip-like vine covered in thorns that lashes out at your command toward a creature in range. Make a ranged spell attack against the target. If the attack hits, the creature takes 1d6 piercing damage, and you pull the creature up to 10 ft closer to you. -# 39. - *Thunderclap* © (V,S) level 0 Evocation ] [UB] +# 39. - *Thunderclap* © (V,S) level 0 Evocation [UB] + +**[Artificer,Bard,Druid,Sorcerer,Warlock,Wizard]** Create a burst of thundering sound, forcing creatures adjacent to you to make a Constitution saving throw or take 1d6 thunder damage. The spell's damage increases by an additional die at 5th, 11th and 17th level. -# 40. - *Toll the Dead* © (V,S) level 0 Necromancy ] [UB] +# 40. - *Toll the Dead* © (V,S) level 0 Necromancy [UB] + +**[Cleric,Warlock,Wizard]** You point at one creature you can see within range, and the sound of a dolorous bell fills the air around it for a moment. The target must succeed on a Wisdom saving throw or take 1d6 necrotic damage. If the target is missing any of its hit points, it instead takes 1d12 necrotic damage. -# 41. - True Strike (S) level 0 Divination [Concentration] [Bard,Sorcerer,Warlock,Wizard] [SOL] +# 41. - True Strike (S) level 0 Divination [Concentration] [SOL] + +**[Bard,Sorcerer,Warlock,Wizard]** Increases your chance to hit a target you can see, one time. -# 42. - Venomous Spike (V,S) level 0 Enchantment [Druid] [SOL] +# 42. - Venomous Spike (V,S) level 0 Enchantment [SOL] + +**[Druid]** A bone spike that pierces and poisons its target. -# 43. - Vicious Mockery (V) level 0 Enchantment [Bard] [SOL] +# 43. - Vicious Mockery (V) level 0 Enchantment [SOL] + +**[Bard]** Unleash a torrent of magically-enhanced insults on a creature you can see. It must make a successful wisdom saving throw, or take psychic damage and have disadvantage on its next attack roll. The effect lasts until the end of its next turn. -# 44. - *Word of Radiance* © (V) level 0 Evocation ] [UB] +# 44. - *Word of Radiance* © (V) level 0 Evocation [UB] + +**[Cleric]** Create a brilliant flash of shimmering light, damaging all enemies around you. -# 45. - Wrack (V,S) level 0 Necromancy ] [UB] +# 45. - Wrack (V,S) level 0 Necromancy [UB] + +**[Cleric]** Unleash a wave of crippling pain at a creature within range. The target must make a Constitution saving throw or take 1d6 necrotic damage, and preventing them from dashing or disengaging. -# 46. - *Absorb Elements* © (S) level 1 Abjuration ] [UB] +# 46. - *Absorb Elements* © (S) level 1 Abjuration [UB] + +**[Druid,Ranger,Sorcerer,Wizard]** The spell captures some of the incoming energy, lessening its effect on you and storing it for your next melee attack. You have resistance to the triggering damage type until the start of your next turn. Also, the first time you hit with a melee attack on your next turn, the target takes an extra 1d6 damage of the triggering type, and the spell ends. When you cast this spell using a spell slot of 2nd level or higher, the extra damage increases by 1d6 for each slot level above 1st. -# 47. - Animal Friendship (V,S) level 1 Enchantment [Bard,Druid,Ranger] [SOL] +# 47. - Animal Friendship (V,S) level 1 Enchantment [SOL] + +**[Bard,Druid,Ranger]** Choose a beast that you can see within the spell's range. The beast must make a Wisdom saving throw or be charmed for the spell's duration. -# 48. - *Armor of Agathys* © (V,S) level 1 Abjuration ] [UB] +# 48. - *Armor of Agathys* © (V,S) level 1 Abjuration [UB] + +**[Warlock]** A protective elemental skin envelops you, covering you and your gear. You gain 5 temporary hit points per spell level for the duration. In addition, if a creature hits you with a melee attack while you have these temporary hit points, the creature takes 5 cold damage per spell level. -# 49. - *Arms of Hadar* © (V,S) level 1 Evocation ] [UB] +# 49. - *Arms of Hadar* © (V,S) level 1 Evocation [UB] + +**[Warlock]** You invoke the power of malevolent forces. Tendrils of dark energy erupt from you and batter all creatures within 10 feet of you. Each creature in that area must make a Strength saving throw. On a failed save, a target takes 2d6 necrotic damage and can't take reactions until the start of your next turn. On a successful save, the creature takes half damage, but suffers no other effect. When you cast this spell using a spell slot of 2nd level or higher, the damage increases by 1d6 for each slot level above 1st. -# 50. - Bane (V,S) level 1 Enchantment [Concentration] [Bard,Cleric] [SOL] +# 50. - Bane (V,S) level 1 Enchantment [Concentration] [SOL] + +**[Bard,Cleric]** Reduce your enemies' attack and saving throws for a limited time. -# 51. - Bless (V,S) level 1 Enchantment [Concentration] [Cleric,Paladin] [SOL] +# 51. - Bless (V,S) level 1 Enchantment [Concentration] [SOL] + +**[Cleric,Paladin]** Increase your allies' saving throws and attack rolls for a limited time. -# 52. - Burning Hands (V,S) level 1 Evocation [Sorcerer,Wizard] [SOL] +# 52. - Burning Hands (V,S) level 1 Evocation [SOL] + +**[Sorcerer,Wizard]** Spray a cone of fire in front of you. -# 53. - Caustic Zap (V,S) level 1 Evocation ] [UB] +# 53. - Caustic Zap (V,S) level 1 Evocation [UB] + +**[Artificer,Sorcerer,Wizard]** You send a jolt of green energy toward the target momentarily disorientating them as the spell burn some of their armor. The spell targets one enemy with a spell attack and deals 1d4 acid and 1d6 lightning damage and applies the dazzled condition. -# 54. - *Chaos Bolt* © (V,S) level 1 Evocation ] [UB] +# 54. - *Chaos Bolt* © (V,S) level 1 Evocation [UB] + +**[Sorcerer]** Make a ranged spell attack against a target. On a hit, the target takes 2d8 + 1d6 damage. Choose one of the d8s. The number rolled on that die determines the attack's damage type: 1: ◰ Acid 2: ◲ Cold @@ -219,19 +326,27 @@ Make a ranged spell attack against a target. On a hit, the target takes 2d8 + 1d 7: ◹ Psychic 8: ◼ Thunder If you roll the same number on both d8s, you can use your free action to target a different creature of your choice. Make a new attack roll against the new target, and make a new damage roll, which could cause the chaotic energy to leap again. A creature can be damaged only once by each casting of this spell. -# 55. - Charm Person (V,S) level 1 Enchantment [Bard,Druid,Sorcerer,Warlock,Wizard] [SOL] +# 55. - Charm Person (V,S) level 1 Enchantment [SOL] + +**[Bard,Druid,Sorcerer,Warlock,Wizard]** Makes an ally of an enemy. -# 56. - *Chromatic Orb* © (M,V,S) level 1 Evocation ] [UB] +# 56. - *Chromatic Orb* © (M,V,S) level 1 Evocation [UB] + +**[Sorcerer,Wizard]** You hurl a 4-inch-diameter sphere of energy at a creature that you can see within range. You choose acid, cold, fire, lightning, poison, or thunder for the type of orb you create, and then make a ranged spell attack against the target. If the attack hits, the creature takes 3d8 damage of the type you chose. -# 57. - Color Spray (V,S) level 1 Illusion [Sorcerer,Wizard] [SOL] +# 57. - Color Spray (V,S) level 1 Illusion [SOL] + +**[Sorcerer,Wizard]** Spray a luminous cone that briefly blinds your enemies. Roll 6d10: the total is how many hit points of creatures this spell can affect. -# 58. - *Command* © (V) level 1 Enchantment ] [UB] +# 58. - *Command* © (V) level 1 Enchantment [UB] + +**[Bard,Cleric,Paladin]** You speak a one-word command to a creature you can see within range. The target must succeed on a Wisdom saving throw or follow the command on its next turn. You can only command creatures you share a language with, which include all humanoids. To command a non-humanoid creature, you must know Draconic for Dragons, Elvish for Fey, Giant for Giants, Infernal for Fiends and Terran for Elementals. Commands follow: • Approach: The target moves toward you by the shortest and most direct route, ending its turn if it moves within 5 feet of you. @@ -240,852 +355,1265 @@ You speak a one-word command to a creature you can see within range. The target • Halt: The target doesn't move and takes no actions. When you cast this spell using a spell slot of 2nd level or higher, you may target an additional creature within range for each slot level above 2nd. -# 59. - Comprehend Languages (V,S) level 1 Divination [Bard,Sorcerer,Warlock,Wizard] [SOL] +# 59. - Comprehend Languages (V,S) level 1 Divination [SOL] + +**[Bard,Sorcerer,Warlock,Wizard]** For the duration of the spell, you understand the literal meaning of any spoken words that you hear. -# 60. - Cure Wounds (V,S) level 1 Evocation [Artificer,Bard,Cleric,Druid,Paladin,Ranger] [SOL] +# 60. - Cure Wounds (V,S) level 1 Evocation [SOL] + +**[Artificer,Bard,Cleric,Druid,Paladin,Ranger]** Heal an ally by touch. -# 61. - Detect Evil and Good (V,S) level 1 Divination [Concentration] [Cleric,Paladin] [SOL] +# 61. - Detect Evil and Good (V,S) level 1 Divination [Concentration] [SOL] + +**[Cleric,Paladin]** Detect nearby creatures of evil or good nature. -# 62. - Detect Magic (V,S) level 1 Divination [Concentration] [Artificer,Bard,Cleric,Druid,Paladin,Ranger,Sorcerer,Wizard] [SOL] +# 62. - Detect Magic (V,S) level 1 Divination [Concentration] [SOL] + +**[Artificer,Bard,Cleric,Druid,Paladin,Ranger,Sorcerer,Wizard]** Detect nearby magic objects or creatures. -# 63. - Detect Poison and Disease (V,S) level 1 Divination [Concentration] [Druid] [SOL] +# 63. - Detect Poison and Disease (V,S) level 1 Divination [Concentration] [SOL] + +**[Druid]** TMP For the duration you sense the presence and location of poisonous creatures and diseases within 6 cells of you. -# 64. - *Dissonant Whispers* © (V) level 1 Enchantment ] [UB] +# 64. - *Dissonant Whispers* © (V) level 1 Enchantment [UB] + +**[Bard]** You whisper a discordant melody that only one creature of your choice within range can hear, wracking it with terrible pain. The target must make a Wisdom saving throw. On a failed save, it takes 3d6 psychic damage and must immediately use its reaction, if available, to move as far as its speed allows away from you. The creature doesn't move into obviously dangerous ground, such as a fire or a pit. On a successful save, the target takes half as much damage and doesn't have to move away. When you cast this spell using a spell slot of 2nd level or higher, the damage increases by 1d6 for each slot level above 1st. -# 65. - Divine Favor (V,S) level 1 Evocation [Concentration] [Paladin] [SOL] +# 65. - Divine Favor (V,S) level 1 Evocation [Concentration] [SOL] + +**[Paladin]** Gain additional radiant damage for a limited time. -# 66. - *Earth Tremor* © (V,S) level 1 Evocation ] [UB] +# 66. - *Earth Tremor* © (V,S) level 1 Evocation [UB] + +**[Bard,Druid,Sorcerer,Wizard]** You strike the ground and unleash a tremor of seismic force, hurling up earth, rock, and sand. -# 67. - *Ensnaring Strike* © (V) level 1 Conjuration [Concentration] ] [UB] +# 67. - *Ensnaring Strike* © (V) level 1 Conjuration [Concentration] [UB] + +**[Ranger]** The next time you hit a creature with a weapon attack before this spell ends, a writhing mass of thorny vines appears at the point of impact, and the target must succeed on a Strength saving throw or be restrained by the magical vines until the spell ends.While restrained by this spell, the target takes 1d6 piercing damage at the start of each of its turns. A creature restrained by the vines can use its action to make a Strength check against your spell save DC. -# 68. - Entangle (V,S) level 1 Conjuration [Concentration] [Druid] [SOL] +# 68. - Entangle (V,S) level 1 Conjuration [Concentration] [SOL] + +**[Druid]** Creatures in a four-cell square area are restrained if they fail a STR saving throw -# 69. - Expeditious Retreat (V,S) level 1 Transmutation [Concentration] [Artificer,Sorcerer,Warlock,Wizard] [SOL] +# 69. - Expeditious Retreat (V,S) level 1 Transmutation [Concentration] [SOL] + +**[Artificer,Sorcerer,Warlock,Wizard]** Gain movement points and become able to dash as a bonus action for a limited time. -# 70. - Faerie Fire (V) level 1 Evocation [Concentration] [Artificer,Bard,Druid] [SOL] +# 70. - Faerie Fire (V) level 1 Evocation [Concentration] [SOL] + +**[Artificer,Bard,Druid]** Highlight creatures to give advantage to anyone attacking them. -# 71. - False Life (V,S) level 1 Necromancy [Artificer,Sorcerer,Wizard] [SOL] +# 71. - False Life (V,S) level 1 Necromancy [SOL] + +**[Artificer,Sorcerer,Wizard]** Gain a few temporary hit points for a limited time. -# 72. - Feather Fall (V) level 1 Transmutation [Artificer,Bard,Sorcerer,Wizard] [SOL] +# 72. - Feather Fall (V) level 1 Transmutation [SOL] + +**[Artificer,Bard,Sorcerer,Wizard]** Provide a safe landing when you or an ally falls. -# 73. - *Find Familiar* © (V,S) level 1 Conjuration ] [UB] +# 73. - *Find Familiar* © (V,S) level 1 Conjuration [UB] + +**[Wizard]** You gain the service of a familiar. The familiar can use the help action, and you can cast any touch or melee hit spell through the familiar. -# 74. - Fog Cloud (V,S) level 1 Conjuration [Concentration] [Druid,Ranger,Sorcerer,Wizard] [SOL] +# 74. - Fog Cloud (V,S) level 1 Conjuration [Concentration] [SOL] + +**[Druid,Ranger,Sorcerer,Wizard]** Generate a sphere of thick fog for a limited time. The area is heavily obscured, penalizing creatures inside it that rely on sight. -# 75. - *Gift of Alacrity* © (V,S) level 1 Divination ] [UB] +# 75. - *Gift of Alacrity* © (V,S) level 1 Divination [UB] + +**[Wizard]** You touch a willing creature. For the duration, the target can add 1d8 to its initiative rolls. -# 76. - Goodberry (V,S) level 1 Transmutation [Druid,Ranger] [SOL] +# 76. - Goodberry (V,S) level 1 Transmutation [SOL] + +**[Druid,Ranger]** Creates 10 berries infused with magic. Eating a berry restores 1 hit point and provides sustenance for a long rest. Berries vanish after a long rest. -# 77. - Grease (V,S) level 1 Conjuration [Artificer,Wizard] [SOL] +# 77. - Grease (V,S) level 1 Conjuration [SOL] + +**[Artificer,Wizard]** Cover an area of 2 x 2 cells with grease. Creatures trying to cross it may fall prone. -# 78. - Guiding Bolt (V,S) level 1 Evocation [Cleric] [SOL] +# 78. - Guiding Bolt (V,S) level 1 Evocation [SOL] + +**[Cleric]** Launch a radiant attack against an enemy and make them easy to hit. -# 79. - *Hail of Thorns* © (V) level 1 Conjuration [Concentration] ] [UB] +# 79. - *Hail of Thorns* © (V) level 1 Conjuration [Concentration] [UB] + +**[Ranger]** The next time you hit a creature with a ranged weapon attack before the spell ends, this spell creates a rain of thorns that sprouts from your ranged weapon or ammunition. In addition to the normal effect of the attack, the target of the attack and each creature within 5 feet of it must make a Dexterity saving throw. A creature takes 1d10 piercing damage on a failed save, or half as much damage on a successful one. -# 80. - Healing Word (V) level 1 Evocation [Bard,Cleric,Druid] [SOL] +# 80. - Healing Word (V) level 1 Evocation [SOL] + +**[Bard,Cleric,Druid]** Heal an ally you can see. -# 81. - Hellish Rebuke (V,S) level 1 Evocation [Warlock] [SOL] +# 81. - Hellish Rebuke (V,S) level 1 Evocation [SOL] + +**[Warlock]** When you are damaged by a creature within range, you can use your reaction to inflict fire damage back. -# 82. - Heroism (V,S) level 1 Enchantment [Concentration] [Bard,Paladin] [SOL] +# 82. - Heroism (V,S) level 1 Enchantment [Concentration] [SOL] + +**[Bard,Paladin]** An ally gains temporary hit points and cannot be frightened for a limited time. -# 83. - Hideous Laughter (V,S) level 1 Enchantment [Concentration] [Bard,Wizard] [SOL] +# 83. - Hideous Laughter (V,S) level 1 Enchantment [Concentration] [SOL] + +**[Bard,Wizard]** Make an enemy helpless with irresistible laughter. -# 84. - Hunter's Mark (V) level 1 Divination [Concentration] [Ranger] [SOL] +# 84. - Hunter's Mark (V) level 1 Divination [Concentration] [SOL] + +**[Ranger]** An enemy gets additional damage from you, and you can easily detect it for a limited time. -# 85. - *Ice Knife* © (S) level 1 Conjuration ] [UB] +# 85. - *Ice Knife* © (S) level 1 Conjuration [UB] + +**[Druid,Sorcerer,Wizard]** You create a shard of ice and fling it at one creature within range. Make a ranged spell attack against the target. On a hit, the target takes 1d10 piercing damage. Hit or miss, the shard then explodes. The target and each creature within 5 feet of the point where the ice exploded must succeed on a Dexterity saving throw or take 2d6 cold damage. When you cast this spell using a spell slot of 2nd level or higher, both the cold and piercing damage increase by 1 die for each slot level above 1st. -# 86. - Identify (M,V,S) level 1 Divination [Artificer,Bard,Wizard] [SOL] +# 86. - Identify (M,V,S) level 1 Divination [SOL] + +**[Artificer,Bard,Wizard]** Identify the hidden properties of an object. -# 87. - Inflict Wounds (V,S) level 1 Necromancy [Cleric] [SOL] +# 87. - Inflict Wounds (V,S) level 1 Necromancy [SOL] + +**[Cleric]** Deal necrotic damage to an enemy you hit. -# 88. - Jump (V,S) level 1 Transmutation [Artificer,Druid,Ranger,Sorcerer,Wizard] [SOL] +# 88. - Jump (V,S) level 1 Transmutation [SOL] + +**[Artificer,Druid,Ranger,Sorcerer,Wizard]** Increase an ally's jumping distance. -# 89. - Jump (V,S) level 1 Transmutation ] [SOL] +# 89. - Jump (V,S) level 1 Transmutation [SOL] + Increase an ally's jumping distance. -# 90. - Longstrider (V,S) level 1 Transmutation [Artificer,Bard,Druid,Ranger,Wizard] [SOL] +# 90. - Longstrider (V,S) level 1 Transmutation [SOL] + +**[Artificer,Bard,Druid,Ranger,Wizard]** Increases an ally's speed by two cells per turn. -# 91. - Mage Armor (V,S) level 1 Abjuration [Sorcerer,Wizard] [SOL] +# 91. - Mage Armor (V,S) level 1 Abjuration [SOL] + +**[Sorcerer,Wizard]** Provide magical armor to an ally who doesn't wear armor. -# 92. - Magic Missile (V,S) level 1 Evocation [Sorcerer,Wizard] [SOL] +# 92. - Magic Missile (V,S) level 1 Evocation [SOL] + +**[Sorcerer,Wizard]** Strike one or more enemies with projectiles that can't miss. -# 93. - *Magnify Gravity* © (V,S) level 1 Transmutation ] [UB] +# 93. - *Magnify Gravity* © (V,S) level 1 Transmutation [UB] + +**[Wizard]** Sharply increase gravity in a 10-foot-radius sphere to crush and slow targets. -# 94. - Malediction (V,S) level 1 Enchantment [Concentration] [Warlock] [SOL] +# 94. - Malediction (V,S) level 1 Enchantment [Concentration] [SOL] + +**[Warlock]** Until the spell ends, whenever you hit a target with an attack you deal an extra 1d6 magical damage of the same type as the attack's damage. -# 95. - Mule (V,S) level 1 Transmutation ] [UB] +# 95. - Mule (V,S) level 1 Transmutation [UB] + +**[Bard,Sorcerer,Warlock,Wizard]** The recipient of this spell is able to ignore the effects of heavy loads or armor on movement speed. They can also carry slightly more weight. -# 96. - Protect vs Evil & Good (V,S) level 1 Abjuration [Concentration] [Cleric,Paladin,Warlock,Wizard] [SOL] +# 96. - Protect vs Evil & Good (V,S) level 1 Abjuration [Concentration] [SOL] + +**[Cleric,Paladin,Warlock,Wizard]** Touch an ally to give them protection from evil or good creatures for a limited time. -# 97. - Radiant Motes (V,S) level 1 Evocation ] [UB] +# 97. - Radiant Motes (V,S) level 1 Evocation [UB] + +**[Artificer,Wizard]** Unleashes a swarm of 4 radiant projectiles that deal 1d4 radiant damage each. When you cast this spell using a spell slot of 2nd level or higher, the spell creates 1 more projectile for each slot above 1st. -# 98. - *Sanctuary* © (V,S) level 1 Abjuration ] [UB] +# 98. - *Sanctuary* © (V,S) level 1 Abjuration [UB] + +**[Artificer,Cleric]** You ward a creature within range against attack. Until the spell ends, any creature who targets the warded creature with an attack or a harmful spell must first make a Wisdom saving throw. On a failed save, the creature loses the attack or spell. This spell doesn't protect the warded creature from area effects. If the warded creature makes an attack or casts a spell, this spell ends. -# 99. - *Searing Smite* © (V) level 1 Evocation [Concentration] ] [UB] +# 99. - *Searing Smite* © (V) level 1 Evocation [Concentration] [UB] + +**[Paladin,Ranger]** On your next hit your weapon flares with white-hot intensity, and the attack deals an extra 1d6 fire damage to the target and causes the target to ignite in flames. At the start of each of its turns the target must make a successful Constitution saving throw to stop burning, or take 1d6 fire damage. Higher Levels: for each slot level above 1st, the initial extra damage dealt by the attack increases by 1d6. -# 100. - Shield (V,S) level 1 Abjuration [Sorcerer,Wizard] [SOL] +# 100. - Shield (V,S) level 1 Abjuration [SOL] + +**[Sorcerer,Wizard]** Increase your AC by 5 just before you would take a hit. -# 101. - Shield of Faith (V,S) level 1 Abjuration [Concentration] [Cleric,Paladin] [SOL] +# 101. - Shield of Faith (V,S) level 1 Abjuration [Concentration] [SOL] + +**[Cleric,Paladin]** Increase an ally's AC by 2 for a limited time. -# 102. - Sleep (V,S) level 1 Enchantment [Bard,Sorcerer,Wizard] [SOL] +# 102. - Sleep (V,S) level 1 Enchantment [SOL] + +**[Bard,Sorcerer,Wizard]** Put a number of creatures to sleep for a limited time. Roll 5d8: the total is how many hit points of creatures this spell can affect. -# 103. - *Tasha's Caustic Brew* © (V,S) level 1 Evocation [Concentration] ] [UB] +# 103. - *Tasha's Caustic Brew* © (V,S) level 1 Evocation [Concentration] [UB] + +**[Artificer,Sorcerer,Wizard]** A stream of acid emanates from you in a line 30 feet long and 5 feet wide in a direction you choose. Each creature in the line must succeed on a Dexterity saving throw or be covered in acid for the spell's duration or until a creature uses its action to scrape or wash the acid off itself or another creature. A creature covered in the acid takes 2d4 acid damage at start of each of its turns. When you cast this spell using a spell slot 2nd level or higher, the damage increases by 2d4 for each slot level above 1st. -# 104. - *Thunderous Smite* © (V) level 1 Evocation [Concentration] ] [UB] +# 104. - *Thunderous Smite* © (V) level 1 Evocation [Concentration] [UB] + +**[Paladin]** On your next hit your weapon rings with thunder and the attack deals an extra 2d6 thunder damage to the target. Additionally, if the target is a creature, it must succeed on a Strength saving throw or be pushed 10 ft away from you and knocked prone. -# 105. - Thunderwave (V,S) level 1 Evocation [Bard,Druid,Sorcerer,Wizard] [SOL] +# 105. - Thunderwave (V,S) level 1 Evocation [SOL] + +**[Bard,Druid,Sorcerer,Wizard]** Emit a wave of force that causes damage and pushes creatures and objects away. -# 106. - Tiefling's Hellish Rebuke (V,S) level 1 Evocation ] [SOL] +# 106. - Tiefling's Hellish Rebuke (V,S) level 1 Evocation [SOL] + When you are damaged by a creature withing range, you can use your reaction to inflict fire damage back at them. This tiefling version of the spell is more powerful than the common one but cannot use a higher level Spell Slot to increase damage. -# 107. - *Witch Bolt* © (V,S) level 1 Evocation [Concentration] ] [UB] +# 107. - *Witch Bolt* © (V,S) level 1 Evocation [Concentration] [UB] + +**[Sorcerer,Warlock,Wizard]** A beam of crackling, blue energy lances out toward a creature within range, forming a sustained arc of lightning between you and the target. Make a ranged spell attack against that creature. On a hit, the target takes 1d12 lightning damage, and on each of your turns for the duration, you can use your action to deal 1d12 lightning damage to the target automatically. The spell ends if you use your action to do anything else. The spell also ends if the target is ever outside the spell's range. When you cast this spell using a spell slot of 2nd level or higher, the damage increases by 1d12 for each slot level above 1st. -# 108. - *Wrathful Smite* © (V) level 1 Evocation [Concentration] ] [UB] +# 108. - *Wrathful Smite* © (V) level 1 Evocation [Concentration] [UB] + +**[Paladin]** Your next hit deals additional 1d6 psychic damage. If target fails WIS saving throw its mind explodes in pain, and it becomes frightened. -# 109. - *Zephyr Strike* © (V) level 1 Transmutation [Concentration] ] [UB] +# 109. - *Zephyr Strike* © (V) level 1 Transmutation [Concentration] [UB] + +**[Ranger]** You move like the wind. For the duration, your movement doesn't provoke opportunity attacks. Once before the spell ends, you can give yourself advantage on one weapon attack roll on your turn. That attack deals an extra 1d8 force damage on a hit. Whether you hit or miss, your walking speed increases by 30 feet until the end of that turn. -# 110. - Acid Arrow (V,S) level 2 Evocation [Wizard] [SOL] +# 110. - Acid Arrow (V,S) level 2 Evocation [SOL] + +**[Wizard]** Launch an acid arrow that deals some damage even if you miss your shot. -# 111. - *Aganazzar's Scorcher* © (V,S) level 2 Evocation ] [UB] +# 111. - *Aganazzar's Scorcher* © (V,S) level 2 Evocation [UB] + +**[Sorcerer,Wizard]** A line of roaring flame 30 feet long and 5 feet wide emanates from you in a direction you choose. Each creature in the line must make a Dexterity saving throw. A creature takes 3d10 fire damage on a failed save, or half as much damage on a successful one. When you cast this spell using a spell slot of 3rd level or higher, the damage increases by 1d10 for each slot level above 2nd. -# 112. - Aid (V,S) level 2 Abjuration [Artificer,Cleric,Paladin] [SOL] +# 112. - Aid (V,S) level 2 Abjuration [SOL] + +**[Artificer,Cleric,Paladin]** Temporarily increases hit points for up to three allies. -# 113. - Barkskin (V,S) level 2 Transmutation [Concentration] [Druid,Ranger] [SOL] +# 113. - Barkskin (V,S) level 2 Transmutation [Concentration] [SOL] + +**[Druid,Ranger]** Gives you or an ally you can touch an AC of at least 16. -# 114. - Blindness (V) level 2 Necromancy [Bard,Cleric,Sorcerer,Wizard] [SOL] +# 114. - Blindness (V) level 2 Necromancy [SOL] + +**[Bard,Cleric,Sorcerer,Wizard]** Blind an enemy for one minute. -# 115. - Blur (V) level 2 Illusion [Concentration] [Artificer,Sorcerer,Wizard] [SOL] +# 115. - Blur (V) level 2 Illusion [Concentration] [SOL] + +**[Artificer,Sorcerer,Wizard]** Makes you blurry and harder to hit for up to one minute. -# 116. - *Borrowed Knowledge* © (V,S) level 2 Divination ] [UB] +# 116. - *Borrowed Knowledge* © (V,S) level 2 Divination [UB] + +**[Bard,Cleric,Warlock,Wizard]** You draw on knowledge from spirits of the past. Choose one skill in which you lack proficiency. For 1 hour, you have proficiency in the chosen skill. The spell ends early if you cast it again. -# 117. - Branding Smite (V) level 2 Evocation [Concentration] [Paladin] [SOL] +# 117. - Branding Smite (V) level 2 Evocation [Concentration] [SOL] + +**[Paladin]** Your next hit causes additional radiant damage and your target becomes luminous. -# 118. - Calm Emotions (V,S) level 2 Enchantment [Concentration] [Bard,Cleric] [SOL] +# 118. - Calm Emotions (V,S) level 2 Enchantment [Concentration] [SOL] + +**[Bard,Cleric]** Stops allies from being charmed or frightened and makes hostile humanoids indifferent. -# 119. - *Cloud of Daggers* © (V,S) level 2 Conjuration [Concentration] ] [UB] +# 119. - *Cloud of Daggers* © (V,S) level 2 Conjuration [Concentration] [UB] + +**[Bard,Sorcerer,Warlock,Wizard]** You fill the air with spinning daggers in a cube 5 feet on each side, centered on a point you choose within range. A creature takes 4d4 slashing damage when it enters the spell's area for the first time on a turn or starts its turn there. When you cast this spell using a spell slot of 3rd level or higher, the damage increases by 2d4 for each slot level above 2nd. -# 120. - Color Burst (V,S) level 2 Illusion ] [UB] +# 120. - Color Burst (V,S) level 2 Illusion [UB] + +**[Artificer,Sorcerer,Wizard]** Burst a luminous cube that briefly blinds anyone within 10 ft. 8d10 is how many hit points of creatures this spell can affect. -# 121. - Conjure Goblinoids (V,S) level 2 Conjuration [Concentration] ] [UB] +# 121. - Conjure Goblinoids (V,S) level 2 Conjuration [Concentration] [UB] + +**[Druid,Ranger]** Conjures 2 goblins who obey your orders unless you lose concentration. -# 122. - Darkness (V) level 2 Evocation [Concentration] [Sorcerer,Warlock,Wizard] [SOL] +# 122. - Darkness (V) level 2 Evocation [Concentration] [SOL] + +**[Sorcerer,Warlock,Wizard]** Create an area of magical darkness. -# 123. - Darkvision (V,S) level 2 Transmutation [Artificer,Druid,Ranger,Sorcerer,Wizard] [SOL] +# 123. - Darkvision (V,S) level 2 Transmutation [SOL] + +**[Artificer,Druid,Ranger,Sorcerer,Wizard]** Grant Darkvision to the target. -# 124. - Enhance Ability (V,S) level 2 Transmutation [Concentration] [Artificer,Bard,Cleric,Druid] [SOL] +# 124. - Enhance Ability (V,S) level 2 Transmutation [Concentration] [SOL] + +**[Artificer,Bard,Cleric,Druid]** Grant temporary powers to an ally for up to one hour. -# 125. - Find Traps (V,S) level 2 Evocation [Cleric,Druid,Ranger] [SOL] +# 125. - Find Traps (V,S) level 2 Evocation [SOL] + +**[Cleric,Druid,Ranger]** Spot mechanical and magical traps, but not natural hazards. -# 126. - Flame Blade (V,S) level 2 Evocation [Concentration] [Druid] [SOL] +# 126. - Flame Blade (V,S) level 2 Evocation [Concentration] [SOL] + +**[Druid]** Evokes a fiery blade for ten minutes that you can wield in battle. -# 127. - Flaming Sphere (V,S) level 2 Evocation [Concentration] [Druid,Wizard] [SOL] +# 127. - Flaming Sphere (V,S) level 2 Evocation [Concentration] [SOL] + +**[Druid,Wizard]** Summons a movable, burning sphere. -# 128. - Heat Metal (V,S) level 2 Transmutation [Concentration] [Artificer,Bard,Druid] [SOL] +# 128. - Heat Metal (V,S) level 2 Transmutation [Concentration] [SOL] + +**[Artificer,Bard,Druid]** Causes metallic armor worn by a target creature to glow red hot, causing fire damage and disadvantage to attack rolls and ability checks. The damage can be repeated every turn with a bonus action. -# 129. - Hold Person (V,S) level 2 Enchantment [Concentration] [Bard,Cleric,Druid,Sorcerer,Warlock,Wizard] [SOL] +# 129. - Hold Person (V,S) level 2 Enchantment [Concentration] [SOL] + +**[Bard,Cleric,Druid,Sorcerer,Warlock,Wizard]** Paralyze a humanoid you can see for a limited time. -# 130. - Invisibility (V,S) level 2 Illusion [Concentration] [Artificer,Bard,Sorcerer,Warlock,Wizard] [SOL] +# 130. - Invisibility (V,S) level 2 Illusion [Concentration] [SOL] + +**[Artificer,Bard,Sorcerer,Warlock,Wizard]** Make an ally invisible for a limited time. -# 131. - *Kinetic Jaunt* © (S) level 2 Evocation [Concentration] ] [UB] +# 131. - *Kinetic Jaunt* © (S) level 2 Evocation [Concentration] [UB] + +**[Artificer,Bard,Sorcerer,Wizard]** You magically empower your movement with dance like steps, giving yourself the following benefits for the duration: • Your walking speed increases by 10 feet. • You don't provoke opportunity attacks. • You can move through the space of any creature. -# 132. - Knock (V) level 2 Transmutation [Bard,Sorcerer,Wizard] [SOL] +# 132. - Knock (V) level 2 Transmutation [SOL] + +**[Bard,Sorcerer,Wizard]** Magically open locked doors, chests, and the like. -# 133. - Lesser Restoration (V,S) level 2 Abjuration [Artificer,Bard,Cleric,Druid,Paladin,Ranger] [SOL] +# 133. - Lesser Restoration (V,S) level 2 Abjuration [SOL] + +**[Artificer,Bard,Cleric,Druid,Paladin,Ranger]** Remove a detrimental condition from an ally. -# 134. - Levitate (V,S) level 2 Transmutation [Concentration] [Artificer,Sorcerer,Wizard] [SOL] +# 134. - Levitate (V,S) level 2 Transmutation [Concentration] [SOL] + +**[Artificer,Sorcerer,Wizard]** Allow a creature to levitate and gain control of its aerial movement for a limited time. Can affect enemies if their size is medium or smaller. -# 135. - Levitate (V,S) level 2 Transmutation [Concentration] ] [SOL] +# 135. - Levitate (V,S) level 2 Transmutation [Concentration] [SOL] + Allow a creature to levitate and gain control of its aerial movement for a limited time. Can affect enemies if their size is medium or smaller. -# 136. - Magic Weapon (V,S) level 2 Transmutation [Concentration] [Artificer,Paladin,Wizard] [SOL] +# 136. - Magic Weapon (V,S) level 2 Transmutation [Concentration] [SOL] + +**[Artificer,Paladin,Wizard]** A nonmagical weapon becomes a +1 weapon for up to one hour. -# 137. - *Mirror Image* © (V,S) level 2 Illusion ] [UB] +# 137. - *Mirror Image* © (V,S) level 2 Illusion [UB] + +**[Bard,Sorcerer,Warlock,Wizard]** Three illusory duplicates of yourself appear in your space. Until the spell ends, each time a creature targets you with an attack, roll a d20 to determine whether the attack instead targets one of your duplicates. If you have 3 duplicates, you must roll a 6 or higher to change the attack's target to a duplicate. With 2 duplicates, you must roll an 8 or higher. With 1 duplicate, you must roll an 11 or higher. A duplicate's AC is equal to 10 + your Dexterity modifier. If an attack hits a duplicate, the duplicate is destroyed. A duplicate can be destroyed only by an attack that hits it. It ignores all other damage and effects. The spell ends when all three duplicates are destroyed. A creature is unaffected by this spell if it is Blinded, or has Blindsight, Truesight or Tremorsense (doesn't apply if you don't touch ground). -# 138. - Misty Step (V) level 2 Conjuration [Sorcerer,Warlock,Wizard] [SOL] +# 138. - Misty Step (V) level 2 Conjuration [SOL] + +**[Sorcerer,Warlock,Wizard]** Teleports you to a free cell you can see, no more than 6 cells away. -# 139. - Moon Beam (V,S) level 2 Evocation [Concentration] [Druid] [SOL] +# 139. - Moon Beam (V,S) level 2 Evocation [Concentration] [SOL] + +**[Druid]** Conjures a vertical column of moonlight which causes radiant damage. Shapechangers have disadvantage on the save. -# 140. - Noxious Spray (V,S) level 2 Evocation ] [UB] +# 140. - Noxious Spray (V,S) level 2 Evocation [UB] + +**[Druid,Sorcerer,Warlock,Wizard]** You unleash a spray of noxious gases on a target within range. Make a ranged spell attack. On a hit, the target takes 4d6 poison damage and must succeed on a Constitution saving throw or spend all its next turn retching and heaving, unable to move or take actions. Constructs, elementals and undead are unaffected by this spell. When you cast this spell using a slot of 3rd level or higher, you can target one additional creature for each slot level above 2nd. -# 141. - Pass Without Trace (V,S) level 2 Abjuration [Concentration] [Druid,Ranger] [SOL] +# 141. - Pass Without Trace (V,S) level 2 Abjuration [Concentration] [SOL] + +**[Druid,Ranger]** Make yourself and up to 5 allies stealthier for one hour. -# 142. - Petal Storm (V,S) level 2 Conjuration [Concentration] ] [UB] +# 142. - Petal Storm (V,S) level 2 Conjuration [Concentration] [UB] + +**[Druid]** Choose an unoccupied 15-foot cube of air that you can see within range. An elemental force of swirling winds appears in the cube and lasts for the spell's duration. The cloud heavily obscures its area. Any creature that enters the storm for the first time on a turn or starts its turn there must make a Strength saving throw. On a failed save, the creature takes 3d4 slashing damage. As a bonus action, you can move the storm up to 30 ft in any direction. -# 143. - Prayer of Healing (V) level 2 Evocation [Cleric] [SOL] +# 143. - Prayer of Healing (V) level 2 Evocation [SOL] + +**[Cleric]** Heal multiple allies at the same time. -# 144. - Protect Threshold (V,S) level 2 Abjuration ] [UB] +# 144. - Protect Threshold (V,S) level 2 Abjuration [UB] + +**[Cleric,Druid,Paladin]** Tracing arcane sigils along its boundary, you can ward a doorway, window, or other portal from entry. For the duration, an invisible eldritch creature stalks the warded portal. Any creature that attempts to pass through the portal must make a Wisdom saving throw or take 4d6 psychic damage, or half as much on a successful save. -# 145. - Protection from Poison (V,S) level 2 Abjuration [Artificer,Druid,Paladin,Ranger] [SOL] +# 145. - Protection from Poison (V,S) level 2 Abjuration [SOL] + +**[Artificer,Druid,Paladin,Ranger]** Cures and protects against poison. -# 146. - Ray of Enfeeblement (V,S) level 2 Necromancy [Concentration] [Sorcerer,Warlock,Wizard] [SOL] +# 146. - Ray of Enfeeblement (V,S) level 2 Necromancy [Concentration] [SOL] + +**[Sorcerer,Warlock,Wizard]** Weaken an enemy so they deal less damage for one minute. -# 147. - *Rime's Binding Ice* © (S) level 2 Evocation ] [UB] +# 147. - *Rime's Binding Ice* © (S) level 2 Evocation [UB] + +**[Sorcerer,Wizard]** A burst of cold energy emanates from you in a 30-foot cone. Each creature in that area must make a Constitution saving throw. On a failed save, a creature takes 3d8 cold damage and is hindered by ice formations for 1 minute, or until it uses an action to break away the ice. A creature hindered by ice has its speed reduced to 0. On a successful save, a creature takes half as much damage and isn't hindered by ice. -# 148. - Scorching Ray (V,S) level 2 Evocation [Sorcerer,Wizard] [SOL] +# 148. - Scorching Ray (V,S) level 2 Evocation [SOL] + +**[Sorcerer,Wizard]** Fling rays of fire at one or more enemies. -# 149. - See Invisibility (V,S) level 2 Divination [Artificer,Bard,Sorcerer,Wizard] [SOL] +# 149. - See Invisibility (V,S) level 2 Divination [SOL] + +**[Artificer,Bard,Sorcerer,Wizard]** You can see invisible creatures. -# 150. - *Shadow Blade* © (V,S) level 2 Illusion [Concentration] ] [UB] +# 150. - *Shadow Blade* © (V,S) level 2 Illusion [Concentration] [UB] + +**[Sorcerer,Warlock,Wizard]** You weave together threads of shadow to create a dagger of solidified gloom in your hand. It deals 2d8 psychic damage on a hit and has the finesse, light, and thrown properties. In addition, when you use it to attack a target that is in dim light or darkness, you make the attack roll with advantage. -# 151. - Shatter (V,S) level 2 Evocation [Bard,Sorcerer,Warlock,Wizard] [SOL] +# 151. - Shatter (V,S) level 2 Evocation [SOL] + +**[Bard,Sorcerer,Warlock,Wizard]** Triggers a sudden noise that causes Thunder Damage in a 2-cell radius. -# 152. - Silence (V,S) level 2 Illusion [Concentration] [Bard,Cleric,Ranger] [SOL] +# 152. - Silence (V,S) level 2 Illusion [Concentration] [SOL] + +**[Bard,Cleric,Ranger]** Creates a sphere four cells in radius, inside which sound cannot exist. Stops thunder damage and prevents spellcasting using verbal components. -# 153. - *Snilloc's Snowball Storm* © (V,S) level 2 Evocation ] [UB] +# 153. - *Snilloc's Snowball Storm* © (V,S) level 2 Evocation [UB] + +**[Sorcerer,Wizard]** A flurry of magic snowballs erupts from a point you choose within range. Each creature in a 3x3 cube centered on that point must make a Dexterity saving throw. A creature takes 3d8 cold damage on a failed save, or half as much damage on a successful one. When you cast this spell using a spell slot of 3rd level or higher, the damage increases by 1d8 for each slot level above 2nd. -# 154. - Spider Climb (V,S) level 2 Transmutation [Concentration] [Artificer,Sorcerer,Warlock,Wizard] [SOL] +# 154. - Spider Climb (V,S) level 2 Transmutation [Concentration] [SOL] + +**[Artificer,Sorcerer,Warlock,Wizard]** Touch an ally to allow them to climb walls like a spider for a limited time. -# 155. - Spike Growth (V,S) level 2 Transmutation [Concentration] [Druid,Ranger] [SOL] +# 155. - Spike Growth (V,S) level 2 Transmutation [Concentration] [SOL] + +**[Druid,Ranger]** Grows spikes and thorns in the area, making the terrain difficult and causing damage for every cell of movement. -# 156. - Spiritual Weapon (V,S) level 2 Evocation [Cleric] [SOL] +# 156. - Spiritual Weapon (V,S) level 2 Evocation [SOL] + +**[Cleric]** Summon a weapon that fights for you. -# 157. - *Tasha's Mind Whip* © (V) level 2 Enchantment ] [UB] +# 157. - *Tasha's Mind Whip* © (V) level 2 Enchantment [UB] + +**[Sorcerer,Wizard]** You psychically lash out at one creature you can see within range. The target must make an Intelligence saving throw. On a failed save, the target takes 3d6 psychic damage, and it can't take a reaction until the end of its next turn. Moreover, on its next turn, it must choose whether it gets a move, an action, or a bonus action; it gets only one of the three. On a successful save, the target takes half as much damage and suffers none of the spell's other effects. When you cast this spell using a spell slot of 3rd level or higher, you can target one additional creature for each slot level above 2nd. -# 158. - *Warding Bond* © (V,S) level 2 Abjuration ] [SOL] +# 158. - *Warding Bond* © (V,S) level 2 Abjuration [SOL] + Creates a bond with the target, who gains +1 AC, +1 to saving throws and resistance to all damage, but you share all damage it receives. Lasts for one hour. -# 159. - *Web* © (V,S) level 2 Conjuration [Concentration] ] [UB] +# 159. - *Web* © (V,S) level 2 Conjuration [Concentration] [UB] + +**[Artificer,Sorcerer,Wizard]** You conjure a mass of thick, sticky webbing at a point of your choice within range. The webs fill a 20-foot cube from that point for the duration. The webs are difficult terrain and lightly obscure their area. Each creature that enters them during its turn must make a Dexterity saving throw. On a failed save, the creature is restrained as long as it remains in the webs or until it breaks free. A creature restrained by the webs can use its actions to make a Strength check against your spell save DC. If it succeeds, it is no longer restrained. -# 160. - *Wither and Bloom* © (V,S) level 2 Necromancy ] [UB] +# 160. - *Wither and Bloom* © (V,S) level 2 Necromancy [UB] + +**[Druid,Sorcerer,Wizard]** You invoke both death and life upon a 10-foot-radius sphere centered on an ally. Each enemy in that area must make a Constitution saving throw, taking 2d6 necrotic damage on a failed save, or half as much damage on a successful one. In addition, the target spends and rolls one of its unspent Hit Dice and regain a number of hit points equal to the roll plus your spellcasting ability modifier. When you cast this spell using a spell slot of 3rd level or higher, the damage increases by 1d6 for each slot above 2nd, and the number of Hit Dice that can be spent and added to the healing roll increases by one for each slot above 2nd. -# 161. - Adder's Fangs (V,S) level 3 Conjuration ] [UB] +# 161. - Adder's Fangs (V,S) level 3 Conjuration [UB] + +**[Druid,Ranger,Sorcerer,Warlock]** You create the visage of a massive green snake that appears for an instant before bearing down on your foe. Choose a creature you can see within range. The target must make a constitution saving throw, taking 4d10 poison damage on a failure, or half as much damage on a successful one. A creature that fails its saving throw is also poisoned, and its speed is halved while poisoned by this spell. At the end of each of its turns, a target may make a constitution saving throw, ending the poison on a success. Otherwise, the poison lasts for 1 minute. When you cast this spell using a spell slot of 4th level or higher, you may target an additional creature within range for each slot level above 3rd. -# 162. - *Ashardalon's Stride* © (V,S) level 3 Transmutation [Concentration] ] [UB] +# 162. - *Ashardalon's Stride* © (V,S) level 3 Transmutation [Concentration] [UB] + +**[Artificer,Ranger,Sorcerer,Wizard]** The billowing flames of a dragon blast from your feet, granting you explosive speed. For the duration, your speed increases by 20 feet and moving doesn't provoke opportunity attacks. When you move within 5 feet of a creature, it takes 1d6 fire damage from your trail of heat. A creature can take this damage only once during a turn. When you cast this spell using a spell slot of 4th level or higher, increase your speed by 5 feet for each spell slot level above 3rd. The spell deals an additional 1d6 fire damage for each slot level above 3rd. -# 163. - *Aura of Vitality* © (V) level 3 Evocation [Concentration] ] [UB] +# 163. - *Aura of Vitality* © (V) level 3 Evocation [Concentration] [UB] + +**[Cleric,Paladin]** Healing energy radiates from you in an aura with a 30-foot radius. Until the spell ends, the aura moves with you, centered on you. You can use a bonus action to cause one creature in the aura (including you) to regain 2d6 hit points. -# 164. - Beacon of Hope (V,S) level 3 Abjuration [Concentration] [Cleric] [SOL] +# 164. - Beacon of Hope (V,S) level 3 Abjuration [Concentration] [SOL] + +**[Cleric]** Raise hope and vitality. -# 165. - Bestow Curse (V,S) level 3 Necromancy [Concentration] [Bard,Cleric,Wizard] [SOL] +# 165. - Bestow Curse (V,S) level 3 Necromancy [Concentration] [SOL] + +**[Bard,Cleric,Wizard]** Curses a creature you can touch. -# 166. - *Blinding Smite* © (V) level 3 Evocation [Concentration] ] [UB] +# 166. - *Blinding Smite* © (V) level 3 Evocation [Concentration] [UB] + +**[Paladin]** On your next hit your weapon flares with a bright light, and the attack deals an extra 3d8 radiant damage to the target. Additionally, the target must succeed on a Constitution saving throw or be blinded until the spell ends. A creature blinded by this spell makes another Constitution saving throw at the end of each of its turns. On a successful save, it is no longer blinded. -# 167. - Call Lightning (V,S) level 3 Conjuration [Concentration] [Druid] [SOL] +# 167. - Call Lightning (V,S) level 3 Conjuration [Concentration] [SOL] + +**[Druid]** Conjures a storm cloud from which you can call a vertical bolt of lightning to strike targets, dealing 3D10 lightning damage. Another bolt can be repeated every turn by using an action. -# 168. - Conjure Animal (V,S) level 3 Conjuration [Concentration] [Druid,Ranger] [SOL] +# 168. - Conjure Animal (V,S) level 3 Conjuration [Concentration] [SOL] + +**[Druid,Ranger]** Summon spirits in the form of beasts to help you in battle -# 169. - Corrupting Bolt (V,S) level 3 Necromancy ] [UB] +# 169. - Corrupting Bolt (V,S) level 3 Necromancy [UB] + +**[Sorcerer,Warlock,Wizard]** You can fire a pulse of necrotic energy that causes a creature's body to begin to wither and decay. Make a ranged attack against a creature. On a hit, the target takes 4d8 necrotic damage and must succeed a Constitution saving throw. On a failed saving throw, the next time you or an ally of yours hits the corrupted creature with an attack before the end of your next turn, the creature has vulnerability to all of that attack's damage, and then the corruption ends. When you cast this spell using a spell slot of 4th level or higher, the damage increases by 1d8 for each slot level above 3rd. -# 170. - Counterspell (S) level 3 Abjuration [Sorcerer,Warlock,Wizard] [SOL] +# 170. - Counterspell (S) level 3 Abjuration [SOL] + +**[Sorcerer,Warlock,Wizard]** Interrupt an enemy's spellcasting. -# 171. - Create Food (S) level 3 Conjuration [Artificer,Cleric,Paladin] [SOL] +# 171. - Create Food (S) level 3 Conjuration [SOL] + +**[Artificer,Cleric,Paladin]** Conjure 15 units of food. -# 172. - *Crusader's Mantle* © (V) level 3 Evocation [Concentration] ] [UB] +# 172. - *Crusader's Mantle* © (V) level 3 Evocation [Concentration] [UB] + +**[Paladin]** Surround yourself with a magical aura. Allies within the aura gain a bonus 1d4 radiant damage on their attacks. -# 173. - Daylight (V,S) level 3 Evocation [Cleric,Druid,Paladin,Ranger,Sorcerer] [SOL] +# 173. - Daylight (V,S) level 3 Evocation [SOL] + +**[Cleric,Druid,Paladin,Ranger,Sorcerer]** Summon a globe of bright light. -# 174. - Dispel Magic (V,S) level 3 Abjuration [Artificer,Bard,Cleric,Druid,Paladin,Sorcerer,Warlock,Wizard] [SOL] +# 174. - Dispel Magic (V,S) level 3 Abjuration [SOL] + +**[Artificer,Bard,Cleric,Druid,Paladin,Sorcerer,Warlock,Wizard]** End active spells on a creature or object. -# 175. - *Elemental Weapon* © (V,S) level 3 Transmutation [Concentration] ] [UB] +# 175. - *Elemental Weapon* © (V,S) level 3 Transmutation [Concentration] [UB] + +**[Artificer,Druid,Paladin,Ranger]** Imbue a non-magical weapon with elemental magic. It gains a +1 to attack and damage rolls, and it gains 1d4 of the corresponding element's damage. When casting with a 5 or 6 spell slots, the effects increased by one die while casting at a spell slot 7 or higher increases the effects by 2. -# 176. - Fear (V,S) level 3 Illusion [Concentration] [Bard,Sorcerer,Warlock,Wizard] [SOL] +# 176. - Fear (V,S) level 3 Illusion [Concentration] [SOL] + +**[Bard,Sorcerer,Warlock,Wizard]** Frighten creatures and force them to flee. -# 177. - Fireball (V,S) level 3 Evocation [Sorcerer,Wizard] [SOL] +# 177. - Fireball (V,S) level 3 Evocation [SOL] + +**[Sorcerer,Wizard]** Launch a fireball that explodes from a point of your choosing. -# 178. - *Flame Arrows* © (M,V,S) level 3 Transmutation [Concentration] ] [UB] +# 178. - *Flame Arrows* © (M,V,S) level 3 Transmutation [Concentration] [UB] + +**[Artificer,Druid,Ranger,Sorcerer,Wizard]** You must be wielding a ranged weapon. When a target is hit by it, the target takes an extra 1d6 fire damage. The spell ends when twelve pieces of ammunition have been drawn from the quiver. When you cast this spell using a spell slot of 4th level or higher, the number of pieces of ammunition you can affect with this spell increases by two for each slot level above 3rd. -# 179. - Fly (V,S) level 3 Transmutation [Concentration] [Artificer,Sorcerer,Warlock,Wizard] [SOL] +# 179. - Fly (V,S) level 3 Transmutation [Concentration] [SOL] + +**[Artificer,Sorcerer,Warlock,Wizard]** An ally you touch gains the ability to fly for a limited time. -# 180. - Haste (V,S) level 3 Transmutation [Concentration] [Artificer,Sorcerer,Wizard] [SOL] +# 180. - Haste (V,S) level 3 Transmutation [Concentration] [SOL] + +**[Artificer,Sorcerer,Wizard]** Make an ally faster and more agile, and grant them an additional action for a limited time. -# 181. - *Hunger of Hadar* © (V,S) level 3 Transmutation [Concentration] ] [UB] +# 181. - *Hunger of Hadar* © (V,S) level 3 Transmutation [Concentration] [UB] + +**[Warlock]** You open a gateway to the dark between the stars, a region infested with unknown horrors. A 20-foot-radius sphere of blackness and bitter cold appears, centered on a point with range and lasting for the duration. The area extinguishes light, and creatures within it are blinded. Any creature that starts its turn in the area takes 2d6 cold damage. Any creature that ends its turn in the area must succeed on a Dexterity saving throw or take 2d6 acid damage as milky, otherworldly tentacles rub against it. -# 182. - Hypnotic Pattern (S) level 3 Illusion [Concentration] [Bard,Sorcerer,Warlock,Wizard] [SOL] +# 182. - Hypnotic Pattern (S) level 3 Illusion [Concentration] [SOL] + +**[Bard,Sorcerer,Warlock,Wizard]** Charms enemies to make them harmless until attacked, but also affects allies in range. -# 183. - *Intellect Fortress* © (V) level 3 Abjuration [Concentration] ] [UB] +# 183. - *Intellect Fortress* © (V) level 3 Abjuration [Concentration] [UB] + +**[Artificer,Bard,Sorcerer,Warlock,Wizard]** For the duration, you or one willing creature you can see within range has resistance to psychic damage, as well as advantage on Intelligence, Wisdom, and Charisma saving throws. When you cast this spell using a spell slot of 4th level or higher, you may target an additional creature within range for each slot level above 3rd. -# 184. - *Life Transference* © (V,S) level 3 Necromancy ] [UB] +# 184. - *Life Transference* © (V,S) level 3 Necromancy [UB] + +**[Cleric,Wizard]** You sacrifice some of your health to mend another creature's injuries. You take 4d8 necrotic damage, and one creature of your choice that you can see within range regains a number of hit points equal to twice the necrotic damage you take. When you cast this spell using a spell s lot of 4th level or higher, the damage increases by 1d8 for each slot level above 3rd. -# 185. - *Lightning Arrow* © (V,S) level 3 Transmutation [Concentration] ] [UB] +# 185. - *Lightning Arrow* © (V,S) level 3 Transmutation [Concentration] [UB] + +**[Ranger]** The next time you make a ranged weapon attack during the spell's duration, the weapon's ammunition, or the weapon itself if it's a thrown weapon, transforms into a bolt of lightning. Make the attack roll as normal. The target takes 3d8 lightning damage on a hit, or half as much damage on a miss. Whether you hit or miss, each creature within 10 feet of the target must make a Dexterity saving throw. Each of these creatures takes 2d8 lightning damage on a failed save, or half as much damage on a successful one. When you cast this spell using a spell slot of 4th level or higher, the damage for both effects of the spell increases by 1d8 for each slot level above 3rd. -# 186. - Lightning Bolt (V,S) level 3 Evocation [Sorcerer,Wizard] [SOL] +# 186. - Lightning Bolt (V,S) level 3 Evocation [SOL] + +**[Sorcerer,Wizard]** Unleash a stroke of lightning in a direction of your choice, damaging everyone it touches. -# 187. - Mass Healing Word (V) level 3 Evocation [Cleric] [SOL] +# 187. - Mass Healing Word (V) level 3 Evocation [SOL] + +**[Cleric]** Instantly heals up to six allies you can see. -# 188. - Protection from Energy (V,S) level 3 Abjuration [Concentration] [Artificer,Cleric,Druid,Ranger,Sorcerer,Wizard] [SOL] +# 188. - Protection from Energy (V,S) level 3 Abjuration [Concentration] [SOL] + +**[Artificer,Cleric,Druid,Ranger,Sorcerer,Wizard]** Touch one willing creature to give them resistance to this damage type. -# 189. - *Pulse Wave* © (V,S) level 3 Evocation ] [UB] +# 189. - *Pulse Wave* © (V,S) level 3 Evocation [UB] + +**[Wizard]** You create intense pressure, unleash it in a 30-foot cone, and decide whether the pressure pulls or pushes creatures and objects. Each creature in that cone must make a Constitution saving throw. A creature takes 6d6 force damage on a failed save, or half as much damage on a successful one. And every creature that fails the save is either pulled 15 feet toward you or pushed 15 feet away from you, depending on the choice you made for the spell. When you cast this spell using a spell slot of 4th level or higher, the damage increases by 1d6 and the distance pulled or pushed increases by 5 feet for each slot level above 3rd. -# 190. - Remove Curse (V,S) level 3 Abjuration [Cleric,Paladin,Warlock,Wizard] [SOL] +# 190. - Remove Curse (V,S) level 3 Abjuration [SOL] + +**[Cleric,Paladin,Warlock,Wizard]** Removes all curses affecting the target. -# 191. - Revivify (M,V,S) level 3 Necromancy [Artificer,Cleric,Paladin] [SOL] +# 191. - Revivify (M,V,S) level 3 Necromancy [SOL] + +**[Artificer,Cleric,Paladin]** Brings one creature back to life, up to 1 minute after death. -# 192. - Sleet Storm (V,S) level 3 Conjuration [Concentration] [Druid,Sorcerer,Wizard] [SOL] +# 192. - Sleet Storm (V,S) level 3 Conjuration [Concentration] [SOL] + +**[Druid,Sorcerer,Wizard]** Creates an area where the ground is slippery, vision is obscured, and concentration is harder. -# 193. - Slow (V,S) level 3 Transmutation [Concentration] [Sorcerer,Wizard] [SOL] +# 193. - Slow (V,S) level 3 Transmutation [Concentration] [SOL] + +**[Sorcerer,Wizard]** Slows and impairs the actions of up to 6 creatures. -# 194. - Spirit Guardians (V,S) level 3 Conjuration [Concentration] [Cleric] [SOL] +# 194. - Spirit Guardians (V,S) level 3 Conjuration [Concentration] [SOL] + +**[Cleric]** Call forth spirits to protect you. -# 195. - *Spirit Shroud* © (V,S) level 3 Necromancy [Concentration] ] [UB] +# 195. - *Spirit Shroud* © (V,S) level 3 Necromancy [Concentration] [UB] + +**[Cleric,Paladin,Warlock,Wizard]** You call forth spirits of the dead, which flit around you for the spell's duration. The spirits are intangible and invulnerable. Until the spell ends, any attack you make deals 1d8 extra damage when you hit a creature within 10 ft of you. This damage is radiant, necrotic, or cold (your choice when you cast the spell). Any creature that takes this damage can't regain hit points until the start of your next turn. In addition, any enemy creature within 10ft of you when you cast, or that enters or starts its turn in that range has its movement speed lowered by 10ft until start of its next turn. When you cast this spell using a spell slot of 4th level or higher, the damage increases by 1d8 for every two slot levels above 3rd. -# 196. - Stinking Cloud (V,S) level 3 Conjuration [Concentration] [Bard,Sorcerer,Wizard] [SOL] +# 196. - Stinking Cloud (V,S) level 3 Conjuration [Concentration] [SOL] + +**[Bard,Sorcerer,Wizard]** Create a cloud of incapacitating, noxious gas. -# 197. - *Thunder Step* © (V) level 3 Conjuration ] [UB] +# 197. - *Thunder Step* © (V) level 3 Conjuration [UB] + +**[Sorcerer,Warlock,Wizard]** You teleport yourself to an unoccupied space you can see within range. Immediately after you disappear, a thunderous boom sounds, and each creature within 10 feet of the space you left must make a Constitution saving throw, taking 3d10 thunder damage on a failed save, or half as much damage on a successful one. You can also teleport one willing ally. When you cast this spell using a spell slot of 4th level or higher, the damage increases by 1d10 for each slot level above 3rd. -# 198. - Tongues (V) level 3 Divination [Bard,Cleric,Sorcerer,Warlock,Wizard] [SOL] +# 198. - Tongues (V) level 3 Divination [SOL] + +**[Bard,Cleric,Sorcerer,Warlock,Wizard]** Grants knowledge of all languages for one hour. -# 199. - Vampiric Touch (V,S) level 3 Necromancy [Concentration] [Warlock,Wizard] [SOL] +# 199. - Vampiric Touch (V,S) level 3 Necromancy [Concentration] [SOL] + +**[Warlock,Wizard]** Grants you a life-draining melee attack for one minute. -# 200. - Wind Wall (V,S) level 3 Evocation [Concentration] [Druid,Ranger] [SOL] +# 200. - Wind Wall (V,S) level 3 Evocation [Concentration] [SOL] + +**[Druid,Ranger]** Create a wall of wind that causes damage, pushes creatures and objects away, and disperses fogs and gases. -# 201. - Winter's Breath (V,S) level 3 Conjuration ] [UB] +# 201. - Winter's Breath (V,S) level 3 Conjuration [UB] + +**[Druid,Sorcerer,Wizard]** Create a blast of cold wind to chill your enemies and knock them prone. -# 202. - *Aura of Life* © (V) level 4 Abjuration [Concentration] ] [UB] +# 202. - *Aura of Life* © (V) level 4 Abjuration [Concentration] [UB] + +**[Cleric,Paladin]** Life-preserving energy radiates from you in an aura with a 30-foot radius. Until the spell ends, the aura moves with you, centered on you. Each non-hostile creature in the aura, including you, has resistance to necrotic damage, and its hit point maximum can't be reduced. In addition, a non-hostile, living creature regains 1 hit point when it starts its turn in the aura with 0 hit points. -# 203. - *Aura of Purity* © (V) level 4 Abjuration [Concentration] ] [UB] +# 203. - *Aura of Purity* © (V) level 4 Abjuration [Concentration] [UB] + +**[Cleric,Paladin]** Purifying energy radiates from you in an aura with a 30-foot radius. Until the spell ends, the aura moves with you, centered on you. Each non-hostile creature in the aura, including you, can't become diseased, has resistance to poison damage, and has advantage on saving throws against effects that cause any of the following conditions: blinded, charmed, deafened, frightened, paralyzed, poisoned, and stunned. -# 204. - Banishment (V,S) level 4 Abjuration [Concentration] [Cleric,Paladin,Sorcerer,Warlock,Wizard] [SOL] +# 204. - Banishment (V,S) level 4 Abjuration [Concentration] [SOL] + +**[Cleric,Paladin,Sorcerer,Warlock,Wizard]** Banishes a creature as long as you concentrate. The creature can be permanently banished if it is extraplanar. -# 205. - Black Tentacles (V,S) level 4 Conjuration [Concentration] [Wizard] [SOL] +# 205. - Black Tentacles (V,S) level 4 Conjuration [Concentration] [SOL] + +**[Wizard]** Conjures black tentacles that restrain and damage creatures within the area of effect. -# 206. - Blessing of Rime (V,S) level 4 Evocation ] [UB] +# 206. - Blessing of Rime (V,S) level 4 Evocation [UB] + +**[Bard,Druid,Ranger]** You summon a chill wind that numbs the pain of your allies. Choose up to three creatures within range. Each creature gains 3d8 temporary hit points for the duration. While a creature has these hit points, if it would make a Constitution saving throw, it gains advantage on the roll. When you cast this spell using a spell slot of 5th level or higher, the temporary hit points increase by 1d8 for each slot level above 4th. -# 207. - Blight (V,S) level 4 Necromancy [Druid,Sorcerer,Warlock,Wizard] [SOL] +# 207. - Blight (V,S) level 4 Necromancy [SOL] + +**[Druid,Sorcerer,Warlock,Wizard]** Drains life from a creature, causing massive necrotic damage. -# 208. - Brain Bulwark (V) level 4 Abjuration ] [UB] +# 208. - Brain Bulwark (V) level 4 Abjuration [UB] + +**[Artificer,Bard,Sorcerer,Warlock,Wizard]** For the duration, you or one willing creature you can see within range has resistance to psychic damage, as well as Immunity to the Charmed, Frightened, Fear, Mind dominated and Mind controlled conditions. -# 209. - Confusion (V,S) level 4 Enchantment [Concentration] [Bard,Druid,Sorcerer,Wizard] [SOL] +# 209. - Confusion (V,S) level 4 Enchantment [Concentration] [SOL] + +**[Bard,Druid,Sorcerer,Wizard]** Creates confusion and erratic behavior in a creature, possibly leading it to attack its allies. -# 210. - Conjure 4 Elementals (V,S) level 4 Conjuration [Concentration] ] [SOL] +# 210. - Conjure 4 Elementals (V,S) level 4 Conjuration [Concentration] [SOL] + 4 elementals are conjured (CR 1/2). -# 211. - Conjure Minor Elementals (V,S) level 4 Conjuration [Concentration] [Druid,Wizard] [SOL] +# 211. - Conjure Minor Elementals (V,S) level 4 Conjuration [Concentration] [SOL] + +**[Druid,Wizard]** Conjure elemental creatures under your command, which are dismissed when the spell ends or is broken. -# 212. - Death Ward (V,S) level 4 Abjuration [Cleric,Paladin] [SOL] +# 212. - Death Ward (V,S) level 4 Abjuration [SOL] + +**[Cleric,Paladin]** Protects the creature once against instant death or being reduced to 0 hit points. -# 213. - Dimension Door (V) level 4 Conjuration [Bard,Sorcerer,Warlock,Wizard] [SOL] +# 213. - Dimension Door (V) level 4 Conjuration [SOL] + +**[Bard,Sorcerer,Warlock,Wizard]** Transfers the caster and a friendly creature to a specified destination. -# 214. - Dominate Beast (V,S) level 4 Enchantment [Concentration] [Druid,Sorcerer] [SOL] +# 214. - Dominate Beast (V,S) level 4 Enchantment [Concentration] [SOL] + +**[Druid,Sorcerer]** Grants you control over an enemy beast. -# 215. - Dreadful Omen (V,S) level 4 Enchantment [Bard,Warlock] [SOL] +# 215. - Dreadful Omen (V,S) level 4 Enchantment [SOL] + +**[Bard,Warlock]** You whisper dreadful words that cause immense mental anguish in your enemies. On a failed wisdom saving throw, they take psychic damage and become frightened until the end of their next turn, moving away from you as much as possible. On a successful save, they take half as much damage and are not frightened. -# 216. - *Elemental Bane* © (V,S) level 4 Transmutation [Concentration] ] [UB] +# 216. - *Elemental Bane* © (V,S) level 4 Transmutation [Concentration] [UB] + +**[Artificer,Druid,Warlock,Wizard]** Choose one creature you can see within range, and choose one of the following damage types: acid, cold, fire, lightning, or thunder. The target must succeed on a Constitution saving throw or be affected by the spell for its duration. The first time each turn the affected target takes non-recurrent damage of the chosen type, the target takes an extra 2d6 damage of that type. Moreover, the target loses any resistance to that damage type until the spell ends. When you cast this spell using a spell slot of 5th level or higher, you can target one additional creature for each slot level above 4th. The creatures must be within 30 feet of each other when you target them. -# 217. - Fire Shield (V,S) level 4 Evocation [Sorcerer,Wizard] [SOL] +# 217. - Fire Shield (V,S) level 4 Evocation [SOL] + +**[Sorcerer,Wizard]** Grants resistance to fire or cold, and damages creatures attacking the caster with melee attacks. -# 218. - Freedom of Movement (V,S) level 4 Abjuration [Artificer,Bard,Cleric,Druid,Ranger] [SOL] +# 218. - Freedom of Movement (V,S) level 4 Abjuration [SOL] + +**[Artificer,Bard,Cleric,Druid,Ranger]** Grants immunity to movement restrictions, as well as being paralyzed or restrained. -# 219. - Giant Insect (V,S) level 4 Transmutation [Concentration] [Druid] [SOL] +# 219. - Giant Insect (V,S) level 4 Transmutation [Concentration] [SOL] + +**[Druid]** Conjures a giant version of a natural insect or arthropod. -# 220. - *Gravity Sinkhole* © (V,S) level 4 Evocation ] [UB] +# 220. - *Gravity Sinkhole* © (V,S) level 4 Evocation [UB] + +**[Wizard]** A 20-foot-radius sphere of crushing force forms at a point you can see within range and tugs at the creatures there. Each creature in the sphere must make a Constitution saving throw. On a failed save, the creature takes 5d10 force damage, and is pulled in a straight line toward the center of the sphere, ending in an unoccupied space as close to the center as possible. On a successful save, the creature takes half as much damage and isn't pulled. When you cast this spell using a spell slot of 5th level or higher, the damage increases by 1d10 for each slot level above 4th. -# 221. - Greater Invisibility (V,S) level 4 Illusion [Concentration] [Bard,Sorcerer,Wizard] [SOL] +# 221. - Greater Invisibility (V,S) level 4 Illusion [Concentration] [SOL] + +**[Bard,Sorcerer,Wizard]** Target becomes invisible for the duration, even when attacking or casting spells. -# 222. - Guardian of Faith (V) level 4 Conjuration [Cleric] [SOL] +# 222. - Guardian of Faith (V) level 4 Conjuration [SOL] + +**[Cleric]** Conjures a large spectral guardian that damages approaching enemies. -# 223. - *Guardian of Nature* © (V) level 4 Transmutation [Concentration] ] [UB] +# 223. - *Guardian of Nature* © (V) level 4 Transmutation [Concentration] [UB] + +**[Druid,Ranger]** A nature spirit answers your call and transforms you into a powerful guardian. The transformation lasts until the spell ends. You choose between a Beast or a Tree form. -# 224. - Ice Storm (V,S) level 4 Evocation [Druid,Sorcerer,Wizard] [SOL] +# 224. - Ice Storm (V,S) level 4 Evocation [SOL] + +**[Druid,Sorcerer,Wizard]** Causes bludgeoning and cold damage in the area, and turns the ground into difficult terrain. -# 225. - Identify Creatures (V,S) level 4 Divination [Wizard] [SOL] +# 225. - Identify Creatures (V,S) level 4 Divination [SOL] + +**[Wizard]** Reveals full bestiary knowledge for the affected creatures. -# 226. - Irresistible Performance (V) level 4 Enchantment ] [UB] +# 226. - Irresistible Performance (V) level 4 Enchantment [UB] + +**[Bard]** You weave a song into the air, causing those who hear it to applaud its magnificence. All creatures of your choice inside a 30-foot-cube within range must make a Charisma saving throw or be forced to clap and shout until the start of your next turn. A creature that is charmed by you always fails this saving throw. A clapping creature cannot perform any actions that require their hands or mouth but can otherwise act normally. This spell has no effect on creatures that are immune to charm. -# 227. - *Mordenkainen's Faithful Hound* © (V,S) level 4 Conjuration ] [UB] +# 227. - *Mordenkainen's Faithful Hound* © (V,S) level 4 Conjuration [UB] + +**[Artificer,Wizard]** You conjure a phantom watchdog in an unoccupied space that you can see within range, where it remains for the duration. The hound has Darkvision up to 60 ft, Truesight up to 80 ft, is invisible to all creatures except you and can't be harmed. During each of your turns, the hound can attempt to bite one creature within 5 feet of it that is hostile to you as a free action. The hound's attack bonus is equal to your spellcasting ability modifier + your proficiency bonus. On a hit, it deals 4d8 piercing damage. -# 228. - Phantasmal Killer (V,S) level 4 Illusion [Concentration] [Wizard] [SOL] +# 228. - Phantasmal Killer (V,S) level 4 Illusion [Concentration] [SOL] + +**[Wizard]** Causes psychic damage to the target creature with each turn, unless a saving throw is successful or the effect ends. -# 229. - Psionic Blast (V) level 4 Evocation ] [UB] +# 229. - Psionic Blast (V) level 4 Evocation [UB] + +**[Sorcerer,Warlock,Wizard]** You unleash a debilitating wave of mental power in a 30-foot cone. Each creature in the area must make an Intelligence saving throw. On a failed save, a target takes 5d8 psychic damage, becomes dazzled and has its movement speed halved until the end of your next turn. On a successful save, a target only takes half as much damage. When you cast this spell using a spell slot of 4th level or higher, the damage increases by 1d8 for each slot level above 4th. -# 230. - *Raulothim's Psychic Lance* © (V) level 4 Enchantment ] [UB] +# 230. - *Raulothim's Psychic Lance* © (V) level 4 Enchantment [UB] + +**[Bard,Sorcerer,Warlock,Wizard]** You unleash a shimmering lance of psychic power from your forehead at a creature that you can see within range. It must succeed on an Intelligence saving throw or take 7d6 psychic damage and be incapacitated until the end of your next turn. On a successful save, the creature takes half damage and isn't incapacitated. At Higher Levels. When you cast this spell using a spell slot of 4th level or higher, the damage increases by 1d6 for each slot level above 4th. -# 231. - *Sickening Radiance* © (V,S) level 4 Evocation [Concentration] ] [UB] +# 231. - *Sickening Radiance* © (V,S) level 4 Evocation [Concentration] [UB] + +**[Sorcerer,Warlock,Wizard]** Dim light spreads within a 30-foot-radius sphere centered on a point you choose within range. The light spreads around corners, and it lasts until the spell ends. When a creature moves into the spell's area for the first time on a turn or starts its turn there, that creature must succeed on a Constitution saving throw or take 4d10 radiant damage, and it suffers one level of exhaustion and emits a dim light in a 5-foot radius. This light makes it impossible for the creature to benefit from being invisible. The light and any levels of exhaustion caused by this spell go away when the spell ends. -# 232. - *Staggering Smite* © (V) level 4 Evocation [Concentration] ] [UB] +# 232. - *Staggering Smite* © (V) level 4 Evocation [Concentration] [UB] + +**[Paladin]** The next time you hit a creature with a weapon attack during this spell's duration, your weapon pierces both body and mind, and the attack deals an extra 4d6 psychic damage to the target. The target must make a Wisdom saving throw. On a failed save, it has disadvantage on attack rolls and ability checks, and can't take reactions, until the end of its next turn. -# 233. - Stoneskin (M,V,S) level 4 Abjuration [Concentration] [Artificer,Druid,Ranger,Sorcerer,Wizard] [SOL] +# 233. - Stoneskin (M,V,S) level 4 Abjuration [Concentration] [SOL] + +**[Artificer,Druid,Ranger,Sorcerer,Wizard]** Grants resistance to non-magical bludgeoning, slashing, and piercing damage. -# 234. - *Vitriolic Sphere* © (V,S) level 4 Evocation ] [UB] +# 234. - *Vitriolic Sphere* © (V,S) level 4 Evocation [UB] + +**[Sorcerer,Wizard]** You point at a place within range, and a glowing 1-foot ball of emerald acid streaks there and explodes in a 20-foot radius. Each creature in that area must make a Dexterity saving throw. On a failed save, a creature takes 10d4 acid damage and 5d4 acid damage at the end of its next turn. On a successful save, a creature takes half the initial damage and no damage at the end of its next turn. When you cast this spell using a spell slot of 5th level or higher, the initial damage increases by 2d4 for each slot level above 4th. -# 235. - Wall of Fire (V,S) level 4 Evocation [Concentration] [Druid,Sorcerer,Wizard] [SOL] +# 235. - Wall of Fire (V,S) level 4 Evocation [Concentration] [SOL] + +**[Druid,Sorcerer,Wizard]** Create a burning wall that injures creatures in or next to it. -# 236. - *Banishing Smite* © (V) level 5 Abjuration [Concentration] ] [UB] +# 236. - *Banishing Smite* © (V) level 5 Abjuration [Concentration] [UB] + +**[Paladin]** Your next hit deals additional 5d10 force damage with your weapon. Additionally, if this attack reduces the target to 50 hit points of fewer, you banish it for 1 min. -# 237. - *Circle of Power* © (V) level 5 Abjuration [Concentration] ] [UB] +# 237. - *Circle of Power* © (V) level 5 Abjuration [Concentration] [UB] + +**[Paladin]** Divine energy radiates from you, distorting and diffusing magical energy within 30 feet of you. Until the spell ends, the sphere moves with you, centered on you. For the duration, each friendly creature in the area, including you, has advantage on saving throws against spells and other magical effects. Additionally, when an affected creature succeeds on a saving throw made against a spell or magical effect that allows it to make a saving throw to take only half damage, it instead takes no damage if it succeeds on the saving throws. -# 238. - Cloudkill (V,S) level 5 Conjuration [Concentration] [Sorcerer,Wizard] [SOL] +# 238. - Cloudkill (V,S) level 5 Conjuration [Concentration] [SOL] + +**[Sorcerer,Wizard]** Creates an obscuring and poisonous cloud. The cloud moves every round. -# 239. - Cone of Cold (V,S) level 5 Evocation [Sorcerer,Wizard] [SOL] +# 239. - Cone of Cold (V,S) level 5 Evocation [SOL] + +**[Sorcerer,Wizard]** Inflicts massive cold damage in the cone of effect. -# 240. - Conjure Elemental (V,S) level 5 Conjuration [Concentration] [Druid,Wizard] [SOL] +# 240. - Conjure Elemental (V,S) level 5 Conjuration [Concentration] [SOL] + +**[Druid,Wizard]** Conjures an elemental of the chosen element that fights alongside you. If you lose concentration, the elemental remains and becomes hostile. -# 241. - Contagion (V,S) level 5 Necromancy [Cleric,Druid] [SOL] +# 241. - Contagion (V,S) level 5 Necromancy [SOL] + +**[Cleric,Druid]** Hit a creature to inflict a disease from the options. -# 242. - *Dawn* © (V,S) level 5 Evocation [Concentration] ] [UB] +# 242. - *Dawn* © (V,S) level 5 Evocation [Concentration] [UB] + +**[Cleric,Wizard]** The light of dawn shines down on a location you specify within range. Until the spell ends, a 30-foot-radius, 40-foot-high cylinder of bright light glimmers there. This light is sunlight. When the cylinder appears, each creature in it must make a Constitution saving throw, taking 4d10 radiant damage on a failed save, or half as much damage on a successful one. A creature must also make this saving throw whenever it ends its turn in the cylinder. If you're within 60 feet of the cylinder, you can move it up to 60 feet as a bonus action on your turn. -# 243. - *Destructive Wave* © (V) level 5 Evocation ] [UB] +# 243. - *Destructive Wave* © (V) level 5 Evocation [UB] + +**[Paladin]** You strike the ground, creating a burst of divine energy that ripples outward from you. Each creature you choose within 30 feet of you must succeed on a Constitution saving throw or take 5d6 thunder damage, as well as 5d6 radiant or necrotic damage, and be knocked prone. A creature that succeeds on its saving throw takes half as much damage and isn't knocked prone. -# 244. - Dispel Evil and Good (V,S) level 5 Abjuration [Concentration] [Cleric,Paladin] [SOL] +# 244. - Dispel Evil and Good (V,S) level 5 Abjuration [Concentration] [SOL] + +**[Cleric,Paladin]** Celestial, elementals, feys, fiends, and undead have disadvantage on attacks against you. This spell also allows you to cancel hostile enchantments or dismiss extraplanar creatures hit by your attacks once. -# 245. - Dominate Person (V,S) level 5 Enchantment [Concentration] [Bard,Sorcerer,Wizard] [SOL] +# 245. - Dominate Person (V,S) level 5 Enchantment [Concentration] [SOL] + +**[Bard,Sorcerer,Wizard]** Grants you control over an enemy creature. -# 246. - *Far Step* © (V) level 5 Conjuration [Concentration] ] [UB] +# 246. - *Far Step* © (V) level 5 Conjuration [Concentration] [UB] + +**[Sorcerer,Warlock,Wizard]** You teleport up to 60 ft to an unoccupied space you can see. On each of your turns before the spell ends, you can use a bonus action to teleport in this way again. -# 247. - Flame Strike (V,S) level 5 Evocation [Cleric] [SOL] +# 247. - Flame Strike (V,S) level 5 Evocation [SOL] + +**[Cleric]** Conjures a burning column of fire and radiance affecting all creatures inside. -# 248. - Greater Restoration (V,S) level 5 Abjuration [Artificer,Bard,Cleric,Druid] [SOL] +# 248. - Greater Restoration (V,S) level 5 Abjuration [SOL] + +**[Artificer,Bard,Cleric,Druid]** Removes one detrimental condition, such as a charm or curse, or an effect that reduces an ability score or hit points. -# 249. - Hold Monster (V,S) level 5 Enchantment [Concentration] [Bard,Sorcerer,Warlock,Wizard] [SOL] +# 249. - Hold Monster (V,S) level 5 Enchantment [Concentration] [SOL] + +**[Bard,Sorcerer,Warlock,Wizard]** Paralyzes a creature unless it succeeds a WIS saving throw. No effect on undead. -# 250. - *Immolation* © (V) level 5 Evocation [Concentration] ] [UB] +# 250. - *Immolation* © (V) level 5 Evocation [Concentration] [UB] + +**[Sorcerer,Wizard]** Flames wreathe one creature you can see within range. The target must make a Dexterity saving throw. It takes 8d6 fire damage on a failed save, or half as much damage on a successful one. On a failed save, the target also burns for the spell's duration. The burning target sheds bright light in a 30-foot radius and dim light for an additional 30 feet and takes 8d6 fire damage at the start of each of its turns. -# 251. - Insect Plague (V,S) level 5 Conjuration [Concentration] [Cleric,Druid,Sorcerer] [SOL] +# 251. - Insect Plague (V,S) level 5 Conjuration [Concentration] [SOL] + +**[Cleric,Druid,Sorcerer]** Summons a sphere of biting insects. -# 252. - Mantle of Thorns (V,S) level 5 Transmutation [Concentration] ] [UB] +# 252. - Mantle of Thorns (V,S) level 5 Transmutation [Concentration] [UB] + +**[Druid]** Surround yourself with an aura of thorns. Those that start or walk through take 2d8 piercing damage. This damage scales at higher levels by 1d8 per slot. -# 253. - Mass Cure Wounds (V,S) level 5 Evocation [Bard,Cleric,Druid] [SOL] +# 253. - Mass Cure Wounds (V,S) level 5 Evocation [SOL] + +**[Bard,Cleric,Druid]** Heals up to 6 creatures. -# 254. - Mind Twist (V,S) level 5 Enchantment [Sorcerer,Warlock,Wizard] [SOL] +# 254. - Mind Twist (V,S) level 5 Enchantment [SOL] + +**[Sorcerer,Warlock,Wizard]** Causes massive psychic damage to all creatures around you, and incapacitates them if they fail their INT saving throw. -# 255. - Raise Dead (M,V,S) level 5 Necromancy [Bard,Cleric,Paladin] [SOL] +# 255. - Raise Dead (M,V,S) level 5 Necromancy [SOL] + +**[Bard,Cleric,Paladin]** Brings one creature back to life, up to 10 days after death. -# 256. - *Skill Empowerment* © (V,S) level 5 Divination ] [UB] +# 256. - *Skill Empowerment* © (V,S) level 5 Divination [UB] + +**[Artificer,Bard,Sorcerer,Wizard]** Your magic deepens a creature's understanding of its own talent. You touch one willing creature and give it expertise in one skill of your choice; until the spell ends, the creature doubles its proficiency bonus for ability checks it makes that use the chosen skill. For 1 hour, you have proficiency in the chosen skill. The spell ends early if you cast it again. You must choose a skill in which the target is proficient and that isn't already benefiting from expertise. -# 257. - Sonic Boom (V,S) level 5 Evocation ] [UB] +# 257. - Sonic Boom (V,S) level 5 Evocation [UB] + +**[Sorcerer,Wizard]** A small orb the same color as the balloon used appears at a point you choose within range then expands with a loud crack into an explosion of force. Each creature in a 30-foot radius must make a Strength saving throw. A target is pushed up to 30 feet away from the center and dealt 6d8 thunder damage on a failed save, or half as much damage and no movement on a successful one. -# 258. - *Steel Wind Strike* © (M,S) level 5 Conjuration ] [UB] +# 258. - *Steel Wind Strike* © (M,S) level 5 Conjuration [UB] + +**[Ranger,Wizard]** You flourish the weapon used in the casting and then vanish to strike like the wind. Choose up to five creatures you can see within range. Make a melee spell attack against each target. On a hit, a target takes 6d10 force damage. You can then teleport to an unoccupied space you can see within 5 feet of one of the targets you hit or missed. -# 259. - *Synaptic Static* © (V) level 5 Evocation ] [UB] +# 259. - *Synaptic Static* © (V) level 5 Evocation [UB] + +**[Bard,Sorcerer,Warlock,Wizard]** You choose a point within range and cause psychic energy to explode there. Each creature in a 20-foot-radius sphere centered on that point must make an Intelligence saving throw. A target takes 8d6 psychic damage on a failed save, or half as much damage on a successful After a failed save, a target has muddled thoughts for 1 minute. During that time, it rolls a d6 and subtracts the number rolled from all its attack rolls and ability checks. The target can make an Intelligence saving throw at the end of each of its turns, ending the effect on itself on a success. -# 260. - *Telekinesis* © (V,S) level 5 Transmutation [Concentration] ] [UB] +# 260. - *Telekinesis* © (V,S) level 5 Transmutation [Concentration] [UB] + +**[Sorcerer,Wizard]** You can try to move a Huge or smaller creature. Make an ability check with your spellcasting ability contested by the creature's Strength check. If you win the contest, you move the creature up to 30 feet in any direction, but not beyond the range of this spell. Until the end of your next turn, the creature is restrained in your telekinetic grip. On subsequent rounds, you can use your action to attempt to maintain your telekinetic grip on the creature by repeating the contest, or target a new creature, ending the restrained effect on the previously affected creature. -# 261. - Blade Barrier (V,S) level 6 Evocation [Concentration] [Cleric] [SOL] +# 261. - Blade Barrier (V,S) level 6 Evocation [Concentration] [SOL] + +**[Cleric]** Conjures a wall of razor sharp blades which causes 6d10 slashing damage to anyone crossing it -# 262. - Chain Lightning (V,S) level 6 Evocation [Sorcerer,Wizard] [SOL] +# 262. - Chain Lightning (V,S) level 6 Evocation [SOL] + +**[Sorcerer,Wizard]** Target a creature with lightning, which can arc to 3 other targets within 6 cells. -# 263. - Circle of Death (M,V,S) level 6 Necromancy [Sorcerer,Warlock,Wizard] [SOL] +# 263. - Circle of Death (M,V,S) level 6 Necromancy [SOL] + +**[Sorcerer,Warlock,Wizard]** A sphere of negative energy causes Necrotic damage from a point you choose -# 264. - Conjure Fey (V,S) level 6 Conjuration [Concentration] [Druid,Warlock] [SOL] +# 264. - Conjure Fey (V,S) level 6 Conjuration [Concentration] [SOL] + +**[Druid,Warlock]** Conjures a fey creature of challenge rating 1 to 6 to fight alongside you. If you lose concentration, the creature stays but becomes hostile. -# 265. - Disintegrate (V,S) level 6 Transmutation [Sorcerer,Wizard] [SOL] +# 265. - Disintegrate (V,S) level 6 Transmutation [SOL] + +**[Sorcerer,Wizard]** Causes massive force damage on the target, which can be disintegrated if reduced to 0 hit points -# 266. - Eyebite (V,S) level 6 Necromancy [Concentration] [Bard,Sorcerer,Warlock,Wizard] [SOL] +# 266. - Eyebite (V,S) level 6 Necromancy [Concentration] [SOL] + +**[Bard,Sorcerer,Warlock,Wizard]** Your eyes gain a specific property which can target a creature each turn -# 267. - *Fizban's Platinum Shield* © (M,V,S) level 6 Abjuration [Concentration] ] [UB] +# 267. - *Fizban's Platinum Shield* © (M,V,S) level 6 Abjuration [Concentration] [UB] + +**[Sorcerer,Wizard]** You create a field of silvery light that surrounds a creature of your choice within range. The field sheds dim light out to 5 feet. While surrounded by the field, a creature gains the following benefits: • The creature has half cover. @@ -1093,59 +1621,87 @@ You create a field of silvery light that surrounds a creature of your choice wit • If the creature is subjected to an effect that allows it to make a Dexterity saving throw to take only half damage, the creature instead takes no damage if it succeeds on the saving throw, and only half damage if it fails. As a bonus action on subsequent turns, you can move the field to another creature within 60 feet of the field. -# 268. - Flash Freeze (V,S) level 6 Evocation ] [UB] +# 268. - Flash Freeze (V,S) level 6 Evocation [UB] + +**[Druid,Sorcerer,Warlock]** You attempt to encase a creature you can see within range in a prison of solid ice. The target must make a Dexterity saving throw. On a failed save, the target takes 10d6 cold damage and becomes restrained in layers of thick ice. On a successful save, the target takes half as much damage and is not restrained. The spell can only be used on creatures up to large size. To break out, the restrained target can make a Strength check as an action against your spell save DC. On success, the target escapes and is no longer restrained. When you cast this spell using a spell slot of 7th level or higher, the cold damage increases by 2d6 for each slot level above 6th. -# 269. - Freezing Sphere (V,S) level 6 Evocation [Wizard] [SOL] +# 269. - Freezing Sphere (V,S) level 6 Evocation [SOL] + +**[Wizard]** Toss a huge ball of cold energy that explodes on impact -# 270. - Globe Of Invulnerability (V,S) level 6 Abjuration [Concentration] [Sorcerer,Wizard] [SOL] +# 270. - Globe Of Invulnerability (V,S) level 6 Abjuration [Concentration] [SOL] + +**[Sorcerer,Wizard]** A sphere surrounding you prevents any spell up to 5th level to affect anyone inside it. -# 271. - Harm (V,S) level 6 Necromancy [Cleric] [SOL] +# 271. - Harm (V,S) level 6 Necromancy [SOL] + +**[Cleric]** Inflicts devastating necrotic damage and reduces the maximum hit points accordingly. Cannot drop the target below 1 hit points -# 272. - Heal (V,S) level 6 Evocation [Cleric,Druid] [SOL] +# 272. - Heal (V,S) level 6 Evocation [SOL] + +**[Cleric,Druid]** Heals 70 hit points and also removes blindness and diseases -# 273. - Heroes Feast (M,V,S) level 6 Conjuration [Cleric,Druid] [SOL] +# 273. - Heroes Feast (M,V,S) level 6 Conjuration [SOL] + +**[Cleric,Druid]** Summons a feast which cures most ailments and grants immunity to poisonand being frightened, WIS save advantage, and increased maximum hitpoints -# 274. - Hilarity (V) level 6 Enchantment [Concentration] [Bard,Wizard] [SOL] +# 274. - Hilarity (V) level 6 Enchantment [Concentration] [SOL] + +**[Bard,Wizard]** Choose one target. They fall down laughing, becoming prone and incapacitated, and take psychic damage until they save at the end of one of their turns, or until the spell ends. -# 275. - Poison Wave (M,V,S) level 6 Evocation ] [UB] +# 275. - Poison Wave (M,V,S) level 6 Evocation [UB] + +**[Wizard]** A poisonous wave erupts from you, engulfing those close by. Each creature within the spell's radius must make a Constitution saving throw, taking 6d10 poison damage on a failure, or half as much damage on a successful one. A creature who fails their saving throw is also poisoned for 1 minute, and can repeat the saving throw at the end of each of its turn. When you cast this spell using a slot of 7th level or higher, the damage increases by 1d10 for each slot level above 6th. -# 276. - Ring of Blades (M,V,S) level 6 Conjuration [Concentration] ] [UB] +# 276. - Ring of Blades (M,V,S) level 6 Conjuration [Concentration] [UB] + +**[Wizard]** You raise both hands as you evoke six transparent blades around you as a bonus action. When you cast this spell, and as a bonus action on each subsequent turn, you can throw one of these blades at a creature within 60 feet from you. Make a ranged spell attack. On a hit, the target takes 4d10 force damage. When you cast this spell using a spell slot of 7th level or higher, the damage of each blade increases by 1d10 for each slot level above 6th. -# 277. - *Scatter* © (V) level 6 Conjuration ] [UB] +# 277. - *Scatter* © (V) level 6 Conjuration [UB] + +**[Sorcerer,Warlock,Wizard]** The air quivers around up to five creatures of your choice that you can see within range. An unwilling creature must succeed on a Wisdom saving throw to resist this spell. You teleport each affected target to an unoccupied space that you can see within 120 feet of you. That space must be on the ground or on a floor. -# 278. - Shelter from Energy (V,S) level 6 Abjuration ] [UB] +# 278. - Shelter from Energy (V,S) level 6 Abjuration [UB] + +**[Cleric,Druid,Sorcerer,Wizard]** Choose one of the following damage types: acid, cold, fire, lightning, necrotic, radiant, or thunder, and then choose up to six willing creatures that you can see within range. For 1 hour, targets have resistance to that damage type. When you cast this spell using a spell slot of 7th level or higher, you may target up to one additional willing creature for each slot level above 6th. -# 279. - Sunbeam (V,S) level 6 Evocation [Concentration] [Druid,Sorcerer,Wizard] [SOL] +# 279. - Sunbeam (V,S) level 6 Evocation [Concentration] [SOL] + +**[Druid,Sorcerer,Wizard]** You conjure a line of radiance which can burn and blind creatures in the line of effect; undead and oozes save with disadvantage. The beam can be retargeted each turn -# 280. - *Tasha's Otherworldly Guise* © (M,V,S) level 6 Transmutation [Concentration] ] [UB] +# 280. - *Tasha's Otherworldly Guise* © (M,V,S) level 6 Transmutation [Concentration] [UB] + +**[Sorcerer,Warlock,Wizard]** Uttering an incantation, you draw on the magic of the Lower Planes or Upper Planes (your choice) to transform yourself. -# 281. - *Tenser's Transformation* © (V,S) level 6 Transmutation [Concentration] ] [UB] +# 281. - *Tenser's Transformation* © (V,S) level 6 Transmutation [Concentration] [UB] + +**[Wizard]** You endow yourself with endurance and martial prowess fueled by magic. Until the spell ends, you can't cast spells, and you gain the following benefits: • You gain 50 temporary hit points. If any of these remain when the spell ends, they are lost. @@ -1155,178 +1711,263 @@ You endow yourself with endurance and martial prowess fueled by magic. Until the • You can attack twice, instead of once, when you take the Attack action on your turn. Immediately after the spell ends, you must succeed on a DC 15 Constitution saving throw or suffer one level of exhaustion. -# 282. - True Seeing (V,S) level 6 Divination [Bard,Cleric,Sorcerer,Warlock,Wizard] [SOL] +# 282. - True Seeing (V,S) level 6 Divination [SOL] + +**[Bard,Cleric,Sorcerer,Warlock,Wizard]** A creature you touch gains True Sight for one hour -# 283. - Wall of Thorns (V,S) level 6 Conjuration [Concentration] [Druid] [SOL] +# 283. - Wall of Thorns (V,S) level 6 Conjuration [Concentration] [SOL] + +**[Druid]** Creates a wall of tough of needle-sharp thorns, that hurts and slows every creature in it. -# 284. - Arcane Sword (M,V,S) level 7 Evocation [Concentration] [Bard,Wizard] [SOL] +# 284. - Arcane Sword (M,V,S) level 7 Evocation [Concentration] [SOL] + +**[Bard,Wizard]** Summon a weapon that fights for you. -# 285. - Conjure Celestial (V,S) level 7 Conjuration [Concentration] [Cleric] [SOL] +# 285. - Conjure Celestial (V,S) level 7 Conjuration [Concentration] [SOL] + +**[Cleric]** Conjures a celestial creature of challenge rating 4 that fights alongside you. If you lose concentration, the creature is dismissed. -# 286. - *Crown of Stars* © (V,S) level 7 Evocation ] [UB] +# 286. - *Crown of Stars* © (V,S) level 7 Evocation [UB] + +**[Sorcerer,Warlock,Wizard]** Seven star-like motes of light appear and orbit your head until the spell ends. You can use a bonus action to send one of the motes streaking toward one creature or object within 120 feet of you. When you do so, make a ranged spell attack. On a hit, the target takes 4d12 radiant damage. Whether you hit or miss, the mote is expended. The spell ends early if you expend the last mote. If you have four or more motes remaining, they shed bright light in a 30-foot radius and dim light for an additional 30 feet. If you have one to three motes remaining, they shed dim light in a 30-foot radius. When you cast this spell using a spell slot of 8th level or higher, the number of motes created increases by two for each slot level above 7th. -# 287. - Delayed Blast Fireball (V,S) level 7 Evocation [Concentration] [Sorcerer,Wizard] [SOL] +# 287. - Delayed Blast Fireball (V,S) level 7 Evocation [Concentration] [SOL] + +**[Sorcerer,Wizard]** Conjures a ball of fire that grows more powerful with time, detonating when a creature enters its space or when the spell ends. -# 288. - Divine Word (V) level 7 Evocation [Cleric] [SOL] +# 288. - Divine Word (V) level 7 Evocation [SOL] + +**[Cleric]** Utter a divine word that inflicts various negative conditions on enemies you can see, based on their HP. Also banishes all celestials, elementals, feys, and fiends if they fail their saving throws. -# 289. - *Draconic Transformation* © (M,V,S) level 7 Transmutation [Concentration] ] [UB] +# 289. - *Draconic Transformation* © (M,V,S) level 7 Transmutation [Concentration] [UB] + +**[Druid,Sorcerer,Wizard]** With a roar, you draw on the magic of dragons to transform yourself, taking on draconic features. You gain the following benefits until the spell ends: • You have blindsight with a range of 30 feet. • When you cast this spell, and as a bonus action on subsequent turns for the duration, you can exhale shimmering energy in a 60-foot cone. Each creature in that area must make a Dexterity saving throw, taking 6d8 force damage on a failed save, or half as much damage on a successful one. • Incorporeal wings sprout from your back, giving you a flying speed of 60 feet. -# 290. - Finger of Death (V,S) level 7 Necromancy [Sorcerer,Warlock,Wizard] [SOL] +# 290. - Finger of Death (V,S) level 7 Necromancy [SOL] + +**[Sorcerer,Warlock,Wizard]** Send negative energy coursing through a creature within range. -# 291. - Fire Storm (V,S) level 7 Evocation [Cleric,Druid,Sorcerer] [SOL] +# 291. - Fire Storm (V,S) level 7 Evocation [SOL] + +**[Cleric,Druid,Sorcerer]** Causes a wide wall of roaring flames to burst up wherever you choose within range. -# 292. - Gravity Slam (V,S) level 7 Transmutation [Druid,Sorcerer,Warlock,Wizard] [SOL] +# 292. - Gravity Slam (V,S) level 7 Transmutation [SOL] + +**[Druid,Sorcerer,Warlock,Wizard]** Increase gravity to slam everyone in a specific area onto the ground. -# 293. - Prismatic Spray (V,S) level 7 Evocation [Sorcerer,Wizard] [SOL] +# 293. - Prismatic Spray (V,S) level 7 Evocation [SOL] + +**[Sorcerer,Wizard]** Each creature within the cone of effect is randomly affected by one or two (roll 8 on d8) rays with the following effects: -# 294. - Regenerate (V,S) level 7 Transmutation [Bard,Cleric,Druid] [SOL] +# 294. - Regenerate (V,S) level 7 Transmutation [SOL] + +**[Bard,Cleric,Druid]** Touch a creature and stimulate its natural healing ability. -# 295. - Rescue the Dying (V) level 7 Transmutation ] [UB] +# 295. - Rescue the Dying (V) level 7 Transmutation [UB] + +**[Cleric,Druid]** With a word, you call positive energy into the target's body to heal and ward it. The target regains a number of hit points equal to 4d10 + 30. It also gains temporary hit points equal to half that amount and resistance to all damage, both lasting until the end of your next turn. When you cast this spell using a spell slot of 8th level or higher, the healing increases by 2d10 for each slot level above 7th. -# 296. - Resurrection (M,V,S) level 7 Necromancy [Bard,Cleric,Druid] [SOL] +# 296. - Resurrection (M,V,S) level 7 Necromancy [SOL] + +**[Bard,Cleric,Druid]** Brings one creature back to life, up to 100 years after death. -# 297. - *Reverse Gravity* © (V,S) level 7 Transmutation [Concentration] ] [UB] +# 297. - *Reverse Gravity* © (V,S) level 7 Transmutation [Concentration] [UB] + +**[Druid,Sorcerer,Wizard]** This spell reverses gravity in a 50-foot-radius, 100-foot-high cylinder centered on a point within range. -# 298. - Symbol (V,S) level 7 Abjuration [Bard,Cleric,Wizard] [SOL] +# 298. - Symbol (V,S) level 7 Abjuration [SOL] + +**[Bard,Cleric,Wizard]** Inscribe a glyph on a surface. When an enemy starts its turn in the area or enters it, the glyph's effect is applied in a sphere with a 12-cell radius. -# 299. - *Abi-Dalzim's Horrid Wilting* © (V,S) level 8 Necromancy ] [UB] +# 299. - *Abi-Dalzim's Horrid Wilting* © (V,S) level 8 Necromancy [UB] + +**[Sorcerer,Wizard]** You draw the moisture from every creature in a 30-foot cube centered on a point you choose within range. Each creature in that area must make a Constitution saving throw. Constructs and undead aren't affected, and plants and ice elementals make this saving throw with disadvantage. A creature takes 10d8 necrotic damage on a failed save, or half as much damage on a successful one. -# 300. - Divine Blade (V,S) level 8 Evocation [Concentration] [Cleric] [SOL] +# 300. - Divine Blade (V,S) level 8 Evocation [Concentration] [SOL] + +**[Cleric]** A glowing blade of pure energy springs from your hand. On a hit, the target takes 6d8 radiant damage and must roll a Wisdom saving throw to avoid being stunned until the end of its next turn. -# 301. - Dominate Monster (V,S) level 8 Enchantment [Concentration] [Bard,Sorcerer,Warlock,Wizard] [SOL] +# 301. - Dominate Monster (V,S) level 8 Enchantment [Concentration] [SOL] + +**[Bard,Sorcerer,Warlock,Wizard]** Grants you control over an enemy creature of any type. -# 302. - Earthquake (V,S) level 8 Evocation [Concentration] [Cleric,Druid,Sorcerer] [SOL] +# 302. - Earthquake (V,S) level 8 Evocation [Concentration] [SOL] + +**[Cleric,Druid,Sorcerer]** You create a seismic disturbance that violently shakes the ground and the creatures standing on it for the duration of the spell. -# 303. - Feeblemind (V,S) level 8 Enchantment [Bard,Druid,Warlock,Wizard] [SOL] +# 303. - Feeblemind (V,S) level 8 Enchantment [SOL] + +**[Bard,Druid,Warlock,Wizard]** You blast the mind of one creature, attempting to shatter its intellect and personality. The target takes 4d6 psychic damage and must make an Intelligence saving throw. On a failed save, the creature's Intelligence, Charisma and Wisdom scores become 1 and it is unable to cast spells. These effects last for 1 minute. -# 304. - Holy Aura (V,S) level 8 Abjuration [Concentration] [Cleric] [SOL] +# 304. - Holy Aura (V,S) level 8 Abjuration [Concentration] [SOL] + +**[Cleric]** Allies within 6 cells of you when you cast Holy Aura gain advantage on all saving throws, and other creatures have disadvantage on attack rolls against them until the spell ends. In addition, when a fiend or an undead hits an affected creature with a melee attack, they must succeed on a Constitution saving throw or be blinded until the spell ends. -# 305. - Incendiary Cloud (V,S) level 8 Conjuration [Concentration] [Sorcerer,Wizard] [SOL] +# 305. - Incendiary Cloud (V,S) level 8 Conjuration [Concentration] [SOL] + +**[Sorcerer,Wizard]** A cloud of smoke appears in a sphere with a 4-cell radius. The cloud damages each creature inside it, and moves away from you each turn until the end of the spell's duration or until a moderate wind disperses the cloud. -# 306. - *Maddening Darkness* © (V) level 8 Evocation [Concentration] ] [UB] +# 306. - *Maddening Darkness* © (V) level 8 Evocation [Concentration] [UB] + +**[Warlock,Wizard]** Magical darkness spreads from a point you choose within range to fill a 60-foot-radius sphere until the spell ends. Shrieks, gibbering, and mad laughter can be heard within the sphere. On activation, and whenever a creature ends its turn in the sphere, it must make a Wisdom saving throw, taking 6d8 psychic damage on a failed save, or half as much damage on a successful one. -# 307. - Maze (V,S) level 8 Abjuration [Concentration] [Wizard] [SOL] +# 307. - Maze (V,S) level 8 Abjuration [Concentration] [SOL] + +**[Wizard]** You banish a creature that you can see within range into a labyrinthine demiplane. The target remains there for the spell's duration or until it escapes the maze. -# 308. - *Mind Blank* © (V,S) level 8 Transmutation ] [UB] +# 308. - *Mind Blank* © (V,S) level 8 Transmutation [UB] + +**[Bard,Wizard]** Until the spell ends, one willing creature you touch is immune to psychic damage, any effect that would sense its emotions or read its thoughts, divination spells, and the charmed condition. -# 309. - Power Word Stun (V) level 8 Enchantment [Bard,Sorcerer,Warlock,Wizard] [SOL] +# 309. - Power Word Stun (V) level 8 Enchantment [SOL] + +**[Bard,Sorcerer,Warlock,Wizard]** Overwhelm the mind of a creature that has 150 hit points or fewer, leaving it stunned. -# 310. - Soul Expulsion (V,S) level 8 Necromancy ] [UB] +# 310. - Soul Expulsion (V,S) level 8 Necromancy [UB] + +**[Cleric,Sorcerer,Wizard]** You blast a foe's soul with magical power, causing it to glow with otherwordly light. Choose one creature that you can see within range, which must make a Charisma saving throw. On a failed saving throw, the target takes 11d8 necrotic damage and is stunned until the start of your next turn. On a successful saving throw, the target takes half damage and isn't stunned. Each enemy other than the target that is within 60 feet of the target must make a Wisdom saving throw. On a failed save, a creature takes 7d8 radiant damage and has disadvantage on attack rolls until the end of your next turn. On a successful saving throw a creature takes half damage and nothing else. When this spell targets undead, the spell ignores any resistance or immunity to necrotic damage, and the target has disadvantage on the saving throw. When you cast this spell using a spell slot of 9th level, both the necrotic damage and radiant damage increase by 2d8. -# 311. - Spell Ward (V,S) level 8 Abjuration [Concentration] [Cleric,Wizard] [SOL] +# 311. - Spell Ward (V,S) level 8 Abjuration [Concentration] [SOL] + +**[Cleric,Wizard]** Creates a mobile globe that is impenetrable to enemy spells cast from outside it. -# 312. - Sunburst (V,S) level 8 Evocation [Druid,Sorcerer,Wizard] [SOL] +# 312. - Sunburst (V,S) level 8 Evocation [SOL] + +**[Druid,Sorcerer,Wizard]** Brilliant sunlight blazes in a sphere with a 12-cell radius. Each creature that fails a Constitution saving throw takes radiant damage and is blinded for 1 minute. Any darkness created by a spell in the area is dispelled. -# 313. - Thunderstorm (V,S) level 8 Transmutation [Cleric,Druid,Wizard] [SOL] +# 313. - Thunderstorm (V,S) level 8 Transmutation [SOL] + +**[Cleric,Druid,Wizard]** You create a blast of thunder in a sphere that causes thunder and lightning damage to everyone, and can blind or stun those who fail a CON saving throw. -# 314. - Wild Shapes (V,S) level 8 Transmutation [Concentration] ] [SOL] +# 314. - Wild Shapes (V,S) level 8 Transmutation [Concentration] [SOL] + Turns other creatures in to beasts for one day. -# 315. - *Foresight* © (V,S) level 9 Transmutation ] [UB] +# 315. - *Foresight* © (V,S) level 9 Transmutation [UB] + +**[Bard,Druid,Warlock,Wizard]** You touch a willing creature and bestow a limited ability to see into the immediate future. For the duration, the target can't be surprised and has advantage on attack rolls, ability checks, and saving throws. Additionally, other creatures have disadvantage on attack rolls against the target for the duration. -# 316. - *Invulnerability* © (M,V,S) level 9 Abjuration [Concentration] ] [UB] +# 316. - *Invulnerability* © (M,V,S) level 9 Abjuration [Concentration] [UB] + +**[Wizard]** You are immune to all damage until the spell ends. -# 317. - *Mass Heal* © (V,S) level 9 Transmutation ] [UB] +# 317. - *Mass Heal* © (V,S) level 9 Transmutation [UB] + +**[Cleric]** A flood of healing energy flows from you into injured creatures around you. You restore 120 hit points each to 6 creatures that you can see within range. Creatures healed by this spell are also cured of all diseases and any effect making them blinded or deafened. This spell has no effect on undead or constructs. -# 318. - *Meteor Swarm* © (V,S) level 9 Transmutation ] [UB] +# 318. - *Meteor Swarm* © (V,S) level 9 Transmutation [UB] + +**[Sorcerer,Wizard]** Blazing orbs of fire plummet to the ground at a single point you can see within range. Each creature in a 40-foot-radius sphere centered on the point you choose must make a Dexterity saving throw. The sphere spreads around corners. A creature takes 20d6 fire damage and 20d6 bludgeoning damage on a failed save, or half as much damage on a successful one. A creature in the area of more than one fiery burst is affected only once. -# 319. - *Power Word Heal* © (V,S) level 9 Enchantment ] [UB] +# 319. - *Power Word Heal* © (V,S) level 9 Enchantment [UB] + +**[Bard,Cleric]** A wave of healing energy washes over the creature you touch. The target regains all its hit points. If the creature is charmed, frightened, paralyzed, or stunned, the condition ends. If the creature is prone, it can use its reaction to stand up. This spell has no effect on undead or constructs. -# 320. - *Power Word Kill* © (V,S) level 9 Transmutation ] [UB] +# 320. - *Power Word Kill* © (V,S) level 9 Transmutation [UB] + +**[Bard,Sorcerer,Warlock,Wizard]** You utter a word of power that can compel one creature you can see within range to die instantly. If the creature you choose has 100 hit points or fewer, it dies. Otherwise, the spell has no effect. -# 321. - *Psychic Scream* © (S) level 9 Enchantment ] [UB] +# 321. - *Psychic Scream* © (S) level 9 Enchantment [UB] + +**[Bard,Sorcerer,Warlock,Wizard]** You unleash the power of your mind to blast the intellect of up to ten creatures of your choice that you can see within range. Each target must make an Intelligence saving throw. On a failed save, a target takes 14d6 psychic damage and is stunned for 1 minute. On a successful save, a target takes half as much damage and isn't stunned. A stunned target can make an Intelligence saving throw at the end of each of its turns. On a successful save, the stunning effect ends. -# 322. - *Shapechange* © (M,V,S) level 9 Transmutation [Concentration] ] [UB] +# 322. - *Shapechange* © (M,V,S) level 9 Transmutation [Concentration] [UB] + +**[Druid,Wizard]** You assume the form of a different creature for the duration. The new form can be of any creature with a challenge rating equal to your level or lower. -# 323. - *Time Stop* © (V) level 9 Transmutation ] [UB] +# 323. - *Time Stop* © (V) level 9 Transmutation [UB] + +**[Sorcerer,Wizard]** You briefly stop the flow of time for everyone but yourself. No time passes for other creatures, while you take 1d4+1 turns in a row, during which you can use actions and move as normal. This spell ends if one of the actions you use during this period, or any effects that you create during this period, affects a creature other than you. -# 324. - *Weird* © (V,S) level 9 Illusion [Concentration] ] [UB] +# 324. - *Weird* © (V,S) level 9 Illusion [Concentration] [UB] + +**[Warlock,Wizard]** Drawing on the deepest fears of a group of creatures, you create illusory creatures in their minds, visible only to them. Each enemy in a 30-foot-radius sphere centered on a point of your choice within range must make a Wisdom saving throw. On a failed save, a creature becomes frightened for the duration. The illusion calls on the creature's deepest fears, manifesting its worst nightmares as an implacable threat. At the end of each of the frightened creature's turns, it must succeed on a Wisdom saving throw or take 4d10 psychic damage. On a successful save, the spell ends for that creature. From 5e8cd94b42eb4365b2a95ae2f4a15c9b27fa99f9 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Fri, 6 Sep 2024 21:26:10 -0700 Subject: [PATCH 059/212] minor tweaks --- Documentation/Spells.md | 1105 ++++++++--------- .../Api/DatabaseHelper-RELEASE.cs | 5 - .../Builders/EffectFormBuilder.cs | 2 +- .../Displays/EncountersDisplay.cs | 6 +- .../Models/DocumentationContext.cs | 23 +- .../Spells/SpellBuildersLevel01.cs | 1 - .../Subclasses/InnovationWeapon.cs | 1 - 7 files changed, 568 insertions(+), 575 deletions(-) diff --git a/Documentation/Spells.md b/Documentation/Spells.md index 91c474c831..873ccbda3e 100644 --- a/Documentation/Spells.md +++ b/Documentation/Spells.md @@ -6,43 +6,43 @@ Your fingernails sharpen, ready to deliver a corrosive attack. Make a melee spel # 2. - Acid Splash (V,S) level 0 Conjuration [SOL] -**[Artificer,Sorcerer,Wizard]** +**[Artificer, Sorcerer, Wizard]** Launch an acid bolt. # 3. - Annoying Bee (V,S) level 0 Illusion [SOL] -**[Druid,Sorcerer,Wizard]** +**[Druid, Sorcerer, Wizard]** The target sees an illusional bee harassing them and has disadvantage on concentration checks until the start of their next turn. # 4. - *Blade Ward* © (V,S) level 0 Abjuration [UB] -**[Bard,Sorcerer,Warlock,Wizard]** +**[Bard, Sorcerer, Warlock, Wizard]** You extend your hand and trace a sigil of warding in the air. Until the end of your next turn, you have resistance against bludgeoning, piercing, and slashing damage dealt by weapon attacks. # 5. - *Booming Blade* © (M,S) level 0 Evocation [UB] -**[Artificer,Sorcerer,Warlock,Wizard]** +**[Artificer, Sorcerer, Warlock, Wizard]** You brandish the weapon used in the spell's casting and make a melee attack with it against one creature within 5 ft distance. On a hit, the target suffers the weapon attack's normal effects and then becomes sheathed in booming energy until the start of your next turn. If the target willingly moves 5 ft or more before then, the target takes 1d8 thunder damage, and the spell ends. At 5th level, the melee attack deals an extra 1d8 thunder damage to the target on a hit, and the damage the target takes for moving increases to 2d8. Both damage rolls increase by 1d8 at 11th and 17th levels. # 6. - Chill Touch (V,S) level 0 Necromancy [SOL] -**[Sorcerer,Warlock,Wizard]** +**[Sorcerer, Warlock, Wizard]** Deal damage to one enemy and prevent healing for a limited time. # 7. - Dancing Lights (V,S) level 0 Evocation [Concentration] [SOL] -**[Bard,Sorcerer,Wizard]** +**[Bard, Sorcerer, Wizard]** Create dancing lights that move at your command. # 8. - Dazzle (S) level 0 Illusion [SOL] -**[Bard,Sorcerer,Warlock,Wizard]** +**[Bard, Sorcerer, Warlock, Wizard]** Lower a target's AC and prevent reaction until the start of its next turn. @@ -54,268 +54,263 @@ Unleash a beam of crackling energy with a ranged spell attack against the target # 10. - Fire Bolt (V,S) level 0 Evocation [SOL] -**[Artificer,Sorcerer,Wizard]** +**[Artificer, Sorcerer, Wizard]** Launch a fire bolt. # 11. - *Green-Flame Blade* © (M,S) level 0 Evocation [UB] -**[Artificer,Sorcerer,Warlock,Wizard]** +**[Artificer, Sorcerer, Warlock, Wizard]** You brandish the weapon used in the spell's casting and make a melee attack with it against one creature within 5 ft distance. On a hit, the target suffers the weapon attack's normal effects, and you can cause green fire to leap from the target to a different creature of your choice that you can see within 5 ft of it. The second creature takes fire damage equal to your spellcasting ability modifier. At 5th level, the melee attack deals an extra 1d8 fire damage to the target on a hit, and the fire damage to the second creature increases to 1d8 + your spellcasting ability modifier. Both damage rolls increase by 1d8 at 11th and 17th levels. # 12. - Guidance (V,S) level 0 Divination [Concentration] [SOL] -**[Artificer,Cleric,Druid]** +**[Artificer, Cleric, Druid]** Increase an ally's ability checks for a limited time. # 13. - *Gust* © (V,S) level 0 Transmutation [UB] -**[Druid,Sorcerer,Wizard]** +**[Druid, Sorcerer, Wizard]** Fire a blast of focused air at your target. # 14. - Illuminating Sphere (V,S) level 0 Enchantment [UB] -**[Bard,Sorcerer,Wizard]** +**[Bard, Sorcerer, Wizard]** Causes light sources such as torches and mana lamps in the area of effect to light up. # 15. - *Infestation* © (V,S) level 0 Conjuration [UB] -**[Druid,Sorcerer,Warlock,Wizard]** +**[Druid, Sorcerer, Warlock, Wizard]** You cause a cloud of mites, fleas, and other parasites to appear momentarily on one creature you can see within range. The target must succeed on a Constitution saving throw, or it takes 1d6 poison damage and moves 5 ft in a random direction. The spell's damage increases by an additional die at 5th, 11th and 17th level. # 16. - Light (V) level 0 Evocation [SOL] -**[Bard,Cleric,Sorcerer,Wizard]** +**[Bard, Cleric, Sorcerer, Wizard]** An object you can touch emits a powerful light for a limited time. -# 17. - Light (V) level 0 Evocation [SOL] +# 17. - *Lightning Lure* © (V) level 0 Evocation [UB] - -An object you can touch emits a powerful light for a limited time. - -# 18. - *Lightning Lure* © (V) level 0 Evocation [UB] - -**[Artificer,Sorcerer,Warlock,Wizard]** +**[Artificer, Sorcerer, Warlock, Wizard]** You create a lash of lightning energy that strikes at one creature of your choice that you can see within 15 ft of you. The target must succeed on a Strength saving throw or be pulled up to 10 ft in a straight line toward you and then take 1d8 lightning damage. The spell's damage increases by an additional die at 5th, 11th and 17th level. -# 19. - *Mind Sliver* © (V) level 0 Enchantment [UB] +# 18. - *Mind Sliver* © (V) level 0 Enchantment [UB] -**[Sorcerer,Warlock,Wizard]** +**[Sorcerer, Warlock, Wizard]** You drive a disorienting spike of psychic energy into the mind of one creature you can see within range. The target must succeed on an Intelligence saving throw or take 1d6 psychic damage and subtract 1d4 from the next saving throw it makes before the end of your next turn. -# 20. - Minor Lifesteal (V,S) level 0 Necromancy [UB] +# 19. - Minor Lifesteal (V,S) level 0 Necromancy [UB] -**[Bard,Sorcerer,Warlock,Wizard]** +**[Bard, Sorcerer, Warlock, Wizard]** You drain vital energy from a nearby enemy creature. Make a melee spell attack against a creature within 5 ft of you. On a hit, the creature takes 1d6 necrotic damage, and you heal for half the damage dealt (rounded down). This spell has no effect on undead and constructs. The spell's damage increases by an additional die at 5th, 11th and 17th level. -# 21. - Poison Spray (V,S) level 0 Conjuration [SOL] +# 20. - Poison Spray (V,S) level 0 Conjuration [SOL] -**[Artificer,Druid,Sorcerer,Warlock,Wizard]** +**[Artificer, Druid, Sorcerer, Warlock, Wizard]** Fire a poison spray at an enemy you can see, within range. -# 22. - *Primal Savagery* © (S) level 0 Transmutation [UB] +# 21. - *Primal Savagery* © (S) level 0 Transmutation [UB] **[Druid]** You channel primal magic to cause your teeth or fingernails to sharpen, ready to deliver a corrosive attack. Make a melee spell attack against one creature within 5 ft of you. On a hit, the target takes 1d10 acid damage. The spell's damage increases by an additional die at 5th, 11th and 17th level. -# 23. - Produce Flame (V,S) level 0 Conjuration [SOL] +# 22. - Produce Flame (V,S) level 0 Conjuration [SOL] **[Druid]** Conjures a flickering flame in your hand, which generates light or can be hurled to inflict fire damage. -# 24. - Ray of Frost (V,S) level 0 Evocation [SOL] +# 23. - Ray of Frost (V,S) level 0 Evocation [SOL] -**[Artificer,Sorcerer,Wizard]** +**[Artificer, Sorcerer, Wizard]** Launch a freezing ray at an enemy to damage and slow them. -# 25. - Resistance (V,S) level 0 Abjuration [Concentration] [SOL] +# 24. - Resistance (V,S) level 0 Abjuration [Concentration] [SOL] -**[Artificer,Cleric,Druid]** +**[Artificer, Cleric, Druid]** Grant an ally a one-time bonus to saving throws. -# 26. - Sacred Flame (V,S) level 0 Evocation [SOL] +# 25. - Sacred Flame (V,S) level 0 Evocation [SOL] **[Cleric]** Strike an enemy with radiant damage. -# 27. - *Sapping Sting* © (V,S) level 0 Necromancy [UB] +# 26. - *Sapping Sting* © (V,S) level 0 Necromancy [UB] **[Wizard]** You sap the vitality of one creature you can see in range. The target must succeed on a Constitution saving throw or take 1d4 necrotic damage and fall prone. -# 28. - Shadow Armor (V,S) level 0 Abjuration [SOL] +# 27. - Shadow Armor (V,S) level 0 Abjuration [SOL] -**[Bard,Sorcerer,Warlock,Wizard]** +**[Bard, Sorcerer, Warlock, Wizard]** Grants 3 temporary hit points for one minute. -# 29. - Shadow Dagger (V,S) level 0 Illusion [SOL] +# 28. - Shadow Dagger (V,S) level 0 Illusion [SOL] -**[Bard,Sorcerer,Warlock,Wizard]** +**[Bard, Sorcerer, Warlock, Wizard]** Launches an illusionary dagger that causes psychic damage. -# 30. - Shillelagh (V,S) level 0 Transmutation [SOL] +# 29. - Shillelagh (V,S) level 0 Transmutation [SOL] **[Druid]** Conjures a magical club whose attacks are magical and use your spellcasting ability instead of strength. -# 31. - Shine (V,S) level 0 Conjuration [SOL] +# 30. - Shine (V,S) level 0 Conjuration [SOL] -**[Cleric,Sorcerer,Wizard]** +**[Cleric, Sorcerer, Wizard]** An enemy you can see becomes luminous for a while. -# 32. - Shocking Grasp (V,S) level 0 Evocation [SOL] +# 31. - Shocking Grasp (V,S) level 0 Evocation [SOL] -**[Artificer,Sorcerer,Wizard]** +**[Artificer, Sorcerer, Wizard]** Damage and daze an enemy on a successful touch. -# 33. - Spare the Dying (S) level 0 Necromancy [SOL] +# 32. - Spare the Dying (S) level 0 Necromancy [SOL] -**[Artificer,Cleric]** +**[Artificer, Cleric]** Touch a dying ally to stabilize them. -# 34. - Sparkle (V,S) level 0 Enchantment [SOL] +# 33. - Sparkle (V,S) level 0 Enchantment [SOL] -**[Bard,Cleric,Druid,Sorcerer,Warlock,Wizard]** +**[Bard, Cleric, Druid, Sorcerer, Warlock, Wizard]** Target up to three objects that can be illuminated and light them up immediately. -# 35. - *Starry Wisp* © (V,S) level 0 Evocation [UB] +# 34. - *Starry Wisp* © (V,S) level 0 Evocation [UB] -**[Bard,Druid]** +**[Bard, Druid]** You launch a mote of light at one creature or object within range. Make a ranged spell attack against the target. On a hit, the target takes 1d8 Radiant damage, and until the end of your next turn, it emits Dim Light in a 10-foot radius and can't benefit from the Invisible condition. The spell's damage increases by an additional die at 5th, 11th and 17th level. -# 36. - Sunlit Blade (M,S) level 0 Evocation [UB] +# 35. - Sunlit Blade (M,S) level 0 Evocation [UB] -**[Artificer,Sorcerer,Warlock,Wizard]** +**[Artificer, Sorcerer, Warlock, Wizard]** You brandish the weapon used in the spell's casting and make a melee attack with it against one creature within 5 ft distance. On a hit, the target suffers the weapon attack's normal effects, and is enveloped in glowing radiant energy, shedding dim light for the turn. Next attack against this creature while it is highlighted is done with advantage. At 5th level, the melee attack deals an extra 1d8 radiant damage to the target. The damage increases by another 1d8 at 11th and 17th levels. -# 37. - *Sword Burst* © (V,S) level 0 Enchantment [UB] +# 36. - *Sword Burst* © (V,S) level 0 Enchantment [UB] -**[Artificer,Sorcerer,Warlock,Wizard]** +**[Artificer, Sorcerer, Warlock, Wizard]** You create a momentary circle of spectral blades that sweep around you. All other creatures within 5 ft of you must each succeed on a Dexterity saving throw or take 1d6 force damage. -# 38. - *Thorn Whip* © (V,S) level 0 Transmutation [UB] +# 37. - *Thorn Whip* © (V,S) level 0 Transmutation [UB] -**[Artificer,Druid]** +**[Artificer, Druid]** You create a long, whip-like vine covered in thorns that lashes out at your command toward a creature in range. Make a ranged spell attack against the target. If the attack hits, the creature takes 1d6 piercing damage, and you pull the creature up to 10 ft closer to you. -# 39. - *Thunderclap* © (V,S) level 0 Evocation [UB] +# 38. - *Thunderclap* © (V,S) level 0 Evocation [UB] -**[Artificer,Bard,Druid,Sorcerer,Warlock,Wizard]** +**[Artificer, Bard, Druid, Sorcerer, Warlock, Wizard]** Create a burst of thundering sound, forcing creatures adjacent to you to make a Constitution saving throw or take 1d6 thunder damage. The spell's damage increases by an additional die at 5th, 11th and 17th level. -# 40. - *Toll the Dead* © (V,S) level 0 Necromancy [UB] +# 39. - *Toll the Dead* © (V,S) level 0 Necromancy [UB] -**[Cleric,Warlock,Wizard]** +**[Cleric, Warlock, Wizard]** You point at one creature you can see within range, and the sound of a dolorous bell fills the air around it for a moment. The target must succeed on a Wisdom saving throw or take 1d6 necrotic damage. If the target is missing any of its hit points, it instead takes 1d12 necrotic damage. -# 41. - True Strike (S) level 0 Divination [Concentration] [SOL] +# 40. - True Strike (S) level 0 Divination [Concentration] [SOL] -**[Bard,Sorcerer,Warlock,Wizard]** +**[Bard, Sorcerer, Warlock, Wizard]** Increases your chance to hit a target you can see, one time. -# 42. - Venomous Spike (V,S) level 0 Enchantment [SOL] +# 41. - Venomous Spike (V,S) level 0 Enchantment [SOL] **[Druid]** A bone spike that pierces and poisons its target. -# 43. - Vicious Mockery (V) level 0 Enchantment [SOL] +# 42. - Vicious Mockery (V) level 0 Enchantment [SOL] **[Bard]** Unleash a torrent of magically-enhanced insults on a creature you can see. It must make a successful wisdom saving throw, or take psychic damage and have disadvantage on its next attack roll. The effect lasts until the end of its next turn. -# 44. - *Word of Radiance* © (V) level 0 Evocation [UB] +# 43. - *Word of Radiance* © (V) level 0 Evocation [UB] **[Cleric]** Create a brilliant flash of shimmering light, damaging all enemies around you. -# 45. - Wrack (V,S) level 0 Necromancy [UB] +# 44. - Wrack (V,S) level 0 Necromancy [UB] **[Cleric]** Unleash a wave of crippling pain at a creature within range. The target must make a Constitution saving throw or take 1d6 necrotic damage, and preventing them from dashing or disengaging. -# 46. - *Absorb Elements* © (S) level 1 Abjuration [UB] +# 45. - *Absorb Elements* © (S) level 1 Abjuration [UB] -**[Druid,Ranger,Sorcerer,Wizard]** +**[Druid, Ranger, Sorcerer, Wizard]** The spell captures some of the incoming energy, lessening its effect on you and storing it for your next melee attack. You have resistance to the triggering damage type until the start of your next turn. Also, the first time you hit with a melee attack on your next turn, the target takes an extra 1d6 damage of the triggering type, and the spell ends. When you cast this spell using a spell slot of 2nd level or higher, the extra damage increases by 1d6 for each slot level above 1st. -# 47. - Animal Friendship (V,S) level 1 Enchantment [SOL] +# 46. - Animal Friendship (V,S) level 1 Enchantment [SOL] -**[Bard,Druid,Ranger]** +**[Bard, Druid, Ranger]** Choose a beast that you can see within the spell's range. The beast must make a Wisdom saving throw or be charmed for the spell's duration. -# 48. - *Armor of Agathys* © (V,S) level 1 Abjuration [UB] +# 47. - *Armor of Agathys* © (V,S) level 1 Abjuration [UB] **[Warlock]** A protective elemental skin envelops you, covering you and your gear. You gain 5 temporary hit points per spell level for the duration. In addition, if a creature hits you with a melee attack while you have these temporary hit points, the creature takes 5 cold damage per spell level. -# 49. - *Arms of Hadar* © (V,S) level 1 Evocation [UB] +# 48. - *Arms of Hadar* © (V,S) level 1 Evocation [UB] **[Warlock]** You invoke the power of malevolent forces. Tendrils of dark energy erupt from you and batter all creatures within 10 feet of you. Each creature in that area must make a Strength saving throw. On a failed save, a target takes 2d6 necrotic damage and can't take reactions until the start of your next turn. On a successful save, the creature takes half damage, but suffers no other effect. When you cast this spell using a spell slot of 2nd level or higher, the damage increases by 1d6 for each slot level above 1st. -# 50. - Bane (V,S) level 1 Enchantment [Concentration] [SOL] +# 49. - Bane (V,S) level 1 Enchantment [Concentration] [SOL] -**[Bard,Cleric]** +**[Bard, Cleric]** Reduce your enemies' attack and saving throws for a limited time. -# 51. - Bless (V,S) level 1 Enchantment [Concentration] [SOL] +# 50. - Bless (V,S) level 1 Enchantment [Concentration] [SOL] -**[Cleric,Paladin]** +**[Cleric, Paladin]** Increase your allies' saving throws and attack rolls for a limited time. -# 52. - Burning Hands (V,S) level 1 Evocation [SOL] +# 51. - Burning Hands (V,S) level 1 Evocation [SOL] -**[Sorcerer,Wizard]** +**[Sorcerer, Wizard]** Spray a cone of fire in front of you. -# 53. - Caustic Zap (V,S) level 1 Evocation [UB] +# 52. - Caustic Zap (V,S) level 1 Evocation [UB] -**[Artificer,Sorcerer,Wizard]** +**[Artificer, Sorcerer, Wizard]** You send a jolt of green energy toward the target momentarily disorientating them as the spell burn some of their armor. The spell targets one enemy with a spell attack and deals 1d4 acid and 1d6 lightning damage and applies the dazzled condition. -# 54. - *Chaos Bolt* © (V,S) level 1 Evocation [UB] +# 53. - *Chaos Bolt* © (V,S) level 1 Evocation [UB] **[Sorcerer]** @@ -326,27 +321,27 @@ Make a ranged spell attack against a target. On a hit, the target takes 2d8 + 1d 7: ◹ Psychic 8: ◼ Thunder If you roll the same number on both d8s, you can use your free action to target a different creature of your choice. Make a new attack roll against the new target, and make a new damage roll, which could cause the chaotic energy to leap again. A creature can be damaged only once by each casting of this spell. -# 55. - Charm Person (V,S) level 1 Enchantment [SOL] +# 54. - Charm Person (V,S) level 1 Enchantment [SOL] -**[Bard,Druid,Sorcerer,Warlock,Wizard]** +**[Bard, Druid, Sorcerer, Warlock, Wizard]** Makes an ally of an enemy. -# 56. - *Chromatic Orb* © (M,V,S) level 1 Evocation [UB] +# 55. - *Chromatic Orb* © (M,V,S) level 1 Evocation [UB] -**[Sorcerer,Wizard]** +**[Sorcerer, Wizard]** You hurl a 4-inch-diameter sphere of energy at a creature that you can see within range. You choose acid, cold, fire, lightning, poison, or thunder for the type of orb you create, and then make a ranged spell attack against the target. If the attack hits, the creature takes 3d8 damage of the type you chose. -# 57. - Color Spray (V,S) level 1 Illusion [SOL] +# 56. - Color Spray (V,S) level 1 Illusion [SOL] -**[Sorcerer,Wizard]** +**[Sorcerer, Wizard]** Spray a luminous cone that briefly blinds your enemies. Roll 6d10: the total is how many hit points of creatures this spell can affect. -# 58. - *Command* © (V) level 1 Enchantment [UB] +# 57. - *Command* © (V) level 1 Enchantment [UB] -**[Bard,Cleric,Paladin]** +**[Bard, Cleric, Paladin]** You speak a one-word command to a creature you can see within range. The target must succeed on a Wisdom saving throw or follow the command on its next turn. You can only command creatures you share a language with, which include all humanoids. To command a non-humanoid creature, you must know Draconic for Dragons, Elvish for Fey, Giant for Giants, Infernal for Fiends and Terran for Elementals. Commands follow: • Approach: The target moves toward you by the shortest and most direct route, ending its turn if it moves within 5 feet of you. @@ -355,1265 +350,1265 @@ You speak a one-word command to a creature you can see within range. The target • Halt: The target doesn't move and takes no actions. When you cast this spell using a spell slot of 2nd level or higher, you may target an additional creature within range for each slot level above 2nd. -# 59. - Comprehend Languages (V,S) level 1 Divination [SOL] +# 58. - Comprehend Languages (V,S) level 1 Divination [SOL] -**[Bard,Sorcerer,Warlock,Wizard]** +**[Bard, Sorcerer, Warlock, Wizard]** For the duration of the spell, you understand the literal meaning of any spoken words that you hear. -# 60. - Cure Wounds (V,S) level 1 Evocation [SOL] +# 59. - Cure Wounds (V,S) level 1 Evocation [SOL] -**[Artificer,Bard,Cleric,Druid,Paladin,Ranger]** +**[Artificer, Bard, Cleric, Druid, Paladin, Ranger]** Heal an ally by touch. -# 61. - Detect Evil and Good (V,S) level 1 Divination [Concentration] [SOL] +# 60. - Detect Evil and Good (V,S) level 1 Divination [Concentration] [SOL] -**[Cleric,Paladin]** +**[Cleric, Paladin]** Detect nearby creatures of evil or good nature. -# 62. - Detect Magic (V,S) level 1 Divination [Concentration] [SOL] +# 61. - Detect Magic (V,S) level 1 Divination [Concentration] [SOL] -**[Artificer,Bard,Cleric,Druid,Paladin,Ranger,Sorcerer,Wizard]** +**[Artificer, Bard, Cleric, Druid, Paladin, Ranger, Sorcerer, Wizard]** Detect nearby magic objects or creatures. -# 63. - Detect Poison and Disease (V,S) level 1 Divination [Concentration] [SOL] +# 62. - Detect Poison and Disease (V,S) level 1 Divination [Concentration] [SOL] **[Druid]** TMP For the duration you sense the presence and location of poisonous creatures and diseases within 6 cells of you. -# 64. - *Dissonant Whispers* © (V) level 1 Enchantment [UB] +# 63. - *Dissonant Whispers* © (V) level 1 Enchantment [UB] **[Bard]** You whisper a discordant melody that only one creature of your choice within range can hear, wracking it with terrible pain. The target must make a Wisdom saving throw. On a failed save, it takes 3d6 psychic damage and must immediately use its reaction, if available, to move as far as its speed allows away from you. The creature doesn't move into obviously dangerous ground, such as a fire or a pit. On a successful save, the target takes half as much damage and doesn't have to move away. When you cast this spell using a spell slot of 2nd level or higher, the damage increases by 1d6 for each slot level above 1st. -# 65. - Divine Favor (V,S) level 1 Evocation [Concentration] [SOL] +# 64. - Divine Favor (V,S) level 1 Evocation [Concentration] [SOL] **[Paladin]** Gain additional radiant damage for a limited time. -# 66. - *Earth Tremor* © (V,S) level 1 Evocation [UB] +# 65. - *Earth Tremor* © (V,S) level 1 Evocation [UB] -**[Bard,Druid,Sorcerer,Wizard]** +**[Bard, Druid, Sorcerer, Wizard]** You strike the ground and unleash a tremor of seismic force, hurling up earth, rock, and sand. -# 67. - *Ensnaring Strike* © (V) level 1 Conjuration [Concentration] [UB] +# 66. - *Ensnaring Strike* © (V) level 1 Conjuration [Concentration] [UB] **[Ranger]** The next time you hit a creature with a weapon attack before this spell ends, a writhing mass of thorny vines appears at the point of impact, and the target must succeed on a Strength saving throw or be restrained by the magical vines until the spell ends.While restrained by this spell, the target takes 1d6 piercing damage at the start of each of its turns. A creature restrained by the vines can use its action to make a Strength check against your spell save DC. -# 68. - Entangle (V,S) level 1 Conjuration [Concentration] [SOL] +# 67. - Entangle (V,S) level 1 Conjuration [Concentration] [SOL] **[Druid]** Creatures in a four-cell square area are restrained if they fail a STR saving throw -# 69. - Expeditious Retreat (V,S) level 1 Transmutation [Concentration] [SOL] +# 68. - Expeditious Retreat (V,S) level 1 Transmutation [Concentration] [SOL] -**[Artificer,Sorcerer,Warlock,Wizard]** +**[Artificer, Sorcerer, Warlock, Wizard]** Gain movement points and become able to dash as a bonus action for a limited time. -# 70. - Faerie Fire (V) level 1 Evocation [Concentration] [SOL] +# 69. - Faerie Fire (V) level 1 Evocation [Concentration] [SOL] -**[Artificer,Bard,Druid]** +**[Artificer, Bard, Druid]** Highlight creatures to give advantage to anyone attacking them. -# 71. - False Life (V,S) level 1 Necromancy [SOL] +# 70. - False Life (V,S) level 1 Necromancy [SOL] -**[Artificer,Sorcerer,Wizard]** +**[Artificer, Sorcerer, Wizard]** Gain a few temporary hit points for a limited time. -# 72. - Feather Fall (V) level 1 Transmutation [SOL] +# 71. - Feather Fall (V) level 1 Transmutation [SOL] -**[Artificer,Bard,Sorcerer,Wizard]** +**[Artificer, Bard, Sorcerer, Wizard]** Provide a safe landing when you or an ally falls. -# 73. - *Find Familiar* © (V,S) level 1 Conjuration [UB] +# 72. - *Find Familiar* © (V,S) level 1 Conjuration [UB] **[Wizard]** You gain the service of a familiar. The familiar can use the help action, and you can cast any touch or melee hit spell through the familiar. -# 74. - Fog Cloud (V,S) level 1 Conjuration [Concentration] [SOL] +# 73. - Fog Cloud (V,S) level 1 Conjuration [Concentration] [SOL] -**[Druid,Ranger,Sorcerer,Wizard]** +**[Druid, Ranger, Sorcerer, Wizard]** Generate a sphere of thick fog for a limited time. The area is heavily obscured, penalizing creatures inside it that rely on sight. -# 75. - *Gift of Alacrity* © (V,S) level 1 Divination [UB] +# 74. - *Gift of Alacrity* © (V,S) level 1 Divination [UB] **[Wizard]** You touch a willing creature. For the duration, the target can add 1d8 to its initiative rolls. -# 76. - Goodberry (V,S) level 1 Transmutation [SOL] +# 75. - Goodberry (V,S) level 1 Transmutation [SOL] -**[Druid,Ranger]** +**[Druid, Ranger]** Creates 10 berries infused with magic. Eating a berry restores 1 hit point and provides sustenance for a long rest. Berries vanish after a long rest. -# 77. - Grease (V,S) level 1 Conjuration [SOL] +# 76. - Grease (V,S) level 1 Conjuration [SOL] -**[Artificer,Wizard]** +**[Artificer, Wizard]** Cover an area of 2 x 2 cells with grease. Creatures trying to cross it may fall prone. -# 78. - Guiding Bolt (V,S) level 1 Evocation [SOL] +# 77. - Guiding Bolt (V,S) level 1 Evocation [SOL] **[Cleric]** Launch a radiant attack against an enemy and make them easy to hit. -# 79. - *Hail of Thorns* © (V) level 1 Conjuration [Concentration] [UB] +# 78. - *Hail of Thorns* © (V) level 1 Conjuration [Concentration] [UB] **[Ranger]** The next time you hit a creature with a ranged weapon attack before the spell ends, this spell creates a rain of thorns that sprouts from your ranged weapon or ammunition. In addition to the normal effect of the attack, the target of the attack and each creature within 5 feet of it must make a Dexterity saving throw. A creature takes 1d10 piercing damage on a failed save, or half as much damage on a successful one. -# 80. - Healing Word (V) level 1 Evocation [SOL] +# 79. - Healing Word (V) level 1 Evocation [SOL] -**[Bard,Cleric,Druid]** +**[Bard, Cleric, Druid]** Heal an ally you can see. -# 81. - Hellish Rebuke (V,S) level 1 Evocation [SOL] +# 80. - Hellish Rebuke (V,S) level 1 Evocation [SOL] **[Warlock]** When you are damaged by a creature within range, you can use your reaction to inflict fire damage back. -# 82. - Heroism (V,S) level 1 Enchantment [Concentration] [SOL] +# 81. - Heroism (V,S) level 1 Enchantment [Concentration] [SOL] -**[Bard,Paladin]** +**[Bard, Paladin]** An ally gains temporary hit points and cannot be frightened for a limited time. -# 83. - Hideous Laughter (V,S) level 1 Enchantment [Concentration] [SOL] +# 82. - Hideous Laughter (V,S) level 1 Enchantment [Concentration] [SOL] -**[Bard,Wizard]** +**[Bard, Wizard]** Make an enemy helpless with irresistible laughter. -# 84. - Hunter's Mark (V) level 1 Divination [Concentration] [SOL] +# 83. - Hunter's Mark (V) level 1 Divination [Concentration] [SOL] **[Ranger]** An enemy gets additional damage from you, and you can easily detect it for a limited time. -# 85. - *Ice Knife* © (S) level 1 Conjuration [UB] +# 84. - *Ice Knife* © (S) level 1 Conjuration [UB] -**[Druid,Sorcerer,Wizard]** +**[Druid, Sorcerer, Wizard]** You create a shard of ice and fling it at one creature within range. Make a ranged spell attack against the target. On a hit, the target takes 1d10 piercing damage. Hit or miss, the shard then explodes. The target and each creature within 5 feet of the point where the ice exploded must succeed on a Dexterity saving throw or take 2d6 cold damage. When you cast this spell using a spell slot of 2nd level or higher, both the cold and piercing damage increase by 1 die for each slot level above 1st. -# 86. - Identify (M,V,S) level 1 Divination [SOL] +# 85. - Identify (M,V,S) level 1 Divination [SOL] -**[Artificer,Bard,Wizard]** +**[Artificer, Bard, Wizard]** Identify the hidden properties of an object. -# 87. - Inflict Wounds (V,S) level 1 Necromancy [SOL] +# 86. - Inflict Wounds (V,S) level 1 Necromancy [SOL] **[Cleric]** Deal necrotic damage to an enemy you hit. -# 88. - Jump (V,S) level 1 Transmutation [SOL] +# 87. - Jump (V,S) level 1 Transmutation [SOL] -**[Artificer,Druid,Ranger,Sorcerer,Wizard]** +**[Artificer, Druid, Ranger, Sorcerer, Wizard]** Increase an ally's jumping distance. -# 89. - Jump (V,S) level 1 Transmutation [SOL] +# 88. - Jump (V,S) level 1 Transmutation [SOL] Increase an ally's jumping distance. -# 90. - Longstrider (V,S) level 1 Transmutation [SOL] +# 89. - Longstrider (V,S) level 1 Transmutation [SOL] -**[Artificer,Bard,Druid,Ranger,Wizard]** +**[Artificer, Bard, Druid, Ranger, Wizard]** Increases an ally's speed by two cells per turn. -# 91. - Mage Armor (V,S) level 1 Abjuration [SOL] +# 90. - Mage Armor (V,S) level 1 Abjuration [SOL] -**[Sorcerer,Wizard]** +**[Sorcerer, Wizard]** Provide magical armor to an ally who doesn't wear armor. -# 92. - Magic Missile (V,S) level 1 Evocation [SOL] +# 91. - Magic Missile (V,S) level 1 Evocation [SOL] -**[Sorcerer,Wizard]** +**[Sorcerer, Wizard]** Strike one or more enemies with projectiles that can't miss. -# 93. - *Magnify Gravity* © (V,S) level 1 Transmutation [UB] +# 92. - *Magnify Gravity* © (V,S) level 1 Transmutation [UB] **[Wizard]** Sharply increase gravity in a 10-foot-radius sphere to crush and slow targets. -# 94. - Malediction (V,S) level 1 Enchantment [Concentration] [SOL] +# 93. - Malediction (V,S) level 1 Enchantment [Concentration] [SOL] **[Warlock]** Until the spell ends, whenever you hit a target with an attack you deal an extra 1d6 magical damage of the same type as the attack's damage. -# 95. - Mule (V,S) level 1 Transmutation [UB] +# 94. - Mule (V,S) level 1 Transmutation [UB] -**[Bard,Sorcerer,Warlock,Wizard]** +**[Bard, Sorcerer, Warlock, Wizard]** The recipient of this spell is able to ignore the effects of heavy loads or armor on movement speed. They can also carry slightly more weight. -# 96. - Protect vs Evil & Good (V,S) level 1 Abjuration [Concentration] [SOL] +# 95. - Protect vs Evil & Good (V,S) level 1 Abjuration [Concentration] [SOL] -**[Cleric,Paladin,Warlock,Wizard]** +**[Cleric, Paladin, Warlock, Wizard]** Touch an ally to give them protection from evil or good creatures for a limited time. -# 97. - Radiant Motes (V,S) level 1 Evocation [UB] +# 96. - Radiant Motes (V,S) level 1 Evocation [UB] -**[Artificer,Wizard]** +**[Artificer, Wizard]** Unleashes a swarm of 4 radiant projectiles that deal 1d4 radiant damage each. When you cast this spell using a spell slot of 2nd level or higher, the spell creates 1 more projectile for each slot above 1st. -# 98. - *Sanctuary* © (V,S) level 1 Abjuration [UB] +# 97. - *Sanctuary* © (V,S) level 1 Abjuration [UB] -**[Artificer,Cleric]** +**[Artificer, Cleric]** You ward a creature within range against attack. Until the spell ends, any creature who targets the warded creature with an attack or a harmful spell must first make a Wisdom saving throw. On a failed save, the creature loses the attack or spell. This spell doesn't protect the warded creature from area effects. If the warded creature makes an attack or casts a spell, this spell ends. -# 99. - *Searing Smite* © (V) level 1 Evocation [Concentration] [UB] +# 98. - *Searing Smite* © (V) level 1 Evocation [Concentration] [UB] -**[Paladin,Ranger]** +**[Paladin, Ranger]** On your next hit your weapon flares with white-hot intensity, and the attack deals an extra 1d6 fire damage to the target and causes the target to ignite in flames. At the start of each of its turns the target must make a successful Constitution saving throw to stop burning, or take 1d6 fire damage. Higher Levels: for each slot level above 1st, the initial extra damage dealt by the attack increases by 1d6. -# 100. - Shield (V,S) level 1 Abjuration [SOL] +# 99. - Shield (V,S) level 1 Abjuration [SOL] -**[Sorcerer,Wizard]** +**[Sorcerer, Wizard]** Increase your AC by 5 just before you would take a hit. -# 101. - Shield of Faith (V,S) level 1 Abjuration [Concentration] [SOL] +# 100. - Shield of Faith (V,S) level 1 Abjuration [Concentration] [SOL] -**[Cleric,Paladin]** +**[Cleric, Paladin]** Increase an ally's AC by 2 for a limited time. -# 102. - Sleep (V,S) level 1 Enchantment [SOL] +# 101. - Sleep (V,S) level 1 Enchantment [SOL] -**[Bard,Sorcerer,Wizard]** +**[Bard, Sorcerer, Wizard]** Put a number of creatures to sleep for a limited time. Roll 5d8: the total is how many hit points of creatures this spell can affect. -# 103. - *Tasha's Caustic Brew* © (V,S) level 1 Evocation [Concentration] [UB] +# 102. - *Tasha's Caustic Brew* © (V,S) level 1 Evocation [Concentration] [UB] -**[Artificer,Sorcerer,Wizard]** +**[Artificer, Sorcerer, Wizard]** A stream of acid emanates from you in a line 30 feet long and 5 feet wide in a direction you choose. Each creature in the line must succeed on a Dexterity saving throw or be covered in acid for the spell's duration or until a creature uses its action to scrape or wash the acid off itself or another creature. A creature covered in the acid takes 2d4 acid damage at start of each of its turns. When you cast this spell using a spell slot 2nd level or higher, the damage increases by 2d4 for each slot level above 1st. -# 104. - *Thunderous Smite* © (V) level 1 Evocation [Concentration] [UB] +# 103. - *Thunderous Smite* © (V) level 1 Evocation [Concentration] [UB] **[Paladin]** On your next hit your weapon rings with thunder and the attack deals an extra 2d6 thunder damage to the target. Additionally, if the target is a creature, it must succeed on a Strength saving throw or be pushed 10 ft away from you and knocked prone. -# 105. - Thunderwave (V,S) level 1 Evocation [SOL] +# 104. - Thunderwave (V,S) level 1 Evocation [SOL] -**[Bard,Druid,Sorcerer,Wizard]** +**[Bard, Druid, Sorcerer, Wizard]** Emit a wave of force that causes damage and pushes creatures and objects away. -# 106. - Tiefling's Hellish Rebuke (V,S) level 1 Evocation [SOL] +# 105. - Tiefling's Hellish Rebuke (V,S) level 1 Evocation [SOL] When you are damaged by a creature withing range, you can use your reaction to inflict fire damage back at them. This tiefling version of the spell is more powerful than the common one but cannot use a higher level Spell Slot to increase damage. -# 107. - *Witch Bolt* © (V,S) level 1 Evocation [Concentration] [UB] +# 106. - *Witch Bolt* © (V,S) level 1 Evocation [Concentration] [UB] -**[Sorcerer,Warlock,Wizard]** +**[Sorcerer, Warlock, Wizard]** A beam of crackling, blue energy lances out toward a creature within range, forming a sustained arc of lightning between you and the target. Make a ranged spell attack against that creature. On a hit, the target takes 1d12 lightning damage, and on each of your turns for the duration, you can use your action to deal 1d12 lightning damage to the target automatically. The spell ends if you use your action to do anything else. The spell also ends if the target is ever outside the spell's range. When you cast this spell using a spell slot of 2nd level or higher, the damage increases by 1d12 for each slot level above 1st. -# 108. - *Wrathful Smite* © (V) level 1 Evocation [Concentration] [UB] +# 107. - *Wrathful Smite* © (V) level 1 Evocation [Concentration] [UB] **[Paladin]** Your next hit deals additional 1d6 psychic damage. If target fails WIS saving throw its mind explodes in pain, and it becomes frightened. -# 109. - *Zephyr Strike* © (V) level 1 Transmutation [Concentration] [UB] +# 108. - *Zephyr Strike* © (V) level 1 Transmutation [Concentration] [UB] **[Ranger]** You move like the wind. For the duration, your movement doesn't provoke opportunity attacks. Once before the spell ends, you can give yourself advantage on one weapon attack roll on your turn. That attack deals an extra 1d8 force damage on a hit. Whether you hit or miss, your walking speed increases by 30 feet until the end of that turn. -# 110. - Acid Arrow (V,S) level 2 Evocation [SOL] +# 109. - Acid Arrow (V,S) level 2 Evocation [SOL] **[Wizard]** Launch an acid arrow that deals some damage even if you miss your shot. -# 111. - *Aganazzar's Scorcher* © (V,S) level 2 Evocation [UB] +# 110. - *Aganazzar's Scorcher* © (V,S) level 2 Evocation [UB] -**[Sorcerer,Wizard]** +**[Sorcerer, Wizard]** A line of roaring flame 30 feet long and 5 feet wide emanates from you in a direction you choose. Each creature in the line must make a Dexterity saving throw. A creature takes 3d10 fire damage on a failed save, or half as much damage on a successful one. When you cast this spell using a spell slot of 3rd level or higher, the damage increases by 1d10 for each slot level above 2nd. -# 112. - Aid (V,S) level 2 Abjuration [SOL] +# 111. - Aid (V,S) level 2 Abjuration [SOL] -**[Artificer,Cleric,Paladin]** +**[Artificer, Cleric, Paladin]** Temporarily increases hit points for up to three allies. -# 113. - Barkskin (V,S) level 2 Transmutation [Concentration] [SOL] +# 112. - Barkskin (V,S) level 2 Transmutation [Concentration] [SOL] -**[Druid,Ranger]** +**[Druid, Ranger]** Gives you or an ally you can touch an AC of at least 16. -# 114. - Blindness (V) level 2 Necromancy [SOL] +# 113. - Blindness (V) level 2 Necromancy [SOL] -**[Bard,Cleric,Sorcerer,Wizard]** +**[Bard, Cleric, Sorcerer, Wizard]** Blind an enemy for one minute. -# 115. - Blur (V) level 2 Illusion [Concentration] [SOL] +# 114. - Blur (V) level 2 Illusion [Concentration] [SOL] -**[Artificer,Sorcerer,Wizard]** +**[Artificer, Sorcerer, Wizard]** Makes you blurry and harder to hit for up to one minute. -# 116. - *Borrowed Knowledge* © (V,S) level 2 Divination [UB] +# 115. - *Borrowed Knowledge* © (V,S) level 2 Divination [UB] -**[Bard,Cleric,Warlock,Wizard]** +**[Bard, Cleric, Warlock, Wizard]** You draw on knowledge from spirits of the past. Choose one skill in which you lack proficiency. For 1 hour, you have proficiency in the chosen skill. The spell ends early if you cast it again. -# 117. - Branding Smite (V) level 2 Evocation [Concentration] [SOL] +# 116. - Branding Smite (V) level 2 Evocation [Concentration] [SOL] **[Paladin]** Your next hit causes additional radiant damage and your target becomes luminous. -# 118. - Calm Emotions (V,S) level 2 Enchantment [Concentration] [SOL] +# 117. - Calm Emotions (V,S) level 2 Enchantment [Concentration] [SOL] -**[Bard,Cleric]** +**[Bard, Cleric]** Stops allies from being charmed or frightened and makes hostile humanoids indifferent. -# 119. - *Cloud of Daggers* © (V,S) level 2 Conjuration [Concentration] [UB] +# 118. - *Cloud of Daggers* © (V,S) level 2 Conjuration [Concentration] [UB] -**[Bard,Sorcerer,Warlock,Wizard]** +**[Bard, Sorcerer, Warlock, Wizard]** You fill the air with spinning daggers in a cube 5 feet on each side, centered on a point you choose within range. A creature takes 4d4 slashing damage when it enters the spell's area for the first time on a turn or starts its turn there. When you cast this spell using a spell slot of 3rd level or higher, the damage increases by 2d4 for each slot level above 2nd. -# 120. - Color Burst (V,S) level 2 Illusion [UB] +# 119. - Color Burst (V,S) level 2 Illusion [UB] -**[Artificer,Sorcerer,Wizard]** +**[Artificer, Sorcerer, Wizard]** Burst a luminous cube that briefly blinds anyone within 10 ft. 8d10 is how many hit points of creatures this spell can affect. -# 121. - Conjure Goblinoids (V,S) level 2 Conjuration [Concentration] [UB] +# 120. - Conjure Goblinoids (V,S) level 2 Conjuration [Concentration] [UB] -**[Druid,Ranger]** +**[Druid, Ranger]** Conjures 2 goblins who obey your orders unless you lose concentration. -# 122. - Darkness (V) level 2 Evocation [Concentration] [SOL] +# 121. - Darkness (V) level 2 Evocation [Concentration] [SOL] -**[Sorcerer,Warlock,Wizard]** +**[Sorcerer, Warlock, Wizard]** Create an area of magical darkness. -# 123. - Darkvision (V,S) level 2 Transmutation [SOL] +# 122. - Darkvision (V,S) level 2 Transmutation [SOL] -**[Artificer,Druid,Ranger,Sorcerer,Wizard]** +**[Artificer, Druid, Ranger, Sorcerer, Wizard]** Grant Darkvision to the target. -# 124. - Enhance Ability (V,S) level 2 Transmutation [Concentration] [SOL] +# 123. - Enhance Ability (V,S) level 2 Transmutation [Concentration] [SOL] -**[Artificer,Bard,Cleric,Druid]** +**[Artificer, Bard, Cleric, Druid]** Grant temporary powers to an ally for up to one hour. -# 125. - Find Traps (V,S) level 2 Evocation [SOL] +# 124. - Find Traps (V,S) level 2 Evocation [SOL] -**[Cleric,Druid,Ranger]** +**[Cleric, Druid, Ranger]** Spot mechanical and magical traps, but not natural hazards. -# 126. - Flame Blade (V,S) level 2 Evocation [Concentration] [SOL] +# 125. - Flame Blade (V,S) level 2 Evocation [Concentration] [SOL] **[Druid]** Evokes a fiery blade for ten minutes that you can wield in battle. -# 127. - Flaming Sphere (V,S) level 2 Evocation [Concentration] [SOL] +# 126. - Flaming Sphere (V,S) level 2 Evocation [Concentration] [SOL] -**[Druid,Wizard]** +**[Druid, Wizard]** Summons a movable, burning sphere. -# 128. - Heat Metal (V,S) level 2 Transmutation [Concentration] [SOL] +# 127. - Heat Metal (V,S) level 2 Transmutation [Concentration] [SOL] -**[Artificer,Bard,Druid]** +**[Artificer, Bard, Druid]** Causes metallic armor worn by a target creature to glow red hot, causing fire damage and disadvantage to attack rolls and ability checks. The damage can be repeated every turn with a bonus action. -# 129. - Hold Person (V,S) level 2 Enchantment [Concentration] [SOL] +# 128. - Hold Person (V,S) level 2 Enchantment [Concentration] [SOL] -**[Bard,Cleric,Druid,Sorcerer,Warlock,Wizard]** +**[Bard, Cleric, Druid, Sorcerer, Warlock, Wizard]** Paralyze a humanoid you can see for a limited time. -# 130. - Invisibility (V,S) level 2 Illusion [Concentration] [SOL] +# 129. - Invisibility (V,S) level 2 Illusion [Concentration] [SOL] -**[Artificer,Bard,Sorcerer,Warlock,Wizard]** +**[Artificer, Bard, Sorcerer, Warlock, Wizard]** Make an ally invisible for a limited time. -# 131. - *Kinetic Jaunt* © (S) level 2 Evocation [Concentration] [UB] +# 130. - *Kinetic Jaunt* © (S) level 2 Evocation [Concentration] [UB] -**[Artificer,Bard,Sorcerer,Wizard]** +**[Artificer, Bard, Sorcerer, Wizard]** You magically empower your movement with dance like steps, giving yourself the following benefits for the duration: • Your walking speed increases by 10 feet. • You don't provoke opportunity attacks. • You can move through the space of any creature. -# 132. - Knock (V) level 2 Transmutation [SOL] +# 131. - Knock (V) level 2 Transmutation [SOL] -**[Bard,Sorcerer,Wizard]** +**[Bard, Sorcerer, Wizard]** Magically open locked doors, chests, and the like. -# 133. - Lesser Restoration (V,S) level 2 Abjuration [SOL] +# 132. - Lesser Restoration (V,S) level 2 Abjuration [SOL] -**[Artificer,Bard,Cleric,Druid,Paladin,Ranger]** +**[Artificer, Bard, Cleric, Druid, Paladin, Ranger]** Remove a detrimental condition from an ally. -# 134. - Levitate (V,S) level 2 Transmutation [Concentration] [SOL] +# 133. - Levitate (V,S) level 2 Transmutation [Concentration] [SOL] -**[Artificer,Sorcerer,Wizard]** +**[Artificer, Sorcerer, Wizard]** Allow a creature to levitate and gain control of its aerial movement for a limited time. Can affect enemies if their size is medium or smaller. -# 135. - Levitate (V,S) level 2 Transmutation [Concentration] [SOL] +# 134. - Levitate (V,S) level 2 Transmutation [Concentration] [SOL] Allow a creature to levitate and gain control of its aerial movement for a limited time. Can affect enemies if their size is medium or smaller. -# 136. - Magic Weapon (V,S) level 2 Transmutation [Concentration] [SOL] +# 135. - Magic Weapon (V,S) level 2 Transmutation [Concentration] [SOL] -**[Artificer,Paladin,Wizard]** +**[Artificer, Paladin, Wizard]** A nonmagical weapon becomes a +1 weapon for up to one hour. -# 137. - *Mirror Image* © (V,S) level 2 Illusion [UB] +# 136. - *Mirror Image* © (V,S) level 2 Illusion [UB] -**[Bard,Sorcerer,Warlock,Wizard]** +**[Bard, Sorcerer, Warlock, Wizard]** Three illusory duplicates of yourself appear in your space. Until the spell ends, each time a creature targets you with an attack, roll a d20 to determine whether the attack instead targets one of your duplicates. If you have 3 duplicates, you must roll a 6 or higher to change the attack's target to a duplicate. With 2 duplicates, you must roll an 8 or higher. With 1 duplicate, you must roll an 11 or higher. A duplicate's AC is equal to 10 + your Dexterity modifier. If an attack hits a duplicate, the duplicate is destroyed. A duplicate can be destroyed only by an attack that hits it. It ignores all other damage and effects. The spell ends when all three duplicates are destroyed. A creature is unaffected by this spell if it is Blinded, or has Blindsight, Truesight or Tremorsense (doesn't apply if you don't touch ground). -# 138. - Misty Step (V) level 2 Conjuration [SOL] +# 137. - Misty Step (V) level 2 Conjuration [SOL] -**[Sorcerer,Warlock,Wizard]** +**[Sorcerer, Warlock, Wizard]** Teleports you to a free cell you can see, no more than 6 cells away. -# 139. - Moon Beam (V,S) level 2 Evocation [Concentration] [SOL] +# 138. - Moon Beam (V,S) level 2 Evocation [Concentration] [SOL] **[Druid]** Conjures a vertical column of moonlight which causes radiant damage. Shapechangers have disadvantage on the save. -# 140. - Noxious Spray (V,S) level 2 Evocation [UB] +# 139. - Noxious Spray (V,S) level 2 Evocation [UB] -**[Druid,Sorcerer,Warlock,Wizard]** +**[Druid, Sorcerer, Warlock, Wizard]** You unleash a spray of noxious gases on a target within range. Make a ranged spell attack. On a hit, the target takes 4d6 poison damage and must succeed on a Constitution saving throw or spend all its next turn retching and heaving, unable to move or take actions. Constructs, elementals and undead are unaffected by this spell. When you cast this spell using a slot of 3rd level or higher, you can target one additional creature for each slot level above 2nd. -# 141. - Pass Without Trace (V,S) level 2 Abjuration [Concentration] [SOL] +# 140. - Pass Without Trace (V,S) level 2 Abjuration [Concentration] [SOL] -**[Druid,Ranger]** +**[Druid, Ranger]** Make yourself and up to 5 allies stealthier for one hour. -# 142. - Petal Storm (V,S) level 2 Conjuration [Concentration] [UB] +# 141. - Petal Storm (V,S) level 2 Conjuration [Concentration] [UB] **[Druid]** Choose an unoccupied 15-foot cube of air that you can see within range. An elemental force of swirling winds appears in the cube and lasts for the spell's duration. The cloud heavily obscures its area. Any creature that enters the storm for the first time on a turn or starts its turn there must make a Strength saving throw. On a failed save, the creature takes 3d4 slashing damage. As a bonus action, you can move the storm up to 30 ft in any direction. -# 143. - Prayer of Healing (V) level 2 Evocation [SOL] +# 142. - Prayer of Healing (V) level 2 Evocation [SOL] **[Cleric]** Heal multiple allies at the same time. -# 144. - Protect Threshold (V,S) level 2 Abjuration [UB] +# 143. - Protect Threshold (V,S) level 2 Abjuration [UB] -**[Cleric,Druid,Paladin]** +**[Cleric, Druid, Paladin]** Tracing arcane sigils along its boundary, you can ward a doorway, window, or other portal from entry. For the duration, an invisible eldritch creature stalks the warded portal. Any creature that attempts to pass through the portal must make a Wisdom saving throw or take 4d6 psychic damage, or half as much on a successful save. -# 145. - Protection from Poison (V,S) level 2 Abjuration [SOL] +# 144. - Protection from Poison (V,S) level 2 Abjuration [SOL] -**[Artificer,Druid,Paladin,Ranger]** +**[Artificer, Druid, Paladin, Ranger]** Cures and protects against poison. -# 146. - Ray of Enfeeblement (V,S) level 2 Necromancy [Concentration] [SOL] +# 145. - Ray of Enfeeblement (V,S) level 2 Necromancy [Concentration] [SOL] -**[Sorcerer,Warlock,Wizard]** +**[Sorcerer, Warlock, Wizard]** Weaken an enemy so they deal less damage for one minute. -# 147. - *Rime's Binding Ice* © (S) level 2 Evocation [UB] +# 146. - *Rime's Binding Ice* © (S) level 2 Evocation [UB] -**[Sorcerer,Wizard]** +**[Sorcerer, Wizard]** A burst of cold energy emanates from you in a 30-foot cone. Each creature in that area must make a Constitution saving throw. On a failed save, a creature takes 3d8 cold damage and is hindered by ice formations for 1 minute, or until it uses an action to break away the ice. A creature hindered by ice has its speed reduced to 0. On a successful save, a creature takes half as much damage and isn't hindered by ice. -# 148. - Scorching Ray (V,S) level 2 Evocation [SOL] +# 147. - Scorching Ray (V,S) level 2 Evocation [SOL] -**[Sorcerer,Wizard]** +**[Sorcerer, Wizard]** Fling rays of fire at one or more enemies. -# 149. - See Invisibility (V,S) level 2 Divination [SOL] +# 148. - See Invisibility (V,S) level 2 Divination [SOL] -**[Artificer,Bard,Sorcerer,Wizard]** +**[Artificer, Bard, Sorcerer, Wizard]** You can see invisible creatures. -# 150. - *Shadow Blade* © (V,S) level 2 Illusion [Concentration] [UB] +# 149. - *Shadow Blade* © (V,S) level 2 Illusion [Concentration] [UB] -**[Sorcerer,Warlock,Wizard]** +**[Sorcerer, Warlock, Wizard]** You weave together threads of shadow to create a dagger of solidified gloom in your hand. It deals 2d8 psychic damage on a hit and has the finesse, light, and thrown properties. In addition, when you use it to attack a target that is in dim light or darkness, you make the attack roll with advantage. -# 151. - Shatter (V,S) level 2 Evocation [SOL] +# 150. - Shatter (V,S) level 2 Evocation [SOL] -**[Bard,Sorcerer,Warlock,Wizard]** +**[Bard, Sorcerer, Warlock, Wizard]** Triggers a sudden noise that causes Thunder Damage in a 2-cell radius. -# 152. - Silence (V,S) level 2 Illusion [Concentration] [SOL] +# 151. - Silence (V,S) level 2 Illusion [Concentration] [SOL] -**[Bard,Cleric,Ranger]** +**[Bard, Cleric, Ranger]** Creates a sphere four cells in radius, inside which sound cannot exist. Stops thunder damage and prevents spellcasting using verbal components. -# 153. - *Snilloc's Snowball Storm* © (V,S) level 2 Evocation [UB] +# 152. - *Snilloc's Snowball Storm* © (V,S) level 2 Evocation [UB] -**[Sorcerer,Wizard]** +**[Sorcerer, Wizard]** A flurry of magic snowballs erupts from a point you choose within range. Each creature in a 3x3 cube centered on that point must make a Dexterity saving throw. A creature takes 3d8 cold damage on a failed save, or half as much damage on a successful one. When you cast this spell using a spell slot of 3rd level or higher, the damage increases by 1d8 for each slot level above 2nd. -# 154. - Spider Climb (V,S) level 2 Transmutation [Concentration] [SOL] +# 153. - Spider Climb (V,S) level 2 Transmutation [Concentration] [SOL] -**[Artificer,Sorcerer,Warlock,Wizard]** +**[Artificer, Sorcerer, Warlock, Wizard]** Touch an ally to allow them to climb walls like a spider for a limited time. -# 155. - Spike Growth (V,S) level 2 Transmutation [Concentration] [SOL] +# 154. - Spike Growth (V,S) level 2 Transmutation [Concentration] [SOL] -**[Druid,Ranger]** +**[Druid, Ranger]** Grows spikes and thorns in the area, making the terrain difficult and causing damage for every cell of movement. -# 156. - Spiritual Weapon (V,S) level 2 Evocation [SOL] +# 155. - Spiritual Weapon (V,S) level 2 Evocation [SOL] **[Cleric]** Summon a weapon that fights for you. -# 157. - *Tasha's Mind Whip* © (V) level 2 Enchantment [UB] +# 156. - *Tasha's Mind Whip* © (V) level 2 Enchantment [UB] -**[Sorcerer,Wizard]** +**[Sorcerer, Wizard]** You psychically lash out at one creature you can see within range. The target must make an Intelligence saving throw. On a failed save, the target takes 3d6 psychic damage, and it can't take a reaction until the end of its next turn. Moreover, on its next turn, it must choose whether it gets a move, an action, or a bonus action; it gets only one of the three. On a successful save, the target takes half as much damage and suffers none of the spell's other effects. When you cast this spell using a spell slot of 3rd level or higher, you can target one additional creature for each slot level above 2nd. -# 158. - *Warding Bond* © (V,S) level 2 Abjuration [SOL] +# 157. - *Warding Bond* © (V,S) level 2 Abjuration [SOL] Creates a bond with the target, who gains +1 AC, +1 to saving throws and resistance to all damage, but you share all damage it receives. Lasts for one hour. -# 159. - *Web* © (V,S) level 2 Conjuration [Concentration] [UB] +# 158. - *Web* © (V,S) level 2 Conjuration [Concentration] [UB] -**[Artificer,Sorcerer,Wizard]** +**[Artificer, Sorcerer, Wizard]** You conjure a mass of thick, sticky webbing at a point of your choice within range. The webs fill a 20-foot cube from that point for the duration. The webs are difficult terrain and lightly obscure their area. Each creature that enters them during its turn must make a Dexterity saving throw. On a failed save, the creature is restrained as long as it remains in the webs or until it breaks free. A creature restrained by the webs can use its actions to make a Strength check against your spell save DC. If it succeeds, it is no longer restrained. -# 160. - *Wither and Bloom* © (V,S) level 2 Necromancy [UB] +# 159. - *Wither and Bloom* © (V,S) level 2 Necromancy [UB] -**[Druid,Sorcerer,Wizard]** +**[Druid, Sorcerer, Wizard]** You invoke both death and life upon a 10-foot-radius sphere centered on an ally. Each enemy in that area must make a Constitution saving throw, taking 2d6 necrotic damage on a failed save, or half as much damage on a successful one. In addition, the target spends and rolls one of its unspent Hit Dice and regain a number of hit points equal to the roll plus your spellcasting ability modifier. When you cast this spell using a spell slot of 3rd level or higher, the damage increases by 1d6 for each slot above 2nd, and the number of Hit Dice that can be spent and added to the healing roll increases by one for each slot above 2nd. -# 161. - Adder's Fangs (V,S) level 3 Conjuration [UB] +# 160. - Adder's Fangs (V,S) level 3 Conjuration [UB] -**[Druid,Ranger,Sorcerer,Warlock]** +**[Druid, Ranger, Sorcerer, Warlock]** You create the visage of a massive green snake that appears for an instant before bearing down on your foe. Choose a creature you can see within range. The target must make a constitution saving throw, taking 4d10 poison damage on a failure, or half as much damage on a successful one. A creature that fails its saving throw is also poisoned, and its speed is halved while poisoned by this spell. At the end of each of its turns, a target may make a constitution saving throw, ending the poison on a success. Otherwise, the poison lasts for 1 minute. When you cast this spell using a spell slot of 4th level or higher, you may target an additional creature within range for each slot level above 3rd. -# 162. - *Ashardalon's Stride* © (V,S) level 3 Transmutation [Concentration] [UB] +# 161. - *Ashardalon's Stride* © (V,S) level 3 Transmutation [Concentration] [UB] -**[Artificer,Ranger,Sorcerer,Wizard]** +**[Artificer, Ranger, Sorcerer, Wizard]** The billowing flames of a dragon blast from your feet, granting you explosive speed. For the duration, your speed increases by 20 feet and moving doesn't provoke opportunity attacks. When you move within 5 feet of a creature, it takes 1d6 fire damage from your trail of heat. A creature can take this damage only once during a turn. When you cast this spell using a spell slot of 4th level or higher, increase your speed by 5 feet for each spell slot level above 3rd. The spell deals an additional 1d6 fire damage for each slot level above 3rd. -# 163. - *Aura of Vitality* © (V) level 3 Evocation [Concentration] [UB] +# 162. - *Aura of Vitality* © (V) level 3 Evocation [Concentration] [UB] -**[Cleric,Paladin]** +**[Cleric, Paladin]** Healing energy radiates from you in an aura with a 30-foot radius. Until the spell ends, the aura moves with you, centered on you. You can use a bonus action to cause one creature in the aura (including you) to regain 2d6 hit points. -# 164. - Beacon of Hope (V,S) level 3 Abjuration [Concentration] [SOL] +# 163. - Beacon of Hope (V,S) level 3 Abjuration [Concentration] [SOL] **[Cleric]** Raise hope and vitality. -# 165. - Bestow Curse (V,S) level 3 Necromancy [Concentration] [SOL] +# 164. - Bestow Curse (V,S) level 3 Necromancy [Concentration] [SOL] -**[Bard,Cleric,Wizard]** +**[Bard, Cleric, Wizard]** Curses a creature you can touch. -# 166. - *Blinding Smite* © (V) level 3 Evocation [Concentration] [UB] +# 165. - *Blinding Smite* © (V) level 3 Evocation [Concentration] [UB] **[Paladin]** On your next hit your weapon flares with a bright light, and the attack deals an extra 3d8 radiant damage to the target. Additionally, the target must succeed on a Constitution saving throw or be blinded until the spell ends. A creature blinded by this spell makes another Constitution saving throw at the end of each of its turns. On a successful save, it is no longer blinded. -# 167. - Call Lightning (V,S) level 3 Conjuration [Concentration] [SOL] +# 166. - Call Lightning (V,S) level 3 Conjuration [Concentration] [SOL] **[Druid]** Conjures a storm cloud from which you can call a vertical bolt of lightning to strike targets, dealing 3D10 lightning damage. Another bolt can be repeated every turn by using an action. -# 168. - Conjure Animal (V,S) level 3 Conjuration [Concentration] [SOL] +# 167. - Conjure Animal (V,S) level 3 Conjuration [Concentration] [SOL] -**[Druid,Ranger]** +**[Druid, Ranger]** Summon spirits in the form of beasts to help you in battle -# 169. - Corrupting Bolt (V,S) level 3 Necromancy [UB] +# 168. - Corrupting Bolt (V,S) level 3 Necromancy [UB] -**[Sorcerer,Warlock,Wizard]** +**[Sorcerer, Warlock, Wizard]** You can fire a pulse of necrotic energy that causes a creature's body to begin to wither and decay. Make a ranged attack against a creature. On a hit, the target takes 4d8 necrotic damage and must succeed a Constitution saving throw. On a failed saving throw, the next time you or an ally of yours hits the corrupted creature with an attack before the end of your next turn, the creature has vulnerability to all of that attack's damage, and then the corruption ends. When you cast this spell using a spell slot of 4th level or higher, the damage increases by 1d8 for each slot level above 3rd. -# 170. - Counterspell (S) level 3 Abjuration [SOL] +# 169. - Counterspell (S) level 3 Abjuration [SOL] -**[Sorcerer,Warlock,Wizard]** +**[Sorcerer, Warlock, Wizard]** Interrupt an enemy's spellcasting. -# 171. - Create Food (S) level 3 Conjuration [SOL] +# 170. - Create Food (S) level 3 Conjuration [SOL] -**[Artificer,Cleric,Paladin]** +**[Artificer, Cleric, Paladin]** Conjure 15 units of food. -# 172. - *Crusader's Mantle* © (V) level 3 Evocation [Concentration] [UB] +# 171. - *Crusader's Mantle* © (V) level 3 Evocation [Concentration] [UB] **[Paladin]** Surround yourself with a magical aura. Allies within the aura gain a bonus 1d4 radiant damage on their attacks. -# 173. - Daylight (V,S) level 3 Evocation [SOL] +# 172. - Daylight (V,S) level 3 Evocation [SOL] -**[Cleric,Druid,Paladin,Ranger,Sorcerer]** +**[Cleric, Druid, Paladin, Ranger, Sorcerer]** Summon a globe of bright light. -# 174. - Dispel Magic (V,S) level 3 Abjuration [SOL] +# 173. - Dispel Magic (V,S) level 3 Abjuration [SOL] -**[Artificer,Bard,Cleric,Druid,Paladin,Sorcerer,Warlock,Wizard]** +**[Artificer, Bard, Cleric, Druid, Paladin, Sorcerer, Warlock, Wizard]** End active spells on a creature or object. -# 175. - *Elemental Weapon* © (V,S) level 3 Transmutation [Concentration] [UB] +# 174. - *Elemental Weapon* © (V,S) level 3 Transmutation [Concentration] [UB] -**[Artificer,Druid,Paladin,Ranger]** +**[Artificer, Druid, Paladin, Ranger]** Imbue a non-magical weapon with elemental magic. It gains a +1 to attack and damage rolls, and it gains 1d4 of the corresponding element's damage. When casting with a 5 or 6 spell slots, the effects increased by one die while casting at a spell slot 7 or higher increases the effects by 2. -# 176. - Fear (V,S) level 3 Illusion [Concentration] [SOL] +# 175. - Fear (V,S) level 3 Illusion [Concentration] [SOL] -**[Bard,Sorcerer,Warlock,Wizard]** +**[Bard, Sorcerer, Warlock, Wizard]** Frighten creatures and force them to flee. -# 177. - Fireball (V,S) level 3 Evocation [SOL] +# 176. - Fireball (V,S) level 3 Evocation [SOL] -**[Sorcerer,Wizard]** +**[Sorcerer, Wizard]** Launch a fireball that explodes from a point of your choosing. -# 178. - *Flame Arrows* © (M,V,S) level 3 Transmutation [Concentration] [UB] +# 177. - *Flame Arrows* © (M,V,S) level 3 Transmutation [Concentration] [UB] -**[Artificer,Druid,Ranger,Sorcerer,Wizard]** +**[Artificer, Druid, Ranger, Sorcerer, Wizard]** You must be wielding a ranged weapon. When a target is hit by it, the target takes an extra 1d6 fire damage. The spell ends when twelve pieces of ammunition have been drawn from the quiver. When you cast this spell using a spell slot of 4th level or higher, the number of pieces of ammunition you can affect with this spell increases by two for each slot level above 3rd. -# 179. - Fly (V,S) level 3 Transmutation [Concentration] [SOL] +# 178. - Fly (V,S) level 3 Transmutation [Concentration] [SOL] -**[Artificer,Sorcerer,Warlock,Wizard]** +**[Artificer, Sorcerer, Warlock, Wizard]** An ally you touch gains the ability to fly for a limited time. -# 180. - Haste (V,S) level 3 Transmutation [Concentration] [SOL] +# 179. - Haste (V,S) level 3 Transmutation [Concentration] [SOL] -**[Artificer,Sorcerer,Wizard]** +**[Artificer, Sorcerer, Wizard]** Make an ally faster and more agile, and grant them an additional action for a limited time. -# 181. - *Hunger of Hadar* © (V,S) level 3 Transmutation [Concentration] [UB] +# 180. - *Hunger of Hadar* © (V,S) level 3 Transmutation [Concentration] [UB] **[Warlock]** You open a gateway to the dark between the stars, a region infested with unknown horrors. A 20-foot-radius sphere of blackness and bitter cold appears, centered on a point with range and lasting for the duration. The area extinguishes light, and creatures within it are blinded. Any creature that starts its turn in the area takes 2d6 cold damage. Any creature that ends its turn in the area must succeed on a Dexterity saving throw or take 2d6 acid damage as milky, otherworldly tentacles rub against it. -# 182. - Hypnotic Pattern (S) level 3 Illusion [Concentration] [SOL] +# 181. - Hypnotic Pattern (S) level 3 Illusion [Concentration] [SOL] -**[Bard,Sorcerer,Warlock,Wizard]** +**[Bard, Sorcerer, Warlock, Wizard]** Charms enemies to make them harmless until attacked, but also affects allies in range. -# 183. - *Intellect Fortress* © (V) level 3 Abjuration [Concentration] [UB] +# 182. - *Intellect Fortress* © (V) level 3 Abjuration [Concentration] [UB] -**[Artificer,Bard,Sorcerer,Warlock,Wizard]** +**[Artificer, Bard, Sorcerer, Warlock, Wizard]** For the duration, you or one willing creature you can see within range has resistance to psychic damage, as well as advantage on Intelligence, Wisdom, and Charisma saving throws. When you cast this spell using a spell slot of 4th level or higher, you may target an additional creature within range for each slot level above 3rd. -# 184. - *Life Transference* © (V,S) level 3 Necromancy [UB] +# 183. - *Life Transference* © (V,S) level 3 Necromancy [UB] -**[Cleric,Wizard]** +**[Cleric, Wizard]** You sacrifice some of your health to mend another creature's injuries. You take 4d8 necrotic damage, and one creature of your choice that you can see within range regains a number of hit points equal to twice the necrotic damage you take. When you cast this spell using a spell s lot of 4th level or higher, the damage increases by 1d8 for each slot level above 3rd. -# 185. - *Lightning Arrow* © (V,S) level 3 Transmutation [Concentration] [UB] +# 184. - *Lightning Arrow* © (V,S) level 3 Transmutation [Concentration] [UB] **[Ranger]** The next time you make a ranged weapon attack during the spell's duration, the weapon's ammunition, or the weapon itself if it's a thrown weapon, transforms into a bolt of lightning. Make the attack roll as normal. The target takes 3d8 lightning damage on a hit, or half as much damage on a miss. Whether you hit or miss, each creature within 10 feet of the target must make a Dexterity saving throw. Each of these creatures takes 2d8 lightning damage on a failed save, or half as much damage on a successful one. When you cast this spell using a spell slot of 4th level or higher, the damage for both effects of the spell increases by 1d8 for each slot level above 3rd. -# 186. - Lightning Bolt (V,S) level 3 Evocation [SOL] +# 185. - Lightning Bolt (V,S) level 3 Evocation [SOL] -**[Sorcerer,Wizard]** +**[Sorcerer, Wizard]** Unleash a stroke of lightning in a direction of your choice, damaging everyone it touches. -# 187. - Mass Healing Word (V) level 3 Evocation [SOL] +# 186. - Mass Healing Word (V) level 3 Evocation [SOL] **[Cleric]** Instantly heals up to six allies you can see. -# 188. - Protection from Energy (V,S) level 3 Abjuration [Concentration] [SOL] +# 187. - Protection from Energy (V,S) level 3 Abjuration [Concentration] [SOL] -**[Artificer,Cleric,Druid,Ranger,Sorcerer,Wizard]** +**[Artificer, Cleric, Druid, Ranger, Sorcerer, Wizard]** Touch one willing creature to give them resistance to this damage type. -# 189. - *Pulse Wave* © (V,S) level 3 Evocation [UB] +# 188. - *Pulse Wave* © (V,S) level 3 Evocation [UB] **[Wizard]** You create intense pressure, unleash it in a 30-foot cone, and decide whether the pressure pulls or pushes creatures and objects. Each creature in that cone must make a Constitution saving throw. A creature takes 6d6 force damage on a failed save, or half as much damage on a successful one. And every creature that fails the save is either pulled 15 feet toward you or pushed 15 feet away from you, depending on the choice you made for the spell. When you cast this spell using a spell slot of 4th level or higher, the damage increases by 1d6 and the distance pulled or pushed increases by 5 feet for each slot level above 3rd. -# 190. - Remove Curse (V,S) level 3 Abjuration [SOL] +# 189. - Remove Curse (V,S) level 3 Abjuration [SOL] -**[Cleric,Paladin,Warlock,Wizard]** +**[Cleric, Paladin, Warlock, Wizard]** Removes all curses affecting the target. -# 191. - Revivify (M,V,S) level 3 Necromancy [SOL] +# 190. - Revivify (M,V,S) level 3 Necromancy [SOL] -**[Artificer,Cleric,Paladin]** +**[Artificer, Cleric, Paladin]** Brings one creature back to life, up to 1 minute after death. -# 192. - Sleet Storm (V,S) level 3 Conjuration [Concentration] [SOL] +# 191. - Sleet Storm (V,S) level 3 Conjuration [Concentration] [SOL] -**[Druid,Sorcerer,Wizard]** +**[Druid, Sorcerer, Wizard]** Creates an area where the ground is slippery, vision is obscured, and concentration is harder. -# 193. - Slow (V,S) level 3 Transmutation [Concentration] [SOL] +# 192. - Slow (V,S) level 3 Transmutation [Concentration] [SOL] -**[Sorcerer,Wizard]** +**[Sorcerer, Wizard]** Slows and impairs the actions of up to 6 creatures. -# 194. - Spirit Guardians (V,S) level 3 Conjuration [Concentration] [SOL] +# 193. - Spirit Guardians (V,S) level 3 Conjuration [Concentration] [SOL] **[Cleric]** Call forth spirits to protect you. -# 195. - *Spirit Shroud* © (V,S) level 3 Necromancy [Concentration] [UB] +# 194. - *Spirit Shroud* © (V,S) level 3 Necromancy [Concentration] [UB] -**[Cleric,Paladin,Warlock,Wizard]** +**[Cleric, Paladin, Warlock, Wizard]** You call forth spirits of the dead, which flit around you for the spell's duration. The spirits are intangible and invulnerable. Until the spell ends, any attack you make deals 1d8 extra damage when you hit a creature within 10 ft of you. This damage is radiant, necrotic, or cold (your choice when you cast the spell). Any creature that takes this damage can't regain hit points until the start of your next turn. In addition, any enemy creature within 10ft of you when you cast, or that enters or starts its turn in that range has its movement speed lowered by 10ft until start of its next turn. When you cast this spell using a spell slot of 4th level or higher, the damage increases by 1d8 for every two slot levels above 3rd. -# 196. - Stinking Cloud (V,S) level 3 Conjuration [Concentration] [SOL] +# 195. - Stinking Cloud (V,S) level 3 Conjuration [Concentration] [SOL] -**[Bard,Sorcerer,Wizard]** +**[Bard, Sorcerer, Wizard]** Create a cloud of incapacitating, noxious gas. -# 197. - *Thunder Step* © (V) level 3 Conjuration [UB] +# 196. - *Thunder Step* © (V) level 3 Conjuration [UB] -**[Sorcerer,Warlock,Wizard]** +**[Sorcerer, Warlock, Wizard]** You teleport yourself to an unoccupied space you can see within range. Immediately after you disappear, a thunderous boom sounds, and each creature within 10 feet of the space you left must make a Constitution saving throw, taking 3d10 thunder damage on a failed save, or half as much damage on a successful one. You can also teleport one willing ally. When you cast this spell using a spell slot of 4th level or higher, the damage increases by 1d10 for each slot level above 3rd. -# 198. - Tongues (V) level 3 Divination [SOL] +# 197. - Tongues (V) level 3 Divination [SOL] -**[Bard,Cleric,Sorcerer,Warlock,Wizard]** +**[Bard, Cleric, Sorcerer, Warlock, Wizard]** Grants knowledge of all languages for one hour. -# 199. - Vampiric Touch (V,S) level 3 Necromancy [Concentration] [SOL] +# 198. - Vampiric Touch (V,S) level 3 Necromancy [Concentration] [SOL] -**[Warlock,Wizard]** +**[Warlock, Wizard]** Grants you a life-draining melee attack for one minute. -# 200. - Wind Wall (V,S) level 3 Evocation [Concentration] [SOL] +# 199. - Wind Wall (V,S) level 3 Evocation [Concentration] [SOL] -**[Druid,Ranger]** +**[Druid, Ranger]** Create a wall of wind that causes damage, pushes creatures and objects away, and disperses fogs and gases. -# 201. - Winter's Breath (V,S) level 3 Conjuration [UB] +# 200. - Winter's Breath (V,S) level 3 Conjuration [UB] -**[Druid,Sorcerer,Wizard]** +**[Druid, Sorcerer, Wizard]** Create a blast of cold wind to chill your enemies and knock them prone. -# 202. - *Aura of Life* © (V) level 4 Abjuration [Concentration] [UB] +# 201. - *Aura of Life* © (V) level 4 Abjuration [Concentration] [UB] -**[Cleric,Paladin]** +**[Cleric, Paladin]** Life-preserving energy radiates from you in an aura with a 30-foot radius. Until the spell ends, the aura moves with you, centered on you. Each non-hostile creature in the aura, including you, has resistance to necrotic damage, and its hit point maximum can't be reduced. In addition, a non-hostile, living creature regains 1 hit point when it starts its turn in the aura with 0 hit points. -# 203. - *Aura of Purity* © (V) level 4 Abjuration [Concentration] [UB] +# 202. - *Aura of Purity* © (V) level 4 Abjuration [Concentration] [UB] -**[Cleric,Paladin]** +**[Cleric, Paladin]** Purifying energy radiates from you in an aura with a 30-foot radius. Until the spell ends, the aura moves with you, centered on you. Each non-hostile creature in the aura, including you, can't become diseased, has resistance to poison damage, and has advantage on saving throws against effects that cause any of the following conditions: blinded, charmed, deafened, frightened, paralyzed, poisoned, and stunned. -# 204. - Banishment (V,S) level 4 Abjuration [Concentration] [SOL] +# 203. - Banishment (V,S) level 4 Abjuration [Concentration] [SOL] -**[Cleric,Paladin,Sorcerer,Warlock,Wizard]** +**[Cleric, Paladin, Sorcerer, Warlock, Wizard]** Banishes a creature as long as you concentrate. The creature can be permanently banished if it is extraplanar. -# 205. - Black Tentacles (V,S) level 4 Conjuration [Concentration] [SOL] +# 204. - Black Tentacles (V,S) level 4 Conjuration [Concentration] [SOL] **[Wizard]** Conjures black tentacles that restrain and damage creatures within the area of effect. -# 206. - Blessing of Rime (V,S) level 4 Evocation [UB] +# 205. - Blessing of Rime (V,S) level 4 Evocation [UB] -**[Bard,Druid,Ranger]** +**[Bard, Druid, Ranger]** You summon a chill wind that numbs the pain of your allies. Choose up to three creatures within range. Each creature gains 3d8 temporary hit points for the duration. While a creature has these hit points, if it would make a Constitution saving throw, it gains advantage on the roll. When you cast this spell using a spell slot of 5th level or higher, the temporary hit points increase by 1d8 for each slot level above 4th. -# 207. - Blight (V,S) level 4 Necromancy [SOL] +# 206. - Blight (V,S) level 4 Necromancy [SOL] -**[Druid,Sorcerer,Warlock,Wizard]** +**[Druid, Sorcerer, Warlock, Wizard]** Drains life from a creature, causing massive necrotic damage. -# 208. - Brain Bulwark (V) level 4 Abjuration [UB] +# 207. - Brain Bulwark (V) level 4 Abjuration [UB] -**[Artificer,Bard,Sorcerer,Warlock,Wizard]** +**[Artificer, Bard, Sorcerer, Warlock, Wizard]** For the duration, you or one willing creature you can see within range has resistance to psychic damage, as well as Immunity to the Charmed, Frightened, Fear, Mind dominated and Mind controlled conditions. -# 209. - Confusion (V,S) level 4 Enchantment [Concentration] [SOL] +# 208. - Confusion (V,S) level 4 Enchantment [Concentration] [SOL] -**[Bard,Druid,Sorcerer,Wizard]** +**[Bard, Druid, Sorcerer, Wizard]** Creates confusion and erratic behavior in a creature, possibly leading it to attack its allies. -# 210. - Conjure 4 Elementals (V,S) level 4 Conjuration [Concentration] [SOL] +# 209. - Conjure 4 Elementals (V,S) level 4 Conjuration [Concentration] [SOL] 4 elementals are conjured (CR 1/2). -# 211. - Conjure Minor Elementals (V,S) level 4 Conjuration [Concentration] [SOL] +# 210. - Conjure Minor Elementals (V,S) level 4 Conjuration [Concentration] [SOL] -**[Druid,Wizard]** +**[Druid, Wizard]** Conjure elemental creatures under your command, which are dismissed when the spell ends or is broken. -# 212. - Death Ward (V,S) level 4 Abjuration [SOL] +# 211. - Death Ward (V,S) level 4 Abjuration [SOL] -**[Cleric,Paladin]** +**[Cleric, Paladin]** Protects the creature once against instant death or being reduced to 0 hit points. -# 213. - Dimension Door (V) level 4 Conjuration [SOL] +# 212. - Dimension Door (V) level 4 Conjuration [SOL] -**[Bard,Sorcerer,Warlock,Wizard]** +**[Bard, Sorcerer, Warlock, Wizard]** Transfers the caster and a friendly creature to a specified destination. -# 214. - Dominate Beast (V,S) level 4 Enchantment [Concentration] [SOL] +# 213. - Dominate Beast (V,S) level 4 Enchantment [Concentration] [SOL] -**[Druid,Sorcerer]** +**[Druid, Sorcerer]** Grants you control over an enemy beast. -# 215. - Dreadful Omen (V,S) level 4 Enchantment [SOL] +# 214. - Dreadful Omen (V,S) level 4 Enchantment [SOL] -**[Bard,Warlock]** +**[Bard, Warlock]** You whisper dreadful words that cause immense mental anguish in your enemies. On a failed wisdom saving throw, they take psychic damage and become frightened until the end of their next turn, moving away from you as much as possible. On a successful save, they take half as much damage and are not frightened. -# 216. - *Elemental Bane* © (V,S) level 4 Transmutation [Concentration] [UB] +# 215. - *Elemental Bane* © (V,S) level 4 Transmutation [Concentration] [UB] -**[Artificer,Druid,Warlock,Wizard]** +**[Artificer, Druid, Warlock, Wizard]** Choose one creature you can see within range, and choose one of the following damage types: acid, cold, fire, lightning, or thunder. The target must succeed on a Constitution saving throw or be affected by the spell for its duration. The first time each turn the affected target takes non-recurrent damage of the chosen type, the target takes an extra 2d6 damage of that type. Moreover, the target loses any resistance to that damage type until the spell ends. When you cast this spell using a spell slot of 5th level or higher, you can target one additional creature for each slot level above 4th. The creatures must be within 30 feet of each other when you target them. -# 217. - Fire Shield (V,S) level 4 Evocation [SOL] +# 216. - Fire Shield (V,S) level 4 Evocation [SOL] -**[Sorcerer,Wizard]** +**[Sorcerer, Wizard]** Grants resistance to fire or cold, and damages creatures attacking the caster with melee attacks. -# 218. - Freedom of Movement (V,S) level 4 Abjuration [SOL] +# 217. - Freedom of Movement (V,S) level 4 Abjuration [SOL] -**[Artificer,Bard,Cleric,Druid,Ranger]** +**[Artificer, Bard, Cleric, Druid, Ranger]** Grants immunity to movement restrictions, as well as being paralyzed or restrained. -# 219. - Giant Insect (V,S) level 4 Transmutation [Concentration] [SOL] +# 218. - Giant Insect (V,S) level 4 Transmutation [Concentration] [SOL] **[Druid]** Conjures a giant version of a natural insect or arthropod. -# 220. - *Gravity Sinkhole* © (V,S) level 4 Evocation [UB] +# 219. - *Gravity Sinkhole* © (V,S) level 4 Evocation [UB] **[Wizard]** A 20-foot-radius sphere of crushing force forms at a point you can see within range and tugs at the creatures there. Each creature in the sphere must make a Constitution saving throw. On a failed save, the creature takes 5d10 force damage, and is pulled in a straight line toward the center of the sphere, ending in an unoccupied space as close to the center as possible. On a successful save, the creature takes half as much damage and isn't pulled. When you cast this spell using a spell slot of 5th level or higher, the damage increases by 1d10 for each slot level above 4th. -# 221. - Greater Invisibility (V,S) level 4 Illusion [Concentration] [SOL] +# 220. - Greater Invisibility (V,S) level 4 Illusion [Concentration] [SOL] -**[Bard,Sorcerer,Wizard]** +**[Bard, Sorcerer, Wizard]** Target becomes invisible for the duration, even when attacking or casting spells. -# 222. - Guardian of Faith (V) level 4 Conjuration [SOL] +# 221. - Guardian of Faith (V) level 4 Conjuration [SOL] **[Cleric]** Conjures a large spectral guardian that damages approaching enemies. -# 223. - *Guardian of Nature* © (V) level 4 Transmutation [Concentration] [UB] +# 222. - *Guardian of Nature* © (V) level 4 Transmutation [Concentration] [UB] -**[Druid,Ranger]** +**[Druid, Ranger]** A nature spirit answers your call and transforms you into a powerful guardian. The transformation lasts until the spell ends. You choose between a Beast or a Tree form. -# 224. - Ice Storm (V,S) level 4 Evocation [SOL] +# 223. - Ice Storm (V,S) level 4 Evocation [SOL] -**[Druid,Sorcerer,Wizard]** +**[Druid, Sorcerer, Wizard]** Causes bludgeoning and cold damage in the area, and turns the ground into difficult terrain. -# 225. - Identify Creatures (V,S) level 4 Divination [SOL] +# 224. - Identify Creatures (V,S) level 4 Divination [SOL] **[Wizard]** Reveals full bestiary knowledge for the affected creatures. -# 226. - Irresistible Performance (V) level 4 Enchantment [UB] +# 225. - Irresistible Performance (V) level 4 Enchantment [UB] **[Bard]** You weave a song into the air, causing those who hear it to applaud its magnificence. All creatures of your choice inside a 30-foot-cube within range must make a Charisma saving throw or be forced to clap and shout until the start of your next turn. A creature that is charmed by you always fails this saving throw. A clapping creature cannot perform any actions that require their hands or mouth but can otherwise act normally. This spell has no effect on creatures that are immune to charm. -# 227. - *Mordenkainen's Faithful Hound* © (V,S) level 4 Conjuration [UB] +# 226. - *Mordenkainen's Faithful Hound* © (V,S) level 4 Conjuration [UB] -**[Artificer,Wizard]** +**[Artificer, Wizard]** You conjure a phantom watchdog in an unoccupied space that you can see within range, where it remains for the duration. The hound has Darkvision up to 60 ft, Truesight up to 80 ft, is invisible to all creatures except you and can't be harmed. During each of your turns, the hound can attempt to bite one creature within 5 feet of it that is hostile to you as a free action. The hound's attack bonus is equal to your spellcasting ability modifier + your proficiency bonus. On a hit, it deals 4d8 piercing damage. -# 228. - Phantasmal Killer (V,S) level 4 Illusion [Concentration] [SOL] +# 227. - Phantasmal Killer (V,S) level 4 Illusion [Concentration] [SOL] **[Wizard]** Causes psychic damage to the target creature with each turn, unless a saving throw is successful or the effect ends. -# 229. - Psionic Blast (V) level 4 Evocation [UB] +# 228. - Psionic Blast (V) level 4 Evocation [UB] -**[Sorcerer,Warlock,Wizard]** +**[Sorcerer, Warlock, Wizard]** You unleash a debilitating wave of mental power in a 30-foot cone. Each creature in the area must make an Intelligence saving throw. On a failed save, a target takes 5d8 psychic damage, becomes dazzled and has its movement speed halved until the end of your next turn. On a successful save, a target only takes half as much damage. When you cast this spell using a spell slot of 4th level or higher, the damage increases by 1d8 for each slot level above 4th. -# 230. - *Raulothim's Psychic Lance* © (V) level 4 Enchantment [UB] +# 229. - *Raulothim's Psychic Lance* © (V) level 4 Enchantment [UB] -**[Bard,Sorcerer,Warlock,Wizard]** +**[Bard, Sorcerer, Warlock, Wizard]** You unleash a shimmering lance of psychic power from your forehead at a creature that you can see within range. It must succeed on an Intelligence saving throw or take 7d6 psychic damage and be incapacitated until the end of your next turn. On a successful save, the creature takes half damage and isn't incapacitated. At Higher Levels. When you cast this spell using a spell slot of 4th level or higher, the damage increases by 1d6 for each slot level above 4th. -# 231. - *Sickening Radiance* © (V,S) level 4 Evocation [Concentration] [UB] +# 230. - *Sickening Radiance* © (V,S) level 4 Evocation [Concentration] [UB] -**[Sorcerer,Warlock,Wizard]** +**[Sorcerer, Warlock, Wizard]** Dim light spreads within a 30-foot-radius sphere centered on a point you choose within range. The light spreads around corners, and it lasts until the spell ends. When a creature moves into the spell's area for the first time on a turn or starts its turn there, that creature must succeed on a Constitution saving throw or take 4d10 radiant damage, and it suffers one level of exhaustion and emits a dim light in a 5-foot radius. This light makes it impossible for the creature to benefit from being invisible. The light and any levels of exhaustion caused by this spell go away when the spell ends. -# 232. - *Staggering Smite* © (V) level 4 Evocation [Concentration] [UB] +# 231. - *Staggering Smite* © (V) level 4 Evocation [Concentration] [UB] **[Paladin]** The next time you hit a creature with a weapon attack during this spell's duration, your weapon pierces both body and mind, and the attack deals an extra 4d6 psychic damage to the target. The target must make a Wisdom saving throw. On a failed save, it has disadvantage on attack rolls and ability checks, and can't take reactions, until the end of its next turn. -# 233. - Stoneskin (M,V,S) level 4 Abjuration [Concentration] [SOL] +# 232. - Stoneskin (M,V,S) level 4 Abjuration [Concentration] [SOL] -**[Artificer,Druid,Ranger,Sorcerer,Wizard]** +**[Artificer, Druid, Ranger, Sorcerer, Wizard]** Grants resistance to non-magical bludgeoning, slashing, and piercing damage. -# 234. - *Vitriolic Sphere* © (V,S) level 4 Evocation [UB] +# 233. - *Vitriolic Sphere* © (V,S) level 4 Evocation [UB] -**[Sorcerer,Wizard]** +**[Sorcerer, Wizard]** You point at a place within range, and a glowing 1-foot ball of emerald acid streaks there and explodes in a 20-foot radius. Each creature in that area must make a Dexterity saving throw. On a failed save, a creature takes 10d4 acid damage and 5d4 acid damage at the end of its next turn. On a successful save, a creature takes half the initial damage and no damage at the end of its next turn. When you cast this spell using a spell slot of 5th level or higher, the initial damage increases by 2d4 for each slot level above 4th. -# 235. - Wall of Fire (V,S) level 4 Evocation [Concentration] [SOL] +# 234. - Wall of Fire (V,S) level 4 Evocation [Concentration] [SOL] -**[Druid,Sorcerer,Wizard]** +**[Druid, Sorcerer, Wizard]** Create a burning wall that injures creatures in or next to it. -# 236. - *Banishing Smite* © (V) level 5 Abjuration [Concentration] [UB] +# 235. - *Banishing Smite* © (V) level 5 Abjuration [Concentration] [UB] **[Paladin]** Your next hit deals additional 5d10 force damage with your weapon. Additionally, if this attack reduces the target to 50 hit points of fewer, you banish it for 1 min. -# 237. - *Circle of Power* © (V) level 5 Abjuration [Concentration] [UB] +# 236. - *Circle of Power* © (V) level 5 Abjuration [Concentration] [UB] **[Paladin]** Divine energy radiates from you, distorting and diffusing magical energy within 30 feet of you. Until the spell ends, the sphere moves with you, centered on you. For the duration, each friendly creature in the area, including you, has advantage on saving throws against spells and other magical effects. Additionally, when an affected creature succeeds on a saving throw made against a spell or magical effect that allows it to make a saving throw to take only half damage, it instead takes no damage if it succeeds on the saving throws. -# 238. - Cloudkill (V,S) level 5 Conjuration [Concentration] [SOL] +# 237. - Cloudkill (V,S) level 5 Conjuration [Concentration] [SOL] -**[Sorcerer,Wizard]** +**[Sorcerer, Wizard]** Creates an obscuring and poisonous cloud. The cloud moves every round. -# 239. - Cone of Cold (V,S) level 5 Evocation [SOL] +# 238. - Cone of Cold (V,S) level 5 Evocation [SOL] -**[Sorcerer,Wizard]** +**[Sorcerer, Wizard]** Inflicts massive cold damage in the cone of effect. -# 240. - Conjure Elemental (V,S) level 5 Conjuration [Concentration] [SOL] +# 239. - Conjure Elemental (V,S) level 5 Conjuration [Concentration] [SOL] -**[Druid,Wizard]** +**[Druid, Wizard]** Conjures an elemental of the chosen element that fights alongside you. If you lose concentration, the elemental remains and becomes hostile. -# 241. - Contagion (V,S) level 5 Necromancy [SOL] +# 240. - Contagion (V,S) level 5 Necromancy [SOL] -**[Cleric,Druid]** +**[Cleric, Druid]** Hit a creature to inflict a disease from the options. -# 242. - *Dawn* © (V,S) level 5 Evocation [Concentration] [UB] +# 241. - *Dawn* © (V,S) level 5 Evocation [Concentration] [UB] -**[Cleric,Wizard]** +**[Cleric, Wizard]** The light of dawn shines down on a location you specify within range. Until the spell ends, a 30-foot-radius, 40-foot-high cylinder of bright light glimmers there. This light is sunlight. When the cylinder appears, each creature in it must make a Constitution saving throw, taking 4d10 radiant damage on a failed save, or half as much damage on a successful one. A creature must also make this saving throw whenever it ends its turn in the cylinder. If you're within 60 feet of the cylinder, you can move it up to 60 feet as a bonus action on your turn. -# 243. - *Destructive Wave* © (V) level 5 Evocation [UB] +# 242. - *Destructive Wave* © (V) level 5 Evocation [UB] **[Paladin]** You strike the ground, creating a burst of divine energy that ripples outward from you. Each creature you choose within 30 feet of you must succeed on a Constitution saving throw or take 5d6 thunder damage, as well as 5d6 radiant or necrotic damage, and be knocked prone. A creature that succeeds on its saving throw takes half as much damage and isn't knocked prone. -# 244. - Dispel Evil and Good (V,S) level 5 Abjuration [Concentration] [SOL] +# 243. - Dispel Evil and Good (V,S) level 5 Abjuration [Concentration] [SOL] -**[Cleric,Paladin]** +**[Cleric, Paladin]** Celestial, elementals, feys, fiends, and undead have disadvantage on attacks against you. This spell also allows you to cancel hostile enchantments or dismiss extraplanar creatures hit by your attacks once. -# 245. - Dominate Person (V,S) level 5 Enchantment [Concentration] [SOL] +# 244. - Dominate Person (V,S) level 5 Enchantment [Concentration] [SOL] -**[Bard,Sorcerer,Wizard]** +**[Bard, Sorcerer, Wizard]** Grants you control over an enemy creature. -# 246. - *Far Step* © (V) level 5 Conjuration [Concentration] [UB] +# 245. - *Far Step* © (V) level 5 Conjuration [Concentration] [UB] -**[Sorcerer,Warlock,Wizard]** +**[Sorcerer, Warlock, Wizard]** You teleport up to 60 ft to an unoccupied space you can see. On each of your turns before the spell ends, you can use a bonus action to teleport in this way again. -# 247. - Flame Strike (V,S) level 5 Evocation [SOL] +# 246. - Flame Strike (V,S) level 5 Evocation [SOL] **[Cleric]** Conjures a burning column of fire and radiance affecting all creatures inside. -# 248. - Greater Restoration (V,S) level 5 Abjuration [SOL] +# 247. - Greater Restoration (V,S) level 5 Abjuration [SOL] -**[Artificer,Bard,Cleric,Druid]** +**[Artificer, Bard, Cleric, Druid]** Removes one detrimental condition, such as a charm or curse, or an effect that reduces an ability score or hit points. -# 249. - Hold Monster (V,S) level 5 Enchantment [Concentration] [SOL] +# 248. - Hold Monster (V,S) level 5 Enchantment [Concentration] [SOL] -**[Bard,Sorcerer,Warlock,Wizard]** +**[Bard, Sorcerer, Warlock, Wizard]** Paralyzes a creature unless it succeeds a WIS saving throw. No effect on undead. -# 250. - *Immolation* © (V) level 5 Evocation [Concentration] [UB] +# 249. - *Immolation* © (V) level 5 Evocation [Concentration] [UB] -**[Sorcerer,Wizard]** +**[Sorcerer, Wizard]** Flames wreathe one creature you can see within range. The target must make a Dexterity saving throw. It takes 8d6 fire damage on a failed save, or half as much damage on a successful one. On a failed save, the target also burns for the spell's duration. The burning target sheds bright light in a 30-foot radius and dim light for an additional 30 feet and takes 8d6 fire damage at the start of each of its turns. -# 251. - Insect Plague (V,S) level 5 Conjuration [Concentration] [SOL] +# 250. - Insect Plague (V,S) level 5 Conjuration [Concentration] [SOL] -**[Cleric,Druid,Sorcerer]** +**[Cleric, Druid, Sorcerer]** Summons a sphere of biting insects. -# 252. - Mantle of Thorns (V,S) level 5 Transmutation [Concentration] [UB] +# 251. - Mantle of Thorns (V,S) level 5 Transmutation [Concentration] [UB] **[Druid]** Surround yourself with an aura of thorns. Those that start or walk through take 2d8 piercing damage. This damage scales at higher levels by 1d8 per slot. -# 253. - Mass Cure Wounds (V,S) level 5 Evocation [SOL] +# 252. - Mass Cure Wounds (V,S) level 5 Evocation [SOL] -**[Bard,Cleric,Druid]** +**[Bard, Cleric, Druid]** Heals up to 6 creatures. -# 254. - Mind Twist (V,S) level 5 Enchantment [SOL] +# 253. - Mind Twist (V,S) level 5 Enchantment [SOL] -**[Sorcerer,Warlock,Wizard]** +**[Sorcerer, Warlock, Wizard]** Causes massive psychic damage to all creatures around you, and incapacitates them if they fail their INT saving throw. -# 255. - Raise Dead (M,V,S) level 5 Necromancy [SOL] +# 254. - Raise Dead (M,V,S) level 5 Necromancy [SOL] -**[Bard,Cleric,Paladin]** +**[Bard, Cleric, Paladin]** Brings one creature back to life, up to 10 days after death. -# 256. - *Skill Empowerment* © (V,S) level 5 Divination [UB] +# 255. - *Skill Empowerment* © (V,S) level 5 Divination [UB] -**[Artificer,Bard,Sorcerer,Wizard]** +**[Artificer, Bard, Sorcerer, Wizard]** Your magic deepens a creature's understanding of its own talent. You touch one willing creature and give it expertise in one skill of your choice; until the spell ends, the creature doubles its proficiency bonus for ability checks it makes that use the chosen skill. For 1 hour, you have proficiency in the chosen skill. The spell ends early if you cast it again. You must choose a skill in which the target is proficient and that isn't already benefiting from expertise. -# 257. - Sonic Boom (V,S) level 5 Evocation [UB] +# 256. - Sonic Boom (V,S) level 5 Evocation [UB] -**[Sorcerer,Wizard]** +**[Sorcerer, Wizard]** A small orb the same color as the balloon used appears at a point you choose within range then expands with a loud crack into an explosion of force. Each creature in a 30-foot radius must make a Strength saving throw. A target is pushed up to 30 feet away from the center and dealt 6d8 thunder damage on a failed save, or half as much damage and no movement on a successful one. -# 258. - *Steel Wind Strike* © (M,S) level 5 Conjuration [UB] +# 257. - *Steel Wind Strike* © (M,S) level 5 Conjuration [UB] -**[Ranger,Wizard]** +**[Ranger, Wizard]** You flourish the weapon used in the casting and then vanish to strike like the wind. Choose up to five creatures you can see within range. Make a melee spell attack against each target. On a hit, a target takes 6d10 force damage. You can then teleport to an unoccupied space you can see within 5 feet of one of the targets you hit or missed. -# 259. - *Synaptic Static* © (V) level 5 Evocation [UB] +# 258. - *Synaptic Static* © (V) level 5 Evocation [UB] -**[Bard,Sorcerer,Warlock,Wizard]** +**[Bard, Sorcerer, Warlock, Wizard]** You choose a point within range and cause psychic energy to explode there. Each creature in a 20-foot-radius sphere centered on that point must make an Intelligence saving throw. A target takes 8d6 psychic damage on a failed save, or half as much damage on a successful After a failed save, a target has muddled thoughts for 1 minute. During that time, it rolls a d6 and subtracts the number rolled from all its attack rolls and ability checks. The target can make an Intelligence saving throw at the end of each of its turns, ending the effect on itself on a success. -# 260. - *Telekinesis* © (V,S) level 5 Transmutation [Concentration] [UB] +# 259. - *Telekinesis* © (V,S) level 5 Transmutation [Concentration] [UB] -**[Sorcerer,Wizard]** +**[Sorcerer, Wizard]** You can try to move a Huge or smaller creature. Make an ability check with your spellcasting ability contested by the creature's Strength check. If you win the contest, you move the creature up to 30 feet in any direction, but not beyond the range of this spell. Until the end of your next turn, the creature is restrained in your telekinetic grip. On subsequent rounds, you can use your action to attempt to maintain your telekinetic grip on the creature by repeating the contest, or target a new creature, ending the restrained effect on the previously affected creature. -# 261. - Blade Barrier (V,S) level 6 Evocation [Concentration] [SOL] +# 260. - Blade Barrier (V,S) level 6 Evocation [Concentration] [SOL] **[Cleric]** Conjures a wall of razor sharp blades which causes 6d10 slashing damage to anyone crossing it -# 262. - Chain Lightning (V,S) level 6 Evocation [SOL] +# 261. - Chain Lightning (V,S) level 6 Evocation [SOL] -**[Sorcerer,Wizard]** +**[Sorcerer, Wizard]** Target a creature with lightning, which can arc to 3 other targets within 6 cells. -# 263. - Circle of Death (M,V,S) level 6 Necromancy [SOL] +# 262. - Circle of Death (M,V,S) level 6 Necromancy [SOL] -**[Sorcerer,Warlock,Wizard]** +**[Sorcerer, Warlock, Wizard]** A sphere of negative energy causes Necrotic damage from a point you choose -# 264. - Conjure Fey (V,S) level 6 Conjuration [Concentration] [SOL] +# 263. - Conjure Fey (V,S) level 6 Conjuration [Concentration] [SOL] -**[Druid,Warlock]** +**[Druid, Warlock]** Conjures a fey creature of challenge rating 1 to 6 to fight alongside you. If you lose concentration, the creature stays but becomes hostile. -# 265. - Disintegrate (V,S) level 6 Transmutation [SOL] +# 264. - Disintegrate (V,S) level 6 Transmutation [SOL] -**[Sorcerer,Wizard]** +**[Sorcerer, Wizard]** Causes massive force damage on the target, which can be disintegrated if reduced to 0 hit points -# 266. - Eyebite (V,S) level 6 Necromancy [Concentration] [SOL] +# 265. - Eyebite (V,S) level 6 Necromancy [Concentration] [SOL] -**[Bard,Sorcerer,Warlock,Wizard]** +**[Bard, Sorcerer, Warlock, Wizard]** Your eyes gain a specific property which can target a creature each turn -# 267. - *Fizban's Platinum Shield* © (M,V,S) level 6 Abjuration [Concentration] [UB] +# 266. - *Fizban's Platinum Shield* © (M,V,S) level 6 Abjuration [Concentration] [UB] -**[Sorcerer,Wizard]** +**[Sorcerer, Wizard]** You create a field of silvery light that surrounds a creature of your choice within range. The field sheds dim light out to 5 feet. While surrounded by the field, a creature gains the following benefits: • The creature has half cover. @@ -1621,85 +1616,85 @@ You create a field of silvery light that surrounds a creature of your choice wit • If the creature is subjected to an effect that allows it to make a Dexterity saving throw to take only half damage, the creature instead takes no damage if it succeeds on the saving throw, and only half damage if it fails. As a bonus action on subsequent turns, you can move the field to another creature within 60 feet of the field. -# 268. - Flash Freeze (V,S) level 6 Evocation [UB] +# 267. - Flash Freeze (V,S) level 6 Evocation [UB] -**[Druid,Sorcerer,Warlock]** +**[Druid, Sorcerer, Warlock]** You attempt to encase a creature you can see within range in a prison of solid ice. The target must make a Dexterity saving throw. On a failed save, the target takes 10d6 cold damage and becomes restrained in layers of thick ice. On a successful save, the target takes half as much damage and is not restrained. The spell can only be used on creatures up to large size. To break out, the restrained target can make a Strength check as an action against your spell save DC. On success, the target escapes and is no longer restrained. When you cast this spell using a spell slot of 7th level or higher, the cold damage increases by 2d6 for each slot level above 6th. -# 269. - Freezing Sphere (V,S) level 6 Evocation [SOL] +# 268. - Freezing Sphere (V,S) level 6 Evocation [SOL] **[Wizard]** Toss a huge ball of cold energy that explodes on impact -# 270. - Globe Of Invulnerability (V,S) level 6 Abjuration [Concentration] [SOL] +# 269. - Globe Of Invulnerability (V,S) level 6 Abjuration [Concentration] [SOL] -**[Sorcerer,Wizard]** +**[Sorcerer, Wizard]** A sphere surrounding you prevents any spell up to 5th level to affect anyone inside it. -# 271. - Harm (V,S) level 6 Necromancy [SOL] +# 270. - Harm (V,S) level 6 Necromancy [SOL] **[Cleric]** Inflicts devastating necrotic damage and reduces the maximum hit points accordingly. Cannot drop the target below 1 hit points -# 272. - Heal (V,S) level 6 Evocation [SOL] +# 271. - Heal (V,S) level 6 Evocation [SOL] -**[Cleric,Druid]** +**[Cleric, Druid]** Heals 70 hit points and also removes blindness and diseases -# 273. - Heroes Feast (M,V,S) level 6 Conjuration [SOL] +# 272. - Heroes Feast (M,V,S) level 6 Conjuration [SOL] -**[Cleric,Druid]** +**[Cleric, Druid]** Summons a feast which cures most ailments and grants immunity to poisonand being frightened, WIS save advantage, and increased maximum hitpoints -# 274. - Hilarity (V) level 6 Enchantment [Concentration] [SOL] +# 273. - Hilarity (V) level 6 Enchantment [Concentration] [SOL] -**[Bard,Wizard]** +**[Bard, Wizard]** Choose one target. They fall down laughing, becoming prone and incapacitated, and take psychic damage until they save at the end of one of their turns, or until the spell ends. -# 275. - Poison Wave (M,V,S) level 6 Evocation [UB] +# 274. - Poison Wave (M,V,S) level 6 Evocation [UB] **[Wizard]** A poisonous wave erupts from you, engulfing those close by. Each creature within the spell's radius must make a Constitution saving throw, taking 6d10 poison damage on a failure, or half as much damage on a successful one. A creature who fails their saving throw is also poisoned for 1 minute, and can repeat the saving throw at the end of each of its turn. When you cast this spell using a slot of 7th level or higher, the damage increases by 1d10 for each slot level above 6th. -# 276. - Ring of Blades (M,V,S) level 6 Conjuration [Concentration] [UB] +# 275. - Ring of Blades (M,V,S) level 6 Conjuration [Concentration] [UB] **[Wizard]** You raise both hands as you evoke six transparent blades around you as a bonus action. When you cast this spell, and as a bonus action on each subsequent turn, you can throw one of these blades at a creature within 60 feet from you. Make a ranged spell attack. On a hit, the target takes 4d10 force damage. When you cast this spell using a spell slot of 7th level or higher, the damage of each blade increases by 1d10 for each slot level above 6th. -# 277. - *Scatter* © (V) level 6 Conjuration [UB] +# 276. - *Scatter* © (V) level 6 Conjuration [UB] -**[Sorcerer,Warlock,Wizard]** +**[Sorcerer, Warlock, Wizard]** The air quivers around up to five creatures of your choice that you can see within range. An unwilling creature must succeed on a Wisdom saving throw to resist this spell. You teleport each affected target to an unoccupied space that you can see within 120 feet of you. That space must be on the ground or on a floor. -# 278. - Shelter from Energy (V,S) level 6 Abjuration [UB] +# 277. - Shelter from Energy (V,S) level 6 Abjuration [UB] -**[Cleric,Druid,Sorcerer,Wizard]** +**[Cleric, Druid, Sorcerer, Wizard]** Choose one of the following damage types: acid, cold, fire, lightning, necrotic, radiant, or thunder, and then choose up to six willing creatures that you can see within range. For 1 hour, targets have resistance to that damage type. When you cast this spell using a spell slot of 7th level or higher, you may target up to one additional willing creature for each slot level above 6th. -# 279. - Sunbeam (V,S) level 6 Evocation [Concentration] [SOL] +# 278. - Sunbeam (V,S) level 6 Evocation [Concentration] [SOL] -**[Druid,Sorcerer,Wizard]** +**[Druid, Sorcerer, Wizard]** You conjure a line of radiance which can burn and blind creatures in the line of effect; undead and oozes save with disadvantage. The beam can be retargeted each turn -# 280. - *Tasha's Otherworldly Guise* © (M,V,S) level 6 Transmutation [Concentration] [UB] +# 279. - *Tasha's Otherworldly Guise* © (M,V,S) level 6 Transmutation [Concentration] [UB] -**[Sorcerer,Warlock,Wizard]** +**[Sorcerer, Warlock, Wizard]** Uttering an incantation, you draw on the magic of the Lower Planes or Upper Planes (your choice) to transform yourself. -# 281. - *Tenser's Transformation* © (V,S) level 6 Transmutation [Concentration] [UB] +# 280. - *Tenser's Transformation* © (V,S) level 6 Transmutation [Concentration] [UB] **[Wizard]** @@ -1711,263 +1706,263 @@ You endow yourself with endurance and martial prowess fueled by magic. Until the • You can attack twice, instead of once, when you take the Attack action on your turn. Immediately after the spell ends, you must succeed on a DC 15 Constitution saving throw or suffer one level of exhaustion. -# 282. - True Seeing (V,S) level 6 Divination [SOL] +# 281. - True Seeing (V,S) level 6 Divination [SOL] -**[Bard,Cleric,Sorcerer,Warlock,Wizard]** +**[Bard, Cleric, Sorcerer, Warlock, Wizard]** A creature you touch gains True Sight for one hour -# 283. - Wall of Thorns (V,S) level 6 Conjuration [Concentration] [SOL] +# 282. - Wall of Thorns (V,S) level 6 Conjuration [Concentration] [SOL] **[Druid]** Creates a wall of tough of needle-sharp thorns, that hurts and slows every creature in it. -# 284. - Arcane Sword (M,V,S) level 7 Evocation [Concentration] [SOL] +# 283. - Arcane Sword (M,V,S) level 7 Evocation [Concentration] [SOL] -**[Bard,Wizard]** +**[Bard, Wizard]** Summon a weapon that fights for you. -# 285. - Conjure Celestial (V,S) level 7 Conjuration [Concentration] [SOL] +# 284. - Conjure Celestial (V,S) level 7 Conjuration [Concentration] [SOL] **[Cleric]** Conjures a celestial creature of challenge rating 4 that fights alongside you. If you lose concentration, the creature is dismissed. -# 286. - *Crown of Stars* © (V,S) level 7 Evocation [UB] +# 285. - *Crown of Stars* © (V,S) level 7 Evocation [UB] -**[Sorcerer,Warlock,Wizard]** +**[Sorcerer, Warlock, Wizard]** Seven star-like motes of light appear and orbit your head until the spell ends. You can use a bonus action to send one of the motes streaking toward one creature or object within 120 feet of you. When you do so, make a ranged spell attack. On a hit, the target takes 4d12 radiant damage. Whether you hit or miss, the mote is expended. The spell ends early if you expend the last mote. If you have four or more motes remaining, they shed bright light in a 30-foot radius and dim light for an additional 30 feet. If you have one to three motes remaining, they shed dim light in a 30-foot radius. When you cast this spell using a spell slot of 8th level or higher, the number of motes created increases by two for each slot level above 7th. -# 287. - Delayed Blast Fireball (V,S) level 7 Evocation [Concentration] [SOL] +# 286. - Delayed Blast Fireball (V,S) level 7 Evocation [Concentration] [SOL] -**[Sorcerer,Wizard]** +**[Sorcerer, Wizard]** Conjures a ball of fire that grows more powerful with time, detonating when a creature enters its space or when the spell ends. -# 288. - Divine Word (V) level 7 Evocation [SOL] +# 287. - Divine Word (V) level 7 Evocation [SOL] **[Cleric]** Utter a divine word that inflicts various negative conditions on enemies you can see, based on their HP. Also banishes all celestials, elementals, feys, and fiends if they fail their saving throws. -# 289. - *Draconic Transformation* © (M,V,S) level 7 Transmutation [Concentration] [UB] +# 288. - *Draconic Transformation* © (M,V,S) level 7 Transmutation [Concentration] [UB] -**[Druid,Sorcerer,Wizard]** +**[Druid, Sorcerer, Wizard]** With a roar, you draw on the magic of dragons to transform yourself, taking on draconic features. You gain the following benefits until the spell ends: • You have blindsight with a range of 30 feet. • When you cast this spell, and as a bonus action on subsequent turns for the duration, you can exhale shimmering energy in a 60-foot cone. Each creature in that area must make a Dexterity saving throw, taking 6d8 force damage on a failed save, or half as much damage on a successful one. • Incorporeal wings sprout from your back, giving you a flying speed of 60 feet. -# 290. - Finger of Death (V,S) level 7 Necromancy [SOL] +# 289. - Finger of Death (V,S) level 7 Necromancy [SOL] -**[Sorcerer,Warlock,Wizard]** +**[Sorcerer, Warlock, Wizard]** Send negative energy coursing through a creature within range. -# 291. - Fire Storm (V,S) level 7 Evocation [SOL] +# 290. - Fire Storm (V,S) level 7 Evocation [SOL] -**[Cleric,Druid,Sorcerer]** +**[Cleric, Druid, Sorcerer]** Causes a wide wall of roaring flames to burst up wherever you choose within range. -# 292. - Gravity Slam (V,S) level 7 Transmutation [SOL] +# 291. - Gravity Slam (V,S) level 7 Transmutation [SOL] -**[Druid,Sorcerer,Warlock,Wizard]** +**[Druid, Sorcerer, Warlock, Wizard]** Increase gravity to slam everyone in a specific area onto the ground. -# 293. - Prismatic Spray (V,S) level 7 Evocation [SOL] +# 292. - Prismatic Spray (V,S) level 7 Evocation [SOL] -**[Sorcerer,Wizard]** +**[Sorcerer, Wizard]** Each creature within the cone of effect is randomly affected by one or two (roll 8 on d8) rays with the following effects: -# 294. - Regenerate (V,S) level 7 Transmutation [SOL] +# 293. - Regenerate (V,S) level 7 Transmutation [SOL] -**[Bard,Cleric,Druid]** +**[Bard, Cleric, Druid]** Touch a creature and stimulate its natural healing ability. -# 295. - Rescue the Dying (V) level 7 Transmutation [UB] +# 294. - Rescue the Dying (V) level 7 Transmutation [UB] -**[Cleric,Druid]** +**[Cleric, Druid]** With a word, you call positive energy into the target's body to heal and ward it. The target regains a number of hit points equal to 4d10 + 30. It also gains temporary hit points equal to half that amount and resistance to all damage, both lasting until the end of your next turn. When you cast this spell using a spell slot of 8th level or higher, the healing increases by 2d10 for each slot level above 7th. -# 296. - Resurrection (M,V,S) level 7 Necromancy [SOL] +# 295. - Resurrection (M,V,S) level 7 Necromancy [SOL] -**[Bard,Cleric,Druid]** +**[Bard, Cleric, Druid]** Brings one creature back to life, up to 100 years after death. -# 297. - *Reverse Gravity* © (V,S) level 7 Transmutation [Concentration] [UB] +# 296. - *Reverse Gravity* © (V,S) level 7 Transmutation [Concentration] [UB] -**[Druid,Sorcerer,Wizard]** +**[Druid, Sorcerer, Wizard]** This spell reverses gravity in a 50-foot-radius, 100-foot-high cylinder centered on a point within range. -# 298. - Symbol (V,S) level 7 Abjuration [SOL] +# 297. - Symbol (V,S) level 7 Abjuration [SOL] -**[Bard,Cleric,Wizard]** +**[Bard, Cleric, Wizard]** Inscribe a glyph on a surface. When an enemy starts its turn in the area or enters it, the glyph's effect is applied in a sphere with a 12-cell radius. -# 299. - *Abi-Dalzim's Horrid Wilting* © (V,S) level 8 Necromancy [UB] +# 298. - *Abi-Dalzim's Horrid Wilting* © (V,S) level 8 Necromancy [UB] -**[Sorcerer,Wizard]** +**[Sorcerer, Wizard]** You draw the moisture from every creature in a 30-foot cube centered on a point you choose within range. Each creature in that area must make a Constitution saving throw. Constructs and undead aren't affected, and plants and ice elementals make this saving throw with disadvantage. A creature takes 10d8 necrotic damage on a failed save, or half as much damage on a successful one. -# 300. - Divine Blade (V,S) level 8 Evocation [Concentration] [SOL] +# 299. - Divine Blade (V,S) level 8 Evocation [Concentration] [SOL] **[Cleric]** A glowing blade of pure energy springs from your hand. On a hit, the target takes 6d8 radiant damage and must roll a Wisdom saving throw to avoid being stunned until the end of its next turn. -# 301. - Dominate Monster (V,S) level 8 Enchantment [Concentration] [SOL] +# 300. - Dominate Monster (V,S) level 8 Enchantment [Concentration] [SOL] -**[Bard,Sorcerer,Warlock,Wizard]** +**[Bard, Sorcerer, Warlock, Wizard]** Grants you control over an enemy creature of any type. -# 302. - Earthquake (V,S) level 8 Evocation [Concentration] [SOL] +# 301. - Earthquake (V,S) level 8 Evocation [Concentration] [SOL] -**[Cleric,Druid,Sorcerer]** +**[Cleric, Druid, Sorcerer]** You create a seismic disturbance that violently shakes the ground and the creatures standing on it for the duration of the spell. -# 303. - Feeblemind (V,S) level 8 Enchantment [SOL] +# 302. - Feeblemind (V,S) level 8 Enchantment [SOL] -**[Bard,Druid,Warlock,Wizard]** +**[Bard, Druid, Warlock, Wizard]** You blast the mind of one creature, attempting to shatter its intellect and personality. The target takes 4d6 psychic damage and must make an Intelligence saving throw. On a failed save, the creature's Intelligence, Charisma and Wisdom scores become 1 and it is unable to cast spells. These effects last for 1 minute. -# 304. - Holy Aura (V,S) level 8 Abjuration [Concentration] [SOL] +# 303. - Holy Aura (V,S) level 8 Abjuration [Concentration] [SOL] **[Cleric]** Allies within 6 cells of you when you cast Holy Aura gain advantage on all saving throws, and other creatures have disadvantage on attack rolls against them until the spell ends. In addition, when a fiend or an undead hits an affected creature with a melee attack, they must succeed on a Constitution saving throw or be blinded until the spell ends. -# 305. - Incendiary Cloud (V,S) level 8 Conjuration [Concentration] [SOL] +# 304. - Incendiary Cloud (V,S) level 8 Conjuration [Concentration] [SOL] -**[Sorcerer,Wizard]** +**[Sorcerer, Wizard]** A cloud of smoke appears in a sphere with a 4-cell radius. The cloud damages each creature inside it, and moves away from you each turn until the end of the spell's duration or until a moderate wind disperses the cloud. -# 306. - *Maddening Darkness* © (V) level 8 Evocation [Concentration] [UB] +# 305. - *Maddening Darkness* © (V) level 8 Evocation [Concentration] [UB] -**[Warlock,Wizard]** +**[Warlock, Wizard]** Magical darkness spreads from a point you choose within range to fill a 60-foot-radius sphere until the spell ends. Shrieks, gibbering, and mad laughter can be heard within the sphere. On activation, and whenever a creature ends its turn in the sphere, it must make a Wisdom saving throw, taking 6d8 psychic damage on a failed save, or half as much damage on a successful one. -# 307. - Maze (V,S) level 8 Abjuration [Concentration] [SOL] +# 306. - Maze (V,S) level 8 Abjuration [Concentration] [SOL] **[Wizard]** You banish a creature that you can see within range into a labyrinthine demiplane. The target remains there for the spell's duration or until it escapes the maze. -# 308. - *Mind Blank* © (V,S) level 8 Transmutation [UB] +# 307. - *Mind Blank* © (V,S) level 8 Transmutation [UB] -**[Bard,Wizard]** +**[Bard, Wizard]** Until the spell ends, one willing creature you touch is immune to psychic damage, any effect that would sense its emotions or read its thoughts, divination spells, and the charmed condition. -# 309. - Power Word Stun (V) level 8 Enchantment [SOL] +# 308. - Power Word Stun (V) level 8 Enchantment [SOL] -**[Bard,Sorcerer,Warlock,Wizard]** +**[Bard, Sorcerer, Warlock, Wizard]** Overwhelm the mind of a creature that has 150 hit points or fewer, leaving it stunned. -# 310. - Soul Expulsion (V,S) level 8 Necromancy [UB] +# 309. - Soul Expulsion (V,S) level 8 Necromancy [UB] -**[Cleric,Sorcerer,Wizard]** +**[Cleric, Sorcerer, Wizard]** You blast a foe's soul with magical power, causing it to glow with otherwordly light. Choose one creature that you can see within range, which must make a Charisma saving throw. On a failed saving throw, the target takes 11d8 necrotic damage and is stunned until the start of your next turn. On a successful saving throw, the target takes half damage and isn't stunned. Each enemy other than the target that is within 60 feet of the target must make a Wisdom saving throw. On a failed save, a creature takes 7d8 radiant damage and has disadvantage on attack rolls until the end of your next turn. On a successful saving throw a creature takes half damage and nothing else. When this spell targets undead, the spell ignores any resistance or immunity to necrotic damage, and the target has disadvantage on the saving throw. When you cast this spell using a spell slot of 9th level, both the necrotic damage and radiant damage increase by 2d8. -# 311. - Spell Ward (V,S) level 8 Abjuration [Concentration] [SOL] +# 310. - Spell Ward (V,S) level 8 Abjuration [Concentration] [SOL] -**[Cleric,Wizard]** +**[Cleric, Wizard]** Creates a mobile globe that is impenetrable to enemy spells cast from outside it. -# 312. - Sunburst (V,S) level 8 Evocation [SOL] +# 311. - Sunburst (V,S) level 8 Evocation [SOL] -**[Druid,Sorcerer,Wizard]** +**[Druid, Sorcerer, Wizard]** Brilliant sunlight blazes in a sphere with a 12-cell radius. Each creature that fails a Constitution saving throw takes radiant damage and is blinded for 1 minute. Any darkness created by a spell in the area is dispelled. -# 313. - Thunderstorm (V,S) level 8 Transmutation [SOL] +# 312. - Thunderstorm (V,S) level 8 Transmutation [SOL] -**[Cleric,Druid,Wizard]** +**[Cleric, Druid, Wizard]** You create a blast of thunder in a sphere that causes thunder and lightning damage to everyone, and can blind or stun those who fail a CON saving throw. -# 314. - Wild Shapes (V,S) level 8 Transmutation [Concentration] [SOL] +# 313. - Wild Shapes (V,S) level 8 Transmutation [Concentration] [SOL] Turns other creatures in to beasts for one day. -# 315. - *Foresight* © (V,S) level 9 Transmutation [UB] +# 314. - *Foresight* © (V,S) level 9 Transmutation [UB] -**[Bard,Druid,Warlock,Wizard]** +**[Bard, Druid, Warlock, Wizard]** You touch a willing creature and bestow a limited ability to see into the immediate future. For the duration, the target can't be surprised and has advantage on attack rolls, ability checks, and saving throws. Additionally, other creatures have disadvantage on attack rolls against the target for the duration. -# 316. - *Invulnerability* © (M,V,S) level 9 Abjuration [Concentration] [UB] +# 315. - *Invulnerability* © (M,V,S) level 9 Abjuration [Concentration] [UB] **[Wizard]** You are immune to all damage until the spell ends. -# 317. - *Mass Heal* © (V,S) level 9 Transmutation [UB] +# 316. - *Mass Heal* © (V,S) level 9 Transmutation [UB] **[Cleric]** A flood of healing energy flows from you into injured creatures around you. You restore 120 hit points each to 6 creatures that you can see within range. Creatures healed by this spell are also cured of all diseases and any effect making them blinded or deafened. This spell has no effect on undead or constructs. -# 318. - *Meteor Swarm* © (V,S) level 9 Transmutation [UB] +# 317. - *Meteor Swarm* © (V,S) level 9 Transmutation [UB] -**[Sorcerer,Wizard]** +**[Sorcerer, Wizard]** Blazing orbs of fire plummet to the ground at a single point you can see within range. Each creature in a 40-foot-radius sphere centered on the point you choose must make a Dexterity saving throw. The sphere spreads around corners. A creature takes 20d6 fire damage and 20d6 bludgeoning damage on a failed save, or half as much damage on a successful one. A creature in the area of more than one fiery burst is affected only once. -# 319. - *Power Word Heal* © (V,S) level 9 Enchantment [UB] +# 318. - *Power Word Heal* © (V,S) level 9 Enchantment [UB] -**[Bard,Cleric]** +**[Bard, Cleric]** A wave of healing energy washes over the creature you touch. The target regains all its hit points. If the creature is charmed, frightened, paralyzed, or stunned, the condition ends. If the creature is prone, it can use its reaction to stand up. This spell has no effect on undead or constructs. -# 320. - *Power Word Kill* © (V,S) level 9 Transmutation [UB] +# 319. - *Power Word Kill* © (V,S) level 9 Transmutation [UB] -**[Bard,Sorcerer,Warlock,Wizard]** +**[Bard, Sorcerer, Warlock, Wizard]** You utter a word of power that can compel one creature you can see within range to die instantly. If the creature you choose has 100 hit points or fewer, it dies. Otherwise, the spell has no effect. -# 321. - *Psychic Scream* © (S) level 9 Enchantment [UB] +# 320. - *Psychic Scream* © (S) level 9 Enchantment [UB] -**[Bard,Sorcerer,Warlock,Wizard]** +**[Bard, Sorcerer, Warlock, Wizard]** You unleash the power of your mind to blast the intellect of up to ten creatures of your choice that you can see within range. Each target must make an Intelligence saving throw. On a failed save, a target takes 14d6 psychic damage and is stunned for 1 minute. On a successful save, a target takes half as much damage and isn't stunned. A stunned target can make an Intelligence saving throw at the end of each of its turns. On a successful save, the stunning effect ends. -# 322. - *Shapechange* © (M,V,S) level 9 Transmutation [Concentration] [UB] +# 321. - *Shapechange* © (M,V,S) level 9 Transmutation [Concentration] [UB] -**[Druid,Wizard]** +**[Druid, Wizard]** You assume the form of a different creature for the duration. The new form can be of any creature with a challenge rating equal to your level or lower. -# 323. - *Time Stop* © (V) level 9 Transmutation [UB] +# 322. - *Time Stop* © (V) level 9 Transmutation [UB] -**[Sorcerer,Wizard]** +**[Sorcerer, Wizard]** You briefly stop the flow of time for everyone but yourself. No time passes for other creatures, while you take 1d4+1 turns in a row, during which you can use actions and move as normal. This spell ends if one of the actions you use during this period, or any effects that you create during this period, affects a creature other than you. -# 324. - *Weird* © (V,S) level 9 Illusion [Concentration] [UB] +# 323. - *Weird* © (V,S) level 9 Illusion [Concentration] [UB] -**[Warlock,Wizard]** +**[Warlock, Wizard]** Drawing on the deepest fears of a group of creatures, you create illusory creatures in their minds, visible only to them. Each enemy in a 30-foot-radius sphere centered on a point of your choice within range must make a Wisdom saving throw. On a failed save, a creature becomes frightened for the duration. The illusion calls on the creature's deepest fears, manifesting its worst nightmares as an implacable threat. At the end of each of the frightened creature's turns, it must succeed on a Wisdom saving throw or take 4d10 psychic damage. On a successful save, the spell ends for that creature. diff --git a/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs b/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs index d701422d21..fd56842d86 100644 --- a/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs +++ b/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs @@ -3910,12 +3910,7 @@ internal static class DecisionPackageDefinitions internal static DecisionPackageDefinition DefaultMeleeWithBackupRangeDecisions { get; } = GetDefinition("DefaultMeleeWithBackupRangeDecisions"); - internal static DecisionPackageDefinition DefaultSupportCasterWithBackupAttacksDecisions { get; } = - GetDefinition("DefaultSupportCasterWithBackupAttacksDecisions"); - internal static DecisionPackageDefinition Fear { get; } = GetDefinition("Fear"); - - internal static DecisionPackageDefinition Idle { get; } = GetDefinition("Idle"); } internal static class ToolTypeDefinitions diff --git a/SolastaUnfinishedBusiness/Builders/EffectFormBuilder.cs b/SolastaUnfinishedBusiness/Builders/EffectFormBuilder.cs index 9a830f6385..4d6d51cfe3 100644 --- a/SolastaUnfinishedBusiness/Builders/EffectFormBuilder.cs +++ b/SolastaUnfinishedBusiness/Builders/EffectFormBuilder.cs @@ -452,7 +452,7 @@ internal EffectFormBuilder SetSummonCreatureForm( monsterDefinitionName = monsterDefinitionName, conditionDefinition = DatabaseHelper.ConditionDefinitions.ConditionMindControlledByCaster, persistOnConcentrationLoss = false, - decisionPackage = DatabaseHelper.DecisionPackageDefinitions.Idle, + decisionPackage = null, effectProxyDefinitionName = null }; diff --git a/SolastaUnfinishedBusiness/Displays/EncountersDisplay.cs b/SolastaUnfinishedBusiness/Displays/EncountersDisplay.cs index 23e0f0fea4..c6b3f3b95b 100644 --- a/SolastaUnfinishedBusiness/Displays/EncountersDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/EncountersDisplay.cs @@ -13,11 +13,11 @@ internal static class EncountersDisplay private static bool _showAttributes; - private static readonly Dictionary CurrentFeaturesMonster = new(); + private static readonly Dictionary CurrentFeaturesMonster = []; - private static readonly Dictionary CurrentAttacksMonster = new(); + private static readonly Dictionary CurrentAttacksMonster = []; - private static readonly Dictionary CurrentItemsHeroes = new(); + private static readonly Dictionary CurrentItemsHeroes = []; private static void DisplayHeroStats([NotNull] RulesetCharacterHero hero, string actionText, Action action) { diff --git a/SolastaUnfinishedBusiness/Models/DocumentationContext.cs b/SolastaUnfinishedBusiness/Models/DocumentationContext.cs index 57f5369e55..a346b8a90b 100644 --- a/SolastaUnfinishedBusiness/Models/DocumentationContext.cs +++ b/SolastaUnfinishedBusiness/Models/DocumentationContext.cs @@ -67,6 +67,7 @@ internal static void DumpDocumentation() !SpellsContext.SpellsChildMaster.ContainsKey(x) && x.implemented && !x.Name.Contains("Invocation") && + !x.Name.EndsWith("NoFocus") && !x.Name.EndsWith("_B"))); DumpOthers("Items", x => x.IsArmor || x.IsWeapon); DumpOthers("Metamagic", @@ -337,14 +338,18 @@ private static void DumpRaces(string groupName, Func filte private static string GetClassesWhichCanCastSpell(SpellDefinition spell) { - var result = SpellListClassMap.Where(kvp => kvp.Key.SpellsByLevel - .SelectMany(x => x.Spells) - .Contains(spell)) - .Aggregate(" [", (current, kvp) => current + kvp.Value.FormatTitle() + ","); - - result = result.Substring(0, result.Length - 1) + "]"; - - return result; + var result = SpellListClassMap + .OrderBy(kvp => kvp.Value.FormatTitle()) + .Where(kvp => + kvp.Key.SpellsByLevel + .SelectMany(x => x.Spells) + .Contains(spell) || + SpellsContext.SpellListContextTab[kvp.Key].SuggestedSpells.Contains(spell)) + .Aggregate(string.Empty, (current, kvp) => current + kvp.Value.FormatTitle() + ", "); + + return result == string.Empty + ? string.Empty + : "**[" + result.Substring(0, result.Length - 2) + "]**" + Environment.NewLine; } private static void DumpOthers(string groupName, Func filter) where T : BaseDefinition @@ -397,7 +402,7 @@ x is SpellDefinition spellDefinition title += " [" + Gui.Format("Tooltip/&TagConcentrationTitle") + "]"; } - title += GetClassesWhichCanCastSpell(spellDefinition); + description = GetClassesWhichCanCastSpell(spellDefinition) + Environment.NewLine + description; } outString.AppendLine($"# {counter++}. - {title} {GetTag(featureDefinition)}"); diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs index fdef783e1f..f4f763ee56 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs @@ -2497,7 +2497,6 @@ internal static SpellDefinition BuildFindFamiliar() .SetCharacterFamily("Fey") .SetChallengeRating(0) .SetDroppedLootDefinition(null) - .SetDefaultBattleDecisionPackage(DecisionPackageDefinitions.DefaultSupportCasterWithBackupAttacksDecisions) .SetFullyControlledWhenAllied(true) .SetDefaultFaction(FactionDefinitions.Party) .SetBestiaryEntry(BestiaryDefinitions.BestiaryEntry.None) diff --git a/SolastaUnfinishedBusiness/Subclasses/InnovationWeapon.cs b/SolastaUnfinishedBusiness/Subclasses/InnovationWeapon.cs index 1712c06e6d..f328270305 100644 --- a/SolastaUnfinishedBusiness/Subclasses/InnovationWeapon.cs +++ b/SolastaUnfinishedBusiness/Subclasses/InnovationWeapon.cs @@ -401,7 +401,6 @@ private static MonsterDefinition BuildSteelDefenderMonster() .SetCreatureTags(SteelDefenderTag) .SetDefaultFaction(FactionDefinitions.Party) .SetFullyControlledWhenAllied(true) - .SetDefaultBattleDecisionPackage(DecisionPackageDefinitions.DefaultMeleeWithBackupRangeDecisions) .SetHeight(6) .SetSizeDefinition(CharacterSizeDefinitions.Small) .SetCharacterFamily(InventorClass.InventorConstructFamily) From 018bdf4a2a7dcd78f74367c05c724e5723d99856 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Fri, 6 Sep 2024 22:06:09 -0700 Subject: [PATCH 060/212] add proper Countered and ExecutionFailed checks on behaviors that trigger on effects end --- SolastaUnfinishedBusiness/ChangelogHistory.txt | 1 + SolastaUnfinishedBusiness/Feats/ClassFeats.cs | 4 +++- SolastaUnfinishedBusiness/Feats/RaceFeats.cs | 4 +++- .../Spells/SpellBuildersLevel01.cs | 13 ++++++++----- .../Subclasses/CircleOfTheWildfire.cs | 4 +++- .../Subclasses/OathOfAncients.cs | 4 +++- .../Subclasses/PatronEldritchSurge.cs | 8 +++++--- .../Subclasses/RangerSkyWarrior.cs | 4 +++- .../Subclasses/RoguishOpportunist.cs | 6 ++++++ .../Subclasses/SorcerousPsion.cs | 2 ++ .../Subclasses/SorcerousWildMagic.cs | 6 +++++- .../Subclasses/WizardWarMagic.cs | 2 ++ 12 files changed, 44 insertions(+), 14 deletions(-) diff --git a/SolastaUnfinishedBusiness/ChangelogHistory.txt b/SolastaUnfinishedBusiness/ChangelogHistory.txt index 64be7dbcf1..0464d49690 100644 --- a/SolastaUnfinishedBusiness/ChangelogHistory.txt +++ b/SolastaUnfinishedBusiness/ChangelogHistory.txt @@ -4,6 +4,7 @@ - added Interface > Game UI > 'Enable CTRL click-drag to bypass quest items checks on drop' setting - fixed Barbarian Sundering Blow interaction with Call Lightning, and other proxy like powers - fixed Bend Luck, Flash of Genius, Inspiring Protection, Shield Master, and Weal/Woe not consuming reaction +- fixed countered, and execution failed checks on custom behaviors that trigger on effects' end - fixed Dwarven Fortitude, and Magical Guidance incorrectly consuming a reaction - fixed Exploiter feat not checking for reactions from 2nd target onwards - fixed Lucky, and Mage Slayer feats double consumption diff --git a/SolastaUnfinishedBusiness/Feats/ClassFeats.cs b/SolastaUnfinishedBusiness/Feats/ClassFeats.cs index d8032d923b..8dd160f2b0 100644 --- a/SolastaUnfinishedBusiness/Feats/ClassFeats.cs +++ b/SolastaUnfinishedBusiness/Feats/ClassFeats.cs @@ -374,7 +374,9 @@ public IEnumerator OnMagicEffectFinishedByMeOrAlly( var effectDescription = action.actionParams.RulesetEffect.EffectDescription; if (effectDescription.RangeType is not (RangeType.MeleeHit or RangeType.RangeHit) || - effectDescription.TargetParameter != 1) + effectDescription.TargetParameter != 1 || + action.Countered || + action is CharacterActionCastSpell { ExecutionFailed: true }) { yield break; } diff --git a/SolastaUnfinishedBusiness/Feats/RaceFeats.cs b/SolastaUnfinishedBusiness/Feats/RaceFeats.cs index 4758cfcb10..0dcc9dc661 100644 --- a/SolastaUnfinishedBusiness/Feats/RaceFeats.cs +++ b/SolastaUnfinishedBusiness/Feats/RaceFeats.cs @@ -1270,7 +1270,9 @@ public IEnumerator OnMagicEffectFinishedByMe( List targets) { if (!action.ActionParams.activeEffect.EffectDescription.EffectForms.Any(x => - x.FormType == EffectForm.EffectFormType.Damage && x.DamageForm.DamageType is DamageTypeFire)) + x.FormType == EffectForm.EffectFormType.Damage && x.DamageForm.DamageType is DamageTypeFire) || + action.Countered || + action is CharacterActionCastSpell { ExecutionFailed: true }) { yield break; } diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs index f4f763ee56..893a5e72b4 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs @@ -1872,14 +1872,17 @@ public IEnumerator OnMagicEffectFinishedByMe( GameLocationCharacter attacker, List targets) { - if (action.AttackRollOutcome is RollOutcome.Success or RollOutcome.CriticalSuccess && - action.ActionParams.RulesetEffect.EffectDescription.RangeType is RangeType.Touch or RangeType.MeleeHit) + if (action.AttackRollOutcome is not (RollOutcome.Success or RollOutcome.CriticalSuccess) || + action.Countered || + action is CharacterActionCastSpell { ExecutionFailed: true } || + action.ActionParams.RulesetEffect.EffectDescription.RangeType + is not (RangeType.Touch or RangeType.MeleeHit)) { - attacker.RulesetCharacter.RemoveAllConditionsOfCategoryAndType( - AttributeDefinitions.TagEffect, conditionElementalInfusion.Name); + yield break; } - yield break; + attacker.RulesetCharacter.RemoveAllConditionsOfCategoryAndType( + AttributeDefinitions.TagEffect, conditionElementalInfusion.Name); } public IEnumerator OnPhysicalAttackFinishedByMe( diff --git a/SolastaUnfinishedBusiness/Subclasses/CircleOfTheWildfire.cs b/SolastaUnfinishedBusiness/Subclasses/CircleOfTheWildfire.cs index b282cc398d..cd0c265668 100644 --- a/SolastaUnfinishedBusiness/Subclasses/CircleOfTheWildfire.cs +++ b/SolastaUnfinishedBusiness/Subclasses/CircleOfTheWildfire.cs @@ -770,7 +770,9 @@ public IEnumerator OnMagicEffectFinishedByMe( GameLocationCharacter attacker, List targets) { - if (action is not CharacterActionCastSpell) + if (action is not CharacterActionCastSpell actionCastSpell || + actionCastSpell.Countered || + actionCastSpell.ExecutionFailed) { yield break; } diff --git a/SolastaUnfinishedBusiness/Subclasses/OathOfAncients.cs b/SolastaUnfinishedBusiness/Subclasses/OathOfAncients.cs index d9b75937fb..83f771b509 100644 --- a/SolastaUnfinishedBusiness/Subclasses/OathOfAncients.cs +++ b/SolastaUnfinishedBusiness/Subclasses/OathOfAncients.cs @@ -312,7 +312,9 @@ public IEnumerator OnMagicEffectFinishedByMe( List targets) { if (action.ActionType != ActionDefinitions.ActionType.Main || - action is not CharacterActionCastSpell) + action is not CharacterActionCastSpell actionCastSpell || + actionCastSpell.Countered || + actionCastSpell.ExecutionFailed) { yield break; } diff --git a/SolastaUnfinishedBusiness/Subclasses/PatronEldritchSurge.cs b/SolastaUnfinishedBusiness/Subclasses/PatronEldritchSurge.cs index ff00bc5add..33186be995 100644 --- a/SolastaUnfinishedBusiness/Subclasses/PatronEldritchSurge.cs +++ b/SolastaUnfinishedBusiness/Subclasses/PatronEldritchSurge.cs @@ -294,9 +294,11 @@ public IEnumerator OnMagicEffectFinishedByMe( var rulesetCharacter = attacker.RulesetCharacter; if (Gui.Battle == null || - actionParams.activeEffect is not RulesetEffectSpell rulesetEffectSpell - || actionType != ActionType.Main - || !BlastReloadSupportRulesetCondition.GetCustomConditionFromCharacter( + action.Countered || + action is CharacterActionCastSpell { ExecutionFailed: true } || + actionParams.activeEffect is not RulesetEffectSpell rulesetEffectSpell || + actionType != ActionType.Main || + !BlastReloadSupportRulesetCondition.GetCustomConditionFromCharacter( rulesetCharacter, out var supportCondition) ) { diff --git a/SolastaUnfinishedBusiness/Subclasses/RangerSkyWarrior.cs b/SolastaUnfinishedBusiness/Subclasses/RangerSkyWarrior.cs index 2bfe40596a..37723c4b4f 100644 --- a/SolastaUnfinishedBusiness/Subclasses/RangerSkyWarrior.cs +++ b/SolastaUnfinishedBusiness/Subclasses/RangerSkyWarrior.cs @@ -347,7 +347,9 @@ public IEnumerator OnMagicEffectFinishedByMe( { var rulesetEffect = action.ActionParams.RulesetEffect; - if (action.AttackRoll == 0 || + if (action.Countered || + action is CharacterActionCastSpell { ExecutionFailed: true } || + action.AttackRoll == 0 || action.AttackRollOutcome is not (RollOutcome.Success or RollOutcome.CriticalSuccess) || (rulesetEffect != null && rulesetEffect.EffectDescription.RangeType is not (RangeType.MeleeHit or RangeType.RangeHit))) diff --git a/SolastaUnfinishedBusiness/Subclasses/RoguishOpportunist.cs b/SolastaUnfinishedBusiness/Subclasses/RoguishOpportunist.cs index 28ab5110de..a45aafda51 100644 --- a/SolastaUnfinishedBusiness/Subclasses/RoguishOpportunist.cs +++ b/SolastaUnfinishedBusiness/Subclasses/RoguishOpportunist.cs @@ -340,6 +340,12 @@ public IEnumerator OnMagicEffectFinishedByMeOrAlly( GameLocationCharacter helper, List targets) { + if (action.Countered || + action is CharacterActionCastSpell { ExecutionFailed: true }) + { + yield break; + } + // ReSharper disable once ForeachCanBeConvertedToQueryUsingAnotherGetEnumerator foreach (var target in targets) { diff --git a/SolastaUnfinishedBusiness/Subclasses/SorcerousPsion.cs b/SolastaUnfinishedBusiness/Subclasses/SorcerousPsion.cs index 79343d3424..7483c84dc1 100644 --- a/SolastaUnfinishedBusiness/Subclasses/SorcerousPsion.cs +++ b/SolastaUnfinishedBusiness/Subclasses/SorcerousPsion.cs @@ -396,6 +396,8 @@ public IEnumerator OnMagicEffectFinishedByMe( attacker.UsedSpecialFeatures.TryAdd(powerSupremeWill.Name, 0); if (action is not CharacterActionCastSpell actionCastSpell || + actionCastSpell.Countered || + actionCastSpell.ExecutionFailed || !hasTag || value == 0) { yield break; diff --git a/SolastaUnfinishedBusiness/Subclasses/SorcerousWildMagic.cs b/SolastaUnfinishedBusiness/Subclasses/SorcerousWildMagic.cs index 424906a0b1..1da663c6ab 100644 --- a/SolastaUnfinishedBusiness/Subclasses/SorcerousWildMagic.cs +++ b/SolastaUnfinishedBusiness/Subclasses/SorcerousWildMagic.cs @@ -548,6 +548,8 @@ public IEnumerator OnMagicEffectFinishedByMe( if (hasUsedWildMarkThisTurn || action is not CharacterActionCastSpell actionCastSpell || + actionCastSpell.Countered || + actionCastSpell.ExecutionFailed || (actionCastSpell.ActiveSpell.SpellDefinition.SpellLevel == 0 && !hasChaos) || (actionCastSpell.ActiveSpell.SpellRepertoire != null && // casting from a scroll so let wild surge actionCastSpell.ActiveSpell.SpellRepertoire.SpellCastingClass != CharacterClassDefinitions.Sorcerer)) @@ -1177,7 +1179,9 @@ public IEnumerator OnMagicEffectInitiatedByMe( attacker.UsedSpecialFeatures.Remove(FeatureSpellBombardment.Name); if (levels < 18 || - ((activeEffect is not RulesetEffectSpell rulesetEffectSpell || + ((action.Countered || + action is CharacterActionCastSpell { ExecutionFailed: true } || + activeEffect is not RulesetEffectSpell rulesetEffectSpell || rulesetEffectSpell.SpellRepertoire?.SpellCastingClass != CharacterClassDefinitions.Sorcerer) && activeEffect.SourceDefinition != PowerFireball)) { diff --git a/SolastaUnfinishedBusiness/Subclasses/WizardWarMagic.cs b/SolastaUnfinishedBusiness/Subclasses/WizardWarMagic.cs index 32b889076a..6e87e6d03b 100644 --- a/SolastaUnfinishedBusiness/Subclasses/WizardWarMagic.cs +++ b/SolastaUnfinishedBusiness/Subclasses/WizardWarMagic.cs @@ -370,6 +370,8 @@ public IEnumerator OnMagicEffectFinishedByMe( List targets) { if (action is not CharacterActionCastSpell actionCastSpell || + actionCastSpell.Countered || + actionCastSpell.ExecutionFailed || actionCastSpell.ActiveSpell.SpellDefinition != SpellDefinitions.Counterspell) { yield break; From 1fbb19c751553728b2e1095160568b58a0dac187 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Fri, 6 Sep 2024 22:25:57 -0700 Subject: [PATCH 061/212] fix Path of the Wild Magic retribution, and Patron Archfey misty step to only react against enemy effects --- SolastaUnfinishedBusiness/ChangelogHistory.txt | 2 +- SolastaUnfinishedBusiness/Spells/SpellBuildersLevel05.cs | 7 +++++-- SolastaUnfinishedBusiness/Subclasses/PathOfTheWildMagic.cs | 6 +++--- SolastaUnfinishedBusiness/Subclasses/PatronArchfey.cs | 7 ++----- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/SolastaUnfinishedBusiness/ChangelogHistory.txt b/SolastaUnfinishedBusiness/ChangelogHistory.txt index 0464d49690..42b1ee6d96 100644 --- a/SolastaUnfinishedBusiness/ChangelogHistory.txt +++ b/SolastaUnfinishedBusiness/ChangelogHistory.txt @@ -10,7 +10,7 @@ - fixed Lucky, and Mage Slayer feats double consumption - fixed Martial Commander coordinated defense to require an attack first [VANILLA] - fixed Party Editor to register/unregister powers from feats -- fixed Patron Archfey misty step to only react against enemy effects +- fixed Path of the Wild Magic retribution, and Patron Archfey misty step to only react against enemy effects - fixed save by location/campaign setting on multiplayer load - improved ability checks to also allow reactions on success [Circle of the Cosmos woe] - improved Conversion Slots, and Shorthand versatilities to react on ability checks diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel05.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel05.cs index 0c853e0531..c3d8eeed7c 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel05.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel05.cs @@ -954,12 +954,15 @@ public IEnumerator OnMagicEffectBeforeHitConfirmedOnMe( yield break; } - actualEffectForms.RemoveAll(x => + var removed = actualEffectForms.RemoveAll(x => x.HasSavingThrow && x.FormType == EffectForm.EffectFormType.Damage && x.SavingThrowAffinity == EffectSavingThrowType.HalfDamage); - defender.RulesetCharacter.LogCharacterAffectedByCondition(conditionCircleOfMagicalNegation); + if (removed > 0) + { + defender.RulesetCharacter.LogCharacterAffectedByCondition(conditionCircleOfMagicalNegation); + } } public void OnSavingThrowFinished( diff --git a/SolastaUnfinishedBusiness/Subclasses/PathOfTheWildMagic.cs b/SolastaUnfinishedBusiness/Subclasses/PathOfTheWildMagic.cs index b84ddacc97..6e87689f61 100644 --- a/SolastaUnfinishedBusiness/Subclasses/PathOfTheWildMagic.cs +++ b/SolastaUnfinishedBusiness/Subclasses/PathOfTheWildMagic.cs @@ -1097,9 +1097,9 @@ public IEnumerator OnMagicEffectBeforeHitConfirmedOnMe( bool firstTarget, bool criticalHit) { - if (defender == attacker - || attacker.RulesetCharacter.IsDeadOrDying - || defender.RulesetCharacter.IsDeadOrDying) + if (attacker.IsOppositeSide(defender.Side) || + attacker.RulesetCharacter.IsDeadOrDying || + defender.RulesetCharacter.IsDeadOrDying) { yield break; } diff --git a/SolastaUnfinishedBusiness/Subclasses/PatronArchfey.cs b/SolastaUnfinishedBusiness/Subclasses/PatronArchfey.cs index 611f3ee37d..7f852024d8 100644 --- a/SolastaUnfinishedBusiness/Subclasses/PatronArchfey.cs +++ b/SolastaUnfinishedBusiness/Subclasses/PatronArchfey.cs @@ -351,12 +351,10 @@ public IEnumerator OnMagicEffectBeforeHitConfirmedOnMe( bool firstTarget, bool criticalHit) { - if (attacker.Side == defender.Side) + if (attacker.IsOppositeSide(defender.Side)) { - yield break; + yield return HandleReaction(battleManager, attacker, defender); } - - yield return HandleReaction(battleManager, attacker, defender); } public IEnumerator OnMagicEffectFinishedOnMe(CharacterAction action, @@ -504,7 +502,6 @@ void ReactionValidated() private class CustomBehaviorBeguilingDefenses(FeatureDefinitionPower powerBeguilingDefenses) : IPhysicalAttackBeforeHitConfirmedOnMe, IMagicEffectBeforeHitConfirmedOnMe - { public IEnumerator OnMagicEffectBeforeHitConfirmedOnMe( GameLocationBattleManager battleManager, From 192a1da54c9b1d611f47bf6dba3e9d8fc6ec7e1d Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sat, 7 Sep 2024 07:25:04 -0700 Subject: [PATCH 062/212] fix fishy code with Unity (null checks to avoid issues with unity object mgt) --- .../Behaviors/AddExtraAttack.cs | 2 +- .../Validators/ValidatorsWeapon.cs | 66 +++++++++++-------- 2 files changed, 39 insertions(+), 29 deletions(-) diff --git a/SolastaUnfinishedBusiness/Behaviors/AddExtraAttack.cs b/SolastaUnfinishedBusiness/Behaviors/AddExtraAttack.cs index 0137fbdcd0..812f263874 100644 --- a/SolastaUnfinishedBusiness/Behaviors/AddExtraAttack.cs +++ b/SolastaUnfinishedBusiness/Behaviors/AddExtraAttack.cs @@ -423,7 +423,7 @@ protected override List GetAttackModes([NotNull] RulesetChara var offHandItem = hero.GetOffhandWeapon(); if (offHandItem == null || - !ValidatorsWeapon.IsShield(offHandItem)) + !ValidatorsWeapon.IsShield(offHandItem.ItemDefinition)) { return null; } diff --git a/SolastaUnfinishedBusiness/Validators/ValidatorsWeapon.cs b/SolastaUnfinishedBusiness/Validators/ValidatorsWeapon.cs index 5f9fac9cfc..48c6ba96c4 100644 --- a/SolastaUnfinishedBusiness/Validators/ValidatorsWeapon.cs +++ b/SolastaUnfinishedBusiness/Validators/ValidatorsWeapon.cs @@ -35,8 +35,10 @@ internal static IsWeaponValidHandler IsOfWeaponType(params WeaponTypeDefinition[ [MethodImpl(MethodImplOptions.AggressiveInlining)] internal static bool IsMagical(RulesetAttackMode attackMode, RulesetItem rulesetItem, RulesetCharacter _) { - return attackMode.Magical || (rulesetItem != null - && (rulesetItem.IsMagicalWeapon() || ShieldAttack.IsMagicalShield(rulesetItem))); + return attackMode.Magical || + (rulesetItem != null && + (rulesetItem.IsMagicalWeapon() || + ShieldAttack.IsMagicalShield(rulesetItem))); } #if false @@ -69,10 +71,14 @@ internal static bool HasTwoHandedTag([CanBeNull] RulesetAttackMode attackMode) [MethodImpl(MethodImplOptions.AggressiveInlining)] private static bool IsMelee([CanBeNull] ItemDefinition itemDefinition) { - return itemDefinition - && ((itemDefinition.WeaponDescription != null - && itemDefinition.WeaponDescription.WeaponTypeDefinition.WeaponProximity == AttackProximity.Melee) - || itemDefinition.IsArmor /* for shields */); + if (!itemDefinition) + { + return false; + } + + return itemDefinition.IsArmor || + (itemDefinition.WeaponDescription != null && + itemDefinition.WeaponDescription.WeaponTypeDefinition.WeaponProximity == AttackProximity.Melee); } #pragma warning disable IDE0060 @@ -89,17 +95,15 @@ internal static bool IsMelee( attackModeRulesetItem = rulesetItem1; } - var item = attackModeRulesetItem ?? rulesetItem; - // don't use IsMelee(attackMode) in here as these are used before an attack initiates - return IsMelee(item ?? rulesetCharacter?.GetMainWeapon()); + return IsMelee(attackModeRulesetItem ?? rulesetItem ?? rulesetCharacter?.GetMainWeapon()); } #pragma warning restore IDE0060 [MethodImpl(MethodImplOptions.AggressiveInlining)] internal static bool IsMelee([CanBeNull] RulesetItem rulesetItem) { - return rulesetItem != null && IsMelee(rulesetItem.ItemDefinition); + return IsMelee(rulesetItem?.ItemDefinition); } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -119,16 +123,14 @@ internal static bool IsMelee([CanBeNull] RulesetAttackMode attackMode) [MethodImpl(MethodImplOptions.AggressiveInlining)] internal static bool IsShield([CanBeNull] ItemDefinition itemDefinition) { - return itemDefinition - && itemDefinition.IsArmor - && itemDefinition.ArmorDescription != null - && itemDefinition.ArmorDescription.ArmorType == ShieldType.Name; - } + if (!itemDefinition) + { + return false; + } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - internal static bool IsShield([CanBeNull] RulesetItem rulesetItem) - { - return rulesetItem != null && IsShield(rulesetItem.ItemDefinition); + return itemDefinition.IsArmor && + itemDefinition.ArmorDescription != null && + itemDefinition.ArmorDescription.ArmorType == ShieldType.Name; } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -136,10 +138,14 @@ internal static bool IsWeaponType( [CanBeNull] ItemDefinition itemDefinition, params WeaponTypeDefinition[] weaponTypeDefinitions) { - return itemDefinition - && itemDefinition.IsWeapon - && itemDefinition.WeaponDescription != null - && weaponTypeDefinitions.Contains(itemDefinition.WeaponDescription.WeaponTypeDefinition); + if (!itemDefinition) + { + return false; + } + + return itemDefinition.IsWeapon && + itemDefinition.WeaponDescription != null && + weaponTypeDefinitions.Contains(itemDefinition.WeaponDescription.WeaponTypeDefinition); } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -147,7 +153,7 @@ internal static bool IsWeaponType( [CanBeNull] RulesetItem rulesetItem, params WeaponTypeDefinition[] weaponTypeDefinitions) { - return rulesetItem != null && IsWeaponType(rulesetItem.ItemDefinition, weaponTypeDefinitions); + return IsWeaponType(rulesetItem?.ItemDefinition, weaponTypeDefinitions); } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -189,9 +195,13 @@ internal static bool IsUnarmed([CanBeNull] RulesetAttackMode attackMode) [MethodImpl(MethodImplOptions.AggressiveInlining)] internal static bool HasAnyWeaponTag([CanBeNull] ItemDefinition itemDefinition, [NotNull] params string[] tags) { - return itemDefinition - && itemDefinition.IsWeapon - && itemDefinition.WeaponDescription != null - && tags.Any(t => itemDefinition.WeaponDescription.WeaponTags.Contains(t)); + if (!itemDefinition) + { + return false; + } + + return itemDefinition.IsWeapon && + itemDefinition.WeaponDescription != null && + tags.Any(t => itemDefinition.WeaponDescription.WeaponTags.Contains(t)); } } From cce783b8bdfc92514a2868095208d9cb0077916b Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sat, 7 Sep 2024 08:09:02 -0700 Subject: [PATCH 063/212] convert Command to use sub spells --- .../Spells/SpellBuildersLevel01.cs | 153 ++++++++++-------- .../Translations/de/Spells/Spells01-de.txt | 4 - .../Translations/en/Spells/Spells01-en.txt | 4 - .../Translations/es/Spells/Spells01-es.txt | 4 - .../Translations/fr/Spells/Spells01-fr.txt | 4 - .../Translations/it/Spells/Spells01-it.txt | 4 - .../Translations/ja/Spells/Spells01-ja.txt | 4 - .../Translations/ko/Spells/Spells01-ko.txt | 4 - .../pt-BR/Spells/Spells01-pt-BR.txt | 4 - .../Translations/ru/Spells/Spells01-ru.txt | 4 - .../zh-CN/Spells/Spells01-zh-CN.txt | 4 - 11 files changed, 84 insertions(+), 109 deletions(-) diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs index 893a5e72b4..48260c0eda 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs @@ -1238,12 +1238,6 @@ internal static SpellDefinition BuildCommand() { const string NAME = "CommandSpell"; - var powerPool = FeatureDefinitionPowerBuilder - .Create($"Power{NAME}") - .SetGuiPresentationNoContent(true) - .SetUsesFixed(ActivationTime.NoCost) - .AddToDB(); - // Approach #region Approach AI Behavior @@ -1256,8 +1250,6 @@ internal static SpellDefinition BuildCommand() scorerApproach.scorer = scorerApproach.scorer.DeepCopy(); scorerApproach.name = "MoveScorer_Approach"; - // remove IsCloseFromMe - scorerApproach.scorer.WeightedConsiderations.RemoveAt(3); // invert PenalizeFearSourceProximityAtPosition if brain character has condition approach and enemy is condition source scorerApproach.scorer.WeightedConsiderations[2].Consideration.stringParameter = ConditionApproachName; // invert PenalizeVeryCloseEnemyProximityAtPosition if brain character has condition approach and enemy is condition source @@ -1291,15 +1283,24 @@ internal static SpellDefinition BuildCommand() conditionApproach.AddCustomSubFeatures(new ActionFinishedByMeApproach(conditionApproach)); - var powerApproach = FeatureDefinitionPowerSharedPoolBuilder + var spellApproach = SpellDefinitionBuilder .Create($"Power{NAME}Approach") - .SetGuiPresentation(Category.Feature) - .SetSharedPool(ActivationTime.NoCost, powerPool) - .SetShowCasting(false) + .SetGuiPresentation(Category.Feature, Command) + .SetSchoolOfMagic(SchoolOfMagicDefinitions.SchoolEnchantment) + .SetSpellLevel(1) + .SetCastingTime(ActivationTime.Action) + .SetMaterialComponent(MaterialComponentType.Mundane) + .SetVerboseComponent(true) + .SetSomaticComponent(false) + .SetVocalSpellSameType(VocalSpellSemeType.Attack) .SetEffectDescription( EffectDescriptionBuilder .Create() .SetTargetingData(Side.Enemy, RangeType.Distance, 12, TargetType.IndividualsUnique) + .SetEffectAdvancement(EffectIncrementMethod.PerAdditionalSlotLevel, + additionalTargetsPerIncrement: 1) + .SetSavingThrowData(false, AttributeDefinitions.Wisdom, true, + EffectDifficultyClassComputation.SpellCastingFeature) .SetEffectForms(EffectFormBuilder.ConditionForm(conditionApproach)) .Build()) .AddToDB(); @@ -1316,16 +1317,25 @@ internal static SpellDefinition BuildCommand() .SetFeatures(MovementAffinityConditionDashing) .AddToDB(); - var powerFlee = FeatureDefinitionPowerSharedPoolBuilder + var spellFlee = SpellDefinitionBuilder .Create($"Power{NAME}Flee") - .SetGuiPresentation(Category.Feature) - .SetSharedPool(ActivationTime.NoCost, powerPool) - .SetShowCasting(false) + .SetGuiPresentation(Category.Feature, Command) + .SetSchoolOfMagic(SchoolOfMagicDefinitions.SchoolEnchantment) + .SetSpellLevel(1) + .SetCastingTime(ActivationTime.Action) + .SetMaterialComponent(MaterialComponentType.Mundane) + .SetVerboseComponent(true) + .SetSomaticComponent(false) + .SetVocalSpellSameType(VocalSpellSemeType.Attack) .SetEffectDescription( EffectDescriptionBuilder .Create() .SetDurationData(DurationType.Round, 1, TurnOccurenceType.StartOfTurn) .SetTargetingData(Side.Enemy, RangeType.Distance, 12, TargetType.IndividualsUnique) + .SetEffectAdvancement(EffectIncrementMethod.PerAdditionalSlotLevel, + additionalTargetsPerIncrement: 1) + .SetSavingThrowData(false, AttributeDefinitions.Wisdom, true, + EffectDifficultyClassComputation.SpellCastingFeature) .SetEffectForms(EffectFormBuilder.ConditionForm(conditionFlee)) .Build()) .AddToDB(); @@ -1341,15 +1351,24 @@ internal static SpellDefinition BuildCommand() .AddCustomSubFeatures(new CharacterBeforeTurnStartListenerCommandGrovel()) .AddToDB(); - var powerGrovel = FeatureDefinitionPowerSharedPoolBuilder + var spellGrovel = SpellDefinitionBuilder .Create($"Power{NAME}Grovel") - .SetGuiPresentation(Category.Feature) - .SetSharedPool(ActivationTime.NoCost, powerPool) - .SetShowCasting(false) + .SetGuiPresentation(Category.Feature, Command) + .SetSchoolOfMagic(SchoolOfMagicDefinitions.SchoolEnchantment) + .SetSpellLevel(1) + .SetCastingTime(ActivationTime.Action) + .SetMaterialComponent(MaterialComponentType.Mundane) + .SetVerboseComponent(true) + .SetSomaticComponent(false) + .SetVocalSpellSameType(VocalSpellSemeType.Attack) .SetEffectDescription( EffectDescriptionBuilder .Create() .SetTargetingData(Side.Enemy, RangeType.Distance, 12, TargetType.IndividualsUnique) + .SetEffectAdvancement(EffectIncrementMethod.PerAdditionalSlotLevel, + additionalTargetsPerIncrement: 1) + .SetSavingThrowData(false, AttributeDefinitions.Wisdom, true, + EffectDifficultyClassComputation.SpellCastingFeature) .SetEffectForms(EffectFormBuilder.ConditionForm(conditionGrovel)) .Build()) .AddToDB(); @@ -1370,38 +1389,55 @@ internal static SpellDefinition BuildCommand() .AddToDB()) .AddToDB(); - var powerHalt = FeatureDefinitionPowerSharedPoolBuilder + var spellHalt = SpellDefinitionBuilder .Create($"Power{NAME}Halt") - .SetGuiPresentation(Category.Feature) - .SetSharedPool(ActivationTime.NoCost, powerPool) - .SetShowCasting(false) + .SetGuiPresentation(Category.Feature, Command) + .SetSchoolOfMagic(SchoolOfMagicDefinitions.SchoolEnchantment) + .SetSpellLevel(1) + .SetCastingTime(ActivationTime.Action) + .SetMaterialComponent(MaterialComponentType.Mundane) + .SetVerboseComponent(true) + .SetSomaticComponent(false) + .SetVocalSpellSameType(VocalSpellSemeType.Attack) .SetEffectDescription( EffectDescriptionBuilder .Create() .SetDurationData(DurationType.Round, 1, TurnOccurenceType.StartOfTurn) .SetTargetingData(Side.Enemy, RangeType.Distance, 12, TargetType.IndividualsUnique) + .SetEffectAdvancement(EffectIncrementMethod.PerAdditionalSlotLevel, + additionalTargetsPerIncrement: 1) + .SetSavingThrowData(false, AttributeDefinitions.Wisdom, true, + EffectDifficultyClassComputation.SpellCastingFeature) .SetEffectForms(EffectFormBuilder.ConditionForm(conditionHalt)) .Build()) .AddToDB(); - PowerBundle.RegisterPowerBundle(powerPool, false, powerApproach, powerFlee, powerGrovel, powerHalt); - // Command Spell - var conditionSelf = ConditionDefinitionBuilder - .Create($"Condition{NAME}Self") - .SetGuiPresentationNoContent(true) - .SetSilent(Silent.WhenAddedOrRemoved) - .SetFeatures(powerPool, powerApproach, powerFlee, powerGrovel, powerHalt) - .AddCustomSubFeatures(AddUsablePowersFromCondition.Marker) - .AddToDB(); - var conditionMark = ConditionDefinitionBuilder .Create($"Condition{NAME}Mark") .SetGuiPresentationNoContent(true) .SetSilent(Silent.WhenAddedOrRemoved) .AddToDB(); + // MAIN + + spellApproach.AddCustomSubFeatures( + new PowerOrSpellFinishedByMeCommand( + conditionMark, conditionApproach, conditionFlee, conditionGrovel, conditionHalt)); + + spellFlee.AddCustomSubFeatures( + new PowerOrSpellFinishedByMeCommand( + conditionMark, conditionApproach, conditionFlee, conditionGrovel, conditionHalt)); + + spellGrovel.AddCustomSubFeatures( + new PowerOrSpellFinishedByMeCommand( + conditionMark, conditionApproach, conditionFlee, conditionGrovel, conditionHalt)); + + spellHalt.AddCustomSubFeatures( + new PowerOrSpellFinishedByMeCommand( + conditionMark, conditionApproach, conditionFlee, conditionGrovel, conditionHalt)); + var spell = SpellDefinitionBuilder .Create(NAME) .SetGuiPresentation(Category.Spell, Command) @@ -1412,6 +1448,7 @@ internal static SpellDefinition BuildCommand() .SetVerboseComponent(true) .SetSomaticComponent(false) .SetVocalSpellSameType(VocalSpellSemeType.Attack) + .SetSubSpells(spellApproach, spellFlee, spellGrovel, spellHalt) .SetEffectDescription( EffectDescriptionBuilder .Create() @@ -1427,14 +1464,10 @@ internal static SpellDefinition BuildCommand() .Create() .HasSavingThrow(EffectSavingThrowType.Negates) .SetConditionForm(conditionMark, ConditionForm.ConditionOperation.Add) - .Build(), - EffectFormBuilder.ConditionForm(conditionSelf, ConditionForm.ConditionOperation.Add, true)) + .Build()) .SetParticleEffectParameters(Command) .SetEffectEffectParameters(SpareTheDying) .Build()) - .AddCustomSubFeatures( - new PowerOrSpellFinishedByMeCommand( - conditionMark, powerPool, conditionApproach, conditionFlee, conditionGrovel, conditionHalt)) .AddToDB(); return spell; @@ -1455,6 +1488,9 @@ public IEnumerator OnActionFinishedByMe(CharacterAction characterAction) yield break; } + actingCharacter.UsedTacticalMoves = actingCharacter.MaxTacticalMoves; + actingCharacter.UsedTacticalMovesChanged?.Invoke(actingCharacter); + var rulesetCaster = EffectHelpers.GetCharacterByGuid(activeCondition.SourceGuid); var caster = GameLocationCharacter.GetFromActor(rulesetCaster); @@ -1467,7 +1503,6 @@ public IEnumerator OnActionFinishedByMe(CharacterAction characterAction) private sealed class PowerOrSpellFinishedByMeCommand( ConditionDefinition conditionMark, - FeatureDefinitionPower powerPool, params ConditionDefinition[] conditions) : IPowerOrSpellFinishedByMe, IFilterTargetingCharacter { public bool EnforceFullSelection => true; @@ -1520,41 +1555,21 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, } var caster = action.ActingCharacter; - var rulesetCaster = caster.RulesetCharacter; - var usablePower = PowerProvider.Get(powerPool, rulesetCaster); foreach (var target in action.ActionParams.TargetCharacters .Where(x => x.RulesetActor.HasConditionOfCategoryAndType( AttributeDefinitions.TagEffect, conditionMark.Name))) { - yield return caster.MyReactToSpendPowerBundle( - usablePower, - [target], - caster, - "CommandSpell", - "ReactionSpendPowerBundleCommandSpellDescription".Formatted(Category.Reaction, target.Name), - ReactionValidated); - - continue; + var rulesetTarget = target.RulesetCharacter; + var conditionsToRemove = rulesetTarget.AllConditionsForEnumeration + .Where(x => + x.SourceGuid != caster.Guid && + conditions.Contains(x.ConditionDefinition)) + .ToList(); - void ReactionValidated(ReactionRequestSpendBundlePower reactionRequest) + foreach (var condition in conditionsToRemove) { - if (!reactionRequest.Validated) - { - return; - } - - var rulesetTarget = target.RulesetCharacter; - var conditionsToRemove = rulesetTarget.AllConditionsForEnumeration - .Where(x => - x.SourceGuid != caster.Guid && - conditions.Contains(x.ConditionDefinition)) - .ToList(); - - foreach (var condition in conditionsToRemove) - { - rulesetTarget.RemoveCondition(condition); - } + rulesetTarget.RemoveCondition(condition); } } } @@ -1875,7 +1890,7 @@ public IEnumerator OnMagicEffectFinishedByMe( if (action.AttackRollOutcome is not (RollOutcome.Success or RollOutcome.CriticalSuccess) || action.Countered || action is CharacterActionCastSpell { ExecutionFailed: true } || - action.ActionParams.RulesetEffect.EffectDescription.RangeType + action.ActionParams.RulesetEffect.EffectDescription.RangeType is not (RangeType.Touch or RangeType.MeleeHit)) { yield break; diff --git a/SolastaUnfinishedBusiness/Translations/de/Spells/Spells01-de.txt b/SolastaUnfinishedBusiness/Translations/de/Spells/Spells01-de.txt index 5c1f29f399..e2e3856a01 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Spells/Spells01-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Spells/Spells01-de.txt @@ -71,10 +71,6 @@ Reaction/&ReactionSpendPowerBundleChaosBoltDescription=Wählen Sie eine Schadens Reaction/&ReactionSpendPowerBundleChaosBoltReactDescription=Wählen Sie eine Schadensart. Reaction/&ReactionSpendPowerBundleChaosBoltReactTitle=Chaosblitz Reaction/&ReactionSpendPowerBundleChaosBoltTitle=Chaosblitz -Reaction/&ReactionSpendPowerBundleCommandSpellDescription=Befehl {0} zum: -Reaction/&ReactionSpendPowerBundleCommandSpellReactDescription=Wählen Sie Ihren Befehl. -Reaction/&ReactionSpendPowerBundleCommandSpellReactTitle=Befehl -Reaction/&ReactionSpendPowerBundleCommandSpellTitle=Befehl Reaction/&SpendSpellSlotElementalInfusionDescription=Sie können resistent gegen eingehenden Elementarschaden werden und bei Ihrem nächsten Angriff zusätzlichen 1W6 Elementarschaden pro Zauberplatzstufe verursachen. Reaction/&SpendSpellSlotElementalInfusionReactDescription=Absorbieren Sie das eingehende Schadenselement Reaction/&SpendSpellSlotElementalInfusionReactTitle=Element absorbieren diff --git a/SolastaUnfinishedBusiness/Translations/en/Spells/Spells01-en.txt b/SolastaUnfinishedBusiness/Translations/en/Spells/Spells01-en.txt index 9c1ac28405..d3ffd53535 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Spells/Spells01-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Spells/Spells01-en.txt @@ -71,10 +71,6 @@ Reaction/&ReactionSpendPowerBundleChaosBoltDescription=Choose a damage type. Reaction/&ReactionSpendPowerBundleChaosBoltReactDescription=Choose a damage type. Reaction/&ReactionSpendPowerBundleChaosBoltReactTitle=Chaos Bolt Reaction/&ReactionSpendPowerBundleChaosBoltTitle=Chaos Bolt -Reaction/&ReactionSpendPowerBundleCommandSpellDescription=Command {0} to: -Reaction/&ReactionSpendPowerBundleCommandSpellReactDescription=Choose your command. -Reaction/&ReactionSpendPowerBundleCommandSpellReactTitle=Command -Reaction/&ReactionSpendPowerBundleCommandSpellTitle=Command Reaction/&SpendSpellSlotElementalInfusionDescription=You can become resistant to incoming elemental damage and deal additional 1d6 elemental damage per spell slot level on your next attack. Reaction/&SpendSpellSlotElementalInfusionReactDescription=Absorb the incoming damage element Reaction/&SpendSpellSlotElementalInfusionReactTitle=Absorb Element diff --git a/SolastaUnfinishedBusiness/Translations/es/Spells/Spells01-es.txt b/SolastaUnfinishedBusiness/Translations/es/Spells/Spells01-es.txt index c26459ec4b..718ca1cadb 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Spells/Spells01-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Spells/Spells01-es.txt @@ -71,10 +71,6 @@ Reaction/&ReactionSpendPowerBundleChaosBoltDescription=Elija un tipo de daño. Reaction/&ReactionSpendPowerBundleChaosBoltReactDescription=Elija un tipo de daño. Reaction/&ReactionSpendPowerBundleChaosBoltReactTitle=Rayo del caos Reaction/&ReactionSpendPowerBundleChaosBoltTitle=Descarga del caos -Reaction/&ReactionSpendPowerBundleCommandSpellDescription=Comando {0} para: -Reaction/&ReactionSpendPowerBundleCommandSpellReactDescription=Elige tu comando. -Reaction/&ReactionSpendPowerBundleCommandSpellReactTitle=Dominio -Reaction/&ReactionSpendPowerBundleCommandSpellTitle=Dominio Reaction/&SpendSpellSlotElementalInfusionDescription=Puedes volverte resistente al daño elemental entrante y causar 1d6 de daño elemental adicional por nivel de espacio de hechizo en tu próximo ataque. Reaction/&SpendSpellSlotElementalInfusionReactDescription=Absorber el elemento de daño entrante Reaction/&SpendSpellSlotElementalInfusionReactTitle=Elemento absorbente diff --git a/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells01-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells01-fr.txt index 5638291100..f11852c823 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells01-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells01-fr.txt @@ -71,10 +71,6 @@ Reaction/&ReactionSpendPowerBundleChaosBoltDescription=Choisissez un type de dé Reaction/&ReactionSpendPowerBundleChaosBoltReactDescription=Choisissez un type de dégâts. Reaction/&ReactionSpendPowerBundleChaosBoltReactTitle=Éclair du chaos Reaction/&ReactionSpendPowerBundleChaosBoltTitle=Éclair du chaos -Reaction/&ReactionSpendPowerBundleCommandSpellDescription=Commande {0} pour : -Reaction/&ReactionSpendPowerBundleCommandSpellReactDescription=Choisissez votre commande. -Reaction/&ReactionSpendPowerBundleCommandSpellReactTitle=Commande -Reaction/&ReactionSpendPowerBundleCommandSpellTitle=Commande Reaction/&SpendSpellSlotElementalInfusionDescription=Vous pouvez devenir résistant aux dégâts élémentaires entrants et infliger 1d6 dégâts élémentaires supplémentaires par niveau d'emplacement de sort lors de votre prochaine attaque. Reaction/&SpendSpellSlotElementalInfusionReactDescription=Absorber l'élément de dégâts entrant Reaction/&SpendSpellSlotElementalInfusionReactTitle=Absorber l'élément diff --git a/SolastaUnfinishedBusiness/Translations/it/Spells/Spells01-it.txt b/SolastaUnfinishedBusiness/Translations/it/Spells/Spells01-it.txt index 5039c4eadc..3f30a7fbe9 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Spells/Spells01-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Spells/Spells01-it.txt @@ -71,10 +71,6 @@ Reaction/&ReactionSpendPowerBundleChaosBoltDescription=Scegli un tipo di danno. Reaction/&ReactionSpendPowerBundleChaosBoltReactDescription=Scegli un tipo di danno. Reaction/&ReactionSpendPowerBundleChaosBoltReactTitle=Fulmine del Caos Reaction/&ReactionSpendPowerBundleChaosBoltTitle=Fulmine del Caos -Reaction/&ReactionSpendPowerBundleCommandSpellDescription=Comando {0} per: -Reaction/&ReactionSpendPowerBundleCommandSpellReactDescription=Scegli il tuo comando. -Reaction/&ReactionSpendPowerBundleCommandSpellReactTitle=Comando -Reaction/&ReactionSpendPowerBundleCommandSpellTitle=Comando Reaction/&SpendSpellSlotElementalInfusionDescription=Puoi diventare resistente ai danni elementali in arrivo e infliggere 1d6 danni elementali aggiuntivi per livello dello slot incantesimo al tuo prossimo attacco. Reaction/&SpendSpellSlotElementalInfusionReactDescription=Assorbe l'elemento danno in arrivo Reaction/&SpendSpellSlotElementalInfusionReactTitle=Assorbi Elemento diff --git a/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells01-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells01-ja.txt index 5d55bd190a..a6539edcb2 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells01-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells01-ja.txt @@ -71,10 +71,6 @@ Reaction/&ReactionSpendPowerBundleChaosBoltDescription=ダメージタイプを Reaction/&ReactionSpendPowerBundleChaosBoltReactDescription=ダメージタイプを選択してください。 Reaction/&ReactionSpendPowerBundleChaosBoltReactTitle=カオスボルト Reaction/&ReactionSpendPowerBundleChaosBoltTitle=カオスボルト -Reaction/&ReactionSpendPowerBundleCommandSpellDescription={0} コマンド: -Reaction/&ReactionSpendPowerBundleCommandSpellReactDescription=コマンドを選択してください。 -Reaction/&ReactionSpendPowerBundleCommandSpellReactTitle=指示 -Reaction/&ReactionSpendPowerBundleCommandSpellTitle=指示 Reaction/&SpendSpellSlotElementalInfusionDescription=あなたは受ける属性ダメージに対して耐性を持ち、次の攻撃時に呪文スロット レベルごとに追加の 1d6 属性ダメージを与えることができます。 Reaction/&SpendSpellSlotElementalInfusionReactDescription=受けるダメージ要素を吸収する Reaction/&SpendSpellSlotElementalInfusionReactTitle=エレメントを吸収 diff --git a/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells01-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells01-ko.txt index f19e0159ec..47853a937e 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells01-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells01-ko.txt @@ -71,10 +71,6 @@ Reaction/&ReactionSpendPowerBundleChaosBoltDescription=손상 유형을 선택 Reaction/&ReactionSpendPowerBundleChaosBoltReactDescription=손상 유형을 선택하세요. Reaction/&ReactionSpendPowerBundleChaosBoltReactTitle=카오스볼트 Reaction/&ReactionSpendPowerBundleChaosBoltTitle=카오스볼트 -Reaction/&ReactionSpendPowerBundleCommandSpellDescription={0} 명령: -Reaction/&ReactionSpendPowerBundleCommandSpellReactDescription=명령을 선택하세요. -Reaction/&ReactionSpendPowerBundleCommandSpellReactTitle=명령 -Reaction/&ReactionSpendPowerBundleCommandSpellTitle=명령 Reaction/&SpendSpellSlotElementalInfusionDescription=들어오는 원소 피해에 대한 저항력을 갖게 되며 다음 공격 시 주문 슬롯 레벨당 1d6 원소 피해를 추가로 입힐 수 있습니다. Reaction/&SpendSpellSlotElementalInfusionReactDescription=들어오는 피해 요소를 흡수합니다. Reaction/&SpendSpellSlotElementalInfusionReactTitle=요소를 흡수 diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells01-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells01-pt-BR.txt index 6510d7dea7..b44f727ddd 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells01-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells01-pt-BR.txt @@ -71,10 +71,6 @@ Reaction/&ReactionSpendPowerBundleChaosBoltDescription=Escolha um tipo de dano. Reaction/&ReactionSpendPowerBundleChaosBoltReactDescription=Escolha um tipo de dano. Reaction/&ReactionSpendPowerBundleChaosBoltReactTitle=Raio do Caos Reaction/&ReactionSpendPowerBundleChaosBoltTitle=Raio do Caos -Reaction/&ReactionSpendPowerBundleCommandSpellDescription=Comando {0} para: -Reaction/&ReactionSpendPowerBundleCommandSpellReactDescription=Escolha seu comando. -Reaction/&ReactionSpendPowerBundleCommandSpellReactTitle=Comando -Reaction/&ReactionSpendPowerBundleCommandSpellTitle=Comando Reaction/&SpendSpellSlotElementalInfusionDescription=Você pode se tornar resistente a dano elemental e causar 1d6 de dano elemental adicional por nível de magia no seu próximo ataque. Reaction/&SpendSpellSlotElementalInfusionReactDescription=Absorva o elemento de dano recebido Reaction/&SpendSpellSlotElementalInfusionReactTitle=Absorver Elemento diff --git a/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells01-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells01-ru.txt index 290278e778..2ad2565dad 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells01-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells01-ru.txt @@ -71,10 +71,6 @@ Reaction/&ReactionSpendPowerBundleChaosBoltDescription=Выберите тип Reaction/&ReactionSpendPowerBundleChaosBoltReactDescription=Выберите тип урона. Reaction/&ReactionSpendPowerBundleChaosBoltReactTitle=Снаряд хаоса Reaction/&ReactionSpendPowerBundleChaosBoltTitle=Снаряд хаоса -Reaction/&ReactionSpendPowerBundleCommandSpellDescription=Команда {0} для: -Reaction/&ReactionSpendPowerBundleCommandSpellReactDescription=Выберите команду. -Reaction/&ReactionSpendPowerBundleCommandSpellReactTitle=Команда -Reaction/&ReactionSpendPowerBundleCommandSpellTitle=Команда Reaction/&SpendSpellSlotElementalInfusionDescription=Вы можете получить сопротивление входящему стихийному урону и при следующей атаке нанести дополнительно 1d6 стихийного урона за уровень ячейки заклинания. Reaction/&SpendSpellSlotElementalInfusionReactDescription=Поглощает стихию входящего урона Reaction/&SpendSpellSlotElementalInfusionReactTitle=Поглотить стихию diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells01-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells01-zh-CN.txt index b12692d89c..46f548ce21 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells01-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells01-zh-CN.txt @@ -71,10 +71,6 @@ Reaction/&ReactionSpendPowerBundleChaosBoltDescription=选择伤害类型。 Reaction/&ReactionSpendPowerBundleChaosBoltReactDescription=选择伤害类型。 Reaction/&ReactionSpendPowerBundleChaosBoltReactTitle=混乱箭 Reaction/&ReactionSpendPowerBundleChaosBoltTitle=混乱箭 -Reaction/&ReactionSpendPowerBundleCommandSpellDescription=命令 {0} 执行: -Reaction/&ReactionSpendPowerBundleCommandSpellReactDescription=选择您的命令。 -Reaction/&ReactionSpendPowerBundleCommandSpellReactTitle=命令 -Reaction/&ReactionSpendPowerBundleCommandSpellTitle=命令 Reaction/&SpendSpellSlotElementalInfusionDescription=你可以抵抗来袭的元素伤害,并在下次攻击时每法术位环阶造成额外 1d6 元素伤害。 Reaction/&SpendSpellSlotElementalInfusionReactDescription=吸收来袭的伤害元素 Reaction/&SpendSpellSlotElementalInfusionReactTitle=吸收元素 From 52822e14c50700369610da4b587458fe3b9f58d2 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sat, 7 Sep 2024 08:35:55 -0700 Subject: [PATCH 064/212] fix custom saving checks not passing back results to action on Legendary, Indomitable, and others --- .../Interfaces/ITryAlterOutcomeSavingThrow.cs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/SolastaUnfinishedBusiness/Interfaces/ITryAlterOutcomeSavingThrow.cs b/SolastaUnfinishedBusiness/Interfaces/ITryAlterOutcomeSavingThrow.cs index d2c39d99e0..0fc8810767 100644 --- a/SolastaUnfinishedBusiness/Interfaces/ITryAlterOutcomeSavingThrow.cs +++ b/SolastaUnfinishedBusiness/Interfaces/ITryAlterOutcomeSavingThrow.cs @@ -49,6 +49,12 @@ internal static IEnumerator Handler( { yield return HandleFailedSavingThrow( battleManager, attacker, defender, savingThrowData, false, hasBorrowedLuck); + + if (savingThrowData.Action != null) + { + savingThrowData.Action.SaveOutcome = savingThrowData.SaveOutcome; + savingThrowData.Action.SaveOutcomeDelta = savingThrowData.SaveOutcomeDelta; + } } //PATCH: support for `ITryAlterOutcomeSavingThrow` @@ -162,8 +168,8 @@ internal static void TryRerollSavingThrow( } } - savingThrowData.SaveOutcome = saveOutcome; savingThrowData.SaveOutcomeDelta = saveOutcomeDelta; + savingThrowData.SaveOutcome = saveOutcome; } private static IEnumerator HandleFailedSavingThrow( @@ -189,6 +195,7 @@ private static IEnumerator HandleFailedSavingThrow( if (reactionParams.ReactionValidated) { + savingThrowData.SaveOutcomeDelta = 0; savingThrowData.SaveOutcome = RollOutcome.Success; } } From b18f1ec9a7ff5f97a3839d871a4d2bce373fe4c6 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sat, 7 Sep 2024 08:36:14 -0700 Subject: [PATCH 065/212] change command sub spells SFX --- SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs index 48260c0eda..a098057707 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs @@ -1302,6 +1302,8 @@ internal static SpellDefinition BuildCommand() .SetSavingThrowData(false, AttributeDefinitions.Wisdom, true, EffectDifficultyClassComputation.SpellCastingFeature) .SetEffectForms(EffectFormBuilder.ConditionForm(conditionApproach)) + .SetParticleEffectParameters(Command) + .SetEffectEffectParameters(SpareTheDying) .Build()) .AddToDB(); @@ -1337,6 +1339,8 @@ internal static SpellDefinition BuildCommand() .SetSavingThrowData(false, AttributeDefinitions.Wisdom, true, EffectDifficultyClassComputation.SpellCastingFeature) .SetEffectForms(EffectFormBuilder.ConditionForm(conditionFlee)) + .SetParticleEffectParameters(Command) + .SetEffectEffectParameters(SpareTheDying) .Build()) .AddToDB(); @@ -1370,6 +1374,8 @@ internal static SpellDefinition BuildCommand() .SetSavingThrowData(false, AttributeDefinitions.Wisdom, true, EffectDifficultyClassComputation.SpellCastingFeature) .SetEffectForms(EffectFormBuilder.ConditionForm(conditionGrovel)) + .SetParticleEffectParameters(Command) + .SetEffectEffectParameters(SpareTheDying) .Build()) .AddToDB(); @@ -1409,6 +1415,8 @@ internal static SpellDefinition BuildCommand() .SetSavingThrowData(false, AttributeDefinitions.Wisdom, true, EffectDifficultyClassComputation.SpellCastingFeature) .SetEffectForms(EffectFormBuilder.ConditionForm(conditionHalt)) + .SetParticleEffectParameters(Command) + .SetEffectEffectParameters(SpareTheDying) .Build()) .AddToDB(); From 45f0e2ed40a2a6ef052ccb97f57526db92c0895d Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sat, 7 Sep 2024 08:43:15 -0700 Subject: [PATCH 066/212] update diagnostics --- .../UnfinishedBusinessBlueprints/Assets.txt | 20 +- .../ConditionCommandSpellSelf.json | 161 -------------- .../DecisionDefinition/Move_Approach.json | 22 ++ .../PowerCommandSpell.json | 202 ------------------ ...InnovationWeaponAdvancedSteelDefender.json | 2 +- .../InnovationWeaponSteelDefender.json | 2 +- .../MonsterDefinition/OwlFamiliar.json | 2 +- .../SpellDefinition/CommandSpell.json | 36 +--- .../PowerCommandSpellApproach.json | 91 ++++---- .../PowerCommandSpellFlee.json | 91 ++++---- .../PowerCommandSpellGrovel.json | 91 ++++---- .../PowerCommandSpellHalt.json | 91 ++++---- .../SpellPowerCommandSpell.json | 198 ----------------- .../SpellPowerCommandSpellApproach.json | 193 ----------------- .../SpellPowerCommandSpellFlee.json | 193 ----------------- .../SpellPowerCommandSpellGrovel.json | 193 ----------------- .../SpellPowerCommandSpellHalt.json | 193 ----------------- 17 files changed, 200 insertions(+), 1581 deletions(-) delete mode 100644 Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellSelf.json delete mode 100644 Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerCommandSpell.json rename Diagnostics/UnfinishedBusinessBlueprints/{FeatureDefinitionPowerSharedPool => SpellDefinition}/PowerCommandSpellApproach.json (86%) rename Diagnostics/UnfinishedBusinessBlueprints/{FeatureDefinitionPowerSharedPool => SpellDefinition}/PowerCommandSpellFlee.json (86%) rename Diagnostics/UnfinishedBusinessBlueprints/{FeatureDefinitionPowerSharedPool => SpellDefinition}/PowerCommandSpellGrovel.json (86%) rename Diagnostics/UnfinishedBusinessBlueprints/{FeatureDefinitionPowerSharedPool => SpellDefinition}/PowerCommandSpellHalt.json (86%) delete mode 100644 Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/SpellPowerCommandSpell.json delete mode 100644 Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/SpellPowerCommandSpellApproach.json delete mode 100644 Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/SpellPowerCommandSpellFlee.json delete mode 100644 Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/SpellPowerCommandSpellGrovel.json delete mode 100644 Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/SpellPowerCommandSpellHalt.json diff --git a/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt b/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt index f6d8f30faf..33e3fc0a87 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt +++ b/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt @@ -697,7 +697,6 @@ ConditionCommandSpellFlee ConditionDefinition ConditionDefinition b52e3cc4-15af- ConditionCommandSpellGrovel ConditionDefinition ConditionDefinition 6422ce36-c309-52f9-b699-bddb61fde71e ConditionCommandSpellHalt ConditionDefinition ConditionDefinition d20e7a46-e706-5c54-8bea-955b2054193a ConditionCommandSpellMark ConditionDefinition ConditionDefinition 6c3dde6d-64eb-5e23-a14c-b820870f90ee -ConditionCommandSpellSelf ConditionDefinition ConditionDefinition 7b73b84d-697d-5018-9cff-85b0fba12033 ConditionCorruptingBolt ConditionDefinition ConditionDefinition c47e9ae4-841b-53af-b40f-2cb08dfa7d08 ConditionCrownOfStars ConditionDefinition ConditionDefinition 2d6f7c70-16fc-550b-83ff-f2e945b43449 ConditionCrusadersMantle ConditionDefinition ConditionDefinition 04a3a8c7-cf68-5a07-a0c1-9aabc911cad9 @@ -3072,11 +3071,6 @@ PowerCollegeOfThespianImprovedTerrificPerformance FeatureDefinitionPower Feature PowerCollegeOfThespianTerrificPerformance FeatureDefinitionPower FeatureDefinition ed5f8e89-7ca7-59ee-bd76-b9f936d0797a PowerCollegeOfValianceDishearteningPerformance FeatureDefinitionPower FeatureDefinition 1f54f672-43cd-52b3-8e3e-c9077a7f8eb4 PowerCollegeOfValianceHeroicInspiration FeatureDefinitionPower FeatureDefinition 5b82d737-651e-5bc2-b18b-1963f134f1b5 -PowerCommandSpell FeatureDefinitionPower FeatureDefinition 05222420-c747-5093-9ba6-b5995338b633 -PowerCommandSpellApproach FeatureDefinitionPowerSharedPool FeatureDefinition 18ae3db8-2589-5b95-b795-4f54e5aae89e -PowerCommandSpellFlee FeatureDefinitionPowerSharedPool FeatureDefinition 7920093b-60b8-5b72-8217-8e863e38bdea -PowerCommandSpellGrovel FeatureDefinitionPowerSharedPool FeatureDefinition 35f18407-8050-5283-ba7f-3a5863aa555e -PowerCommandSpellHalt FeatureDefinitionPowerSharedPool FeatureDefinition ba84cf9e-4373-5a11-af15-41395a314cde PowerCreateInfusedReplicaAmuletOfHealth FeatureDefinitionPowerSharedPool FeatureDefinition 241cfb02-8421-5f82-8f11-300407bff7c7 PowerCreateInfusedReplicaBackpack_Bag_Of_Holding FeatureDefinitionPowerSharedPool FeatureDefinition 41031a48-4461-5e48-8a60-f7da9a7bd597 PowerCreateInfusedReplicaBeltOfGiantHillStrength FeatureDefinitionPowerSharedPool FeatureDefinition bbd152a7-2d27-5836-a649-3f466da89ce6 @@ -5898,11 +5892,6 @@ PowerCollegeOfThespianImprovedTerrificPerformance FeatureDefinitionPower Feature PowerCollegeOfThespianTerrificPerformance FeatureDefinitionPower FeatureDefinitionPower ed5f8e89-7ca7-59ee-bd76-b9f936d0797a PowerCollegeOfValianceDishearteningPerformance FeatureDefinitionPower FeatureDefinitionPower 1f54f672-43cd-52b3-8e3e-c9077a7f8eb4 PowerCollegeOfValianceHeroicInspiration FeatureDefinitionPower FeatureDefinitionPower 5b82d737-651e-5bc2-b18b-1963f134f1b5 -PowerCommandSpell FeatureDefinitionPower FeatureDefinitionPower 05222420-c747-5093-9ba6-b5995338b633 -PowerCommandSpellApproach FeatureDefinitionPowerSharedPool FeatureDefinitionPower 18ae3db8-2589-5b95-b795-4f54e5aae89e -PowerCommandSpellFlee FeatureDefinitionPowerSharedPool FeatureDefinitionPower 7920093b-60b8-5b72-8217-8e863e38bdea -PowerCommandSpellGrovel FeatureDefinitionPowerSharedPool FeatureDefinitionPower 35f18407-8050-5283-ba7f-3a5863aa555e -PowerCommandSpellHalt FeatureDefinitionPowerSharedPool FeatureDefinitionPower ba84cf9e-4373-5a11-af15-41395a314cde PowerCreateInfusedReplicaAmuletOfHealth FeatureDefinitionPowerSharedPool FeatureDefinitionPower 241cfb02-8421-5f82-8f11-300407bff7c7 PowerCreateInfusedReplicaBackpack_Bag_Of_Holding FeatureDefinitionPowerSharedPool FeatureDefinitionPower 41031a48-4461-5e48-8a60-f7da9a7bd597 PowerCreateInfusedReplicaBeltOfGiantHillStrength FeatureDefinitionPowerSharedPool FeatureDefinitionPower bbd152a7-2d27-5836-a649-3f466da89ce6 @@ -12229,6 +12218,10 @@ MysticalCloakLowerPlane SpellDefinition SpellDefinition 27097d2a-d8b7-5dce-b6f2- NoxiousSpray SpellDefinition SpellDefinition 01220ecc-fa04-5576-acd6-b7dd39748f52 PetalStorm SpellDefinition SpellDefinition 4cc7aea6-dee9-5631-8b2a-f0e497b71bde PoisonWave SpellDefinition SpellDefinition eb22297a-4da6-5f24-87e8-ddcd2b957bd0 +PowerCommandSpellApproach SpellDefinition SpellDefinition 18ae3db8-2589-5b95-b795-4f54e5aae89e +PowerCommandSpellFlee SpellDefinition SpellDefinition 7920093b-60b8-5b72-8217-8e863e38bdea +PowerCommandSpellGrovel SpellDefinition SpellDefinition 35f18407-8050-5283-ba7f-3a5863aa555e +PowerCommandSpellHalt SpellDefinition SpellDefinition ba84cf9e-4373-5a11-af15-41395a314cde PowerWordHeal SpellDefinition SpellDefinition f9e2477f-fbee-5778-8ffc-c0380c0dea7d PowerWordKill SpellDefinition SpellDefinition 7d618d6a-004a-539e-a996-e180936abe9c PrimalSavagery SpellDefinition SpellDefinition a24eee9b-4a70-559f-838b-76777d3f6666 @@ -12315,11 +12308,6 @@ SpellPowerCollegeOfAudacityAudaciousWhirl SpellDefinition SpellDefinition f96604 SpellPowerCollegeOfAudacityDefensiveWhirl SpellDefinition SpellDefinition a7aa8a20-6587-5e36-b0bf-a9aa9d0b7d1b SpellPowerCollegeOfAudacityMobileWhirl SpellDefinition SpellDefinition 5ddb314c-e9bc-5cfc-ac92-bf42a53ea3f9 SpellPowerCollegeOfAudacitySlashingWhirl SpellDefinition SpellDefinition c5b8d92b-1c10-5ba8-be85-cd7db9609aef -SpellPowerCommandSpell SpellDefinition SpellDefinition af1672a4-ce02-5b90-a2ee-e34669a559e0 -SpellPowerCommandSpellApproach SpellDefinition SpellDefinition 152fd62b-c5e0-567a-a035-7f4f39023003 -SpellPowerCommandSpellFlee SpellDefinition SpellDefinition 8bd2bff0-c47d-5c51-9c83-82f46e5531bd -SpellPowerCommandSpellGrovel SpellDefinition SpellDefinition 41423887-4200-5abf-b070-c71f30076690 -SpellPowerCommandSpellHalt SpellDefinition SpellDefinition 22b80e7c-5b05-58a6-94cb-6ff9e7db04bd SpellPowerCreateSpellStoringWandOfAid SpellDefinition SpellDefinition 6918f728-abe9-5d29-8fe1-4615b153f054 SpellPowerCreateSpellStoringWandOfBlur SpellDefinition SpellDefinition df53557a-f022-5107-821c-f9ffec20339d SpellPowerCreateSpellStoringWandOfCureWounds SpellDefinition SpellDefinition 266af657-efd7-52ff-9e78-17ac1538ca14 diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellSelf.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellSelf.json deleted file mode 100644 index 39fec6e1b7..0000000000 --- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellSelf.json +++ /dev/null @@ -1,161 +0,0 @@ -{ - "$type": "ConditionDefinition, Assembly-CSharp", - "inDungeonEditor": false, - "parentCondition": null, - "conditionType": "Beneficial", - "features": [ - "Definition:PowerCommandSpell:05222420-c747-5093-9ba6-b5995338b633", - "Definition:PowerCommandSpellApproach:18ae3db8-2589-5b95-b795-4f54e5aae89e", - "Definition:PowerCommandSpellFlee:7920093b-60b8-5b72-8217-8e863e38bdea", - "Definition:PowerCommandSpellGrovel:35f18407-8050-5283-ba7f-3a5863aa555e", - "Definition:PowerCommandSpellHalt:ba84cf9e-4373-5a11-af15-41395a314cde" - ], - "allowMultipleInstances": false, - "silentWhenAdded": true, - "silentWhenRemoved": true, - "silentWhenRefreshed": false, - "terminateWhenRemoved": false, - "specialDuration": false, - "durationType": "Hour", - "durationParameterDie": "D4", - "durationParameter": 1, - "forceTurnOccurence": false, - "turnOccurence": "EndOfTurn", - "specialInterruptions": [], - "interruptionRequiresSavingThrow": false, - "interruptionSavingThrowComputationMethod": "SaveOverride", - "interruptionSavingThrowAbility": "", - "interruptionDamageThreshold": 0, - "keepConditionIfSavingThrowSucceeds": false, - "interruptionSavingThrowAffinity": "None", - "conditionTags": [], - "recurrentEffectForms": [], - "cancellingConditions": [], - "additionalDamageWhenHit": false, - "additionalDamageTypeDetermination": "Specific", - "additionalDamageType": "", - "additionalDamageQuantity": "AbilityBonus", - "additionalDamageDieType": "D1", - "additionalDamageDieNumber": 1, - "additionalConditionWhenHit": false, - "additionalCondition": null, - "additionalConditionDurationType": "Round", - "additionalConditionDurationParameter": 1, - "additionalConditionTurnOccurenceType": "StartOfTurn", - "conditionStartParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": null, - "m_SubObjectType": null - }, - "conditionParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": null, - "m_SubObjectType": null - }, - "conditionEndParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": null, - "m_SubObjectType": null - }, - "recurrentEffectParticleReference": null, - "characterShaderReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": null, - "m_SubObjectType": null - }, - "particlesBasedOnAncestryDamageType": false, - "ancestryType": "Sorcerer", - "acidParticleParameters": null, - "coldParticleParameters": null, - "fireParticleParameters": null, - "lightningParticleParameters": null, - "poisonParticleParameters": null, - "overrideCharacterShaderColors": false, - "firstCharacterShaderColor": { - "$type": "UnityEngine.Color, UnityEngine.CoreModule", - "r": 0.0, - "g": 0.0, - "b": 0.0, - "a": 0.0 - }, - "secondCharacterShaderColor": { - "$type": "UnityEngine.Color, UnityEngine.CoreModule", - "r": 0.0, - "g": 0.0, - "b": 0.0, - "a": 0.0 - }, - "timeToWaitBeforeApplyingShader": 0.5, - "timeToWaitBeforeRemovingShader": 0.5, - "possessive": false, - "amountOrigin": "None", - "baseAmount": 0, - "additiveAmount": false, - "sourceAbilityBonusMinValue": 1, - "subsequentOnRemoval": null, - "subsequentHasSavingThrow": false, - "subsequentSavingThrowAbilityScore": "Constitution", - "subsequentVariableForDC": "FrenzyExhaustionDC", - "subsequentDCIncrease": 5, - "effectFormsOnRemoved": [], - "forceBehavior": false, - "addBehavior": false, - "fearSource": false, - "battlePackage": null, - "explorationPackage": null, - "removedFromTheGame": false, - "permanentlyRemovedIfExtraPlanar": false, - "refundReceivedDamageWhenRemoved": false, - "followSourcePosition": false, - "disolveCharacterOnDeath": false, - "disolveParameters": { - "$type": "GraphicsCharacterDefinitions+DisolveParameters, Assembly-CSharp", - "color": { - "$type": "UnityEngine.Color, UnityEngine.CoreModule", - "r": 0.0, - "g": 0.0, - "b": 0.0, - "a": 0.0 - }, - "colorWidth": 0.0, - "noiseScale": 5.0, - "hueScale": 0.0, - "vertexOffset": 0.0, - "curve": { - "$type": "UnityEngine.AnimationCurve, UnityEngine.CoreModule" - }, - "startAfterDeathAnimation": false, - "duration": 0.0 - }, - "guiPresentation": { - "$type": "GuiPresentation, Assembly-CSharp", - "hidden": true, - "title": "Feature/&NoContentTitle", - "description": "Feature/&NoContentTitle", - "spriteReference": { - "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": null, - "m_SubObjectType": null - }, - "color": { - "$type": "UnityEngine.Color, UnityEngine.CoreModule", - "r": 1.0, - "g": 1.0, - "b": 1.0, - "a": 1.0 - }, - "symbolChar": "221E", - "sortOrder": 0, - "unusedInSolastaCOTM": false, - "usedInValleyDLC": false - }, - "contentCopyright": "UserContent", - "guid": "7b73b84d-697d-5018-9cff-85b0fba12033", - "contentPack": 9999, - "name": "ConditionCommandSpellSelf" -} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/Move_Approach.json b/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/Move_Approach.json index f880591ed8..2e549ada9d 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/Move_Approach.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/Move_Approach.json @@ -73,6 +73,28 @@ "name": "PenalizeFearSourceProximityAtPosition" }, "weight": 1.0 + }, + { + "$type": "TA.AI.WeightedConsiderationDescription, Assembly-CSharp", + "consideration": { + "$type": "TA.AI.ConsiderationDefinition, Assembly-CSharp", + "consideration": { + "$type": "TA.AI.ConsiderationDescription, Assembly-CSharp", + "considerationType": "DistanceFromMe", + "curve": { + "$type": "UnityEngine.AnimationCurve, UnityEngine.CoreModule" + }, + "stringParameter": "", + "floatParameter": 20.0, + "intParameter": 0, + "byteParameter": 0, + "boolParameter": false, + "boolSecParameter": false, + "boolTerParameter": false + }, + "name": "IsCloseFromMe" + }, + "weight": 0.95 } ] }, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerCommandSpell.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerCommandSpell.json deleted file mode 100644 index 2f8d3a5160..0000000000 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerCommandSpell.json +++ /dev/null @@ -1,202 +0,0 @@ -{ - "$type": "FeatureDefinitionPower, Assembly-CSharp", - "effectDescription": { - "$type": "EffectDescription, Assembly-CSharp", - "rangeType": "Self", - "rangeParameter": 0, - "halfDamageOnAMiss": false, - "hitAffinitiesByTargetTag": [], - "targetType": "Self", - "itemSelectionType": "Equiped", - "targetParameter": 1, - "targetParameter2": 2, - "emissiveBorder": "None", - "emissiveParameter": 1, - "requiresTargetProximity": false, - "targetProximityDistance": 6, - "targetExcludeCaster": false, - "canBePlacedOnCharacter": true, - "affectOnlyGround": false, - "targetFilteringMethod": "AllCharacterAndGadgets", - "targetFilteringTag": "No", - "requiresVisibilityForPosition": true, - "inviteOptionalAlly": false, - "slotTypes": [], - "recurrentEffect": "No", - "retargetAfterDeath": false, - "retargetActionType": "Bonus", - "poolFilterDiceNumber": 5, - "poolFilterDieType": "D8", - "trapRangeType": "Triggerer", - "targetConditionName": "", - "targetConditionAsset": null, - "targetSide": "Enemy", - "durationType": "Instantaneous", - "durationParameter": 1, - "endOfEffect": "EndOfTurn", - "hasSavingThrow": false, - "disableSavingThrowOnAllies": false, - "savingThrowAbility": "Dexterity", - "ignoreCover": false, - "grantedConditionOnSave": null, - "rollSaveOnlyIfRelevantForms": false, - "hasShoveRoll": false, - "createdByCharacter": false, - "difficultyClassComputation": "SpellCastingFeature", - "savingThrowDifficultyAbility": "Wisdom", - "fixedSavingThrowDifficultyClass": 15, - "savingThrowAffinitiesBySense": [], - "savingThrowAffinitiesByFamily": [], - "damageAffinitiesByFamily": [], - "advantageForEnemies": false, - "canBeDispersed": false, - "hasVelocity": false, - "velocityCellsPerRound": 2, - "velocityType": "AwayFromSourceOriginalPosition", - "restrictedCreatureFamilies": [], - "immuneCreatureFamilies": [], - "restrictedCharacterSizes": [], - "hasLimitedEffectPool": false, - "effectPoolAmount": 60, - "effectApplication": "All", - "effectFormFilters": [], - "effectForms": [], - "specialFormsDescription": "", - "effectAdvancement": { - "$type": "EffectAdvancement, Assembly-CSharp", - "effectIncrementMethod": "None", - "incrementMultiplier": 1, - "additionalTargetsPerIncrement": 0, - "additionalSubtargetsPerIncrement": 0, - "additionalDicePerIncrement": 0, - "additionalSpellLevelPerIncrement": 0, - "additionalSummonsPerIncrement": 0, - "additionalHPPerIncrement": 0, - "additionalTempHPPerIncrement": 0, - "additionalTargetCellsPerIncrement": 0, - "additionalItemBonus": 0, - "additionalWeaponDie": 0, - "alteredDuration": "None" - }, - "speedType": "Instant", - "speedParameter": 10.0, - "offsetImpactTimeBasedOnDistance": false, - "offsetImpactTimeBasedOnDistanceFactor": 0.1, - "offsetImpactTimePerTarget": 0.0, - "effectParticleParameters": { - "$type": "EffectParticleParameters, Assembly-CSharp", - "casterParticleReference": null, - "casterSelfParticleReference": null, - "casterQuickSpellParticleReference": null, - "targetParticleReference": null, - "effectParticleReference": null, - "effectSubTargetParticleReference": null, - "zoneParticleReference": null, - "beforeImpactParticleReference": null, - "impactParticleReference": null, - "activeEffectImpactParticleReference": null, - "activeEffectCellStartParticleReference": null, - "activeEffectCellParticleReference": null, - "activeEffectCellEndParticleReference": null, - "activeEffectSurfaceStartParticleReference": null, - "activeEffectSurfaceParticleReference": null, - "activeEffectSurfaceEndParticleReference": null, - "activeEffectSurfaceParticlePerIndex": "", - "activeEffectSurfaceParticlePerIndexCount": 0, - "emissiveBorderCellStartParticleReference": null, - "emissiveBorderCellParticleReference": null, - "emissiveBorderCellEndParticleReference": null, - "emissiveBorderSurfaceStartParticleReference": null, - "emissiveBorderSurfaceParticleReference": null, - "emissiveBorderSurfaceEndParticleReference": null, - "conditionStartParticleReference": null, - "conditionParticleReference": null, - "conditionEndParticleReference": null, - "forceApplyZoneParticle": false, - "applyEmissionColorOnWeapons": false, - "emissionColor": { - "$type": "UnityEngine.Color, UnityEngine.CoreModule", - "r": 0.0, - "g": 0.0, - "b": 0.0, - "a": 0.0 - }, - "emissionColorFadeInDuration": 0.0, - "emissionColorFadeOutDuration": 0.0 - }, - "effectAIParameters": { - "$type": "EffectAIParameters, Assembly-CSharp", - "aoeScoreMultiplier": 1.0, - "cooldownForCaster": 0, - "cooldownForBattle": 0, - "sortingScoreMultiplier": 1.0, - "dynamicCooldown": false - }, - "animationMagicEffect": "Animation0", - "lightCounterDispellsEffect": false, - "hideSavingThrowAnimation": false - }, - "delegatedToAction": false, - "surrogateToSpell": null, - "triggeredBySpecialMove": false, - "activationTime": "NoCost", - "autoActivationRequiredTargetSenseType": "None", - "autoActivationRequiredTargetCreatureTag": "", - "autoActivationPowerTag": "", - "triggeringPower": null, - "copyTargetingFromTriggeringPower": false, - "reactionContext": "None", - "damageTypes": [], - "reactionName": "", - "reactionActingCharacterParamIdx": 0, - "reactionAttackerParamIdx": -1, - "hasCastingFailure": false, - "castingSuccessComputation": "CasterLevel", - "canUseInDialog": false, - "disableIfConditionIsOwned": null, - "disableIfTargetConditionIsOwned": null, - "rechargeRate": "AtWill", - "costPerUse": 1, - "spellcastingFeature": null, - "usesDetermination": "Fixed", - "abilityScoreDetermination": "Explicit", - "usesAbilityScoreName": "Charisma", - "fixedUsesPerRecharge": 1, - "abilityScore": "Intelligence", - "attackHitComputation": "AbilityScore", - "fixedAttackHit": 0, - "abilityScoreBonusToAttack": false, - "proficiencyBonusToAttack": false, - "uniqueInstance": false, - "showCasting": true, - "shortTitleOverride": "", - "overriddenPower": null, - "includeBaseDescription": false, - "guiPresentation": { - "$type": "GuiPresentation, Assembly-CSharp", - "hidden": true, - "title": "Feature/&NoContentTitle", - "description": "Feature/&NoContentTitle", - "spriteReference": { - "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": null, - "m_SubObjectType": null - }, - "color": { - "$type": "UnityEngine.Color, UnityEngine.CoreModule", - "r": 1.0, - "g": 1.0, - "b": 1.0, - "a": 1.0 - }, - "symbolChar": "221E", - "sortOrder": 0, - "unusedInSolastaCOTM": false, - "usedInValleyDLC": false - }, - "contentCopyright": "UserContent", - "guid": "05222420-c747-5093-9ba6-b5995338b633", - "contentPack": 9999, - "name": "PowerCommandSpell" -} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/MonsterDefinition/InnovationWeaponAdvancedSteelDefender.json b/Diagnostics/UnfinishedBusinessBlueprints/MonsterDefinition/InnovationWeaponAdvancedSteelDefender.json index f71e0da190..4943736ac8 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/MonsterDefinition/InnovationWeaponAdvancedSteelDefender.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/MonsterDefinition/InnovationWeaponAdvancedSteelDefender.json @@ -53,7 +53,7 @@ "maxLegendaryActionPoints": 3, "differentActionEachTurn": false, "legendaryActionOptions": [], - "defaultBattleDecisionPackage": "Definition:DefaultMeleeWithBackupRangeDecisions:36bb3688d84582249bf0f1c85064ad10", + "defaultBattleDecisionPackage": null, "threatEvaluatorDefinition": null, "languages": [], "audioSwitches": [], diff --git a/Diagnostics/UnfinishedBusinessBlueprints/MonsterDefinition/InnovationWeaponSteelDefender.json b/Diagnostics/UnfinishedBusinessBlueprints/MonsterDefinition/InnovationWeaponSteelDefender.json index 089004ef48..b32d902f9d 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/MonsterDefinition/InnovationWeaponSteelDefender.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/MonsterDefinition/InnovationWeaponSteelDefender.json @@ -53,7 +53,7 @@ "maxLegendaryActionPoints": 3, "differentActionEachTurn": false, "legendaryActionOptions": [], - "defaultBattleDecisionPackage": "Definition:DefaultMeleeWithBackupRangeDecisions:36bb3688d84582249bf0f1c85064ad10", + "defaultBattleDecisionPackage": null, "threatEvaluatorDefinition": null, "languages": [], "audioSwitches": [], diff --git a/Diagnostics/UnfinishedBusinessBlueprints/MonsterDefinition/OwlFamiliar.json b/Diagnostics/UnfinishedBusinessBlueprints/MonsterDefinition/OwlFamiliar.json index 5354075751..4a2acb479f 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/MonsterDefinition/OwlFamiliar.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/MonsterDefinition/OwlFamiliar.json @@ -40,7 +40,7 @@ "maxLegendaryActionPoints": 3, "differentActionEachTurn": false, "legendaryActionOptions": [], - "defaultBattleDecisionPackage": "Definition:DefaultSupportCasterWithBackupAttacksDecisions:f99448e8f4c2d9d478837c543e3e205f", + "defaultBattleDecisionPackage": "Definition:DefaultFlyingBeastWithBackupRangeCombatDecisions:2de7c4b469d4b984b80c0dbb2f82acab", "threatEvaluatorDefinition": null, "languages": [], "audioSwitches": [], diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpell.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpell.json index b25fe5d203..234020c512 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpell.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpell.json @@ -1,7 +1,12 @@ { "$type": "SpellDefinition, Assembly-CSharp", - "spellsBundle": false, - "subspellsList": [], + "spellsBundle": true, + "subspellsList": [ + "Definition:PowerCommandSpellApproach:18ae3db8-2589-5b95-b795-4f54e5aae89e", + "Definition:PowerCommandSpellFlee:7920093b-60b8-5b72-8217-8e863e38bdea", + "Definition:PowerCommandSpellGrovel:35f18407-8050-5283-ba7f-3a5863aa555e", + "Definition:PowerCommandSpellHalt:ba84cf9e-4373-5a11-af15-41395a314cde" + ], "compactSubspellsTooltip": false, "implemented": true, "schoolOfMagic": "SchoolEnchantment", @@ -99,33 +104,6 @@ }, "hasFilterId": false, "filterId": 0 - }, - { - "$type": "EffectForm, Assembly-CSharp", - "formType": "Condition", - "addBonusMode": "None", - "applyLevel": "No", - "levelType": "ClassLevel", - "levelMultiplier": 1, - "diceByLevelTable": [], - "createdByCharacter": true, - "createdByCondition": false, - "hasSavingThrow": false, - "savingThrowAffinity": "None", - "dcModifier": 0, - "canSaveToCancel": false, - "saveOccurence": "EndOfTurn", - "conditionForm": { - "$type": "ConditionForm, Assembly-CSharp", - "conditionDefinitionName": "ConditionCommandSpellSelf", - "conditionDefinition": "Definition:ConditionCommandSpellSelf:7b73b84d-697d-5018-9cff-85b0fba12033", - "operation": "Add", - "conditionsList": [], - "applyToSelf": true, - "forceOnSelf": false - }, - "hasFilterId": false, - "filterId": 0 } ], "specialFormsDescription": "", diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerCommandSpellApproach.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/PowerCommandSpellApproach.json similarity index 86% rename from Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerCommandSpellApproach.json rename to Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/PowerCommandSpellApproach.json index d831ee5c13..356e0a3bc3 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerCommandSpellApproach.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/PowerCommandSpellApproach.json @@ -1,5 +1,17 @@ { - "$type": "FeatureDefinitionPowerSharedPool, SolastaUnfinishedBusiness", + "$type": "SpellDefinition, Assembly-CSharp", + "spellsBundle": false, + "subspellsList": [], + "compactSubspellsTooltip": false, + "implemented": true, + "schoolOfMagic": "SchoolEnchantment", + "spellLevel": 1, + "ritual": false, + "uniqueInstance": false, + "castingTime": "Action", + "reactionContext": "None", + "ritualCastingTime": "Action", + "requiresConcentration": false, "effectDescription": { "$type": "EffectDescription, Assembly-CSharp", "rangeType": "Distance", @@ -34,17 +46,17 @@ "durationType": "Instantaneous", "durationParameter": 1, "endOfEffect": "EndOfTurn", - "hasSavingThrow": false, + "hasSavingThrow": true, "disableSavingThrowOnAllies": false, - "savingThrowAbility": "Dexterity", - "ignoreCover": false, + "savingThrowAbility": "Wisdom", + "ignoreCover": true, "grantedConditionOnSave": null, "rollSaveOnlyIfRelevantForms": false, "hasShoveRoll": false, "createdByCharacter": true, "difficultyClassComputation": "SpellCastingFeature", "savingThrowDifficultyAbility": "Wisdom", - "fixedSavingThrowDifficultyClass": 15, + "fixedSavingThrowDifficultyClass": 10, "savingThrowAffinitiesBySense": [], "savingThrowAffinitiesByFamily": [], "damageAffinitiesByFamily": [], @@ -92,9 +104,9 @@ "specialFormsDescription": "", "effectAdvancement": { "$type": "EffectAdvancement, Assembly-CSharp", - "effectIncrementMethod": "None", + "effectIncrementMethod": "PerAdditionalSlotLevel", "incrementMultiplier": 1, - "additionalTargetsPerIncrement": 0, + "additionalTargetsPerIncrement": 1, "additionalSubtargetsPerIncrement": 0, "additionalDicePerIncrement": 0, "additionalSpellLevelPerIncrement": 0, @@ -115,7 +127,7 @@ "$type": "EffectParticleParameters, Assembly-CSharp", "casterParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "81560ac3813217d4d9fd281d5e73c234", + "m_AssetGUID": "623efe782aaa3a84fbd91053c5fd1b39", "m_SubObjectName": "", "m_SubObjectType": "" }, @@ -139,7 +151,7 @@ }, "effectParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", + "m_AssetGUID": "19f4a5c35fbee93479226bd045a5ec1f", "m_SubObjectName": "", "m_SubObjectType": "" }, @@ -255,13 +267,13 @@ }, "conditionParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", + "m_AssetGUID": "499a6891e29b20d44a372c4728e9d26b", "m_SubObjectName": "", "m_SubObjectType": "" }, "conditionEndParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", + "m_AssetGUID": "5e46102198fad554587b73639eee3b36", "m_SubObjectName": "", "m_SubObjectType": "" }, @@ -289,42 +301,21 @@ "lightCounterDispellsEffect": false, "hideSavingThrowAnimation": false }, - "delegatedToAction": false, - "surrogateToSpell": null, - "triggeredBySpecialMove": false, - "activationTime": "NoCost", - "autoActivationRequiredTargetSenseType": "None", - "autoActivationRequiredTargetCreatureTag": "", - "autoActivationPowerTag": "", - "triggeringPower": null, - "copyTargetingFromTriggeringPower": false, - "reactionContext": "None", - "damageTypes": [], - "reactionName": "", - "reactionActingCharacterParamIdx": 0, - "reactionAttackerParamIdx": -1, - "hasCastingFailure": false, - "castingSuccessComputation": "CasterLevel", - "canUseInDialog": false, - "disableIfConditionIsOwned": null, - "disableIfTargetConditionIsOwned": null, - "rechargeRate": "AtWill", - "costPerUse": 1, - "spellcastingFeature": null, - "usesDetermination": "Fixed", - "abilityScoreDetermination": "Explicit", - "usesAbilityScoreName": "Charisma", - "fixedUsesPerRecharge": 1, - "abilityScore": "Intelligence", - "attackHitComputation": "AbilityScore", - "fixedAttackHit": 0, - "abilityScoreBonusToAttack": false, - "proficiencyBonusToAttack": false, - "uniqueInstance": false, - "showCasting": false, - "shortTitleOverride": "", - "overriddenPower": null, - "includeBaseDescription": false, + "aiParameters": { + "$type": "SpellAIParameters, Assembly-CSharp", + "learnPriority": "Low", + "preparePriority": "Low" + }, + "concentrationAction": "None", + "verboseComponent": true, + "somaticComponent": false, + "materialComponentType": "Mundane", + "specificMaterialComponentTag": "Diamond", + "specificMaterialComponentCostGp": 100, + "specificMaterialComponentConsumed": true, + "terminateOnItemUnequip": false, + "displayConditionDuration": false, + "vocalSpellSemeType": "Attack", "guiPresentation": { "$type": "GuiPresentation, Assembly-CSharp", "hidden": false, @@ -332,9 +323,9 @@ "description": "Feature/&PowerCommandSpellApproachDescription", "spriteReference": { "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": null, - "m_SubObjectType": null + "m_AssetGUID": "6edc0b78da56b1e4b94c3d7fb6c96dec", + "m_SubObjectName": "Command", + "m_SubObjectType": "UnityEngine.Sprite, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" }, "color": { "$type": "UnityEngine.Color, UnityEngine.CoreModule", diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerCommandSpellFlee.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/PowerCommandSpellFlee.json similarity index 86% rename from Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerCommandSpellFlee.json rename to Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/PowerCommandSpellFlee.json index a6ea50c236..1f4cf60565 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerCommandSpellFlee.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/PowerCommandSpellFlee.json @@ -1,5 +1,17 @@ { - "$type": "FeatureDefinitionPowerSharedPool, SolastaUnfinishedBusiness", + "$type": "SpellDefinition, Assembly-CSharp", + "spellsBundle": false, + "subspellsList": [], + "compactSubspellsTooltip": false, + "implemented": true, + "schoolOfMagic": "SchoolEnchantment", + "spellLevel": 1, + "ritual": false, + "uniqueInstance": false, + "castingTime": "Action", + "reactionContext": "None", + "ritualCastingTime": "Action", + "requiresConcentration": false, "effectDescription": { "$type": "EffectDescription, Assembly-CSharp", "rangeType": "Distance", @@ -34,17 +46,17 @@ "durationType": "Round", "durationParameter": 1, "endOfEffect": "StartOfTurn", - "hasSavingThrow": false, + "hasSavingThrow": true, "disableSavingThrowOnAllies": false, - "savingThrowAbility": "Dexterity", - "ignoreCover": false, + "savingThrowAbility": "Wisdom", + "ignoreCover": true, "grantedConditionOnSave": null, "rollSaveOnlyIfRelevantForms": false, "hasShoveRoll": false, "createdByCharacter": true, "difficultyClassComputation": "SpellCastingFeature", "savingThrowDifficultyAbility": "Wisdom", - "fixedSavingThrowDifficultyClass": 15, + "fixedSavingThrowDifficultyClass": 10, "savingThrowAffinitiesBySense": [], "savingThrowAffinitiesByFamily": [], "damageAffinitiesByFamily": [], @@ -92,9 +104,9 @@ "specialFormsDescription": "", "effectAdvancement": { "$type": "EffectAdvancement, Assembly-CSharp", - "effectIncrementMethod": "None", + "effectIncrementMethod": "PerAdditionalSlotLevel", "incrementMultiplier": 1, - "additionalTargetsPerIncrement": 0, + "additionalTargetsPerIncrement": 1, "additionalSubtargetsPerIncrement": 0, "additionalDicePerIncrement": 0, "additionalSpellLevelPerIncrement": 0, @@ -115,7 +127,7 @@ "$type": "EffectParticleParameters, Assembly-CSharp", "casterParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "81560ac3813217d4d9fd281d5e73c234", + "m_AssetGUID": "623efe782aaa3a84fbd91053c5fd1b39", "m_SubObjectName": "", "m_SubObjectType": "" }, @@ -139,7 +151,7 @@ }, "effectParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", + "m_AssetGUID": "19f4a5c35fbee93479226bd045a5ec1f", "m_SubObjectName": "", "m_SubObjectType": "" }, @@ -255,13 +267,13 @@ }, "conditionParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", + "m_AssetGUID": "499a6891e29b20d44a372c4728e9d26b", "m_SubObjectName": "", "m_SubObjectType": "" }, "conditionEndParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", + "m_AssetGUID": "5e46102198fad554587b73639eee3b36", "m_SubObjectName": "", "m_SubObjectType": "" }, @@ -289,42 +301,21 @@ "lightCounterDispellsEffect": false, "hideSavingThrowAnimation": false }, - "delegatedToAction": false, - "surrogateToSpell": null, - "triggeredBySpecialMove": false, - "activationTime": "NoCost", - "autoActivationRequiredTargetSenseType": "None", - "autoActivationRequiredTargetCreatureTag": "", - "autoActivationPowerTag": "", - "triggeringPower": null, - "copyTargetingFromTriggeringPower": false, - "reactionContext": "None", - "damageTypes": [], - "reactionName": "", - "reactionActingCharacterParamIdx": 0, - "reactionAttackerParamIdx": -1, - "hasCastingFailure": false, - "castingSuccessComputation": "CasterLevel", - "canUseInDialog": false, - "disableIfConditionIsOwned": null, - "disableIfTargetConditionIsOwned": null, - "rechargeRate": "AtWill", - "costPerUse": 1, - "spellcastingFeature": null, - "usesDetermination": "Fixed", - "abilityScoreDetermination": "Explicit", - "usesAbilityScoreName": "Charisma", - "fixedUsesPerRecharge": 1, - "abilityScore": "Intelligence", - "attackHitComputation": "AbilityScore", - "fixedAttackHit": 0, - "abilityScoreBonusToAttack": false, - "proficiencyBonusToAttack": false, - "uniqueInstance": false, - "showCasting": false, - "shortTitleOverride": "", - "overriddenPower": null, - "includeBaseDescription": false, + "aiParameters": { + "$type": "SpellAIParameters, Assembly-CSharp", + "learnPriority": "Low", + "preparePriority": "Low" + }, + "concentrationAction": "None", + "verboseComponent": true, + "somaticComponent": false, + "materialComponentType": "Mundane", + "specificMaterialComponentTag": "Diamond", + "specificMaterialComponentCostGp": 100, + "specificMaterialComponentConsumed": true, + "terminateOnItemUnequip": false, + "displayConditionDuration": false, + "vocalSpellSemeType": "Attack", "guiPresentation": { "$type": "GuiPresentation, Assembly-CSharp", "hidden": false, @@ -332,9 +323,9 @@ "description": "Feature/&PowerCommandSpellFleeDescription", "spriteReference": { "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": null, - "m_SubObjectType": null + "m_AssetGUID": "6edc0b78da56b1e4b94c3d7fb6c96dec", + "m_SubObjectName": "Command", + "m_SubObjectType": "UnityEngine.Sprite, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" }, "color": { "$type": "UnityEngine.Color, UnityEngine.CoreModule", diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerCommandSpellGrovel.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/PowerCommandSpellGrovel.json similarity index 86% rename from Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerCommandSpellGrovel.json rename to Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/PowerCommandSpellGrovel.json index 9028d03538..80960a3868 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerCommandSpellGrovel.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/PowerCommandSpellGrovel.json @@ -1,5 +1,17 @@ { - "$type": "FeatureDefinitionPowerSharedPool, SolastaUnfinishedBusiness", + "$type": "SpellDefinition, Assembly-CSharp", + "spellsBundle": false, + "subspellsList": [], + "compactSubspellsTooltip": false, + "implemented": true, + "schoolOfMagic": "SchoolEnchantment", + "spellLevel": 1, + "ritual": false, + "uniqueInstance": false, + "castingTime": "Action", + "reactionContext": "None", + "ritualCastingTime": "Action", + "requiresConcentration": false, "effectDescription": { "$type": "EffectDescription, Assembly-CSharp", "rangeType": "Distance", @@ -34,17 +46,17 @@ "durationType": "Instantaneous", "durationParameter": 1, "endOfEffect": "EndOfTurn", - "hasSavingThrow": false, + "hasSavingThrow": true, "disableSavingThrowOnAllies": false, - "savingThrowAbility": "Dexterity", - "ignoreCover": false, + "savingThrowAbility": "Wisdom", + "ignoreCover": true, "grantedConditionOnSave": null, "rollSaveOnlyIfRelevantForms": false, "hasShoveRoll": false, "createdByCharacter": true, "difficultyClassComputation": "SpellCastingFeature", "savingThrowDifficultyAbility": "Wisdom", - "fixedSavingThrowDifficultyClass": 15, + "fixedSavingThrowDifficultyClass": 10, "savingThrowAffinitiesBySense": [], "savingThrowAffinitiesByFamily": [], "damageAffinitiesByFamily": [], @@ -92,9 +104,9 @@ "specialFormsDescription": "", "effectAdvancement": { "$type": "EffectAdvancement, Assembly-CSharp", - "effectIncrementMethod": "None", + "effectIncrementMethod": "PerAdditionalSlotLevel", "incrementMultiplier": 1, - "additionalTargetsPerIncrement": 0, + "additionalTargetsPerIncrement": 1, "additionalSubtargetsPerIncrement": 0, "additionalDicePerIncrement": 0, "additionalSpellLevelPerIncrement": 0, @@ -115,7 +127,7 @@ "$type": "EffectParticleParameters, Assembly-CSharp", "casterParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "81560ac3813217d4d9fd281d5e73c234", + "m_AssetGUID": "623efe782aaa3a84fbd91053c5fd1b39", "m_SubObjectName": "", "m_SubObjectType": "" }, @@ -139,7 +151,7 @@ }, "effectParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", + "m_AssetGUID": "19f4a5c35fbee93479226bd045a5ec1f", "m_SubObjectName": "", "m_SubObjectType": "" }, @@ -255,13 +267,13 @@ }, "conditionParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", + "m_AssetGUID": "499a6891e29b20d44a372c4728e9d26b", "m_SubObjectName": "", "m_SubObjectType": "" }, "conditionEndParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", + "m_AssetGUID": "5e46102198fad554587b73639eee3b36", "m_SubObjectName": "", "m_SubObjectType": "" }, @@ -289,42 +301,21 @@ "lightCounterDispellsEffect": false, "hideSavingThrowAnimation": false }, - "delegatedToAction": false, - "surrogateToSpell": null, - "triggeredBySpecialMove": false, - "activationTime": "NoCost", - "autoActivationRequiredTargetSenseType": "None", - "autoActivationRequiredTargetCreatureTag": "", - "autoActivationPowerTag": "", - "triggeringPower": null, - "copyTargetingFromTriggeringPower": false, - "reactionContext": "None", - "damageTypes": [], - "reactionName": "", - "reactionActingCharacterParamIdx": 0, - "reactionAttackerParamIdx": -1, - "hasCastingFailure": false, - "castingSuccessComputation": "CasterLevel", - "canUseInDialog": false, - "disableIfConditionIsOwned": null, - "disableIfTargetConditionIsOwned": null, - "rechargeRate": "AtWill", - "costPerUse": 1, - "spellcastingFeature": null, - "usesDetermination": "Fixed", - "abilityScoreDetermination": "Explicit", - "usesAbilityScoreName": "Charisma", - "fixedUsesPerRecharge": 1, - "abilityScore": "Intelligence", - "attackHitComputation": "AbilityScore", - "fixedAttackHit": 0, - "abilityScoreBonusToAttack": false, - "proficiencyBonusToAttack": false, - "uniqueInstance": false, - "showCasting": false, - "shortTitleOverride": "", - "overriddenPower": null, - "includeBaseDescription": false, + "aiParameters": { + "$type": "SpellAIParameters, Assembly-CSharp", + "learnPriority": "Low", + "preparePriority": "Low" + }, + "concentrationAction": "None", + "verboseComponent": true, + "somaticComponent": false, + "materialComponentType": "Mundane", + "specificMaterialComponentTag": "Diamond", + "specificMaterialComponentCostGp": 100, + "specificMaterialComponentConsumed": true, + "terminateOnItemUnequip": false, + "displayConditionDuration": false, + "vocalSpellSemeType": "Attack", "guiPresentation": { "$type": "GuiPresentation, Assembly-CSharp", "hidden": false, @@ -332,9 +323,9 @@ "description": "Feature/&PowerCommandSpellGrovelDescription", "spriteReference": { "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": null, - "m_SubObjectType": null + "m_AssetGUID": "6edc0b78da56b1e4b94c3d7fb6c96dec", + "m_SubObjectName": "Command", + "m_SubObjectType": "UnityEngine.Sprite, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" }, "color": { "$type": "UnityEngine.Color, UnityEngine.CoreModule", diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerCommandSpellHalt.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/PowerCommandSpellHalt.json similarity index 86% rename from Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerCommandSpellHalt.json rename to Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/PowerCommandSpellHalt.json index ee04aa5c39..7b1fad09b8 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerCommandSpellHalt.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/PowerCommandSpellHalt.json @@ -1,5 +1,17 @@ { - "$type": "FeatureDefinitionPowerSharedPool, SolastaUnfinishedBusiness", + "$type": "SpellDefinition, Assembly-CSharp", + "spellsBundle": false, + "subspellsList": [], + "compactSubspellsTooltip": false, + "implemented": true, + "schoolOfMagic": "SchoolEnchantment", + "spellLevel": 1, + "ritual": false, + "uniqueInstance": false, + "castingTime": "Action", + "reactionContext": "None", + "ritualCastingTime": "Action", + "requiresConcentration": false, "effectDescription": { "$type": "EffectDescription, Assembly-CSharp", "rangeType": "Distance", @@ -34,17 +46,17 @@ "durationType": "Round", "durationParameter": 1, "endOfEffect": "StartOfTurn", - "hasSavingThrow": false, + "hasSavingThrow": true, "disableSavingThrowOnAllies": false, - "savingThrowAbility": "Dexterity", - "ignoreCover": false, + "savingThrowAbility": "Wisdom", + "ignoreCover": true, "grantedConditionOnSave": null, "rollSaveOnlyIfRelevantForms": false, "hasShoveRoll": false, "createdByCharacter": true, "difficultyClassComputation": "SpellCastingFeature", "savingThrowDifficultyAbility": "Wisdom", - "fixedSavingThrowDifficultyClass": 15, + "fixedSavingThrowDifficultyClass": 10, "savingThrowAffinitiesBySense": [], "savingThrowAffinitiesByFamily": [], "damageAffinitiesByFamily": [], @@ -92,9 +104,9 @@ "specialFormsDescription": "", "effectAdvancement": { "$type": "EffectAdvancement, Assembly-CSharp", - "effectIncrementMethod": "None", + "effectIncrementMethod": "PerAdditionalSlotLevel", "incrementMultiplier": 1, - "additionalTargetsPerIncrement": 0, + "additionalTargetsPerIncrement": 1, "additionalSubtargetsPerIncrement": 0, "additionalDicePerIncrement": 0, "additionalSpellLevelPerIncrement": 0, @@ -115,7 +127,7 @@ "$type": "EffectParticleParameters, Assembly-CSharp", "casterParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "81560ac3813217d4d9fd281d5e73c234", + "m_AssetGUID": "623efe782aaa3a84fbd91053c5fd1b39", "m_SubObjectName": "", "m_SubObjectType": "" }, @@ -139,7 +151,7 @@ }, "effectParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", + "m_AssetGUID": "19f4a5c35fbee93479226bd045a5ec1f", "m_SubObjectName": "", "m_SubObjectType": "" }, @@ -255,13 +267,13 @@ }, "conditionParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", + "m_AssetGUID": "499a6891e29b20d44a372c4728e9d26b", "m_SubObjectName": "", "m_SubObjectType": "" }, "conditionEndParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", + "m_AssetGUID": "5e46102198fad554587b73639eee3b36", "m_SubObjectName": "", "m_SubObjectType": "" }, @@ -289,42 +301,21 @@ "lightCounterDispellsEffect": false, "hideSavingThrowAnimation": false }, - "delegatedToAction": false, - "surrogateToSpell": null, - "triggeredBySpecialMove": false, - "activationTime": "NoCost", - "autoActivationRequiredTargetSenseType": "None", - "autoActivationRequiredTargetCreatureTag": "", - "autoActivationPowerTag": "", - "triggeringPower": null, - "copyTargetingFromTriggeringPower": false, - "reactionContext": "None", - "damageTypes": [], - "reactionName": "", - "reactionActingCharacterParamIdx": 0, - "reactionAttackerParamIdx": -1, - "hasCastingFailure": false, - "castingSuccessComputation": "CasterLevel", - "canUseInDialog": false, - "disableIfConditionIsOwned": null, - "disableIfTargetConditionIsOwned": null, - "rechargeRate": "AtWill", - "costPerUse": 1, - "spellcastingFeature": null, - "usesDetermination": "Fixed", - "abilityScoreDetermination": "Explicit", - "usesAbilityScoreName": "Charisma", - "fixedUsesPerRecharge": 1, - "abilityScore": "Intelligence", - "attackHitComputation": "AbilityScore", - "fixedAttackHit": 0, - "abilityScoreBonusToAttack": false, - "proficiencyBonusToAttack": false, - "uniqueInstance": false, - "showCasting": false, - "shortTitleOverride": "", - "overriddenPower": null, - "includeBaseDescription": false, + "aiParameters": { + "$type": "SpellAIParameters, Assembly-CSharp", + "learnPriority": "Low", + "preparePriority": "Low" + }, + "concentrationAction": "None", + "verboseComponent": true, + "somaticComponent": false, + "materialComponentType": "Mundane", + "specificMaterialComponentTag": "Diamond", + "specificMaterialComponentCostGp": 100, + "specificMaterialComponentConsumed": true, + "terminateOnItemUnequip": false, + "displayConditionDuration": false, + "vocalSpellSemeType": "Attack", "guiPresentation": { "$type": "GuiPresentation, Assembly-CSharp", "hidden": false, @@ -332,9 +323,9 @@ "description": "Feature/&PowerCommandSpellHaltDescription", "spriteReference": { "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": null, - "m_SubObjectType": null + "m_AssetGUID": "6edc0b78da56b1e4b94c3d7fb6c96dec", + "m_SubObjectName": "Command", + "m_SubObjectType": "UnityEngine.Sprite, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" }, "color": { "$type": "UnityEngine.Color, UnityEngine.CoreModule", diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/SpellPowerCommandSpell.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/SpellPowerCommandSpell.json deleted file mode 100644 index b804c5f18b..0000000000 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/SpellPowerCommandSpell.json +++ /dev/null @@ -1,198 +0,0 @@ -{ - "$type": "SpellDefinition, Assembly-CSharp", - "spellsBundle": false, - "subspellsList": [ - "Definition:SpellPowerCommandSpellApproach:152fd62b-c5e0-567a-a035-7f4f39023003", - "Definition:SpellPowerCommandSpellFlee:8bd2bff0-c47d-5c51-9c83-82f46e5531bd", - "Definition:SpellPowerCommandSpellGrovel:41423887-4200-5abf-b070-c71f30076690", - "Definition:SpellPowerCommandSpellHalt:22b80e7c-5b05-58a6-94cb-6ff9e7db04bd" - ], - "compactSubspellsTooltip": false, - "implemented": true, - "schoolOfMagic": "SchoolEvocation", - "spellLevel": 0, - "ritual": false, - "uniqueInstance": false, - "castingTime": "Action", - "reactionContext": "None", - "ritualCastingTime": "Action", - "requiresConcentration": false, - "effectDescription": { - "$type": "EffectDescription, Assembly-CSharp", - "rangeType": "Self", - "rangeParameter": 0, - "halfDamageOnAMiss": false, - "hitAffinitiesByTargetTag": [], - "targetType": "Self", - "itemSelectionType": "Equiped", - "targetParameter": 1, - "targetParameter2": 2, - "emissiveBorder": "None", - "emissiveParameter": 1, - "requiresTargetProximity": false, - "targetProximityDistance": 6, - "targetExcludeCaster": false, - "canBePlacedOnCharacter": true, - "affectOnlyGround": false, - "targetFilteringMethod": "AllCharacterAndGadgets", - "targetFilteringTag": "No", - "requiresVisibilityForPosition": true, - "inviteOptionalAlly": false, - "slotTypes": [], - "recurrentEffect": "No", - "retargetAfterDeath": false, - "retargetActionType": "Bonus", - "poolFilterDiceNumber": 5, - "poolFilterDieType": "D8", - "trapRangeType": "Triggerer", - "targetConditionName": "", - "targetConditionAsset": null, - "targetSide": "Enemy", - "durationType": "Instantaneous", - "durationParameter": 1, - "endOfEffect": "EndOfTurn", - "hasSavingThrow": false, - "disableSavingThrowOnAllies": false, - "savingThrowAbility": "Dexterity", - "ignoreCover": false, - "grantedConditionOnSave": null, - "rollSaveOnlyIfRelevantForms": false, - "hasShoveRoll": false, - "createdByCharacter": false, - "difficultyClassComputation": "SpellCastingFeature", - "savingThrowDifficultyAbility": "Wisdom", - "fixedSavingThrowDifficultyClass": 15, - "savingThrowAffinitiesBySense": [], - "savingThrowAffinitiesByFamily": [], - "damageAffinitiesByFamily": [], - "advantageForEnemies": false, - "canBeDispersed": false, - "hasVelocity": false, - "velocityCellsPerRound": 2, - "velocityType": "AwayFromSourceOriginalPosition", - "restrictedCreatureFamilies": [], - "immuneCreatureFamilies": [], - "restrictedCharacterSizes": [], - "hasLimitedEffectPool": false, - "effectPoolAmount": 60, - "effectApplication": "All", - "effectFormFilters": [], - "effectForms": [], - "specialFormsDescription": "", - "effectAdvancement": { - "$type": "EffectAdvancement, Assembly-CSharp", - "effectIncrementMethod": "None", - "incrementMultiplier": 1, - "additionalTargetsPerIncrement": 0, - "additionalSubtargetsPerIncrement": 0, - "additionalDicePerIncrement": 0, - "additionalSpellLevelPerIncrement": 0, - "additionalSummonsPerIncrement": 0, - "additionalHPPerIncrement": 0, - "additionalTempHPPerIncrement": 0, - "additionalTargetCellsPerIncrement": 0, - "additionalItemBonus": 0, - "additionalWeaponDie": 0, - "alteredDuration": "None" - }, - "speedType": "Instant", - "speedParameter": 10.0, - "offsetImpactTimeBasedOnDistance": false, - "offsetImpactTimeBasedOnDistanceFactor": 0.1, - "offsetImpactTimePerTarget": 0.0, - "effectParticleParameters": { - "$type": "EffectParticleParameters, Assembly-CSharp", - "casterParticleReference": null, - "casterSelfParticleReference": null, - "casterQuickSpellParticleReference": null, - "targetParticleReference": null, - "effectParticleReference": null, - "effectSubTargetParticleReference": null, - "zoneParticleReference": null, - "beforeImpactParticleReference": null, - "impactParticleReference": null, - "activeEffectImpactParticleReference": null, - "activeEffectCellStartParticleReference": null, - "activeEffectCellParticleReference": null, - "activeEffectCellEndParticleReference": null, - "activeEffectSurfaceStartParticleReference": null, - "activeEffectSurfaceParticleReference": null, - "activeEffectSurfaceEndParticleReference": null, - "activeEffectSurfaceParticlePerIndex": "", - "activeEffectSurfaceParticlePerIndexCount": 0, - "emissiveBorderCellStartParticleReference": null, - "emissiveBorderCellParticleReference": null, - "emissiveBorderCellEndParticleReference": null, - "emissiveBorderSurfaceStartParticleReference": null, - "emissiveBorderSurfaceParticleReference": null, - "emissiveBorderSurfaceEndParticleReference": null, - "conditionStartParticleReference": null, - "conditionParticleReference": null, - "conditionEndParticleReference": null, - "forceApplyZoneParticle": false, - "applyEmissionColorOnWeapons": false, - "emissionColor": { - "$type": "UnityEngine.Color, UnityEngine.CoreModule", - "r": 0.0, - "g": 0.0, - "b": 0.0, - "a": 0.0 - }, - "emissionColorFadeInDuration": 0.0, - "emissionColorFadeOutDuration": 0.0 - }, - "effectAIParameters": { - "$type": "EffectAIParameters, Assembly-CSharp", - "aoeScoreMultiplier": 1.0, - "cooldownForCaster": 0, - "cooldownForBattle": 0, - "sortingScoreMultiplier": 1.0, - "dynamicCooldown": false - }, - "animationMagicEffect": "Animation0", - "lightCounterDispellsEffect": false, - "hideSavingThrowAnimation": false - }, - "aiParameters": { - "$type": "SpellAIParameters, Assembly-CSharp", - "learnPriority": "Low", - "preparePriority": "Low" - }, - "concentrationAction": "None", - "verboseComponent": true, - "somaticComponent": true, - "materialComponentType": "Mundane", - "specificMaterialComponentTag": "Diamond", - "specificMaterialComponentCostGp": 100, - "specificMaterialComponentConsumed": true, - "terminateOnItemUnequip": false, - "displayConditionDuration": false, - "vocalSpellSemeType": "None", - "guiPresentation": { - "$type": "GuiPresentation, Assembly-CSharp", - "hidden": true, - "title": "Feature/&NoContentTitle", - "description": "Feature/&NoContentTitle", - "spriteReference": { - "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": null, - "m_SubObjectType": null - }, - "color": { - "$type": "UnityEngine.Color, UnityEngine.CoreModule", - "r": 1.0, - "g": 1.0, - "b": 1.0, - "a": 1.0 - }, - "symbolChar": "221E", - "sortOrder": 0, - "unusedInSolastaCOTM": false, - "usedInValleyDLC": false - }, - "contentCopyright": "UserContent", - "guid": "af1672a4-ce02-5b90-a2ee-e34669a559e0", - "contentPack": 9999, - "name": "SpellPowerCommandSpell" -} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/SpellPowerCommandSpellApproach.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/SpellPowerCommandSpellApproach.json deleted file mode 100644 index 304ea03518..0000000000 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/SpellPowerCommandSpellApproach.json +++ /dev/null @@ -1,193 +0,0 @@ -{ - "$type": "SpellDefinition, Assembly-CSharp", - "spellsBundle": false, - "subspellsList": [], - "compactSubspellsTooltip": false, - "implemented": true, - "schoolOfMagic": "SchoolEvocation", - "spellLevel": 0, - "ritual": false, - "uniqueInstance": false, - "castingTime": "Action", - "reactionContext": "None", - "ritualCastingTime": "Action", - "requiresConcentration": false, - "effectDescription": { - "$type": "EffectDescription, Assembly-CSharp", - "rangeType": "Self", - "rangeParameter": 0, - "halfDamageOnAMiss": false, - "hitAffinitiesByTargetTag": [], - "targetType": "Self", - "itemSelectionType": "Equiped", - "targetParameter": 1, - "targetParameter2": 2, - "emissiveBorder": "None", - "emissiveParameter": 1, - "requiresTargetProximity": false, - "targetProximityDistance": 6, - "targetExcludeCaster": false, - "canBePlacedOnCharacter": true, - "affectOnlyGround": false, - "targetFilteringMethod": "AllCharacterAndGadgets", - "targetFilteringTag": "No", - "requiresVisibilityForPosition": true, - "inviteOptionalAlly": false, - "slotTypes": [], - "recurrentEffect": "No", - "retargetAfterDeath": false, - "retargetActionType": "Bonus", - "poolFilterDiceNumber": 5, - "poolFilterDieType": "D8", - "trapRangeType": "Triggerer", - "targetConditionName": "", - "targetConditionAsset": null, - "targetSide": "Enemy", - "durationType": "Instantaneous", - "durationParameter": 1, - "endOfEffect": "EndOfTurn", - "hasSavingThrow": false, - "disableSavingThrowOnAllies": false, - "savingThrowAbility": "Dexterity", - "ignoreCover": false, - "grantedConditionOnSave": null, - "rollSaveOnlyIfRelevantForms": false, - "hasShoveRoll": false, - "createdByCharacter": false, - "difficultyClassComputation": "SpellCastingFeature", - "savingThrowDifficultyAbility": "Wisdom", - "fixedSavingThrowDifficultyClass": 15, - "savingThrowAffinitiesBySense": [], - "savingThrowAffinitiesByFamily": [], - "damageAffinitiesByFamily": [], - "advantageForEnemies": false, - "canBeDispersed": false, - "hasVelocity": false, - "velocityCellsPerRound": 2, - "velocityType": "AwayFromSourceOriginalPosition", - "restrictedCreatureFamilies": [], - "immuneCreatureFamilies": [], - "restrictedCharacterSizes": [], - "hasLimitedEffectPool": false, - "effectPoolAmount": 60, - "effectApplication": "All", - "effectFormFilters": [], - "effectForms": [], - "specialFormsDescription": "", - "effectAdvancement": { - "$type": "EffectAdvancement, Assembly-CSharp", - "effectIncrementMethod": "None", - "incrementMultiplier": 1, - "additionalTargetsPerIncrement": 0, - "additionalSubtargetsPerIncrement": 0, - "additionalDicePerIncrement": 0, - "additionalSpellLevelPerIncrement": 0, - "additionalSummonsPerIncrement": 0, - "additionalHPPerIncrement": 0, - "additionalTempHPPerIncrement": 0, - "additionalTargetCellsPerIncrement": 0, - "additionalItemBonus": 0, - "additionalWeaponDie": 0, - "alteredDuration": "None" - }, - "speedType": "Instant", - "speedParameter": 10.0, - "offsetImpactTimeBasedOnDistance": false, - "offsetImpactTimeBasedOnDistanceFactor": 0.1, - "offsetImpactTimePerTarget": 0.0, - "effectParticleParameters": { - "$type": "EffectParticleParameters, Assembly-CSharp", - "casterParticleReference": null, - "casterSelfParticleReference": null, - "casterQuickSpellParticleReference": null, - "targetParticleReference": null, - "effectParticleReference": null, - "effectSubTargetParticleReference": null, - "zoneParticleReference": null, - "beforeImpactParticleReference": null, - "impactParticleReference": null, - "activeEffectImpactParticleReference": null, - "activeEffectCellStartParticleReference": null, - "activeEffectCellParticleReference": null, - "activeEffectCellEndParticleReference": null, - "activeEffectSurfaceStartParticleReference": null, - "activeEffectSurfaceParticleReference": null, - "activeEffectSurfaceEndParticleReference": null, - "activeEffectSurfaceParticlePerIndex": "", - "activeEffectSurfaceParticlePerIndexCount": 0, - "emissiveBorderCellStartParticleReference": null, - "emissiveBorderCellParticleReference": null, - "emissiveBorderCellEndParticleReference": null, - "emissiveBorderSurfaceStartParticleReference": null, - "emissiveBorderSurfaceParticleReference": null, - "emissiveBorderSurfaceEndParticleReference": null, - "conditionStartParticleReference": null, - "conditionParticleReference": null, - "conditionEndParticleReference": null, - "forceApplyZoneParticle": false, - "applyEmissionColorOnWeapons": false, - "emissionColor": { - "$type": "UnityEngine.Color, UnityEngine.CoreModule", - "r": 0.0, - "g": 0.0, - "b": 0.0, - "a": 0.0 - }, - "emissionColorFadeInDuration": 0.0, - "emissionColorFadeOutDuration": 0.0 - }, - "effectAIParameters": { - "$type": "EffectAIParameters, Assembly-CSharp", - "aoeScoreMultiplier": 1.0, - "cooldownForCaster": 0, - "cooldownForBattle": 0, - "sortingScoreMultiplier": 1.0, - "dynamicCooldown": false - }, - "animationMagicEffect": "Animation0", - "lightCounterDispellsEffect": false, - "hideSavingThrowAnimation": false - }, - "aiParameters": { - "$type": "SpellAIParameters, Assembly-CSharp", - "learnPriority": "Low", - "preparePriority": "Low" - }, - "concentrationAction": "None", - "verboseComponent": true, - "somaticComponent": true, - "materialComponentType": "Mundane", - "specificMaterialComponentTag": "Diamond", - "specificMaterialComponentCostGp": 100, - "specificMaterialComponentConsumed": true, - "terminateOnItemUnequip": false, - "displayConditionDuration": false, - "vocalSpellSemeType": "None", - "guiPresentation": { - "$type": "GuiPresentation, Assembly-CSharp", - "hidden": false, - "title": "Feature/&PowerCommandSpellApproachTitle", - "description": "Feature/&PowerCommandSpellApproachDescription", - "spriteReference": { - "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": null, - "m_SubObjectType": null - }, - "color": { - "$type": "UnityEngine.Color, UnityEngine.CoreModule", - "r": 1.0, - "g": 1.0, - "b": 1.0, - "a": 1.0 - }, - "symbolChar": "221E", - "sortOrder": 0, - "unusedInSolastaCOTM": false, - "usedInValleyDLC": false - }, - "contentCopyright": "UserContent", - "guid": "152fd62b-c5e0-567a-a035-7f4f39023003", - "contentPack": 9999, - "name": "SpellPowerCommandSpellApproach" -} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/SpellPowerCommandSpellFlee.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/SpellPowerCommandSpellFlee.json deleted file mode 100644 index d25ee9d8b5..0000000000 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/SpellPowerCommandSpellFlee.json +++ /dev/null @@ -1,193 +0,0 @@ -{ - "$type": "SpellDefinition, Assembly-CSharp", - "spellsBundle": false, - "subspellsList": [], - "compactSubspellsTooltip": false, - "implemented": true, - "schoolOfMagic": "SchoolEvocation", - "spellLevel": 0, - "ritual": false, - "uniqueInstance": false, - "castingTime": "Action", - "reactionContext": "None", - "ritualCastingTime": "Action", - "requiresConcentration": false, - "effectDescription": { - "$type": "EffectDescription, Assembly-CSharp", - "rangeType": "Self", - "rangeParameter": 0, - "halfDamageOnAMiss": false, - "hitAffinitiesByTargetTag": [], - "targetType": "Self", - "itemSelectionType": "Equiped", - "targetParameter": 1, - "targetParameter2": 2, - "emissiveBorder": "None", - "emissiveParameter": 1, - "requiresTargetProximity": false, - "targetProximityDistance": 6, - "targetExcludeCaster": false, - "canBePlacedOnCharacter": true, - "affectOnlyGround": false, - "targetFilteringMethod": "AllCharacterAndGadgets", - "targetFilteringTag": "No", - "requiresVisibilityForPosition": true, - "inviteOptionalAlly": false, - "slotTypes": [], - "recurrentEffect": "No", - "retargetAfterDeath": false, - "retargetActionType": "Bonus", - "poolFilterDiceNumber": 5, - "poolFilterDieType": "D8", - "trapRangeType": "Triggerer", - "targetConditionName": "", - "targetConditionAsset": null, - "targetSide": "Enemy", - "durationType": "Instantaneous", - "durationParameter": 1, - "endOfEffect": "EndOfTurn", - "hasSavingThrow": false, - "disableSavingThrowOnAllies": false, - "savingThrowAbility": "Dexterity", - "ignoreCover": false, - "grantedConditionOnSave": null, - "rollSaveOnlyIfRelevantForms": false, - "hasShoveRoll": false, - "createdByCharacter": false, - "difficultyClassComputation": "SpellCastingFeature", - "savingThrowDifficultyAbility": "Wisdom", - "fixedSavingThrowDifficultyClass": 15, - "savingThrowAffinitiesBySense": [], - "savingThrowAffinitiesByFamily": [], - "damageAffinitiesByFamily": [], - "advantageForEnemies": false, - "canBeDispersed": false, - "hasVelocity": false, - "velocityCellsPerRound": 2, - "velocityType": "AwayFromSourceOriginalPosition", - "restrictedCreatureFamilies": [], - "immuneCreatureFamilies": [], - "restrictedCharacterSizes": [], - "hasLimitedEffectPool": false, - "effectPoolAmount": 60, - "effectApplication": "All", - "effectFormFilters": [], - "effectForms": [], - "specialFormsDescription": "", - "effectAdvancement": { - "$type": "EffectAdvancement, Assembly-CSharp", - "effectIncrementMethod": "None", - "incrementMultiplier": 1, - "additionalTargetsPerIncrement": 0, - "additionalSubtargetsPerIncrement": 0, - "additionalDicePerIncrement": 0, - "additionalSpellLevelPerIncrement": 0, - "additionalSummonsPerIncrement": 0, - "additionalHPPerIncrement": 0, - "additionalTempHPPerIncrement": 0, - "additionalTargetCellsPerIncrement": 0, - "additionalItemBonus": 0, - "additionalWeaponDie": 0, - "alteredDuration": "None" - }, - "speedType": "Instant", - "speedParameter": 10.0, - "offsetImpactTimeBasedOnDistance": false, - "offsetImpactTimeBasedOnDistanceFactor": 0.1, - "offsetImpactTimePerTarget": 0.0, - "effectParticleParameters": { - "$type": "EffectParticleParameters, Assembly-CSharp", - "casterParticleReference": null, - "casterSelfParticleReference": null, - "casterQuickSpellParticleReference": null, - "targetParticleReference": null, - "effectParticleReference": null, - "effectSubTargetParticleReference": null, - "zoneParticleReference": null, - "beforeImpactParticleReference": null, - "impactParticleReference": null, - "activeEffectImpactParticleReference": null, - "activeEffectCellStartParticleReference": null, - "activeEffectCellParticleReference": null, - "activeEffectCellEndParticleReference": null, - "activeEffectSurfaceStartParticleReference": null, - "activeEffectSurfaceParticleReference": null, - "activeEffectSurfaceEndParticleReference": null, - "activeEffectSurfaceParticlePerIndex": "", - "activeEffectSurfaceParticlePerIndexCount": 0, - "emissiveBorderCellStartParticleReference": null, - "emissiveBorderCellParticleReference": null, - "emissiveBorderCellEndParticleReference": null, - "emissiveBorderSurfaceStartParticleReference": null, - "emissiveBorderSurfaceParticleReference": null, - "emissiveBorderSurfaceEndParticleReference": null, - "conditionStartParticleReference": null, - "conditionParticleReference": null, - "conditionEndParticleReference": null, - "forceApplyZoneParticle": false, - "applyEmissionColorOnWeapons": false, - "emissionColor": { - "$type": "UnityEngine.Color, UnityEngine.CoreModule", - "r": 0.0, - "g": 0.0, - "b": 0.0, - "a": 0.0 - }, - "emissionColorFadeInDuration": 0.0, - "emissionColorFadeOutDuration": 0.0 - }, - "effectAIParameters": { - "$type": "EffectAIParameters, Assembly-CSharp", - "aoeScoreMultiplier": 1.0, - "cooldownForCaster": 0, - "cooldownForBattle": 0, - "sortingScoreMultiplier": 1.0, - "dynamicCooldown": false - }, - "animationMagicEffect": "Animation0", - "lightCounterDispellsEffect": false, - "hideSavingThrowAnimation": false - }, - "aiParameters": { - "$type": "SpellAIParameters, Assembly-CSharp", - "learnPriority": "Low", - "preparePriority": "Low" - }, - "concentrationAction": "None", - "verboseComponent": true, - "somaticComponent": true, - "materialComponentType": "Mundane", - "specificMaterialComponentTag": "Diamond", - "specificMaterialComponentCostGp": 100, - "specificMaterialComponentConsumed": true, - "terminateOnItemUnequip": false, - "displayConditionDuration": false, - "vocalSpellSemeType": "None", - "guiPresentation": { - "$type": "GuiPresentation, Assembly-CSharp", - "hidden": false, - "title": "Feature/&PowerCommandSpellFleeTitle", - "description": "Feature/&PowerCommandSpellFleeDescription", - "spriteReference": { - "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": null, - "m_SubObjectType": null - }, - "color": { - "$type": "UnityEngine.Color, UnityEngine.CoreModule", - "r": 1.0, - "g": 1.0, - "b": 1.0, - "a": 1.0 - }, - "symbolChar": "221E", - "sortOrder": 0, - "unusedInSolastaCOTM": false, - "usedInValleyDLC": false - }, - "contentCopyright": "UserContent", - "guid": "8bd2bff0-c47d-5c51-9c83-82f46e5531bd", - "contentPack": 9999, - "name": "SpellPowerCommandSpellFlee" -} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/SpellPowerCommandSpellGrovel.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/SpellPowerCommandSpellGrovel.json deleted file mode 100644 index 067695ae67..0000000000 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/SpellPowerCommandSpellGrovel.json +++ /dev/null @@ -1,193 +0,0 @@ -{ - "$type": "SpellDefinition, Assembly-CSharp", - "spellsBundle": false, - "subspellsList": [], - "compactSubspellsTooltip": false, - "implemented": true, - "schoolOfMagic": "SchoolEvocation", - "spellLevel": 0, - "ritual": false, - "uniqueInstance": false, - "castingTime": "Action", - "reactionContext": "None", - "ritualCastingTime": "Action", - "requiresConcentration": false, - "effectDescription": { - "$type": "EffectDescription, Assembly-CSharp", - "rangeType": "Self", - "rangeParameter": 0, - "halfDamageOnAMiss": false, - "hitAffinitiesByTargetTag": [], - "targetType": "Self", - "itemSelectionType": "Equiped", - "targetParameter": 1, - "targetParameter2": 2, - "emissiveBorder": "None", - "emissiveParameter": 1, - "requiresTargetProximity": false, - "targetProximityDistance": 6, - "targetExcludeCaster": false, - "canBePlacedOnCharacter": true, - "affectOnlyGround": false, - "targetFilteringMethod": "AllCharacterAndGadgets", - "targetFilteringTag": "No", - "requiresVisibilityForPosition": true, - "inviteOptionalAlly": false, - "slotTypes": [], - "recurrentEffect": "No", - "retargetAfterDeath": false, - "retargetActionType": "Bonus", - "poolFilterDiceNumber": 5, - "poolFilterDieType": "D8", - "trapRangeType": "Triggerer", - "targetConditionName": "", - "targetConditionAsset": null, - "targetSide": "Enemy", - "durationType": "Instantaneous", - "durationParameter": 1, - "endOfEffect": "EndOfTurn", - "hasSavingThrow": false, - "disableSavingThrowOnAllies": false, - "savingThrowAbility": "Dexterity", - "ignoreCover": false, - "grantedConditionOnSave": null, - "rollSaveOnlyIfRelevantForms": false, - "hasShoveRoll": false, - "createdByCharacter": false, - "difficultyClassComputation": "SpellCastingFeature", - "savingThrowDifficultyAbility": "Wisdom", - "fixedSavingThrowDifficultyClass": 15, - "savingThrowAffinitiesBySense": [], - "savingThrowAffinitiesByFamily": [], - "damageAffinitiesByFamily": [], - "advantageForEnemies": false, - "canBeDispersed": false, - "hasVelocity": false, - "velocityCellsPerRound": 2, - "velocityType": "AwayFromSourceOriginalPosition", - "restrictedCreatureFamilies": [], - "immuneCreatureFamilies": [], - "restrictedCharacterSizes": [], - "hasLimitedEffectPool": false, - "effectPoolAmount": 60, - "effectApplication": "All", - "effectFormFilters": [], - "effectForms": [], - "specialFormsDescription": "", - "effectAdvancement": { - "$type": "EffectAdvancement, Assembly-CSharp", - "effectIncrementMethod": "None", - "incrementMultiplier": 1, - "additionalTargetsPerIncrement": 0, - "additionalSubtargetsPerIncrement": 0, - "additionalDicePerIncrement": 0, - "additionalSpellLevelPerIncrement": 0, - "additionalSummonsPerIncrement": 0, - "additionalHPPerIncrement": 0, - "additionalTempHPPerIncrement": 0, - "additionalTargetCellsPerIncrement": 0, - "additionalItemBonus": 0, - "additionalWeaponDie": 0, - "alteredDuration": "None" - }, - "speedType": "Instant", - "speedParameter": 10.0, - "offsetImpactTimeBasedOnDistance": false, - "offsetImpactTimeBasedOnDistanceFactor": 0.1, - "offsetImpactTimePerTarget": 0.0, - "effectParticleParameters": { - "$type": "EffectParticleParameters, Assembly-CSharp", - "casterParticleReference": null, - "casterSelfParticleReference": null, - "casterQuickSpellParticleReference": null, - "targetParticleReference": null, - "effectParticleReference": null, - "effectSubTargetParticleReference": null, - "zoneParticleReference": null, - "beforeImpactParticleReference": null, - "impactParticleReference": null, - "activeEffectImpactParticleReference": null, - "activeEffectCellStartParticleReference": null, - "activeEffectCellParticleReference": null, - "activeEffectCellEndParticleReference": null, - "activeEffectSurfaceStartParticleReference": null, - "activeEffectSurfaceParticleReference": null, - "activeEffectSurfaceEndParticleReference": null, - "activeEffectSurfaceParticlePerIndex": "", - "activeEffectSurfaceParticlePerIndexCount": 0, - "emissiveBorderCellStartParticleReference": null, - "emissiveBorderCellParticleReference": null, - "emissiveBorderCellEndParticleReference": null, - "emissiveBorderSurfaceStartParticleReference": null, - "emissiveBorderSurfaceParticleReference": null, - "emissiveBorderSurfaceEndParticleReference": null, - "conditionStartParticleReference": null, - "conditionParticleReference": null, - "conditionEndParticleReference": null, - "forceApplyZoneParticle": false, - "applyEmissionColorOnWeapons": false, - "emissionColor": { - "$type": "UnityEngine.Color, UnityEngine.CoreModule", - "r": 0.0, - "g": 0.0, - "b": 0.0, - "a": 0.0 - }, - "emissionColorFadeInDuration": 0.0, - "emissionColorFadeOutDuration": 0.0 - }, - "effectAIParameters": { - "$type": "EffectAIParameters, Assembly-CSharp", - "aoeScoreMultiplier": 1.0, - "cooldownForCaster": 0, - "cooldownForBattle": 0, - "sortingScoreMultiplier": 1.0, - "dynamicCooldown": false - }, - "animationMagicEffect": "Animation0", - "lightCounterDispellsEffect": false, - "hideSavingThrowAnimation": false - }, - "aiParameters": { - "$type": "SpellAIParameters, Assembly-CSharp", - "learnPriority": "Low", - "preparePriority": "Low" - }, - "concentrationAction": "None", - "verboseComponent": true, - "somaticComponent": true, - "materialComponentType": "Mundane", - "specificMaterialComponentTag": "Diamond", - "specificMaterialComponentCostGp": 100, - "specificMaterialComponentConsumed": true, - "terminateOnItemUnequip": false, - "displayConditionDuration": false, - "vocalSpellSemeType": "None", - "guiPresentation": { - "$type": "GuiPresentation, Assembly-CSharp", - "hidden": false, - "title": "Feature/&PowerCommandSpellGrovelTitle", - "description": "Feature/&PowerCommandSpellGrovelDescription", - "spriteReference": { - "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": null, - "m_SubObjectType": null - }, - "color": { - "$type": "UnityEngine.Color, UnityEngine.CoreModule", - "r": 1.0, - "g": 1.0, - "b": 1.0, - "a": 1.0 - }, - "symbolChar": "221E", - "sortOrder": 0, - "unusedInSolastaCOTM": false, - "usedInValleyDLC": false - }, - "contentCopyright": "UserContent", - "guid": "41423887-4200-5abf-b070-c71f30076690", - "contentPack": 9999, - "name": "SpellPowerCommandSpellGrovel" -} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/SpellPowerCommandSpellHalt.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/SpellPowerCommandSpellHalt.json deleted file mode 100644 index 3352ac2c11..0000000000 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/SpellPowerCommandSpellHalt.json +++ /dev/null @@ -1,193 +0,0 @@ -{ - "$type": "SpellDefinition, Assembly-CSharp", - "spellsBundle": false, - "subspellsList": [], - "compactSubspellsTooltip": false, - "implemented": true, - "schoolOfMagic": "SchoolEvocation", - "spellLevel": 0, - "ritual": false, - "uniqueInstance": false, - "castingTime": "Action", - "reactionContext": "None", - "ritualCastingTime": "Action", - "requiresConcentration": false, - "effectDescription": { - "$type": "EffectDescription, Assembly-CSharp", - "rangeType": "Self", - "rangeParameter": 0, - "halfDamageOnAMiss": false, - "hitAffinitiesByTargetTag": [], - "targetType": "Self", - "itemSelectionType": "Equiped", - "targetParameter": 1, - "targetParameter2": 2, - "emissiveBorder": "None", - "emissiveParameter": 1, - "requiresTargetProximity": false, - "targetProximityDistance": 6, - "targetExcludeCaster": false, - "canBePlacedOnCharacter": true, - "affectOnlyGround": false, - "targetFilteringMethod": "AllCharacterAndGadgets", - "targetFilteringTag": "No", - "requiresVisibilityForPosition": true, - "inviteOptionalAlly": false, - "slotTypes": [], - "recurrentEffect": "No", - "retargetAfterDeath": false, - "retargetActionType": "Bonus", - "poolFilterDiceNumber": 5, - "poolFilterDieType": "D8", - "trapRangeType": "Triggerer", - "targetConditionName": "", - "targetConditionAsset": null, - "targetSide": "Enemy", - "durationType": "Instantaneous", - "durationParameter": 1, - "endOfEffect": "EndOfTurn", - "hasSavingThrow": false, - "disableSavingThrowOnAllies": false, - "savingThrowAbility": "Dexterity", - "ignoreCover": false, - "grantedConditionOnSave": null, - "rollSaveOnlyIfRelevantForms": false, - "hasShoveRoll": false, - "createdByCharacter": false, - "difficultyClassComputation": "SpellCastingFeature", - "savingThrowDifficultyAbility": "Wisdom", - "fixedSavingThrowDifficultyClass": 15, - "savingThrowAffinitiesBySense": [], - "savingThrowAffinitiesByFamily": [], - "damageAffinitiesByFamily": [], - "advantageForEnemies": false, - "canBeDispersed": false, - "hasVelocity": false, - "velocityCellsPerRound": 2, - "velocityType": "AwayFromSourceOriginalPosition", - "restrictedCreatureFamilies": [], - "immuneCreatureFamilies": [], - "restrictedCharacterSizes": [], - "hasLimitedEffectPool": false, - "effectPoolAmount": 60, - "effectApplication": "All", - "effectFormFilters": [], - "effectForms": [], - "specialFormsDescription": "", - "effectAdvancement": { - "$type": "EffectAdvancement, Assembly-CSharp", - "effectIncrementMethod": "None", - "incrementMultiplier": 1, - "additionalTargetsPerIncrement": 0, - "additionalSubtargetsPerIncrement": 0, - "additionalDicePerIncrement": 0, - "additionalSpellLevelPerIncrement": 0, - "additionalSummonsPerIncrement": 0, - "additionalHPPerIncrement": 0, - "additionalTempHPPerIncrement": 0, - "additionalTargetCellsPerIncrement": 0, - "additionalItemBonus": 0, - "additionalWeaponDie": 0, - "alteredDuration": "None" - }, - "speedType": "Instant", - "speedParameter": 10.0, - "offsetImpactTimeBasedOnDistance": false, - "offsetImpactTimeBasedOnDistanceFactor": 0.1, - "offsetImpactTimePerTarget": 0.0, - "effectParticleParameters": { - "$type": "EffectParticleParameters, Assembly-CSharp", - "casterParticleReference": null, - "casterSelfParticleReference": null, - "casterQuickSpellParticleReference": null, - "targetParticleReference": null, - "effectParticleReference": null, - "effectSubTargetParticleReference": null, - "zoneParticleReference": null, - "beforeImpactParticleReference": null, - "impactParticleReference": null, - "activeEffectImpactParticleReference": null, - "activeEffectCellStartParticleReference": null, - "activeEffectCellParticleReference": null, - "activeEffectCellEndParticleReference": null, - "activeEffectSurfaceStartParticleReference": null, - "activeEffectSurfaceParticleReference": null, - "activeEffectSurfaceEndParticleReference": null, - "activeEffectSurfaceParticlePerIndex": "", - "activeEffectSurfaceParticlePerIndexCount": 0, - "emissiveBorderCellStartParticleReference": null, - "emissiveBorderCellParticleReference": null, - "emissiveBorderCellEndParticleReference": null, - "emissiveBorderSurfaceStartParticleReference": null, - "emissiveBorderSurfaceParticleReference": null, - "emissiveBorderSurfaceEndParticleReference": null, - "conditionStartParticleReference": null, - "conditionParticleReference": null, - "conditionEndParticleReference": null, - "forceApplyZoneParticle": false, - "applyEmissionColorOnWeapons": false, - "emissionColor": { - "$type": "UnityEngine.Color, UnityEngine.CoreModule", - "r": 0.0, - "g": 0.0, - "b": 0.0, - "a": 0.0 - }, - "emissionColorFadeInDuration": 0.0, - "emissionColorFadeOutDuration": 0.0 - }, - "effectAIParameters": { - "$type": "EffectAIParameters, Assembly-CSharp", - "aoeScoreMultiplier": 1.0, - "cooldownForCaster": 0, - "cooldownForBattle": 0, - "sortingScoreMultiplier": 1.0, - "dynamicCooldown": false - }, - "animationMagicEffect": "Animation0", - "lightCounterDispellsEffect": false, - "hideSavingThrowAnimation": false - }, - "aiParameters": { - "$type": "SpellAIParameters, Assembly-CSharp", - "learnPriority": "Low", - "preparePriority": "Low" - }, - "concentrationAction": "None", - "verboseComponent": true, - "somaticComponent": true, - "materialComponentType": "Mundane", - "specificMaterialComponentTag": "Diamond", - "specificMaterialComponentCostGp": 100, - "specificMaterialComponentConsumed": true, - "terminateOnItemUnequip": false, - "displayConditionDuration": false, - "vocalSpellSemeType": "None", - "guiPresentation": { - "$type": "GuiPresentation, Assembly-CSharp", - "hidden": false, - "title": "Feature/&PowerCommandSpellHaltTitle", - "description": "Feature/&PowerCommandSpellHaltDescription", - "spriteReference": { - "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": null, - "m_SubObjectType": null - }, - "color": { - "$type": "UnityEngine.Color, UnityEngine.CoreModule", - "r": 1.0, - "g": 1.0, - "b": 1.0, - "a": 1.0 - }, - "symbolChar": "221E", - "sortOrder": 0, - "unusedInSolastaCOTM": false, - "usedInValleyDLC": false - }, - "contentCopyright": "UserContent", - "guid": "22b80e7c-5b05-58a6-94cb-6ff9e7db04bd", - "contentPack": 9999, - "name": "SpellPowerCommandSpellHalt" -} \ No newline at end of file From 9285f1ca6a5a73bc9b8ae22485aac55bf473be0c Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sat, 7 Sep 2024 09:48:27 -0700 Subject: [PATCH 067/212] create initial AI builders --- SolastaUnfinishedBusiness/Models/AiContext.cs | 81 +++++++++++-------- .../Spells/SpellBuildersLevel01.cs | 45 ++++++++--- 2 files changed, 82 insertions(+), 44 deletions(-) diff --git a/SolastaUnfinishedBusiness/Models/AiContext.cs b/SolastaUnfinishedBusiness/Models/AiContext.cs index 7a2331886d..a940202949 100644 --- a/SolastaUnfinishedBusiness/Models/AiContext.cs +++ b/SolastaUnfinishedBusiness/Models/AiContext.cs @@ -1,6 +1,6 @@ using System.Collections.Generic; -using System.Linq; using SolastaUnfinishedBusiness.Api; +using SolastaUnfinishedBusiness.Api.LanguageExtensions; using SolastaUnfinishedBusiness.Builders; using TA.AI; using TA.AI.Considerations; @@ -22,6 +22,29 @@ internal static class AiContext "ConditionGrappledRestrainedSpellWeb", "ConditionRestrainedByEntangle" ]; + internal static ActivityScorerDefinition CreateActivityScorer( + ActivityScorerDefinition baseScorer, string name) + { + var result = Object.Instantiate(baseScorer); + + result.name = name; + result.scorer = result.Scorer.DeepCopy(); + + return result; + } + + private static ConsiderationDefinition CreateConsiderationDefinition( + string name, ConsiderationDescription consideration) + { + var baseDescription = FixesContext.DecisionMoveAfraid.Decision.Scorer.WeightedConsiderations[0] + .ConsiderationDefinition; + + baseDescription.name = name; + baseDescription.consideration = consideration; + + return Object.Instantiate(baseDescription); + } + internal static void Load() { // order matters as same weight @@ -41,46 +64,38 @@ internal static void Load() // boolParameter false won't do any ability check private static void BuildDecisionBreakFreeFromCondition(string conditionName, string action) { - //TODO: create proper builders - - // create considerations copies - - var baseDecision = DatabaseHelper.GetDefinition("BreakConcentration_FlyingInMelee"); - var considerationHasCondition = baseDecision.Decision.Scorer.considerations.FirstOrDefault(x => - x.consideration.name == "HasConditionFlying"); - var considerationMainActionNotFullyConsumed = baseDecision.Decision.Scorer.considerations.FirstOrDefault(x => - x.consideration.name == "MainActionNotFullyConsumed"); - - if (considerationHasCondition == null || considerationMainActionNotFullyConsumed == null) + var mainActionNotFullyConsumed = new WeightedConsiderationDescription { - Main.Error("fetching considerations at BuildDecisionBreakFreeFromCondition"); - - return; - } - - var considerationHasConditionBreakFree = new WeightedConsiderationDescription - { - consideration = Object.Instantiate(considerationHasCondition.consideration), - weight = considerationHasCondition.weight + consideration = CreateConsiderationDefinition( + "MainActionNotFullyConsumed", + new ConsiderationDescription + { + considerationType = nameof(HasCondition), boolParameter = true, floatParameter = 1f + }), + weight = 1f }; - considerationHasConditionBreakFree.consideration.name = $"Has{conditionName}"; - considerationHasConditionBreakFree.consideration.consideration = new ConsiderationDescription + var hasConditionBreakFree = new WeightedConsiderationDescription { - considerationType = nameof(HasCondition), - curve = considerationHasCondition.consideration.consideration.curve, - boolParameter = considerationHasCondition.consideration.consideration.boolParameter, - intParameter = considerationHasCondition.consideration.consideration.intParameter, - floatParameter = considerationHasCondition.consideration.consideration.floatParameter, - stringParameter = conditionName + consideration = CreateConsiderationDefinition( + $"Has{conditionName}", + new ConsiderationDescription + { + considerationType = nameof(HasCondition), + stringParameter = conditionName, + boolParameter = true, + intParameter = 2, + floatParameter = 2f + }), + weight = 1f }; // create scorer copy - var scorer = Object.Instantiate(baseDecision.Decision.scorer); + var baseDecision = DatabaseHelper.GetDefinition("BreakConcentration_FlyingInMelee"); + var scorerBreakFree = CreateActivityScorer(baseDecision.Decision.scorer, "BreakFree"); - scorer.name = "BreakFree"; - scorer.scorer.considerations = [considerationHasConditionBreakFree, considerationMainActionNotFullyConsumed]; + scorerBreakFree.scorer.considerations = [hasConditionBreakFree, mainActionNotFullyConsumed]; // create and assign decision definition to all decision packages @@ -90,7 +105,7 @@ private static void BuildDecisionBreakFreeFromCondition(string conditionName, st .SetDecisionDescription( "if restrained and can use main action, try to break free", "BreakFree", - scorer, + scorerBreakFree, action, enumParameter: 1, floatParameter: 3f) diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs index a098057707..37deeb2734 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs @@ -13,7 +13,6 @@ using SolastaUnfinishedBusiness.Models; using SolastaUnfinishedBusiness.Validators; using TA.AI; -using UnityEngine; using UnityEngine.AddressableAssets; using static ActionDefinitions; using static RuleDefinitions; @@ -1244,11 +1243,8 @@ internal static SpellDefinition BuildCommand() const string ConditionApproachName = $"Condition{NAME}Approach"; - var scorerApproach = Object.Instantiate(FixesContext.DecisionMoveAfraid.Decision.scorer); - - // need to deep copy these objects to avoid mess with move afraid settings - scorerApproach.scorer = scorerApproach.scorer.DeepCopy(); - scorerApproach.name = "MoveScorer_Approach"; + var scorerApproach = AiContext.CreateActivityScorer( + FixesContext.DecisionMoveAfraid.Decision.scorer, "MoveScorer_Approach"); // invert PenalizeFearSourceProximityAtPosition if brain character has condition approach and enemy is condition source scorerApproach.scorer.WeightedConsiderations[2].Consideration.stringParameter = ConditionApproachName; @@ -1266,6 +1262,7 @@ internal static SpellDefinition BuildCommand() var packageApproach = DecisionPackageDefinitionBuilder .Create("Approach") + .SetGuiPresentationNoContent(true) .SetWeightedDecisions(new WeightedDecisionDescription { decision = decisionApproach, weight = 9 }) .AddToDB(); @@ -1445,7 +1442,7 @@ internal static SpellDefinition BuildCommand() spellHalt.AddCustomSubFeatures( new PowerOrSpellFinishedByMeCommand( conditionMark, conditionApproach, conditionFlee, conditionGrovel, conditionHalt)); - + var spell = SpellDefinitionBuilder .Create(NAME) .SetGuiPresentation(Category.Spell, Command) @@ -1498,7 +1495,7 @@ public IEnumerator OnActionFinishedByMe(CharacterAction characterAction) actingCharacter.UsedTacticalMoves = actingCharacter.MaxTacticalMoves; actingCharacter.UsedTacticalMovesChanged?.Invoke(actingCharacter); - + var rulesetCaster = EffectHelpers.GetCharacterByGuid(activeCondition.SourceGuid); var caster = GameLocationCharacter.GetFromActor(rulesetCaster); @@ -1605,6 +1602,31 @@ internal static SpellDefinition BuildDissonantWhispers() { const string NAME = "DissonantWhispers"; + #region Dissonant Whispers AI Behavior + + var scorerDissonantWhispers = AiContext.CreateActivityScorer( + FixesContext.DecisionMoveAfraid.Decision.scorer, "MoveScorer_DissonantWhispers"); + + // remove IsCloseToMe + scorerDissonantWhispers.scorer.WeightedConsiderations.RemoveAt(3); + + var decisionDissonantWhispers = DecisionDefinitionBuilder + .Create("Move_DissonantWhispers") + .SetGuiPresentationNoContent(true) + .SetDecisionDescription( + "Go as far as possible from enemies.", + "Move", + scorerDissonantWhispers) + .AddToDB(); + + var packageDissonantWhispers = DecisionPackageDefinitionBuilder + .Create("DissonantWhispers_Fear") + .SetGuiPresentationNoContent(true) + .SetWeightedDecisions(new WeightedDecisionDescription { decision = decisionDissonantWhispers, weight = 9 }) + .AddToDB(); + + #endregion + var spell = SpellDefinitionBuilder .Create(NAME) .SetGuiPresentation(Category.Spell, Sprites.GetSprite(NAME, Resources.DissonantWhispers, 128)) @@ -1631,13 +1653,14 @@ internal static SpellDefinition BuildDissonantWhispers() .SetCasterEffectParameters(Feeblemind) .SetEffectEffectParameters(PowerBardTraditionVerbalOnslaught) .Build()) - .AddCustomSubFeatures(new PowerOrSpellFinishedByMeDissonantWhispers()) + .AddCustomSubFeatures(new PowerOrSpellFinishedByMeDissonantWhispers(packageDissonantWhispers)) .AddToDB(); return spell; } - private sealed class PowerOrSpellFinishedByMeDissonantWhispers : IPowerOrSpellFinishedByMe + private sealed class PowerOrSpellFinishedByMeDissonantWhispers(DecisionPackageDefinition packageDissonantWhispers) + : IPowerOrSpellFinishedByMe { public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, BaseDefinition baseDefinition) { @@ -1669,7 +1692,7 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, brain.StashDecisions(); brain.RemoveAllDecisions(); - brain.AddDecisionPackage(DecisionPackageDefinitions.Fear); + brain.AddDecisionPackage(packageDissonantWhispers); brain.RegisterAllActiveDecisionPackages(); yield return brain.DecideNextActivity(); From d5fc8270ff8c0232bdb92886f03417b534effa2b Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sat, 7 Sep 2024 12:20:32 -0700 Subject: [PATCH 068/212] auto format and clean up / collaterals --- .../UnfinishedBusinessBlueprints/Assets.txt | 2 + .../Move_DissonantWhispers.json | 116 ++++++++++++++++++ .../DecisionPackageDefinition/Approach.json | 13 +- .../DissonantWhispers_Fear.json | 43 +++++++ .../Builders/MonsterDefinitionBuilder.cs | 3 +- .../ChangelogHistory.txt | 7 +- .../Interfaces/ITryAlterOutcomeSavingThrow.cs | 2 +- .../Models/CharacterUAContext.cs | 2 +- .../TacticalAdventuresApplicationPatcher.cs | 9 +- .../Subclasses/RoguishOpportunist.cs | 4 +- 10 files changed, 185 insertions(+), 16 deletions(-) create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/Move_DissonantWhispers.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/DissonantWhispers_Fear.json diff --git a/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt b/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt index 33e3fc0a87..d775903e1b 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt +++ b/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt @@ -1243,7 +1243,9 @@ DecisionBreakFreeConditionNoxiousSpray TA.AI.DecisionDefinition TA.AI.DecisionDe DecisionBreakFreeConditionRestrainedByEntangle TA.AI.DecisionDefinition TA.AI.DecisionDefinition 2a416669-5ec8-53c1-b07b-8fe6f29da4d2 DecisionBreakFreeConditionVileBrew TA.AI.DecisionDefinition TA.AI.DecisionDefinition 4b3278e8-334a-58d6-8c75-2f48e28b4e54 Move_Approach TA.AI.DecisionDefinition TA.AI.DecisionDefinition 5cb2a87f-09a4-5fae-9b74-10516ea8a8ab +Move_DissonantWhispers TA.AI.DecisionDefinition TA.AI.DecisionDefinition bdfa6649-5cad-5b35-a697-209ea53ca45d Approach TA.AI.DecisionPackageDefinition TA.AI.DecisionPackageDefinition 5043a0ec-c626-5877-bd87-c7bc0584366d +DissonantWhispers_Fear TA.AI.DecisionPackageDefinition TA.AI.DecisionPackageDefinition dfe2cc9e-cc70-5cfe-9057-19454acb1068 DieTypeD3 DieTypeDefinition DieTypeDefinition 63dc904b-8d78-5406-90aa-e7e1f3eefd84 ProxyCircleOfTheWildfireCauterizingFlames EffectProxyDefinition EffectProxyDefinition 5d3d90cd-1858-5044-b4f6-586754122132 ProxyDawn EffectProxyDefinition EffectProxyDefinition 5c460453-060a-51c2-9099-a6a40908dba9 diff --git a/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/Move_DissonantWhispers.json b/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/Move_DissonantWhispers.json new file mode 100644 index 0000000000..63bbc05920 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/Move_DissonantWhispers.json @@ -0,0 +1,116 @@ +{ + "$type": "TA.AI.DecisionDefinition, Assembly-CSharp", + "decision": { + "$type": "TA.AI.DecisionDescription, Assembly-CSharp", + "description": "Go as far as possible from enemies.", + "scorer": { + "$type": "TA.AI.ActivityScorerDefinition, Assembly-CSharp", + "scorer": { + "$type": "TA.AI.ActivityScorer, Assembly-CSharp", + "considerations": [ + { + "$type": "TA.AI.WeightedConsiderationDescription, Assembly-CSharp", + "consideration": { + "$type": "TA.AI.ConsiderationDefinition, Assembly-CSharp", + "consideration": { + "$type": "TA.AI.ConsiderationDescription, Assembly-CSharp", + "considerationType": "IsValidMoveDestination", + "curve": { + "$type": "UnityEngine.AnimationCurve, UnityEngine.CoreModule" + }, + "stringParameter": "", + "floatParameter": 0.0, + "intParameter": 0, + "byteParameter": 0, + "boolParameter": false, + "boolSecParameter": false, + "boolTerParameter": false + }, + "name": "IsValidMoveDestination" + }, + "weight": 1.0 + }, + { + "$type": "TA.AI.WeightedConsiderationDescription, Assembly-CSharp", + "consideration": { + "$type": "TA.AI.ConsiderationDefinition, Assembly-CSharp", + "consideration": { + "$type": "TA.AI.ConsiderationDescription, Assembly-CSharp", + "considerationType": "InfluenceEnemyProximity", + "curve": { + "$type": "UnityEngine.AnimationCurve, UnityEngine.CoreModule" + }, + "stringParameter": "ConditionCommandSpellApproach", + "floatParameter": 3.0, + "intParameter": 2, + "byteParameter": 0, + "boolParameter": true, + "boolSecParameter": false, + "boolTerParameter": false + }, + "name": "PenalizeVeryCloseEnemyProximityAtPosition" + }, + "weight": 1.0 + }, + { + "$type": "TA.AI.WeightedConsiderationDescription, Assembly-CSharp", + "consideration": { + "$type": "TA.AI.ConsiderationDefinition, Assembly-CSharp", + "consideration": { + "$type": "TA.AI.ConsiderationDescription, Assembly-CSharp", + "considerationType": "InfluenceFearSourceProximity", + "curve": { + "$type": "UnityEngine.AnimationCurve, UnityEngine.CoreModule" + }, + "stringParameter": "ConditionCommandSpellApproach", + "floatParameter": 6.0, + "intParameter": 1, + "byteParameter": 0, + "boolParameter": true, + "boolSecParameter": false, + "boolTerParameter": false + }, + "name": "PenalizeFearSourceProximityAtPosition" + }, + "weight": 1.0 + } + ] + }, + "name": "MoveScorer_DissonantWhispers" + }, + "activityType": "Move", + "stringParameter": "", + "stringSecParameter": "", + "boolParameter": false, + "boolSecParameter": false, + "floatParameter": 0.0, + "enumParameter": 0 + }, + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": true, + "title": "Feature/&NoContentTitle", + "description": "Feature/&NoContentTitle", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "bdfa6649-5cad-5b35-a697-209ea53ca45d", + "contentPack": 9999, + "name": "Move_DissonantWhispers" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/Approach.json b/Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/Approach.json index 46837b018e..07938b03c0 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/Approach.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/Approach.json @@ -15,10 +15,15 @@ }, "guiPresentation": { "$type": "GuiPresentation, Assembly-CSharp", - "hidden": false, - "title": "Feature/&Emptystring", - "description": "Feature/&Emptystring", - "spriteReference": null, + "hidden": true, + "title": "Feature/&NoContentTitle", + "description": "Feature/&NoContentTitle", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, "color": { "$type": "UnityEngine.Color, UnityEngine.CoreModule", "r": 1.0, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/DissonantWhispers_Fear.json b/Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/DissonantWhispers_Fear.json new file mode 100644 index 0000000000..71c0556900 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/DissonantWhispers_Fear.json @@ -0,0 +1,43 @@ +{ + "$type": "TA.AI.DecisionPackageDefinition, Assembly-CSharp", + "dungeonMakerPresence": false, + "package": { + "$type": "TA.AI.DecisionPackageDescription, Assembly-CSharp", + "weightedDecisions": [ + { + "$type": "TA.AI.WeightedDecisionDescription, Assembly-CSharp", + "decision": "Definition:Move_DissonantWhispers:bdfa6649-5cad-5b35-a697-209ea53ca45d", + "weight": 9.0, + "cooldown": 0, + "dynamicCooldown": false + } + ] + }, + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": true, + "title": "Feature/&NoContentTitle", + "description": "Feature/&NoContentTitle", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "dfe2cc9e-cc70-5cfe-9057-19454acb1068", + "contentPack": 9999, + "name": "DissonantWhispers_Fear" +} \ No newline at end of file diff --git a/SolastaUnfinishedBusiness/Builders/MonsterDefinitionBuilder.cs b/SolastaUnfinishedBusiness/Builders/MonsterDefinitionBuilder.cs index 19be801199..af98fab3f7 100644 --- a/SolastaUnfinishedBusiness/Builders/MonsterDefinitionBuilder.cs +++ b/SolastaUnfinishedBusiness/Builders/MonsterDefinitionBuilder.cs @@ -2,7 +2,6 @@ using System.Linq; using JetBrains.Annotations; using SolastaUnfinishedBusiness.Api.LanguageExtensions; -using TA.AI; using static RuleDefinitions; using static BestiaryDefinitions; @@ -69,11 +68,13 @@ public MonsterDefinitionBuilder NoExperienceGain() return this; } +#if false internal MonsterDefinitionBuilder SetDefaultBattleDecisionPackage(DecisionPackageDefinition decisionPackage) { Definition.defaultBattleDecisionPackage = decisionPackage; return this; } +#endif internal MonsterDefinitionBuilder SetDefaultFaction(FactionDefinition faction) { diff --git a/SolastaUnfinishedBusiness/ChangelogHistory.txt b/SolastaUnfinishedBusiness/ChangelogHistory.txt index 42b1ee6d96..2cc27533b6 100644 --- a/SolastaUnfinishedBusiness/ChangelogHistory.txt +++ b/SolastaUnfinishedBusiness/ChangelogHistory.txt @@ -3,15 +3,16 @@ - added Command [Bard, Cleric, Paladin], and Dissonant Whispers [Bard] spells - added Interface > Game UI > 'Enable CTRL click-drag to bypass quest items checks on drop' setting - fixed Barbarian Sundering Blow interaction with Call Lightning, and other proxy like powers +- fixed Bardic Inspiration, Indomitable Resistances, and Legendary Resistances saving throw logic - fixed Bend Luck, Flash of Genius, Inspiring Protection, Shield Master, and Weal/Woe not consuming reaction -- fixed countered, and execution failed checks on custom behaviors that trigger on effects' end +- fixed countered, and execution failed checks on custom behaviors triggering logic - fixed Dwarven Fortitude, and Magical Guidance incorrectly consuming a reaction - fixed Exploiter feat not checking for reactions from 2nd target onwards - fixed Lucky, and Mage Slayer feats double consumption - fixed Martial Commander coordinated defense to require an attack first [VANILLA] - fixed Party Editor to register/unregister powers from feats - fixed Path of the Wild Magic retribution, and Patron Archfey misty step to only react against enemy effects -- fixed save by location/campaign setting on multiplayer load +- fixed save by location/campaign setting on multiplayer load in overland map - improved ability checks to also allow reactions on success [Circle of the Cosmos woe] - improved Conversion Slots, and Shorthand versatilities to react on ability checks - improved game log to avoid voxelization warning messages to flood the same [DM overlay trick] @@ -19,7 +20,7 @@ - improved mod UI to ensure all settings required to be in sync on MP sessions are now under Gameplay - improved saving roll reaction modal descriptions [Circle of the Cosmos, Sorcerer Wild Magic, etc.] - improved Sorcerer Wild Magic tides of chaos to react on ability checks -- improved spells documentation dump to include which classes can cast any given spell +- improved spells documentation dump to include allowed casting classes - improved vanilla to allow reactions on gadget's saving roll [traps] - improved victory modal export behavior to allow heroes not in pool to be exported [VANILLA] diff --git a/SolastaUnfinishedBusiness/Interfaces/ITryAlterOutcomeSavingThrow.cs b/SolastaUnfinishedBusiness/Interfaces/ITryAlterOutcomeSavingThrow.cs index 0fc8810767..f02e8d1732 100644 --- a/SolastaUnfinishedBusiness/Interfaces/ITryAlterOutcomeSavingThrow.cs +++ b/SolastaUnfinishedBusiness/Interfaces/ITryAlterOutcomeSavingThrow.cs @@ -53,7 +53,7 @@ internal static IEnumerator Handler( if (savingThrowData.Action != null) { savingThrowData.Action.SaveOutcome = savingThrowData.SaveOutcome; - savingThrowData.Action.SaveOutcomeDelta = savingThrowData.SaveOutcomeDelta; + savingThrowData.Action.SaveOutcomeDelta = savingThrowData.SaveOutcomeDelta; } } diff --git a/SolastaUnfinishedBusiness/Models/CharacterUAContext.cs b/SolastaUnfinishedBusiness/Models/CharacterUAContext.cs index ce0adae6e8..a430765a49 100644 --- a/SolastaUnfinishedBusiness/Models/CharacterUAContext.cs +++ b/SolastaUnfinishedBusiness/Models/CharacterUAContext.cs @@ -1591,7 +1591,7 @@ private IEnumerator HandleWithdraw(CharacterAction action, GameLocationCharacter attacker.UsedTacticalMoves = 0; } - attacker.UsedTacticalMovesChanged?.Invoke(attacker); + attacker.UsedTacticalMovesChanged?.Invoke(attacker); rulesetAttacker.InflictCondition( ConditionDisengaging, diff --git a/SolastaUnfinishedBusiness/Patches/TacticalAdventuresApplicationPatcher.cs b/SolastaUnfinishedBusiness/Patches/TacticalAdventuresApplicationPatcher.cs index 951edcdbd0..e3a2698b7b 100644 --- a/SolastaUnfinishedBusiness/Patches/TacticalAdventuresApplicationPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/TacticalAdventuresApplicationPatcher.cs @@ -30,10 +30,10 @@ private static bool EnableSaveByLocation(ref string __result) } __result = selectedCampaignService?.SaveGameDirectory ?? DefaultSaveGameDirectory; - + return false; } - + [HarmonyPatch(typeof(TacticalAdventuresApplication), nameof(TacticalAdventuresApplication.SaveGameDirectory), MethodType.Getter)] [SuppressMessage("Minor Code Smell", "S101:Types should be named in PascalCase", Justification = "Patch")] @@ -46,8 +46,9 @@ public static bool Prefix(ref string __result) return EnableSaveByLocation(ref __result); } } - - [HarmonyPatch(typeof(TacticalAdventuresApplication), nameof(TacticalAdventuresApplication.MultiplayerFilesDirectory), + + [HarmonyPatch(typeof(TacticalAdventuresApplication), + nameof(TacticalAdventuresApplication.MultiplayerFilesDirectory), MethodType.Getter)] [SuppressMessage("Minor Code Smell", "S101:Types should be named in PascalCase", Justification = "Patch")] [UsedImplicitly] diff --git a/SolastaUnfinishedBusiness/Subclasses/RoguishOpportunist.cs b/SolastaUnfinishedBusiness/Subclasses/RoguishOpportunist.cs index a45aafda51..cdb7bc3db7 100644 --- a/SolastaUnfinishedBusiness/Subclasses/RoguishOpportunist.cs +++ b/SolastaUnfinishedBusiness/Subclasses/RoguishOpportunist.cs @@ -345,8 +345,8 @@ public IEnumerator OnMagicEffectFinishedByMeOrAlly( { yield break; } - - // ReSharper disable once ForeachCanBeConvertedToQueryUsingAnotherGetEnumerator + + // ReSharper disable once ForeachCanBePartlyConvertedToQueryUsingAnotherGetEnumerator foreach (var target in targets) { if (target.RulesetActor.HasConditionOfCategoryAndType(TagEffect, conditionSeizeTheChance.Name)) From 0713c1e8c4a96220721db56b56ebd0928bd2f677 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sat, 7 Sep 2024 13:35:38 -0700 Subject: [PATCH 069/212] refactor AiContext --- SolastaUnfinishedBusiness/Models/AiContext.cs | 93 ++++++++++--------- .../Activities/ActivitiesBreakFreePatcher.cs | 6 +- .../CharacterActionBreakFreePatcher.cs | 56 +++++------ .../Spells/SpellBuildersLevel01.cs | 14 +++ .../Spells/SpellBuildersLevel02.cs | 21 +++++ .../Spells/SpellBuildersLevel06.cs | 8 ++ 6 files changed, 125 insertions(+), 73 deletions(-) diff --git a/SolastaUnfinishedBusiness/Models/AiContext.cs b/SolastaUnfinishedBusiness/Models/AiContext.cs index a940202949..258e29acfd 100644 --- a/SolastaUnfinishedBusiness/Models/AiContext.cs +++ b/SolastaUnfinishedBusiness/Models/AiContext.cs @@ -1,27 +1,17 @@ -using System.Collections.Generic; +using System.Linq; using SolastaUnfinishedBusiness.Api; using SolastaUnfinishedBusiness.Api.LanguageExtensions; using SolastaUnfinishedBusiness.Builders; using TA.AI; +using TA.AI.Activities; using TA.AI.Considerations; using UnityEngine; +using static SolastaUnfinishedBusiness.Api.DatabaseHelper.ConditionDefinitions; namespace SolastaUnfinishedBusiness.Models; internal static class AiContext { - internal const string DoNothing = "1"; - internal const string DoStrengthCheckCasterDC = "2"; - - internal static readonly List DoNothingConditions = - ["ConditionNoxiousSpray", "ConditionVileBrew", "ConditionGrappledRestrainedIceBound"]; - - internal static readonly List DoStrengthCheckCasterDCConditions = - [ - "ConditionFlashFreeze", "ConditionGrappledRestrainedEnsnared", - "ConditionGrappledRestrainedSpellWeb", "ConditionRestrainedByEntangle" - ]; - internal static ActivityScorerDefinition CreateActivityScorer( ActivityScorerDefinition baseScorer, string name) { @@ -30,39 +20,45 @@ internal static ActivityScorerDefinition CreateActivityScorer( result.name = name; result.scorer = result.Scorer.DeepCopy(); + result.scorer.WeightedConsiderations.SetRange(result.scorer.WeightedConsiderations.Select(x => + new WeightedConsiderationDescription + { + consideration = + CreateConsiderationDefinition(x.consideration.name, x.consideration.Consideration), + weight = x.weight + }).ToList()); + return result; } private static ConsiderationDefinition CreateConsiderationDefinition( string name, ConsiderationDescription consideration) { - var baseDescription = FixesContext.DecisionMoveAfraid.Decision.Scorer.WeightedConsiderations[0] - .ConsiderationDefinition; + var baseDescription = + FixesContext.DecisionMoveAfraid.Decision.Scorer.WeightedConsiderations[0].ConsiderationDefinition; + + var result = Object.Instantiate(baseDescription); - baseDescription.name = name; - baseDescription.consideration = consideration; + result.name = name; + result.consideration = consideration.DeepCopy(); - return Object.Instantiate(baseDescription); + return result; } internal static void Load() { - // order matters as same weight - // this code needs a refactoring. meanwhile check: - // - CharacterActionPanelPatcher SelectBreakFreeMode and add condition there if spell also aims allies - foreach (var condition in DoNothingConditions) - { - BuildDecisionBreakFreeFromCondition(condition, DoNothing); - } + ConditionRestrainedByEntangle.amountOrigin = ConditionDefinition.OriginOfAmount.Fixed; + ConditionRestrainedByEntangle.baseAmount = (int)BreakFreeType.DoStrengthCheckAgainstCasterDC; - foreach (var condition in DoStrengthCheckCasterDCConditions) - { - BuildDecisionBreakFreeFromCondition(condition, DoStrengthCheckCasterDC); - } + var battlePackage = BuildDecisionBreakFreeFromCondition(ConditionRestrainedByEntangle.Name, + BreakFreeType.DoStrengthCheckAgainstCasterDC); + + ConditionRestrainedByEntangle.addBehavior = true; + ConditionRestrainedByEntangle.battlePackage = battlePackage; } - // boolParameter false won't do any ability check - private static void BuildDecisionBreakFreeFromCondition(string conditionName, string action) + internal static DecisionPackageDefinition BuildDecisionBreakFreeFromCondition( + string conditionName, BreakFreeType action) { var mainActionNotFullyConsumed = new WeightedConsiderationDescription { @@ -70,7 +66,10 @@ private static void BuildDecisionBreakFreeFromCondition(string conditionName, st "MainActionNotFullyConsumed", new ConsiderationDescription { - considerationType = nameof(HasCondition), boolParameter = true, floatParameter = 1f + considerationType = nameof(ActionTypeStatus), + stringParameter = string.Empty, + boolParameter = true, + floatParameter = 1f }), weight = 1f }; @@ -90,31 +89,37 @@ private static void BuildDecisionBreakFreeFromCondition(string conditionName, st weight = 1f }; - // create scorer copy + // create scorer var baseDecision = DatabaseHelper.GetDefinition("BreakConcentration_FlyingInMelee"); - var scorerBreakFree = CreateActivityScorer(baseDecision.Decision.scorer, "BreakFree"); + var scorerBreakFree = CreateActivityScorer(baseDecision.Decision.scorer, $"BreakFree{conditionName}"); scorerBreakFree.scorer.considerations = [hasConditionBreakFree, mainActionNotFullyConsumed]; - // create and assign decision definition to all decision packages - var decisionBreakFree = DecisionDefinitionBuilder .Create($"DecisionBreakFree{conditionName}") .SetGuiPresentationNoContent(true) .SetDecisionDescription( - "if restrained and can use main action, try to break free", - "BreakFree", + $"if restrained from {conditionName}, and can use main action, try to break free", + nameof(BreakFree), scorerBreakFree, - action, + ((int)action).ToString(), enumParameter: 1, floatParameter: 3f) .AddToDB(); - foreach (var decisionPackageDefinition in DatabaseRepository.GetDatabase()) - { - decisionPackageDefinition.package.weightedDecisions.Add( - new WeightedDecisionDescription(decisionBreakFree, 1, 0, false)); - } + var packageBreakFree = DecisionPackageDefinitionBuilder + .Create($"BreakFreeAbilityCheck{conditionName}") + .SetGuiPresentationNoContent(true) + .SetWeightedDecisions(new WeightedDecisionDescription { decision = decisionBreakFree, weight = 1f }) + .AddToDB(); + + return packageBreakFree; + } + + internal enum BreakFreeType + { + DoNothing, + DoStrengthCheckAgainstCasterDC } } diff --git a/SolastaUnfinishedBusiness/Patches/Activities/ActivitiesBreakFreePatcher.cs b/SolastaUnfinishedBusiness/Patches/Activities/ActivitiesBreakFreePatcher.cs index 1ce68d4658..483f7f471c 100644 --- a/SolastaUnfinishedBusiness/Patches/Activities/ActivitiesBreakFreePatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/Activities/ActivitiesBreakFreePatcher.cs @@ -51,13 +51,13 @@ public static IEnumerator Postfix( var success = true; // no ability check - switch (decisionDefinition.Decision.StringParameter) + switch ((AiContext.BreakFreeType)int.Parse(decisionDefinition.Decision.StringParameter)) { - case AiContext.DoNothing: + case AiContext.BreakFreeType.DoNothing: rulesetCharacter.RemoveCondition(restrainingCondition); break; - case AiContext.DoStrengthCheckCasterDC: + case AiContext.BreakFreeType.DoStrengthCheckAgainstCasterDC: var checkDC = 10; var sourceGuid = restrainingCondition.SourceGuid; diff --git a/SolastaUnfinishedBusiness/Patches/CharacterActionBreakFreePatcher.cs b/SolastaUnfinishedBusiness/Patches/CharacterActionBreakFreePatcher.cs index 79953ee80a..2e4ea32e54 100644 --- a/SolastaUnfinishedBusiness/Patches/CharacterActionBreakFreePatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/CharacterActionBreakFreePatcher.cs @@ -60,43 +60,47 @@ private static IEnumerator Process(CharacterActionBreakFree __instance) var checkDC = 10; var sourceGuid = restrainingCondition.SourceGuid; - var conditionName = restrainingCondition.ConditionDefinition.Name; + var action = (AiContext.BreakFreeType)restrainingCondition.Amount; - if (AiContext.DoNothingConditions.Contains(conditionName)) + switch (action) { - __instance.ActingCharacter.RulesetCharacter.RemoveCondition(restrainingCondition); - yield break; - } + case AiContext.BreakFreeType.DoNothing: + __instance.ActingCharacter.RulesetCharacter.RemoveCondition(restrainingCondition); + yield break; - if (AiContext.DoStrengthCheckCasterDCConditions.Contains(conditionName)) - { - if (RulesetEntity.TryGetEntity(sourceGuid, out RulesetCharacterHero rulesetCharacterHero)) + case AiContext.BreakFreeType.DoStrengthCheckAgainstCasterDC: { - checkDC = rulesetCharacterHero.SpellRepertoires - .Select(x => x.SaveDC) - .Max(); - } + if (RulesetEntity.TryGetEntity(sourceGuid, out RulesetCharacterHero rulesetCharacterHero)) + { + checkDC = rulesetCharacterHero.SpellRepertoires + .Select(x => x.SaveDC) + .Max(); + } - proficiencyName = string.Empty; - } - else - { - if (restrainingCondition.HasSaveOverride) - { - checkDC = restrainingCondition.SaveOverrideDC; + proficiencyName = string.Empty; + break; } - else + default: { - if (RulesetEntity.TryGetEntity(sourceGuid, out RulesetEffect entity1)) + if (restrainingCondition.HasSaveOverride) { - checkDC = entity1.SaveDC; + checkDC = restrainingCondition.SaveOverrideDC; } - else if (RulesetEntity.TryGetEntity(sourceGuid, out RulesetCharacterMonster entity2)) + else { - checkDC = 10 + AttributeDefinitions - .ComputeAbilityScoreModifier(entity2.GetAttribute(AttributeDefinitions.Strength) - .CurrentValue); + if (RulesetEntity.TryGetEntity(sourceGuid, out RulesetEffect entity1)) + { + checkDC = entity1.SaveDC; + } + else if (RulesetEntity.TryGetEntity(sourceGuid, out RulesetCharacterMonster entity2)) + { + checkDC = 10 + AttributeDefinitions + .ComputeAbilityScoreModifier(entity2.GetAttribute(AttributeDefinitions.Strength) + .CurrentValue); + } } + + break; } } diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs index 37deeb2734..1844a30803 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs @@ -219,6 +219,7 @@ internal static SpellDefinition BuildEnsnaringStrike() .SetOrUpdateGuiPresentation(Category.Condition) .SetParentCondition(ConditionRestrainedByWeb) .SetSpecialDuration(DurationType.Minute, 1, TurnOccurenceType.StartOfTurn) + .SetFixedAmount((int)AiContext.BreakFreeType.DoStrengthCheckAgainstCasterDC) .SetRecurrentEffectForms( EffectFormBuilder .Create() @@ -228,6 +229,12 @@ internal static SpellDefinition BuildEnsnaringStrike() .CopyParticleReferences(Entangle) .AddToDB(); + var battlePackage = AiContext.BuildDecisionBreakFreeFromCondition( + conditionEnsnared.Name, AiContext.BreakFreeType.DoStrengthCheckAgainstCasterDC); + + conditionEnsnared.addBehavior = true; + conditionEnsnared.battlePackage = battlePackage; + conditionEnsnared.specialInterruptions.Clear(); var additionalDamageEnsnaringStrike = FeatureDefinitionAdditionalDamageBuilder @@ -645,6 +652,7 @@ internal static SpellDefinition BuildVileBrew() .SetGuiPresentation(Category.Condition, ConditionAcidArrowed) .SetConditionType(ConditionType.Detrimental) .SetFeatures(MovementAffinityConditionRestrained, ActionAffinityConditionRestrained, ActionAffinityGrappled) + .SetFixedAmount((int)AiContext.BreakFreeType.DoNothing) .SetRecurrentEffectForms( EffectFormBuilder .Create() @@ -653,6 +661,12 @@ internal static SpellDefinition BuildVileBrew() .Build()) .AddToDB(); + var battlePackage = + AiContext.BuildDecisionBreakFreeFromCondition(conditionVileBrew.Name, AiContext.BreakFreeType.DoNothing); + + conditionVileBrew.addBehavior = true; + conditionVileBrew.battlePackage = battlePackage; + conditionVileBrew.possessive = false; conditionVileBrew.specialDuration = false; diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel02.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel02.cs index 3e45ff607f..6ae6a1bc1e 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel02.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel02.cs @@ -83,8 +83,15 @@ internal static SpellDefinition BuildBindingIce() .SetOrUpdateGuiPresentation(Category.Condition) .SetFeatures(MovementAffinityConditionRestrained, ActionAffinityConditionRestrained, ActionAffinityGrappled) //.SetParentCondition(ConditionDefinitions.ConditionRestrained) + .SetFixedAmount((int)AiContext.BreakFreeType.DoNothing) .AddToDB(); + var battlePackage = AiContext.BuildDecisionBreakFreeFromCondition( + conditionGrappledRestrainedIceBound.Name, AiContext.BreakFreeType.DoNothing); + + conditionGrappledRestrainedIceBound.addBehavior = true; + conditionGrappledRestrainedIceBound.battlePackage = battlePackage; + conditionGrappledRestrainedIceBound.specialDuration = false; conditionGrappledRestrainedIceBound.specialInterruptions.Clear(); @@ -285,9 +292,16 @@ internal static SpellDefinition BuildNoxiousSpray() .SetGuiPresentation(Category.Condition, ConditionDefinitions.ConditionDiseased) .SetPossessive() .SetConditionType(ConditionType.Detrimental) + .SetFixedAmount((int)AiContext.BreakFreeType.DoNothing) .SetFeatures(actionAffinityNoxiousSpray) .AddToDB(); + var battlePackage = AiContext.BuildDecisionBreakFreeFromCondition( + conditionNoxiousSpray.Name, AiContext.BreakFreeType.DoNothing); + + conditionNoxiousSpray.addBehavior = true; + conditionNoxiousSpray.battlePackage = battlePackage; + conditionNoxiousSpray.specialDuration = false; var spell = SpellDefinitionBuilder @@ -430,8 +444,15 @@ internal static SpellDefinition BuildWeb() .Create(ConditionGrappledRestrainedRemorhaz, $"ConditionGrappledRestrained{NAME}") .SetOrUpdateGuiPresentation(Category.Condition) .SetParentCondition(ConditionRestrainedByWeb) + .SetFixedAmount((int)AiContext.BreakFreeType.DoStrengthCheckAgainstCasterDC) .AddToDB(); + var battlePackage = AiContext.BuildDecisionBreakFreeFromCondition( + conditionRestrainedBySpellWeb.Name, AiContext.BreakFreeType.DoStrengthCheckAgainstCasterDC); + + conditionRestrainedBySpellWeb.addBehavior = true; + conditionRestrainedBySpellWeb.battlePackage = battlePackage; + conditionRestrainedBySpellWeb.specialDuration = false; conditionRestrainedBySpellWeb.specialInterruptions.Clear(); diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel06.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel06.cs index 58ad6204f4..614e03fc57 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel06.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel06.cs @@ -6,6 +6,7 @@ using SolastaUnfinishedBusiness.Builders.Features; using SolastaUnfinishedBusiness.CustomUI; using SolastaUnfinishedBusiness.Interfaces; +using SolastaUnfinishedBusiness.Models; using SolastaUnfinishedBusiness.Properties; using SolastaUnfinishedBusiness.Subclasses; using SolastaUnfinishedBusiness.Validators; @@ -454,8 +455,15 @@ internal static SpellDefinition BuildFlashFreeze() RuleDefinitions.ConditionRestrained, Category.Rules, ConditionDefinitions.ConditionChilled) .SetPossessive() .SetParentCondition(ConditionRestrainedByWeb) + .SetFixedAmount((int)AiContext.BreakFreeType.DoStrengthCheckAgainstCasterDC) .AddToDB(); + var battlePackage = AiContext.BuildDecisionBreakFreeFromCondition( + conditionFlashFreeze.Name, AiContext.BreakFreeType.DoStrengthCheckAgainstCasterDC); + + conditionFlashFreeze.addBehavior = true; + conditionFlashFreeze.battlePackage = battlePackage; + conditionFlashFreeze.specialDuration = false; conditionFlashFreeze.specialInterruptions.Clear(); From be0bcf28e79f892e6259bee66bbe066771c0e159 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sat, 7 Sep 2024 13:35:58 -0700 Subject: [PATCH 070/212] fix voxelize patch --- .../Patches/WorldSectorPatcher.cs | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-) diff --git a/SolastaUnfinishedBusiness/Patches/WorldSectorPatcher.cs b/SolastaUnfinishedBusiness/Patches/WorldSectorPatcher.cs index 64e5ab8ef6..8de9064def 100644 --- a/SolastaUnfinishedBusiness/Patches/WorldSectorPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/WorldSectorPatcher.cs @@ -21,27 +21,16 @@ public static class SetHighlightVisibility_Patch [UsedImplicitly] public static IEnumerable Transpiler([NotNull] IEnumerable instructions) { - var logError1Method = typeof(Trace).GetMethod("LogWarning", BindingFlags.Public | BindingFlags.Static, - Type.DefaultBinder, [typeof(string)], null); - var logError2Method = typeof(Trace).GetMethod("LogWarning", BindingFlags.Public | BindingFlags.Static, - Type.DefaultBinder, [typeof(string), typeof(object[])], null); - var logError3Method = typeof(Trace).GetMethod("LogWarning", BindingFlags.Public | BindingFlags.Static, + var logWarningMethod = typeof(Trace).GetMethod("LogWarning", BindingFlags.Public | BindingFlags.Static, Type.DefaultBinder, [typeof(string), typeof(Object), typeof(object[])], null); - var myLogError2Method = typeof(SetHighlightVisibility_Patch).GetMethod("LogWarning", - BindingFlags.Public | BindingFlags.Static, - Type.DefaultBinder, [typeof(string), typeof(object[])], null); - var myLogError3Method = typeof(SetHighlightVisibility_Patch).GetMethod("LogWarning", + var myLogWarningMethod = typeof(SetHighlightVisibility_Patch).GetMethod("LogWarning", BindingFlags.Public | BindingFlags.Static, Type.DefaultBinder, [typeof(string), typeof(Object), typeof(object[])], null); return instructions - .ReplaceCalls(logError1Method, "WorldSector.Voxelize1", - new CodeInstruction(OpCodes.Pop)) - .ReplaceCalls(logError2Method, "WorldSector.Voxelize2", - new CodeInstruction(OpCodes.Call, myLogError2Method)) - .ReplaceCalls(logError3Method, "WorldSector.Voxelize3", - new CodeInstruction(OpCodes.Call, myLogError3Method)); + .ReplaceCalls(logWarningMethod, "WorldSector.Voxelize1", + new CodeInstruction(OpCodes.Call, myLogWarningMethod)); } [UsedImplicitly] From 950050b62d389b9919a039d4a20241710cd6436c Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sat, 7 Sep 2024 13:39:06 -0700 Subject: [PATCH 071/212] update diagnostics --- .../ConditionFlashFreeze.json | 8 ++-- .../ConditionGrappledRestrainedEnsnared.json | 8 ++-- .../ConditionGrappledRestrainedIceBound.json | 6 +-- .../ConditionGrappledRestrainedSpellWeb.json | 8 ++-- .../ConditionNoxiousSpray.json | 6 +-- .../ConditionOathOfAncientsNaturesWrath.json | 8 ++-- .../ConditionVileBrew.json | 6 +-- ...DecisionBreakFreeConditionFlashFreeze.json | 6 +-- ...eeConditionGrappledRestrainedEnsnared.json | 6 +-- ...eeConditionGrappledRestrainedIceBound.json | 6 +-- ...eeConditionGrappledRestrainedSpellWeb.json | 6 +-- ...ecisionBreakFreeConditionNoxiousSpray.json | 6 +-- ...reakFreeConditionRestrainedByEntangle.json | 6 +-- .../DecisionBreakFreeConditionVileBrew.json | 6 +-- .../Move_DissonantWhispers.json | 4 +- ...kFreeAbilityCheckConditionFlashFreeze.json | 43 +++++++++++++++++++ ...ckConditionGrappledRestrainedEnsnared.json | 43 +++++++++++++++++++ ...ckConditionGrappledRestrainedIceBound.json | 43 +++++++++++++++++++ ...ckConditionGrappledRestrainedSpellWeb.json | 43 +++++++++++++++++++ ...FreeAbilityCheckConditionNoxiousSpray.json | 43 +++++++++++++++++++ ...ityCheckConditionRestrainedByEntangle.json | 43 +++++++++++++++++++ ...reakFreeAbilityCheckConditionVileBrew.json | 43 +++++++++++++++++++ .../ChangelogHistory.txt | 2 +- 23 files changed, 350 insertions(+), 49 deletions(-) create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/BreakFreeAbilityCheckConditionFlashFreeze.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/BreakFreeAbilityCheckConditionGrappledRestrainedEnsnared.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/BreakFreeAbilityCheckConditionGrappledRestrainedIceBound.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/BreakFreeAbilityCheckConditionGrappledRestrainedSpellWeb.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/BreakFreeAbilityCheckConditionNoxiousSpray.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/BreakFreeAbilityCheckConditionRestrainedByEntangle.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/BreakFreeAbilityCheckConditionVileBrew.json diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionFlashFreeze.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionFlashFreeze.json index d3641e97f1..b14620971b 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionFlashFreeze.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionFlashFreeze.json @@ -229,8 +229,8 @@ "timeToWaitBeforeApplyingShader": 0.5, "timeToWaitBeforeRemovingShader": 0.5, "possessive": true, - "amountOrigin": "None", - "baseAmount": 0, + "amountOrigin": "Fixed", + "baseAmount": 1, "additiveAmount": false, "sourceAbilityBonusMinValue": 1, "subsequentOnRemoval": null, @@ -240,9 +240,9 @@ "subsequentDCIncrease": 5, "effectFormsOnRemoved": [], "forceBehavior": false, - "addBehavior": false, + "addBehavior": true, "fearSource": false, - "battlePackage": null, + "battlePackage": "Definition:BreakFreeAbilityCheckConditionFlashFreeze:5578aa14-4a4c-5aa0-b787-7203e14b8a36", "explorationPackage": null, "removedFromTheGame": false, "permanentlyRemovedIfExtraPlanar": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGrappledRestrainedEnsnared.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGrappledRestrainedEnsnared.json index 49d7b5611b..99e1a9cd08 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGrappledRestrainedEnsnared.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGrappledRestrainedEnsnared.json @@ -265,8 +265,8 @@ "timeToWaitBeforeApplyingShader": 0.5, "timeToWaitBeforeRemovingShader": 0.5, "possessive": false, - "amountOrigin": "None", - "baseAmount": 0, + "amountOrigin": "Fixed", + "baseAmount": 1, "additiveAmount": false, "sourceAbilityBonusMinValue": 1, "subsequentOnRemoval": null, @@ -276,9 +276,9 @@ "subsequentDCIncrease": 5, "effectFormsOnRemoved": [], "forceBehavior": false, - "addBehavior": false, + "addBehavior": true, "fearSource": false, - "battlePackage": null, + "battlePackage": "Definition:BreakFreeAbilityCheckConditionGrappledRestrainedEnsnared:bf1d4828-465e-5897-91ca-bc8094b3d20e", "explorationPackage": null, "removedFromTheGame": false, "permanentlyRemovedIfExtraPlanar": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGrappledRestrainedIceBound.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGrappledRestrainedIceBound.json index 54088ae417..ab5c4285fd 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGrappledRestrainedIceBound.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGrappledRestrainedIceBound.json @@ -227,7 +227,7 @@ "timeToWaitBeforeApplyingShader": 0.5, "timeToWaitBeforeRemovingShader": 0.5, "possessive": false, - "amountOrigin": "None", + "amountOrigin": "Fixed", "baseAmount": 0, "additiveAmount": false, "sourceAbilityBonusMinValue": 1, @@ -238,9 +238,9 @@ "subsequentDCIncrease": 5, "effectFormsOnRemoved": [], "forceBehavior": false, - "addBehavior": false, + "addBehavior": true, "fearSource": false, - "battlePackage": null, + "battlePackage": "Definition:BreakFreeAbilityCheckConditionGrappledRestrainedIceBound:4702878b-3ac6-55e7-8954-7b1a8382aa7a", "explorationPackage": null, "removedFromTheGame": false, "permanentlyRemovedIfExtraPlanar": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGrappledRestrainedSpellWeb.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGrappledRestrainedSpellWeb.json index 6263b29f1c..9a54e8320d 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGrappledRestrainedSpellWeb.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGrappledRestrainedSpellWeb.json @@ -229,8 +229,8 @@ "timeToWaitBeforeApplyingShader": 0.5, "timeToWaitBeforeRemovingShader": 0.5, "possessive": false, - "amountOrigin": "None", - "baseAmount": 0, + "amountOrigin": "Fixed", + "baseAmount": 1, "additiveAmount": false, "sourceAbilityBonusMinValue": 1, "subsequentOnRemoval": null, @@ -240,9 +240,9 @@ "subsequentDCIncrease": 5, "effectFormsOnRemoved": [], "forceBehavior": false, - "addBehavior": false, + "addBehavior": true, "fearSource": false, - "battlePackage": null, + "battlePackage": "Definition:BreakFreeAbilityCheckConditionGrappledRestrainedSpellWeb:f265e068-e06c-503a-8aa5-dc39a214a7ec", "explorationPackage": null, "removedFromTheGame": false, "permanentlyRemovedIfExtraPlanar": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionNoxiousSpray.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionNoxiousSpray.json index 239da4d103..3fe7b842ee 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionNoxiousSpray.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionNoxiousSpray.json @@ -223,7 +223,7 @@ "timeToWaitBeforeApplyingShader": 0.5, "timeToWaitBeforeRemovingShader": 0.5, "possessive": true, - "amountOrigin": "None", + "amountOrigin": "Fixed", "baseAmount": 0, "additiveAmount": false, "sourceAbilityBonusMinValue": 1, @@ -234,9 +234,9 @@ "subsequentDCIncrease": 5, "effectFormsOnRemoved": [], "forceBehavior": false, - "addBehavior": false, + "addBehavior": true, "fearSource": false, - "battlePackage": null, + "battlePackage": "Definition:BreakFreeAbilityCheckConditionNoxiousSpray:1918a4d8-ff14-5aa1-9c20-1256e73c5730", "explorationPackage": null, "removedFromTheGame": false, "permanentlyRemovedIfExtraPlanar": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionOathOfAncientsNaturesWrath.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionOathOfAncientsNaturesWrath.json index 2e0eebdca4..fb16d956f6 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionOathOfAncientsNaturesWrath.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionOathOfAncientsNaturesWrath.json @@ -221,8 +221,8 @@ "timeToWaitBeforeApplyingShader": 0.5, "timeToWaitBeforeRemovingShader": 0.5, "possessive": false, - "amountOrigin": "None", - "baseAmount": 0, + "amountOrigin": "Fixed", + "baseAmount": 1, "additiveAmount": false, "sourceAbilityBonusMinValue": 1, "subsequentOnRemoval": null, @@ -232,9 +232,9 @@ "subsequentDCIncrease": 5, "effectFormsOnRemoved": [], "forceBehavior": false, - "addBehavior": false, + "addBehavior": true, "fearSource": false, - "battlePackage": null, + "battlePackage": "Definition:BreakFreeAbilityCheckConditionRestrainedByEntangle:0d9623d9-0cd7-5c03-8275-e9e61f0f1b6a", "explorationPackage": null, "removedFromTheGame": false, "permanentlyRemovedIfExtraPlanar": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionVileBrew.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionVileBrew.json index 78c9314f92..67131fe9ae 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionVileBrew.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionVileBrew.json @@ -261,7 +261,7 @@ "timeToWaitBeforeApplyingShader": 0.5, "timeToWaitBeforeRemovingShader": 0.5, "possessive": false, - "amountOrigin": "None", + "amountOrigin": "Fixed", "baseAmount": 0, "additiveAmount": false, "sourceAbilityBonusMinValue": 1, @@ -272,9 +272,9 @@ "subsequentDCIncrease": 5, "effectFormsOnRemoved": [], "forceBehavior": false, - "addBehavior": false, + "addBehavior": true, "fearSource": false, - "battlePackage": null, + "battlePackage": "Definition:BreakFreeAbilityCheckConditionVileBrew:7b202c71-3241-5f80-8b02-ada4a0d9383f", "explorationPackage": null, "removedFromTheGame": false, "permanentlyRemovedIfExtraPlanar": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionFlashFreeze.json b/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionFlashFreeze.json index a4eeaf309e..d914b006c8 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionFlashFreeze.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionFlashFreeze.json @@ -2,7 +2,7 @@ "$type": "TA.AI.DecisionDefinition, Assembly-CSharp", "decision": { "$type": "TA.AI.DecisionDescription, Assembly-CSharp", - "description": "if restrained and can use main action, try to break free", + "description": "if restrained from ConditionFlashFreeze, and can use main action, try to break free", "scorer": { "$type": "TA.AI.ActivityScorerDefinition, Assembly-CSharp", "scorer": { @@ -54,10 +54,10 @@ } ] }, - "name": "BreakFree" + "name": "BreakFreeConditionFlashFreeze" }, "activityType": "BreakFree", - "stringParameter": "2", + "stringParameter": "1", "stringSecParameter": "", "boolParameter": false, "boolSecParameter": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionGrappledRestrainedEnsnared.json b/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionGrappledRestrainedEnsnared.json index 03f6a47058..0bc1bb2353 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionGrappledRestrainedEnsnared.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionGrappledRestrainedEnsnared.json @@ -2,7 +2,7 @@ "$type": "TA.AI.DecisionDefinition, Assembly-CSharp", "decision": { "$type": "TA.AI.DecisionDescription, Assembly-CSharp", - "description": "if restrained and can use main action, try to break free", + "description": "if restrained from ConditionGrappledRestrainedEnsnared, and can use main action, try to break free", "scorer": { "$type": "TA.AI.ActivityScorerDefinition, Assembly-CSharp", "scorer": { @@ -54,10 +54,10 @@ } ] }, - "name": "BreakFree" + "name": "BreakFreeConditionGrappledRestrainedEnsnared" }, "activityType": "BreakFree", - "stringParameter": "2", + "stringParameter": "1", "stringSecParameter": "", "boolParameter": false, "boolSecParameter": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionGrappledRestrainedIceBound.json b/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionGrappledRestrainedIceBound.json index 9560fd47d2..c0d383d66a 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionGrappledRestrainedIceBound.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionGrappledRestrainedIceBound.json @@ -2,7 +2,7 @@ "$type": "TA.AI.DecisionDefinition, Assembly-CSharp", "decision": { "$type": "TA.AI.DecisionDescription, Assembly-CSharp", - "description": "if restrained and can use main action, try to break free", + "description": "if restrained from ConditionGrappledRestrainedIceBound, and can use main action, try to break free", "scorer": { "$type": "TA.AI.ActivityScorerDefinition, Assembly-CSharp", "scorer": { @@ -54,10 +54,10 @@ } ] }, - "name": "BreakFree" + "name": "BreakFreeConditionGrappledRestrainedIceBound" }, "activityType": "BreakFree", - "stringParameter": "1", + "stringParameter": "0", "stringSecParameter": "", "boolParameter": false, "boolSecParameter": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionGrappledRestrainedSpellWeb.json b/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionGrappledRestrainedSpellWeb.json index 6ff7438b6d..26fb5c83e5 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionGrappledRestrainedSpellWeb.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionGrappledRestrainedSpellWeb.json @@ -2,7 +2,7 @@ "$type": "TA.AI.DecisionDefinition, Assembly-CSharp", "decision": { "$type": "TA.AI.DecisionDescription, Assembly-CSharp", - "description": "if restrained and can use main action, try to break free", + "description": "if restrained from ConditionGrappledRestrainedSpellWeb, and can use main action, try to break free", "scorer": { "$type": "TA.AI.ActivityScorerDefinition, Assembly-CSharp", "scorer": { @@ -54,10 +54,10 @@ } ] }, - "name": "BreakFree" + "name": "BreakFreeConditionGrappledRestrainedSpellWeb" }, "activityType": "BreakFree", - "stringParameter": "2", + "stringParameter": "1", "stringSecParameter": "", "boolParameter": false, "boolSecParameter": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionNoxiousSpray.json b/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionNoxiousSpray.json index 95e4a44133..964d6d61b2 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionNoxiousSpray.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionNoxiousSpray.json @@ -2,7 +2,7 @@ "$type": "TA.AI.DecisionDefinition, Assembly-CSharp", "decision": { "$type": "TA.AI.DecisionDescription, Assembly-CSharp", - "description": "if restrained and can use main action, try to break free", + "description": "if restrained from ConditionNoxiousSpray, and can use main action, try to break free", "scorer": { "$type": "TA.AI.ActivityScorerDefinition, Assembly-CSharp", "scorer": { @@ -54,10 +54,10 @@ } ] }, - "name": "BreakFree" + "name": "BreakFreeConditionNoxiousSpray" }, "activityType": "BreakFree", - "stringParameter": "1", + "stringParameter": "0", "stringSecParameter": "", "boolParameter": false, "boolSecParameter": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionRestrainedByEntangle.json b/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionRestrainedByEntangle.json index e6a5f84791..63c72429ea 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionRestrainedByEntangle.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionRestrainedByEntangle.json @@ -2,7 +2,7 @@ "$type": "TA.AI.DecisionDefinition, Assembly-CSharp", "decision": { "$type": "TA.AI.DecisionDescription, Assembly-CSharp", - "description": "if restrained and can use main action, try to break free", + "description": "if restrained from ConditionRestrainedByEntangle, and can use main action, try to break free", "scorer": { "$type": "TA.AI.ActivityScorerDefinition, Assembly-CSharp", "scorer": { @@ -54,10 +54,10 @@ } ] }, - "name": "BreakFree" + "name": "BreakFreeConditionRestrainedByEntangle" }, "activityType": "BreakFree", - "stringParameter": "2", + "stringParameter": "1", "stringSecParameter": "", "boolParameter": false, "boolSecParameter": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionVileBrew.json b/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionVileBrew.json index c3add13f22..ba796de5e2 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionVileBrew.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionVileBrew.json @@ -2,7 +2,7 @@ "$type": "TA.AI.DecisionDefinition, Assembly-CSharp", "decision": { "$type": "TA.AI.DecisionDescription, Assembly-CSharp", - "description": "if restrained and can use main action, try to break free", + "description": "if restrained from ConditionVileBrew, and can use main action, try to break free", "scorer": { "$type": "TA.AI.ActivityScorerDefinition, Assembly-CSharp", "scorer": { @@ -54,10 +54,10 @@ } ] }, - "name": "BreakFree" + "name": "BreakFreeConditionVileBrew" }, "activityType": "BreakFree", - "stringParameter": "1", + "stringParameter": "0", "stringSecParameter": "", "boolParameter": false, "boolSecParameter": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/Move_DissonantWhispers.json b/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/Move_DissonantWhispers.json index 63bbc05920..2cd7eb8447 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/Move_DissonantWhispers.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/Move_DissonantWhispers.json @@ -40,7 +40,7 @@ "curve": { "$type": "UnityEngine.AnimationCurve, UnityEngine.CoreModule" }, - "stringParameter": "ConditionCommandSpellApproach", + "stringParameter": "", "floatParameter": 3.0, "intParameter": 2, "byteParameter": 0, @@ -62,7 +62,7 @@ "curve": { "$type": "UnityEngine.AnimationCurve, UnityEngine.CoreModule" }, - "stringParameter": "ConditionCommandSpellApproach", + "stringParameter": "", "floatParameter": 6.0, "intParameter": 1, "byteParameter": 0, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/BreakFreeAbilityCheckConditionFlashFreeze.json b/Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/BreakFreeAbilityCheckConditionFlashFreeze.json new file mode 100644 index 0000000000..3a22fe1668 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/BreakFreeAbilityCheckConditionFlashFreeze.json @@ -0,0 +1,43 @@ +{ + "$type": "TA.AI.DecisionPackageDefinition, Assembly-CSharp", + "dungeonMakerPresence": false, + "package": { + "$type": "TA.AI.DecisionPackageDescription, Assembly-CSharp", + "weightedDecisions": [ + { + "$type": "TA.AI.WeightedDecisionDescription, Assembly-CSharp", + "decision": "Definition:DecisionBreakFreeConditionFlashFreeze:c1790fe7-d377-51c3-8bd4-3ff2556b771e", + "weight": 1.0, + "cooldown": 0, + "dynamicCooldown": false + } + ] + }, + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": true, + "title": "Feature/&NoContentTitle", + "description": "Feature/&NoContentTitle", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "5578aa14-4a4c-5aa0-b787-7203e14b8a36", + "contentPack": 9999, + "name": "BreakFreeAbilityCheckConditionFlashFreeze" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/BreakFreeAbilityCheckConditionGrappledRestrainedEnsnared.json b/Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/BreakFreeAbilityCheckConditionGrappledRestrainedEnsnared.json new file mode 100644 index 0000000000..bfbb211ef6 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/BreakFreeAbilityCheckConditionGrappledRestrainedEnsnared.json @@ -0,0 +1,43 @@ +{ + "$type": "TA.AI.DecisionPackageDefinition, Assembly-CSharp", + "dungeonMakerPresence": false, + "package": { + "$type": "TA.AI.DecisionPackageDescription, Assembly-CSharp", + "weightedDecisions": [ + { + "$type": "TA.AI.WeightedDecisionDescription, Assembly-CSharp", + "decision": "Definition:DecisionBreakFreeConditionGrappledRestrainedEnsnared:69855aed-d774-527f-9de3-8de1e5a9743f", + "weight": 1.0, + "cooldown": 0, + "dynamicCooldown": false + } + ] + }, + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": true, + "title": "Feature/&NoContentTitle", + "description": "Feature/&NoContentTitle", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "bf1d4828-465e-5897-91ca-bc8094b3d20e", + "contentPack": 9999, + "name": "BreakFreeAbilityCheckConditionGrappledRestrainedEnsnared" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/BreakFreeAbilityCheckConditionGrappledRestrainedIceBound.json b/Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/BreakFreeAbilityCheckConditionGrappledRestrainedIceBound.json new file mode 100644 index 0000000000..310c09bd99 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/BreakFreeAbilityCheckConditionGrappledRestrainedIceBound.json @@ -0,0 +1,43 @@ +{ + "$type": "TA.AI.DecisionPackageDefinition, Assembly-CSharp", + "dungeonMakerPresence": false, + "package": { + "$type": "TA.AI.DecisionPackageDescription, Assembly-CSharp", + "weightedDecisions": [ + { + "$type": "TA.AI.WeightedDecisionDescription, Assembly-CSharp", + "decision": "Definition:DecisionBreakFreeConditionGrappledRestrainedIceBound:017c5b82-f11c-5899-8729-947eabcf949f", + "weight": 1.0, + "cooldown": 0, + "dynamicCooldown": false + } + ] + }, + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": true, + "title": "Feature/&NoContentTitle", + "description": "Feature/&NoContentTitle", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "4702878b-3ac6-55e7-8954-7b1a8382aa7a", + "contentPack": 9999, + "name": "BreakFreeAbilityCheckConditionGrappledRestrainedIceBound" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/BreakFreeAbilityCheckConditionGrappledRestrainedSpellWeb.json b/Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/BreakFreeAbilityCheckConditionGrappledRestrainedSpellWeb.json new file mode 100644 index 0000000000..f65d0c064d --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/BreakFreeAbilityCheckConditionGrappledRestrainedSpellWeb.json @@ -0,0 +1,43 @@ +{ + "$type": "TA.AI.DecisionPackageDefinition, Assembly-CSharp", + "dungeonMakerPresence": false, + "package": { + "$type": "TA.AI.DecisionPackageDescription, Assembly-CSharp", + "weightedDecisions": [ + { + "$type": "TA.AI.WeightedDecisionDescription, Assembly-CSharp", + "decision": "Definition:DecisionBreakFreeConditionGrappledRestrainedSpellWeb:61e7fc96-8cb5-5c2b-8a67-75fbef4f333a", + "weight": 1.0, + "cooldown": 0, + "dynamicCooldown": false + } + ] + }, + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": true, + "title": "Feature/&NoContentTitle", + "description": "Feature/&NoContentTitle", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "f265e068-e06c-503a-8aa5-dc39a214a7ec", + "contentPack": 9999, + "name": "BreakFreeAbilityCheckConditionGrappledRestrainedSpellWeb" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/BreakFreeAbilityCheckConditionNoxiousSpray.json b/Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/BreakFreeAbilityCheckConditionNoxiousSpray.json new file mode 100644 index 0000000000..a67b09564a --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/BreakFreeAbilityCheckConditionNoxiousSpray.json @@ -0,0 +1,43 @@ +{ + "$type": "TA.AI.DecisionPackageDefinition, Assembly-CSharp", + "dungeonMakerPresence": false, + "package": { + "$type": "TA.AI.DecisionPackageDescription, Assembly-CSharp", + "weightedDecisions": [ + { + "$type": "TA.AI.WeightedDecisionDescription, Assembly-CSharp", + "decision": "Definition:DecisionBreakFreeConditionNoxiousSpray:2f033fcf-d478-5581-94d9-27a3ad4496ad", + "weight": 1.0, + "cooldown": 0, + "dynamicCooldown": false + } + ] + }, + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": true, + "title": "Feature/&NoContentTitle", + "description": "Feature/&NoContentTitle", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "1918a4d8-ff14-5aa1-9c20-1256e73c5730", + "contentPack": 9999, + "name": "BreakFreeAbilityCheckConditionNoxiousSpray" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/BreakFreeAbilityCheckConditionRestrainedByEntangle.json b/Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/BreakFreeAbilityCheckConditionRestrainedByEntangle.json new file mode 100644 index 0000000000..4a09e6c4fd --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/BreakFreeAbilityCheckConditionRestrainedByEntangle.json @@ -0,0 +1,43 @@ +{ + "$type": "TA.AI.DecisionPackageDefinition, Assembly-CSharp", + "dungeonMakerPresence": false, + "package": { + "$type": "TA.AI.DecisionPackageDescription, Assembly-CSharp", + "weightedDecisions": [ + { + "$type": "TA.AI.WeightedDecisionDescription, Assembly-CSharp", + "decision": "Definition:DecisionBreakFreeConditionRestrainedByEntangle:2a416669-5ec8-53c1-b07b-8fe6f29da4d2", + "weight": 1.0, + "cooldown": 0, + "dynamicCooldown": false + } + ] + }, + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": true, + "title": "Feature/&NoContentTitle", + "description": "Feature/&NoContentTitle", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "0d9623d9-0cd7-5c03-8275-e9e61f0f1b6a", + "contentPack": 9999, + "name": "BreakFreeAbilityCheckConditionRestrainedByEntangle" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/BreakFreeAbilityCheckConditionVileBrew.json b/Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/BreakFreeAbilityCheckConditionVileBrew.json new file mode 100644 index 0000000000..2369e8ed05 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/BreakFreeAbilityCheckConditionVileBrew.json @@ -0,0 +1,43 @@ +{ + "$type": "TA.AI.DecisionPackageDefinition, Assembly-CSharp", + "dungeonMakerPresence": false, + "package": { + "$type": "TA.AI.DecisionPackageDescription, Assembly-CSharp", + "weightedDecisions": [ + { + "$type": "TA.AI.WeightedDecisionDescription, Assembly-CSharp", + "decision": "Definition:DecisionBreakFreeConditionVileBrew:4b3278e8-334a-58d6-8c75-2f48e28b4e54", + "weight": 1.0, + "cooldown": 0, + "dynamicCooldown": false + } + ] + }, + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": true, + "title": "Feature/&NoContentTitle", + "description": "Feature/&NoContentTitle", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "7b202c71-3241-5f80-8b02-ada4a0d9383f", + "contentPack": 9999, + "name": "BreakFreeAbilityCheckConditionVileBrew" +} \ No newline at end of file diff --git a/SolastaUnfinishedBusiness/ChangelogHistory.txt b/SolastaUnfinishedBusiness/ChangelogHistory.txt index 2cc27533b6..e91cada956 100644 --- a/SolastaUnfinishedBusiness/ChangelogHistory.txt +++ b/SolastaUnfinishedBusiness/ChangelogHistory.txt @@ -5,7 +5,7 @@ - fixed Barbarian Sundering Blow interaction with Call Lightning, and other proxy like powers - fixed Bardic Inspiration, Indomitable Resistances, and Legendary Resistances saving throw logic - fixed Bend Luck, Flash of Genius, Inspiring Protection, Shield Master, and Weal/Woe not consuming reaction -- fixed countered, and execution failed checks on custom behaviors triggering logic +- fixed countered, and execution failed checks on custom behaviors logic - fixed Dwarven Fortitude, and Magical Guidance incorrectly consuming a reaction - fixed Exploiter feat not checking for reactions from 2nd target onwards - fixed Lucky, and Mage Slayer feats double consumption From 96c561e001e4c69815bbf53ea4a78d88f6ca7371 Mon Sep 17 00:00:00 2001 From: Dovel Date: Sun, 8 Sep 2024 00:59:28 +0300 Subject: [PATCH 072/212] update russian translation --- .../Translations/ru/Others-ru.txt | 2 +- .../Translations/ru/Settings-ru.txt | 4 ++-- .../Translations/ru/Spells/Spells01-ru.txt | 24 +++++++++---------- 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt index d810d483ea..25a3262432 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt @@ -306,7 +306,7 @@ Tooltip/&Tag9000Title=Кастомный эффект Tooltip/&TagDamageChaosBoltTitle=Хаотичный урон Tooltip/&TagUnfinishedBusinessTitle=Неоконченное Дело Tooltip/&TargetMeleeWeaponError=Невозможно провести атаку ближнего боя по этой цели, так как она находится вне пределов {0} -Tooltip/&TargetMustUnderstandYou=Цель должна понимать вашу команду. +Tooltip/&TargetMustUnderstandYou=Цель должна понимать ваш приказ UI/&CustomFeatureSelectionStageDescription=Выберите дополнительные черты для вашего класса/архетипа. UI/&CustomFeatureSelectionStageFeatures=Черты UI/&CustomFeatureSelectionStageNotDone=Вы должны выбрать все черты перед продолжением diff --git a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt index 8031f207cd..5424604934 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt @@ -89,7 +89,7 @@ ModUi/&DocsSubclasses=Архетипы ModUi/&DocsSubraces=Разновидности ModUi/&DocsVersatilities=Универсалии ModUi/&Donate=Задонатить: {0} -ModUi/&DontDisplayHelmets=Не отображать шлемы на графических персонажах [Требуется перезапуск] +ModUi/&DontDisplayHelmets=Скрывать шлемы на персонажах [Необходим перезапуск] ModUi/&DontEndTurnAfterReady=Не заканчивать ход после использования действия Подготовка [позволяет использовать Бонусное действие или любые дополнительные основные действия от Ускорения или других источников] ModUi/&DontFollowCharacterInBattle=Боевая камера не следует за персонажем, если он уже на экране ModUi/&DontFollowMargin=+ Только если герой вне или в рамках % от границы экрана @@ -234,7 +234,7 @@ ModUi/&MarkInvisibleTeleportersOnLevelMap=+ Также помечать ме ModUi/&MaxAllowedClasses=Максимальное разрешённое количество классов ModUi/&Merchants=Торговцы: ModUi/&Metamagic=Метамагия -ModUi/&ModUi/&EnableCtrlClickDragToBypassQuestItemsOnDrop=Включите CTRL щелчок-перетаскивание, чтобы обойти проверки предметов задания при выпадении +ModUi/&ModUi/&EnableCtrlClickDragToBypassQuestItemsOnDrop=Включить обход проверки квестовых предметов для выкидывания при перетаскивание с зажатым CTRL ModUi/&Monsters=Монстры: ModUi/&MovementGridWidthModifier=Увеличить ширину сетки передвижения на множитель [%] ModUi/&MulticlassKeyHelp=Нажатие с SHIFT по заклинанию переключает тип затрачиваемой ячейки по умолчанию\n[Колдун тратит белые ячейки заклинаний, а остальные - зелёные ячейки колдуна] diff --git a/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells01-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells01-ru.txt index 2ad2565dad..e85a7cf7df 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells01-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells01-ru.txt @@ -30,14 +30,14 @@ Condition/&ConditionWitchBoltTitle=Ведьмин снаряд Feature/&FeatureGiftOfAlacrityDescription=Вы можете добавить 1d8 к вашим броскам инициативы. Feature/&FeatureGiftOfAlacrityTitle=Дар готовности Feature/&PowerChaosBoltDescription=Использован урон типа {0}. -Feature/&PowerCommandSpellApproachDescription=Цель движется к вам по кратчайшему и самому прямому маршруту, заканчивая свой ход, если она перемещается в пределах 5 футов от вас. -Feature/&PowerCommandSpellApproachTitle=Подход -Feature/&PowerCommandSpellFleeDescription=Цель тратит свой ход на то, чтобы удалиться от вас максимально быстрым доступным способом. -Feature/&PowerCommandSpellFleeTitle=Бежать -Feature/&PowerCommandSpellGrovelDescription=Цель падает ничком и завершает свой ход. -Feature/&PowerCommandSpellGrovelTitle=Пресмыкаться -Feature/&PowerCommandSpellHaltDescription=Цель не двигается и не предпринимает никаких действий. -Feature/&PowerCommandSpellHaltTitle=Остановить +Feature/&PowerCommandSpellApproachDescription=Цель перемещается ближе к вам по кратчайшему и самому прямому маршруту, оканчивая ход, если оказывается в пределах 5 футов от вас. +Feature/&PowerCommandSpellApproachTitle=Подойди +Feature/&PowerCommandSpellFleeDescription=Цель тратит ход на то, что перемещается прочь от вас самым быстрым способом. +Feature/&PowerCommandSpellFleeTitle=Убегай +Feature/&PowerCommandSpellGrovelDescription=Цель падает ничком и оканчивает ход. +Feature/&PowerCommandSpellGrovelTitle=Падай +Feature/&PowerCommandSpellHaltDescription=Цель не перемещается и не совершает никаких действий. +Feature/&PowerCommandSpellHaltTitle=Стой Feature/&PowerStrikeWithTheWindDescription=Дарует преимущество на вашу следующую атаку оружием и наносит дополнительно 1d8 урона силовым полем при попадании. Вне зависимости от того, попали вы или промахнулись, ваша скорость ходьбы увеличивается на 30 футов до конца этого хода. Feature/&PowerStrikeWithTheWindTitle=Удар Зефира Feedback/&AdditionalDamageElementalInfusionAcidFormat=Поглощение стихий! @@ -82,10 +82,10 @@ Spell/&ChaosBoltDescription=Вы бросаете волнистую, трепе Spell/&ChaosBoltTitle=Снаряд хаоса Spell/&ChromaticOrbDescription=Вы бросаете 4-дюймовую сферу энергии в существо, которое видите в пределах дистанции. Выберите звук, кислоту, огонь, холод, электричество или яд при создании сферы, а затем совершите по цели дальнобойную атаку заклинанием. Если атака попадает, существо получает 3d8 урона выбранного вида. Spell/&ChromaticOrbTitle=Цветной шарик -Spell/&CommandSpellDescription=Вы произносите однословную команду существу, которое видите в пределах досягаемости. Цель должна преуспеть в спасброске Мудрости или выполнить команду на следующем ходу. Вы можете командовать только существами, с которыми у вас общий язык, включая всех гуманоидов. Чтобы командовать негуманоидным существом, вы должны знать Драконий для драконов, Эльфийский для фей, Гигантский для великанов, Инфернальный для демонов и Терранский для элементалей. Команды следующие:\n• Приближение: цель движется к вам по кратчайшему и самому прямому маршруту, заканчивая свой ход, если она движется в пределах 5 футов от вас.\n• Бегство: цель проводит свой ход, удаляясь от вас максимально быстрым доступным способом.\n• Пресмыкание: цель падает ничком и затем заканчивает свой ход.\n• Остановка: цель не двигается и не предпринимает никаких действий.\nКогда вы произносите это заклинание, используя ячейку заклинания 2-го уровня или выше, вы можете выбрать в качестве цели дополнительное существо в пределах дальности для каждого уровня ячейки выше 2-го. -Spell/&CommandSpellTitle=Команда -Spell/&DissonantWhispersDescription=Вы шепчете диссонирующую мелодию, которую может услышать только одно существо по вашему выбору в пределах досягаемости, причиняя ему ужасную боль. Цель должна сделать спасбросок Мудрости. При провале она получает 3d6 психического урона и должна немедленно использовать свою реакцию, если она доступна, чтобы отойти от вас как можно дальше, насколько позволяет ее скорость. Существо не перемещается в явно опасную местность, такую ​​как огонь или яма. При успешном спасброске цель получает половину урона и ей не нужно отходить. Когда вы произносите это заклинание, используя ячейку заклинания 2-го уровня или выше, урон увеличивается на 1d6 за каждый уровень ячейки выше 1-го. -Spell/&DissonantWhispersTitle=Диссонансный шепот +Spell/&CommandSpellDescription=Вы произносите команду из одного слова существу, которое видите в пределах дистанции. Цель должна преуспеть в спасброске Мудрости, иначе в свой следующий ход будет исполнять эту команду. Вы можете отдавать приказы только существами, которые понимают ваш язык, включая всех гуманоидов. Чтобы отдавать приказы негуманоидным существам, вы должны знать Драконий язык для драконов, Эльфийский язык для фей, Великаний язык для великанов, Инфернальный язык для демонов и Изначальниый для элементалей. Приказы могут быть следующими:\n• Подойди: Цель перемещается ближе к вам по кратчайшему и самому прямому маршруту, оканчивая ход, если оказывается в пределах 5 футов от вас.\n• Убегай: Цель тратит ход на то, что перемещается прочь от вас самым быстрым способом.\n• Падай: Цель падает ничком и оканчивает ход.\n• Стой: Цель не перемещается и не совершает никаких действий.\nЕсли вы накладываете это заклинание, используя ячейку 2-го уровня или выше, вы можете воздействовать на одно дополнительное существо за каждый уровень ячейки выше первого. +Spell/&CommandSpellTitle=Приказ +Spell/&DissonantWhispersDescription=Вы шёпотом пропеваете нестройную мелодию, которую слышит только выбранное вами существо в пределах дистанции, и которая причиняет ему жуткую боль. Цель должна совершить спасбросок Мудрости. В случае провала она получает урон психической энергией 3d6 и должна немедленно реакцией, если она доступна, переместиться прочь от вас настолько далеко, насколько позволяет её скорость. Существо не будет входить в очевидно опасные места, такие как огонь или яма. В случае успеха цель получает половину урона и не должна отходить. Если вы накладываете это заклинание, используя ячейку 2-го уровня или выше, урон увеличивается на 1d6 за каждый уровень ячейки выше первого. +Spell/&DissonantWhispersTitle=Диссонирующий шёпот Spell/&EarthTremorDescription=Вы сотрясаете землю в пределах дистанции. Все существа, кроме вас, в этой области должны совершить спасбросок Ловкости. При провале существо получает 1к6 дробящего урона и сбивается с ног. Если поверхность представляет собой рыхлую землю или камень, то область воздействия становится труднопроходимой местностью. Spell/&EarthTremorTitle=Дрожь земли Spell/&ElementalInfusionDescription=Заклинание поглощает часть энергии, направленной на вас, ослабляя эффект и запасая эту энергию для использования во время следующей рукопашной атаки. До начала своего следующего хода вы получаете сопротивление тому виду урона, который спровоцировал данное заклинание. Кроме того, когда вы впервые попадаете рукопашной атакой в следующем ходу, цель получает дополнительно 1d6 урона этого вида, после чего заклинание заканчивается. Если вы накладываете это заклинание, используя ячейку 2-го уровня или выше, то дополнительный урон увеличивается на 1d6 за каждый уровень ячейки выше 1-го. From 2fa0c7d8146c8f43511167111069ff24ecd05c75 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sat, 7 Sep 2024 16:25:44 -0700 Subject: [PATCH 073/212] tweak Ai context --- .../Builders/DecisionDefinitionBuilder.cs | 2 + SolastaUnfinishedBusiness/Models/AiContext.cs | 65 ++++---- .../Activities/ActivitiesBreakFreePatcher.cs | 7 +- .../Spells/SpellBuildersLevel01.cs | 156 ++++++++++-------- .../Spells/SpellBuildersLevel02.cs | 6 +- .../Spells/SpellBuildersLevel06.cs | 2 +- 6 files changed, 129 insertions(+), 109 deletions(-) diff --git a/SolastaUnfinishedBusiness/Builders/DecisionDefinitionBuilder.cs b/SolastaUnfinishedBusiness/Builders/DecisionDefinitionBuilder.cs index 4d80babba3..a37a503246 100644 --- a/SolastaUnfinishedBusiness/Builders/DecisionDefinitionBuilder.cs +++ b/SolastaUnfinishedBusiness/Builders/DecisionDefinitionBuilder.cs @@ -15,6 +15,7 @@ internal DecisionDefinitionBuilder SetDecisionDescription( string stringParameter = "", string stringSecParameter = "", bool boolParameter = false, + bool boolSecParameter = false, float floatParameter = 0, int enumParameter = 0) { @@ -26,6 +27,7 @@ internal DecisionDefinitionBuilder SetDecisionDescription( stringParameter = stringParameter, stringSecParameter = stringSecParameter, boolParameter = boolParameter, + boolSecParameter = boolSecParameter, floatParameter = floatParameter, enumParameter = enumParameter }; diff --git a/SolastaUnfinishedBusiness/Models/AiContext.cs b/SolastaUnfinishedBusiness/Models/AiContext.cs index 258e29acfd..da67f0cb96 100644 --- a/SolastaUnfinishedBusiness/Models/AiContext.cs +++ b/SolastaUnfinishedBusiness/Models/AiContext.cs @@ -1,6 +1,4 @@ -using System.Linq; -using SolastaUnfinishedBusiness.Api; -using SolastaUnfinishedBusiness.Api.LanguageExtensions; +using SolastaUnfinishedBusiness.Api; using SolastaUnfinishedBusiness.Builders; using TA.AI; using TA.AI.Activities; @@ -18,15 +16,31 @@ internal static ActivityScorerDefinition CreateActivityScorer( var result = Object.Instantiate(baseScorer); result.name = name; - result.scorer = result.Scorer.DeepCopy(); + result.scorer = new ActivityScorer(); - result.scorer.WeightedConsiderations.SetRange(result.scorer.WeightedConsiderations.Select(x => - new WeightedConsiderationDescription + // ReSharper disable once ForeachCanBePartlyConvertedToQueryUsingAnotherGetEnumerator + foreach (var weightedConsideration in baseScorer.scorer.WeightedConsiderations) + { + var sourceDescription = weightedConsideration.Consideration; + var targetDescription = new ConsiderationDescription { - consideration = - CreateConsiderationDefinition(x.consideration.name, x.consideration.Consideration), - weight = x.weight - }).ToList()); + considerationType = sourceDescription.considerationType, + curve = AnimationCurve.Constant(0f, 1f, 1f), + boolParameter = sourceDescription.boolParameter, + boolSecParameter = sourceDescription.boolSecParameter, + boolTerParameter = sourceDescription.boolTerParameter, + byteParameter = sourceDescription.byteParameter, + intParameter = sourceDescription.intParameter, + floatParameter = sourceDescription.floatParameter, + stringParameter = sourceDescription.stringParameter + }; + + var weightedConsiderationDescription = new WeightedConsiderationDescription( + CreateConsiderationDefinition(weightedConsideration.ConsiderationDefinition.name, targetDescription), + weightedConsideration.weight); + + result.scorer.WeightedConsiderations.Add(weightedConsiderationDescription); + } return result; } @@ -40,7 +54,7 @@ private static ConsiderationDefinition CreateConsiderationDefinition( var result = Object.Instantiate(baseDescription); result.name = name; - result.consideration = consideration.DeepCopy(); + result.consideration = consideration; return result; } @@ -50,19 +64,17 @@ internal static void Load() ConditionRestrainedByEntangle.amountOrigin = ConditionDefinition.OriginOfAmount.Fixed; ConditionRestrainedByEntangle.baseAmount = (int)BreakFreeType.DoStrengthCheckAgainstCasterDC; - var battlePackage = BuildDecisionBreakFreeFromCondition(ConditionRestrainedByEntangle.Name, - BreakFreeType.DoStrengthCheckAgainstCasterDC); + var battlePackage = BuildDecisionPackageBreakFree( + ConditionRestrainedByEntangle.Name, BreakFreeType.DoStrengthCheckAgainstCasterDC); ConditionRestrainedByEntangle.addBehavior = true; ConditionRestrainedByEntangle.battlePackage = battlePackage; } - internal static DecisionPackageDefinition BuildDecisionBreakFreeFromCondition( - string conditionName, BreakFreeType action) + internal static DecisionPackageDefinition BuildDecisionPackageBreakFree(string conditionName, BreakFreeType action) { - var mainActionNotFullyConsumed = new WeightedConsiderationDescription - { - consideration = CreateConsiderationDefinition( + var mainActionNotFullyConsumed = new WeightedConsiderationDescription( + CreateConsiderationDefinition( "MainActionNotFullyConsumed", new ConsiderationDescription { @@ -70,13 +82,10 @@ internal static DecisionPackageDefinition BuildDecisionBreakFreeFromCondition( stringParameter = string.Empty, boolParameter = true, floatParameter = 1f - }), - weight = 1f - }; + }), 1f); - var hasConditionBreakFree = new WeightedConsiderationDescription - { - consideration = CreateConsiderationDefinition( + var hasConditionBreakFree = new WeightedConsiderationDescription( + CreateConsiderationDefinition( $"Has{conditionName}", new ConsiderationDescription { @@ -85,9 +94,7 @@ internal static DecisionPackageDefinition BuildDecisionBreakFreeFromCondition( boolParameter = true, intParameter = 2, floatParameter = 2f - }), - weight = 1f - }; + }), 1f); // create scorer @@ -103,9 +110,7 @@ internal static DecisionPackageDefinition BuildDecisionBreakFreeFromCondition( $"if restrained from {conditionName}, and can use main action, try to break free", nameof(BreakFree), scorerBreakFree, - ((int)action).ToString(), - enumParameter: 1, - floatParameter: 3f) + enumParameter: (int)action) .AddToDB(); var packageBreakFree = DecisionPackageDefinitionBuilder diff --git a/SolastaUnfinishedBusiness/Patches/Activities/ActivitiesBreakFreePatcher.cs b/SolastaUnfinishedBusiness/Patches/Activities/ActivitiesBreakFreePatcher.cs index 483f7f471c..37359afb44 100644 --- a/SolastaUnfinishedBusiness/Patches/Activities/ActivitiesBreakFreePatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/Activities/ActivitiesBreakFreePatcher.cs @@ -51,7 +51,7 @@ public static IEnumerator Postfix( var success = true; // no ability check - switch ((AiContext.BreakFreeType)int.Parse(decisionDefinition.Decision.StringParameter)) + switch ((AiContext.BreakFreeType)decisionDefinition.Decision.enumParameter) { case AiContext.BreakFreeType.DoNothing: rulesetCharacter.RemoveCondition(restrainingCondition); @@ -121,10 +121,7 @@ is RollOutcome.Success } gameLocationCharacter.SpendActionType(ActionDefinitions.ActionType.Main); - - var breakFreeExecuted = rulesetCharacter.BreakFreeExecuted; - - breakFreeExecuted?.Invoke(rulesetCharacter, success); + rulesetCharacter.BreakFreeExecuted?.Invoke(rulesetCharacter, success); } } } diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs index 1844a30803..31538d6a1c 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs @@ -13,6 +13,7 @@ using SolastaUnfinishedBusiness.Models; using SolastaUnfinishedBusiness.Validators; using TA.AI; +using TA.AI.Activities; using UnityEngine.AddressableAssets; using static ActionDefinitions; using static RuleDefinitions; @@ -229,7 +230,7 @@ internal static SpellDefinition BuildEnsnaringStrike() .CopyParticleReferences(Entangle) .AddToDB(); - var battlePackage = AiContext.BuildDecisionBreakFreeFromCondition( + var battlePackage = AiContext.BuildDecisionPackageBreakFree( conditionEnsnared.Name, AiContext.BreakFreeType.DoStrengthCheckAgainstCasterDC); conditionEnsnared.addBehavior = true; @@ -662,7 +663,7 @@ internal static SpellDefinition BuildVileBrew() .AddToDB(); var battlePackage = - AiContext.BuildDecisionBreakFreeFromCondition(conditionVileBrew.Name, AiContext.BreakFreeType.DoNothing); + AiContext.BuildDecisionPackageBreakFree(conditionVileBrew.Name, AiContext.BreakFreeType.DoNothing); conditionVileBrew.addBehavior = true; conditionVileBrew.battlePackage = battlePackage; @@ -1270,7 +1271,7 @@ internal static SpellDefinition BuildCommand() .SetGuiPresentationNoContent(true) .SetDecisionDescription( "Go as close as possible to enemies.", - "Move", + nameof(Move), scorerApproach) .AddToDB(); @@ -1312,7 +1313,12 @@ internal static SpellDefinition BuildCommand() additionalTargetsPerIncrement: 1) .SetSavingThrowData(false, AttributeDefinitions.Wisdom, true, EffectDifficultyClassComputation.SpellCastingFeature) - .SetEffectForms(EffectFormBuilder.ConditionForm(conditionApproach)) + .SetEffectForms( + EffectFormBuilder + .Create() + .HasSavingThrow(EffectSavingThrowType.Negates) + .SetConditionForm(conditionApproach, ConditionForm.ConditionOperation.Add) + .Build()) .SetParticleEffectParameters(Command) .SetEffectEffectParameters(SpareTheDying) .Build()) @@ -1349,7 +1355,12 @@ internal static SpellDefinition BuildCommand() additionalTargetsPerIncrement: 1) .SetSavingThrowData(false, AttributeDefinitions.Wisdom, true, EffectDifficultyClassComputation.SpellCastingFeature) - .SetEffectForms(EffectFormBuilder.ConditionForm(conditionFlee)) + .SetEffectForms( + EffectFormBuilder + .Create() + .HasSavingThrow(EffectSavingThrowType.Negates) + .SetConditionForm(conditionFlee, ConditionForm.ConditionOperation.Add) + .Build()) .SetParticleEffectParameters(Command) .SetEffectEffectParameters(SpareTheDying) .Build()) @@ -1384,7 +1395,12 @@ internal static SpellDefinition BuildCommand() additionalTargetsPerIncrement: 1) .SetSavingThrowData(false, AttributeDefinitions.Wisdom, true, EffectDifficultyClassComputation.SpellCastingFeature) - .SetEffectForms(EffectFormBuilder.ConditionForm(conditionGrovel)) + .SetEffectForms( + EffectFormBuilder + .Create() + .HasSavingThrow(EffectSavingThrowType.Negates) + .SetConditionForm(conditionGrovel, ConditionForm.ConditionOperation.Add) + .Build()) .SetParticleEffectParameters(Command) .SetEffectEffectParameters(SpareTheDying) .Build()) @@ -1425,7 +1441,12 @@ internal static SpellDefinition BuildCommand() additionalTargetsPerIncrement: 1) .SetSavingThrowData(false, AttributeDefinitions.Wisdom, true, EffectDifficultyClassComputation.SpellCastingFeature) - .SetEffectForms(EffectFormBuilder.ConditionForm(conditionHalt)) + .SetEffectForms( + EffectFormBuilder + .Create() + .HasSavingThrow(EffectSavingThrowType.Negates) + .SetConditionForm(conditionHalt, ConditionForm.ConditionOperation.Add) + .Build()) .SetParticleEffectParameters(Command) .SetEffectEffectParameters(SpareTheDying) .Build()) @@ -1433,29 +1454,19 @@ internal static SpellDefinition BuildCommand() // Command Spell - var conditionMark = ConditionDefinitionBuilder - .Create($"Condition{NAME}Mark") - .SetGuiPresentationNoContent(true) - .SetSilent(Silent.WhenAddedOrRemoved) - .AddToDB(); - // MAIN spellApproach.AddCustomSubFeatures( - new PowerOrSpellFinishedByMeCommand( - conditionMark, conditionApproach, conditionFlee, conditionGrovel, conditionHalt)); + new PowerOrSpellFinishedByMeCommand(conditionApproach, conditionFlee, conditionGrovel, conditionHalt)); spellFlee.AddCustomSubFeatures( - new PowerOrSpellFinishedByMeCommand( - conditionMark, conditionApproach, conditionFlee, conditionGrovel, conditionHalt)); + new PowerOrSpellFinishedByMeCommand(conditionApproach, conditionFlee, conditionGrovel, conditionHalt)); spellGrovel.AddCustomSubFeatures( - new PowerOrSpellFinishedByMeCommand( - conditionMark, conditionApproach, conditionFlee, conditionGrovel, conditionHalt)); + new PowerOrSpellFinishedByMeCommand(conditionApproach, conditionFlee, conditionGrovel, conditionHalt)); spellHalt.AddCustomSubFeatures( - new PowerOrSpellFinishedByMeCommand( - conditionMark, conditionApproach, conditionFlee, conditionGrovel, conditionHalt)); + new PowerOrSpellFinishedByMeCommand(conditionApproach, conditionFlee, conditionGrovel, conditionHalt)); var spell = SpellDefinitionBuilder .Create(NAME) @@ -1474,16 +1485,10 @@ internal static SpellDefinition BuildCommand() .UseQuickAnimations() .SetDurationData(DurationType.Round) .SetTargetingData(Side.Enemy, RangeType.Distance, 12, TargetType.IndividualsUnique) - .SetEffectAdvancement(EffectIncrementMethod.PerAdditionalSlotLevel, - additionalTargetsPerIncrement: 1) + .SetEffectAdvancement( + EffectIncrementMethod.PerAdditionalSlotLevel, additionalTargetsPerIncrement: 1) .SetSavingThrowData(false, AttributeDefinitions.Wisdom, true, EffectDifficultyClassComputation.SpellCastingFeature) - .SetEffectForms( - EffectFormBuilder - .Create() - .HasSavingThrow(EffectSavingThrowType.Negates) - .SetConditionForm(conditionMark, ConditionForm.ConditionOperation.Add) - .Build()) .SetParticleEffectParameters(Command) .SetEffectEffectParameters(SpareTheDying) .Build()) @@ -1492,37 +1497,8 @@ internal static SpellDefinition BuildCommand() return spell; } - private sealed class ActionFinishedByMeApproach(ConditionDefinition conditionApproach) : IActionFinishedByMe - { - public IEnumerator OnActionFinishedByMe(CharacterAction characterAction) - { - var actingCharacter = characterAction.ActingCharacter; - var rulesetCharacter = actingCharacter.RulesetCharacter; - - if (characterAction.ActionId != Id.TacticalMove || - actingCharacter.MovingToDestination || - !rulesetCharacter.TryGetConditionOfCategoryAndType( - AttributeDefinitions.TagEffect, conditionApproach.Name, out var activeCondition)) - { - yield break; - } - - actingCharacter.UsedTacticalMoves = actingCharacter.MaxTacticalMoves; - actingCharacter.UsedTacticalMovesChanged?.Invoke(actingCharacter); - - var rulesetCaster = EffectHelpers.GetCharacterByGuid(activeCondition.SourceGuid); - var caster = GameLocationCharacter.GetFromActor(rulesetCaster); - - if (!caster.IsWithinRange(actingCharacter, 1)) - { - rulesetCharacter.RemoveCondition(activeCondition); - } - } - } - - private sealed class PowerOrSpellFinishedByMeCommand( - ConditionDefinition conditionMark, - params ConditionDefinition[] conditions) : IPowerOrSpellFinishedByMe, IFilterTargetingCharacter + private sealed class PowerOrSpellFinishedByMeCommand(params ConditionDefinition[] conditions) + : IPowerOrSpellFinishedByMe, IFilterTargetingCharacter { public bool EnforceFullSelection => true; @@ -1575,16 +1551,29 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, var caster = action.ActingCharacter; - foreach (var target in action.ActionParams.TargetCharacters - .Where(x => x.RulesetActor.HasConditionOfCategoryAndType( - AttributeDefinitions.TagEffect, conditionMark.Name))) + foreach (var target in action.ActionParams.TargetCharacters) { var rulesetTarget = target.RulesetCharacter; - var conditionsToRemove = rulesetTarget.AllConditionsForEnumeration - .Where(x => - x.SourceGuid != caster.Guid && - conditions.Contains(x.ConditionDefinition)) - .ToList(); + var conditionsToRemove = new List(); + var shouldRemove = false; + + foreach (var activeCondition in rulesetTarget.AllConditionsForEnumeration + .Where(activeCondition => conditions.Contains(activeCondition.ConditionDefinition))) + { + if (activeCondition.SourceGuid == caster.Guid) + { + shouldRemove = true; + } + else + { + conditionsToRemove.Add(activeCondition); + } + } + + if (!shouldRemove) + { + yield break; + } foreach (var condition in conditionsToRemove) { @@ -1594,6 +1583,34 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, } } + private sealed class ActionFinishedByMeApproach(ConditionDefinition conditionApproach) : IActionFinishedByMe + { + public IEnumerator OnActionFinishedByMe(CharacterAction characterAction) + { + var actingCharacter = characterAction.ActingCharacter; + var rulesetCharacter = actingCharacter.RulesetCharacter; + + if (characterAction.ActionId != Id.TacticalMove || + actingCharacter.MovingToDestination || + !rulesetCharacter.TryGetConditionOfCategoryAndType( + AttributeDefinitions.TagEffect, conditionApproach.Name, out var activeCondition)) + { + yield break; + } + + actingCharacter.UsedTacticalMoves = actingCharacter.MaxTacticalMoves; + actingCharacter.UsedTacticalMovesChanged?.Invoke(actingCharacter); + + var rulesetCaster = EffectHelpers.GetCharacterByGuid(activeCondition.SourceGuid); + var caster = GameLocationCharacter.GetFromActor(rulesetCaster); + + if (!caster.IsWithinRange(actingCharacter, 1)) + { + rulesetCharacter.RemoveCondition(activeCondition); + } + } + } + private sealed class CharacterBeforeTurnStartListenerCommandGrovel : ICharacterTurnStartListener { public void OnCharacterTurnStarted(GameLocationCharacter locationCharacter) @@ -1629,7 +1646,7 @@ internal static SpellDefinition BuildDissonantWhispers() .SetGuiPresentationNoContent(true) .SetDecisionDescription( "Go as far as possible from enemies.", - "Move", + nameof(Move), scorerDissonantWhispers) .AddToDB(); @@ -3050,7 +3067,6 @@ public void OnConditionAdded(RulesetCharacter target, RulesetCondition rulesetCo public void OnConditionRemoved(RulesetCharacter target, RulesetCondition rulesetCondition) { var rulesetCaster = EffectHelpers.GetCharacterByGuid(rulesetCondition.SourceGuid); - var rulesetSpell = rulesetCaster?.SpellsCastByMe.FirstOrDefault(x => x.SpellDefinition == spellWitchBolt); if (rulesetSpell != null) diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel02.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel02.cs index 6ae6a1bc1e..d202417a2b 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel02.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel02.cs @@ -86,7 +86,7 @@ internal static SpellDefinition BuildBindingIce() .SetFixedAmount((int)AiContext.BreakFreeType.DoNothing) .AddToDB(); - var battlePackage = AiContext.BuildDecisionBreakFreeFromCondition( + var battlePackage = AiContext.BuildDecisionPackageBreakFree( conditionGrappledRestrainedIceBound.Name, AiContext.BreakFreeType.DoNothing); conditionGrappledRestrainedIceBound.addBehavior = true; @@ -296,7 +296,7 @@ internal static SpellDefinition BuildNoxiousSpray() .SetFeatures(actionAffinityNoxiousSpray) .AddToDB(); - var battlePackage = AiContext.BuildDecisionBreakFreeFromCondition( + var battlePackage = AiContext.BuildDecisionPackageBreakFree( conditionNoxiousSpray.Name, AiContext.BreakFreeType.DoNothing); conditionNoxiousSpray.addBehavior = true; @@ -447,7 +447,7 @@ internal static SpellDefinition BuildWeb() .SetFixedAmount((int)AiContext.BreakFreeType.DoStrengthCheckAgainstCasterDC) .AddToDB(); - var battlePackage = AiContext.BuildDecisionBreakFreeFromCondition( + var battlePackage = AiContext.BuildDecisionPackageBreakFree( conditionRestrainedBySpellWeb.Name, AiContext.BreakFreeType.DoStrengthCheckAgainstCasterDC); conditionRestrainedBySpellWeb.addBehavior = true; diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel06.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel06.cs index 614e03fc57..ae9f727b3d 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel06.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel06.cs @@ -458,7 +458,7 @@ internal static SpellDefinition BuildFlashFreeze() .SetFixedAmount((int)AiContext.BreakFreeType.DoStrengthCheckAgainstCasterDC) .AddToDB(); - var battlePackage = AiContext.BuildDecisionBreakFreeFromCondition( + var battlePackage = AiContext.BuildDecisionPackageBreakFree( conditionFlashFreeze.Name, AiContext.BreakFreeType.DoStrengthCheckAgainstCasterDC); conditionFlashFreeze.addBehavior = true; From 1c4fc26c26d53bcfb256ed28d3c4edb956d21a28 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sat, 7 Sep 2024 18:19:51 -0700 Subject: [PATCH 074/212] update collaterals --- .../UnfinishedBusinessBlueprints/Assets.txt | 16 +- .../ConditionCommandSpellApproach.json | 4 +- .../ConditionCommandSpellFlee.json | 4 +- .../ConditionCommandSpellGrovel.json | 4 +- .../ConditionCommandSpellHalt.json | 4 +- .../ConditionCommandSpellMark.json | 155 ------------------ .../ConditionOathOfAncientsNaturesWrath.json | 2 +- ...DecisionBreakFreeConditionFlashFreeze.json | 4 +- ...eeConditionGrappledRestrainedEnsnared.json | 4 +- ...eeConditionGrappledRestrainedIceBound.json | 6 +- ...eeConditionGrappledRestrainedSpellWeb.json | 4 +- ...ecisionBreakFreeConditionNoxiousSpray.json | 6 +- ...reakFreeConditionRestrainedByEntangle.json | 4 +- .../DecisionBreakFreeConditionVileBrew.json | 6 +- .../PowerFightingStyleTorchbearer.json | 2 +- .../SpellDefinition/CommandSpell.json | 38 +---- ...pproach.json => CommandSpellApproach.json} | 12 +- ...ndSpellFlee.json => CommandSpellFlee.json} | 12 +- ...ellGrovel.json => CommandSpellGrovel.json} | 12 +- ...ndSpellHalt.json => CommandSpellHalt.json} | 12 +- .../ChangelogHistory.txt | 10 +- SolastaUnfinishedBusiness/Settings/empty.xml | 1 + .../Settings/zappastuff.xml | 3 +- .../Translations/de/Spells/Spells01-de.txt | 16 +- .../Translations/en/Spells/Spells01-en.txt | 16 +- .../Translations/es/Spells/Spells01-es.txt | 16 +- .../Translations/fr/Spells/Spells01-fr.txt | 16 +- .../Translations/it/Spells/Spells01-it.txt | 16 +- .../Translations/ja/Spells/Spells01-ja.txt | 16 +- .../Translations/ko/Spells/Spells01-ko.txt | 16 +- .../pt-BR/Spells/Spells01-pt-BR.txt | 16 +- .../Translations/ru/Spells/Spells01-ru.txt | 16 +- .../zh-CN/Spells/Spells01-zh-CN.txt | 16 +- 33 files changed, 155 insertions(+), 330 deletions(-) delete mode 100644 Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellMark.json rename Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/{PowerCommandSpellApproach.json => CommandSpellApproach.json} (97%) rename Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/{PowerCommandSpellFlee.json => CommandSpellFlee.json} (97%) rename Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/{PowerCommandSpellGrovel.json => CommandSpellGrovel.json} (97%) rename Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/{PowerCommandSpellHalt.json => CommandSpellHalt.json} (97%) diff --git a/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt b/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt index d775903e1b..943499dcb8 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt +++ b/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt @@ -696,7 +696,6 @@ ConditionCommandSpellApproach ConditionDefinition ConditionDefinition bc446416-9 ConditionCommandSpellFlee ConditionDefinition ConditionDefinition b52e3cc4-15af-5123-a861-3fae68460977 ConditionCommandSpellGrovel ConditionDefinition ConditionDefinition 6422ce36-c309-52f9-b699-bddb61fde71e ConditionCommandSpellHalt ConditionDefinition ConditionDefinition d20e7a46-e706-5c54-8bea-955b2054193a -ConditionCommandSpellMark ConditionDefinition ConditionDefinition 6c3dde6d-64eb-5e23-a14c-b820870f90ee ConditionCorruptingBolt ConditionDefinition ConditionDefinition c47e9ae4-841b-53af-b40f-2cb08dfa7d08 ConditionCrownOfStars ConditionDefinition ConditionDefinition 2d6f7c70-16fc-550b-83ff-f2e945b43449 ConditionCrusadersMantle ConditionDefinition ConditionDefinition 04a3a8c7-cf68-5a07-a0c1-9aabc911cad9 @@ -1245,6 +1244,13 @@ DecisionBreakFreeConditionVileBrew TA.AI.DecisionDefinition TA.AI.DecisionDefini Move_Approach TA.AI.DecisionDefinition TA.AI.DecisionDefinition 5cb2a87f-09a4-5fae-9b74-10516ea8a8ab Move_DissonantWhispers TA.AI.DecisionDefinition TA.AI.DecisionDefinition bdfa6649-5cad-5b35-a697-209ea53ca45d Approach TA.AI.DecisionPackageDefinition TA.AI.DecisionPackageDefinition 5043a0ec-c626-5877-bd87-c7bc0584366d +BreakFreeAbilityCheckConditionFlashFreeze TA.AI.DecisionPackageDefinition TA.AI.DecisionPackageDefinition 5578aa14-4a4c-5aa0-b787-7203e14b8a36 +BreakFreeAbilityCheckConditionGrappledRestrainedEnsnared TA.AI.DecisionPackageDefinition TA.AI.DecisionPackageDefinition bf1d4828-465e-5897-91ca-bc8094b3d20e +BreakFreeAbilityCheckConditionGrappledRestrainedIceBound TA.AI.DecisionPackageDefinition TA.AI.DecisionPackageDefinition 4702878b-3ac6-55e7-8954-7b1a8382aa7a +BreakFreeAbilityCheckConditionGrappledRestrainedSpellWeb TA.AI.DecisionPackageDefinition TA.AI.DecisionPackageDefinition f265e068-e06c-503a-8aa5-dc39a214a7ec +BreakFreeAbilityCheckConditionNoxiousSpray TA.AI.DecisionPackageDefinition TA.AI.DecisionPackageDefinition 1918a4d8-ff14-5aa1-9c20-1256e73c5730 +BreakFreeAbilityCheckConditionRestrainedByEntangle TA.AI.DecisionPackageDefinition TA.AI.DecisionPackageDefinition 0d9623d9-0cd7-5c03-8275-e9e61f0f1b6a +BreakFreeAbilityCheckConditionVileBrew TA.AI.DecisionPackageDefinition TA.AI.DecisionPackageDefinition 7b202c71-3241-5f80-8b02-ada4a0d9383f DissonantWhispers_Fear TA.AI.DecisionPackageDefinition TA.AI.DecisionPackageDefinition dfe2cc9e-cc70-5cfe-9057-19454acb1068 DieTypeD3 DieTypeDefinition DieTypeDefinition 63dc904b-8d78-5406-90aa-e7e1f3eefd84 ProxyCircleOfTheWildfireCauterizingFlames EffectProxyDefinition EffectProxyDefinition 5d3d90cd-1858-5044-b4f6-586754122132 @@ -12144,6 +12150,10 @@ CircleOfMagicalNegation SpellDefinition SpellDefinition c03e2ec6-3fd5-5943-8750- CloudOfDaggers SpellDefinition SpellDefinition c95adfd0-7613-54ea-8270-b3624ae4dd78 ColorBurst SpellDefinition SpellDefinition c79e03ee-1d09-569f-85d9-27a50cfc7110 CommandSpell SpellDefinition SpellDefinition 289ffbc5-ef5c-56b1-b6ba-79d88e236887 +CommandSpellApproach SpellDefinition SpellDefinition 395b1d47-bc7c-50e1-91e2-78e39a4e418b +CommandSpellFlee SpellDefinition SpellDefinition 0bed52be-d94a-5da2-8cfe-d5784f55e6f8 +CommandSpellGrovel SpellDefinition SpellDefinition b48998ac-2379-5637-ad85-8e45cdd375ac +CommandSpellHalt SpellDefinition SpellDefinition d4e87ec4-f113-5c33-b5c6-0452ab42231b ConjureElementalInvisibleStalker SpellDefinition SpellDefinition 4f4b45b0-1a32-55c5-ab58-66d105a6f07f CorruptingBolt SpellDefinition SpellDefinition 715e1a9b-115f-5036-99b9-bf54f7e34f01 CreateDeadRisenGhost SpellDefinition SpellDefinition 02a12317-e3e2-5833-9611-eeaaead7c151 @@ -12220,10 +12230,6 @@ MysticalCloakLowerPlane SpellDefinition SpellDefinition 27097d2a-d8b7-5dce-b6f2- NoxiousSpray SpellDefinition SpellDefinition 01220ecc-fa04-5576-acd6-b7dd39748f52 PetalStorm SpellDefinition SpellDefinition 4cc7aea6-dee9-5631-8b2a-f0e497b71bde PoisonWave SpellDefinition SpellDefinition eb22297a-4da6-5f24-87e8-ddcd2b957bd0 -PowerCommandSpellApproach SpellDefinition SpellDefinition 18ae3db8-2589-5b95-b795-4f54e5aae89e -PowerCommandSpellFlee SpellDefinition SpellDefinition 7920093b-60b8-5b72-8217-8e863e38bdea -PowerCommandSpellGrovel SpellDefinition SpellDefinition 35f18407-8050-5283-ba7f-3a5863aa555e -PowerCommandSpellHalt SpellDefinition SpellDefinition ba84cf9e-4373-5a11-af15-41395a314cde PowerWordHeal SpellDefinition SpellDefinition f9e2477f-fbee-5778-8ffc-c0380c0dea7d PowerWordKill SpellDefinition SpellDefinition 7d618d6a-004a-539e-a996-e180936abe9c PrimalSavagery SpellDefinition SpellDefinition a24eee9b-4a70-559f-838b-76777d3f6666 diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellApproach.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellApproach.json index 3a81c19399..80929c9f34 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellApproach.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellApproach.json @@ -130,8 +130,8 @@ "guiPresentation": { "$type": "GuiPresentation, Assembly-CSharp", "hidden": false, - "title": "Feature/&PowerCommandSpellApproachTitle", - "description": "Feature/&PowerCommandSpellApproachDescription", + "title": "Spell/&CommandSpellApproachTitle", + "description": "Spell/&CommandSpellApproachDescription", "spriteReference": { "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", "m_AssetGUID": "5e96eb4d8d8193a4cbddbf7477990f88", diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellFlee.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellFlee.json index 1e7d3da1d5..6b91629ae1 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellFlee.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellFlee.json @@ -130,8 +130,8 @@ "guiPresentation": { "$type": "GuiPresentation, Assembly-CSharp", "hidden": false, - "title": "Feature/&PowerCommandSpellFleeTitle", - "description": "Feature/&PowerCommandSpellFleeDescription", + "title": "Spell/&CommandSpellFleeTitle", + "description": "Spell/&CommandSpellFleeDescription", "spriteReference": { "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", "m_AssetGUID": "5e96eb4d8d8193a4cbddbf7477990f88", diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellGrovel.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellGrovel.json index 2f3dcb97af..44fa5335da 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellGrovel.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellGrovel.json @@ -128,8 +128,8 @@ "guiPresentation": { "$type": "GuiPresentation, Assembly-CSharp", "hidden": false, - "title": "Feature/&PowerCommandSpellGrovelTitle", - "description": "Feature/&PowerCommandSpellGrovelDescription", + "title": "Spell/&CommandSpellGrovelTitle", + "description": "Spell/&CommandSpellGrovelDescription", "spriteReference": { "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", "m_AssetGUID": "5e96eb4d8d8193a4cbddbf7477990f88", diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellHalt.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellHalt.json index 90489c60c1..f77afb492d 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellHalt.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellHalt.json @@ -130,8 +130,8 @@ "guiPresentation": { "$type": "GuiPresentation, Assembly-CSharp", "hidden": false, - "title": "Feature/&PowerCommandSpellHaltTitle", - "description": "Feature/&PowerCommandSpellHaltDescription", + "title": "Spell/&CommandSpellHaltTitle", + "description": "Spell/&CommandSpellHaltDescription", "spriteReference": { "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", "m_AssetGUID": "5e96eb4d8d8193a4cbddbf7477990f88", diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellMark.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellMark.json deleted file mode 100644 index 99aef1d89b..0000000000 --- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellMark.json +++ /dev/null @@ -1,155 +0,0 @@ -{ - "$type": "ConditionDefinition, Assembly-CSharp", - "inDungeonEditor": false, - "parentCondition": null, - "conditionType": "Beneficial", - "features": [], - "allowMultipleInstances": false, - "silentWhenAdded": true, - "silentWhenRemoved": true, - "silentWhenRefreshed": false, - "terminateWhenRemoved": false, - "specialDuration": false, - "durationType": "Hour", - "durationParameterDie": "D4", - "durationParameter": 1, - "forceTurnOccurence": false, - "turnOccurence": "EndOfTurn", - "specialInterruptions": [], - "interruptionRequiresSavingThrow": false, - "interruptionSavingThrowComputationMethod": "SaveOverride", - "interruptionSavingThrowAbility": "", - "interruptionDamageThreshold": 0, - "keepConditionIfSavingThrowSucceeds": false, - "interruptionSavingThrowAffinity": "None", - "conditionTags": [], - "recurrentEffectForms": [], - "cancellingConditions": [], - "additionalDamageWhenHit": false, - "additionalDamageTypeDetermination": "Specific", - "additionalDamageType": "", - "additionalDamageQuantity": "AbilityBonus", - "additionalDamageDieType": "D1", - "additionalDamageDieNumber": 1, - "additionalConditionWhenHit": false, - "additionalCondition": null, - "additionalConditionDurationType": "Round", - "additionalConditionDurationParameter": 1, - "additionalConditionTurnOccurenceType": "StartOfTurn", - "conditionStartParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": null, - "m_SubObjectType": null - }, - "conditionParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": null, - "m_SubObjectType": null - }, - "conditionEndParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": null, - "m_SubObjectType": null - }, - "recurrentEffectParticleReference": null, - "characterShaderReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": null, - "m_SubObjectType": null - }, - "particlesBasedOnAncestryDamageType": false, - "ancestryType": "Sorcerer", - "acidParticleParameters": null, - "coldParticleParameters": null, - "fireParticleParameters": null, - "lightningParticleParameters": null, - "poisonParticleParameters": null, - "overrideCharacterShaderColors": false, - "firstCharacterShaderColor": { - "$type": "UnityEngine.Color, UnityEngine.CoreModule", - "r": 0.0, - "g": 0.0, - "b": 0.0, - "a": 0.0 - }, - "secondCharacterShaderColor": { - "$type": "UnityEngine.Color, UnityEngine.CoreModule", - "r": 0.0, - "g": 0.0, - "b": 0.0, - "a": 0.0 - }, - "timeToWaitBeforeApplyingShader": 0.5, - "timeToWaitBeforeRemovingShader": 0.5, - "possessive": false, - "amountOrigin": "None", - "baseAmount": 0, - "additiveAmount": false, - "sourceAbilityBonusMinValue": 1, - "subsequentOnRemoval": null, - "subsequentHasSavingThrow": false, - "subsequentSavingThrowAbilityScore": "Constitution", - "subsequentVariableForDC": "FrenzyExhaustionDC", - "subsequentDCIncrease": 5, - "effectFormsOnRemoved": [], - "forceBehavior": false, - "addBehavior": false, - "fearSource": false, - "battlePackage": null, - "explorationPackage": null, - "removedFromTheGame": false, - "permanentlyRemovedIfExtraPlanar": false, - "refundReceivedDamageWhenRemoved": false, - "followSourcePosition": false, - "disolveCharacterOnDeath": false, - "disolveParameters": { - "$type": "GraphicsCharacterDefinitions+DisolveParameters, Assembly-CSharp", - "color": { - "$type": "UnityEngine.Color, UnityEngine.CoreModule", - "r": 0.0, - "g": 0.0, - "b": 0.0, - "a": 0.0 - }, - "colorWidth": 0.0, - "noiseScale": 5.0, - "hueScale": 0.0, - "vertexOffset": 0.0, - "curve": { - "$type": "UnityEngine.AnimationCurve, UnityEngine.CoreModule" - }, - "startAfterDeathAnimation": false, - "duration": 0.0 - }, - "guiPresentation": { - "$type": "GuiPresentation, Assembly-CSharp", - "hidden": true, - "title": "Feature/&NoContentTitle", - "description": "Feature/&NoContentTitle", - "spriteReference": { - "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": null, - "m_SubObjectType": null - }, - "color": { - "$type": "UnityEngine.Color, UnityEngine.CoreModule", - "r": 1.0, - "g": 1.0, - "b": 1.0, - "a": 1.0 - }, - "symbolChar": "221E", - "sortOrder": 0, - "unusedInSolastaCOTM": false, - "usedInValleyDLC": false - }, - "contentCopyright": "UserContent", - "guid": "6c3dde6d-64eb-5e23-a14c-b820870f90ee", - "contentPack": 9999, - "name": "ConditionCommandSpellMark" -} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionOathOfAncientsNaturesWrath.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionOathOfAncientsNaturesWrath.json index fb16d956f6..6f61e17c0e 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionOathOfAncientsNaturesWrath.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionOathOfAncientsNaturesWrath.json @@ -221,7 +221,7 @@ "timeToWaitBeforeApplyingShader": 0.5, "timeToWaitBeforeRemovingShader": 0.5, "possessive": false, - "amountOrigin": "Fixed", + "amountOrigin": "Fixed", "baseAmount": 1, "additiveAmount": false, "sourceAbilityBonusMinValue": 1, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionFlashFreeze.json b/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionFlashFreeze.json index d914b006c8..0e58477f92 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionFlashFreeze.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionFlashFreeze.json @@ -57,11 +57,11 @@ "name": "BreakFreeConditionFlashFreeze" }, "activityType": "BreakFree", - "stringParameter": "1", + "stringParameter": "", "stringSecParameter": "", "boolParameter": false, "boolSecParameter": false, - "floatParameter": 3.0, + "floatParameter": 0.0, "enumParameter": 1 }, "guiPresentation": { diff --git a/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionGrappledRestrainedEnsnared.json b/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionGrappledRestrainedEnsnared.json index 0bc1bb2353..67473ff826 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionGrappledRestrainedEnsnared.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionGrappledRestrainedEnsnared.json @@ -57,11 +57,11 @@ "name": "BreakFreeConditionGrappledRestrainedEnsnared" }, "activityType": "BreakFree", - "stringParameter": "1", + "stringParameter": "", "stringSecParameter": "", "boolParameter": false, "boolSecParameter": false, - "floatParameter": 3.0, + "floatParameter": 0.0, "enumParameter": 1 }, "guiPresentation": { diff --git a/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionGrappledRestrainedIceBound.json b/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionGrappledRestrainedIceBound.json index c0d383d66a..a1288bd797 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionGrappledRestrainedIceBound.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionGrappledRestrainedIceBound.json @@ -57,12 +57,12 @@ "name": "BreakFreeConditionGrappledRestrainedIceBound" }, "activityType": "BreakFree", - "stringParameter": "0", + "stringParameter": "", "stringSecParameter": "", "boolParameter": false, "boolSecParameter": false, - "floatParameter": 3.0, - "enumParameter": 1 + "floatParameter": 0.0, + "enumParameter": 0 }, "guiPresentation": { "$type": "GuiPresentation, Assembly-CSharp", diff --git a/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionGrappledRestrainedSpellWeb.json b/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionGrappledRestrainedSpellWeb.json index 26fb5c83e5..5e5b2fa2e2 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionGrappledRestrainedSpellWeb.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionGrappledRestrainedSpellWeb.json @@ -57,11 +57,11 @@ "name": "BreakFreeConditionGrappledRestrainedSpellWeb" }, "activityType": "BreakFree", - "stringParameter": "1", + "stringParameter": "", "stringSecParameter": "", "boolParameter": false, "boolSecParameter": false, - "floatParameter": 3.0, + "floatParameter": 0.0, "enumParameter": 1 }, "guiPresentation": { diff --git a/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionNoxiousSpray.json b/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionNoxiousSpray.json index 964d6d61b2..4b0d273db5 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionNoxiousSpray.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionNoxiousSpray.json @@ -57,12 +57,12 @@ "name": "BreakFreeConditionNoxiousSpray" }, "activityType": "BreakFree", - "stringParameter": "0", + "stringParameter": "", "stringSecParameter": "", "boolParameter": false, "boolSecParameter": false, - "floatParameter": 3.0, - "enumParameter": 1 + "floatParameter": 0.0, + "enumParameter": 0 }, "guiPresentation": { "$type": "GuiPresentation, Assembly-CSharp", diff --git a/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionRestrainedByEntangle.json b/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionRestrainedByEntangle.json index 63c72429ea..c7d2e4dbc4 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionRestrainedByEntangle.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionRestrainedByEntangle.json @@ -57,11 +57,11 @@ "name": "BreakFreeConditionRestrainedByEntangle" }, "activityType": "BreakFree", - "stringParameter": "1", + "stringParameter": "", "stringSecParameter": "", "boolParameter": false, "boolSecParameter": false, - "floatParameter": 3.0, + "floatParameter": 0.0, "enumParameter": 1 }, "guiPresentation": { diff --git a/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionVileBrew.json b/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionVileBrew.json index ba796de5e2..81419d3992 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionVileBrew.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionVileBrew.json @@ -57,12 +57,12 @@ "name": "BreakFreeConditionVileBrew" }, "activityType": "BreakFree", - "stringParameter": "0", + "stringParameter": "", "stringSecParameter": "", "boolParameter": false, "boolSecParameter": false, - "floatParameter": 3.0, - "enumParameter": 1 + "floatParameter": 0.0, + "enumParameter": 0 }, "guiPresentation": { "$type": "GuiPresentation, Assembly-CSharp", diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerFightingStyleTorchbearer.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerFightingStyleTorchbearer.json index b1b9c8436d..7b03511480 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerFightingStyleTorchbearer.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerFightingStyleTorchbearer.json @@ -42,7 +42,7 @@ "rollSaveOnlyIfRelevantForms": false, "hasShoveRoll": false, "createdByCharacter": true, - "difficultyClassComputation": "FixedValue", + "difficultyClassComputation": "AbilityScoreAndProficiency", "savingThrowDifficultyAbility": "Dexterity", "fixedSavingThrowDifficultyClass": 8, "savingThrowAffinitiesBySense": [], diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpell.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpell.json index 234020c512..fe306d2457 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpell.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpell.json @@ -2,10 +2,10 @@ "$type": "SpellDefinition, Assembly-CSharp", "spellsBundle": true, "subspellsList": [ - "Definition:PowerCommandSpellApproach:18ae3db8-2589-5b95-b795-4f54e5aae89e", - "Definition:PowerCommandSpellFlee:7920093b-60b8-5b72-8217-8e863e38bdea", - "Definition:PowerCommandSpellGrovel:35f18407-8050-5283-ba7f-3a5863aa555e", - "Definition:PowerCommandSpellHalt:ba84cf9e-4373-5a11-af15-41395a314cde" + "Definition:CommandSpellApproach:395b1d47-bc7c-50e1-91e2-78e39a4e418b", + "Definition:CommandSpellFlee:0bed52be-d94a-5da2-8cfe-d5784f55e6f8", + "Definition:CommandSpellGrovel:b48998ac-2379-5637-ad85-8e45cdd375ac", + "Definition:CommandSpellHalt:d4e87ec4-f113-5c33-b5c6-0452ab42231b" ], "compactSubspellsTooltip": false, "implemented": true, @@ -77,35 +77,7 @@ "effectPoolAmount": 60, "effectApplication": "All", "effectFormFilters": [], - "effectForms": [ - { - "$type": "EffectForm, Assembly-CSharp", - "formType": "Condition", - "addBonusMode": "None", - "applyLevel": "No", - "levelType": "ClassLevel", - "levelMultiplier": 1, - "diceByLevelTable": [], - "createdByCharacter": true, - "createdByCondition": false, - "hasSavingThrow": true, - "savingThrowAffinity": "Negates", - "dcModifier": 0, - "canSaveToCancel": false, - "saveOccurence": "EndOfTurn", - "conditionForm": { - "$type": "ConditionForm, Assembly-CSharp", - "conditionDefinitionName": "ConditionCommandSpellMark", - "conditionDefinition": "Definition:ConditionCommandSpellMark:6c3dde6d-64eb-5e23-a14c-b820870f90ee", - "operation": "Add", - "conditionsList": [], - "applyToSelf": false, - "forceOnSelf": false - }, - "hasFilterId": false, - "filterId": 0 - } - ], + "effectForms": [], "specialFormsDescription": "", "effectAdvancement": { "$type": "EffectAdvancement, Assembly-CSharp", diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/PowerCommandSpellApproach.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpellApproach.json similarity index 97% rename from Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/PowerCommandSpellApproach.json rename to Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpellApproach.json index 356e0a3bc3..3994ac1b93 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/PowerCommandSpellApproach.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpellApproach.json @@ -83,8 +83,8 @@ "diceByLevelTable": [], "createdByCharacter": true, "createdByCondition": false, - "hasSavingThrow": false, - "savingThrowAffinity": "None", + "hasSavingThrow": true, + "savingThrowAffinity": "Negates", "dcModifier": 0, "canSaveToCancel": false, "saveOccurence": "EndOfTurn", @@ -319,8 +319,8 @@ "guiPresentation": { "$type": "GuiPresentation, Assembly-CSharp", "hidden": false, - "title": "Feature/&PowerCommandSpellApproachTitle", - "description": "Feature/&PowerCommandSpellApproachDescription", + "title": "Spell/&CommandSpellApproachTitle", + "description": "Spell/&CommandSpellApproachDescription", "spriteReference": { "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", "m_AssetGUID": "6edc0b78da56b1e4b94c3d7fb6c96dec", @@ -340,7 +340,7 @@ "usedInValleyDLC": false }, "contentCopyright": "UserContent", - "guid": "18ae3db8-2589-5b95-b795-4f54e5aae89e", + "guid": "395b1d47-bc7c-50e1-91e2-78e39a4e418b", "contentPack": 9999, - "name": "PowerCommandSpellApproach" + "name": "CommandSpellApproach" } \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/PowerCommandSpellFlee.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpellFlee.json similarity index 97% rename from Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/PowerCommandSpellFlee.json rename to Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpellFlee.json index 1f4cf60565..12754018a8 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/PowerCommandSpellFlee.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpellFlee.json @@ -83,8 +83,8 @@ "diceByLevelTable": [], "createdByCharacter": true, "createdByCondition": false, - "hasSavingThrow": false, - "savingThrowAffinity": "None", + "hasSavingThrow": true, + "savingThrowAffinity": "Negates", "dcModifier": 0, "canSaveToCancel": false, "saveOccurence": "EndOfTurn", @@ -319,8 +319,8 @@ "guiPresentation": { "$type": "GuiPresentation, Assembly-CSharp", "hidden": false, - "title": "Feature/&PowerCommandSpellFleeTitle", - "description": "Feature/&PowerCommandSpellFleeDescription", + "title": "Spell/&CommandSpellFleeTitle", + "description": "Spell/&CommandSpellFleeDescription", "spriteReference": { "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", "m_AssetGUID": "6edc0b78da56b1e4b94c3d7fb6c96dec", @@ -340,7 +340,7 @@ "usedInValleyDLC": false }, "contentCopyright": "UserContent", - "guid": "7920093b-60b8-5b72-8217-8e863e38bdea", + "guid": "0bed52be-d94a-5da2-8cfe-d5784f55e6f8", "contentPack": 9999, - "name": "PowerCommandSpellFlee" + "name": "CommandSpellFlee" } \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/PowerCommandSpellGrovel.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpellGrovel.json similarity index 97% rename from Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/PowerCommandSpellGrovel.json rename to Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpellGrovel.json index 80960a3868..d7b15456bd 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/PowerCommandSpellGrovel.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpellGrovel.json @@ -83,8 +83,8 @@ "diceByLevelTable": [], "createdByCharacter": true, "createdByCondition": false, - "hasSavingThrow": false, - "savingThrowAffinity": "None", + "hasSavingThrow": true, + "savingThrowAffinity": "Negates", "dcModifier": 0, "canSaveToCancel": false, "saveOccurence": "EndOfTurn", @@ -319,8 +319,8 @@ "guiPresentation": { "$type": "GuiPresentation, Assembly-CSharp", "hidden": false, - "title": "Feature/&PowerCommandSpellGrovelTitle", - "description": "Feature/&PowerCommandSpellGrovelDescription", + "title": "Spell/&CommandSpellGrovelTitle", + "description": "Spell/&CommandSpellGrovelDescription", "spriteReference": { "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", "m_AssetGUID": "6edc0b78da56b1e4b94c3d7fb6c96dec", @@ -340,7 +340,7 @@ "usedInValleyDLC": false }, "contentCopyright": "UserContent", - "guid": "35f18407-8050-5283-ba7f-3a5863aa555e", + "guid": "b48998ac-2379-5637-ad85-8e45cdd375ac", "contentPack": 9999, - "name": "PowerCommandSpellGrovel" + "name": "CommandSpellGrovel" } \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/PowerCommandSpellHalt.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpellHalt.json similarity index 97% rename from Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/PowerCommandSpellHalt.json rename to Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpellHalt.json index 7b1fad09b8..d14c0fc456 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/PowerCommandSpellHalt.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpellHalt.json @@ -83,8 +83,8 @@ "diceByLevelTable": [], "createdByCharacter": true, "createdByCondition": false, - "hasSavingThrow": false, - "savingThrowAffinity": "None", + "hasSavingThrow": true, + "savingThrowAffinity": "Negates", "dcModifier": 0, "canSaveToCancel": false, "saveOccurence": "EndOfTurn", @@ -319,8 +319,8 @@ "guiPresentation": { "$type": "GuiPresentation, Assembly-CSharp", "hidden": false, - "title": "Feature/&PowerCommandSpellHaltTitle", - "description": "Feature/&PowerCommandSpellHaltDescription", + "title": "Spell/&CommandSpellHaltTitle", + "description": "Spell/&CommandSpellHaltDescription", "spriteReference": { "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", "m_AssetGUID": "6edc0b78da56b1e4b94c3d7fb6c96dec", @@ -340,7 +340,7 @@ "usedInValleyDLC": false }, "contentCopyright": "UserContent", - "guid": "ba84cf9e-4373-5a11-af15-41395a314cde", + "guid": "d4e87ec4-f113-5c33-b5c6-0452ab42231b", "contentPack": 9999, - "name": "PowerCommandSpellHalt" + "name": "CommandSpellHalt" } \ No newline at end of file diff --git a/SolastaUnfinishedBusiness/ChangelogHistory.txt b/SolastaUnfinishedBusiness/ChangelogHistory.txt index e91cada956..e452247d37 100644 --- a/SolastaUnfinishedBusiness/ChangelogHistory.txt +++ b/SolastaUnfinishedBusiness/ChangelogHistory.txt @@ -24,6 +24,11 @@ - improved vanilla to allow reactions on gadget's saving roll [traps] - improved victory modal export behavior to allow heroes not in pool to be exported [VANILLA] +KNOWN ISSUES: + +- Artillerist Force Ballista tiny cannon doesn't force disadvantage if attack is within 5 ft +- Chaos Bolt spell damage will be of wrong type under multiplayer if twinned and one bolt misses [won't fix] + 1.5.97.29: - fixed cantrips **CRASH** if not a melee cantrip and hero has replace attack with cantrips @@ -49,11 +54,6 @@ - fixed Sorcerer Wild Magic tides of chaos double consumption - fixed Wizard Dead Master undead chains incorrectly changing AC with an add. +1 -KNOWN ISSUES: - -- Artillerist Force Ballista tiny cannon doesn't force disadvantage if attack is within 5 ft -- Chaos Bolt spell damage will be of wrong type under multiplayer if twinned and one bolt misses [won't fix] - 1.5.97.28: - added 'Allow Unarmed Attack with main action for character if a Monk or has Handwraps or Gauntlet equipped' setting diff --git a/SolastaUnfinishedBusiness/Settings/empty.xml b/SolastaUnfinishedBusiness/Settings/empty.xml index a843209fd2..b4ba966b13 100644 --- a/SolastaUnfinishedBusiness/Settings/empty.xml +++ b/SolastaUnfinishedBusiness/Settings/empty.xml @@ -1081,6 +1081,7 @@ false false false + false false false false diff --git a/SolastaUnfinishedBusiness/Settings/zappastuff.xml b/SolastaUnfinishedBusiness/Settings/zappastuff.xml index 2055e00900..19e5cff9f6 100644 --- a/SolastaUnfinishedBusiness/Settings/zappastuff.xml +++ b/SolastaUnfinishedBusiness/Settings/zappastuff.xml @@ -1,6 +1,6 @@ - 0 + 1 0 0 false @@ -1958,6 +1958,7 @@ true true true + false true true true diff --git a/SolastaUnfinishedBusiness/Translations/de/Spells/Spells01-de.txt b/SolastaUnfinishedBusiness/Translations/de/Spells/Spells01-de.txt index e2e3856a01..925d73c84c 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Spells/Spells01-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Spells/Spells01-de.txt @@ -30,14 +30,6 @@ Condition/&ConditionWitchBoltTitle=Hexenbolzen Feature/&FeatureGiftOfAlacrityDescription=Sie können Ihren Initiativewürfen 1W8 hinzufügen. Feature/&FeatureGiftOfAlacrityTitle=Gabe der Schnelligkeit Feature/&PowerChaosBoltDescription=Verursache {0} Schaden. -Feature/&PowerCommandSpellApproachDescription=Das Ziel bewegt sich auf dem kürzesten und direktesten Weg auf Sie zu und beendet seinen Zug, wenn es sich Ihnen näher als 1,5 m nähert. -Feature/&PowerCommandSpellApproachTitle=Ansatz -Feature/&PowerCommandSpellFleeDescription=Das Ziel verbringt seinen Zug damit, sich mit den schnellsten verfügbaren Mitteln von Ihnen zu entfernen. -Feature/&PowerCommandSpellFleeTitle=Fliehen -Feature/&PowerCommandSpellGrovelDescription=Das Ziel fällt zu Boden und beendet dann seinen Zug. -Feature/&PowerCommandSpellGrovelTitle=Kriechen -Feature/&PowerCommandSpellHaltDescription=Das Ziel bewegt sich nicht und führt keine Aktionen aus. -Feature/&PowerCommandSpellHaltTitle=Halt Feature/&PowerStrikeWithTheWindDescription=Verleiht Ihrem nächsten Angriff einen Vorteil und verursacht bei einem Treffer zusätzlich 1W8 Schaden. Unabhängig davon, ob Sie treffen oder verfehlen, erhöht sich Ihre Gehgeschwindigkeit bis zum Ende dieses Zuges um 30 Fuß. Feature/&PowerStrikeWithTheWindTitle=Schlag mit dem Wind Feedback/&AdditionalDamageElementalInfusionAcidFormat=Absorbiere Elemente! @@ -82,7 +74,15 @@ Spell/&ChaosBoltDescription=Führe einen Fernangriff mit Zauber gegen ein Ziel a Spell/&ChaosBoltTitle=Chaosblitz Spell/&ChromaticOrbDescription=Du schleuderst eine Energiekugel mit 4 Zoll Durchmesser auf eine Kreatur, die du in Reichweite sehen kannst. Du wählst Säure, Kälte, Feuer, Blitz, Gift oder Donner als Art der Kugel, die du erschaffst, und führst dann einen Fernkampf-Zauberangriff gegen das Ziel aus. Wenn der Angriff trifft, erleidet die Kreatur 3W8 Schaden der von dir gewählten Art. Spell/&ChromaticOrbTitle=Chromatische Kugel +Spell/&CommandSpellApproachDescription=Das Ziel bewegt sich auf dem kürzesten und direktesten Weg auf Sie zu und beendet seinen Zug, wenn es sich Ihnen näher als 1,5 m nähert. +Spell/&CommandSpellApproachTitle=Ansatz Spell/&CommandSpellDescription=Sie sprechen einen einwortigen Befehl zu einer Kreatur in Reichweite, die Sie sehen können. Das Ziel muss einen Weisheitsrettungswurf bestehen oder dem Befehl in seinem nächsten Zug folgen. Sie können nur Kreaturen befehligen, mit denen Sie eine gemeinsame Sprache sprechen, dazu gehören alle Humanoiden. Um einer nicht-humanoiden Kreatur Befehle zu erteilen, müssen Sie Drakonisch für Drachen, Elbisch für Feenwesen, Riesisch für Riesen, Höllisch für Unholde und Terranisch für Elementare beherrschen. Es gibt folgende Befehle:\n• Annäherung: Das Ziel bewegt sich auf dem kürzesten und direktesten Weg auf Sie zu und beendet seinen Zug, wenn es sich Ihnen näher als 1,52 m nähert.\n• Fliehen: Das Ziel verbringt seinen Zug damit, sich auf dem schnellsten verfügbaren Weg von Ihnen wegzubewegen.\n• Kriechen: Das Ziel fällt hin und beendet dann seinen Zug.\n• Halt: Das Ziel bewegt sich nicht und unternimmt keine Aktionen.\nWenn Sie diesen Zauber mit einem Zauberplatz der 2. Stufe oder höher wirken, können Sie für jede Zauberplatzstufe über der 2. eine zusätzliche Kreatur in Reichweite als Ziel wählen. +Spell/&CommandSpellFleeDescription=Das Ziel verbringt seinen Zug damit, sich mit den schnellsten verfügbaren Mitteln von Ihnen zu entfernen. +Spell/&CommandSpellFleeTitle=Fliehen +Spell/&CommandSpellGrovelDescription=Das Ziel fällt zu Boden und beendet dann seinen Zug. +Spell/&CommandSpellGrovelTitle=Kriechen +Spell/&CommandSpellHaltDescription=Das Ziel bewegt sich nicht und führt keine Aktionen aus. +Spell/&CommandSpellHaltTitle=Halt Spell/&CommandSpellTitle=Befehl Spell/&DissonantWhispersDescription=Du flüsterst eine dissonante Melodie, die nur eine Kreatur deiner Wahl in Reichweite hören kann, und quälst sie mit schrecklichen Schmerzen. Das Ziel muss einen Weisheitsrettungswurf machen. Bei einem misslungenen Rettungswurf erleidet es 3W6 psychischen Schaden und muss sofort seine Reaktion, falls möglich, nutzen, um sich so weit wie seine Geschwindigkeit es zulässt von dir wegzubewegen. Die Kreatur bewegt sich nicht auf offensichtlich gefährliches Gelände, wie etwa ein Feuer oder eine Grube. Bei einem erfolgreichen Rettungswurf erleidet das Ziel nur halb so viel Schaden und muss sich nicht wegbewegen. Wenn du diesen Zauber mit einem Zauberplatz der 2. Stufe oder höher wirkst, erhöht sich der Schaden um 1W6 für jede Stufe über der 1. Spell/&DissonantWhispersTitle=Dissonantes Flüstern diff --git a/SolastaUnfinishedBusiness/Translations/en/Spells/Spells01-en.txt b/SolastaUnfinishedBusiness/Translations/en/Spells/Spells01-en.txt index d3ffd53535..648052d0ac 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Spells/Spells01-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Spells/Spells01-en.txt @@ -30,14 +30,6 @@ Condition/&ConditionWitchBoltTitle=Witch Bolt Feature/&FeatureGiftOfAlacrityDescription=You can add 1d8 to your initiative rolls. Feature/&FeatureGiftOfAlacrityTitle=Gift of Alacrity Feature/&PowerChaosBoltDescription=Use {0} damage. -Feature/&PowerCommandSpellApproachDescription=The target moves toward you by the shortest and most direct route, ending its turn if it moves within 5 feet of you. -Feature/&PowerCommandSpellApproachTitle=Approach -Feature/&PowerCommandSpellFleeDescription=The target spends its turn moving away from you by the fastest available means. -Feature/&PowerCommandSpellFleeTitle=Flee -Feature/&PowerCommandSpellGrovelDescription=The target falls prone and then ends its turn. -Feature/&PowerCommandSpellGrovelTitle=Grovel -Feature/&PowerCommandSpellHaltDescription=The target doesn't move and takes no actions. -Feature/&PowerCommandSpellHaltTitle=Halt Feature/&PowerStrikeWithTheWindDescription=Grant advantage to your next attack, and deals an extra 1d8 damage on a hit. Whether you hit or miss, your walking speed increases by 30 feet until the end of that turn. Feature/&PowerStrikeWithTheWindTitle=Strike with The Wind Feedback/&AdditionalDamageElementalInfusionAcidFormat=Absorb Elements! @@ -82,7 +74,15 @@ Spell/&ChaosBoltDescription=Make a ranged spell attack against a target. On a hi Spell/&ChaosBoltTitle=Chaos Bolt Spell/&ChromaticOrbDescription=You hurl a 4-inch-diameter sphere of energy at a creature that you can see within range. You choose acid, cold, fire, lightning, poison, or thunder for the type of orb you create, and then make a ranged spell attack against the target. If the attack hits, the creature takes 3d8 damage of the type you chose. Spell/&ChromaticOrbTitle=Chromatic Orb +Spell/&CommandSpellApproachDescription=The target moves toward you by the shortest and most direct route, ending its turn if it moves within 5 feet of you. +Spell/&CommandSpellApproachTitle=Approach Spell/&CommandSpellDescription=You speak a one-word command to a creature you can see within range. The target must succeed on a Wisdom saving throw or follow the command on its next turn. You can only command creatures you share a language with, which include all humanoids. To command a non-humanoid creature, you must know Draconic for Dragons, Elvish for Fey, Giant for Giants, Infernal for Fiends and Terran for Elementals. Commands follow:\n• Approach: The target moves toward you by the shortest and most direct route, ending its turn if it moves within 5 feet of you.\n• Flee: The target spends its turn moving away from you by the fastest available means.\n• Grovel: The target falls prone and then ends its turn.\n• Halt: The target doesn't move and takes no actions.\nWhen you cast this spell using a spell slot of 2nd level or higher, you may target an additional creature within range for each slot level above 2nd. +Spell/&CommandSpellFleeDescription=The target spends its turn moving away from you by the fastest available means. +Spell/&CommandSpellFleeTitle=Flee +Spell/&CommandSpellGrovelDescription=The target falls prone and then ends its turn. +Spell/&CommandSpellGrovelTitle=Grovel +Spell/&CommandSpellHaltDescription=The target doesn't move and takes no actions. +Spell/&CommandSpellHaltTitle=Halt Spell/&CommandSpellTitle=Command Spell/&DissonantWhispersDescription=You whisper a discordant melody that only one creature of your choice within range can hear, wracking it with terrible pain. The target must make a Wisdom saving throw. On a failed save, it takes 3d6 psychic damage and must immediately use its reaction, if available, to move as far as its speed allows away from you. The creature doesn't move into obviously dangerous ground, such as a fire or a pit. On a successful save, the target takes half as much damage and doesn't have to move away. When you cast this spell using a spell slot of 2nd level or higher, the damage increases by 1d6 for each slot level above 1st. Spell/&DissonantWhispersTitle=Dissonant Whispers diff --git a/SolastaUnfinishedBusiness/Translations/es/Spells/Spells01-es.txt b/SolastaUnfinishedBusiness/Translations/es/Spells/Spells01-es.txt index 718ca1cadb..2438728b89 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Spells/Spells01-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Spells/Spells01-es.txt @@ -30,14 +30,6 @@ Condition/&ConditionWitchBoltTitle=Rayo de bruja Feature/&FeatureGiftOfAlacrityDescription=Puedes añadir 1d8 a tus tiradas de iniciativa. Feature/&FeatureGiftOfAlacrityTitle=Don de prontitud Feature/&PowerChaosBoltDescription=Utilice {0} de daño. -Feature/&PowerCommandSpellApproachDescription=El objetivo se mueve hacia ti por la ruta más corta y directa, y finaliza su turno si se mueve a menos de 5 pies de ti. -Feature/&PowerCommandSpellApproachTitle=Acercarse -Feature/&PowerCommandSpellFleeDescription=El objetivo pasa su turno alejándose de ti por el medio más rápido disponible. -Feature/&PowerCommandSpellFleeTitle=Huir -Feature/&PowerCommandSpellGrovelDescription=El objetivo cae boca abajo y luego termina su turno. -Feature/&PowerCommandSpellGrovelTitle=Arrastrarse -Feature/&PowerCommandSpellHaltDescription=El objetivo no se mueve y no realiza ninguna acción. -Feature/&PowerCommandSpellHaltTitle=Detener Feature/&PowerStrikeWithTheWindDescription=Otorga ventaja a tu próximo ataque y causa 1d8 puntos de daño extra en cada impacto. Ya sea que impactes o falles, tu velocidad al caminar aumenta en 30 pies hasta el final de ese turno. Feature/&PowerStrikeWithTheWindTitle=Golpea con el viento Feedback/&AdditionalDamageElementalInfusionAcidFormat=¡Absorbe elementos! @@ -82,7 +74,15 @@ Spell/&ChaosBoltDescription=Realiza un ataque de hechizo a distancia contra un o Spell/&ChaosBoltTitle=Rayo del caos Spell/&ChromaticOrbDescription=Lanzas una esfera de energía de 4 pulgadas de diámetro a una criatura que puedas ver dentro del alcance. Eliges ácido, frío, fuego, relámpago, veneno o trueno como el tipo de orbe que creas y luego realizas un ataque de hechizo a distancia contra el objetivo. Si el ataque impacta, la criatura recibe 3d8 puntos de daño del tipo que elegiste. Spell/&ChromaticOrbTitle=Orbe cromático +Spell/&CommandSpellApproachDescription=El objetivo se mueve hacia ti por la ruta más corta y directa, y finaliza su turno si se mueve a menos de 5 pies de ti. +Spell/&CommandSpellApproachTitle=Acercarse Spell/&CommandSpellDescription=Pronuncias una orden de una palabra a una criatura que puedas ver dentro del alcance. El objetivo debe superar una tirada de salvación de Sabiduría o seguir la orden en su siguiente turno. Solo puedes dar órdenes a criaturas con las que compartes un idioma, lo que incluye a todos los humanoides. Para dar órdenes a una criatura no humanoide, debes saber Dracónico para Dragones, Élfico para Fey, Gigante para Gigantes, Infernal para Demonios y Terrano para Elementales. Las órdenes son las siguientes:\n• Acercarse: el objetivo se mueve hacia ti por la ruta más corta y directa, y termina su turno si se mueve a 5 pies o menos de ti.\n• Huir: el objetivo pasa su turno alejándose de ti por el medio más rápido disponible.\n• Arrastrarse: el objetivo cae boca abajo y luego termina su turno.\n• Detenerse: el objetivo no se mueve y no realiza ninguna acción.\nCuando lanzas este hechizo usando un espacio de hechizo de nivel 2 o superior, puedes seleccionar una criatura adicional dentro del alcance por cada nivel de espacio por encima del 2. +Spell/&CommandSpellFleeDescription=El objetivo pasa su turno alejándose de ti por el medio más rápido disponible. +Spell/&CommandSpellFleeTitle=Huir +Spell/&CommandSpellGrovelDescription=El objetivo cae boca abajo y luego termina su turno. +Spell/&CommandSpellGrovelTitle=Arrastrarse +Spell/&CommandSpellHaltDescription=El objetivo no se mueve y no realiza ninguna acción. +Spell/&CommandSpellHaltTitle=Detener Spell/&CommandSpellTitle=Dominio Spell/&DissonantWhispersDescription=Susurras una melodía discordante que solo una criatura de tu elección que esté dentro del alcance puede oír, atormentándola con un dolor terrible. El objetivo debe realizar una tirada de salvación de Sabiduría. Si falla, sufre 3d6 puntos de daño psíquico y debe usar inmediatamente su reacción, si está disponible, para alejarse de ti tanto como su velocidad le permita. La criatura no se mueve hacia un terreno obviamente peligroso, como un fuego o un pozo. Si tiene éxito, el objetivo sufre la mitad del daño y no tiene que alejarse. Cuando lanzas este conjuro usando un espacio de conjuro de nivel 2 o superior, el daño aumenta en 1d6 por cada nivel de espacio por encima del 1. Spell/&DissonantWhispersTitle=Susurros disonantes diff --git a/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells01-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells01-fr.txt index f11852c823..6e8f10515c 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells01-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells01-fr.txt @@ -30,14 +30,6 @@ Condition/&ConditionWitchBoltTitle=Boulon de sorcière Feature/&FeatureGiftOfAlacrityDescription=Vous pouvez ajouter 1d8 à vos jets d'initiative. Feature/&FeatureGiftOfAlacrityTitle=Don d'empressement Feature/&PowerChaosBoltDescription=Utilisez {0} dégâts. -Feature/&PowerCommandSpellApproachDescription=La cible se déplace vers vous par le chemin le plus court et le plus direct, mettant fin à son tour si elle se déplace à moins de 5 pieds de vous. -Feature/&PowerCommandSpellApproachTitle=Approche -Feature/&PowerCommandSpellFleeDescription=La cible passe son tour à s'éloigner de vous par le moyen le plus rapide disponible. -Feature/&PowerCommandSpellFleeTitle=Fuir -Feature/&PowerCommandSpellGrovelDescription=La cible tombe à terre et termine son tour. -Feature/&PowerCommandSpellGrovelTitle=Ramper -Feature/&PowerCommandSpellHaltDescription=La cible ne bouge pas et n'effectue aucune action. -Feature/&PowerCommandSpellHaltTitle=Arrêt Feature/&PowerStrikeWithTheWindDescription=Accorde un avantage à votre prochaine attaque et inflige 1d8 points de dégâts supplémentaires en cas de réussite. Que vous touchiez ou ratiez, votre vitesse de marche augmente de 9 mètres jusqu'à la fin de ce tour. Feature/&PowerStrikeWithTheWindTitle=Frappez avec le vent Feedback/&AdditionalDamageElementalInfusionAcidFormat=Absorbez les éléments ! @@ -82,7 +74,15 @@ Spell/&ChaosBoltDescription=Lancez une attaque à distance contre une cible. En Spell/&ChaosBoltTitle=Éclair du chaos Spell/&ChromaticOrbDescription=Vous lancez une sphère d'énergie de 10 cm de diamètre sur une créature que vous pouvez voir à portée. Vous choisissez l'acide, le froid, le feu, la foudre, le poison ou le tonnerre comme type d'orbe que vous créez, puis effectuez une attaque de sort à distance contre la cible. Si l'attaque touche, la créature subit 3d8 dégâts du type que vous avez choisi. Spell/&ChromaticOrbTitle=Orbe chromatique +Spell/&CommandSpellApproachDescription=La cible se déplace vers vous par le chemin le plus court et le plus direct, mettant fin à son tour si elle se déplace à moins de 5 pieds de vous. +Spell/&CommandSpellApproachTitle=Approche Spell/&CommandSpellDescription=Vous donnez un ordre d'un seul mot à une créature que vous pouvez voir à portée. La cible doit réussir un jet de sauvegarde de Sagesse ou suivre l'ordre à son prochain tour. Vous ne pouvez commander qu'aux créatures avec lesquelles vous partagez une langue, ce qui inclut tous les humanoïdes. Pour commander une créature non-humanoïde, vous devez connaître le draconique pour les dragons, l'elfique pour les fées, le géant pour les géants, l'infernal pour les démons et le terran pour les élémentaires. Les ordres sont les suivants :\n• Approche : la cible se déplace vers vous par le chemin le plus court et le plus direct, mettant fin à son tour si elle se déplace à 1,50 mètre ou moins de vous.\n• Fuir : la cible passe son tour à s'éloigner de vous par le moyen le plus rapide disponible.\n• Ramper : la cible tombe à terre puis termine son tour.\n• Halte : la cible ne bouge pas et n'entreprend aucune action.\nLorsque vous lancez ce sort en utilisant un emplacement de sort de niveau 2 ou supérieur, vous pouvez cibler une créature supplémentaire à portée pour chaque niveau d'emplacement au-dessus du niveau 2. +Spell/&CommandSpellFleeDescription=La cible passe son tour à s'éloigner de vous par le moyen le plus rapide disponible. +Spell/&CommandSpellFleeTitle=Fuir +Spell/&CommandSpellGrovelDescription=La cible tombe à terre et termine son tour. +Spell/&CommandSpellGrovelTitle=Ramper +Spell/&CommandSpellHaltDescription=La cible ne bouge pas et n'effectue aucune action. +Spell/&CommandSpellHaltTitle=Arrêt Spell/&CommandSpellTitle=Commande Spell/&DissonantWhispersDescription=Vous murmurez une mélodie discordante que seule une créature de votre choix à portée peut entendre, la secouant d'une douleur terrible. La cible doit réussir un jet de sauvegarde de Sagesse. En cas d'échec, elle subit 3d6 dégâts psychiques et doit immédiatement utiliser sa réaction, si elle en a la possibilité, pour s'éloigner de vous aussi loin que sa vitesse le lui permet. La créature ne se déplace pas sur un terrain manifestement dangereux, comme un feu ou une fosse. En cas de réussite, la cible subit la moitié des dégâts et n'a pas à s'éloigner. Lorsque vous lancez ce sort en utilisant un emplacement de sort de niveau 2 ou supérieur, les dégâts augmentent de 1d6 pour chaque niveau d'emplacement au-dessus du 1er. Spell/&DissonantWhispersTitle=Chuchotements dissonants diff --git a/SolastaUnfinishedBusiness/Translations/it/Spells/Spells01-it.txt b/SolastaUnfinishedBusiness/Translations/it/Spells/Spells01-it.txt index 3f30a7fbe9..7a1b02729a 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Spells/Spells01-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Spells/Spells01-it.txt @@ -30,14 +30,6 @@ Condition/&ConditionWitchBoltTitle=Fulmine della strega Feature/&FeatureGiftOfAlacrityDescription=Puoi aggiungere 1d8 ai tuoi tiri di iniziativa. Feature/&FeatureGiftOfAlacrityTitle=Dono di Alacrità Feature/&PowerChaosBoltDescription=Usa {0} danni. -Feature/&PowerCommandSpellApproachDescription=Il bersaglio si muove verso di te seguendo il percorso più breve e diretto e termina il suo turno se si sposta entro 1,5 metri da te. -Feature/&PowerCommandSpellApproachTitle=Approccio -Feature/&PowerCommandSpellFleeDescription=Il bersaglio trascorre il suo turno allontanandosi da te con il mezzo più veloce disponibile. -Feature/&PowerCommandSpellFleeTitle=Fuggire -Feature/&PowerCommandSpellGrovelDescription=Il bersaglio cade prono e poi termina il suo turno. -Feature/&PowerCommandSpellGrovelTitle=Umiliarsi -Feature/&PowerCommandSpellHaltDescription=Il bersaglio non si muove e non intraprende alcuna azione. -Feature/&PowerCommandSpellHaltTitle=Fermarsi Feature/&PowerStrikeWithTheWindDescription=Concedi vantaggio al tuo prossimo attacco e infliggi 1d8 danni extra a colpo andato a segno. Che tu colpisca o meno, la tua velocità di camminata aumenta di 30 piedi fino alla fine di quel turno. Feature/&PowerStrikeWithTheWindTitle=Colpire con il vento Feedback/&AdditionalDamageElementalInfusionAcidFormat=Assorbi gli elementi! @@ -82,7 +74,15 @@ Spell/&ChaosBoltDescription=Esegui un attacco magico a distanza contro un bersag Spell/&ChaosBoltTitle=Fulmine del Caos Spell/&ChromaticOrbDescription=Scagli una sfera di energia di 4 pollici di diametro contro una creatura che puoi vedere entro il raggio d'azione. Scegli acido, freddo, fuoco, fulmine, veleno o tuono per il tipo di sfera che crei, quindi esegui un attacco magico a distanza contro il bersaglio. Se l'attacco colpisce, la creatura subisce 3d8 danni del tipo che hai scelto. Spell/&ChromaticOrbTitle=Sfera cromatica +Spell/&CommandSpellApproachDescription=Il bersaglio si muove verso di te seguendo il percorso più breve e diretto e termina il suo turno se si sposta entro 1,5 metri da te. +Spell/&CommandSpellApproachTitle=Approccio Spell/&CommandSpellDescription=Pronuncia un comando di una sola parola a una creatura che puoi vedere entro il raggio d'azione. Il bersaglio deve superare un tiro salvezza su Saggezza o eseguire il comando nel suo turno successivo. Puoi comandare solo creature con cui condividi una lingua, inclusi tutti gli umanoidi. Per comandare una creatura non umanoide, devi conoscere il Draconico per i Draghi, l'Elfico per i Fati, il Gigante per i Giganti, l'Infernale per i Demoni e il Terran per gli Elementali. I comandi seguono:\n• Avvicinamento: il bersaglio si muove verso di te attraverso la via più breve e diretta, terminando il suo turno se si muove entro 5 piedi da te.\n• Fuggire: il bersaglio trascorre il suo turno allontanandosi da te con il mezzo più veloce disponibile.\n• Umiliarsi: il bersaglio cade prono e poi termina il suo turno.\n• Arrestare: il bersaglio non si muove e non esegue azioni.\nQuando lanci questo incantesimo usando uno slot incantesimo di 2° livello o superiore, puoi prendere di mira una creatura aggiuntiva entro il raggio d'azione per ogni livello di slot superiore al 2°. +Spell/&CommandSpellFleeDescription=Il bersaglio trascorre il suo turno allontanandosi da te con il mezzo più veloce disponibile. +Spell/&CommandSpellFleeTitle=Fuggire +Spell/&CommandSpellGrovelDescription=Il bersaglio cade prono e poi termina il suo turno. +Spell/&CommandSpellGrovelTitle=Umiliarsi +Spell/&CommandSpellHaltDescription=Il bersaglio non si muove e non intraprende alcuna azione. +Spell/&CommandSpellHaltTitle=Fermarsi Spell/&CommandSpellTitle=Comando Spell/&DissonantWhispersDescription=Sussurri una melodia discordante che solo una creatura a tua scelta entro il raggio d'azione può sentire, lacerandola con un dolore terribile. Il bersaglio deve effettuare un tiro salvezza su Saggezza. Se fallisce il tiro salvezza, subisce 3d6 danni psichici e deve usare immediatamente la sua reazione, se disponibile, per allontanarsi da te il più lontano possibile dalla sua velocità. La creatura non si sposta in un terreno palesemente pericoloso, come un fuoco o una fossa. Se supera il tiro salvezza, il bersaglio subisce la metà dei danni e non deve allontanarsi. Quando lanci questo incantesimo usando uno slot incantesimo di 2° livello o superiore, il danno aumenta di 1d6 per ogni livello di slot superiore al 1°. Spell/&DissonantWhispersTitle=Sussurri dissonanti diff --git a/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells01-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells01-ja.txt index a6539edcb2..169fb6cc0d 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells01-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells01-ja.txt @@ -30,14 +30,6 @@ Condition/&ConditionWitchBoltTitle=ウィッチボルト Feature/&FeatureGiftOfAlacrityDescription=イニシアチブロールに 1d8 を追加できます。 Feature/&FeatureGiftOfAlacrityTitle=敏捷性の贈り物 Feature/&PowerChaosBoltDescription={0} ダメージを与えます。 -Feature/&PowerCommandSpellApproachDescription=ターゲットは最短かつ最も直接的な経路であなたに向かって移動し、あなたの 5 フィート以内に移動した場合にターンを終了します。 -Feature/&PowerCommandSpellApproachTitle=アプローチ -Feature/&PowerCommandSpellFleeDescription=ターゲットは、そのターン、利用可能な最速の手段であなたから離れていきます。 -Feature/&PowerCommandSpellFleeTitle=逃げる -Feature/&PowerCommandSpellGrovelDescription=対象はうつ伏せになり、その後ターンを終了します。 -Feature/&PowerCommandSpellGrovelTitle=グローベル -Feature/&PowerCommandSpellHaltDescription=ターゲットは移動せず、アクションも実行しません。 -Feature/&PowerCommandSpellHaltTitle=停止 Feature/&PowerStrikeWithTheWindDescription=次の攻撃にアドバンテージを与え、ヒット時に追加の 1d8 ダメージを与えます。当たっても外れても、そのターンが終了するまで歩行速度が 30 フィート増加します。 Feature/&PowerStrikeWithTheWindTitle=風とストライク Feedback/&AdditionalDamageElementalInfusionAcidFormat=エレメントを吸収せよ! @@ -82,7 +74,15 @@ Spell/&ChaosBoltDescription=ターゲットに対して遠隔呪文攻撃を行 Spell/&ChaosBoltTitle=カオスボルト Spell/&ChromaticOrbDescription=範囲内に見える生き物に直径 4 インチのエネルギーの球を投げます。作成するオーブの種類として酸、冷気、火、稲妻、毒、または雷を選択し、ターゲットに対して遠隔呪文攻撃を行います。攻撃が命中した場合、そのクリーチャーはあなたが選んだタイプに 3d8 のダメージを受けます。 Spell/&ChromaticOrbTitle=クロマティックオーブ +Spell/&CommandSpellApproachDescription=ターゲットは最短かつ最も直接的な経路であなたに向かって移動し、あなたの 5 フィート以内に移動した場合にターンを終了します。 +Spell/&CommandSpellApproachTitle=アプローチ Spell/&CommandSpellDescription=あなたは範囲内にいる、あなたが見ることができるクリーチャーに、一言の命令を告げる。対象は【判断力】セーヴィング・スローに成功するか、次のターンに命令に従わなければならない。あなたは、言語を共有するクリーチャーにのみ命令できる。これにはすべてのヒューマノイドが含まれる。非ヒューマノイドのクリーチャーに命令するには、ドラゴンはドラゴン語、フェイはエルフ語、巨人は巨人語、悪魔は地獄語、エレメンタルは地球語を知っている必要がある。命令は以下のとおり:\n• 接近: 対象は最短かつ最も直接的な経路であなたに向かって移動し、対象があなたから 5 フィート以内に移動した場合にターンを終了する。\n• 逃走: 対象は、利用可能な最速の手段であなたから離れることにターンを費やす。\n• 卑屈: 対象はうつ伏せになり、その後ターンを終了する。\n• 停止: 対象は移動せず、アクションも行わない。\nこの呪文を 2 レベル以上の呪文スロットを使用して発動する場合、2 レベルを超える各スロット レベルごとに、範囲内の追加クリーチャーをターゲットにすることができる。 +Spell/&CommandSpellFleeDescription=ターゲットは、そのターン、利用可能な最速の手段であなたから離れていきます。 +Spell/&CommandSpellFleeTitle=逃げる +Spell/&CommandSpellGrovelDescription=対象はうつ伏せになり、その後ターンを終了します。 +Spell/&CommandSpellGrovelTitle=グローベル +Spell/&CommandSpellHaltDescription=ターゲットは移動せず、アクションも実行しません。 +Spell/&CommandSpellHaltTitle=停止 Spell/&CommandSpellTitle=指示 Spell/&DissonantWhispersDescription=範囲内にいる選択した 1 体のクリーチャーにのみ聞こえる不協和音のメロディーをささやき、そのクリーチャーにひどい苦痛を与えます。ターゲットは【判断力】セーヴィング スローを行わなければなりません。セーヴィング スローに失敗すると、ターゲットは 3d6 の精神ダメージを受け、可能であれば、即座にリアクションを使用して、移動速度が許す限り遠くまで移動して、ターゲットから離れなければなりません。クリーチャーは、火や穴など、明らかに危険な地面には移動しません。セーヴィング スローに成功すると、ターゲットは半分のダメージを受け、離れる必要もありません。この呪文を 2 レベル以上の呪文スロットを使用して発動すると、1 レベルを超える各スロット レベルごとにダメージが 1d6 増加します。 Spell/&DissonantWhispersTitle=不協和音のささやき diff --git a/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells01-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells01-ko.txt index 47853a937e..52f0051dae 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells01-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells01-ko.txt @@ -30,14 +30,6 @@ Condition/&ConditionWitchBoltTitle=마녀 볼트 Feature/&FeatureGiftOfAlacrityDescription=이니셔티브 롤에 1d8을 추가할 수 있습니다. Feature/&FeatureGiftOfAlacrityTitle=민첩함의 선물 Feature/&PowerChaosBoltDescription={0} 피해를 사용하세요. -Feature/&PowerCommandSpellApproachDescription=타겟은 가장 짧고 직접적인 경로로 당신을 향해 이동하며, 타겟이 당신으로부터 5피트 이내로 접근하면 턴이 끝납니다. -Feature/&PowerCommandSpellApproachTitle=접근하다 -Feature/&PowerCommandSpellFleeDescription=타겟은 가능한 가장 빠른 수단을 통해 당신에게서 멀어지며 턴을 보냅니다. -Feature/&PowerCommandSpellFleeTitle=서두르다 -Feature/&PowerCommandSpellGrovelDescription=타겟이 엎어진 후 턴이 끝납니다. -Feature/&PowerCommandSpellGrovelTitle=기다 -Feature/&PowerCommandSpellHaltDescription=대상은 움직이지 않고 아무런 행동도 취하지 않습니다. -Feature/&PowerCommandSpellHaltTitle=정지 Feature/&PowerStrikeWithTheWindDescription=다음 공격에 이점을 부여하고 적중 시 1d8의 추가 피해를 입힙니다. 맞히든 놓치든, 회전이 끝날 때까지 걷는 속도가 30피트 증가합니다. Feature/&PowerStrikeWithTheWindTitle=바람으로 공격하다 Feedback/&AdditionalDamageElementalInfusionAcidFormat=요소를 흡수하세요! @@ -82,7 +74,15 @@ Spell/&ChaosBoltDescription=대상에게 원거리 주문 공격을 합니다. Spell/&ChaosBoltTitle=카오스볼트 Spell/&ChromaticOrbDescription=범위 내에서 볼 수 있는 생물에게 직경 4인치의 에너지 구체를 던집니다. 생성하는 오브 유형에 대해 산성, 냉기, 불, 번개, 독 또는 천둥을 선택한 다음 대상에 대해 원거리 주문 공격을 가합니다. 공격이 적중하면 생물은 선택한 유형의 3d8 피해를 입습니다. Spell/&ChromaticOrbTitle=색채의 오브 +Spell/&CommandSpellApproachDescription=타겟은 가장 짧고 직접적인 경로로 당신을 향해 이동하며, 타겟이 당신으로부터 5피트 이내로 접근하면 턴이 끝납니다. +Spell/&CommandSpellApproachTitle=접근하다 Spell/&CommandSpellDescription=당신은 범위 내에서 볼 수 있는 생물에게 한 단어 명령을 내립니다. 대상은 지혜 구원 굴림에 성공하거나 다음 턴에 명령을 따라야 합니다. 당신은 모든 인간형을 포함하여 당신과 언어를 공유하는 생물에게만 명령을 내릴 수 있습니다. 비인간형 생물을 명령하려면 드래곤의 경우 드라코닉, 페이의 경우 엘프, 거인의 경우 자이언트, 악마의 경우 인페르날, 엘리멘탈의 경우 테란을 알아야 합니다. 명령은 다음과 같습니다.\n• 접근: 대상은 가장 짧고 직접적인 경로로 당신에게 다가오며, 5피트 이내로 이동하면 턴을 끝냅니다.\n• 도망: 대상은 가능한 가장 빠른 수단으로 당신에게서 멀어지며 턴을 보냅니다.\n• 굴욕: 대상은 엎드린 다음 턴을 끝냅니다.\n• 정지: 대상은 움직이지 않고 아무런 행동도 취하지 않습니다.\n2레벨 이상의 주문 슬롯을 사용하여 이 주문을 시전할 때 2레벨을 넘는 슬롯 레벨마다 범위 내에 있는 추가 생물을 대상으로 지정할 수 있습니다. +Spell/&CommandSpellFleeDescription=타겟은 가능한 가장 빠른 수단을 통해 당신에게서 멀어지며 턴을 보냅니다. +Spell/&CommandSpellFleeTitle=서두르다 +Spell/&CommandSpellGrovelDescription=타겟이 엎어진 후 턴이 끝납니다. +Spell/&CommandSpellGrovelTitle=기다 +Spell/&CommandSpellHaltDescription=대상은 움직이지 않고 아무런 행동도 취하지 않습니다. +Spell/&CommandSpellHaltTitle=정지 Spell/&CommandSpellTitle=명령 Spell/&DissonantWhispersDescription=당신은 범위 내에서 당신이 선택한 한 생명체만 들을 수 있는 불협화음의 멜로디를 속삭이며, 끔찍한 고통으로 그 생명체를 괴롭힙니다. 대상은 지혜 구원 굴림을 해야 합니다. 구원에 실패하면, 대상은 3d6의 사이킥 피해를 입고, 가능하다면 즉시 반응을 사용하여 속도가 허락하는 한 멀리 당신에게서 멀어져야 합니다. 그 생명체는 불이나 구덩이와 같이 명백히 위험한 곳으로 이동하지 않습니다. 구원에 성공하면, 대상은 절반의 피해를 입고, 멀어질 필요가 없습니다. 2레벨 이상의 주문 슬롯을 사용하여 이 주문을 시전하면, 1레벨 위의 슬롯 레벨마다 피해가 1d6씩 증가합니다. Spell/&DissonantWhispersTitle=불협화음의 속삭임 diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells01-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells01-pt-BR.txt index b44f727ddd..ccfb87deec 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells01-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells01-pt-BR.txt @@ -30,14 +30,6 @@ Condition/&ConditionWitchBoltTitle=Parafuso de Bruxa Feature/&FeatureGiftOfAlacrityDescription=Você pode adicionar 1d8 às suas jogadas de iniciativa. Feature/&FeatureGiftOfAlacrityTitle=Presente da presteza Feature/&PowerChaosBoltDescription=Use {0} de dano. -Feature/&PowerCommandSpellApproachDescription=O alvo se move em sua direção pela rota mais curta e direta, terminando seu turno se ele se mover a menos de 1,5 metro de você. -Feature/&PowerCommandSpellApproachTitle=Abordagem -Feature/&PowerCommandSpellFleeDescription=O alvo passa seu turno se afastando de você da maneira mais rápida possível. -Feature/&PowerCommandSpellFleeTitle=Fugir -Feature/&PowerCommandSpellGrovelDescription=O alvo cai no chão e então termina seu turno. -Feature/&PowerCommandSpellGrovelTitle=Rastejar -Feature/&PowerCommandSpellHaltDescription=O alvo não se move e não realiza nenhuma ação. -Feature/&PowerCommandSpellHaltTitle=Parar Feature/&PowerStrikeWithTheWindDescription=Conceda vantagem ao seu próximo ataque e causa 1d8 de dano extra em um acerto. Não importa se você acerta ou erra, sua velocidade de caminhada aumenta em 30 pés até o fim daquele turno. Feature/&PowerStrikeWithTheWindTitle=Ataque com o vento Feedback/&AdditionalDamageElementalInfusionAcidFormat=Absorva elementos! @@ -82,7 +74,15 @@ Spell/&ChaosBoltDescription=Faça um ataque mágico à distância contra um alvo Spell/&ChaosBoltTitle=Raio do Caos Spell/&ChromaticOrbDescription=Você arremessa uma esfera de energia de 4 polegadas de diâmetro em uma criatura que você pode ver dentro do alcance. Você escolhe ácido, frio, fogo, relâmpago, veneno ou trovão para o tipo de orbe que você cria, e então faz um ataque de magia à distância contra o alvo. Se o ataque acertar, a criatura sofre 3d8 de dano do tipo que você escolheu. Spell/&ChromaticOrbTitle=Orbe Cromático +Spell/&CommandSpellApproachDescription=O alvo se move em sua direção pela rota mais curta e direta, terminando seu turno se ele se mover a menos de 1,5 metro de você. +Spell/&CommandSpellApproachTitle=Abordagem Spell/&CommandSpellDescription=Você fala um comando de uma palavra para uma criatura que você pode ver dentro do alcance. O alvo deve ser bem-sucedido em um teste de resistência de Sabedoria ou seguir o comando em seu próximo turno. Você só pode comandar criaturas com as quais você compartilha um idioma, o que inclui todos os humanoides. Para comandar uma criatura não humanoide, você deve saber Dracônico para Dragões, Élfico para Feéricos, Gigante para Gigantes, Infernal para Demônios e Terrano para Elementais. Os comandos seguem:\n• Aproximar-se: O alvo se move em sua direção pela rota mais curta e direta, terminando seu turno se ele se mover a 1,5 m de você.\n• Fugir: O alvo gasta seu turno se afastando de você pelo meio mais rápido disponível.\n• Rastejar: O alvo cai e então termina seu turno.\n• Parar: O alvo não se move e não realiza nenhuma ação.\nQuando você conjura esta magia usando um espaço de magia de 2º nível ou superior, você pode escolher uma criatura adicional dentro do alcance para cada nível de espaço acima de 2º. +Spell/&CommandSpellFleeDescription=O alvo passa seu turno se afastando de você da maneira mais rápida possível. +Spell/&CommandSpellFleeTitle=Fugir +Spell/&CommandSpellGrovelDescription=O alvo cai no chão e então termina seu turno. +Spell/&CommandSpellGrovelTitle=Rastejar +Spell/&CommandSpellHaltDescription=O alvo não se move e não realiza nenhuma ação. +Spell/&CommandSpellHaltTitle=Parar Spell/&CommandSpellTitle=Comando Spell/&DissonantWhispersDescription=Você sussurra uma melodia dissonante que somente uma criatura de sua escolha dentro do alcance pode ouvir, atormentando-a com uma dor terrível. O alvo deve fazer um teste de resistência de Sabedoria. Em um teste falho, ele sofre 3d6 de dano psíquico e deve usar imediatamente sua reação, se disponível, para se mover o mais longe que sua velocidade permitir para longe de você. A criatura não se move para um terreno obviamente perigoso, como uma fogueira ou um poço. Em um teste bem-sucedido, o alvo sofre metade do dano e não precisa se afastar. Quando você conjura esta magia usando um espaço de magia de 2º nível ou superior, o dano aumenta em 1d6 para cada nível de espaço acima do 1º. Spell/&DissonantWhispersTitle=Sussurros Dissonantes diff --git a/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells01-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells01-ru.txt index e85a7cf7df..3b3509c273 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells01-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells01-ru.txt @@ -30,14 +30,6 @@ Condition/&ConditionWitchBoltTitle=Ведьмин снаряд Feature/&FeatureGiftOfAlacrityDescription=Вы можете добавить 1d8 к вашим броскам инициативы. Feature/&FeatureGiftOfAlacrityTitle=Дар готовности Feature/&PowerChaosBoltDescription=Использован урон типа {0}. -Feature/&PowerCommandSpellApproachDescription=Цель перемещается ближе к вам по кратчайшему и самому прямому маршруту, оканчивая ход, если оказывается в пределах 5 футов от вас. -Feature/&PowerCommandSpellApproachTitle=Подойди -Feature/&PowerCommandSpellFleeDescription=Цель тратит ход на то, что перемещается прочь от вас самым быстрым способом. -Feature/&PowerCommandSpellFleeTitle=Убегай -Feature/&PowerCommandSpellGrovelDescription=Цель падает ничком и оканчивает ход. -Feature/&PowerCommandSpellGrovelTitle=Падай -Feature/&PowerCommandSpellHaltDescription=Цель не перемещается и не совершает никаких действий. -Feature/&PowerCommandSpellHaltTitle=Стой Feature/&PowerStrikeWithTheWindDescription=Дарует преимущество на вашу следующую атаку оружием и наносит дополнительно 1d8 урона силовым полем при попадании. Вне зависимости от того, попали вы или промахнулись, ваша скорость ходьбы увеличивается на 30 футов до конца этого хода. Feature/&PowerStrikeWithTheWindTitle=Удар Зефира Feedback/&AdditionalDamageElementalInfusionAcidFormat=Поглощение стихий! @@ -82,7 +74,15 @@ Spell/&ChaosBoltDescription=Вы бросаете волнистую, трепе Spell/&ChaosBoltTitle=Снаряд хаоса Spell/&ChromaticOrbDescription=Вы бросаете 4-дюймовую сферу энергии в существо, которое видите в пределах дистанции. Выберите звук, кислоту, огонь, холод, электричество или яд при создании сферы, а затем совершите по цели дальнобойную атаку заклинанием. Если атака попадает, существо получает 3d8 урона выбранного вида. Spell/&ChromaticOrbTitle=Цветной шарик +Spell/&CommandSpellApproachDescription=Цель перемещается ближе к вам по кратчайшему и самому прямому маршруту, оканчивая ход, если оказывается в пределах 5 футов от вас. +Spell/&CommandSpellApproachTitle=Подойди Spell/&CommandSpellDescription=Вы произносите команду из одного слова существу, которое видите в пределах дистанции. Цель должна преуспеть в спасброске Мудрости, иначе в свой следующий ход будет исполнять эту команду. Вы можете отдавать приказы только существами, которые понимают ваш язык, включая всех гуманоидов. Чтобы отдавать приказы негуманоидным существам, вы должны знать Драконий язык для драконов, Эльфийский язык для фей, Великаний язык для великанов, Инфернальный язык для демонов и Изначальниый для элементалей. Приказы могут быть следующими:\n• Подойди: Цель перемещается ближе к вам по кратчайшему и самому прямому маршруту, оканчивая ход, если оказывается в пределах 5 футов от вас.\n• Убегай: Цель тратит ход на то, что перемещается прочь от вас самым быстрым способом.\n• Падай: Цель падает ничком и оканчивает ход.\n• Стой: Цель не перемещается и не совершает никаких действий.\nЕсли вы накладываете это заклинание, используя ячейку 2-го уровня или выше, вы можете воздействовать на одно дополнительное существо за каждый уровень ячейки выше первого. +Spell/&CommandSpellFleeDescription=Цель тратит ход на то, что перемещается прочь от вас самым быстрым способом. +Spell/&CommandSpellFleeTitle=Убегай +Spell/&CommandSpellGrovelDescription=Цель падает ничком и оканчивает ход. +Spell/&CommandSpellGrovelTitle=Падай +Spell/&CommandSpellHaltDescription=Цель не перемещается и не совершает никаких действий. +Spell/&CommandSpellHaltTitle=Стой Spell/&CommandSpellTitle=Приказ Spell/&DissonantWhispersDescription=Вы шёпотом пропеваете нестройную мелодию, которую слышит только выбранное вами существо в пределах дистанции, и которая причиняет ему жуткую боль. Цель должна совершить спасбросок Мудрости. В случае провала она получает урон психической энергией 3d6 и должна немедленно реакцией, если она доступна, переместиться прочь от вас настолько далеко, насколько позволяет её скорость. Существо не будет входить в очевидно опасные места, такие как огонь или яма. В случае успеха цель получает половину урона и не должна отходить. Если вы накладываете это заклинание, используя ячейку 2-го уровня или выше, урон увеличивается на 1d6 за каждый уровень ячейки выше первого. Spell/&DissonantWhispersTitle=Диссонирующий шёпот diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells01-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells01-zh-CN.txt index 46f548ce21..37d47933a0 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells01-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells01-zh-CN.txt @@ -30,14 +30,6 @@ Condition/&ConditionWitchBoltTitle=巫术箭 Feature/&FeatureGiftOfAlacrityDescription=你可以将 1d8 添加到你的先攻掷骰中。 Feature/&FeatureGiftOfAlacrityTitle=灵敏之赐 Feature/&PowerChaosBoltDescription=使用{0}伤害。 -Feature/&PowerCommandSpellApproachDescription=目标通过最短、最直接的路线向您移动,如果它移动到距离您 5 英尺以内,则结束其回合。 -Feature/&PowerCommandSpellApproachTitle=方法 -Feature/&PowerCommandSpellFleeDescription=目标会利用自己的回合以最快的方式远离你。 -Feature/&PowerCommandSpellFleeTitle=逃跑 -Feature/&PowerCommandSpellGrovelDescription=目标倒下然后结束其回合。 -Feature/&PowerCommandSpellGrovelTitle=拜倒 -Feature/&PowerCommandSpellHaltDescription=目标不动也不采取任何行动。 -Feature/&PowerCommandSpellHaltTitle=停止 Feature/&PowerStrikeWithTheWindDescription=为你的下一次攻击提供优势,并在命中时造成额外 1d8 伤害。无论你命中还是未命中,你的步行速度都会增加 30 尺,直到该回合结束。 Feature/&PowerStrikeWithTheWindTitle=乘风而击 Feedback/&AdditionalDamageElementalInfusionAcidFormat=元素注能! @@ -82,7 +74,15 @@ Spell/&ChaosBoltDescription=对目标进行远程法术攻击。命中后,目 Spell/&ChaosBoltTitle=混乱箭 Spell/&ChromaticOrbDescription=你向范围内你能看到的一个生物投掷一个直径 4 寸的能量球。你选择强酸、冷冻、火焰、闪电、毒素或雷鸣作为你创造的球体类型,然后对目标进行远程法术攻击。如果攻击命中,该生物将受到你选择类型的 3d8 点伤害。 Spell/&ChromaticOrbTitle=繁彩球 +Spell/&CommandSpellApproachDescription=目标通过最短、最直接的路线向您移动,如果它移动到距离您 5 英尺以内,则结束其回合。 +Spell/&CommandSpellApproachTitle=方法 Spell/&CommandSpellDescription=你对范围内可见的生物说出一个单词命令。目标必须成功通过感知豁免检定,否则在下一回合执行命令。你只能命令与你同语的生物,包括所有类人生物。要命令非类人生物,你必须知道龙语(龙)、精灵语(精类)、巨人语(巨人)、地狱语(恶魔)和土语(元素)。命令如下:\n• 接近:目标以最短最直接的路线向你移动,如果它移动到你 5 英尺以内,则结束回合。\n• 逃跑:目标在其回合中以最快的方式远离你。\n• 卑躬屈膝:目标倒下,然后结束回合。\n• 停止:目标不移动,不采取任何行动。\n当你使用 2 级或更高级别的法术位施放此法术时,你可以将范围内的生物作为目标,每个高于 2 级的法术位等级都增加一个。 +Spell/&CommandSpellFleeDescription=目标会利用自己的回合以最快的方式远离你。 +Spell/&CommandSpellFleeTitle=逃跑 +Spell/&CommandSpellGrovelDescription=目标倒下然后结束其回合。 +Spell/&CommandSpellGrovelTitle=拜倒 +Spell/&CommandSpellHaltDescription=目标不动也不采取任何行动。 +Spell/&CommandSpellHaltTitle=停止 Spell/&CommandSpellTitle=命令 Spell/&DissonantWhispersDescription=你低声吟唱着一段刺耳的旋律,只有你选择的范围内的一个生物可以听到,这让目标痛苦不堪。目标必须进行一次感知豁免检定。如果豁免失败,目标将受到 3d6 精神伤害,并且必须立即使用其反应(如果可用)以尽可能快的速度远离你。该生物不会移动到明显危险的地方,例如火或坑。如果豁免成功,目标受到的伤害减半,并且不必离开。当你使用 2 级或更高级别的法术位施放此法术时,伤害每高于 1 级法术位等级增加 1d6。 Spell/&DissonantWhispersTitle=不和谐的私语 From 011003813ce0835bd96a02b404b14a252e3ef659 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sat, 7 Sep 2024 21:32:54 -0700 Subject: [PATCH 075/212] minor fixes and tweaks --- .../FightingStyles/Torchbearer.cs | 2 +- SolastaUnfinishedBusiness/Main.cs | 5 +- .../Models/DocumentationContext.cs | 143 ++++++------------ .../Models/PortraitsContext.cs | 23 +-- 4 files changed, 55 insertions(+), 118 deletions(-) diff --git a/SolastaUnfinishedBusiness/FightingStyles/Torchbearer.cs b/SolastaUnfinishedBusiness/FightingStyles/Torchbearer.cs index 4828ee0031..2020ed99dc 100644 --- a/SolastaUnfinishedBusiness/FightingStyles/Torchbearer.cs +++ b/SolastaUnfinishedBusiness/FightingStyles/Torchbearer.cs @@ -29,7 +29,7 @@ internal sealed class Torchbearer : AbstractFightingStyle false, AttributeDefinitions.Dexterity, false, - EffectDifficultyClassComputation.FixedValue, + EffectDifficultyClassComputation.AbilityScoreAndProficiency, AttributeDefinitions.Dexterity, 8) .SetParticleEffectParameters(SpellDefinitions.FireBolt) diff --git a/SolastaUnfinishedBusiness/Main.cs b/SolastaUnfinishedBusiness/Main.cs index 0612e02ce7..5515704452 100644 --- a/SolastaUnfinishedBusiness/Main.cs +++ b/SolastaUnfinishedBusiness/Main.cs @@ -123,10 +123,7 @@ internal static bool Load([NotNull] UnityModManager.ModEntry modEntry) internal static void LoadSettingFilenames() { - if (!Directory.Exists(SettingsFolder)) - { - Directory.CreateDirectory(SettingsFolder); - } + Directory.CreateDirectory(SettingsFolder); SettingsFiles = Directory.GetFiles(SettingsFolder) .Where(x => x.EndsWith(".xml")) diff --git a/SolastaUnfinishedBusiness/Models/DocumentationContext.cs b/SolastaUnfinishedBusiness/Models/DocumentationContext.cs index a346b8a90b..c0ffd1ae99 100644 --- a/SolastaUnfinishedBusiness/Models/DocumentationContext.cs +++ b/SolastaUnfinishedBusiness/Models/DocumentationContext.cs @@ -16,24 +16,14 @@ internal static class DocumentationContext { internal static void DumpDocumentation() { - if (!Directory.Exists($"{Main.ModFolder}/Documentation")) - { - Directory.CreateDirectory($"{Main.ModFolder}/Documentation"); - } - - if (!Directory.Exists($"{Main.ModFolder}/Documentation/Monsters")) - { - Directory.CreateDirectory($"{Main.ModFolder}/Documentation/Monsters"); - } + Directory.CreateDirectory($"{Main.ModFolder}/Documentation"); + Directory.CreateDirectory($"{Main.ModFolder}/Documentation/Monsters"); foreach (var characterFamilyDefinition in DatabaseRepository.GetDatabase() - .Where(x => x.Name != "Giant_Rugan" && x.Name != "Ooze")) + .Where(x => + x.Name is not ("Giant_Rugan" or "Ooze") && + x.ContentPack != CeContentPackContext.CeContentPack)) { - if (characterFamilyDefinition.ContentPack == CeContentPackContext.CeContentPack) - { - continue; - } - DumpMonsters($"SolastaMonsters{characterFamilyDefinition.Name}", x => x.CharacterFamily == characterFamilyDefinition.Name && x.DefaultFaction == "HostileMonsters"); } @@ -43,9 +33,21 @@ internal static void DumpDocumentation() DumpRaces("Races", x => vanillaRaces.Contains(x) || RacesContext.Races.Contains(x)); DumpRaces("Subraces", x => !vanillaRaces.Contains(x) && !RacesContext.Races.Contains(x)); + DumpClasses(string.Empty, _ => true); DumpSubclasses(string.Empty, GetModdedSubclasses().Union(GetVanillaSubclasses())); + DumpOthers("Spells", + x => + (x.ContentPack == CeContentPackContext.CeContentPack && + SpellsContext.Spells.Contains(x)) || + (x.ContentPack != CeContentPackContext.CeContentPack && + !SpellsContext.SpellsChildMaster.ContainsKey(x) && + x.implemented && + !x.Name.Contains("Invocation") && + !x.Name.EndsWith("NoFocus") && + !x.Name.EndsWith("_B"))); + DumpOthers("Backgrounds", _ => true); DumpOthers("Feats", @@ -59,17 +61,8 @@ internal static void DumpDocumentation() x => InvocationsContext.Invocations.Contains(x) || x.ContentPack != CeContentPackContext.CeContentPack); - DumpOthers("Spells", - x => - (x.ContentPack == CeContentPackContext.CeContentPack && - SpellsContext.Spells.Contains(x)) || - (x.ContentPack != CeContentPackContext.CeContentPack && - !SpellsContext.SpellsChildMaster.ContainsKey(x) && - x.implemented && - !x.Name.Contains("Invocation") && - !x.Name.EndsWith("NoFocus") && - !x.Name.EndsWith("_B"))); - DumpOthers("Items", x => x.IsArmor || x.IsWeapon); + DumpOthers("Items", + x => x.IsArmor || x.IsWeapon); DumpOthers("Metamagic", x => MetamagicContext.Metamagic.Contains(x) || @@ -115,6 +108,32 @@ private static string LazyManStripXml(string input) .Replace("", string.Empty); } + private static void DumpFeatureUnlockByLevel(StringBuilder outString, List featureUnlocks) + { + var level = 0; + + foreach (var featureUnlockByLevel in featureUnlocks + .Where(x => !x.FeatureDefinition.GuiPresentation.hidden) + .OrderBy(x => x.level)) + { + if (level != featureUnlockByLevel.level) + { + outString.AppendLine(); + outString.AppendLine($"## Level {featureUnlockByLevel.level}"); + outString.AppendLine(); + level = featureUnlockByLevel.level; + } + + var featureDefinition = featureUnlockByLevel.FeatureDefinition; + var description = LazyManStripXml(featureDefinition.FormatDescription()); + + outString.AppendLine($"* {featureDefinition.FormatTitle()}"); + outString.AppendLine(); + outString.AppendLine(description); + outString.AppendLine(); + } + } + private static void DumpClasses(string groupName, Func filter) { var outString = new StringBuilder(); @@ -129,28 +148,7 @@ private static void DumpClasses(string groupName, Func fil outString.AppendLine(LazyManStripXml(klass.FormatDescription())); outString.AppendLine(); - var level = 0; - - foreach (var featureUnlockByLevel in klass.FeatureUnlocks - .Where(x => !x.FeatureDefinition.GuiPresentation.hidden) - .OrderBy(x => x.level)) - { - if (level != featureUnlockByLevel.level) - { - outString.AppendLine(); - outString.AppendLine($"## Level {featureUnlockByLevel.level}"); - outString.AppendLine(); - level = featureUnlockByLevel.level; - } - - var featureDefinition = featureUnlockByLevel.FeatureDefinition; - var description = LazyManStripXml(featureDefinition.FormatDescription()); - - outString.AppendLine($"* {featureDefinition.FormatTitle()}"); - outString.AppendLine(); - outString.AppendLine(description); - outString.AppendLine(); - } + DumpFeatureUnlockByLevel(outString, klass.FeatureUnlocks); outString.AppendLine(); outString.AppendLine(); @@ -239,28 +237,7 @@ private static void DumpSubclasses( outString.AppendLine(LazyManStripXml(subclass.FormatDescription())); outString.AppendLine(); - var level = 0; - - foreach (var featureUnlockByLevel in subclass.FeatureUnlocks - .Where(x => !x.FeatureDefinition.GuiPresentation.hidden) - .OrderBy(x => x.level)) - { - if (level != featureUnlockByLevel.level) - { - outString.AppendLine(); - outString.AppendLine($"### Level {featureUnlockByLevel.level}"); - outString.AppendLine(); - level = featureUnlockByLevel.level; - } - - var featureDefinition = featureUnlockByLevel.FeatureDefinition; - var description = LazyManStripXml(featureDefinition.FormatDescription()); - - outString.AppendLine($"* {featureDefinition.FormatTitle()}"); - outString.AppendLine(); - outString.AppendLine(description); - outString.AppendLine(); - } + DumpFeatureUnlockByLevel(outString, subclass.FeatureUnlocks); outString.AppendLine(); outString.AppendLine(); @@ -291,28 +268,7 @@ private static void DumpRaces(string groupName, Func filte outString.AppendLine(LazyManStripXml(race.FormatDescription())); outString.AppendLine(); - var level = 0; - - foreach (var featureUnlockByLevel in race.FeatureUnlocks - .Where(x => !x.FeatureDefinition.GuiPresentation.hidden) - .OrderBy(x => x.level)) - { - if (level != featureUnlockByLevel.level) - { - outString.AppendLine(); - outString.AppendLine($"## Level {featureUnlockByLevel.level}"); - outString.AppendLine(); - level = featureUnlockByLevel.level; - } - - var featureDefinition = featureUnlockByLevel.FeatureDefinition; - var description = LazyManStripXml(featureDefinition.FormatDescription()); - - outString.AppendLine($"* {featureDefinition.FormatTitle()}"); - outString.AppendLine(); - outString.AppendLine(description); - outString.AppendLine(); - } + DumpFeatureUnlockByLevel(outString, race.FeatureUnlocks); outString.AppendLine(); outString.AppendLine(); @@ -435,8 +391,7 @@ private static string GetMonsterBlock([NotNull] MonsterDefinition monsterDefinit { var outString = new StringBuilder(); - outString.AppendLine( - $"# {counter++}. - {monsterDefinition.FormatTitle()}"); + outString.AppendLine($"# {counter++}. - {monsterDefinition.FormatTitle()}"); outString.AppendLine(); var description = LazyManStripXml(monsterDefinition.FormatDescription()); diff --git a/SolastaUnfinishedBusiness/Models/PortraitsContext.cs b/SolastaUnfinishedBusiness/Models/PortraitsContext.cs index dbef1ccb94..24dfa59754 100644 --- a/SolastaUnfinishedBusiness/Models/PortraitsContext.cs +++ b/SolastaUnfinishedBusiness/Models/PortraitsContext.cs @@ -19,25 +19,10 @@ public static class PortraitsContext internal static void Load() { - if (!Directory.Exists(PortraitsFolder)) - { - Directory.CreateDirectory(PortraitsFolder); - } - - if (!Directory.Exists(PreGenFolder)) - { - Directory.CreateDirectory(PreGenFolder); - } - - if (!Directory.Exists(PersonalFolder)) - { - Directory.CreateDirectory(PersonalFolder); - } - - if (!Directory.Exists(MonstersFolder)) - { - Directory.CreateDirectory(MonstersFolder); - } + Directory.CreateDirectory(PortraitsFolder); + Directory.CreateDirectory(PreGenFolder); + Directory.CreateDirectory(PersonalFolder); + Directory.CreateDirectory(MonstersFolder); } internal static bool HasCustomPortrait(RulesetCharacter rulesetCharacter) From 327934893a02f4796b0d1974c334cd46a91ebec4 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sun, 8 Sep 2024 08:33:03 -0700 Subject: [PATCH 076/212] duration data minute should be end of turn to be consistent with other mod features --- SolastaUnfinishedBusiness/FightingStyles/Torchbearer.cs | 2 +- SolastaUnfinishedBusiness/Races/GrayDwarf.cs | 2 +- SolastaUnfinishedBusiness/Spells/SpellBuildersLevel03.cs | 2 +- SolastaUnfinishedBusiness/Spells/SpellBuildersLevel04.cs | 2 +- SolastaUnfinishedBusiness/Spells/SpellBuildersLevel05.cs | 4 ++-- SolastaUnfinishedBusiness/Subclasses/PathOfTheLight.cs | 2 +- SolastaUnfinishedBusiness/Subclasses/RoguishRavenScion.cs | 2 +- 7 files changed, 8 insertions(+), 8 deletions(-) diff --git a/SolastaUnfinishedBusiness/FightingStyles/Torchbearer.cs b/SolastaUnfinishedBusiness/FightingStyles/Torchbearer.cs index 2020ed99dc..b2c8745042 100644 --- a/SolastaUnfinishedBusiness/FightingStyles/Torchbearer.cs +++ b/SolastaUnfinishedBusiness/FightingStyles/Torchbearer.cs @@ -23,7 +23,7 @@ internal sealed class Torchbearer : AbstractFightingStyle .SetEffectDescription( EffectDescriptionBuilder .Create() - .SetDurationData(DurationType.Minute, 1, TurnOccurenceType.StartOfTurn) + .SetDurationData(DurationType.Minute, 1) .SetTargetingData(Side.Enemy, RangeType.Touch, 0, TargetType.IndividualsUnique) .SetSavingThrowData( false, diff --git a/SolastaUnfinishedBusiness/Races/GrayDwarf.cs b/SolastaUnfinishedBusiness/Races/GrayDwarf.cs index c8e72adcf6..c91ca841e0 100644 --- a/SolastaUnfinishedBusiness/Races/GrayDwarf.cs +++ b/SolastaUnfinishedBusiness/Races/GrayDwarf.cs @@ -122,7 +122,7 @@ private static CharacterRaceDefinition BuildGrayDwarf() .SetEffectDescription( EffectDescriptionBuilder .Create(SpellDefinitions.Invisibility.EffectDescription) - .SetDurationData(DurationType.Minute, 1, TurnOccurenceType.StartOfTurn) + .SetDurationData(DurationType.Minute, 1) .SetTargetingData(Side.Ally, RangeType.Self, 0, TargetType.Self) .Build()) .AddToDB(); diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel03.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel03.cs index 0fd18eba49..060a93db26 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel03.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel03.cs @@ -91,7 +91,7 @@ internal static SpellDefinition BuildBlindingSmite() .Create(ConditionDefinitions.ConditionBlinded, $"ConditionBlindedBy{NAME}") .SetOrUpdateGuiPresentation(Category.Condition) .SetParentCondition(ConditionDefinitions.ConditionBlinded) - .SetSpecialDuration(DurationType.Minute, 1, TurnOccurenceType.StartOfTurn) + .SetSpecialDuration(DurationType.Minute, 1) .SetFeatures() .AddToDB(); diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel04.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel04.cs index 724af1e521..ce3e670226 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel04.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel04.cs @@ -1411,7 +1411,7 @@ internal static SpellDefinition BuildForestGuardian() // UI Only EffectDescriptionBuilder .Create() - .SetDurationData(DurationType.Minute, 1, TurnOccurenceType.EndOfSourceTurn) + .SetDurationData(DurationType.Minute, 1) .SetTargetingData(Side.Ally, RangeType.Self, 0, TargetType.Self) .Build()) .AddToDB(); diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel05.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel05.cs index c3d8eeed7c..a93b906ec0 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel05.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel05.cs @@ -264,7 +264,7 @@ internal static SpellDefinition BuildIncineration() .SetEffectDescription( EffectDescriptionBuilder .Create() - .SetDurationData(DurationType.Minute, 1, TurnOccurenceType.StartOfTurn) + .SetDurationData(DurationType.Minute, 1) .SetTargetingData(Side.Enemy, RangeType.Distance, 18, TargetType.IndividualsUnique) .SetSavingThrowData(false, AttributeDefinitions.Dexterity, true, EffectDifficultyClassComputation.SpellCastingFeature) @@ -439,7 +439,7 @@ internal static SpellDefinition BuildDawn() .SetEffectDescription( EffectDescriptionBuilder .Create() - .SetDurationData(DurationType.Minute, 1, TurnOccurenceType.StartOfTurn) + .SetDurationData(DurationType.Minute, 1) .SetTargetingData(Side.All, RangeType.Distance, 24, TargetType.Cylinder, 6, 8) .SetSavingThrowData(false, AttributeDefinitions.Constitution, true, EffectDifficultyClassComputation.SpellCastingFeature) diff --git a/SolastaUnfinishedBusiness/Subclasses/PathOfTheLight.cs b/SolastaUnfinishedBusiness/Subclasses/PathOfTheLight.cs index a8d728ccfa..d6e5a08220 100644 --- a/SolastaUnfinishedBusiness/Subclasses/PathOfTheLight.cs +++ b/SolastaUnfinishedBusiness/Subclasses/PathOfTheLight.cs @@ -106,7 +106,7 @@ public PathOfTheLight() .SetEffectDescription( EffectDescriptionBuilder .Create() - .SetDurationData(DurationType.Minute, 1, TurnOccurenceType.StartOfTurn) + .SetDurationData(DurationType.Minute, 1) .SetEffectForms( EffectFormBuilder .Create() diff --git a/SolastaUnfinishedBusiness/Subclasses/RoguishRavenScion.cs b/SolastaUnfinishedBusiness/Subclasses/RoguishRavenScion.cs index 5624f2877d..8c00dfa163 100644 --- a/SolastaUnfinishedBusiness/Subclasses/RoguishRavenScion.cs +++ b/SolastaUnfinishedBusiness/Subclasses/RoguishRavenScion.cs @@ -76,7 +76,7 @@ public RoguishRavenScion() .SetEffectDescription( EffectDescriptionBuilder .Create() - .SetDurationData(DurationType.Minute, 1, TurnOccurenceType.StartOfTurn) + .SetDurationData(DurationType.Minute, 1) .SetTargetingData(Side.Ally, RangeType.Self, 0, TargetType.Self) .SetEffectForms(EffectFormBuilder.ConditionForm( ConditionDefinitionBuilder From 89c41bd1d751206264232c20f63b308d9c7bdc54 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sun, 8 Sep 2024 15:06:39 -0700 Subject: [PATCH 077/212] continue mod AI support refactoring --- .../Api/DatabaseHelper-RELEASE.cs | 3 + .../Builders/ConditionDefinitionBuilder.cs | 9 +- SolastaUnfinishedBusiness/Models/AiContext.cs | 128 +++++++++------- .../Models/BootContext.cs | 3 - .../Models/SrdAndHouseRulesContext.cs | 14 +- .../Activities/ActivitiesBreakFreePatcher.cs | 144 +++++++++--------- .../CharacterActionBreakFreePatcher.cs | 74 ++++----- .../Patches/CharacterActionPanelPatcher.cs | 22 +-- .../Spells/SpellBuildersLevel01.cs | 124 +++++++-------- .../Spells/SpellBuildersLevel02.cs | 65 ++++---- .../Spells/SpellBuildersLevel06.cs | 20 ++- .../Subclasses/OathOfAncients.cs | 15 +- 12 files changed, 321 insertions(+), 300 deletions(-) diff --git a/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs b/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs index fd56842d86..80cffb76d8 100644 --- a/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs +++ b/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs @@ -3911,6 +3911,9 @@ internal static class DecisionPackageDefinitions GetDefinition("DefaultMeleeWithBackupRangeDecisions"); internal static DecisionPackageDefinition Fear { get; } = GetDefinition("Fear"); + + internal static DecisionPackageDefinition IdleGuard_Default { get; } = + GetDefinition("IdleGuard_Default"); } internal static class ToolTypeDefinitions diff --git a/SolastaUnfinishedBusiness/Builders/ConditionDefinitionBuilder.cs b/SolastaUnfinishedBusiness/Builders/ConditionDefinitionBuilder.cs index 0d680fc1fc..ac4c1bc63d 100644 --- a/SolastaUnfinishedBusiness/Builders/ConditionDefinitionBuilder.cs +++ b/SolastaUnfinishedBusiness/Builders/ConditionDefinitionBuilder.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using JetBrains.Annotations; +using SolastaUnfinishedBusiness.Api; using SolastaUnfinishedBusiness.Api.GameExtensions; using SolastaUnfinishedBusiness.Api.LanguageExtensions; using TA.AI; @@ -48,11 +49,17 @@ internal ConditionDefinitionBuilder AllowMultipleInstances() } internal ConditionDefinitionBuilder SetBrain( - DecisionPackageDefinition battlePackage, bool forceBehavior, bool fearSource) + DecisionPackageDefinition battlePackage, + bool addBehavior = false, + bool forceBehavior = false, + bool fearSource = false) { Definition.battlePackage = battlePackage; + Definition.explorationPackage = DatabaseHelper.DecisionPackageDefinitions.IdleGuard_Default; + Definition.addBehavior = addBehavior; Definition.forceBehavior = forceBehavior; Definition.fearSource = fearSource; + return this; } diff --git a/SolastaUnfinishedBusiness/Models/AiContext.cs b/SolastaUnfinishedBusiness/Models/AiContext.cs index da67f0cb96..287bfa29a3 100644 --- a/SolastaUnfinishedBusiness/Models/AiContext.cs +++ b/SolastaUnfinishedBusiness/Models/AiContext.cs @@ -1,47 +1,57 @@ -using SolastaUnfinishedBusiness.Api; +using System; +using System.Linq; +using SolastaUnfinishedBusiness.Api; +using SolastaUnfinishedBusiness.Api.GameExtensions; using SolastaUnfinishedBusiness.Builders; using TA.AI; using TA.AI.Activities; using TA.AI.Considerations; -using UnityEngine; -using static SolastaUnfinishedBusiness.Api.DatabaseHelper.ConditionDefinitions; +using Object = UnityEngine.Object; namespace SolastaUnfinishedBusiness.Models; internal static class AiContext { internal static ActivityScorerDefinition CreateActivityScorer( - ActivityScorerDefinition baseScorer, string name) + DecisionDefinition baseDecision, string name, + bool overwriteConsiderations = false, + params WeightedConsiderationDescription[] considerations) { - var result = Object.Instantiate(baseScorer); + var result = Object.Instantiate(baseDecision.Decision.scorer); result.name = name; result.scorer = new ActivityScorer(); - // ReSharper disable once ForeachCanBePartlyConvertedToQueryUsingAnotherGetEnumerator - foreach (var weightedConsideration in baseScorer.scorer.WeightedConsiderations) + if (!overwriteConsiderations) { - var sourceDescription = weightedConsideration.Consideration; - var targetDescription = new ConsiderationDescription + // ReSharper disable once ForeachCanBePartlyConvertedToQueryUsingAnotherGetEnumerator + foreach (var weightedConsideration in baseDecision.Decision.scorer.scorer.WeightedConsiderations) { - considerationType = sourceDescription.considerationType, - curve = AnimationCurve.Constant(0f, 1f, 1f), - boolParameter = sourceDescription.boolParameter, - boolSecParameter = sourceDescription.boolSecParameter, - boolTerParameter = sourceDescription.boolTerParameter, - byteParameter = sourceDescription.byteParameter, - intParameter = sourceDescription.intParameter, - floatParameter = sourceDescription.floatParameter, - stringParameter = sourceDescription.stringParameter - }; - - var weightedConsiderationDescription = new WeightedConsiderationDescription( - CreateConsiderationDefinition(weightedConsideration.ConsiderationDefinition.name, targetDescription), - weightedConsideration.weight); - - result.scorer.WeightedConsiderations.Add(weightedConsiderationDescription); + var sourceDescription = weightedConsideration.Consideration; + var targetDescription = new ConsiderationDescription + { + considerationType = sourceDescription.considerationType, + curve = sourceDescription.curve, + boolParameter = sourceDescription.boolParameter, + boolSecParameter = sourceDescription.boolSecParameter, + boolTerParameter = sourceDescription.boolTerParameter, + byteParameter = sourceDescription.byteParameter, + intParameter = sourceDescription.intParameter, + floatParameter = sourceDescription.floatParameter, + stringParameter = sourceDescription.stringParameter + }; + + var weightedConsiderationDescription = new WeightedConsiderationDescription( + CreateConsiderationDefinition(weightedConsideration.ConsiderationDefinition.name, + targetDescription), + weightedConsideration.weight); + + result.Scorer.WeightedConsiderations.Add(weightedConsiderationDescription); + } } + result.Scorer.WeightedConsiderations.AddRange(considerations); + return result; } @@ -59,30 +69,23 @@ private static ConsiderationDefinition CreateConsiderationDefinition( return result; } - internal static void Load() + private static WeightedConsiderationDescription GetWeightedConsiderationDescriptionByDecisionAndConsideration( + DecisionDefinition decisionDefinition, string considerationType) { - ConditionRestrainedByEntangle.amountOrigin = ConditionDefinition.OriginOfAmount.Fixed; - ConditionRestrainedByEntangle.baseAmount = (int)BreakFreeType.DoStrengthCheckAgainstCasterDC; + var weightedConsiderationDescription = + decisionDefinition.Decision.Scorer.WeightedConsiderations + .FirstOrDefault(y => y.ConsiderationDefinition.Consideration.considerationType == considerationType) + ?? throw new Exception(); - var battlePackage = BuildDecisionPackageBreakFree( - ConditionRestrainedByEntangle.Name, BreakFreeType.DoStrengthCheckAgainstCasterDC); - - ConditionRestrainedByEntangle.addBehavior = true; - ConditionRestrainedByEntangle.battlePackage = battlePackage; + return weightedConsiderationDescription; } - internal static DecisionPackageDefinition BuildDecisionPackageBreakFree(string conditionName, BreakFreeType action) + internal static DecisionPackageDefinition BuildDecisionPackageBreakFree(string conditionName) { - var mainActionNotFullyConsumed = new WeightedConsiderationDescription( - CreateConsiderationDefinition( - "MainActionNotFullyConsumed", - new ConsiderationDescription - { - considerationType = nameof(ActionTypeStatus), - stringParameter = string.Empty, - boolParameter = true, - floatParameter = 1f - }), 1f); + var baseDecision = DatabaseHelper.GetDefinition("BreakConcentration_FlyingInMelee"); + + var wcdHasCondition = GetWeightedConsiderationDescriptionByDecisionAndConsideration( + baseDecision, "HasCondition"); var hasConditionBreakFree = new WeightedConsiderationDescription( CreateConsiderationDefinition( @@ -90,18 +93,30 @@ internal static DecisionPackageDefinition BuildDecisionPackageBreakFree(string c new ConsiderationDescription { considerationType = nameof(HasCondition), + curve = wcdHasCondition.Consideration.curve, stringParameter = conditionName, boolParameter = true, intParameter = 2, floatParameter = 2f }), 1f); - // create scorer + var wcdActionTypeStatus = GetWeightedConsiderationDescriptionByDecisionAndConsideration( + baseDecision, "ActionTypeStatus"); - var baseDecision = DatabaseHelper.GetDefinition("BreakConcentration_FlyingInMelee"); - var scorerBreakFree = CreateActivityScorer(baseDecision.Decision.scorer, $"BreakFree{conditionName}"); + var mainActionNotFullyConsumed = new WeightedConsiderationDescription( + CreateConsiderationDefinition( + "MainActionNotFullyConsumed", + new ConsiderationDescription + { + considerationType = nameof(ActionTypeStatus), + curve = wcdActionTypeStatus.Consideration.curve, + boolParameter = true, + floatParameter = 1f + }), 1f); - scorerBreakFree.scorer.considerations = [hasConditionBreakFree, mainActionNotFullyConsumed]; + var scorerBreakFree = CreateActivityScorer(baseDecision, $"BreakFree{conditionName}", true, + hasConditionBreakFree, + mainActionNotFullyConsumed); var decisionBreakFree = DecisionDefinitionBuilder .Create($"DecisionBreakFree{conditionName}") @@ -110,7 +125,8 @@ internal static DecisionPackageDefinition BuildDecisionPackageBreakFree(string c $"if restrained from {conditionName}, and can use main action, try to break free", nameof(BreakFree), scorerBreakFree, - enumParameter: (int)action) + enumParameter: 1, + floatParameter: 3f) .AddToDB(); var packageBreakFree = DecisionPackageDefinitionBuilder @@ -122,9 +138,19 @@ internal static DecisionPackageDefinition BuildDecisionPackageBreakFree(string c return packageBreakFree; } + internal static RulesetCondition GetRestrainingCondition(RulesetCharacter rulesetCharacter) + { + return rulesetCharacter + .GetFeaturesByType() + .Where(actionAffinity => actionAffinity.AuthorizedActions.Contains(ActionDefinitions.Id.BreakFree)) + .Select(rulesetCharacter.FindFirstConditionHoldingFeature) + .FirstOrDefault(rulesetCondition => rulesetCondition != null); + } + internal enum BreakFreeType { - DoNothing, - DoStrengthCheckAgainstCasterDC + DoNoCheckAndRemoveCondition = 10, + DoStrengthCheckAgainstCasterDC = 20, + DoWisdomCheckAgainstCasterDC = 30 } } diff --git a/SolastaUnfinishedBusiness/Models/BootContext.cs b/SolastaUnfinishedBusiness/Models/BootContext.cs index 29213cf063..17f432b2de 100644 --- a/SolastaUnfinishedBusiness/Models/BootContext.cs +++ b/SolastaUnfinishedBusiness/Models/BootContext.cs @@ -44,9 +44,6 @@ internal static void Startup() // Custom Conditions must load as early as possible CustomConditionsContext.Load(); - // AI Context - AiContext.Load(); - // // custom stuff that can be loaded in any order // diff --git a/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs b/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs index b94c790b24..e7f8ab2943 100644 --- a/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs +++ b/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs @@ -7,6 +7,7 @@ using SolastaUnfinishedBusiness.Builders.Features; using SolastaUnfinishedBusiness.Interfaces; using SolastaUnfinishedBusiness.Validators; +using TA.AI; using static ActionDefinitions; using static RuleDefinitions; using static SolastaUnfinishedBusiness.Api.DatabaseHelper; @@ -73,6 +74,9 @@ internal static class SrdAndHouseRulesContext .SetForbiddenActions(Id.AttackOpportunity) .AddToDB(); + private static readonly DecisionPackageDefinition DecisionPackageRestrained = + AiContext.BuildDecisionPackageBreakFree(ConditionRestrainedByEntangle.Name); + private static SpellDefinition ConjureElementalInvisibleStalker { get; set; } internal static void LateLoad() @@ -397,12 +401,16 @@ internal static void SwitchFilterOnHideousLaughter() internal static void SwitchRecurringEffectOnEntangle() { + // Remove recurring effect on Entangle (as per SRD, any creature is only affected at cast time) if (Main.Settings.RemoveRecurringEffectOnEntangle) { - // Remove recurring effect on Entangle (as per SRD, any creature is only affected at cast time) Entangle.effectDescription.recurrentEffect = RecurrentEffect.OnActivation; Entangle.effectDescription.EffectForms[2].canSaveToCancel = false; ConditionRestrainedByEntangle.Features.Add(FeatureDefinitionActionAffinitys.ActionAffinityGrappled); + ConditionRestrainedByEntangle.amountOrigin = ConditionDefinition.OriginOfAmount.Fixed; + ConditionRestrainedByEntangle.baseAmount = (int)AiContext.BreakFreeType.DoStrengthCheckAgainstCasterDC; + ConditionRestrainedByEntangle.addBehavior = true; + ConditionRestrainedByEntangle.battlePackage = DecisionPackageRestrained; } else { @@ -410,6 +418,10 @@ internal static void SwitchRecurringEffectOnEntangle() RecurrentEffect.OnActivation | RecurrentEffect.OnTurnEnd | RecurrentEffect.OnEnter; Entangle.effectDescription.EffectForms[2].canSaveToCancel = true; ConditionRestrainedByEntangle.Features.Remove(FeatureDefinitionActionAffinitys.ActionAffinityGrappled); + ConditionRestrainedByEntangle.amountOrigin = ConditionDefinition.OriginOfAmount.None; + ConditionRestrainedByEntangle.baseAmount = 0; + ConditionRestrainedByEntangle.addBehavior = false; + ConditionRestrainedByEntangle.battlePackage = null; } } diff --git a/SolastaUnfinishedBusiness/Patches/Activities/ActivitiesBreakFreePatcher.cs b/SolastaUnfinishedBusiness/Patches/Activities/ActivitiesBreakFreePatcher.cs index 37359afb44..a9c3820a02 100644 --- a/SolastaUnfinishedBusiness/Patches/Activities/ActivitiesBreakFreePatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/Activities/ActivitiesBreakFreePatcher.cs @@ -3,10 +3,8 @@ using System.Linq; using HarmonyLib; using JetBrains.Annotations; -using SolastaUnfinishedBusiness.Api.GameExtensions; using SolastaUnfinishedBusiness.Interfaces; using SolastaUnfinishedBusiness.Models; -using TA.AI; using TA.AI.Activities; using static RuleDefinitions; @@ -21,94 +19,36 @@ public static class BreakFreePatcher public static class BreakFree_Patch { [UsedImplicitly] - public static IEnumerator Postfix( - [NotNull] IEnumerator values, - AiLocationCharacter character, - DecisionDefinition decisionDefinition) + public static IEnumerator Postfix([NotNull] IEnumerator values, AiLocationCharacter character) { - RulesetCondition restrainingCondition = null; - var gameLocationCharacter = character.GameLocationCharacter; var rulesetCharacter = gameLocationCharacter.RulesetCharacter; - - if (rulesetCharacter == null) - { - yield break; - } - - foreach (var definitionActionAffinity in rulesetCharacter - .GetFeaturesByType() - .Where(x => x.AuthorizedActions.Contains(ActionDefinitions.Id.BreakFree))) - { - restrainingCondition = rulesetCharacter.FindFirstConditionHoldingFeature(definitionActionAffinity); - } + var restrainingCondition = AiContext.GetRestrainingCondition(rulesetCharacter); if (restrainingCondition == null) { + while (values.MoveNext()) + { + yield return values.Current; + } + yield break; } + var action = (AiContext.BreakFreeType)restrainingCondition.Amount; var success = true; - // no ability check - switch ((AiContext.BreakFreeType)decisionDefinition.Decision.enumParameter) + switch (action) { - case AiContext.BreakFreeType.DoNothing: - rulesetCharacter.RemoveCondition(restrainingCondition); + case AiContext.BreakFreeType.DoNoCheckAndRemoveCondition: break; case AiContext.BreakFreeType.DoStrengthCheckAgainstCasterDC: - var checkDC = 10; - var sourceGuid = restrainingCondition.SourceGuid; - - if (RulesetEntity.TryGetEntity(sourceGuid, out RulesetCharacterHero rulesetCharacterHero)) - { - checkDC = rulesetCharacterHero.SpellRepertoires - .Select(x => x.SaveDC) - .Max(); - } - - var actionModifier = new ActionModifier(); - - rulesetCharacter.ComputeBaseAbilityCheckBonus( - AttributeDefinitions.Strength, actionModifier.AbilityCheckModifierTrends, string.Empty); - gameLocationCharacter.ComputeAbilityCheckActionModifier( - AttributeDefinitions.Strength, string.Empty, actionModifier); - - var abilityCheckRoll = gameLocationCharacter.RollAbilityCheck( - AttributeDefinitions.Strength, - string.Empty, - checkDC, - AdvantageType.None, - actionModifier, - false, - -1, - out var rollOutcome, - out var successDelta, - true); - - //PATCH: support for Bardic Inspiration roll off battle and ITryAlterOutcomeAttributeCheck - var abilityCheckData = new AbilityCheckData - { - AbilityCheckRoll = abilityCheckRoll, - AbilityCheckRollOutcome = rollOutcome, - AbilityCheckSuccessDelta = successDelta, - AbilityCheckActionModifier = actionModifier, - Action = null - }; - - yield return TryAlterOutcomeAttributeCheck - .HandleITryAlterOutcomeAttributeCheck(gameLocationCharacter, abilityCheckData); - - success = abilityCheckData.AbilityCheckRollOutcome - is RollOutcome.Success - or RollOutcome.CriticalSuccess; - - if (success) - { - rulesetCharacter.RemoveCondition(restrainingCondition); - } + yield return RollAttributeCheck(AttributeDefinitions.Strength); + break; + case AiContext.BreakFreeType.DoWisdomCheckAgainstCasterDC: + yield return RollAttributeCheck(AttributeDefinitions.Wisdom); break; default: @@ -120,8 +60,64 @@ is RollOutcome.Success yield break; } + if (success) + { + rulesetCharacter.RemoveCondition(restrainingCondition); + } + gameLocationCharacter.SpendActionType(ActionDefinitions.ActionType.Main); rulesetCharacter.BreakFreeExecuted?.Invoke(rulesetCharacter, success); + + yield break; + + IEnumerator RollAttributeCheck(string attributeName) + { + var checkDC = 10; + var sourceGuid = restrainingCondition!.SourceGuid; + + if (RulesetEntity.TryGetEntity(sourceGuid, out RulesetCharacterHero rulesetCharacterHero)) + { + checkDC = rulesetCharacterHero.SpellRepertoires + .Select(x => x.SaveDC) + .Max(); + } + + var actionModifier = new ActionModifier(); + + rulesetCharacter.ComputeBaseAbilityCheckBonus( + attributeName, actionModifier.AbilityCheckModifierTrends, string.Empty); + gameLocationCharacter.ComputeAbilityCheckActionModifier( + attributeName, string.Empty, actionModifier); + + var abilityCheckRoll = gameLocationCharacter.RollAbilityCheck( + attributeName, + string.Empty, + checkDC, + AdvantageType.None, + actionModifier, + false, + -1, + out var rollOutcome, + out var successDelta, + true); + + //PATCH: support for Bardic Inspiration roll off battle and ITryAlterOutcomeAttributeCheck + var abilityCheckData = new AbilityCheckData + { + AbilityCheckRoll = abilityCheckRoll, + AbilityCheckRollOutcome = rollOutcome, + AbilityCheckSuccessDelta = successDelta, + AbilityCheckActionModifier = actionModifier, + Action = null + }; + + yield return TryAlterOutcomeAttributeCheck + .HandleITryAlterOutcomeAttributeCheck(gameLocationCharacter, abilityCheckData); + + success = abilityCheckData.AbilityCheckRollOutcome + is RollOutcome.Success + or RollOutcome.CriticalSuccess; + } } } } diff --git a/SolastaUnfinishedBusiness/Patches/CharacterActionBreakFreePatcher.cs b/SolastaUnfinishedBusiness/Patches/CharacterActionBreakFreePatcher.cs index 2e4ea32e54..23b27bc956 100644 --- a/SolastaUnfinishedBusiness/Patches/CharacterActionBreakFreePatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/CharacterActionBreakFreePatcher.cs @@ -28,61 +28,49 @@ public static bool Prefix(ref IEnumerator __result, CharacterActionBreakFree __i private static IEnumerator Process(CharacterActionBreakFree __instance) { - RulesetCondition restrainingCondition = null; - - __instance.ActingCharacter.RulesetCharacter.EnumerateFeaturesToBrowse( - __instance.ActingCharacter.RulesetCharacter.FeaturesToBrowse); - - foreach (var definitionActionAffinity in __instance.ActingCharacter.RulesetCharacter.FeaturesToBrowse - .Cast() - .Where(definitionActionAffinity => definitionActionAffinity.AuthorizedActions - .Contains(__instance.ActionId))) - { - restrainingCondition = __instance.ActingCharacter.RulesetCharacter - .FindFirstConditionHoldingFeature(definitionActionAffinity); - } + var rulesetCharacter = __instance.ActingCharacter.RulesetCharacter; + var restrainingCondition = AiContext.GetRestrainingCondition(rulesetCharacter); if (restrainingCondition == null) { yield break; } + var sourceGuid = restrainingCondition.SourceGuid; + var action = (AiContext.BreakFreeType)restrainingCondition?.Amount; var actionModifier = new ActionModifier(); - - var abilityScoreName = - __instance.ActionParams.BreakFreeMode == ActionDefinitions.BreakFreeMode.Athletics - ? AttributeDefinitions.Strength - : AttributeDefinitions.Dexterity; - - var proficiencyName = __instance.ActionParams.BreakFreeMode == ActionDefinitions.BreakFreeMode.Athletics - ? SkillDefinitions.Athletics - : SkillDefinitions.Acrobatics; - var checkDC = 10; - var sourceGuid = restrainingCondition.SourceGuid; - var action = (AiContext.BreakFreeType)restrainingCondition.Amount; + string abilityScoreName; + string proficiencyName; switch (action) { - case AiContext.BreakFreeType.DoNothing: + case AiContext.BreakFreeType.DoNoCheckAndRemoveCondition: __instance.ActingCharacter.RulesetCharacter.RemoveCondition(restrainingCondition); yield break; case AiContext.BreakFreeType.DoStrengthCheckAgainstCasterDC: { - if (RulesetEntity.TryGetEntity(sourceGuid, out RulesetCharacterHero rulesetCharacterHero)) - { - checkDC = rulesetCharacterHero.SpellRepertoires - .Select(x => x.SaveDC) - .Max(); - } - - proficiencyName = string.Empty; + CalculateDC(AttributeDefinitions.Strength); + break; + } + case AiContext.BreakFreeType.DoWisdomCheckAgainstCasterDC: + { + CalculateDC(AttributeDefinitions.Wisdom); break; } default: { - if (restrainingCondition.HasSaveOverride) + abilityScoreName = + __instance.ActionParams.BreakFreeMode == ActionDefinitions.BreakFreeMode.Athletics + ? AttributeDefinitions.Strength + : AttributeDefinitions.Dexterity; + + proficiencyName = __instance.ActionParams.BreakFreeMode == ActionDefinitions.BreakFreeMode.Athletics + ? SkillDefinitions.Athletics + : SkillDefinitions.Acrobatics; + + if (restrainingCondition!.HasSaveOverride) { checkDC = restrainingCondition.SaveOverrideDC; } @@ -106,6 +94,7 @@ private static IEnumerator Process(CharacterActionBreakFree __instance) __instance.ActingCharacter.RulesetCharacter.ComputeBaseAbilityCheckBonus( abilityScoreName, actionModifier.AbilityCheckModifierTrends, proficiencyName); + __instance.ActingCharacter.ComputeAbilityCheckActionModifier( abilityScoreName, proficiencyName, actionModifier); @@ -148,6 +137,21 @@ private static IEnumerator Process(CharacterActionBreakFree __instance) var breakFreeExecuted = __instance.ActingCharacter.RulesetCharacter.BreakFreeExecuted; breakFreeExecuted?.Invoke(__instance.ActingCharacter.RulesetCharacter, success); + + yield break; + + void CalculateDC(string newAbilityScoreName) + { + if (RulesetEntity.TryGetEntity(sourceGuid, out RulesetCharacterHero rulesetCharacterHero)) + { + checkDC = rulesetCharacterHero.SpellRepertoires + .Select(x => x.SaveDC) + .Max(); + } + + abilityScoreName = newAbilityScoreName; + proficiencyName = string.Empty; + } } } } diff --git a/SolastaUnfinishedBusiness/Patches/CharacterActionPanelPatcher.cs b/SolastaUnfinishedBusiness/Patches/CharacterActionPanelPatcher.cs index 2dd4b37bff..fee3c0d45a 100644 --- a/SolastaUnfinishedBusiness/Patches/CharacterActionPanelPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/CharacterActionPanelPatcher.cs @@ -292,25 +292,11 @@ public static class SelectBreakFreeMode_Patch public static bool Prefix(CharacterActionPanel __instance) { var rulesetCharacter = __instance.GuiCharacter.RulesetCharacter; + var restrainingCondition = AiContext.GetRestrainingCondition(rulesetCharacter); - RulesetCondition restrainingCondition = null; - - rulesetCharacter.EnumerateFeaturesToBrowse( - rulesetCharacter.FeaturesToBrowse); - - foreach (var definitionActionAffinity in rulesetCharacter.FeaturesToBrowse - .Cast() - .Where(definitionActionAffinity => definitionActionAffinity.AuthorizedActions - .Contains(ActionDefinitions.Id.BreakFree))) - { - restrainingCondition = rulesetCharacter.FindFirstConditionHoldingFeature(definitionActionAffinity); - } - - if (restrainingCondition?.ConditionDefinition.Name is not - ("ConditionVileBrew" or - "ConditionGrappledRestrainedIceBound" or - "ConditionGrappledRestrainedSpellWeb" or - "ConditionRestrainedByEntangle")) + // if not a modded strength check condition let vanilla handle + // this works as so far there is no way an ally should be forced to do a DoWisdomCheckAgainstCasterDC + if (restrainingCondition?.Amount != (int)AiContext.BreakFreeType.DoStrengthCheckAgainstCasterDC) { return true; } diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs index 31538d6a1c..269485f8aa 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs @@ -215,29 +215,26 @@ internal static SpellDefinition BuildEnsnaringStrike() { const string NAME = "EnsnaringStrike"; + var battlePackage = AiContext.BuildDecisionPackageBreakFree("ConditionGrappledRestrainedEnsnared"); + var conditionEnsnared = ConditionDefinitionBuilder - .Create(ConditionGrappledRestrainedRemorhaz, "ConditionGrappledRestrainedEnsnared") - .SetOrUpdateGuiPresentation(Category.Condition) - .SetParentCondition(ConditionRestrainedByWeb) - .SetSpecialDuration(DurationType.Minute, 1, TurnOccurenceType.StartOfTurn) + .Create("ConditionGrappledRestrainedEnsnared") + .SetGuiPresentation(Category.Condition, ConditionDefinitions.ConditionRestrained) + .SetConditionType(ConditionType.Detrimental) + .SetParentCondition(ConditionDefinitions.ConditionRestrained) .SetFixedAmount((int)AiContext.BreakFreeType.DoStrengthCheckAgainstCasterDC) + .SetBrain(battlePackage, true) + .SetSpecialDuration(DurationType.Minute, 1) + .SetFeatures(ActionAffinityGrappled) + .CopyParticleReferences(Entangle) .SetRecurrentEffectForms( EffectFormBuilder .Create() .SetDamageForm(DamageTypePiercing, 1, DieType.D6) .SetCreatedBy() .Build()) - .CopyParticleReferences(Entangle) .AddToDB(); - var battlePackage = AiContext.BuildDecisionPackageBreakFree( - conditionEnsnared.Name, AiContext.BreakFreeType.DoStrengthCheckAgainstCasterDC); - - conditionEnsnared.addBehavior = true; - conditionEnsnared.battlePackage = battlePackage; - - conditionEnsnared.specialInterruptions.Clear(); - var additionalDamageEnsnaringStrike = FeatureDefinitionAdditionalDamageBuilder .Create($"AdditionalDamage{NAME}") .SetGuiPresentation(NAME, Category.Spell) @@ -459,6 +456,17 @@ internal static SpellDefinition BuildWrathfulSmite() { const string NAME = "WrathfulSmite"; + var battlePackage = AiContext.BuildDecisionPackageBreakFree($"Condition{NAME}"); + + var conditionEnemy = ConditionDefinitionBuilder + .Create(ConditionDefinitions.ConditionFrightened, $"Condition{NAME}Enemy") + .SetParentCondition(ConditionDefinitions.ConditionFrightened) + .SetFixedAmount((int)AiContext.BreakFreeType.DoWisdomCheckAgainstCasterDC) + .SetBrain(battlePackage, true) + .SetSpecialDuration(DurationType.Minute, 1) + .SetFeatures(ActionAffinityGrappled) + .AddToDB(); + var additionalDamageWrathfulSmite = FeatureDefinitionAdditionalDamageBuilder .Create($"AdditionalDamage{NAME}") .SetGuiPresentation(NAME, Category.Spell) @@ -475,12 +483,9 @@ internal static SpellDefinition BuildWrathfulSmite() new ConditionOperationDescription { operation = ConditionOperationDescription.ConditionOperation.Add, - conditionDefinition = ConditionDefinitionBuilder - .Create(ConditionDefinitions.ConditionFrightened, $"Condition{NAME}Enemy") - .SetSpecialDuration(DurationType.Minute, 1, TurnOccurenceType.StartOfTurn) - .SetParentCondition(ConditionDefinitions.ConditionFrightened) - .AddToDB(), + conditionDefinition = conditionEnemy, hasSavingThrow = true, + //TODO: change this to false after fix battle package canSaveToCancel = true, saveAffinity = EffectSavingThrowType.Negates, saveOccurence = TurnOccurenceType.StartOfTurn @@ -648,12 +653,17 @@ internal static SpellDefinition BuildVileBrew() { const string NAME = "VileBrew"; + var battlePackage = AiContext.BuildDecisionPackageBreakFree($"Condition{NAME}"); + var conditionVileBrew = ConditionDefinitionBuilder - .Create(ConditionOnAcidPilgrim, $"Condition{NAME}") + .Create($"Condition{NAME}") .SetGuiPresentation(Category.Condition, ConditionAcidArrowed) .SetConditionType(ConditionType.Detrimental) - .SetFeatures(MovementAffinityConditionRestrained, ActionAffinityConditionRestrained, ActionAffinityGrappled) - .SetFixedAmount((int)AiContext.BreakFreeType.DoNothing) + .SetFixedAmount((int)AiContext.BreakFreeType.DoNoCheckAndRemoveCondition) + .SetBrain(battlePackage, true) + .SetSpecialDuration(DurationType.Minute, 1) + .SetFeatures(ActionAffinityGrappled) + .SetConditionParticleReference(ConditionOnAcidPilgrim) .SetRecurrentEffectForms( EffectFormBuilder .Create() @@ -662,15 +672,6 @@ internal static SpellDefinition BuildVileBrew() .Build()) .AddToDB(); - var battlePackage = - AiContext.BuildDecisionPackageBreakFree(conditionVileBrew.Name, AiContext.BreakFreeType.DoNothing); - - conditionVileBrew.addBehavior = true; - conditionVileBrew.battlePackage = battlePackage; - - conditionVileBrew.possessive = false; - conditionVileBrew.specialDuration = false; - var spell = SpellDefinitionBuilder .Create(NAME) .SetGuiPresentation(Category.Spell, Sprites.GetSprite(NAME, Resources.VileBrew, 128)) @@ -684,8 +685,8 @@ internal static SpellDefinition BuildVileBrew() .SetRequiresConcentration(true) .SetEffectDescription(EffectDescriptionBuilder .Create() + .SetDurationData(DurationType.Minute, 1) .SetTargetingData(Side.All, RangeType.Self, 0, TargetType.Line, 6) - .SetDurationData(DurationType.Minute, 1, TurnOccurenceType.StartOfTurn) .SetEffectAdvancement(EffectIncrementMethod.PerAdditionalSlotLevel, additionalDicePerIncrement: 2) .SetSavingThrowData(false, AttributeDefinitions.Dexterity, false, EffectDifficultyClassComputation.SpellCastingFeature) @@ -1258,8 +1259,7 @@ internal static SpellDefinition BuildCommand() const string ConditionApproachName = $"Condition{NAME}Approach"; - var scorerApproach = AiContext.CreateActivityScorer( - FixesContext.DecisionMoveAfraid.Decision.scorer, "MoveScorer_Approach"); + var scorerApproach = AiContext.CreateActivityScorer(FixesContext.DecisionMoveAfraid, "MoveScorer_Approach"); // invert PenalizeFearSourceProximityAtPosition if brain character has condition approach and enemy is condition source scorerApproach.scorer.WeightedConsiderations[2].Consideration.stringParameter = ConditionApproachName; @@ -1285,19 +1285,19 @@ internal static SpellDefinition BuildCommand() var conditionApproach = ConditionDefinitionBuilder .Create(ConditionApproachName) - .SetGuiPresentation($"Power{NAME}Approach", Category.Feature, ConditionPossessed) + .SetGuiPresentation($"{NAME}Approach", Category.Spell, ConditionPossessed) .SetConditionType(ConditionType.Detrimental) .SetPossessive() .SetSpecialDuration() - .SetBrain(packageApproach, true, true) + .SetBrain(packageApproach, forceBehavior: true, fearSource: true) .SetFeatures(MovementAffinityConditionDashing) .AddToDB(); conditionApproach.AddCustomSubFeatures(new ActionFinishedByMeApproach(conditionApproach)); var spellApproach = SpellDefinitionBuilder - .Create($"Power{NAME}Approach") - .SetGuiPresentation(Category.Feature, Command) + .Create($"{NAME}Approach") + .SetGuiPresentation(Category.Spell, Command) .SetSchoolOfMagic(SchoolOfMagicDefinitions.SchoolEnchantment) .SetSpellLevel(1) .SetCastingTime(ActivationTime.Action) @@ -1308,6 +1308,7 @@ internal static SpellDefinition BuildCommand() .SetEffectDescription( EffectDescriptionBuilder .Create() + .SetDurationData(DurationType.Round, 1) .SetTargetingData(Side.Enemy, RangeType.Distance, 12, TargetType.IndividualsUnique) .SetEffectAdvancement(EffectIncrementMethod.PerAdditionalSlotLevel, additionalTargetsPerIncrement: 1) @@ -1328,17 +1329,17 @@ internal static SpellDefinition BuildCommand() var conditionFlee = ConditionDefinitionBuilder .Create($"Condition{NAME}Flee") - .SetGuiPresentation($"Power{NAME}Flee", Category.Feature, ConditionPossessed) + .SetGuiPresentation($"{NAME}Flee", Category.Spell, ConditionPossessed) .SetConditionType(ConditionType.Detrimental) .SetPossessive() .SetSpecialDuration() - .SetBrain(DecisionPackageDefinitions.Fear, true, true) + .SetBrain(DecisionPackageDefinitions.Fear, forceBehavior: true, fearSource: true) .SetFeatures(MovementAffinityConditionDashing) .AddToDB(); var spellFlee = SpellDefinitionBuilder - .Create($"Power{NAME}Flee") - .SetGuiPresentation(Category.Feature, Command) + .Create($"{NAME}Flee") + .SetGuiPresentation(Category.Spell, Command) .SetSchoolOfMagic(SchoolOfMagicDefinitions.SchoolEnchantment) .SetSpellLevel(1) .SetCastingTime(ActivationTime.Action) @@ -1349,7 +1350,7 @@ internal static SpellDefinition BuildCommand() .SetEffectDescription( EffectDescriptionBuilder .Create() - .SetDurationData(DurationType.Round, 1, TurnOccurenceType.StartOfTurn) + .SetDurationData(DurationType.Round, 1) .SetTargetingData(Side.Enemy, RangeType.Distance, 12, TargetType.IndividualsUnique) .SetEffectAdvancement(EffectIncrementMethod.PerAdditionalSlotLevel, additionalTargetsPerIncrement: 1) @@ -1370,7 +1371,7 @@ internal static SpellDefinition BuildCommand() var conditionGrovel = ConditionDefinitionBuilder .Create($"Condition{NAME}Grovel") - .SetGuiPresentation($"Power{NAME}Grovel", Category.Feature, ConditionPossessed) + .SetGuiPresentation($"{NAME}Grovel", Category.Spell, ConditionPossessed) .SetConditionType(ConditionType.Detrimental) .SetPossessive() .SetSpecialDuration() @@ -1378,8 +1379,8 @@ internal static SpellDefinition BuildCommand() .AddToDB(); var spellGrovel = SpellDefinitionBuilder - .Create($"Power{NAME}Grovel") - .SetGuiPresentation(Category.Feature, Command) + .Create($"{NAME}Grovel") + .SetGuiPresentation(Category.Spell, Command) .SetSchoolOfMagic(SchoolOfMagicDefinitions.SchoolEnchantment) .SetSpellLevel(1) .SetCastingTime(ActivationTime.Action) @@ -1390,6 +1391,7 @@ internal static SpellDefinition BuildCommand() .SetEffectDescription( EffectDescriptionBuilder .Create() + .SetDurationData(DurationType.Round, 1) .SetTargetingData(Side.Enemy, RangeType.Distance, 12, TargetType.IndividualsUnique) .SetEffectAdvancement(EffectIncrementMethod.PerAdditionalSlotLevel, additionalTargetsPerIncrement: 1) @@ -1410,7 +1412,7 @@ internal static SpellDefinition BuildCommand() var conditionHalt = ConditionDefinitionBuilder .Create($"Condition{NAME}Halt") - .SetGuiPresentation($"Power{NAME}Halt", Category.Feature, ConditionPossessed) + .SetGuiPresentation($"{NAME}Halt", Category.Spell, ConditionPossessed) .SetConditionType(ConditionType.Detrimental) .SetPossessive() .SetSpecialDuration() @@ -1423,8 +1425,8 @@ internal static SpellDefinition BuildCommand() .AddToDB(); var spellHalt = SpellDefinitionBuilder - .Create($"Power{NAME}Halt") - .SetGuiPresentation(Category.Feature, Command) + .Create($"{NAME}Halt") + .SetGuiPresentation(Category.Spell, Command) .SetSchoolOfMagic(SchoolOfMagicDefinitions.SchoolEnchantment) .SetSpellLevel(1) .SetCastingTime(ActivationTime.Action) @@ -1435,7 +1437,7 @@ internal static SpellDefinition BuildCommand() .SetEffectDescription( EffectDescriptionBuilder .Create() - .SetDurationData(DurationType.Round, 1, TurnOccurenceType.StartOfTurn) + .SetDurationData(DurationType.Round, 1) .SetTargetingData(Side.Enemy, RangeType.Distance, 12, TargetType.IndividualsUnique) .SetEffectAdvancement(EffectIncrementMethod.PerAdditionalSlotLevel, additionalTargetsPerIncrement: 1) @@ -1456,17 +1458,13 @@ internal static SpellDefinition BuildCommand() // MAIN - spellApproach.AddCustomSubFeatures( - new PowerOrSpellFinishedByMeCommand(conditionApproach, conditionFlee, conditionGrovel, conditionHalt)); - - spellFlee.AddCustomSubFeatures( - new PowerOrSpellFinishedByMeCommand(conditionApproach, conditionFlee, conditionGrovel, conditionHalt)); - - spellGrovel.AddCustomSubFeatures( - new PowerOrSpellFinishedByMeCommand(conditionApproach, conditionFlee, conditionGrovel, conditionHalt)); + var behavior = + new PowerOrSpellFinishedByMeCommand(conditionApproach, conditionFlee, conditionGrovel, conditionHalt); - spellHalt.AddCustomSubFeatures( - new PowerOrSpellFinishedByMeCommand(conditionApproach, conditionFlee, conditionGrovel, conditionHalt)); + spellApproach.AddCustomSubFeatures(behavior); + spellFlee.AddCustomSubFeatures(behavior); + spellGrovel.AddCustomSubFeatures(behavior); + spellHalt.AddCustomSubFeatures(behavior); var spell = SpellDefinitionBuilder .Create(NAME) @@ -1482,15 +1480,11 @@ internal static SpellDefinition BuildCommand() .SetEffectDescription( EffectDescriptionBuilder .Create() - .UseQuickAnimations() - .SetDurationData(DurationType.Round) .SetTargetingData(Side.Enemy, RangeType.Distance, 12, TargetType.IndividualsUnique) .SetEffectAdvancement( EffectIncrementMethod.PerAdditionalSlotLevel, additionalTargetsPerIncrement: 1) .SetSavingThrowData(false, AttributeDefinitions.Wisdom, true, EffectDifficultyClassComputation.SpellCastingFeature) - .SetParticleEffectParameters(Command) - .SetEffectEffectParameters(SpareTheDying) .Build()) .AddToDB(); @@ -1532,7 +1526,7 @@ public bool IsValid(CursorLocationSelectTarget __instance, GameLocationCharacter rulesetCaster.LanguageProficiencies.Contains("Language_Elvish"): case "Fiend" when rulesetCaster.LanguageProficiencies.Contains("Language_Infernal"): - case "Giant" or "Giant_Rugan" when + case "Giant" when rulesetCaster.LanguageProficiencies.Contains("Language_Giant"): case "Humanoid": return true; @@ -1636,7 +1630,7 @@ internal static SpellDefinition BuildDissonantWhispers() #region Dissonant Whispers AI Behavior var scorerDissonantWhispers = AiContext.CreateActivityScorer( - FixesContext.DecisionMoveAfraid.Decision.scorer, "MoveScorer_DissonantWhispers"); + FixesContext.DecisionMoveAfraid, "MoveScorer_DissonantWhispers"); // remove IsCloseToMe scorerDissonantWhispers.scorer.WeightedConsiderations.RemoveAt(3); diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel02.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel02.cs index d202417a2b..ff4c6ecd97 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel02.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel02.cs @@ -22,7 +22,6 @@ using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionPowers; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.SpellDefinitions; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionActionAffinitys; -using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionMovementAffinitys; using MirrorImage = SolastaUnfinishedBusiness.Behaviors.Specific.MirrorImage; namespace SolastaUnfinishedBusiness.Spells; @@ -77,24 +76,19 @@ internal static SpellDefinition BuildBindingIce() const string NAME = "BindingIce"; var spriteReference = Sprites.GetSprite("WinterBreath", Resources.WinterBreath, 128); + var battlePackage = AiContext.BuildDecisionPackageBreakFree("ConditionGrappledRestrainedIceBound"); var conditionGrappledRestrainedIceBound = ConditionDefinitionBuilder - .Create(ConditionGrappledRestrainedRemorhaz, "ConditionGrappledRestrainedIceBound") - .SetOrUpdateGuiPresentation(Category.Condition) - .SetFeatures(MovementAffinityConditionRestrained, ActionAffinityConditionRestrained, ActionAffinityGrappled) - //.SetParentCondition(ConditionDefinitions.ConditionRestrained) - .SetFixedAmount((int)AiContext.BreakFreeType.DoNothing) + .Create("ConditionGrappledRestrainedIceBound") + .SetGuiPresentation(Category.Condition, ConditionDefinitions.ConditionRestrained) + .SetConditionType(ConditionType.Detrimental) + .SetParentCondition(ConditionDefinitions.ConditionRestrained) + .SetFixedAmount((int)AiContext.BreakFreeType.DoNoCheckAndRemoveCondition) + .SetBrain(battlePackage, true) + .SetSpecialDuration(DurationType.Minute, 1) + .SetFeatures(ActionAffinityGrappled) .AddToDB(); - var battlePackage = AiContext.BuildDecisionPackageBreakFree( - conditionGrappledRestrainedIceBound.Name, AiContext.BreakFreeType.DoNothing); - - conditionGrappledRestrainedIceBound.addBehavior = true; - conditionGrappledRestrainedIceBound.battlePackage = battlePackage; - - conditionGrappledRestrainedIceBound.specialDuration = false; - conditionGrappledRestrainedIceBound.specialInterruptions.Clear(); - var spell = SpellDefinitionBuilder .Create(NAME) .SetGuiPresentation(Category.Spell, spriteReference) @@ -287,23 +281,19 @@ internal static SpellDefinition BuildNoxiousSpray() .SetAllowedActionTypes(false, move: false) .AddToDB(); + var battlePackage = AiContext.BuildDecisionPackageBreakFree($"Condition{NAME}"); + var conditionNoxiousSpray = ConditionDefinitionBuilder .Create(ConditionPheromoned, $"Condition{NAME}") .SetGuiPresentation(Category.Condition, ConditionDefinitions.ConditionDiseased) - .SetPossessive() .SetConditionType(ConditionType.Detrimental) - .SetFixedAmount((int)AiContext.BreakFreeType.DoNothing) - .SetFeatures(actionAffinityNoxiousSpray) + .SetPossessive() + .SetFixedAmount((int)AiContext.BreakFreeType.DoNoCheckAndRemoveCondition) + .SetBrain(battlePackage, true) + .SetSpecialDuration(DurationType.Round, 1) + .SetFeatures(actionAffinityNoxiousSpray, ActionAffinityGrappled) .AddToDB(); - var battlePackage = AiContext.BuildDecisionPackageBreakFree( - conditionNoxiousSpray.Name, AiContext.BreakFreeType.DoNothing); - - conditionNoxiousSpray.addBehavior = true; - conditionNoxiousSpray.battlePackage = battlePackage; - - conditionNoxiousSpray.specialDuration = false; - var spell = SpellDefinitionBuilder .Create(NAME) .SetGuiPresentation(Category.Spell, Sprites.GetSprite(NAME, Resources.NoxiousSpray, 128)) @@ -440,22 +430,19 @@ internal static SpellDefinition BuildWeb() { const string NAME = "SpellWeb"; + var battlePackage = AiContext.BuildDecisionPackageBreakFree($"ConditionGrappledRestrained{NAME}"); + var conditionRestrainedBySpellWeb = ConditionDefinitionBuilder - .Create(ConditionGrappledRestrainedRemorhaz, $"ConditionGrappledRestrained{NAME}") - .SetOrUpdateGuiPresentation(Category.Condition) - .SetParentCondition(ConditionRestrainedByWeb) + .Create($"ConditionGrappledRestrained{NAME}") + .SetGuiPresentation(Category.Condition, ConditionDefinitions.ConditionRestrained) + .SetConditionType(ConditionType.Detrimental) + .SetParentCondition(ConditionDefinitions.ConditionRestrained) .SetFixedAmount((int)AiContext.BreakFreeType.DoStrengthCheckAgainstCasterDC) + .SetBrain(battlePackage, true) + .SetSpecialDuration(DurationType.Hour, 1) + .SetFeatures(ActionAffinityGrappled) .AddToDB(); - var battlePackage = AiContext.BuildDecisionPackageBreakFree( - conditionRestrainedBySpellWeb.Name, AiContext.BreakFreeType.DoStrengthCheckAgainstCasterDC); - - conditionRestrainedBySpellWeb.addBehavior = true; - conditionRestrainedBySpellWeb.battlePackage = battlePackage; - - conditionRestrainedBySpellWeb.specialDuration = false; - conditionRestrainedBySpellWeb.specialInterruptions.Clear(); - var conditionAffinityGrappledRestrainedSpellWebImmunity = FeatureDefinitionConditionAffinityBuilder .Create($"ConditionAffinityGrappledRestrained{NAME}Immunity") .SetGuiPresentationNoContent(true) @@ -491,8 +478,8 @@ internal static SpellDefinition BuildWeb() .SetEffectDescription( EffectDescriptionBuilder .Create(Grease) - .SetTargetingData(Side.All, RangeType.Distance, 12, TargetType.Cube, 4, 1) .SetDurationData(DurationType.Hour, 1) + .SetTargetingData(Side.All, RangeType.Distance, 12, TargetType.Cube, 4, 1) .SetRecurrentEffect(RecurrentEffect.OnTurnStart | RecurrentEffect.OnEnter) .SetSavingThrowData( false, diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel06.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel06.cs index ae9f727b3d..7ce411cea3 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel06.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel06.cs @@ -15,6 +15,7 @@ using static RuleDefinitions; using static SolastaUnfinishedBusiness.Api.DatabaseHelper; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.ConditionDefinitions; +using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionActionAffinitys; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionPowers; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.SpellDefinitions; using static FeatureDefinitionAttributeModifier; @@ -449,24 +450,21 @@ internal static SpellDefinition BuildFlashFreeze() { const string NAME = "FlashFreeze"; + var battlePackage = AiContext.BuildDecisionPackageBreakFree($"Condition{NAME}"); + var conditionFlashFreeze = ConditionDefinitionBuilder - .Create(ConditionGrappledRestrainedRemorhaz, $"Condition{NAME}") + .Create($"Condition{NAME}") .SetGuiPresentation( RuleDefinitions.ConditionRestrained, Category.Rules, ConditionDefinitions.ConditionChilled) + .SetConditionType(ConditionType.Detrimental) + .SetParentCondition(ConditionDefinitions.ConditionRestrained) .SetPossessive() - .SetParentCondition(ConditionRestrainedByWeb) .SetFixedAmount((int)AiContext.BreakFreeType.DoStrengthCheckAgainstCasterDC) + .SetBrain(battlePackage, true) + .SetSpecialDuration(DurationType.Minute, 1) + .SetFeatures(ActionAffinityGrappled) .AddToDB(); - var battlePackage = AiContext.BuildDecisionPackageBreakFree( - conditionFlashFreeze.Name, AiContext.BreakFreeType.DoStrengthCheckAgainstCasterDC); - - conditionFlashFreeze.addBehavior = true; - conditionFlashFreeze.battlePackage = battlePackage; - - conditionFlashFreeze.specialDuration = false; - conditionFlashFreeze.specialInterruptions.Clear(); - var spell = SpellDefinitionBuilder .Create(NAME) .SetGuiPresentation(Category.Spell, Sprites.GetSprite(NAME, Resources.FLashFreeze, 128)) diff --git a/SolastaUnfinishedBusiness/Subclasses/OathOfAncients.cs b/SolastaUnfinishedBusiness/Subclasses/OathOfAncients.cs index 83f771b509..c668298f0b 100644 --- a/SolastaUnfinishedBusiness/Subclasses/OathOfAncients.cs +++ b/SolastaUnfinishedBusiness/Subclasses/OathOfAncients.cs @@ -5,9 +5,11 @@ using SolastaUnfinishedBusiness.Builders.Features; using SolastaUnfinishedBusiness.CustomUI; using SolastaUnfinishedBusiness.Interfaces; +using SolastaUnfinishedBusiness.Models; using SolastaUnfinishedBusiness.Properties; using static RuleDefinitions; using static SolastaUnfinishedBusiness.Api.DatabaseHelper; +using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionActionAffinitys; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionDamageAffinitys; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionPowers; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.SpellDefinitions; @@ -62,8 +64,17 @@ public OathOfAncients() .SetSpellcastingClass(CharacterClassDefinitions.Paladin) .AddToDB(); + var battlePackage = AiContext.BuildDecisionPackageBreakFree($"Condition{Name}NaturesWrath"); + var conditionNaturesWrath = ConditionDefinitionBuilder - .Create(ConditionDefinitions.ConditionRestrainedByEntangle, $"Condition{Name}NaturesWrath") + .Create($"Condition{Name}NaturesWrath") + .SetGuiPresentation(ConditionDefinitions.ConditionRestrained.GuiPresentation) + .SetConditionType(ConditionType.Detrimental) + .SetParentCondition(ConditionDefinitions.ConditionRestrained) + .SetFixedAmount((int)AiContext.BreakFreeType.DoStrengthCheckAgainstCasterDC) + .SetBrain(battlePackage, true) + .SetSpecialDuration(DurationType.Minute, 1) + .SetFeatures(ActionAffinityGrappled) .AddToDB(); //Free single target entangle on Channel Divinity use @@ -74,7 +85,7 @@ public OathOfAncients() .SetEffectDescription( EffectDescriptionBuilder .Create() - .SetDurationData(DurationType.Round, 10) + .SetDurationData(DurationType.Minute, 1) .SetTargetingData(Side.Enemy, RangeType.Distance, 8, TargetType.IndividualsUnique) .SetParticleEffectParameters(Entangle) .SetEffectForms( From b6bd99a31a907776ece6a2f850ecc441c4c13612 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sun, 8 Sep 2024 15:09:32 -0700 Subject: [PATCH 078/212] tweak encounters --- .../Models/EncounterSpawnContext.cs | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/SolastaUnfinishedBusiness/Models/EncounterSpawnContext.cs b/SolastaUnfinishedBusiness/Models/EncounterSpawnContext.cs index a7f63f9637..6a04093fe1 100644 --- a/SolastaUnfinishedBusiness/Models/EncounterSpawnContext.cs +++ b/SolastaUnfinishedBusiness/Models/EncounterSpawnContext.cs @@ -5,6 +5,7 @@ using SolastaUnfinishedBusiness.Api; using TA; using static RuleDefinitions; +using static SolastaUnfinishedBusiness.Api.DatabaseHelper.DecisionPackageDefinitions; namespace SolastaUnfinishedBusiness.Models; @@ -18,6 +19,8 @@ internal static class EncountersSpawnContext internal static readonly List EncounterCharacters = []; + private static ulong EncounterId { get; set; } = 10000; + internal static void AddToEncounter(RulesetCharacterHero hero) { if (EncounterCharacters.Count < MaxEncounterCharacters) @@ -158,7 +161,18 @@ private static void StageEncounter(int3 position) foreach (var gameLocationCharacter in EncounterCharacters .Select(character => characterService.CreateCharacter( - PlayerControllerManager.DmControllerId, character, Side.Enemy))) + PlayerControllerManager.DmControllerId, character, Side.Enemy, + new GameLocationBehaviourPackage + { + BattleStartBehavior = + GameLocationBehaviourPackage.BattleStartBehaviorType.RaisesAlarm, + DecisionPackageDefinition = + character is RulesetCharacterMonster monster + ? monster.MonsterDefinition.DefaultBattleDecisionPackage + : IdleGuard_Default, + EncounterId = EncounterId++, + FormationDefinition = DatabaseHelper.FormationDefinitions.Column2 + }))) { gameLocationCharacter.CollectExistingLightSources(true); gameLocationCharacter.RefreshActionPerformances(); From 293e4fca8fadfadbe496f88e5b9459377d6e7668 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sun, 8 Sep 2024 15:45:25 -0700 Subject: [PATCH 079/212] update Diagnostics --- .../UnfinishedBusinessBlueprints/Assets.txt | 4 + .../ConditionBlindedByBlindingSmite.json | 2 +- .../ConditionCommandSpellApproach.json | 2 +- .../ConditionCommandSpellFlee.json | 2 +- .../ConditionFlashFreeze.json | 183 ++---------------- .../ConditionGrappledRestrainedEnsnared.json | 160 ++------------- .../ConditionGrappledRestrainedIceBound.json | 183 +++--------------- .../ConditionGrappledRestrainedSpellWeb.json | 183 ++---------------- .../ConditionNoxiousSpray.json | 9 +- .../ConditionOathOfAncientsNaturesWrath.json | 179 +++-------------- .../ConditionVileBrew.json | 165 ++-------------- .../ConditionWrathfulSmiteEnemy.json | 15 +- ...DecisionBreakFreeConditionFlashFreeze.json | 2 +- ...eeConditionGrappledRestrainedEnsnared.json | 2 +- ...eeConditionGrappledRestrainedIceBound.json | 4 +- ...eeConditionGrappledRestrainedSpellWeb.json | 2 +- ...ecisionBreakFreeConditionNoxiousSpray.json | 4 +- ...eeConditionOathOfAncientsNaturesWrath.json | 94 +++++++++ ...reakFreeConditionRestrainedByEntangle.json | 2 +- .../DecisionBreakFreeConditionVileBrew.json | 4 +- ...cisionBreakFreeConditionWrathfulSmite.json | 94 +++++++++ ...ckConditionOathOfAncientsNaturesWrath.json | 43 ++++ ...reeAbilityCheckConditionWrathfulSmite.json | 43 ++++ .../PowerFightingStyleTorchbearer.json | 2 +- .../PowerGrayDwarfInvisibility.json | 2 +- .../PowerOathOfAncientsNaturesWrath.json | 4 +- ...PowerPathOfTheLightIlluminatingStrike.json | 2 +- .../PowerRavenScionHeartSeekingShot.json | 2 +- .../SpellDefinition/CommandSpell.json | 14 +- .../SpellDefinition/CommandSpellApproach.json | 2 +- .../SpellDefinition/CommandSpellFlee.json | 2 +- .../SpellDefinition/CommandSpellGrovel.json | 2 +- .../SpellDefinition/CommandSpellHalt.json | 2 +- .../SpellDefinition/Dawn.json | 2 +- .../SpellDefinition/ForestGuardian.json | 2 +- .../SpellDefinition/Incineration.json | 2 +- .../SpellDefinition/VileBrew.json | 2 +- 37 files changed, 437 insertions(+), 986 deletions(-) create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionOathOfAncientsNaturesWrath.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionWrathfulSmite.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/BreakFreeAbilityCheckConditionOathOfAncientsNaturesWrath.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/BreakFreeAbilityCheckConditionWrathfulSmite.json diff --git a/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt b/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt index 943499dcb8..18cd266250 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt +++ b/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt @@ -1239,8 +1239,10 @@ DecisionBreakFreeConditionGrappledRestrainedEnsnared TA.AI.DecisionDefinition TA DecisionBreakFreeConditionGrappledRestrainedIceBound TA.AI.DecisionDefinition TA.AI.DecisionDefinition 017c5b82-f11c-5899-8729-947eabcf949f DecisionBreakFreeConditionGrappledRestrainedSpellWeb TA.AI.DecisionDefinition TA.AI.DecisionDefinition 61e7fc96-8cb5-5c2b-8a67-75fbef4f333a DecisionBreakFreeConditionNoxiousSpray TA.AI.DecisionDefinition TA.AI.DecisionDefinition 2f033fcf-d478-5581-94d9-27a3ad4496ad +DecisionBreakFreeConditionOathOfAncientsNaturesWrath TA.AI.DecisionDefinition TA.AI.DecisionDefinition 25d7ad8d-27b8-5882-9bfb-acc37798812f DecisionBreakFreeConditionRestrainedByEntangle TA.AI.DecisionDefinition TA.AI.DecisionDefinition 2a416669-5ec8-53c1-b07b-8fe6f29da4d2 DecisionBreakFreeConditionVileBrew TA.AI.DecisionDefinition TA.AI.DecisionDefinition 4b3278e8-334a-58d6-8c75-2f48e28b4e54 +DecisionBreakFreeConditionWrathfulSmite TA.AI.DecisionDefinition TA.AI.DecisionDefinition 1c32e557-4a88-580f-8d11-54d731c4bb79 Move_Approach TA.AI.DecisionDefinition TA.AI.DecisionDefinition 5cb2a87f-09a4-5fae-9b74-10516ea8a8ab Move_DissonantWhispers TA.AI.DecisionDefinition TA.AI.DecisionDefinition bdfa6649-5cad-5b35-a697-209ea53ca45d Approach TA.AI.DecisionPackageDefinition TA.AI.DecisionPackageDefinition 5043a0ec-c626-5877-bd87-c7bc0584366d @@ -1249,8 +1251,10 @@ BreakFreeAbilityCheckConditionGrappledRestrainedEnsnared TA.AI.DecisionPackageDe BreakFreeAbilityCheckConditionGrappledRestrainedIceBound TA.AI.DecisionPackageDefinition TA.AI.DecisionPackageDefinition 4702878b-3ac6-55e7-8954-7b1a8382aa7a BreakFreeAbilityCheckConditionGrappledRestrainedSpellWeb TA.AI.DecisionPackageDefinition TA.AI.DecisionPackageDefinition f265e068-e06c-503a-8aa5-dc39a214a7ec BreakFreeAbilityCheckConditionNoxiousSpray TA.AI.DecisionPackageDefinition TA.AI.DecisionPackageDefinition 1918a4d8-ff14-5aa1-9c20-1256e73c5730 +BreakFreeAbilityCheckConditionOathOfAncientsNaturesWrath TA.AI.DecisionPackageDefinition TA.AI.DecisionPackageDefinition c2d43b3b-7204-56df-a270-89202bf8ec7b BreakFreeAbilityCheckConditionRestrainedByEntangle TA.AI.DecisionPackageDefinition TA.AI.DecisionPackageDefinition 0d9623d9-0cd7-5c03-8275-e9e61f0f1b6a BreakFreeAbilityCheckConditionVileBrew TA.AI.DecisionPackageDefinition TA.AI.DecisionPackageDefinition 7b202c71-3241-5f80-8b02-ada4a0d9383f +BreakFreeAbilityCheckConditionWrathfulSmite TA.AI.DecisionPackageDefinition TA.AI.DecisionPackageDefinition 64259f64-63c1-54cb-8683-3cfb5b1b78a0 DissonantWhispers_Fear TA.AI.DecisionPackageDefinition TA.AI.DecisionPackageDefinition dfe2cc9e-cc70-5cfe-9057-19454acb1068 DieTypeD3 DieTypeDefinition DieTypeDefinition 63dc904b-8d78-5406-90aa-e7e1f3eefd84 ProxyCircleOfTheWildfireCauterizingFlames EffectProxyDefinition EffectProxyDefinition 5d3d90cd-1858-5044-b4f6-586754122132 diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionBlindedByBlindingSmite.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionBlindedByBlindingSmite.json index 52bf76c6d6..625e46e0bb 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionBlindedByBlindingSmite.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionBlindedByBlindingSmite.json @@ -14,7 +14,7 @@ "durationParameterDie": "D1", "durationParameter": 1, "forceTurnOccurence": false, - "turnOccurence": "StartOfTurn", + "turnOccurence": "EndOfTurn", "specialInterruptions": [], "interruptionRequiresSavingThrow": false, "interruptionSavingThrowComputationMethod": "SaveOverride", diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellApproach.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellApproach.json index 80929c9f34..de69aa40b3 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellApproach.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellApproach.json @@ -102,7 +102,7 @@ "addBehavior": false, "fearSource": true, "battlePackage": "Definition:Approach:5043a0ec-c626-5877-bd87-c7bc0584366d", - "explorationPackage": null, + "explorationPackage": "Definition:IdleGuard_Default:232428b431ff2414eb8254fb1e9e4cf1", "removedFromTheGame": false, "permanentlyRemovedIfExtraPlanar": false, "refundReceivedDamageWhenRemoved": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellFlee.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellFlee.json index 6b91629ae1..47e46742e9 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellFlee.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellFlee.json @@ -102,7 +102,7 @@ "addBehavior": false, "fearSource": true, "battlePackage": "Definition:Fear:67e55218421c6034d8ec7952695e5831", - "explorationPackage": null, + "explorationPackage": "Definition:IdleGuard_Default:232428b431ff2414eb8254fb1e9e4cf1", "removedFromTheGame": false, "permanentlyRemovedIfExtraPlanar": false, "refundReceivedDamageWhenRemoved": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionFlashFreeze.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionFlashFreeze.json index b14620971b..d42ec12fe9 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionFlashFreeze.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionFlashFreeze.json @@ -1,13 +1,9 @@ { "$type": "ConditionDefinition, Assembly-CSharp", "inDungeonEditor": false, - "parentCondition": "Definition:ConditionRestrainedByWeb:0a8efc601f1a64144905a95acf388a97", + "parentCondition": "Definition:ConditionRestrained:ec9fa707d4174c54bbdecde60a860c2c", "conditionType": "Detrimental", "features": [ - "Definition:MovementAffinityConditionRestrained:ed9d9d5986e47f845819579f936ee8cc", - "Definition:CombatAffinityRestrained:dc755d1ea6b1ff0429ff9650d4a2d318", - "Definition:SavingThrowAffinityConditionRestrained:fbdda0611e9c1254aa76ad4e303c668d", - "Definition:ActionAffinityConditionRestrained:0a11d859909c2624086506f327824de8", "Definition:ActionAffinityGrappled:1c2c02a0e9f823c489b3d62d03534617" ], "allowMultipleInstances": false, @@ -15,10 +11,10 @@ "silentWhenRemoved": false, "silentWhenRefreshed": false, "terminateWhenRemoved": false, - "specialDuration": false, - "durationType": "Round", + "specialDuration": true, + "durationType": "Minute", "durationParameterDie": "D1", - "durationParameter": 2, + "durationParameter": 1, "forceTurnOccurence": false, "turnOccurence": "EndOfTurn", "specialInterruptions": [], @@ -30,9 +26,7 @@ "interruptionSavingThrowAffinity": "None", "conditionTags": [], "recurrentEffectForms": [], - "cancellingConditions": [ - "Definition:ConditionSwallowedRemorhaz:1bf833241755e684fbef755a54de3fd6" - ], + "cancellingConditions": [], "additionalDamageWhenHit": false, "additionalDamageTypeDetermination": "Specific", "additionalDamageType": "", @@ -47,170 +41,35 @@ "conditionStartParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" + "m_SubObjectName": null, + "m_SubObjectType": null }, "conditionParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" + "m_SubObjectName": null, + "m_SubObjectType": null }, "conditionEndParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "recurrentEffectParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" + "m_SubObjectName": null, + "m_SubObjectType": null }, + "recurrentEffectParticleReference": null, "characterShaderReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" + "m_SubObjectName": null, + "m_SubObjectType": null }, "particlesBasedOnAncestryDamageType": false, "ancestryType": "Sorcerer", - "acidParticleParameters": { - "$type": "ConditionParticleParameters, Assembly-CSharp", - "startParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "particleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "endParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "recurrentEffectParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - } - }, - "coldParticleParameters": { - "$type": "ConditionParticleParameters, Assembly-CSharp", - "startParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "particleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "endParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "recurrentEffectParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - } - }, - "fireParticleParameters": { - "$type": "ConditionParticleParameters, Assembly-CSharp", - "startParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "particleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "endParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "recurrentEffectParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - } - }, - "lightningParticleParameters": { - "$type": "ConditionParticleParameters, Assembly-CSharp", - "startParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "particleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "endParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "recurrentEffectParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - } - }, - "poisonParticleParameters": { - "$type": "ConditionParticleParameters, Assembly-CSharp", - "startParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "particleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "endParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "recurrentEffectParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - } - }, + "acidParticleParameters": null, + "coldParticleParameters": null, + "fireParticleParameters": null, + "lightningParticleParameters": null, + "poisonParticleParameters": null, "overrideCharacterShaderColors": false, "firstCharacterShaderColor": { "$type": "UnityEngine.Color, UnityEngine.CoreModule", @@ -230,7 +89,7 @@ "timeToWaitBeforeRemovingShader": 0.5, "possessive": true, "amountOrigin": "Fixed", - "baseAmount": 1, + "baseAmount": 20, "additiveAmount": false, "sourceAbilityBonusMinValue": 1, "subsequentOnRemoval": null, @@ -243,7 +102,7 @@ "addBehavior": true, "fearSource": false, "battlePackage": "Definition:BreakFreeAbilityCheckConditionFlashFreeze:5578aa14-4a4c-5aa0-b787-7203e14b8a36", - "explorationPackage": null, + "explorationPackage": "Definition:IdleGuard_Default:232428b431ff2414eb8254fb1e9e4cf1", "removedFromTheGame": false, "permanentlyRemovedIfExtraPlanar": false, "refundReceivedDamageWhenRemoved": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGrappledRestrainedEnsnared.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGrappledRestrainedEnsnared.json index 99e1a9cd08..d9c4007fc3 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGrappledRestrainedEnsnared.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGrappledRestrainedEnsnared.json @@ -1,13 +1,9 @@ { "$type": "ConditionDefinition, Assembly-CSharp", "inDungeonEditor": false, - "parentCondition": "Definition:ConditionRestrainedByWeb:0a8efc601f1a64144905a95acf388a97", + "parentCondition": "Definition:ConditionRestrained:ec9fa707d4174c54bbdecde60a860c2c", "conditionType": "Detrimental", "features": [ - "Definition:MovementAffinityConditionRestrained:ed9d9d5986e47f845819579f936ee8cc", - "Definition:CombatAffinityRestrained:dc755d1ea6b1ff0429ff9650d4a2d318", - "Definition:SavingThrowAffinityConditionRestrained:fbdda0611e9c1254aa76ad4e303c668d", - "Definition:ActionAffinityConditionRestrained:0a11d859909c2624086506f327824de8", "Definition:ActionAffinityGrappled:1c2c02a0e9f823c489b3d62d03534617" ], "allowMultipleInstances": false, @@ -20,7 +16,7 @@ "durationParameterDie": "D1", "durationParameter": 1, "forceTurnOccurence": false, - "turnOccurence": "StartOfTurn", + "turnOccurence": "EndOfTurn", "specialInterruptions": [], "interruptionRequiresSavingThrow": false, "interruptionSavingThrowComputationMethod": "SaveOverride", @@ -66,9 +62,7 @@ "filterId": 0 } ], - "cancellingConditions": [ - "Definition:ConditionSwallowedRemorhaz:1bf833241755e684fbef755a54de3fd6" - ], + "cancellingConditions": [], "additionalDamageWhenHit": false, "additionalDamageTypeDetermination": "Specific", "additionalDamageType": "", @@ -107,146 +101,16 @@ "characterShaderReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" + "m_SubObjectName": null, + "m_SubObjectType": null }, "particlesBasedOnAncestryDamageType": false, "ancestryType": "Sorcerer", - "acidParticleParameters": { - "$type": "ConditionParticleParameters, Assembly-CSharp", - "startParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "particleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "endParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "recurrentEffectParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - } - }, - "coldParticleParameters": { - "$type": "ConditionParticleParameters, Assembly-CSharp", - "startParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "particleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "endParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "recurrentEffectParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - } - }, - "fireParticleParameters": { - "$type": "ConditionParticleParameters, Assembly-CSharp", - "startParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "particleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "endParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "recurrentEffectParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - } - }, - "lightningParticleParameters": { - "$type": "ConditionParticleParameters, Assembly-CSharp", - "startParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "particleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "endParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "recurrentEffectParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - } - }, - "poisonParticleParameters": { - "$type": "ConditionParticleParameters, Assembly-CSharp", - "startParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "particleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "endParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "recurrentEffectParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - } - }, + "acidParticleParameters": null, + "coldParticleParameters": null, + "fireParticleParameters": null, + "lightningParticleParameters": null, + "poisonParticleParameters": null, "overrideCharacterShaderColors": false, "firstCharacterShaderColor": { "$type": "UnityEngine.Color, UnityEngine.CoreModule", @@ -266,7 +130,7 @@ "timeToWaitBeforeRemovingShader": 0.5, "possessive": false, "amountOrigin": "Fixed", - "baseAmount": 1, + "baseAmount": 20, "additiveAmount": false, "sourceAbilityBonusMinValue": 1, "subsequentOnRemoval": null, @@ -279,7 +143,7 @@ "addBehavior": true, "fearSource": false, "battlePackage": "Definition:BreakFreeAbilityCheckConditionGrappledRestrainedEnsnared:bf1d4828-465e-5897-91ca-bc8094b3d20e", - "explorationPackage": null, + "explorationPackage": "Definition:IdleGuard_Default:232428b431ff2414eb8254fb1e9e4cf1", "removedFromTheGame": false, "permanentlyRemovedIfExtraPlanar": false, "refundReceivedDamageWhenRemoved": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGrappledRestrainedIceBound.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGrappledRestrainedIceBound.json index ab5c4285fd..6a955a6189 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGrappledRestrainedIceBound.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGrappledRestrainedIceBound.json @@ -1,22 +1,20 @@ { "$type": "ConditionDefinition, Assembly-CSharp", "inDungeonEditor": false, - "parentCondition": "Definition:ConditionGrappled:b9e3fa435129c33459a4847c9c551265", + "parentCondition": "Definition:ConditionRestrained:ec9fa707d4174c54bbdecde60a860c2c", "conditionType": "Detrimental", "features": [ - "Definition:ActionAffinityConditionRestrained:0a11d859909c2624086506f327824de8", - "Definition:ActionAffinityGrappled:1c2c02a0e9f823c489b3d62d03534617", - "Definition:MovementAffinityConditionRestrained:ed9d9d5986e47f845819579f936ee8cc" + "Definition:ActionAffinityGrappled:1c2c02a0e9f823c489b3d62d03534617" ], "allowMultipleInstances": false, "silentWhenAdded": false, "silentWhenRemoved": false, "silentWhenRefreshed": false, "terminateWhenRemoved": false, - "specialDuration": false, - "durationType": "Round", + "specialDuration": true, + "durationType": "Minute", "durationParameterDie": "D1", - "durationParameter": 2, + "durationParameter": 1, "forceTurnOccurence": false, "turnOccurence": "EndOfTurn", "specialInterruptions": [], @@ -28,9 +26,7 @@ "interruptionSavingThrowAffinity": "None", "conditionTags": [], "recurrentEffectForms": [], - "cancellingConditions": [ - "Definition:ConditionSwallowedRemorhaz:1bf833241755e684fbef755a54de3fd6" - ], + "cancellingConditions": [], "additionalDamageWhenHit": false, "additionalDamageTypeDetermination": "Specific", "additionalDamageType": "", @@ -45,170 +41,35 @@ "conditionStartParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" + "m_SubObjectName": null, + "m_SubObjectType": null }, "conditionParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" + "m_SubObjectName": null, + "m_SubObjectType": null }, "conditionEndParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "recurrentEffectParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" + "m_SubObjectName": null, + "m_SubObjectType": null }, + "recurrentEffectParticleReference": null, "characterShaderReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" + "m_SubObjectName": null, + "m_SubObjectType": null }, "particlesBasedOnAncestryDamageType": false, "ancestryType": "Sorcerer", - "acidParticleParameters": { - "$type": "ConditionParticleParameters, Assembly-CSharp", - "startParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "particleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "endParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "recurrentEffectParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - } - }, - "coldParticleParameters": { - "$type": "ConditionParticleParameters, Assembly-CSharp", - "startParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "particleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "endParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "recurrentEffectParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - } - }, - "fireParticleParameters": { - "$type": "ConditionParticleParameters, Assembly-CSharp", - "startParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "particleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "endParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "recurrentEffectParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - } - }, - "lightningParticleParameters": { - "$type": "ConditionParticleParameters, Assembly-CSharp", - "startParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "particleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "endParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "recurrentEffectParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - } - }, - "poisonParticleParameters": { - "$type": "ConditionParticleParameters, Assembly-CSharp", - "startParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "particleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "endParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "recurrentEffectParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - } - }, + "acidParticleParameters": null, + "coldParticleParameters": null, + "fireParticleParameters": null, + "lightningParticleParameters": null, + "poisonParticleParameters": null, "overrideCharacterShaderColors": false, "firstCharacterShaderColor": { "$type": "UnityEngine.Color, UnityEngine.CoreModule", @@ -228,7 +89,7 @@ "timeToWaitBeforeRemovingShader": 0.5, "possessive": false, "amountOrigin": "Fixed", - "baseAmount": 0, + "baseAmount": 10, "additiveAmount": false, "sourceAbilityBonusMinValue": 1, "subsequentOnRemoval": null, @@ -241,7 +102,7 @@ "addBehavior": true, "fearSource": false, "battlePackage": "Definition:BreakFreeAbilityCheckConditionGrappledRestrainedIceBound:4702878b-3ac6-55e7-8954-7b1a8382aa7a", - "explorationPackage": null, + "explorationPackage": "Definition:IdleGuard_Default:232428b431ff2414eb8254fb1e9e4cf1", "removedFromTheGame": false, "permanentlyRemovedIfExtraPlanar": false, "refundReceivedDamageWhenRemoved": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGrappledRestrainedSpellWeb.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGrappledRestrainedSpellWeb.json index 9a54e8320d..3d746a3cca 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGrappledRestrainedSpellWeb.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGrappledRestrainedSpellWeb.json @@ -1,13 +1,9 @@ { "$type": "ConditionDefinition, Assembly-CSharp", "inDungeonEditor": false, - "parentCondition": "Definition:ConditionRestrainedByWeb:0a8efc601f1a64144905a95acf388a97", + "parentCondition": "Definition:ConditionRestrained:ec9fa707d4174c54bbdecde60a860c2c", "conditionType": "Detrimental", "features": [ - "Definition:MovementAffinityConditionRestrained:ed9d9d5986e47f845819579f936ee8cc", - "Definition:CombatAffinityRestrained:dc755d1ea6b1ff0429ff9650d4a2d318", - "Definition:SavingThrowAffinityConditionRestrained:fbdda0611e9c1254aa76ad4e303c668d", - "Definition:ActionAffinityConditionRestrained:0a11d859909c2624086506f327824de8", "Definition:ActionAffinityGrappled:1c2c02a0e9f823c489b3d62d03534617" ], "allowMultipleInstances": false, @@ -15,10 +11,10 @@ "silentWhenRemoved": false, "silentWhenRefreshed": false, "terminateWhenRemoved": false, - "specialDuration": false, - "durationType": "Round", + "specialDuration": true, + "durationType": "Hour", "durationParameterDie": "D1", - "durationParameter": 2, + "durationParameter": 1, "forceTurnOccurence": false, "turnOccurence": "EndOfTurn", "specialInterruptions": [], @@ -30,9 +26,7 @@ "interruptionSavingThrowAffinity": "None", "conditionTags": [], "recurrentEffectForms": [], - "cancellingConditions": [ - "Definition:ConditionSwallowedRemorhaz:1bf833241755e684fbef755a54de3fd6" - ], + "cancellingConditions": [], "additionalDamageWhenHit": false, "additionalDamageTypeDetermination": "Specific", "additionalDamageType": "", @@ -47,170 +41,35 @@ "conditionStartParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" + "m_SubObjectName": null, + "m_SubObjectType": null }, "conditionParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" + "m_SubObjectName": null, + "m_SubObjectType": null }, "conditionEndParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "recurrentEffectParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" + "m_SubObjectName": null, + "m_SubObjectType": null }, + "recurrentEffectParticleReference": null, "characterShaderReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" + "m_SubObjectName": null, + "m_SubObjectType": null }, "particlesBasedOnAncestryDamageType": false, "ancestryType": "Sorcerer", - "acidParticleParameters": { - "$type": "ConditionParticleParameters, Assembly-CSharp", - "startParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "particleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "endParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "recurrentEffectParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - } - }, - "coldParticleParameters": { - "$type": "ConditionParticleParameters, Assembly-CSharp", - "startParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "particleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "endParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "recurrentEffectParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - } - }, - "fireParticleParameters": { - "$type": "ConditionParticleParameters, Assembly-CSharp", - "startParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "particleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "endParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "recurrentEffectParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - } - }, - "lightningParticleParameters": { - "$type": "ConditionParticleParameters, Assembly-CSharp", - "startParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "particleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "endParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "recurrentEffectParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - } - }, - "poisonParticleParameters": { - "$type": "ConditionParticleParameters, Assembly-CSharp", - "startParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "particleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "endParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "recurrentEffectParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - } - }, + "acidParticleParameters": null, + "coldParticleParameters": null, + "fireParticleParameters": null, + "lightningParticleParameters": null, + "poisonParticleParameters": null, "overrideCharacterShaderColors": false, "firstCharacterShaderColor": { "$type": "UnityEngine.Color, UnityEngine.CoreModule", @@ -230,7 +89,7 @@ "timeToWaitBeforeRemovingShader": 0.5, "possessive": false, "amountOrigin": "Fixed", - "baseAmount": 1, + "baseAmount": 20, "additiveAmount": false, "sourceAbilityBonusMinValue": 1, "subsequentOnRemoval": null, @@ -243,7 +102,7 @@ "addBehavior": true, "fearSource": false, "battlePackage": "Definition:BreakFreeAbilityCheckConditionGrappledRestrainedSpellWeb:f265e068-e06c-503a-8aa5-dc39a214a7ec", - "explorationPackage": null, + "explorationPackage": "Definition:IdleGuard_Default:232428b431ff2414eb8254fb1e9e4cf1", "removedFromTheGame": false, "permanentlyRemovedIfExtraPlanar": false, "refundReceivedDamageWhenRemoved": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionNoxiousSpray.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionNoxiousSpray.json index 3fe7b842ee..3e67b315aa 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionNoxiousSpray.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionNoxiousSpray.json @@ -4,6 +4,7 @@ "parentCondition": null, "conditionType": "Detrimental", "features": [ + "Definition:ActionAffinityGrappled:1c2c02a0e9f823c489b3d62d03534617", "Definition:ActionAffinityNoxiousSpray:92fce887-eee5-549c-a04c-a32422effb56" ], "allowMultipleInstances": false, @@ -11,8 +12,8 @@ "silentWhenRemoved": false, "silentWhenRefreshed": false, "terminateWhenRemoved": false, - "specialDuration": false, - "durationType": "Hour", + "specialDuration": true, + "durationType": "Round", "durationParameterDie": "D1", "durationParameter": 1, "forceTurnOccurence": false, @@ -224,7 +225,7 @@ "timeToWaitBeforeRemovingShader": 0.5, "possessive": true, "amountOrigin": "Fixed", - "baseAmount": 0, + "baseAmount": 10, "additiveAmount": false, "sourceAbilityBonusMinValue": 1, "subsequentOnRemoval": null, @@ -237,7 +238,7 @@ "addBehavior": true, "fearSource": false, "battlePackage": "Definition:BreakFreeAbilityCheckConditionNoxiousSpray:1918a4d8-ff14-5aa1-9c20-1256e73c5730", - "explorationPackage": null, + "explorationPackage": "Definition:IdleGuard_Default:232428b431ff2414eb8254fb1e9e4cf1", "removedFromTheGame": false, "permanentlyRemovedIfExtraPlanar": false, "refundReceivedDamageWhenRemoved": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionOathOfAncientsNaturesWrath.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionOathOfAncientsNaturesWrath.json index 6f61e17c0e..39b1693beb 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionOathOfAncientsNaturesWrath.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionOathOfAncientsNaturesWrath.json @@ -3,15 +3,17 @@ "inDungeonEditor": false, "parentCondition": "Definition:ConditionRestrained:ec9fa707d4174c54bbdecde60a860c2c", "conditionType": "Detrimental", - "features": [], + "features": [ + "Definition:ActionAffinityGrappled:1c2c02a0e9f823c489b3d62d03534617" + ], "allowMultipleInstances": false, "silentWhenAdded": false, "silentWhenRemoved": false, "silentWhenRefreshed": false, "terminateWhenRemoved": false, - "specialDuration": false, - "durationType": "Round", - "durationParameterDie": "D4", + "specialDuration": true, + "durationType": "Minute", + "durationParameterDie": "D1", "durationParameter": 1, "forceTurnOccurence": false, "turnOccurence": "EndOfTurn", @@ -39,170 +41,35 @@ "conditionStartParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" + "m_SubObjectName": null, + "m_SubObjectType": null }, "conditionParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" + "m_SubObjectName": null, + "m_SubObjectType": null }, "conditionEndParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "recurrentEffectParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" + "m_SubObjectName": null, + "m_SubObjectType": null }, + "recurrentEffectParticleReference": null, "characterShaderReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" + "m_SubObjectName": null, + "m_SubObjectType": null }, "particlesBasedOnAncestryDamageType": false, "ancestryType": "Sorcerer", - "acidParticleParameters": { - "$type": "ConditionParticleParameters, Assembly-CSharp", - "startParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "particleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "endParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "recurrentEffectParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - } - }, - "coldParticleParameters": { - "$type": "ConditionParticleParameters, Assembly-CSharp", - "startParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "particleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "endParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "recurrentEffectParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - } - }, - "fireParticleParameters": { - "$type": "ConditionParticleParameters, Assembly-CSharp", - "startParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "particleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "endParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "recurrentEffectParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - } - }, - "lightningParticleParameters": { - "$type": "ConditionParticleParameters, Assembly-CSharp", - "startParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "particleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "endParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "recurrentEffectParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - } - }, - "poisonParticleParameters": { - "$type": "ConditionParticleParameters, Assembly-CSharp", - "startParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "particleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "endParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "recurrentEffectParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - } - }, + "acidParticleParameters": null, + "coldParticleParameters": null, + "fireParticleParameters": null, + "lightningParticleParameters": null, + "poisonParticleParameters": null, "overrideCharacterShaderColors": false, "firstCharacterShaderColor": { "$type": "UnityEngine.Color, UnityEngine.CoreModule", @@ -222,7 +89,7 @@ "timeToWaitBeforeRemovingShader": 0.5, "possessive": false, "amountOrigin": "Fixed", - "baseAmount": 1, + "baseAmount": 20, "additiveAmount": false, "sourceAbilityBonusMinValue": 1, "subsequentOnRemoval": null, @@ -234,8 +101,8 @@ "forceBehavior": false, "addBehavior": true, "fearSource": false, - "battlePackage": "Definition:BreakFreeAbilityCheckConditionRestrainedByEntangle:0d9623d9-0cd7-5c03-8275-e9e61f0f1b6a", - "explorationPackage": null, + "battlePackage": "Definition:BreakFreeAbilityCheckConditionOathOfAncientsNaturesWrath:c2d43b3b-7204-56df-a270-89202bf8ec7b", + "explorationPackage": "Definition:IdleGuard_Default:232428b431ff2414eb8254fb1e9e4cf1", "removedFromTheGame": false, "permanentlyRemovedIfExtraPlanar": false, "refundReceivedDamageWhenRemoved": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionVileBrew.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionVileBrew.json index 67131fe9ae..7176b34a27 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionVileBrew.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionVileBrew.json @@ -4,19 +4,17 @@ "parentCondition": null, "conditionType": "Detrimental", "features": [ - "Definition:ActionAffinityConditionRestrained:0a11d859909c2624086506f327824de8", - "Definition:ActionAffinityGrappled:1c2c02a0e9f823c489b3d62d03534617", - "Definition:MovementAffinityConditionRestrained:ed9d9d5986e47f845819579f936ee8cc" + "Definition:ActionAffinityGrappled:1c2c02a0e9f823c489b3d62d03534617" ], "allowMultipleInstances": false, "silentWhenAdded": false, "silentWhenRemoved": false, "silentWhenRefreshed": false, "terminateWhenRemoved": false, - "specialDuration": false, - "durationType": "Round", + "specialDuration": true, + "durationType": "Minute", "durationParameterDie": "D1", - "durationParameter": 3, + "durationParameter": 1, "forceTurnOccurence": false, "turnOccurence": "EndOfTurn", "specialInterruptions": [], @@ -94,155 +92,20 @@ "m_SubObjectName": "", "m_SubObjectType": "" }, - "recurrentEffectParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, + "recurrentEffectParticleReference": null, "characterShaderReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" + "m_SubObjectName": null, + "m_SubObjectType": null }, "particlesBasedOnAncestryDamageType": false, "ancestryType": "Sorcerer", - "acidParticleParameters": { - "$type": "ConditionParticleParameters, Assembly-CSharp", - "startParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "particleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "endParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "recurrentEffectParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - } - }, - "coldParticleParameters": { - "$type": "ConditionParticleParameters, Assembly-CSharp", - "startParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "particleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "endParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "recurrentEffectParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - } - }, - "fireParticleParameters": { - "$type": "ConditionParticleParameters, Assembly-CSharp", - "startParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "particleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "endParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "recurrentEffectParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - } - }, - "lightningParticleParameters": { - "$type": "ConditionParticleParameters, Assembly-CSharp", - "startParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "particleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "endParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "recurrentEffectParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - } - }, - "poisonParticleParameters": { - "$type": "ConditionParticleParameters, Assembly-CSharp", - "startParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "particleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "endParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "recurrentEffectParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - } - }, + "acidParticleParameters": null, + "coldParticleParameters": null, + "fireParticleParameters": null, + "lightningParticleParameters": null, + "poisonParticleParameters": null, "overrideCharacterShaderColors": false, "firstCharacterShaderColor": { "$type": "UnityEngine.Color, UnityEngine.CoreModule", @@ -262,7 +125,7 @@ "timeToWaitBeforeRemovingShader": 0.5, "possessive": false, "amountOrigin": "Fixed", - "baseAmount": 0, + "baseAmount": 10, "additiveAmount": false, "sourceAbilityBonusMinValue": 1, "subsequentOnRemoval": null, @@ -275,7 +138,7 @@ "addBehavior": true, "fearSource": false, "battlePackage": "Definition:BreakFreeAbilityCheckConditionVileBrew:7b202c71-3241-5f80-8b02-ada4a0d9383f", - "explorationPackage": null, + "explorationPackage": "Definition:IdleGuard_Default:232428b431ff2414eb8254fb1e9e4cf1", "removedFromTheGame": false, "permanentlyRemovedIfExtraPlanar": false, "refundReceivedDamageWhenRemoved": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionWrathfulSmiteEnemy.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionWrathfulSmiteEnemy.json index 9c80e56aee..30cc55a744 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionWrathfulSmiteEnemy.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionWrathfulSmiteEnemy.json @@ -4,8 +4,7 @@ "parentCondition": "Definition:ConditionFrightened:5cbaee42aac310e42a407fc59bf65515", "conditionType": "Detrimental", "features": [ - "Definition:CombatAffinityFrightened:bd7a11317eacebb44966fa78e8b8f2dc", - "Definition:AbilityCheckAffinityFrightened:2a2719b10ea87f34f9f29e03cbdba5c7" + "Definition:ActionAffinityGrappled:1c2c02a0e9f823c489b3d62d03534617" ], "allowMultipleInstances": false, "silentWhenAdded": false, @@ -17,7 +16,7 @@ "durationParameterDie": "D1", "durationParameter": 1, "forceTurnOccurence": false, - "turnOccurence": "StartOfTurn", + "turnOccurence": "EndOfTurn", "specialInterruptions": [], "interruptionRequiresSavingThrow": false, "interruptionSavingThrowComputationMethod": "SaveOverride", @@ -224,8 +223,8 @@ "timeToWaitBeforeApplyingShader": 0.5, "timeToWaitBeforeRemovingShader": 0.5, "possessive": false, - "amountOrigin": "None", - "baseAmount": 0, + "amountOrigin": "Fixed", + "baseAmount": 30, "additiveAmount": false, "sourceAbilityBonusMinValue": 1, "subsequentOnRemoval": null, @@ -235,10 +234,10 @@ "subsequentDCIncrease": 5, "effectFormsOnRemoved": [], "forceBehavior": false, - "addBehavior": false, + "addBehavior": true, "fearSource": false, - "battlePackage": null, - "explorationPackage": null, + "battlePackage": "Definition:BreakFreeAbilityCheckConditionWrathfulSmite:64259f64-63c1-54cb-8683-3cfb5b1b78a0", + "explorationPackage": "Definition:IdleGuard_Default:232428b431ff2414eb8254fb1e9e4cf1", "removedFromTheGame": false, "permanentlyRemovedIfExtraPlanar": false, "refundReceivedDamageWhenRemoved": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionFlashFreeze.json b/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionFlashFreeze.json index 0e58477f92..e06b7b48c5 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionFlashFreeze.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionFlashFreeze.json @@ -61,7 +61,7 @@ "stringSecParameter": "", "boolParameter": false, "boolSecParameter": false, - "floatParameter": 0.0, + "floatParameter": 3.0, "enumParameter": 1 }, "guiPresentation": { diff --git a/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionGrappledRestrainedEnsnared.json b/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionGrappledRestrainedEnsnared.json index 67473ff826..9a376180a6 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionGrappledRestrainedEnsnared.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionGrappledRestrainedEnsnared.json @@ -61,7 +61,7 @@ "stringSecParameter": "", "boolParameter": false, "boolSecParameter": false, - "floatParameter": 0.0, + "floatParameter": 3.0, "enumParameter": 1 }, "guiPresentation": { diff --git a/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionGrappledRestrainedIceBound.json b/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionGrappledRestrainedIceBound.json index a1288bd797..46d3ca4130 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionGrappledRestrainedIceBound.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionGrappledRestrainedIceBound.json @@ -61,8 +61,8 @@ "stringSecParameter": "", "boolParameter": false, "boolSecParameter": false, - "floatParameter": 0.0, - "enumParameter": 0 + "floatParameter": 3.0, + "enumParameter": 1 }, "guiPresentation": { "$type": "GuiPresentation, Assembly-CSharp", diff --git a/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionGrappledRestrainedSpellWeb.json b/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionGrappledRestrainedSpellWeb.json index 5e5b2fa2e2..03137c0b72 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionGrappledRestrainedSpellWeb.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionGrappledRestrainedSpellWeb.json @@ -61,7 +61,7 @@ "stringSecParameter": "", "boolParameter": false, "boolSecParameter": false, - "floatParameter": 0.0, + "floatParameter": 3.0, "enumParameter": 1 }, "guiPresentation": { diff --git a/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionNoxiousSpray.json b/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionNoxiousSpray.json index 4b0d273db5..8bbd16e63b 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionNoxiousSpray.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionNoxiousSpray.json @@ -61,8 +61,8 @@ "stringSecParameter": "", "boolParameter": false, "boolSecParameter": false, - "floatParameter": 0.0, - "enumParameter": 0 + "floatParameter": 3.0, + "enumParameter": 1 }, "guiPresentation": { "$type": "GuiPresentation, Assembly-CSharp", diff --git a/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionOathOfAncientsNaturesWrath.json b/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionOathOfAncientsNaturesWrath.json new file mode 100644 index 0000000000..c04023adfb --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionOathOfAncientsNaturesWrath.json @@ -0,0 +1,94 @@ +{ + "$type": "TA.AI.DecisionDefinition, Assembly-CSharp", + "decision": { + "$type": "TA.AI.DecisionDescription, Assembly-CSharp", + "description": "if restrained from ConditionOathOfAncientsNaturesWrath, and can use main action, try to break free", + "scorer": { + "$type": "TA.AI.ActivityScorerDefinition, Assembly-CSharp", + "scorer": { + "$type": "TA.AI.ActivityScorer, Assembly-CSharp", + "considerations": [ + { + "$type": "TA.AI.WeightedConsiderationDescription, Assembly-CSharp", + "consideration": { + "$type": "TA.AI.ConsiderationDefinition, Assembly-CSharp", + "consideration": { + "$type": "TA.AI.ConsiderationDescription, Assembly-CSharp", + "considerationType": "HasCondition", + "curve": { + "$type": "UnityEngine.AnimationCurve, UnityEngine.CoreModule" + }, + "stringParameter": "ConditionOathOfAncientsNaturesWrath", + "floatParameter": 2.0, + "intParameter": 2, + "byteParameter": 0, + "boolParameter": true, + "boolSecParameter": false, + "boolTerParameter": false + }, + "name": "HasConditionOathOfAncientsNaturesWrath" + }, + "weight": 1.0 + }, + { + "$type": "TA.AI.WeightedConsiderationDescription, Assembly-CSharp", + "consideration": { + "$type": "TA.AI.ConsiderationDefinition, Assembly-CSharp", + "consideration": { + "$type": "TA.AI.ConsiderationDescription, Assembly-CSharp", + "considerationType": "ActionTypeStatus", + "curve": { + "$type": "UnityEngine.AnimationCurve, UnityEngine.CoreModule" + }, + "stringParameter": "", + "floatParameter": 1.0, + "intParameter": 0, + "byteParameter": 0, + "boolParameter": true, + "boolSecParameter": false, + "boolTerParameter": false + }, + "name": "MainActionNotFullyConsumed" + }, + "weight": 1.0 + } + ] + }, + "name": "BreakFreeConditionOathOfAncientsNaturesWrath" + }, + "activityType": "BreakFree", + "stringParameter": "", + "stringSecParameter": "", + "boolParameter": false, + "boolSecParameter": false, + "floatParameter": 3.0, + "enumParameter": 1 + }, + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": true, + "title": "Feature/&NoContentTitle", + "description": "Feature/&NoContentTitle", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "25d7ad8d-27b8-5882-9bfb-acc37798812f", + "contentPack": 9999, + "name": "DecisionBreakFreeConditionOathOfAncientsNaturesWrath" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionRestrainedByEntangle.json b/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionRestrainedByEntangle.json index c7d2e4dbc4..d16265bed1 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionRestrainedByEntangle.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionRestrainedByEntangle.json @@ -61,7 +61,7 @@ "stringSecParameter": "", "boolParameter": false, "boolSecParameter": false, - "floatParameter": 0.0, + "floatParameter": 3.0, "enumParameter": 1 }, "guiPresentation": { diff --git a/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionVileBrew.json b/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionVileBrew.json index 81419d3992..91c153a20e 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionVileBrew.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionVileBrew.json @@ -61,8 +61,8 @@ "stringSecParameter": "", "boolParameter": false, "boolSecParameter": false, - "floatParameter": 0.0, - "enumParameter": 0 + "floatParameter": 3.0, + "enumParameter": 1 }, "guiPresentation": { "$type": "GuiPresentation, Assembly-CSharp", diff --git a/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionWrathfulSmite.json b/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionWrathfulSmite.json new file mode 100644 index 0000000000..91387f8932 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionWrathfulSmite.json @@ -0,0 +1,94 @@ +{ + "$type": "TA.AI.DecisionDefinition, Assembly-CSharp", + "decision": { + "$type": "TA.AI.DecisionDescription, Assembly-CSharp", + "description": "if restrained from ConditionWrathfulSmite, and can use main action, try to break free", + "scorer": { + "$type": "TA.AI.ActivityScorerDefinition, Assembly-CSharp", + "scorer": { + "$type": "TA.AI.ActivityScorer, Assembly-CSharp", + "considerations": [ + { + "$type": "TA.AI.WeightedConsiderationDescription, Assembly-CSharp", + "consideration": { + "$type": "TA.AI.ConsiderationDefinition, Assembly-CSharp", + "consideration": { + "$type": "TA.AI.ConsiderationDescription, Assembly-CSharp", + "considerationType": "HasCondition", + "curve": { + "$type": "UnityEngine.AnimationCurve, UnityEngine.CoreModule" + }, + "stringParameter": "ConditionWrathfulSmite", + "floatParameter": 2.0, + "intParameter": 2, + "byteParameter": 0, + "boolParameter": true, + "boolSecParameter": false, + "boolTerParameter": false + }, + "name": "HasConditionWrathfulSmite" + }, + "weight": 1.0 + }, + { + "$type": "TA.AI.WeightedConsiderationDescription, Assembly-CSharp", + "consideration": { + "$type": "TA.AI.ConsiderationDefinition, Assembly-CSharp", + "consideration": { + "$type": "TA.AI.ConsiderationDescription, Assembly-CSharp", + "considerationType": "ActionTypeStatus", + "curve": { + "$type": "UnityEngine.AnimationCurve, UnityEngine.CoreModule" + }, + "stringParameter": "", + "floatParameter": 1.0, + "intParameter": 0, + "byteParameter": 0, + "boolParameter": true, + "boolSecParameter": false, + "boolTerParameter": false + }, + "name": "MainActionNotFullyConsumed" + }, + "weight": 1.0 + } + ] + }, + "name": "BreakFreeConditionWrathfulSmite" + }, + "activityType": "BreakFree", + "stringParameter": "", + "stringSecParameter": "", + "boolParameter": false, + "boolSecParameter": false, + "floatParameter": 3.0, + "enumParameter": 1 + }, + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": true, + "title": "Feature/&NoContentTitle", + "description": "Feature/&NoContentTitle", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "1c32e557-4a88-580f-8d11-54d731c4bb79", + "contentPack": 9999, + "name": "DecisionBreakFreeConditionWrathfulSmite" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/BreakFreeAbilityCheckConditionOathOfAncientsNaturesWrath.json b/Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/BreakFreeAbilityCheckConditionOathOfAncientsNaturesWrath.json new file mode 100644 index 0000000000..8e4501d0e0 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/BreakFreeAbilityCheckConditionOathOfAncientsNaturesWrath.json @@ -0,0 +1,43 @@ +{ + "$type": "TA.AI.DecisionPackageDefinition, Assembly-CSharp", + "dungeonMakerPresence": false, + "package": { + "$type": "TA.AI.DecisionPackageDescription, Assembly-CSharp", + "weightedDecisions": [ + { + "$type": "TA.AI.WeightedDecisionDescription, Assembly-CSharp", + "decision": "Definition:DecisionBreakFreeConditionOathOfAncientsNaturesWrath:25d7ad8d-27b8-5882-9bfb-acc37798812f", + "weight": 1.0, + "cooldown": 0, + "dynamicCooldown": false + } + ] + }, + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": true, + "title": "Feature/&NoContentTitle", + "description": "Feature/&NoContentTitle", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "c2d43b3b-7204-56df-a270-89202bf8ec7b", + "contentPack": 9999, + "name": "BreakFreeAbilityCheckConditionOathOfAncientsNaturesWrath" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/BreakFreeAbilityCheckConditionWrathfulSmite.json b/Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/BreakFreeAbilityCheckConditionWrathfulSmite.json new file mode 100644 index 0000000000..0312067378 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/BreakFreeAbilityCheckConditionWrathfulSmite.json @@ -0,0 +1,43 @@ +{ + "$type": "TA.AI.DecisionPackageDefinition, Assembly-CSharp", + "dungeonMakerPresence": false, + "package": { + "$type": "TA.AI.DecisionPackageDescription, Assembly-CSharp", + "weightedDecisions": [ + { + "$type": "TA.AI.WeightedDecisionDescription, Assembly-CSharp", + "decision": "Definition:DecisionBreakFreeConditionWrathfulSmite:1c32e557-4a88-580f-8d11-54d731c4bb79", + "weight": 1.0, + "cooldown": 0, + "dynamicCooldown": false + } + ] + }, + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": true, + "title": "Feature/&NoContentTitle", + "description": "Feature/&NoContentTitle", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "64259f64-63c1-54cb-8683-3cfb5b1b78a0", + "contentPack": 9999, + "name": "BreakFreeAbilityCheckConditionWrathfulSmite" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerFightingStyleTorchbearer.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerFightingStyleTorchbearer.json index 7b03511480..5a8d5304de 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerFightingStyleTorchbearer.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerFightingStyleTorchbearer.json @@ -33,7 +33,7 @@ "targetSide": "Enemy", "durationType": "Minute", "durationParameter": 1, - "endOfEffect": "StartOfTurn", + "endOfEffect": "EndOfTurn", "hasSavingThrow": true, "disableSavingThrowOnAllies": false, "savingThrowAbility": "Dexterity", diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerGrayDwarfInvisibility.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerGrayDwarfInvisibility.json index 1d3f3bd17d..787fe9b505 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerGrayDwarfInvisibility.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerGrayDwarfInvisibility.json @@ -33,7 +33,7 @@ "targetSide": "Ally", "durationType": "Minute", "durationParameter": 1, - "endOfEffect": "StartOfTurn", + "endOfEffect": "EndOfTurn", "hasSavingThrow": false, "disableSavingThrowOnAllies": false, "savingThrowAbility": "Dexterity", diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerOathOfAncientsNaturesWrath.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerOathOfAncientsNaturesWrath.json index e87d80ad4d..5602f0b451 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerOathOfAncientsNaturesWrath.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerOathOfAncientsNaturesWrath.json @@ -31,8 +31,8 @@ "targetConditionName": "", "targetConditionAsset": null, "targetSide": "Enemy", - "durationType": "Round", - "durationParameter": 10, + "durationType": "Minute", + "durationParameter": 1, "endOfEffect": "EndOfTurn", "hasSavingThrow": true, "disableSavingThrowOnAllies": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerPathOfTheLightIlluminatingStrike.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerPathOfTheLightIlluminatingStrike.json index 10dbb70a78..9fe6f695c5 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerPathOfTheLightIlluminatingStrike.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerPathOfTheLightIlluminatingStrike.json @@ -33,7 +33,7 @@ "targetSide": "Enemy", "durationType": "Minute", "durationParameter": 1, - "endOfEffect": "StartOfTurn", + "endOfEffect": "EndOfTurn", "hasSavingThrow": false, "disableSavingThrowOnAllies": false, "savingThrowAbility": "Dexterity", diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerRavenScionHeartSeekingShot.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerRavenScionHeartSeekingShot.json index 1781c6de82..59249158ed 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerRavenScionHeartSeekingShot.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerRavenScionHeartSeekingShot.json @@ -33,7 +33,7 @@ "targetSide": "Ally", "durationType": "Minute", "durationParameter": 1, - "endOfEffect": "StartOfTurn", + "endOfEffect": "EndOfTurn", "hasSavingThrow": false, "disableSavingThrowOnAllies": false, "savingThrowAbility": "Dexterity", diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpell.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpell.json index fe306d2457..1a61dea8c1 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpell.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpell.json @@ -48,8 +48,8 @@ "targetConditionName": "", "targetConditionAsset": null, "targetSide": "Enemy", - "durationType": "Round", - "durationParameter": 0, + "durationType": "Instantaneous", + "durationParameter": 1, "endOfEffect": "EndOfTurn", "hasSavingThrow": true, "disableSavingThrowOnAllies": false, @@ -96,7 +96,7 @@ "alteredDuration": "None" }, "speedType": "Instant", - "speedParameter": -1.0, + "speedParameter": 10.0, "offsetImpactTimeBasedOnDistance": false, "offsetImpactTimeBasedOnDistanceFactor": 0.1, "offsetImpactTimePerTarget": 0.0, @@ -104,7 +104,7 @@ "$type": "EffectParticleParameters, Assembly-CSharp", "casterParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "623efe782aaa3a84fbd91053c5fd1b39", + "m_AssetGUID": "81560ac3813217d4d9fd281d5e73c234", "m_SubObjectName": "", "m_SubObjectType": "" }, @@ -128,7 +128,7 @@ }, "effectParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "19f4a5c35fbee93479226bd045a5ec1f", + "m_AssetGUID": "", "m_SubObjectName": "", "m_SubObjectType": "" }, @@ -244,13 +244,13 @@ }, "conditionParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "499a6891e29b20d44a372c4728e9d26b", + "m_AssetGUID": "", "m_SubObjectName": "", "m_SubObjectType": "" }, "conditionEndParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "5e46102198fad554587b73639eee3b36", + "m_AssetGUID": "", "m_SubObjectName": "", "m_SubObjectType": "" }, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpellApproach.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpellApproach.json index 3994ac1b93..f2c255a8c0 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpellApproach.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpellApproach.json @@ -43,7 +43,7 @@ "targetConditionName": "", "targetConditionAsset": null, "targetSide": "Enemy", - "durationType": "Instantaneous", + "durationType": "Round", "durationParameter": 1, "endOfEffect": "EndOfTurn", "hasSavingThrow": true, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpellFlee.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpellFlee.json index 12754018a8..ce836e7268 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpellFlee.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpellFlee.json @@ -45,7 +45,7 @@ "targetSide": "Enemy", "durationType": "Round", "durationParameter": 1, - "endOfEffect": "StartOfTurn", + "endOfEffect": "EndOfTurn", "hasSavingThrow": true, "disableSavingThrowOnAllies": false, "savingThrowAbility": "Wisdom", diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpellGrovel.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpellGrovel.json index d7b15456bd..db20ed5203 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpellGrovel.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpellGrovel.json @@ -43,7 +43,7 @@ "targetConditionName": "", "targetConditionAsset": null, "targetSide": "Enemy", - "durationType": "Instantaneous", + "durationType": "Round", "durationParameter": 1, "endOfEffect": "EndOfTurn", "hasSavingThrow": true, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpellHalt.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpellHalt.json index d14c0fc456..48385bbb75 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpellHalt.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpellHalt.json @@ -45,7 +45,7 @@ "targetSide": "Enemy", "durationType": "Round", "durationParameter": 1, - "endOfEffect": "StartOfTurn", + "endOfEffect": "EndOfTurn", "hasSavingThrow": true, "disableSavingThrowOnAllies": false, "savingThrowAbility": "Wisdom", diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/Dawn.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/Dawn.json index fbe5295baa..60e0793053 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/Dawn.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/Dawn.json @@ -45,7 +45,7 @@ "targetSide": "All", "durationType": "Minute", "durationParameter": 1, - "endOfEffect": "StartOfTurn", + "endOfEffect": "EndOfTurn", "hasSavingThrow": true, "disableSavingThrowOnAllies": false, "savingThrowAbility": "Constitution", diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/ForestGuardian.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/ForestGuardian.json index a41ec538c1..78e1c861a9 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/ForestGuardian.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/ForestGuardian.json @@ -48,7 +48,7 @@ "targetSide": "Ally", "durationType": "Minute", "durationParameter": 1, - "endOfEffect": "EndOfSourceTurn", + "endOfEffect": "EndOfTurn", "hasSavingThrow": false, "disableSavingThrowOnAllies": false, "savingThrowAbility": "Dexterity", diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/Incineration.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/Incineration.json index 4423ed7119..e36a2d97fa 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/Incineration.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/Incineration.json @@ -45,7 +45,7 @@ "targetSide": "Enemy", "durationType": "Minute", "durationParameter": 1, - "endOfEffect": "StartOfTurn", + "endOfEffect": "EndOfTurn", "hasSavingThrow": true, "disableSavingThrowOnAllies": false, "savingThrowAbility": "Dexterity", diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/VileBrew.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/VileBrew.json index 525fffc4d5..791a51a73e 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/VileBrew.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/VileBrew.json @@ -45,7 +45,7 @@ "targetSide": "All", "durationType": "Minute", "durationParameter": 1, - "endOfEffect": "StartOfTurn", + "endOfEffect": "EndOfTurn", "hasSavingThrow": true, "disableSavingThrowOnAllies": false, "savingThrowAbility": "Dexterity", From a3075e4bb1babbf5571ea28ffb8da490d244e12f Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sun, 8 Sep 2024 15:56:53 -0700 Subject: [PATCH 080/212] consolidate EnsureFolderExists to protect CreateDirectory under different OSes --- .../Api/ModKit/Utility/ModSettings.cs | 4 ++-- SolastaUnfinishedBusiness/ChangelogHistory.txt | 2 -- .../DataMiner/BlueprintExporter.cs | 12 ++---------- SolastaUnfinishedBusiness/Main.cs | 10 +++++++++- .../Models/DiagnosticsContext.cs | 12 ++---------- .../Models/DmProEditorContext.cs | 2 +- .../Models/DocumentationContext.cs | 4 ++-- SolastaUnfinishedBusiness/Models/PortraitsContext.cs | 8 ++++---- .../Models/SaveByLocationContext.cs | 6 +++--- 9 files changed, 25 insertions(+), 35 deletions(-) diff --git a/SolastaUnfinishedBusiness/Api/ModKit/Utility/ModSettings.cs b/SolastaUnfinishedBusiness/Api/ModKit/Utility/ModSettings.cs index 571daca0f7..4f70ba5226 100644 --- a/SolastaUnfinishedBusiness/Api/ModKit/Utility/ModSettings.cs +++ b/SolastaUnfinishedBusiness/Api/ModKit/Utility/ModSettings.cs @@ -16,7 +16,7 @@ internal static class ModSettings public static void SaveSettings(this ModEntry modEntry, string fileName, T settings) { var userConfigFolder = modEntry.Path + "UserSettings"; - Directory.CreateDirectory(userConfigFolder); + Main.EnsureFolderExists(userConfigFolder); var userPath = $"{userConfigFolder}{Path.DirectorySeparatorChar}{fileName}"; File.WriteAllText(userPath, JsonConvert.SerializeObject(settings, Formatting.Indented)); } @@ -26,7 +26,7 @@ public static void LoadSettings(this ModEntry modEntry, string fileName, ref { var assembly = Assembly.GetExecutingAssembly(); var userConfigFolder = modEntry.Path + "UserSettings"; - Directory.CreateDirectory(userConfigFolder); + Main.EnsureFolderExists(userConfigFolder); var userPath = $"{userConfigFolder}{Path.DirectorySeparatorChar}{fileName}"; try { diff --git a/SolastaUnfinishedBusiness/ChangelogHistory.txt b/SolastaUnfinishedBusiness/ChangelogHistory.txt index e452247d37..eb90ac2c36 100644 --- a/SolastaUnfinishedBusiness/ChangelogHistory.txt +++ b/SolastaUnfinishedBusiness/ChangelogHistory.txt @@ -5,7 +5,6 @@ - fixed Barbarian Sundering Blow interaction with Call Lightning, and other proxy like powers - fixed Bardic Inspiration, Indomitable Resistances, and Legendary Resistances saving throw logic - fixed Bend Luck, Flash of Genius, Inspiring Protection, Shield Master, and Weal/Woe not consuming reaction -- fixed countered, and execution failed checks on custom behaviors logic - fixed Dwarven Fortitude, and Magical Guidance incorrectly consuming a reaction - fixed Exploiter feat not checking for reactions from 2nd target onwards - fixed Lucky, and Mage Slayer feats double consumption @@ -15,7 +14,6 @@ - fixed save by location/campaign setting on multiplayer load in overland map - improved ability checks to also allow reactions on success [Circle of the Cosmos woe] - improved Conversion Slots, and Shorthand versatilities to react on ability checks -- improved game log to avoid voxelization warning messages to flood the same [DM overlay trick] - improved Maneuvering Attack, and Martial Warlord strategic repositioning to use a run stance - improved mod UI to ensure all settings required to be in sync on MP sessions are now under Gameplay - improved saving roll reaction modal descriptions [Circle of the Cosmos, Sorcerer Wild Magic, etc.] diff --git a/SolastaUnfinishedBusiness/DataMiner/BlueprintExporter.cs b/SolastaUnfinishedBusiness/DataMiner/BlueprintExporter.cs index a60faff1fe..df8702af66 100644 --- a/SolastaUnfinishedBusiness/DataMiner/BlueprintExporter.cs +++ b/SolastaUnfinishedBusiness/DataMiner/BlueprintExporter.cs @@ -33,14 +33,6 @@ private static BlueprintExporter Exporter } } - private static void EnsureFolderExists(string path) - { - if (!Directory.Exists(path)) - { - Directory.CreateDirectory(path); - } - } - private static void SetExport(int exportId, Coroutine coroutine, float percentageComplete) { CurrentExports[exportId].Coroutine = coroutine; @@ -93,7 +85,7 @@ private static IEnumerator ExportMany( yield return null; - EnsureFolderExists(path); + Main.EnsureFolderExists(path); // Types.txt using (var sw = new StreamWriter($"{path}/Types.txt")) @@ -135,7 +127,7 @@ private static IEnumerator ExportMany( var folderName = $"{path}/{definitionType}"; var fullname = $"{folderName}/{filename}"; - EnsureFolderExists(folderName); + Main.EnsureFolderExists(folderName); if (fullname.Length > MaxPathLength) { diff --git a/SolastaUnfinishedBusiness/Main.cs b/SolastaUnfinishedBusiness/Main.cs index 5515704452..d5ae0cf0a0 100644 --- a/SolastaUnfinishedBusiness/Main.cs +++ b/SolastaUnfinishedBusiness/Main.cs @@ -61,6 +61,14 @@ internal static void Info(string msg) ModEntry.Logger.Log(msg); } + internal static void EnsureFolderExists(string path) + { + if (!Directory.Exists(path)) + { + Directory.CreateDirectory(path); + } + } + [UsedImplicitly] internal static bool Load([NotNull] UnityModManager.ModEntry modEntry) { @@ -123,7 +131,7 @@ internal static bool Load([NotNull] UnityModManager.ModEntry modEntry) internal static void LoadSettingFilenames() { - Directory.CreateDirectory(SettingsFolder); + EnsureFolderExists(SettingsFolder); SettingsFiles = Directory.GetFiles(SettingsFolder) .Where(x => x.EndsWith(".xml")) diff --git a/SolastaUnfinishedBusiness/Models/DiagnosticsContext.cs b/SolastaUnfinishedBusiness/Models/DiagnosticsContext.cs index c5546aafee..0acf8af6bc 100644 --- a/SolastaUnfinishedBusiness/Models/DiagnosticsContext.cs +++ b/SolastaUnfinishedBusiness/Models/DiagnosticsContext.cs @@ -138,19 +138,11 @@ private static string GetDiagnosticsFolder() { var path = Path.Combine(ProjectFolder ?? GameFolder, "Diagnostics"); - EnsureFolderExists(path); + Main.EnsureFolderExists(path); return path; } - private static void EnsureFolderExists([NotNull] string path) - { - if (!Directory.Exists(path)) - { - Directory.CreateDirectory(path); - } - } - private const string OfficialBpFolder = "OfficialBlueprints"; private const string UnfinishedBusinessBpFolder = "UnfinishedBusinessBlueprints"; @@ -199,7 +191,7 @@ private static void CreateDefinitionDiagnostics([CanBeNull] BaseDefinition[] bas return; } - EnsureFolderExists(DiagnosticsFolder); + Main.EnsureFolderExists(DiagnosticsFolder); ///////////////////////////////////////////////////////////////////////////////////////////////// // Write all definitions with no GUI presentation to file diff --git a/SolastaUnfinishedBusiness/Models/DmProEditorContext.cs b/SolastaUnfinishedBusiness/Models/DmProEditorContext.cs index 112432c2d3..9cd659338d 100644 --- a/SolastaUnfinishedBusiness/Models/DmProEditorContext.cs +++ b/SolastaUnfinishedBusiness/Models/DmProEditorContext.cs @@ -38,7 +38,7 @@ internal static void BackupAndDelete([NotNull] string path, [NotNull] UserConten var backupDirectory = Path.Combine(Main.ModFolder, BackupFolder); - Directory.CreateDirectory(backupDirectory); + Main.EnsureFolderExists(backupDirectory); var title = userContent.Title; var compliantTitle = IOHelper.GetOsCompliantFilename(title); diff --git a/SolastaUnfinishedBusiness/Models/DocumentationContext.cs b/SolastaUnfinishedBusiness/Models/DocumentationContext.cs index c0ffd1ae99..b89f96cb5b 100644 --- a/SolastaUnfinishedBusiness/Models/DocumentationContext.cs +++ b/SolastaUnfinishedBusiness/Models/DocumentationContext.cs @@ -16,8 +16,8 @@ internal static class DocumentationContext { internal static void DumpDocumentation() { - Directory.CreateDirectory($"{Main.ModFolder}/Documentation"); - Directory.CreateDirectory($"{Main.ModFolder}/Documentation/Monsters"); + Main.EnsureFolderExists($"{Main.ModFolder}/Documentation"); + Main.EnsureFolderExists($"{Main.ModFolder}/Documentation/Monsters"); foreach (var characterFamilyDefinition in DatabaseRepository.GetDatabase() .Where(x => diff --git a/SolastaUnfinishedBusiness/Models/PortraitsContext.cs b/SolastaUnfinishedBusiness/Models/PortraitsContext.cs index 24dfa59754..a5d3c183a1 100644 --- a/SolastaUnfinishedBusiness/Models/PortraitsContext.cs +++ b/SolastaUnfinishedBusiness/Models/PortraitsContext.cs @@ -19,10 +19,10 @@ public static class PortraitsContext internal static void Load() { - Directory.CreateDirectory(PortraitsFolder); - Directory.CreateDirectory(PreGenFolder); - Directory.CreateDirectory(PersonalFolder); - Directory.CreateDirectory(MonstersFolder); + Main.EnsureFolderExists(PortraitsFolder); + Main.EnsureFolderExists(PreGenFolder); + Main.EnsureFolderExists(PersonalFolder); + Main.EnsureFolderExists(MonstersFolder); } internal static bool HasCustomPortrait(RulesetCharacter rulesetCharacter) diff --git a/SolastaUnfinishedBusiness/Models/SaveByLocationContext.cs b/SolastaUnfinishedBusiness/Models/SaveByLocationContext.cs index 9fcd4f53a7..0e7e27da44 100644 --- a/SolastaUnfinishedBusiness/Models/SaveByLocationContext.cs +++ b/SolastaUnfinishedBusiness/Models/SaveByLocationContext.cs @@ -166,9 +166,9 @@ internal static void LateLoad() } // Ensure folders exist - Directory.CreateDirectory(OfficialSaveGameDirectory); - Directory.CreateDirectory(LocationSaveGameDirectory); - Directory.CreateDirectory(CampaignSaveGameDirectory); + Main.EnsureFolderExists(OfficialSaveGameDirectory); + Main.EnsureFolderExists(LocationSaveGameDirectory); + Main.EnsureFolderExists(CampaignSaveGameDirectory); // Find the most recently touched save file and select the correct location/campaign for that save var (path, locationType) = GetMostRecent(); From 04dd0d0e8c8fc8d25ce3df24b755ff42947d20c5 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sun, 8 Sep 2024 16:41:08 -0700 Subject: [PATCH 081/212] roll back save by location new patch --- SolastaUnfinishedBusiness/ChangelogHistory.txt | 1 - .../TacticalAdventuresApplicationPatcher.cs | 14 -------------- 2 files changed, 15 deletions(-) diff --git a/SolastaUnfinishedBusiness/ChangelogHistory.txt b/SolastaUnfinishedBusiness/ChangelogHistory.txt index eb90ac2c36..3cf9459d19 100644 --- a/SolastaUnfinishedBusiness/ChangelogHistory.txt +++ b/SolastaUnfinishedBusiness/ChangelogHistory.txt @@ -11,7 +11,6 @@ - fixed Martial Commander coordinated defense to require an attack first [VANILLA] - fixed Party Editor to register/unregister powers from feats - fixed Path of the Wild Magic retribution, and Patron Archfey misty step to only react against enemy effects -- fixed save by location/campaign setting on multiplayer load in overland map - improved ability checks to also allow reactions on success [Circle of the Cosmos woe] - improved Conversion Slots, and Shorthand versatilities to react on ability checks - improved Maneuvering Attack, and Martial Warlord strategic repositioning to use a run stance diff --git a/SolastaUnfinishedBusiness/Patches/TacticalAdventuresApplicationPatcher.cs b/SolastaUnfinishedBusiness/Patches/TacticalAdventuresApplicationPatcher.cs index e3a2698b7b..eb6ab30f2a 100644 --- a/SolastaUnfinishedBusiness/Patches/TacticalAdventuresApplicationPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/TacticalAdventuresApplicationPatcher.cs @@ -46,18 +46,4 @@ public static bool Prefix(ref string __result) return EnableSaveByLocation(ref __result); } } - - [HarmonyPatch(typeof(TacticalAdventuresApplication), - nameof(TacticalAdventuresApplication.MultiplayerFilesDirectory), - MethodType.Getter)] - [SuppressMessage("Minor Code Smell", "S101:Types should be named in PascalCase", Justification = "Patch")] - [UsedImplicitly] - public static class MultiplayerFilesDirectory_Getter_Patch - { - [UsedImplicitly] - public static bool Prefix(ref string __result) - { - return EnableSaveByLocation(ref __result); - } - } } From 7988f4c6ba46a892acb67c8efb33f063b8c61caa Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sun, 8 Sep 2024 17:42:43 -0700 Subject: [PATCH 082/212] prefer SetEffectForms, remove superfluous SetTargetFiltering, consolidate SetSpeed and SetupImpactOffsets into SetSpeedAndImpactOffset --- .../ConditionBlindedByBlindingSmite.json | 2 +- .../PowerChaosBoltLeap.json | 4 +-- .../PowerDomainSmithAdamantBenediction.json | 4 +-- ...tionArtilleristEldritchCannonDetonate.json | 4 +-- ...ationArtilleristEldritchCannonDismiss.json | 4 +-- .../PowerOathOfAncientsTurnFaithless.json | 4 +-- .../PowerRangerHellWalkerFirebolt.json | 4 +-- .../PowerSoulBladeHex.json | 4 +-- .../PowerSoulBladeMasterHex.json | 4 +-- .../SpellDefinition/ChaosBolt.json | 4 +-- .../SpellDefinition/ChromaticOrb.json | 10 +++---- .../ChromaticOrbDamageAcid.json | 4 +-- .../ChromaticOrbDamageCold.json | 4 +-- .../ChromaticOrbDamageFire.json | 4 +-- .../ChromaticOrbDamageLightning.json | 4 +-- .../ChromaticOrbDamagePoison.json | 4 +-- .../ChromaticOrbDamageThunder.json | 4 +-- .../SpellDefinition/CrusadersMantle.json | 4 +-- .../SpellDefinition/EnduringSting.json | 4 +-- .../SpellDefinition/RadiantMotes.json | 6 ++--- .../Builders/EffectDescriptionBuilder.cs | 25 +++++++++--------- SolastaUnfinishedBusiness/Feats/OtherFeats.cs | 5 ---- SolastaUnfinishedBusiness/Races/Malakh.cs | 2 +- .../Spells/SpellBuildersCantrips.cs | 1 - .../Spells/SpellBuildersLevel01.cs | 26 ++++++------------- .../Spells/SpellBuildersLevel02.cs | 7 +++-- .../Spells/SpellBuildersLevel03.cs | 9 ++----- .../Spells/SpellBuildersLevel05.cs | 2 +- .../Subclasses/DomainSmith.cs | 5 ++-- .../Subclasses/InnovationAlchemy.cs | 6 ++--- .../Subclasses/InnovationArmor.cs | 12 ++++----- .../Subclasses/InnovationArtillerist.cs | 4 +-- .../Subclasses/MartialRoyalKnight.cs | 1 - .../Subclasses/OathOfAncients.cs | 5 ++-- .../Subclasses/PathOfTheBeast.cs | 2 +- .../Subclasses/PathOfTheLight.cs | 4 +-- .../Subclasses/PatronSoulBlade.cs | 3 +-- .../Subclasses/RangerHellWalker.cs | 1 - .../Subclasses/WizardGraviturgist.cs | 2 +- 39 files changed, 87 insertions(+), 121 deletions(-) diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionBlindedByBlindingSmite.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionBlindedByBlindingSmite.json index 625e46e0bb..1f0bceb6cf 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionBlindedByBlindingSmite.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionBlindedByBlindingSmite.json @@ -14,7 +14,7 @@ "durationParameterDie": "D1", "durationParameter": 1, "forceTurnOccurence": false, - "turnOccurence": "EndOfTurn", + "turnOccurence": "EndOfTurn", "specialInterruptions": [], "interruptionRequiresSavingThrow": false, "interruptionSavingThrowComputationMethod": "SaveOverride", diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerChaosBoltLeap.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerChaosBoltLeap.json index 5f8c867ffa..c118b59fb6 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerChaosBoltLeap.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerChaosBoltLeap.json @@ -25,8 +25,8 @@ "recurrentEffect": "No", "retargetAfterDeath": false, "retargetActionType": "Bonus", - "poolFilterDiceNumber": 0, - "poolFilterDieType": "D1", + "poolFilterDiceNumber": 5, + "poolFilterDieType": "D8", "trapRangeType": "Triggerer", "targetConditionName": "", "targetConditionAsset": null, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerDomainSmithAdamantBenediction.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerDomainSmithAdamantBenediction.json index f43c72d6a9..1dc91efb08 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerDomainSmithAdamantBenediction.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerDomainSmithAdamantBenediction.json @@ -25,8 +25,8 @@ "recurrentEffect": "No", "retargetAfterDeath": false, "retargetActionType": "Bonus", - "poolFilterDiceNumber": 0, - "poolFilterDieType": "D1", + "poolFilterDiceNumber": 5, + "poolFilterDieType": "D8", "trapRangeType": "Triggerer", "targetConditionName": "", "targetConditionAsset": null, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerInnovationArtilleristEldritchCannonDetonate.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerInnovationArtilleristEldritchCannonDetonate.json index 018547265e..36ed902e99 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerInnovationArtilleristEldritchCannonDetonate.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerInnovationArtilleristEldritchCannonDetonate.json @@ -25,8 +25,8 @@ "recurrentEffect": "No", "retargetAfterDeath": false, "retargetActionType": "Bonus", - "poolFilterDiceNumber": 0, - "poolFilterDieType": "D1", + "poolFilterDiceNumber": 5, + "poolFilterDieType": "D8", "trapRangeType": "Triggerer", "targetConditionName": "", "targetConditionAsset": null, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerInnovationArtilleristEldritchCannonDismiss.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerInnovationArtilleristEldritchCannonDismiss.json index fc82de93a8..1678cb8556 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerInnovationArtilleristEldritchCannonDismiss.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerInnovationArtilleristEldritchCannonDismiss.json @@ -25,8 +25,8 @@ "recurrentEffect": "No", "retargetAfterDeath": false, "retargetActionType": "Bonus", - "poolFilterDiceNumber": 0, - "poolFilterDieType": "D1", + "poolFilterDiceNumber": 5, + "poolFilterDieType": "D8", "trapRangeType": "Triggerer", "targetConditionName": "", "targetConditionAsset": null, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerOathOfAncientsTurnFaithless.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerOathOfAncientsTurnFaithless.json index 9becc1ce1b..f88fb173af 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerOathOfAncientsTurnFaithless.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerOathOfAncientsTurnFaithless.json @@ -25,8 +25,8 @@ "recurrentEffect": "No", "retargetAfterDeath": false, "retargetActionType": "Bonus", - "poolFilterDiceNumber": 0, - "poolFilterDieType": "D1", + "poolFilterDiceNumber": 5, + "poolFilterDieType": "D8", "trapRangeType": "Triggerer", "targetConditionName": "", "targetConditionAsset": null, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerRangerHellWalkerFirebolt.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerRangerHellWalkerFirebolt.json index 466802c6d1..5cc71ec108 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerRangerHellWalkerFirebolt.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerRangerHellWalkerFirebolt.json @@ -25,8 +25,8 @@ "recurrentEffect": "No", "retargetAfterDeath": false, "retargetActionType": "Bonus", - "poolFilterDiceNumber": 0, - "poolFilterDieType": "D1", + "poolFilterDiceNumber": 5, + "poolFilterDieType": "D8", "trapRangeType": "Triggerer", "targetConditionName": "", "targetConditionAsset": null, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerSoulBladeHex.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerSoulBladeHex.json index b21eb15d0e..f76f4216f5 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerSoulBladeHex.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerSoulBladeHex.json @@ -25,8 +25,8 @@ "recurrentEffect": "No", "retargetAfterDeath": false, "retargetActionType": "Bonus", - "poolFilterDiceNumber": 0, - "poolFilterDieType": "D1", + "poolFilterDiceNumber": 5, + "poolFilterDieType": "D8", "trapRangeType": "Triggerer", "targetConditionName": "", "targetConditionAsset": null, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerSoulBladeMasterHex.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerSoulBladeMasterHex.json index 7cf475014f..824df54536 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerSoulBladeMasterHex.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerSoulBladeMasterHex.json @@ -25,8 +25,8 @@ "recurrentEffect": "No", "retargetAfterDeath": true, "retargetActionType": "Bonus", - "poolFilterDiceNumber": 0, - "poolFilterDieType": "D1", + "poolFilterDiceNumber": 5, + "poolFilterDieType": "D8", "trapRangeType": "Triggerer", "targetConditionName": "", "targetConditionAsset": null, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/ChaosBolt.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/ChaosBolt.json index d6700c4c76..607002b358 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/ChaosBolt.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/ChaosBolt.json @@ -37,8 +37,8 @@ "recurrentEffect": "No", "retargetAfterDeath": false, "retargetActionType": "Bonus", - "poolFilterDiceNumber": 0, - "poolFilterDieType": "D1", + "poolFilterDiceNumber": 5, + "poolFilterDieType": "D8", "trapRangeType": "Triggerer", "targetConditionName": "", "targetConditionAsset": null, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/ChromaticOrb.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/ChromaticOrb.json index fa2b9b688b..2974b56f8c 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/ChromaticOrb.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/ChromaticOrb.json @@ -44,8 +44,8 @@ "recurrentEffect": "No", "retargetAfterDeath": false, "retargetActionType": "Bonus", - "poolFilterDiceNumber": 0, - "poolFilterDieType": "D1", + "poolFilterDiceNumber": 5, + "poolFilterDieType": "D8", "trapRangeType": "Triggerer", "targetConditionName": "", "targetConditionAsset": null, @@ -97,11 +97,11 @@ "additionalWeaponDie": 0, "alteredDuration": "None" }, - "speedType": "CellsPerSeconds", - "speedParameter": 8.5, + "speedType": "Instant", + "speedParameter": 10.0, "offsetImpactTimeBasedOnDistance": false, "offsetImpactTimeBasedOnDistanceFactor": 0.1, - "offsetImpactTimePerTarget": 0.1, + "offsetImpactTimePerTarget": 0.0, "effectParticleParameters": { "$type": "EffectParticleParameters, Assembly-CSharp", "casterParticleReference": { diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/ChromaticOrbDamageAcid.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/ChromaticOrbDamageAcid.json index 0c761ad755..dafcdd4ecb 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/ChromaticOrbDamageAcid.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/ChromaticOrbDamageAcid.json @@ -37,8 +37,8 @@ "recurrentEffect": "No", "retargetAfterDeath": false, "retargetActionType": "Bonus", - "poolFilterDiceNumber": 0, - "poolFilterDieType": "D1", + "poolFilterDiceNumber": 5, + "poolFilterDieType": "D8", "trapRangeType": "Triggerer", "targetConditionName": "", "targetConditionAsset": null, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/ChromaticOrbDamageCold.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/ChromaticOrbDamageCold.json index c27a5bd50e..3dc9546022 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/ChromaticOrbDamageCold.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/ChromaticOrbDamageCold.json @@ -37,8 +37,8 @@ "recurrentEffect": "No", "retargetAfterDeath": false, "retargetActionType": "Bonus", - "poolFilterDiceNumber": 0, - "poolFilterDieType": "D1", + "poolFilterDiceNumber": 5, + "poolFilterDieType": "D8", "trapRangeType": "Triggerer", "targetConditionName": "", "targetConditionAsset": null, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/ChromaticOrbDamageFire.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/ChromaticOrbDamageFire.json index 893e8e45df..16783f01d1 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/ChromaticOrbDamageFire.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/ChromaticOrbDamageFire.json @@ -37,8 +37,8 @@ "recurrentEffect": "No", "retargetAfterDeath": false, "retargetActionType": "Bonus", - "poolFilterDiceNumber": 0, - "poolFilterDieType": "D1", + "poolFilterDiceNumber": 5, + "poolFilterDieType": "D8", "trapRangeType": "Triggerer", "targetConditionName": "", "targetConditionAsset": null, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/ChromaticOrbDamageLightning.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/ChromaticOrbDamageLightning.json index fa51b70565..5db8c61409 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/ChromaticOrbDamageLightning.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/ChromaticOrbDamageLightning.json @@ -37,8 +37,8 @@ "recurrentEffect": "No", "retargetAfterDeath": false, "retargetActionType": "Bonus", - "poolFilterDiceNumber": 0, - "poolFilterDieType": "D1", + "poolFilterDiceNumber": 5, + "poolFilterDieType": "D8", "trapRangeType": "Triggerer", "targetConditionName": "", "targetConditionAsset": null, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/ChromaticOrbDamagePoison.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/ChromaticOrbDamagePoison.json index 514f3ac1be..240f37761f 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/ChromaticOrbDamagePoison.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/ChromaticOrbDamagePoison.json @@ -37,8 +37,8 @@ "recurrentEffect": "No", "retargetAfterDeath": false, "retargetActionType": "Bonus", - "poolFilterDiceNumber": 0, - "poolFilterDieType": "D1", + "poolFilterDiceNumber": 5, + "poolFilterDieType": "D8", "trapRangeType": "Triggerer", "targetConditionName": "", "targetConditionAsset": null, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/ChromaticOrbDamageThunder.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/ChromaticOrbDamageThunder.json index d882b2040e..1dffa258de 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/ChromaticOrbDamageThunder.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/ChromaticOrbDamageThunder.json @@ -37,8 +37,8 @@ "recurrentEffect": "No", "retargetAfterDeath": false, "retargetActionType": "Bonus", - "poolFilterDiceNumber": 0, - "poolFilterDieType": "D1", + "poolFilterDiceNumber": 5, + "poolFilterDieType": "D8", "trapRangeType": "Triggerer", "targetConditionName": "", "targetConditionAsset": null, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CrusadersMantle.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CrusadersMantle.json index 7d9ea1810e..7efe7c1e2d 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CrusadersMantle.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CrusadersMantle.json @@ -37,8 +37,8 @@ "recurrentEffect": "OnActivation, OnTurnStart, OnEnter", "retargetAfterDeath": false, "retargetActionType": "Bonus", - "poolFilterDiceNumber": 0, - "poolFilterDieType": "D1", + "poolFilterDiceNumber": 5, + "poolFilterDieType": "D8", "trapRangeType": "Triggerer", "targetConditionName": "", "targetConditionAsset": null, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/EnduringSting.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/EnduringSting.json index dfbb2c3a8c..9b5baf4347 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/EnduringSting.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/EnduringSting.json @@ -37,8 +37,8 @@ "recurrentEffect": "No", "retargetAfterDeath": false, "retargetActionType": "Bonus", - "poolFilterDiceNumber": 0, - "poolFilterDieType": "D1", + "poolFilterDiceNumber": 5, + "poolFilterDieType": "D8", "trapRangeType": "Triggerer", "targetConditionName": "", "targetConditionAsset": null, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/RadiantMotes.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/RadiantMotes.json index 41451a07af..b3d40b190c 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/RadiantMotes.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/RadiantMotes.json @@ -29,7 +29,7 @@ "targetExcludeCaster": false, "canBePlacedOnCharacter": true, "affectOnlyGround": false, - "targetFilteringMethod": "AllCharacterAndGadgets", + "targetFilteringMethod": "CharacterOnly", "targetFilteringTag": "No", "requiresVisibilityForPosition": true, "inviteOptionalAlly": false, @@ -37,8 +37,8 @@ "recurrentEffect": "No", "retargetAfterDeath": false, "retargetActionType": "Bonus", - "poolFilterDiceNumber": 0, - "poolFilterDieType": "D1", + "poolFilterDiceNumber": 5, + "poolFilterDieType": "D8", "trapRangeType": "Triggerer", "targetConditionName": "", "targetConditionAsset": null, diff --git a/SolastaUnfinishedBusiness/Builders/EffectDescriptionBuilder.cs b/SolastaUnfinishedBusiness/Builders/EffectDescriptionBuilder.cs index 85748d0620..ed053fae1b 100644 --- a/SolastaUnfinishedBusiness/Builders/EffectDescriptionBuilder.cs +++ b/SolastaUnfinishedBusiness/Builders/EffectDescriptionBuilder.cs @@ -211,6 +211,7 @@ internal EffectDescriptionBuilder ExcludeCaster() return this; } + #if false internal EffectDescriptionBuilder SetTargetFiltering( TargetFilteringMethod targetFilteringMethod, TargetFilteringTag targetFilteringTag = TargetFilteringTag.No, @@ -223,7 +224,8 @@ internal EffectDescriptionBuilder SetTargetFiltering( _effect.poolFilterDieType = poolFilterDieType; return this; } - +#endif + internal EffectDescriptionBuilder SetRecurrentEffect(RecurrentEffect recurrentEffect) { _effect.recurrentEffect = recurrentEffect; @@ -299,10 +301,18 @@ internal EffectDescriptionBuilder InviteOptionalAlly(bool value = true) } #endif - internal EffectDescriptionBuilder SetSpeed(SpeedType speedType, float speedParameter = 0f) + internal EffectDescriptionBuilder SetSpeedAndImpactOffset( + SpeedType speedType, + float speedParameter = 0f, + bool offsetImpactTimeBasedOnDistance = false, + float offsetImpactTimeBasedOnDistanceFactor = 0.1f, + float offsetImpactTimePerTarget = 0.0f) { _effect.speedType = speedType; _effect.speedParameter = speedParameter; + _effect.offsetImpactTimeBasedOnDistance = offsetImpactTimeBasedOnDistance; + _effect.offsetImpactTimeBasedOnDistanceFactor = offsetImpactTimeBasedOnDistanceFactor; + _effect.offsetImpactTimePerTarget = offsetImpactTimePerTarget; return this; } @@ -323,15 +333,4 @@ internal EffectDescriptionBuilder AddEffectForms(params EffectForm[] effectForms _effect.EffectForms.AddRange(effectForms); return this; } - - internal EffectDescriptionBuilder SetupImpactOffsets( - bool offsetImpactTimeBasedOnDistance = false, - float offsetImpactTimeBasedOnDistanceFactor = 0.1f, - float offsetImpactTimePerTarget = 0.0f) - { - _effect.offsetImpactTimeBasedOnDistance = offsetImpactTimeBasedOnDistance; - _effect.offsetImpactTimeBasedOnDistanceFactor = offsetImpactTimeBasedOnDistanceFactor; - _effect.offsetImpactTimePerTarget = offsetImpactTimePerTarget; - return this; - } } diff --git a/SolastaUnfinishedBusiness/Feats/OtherFeats.cs b/SolastaUnfinishedBusiness/Feats/OtherFeats.cs index eaf2b0acdc..40360f5690 100644 --- a/SolastaUnfinishedBusiness/Feats/OtherFeats.cs +++ b/SolastaUnfinishedBusiness/Feats/OtherFeats.cs @@ -1856,11 +1856,6 @@ private static FeatDefinition BuildHealer() EffectDescriptionBuilder .Create() .SetTargetingData(Side.Ally, RangeType.Touch, 0, TargetType.IndividualsUnique) - .SetTargetFiltering( - TargetFilteringMethod.CharacterOnly, - TargetFilteringTag.No, - 5, - DieType.D8) .SetRequiredCondition(ConditionDefinitions.ConditionDead) .SetEffectForms( EffectFormBuilder diff --git a/SolastaUnfinishedBusiness/Races/Malakh.cs b/SolastaUnfinishedBusiness/Races/Malakh.cs index 9f1d09d1bf..0519267d56 100644 --- a/SolastaUnfinishedBusiness/Races/Malakh.cs +++ b/SolastaUnfinishedBusiness/Races/Malakh.cs @@ -88,7 +88,7 @@ private static CharacterRaceDefinition BuildMalakh() EffectDescriptionBuilder .Create() .SetTargetingData(Side.Ally, RangeType.Touch, 0, TargetType.IndividualsUnique) - .AddEffectForms( + .SetEffectForms( EffectFormBuilder .Create() .SetHealingForm( diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs index 5c47bc5321..81f398b9b5 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs @@ -228,7 +228,6 @@ internal static SpellDefinition BuildEnduringSting() EffectDescriptionBuilder .Create() .SetTargetingData(Side.Enemy, RangeType.Distance, 6, TargetType.IndividualsUnique) - .SetTargetFiltering(TargetFilteringMethod.CharacterOnly) .SetEffectAdvancement(EffectIncrementMethod.CasterLevelTable, additionalDicePerIncrement: 1) .SetSavingThrowData(false, AttributeDefinitions.Constitution, false, EffectDifficultyClassComputation.SpellCastingFeature) diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs index 269485f8aa..4d99e9f403 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs @@ -112,13 +112,11 @@ internal static SpellDefinition BuildChromaticOrb() EffectDescriptionBuilder .Create() .SetTargetingData(Side.Enemy, RangeType.RangeHit, 12, TargetType.IndividualsUnique) - .SetTargetFiltering(TargetFilteringMethod.CharacterOnly) - .SetEffectForms(EffectFormBuilder.DamageForm(damageType, 3, DieType.D8)) .SetEffectAdvancement(EffectIncrementMethod.PerAdditionalSlotLevel, additionalDicePerIncrement: 1) + .SetEffectForms(EffectFormBuilder.DamageForm(damageType, 3, DieType.D8)) .SetParticleEffectParameters(effectDescription.EffectParticleParameters) - .SetSpeed(SpeedType.CellsPerSeconds, 8.5f) - .SetupImpactOffsets(offsetImpactTimePerTarget: 0.1f) + .SetSpeedAndImpactOffset(SpeedType.CellsPerSeconds, 8.5f, offsetImpactTimePerTarget: 0.1f) .Build()) .AddToDB(); @@ -134,16 +132,13 @@ internal static SpellDefinition BuildChromaticOrb() .SetSpecificMaterialComponent(TagsDefinitions.ItemTagDiamond, 50, false) .SetVocalSpellSameType(VocalSpellSemeType.Attack) .SetCastingTime(ActivationTime.Action) - .SetSubSpells(subSpells.ToArray()) + .SetSubSpells([.. subSpells]) .SetEffectDescription( EffectDescriptionBuilder .Create() - .SetTargetFiltering(TargetFilteringMethod.CharacterOnly) .SetTargetingData(Side.Enemy, RangeType.RangeHit, 12, TargetType.IndividualsUnique) .SetEffectAdvancement(EffectIncrementMethod.PerAdditionalSlotLevel, additionalDicePerIncrement: 1) - .SetSpeed(SpeedType.CellsPerSeconds, 8.5f) - .SetupImpactOffsets(offsetImpactTimePerTarget: 0.1f) .Build()) .AddToDB(); } @@ -365,19 +360,17 @@ internal static SpellDefinition BuildRadiantMotes() .SetEffectDescription( EffectDescriptionBuilder .Create() - .SetTargetFiltering(TargetFilteringMethod.AllCharacterAndGadgets) - .SetTargetingData(Side.Enemy, RangeType.RangeHit, 12, TargetType.Individuals, 4) .SetDurationData(DurationType.Minute, 1) + .SetTargetingData(Side.Enemy, RangeType.RangeHit, 12, TargetType.Individuals, 4) + .SetEffectAdvancement(EffectIncrementMethod.PerAdditionalSlotLevel, + additionalTargetsPerIncrement: 1) .SetEffectForms( EffectFormBuilder .Create() .SetDamageForm(DamageTypeRadiant, 1, DieType.D4) .Build()) - .SetEffectAdvancement(EffectIncrementMethod.PerAdditionalSlotLevel, - additionalTargetsPerIncrement: 1) .SetParticleEffectParameters(Sparkle) - .SetSpeed(SpeedType.CellsPerSeconds, 20) - .SetupImpactOffsets(offsetImpactTimePerTarget: 0.1f) + .SetSpeedAndImpactOffset(SpeedType.CellsPerSeconds, 20, offsetImpactTimePerTarget: 0.1f) .Build()) .AddToDB(); @@ -567,7 +560,7 @@ internal static SpellDefinition BuildMagnifyGravity() true, EffectDifficultyClassComputation.SpellCastingFeature) .SetParticleEffectParameters(Shatter) - .AddEffectForms( + .SetEffectForms( EffectFormBuilder .Create() .SetDamageForm(DamageTypeForce, 2, DieType.D8) @@ -852,8 +845,6 @@ internal static SpellDefinition BuildChaosBolt() EffectDescriptionBuilder .Create() .SetTargetingData(Side.Enemy, RangeType.RangeHit, 24, TargetType.IndividualsUnique) - .SetTargetFiltering(TargetFilteringMethod.CharacterOnly) - .SetEffectAdvancement(EffectIncrementMethod.None) .SetEffectForms( EffectFormBuilder.DamageForm(DamageTypeChaosBolt, 2, DieType.D8), EffectFormBuilder.DamageForm(DamageTypeChaosBolt, 1, DieType.D6)) @@ -894,7 +885,6 @@ internal static SpellDefinition BuildChaosBolt() EffectDescriptionBuilder .Create() .SetTargetingData(Side.Enemy, RangeType.RangeHit, 24, TargetType.IndividualsUnique) - .SetTargetFiltering(TargetFilteringMethod.CharacterOnly) .SetEffectAdvancement(EffectIncrementMethod.PerAdditionalSlotLevel) .SetEffectForms( EffectFormBuilder.DamageForm(DamageTypeChaosBolt, 2, DieType.D8), diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel02.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel02.cs index ff4c6ecd97..d213241d9b 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel02.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel02.cs @@ -111,19 +111,18 @@ internal static SpellDefinition BuildBindingIce() AttributeDefinitions.Constitution, true, EffectDifficultyClassComputation.SpellCastingFeature) - .SetParticleEffectParameters(ConeOfCold) - .AddEffectForms( + .SetEffectForms( EffectFormBuilder .Create() .SetDamageForm(DamageTypeCold, 3, DieType.D8) .HasSavingThrow(EffectSavingThrowType.HalfDamage) - .Build()) - .AddEffectForms( + .Build(), EffectFormBuilder .Create() .SetConditionForm(conditionGrappledRestrainedIceBound, ConditionForm.ConditionOperation.Add) .HasSavingThrow(EffectSavingThrowType.Negates) .Build()) + .SetParticleEffectParameters(ConeOfCold) .Build()) .AddToDB(); diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel03.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel03.cs index 060a93db26..f02ef2c404 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel03.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel03.cs @@ -181,16 +181,11 @@ internal static SpellDefinition BuildCrusadersMantle() .SetEffectDescription( EffectDescriptionBuilder .Create() - .SetTargetFiltering(TargetFilteringMethod.CharacterOnly) - .SetTargetingData(Side.Ally, RangeType.Self, 0, TargetType.Sphere, 6) .SetDurationData(DurationType.Minute, 1) + .SetTargetingData(Side.Ally, RangeType.Self, 0, TargetType.Sphere, 6) .SetRecurrentEffect( RecurrentEffect.OnActivation | RecurrentEffect.OnTurnStart | RecurrentEffect.OnEnter) - .AddEffectForms( - EffectFormBuilder - .Create() - .SetConditionForm(conditionCrusadersMantle, ConditionForm.ConditionOperation.Add) - .Build()) + .SetEffectForms(EffectFormBuilder.ConditionForm(conditionCrusadersMantle)) .Build()) .AddToDB(); diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel05.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel05.cs index a93b906ec0..10c3581fa5 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel05.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel05.cs @@ -95,7 +95,7 @@ internal static SpellDefinition BuildMantleOfThorns() .SetTargetingData(Side.Enemy, RangeType.Self, 0, TargetType.Sphere, 3) .SetDurationData(DurationType.Minute, 1) .SetRecurrentEffect(RecurrentEffect.OnEnter | RecurrentEffect.OnMove | RecurrentEffect.OnTurnStart) - .AddEffectForms( + .SetEffectForms( EffectFormBuilder.DamageForm(DamageTypePiercing, 2, DieType.D8), EffectFormBuilder.TopologyForm(TopologyForm.Type.DangerousZone, false), EffectFormBuilder.TopologyForm(TopologyForm.Type.DifficultThrough, false)) diff --git a/SolastaUnfinishedBusiness/Subclasses/DomainSmith.cs b/SolastaUnfinishedBusiness/Subclasses/DomainSmith.cs index bed971c102..d5b7ae455f 100644 --- a/SolastaUnfinishedBusiness/Subclasses/DomainSmith.cs +++ b/SolastaUnfinishedBusiness/Subclasses/DomainSmith.cs @@ -235,11 +235,10 @@ public DomainSmith() .SetEffectDescription( EffectDescriptionBuilder .Create() - .SetParticleEffectParameters(PowerOathOfDevotionTurnUnholy) - .SetTargetingData(Side.Ally, RangeType.Self, 0, TargetType.Sphere, 6) - .SetTargetFiltering(TargetFilteringMethod.CharacterOnly) .SetDurationData(DurationType.Minute, 1) + .SetTargetingData(Side.Ally, RangeType.Self, 0, TargetType.Sphere, 6) .SetEffectForms(EffectFormBuilder.ConditionForm(conditionAdamantBenediction)) + .SetParticleEffectParameters(PowerOathOfDevotionTurnUnholy) .Build()) .AddToDB(); diff --git a/SolastaUnfinishedBusiness/Subclasses/InnovationAlchemy.cs b/SolastaUnfinishedBusiness/Subclasses/InnovationAlchemy.cs index 8620cff638..e3bf33af0d 100644 --- a/SolastaUnfinishedBusiness/Subclasses/InnovationAlchemy.cs +++ b/SolastaUnfinishedBusiness/Subclasses/InnovationAlchemy.cs @@ -658,8 +658,7 @@ private static FeatureDefinitionPower MakePreciseBombPower(string damageType, .SetDamageForm(damageType, 3, dieType) .Build()) .AddEffectForms(effects) - .SetSpeed(SpeedType.CellsPerSeconds, 12) - .SetupImpactOffsets(offsetImpactTimePerTarget: 0.3f) + .SetSpeedAndImpactOffset(SpeedType.CellsPerSeconds, 12, offsetImpactTimePerTarget: 0.3f) .Build()) .SetUseSpellAttack() .AddToDB(); @@ -698,7 +697,6 @@ private static FeatureDefinitionPower MakeBreathBombPower(string damageType, false, EffectDifficultyClassComputation.SpellCastingFeature, AttributeDefinitions.Intelligence) - .SetAnimationMagicEffect(AnimationDefinitions.AnimationMagicEffect.Animation0) .SetParticleEffectParameters(particleParameters) .SetEffectForms( EffectFormBuilder @@ -754,7 +752,7 @@ private static FeatureDefinitionPower MakeSplashBombPower(string damageType, .SetDamageForm(damageType, 2, dieType) .Build()) .AddEffectForms(effects) - .SetSpeed(SpeedType.CellsPerSeconds, 8) + .SetSpeedAndImpactOffset(SpeedType.CellsPerSeconds, 8) .Build()) .AddToDB(); diff --git a/SolastaUnfinishedBusiness/Subclasses/InnovationArmor.cs b/SolastaUnfinishedBusiness/Subclasses/InnovationArmor.cs index c47f9aae5f..70f9c65858 100644 --- a/SolastaUnfinishedBusiness/Subclasses/InnovationArmor.cs +++ b/SolastaUnfinishedBusiness/Subclasses/InnovationArmor.cs @@ -13,6 +13,7 @@ using static RuleDefinitions; using static ConditionForm; using static SolastaUnfinishedBusiness.Api.DatabaseHelper; +using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionAdditionalDamages; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.SpellDefinitions; using static SolastaUnfinishedBusiness.Subclasses.CommonBuilders; using Resources = SolastaUnfinishedBusiness.Properties.Resources; @@ -244,11 +245,9 @@ private static FeatureDefinitionFeatureSet BuildPerfectedArmor() .Create() .SetDurationData(DurationType.Round, 1, TurnOccurenceType.StartOfTurn) .SetTargetingData(Side.Enemy, RangeType.MeleeHit, 1, TargetType.Individuals) - .AddEffectForms(EffectFormBuilder.LightSourceForm(LightSourceType.Basic, 0, 1, - new Color(0.9f, 0.78f, 0.62f), - FeatureDefinitionAdditionalDamages.AdditionalDamageBrandingSmite.LightSourceForm - .graphicsPrefabReference)) - .AddEffectForms( + .SetEffectForms(EffectFormBuilder.LightSourceForm(LightSourceType.Basic, 0, 1, + new Color(0.9f, 0.78f, 0.62f), + AdditionalDamageBrandingSmite.LightSourceForm.graphicsPrefabReference), EffectFormBuilder.ConditionForm( ConditionDefinitionBuilder .Create("ConditionInventorArmorerInfiltratorGlimmer") @@ -264,8 +263,7 @@ private static FeatureDefinitionFeatureSet BuildPerfectedArmor() .SetMyAttackAdvantage(AdvantageType.Disadvantage) .SetSituationalContext(SituationalContext.TargetIsEffectSource) .AddToDB()) - .AddToDB())) - .AddEffectForms( + .AddToDB()), EffectFormBuilder.ConditionForm( ConditionDefinitionBuilder .Create("ConditionInventorArmorerInfiltratorDamage") diff --git a/SolastaUnfinishedBusiness/Subclasses/InnovationArtillerist.cs b/SolastaUnfinishedBusiness/Subclasses/InnovationArtillerist.cs index 5bea52d11a..99694048db 100644 --- a/SolastaUnfinishedBusiness/Subclasses/InnovationArtillerist.cs +++ b/SolastaUnfinishedBusiness/Subclasses/InnovationArtillerist.cs @@ -417,14 +417,13 @@ public InnovationArtillerist() EffectDescriptionBuilder .Create() .SetTargetingData(Side.Ally, RangeType.Distance, 12, TargetType.IndividualsUnique) - .SetTargetFiltering(TargetFilteringMethod.CharacterOnly) .SetRestrictedCreatureFamilies(InventorClass.InventorConstructFamily) - .SetParticleEffectParameters(Counterspell) .SetEffectForms( EffectFormBuilder .Create() .SetCounterForm(CounterForm.CounterType.DismissCreature, 0, 0, false, false) .Build()) + .SetParticleEffectParameters(Counterspell) .Build()) .AddCustomSubFeatures(new ValidatorsValidatePowerUse(HasCannon)) .AddToDB(); @@ -595,7 +594,6 @@ public InnovationArtillerist() EffectDescriptionBuilder .Create() .SetTargetingData(Side.Ally, RangeType.Distance, 12, TargetType.IndividualsUnique) - .SetTargetFiltering(TargetFilteringMethod.CharacterOnly) .SetRestrictedCreatureFamilies(InventorClass.InventorConstructFamily) .Build()) .AddCustomSubFeatures( diff --git a/SolastaUnfinishedBusiness/Subclasses/MartialRoyalKnight.cs b/SolastaUnfinishedBusiness/Subclasses/MartialRoyalKnight.cs index 1950344cf5..2c13543ea1 100644 --- a/SolastaUnfinishedBusiness/Subclasses/MartialRoyalKnight.cs +++ b/SolastaUnfinishedBusiness/Subclasses/MartialRoyalKnight.cs @@ -33,7 +33,6 @@ public MartialRoyalKnight() .SetEffectDescription( EffectDescriptionBuilder .Create(PowerDomainLifePreserveLife.EffectDescription) - .SetTargetFiltering(TargetFilteringMethod.CharacterOnly, TargetFilteringTag.No, 5, DieType.D8) .ExcludeCaster() .SetEffectForms( EffectFormBuilder diff --git a/SolastaUnfinishedBusiness/Subclasses/OathOfAncients.cs b/SolastaUnfinishedBusiness/Subclasses/OathOfAncients.cs index c668298f0b..88248aae14 100644 --- a/SolastaUnfinishedBusiness/Subclasses/OathOfAncients.cs +++ b/SolastaUnfinishedBusiness/Subclasses/OathOfAncients.cs @@ -114,10 +114,8 @@ public OathOfAncients() .SetEffectDescription( EffectDescriptionBuilder .Create() - .SetParticleEffectParameters(PowerWindShelteringBreeze) - .SetTargetingData(Side.Enemy, RangeType.Self, 0, TargetType.Sphere, 6) - .SetTargetFiltering(TargetFilteringMethod.CharacterOnly) .SetDurationData(DurationType.Minute, 1) + .SetTargetingData(Side.Enemy, RangeType.Self, 0, TargetType.Sphere, 6) .SetRestrictedCreatureFamilies("Fey", "Fiend", "Elemental") .SetSavingThrowData( false, @@ -134,6 +132,7 @@ public OathOfAncients() ConditionDefinitions.ConditionTurned, ConditionForm.ConditionOperation.Add) .Build()) + .SetParticleEffectParameters(PowerWindShelteringBreeze) .Build()) .AddToDB(); diff --git a/SolastaUnfinishedBusiness/Subclasses/PathOfTheBeast.cs b/SolastaUnfinishedBusiness/Subclasses/PathOfTheBeast.cs index 56d2d5227f..4056649190 100644 --- a/SolastaUnfinishedBusiness/Subclasses/PathOfTheBeast.cs +++ b/SolastaUnfinishedBusiness/Subclasses/PathOfTheBeast.cs @@ -153,7 +153,7 @@ private static FeatureDefinitionPower BuildFeatureCallTheHunt() .Create() .SetDurationData(DurationType.Minute, 1) .SetTargetingData(Side.Ally, RangeType.Self, 0, TargetType.Self) - .AddEffectForms(EffectFormBuilder.ConditionForm(conditionCallTheHunt)) + .SetEffectForms(EffectFormBuilder.ConditionForm(conditionCallTheHunt)) .Build()) .AddToDB(); diff --git a/SolastaUnfinishedBusiness/Subclasses/PathOfTheLight.cs b/SolastaUnfinishedBusiness/Subclasses/PathOfTheLight.cs index d6e5a08220..b0e31cac06 100644 --- a/SolastaUnfinishedBusiness/Subclasses/PathOfTheLight.cs +++ b/SolastaUnfinishedBusiness/Subclasses/PathOfTheLight.cs @@ -212,8 +212,6 @@ public PathOfTheLight() AttributeDefinitions.Constitution) .SetDurationData(DurationType.Minute, 1) .SetTargetingData(Side.Enemy, RangeType.Distance, 6, TargetType.IndividualsUnique, 3) - .SetSpeed(SpeedType.CellsPerSeconds, 9.5f) - .SetParticleEffectParameters(GuidingBolt) .SetEffectForms( EffectFormBuilder .Create() @@ -246,6 +244,8 @@ public PathOfTheLight() faerieFireLightSource.lightSourceForm.graphicsPrefabReference) .HasSavingThrow(EffectSavingThrowType.Negates) .Build()) + .SetParticleEffectParameters(GuidingBolt) + .SetSpeedAndImpactOffset(SpeedType.CellsPerSeconds, 9.5f) .Build(); var featureSetPathOfTheLightIlluminatingBurst = FeatureDefinitionFeatureSetBuilder diff --git a/SolastaUnfinishedBusiness/Subclasses/PatronSoulBlade.cs b/SolastaUnfinishedBusiness/Subclasses/PatronSoulBlade.cs index e04dc040ec..7dcd7f0fe1 100644 --- a/SolastaUnfinishedBusiness/Subclasses/PatronSoulBlade.cs +++ b/SolastaUnfinishedBusiness/Subclasses/PatronSoulBlade.cs @@ -99,12 +99,11 @@ public PatronSoulBlade() .Create() .SetDurationData(DurationType.Minute, 1) .SetTargetingData(Side.Enemy, RangeType.Distance, 12, TargetType.IndividualsUnique) - .SetTargetFiltering(TargetFilteringMethod.CharacterOnly) - .SetParticleEffectParameters(Bane) .SetEffectForms( EffectFormBuilder.ConditionForm(conditionHexDefender), EffectFormBuilder.ConditionForm( conditionHexAttacker, ConditionForm.ConditionOperation.Add, true)) + .SetParticleEffectParameters(Bane) .Build()) .AddCustomSubFeatures(ForceRetargetAvailability.Mark) .AddToDB(); diff --git a/SolastaUnfinishedBusiness/Subclasses/RangerHellWalker.cs b/SolastaUnfinishedBusiness/Subclasses/RangerHellWalker.cs index 49c6350ab3..cdd433f0e7 100644 --- a/SolastaUnfinishedBusiness/Subclasses/RangerHellWalker.cs +++ b/SolastaUnfinishedBusiness/Subclasses/RangerHellWalker.cs @@ -49,7 +49,6 @@ public RangerHellWalker() EffectDescriptionBuilder .Create() .SetTargetingData(Side.Enemy, RangeType.Distance, 6, TargetType.IndividualsUnique) - .SetTargetFiltering(TargetFilteringMethod.CharacterOnly) .SetEffectAdvancement(EffectIncrementMethod.CasterLevelTable, additionalDicePerIncrement: 1) .SetSavingThrowData(false, AttributeDefinitions.Constitution, false, EffectDifficultyClassComputation.SpellCastingFeature) diff --git a/SolastaUnfinishedBusiness/Subclasses/WizardGraviturgist.cs b/SolastaUnfinishedBusiness/Subclasses/WizardGraviturgist.cs index e1d26ad9bb..7292cafc87 100644 --- a/SolastaUnfinishedBusiness/Subclasses/WizardGraviturgist.cs +++ b/SolastaUnfinishedBusiness/Subclasses/WizardGraviturgist.cs @@ -133,7 +133,7 @@ public WizardGraviturgist() .Create() .SetTargetingData(Side.Enemy, RangeType.Self, 0, TargetType.IndividualsUnique) .SetParticleEffectParameters(SpellDefinitions.EldritchBlast) - .AddEffectForms( + .SetEffectForms( EffectFormBuilder .Create() .SetMotionForm(MotionForm.MotionType.PushFromOrigin, 1) From 24a43266b2a43cfc771f8516deb6445c52e60f9a Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sun, 8 Sep 2024 20:18:04 -0700 Subject: [PATCH 083/212] fix Wrathful Smite to do a wisdom attribute check to get rid of frightened on turn start --- .../ConditionWrathfulSmiteEnemy.json | 2 +- ...ecisionBreakFreeConditionWrathfulSmiteEnemy.json} | 12 ++++++------ .../BreakFreeAbilityCheckConditionFlashFreeze.json | 2 +- ...lityCheckConditionGrappledRestrainedEnsnared.json | 2 +- ...lityCheckConditionGrappledRestrainedIceBound.json | 2 +- ...lityCheckConditionGrappledRestrainedSpellWeb.json | 2 +- .../BreakFreeAbilityCheckConditionNoxiousSpray.json | 2 +- ...lityCheckConditionOathOfAncientsNaturesWrath.json | 2 +- ...reeAbilityCheckConditionRestrainedByEntangle.json | 2 +- .../BreakFreeAbilityCheckConditionVileBrew.json | 2 +- ...FreeAbilityCheckConditionWrathfulSmiteEnemy.json} | 8 ++++---- .../AdditionalDamageWrathfulSmite.json | 2 +- SolastaUnfinishedBusiness/Models/AiContext.cs | 3 ++- .../Spells/SpellBuildersLevel01.cs | 5 ++--- 14 files changed, 24 insertions(+), 24 deletions(-) rename Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/{DecisionBreakFreeConditionWrathfulSmite.json => DecisionBreakFreeConditionWrathfulSmiteEnemy.json} (88%) rename Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/{BreakFreeAbilityCheckConditionWrathfulSmite.json => BreakFreeAbilityCheckConditionWrathfulSmiteEnemy.json} (85%) diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionWrathfulSmiteEnemy.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionWrathfulSmiteEnemy.json index 30cc55a744..20a4d53557 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionWrathfulSmiteEnemy.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionWrathfulSmiteEnemy.json @@ -236,7 +236,7 @@ "forceBehavior": false, "addBehavior": true, "fearSource": false, - "battlePackage": "Definition:BreakFreeAbilityCheckConditionWrathfulSmite:64259f64-63c1-54cb-8683-3cfb5b1b78a0", + "battlePackage": "Definition:BreakFreeAbilityCheckConditionWrathfulSmiteEnemy:8952dfa4-c552-57f5-bf82-7e317c4e459d", "explorationPackage": "Definition:IdleGuard_Default:232428b431ff2414eb8254fb1e9e4cf1", "removedFromTheGame": false, "permanentlyRemovedIfExtraPlanar": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionWrathfulSmite.json b/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionWrathfulSmiteEnemy.json similarity index 88% rename from Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionWrathfulSmite.json rename to Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionWrathfulSmiteEnemy.json index 91387f8932..56ae0aedac 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionWrathfulSmite.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionWrathfulSmiteEnemy.json @@ -2,7 +2,7 @@ "$type": "TA.AI.DecisionDefinition, Assembly-CSharp", "decision": { "$type": "TA.AI.DecisionDescription, Assembly-CSharp", - "description": "if restrained from ConditionWrathfulSmite, and can use main action, try to break free", + "description": "if restrained from ConditionWrathfulSmiteEnemy, and can use main action, try to break free", "scorer": { "$type": "TA.AI.ActivityScorerDefinition, Assembly-CSharp", "scorer": { @@ -18,7 +18,7 @@ "curve": { "$type": "UnityEngine.AnimationCurve, UnityEngine.CoreModule" }, - "stringParameter": "ConditionWrathfulSmite", + "stringParameter": "ConditionWrathfulSmiteEnemy", "floatParameter": 2.0, "intParameter": 2, "byteParameter": 0, @@ -26,7 +26,7 @@ "boolSecParameter": false, "boolTerParameter": false }, - "name": "HasConditionWrathfulSmite" + "name": "HasConditionWrathfulSmiteEnemy" }, "weight": 1.0 }, @@ -54,7 +54,7 @@ } ] }, - "name": "BreakFreeConditionWrathfulSmite" + "name": "BreakFreeConditionWrathfulSmiteEnemy" }, "activityType": "BreakFree", "stringParameter": "", @@ -88,7 +88,7 @@ "usedInValleyDLC": false }, "contentCopyright": "UserContent", - "guid": "1c32e557-4a88-580f-8d11-54d731c4bb79", + "guid": "6400794a-3234-55f7-973f-d443c38c9a20", "contentPack": 9999, - "name": "DecisionBreakFreeConditionWrathfulSmite" + "name": "DecisionBreakFreeConditionWrathfulSmiteEnemy" } \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/BreakFreeAbilityCheckConditionFlashFreeze.json b/Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/BreakFreeAbilityCheckConditionFlashFreeze.json index 3a22fe1668..3d527d9ad1 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/BreakFreeAbilityCheckConditionFlashFreeze.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/BreakFreeAbilityCheckConditionFlashFreeze.json @@ -7,7 +7,7 @@ { "$type": "TA.AI.WeightedDecisionDescription, Assembly-CSharp", "decision": "Definition:DecisionBreakFreeConditionFlashFreeze:c1790fe7-d377-51c3-8bd4-3ff2556b771e", - "weight": 1.0, + "weight": 2.0, "cooldown": 0, "dynamicCooldown": false } diff --git a/Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/BreakFreeAbilityCheckConditionGrappledRestrainedEnsnared.json b/Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/BreakFreeAbilityCheckConditionGrappledRestrainedEnsnared.json index bfbb211ef6..f082844c2b 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/BreakFreeAbilityCheckConditionGrappledRestrainedEnsnared.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/BreakFreeAbilityCheckConditionGrappledRestrainedEnsnared.json @@ -7,7 +7,7 @@ { "$type": "TA.AI.WeightedDecisionDescription, Assembly-CSharp", "decision": "Definition:DecisionBreakFreeConditionGrappledRestrainedEnsnared:69855aed-d774-527f-9de3-8de1e5a9743f", - "weight": 1.0, + "weight": 2.0, "cooldown": 0, "dynamicCooldown": false } diff --git a/Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/BreakFreeAbilityCheckConditionGrappledRestrainedIceBound.json b/Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/BreakFreeAbilityCheckConditionGrappledRestrainedIceBound.json index 310c09bd99..15b83817b2 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/BreakFreeAbilityCheckConditionGrappledRestrainedIceBound.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/BreakFreeAbilityCheckConditionGrappledRestrainedIceBound.json @@ -7,7 +7,7 @@ { "$type": "TA.AI.WeightedDecisionDescription, Assembly-CSharp", "decision": "Definition:DecisionBreakFreeConditionGrappledRestrainedIceBound:017c5b82-f11c-5899-8729-947eabcf949f", - "weight": 1.0, + "weight": 2.0, "cooldown": 0, "dynamicCooldown": false } diff --git a/Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/BreakFreeAbilityCheckConditionGrappledRestrainedSpellWeb.json b/Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/BreakFreeAbilityCheckConditionGrappledRestrainedSpellWeb.json index f65d0c064d..399f01aae2 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/BreakFreeAbilityCheckConditionGrappledRestrainedSpellWeb.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/BreakFreeAbilityCheckConditionGrappledRestrainedSpellWeb.json @@ -7,7 +7,7 @@ { "$type": "TA.AI.WeightedDecisionDescription, Assembly-CSharp", "decision": "Definition:DecisionBreakFreeConditionGrappledRestrainedSpellWeb:61e7fc96-8cb5-5c2b-8a67-75fbef4f333a", - "weight": 1.0, + "weight": 2.0, "cooldown": 0, "dynamicCooldown": false } diff --git a/Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/BreakFreeAbilityCheckConditionNoxiousSpray.json b/Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/BreakFreeAbilityCheckConditionNoxiousSpray.json index a67b09564a..96a400543e 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/BreakFreeAbilityCheckConditionNoxiousSpray.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/BreakFreeAbilityCheckConditionNoxiousSpray.json @@ -7,7 +7,7 @@ { "$type": "TA.AI.WeightedDecisionDescription, Assembly-CSharp", "decision": "Definition:DecisionBreakFreeConditionNoxiousSpray:2f033fcf-d478-5581-94d9-27a3ad4496ad", - "weight": 1.0, + "weight": 2.0, "cooldown": 0, "dynamicCooldown": false } diff --git a/Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/BreakFreeAbilityCheckConditionOathOfAncientsNaturesWrath.json b/Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/BreakFreeAbilityCheckConditionOathOfAncientsNaturesWrath.json index 8e4501d0e0..918eaae7ad 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/BreakFreeAbilityCheckConditionOathOfAncientsNaturesWrath.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/BreakFreeAbilityCheckConditionOathOfAncientsNaturesWrath.json @@ -7,7 +7,7 @@ { "$type": "TA.AI.WeightedDecisionDescription, Assembly-CSharp", "decision": "Definition:DecisionBreakFreeConditionOathOfAncientsNaturesWrath:25d7ad8d-27b8-5882-9bfb-acc37798812f", - "weight": 1.0, + "weight": 2.0, "cooldown": 0, "dynamicCooldown": false } diff --git a/Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/BreakFreeAbilityCheckConditionRestrainedByEntangle.json b/Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/BreakFreeAbilityCheckConditionRestrainedByEntangle.json index 4a09e6c4fd..c794d4ecff 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/BreakFreeAbilityCheckConditionRestrainedByEntangle.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/BreakFreeAbilityCheckConditionRestrainedByEntangle.json @@ -7,7 +7,7 @@ { "$type": "TA.AI.WeightedDecisionDescription, Assembly-CSharp", "decision": "Definition:DecisionBreakFreeConditionRestrainedByEntangle:2a416669-5ec8-53c1-b07b-8fe6f29da4d2", - "weight": 1.0, + "weight": 2.0, "cooldown": 0, "dynamicCooldown": false } diff --git a/Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/BreakFreeAbilityCheckConditionVileBrew.json b/Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/BreakFreeAbilityCheckConditionVileBrew.json index 2369e8ed05..4559d8ccc6 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/BreakFreeAbilityCheckConditionVileBrew.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/BreakFreeAbilityCheckConditionVileBrew.json @@ -7,7 +7,7 @@ { "$type": "TA.AI.WeightedDecisionDescription, Assembly-CSharp", "decision": "Definition:DecisionBreakFreeConditionVileBrew:4b3278e8-334a-58d6-8c75-2f48e28b4e54", - "weight": 1.0, + "weight": 2.0, "cooldown": 0, "dynamicCooldown": false } diff --git a/Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/BreakFreeAbilityCheckConditionWrathfulSmite.json b/Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/BreakFreeAbilityCheckConditionWrathfulSmiteEnemy.json similarity index 85% rename from Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/BreakFreeAbilityCheckConditionWrathfulSmite.json rename to Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/BreakFreeAbilityCheckConditionWrathfulSmiteEnemy.json index 0312067378..8f148dc800 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/BreakFreeAbilityCheckConditionWrathfulSmite.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/BreakFreeAbilityCheckConditionWrathfulSmiteEnemy.json @@ -6,8 +6,8 @@ "weightedDecisions": [ { "$type": "TA.AI.WeightedDecisionDescription, Assembly-CSharp", - "decision": "Definition:DecisionBreakFreeConditionWrathfulSmite:1c32e557-4a88-580f-8d11-54d731c4bb79", - "weight": 1.0, + "decision": "Definition:DecisionBreakFreeConditionWrathfulSmiteEnemy:6400794a-3234-55f7-973f-d443c38c9a20", + "weight": 2.0, "cooldown": 0, "dynamicCooldown": false } @@ -37,7 +37,7 @@ "usedInValleyDLC": false }, "contentCopyright": "UserContent", - "guid": "64259f64-63c1-54cb-8683-3cfb5b1b78a0", + "guid": "8952dfa4-c552-57f5-bf82-7e317c4e459d", "contentPack": 9999, - "name": "BreakFreeAbilityCheckConditionWrathfulSmite" + "name": "BreakFreeAbilityCheckConditionWrathfulSmiteEnemy" } \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAdditionalDamage/AdditionalDamageWrathfulSmite.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAdditionalDamage/AdditionalDamageWrathfulSmite.json index d0649a932d..ceffc0fb90 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAdditionalDamage/AdditionalDamageWrathfulSmite.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAdditionalDamage/AdditionalDamageWrathfulSmite.json @@ -142,7 +142,7 @@ "conditionName": "", "conditionDefinition": "Definition:ConditionWrathfulSmiteEnemy:08ab37a6-23bc-59c3-ac2b-09f02170a996", "saveAffinity": "Negates", - "canSaveToCancel": true, + "canSaveToCancel": false, "saveOccurence": "StartOfTurn" } ], diff --git a/SolastaUnfinishedBusiness/Models/AiContext.cs b/SolastaUnfinishedBusiness/Models/AiContext.cs index 287bfa29a3..da85c7eaaf 100644 --- a/SolastaUnfinishedBusiness/Models/AiContext.cs +++ b/SolastaUnfinishedBusiness/Models/AiContext.cs @@ -129,10 +129,11 @@ internal static DecisionPackageDefinition BuildDecisionPackageBreakFree(string c floatParameter: 3f) .AddToDB(); + // use weight 2f to ensure scenarios that don't prevent enemies from take actions to still consider this var packageBreakFree = DecisionPackageDefinitionBuilder .Create($"BreakFreeAbilityCheck{conditionName}") .SetGuiPresentationNoContent(true) - .SetWeightedDecisions(new WeightedDecisionDescription { decision = decisionBreakFree, weight = 1f }) + .SetWeightedDecisions(new WeightedDecisionDescription { decision = decisionBreakFree, weight = 2f }) .AddToDB(); return packageBreakFree; diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs index 4d99e9f403..b6fba860fa 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs @@ -449,7 +449,7 @@ internal static SpellDefinition BuildWrathfulSmite() { const string NAME = "WrathfulSmite"; - var battlePackage = AiContext.BuildDecisionPackageBreakFree($"Condition{NAME}"); + var battlePackage = AiContext.BuildDecisionPackageBreakFree($"Condition{NAME}Enemy"); var conditionEnemy = ConditionDefinitionBuilder .Create(ConditionDefinitions.ConditionFrightened, $"Condition{NAME}Enemy") @@ -478,8 +478,7 @@ internal static SpellDefinition BuildWrathfulSmite() operation = ConditionOperationDescription.ConditionOperation.Add, conditionDefinition = conditionEnemy, hasSavingThrow = true, - //TODO: change this to false after fix battle package - canSaveToCancel = true, + canSaveToCancel = false, saveAffinity = EffectSavingThrowType.Negates, saveOccurence = TurnOccurenceType.StartOfTurn }) From 492125fb3219718ce13b4ec2c93d00ad5d618e9e Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sun, 8 Sep 2024 20:19:40 -0700 Subject: [PATCH 084/212] add Holy Weapon spell no QA --- .../UnfinishedBusinessBlueprints/Assets.txt | 10 +- .../ConditionHolyWeapon.json | 157 +++++++ .../AdditionalDamageHolyWeapon.json | 75 ++++ .../PowerHolyWeapon.json | 390 ++++++++++++++++ .../SpellDefinition/HolyWeapon.json | 415 ++++++++++++++++++ Documentation/Spells.md | 156 +++---- .../ChangelogHistory.txt | 3 +- .../Models/SpellsContext.cs | 1 + .../Spells/SpellBuildersLevel05.cs | 94 ++++ .../Translations/de/Spells/Spells05-de.txt | 6 + .../Translations/en/Spells/Spells05-en.txt | 6 + .../Translations/es/Spells/Spells05-es.txt | 6 + .../Translations/fr/Spells/Spells05-fr.txt | 6 + .../Translations/it/Spells/Spells05-it.txt | 6 + .../Translations/ja/Spells/Spells05-ja.txt | 6 + .../Translations/ko/Spells/Spells05-ko.txt | 6 + .../pt-BR/Spells/Spells05-pt-BR.txt | 6 + .../Translations/ru/Spells/Spells05-ru.txt | 6 + .../zh-CN/Spells/Spells05-zh-CN.txt | 6 + 19 files changed, 1283 insertions(+), 78 deletions(-) create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionHolyWeapon.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAdditionalDamage/AdditionalDamageHolyWeapon.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerHolyWeapon.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/HolyWeapon.json diff --git a/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt b/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt index 18cd266250..5dc5fad603 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt +++ b/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt @@ -856,6 +856,7 @@ ConditionHatredArdentHate ConditionDefinition ConditionDefinition c9abe651-5aed- ConditionHeroicInfusion ConditionDefinition ConditionDefinition 6429a198-5027-5a66-8e22-494f70ed97b6 ConditionHeroicInfusionExhausted ConditionDefinition ConditionDefinition 1ecc7159-a625-5715-9fa4-2cb09b939b6c ConditionHinderedForestGuardian ConditionDefinition ConditionDefinition c07233a3-2954-5516-9819-2191d857a927 +ConditionHolyWeapon ConditionDefinition ConditionDefinition 4abe721f-d87f-519b-a35d-152100b60eb4 ConditionHunterHordeBreaker ConditionDefinition ConditionDefinition a1a37dbb-4d25-5196-81e9-8a0306e988d5 ConditionImmuneAoO ConditionDefinition ConditionDefinition b5db9219-5090-54bb-977c-e45b622bc936 ConditionImpAssistedAlly ConditionDefinition ConditionDefinition 3c67b1a6-f256-58ee-98db-ab18678b302c @@ -1242,7 +1243,7 @@ DecisionBreakFreeConditionNoxiousSpray TA.AI.DecisionDefinition TA.AI.DecisionDe DecisionBreakFreeConditionOathOfAncientsNaturesWrath TA.AI.DecisionDefinition TA.AI.DecisionDefinition 25d7ad8d-27b8-5882-9bfb-acc37798812f DecisionBreakFreeConditionRestrainedByEntangle TA.AI.DecisionDefinition TA.AI.DecisionDefinition 2a416669-5ec8-53c1-b07b-8fe6f29da4d2 DecisionBreakFreeConditionVileBrew TA.AI.DecisionDefinition TA.AI.DecisionDefinition 4b3278e8-334a-58d6-8c75-2f48e28b4e54 -DecisionBreakFreeConditionWrathfulSmite TA.AI.DecisionDefinition TA.AI.DecisionDefinition 1c32e557-4a88-580f-8d11-54d731c4bb79 +DecisionBreakFreeConditionWrathfulSmiteEnemy TA.AI.DecisionDefinition TA.AI.DecisionDefinition 6400794a-3234-55f7-973f-d443c38c9a20 Move_Approach TA.AI.DecisionDefinition TA.AI.DecisionDefinition 5cb2a87f-09a4-5fae-9b74-10516ea8a8ab Move_DissonantWhispers TA.AI.DecisionDefinition TA.AI.DecisionDefinition bdfa6649-5cad-5b35-a697-209ea53ca45d Approach TA.AI.DecisionPackageDefinition TA.AI.DecisionPackageDefinition 5043a0ec-c626-5877-bd87-c7bc0584366d @@ -1254,7 +1255,7 @@ BreakFreeAbilityCheckConditionNoxiousSpray TA.AI.DecisionPackageDefinition TA.AI BreakFreeAbilityCheckConditionOathOfAncientsNaturesWrath TA.AI.DecisionPackageDefinition TA.AI.DecisionPackageDefinition c2d43b3b-7204-56df-a270-89202bf8ec7b BreakFreeAbilityCheckConditionRestrainedByEntangle TA.AI.DecisionPackageDefinition TA.AI.DecisionPackageDefinition 0d9623d9-0cd7-5c03-8275-e9e61f0f1b6a BreakFreeAbilityCheckConditionVileBrew TA.AI.DecisionPackageDefinition TA.AI.DecisionPackageDefinition 7b202c71-3241-5f80-8b02-ada4a0d9383f -BreakFreeAbilityCheckConditionWrathfulSmite TA.AI.DecisionPackageDefinition TA.AI.DecisionPackageDefinition 64259f64-63c1-54cb-8683-3cfb5b1b78a0 +BreakFreeAbilityCheckConditionWrathfulSmiteEnemy TA.AI.DecisionPackageDefinition TA.AI.DecisionPackageDefinition 8952dfa4-c552-57f5-bf82-7e317c4e459d DissonantWhispers_Fear TA.AI.DecisionPackageDefinition TA.AI.DecisionPackageDefinition dfe2cc9e-cc70-5cfe-9057-19454acb1068 DieTypeD3 DieTypeDefinition DieTypeDefinition 63dc904b-8d78-5406-90aa-e7e1f3eefd84 ProxyCircleOfTheWildfireCauterizingFlames EffectProxyDefinition EffectProxyDefinition 5d3d90cd-1858-5044-b4f6-586754122132 @@ -1749,6 +1750,7 @@ AdditionalDamageFortuneFavorTheBoldPsychicDamage FeatureDefinitionAdditionalDama AdditionalDamageGambitDie FeatureDefinitionAdditionalDamage FeatureDefinition 9f288fdb-82c8-5c55-8028-549986994481 AdditionalDamageGambitDieMelee FeatureDefinitionAdditionalDamage FeatureDefinition 0c8c9223-a0d3-53db-a806-39a146465c76 AdditionalDamageHeroicInfusion FeatureDefinitionAdditionalDamage FeatureDefinition 9a8b8e0b-f1e4-52c2-9684-d65755f7b0ce +AdditionalDamageHolyWeapon FeatureDefinitionAdditionalDamage FeatureDefinition a818b04d-36eb-554a-921b-a4e00c1ac999 AdditionalDamageInfusionBloody FeatureDefinitionAdditionalDamage FeatureDefinition 17405e7d-32e9-52b9-ad6e-20bccb5e93a2 AdditionalDamageInfusionMajorElementalDamageAcid FeatureDefinitionAdditionalDamage FeatureDefinition 623d8c9f-8bf6-579e-9a92-018aed01c23f AdditionalDamageInfusionMajorElementalDamageCold FeatureDefinitionAdditionalDamage FeatureDefinition 5ef736e9-38a2-5a96-828e-55d2f85b4942 @@ -3376,6 +3378,7 @@ PowerHatredScornfulPrayerFeature FeatureDefinitionPower FeatureDefinition a18e30 PowerHelp FeatureDefinitionPower FeatureDefinition faded953-56c9-55e9-aa49-54a485c1de6d PowerHighWyrmkinPsionicWave FeatureDefinitionPower FeatureDefinition 5183d28a-df58-5b9c-929b-d8c3cdf51e2f PowerHighWyrmkinReactiveRetribution FeatureDefinitionPower FeatureDefinition cb04aa22-2f0c-5b00-8a7b-c372ace7890c +PowerHolyWeapon FeatureDefinitionPower FeatureDefinition 998ab674-743b-5200-b721-4e4a915a38d8 PowerHungerOfTheVoidAcid FeatureDefinitionPower FeatureDefinition 03c80741-2e05-5a9a-bdfe-af0721f45ba2 PowerHungerOfTheVoidCold FeatureDefinitionPower FeatureDefinition 225a983d-6b7d-5249-8443-6cb000a6518e PowerIceBlade FeatureDefinitionPower FeatureDefinition d5a3feae-4d32-5738-8e5c-2996e003e33f @@ -4394,6 +4397,7 @@ AdditionalDamageFortuneFavorTheBoldPsychicDamage FeatureDefinitionAdditionalDama AdditionalDamageGambitDie FeatureDefinitionAdditionalDamage FeatureDefinitionAdditionalDamage 9f288fdb-82c8-5c55-8028-549986994481 AdditionalDamageGambitDieMelee FeatureDefinitionAdditionalDamage FeatureDefinitionAdditionalDamage 0c8c9223-a0d3-53db-a806-39a146465c76 AdditionalDamageHeroicInfusion FeatureDefinitionAdditionalDamage FeatureDefinitionAdditionalDamage 9a8b8e0b-f1e4-52c2-9684-d65755f7b0ce +AdditionalDamageHolyWeapon FeatureDefinitionAdditionalDamage FeatureDefinitionAdditionalDamage a818b04d-36eb-554a-921b-a4e00c1ac999 AdditionalDamageInfusionBloody FeatureDefinitionAdditionalDamage FeatureDefinitionAdditionalDamage 17405e7d-32e9-52b9-ad6e-20bccb5e93a2 AdditionalDamageInfusionMajorElementalDamageAcid FeatureDefinitionAdditionalDamage FeatureDefinitionAdditionalDamage 623d8c9f-8bf6-579e-9a92-018aed01c23f AdditionalDamageInfusionMajorElementalDamageCold FeatureDefinitionAdditionalDamage FeatureDefinitionAdditionalDamage 5ef736e9-38a2-5a96-828e-55d2f85b4942 @@ -6197,6 +6201,7 @@ PowerHatredScornfulPrayerFeature FeatureDefinitionPower FeatureDefinitionPower a PowerHelp FeatureDefinitionPower FeatureDefinitionPower faded953-56c9-55e9-aa49-54a485c1de6d PowerHighWyrmkinPsionicWave FeatureDefinitionPower FeatureDefinitionPower 5183d28a-df58-5b9c-929b-d8c3cdf51e2f PowerHighWyrmkinReactiveRetribution FeatureDefinitionPower FeatureDefinitionPower cb04aa22-2f0c-5b00-8a7b-c372ace7890c +PowerHolyWeapon FeatureDefinitionPower FeatureDefinitionPower 998ab674-743b-5200-b721-4e4a915a38d8 PowerHungerOfTheVoidAcid FeatureDefinitionPower FeatureDefinitionPower 03c80741-2e05-5a9a-bdfe-af0721f45ba2 PowerHungerOfTheVoidCold FeatureDefinitionPower FeatureDefinitionPower 225a983d-6b7d-5249-8443-6cb000a6518e PowerIceBlade FeatureDefinitionPower FeatureDefinitionPower d5a3feae-4d32-5738-8e5c-2996e003e33f @@ -12207,6 +12212,7 @@ ForestGuardian SpellDefinition SpellDefinition e84a5167-a3d0-5e96-b978-60039654e GiftOfAlacrity SpellDefinition SpellDefinition cfc1affd-8762-5031-b552-4a48251d784c GravitySinkhole SpellDefinition SpellDefinition 42bea70d-ddc5-5295-8c18-c6b6b9c3abf6 HeroicInfusion SpellDefinition SpellDefinition cf5c6a2f-ae52-59d6-a88d-31bb5d00c17d +HolyWeapon SpellDefinition SpellDefinition ed4a2ccf-c199-5f4c-bfc3-7bc8a584e4ce HungerOfTheVoid SpellDefinition SpellDefinition fa794ede-4149-54ed-914d-f25cd55fb5b4 IceBlade SpellDefinition SpellDefinition 659510a2-17ce-5577-8f85-d7756eac3bd9 IlluminatingSphere SpellDefinition SpellDefinition e7fc59b8-93d9-53aa-86f7-659ac0d16fcf diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionHolyWeapon.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionHolyWeapon.json new file mode 100644 index 0000000000..be09291e5c --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionHolyWeapon.json @@ -0,0 +1,157 @@ +{ + "$type": "ConditionDefinition, Assembly-CSharp", + "inDungeonEditor": false, + "parentCondition": null, + "conditionType": "Beneficial", + "features": [ + "Definition:PowerHolyWeapon:998ab674-743b-5200-b721-4e4a915a38d8" + ], + "allowMultipleInstances": false, + "silentWhenAdded": true, + "silentWhenRemoved": true, + "silentWhenRefreshed": false, + "terminateWhenRemoved": false, + "specialDuration": false, + "durationType": "Hour", + "durationParameterDie": "D4", + "durationParameter": 1, + "forceTurnOccurence": false, + "turnOccurence": "EndOfTurn", + "specialInterruptions": [], + "interruptionRequiresSavingThrow": false, + "interruptionSavingThrowComputationMethod": "SaveOverride", + "interruptionSavingThrowAbility": "", + "interruptionDamageThreshold": 0, + "keepConditionIfSavingThrowSucceeds": false, + "interruptionSavingThrowAffinity": "None", + "conditionTags": [], + "recurrentEffectForms": [], + "cancellingConditions": [], + "additionalDamageWhenHit": false, + "additionalDamageTypeDetermination": "Specific", + "additionalDamageType": "", + "additionalDamageQuantity": "AbilityBonus", + "additionalDamageDieType": "D1", + "additionalDamageDieNumber": 1, + "additionalConditionWhenHit": false, + "additionalCondition": null, + "additionalConditionDurationType": "Round", + "additionalConditionDurationParameter": 1, + "additionalConditionTurnOccurenceType": "StartOfTurn", + "conditionStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "conditionParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "conditionEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "recurrentEffectParticleReference": null, + "characterShaderReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "particlesBasedOnAncestryDamageType": false, + "ancestryType": "Sorcerer", + "acidParticleParameters": null, + "coldParticleParameters": null, + "fireParticleParameters": null, + "lightningParticleParameters": null, + "poisonParticleParameters": null, + "overrideCharacterShaderColors": false, + "firstCharacterShaderColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "secondCharacterShaderColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "timeToWaitBeforeApplyingShader": 0.5, + "timeToWaitBeforeRemovingShader": 0.5, + "possessive": false, + "amountOrigin": "None", + "baseAmount": 0, + "additiveAmount": false, + "sourceAbilityBonusMinValue": 1, + "subsequentOnRemoval": null, + "subsequentHasSavingThrow": false, + "subsequentSavingThrowAbilityScore": "Constitution", + "subsequentVariableForDC": "FrenzyExhaustionDC", + "subsequentDCIncrease": 5, + "effectFormsOnRemoved": [], + "forceBehavior": false, + "addBehavior": false, + "fearSource": false, + "battlePackage": null, + "explorationPackage": null, + "removedFromTheGame": false, + "permanentlyRemovedIfExtraPlanar": false, + "refundReceivedDamageWhenRemoved": false, + "followSourcePosition": false, + "disolveCharacterOnDeath": false, + "disolveParameters": { + "$type": "GraphicsCharacterDefinitions+DisolveParameters, Assembly-CSharp", + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "colorWidth": 0.0, + "noiseScale": 5.0, + "hueScale": 0.0, + "vertexOffset": 0.0, + "curve": { + "$type": "UnityEngine.AnimationCurve, UnityEngine.CoreModule" + }, + "startAfterDeathAnimation": false, + "duration": 0.0 + }, + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": true, + "title": "Feature/&NoContentTitle", + "description": "Feature/&NoContentTitle", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "4abe721f-d87f-519b-a35d-152100b60eb4", + "contentPack": 9999, + "name": "ConditionHolyWeapon" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAdditionalDamage/AdditionalDamageHolyWeapon.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAdditionalDamage/AdditionalDamageHolyWeapon.json new file mode 100644 index 0000000000..ebd115b9c5 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAdditionalDamage/AdditionalDamageHolyWeapon.json @@ -0,0 +1,75 @@ +{ + "$type": "FeatureDefinitionAdditionalDamage, Assembly-CSharp", + "notificationTag": "HolyWeapon", + "limitedUsage": "None", + "firstTargetOnly": true, + "targetSide": "Enemy", + "otherSimilarAdditionalDamages": [], + "triggerCondition": "AlwaysActive", + "requiredProperty": "None", + "attackModeOnly": false, + "attackOnly": false, + "requiredTargetCondition": null, + "requiredTargetSenseType": "Darkvision", + "requiredTargetCreatureTag": "", + "requiredCharacterFamily": null, + "requiredSpecificSpell": null, + "requiredAncestryType": "Sorcerer", + "damageValueDetermination": "Die", + "flatBonus": 0, + "damageDieType": "D6", + "damageDiceNumber": 2, + "additionalDamageType": "Specific", + "specificDamageType": "DamageRadiant", + "ancestryTypeForDamageType": "Sorcerer", + "damageAdvancement": "None", + "diceByRankTable": [], + "familiesWithAdditionalDice": [], + "familiesDiceNumber": 1, + "ignoreCriticalDoubleDice": false, + "hasSavingThrow": false, + "savingThrowAbility": "Dexterity", + "dcComputation": "FixedValue", + "savingThrowDC": 10, + "savingThrowDCAbilityModifier": "Dexterity", + "damageSaveAffinity": "None", + "conditionOperations": [], + "addLightSource": false, + "lightSourceForm": null, + "impactParticleReference": null, + "particlesBasedOnAncestryDamageType": false, + "ancestryType": "Sorcerer", + "acidImpactParticleReference": null, + "coldImpactParticleReference": null, + "fireImpactParticleReference": null, + "lightningImpactParticleReference": null, + "poisonImpactParticleReference": null, + "computeDescription": false, + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": true, + "title": "Feature/&NoContentTitle", + "description": "Feature/&NoContentTitle", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "a818b04d-36eb-554a-921b-a4e00c1ac999", + "contentPack": 9999, + "name": "AdditionalDamageHolyWeapon" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerHolyWeapon.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerHolyWeapon.json new file mode 100644 index 0000000000..4cd494ecd6 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerHolyWeapon.json @@ -0,0 +1,390 @@ +{ + "$type": "FeatureDefinitionPower, Assembly-CSharp", + "effectDescription": { + "$type": "EffectDescription, Assembly-CSharp", + "rangeType": "Self", + "rangeParameter": 6, + "halfDamageOnAMiss": false, + "hitAffinitiesByTargetTag": [], + "targetType": "IndividualsUnique", + "itemSelectionType": "None", + "targetParameter": 1, + "targetParameter2": 2, + "emissiveBorder": "None", + "emissiveParameter": 1, + "requiresTargetProximity": false, + "targetProximityDistance": 6, + "targetExcludeCaster": false, + "canBePlacedOnCharacter": true, + "affectOnlyGround": false, + "targetFilteringMethod": "CharacterOnly", + "targetFilteringTag": "No", + "requiresVisibilityForPosition": true, + "inviteOptionalAlly": false, + "slotTypes": [], + "recurrentEffect": "No", + "retargetAfterDeath": false, + "retargetActionType": "Bonus", + "poolFilterDiceNumber": 5, + "poolFilterDieType": "D8", + "trapRangeType": "Triggerer", + "targetConditionName": "", + "targetConditionAsset": null, + "targetSide": "Enemy", + "durationType": "Minute", + "durationParameter": 1, + "endOfEffect": "EndOfTurn", + "hasSavingThrow": true, + "disableSavingThrowOnAllies": false, + "savingThrowAbility": "Constitution", + "ignoreCover": true, + "grantedConditionOnSave": null, + "rollSaveOnlyIfRelevantForms": false, + "hasShoveRoll": false, + "createdByCharacter": true, + "difficultyClassComputation": "SpellCastingFeature", + "savingThrowDifficultyAbility": "Wisdom", + "fixedSavingThrowDifficultyClass": 10, + "savingThrowAffinitiesBySense": [], + "savingThrowAffinitiesByFamily": [], + "damageAffinitiesByFamily": [], + "advantageForEnemies": false, + "canBeDispersed": false, + "hasVelocity": false, + "velocityCellsPerRound": 2, + "velocityType": "AwayFromSourceOriginalPosition", + "restrictedCreatureFamilies": [], + "immuneCreatureFamilies": [], + "restrictedCharacterSizes": [], + "hasLimitedEffectPool": false, + "effectPoolAmount": 60, + "effectApplication": "All", + "effectFormFilters": [], + "effectForms": [ + { + "$type": "EffectForm, Assembly-CSharp", + "formType": "Damage", + "addBonusMode": "None", + "applyLevel": "No", + "levelType": "ClassLevel", + "levelMultiplier": 1, + "diceByLevelTable": [], + "createdByCharacter": true, + "createdByCondition": false, + "hasSavingThrow": true, + "savingThrowAffinity": "HalfDamage", + "dcModifier": 0, + "canSaveToCancel": false, + "saveOccurence": "EndOfTurn", + "damageForm": { + "$type": "DamageForm, Assembly-CSharp", + "versatile": false, + "diceNumber": 4, + "dieType": "D8", + "overrideWithBardicInspirationDie": false, + "versatileDieType": "D1", + "bonusDamage": 0, + "damageType": "DamageRadiant", + "ancestryType": "Sorcerer", + "healFromInflictedDamage": "Never", + "hitPointsFloor": 0, + "forceKillOnZeroHp": false, + "specialDeathCondition": null, + "ignoreFlyingCharacters": false, + "ignoreCriticalDoubleDice": false + }, + "hasFilterId": false, + "filterId": 0 + }, + { + "$type": "EffectForm, Assembly-CSharp", + "formType": "Condition", + "addBonusMode": "None", + "applyLevel": "No", + "levelType": "ClassLevel", + "levelMultiplier": 1, + "diceByLevelTable": [], + "createdByCharacter": true, + "createdByCondition": false, + "hasSavingThrow": true, + "savingThrowAffinity": "Negates", + "dcModifier": 0, + "canSaveToCancel": false, + "saveOccurence": "EndOfTurn", + "conditionForm": { + "$type": "ConditionForm, Assembly-CSharp", + "conditionDefinitionName": "ConditionBlinded", + "conditionDefinition": "Definition:ConditionBlinded:0a89e8d8ad8f21649b744191035357b3", + "operation": "Add", + "conditionsList": [], + "applyToSelf": false, + "forceOnSelf": false + }, + "hasFilterId": false, + "filterId": 0 + } + ], + "specialFormsDescription": "", + "effectAdvancement": { + "$type": "EffectAdvancement, Assembly-CSharp", + "effectIncrementMethod": "None", + "incrementMultiplier": 1, + "additionalTargetsPerIncrement": 0, + "additionalSubtargetsPerIncrement": 0, + "additionalDicePerIncrement": 0, + "additionalSpellLevelPerIncrement": 0, + "additionalSummonsPerIncrement": 0, + "additionalHPPerIncrement": 0, + "additionalTempHPPerIncrement": 0, + "additionalTargetCellsPerIncrement": 0, + "additionalItemBonus": 0, + "additionalWeaponDie": 0, + "alteredDuration": "None" + }, + "speedType": "Instant", + "speedParameter": 10.0, + "offsetImpactTimeBasedOnDistance": false, + "offsetImpactTimeBasedOnDistanceFactor": 0.1, + "offsetImpactTimePerTarget": 0.0, + "effectParticleParameters": { + "$type": "EffectParticleParameters, Assembly-CSharp", + "casterParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "81560ac3813217d4d9fd281d5e73c234", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "casterSelfParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "casterQuickSpellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "targetParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "effectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "effectSubTargetParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "zoneParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "beforeImpactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "impactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectImpactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceParticlePerIndex": "", + "activeEffectSurfaceParticlePerIndexCount": 0, + "emissiveBorderCellStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderCellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderCellEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "forceApplyZoneParticle": false, + "applyEmissionColorOnWeapons": false, + "emissionColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "emissionColorFadeInDuration": 0.0, + "emissionColorFadeOutDuration": 0.0 + }, + "effectAIParameters": { + "$type": "EffectAIParameters, Assembly-CSharp", + "aoeScoreMultiplier": 1.0, + "cooldownForCaster": 0, + "cooldownForBattle": 0, + "sortingScoreMultiplier": 1.0, + "dynamicCooldown": false + }, + "animationMagicEffect": "Animation0", + "lightCounterDispellsEffect": false, + "hideSavingThrowAnimation": false + }, + "delegatedToAction": false, + "surrogateToSpell": null, + "triggeredBySpecialMove": false, + "activationTime": "BonusAction", + "autoActivationRequiredTargetSenseType": "None", + "autoActivationRequiredTargetCreatureTag": "", + "autoActivationPowerTag": "", + "triggeringPower": null, + "copyTargetingFromTriggeringPower": false, + "reactionContext": "None", + "damageTypes": [], + "reactionName": "", + "reactionActingCharacterParamIdx": 0, + "reactionAttackerParamIdx": -1, + "hasCastingFailure": false, + "castingSuccessComputation": "CasterLevel", + "canUseInDialog": false, + "disableIfConditionIsOwned": null, + "disableIfTargetConditionIsOwned": null, + "rechargeRate": "AtWill", + "costPerUse": 1, + "spellcastingFeature": null, + "usesDetermination": "Fixed", + "abilityScoreDetermination": "Explicit", + "usesAbilityScoreName": "Charisma", + "fixedUsesPerRecharge": 1, + "abilityScore": "Intelligence", + "attackHitComputation": "AbilityScore", + "fixedAttackHit": 0, + "abilityScoreBonusToAttack": false, + "proficiencyBonusToAttack": false, + "uniqueInstance": false, + "showCasting": false, + "shortTitleOverride": "", + "overriddenPower": null, + "includeBaseDescription": false, + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "Feature/&PowerHolyWeaponTitle", + "description": "Feature/&PowerHolyWeaponDescription", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "998ab674-743b-5200-b721-4e4a915a38d8", + "contentPack": 9999, + "name": "PowerHolyWeapon" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/HolyWeapon.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/HolyWeapon.json new file mode 100644 index 0000000000..6d5b7ddfe1 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/HolyWeapon.json @@ -0,0 +1,415 @@ +{ + "$type": "SpellDefinition, Assembly-CSharp", + "spellsBundle": false, + "subspellsList": [], + "compactSubspellsTooltip": false, + "implemented": true, + "schoolOfMagic": "SchoolEvocation", + "spellLevel": 5, + "ritual": false, + "uniqueInstance": false, + "castingTime": "Action", + "reactionContext": "None", + "ritualCastingTime": "Action", + "requiresConcentration": true, + "effectDescription": { + "$type": "EffectDescription, Assembly-CSharp", + "rangeType": "Touch", + "rangeParameter": 0, + "halfDamageOnAMiss": false, + "hitAffinitiesByTargetTag": [], + "targetType": "Item", + "itemSelectionType": "Weapon", + "targetParameter": 1, + "targetParameter2": 2, + "emissiveBorder": "None", + "emissiveParameter": 1, + "requiresTargetProximity": false, + "targetProximityDistance": 6, + "targetExcludeCaster": false, + "canBePlacedOnCharacter": true, + "affectOnlyGround": false, + "targetFilteringMethod": "CharacterOnly", + "targetFilteringTag": "No", + "requiresVisibilityForPosition": true, + "inviteOptionalAlly": false, + "slotTypes": [], + "recurrentEffect": "No", + "retargetAfterDeath": false, + "retargetActionType": "Bonus", + "poolFilterDiceNumber": 5, + "poolFilterDieType": "D8", + "trapRangeType": "Triggerer", + "targetConditionName": "", + "targetConditionAsset": null, + "targetSide": "Enemy", + "durationType": "Hour", + "durationParameter": 1, + "endOfEffect": "EndOfTurn", + "hasSavingThrow": false, + "disableSavingThrowOnAllies": false, + "savingThrowAbility": "Dexterity", + "ignoreCover": false, + "grantedConditionOnSave": null, + "rollSaveOnlyIfRelevantForms": false, + "hasShoveRoll": false, + "createdByCharacter": true, + "difficultyClassComputation": "SpellCastingFeature", + "savingThrowDifficultyAbility": "Wisdom", + "fixedSavingThrowDifficultyClass": 15, + "savingThrowAffinitiesBySense": [], + "savingThrowAffinitiesByFamily": [], + "damageAffinitiesByFamily": [], + "advantageForEnemies": false, + "canBeDispersed": false, + "hasVelocity": false, + "velocityCellsPerRound": 2, + "velocityType": "AwayFromSourceOriginalPosition", + "restrictedCreatureFamilies": [], + "immuneCreatureFamilies": [], + "restrictedCharacterSizes": [], + "hasLimitedEffectPool": false, + "effectPoolAmount": 60, + "effectApplication": "All", + "effectFormFilters": [], + "effectForms": [ + { + "$type": "EffectForm, Assembly-CSharp", + "formType": "Condition", + "addBonusMode": "None", + "applyLevel": "No", + "levelType": "ClassLevel", + "levelMultiplier": 1, + "diceByLevelTable": [], + "createdByCharacter": true, + "createdByCondition": false, + "hasSavingThrow": false, + "savingThrowAffinity": "None", + "dcModifier": 0, + "canSaveToCancel": false, + "saveOccurence": "EndOfTurn", + "conditionForm": { + "$type": "ConditionForm, Assembly-CSharp", + "conditionDefinitionName": "ConditionHolyWeapon", + "conditionDefinition": "Definition:ConditionHolyWeapon:4abe721f-d87f-519b-a35d-152100b60eb4", + "operation": "Add", + "conditionsList": [], + "applyToSelf": true, + "forceOnSelf": true + }, + "hasFilterId": false, + "filterId": 0 + }, + { + "$type": "EffectForm, Assembly-CSharp", + "formType": "LightSource", + "addBonusMode": "None", + "applyLevel": "No", + "levelType": "ClassLevel", + "levelMultiplier": 1, + "diceByLevelTable": [], + "createdByCharacter": true, + "createdByCondition": false, + "hasSavingThrow": false, + "savingThrowAffinity": "None", + "dcModifier": 0, + "canSaveToCancel": false, + "saveOccurence": "EndOfTurn", + "lightSourceForm": { + "$type": "LightSourceForm, Assembly-CSharp", + "lightSourceType": "Basic", + "brightRange": 6, + "dimAdditionalRange": 6, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 0.9778601, + "b": 0.78039217, + "a": 1.0 + }, + "graphicsPrefabReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "3e4cdebecc6e0db469720619529e3dc2", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "applyToSelf": false, + "forceOnSelf": false + }, + "hasFilterId": false, + "filterId": 0 + }, + { + "$type": "EffectForm, Assembly-CSharp", + "formType": "ItemProperty", + "addBonusMode": "None", + "applyLevel": "No", + "levelType": "ClassLevel", + "levelMultiplier": 1, + "diceByLevelTable": [], + "createdByCharacter": true, + "createdByCondition": false, + "hasSavingThrow": false, + "savingThrowAffinity": "None", + "dcModifier": 0, + "canSaveToCancel": false, + "saveOccurence": "EndOfTurn", + "itemPropertyForm": { + "$type": "ItemPropertyForm, Assembly-CSharp", + "featureBySlotLevel": [ + { + "$type": "FeatureUnlockByLevel, Assembly-CSharp", + "featureDefinition": "Definition:AdditionalDamageHolyWeapon:a818b04d-36eb-554a-921b-a4e00c1ac999", + "level": 0 + } + ], + "usageLimitation": "Unlimited", + "useAmount": 0 + }, + "hasFilterId": false, + "filterId": 0 + } + ], + "specialFormsDescription": "", + "effectAdvancement": { + "$type": "EffectAdvancement, Assembly-CSharp", + "effectIncrementMethod": "None", + "incrementMultiplier": 1, + "additionalTargetsPerIncrement": 0, + "additionalSubtargetsPerIncrement": 0, + "additionalDicePerIncrement": 0, + "additionalSpellLevelPerIncrement": 0, + "additionalSummonsPerIncrement": 0, + "additionalHPPerIncrement": 0, + "additionalTempHPPerIncrement": 0, + "additionalTargetCellsPerIncrement": 0, + "additionalItemBonus": 0, + "additionalWeaponDie": 0, + "alteredDuration": "None" + }, + "speedType": "Instant", + "speedParameter": -1.0, + "offsetImpactTimeBasedOnDistance": false, + "offsetImpactTimeBasedOnDistanceFactor": 0.1, + "offsetImpactTimePerTarget": 0.0, + "effectParticleParameters": { + "$type": "EffectParticleParameters, Assembly-CSharp", + "casterParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "81560ac3813217d4d9fd281d5e73c234", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "casterSelfParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "casterQuickSpellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "81560ac3813217d4d9fd281d5e73c234", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "targetParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "effectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "effectSubTargetParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "zoneParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "beforeImpactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "impactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectImpactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceParticlePerIndex": "", + "activeEffectSurfaceParticlePerIndexCount": 0, + "emissiveBorderCellStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderCellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderCellEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "forceApplyZoneParticle": false, + "applyEmissionColorOnWeapons": false, + "emissionColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "emissionColorFadeInDuration": 0.0, + "emissionColorFadeOutDuration": 0.0 + }, + "effectAIParameters": { + "$type": "EffectAIParameters, Assembly-CSharp", + "aoeScoreMultiplier": 1.0, + "cooldownForCaster": 0, + "cooldownForBattle": 0, + "sortingScoreMultiplier": 1.0, + "dynamicCooldown": false + }, + "animationMagicEffect": "Animation0", + "lightCounterDispellsEffect": false, + "hideSavingThrowAnimation": false + }, + "aiParameters": { + "$type": "SpellAIParameters, Assembly-CSharp", + "learnPriority": "Low", + "preparePriority": "Low" + }, + "concentrationAction": "None", + "verboseComponent": true, + "somaticComponent": true, + "materialComponentType": "None", + "specificMaterialComponentTag": "Diamond", + "specificMaterialComponentCostGp": 100, + "specificMaterialComponentConsumed": true, + "terminateOnItemUnequip": false, + "displayConditionDuration": false, + "vocalSpellSemeType": "Buff", + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "Spell/&HolyWeaponTitle", + "description": "Spell/&HolyWeaponDescription", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "7892e11668806184fb7f0901204e6ddc", + "m_SubObjectName": "SpiritualWeapon", + "m_SubObjectType": "UnityEngine.Sprite, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "ed4a2ccf-c199-5f4c-bfc3-7bc8a584e4ce", + "contentPack": 9999, + "name": "HolyWeapon" +} \ No newline at end of file diff --git a/Documentation/Spells.md b/Documentation/Spells.md index 873ccbda3e..91bb62173d 100644 --- a/Documentation/Spells.md +++ b/Documentation/Spells.md @@ -1504,109 +1504,115 @@ Removes one detrimental condition, such as a charm or curse, or an effect that r Paralyzes a creature unless it succeeds a WIS saving throw. No effect on undead. -# 249. - *Immolation* © (V) level 5 Evocation [Concentration] [UB] +# 249. - Holy Weapon (V,S) level 5 Evocation [Concentration] [UB] + +**[Cleric, Paladin]** + +You imbue a weapon you touch with holy power. Until the spell ends, the weapon emits bright light in a 30-foot radius and dim light for an additional 30 feet. In addition, weapon attacks made with it deal an extra 2d8 radiant damage on a hit. If the weapon isn't already a magic weapon, it becomes one for the duration. As a bonus action on your turn, you can dismiss this spell and cause the weapon to emit a burst of radiance. Each creature of your choice that you can see within 30 feet of the weapon must make a Constitution saving throw. On a failed save, a creature takes 4d8 radiant damage, and it is blinded for 1 minute. On a successful save, a creature takes half as much damage and isn't blinded. At the end of each of its turns, a blinded creature can make a Constitution saving throw, ending the effect on itself on a success. + +# 250. - *Immolation* © (V) level 5 Evocation [Concentration] [UB] **[Sorcerer, Wizard]** Flames wreathe one creature you can see within range. The target must make a Dexterity saving throw. It takes 8d6 fire damage on a failed save, or half as much damage on a successful one. On a failed save, the target also burns for the spell's duration. The burning target sheds bright light in a 30-foot radius and dim light for an additional 30 feet and takes 8d6 fire damage at the start of each of its turns. -# 250. - Insect Plague (V,S) level 5 Conjuration [Concentration] [SOL] +# 251. - Insect Plague (V,S) level 5 Conjuration [Concentration] [SOL] **[Cleric, Druid, Sorcerer]** Summons a sphere of biting insects. -# 251. - Mantle of Thorns (V,S) level 5 Transmutation [Concentration] [UB] +# 252. - Mantle of Thorns (V,S) level 5 Transmutation [Concentration] [UB] **[Druid]** Surround yourself with an aura of thorns. Those that start or walk through take 2d8 piercing damage. This damage scales at higher levels by 1d8 per slot. -# 252. - Mass Cure Wounds (V,S) level 5 Evocation [SOL] +# 253. - Mass Cure Wounds (V,S) level 5 Evocation [SOL] **[Bard, Cleric, Druid]** Heals up to 6 creatures. -# 253. - Mind Twist (V,S) level 5 Enchantment [SOL] +# 254. - Mind Twist (V,S) level 5 Enchantment [SOL] **[Sorcerer, Warlock, Wizard]** Causes massive psychic damage to all creatures around you, and incapacitates them if they fail their INT saving throw. -# 254. - Raise Dead (M,V,S) level 5 Necromancy [SOL] +# 255. - Raise Dead (M,V,S) level 5 Necromancy [SOL] **[Bard, Cleric, Paladin]** Brings one creature back to life, up to 10 days after death. -# 255. - *Skill Empowerment* © (V,S) level 5 Divination [UB] +# 256. - *Skill Empowerment* © (V,S) level 5 Divination [UB] **[Artificer, Bard, Sorcerer, Wizard]** Your magic deepens a creature's understanding of its own talent. You touch one willing creature and give it expertise in one skill of your choice; until the spell ends, the creature doubles its proficiency bonus for ability checks it makes that use the chosen skill. For 1 hour, you have proficiency in the chosen skill. The spell ends early if you cast it again. You must choose a skill in which the target is proficient and that isn't already benefiting from expertise. -# 256. - Sonic Boom (V,S) level 5 Evocation [UB] +# 257. - Sonic Boom (V,S) level 5 Evocation [UB] **[Sorcerer, Wizard]** A small orb the same color as the balloon used appears at a point you choose within range then expands with a loud crack into an explosion of force. Each creature in a 30-foot radius must make a Strength saving throw. A target is pushed up to 30 feet away from the center and dealt 6d8 thunder damage on a failed save, or half as much damage and no movement on a successful one. -# 257. - *Steel Wind Strike* © (M,S) level 5 Conjuration [UB] +# 258. - *Steel Wind Strike* © (M,S) level 5 Conjuration [UB] **[Ranger, Wizard]** You flourish the weapon used in the casting and then vanish to strike like the wind. Choose up to five creatures you can see within range. Make a melee spell attack against each target. On a hit, a target takes 6d10 force damage. You can then teleport to an unoccupied space you can see within 5 feet of one of the targets you hit or missed. -# 258. - *Synaptic Static* © (V) level 5 Evocation [UB] +# 259. - *Synaptic Static* © (V) level 5 Evocation [UB] **[Bard, Sorcerer, Warlock, Wizard]** You choose a point within range and cause psychic energy to explode there. Each creature in a 20-foot-radius sphere centered on that point must make an Intelligence saving throw. A target takes 8d6 psychic damage on a failed save, or half as much damage on a successful After a failed save, a target has muddled thoughts for 1 minute. During that time, it rolls a d6 and subtracts the number rolled from all its attack rolls and ability checks. The target can make an Intelligence saving throw at the end of each of its turns, ending the effect on itself on a success. -# 259. - *Telekinesis* © (V,S) level 5 Transmutation [Concentration] [UB] +# 260. - *Telekinesis* © (V,S) level 5 Transmutation [Concentration] [UB] **[Sorcerer, Wizard]** You can try to move a Huge or smaller creature. Make an ability check with your spellcasting ability contested by the creature's Strength check. If you win the contest, you move the creature up to 30 feet in any direction, but not beyond the range of this spell. Until the end of your next turn, the creature is restrained in your telekinetic grip. On subsequent rounds, you can use your action to attempt to maintain your telekinetic grip on the creature by repeating the contest, or target a new creature, ending the restrained effect on the previously affected creature. -# 260. - Blade Barrier (V,S) level 6 Evocation [Concentration] [SOL] +# 261. - Blade Barrier (V,S) level 6 Evocation [Concentration] [SOL] **[Cleric]** Conjures a wall of razor sharp blades which causes 6d10 slashing damage to anyone crossing it -# 261. - Chain Lightning (V,S) level 6 Evocation [SOL] +# 262. - Chain Lightning (V,S) level 6 Evocation [SOL] **[Sorcerer, Wizard]** Target a creature with lightning, which can arc to 3 other targets within 6 cells. -# 262. - Circle of Death (M,V,S) level 6 Necromancy [SOL] +# 263. - Circle of Death (M,V,S) level 6 Necromancy [SOL] **[Sorcerer, Warlock, Wizard]** A sphere of negative energy causes Necrotic damage from a point you choose -# 263. - Conjure Fey (V,S) level 6 Conjuration [Concentration] [SOL] +# 264. - Conjure Fey (V,S) level 6 Conjuration [Concentration] [SOL] **[Druid, Warlock]** Conjures a fey creature of challenge rating 1 to 6 to fight alongside you. If you lose concentration, the creature stays but becomes hostile. -# 264. - Disintegrate (V,S) level 6 Transmutation [SOL] +# 265. - Disintegrate (V,S) level 6 Transmutation [SOL] **[Sorcerer, Wizard]** Causes massive force damage on the target, which can be disintegrated if reduced to 0 hit points -# 265. - Eyebite (V,S) level 6 Necromancy [Concentration] [SOL] +# 266. - Eyebite (V,S) level 6 Necromancy [Concentration] [SOL] **[Bard, Sorcerer, Warlock, Wizard]** Your eyes gain a specific property which can target a creature each turn -# 266. - *Fizban's Platinum Shield* © (M,V,S) level 6 Abjuration [Concentration] [UB] +# 267. - *Fizban's Platinum Shield* © (M,V,S) level 6 Abjuration [Concentration] [UB] **[Sorcerer, Wizard]** @@ -1616,85 +1622,85 @@ You create a field of silvery light that surrounds a creature of your choice wit • If the creature is subjected to an effect that allows it to make a Dexterity saving throw to take only half damage, the creature instead takes no damage if it succeeds on the saving throw, and only half damage if it fails. As a bonus action on subsequent turns, you can move the field to another creature within 60 feet of the field. -# 267. - Flash Freeze (V,S) level 6 Evocation [UB] +# 268. - Flash Freeze (V,S) level 6 Evocation [UB] **[Druid, Sorcerer, Warlock]** You attempt to encase a creature you can see within range in a prison of solid ice. The target must make a Dexterity saving throw. On a failed save, the target takes 10d6 cold damage and becomes restrained in layers of thick ice. On a successful save, the target takes half as much damage and is not restrained. The spell can only be used on creatures up to large size. To break out, the restrained target can make a Strength check as an action against your spell save DC. On success, the target escapes and is no longer restrained. When you cast this spell using a spell slot of 7th level or higher, the cold damage increases by 2d6 for each slot level above 6th. -# 268. - Freezing Sphere (V,S) level 6 Evocation [SOL] +# 269. - Freezing Sphere (V,S) level 6 Evocation [SOL] **[Wizard]** Toss a huge ball of cold energy that explodes on impact -# 269. - Globe Of Invulnerability (V,S) level 6 Abjuration [Concentration] [SOL] +# 270. - Globe Of Invulnerability (V,S) level 6 Abjuration [Concentration] [SOL] **[Sorcerer, Wizard]** A sphere surrounding you prevents any spell up to 5th level to affect anyone inside it. -# 270. - Harm (V,S) level 6 Necromancy [SOL] +# 271. - Harm (V,S) level 6 Necromancy [SOL] **[Cleric]** Inflicts devastating necrotic damage and reduces the maximum hit points accordingly. Cannot drop the target below 1 hit points -# 271. - Heal (V,S) level 6 Evocation [SOL] +# 272. - Heal (V,S) level 6 Evocation [SOL] **[Cleric, Druid]** Heals 70 hit points and also removes blindness and diseases -# 272. - Heroes Feast (M,V,S) level 6 Conjuration [SOL] +# 273. - Heroes Feast (M,V,S) level 6 Conjuration [SOL] **[Cleric, Druid]** Summons a feast which cures most ailments and grants immunity to poisonand being frightened, WIS save advantage, and increased maximum hitpoints -# 273. - Hilarity (V) level 6 Enchantment [Concentration] [SOL] +# 274. - Hilarity (V) level 6 Enchantment [Concentration] [SOL] **[Bard, Wizard]** Choose one target. They fall down laughing, becoming prone and incapacitated, and take psychic damage until they save at the end of one of their turns, or until the spell ends. -# 274. - Poison Wave (M,V,S) level 6 Evocation [UB] +# 275. - Poison Wave (M,V,S) level 6 Evocation [UB] **[Wizard]** A poisonous wave erupts from you, engulfing those close by. Each creature within the spell's radius must make a Constitution saving throw, taking 6d10 poison damage on a failure, or half as much damage on a successful one. A creature who fails their saving throw is also poisoned for 1 minute, and can repeat the saving throw at the end of each of its turn. When you cast this spell using a slot of 7th level or higher, the damage increases by 1d10 for each slot level above 6th. -# 275. - Ring of Blades (M,V,S) level 6 Conjuration [Concentration] [UB] +# 276. - Ring of Blades (M,V,S) level 6 Conjuration [Concentration] [UB] **[Wizard]** You raise both hands as you evoke six transparent blades around you as a bonus action. When you cast this spell, and as a bonus action on each subsequent turn, you can throw one of these blades at a creature within 60 feet from you. Make a ranged spell attack. On a hit, the target takes 4d10 force damage. When you cast this spell using a spell slot of 7th level or higher, the damage of each blade increases by 1d10 for each slot level above 6th. -# 276. - *Scatter* © (V) level 6 Conjuration [UB] +# 277. - *Scatter* © (V) level 6 Conjuration [UB] **[Sorcerer, Warlock, Wizard]** The air quivers around up to five creatures of your choice that you can see within range. An unwilling creature must succeed on a Wisdom saving throw to resist this spell. You teleport each affected target to an unoccupied space that you can see within 120 feet of you. That space must be on the ground or on a floor. -# 277. - Shelter from Energy (V,S) level 6 Abjuration [UB] +# 278. - Shelter from Energy (V,S) level 6 Abjuration [UB] **[Cleric, Druid, Sorcerer, Wizard]** Choose one of the following damage types: acid, cold, fire, lightning, necrotic, radiant, or thunder, and then choose up to six willing creatures that you can see within range. For 1 hour, targets have resistance to that damage type. When you cast this spell using a spell slot of 7th level or higher, you may target up to one additional willing creature for each slot level above 6th. -# 278. - Sunbeam (V,S) level 6 Evocation [Concentration] [SOL] +# 279. - Sunbeam (V,S) level 6 Evocation [Concentration] [SOL] **[Druid, Sorcerer, Wizard]** You conjure a line of radiance which can burn and blind creatures in the line of effect; undead and oozes save with disadvantage. The beam can be retargeted each turn -# 279. - *Tasha's Otherworldly Guise* © (M,V,S) level 6 Transmutation [Concentration] [UB] +# 280. - *Tasha's Otherworldly Guise* © (M,V,S) level 6 Transmutation [Concentration] [UB] **[Sorcerer, Warlock, Wizard]** Uttering an incantation, you draw on the magic of the Lower Planes or Upper Planes (your choice) to transform yourself. -# 280. - *Tenser's Transformation* © (V,S) level 6 Transmutation [Concentration] [UB] +# 281. - *Tenser's Transformation* © (V,S) level 6 Transmutation [Concentration] [UB] **[Wizard]** @@ -1706,49 +1712,49 @@ You endow yourself with endurance and martial prowess fueled by magic. Until the • You can attack twice, instead of once, when you take the Attack action on your turn. Immediately after the spell ends, you must succeed on a DC 15 Constitution saving throw or suffer one level of exhaustion. -# 281. - True Seeing (V,S) level 6 Divination [SOL] +# 282. - True Seeing (V,S) level 6 Divination [SOL] **[Bard, Cleric, Sorcerer, Warlock, Wizard]** A creature you touch gains True Sight for one hour -# 282. - Wall of Thorns (V,S) level 6 Conjuration [Concentration] [SOL] +# 283. - Wall of Thorns (V,S) level 6 Conjuration [Concentration] [SOL] **[Druid]** Creates a wall of tough of needle-sharp thorns, that hurts and slows every creature in it. -# 283. - Arcane Sword (M,V,S) level 7 Evocation [Concentration] [SOL] +# 284. - Arcane Sword (M,V,S) level 7 Evocation [Concentration] [SOL] **[Bard, Wizard]** Summon a weapon that fights for you. -# 284. - Conjure Celestial (V,S) level 7 Conjuration [Concentration] [SOL] +# 285. - Conjure Celestial (V,S) level 7 Conjuration [Concentration] [SOL] **[Cleric]** Conjures a celestial creature of challenge rating 4 that fights alongside you. If you lose concentration, the creature is dismissed. -# 285. - *Crown of Stars* © (V,S) level 7 Evocation [UB] +# 286. - *Crown of Stars* © (V,S) level 7 Evocation [UB] **[Sorcerer, Warlock, Wizard]** Seven star-like motes of light appear and orbit your head until the spell ends. You can use a bonus action to send one of the motes streaking toward one creature or object within 120 feet of you. When you do so, make a ranged spell attack. On a hit, the target takes 4d12 radiant damage. Whether you hit or miss, the mote is expended. The spell ends early if you expend the last mote. If you have four or more motes remaining, they shed bright light in a 30-foot radius and dim light for an additional 30 feet. If you have one to three motes remaining, they shed dim light in a 30-foot radius. When you cast this spell using a spell slot of 8th level or higher, the number of motes created increases by two for each slot level above 7th. -# 286. - Delayed Blast Fireball (V,S) level 7 Evocation [Concentration] [SOL] +# 287. - Delayed Blast Fireball (V,S) level 7 Evocation [Concentration] [SOL] **[Sorcerer, Wizard]** Conjures a ball of fire that grows more powerful with time, detonating when a creature enters its space or when the spell ends. -# 287. - Divine Word (V) level 7 Evocation [SOL] +# 288. - Divine Word (V) level 7 Evocation [SOL] **[Cleric]** Utter a divine word that inflicts various negative conditions on enemies you can see, based on their HP. Also banishes all celestials, elementals, feys, and fiends if they fail their saving throws. -# 288. - *Draconic Transformation* © (M,V,S) level 7 Transmutation [Concentration] [UB] +# 289. - *Draconic Transformation* © (M,V,S) level 7 Transmutation [Concentration] [UB] **[Druid, Sorcerer, Wizard]** @@ -1757,210 +1763,210 @@ With a roar, you draw on the magic of dragons to transform yourself, taking on d • When you cast this spell, and as a bonus action on subsequent turns for the duration, you can exhale shimmering energy in a 60-foot cone. Each creature in that area must make a Dexterity saving throw, taking 6d8 force damage on a failed save, or half as much damage on a successful one. • Incorporeal wings sprout from your back, giving you a flying speed of 60 feet. -# 289. - Finger of Death (V,S) level 7 Necromancy [SOL] +# 290. - Finger of Death (V,S) level 7 Necromancy [SOL] **[Sorcerer, Warlock, Wizard]** Send negative energy coursing through a creature within range. -# 290. - Fire Storm (V,S) level 7 Evocation [SOL] +# 291. - Fire Storm (V,S) level 7 Evocation [SOL] **[Cleric, Druid, Sorcerer]** Causes a wide wall of roaring flames to burst up wherever you choose within range. -# 291. - Gravity Slam (V,S) level 7 Transmutation [SOL] +# 292. - Gravity Slam (V,S) level 7 Transmutation [SOL] **[Druid, Sorcerer, Warlock, Wizard]** Increase gravity to slam everyone in a specific area onto the ground. -# 292. - Prismatic Spray (V,S) level 7 Evocation [SOL] +# 293. - Prismatic Spray (V,S) level 7 Evocation [SOL] **[Sorcerer, Wizard]** Each creature within the cone of effect is randomly affected by one or two (roll 8 on d8) rays with the following effects: -# 293. - Regenerate (V,S) level 7 Transmutation [SOL] +# 294. - Regenerate (V,S) level 7 Transmutation [SOL] **[Bard, Cleric, Druid]** Touch a creature and stimulate its natural healing ability. -# 294. - Rescue the Dying (V) level 7 Transmutation [UB] +# 295. - Rescue the Dying (V) level 7 Transmutation [UB] **[Cleric, Druid]** With a word, you call positive energy into the target's body to heal and ward it. The target regains a number of hit points equal to 4d10 + 30. It also gains temporary hit points equal to half that amount and resistance to all damage, both lasting until the end of your next turn. When you cast this spell using a spell slot of 8th level or higher, the healing increases by 2d10 for each slot level above 7th. -# 295. - Resurrection (M,V,S) level 7 Necromancy [SOL] +# 296. - Resurrection (M,V,S) level 7 Necromancy [SOL] **[Bard, Cleric, Druid]** Brings one creature back to life, up to 100 years after death. -# 296. - *Reverse Gravity* © (V,S) level 7 Transmutation [Concentration] [UB] +# 297. - *Reverse Gravity* © (V,S) level 7 Transmutation [Concentration] [UB] **[Druid, Sorcerer, Wizard]** This spell reverses gravity in a 50-foot-radius, 100-foot-high cylinder centered on a point within range. -# 297. - Symbol (V,S) level 7 Abjuration [SOL] +# 298. - Symbol (V,S) level 7 Abjuration [SOL] **[Bard, Cleric, Wizard]** Inscribe a glyph on a surface. When an enemy starts its turn in the area or enters it, the glyph's effect is applied in a sphere with a 12-cell radius. -# 298. - *Abi-Dalzim's Horrid Wilting* © (V,S) level 8 Necromancy [UB] +# 299. - *Abi-Dalzim's Horrid Wilting* © (V,S) level 8 Necromancy [UB] **[Sorcerer, Wizard]** You draw the moisture from every creature in a 30-foot cube centered on a point you choose within range. Each creature in that area must make a Constitution saving throw. Constructs and undead aren't affected, and plants and ice elementals make this saving throw with disadvantage. A creature takes 10d8 necrotic damage on a failed save, or half as much damage on a successful one. -# 299. - Divine Blade (V,S) level 8 Evocation [Concentration] [SOL] +# 300. - Divine Blade (V,S) level 8 Evocation [Concentration] [SOL] **[Cleric]** A glowing blade of pure energy springs from your hand. On a hit, the target takes 6d8 radiant damage and must roll a Wisdom saving throw to avoid being stunned until the end of its next turn. -# 300. - Dominate Monster (V,S) level 8 Enchantment [Concentration] [SOL] +# 301. - Dominate Monster (V,S) level 8 Enchantment [Concentration] [SOL] **[Bard, Sorcerer, Warlock, Wizard]** Grants you control over an enemy creature of any type. -# 301. - Earthquake (V,S) level 8 Evocation [Concentration] [SOL] +# 302. - Earthquake (V,S) level 8 Evocation [Concentration] [SOL] **[Cleric, Druid, Sorcerer]** You create a seismic disturbance that violently shakes the ground and the creatures standing on it for the duration of the spell. -# 302. - Feeblemind (V,S) level 8 Enchantment [SOL] +# 303. - Feeblemind (V,S) level 8 Enchantment [SOL] **[Bard, Druid, Warlock, Wizard]** You blast the mind of one creature, attempting to shatter its intellect and personality. The target takes 4d6 psychic damage and must make an Intelligence saving throw. On a failed save, the creature's Intelligence, Charisma and Wisdom scores become 1 and it is unable to cast spells. These effects last for 1 minute. -# 303. - Holy Aura (V,S) level 8 Abjuration [Concentration] [SOL] +# 304. - Holy Aura (V,S) level 8 Abjuration [Concentration] [SOL] **[Cleric]** Allies within 6 cells of you when you cast Holy Aura gain advantage on all saving throws, and other creatures have disadvantage on attack rolls against them until the spell ends. In addition, when a fiend or an undead hits an affected creature with a melee attack, they must succeed on a Constitution saving throw or be blinded until the spell ends. -# 304. - Incendiary Cloud (V,S) level 8 Conjuration [Concentration] [SOL] +# 305. - Incendiary Cloud (V,S) level 8 Conjuration [Concentration] [SOL] **[Sorcerer, Wizard]** A cloud of smoke appears in a sphere with a 4-cell radius. The cloud damages each creature inside it, and moves away from you each turn until the end of the spell's duration or until a moderate wind disperses the cloud. -# 305. - *Maddening Darkness* © (V) level 8 Evocation [Concentration] [UB] +# 306. - *Maddening Darkness* © (V) level 8 Evocation [Concentration] [UB] **[Warlock, Wizard]** Magical darkness spreads from a point you choose within range to fill a 60-foot-radius sphere until the spell ends. Shrieks, gibbering, and mad laughter can be heard within the sphere. On activation, and whenever a creature ends its turn in the sphere, it must make a Wisdom saving throw, taking 6d8 psychic damage on a failed save, or half as much damage on a successful one. -# 306. - Maze (V,S) level 8 Abjuration [Concentration] [SOL] +# 307. - Maze (V,S) level 8 Abjuration [Concentration] [SOL] **[Wizard]** You banish a creature that you can see within range into a labyrinthine demiplane. The target remains there for the spell's duration or until it escapes the maze. -# 307. - *Mind Blank* © (V,S) level 8 Transmutation [UB] +# 308. - *Mind Blank* © (V,S) level 8 Transmutation [UB] **[Bard, Wizard]** Until the spell ends, one willing creature you touch is immune to psychic damage, any effect that would sense its emotions or read its thoughts, divination spells, and the charmed condition. -# 308. - Power Word Stun (V) level 8 Enchantment [SOL] +# 309. - Power Word Stun (V) level 8 Enchantment [SOL] **[Bard, Sorcerer, Warlock, Wizard]** Overwhelm the mind of a creature that has 150 hit points or fewer, leaving it stunned. -# 309. - Soul Expulsion (V,S) level 8 Necromancy [UB] +# 310. - Soul Expulsion (V,S) level 8 Necromancy [UB] **[Cleric, Sorcerer, Wizard]** You blast a foe's soul with magical power, causing it to glow with otherwordly light. Choose one creature that you can see within range, which must make a Charisma saving throw. On a failed saving throw, the target takes 11d8 necrotic damage and is stunned until the start of your next turn. On a successful saving throw, the target takes half damage and isn't stunned. Each enemy other than the target that is within 60 feet of the target must make a Wisdom saving throw. On a failed save, a creature takes 7d8 radiant damage and has disadvantage on attack rolls until the end of your next turn. On a successful saving throw a creature takes half damage and nothing else. When this spell targets undead, the spell ignores any resistance or immunity to necrotic damage, and the target has disadvantage on the saving throw. When you cast this spell using a spell slot of 9th level, both the necrotic damage and radiant damage increase by 2d8. -# 310. - Spell Ward (V,S) level 8 Abjuration [Concentration] [SOL] +# 311. - Spell Ward (V,S) level 8 Abjuration [Concentration] [SOL] **[Cleric, Wizard]** Creates a mobile globe that is impenetrable to enemy spells cast from outside it. -# 311. - Sunburst (V,S) level 8 Evocation [SOL] +# 312. - Sunburst (V,S) level 8 Evocation [SOL] **[Druid, Sorcerer, Wizard]** Brilliant sunlight blazes in a sphere with a 12-cell radius. Each creature that fails a Constitution saving throw takes radiant damage and is blinded for 1 minute. Any darkness created by a spell in the area is dispelled. -# 312. - Thunderstorm (V,S) level 8 Transmutation [SOL] +# 313. - Thunderstorm (V,S) level 8 Transmutation [SOL] **[Cleric, Druid, Wizard]** You create a blast of thunder in a sphere that causes thunder and lightning damage to everyone, and can blind or stun those who fail a CON saving throw. -# 313. - Wild Shapes (V,S) level 8 Transmutation [Concentration] [SOL] +# 314. - Wild Shapes (V,S) level 8 Transmutation [Concentration] [SOL] Turns other creatures in to beasts for one day. -# 314. - *Foresight* © (V,S) level 9 Transmutation [UB] +# 315. - *Foresight* © (V,S) level 9 Transmutation [UB] **[Bard, Druid, Warlock, Wizard]** You touch a willing creature and bestow a limited ability to see into the immediate future. For the duration, the target can't be surprised and has advantage on attack rolls, ability checks, and saving throws. Additionally, other creatures have disadvantage on attack rolls against the target for the duration. -# 315. - *Invulnerability* © (M,V,S) level 9 Abjuration [Concentration] [UB] +# 316. - *Invulnerability* © (M,V,S) level 9 Abjuration [Concentration] [UB] **[Wizard]** You are immune to all damage until the spell ends. -# 316. - *Mass Heal* © (V,S) level 9 Transmutation [UB] +# 317. - *Mass Heal* © (V,S) level 9 Transmutation [UB] **[Cleric]** A flood of healing energy flows from you into injured creatures around you. You restore 120 hit points each to 6 creatures that you can see within range. Creatures healed by this spell are also cured of all diseases and any effect making them blinded or deafened. This spell has no effect on undead or constructs. -# 317. - *Meteor Swarm* © (V,S) level 9 Transmutation [UB] +# 318. - *Meteor Swarm* © (V,S) level 9 Transmutation [UB] **[Sorcerer, Wizard]** Blazing orbs of fire plummet to the ground at a single point you can see within range. Each creature in a 40-foot-radius sphere centered on the point you choose must make a Dexterity saving throw. The sphere spreads around corners. A creature takes 20d6 fire damage and 20d6 bludgeoning damage on a failed save, or half as much damage on a successful one. A creature in the area of more than one fiery burst is affected only once. -# 318. - *Power Word Heal* © (V,S) level 9 Enchantment [UB] +# 319. - *Power Word Heal* © (V,S) level 9 Enchantment [UB] **[Bard, Cleric]** A wave of healing energy washes over the creature you touch. The target regains all its hit points. If the creature is charmed, frightened, paralyzed, or stunned, the condition ends. If the creature is prone, it can use its reaction to stand up. This spell has no effect on undead or constructs. -# 319. - *Power Word Kill* © (V,S) level 9 Transmutation [UB] +# 320. - *Power Word Kill* © (V,S) level 9 Transmutation [UB] **[Bard, Sorcerer, Warlock, Wizard]** You utter a word of power that can compel one creature you can see within range to die instantly. If the creature you choose has 100 hit points or fewer, it dies. Otherwise, the spell has no effect. -# 320. - *Psychic Scream* © (S) level 9 Enchantment [UB] +# 321. - *Psychic Scream* © (S) level 9 Enchantment [UB] **[Bard, Sorcerer, Warlock, Wizard]** You unleash the power of your mind to blast the intellect of up to ten creatures of your choice that you can see within range. Each target must make an Intelligence saving throw. On a failed save, a target takes 14d6 psychic damage and is stunned for 1 minute. On a successful save, a target takes half as much damage and isn't stunned. A stunned target can make an Intelligence saving throw at the end of each of its turns. On a successful save, the stunning effect ends. -# 321. - *Shapechange* © (M,V,S) level 9 Transmutation [Concentration] [UB] +# 322. - *Shapechange* © (M,V,S) level 9 Transmutation [Concentration] [UB] **[Druid, Wizard]** You assume the form of a different creature for the duration. The new form can be of any creature with a challenge rating equal to your level or lower. -# 322. - *Time Stop* © (V) level 9 Transmutation [UB] +# 323. - *Time Stop* © (V) level 9 Transmutation [UB] **[Sorcerer, Wizard]** You briefly stop the flow of time for everyone but yourself. No time passes for other creatures, while you take 1d4+1 turns in a row, during which you can use actions and move as normal. This spell ends if one of the actions you use during this period, or any effects that you create during this period, affects a creature other than you. -# 323. - *Weird* © (V,S) level 9 Illusion [Concentration] [UB] +# 324. - *Weird* © (V,S) level 9 Illusion [Concentration] [UB] **[Warlock, Wizard]** diff --git a/SolastaUnfinishedBusiness/ChangelogHistory.txt b/SolastaUnfinishedBusiness/ChangelogHistory.txt index 3cf9459d19..d6d43007ca 100644 --- a/SolastaUnfinishedBusiness/ChangelogHistory.txt +++ b/SolastaUnfinishedBusiness/ChangelogHistory.txt @@ -1,6 +1,6 @@ 1.5.97.30: -- added Command [Bard, Cleric, Paladin], and Dissonant Whispers [Bard] spells +- added Command [Bard, Cleric, Paladin], Dissonant Whispers [Bard], and Holy Weapon [Cleric, Paladin] spells - added Interface > Game UI > 'Enable CTRL click-drag to bypass quest items checks on drop' setting - fixed Barbarian Sundering Blow interaction with Call Lightning, and other proxy like powers - fixed Bardic Inspiration, Indomitable Resistances, and Legendary Resistances saving throw logic @@ -11,6 +11,7 @@ - fixed Martial Commander coordinated defense to require an attack first [VANILLA] - fixed Party Editor to register/unregister powers from feats - fixed Path of the Wild Magic retribution, and Patron Archfey misty step to only react against enemy effects +- fixed Wrathful Smite to do a wisdom attribute check to get rid of frightened on turn start - improved ability checks to also allow reactions on success [Circle of the Cosmos woe] - improved Conversion Slots, and Shorthand versatilities to react on ability checks - improved Maneuvering Attack, and Martial Warlord strategic repositioning to use a run stance diff --git a/SolastaUnfinishedBusiness/Models/SpellsContext.cs b/SolastaUnfinishedBusiness/Models/SpellsContext.cs index 24a3813e36..99ba16fb6a 100644 --- a/SolastaUnfinishedBusiness/Models/SpellsContext.cs +++ b/SolastaUnfinishedBusiness/Models/SpellsContext.cs @@ -357,6 +357,7 @@ internal static void LateLoad() RegisterSpell(BuildEmpoweredKnowledge(), 0, SpellListBard, SpellListSorcerer, SpellListWizard, spellListInventorClass); RegisterSpell(FarStep, 0, SpellListSorcerer, SpellListWarlock, SpellListWizard); + RegisterSpell(BuildHolyWeapon(), 0, SpellListCleric, SpellListPaladin); RegisterSpell(BuildIncineration(), 0, SpellListSorcerer, SpellListWizard); RegisterSpell(MantleOfThorns, 0, SpellListDruid); RegisterSpell(SteelWhirlwind, 0, SpellListRanger, SpellListWizard); diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel05.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel05.cs index 10c3581fa5..c3ee3f7afa 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel05.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel05.cs @@ -71,6 +71,100 @@ internal static SpellDefinition BuildFarStep() #endregion + #region Holy Weapon + + internal static SpellDefinition BuildHolyWeapon() + { + const string NAME = "HolyWeapon"; + + var power = FeatureDefinitionPowerBuilder + .Create($"Power{NAME}") + .SetGuiPresentation(Category.Feature) + .SetUsesFixed(ActivationTime.BonusAction) + .SetShowCasting(false) + .SetEffectDescription( + EffectDescriptionBuilder + .Create() + .SetDurationData(DurationType.Minute, 1) + .SetTargetingData(Side.Enemy, RangeType.Self, 6, TargetType.IndividualsUnique) + .SetSavingThrowData(false, AttributeDefinitions.Constitution, true, + EffectDifficultyClassComputation.SpellCastingFeature) + .SetEffectForms( + EffectFormBuilder + .Create() + .HasSavingThrow(EffectSavingThrowType.HalfDamage) + .SetDamageForm(DamageTypeRadiant, 4, DieType.D8) + .Build(), + EffectFormBuilder + .Create() + .HasSavingThrow(EffectSavingThrowType.Negates) + .SetConditionForm(ConditionDefinitions.ConditionBlinded, + ConditionForm.ConditionOperation.Add) + .Build()) + .Build()) + .AddToDB(); + + var condition = ConditionDefinitionBuilder + .Create($"Condition{NAME}") + .SetGuiPresentationNoContent(true) + .SetSilent(Silent.WhenAddedOrRemoved) + .SetFeatures(power) + .AddCustomSubFeatures(AddUsablePowersFromCondition.Marker) + .AddToDB(); + + var additionalDamage = FeatureDefinitionAdditionalDamageBuilder + .Create($"AdditionalDamage{NAME}") + .SetGuiPresentationNoContent(true) + .SetNotificationTag("HolyWeapon") + .SetDamageDice(DieType.D6, 2) + .SetSpecificDamageType(DamageTypeRadiant) + .AddCustomSubFeatures( + new AddTagToWeapon( + TagsDefinitions.MagicalWeapon, TagsDefinitions.Criticity.Important, ValidatorsWeapon.AlwaysValid)) + .AddToDB(); + + var lightSourceForm = FaerieFire.EffectDescription.GetFirstFormOfType(EffectForm.EffectFormType.LightSource); + + var spell = SpellDefinitionBuilder + .Create(NAME) + .SetGuiPresentation(Category.Spell, SpiritualWeapon) + .SetSchoolOfMagic(SchoolOfMagicDefinitions.SchoolEvocation) + .SetSpellLevel(5) + .SetCastingTime(ActivationTime.Action) + .SetMaterialComponent(MaterialComponentType.None) + .SetSomaticComponent(true) + .SetVerboseComponent(true) + .SetVocalSpellSameType(VocalSpellSemeType.Buff) + .SetRequiresConcentration(true) + .SetEffectDescription( + EffectDescriptionBuilder + .Create() + .SetDurationData(DurationType.Hour, 1) + .SetTargetingData(Side.Enemy, RangeType.Touch, 0, TargetType.Item, + itemSelectionType: ActionDefinitions.ItemSelectionType.Weapon) + .SetEffectForms( + EffectFormBuilder.ConditionForm(condition, ConditionForm.ConditionOperation.Add, true, true), + EffectFormBuilder + .Create() + .SetLightSourceForm( + LightSourceType.Basic, 6, 6, + lightSourceForm.lightSourceForm.color, + lightSourceForm.lightSourceForm.graphicsPrefabReference) + .Build(), + EffectFormBuilder + .Create() + .SetItemPropertyForm( + ItemPropertyUsage.Unlimited, 0, new FeatureUnlockByLevel(additionalDamage, 0)) + .Build()) + .UseQuickAnimations() + .Build()) + .AddToDB(); + + return spell; + } + + #endregion + #region Mantle of Thorns internal static SpellDefinition BuildMantleOfThorns() diff --git a/SolastaUnfinishedBusiness/Translations/de/Spells/Spells05-de.txt b/SolastaUnfinishedBusiness/Translations/de/Spells/Spells05-de.txt index 92769cac39..fb5cdea8bc 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Spells/Spells05-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Spells/Spells05-de.txt @@ -2,10 +2,14 @@ Condition/&ConditionFarStepDescription=Mit einer Bonusaktion können Sie sich bi Condition/&ConditionFarStepTitle=Weiter Schritt Condition/&ConditionTelekinesisDescription=Sie können mit Ihrer Aktion versuchen, Ihren telekinetischen Griff um die Kreatur aufrechtzuerhalten, indem Sie den Wettkampf wiederholen, oder Sie können eine neue Kreatur anvisieren und so die Hemmwirkung auf die zuvor betroffene Kreatur beenden. Condition/&ConditionTelekinesisTitle=Telekinese +Feature/&PowerHolyWeaponDescription=Als Bonusaktion in deinem Zug kannst du diesen Zauber aufheben und die Waffe einen Strahlungsausbruch aussenden lassen. Jede Kreatur deiner Wahl, die du innerhalb von 30 Fuß der Waffe sehen kannst, muss einen Konstitutionsrettungswurf machen. Bei einem misslungenen Rettungswurf erleidet die Kreatur 4W8 Strahlungsschaden und ist für 1 Minute geblendet. Bei einem erfolgreichen Rettungswurf erleidet die Kreatur nur halb so viel Schaden und ist nicht geblendet. Am Ende jedes Zuges kann eine geblendete Kreatur einen Konstitutionsrettungswurf machen und bei Erfolg den Effekt auf sich selbst beenden. +Feature/&PowerHolyWeaponTitle=Heilige Waffe entlassen Feature/&PowerSteelWhirlwindTeleportDescription=Sie können sich zu einem freien, für Sie sichtbaren Bereich teleportieren, der sich im Umkreis von 1,5 m um eines der Ziele befindet, die Sie mit Ihrem „Steel Wind Strike“-Angriff getroffen oder verfehlt haben. Feature/&PowerSteelWhirlwindTeleportTitle=Teleport Feedback/&AdditionalDamageBanishingSmiteFormat=Smite verbannen! Feedback/&AdditionalDamageBanishingSmiteLine={0} fügt {1} durch einen verbannenden Schlag mehr Schaden zu (+{2}) +Feedback/&AdditionalDamageHolyWeaponFormat=Heilige Waffe! +Feedback/&AdditionalDamageHolyWeaponLine={0} fügt {1} mit heiliger Waffe mehr Schaden zu (+{2}) Proxy/&ProxyDawnDescription=Wenn Sie sich in einem Umkreis von 60 Fuß um den Zylinder befinden, können Sie ihn in Ihrem Zug als Bonusaktion bis zu 60 Fuß weit bewegen. Proxy/&ProxyDawnTitle=Dämmerung Reaction/&ReactionSpendPowerBundleEmpoweredKnowledgeDescription=Wählen Sie eine Fertigkeit aus, in der es Ihnen an Fachwissen mangelt. Für 1 Stunde verfügen Sie über Fachwissen in der gewählten Fertigkeit. @@ -28,6 +32,8 @@ Spell/&EmpoweredKnowledgeDescription=Deine Magie vertieft das Verständnis einer Spell/&EmpoweredKnowledgeTitle=Kompetenzerweiterung Spell/&FarStepDescription=Du teleportierst dich bis zu 60 Fuß weit an einen freien Ort, den du sehen kannst. In jedem deiner Züge, bevor der Zauber endet, kannst du eine Bonusaktion nutzen, um dich erneut auf diese Weise zu teleportieren. Spell/&FarStepTitle=Weiter Schritt +Spell/&HolyWeaponDescription=Du erfüllst eine Waffe, die du berührst, mit heiliger Kraft. Bis der Zauber endet, strahlt die Waffe helles Licht in einem Radius von 30 Fuß und schwaches Licht für weitere 30 Fuß aus. Außerdem verursachen mit ihr ausgeführte Waffenangriffe bei einem Treffer zusätzliche 2W8 Strahlungsschaden. Wenn die Waffe nicht bereits eine magische Waffe ist, wird sie für die Dauer zu einer. Als Bonusaktion in deinem Zug kannst du diesen Zauber aufheben und die Waffe einen Strahlungsausbruch aussenden lassen. Jede Kreatur deiner Wahl, die du innerhalb von 30 Fuß der Waffe sehen kannst, muss einen Konstitutionsrettungswurf machen. Bei einem misslungenen Rettungswurf erleidet die Kreatur 4W8 Strahlungsschaden und ist 1 Minute lang geblendet. Bei einem erfolgreichen Rettungswurf erleidet die Kreatur nur halb so viel Schaden und ist nicht geblendet. Am Ende jedes ihrer Züge kann eine geblendete Kreatur einen Konstitutionsrettungswurf machen und bei einem Erfolg den Effekt auf sich selbst beenden. +Spell/&HolyWeaponTitle=Heilige Waffe Spell/&IncinerationDescription=Flammen umhüllen eine Kreatur, die du in Reichweite sehen kannst. Das Ziel muss einen Rettungswurf für Geschicklichkeit machen. Bei einem misslungenen Rettungswurf erleidet es 8W6 Feuerschaden, bei einem erfolgreichen Rettungswurf nur halb so viel. Bei einem misslungenen Rettungswurf brennt das Ziel außerdem für die Dauer des Zaubers. Das brennende Ziel strahlt helles Licht in einem Radius von 30 Fuß und schwaches Licht für weitere 30 Fuß aus und erleidet zu Beginn jeder seiner Runden 8W6 Feuerschaden. Spell/&IncinerationTitle=Selbstverbrennung Spell/&MantleOfThornsDescription=Umgeben Sie sich mit einer Aura aus Dornen. Diejenigen, die durch sie hindurchgehen oder sie betreten, erleiden 2W8 Stichschaden. Dieser Schaden erhöht sich auf höheren Ebenen um 1W8 pro Slot. diff --git a/SolastaUnfinishedBusiness/Translations/en/Spells/Spells05-en.txt b/SolastaUnfinishedBusiness/Translations/en/Spells/Spells05-en.txt index d24fbd11ad..172b98f29a 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Spells/Spells05-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Spells/Spells05-en.txt @@ -2,10 +2,14 @@ Condition/&ConditionFarStepDescription=You can use a bonus action to teleport up Condition/&ConditionFarStepTitle=Far Step Condition/&ConditionTelekinesisDescription=You can use your action to attempt to maintain your telekinetic grip on the creature by repeating the contest, or target a new creature, ending the restrained effect on the previously affected creature. Condition/&ConditionTelekinesisTitle=Telekinesis +Feature/&PowerHolyWeaponDescription=As a bonus action on your turn, you can dismiss this spell and cause the weapon to emit a burst of radiance. Each creature of your choice that you can see within 30 feet of the weapon must make a Constitution saving throw. On a failed save, a creature takes 4d8 radiant damage, and it is blinded for 1 minute. On a successful save, a creature takes half as much damage and isn't blinded. At the end of each of its turns, a blinded creature can make a Constitution saving throw, ending the effect on itself on a success. +Feature/&PowerHolyWeaponTitle=Dismiss Holy Weapon Feature/&PowerSteelWhirlwindTeleportDescription=You can teleport to an unoccupied space you can see within 5 feet of one of the targets you hit or missed on your Steel Wind Strike attack. Feature/&PowerSteelWhirlwindTeleportTitle=Teleport Feedback/&AdditionalDamageBanishingSmiteFormat=Banishing Smite! Feedback/&AdditionalDamageBanishingSmiteLine={0} deals more damage to {1} through a banishing smite (+{2}) +Feedback/&AdditionalDamageHolyWeaponFormat=Holy Weapon! +Feedback/&AdditionalDamageHolyWeaponLine={0} deals more damage to {1} with holy weapon (+{2}) Proxy/&ProxyDawnDescription=If you're within 60 feet of the cylinder, you can move it up to 60 feet as a bonus action on your turn. Proxy/&ProxyDawnTitle=Dawn Reaction/&ReactionSpendPowerBundleEmpoweredKnowledgeDescription=Choose one skill in which you lack expertise. For 1 hour, you have expertise in the chosen skill. @@ -28,6 +32,8 @@ Spell/&EmpoweredKnowledgeDescription=Your magic deepens a creature's understandi Spell/&EmpoweredKnowledgeTitle=Skill Empowerment Spell/&FarStepDescription=You teleport up to 60 ft to an unoccupied space you can see. On each of your turns before the spell ends, you can use a bonus action to teleport in this way again. Spell/&FarStepTitle=Far Step +Spell/&HolyWeaponDescription=You imbue a weapon you touch with holy power. Until the spell ends, the weapon emits bright light in a 30-foot radius and dim light for an additional 30 feet. In addition, weapon attacks made with it deal an extra 2d8 radiant damage on a hit. If the weapon isn't already a magic weapon, it becomes one for the duration. As a bonus action on your turn, you can dismiss this spell and cause the weapon to emit a burst of radiance. Each creature of your choice that you can see within 30 feet of the weapon must make a Constitution saving throw. On a failed save, a creature takes 4d8 radiant damage, and it is blinded for 1 minute. On a successful save, a creature takes half as much damage and isn't blinded. At the end of each of its turns, a blinded creature can make a Constitution saving throw, ending the effect on itself on a success. +Spell/&HolyWeaponTitle=Holy Weapon Spell/&IncinerationDescription=Flames wreathe one creature you can see within range. The target must make a Dexterity saving throw. It takes 8d6 fire damage on a failed save, or half as much damage on a successful one. On a failed save, the target also burns for the spell's duration. The burning target sheds bright light in a 30-foot radius and dim light for an additional 30 feet and takes 8d6 fire damage at the start of each of its turns. Spell/&IncinerationTitle=Immolation Spell/&MantleOfThornsDescription=Surround yourself with an aura of thorns. Those that start or walk through take 2d8 piercing damage. This damage scales at higher levels by 1d8 per slot. diff --git a/SolastaUnfinishedBusiness/Translations/es/Spells/Spells05-es.txt b/SolastaUnfinishedBusiness/Translations/es/Spells/Spells05-es.txt index b72eaa7ce3..17202823f3 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Spells/Spells05-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Spells/Spells05-es.txt @@ -2,10 +2,14 @@ Condition/&ConditionFarStepDescription=Puedes usar una acción adicional para te Condition/&ConditionFarStepTitle=Paso lejano Condition/&ConditionTelekinesisDescription=Puedes usar tu acción para intentar mantener tu control telequinético sobre la criatura repitiendo la contienda, o seleccionar una nueva criatura y terminar el efecto restringido sobre la criatura previamente afectada. Condition/&ConditionTelekinesisTitle=Telequinesia +Feature/&PowerHolyWeaponDescription=Como acción adicional en tu turno, puedes descartar este hechizo y hacer que el arma emita una ráfaga de resplandor. Cada criatura de tu elección que puedas ver a 30 pies o menos del arma debe realizar una tirada de salvación de Constitución. Si la tirada falla, la criatura sufre 4d8 puntos de daño radiante y queda cegada durante 1 minuto. Si la tirada tiene éxito, la criatura sufre la mitad del daño y no queda cegada. Al final de cada uno de sus turnos, una criatura cegada puede realizar una tirada de salvación de Constitución, que pone fin al efecto sobre sí misma si tiene éxito. +Feature/&PowerHolyWeaponTitle=Descartar arma sagrada Feature/&PowerSteelWhirlwindTeleportDescription=Puedes teletransportarte a un espacio desocupado que puedas ver dentro de 5 pies de uno de los objetivos que alcanzaste o fallaste en tu ataque Golpe de viento de acero. Feature/&PowerSteelWhirlwindTeleportTitle=Teletransportarse Feedback/&AdditionalDamageBanishingSmiteFormat=¡Destierro de Smite! Feedback/&AdditionalDamageBanishingSmiteLine={0} inflige más daño a {1} mediante un castigo de destierro (+{2}) +Feedback/&AdditionalDamageHolyWeaponFormat=¡Arma sagrada! +Feedback/&AdditionalDamageHolyWeaponLine={0} inflige más daño a {1} con arma sagrada (+{2}) Proxy/&ProxyDawnDescription=Si estás a 60 pies o menos del cilindro, puedes moverlo hasta 60 pies como acción adicional en tu turno. Proxy/&ProxyDawnTitle=Amanecer Reaction/&ReactionSpendPowerBundleEmpoweredKnowledgeDescription=Elija una habilidad en la que le falte experiencia. Durante 1 hora, tendrás experiencia en la habilidad elegida. @@ -28,6 +32,8 @@ Spell/&EmpoweredKnowledgeDescription=Tu magia profundiza la comprensión de una Spell/&EmpoweredKnowledgeTitle=Empoderamiento de habilidades Spell/&FarStepDescription=Te teletransportas hasta 60 pies a un espacio desocupado que puedas ver. En cada uno de tus turnos antes de que termine el hechizo, puedes usar una acción adicional para teletransportarte de esta manera nuevamente. Spell/&FarStepTitle=Paso lejano +Spell/&HolyWeaponDescription=Imbuyes un arma que tocas con poder sagrado. Hasta que el conjuro termina, el arma emite una luz brillante en un radio de 30 pies y una luz tenue por otros 30 pies. Además, los ataques con armas realizados con ella infligen 2d8 puntos de daño radiante adicionales al impactar. Si el arma no es ya un arma mágica, se convierte en una durante el tiempo que dure el conjuro. Como acción adicional en tu turno, puedes anular este conjuro y hacer que el arma emita una explosión de resplandor. Cada criatura de tu elección que puedas ver a 30 pies del arma debe realizar una tirada de salvación de Constitución. Si falla, la criatura sufre 4d8 puntos de daño radiante y queda cegada durante 1 minuto. Si tiene éxito, la criatura sufre la mitad del daño y no queda cegada. Al final de cada uno de sus turnos, una criatura cegada puede realizar una tirada de salvación de Constitución, terminando el efecto sobre sí misma si tiene éxito. +Spell/&HolyWeaponTitle=Arma sagrada Spell/&IncinerationDescription=Las llamas envuelven a una criatura que puedas ver dentro del alcance. El objetivo debe realizar una tirada de salvación de Destreza. Recibe 8d6 puntos de daño por fuego si falla la tirada, o la mitad si tiene éxito. Si falla la tirada, el objetivo también arde durante la duración del conjuro. El objetivo en llamas emite una luz brillante en un radio de 30 pies y una luz tenue durante otros 30 pies y recibe 8d6 puntos de daño por fuego al comienzo de cada uno de sus turnos. Spell/&IncinerationTitle=Inmolación Spell/&MantleOfThornsDescription=Rodéate de un aura de espinas. Las que se abren paso o atraviesan reciben 2d8 de daño perforante. Este daño aumenta en niveles superiores en 1d8 por ranura. diff --git a/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells05-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells05-fr.txt index 83a3958d09..1a2536c6fc 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells05-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells05-fr.txt @@ -2,10 +2,14 @@ Condition/&ConditionFarStepDescription=Vous pouvez utiliser une action bonus pou Condition/&ConditionFarStepTitle=Pas lointain Condition/&ConditionTelekinesisDescription=Vous pouvez utiliser votre action pour tenter de maintenir votre emprise télékinétique sur la créature en répétant le concours, ou cibler une nouvelle créature, mettant fin à l'effet restreint sur la créature précédemment affectée. Condition/&ConditionTelekinesisTitle=Télékinésie +Feature/&PowerHolyWeaponDescription=En tant qu'action bonus à votre tour, vous pouvez annuler ce sort et faire en sorte que l'arme émette une explosion de rayonnement. Chaque créature de votre choix que vous pouvez voir à moins de 9 mètres de l'arme doit effectuer un jet de sauvegarde de Constitution. En cas d'échec, la créature subit 4d8 dégâts radiants et est aveuglée pendant 1 minute. En cas de réussite, la créature subit la moitié de ces dégâts et n'est pas aveuglée. À la fin de chacun de ses tours, une créature aveuglée peut effectuer un jet de sauvegarde de Constitution, mettant fin à l'effet sur elle-même en cas de réussite. +Feature/&PowerHolyWeaponTitle=Rejeter l'arme sacrée Feature/&PowerSteelWhirlwindTeleportDescription=Vous pouvez vous téléporter vers un espace inoccupé que vous pouvez voir à moins de 1,50 mètre de l'une des cibles que vous avez touchées ou manquées lors de votre attaque Frappe de vent d'acier. Feature/&PowerSteelWhirlwindTeleportTitle=Téléportation Feedback/&AdditionalDamageBanishingSmiteFormat=Bannir Smite ! Feedback/&AdditionalDamageBanishingSmiteLine={0} inflige plus de dégâts à {1} grâce à un coup de bannissement (+{2}) +Feedback/&AdditionalDamageHolyWeaponFormat=Arme sacrée ! +Feedback/&AdditionalDamageHolyWeaponLine={0} inflige plus de dégâts à {1} avec l'arme sacrée (+{2}) Proxy/&ProxyDawnDescription=Si vous êtes à moins de 60 pieds du cylindre, vous pouvez le déplacer jusqu'à 60 pieds en tant qu'action bonus pendant votre tour. Proxy/&ProxyDawnTitle=Aube Reaction/&ReactionSpendPowerBundleEmpoweredKnowledgeDescription=Choisissez une compétence dans laquelle vous manquez d'expertise. Pendant 1 heure, vous avez une expertise dans la compétence choisie. @@ -28,6 +32,8 @@ Spell/&EmpoweredKnowledgeDescription=Votre magie permet à une créature de mieu Spell/&EmpoweredKnowledgeTitle=Renforcement des compétences Spell/&FarStepDescription=Vous vous téléportez jusqu'à 18 mètres dans un espace inoccupé que vous pouvez voir. À chacun de vos tours avant la fin du sort, vous pouvez utiliser une action bonus pour vous téléporter de cette manière à nouveau. Spell/&FarStepTitle=Pas lointain +Spell/&HolyWeaponDescription=Vous imprégnez une arme que vous touchez d'un pouvoir sacré. Jusqu'à la fin du sort, l'arme émet une lumière vive dans un rayon de 9 mètres et une lumière tamisée sur 9 mètres supplémentaires. De plus, les attaques d'armes effectuées avec cette arme infligent 2d8 dégâts radiants supplémentaires en cas de succès. Si l'arme n'est pas déjà une arme magique, elle en devient une pendant la durée du sort. En tant qu'action bonus à votre tour, vous pouvez annuler ce sort et faire en sorte que l'arme émette une explosion de rayonnement. Chaque créature de votre choix que vous pouvez voir à 9 mètres ou moins de l'arme doit effectuer un jet de sauvegarde de Constitution. En cas d'échec, une créature subit 4d8 dégâts radiants et est aveuglée pendant 1 minute. En cas de réussite, une créature subit la moitié de ces dégâts et n'est pas aveuglée. À la fin de chacun de ses tours, une créature aveuglée peut effectuer un jet de sauvegarde de Constitution, mettant fin à l'effet sur elle-même en cas de réussite. +Spell/&HolyWeaponTitle=Arme sacrée Spell/&IncinerationDescription=Les flammes encerclent une créature visible à portée. La cible doit réussir un jet de sauvegarde de Dextérité. Elle subit 8d6 dégâts de feu en cas d'échec, ou la moitié de ces dégâts en cas de réussite. En cas d'échec, la cible brûle également pendant la durée du sort. La cible en feu projette une lumière vive dans un rayon de 9 mètres et une lumière tamisée sur 9 mètres supplémentaires et subit 8d6 dégâts de feu au début de chacun de ses tours. Spell/&IncinerationTitle=Immolation Spell/&MantleOfThornsDescription=Entourez-vous d'une aura d'épines. Ceux qui commencent ou traversent subissent 2d8 dégâts perforants. Ces dégâts augmentent aux niveaux supérieurs de 1d8 par emplacement. diff --git a/SolastaUnfinishedBusiness/Translations/it/Spells/Spells05-it.txt b/SolastaUnfinishedBusiness/Translations/it/Spells/Spells05-it.txt index 285ac39b94..d690873034 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Spells/Spells05-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Spells/Spells05-it.txt @@ -2,10 +2,14 @@ Condition/&ConditionFarStepDescription=Puoi usare un'azione bonus per teletraspo Condition/&ConditionFarStepTitle=Passo lontano Condition/&ConditionTelekinesisDescription=Puoi usare la tua azione per cercare di mantenere la presa telecinetica sulla creatura ripetendo la contesa, oppure prendere di mira una nuova creatura, ponendo fine all'effetto di contenimento sulla creatura precedentemente colpita. Condition/&ConditionTelekinesisTitle=Telecinesi +Feature/&PowerHolyWeaponDescription=Come azione bonus nel tuo turno, puoi interrompere questo incantesimo e far sì che l'arma emetta un'esplosione di radiosità. Ogni creatura a tua scelta che puoi vedere entro 30 piedi dall'arma deve effettuare un tiro salvezza su Costituzione. Se fallisce il tiro salvezza, una creatura subisce 4d8 danni radiosi e rimane accecata per 1 minuto. Se supera il tiro salvezza, una creatura subisce metà dei danni e non rimane accecata. Alla fine di ogni suo turno, una creatura accecata può effettuare un tiro salvezza su Costituzione, terminando l'effetto su se stessa in caso di successo. +Feature/&PowerHolyWeaponTitle=Rifiutare Arma Sacra Feature/&PowerSteelWhirlwindTeleportDescription=Puoi teletrasportarti in uno spazio libero e visibile entro 1,5 metri da uno dei bersagli colpiti o mancati con il tuo attacco Colpo di Vento d'Acciaio. Feature/&PowerSteelWhirlwindTeleportTitle=Teletrasporto Feedback/&AdditionalDamageBanishingSmiteFormat=Colpo espiatorio! Feedback/&AdditionalDamageBanishingSmiteLine={0} infligge più danni a {1} tramite un colpo di bando (+{2}) +Feedback/&AdditionalDamageHolyWeaponFormat=Arma sacra! +Feedback/&AdditionalDamageHolyWeaponLine={0} infligge più danni a {1} con arma sacra (+{2}) Proxy/&ProxyDawnDescription=Se ti trovi entro 60 piedi dal cilindro, puoi spostarlo fino a 60 piedi come azione bonus durante il tuo turno. Proxy/&ProxyDawnTitle=Alba Reaction/&ReactionSpendPowerBundleEmpoweredKnowledgeDescription=Scegli un'abilità in cui ti manca esperienza. Per 1 ora, hai esperienza nell'abilità scelta. @@ -28,6 +32,8 @@ Spell/&EmpoweredKnowledgeDescription=La tua magia approfondisce la comprensione Spell/&EmpoweredKnowledgeTitle=Potenziamento delle competenze Spell/&FarStepDescription=Ti teletrasporti fino a 60 piedi in uno spazio non occupato che puoi vedere. In ogni tuo turno prima che l'incantesimo finisca, puoi usare un'azione bonus per teletrasportarti di nuovo in questo modo. Spell/&FarStepTitle=Passo lontano +Spell/&HolyWeaponDescription=Infondi un'arma che tocchi con potere sacro. Finché l'incantesimo non termina, l'arma emette luce intensa in un raggio di 30 piedi e luce fioca per altri 30 piedi. Inoltre, gli attacchi con arma effettuati con essa infliggono 2d8 danni radianti extra a colpo andato a segno. Se l'arma non è già un'arma magica, lo diventa per la durata. Come azione bonus nel tuo turno, puoi interrompere questo incantesimo e far sì che l'arma emetta un'esplosione di radiosità. Ogni creatura a tua scelta che puoi vedere entro 30 piedi dall'arma deve effettuare un tiro salvezza su Costituzione. Se fallisce il tiro salvezza, una creatura subisce 4d8 danni radianti e rimane accecata per 1 minuto. Se supera il tiro salvezza, una creatura subisce metà dei danni e non rimane accecata. Alla fine di ogni suo turno, una creatura accecata può effettuare un tiro salvezza su Costituzione, terminando l'effetto su se stessa in caso di successo. +Spell/&HolyWeaponTitle=Arma sacra Spell/&IncinerationDescription=Le fiamme avvolgono una creatura che puoi vedere entro il raggio d'azione. Il bersaglio deve effettuare un tiro salvezza su Destrezza. Subisce 8d6 danni da fuoco se fallisce il tiro salvezza, o la metà dei danni se lo supera. Se fallisce il tiro salvezza, il bersaglio brucia anche per la durata dell'incantesimo. Il bersaglio in fiamme diffonde luce intensa in un raggio di 30 piedi e luce fioca per altri 30 piedi e subisce 8d6 danni da fuoco all'inizio di ogni suo turno. Spell/&IncinerationTitle=Immolazione Spell/&MantleOfThornsDescription=Circondati di un'aura di spine. Quelli che partono o ci camminano attraverso subiscono 2d8 danni perforanti. Questo danno aumenta ai livelli più alti di 1d8 per slot. diff --git a/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells05-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells05-ja.txt index c65d9bb560..c2803f489a 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells05-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells05-ja.txt @@ -2,10 +2,14 @@ Condition/&ConditionFarStepDescription=ボーナス アクションを使用し Condition/&ConditionFarStepTitle=ファーステップ Condition/&ConditionTelekinesisDescription=アクションを使用して、コンテストを繰り返してクリーチャーに対する念動力のグリップを維持しようとしたり、新しいクリーチャーをターゲットにして、以前に影響を受けたクリーチャーに対する拘束効果を終了したりすることができます。 Condition/&ConditionTelekinesisTitle=テレキネシス +Feature/&PowerHolyWeaponDescription=あなたのターンのボーナス アクションとして、この呪文を解除し、武器から光のバーストを発することができます。武器から 30 フィート以内にいる、あなたが見ることができる任意のクリーチャーは、すべて耐久力セーヴィング スローを行う必要があります。セーヴィングに失敗すると、クリーチャーは 4d8 の光ダメージを受け、1 分間盲目になります。セーヴィングに成功すると、クリーチャーは半分のダメージを受け、盲目になりません。盲目になったクリーチャーは、自分のターンの終了時に耐久力セーヴィング スローを行うことができ、成功すると自分自身への効果を終了します。 +Feature/&PowerHolyWeaponTitle=聖なる武器を破棄する Feature/&PowerSteelWhirlwindTeleportDescription=Steel Wind Strike 攻撃で命中または逃したターゲットの 1 つから 5 フィート以内に見える空いているスペースにテレポートできます。 Feature/&PowerSteelWhirlwindTeleportTitle=テレポート Feedback/&AdditionalDamageBanishingSmiteFormat=バニシング・スマイト! Feedback/&AdditionalDamageBanishingSmiteLine={0} は追放の打撃により {1} にさらにダメージを与えます (+{2}) +Feedback/&AdditionalDamageHolyWeaponFormat=聖なる武器! +Feedback/&AdditionalDamageHolyWeaponLine={0} は聖なる武器で {1} にさらにダメージを与えます (+{2}) Proxy/&ProxyDawnDescription=シリンダーから 60 フィート以内にいる場合は、自分のターンのボーナス アクションとしてシリンダーを最大 60 フィートまで移動できます。 Proxy/&ProxyDawnTitle=夜明け Reaction/&ReactionSpendPowerBundleEmpoweredKnowledgeDescription=専門知識が不足しているスキルを 1 つ選択します。1 時間の間、選択したスキルの専門知識が得られます。 @@ -28,6 +32,8 @@ Spell/&EmpoweredKnowledgeDescription=あなたの魔法は、クリーチャー Spell/&EmpoweredKnowledgeTitle=強化された知識 Spell/&FarStepDescription=最大 60 フィートの、目に見える空きスペースまでテレポートします。呪文が終了する前の各ターンで、ボーナス アクションを使用して、この方法で再びテレポートできます。 Spell/&FarStepTitle=ファーステップ +Spell/&HolyWeaponDescription=触れた武器に聖なる力を吹き込む。呪文が終了するまで、武器は半径 30 フィートに明るい光を放ち、さらに 30 フィートに薄暗い光を放つ。加えて、この武器による攻撃は命中時に追加で 2d8 の光輝ダメージを与える。武器がまだ魔法の武器でない場合、持続時間中は魔法の武器になる。自分のターンのボーナス アクションとして、この呪文を解除し、武器から光のバーストを発することができる。武器から 30 フィート以内にいる、自分が見ることができる任意のクリーチャーは、それぞれ【耐久力】セーヴィング スローを行わなければならない。セーヴィング スローに失敗すると、クリーチャーは 4d8 の光輝ダメージを受け、1 分間盲目になる。セーヴィング スローに成功すると、クリーチャーは半分のダメージしか受けず、盲目にならない。盲目になったクリーチャーは、自分のターンの終了時に【耐久力】セーヴィング スローを行うことができ、成功すると自分への効果を終了できる。 +Spell/&HolyWeaponTitle=聖なる武器 Spell/&IncinerationDescription=範囲内に見える 1 体の生き物が炎で覆われます。ターゲットは器用さセーヴィングスローを行わなければなりません。セーブに失敗した場合は 8d6 の火ダメージを受け、成功した場合はその半分のダメージを受けます。セーブに失敗すると、ターゲットも呪文の持続時間の間燃えます。燃えているターゲットは半径 30 フィートで明るい光を放ち、さらに 30 フィートで薄暗い光を放ち、各ターンの開始時に 8d6 の火災ダメージを受けます。 Spell/&IncinerationTitle=焼身自殺 Spell/&MantleOfThornsDescription=いばらのオーラで身を包みましょう。開始または通り抜けたものは 2d8 の貫通ダメージを受けます。このダメージは、高レベルではスロットごとに 1d8 ずつ増加します。 diff --git a/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells05-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells05-ko.txt index 07c85efa65..e446417704 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells05-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells05-ko.txt @@ -2,10 +2,14 @@ Condition/&ConditionFarStepDescription=보너스 액션을 사용하면 볼 수 Condition/&ConditionFarStepTitle=먼 단계 Condition/&ConditionTelekinesisDescription=당신은 행동을 사용하여 경쟁을 반복하여 생물에 대한 염력 그립을 유지하려고 시도하거나 새로운 생물을 목표로 삼아 이전에 영향을 받은 생물에 대한 억제 효과를 종료할 수 있습니다. Condition/&ConditionTelekinesisTitle=격동 +Feature/&PowerHolyWeaponDescription=턴의 보너스 액션으로, 이 주문을 해제하고 무기가 빛의 폭발을 방출하게 할 수 있습니다. 무기에서 30피트 이내에 보이는 선택한 각 생명체는 체력 세이빙 스로우를 해야 합니다. 세이브에 실패하면 생명체는 4d8의 광채 피해를 입고 1분 동안 실명합니다. 세이브에 성공하면 생명체는 절반의 피해를 입고 실명되지 않습니다. 각 턴이 끝날 때, 실명한 생명체는 체력 세이빙 스로우를 할 수 있으며, 성공하면 자신에게 미치는 효과가 끝납니다. +Feature/&PowerHolyWeaponTitle=신성한 무기를 해제합니다 Feature/&PowerSteelWhirlwindTeleportDescription=Steel Wind Strike 공격에서 적중하거나 놓친 대상 중 하나로부터 5피트 이내에 볼 수 있는 비어 있는 공간으로 순간이동할 수 있습니다. Feature/&PowerSteelWhirlwindTeleportTitle=텔레포트 Feedback/&AdditionalDamageBanishingSmiteFormat=배니싱 스마이트! Feedback/&AdditionalDamageBanishingSmiteLine={0}은 추방 강타(+{2})를 통해 {1}에 더 많은 피해를 입힙니다. +Feedback/&AdditionalDamageHolyWeaponFormat=신성한 무기! +Feedback/&AdditionalDamageHolyWeaponLine={0}은(는) 신성 무기로 {1}에게 더 많은 피해를 입힙니다. (+{2}) Proxy/&ProxyDawnDescription=당신이 실린더로부터 60피트 이내에 있다면, 당신의 차례에 보너스 행동으로 실린더를 최대 60피트까지 이동할 수 있습니다. Proxy/&ProxyDawnTitle=새벽 Reaction/&ReactionSpendPowerBundleEmpoweredKnowledgeDescription=전문 지식이 부족한 기술을 하나 선택하십시오. 1시간 동안 선택한 기술에 대한 전문 지식을 갖게 됩니다. @@ -28,6 +32,8 @@ Spell/&EmpoweredKnowledgeDescription=당신의 마법은 생물이 자신의 재 Spell/&EmpoweredKnowledgeTitle=강화된 지식 Spell/&FarStepDescription=당신은 당신이 볼 수 있는 빈 공간으로 최대 60피트까지 순간이동합니다. 주문이 끝나기 전 매 턴마다 보너스 액션을 사용하여 이런 방식으로 다시 순간이동할 수 있습니다. Spell/&FarStepTitle=먼 단계 +Spell/&HolyWeaponDescription=당신은 신성한 힘으로 당신이 만지는 무기에 마법을 부여합니다. 주문이 끝날 때까지 무기는 30피트 반경에 밝은 빛을 방출하고 추가로 30피트에 희미한 빛을 방출합니다. 추가로, 이 무기로 하는 무기 공격은 적중 시 추가로 2d8의 광채 피해를 입힙니다. 무기가 아직 마법 무기가 아니라면, 지속 시간 동안 마법 무기가 됩니다. 당신의 턴에 보너스 액션으로, 당신은 이 주문을 해제하고 무기가 광채를 폭발하게 할 수 있습니다. 당신이 무기에서 30피트 이내에 볼 수 있는 당신이 선택한 각 생물은 체력 구원 굴림을 해야 합니다. 구원에 실패하면, 생물은 4d8의 광채 피해를 입고 1분 동안 실명합니다. 구원에 성공하면, 생물은 절반의 피해를 입고 실명되지 않습니다. 각 턴이 끝날 때, 실명한 생물은 체력 구원 굴림을 할 수 있으며, 성공 시 자신에게 미치는 효과가 끝납니다. +Spell/&HolyWeaponTitle=신성한 무기 Spell/&IncinerationDescription=화염은 범위 내에서 볼 수 있는 생물 한 마리를 둘러싸고 있습니다. 대상은 민첩 내성 굴림을 해야 합니다. 저장에 실패하면 8d6의 화염 피해를 입으며, 성공하면 절반의 피해를 입습니다. 저장에 실패하면 대상도 주문 지속 시간 동안 불타게 됩니다. 불타는 대상은 30피트 반경에서 밝은 빛을 발산하고 추가로 30피트 동안 희미한 빛을 발산하며 각 턴이 시작될 때 8d6의 화염 피해를 입습니다. Spell/&IncinerationTitle=제물 Spell/&MantleOfThornsDescription=가시의 기운으로 자신을 둘러싸십시오. 시작하거나 통과하는 것은 2d8의 관통 피해를 입습니다. 이 피해는 더 높은 레벨에서 슬롯당 1d8씩 증가합니다. diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells05-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells05-pt-BR.txt index 9105fb1e67..ef812ddd46 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells05-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells05-pt-BR.txt @@ -2,10 +2,14 @@ Condition/&ConditionFarStepDescription=Você pode usar uma ação bônus para se Condition/&ConditionFarStepTitle=Passo Distante Condition/&ConditionTelekinesisDescription=Você pode usar sua ação para tentar manter seu controle telecinético sobre a criatura repetindo a disputa, ou escolher uma nova criatura como alvo, encerrando o efeito de restrição na criatura afetada anteriormente. Condition/&ConditionTelekinesisTitle=Telecinese +Feature/&PowerHolyWeaponDescription=Como uma ação bônus no seu turno, você pode dispensar esta magia e fazer com que a arma emita uma explosão de radiância. Cada criatura de sua escolha que você puder ver a até 30 pés da arma deve fazer um teste de resistência de Constituição. Em um teste falho, uma criatura sofre 4d8 de dano radiante e fica cega por 1 minuto. Em um teste bem-sucedido, uma criatura sofre metade do dano e não fica cega. No final de cada um de seus turnos, uma criatura cega pode fazer um teste de resistência de Constituição, encerrando o efeito sobre si mesma em um sucesso. +Feature/&PowerHolyWeaponTitle=Dispensar Arma Sagrada Feature/&PowerSteelWhirlwindTeleportDescription=Você pode se teletransportar para um espaço desocupado que você possa ver a até 1,5 metro de um dos alvos que você acertou ou errou em seu ataque Golpe do Vento de Aço. Feature/&PowerSteelWhirlwindTeleportTitle=Teleporte Feedback/&AdditionalDamageBanishingSmiteFormat=Banindo Smite! Feedback/&AdditionalDamageBanishingSmiteLine={0} causa mais dano a {1} por meio de um golpe de banimento (+{2}) +Feedback/&AdditionalDamageHolyWeaponFormat=Arma Sagrada! +Feedback/&AdditionalDamageHolyWeaponLine={0} causa mais dano a {1} com arma sagrada (+{2}) Proxy/&ProxyDawnDescription=Se você estiver a até 18 metros do cilindro, você pode movê-lo até 18 metros como uma ação bônus no seu turno. Proxy/&ProxyDawnTitle=Alvorecer Reaction/&ReactionSpendPowerBundleEmpoweredKnowledgeDescription=Escolha uma habilidade na qual você não tem expertise. Por 1 hora, você tem expertise na habilidade escolhida. @@ -28,6 +32,8 @@ Spell/&EmpoweredKnowledgeDescription=Sua magia aprofunda a compreensão de uma c Spell/&EmpoweredKnowledgeTitle=Empoderamento de Habilidades Spell/&FarStepDescription=Você se teleporta até 60 pés para um espaço desocupado que você pode ver. Em cada um dos seus turnos antes que a magia termine, você pode usar uma ação bônus para se teleportar dessa forma novamente. Spell/&FarStepTitle=Passo Distante +Spell/&HolyWeaponDescription=Você imbui uma arma que você toca com poder sagrado. Até que a magia termine, a arma emite luz brilhante em um raio de 30 pés e luz fraca por mais 30 pés. Além disso, ataques de arma feitos com ela causam 2d8 de dano radiante extra em um acerto. Se a arma ainda não for uma arma mágica, ela se torna uma pela duração. Como uma ação bônus no seu turno, você pode dispensar esta magia e fazer com que a arma emita uma explosão de radiância. Cada criatura de sua escolha que você puder ver a até 30 pés da arma deve fazer um teste de resistência de Constituição. Em uma falha, uma criatura sofre 4d8 de dano radiante e fica cega por 1 minuto. Em um sucesso, uma criatura sofre metade do dano e não fica cega. No final de cada um de seus turnos, uma criatura cega pode fazer um teste de resistência de Constituição, encerrando o efeito sobre si mesma em um sucesso. +Spell/&HolyWeaponTitle=Arma Sagrada Spell/&IncinerationDescription=Chamas envolvem uma criatura que você possa ver dentro do alcance. O alvo deve fazer um teste de resistência de Destreza. Ele sofre 8d6 de dano de fogo em uma falha na resistência, ou metade do dano em uma falha bem-sucedida. Em uma falha na resistência, o alvo também queima pela duração da magia. O alvo em chamas emite luz brilhante em um raio de 30 pés e luz fraca por mais 30 pés e sofre 8d6 de dano de fogo no início de cada um de seus turnos. Spell/&IncinerationTitle=Imolação Spell/&MantleOfThornsDescription=Cerque-se de uma aura de espinhos. Aqueles que começam ou andam por ali recebem 2d8 de dano perfurante. Esse dano escala em níveis mais altos em 1d8 por espaço. diff --git a/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells05-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells05-ru.txt index e32470665f..214cb86985 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells05-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells05-ru.txt @@ -2,10 +2,14 @@ Condition/&ConditionFarStepDescription=Бонусным действием вы Condition/&ConditionFarStepTitle=Далёкий шаг Condition/&ConditionTelekinesisDescription=Вы можете действием пытаться поддерживать телекинетическую хватку существа, повторяя встречную проверку, или выбрать новое существо, оканчивая эффект опутывания на предыдущей цели. Condition/&ConditionTelekinesisTitle=Телекинез +Feature/&PowerHolyWeaponDescription=Бонусным действием в свой ход вы можете отклонить это заклинание и заставить оружие испустить вспышку сияния. Каждое существо по вашему выбору, которое вы можете видеть в пределах 30 футов от оружия, должно совершить спасбросок Телосложения. При провале спасброска существо получает 4d8 урона излучением и ослепляется на 1 минуту. При успешном спасброске существо получает половину урона и не ослепляется. В конце каждого своего хода ослепленное существо может совершить спасбросок Телосложения, заканчивая эффект на себе при успехе. +Feature/&PowerHolyWeaponTitle=Отклонить Священное Оружие Feature/&PowerSteelWhirlwindTeleportDescription=Вы можете телепортироваться в свободное пространство, которое вы можете видеть в пределах 5 футов от одной из целей, по которой вы попали или промахнулись Ударом стального ветра. Feature/&PowerSteelWhirlwindTeleportTitle=Телепортироваться Feedback/&AdditionalDamageBanishingSmiteFormat=Изгоняющая кара! Feedback/&AdditionalDamageBanishingSmiteLine={0} наносит больше урона {1} с помощью изгоняющей кары (+{2}) +Feedback/&AdditionalDamageHolyWeaponFormat=Священное оружие! +Feedback/&AdditionalDamageHolyWeaponLine={0} наносит больше урона {1} святым оружием (+{2}) Proxy/&ProxyDawnDescription=Если вы находитесь в пределах 60 футов от цилиндра, в свой ход вы можете бонусным действием переместить его на расстояние до 60 футов. Proxy/&ProxyDawnTitle=Рассвет Reaction/&ReactionSpendPowerBundleEmpoweredKnowledgeDescription=Выберите один навык, в котором вам не хватает компетентности. Вы получаете компетентность в выбранном навыке на 1 час. @@ -28,6 +32,8 @@ Spell/&EmpoweredKnowledgeDescription=Ваша магия углубляет по Spell/&EmpoweredKnowledgeTitle=Усиление навыка Spell/&FarStepDescription=Вы телепортируетесь до 60 футов в свободное пространство, видимое вами. Вы можете каждый ваш ход до окончания действия заклинания бонусным действием телепортироваться таким образом снова. Spell/&FarStepTitle=Далёкий шаг +Spell/&HolyWeaponDescription=Вы наделяете оружие, к которому прикасаетесь, святой силой. Пока заклинание действует, оружие излучает яркий свет в радиусе 30 футов и тусклый свет в радиусе дополнительных 30 футов. Кроме того, атаки оружием, сделанные с его помощью, наносят дополнительный урон излучением 2d8 при попадании. Если оружие еще не является магическим оружием, оно становится таковым на время действия. В качестве бонусного действия в свой ход вы можете отменить это заклинание и заставить оружие испустить вспышку сияния. Каждое существо по вашему выбору, которое вы можете видеть в пределах 30 футов от оружия, должно совершить спасбросок Телосложения. При провале спасброска существо получает 4d8 урона излучением и ослепляется на 1 минуту. При успешном спасброске существо получает половину урона и не ослепляется. В конце каждого своего хода ослепленное существо может совершить спасбросок Телосложения, прекращая эффект на себе при успехе. +Spell/&HolyWeaponTitle=Священное Оружие Spell/&IncinerationDescription=Одно существо, которое вы можете видеть в пределах дистанции, охватывает пламя. Цель должна совершить спасбросок Ловкости. Существо получает 8d6 урона огнём при провале или половину этого урона при успехе. Кроме того, при провале цель воспламеняется на время действия заклинания. Горящая цель испускает яркий свет в пределах 30 футов и тусклый свет в пределах ещё 30 футов и получает 8d6 урона огнём в начале каждого своего хода. Spell/&IncinerationTitle=Испепеление Spell/&MantleOfThornsDescription=Окружите себя аурой шипов. Те, кто начинает движение в её области или проходит сквозь неё, получают 2d8 колющего урона. На более высоких уровнях этот урон увеличивается на 1d8 за каждый уровень ячейки заклинания выше 5-го. diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells05-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells05-zh-CN.txt index d792735441..43b7db7d89 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells05-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells05-zh-CN.txt @@ -2,10 +2,14 @@ Condition/&ConditionFarStepDescription=你可以使用一个附赠动作将最 Condition/&ConditionFarStepTitle=渺远步 Condition/&ConditionTelekinesisDescription=你可以用你的动作尝试通过重复对抗来维持对生物的心灵控制,或者瞄准一个新生物,结束对先前受影响的生物的束缚效果。 Condition/&ConditionTelekinesisTitle=心灵遥控 +Feature/&PowerHolyWeaponDescription=作为你回合的奖励行动,你可以解除此法术并使武器发出一阵光芒。你选择的、在武器 30 英尺范围内能看到的每个生物都必须进行体质豁免检定。如果豁免失败,生物将受到 4d8 光辉伤害,并且失明 1 分钟。如果豁免成功,生物将受到一半伤害,并且不会失明。在每个回合结束时,失明的生物可以进行体质豁免检定,如果成功,则结束对自己的影响。 +Feature/&PowerHolyWeaponTitle=解除神圣武器 Feature/&PowerSteelWhirlwindTeleportDescription=你可以传送到一个未占据的空间,你可以传送到一个未被占据的、你可以看到的、你命中活失手目标之一的 5 尺内的一处空间。 Feature/&PowerSteelWhirlwindTeleportTitle=传送术 Feedback/&AdditionalDamageBanishingSmiteFormat=放逐斩! Feedback/&AdditionalDamageBanishingSmiteLine={0} 通过放逐斩对 {1} 造成更多伤害 (+{2}) +Feedback/&AdditionalDamageHolyWeaponFormat=聖器! +Feedback/&AdditionalDamageHolyWeaponLine={0} 使用神圣武器对 {1} 造成更多伤害 (+{2}) Proxy/&ProxyDawnDescription=如果你距离圆柱体 60 尺以内,你在自己回合内可以用附赠动作将其移动到 60 尺。 Proxy/&ProxyDawnTitle=拂晓 Reaction/&ReactionSpendPowerBundleEmpoweredKnowledgeDescription=选择一项你不擅长的技能。1 小时内,你将精通所选技能。 @@ -28,6 +32,8 @@ Spell/&EmpoweredKnowledgeDescription=你的魔法加深了生物对自己天赋 Spell/&EmpoweredKnowledgeTitle=知识赋能 Spell/&FarStepDescription=你传送到最远 60 尺的一个你能看到的未被占据的空间。在法术结束前的每个回合中,你都可以使用附赠动作再次以这种方式传送。 Spell/&FarStepTitle=渺远步 +Spell/&HolyWeaponDescription=你为触碰的武器注入神圣力量。在法术结束前,该武器会在 30 英尺半径范围内发出强光,并在额外 30 英尺范围内发出昏暗光线。此外,用该武器进行的武器攻击命中时会造成额外的 2d8 辐射伤害。如果该武器之前不是魔法武器,则会在法术持续时间内变为魔法武器。作为你回合的奖励动作,你可以解除此法术并让武器发出一阵光芒。你在武器 30 英尺范围内可以看到每个你选择的生物都必须进行体质豁免检定。如果豁免失败,生物将受到 4d8 辐射伤害,并且失明 1 分钟。如果豁免成功,生物受到的伤害减半并且不会失明。在每个回合结束时,失明的生物可以进行体质豁免检定,成功则结束对自己的影响。 +Spell/&HolyWeaponTitle=神圣武器 Spell/&IncinerationDescription=火焰包围着范围内你能看到的一种生物。目标必须进行敏捷豁免检定。豁免失败会造成 8d6 火焰伤害,成功豁免则受到一半伤害。如果豁免失败,目标也会在法术持续时间内燃烧。燃烧的目标会在 30 尺半径内发出明亮的光芒,并在额外 30 尺的范围内发出昏暗的光芒,并在每个回合开始时受到 8d6 火焰伤害。 Spell/&IncinerationTitle=焚烧术 Spell/&MantleOfThornsDescription=用荆棘的灵光包围自己。那些开始或穿过的人会受到 2d8 穿刺伤害。这种伤害在更高的环阶上按每环 1d8 的比例增加。 From cea2308eecd573569d87cb0b3f4ced1e8b88da71 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sun, 8 Sep 2024 21:47:39 -0700 Subject: [PATCH 085/212] improve Holy Weapon behavior --- .../AdditionalDamageHolyWeapon.json | 12 +- .../PowerHolyWeapon.json | 12 +- .../SpellDefinition/HolyWeapon.json | 56 ++--- SolastaUnfinishedBusiness/Displays/_ModUi.cs | 1 + .../Spells/SpellBuildersLevel05.cs | 201 ++++++++++-------- .../Translations/de/Spells/Spells05-de.txt | 2 + .../Translations/en/Spells/Spells05-en.txt | 2 + .../Translations/es/Spells/Spells05-es.txt | 2 + .../Translations/fr/Spells/Spells05-fr.txt | 2 + .../Translations/it/Spells/Spells05-it.txt | 2 + .../Translations/ja/Spells/Spells05-ja.txt | 2 + .../Translations/ko/Spells/Spells05-ko.txt | 2 + .../pt-BR/Spells/Spells05-pt-BR.txt | 2 + .../Translations/ru/Spells/Spells05-ru.txt | 2 + .../zh-CN/Spells/Spells05-zh-CN.txt | 2 + 15 files changed, 168 insertions(+), 134 deletions(-) diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAdditionalDamage/AdditionalDamageHolyWeapon.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAdditionalDamage/AdditionalDamageHolyWeapon.json index ebd115b9c5..3e78e52f9a 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAdditionalDamage/AdditionalDamageHolyWeapon.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAdditionalDamage/AdditionalDamageHolyWeapon.json @@ -47,14 +47,14 @@ "computeDescription": false, "guiPresentation": { "$type": "GuiPresentation, Assembly-CSharp", - "hidden": true, - "title": "Feature/&NoContentTitle", - "description": "Feature/&NoContentTitle", + "hidden": false, + "title": "Feature/&AdditionalDamageHolyWeaponTitle", + "description": "Feature/&AdditionalDamageHolyWeaponDescription", "spriteReference": { "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": null, - "m_SubObjectType": null + "m_AssetGUID": "7892e11668806184fb7f0901204e6ddc", + "m_SubObjectName": "SpiritualWeapon", + "m_SubObjectType": "UnityEngine.Sprite, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" }, "color": { "$type": "UnityEngine.Color, UnityEngine.CoreModule", diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerHolyWeapon.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerHolyWeapon.json index 4cd494ecd6..ba78693d60 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerHolyWeapon.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerHolyWeapon.json @@ -3,12 +3,12 @@ "effectDescription": { "$type": "EffectDescription, Assembly-CSharp", "rangeType": "Self", - "rangeParameter": 6, + "rangeParameter": 0, "halfDamageOnAMiss": false, "hitAffinitiesByTargetTag": [], - "targetType": "IndividualsUnique", + "targetType": "Sphere", "itemSelectionType": "None", - "targetParameter": 1, + "targetParameter": 6, "targetParameter2": 2, "emissiveBorder": "None", "emissiveParameter": 1, @@ -367,9 +367,9 @@ "description": "Feature/&PowerHolyWeaponDescription", "spriteReference": { "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": null, - "m_SubObjectType": null + "m_AssetGUID": "7892e11668806184fb7f0901204e6ddc", + "m_SubObjectName": "SpiritualWeapon", + "m_SubObjectType": "UnityEngine.Sprite, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" }, "color": { "$type": "UnityEngine.Color, UnityEngine.CoreModule", diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/HolyWeapon.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/HolyWeapon.json index 6d5b7ddfe1..809a8ccdc6 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/HolyWeapon.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/HolyWeapon.json @@ -19,7 +19,7 @@ "halfDamageOnAMiss": false, "hitAffinitiesByTargetTag": [], "targetType": "Item", - "itemSelectionType": "Weapon", + "itemSelectionType": "EquippedNoLightSource", "targetParameter": 1, "targetParameter2": 2, "emissiveBorder": "None", @@ -73,33 +73,6 @@ "effectApplication": "All", "effectFormFilters": [], "effectForms": [ - { - "$type": "EffectForm, Assembly-CSharp", - "formType": "Condition", - "addBonusMode": "None", - "applyLevel": "No", - "levelType": "ClassLevel", - "levelMultiplier": 1, - "diceByLevelTable": [], - "createdByCharacter": true, - "createdByCondition": false, - "hasSavingThrow": false, - "savingThrowAffinity": "None", - "dcModifier": 0, - "canSaveToCancel": false, - "saveOccurence": "EndOfTurn", - "conditionForm": { - "$type": "ConditionForm, Assembly-CSharp", - "conditionDefinitionName": "ConditionHolyWeapon", - "conditionDefinition": "Definition:ConditionHolyWeapon:4abe721f-d87f-519b-a35d-152100b60eb4", - "operation": "Add", - "conditionsList": [], - "applyToSelf": true, - "forceOnSelf": true - }, - "hasFilterId": false, - "filterId": 0 - }, { "$type": "EffectForm, Assembly-CSharp", "formType": "LightSource", @@ -168,6 +141,33 @@ }, "hasFilterId": false, "filterId": 0 + }, + { + "$type": "EffectForm, Assembly-CSharp", + "formType": "Condition", + "addBonusMode": "None", + "applyLevel": "No", + "levelType": "ClassLevel", + "levelMultiplier": 1, + "diceByLevelTable": [], + "createdByCharacter": true, + "createdByCondition": false, + "hasSavingThrow": false, + "savingThrowAffinity": "None", + "dcModifier": 0, + "canSaveToCancel": false, + "saveOccurence": "EndOfTurn", + "conditionForm": { + "$type": "ConditionForm, Assembly-CSharp", + "conditionDefinitionName": "ConditionHolyWeapon", + "conditionDefinition": "Definition:ConditionHolyWeapon:4abe721f-d87f-519b-a35d-152100b60eb4", + "operation": "Add", + "conditionsList": [], + "applyToSelf": true, + "forceOnSelf": false + }, + "hasFilterId": false, + "filterId": 0 } ], "specialFormsDescription": "", diff --git a/SolastaUnfinishedBusiness/Displays/_ModUi.cs b/SolastaUnfinishedBusiness/Displays/_ModUi.cs index 71098ea0cd..f23e7c4117 100644 --- a/SolastaUnfinishedBusiness/Displays/_ModUi.cs +++ b/SolastaUnfinishedBusiness/Displays/_ModUi.cs @@ -156,6 +156,7 @@ internal static class ModUi "GiftOfAlacrity", "GravitySinkhole", "HeroicInfusion", + "HolyWeapon", "HungerOfTheVoid", "IceBlade", "Incineration", diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel05.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel05.cs index c3ee3f7afa..05276501a9 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel05.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel05.cs @@ -71,100 +71,6 @@ internal static SpellDefinition BuildFarStep() #endregion - #region Holy Weapon - - internal static SpellDefinition BuildHolyWeapon() - { - const string NAME = "HolyWeapon"; - - var power = FeatureDefinitionPowerBuilder - .Create($"Power{NAME}") - .SetGuiPresentation(Category.Feature) - .SetUsesFixed(ActivationTime.BonusAction) - .SetShowCasting(false) - .SetEffectDescription( - EffectDescriptionBuilder - .Create() - .SetDurationData(DurationType.Minute, 1) - .SetTargetingData(Side.Enemy, RangeType.Self, 6, TargetType.IndividualsUnique) - .SetSavingThrowData(false, AttributeDefinitions.Constitution, true, - EffectDifficultyClassComputation.SpellCastingFeature) - .SetEffectForms( - EffectFormBuilder - .Create() - .HasSavingThrow(EffectSavingThrowType.HalfDamage) - .SetDamageForm(DamageTypeRadiant, 4, DieType.D8) - .Build(), - EffectFormBuilder - .Create() - .HasSavingThrow(EffectSavingThrowType.Negates) - .SetConditionForm(ConditionDefinitions.ConditionBlinded, - ConditionForm.ConditionOperation.Add) - .Build()) - .Build()) - .AddToDB(); - - var condition = ConditionDefinitionBuilder - .Create($"Condition{NAME}") - .SetGuiPresentationNoContent(true) - .SetSilent(Silent.WhenAddedOrRemoved) - .SetFeatures(power) - .AddCustomSubFeatures(AddUsablePowersFromCondition.Marker) - .AddToDB(); - - var additionalDamage = FeatureDefinitionAdditionalDamageBuilder - .Create($"AdditionalDamage{NAME}") - .SetGuiPresentationNoContent(true) - .SetNotificationTag("HolyWeapon") - .SetDamageDice(DieType.D6, 2) - .SetSpecificDamageType(DamageTypeRadiant) - .AddCustomSubFeatures( - new AddTagToWeapon( - TagsDefinitions.MagicalWeapon, TagsDefinitions.Criticity.Important, ValidatorsWeapon.AlwaysValid)) - .AddToDB(); - - var lightSourceForm = FaerieFire.EffectDescription.GetFirstFormOfType(EffectForm.EffectFormType.LightSource); - - var spell = SpellDefinitionBuilder - .Create(NAME) - .SetGuiPresentation(Category.Spell, SpiritualWeapon) - .SetSchoolOfMagic(SchoolOfMagicDefinitions.SchoolEvocation) - .SetSpellLevel(5) - .SetCastingTime(ActivationTime.Action) - .SetMaterialComponent(MaterialComponentType.None) - .SetSomaticComponent(true) - .SetVerboseComponent(true) - .SetVocalSpellSameType(VocalSpellSemeType.Buff) - .SetRequiresConcentration(true) - .SetEffectDescription( - EffectDescriptionBuilder - .Create() - .SetDurationData(DurationType.Hour, 1) - .SetTargetingData(Side.Enemy, RangeType.Touch, 0, TargetType.Item, - itemSelectionType: ActionDefinitions.ItemSelectionType.Weapon) - .SetEffectForms( - EffectFormBuilder.ConditionForm(condition, ConditionForm.ConditionOperation.Add, true, true), - EffectFormBuilder - .Create() - .SetLightSourceForm( - LightSourceType.Basic, 6, 6, - lightSourceForm.lightSourceForm.color, - lightSourceForm.lightSourceForm.graphicsPrefabReference) - .Build(), - EffectFormBuilder - .Create() - .SetItemPropertyForm( - ItemPropertyUsage.Unlimited, 0, new FeatureUnlockByLevel(additionalDamage, 0)) - .Build()) - .UseQuickAnimations() - .Build()) - .AddToDB(); - - return spell; - } - - #endregion - #region Mantle of Thorns internal static SpellDefinition BuildMantleOfThorns() @@ -561,6 +467,113 @@ internal static SpellDefinition BuildDawn() #endregion + #region Holy Weapon + + internal static SpellDefinition BuildHolyWeapon() + { + const string NAME = "HolyWeapon"; + + var power = FeatureDefinitionPowerBuilder + .Create($"Power{NAME}") + .SetGuiPresentation(Category.Feature, SpiritualWeapon) + .SetUsesFixed(ActivationTime.BonusAction) + .SetShowCasting(false) + .SetEffectDescription( + EffectDescriptionBuilder + .Create() + .SetDurationData(DurationType.Minute, 1) + .SetTargetingData(Side.Enemy, RangeType.Self, 0, TargetType.Sphere, 6) + .SetSavingThrowData(false, AttributeDefinitions.Constitution, true, + EffectDifficultyClassComputation.SpellCastingFeature) + .SetEffectForms( + EffectFormBuilder + .Create() + .HasSavingThrow(EffectSavingThrowType.HalfDamage) + .SetDamageForm(DamageTypeRadiant, 4, DieType.D8) + .Build(), + EffectFormBuilder + .Create() + .HasSavingThrow(EffectSavingThrowType.Negates) + .SetConditionForm(ConditionDefinitions.ConditionBlinded, + ConditionForm.ConditionOperation.Add) + .Build()) + .Build()) + .AddCustomSubFeatures(new PowerOrSpellFinishedByMeHolyWeapon()) + .AddToDB(); + + var condition = ConditionDefinitionBuilder + .Create($"Condition{NAME}") + .SetGuiPresentationNoContent(true) + .SetSilent(Silent.WhenAddedOrRemoved) + .SetFeatures(power) + .AddCustomSubFeatures(AddUsablePowersFromCondition.Marker) + .AddToDB(); + + var additionalDamage = FeatureDefinitionAdditionalDamageBuilder + .Create($"AdditionalDamage{NAME}") + .SetGuiPresentation(Category.Feature, SpiritualWeapon) + .SetNotificationTag("HolyWeapon") + .SetDamageDice(DieType.D6, 2) + .SetSpecificDamageType(DamageTypeRadiant) + .AddCustomSubFeatures( + new AddTagToWeapon( + TagsDefinitions.MagicalWeapon, TagsDefinitions.Criticity.Important, ValidatorsWeapon.AlwaysValid)) + .AddToDB(); + + var lightSourceForm = FaerieFire.EffectDescription.GetFirstFormOfType(EffectForm.EffectFormType.LightSource); + + var spell = SpellDefinitionBuilder + .Create(NAME) + .SetGuiPresentation(Category.Spell, SpiritualWeapon) + .SetSchoolOfMagic(SchoolOfMagicDefinitions.SchoolEvocation) + .SetSpellLevel(5) + .SetCastingTime(ActivationTime.Action) + .SetMaterialComponent(MaterialComponentType.None) + .SetSomaticComponent(true) + .SetVerboseComponent(true) + .SetVocalSpellSameType(VocalSpellSemeType.Buff) + .SetRequiresConcentration(true) + .SetEffectDescription( + EffectDescriptionBuilder + .Create() + .SetDurationData(DurationType.Hour, 1) + .SetTargetingData(Side.Enemy, RangeType.Touch, 0, TargetType.Item, + itemSelectionType: ActionDefinitions.ItemSelectionType.EquippedNoLightSource) + .SetEffectForms( + EffectFormBuilder + .Create() + .SetLightSourceForm( + LightSourceType.Basic, 6, 6, + lightSourceForm.lightSourceForm.color, + lightSourceForm.lightSourceForm.graphicsPrefabReference) + .Build(), + EffectFormBuilder + .Create() + .SetItemPropertyForm( + ItemPropertyUsage.Unlimited, 0, new FeatureUnlockByLevel(additionalDamage, 0)) + .Build(), + EffectFormBuilder.ConditionForm(condition, ConditionForm.ConditionOperation.Add, true)) + .UseQuickAnimations() + .Build()) + .AddToDB(); + + spell.EffectDescription.EffectForms[0].createdByCharacter = true; + + return spell; + } + + private sealed class PowerOrSpellFinishedByMeHolyWeapon : IPowerOrSpellFinishedByMe + { + public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, BaseDefinition baseDefinition) + { + action.ActingCharacter.RulesetCharacter.BreakConcentration(); + + yield break; + } + } + + #endregion + #region Empowered Knowledge internal static SpellDefinition BuildEmpoweredKnowledge() diff --git a/SolastaUnfinishedBusiness/Translations/de/Spells/Spells05-de.txt b/SolastaUnfinishedBusiness/Translations/de/Spells/Spells05-de.txt index fb5cdea8bc..0d6ee3442c 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Spells/Spells05-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Spells/Spells05-de.txt @@ -2,6 +2,8 @@ Condition/&ConditionFarStepDescription=Mit einer Bonusaktion können Sie sich bi Condition/&ConditionFarStepTitle=Weiter Schritt Condition/&ConditionTelekinesisDescription=Sie können mit Ihrer Aktion versuchen, Ihren telekinetischen Griff um die Kreatur aufrechtzuerhalten, indem Sie den Wettkampf wiederholen, oder Sie können eine neue Kreatur anvisieren und so die Hemmwirkung auf die zuvor betroffene Kreatur beenden. Condition/&ConditionTelekinesisTitle=Telekinese +Feature/&AdditionalDamageHolyWeaponDescription=Verursacht bei einem Treffer zusätzlich 2W8 Strahlungsschaden +Feature/&AdditionalDamageHolyWeaponTitle=Heilige Waffe Feature/&PowerHolyWeaponDescription=Als Bonusaktion in deinem Zug kannst du diesen Zauber aufheben und die Waffe einen Strahlungsausbruch aussenden lassen. Jede Kreatur deiner Wahl, die du innerhalb von 30 Fuß der Waffe sehen kannst, muss einen Konstitutionsrettungswurf machen. Bei einem misslungenen Rettungswurf erleidet die Kreatur 4W8 Strahlungsschaden und ist für 1 Minute geblendet. Bei einem erfolgreichen Rettungswurf erleidet die Kreatur nur halb so viel Schaden und ist nicht geblendet. Am Ende jedes Zuges kann eine geblendete Kreatur einen Konstitutionsrettungswurf machen und bei Erfolg den Effekt auf sich selbst beenden. Feature/&PowerHolyWeaponTitle=Heilige Waffe entlassen Feature/&PowerSteelWhirlwindTeleportDescription=Sie können sich zu einem freien, für Sie sichtbaren Bereich teleportieren, der sich im Umkreis von 1,5 m um eines der Ziele befindet, die Sie mit Ihrem „Steel Wind Strike“-Angriff getroffen oder verfehlt haben. diff --git a/SolastaUnfinishedBusiness/Translations/en/Spells/Spells05-en.txt b/SolastaUnfinishedBusiness/Translations/en/Spells/Spells05-en.txt index 172b98f29a..1e16f54f57 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Spells/Spells05-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Spells/Spells05-en.txt @@ -2,6 +2,8 @@ Condition/&ConditionFarStepDescription=You can use a bonus action to teleport up Condition/&ConditionFarStepTitle=Far Step Condition/&ConditionTelekinesisDescription=You can use your action to attempt to maintain your telekinetic grip on the creature by repeating the contest, or target a new creature, ending the restrained effect on the previously affected creature. Condition/&ConditionTelekinesisTitle=Telekinesis +Feature/&AdditionalDamageHolyWeaponDescription=Deal an extra 2d8 radiant damage on a hit +Feature/&AdditionalDamageHolyWeaponTitle=Holy Weapon Feature/&PowerHolyWeaponDescription=As a bonus action on your turn, you can dismiss this spell and cause the weapon to emit a burst of radiance. Each creature of your choice that you can see within 30 feet of the weapon must make a Constitution saving throw. On a failed save, a creature takes 4d8 radiant damage, and it is blinded for 1 minute. On a successful save, a creature takes half as much damage and isn't blinded. At the end of each of its turns, a blinded creature can make a Constitution saving throw, ending the effect on itself on a success. Feature/&PowerHolyWeaponTitle=Dismiss Holy Weapon Feature/&PowerSteelWhirlwindTeleportDescription=You can teleport to an unoccupied space you can see within 5 feet of one of the targets you hit or missed on your Steel Wind Strike attack. diff --git a/SolastaUnfinishedBusiness/Translations/es/Spells/Spells05-es.txt b/SolastaUnfinishedBusiness/Translations/es/Spells/Spells05-es.txt index 17202823f3..c46b11a656 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Spells/Spells05-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Spells/Spells05-es.txt @@ -2,6 +2,8 @@ Condition/&ConditionFarStepDescription=Puedes usar una acción adicional para te Condition/&ConditionFarStepTitle=Paso lejano Condition/&ConditionTelekinesisDescription=Puedes usar tu acción para intentar mantener tu control telequinético sobre la criatura repitiendo la contienda, o seleccionar una nueva criatura y terminar el efecto restringido sobre la criatura previamente afectada. Condition/&ConditionTelekinesisTitle=Telequinesia +Feature/&AdditionalDamageHolyWeaponDescription=Inflige 2d8 de daño radiante adicional con un impacto +Feature/&AdditionalDamageHolyWeaponTitle=Arma sagrada Feature/&PowerHolyWeaponDescription=Como acción adicional en tu turno, puedes descartar este hechizo y hacer que el arma emita una ráfaga de resplandor. Cada criatura de tu elección que puedas ver a 30 pies o menos del arma debe realizar una tirada de salvación de Constitución. Si la tirada falla, la criatura sufre 4d8 puntos de daño radiante y queda cegada durante 1 minuto. Si la tirada tiene éxito, la criatura sufre la mitad del daño y no queda cegada. Al final de cada uno de sus turnos, una criatura cegada puede realizar una tirada de salvación de Constitución, que pone fin al efecto sobre sí misma si tiene éxito. Feature/&PowerHolyWeaponTitle=Descartar arma sagrada Feature/&PowerSteelWhirlwindTeleportDescription=Puedes teletransportarte a un espacio desocupado que puedas ver dentro de 5 pies de uno de los objetivos que alcanzaste o fallaste en tu ataque Golpe de viento de acero. diff --git a/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells05-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells05-fr.txt index 1a2536c6fc..67ec57b46f 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells05-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells05-fr.txt @@ -2,6 +2,8 @@ Condition/&ConditionFarStepDescription=Vous pouvez utiliser une action bonus pou Condition/&ConditionFarStepTitle=Pas lointain Condition/&ConditionTelekinesisDescription=Vous pouvez utiliser votre action pour tenter de maintenir votre emprise télékinétique sur la créature en répétant le concours, ou cibler une nouvelle créature, mettant fin à l'effet restreint sur la créature précédemment affectée. Condition/&ConditionTelekinesisTitle=Télékinésie +Feature/&AdditionalDamageHolyWeaponDescription=Inflige 2d8 dégâts radiants supplémentaires en cas de coup +Feature/&AdditionalDamageHolyWeaponTitle=Arme sacrée Feature/&PowerHolyWeaponDescription=En tant qu'action bonus à votre tour, vous pouvez annuler ce sort et faire en sorte que l'arme émette une explosion de rayonnement. Chaque créature de votre choix que vous pouvez voir à moins de 9 mètres de l'arme doit effectuer un jet de sauvegarde de Constitution. En cas d'échec, la créature subit 4d8 dégâts radiants et est aveuglée pendant 1 minute. En cas de réussite, la créature subit la moitié de ces dégâts et n'est pas aveuglée. À la fin de chacun de ses tours, une créature aveuglée peut effectuer un jet de sauvegarde de Constitution, mettant fin à l'effet sur elle-même en cas de réussite. Feature/&PowerHolyWeaponTitle=Rejeter l'arme sacrée Feature/&PowerSteelWhirlwindTeleportDescription=Vous pouvez vous téléporter vers un espace inoccupé que vous pouvez voir à moins de 1,50 mètre de l'une des cibles que vous avez touchées ou manquées lors de votre attaque Frappe de vent d'acier. diff --git a/SolastaUnfinishedBusiness/Translations/it/Spells/Spells05-it.txt b/SolastaUnfinishedBusiness/Translations/it/Spells/Spells05-it.txt index d690873034..c35c3238dc 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Spells/Spells05-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Spells/Spells05-it.txt @@ -2,6 +2,8 @@ Condition/&ConditionFarStepDescription=Puoi usare un'azione bonus per teletraspo Condition/&ConditionFarStepTitle=Passo lontano Condition/&ConditionTelekinesisDescription=Puoi usare la tua azione per cercare di mantenere la presa telecinetica sulla creatura ripetendo la contesa, oppure prendere di mira una nuova creatura, ponendo fine all'effetto di contenimento sulla creatura precedentemente colpita. Condition/&ConditionTelekinesisTitle=Telecinesi +Feature/&AdditionalDamageHolyWeaponDescription=Infligge 2d8 danni radianti extra quando colpisce +Feature/&AdditionalDamageHolyWeaponTitle=Arma sacra Feature/&PowerHolyWeaponDescription=Come azione bonus nel tuo turno, puoi interrompere questo incantesimo e far sì che l'arma emetta un'esplosione di radiosità. Ogni creatura a tua scelta che puoi vedere entro 30 piedi dall'arma deve effettuare un tiro salvezza su Costituzione. Se fallisce il tiro salvezza, una creatura subisce 4d8 danni radiosi e rimane accecata per 1 minuto. Se supera il tiro salvezza, una creatura subisce metà dei danni e non rimane accecata. Alla fine di ogni suo turno, una creatura accecata può effettuare un tiro salvezza su Costituzione, terminando l'effetto su se stessa in caso di successo. Feature/&PowerHolyWeaponTitle=Rifiutare Arma Sacra Feature/&PowerSteelWhirlwindTeleportDescription=Puoi teletrasportarti in uno spazio libero e visibile entro 1,5 metri da uno dei bersagli colpiti o mancati con il tuo attacco Colpo di Vento d'Acciaio. diff --git a/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells05-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells05-ja.txt index c2803f489a..666d10fe62 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells05-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells05-ja.txt @@ -2,6 +2,8 @@ Condition/&ConditionFarStepDescription=ボーナス アクションを使用し Condition/&ConditionFarStepTitle=ファーステップ Condition/&ConditionTelekinesisDescription=アクションを使用して、コンテストを繰り返してクリーチャーに対する念動力のグリップを維持しようとしたり、新しいクリーチャーをターゲットにして、以前に影響を受けたクリーチャーに対する拘束効果を終了したりすることができます。 Condition/&ConditionTelekinesisTitle=テレキネシス +Feature/&AdditionalDamageHolyWeaponDescription=ヒット時に追加の 2d8 の光ダメージを与えます +Feature/&AdditionalDamageHolyWeaponTitle=聖なる武器 Feature/&PowerHolyWeaponDescription=あなたのターンのボーナス アクションとして、この呪文を解除し、武器から光のバーストを発することができます。武器から 30 フィート以内にいる、あなたが見ることができる任意のクリーチャーは、すべて耐久力セーヴィング スローを行う必要があります。セーヴィングに失敗すると、クリーチャーは 4d8 の光ダメージを受け、1 分間盲目になります。セーヴィングに成功すると、クリーチャーは半分のダメージを受け、盲目になりません。盲目になったクリーチャーは、自分のターンの終了時に耐久力セーヴィング スローを行うことができ、成功すると自分自身への効果を終了します。 Feature/&PowerHolyWeaponTitle=聖なる武器を破棄する Feature/&PowerSteelWhirlwindTeleportDescription=Steel Wind Strike 攻撃で命中または逃したターゲットの 1 つから 5 フィート以内に見える空いているスペースにテレポートできます。 diff --git a/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells05-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells05-ko.txt index e446417704..5ca7dd7e8c 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells05-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells05-ko.txt @@ -2,6 +2,8 @@ Condition/&ConditionFarStepDescription=보너스 액션을 사용하면 볼 수 Condition/&ConditionFarStepTitle=먼 단계 Condition/&ConditionTelekinesisDescription=당신은 행동을 사용하여 경쟁을 반복하여 생물에 대한 염력 그립을 유지하려고 시도하거나 새로운 생물을 목표로 삼아 이전에 영향을 받은 생물에 대한 억제 효과를 종료할 수 있습니다. Condition/&ConditionTelekinesisTitle=격동 +Feature/&AdditionalDamageHolyWeaponDescription=명중 시 2d8의 추가 광휘 피해를 입힙니다 +Feature/&AdditionalDamageHolyWeaponTitle=신성한 무기 Feature/&PowerHolyWeaponDescription=턴의 보너스 액션으로, 이 주문을 해제하고 무기가 빛의 폭발을 방출하게 할 수 있습니다. 무기에서 30피트 이내에 보이는 선택한 각 생명체는 체력 세이빙 스로우를 해야 합니다. 세이브에 실패하면 생명체는 4d8의 광채 피해를 입고 1분 동안 실명합니다. 세이브에 성공하면 생명체는 절반의 피해를 입고 실명되지 않습니다. 각 턴이 끝날 때, 실명한 생명체는 체력 세이빙 스로우를 할 수 있으며, 성공하면 자신에게 미치는 효과가 끝납니다. Feature/&PowerHolyWeaponTitle=신성한 무기를 해제합니다 Feature/&PowerSteelWhirlwindTeleportDescription=Steel Wind Strike 공격에서 적중하거나 놓친 대상 중 하나로부터 5피트 이내에 볼 수 있는 비어 있는 공간으로 순간이동할 수 있습니다. diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells05-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells05-pt-BR.txt index ef812ddd46..c36d48e6b4 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells05-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells05-pt-BR.txt @@ -2,6 +2,8 @@ Condition/&ConditionFarStepDescription=Você pode usar uma ação bônus para se Condition/&ConditionFarStepTitle=Passo Distante Condition/&ConditionTelekinesisDescription=Você pode usar sua ação para tentar manter seu controle telecinético sobre a criatura repetindo a disputa, ou escolher uma nova criatura como alvo, encerrando o efeito de restrição na criatura afetada anteriormente. Condition/&ConditionTelekinesisTitle=Telecinese +Feature/&AdditionalDamageHolyWeaponDescription=Causa 2d8 de dano radiante extra em um acerto +Feature/&AdditionalDamageHolyWeaponTitle=Arma Sagrada Feature/&PowerHolyWeaponDescription=Como uma ação bônus no seu turno, você pode dispensar esta magia e fazer com que a arma emita uma explosão de radiância. Cada criatura de sua escolha que você puder ver a até 30 pés da arma deve fazer um teste de resistência de Constituição. Em um teste falho, uma criatura sofre 4d8 de dano radiante e fica cega por 1 minuto. Em um teste bem-sucedido, uma criatura sofre metade do dano e não fica cega. No final de cada um de seus turnos, uma criatura cega pode fazer um teste de resistência de Constituição, encerrando o efeito sobre si mesma em um sucesso. Feature/&PowerHolyWeaponTitle=Dispensar Arma Sagrada Feature/&PowerSteelWhirlwindTeleportDescription=Você pode se teletransportar para um espaço desocupado que você possa ver a até 1,5 metro de um dos alvos que você acertou ou errou em seu ataque Golpe do Vento de Aço. diff --git a/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells05-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells05-ru.txt index 214cb86985..52ba8a058b 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells05-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells05-ru.txt @@ -2,6 +2,8 @@ Condition/&ConditionFarStepDescription=Бонусным действием вы Condition/&ConditionFarStepTitle=Далёкий шаг Condition/&ConditionTelekinesisDescription=Вы можете действием пытаться поддерживать телекинетическую хватку существа, повторяя встречную проверку, или выбрать новое существо, оканчивая эффект опутывания на предыдущей цели. Condition/&ConditionTelekinesisTitle=Телекинез +Feature/&AdditionalDamageHolyWeaponDescription=Наносит дополнительный урон излучением 2d8 при попадании +Feature/&AdditionalDamageHolyWeaponTitle=Священное Оружие Feature/&PowerHolyWeaponDescription=Бонусным действием в свой ход вы можете отклонить это заклинание и заставить оружие испустить вспышку сияния. Каждое существо по вашему выбору, которое вы можете видеть в пределах 30 футов от оружия, должно совершить спасбросок Телосложения. При провале спасброска существо получает 4d8 урона излучением и ослепляется на 1 минуту. При успешном спасброске существо получает половину урона и не ослепляется. В конце каждого своего хода ослепленное существо может совершить спасбросок Телосложения, заканчивая эффект на себе при успехе. Feature/&PowerHolyWeaponTitle=Отклонить Священное Оружие Feature/&PowerSteelWhirlwindTeleportDescription=Вы можете телепортироваться в свободное пространство, которое вы можете видеть в пределах 5 футов от одной из целей, по которой вы попали или промахнулись Ударом стального ветра. diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells05-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells05-zh-CN.txt index 43b7db7d89..c6fec3ed19 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells05-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells05-zh-CN.txt @@ -2,6 +2,8 @@ Condition/&ConditionFarStepDescription=你可以使用一个附赠动作将最 Condition/&ConditionFarStepTitle=渺远步 Condition/&ConditionTelekinesisDescription=你可以用你的动作尝试通过重复对抗来维持对生物的心灵控制,或者瞄准一个新生物,结束对先前受影响的生物的束缚效果。 Condition/&ConditionTelekinesisTitle=心灵遥控 +Feature/&AdditionalDamageHolyWeaponDescription=命中时造成额外的 2d8 辐射伤害 +Feature/&AdditionalDamageHolyWeaponTitle=神圣武器 Feature/&PowerHolyWeaponDescription=作为你回合的奖励行动,你可以解除此法术并使武器发出一阵光芒。你选择的、在武器 30 英尺范围内能看到的每个生物都必须进行体质豁免检定。如果豁免失败,生物将受到 4d8 光辉伤害,并且失明 1 分钟。如果豁免成功,生物将受到一半伤害,并且不会失明。在每个回合结束时,失明的生物可以进行体质豁免检定,如果成功,则结束对自己的影响。 Feature/&PowerHolyWeaponTitle=解除神圣武器 Feature/&PowerSteelWhirlwindTeleportDescription=你可以传送到一个未占据的空间,你可以传送到一个未被占据的、你可以看到的、你命中活失手目标之一的 5 尺内的一处空间。 From 56ad131b4096196222a9087822307c9322ba2e3a Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sun, 8 Sep 2024 21:48:27 -0700 Subject: [PATCH 086/212] create only one instance of EnvTitle at ReactionRequestCustom.EnvTitle --- .../Classes/InventorClass.cs | 3 +- .../CustomUI/ReactionRequestCustom.cs | 1 + SolastaUnfinishedBusiness/Feats/OtherFeats.cs | 8 +- SolastaUnfinishedBusiness/Feats/RaceFeats.cs | 5 +- .../Patches/RulesetCharacterPatcher.cs | 96 ++++++++++++++++++- SolastaUnfinishedBusiness/Races/Imp.cs | 4 +- .../Subclasses/CircleOfTheCosmos.cs | 10 +- .../Subclasses/MartialRoyalKnight.cs | 6 +- .../Subclasses/SorcerousWildMagic.cs | 8 +- .../Subclasses/WizardWarMagic.cs | 4 +- 10 files changed, 114 insertions(+), 31 deletions(-) diff --git a/SolastaUnfinishedBusiness/Classes/InventorClass.cs b/SolastaUnfinishedBusiness/Classes/InventorClass.cs index eb4b8c37f0..d5bbfc0677 100644 --- a/SolastaUnfinishedBusiness/Classes/InventorClass.cs +++ b/SolastaUnfinishedBusiness/Classes/InventorClass.cs @@ -1123,9 +1123,8 @@ private static string FormatReactionDescription( GameLocationCharacter helper) { var text = defender == helper ? "Self" : "Ally"; - var envTitle = Gui.Localize("Screen/&EditorLocationEnvironmentTitle"); return $"SpendPowerInventorFlashOfGeniusReactDescription{text}" - .Formatted(Category.Reaction, defender.Name, attacker?.Name ?? envTitle, sourceTitle); + .Formatted(Category.Reaction, defender.Name, attacker?.Name ?? ReactionRequestCustom.EnvTitle, sourceTitle); } } diff --git a/SolastaUnfinishedBusiness/CustomUI/ReactionRequestCustom.cs b/SolastaUnfinishedBusiness/CustomUI/ReactionRequestCustom.cs index 29c4d35b9a..6eb199649e 100644 --- a/SolastaUnfinishedBusiness/CustomUI/ReactionRequestCustom.cs +++ b/SolastaUnfinishedBusiness/CustomUI/ReactionRequestCustom.cs @@ -9,6 +9,7 @@ public interface IReactionRequestWithResource public class ReactionRequestCustom : ReactionRequest, IReactionRequestWithResource { + internal static readonly string EnvTitle = Gui.Localize("Screen/&EditorLocationEnvironmentTitle"); private readonly string _type; internal ReactionRequestCustom(string type, CharacterActionParams reactionParams) diff --git a/SolastaUnfinishedBusiness/Feats/OtherFeats.cs b/SolastaUnfinishedBusiness/Feats/OtherFeats.cs index 40360f5690..58ada1a690 100644 --- a/SolastaUnfinishedBusiness/Feats/OtherFeats.cs +++ b/SolastaUnfinishedBusiness/Feats/OtherFeats.cs @@ -2136,15 +2136,13 @@ public IEnumerator OnTryAlterOutcomeSavingThrow( yield break; } - var envTitle = Gui.Localize("Screen/&EditorLocationEnvironmentTitle"); - // any reaction within a saving flow must use the yielder as waiter yield return helper.MyReactToSpendPower( usablePower, helper, "LuckySaving", "SpendPowerLuckySavingDescription".Formatted( - Category.Reaction, attacker?.Name ?? envTitle, savingThrowData.Title), + Category.Reaction, attacker?.Name ?? ReactionRequestCustom.EnvTitle, savingThrowData.Title), ReactionValidated, battleManager); @@ -2314,15 +2312,13 @@ savingThrowData.SavingThrowAbility is not yield break; } - var envTitle = Gui.Localize("Screen/&EditorLocationEnvironmentTitle"); - // any reaction within a saving flow must use the yielder as waiter yield return defender.MyReactToSpendPower( usablePower, defender, "MageSlayer", "SpendPowerMageSlayerDescription".Formatted( - Category.Reaction, attacker?.Name ?? envTitle, savingThrowData.Title), + Category.Reaction, attacker?.Name ?? ReactionRequestCustom.EnvTitle, savingThrowData.Title), ReactionValidated, battleManager); diff --git a/SolastaUnfinishedBusiness/Feats/RaceFeats.cs b/SolastaUnfinishedBusiness/Feats/RaceFeats.cs index 0dcc9dc661..998409e88c 100644 --- a/SolastaUnfinishedBusiness/Feats/RaceFeats.cs +++ b/SolastaUnfinishedBusiness/Feats/RaceFeats.cs @@ -815,15 +815,14 @@ public IEnumerator OnTryAlterOutcomeSavingThrow( yield break; } - var envTitle = Gui.Localize("Screen/&EditorLocationEnvironmentTitle"); - // any reaction within a saving flow must use the yielder as waiter yield return helper.MyReactToDoNothing( ExtraActionId.DoNothingReaction, helper, "BountifulLuckSaving", "CustomReactionBountifulLuckSavingDescription".Formatted( - Category.Reaction, defender.Name, attacker?.Name ?? envTitle, savingThrowData.Title), + Category.Reaction, defender.Name, attacker?.Name ?? ReactionRequestCustom.EnvTitle, + savingThrowData.Title), ReactionValidated, battleManager: battleManager); diff --git a/SolastaUnfinishedBusiness/Patches/RulesetCharacterPatcher.cs b/SolastaUnfinishedBusiness/Patches/RulesetCharacterPatcher.cs index aeaa0933ad..7f27e97f6c 100644 --- a/SolastaUnfinishedBusiness/Patches/RulesetCharacterPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/RulesetCharacterPatcher.cs @@ -1,4 +1,5 @@ -using System; +// using SolastaUnfinishedBusiness.Classes; +using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Linq; @@ -21,6 +22,7 @@ using static FeatureDefinitionAttributeModifier; using static ActionDefinitions; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.CharacterClassDefinitions; +// using static SolastaUnfinishedBusiness.Api.DatabaseHelper.DecisionPackageDefinitions; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionPowers; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionMagicAffinitys; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.SpellDefinitions; @@ -308,6 +310,98 @@ public static void Postfix(RulesetCharacter __instance, ref RulesetEffect __resu } } +#if false + //BUGFIX: ensure that we always get a proper encounter id on overriding faction scenarios + [HarmonyPatch(typeof(RulesetCharacter), nameof(RulesetCharacter.OnConditionAdded))] + [SuppressMessage("Minor Code Smell", "S101:Types should be named in PascalCase", Justification = "Patch")] + [UsedImplicitly] + public static class OnConditionAdded_Patch + { + //ClericCombatDecisions + //FighterCombatDecisions + //PaladinCombatDecisions + //RogueCombatDecisions + // CasterCombatDecisions + // OffensiveCasterCombatDecisions + // DefaultMeleeWithBackupRangeDecisions + // DefaultRangeWithBackupMeleeDecisions + // DefaultSupportCasterWithBackupAttacksDecisions + public static void Prefix(RulesetCharacter __instance, RulesetCondition activeCondition) + { + if (!activeCondition.ConditionDefinition.IsOverridingFaction(activeCondition.SourceFactionName, out _)) + { + return; + } + + var rulesetCaster = EffectHelpers.GetCharacterByGuid(activeCondition.SourceGuid); + var caster = GameLocationCharacter.GetFromActor(rulesetCaster); + var character = GameLocationCharacter.GetFromActor(__instance); + + if (character.BehaviourPackage == null) + { + var package = DefaultMeleeWithBackupRangeDecisions; + + switch (__instance) + { + case RulesetCharacterHero rulesetHero when rulesetHero.ClassesHistory.Contains(Cleric): + package = ClericCombatDecisions; + break; + case RulesetCharacterHero rulesetHero when rulesetHero.ClassesHistory.Contains(Fighter): + package = FighterCombatDecisions; + break; + case RulesetCharacterHero rulesetHero when rulesetHero.ClassesHistory.Contains(Paladin): + package = PaladinCombatDecisions; + break; + case RulesetCharacterHero rulesetHero when rulesetHero.ClassesHistory.Contains(Rogue): + package = RogueCombatDecisions; + break; + case RulesetCharacterHero rulesetHero when rulesetHero.ClassesHistory.Contains(Druid): + package = CasterCombatDecisions; + break; + case RulesetCharacterHero rulesetHero: + { + if (rulesetHero.ClassesHistory.Contains(InventorClass.Class) || + rulesetHero.ClassesHistory.Contains(Bard) || + rulesetHero.ClassesHistory.Contains(Sorcerer) || + rulesetHero.ClassesHistory.Contains(Warlock) || + rulesetHero.ClassesHistory.Contains(Wizard)) + { + package = OffensiveCasterCombatDecisions; + } + + break; + } + case RulesetCharacterMonster rulesetMonster: + { + if (rulesetMonster.MonsterDefinition.Features.Any(x => x is FeatureDefinitionCastSpell)) + { + package = DefaultSupportCasterWithBackupAttacksDecisions; + } + + if (rulesetMonster.MonsterDefinition.AttackIterations.Any(x => + x.MonsterAttackDefinition.Proximity == AttackProximity.Range)) + { + package = DefaultRangeWithBackupMeleeDecisions; + } + + break; + } + } + + character.BehaviourPackage = new GameLocationBehaviourPackage + { + BattleStartBehavior = + GameLocationBehaviourPackage.BattleStartBehaviorType.RaisesAlarm, + DecisionPackageDefinition = package, + EncounterId = caster.BehaviourPackage?.EncounterId ?? 0 + }; + } + + character.BehaviourPackage.EncounterId = caster.BehaviourPackage?.EncounterId ?? 0; + } + } +#endif + [HarmonyPatch(typeof(RulesetCharacter), nameof(RulesetCharacter.OnConditionRemoved))] [SuppressMessage("Minor Code Smell", "S101:Types should be named in PascalCase", Justification = "Patch")] [UsedImplicitly] diff --git a/SolastaUnfinishedBusiness/Races/Imp.cs b/SolastaUnfinishedBusiness/Races/Imp.cs index 21d80194a1..1b5a9c83b3 100644 --- a/SolastaUnfinishedBusiness/Races/Imp.cs +++ b/SolastaUnfinishedBusiness/Races/Imp.cs @@ -644,15 +644,13 @@ public IEnumerator OnTryAlterOutcomeSavingThrow( yield break; } - var envTitle = Gui.Localize("Screen/&EditorLocationEnvironmentTitle"); - // any reaction within a saving flow must use the yielder as waiter yield return helper.MyReactToSpendPower( usablePower, helper, "DrawInspirationSaving", "SpendPowerDrawInspirationSavingDescription".Formatted( - Category.Reaction, attacker?.Name ?? envTitle, savingThrowData.Title), + Category.Reaction, attacker?.Name ?? ReactionRequestCustom.EnvTitle, savingThrowData.Title), ReactionValidated, battleManager); diff --git a/SolastaUnfinishedBusiness/Subclasses/CircleOfTheCosmos.cs b/SolastaUnfinishedBusiness/Subclasses/CircleOfTheCosmos.cs index 6283a27dc4..f1ce4806cb 100644 --- a/SolastaUnfinishedBusiness/Subclasses/CircleOfTheCosmos.cs +++ b/SolastaUnfinishedBusiness/Subclasses/CircleOfTheCosmos.cs @@ -947,15 +947,14 @@ public IEnumerator OnTryAlterOutcomeSavingThrow( yield break; } - var envTitle = Gui.Localize("Screen/&EditorLocationEnvironmentTitle"); - // any reaction within a saving flow must use the yielder as waiter yield return helper.MyReactToSpendPower( usablePower, helper, "WealCosmosOmenSaving", "SpendPowerWealCosmosOmenSavingDescription".Formatted( - Category.Reaction, defender.Name, attacker?.Name ?? envTitle, savingThrowData.Title), + Category.Reaction, defender.Name, attacker?.Name ?? ReactionRequestCustom.EnvTitle, + savingThrowData.Title), ReactionValidated, battleManager); @@ -1172,15 +1171,14 @@ public IEnumerator OnTryAlterOutcomeSavingThrow( yield break; } - var envTitle = Gui.Localize("Screen/&EditorLocationEnvironmentTitle"); - // any reaction within a saving flow must use the yielder as waiter yield return helper.MyReactToSpendPower( usablePower, helper, "WoeCosmosOmenSaving", "SpendPowerWoeCosmosOmenSavingDescription".Formatted( - Category.Reaction, defender.Name, attacker?.Name ?? envTitle, savingThrowData.Title), + Category.Reaction, defender.Name, attacker?.Name ?? ReactionRequestCustom.EnvTitle, + savingThrowData.Title), ReactionValidated, battleManager); diff --git a/SolastaUnfinishedBusiness/Subclasses/MartialRoyalKnight.cs b/SolastaUnfinishedBusiness/Subclasses/MartialRoyalKnight.cs index 2c13543ea1..1f749351c8 100644 --- a/SolastaUnfinishedBusiness/Subclasses/MartialRoyalKnight.cs +++ b/SolastaUnfinishedBusiness/Subclasses/MartialRoyalKnight.cs @@ -50,6 +50,8 @@ public MartialRoyalKnight() .SetOverriddenPower(PowerFighterSecondWind) .AddToDB(); + powerRallyingCry.EffectDescription.targetFilteringTag = TargetFilteringTag.No; + // LEVEL 07 var abilityCheckAffinityRoyalEnvoy = FeatureDefinitionAbilityCheckAffinityBuilder @@ -288,10 +290,10 @@ private static string FormatReactionDescription( GameLocationCharacter helper) { var text = defender == helper ? "Self" : "Ally"; - var envTitle = Gui.Localize("Screen/&EditorLocationEnvironmentTitle"); return $"SpendPowerRoyalKnightInspiringProtectionDescription{text}" - .Formatted(Category.Reaction, defender.Name, attacker?.Name ?? envTitle, sourceTitle); + .Formatted(Category.Reaction, defender.Name, attacker?.Name ?? ReactionRequestCustom.EnvTitle, + sourceTitle); } } } diff --git a/SolastaUnfinishedBusiness/Subclasses/SorcerousWildMagic.cs b/SolastaUnfinishedBusiness/Subclasses/SorcerousWildMagic.cs index 1da663c6ab..d2894d29cd 100644 --- a/SolastaUnfinishedBusiness/Subclasses/SorcerousWildMagic.cs +++ b/SolastaUnfinishedBusiness/Subclasses/SorcerousWildMagic.cs @@ -779,15 +779,14 @@ public IEnumerator OnTryAlterOutcomeSavingThrow( yield break; } - var envTitle = Gui.Localize("Screen/&EditorLocationEnvironmentTitle"); - // any reaction within a saving flow must use the yielder as waiter yield return helper.MyReactToSpendPower( usablePower, helper, "TidesOfChaosSave", "SpendPowerTidesOfChaosSaveDescription" - .Formatted(Category.Reaction, attacker?.Name ?? envTitle, savingThrowData.Title), + .Formatted(Category.Reaction, attacker?.Name ?? ReactionRequestCustom.EnvTitle, + savingThrowData.Title), ReactionValidated, battleManager); @@ -1085,7 +1084,6 @@ public IEnumerator OnTryAlterOutcomeSavingThrow( yield break; } - var envTitle = Gui.Localize("Screen/&EditorLocationEnvironmentTitle"); // any reaction within a saving flow must use the yielder as waiter yield return helper.MyReactToSpendPower( @@ -1093,7 +1091,7 @@ public IEnumerator OnTryAlterOutcomeSavingThrow( helper, stringParameter, $"SpendPower{stringParameter}Description".Formatted(Category.Reaction, - defender.Name, attacker?.Name ?? envTitle, savingThrowData.Title), + defender.Name, attacker?.Name ?? ReactionRequestCustom.EnvTitle, savingThrowData.Title), ReactionValidated, battleManager); diff --git a/SolastaUnfinishedBusiness/Subclasses/WizardWarMagic.cs b/SolastaUnfinishedBusiness/Subclasses/WizardWarMagic.cs index 6e87e6d03b..f38c114920 100644 --- a/SolastaUnfinishedBusiness/Subclasses/WizardWarMagic.cs +++ b/SolastaUnfinishedBusiness/Subclasses/WizardWarMagic.cs @@ -257,15 +257,13 @@ public IEnumerator OnTryAlterOutcomeSavingThrow( yield break; } - var envTitle = Gui.Localize("Screen/&EditorLocationEnvironmentTitle"); - // any reaction within a saving flow must use the yielder as waiter yield return helper.MyReactToDoNothing( ExtraActionId.DoNothingReaction, helper, "ArcaneDeflectionSaving", "CustomReactionArcaneDeflectionSavingDescription".Formatted( - Category.Reaction, attacker?.Name ?? envTitle, savingThrowData.Title), + Category.Reaction, attacker?.Name ?? ReactionRequestCustom.EnvTitle, savingThrowData.Title), ReactionValidated, battleManager: battleManager); From 500ff9517fb3fdb9a5e3776209a6b408530fbf0c Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sun, 8 Sep 2024 23:02:34 -0700 Subject: [PATCH 087/212] tweak SFX --- .../AdditionalDamageMalakhAngelicForm.json | 7 ++++++- .../AdditionalDamageOathOfDemonHunterTrialMark.json | 7 ++++++- .../FeatureDefinitionPower/PowerHolyWeapon.json | 10 +++++----- .../SpellDefinition/HolyWeapon.json | 10 +++++----- SolastaUnfinishedBusiness/ChangelogHistory.txt | 2 +- SolastaUnfinishedBusiness/Races/Malakh.cs | 2 ++ .../Spells/SpellBuildersLevel05.cs | 5 +++++ .../Subclasses/OathOfDemonHunter.cs | 2 ++ 8 files changed, 32 insertions(+), 13 deletions(-) diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAdditionalDamage/AdditionalDamageMalakhAngelicForm.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAdditionalDamage/AdditionalDamageMalakhAngelicForm.json index 20aed1da8c..4f55d530d9 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAdditionalDamage/AdditionalDamageMalakhAngelicForm.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAdditionalDamage/AdditionalDamageMalakhAngelicForm.json @@ -36,7 +36,12 @@ "conditionOperations": [], "addLightSource": false, "lightSourceForm": null, - "impactParticleReference": null, + "impactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "dc52f8444fa49f24ca22b361d63dbb15", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, "particlesBasedOnAncestryDamageType": false, "ancestryType": "Sorcerer", "acidImpactParticleReference": null, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAdditionalDamage/AdditionalDamageOathOfDemonHunterTrialMark.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAdditionalDamage/AdditionalDamageOathOfDemonHunterTrialMark.json index 54f1c4abfc..02adf6aa62 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAdditionalDamage/AdditionalDamageOathOfDemonHunterTrialMark.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAdditionalDamage/AdditionalDamageOathOfDemonHunterTrialMark.json @@ -137,7 +137,12 @@ "conditionOperations": [], "addLightSource": false, "lightSourceForm": null, - "impactParticleReference": null, + "impactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "5cdd6944009a9f14eae5a1f5e9bc0a82", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, "particlesBasedOnAncestryDamageType": false, "ancestryType": "Sorcerer", "acidImpactParticleReference": null, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerHolyWeapon.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerHolyWeapon.json index ba78693d60..fcfd9df1be 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerHolyWeapon.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerHolyWeapon.json @@ -150,7 +150,7 @@ "$type": "EffectParticleParameters, Assembly-CSharp", "casterParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "81560ac3813217d4d9fd281d5e73c234", + "m_AssetGUID": "3cff2b6f11a2cd649b3fb3fb2c402351", "m_SubObjectName": "", "m_SubObjectType": "" }, @@ -186,7 +186,7 @@ }, "zoneParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", + "m_AssetGUID": "6937e1207989e6644ad591240a0bb88c", "m_SubObjectName": "", "m_SubObjectType": "" }, @@ -198,7 +198,7 @@ }, "impactParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", + "m_AssetGUID": "5cdd6944009a9f14eae5a1f5e9bc0a82", "m_SubObjectName": "", "m_SubObjectType": "" }, @@ -290,13 +290,13 @@ }, "conditionParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", + "m_AssetGUID": "13002582a0306fe44915c63f57e4ea59", "m_SubObjectName": "", "m_SubObjectType": "" }, "conditionEndParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", + "m_AssetGUID": "0c47cc2ece484284eb5eec49a38a2cae", "m_SubObjectName": "", "m_SubObjectType": "" }, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/HolyWeapon.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/HolyWeapon.json index 809a8ccdc6..680c6e489d 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/HolyWeapon.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/HolyWeapon.json @@ -196,7 +196,7 @@ "$type": "EffectParticleParameters, Assembly-CSharp", "casterParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "81560ac3813217d4d9fd281d5e73c234", + "m_AssetGUID": "", "m_SubObjectName": "", "m_SubObjectType": "" }, @@ -208,7 +208,7 @@ }, "casterQuickSpellParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "81560ac3813217d4d9fd281d5e73c234", + "m_AssetGUID": "", "m_SubObjectName": "", "m_SubObjectType": "" }, @@ -221,8 +221,8 @@ "effectParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" + "m_SubObjectName": null, + "m_SubObjectType": null }, "effectSubTargetParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", @@ -244,7 +244,7 @@ }, "impactParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", + "m_AssetGUID": "c403157f4552068439eefad683faff34", "m_SubObjectName": "", "m_SubObjectType": "" }, diff --git a/SolastaUnfinishedBusiness/ChangelogHistory.txt b/SolastaUnfinishedBusiness/ChangelogHistory.txt index d6d43007ca..81a84797e8 100644 --- a/SolastaUnfinishedBusiness/ChangelogHistory.txt +++ b/SolastaUnfinishedBusiness/ChangelogHistory.txt @@ -11,7 +11,7 @@ - fixed Martial Commander coordinated defense to require an attack first [VANILLA] - fixed Party Editor to register/unregister powers from feats - fixed Path of the Wild Magic retribution, and Patron Archfey misty step to only react against enemy effects -- fixed Wrathful Smite to do a wisdom attribute check to get rid of frightened on turn start +- fixed Wrathful Smite to do a wisdom ability check against caster DC instead of a save on turn start - improved ability checks to also allow reactions on success [Circle of the Cosmos woe] - improved Conversion Slots, and Shorthand versatilities to react on ability checks - improved Maneuvering Attack, and Martial Warlord strategic repositioning to use a run stance diff --git a/SolastaUnfinishedBusiness/Races/Malakh.cs b/SolastaUnfinishedBusiness/Races/Malakh.cs index 0519267d56..7dc24f1b86 100644 --- a/SolastaUnfinishedBusiness/Races/Malakh.cs +++ b/SolastaUnfinishedBusiness/Races/Malakh.cs @@ -110,6 +110,8 @@ private static CharacterRaceDefinition BuildMalakh() .SetSpecificDamageType(DamageTypeRadiant) .SetDamageValueDetermination(AdditionalDamageValueDetermination.ProficiencyBonus) .SetFrequencyLimit(FeatureLimitedUsage.OnceInMyTurn) + .SetImpactParticleReference( + SpellDefinitions.FaerieFire.EffectDescription.EffectParticleParameters.impactParticleReference) .AddToDB(); CreateAngelicFormChoice(BuildAngelicFlight(additionalDamageMalakhAngelicForm)); diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel05.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel05.cs index 05276501a9..5df53ccc7d 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel05.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel05.cs @@ -497,6 +497,9 @@ internal static SpellDefinition BuildHolyWeapon() .SetConditionForm(ConditionDefinitions.ConditionBlinded, ConditionForm.ConditionOperation.Add) .Build()) + .SetParticleEffectParameters(FaerieFire) + .SetImpactEffectParameters( + FeatureDefinitionAdditionalDamages.AdditionalDamageBrandingSmite.impactParticleReference) .Build()) .AddCustomSubFeatures(new PowerOrSpellFinishedByMeHolyWeapon()) .AddToDB(); @@ -554,6 +557,8 @@ internal static SpellDefinition BuildHolyWeapon() .Build(), EffectFormBuilder.ConditionForm(condition, ConditionForm.ConditionOperation.Add, true)) .UseQuickAnimations() + .SetParticleEffectParameters(PowerTraditionLightBlindingFlash) + .SetEffectEffectParameters(new AssetReference()) .Build()) .AddToDB(); diff --git a/SolastaUnfinishedBusiness/Subclasses/OathOfDemonHunter.cs b/SolastaUnfinishedBusiness/Subclasses/OathOfDemonHunter.cs index 0b603da429..81ce432fb7 100644 --- a/SolastaUnfinishedBusiness/Subclasses/OathOfDemonHunter.cs +++ b/SolastaUnfinishedBusiness/Subclasses/OathOfDemonHunter.cs @@ -70,6 +70,8 @@ public OathOfDemonHunter() .SetAdvancement(AdditionalDamageAdvancement.ClassLevel, 1, 1, 4, 3) .SetTargetCondition(conditionTrialMark, AdditionalDamageTriggerCondition.TargetHasConditionCreatedByMe) .SetSpecificDamageType(DamageTypeRadiant) + .SetImpactParticleReference( + FeatureDefinitionAdditionalDamages.AdditionalDamageBrandingSmite.impactParticleReference) .AddToDB(); var powerTrialMark = FeatureDefinitionPowerBuilder From 2085616bec1047b77c36ee72560ce1ec6c374356 Mon Sep 17 00:00:00 2001 From: EnderWiggin Date: Mon, 9 Sep 2024 10:55:44 +0300 Subject: [PATCH 088/212] enqueue attack action, so that current spell is not aborted --- .../Patches/CharacterActionMagicEffectPatcher.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SolastaUnfinishedBusiness/Patches/CharacterActionMagicEffectPatcher.cs b/SolastaUnfinishedBusiness/Patches/CharacterActionMagicEffectPatcher.cs index bc6b328242..97b23c609b 100644 --- a/SolastaUnfinishedBusiness/Patches/CharacterActionMagicEffectPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/CharacterActionMagicEffectPatcher.cs @@ -951,7 +951,7 @@ private static IEnumerator ExecuteImpl(CharacterActionMagicEffect __instance) else { ServiceRepository.GetService() - .ExecuteAction(actionParam, null, false); + .ExecuteAction(actionParam, null, true); } } } From 2e369da57cb2c152563e697138b8ff26ce5284a1 Mon Sep 17 00:00:00 2001 From: EnderWiggin Date: Mon, 9 Sep 2024 10:56:29 +0300 Subject: [PATCH 089/212] always use AttackFree for attack-after-effect to be sure it doesn't consume actions it shouldn't --- .../Behaviors/Specific/AttackAfterMagicEffect.cs | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/SolastaUnfinishedBusiness/Behaviors/Specific/AttackAfterMagicEffect.cs b/SolastaUnfinishedBusiness/Behaviors/Specific/AttackAfterMagicEffect.cs index 3187ddf48e..5cfc05fcd6 100644 --- a/SolastaUnfinishedBusiness/Behaviors/Specific/AttackAfterMagicEffect.cs +++ b/SolastaUnfinishedBusiness/Behaviors/Specific/AttackAfterMagicEffect.cs @@ -115,13 +115,11 @@ internal static List PerformAttackAfterUse(CharacterActio attackMode.AddAttackTagAsNeeded(AttackAfterMagicEffectTag); } - // this is required to support reaction scenarios where AttackMain won't work - var actionId = attackMode.ActionType == ActionDefinitions.ActionType.Main - ? ActionDefinitions.Id.AttackMain - : ActionDefinitions.Id.AttackFree; - - var attackActionParams = - new CharacterActionParams(caster, actionId) { AttackMode = attackMode }; + // always use free attack + var attackActionParams = new CharacterActionParams(caster, ActionDefinitions.Id.AttackFree) + { + AttackMode = attackMode + }; attackActionParams.TargetCharacters.Add(targets[0]); attackActionParams.ActionModifiers.Add(new ActionModifier()); From c07ff0162370cdd8c3489c98553b7c995868e3e6 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Mon, 9 Sep 2024 07:00:48 -0700 Subject: [PATCH 090/212] fix incorrect term on mod UI --- .../Api/DatabaseHelper-RELEASE.cs | 6 ------ SolastaUnfinishedBusiness/Displays/GameUiDisplay.cs | 2 +- SolastaUnfinishedBusiness/Settings/zappastuff.xml | 12 +++++++++--- .../Translations/de/Settings-de.txt | 2 +- .../Translations/en/Settings-en.txt | 2 +- .../Translations/es/Settings-es.txt | 2 +- .../Translations/fr/Settings-fr.txt | 2 +- .../Translations/it/Settings-it.txt | 2 +- .../Translations/ja/Settings-ja.txt | 2 +- .../Translations/ko/Settings-ko.txt | 2 +- .../Translations/pt-BR/Settings-pt-BR.txt | 2 +- .../Translations/ru/Settings-ru.txt | 2 +- .../Translations/zh-CN/Settings-zh-CN.txt | 2 +- 13 files changed, 20 insertions(+), 20 deletions(-) diff --git a/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs b/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs index 80cffb76d8..461d243a30 100644 --- a/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs +++ b/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs @@ -459,9 +459,6 @@ internal static class ConditionDefinitions internal static ConditionDefinition ConditionFrightenedPhantasmalKiller { get; } = GetDefinition("ConditionFrightenedPhantasmalKiller"); - internal static ConditionDefinition ConditionGrappledRestrainedRemorhaz { get; } = - GetDefinition("ConditionGrappledRestrainedRemorhaz"); - internal static ConditionDefinition ConditionGuided { get; } = GetDefinition("ConditionGuided"); @@ -642,9 +639,6 @@ internal static class ConditionDefinitions internal static ConditionDefinition ConditionRestrainedByMagicalArrow { get; } = GetDefinition("ConditionRestrainedByMagicalArrow"); - internal static ConditionDefinition ConditionRestrainedByWeb { get; } = - GetDefinition("ConditionRestrainedByWeb"); - internal static ConditionDefinition ConditionRestrictedInsideMagicCircle { get; } = GetDefinition("ConditionRestrictedInsideMagicCircle"); diff --git a/SolastaUnfinishedBusiness/Displays/GameUiDisplay.cs b/SolastaUnfinishedBusiness/Displays/GameUiDisplay.cs index 8a7b73ede0..f3961e01ae 100644 --- a/SolastaUnfinishedBusiness/Displays/GameUiDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/GameUiDisplay.cs @@ -372,7 +372,7 @@ internal static void DisplayGameUi() ItemCraftingMerchantContext.SwitchSetBeltOfDwarvenKindBeardChances(); } - toggle = Main.Settings.DontDisplayHelmets; + toggle = Main.Settings.EnableCtrlClickDragToBypassQuestItemsOnDrop; if (UI.Toggle(Gui.Localize("ModUi/&EnableCtrlClickDragToBypassQuestItemsOnDrop"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableCtrlClickDragToBypassQuestItemsOnDrop = toggle; diff --git a/SolastaUnfinishedBusiness/Settings/zappastuff.xml b/SolastaUnfinishedBusiness/Settings/zappastuff.xml index 19e5cff9f6..e1afa674d6 100644 --- a/SolastaUnfinishedBusiness/Settings/zappastuff.xml +++ b/SolastaUnfinishedBusiness/Settings/zappastuff.xml @@ -1334,6 +1334,8 @@ MinorLifesteal StarryWisp ThunderStrike + CommandSpell + DissonantWhispers EarthTremor Mule BorrowedKnowledge @@ -1366,6 +1368,7 @@ TollTheDead BurstOfRadiance Wrack + CommandSpell Sanctuary BorrowedKnowledge ProtectThreshold @@ -1375,6 +1378,7 @@ AuraOfVitality AuraOfPerseverance Dawn + HolyWeapon ShelterFromEnergy RescueTheDying SoulExpulsion @@ -1459,6 +1463,7 @@ + CommandSpell SearingSmite ThunderousSmite WrathfulSmite @@ -1474,6 +1479,7 @@ BanishingSmite CircleOfMagicalNegation DivineWrath + HolyWeapon @@ -1748,8 +1754,8 @@ true true false - false - false + true + true 5 1 100 @@ -1958,7 +1964,7 @@ true true true - false + true true true true diff --git a/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt b/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt index 7ce5c5d754..1caf3a07a3 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt @@ -234,7 +234,7 @@ ModUi/&MarkInvisibleTeleportersOnLevelMap=+ Markieren Sie nach der Entdeckung ModUi/&MaxAllowedClasses=Maximal zulässige Klassen ModUi/&Merchants=Händler: ModUi/&Metamagic=Metamagie -ModUi/&ModUi/&EnableCtrlClickDragToBypassQuestItemsOnDrop=Aktivieren Sie STRG Klicken-Ziehen, um die Überprüfung auf Questgegenstände beim Ablegen zu umgehen. +ModUi/&EnableCtrlClickDragToBypassQuestItemsOnDrop=Aktivieren Sie STRG Klicken-Ziehen, um die Überprüfung auf Questgegenstände beim Ablegen zu umgehen. ModUi/&Monsters=Monster: ModUi/&MovementGridWidthModifier=Multiplizieren Sie die Breite des Bewegungsrasters mit [%] ModUi/&MulticlassKeyHelp=UMSCHALT-Klick auf einen Zauber kehrt den verbrauchten Standardrepertoire-Slottyp um.\n[Hexenmeister gibt weiße Zauberslots aus und andere geben Paktgrüne aus] diff --git a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt index ddb8a78404..ce8912b0ca 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt @@ -234,7 +234,7 @@ ModUi/&MarkInvisibleTeleportersOnLevelMap=+ Also mark the location of invisib ModUi/&MaxAllowedClasses=Max allowed classes ModUi/&Merchants=Merchants: ModUi/&Metamagic=Metamagic -ModUi/&ModUi/&EnableCtrlClickDragToBypassQuestItemsOnDrop=Enable CTRL click-drag to bypass quest items checks on drop +ModUi/&EnableCtrlClickDragToBypassQuestItemsOnDrop=Enable CTRL click-drag to bypass quest items checks on drop ModUi/&Monsters=Monsters: ModUi/&MovementGridWidthModifier=Multiply the movement grid width by [%] ModUi/&MulticlassKeyHelp=SHIFT click on a spell inverts the default repertoire slot type consumed\n[Warlock spends white spell slots and others spend pact green ones] diff --git a/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt b/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt index e601f4194a..027cfec2e1 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt @@ -234,7 +234,7 @@ ModUi/&MarkInvisibleTeleportersOnLevelMap=+ También marca la ubicación de l ModUi/&MaxAllowedClasses=Clases máximas permitidas ModUi/&Merchants=Comerciantes: ModUi/&Metamagic=Metamagia -ModUi/&ModUi/&EnableCtrlClickDragToBypassQuestItemsOnDrop=Habilite la función CTRL de clic y arrastre para omitir las comprobaciones de objetos de misión al soltarlos +ModUi/&EnableCtrlClickDragToBypassQuestItemsOnDrop=Habilite la función CTRL de clic y arrastre para omitir las comprobaciones de objetos de misión al soltarlos ModUi/&Monsters=Monstruos: ModUi/&MovementGridWidthModifier=Multiplica el ancho de la cuadrícula de movimiento por [%] ModUi/&MulticlassKeyHelp=SHIFT hace clic en un hechizo para invertir el tipo de espacio de repertorio predeterminado consumido\n[Brujo gasta espacios de hechizo blancos y otros gastan los verdes de pacto] diff --git a/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt index 35dc370ebf..3ecbf9ebc2 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt @@ -234,7 +234,7 @@ ModUi/&MarkInvisibleTeleportersOnLevelMap=+ Marquez également l'emplacement ModUi/&MaxAllowedClasses=Classes maximales autorisées ModUi/&Merchants=Marchands : ModUi/&Metamagic=Métamagie -ModUi/&ModUi/&EnableCtrlClickDragToBypassQuestItemsOnDrop=Activez le clic-glisser CTRL pour contourner les vérifications des objets de quête lors de la chute +ModUi/&EnableCtrlClickDragToBypassQuestItemsOnDrop=Activez le clic-glisser CTRL pour contourner les vérifications des objets de quête lors de la chute ModUi/&Monsters=Monstres : ModUi/&MovementGridWidthModifier=Multipliez la largeur de la grille de mouvement par [%] ModUi/&MulticlassKeyHelp=SHIFT cliquez sur un sort pour inverser le type d'emplacement de répertoire par défaut consommé\n[Warlock dépense des emplacements de sorts blancs et d'autres dépensent des verts du pacte] diff --git a/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt b/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt index 14370c2de6..b70af6f9ac 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt @@ -234,7 +234,7 @@ ModUi/&MarkInvisibleTeleportersOnLevelMap=+ Contrassegna anche la posizione d ModUi/&MaxAllowedClasses=Classi massime consentite ModUi/&Merchants=Commercianti: ModUi/&Metamagic=Metamagia -ModUi/&ModUi/&EnableCtrlClickDragToBypassQuestItemsOnDrop=Abilita CTRL clic-trascinamento per ignorare i controlli oggetti missione al momento del rilascio +ModUi/&EnableCtrlClickDragToBypassQuestItemsOnDrop=Abilita CTRL clic-trascinamento per ignorare i controlli oggetti missione al momento del rilascio ModUi/&Monsters=Mostri: ModUi/&MovementGridWidthModifier=Moltiplica la larghezza della griglia di movimento per [%] ModUi/&MulticlassKeyHelp=MAIUSC fare clic su un incantesimo inverte il tipo di slot di repertorio predefinito consumato\n[Stregone spende slot incantesimo bianchi e altri spendono quelli verdi del patto] diff --git a/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt index caba6463f2..2a92b6f40c 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt @@ -234,7 +234,7 @@ ModUi/&MarkInvisibleTeleportersOnLevelMap=+ 発見後にレベルマップ上 ModUi/&MaxAllowedClasses=許可されるクラスの最大数 ModUi/&Merchants=販売者: ModUi/&Metamagic=メタマジック -ModUi/&ModUi/&EnableCtrlClickDragToBypassQuestItemsOnDrop=CTRL クリックドラッグを有効にすると、ドロップ時の クエストアイテム チェックをバイパスできます +ModUi/&EnableCtrlClickDragToBypassQuestItemsOnDrop=CTRL クリックドラッグを有効にすると、ドロップ時の クエストアイテム チェックをバイパスできます ModUi/&Monsters=モンスター: ModUi/&MovementGridWidthModifier=移動グリッドの幅を乗算します [%] ModUi/&MulticlassKeyHelp=SHIFT で呪文をクリックすると、消費されるデフォルトのレパートリー スロット タイプが反転します\n[ウォーロックは白い呪文スロットを消費します他の人は協定の緑のものを使います] diff --git a/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt index c19a28b9aa..f43685b287 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt @@ -234,7 +234,7 @@ ModUi/&MarkInvisibleTeleportersOnLevelMap=+ 발견 후 레벨 지도에 보 ModUi/&MaxAllowedClasses=최대 허용 수업 ModUi/&Merchants=상점: ModUi/&Metamagic=메타매직 -ModUi/&ModUi/&EnableCtrlClickDragToBypassQuestItemsOnDrop=CTRL 클릭-드래그를 활성화하여 드롭 시 퀘스트 아이템 검사를 무시합니다. +ModUi/&EnableCtrlClickDragToBypassQuestItemsOnDrop=CTRL 클릭-드래그를 활성화하여 드롭 시 퀘스트 아이템 검사를 무시합니다. ModUi/&Monsters=괴물: ModUi/&MovementGridWidthModifier=이동 그리드 너비에 [%]를 곱합니다. ModUi/&MulticlassKeyHelp=주문을 SHIFT 클릭하면 소비되는 기본 레퍼토리 슬롯 유형이 반전됩니다.\n[워록은 흰색 주문 슬롯을 소비합니다. 다른 사람들은 녹색 계약을 사용합니다.] diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt index 4449e68d40..be428ac0d9 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt @@ -234,7 +234,7 @@ ModUi/&MarkInvisibleTeleportersOnLevelMap=+ Marque também a localização do ModUi/&MaxAllowedClasses=Máximo de classes permitidas ModUi/&Merchants=Comerciantes: ModUi/&Metamagic=Metamágica -ModUi/&ModUi/&EnableCtrlClickDragToBypassQuestItemsOnDrop=Habilitar CTRL clicar e arrastar para ignorar as verificações de itens de missão ao soltar +ModUi/&EnableCtrlClickDragToBypassQuestItemsOnDrop=Habilitar CTRL clicar e arrastar para ignorar as verificações de itens de missão ao soltar ModUi/&Monsters=Monstros: ModUi/&MovementGridWidthModifier=Multiplique a largura da grade de movimento por [%] ModUi/&MulticlassKeyHelp=SHIFT clicar em um feitiço inverte o tipo de slot de repertório padrão consumido\n[Warlock gasta slots de feitiço branco e outros gastam os verdes do pacto] diff --git a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt index 5424604934..f66c5bc83f 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt @@ -234,7 +234,7 @@ ModUi/&MarkInvisibleTeleportersOnLevelMap=+ Также помечать ме ModUi/&MaxAllowedClasses=Максимальное разрешённое количество классов ModUi/&Merchants=Торговцы: ModUi/&Metamagic=Метамагия -ModUi/&ModUi/&EnableCtrlClickDragToBypassQuestItemsOnDrop=Включить обход проверки квестовых предметов для выкидывания при перетаскивание с зажатым CTRL +ModUi/&EnableCtrlClickDragToBypassQuestItemsOnDrop=Включить обход проверки квестовых предметов для выкидывания при перетаскивание с зажатым CTRL ModUi/&Monsters=Монстры: ModUi/&MovementGridWidthModifier=Увеличить ширину сетки передвижения на множитель [%] ModUi/&MulticlassKeyHelp=Нажатие с SHIFT по заклинанию переключает тип затрачиваемой ячейки по умолчанию\n[Колдун тратит белые ячейки заклинаний, а остальные - зелёные ячейки колдуна] diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt index 9d9c03adb1..864971f886 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt @@ -234,7 +234,7 @@ ModUi/&MarkInvisibleTeleportersOnLevelMap=+发现后在关卡地图上标记 ModUi/&MaxAllowedClasses=最大允许职业 ModUi/&Merchants=商家: ModUi/&Metamagic=超魔 -ModUi/&ModUi/&EnableCtrlClickDragToBypassQuestItemsOnDrop=启用 CTRL 单击拖动以绕过任务物品 的丢弃检查 +ModUi/&EnableCtrlClickDragToBypassQuestItemsOnDrop=启用 CTRL 单击拖动以绕过任务物品 的丢弃检查 ModUi/&Monsters=怪物: ModUi/&MovementGridWidthModifier=将移动格子宽度乘以 [%] ModUi/&MulticlassKeyHelp=SHIFT点击法术会反转消耗的默认曲目槽类型\n[术士消耗白色法术位,其他职业消耗绿色的] From 9f86696214677b0c4111f7b4187118294e236836 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Mon, 9 Sep 2024 07:51:03 -0700 Subject: [PATCH 091/212] update translations --- SolastaUnfinishedBusiness/Translations/de/Others-de.txt | 1 + SolastaUnfinishedBusiness/Translations/de/Settings-de.txt | 2 +- SolastaUnfinishedBusiness/Translations/en/Others-en.txt | 1 + SolastaUnfinishedBusiness/Translations/en/Settings-en.txt | 2 +- SolastaUnfinishedBusiness/Translations/es/Others-es.txt | 1 + SolastaUnfinishedBusiness/Translations/es/Settings-es.txt | 2 +- SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt | 1 + SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt | 2 +- SolastaUnfinishedBusiness/Translations/it/Others-it.txt | 1 + SolastaUnfinishedBusiness/Translations/it/Settings-it.txt | 2 +- SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt | 1 + SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt | 2 +- SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt | 1 + SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt | 2 +- SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt | 1 + SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt | 2 +- SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt | 1 + SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt | 2 +- SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt | 1 + SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt | 2 +- 20 files changed, 20 insertions(+), 10 deletions(-) diff --git a/SolastaUnfinishedBusiness/Translations/de/Others-de.txt b/SolastaUnfinishedBusiness/Translations/de/Others-de.txt index fe0d7c2635..438842475e 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Others-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Others-de.txt @@ -167,6 +167,7 @@ Feedback/&AdditionalDamageBrutalStrikeFormat=Brutaler Schlag Feedback/&AdditionalDamageBrutalStrikeLine=Brutaler Schlag verursacht zusätzlichen +{2} Schaden! Feedback/&AdditionalDamageSunderingBlowFormat=Trennender Schlag Feedback/&AdditionalDamageSunderingBlowLine=Sundering Blow verursacht zusätzlichen +{2} Schaden! +Feedback/&BreakFreeAttempt={0} versucht sich von {1} zu befreien Feedback/&ChangeGloombladeDieType={1} ändert den Gloomblade-Würfeltyp von {2} zu {3} Feedback/&ChangeSneakDiceDieType={1} ändert den Schleichwürfeltyp von {2} zu {3} Feedback/&ChangeSneakDiceNumber={1} ändert die Zahl der Schleichwürfel von {2} auf {3} diff --git a/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt b/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt index 1caf3a07a3..849f9b38e7 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt @@ -115,6 +115,7 @@ ModUi/&EnableCharacterChecker=Aktivieren Sie die Schaltfläche „Charakterprüf ModUi/&EnableCharacterExport=Aktivieren Sie STRG-UMSCHALT-(E), um das Zeichen zu exportieren ModUi/&EnableCharactersOnFireToEmitLight=Charaktere, die in Flammen stehen, sollten Licht ausstrahlen [Lichtwürfel, Feuerelementar, Feuernarr, Feuerfischadler, Feuerspinne und Familie der in Flammen stehenden Personen] ModUi/&EnableCheatMenu=Aktivieren Sie das Cheats-Menü +ModUi/&EnableCtrlClickDragToBypassQuestItemsOnDrop=Aktivieren Sie STRG Klicken-Ziehen, um die Überprüfung auf Questgegenstände beim Ablegen zu umgehen. ModUi/&EnableCustomPortraits=Aktivieren Sie Benutzerdefinierte Porträts ModUi/&EnableCustomPortraitsHelp=• Platzieren Sie Ihre benutzerdefinierten Porträts in den Unterordnern Personal oder PreGen , benannt nach dem Vornamen des Helden [d. h.: Anton, Celia, Nialla usw.]\n• Verwenden Sie PNG Bilder, 256 x 384 Pixel groß, mit einer Transparenzebene [verwenden Sie GIMP für beste Ergebnisse] ModUi/&EnableDungeonMakerModdedContent=Aktivieren Sie Dungeon Maker Pro\n[einschließlich flacher Räume, Dungeongrößen von 150 x 150 und 200 x 200 und ohne Schnickschnack, bei dem Assets aus allen Umgebungen gemischt werden] @@ -234,7 +235,6 @@ ModUi/&MarkInvisibleTeleportersOnLevelMap=+ Markieren Sie nach der Entdeckung ModUi/&MaxAllowedClasses=Maximal zulässige Klassen ModUi/&Merchants=Händler: ModUi/&Metamagic=Metamagie -ModUi/&EnableCtrlClickDragToBypassQuestItemsOnDrop=Aktivieren Sie STRG Klicken-Ziehen, um die Überprüfung auf Questgegenstände beim Ablegen zu umgehen. ModUi/&Monsters=Monster: ModUi/&MovementGridWidthModifier=Multiplizieren Sie die Breite des Bewegungsrasters mit [%] ModUi/&MulticlassKeyHelp=UMSCHALT-Klick auf einen Zauber kehrt den verbrauchten Standardrepertoire-Slottyp um.\n[Hexenmeister gibt weiße Zauberslots aus und andere geben Paktgrüne aus] diff --git a/SolastaUnfinishedBusiness/Translations/en/Others-en.txt b/SolastaUnfinishedBusiness/Translations/en/Others-en.txt index 4bd01b6c52..f69a275a84 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Others-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Others-en.txt @@ -167,6 +167,7 @@ Feedback/&AdditionalDamageBrutalStrikeFormat=Brutal Strike Feedback/&AdditionalDamageBrutalStrikeLine=Brutal Strike deals extra +{2} damage! Feedback/&AdditionalDamageSunderingBlowFormat=Sundering Blow Feedback/&AdditionalDamageSunderingBlowLine=Sundering Blow deals extra +{2} damage! +Feedback/&BreakFreeAttempt={0} tries to break free from {1} Feedback/&ChangeGloombladeDieType={1} changes the gloomblade die type from {2} to {3} Feedback/&ChangeSneakDiceDieType={1} changes the sneak die type from {2} to {3} Feedback/&ChangeSneakDiceNumber={1} changes the sneak dice number from {2} to {3} diff --git a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt index ce8912b0ca..5194e61bc4 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt @@ -115,6 +115,7 @@ ModUi/&EnableCharacterChecker=Enable the Character Checker button on Main Screen ModUi/&EnableCharacterExport=Enable CTRL-SHIFT-(E) to export the character ModUi/&EnableCharactersOnFireToEmitLight=Characters On Fire should emit light [Cube of Light, Fire Elemental, Fire Jester, Fire Osprey, Fire Spider, and on fire condition family] ModUi/&EnableCheatMenu=Enable the cheats menu +ModUi/&EnableCtrlClickDragToBypassQuestItemsOnDrop=Enable CTRL click-drag to bypass quest items checks on drop ModUi/&EnableCustomPortraits=Enable Custom Portraits ModUi/&EnableCustomPortraitsHelp=• Place your custom portraits under subfolders Personal or PreGen, named after the hero first name [i.e.: Anton, Celia, Nialla, etc.]\n• Use PNG images, 256 x 384 pixels in size, with a transparency layer [use GIMP for best results] ModUi/&EnableDungeonMakerModdedContent=Enable Dungeon Maker Pro\n[include flat rooms, 150x150 & 200x200 dungeon sizes and no frills mixing assets from all environments] @@ -234,7 +235,6 @@ ModUi/&MarkInvisibleTeleportersOnLevelMap=+ Also mark the location of invisib ModUi/&MaxAllowedClasses=Max allowed classes ModUi/&Merchants=Merchants: ModUi/&Metamagic=Metamagic -ModUi/&EnableCtrlClickDragToBypassQuestItemsOnDrop=Enable CTRL click-drag to bypass quest items checks on drop ModUi/&Monsters=Monsters: ModUi/&MovementGridWidthModifier=Multiply the movement grid width by [%] ModUi/&MulticlassKeyHelp=SHIFT click on a spell inverts the default repertoire slot type consumed\n[Warlock spends white spell slots and others spend pact green ones] diff --git a/SolastaUnfinishedBusiness/Translations/es/Others-es.txt b/SolastaUnfinishedBusiness/Translations/es/Others-es.txt index 3d63069fbb..dcfa8d936f 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Others-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Others-es.txt @@ -167,6 +167,7 @@ Feedback/&AdditionalDamageBrutalStrikeFormat=Golpe brutal Feedback/&AdditionalDamageBrutalStrikeLine=¡Golpe brutal inflige +{2} de daño adicional! Feedback/&AdditionalDamageSunderingBlowFormat=Golpe desgarrador Feedback/&AdditionalDamageSunderingBlowLine=¡Golpe desgarrador inflige +{2} de daño adicional! +Feedback/&BreakFreeAttempt={0} intenta liberarse de {1} Feedback/&ChangeGloombladeDieType={1} cambia el tipo de dado de Gloomblade de {2} a {3} Feedback/&ChangeSneakDiceDieType={1} cambia el tipo de dado furtivo de {2} a {3} Feedback/&ChangeSneakDiceNumber={1} cambia el número del dado furtivo de {2} a {3} diff --git a/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt b/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt index 027cfec2e1..9694e2b808 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt @@ -115,6 +115,7 @@ ModUi/&EnableCharacterChecker=Habilite el botón Comprobador de personajes en la ModUi/&EnableCharacterExport=Habilite CTRL-SHIFT-(E) para exportar el carácter. ModUi/&EnableCharactersOnFireToEmitLight=Los personajes On Fire deben emitir luz [Cubo de luz, Elemental de fuego, Bufón de fuego, Águila pescadora de fuego, Araña de fuego y familia de condición en llamas] ModUi/&EnableCheatMenu=Habilitar el menú de trucos +ModUi/&EnableCtrlClickDragToBypassQuestItemsOnDrop=Habilite la función CTRL de clic y arrastre para omitir las comprobaciones de objetos de misión al soltarlos ModUi/&EnableCustomPortraits=Habilitar Retratos personalizados ModUi/&EnableCustomPortraitsHelp=• Coloque sus retratos personalizados en las subcarpetas Personal o PreGen , que lleva el nombre del nombre del héroe [es decir: Anton, Celia, Nialla, etc.]\n• Utilice PNG imágenes, de 256 x 384 píxeles de tamaño, con una capa de transparencia [use GIMP para obtener mejores resultados] ModUi/&EnableDungeonMakerModdedContent=Habilite Dungeon Maker Pro\n[incluye salas planas, tamaños de mazmorra de 150 x 150 y 200 x 200 y una combinación sencilla de recursos de todos los entornos] @@ -234,7 +235,6 @@ ModUi/&MarkInvisibleTeleportersOnLevelMap=+ También marca la ubicación de l ModUi/&MaxAllowedClasses=Clases máximas permitidas ModUi/&Merchants=Comerciantes: ModUi/&Metamagic=Metamagia -ModUi/&EnableCtrlClickDragToBypassQuestItemsOnDrop=Habilite la función CTRL de clic y arrastre para omitir las comprobaciones de objetos de misión al soltarlos ModUi/&Monsters=Monstruos: ModUi/&MovementGridWidthModifier=Multiplica el ancho de la cuadrícula de movimiento por [%] ModUi/&MulticlassKeyHelp=SHIFT hace clic en un hechizo para invertir el tipo de espacio de repertorio predeterminado consumido\n[Brujo gasta espacios de hechizo blancos y otros gastan los verdes de pacto] diff --git a/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt index 9c3c80c01f..9b6c32c106 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt @@ -167,6 +167,7 @@ Feedback/&AdditionalDamageBrutalStrikeFormat=Grève brutale Feedback/&AdditionalDamageBrutalStrikeLine=Frappe brutale inflige +{2} dégâts supplémentaires ! Feedback/&AdditionalDamageSunderingBlowFormat=Coup destructeur Feedback/&AdditionalDamageSunderingBlowLine=Coup de Fracture inflige +{2} dégâts supplémentaires ! +Feedback/&BreakFreeAttempt={0} essaie de se libérer de {1} Feedback/&ChangeGloombladeDieType={1} change le type de dé de la lame sombre de {2} à {3} Feedback/&ChangeSneakDiceDieType={1} change le type de dé furtif de {2} à {3} Feedback/&ChangeSneakDiceNumber={1} change le nombre de dés furtifs de {2} à {3} diff --git a/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt index 3ecbf9ebc2..59976f0292 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt @@ -115,6 +115,7 @@ ModUi/&EnableCharacterChecker=Activez le bouton Vérificateur de caractères sur ModUi/&EnableCharacterExport=Activez CTRL-SHIFT-(E) pour exporter le caractère ModUi/&EnableCharactersOnFireToEmitLight=Les personnages En feu doivent émettre de la lumière [Cube de lumière, Élémentaire de feu, Bouffon de feu, Balbuzard pêcheur de feu, Araignée de feu et famille de conditions en feu] ModUi/&EnableCheatMenu=Activer le menu des astuces +ModUi/&EnableCtrlClickDragToBypassQuestItemsOnDrop=Activez le clic-glisser CTRL pour contourner les vérifications des objets de quête lors de la chute ModUi/&EnableCustomPortraits=Activer les portraits personnalisés ModUi/&EnableCustomPortraitsHelp=• Placez vos portraits personnalisés dans les sous-dossiers Personnel ou PreGen. , nommé d'après le prénom du héros [c'est-à-dire : Anton, Celia, Nialla, etc.]\n• Utiliser PNG images, d'une taille de 256 x 384 pixels, avec un calque de transparence [utilisez GIMP pour de meilleurs résultats] ModUi/&EnableDungeonMakerModdedContent=Activer Dungeon Maker Pro\n[inclut des salles plates, des donjons de 150 x 150 et 200 x 200 et un mélange sans fioritures des ressources de tous les environnements] @@ -234,7 +235,6 @@ ModUi/&MarkInvisibleTeleportersOnLevelMap=+ Marquez également l'emplacement ModUi/&MaxAllowedClasses=Classes maximales autorisées ModUi/&Merchants=Marchands : ModUi/&Metamagic=Métamagie -ModUi/&EnableCtrlClickDragToBypassQuestItemsOnDrop=Activez le clic-glisser CTRL pour contourner les vérifications des objets de quête lors de la chute ModUi/&Monsters=Monstres : ModUi/&MovementGridWidthModifier=Multipliez la largeur de la grille de mouvement par [%] ModUi/&MulticlassKeyHelp=SHIFT cliquez sur un sort pour inverser le type d'emplacement de répertoire par défaut consommé\n[Warlock dépense des emplacements de sorts blancs et d'autres dépensent des verts du pacte] diff --git a/SolastaUnfinishedBusiness/Translations/it/Others-it.txt b/SolastaUnfinishedBusiness/Translations/it/Others-it.txt index 450ecac308..caba5c22f0 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Others-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Others-it.txt @@ -167,6 +167,7 @@ Feedback/&AdditionalDamageBrutalStrikeFormat=Colpo brutale Feedback/&AdditionalDamageBrutalStrikeLine=Colpo Brutale infligge +{2} danni extra! Feedback/&AdditionalDamageSunderingBlowFormat=Colpo dirompente Feedback/&AdditionalDamageSunderingBlowLine=Colpo dirompente infligge +{2} danni extra! +Feedback/&BreakFreeAttempt={0} cerca di liberarsi da {1} Feedback/&ChangeGloombladeDieType={1} cambia il tipo di dado della lama oscura da {2} a {3} Feedback/&ChangeSneakDiceDieType={1} cambia il tipo di dado furtivo da {2} a {3} Feedback/&ChangeSneakDiceNumber={1} cambia il numero dei dadi furtivi da {2} a {3} diff --git a/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt b/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt index b70af6f9ac..a1a18adda2 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt @@ -115,6 +115,7 @@ ModUi/&EnableCharacterChecker=Abilita il pulsante Controllo caratteri nella sche ModUi/&EnableCharacterExport=Abilita CTRL-MAIUSC-(E) per esportare il carattere ModUi/&EnableCharactersOnFireToEmitLight=I personaggi In fiamme dovrebbero emettere luce [Cubo di luce, Elementale di fuoco, Giullare di fuoco, Falco pescatore di fuoco, Ragno di fuoco e famiglia di condizioni in fiamme] ModUi/&EnableCheatMenu=Abilita il menu dei trucchi +ModUi/&EnableCtrlClickDragToBypassQuestItemsOnDrop=Abilita CTRL clic-trascinamento per ignorare i controlli oggetti missione al momento del rilascio ModUi/&EnableCustomPortraits=Abilita Ritratti personalizzati ModUi/&EnableCustomPortraitsHelp=• Inserisci i tuoi ritratti personalizzati nelle sottocartelle Personale o PreGen , che prende il nome dal nome dell'eroe [es.: Anton, Celia, Nialla, ecc.]\n• Usa PNG immagini, dimensioni 256 x 384 pixel, con un livello di trasparenza [usa GIMP per i migliori risultati] ModUi/&EnableDungeonMakerModdedContent=Abilita Dungeon Maker Pro\n[include stanze piatte, dimensioni di dungeon 150x150 e 200x200 e senza fronzoli mescolando risorse da tutti gli ambienti] @@ -234,7 +235,6 @@ ModUi/&MarkInvisibleTeleportersOnLevelMap=+ Contrassegna anche la posizione d ModUi/&MaxAllowedClasses=Classi massime consentite ModUi/&Merchants=Commercianti: ModUi/&Metamagic=Metamagia -ModUi/&EnableCtrlClickDragToBypassQuestItemsOnDrop=Abilita CTRL clic-trascinamento per ignorare i controlli oggetti missione al momento del rilascio ModUi/&Monsters=Mostri: ModUi/&MovementGridWidthModifier=Moltiplica la larghezza della griglia di movimento per [%] ModUi/&MulticlassKeyHelp=MAIUSC fare clic su un incantesimo inverte il tipo di slot di repertorio predefinito consumato\n[Stregone spende slot incantesimo bianchi e altri spendono quelli verdi del patto] diff --git a/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt index dafb41c8d4..73419f7569 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt @@ -167,6 +167,7 @@ Feedback/&AdditionalDamageBrutalStrikeFormat=ブルータル・ストライク Feedback/&AdditionalDamageBrutalStrikeLine=残忍な一撃は追加の +{2} ダメージを与える! Feedback/&AdditionalDamageSunderingBlowFormat=サンダーブロウ Feedback/&AdditionalDamageSunderingBlowLine=サンダーブロウは追加の +{2} ダメージを与える! +Feedback/&BreakFreeAttempt={0} は {1} から抜け出そうとします Feedback/&ChangeGloombladeDieType={1} はグルームブレードのダイスの種類を {2} から {3} に変更します Feedback/&ChangeSneakDiceDieType={1} はスニークダイスの種類を {2} から {3} に変更します Feedback/&ChangeSneakDiceNumber={1} はスニーク ダイス番号を {2} から {3} に変更します diff --git a/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt index 2a92b6f40c..da36f7ec06 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt @@ -115,6 +115,7 @@ ModUi/&EnableCharacterChecker=メイン画面 > キャラクターでキャラ ModUi/&EnableCharacterExport=CTRL-SHIFT-(E) を有効にして文字をエクスポートします ModUi/&EnableCharactersOnFireToEmitLight=On Fire のキャラクターは、[Cube of Light、Fire Elemental、Fire Jester、Fire Osprey、Fire Spider、および On Fire 状態ファミリー] を発するはずです。 ModUi/&EnableCheatMenu=チートメニューを有効にする +ModUi/&EnableCtrlClickDragToBypassQuestItemsOnDrop=CTRL クリックドラッグを有効にすると、ドロップ時の クエストアイテム チェックをバイパスできます ModUi/&EnableCustomPortraits=カスタムポートレートを有効にする ModUi/&EnableCustomPortraitsHelp=• カスタム ポートレートをサブフォルダ Personal または PreGen に配置します。 、主人公の名前にちなんで名付けられました [例: アントン、セリア、ニアラなど]\n• PNG を使用します画像、サイズ 256 x 384 ピクセル、透明レイヤーあり [最良の結果を得るには GIMP を使用] ModUi/&EnableDungeonMakerModdedContent=Dungeon Maker Pro を有効にする\n[フラット ルーム、150x150 および 200x200 のダンジョン サイズ、あらゆる環境のアセットを簡単に混合する機能が含まれます] @@ -234,7 +235,6 @@ ModUi/&MarkInvisibleTeleportersOnLevelMap=+ 発見後にレベルマップ上 ModUi/&MaxAllowedClasses=許可されるクラスの最大数 ModUi/&Merchants=販売者: ModUi/&Metamagic=メタマジック -ModUi/&EnableCtrlClickDragToBypassQuestItemsOnDrop=CTRL クリックドラッグを有効にすると、ドロップ時の クエストアイテム チェックをバイパスできます ModUi/&Monsters=モンスター: ModUi/&MovementGridWidthModifier=移動グリッドの幅を乗算します [%] ModUi/&MulticlassKeyHelp=SHIFT で呪文をクリックすると、消費されるデフォルトのレパートリー スロット タイプが反転します\n[ウォーロックは白い呪文スロットを消費します他の人は協定の緑のものを使います] diff --git a/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt index 098ce42d86..fed3d8925c 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt @@ -167,6 +167,7 @@ Feedback/&AdditionalDamageBrutalStrikeFormat=잔인한 일격 Feedback/&AdditionalDamageBrutalStrikeLine=잔인한 일격이 추가로 +{2} 피해를 입힙니다! Feedback/&AdditionalDamageSunderingBlowFormat=가르는 일격 Feedback/&AdditionalDamageSunderingBlowLine=Sundering Blow는 추가 +{2} 피해를 입힙니다! +Feedback/&BreakFreeAttempt={0}이(가) {1}으로부터 벗어나려고 시도합니다. Feedback/&ChangeGloombladeDieType={1}은 Gloomblade 다이 유형을 {2}에서 {3}으로 변경합니다. Feedback/&ChangeSneakDiceDieType={1}은 몰래 주사위 유형을 {2}에서 {3}으로 변경합니다. Feedback/&ChangeSneakDiceNumber={1}은 몰래 주사위 번호를 {2}에서 {3}으로 변경합니다. diff --git a/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt index f43685b287..7a0519d2fe 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt @@ -115,6 +115,7 @@ ModUi/&EnableCharacterChecker=메인 화면 > 캐릭터에서 문자 검사기 ModUi/&EnableCharacterExport=캐릭터를 내보내려면 CTRL-SHIFT-(E)를 활성화하세요. ModUi/&EnableCharactersOnFireToEmitLight=불타는 캐릭터는 빛을 내야 합니다. [빛의 큐브, 불의 정령, 불의 광대, 불의 물수리, 불의 거미, 불의 상태의 종족] ModUi/&EnableCheatMenu=치트 메뉴 활성화 +ModUi/&EnableCtrlClickDragToBypassQuestItemsOnDrop=CTRL 클릭-드래그를 활성화하여 드롭 시 퀘스트 아이템 검사를 무시합니다. ModUi/&EnableCustomPortraits=맞춤 초상화 활성화 ModUi/&EnableCustomPortraitsHelp=• 사용자 정의 초상화를 하위 폴더 개인 또는 PreGen 아래에 배치하세요. , 영웅의 이름을 따서 명명됨 [예: Anton, Celia, Nialla 등]\n• PNG 사용 투명 레이어가 있는 256 x 384 픽셀 크기의 이미지 [최상의 결과를 얻으려면 김프 사용] ModUi/&EnableDungeonMakerModdedContent=Dungeon Maker Pro 활성화\n[플랫 룸, 150x150 및 200x200 던전 크기 및 모든 환경의 자산을 혼합하는 장식 없음] @@ -234,7 +235,6 @@ ModUi/&MarkInvisibleTeleportersOnLevelMap=+ 발견 후 레벨 지도에 보 ModUi/&MaxAllowedClasses=최대 허용 수업 ModUi/&Merchants=상점: ModUi/&Metamagic=메타매직 -ModUi/&EnableCtrlClickDragToBypassQuestItemsOnDrop=CTRL 클릭-드래그를 활성화하여 드롭 시 퀘스트 아이템 검사를 무시합니다. ModUi/&Monsters=괴물: ModUi/&MovementGridWidthModifier=이동 그리드 너비에 [%]를 곱합니다. ModUi/&MulticlassKeyHelp=주문을 SHIFT 클릭하면 소비되는 기본 레퍼토리 슬롯 유형이 반전됩니다.\n[워록은 흰색 주문 슬롯을 소비합니다. 다른 사람들은 녹색 계약을 사용합니다.] diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt index a96206b858..9bac5728f7 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt @@ -167,6 +167,7 @@ Feedback/&AdditionalDamageBrutalStrikeFormat=Ataque Brutal Feedback/&AdditionalDamageBrutalStrikeLine=Ataque Brutal causa dano extra de +{2}! Feedback/&AdditionalDamageSunderingBlowFormat=Golpe de separação Feedback/&AdditionalDamageSunderingBlowLine=Golpe Destruidor causa +{2} de dano extra! +Feedback/&BreakFreeAttempt={0} tenta se libertar de {1} Feedback/&ChangeGloombladeDieType={1} altera o tipo de dado da lâmina sombria de {2} para {3} Feedback/&ChangeSneakDiceDieType={1} altera o tipo de dado furtivo de {2} para {3} Feedback/&ChangeSneakDiceNumber={1} altera o número do dado furtivo de {2} para {3} diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt index be428ac0d9..a62930e861 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt @@ -115,6 +115,7 @@ ModUi/&EnableCharacterChecker=Habilite o botão Verificador de Caracteres na Tel ModUi/&EnableCharacterExport=Habilite CTRL-SHIFT-(E) para exportar o caractere ModUi/&EnableCharactersOnFireToEmitLight=Personagens Em Chamas devem emitir luz [Cubo de Luz, Elemental de Fogo, Bobo da Corte de Fogo, Águia Pescadora de Fogo, Aranha de Fogo e família de condição em chamas] ModUi/&EnableCheatMenu=Habilite o menu de cheats +ModUi/&EnableCtrlClickDragToBypassQuestItemsOnDrop=Habilitar CTRL clicar e arrastar para ignorar as verificações de itens de missão ao soltar ModUi/&EnableCustomPortraits=Habilitar Retratos personalizados ModUi/&EnableCustomPortraitsHelp=• Coloque seus retratos personalizados nas subpastas Pessoal ou Pré-geração , nomeado após o nome do herói [ou seja: Anton, Celia, Nialla, etc.]\n• Use PNG imagens, tamanho 256 x 384 pixels, com uma camada de transparência [use o GIMP para obter melhores resultados] ModUi/&EnableDungeonMakerModdedContent=Ative o Dungeon Maker Pro\n[inclua salas planas, tamanhos de masmorras de 150 x 150 e 200 x 200 e mistura simples de recursos de todos os ambientes] @@ -234,7 +235,6 @@ ModUi/&MarkInvisibleTeleportersOnLevelMap=+ Marque também a localização do ModUi/&MaxAllowedClasses=Máximo de classes permitidas ModUi/&Merchants=Comerciantes: ModUi/&Metamagic=Metamágica -ModUi/&EnableCtrlClickDragToBypassQuestItemsOnDrop=Habilitar CTRL clicar e arrastar para ignorar as verificações de itens de missão ao soltar ModUi/&Monsters=Monstros: ModUi/&MovementGridWidthModifier=Multiplique a largura da grade de movimento por [%] ModUi/&MulticlassKeyHelp=SHIFT clicar em um feitiço inverte o tipo de slot de repertório padrão consumido\n[Warlock gasta slots de feitiço branco e outros gastam os verdes do pacto] diff --git a/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt index 25a3262432..897217c00c 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt @@ -167,6 +167,7 @@ Feedback/&AdditionalDamageBrutalStrikeFormat=Жестокий удар Feedback/&AdditionalDamageBrutalStrikeLine=Жестокий удар наносит дополнительно +{2} урона! Feedback/&AdditionalDamageSunderingBlowFormat=Раскалывающий удар Feedback/&AdditionalDamageSunderingBlowLine=Раскалывающий наносит дополнительно +{2} урона! +Feedback/&BreakFreeAttempt={0} пытается вырваться на свободу от {1} Feedback/&ChangeGloombladeDieType={1} меняет тип кости сумрачного клинка с {2} на {3} Feedback/&ChangeSneakDiceDieType={1} изменяет тип кости скрытой атаки с {2} на {3} Feedback/&ChangeSneakDiceNumber={1} изменяет число на кости скрытой атаки с {2} на {3}. diff --git a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt index f66c5bc83f..01932ec3a2 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt @@ -115,6 +115,7 @@ ModUi/&EnableCharacterChecker=Включить кнопку "Тест персо ModUi/&EnableCharacterExport=Включить экспорт персонажа по нажатию CTRL-SHIFT-(E) ModUi/&EnableCharactersOnFireToEmitLight=Горящие персонажи должны излучать свет [Куб света, Огненный элементаль, Огненный балагур, Огненная скопа, Огненный паук, а также любые горящие существа] ModUi/&EnableCheatMenu=Включить меню читов +ModUi/&EnableCtrlClickDragToBypassQuestItemsOnDrop=Включить обход проверки квестовых предметов для выкидывания при перетаскивание с зажатым CTRL ModUi/&EnableCustomPortraits=Включить Пользовательские портреты ModUi/&EnableCustomPortraitsHelp=• Поместите свои пользовательские портреты в подпапки Personal или PreGen с именами, соответствующими именам героев [т.е.: Антон, Селия, Ниалла и т. д.]\n• Используйте изображения размером 256 x 384 пикселей с прозрачным фоном [для достижения наилучших результатов используйте GIMP] ModUi/&EnableDungeonMakerModdedContent=Включить Создатель Подземелий ПРО\n[включает простые комнаты, размеры подземелий 150x150 и 200x200, а также смешивание ассетов из разных наборов окружений без танцев с бубном] @@ -234,7 +235,6 @@ ModUi/&MarkInvisibleTeleportersOnLevelMap=+ Также помечать ме ModUi/&MaxAllowedClasses=Максимальное разрешённое количество классов ModUi/&Merchants=Торговцы: ModUi/&Metamagic=Метамагия -ModUi/&EnableCtrlClickDragToBypassQuestItemsOnDrop=Включить обход проверки квестовых предметов для выкидывания при перетаскивание с зажатым CTRL ModUi/&Monsters=Монстры: ModUi/&MovementGridWidthModifier=Увеличить ширину сетки передвижения на множитель [%] ModUi/&MulticlassKeyHelp=Нажатие с SHIFT по заклинанию переключает тип затрачиваемой ячейки по умолчанию\n[Колдун тратит белые ячейки заклинаний, а остальные - зелёные ячейки колдуна] diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt index 56cb3eb57a..df025e77df 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt @@ -167,6 +167,7 @@ Feedback/&AdditionalDamageBrutalStrikeFormat=凶蛮打击 Feedback/&AdditionalDamageBrutalStrikeLine=凶蛮打击造成额外 +{2} 伤害! Feedback/&AdditionalDamageSunderingBlowFormat=粉碎殴击 Feedback/&AdditionalDamageSunderingBlowLine=粉碎殴击造成额外 +{2} 伤害! +Feedback/&BreakFreeAttempt={0} 试图摆脱 {1} Feedback/&ChangeGloombladeDieType={1} 将 gloomblade 模具类型从 {2} 更改为 {3} Feedback/&ChangeSneakDiceDieType={1} 将偷袭骰类型从 {2} 更改为 {3} Feedback/&ChangeSneakDiceNumber={1} 将偷袭骰值从 {2} 更改为 {3} diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt index 864971f886..9285f457d8 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt @@ -115,6 +115,7 @@ ModUi/&EnableCharacterChecker=在 主屏幕 > 角色 上启用角色检视按钮 ModUi/&EnableCharacterExport=启用CTRL-SHIFT-(E)导出角色 ModUi/&EnableCharactersOnFireToEmitLight=着火的角色应该发光[光之立方体、火元素、火小丑、火鱼鹰、火蜘蛛和着火状态家族] ModUi/&EnableCheatMenu=启用作弊菜单 +ModUi/&EnableCtrlClickDragToBypassQuestItemsOnDrop=启用 CTRL 单击拖动以绕过任务物品 的丢弃检查 ModUi/&EnableCustomPortraits=启用自定义肖像 ModUi/&EnableCustomPortraitsHelp=。将你的自定义肖像放在子文件夹 PersonalPreGen,以英雄名字[即:Anton、Celia、Nialla 等]\n 命名。使用 PNG 图像,大小为 256 x 384 像素,带有透明层[使用 GIMP 以获得最佳效果] ModUi/&EnableDungeonMakerModdedContent=启用地城编辑器Pro\n[包括平坦的房间、150x150 和 200x200 的地牢大小以及简洁的混合来自所有环境的素材] @@ -234,7 +235,6 @@ ModUi/&MarkInvisibleTeleportersOnLevelMap=+发现后在关卡地图上标记 ModUi/&MaxAllowedClasses=最大允许职业 ModUi/&Merchants=商家: ModUi/&Metamagic=超魔 -ModUi/&EnableCtrlClickDragToBypassQuestItemsOnDrop=启用 CTRL 单击拖动以绕过任务物品 的丢弃检查 ModUi/&Monsters=怪物: ModUi/&MovementGridWidthModifier=将移动格子宽度乘以 [%] ModUi/&MulticlassKeyHelp=SHIFT点击法术会反转消耗的默认曲目槽类型\n[术士消耗白色法术位,其他职业消耗绿色的] From e26168b43131e082617c780a26c224b729541c6a Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Mon, 9 Sep 2024 07:59:09 -0700 Subject: [PATCH 092/212] minor tweaks and better combat log on break free activity --- .../Behaviors/Specific/AttackAfterMagicEffect.cs | 6 ++---- .../Builders/EffectDescriptionBuilder.cs | 4 ++-- .../Activities/ActivitiesBreakFreePatcher.cs | 14 ++++++++++++++ .../Patches/RulesetCharacterPatcher.cs | 1 + .../Translations/de/Others-de.txt | 2 +- .../Translations/en/Others-en.txt | 2 +- .../Translations/es/Others-es.txt | 2 +- .../Translations/fr/Others-fr.txt | 2 +- .../Translations/it/Others-it.txt | 2 +- .../Translations/ja/Others-ja.txt | 2 +- .../Translations/ko/Others-ko.txt | 2 +- .../Translations/pt-BR/Others-pt-BR.txt | 2 +- .../Translations/ru/Others-ru.txt | 2 +- .../Translations/zh-CN/Others-zh-CN.txt | 2 +- 14 files changed, 29 insertions(+), 16 deletions(-) diff --git a/SolastaUnfinishedBusiness/Behaviors/Specific/AttackAfterMagicEffect.cs b/SolastaUnfinishedBusiness/Behaviors/Specific/AttackAfterMagicEffect.cs index 5cfc05fcd6..060504be13 100644 --- a/SolastaUnfinishedBusiness/Behaviors/Specific/AttackAfterMagicEffect.cs +++ b/SolastaUnfinishedBusiness/Behaviors/Specific/AttackAfterMagicEffect.cs @@ -116,10 +116,8 @@ internal static List PerformAttackAfterUse(CharacterActio } // always use free attack - var attackActionParams = new CharacterActionParams(caster, ActionDefinitions.Id.AttackFree) - { - AttackMode = attackMode - }; + var attackActionParams = + new CharacterActionParams(caster, ActionDefinitions.Id.AttackFree) { AttackMode = attackMode }; attackActionParams.TargetCharacters.Add(targets[0]); attackActionParams.ActionModifiers.Add(new ActionModifier()); diff --git a/SolastaUnfinishedBusiness/Builders/EffectDescriptionBuilder.cs b/SolastaUnfinishedBusiness/Builders/EffectDescriptionBuilder.cs index ed053fae1b..87bd3f8565 100644 --- a/SolastaUnfinishedBusiness/Builders/EffectDescriptionBuilder.cs +++ b/SolastaUnfinishedBusiness/Builders/EffectDescriptionBuilder.cs @@ -211,7 +211,7 @@ internal EffectDescriptionBuilder ExcludeCaster() return this; } - #if false +#if false internal EffectDescriptionBuilder SetTargetFiltering( TargetFilteringMethod targetFilteringMethod, TargetFilteringTag targetFilteringTag = TargetFilteringTag.No, @@ -225,7 +225,7 @@ internal EffectDescriptionBuilder SetTargetFiltering( return this; } #endif - + internal EffectDescriptionBuilder SetRecurrentEffect(RecurrentEffect recurrentEffect) { _effect.recurrentEffect = recurrentEffect; diff --git a/SolastaUnfinishedBusiness/Patches/Activities/ActivitiesBreakFreePatcher.cs b/SolastaUnfinishedBusiness/Patches/Activities/ActivitiesBreakFreePatcher.cs index a9c3820a02..9ac6c171de 100644 --- a/SolastaUnfinishedBusiness/Patches/Activities/ActivitiesBreakFreePatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/Activities/ActivitiesBreakFreePatcher.cs @@ -3,6 +3,7 @@ using System.Linq; using HarmonyLib; using JetBrains.Annotations; +using SolastaUnfinishedBusiness.Api.Helpers; using SolastaUnfinishedBusiness.Interfaces; using SolastaUnfinishedBusiness.Models; using TA.AI.Activities; @@ -82,6 +83,19 @@ IEnumerator RollAttributeCheck(string attributeName) .Max(); } + var sourceEffect = + rulesetCharacterHero.SpellsCastByMe.FirstOrDefault(x => + x.TrackedConditionGuids.Any(y => y == restrainingCondition.Guid))?.SourceDefinition; + + rulesetCharacter.LogCharacterActivatesAbility( + sourceEffect?.Name ?? string.Empty, + "Feedback/&BreakFreeAttempt", + extra: + [ + (ConsoleStyleDuplet.ParameterType.AbilityInfo, + restrainingCondition.ConditionDefinition.FormatTitle()) + ]); + var actionModifier = new ActionModifier(); rulesetCharacter.ComputeBaseAbilityCheckBonus( diff --git a/SolastaUnfinishedBusiness/Patches/RulesetCharacterPatcher.cs b/SolastaUnfinishedBusiness/Patches/RulesetCharacterPatcher.cs index 7f27e97f6c..c41befb2da 100644 --- a/SolastaUnfinishedBusiness/Patches/RulesetCharacterPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/RulesetCharacterPatcher.cs @@ -1,4 +1,5 @@ // using SolastaUnfinishedBusiness.Classes; + using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; diff --git a/SolastaUnfinishedBusiness/Translations/de/Others-de.txt b/SolastaUnfinishedBusiness/Translations/de/Others-de.txt index 438842475e..b85520f557 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Others-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Others-de.txt @@ -167,7 +167,7 @@ Feedback/&AdditionalDamageBrutalStrikeFormat=Brutaler Schlag Feedback/&AdditionalDamageBrutalStrikeLine=Brutaler Schlag verursacht zusätzlichen +{2} Schaden! Feedback/&AdditionalDamageSunderingBlowFormat=Trennender Schlag Feedback/&AdditionalDamageSunderingBlowLine=Sundering Blow verursacht zusätzlichen +{2} Schaden! -Feedback/&BreakFreeAttempt={0} versucht sich von {1} zu befreien +Feedback/&BreakFreeAttempt={0} versucht sich von {2} zu befreien Feedback/&ChangeGloombladeDieType={1} ändert den Gloomblade-Würfeltyp von {2} zu {3} Feedback/&ChangeSneakDiceDieType={1} ändert den Schleichwürfeltyp von {2} zu {3} Feedback/&ChangeSneakDiceNumber={1} ändert die Zahl der Schleichwürfel von {2} auf {3} diff --git a/SolastaUnfinishedBusiness/Translations/en/Others-en.txt b/SolastaUnfinishedBusiness/Translations/en/Others-en.txt index f69a275a84..82d4481966 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Others-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Others-en.txt @@ -167,7 +167,7 @@ Feedback/&AdditionalDamageBrutalStrikeFormat=Brutal Strike Feedback/&AdditionalDamageBrutalStrikeLine=Brutal Strike deals extra +{2} damage! Feedback/&AdditionalDamageSunderingBlowFormat=Sundering Blow Feedback/&AdditionalDamageSunderingBlowLine=Sundering Blow deals extra +{2} damage! -Feedback/&BreakFreeAttempt={0} tries to break free from {1} +Feedback/&BreakFreeAttempt={0} tries to break free from {2} Feedback/&ChangeGloombladeDieType={1} changes the gloomblade die type from {2} to {3} Feedback/&ChangeSneakDiceDieType={1} changes the sneak die type from {2} to {3} Feedback/&ChangeSneakDiceNumber={1} changes the sneak dice number from {2} to {3} diff --git a/SolastaUnfinishedBusiness/Translations/es/Others-es.txt b/SolastaUnfinishedBusiness/Translations/es/Others-es.txt index dcfa8d936f..0789a358a0 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Others-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Others-es.txt @@ -167,7 +167,7 @@ Feedback/&AdditionalDamageBrutalStrikeFormat=Golpe brutal Feedback/&AdditionalDamageBrutalStrikeLine=¡Golpe brutal inflige +{2} de daño adicional! Feedback/&AdditionalDamageSunderingBlowFormat=Golpe desgarrador Feedback/&AdditionalDamageSunderingBlowLine=¡Golpe desgarrador inflige +{2} de daño adicional! -Feedback/&BreakFreeAttempt={0} intenta liberarse de {1} +Feedback/&BreakFreeAttempt={0} intenta liberarse de {2} Feedback/&ChangeGloombladeDieType={1} cambia el tipo de dado de Gloomblade de {2} a {3} Feedback/&ChangeSneakDiceDieType={1} cambia el tipo de dado furtivo de {2} a {3} Feedback/&ChangeSneakDiceNumber={1} cambia el número del dado furtivo de {2} a {3} diff --git a/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt index 9b6c32c106..69a6cbe45d 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt @@ -167,7 +167,7 @@ Feedback/&AdditionalDamageBrutalStrikeFormat=Grève brutale Feedback/&AdditionalDamageBrutalStrikeLine=Frappe brutale inflige +{2} dégâts supplémentaires ! Feedback/&AdditionalDamageSunderingBlowFormat=Coup destructeur Feedback/&AdditionalDamageSunderingBlowLine=Coup de Fracture inflige +{2} dégâts supplémentaires ! -Feedback/&BreakFreeAttempt={0} essaie de se libérer de {1} +Feedback/&BreakFreeAttempt={0} essaie de se libérer de {2} Feedback/&ChangeGloombladeDieType={1} change le type de dé de la lame sombre de {2} à {3} Feedback/&ChangeSneakDiceDieType={1} change le type de dé furtif de {2} à {3} Feedback/&ChangeSneakDiceNumber={1} change le nombre de dés furtifs de {2} à {3} diff --git a/SolastaUnfinishedBusiness/Translations/it/Others-it.txt b/SolastaUnfinishedBusiness/Translations/it/Others-it.txt index caba5c22f0..3fa3fb7481 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Others-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Others-it.txt @@ -167,7 +167,7 @@ Feedback/&AdditionalDamageBrutalStrikeFormat=Colpo brutale Feedback/&AdditionalDamageBrutalStrikeLine=Colpo Brutale infligge +{2} danni extra! Feedback/&AdditionalDamageSunderingBlowFormat=Colpo dirompente Feedback/&AdditionalDamageSunderingBlowLine=Colpo dirompente infligge +{2} danni extra! -Feedback/&BreakFreeAttempt={0} cerca di liberarsi da {1} +Feedback/&BreakFreeAttempt={0} cerca di liberarsi da {2} Feedback/&ChangeGloombladeDieType={1} cambia il tipo di dado della lama oscura da {2} a {3} Feedback/&ChangeSneakDiceDieType={1} cambia il tipo di dado furtivo da {2} a {3} Feedback/&ChangeSneakDiceNumber={1} cambia il numero dei dadi furtivi da {2} a {3} diff --git a/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt index 73419f7569..7eda0f6e51 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt @@ -167,7 +167,7 @@ Feedback/&AdditionalDamageBrutalStrikeFormat=ブルータル・ストライク Feedback/&AdditionalDamageBrutalStrikeLine=残忍な一撃は追加の +{2} ダメージを与える! Feedback/&AdditionalDamageSunderingBlowFormat=サンダーブロウ Feedback/&AdditionalDamageSunderingBlowLine=サンダーブロウは追加の +{2} ダメージを与える! -Feedback/&BreakFreeAttempt={0} は {1} から抜け出そうとします +Feedback/&BreakFreeAttempt={0} は {2} から抜け出そうとします Feedback/&ChangeGloombladeDieType={1} はグルームブレードのダイスの種類を {2} から {3} に変更します Feedback/&ChangeSneakDiceDieType={1} はスニークダイスの種類を {2} から {3} に変更します Feedback/&ChangeSneakDiceNumber={1} はスニーク ダイス番号を {2} から {3} に変更します diff --git a/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt index fed3d8925c..1e88e9267f 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt @@ -167,7 +167,7 @@ Feedback/&AdditionalDamageBrutalStrikeFormat=잔인한 일격 Feedback/&AdditionalDamageBrutalStrikeLine=잔인한 일격이 추가로 +{2} 피해를 입힙니다! Feedback/&AdditionalDamageSunderingBlowFormat=가르는 일격 Feedback/&AdditionalDamageSunderingBlowLine=Sundering Blow는 추가 +{2} 피해를 입힙니다! -Feedback/&BreakFreeAttempt={0}이(가) {1}으로부터 벗어나려고 시도합니다. +Feedback/&BreakFreeAttempt={0}이(가) {2}으로부터 벗어나려고 시도합니다. Feedback/&ChangeGloombladeDieType={1}은 Gloomblade 다이 유형을 {2}에서 {3}으로 변경합니다. Feedback/&ChangeSneakDiceDieType={1}은 몰래 주사위 유형을 {2}에서 {3}으로 변경합니다. Feedback/&ChangeSneakDiceNumber={1}은 몰래 주사위 번호를 {2}에서 {3}으로 변경합니다. diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt index 9bac5728f7..4e7549407f 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt @@ -167,7 +167,7 @@ Feedback/&AdditionalDamageBrutalStrikeFormat=Ataque Brutal Feedback/&AdditionalDamageBrutalStrikeLine=Ataque Brutal causa dano extra de +{2}! Feedback/&AdditionalDamageSunderingBlowFormat=Golpe de separação Feedback/&AdditionalDamageSunderingBlowLine=Golpe Destruidor causa +{2} de dano extra! -Feedback/&BreakFreeAttempt={0} tenta se libertar de {1} +Feedback/&BreakFreeAttempt={0} tenta se libertar de {2} Feedback/&ChangeGloombladeDieType={1} altera o tipo de dado da lâmina sombria de {2} para {3} Feedback/&ChangeSneakDiceDieType={1} altera o tipo de dado furtivo de {2} para {3} Feedback/&ChangeSneakDiceNumber={1} altera o número do dado furtivo de {2} para {3} diff --git a/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt index 897217c00c..40ecc26c33 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt @@ -167,7 +167,7 @@ Feedback/&AdditionalDamageBrutalStrikeFormat=Жестокий удар Feedback/&AdditionalDamageBrutalStrikeLine=Жестокий удар наносит дополнительно +{2} урона! Feedback/&AdditionalDamageSunderingBlowFormat=Раскалывающий удар Feedback/&AdditionalDamageSunderingBlowLine=Раскалывающий наносит дополнительно +{2} урона! -Feedback/&BreakFreeAttempt={0} пытается вырваться на свободу от {1} +Feedback/&BreakFreeAttempt={0} пытается вырваться на свободу от {2} Feedback/&ChangeGloombladeDieType={1} меняет тип кости сумрачного клинка с {2} на {3} Feedback/&ChangeSneakDiceDieType={1} изменяет тип кости скрытой атаки с {2} на {3} Feedback/&ChangeSneakDiceNumber={1} изменяет число на кости скрытой атаки с {2} на {3}. diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt index df025e77df..0c50481df0 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt @@ -167,7 +167,7 @@ Feedback/&AdditionalDamageBrutalStrikeFormat=凶蛮打击 Feedback/&AdditionalDamageBrutalStrikeLine=凶蛮打击造成额外 +{2} 伤害! Feedback/&AdditionalDamageSunderingBlowFormat=粉碎殴击 Feedback/&AdditionalDamageSunderingBlowLine=粉碎殴击造成额外 +{2} 伤害! -Feedback/&BreakFreeAttempt={0} 试图摆脱 {1} +Feedback/&BreakFreeAttempt={0} 试图摆脱 {2} Feedback/&ChangeGloombladeDieType={1} 将 gloomblade 模具类型从 {2} 更改为 {3} Feedback/&ChangeSneakDiceDieType={1} 将偷袭骰类型从 {2} 更改为 {3} Feedback/&ChangeSneakDiceNumber={1} 将偷袭骰值从 {2} 更改为 {3} From e60d3e9ad2d3b7afe453645dcf8f3fa64a0fe516 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Mon, 9 Sep 2024 09:59:42 -0700 Subject: [PATCH 093/212] tweak effects dealing with light --- .../PowerFeatFlamesOfPhlegethos.json | 16 ++++++++-------- .../PowerFizbanPlatinumShield.json | 6 +++--- .../PowerMalakhAngelicRadiance.json | 14 +++++++------- .../PowerOathOfDevotionHolyNimbus.json | 14 +++++++------- .../PowerMartialArcaneArcherInsightArrow.json | 10 +++++----- .../PowerMoonlitScionFullMoon.json | 12 ++++++------ .../SpellDefinition/CrownOfStars.json | 14 +++++++------- .../SpellDefinition/FizbanPlatinumShield.json | 14 +++++++------- .../SpellDefinition/HolyWeapon.json | 16 ++++++++-------- .../SpellDefinition/Incineration.json | 12 ++++++------ .../SpellDefinition/StarryWisp.json | 14 +++++++------- SolastaUnfinishedBusiness/Feats/RaceFeats.cs | 4 ++-- .../Models/Level20SubclassesContext.cs | 4 ++-- SolastaUnfinishedBusiness/Races/Malakh.cs | 4 ++-- .../Spells/SpellBuildersCantrips.cs | 4 ++-- .../Spells/SpellBuildersLevel05.cs | 11 ++++------- .../Spells/SpellBuildersLevel06.cs | 4 ++-- .../Spells/SpellBuildersLevel07.cs | 4 ++-- .../Subclasses/MartialArcaneArcher.cs | 2 +- .../Subclasses/PatronMoonlitScion.cs | 2 +- 20 files changed, 89 insertions(+), 92 deletions(-) diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerFeatFlamesOfPhlegethos.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerFeatFlamesOfPhlegethos.json index 3104f7b85d..e01eef5bb7 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerFeatFlamesOfPhlegethos.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerFeatFlamesOfPhlegethos.json @@ -13,11 +13,11 @@ "emissiveBorder": "None", "emissiveParameter": 1, "requiresTargetProximity": false, - "targetProximityDistance": 6, + "targetProximityDistance": 30, "targetExcludeCaster": false, "canBePlacedOnCharacter": true, "affectOnlyGround": false, - "targetFilteringMethod": "CharacterOnly", + "targetFilteringMethod": "AllCharacterAndGadgets", "targetFilteringTag": "No", "requiresVisibilityForPosition": true, "inviteOptionalAlly": false, @@ -35,7 +35,7 @@ "durationParameter": 1, "endOfEffect": "EndOfTurn", "hasSavingThrow": false, - "disableSavingThrowOnAllies": false, + "disableSavingThrowOnAllies": true, "savingThrowAbility": "Dexterity", "ignoreCover": false, "grantedConditionOnSave": null, @@ -110,14 +110,14 @@ "dimAdditionalRange": 6, "color": { "$type": "UnityEngine.Color, UnityEngine.CoreModule", - "r": 1.0, - "g": 0.9778601, - "b": 0.78039217, + "r": 0.8396226, + "g": 0.7766465, + "b": 0.5505073, "a": 1.0 }, "graphicsPrefabReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "3e4cdebecc6e0db469720619529e3dc2", + "m_AssetGUID": "fc7cb53da57a8fb40a278d62a885ce58", "m_SubObjectName": "", "m_SubObjectType": "" }, @@ -154,7 +154,7 @@ "$type": "EffectParticleParameters, Assembly-CSharp", "casterParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "81560ac3813217d4d9fd281d5e73c234", + "m_AssetGUID": "74aff29d9a49eb042a3377c2511b13a2", "m_SubObjectName": "", "m_SubObjectType": "" }, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerFizbanPlatinumShield.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerFizbanPlatinumShield.json index 2f9468afdd..7c1d0ebc8d 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerFizbanPlatinumShield.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerFizbanPlatinumShield.json @@ -13,11 +13,11 @@ "emissiveBorder": "None", "emissiveParameter": 1, "requiresTargetProximity": false, - "targetProximityDistance": 6, + "targetProximityDistance": 30, "targetExcludeCaster": false, "canBePlacedOnCharacter": true, "affectOnlyGround": false, - "targetFilteringMethod": "CharacterOnly", + "targetFilteringMethod": "AllCharacterAndGadgets", "targetFilteringTag": "No", "requiresVisibilityForPosition": true, "inviteOptionalAlly": false, @@ -35,7 +35,7 @@ "durationParameter": 1, "endOfEffect": "EndOfTurn", "hasSavingThrow": false, - "disableSavingThrowOnAllies": false, + "disableSavingThrowOnAllies": true, "savingThrowAbility": "Dexterity", "ignoreCover": false, "grantedConditionOnSave": null, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerMalakhAngelicRadiance.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerMalakhAngelicRadiance.json index 30de1e3ef7..d7d419c873 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerMalakhAngelicRadiance.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerMalakhAngelicRadiance.json @@ -13,11 +13,11 @@ "emissiveBorder": "None", "emissiveParameter": 1, "requiresTargetProximity": false, - "targetProximityDistance": 6, + "targetProximityDistance": 30, "targetExcludeCaster": false, "canBePlacedOnCharacter": true, "affectOnlyGround": false, - "targetFilteringMethod": "CharacterOnly", + "targetFilteringMethod": "AllCharacterAndGadgets", "targetFilteringTag": "No", "requiresVisibilityForPosition": true, "inviteOptionalAlly": false, @@ -35,7 +35,7 @@ "durationParameter": 1, "endOfEffect": "EndOfTurn", "hasSavingThrow": false, - "disableSavingThrowOnAllies": false, + "disableSavingThrowOnAllies": true, "savingThrowAbility": "Dexterity", "ignoreCover": false, "grantedConditionOnSave": null, @@ -110,14 +110,14 @@ "dimAdditionalRange": 2, "color": { "$type": "UnityEngine.Color, UnityEngine.CoreModule", - "r": 1.0, - "g": 0.9778601, - "b": 0.78039217, + "r": 0.8396226, + "g": 0.7766465, + "b": 0.5505073, "a": 1.0 }, "graphicsPrefabReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "3e4cdebecc6e0db469720619529e3dc2", + "m_AssetGUID": "fc7cb53da57a8fb40a278d62a885ce58", "m_SubObjectName": "", "m_SubObjectType": "" }, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerOathOfDevotionHolyNimbus.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerOathOfDevotionHolyNimbus.json index ad535599c1..d5a2899dad 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerOathOfDevotionHolyNimbus.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerOathOfDevotionHolyNimbus.json @@ -13,11 +13,11 @@ "emissiveBorder": "None", "emissiveParameter": 1, "requiresTargetProximity": false, - "targetProximityDistance": 6, + "targetProximityDistance": 30, "targetExcludeCaster": true, "canBePlacedOnCharacter": true, "affectOnlyGround": false, - "targetFilteringMethod": "CharacterOnly", + "targetFilteringMethod": "AllCharacterAndGadgets", "targetFilteringTag": "No", "requiresVisibilityForPosition": true, "inviteOptionalAlly": false, @@ -35,7 +35,7 @@ "durationParameter": 1, "endOfEffect": "EndOfTurn", "hasSavingThrow": false, - "disableSavingThrowOnAllies": false, + "disableSavingThrowOnAllies": true, "savingThrowAbility": "Dexterity", "ignoreCover": false, "grantedConditionOnSave": null, @@ -145,14 +145,14 @@ "dimAdditionalRange": 6, "color": { "$type": "UnityEngine.Color, UnityEngine.CoreModule", - "r": 1.0, - "g": 0.9778601, - "b": 0.78039217, + "r": 0.8396226, + "g": 0.7766465, + "b": 0.5505073, "a": 1.0 }, "graphicsPrefabReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "3e4cdebecc6e0db469720619529e3dc2", + "m_AssetGUID": "fc7cb53da57a8fb40a278d62a885ce58", "m_SubObjectName": "", "m_SubObjectType": "" }, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerMartialArcaneArcherInsightArrow.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerMartialArcaneArcherInsightArrow.json index e627a6d45a..52b18870d2 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerMartialArcaneArcherInsightArrow.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerMartialArcaneArcherInsightArrow.json @@ -13,11 +13,11 @@ "emissiveBorder": "None", "emissiveParameter": 1, "requiresTargetProximity": false, - "targetProximityDistance": 6, + "targetProximityDistance": 30, "targetExcludeCaster": false, "canBePlacedOnCharacter": true, "affectOnlyGround": false, - "targetFilteringMethod": "CharacterOnly", + "targetFilteringMethod": "AllCharacterAndGadgets", "targetFilteringTag": "No", "requiresVisibilityForPosition": true, "inviteOptionalAlly": false, @@ -454,11 +454,11 @@ }, "effectAIParameters": { "$type": "EffectAIParameters, Assembly-CSharp", - "aoeScoreMultiplier": 1.0, + "aoeScoreMultiplier": 1.5, "cooldownForCaster": 0, - "cooldownForBattle": 0, + "cooldownForBattle": 2, "sortingScoreMultiplier": 1.0, - "dynamicCooldown": false + "dynamicCooldown": true }, "animationMagicEffect": "Animation0", "lightCounterDispellsEffect": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerMoonlitScionFullMoon.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerMoonlitScionFullMoon.json index c1b17baa71..890fb46572 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerMoonlitScionFullMoon.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerMoonlitScionFullMoon.json @@ -13,11 +13,11 @@ "emissiveBorder": "None", "emissiveParameter": 1, "requiresTargetProximity": false, - "targetProximityDistance": 6, + "targetProximityDistance": 30, "targetExcludeCaster": false, "canBePlacedOnCharacter": true, "affectOnlyGround": false, - "targetFilteringMethod": "CharacterOnly", + "targetFilteringMethod": "AllCharacterAndGadgets", "targetFilteringTag": "No", "requiresVisibilityForPosition": true, "inviteOptionalAlly": false, @@ -34,7 +34,7 @@ "durationType": "Minute", "durationParameter": 1, "endOfEffect": "EndOfTurn", - "hasSavingThrow": false, + "hasSavingThrow": true, "disableSavingThrowOnAllies": false, "savingThrowAbility": "Dexterity", "ignoreCover": false, @@ -345,11 +345,11 @@ }, "effectAIParameters": { "$type": "EffectAIParameters, Assembly-CSharp", - "aoeScoreMultiplier": 1.0, + "aoeScoreMultiplier": 1.5, "cooldownForCaster": 0, - "cooldownForBattle": 0, + "cooldownForBattle": 2, "sortingScoreMultiplier": 1.0, - "dynamicCooldown": false + "dynamicCooldown": true }, "animationMagicEffect": "Animation0", "lightCounterDispellsEffect": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CrownOfStars.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CrownOfStars.json index 910a453ec3..a89a8a2dfd 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CrownOfStars.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CrownOfStars.json @@ -25,11 +25,11 @@ "emissiveBorder": "None", "emissiveParameter": 1, "requiresTargetProximity": false, - "targetProximityDistance": 6, + "targetProximityDistance": 30, "targetExcludeCaster": false, "canBePlacedOnCharacter": true, "affectOnlyGround": false, - "targetFilteringMethod": "CharacterOnly", + "targetFilteringMethod": "AllCharacterAndGadgets", "targetFilteringTag": "No", "requiresVisibilityForPosition": true, "inviteOptionalAlly": false, @@ -47,7 +47,7 @@ "durationParameter": 1, "endOfEffect": "EndOfTurn", "hasSavingThrow": false, - "disableSavingThrowOnAllies": false, + "disableSavingThrowOnAllies": true, "savingThrowAbility": "Dexterity", "ignoreCover": false, "grantedConditionOnSave": null, @@ -122,14 +122,14 @@ "dimAdditionalRange": 6, "color": { "$type": "UnityEngine.Color, UnityEngine.CoreModule", - "r": 1.0, - "g": 0.9778601, - "b": 0.78039217, + "r": 0.8396226, + "g": 0.7766465, + "b": 0.5505073, "a": 1.0 }, "graphicsPrefabReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "3e4cdebecc6e0db469720619529e3dc2", + "m_AssetGUID": "fc7cb53da57a8fb40a278d62a885ce58", "m_SubObjectName": "", "m_SubObjectType": "" }, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/FizbanPlatinumShield.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/FizbanPlatinumShield.json index fb25d77704..b389aae08f 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/FizbanPlatinumShield.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/FizbanPlatinumShield.json @@ -25,11 +25,11 @@ "emissiveBorder": "None", "emissiveParameter": 1, "requiresTargetProximity": false, - "targetProximityDistance": 6, + "targetProximityDistance": 30, "targetExcludeCaster": false, "canBePlacedOnCharacter": true, "affectOnlyGround": false, - "targetFilteringMethod": "CharacterOnly", + "targetFilteringMethod": "AllCharacterAndGadgets", "targetFilteringTag": "No", "requiresVisibilityForPosition": true, "inviteOptionalAlly": false, @@ -47,7 +47,7 @@ "durationParameter": 1, "endOfEffect": "EndOfTurn", "hasSavingThrow": false, - "disableSavingThrowOnAllies": false, + "disableSavingThrowOnAllies": true, "savingThrowAbility": "Dexterity", "ignoreCover": false, "grantedConditionOnSave": null, @@ -122,14 +122,14 @@ "dimAdditionalRange": 6, "color": { "$type": "UnityEngine.Color, UnityEngine.CoreModule", - "r": 1.0, - "g": 0.9778601, - "b": 0.78039217, + "r": 0.8396226, + "g": 0.7766465, + "b": 0.5505073, "a": 1.0 }, "graphicsPrefabReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "3e4cdebecc6e0db469720619529e3dc2", + "m_AssetGUID": "fc7cb53da57a8fb40a278d62a885ce58", "m_SubObjectName": "", "m_SubObjectType": "" }, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/HolyWeapon.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/HolyWeapon.json index 680c6e489d..0f24a21f1f 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/HolyWeapon.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/HolyWeapon.json @@ -25,11 +25,11 @@ "emissiveBorder": "None", "emissiveParameter": 1, "requiresTargetProximity": false, - "targetProximityDistance": 6, + "targetProximityDistance": 30, "targetExcludeCaster": false, "canBePlacedOnCharacter": true, "affectOnlyGround": false, - "targetFilteringMethod": "CharacterOnly", + "targetFilteringMethod": "AllCharacterAndGadgets", "targetFilteringTag": "No", "requiresVisibilityForPosition": true, "inviteOptionalAlly": false, @@ -47,7 +47,7 @@ "durationParameter": 1, "endOfEffect": "EndOfTurn", "hasSavingThrow": false, - "disableSavingThrowOnAllies": false, + "disableSavingThrowOnAllies": true, "savingThrowAbility": "Dexterity", "ignoreCover": false, "grantedConditionOnSave": null, @@ -95,14 +95,14 @@ "dimAdditionalRange": 6, "color": { "$type": "UnityEngine.Color, UnityEngine.CoreModule", - "r": 1.0, - "g": 0.9778601, - "b": 0.78039217, + "r": 0.8396226, + "g": 0.7766465, + "b": 0.5505073, "a": 1.0 }, "graphicsPrefabReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "3e4cdebecc6e0db469720619529e3dc2", + "m_AssetGUID": "fc7cb53da57a8fb40a278d62a885ce58", "m_SubObjectName": "", "m_SubObjectType": "" }, @@ -188,7 +188,7 @@ "alteredDuration": "None" }, "speedType": "Instant", - "speedParameter": -1.0, + "speedParameter": 10.0, "offsetImpactTimeBasedOnDistance": false, "offsetImpactTimeBasedOnDistanceFactor": 0.1, "offsetImpactTimePerTarget": 0.0, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/Incineration.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/Incineration.json index e36a2d97fa..7a30269407 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/Incineration.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/Incineration.json @@ -25,11 +25,11 @@ "emissiveBorder": "None", "emissiveParameter": 1, "requiresTargetProximity": false, - "targetProximityDistance": 6, + "targetProximityDistance": 30, "targetExcludeCaster": false, "canBePlacedOnCharacter": true, "affectOnlyGround": false, - "targetFilteringMethod": "CharacterOnly", + "targetFilteringMethod": "AllCharacterAndGadgets", "targetFilteringTag": "No", "requiresVisibilityForPosition": true, "inviteOptionalAlly": false, @@ -157,14 +157,14 @@ "dimAdditionalRange": 6, "color": { "$type": "UnityEngine.Color, UnityEngine.CoreModule", - "r": 1.0, - "g": 0.9778601, - "b": 0.78039217, + "r": 0.8396226, + "g": 0.7766465, + "b": 0.5505073, "a": 1.0 }, "graphicsPrefabReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "3e4cdebecc6e0db469720619529e3dc2", + "m_AssetGUID": "fc7cb53da57a8fb40a278d62a885ce58", "m_SubObjectName": "", "m_SubObjectType": "" }, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/StarryWisp.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/StarryWisp.json index 0f7878968e..9ef0255ab3 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/StarryWisp.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/StarryWisp.json @@ -25,11 +25,11 @@ "emissiveBorder": "None", "emissiveParameter": 1, "requiresTargetProximity": false, - "targetProximityDistance": 6, + "targetProximityDistance": 30, "targetExcludeCaster": false, "canBePlacedOnCharacter": true, "affectOnlyGround": false, - "targetFilteringMethod": "CharacterOnly", + "targetFilteringMethod": "AllCharacterAndGadgets", "targetFilteringTag": "No", "requiresVisibilityForPosition": true, "inviteOptionalAlly": false, @@ -47,7 +47,7 @@ "durationParameter": 1, "endOfEffect": "EndOfSourceTurn", "hasSavingThrow": false, - "disableSavingThrowOnAllies": false, + "disableSavingThrowOnAllies": true, "savingThrowAbility": "Dexterity", "ignoreCover": false, "grantedConditionOnSave": null, @@ -184,14 +184,14 @@ "dimAdditionalRange": 2, "color": { "$type": "UnityEngine.Color, UnityEngine.CoreModule", - "r": 1.0, - "g": 0.9778601, - "b": 0.78039217, + "r": 0.8396226, + "g": 0.7766465, + "b": 0.5505073, "a": 1.0 }, "graphicsPrefabReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "3e4cdebecc6e0db469720619529e3dc2", + "m_AssetGUID": "fc7cb53da57a8fb40a278d62a885ce58", "m_SubObjectName": "", "m_SubObjectType": "" }, diff --git a/SolastaUnfinishedBusiness/Feats/RaceFeats.cs b/SolastaUnfinishedBusiness/Feats/RaceFeats.cs index 998409e88c..e377b28ec1 100644 --- a/SolastaUnfinishedBusiness/Feats/RaceFeats.cs +++ b/SolastaUnfinishedBusiness/Feats/RaceFeats.cs @@ -1203,7 +1203,7 @@ private static FeatDefinition BuildFlamesOfPhlegethos(List feats .AddToDB(); var lightSourceForm = - FaerieFire.EffectDescription.GetFirstFormOfType(EffectForm.EffectFormType.LightSource); + Light.EffectDescription.GetFirstFormOfType(EffectForm.EffectFormType.LightSource); var power = FeatureDefinitionPowerBuilder .Create($"Power{Name}") @@ -1211,7 +1211,7 @@ private static FeatDefinition BuildFlamesOfPhlegethos(List feats .SetUsesFixed(ActivationTime.NoCost) .SetEffectDescription( EffectDescriptionBuilder - .Create() + .Create(Light) .SetDurationData(DurationType.Round, 1) .SetTargetingData(Side.Ally, RangeType.Self, 0, TargetType.Self) .SetEffectForms( diff --git a/SolastaUnfinishedBusiness/Models/Level20SubclassesContext.cs b/SolastaUnfinishedBusiness/Models/Level20SubclassesContext.cs index 15b508b80f..872f50c33d 100644 --- a/SolastaUnfinishedBusiness/Models/Level20SubclassesContext.cs +++ b/SolastaUnfinishedBusiness/Models/Level20SubclassesContext.cs @@ -832,7 +832,7 @@ private static void PaladinLoad() .SetFeatures(savingThrowAffinityOathOfDevotionHolyNimbus) .AddToDB(); - var lightSourceForm = FaerieFire.EffectDescription.GetFirstFormOfType(EffectForm.EffectFormType.LightSource); + var lightSourceForm = Light.EffectDescription.GetFirstFormOfType(EffectForm.EffectFormType.LightSource); var powerOathOfDevotionHolyNimbus = FeatureDefinitionPowerBuilder .Create("PowerOathOfDevotionHolyNimbus") @@ -840,7 +840,7 @@ private static void PaladinLoad() .SetUsesFixed(ActivationTime.Action, RechargeRate.LongRest) .SetEffectDescription( EffectDescriptionBuilder - .Create() + .Create(Light) .SetDurationData(DurationType.Minute, 1) .SetTargetingData(Side.Enemy, RangeType.Self, 0, TargetType.Sphere, 6) .SetRecurrentEffect( diff --git a/SolastaUnfinishedBusiness/Races/Malakh.cs b/SolastaUnfinishedBusiness/Races/Malakh.cs index 7dc24f1b86..1a7cac0fe5 100644 --- a/SolastaUnfinishedBusiness/Races/Malakh.cs +++ b/SolastaUnfinishedBusiness/Races/Malakh.cs @@ -261,7 +261,7 @@ private static FeatureDefinitionPower BuildAngelicRadiance(FeatureDefinition add .AddToDB(); var faerieFireLightSource = - SpellDefinitions.FaerieFire.EffectDescription.GetFirstFormOfType(EffectForm.EffectFormType.LightSource); + SpellDefinitions.Light.EffectDescription.GetFirstFormOfType(EffectForm.EffectFormType.LightSource); var powerMalakhAngelicRadiance = FeatureDefinitionPowerBuilder .Create($"Power{Name}AngelicRadiance") @@ -269,7 +269,7 @@ private static FeatureDefinitionPower BuildAngelicRadiance(FeatureDefinition add .SetUsesFixed(ActivationTime.BonusAction, RechargeRate.LongRest) .SetEffectDescription( EffectDescriptionBuilder - .Create() + .Create(SpellDefinitions.Light) .SetDurationData(DurationType.Minute, 1) .SetTargetingData(Side.All, RangeType.Self, 0, TargetType.Self) .SetEffectForms( diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs index 81f398b9b5..0394957b5f 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs @@ -493,7 +493,7 @@ internal static SpellDefinition BuildStarryWisp() const string NAME = "StarryWisp"; var lightSourceForm = - FaerieFire.EffectDescription.GetFirstFormOfType(EffectForm.EffectFormType.LightSource); + SpellDefinitions.Light.EffectDescription.GetFirstFormOfType(EffectForm.EffectFormType.LightSource); var condition = ConditionDefinitionBuilder .Create($"Condition{NAME}") @@ -516,7 +516,7 @@ internal static SpellDefinition BuildStarryWisp() .SetVocalSpellSameType(VocalSpellSemeType.Attack) .SetEffectDescription( EffectDescriptionBuilder - .Create() + .Create(SpellDefinitions.Light) .SetDurationData(DurationType.Round, 1, TurnOccurenceType.EndOfSourceTurn) .SetTargetingData(Side.Enemy, RangeType.RangeHit, 12, TargetType.IndividualsUnique) .SetEffectAdvancement(EffectIncrementMethod.CasterLevelTable, additionalDicePerIncrement: 1) diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel05.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel05.cs index 5df53ccc7d..e633b1cc29 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel05.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel05.cs @@ -233,7 +233,7 @@ internal static SpellDefinition BuildIncineration() { const string NAME = "Incineration"; - var lightSourceForm = FaerieFire.EffectDescription + var lightSourceForm = Light.EffectDescription .GetFirstFormOfType(EffectForm.EffectFormType.LightSource).LightSourceForm; var conditionIncineration = ConditionDefinitionBuilder @@ -263,7 +263,7 @@ internal static SpellDefinition BuildIncineration() .SetRequiresConcentration(true) .SetEffectDescription( EffectDescriptionBuilder - .Create() + .Create(Light) .SetDurationData(DurationType.Minute, 1) .SetTargetingData(Side.Enemy, RangeType.Distance, 18, TargetType.IndividualsUnique) .SetSavingThrowData(false, AttributeDefinitions.Dexterity, true, @@ -523,7 +523,7 @@ internal static SpellDefinition BuildHolyWeapon() TagsDefinitions.MagicalWeapon, TagsDefinitions.Criticity.Important, ValidatorsWeapon.AlwaysValid)) .AddToDB(); - var lightSourceForm = FaerieFire.EffectDescription.GetFirstFormOfType(EffectForm.EffectFormType.LightSource); + var lightSourceForm = Light.EffectDescription.GetFirstFormOfType(EffectForm.EffectFormType.LightSource); var spell = SpellDefinitionBuilder .Create(NAME) @@ -538,7 +538,7 @@ internal static SpellDefinition BuildHolyWeapon() .SetRequiresConcentration(true) .SetEffectDescription( EffectDescriptionBuilder - .Create() + .Create(Light) .SetDurationData(DurationType.Hour, 1) .SetTargetingData(Side.Enemy, RangeType.Touch, 0, TargetType.Item, itemSelectionType: ActionDefinitions.ItemSelectionType.EquippedNoLightSource) @@ -556,14 +556,11 @@ internal static SpellDefinition BuildHolyWeapon() ItemPropertyUsage.Unlimited, 0, new FeatureUnlockByLevel(additionalDamage, 0)) .Build(), EffectFormBuilder.ConditionForm(condition, ConditionForm.ConditionOperation.Add, true)) - .UseQuickAnimations() .SetParticleEffectParameters(PowerTraditionLightBlindingFlash) .SetEffectEffectParameters(new AssetReference()) .Build()) .AddToDB(); - spell.EffectDescription.EffectForms[0].createdByCharacter = true; - return spell; } diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel06.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel06.cs index 7ce411cea3..8edf0ae1a2 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel06.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel06.cs @@ -311,7 +311,7 @@ internal static SpellDefinition BuildFizbanPlatinumShield() conditionMark.GuiPresentation.description = Gui.EmptyContent; - var lightSourceForm = FaerieFire.EffectDescription.GetFirstFormOfType(EffectForm.EffectFormType.LightSource); + var lightSourceForm = Light.EffectDescription.GetFirstFormOfType(EffectForm.EffectFormType.LightSource); var spell = SpellDefinitionBuilder .Create(NAME) @@ -327,7 +327,7 @@ internal static SpellDefinition BuildFizbanPlatinumShield() .SetRequiresConcentration(true) .SetEffectDescription( EffectDescriptionBuilder - .Create() + .Create(Light) .SetDurationData(DurationType.Minute, 1) .SetTargetingData(Side.Ally, RangeType.Distance, 12, TargetType.IndividualsUnique) .SetEffectForms( diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel07.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel07.cs index 18127366b7..1aa863e987 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel07.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel07.cs @@ -330,7 +330,7 @@ internal static SpellDefinition BuildCrownOfStars() conditionCrownOfStars.GuiPresentation.description = Gui.EmptyContent; - var lightSourceForm = FaerieFire.EffectDescription + var lightSourceForm = Light.EffectDescription .GetFirstFormOfType(EffectForm.EffectFormType.LightSource).LightSourceForm; var spell = SpellDefinitionBuilder @@ -345,7 +345,7 @@ internal static SpellDefinition BuildCrownOfStars() .SetVocalSpellSameType(VocalSpellSemeType.Buff) .SetEffectDescription( EffectDescriptionBuilder - .Create() + .Create(Light) .SetDurationData(DurationType.Hour, 1) .SetTargetingData(Side.Ally, RangeType.Self, 0, TargetType.Self) .SetEffectAdvancement(EffectIncrementMethod.PerAdditionalSlotLevel, diff --git a/SolastaUnfinishedBusiness/Subclasses/MartialArcaneArcher.cs b/SolastaUnfinishedBusiness/Subclasses/MartialArcaneArcher.cs index b22cd9d06a..49bdcb6fda 100644 --- a/SolastaUnfinishedBusiness/Subclasses/MartialArcaneArcher.cs +++ b/SolastaUnfinishedBusiness/Subclasses/MartialArcaneArcher.cs @@ -462,7 +462,7 @@ private static List BuildArcaneShotPowers( .SetSharedPool(ActivationTime.NoCost, pool) .SetEffectDescription( EffectDescriptionBuilder - .Create() + .Create(SpellDefinitions.FaerieFire) .SetTargetingData(Side.Enemy, RangeType.Distance, 1, TargetType.Individuals) .SetDurationData(DurationType.Round, 1, TurnOccurenceType.EndOfSourceTurn) .SetParticleEffectParameters(SpellDefinitions.FaerieFire) diff --git a/SolastaUnfinishedBusiness/Subclasses/PatronMoonlitScion.cs b/SolastaUnfinishedBusiness/Subclasses/PatronMoonlitScion.cs index 4bd7b372b3..3b8c27a364 100644 --- a/SolastaUnfinishedBusiness/Subclasses/PatronMoonlitScion.cs +++ b/SolastaUnfinishedBusiness/Subclasses/PatronMoonlitScion.cs @@ -150,7 +150,7 @@ public PatronMoonlitScion() .SetSharedPool(ActivationTime.BonusAction, powerLunarCloak) .SetEffectDescription( EffectDescriptionBuilder - .Create() + .Create(FaerieFire) .SetDurationData(DurationType.Minute, 1) .SetTargetingData(Side.Ally, RangeType.Self, 0, TargetType.Self) .SetEffectForms( From 06738283593dd7f5f3ece041cef7d768fdde1e6b Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Mon, 9 Sep 2024 10:04:01 -0700 Subject: [PATCH 094/212] tweak break free activities combat log messages --- .../Patches/Activities/ActivitiesBreakFreePatcher.cs | 8 ++------ .../Patches/CharacterActionBreakFreePatcher.cs | 10 ++++++++++ 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/SolastaUnfinishedBusiness/Patches/Activities/ActivitiesBreakFreePatcher.cs b/SolastaUnfinishedBusiness/Patches/Activities/ActivitiesBreakFreePatcher.cs index 9ac6c171de..c649bf97b5 100644 --- a/SolastaUnfinishedBusiness/Patches/Activities/ActivitiesBreakFreePatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/Activities/ActivitiesBreakFreePatcher.cs @@ -83,16 +83,12 @@ IEnumerator RollAttributeCheck(string attributeName) .Max(); } - var sourceEffect = - rulesetCharacterHero.SpellsCastByMe.FirstOrDefault(x => - x.TrackedConditionGuids.Any(y => y == restrainingCondition.Guid))?.SourceDefinition; - rulesetCharacter.LogCharacterActivatesAbility( - sourceEffect?.Name ?? string.Empty, + string.Empty, "Feedback/&BreakFreeAttempt", extra: [ - (ConsoleStyleDuplet.ParameterType.AbilityInfo, + (ConsoleStyleDuplet.ParameterType.Negative, restrainingCondition.ConditionDefinition.FormatTitle()) ]); diff --git a/SolastaUnfinishedBusiness/Patches/CharacterActionBreakFreePatcher.cs b/SolastaUnfinishedBusiness/Patches/CharacterActionBreakFreePatcher.cs index 23b27bc956..6b7348ae6d 100644 --- a/SolastaUnfinishedBusiness/Patches/CharacterActionBreakFreePatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/CharacterActionBreakFreePatcher.cs @@ -3,6 +3,7 @@ using System.Linq; using HarmonyLib; using JetBrains.Annotations; +using SolastaUnfinishedBusiness.Api.Helpers; using SolastaUnfinishedBusiness.Interfaces; using SolastaUnfinishedBusiness.Models; using static RuleDefinitions; @@ -149,6 +150,15 @@ void CalculateDC(string newAbilityScoreName) .Max(); } + rulesetCharacter.LogCharacterActivatesAbility( + string.Empty, + "Feedback/&BreakFreeAttempt", + extra: + [ + (ConsoleStyleDuplet.ParameterType.Negative, + restrainingCondition.ConditionDefinition.FormatTitle()) + ]); + abilityScoreName = newAbilityScoreName; proficiencyName = string.Empty; } From 7e3f53ba2e264bd2f0de5d1daa508b541f827a53 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Mon, 9 Sep 2024 12:27:34 -0700 Subject: [PATCH 095/212] update translations --- .../Translations/de/Spells/Spells05-de.txt | 2 ++ .../Translations/en/Spells/Spells05-en.txt | 2 ++ .../Translations/es/Spells/Spells05-es.txt | 2 ++ .../Translations/fr/Spells/Spells05-fr.txt | 2 ++ .../Translations/it/Spells/Spells05-it.txt | 2 ++ .../Translations/ja/Spells/Spells05-ja.txt | 2 ++ .../Translations/ko/Spells/Spells05-ko.txt | 2 ++ .../Translations/pt-BR/Spells/Spells05-pt-BR.txt | 2 ++ .../Translations/ru/Spells/Spells05-ru.txt | 2 ++ .../Translations/zh-CN/Spells/Spells05-zh-CN.txt | 2 ++ 10 files changed, 20 insertions(+) diff --git a/SolastaUnfinishedBusiness/Translations/de/Spells/Spells05-de.txt b/SolastaUnfinishedBusiness/Translations/de/Spells/Spells05-de.txt index 0d6ee3442c..e2e71b949a 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Spells/Spells05-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Spells/Spells05-de.txt @@ -44,6 +44,8 @@ Spell/&SonicBoomDescription=Eine kleine Kugel in derselben Farbe wie der verwend Spell/&SonicBoomTitle=Überschallknall Spell/&SteelWhirlwindDescription=Du schwingst die Waffe, die du beim Zaubern benutzt hast, und verschwindest dann, um wie der Wind zuzuschlagen. Wähle bis zu fünf Kreaturen, die du in Reichweite sehen kannst. Führe einen Nahkampfangriff gegen jedes Ziel aus. Bei einem Treffer erleidet das Ziel 6d10 Kraftschaden. Du kannst dich dann zu einem freien Ort teleportieren, den du innerhalb von 5 Fuß von einem der Ziele sehen kannst, die du getroffen oder verfehlt hast. Spell/&SteelWhirlwindTitle=Stahlwindschlag +Spell/&SwiftQuiverDescription=Du wandelst deinen Köcher um, sodass er einen endlosen Vorrat an nicht-magischer Munition produziert, die dir scheinbar in die Hand springt, wenn du danach greifst. In jedem deiner Züge, bis der Zauber endet, kannst du eine Bonusaktion nutzen, um zwei Angriffe mit einer Waffe auszuführen, die Munition aus dem Köcher verwendet. Jedes Mal, wenn du einen solchen Fernangriff ausführst, ersetzt dein Köcher auf magische Weise das von dir verwendete Munitionsstück durch ein ähnliches Stück nicht-magischer Munition. Alle durch diesen Zauber erzeugten Munitionsstücke zerfallen, wenn der Zauber endet. Wenn der Köcher deinen Besitz verlässt, endet der Zauber. +Spell/&SwiftQuiverTitle=Schneller Köcher Spell/&SynapticStaticDescription=Du wählst einen Punkt innerhalb der Reichweite und lässt dort psychische Energie explodieren. Jede Kreatur in einer Kugel mit einem Radius von 20 Fuß, die auf diesen Punkt zentriert ist, muss einen Intelligenzrettungswurf machen. Ein Ziel erleidet bei einem misslungenen Rettungswurf 8W6 psychischen Schaden oder bei einem erfolgreichen Rettungswurf die Hälfte. Nach einem misslungenen Rettungswurf hat ein Ziel 1 Minute lang verwirrte Gedanken. Während dieser Zeit würfelt es einen W6 und zieht die gewürfelte Zahl von all seinen Angriffswürfen und Fähigkeitswürfen ab. Das Ziel kann am Ende jeder seiner Runden einen Intelligenzrettungswurf machen und bei einem Erfolg den Effekt auf sich selbst beenden. Spell/&SynapticStaticTitle=Synaptische Statik Spell/&TelekinesisDescription=Sie können versuchen, eine riesige oder kleinere Kreatur zu bewegen. Führen Sie einen Fähigkeitstest mit Ihrer Zauberfähigkeit durch, der durch den Stärketest der Kreatur bestritten wird. Wenn Sie den Wettkampf gewinnen, bewegen Sie die Kreatur bis zu 30 Fuß in jede Richtung, jedoch nicht über die Reichweite dieses Zaubers hinaus. Bis zum Ende Ihres nächsten Zuges ist die Kreatur in Ihrem telekinetischen Griff gefangen. In den folgenden Runden können Sie Ihre Aktion verwenden, um zu versuchen, Ihren telekinetischen Griff um die Kreatur aufrechtzuerhalten, indem Sie den Wettkampf wiederholen, oder eine neue Kreatur anvisieren und so den Fesselungseffekt auf die zuvor betroffene Kreatur beenden. diff --git a/SolastaUnfinishedBusiness/Translations/en/Spells/Spells05-en.txt b/SolastaUnfinishedBusiness/Translations/en/Spells/Spells05-en.txt index 1e16f54f57..72e97b34ab 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Spells/Spells05-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Spells/Spells05-en.txt @@ -44,6 +44,8 @@ Spell/&SonicBoomDescription=A small orb the same color as the balloon used appea Spell/&SonicBoomTitle=Sonic Boom Spell/&SteelWhirlwindDescription=You flourish the weapon used in the casting and then vanish to strike like the wind. Choose up to five creatures you can see within range. Make a melee spell attack against each target. On a hit, a target takes 6d10 force damage. You can then teleport to an unoccupied space you can see within 5 feet of one of the targets you hit or missed. Spell/&SteelWhirlwindTitle=Steel Wind Strike +Spell/&SwiftQuiverDescription=You transmute your quiver so it produces an endless supply of non-magical ammunition, which seems to leap into your hand when you reach for it. On each of your turns until the spell ends, you can use a bonus action to make two attacks with a weapon that uses ammunition from the quiver. Each time you make such a ranged attack, your quiver magically replaces the piece of ammunition you used with a similar piece of non-magical ammunition. Any pieces of ammunition created by this spell disintegrate when the spell ends. If the quiver leaves your possession, the spell ends. +Spell/&SwiftQuiverTitle=Swift Quiver Spell/&SynapticStaticDescription=You choose a point within range and cause psychic energy to explode there. Each creature in a 20-foot-radius sphere centered on that point must make an Intelligence saving throw. A target takes 8d6 psychic damage on a failed save, or half as much damage on a successful After a failed save, a target has muddled thoughts for 1 minute. During that time, it rolls a d6 and subtracts the number rolled from all its attack rolls and ability checks. The target can make an Intelligence saving throw at the end of each of its turns, ending the effect on itself on a success. Spell/&SynapticStaticTitle=Synaptic Static Spell/&TelekinesisDescription=You can try to move a Huge or smaller creature. Make an ability check with your spellcasting ability contested by the creature's Strength check. If you win the contest, you move the creature up to 30 feet in any direction, but not beyond the range of this spell. Until the end of your next turn, the creature is restrained in your telekinetic grip. On subsequent rounds, you can use your action to attempt to maintain your telekinetic grip on the creature by repeating the contest, or target a new creature, ending the restrained effect on the previously affected creature. diff --git a/SolastaUnfinishedBusiness/Translations/es/Spells/Spells05-es.txt b/SolastaUnfinishedBusiness/Translations/es/Spells/Spells05-es.txt index c46b11a656..7837970d55 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Spells/Spells05-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Spells/Spells05-es.txt @@ -44,6 +44,8 @@ Spell/&SonicBoomDescription=Un pequeño orbe del mismo color que el globo utiliz Spell/&SonicBoomTitle=Estampido supersónico Spell/&SteelWhirlwindDescription=Haces florecer el arma que usaste para lanzar el hechizo y luego desapareces para atacar como el viento. Elige hasta cinco criaturas que puedas ver dentro del alcance. Realiza un ataque de hechizo cuerpo a cuerpo contra cada objetivo. Si impactas, el objetivo recibe 6d10 puntos de daño de fuerza. Luego puedes teletransportarte a un espacio desocupado que puedas ver a 5 pies o menos de uno de los objetivos a los que impactaste o fallaste. Spell/&SteelWhirlwindTitle=Golpe de viento de acero +Spell/&SwiftQuiverDescription=Transmutas tu carcaj para que produzca un suministro infinito de munición no mágica, que parece saltar a tu mano cuando intentas cogerla. En cada uno de tus turnos hasta que el hechizo termine, puedes usar una acción adicional para realizar dos ataques con un arma que use munición del carcaj. Cada vez que realices un ataque a distancia, tu carcaj reemplaza mágicamente la pieza de munición que usaste con una pieza similar de munición no mágica. Cualquier pieza de munición creada por este hechizo se desintegra cuando el hechizo termina. Si el carcaj deja tu posesión, el hechizo termina. +Spell/&SwiftQuiverTitle=Carcaj veloz Spell/&SynapticStaticDescription=Eliges un punto dentro del alcance y haces que la energía psíquica explote allí. Cada criatura en una esfera de 20 pies de radio centrada en ese punto debe realizar una tirada de salvación de Inteligencia. Un objetivo sufre 8d6 de daño psíquico si falla la salvación, o la mitad de daño si tiene éxito. Después de una salvación fallida, un objetivo tiene pensamientos confusos durante 1 minuto. Durante ese tiempo, tira 1d6 y resta el número obtenido de todas sus tiradas de ataque y comprobaciones de característica. El objetivo puede realizar una tirada de salvación de Inteligencia al final de cada uno de sus turnos, terminando el efecto sobre sí mismo si tiene éxito. Spell/&SynapticStaticTitle=Estática sináptica Spell/&TelekinesisDescription=Puedes intentar mover una criatura Enorme o más pequeña. Haz una prueba de habilidad con tu habilidad de lanzamiento de conjuros en disputa con la prueba de Fuerza de la criatura. Si ganas la disputa, mueves a la criatura hasta 30 pies en cualquier dirección, pero no más allá del alcance de este conjuro. Hasta el final de tu siguiente turno, la criatura está restringida por tu control telequinético. En las rondas siguientes, puedes usar tu acción para intentar mantener tu control telequinético sobre la criatura repitiendo la disputa, o seleccionando una nueva criatura como objetivo, terminando el efecto de restricción sobre la criatura afectada anteriormente. diff --git a/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells05-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells05-fr.txt index 67ec57b46f..21c1a2a72c 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells05-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells05-fr.txt @@ -44,6 +44,8 @@ Spell/&SonicBoomDescription=Un petit orbe de la même couleur que le ballon util Spell/&SonicBoomTitle=Détonation supersonique Spell/&SteelWhirlwindDescription=Vous brandissez l'arme utilisée pour l'incantation, puis disparaissez pour frapper comme le vent. Choisissez jusqu'à cinq créatures que vous pouvez voir à portée. Lancez une attaque de sort au corps à corps contre chaque cible. En cas de succès, la cible subit 6d10 dégâts de force. Vous pouvez ensuite vous téléporter dans un espace inoccupé que vous pouvez voir à 1,50 mètre ou moins de l'une des cibles que vous avez touchées ou manquées. Spell/&SteelWhirlwindTitle=Grève du vent en acier +Spell/&SwiftQuiverDescription=Vous transmutez votre carquois de manière à ce qu'il produise une réserve infinie de munitions non magiques, qui semblent bondir dans votre main lorsque vous les attrapez. À chacun de vos tours jusqu'à la fin du sort, vous pouvez utiliser une action bonus pour effectuer deux attaques avec une arme qui utilise des munitions du carquois. Chaque fois que vous effectuez une telle attaque à distance, votre carquois remplace magiquement la munition que vous avez utilisée par une munition non magique similaire. Toutes les munitions créées par ce sort se désintègrent lorsque le sort prend fin. Si le carquois quitte votre possession, le sort prend fin. +Spell/&SwiftQuiverTitle=Carquois rapide Spell/&SynapticStaticDescription=Vous choisissez un point à portée et faites exploser de l'énergie psychique à cet endroit. Chaque créature dans une sphère de 6 mètres de rayon centrée sur ce point doit effectuer un jet de sauvegarde d'Intelligence. Une cible subit 8d6 dégâts psychiques en cas d'échec, ou la moitié de ces dégâts en cas de réussite. Après un échec, une cible a les pensées embrouillées pendant 1 minute. Pendant ce temps, elle lance un d6 et soustrait le résultat obtenu de tous ses jets d'attaque et de caractéristique. La cible peut effectuer un jet de sauvegarde d'Intelligence à la fin de chacun de ses tours, mettant fin à l'effet sur elle-même en cas de réussite. Spell/&SynapticStaticTitle=Statique synaptique Spell/&TelekinesisDescription=Vous pouvez essayer de déplacer une créature de taille Géante ou plus petite. Effectuez un test de caractéristique avec votre capacité de lancer de sorts contestée par le test de Force de la créature. Si vous remportez le concours, vous déplacez la créature jusqu'à 9 mètres dans n'importe quelle direction, mais pas au-delà de la portée de ce sort. Jusqu'à la fin de votre prochain tour, la créature est entravée par votre emprise télékinétique. Lors des tours suivants, vous pouvez utiliser votre action pour tenter de maintenir votre emprise télékinétique sur la créature en répétant le concours, ou cibler une nouvelle créature, mettant fin à l'effet d'entrave sur la créature précédemment affectée. diff --git a/SolastaUnfinishedBusiness/Translations/it/Spells/Spells05-it.txt b/SolastaUnfinishedBusiness/Translations/it/Spells/Spells05-it.txt index c35c3238dc..fce322679e 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Spells/Spells05-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Spells/Spells05-it.txt @@ -44,6 +44,8 @@ Spell/&SonicBoomDescription=Un piccolo globo dello stesso colore del palloncino Spell/&SonicBoomTitle=Boom sonico Spell/&SteelWhirlwindDescription=Fai roteare l'arma usata nel lancio e poi sparisci per colpire come il vento. Scegli fino a cinque creature che puoi vedere entro il raggio d'azione. Fai un attacco di incantesimo in mischia contro ogni bersaglio. Se va a segno, un bersaglio subisce 6d10 danni da forza. Puoi quindi teletrasportarti in uno spazio non occupato che puoi vedere entro 5 piedi da uno dei bersagli che hai colpito o mancato. Spell/&SteelWhirlwindTitle=Colpo di vento in acciaio +Spell/&SwiftQuiverDescription=Trasmuti la tua faretra in modo che produca una scorta infinita di munizioni non magiche, che sembrano balzarti in mano quando le prendi. In ognuno dei tuoi turni fino alla fine dell'incantesimo, puoi usare un'azione bonus per effettuare due attacchi con un'arma che usa munizioni dalla faretra. Ogni volta che effettui un attacco a distanza del genere, la tua faretra sostituisce magicamente il pezzo di munizione che hai usato con un pezzo simile di munizione non magica. Tutti i pezzi di munizione creati da questo incantesimo si disintegrano quando l'incantesimo termina. Se la faretra non è più in tuo possesso, l'incantesimo termina. +Spell/&SwiftQuiverTitle=Faretra veloce Spell/&SynapticStaticDescription=Scegli un punto entro il raggio e fai esplodere lì l'energia psichica. Ogni creatura in una sfera di 20 piedi di raggio centrata su quel punto deve effettuare un tiro salvezza su Intelligenza. Un bersaglio subisce 8d6 danni psichici se fallisce il tiro salvezza, o la metà dei danni se riesce. Dopo un tiro salvezza fallito, un bersaglio ha pensieri confusi per 1 minuto. Durante quel periodo, tira un d6 e sottrae il numero ottenuto da tutti i suoi tiri per colpire e prove di abilità. Il bersaglio può effettuare un tiro salvezza su Intelligenza alla fine di ogni suo turno, terminando l'effetto su se stesso in caso di successo. Spell/&SynapticStaticTitle=Sinaptico statico Spell/&TelekinesisDescription=Puoi provare a muovere una creatura Enorme o più piccola. Fai una prova di abilità con la tua abilità di lancio di incantesimi contestata dalla prova di Forza della creatura. Se vinci la sfida, muovi la creatura fino a 30 piedi in qualsiasi direzione, ma non oltre la gittata di questo incantesimo. Fino alla fine del tuo turno successivo, la creatura è trattenuta nella tua presa telecinetica. Nei round successivi, puoi usare la tua azione per tentare di mantenere la tua presa telecinetica sulla creatura ripetendo la sfida, o prendere di mira una nuova creatura, ponendo fine all'effetto trattenuto sulla creatura precedentemente influenzata. diff --git a/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells05-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells05-ja.txt index 666d10fe62..f840e481ac 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells05-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells05-ja.txt @@ -44,6 +44,8 @@ Spell/&SonicBoomDescription=使用した風船と同じ色の小さな球体が Spell/&SonicBoomTitle=ソニックブーム Spell/&SteelWhirlwindDescription=あなたは詠唱に使用された武器を輝かせ、そして風のように攻撃するために消えます。範囲内で見える生き物を最大 5 つ選択します。各ターゲットに対して近接呪文攻撃を行います。命中すると、ターゲットは 6d10 のフォースダメージを受けます。その後、ヒットまたはミスしたターゲットの 1 つから 5 フィート以内に見える空いているスペースにテレポートできます。 Spell/&SteelWhirlwindTitle=スチールウィンドストライク +Spell/&SwiftQuiverDescription=矢筒を変形させて、無限に供給される非魔法の弾薬を生成させます。矢筒に手を伸ばすと、弾薬が手の中に飛び込んでくるようです。呪文が終了するまで、各ターンでボーナス アクションを使用して、矢筒の弾薬を使用する武器で 2 回の攻撃を行うことができます。このような遠隔攻撃を行うたびに、矢筒は使用した弾薬を魔法的に同様の非魔法の弾薬に置き換えます。この呪文によって作成された弾薬は、呪文が終了すると分解されます。矢筒があなたの所有から離れると、呪文は終了します。 +Spell/&SwiftQuiverTitle=スウィフトクイヴァー Spell/&SynapticStaticDescription=範囲内の一点を選び、そこでサイキック エネルギーを爆発させます。その点を中心とした半径 20 フィートの球体内のすべてのクリーチャーは、【知力】セーヴィング スローを行わなければなりません。セーヴィング スローに失敗すると、ターゲットは 8d6 のサイキック ダメージを受け、成功すると半分のダメージを受けます。セーヴィング スローに失敗すると、ターゲットは 1 分間思考が混乱します。その間、ターゲットは d6 をロールし、出た目をすべての攻撃ロールと能力値チェックから差し引きます。ターゲットは各ターンの終了時に【知力】セーヴィング スローを行うことができ、成功するとターゲット自身への効果を終了します。 Spell/&SynapticStaticTitle=シナプススタティック Spell/&TelekinesisDescription=巨大な生き物や小さな生き物を動かしてみることができます。クリーチャーの強さチェックによって争われるあなたの呪文詠唱能力で能力チェックを行います。コンテストに勝った場合、クリーチャーを任意の方向に最大 30 フィート移動できますが、この呪文の範囲を超えることはできません。次のターンの終わりまで、クリーチャーは念力グリップで拘束されます。後続のラウンドでは、アクションを使用して、コンテストを繰り返してクリーチャーに対する念動力のグリップを維持しようとしたり、新しいクリーチャーをターゲットにして、以前に影響を受けたクリーチャーに対する拘束効果を終了したりすることができます。 diff --git a/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells05-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells05-ko.txt index 5ca7dd7e8c..3d86b536c8 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells05-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells05-ko.txt @@ -44,6 +44,8 @@ Spell/&SonicBoomDescription=사용된 풍선과 같은 색상의 작은 구체 Spell/&SonicBoomTitle=소닉붐 Spell/&SteelWhirlwindDescription=당신은 캐스팅에 사용된 무기를 휘두르며 바람처럼 사라져 버립니다. 범위 내에서 볼 수 있는 생물을 최대 5개까지 선택하세요. 각 대상에 대해 근접 주문 공격을 가합니다. 적중 시 대상은 6d10의 강제 피해를 입습니다. 그런 다음, 맞추거나 놓친 대상 중 하나의 5피트 이내에서 볼 수 있는 비어 있는 공간으로 순간이동할 수 있습니다. Spell/&SteelWhirlwindTitle=스틸 윈드 스트라이크 +Spell/&SwiftQuiverDescription=화살통을 변형시켜 무한한 비마법적 탄약을 생산하는데, 당신이 화살통을 잡으려고 하면 탄약이 당신의 손에 뛰어드는 것처럼 보입니다. 주문이 끝날 때까지 당신의 턴마다 보너스 액션을 사용하여 화살통의 탄약을 사용하는 무기로 두 번 공격할 수 있습니다. 그런 원거리 공격을 할 때마다 화살통은 마법처럼 당신이 사용한 탄약을 비슷한 비마법적 탄약으로 대체합니다. 이 주문으로 생성된 탄약은 주문이 끝나면 분해됩니다. 화살통이 당신의 손에서 벗어나면 주문이 끝납니다. +Spell/&SwiftQuiverTitle=스위프트 퀴버 Spell/&SynapticStaticDescription=범위 내의 한 지점을 선택하면 그곳에서 정신 에너지가 폭발하게 됩니다. 해당 지점을 중심으로 하는 반경 20피트 구체의 각 생물은 지능 내성 굴림을 해야 합니다. 대상은 저장 실패 시 8d6의 정신적 피해를 입거나, 성공 시 피해의 절반을 받습니다. 저장 실패 후 대상은 1분 동안 혼란스러운 생각을 합니다. 그 시간 동안 d6을 굴리고 모든 공격 굴림과 능력 검사에서 굴린 숫자를 뺍니다. 목표는 각 턴이 끝날 때 지능 내성 굴림을 하여 성공 시 자신에 대한 효과를 종료할 수 있습니다. Spell/&SynapticStaticTitle=시냅스 정적 Spell/&TelekinesisDescription=거대하거나 작은 생물을 움직일 수 있습니다. 생물의 힘 체크와 경쟁하는 당신의 주문 시전 능력으로 능력 체크를 하십시오. 당신이 대회에서 이기면 당신은 생물을 어떤 방향으로든 최대 30피트까지 움직일 수 있지만, 이 주문의 범위를 벗어나지는 않습니다. 다음 턴이 끝날 때까지 생물은 염력 손아귀에 묶여 있습니다. 후속 라운드에서는 행동을 사용하여 경쟁을 반복하여 생물에 대한 염동력 그립을 유지하려고 시도하거나 새로운 생물을 목표로 삼아 이전에 영향을 받은 생물에 대한 억제 효과를 종료할 수 있습니다. diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells05-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells05-pt-BR.txt index c36d48e6b4..4b7fab6cea 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells05-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells05-pt-BR.txt @@ -44,6 +44,8 @@ Spell/&SonicBoomDescription=Um pequeno orbe da mesma cor do balão usado aparece Spell/&SonicBoomTitle=Estrondo Sônico Spell/&SteelWhirlwindDescription=Você floresce a arma usada na conjuração e então desaparece para atacar como o vento. Escolha até cinco criaturas que você possa ver dentro do alcance. Faça um ataque de magia corpo a corpo contra cada alvo. Em um acerto, um alvo recebe 6d10 de dano de força. Você pode então se teletransportar para um espaço desocupado que você possa ver dentro de 5 pés de um dos alvos que você acertou ou errou. Spell/&SteelWhirlwindTitle=Golpe de Vento de Aço +Spell/&SwiftQuiverDescription=Você transmuta sua aljava para que ela produza um suprimento infinito de munição não mágica, que parece saltar para sua mão quando você a alcança. Em cada um dos seus turnos até que a magia termine, você pode usar uma ação bônus para fazer dois ataques com uma arma que use munição da aljava. Cada vez que você faz um ataque à distância, sua aljava magicamente substitui a peça de munição que você usou por uma peça similar de munição não mágica. Quaisquer peças de munição criadas por esta magia se desintegram quando a magia termina. Se a aljava deixar sua posse, a magia termina. +Spell/&SwiftQuiverTitle=Aljava rápida Spell/&SynapticStaticDescription=Você escolhe um ponto dentro do alcance e faz com que energia psíquica exploda ali. Cada criatura em uma esfera de 20 pés de raio centrada naquele ponto deve fazer um teste de resistência de Inteligência. Um alvo sofre 8d6 de dano psíquico em um teste falho, ou metade do dano em um teste bem-sucedido. Após um teste falho, um alvo tem pensamentos confusos por 1 minuto. Durante esse tempo, ele rola um d6 e subtrai o número rolado de todas as suas jogadas de ataque e testes de habilidade. O alvo pode fazer um teste de resistência de Inteligência no final de cada um de seus turnos, encerrando o efeito sobre si mesmo em um sucesso. Spell/&SynapticStaticTitle=Estática sináptica Spell/&TelekinesisDescription=Você pode tentar mover uma criatura Enorme ou menor. Faça um teste de habilidade com sua habilidade de conjuração contestada pelo teste de Força da criatura. Se você vencer o teste, você move a criatura até 30 pés em qualquer direção, mas não além do alcance desta magia. Até o final do seu próximo turno, a criatura é restringida em seu aperto telecinético. Em rodadas subsequentes, você pode usar sua ação para tentar manter seu aperto telecinético na criatura repetindo o teste, ou escolher uma nova criatura como alvo, encerrando o efeito restringido na criatura afetada anteriormente. diff --git a/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells05-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells05-ru.txt index 52ba8a058b..3c1cb77b29 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells05-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells05-ru.txt @@ -44,6 +44,8 @@ Spell/&SonicBoomDescription=Небольшой шар появляется в в Spell/&SonicBoomTitle=Звуковой удар Spell/&SteelWhirlwindDescription=Вы взмахиваете оружием, используемым для заклинания, а затем исчезаете, чтобы ударить, подобно ветру. Выберите до пяти существ в пределах дистанции, которых вы можете видеть. Совершите рукопашную атаку заклинанием по каждой цели. При попадании цель получает 6d10 урона силовым полем. После этого вы можете телепортироваться в свободное пространство, которое вы можете видеть в пределах 5 футов от одной из целей, которую вы атаковали, независимо от того, попали вы по ней или нет. Spell/&SteelWhirlwindTitle=Удар стального ветра +Spell/&SwiftQuiverDescription=Вы трансмутируете свой колчан, чтобы он производил бесконечный запас немагических боеприпасов, которые, кажется, прыгают в вашу руку, когда вы тянетесь к ним. На каждом из ваших ходов, пока заклинание не закончится, вы можете использовать бонусное действие, чтобы совершить две атаки оружием, которое использует боеприпасы из колчана. Каждый раз, когда вы совершаете такую ​​дальнюю атаку, ваш колчан магическим образом заменяет часть боеприпасов, которые вы использовали, на аналогичную часть немагических боеприпасов. Любые части боеприпасов, созданные этим заклинанием, распадаются, когда заклинание заканчивается. Если колчан покидает ваше владение, заклинание заканчивается. +Spell/&SwiftQuiverTitle=Быстрый Колчан Spell/&SynapticStaticDescription=Вы выбираете точку в пределах дистанции и вызываете в ней взрыв психической энергии. Каждое существо в сфере с радиусом 20 футов с центром в этой точке должно совершить спасбросок Интеллекта. Цель получает 8d6 урона психической энергией при провале или половину этого урона при успехе. После неудачного спасброска цель начинает путаться в мыслях на протяжении 1 минуты. В течение этого времени она бросает d6 и вычитает получившееся число из всех её бросков атаки и проверок характеристики. В конце каждого своего хода цель может совершать спасбросок Интеллекта, оканчивая эффект на себе при успехе. Spell/&SynapticStaticTitle=Синаптический разряд Spell/&TelekinesisDescription=Вы можете попытаться переместить существо с размером не больше Огромного. Совершите проверку своей базовой характеристики, противопоставив её проверке Силы существа. Если вы выиграете проверку, вы перемещаете существо на 30 футов в любом направлении, включая вверх, но не за пределы дистанции заклинания. До конца вашего следующего хода существо становится опутанным телекинетической хваткой. Существо, поднятое вверх, висит в воздухе. В последующих раундах вы можете действием пытаться поддерживать телекинетическую хватку существа, повторяя встречную проверку, или выбрать новое существо, оканчивая эффект опутывания на предыдущей цели. diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells05-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells05-zh-CN.txt index c6fec3ed19..797d779cce 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells05-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells05-zh-CN.txt @@ -44,6 +44,8 @@ Spell/&SonicBoomDescription=一个与气球颜色相近的小球体出现在你 Spell/&SonicBoomTitle=鸣音爆 Spell/&SteelWhirlwindDescription=你挥动施法时使用的武器,然后消失,像风一样攻击。选择范围内最多五个你可以看到的生物。对每个目标进行近战法术攻击。命中后,目标会受到 6d10 点力场伤害。然后,你可以传送到一个未被占据的、你可以看到的、你命中或失手目标之一的 5 尺内的一处空间。 Spell/&SteelWhirlwindTitle=钢风斩 +Spell/&SwiftQuiverDescription=你使箭筒变形,使其产生无限量的非魔法弹药,当你伸手去拿时,这些弹药似乎会跳到你的手中。在法术结束之前的每个回合,你可以使用奖励动作使用使用箭筒中弹药的武器进行两次攻击。每次你进行这样的远程攻击时,你的箭筒都会神奇地用一块类似的非魔法弹药替换你使用的弹药。此法术产生的任何弹药都会在法术结束时瓦解。如果箭筒离开你的控制,法术就会结束。 +Spell/&SwiftQuiverTitle=迅捷箭筒 Spell/&SynapticStaticDescription=你选择范围内的一点,并让灵能在那里爆炸。以该点为中心半径 20 英尺范围内的每个生物都必须进行智力豁免检定。如果豁免失败,目标将受到 8d6 灵能伤害,如果豁免成功,则伤害减半。豁免失败后,目标将陷入混乱,持续 1 分钟。在此期间,目标将掷出一个 d6 并从其所有攻击掷骰和能力检定中减去掷出的数字。目标可以在其每个回合结束时进行智力豁免检定,如果豁免成功,则结束对其自身的效果。 Spell/&SynapticStaticTitle=突触静态 Spell/&TelekinesisDescription=你可以尝试移动巨型或更小的生物。用你的施法属性进行一次属性检定,并与该生物的力量检定进行对抗。如果你赢得对抗,你可以将生物向任意方向移动 30 尺,但不能超出该法术的范围。直到你的下一个回合结束之前,该生物都会被你的心灵遥控抓握束缚。在随后的回合中,你可以使用你的动作来尝试通过重复对抗来维持对生物的心灵控制,或者瞄准一个新生物,结束对先前受影响的生物的束缚效果。 From 3a947821e4e5c2d419aeb758e5ce2b99c90dfe33 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Mon, 9 Sep 2024 19:49:30 -0700 Subject: [PATCH 096/212] improve CharacterActionItemForm.Refresh patch to make it more generic --- .../Patches/CharacterActionItemFormPatcher.cs | 7 +++--- .../Subclasses/WayOfTheZenArchery.cs | 23 +++++++++++-------- 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/SolastaUnfinishedBusiness/Patches/CharacterActionItemFormPatcher.cs b/SolastaUnfinishedBusiness/Patches/CharacterActionItemFormPatcher.cs index 61eff6b62c..b71d4b6eca 100644 --- a/SolastaUnfinishedBusiness/Patches/CharacterActionItemFormPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/CharacterActionItemFormPatcher.cs @@ -4,11 +4,9 @@ using SolastaUnfinishedBusiness.Api.GameExtensions; using SolastaUnfinishedBusiness.Interfaces; using SolastaUnfinishedBusiness.Models; -using SolastaUnfinishedBusiness.Validators; using TA.AddressableAssets; using TMPro; using UnityEngine; -using static SolastaUnfinishedBusiness.Api.DatabaseHelper.WeaponTypeDefinitions; namespace SolastaUnfinishedBusiness.Patches; @@ -51,12 +49,13 @@ public static void Postfix(CharacterActionItemForm __instance) [UsedImplicitly] public static class Refresh_Patch { + internal const string HideAttacksNumberOnActionPanel = "HideAttacksNumberOnActionPanel"; + [UsedImplicitly] public static void Postfix(CharacterActionItemForm __instance) { //PATCH: supports Way of Zen Archery flurry of arrows to not display max attack numbers on action button - if (__instance.currentAttackMode.ActionType == ActionDefinitions.ActionType.Bonus && - ValidatorsWeapon.IsOfWeaponType(LongbowType, ShortbowType)(__instance.currentAttackMode, null, null)) + if (__instance.currentAttackMode.AttackTags.Contains(HideAttacksNumberOnActionPanel)) { __instance.attacksNumberGroup.gameObject.SetActive(false); } diff --git a/SolastaUnfinishedBusiness/Subclasses/WayOfTheZenArchery.cs b/SolastaUnfinishedBusiness/Subclasses/WayOfTheZenArchery.cs index 25a14cc4f5..71b4c17cb1 100644 --- a/SolastaUnfinishedBusiness/Subclasses/WayOfTheZenArchery.cs +++ b/SolastaUnfinishedBusiness/Subclasses/WayOfTheZenArchery.cs @@ -9,6 +9,7 @@ using SolastaUnfinishedBusiness.Builders.Features; using SolastaUnfinishedBusiness.CustomUI; using SolastaUnfinishedBusiness.Interfaces; +using SolastaUnfinishedBusiness.Patches; using SolastaUnfinishedBusiness.Properties; using SolastaUnfinishedBusiness.Validators; using UnityEngine.AddressableAssets; @@ -176,23 +177,27 @@ public WayOfZenArchery() // set attacks number to 2 to allow a mix of unarmed / bow attacks otherwise game engine will consume bonus action // once at least one bonus attack is used this check fails and everything gets back to normal - // the patch on CharacterActionItemForm.Refresh finishes the trick by hiding the number of attacks image + // the patch on CharacterActionItemForm.Refresh finishes the trick by hiding the number of attacks + // when attack tags have a proper hide tag private sealed class ModifyWeaponAttackModeFlurryOfArrows : IModifyWeaponAttackMode { public void ModifyAttackMode(RulesetCharacter rulesetCharacter, RulesetAttackMode attackMode) { var character = GameLocationCharacter.GetFromActor(rulesetCharacter); - if (character is { UsedBonusAttacks: 0 } && - attackMode.ActionType == ActionDefinitions.ActionType.Bonus && - rulesetCharacter.HasConditionOfCategoryAndType( - AttributeDefinitions.TagEffect, ConditionFlurryOfBlows) && - ValidatorsWeapon.IsOfWeaponType( - WeaponTypeDefinitions.LongbowType, - WeaponTypeDefinitions.ShortbowType)(attackMode, null, null)) + if (character is not { UsedBonusAttacks: 0 } || + attackMode.ActionType != ActionDefinitions.ActionType.Bonus || + !rulesetCharacter.HasConditionOfCategoryAndType( + AttributeDefinitions.TagEffect, ConditionFlurryOfBlows) || + !ValidatorsWeapon.IsOfWeaponType(WeaponTypeDefinitions.LongbowType, WeaponTypeDefinitions.ShortbowType)( + attackMode, null, null)) { - attackMode.AttacksNumber = 2; + return; } + + attackMode.AddAttackTagAsNeeded( + CharacterActionItemFormPatcher.Refresh_Patch.HideAttacksNumberOnActionPanel); + attackMode.AttacksNumber = 2; } } From 5d18c4e83e021301673811d8fb6f1f0f53091e0e Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Mon, 9 Sep 2024 19:50:09 -0700 Subject: [PATCH 097/212] add Swift Quiver spell --- .../UnfinishedBusinessBlueprints/Assets.txt | 2 + .../ConditionSwiftQuiver.json | 155 +++ .../SpellDefinition/SwiftQuiver.json | 346 +++++ Documentation/Spells.md | 140 +- .../ChangelogHistory.txt | 2 +- SolastaUnfinishedBusiness/Displays/_ModUi.cs | 1 + .../Models/SpellsContext.cs | 1 + .../Properties/Resources.Designer.cs | 10 + .../Properties/Resources.resx | 5 + .../Resources/Spells/SwiftQuiver.png | Bin 0 -> 12044 bytes .../Spells/SpellBuildersLevel05.cs | 1162 +++++++++-------- .../Translations/de/Spells/Spells05-de.txt | 2 +- .../Translations/en/Spells/Spells05-en.txt | 2 +- .../Translations/es/Spells/Spells05-es.txt | 2 +- .../Translations/fr/Spells/Spells05-fr.txt | 2 +- .../Translations/it/Spells/Spells05-it.txt | 2 +- .../Translations/ja/Spells/Spells05-ja.txt | 2 +- .../Translations/ko/Spells/Spells05-ko.txt | 2 +- .../pt-BR/Spells/Spells05-pt-BR.txt | 2 +- .../Translations/ru/Spells/Spells05-ru.txt | 2 +- .../zh-CN/Spells/Spells05-zh-CN.txt | 2 +- 21 files changed, 1253 insertions(+), 591 deletions(-) create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionSwiftQuiver.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/SwiftQuiver.json create mode 100644 SolastaUnfinishedBusiness/Resources/Spells/SwiftQuiver.png diff --git a/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt b/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt index 5dc5fad603..b68854e0ef 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt +++ b/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt @@ -1184,6 +1184,7 @@ ConditionSunderingBlow ConditionDefinition ConditionDefinition c90e3266-d44c-5af ConditionSunderingBlowAlly ConditionDefinition ConditionDefinition 73a99876-5aed-5b10-a854-b4c63147585a ConditionSunlightBlade ConditionDefinition ConditionDefinition 6ac4b1f4-8f80-5e90-8e86-e66db308a40a ConditionSunlightBladeHighlighted ConditionDefinition ConditionDefinition eb813adc-3ad0-52da-9836-0460b6c55291 +ConditionSwiftQuiver ConditionDefinition ConditionDefinition 1e981912-4130-58da-9464-ac4a23323337 ConditionSynapticStatic ConditionDefinition ConditionDefinition 0e14b879-1475-52c8-843b-429d5ee6bc8a ConditionTaunted ConditionDefinition ConditionDefinition 4684284a-a3b2-54f9-9b40-0badf8e95081 ConditionTaunter ConditionDefinition ConditionDefinition 44ef4a88-e18c-5b4f-862b-0cf1ed14b71e @@ -12624,6 +12625,7 @@ StarryWisp SpellDefinition SpellDefinition 9856da86-1888-5630-8647-3a003421a268 SteelWhirlwind SpellDefinition SpellDefinition ab7f50cb-6f73-57c6-b96b-f06ac4ed17b3 StrikeWithTheWind SpellDefinition SpellDefinition d641e4ac-7291-5516-a07c-f45b6444dcfe SunlightBlade SpellDefinition SpellDefinition 62effe92-a4c1-58ed-a9a0-06f1a64e8c8e +SwiftQuiver SpellDefinition SpellDefinition 12962336-42c4-5ddc-8ea1-6092af61fe43 SwordStorm SpellDefinition SpellDefinition d3b6df03-2c2c-524a-a160-e988006a5fd8 SynapticStatic SpellDefinition SpellDefinition 5e75eeec-87bb-5e81-918a-03171bfea6a6 Telekinesis SpellDefinition SpellDefinition 4a9561ac-ffb6-5b44-b94a-24f69e41fd4c diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionSwiftQuiver.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionSwiftQuiver.json new file mode 100644 index 0000000000..5f8e882b0c --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionSwiftQuiver.json @@ -0,0 +1,155 @@ +{ + "$type": "ConditionDefinition, Assembly-CSharp", + "inDungeonEditor": false, + "parentCondition": null, + "conditionType": "Beneficial", + "features": [], + "allowMultipleInstances": false, + "silentWhenAdded": true, + "silentWhenRemoved": true, + "silentWhenRefreshed": false, + "terminateWhenRemoved": false, + "specialDuration": false, + "durationType": "Hour", + "durationParameterDie": "D4", + "durationParameter": 1, + "forceTurnOccurence": false, + "turnOccurence": "EndOfTurn", + "specialInterruptions": [], + "interruptionRequiresSavingThrow": false, + "interruptionSavingThrowComputationMethod": "SaveOverride", + "interruptionSavingThrowAbility": "", + "interruptionDamageThreshold": 0, + "keepConditionIfSavingThrowSucceeds": false, + "interruptionSavingThrowAffinity": "None", + "conditionTags": [], + "recurrentEffectForms": [], + "cancellingConditions": [], + "additionalDamageWhenHit": false, + "additionalDamageTypeDetermination": "Specific", + "additionalDamageType": "", + "additionalDamageQuantity": "AbilityBonus", + "additionalDamageDieType": "D1", + "additionalDamageDieNumber": 1, + "additionalConditionWhenHit": false, + "additionalCondition": null, + "additionalConditionDurationType": "Round", + "additionalConditionDurationParameter": 1, + "additionalConditionTurnOccurenceType": "StartOfTurn", + "conditionStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "conditionParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "conditionEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "recurrentEffectParticleReference": null, + "characterShaderReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "particlesBasedOnAncestryDamageType": false, + "ancestryType": "Sorcerer", + "acidParticleParameters": null, + "coldParticleParameters": null, + "fireParticleParameters": null, + "lightningParticleParameters": null, + "poisonParticleParameters": null, + "overrideCharacterShaderColors": false, + "firstCharacterShaderColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "secondCharacterShaderColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "timeToWaitBeforeApplyingShader": 0.5, + "timeToWaitBeforeRemovingShader": 0.5, + "possessive": false, + "amountOrigin": "None", + "baseAmount": 0, + "additiveAmount": false, + "sourceAbilityBonusMinValue": 1, + "subsequentOnRemoval": null, + "subsequentHasSavingThrow": false, + "subsequentSavingThrowAbilityScore": "Constitution", + "subsequentVariableForDC": "FrenzyExhaustionDC", + "subsequentDCIncrease": 5, + "effectFormsOnRemoved": [], + "forceBehavior": false, + "addBehavior": false, + "fearSource": false, + "battlePackage": null, + "explorationPackage": null, + "removedFromTheGame": false, + "permanentlyRemovedIfExtraPlanar": false, + "refundReceivedDamageWhenRemoved": false, + "followSourcePosition": false, + "disolveCharacterOnDeath": false, + "disolveParameters": { + "$type": "GraphicsCharacterDefinitions+DisolveParameters, Assembly-CSharp", + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "colorWidth": 0.0, + "noiseScale": 5.0, + "hueScale": 0.0, + "vertexOffset": 0.0, + "curve": { + "$type": "UnityEngine.AnimationCurve, UnityEngine.CoreModule" + }, + "startAfterDeathAnimation": false, + "duration": 0.0 + }, + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": true, + "title": "Feature/&NoContentTitle", + "description": "Feature/&NoContentTitle", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "1e981912-4130-58da-9464-ac4a23323337", + "contentPack": 9999, + "name": "ConditionSwiftQuiver" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/SwiftQuiver.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/SwiftQuiver.json new file mode 100644 index 0000000000..343a24b39e --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/SwiftQuiver.json @@ -0,0 +1,346 @@ +{ + "$type": "SpellDefinition, Assembly-CSharp", + "spellsBundle": false, + "subspellsList": [], + "compactSubspellsTooltip": false, + "implemented": true, + "schoolOfMagic": "SchoolTransmutation", + "spellLevel": 5, + "ritual": false, + "uniqueInstance": false, + "castingTime": "BonusAction", + "reactionContext": "None", + "ritualCastingTime": "Action", + "requiresConcentration": true, + "effectDescription": { + "$type": "EffectDescription, Assembly-CSharp", + "rangeType": "Self", + "rangeParameter": 0, + "halfDamageOnAMiss": false, + "hitAffinitiesByTargetTag": [], + "targetType": "Self", + "itemSelectionType": "None", + "targetParameter": 1, + "targetParameter2": 2, + "emissiveBorder": "None", + "emissiveParameter": 1, + "requiresTargetProximity": false, + "targetProximityDistance": 6, + "targetExcludeCaster": false, + "canBePlacedOnCharacter": true, + "affectOnlyGround": false, + "targetFilteringMethod": "CharacterOnly", + "targetFilteringTag": "No", + "requiresVisibilityForPosition": true, + "inviteOptionalAlly": false, + "slotTypes": [], + "recurrentEffect": "No", + "retargetAfterDeath": false, + "retargetActionType": "Bonus", + "poolFilterDiceNumber": 5, + "poolFilterDieType": "D8", + "trapRangeType": "Triggerer", + "targetConditionName": "", + "targetConditionAsset": null, + "targetSide": "Ally", + "durationType": "Minute", + "durationParameter": 1, + "endOfEffect": "EndOfTurn", + "hasSavingThrow": false, + "disableSavingThrowOnAllies": false, + "savingThrowAbility": "Dexterity", + "ignoreCover": false, + "grantedConditionOnSave": null, + "rollSaveOnlyIfRelevantForms": false, + "hasShoveRoll": false, + "createdByCharacter": true, + "difficultyClassComputation": "SpellCastingFeature", + "savingThrowDifficultyAbility": "Wisdom", + "fixedSavingThrowDifficultyClass": 15, + "savingThrowAffinitiesBySense": [], + "savingThrowAffinitiesByFamily": [], + "damageAffinitiesByFamily": [], + "advantageForEnemies": false, + "canBeDispersed": false, + "hasVelocity": false, + "velocityCellsPerRound": 2, + "velocityType": "AwayFromSourceOriginalPosition", + "restrictedCreatureFamilies": [], + "immuneCreatureFamilies": [], + "restrictedCharacterSizes": [], + "hasLimitedEffectPool": false, + "effectPoolAmount": 60, + "effectApplication": "All", + "effectFormFilters": [], + "effectForms": [ + { + "$type": "EffectForm, Assembly-CSharp", + "formType": "Condition", + "addBonusMode": "None", + "applyLevel": "No", + "levelType": "ClassLevel", + "levelMultiplier": 1, + "diceByLevelTable": [], + "createdByCharacter": true, + "createdByCondition": false, + "hasSavingThrow": false, + "savingThrowAffinity": "None", + "dcModifier": 0, + "canSaveToCancel": false, + "saveOccurence": "EndOfTurn", + "conditionForm": { + "$type": "ConditionForm, Assembly-CSharp", + "conditionDefinitionName": "ConditionSwiftQuiver", + "conditionDefinition": "Definition:ConditionSwiftQuiver:1e981912-4130-58da-9464-ac4a23323337", + "operation": "Add", + "conditionsList": [], + "applyToSelf": false, + "forceOnSelf": false + }, + "hasFilterId": false, + "filterId": 0 + } + ], + "specialFormsDescription": "", + "effectAdvancement": { + "$type": "EffectAdvancement, Assembly-CSharp", + "effectIncrementMethod": "None", + "incrementMultiplier": 1, + "additionalTargetsPerIncrement": 0, + "additionalSubtargetsPerIncrement": 0, + "additionalDicePerIncrement": 0, + "additionalSpellLevelPerIncrement": 0, + "additionalSummonsPerIncrement": 0, + "additionalHPPerIncrement": 0, + "additionalTempHPPerIncrement": 0, + "additionalTargetCellsPerIncrement": 0, + "additionalItemBonus": 0, + "additionalWeaponDie": 0, + "alteredDuration": "None" + }, + "speedType": "Instant", + "speedParameter": 10.0, + "offsetImpactTimeBasedOnDistance": false, + "offsetImpactTimeBasedOnDistanceFactor": 0.1, + "offsetImpactTimePerTarget": 0.0, + "effectParticleParameters": { + "$type": "EffectParticleParameters, Assembly-CSharp", + "casterParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "81560ac3813217d4d9fd281d5e73c234", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "casterSelfParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "casterQuickSpellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "targetParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "effectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "effectSubTargetParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "zoneParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "beforeImpactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "impactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectImpactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceParticlePerIndex": "", + "activeEffectSurfaceParticlePerIndexCount": 0, + "emissiveBorderCellStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderCellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderCellEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "forceApplyZoneParticle": false, + "applyEmissionColorOnWeapons": false, + "emissionColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "emissionColorFadeInDuration": 0.0, + "emissionColorFadeOutDuration": 0.0 + }, + "effectAIParameters": { + "$type": "EffectAIParameters, Assembly-CSharp", + "aoeScoreMultiplier": 1.0, + "cooldownForCaster": 0, + "cooldownForBattle": 0, + "sortingScoreMultiplier": 1.0, + "dynamicCooldown": false + }, + "animationMagicEffect": "Animation0", + "lightCounterDispellsEffect": false, + "hideSavingThrowAnimation": false + }, + "aiParameters": { + "$type": "SpellAIParameters, Assembly-CSharp", + "learnPriority": "Low", + "preparePriority": "Low" + }, + "concentrationAction": "None", + "verboseComponent": true, + "somaticComponent": true, + "materialComponentType": "Specific", + "specificMaterialComponentTag": "Consumable", + "specificMaterialComponentCostGp": 0, + "specificMaterialComponentConsumed": false, + "terminateOnItemUnequip": false, + "displayConditionDuration": false, + "vocalSpellSemeType": "Buff", + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "Spell/&SwiftQuiverTitle", + "description": "Spell/&SwiftQuiverDescription", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "6c499066-e227-5a58-b222-867e1da29182", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "12962336-42c4-5ddc-8ea1-6092af61fe43", + "contentPack": 9999, + "name": "SwiftQuiver" +} \ No newline at end of file diff --git a/Documentation/Spells.md b/Documentation/Spells.md index 91bb62173d..37a5c3018f 100644 --- a/Documentation/Spells.md +++ b/Documentation/Spells.md @@ -1504,7 +1504,7 @@ Removes one detrimental condition, such as a charm or curse, or an effect that r Paralyzes a creature unless it succeeds a WIS saving throw. No effect on undead. -# 249. - Holy Weapon (V,S) level 5 Evocation [Concentration] [UB] +# 249. - *Holy Weapon* © (V,S) level 5 Evocation [Concentration] [UB] **[Cleric, Paladin]** @@ -1564,55 +1564,61 @@ A small orb the same color as the balloon used appears at a point you choose wit You flourish the weapon used in the casting and then vanish to strike like the wind. Choose up to five creatures you can see within range. Make a melee spell attack against each target. On a hit, a target takes 6d10 force damage. You can then teleport to an unoccupied space you can see within 5 feet of one of the targets you hit or missed. -# 259. - *Synaptic Static* © (V) level 5 Evocation [UB] +# 259. - *Swift Quiver* © (M,V,S) level 5 Transmutation [Concentration] [UB] + +**[Ranger]** + +You transmute your quiver so it produces an endless supply of non-magical ammunition, which seems to leap into your hand when you reach for it. On each of your turns until the spell ends, you can use a bonus action to make two attacks when holding a two ranged weapon. Each time you make such a ranged attack, your quiver magically replaces the piece of ammunition you used with a similar piece of non-magical ammunition. + +# 260. - *Synaptic Static* © (V) level 5 Evocation [UB] **[Bard, Sorcerer, Warlock, Wizard]** You choose a point within range and cause psychic energy to explode there. Each creature in a 20-foot-radius sphere centered on that point must make an Intelligence saving throw. A target takes 8d6 psychic damage on a failed save, or half as much damage on a successful After a failed save, a target has muddled thoughts for 1 minute. During that time, it rolls a d6 and subtracts the number rolled from all its attack rolls and ability checks. The target can make an Intelligence saving throw at the end of each of its turns, ending the effect on itself on a success. -# 260. - *Telekinesis* © (V,S) level 5 Transmutation [Concentration] [UB] +# 261. - *Telekinesis* © (V,S) level 5 Transmutation [Concentration] [UB] **[Sorcerer, Wizard]** You can try to move a Huge or smaller creature. Make an ability check with your spellcasting ability contested by the creature's Strength check. If you win the contest, you move the creature up to 30 feet in any direction, but not beyond the range of this spell. Until the end of your next turn, the creature is restrained in your telekinetic grip. On subsequent rounds, you can use your action to attempt to maintain your telekinetic grip on the creature by repeating the contest, or target a new creature, ending the restrained effect on the previously affected creature. -# 261. - Blade Barrier (V,S) level 6 Evocation [Concentration] [SOL] +# 262. - Blade Barrier (V,S) level 6 Evocation [Concentration] [SOL] **[Cleric]** Conjures a wall of razor sharp blades which causes 6d10 slashing damage to anyone crossing it -# 262. - Chain Lightning (V,S) level 6 Evocation [SOL] +# 263. - Chain Lightning (V,S) level 6 Evocation [SOL] **[Sorcerer, Wizard]** Target a creature with lightning, which can arc to 3 other targets within 6 cells. -# 263. - Circle of Death (M,V,S) level 6 Necromancy [SOL] +# 264. - Circle of Death (M,V,S) level 6 Necromancy [SOL] **[Sorcerer, Warlock, Wizard]** A sphere of negative energy causes Necrotic damage from a point you choose -# 264. - Conjure Fey (V,S) level 6 Conjuration [Concentration] [SOL] +# 265. - Conjure Fey (V,S) level 6 Conjuration [Concentration] [SOL] **[Druid, Warlock]** Conjures a fey creature of challenge rating 1 to 6 to fight alongside you. If you lose concentration, the creature stays but becomes hostile. -# 265. - Disintegrate (V,S) level 6 Transmutation [SOL] +# 266. - Disintegrate (V,S) level 6 Transmutation [SOL] **[Sorcerer, Wizard]** Causes massive force damage on the target, which can be disintegrated if reduced to 0 hit points -# 266. - Eyebite (V,S) level 6 Necromancy [Concentration] [SOL] +# 267. - Eyebite (V,S) level 6 Necromancy [Concentration] [SOL] **[Bard, Sorcerer, Warlock, Wizard]** Your eyes gain a specific property which can target a creature each turn -# 267. - *Fizban's Platinum Shield* © (M,V,S) level 6 Abjuration [Concentration] [UB] +# 268. - *Fizban's Platinum Shield* © (M,V,S) level 6 Abjuration [Concentration] [UB] **[Sorcerer, Wizard]** @@ -1622,85 +1628,85 @@ You create a field of silvery light that surrounds a creature of your choice wit • If the creature is subjected to an effect that allows it to make a Dexterity saving throw to take only half damage, the creature instead takes no damage if it succeeds on the saving throw, and only half damage if it fails. As a bonus action on subsequent turns, you can move the field to another creature within 60 feet of the field. -# 268. - Flash Freeze (V,S) level 6 Evocation [UB] +# 269. - Flash Freeze (V,S) level 6 Evocation [UB] **[Druid, Sorcerer, Warlock]** You attempt to encase a creature you can see within range in a prison of solid ice. The target must make a Dexterity saving throw. On a failed save, the target takes 10d6 cold damage and becomes restrained in layers of thick ice. On a successful save, the target takes half as much damage and is not restrained. The spell can only be used on creatures up to large size. To break out, the restrained target can make a Strength check as an action against your spell save DC. On success, the target escapes and is no longer restrained. When you cast this spell using a spell slot of 7th level or higher, the cold damage increases by 2d6 for each slot level above 6th. -# 269. - Freezing Sphere (V,S) level 6 Evocation [SOL] +# 270. - Freezing Sphere (V,S) level 6 Evocation [SOL] **[Wizard]** Toss a huge ball of cold energy that explodes on impact -# 270. - Globe Of Invulnerability (V,S) level 6 Abjuration [Concentration] [SOL] +# 271. - Globe Of Invulnerability (V,S) level 6 Abjuration [Concentration] [SOL] **[Sorcerer, Wizard]** A sphere surrounding you prevents any spell up to 5th level to affect anyone inside it. -# 271. - Harm (V,S) level 6 Necromancy [SOL] +# 272. - Harm (V,S) level 6 Necromancy [SOL] **[Cleric]** Inflicts devastating necrotic damage and reduces the maximum hit points accordingly. Cannot drop the target below 1 hit points -# 272. - Heal (V,S) level 6 Evocation [SOL] +# 273. - Heal (V,S) level 6 Evocation [SOL] **[Cleric, Druid]** Heals 70 hit points and also removes blindness and diseases -# 273. - Heroes Feast (M,V,S) level 6 Conjuration [SOL] +# 274. - Heroes Feast (M,V,S) level 6 Conjuration [SOL] **[Cleric, Druid]** Summons a feast which cures most ailments and grants immunity to poisonand being frightened, WIS save advantage, and increased maximum hitpoints -# 274. - Hilarity (V) level 6 Enchantment [Concentration] [SOL] +# 275. - Hilarity (V) level 6 Enchantment [Concentration] [SOL] **[Bard, Wizard]** Choose one target. They fall down laughing, becoming prone and incapacitated, and take psychic damage until they save at the end of one of their turns, or until the spell ends. -# 275. - Poison Wave (M,V,S) level 6 Evocation [UB] +# 276. - Poison Wave (M,V,S) level 6 Evocation [UB] **[Wizard]** A poisonous wave erupts from you, engulfing those close by. Each creature within the spell's radius must make a Constitution saving throw, taking 6d10 poison damage on a failure, or half as much damage on a successful one. A creature who fails their saving throw is also poisoned for 1 minute, and can repeat the saving throw at the end of each of its turn. When you cast this spell using a slot of 7th level or higher, the damage increases by 1d10 for each slot level above 6th. -# 276. - Ring of Blades (M,V,S) level 6 Conjuration [Concentration] [UB] +# 277. - Ring of Blades (M,V,S) level 6 Conjuration [Concentration] [UB] **[Wizard]** You raise both hands as you evoke six transparent blades around you as a bonus action. When you cast this spell, and as a bonus action on each subsequent turn, you can throw one of these blades at a creature within 60 feet from you. Make a ranged spell attack. On a hit, the target takes 4d10 force damage. When you cast this spell using a spell slot of 7th level or higher, the damage of each blade increases by 1d10 for each slot level above 6th. -# 277. - *Scatter* © (V) level 6 Conjuration [UB] +# 278. - *Scatter* © (V) level 6 Conjuration [UB] **[Sorcerer, Warlock, Wizard]** The air quivers around up to five creatures of your choice that you can see within range. An unwilling creature must succeed on a Wisdom saving throw to resist this spell. You teleport each affected target to an unoccupied space that you can see within 120 feet of you. That space must be on the ground or on a floor. -# 278. - Shelter from Energy (V,S) level 6 Abjuration [UB] +# 279. - Shelter from Energy (V,S) level 6 Abjuration [UB] **[Cleric, Druid, Sorcerer, Wizard]** Choose one of the following damage types: acid, cold, fire, lightning, necrotic, radiant, or thunder, and then choose up to six willing creatures that you can see within range. For 1 hour, targets have resistance to that damage type. When you cast this spell using a spell slot of 7th level or higher, you may target up to one additional willing creature for each slot level above 6th. -# 279. - Sunbeam (V,S) level 6 Evocation [Concentration] [SOL] +# 280. - Sunbeam (V,S) level 6 Evocation [Concentration] [SOL] **[Druid, Sorcerer, Wizard]** You conjure a line of radiance which can burn and blind creatures in the line of effect; undead and oozes save with disadvantage. The beam can be retargeted each turn -# 280. - *Tasha's Otherworldly Guise* © (M,V,S) level 6 Transmutation [Concentration] [UB] +# 281. - *Tasha's Otherworldly Guise* © (M,V,S) level 6 Transmutation [Concentration] [UB] **[Sorcerer, Warlock, Wizard]** Uttering an incantation, you draw on the magic of the Lower Planes or Upper Planes (your choice) to transform yourself. -# 281. - *Tenser's Transformation* © (V,S) level 6 Transmutation [Concentration] [UB] +# 282. - *Tenser's Transformation* © (V,S) level 6 Transmutation [Concentration] [UB] **[Wizard]** @@ -1712,49 +1718,49 @@ You endow yourself with endurance and martial prowess fueled by magic. Until the • You can attack twice, instead of once, when you take the Attack action on your turn. Immediately after the spell ends, you must succeed on a DC 15 Constitution saving throw or suffer one level of exhaustion. -# 282. - True Seeing (V,S) level 6 Divination [SOL] +# 283. - True Seeing (V,S) level 6 Divination [SOL] **[Bard, Cleric, Sorcerer, Warlock, Wizard]** A creature you touch gains True Sight for one hour -# 283. - Wall of Thorns (V,S) level 6 Conjuration [Concentration] [SOL] +# 284. - Wall of Thorns (V,S) level 6 Conjuration [Concentration] [SOL] **[Druid]** Creates a wall of tough of needle-sharp thorns, that hurts and slows every creature in it. -# 284. - Arcane Sword (M,V,S) level 7 Evocation [Concentration] [SOL] +# 285. - Arcane Sword (M,V,S) level 7 Evocation [Concentration] [SOL] **[Bard, Wizard]** Summon a weapon that fights for you. -# 285. - Conjure Celestial (V,S) level 7 Conjuration [Concentration] [SOL] +# 286. - Conjure Celestial (V,S) level 7 Conjuration [Concentration] [SOL] **[Cleric]** Conjures a celestial creature of challenge rating 4 that fights alongside you. If you lose concentration, the creature is dismissed. -# 286. - *Crown of Stars* © (V,S) level 7 Evocation [UB] +# 287. - *Crown of Stars* © (V,S) level 7 Evocation [UB] **[Sorcerer, Warlock, Wizard]** Seven star-like motes of light appear and orbit your head until the spell ends. You can use a bonus action to send one of the motes streaking toward one creature or object within 120 feet of you. When you do so, make a ranged spell attack. On a hit, the target takes 4d12 radiant damage. Whether you hit or miss, the mote is expended. The spell ends early if you expend the last mote. If you have four or more motes remaining, they shed bright light in a 30-foot radius and dim light for an additional 30 feet. If you have one to three motes remaining, they shed dim light in a 30-foot radius. When you cast this spell using a spell slot of 8th level or higher, the number of motes created increases by two for each slot level above 7th. -# 287. - Delayed Blast Fireball (V,S) level 7 Evocation [Concentration] [SOL] +# 288. - Delayed Blast Fireball (V,S) level 7 Evocation [Concentration] [SOL] **[Sorcerer, Wizard]** Conjures a ball of fire that grows more powerful with time, detonating when a creature enters its space or when the spell ends. -# 288. - Divine Word (V) level 7 Evocation [SOL] +# 289. - Divine Word (V) level 7 Evocation [SOL] **[Cleric]** Utter a divine word that inflicts various negative conditions on enemies you can see, based on their HP. Also banishes all celestials, elementals, feys, and fiends if they fail their saving throws. -# 289. - *Draconic Transformation* © (M,V,S) level 7 Transmutation [Concentration] [UB] +# 290. - *Draconic Transformation* © (M,V,S) level 7 Transmutation [Concentration] [UB] **[Druid, Sorcerer, Wizard]** @@ -1763,210 +1769,210 @@ With a roar, you draw on the magic of dragons to transform yourself, taking on d • When you cast this spell, and as a bonus action on subsequent turns for the duration, you can exhale shimmering energy in a 60-foot cone. Each creature in that area must make a Dexterity saving throw, taking 6d8 force damage on a failed save, or half as much damage on a successful one. • Incorporeal wings sprout from your back, giving you a flying speed of 60 feet. -# 290. - Finger of Death (V,S) level 7 Necromancy [SOL] +# 291. - Finger of Death (V,S) level 7 Necromancy [SOL] **[Sorcerer, Warlock, Wizard]** Send negative energy coursing through a creature within range. -# 291. - Fire Storm (V,S) level 7 Evocation [SOL] +# 292. - Fire Storm (V,S) level 7 Evocation [SOL] **[Cleric, Druid, Sorcerer]** Causes a wide wall of roaring flames to burst up wherever you choose within range. -# 292. - Gravity Slam (V,S) level 7 Transmutation [SOL] +# 293. - Gravity Slam (V,S) level 7 Transmutation [SOL] **[Druid, Sorcerer, Warlock, Wizard]** Increase gravity to slam everyone in a specific area onto the ground. -# 293. - Prismatic Spray (V,S) level 7 Evocation [SOL] +# 294. - Prismatic Spray (V,S) level 7 Evocation [SOL] **[Sorcerer, Wizard]** Each creature within the cone of effect is randomly affected by one or two (roll 8 on d8) rays with the following effects: -# 294. - Regenerate (V,S) level 7 Transmutation [SOL] +# 295. - Regenerate (V,S) level 7 Transmutation [SOL] **[Bard, Cleric, Druid]** Touch a creature and stimulate its natural healing ability. -# 295. - Rescue the Dying (V) level 7 Transmutation [UB] +# 296. - Rescue the Dying (V) level 7 Transmutation [UB] **[Cleric, Druid]** With a word, you call positive energy into the target's body to heal and ward it. The target regains a number of hit points equal to 4d10 + 30. It also gains temporary hit points equal to half that amount and resistance to all damage, both lasting until the end of your next turn. When you cast this spell using a spell slot of 8th level or higher, the healing increases by 2d10 for each slot level above 7th. -# 296. - Resurrection (M,V,S) level 7 Necromancy [SOL] +# 297. - Resurrection (M,V,S) level 7 Necromancy [SOL] **[Bard, Cleric, Druid]** Brings one creature back to life, up to 100 years after death. -# 297. - *Reverse Gravity* © (V,S) level 7 Transmutation [Concentration] [UB] +# 298. - *Reverse Gravity* © (V,S) level 7 Transmutation [Concentration] [UB] **[Druid, Sorcerer, Wizard]** This spell reverses gravity in a 50-foot-radius, 100-foot-high cylinder centered on a point within range. -# 298. - Symbol (V,S) level 7 Abjuration [SOL] +# 299. - Symbol (V,S) level 7 Abjuration [SOL] **[Bard, Cleric, Wizard]** Inscribe a glyph on a surface. When an enemy starts its turn in the area or enters it, the glyph's effect is applied in a sphere with a 12-cell radius. -# 299. - *Abi-Dalzim's Horrid Wilting* © (V,S) level 8 Necromancy [UB] +# 300. - *Abi-Dalzim's Horrid Wilting* © (V,S) level 8 Necromancy [UB] **[Sorcerer, Wizard]** You draw the moisture from every creature in a 30-foot cube centered on a point you choose within range. Each creature in that area must make a Constitution saving throw. Constructs and undead aren't affected, and plants and ice elementals make this saving throw with disadvantage. A creature takes 10d8 necrotic damage on a failed save, or half as much damage on a successful one. -# 300. - Divine Blade (V,S) level 8 Evocation [Concentration] [SOL] +# 301. - Divine Blade (V,S) level 8 Evocation [Concentration] [SOL] **[Cleric]** A glowing blade of pure energy springs from your hand. On a hit, the target takes 6d8 radiant damage and must roll a Wisdom saving throw to avoid being stunned until the end of its next turn. -# 301. - Dominate Monster (V,S) level 8 Enchantment [Concentration] [SOL] +# 302. - Dominate Monster (V,S) level 8 Enchantment [Concentration] [SOL] **[Bard, Sorcerer, Warlock, Wizard]** Grants you control over an enemy creature of any type. -# 302. - Earthquake (V,S) level 8 Evocation [Concentration] [SOL] +# 303. - Earthquake (V,S) level 8 Evocation [Concentration] [SOL] **[Cleric, Druid, Sorcerer]** You create a seismic disturbance that violently shakes the ground and the creatures standing on it for the duration of the spell. -# 303. - Feeblemind (V,S) level 8 Enchantment [SOL] +# 304. - Feeblemind (V,S) level 8 Enchantment [SOL] **[Bard, Druid, Warlock, Wizard]** You blast the mind of one creature, attempting to shatter its intellect and personality. The target takes 4d6 psychic damage and must make an Intelligence saving throw. On a failed save, the creature's Intelligence, Charisma and Wisdom scores become 1 and it is unable to cast spells. These effects last for 1 minute. -# 304. - Holy Aura (V,S) level 8 Abjuration [Concentration] [SOL] +# 305. - Holy Aura (V,S) level 8 Abjuration [Concentration] [SOL] **[Cleric]** Allies within 6 cells of you when you cast Holy Aura gain advantage on all saving throws, and other creatures have disadvantage on attack rolls against them until the spell ends. In addition, when a fiend or an undead hits an affected creature with a melee attack, they must succeed on a Constitution saving throw or be blinded until the spell ends. -# 305. - Incendiary Cloud (V,S) level 8 Conjuration [Concentration] [SOL] +# 306. - Incendiary Cloud (V,S) level 8 Conjuration [Concentration] [SOL] **[Sorcerer, Wizard]** A cloud of smoke appears in a sphere with a 4-cell radius. The cloud damages each creature inside it, and moves away from you each turn until the end of the spell's duration or until a moderate wind disperses the cloud. -# 306. - *Maddening Darkness* © (V) level 8 Evocation [Concentration] [UB] +# 307. - *Maddening Darkness* © (V) level 8 Evocation [Concentration] [UB] **[Warlock, Wizard]** Magical darkness spreads from a point you choose within range to fill a 60-foot-radius sphere until the spell ends. Shrieks, gibbering, and mad laughter can be heard within the sphere. On activation, and whenever a creature ends its turn in the sphere, it must make a Wisdom saving throw, taking 6d8 psychic damage on a failed save, or half as much damage on a successful one. -# 307. - Maze (V,S) level 8 Abjuration [Concentration] [SOL] +# 308. - Maze (V,S) level 8 Abjuration [Concentration] [SOL] **[Wizard]** You banish a creature that you can see within range into a labyrinthine demiplane. The target remains there for the spell's duration or until it escapes the maze. -# 308. - *Mind Blank* © (V,S) level 8 Transmutation [UB] +# 309. - *Mind Blank* © (V,S) level 8 Transmutation [UB] **[Bard, Wizard]** Until the spell ends, one willing creature you touch is immune to psychic damage, any effect that would sense its emotions or read its thoughts, divination spells, and the charmed condition. -# 309. - Power Word Stun (V) level 8 Enchantment [SOL] +# 310. - Power Word Stun (V) level 8 Enchantment [SOL] **[Bard, Sorcerer, Warlock, Wizard]** Overwhelm the mind of a creature that has 150 hit points or fewer, leaving it stunned. -# 310. - Soul Expulsion (V,S) level 8 Necromancy [UB] +# 311. - Soul Expulsion (V,S) level 8 Necromancy [UB] **[Cleric, Sorcerer, Wizard]** You blast a foe's soul with magical power, causing it to glow with otherwordly light. Choose one creature that you can see within range, which must make a Charisma saving throw. On a failed saving throw, the target takes 11d8 necrotic damage and is stunned until the start of your next turn. On a successful saving throw, the target takes half damage and isn't stunned. Each enemy other than the target that is within 60 feet of the target must make a Wisdom saving throw. On a failed save, a creature takes 7d8 radiant damage and has disadvantage on attack rolls until the end of your next turn. On a successful saving throw a creature takes half damage and nothing else. When this spell targets undead, the spell ignores any resistance or immunity to necrotic damage, and the target has disadvantage on the saving throw. When you cast this spell using a spell slot of 9th level, both the necrotic damage and radiant damage increase by 2d8. -# 311. - Spell Ward (V,S) level 8 Abjuration [Concentration] [SOL] +# 312. - Spell Ward (V,S) level 8 Abjuration [Concentration] [SOL] **[Cleric, Wizard]** Creates a mobile globe that is impenetrable to enemy spells cast from outside it. -# 312. - Sunburst (V,S) level 8 Evocation [SOL] +# 313. - Sunburst (V,S) level 8 Evocation [SOL] **[Druid, Sorcerer, Wizard]** Brilliant sunlight blazes in a sphere with a 12-cell radius. Each creature that fails a Constitution saving throw takes radiant damage and is blinded for 1 minute. Any darkness created by a spell in the area is dispelled. -# 313. - Thunderstorm (V,S) level 8 Transmutation [SOL] +# 314. - Thunderstorm (V,S) level 8 Transmutation [SOL] **[Cleric, Druid, Wizard]** You create a blast of thunder in a sphere that causes thunder and lightning damage to everyone, and can blind or stun those who fail a CON saving throw. -# 314. - Wild Shapes (V,S) level 8 Transmutation [Concentration] [SOL] +# 315. - Wild Shapes (V,S) level 8 Transmutation [Concentration] [SOL] Turns other creatures in to beasts for one day. -# 315. - *Foresight* © (V,S) level 9 Transmutation [UB] +# 316. - *Foresight* © (V,S) level 9 Transmutation [UB] **[Bard, Druid, Warlock, Wizard]** You touch a willing creature and bestow a limited ability to see into the immediate future. For the duration, the target can't be surprised and has advantage on attack rolls, ability checks, and saving throws. Additionally, other creatures have disadvantage on attack rolls against the target for the duration. -# 316. - *Invulnerability* © (M,V,S) level 9 Abjuration [Concentration] [UB] +# 317. - *Invulnerability* © (M,V,S) level 9 Abjuration [Concentration] [UB] **[Wizard]** You are immune to all damage until the spell ends. -# 317. - *Mass Heal* © (V,S) level 9 Transmutation [UB] +# 318. - *Mass Heal* © (V,S) level 9 Transmutation [UB] **[Cleric]** A flood of healing energy flows from you into injured creatures around you. You restore 120 hit points each to 6 creatures that you can see within range. Creatures healed by this spell are also cured of all diseases and any effect making them blinded or deafened. This spell has no effect on undead or constructs. -# 318. - *Meteor Swarm* © (V,S) level 9 Transmutation [UB] +# 319. - *Meteor Swarm* © (V,S) level 9 Transmutation [UB] **[Sorcerer, Wizard]** Blazing orbs of fire plummet to the ground at a single point you can see within range. Each creature in a 40-foot-radius sphere centered on the point you choose must make a Dexterity saving throw. The sphere spreads around corners. A creature takes 20d6 fire damage and 20d6 bludgeoning damage on a failed save, or half as much damage on a successful one. A creature in the area of more than one fiery burst is affected only once. -# 319. - *Power Word Heal* © (V,S) level 9 Enchantment [UB] +# 320. - *Power Word Heal* © (V,S) level 9 Enchantment [UB] **[Bard, Cleric]** A wave of healing energy washes over the creature you touch. The target regains all its hit points. If the creature is charmed, frightened, paralyzed, or stunned, the condition ends. If the creature is prone, it can use its reaction to stand up. This spell has no effect on undead or constructs. -# 320. - *Power Word Kill* © (V,S) level 9 Transmutation [UB] +# 321. - *Power Word Kill* © (V,S) level 9 Transmutation [UB] **[Bard, Sorcerer, Warlock, Wizard]** You utter a word of power that can compel one creature you can see within range to die instantly. If the creature you choose has 100 hit points or fewer, it dies. Otherwise, the spell has no effect. -# 321. - *Psychic Scream* © (S) level 9 Enchantment [UB] +# 322. - *Psychic Scream* © (S) level 9 Enchantment [UB] **[Bard, Sorcerer, Warlock, Wizard]** You unleash the power of your mind to blast the intellect of up to ten creatures of your choice that you can see within range. Each target must make an Intelligence saving throw. On a failed save, a target takes 14d6 psychic damage and is stunned for 1 minute. On a successful save, a target takes half as much damage and isn't stunned. A stunned target can make an Intelligence saving throw at the end of each of its turns. On a successful save, the stunning effect ends. -# 322. - *Shapechange* © (M,V,S) level 9 Transmutation [Concentration] [UB] +# 323. - *Shapechange* © (M,V,S) level 9 Transmutation [Concentration] [UB] **[Druid, Wizard]** You assume the form of a different creature for the duration. The new form can be of any creature with a challenge rating equal to your level or lower. -# 323. - *Time Stop* © (V) level 9 Transmutation [UB] +# 324. - *Time Stop* © (V) level 9 Transmutation [UB] **[Sorcerer, Wizard]** You briefly stop the flow of time for everyone but yourself. No time passes for other creatures, while you take 1d4+1 turns in a row, during which you can use actions and move as normal. This spell ends if one of the actions you use during this period, or any effects that you create during this period, affects a creature other than you. -# 324. - *Weird* © (V,S) level 9 Illusion [Concentration] [UB] +# 325. - *Weird* © (V,S) level 9 Illusion [Concentration] [UB] **[Warlock, Wizard]** diff --git a/SolastaUnfinishedBusiness/ChangelogHistory.txt b/SolastaUnfinishedBusiness/ChangelogHistory.txt index 81a84797e8..eaea44d203 100644 --- a/SolastaUnfinishedBusiness/ChangelogHistory.txt +++ b/SolastaUnfinishedBusiness/ChangelogHistory.txt @@ -1,6 +1,6 @@ 1.5.97.30: -- added Command [Bard, Cleric, Paladin], Dissonant Whispers [Bard], and Holy Weapon [Cleric, Paladin] spells +- added Command, Dissonant Whispers, Holy Weapon, and Swift Quiver spells - added Interface > Game UI > 'Enable CTRL click-drag to bypass quest items checks on drop' setting - fixed Barbarian Sundering Blow interaction with Call Lightning, and other proxy like powers - fixed Bardic Inspiration, Indomitable Resistances, and Legendary Resistances saving throw logic diff --git a/SolastaUnfinishedBusiness/Displays/_ModUi.cs b/SolastaUnfinishedBusiness/Displays/_ModUi.cs index f23e7c4117..b13b3d0dd5 100644 --- a/SolastaUnfinishedBusiness/Displays/_ModUi.cs +++ b/SolastaUnfinishedBusiness/Displays/_ModUi.cs @@ -266,6 +266,7 @@ internal static class ModUi "StarryWisp", "SteelWhirlwind", "StrikeWithTheWind", + "SwiftQuiver", "SwordStorm", "SynapticStatic", "Telekinesis", diff --git a/SolastaUnfinishedBusiness/Models/SpellsContext.cs b/SolastaUnfinishedBusiness/Models/SpellsContext.cs index 99ba16fb6a..152badea8d 100644 --- a/SolastaUnfinishedBusiness/Models/SpellsContext.cs +++ b/SolastaUnfinishedBusiness/Models/SpellsContext.cs @@ -362,6 +362,7 @@ internal static void LateLoad() RegisterSpell(MantleOfThorns, 0, SpellListDruid); RegisterSpell(SteelWhirlwind, 0, SpellListRanger, SpellListWizard); RegisterSpell(SonicBoom, 0, SpellListSorcerer, SpellListWizard); + RegisterSpell(BuildSwiftQuiver(), 0, SpellListRanger); RegisterSpell(BuildSynapticStatic(), 0, SpellListBard, SpellListSorcerer, SpellListWarlock, SpellListWizard); RegisterSpell(Telekinesis, 0, SpellListSorcerer, SpellListWizard); diff --git a/SolastaUnfinishedBusiness/Properties/Resources.Designer.cs b/SolastaUnfinishedBusiness/Properties/Resources.Designer.cs index 74f8539340..68868513ae 100644 --- a/SolastaUnfinishedBusiness/Properties/Resources.Designer.cs +++ b/SolastaUnfinishedBusiness/Properties/Resources.Designer.cs @@ -4782,6 +4782,16 @@ public static byte[] SunlightBlade { } } + /// + /// Looks up a localized resource of type System.Byte[]. + /// + public static byte[] SwiftQuiver { + get { + object obj = ResourceManager.GetObject("SwiftQuiver", resourceCulture); + return ((byte[])(obj)); + } + } + /// /// Looks up a localized resource of type System.Byte[]. /// diff --git a/SolastaUnfinishedBusiness/Properties/Resources.resx b/SolastaUnfinishedBusiness/Properties/Resources.resx index bd9d2013f0..33cba321e6 100644 --- a/SolastaUnfinishedBusiness/Properties/Resources.resx +++ b/SolastaUnfinishedBusiness/Properties/Resources.resx @@ -152,6 +152,11 @@ PublicKeyToken=b77a5c561934e089 + + ../Resources/Spells/SwiftQuiver.png;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + ../Resources/Spells/SickeningRadiance.png;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 diff --git a/SolastaUnfinishedBusiness/Resources/Spells/SwiftQuiver.png b/SolastaUnfinishedBusiness/Resources/Spells/SwiftQuiver.png new file mode 100644 index 0000000000000000000000000000000000000000..a7e186b437dd69294665cb336f3135af0a30aa92 GIT binary patch literal 12044 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 50) + { + yield break; + } - return spell; + rulesetDefender.InflictCondition( + conditionDefinition.Name, + DurationType.Minute, + 1, + TurnOccurenceType.EndOfTurn, + AttributeDefinitions.TagEffect, + rulesetAttacker.guid, + rulesetAttacker.CurrentFaction.Name, + 1, + conditionDefinition.Name, + 0, + 0, + 0); + } } #endregion - #region Holy Weapon + #region Circle of Magical Negation - internal static SpellDefinition BuildHolyWeapon() + internal static SpellDefinition BuildCircleOfMagicalNegation() { - const string NAME = "HolyWeapon"; + const string NAME = "CircleOfMagicalNegation"; - var power = FeatureDefinitionPowerBuilder - .Create($"Power{NAME}") - .SetGuiPresentation(Category.Feature, SpiritualWeapon) - .SetUsesFixed(ActivationTime.BonusAction) - .SetShowCasting(false) - .SetEffectDescription( - EffectDescriptionBuilder - .Create() - .SetDurationData(DurationType.Minute, 1) - .SetTargetingData(Side.Enemy, RangeType.Self, 0, TargetType.Sphere, 6) - .SetSavingThrowData(false, AttributeDefinitions.Constitution, true, - EffectDifficultyClassComputation.SpellCastingFeature) - .SetEffectForms( - EffectFormBuilder - .Create() - .HasSavingThrow(EffectSavingThrowType.HalfDamage) - .SetDamageForm(DamageTypeRadiant, 4, DieType.D8) - .Build(), - EffectFormBuilder - .Create() - .HasSavingThrow(EffectSavingThrowType.Negates) - .SetConditionForm(ConditionDefinitions.ConditionBlinded, - ConditionForm.ConditionOperation.Add) - .Build()) - .SetParticleEffectParameters(FaerieFire) - .SetImpactEffectParameters( - FeatureDefinitionAdditionalDamages.AdditionalDamageBrandingSmite.impactParticleReference) - .Build()) - .AddCustomSubFeatures(new PowerOrSpellFinishedByMeHolyWeapon()) + var savingThrowAffinityCircleOfMagicalNegation = FeatureDefinitionSavingThrowAffinityBuilder + .Create($"SavingThrowAffinity{NAME}") + .SetGuiPresentation(NAME, Category.Spell) + // only against magic + .SetAffinities(CharacterSavingThrowAffinity.Advantage, true, + AttributeDefinitions.Strength, + AttributeDefinitions.Dexterity, + AttributeDefinitions.Constitution, + AttributeDefinitions.Intelligence, + AttributeDefinitions.Wisdom, + AttributeDefinitions.Charisma) .AddToDB(); - var condition = ConditionDefinitionBuilder + var conditionCircleOfMagicalNegation = ConditionDefinitionBuilder .Create($"Condition{NAME}") - .SetGuiPresentationNoContent(true) + .SetGuiPresentation(NAME, Category.Spell, ConditionShielded) + .SetPossessive() .SetSilent(Silent.WhenAddedOrRemoved) - .SetFeatures(power) - .AddCustomSubFeatures(AddUsablePowersFromCondition.Marker) + .SetFeatures(savingThrowAffinityCircleOfMagicalNegation) .AddToDB(); - var additionalDamage = FeatureDefinitionAdditionalDamageBuilder - .Create($"AdditionalDamage{NAME}") - .SetGuiPresentation(Category.Feature, SpiritualWeapon) - .SetNotificationTag("HolyWeapon") - .SetDamageDice(DieType.D6, 2) - .SetSpecificDamageType(DamageTypeRadiant) - .AddCustomSubFeatures( - new AddTagToWeapon( - TagsDefinitions.MagicalWeapon, TagsDefinitions.Criticity.Important, ValidatorsWeapon.AlwaysValid)) - .AddToDB(); + conditionCircleOfMagicalNegation.GuiPresentation.description = Gui.EmptyContent; - var lightSourceForm = Light.EffectDescription.GetFirstFormOfType(EffectForm.EffectFormType.LightSource); + conditionCircleOfMagicalNegation.AddCustomSubFeatures( + new MagicEffectBeforeHitConfirmedOnMeCircleOfMagicalNegation(conditionCircleOfMagicalNegation)); var spell = SpellDefinitionBuilder .Create(NAME) - .SetGuiPresentation(Category.Spell, SpiritualWeapon) - .SetSchoolOfMagic(SchoolOfMagicDefinitions.SchoolEvocation) + .SetGuiPresentation(Category.Spell, Sprites.GetSprite(NAME, Resources.CircleOfMagicalNegation, 128)) + .SetSchoolOfMagic(SchoolOfMagicDefinitions.SchoolAbjuration) .SetSpellLevel(5) .SetCastingTime(ActivationTime.Action) .SetMaterialComponent(MaterialComponentType.None) - .SetSomaticComponent(true) + .SetSomaticComponent(false) .SetVerboseComponent(true) .SetVocalSpellSameType(VocalSpellSemeType.Buff) .SetRequiresConcentration(true) .SetEffectDescription( EffectDescriptionBuilder - .Create(Light) - .SetDurationData(DurationType.Hour, 1) - .SetTargetingData(Side.Enemy, RangeType.Touch, 0, TargetType.Item, - itemSelectionType: ActionDefinitions.ItemSelectionType.EquippedNoLightSource) - .SetEffectForms( - EffectFormBuilder - .Create() - .SetLightSourceForm( - LightSourceType.Basic, 6, 6, - lightSourceForm.lightSourceForm.color, - lightSourceForm.lightSourceForm.graphicsPrefabReference) - .Build(), - EffectFormBuilder - .Create() - .SetItemPropertyForm( - ItemPropertyUsage.Unlimited, 0, new FeatureUnlockByLevel(additionalDamage, 0)) - .Build(), - EffectFormBuilder.ConditionForm(condition, ConditionForm.ConditionOperation.Add, true)) - .SetParticleEffectParameters(PowerTraditionLightBlindingFlash) - .SetEffectEffectParameters(new AssetReference()) + .Create() + .SetDurationData(DurationType.Minute, 10) + .SetTargetingData(Side.Ally, RangeType.Self, 0, TargetType.Sphere, 6) + .SetRecurrentEffect( + RecurrentEffect.OnActivation | RecurrentEffect.OnEnter | RecurrentEffect.OnTurnStart) + .SetEffectForms(EffectFormBuilder.ConditionForm(conditionCircleOfMagicalNegation)) + .SetParticleEffectParameters(DivineWord) .Build()) .AddToDB(); return spell; } - private sealed class PowerOrSpellFinishedByMeHolyWeapon : IPowerOrSpellFinishedByMe + private sealed class MagicEffectBeforeHitConfirmedOnMeCircleOfMagicalNegation( + ConditionDefinition conditionCircleOfMagicalNegation) + : IMagicEffectBeforeHitConfirmedOnMe, IRollSavingThrowFinished { - public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, BaseDefinition baseDefinition) + private const string CircleOfMagicalNegationSavedTag = "CircleOfMagicalNegationSaved"; + + public IEnumerator OnMagicEffectBeforeHitConfirmedOnMe( + GameLocationBattleManager battleManager, + GameLocationCharacter attacker, + GameLocationCharacter defender, + ActionModifier actionModifier, + RulesetEffect rulesetEffect, + List actualEffectForms, + bool firstTarget, + bool criticalHit) { - action.ActingCharacter.RulesetCharacter.BreakConcentration(); + if (!defender.UsedSpecialFeatures.Remove(CircleOfMagicalNegationSavedTag)) + { + yield break; + } - yield break; + var removed = actualEffectForms.RemoveAll(x => + x.HasSavingThrow + && x.FormType == EffectForm.EffectFormType.Damage + && x.SavingThrowAffinity == EffectSavingThrowType.HalfDamage); + + if (removed > 0) + { + defender.RulesetCharacter.LogCharacterAffectedByCondition(conditionCircleOfMagicalNegation); + } + } + + public void OnSavingThrowFinished( + RulesetActor rulesetActorCaster, + RulesetActor rulesetActorDefender, + int saveBonus, + string abilityScoreName, + BaseDefinition sourceDefinition, + List modifierTrends, + List advantageTrends, + int rollModifier, + int saveDC, + bool hasHitVisual, + ref RollOutcome outcome, + ref int outcomeDelta, + List effectForms) + { + if (outcome == RollOutcome.Success) + { + GameLocationCharacter.GetFromActor(rulesetActorDefender).UsedSpecialFeatures + .TryAdd(CircleOfMagicalNegationSavedTag, 0); + } } } @@ -737,35 +845,144 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, "EmpoweredKnowledge", reactionValidated: ReactionValidated); - yield break; + yield break; + + void ReactionValidated(ReactionRequestSpendBundlePower reactionRequest) + { + var selectedPower = powers[reactionRequest.SelectedSubOption]; + var locationCharacterService = ServiceRepository.GetService(); + var contenders = + locationCharacterService.PartyCharacters.Union(locationCharacterService.GuestCharacters) + .ToList(); + + foreach (var contender in contenders) + { + var rulesetContender = contender.RulesetCharacter; + + foreach (var skill in skillsDb) + { + var conditionName = $"ConditionEmpoweredKnowledge{skill.Name}"; + + if (rulesetContender.TryGetConditionOfCategoryAndType( + AttributeDefinitions.TagEffect, conditionName, out var activeCondition) && + activeCondition.SourceGuid == rulesetCharacter.Guid && + (activeCondition.TargetGuid != rulesetTarget.Guid || + !selectedPower.Name.Contains(skill.Name))) + { + rulesetContender.RemoveCondition(activeCondition); + } + } + } + } + } + } + + #endregion + + #region Holy Weapon + + internal static SpellDefinition BuildHolyWeapon() + { + const string NAME = "HolyWeapon"; + + var power = FeatureDefinitionPowerBuilder + .Create($"Power{NAME}") + .SetGuiPresentation(Category.Feature, SpiritualWeapon) + .SetUsesFixed(ActivationTime.BonusAction) + .SetShowCasting(false) + .SetEffectDescription( + EffectDescriptionBuilder + .Create() + .SetDurationData(DurationType.Minute, 1) + .SetTargetingData(Side.Enemy, RangeType.Self, 0, TargetType.Sphere, 6) + .SetSavingThrowData(false, AttributeDefinitions.Constitution, true, + EffectDifficultyClassComputation.SpellCastingFeature) + .SetEffectForms( + EffectFormBuilder + .Create() + .HasSavingThrow(EffectSavingThrowType.HalfDamage) + .SetDamageForm(DamageTypeRadiant, 4, DieType.D8) + .Build(), + EffectFormBuilder + .Create() + .HasSavingThrow(EffectSavingThrowType.Negates) + .SetConditionForm(ConditionDefinitions.ConditionBlinded, + ConditionForm.ConditionOperation.Add) + .Build()) + .SetParticleEffectParameters(FaerieFire) + .SetImpactEffectParameters( + FeatureDefinitionAdditionalDamages.AdditionalDamageBrandingSmite.impactParticleReference) + .Build()) + .AddCustomSubFeatures(new PowerOrSpellFinishedByMeHolyWeapon()) + .AddToDB(); + + var condition = ConditionDefinitionBuilder + .Create($"Condition{NAME}") + .SetGuiPresentationNoContent(true) + .SetSilent(Silent.WhenAddedOrRemoved) + .SetFeatures(power) + .AddCustomSubFeatures(AddUsablePowersFromCondition.Marker) + .AddToDB(); + + var additionalDamage = FeatureDefinitionAdditionalDamageBuilder + .Create($"AdditionalDamage{NAME}") + .SetGuiPresentation(Category.Feature, SpiritualWeapon) + .SetNotificationTag("HolyWeapon") + .SetDamageDice(DieType.D6, 2) + .SetSpecificDamageType(DamageTypeRadiant) + .AddCustomSubFeatures( + new AddTagToWeapon( + TagsDefinitions.MagicalWeapon, TagsDefinitions.Criticity.Important, ValidatorsWeapon.AlwaysValid)) + .AddToDB(); + + var lightSourceForm = Light.EffectDescription.GetFirstFormOfType(EffectForm.EffectFormType.LightSource); - void ReactionValidated(ReactionRequestSpendBundlePower reactionRequest) - { - var selectedPower = powers[reactionRequest.SelectedSubOption]; - var locationCharacterService = ServiceRepository.GetService(); - var contenders = - locationCharacterService.PartyCharacters.Union(locationCharacterService.GuestCharacters) - .ToList(); + var spell = SpellDefinitionBuilder + .Create(NAME) + .SetGuiPresentation(Category.Spell, SpiritualWeapon) + .SetSchoolOfMagic(SchoolOfMagicDefinitions.SchoolEvocation) + .SetSpellLevel(5) + .SetCastingTime(ActivationTime.Action) + .SetMaterialComponent(MaterialComponentType.None) + .SetSomaticComponent(true) + .SetVerboseComponent(true) + .SetVocalSpellSameType(VocalSpellSemeType.Buff) + .SetRequiresConcentration(true) + .SetEffectDescription( + EffectDescriptionBuilder + .Create(Light) + .SetDurationData(DurationType.Hour, 1) + .SetTargetingData(Side.Enemy, RangeType.Touch, 0, TargetType.Item, + itemSelectionType: ActionDefinitions.ItemSelectionType.EquippedNoLightSource) + .SetEffectForms( + EffectFormBuilder + .Create() + .SetLightSourceForm( + LightSourceType.Basic, 6, 6, + lightSourceForm.lightSourceForm.color, + lightSourceForm.lightSourceForm.graphicsPrefabReference) + .Build(), + EffectFormBuilder + .Create() + .SetItemPropertyForm( + ItemPropertyUsage.Unlimited, 0, new FeatureUnlockByLevel(additionalDamage, 0)) + .Build(), + EffectFormBuilder.ConditionForm(condition, ConditionForm.ConditionOperation.Add, true)) + .SetParticleEffectParameters(PowerTraditionLightBlindingFlash) + .SetEffectEffectParameters(new AssetReference()) + .Build()) + .AddToDB(); - foreach (var contender in contenders) - { - var rulesetContender = contender.RulesetCharacter; + return spell; + } - foreach (var skill in skillsDb) - { - var conditionName = $"ConditionEmpoweredKnowledge{skill.Name}"; + private sealed class PowerOrSpellFinishedByMeHolyWeapon : IPowerOrSpellFinishedByMe + { + public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, BaseDefinition baseDefinition) + { + action.ActingCharacter.RulesetCharacter.BreakConcentration(); - if (rulesetContender.TryGetConditionOfCategoryAndType( - AttributeDefinitions.TagEffect, conditionName, out var activeCondition) && - activeCondition.SourceGuid == rulesetCharacter.Guid && - (activeCondition.TargetGuid != rulesetTarget.Guid || - !selectedPower.Name.Contains(skill.Name))) - { - rulesetContender.RemoveCondition(activeCondition); - } - } - } - } + yield break; } } @@ -884,68 +1101,53 @@ public IEnumerator ComputeValidPositions(CursorLocationSelectPosition cursorLoca #endregion - #region Banishing Smite + #region Swift Quiver - internal static SpellDefinition BuildBanishingSmite() + internal static SpellDefinition BuildSwiftQuiver() { - const string NAME = "BanishingSmite"; - - var conditionBanishingSmiteEnemy = ConditionDefinitionBuilder - .Create(ConditionBanished, $"Condition{NAME}Enemy") - .SetSpecialDuration(DurationType.Minute, 1) - .AddToDB(); - - conditionBanishingSmiteEnemy.permanentlyRemovedIfExtraPlanar = true; - - var additionalDamageBanishingSmite = FeatureDefinitionAdditionalDamageBuilder - .Create($"AdditionalDamage{NAME}") - .SetGuiPresentation(NAME, Category.Spell) - .SetNotificationTag(NAME) - .SetAttackModeOnly() - .AddCustomSubFeatures(new PhysicalAttackFinishedByMeBanishingSmite(conditionBanishingSmiteEnemy)) - .SetDamageDice(DieType.D10, 5) - .SetSpecificDamageType(DamageTypeForce) - // doesn't follow the standard impact particle reference - .SetImpactParticleReference(Banishment.EffectDescription.EffectParticleParameters.effectParticleReference) - .AddToDB(); + const string NAME = "SwiftQuiver"; - var conditionBanishingSmite = ConditionDefinitionBuilder + var condition = ConditionDefinitionBuilder .Create($"Condition{NAME}") - .SetGuiPresentation(NAME, Category.Spell, ConditionBrandingSmite) - .SetPossessive() - .SetFeatures(additionalDamageBanishingSmite) - .SetSpecialInterruptions(ConditionInterruption.AttacksAndDamages) + .SetGuiPresentationNoContent(true) + .SetSilent(Silent.WhenAddedOrRemoved) + .AddCustomSubFeatures(new AddExtraSwiftQuiverAttack(ActionDefinitions.ActionType.Bonus)) .AddToDB(); var spell = SpellDefinitionBuilder - .Create(BrandingSmite, NAME) - .SetGuiPresentation(Category.Spell, Sprites.GetSprite(NAME, Resources.ThunderousSmite, 128)) - .SetSchoolOfMagic(SchoolOfMagicDefinitions.SchoolAbjuration) + .Create(NAME) + .SetGuiPresentation(Category.Spell, Sprites.GetSprite(NAME, Resources.SwiftQuiver, 128)) + .SetSchoolOfMagic(SchoolOfMagicDefinitions.SchoolTransmutation) .SetSpellLevel(5) .SetCastingTime(ActivationTime.BonusAction) - .SetMaterialComponent(MaterialComponentType.None) - .SetSomaticComponent(false) + .SetMaterialComponent(MaterialComponentType.Specific) + .SetSpecificMaterialComponent(TagsDefinitions.ItemTagConsumable, 0, false) + .SetSomaticComponent(true) .SetVerboseComponent(true) .SetVocalSpellSameType(VocalSpellSemeType.Buff) + .SetRequiresConcentration(true) .SetEffectDescription( EffectDescriptionBuilder .Create() .SetDurationData(DurationType.Minute, 1) .SetTargetingData(Side.Ally, RangeType.Self, 0, TargetType.Self) - // .SetEffectAdvancement(EffectIncrementMethod.PerAdditionalSlotLevel, additionalDicePerIncrement: 1) - .SetEffectForms(EffectFormBuilder.ConditionForm(conditionBanishingSmite)) - .SetParticleEffectParameters(Banishment) + .SetEffectForms(EffectFormBuilder.ConditionForm(condition)) .Build()) .AddToDB(); return spell; } - private sealed class PhysicalAttackFinishedByMeBanishingSmite( - // ReSharper disable once SuggestBaseTypeForParameterInConstructor - ConditionDefinition conditionDefinition) - : IPhysicalAttackFinishedByMe + internal sealed class AddExtraSwiftQuiverAttack + : AddExtraAttackBase, IPhysicalAttackInitiatedByMe, IPhysicalAttackFinishedByMe { + internal AddExtraSwiftQuiverAttack( + ActionDefinitions.ActionType actionType, + params IsCharacterValidHandler[] validators) : base(actionType, validators) + { + // Empty + } + public IEnumerator OnPhysicalAttackFinishedByMe( GameLocationBattleManager battleManager, CharacterAction action, @@ -955,145 +1157,79 @@ public IEnumerator OnPhysicalAttackFinishedByMe( RollOutcome rollOutcome, int damageAmount) { - var rulesetAttacker = attacker.RulesetCharacter; - var rulesetDefender = defender.RulesetActor; - - if (rollOutcome is RollOutcome.Failure or RollOutcome.CriticalFailure || - rulesetAttacker is not { IsDeadOrDyingOrUnconscious: false } || - rulesetDefender is not { IsDeadOrDyingOrUnconscious: false } || - rulesetDefender.CurrentHitPoints > 50) + if (action.ActionType == ActionDefinitions.ActionType.Bonus && + IsTwoHandedBow(attackMode, null, null)) { - yield break; + (attackMode.SourceDefinition as ItemDefinition)!.WeaponDescription.WeaponTags.Add( + TagsDefinitions.WeaponTagAmmunition); } - rulesetDefender.InflictCondition( - conditionDefinition.Name, - DurationType.Minute, - 1, - TurnOccurenceType.EndOfTurn, - AttributeDefinitions.TagEffect, - rulesetAttacker.guid, - rulesetAttacker.CurrentFaction.Name, - 1, - conditionDefinition.Name, - 0, - 0, - 0); + yield break; } - } - - #endregion - - #region Circle of Magical Negation - - internal static SpellDefinition BuildCircleOfMagicalNegation() - { - const string NAME = "CircleOfMagicalNegation"; - - var savingThrowAffinityCircleOfMagicalNegation = FeatureDefinitionSavingThrowAffinityBuilder - .Create($"SavingThrowAffinity{NAME}") - .SetGuiPresentation(NAME, Category.Spell) - // only against magic - .SetAffinities(CharacterSavingThrowAffinity.Advantage, true, - AttributeDefinitions.Strength, - AttributeDefinitions.Dexterity, - AttributeDefinitions.Constitution, - AttributeDefinitions.Intelligence, - AttributeDefinitions.Wisdom, - AttributeDefinitions.Charisma) - .AddToDB(); - - var conditionCircleOfMagicalNegation = ConditionDefinitionBuilder - .Create($"Condition{NAME}") - .SetGuiPresentation(NAME, Category.Spell, ConditionShielded) - .SetPossessive() - .SetSilent(Silent.WhenAddedOrRemoved) - .SetFeatures(savingThrowAffinityCircleOfMagicalNegation) - .AddToDB(); - - conditionCircleOfMagicalNegation.GuiPresentation.description = Gui.EmptyContent; - - conditionCircleOfMagicalNegation.AddCustomSubFeatures( - new MagicEffectBeforeHitConfirmedOnMeCircleOfMagicalNegation(conditionCircleOfMagicalNegation)); - - var spell = SpellDefinitionBuilder - .Create(NAME) - .SetGuiPresentation(Category.Spell, Sprites.GetSprite(NAME, Resources.CircleOfMagicalNegation, 128)) - .SetSchoolOfMagic(SchoolOfMagicDefinitions.SchoolAbjuration) - .SetSpellLevel(5) - .SetCastingTime(ActivationTime.Action) - .SetMaterialComponent(MaterialComponentType.None) - .SetSomaticComponent(false) - .SetVerboseComponent(true) - .SetVocalSpellSameType(VocalSpellSemeType.Buff) - .SetRequiresConcentration(true) - .SetEffectDescription( - EffectDescriptionBuilder - .Create() - .SetDurationData(DurationType.Minute, 10) - .SetTargetingData(Side.Ally, RangeType.Self, 0, TargetType.Sphere, 6) - .SetRecurrentEffect( - RecurrentEffect.OnActivation | RecurrentEffect.OnEnter | RecurrentEffect.OnTurnStart) - .SetEffectForms(EffectFormBuilder.ConditionForm(conditionCircleOfMagicalNegation)) - .SetParticleEffectParameters(DivineWord) - .Build()) - .AddToDB(); - - return spell; - } - - private sealed class MagicEffectBeforeHitConfirmedOnMeCircleOfMagicalNegation( - ConditionDefinition conditionCircleOfMagicalNegation) - : IMagicEffectBeforeHitConfirmedOnMe, IRollSavingThrowFinished - { - private const string CircleOfMagicalNegationSavedTag = "CircleOfMagicalNegationSaved"; - public IEnumerator OnMagicEffectBeforeHitConfirmedOnMe( + public IEnumerator OnPhysicalAttackInitiatedByMe( GameLocationBattleManager battleManager, + CharacterAction action, GameLocationCharacter attacker, GameLocationCharacter defender, - ActionModifier actionModifier, - RulesetEffect rulesetEffect, - List actualEffectForms, - bool firstTarget, - bool criticalHit) + ActionModifier attackModifier, + RulesetAttackMode attackMode) { - if (!defender.UsedSpecialFeatures.Remove(CircleOfMagicalNegationSavedTag)) + if (action.ActionType == ActionDefinitions.ActionType.Bonus && + IsTwoHandedBow(attackMode, null, null)) { - yield break; + (attackMode.SourceDefinition as ItemDefinition)!.WeaponDescription.WeaponTags.Remove( + TagsDefinitions.WeaponTagAmmunition); } - var removed = actualEffectForms.RemoveAll(x => - x.HasSavingThrow - && x.FormType == EffectForm.EffectFormType.Damage - && x.SavingThrowAffinity == EffectSavingThrowType.HalfDamage); + yield break; + } - if (removed > 0) - { - defender.RulesetCharacter.LogCharacterAffectedByCondition(conditionCircleOfMagicalNegation); - } + private static bool IsTwoHandedBow(RulesetAttackMode mode, RulesetItem item, RulesetCharacterHero hero) + { + return ValidatorsWeapon.IsOfWeaponType(LongbowType, ShortbowType, HeavyCrossbowType, LightCrossbowType)( + mode, item, hero); } - public void OnSavingThrowFinished( - RulesetActor rulesetActorCaster, - RulesetActor rulesetActorDefender, - int saveBonus, - string abilityScoreName, - BaseDefinition sourceDefinition, - List modifierTrends, - List advantageTrends, - int rollModifier, - int saveDC, - bool hasHitVisual, - ref RollOutcome outcome, - ref int outcomeDelta, - List effectForms) + protected override List GetAttackModes([NotNull] RulesetCharacter character) { - if (outcome == RollOutcome.Success) + if (character is not RulesetCharacterHero hero) { - GameLocationCharacter.GetFromActor(rulesetActorDefender).UsedSpecialFeatures - .TryAdd(CircleOfMagicalNegationSavedTag, 0); + return null; + } + + var item = hero.CharacterInventory.InventorySlotsByName[EquipmentDefinitions.SlotTypeMainHand].EquipedItem; + + if (item == null || + !IsTwoHandedBow(null, item, hero)) + { + return null; + } + + var strikeDefinition = item.ItemDefinition; + var weaponDescription = strikeDefinition.WeaponDescription; + var removedTag = weaponDescription.WeaponTags.Remove(TagsDefinitions.WeaponTagAmmunition); + + var attackMode = hero.RefreshAttackMode( + ActionType, + strikeDefinition, + strikeDefinition.WeaponDescription, + ValidatorsCharacter.IsFreeOffhand(hero), + true, + EquipmentDefinitions.SlotTypeMainHand, + hero.attackModifiers, + hero.FeaturesOrigin, + item + ); + + if (removedTag) + { + weaponDescription.WeaponTags.Add(TagsDefinitions.WeaponTagAmmunition); } + + attackMode.AttacksNumber = 2; + + return [attackMode]; } } diff --git a/SolastaUnfinishedBusiness/Translations/de/Spells/Spells05-de.txt b/SolastaUnfinishedBusiness/Translations/de/Spells/Spells05-de.txt index e2e71b949a..4f34a29986 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Spells/Spells05-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Spells/Spells05-de.txt @@ -44,7 +44,7 @@ Spell/&SonicBoomDescription=Eine kleine Kugel in derselben Farbe wie der verwend Spell/&SonicBoomTitle=Überschallknall Spell/&SteelWhirlwindDescription=Du schwingst die Waffe, die du beim Zaubern benutzt hast, und verschwindest dann, um wie der Wind zuzuschlagen. Wähle bis zu fünf Kreaturen, die du in Reichweite sehen kannst. Führe einen Nahkampfangriff gegen jedes Ziel aus. Bei einem Treffer erleidet das Ziel 6d10 Kraftschaden. Du kannst dich dann zu einem freien Ort teleportieren, den du innerhalb von 5 Fuß von einem der Ziele sehen kannst, die du getroffen oder verfehlt hast. Spell/&SteelWhirlwindTitle=Stahlwindschlag -Spell/&SwiftQuiverDescription=Du wandelst deinen Köcher um, sodass er einen endlosen Vorrat an nicht-magischer Munition produziert, die dir scheinbar in die Hand springt, wenn du danach greifst. In jedem deiner Züge, bis der Zauber endet, kannst du eine Bonusaktion nutzen, um zwei Angriffe mit einer Waffe auszuführen, die Munition aus dem Köcher verwendet. Jedes Mal, wenn du einen solchen Fernangriff ausführst, ersetzt dein Köcher auf magische Weise das von dir verwendete Munitionsstück durch ein ähnliches Stück nicht-magischer Munition. Alle durch diesen Zauber erzeugten Munitionsstücke zerfallen, wenn der Zauber endet. Wenn der Köcher deinen Besitz verlässt, endet der Zauber. +Spell/&SwiftQuiverDescription=Sie verwandeln Ihren Köcher, sodass er einen endlosen Vorrat an nicht-magischer Munition produziert, die Ihnen scheinbar in die Hand springt, wenn Sie danach greifen. In jedem Ihrer Züge, bis der Zauber endet, können Sie eine Bonusaktion nutzen, um zwei Angriffe auszuführen, wenn Sie eine Waffe mit zwei Reichweiten halten. Bei jedem solchen Fernkampfangriff ersetzt Ihr Köcher auf magische Weise das von Ihnen verwendete Munitionsstück durch ein ähnliches Stück nicht-magischer Munition. Spell/&SwiftQuiverTitle=Schneller Köcher Spell/&SynapticStaticDescription=Du wählst einen Punkt innerhalb der Reichweite und lässt dort psychische Energie explodieren. Jede Kreatur in einer Kugel mit einem Radius von 20 Fuß, die auf diesen Punkt zentriert ist, muss einen Intelligenzrettungswurf machen. Ein Ziel erleidet bei einem misslungenen Rettungswurf 8W6 psychischen Schaden oder bei einem erfolgreichen Rettungswurf die Hälfte. Nach einem misslungenen Rettungswurf hat ein Ziel 1 Minute lang verwirrte Gedanken. Während dieser Zeit würfelt es einen W6 und zieht die gewürfelte Zahl von all seinen Angriffswürfen und Fähigkeitswürfen ab. Das Ziel kann am Ende jeder seiner Runden einen Intelligenzrettungswurf machen und bei einem Erfolg den Effekt auf sich selbst beenden. Spell/&SynapticStaticTitle=Synaptische Statik diff --git a/SolastaUnfinishedBusiness/Translations/en/Spells/Spells05-en.txt b/SolastaUnfinishedBusiness/Translations/en/Spells/Spells05-en.txt index 72e97b34ab..5ab0fed2d4 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Spells/Spells05-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Spells/Spells05-en.txt @@ -44,7 +44,7 @@ Spell/&SonicBoomDescription=A small orb the same color as the balloon used appea Spell/&SonicBoomTitle=Sonic Boom Spell/&SteelWhirlwindDescription=You flourish the weapon used in the casting and then vanish to strike like the wind. Choose up to five creatures you can see within range. Make a melee spell attack against each target. On a hit, a target takes 6d10 force damage. You can then teleport to an unoccupied space you can see within 5 feet of one of the targets you hit or missed. Spell/&SteelWhirlwindTitle=Steel Wind Strike -Spell/&SwiftQuiverDescription=You transmute your quiver so it produces an endless supply of non-magical ammunition, which seems to leap into your hand when you reach for it. On each of your turns until the spell ends, you can use a bonus action to make two attacks with a weapon that uses ammunition from the quiver. Each time you make such a ranged attack, your quiver magically replaces the piece of ammunition you used with a similar piece of non-magical ammunition. Any pieces of ammunition created by this spell disintegrate when the spell ends. If the quiver leaves your possession, the spell ends. +Spell/&SwiftQuiverDescription=You transmute your quiver so it produces an endless supply of non-magical ammunition, which seems to leap into your hand when you reach for it. On each of your turns until the spell ends, you can use a bonus action to make two attacks when holding a two ranged weapon. Each time you make such a ranged attack, your quiver magically replaces the piece of ammunition you used with a similar piece of non-magical ammunition. Spell/&SwiftQuiverTitle=Swift Quiver Spell/&SynapticStaticDescription=You choose a point within range and cause psychic energy to explode there. Each creature in a 20-foot-radius sphere centered on that point must make an Intelligence saving throw. A target takes 8d6 psychic damage on a failed save, or half as much damage on a successful After a failed save, a target has muddled thoughts for 1 minute. During that time, it rolls a d6 and subtracts the number rolled from all its attack rolls and ability checks. The target can make an Intelligence saving throw at the end of each of its turns, ending the effect on itself on a success. Spell/&SynapticStaticTitle=Synaptic Static diff --git a/SolastaUnfinishedBusiness/Translations/es/Spells/Spells05-es.txt b/SolastaUnfinishedBusiness/Translations/es/Spells/Spells05-es.txt index 7837970d55..497b52aad6 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Spells/Spells05-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Spells/Spells05-es.txt @@ -44,7 +44,7 @@ Spell/&SonicBoomDescription=Un pequeño orbe del mismo color que el globo utiliz Spell/&SonicBoomTitle=Estampido supersónico Spell/&SteelWhirlwindDescription=Haces florecer el arma que usaste para lanzar el hechizo y luego desapareces para atacar como el viento. Elige hasta cinco criaturas que puedas ver dentro del alcance. Realiza un ataque de hechizo cuerpo a cuerpo contra cada objetivo. Si impactas, el objetivo recibe 6d10 puntos de daño de fuerza. Luego puedes teletransportarte a un espacio desocupado que puedas ver a 5 pies o menos de uno de los objetivos a los que impactaste o fallaste. Spell/&SteelWhirlwindTitle=Golpe de viento de acero -Spell/&SwiftQuiverDescription=Transmutas tu carcaj para que produzca un suministro infinito de munición no mágica, que parece saltar a tu mano cuando intentas cogerla. En cada uno de tus turnos hasta que el hechizo termine, puedes usar una acción adicional para realizar dos ataques con un arma que use munición del carcaj. Cada vez que realices un ataque a distancia, tu carcaj reemplaza mágicamente la pieza de munición que usaste con una pieza similar de munición no mágica. Cualquier pieza de munición creada por este hechizo se desintegra cuando el hechizo termina. Si el carcaj deja tu posesión, el hechizo termina. +Spell/&SwiftQuiverDescription=Transmutas tu carcaj para que produzca un suministro infinito de munición no mágica, que parece saltar a tu mano cuando intentas cogerla. En cada uno de tus turnos hasta que finalice el hechizo, puedes usar una acción adicional para realizar dos ataques cuando sostienes un arma de dos alcances. Cada vez que realizas un ataque a distancia, tu carcaj reemplaza mágicamente la pieza de munición que usaste con una pieza similar de munición no mágica. Spell/&SwiftQuiverTitle=Carcaj veloz Spell/&SynapticStaticDescription=Eliges un punto dentro del alcance y haces que la energía psíquica explote allí. Cada criatura en una esfera de 20 pies de radio centrada en ese punto debe realizar una tirada de salvación de Inteligencia. Un objetivo sufre 8d6 de daño psíquico si falla la salvación, o la mitad de daño si tiene éxito. Después de una salvación fallida, un objetivo tiene pensamientos confusos durante 1 minuto. Durante ese tiempo, tira 1d6 y resta el número obtenido de todas sus tiradas de ataque y comprobaciones de característica. El objetivo puede realizar una tirada de salvación de Inteligencia al final de cada uno de sus turnos, terminando el efecto sobre sí mismo si tiene éxito. Spell/&SynapticStaticTitle=Estática sináptica diff --git a/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells05-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells05-fr.txt index 21c1a2a72c..89314329c4 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells05-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells05-fr.txt @@ -44,7 +44,7 @@ Spell/&SonicBoomDescription=Un petit orbe de la même couleur que le ballon util Spell/&SonicBoomTitle=Détonation supersonique Spell/&SteelWhirlwindDescription=Vous brandissez l'arme utilisée pour l'incantation, puis disparaissez pour frapper comme le vent. Choisissez jusqu'à cinq créatures que vous pouvez voir à portée. Lancez une attaque de sort au corps à corps contre chaque cible. En cas de succès, la cible subit 6d10 dégâts de force. Vous pouvez ensuite vous téléporter dans un espace inoccupé que vous pouvez voir à 1,50 mètre ou moins de l'une des cibles que vous avez touchées ou manquées. Spell/&SteelWhirlwindTitle=Grève du vent en acier -Spell/&SwiftQuiverDescription=Vous transmutez votre carquois de manière à ce qu'il produise une réserve infinie de munitions non magiques, qui semblent bondir dans votre main lorsque vous les attrapez. À chacun de vos tours jusqu'à la fin du sort, vous pouvez utiliser une action bonus pour effectuer deux attaques avec une arme qui utilise des munitions du carquois. Chaque fois que vous effectuez une telle attaque à distance, votre carquois remplace magiquement la munition que vous avez utilisée par une munition non magique similaire. Toutes les munitions créées par ce sort se désintègrent lorsque le sort prend fin. Si le carquois quitte votre possession, le sort prend fin. +Spell/&SwiftQuiverDescription=Vous transmutez votre carquois pour qu'il produise une réserve infinie de munitions non magiques, qui semblent sauter dans votre main lorsque vous les attrapez. À chacun de vos tours jusqu'à la fin du sort, vous pouvez utiliser une action bonus pour effectuer deux attaques lorsque vous tenez une arme à deux portées. Chaque fois que vous effectuez une telle attaque à distance, votre carquois remplace magiquement la munition que vous avez utilisée par une munition non magique similaire. Spell/&SwiftQuiverTitle=Carquois rapide Spell/&SynapticStaticDescription=Vous choisissez un point à portée et faites exploser de l'énergie psychique à cet endroit. Chaque créature dans une sphère de 6 mètres de rayon centrée sur ce point doit effectuer un jet de sauvegarde d'Intelligence. Une cible subit 8d6 dégâts psychiques en cas d'échec, ou la moitié de ces dégâts en cas de réussite. Après un échec, une cible a les pensées embrouillées pendant 1 minute. Pendant ce temps, elle lance un d6 et soustrait le résultat obtenu de tous ses jets d'attaque et de caractéristique. La cible peut effectuer un jet de sauvegarde d'Intelligence à la fin de chacun de ses tours, mettant fin à l'effet sur elle-même en cas de réussite. Spell/&SynapticStaticTitle=Statique synaptique diff --git a/SolastaUnfinishedBusiness/Translations/it/Spells/Spells05-it.txt b/SolastaUnfinishedBusiness/Translations/it/Spells/Spells05-it.txt index fce322679e..67156edef0 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Spells/Spells05-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Spells/Spells05-it.txt @@ -44,7 +44,7 @@ Spell/&SonicBoomDescription=Un piccolo globo dello stesso colore del palloncino Spell/&SonicBoomTitle=Boom sonico Spell/&SteelWhirlwindDescription=Fai roteare l'arma usata nel lancio e poi sparisci per colpire come il vento. Scegli fino a cinque creature che puoi vedere entro il raggio d'azione. Fai un attacco di incantesimo in mischia contro ogni bersaglio. Se va a segno, un bersaglio subisce 6d10 danni da forza. Puoi quindi teletrasportarti in uno spazio non occupato che puoi vedere entro 5 piedi da uno dei bersagli che hai colpito o mancato. Spell/&SteelWhirlwindTitle=Colpo di vento in acciaio -Spell/&SwiftQuiverDescription=Trasmuti la tua faretra in modo che produca una scorta infinita di munizioni non magiche, che sembrano balzarti in mano quando le prendi. In ognuno dei tuoi turni fino alla fine dell'incantesimo, puoi usare un'azione bonus per effettuare due attacchi con un'arma che usa munizioni dalla faretra. Ogni volta che effettui un attacco a distanza del genere, la tua faretra sostituisce magicamente il pezzo di munizione che hai usato con un pezzo simile di munizione non magica. Tutti i pezzi di munizione creati da questo incantesimo si disintegrano quando l'incantesimo termina. Se la faretra non è più in tuo possesso, l'incantesimo termina. +Spell/&SwiftQuiverDescription=Trasmuti la tua faretra in modo che produca una scorta infinita di munizioni non magiche, che sembrano balzare nella tua mano quando le prendi. In ognuno dei tuoi turni fino alla fine dell'incantesimo, puoi usare un'azione bonus per effettuare due attacchi quando tieni in mano un'arma a due distanze. Ogni volta che effettui un attacco a distanza del genere, la tua faretra sostituisce magicamente il pezzo di munizione che hai usato con un pezzo simile di munizione non magica. Spell/&SwiftQuiverTitle=Faretra veloce Spell/&SynapticStaticDescription=Scegli un punto entro il raggio e fai esplodere lì l'energia psichica. Ogni creatura in una sfera di 20 piedi di raggio centrata su quel punto deve effettuare un tiro salvezza su Intelligenza. Un bersaglio subisce 8d6 danni psichici se fallisce il tiro salvezza, o la metà dei danni se riesce. Dopo un tiro salvezza fallito, un bersaglio ha pensieri confusi per 1 minuto. Durante quel periodo, tira un d6 e sottrae il numero ottenuto da tutti i suoi tiri per colpire e prove di abilità. Il bersaglio può effettuare un tiro salvezza su Intelligenza alla fine di ogni suo turno, terminando l'effetto su se stesso in caso di successo. Spell/&SynapticStaticTitle=Sinaptico statico diff --git a/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells05-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells05-ja.txt index f840e481ac..13de11d305 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells05-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells05-ja.txt @@ -44,7 +44,7 @@ Spell/&SonicBoomDescription=使用した風船と同じ色の小さな球体が Spell/&SonicBoomTitle=ソニックブーム Spell/&SteelWhirlwindDescription=あなたは詠唱に使用された武器を輝かせ、そして風のように攻撃するために消えます。範囲内で見える生き物を最大 5 つ選択します。各ターゲットに対して近接呪文攻撃を行います。命中すると、ターゲットは 6d10 のフォースダメージを受けます。その後、ヒットまたはミスしたターゲットの 1 つから 5 フィート以内に見える空いているスペースにテレポートできます。 Spell/&SteelWhirlwindTitle=スチールウィンドストライク -Spell/&SwiftQuiverDescription=矢筒を変形させて、無限に供給される非魔法の弾薬を生成させます。矢筒に手を伸ばすと、弾薬が手の中に飛び込んでくるようです。呪文が終了するまで、各ターンでボーナス アクションを使用して、矢筒の弾薬を使用する武器で 2 回の攻撃を行うことができます。このような遠隔攻撃を行うたびに、矢筒は使用した弾薬を魔法的に同様の非魔法の弾薬に置き換えます。この呪文によって作成された弾薬は、呪文が終了すると分解されます。矢筒があなたの所有から離れると、呪文は終了します。 +Spell/&SwiftQuiverDescription=矢筒を変形して、無限の非魔法の弾薬を生成させます。手に取ると、弾薬が手に飛び込んでくるようです。呪文が終了するまで、各ターンで、2 遠隔武器を持っているときにボーナス アクションを使用して 2 回の攻撃を行うことができます。このような遠隔攻撃を行うたびに、矢筒は使用した弾薬を同様の非魔法の弾薬に魔法的に置き換えます。 Spell/&SwiftQuiverTitle=スウィフトクイヴァー Spell/&SynapticStaticDescription=範囲内の一点を選び、そこでサイキック エネルギーを爆発させます。その点を中心とした半径 20 フィートの球体内のすべてのクリーチャーは、【知力】セーヴィング スローを行わなければなりません。セーヴィング スローに失敗すると、ターゲットは 8d6 のサイキック ダメージを受け、成功すると半分のダメージを受けます。セーヴィング スローに失敗すると、ターゲットは 1 分間思考が混乱します。その間、ターゲットは d6 をロールし、出た目をすべての攻撃ロールと能力値チェックから差し引きます。ターゲットは各ターンの終了時に【知力】セーヴィング スローを行うことができ、成功するとターゲット自身への効果を終了します。 Spell/&SynapticStaticTitle=シナプススタティック diff --git a/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells05-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells05-ko.txt index 3d86b536c8..9b9ed7a1a9 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells05-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells05-ko.txt @@ -44,7 +44,7 @@ Spell/&SonicBoomDescription=사용된 풍선과 같은 색상의 작은 구체 Spell/&SonicBoomTitle=소닉붐 Spell/&SteelWhirlwindDescription=당신은 캐스팅에 사용된 무기를 휘두르며 바람처럼 사라져 버립니다. 범위 내에서 볼 수 있는 생물을 최대 5개까지 선택하세요. 각 대상에 대해 근접 주문 공격을 가합니다. 적중 시 대상은 6d10의 강제 피해를 입습니다. 그런 다음, 맞추거나 놓친 대상 중 하나의 5피트 이내에서 볼 수 있는 비어 있는 공간으로 순간이동할 수 있습니다. Spell/&SteelWhirlwindTitle=스틸 윈드 스트라이크 -Spell/&SwiftQuiverDescription=화살통을 변형시켜 무한한 비마법적 탄약을 생산하는데, 당신이 화살통을 잡으려고 하면 탄약이 당신의 손에 뛰어드는 것처럼 보입니다. 주문이 끝날 때까지 당신의 턴마다 보너스 액션을 사용하여 화살통의 탄약을 사용하는 무기로 두 번 공격할 수 있습니다. 그런 원거리 공격을 할 때마다 화살통은 마법처럼 당신이 사용한 탄약을 비슷한 비마법적 탄약으로 대체합니다. 이 주문으로 생성된 탄약은 주문이 끝나면 분해됩니다. 화살통이 당신의 손에서 벗어나면 주문이 끝납니다. +Spell/&SwiftQuiverDescription=화살통을 변형시켜 무한한 비마법 탄약을 생산하는데, 당신이 그것을 잡으려고 하면 탄약이 당신의 손에 뛰어드는 듯합니다. 주문이 끝날 때까지 당신의 턴마다 보너스 액션을 사용하여 2개의 원거리 무기를 들고 있을 때 2번의 공격을 할 수 있습니다. 그런 원거리 공격을 할 때마다 화살통은 마법처럼 당신이 사용한 탄약을 비슷한 비마법 탄약으로 대체합니다. Spell/&SwiftQuiverTitle=스위프트 퀴버 Spell/&SynapticStaticDescription=범위 내의 한 지점을 선택하면 그곳에서 정신 에너지가 폭발하게 됩니다. 해당 지점을 중심으로 하는 반경 20피트 구체의 각 생물은 지능 내성 굴림을 해야 합니다. 대상은 저장 실패 시 8d6의 정신적 피해를 입거나, 성공 시 피해의 절반을 받습니다. 저장 실패 후 대상은 1분 동안 혼란스러운 생각을 합니다. 그 시간 동안 d6을 굴리고 모든 공격 굴림과 능력 검사에서 굴린 숫자를 뺍니다. 목표는 각 턴이 끝날 때 지능 내성 굴림을 하여 성공 시 자신에 대한 효과를 종료할 수 있습니다. Spell/&SynapticStaticTitle=시냅스 정적 diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells05-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells05-pt-BR.txt index 4b7fab6cea..6d06c95100 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells05-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells05-pt-BR.txt @@ -44,7 +44,7 @@ Spell/&SonicBoomDescription=Um pequeno orbe da mesma cor do balão usado aparece Spell/&SonicBoomTitle=Estrondo Sônico Spell/&SteelWhirlwindDescription=Você floresce a arma usada na conjuração e então desaparece para atacar como o vento. Escolha até cinco criaturas que você possa ver dentro do alcance. Faça um ataque de magia corpo a corpo contra cada alvo. Em um acerto, um alvo recebe 6d10 de dano de força. Você pode então se teletransportar para um espaço desocupado que você possa ver dentro de 5 pés de um dos alvos que você acertou ou errou. Spell/&SteelWhirlwindTitle=Golpe de Vento de Aço -Spell/&SwiftQuiverDescription=Você transmuta sua aljava para que ela produza um suprimento infinito de munição não mágica, que parece saltar para sua mão quando você a alcança. Em cada um dos seus turnos até que a magia termine, você pode usar uma ação bônus para fazer dois ataques com uma arma que use munição da aljava. Cada vez que você faz um ataque à distância, sua aljava magicamente substitui a peça de munição que você usou por uma peça similar de munição não mágica. Quaisquer peças de munição criadas por esta magia se desintegram quando a magia termina. Se a aljava deixar sua posse, a magia termina. +Spell/&SwiftQuiverDescription=Você transmuta sua aljava para que ela produza um suprimento infinito de munição não mágica, que parece saltar para sua mão quando você a alcança. Em cada um dos seus turnos até que a magia termine, você pode usar uma ação bônus para fazer dois ataques ao segurar uma arma de dois alcances. Cada vez que você faz um ataque de alcance, sua aljava magicamente substitui a peça de munição que você usou por uma peça similar de munição não mágica. Spell/&SwiftQuiverTitle=Aljava rápida Spell/&SynapticStaticDescription=Você escolhe um ponto dentro do alcance e faz com que energia psíquica exploda ali. Cada criatura em uma esfera de 20 pés de raio centrada naquele ponto deve fazer um teste de resistência de Inteligência. Um alvo sofre 8d6 de dano psíquico em um teste falho, ou metade do dano em um teste bem-sucedido. Após um teste falho, um alvo tem pensamentos confusos por 1 minuto. Durante esse tempo, ele rola um d6 e subtrai o número rolado de todas as suas jogadas de ataque e testes de habilidade. O alvo pode fazer um teste de resistência de Inteligência no final de cada um de seus turnos, encerrando o efeito sobre si mesmo em um sucesso. Spell/&SynapticStaticTitle=Estática sináptica diff --git a/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells05-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells05-ru.txt index 3c1cb77b29..da16fa0b63 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells05-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells05-ru.txt @@ -44,7 +44,7 @@ Spell/&SonicBoomDescription=Небольшой шар появляется в в Spell/&SonicBoomTitle=Звуковой удар Spell/&SteelWhirlwindDescription=Вы взмахиваете оружием, используемым для заклинания, а затем исчезаете, чтобы ударить, подобно ветру. Выберите до пяти существ в пределах дистанции, которых вы можете видеть. Совершите рукопашную атаку заклинанием по каждой цели. При попадании цель получает 6d10 урона силовым полем. После этого вы можете телепортироваться в свободное пространство, которое вы можете видеть в пределах 5 футов от одной из целей, которую вы атаковали, независимо от того, попали вы по ней или нет. Spell/&SteelWhirlwindTitle=Удар стального ветра -Spell/&SwiftQuiverDescription=Вы трансмутируете свой колчан, чтобы он производил бесконечный запас немагических боеприпасов, которые, кажется, прыгают в вашу руку, когда вы тянетесь к ним. На каждом из ваших ходов, пока заклинание не закончится, вы можете использовать бонусное действие, чтобы совершить две атаки оружием, которое использует боеприпасы из колчана. Каждый раз, когда вы совершаете такую ​​дальнюю атаку, ваш колчан магическим образом заменяет часть боеприпасов, которые вы использовали, на аналогичную часть немагических боеприпасов. Любые части боеприпасов, созданные этим заклинанием, распадаются, когда заклинание заканчивается. Если колчан покидает ваше владение, заклинание заканчивается. +Spell/&SwiftQuiverDescription=Вы трансмутируете свой колчан, так что он производит бесконечный запас немагических боеприпасов, которые, кажется, прыгают в вашу руку, когда вы тянетесь к ним. На каждом из ваших ходов, пока заклинание не закончится, вы можете использовать бонусное действие, чтобы совершить две атаки, держа в руках оружие дальнего боя. Каждый раз, когда вы совершаете такую ​​атаку дальнего боя, ваш колчан магическим образом заменяет использованный вами боеприпас на аналогичный немагический боеприпас. Spell/&SwiftQuiverTitle=Быстрый Колчан Spell/&SynapticStaticDescription=Вы выбираете точку в пределах дистанции и вызываете в ней взрыв психической энергии. Каждое существо в сфере с радиусом 20 футов с центром в этой точке должно совершить спасбросок Интеллекта. Цель получает 8d6 урона психической энергией при провале или половину этого урона при успехе. После неудачного спасброска цель начинает путаться в мыслях на протяжении 1 минуты. В течение этого времени она бросает d6 и вычитает получившееся число из всех её бросков атаки и проверок характеристики. В конце каждого своего хода цель может совершать спасбросок Интеллекта, оканчивая эффект на себе при успехе. Spell/&SynapticStaticTitle=Синаптический разряд diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells05-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells05-zh-CN.txt index 797d779cce..37d31d19d4 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells05-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells05-zh-CN.txt @@ -44,7 +44,7 @@ Spell/&SonicBoomDescription=一个与气球颜色相近的小球体出现在你 Spell/&SonicBoomTitle=鸣音爆 Spell/&SteelWhirlwindDescription=你挥动施法时使用的武器,然后消失,像风一样攻击。选择范围内最多五个你可以看到的生物。对每个目标进行近战法术攻击。命中后,目标会受到 6d10 点力场伤害。然后,你可以传送到一个未被占据的、你可以看到的、你命中或失手目标之一的 5 尺内的一处空间。 Spell/&SteelWhirlwindTitle=钢风斩 -Spell/&SwiftQuiverDescription=你使箭筒变形,使其产生无限量的非魔法弹药,当你伸手去拿时,这些弹药似乎会跳到你的手中。在法术结束之前的每个回合,你可以使用奖励动作使用使用箭筒中弹药的武器进行两次攻击。每次你进行这样的远程攻击时,你的箭筒都会神奇地用一块类似的非魔法弹药替换你使用的弹药。此法术产生的任何弹药都会在法术结束时瓦解。如果箭筒离开你的控制,法术就会结束。 +Spell/&SwiftQuiverDescription=你对箭筒进行改造,使其产生无限量的非魔法弹药,当你伸手去拿时,这些弹药似乎会跳到你的手中。在咒语结束之前的每个回合中,当你手持两把远程武器时,你可以使用奖励动作进行两次攻击。每次你进行这样的远程攻击时,你的箭筒都会神奇地用一块类似的非魔法弹药替换你使用的弹药。 Spell/&SwiftQuiverTitle=迅捷箭筒 Spell/&SynapticStaticDescription=你选择范围内的一点,并让灵能在那里爆炸。以该点为中心半径 20 英尺范围内的每个生物都必须进行智力豁免检定。如果豁免失败,目标将受到 8d6 灵能伤害,如果豁免成功,则伤害减半。豁免失败后,目标将陷入混乱,持续 1 分钟。在此期间,目标将掷出一个 d6 并从其所有攻击掷骰和能力检定中减去掷出的数字。目标可以在其每个回合结束时进行智力豁免检定,如果豁免成功,则结束对其自身的效果。 Spell/&SynapticStaticTitle=突触静态 From 53ab43fbb756bc224e228b0bbed3d6182790c669 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Mon, 9 Sep 2024 19:50:54 -0700 Subject: [PATCH 098/212] revert Encounters default package to IdleGuard_Default to avoid surprise turn start --- SolastaUnfinishedBusiness/Models/EncounterSpawnContext.cs | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/SolastaUnfinishedBusiness/Models/EncounterSpawnContext.cs b/SolastaUnfinishedBusiness/Models/EncounterSpawnContext.cs index 6a04093fe1..7b4bfafe8a 100644 --- a/SolastaUnfinishedBusiness/Models/EncounterSpawnContext.cs +++ b/SolastaUnfinishedBusiness/Models/EncounterSpawnContext.cs @@ -165,11 +165,8 @@ private static void StageEncounter(int3 position) new GameLocationBehaviourPackage { BattleStartBehavior = - GameLocationBehaviourPackage.BattleStartBehaviorType.RaisesAlarm, - DecisionPackageDefinition = - character is RulesetCharacterMonster monster - ? monster.MonsterDefinition.DefaultBattleDecisionPackage - : IdleGuard_Default, + GameLocationBehaviourPackage.BattleStartBehaviorType.DoNotRaiseAlarm, + DecisionPackageDefinition = IdleGuard_Default, EncounterId = EncounterId++, FormationDefinition = DatabaseHelper.FormationDefinitions.Column2 }))) From 6172dbdb1212150e5222425e396083a444f62762 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Mon, 9 Sep 2024 20:45:20 -0700 Subject: [PATCH 099/212] fix Power Attack feat not triggering on unarmed attacks - fix #4921 --- SolastaUnfinishedBusiness/ChangelogHistory.txt | 15 ++++++++------- .../Feats/MeleeCombatFeats.cs | 15 +++++---------- 2 files changed, 13 insertions(+), 17 deletions(-) diff --git a/SolastaUnfinishedBusiness/ChangelogHistory.txt b/SolastaUnfinishedBusiness/ChangelogHistory.txt index eaea44d203..c33291cad8 100644 --- a/SolastaUnfinishedBusiness/ChangelogHistory.txt +++ b/SolastaUnfinishedBusiness/ChangelogHistory.txt @@ -2,22 +2,23 @@ - added Command, Dissonant Whispers, Holy Weapon, and Swift Quiver spells - added Interface > Game UI > 'Enable CTRL click-drag to bypass quest items checks on drop' setting -- fixed Barbarian Sundering Blow interaction with Call Lightning, and other proxy like powers -- fixed Bardic Inspiration, Indomitable Resistances, and Legendary Resistances saving throw logic -- fixed Bend Luck, Flash of Genius, Inspiring Protection, Shield Master, and Weal/Woe not consuming reaction +- fixed Barbarian Sundering Blow interaction with Call Lightning, and other attack proxies +- fixed Bardic Inspiration, Indomitable Resistances, and Legendary Resistances save logic +- fixed Bend Luck, Flash of Genius, Inspiring Protection, Shield Master, and Weal/Woe reaction consumption - fixed Dwarven Fortitude, and Magical Guidance incorrectly consuming a reaction - fixed Exploiter feat not checking for reactions from 2nd target onwards - fixed Lucky, and Mage Slayer feats double consumption - fixed Martial Commander coordinated defense to require an attack first [VANILLA] - fixed Party Editor to register/unregister powers from feats -- fixed Path of the Wild Magic retribution, and Patron Archfey misty step to only react against enemy effects -- fixed Wrathful Smite to do a wisdom ability check against caster DC instead of a save on turn start +- fixed Path of the Wild Magic retribution, and Patron Archfey misty step to only react against enemies +- fixed Power Attack feat not triggering on unarmed attacks +- fixed Quickened interaction with melee attack cantrips +- fixed Wrathful Smite to do a wisdom ability check against caster DC - improved ability checks to also allow reactions on success [Circle of the Cosmos woe] -- improved Conversion Slots, and Shorthand versatilities to react on ability checks +- improved Sorcerer Wild Magic tides of chaos, Conversion Slots, and Shorthand versatilities to react on ability checks - improved Maneuvering Attack, and Martial Warlord strategic repositioning to use a run stance - improved mod UI to ensure all settings required to be in sync on MP sessions are now under Gameplay - improved saving roll reaction modal descriptions [Circle of the Cosmos, Sorcerer Wild Magic, etc.] -- improved Sorcerer Wild Magic tides of chaos to react on ability checks - improved spells documentation dump to include allowed casting classes - improved vanilla to allow reactions on gadget's saving roll [traps] - improved victory modal export behavior to allow heroes not in pool to be exported [VANILLA] diff --git a/SolastaUnfinishedBusiness/Feats/MeleeCombatFeats.cs b/SolastaUnfinishedBusiness/Feats/MeleeCombatFeats.cs index 5fd75fed42..067f370661 100644 --- a/SolastaUnfinishedBusiness/Feats/MeleeCombatFeats.cs +++ b/SolastaUnfinishedBusiness/Feats/MeleeCombatFeats.cs @@ -1705,13 +1705,8 @@ private sealed class ModifyWeaponAttackModeFeatPowerAttack(FeatDefinition featDe public void ModifyAttackMode(RulesetCharacter character, RulesetAttackMode attackMode) { - if (attackMode?.SourceObject is not RulesetItem rulesetItem) - { - return; - } - // don't use IsMelee(attackMode) in IModifyWeaponAttackMode as it will always fail - if (!ValidatorsWeapon.IsMelee(rulesetItem) && + if (!ValidatorsWeapon.IsMelee(attackMode.SourceObject as RulesetItem) && !ValidatorsWeapon.IsUnarmed(attackMode)) { return; @@ -1721,8 +1716,8 @@ public void ModifyAttackMode(RulesetCharacter character, RulesetAttackMode attac var toDamage = ToHit + proficiency; attackMode.ToHitBonus -= ToHit; - attackMode.ToHitBonusTrends.Add(new TrendInfo(-ToHit, FeatureSourceType.Feat, featDefinition.Name, - featDefinition)); + attackMode.ToHitBonusTrends.Add( + new TrendInfo(-ToHit, FeatureSourceType.Feat, featDefinition.Name, featDefinition)); var damage = attackMode.EffectDescription?.FindFirstDamageForm(); @@ -1732,8 +1727,8 @@ public void ModifyAttackMode(RulesetCharacter character, RulesetAttackMode attac } damage.BonusDamage += toDamage; - damage.DamageBonusTrends.Add(new TrendInfo(toDamage, FeatureSourceType.Feat, featDefinition.Name, - featDefinition)); + damage.DamageBonusTrends.Add( + new TrendInfo(toDamage, FeatureSourceType.Feat, featDefinition.Name, featDefinition)); } } From 858254a9938e7e4cf205777dda6819615402a821 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Tue, 10 Sep 2024 10:33:17 -0700 Subject: [PATCH 100/212] update smite spells and swift quiver translations --- .../Translations/de/Spells/Spells01-de.txt | 2 +- .../Translations/de/Spells/Spells03-de.txt | 2 +- .../Translations/de/Spells/Spells04-de.txt | 2 +- .../Translations/de/Spells/Spells05-de.txt | 2 +- .../Translations/en/Spells/Spells01-en.txt | 4 ++-- .../Translations/en/Spells/Spells03-en.txt | 2 +- .../Translations/en/Spells/Spells04-en.txt | 2 +- .../Translations/en/Spells/Spells05-en.txt | 2 +- .../Translations/es/Spells/Spells01-es.txt | 2 +- .../Translations/es/Spells/Spells03-es.txt | 2 +- .../Translations/es/Spells/Spells04-es.txt | 2 +- .../Translations/es/Spells/Spells05-es.txt | 2 +- .../Translations/fr/Spells/Spells01-fr.txt | 2 +- .../Translations/fr/Spells/Spells03-fr.txt | 2 +- .../Translations/fr/Spells/Spells04-fr.txt | 2 +- .../Translations/fr/Spells/Spells05-fr.txt | 2 +- .../Translations/it/Spells/Spells01-it.txt | 2 +- .../Translations/it/Spells/Spells03-it.txt | 2 +- .../Translations/it/Spells/Spells04-it.txt | 2 +- .../Translations/it/Spells/Spells05-it.txt | 2 +- .../Translations/ja/Spells/Spells01-ja.txt | 2 +- .../Translations/ja/Spells/Spells03-ja.txt | 2 +- .../Translations/ja/Spells/Spells04-ja.txt | 2 +- .../Translations/ja/Spells/Spells05-ja.txt | 2 +- .../Translations/ko/Spells/Spells01-ko.txt | 2 +- .../Translations/ko/Spells/Spells03-ko.txt | 2 +- .../Translations/ko/Spells/Spells04-ko.txt | 2 +- .../Translations/ko/Spells/Spells05-ko.txt | 2 +- .../Translations/pt-BR/Spells/Spells01-pt-BR.txt | 2 +- .../Translations/pt-BR/Spells/Spells03-pt-BR.txt | 2 +- .../Translations/pt-BR/Spells/Spells04-pt-BR.txt | 2 +- .../Translations/pt-BR/Spells/Spells05-pt-BR.txt | 2 +- .../Translations/ru/Spells/Spells01-ru.txt | 2 +- .../Translations/ru/Spells/Spells03-ru.txt | 2 +- .../Translations/ru/Spells/Spells04-ru.txt | 2 +- .../Translations/ru/Spells/Spells05-ru.txt | 2 +- .../Translations/zh-CN/Spells/Spells01-zh-CN.txt | 2 +- .../Translations/zh-CN/Spells/Spells03-zh-CN.txt | 2 +- .../Translations/zh-CN/Spells/Spells04-zh-CN.txt | 2 +- .../Translations/zh-CN/Spells/Spells05-zh-CN.txt | 2 +- 40 files changed, 41 insertions(+), 41 deletions(-) diff --git a/SolastaUnfinishedBusiness/Translations/de/Spells/Spells01-de.txt b/SolastaUnfinishedBusiness/Translations/de/Spells/Spells01-de.txt index 925d73c84c..16ead399c5 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Spells/Spells01-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Spells/Spells01-de.txt @@ -123,7 +123,7 @@ Spell/&VoidGraspDescription=Du beschwörst die Macht bösartiger Kräfte. Ranken Spell/&VoidGraspTitle=Waffen von Hadar Spell/&WitchBoltDescription=Ein Strahl knisternder, blauer Energie schießt auf eine Kreatur in Reichweite zu und bildet einen anhaltenden Blitzbogen zwischen Ihnen und dem Ziel. Führen Sie einen Fernangriff auf diese Kreatur aus. Bei einem Treffer erleidet das Ziel 1W12 Blitzschaden und Sie können während der Dauer in jedem Ihrer Züge Ihre Aktion verwenden, um dem Ziel automatisch 1W12 Blitzschaden zuzufügen. Der Zauber endet, wenn Sie Ihre Aktion für etwas anderes verwenden. Der Zauber endet auch, wenn sich das Ziel jemals außerhalb der Reichweite des Zaubers befindet. Wenn Sie diesen Zauber mit einem Zauberplatz der 2. Stufe oder höher wirken, erhöht sich der Schaden um 1W12 für jede Platzstufe über der 1. Spell/&WitchBoltTitle=Hexenbolzen -Spell/&WrathfulSmiteDescription=Dein nächster Treffer verursacht zusätzlich 1W6 psychischen Schaden. Wenn das Ziel den Rettungswurf für Weisheit nicht schafft, explodiert sein Verstand vor Schmerz und es bekommt Angst. +Spell/&WrathfulSmiteDescription=Wenn du während der Dauer dieses Zaubers das nächste Mal mit einem Nahkampfangriff triffst, verursacht dein Angriff zusätzlich 1W6 psychischen Schaden. Wenn das Ziel eine Kreatur ist, muss sie außerdem einen Weisheitsrettungswurf machen oder hat Angst vor dir, bis der Zauber endet. Als Aktion kann die Kreatur einen Weisheitswurf gegen deinen Zauberrettungs-SG machen, um ihre Entschlossenheit zu stärken und diesen Zauber zu beenden. Spell/&WrathfulSmiteTitle=Zorniger Schlag Tooltip/&MustBeWitchBolt=Muss mit Hexenbolzen markiert sein Tooltip/&MustNotHaveChaosBoltMark=Darf in dieser Runde nicht durch Chaos Bolt beschädigt worden sein. diff --git a/SolastaUnfinishedBusiness/Translations/de/Spells/Spells03-de.txt b/SolastaUnfinishedBusiness/Translations/de/Spells/Spells03-de.txt index c8afc618cd..d4cbb4661b 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Spells/Spells03-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Spells/Spells03-de.txt @@ -38,7 +38,7 @@ Spell/&AshardalonStrideDescription=Die lodernden Flammen eines Drachen schießen Spell/&AshardalonStrideTitle=Ashardalons Schritt Spell/&AuraOfLifeDescription=Heilende Energie strahlt von dir in einer Aura mit einem Radius von 30 Fuß aus. Bis der Zauber endet, bewegt sich die Aura mit dir, zentriert auf dich. Du kannst eine Bonusaktion nutzen, um einer Kreatur in der Aura (einschließlich dir) 2W6 Trefferpunkte zurückzugeben. Spell/&AuraOfLifeTitle=Aura der Vitalität -Spell/&BlindingSmiteDescription=Bei deinem nächsten Treffer flammt deine Waffe hell auf und der Angriff fügt dem Ziel zusätzliche 3W8 Strahlungsschaden zu. Außerdem muss das Ziel einen Konstitutionsrettungswurf bestehen oder ist geblendet, bis der Zauber endet.\nEine durch diesen Zauber geblendete Kreatur macht am Ende jedes ihrer Züge einen weiteren Konstitutionsrettungswurf. Bei einem erfolgreichen Rettungswurf ist sie nicht länger geblendet. +Spell/&BlindingSmiteDescription=Wenn du während der Dauer dieses Zaubers das nächste Mal eine Kreatur mit einem Nahkampfangriff triffst, flammt deine Waffe mit einem hellen Licht auf und der Angriff verursacht beim Ziel zusätzliche 3W8 Strahlungsschaden. Außerdem muss das Ziel einen Konstitutionsrettungswurf bestehen oder ist geblendet, bis der Zauber endet. Eine Kreatur, die durch diesen Zauber geblendet wurde, macht am Ende jedes ihrer Züge einen weiteren Konstitutionsrettungswurf. Bei einem erfolgreichen Rettungswurf ist sie nicht länger geblendet. Spell/&BlindingSmiteTitle=Blendender Schlag Spell/&BoomingStepDescription=Du teleportierst dich an einen freien Platz, den du in Reichweite sehen kannst. Unmittelbar nachdem du verschwunden bist, ertönt ein donnernder Knall und jede Kreatur im Umkreis von 10 Fuß des von dir verlassenen Platzes muss einen Konstitutionsrettungswurf machen und erleidet bei einem misslungenen Rettungswurf 3W10 Donnerschaden oder bei einem erfolgreichen halb so viel Schaden. Du kannst auch einen willigen Verbündeten teleportieren. Wenn du diesen Zauber mit einem Zauberplatz der 4. Stufe oder höher wirkst, erhöht sich der Schaden um 1W10 für jeden Platzlevel über der 3. Spell/&BoomingStepTitle=Donnerschritt diff --git a/SolastaUnfinishedBusiness/Translations/de/Spells/Spells04-de.txt b/SolastaUnfinishedBusiness/Translations/de/Spells/Spells04-de.txt index 7d05f4f93b..a3609128a5 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Spells/Spells04-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Spells/Spells04-de.txt @@ -65,7 +65,7 @@ Spell/&PsychicLanceDescription=Du entfesselst eine schimmernde Lanze psychischer Spell/&PsychicLanceTitle=Raulothims psychische Lanze Spell/&SickeningRadianceDescription=Schwaches Licht breitet sich in einer Kugel mit einem Radius von 30 Fuß aus, deren Mittelpunkt ein von dir gewählter Punkt innerhalb der Reichweite ist. Das Licht breitet sich um Ecken aus und hält an, bis der Zauber endet. Wenn sich eine Kreatur während einer Runde zum ersten Mal in den Bereich des Zaubers bewegt oder ihre Runde dort beginnt, muss diese Kreatur einen Konstitutionsrettungswurf bestehen oder 4W10 Strahlungsschaden erleiden, erleidet eine Stufe Erschöpfung und strahlt ein schwaches Licht in einem Radius von 5 Fuß aus. Dieses Licht macht es der Kreatur unmöglich, von ihrer Unsichtbarkeit zu profitieren. Das Licht und alle Stufen der Erschöpfung, die durch diesen Zauber verursacht wurden, verschwinden, wenn der Zauber endet. Spell/&SickeningRadianceTitle=Krankmachende Ausstrahlung -Spell/&StaggeringSmiteDescription=Wenn du während der Dauer dieses Zaubers das nächste Mal eine Kreatur mit einem Waffenangriff triffst, durchdringt deine Waffe Körper und Geist und der Angriff fügt dem Ziel zusätzlich 4W6 psychischen Schaden zu. Das Ziel muss einen Weisheitsrettungswurf machen. Bei einem misslungenen Rettungswurf hat es Nachteile bei Angriffswürfen und Fähigkeitswürfen und kann bis zum Ende seines nächsten Zuges keine Reaktionen ausführen. +Spell/&StaggeringSmiteDescription=Wenn du während der Dauer dieses Zaubers das nächste Mal eine Kreatur mit einem Nahkampfangriff triffst, durchdringt deine Waffe Körper und Geist und der Angriff fügt dem Ziel zusätzlich 4W6 psychischen Schaden zu. Das Ziel muss einen Weisheitsrettungswurf machen. Bei einem misslungenen Rettungswurf hat es Nachteile bei Angriffswürfen und Fähigkeitswürfen und kann bis zum Ende seines nächsten Zuges keine Reaktionen ausführen. Spell/&StaggeringSmiteTitle=Atemberaubender Schlag Spell/&TreeForestGuardianDescription=Ihre Haut erscheint rindenartig, Blätter sprießen aus Ihrem Haar und Sie erhalten die folgenden Vorteile:\n• Sie erhalten 10 temporäre Trefferpunkte.\n• Sie machen Konstitutionsrettungswürfe mit Vorteil.\n• Sie machen Geschicklichkeits- und Weisheitsbasierte Angriffswürfe mit Vorteil.\n• Kreaturen im Umkreis von 30 Fuß um Sie müssen einen Stärkerettungswurf machen oder werden für die Dauer des Zaubers behindert. Sie können den Rettungswurf zu Beginn jeder Runde wiederholen. Spell/&TreeForestGuardianTitle=Wilder Baum diff --git a/SolastaUnfinishedBusiness/Translations/de/Spells/Spells05-de.txt b/SolastaUnfinishedBusiness/Translations/de/Spells/Spells05-de.txt index 4f34a29986..bb954a3a12 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Spells/Spells05-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Spells/Spells05-de.txt @@ -44,7 +44,7 @@ Spell/&SonicBoomDescription=Eine kleine Kugel in derselben Farbe wie der verwend Spell/&SonicBoomTitle=Überschallknall Spell/&SteelWhirlwindDescription=Du schwingst die Waffe, die du beim Zaubern benutzt hast, und verschwindest dann, um wie der Wind zuzuschlagen. Wähle bis zu fünf Kreaturen, die du in Reichweite sehen kannst. Führe einen Nahkampfangriff gegen jedes Ziel aus. Bei einem Treffer erleidet das Ziel 6d10 Kraftschaden. Du kannst dich dann zu einem freien Ort teleportieren, den du innerhalb von 5 Fuß von einem der Ziele sehen kannst, die du getroffen oder verfehlt hast. Spell/&SteelWhirlwindTitle=Stahlwindschlag -Spell/&SwiftQuiverDescription=Sie verwandeln Ihren Köcher, sodass er einen endlosen Vorrat an nicht-magischer Munition produziert, die Ihnen scheinbar in die Hand springt, wenn Sie danach greifen. In jedem Ihrer Züge, bis der Zauber endet, können Sie eine Bonusaktion nutzen, um zwei Angriffe auszuführen, wenn Sie eine Waffe mit zwei Reichweiten halten. Bei jedem solchen Fernkampfangriff ersetzt Ihr Köcher auf magische Weise das von Ihnen verwendete Munitionsstück durch ein ähnliches Stück nicht-magischer Munition. +Spell/&SwiftQuiverDescription=Du wandelst deinen Köcher um, sodass die Munition automatisch in deine Hand springt, wenn du danach greifst. In jedem deiner Züge, bis der Zauber endet, kannst du eine Bonusaktion nutzen, um zwei Angriffe mit einer Fernkampfwaffe auszuführen. Spell/&SwiftQuiverTitle=Schneller Köcher Spell/&SynapticStaticDescription=Du wählst einen Punkt innerhalb der Reichweite und lässt dort psychische Energie explodieren. Jede Kreatur in einer Kugel mit einem Radius von 20 Fuß, die auf diesen Punkt zentriert ist, muss einen Intelligenzrettungswurf machen. Ein Ziel erleidet bei einem misslungenen Rettungswurf 8W6 psychischen Schaden oder bei einem erfolgreichen Rettungswurf die Hälfte. Nach einem misslungenen Rettungswurf hat ein Ziel 1 Minute lang verwirrte Gedanken. Während dieser Zeit würfelt es einen W6 und zieht die gewürfelte Zahl von all seinen Angriffswürfen und Fähigkeitswürfen ab. Das Ziel kann am Ende jeder seiner Runden einen Intelligenzrettungswurf machen und bei einem Erfolg den Effekt auf sich selbst beenden. Spell/&SynapticStaticTitle=Synaptische Statik diff --git a/SolastaUnfinishedBusiness/Translations/en/Spells/Spells01-en.txt b/SolastaUnfinishedBusiness/Translations/en/Spells/Spells01-en.txt index 648052d0ac..b2a9a6d8af 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Spells/Spells01-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Spells/Spells01-en.txt @@ -105,7 +105,7 @@ Spell/&MuleTitle=Mule Spell/&RadiantMotesDescription=Unleashes a swarm of 4 radiant projectiles that deal 1d4 radiant damage each.\nWhen you cast this spell using a spell slot of 2nd level or higher, the spell creates 1 more projectile for each slot above 1st. Spell/&RadiantMotesTitle=Radiant Motes Spell/&SanctuaryDescription=You ward a creature within range against attack. Until the spell ends, any creature who targets the warded creature with an attack or a harmful spell must first make a Wisdom saving throw. On a failed save, the creature loses the attack or spell. This spell doesn't protect the warded creature from area effects. If the warded creature makes an attack or casts a spell, this spell ends. -Spell/&SearingSmiteDescription=On your next hit your weapon flares with white-hot intensity, and the attack deals an extra 1d6 fire damage to the target and causes the target to ignite in flames.\nAt the start of each of its turns the target must make a successful Constitution saving throw to stop burning, or take 1d6 fire damage.\nHigher Levels: for each slot level above 1st, the initial extra damage dealt by the attack increases by 1d6. +Spell/&SearingSmiteDescription=The next time you hit a creature with a melee weapon attack during the spell's duration, your weapon flares with white-hot intensity, and the attack deals an extra 1d6 fire damage to the target and causes the target to ignite in flames. At the start of each of its turns until the spell ends, the target must make a Constitution saving throw. On a failed save, it takes 1d6 fire damage. On a successful save, the spells ends. If the target or a creature within 5 feet of it uses an action to put out the flames, or if some other effect douses the flames (such as the target being submerged in water), the spell ends. When you cast this spell using a spell slot of 2nd level or higher, the extra damage increases by 1d6 for each slot level above 1st. Spell/&SearingSmiteTitle=Searing Smite Spell/&SkinOfRetributionDescription=A protective elemental skin envelops you, covering you and your gear. You gain 5 temporary hit points per spell level for the duration. In addition, if a creature hits you with a melee attack while you have these temporary hit points, the creature takes 5 cold damage per spell level. Spell/&SkinOfRetributionTitle=Armor of Agathys @@ -123,7 +123,7 @@ Spell/&VoidGraspDescription=You invoke the power of malevolent forces. Tendrils Spell/&VoidGraspTitle=Arms of Hadar Spell/&WitchBoltDescription=A beam of crackling, blue energy lances out toward a creature within range, forming a sustained arc of lightning between you and the target. Make a ranged spell attack against that creature. On a hit, the target takes 1d12 lightning damage, and on each of your turns for the duration, you can use your action to deal 1d12 lightning damage to the target automatically. The spell ends if you use your action to do anything else. The spell also ends if the target is ever outside the spell's range. When you cast this spell using a spell slot of 2nd level or higher, the damage increases by 1d12 for each slot level above 1st. Spell/&WitchBoltTitle=Witch Bolt -Spell/&WrathfulSmiteDescription=Your next hit deals additional 1d6 psychic damage. If target fails WIS saving throw its mind explodes in pain, and it becomes frightened. +Spell/&WrathfulSmiteDescription=The next time you hit with a melee weapon attack during this spell's duration, your attack deals an extra 1d6 psychic damage. Additionally, if the target is a creature, it must make a Wisdom saving throw or be frightened of you until the spell ends. As an action, the creature can make a Wisdom check against your spell save DC to steel its resolve and end this spell. Spell/&WrathfulSmiteTitle=Wrathful Smite Tooltip/&MustBeWitchBolt=Must be marked by Witch Bolt Tooltip/&MustNotHaveChaosBoltMark=Must not have been damaged by Chaos Bolt this turn. diff --git a/SolastaUnfinishedBusiness/Translations/en/Spells/Spells03-en.txt b/SolastaUnfinishedBusiness/Translations/en/Spells/Spells03-en.txt index 1d2e259477..5add803f9a 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Spells/Spells03-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Spells/Spells03-en.txt @@ -38,7 +38,7 @@ Spell/&AshardalonStrideDescription=The billowing flames of a dragon blast from y Spell/&AshardalonStrideTitle=Ashardalon's Stride Spell/&AuraOfLifeDescription=Healing energy radiates from you in an aura with a 30-foot radius. Until the spell ends, the aura moves with you, centered on you. You can use a bonus action to cause one creature in the aura (including you) to regain 2d6 hit points. Spell/&AuraOfLifeTitle=Aura of Vitality -Spell/&BlindingSmiteDescription=On your next hit your weapon flares with a bright light, and the attack deals an extra 3d8 radiant damage to the target. Additionally, the target must succeed on a Constitution saving throw or be blinded until the spell ends.\nA creature blinded by this spell makes another Constitution saving throw at the end of each of its turns. On a successful save, it is no longer blinded. +Spell/&BlindingSmiteDescription=The next time you hit a creature with a melee weapon attack during this spell's duration, you weapon flares with a bright light, and the attack deals an extra 3d8 radiant damage to the target. Additionally, the target must succeed on a Constitution saving throw or be blinded until the spell ends. A creature blinded by this spell makes another Constitution saving throw at the end of each of its turns. On a successful save, it is no longer blinded. Spell/&BlindingSmiteTitle=Blinding Smite Spell/&BoomingStepDescription=You teleport yourself to an unoccupied space you can see within range. Immediately after you disappear, a thunderous boom sounds, and each creature within 10 feet of the space you left must make a Constitution saving throw, taking 3d10 thunder damage on a failed save, or half as much damage on a successful one. You can also teleport one willing ally. When you cast this spell using a spell slot of 4th level or higher, the damage increases by 1d10 for each slot level above 3rd. Spell/&BoomingStepTitle=Thunder Step diff --git a/SolastaUnfinishedBusiness/Translations/en/Spells/Spells04-en.txt b/SolastaUnfinishedBusiness/Translations/en/Spells/Spells04-en.txt index 9b6abfbba7..bf9b6f7a9a 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Spells/Spells04-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Spells/Spells04-en.txt @@ -65,7 +65,7 @@ Spell/&PsychicLanceDescription=You unleash a shimmering lance of psychic power f Spell/&PsychicLanceTitle=Raulothim's Psychic Lance Spell/&SickeningRadianceDescription=Dim light spreads within a 30-foot-radius sphere centered on a point you choose within range. The light spreads around corners, and it lasts until the spell ends. When a creature moves into the spell's area for the first time on a turn or starts its turn there, that creature must succeed on a Constitution saving throw or take 4d10 radiant damage, and it suffers one level of exhaustion and emits a dim light in a 5-foot radius. This light makes it impossible for the creature to benefit from being invisible. The light and any levels of exhaustion caused by this spell go away when the spell ends. Spell/&SickeningRadianceTitle=Sickening Radiance -Spell/&StaggeringSmiteDescription=The next time you hit a creature with a weapon attack during this spell's duration, your weapon pierces both body and mind, and the attack deals an extra 4d6 psychic damage to the target. The target must make a Wisdom saving throw. On a failed save, it has disadvantage on attack rolls and ability checks, and can't take reactions, until the end of its next turn. +Spell/&StaggeringSmiteDescription=The next time you hit a creature with a melee weapon attack during this spell's duration, your weapon pierces both body and mind, and the attack deals an extra 4d6 psychic damage to the target. The target must make a Wisdom saving throw. On a failed save, it has disadvantage on attack rolls and ability checks, and can't take reactions, until the end of its next turn. Spell/&StaggeringSmiteTitle=Staggering Smite Spell/&TreeForestGuardianDescription=Your skin appears barky, leaves sprout from your hair, and you gain the following benefits:\n• You gain 10 temporary hit points.\n• You make Constitution saving throws with advantage.\n• You make Dexterity and Wisdom-based attack rolls with advantage.\n• Creatures within 30 feet of you must make a Strength saving throw or be hindered for the spell duration. They can retry the save every turn start. Spell/&TreeForestGuardianTitle=Wild Tree diff --git a/SolastaUnfinishedBusiness/Translations/en/Spells/Spells05-en.txt b/SolastaUnfinishedBusiness/Translations/en/Spells/Spells05-en.txt index 5ab0fed2d4..82badc5647 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Spells/Spells05-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Spells/Spells05-en.txt @@ -44,7 +44,7 @@ Spell/&SonicBoomDescription=A small orb the same color as the balloon used appea Spell/&SonicBoomTitle=Sonic Boom Spell/&SteelWhirlwindDescription=You flourish the weapon used in the casting and then vanish to strike like the wind. Choose up to five creatures you can see within range. Make a melee spell attack against each target. On a hit, a target takes 6d10 force damage. You can then teleport to an unoccupied space you can see within 5 feet of one of the targets you hit or missed. Spell/&SteelWhirlwindTitle=Steel Wind Strike -Spell/&SwiftQuiverDescription=You transmute your quiver so it produces an endless supply of non-magical ammunition, which seems to leap into your hand when you reach for it. On each of your turns until the spell ends, you can use a bonus action to make two attacks when holding a two ranged weapon. Each time you make such a ranged attack, your quiver magically replaces the piece of ammunition you used with a similar piece of non-magical ammunition. +Spell/&SwiftQuiverDescription=You transmute your quiver so it automatically makes the ammunition leap into your hand when you reach for it. On each of your turns until the spell ends, you can use a bonus action to make two attacks with a ranged weapon. Spell/&SwiftQuiverTitle=Swift Quiver Spell/&SynapticStaticDescription=You choose a point within range and cause psychic energy to explode there. Each creature in a 20-foot-radius sphere centered on that point must make an Intelligence saving throw. A target takes 8d6 psychic damage on a failed save, or half as much damage on a successful After a failed save, a target has muddled thoughts for 1 minute. During that time, it rolls a d6 and subtracts the number rolled from all its attack rolls and ability checks. The target can make an Intelligence saving throw at the end of each of its turns, ending the effect on itself on a success. Spell/&SynapticStaticTitle=Synaptic Static diff --git a/SolastaUnfinishedBusiness/Translations/es/Spells/Spells01-es.txt b/SolastaUnfinishedBusiness/Translations/es/Spells/Spells01-es.txt index 2438728b89..9dcfb3fb32 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Spells/Spells01-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Spells/Spells01-es.txt @@ -123,7 +123,7 @@ Spell/&VoidGraspDescription=Invocas el poder de fuerzas malévolas. Zarcillos de Spell/&VoidGraspTitle=Armas de Hadar Spell/&WitchBoltDescription=Un rayo de energía azul crepitante se lanza hacia una criatura dentro del alcance, formando un arco sostenido de relámpagos entre tú y el objetivo. Realiza un ataque de hechizo a distancia contra esa criatura. Si impactas, el objetivo recibe 1d12 puntos de daño por relámpago y, en cada uno de tus turnos mientras dure la acción, puedes usar tu acción para infligir 1d12 puntos de daño por relámpago al objetivo automáticamente. El hechizo termina si usas tu acción para hacer cualquier otra cosa. El hechizo también termina si el objetivo está fuera del alcance del hechizo. Cuando lanzas este hechizo usando un espacio de hechizo de nivel 2 o superior, el daño aumenta en 1d12 por cada nivel de espacio por encima del 1. Spell/&WitchBoltTitle=Rayo de bruja -Spell/&WrathfulSmiteDescription=Tu siguiente golpe inflige 1d6 de daño psíquico adicional. Si el objetivo falla la tirada de salvación de Sabiduría, su mente explota de dolor y se asusta. +Spell/&WrathfulSmiteDescription=La próxima vez que golpees con un ataque de arma cuerpo a cuerpo durante la duración de este hechizo, tu ataque causará 1d6 de daño psíquico adicional. Además, si el objetivo es una criatura, debe realizar una tirada de salvación de Sabiduría o te tendrá miedo hasta que el hechizo termine. Como acción, la criatura puede realizar una prueba de Sabiduría contra la CD de tu salvación de hechizo para fortalecer su determinación y terminar este hechizo. Spell/&WrathfulSmiteTitle=Golpe iracundo Tooltip/&MustBeWitchBolt=Debe estar marcado con Witch Bolt Tooltip/&MustNotHaveChaosBoltMark=No debe haber sido dañado por Chaos Bolt en este turno. diff --git a/SolastaUnfinishedBusiness/Translations/es/Spells/Spells03-es.txt b/SolastaUnfinishedBusiness/Translations/es/Spells/Spells03-es.txt index 03d4013e94..21cead848f 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Spells/Spells03-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Spells/Spells03-es.txt @@ -38,7 +38,7 @@ Spell/&AshardalonStrideDescription=Las llamas ondulantes de un dragón salen dis Spell/&AshardalonStrideTitle=El paso de Ashardalon Spell/&AuraOfLifeDescription=La energía curativa irradia desde ti en un aura con un radio de 30 pies. Hasta que el conjuro termine, el aura se mueve contigo, centrada en ti. Puedes usar una acción adicional para hacer que una criatura en el aura (incluyéndote a ti) recupere 2d6 puntos de golpe. Spell/&AuraOfLifeTitle=Aura de vitalidad -Spell/&BlindingSmiteDescription=En el siguiente impacto, tu arma destella con una luz brillante y el ataque inflige 3d8 puntos de daño radiante adicionales al objetivo. Además, el objetivo debe superar una tirada de salvación de Constitución o quedará cegado hasta que el conjuro termine.\nUna criatura cegada por este conjuro realiza otra tirada de salvación de Constitución al final de cada uno de sus turnos. Si la tirada de salvación tiene éxito, ya no queda cegada. +Spell/&BlindingSmiteDescription=La próxima vez que golpees a una criatura con un ataque de arma cuerpo a cuerpo durante la duración de este hechizo, tu arma brillará con una luz brillante y el ataque causará 3d8 puntos de daño radiante adicionales al objetivo. Además, el objetivo debe superar una tirada de salvación de Constitución o quedará cegado hasta que el hechizo termine. Una criatura cegada por este hechizo realiza otra tirada de salvación de Constitución al final de cada uno de sus turnos. Si supera una tirada de salvación, ya no estará cegada. Spell/&BlindingSmiteTitle=Golpe cegador Spell/&BoomingStepDescription=Te teletransportas a un espacio desocupado que puedas ver dentro del alcance. Inmediatamente después de que desaparezcas, se oye un estruendo atronador y cada criatura que se encuentre a 10 pies del espacio que abandonaste debe realizar una tirada de salvación de Constitución; si falla, recibe 3d10 puntos de daño por trueno o la mitad si tiene éxito. También puedes teletransportar a un aliado que esté dispuesto a hacerlo. Cuando lanzas este conjuro usando un espacio de conjuro de nivel 4 o superior, el daño aumenta en 1d10 por cada nivel de espacio por encima del 3. Spell/&BoomingStepTitle=Paso del Trueno diff --git a/SolastaUnfinishedBusiness/Translations/es/Spells/Spells04-es.txt b/SolastaUnfinishedBusiness/Translations/es/Spells/Spells04-es.txt index 7e6268b0c4..72065400cc 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Spells/Spells04-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Spells/Spells04-es.txt @@ -65,7 +65,7 @@ Spell/&PsychicLanceDescription=Liberas una lanza brillante de poder psíquico de Spell/&PsychicLanceTitle=Lanza psíquica de Raulothim Spell/&SickeningRadianceDescription=Una luz tenue se propaga en una esfera de 30 pies de radio centrada en un punto que elijas dentro del alcance. La luz se propaga por las esquinas y dura hasta que el conjuro termina. Cuando una criatura se mueve hacia el área del conjuro por primera vez en un turno o comienza su turno allí, esa criatura debe tener éxito en una tirada de salvación de Constitución o recibir 4d10 puntos de daño radiante, y sufre un nivel de agotamiento y emite una luz tenue en un radio de 5 pies. Esta luz hace que sea imposible para la criatura beneficiarse de ser invisible. La luz y cualquier nivel de agotamiento causado por este conjuro desaparecen cuando el conjuro termina. Spell/&SickeningRadianceTitle=Resplandor repugnante -Spell/&StaggeringSmiteDescription=La próxima vez que golpees a una criatura con un ataque de arma durante la duración de este conjuro, tu arma atravesará tanto el cuerpo como la mente, y el ataque causará 4d6 puntos de daño psíquico adicionales al objetivo. El objetivo debe realizar una tirada de salvación de Sabiduría. Si falla, tendrá desventaja en las tiradas de ataque y las pruebas de característica, y no podrá realizar reacciones hasta el final de su siguiente turno. +Spell/&StaggeringSmiteDescription=La próxima vez que golpees a una criatura con un ataque de arma cuerpo a cuerpo durante la duración de este conjuro, tu arma atravesará tanto el cuerpo como la mente, y el ataque causará 4d6 puntos de daño psíquico adicionales al objetivo. El objetivo debe realizar una tirada de salvación de Sabiduría. Si falla, tendrá desventaja en las tiradas de ataque y las pruebas de característica, y no podrá realizar reacciones hasta el final de su siguiente turno. Spell/&StaggeringSmiteTitle=Golpe asombroso Spell/&TreeForestGuardianDescription=Tu piel parece corteza, te brotan hojas del pelo y obtienes los siguientes beneficios:\n• Obtienes 10 puntos de golpe temporales.\n• Realizas tiradas de salvación de Constitución con ventaja.\n• Realizas tiradas de ataque basadas en Destreza y Sabiduría con ventaja.\n• Las criaturas que se encuentren a 30 pies o menos de ti deben realizar una tirada de salvación de Fuerza o quedarán entorpecidas durante la duración del conjuro. Pueden volver a intentar la tirada de salvación cada inicio de turno. Spell/&TreeForestGuardianTitle=Árbol salvaje diff --git a/SolastaUnfinishedBusiness/Translations/es/Spells/Spells05-es.txt b/SolastaUnfinishedBusiness/Translations/es/Spells/Spells05-es.txt index 497b52aad6..3dd16fab62 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Spells/Spells05-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Spells/Spells05-es.txt @@ -44,7 +44,7 @@ Spell/&SonicBoomDescription=Un pequeño orbe del mismo color que el globo utiliz Spell/&SonicBoomTitle=Estampido supersónico Spell/&SteelWhirlwindDescription=Haces florecer el arma que usaste para lanzar el hechizo y luego desapareces para atacar como el viento. Elige hasta cinco criaturas que puedas ver dentro del alcance. Realiza un ataque de hechizo cuerpo a cuerpo contra cada objetivo. Si impactas, el objetivo recibe 6d10 puntos de daño de fuerza. Luego puedes teletransportarte a un espacio desocupado que puedas ver a 5 pies o menos de uno de los objetivos a los que impactaste o fallaste. Spell/&SteelWhirlwindTitle=Golpe de viento de acero -Spell/&SwiftQuiverDescription=Transmutas tu carcaj para que produzca un suministro infinito de munición no mágica, que parece saltar a tu mano cuando intentas cogerla. En cada uno de tus turnos hasta que finalice el hechizo, puedes usar una acción adicional para realizar dos ataques cuando sostienes un arma de dos alcances. Cada vez que realizas un ataque a distancia, tu carcaj reemplaza mágicamente la pieza de munición que usaste con una pieza similar de munición no mágica. +Spell/&SwiftQuiverDescription=Transmutas tu carcaj para que automáticamente la munición salte a tu mano cuando la alcances. En cada uno de tus turnos hasta que termine el hechizo, puedes usar una acción adicional para realizar dos ataques con un arma a distancia. Spell/&SwiftQuiverTitle=Carcaj veloz Spell/&SynapticStaticDescription=Eliges un punto dentro del alcance y haces que la energía psíquica explote allí. Cada criatura en una esfera de 20 pies de radio centrada en ese punto debe realizar una tirada de salvación de Inteligencia. Un objetivo sufre 8d6 de daño psíquico si falla la salvación, o la mitad de daño si tiene éxito. Después de una salvación fallida, un objetivo tiene pensamientos confusos durante 1 minuto. Durante ese tiempo, tira 1d6 y resta el número obtenido de todas sus tiradas de ataque y comprobaciones de característica. El objetivo puede realizar una tirada de salvación de Inteligencia al final de cada uno de sus turnos, terminando el efecto sobre sí mismo si tiene éxito. Spell/&SynapticStaticTitle=Estática sináptica diff --git a/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells01-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells01-fr.txt index 6e8f10515c..fa018a8a7f 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells01-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells01-fr.txt @@ -123,7 +123,7 @@ Spell/&VoidGraspDescription=Vous invoquez le pouvoir des forces malveillantes. D Spell/&VoidGraspTitle=Armes de Hadar Spell/&WitchBoltDescription=Un rayon d'énergie bleue crépitante se dirige vers une créature à portée, formant un arc de foudre soutenu entre vous et la cible. Lancez une attaque de sort à distance contre cette créature. En cas de succès, la cible subit 1d12 dégâts de foudre et, à chacun de vos tours pendant la durée du sort, vous pouvez utiliser votre action pour infliger automatiquement 1d12 dégâts de foudre à la cible. Le sort prend fin si vous utilisez votre action pour faire autre chose. Le sort prend également fin si la cible se trouve hors de portée du sort. Lorsque vous lancez ce sort en utilisant un emplacement de sort de niveau 2 ou supérieur, les dégâts augmentent de 1d12 pour chaque niveau d'emplacement au-dessus du niveau 1. Spell/&WitchBoltTitle=Boulon de sorcière -Spell/&WrathfulSmiteDescription=Votre prochain coup inflige 1d6 points de dégâts psychiques supplémentaires. Si la cible rate son jet de sauvegarde de SAG, son esprit explose de douleur et elle est effrayée. +Spell/&WrathfulSmiteDescription=La prochaine fois que vous touchez avec une arme de mêlée pendant la durée de ce sort, votre attaque inflige 1d6 dégâts psychiques supplémentaires. De plus, si la cible est une créature, elle doit réussir un jet de sauvegarde de Sagesse ou avoir peur de vous jusqu'à la fin du sort. En tant qu'action, la créature peut réussir un jet de Sagesse contre le DD de sauvegarde de votre sort pour renforcer sa détermination et mettre fin à ce sort. Spell/&WrathfulSmiteTitle=Coup de colère Tooltip/&MustBeWitchBolt=Doit être marqué par Witch Bolt Tooltip/&MustNotHaveChaosBoltMark=Ne doit pas avoir été endommagé par Chaos Bolt ce tour-ci. diff --git a/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells03-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells03-fr.txt index b3c29bfab1..7b4cd60a8e 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells03-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells03-fr.txt @@ -38,7 +38,7 @@ Spell/&AshardalonStrideDescription=Les flammes tourbillonnantes d'un dragon jail Spell/&AshardalonStrideTitle=La foulée d'Ashardalon Spell/&AuraOfLifeDescription=L'énergie de guérison rayonne de vous dans une aura d'un rayon de 9 mètres. Jusqu'à la fin du sort, l'aura se déplace avec vous, centrée sur vous. Vous pouvez utiliser une action bonus pour faire qu'une créature dans l'aura (y compris vous) récupère 2d6 points de vie. Spell/&AuraOfLifeTitle=Aura de vitalité -Spell/&BlindingSmiteDescription=Lors de votre prochain coup, votre arme émet une lumière vive et l'attaque inflige 3d8 dégâts radiants supplémentaires à la cible. De plus, la cible doit réussir un jet de sauvegarde de Constitution ou être aveuglée jusqu'à la fin du sort.\nUne créature aveuglée par ce sort effectue un autre jet de sauvegarde de Constitution à la fin de chacun de ses tours. En cas de réussite, elle n'est plus aveuglée. +Spell/&BlindingSmiteDescription=La prochaine fois que vous touchez une créature avec une attaque d'arme de mêlée pendant la durée de ce sort, votre arme s'illumine d'une lumière vive et l'attaque inflige 3d8 dégâts radiants supplémentaires à la cible. De plus, la cible doit réussir un jet de sauvegarde de Constitution ou être aveuglée jusqu'à la fin du sort. Une créature aveuglée par ce sort effectue un autre jet de sauvegarde de Constitution à la fin de chacun de ses tours. En cas de réussite, elle n'est plus aveuglée. Spell/&BlindingSmiteTitle=Frappe aveuglante Spell/&BoomingStepDescription=Vous vous téléportez dans un espace inoccupé que vous pouvez voir à portée. Immédiatement après votre disparition, un bruit de tonnerre retentit et chaque créature à 3 mètres ou moins de l'espace que vous avez quitté doit effectuer un jet de sauvegarde de Constitution, subissant 3d10 dégâts de foudre en cas d'échec, ou la moitié de ces dégâts en cas de réussite. Vous pouvez également téléporter un allié consentant. Lorsque vous lancez ce sort en utilisant un emplacement de sort de niveau 4 ou supérieur, les dégâts augmentent de 1d10 pour chaque niveau d'emplacement au-dessus du niveau 3. Spell/&BoomingStepTitle=Pas de tonnerre diff --git a/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells04-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells04-fr.txt index ba61bc0883..f53a5d4b28 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells04-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells04-fr.txt @@ -65,7 +65,7 @@ Spell/&PsychicLanceDescription=Vous lancez une lance scintillante de puissance p Spell/&PsychicLanceTitle=Lance psychique de Raulothim Spell/&SickeningRadianceDescription=Une faible lumière se répand dans une sphère de 9 mètres de rayon centrée sur un point que vous choisissez à portée. La lumière se répand dans les coins et dure jusqu'à la fin du sort. Lorsqu'une créature entre dans la zone d'effet du sort pour la première fois au cours d'un tour ou y commence son tour, cette créature doit réussir un jet de sauvegarde de Constitution ou subir 4d10 dégâts radiants, et elle subit un niveau d'épuisement et émet une faible lumière dans un rayon de 1,5 mètre. Cette lumière empêche la créature de bénéficier de son invisibilité. La lumière et les éventuels niveaux d'épuisement causés par ce sort disparaissent lorsque le sort prend fin. Spell/&SickeningRadianceTitle=Éclat écœurant -Spell/&StaggeringSmiteDescription=La prochaine fois que vous touchez une créature avec une attaque d'arme pendant la durée de ce sort, votre arme transperce à la fois le corps et l'esprit, et l'attaque inflige 4d6 dégâts psychiques supplémentaires à la cible. La cible doit réussir un jet de sauvegarde de Sagesse. En cas d'échec, elle subit un désavantage aux jets d'attaque et de caractéristique, et ne peut pas effectuer de réactions jusqu'à la fin de son prochain tour. +Spell/&StaggeringSmiteDescription=La prochaine fois que vous touchez une créature avec une attaque d'arme de mêlée pendant la durée de ce sort, votre arme transperce à la fois le corps et l'esprit, et l'attaque inflige 4d6 dégâts psychiques supplémentaires à la cible. La cible doit réussir un jet de sauvegarde de Sagesse. En cas d'échec, elle subit un désavantage aux jets d'attaque et de caractéristique, et ne peut pas effectuer de réactions jusqu'à la fin de son prochain tour. Spell/&StaggeringSmiteTitle=Frappe stupéfiante Spell/&TreeForestGuardianDescription=Votre peau semble abrégée, des feuilles poussent dans vos cheveux et vous obtenez les avantages suivants :\n• Vous gagnez 10 points de vie temporaires.\n• Vous réussissez vos jets de sauvegarde de Constitution avec avantage.\n• Vous réussissez vos jets d'attaque basés sur la Dextérité et la Sagesse avec avantage.\n• Les créatures situées à 9 mètres ou moins de vous doivent réussir un jet de sauvegarde de Force ou être gênées pendant la durée du sort. Elles peuvent retenter leur jet de sauvegarde à chaque début de tour. Spell/&TreeForestGuardianTitle=Arbre sauvage diff --git a/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells05-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells05-fr.txt index 89314329c4..48048bb9e0 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells05-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells05-fr.txt @@ -44,7 +44,7 @@ Spell/&SonicBoomDescription=Un petit orbe de la même couleur que le ballon util Spell/&SonicBoomTitle=Détonation supersonique Spell/&SteelWhirlwindDescription=Vous brandissez l'arme utilisée pour l'incantation, puis disparaissez pour frapper comme le vent. Choisissez jusqu'à cinq créatures que vous pouvez voir à portée. Lancez une attaque de sort au corps à corps contre chaque cible. En cas de succès, la cible subit 6d10 dégâts de force. Vous pouvez ensuite vous téléporter dans un espace inoccupé que vous pouvez voir à 1,50 mètre ou moins de l'une des cibles que vous avez touchées ou manquées. Spell/&SteelWhirlwindTitle=Grève du vent en acier -Spell/&SwiftQuiverDescription=Vous transmutez votre carquois pour qu'il produise une réserve infinie de munitions non magiques, qui semblent sauter dans votre main lorsque vous les attrapez. À chacun de vos tours jusqu'à la fin du sort, vous pouvez utiliser une action bonus pour effectuer deux attaques lorsque vous tenez une arme à deux portées. Chaque fois que vous effectuez une telle attaque à distance, votre carquois remplace magiquement la munition que vous avez utilisée par une munition non magique similaire. +Spell/&SwiftQuiverDescription=Vous transmutez votre carquois de manière à ce que les munitions sautent automatiquement dans votre main lorsque vous les attrapez. À chacun de vos tours jusqu'à la fin du sort, vous pouvez utiliser une action bonus pour effectuer deux attaques avec une arme à distance. Spell/&SwiftQuiverTitle=Carquois rapide Spell/&SynapticStaticDescription=Vous choisissez un point à portée et faites exploser de l'énergie psychique à cet endroit. Chaque créature dans une sphère de 6 mètres de rayon centrée sur ce point doit effectuer un jet de sauvegarde d'Intelligence. Une cible subit 8d6 dégâts psychiques en cas d'échec, ou la moitié de ces dégâts en cas de réussite. Après un échec, une cible a les pensées embrouillées pendant 1 minute. Pendant ce temps, elle lance un d6 et soustrait le résultat obtenu de tous ses jets d'attaque et de caractéristique. La cible peut effectuer un jet de sauvegarde d'Intelligence à la fin de chacun de ses tours, mettant fin à l'effet sur elle-même en cas de réussite. Spell/&SynapticStaticTitle=Statique synaptique diff --git a/SolastaUnfinishedBusiness/Translations/it/Spells/Spells01-it.txt b/SolastaUnfinishedBusiness/Translations/it/Spells/Spells01-it.txt index 7a1b02729a..3316ab001d 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Spells/Spells01-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Spells/Spells01-it.txt @@ -123,7 +123,7 @@ Spell/&VoidGraspDescription=Invochi il potere di forze malevole. Tentacoli di en Spell/&VoidGraspTitle=Armi di Hadar Spell/&WitchBoltDescription=Un raggio di energia blu crepitante si lancia verso una creatura entro il raggio, formando un arco di fulmini sostenuto tra te e il bersaglio. Esegui un attacco magico a distanza contro quella creatura. Se colpisce, il bersaglio subisce 1d12 danni da fulmine e, in ognuno dei tuoi turni per la durata, puoi usare la tua azione per infliggere automaticamente 1d12 danni da fulmine al bersaglio. L'incantesimo termina se usi la tua azione per fare qualsiasi altra cosa. L'incantesimo termina anche se il bersaglio si trova mai fuori dal raggio dell'incantesimo. Quando lanci questo incantesimo usando uno slot incantesimo di 2° livello o superiore, il danno aumenta di 1d12 per ogni livello di slot superiore al 1°. Spell/&WitchBoltTitle=Fulmine della strega -Spell/&WrathfulSmiteDescription=Il tuo colpo successivo infligge 1d6 danni psichici aggiuntivi. Se il bersaglio fallisce il tiro salvezza su SAG, la sua mente esplode di dolore e diventa spaventato. +Spell/&WrathfulSmiteDescription=La prossima volta che colpisci con un attacco con arma da mischia durante la durata di questo incantesimo, il tuo attacco infligge 1d6 danni psichici extra. Inoltre, se il bersaglio è una creatura, deve effettuare un tiro salvezza su Saggezza o essere spaventato da te finché l'incantesimo non termina. Come azione, la creatura può effettuare una prova di Saggezza contro la CD del tuo tiro salvezza per rafforzare la sua risolutezza e porre fine a questo incantesimo. Spell/&WrathfulSmiteTitle=Colpo Iracondo Tooltip/&MustBeWitchBolt=Deve essere contrassegnato da Witch Bolt Tooltip/&MustNotHaveChaosBoltMark=Non deve essere stato danneggiato da Chaos Bolt in questo turno. diff --git a/SolastaUnfinishedBusiness/Translations/it/Spells/Spells03-it.txt b/SolastaUnfinishedBusiness/Translations/it/Spells/Spells03-it.txt index 2aa11e934c..be72a333cf 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Spells/Spells03-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Spells/Spells03-it.txt @@ -38,7 +38,7 @@ Spell/&AshardalonStrideDescription=Le fiamme ondulate di un drago esplodono dai Spell/&AshardalonStrideTitle=Il passo di Ashardalon Spell/&AuraOfLifeDescription=L'energia curativa si irradia da te in un'aura con un raggio di 30 piedi. Finché l'incantesimo non termina, l'aura si muove con te, centrata su di te. Puoi usare un'azione bonus per far sì che una creatura nell'aura (incluso te) recuperi 2d6 punti ferita. Spell/&AuraOfLifeTitle=Aura di vitalità -Spell/&BlindingSmiteDescription=Al colpo successivo la tua arma emette una luce intensa e l'attacco infligge 3d8 danni radiosi aggiuntivi al bersaglio. Inoltre, il bersaglio deve riuscire in un tiro salvezza su Costituzione o essere accecato fino al termine dell'incantesimo.\nUna creatura accecata da questo incantesimo effettua un altro tiro salvezza su Costituzione alla fine di ciascuno dei suoi turni. Se il Tiro Salvezza riesce, non è più accecato. +Spell/&BlindingSmiteDescription=La prossima volta che colpisci una creatura con un attacco con arma da mischia durante la durata di questo incantesimo, la tua arma si illumina con una luce intensa e l'attacco infligge 3d8 danni radianti extra al bersaglio. Inoltre, il bersaglio deve superare un tiro salvezza su Costituzione o essere accecato finché l'incantesimo non termina. Una creatura accecata da questo incantesimo effettua un altro tiro salvezza su Costituzione alla fine di ogni suo turno. In caso di tiro salvezza riuscito, non è più accecata. Spell/&BlindingSmiteTitle=Colpo accecante Spell/&BoomingStepDescription=Ti teletrasporti in uno spazio non occupato che puoi vedere entro il raggio d'azione. Subito dopo la tua scomparsa, risuona un boato fragoroso e ogni creatura entro 10 piedi dallo spazio che hai lasciato deve effettuare un tiro salvezza su Costituzione, subendo 3d10 danni da tuono se fallisce il tiro salvezza, o la metà dei danni se lo supera. Puoi anche teletrasportare un alleato consenziente. Quando lanci questo incantesimo usando uno slot incantesimo di 4° livello o superiore, il danno aumenta di 1d10 per ogni livello di slot superiore al 3°. Spell/&BoomingStepTitle=Passo del tuono diff --git a/SolastaUnfinishedBusiness/Translations/it/Spells/Spells04-it.txt b/SolastaUnfinishedBusiness/Translations/it/Spells/Spells04-it.txt index 2e3ea31fbe..98d28ec9ad 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Spells/Spells04-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Spells/Spells04-it.txt @@ -65,7 +65,7 @@ Spell/&PsychicLanceDescription=Scagli una lancia scintillante di potere psichico Spell/&PsychicLanceTitle=Lancia psichica di Raulothim Spell/&SickeningRadianceDescription=La luce fioca si diffonde in una sfera di 30 piedi di raggio centrata su un punto che scegli entro il raggio. La luce si diffonde dietro gli angoli e dura fino alla fine dell'incantesimo. Quando una creatura entra per la prima volta nell'area dell'incantesimo in un turno o inizia il suo turno lì, quella creatura deve superare un tiro salvezza su Costituzione o subire 4d10 danni radianti e subisce un livello di esaurimento ed emette una luce fioca in un raggio di 5 piedi. Questa luce rende impossibile per la creatura trarre beneficio dall'essere invisibile. La luce e qualsiasi livello di esaurimento causato da questo incantesimo scompaiono quando l'incantesimo termina. Spell/&SickeningRadianceTitle=Radianza nauseante -Spell/&StaggeringSmiteDescription=La prossima volta che colpisci una creatura con un attacco con arma durante la durata di questo incantesimo, la tua arma trafigge sia il corpo che la mente, e l'attacco infligge 4d6 danni psichici extra al bersaglio. Il bersaglio deve effettuare un tiro salvezza su Saggezza. In caso di tiro salvezza fallito, ha svantaggio ai tiri per colpire e alle prove di abilità, e non può effettuare reazioni, fino alla fine del suo turno successivo. +Spell/&StaggeringSmiteDescription=La prossima volta che colpisci una creatura con un attacco con arma da mischia durante la durata di questo incantesimo, la tua arma trafigge sia il corpo che la mente e l'attacco infligge 4d6 danni psichici extra al bersaglio. Il bersaglio deve effettuare un tiro salvezza su Saggezza. In caso di fallimento, ha svantaggio ai tiri per colpire e alle prove di abilità e non può effettuare reazioni fino alla fine del suo turno successivo. Spell/&StaggeringSmiteTitle=Colpo sconcertante Spell/&TreeForestGuardianDescription=La tua pelle appare corteccia, le foglie spuntano dai tuoi capelli e ottieni i seguenti benefici:\n• Ottieni 10 punti ferita temporanei.\n• Effettui tiri salvezza su Costituzione con vantaggio.\n• Effettui tiri per colpire basati su Destrezza e Saggezza con vantaggio.\n• Le creature entro 30 piedi da te devono effettuare un tiro salvezza su Forza o essere ostacolate per la durata dell'incantesimo. Possono ritentare il tiro salvezza a ogni inizio turno. Spell/&TreeForestGuardianTitle=Albero selvaggio diff --git a/SolastaUnfinishedBusiness/Translations/it/Spells/Spells05-it.txt b/SolastaUnfinishedBusiness/Translations/it/Spells/Spells05-it.txt index 67156edef0..a1cae08b97 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Spells/Spells05-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Spells/Spells05-it.txt @@ -44,7 +44,7 @@ Spell/&SonicBoomDescription=Un piccolo globo dello stesso colore del palloncino Spell/&SonicBoomTitle=Boom sonico Spell/&SteelWhirlwindDescription=Fai roteare l'arma usata nel lancio e poi sparisci per colpire come il vento. Scegli fino a cinque creature che puoi vedere entro il raggio d'azione. Fai un attacco di incantesimo in mischia contro ogni bersaglio. Se va a segno, un bersaglio subisce 6d10 danni da forza. Puoi quindi teletrasportarti in uno spazio non occupato che puoi vedere entro 5 piedi da uno dei bersagli che hai colpito o mancato. Spell/&SteelWhirlwindTitle=Colpo di vento in acciaio -Spell/&SwiftQuiverDescription=Trasmuti la tua faretra in modo che produca una scorta infinita di munizioni non magiche, che sembrano balzare nella tua mano quando le prendi. In ognuno dei tuoi turni fino alla fine dell'incantesimo, puoi usare un'azione bonus per effettuare due attacchi quando tieni in mano un'arma a due distanze. Ogni volta che effettui un attacco a distanza del genere, la tua faretra sostituisce magicamente il pezzo di munizione che hai usato con un pezzo simile di munizione non magica. +Spell/&SwiftQuiverDescription=Trasmuti la tua faretra in modo che faccia automaticamente balzare le munizioni nella tua mano quando allunghi la mano per prenderle. In ognuno dei tuoi turni fino alla fine dell'incantesimo, puoi usare un'azione bonus per effettuare due attacchi con un'arma a distanza. Spell/&SwiftQuiverTitle=Faretra veloce Spell/&SynapticStaticDescription=Scegli un punto entro il raggio e fai esplodere lì l'energia psichica. Ogni creatura in una sfera di 20 piedi di raggio centrata su quel punto deve effettuare un tiro salvezza su Intelligenza. Un bersaglio subisce 8d6 danni psichici se fallisce il tiro salvezza, o la metà dei danni se riesce. Dopo un tiro salvezza fallito, un bersaglio ha pensieri confusi per 1 minuto. Durante quel periodo, tira un d6 e sottrae il numero ottenuto da tutti i suoi tiri per colpire e prove di abilità. Il bersaglio può effettuare un tiro salvezza su Intelligenza alla fine di ogni suo turno, terminando l'effetto su se stesso in caso di successo. Spell/&SynapticStaticTitle=Sinaptico statico diff --git a/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells01-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells01-ja.txt index 169fb6cc0d..c4c2b0fedb 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells01-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells01-ja.txt @@ -123,7 +123,7 @@ Spell/&VoidGraspDescription=あなたは悪意のある力の力を呼び起こ Spell/&VoidGraspTitle=ハダルの武器 Spell/&WitchBoltDescription=パチパチと音を立てる青いエネルギーのビームが範囲内のクリーチャーに向かって発射され、あなたとターゲットの間に持続的な稲妻の弧を形成します。そのクリーチャーに対して遠隔呪文攻撃を行います。命中すると、ターゲットは 1d12 の稲妻ダメージを受け、持続時間中のあなたの各ターンで、アクションを使用してターゲットに 1d12 の稲妻ダメージを自動的に与えることができます。アクションを使用して他のことを行うと、呪文は終了します。ターゲットが呪文の射程外になった場合にも、呪文は終了します。この呪文を 2 レベル以上の呪文スロットを使用して発動すると、ダメージは 1 レベルを超える各スロット レベルごとに 1d12 増加します。 Spell/&WitchBoltTitle=ウィッチボルト -Spell/&WrathfulSmiteDescription=次の攻撃は追加の 1d6 精神的ダメージを与えます。ターゲットが WIS セービングスローに失敗すると、その精神は痛みで爆発し、恐怖を感じます。 +Spell/&WrathfulSmiteDescription=この呪文の持続時間中に次に近接武器攻撃を命中させると、攻撃は 1d6 の追加の精神ダメージを与えます。さらに、ターゲットがクリーチャーである場合、クリーチャーは【判断力】セーヴィング スローを行わなければ、呪文が終了するまであなたを恐れます。アクションとして、クリーチャーはあなたの呪文セーヴィング DC に対して【判断力】判定を行い、決意を固めてこの呪文を終了することができます。 Spell/&WrathfulSmiteTitle=怒りのスマイト Tooltip/&MustBeWitchBolt=ウィッチボルトのマークが付いている必要があります Tooltip/&MustNotHaveChaosBoltMark=このターンカオスボルトによってダメージを受けていないこと。 diff --git a/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells03-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells03-ja.txt index ba9736e357..792a818318 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells03-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells03-ja.txt @@ -38,7 +38,7 @@ Spell/&AshardalonStrideDescription=竜の渦巻く炎があなたの足元から Spell/&AshardalonStrideTitle=アシャーダロンの歩み Spell/&AuraOfLifeDescription=治癒エネルギーはあなたから半径 30 フィートのオーラとして放射されます。呪文が終わるまで、オーラはあなたを中心としてあなたと一緒に移動します。あなたはボーナス アクションを使用して、オーラ内の 1 体のクリーチャー (あなたを含む) に 2d6 ヒット ポイントを回復させることができます。 Spell/&AuraOfLifeTitle=活力のオーラ -Spell/&BlindingSmiteDescription=次の攻撃で武器が明るい光でフレアし、攻撃はターゲットに追加の 3d8 放射ダメージを与えます。さらに、ターゲットは憲法セーヴィング・スローに成功するか、呪文が終了するまで盲目状態でなければなりません。\nこの呪文によって盲目になったクリーチャーは、各ターンの終わりに別の憲法セーヴィング・スローを行います。保存に成功すると、ブラインド状態ではなくなります。 +Spell/&BlindingSmiteDescription=この呪文の持続時間中に次に近接武器攻撃でクリーチャーを攻撃すると、武器が明るい光を放ち、その攻撃はターゲットに追加で 3d8 の光ダメージを与えます。さらに、ターゲットは耐久力セーヴィング スローに成功しなければ、呪文が終了するまで盲目になります。この呪文によって盲目になったクリーチャーは、各ターンの終了時にもう一度耐久力セーヴィング スローを行います。セーヴィングに成功すると、盲目状態は解除されます。 Spell/&BlindingSmiteTitle=ブラインディング・スマイト Spell/&BoomingStepDescription=あなたは範囲内に見える誰もいない空間にテレポートします。あなたが姿を消した直後、雷のようなドーンという音が鳴り響き、あなたが離れた空間から 10 フィート以内にいる各クリーチャーは憲法セーヴィング スローを行わなければなりません。セーヴに失敗した場合は 3d10 の雷ダメージを受け、成功した場合はその半分のダメージを受けます。自発的な味方 1 人をテレポートさせることもできます。 4 レベル以上の呪文スロットを使用してこの呪文を唱えると、ダメージは 3 レベル以上のスロット レベルごとに 1d10 増加します。 Spell/&BoomingStepTitle=サンダーステップ diff --git a/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells04-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells04-ja.txt index e88498c902..30b143ff24 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells04-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells04-ja.txt @@ -65,7 +65,7 @@ Spell/&PsychicLanceDescription=あなたは範囲内に見える生き物に向 Spell/&PsychicLanceTitle=ラウロシムのサイキックランス Spell/&SickeningRadianceDescription=薄暗い光が、範囲内の術者が選んだ一点を中心とした半径 30 フィートの球体に広がります。光は角を回り込み、呪文が終了するまで続きます。クリーチャーがターン中に初めて呪文の領域に移動するか、そこでターンを開始すると、そのクリーチャーは耐久力セーヴィング スローに成功するか、4d10 の光ダメージを受け、1 レベルの疲労を被り、半径 5 フィートに薄暗い光を放ちます。この光により、クリーチャーは透明化による利益を得ることができなくなります。この呪文によって生じた光と疲労のレベルは、呪文が終了すると消えます。 Spell/&SickeningRadianceTitle=不快な輝き -Spell/&StaggeringSmiteDescription=この呪文の持続時間中に次にあなたが武器攻撃でクリーチャーを攻撃するとき、あなたの武器は体と精神の両方を貫通し、その攻撃はターゲットに追加の 4d6 精神的ダメージを与えます。ターゲットはウィズダム・セーヴィング・スローを行わなければなりません。セーブに失敗すると、次のターンの終了時まで、攻撃ロールと能力判定に不利になり、反応を取ることができません。 +Spell/&StaggeringSmiteDescription=この呪文の持続時間中に次に近接武器攻撃でクリーチャーを攻撃すると、武器は肉体と精神の両方を貫通し、攻撃はターゲットに追加で 4d6 の精神ダメージを与えます。ターゲットは知恵セーヴィング スローを行う必要があります。セーヴィングに失敗すると、次のターンの終了まで攻撃ロールと能力値判定に不利となり、反応を行うことができません。 Spell/&StaggeringSmiteTitle=よろめきのスマイト Spell/&TreeForestGuardianDescription=肌が皮っぽくなり、髪から葉が芽生え、次の利点が得られます:\n・一時的にヒット・ポイントが 10 増加します。\n・憲法セーヴィング・スローが有利になります。\n・器用さと知恵が得られます。 -ベースの攻撃ロールは有利です。\n• あなたから 30 フィート以内のクリーチャーは、ストレングス セーヴィング スローを行わなければ、呪文の持続時間の間妨害されます。ターン開始ごとにセーブを再試行できます。 Spell/&TreeForestGuardianTitle=野生の木 diff --git a/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells05-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells05-ja.txt index 13de11d305..ebe99febe3 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells05-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells05-ja.txt @@ -44,7 +44,7 @@ Spell/&SonicBoomDescription=使用した風船と同じ色の小さな球体が Spell/&SonicBoomTitle=ソニックブーム Spell/&SteelWhirlwindDescription=あなたは詠唱に使用された武器を輝かせ、そして風のように攻撃するために消えます。範囲内で見える生き物を最大 5 つ選択します。各ターゲットに対して近接呪文攻撃を行います。命中すると、ターゲットは 6d10 のフォースダメージを受けます。その後、ヒットまたはミスしたターゲットの 1 つから 5 フィート以内に見える空いているスペースにテレポートできます。 Spell/&SteelWhirlwindTitle=スチールウィンドストライク -Spell/&SwiftQuiverDescription=矢筒を変形して、無限の非魔法の弾薬を生成させます。手に取ると、弾薬が手に飛び込んでくるようです。呪文が終了するまで、各ターンで、2 遠隔武器を持っているときにボーナス アクションを使用して 2 回の攻撃を行うことができます。このような遠隔攻撃を行うたびに、矢筒は使用した弾薬を同様の非魔法の弾薬に魔法的に置き換えます。 +Spell/&SwiftQuiverDescription=矢筒を変形して、手を伸ばすと自動的に弾薬が手の中に飛び込むようにします。呪文が終了するまで、各ターンごとにボーナス アクションを使用して遠隔武器で 2 回の攻撃を行うことができます。 Spell/&SwiftQuiverTitle=スウィフトクイヴァー Spell/&SynapticStaticDescription=範囲内の一点を選び、そこでサイキック エネルギーを爆発させます。その点を中心とした半径 20 フィートの球体内のすべてのクリーチャーは、【知力】セーヴィング スローを行わなければなりません。セーヴィング スローに失敗すると、ターゲットは 8d6 のサイキック ダメージを受け、成功すると半分のダメージを受けます。セーヴィング スローに失敗すると、ターゲットは 1 分間思考が混乱します。その間、ターゲットは d6 をロールし、出た目をすべての攻撃ロールと能力値チェックから差し引きます。ターゲットは各ターンの終了時に【知力】セーヴィング スローを行うことができ、成功するとターゲット自身への効果を終了します。 Spell/&SynapticStaticTitle=シナプススタティック diff --git a/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells01-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells01-ko.txt index 52f0051dae..1cfae70751 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells01-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells01-ko.txt @@ -123,7 +123,7 @@ Spell/&VoidGraspDescription=당신은 사악한 세력의 힘을 불러일으킵 Spell/&VoidGraspTitle=하다르의 무기 Spell/&WitchBoltDescription=탁탁거리는 푸른 에너지 광선이 범위 내에 있는 생물체를 향해 뻗어 나와 대상과 대상 사이에 지속적인 번개 호를 형성합니다. 해당 생물에 대해 원거리 주문 공격을 가합니다. 명중 시 대상은 1d12의 번개 피해를 입으며, 지속 시간 동안 각 턴마다 대상에게 자동으로 1d12의 번개 피해를 입히는 행동을 사용할 수 있습니다. 당신이 행동을 사용하여 다른 일을 하면 주문은 끝납니다. 대상이 주문 범위를 벗어나는 경우에도 주문은 종료됩니다. 2레벨 이상의 주문 슬롯을 사용하여 이 주문을 시전하면 1레벨 이상의 슬롯 레벨마다 피해가 1d12씩 증가합니다. Spell/&WitchBoltTitle=마녀 볼트 -Spell/&WrathfulSmiteDescription=다음 공격은 1d6의 추가 정신적 피해를 입힙니다. 목표가 WIS 저장에 실패하면 마음이 고통스러워 폭발하고 겁에 질립니다. +Spell/&WrathfulSmiteDescription=이 주문의 지속 시간 동안 근접 무기 공격을 다음에 적중시키면, 공격은 추가로 1d6의 사이킥 피해를 입힙니다. 또한, 대상이 생물인 경우, 지혜 구원 굴림을 해야 하며 그렇지 않으면 주문이 끝날 때까지 당신을 두려워해야 합니다. 행동으로 생물은 당신의 주문 구원 DC에 대한 지혜 검사를 해서 결의를 굳건히 하고 이 주문을 끝낼 수 있습니다. Spell/&WrathfulSmiteTitle=분노한 일격 Tooltip/&MustBeWitchBolt=위치 볼트(Witch Bolt)로 표시되어야 합니다. Tooltip/&MustNotHaveChaosBoltMark=이번 턴에 카오스 볼트로 인해 피해를 입지 않았어야 합니다. diff --git a/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells03-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells03-ko.txt index e06583f544..8054596bd2 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells03-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells03-ko.txt @@ -38,7 +38,7 @@ Spell/&AshardalonStrideDescription=발에서 솟아오르는 용의 불꽃이 Spell/&AshardalonStrideTitle=아샤달론의 걸음걸이 Spell/&AuraOfLifeDescription=치유 에너지는 반경 30피트의 오라로 당신에게서 방출됩니다. 주문이 끝날 때까지 오라는 당신을 중심으로 당신과 함께 움직입니다. 당신은 오라에 있는 한 생물(당신 포함)이 2d6 체력을 회복하도록 하기 위해 보너스 행동을 사용할 수 있습니다. Spell/&AuraOfLifeTitle=활력의 오라 -Spell/&BlindingSmiteDescription=다음 공격 시 무기가 밝은 빛으로 타오르고, 공격은 대상에게 추가로 3d8의 빛나는 피해를 입힙니다. 추가적으로, 대상은 건강 내성 굴림에 성공해야 하며 그렇지 않으면 주문이 끝날 때까지 눈이 멀어야 합니다.\n이 주문에 의해 눈이 먼 생물은 각 턴이 끝날 때 또 다른 건강 내성 굴림을 합니다. 저장에 성공하면 더 이상 눈이 멀지 않습니다. +Spell/&BlindingSmiteDescription=이 주문의 지속 시간 동안 근접 무기 공격으로 생물을 맞히면 무기가 밝은 빛으로 번쩍이고 공격은 대상에게 3d8의 추가 광채 피해를 입힙니다. 또한 대상은 체력 구원 굴림에 성공해야 하며 그렇지 않으면 주문이 끝날 때까지 실명 상태가 됩니다. 이 주문으로 실명된 생물은 각 턴이 끝날 때마다 체력 구원 굴림을 다시 합니다. 세이브에 성공하면 더 이상 실명 상태가 아닙니다. Spell/&BlindingSmiteTitle=눈부신 일격 Spell/&BoomingStepDescription=당신은 범위 내에서 볼 수 있는 비어 있는 공간으로 자신을 순간이동시킵니다. 당신이 사라진 직후 천둥 같은 굉음이 울리고, 당신이 떠난 공간에서 10피트 내의 각 생물은 건강 내성 굴림을 해야 하며, 내성 굴림에 실패하면 3d10 천둥 피해를 입거나, 성공하면 절반의 피해를 입습니다. 또한 기꺼이 동맹 한 명을 순간이동시킬 수도 있습니다. 4레벨 이상의 주문 슬롯을 사용하여 이 주문을 시전하면 3레벨 이상의 슬롯 레벨마다 피해가 1d10씩 증가합니다. Spell/&BoomingStepTitle=썬더스텝 diff --git a/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells04-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells04-ko.txt index fca94f9944..8aa9846ba7 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells04-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells04-ko.txt @@ -65,7 +65,7 @@ Spell/&PsychicLanceDescription=당신은 범위 내에서 볼 수 있는 생물 Spell/&PsychicLanceTitle=라울로팀의 정신창 Spell/&SickeningRadianceDescription=범위 내에서 선택한 지점을 중심으로 반경 30피트의 구체 내에서 희미한 빛이 퍼집니다. 빛은 모퉁이로 퍼지며, 주문이 끝날 때까지 지속됩니다. 생물이 턴에서 처음으로 주문 영역으로 이동하거나 그곳에서 턴을 시작할 때, 그 생물은 건강 내성 굴림에 성공하거나 4d10의 복사 피해를 입어야 하며, 한 수준의 탈진을 겪고 희미한 빛을 방출합니다. 반경 5피트. 이 빛은 생물이 눈에 보이지 않는 것으로부터 이익을 얻는 것을 불가능하게 만듭니다. 이 주문으로 인한 빛과 피로는 주문이 끝나면 사라집니다. Spell/&SickeningRadianceTitle=역겨운 광채 -Spell/&StaggeringSmiteDescription=이 주문이 지속되는 동안 다음에 당신이 무기 공격으로 생명체를 공격할 때, 당신의 무기는 몸과 정신을 모두 관통하고 공격은 대상에게 추가로 4d6의 심령 피해를 입힙니다. 대상은 지혜 내성 굴림을 해야 합니다. 저장에 실패하면 공격 굴림과 능력 확인에 불이익을 받고 다음 턴이 끝날 때까지 반응을 취할 수 없습니다. +Spell/&StaggeringSmiteDescription=이 주문의 지속 시간 동안 근접 무기 공격으로 생물을 맞히면 무기가 신체와 정신을 모두 관통하고 공격은 대상에게 4d6의 추가 사이킥 피해를 입힙니다. 대상은 지혜 세이빙 스로우를 해야 합니다. 세이브에 실패하면 공격 굴림과 능력 검사에 불리한 상황이 발생하고 다음 턴이 끝날 때까지 반응을 취할 수 없습니다. Spell/&StaggeringSmiteTitle=엄청난 일격 Spell/&TreeForestGuardianDescription=피부가 거칠어지고 머리카락에서 잎이 돋아나며 다음과 같은 이점을 얻습니다.\n• 임시 체력 10점을 얻습니다.\n• 건강 내성 굴림을 유리하게 굴립니다.\n• 민첩과 지혜를 얻습니다. 기반 공격 굴림이 유리합니다.\n• 당신으로부터 30피트 내의 생물은 힘 내성 굴림을 해야 하며 그렇지 않으면 주문 지속 시간 동안 방해를 받아야 합니다. 턴이 시작될 때마다 저장을 다시 시도할 수 있습니다. Spell/&TreeForestGuardianTitle=야생나무 diff --git a/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells05-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells05-ko.txt index 9b9ed7a1a9..16009741f4 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells05-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells05-ko.txt @@ -44,7 +44,7 @@ Spell/&SonicBoomDescription=사용된 풍선과 같은 색상의 작은 구체 Spell/&SonicBoomTitle=소닉붐 Spell/&SteelWhirlwindDescription=당신은 캐스팅에 사용된 무기를 휘두르며 바람처럼 사라져 버립니다. 범위 내에서 볼 수 있는 생물을 최대 5개까지 선택하세요. 각 대상에 대해 근접 주문 공격을 가합니다. 적중 시 대상은 6d10의 강제 피해를 입습니다. 그런 다음, 맞추거나 놓친 대상 중 하나의 5피트 이내에서 볼 수 있는 비어 있는 공간으로 순간이동할 수 있습니다. Spell/&SteelWhirlwindTitle=스틸 윈드 스트라이크 -Spell/&SwiftQuiverDescription=화살통을 변형시켜 무한한 비마법 탄약을 생산하는데, 당신이 그것을 잡으려고 하면 탄약이 당신의 손에 뛰어드는 듯합니다. 주문이 끝날 때까지 당신의 턴마다 보너스 액션을 사용하여 2개의 원거리 무기를 들고 있을 때 2번의 공격을 할 수 있습니다. 그런 원거리 공격을 할 때마다 화살통은 마법처럼 당신이 사용한 탄약을 비슷한 비마법 탄약으로 대체합니다. +Spell/&SwiftQuiverDescription=화살통을 변형시켜서 당신이 화살통을 잡을 때 자동으로 탄약이 당신의 손에 뛰어들게 합니다. 주문이 끝날 때까지 당신의 턴마다 보너스 액션을 사용하여 원거리 무기로 두 번의 공격을 할 수 있습니다. Spell/&SwiftQuiverTitle=스위프트 퀴버 Spell/&SynapticStaticDescription=범위 내의 한 지점을 선택하면 그곳에서 정신 에너지가 폭발하게 됩니다. 해당 지점을 중심으로 하는 반경 20피트 구체의 각 생물은 지능 내성 굴림을 해야 합니다. 대상은 저장 실패 시 8d6의 정신적 피해를 입거나, 성공 시 피해의 절반을 받습니다. 저장 실패 후 대상은 1분 동안 혼란스러운 생각을 합니다. 그 시간 동안 d6을 굴리고 모든 공격 굴림과 능력 검사에서 굴린 숫자를 뺍니다. 목표는 각 턴이 끝날 때 지능 내성 굴림을 하여 성공 시 자신에 대한 효과를 종료할 수 있습니다. Spell/&SynapticStaticTitle=시냅스 정적 diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells01-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells01-pt-BR.txt index ccfb87deec..79ff95df60 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells01-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells01-pt-BR.txt @@ -123,7 +123,7 @@ Spell/&VoidGraspDescription=Você invoca o poder de forças malévolas. Tentácu Spell/&VoidGraspTitle=Brasões de Hadar Spell/&WitchBoltDescription=Um raio de energia azul crepitante é lançado em direção a uma criatura dentro do alcance, formando um arco de relâmpago sustentado entre você e o alvo. Faça um ataque de magia à distância contra essa criatura. Em um acerto, o alvo sofre 1d12 de dano de relâmpago, e em cada um dos seus turnos durante a duração, você pode usar sua ação para causar 1d12 de dano de relâmpago ao alvo automaticamente. A magia termina se você usar sua ação para fazer qualquer outra coisa. A magia também termina se o alvo estiver fora do alcance da magia. Quando você conjura esta magia usando um espaço de magia de 2º nível ou superior, o dano aumenta em 1d12 para cada nível de espaço acima do 1º. Spell/&WitchBoltTitle=Parafuso de Bruxa -Spell/&WrathfulSmiteDescription=Seu próximo golpe causa 1d6 de dano psíquico adicional. Se o alvo falhar no teste de resistência de WIS, sua mente explode em dor e ele fica assustado. +Spell/&WrathfulSmiteDescription=Na próxima vez que você acertar com um ataque de arma corpo a corpo durante a duração desta magia, seu ataque causa 1d6 de dano psíquico extra. Além disso, se o alvo for uma criatura, ela deve fazer um teste de resistência de Sabedoria ou ficará assustada com você até que a magia termine. Como uma ação, a criatura pode fazer um teste de Sabedoria contra sua CD de resistência de magia para fortalecer sua determinação e terminar esta magia. Spell/&WrathfulSmiteTitle=Golpe Irado Tooltip/&MustBeWitchBolt=Deve ser marcado por Witch Bolt Tooltip/&MustNotHaveChaosBoltMark=Não deve ter sido danificado por Chaos Bolt neste turno. diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells03-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells03-pt-BR.txt index 9772ba0e70..84b1acef84 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells03-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells03-pt-BR.txt @@ -38,7 +38,7 @@ Spell/&AshardalonStrideDescription=As chamas ondulantes de um dragão explodem d Spell/&AshardalonStrideTitle=Passo de Ashardalon Spell/&AuraOfLifeDescription=Energia de cura irradia de você em uma aura com um raio de 30 pés. Até que a magia termine, a aura se move com você, centralizada em você. Você pode usar uma ação bônus para fazer com que uma criatura na aura (incluindo você) recupere 2d6 pontos de vida. Spell/&AuraOfLifeTitle=Aura de Vitalidade -Spell/&BlindingSmiteDescription=No seu próximo golpe, sua arma brilha com uma luz brilhante, e o ataque causa 3d8 de dano radiante extra ao alvo. Além disso, o alvo deve ser bem-sucedido em um teste de resistência de Constituição ou ficará cego até o fim da magia.\nUma criatura cegada por esta magia faz outro teste de resistência de Constituição no final de cada um de seus turnos. Em um teste bem-sucedido, ela não fica mais cega. +Spell/&BlindingSmiteDescription=Na próxima vez que você atingir uma criatura com um ataque de arma corpo a corpo durante a duração desta magia, sua arma brilha com uma luz brilhante, e o ataque causa 3d8 de dano radiante extra ao alvo. Além disso, o alvo deve ser bem-sucedido em um teste de resistência de Constituição ou ficará cego até o fim da magia. Uma criatura cegada por esta magia faz outro teste de resistência de Constituição no final de cada um de seus turnos. Em um teste bem-sucedido, ela não fica mais cega. Spell/&BlindingSmiteTitle=Golpe Cegante Spell/&BoomingStepDescription=Você se teletransporta para um espaço desocupado que você pode ver dentro do alcance. Imediatamente após você desaparecer, um estrondo estrondoso soa, e cada criatura a 10 pés do espaço que você deixou deve fazer um teste de resistência de Constituição, sofrendo 3d10 de dano de trovão em um teste falho, ou metade do dano em um teste bem-sucedido. Você também pode teletransportar um aliado disposto. Quando você conjura esta magia usando um espaço de magia de 4º nível ou superior, o dano aumenta em 1d10 para cada nível de espaço acima de 3º. Spell/&BoomingStepTitle=Passo do trovão diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells04-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells04-pt-BR.txt index 2a8c06f350..60c14f21c6 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells04-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells04-pt-BR.txt @@ -65,7 +65,7 @@ Spell/&PsychicLanceDescription=Você libera uma lança brilhante de poder psíqu Spell/&PsychicLanceTitle=Lança Psíquica de Raulothim Spell/&SickeningRadianceDescription=A luz fraca se espalha dentro de uma esfera de 30 pés de raio centrada em um ponto que você escolher dentro do alcance. A luz se espalha pelos cantos e dura até a magia terminar. Quando uma criatura se move para a área da magia pela primeira vez em um turno ou começa seu turno lá, essa criatura deve ter sucesso em um teste de resistência de Constituição ou sofre 4d10 de dano radiante, e sofre um nível de exaustão e emite uma luz fraca em um raio de 5 pés. Essa luz torna impossível para a criatura se beneficiar de ser invisível. A luz e quaisquer níveis de exaustão causados por essa magia desaparecem quando a magia termina. Spell/&SickeningRadianceTitle=Radiância doentia -Spell/&StaggeringSmiteDescription=Na próxima vez que você atingir uma criatura com um ataque de arma durante a duração desta magia, sua arma perfurará tanto o corpo quanto a mente, e o ataque causará 4d6 de dano psíquico extra ao alvo. O alvo deve fazer um teste de resistência de Sabedoria. Em um teste de resistência falho, ele tem desvantagem em jogadas de ataque e testes de habilidade, e não pode realizar reações, até o final de seu próximo turno. +Spell/&StaggeringSmiteDescription=Na próxima vez que você atingir uma criatura com um ataque de arma corpo a corpo durante a duração desta magia, sua arma perfurará tanto o corpo quanto a mente, e o ataque causará 4d6 de dano psíquico extra ao alvo. O alvo deve fazer um teste de resistência de Sabedoria. Em um teste de resistência falho, ele tem desvantagem em jogadas de ataque e testes de habilidade, e não pode realizar reações, até o final do seu próximo turno. Spell/&StaggeringSmiteTitle=Golpe Escalonante Spell/&TreeForestGuardianDescription=Sua pele parece casca de árvore, folhas brotam do seu cabelo e você ganha os seguintes benefícios:\n• Você ganha 10 pontos de vida temporários.\n• Você faz testes de resistência de Constituição com vantagem.\n• Você faz testes de ataque baseados em Destreza e Sabedoria com vantagem.\n• Criaturas a até 30 pés de você devem fazer um teste de resistência de Força ou serão impedidas pela duração da magia. Elas podem tentar novamente o teste a cada início de turno. Spell/&TreeForestGuardianTitle=Árvore selvagem diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells05-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells05-pt-BR.txt index 6d06c95100..7c145f221c 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells05-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells05-pt-BR.txt @@ -44,7 +44,7 @@ Spell/&SonicBoomDescription=Um pequeno orbe da mesma cor do balão usado aparece Spell/&SonicBoomTitle=Estrondo Sônico Spell/&SteelWhirlwindDescription=Você floresce a arma usada na conjuração e então desaparece para atacar como o vento. Escolha até cinco criaturas que você possa ver dentro do alcance. Faça um ataque de magia corpo a corpo contra cada alvo. Em um acerto, um alvo recebe 6d10 de dano de força. Você pode então se teletransportar para um espaço desocupado que você possa ver dentro de 5 pés de um dos alvos que você acertou ou errou. Spell/&SteelWhirlwindTitle=Golpe de Vento de Aço -Spell/&SwiftQuiverDescription=Você transmuta sua aljava para que ela produza um suprimento infinito de munição não mágica, que parece saltar para sua mão quando você a alcança. Em cada um dos seus turnos até que a magia termine, você pode usar uma ação bônus para fazer dois ataques ao segurar uma arma de dois alcances. Cada vez que você faz um ataque de alcance, sua aljava magicamente substitui a peça de munição que você usou por uma peça similar de munição não mágica. +Spell/&SwiftQuiverDescription=Você transmuta sua aljava para que ela automaticamente faça a munição saltar para sua mão quando você a alcança. Em cada um dos seus turnos até que a magia termine, você pode usar uma ação bônus para fazer dois ataques com uma arma de longo alcance. Spell/&SwiftQuiverTitle=Aljava rápida Spell/&SynapticStaticDescription=Você escolhe um ponto dentro do alcance e faz com que energia psíquica exploda ali. Cada criatura em uma esfera de 20 pés de raio centrada naquele ponto deve fazer um teste de resistência de Inteligência. Um alvo sofre 8d6 de dano psíquico em um teste falho, ou metade do dano em um teste bem-sucedido. Após um teste falho, um alvo tem pensamentos confusos por 1 minuto. Durante esse tempo, ele rola um d6 e subtrai o número rolado de todas as suas jogadas de ataque e testes de habilidade. O alvo pode fazer um teste de resistência de Inteligência no final de cada um de seus turnos, encerrando o efeito sobre si mesmo em um sucesso. Spell/&SynapticStaticTitle=Estática sináptica diff --git a/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells01-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells01-ru.txt index 3b3509c273..0873b79d51 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells01-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells01-ru.txt @@ -123,7 +123,7 @@ Spell/&VoidGraspDescription=Вы взываете к мощи нечистой Spell/&VoidGraspTitle=Руки Хадара Spell/&WitchBoltDescription=Луч потрескивающей синеватой энергии устремляется к существу в пределах дистанции, формируя между вами и целью непрерывный дуговой разряд. Совершите дальнобойную атаку заклинанием по этому существу. При попадании цель получает 1d12 урона электричеством, и, пока заклинание активно, вы можете в каждый свой ход действием автоматически причинять цели 1d12 урона электричеством. Это заклинание оканчивается, если вы действием сделаете что-то иное. Заклинание также оканчивается, если цель окажется за пределами дистанции заклинания. Если вы накладываете это заклинание, используя ячейку 2-го уровня или выше, урон увеличивается на 1d12 за каждый уровень ячейки выше первого. Spell/&WitchBoltTitle=Ведьмин снаряд -Spell/&WrathfulSmiteDescription=В следующий раз, когда вы попадёте рукопашной атакой оружием, пока активно это заклинание, ваша атака причиняет дополнительный 1к6 урона психической энергией. Кроме того, если цель — существо, оно должно совершить спасбросок Мудрости, иначе оно станет испуганным до окончания действия заклинания. +Spell/&WrathfulSmiteDescription=В следующий раз, когда вы нанесете удар оружием ближнего боя во время действия этого заклинания, ваша атака нанесет дополнительный психический урон 1d6. Кроме того, если цель — существо, оно должно сделать спасбросок Мудрости или испугаться вас, пока заклинание не закончится. В качестве действия существо может сделать проверку Мудрости против вашего спасброска от заклинания, чтобы укрепить свою решимость и закончить это заклинание. Spell/&WrathfulSmiteTitle=Гневная кара Tooltip/&MustBeWitchBolt=Должен быть отмечен Ведьминым снарядом Tooltip/&MustNotHaveChaosBoltMark=Не может получить урон от Снаряда хаоса в этом ходу. diff --git a/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells03-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells03-ru.txt index 06224cf5a5..61d6b36eb8 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells03-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells03-ru.txt @@ -38,7 +38,7 @@ Spell/&AshardalonStrideDescription=Из-под ваших ног вырывае Spell/&AshardalonStrideTitle=Ашардалонова поступь Spell/&AuraOfLifeDescription=От вас исходит аура живительной энергии с радиусом 30 футов. Пока заклинание активно, аура перемещается вместе с вами, оставаясь с центром на вас. Вы можете бонусным действием восстанавливать одному любому существу в ауре (включая себя) 2d6 хитов. Spell/&AuraOfLifeTitle=Аура живучести -Spell/&BlindingSmiteDescription=Когда вы в следующий раз попадёте по существу рукопашной атакой оружием, пока заклинание активно, ваше оружие вспыхивает ярким светом, и атака причиняет цели дополнительный урон излучением 3d8. Кроме того, цель должна преуспеть в спасброске Телосложения, иначе она станет ослеплённой до окончания заклинания.\nОслеплённое этим заклинанием существо совершает спасброски Телосложения в конце каждого своего хода. В случае успеха оно перестаёт быть ослеплённым. +Spell/&BlindingSmiteDescription=В следующий раз, когда вы попадете по существу атакой оружием ближнего боя во время действия этого заклинания, ваше оружие вспыхнет ярким светом, и атака нанесет цели дополнительный урон излучением в 3d8 единиц. Кроме того, цель должна преуспеть в спасброске Телосложения или быть ослепленной до окончания заклинания. Существо, ослепленное этим заклинанием, совершает еще один спасбросок Телосложения в конце каждого своего хода. При успешном спасброске оно больше не ослеплено. Spell/&BlindingSmiteTitle=Ослепляющая кара Spell/&BoomingStepDescription=Вы телепортируете себя в свободное пространство, которое вы можете видеть в пределах дистанции. Сразу после того, как вы исчезли, раздается раскат грома, и каждое существо в радиусе 10 футов от покинутого пространства должно совершить спасбросок Телосложения, получив 3d10 урона звуком при провале или половину этого урона при успехе. Вы также можете взять с собой одно согласное существо. Если вы накладываете это заклинание, используя ячейку 4-го уровня или выше, урон увеличивается на 1d10 за каждый уровень ячейки выше 3-го. Spell/&BoomingStepTitle=Громовой шаг diff --git a/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells04-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells04-ru.txt index ab4cce8fcb..1ffcb2a437 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells04-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells04-ru.txt @@ -65,7 +65,7 @@ Spell/&PsychicLanceDescription=Вы выпускаете мерцающее ко Spell/&PsychicLanceTitle=Психическое копьё Раулотима Spell/&SickeningRadianceDescription=Из точки, выбранной вами в пределах дистанции, распространяется сфера тусклого зеленоватого света с радиусом 30 футов. Свет огибает углы и существует до тех пор, пока заклинание не закончится. Если существо впервые за раунд входит в область заклинания или начинает в ней свой ход, оно должно преуспеть в спасброске Телосложения, иначе получит 4d10 урона излучением. Оно также получает одну степень истощения и само начинает испускать тусклый зеленоватый свет в радиусе 5 футов. Этот свет лишает существо возможности быть невидимым. Этот свет делает невозможным получение преимуществ от невидимости. Свет и любые степени истощения, вызванные этим заклинанием, проходят, когда заклинание оканчивается. Spell/&SickeningRadianceTitle=Болезненное сияние -Spell/&StaggeringSmiteDescription=В следующий раз, когда вы попадёте по существу рукопашной атакой оружием, пока активно это заклинание, ваша атака пронзает не только его тело, но и сознание, и атака дополнительно наносит цели 4d6 урона психической энергией. Цель должна совершить спасбросок Мудрости. При провале она до конца своего следующего хода совершает с помехой броски атаки и проверки характеристик, а также не может совершать реакции. +Spell/&StaggeringSmiteDescription=В следующий раз, когда вы попадете по существу атакой оружием ближнего боя во время действия этого заклинания, ваше оружие пронзит и тело, и разум, а атака нанесет цели дополнительный психический урон 4d6. Цель должна сделать спасбросок Мудрости. При провале спасброска она получает помеху на броски атаки и проверки способностей и не может совершать реакции до конца своего следующего хода. Spell/&StaggeringSmiteTitle=Оглушающая кара Spell/&TreeForestGuardianDescription=Ваша кожа покрывается корой, листья прорастают из ваших волос, и вы получаете следующие преимущества:\n• Вы получаете 10 временных хитов.\n• Вы совершаете с преимуществом спасброски Телосложения.\n• Вы совершаете броски атаки, основанные на Ловкости и Мудрости, с преимуществом.\n• Существа в радиусе 30 футов от вас должны пройти спасбросок Силы, иначе они будут скованы на время действия заклинания. Они могут повторять спасбросок в начале каждого хода. Spell/&TreeForestGuardianTitle=Великое древо diff --git a/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells05-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells05-ru.txt index da16fa0b63..25dc72bf4f 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells05-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells05-ru.txt @@ -44,7 +44,7 @@ Spell/&SonicBoomDescription=Небольшой шар появляется в в Spell/&SonicBoomTitle=Звуковой удар Spell/&SteelWhirlwindDescription=Вы взмахиваете оружием, используемым для заклинания, а затем исчезаете, чтобы ударить, подобно ветру. Выберите до пяти существ в пределах дистанции, которых вы можете видеть. Совершите рукопашную атаку заклинанием по каждой цели. При попадании цель получает 6d10 урона силовым полем. После этого вы можете телепортироваться в свободное пространство, которое вы можете видеть в пределах 5 футов от одной из целей, которую вы атаковали, независимо от того, попали вы по ней или нет. Spell/&SteelWhirlwindTitle=Удар стального ветра -Spell/&SwiftQuiverDescription=Вы трансмутируете свой колчан, так что он производит бесконечный запас немагических боеприпасов, которые, кажется, прыгают в вашу руку, когда вы тянетесь к ним. На каждом из ваших ходов, пока заклинание не закончится, вы можете использовать бонусное действие, чтобы совершить две атаки, держа в руках оружие дальнего боя. Каждый раз, когда вы совершаете такую ​​атаку дальнего боя, ваш колчан магическим образом заменяет использованный вами боеприпас на аналогичный немагический боеприпас. +Spell/&SwiftQuiverDescription=Вы трансмутируете свой колчан, так что он автоматически заставляет боеприпасы прыгать в вашу руку, когда вы тянетесь к нему. На каждом из ваших ходов, пока заклинание не закончится, вы можете использовать бонусное действие, чтобы совершить две атаки оружием дальнего боя. Spell/&SwiftQuiverTitle=Быстрый Колчан Spell/&SynapticStaticDescription=Вы выбираете точку в пределах дистанции и вызываете в ней взрыв психической энергии. Каждое существо в сфере с радиусом 20 футов с центром в этой точке должно совершить спасбросок Интеллекта. Цель получает 8d6 урона психической энергией при провале или половину этого урона при успехе. После неудачного спасброска цель начинает путаться в мыслях на протяжении 1 минуты. В течение этого времени она бросает d6 и вычитает получившееся число из всех её бросков атаки и проверок характеристики. В конце каждого своего хода цель может совершать спасбросок Интеллекта, оканчивая эффект на себе при успехе. Spell/&SynapticStaticTitle=Синаптический разряд diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells01-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells01-zh-CN.txt index 37d47933a0..8cb19f7769 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells01-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells01-zh-CN.txt @@ -123,7 +123,7 @@ Spell/&VoidGraspDescription=你调用了邪恶势力的力量。黑暗能量的 Spell/&VoidGraspTitle=哈达之臂 Spell/&WitchBoltDescription=一道噼啪作响的蓝色能量光束射向范围内的生物,在你和目标之间形成一道持续的闪电弧。对该生物进行远程法术攻击。命中后,目标将受到 1d12 闪电伤害,并且在持续时间内的每个回合中,你可以使用你的动作自动对目标造成 1d12 闪电伤害。如果你使用你的动作做其他任何事情,法术就会结束。如果目标超出法术范围,法术也会结束。当你使用 2 级或更高级别的法术位施放此法术时,伤害每高于 1 级增加 1d12。 Spell/&WitchBoltTitle=巫术箭 -Spell/&WrathfulSmiteDescription=你的下一次攻击造成额外的 1d6 心灵伤害。如果目标在感知豁免检定中失败,它的思想会因痛苦而爆炸,并且会变得害怕。 +Spell/&WrathfulSmiteDescription=在此法术持续时间内,下次你使用近战武器攻击时,你的攻击会造成额外的 1d6 精神伤害。此外,如果目标是生物,它必须进行一次智慧豁免检定,否则会害怕你,直到法术结束。作为一个动作,该生物可以进行一次智慧检定,对抗你的法术豁免 DC,以坚定其决心并结束此法术。 Spell/&WrathfulSmiteTitle=激愤斩 Tooltip/&MustBeWitchBolt=必须被巫术箭标记 Tooltip/&MustNotHaveChaosBoltMark=本回合一定不会成为混乱箭的目标。 diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells03-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells03-zh-CN.txt index 51f855fc91..023b1a6c1a 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells03-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells03-zh-CN.txt @@ -38,7 +38,7 @@ Spell/&AshardalonStrideDescription=龙类翻滚咆哮的火焰环绕你的足部 Spell/&AshardalonStrideTitle=阿莎德隆奔行 Spell/&AuraOfLifeDescription=治疗能量从你身上散发出半径 30 尺的灵光。直到法术结束,灵光会随着你移动,以你为中心。你可以使用附赠动作使灵光中的一个生物(包括你)恢复 2d6 点生命值。 Spell/&AuraOfLifeTitle=活力灵光 -Spell/&BlindingSmiteDescription=在你的下一次攻击中,你的武器会发出耀眼的光芒,并且这次攻击会对目标造成额外的 3d8 光耀伤害。此外,目标必须成功通过体质豁免,否则将被目盲,直到法术结束。\n被此法术目盲的生物在其每个回合结束时进行另一次体质豁免。豁免成功后,它不再目盲。 +Spell/&BlindingSmiteDescription=在该法术持续时间内,下次你用近战武器攻击生物时,你的武器会发出明亮的光芒,并且该攻击会对目标造成额外的 3d8 辐射伤害。此外,目标必须成功进行体质豁免,否则会目盲,直到法术结束。被该法术致盲的生物在其每个回合结束时都会进行另一次体质豁免。成功豁免后,它不再目盲。 Spell/&BlindingSmiteTitle=致盲斩 Spell/&BoomingStepDescription=你将自己传送到范围内可以看到的一个未被占用的空间。在你消失后,一声雷鸣般的轰鸣声响起,你离开的空间 10 尺内的每个生物都必须进行一次体质豁免检定,豁免失败会受到 3d10 雷鸣伤害,豁免成功则受到一半伤害。你还可以传送一位愿意的盟友。当你使用四环或更高的法术位施放该法术时,使用的法术位每比三环高一环,其伤害就增加 1d10。 Spell/&BoomingStepTitle=雷霆步 diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells04-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells04-zh-CN.txt index 0ac50864e4..593cf4f4cd 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells04-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells04-zh-CN.txt @@ -65,7 +65,7 @@ Spell/&PsychicLanceDescription=你从前额向范围内你能看到的生物释 Spell/&PsychicLanceTitle=劳洛希姆心灵长枪 Spell/&SickeningRadianceDescription=昏暗的光线以你在范围内选择的点为中心,在半径 30 英尺的球体内扩散。光线会扩散到各个角落,并持续到法术结束。当生物在一回合中第一次进入法术区域或在该区域开始其回合时,该生物必须成功进行体质豁免检定,否则会受到 4d10 辐射伤害,并且会遭受一级疲劳并在半径 5 英尺内发出昏暗的光线。此光线使生物无法从隐身中获益。法术结束时,光线和此法术造成的任何疲劳程度都会消失。 Spell/&SickeningRadianceTitle=令人作呕的光芒 -Spell/&StaggeringSmiteDescription=在此法术的持续时间内,下次你用武器攻击命中一个生物时,你的武器会刺穿身体和心灵,并且攻击会对目标造成额外的 4d6 心灵伤害。目标必须进行一次感知豁免。豁免失败时,它在攻击检定和能力检定上具有劣势,并且不能做出反应,直到它的下一轮结束。 +Spell/&StaggeringSmiteDescription=在此法术持续时间内,下次你用近战武器攻击生物时,你的武器会穿透目标的身体和心灵,并且这次攻击会对目标造成额外的 4d6 精神伤害。目标必须进行一次感知豁免检定。如果豁免失败,则在攻击检定和能力检定中处于劣势,并且无法做出反应,直到下一回合结束为止。 Spell/&StaggeringSmiteTitle=惊惧斩 Spell/&TreeForestGuardianDescription=你的皮肤看起来像树皮,头发上长出新芽,你将获得以下好处:\n• 你获得 10 点临时生命值。\n• 你在体质豁免检定中具有优势。\n• 你获得基于敏捷和感知的攻击检定优势。\n• 距离你 30 尺内的生物必须进行一次力量豁免检定,否则会在法术持续时间内受到阻碍。他们可以在每个回合开始时重投豁免检定。 Spell/&TreeForestGuardianTitle=森林守护者 diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells05-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells05-zh-CN.txt index 37d31d19d4..89be312054 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells05-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells05-zh-CN.txt @@ -44,7 +44,7 @@ Spell/&SonicBoomDescription=一个与气球颜色相近的小球体出现在你 Spell/&SonicBoomTitle=鸣音爆 Spell/&SteelWhirlwindDescription=你挥动施法时使用的武器,然后消失,像风一样攻击。选择范围内最多五个你可以看到的生物。对每个目标进行近战法术攻击。命中后,目标会受到 6d10 点力场伤害。然后,你可以传送到一个未被占据的、你可以看到的、你命中或失手目标之一的 5 尺内的一处空间。 Spell/&SteelWhirlwindTitle=钢风斩 -Spell/&SwiftQuiverDescription=你对箭筒进行改造,使其产生无限量的非魔法弹药,当你伸手去拿时,这些弹药似乎会跳到你的手中。在咒语结束之前的每个回合中,当你手持两把远程武器时,你可以使用奖励动作进行两次攻击。每次你进行这样的远程攻击时,你的箭筒都会神奇地用一块类似的非魔法弹药替换你使用的弹药。 +Spell/&SwiftQuiverDescription=你对箭筒进行变形,这样当你伸手去拿它时,弹药就会自动跳到你手中。在咒语结束之前,在每个回合中,你都可以使用奖励动作用远程武器进行两次攻击。 Spell/&SwiftQuiverTitle=迅捷箭筒 Spell/&SynapticStaticDescription=你选择范围内的一点,并让灵能在那里爆炸。以该点为中心半径 20 英尺范围内的每个生物都必须进行智力豁免检定。如果豁免失败,目标将受到 8d6 灵能伤害,如果豁免成功,则伤害减半。豁免失败后,目标将陷入混乱,持续 1 分钟。在此期间,目标将掷出一个 d6 并从其所有攻击掷骰和能力检定中减去掷出的数字。目标可以在其每个回合结束时进行智力豁免检定,如果豁免成功,则结束对其自身的效果。 Spell/&SynapticStaticTitle=突触静态 From 779187a72b794768d5dc6380407996c714c78689 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Tue, 10 Sep 2024 10:34:00 -0700 Subject: [PATCH 101/212] fix demonic influence getting all enemies agro on a custom map --- .../ChangelogHistory.txt | 3 ++- .../GameLocationCharacterManagerPatcher.cs | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/SolastaUnfinishedBusiness/ChangelogHistory.txt b/SolastaUnfinishedBusiness/ChangelogHistory.txt index c33291cad8..2c94ea8c9f 100644 --- a/SolastaUnfinishedBusiness/ChangelogHistory.txt +++ b/SolastaUnfinishedBusiness/ChangelogHistory.txt @@ -5,6 +5,7 @@ - fixed Barbarian Sundering Blow interaction with Call Lightning, and other attack proxies - fixed Bardic Inspiration, Indomitable Resistances, and Legendary Resistances save logic - fixed Bend Luck, Flash of Genius, Inspiring Protection, Shield Master, and Weal/Woe reaction consumption +- fixed Demonic Influence adding all location enemies as new contenders [VANILLA] - fixed Dwarven Fortitude, and Magical Guidance incorrectly consuming a reaction - fixed Exploiter feat not checking for reactions from 2nd target onwards - fixed Lucky, and Mage Slayer feats double consumption @@ -15,10 +16,10 @@ - fixed Quickened interaction with melee attack cantrips - fixed Wrathful Smite to do a wisdom ability check against caster DC - improved ability checks to also allow reactions on success [Circle of the Cosmos woe] -- improved Sorcerer Wild Magic tides of chaos, Conversion Slots, and Shorthand versatilities to react on ability checks - improved Maneuvering Attack, and Martial Warlord strategic repositioning to use a run stance - improved mod UI to ensure all settings required to be in sync on MP sessions are now under Gameplay - improved saving roll reaction modal descriptions [Circle of the Cosmos, Sorcerer Wild Magic, etc.] +- improved Sorcerer Wild Magic tides of chaos, Conversion Slots, and Shorthand versatilities to react on ability checks - improved spells documentation dump to include allowed casting classes - improved vanilla to allow reactions on gadget's saving roll [traps] - improved victory modal export behavior to allow heroes not in pool to be exported [VANILLA] diff --git a/SolastaUnfinishedBusiness/Patches/GameLocationCharacterManagerPatcher.cs b/SolastaUnfinishedBusiness/Patches/GameLocationCharacterManagerPatcher.cs index 977cda519b..967890ea94 100644 --- a/SolastaUnfinishedBusiness/Patches/GameLocationCharacterManagerPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/GameLocationCharacterManagerPatcher.cs @@ -14,6 +14,25 @@ namespace SolastaUnfinishedBusiness.Patches; [UsedImplicitly] public static class GameLocationCharacterManagerPatcher { + //BUGFIX: fix demonic influence getting all enemies agro on a custom map + [HarmonyPatch(typeof(GameLocationCharacterManager), nameof(GameLocationCharacterManager.CreateCharacter))] + [SuppressMessage("Minor Code Smell", "S101:Types should be named in PascalCase", Justification = "Patch")] + [UsedImplicitly] + public static class SpawnParty_Patch + { + [UsedImplicitly] + public static void Prefix(Side side, ref GameLocationBehaviourPackage behaviourPackage) + { + if (side == Side.Ally) + { + behaviourPackage ??= new GameLocationBehaviourPackage + { + EncounterId = 424242 + }; + } + } + } + [HarmonyPatch(typeof(GameLocationCharacterManager), nameof(GameLocationCharacterManager.CreateAndBindEffectProxy))] [SuppressMessage("Minor Code Smell", "S101:Types should be named in PascalCase", Justification = "Patch")] From dfe838534e1971466617952bcfb5c2cbbe5f5782 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Tue, 10 Sep 2024 10:35:26 -0700 Subject: [PATCH 102/212] change Searing, Wrathful, Staggering and Blinding smite to be melee weapons only --- .../Spells/SpellBuildersLevel01.cs | 14 ++++++++++++++ .../Spells/SpellBuildersLevel03.cs | 1 + .../Spells/SpellBuildersLevel04.cs | 1 + 3 files changed, 16 insertions(+) diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs index b6fba860fa..3fab5818e1 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs @@ -390,6 +390,7 @@ internal static SpellDefinition BuildSearingSmite() .SetGuiPresentation(NAME, Category.Spell) .SetNotificationTag(NAME) .SetAttackModeOnly() + .SetRequiredProperty(RestrictedContextRequiredProperty.MeleeWeapon) .SetDamageDice(DieType.D6, 1) .SetSpecificDamageType(DamageTypeFire) .SetAdvancement(AdditionalDamageAdvancement.SlotLevel) @@ -465,6 +466,7 @@ internal static SpellDefinition BuildWrathfulSmite() .SetGuiPresentation(NAME, Category.Spell) .SetNotificationTag(NAME) .SetAttackModeOnly() + .SetRequiredProperty(RestrictedContextRequiredProperty.MeleeWeapon) .SetDamageDice(DieType.D6, 1) .SetSpecificDamageType(DamageTypePsychic) .SetAdvancement(AdditionalDamageAdvancement.SlotLevel) @@ -1314,6 +1316,9 @@ internal static SpellDefinition BuildCommand() .Build()) .AddToDB(); + spellApproach.EffectDescription.EffectParticleParameters.conditionParticleReference = new AssetReference(); + spellApproach.EffectDescription.EffectParticleParameters.conditionEndParticleReference = new AssetReference(); + // Flee var conditionFlee = ConditionDefinitionBuilder @@ -1356,6 +1361,9 @@ internal static SpellDefinition BuildCommand() .Build()) .AddToDB(); + spellFlee.EffectDescription.EffectParticleParameters.conditionParticleReference = new AssetReference(); + spellFlee.EffectDescription.EffectParticleParameters.conditionEndParticleReference = new AssetReference(); + // Grovel var conditionGrovel = ConditionDefinitionBuilder @@ -1397,6 +1405,9 @@ internal static SpellDefinition BuildCommand() .Build()) .AddToDB(); + spellGrovel.EffectDescription.EffectParticleParameters.conditionParticleReference = new AssetReference(); + spellGrovel.EffectDescription.EffectParticleParameters.conditionEndParticleReference = new AssetReference(); + // Halt var conditionHalt = ConditionDefinitionBuilder @@ -1443,6 +1454,9 @@ internal static SpellDefinition BuildCommand() .Build()) .AddToDB(); + spellHalt.EffectDescription.EffectParticleParameters.conditionParticleReference = new AssetReference(); + spellHalt.EffectDescription.EffectParticleParameters.conditionEndParticleReference = new AssetReference(); + // Command Spell // MAIN diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel03.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel03.cs index f02ef2c404..38c829dea7 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel03.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel03.cs @@ -102,6 +102,7 @@ internal static SpellDefinition BuildBlindingSmite() .SetGuiPresentation(NAME, Category.Spell) .SetNotificationTag(NAME) .SetAttackModeOnly() + .SetRequiredProperty(RestrictedContextRequiredProperty.MeleeWeapon) .SetDamageDice(DieType.D8, 3) .SetSpecificDamageType(DamageTypeRadiant) .SetSavingThrowData(EffectDifficultyClassComputation.SpellCastingFeature, EffectSavingThrowType.None) diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel04.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel04.cs index ce3e670226..14a563f21b 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel04.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel04.cs @@ -261,6 +261,7 @@ internal static SpellDefinition BuildStaggeringSmite() .SetGuiPresentation(NAME, Category.Spell) .SetNotificationTag(NAME) .SetAttackModeOnly() + .SetRequiredProperty(RestrictedContextRequiredProperty.MeleeWeapon) .SetDamageDice(DieType.D6, 4) .SetSpecificDamageType(DamageTypePsychic) .SetSavingThrowData( From 1ab8a84100e656a96726cf8d384cfe01108afeed Mon Sep 17 00:00:00 2001 From: EnderWiggin Date: Tue, 10 Sep 2024 22:06:32 +0300 Subject: [PATCH 103/212] reverted Booming Blade changes of `e2408f0ce66e8b539dc4ba0e07db9d4f7e756452` commit as it broke the movement damage --- .../Spells/SpellBuildersCantrips.cs | 24 ++++++++++--------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs index 0394957b5f..d60c0ee292 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs @@ -824,8 +824,8 @@ internal static SpellDefinition BuildBoomingBlade() .AddToDB(); conditionBoomingBladeSheathed.possessive = false; - conditionBoomingBladeSheathed.AddCustomSubFeatures( - new OnConditionAddedOrRemovedBoomingBladeSheathed(conditionBoomingBladeSheathed, powerBoomingBladeDamage)); + conditionBoomingBladeSheathed.AddCustomSubFeatures(new ActionFinishedByMeConditionBoomingBladeSheathed( + conditionBoomingBladeSheathed, powerBoomingBladeDamage)); var additionalDamageBoomingBlade = FeatureDefinitionAdditionalDamageBuilder .Create("AdditionalDamageBoomingBlade") @@ -883,21 +883,24 @@ internal static SpellDefinition BuildBoomingBlade() return spell; } - private sealed class OnConditionAddedOrRemovedBoomingBladeSheathed( + private sealed class ActionFinishedByMeConditionBoomingBladeSheathed( ConditionDefinition conditionBoomingBladeSheathed, - FeatureDefinitionPower powerBoomingBladeDamage) : IOnConditionAddedOrRemoved + FeatureDefinitionPower powerBoomingBladeDamage) : IActionFinishedByMe { - public void OnConditionAdded(RulesetCharacter target, RulesetCondition rulesetCondition) + public IEnumerator OnActionFinishedByMe(CharacterAction action) { - // empty - } + if (action.ActionId != Id.TacticalMove) + { + yield break; + } + + var defender = action.ActingCharacter; + var rulesetDefender = defender.RulesetCharacter; - public void OnConditionRemoved(RulesetCharacter rulesetDefender, RulesetCondition rulesetCondition) - { if (!rulesetDefender.TryGetConditionOfCategoryAndType( AttributeDefinitions.TagEffect, conditionBoomingBladeSheathed.Name, out var activeCondition)) { - return; + yield break; } rulesetDefender.RemoveCondition(activeCondition); @@ -905,7 +908,6 @@ public void OnConditionRemoved(RulesetCharacter rulesetDefender, RulesetConditio var rulesetAttacker = EffectHelpers.GetCharacterByGuid(activeCondition.SourceGuid); var attacker = GameLocationCharacter.GetFromActor(rulesetAttacker); var usablePower = PowerProvider.Get(powerBoomingBladeDamage, rulesetAttacker); - var defender = GameLocationCharacter.GetFromActor(rulesetDefender); attacker.MyExecuteActionSpendPower(usablePower, false, defender); } From 83e58a0a718f1da3e85335be256b4fec7489a765 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Tue, 10 Sep 2024 17:31:57 -0700 Subject: [PATCH 104/212] add ExtraConditionInterruption.AttacksWithMeleeAndDamages --- .../ConditionDefinition/ConditionBlindingSmite.json | 2 +- .../ConditionDefinition/ConditionSearingSmite.json | 2 +- .../ConditionDefinition/ConditionStaggeringSmite.json | 2 +- .../ConditionDefinition/ConditionThunderousSmite.json | 2 +- .../ConditionDefinition/ConditionWrathfulSmite.json | 2 +- .../AdditionalDamageBlindingSmite.json | 2 +- .../AdditionalDamageSearingSmite.json | 2 +- .../AdditionalDamageStaggeringSmite.json | 2 +- .../AdditionalDamageWrathfulSmite.json | 2 +- .../Api/GameExtensions/EnumExtensions.cs | 3 ++- .../Patches/CharacterActionAttackPatcher.cs | 7 +++++++ 11 files changed, 18 insertions(+), 10 deletions(-) diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionBlindingSmite.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionBlindingSmite.json index 209f720e25..cd49aaddf6 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionBlindingSmite.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionBlindingSmite.json @@ -18,7 +18,7 @@ "forceTurnOccurence": false, "turnOccurence": "EndOfTurn", "specialInterruptions": [ - "AttacksAndDamages" + 9005 ], "interruptionRequiresSavingThrow": false, "interruptionSavingThrowComputationMethod": "SaveOverride", diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionSearingSmite.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionSearingSmite.json index 21e8e3e099..1740e0add8 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionSearingSmite.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionSearingSmite.json @@ -18,7 +18,7 @@ "forceTurnOccurence": false, "turnOccurence": "EndOfTurn", "specialInterruptions": [ - "AttacksAndDamages" + 9005 ], "interruptionRequiresSavingThrow": false, "interruptionSavingThrowComputationMethod": "SaveOverride", diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionStaggeringSmite.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionStaggeringSmite.json index dc4c2c6eec..e42cb55a06 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionStaggeringSmite.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionStaggeringSmite.json @@ -18,7 +18,7 @@ "forceTurnOccurence": false, "turnOccurence": "EndOfTurn", "specialInterruptions": [ - "AttacksAndDamages" + 9005 ], "interruptionRequiresSavingThrow": false, "interruptionSavingThrowComputationMethod": "SaveOverride", diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionThunderousSmite.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionThunderousSmite.json index b589817715..a426b99eb7 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionThunderousSmite.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionThunderousSmite.json @@ -18,7 +18,7 @@ "forceTurnOccurence": false, "turnOccurence": "EndOfTurn", "specialInterruptions": [ - "AttacksAndDamages" + 9005 ], "interruptionRequiresSavingThrow": false, "interruptionSavingThrowComputationMethod": "SaveOverride", diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionWrathfulSmite.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionWrathfulSmite.json index c9613d6b9e..692dfb4bfc 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionWrathfulSmite.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionWrathfulSmite.json @@ -18,7 +18,7 @@ "forceTurnOccurence": false, "turnOccurence": "EndOfTurn", "specialInterruptions": [ - "AttacksAndDamages" + 9005 ], "interruptionRequiresSavingThrow": false, "interruptionSavingThrowComputationMethod": "SaveOverride", diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAdditionalDamage/AdditionalDamageBlindingSmite.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAdditionalDamage/AdditionalDamageBlindingSmite.json index 249aebab5e..cb63b2422c 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAdditionalDamage/AdditionalDamageBlindingSmite.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAdditionalDamage/AdditionalDamageBlindingSmite.json @@ -6,7 +6,7 @@ "targetSide": "Enemy", "otherSimilarAdditionalDamages": [], "triggerCondition": "AlwaysActive", - "requiredProperty": "None", + "requiredProperty": "MeleeWeapon", "attackModeOnly": true, "attackOnly": false, "requiredTargetCondition": null, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAdditionalDamage/AdditionalDamageSearingSmite.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAdditionalDamage/AdditionalDamageSearingSmite.json index 28282e6073..233b5a50ad 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAdditionalDamage/AdditionalDamageSearingSmite.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAdditionalDamage/AdditionalDamageSearingSmite.json @@ -6,7 +6,7 @@ "targetSide": "Enemy", "otherSimilarAdditionalDamages": [], "triggerCondition": "AlwaysActive", - "requiredProperty": "None", + "requiredProperty": "MeleeWeapon", "attackModeOnly": true, "attackOnly": false, "requiredTargetCondition": null, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAdditionalDamage/AdditionalDamageStaggeringSmite.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAdditionalDamage/AdditionalDamageStaggeringSmite.json index e6be9290b2..bf626b48c4 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAdditionalDamage/AdditionalDamageStaggeringSmite.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAdditionalDamage/AdditionalDamageStaggeringSmite.json @@ -6,7 +6,7 @@ "targetSide": "Enemy", "otherSimilarAdditionalDamages": [], "triggerCondition": "AlwaysActive", - "requiredProperty": "None", + "requiredProperty": "MeleeWeapon", "attackModeOnly": true, "attackOnly": false, "requiredTargetCondition": null, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAdditionalDamage/AdditionalDamageWrathfulSmite.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAdditionalDamage/AdditionalDamageWrathfulSmite.json index ceffc0fb90..a820289be4 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAdditionalDamage/AdditionalDamageWrathfulSmite.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAdditionalDamage/AdditionalDamageWrathfulSmite.json @@ -6,7 +6,7 @@ "targetSide": "Enemy", "otherSimilarAdditionalDamages": [], "triggerCondition": "AlwaysActive", - "requiredProperty": "None", + "requiredProperty": "MeleeWeapon", "attackModeOnly": true, "attackOnly": false, "requiredTargetCondition": null, diff --git a/SolastaUnfinishedBusiness/Api/GameExtensions/EnumExtensions.cs b/SolastaUnfinishedBusiness/Api/GameExtensions/EnumExtensions.cs index be7171b530..290ecd29b2 100644 --- a/SolastaUnfinishedBusiness/Api/GameExtensions/EnumExtensions.cs +++ b/SolastaUnfinishedBusiness/Api/GameExtensions/EnumExtensions.cs @@ -135,7 +135,8 @@ public enum ExtraConditionInterruption AfterWasAttackedNotBySource, AttacksWithWeaponOrUnarmed, SourceRageStop, - UsesBonusAction + UsesBonusAction, + AttacksWithMeleeAndDamages } internal enum ExtraMotionType diff --git a/SolastaUnfinishedBusiness/Patches/CharacterActionAttackPatcher.cs b/SolastaUnfinishedBusiness/Patches/CharacterActionAttackPatcher.cs index 0d60ce24f3..a5ce00d632 100644 --- a/SolastaUnfinishedBusiness/Patches/CharacterActionAttackPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/CharacterActionAttackPatcher.cs @@ -724,6 +724,13 @@ internal static IEnumerator ExecuteImpl(CharacterActionAttack __instance) yield return GuardianAura.ProcessOnCharacterAttackHitFinished( battleManager, actingCharacter, target, attackMode, null, damageReceived); + //PATCH: supports smite spell scenarios + if (attackHasDamaged && !rangeAttack) + { + rulesetCharacter.ProcessConditionsMatchingInterruption( + (ConditionInterruption)ExtraConditionInterruption.AttacksWithMeleeAndDamages, damageReceived); + } + // END PATCH if (attackHasDamaged) From 5a1cbf73388ea640ab66606f5e979de27e8ab295 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Tue, 10 Sep 2024 17:34:00 -0700 Subject: [PATCH 105/212] tweak spells descriptions and icons --- .../ConditionSwiftQuiver.json | 35 +++++----- .../PowerHolyWeapon.json | 10 +-- .../SpellDefinition/CommandSpellApproach.json | 12 ++-- .../SpellDefinition/CommandSpellFlee.json | 12 ++-- .../SpellDefinition/CommandSpellGrovel.json | 12 ++-- .../SpellDefinition/CommandSpellHalt.json | 12 ++-- .../SpellDefinition/HolyWeapon.json | 6 +- .../SpellDefinition/SwiftQuiver.json | 2 +- Documentation/Spells.md | 15 ++--- .../Api/DatabaseHelper-RELEASE.cs | 3 + .../Properties/Resources.Designer.cs | 20 ++++++ .../Properties/Resources.resx | 10 +++ .../Resources/Powers/PowerHolyWeapon.png | Bin 0 -> 26438 bytes .../Resources/Spells/HolyWeapon.png | Bin 0 -> 14882 bytes .../Resources/Spells/SwiftQuiver.png | Bin 12044 -> 14053 bytes .../Spells/SpellBuildersLevel01.cs | 22 ++++-- .../Spells/SpellBuildersLevel03.cs | 2 +- .../Spells/SpellBuildersLevel04.cs | 2 +- .../Spells/SpellBuildersLevel05.cs | 63 +++--------------- .../Translations/de/Others-de.txt | 1 + .../Translations/de/Spells/Spells01-de.txt | 2 +- .../Translations/en/Others-en.txt | 1 + .../Translations/en/Spells/Spells01-en.txt | 2 +- .../Translations/es/Others-es.txt | 1 + .../Translations/es/Spells/Spells01-es.txt | 2 +- .../Translations/fr/Others-fr.txt | 1 + .../Translations/fr/Spells/Spells01-fr.txt | 2 +- .../Translations/it/Others-it.txt | 1 + .../Translations/it/Spells/Spells01-it.txt | 2 +- .../Translations/ja/Others-ja.txt | 1 + .../Translations/ja/Spells/Spells01-ja.txt | 2 +- .../Translations/ko/Others-ko.txt | 1 + .../Translations/ko/Spells/Spells01-ko.txt | 2 +- .../Translations/pt-BR/Others-pt-BR.txt | 1 + .../pt-BR/Spells/Spells01-pt-BR.txt | 2 +- .../Translations/ru/Others-ru.txt | 1 + .../Translations/ru/Spells/Spells01-ru.txt | 2 +- .../Translations/zh-CN/Others-zh-CN.txt | 1 + .../zh-CN/Spells/Spells01-zh-CN.txt | 2 +- 39 files changed, 138 insertions(+), 130 deletions(-) create mode 100644 SolastaUnfinishedBusiness/Resources/Powers/PowerHolyWeapon.png create mode 100644 SolastaUnfinishedBusiness/Resources/Spells/HolyWeapon.png diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionSwiftQuiver.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionSwiftQuiver.json index 5f8e882b0c..0e2aa62869 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionSwiftQuiver.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionSwiftQuiver.json @@ -5,8 +5,8 @@ "conditionType": "Beneficial", "features": [], "allowMultipleInstances": false, - "silentWhenAdded": true, - "silentWhenRemoved": true, + "silentWhenAdded": false, + "silentWhenRemoved": false, "silentWhenRefreshed": false, "terminateWhenRemoved": false, "specialDuration": false, @@ -39,22 +39,27 @@ "conditionStartParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", "m_AssetGUID": "", - "m_SubObjectName": null, - "m_SubObjectType": null + "m_SubObjectName": "", + "m_SubObjectType": "" }, "conditionParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", "m_AssetGUID": "", - "m_SubObjectName": null, - "m_SubObjectType": null + "m_SubObjectName": "", + "m_SubObjectType": "" }, "conditionEndParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", "m_AssetGUID": "", - "m_SubObjectName": null, - "m_SubObjectType": null + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "recurrentEffectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" }, - "recurrentEffectParticleReference": null, "characterShaderReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", "m_AssetGUID": "", @@ -127,14 +132,14 @@ }, "guiPresentation": { "$type": "GuiPresentation, Assembly-CSharp", - "hidden": true, - "title": "Feature/&NoContentTitle", - "description": "Feature/&NoContentTitle", + "hidden": false, + "title": "Spell/&SwiftQuiverTitle", + "description": "Spell/&SwiftQuiverDescription", "spriteReference": { "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": null, - "m_SubObjectType": null + "m_AssetGUID": "7e8c5d4d891953345b54b82e51c6d884", + "m_SubObjectName": "ConditionPositive", + "m_SubObjectType": "UnityEngine.Sprite, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" }, "color": { "$type": "UnityEngine.Color, UnityEngine.CoreModule", diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerHolyWeapon.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerHolyWeapon.json index fcfd9df1be..9cd6c99536 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerHolyWeapon.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerHolyWeapon.json @@ -150,7 +150,7 @@ "$type": "EffectParticleParameters, Assembly-CSharp", "casterParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "3cff2b6f11a2cd649b3fb3fb2c402351", + "m_AssetGUID": "8b9fa0fcdb99d2347a36d25a972de9f5", "m_SubObjectName": "", "m_SubObjectType": "" }, @@ -356,7 +356,7 @@ "abilityScoreBonusToAttack": false, "proficiencyBonusToAttack": false, "uniqueInstance": false, - "showCasting": false, + "showCasting": true, "shortTitleOverride": "", "overriddenPower": null, "includeBaseDescription": false, @@ -367,9 +367,9 @@ "description": "Feature/&PowerHolyWeaponDescription", "spriteReference": { "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", - "m_AssetGUID": "7892e11668806184fb7f0901204e6ddc", - "m_SubObjectName": "SpiritualWeapon", - "m_SubObjectType": "UnityEngine.Sprite, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" + "m_AssetGUID": "fce89a39-76c3-5d2a-8b88-33e80cc88a44", + "m_SubObjectName": null, + "m_SubObjectType": null }, "color": { "$type": "UnityEngine.Color, UnityEngine.CoreModule", diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpellApproach.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpellApproach.json index f2c255a8c0..e416ac52d0 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpellApproach.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpellApproach.json @@ -267,15 +267,15 @@ }, "conditionParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "499a6891e29b20d44a372c4728e9d26b", - "m_SubObjectName": "", - "m_SubObjectType": "" + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null }, "conditionEndParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "5e46102198fad554587b73639eee3b36", - "m_SubObjectName": "", - "m_SubObjectType": "" + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null }, "forceApplyZoneParticle": false, "applyEmissionColorOnWeapons": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpellFlee.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpellFlee.json index ce836e7268..be49031093 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpellFlee.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpellFlee.json @@ -267,15 +267,15 @@ }, "conditionParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "499a6891e29b20d44a372c4728e9d26b", - "m_SubObjectName": "", - "m_SubObjectType": "" + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null }, "conditionEndParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "5e46102198fad554587b73639eee3b36", - "m_SubObjectName": "", - "m_SubObjectType": "" + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null }, "forceApplyZoneParticle": false, "applyEmissionColorOnWeapons": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpellGrovel.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpellGrovel.json index db20ed5203..9f93671eb5 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpellGrovel.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpellGrovel.json @@ -267,15 +267,15 @@ }, "conditionParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "499a6891e29b20d44a372c4728e9d26b", - "m_SubObjectName": "", - "m_SubObjectType": "" + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null }, "conditionEndParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "5e46102198fad554587b73639eee3b36", - "m_SubObjectName": "", - "m_SubObjectType": "" + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null }, "forceApplyZoneParticle": false, "applyEmissionColorOnWeapons": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpellHalt.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpellHalt.json index 48385bbb75..e82a756209 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpellHalt.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpellHalt.json @@ -267,15 +267,15 @@ }, "conditionParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "499a6891e29b20d44a372c4728e9d26b", - "m_SubObjectName": "", - "m_SubObjectType": "" + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null }, "conditionEndParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "5e46102198fad554587b73639eee3b36", - "m_SubObjectName": "", - "m_SubObjectType": "" + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null }, "forceApplyZoneParticle": false, "applyEmissionColorOnWeapons": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/HolyWeapon.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/HolyWeapon.json index 0f24a21f1f..ffd28cf003 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/HolyWeapon.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/HolyWeapon.json @@ -392,9 +392,9 @@ "description": "Spell/&HolyWeaponDescription", "spriteReference": { "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", - "m_AssetGUID": "7892e11668806184fb7f0901204e6ddc", - "m_SubObjectName": "SpiritualWeapon", - "m_SubObjectType": "UnityEngine.Sprite, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" + "m_AssetGUID": "816cf7c6-e845-570d-a975-0b7595f0838f", + "m_SubObjectName": null, + "m_SubObjectType": null }, "color": { "$type": "UnityEngine.Color, UnityEngine.CoreModule", diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/SwiftQuiver.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/SwiftQuiver.json index 343a24b39e..a9b310e79e 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/SwiftQuiver.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/SwiftQuiver.json @@ -127,7 +127,7 @@ "$type": "EffectParticleParameters, Assembly-CSharp", "casterParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "81560ac3813217d4d9fd281d5e73c234", + "m_AssetGUID": "d98f0aac4cd958440a3ebbc9b4a87edc", "m_SubObjectName": "", "m_SubObjectType": "" }, diff --git a/Documentation/Spells.md b/Documentation/Spells.md index 37a5c3018f..6a114bd11f 100644 --- a/Documentation/Spells.md +++ b/Documentation/Spells.md @@ -594,9 +594,7 @@ You ward a creature within range against attack. Until the spell ends, any creat **[Paladin, Ranger]** -On your next hit your weapon flares with white-hot intensity, and the attack deals an extra 1d6 fire damage to the target and causes the target to ignite in flames. -At the start of each of its turns the target must make a successful Constitution saving throw to stop burning, or take 1d6 fire damage. -Higher Levels: for each slot level above 1st, the initial extra damage dealt by the attack increases by 1d6. +The next time you hit a creature with a melee weapon attack during the spell's duration, your weapon flares with white-hot intensity, and the attack deals an extra 1d6 fire damage to the target and causes the target to ignite in flames. At the start of each of its turns until the spell ends, the target must make a Constitution saving throw. On a failed save, it takes 1d6 fire damage. On a successful save, the spells ends. If the target or a creature within 5 feet of it uses an action to put out the flames, or if some other effect douses the flames (such as the target being submerged in water), the spell ends. When you cast this spell using a spell slot of 2nd level or higher, the extra damage increases by 1d6 for each slot level above 1st. # 99. - Shield (V,S) level 1 Abjuration [SOL] @@ -626,7 +624,7 @@ A stream of acid emanates from you in a line 30 feet long and 5 feet wide in a d **[Paladin]** -On your next hit your weapon rings with thunder and the attack deals an extra 2d6 thunder damage to the target. Additionally, if the target is a creature, it must succeed on a Strength saving throw or be pushed 10 ft away from you and knocked prone. +The first time you hit with a melee weapon attack during this spell's duration, your weapon rings with thunder that is audible within 300 feet of you, and the attack deals an extra 2d6 thunder damage to the target. Additionally, if the target is a creature, it must succeed on a Strength saving throw or be pushed 10 feet away from you and knocked prone. # 104. - Thunderwave (V,S) level 1 Evocation [SOL] @@ -649,7 +647,7 @@ A beam of crackling, blue energy lances out toward a creature within range, form **[Paladin]** -Your next hit deals additional 1d6 psychic damage. If target fails WIS saving throw its mind explodes in pain, and it becomes frightened. +The next time you hit with a melee weapon attack during this spell's duration, your attack deals an extra 1d6 psychic damage. Additionally, if the target is a creature, it must make a Wisdom saving throw or be frightened of you until the spell ends. As an action, the creature can make a Wisdom check against your spell save DC to steel its resolve and end this spell. # 108. - *Zephyr Strike* © (V) level 1 Transmutation [Concentration] [UB] @@ -1001,8 +999,7 @@ Curses a creature you can touch. **[Paladin]** -On your next hit your weapon flares with a bright light, and the attack deals an extra 3d8 radiant damage to the target. Additionally, the target must succeed on a Constitution saving throw or be blinded until the spell ends. -A creature blinded by this spell makes another Constitution saving throw at the end of each of its turns. On a successful save, it is no longer blinded. +The next time you hit a creature with a melee weapon attack during this spell's duration, you weapon flares with a bright light, and the attack deals an extra 3d8 radiant damage to the target. Additionally, the target must succeed on a Constitution saving throw or be blinded until the spell ends. A creature blinded by this spell makes another Constitution saving throw at the end of each of its turns. On a successful save, it is no longer blinded. # 166. - Call Lightning (V,S) level 3 Conjuration [Concentration] [SOL] @@ -1400,7 +1397,7 @@ Dim light spreads within a 30-foot-radius sphere centered on a point you choose **[Paladin]** -The next time you hit a creature with a weapon attack during this spell's duration, your weapon pierces both body and mind, and the attack deals an extra 4d6 psychic damage to the target. The target must make a Wisdom saving throw. On a failed save, it has disadvantage on attack rolls and ability checks, and can't take reactions, until the end of its next turn. +The next time you hit a creature with a melee weapon attack during this spell's duration, your weapon pierces both body and mind, and the attack deals an extra 4d6 psychic damage to the target. The target must make a Wisdom saving throw. On a failed save, it has disadvantage on attack rolls and ability checks, and can't take reactions, until the end of its next turn. # 232. - Stoneskin (M,V,S) level 4 Abjuration [Concentration] [SOL] @@ -1568,7 +1565,7 @@ You flourish the weapon used in the casting and then vanish to strike like the w **[Ranger]** -You transmute your quiver so it produces an endless supply of non-magical ammunition, which seems to leap into your hand when you reach for it. On each of your turns until the spell ends, you can use a bonus action to make two attacks when holding a two ranged weapon. Each time you make such a ranged attack, your quiver magically replaces the piece of ammunition you used with a similar piece of non-magical ammunition. +You transmute your quiver so it automatically makes the ammunition leap into your hand when you reach for it. On each of your turns until the spell ends, you can use a bonus action to make two attacks with a ranged weapon. # 260. - *Synaptic Static* © (V) level 5 Evocation [UB] diff --git a/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs b/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs index 461d243a30..66fb94a13c 100644 --- a/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs +++ b/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs @@ -291,6 +291,9 @@ internal static class CharacterSubclassDefinitions internal static class ConditionDefinitions { + internal static ConditionDefinition ConditionSpiderClimb { get; } = + GetDefinition("ConditionSpiderClimb"); + internal static ConditionDefinition ConditionDomainMischiefBorrowedLuck { get; } = GetDefinition("ConditionDomainMischiefBorrowedLuck"); diff --git a/SolastaUnfinishedBusiness/Properties/Resources.Designer.cs b/SolastaUnfinishedBusiness/Properties/Resources.Designer.cs index 68868513ae..4576d4c983 100644 --- a/SolastaUnfinishedBusiness/Properties/Resources.Designer.cs +++ b/SolastaUnfinishedBusiness/Properties/Resources.Designer.cs @@ -1979,6 +1979,16 @@ public static byte[] HeroicInfusion { } } + /// + /// Looks up a localized resource of type System.Byte[]. + /// + public static byte[] HolyWeapon { + get { + object obj = ResourceManager.GetObject("HolyWeapon", resourceCulture); + return ((byte[])(obj)); + } + } + /// /// Looks up a localized resource of type System.Byte[]. /// @@ -3352,6 +3362,16 @@ public static byte[] PowerHelp { } } + /// + /// Looks up a localized resource of type System.Byte[]. + /// + public static byte[] PowerHolyWeapon { + get { + object obj = ResourceManager.GetObject("PowerHolyWeapon", resourceCulture); + return ((byte[])(obj)); + } + } + /// /// Looks up a localized resource of type System.Byte[]. /// diff --git a/SolastaUnfinishedBusiness/Properties/Resources.resx b/SolastaUnfinishedBusiness/Properties/Resources.resx index 33cba321e6..bf80f5ed8d 100644 --- a/SolastaUnfinishedBusiness/Properties/Resources.resx +++ b/SolastaUnfinishedBusiness/Properties/Resources.resx @@ -152,6 +152,16 @@ PublicKeyToken=b77a5c561934e089 + + ../Resources/Spells/HolyWeapon.png;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + ../Resources/Powers/PowerHolyWeapon.png;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + ../Resources/Spells/SwiftQuiver.png;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 diff --git a/SolastaUnfinishedBusiness/Resources/Powers/PowerHolyWeapon.png b/SolastaUnfinishedBusiness/Resources/Powers/PowerHolyWeapon.png new file mode 100644 index 0000000000000000000000000000000000000000..d4813cbb9f3d865a4fe11b7f31f57085048d40c5 GIT binary patch literal 26438 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 literal 0 HcmV?d00001 diff --git a/SolastaUnfinishedBusiness/Resources/Spells/HolyWeapon.png b/SolastaUnfinishedBusiness/Resources/Spells/HolyWeapon.png new file mode 100644 index 0000000000000000000000000000000000000000..057dfa88f0c76447bc555e284d2b0c0d9cc94cab GIT binary patch literal 14882 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 U_58)c0ssI207*qoM6N<$f&gw}W&i*H literal 0 HcmV?d00001 diff --git a/SolastaUnfinishedBusiness/Resources/Spells/SwiftQuiver.png b/SolastaUnfinishedBusiness/Resources/Spells/SwiftQuiver.png index a7e186b437dd69294665cb336f3135af0a30aa92..79aee785df9044d4edb65b669765880e871d630a 100644 GIT binary patch literal 14053 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 X&`2(m{K!>y00000NkvXXu0mjfg4V+d literal 12044 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 GetAttackModes([NotNull] RulesetChara } var strikeDefinition = item.ItemDefinition; - var weaponDescription = strikeDefinition.WeaponDescription; - var removedTag = weaponDescription.WeaponTags.Remove(TagsDefinitions.WeaponTagAmmunition); - var attackMode = hero.RefreshAttackMode( ActionType, strikeDefinition, @@ -1222,11 +1182,6 @@ protected override List GetAttackModes([NotNull] RulesetChara item ); - if (removedTag) - { - weaponDescription.WeaponTags.Add(TagsDefinitions.WeaponTagAmmunition); - } - attackMode.AttacksNumber = 2; return [attackMode]; diff --git a/SolastaUnfinishedBusiness/Translations/de/Others-de.txt b/SolastaUnfinishedBusiness/Translations/de/Others-de.txt index b85520f557..dcc68cacb2 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Others-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Others-de.txt @@ -307,6 +307,7 @@ Tooltip/&Tag9000Title=Benutzerdefinierter Effekt Tooltip/&TagDamageChaosBoltTitle=Chaotischer Schaden Tooltip/&TagUnfinishedBusinessTitle=Unerledigte Aufgabe Tooltip/&TargetMeleeWeaponError=Auf dieses Ziel kann kein Nahkampfangriff ausgeführt werden, da es sich nicht innerhalb von {0} befindet +Tooltip/&TargetMustNotBeSurprised=Das Ziel darf nicht überrascht werden Tooltip/&TargetMustUnderstandYou=Das Ziel muss Ihren Befehl verstehen UI/&CustomFeatureSelectionStageDescription=Wählen Sie zusätzliche Funktionen für Ihre Klasse/Unterklasse aus. UI/&CustomFeatureSelectionStageFeatures=Merkmale diff --git a/SolastaUnfinishedBusiness/Translations/de/Spells/Spells01-de.txt b/SolastaUnfinishedBusiness/Translations/de/Spells/Spells01-de.txt index 16ead399c5..3ba0e58142 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Spells/Spells01-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Spells/Spells01-de.txt @@ -115,7 +115,7 @@ Spell/&StrikeWithTheWindDescription=Du bewegst dich wie der Wind. Während der D Spell/&StrikeWithTheWindTitle=Zephyr-Schlag Spell/&SubSpellChromaticOrbDescription=Die Kreatur erleidet 3W8 {0} Schaden. Spell/&SubSpellSkinOfRetributionDescription=Die Kreatur erleidet 5 {0} pro Zauberstufe. -Spell/&ThunderousSmiteDescription=Bei Ihrem nächsten Schlag erklingt Donner aus Ihrer Waffe und der Angriff fügt dem Ziel zusätzliche 2W6 Donnerschaden zu. Wenn das Ziel eine Kreatur ist, muss es außerdem einen Rettungswurf für Stärke bestehen oder wird 3 Meter von Ihnen weggestoßen und niedergeschlagen. +Spell/&ThunderousSmiteDescription=Wenn du während der Dauer dieses Zaubers zum ersten Mal mit einem Nahkampfangriff triffst, erklingt ein Donnergrollen aus deiner Waffe, das in einem Umkreis von 300 Fuß zu hören ist, und der Angriff fügt dem Ziel zusätzlich 2W6 Donnerschaden zu. Wenn das Ziel eine Kreatur ist, muss es außerdem einen Rettungswurf für Stärke bestehen, oder es wird 10 Fuß von dir weggestoßen und niedergeschlagen. Spell/&ThunderousSmiteTitle=Donnernder Schlag Spell/&VileBrewDescription=Ein Säurestrahl geht in einer 30 Fuß langen und 5 Fuß breiten Linie von dir in eine von dir gewählte Richtung aus. Jede Kreatur in der Linie muss einen Rettungswurf für Geschicklichkeit bestehen oder ist für die Dauer des Zaubers oder bis eine Kreatur ihre Aktion nutzt, um die Säure von sich selbst oder einer anderen Kreatur abzukratzen oder abzuwaschen, mit Säure bedeckt. Eine mit Säure bedeckte Kreatur erleidet zu Beginn jedes ihrer Züge 2W4 Säureschaden. Wenn du diesen Zauber mit einem Zauberplatz der 2. Stufe oder höher wirkst, erhöht sich der Schaden um 2W4 für jeden Platzlevel über der 1. Spell/&VileBrewTitle=Tashas ätzendes Gebräu diff --git a/SolastaUnfinishedBusiness/Translations/en/Others-en.txt b/SolastaUnfinishedBusiness/Translations/en/Others-en.txt index 82d4481966..60ef150a58 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Others-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Others-en.txt @@ -308,6 +308,7 @@ Tooltip/&TagDamageChaosBoltTitle=Chaotic Damage Tooltip/&TagUnfinishedBusinessTitle=Unfinished Business Tooltip/&TargetMeleeWeaponError=Can't perform melee attack on this target as not within {0} Tooltip/&TargetMustUnderstandYou=Target must understand your command +Tooltip/&TargetMustNotBeSurprised=Target must not be surprised UI/&CustomFeatureSelectionStageDescription=Select extra features for your class/subclass. UI/&CustomFeatureSelectionStageFeatures=Features UI/&CustomFeatureSelectionStageNotDone=You must select all available features before proceeding diff --git a/SolastaUnfinishedBusiness/Translations/en/Spells/Spells01-en.txt b/SolastaUnfinishedBusiness/Translations/en/Spells/Spells01-en.txt index b2a9a6d8af..d9fdb17dc2 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Spells/Spells01-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Spells/Spells01-en.txt @@ -115,7 +115,7 @@ Spell/&StrikeWithTheWindDescription=You move like the wind. For the duration, yo Spell/&StrikeWithTheWindTitle=Zephyr Strike Spell/&SubSpellChromaticOrbDescription=The creature takes 3d8 {0} damage. Spell/&SubSpellSkinOfRetributionDescription=The creature takes 5 {0} per spell level. -Spell/&ThunderousSmiteDescription=On your next hit your weapon rings with thunder and the attack deals an extra 2d6 thunder damage to the target. Additionally, if the target is a creature, it must succeed on a Strength saving throw or be pushed 10 ft away from you and knocked prone. +Spell/&ThunderousSmiteDescription=The first time you hit with a melee weapon attack during this spell's duration, your weapon rings with thunder that is audible within 300 feet of you, and the attack deals an extra 2d6 thunder damage to the target. Additionally, if the target is a creature, it must succeed on a Strength saving throw or be pushed 10 feet away from you and knocked prone. Spell/&ThunderousSmiteTitle=Thunderous Smite Spell/&VileBrewDescription=A stream of acid emanates from you in a line 30 feet long and 5 feet wide in a direction you choose. Each creature in the line must succeed on a Dexterity saving throw or be covered in acid for the spell's duration or until a creature uses its action to scrape or wash the acid off itself or another creature. A creature covered in the acid takes 2d4 acid damage at start of each of its turns. When you cast this spell using a spell slot 2nd level or higher, the damage increases by 2d4 for each slot level above 1st. Spell/&VileBrewTitle=Tasha's Caustic Brew diff --git a/SolastaUnfinishedBusiness/Translations/es/Others-es.txt b/SolastaUnfinishedBusiness/Translations/es/Others-es.txt index 0789a358a0..b3ccd932b4 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Others-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Others-es.txt @@ -307,6 +307,7 @@ Tooltip/&Tag9000Title=Efecto personalizado Tooltip/&TagDamageChaosBoltTitle=Daño caótico Tooltip/&TagUnfinishedBusinessTitle=Negocios inconclusos Tooltip/&TargetMeleeWeaponError=No se puede realizar un ataque cuerpo a cuerpo contra este objetivo porque no está dentro de {0} +Tooltip/&TargetMustNotBeSurprised=El objetivo no debe sorprenderse Tooltip/&TargetMustUnderstandYou=El objetivo debe comprender tu orden UI/&CustomFeatureSelectionStageDescription=Seleccione funciones adicionales para su clase/subclase. UI/&CustomFeatureSelectionStageFeatures=Características diff --git a/SolastaUnfinishedBusiness/Translations/es/Spells/Spells01-es.txt b/SolastaUnfinishedBusiness/Translations/es/Spells/Spells01-es.txt index 9dcfb3fb32..1062f3983e 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Spells/Spells01-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Spells/Spells01-es.txt @@ -115,7 +115,7 @@ Spell/&StrikeWithTheWindDescription=Te mueves como el viento. Mientras dura el h Spell/&StrikeWithTheWindTitle=Golpe de céfiro Spell/&SubSpellChromaticOrbDescription=La criatura recibe 3d8 {0} de daño. Spell/&SubSpellSkinOfRetributionDescription=La criatura recibe 5 {0} por nivel de hechizo. -Spell/&ThunderousSmiteDescription=En tu siguiente golpe, tu arma suena con un trueno y el ataque inflige 2d6 daños adicionales por trueno al objetivo. Además, si el objetivo es una criatura, debe superar una tirada de salvación de Fuerza o ser empujado a 10 pies de distancia de ti y derribado. +Spell/&ThunderousSmiteDescription=La primera vez que golpeas con un ataque de arma cuerpo a cuerpo durante la duración de este hechizo, tu arma resuena con un trueno que se oye a 300 pies de ti y el ataque inflige 2d6 puntos de daño por trueno adicionales al objetivo. Además, si el objetivo es una criatura, debe superar una tirada de salvación de Fuerza o será empujado 10 pies lejos de ti y derribado. Spell/&ThunderousSmiteTitle=Golpe atronador Spell/&VileBrewDescription=Un chorro de ácido emana de ti en una línea de 30 pies de largo y 5 pies de ancho en la dirección que elijas. Cada criatura en la línea debe superar una tirada de salvación de Destreza o quedará cubierta de ácido durante la duración del conjuro o hasta que una criatura use su acción para raspar o lavar el ácido de sí misma o de otra criatura. Una criatura cubierta de ácido recibe 2d4 puntos de daño por ácido al comienzo de cada uno de sus turnos. Cuando lanzas este conjuro usando un espacio de conjuro de nivel 2 o superior, el daño aumenta en 2d4 por cada nivel de espacio por encima del 1. Spell/&VileBrewTitle=El brebaje cáustico de Tasha diff --git a/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt index 69a6cbe45d..43a200aa95 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt @@ -307,6 +307,7 @@ Tooltip/&Tag9000Title=Effet personnalisé Tooltip/&TagDamageChaosBoltTitle=Dégâts chaotiques Tooltip/&TagUnfinishedBusinessTitle=Inachevé Tooltip/&TargetMeleeWeaponError=Impossible d'effectuer une attaque au corps à corps sur cette cible car elle se trouve à {0} +Tooltip/&TargetMustNotBeSurprised=La cible ne doit pas être surprise Tooltip/&TargetMustUnderstandYou=La cible doit comprendre votre commande UI/&CustomFeatureSelectionStageDescription=Sélectionnez des fonctionnalités supplémentaires pour votre classe/sous-classe. UI/&CustomFeatureSelectionStageFeatures=Caractéristiques diff --git a/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells01-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells01-fr.txt index fa018a8a7f..e162205066 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells01-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells01-fr.txt @@ -115,7 +115,7 @@ Spell/&StrikeWithTheWindDescription=Tu bouges comme le vent. Pendant toute sa du Spell/&StrikeWithTheWindTitle=Frappe de Zephyr Spell/&SubSpellChromaticOrbDescription=La créature subit 3d8 {0} dégâts. Spell/&SubSpellSkinOfRetributionDescription=La créature prend 5 {0} par niveau de sort. -Spell/&ThunderousSmiteDescription=Lors de votre prochain coup, votre arme émet un tonnerre et l'attaque inflige 2d6 dégâts de tonnerre supplémentaires à la cible. De plus, si la cible est une créature, elle doit réussir un jet de sauvegarde de Force ou être poussée à 3 mètres de vous et mise à terre. +Spell/&ThunderousSmiteDescription=La première fois que vous touchez avec une arme de mêlée pendant la durée de ce sort, votre arme résonne d'un tonnerre audible à 90 mètres de vous et l'attaque inflige 2d6 dégâts de tonnerre supplémentaires à la cible. De plus, si la cible est une créature, elle doit réussir un jet de sauvegarde de Force ou être poussée à 3 mètres de vous et mise à terre. Spell/&ThunderousSmiteTitle=Frappe tonitruante Spell/&VileBrewDescription=Un jet d'acide jaillit de vous sur une ligne de 9 mètres de long et 1,5 mètre de large dans une direction choisie. Chaque créature sur la ligne doit réussir un jet de sauvegarde de Dextérité ou être couverte d'acide pendant la durée du sort ou jusqu'à ce qu'une créature utilise son action pour gratter ou laver l'acide sur elle-même ou sur une autre créature. Une créature couverte d'acide subit 2d4 dégâts d'acide au début de chacun de ses tours. Lorsque vous lancez ce sort en utilisant un emplacement de sort de niveau 2 ou supérieur, les dégâts augmentent de 2d4 pour chaque niveau d'emplacement supérieur au niveau 1. Spell/&VileBrewTitle=La boisson caustique de Tasha diff --git a/SolastaUnfinishedBusiness/Translations/it/Others-it.txt b/SolastaUnfinishedBusiness/Translations/it/Others-it.txt index 3fa3fb7481..70060ff774 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Others-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Others-it.txt @@ -307,6 +307,7 @@ Tooltip/&Tag9000Title=Effetto personalizzato Tooltip/&TagDamageChaosBoltTitle=Danno caotico Tooltip/&TagUnfinishedBusinessTitle=Lavoro incompleto Tooltip/&TargetMeleeWeaponError=Non è possibile eseguire un attacco corpo a corpo su questo bersaglio poiché non si trova entro {0} +Tooltip/&TargetMustNotBeSurprised=Il bersaglio non deve essere sorpreso Tooltip/&TargetMustUnderstandYou=Il bersaglio deve capire il tuo comando UI/&CustomFeatureSelectionStageDescription=Seleziona funzionalità extra per la tua classe/sottoclasse. UI/&CustomFeatureSelectionStageFeatures=Caratteristiche diff --git a/SolastaUnfinishedBusiness/Translations/it/Spells/Spells01-it.txt b/SolastaUnfinishedBusiness/Translations/it/Spells/Spells01-it.txt index 3316ab001d..c6204d2950 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Spells/Spells01-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Spells/Spells01-it.txt @@ -115,7 +115,7 @@ Spell/&StrikeWithTheWindDescription=Ti muovi come il vento. Per la durata, il tu Spell/&StrikeWithTheWindTitle=Colpo di Zefiro Spell/&SubSpellChromaticOrbDescription=La creatura subisce 3d8 {0} danni. Spell/&SubSpellSkinOfRetributionDescription=La creatura subisce 5 {0} per livello dell'incantesimo. -Spell/&ThunderousSmiteDescription=Al tuo prossimo colpo la tua arma risuona di tuono e l'attacco infligge 2d6 danni da tuono extra al bersaglio. Inoltre, se il bersaglio è una creatura, deve superare un tiro salvezza su Forza o essere spinto a 10 piedi di distanza da te e buttato a terra prono. +Spell/&ThunderousSmiteDescription=La prima volta che colpisci con un attacco con arma da mischia durante la durata di questo incantesimo, la tua arma risuona di un tuono udibile entro 300 piedi da te e l'attacco infligge 2d6 danni da tuono extra al bersaglio. Inoltre, se il bersaglio è una creatura, deve superare un tiro salvezza su Forza o essere spinto a 10 piedi di distanza da te e buttato a terra prono. Spell/&ThunderousSmiteTitle=Colpo fragoroso Spell/&VileBrewDescription=Un flusso di acido emana da te lungo una linea lunga 9 metri e larga 1,5 metri in una direzione a tua scelta. Ogni creatura nella linea deve riuscire in un tiro salvezza di Destrezza o essere ricoperta di acido per la durata dell'incantesimo o finché una creatura non usa la sua azione per raschiare o lavare via l'acido da se stessa o da un'altra creatura. Una creatura coperta dall'acido subisce 2d4 danni da acido all'inizio di ciascuno dei suoi turni. Quando esegui questo incantesimo utilizzando uno slot incantesimo di 2° livello o superiore, il danno aumenta di 2d4 per ogni livello di slot superiore al 1°. Spell/&VileBrewTitle=La bevanda caustica di Tasha diff --git a/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt index 7eda0f6e51..a9ced391d1 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt @@ -307,6 +307,7 @@ Tooltip/&Tag9000Title=カスタムエフェクト Tooltip/&TagDamageChaosBoltTitle=カオスダメージ Tooltip/&TagUnfinishedBusinessTitle=未完の仕事 Tooltip/&TargetMeleeWeaponError={0} 内にないため、このターゲットに近接攻撃を実行できません +Tooltip/&TargetMustNotBeSurprised=ターゲットは驚いてはいけない Tooltip/&TargetMustUnderstandYou=ターゲットはあなたのコマンドを理解する必要があります UI/&CustomFeatureSelectionStageDescription=クラス/サブクラスの追加機能を選択します。 UI/&CustomFeatureSelectionStageFeatures=特徴 diff --git a/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells01-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells01-ja.txt index c4c2b0fedb..d4196bca73 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells01-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells01-ja.txt @@ -115,7 +115,7 @@ Spell/&StrikeWithTheWindDescription=あなたは風のように動きます。 Spell/&StrikeWithTheWindTitle=ゼファーストライク Spell/&SubSpellChromaticOrbDescription=そのクリーチャーは3d8の{0}ダメージを受ける。 Spell/&SubSpellSkinOfRetributionDescription=クリーチャーは呪文レベルごとに 5 {0} を消費します。 -Spell/&ThunderousSmiteDescription=次の攻撃で武器が雷鳴を上げ、攻撃はターゲットに追加の 2d6 雷ダメージを与えます。さらに、ターゲットがクリーチャーの場合は、ストレングスセーヴィングスローに成功するか、10フィート離れて押し倒されてうつ伏せになる必要があります。 +Spell/&ThunderousSmiteDescription=この呪文の持続時間中に近接武器攻撃で初めて命中すると、武器が雷鳴を響かせ、その音が 300 フィート以内で聞こえ、攻撃はターゲットに追加で 2d6 の雷ダメージを与えます。さらに、ターゲットがクリーチャーの場合、筋力セーヴィング スローに成功するか、10 フィート離れた場所に押し出されてうつ伏せになります。 Spell/&ThunderousSmiteTitle=サンダース・スマイト Spell/&VileBrewDescription=酸の流れが、長さ 30 フィート、幅 5 フィートの線となって、選択した方向に放射されます。列内の各クリーチャーは、器用さセーヴィング・スローに成功するか、呪文の持続時間中、またはクリーチャーがそのアクションを使用して自分自身または他のクリーチャーから酸をこすり落とすか洗い流すまで、酸で覆われなければなりません。酸に覆われたクリーチャーは、各ターンの開始時に 2d4 の酸ダメージを受けます。あなたが第 2 レベル以上の呪文スロットを使用してこの呪文を唱えると、ダメージは第 1 レベル以上のスロット レベルごとに 2d4 増加します。 Spell/&VileBrewTitle=ターシャのコースティック ブリュー diff --git a/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt index 1e88e9267f..21e75ef63c 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt @@ -307,6 +307,7 @@ Tooltip/&Tag9000Title=맞춤 효과 Tooltip/&TagDamageChaosBoltTitle=혼돈스러운 피해 Tooltip/&TagUnfinishedBusinessTitle=끝나지 않은 사업 Tooltip/&TargetMeleeWeaponError={0} 내에 없기 때문에 이 대상에 근접 공격을 수행할 수 없습니다. +Tooltip/&TargetMustNotBeSurprised=타겟은 놀라지 않아야 합니다. Tooltip/&TargetMustUnderstandYou=타겟은 당신의 명령을 이해해야 합니다 UI/&CustomFeatureSelectionStageDescription=클래스/하위 클래스에 대한 추가 기능을 선택하세요. UI/&CustomFeatureSelectionStageFeatures=특징 diff --git a/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells01-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells01-ko.txt index 1cfae70751..c96e0640e2 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells01-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells01-ko.txt @@ -115,7 +115,7 @@ Spell/&StrikeWithTheWindDescription=당신은 바람처럼 움직입니다. 해 Spell/&StrikeWithTheWindTitle=제퍼 스트라이크 Spell/&SubSpellChromaticOrbDescription=그 생물은 3d8 {0} 피해를 입습니다. Spell/&SubSpellSkinOfRetributionDescription=생물은 주문 레벨당 5{0}를 받습니다. -Spell/&ThunderousSmiteDescription=다음 공격 시 무기가 천둥소리를 내며 공격은 대상에게 추가로 2d6 천둥 피해를 입힙니다. 추가로, 대상이 생물인 경우, 근력 내성 굴림에 성공해야 하며 그렇지 않으면 당신에게서 10피트 떨어진 곳으로 밀려나 넘어지게 됩니다. +Spell/&ThunderousSmiteDescription=이 주문의 지속 시간 동안 근접 무기 공격을 처음 적중시키면, 무기에서 300피트 이내에서 들리는 천둥 소리가 울리고, 공격은 대상에게 추가로 2d6의 천둥 피해를 입힙니다. 추가로, 대상이 생명체인 경우, 힘 구원 굴림에 성공해야 하며, 그렇지 않으면 10피트 떨어진 곳으로 밀려나 엎어지게 됩니다. Spell/&ThunderousSmiteTitle=천둥의 일격 Spell/&VileBrewDescription=당신이 선택한 방향으로 길이 30피트, 너비 5피트의 줄을 따라 산성의 흐름이 당신에게서 나옵니다. 줄에 있는 각 생물은 민첩 내성 굴림에 성공해야 하며, 주문이 지속되는 동안 또는 생물이 자신이나 다른 생물에서 산을 긁어내거나 씻어내기 위해 행동을 사용할 때까지 산으로 덮여 있어야 합니다. 산으로 뒤덮인 생물은 매 턴 시작 시 2d4의 산 피해를 입습니다. 2레벨 이상의 주문 슬롯을 사용하여 이 주문을 시전하면 1레벨 이상의 슬롯 레벨마다 피해가 2d4씩 증가합니다. Spell/&VileBrewTitle=타샤의 부식성 맥주 diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt index 4e7549407f..010d46ec4a 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt @@ -307,6 +307,7 @@ Tooltip/&Tag9000Title=Efeito personalizado Tooltip/&TagDamageChaosBoltTitle=Dano Caótico Tooltip/&TagUnfinishedBusinessTitle=Negócios inacabados Tooltip/&TargetMeleeWeaponError=Não é possível realizar ataque corpo a corpo neste alvo, pois ele não está a {0} +Tooltip/&TargetMustNotBeSurprised=O alvo não deve ser surpreendido Tooltip/&TargetMustUnderstandYou=O alvo deve entender seu comando UI/&CustomFeatureSelectionStageDescription=Selecione recursos extras para sua classe/subclasse. UI/&CustomFeatureSelectionStageFeatures=Características diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells01-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells01-pt-BR.txt index 79ff95df60..19e0c5203d 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells01-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells01-pt-BR.txt @@ -115,7 +115,7 @@ Spell/&StrikeWithTheWindDescription=Você se move como o vento. Durante a duraç Spell/&StrikeWithTheWindTitle=Ataque Zephyr Spell/&SubSpellChromaticOrbDescription=A criatura sofre 3d8 {0} de dano. Spell/&SubSpellSkinOfRetributionDescription=A criatura recebe 5 {0} por nível de magia. -Spell/&ThunderousSmiteDescription=No seu próximo golpe, sua arma ressoa com trovão e o ataque causa 2d6 de dano de trovão extra ao alvo. Além disso, se o alvo for uma criatura, ele deve ter sucesso em um teste de resistência de Força ou será empurrado 10 pés para longe de você e derrubado. +Spell/&ThunderousSmiteDescription=A primeira vez que você acerta com um ataque de arma corpo a corpo durante a duração desta magia, sua arma ressoa com um trovão que é audível a até 300 pés de você, e o ataque causa 2d6 de dano de trovão extra ao alvo. Além disso, se o alvo for uma criatura, ele deve ter sucesso em um teste de resistência de Força ou será empurrado 10 pés para longe de você e derrubado. Spell/&ThunderousSmiteTitle=Golpe Trovejante Spell/&VileBrewDescription=Um fluxo de ácido emana de você em uma linha de 30 pés de comprimento e 5 pés de largura em uma direção que você escolher. Cada criatura na linha deve ser bem-sucedida em um teste de resistência de Destreza ou ficará coberta de ácido pela duração da magia ou até que uma criatura use sua ação para raspar ou lavar o ácido de si mesma ou de outra criatura. Uma criatura coberta de ácido sofre 2d4 de dano de ácido no início de cada um de seus turnos. Quando você conjura esta magia usando um espaço de magia de 2º nível ou superior, o dano aumenta em 2d4 para cada nível de espaço acima do 1º. Spell/&VileBrewTitle=Poção cáustica de Tasha diff --git a/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt index 40ecc26c33..7d132237c0 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt @@ -307,6 +307,7 @@ Tooltip/&Tag9000Title=Кастомный эффект Tooltip/&TagDamageChaosBoltTitle=Хаотичный урон Tooltip/&TagUnfinishedBusinessTitle=Неоконченное Дело Tooltip/&TargetMeleeWeaponError=Невозможно провести атаку ближнего боя по этой цели, так как она находится вне пределов {0} +Tooltip/&TargetMustNotBeSurprised=Цель не должна быть застигнута врасплох Tooltip/&TargetMustUnderstandYou=Цель должна понимать ваш приказ UI/&CustomFeatureSelectionStageDescription=Выберите дополнительные черты для вашего класса/архетипа. UI/&CustomFeatureSelectionStageFeatures=Черты diff --git a/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells01-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells01-ru.txt index 0873b79d51..a58c6e6800 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells01-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells01-ru.txt @@ -115,7 +115,7 @@ Spell/&StrikeWithTheWindDescription=Вы движетесь подобно ве Spell/&StrikeWithTheWindTitle=Удар Зефира Spell/&SubSpellChromaticOrbDescription=Существо получает 3d8 урона типа {0}. Spell/&SubSpellSkinOfRetributionDescription=Существо получает 5 урона типа {0} за уровень заклинания. -Spell/&ThunderousSmiteDescription=Когда вы в следующий раз попадаете рукопашной атакой оружием, пока заклинание активно, ваше оружие издаёт громовой рокот, и атака причиняет цели дополнительный урон звуком 2к6. Кроме того, если цель — существо, она должна преуспеть в спасброске Силы, иначе она будет оттолкнута на 10 футов от вас и сбита с ног. +Spell/&ThunderousSmiteDescription=В первый раз, когда вы наносите удар оружием ближнего боя во время действия этого заклинания, ваше оружие звенит громом, который слышен в радиусе 300 футов от вас, и атака наносит цели дополнительный урон громом 2d6. Кроме того, если цель — существо, она должна преуспеть в спасброске Силы или будет отброшена на 10 футов от вас и сбита с ног. Spell/&ThunderousSmiteTitle=Громовая кара Spell/&VileBrewDescription=Вы испускаете струю кислоты вдоль линии длиной 30 футов и шириной 5 футов в выбранном вами направлении. Каждое существо, находящееся на этой линии должно преуспеть в спасброске Ловкости, иначе станет покрыто кислотой на время действия заклинания или до тех пор, пока кто-то действием не соскребёт или смоет кислоту с себя или другого существа. Существо, покрытое кислотой, получает 2d4 урона кислотой в начале каждого своего хода. Когда вы накладываете это заклинание, используя ячейку 2-го уровня или выше, урон увеличивается на 2d4 за каждый уровень ячейки выше первого. Spell/&VileBrewTitle=Едкое варево Таши diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt index 0c50481df0..458fa7d1db 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt @@ -307,6 +307,7 @@ Tooltip/&Tag9000Title=自定义效果 Tooltip/&TagDamageChaosBoltTitle=混沌伤害 Tooltip/&TagUnfinishedBusinessTitle=未竟之业 Tooltip/&TargetMeleeWeaponError=无法对该目标进行近战攻击,因为目标不在{0}内 +Tooltip/&TargetMustNotBeSurprised=目标不能感到惊讶 Tooltip/&TargetMustUnderstandYou=目标必须理解你的命令 UI/&CustomFeatureSelectionStageDescription=为你的职业/子职业选择额外的特性。 UI/&CustomFeatureSelectionStageFeatures=专长 diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells01-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells01-zh-CN.txt index 8cb19f7769..5210ad96eb 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells01-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells01-zh-CN.txt @@ -115,7 +115,7 @@ Spell/&StrikeWithTheWindDescription=你像风一样移动。在此期间,你 Spell/&StrikeWithTheWindTitle=西风打击 Spell/&SubSpellChromaticOrbDescription=该生物受到 3d8 {0} 点伤害。 Spell/&SubSpellSkinOfRetributionDescription=该生物每法术环阶需要 5 {0}。 -Spell/&ThunderousSmiteDescription=在你的下一次命中时,你的武器会响起雷声,并且攻击会对目标造成额外的 2d6 雷鸣伤害。此外,如果目标是生物,则它必须通过一次力量豁免检定,否则就会被推离你 10 尺并被击倒。 +Spell/&ThunderousSmiteDescription=在该法术持续时间内,你第一次使用近战武器攻击时,你的武器会发出雷鸣声,距离你 300 英尺内均可听到,并且该攻击会对目标造成额外的 2d6 雷电伤害。此外,如果目标是生物,它必须成功进行力量豁免检定,否则将被推离你 10 英尺并被击倒。 Spell/&ThunderousSmiteTitle=雷鸣斩 Spell/&VileBrewDescription=一股酸流从你身上喷出,沿你选择的方向排成一条 30 尺长、5 尺宽的线。队伍中的每个生物都必须成功通过敏捷豁免检定,或者在法术持续时间内被酸液覆盖,或者直到一个生物使用其动作刮掉或洗掉自己或另一个生物上的酸液。被酸液覆盖的生物在每个回合开始时都会受到 2d4 点强酸伤害。当你使用 2 环或更高环阶的法术位施放此法术时,每高于 1 环的法术位环阶,伤害就会增加 2d4。 Spell/&VileBrewTitle=塔莎酸蚀酿 From f6f9d00135d3f0a553a71d30244888e2500313ea Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Tue, 10 Sep 2024 18:35:00 -0700 Subject: [PATCH 106/212] roll ability check doesn't need to ComputeBaseAbilityCheckBonus and ComputeAbilityCheckActionModifier beforehand --- SolastaUnfinishedBusiness/Feats/OtherFeats.cs | 19 +++++++++---------- .../ITryAlterOutcomeAttributeCheck.cs | 4 ++-- .../Activities/ActivitiesBreakFreePatcher.cs | 6 ------ .../CharacterActionBreakFreePatcher.cs | 6 ------ .../Spells/SpellBuildersLevel05.cs | 4 ++-- 5 files changed, 13 insertions(+), 26 deletions(-) diff --git a/SolastaUnfinishedBusiness/Feats/OtherFeats.cs b/SolastaUnfinishedBusiness/Feats/OtherFeats.cs index 58ada1a690..2d578b9042 100644 --- a/SolastaUnfinishedBusiness/Feats/OtherFeats.cs +++ b/SolastaUnfinishedBusiness/Feats/OtherFeats.cs @@ -1169,16 +1169,16 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, var actingCharacter = action.ActingCharacter; var rulesetCharacter = actingCharacter.RulesetCharacter; var actionModifier = new ActionModifier(); - - rulesetCharacter.ComputeBaseAbilityCheckBonus( - AttributeDefinitions.Dexterity, actionModifier.AbilityCheckModifierTrends, SkillDefinitions.Acrobatics); - - actingCharacter.ComputeAbilityCheckActionModifier( - AttributeDefinitions.Dexterity, SkillDefinitions.Acrobatics, actionModifier); - var abilityCheckRoll = actingCharacter.RollAbilityCheck( - AttributeDefinitions.Dexterity, SkillDefinitions.Acrobatics, 15, - AdvantageType.None, actionModifier, false, -1, out var rollOutcome, out var successDelta, true); + AttributeDefinitions.Dexterity, + SkillDefinitions.Acrobatics, + 15, + AdvantageType.None, + actionModifier, + false, -1, + out var rollOutcome, + out var successDelta, + true); //PATCH: support for Bardic Inspiration roll off battle and ITryAlterOutcomeAttributeCheck var abilityCheckData = new AbilityCheckData @@ -2397,7 +2397,6 @@ private static FeatDefinition BuildMobile() .SetSilent(Silent.WhenAddedOrRemoved) .AddToDB())) .AddToDB()) - .SetAbilityScorePrerequisite(AttributeDefinitions.Dexterity, 13) .AddToDB(); } diff --git a/SolastaUnfinishedBusiness/Interfaces/ITryAlterOutcomeAttributeCheck.cs b/SolastaUnfinishedBusiness/Interfaces/ITryAlterOutcomeAttributeCheck.cs index 19275ae82d..e15dd3c96c 100644 --- a/SolastaUnfinishedBusiness/Interfaces/ITryAlterOutcomeAttributeCheck.cs +++ b/SolastaUnfinishedBusiness/Interfaces/ITryAlterOutcomeAttributeCheck.cs @@ -58,8 +58,8 @@ public static IEnumerator ResolveRolls( contextFieldActor |= 64; } - actor.ComputeAbilityCheckActionModifier(AttributeDefinitions.Strength, SkillDefinitions.Athletics, - actionModifierActorStrength, contextFieldActor); + actor.ComputeAbilityCheckActionModifier( + AttributeDefinitions.Strength, SkillDefinitions.Athletics, actionModifierActorStrength, contextFieldActor); var contextFieldOpponent = 1; diff --git a/SolastaUnfinishedBusiness/Patches/Activities/ActivitiesBreakFreePatcher.cs b/SolastaUnfinishedBusiness/Patches/Activities/ActivitiesBreakFreePatcher.cs index c649bf97b5..633ee468d3 100644 --- a/SolastaUnfinishedBusiness/Patches/Activities/ActivitiesBreakFreePatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/Activities/ActivitiesBreakFreePatcher.cs @@ -93,12 +93,6 @@ IEnumerator RollAttributeCheck(string attributeName) ]); var actionModifier = new ActionModifier(); - - rulesetCharacter.ComputeBaseAbilityCheckBonus( - attributeName, actionModifier.AbilityCheckModifierTrends, string.Empty); - gameLocationCharacter.ComputeAbilityCheckActionModifier( - attributeName, string.Empty, actionModifier); - var abilityCheckRoll = gameLocationCharacter.RollAbilityCheck( attributeName, string.Empty, diff --git a/SolastaUnfinishedBusiness/Patches/CharacterActionBreakFreePatcher.cs b/SolastaUnfinishedBusiness/Patches/CharacterActionBreakFreePatcher.cs index 6b7348ae6d..c484b6be1c 100644 --- a/SolastaUnfinishedBusiness/Patches/CharacterActionBreakFreePatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/CharacterActionBreakFreePatcher.cs @@ -93,12 +93,6 @@ private static IEnumerator Process(CharacterActionBreakFree __instance) } } - __instance.ActingCharacter.RulesetCharacter.ComputeBaseAbilityCheckBonus( - abilityScoreName, actionModifier.AbilityCheckModifierTrends, proficiencyName); - - __instance.ActingCharacter.ComputeAbilityCheckActionModifier( - abilityScoreName, proficiencyName, actionModifier); - var abilityCheckRoll = __instance.ActingCharacter.RollAbilityCheck( abilityScoreName, proficiencyName, diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel05.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel05.cs index 7b40f88a00..65e95ef21e 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel05.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel05.cs @@ -1455,8 +1455,8 @@ private static IEnumerator ResolveRolls( contextField2 |= 64; } - opponent.ComputeAbilityCheckActionModifier(AttributeDefinitions.Strength, string.Empty, actionModifier2, - contextField2); + opponent.ComputeAbilityCheckActionModifier( + AttributeDefinitions.Strength, string.Empty, actionModifier2, contextField2); actor.RulesetCharacter.EnumerateFeaturesToBrowse( actor.RulesetCharacter.FeaturesToBrowse, actor.RulesetCharacter.FeaturesOrigin); From 47f62dd37a82d12ec7bf9a41536005efbe15aad8 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Tue, 10 Sep 2024 18:58:49 -0700 Subject: [PATCH 107/212] tweak Holy Weapon to only allow power if wielding weapon --- .../Spells/SpellBuildersLevel05.cs | 28 +++++++++++-------- .../Translations/de/Spells/Spells05-de.txt | 2 +- .../Translations/en/Spells/Spells05-en.txt | 2 +- .../Translations/es/Spells/Spells05-es.txt | 2 +- .../Translations/fr/Spells/Spells05-fr.txt | 2 +- .../Translations/it/Spells/Spells05-it.txt | 2 +- .../Translations/ja/Spells/Spells05-ja.txt | 2 +- .../Translations/ko/Spells/Spells05-ko.txt | 2 +- .../pt-BR/Spells/Spells05-pt-BR.txt | 2 +- .../Translations/ru/Spells/Spells05-ru.txt | 2 +- .../zh-CN/Spells/Spells05-zh-CN.txt | 2 +- 11 files changed, 26 insertions(+), 22 deletions(-) diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel05.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel05.cs index 65e95ef21e..743d324a32 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel05.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel05.cs @@ -885,6 +885,17 @@ internal static SpellDefinition BuildHolyWeapon() { const string NAME = "HolyWeapon"; + var additionalDamage = FeatureDefinitionAdditionalDamageBuilder + .Create($"AdditionalDamage{NAME}") + .SetGuiPresentation(Category.Feature, SpiritualWeapon) + .SetNotificationTag("HolyWeapon") + .SetDamageDice(DieType.D6, 2) + .SetSpecificDamageType(DamageTypeRadiant) + .AddCustomSubFeatures( + new AddTagToWeapon( + TagsDefinitions.MagicalWeapon, TagsDefinitions.Criticity.Important, ValidatorsWeapon.AlwaysValid)) + .AddToDB(); + var power = FeatureDefinitionPowerBuilder .Create($"Power{NAME}") .SetGuiPresentation(Category.Feature, Sprites.GetSprite(NAME, Resources.PowerHolyWeapon, 256, 128)) @@ -913,7 +924,11 @@ internal static SpellDefinition BuildHolyWeapon() .SetImpactEffectParameters( FeatureDefinitionAdditionalDamages.AdditionalDamageBrandingSmite.impactParticleReference) .Build()) - .AddCustomSubFeatures(new PowerOrSpellFinishedByMeHolyWeapon()) + .AddCustomSubFeatures( + new PowerOrSpellFinishedByMeHolyWeapon(), + new ValidatorsValidatePowerUse(c => + c.GetMainWeapon()?.DynamicItemProperties.Any(x => x.FeatureDefinition == additionalDamage) == true || + c.GetOffhandWeapon()?.DynamicItemProperties.Any(x => x.FeatureDefinition == additionalDamage) == true)) .AddToDB(); var condition = ConditionDefinitionBuilder @@ -924,17 +939,6 @@ internal static SpellDefinition BuildHolyWeapon() .AddCustomSubFeatures(AddUsablePowersFromCondition.Marker) .AddToDB(); - var additionalDamage = FeatureDefinitionAdditionalDamageBuilder - .Create($"AdditionalDamage{NAME}") - .SetGuiPresentation(Category.Feature, SpiritualWeapon) - .SetNotificationTag("HolyWeapon") - .SetDamageDice(DieType.D6, 2) - .SetSpecificDamageType(DamageTypeRadiant) - .AddCustomSubFeatures( - new AddTagToWeapon( - TagsDefinitions.MagicalWeapon, TagsDefinitions.Criticity.Important, ValidatorsWeapon.AlwaysValid)) - .AddToDB(); - var lightSourceForm = Light.EffectDescription.GetFirstFormOfType(EffectForm.EffectFormType.LightSource); var spell = SpellDefinitionBuilder diff --git a/SolastaUnfinishedBusiness/Translations/de/Spells/Spells05-de.txt b/SolastaUnfinishedBusiness/Translations/de/Spells/Spells05-de.txt index bb954a3a12..eeccee814a 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Spells/Spells05-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Spells/Spells05-de.txt @@ -34,7 +34,7 @@ Spell/&EmpoweredKnowledgeDescription=Deine Magie vertieft das Verständnis einer Spell/&EmpoweredKnowledgeTitle=Kompetenzerweiterung Spell/&FarStepDescription=Du teleportierst dich bis zu 60 Fuß weit an einen freien Ort, den du sehen kannst. In jedem deiner Züge, bevor der Zauber endet, kannst du eine Bonusaktion nutzen, um dich erneut auf diese Weise zu teleportieren. Spell/&FarStepTitle=Weiter Schritt -Spell/&HolyWeaponDescription=Du erfüllst eine Waffe, die du berührst, mit heiliger Kraft. Bis der Zauber endet, strahlt die Waffe helles Licht in einem Radius von 30 Fuß und schwaches Licht für weitere 30 Fuß aus. Außerdem verursachen mit ihr ausgeführte Waffenangriffe bei einem Treffer zusätzliche 2W8 Strahlungsschaden. Wenn die Waffe nicht bereits eine magische Waffe ist, wird sie für die Dauer zu einer. Als Bonusaktion in deinem Zug kannst du diesen Zauber aufheben und die Waffe einen Strahlungsausbruch aussenden lassen. Jede Kreatur deiner Wahl, die du innerhalb von 30 Fuß der Waffe sehen kannst, muss einen Konstitutionsrettungswurf machen. Bei einem misslungenen Rettungswurf erleidet die Kreatur 4W8 Strahlungsschaden und ist 1 Minute lang geblendet. Bei einem erfolgreichen Rettungswurf erleidet die Kreatur nur halb so viel Schaden und ist nicht geblendet. Am Ende jedes ihrer Züge kann eine geblendete Kreatur einen Konstitutionsrettungswurf machen und bei einem Erfolg den Effekt auf sich selbst beenden. +Spell/&HolyWeaponDescription=Du erfüllst eine Waffe, die du berührst, mit heiliger Kraft. Bis der Zauber endet, strahlt die Waffe helles Licht in einem Radius von 30 Fuß und schwaches Licht für weitere 30 Fuß aus. Außerdem verursachen mit ihr ausgeführte Waffenangriffe bei einem Treffer zusätzliche 2W8 Strahlungsschaden. Wenn die Waffe nicht bereits eine magische Waffe ist, wird sie für die Dauer zu einer. Als Bonusaktion in deinem Zug kannst du, wenn du die Waffe führst, diesen Zauber aufheben und die Waffe einen Strahlungsausbruch aussenden lassen. Jede Kreatur deiner Wahl, die du innerhalb von 30 Fuß der Waffe sehen kannst, muss einen Konstitutionsrettungswurf machen. Bei einem misslungenen Rettungswurf erleidet die Kreatur 4W8 Strahlungsschaden und ist 1 Minute lang geblendet. Bei einem erfolgreichen Rettungswurf erleidet die Kreatur nur halb so viel Schaden und ist nicht geblendet. Am Ende jedes ihrer Züge kann eine geblendete Kreatur einen Konstitutionsrettungswurf machen und bei einem Erfolg den Effekt auf sich selbst beenden. Spell/&HolyWeaponTitle=Heilige Waffe Spell/&IncinerationDescription=Flammen umhüllen eine Kreatur, die du in Reichweite sehen kannst. Das Ziel muss einen Rettungswurf für Geschicklichkeit machen. Bei einem misslungenen Rettungswurf erleidet es 8W6 Feuerschaden, bei einem erfolgreichen Rettungswurf nur halb so viel. Bei einem misslungenen Rettungswurf brennt das Ziel außerdem für die Dauer des Zaubers. Das brennende Ziel strahlt helles Licht in einem Radius von 30 Fuß und schwaches Licht für weitere 30 Fuß aus und erleidet zu Beginn jeder seiner Runden 8W6 Feuerschaden. Spell/&IncinerationTitle=Selbstverbrennung diff --git a/SolastaUnfinishedBusiness/Translations/en/Spells/Spells05-en.txt b/SolastaUnfinishedBusiness/Translations/en/Spells/Spells05-en.txt index 82badc5647..21ce79ed81 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Spells/Spells05-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Spells/Spells05-en.txt @@ -34,7 +34,7 @@ Spell/&EmpoweredKnowledgeDescription=Your magic deepens a creature's understandi Spell/&EmpoweredKnowledgeTitle=Skill Empowerment Spell/&FarStepDescription=You teleport up to 60 ft to an unoccupied space you can see. On each of your turns before the spell ends, you can use a bonus action to teleport in this way again. Spell/&FarStepTitle=Far Step -Spell/&HolyWeaponDescription=You imbue a weapon you touch with holy power. Until the spell ends, the weapon emits bright light in a 30-foot radius and dim light for an additional 30 feet. In addition, weapon attacks made with it deal an extra 2d8 radiant damage on a hit. If the weapon isn't already a magic weapon, it becomes one for the duration. As a bonus action on your turn, you can dismiss this spell and cause the weapon to emit a burst of radiance. Each creature of your choice that you can see within 30 feet of the weapon must make a Constitution saving throw. On a failed save, a creature takes 4d8 radiant damage, and it is blinded for 1 minute. On a successful save, a creature takes half as much damage and isn't blinded. At the end of each of its turns, a blinded creature can make a Constitution saving throw, ending the effect on itself on a success. +Spell/&HolyWeaponDescription=You imbue a weapon you touch with holy power. Until the spell ends, the weapon emits bright light in a 30-foot radius and dim light for an additional 30 feet. In addition, weapon attacks made with it deal an extra 2d8 radiant damage on a hit. If the weapon isn't already a magic weapon, it becomes one for the duration. As a bonus action on your turn, if wielding the weapon, you can dismiss this spell and cause the weapon to emit a burst of radiance. Each creature of your choice that you can see within 30 feet of the weapon must make a Constitution saving throw. On a failed save, a creature takes 4d8 radiant damage, and it is blinded for 1 minute. On a successful save, a creature takes half as much damage and isn't blinded. At the end of each of its turns, a blinded creature can make a Constitution saving throw, ending the effect on itself on a success. Spell/&HolyWeaponTitle=Holy Weapon Spell/&IncinerationDescription=Flames wreathe one creature you can see within range. The target must make a Dexterity saving throw. It takes 8d6 fire damage on a failed save, or half as much damage on a successful one. On a failed save, the target also burns for the spell's duration. The burning target sheds bright light in a 30-foot radius and dim light for an additional 30 feet and takes 8d6 fire damage at the start of each of its turns. Spell/&IncinerationTitle=Immolation diff --git a/SolastaUnfinishedBusiness/Translations/es/Spells/Spells05-es.txt b/SolastaUnfinishedBusiness/Translations/es/Spells/Spells05-es.txt index 3dd16fab62..86b9d9a011 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Spells/Spells05-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Spells/Spells05-es.txt @@ -34,7 +34,7 @@ Spell/&EmpoweredKnowledgeDescription=Tu magia profundiza la comprensión de una Spell/&EmpoweredKnowledgeTitle=Empoderamiento de habilidades Spell/&FarStepDescription=Te teletransportas hasta 60 pies a un espacio desocupado que puedas ver. En cada uno de tus turnos antes de que termine el hechizo, puedes usar una acción adicional para teletransportarte de esta manera nuevamente. Spell/&FarStepTitle=Paso lejano -Spell/&HolyWeaponDescription=Imbuyes un arma que tocas con poder sagrado. Hasta que el conjuro termina, el arma emite una luz brillante en un radio de 30 pies y una luz tenue por otros 30 pies. Además, los ataques con armas realizados con ella infligen 2d8 puntos de daño radiante adicionales al impactar. Si el arma no es ya un arma mágica, se convierte en una durante el tiempo que dure el conjuro. Como acción adicional en tu turno, puedes anular este conjuro y hacer que el arma emita una explosión de resplandor. Cada criatura de tu elección que puedas ver a 30 pies del arma debe realizar una tirada de salvación de Constitución. Si falla, la criatura sufre 4d8 puntos de daño radiante y queda cegada durante 1 minuto. Si tiene éxito, la criatura sufre la mitad del daño y no queda cegada. Al final de cada uno de sus turnos, una criatura cegada puede realizar una tirada de salvación de Constitución, terminando el efecto sobre sí misma si tiene éxito. +Spell/&HolyWeaponDescription=Imbuyes un arma que tocas con poder sagrado. Hasta que el conjuro termina, el arma emite luz brillante en un radio de 30 pies y luz tenue por otros 30 pies. Además, los ataques con armas realizados con ella infligen 2d8 puntos de daño radiante adicionales con cada impacto. Si el arma no es ya un arma mágica, se convierte en una durante el tiempo que dure el conjuro. Como acción adicional en tu turno, si empuñas el arma, puedes anular este conjuro y hacer que el arma emita una explosión de resplandor. Cada criatura de tu elección que puedas ver a 30 pies del arma debe realizar una tirada de salvación de Constitución. Si la tirada falla, la criatura sufre 4d8 puntos de daño radiante y queda cegada durante 1 minuto. Si la tirada tiene éxito, la criatura sufre la mitad del daño y no queda cegada. Al final de cada uno de sus turnos, una criatura cegada puede realizar una tirada de salvación de Constitución, terminando el efecto sobre sí misma si tiene éxito. Spell/&HolyWeaponTitle=Arma sagrada Spell/&IncinerationDescription=Las llamas envuelven a una criatura que puedas ver dentro del alcance. El objetivo debe realizar una tirada de salvación de Destreza. Recibe 8d6 puntos de daño por fuego si falla la tirada, o la mitad si tiene éxito. Si falla la tirada, el objetivo también arde durante la duración del conjuro. El objetivo en llamas emite una luz brillante en un radio de 30 pies y una luz tenue durante otros 30 pies y recibe 8d6 puntos de daño por fuego al comienzo de cada uno de sus turnos. Spell/&IncinerationTitle=Inmolación diff --git a/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells05-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells05-fr.txt index 48048bb9e0..d09560a744 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells05-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells05-fr.txt @@ -34,7 +34,7 @@ Spell/&EmpoweredKnowledgeDescription=Votre magie permet à une créature de mieu Spell/&EmpoweredKnowledgeTitle=Renforcement des compétences Spell/&FarStepDescription=Vous vous téléportez jusqu'à 18 mètres dans un espace inoccupé que vous pouvez voir. À chacun de vos tours avant la fin du sort, vous pouvez utiliser une action bonus pour vous téléporter de cette manière à nouveau. Spell/&FarStepTitle=Pas lointain -Spell/&HolyWeaponDescription=Vous imprégnez une arme que vous touchez d'un pouvoir sacré. Jusqu'à la fin du sort, l'arme émet une lumière vive dans un rayon de 9 mètres et une lumière tamisée sur 9 mètres supplémentaires. De plus, les attaques d'armes effectuées avec cette arme infligent 2d8 dégâts radiants supplémentaires en cas de succès. Si l'arme n'est pas déjà une arme magique, elle en devient une pendant la durée du sort. En tant qu'action bonus à votre tour, vous pouvez annuler ce sort et faire en sorte que l'arme émette une explosion de rayonnement. Chaque créature de votre choix que vous pouvez voir à 9 mètres ou moins de l'arme doit effectuer un jet de sauvegarde de Constitution. En cas d'échec, une créature subit 4d8 dégâts radiants et est aveuglée pendant 1 minute. En cas de réussite, une créature subit la moitié de ces dégâts et n'est pas aveuglée. À la fin de chacun de ses tours, une créature aveuglée peut effectuer un jet de sauvegarde de Constitution, mettant fin à l'effet sur elle-même en cas de réussite. +Spell/&HolyWeaponDescription=Vous imprégnez une arme que vous touchez d'un pouvoir sacré. Jusqu'à la fin du sort, l'arme émet une lumière vive dans un rayon de 9 mètres et une lumière tamisée sur 9 mètres supplémentaires. De plus, les attaques d'armes effectuées avec cette arme infligent 2d8 dégâts radiants supplémentaires en cas de succès. Si l'arme n'est pas déjà une arme magique, elle en devient une pendant la durée du sort. En tant qu'action bonus à votre tour, si vous utilisez l'arme, vous pouvez annuler ce sort et faire en sorte que l'arme émette une explosion de rayonnement. Chaque créature de votre choix que vous pouvez voir à 9 mètres ou moins de l'arme doit effectuer un jet de sauvegarde de Constitution. En cas d'échec, une créature subit 4d8 dégâts radiants et est aveuglée pendant 1 minute. En cas de réussite, une créature subit la moitié de ces dégâts et n'est pas aveuglée. À la fin de chacun de ses tours, une créature aveuglée peut effectuer un jet de sauvegarde de Constitution, mettant fin à l'effet sur elle-même en cas de réussite. Spell/&HolyWeaponTitle=Arme sacrée Spell/&IncinerationDescription=Les flammes encerclent une créature visible à portée. La cible doit réussir un jet de sauvegarde de Dextérité. Elle subit 8d6 dégâts de feu en cas d'échec, ou la moitié de ces dégâts en cas de réussite. En cas d'échec, la cible brûle également pendant la durée du sort. La cible en feu projette une lumière vive dans un rayon de 9 mètres et une lumière tamisée sur 9 mètres supplémentaires et subit 8d6 dégâts de feu au début de chacun de ses tours. Spell/&IncinerationTitle=Immolation diff --git a/SolastaUnfinishedBusiness/Translations/it/Spells/Spells05-it.txt b/SolastaUnfinishedBusiness/Translations/it/Spells/Spells05-it.txt index a1cae08b97..e93daa1147 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Spells/Spells05-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Spells/Spells05-it.txt @@ -34,7 +34,7 @@ Spell/&EmpoweredKnowledgeDescription=La tua magia approfondisce la comprensione Spell/&EmpoweredKnowledgeTitle=Potenziamento delle competenze Spell/&FarStepDescription=Ti teletrasporti fino a 60 piedi in uno spazio non occupato che puoi vedere. In ogni tuo turno prima che l'incantesimo finisca, puoi usare un'azione bonus per teletrasportarti di nuovo in questo modo. Spell/&FarStepTitle=Passo lontano -Spell/&HolyWeaponDescription=Infondi un'arma che tocchi con potere sacro. Finché l'incantesimo non termina, l'arma emette luce intensa in un raggio di 30 piedi e luce fioca per altri 30 piedi. Inoltre, gli attacchi con arma effettuati con essa infliggono 2d8 danni radianti extra a colpo andato a segno. Se l'arma non è già un'arma magica, lo diventa per la durata. Come azione bonus nel tuo turno, puoi interrompere questo incantesimo e far sì che l'arma emetta un'esplosione di radiosità. Ogni creatura a tua scelta che puoi vedere entro 30 piedi dall'arma deve effettuare un tiro salvezza su Costituzione. Se fallisce il tiro salvezza, una creatura subisce 4d8 danni radianti e rimane accecata per 1 minuto. Se supera il tiro salvezza, una creatura subisce metà dei danni e non rimane accecata. Alla fine di ogni suo turno, una creatura accecata può effettuare un tiro salvezza su Costituzione, terminando l'effetto su se stessa in caso di successo. +Spell/&HolyWeaponDescription=Infondi un'arma che tocchi con potere sacro. Finché l'incantesimo non termina, l'arma emette luce intensa in un raggio di 30 piedi e luce fioca per altri 30 piedi. Inoltre, gli attacchi con arma effettuati con essa infliggono 2d8 danni radianti extra a colpo andato a segno. Se l'arma non è già un'arma magica, lo diventa per la durata. Come azione bonus nel tuo turno, se stai impugnando l'arma, puoi interrompere questo incantesimo e far sì che l'arma emetta un'esplosione di radiosità. Ogni creatura a tua scelta che puoi vedere entro 30 piedi dall'arma deve effettuare un tiro salvezza su Costituzione. Se fallisce il tiro salvezza, una creatura subisce 4d8 danni radianti e rimane accecata per 1 minuto. Se supera il tiro salvezza, una creatura subisce la metà dei danni e non rimane accecata. Alla fine di ogni suo turno, una creatura accecata può effettuare un tiro salvezza su Costituzione, terminando l'effetto su se stessa in caso di successo. Spell/&HolyWeaponTitle=Arma sacra Spell/&IncinerationDescription=Le fiamme avvolgono una creatura che puoi vedere entro il raggio d'azione. Il bersaglio deve effettuare un tiro salvezza su Destrezza. Subisce 8d6 danni da fuoco se fallisce il tiro salvezza, o la metà dei danni se lo supera. Se fallisce il tiro salvezza, il bersaglio brucia anche per la durata dell'incantesimo. Il bersaglio in fiamme diffonde luce intensa in un raggio di 30 piedi e luce fioca per altri 30 piedi e subisce 8d6 danni da fuoco all'inizio di ogni suo turno. Spell/&IncinerationTitle=Immolazione diff --git a/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells05-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells05-ja.txt index ebe99febe3..90f2d3fd60 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells05-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells05-ja.txt @@ -34,7 +34,7 @@ Spell/&EmpoweredKnowledgeDescription=あなたの魔法は、クリーチャー Spell/&EmpoweredKnowledgeTitle=強化された知識 Spell/&FarStepDescription=最大 60 フィートの、目に見える空きスペースまでテレポートします。呪文が終了する前の各ターンで、ボーナス アクションを使用して、この方法で再びテレポートできます。 Spell/&FarStepTitle=ファーステップ -Spell/&HolyWeaponDescription=触れた武器に聖なる力を吹き込む。呪文が終了するまで、武器は半径 30 フィートに明るい光を放ち、さらに 30 フィートに薄暗い光を放つ。加えて、この武器による攻撃は命中時に追加で 2d8 の光輝ダメージを与える。武器がまだ魔法の武器でない場合、持続時間中は魔法の武器になる。自分のターンのボーナス アクションとして、この呪文を解除し、武器から光のバーストを発することができる。武器から 30 フィート以内にいる、自分が見ることができる任意のクリーチャーは、それぞれ【耐久力】セーヴィング スローを行わなければならない。セーヴィング スローに失敗すると、クリーチャーは 4d8 の光輝ダメージを受け、1 分間盲目になる。セーヴィング スローに成功すると、クリーチャーは半分のダメージしか受けず、盲目にならない。盲目になったクリーチャーは、自分のターンの終了時に【耐久力】セーヴィング スローを行うことができ、成功すると自分への効果を終了できる。 +Spell/&HolyWeaponDescription=触れた武器に聖なる力を吹き込む。呪文が終了するまで、武器は半径 30 フィートに明るい光を放ち、さらに 30 フィートに薄暗い光を放つ。加えて、この武器による攻撃は命中時に追加で 2d8 の光輝ダメージを与える。武器がまだ魔法の武器でない場合、持続時間中は魔法の武器になる。自分のターンにボーナス アクションとして、武器を装備している場合、この呪文を解除して武器から光のバーストを発させることができる。武器から 30 フィート以内にいる、自分が見ることができる任意のクリーチャーは、それぞれ【耐久力】セーヴィング スローを行わなければならない。セーヴに失敗すると、クリーチャーは 4d8 の光輝ダメージを受け、1 分間盲目になる。セーヴに成功すると、クリーチャーは半分のダメージしか受けず、盲目にならない。盲目になったクリーチャーは、自分のターンの終わりに【耐久力】セーヴィング スローを行うことができ、成功すると自分への効果を終了できる。 Spell/&HolyWeaponTitle=聖なる武器 Spell/&IncinerationDescription=範囲内に見える 1 体の生き物が炎で覆われます。ターゲットは器用さセーヴィングスローを行わなければなりません。セーブに失敗した場合は 8d6 の火ダメージを受け、成功した場合はその半分のダメージを受けます。セーブに失敗すると、ターゲットも呪文の持続時間の間燃えます。燃えているターゲットは半径 30 フィートで明るい光を放ち、さらに 30 フィートで薄暗い光を放ち、各ターンの開始時に 8d6 の火災ダメージを受けます。 Spell/&IncinerationTitle=焼身自殺 diff --git a/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells05-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells05-ko.txt index 16009741f4..8ac3cd8d3a 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells05-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells05-ko.txt @@ -34,7 +34,7 @@ Spell/&EmpoweredKnowledgeDescription=당신의 마법은 생물이 자신의 재 Spell/&EmpoweredKnowledgeTitle=강화된 지식 Spell/&FarStepDescription=당신은 당신이 볼 수 있는 빈 공간으로 최대 60피트까지 순간이동합니다. 주문이 끝나기 전 매 턴마다 보너스 액션을 사용하여 이런 방식으로 다시 순간이동할 수 있습니다. Spell/&FarStepTitle=먼 단계 -Spell/&HolyWeaponDescription=당신은 신성한 힘으로 당신이 만지는 무기에 마법을 부여합니다. 주문이 끝날 때까지 무기는 30피트 반경에 밝은 빛을 방출하고 추가로 30피트에 희미한 빛을 방출합니다. 추가로, 이 무기로 하는 무기 공격은 적중 시 추가로 2d8의 광채 피해를 입힙니다. 무기가 아직 마법 무기가 아니라면, 지속 시간 동안 마법 무기가 됩니다. 당신의 턴에 보너스 액션으로, 당신은 이 주문을 해제하고 무기가 광채를 폭발하게 할 수 있습니다. 당신이 무기에서 30피트 이내에 볼 수 있는 당신이 선택한 각 생물은 체력 구원 굴림을 해야 합니다. 구원에 실패하면, 생물은 4d8의 광채 피해를 입고 1분 동안 실명합니다. 구원에 성공하면, 생물은 절반의 피해를 입고 실명되지 않습니다. 각 턴이 끝날 때, 실명한 생물은 체력 구원 굴림을 할 수 있으며, 성공 시 자신에게 미치는 효과가 끝납니다. +Spell/&HolyWeaponDescription=당신은 신성한 힘으로 당신이 만지는 무기에 마법을 부여합니다. 주문이 끝날 때까지 무기는 30피트 반경에 밝은 빛을 내고, 추가로 30피트에 희미한 빛을 냅니다. 추가로, 이 무기로 하는 무기 공격은 명중 시 추가로 2d8의 광채 피해를 입힙니다. 무기가 아직 마법 무기가 아니라면, 지속 시간 동안 마법 무기가 됩니다. 당신의 턴에 보너스 액션으로, 무기를 휘두르고 있다면, 이 주문을 해제하고 무기가 광채를 폭발하게 할 수 있습니다. 무기에서 30피트 이내에 보이는 당신이 선택한 각 생물은 체력 구원 굴림을 해야 합니다. 구원에 실패하면, 생물은 4d8의 광채 피해를 입고, 1분 동안 실명합니다. 구원에 성공하면, 생물은 절반의 피해를 입고 실명되지 않습니다. 각 턴이 끝날 때, 실명한 생물은 체력 구원 굴림을 할 수 있으며, 성공 시 자신에게 미치는 효과가 끝납니다. Spell/&HolyWeaponTitle=신성한 무기 Spell/&IncinerationDescription=화염은 범위 내에서 볼 수 있는 생물 한 마리를 둘러싸고 있습니다. 대상은 민첩 내성 굴림을 해야 합니다. 저장에 실패하면 8d6의 화염 피해를 입으며, 성공하면 절반의 피해를 입습니다. 저장에 실패하면 대상도 주문 지속 시간 동안 불타게 됩니다. 불타는 대상은 30피트 반경에서 밝은 빛을 발산하고 추가로 30피트 동안 희미한 빛을 발산하며 각 턴이 시작될 때 8d6의 화염 피해를 입습니다. Spell/&IncinerationTitle=제물 diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells05-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells05-pt-BR.txt index 7c145f221c..d76809ee02 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells05-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells05-pt-BR.txt @@ -34,7 +34,7 @@ Spell/&EmpoweredKnowledgeDescription=Sua magia aprofunda a compreensão de uma c Spell/&EmpoweredKnowledgeTitle=Empoderamento de Habilidades Spell/&FarStepDescription=Você se teleporta até 60 pés para um espaço desocupado que você pode ver. Em cada um dos seus turnos antes que a magia termine, você pode usar uma ação bônus para se teleportar dessa forma novamente. Spell/&FarStepTitle=Passo Distante -Spell/&HolyWeaponDescription=Você imbui uma arma que você toca com poder sagrado. Até que a magia termine, a arma emite luz brilhante em um raio de 30 pés e luz fraca por mais 30 pés. Além disso, ataques de arma feitos com ela causam 2d8 de dano radiante extra em um acerto. Se a arma ainda não for uma arma mágica, ela se torna uma pela duração. Como uma ação bônus no seu turno, você pode dispensar esta magia e fazer com que a arma emita uma explosão de radiância. Cada criatura de sua escolha que você puder ver a até 30 pés da arma deve fazer um teste de resistência de Constituição. Em uma falha, uma criatura sofre 4d8 de dano radiante e fica cega por 1 minuto. Em um sucesso, uma criatura sofre metade do dano e não fica cega. No final de cada um de seus turnos, uma criatura cega pode fazer um teste de resistência de Constituição, encerrando o efeito sobre si mesma em um sucesso. +Spell/&HolyWeaponDescription=Você imbui uma arma que você toca com poder sagrado. Até que a magia termine, a arma emite luz brilhante em um raio de 30 pés e luz fraca por mais 30 pés. Além disso, ataques de arma feitos com ela causam 2d8 de dano radiante extra em um acerto. Se a arma ainda não for uma arma mágica, ela se torna uma pela duração. Como uma ação bônus no seu turno, se estiver empunhando a arma, você pode dispensar esta magia e fazer com que a arma emita uma explosão de radiância. Cada criatura de sua escolha que você puder ver a até 30 pés da arma deve fazer um teste de resistência de Constituição. Em uma falha, uma criatura sofre 4d8 de dano radiante e fica cega por 1 minuto. Em um sucesso, uma criatura sofre metade do dano e não fica cega. No final de cada um de seus turnos, uma criatura cega pode fazer um teste de resistência de Constituição, encerrando o efeito sobre si mesma em um sucesso. Spell/&HolyWeaponTitle=Arma Sagrada Spell/&IncinerationDescription=Chamas envolvem uma criatura que você possa ver dentro do alcance. O alvo deve fazer um teste de resistência de Destreza. Ele sofre 8d6 de dano de fogo em uma falha na resistência, ou metade do dano em uma falha bem-sucedida. Em uma falha na resistência, o alvo também queima pela duração da magia. O alvo em chamas emite luz brilhante em um raio de 30 pés e luz fraca por mais 30 pés e sofre 8d6 de dano de fogo no início de cada um de seus turnos. Spell/&IncinerationTitle=Imolação diff --git a/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells05-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells05-ru.txt index 25dc72bf4f..a483340e27 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells05-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells05-ru.txt @@ -34,7 +34,7 @@ Spell/&EmpoweredKnowledgeDescription=Ваша магия углубляет по Spell/&EmpoweredKnowledgeTitle=Усиление навыка Spell/&FarStepDescription=Вы телепортируетесь до 60 футов в свободное пространство, видимое вами. Вы можете каждый ваш ход до окончания действия заклинания бонусным действием телепортироваться таким образом снова. Spell/&FarStepTitle=Далёкий шаг -Spell/&HolyWeaponDescription=Вы наделяете оружие, к которому прикасаетесь, святой силой. Пока заклинание действует, оружие излучает яркий свет в радиусе 30 футов и тусклый свет в радиусе дополнительных 30 футов. Кроме того, атаки оружием, сделанные с его помощью, наносят дополнительный урон излучением 2d8 при попадании. Если оружие еще не является магическим оружием, оно становится таковым на время действия. В качестве бонусного действия в свой ход вы можете отменить это заклинание и заставить оружие испустить вспышку сияния. Каждое существо по вашему выбору, которое вы можете видеть в пределах 30 футов от оружия, должно совершить спасбросок Телосложения. При провале спасброска существо получает 4d8 урона излучением и ослепляется на 1 минуту. При успешном спасброске существо получает половину урона и не ослепляется. В конце каждого своего хода ослепленное существо может совершить спасбросок Телосложения, прекращая эффект на себе при успехе. +Spell/&HolyWeaponDescription=Вы наделяете оружие, к которому прикасаетесь, святой силой. Пока заклинание действует, оружие излучает яркий свет в радиусе 30 футов и тусклый свет в радиусе дополнительных 30 футов. Кроме того, атаки оружием, сделанные с его помощью, наносят дополнительный урон излучением 2d8 при попадании. Если оружие еще не является магическим оружием, оно становится таковым на время действия. В качестве бонусного действия в свой ход, если вы владеете оружием, вы можете отменить это заклинание и заставить оружие испустить вспышку сияния. Каждое существо по вашему выбору, которое вы можете видеть в пределах 30 футов от оружия, должно совершить спасбросок Телосложения. При провале спасброска существо получает 4d8 урона излучением и ослепляется на 1 минуту. При успешном спасброске существо получает половину урона и не ослепляется. В конце каждого своего хода ослепленное существо может совершить спасбросок Телосложения, прекращая эффект на себе при успехе. Spell/&HolyWeaponTitle=Священное Оружие Spell/&IncinerationDescription=Одно существо, которое вы можете видеть в пределах дистанции, охватывает пламя. Цель должна совершить спасбросок Ловкости. Существо получает 8d6 урона огнём при провале или половину этого урона при успехе. Кроме того, при провале цель воспламеняется на время действия заклинания. Горящая цель испускает яркий свет в пределах 30 футов и тусклый свет в пределах ещё 30 футов и получает 8d6 урона огнём в начале каждого своего хода. Spell/&IncinerationTitle=Испепеление diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells05-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells05-zh-CN.txt index 89be312054..7cad6392ad 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells05-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells05-zh-CN.txt @@ -34,7 +34,7 @@ Spell/&EmpoweredKnowledgeDescription=你的魔法加深了生物对自己天赋 Spell/&EmpoweredKnowledgeTitle=知识赋能 Spell/&FarStepDescription=你传送到最远 60 尺的一个你能看到的未被占据的空间。在法术结束前的每个回合中,你都可以使用附赠动作再次以这种方式传送。 Spell/&FarStepTitle=渺远步 -Spell/&HolyWeaponDescription=你为触碰的武器注入神圣力量。在法术结束前,该武器会在 30 英尺半径范围内发出强光,并在额外 30 英尺范围内发出昏暗光线。此外,用该武器进行的武器攻击命中时会造成额外的 2d8 辐射伤害。如果该武器之前不是魔法武器,则会在法术持续时间内变为魔法武器。作为你回合的奖励动作,你可以解除此法术并让武器发出一阵光芒。你在武器 30 英尺范围内可以看到每个你选择的生物都必须进行体质豁免检定。如果豁免失败,生物将受到 4d8 辐射伤害,并且失明 1 分钟。如果豁免成功,生物受到的伤害减半并且不会失明。在每个回合结束时,失明的生物可以进行体质豁免检定,成功则结束对自己的影响。 +Spell/&HolyWeaponDescription=你为触碰的武器注入神圣力量。在法术结束前,该武器会在 30 英尺半径范围内发出明亮光线,并在额外 30 英尺范围内发出昏暗光线。此外,使用该武器进行的武器攻击命中时会造成额外的 2d8 辐射伤害。如果该武器之前不是魔法武器,则会在持续时间内变为魔法武器。作为你回合的奖励动作,如果你持有该武器,你可以解除此法术并让武器发出一阵光芒。你在武器 30 英尺范围内可以看到每个你选择的生物都必须进行体质豁免检定。如果豁免失败,生物将受到 4d8 辐射伤害,并且失明 1 分钟。如果豁免成功,生物受到的伤害减半并且不会失明。在每个回合结束时,失明的生物可以进行体质豁免检定,成功则结束对自己的影响。 Spell/&HolyWeaponTitle=神圣武器 Spell/&IncinerationDescription=火焰包围着范围内你能看到的一种生物。目标必须进行敏捷豁免检定。豁免失败会造成 8d6 火焰伤害,成功豁免则受到一半伤害。如果豁免失败,目标也会在法术持续时间内燃烧。燃烧的目标会在 30 尺半径内发出明亮的光芒,并在额外 30 尺的范围内发出昏暗的光芒,并在每个回合开始时受到 8d6 火焰伤害。 Spell/&IncinerationTitle=焚烧术 From 97375264b1dc851bad11919a80ffafb372f56bd1 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Tue, 10 Sep 2024 18:59:13 -0700 Subject: [PATCH 108/212] minor tweaks --- .../FeatDefinition/FeatMobile.json | 4 ++-- SolastaUnfinishedBusiness/Models/FixesContext.cs | 11 +++++++++-- .../Translations/en/Others-en.txt | 2 +- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatDefinition/FeatMobile.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatDefinition/FeatMobile.json index 493695d33f..d84d456e09 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatDefinition/FeatMobile.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatDefinition/FeatMobile.json @@ -3,9 +3,9 @@ "compatibleClassesPrerequisite": [], "mustCastSpellsPrerequisite": false, "compatibleRacesPrerequisite": [], - "minimalAbilityScorePrerequisite": true, + "minimalAbilityScorePrerequisite": false, "minimalAbilityScoreValue": 13, - "minimalAbilityScoreName": "Dexterity", + "minimalAbilityScoreName": "Strength", "armorProficiencyPrerequisite": false, "armorProficiencyCategory": "", "hasFamilyTag": false, diff --git a/SolastaUnfinishedBusiness/Models/FixesContext.cs b/SolastaUnfinishedBusiness/Models/FixesContext.cs index 891f5d6a52..21a3dcef7d 100644 --- a/SolastaUnfinishedBusiness/Models/FixesContext.cs +++ b/SolastaUnfinishedBusiness/Models/FixesContext.cs @@ -51,6 +51,11 @@ internal static void Load() internal static void LateLoad() { + //ConditionDefinitions.ConditionUnderDemonicInfluence.forceBehavior = false; + ConditionDefinitions.ConditionUnderDemonicInfluence.specialDuration = true; + ConditionDefinitions.ConditionUnderDemonicInfluence.durationType = DurationType.Hour; + ConditionDefinitions.ConditionUnderDemonicInfluence.durationParameter = 1; + AddAdditionalActionTitles(); ExtendCharmImmunityToDemonicInfluence(); FixAdditionalDamageRestrictions(); @@ -646,8 +651,10 @@ private static void FixPaladinAurasDisplayOnActionBar() { foreach (var power in DatabaseRepository.GetDatabase() .Where(x => - x.ActivationTime == ActivationTime.PermanentUnlessIncapacitated && - (x.Name.StartsWith("PowerOath") || x.Name.StartsWith("PowerPaladin")))) + x.ActivationTime is ActivationTime.Permanent or ActivationTime.PermanentUnlessIncapacitated && + (x.Name.StartsWith("PowerDomain") || + x.Name.StartsWith("PowerOath") || + x.Name.StartsWith("PowerPaladin")))) { power.AddCustomSubFeatures(ModifyPowerVisibility.Hidden); } diff --git a/SolastaUnfinishedBusiness/Translations/en/Others-en.txt b/SolastaUnfinishedBusiness/Translations/en/Others-en.txt index 60ef150a58..215642430e 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Others-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Others-en.txt @@ -307,8 +307,8 @@ Tooltip/&Tag9000Title=Custom Effect Tooltip/&TagDamageChaosBoltTitle=Chaotic Damage Tooltip/&TagUnfinishedBusinessTitle=Unfinished Business Tooltip/&TargetMeleeWeaponError=Can't perform melee attack on this target as not within {0} -Tooltip/&TargetMustUnderstandYou=Target must understand your command Tooltip/&TargetMustNotBeSurprised=Target must not be surprised +Tooltip/&TargetMustUnderstandYou=Target must understand your command UI/&CustomFeatureSelectionStageDescription=Select extra features for your class/subclass. UI/&CustomFeatureSelectionStageFeatures=Features UI/&CustomFeatureSelectionStageNotDone=You must select all available features before proceeding From a2f99b1bae06e9b704c0372b0baec381547ad239 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Tue, 10 Sep 2024 20:44:23 -0700 Subject: [PATCH 109/212] add ExtraConditionInterruption SpendPower and SpendPowerExecuted --- .../Api/GameExtensions/EnumExtensions.cs | 4 +++- .../Patches/CharacterActionSpendPowerPatcher.cs | 6 ++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/SolastaUnfinishedBusiness/Api/GameExtensions/EnumExtensions.cs b/SolastaUnfinishedBusiness/Api/GameExtensions/EnumExtensions.cs index 290ecd29b2..5ae8b2a5d5 100644 --- a/SolastaUnfinishedBusiness/Api/GameExtensions/EnumExtensions.cs +++ b/SolastaUnfinishedBusiness/Api/GameExtensions/EnumExtensions.cs @@ -136,7 +136,9 @@ public enum ExtraConditionInterruption AttacksWithWeaponOrUnarmed, SourceRageStop, UsesBonusAction, - AttacksWithMeleeAndDamages + AttacksWithMeleeAndDamages, + SpendPower, + SpendPowerExecuted } internal enum ExtraMotionType diff --git a/SolastaUnfinishedBusiness/Patches/CharacterActionSpendPowerPatcher.cs b/SolastaUnfinishedBusiness/Patches/CharacterActionSpendPowerPatcher.cs index f9c6d703f5..513b9d39c8 100644 --- a/SolastaUnfinishedBusiness/Patches/CharacterActionSpendPowerPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/CharacterActionSpendPowerPatcher.cs @@ -115,6 +115,9 @@ private static IEnumerator ExecuteImpl(CharacterActionSpendPower __instance) actingCharacter.RulesetCharacter.UseDevicePower(activePower.OriginItem, activePower.PowerDefinition); } + actingCharacter.RulesetCharacter.ProcessConditionsMatchingInterruption( + (RuleDefinitions.ConditionInterruption) ExtraConditionInterruption.SpendPower); + for (var i = 0; i < targets.Count; i++) { var target = targets[i]; @@ -352,6 +355,9 @@ private static IEnumerator ExecuteImpl(CharacterActionSpendPower __instance) } } + actingCharacter.RulesetCharacter.ProcessConditionsMatchingInterruption( + (RuleDefinitions.ConditionInterruption) ExtraConditionInterruption.SpendPowerExecuted); + __instance.PersistantEffectAction(); } } From 187963009aab3afb90a8beee3ed7c7c152b8417d Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Tue, 10 Sep 2024 20:48:12 -0700 Subject: [PATCH 110/212] add SpendPowerExecuted to power surge, green-flame blade, vitriolic infusion, and impish wrath --- SolastaUnfinishedBusiness/Races/Imp.cs | 1 + SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs | 4 ++-- SolastaUnfinishedBusiness/Subclasses/InnovationVitriolist.cs | 1 + SolastaUnfinishedBusiness/Subclasses/WizardWarMagic.cs | 1 + 4 files changed, 5 insertions(+), 2 deletions(-) diff --git a/SolastaUnfinishedBusiness/Races/Imp.cs b/SolastaUnfinishedBusiness/Races/Imp.cs index 1b5a9c83b3..3161fadb48 100644 --- a/SolastaUnfinishedBusiness/Races/Imp.cs +++ b/SolastaUnfinishedBusiness/Races/Imp.cs @@ -698,6 +698,7 @@ private static CharacterRaceDefinition BuildImpForest(CharacterRaceDefinition ra .SetSpecialInterruptions( ConditionInterruption.Attacks, ConditionInterruption.CastSpellExecuted, + (ConditionInterruption)ExtraConditionInterruption.SpendPowerExecuted, ConditionInterruption.UsePowerExecuted) .AddToDB(); diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs index 0394957b5f..8069f16a5d 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs @@ -913,7 +913,7 @@ public void OnConditionRemoved(RulesetCharacter rulesetDefender, RulesetConditio #endregion - #region Burning Blade + #region Resonating Strike internal static SpellDefinition BuildResonatingStrike() { @@ -950,7 +950,7 @@ internal static SpellDefinition BuildResonatingStrike() .SetGuiPresentationNoContent(true) .SetSilent(Silent.WhenAddedOrRemoved) .SetFeatures(additionalDamageResonatingStrike) - .SetSpecialInterruptions(ConditionInterruption.UsePowerExecuted) + .SetSpecialInterruptions(ExtraConditionInterruption.SpendPowerExecuted) .AddToDB(); conditionResonatingStrike.AddCustomSubFeatures( diff --git a/SolastaUnfinishedBusiness/Subclasses/InnovationVitriolist.cs b/SolastaUnfinishedBusiness/Subclasses/InnovationVitriolist.cs index 428f556b80..014c791321 100644 --- a/SolastaUnfinishedBusiness/Subclasses/InnovationVitriolist.cs +++ b/SolastaUnfinishedBusiness/Subclasses/InnovationVitriolist.cs @@ -237,6 +237,7 @@ public InnovationVitriolist() .SetSpecialInterruptions( ConditionInterruption.Attacks, ConditionInterruption.CastSpellExecuted, + (ConditionInterruption)ExtraConditionInterruption.SpendPowerExecuted, ConditionInterruption.UsePowerExecuted) .AddToDB(); diff --git a/SolastaUnfinishedBusiness/Subclasses/WizardWarMagic.cs b/SolastaUnfinishedBusiness/Subclasses/WizardWarMagic.cs index f38c114920..a4042f814d 100644 --- a/SolastaUnfinishedBusiness/Subclasses/WizardWarMagic.cs +++ b/SolastaUnfinishedBusiness/Subclasses/WizardWarMagic.cs @@ -64,6 +64,7 @@ public WizardWarMagic() .SetSpecialInterruptions( ConditionInterruption.Attacks, ConditionInterruption.CastSpellExecuted, + (ConditionInterruption)ExtraConditionInterruption.SpendPowerExecuted, ConditionInterruption.UsePowerExecuted) .AddToDB(); From 113c574a0285de8b72eb37f8f3aaaf9780fc0be8 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Tue, 10 Sep 2024 20:54:25 -0700 Subject: [PATCH 111/212] update collaterals --- .../ConditionDefinition/ConditionImpImpishWrathMark.json | 1 + .../ConditionInnovationVitriolistInfusionMark.json | 1 + .../ConditionDefinition/ConditionResonatingStrike.json | 2 +- .../ConditionDefinition/ConditionWarMagicSurgeMark.json | 1 + .../AdditionalDamageHolyWeapon.json | 2 +- .../FeatureDefinitionPower/PowerHolyWeapon.json | 2 +- .../SpellDefinition/HolyWeapon.json | 8 ++++---- SolastaUnfinishedBusiness/Settings/zappastuff.xml | 3 ++- 8 files changed, 12 insertions(+), 8 deletions(-) diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionImpImpishWrathMark.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionImpImpishWrathMark.json index 7ebab60e73..4a28f371b0 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionImpImpishWrathMark.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionImpImpishWrathMark.json @@ -18,6 +18,7 @@ "specialInterruptions": [ "Attacks", "CastSpellExecuted", + 9007, "UsePowerExecuted" ], "interruptionRequiresSavingThrow": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionInnovationVitriolistInfusionMark.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionInnovationVitriolistInfusionMark.json index a7f394c9db..3d5187b1f3 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionInnovationVitriolistInfusionMark.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionInnovationVitriolistInfusionMark.json @@ -18,6 +18,7 @@ "specialInterruptions": [ "Attacks", "CastSpellExecuted", + 9007, "UsePowerExecuted" ], "interruptionRequiresSavingThrow": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionResonatingStrike.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionResonatingStrike.json index 2c811f345b..f9a3235aef 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionResonatingStrike.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionResonatingStrike.json @@ -18,7 +18,7 @@ "forceTurnOccurence": false, "turnOccurence": "EndOfTurn", "specialInterruptions": [ - "UsePowerExecuted" + 9007 ], "interruptionRequiresSavingThrow": false, "interruptionSavingThrowComputationMethod": "SaveOverride", diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionWarMagicSurgeMark.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionWarMagicSurgeMark.json index fa71864a20..750db02497 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionWarMagicSurgeMark.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionWarMagicSurgeMark.json @@ -18,6 +18,7 @@ "specialInterruptions": [ "Attacks", "CastSpellExecuted", + 9007, "UsePowerExecuted" ], "interruptionRequiresSavingThrow": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAdditionalDamage/AdditionalDamageHolyWeapon.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAdditionalDamage/AdditionalDamageHolyWeapon.json index 3e78e52f9a..fa85244739 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAdditionalDamage/AdditionalDamageHolyWeapon.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAdditionalDamage/AdditionalDamageHolyWeapon.json @@ -17,7 +17,7 @@ "requiredAncestryType": "Sorcerer", "damageValueDetermination": "Die", "flatBonus": 0, - "damageDieType": "D6", + "damageDieType": "D8", "damageDiceNumber": 2, "additionalDamageType": "Specific", "specificDamageType": "DamageRadiant", diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerHolyWeapon.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerHolyWeapon.json index 9cd6c99536..acb8cec8f3 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerHolyWeapon.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerHolyWeapon.json @@ -109,7 +109,7 @@ "hasSavingThrow": true, "savingThrowAffinity": "Negates", "dcModifier": 0, - "canSaveToCancel": false, + "canSaveToCancel": true, "saveOccurence": "EndOfTurn", "conditionForm": { "$type": "ConditionForm, Assembly-CSharp", diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/HolyWeapon.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/HolyWeapon.json index ffd28cf003..ad89040a85 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/HolyWeapon.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/HolyWeapon.json @@ -196,7 +196,7 @@ "$type": "EffectParticleParameters, Assembly-CSharp", "casterParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", + "m_AssetGUID": "4abc0a06a6ee59f4cb038a8d983cba4a", "m_SubObjectName": "", "m_SubObjectType": "" }, @@ -221,8 +221,8 @@ "effectParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", "m_AssetGUID": "", - "m_SubObjectName": null, - "m_SubObjectType": null + "m_SubObjectName": "", + "m_SubObjectType": "" }, "effectSubTargetParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", @@ -244,7 +244,7 @@ }, "impactParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "c403157f4552068439eefad683faff34", + "m_AssetGUID": "", "m_SubObjectName": "", "m_SubObjectType": "" }, diff --git a/SolastaUnfinishedBusiness/Settings/zappastuff.xml b/SolastaUnfinishedBusiness/Settings/zappastuff.xml index e1afa674d6..15b2ca93f0 100644 --- a/SolastaUnfinishedBusiness/Settings/zappastuff.xml +++ b/SolastaUnfinishedBusiness/Settings/zappastuff.xml @@ -1,5 +1,5 @@ - + 1 0 0 @@ -1503,6 +1503,7 @@ BlessingOfRime ForestGuardian SteelWhirlwind + SwiftQuiver From 71d8601c9caae60ad1cdc309c625a0a925fd3cef Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Tue, 10 Sep 2024 20:55:07 -0700 Subject: [PATCH 112/212] fix holy weapon additional damage die type --- .../Spells/SpellBuildersLevel05.cs | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel05.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel05.cs index 743d324a32..327568dfc5 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel05.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel05.cs @@ -889,7 +889,7 @@ internal static SpellDefinition BuildHolyWeapon() .Create($"AdditionalDamage{NAME}") .SetGuiPresentation(Category.Feature, SpiritualWeapon) .SetNotificationTag("HolyWeapon") - .SetDamageDice(DieType.D6, 2) + .SetDamageDice(DieType.D8, 2) .SetSpecificDamageType(DamageTypeRadiant) .AddCustomSubFeatures( new AddTagToWeapon( @@ -915,9 +915,9 @@ internal static SpellDefinition BuildHolyWeapon() .Build(), EffectFormBuilder .Create() - .HasSavingThrow(EffectSavingThrowType.Negates) - .SetConditionForm(ConditionDefinitions.ConditionBlinded, - ConditionForm.ConditionOperation.Add) + .HasSavingThrow(EffectSavingThrowType.Negates, TurnOccurenceType.EndOfTurn, true) + .SetConditionForm( + ConditionDefinitions.ConditionBlinded, ConditionForm.ConditionOperation.Add) .Build()) .SetParticleEffectParameters(FaerieFire) .SetCasterEffectParameters(PowerOathOfDevotionTurnUnholy) @@ -926,9 +926,11 @@ internal static SpellDefinition BuildHolyWeapon() .Build()) .AddCustomSubFeatures( new PowerOrSpellFinishedByMeHolyWeapon(), - new ValidatorsValidatePowerUse(c => - c.GetMainWeapon()?.DynamicItemProperties.Any(x => x.FeatureDefinition == additionalDamage) == true || - c.GetOffhandWeapon()?.DynamicItemProperties.Any(x => x.FeatureDefinition == additionalDamage) == true)) + new ValidatorsValidatePowerUse(c => + c.GetMainWeapon()?.DynamicItemProperties.Any(x => x.FeatureDefinition == additionalDamage) == + true || + c.GetOffhandWeapon()?.DynamicItemProperties.Any(x => x.FeatureDefinition == additionalDamage) == + true)) .AddToDB(); var condition = ConditionDefinitionBuilder @@ -972,8 +974,7 @@ internal static SpellDefinition BuildHolyWeapon() ItemPropertyUsage.Unlimited, 0, new FeatureUnlockByLevel(additionalDamage, 0)) .Build(), EffectFormBuilder.ConditionForm(condition, ConditionForm.ConditionOperation.Add, true)) - .SetParticleEffectParameters(PowerTraditionLightBlindingFlash) - .SetEffectEffectParameters(new AssetReference()) + .SetCasterEffectParameters(HolyAura) .Build()) .AddToDB(); From 732584087b4258c46c8f504bb4e1179f1c9c70ac Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Tue, 10 Sep 2024 21:16:59 -0700 Subject: [PATCH 113/212] minor tweaks --- SolastaUnfinishedBusiness/ChangelogHistory.txt | 5 +++-- .../Patches/CharacterActionSpendPowerPatcher.cs | 8 ++++---- .../Patches/GameLocationCharacterManagerPatcher.cs | 5 +---- SolastaUnfinishedBusiness/Settings/zappastuff.xml | 2 +- 4 files changed, 9 insertions(+), 11 deletions(-) diff --git a/SolastaUnfinishedBusiness/ChangelogHistory.txt b/SolastaUnfinishedBusiness/ChangelogHistory.txt index 2c94ea8c9f..7827dc466a 100644 --- a/SolastaUnfinishedBusiness/ChangelogHistory.txt +++ b/SolastaUnfinishedBusiness/ChangelogHistory.txt @@ -8,6 +8,7 @@ - fixed Demonic Influence adding all location enemies as new contenders [VANILLA] - fixed Dwarven Fortitude, and Magical Guidance incorrectly consuming a reaction - fixed Exploiter feat not checking for reactions from 2nd target onwards +- fixed Green-Flame Blade cantrip adding extra damage to subsequent attacks on same turn - fixed Lucky, and Mage Slayer feats double consumption - fixed Martial Commander coordinated defense to require an attack first [VANILLA] - fixed Party Editor to register/unregister powers from feats @@ -15,13 +16,13 @@ - fixed Power Attack feat not triggering on unarmed attacks - fixed Quickened interaction with melee attack cantrips - fixed Wrathful Smite to do a wisdom ability check against caster DC -- improved ability checks to also allow reactions on success [Circle of the Cosmos woe] +- improved ability checks to also allow reactions on success +- improved gadgets to trigger "try alter save outcome" type reactions [VANILLA] - improved Maneuvering Attack, and Martial Warlord strategic repositioning to use a run stance - improved mod UI to ensure all settings required to be in sync on MP sessions are now under Gameplay - improved saving roll reaction modal descriptions [Circle of the Cosmos, Sorcerer Wild Magic, etc.] - improved Sorcerer Wild Magic tides of chaos, Conversion Slots, and Shorthand versatilities to react on ability checks - improved spells documentation dump to include allowed casting classes -- improved vanilla to allow reactions on gadget's saving roll [traps] - improved victory modal export behavior to allow heroes not in pool to be exported [VANILLA] KNOWN ISSUES: diff --git a/SolastaUnfinishedBusiness/Patches/CharacterActionSpendPowerPatcher.cs b/SolastaUnfinishedBusiness/Patches/CharacterActionSpendPowerPatcher.cs index 513b9d39c8..b9ceb2d121 100644 --- a/SolastaUnfinishedBusiness/Patches/CharacterActionSpendPowerPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/CharacterActionSpendPowerPatcher.cs @@ -116,8 +116,8 @@ private static IEnumerator ExecuteImpl(CharacterActionSpendPower __instance) } actingCharacter.RulesetCharacter.ProcessConditionsMatchingInterruption( - (RuleDefinitions.ConditionInterruption) ExtraConditionInterruption.SpendPower); - + (RuleDefinitions.ConditionInterruption)ExtraConditionInterruption.SpendPower); + for (var i = 0; i < targets.Count; i++) { var target = targets[i]; @@ -356,8 +356,8 @@ private static IEnumerator ExecuteImpl(CharacterActionSpendPower __instance) } actingCharacter.RulesetCharacter.ProcessConditionsMatchingInterruption( - (RuleDefinitions.ConditionInterruption) ExtraConditionInterruption.SpendPowerExecuted); - + (RuleDefinitions.ConditionInterruption)ExtraConditionInterruption.SpendPowerExecuted); + __instance.PersistantEffectAction(); } } diff --git a/SolastaUnfinishedBusiness/Patches/GameLocationCharacterManagerPatcher.cs b/SolastaUnfinishedBusiness/Patches/GameLocationCharacterManagerPatcher.cs index 967890ea94..1c2890b820 100644 --- a/SolastaUnfinishedBusiness/Patches/GameLocationCharacterManagerPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/GameLocationCharacterManagerPatcher.cs @@ -25,10 +25,7 @@ public static void Prefix(Side side, ref GameLocationBehaviourPackage behaviourP { if (side == Side.Ally) { - behaviourPackage ??= new GameLocationBehaviourPackage - { - EncounterId = 424242 - }; + behaviourPackage ??= new GameLocationBehaviourPackage { EncounterId = 424242 }; } } } diff --git a/SolastaUnfinishedBusiness/Settings/zappastuff.xml b/SolastaUnfinishedBusiness/Settings/zappastuff.xml index 15b2ca93f0..056554803e 100644 --- a/SolastaUnfinishedBusiness/Settings/zappastuff.xml +++ b/SolastaUnfinishedBusiness/Settings/zappastuff.xml @@ -1,5 +1,5 @@ - + 1 0 0 From ce488ba2353dac910dfd4205812b864ef164689e Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Tue, 10 Sep 2024 21:28:31 -0700 Subject: [PATCH 114/212] remove or protect SFX on unsafe MP locations --- SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs | 3 --- .../Api/GameExtensions/GameLocationCharacterExtensions.cs | 8 +------- SolastaUnfinishedBusiness/Classes/InventorClass.cs | 3 +-- SolastaUnfinishedBusiness/Races/Imp.cs | 3 --- SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs | 7 +++++-- .../Subclasses/CircleOfTheWildfire.cs | 2 +- .../Subclasses/RoguishUmbralStalker.cs | 2 +- 7 files changed, 9 insertions(+), 19 deletions(-) diff --git a/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs b/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs index 66fb94a13c..6662ac20b3 100644 --- a/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs +++ b/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs @@ -1805,9 +1805,6 @@ internal static class FeatureDefinitionPowers internal static FeatureDefinitionPower PowerDefilerDarkness { get; } = GetDefinition("PowerDefilerDarkness"); - internal static FeatureDefinitionPower PowerDefilerMistyFormEscape { get; } = - GetDefinition("PowerDefilerMistyFormEscape"); - internal static FeatureDefinitionPower PowerDruidCircleBalanceBalanceOfPower { get; } = GetDefinition("PowerDruidCircleBalanceBalanceOfPower"); diff --git a/SolastaUnfinishedBusiness/Api/GameExtensions/GameLocationCharacterExtensions.cs b/SolastaUnfinishedBusiness/Api/GameExtensions/GameLocationCharacterExtensions.cs index 66a622bdbe..21767654a7 100644 --- a/SolastaUnfinishedBusiness/Api/GameExtensions/GameLocationCharacterExtensions.cs +++ b/SolastaUnfinishedBusiness/Api/GameExtensions/GameLocationCharacterExtensions.cs @@ -115,19 +115,13 @@ internal static void MyExecuteActionSpendPower( actionService.ExecuteInstantSingleAction(actionParams); } - internal static void MyExecuteActionStabilizeAndStandUp( - this GameLocationCharacter character, int hitPoints, IMagicEffect magicEffect = null) + internal static void MyExecuteActionStabilizeAndStandUp(this GameLocationCharacter character, int hitPoints) { var actionService = ServiceRepository.GetService(); var rulesetCharacter = character.RulesetCharacter; rulesetCharacter.StabilizeAndGainHitPoints(hitPoints); - if (magicEffect != null) - { - EffectHelpers.StartVisualEffect(character, character, magicEffect, EffectHelpers.EffectType.Caster); - } - actionService.ExecuteInstantSingleAction(new CharacterActionParams(character, Id.StandUp)); } diff --git a/SolastaUnfinishedBusiness/Classes/InventorClass.cs b/SolastaUnfinishedBusiness/Classes/InventorClass.cs index d5bbfc0677..985c57ca0e 100644 --- a/SolastaUnfinishedBusiness/Classes/InventorClass.cs +++ b/SolastaUnfinishedBusiness/Classes/InventorClass.cs @@ -924,8 +924,7 @@ void ReactionValidated() { var hitPoints = rulesetCharacter.GetClassLevel(Class); - defender.MyExecuteActionStabilizeAndStandUp( - hitPoints, FeatureDefinitionPowers.PowerPatronTimekeeperTimeShift); + defender.MyExecuteActionStabilizeAndStandUp(hitPoints); } } diff --git a/SolastaUnfinishedBusiness/Races/Imp.cs b/SolastaUnfinishedBusiness/Races/Imp.cs index 3161fadb48..fb77437a2f 100644 --- a/SolastaUnfinishedBusiness/Races/Imp.cs +++ b/SolastaUnfinishedBusiness/Races/Imp.cs @@ -569,9 +569,6 @@ public IEnumerator OnTryAlterOutcomeAttack( 0, 0, 0); - - EffectHelpers.StartVisualEffect( - defender, defender, SpellDefinitions.ViciousMockery, EffectHelpers.EffectType.Effect); } } diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs index 511e0dbe11..0b2dc05365 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs @@ -2090,8 +2090,11 @@ void ReactionValidated(CharacterActionParams actionParams) { var slotUsed = actionParams.IntParameter; - EffectHelpers.StartVisualEffect(defender, defender, ShadowArmor, EffectHelpers.EffectType.Caster); - EffectHelpers.StartVisualEffect(defender, defender, ShadowArmor, EffectHelpers.EffectType.Effect); + if (!Global.IsMultiplayer) + { + EffectHelpers.StartVisualEffect(defender, defender, ShadowArmor, EffectHelpers.EffectType.Caster); + EffectHelpers.StartVisualEffect(defender, defender, ShadowArmor, EffectHelpers.EffectType.Effect); + } foreach (var condition in resistanceDamageTypes .Select(damageType => diff --git a/SolastaUnfinishedBusiness/Subclasses/CircleOfTheWildfire.cs b/SolastaUnfinishedBusiness/Subclasses/CircleOfTheWildfire.cs index cd0c265668..634069dcd7 100644 --- a/SolastaUnfinishedBusiness/Subclasses/CircleOfTheWildfire.cs +++ b/SolastaUnfinishedBusiness/Subclasses/CircleOfTheWildfire.cs @@ -923,7 +923,7 @@ void ReactionValidated() { var hitPoints = rulesetCharacter.TryGetAttributeValue(AttributeDefinitions.HitPoints) / 2; - defender.MyExecuteActionStabilizeAndStandUp(hitPoints, PowerDefilerMistyFormEscape); + defender.MyExecuteActionStabilizeAndStandUp(hitPoints); } } } diff --git a/SolastaUnfinishedBusiness/Subclasses/RoguishUmbralStalker.cs b/SolastaUnfinishedBusiness/Subclasses/RoguishUmbralStalker.cs index e76d7ef377..2a237d2472 100644 --- a/SolastaUnfinishedBusiness/Subclasses/RoguishUmbralStalker.cs +++ b/SolastaUnfinishedBusiness/Subclasses/RoguishUmbralStalker.cs @@ -448,7 +448,7 @@ void ReactionValidated() { var hitPoints = 2 * rulesetCharacter.GetClassLevel(CharacterClassDefinitions.Rogue); - defender.MyExecuteActionStabilizeAndStandUp(hitPoints, PowerDefilerMistyFormEscape); + defender.MyExecuteActionStabilizeAndStandUp(hitPoints); } } } From 282a3a2494945690ab6d084cc303c81ff91f004a Mon Sep 17 00:00:00 2001 From: EnderWiggin Date: Wed, 11 Sep 2024 15:10:28 +0300 Subject: [PATCH 115/212] Shortened Command spell description - removed parts that are described in extended tooltip --- .../Translations/en/Spells/Spells01-en.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SolastaUnfinishedBusiness/Translations/en/Spells/Spells01-en.txt b/SolastaUnfinishedBusiness/Translations/en/Spells/Spells01-en.txt index d9fdb17dc2..042eeb7a6a 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Spells/Spells01-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Spells/Spells01-en.txt @@ -76,7 +76,7 @@ Spell/&ChromaticOrbDescription=You hurl a 4-inch-diameter sphere of energy at a Spell/&ChromaticOrbTitle=Chromatic Orb Spell/&CommandSpellApproachDescription=The target moves toward you by the shortest and most direct route, ending its turn if it moves within 5 feet of you. Spell/&CommandSpellApproachTitle=Approach -Spell/&CommandSpellDescription=You speak a one-word command to a creature you can see within range. The target must succeed on a Wisdom saving throw or follow the command on its next turn. You can only command creatures you share a language with, which include all humanoids. To command a non-humanoid creature, you must know Draconic for Dragons, Elvish for Fey, Giant for Giants, Infernal for Fiends and Terran for Elementals. Commands follow:\n• Approach: The target moves toward you by the shortest and most direct route, ending its turn if it moves within 5 feet of you.\n• Flee: The target spends its turn moving away from you by the fastest available means.\n• Grovel: The target falls prone and then ends its turn.\n• Halt: The target doesn't move and takes no actions.\nWhen you cast this spell using a spell slot of 2nd level or higher, you may target an additional creature within range for each slot level above 2nd. +Spell/&CommandSpellDescription=You speak a one-word command to a creature you can see within range. The target must succeed on a Wisdom saving throw or follow the command on its next turn.\nYou can only command creatures you share a language with. Humanoids are considered knowing Common. To command a non-humanoid creature, you must know Draconic for Dragons, Elvish for Fey, Giant for Giants, Infernal for Fiends and Terran for Elementals.\nCannot target Undead or Surprised creatures. Spell/&CommandSpellFleeDescription=The target spends its turn moving away from you by the fastest available means. Spell/&CommandSpellFleeTitle=Flee Spell/&CommandSpellGrovelDescription=The target falls prone and then ends its turn. From 710fe1863a57763c2f6d21b490719d39583acdd2 Mon Sep 17 00:00:00 2001 From: EnderWiggin Date: Wed, 11 Sep 2024 15:21:29 +0300 Subject: [PATCH 116/212] Improved failure reporting for Command spell - properly describe missing language and inability to target Undead --- .../Spells/SpellBuildersLevel01.cs | 55 +++++++++++-------- .../Translations/en/Others-en.txt | 6 +- 2 files changed, 35 insertions(+), 26 deletions(-) diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs index 0b2dc05365..603c201f6b 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs @@ -1497,53 +1497,60 @@ internal static SpellDefinition BuildCommand() private sealed class PowerOrSpellFinishedByMeCommand(params ConditionDefinition[] conditions) : IPowerOrSpellFinishedByMe, IFilterTargetingCharacter { + private static readonly Dictionary FamilyLanguages = new() + { + //TODO: ideally we need to use proper LanguageDefinitions here instead of partial names + { CharacterFamilyDefinitions.Dragon.Name, "Draconic" }, + { CharacterFamilyDefinitions.Elemental.Name, "Terran" }, + { CharacterFamilyDefinitions.Fey.Name, "Elvish" }, + { CharacterFamilyDefinitions.Fiend.Name, "Infernal" }, + { CharacterFamilyDefinitions.Giant.Name, "Giant" }, + { CharacterFamilyDefinitions.Humanoid.Name, "Common" }, + }; + public bool EnforceFullSelection => true; public bool IsValid(CursorLocationSelectTarget __instance, GameLocationCharacter target) { var selectedTargets = __instance.SelectionService.SelectedTargets; + var failureFlags = __instance.actionModifier.FailureFlags; if (selectedTargets.Any(selectedTarget => !target.IsWithinRange(selectedTarget, 6))) { - __instance.actionModifier.FailureFlags.Add("Tooltip/&SecondTargetNotWithinRange"); + failureFlags.Add("Tooltip/&SecondTargetNotWithinRange"); return false; } - var rulesetCaster = __instance.ActionParams.ActingCharacter.RulesetCharacter.GetOriginalHero(); + var rulesetTarget = target.RulesetCharacter; - if (rulesetCaster == null) + if (rulesetTarget.HasConditionOfCategoryAndType( + AttributeDefinitions.TagEffect, RuleDefinitions.ConditionSurprised)) { - __instance.actionModifier.FailureFlags.Add("Tooltip/&TargetMustUnderstandYou"); + failureFlags.Add("Failure/&FailureFlagTargetMustNotBeSurprised"); return false; } - var rulesetTarget = target.RulesetCharacter; + if (rulesetTarget.CharacterFamily == CharacterFamilyDefinitions.Undead.Name) + { + failureFlags.Add("Failure/&FailureFlagCannotTargetUndead"); + return false; + } + + var rulesetCaster = __instance.ActionParams.ActingCharacter.RulesetCharacter.GetOriginalHero(); - if (rulesetTarget.HasConditionOfCategoryAndType( - AttributeDefinitions.TagEffect, RuleDefinitions.ConditionSurprised)) + if (rulesetCaster == null || !FamilyLanguages.TryGetValue(rulesetTarget.CharacterFamily, out var language)) { - __instance.actionModifier.FailureFlags.Add("Tooltip/&TargetMustNotBeSurprised"); + failureFlags.Add("Failure/&FailureFlagTargetMustUnderstandYou"); return false; } - switch (rulesetTarget.CharacterFamily) + if (rulesetCaster.LanguageProficiencies.Contains($"Language_{language}")) { - case "Dragon" when - rulesetCaster.LanguageProficiencies.Contains("Language_Draconic"): - case "Elemental" when - rulesetCaster.LanguageProficiencies.Contains("Language_Terran"): - case "Fey" when - rulesetCaster.LanguageProficiencies.Contains("Language_Elvish"): - case "Fiend" when - rulesetCaster.LanguageProficiencies.Contains("Language_Infernal"): - case "Giant" when - rulesetCaster.LanguageProficiencies.Contains("Language_Giant"): - case "Humanoid": - return true; - default: - __instance.actionModifier.FailureFlags.Add("Tooltip/&TargetMustUnderstandYou"); - return false; + return true; } + + failureFlags.Add(Gui.Format("Failure/&FailureFlagMustKnowLanguage", $"Language/&{language}Title")); + return false; } public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, BaseDefinition baseDefinition) diff --git a/SolastaUnfinishedBusiness/Translations/en/Others-en.txt b/SolastaUnfinishedBusiness/Translations/en/Others-en.txt index 215642430e..1d48921236 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Others-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Others-en.txt @@ -61,6 +61,10 @@ ContentPack/&9999Description=The Unfinished Business Pack is a veritable Horn of ContentPack/&9999Title=Unfinished Business Pack Equipment/&BeltOfRegeneration_Function_Description=Regenerate 5 hit points per round for one minute. Equipment/&DLC3_DwarvenWeapon_Dagger+3_CriticalThreshold=Your attacks score a critical hit on an 18, 19 or 20 while you are wielding this weapon and are attuned to it. +Failure/&FailureFlagCannotTargetUndead=Cannot target Undead creatures +Failure/&FailureFlagMustKnowLanguage=You must be proficient in {0} language to command this creature +Failure/&FailureFlagTargetMustNotBeSurprised=Target must not be surprised +Failure/&FailureFlagTargetMustUnderstandYou=Target must understand your command Feature/&AbilityCheckAffinityDarknessPerceptiveDescription=You have Advantage on Wisdom (Perception) checks while unlit or in magical darkness. Feature/&AbilityCheckAffinityDarknessPerceptiveTitle=Darkness Perceptive Feature/&AlwaysBeardDescription={0}% chances to grow a glorious beard! @@ -307,8 +311,6 @@ Tooltip/&Tag9000Title=Custom Effect Tooltip/&TagDamageChaosBoltTitle=Chaotic Damage Tooltip/&TagUnfinishedBusinessTitle=Unfinished Business Tooltip/&TargetMeleeWeaponError=Can't perform melee attack on this target as not within {0} -Tooltip/&TargetMustNotBeSurprised=Target must not be surprised -Tooltip/&TargetMustUnderstandYou=Target must understand your command UI/&CustomFeatureSelectionStageDescription=Select extra features for your class/subclass. UI/&CustomFeatureSelectionStageFeatures=Features UI/&CustomFeatureSelectionStageNotDone=You must select all available features before proceeding From 7cf19eeec572746582ef2b80815338e837bc1f20 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Wed, 11 Sep 2024 15:28:17 -0700 Subject: [PATCH 117/212] update translations --- SolastaUnfinishedBusiness/Translations/de/Others-de.txt | 4 ++++ .../Translations/de/Spells/Spells01-de.txt | 2 +- SolastaUnfinishedBusiness/Translations/es/Others-es.txt | 4 ++++ .../Translations/es/Spells/Spells01-es.txt | 2 +- SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt | 4 ++++ .../Translations/fr/Spells/Spells01-fr.txt | 2 +- SolastaUnfinishedBusiness/Translations/it/Others-it.txt | 4 ++++ .../Translations/it/Spells/Spells01-it.txt | 2 +- SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt | 4 ++++ .../Translations/ja/Spells/Spells01-ja.txt | 2 +- SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt | 4 ++++ .../Translations/ko/Spells/Spells01-ko.txt | 2 +- SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt | 4 ++++ .../Translations/pt-BR/Spells/Spells01-pt-BR.txt | 2 +- SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt | 4 ++++ .../Translations/ru/Spells/Spells01-ru.txt | 2 +- SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt | 4 ++++ .../Translations/zh-CN/Spells/Spells01-zh-CN.txt | 2 +- 18 files changed, 45 insertions(+), 9 deletions(-) diff --git a/SolastaUnfinishedBusiness/Translations/de/Others-de.txt b/SolastaUnfinishedBusiness/Translations/de/Others-de.txt index dcc68cacb2..68d8da842e 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Others-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Others-de.txt @@ -61,6 +61,10 @@ ContentPack/&9999Description=Das „Unfinished Business Pack“ ist ein wahres F ContentPack/&9999Title=Paket „Unerledigte Geschäfte“ Equipment/&BeltOfRegeneration_Function_Description=Regeneriert eine Minute lang 5 Trefferpunkte pro Runde. Equipment/&DLC3_DwarvenWeapon_Dagger+3_CriticalThreshold=Ihre Angriffe erzielen einen kritischen Treffer bei 18, 19 oder 20, während Sie diese Waffe tragen und auf sie eingestellt sind. +Failure/&FailureFlagCannotTargetUndead=Untote Kreaturen können nicht als Ziel gewählt werden. +Failure/&FailureFlagMustKnowLanguage=Du musst die Sprache {0} beherrschen, um diese Kreatur zu befehligen +Failure/&FailureFlagTargetMustNotBeSurprised=Das Ziel darf nicht überrascht werden +Failure/&FailureFlagTargetMustUnderstandYou=Das Ziel muss Ihren Befehl verstehen Feature/&AbilityCheckAffinityDarknessPerceptiveDescription=Sie haben einen Vorteil bei Weisheitswürfen (Wahrnehmung), wenn Sie unbeleuchtet sind oder sich in magischer Dunkelheit befinden. Feature/&AbilityCheckAffinityDarknessPerceptiveTitle=Dunkelheit wahrnehmend Feature/&AlwaysBeardDescription={0} % Chance, einen prächtigen Bart wachsen zu lassen! diff --git a/SolastaUnfinishedBusiness/Translations/de/Spells/Spells01-de.txt b/SolastaUnfinishedBusiness/Translations/de/Spells/Spells01-de.txt index 3ba0e58142..9ed11b32ab 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Spells/Spells01-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Spells/Spells01-de.txt @@ -76,7 +76,7 @@ Spell/&ChromaticOrbDescription=Du schleuderst eine Energiekugel mit 4 Zoll Durch Spell/&ChromaticOrbTitle=Chromatische Kugel Spell/&CommandSpellApproachDescription=Das Ziel bewegt sich auf dem kürzesten und direktesten Weg auf Sie zu und beendet seinen Zug, wenn es sich Ihnen näher als 1,5 m nähert. Spell/&CommandSpellApproachTitle=Ansatz -Spell/&CommandSpellDescription=Sie sprechen einen einwortigen Befehl zu einer Kreatur in Reichweite, die Sie sehen können. Das Ziel muss einen Weisheitsrettungswurf bestehen oder dem Befehl in seinem nächsten Zug folgen. Sie können nur Kreaturen befehligen, mit denen Sie eine gemeinsame Sprache sprechen, dazu gehören alle Humanoiden. Um einer nicht-humanoiden Kreatur Befehle zu erteilen, müssen Sie Drakonisch für Drachen, Elbisch für Feenwesen, Riesisch für Riesen, Höllisch für Unholde und Terranisch für Elementare beherrschen. Es gibt folgende Befehle:\n• Annäherung: Das Ziel bewegt sich auf dem kürzesten und direktesten Weg auf Sie zu und beendet seinen Zug, wenn es sich Ihnen näher als 1,52 m nähert.\n• Fliehen: Das Ziel verbringt seinen Zug damit, sich auf dem schnellsten verfügbaren Weg von Ihnen wegzubewegen.\n• Kriechen: Das Ziel fällt hin und beendet dann seinen Zug.\n• Halt: Das Ziel bewegt sich nicht und unternimmt keine Aktionen.\nWenn Sie diesen Zauber mit einem Zauberplatz der 2. Stufe oder höher wirken, können Sie für jede Zauberplatzstufe über der 2. eine zusätzliche Kreatur in Reichweite als Ziel wählen. +Spell/&CommandSpellDescription=Du sprichst einen einsilbigen Befehl zu einer Kreatur, die du in Reichweite sehen kannst. Das Ziel muss einen Weisheitsrettungswurf bestehen oder dem Befehl in seinem nächsten Zug folgen.\nDu kannst nur Kreaturen befehligen, mit denen du eine Sprache sprichst. Humanoide beherrschen die Gemeinsprache. Um einer nicht-humanoiden Kreatur Befehle zu erteilen, musst du Drakonisch für Drachen, Elbisch für Feen, Riesisch für Riesen, Höllensprache für Unholde und Terranisch für Elementare beherrschen.\nUntote oder überraschte Kreaturen können nicht als Ziel gewählt werden. Spell/&CommandSpellFleeDescription=Das Ziel verbringt seinen Zug damit, sich mit den schnellsten verfügbaren Mitteln von Ihnen zu entfernen. Spell/&CommandSpellFleeTitle=Fliehen Spell/&CommandSpellGrovelDescription=Das Ziel fällt zu Boden und beendet dann seinen Zug. diff --git a/SolastaUnfinishedBusiness/Translations/es/Others-es.txt b/SolastaUnfinishedBusiness/Translations/es/Others-es.txt index b3ccd932b4..b3380aeb17 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Others-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Others-es.txt @@ -61,6 +61,10 @@ ContentPack/&9999Description=El paquete Unfinished Business es un auténtico Cue ContentPack/&9999Title=Paquete de asuntos pendientes Equipment/&BeltOfRegeneration_Function_Description=Regenera 5 puntos de vida por ronda durante un minuto. Equipment/&DLC3_DwarvenWeapon_Dagger+3_CriticalThreshold=Tus ataques obtienen un golpe crítico con un 18, 19 o 20 mientras estés usando esta arma y estés en sintonía con ella. +Failure/&FailureFlagCannotTargetUndead=No puede apuntar a criaturas no muertas +Failure/&FailureFlagMustKnowLanguage=Debes dominar el idioma {0} para poder dar órdenes a esta criatura. +Failure/&FailureFlagTargetMustNotBeSurprised=El objetivo no debe sorprenderse +Failure/&FailureFlagTargetMustUnderstandYou=El objetivo debe comprender tu orden Feature/&AbilityCheckAffinityDarknessPerceptiveDescription=Tienes Ventaja en las pruebas de Sabiduría (Percepción) mientras estés apagado o en oscuridad mágica. Feature/&AbilityCheckAffinityDarknessPerceptiveTitle=Percepción de la oscuridad Feature/&AlwaysBeardDescription=¡{0}% de posibilidades de que te crezca una barba gloriosa! diff --git a/SolastaUnfinishedBusiness/Translations/es/Spells/Spells01-es.txt b/SolastaUnfinishedBusiness/Translations/es/Spells/Spells01-es.txt index 1062f3983e..6bc7d2d62e 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Spells/Spells01-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Spells/Spells01-es.txt @@ -76,7 +76,7 @@ Spell/&ChromaticOrbDescription=Lanzas una esfera de energía de 4 pulgadas de di Spell/&ChromaticOrbTitle=Orbe cromático Spell/&CommandSpellApproachDescription=El objetivo se mueve hacia ti por la ruta más corta y directa, y finaliza su turno si se mueve a menos de 5 pies de ti. Spell/&CommandSpellApproachTitle=Acercarse -Spell/&CommandSpellDescription=Pronuncias una orden de una palabra a una criatura que puedas ver dentro del alcance. El objetivo debe superar una tirada de salvación de Sabiduría o seguir la orden en su siguiente turno. Solo puedes dar órdenes a criaturas con las que compartes un idioma, lo que incluye a todos los humanoides. Para dar órdenes a una criatura no humanoide, debes saber Dracónico para Dragones, Élfico para Fey, Gigante para Gigantes, Infernal para Demonios y Terrano para Elementales. Las órdenes son las siguientes:\n• Acercarse: el objetivo se mueve hacia ti por la ruta más corta y directa, y termina su turno si se mueve a 5 pies o menos de ti.\n• Huir: el objetivo pasa su turno alejándose de ti por el medio más rápido disponible.\n• Arrastrarse: el objetivo cae boca abajo y luego termina su turno.\n• Detenerse: el objetivo no se mueve y no realiza ninguna acción.\nCuando lanzas este hechizo usando un espacio de hechizo de nivel 2 o superior, puedes seleccionar una criatura adicional dentro del alcance por cada nivel de espacio por encima del 2. +Spell/&CommandSpellDescription=Pronuncias una orden de una palabra a una criatura que puedas ver dentro del alcance. El objetivo debe superar una tirada de salvación de Sabiduría o seguir la orden en su siguiente turno.\nSolo puedes dar órdenes a criaturas con las que compartes un idioma. Se considera que los humanoides saben Común. Para dar órdenes a una criatura no humanoide, debes saber Dracónico para Dragones, Élfico para Fey, Gigante para Gigantes, Infernal para Demonios y Terrano para Elementales.\nNo puedes seleccionar como objetivo a criaturas No Muertas o Sorprendidas. Spell/&CommandSpellFleeDescription=El objetivo pasa su turno alejándose de ti por el medio más rápido disponible. Spell/&CommandSpellFleeTitle=Huir Spell/&CommandSpellGrovelDescription=El objetivo cae boca abajo y luego termina su turno. diff --git a/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt index 43a200aa95..14c492c508 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt @@ -61,6 +61,10 @@ ContentPack/&9999Description=Le Unfinished Business Pack est une véritable Corn ContentPack/&9999Title=Pack d'affaires inachevées Equipment/&BeltOfRegeneration_Function_Description=Régénère 5 points de vie par tour pendant une minute. Equipment/&DLC3_DwarvenWeapon_Dagger+3_CriticalThreshold=Vos attaques infligent un coup critique sur un score de 18, 19 ou 20 lorsque vous maniez cette arme et que vous êtes en phase avec elle. +Failure/&FailureFlagCannotTargetUndead=Ne peut pas cibler les créatures mortes-vivantes +Failure/&FailureFlagMustKnowLanguage=Vous devez maîtriser la langue {0} pour commander cette créature +Failure/&FailureFlagTargetMustNotBeSurprised=La cible ne doit pas être surprise +Failure/&FailureFlagTargetMustUnderstandYou=La cible doit comprendre votre commande Feature/&AbilityCheckAffinityDarknessPerceptiveDescription=Vous avez un avantage sur les tests de Sagesse (Perception) lorsque vous n'êtes pas éclairé ou dans l'obscurité magique. Feature/&AbilityCheckAffinityDarknessPerceptiveTitle=Perception des ténèbres Feature/&AlwaysBeardDescription={0}% de chances de faire pousser une barbe glorieuse ! diff --git a/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells01-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells01-fr.txt index e162205066..6455d42d3e 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells01-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells01-fr.txt @@ -76,7 +76,7 @@ Spell/&ChromaticOrbDescription=Vous lancez une sphère d'énergie de 10 cm de di Spell/&ChromaticOrbTitle=Orbe chromatique Spell/&CommandSpellApproachDescription=La cible se déplace vers vous par le chemin le plus court et le plus direct, mettant fin à son tour si elle se déplace à moins de 5 pieds de vous. Spell/&CommandSpellApproachTitle=Approche -Spell/&CommandSpellDescription=Vous donnez un ordre d'un seul mot à une créature que vous pouvez voir à portée. La cible doit réussir un jet de sauvegarde de Sagesse ou suivre l'ordre à son prochain tour. Vous ne pouvez commander qu'aux créatures avec lesquelles vous partagez une langue, ce qui inclut tous les humanoïdes. Pour commander une créature non-humanoïde, vous devez connaître le draconique pour les dragons, l'elfique pour les fées, le géant pour les géants, l'infernal pour les démons et le terran pour les élémentaires. Les ordres sont les suivants :\n• Approche : la cible se déplace vers vous par le chemin le plus court et le plus direct, mettant fin à son tour si elle se déplace à 1,50 mètre ou moins de vous.\n• Fuir : la cible passe son tour à s'éloigner de vous par le moyen le plus rapide disponible.\n• Ramper : la cible tombe à terre puis termine son tour.\n• Halte : la cible ne bouge pas et n'entreprend aucune action.\nLorsque vous lancez ce sort en utilisant un emplacement de sort de niveau 2 ou supérieur, vous pouvez cibler une créature supplémentaire à portée pour chaque niveau d'emplacement au-dessus du niveau 2. +Spell/&CommandSpellDescription=Vous donnez un ordre d'un seul mot à une créature visible à portée. La cible doit réussir un jet de sauvegarde de Sagesse ou suivre l'ordre lors de son prochain tour.\nVous ne pouvez commander qu'aux créatures avec lesquelles vous partagez une langue. Les humanoïdes sont considérés comme connaissant le commun. Pour commander une créature non humanoïde, vous devez connaître le draconique pour les dragons, l'elfique pour les fées, le géant pour les géants, l'infernal pour les démons et le terran pour les élémentaires.\nNe peut pas cibler les morts-vivants ou les créatures surprises. Spell/&CommandSpellFleeDescription=La cible passe son tour à s'éloigner de vous par le moyen le plus rapide disponible. Spell/&CommandSpellFleeTitle=Fuir Spell/&CommandSpellGrovelDescription=La cible tombe à terre et termine son tour. diff --git a/SolastaUnfinishedBusiness/Translations/it/Others-it.txt b/SolastaUnfinishedBusiness/Translations/it/Others-it.txt index 70060ff774..96f6cee8e2 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Others-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Others-it.txt @@ -61,6 +61,10 @@ ContentPack/&9999Description=L'Unfinished Business Pack è un vero e proprio Cor ContentPack/&9999Title=Pacchetto Affari Incompiuti Equipment/&BeltOfRegeneration_Function_Description=Rigenera 5 punti ferita a round per un minuto. Equipment/&DLC3_DwarvenWeapon_Dagger+3_CriticalThreshold=I tuoi attacchi infliggono un colpo critico con un risultato di 18, 19 o 20 mentre impugni quest'arma e sei in sintonia con essa. +Failure/&FailureFlagCannotTargetUndead=Non può prendere di mira le creature non morte +Failure/&FailureFlagMustKnowLanguage=Devi essere competente nella lingua {0} per comandare questa creatura +Failure/&FailureFlagTargetMustNotBeSurprised=Il bersaglio non deve essere sorpreso +Failure/&FailureFlagTargetMustUnderstandYou=Il bersaglio deve capire il tuo comando Feature/&AbilityCheckAffinityDarknessPerceptiveDescription=Hai Vantaggio nelle prove di Saggezza (Percezione) quando sei al buio o nell'oscurità magica. Feature/&AbilityCheckAffinityDarknessPerceptiveTitle=Percezione dell'oscurità Feature/&AlwaysBeardDescription={0}% di possibilità di farti crescere una barba gloriosa! diff --git a/SolastaUnfinishedBusiness/Translations/it/Spells/Spells01-it.txt b/SolastaUnfinishedBusiness/Translations/it/Spells/Spells01-it.txt index c6204d2950..c128b74745 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Spells/Spells01-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Spells/Spells01-it.txt @@ -76,7 +76,7 @@ Spell/&ChromaticOrbDescription=Scagli una sfera di energia di 4 pollici di diame Spell/&ChromaticOrbTitle=Sfera cromatica Spell/&CommandSpellApproachDescription=Il bersaglio si muove verso di te seguendo il percorso più breve e diretto e termina il suo turno se si sposta entro 1,5 metri da te. Spell/&CommandSpellApproachTitle=Approccio -Spell/&CommandSpellDescription=Pronuncia un comando di una sola parola a una creatura che puoi vedere entro il raggio d'azione. Il bersaglio deve superare un tiro salvezza su Saggezza o eseguire il comando nel suo turno successivo. Puoi comandare solo creature con cui condividi una lingua, inclusi tutti gli umanoidi. Per comandare una creatura non umanoide, devi conoscere il Draconico per i Draghi, l'Elfico per i Fati, il Gigante per i Giganti, l'Infernale per i Demoni e il Terran per gli Elementali. I comandi seguono:\n• Avvicinamento: il bersaglio si muove verso di te attraverso la via più breve e diretta, terminando il suo turno se si muove entro 5 piedi da te.\n• Fuggire: il bersaglio trascorre il suo turno allontanandosi da te con il mezzo più veloce disponibile.\n• Umiliarsi: il bersaglio cade prono e poi termina il suo turno.\n• Arrestare: il bersaglio non si muove e non esegue azioni.\nQuando lanci questo incantesimo usando uno slot incantesimo di 2° livello o superiore, puoi prendere di mira una creatura aggiuntiva entro il raggio d'azione per ogni livello di slot superiore al 2°. +Spell/&CommandSpellDescription=Pronuncia un comando di una sola parola a una creatura che puoi vedere entro il raggio d'azione. Il bersaglio deve superare un tiro salvezza su Saggezza o seguire il comando nel suo turno successivo.\nPuoi comandare solo creature con cui condividi una lingua. Gli umanoidi sono considerati a conoscenza del Comune. Per comandare una creatura non umanoide, devi conoscere il Draconico per i Draghi, l'Elfico per i Fati, il Gigante per i Giganti, l'Infernale per i Demoni e il Terran per gli Elementali.\nNon puoi bersagliare creature Non-morte o Sorprese. Spell/&CommandSpellFleeDescription=Il bersaglio trascorre il suo turno allontanandosi da te con il mezzo più veloce disponibile. Spell/&CommandSpellFleeTitle=Fuggire Spell/&CommandSpellGrovelDescription=Il bersaglio cade prono e poi termina il suo turno. diff --git a/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt index a9ced391d1..f42b4d0eb5 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt @@ -61,6 +61,10 @@ ContentPack/&9999Description=Unfinished Business Pack は、まさに Horn of Pl ContentPack/&9999Title=未完成ビジネスパック Equipment/&BeltOfRegeneration_Function_Description=1分間、ラウンドごとに5ヒットポイントを回復します。 Equipment/&DLC3_DwarvenWeapon_Dagger+3_CriticalThreshold=この武器を使用し、それに同調している間、攻撃は 18、19、または 20 でクリティカル ヒットを獲得します。 +Failure/&FailureFlagCannotTargetUndead=アンデッドクリーチャーをターゲットにできない +Failure/&FailureFlagMustKnowLanguage=この生物を指揮するには{0}言語に堪能でなければなりません +Failure/&FailureFlagTargetMustNotBeSurprised=ターゲットは驚いてはいけない +Failure/&FailureFlagTargetMustUnderstandYou=ターゲットはあなたのコマンドを理解する必要があります Feature/&AbilityCheckAffinityDarknessPerceptiveDescription=照明がついていないとき、または魔法の暗闇にいるとき、あなたは知恵(知覚)チェックでアドバンテージを獲得します。 Feature/&AbilityCheckAffinityDarknessPerceptiveTitle=闇の知覚 Feature/&AlwaysBeardDescription={0}% の確率で立派なひげが生えてきます。 diff --git a/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells01-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells01-ja.txt index d4196bca73..0e3eb77177 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells01-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells01-ja.txt @@ -76,7 +76,7 @@ Spell/&ChromaticOrbDescription=範囲内に見える生き物に直径 4 イン Spell/&ChromaticOrbTitle=クロマティックオーブ Spell/&CommandSpellApproachDescription=ターゲットは最短かつ最も直接的な経路であなたに向かって移動し、あなたの 5 フィート以内に移動した場合にターンを終了します。 Spell/&CommandSpellApproachTitle=アプローチ -Spell/&CommandSpellDescription=あなたは範囲内にいる、あなたが見ることができるクリーチャーに、一言の命令を告げる。対象は【判断力】セーヴィング・スローに成功するか、次のターンに命令に従わなければならない。あなたは、言語を共有するクリーチャーにのみ命令できる。これにはすべてのヒューマノイドが含まれる。非ヒューマノイドのクリーチャーに命令するには、ドラゴンはドラゴン語、フェイはエルフ語、巨人は巨人語、悪魔は地獄語、エレメンタルは地球語を知っている必要がある。命令は以下のとおり:\n• 接近: 対象は最短かつ最も直接的な経路であなたに向かって移動し、対象があなたから 5 フィート以内に移動した場合にターンを終了する。\n• 逃走: 対象は、利用可能な最速の手段であなたから離れることにターンを費やす。\n• 卑屈: 対象はうつ伏せになり、その後ターンを終了する。\n• 停止: 対象は移動せず、アクションも行わない。\nこの呪文を 2 レベル以上の呪文スロットを使用して発動する場合、2 レベルを超える各スロット レベルごとに、範囲内の追加クリーチャーをターゲットにすることができる。 +Spell/&CommandSpellDescription=範囲内にいる、あなたが見ることができるクリーチャーに、一言の命令を発します。ターゲットは、ウィズダム セーヴィング スローに成功するか、次のターンに命令に従わなければなりません。\nあなたは、同じ言語を共有するクリーチャーにのみ命令できます。ヒューマノイドは、共通言語を知っているものとみなされます。ヒューマノイド以外のクリーチャーに命令するには、ドラゴンの場合はドラゴン語、フェイの場合はエルフ語、巨人の場合は巨人語、悪魔の場合は地獄語、エレメンタルの場合は地語を知っている必要があります。\nアンデッドまたは驚愕クリーチャーをターゲットにすることはできません。 Spell/&CommandSpellFleeDescription=ターゲットは、そのターン、利用可能な最速の手段であなたから離れていきます。 Spell/&CommandSpellFleeTitle=逃げる Spell/&CommandSpellGrovelDescription=対象はうつ伏せになり、その後ターンを終了します。 diff --git a/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt index 21e75ef63c..10892f7e13 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt @@ -61,6 +61,10 @@ ContentPack/&9999Description=Unfinished Business Pack은 진정한 Horn of Plent ContentPack/&9999Title=미완성 비즈니스 팩 Equipment/&BeltOfRegeneration_Function_Description=1분 동안 라운드당 5개의 체력을 재생합니다. Equipment/&DLC3_DwarvenWeapon_Dagger+3_CriticalThreshold=이 무기를 휘두르고 그에 맞춰 조정하는 동안 공격은 18, 19 또는 20에 치명타를 기록합니다. +Failure/&FailureFlagCannotTargetUndead=언데드 생물을 대상으로 할 수 없습니다. +Failure/&FailureFlagMustKnowLanguage=이 생물을 지휘하려면 {0} 언어에 능통해야 합니다. +Failure/&FailureFlagTargetMustNotBeSurprised=타겟은 놀라지 않아야 합니다. +Failure/&FailureFlagTargetMustUnderstandYou=타겟은 당신의 명령을 이해해야 합니다 Feature/&AbilityCheckAffinityDarknessPerceptiveDescription=불이 켜지지 않거나 마법의 어둠 속에 있을 때 지혜(지각) 판정에 유리합니다. Feature/&AbilityCheckAffinityDarknessPerceptiveTitle=어둠 감지 Feature/&AlwaysBeardDescription=멋진 수염이 자랄 확률은 {0}%입니다! diff --git a/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells01-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells01-ko.txt index c96e0640e2..5ed8a2796f 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells01-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells01-ko.txt @@ -76,7 +76,7 @@ Spell/&ChromaticOrbDescription=범위 내에서 볼 수 있는 생물에게 직 Spell/&ChromaticOrbTitle=색채의 오브 Spell/&CommandSpellApproachDescription=타겟은 가장 짧고 직접적인 경로로 당신을 향해 이동하며, 타겟이 당신으로부터 5피트 이내로 접근하면 턴이 끝납니다. Spell/&CommandSpellApproachTitle=접근하다 -Spell/&CommandSpellDescription=당신은 범위 내에서 볼 수 있는 생물에게 한 단어 명령을 내립니다. 대상은 지혜 구원 굴림에 성공하거나 다음 턴에 명령을 따라야 합니다. 당신은 모든 인간형을 포함하여 당신과 언어를 공유하는 생물에게만 명령을 내릴 수 있습니다. 비인간형 생물을 명령하려면 드래곤의 경우 드라코닉, 페이의 경우 엘프, 거인의 경우 자이언트, 악마의 경우 인페르날, 엘리멘탈의 경우 테란을 알아야 합니다. 명령은 다음과 같습니다.\n• 접근: 대상은 가장 짧고 직접적인 경로로 당신에게 다가오며, 5피트 이내로 이동하면 턴을 끝냅니다.\n• 도망: 대상은 가능한 가장 빠른 수단으로 당신에게서 멀어지며 턴을 보냅니다.\n• 굴욕: 대상은 엎드린 다음 턴을 끝냅니다.\n• 정지: 대상은 움직이지 않고 아무런 행동도 취하지 않습니다.\n2레벨 이상의 주문 슬롯을 사용하여 이 주문을 시전할 때 2레벨을 넘는 슬롯 레벨마다 범위 내에 있는 추가 생물을 대상으로 지정할 수 있습니다. +Spell/&CommandSpellDescription=범위 내에서 볼 수 있는 생물에게 한 단어 명령을 내립니다. 대상은 지혜 구원 굴림에 성공해야 하며, 그렇지 않으면 다음 턴에 명령을 따라야 합니다.\n당신은 같은 언어를 공유하는 생물에게만 명령을 내릴 수 있습니다. 휴머노이드는 커먼을 아는 것으로 간주됩니다. 휴머노이드가 아닌 생물에게 명령을 내리려면 드래곤은 드라코닉, 페이는 엘프, 거인은 자이언트, 악마는 인페르널, 엘리멘탈은 테란을 알아야 합니다.\n언데드나 놀란 생물은 대상으로 삼을 수 없습니다. Spell/&CommandSpellFleeDescription=타겟은 가능한 가장 빠른 수단을 통해 당신에게서 멀어지며 턴을 보냅니다. Spell/&CommandSpellFleeTitle=서두르다 Spell/&CommandSpellGrovelDescription=타겟이 엎어진 후 턴이 끝납니다. diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt index 010d46ec4a..d907300af1 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt @@ -61,6 +61,10 @@ ContentPack/&9999Description=O Pacote de Negócios Inacabados é uma verdadeira ContentPack/&9999Title=Pacote de negócios inacabados Equipment/&BeltOfRegeneration_Function_Description=Regenera 5 pontos de vida por rodada durante um minuto. Equipment/&DLC3_DwarvenWeapon_Dagger+3_CriticalThreshold=Seus ataques causam um acerto crítico de 18, 19 ou 20 enquanto você estiver empunhando esta arma e estiver sintonizado com ela. +Failure/&FailureFlagCannotTargetUndead=Não é possível mirar em criaturas mortas-vivas +Failure/&FailureFlagMustKnowLanguage=Você deve ser proficiente em {0} idioma para comandar esta criatura +Failure/&FailureFlagTargetMustNotBeSurprised=O alvo não deve ser surpreendido +Failure/&FailureFlagTargetMustUnderstandYou=O alvo deve entender seu comando Feature/&AbilityCheckAffinityDarknessPerceptiveDescription=Você tem Vantagem em testes de Sabedoria (Percepção) enquanto estiver apagado ou em escuridão mágica. Feature/&AbilityCheckAffinityDarknessPerceptiveTitle=Escuridão Perceptiva Feature/&AlwaysBeardDescription={0}% de chances de deixar uma barba gloriosa crescer! diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells01-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells01-pt-BR.txt index 19e0c5203d..e98096d91d 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells01-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells01-pt-BR.txt @@ -76,7 +76,7 @@ Spell/&ChromaticOrbDescription=Você arremessa uma esfera de energia de 4 polega Spell/&ChromaticOrbTitle=Orbe Cromático Spell/&CommandSpellApproachDescription=O alvo se move em sua direção pela rota mais curta e direta, terminando seu turno se ele se mover a menos de 1,5 metro de você. Spell/&CommandSpellApproachTitle=Abordagem -Spell/&CommandSpellDescription=Você fala um comando de uma palavra para uma criatura que você pode ver dentro do alcance. O alvo deve ser bem-sucedido em um teste de resistência de Sabedoria ou seguir o comando em seu próximo turno. Você só pode comandar criaturas com as quais você compartilha um idioma, o que inclui todos os humanoides. Para comandar uma criatura não humanoide, você deve saber Dracônico para Dragões, Élfico para Feéricos, Gigante para Gigantes, Infernal para Demônios e Terrano para Elementais. Os comandos seguem:\n• Aproximar-se: O alvo se move em sua direção pela rota mais curta e direta, terminando seu turno se ele se mover a 1,5 m de você.\n• Fugir: O alvo gasta seu turno se afastando de você pelo meio mais rápido disponível.\n• Rastejar: O alvo cai e então termina seu turno.\n• Parar: O alvo não se move e não realiza nenhuma ação.\nQuando você conjura esta magia usando um espaço de magia de 2º nível ou superior, você pode escolher uma criatura adicional dentro do alcance para cada nível de espaço acima de 2º. +Spell/&CommandSpellDescription=Você fala um comando de uma palavra para uma criatura que você pode ver dentro do alcance. O alvo deve ter sucesso em um teste de resistência de Sabedoria ou seguir o comando em seu próximo turno.\nVocê só pode comandar criaturas com as quais você compartilha um idioma. Humanoides são considerados conhecedores de Comum. Para comandar uma criatura não humanoide, você deve saber Dracônico para Dragões, Élfico para Feéricos, Gigante para Gigantes, Infernal para Demônios e Terrano para Elementais.\nNão pode ter como alvo Mortos-vivos ou criaturas Surpreendidas. Spell/&CommandSpellFleeDescription=O alvo passa seu turno se afastando de você da maneira mais rápida possível. Spell/&CommandSpellFleeTitle=Fugir Spell/&CommandSpellGrovelDescription=O alvo cai no chão e então termina seu turno. diff --git a/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt index 7d132237c0..87af59347d 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt @@ -61,6 +61,10 @@ ContentPack/&9999Description=Мод Неоконченное Дело - это ContentPack/&9999Title=Мод Неоконченное Дело Equipment/&BeltOfRegeneration_Function_Description=Восстанавливает 5 хитов за раунд в течение одной минуты. Equipment/&DLC3_DwarvenWeapon_Dagger+3_CriticalThreshold=Ваши атаки становятся критическими попаданиями при бросках 18, 19 или 20, пока вы используете это оружие и настроены на него. +Failure/&FailureFlagCannotTargetUndead=Невозможно выбрать в качестве цели нежить. +Failure/&FailureFlagMustKnowLanguage=Вы должны владеть {0} языком, чтобы управлять этим существом +Failure/&FailureFlagTargetMustNotBeSurprised=Цель не должна быть застигнута врасплох +Failure/&FailureFlagTargetMustUnderstandYou=Цель должна понимать вашу команду. Feature/&AbilityCheckAffinityDarknessPerceptiveDescription=Вы совершаете с преимуществом проверки Мудрости (Восприятие), если находитесь не на свету или в области магической тьмы. Feature/&AbilityCheckAffinityDarknessPerceptiveTitle=Восприятие тьмы Feature/&AlwaysBeardDescription=Шанс {0}% отрастить великолепную бороду! diff --git a/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells01-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells01-ru.txt index a58c6e6800..e29215d3dd 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells01-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells01-ru.txt @@ -76,7 +76,7 @@ Spell/&ChromaticOrbDescription=Вы бросаете 4-дюймовую сфер Spell/&ChromaticOrbTitle=Цветной шарик Spell/&CommandSpellApproachDescription=Цель перемещается ближе к вам по кратчайшему и самому прямому маршруту, оканчивая ход, если оказывается в пределах 5 футов от вас. Spell/&CommandSpellApproachTitle=Подойди -Spell/&CommandSpellDescription=Вы произносите команду из одного слова существу, которое видите в пределах дистанции. Цель должна преуспеть в спасброске Мудрости, иначе в свой следующий ход будет исполнять эту команду. Вы можете отдавать приказы только существами, которые понимают ваш язык, включая всех гуманоидов. Чтобы отдавать приказы негуманоидным существам, вы должны знать Драконий язык для драконов, Эльфийский язык для фей, Великаний язык для великанов, Инфернальный язык для демонов и Изначальниый для элементалей. Приказы могут быть следующими:\n• Подойди: Цель перемещается ближе к вам по кратчайшему и самому прямому маршруту, оканчивая ход, если оказывается в пределах 5 футов от вас.\n• Убегай: Цель тратит ход на то, что перемещается прочь от вас самым быстрым способом.\n• Падай: Цель падает ничком и оканчивает ход.\n• Стой: Цель не перемещается и не совершает никаких действий.\nЕсли вы накладываете это заклинание, используя ячейку 2-го уровня или выше, вы можете воздействовать на одно дополнительное существо за каждый уровень ячейки выше первого. +Spell/&CommandSpellDescription=Вы произносите однословную команду существу, которое видите в пределах досягаемости. Цель должна преуспеть в спасброске Мудрости или выполнить команду на следующем ходу.\nВы можете командовать только теми существами, с которыми у вас общий язык. Гуманоиды считаются знающими Общий. Чтобы командовать негуманоидным существом, вы должны знать Драконий для Драконов, Эльфийский для Фей, Гигантский для Гигантов, Адский для Извергов и Терранский для Элементалей.\nНельзя выбирать целью Нежить или Удивленных существ. Spell/&CommandSpellFleeDescription=Цель тратит ход на то, что перемещается прочь от вас самым быстрым способом. Spell/&CommandSpellFleeTitle=Убегай Spell/&CommandSpellGrovelDescription=Цель падает ничком и оканчивает ход. diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt index 458fa7d1db..38c1bda2f6 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt @@ -61,6 +61,10 @@ ContentPack/&9999Description=未完成的业务包是名副其实的丰盛之角 ContentPack/&9999Title=未竟之业包 Equipment/&BeltOfRegeneration_Function_Description=每轮恢复 5 点生命值,持续 1 分钟。 Equipment/&DLC3_DwarvenWeapon_Dagger+3_CriticalThreshold=当你使用该武器并对其进行调和时,你的攻击检定会在 18, 19 或 20 点上获得致命一击。 +Failure/&FailureFlagCannotTargetUndead=无法以亡灵生物为目标 +Failure/&FailureFlagMustKnowLanguage=你必须精通{0}语言才能指挥这个生物 +Failure/&FailureFlagTargetMustNotBeSurprised=目标不能感到惊讶 +Failure/&FailureFlagTargetMustUnderstandYou=目标必须理解你的命令 Feature/&AbilityCheckAffinityDarknessPerceptiveDescription=在未点亮或处于魔法黑暗中时,你可以进行感知优势(察觉)检定。 Feature/&AbilityCheckAffinityDarknessPerceptiveTitle=黑暗感知 Feature/&AlwaysBeardDescription={0}% 的机会长出漂亮的胡子! diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells01-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells01-zh-CN.txt index 5210ad96eb..c6ccc08e58 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells01-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells01-zh-CN.txt @@ -76,7 +76,7 @@ Spell/&ChromaticOrbDescription=你向范围内你能看到的一个生物投掷 Spell/&ChromaticOrbTitle=繁彩球 Spell/&CommandSpellApproachDescription=目标通过最短、最直接的路线向您移动,如果它移动到距离您 5 英尺以内,则结束其回合。 Spell/&CommandSpellApproachTitle=方法 -Spell/&CommandSpellDescription=你对范围内可见的生物说出一个单词命令。目标必须成功通过感知豁免检定,否则在下一回合执行命令。你只能命令与你同语的生物,包括所有类人生物。要命令非类人生物,你必须知道龙语(龙)、精灵语(精类)、巨人语(巨人)、地狱语(恶魔)和土语(元素)。命令如下:\n• 接近:目标以最短最直接的路线向你移动,如果它移动到你 5 英尺以内,则结束回合。\n• 逃跑:目标在其回合中以最快的方式远离你。\n• 卑躬屈膝:目标倒下,然后结束回合。\n• 停止:目标不移动,不采取任何行动。\n当你使用 2 级或更高级别的法术位施放此法术时,你可以将范围内的生物作为目标,每个高于 2 级的法术位等级都增加一个。 +Spell/&CommandSpellDescription=你对范围内可见的生物说出一个单词命令。目标必须成功通过感知豁免检定,否则在下一轮执行命令。\n你只能命令与你同语的生物。类人生物被认为懂得通用语。要命令非类人生物,你必须懂得龙语(龙)、精灵语(精类)、巨人语(巨人)、地狱语(恶魔)和土语(元素)。\n不能以亡灵或惊讶生物为目标。 Spell/&CommandSpellFleeDescription=目标会利用自己的回合以最快的方式远离你。 Spell/&CommandSpellFleeTitle=逃跑 Spell/&CommandSpellGrovelDescription=目标倒下然后结束其回合。 From 19362daee3fb18781248f9af7019513a6e2c3f90 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Wed, 11 Sep 2024 15:35:25 -0700 Subject: [PATCH 118/212] minor fixes --- .../Api/DatabaseHelper-RELEASE.cs | 12 ++++++++++++ SolastaUnfinishedBusiness/Feats/ArmorFeats.cs | 3 +++ SolastaUnfinishedBusiness/Models/FixesContext.cs | 1 - .../Models/SrdAndHouseRulesContext.cs | 2 +- .../Spells/SpellBuildersLevel01.cs | 10 ++++++---- .../Spells/SpellBuildersLevel03.cs | 2 +- .../Subclasses/OathOfAncients.cs | 5 ++++- .../Subclasses/RangerLightBearer.cs | 10 ++++++++-- 8 files changed, 35 insertions(+), 10 deletions(-) diff --git a/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs b/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs index 6662ac20b3..1cc814e40a 100644 --- a/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs +++ b/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs @@ -130,9 +130,21 @@ internal static class CharacterFamilyDefinitions internal static CharacterFamilyDefinition Construct { get; } = GetDefinition("Construct"); + internal static CharacterFamilyDefinition Dragon { get; } = + GetDefinition("Dragon"); + internal static CharacterFamilyDefinition Elemental { get; } = GetDefinition("Elemental"); + internal static CharacterFamilyDefinition Fey { get; } = + GetDefinition("Fey"); + + internal static CharacterFamilyDefinition Fiend { get; } = + GetDefinition("Fiend"); + + internal static CharacterFamilyDefinition Giant { get; } = + GetDefinition("Giant"); + internal static CharacterFamilyDefinition Humanoid { get; } = GetDefinition("Humanoid"); diff --git a/SolastaUnfinishedBusiness/Feats/ArmorFeats.cs b/SolastaUnfinishedBusiness/Feats/ArmorFeats.cs index 578de2ec21..cef425cc8e 100644 --- a/SolastaUnfinishedBusiness/Feats/ArmorFeats.cs +++ b/SolastaUnfinishedBusiness/Feats/ArmorFeats.cs @@ -92,6 +92,9 @@ internal static void CreateFeats([NotNull] List feats) featMediumArmorDex, featMediumArmorStr); + featGroupMediumArmor.armorProficiencyPrerequisite = true; + featGroupMediumArmor.armorProficiencyCategory = LightArmorCategory; + GroupFeats.FeatGroupDefenseCombat.AddFeats(featShieldTechniques); GroupFeats.MakeGroup("FeatGroupArmor", null, diff --git a/SolastaUnfinishedBusiness/Models/FixesContext.cs b/SolastaUnfinishedBusiness/Models/FixesContext.cs index 21a3dcef7d..d2dde255e7 100644 --- a/SolastaUnfinishedBusiness/Models/FixesContext.cs +++ b/SolastaUnfinishedBusiness/Models/FixesContext.cs @@ -329,7 +329,6 @@ private static void FixAdditionalDamageRestrictions() )); AdditionalDamageBrandingSmite.attackModeOnly = true; - AdditionalDamageBrandingSmite.requiredProperty = RestrictedContextRequiredProperty.MeleeWeapon; AdditionalDamageRangerSwiftBladeBattleFocus.attackModeOnly = true; AdditionalDamageRangerSwiftBladeBattleFocus.requiredProperty = RestrictedContextRequiredProperty.MeleeWeapon; diff --git a/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs b/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs index e7f8ab2943..16ed7c0f40 100644 --- a/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs +++ b/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs @@ -395,7 +395,7 @@ internal static void SwitchFilterOnHideousLaughter() if (!Main.Settings.RemoveHumanoidFilterOnHideousLaughter) { - HideousLaughter.effectDescription.restrictedCreatureFamilies.Add("Humanoid"); + HideousLaughter.effectDescription.restrictedCreatureFamilies.Add(CharacterFamilyDefinitions.Humanoid.Name); } } diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs index 603c201f6b..b642a38d9e 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs @@ -708,11 +708,11 @@ internal static SpellDefinition BuildThunderousSmite() var powerThunderousSmite = FeatureDefinitionPowerBuilder .Create($"Power{NAME}ThunderousSmite") .SetGuiPresentation(NAME, Category.Spell, hidden: true) - .SetUsesFixed(ActivationTime.OnAttackHitAuto) + .SetUsesFixed(ActivationTime.OnAttackHitMeleeAuto) .SetEffectDescription( EffectDescriptionBuilder .Create() - .SetTargetingData(Side.Enemy, RangeType.Touch, 0, TargetType.IndividualsUnique) + .SetTargetingData(Side.Enemy, RangeType.Distance, 6, TargetType.IndividualsUnique) .SetSavingThrowData(false, AttributeDefinitions.Strength, false, EffectDifficultyClassComputation.SpellCastingFeature) .SetEffectForms( @@ -739,6 +739,8 @@ internal static SpellDefinition BuildThunderousSmite() .SetSpecialInterruptions(ExtraConditionInterruption.AttacksWithMeleeAndDamages) .AddToDB(); + conditionThunderousSmite.terminateWhenRemoved = true; + var spell = SpellDefinitionBuilder .Create(BrandingSmite, NAME) .SetGuiPresentation(Category.Spell, Sprites.GetSprite(NAME, Resources.ThunderousSmite, 128)) @@ -1505,7 +1507,7 @@ private sealed class PowerOrSpellFinishedByMeCommand(params ConditionDefinition[ { CharacterFamilyDefinitions.Fey.Name, "Elvish" }, { CharacterFamilyDefinitions.Fiend.Name, "Infernal" }, { CharacterFamilyDefinitions.Giant.Name, "Giant" }, - { CharacterFamilyDefinitions.Humanoid.Name, "Common" }, + { CharacterFamilyDefinitions.Humanoid.Name, "Common" } }; public bool EnforceFullSelection => true; @@ -1535,7 +1537,7 @@ public bool IsValid(CursorLocationSelectTarget __instance, GameLocationCharacter failureFlags.Add("Failure/&FailureFlagCannotTargetUndead"); return false; } - + var rulesetCaster = __instance.ActionParams.ActingCharacter.RulesetCharacter.GetOriginalHero(); if (rulesetCaster == null || !FamilyLanguages.TryGetValue(rulesetTarget.CharacterFamily, out var language)) diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel03.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel03.cs index 835dcae3a8..40f927c221 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel03.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel03.cs @@ -114,7 +114,7 @@ internal static SpellDefinition BuildBlindingSmite() hasSavingThrow = true, canSaveToCancel = true, saveAffinity = EffectSavingThrowType.Negates, - saveOccurence = TurnOccurenceType.StartOfTurn + saveOccurence = TurnOccurenceType.EndOfTurn }) // doesn't follow the standard impact particle reference .SetImpactParticleReference(DivineFavor.EffectDescription.EffectParticleParameters.casterParticleReference) diff --git a/SolastaUnfinishedBusiness/Subclasses/OathOfAncients.cs b/SolastaUnfinishedBusiness/Subclasses/OathOfAncients.cs index 88248aae14..707a687139 100644 --- a/SolastaUnfinishedBusiness/Subclasses/OathOfAncients.cs +++ b/SolastaUnfinishedBusiness/Subclasses/OathOfAncients.cs @@ -116,7 +116,10 @@ public OathOfAncients() .Create() .SetDurationData(DurationType.Minute, 1) .SetTargetingData(Side.Enemy, RangeType.Self, 0, TargetType.Sphere, 6) - .SetRestrictedCreatureFamilies("Fey", "Fiend", "Elemental") + .SetRestrictedCreatureFamilies( + CharacterFamilyDefinitions.Fey.Name, + CharacterFamilyDefinitions.Fiend.Name, + CharacterFamilyDefinitions.Elemental.Name) .SetSavingThrowData( false, AttributeDefinitions.Wisdom, diff --git a/SolastaUnfinishedBusiness/Subclasses/RangerLightBearer.cs b/SolastaUnfinishedBusiness/Subclasses/RangerLightBearer.cs index c85b76e273..67e37ff89e 100644 --- a/SolastaUnfinishedBusiness/Subclasses/RangerLightBearer.cs +++ b/SolastaUnfinishedBusiness/Subclasses/RangerLightBearer.cs @@ -159,8 +159,14 @@ public RangerLightBearer() powerBlessedGlow.EffectDescription.savingThrowAffinitiesByFamily = [ - new SaveAffinityByFamilyDescription { advantageType = AdvantageType.Disadvantage, family = "Fiend" }, - new SaveAffinityByFamilyDescription { advantageType = AdvantageType.Disadvantage, family = "Undead" } + new SaveAffinityByFamilyDescription + { + advantageType = AdvantageType.Disadvantage, family = CharacterFamilyDefinitions.Fiend.Name + }, + new SaveAffinityByFamilyDescription + { + advantageType = AdvantageType.Disadvantage, family = CharacterFamilyDefinitions.Undead.Name + } ]; var powerLightEnhanced = FeatureDefinitionPowerBuilder From 363a3c8e3e51494fe2526a57ad2a14a6f27242ec Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Wed, 11 Sep 2024 18:37:42 -0700 Subject: [PATCH 119/212] update translations --- Documentation/Spells.md | 13 +++++-------- .../Translations/de/Spells/Spells05-de.txt | 2 +- .../Translations/en/Spells/Spells05-en.txt | 2 +- .../Translations/es/Spells/Spells05-es.txt | 2 +- .../Translations/fr/Spells/Spells05-fr.txt | 2 +- .../Translations/it/Spells/Spells05-it.txt | 2 +- .../Translations/ja/Spells/Spells05-ja.txt | 2 +- .../Translations/ko/Spells/Spells05-ko.txt | 2 +- .../Translations/pt-BR/Spells/Spells05-pt-BR.txt | 2 +- .../Translations/ru/Spells/Spells05-ru.txt | 2 +- .../Translations/zh-CN/Spells/Spells05-zh-CN.txt | 2 +- 11 files changed, 15 insertions(+), 18 deletions(-) diff --git a/Documentation/Spells.md b/Documentation/Spells.md index 6a114bd11f..caa74d6b00 100644 --- a/Documentation/Spells.md +++ b/Documentation/Spells.md @@ -343,12 +343,9 @@ Spray a luminous cone that briefly blinds your enemies. Roll 6d10: the total is **[Bard, Cleric, Paladin]** -You speak a one-word command to a creature you can see within range. The target must succeed on a Wisdom saving throw or follow the command on its next turn. You can only command creatures you share a language with, which include all humanoids. To command a non-humanoid creature, you must know Draconic for Dragons, Elvish for Fey, Giant for Giants, Infernal for Fiends and Terran for Elementals. Commands follow: -• Approach: The target moves toward you by the shortest and most direct route, ending its turn if it moves within 5 feet of you. -• Flee: The target spends its turn moving away from you by the fastest available means. -• Grovel: The target falls prone and then ends its turn. -• Halt: The target doesn't move and takes no actions. -When you cast this spell using a spell slot of 2nd level or higher, you may target an additional creature within range for each slot level above 2nd. +You speak a one-word command to a creature you can see within range. The target must succeed on a Wisdom saving throw or follow the command on its next turn. +You can only command creatures you share a language with. Humanoids are considered knowing Common. To command a non-humanoid creature, you must know Draconic for Dragons, Elvish for Fey, Giant for Giants, Infernal for Fiends and Terran for Elementals. +Cannot target Undead or Surprised creatures. # 58. - Comprehend Languages (V,S) level 1 Divination [SOL] @@ -1421,7 +1418,7 @@ Create a burning wall that injures creatures in or next to it. **[Paladin]** -Your next hit deals additional 5d10 force damage with your weapon. Additionally, if this attack reduces the target to 50 hit points of fewer, you banish it for 1 min. +The next time you hit a creature with a weapon attack before this spell ends, your weapon crackles with force, and the attack deals an extra 5d10 force damage to the target. Additionally, if this attack reduces the target to 50 hit points of fewer, you banish it. If the target is native to a different plane of existence than the on you're on, the target disappears, returning to its home plane. If the target is native to the plane you're on, the creature vanishes into a harmless demi-plane. While there, the target is incapacitated. It remains there until the spell ends, at which point the target reappears in the space it left or in the nearest unoccupied space if that space is occupied. # 236. - *Circle of Power* © (V) level 5 Abjuration [Concentration] [UB] @@ -1505,7 +1502,7 @@ Paralyzes a creature unless it succeeds a WIS saving throw. No effect on undead. **[Cleric, Paladin]** -You imbue a weapon you touch with holy power. Until the spell ends, the weapon emits bright light in a 30-foot radius and dim light for an additional 30 feet. In addition, weapon attacks made with it deal an extra 2d8 radiant damage on a hit. If the weapon isn't already a magic weapon, it becomes one for the duration. As a bonus action on your turn, you can dismiss this spell and cause the weapon to emit a burst of radiance. Each creature of your choice that you can see within 30 feet of the weapon must make a Constitution saving throw. On a failed save, a creature takes 4d8 radiant damage, and it is blinded for 1 minute. On a successful save, a creature takes half as much damage and isn't blinded. At the end of each of its turns, a blinded creature can make a Constitution saving throw, ending the effect on itself on a success. +You imbue a weapon you touch with holy power. Until the spell ends, the weapon emits bright light in a 30-foot radius and dim light for an additional 30 feet. In addition, weapon attacks made with it deal an extra 2d8 radiant damage on a hit. If the weapon isn't already a magic weapon, it becomes one for the duration. As a bonus action on your turn, if wielding the weapon, you can dismiss this spell and cause the weapon to emit a burst of radiance. Each creature of your choice that you can see within 30 feet of the weapon must make a Constitution saving throw. On a failed save, a creature takes 4d8 radiant damage, and it is blinded for 1 minute. On a successful save, a creature takes half as much damage and isn't blinded. At the end of each of its turns, a blinded creature can make a Constitution saving throw, ending the effect on itself on a success. # 250. - *Immolation* © (V) level 5 Evocation [Concentration] [UB] diff --git a/SolastaUnfinishedBusiness/Translations/de/Spells/Spells05-de.txt b/SolastaUnfinishedBusiness/Translations/de/Spells/Spells05-de.txt index eeccee814a..2fb2153338 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Spells/Spells05-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Spells/Spells05-de.txt @@ -18,7 +18,7 @@ Reaction/&ReactionSpendPowerBundleEmpoweredKnowledgeDescription=Wählen Sie eine Reaction/&ReactionSpendPowerBundleEmpoweredKnowledgeReactDescription=Verfügen Sie über Fachkenntnisse in der gewählten Fertigkeit. Reaction/&ReactionSpendPowerBundleEmpoweredKnowledgeReactTitle=Kompetenzerweiterung Reaction/&ReactionSpendPowerBundleEmpoweredKnowledgeTitle=Kompetenzerweiterung -Spell/&BanishingSmiteDescription=Dein nächster Treffer mit deiner Waffe verursacht zusätzlich 5W10 Kraftschaden. Wenn dieser Angriff das Ziel auf 50 Trefferpunkte oder weniger reduziert, verbannst du es außerdem für 1 Minute. +Spell/&BanishingSmiteDescription=Wenn du das nächste Mal eine Kreatur mit einem Waffenangriff triffst, bevor dieser Zauber endet, knistert deine Waffe vor Kraft und der Angriff fügt dem Ziel zusätzliche 5W10 Kraftschaden zu. Wenn dieser Angriff das Ziel auf 50 Trefferpunkte oder weniger reduziert, verbannst du es außerdem. Wenn das Ziel auf einer anderen Existenzebene beheimatet ist als der, auf der du dich befindest, verschwindet das Ziel und kehrt auf seine Heimatebene zurück. Wenn das Ziel auf der Ebene beheimatet ist, auf der du dich befindest, verschwindet die Kreatur in eine harmlose Halbebene. Während sie sich dort befindet, ist das Ziel handlungsunfähig. Es bleibt dort, bis der Zauber endet, woraufhin das Ziel an dem Ort wieder auftaucht, den es verlassen hat, oder an dem nächsten freien Ort, falls dieser Ort besetzt ist. Spell/&BanishingSmiteTitle=Bannender Schlag Spell/&CircleOfMagicalNegationDescription=Göttliche Energie strahlt von dir aus und verzerrt und zerstreut magische Energie in einem Umkreis von 30 Fuß um dich herum. Bis der Zauber endet, bewegt sich die Kugel mit dir, mit deinem Mittelpunkt. Während der Dauer hat jede befreundete Kreatur in der Umgebung, dich eingeschlossen, einen Vorteil bei Rettungswürfen gegen Zauber und andere magische Effekte. Wenn einer betroffenen Kreatur außerdem ein Rettungswurf gegen einen Zauber oder magischen Effekt gelingt, der es ihr erlaubt, einen Rettungswurf zu machen, um nur halben Schaden zu erleiden, erleidet sie stattdessen keinen Schaden, wenn ihr die Rettungswürfe gelingen. Spell/&CircleOfMagicalNegationTitle=Kreis der Macht diff --git a/SolastaUnfinishedBusiness/Translations/en/Spells/Spells05-en.txt b/SolastaUnfinishedBusiness/Translations/en/Spells/Spells05-en.txt index 21ce79ed81..bc92d6becc 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Spells/Spells05-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Spells/Spells05-en.txt @@ -18,7 +18,7 @@ Reaction/&ReactionSpendPowerBundleEmpoweredKnowledgeDescription=Choose one skill Reaction/&ReactionSpendPowerBundleEmpoweredKnowledgeReactDescription=Have expertise in the chosen skill. Reaction/&ReactionSpendPowerBundleEmpoweredKnowledgeReactTitle=Skill Empowerment Reaction/&ReactionSpendPowerBundleEmpoweredKnowledgeTitle=Skill Empowerment -Spell/&BanishingSmiteDescription=Your next hit deals additional 5d10 force damage with your weapon. Additionally, if this attack reduces the target to 50 hit points of fewer, you banish it for 1 min. +Spell/&BanishingSmiteDescription=The next time you hit a creature with a weapon attack before this spell ends, your weapon crackles with force, and the attack deals an extra 5d10 force damage to the target. Additionally, if this attack reduces the target to 50 hit points of fewer, you banish it. If the target is native to a different plane of existence than the on you're on, the target disappears, returning to its home plane. If the target is native to the plane you're on, the creature vanishes into a harmless demi-plane. While there, the target is incapacitated. It remains there until the spell ends, at which point the target reappears in the space it left or in the nearest unoccupied space if that space is occupied. Spell/&BanishingSmiteTitle=Banishing Smite Spell/&CircleOfMagicalNegationDescription=Divine energy radiates from you, distorting and diffusing magical energy within 30 feet of you. Until the spell ends, the sphere moves with you, centered on you. For the duration, each friendly creature in the area, including you, has advantage on saving throws against spells and other magical effects. Additionally, when an affected creature succeeds on a saving throw made against a spell or magical effect that allows it to make a saving throw to take only half damage, it instead takes no damage if it succeeds on the saving throws. Spell/&CircleOfMagicalNegationTitle=Circle of Power diff --git a/SolastaUnfinishedBusiness/Translations/es/Spells/Spells05-es.txt b/SolastaUnfinishedBusiness/Translations/es/Spells/Spells05-es.txt index 86b9d9a011..960905cb08 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Spells/Spells05-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Spells/Spells05-es.txt @@ -18,7 +18,7 @@ Reaction/&ReactionSpendPowerBundleEmpoweredKnowledgeDescription=Elija una habili Reaction/&ReactionSpendPowerBundleEmpoweredKnowledgeReactDescription=Tener experiencia en la habilidad elegida. Reaction/&ReactionSpendPowerBundleEmpoweredKnowledgeReactTitle=Empoderamiento de habilidades Reaction/&ReactionSpendPowerBundleEmpoweredKnowledgeTitle=Empoderamiento de habilidades -Spell/&BanishingSmiteDescription=Tu siguiente golpe inflige 5d10 puntos de daño de fuerza adicionales con tu arma. Además, si este ataque reduce al objetivo a 50 puntos de golpe o menos, lo destierras durante 1 min. +Spell/&BanishingSmiteDescription=La próxima vez que golpees a una criatura con un ataque de arma antes de que termine este conjuro, tu arma cruje con fuerza y ​​el ataque inflige 5d10 puntos de daño de fuerza adicionales al objetivo. Además, si este ataque reduce al objetivo a 50 puntos de golpe o menos, lo destierras. Si el objetivo es nativo de un plano de existencia diferente al que estás tú, el objetivo desaparece y regresa a su plano de origen. Si el objetivo es nativo del plano en el que estás, la criatura se desvanece en un semiplano inofensivo. Mientras está allí, el objetivo queda incapacitado. Permanece allí hasta que termina el conjuro, momento en el que el objetivo reaparece en el espacio que dejó o en el espacio desocupado más cercano si ese espacio está ocupado. Spell/&BanishingSmiteTitle=Castigo de destierro Spell/&CircleOfMagicalNegationDescription=La energía divina irradia desde ti, distorsionando y difundiendo energía mágica a 30 pies de ti. Hasta que finaliza el hechizo, la esfera se mueve contigo, centrada en ti. Mientras dure, cada criatura amiga en el área, incluido tú, tiene ventaja en las tiradas de salvación contra hechizos y otros efectos mágicos. Además, cuando una criatura afectada tiene éxito en una tirada de salvación realizada contra un hechizo o efecto mágico que le permite realizar una tirada de salvación para recibir solo la mitad del daño, no sufre daño si tiene éxito en las tiradas de salvación. Spell/&CircleOfMagicalNegationTitle=Círculo de poder diff --git a/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells05-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells05-fr.txt index d09560a744..e140f84e78 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells05-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells05-fr.txt @@ -18,7 +18,7 @@ Reaction/&ReactionSpendPowerBundleEmpoweredKnowledgeDescription=Choisissez une c Reaction/&ReactionSpendPowerBundleEmpoweredKnowledgeReactDescription=Avoir une expertise dans la compétence choisie. Reaction/&ReactionSpendPowerBundleEmpoweredKnowledgeReactTitle=Renforcement des compétences Reaction/&ReactionSpendPowerBundleEmpoweredKnowledgeTitle=Renforcement des compétences -Spell/&BanishingSmiteDescription=Votre prochain coup inflige 5d10 points de dégâts de force supplémentaires avec votre arme. De plus, si cette attaque réduit la cible à 50 points de vie ou moins, vous la bannissez pendant 1 min. +Spell/&BanishingSmiteDescription=La prochaine fois que vous frappez une créature avec une attaque d'arme avant la fin de ce sort, votre arme crépite de force et l'attaque inflige 5d10 points de dégâts de force supplémentaires à la cible. De plus, si cette attaque réduit la cible à 50 points de vie ou moins, vous la bannissez. Si la cible est originaire d'un plan d'existence différent de celui sur lequel vous vous trouvez, elle disparaît et retourne sur son plan d'origine. Si la cible est originaire du plan sur lequel vous vous trouvez, la créature disparaît dans un demi-plan inoffensif. Pendant qu'elle s'y trouve, la cible est neutralisée. Elle y reste jusqu'à la fin du sort, après quoi elle réapparaît dans l'espace qu'elle a quitté ou dans l'espace inoccupé le plus proche si cet espace est occupé. Spell/&BanishingSmiteTitle=Bannir Smite Spell/&CircleOfMagicalNegationDescription=L'énergie divine rayonne de vous, déformant et diffusant l'énergie magique dans un rayon de 9 mètres autour de vous. Jusqu'à la fin du sort, la sphère se déplace avec vous, centrée sur vous. Pendant la durée du sort, chaque créature alliée dans la zone, y compris vous, bénéficie d'un avantage aux jets de sauvegarde contre les sorts et autres effets magiques. De plus, lorsqu'une créature affectée réussit un jet de sauvegarde effectué contre un sort ou un effet magique qui lui permet d'effectuer un jet de sauvegarde pour ne subir que la moitié des dégâts, elle ne subit aucun dégât si elle réussit ses jets de sauvegarde. Spell/&CircleOfMagicalNegationTitle=Cercle de pouvoir diff --git a/SolastaUnfinishedBusiness/Translations/it/Spells/Spells05-it.txt b/SolastaUnfinishedBusiness/Translations/it/Spells/Spells05-it.txt index e93daa1147..05609310d3 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Spells/Spells05-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Spells/Spells05-it.txt @@ -18,7 +18,7 @@ Reaction/&ReactionSpendPowerBundleEmpoweredKnowledgeDescription=Scegli un'abilit Reaction/&ReactionSpendPowerBundleEmpoweredKnowledgeReactDescription=Avere competenza nell'abilità scelta. Reaction/&ReactionSpendPowerBundleEmpoweredKnowledgeReactTitle=Potenziamento delle competenze Reaction/&ReactionSpendPowerBundleEmpoweredKnowledgeTitle=Potenziamento delle competenze -Spell/&BanishingSmiteDescription=Il tuo prossimo colpo infligge 5d10 danni da forza aggiuntivi con la tua arma. Inoltre, se questo attacco riduce il bersaglio a 50 punti ferita o meno, lo bandisci per 1 min. +Spell/&BanishingSmiteDescription=La prossima volta che colpisci una creatura con un attacco con arma prima che questo incantesimo finisca, la tua arma crepiterà di forza e l'attacco infligge 5d10 danni da forza extra al bersaglio. Inoltre, se questo attacco riduce il bersaglio a 50 punti ferita o meno, lo bandisci. Se il bersaglio è nativo di un piano di esistenza diverso da quello in cui ti trovi, il bersaglio scompare, tornando al suo piano di origine. Se il bersaglio è nativo del piano in cui ti trovi, la creatura svanisce in un semipiano innocuo. Mentre è lì, il bersaglio è inabile. Rimane lì fino alla fine dell'incantesimo, a quel punto il bersaglio riappare nello spazio che aveva lasciato o nello spazio non occupato più vicino se quello spazio è occupato. Spell/&BanishingSmiteTitle=Colpo di bando Spell/&CircleOfMagicalNegationDescription=L'energia divina si irradia da te, distorcendo e diffondendo l'energia magica entro 30 piedi da te. Finché l'incantesimo non termina, la sfera si muove con te, centrata su di te. Per la durata, ogni creatura amica nell'area, incluso te, ha vantaggio sui tiri salvezza contro incantesimi e altri effetti magici. Inoltre, quando una creatura influenzata supera un tiro salvezza contro un incantesimo o un effetto magico che le consente di effettuare un tiro salvezza per subire solo metà dei danni, non subisce invece alcun danno se supera i tiri salvezza. Spell/&CircleOfMagicalNegationTitle=Cerchio del potere diff --git a/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells05-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells05-ja.txt index 90f2d3fd60..e5b9b361a3 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells05-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells05-ja.txt @@ -18,7 +18,7 @@ Reaction/&ReactionSpendPowerBundleEmpoweredKnowledgeDescription=専門知識が Reaction/&ReactionSpendPowerBundleEmpoweredKnowledgeReactDescription=選択したスキルに関する専門知識を持っていること。 Reaction/&ReactionSpendPowerBundleEmpoweredKnowledgeReactTitle=強化された知識 Reaction/&ReactionSpendPowerBundleEmpoweredKnowledgeTitle=強化された知識 -Spell/&BanishingSmiteDescription=次の攻撃では、武器による追加の 5d10 フォース ダメージが与えられます。さらに、この攻撃でターゲットのヒット ポイントが 50 以下になった場合、1 分間追放します。 +Spell/&BanishingSmiteDescription=この呪文が終了する前に次に武器攻撃でクリーチャーを攻撃すると、武器が力でパチパチと音を立て、攻撃はターゲットに追加で 5d10 の力場ダメージを与えます。さらに、この攻撃でターゲットのヒット ポイントが 50 以下になった場合、ターゲットを消滅させます。ターゲットがあなたのいる次元界とは異なる次元界出身の場合、ターゲットは消えて元の次元界に戻ります。ターゲットがあなたのいる次元界出身の場合、クリーチャーは無害な準次元界に消えます。そこにいる間、ターゲットは無力化されます。ターゲットは呪文が終了するまでそこに留まり、呪文が終了するとターゲットは元の空間に再び現れます。その空間に誰かがいる場合は、最も近い空いている空間に再び現れます。 Spell/&BanishingSmiteTitle=追放のスマイト Spell/&CircleOfMagicalNegationDescription=神聖なエネルギーがあなたから放射され、あなたの 30 フィート以内に魔法のエネルギーを歪め、拡散させます。呪文が終わるまで、球体はあなたを中心としてあなたと一緒に動きます。この期間中、あなたを含むエリア内の各味方クリーチャーは、呪文やその他の魔法の効果に対するセーヴィング スローで有利になります。さらに、影響を受けたクリーチャーが、半分のダメージしか受けないセーヴィング・スローを可能にする呪文または魔法の効果に対して行われたセーヴィング・スローに成功した場合、代わりにセーヴィング・スローに成功した場合はダメージを受けません。 Spell/&CircleOfMagicalNegationTitle=パワーの輪 diff --git a/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells05-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells05-ko.txt index 8ac3cd8d3a..a420f57dbf 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells05-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells05-ko.txt @@ -18,7 +18,7 @@ Reaction/&ReactionSpendPowerBundleEmpoweredKnowledgeDescription=전문 지식이 Reaction/&ReactionSpendPowerBundleEmpoweredKnowledgeReactDescription=선택한 기술에 대한 전문 지식을 갖습니다. Reaction/&ReactionSpendPowerBundleEmpoweredKnowledgeReactTitle=강화된 지식 Reaction/&ReactionSpendPowerBundleEmpoweredKnowledgeTitle=강화된 지식 -Spell/&BanishingSmiteDescription=다음 공격은 무기로 5d10의 추가 피해를 입힙니다. 추가로, 이 공격으로 대상의 체력이 50점 이하로 줄어들면 1분 동안 추방됩니다. +Spell/&BanishingSmiteDescription=이 주문이 끝나기 전에 생물을 무기 공격으로 맞히면 무기가 힘으로 딱딱거리고 공격은 대상에게 5d10의 추가 힘 피해를 입힙니다. 또한 이 공격으로 대상의 생명력이 50 이하로 감소하면 추방합니다. 대상이 당신이 있는 차원과 다른 차원의 원주민인 경우 대상은 사라지고 원래 차원으로 돌아갑니다. 대상이 당신이 있는 차원의 원주민인 경우 생물은 무해한 반평면으로 사라집니다. 그곳에 있는 동안 대상은 무력화됩니다. 주문이 끝날 때까지 그곳에 남아 있으며, 그 시점에서 대상은 떠난 공간에 다시 나타나거나 그 공간이 점유되어 있는 경우 가장 가까운 점유되지 않은 공간에 나타납니다. Spell/&BanishingSmiteTitle=배니싱 스마이트 Spell/&CircleOfMagicalNegationDescription=신성한 에너지가 당신으로부터 방출되어 당신으로부터 30피트 이내의 마법 에너지를 왜곡하고 확산시킵니다. 주문이 끝날 때까지 구체는 당신을 중심으로 당신과 함께 움직입니다. 해당 기간 동안 당신을 포함해 해당 지역에 있는 각 아군 생물은 주문 및 기타 마법 효과에 대한 내성 굴림에 이점을 갖습니다. 또한, 영향을 받은 생물이 주문이나 마법 효과에 대한 내성 굴림에 성공하여 피해를 절반만 받을 수 있는 경우, 대신 내성 굴림에 성공하면 피해를 입지 않습니다. Spell/&CircleOfMagicalNegationTitle=힘의 순환 diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells05-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells05-pt-BR.txt index d76809ee02..2b57c6d9bd 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells05-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells05-pt-BR.txt @@ -18,7 +18,7 @@ Reaction/&ReactionSpendPowerBundleEmpoweredKnowledgeDescription=Escolha uma habi Reaction/&ReactionSpendPowerBundleEmpoweredKnowledgeReactDescription=Ter experiência na habilidade escolhida. Reaction/&ReactionSpendPowerBundleEmpoweredKnowledgeReactTitle=Empoderamento de Habilidades Reaction/&ReactionSpendPowerBundleEmpoweredKnowledgeTitle=Empoderamento de Habilidades -Spell/&BanishingSmiteDescription=Seu próximo golpe causa 5d10 de dano de força adicional com sua arma. Além disso, se este ataque reduzir o alvo a 50 pontos de vida ou menos, você o bane por 1 min. +Spell/&BanishingSmiteDescription=Na próxima vez que você atingir uma criatura com um ataque de arma antes que esta magia termine, sua arma estala com força, e o ataque causa 5d10 de dano de força extra ao alvo. Além disso, se este ataque reduzir o alvo a 50 pontos de vida ou menos, você o bane. Se o alvo for nativo de um plano de existência diferente daquele em que você está, o alvo desaparece, retornando ao seu plano de origem. Se o alvo for nativo do plano em que você está, a criatura desaparece em um semiplano inofensivo. Enquanto estiver lá, o alvo fica incapacitado. Ele permanece lá até que a magia termine, momento em que o alvo reaparece no espaço que deixou ou no espaço desocupado mais próximo se esse espaço estiver ocupado. Spell/&BanishingSmiteTitle=Banindo Smite Spell/&CircleOfMagicalNegationDescription=A energia divina irradia de você, distorcendo e difundindo a energia mágica a até 9 metros de você. Até a magia terminar, a esfera se move com você, centrada em você. Durante esse tempo, cada criatura aliada na área, incluindo você, tem vantagem em testes de resistência contra magias e outros efeitos mágicos. Além disso, quando uma criatura afetada obtém sucesso em um teste de resistência feito contra uma magia ou efeito mágico que permite que ela faça um teste de resistência para sofrer apenas metade do dano, ela não sofre nenhum dano se for bem-sucedida nos testes de resistência. Spell/&CircleOfMagicalNegationTitle=Círculo de Poder diff --git a/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells05-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells05-ru.txt index a483340e27..8f1326a552 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells05-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells05-ru.txt @@ -18,7 +18,7 @@ Reaction/&ReactionSpendPowerBundleEmpoweredKnowledgeDescription=Выберите Reaction/&ReactionSpendPowerBundleEmpoweredKnowledgeReactDescription=Получите компетентность в выбранном навыке. Reaction/&ReactionSpendPowerBundleEmpoweredKnowledgeReactTitle=Усиление навыка Reaction/&ReactionSpendPowerBundleEmpoweredKnowledgeTitle=Усиление навыка -Spell/&BanishingSmiteDescription=В следующий раз, когда вы попадёте по существу атакой оружием, пока активно это заклинание, ваше оружие покрывается силовым полем, и атака причиняет цели дополнительный урон силовым полем 5d10. Кроме того, если эта атака опустила хиты цели до 50 или ниже, вы изгоняете её. +Spell/&BanishingSmiteDescription=В следующий раз, когда вы попадете по существу с помощью атаки оружием до того, как закончится это заклинание, ваше оружие затрещит от силы, и атака нанесет цели дополнительный урон силой 5d10. Кроме того, если эта атака уменьшит количество хитов цели до 50 или меньше, вы изгоните ее. Если цель является уроженцем другого плана существования, чем тот, на котором вы находитесь, цель исчезает, возвращаясь на свой родной план. Если цель является уроженцем плана, на котором вы находитесь, существо исчезает в безвредном полуплане. Находясь там, цель становится недееспособной. Она остается там до тех пор, пока не закончится заклинание, после чего цель снова появляется в пространстве, которое она покинула, или в ближайшем незанятом пространстве, если это пространство занято. Spell/&BanishingSmiteTitle=Изгоняющая кара Spell/&CircleOfMagicalNegationDescription=От вас исходит божественная энергия, искажающая и рассеивающая магическую энергию в пределах 30 футов от вас. Пока заклинание активно, сфера перемещается вместе с вами, оставаясь с центром на вас. Все дружественные существа в этой области, включая вас, получают преимущество к спасброскам от заклинаний и других магических эффектов. Кроме того, когда такое существо преуспевает в спасброске от заклинания или магического эффекта, позволяющего совершить спасбросок для получения всего лишь половины урона, оно не получает урон вообще. Spell/&CircleOfMagicalNegationTitle=Круг силы diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells05-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells05-zh-CN.txt index 7cad6392ad..2304e2a320 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells05-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells05-zh-CN.txt @@ -18,7 +18,7 @@ Reaction/&ReactionSpendPowerBundleEmpoweredKnowledgeDescription=选择一项你 Reaction/&ReactionSpendPowerBundleEmpoweredKnowledgeReactDescription=在所选技能上拥有专业知识。 Reaction/&ReactionSpendPowerBundleEmpoweredKnowledgeReactTitle=知识赋能 Reaction/&ReactionSpendPowerBundleEmpoweredKnowledgeTitle=知识赋能 -Spell/&BanishingSmiteDescription=你的下一次攻击用你的武器造成额外的 5d10 力场伤害。此外,如果这次攻击将目标的生命值降低到 50 以下,你将其放逐 1 分钟。 +Spell/&BanishingSmiteDescription=在该法术结束前,下次你用武器攻击生物时,你的武器会发出力场爆裂声,并且该攻击会对目标造成额外的 5d10 力场伤害。此外,如果该攻击将目标的生命值降低到 50 点或更少,你将它放逐。如果目标来自与你所在的位面不同的存在位面,则目标会消失并返回其主位面。如果目标来自你所在的位面,则该生物会消失并进入无害的半位面。在那里,目标会失去行动能力。它会一直呆在那里直到法术结束,此时目标会重新出现在它离开的空间中,或者如果该空间被占据,则出现在最近的未占据空间中。 Spell/&BanishingSmiteTitle=放逐斩 Spell/&CircleOfMagicalNegationDescription=神圣能量从你身上散发出来,扭曲并扩散你周围 30 尺范围内的魔法能量。直到法术结束之前,球体都会以你为中心与你一起移动。在此期间,该区域中的每个友方生物(包括你)在对抗法术和其他魔法效应的豁免检定上都具有优势。此外,当受影响的生物在对抗法术或魔法效应的豁免检定中成功时,如果它本来要受到一半伤害,则改为不会受到伤害。 Spell/&CircleOfMagicalNegationTitle=原力法阵 From 5c3a690c935ec87d5d4345dc66cbf2d61d2b8fe5 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Wed, 11 Sep 2024 23:24:39 -0700 Subject: [PATCH 120/212] add SetConditionEffectParameters --- .../ConditionThunderousSmite.json | 2 +- .../FeatDefinition/FeatGroupMediumArmor.json | 4 +-- .../AdditionalDamageBlindingSmite.json | 2 +- .../PowerHolyWeapon.json | 6 ++-- .../PowerRangerLightBearerBlessedGlow.json | 4 +-- .../PowerRavenScionHeartSeekingShot.json | 4 +-- .../PowerThunderousSmiteThunderousSmite.json | 6 ++-- .../SpellDefinition/CommandSpellApproach.json | 4 +-- .../SpellDefinition/CommandSpellFlee.json | 4 +-- .../SpellDefinition/CommandSpellGrovel.json | 4 +-- .../SpellDefinition/CommandSpellHalt.json | 4 +-- .../Builders/ConditionDefinitionBuilder.cs | 10 +++--- .../Builders/EffectDescriptionBuilder.cs | 31 +++++++++++++++++++ .../Spells/SpellBuildersCantrips.cs | 5 ++- .../Spells/SpellBuildersLevel01.cs | 16 +++------- .../Spells/SpellBuildersLevel02.cs | 23 ++------------ .../Spells/SpellBuildersLevel05.cs | 7 ++--- .../Spells/SpellBuildersLevel06.cs | 8 +---- .../Subclasses/MartialForceKnight.cs | 6 +--- .../Subclasses/PathOfTheYeoman.cs | 5 ++- .../Subclasses/PatronCelestial.cs | 4 +-- .../Subclasses/RangerLightBearer.cs | 1 + .../Subclasses/RoguishRavenScion.cs | 7 +---- .../Subclasses/WayOfTheStormSoul.cs | 5 ++- 24 files changed, 77 insertions(+), 95 deletions(-) diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionThunderousSmite.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionThunderousSmite.json index a426b99eb7..0b1cd6dd51 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionThunderousSmite.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionThunderousSmite.json @@ -10,7 +10,7 @@ "silentWhenAdded": false, "silentWhenRemoved": false, "silentWhenRefreshed": false, - "terminateWhenRemoved": false, + "terminateWhenRemoved": true, "specialDuration": false, "durationType": "Hour", "durationParameterDie": "D4", diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatDefinition/FeatGroupMediumArmor.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatDefinition/FeatGroupMediumArmor.json index bdee712a4b..0f8f0d3a17 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatDefinition/FeatGroupMediumArmor.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatDefinition/FeatGroupMediumArmor.json @@ -6,8 +6,8 @@ "minimalAbilityScorePrerequisite": false, "minimalAbilityScoreValue": 13, "minimalAbilityScoreName": "Strength", - "armorProficiencyPrerequisite": false, - "armorProficiencyCategory": "", + "armorProficiencyPrerequisite": true, + "armorProficiencyCategory": "LightArmorCategory", "hasFamilyTag": true, "familyTag": "MediumArmor", "knownFeatsPrerequisite": [], diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAdditionalDamage/AdditionalDamageBlindingSmite.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAdditionalDamage/AdditionalDamageBlindingSmite.json index cb63b2422c..d1b47a8b52 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAdditionalDamage/AdditionalDamageBlindingSmite.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAdditionalDamage/AdditionalDamageBlindingSmite.json @@ -42,7 +42,7 @@ "conditionDefinition": "Definition:ConditionBlindedByBlindingSmite:d3436e86-c822-51d0-ab7f-7301cd5ba1e2", "saveAffinity": "Negates", "canSaveToCancel": true, - "saveOccurence": "StartOfTurn" + "saveOccurence": "EndOfTurn" } ], "addLightSource": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerHolyWeapon.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerHolyWeapon.json index acb8cec8f3..5633bd074a 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerHolyWeapon.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerHolyWeapon.json @@ -284,19 +284,19 @@ }, "conditionStartParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", + "m_AssetGUID": "a1709422dd78d964e9dbef20ad79c3d3", "m_SubObjectName": "", "m_SubObjectType": "" }, "conditionParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "13002582a0306fe44915c63f57e4ea59", + "m_AssetGUID": "2fb59c86519dd104a8b75863927aea9a", "m_SubObjectName": "", "m_SubObjectType": "" }, "conditionEndParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "0c47cc2ece484284eb5eec49a38a2cae", + "m_AssetGUID": "48d43d702483f604685b7401f56dc4d7", "m_SubObjectName": "", "m_SubObjectType": "" }, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerRangerLightBearerBlessedGlow.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerRangerLightBearerBlessedGlow.json index 61506fc833..415ab69afa 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerRangerLightBearerBlessedGlow.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerRangerLightBearerBlessedGlow.json @@ -126,7 +126,7 @@ "$type": "EffectParticleParameters, Assembly-CSharp", "casterParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "81560ac3813217d4d9fd281d5e73c234", + "m_AssetGUID": "fe6741763c3d4aa409a90a9c492a12ef", "m_SubObjectName": "", "m_SubObjectType": "" }, @@ -150,7 +150,7 @@ }, "effectParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", + "m_AssetGUID": "81aed95812430d647938852c84bc531f", "m_SubObjectName": "", "m_SubObjectType": "" }, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerRavenScionHeartSeekingShot.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerRavenScionHeartSeekingShot.json index 59249158ed..04c737186e 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerRavenScionHeartSeekingShot.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerRavenScionHeartSeekingShot.json @@ -256,8 +256,8 @@ "conditionParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" + "m_SubObjectName": null, + "m_SubObjectType": null }, "conditionEndParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerThunderousSmiteThunderousSmite.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerThunderousSmiteThunderousSmite.json index b1e4837971..2de700eeb3 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerThunderousSmiteThunderousSmite.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerThunderousSmiteThunderousSmite.json @@ -2,8 +2,8 @@ "$type": "FeatureDefinitionPower, Assembly-CSharp", "effectDescription": { "$type": "EffectDescription, Assembly-CSharp", - "rangeType": "Touch", - "rangeParameter": 0, + "rangeType": "Distance", + "rangeParameter": 6, "halfDamageOnAMiss": false, "hitAffinitiesByTargetTag": [], "targetType": "IndividualsUnique", @@ -350,7 +350,7 @@ "delegatedToAction": false, "surrogateToSpell": null, "triggeredBySpecialMove": false, - "activationTime": "OnAttackHitAuto", + "activationTime": "OnAttackHitMeleeAuto", "autoActivationRequiredTargetSenseType": "None", "autoActivationRequiredTargetCreatureTag": "", "autoActivationPowerTag": "", diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpellApproach.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpellApproach.json index e416ac52d0..a7fb4ee8ca 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpellApproach.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpellApproach.json @@ -262,8 +262,8 @@ "conditionStartParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" + "m_SubObjectName": null, + "m_SubObjectType": null }, "conditionParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpellFlee.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpellFlee.json index be49031093..a1a89de1bc 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpellFlee.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpellFlee.json @@ -262,8 +262,8 @@ "conditionStartParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" + "m_SubObjectName": null, + "m_SubObjectType": null }, "conditionParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpellGrovel.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpellGrovel.json index 9f93671eb5..31b33b395c 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpellGrovel.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpellGrovel.json @@ -262,8 +262,8 @@ "conditionStartParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" + "m_SubObjectName": null, + "m_SubObjectType": null }, "conditionParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpellHalt.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpellHalt.json index e82a756209..ca21d61c39 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpellHalt.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CommandSpellHalt.json @@ -262,8 +262,8 @@ "conditionStartParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" + "m_SubObjectName": null, + "m_SubObjectType": null }, "conditionParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", diff --git a/SolastaUnfinishedBusiness/Builders/ConditionDefinitionBuilder.cs b/SolastaUnfinishedBusiness/Builders/ConditionDefinitionBuilder.cs index ac4c1bc63d..e51f6248bf 100644 --- a/SolastaUnfinishedBusiness/Builders/ConditionDefinitionBuilder.cs +++ b/SolastaUnfinishedBusiness/Builders/ConditionDefinitionBuilder.cs @@ -28,12 +28,10 @@ internal class ConditionDefinitionBuilder { private static void SetEmptyParticleReferencesWhereNull(ConditionDefinition definition) { - var assetReference = new AssetReference(); - - definition.conditionStartParticleReference ??= assetReference; - definition.conditionParticleReference ??= assetReference; - definition.conditionEndParticleReference ??= assetReference; - definition.characterShaderReference ??= assetReference; + definition.conditionStartParticleReference ??= new AssetReference(); + definition.conditionParticleReference ??= new AssetReference(); + definition.conditionEndParticleReference ??= new AssetReference(); + definition.characterShaderReference ??= new AssetReference(); } protected override void Initialise() diff --git a/SolastaUnfinishedBusiness/Builders/EffectDescriptionBuilder.cs b/SolastaUnfinishedBusiness/Builders/EffectDescriptionBuilder.cs index 87bd3f8565..69a15321ec 100644 --- a/SolastaUnfinishedBusiness/Builders/EffectDescriptionBuilder.cs +++ b/SolastaUnfinishedBusiness/Builders/EffectDescriptionBuilder.cs @@ -101,6 +101,37 @@ internal EffectDescriptionBuilder SetCasterEffectParameters( return this; } + internal EffectDescriptionBuilder SetConditionEffectParameters(ConditionDefinition conditionDefinition) + { + return SetConditionEffectParameters( + conditionDefinition.conditionStartParticleReference, + conditionDefinition.conditionParticleReference, + conditionDefinition.conditionEndParticleReference); + } + + internal EffectDescriptionBuilder SetConditionEffectParameters(IMagicEffect magicEffect) + { + return SetConditionEffectParameters( + magicEffect.EffectDescription.EffectParticleParameters.conditionStartParticleReference, + magicEffect.EffectDescription.EffectParticleParameters.conditionParticleReference, + magicEffect.EffectDescription.EffectParticleParameters.conditionEndParticleReference); + } + + internal EffectDescriptionBuilder SetConditionEffectParameters( + AssetReference conditionStartParticleReference = null, + AssetReference conditionParticleReference = null, + AssetReference conditionEndParticleReference = null) + { + conditionStartParticleReference ??= new AssetReference(); + conditionParticleReference ??= new AssetReference(); + conditionEndParticleReference ??= new AssetReference(); + + _effect.effectParticleParameters.conditionStartParticleReference = conditionStartParticleReference; + _effect.effectParticleParameters.conditionParticleReference = conditionParticleReference; + _effect.effectParticleParameters.conditionEndParticleReference = conditionEndParticleReference; + return this; + } + internal EffectDescriptionBuilder SetEffectEffectParameters(IMagicEffect reference) { return SetEffectEffectParameters(reference.EffectDescription.EffectParticleParameters.effectParticleReference); diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs index 6cb9e5e919..df1719d21b 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs @@ -197,12 +197,11 @@ internal static SpellDefinition BuildBurstOfRadiance() .HasSavingThrow(EffectSavingThrowType.Negates) .Build()) .SetParticleEffectParameters(SacredFlame) + .SetImpactEffectParameters(SacredFlame + .EffectDescription.EffectParticleParameters.effectParticleReference) .Build()) .AddToDB(); - spell.EffectDescription.EffectParticleParameters.impactParticleReference = - spell.EffectDescription.EffectParticleParameters.effectParticleReference; - return spell; } diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs index b642a38d9e..f8f9adbbec 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs @@ -1315,12 +1315,10 @@ internal static SpellDefinition BuildCommand() .Build()) .SetParticleEffectParameters(Command) .SetEffectEffectParameters(SpareTheDying) + .SetConditionEffectParameters() .Build()) .AddToDB(); - spellApproach.EffectDescription.EffectParticleParameters.conditionParticleReference = new AssetReference(); - spellApproach.EffectDescription.EffectParticleParameters.conditionEndParticleReference = new AssetReference(); - // Flee var conditionFlee = ConditionDefinitionBuilder @@ -1360,12 +1358,10 @@ internal static SpellDefinition BuildCommand() .Build()) .SetParticleEffectParameters(Command) .SetEffectEffectParameters(SpareTheDying) + .SetConditionEffectParameters() .Build()) .AddToDB(); - spellFlee.EffectDescription.EffectParticleParameters.conditionParticleReference = new AssetReference(); - spellFlee.EffectDescription.EffectParticleParameters.conditionEndParticleReference = new AssetReference(); - // Grovel var conditionGrovel = ConditionDefinitionBuilder @@ -1404,12 +1400,10 @@ internal static SpellDefinition BuildCommand() .Build()) .SetParticleEffectParameters(Command) .SetEffectEffectParameters(SpareTheDying) + .SetConditionEffectParameters() .Build()) .AddToDB(); - spellGrovel.EffectDescription.EffectParticleParameters.conditionParticleReference = new AssetReference(); - spellGrovel.EffectDescription.EffectParticleParameters.conditionEndParticleReference = new AssetReference(); - // Halt var conditionHalt = ConditionDefinitionBuilder @@ -1453,12 +1447,10 @@ internal static SpellDefinition BuildCommand() .Build()) .SetParticleEffectParameters(Command) .SetEffectEffectParameters(SpareTheDying) + .SetConditionEffectParameters() .Build()) .AddToDB(); - spellHalt.EffectDescription.EffectParticleParameters.conditionParticleReference = new AssetReference(); - spellHalt.EffectDescription.EffectParticleParameters.conditionEndParticleReference = new AssetReference(); - // Command Spell // MAIN diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel02.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel02.cs index d213241d9b..cb24926d40 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel02.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel02.cs @@ -123,21 +123,10 @@ internal static SpellDefinition BuildBindingIce() .HasSavingThrow(EffectSavingThrowType.Negates) .Build()) .SetParticleEffectParameters(ConeOfCold) + .SetConditionEffectParameters(PowerDomainElementalHeraldOfTheElementsCold) .Build()) .AddToDB(); - spell.EffectDescription.EffectParticleParameters.conditionParticleReference = - PowerDomainElementalHeraldOfTheElementsCold.EffectDescription.EffectParticleParameters - .conditionParticleReference; - - spell.EffectDescription.EffectParticleParameters.conditionStartParticleReference = - PowerDomainElementalHeraldOfTheElementsCold.EffectDescription.EffectParticleParameters - .conditionStartParticleReference; - - spell.EffectDescription.EffectParticleParameters.conditionEndParticleReference = - PowerDomainElementalHeraldOfTheElementsCold.EffectDescription.EffectParticleParameters - .conditionEndParticleReference; - return spell; } @@ -497,18 +486,10 @@ internal static SpellDefinition BuildWeb() .Build(), EffectFormBuilder.TopologyForm(TopologyForm.Type.DangerousZone, false), EffectFormBuilder.TopologyForm(TopologyForm.Type.DifficultThrough, false)) + .SetConditionEffectParameters(Entangle) .Build()) .AddToDB(); - spell.EffectDescription.EffectParticleParameters.conditionParticleReference = - Entangle.EffectDescription.EffectParticleParameters.conditionParticleReference; - - spell.EffectDescription.EffectParticleParameters.conditionStartParticleReference = - Entangle.EffectDescription.EffectParticleParameters.conditionStartParticleReference; - - spell.EffectDescription.EffectParticleParameters.conditionEndParticleReference = - Entangle.EffectDescription.EffectParticleParameters.conditionEndParticleReference; - return spell; } diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel05.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel05.cs index 327568dfc5..43e1c5cda7 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel05.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel05.cs @@ -15,7 +15,6 @@ using SolastaUnfinishedBusiness.Properties; using SolastaUnfinishedBusiness.Validators; using TA; -using UnityEngine.AddressableAssets; using static RuleDefinitions; using static SolastaUnfinishedBusiness.Api.DatabaseHelper; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.ConditionDefinitions; @@ -923,6 +922,7 @@ internal static SpellDefinition BuildHolyWeapon() .SetCasterEffectParameters(PowerOathOfDevotionTurnUnholy) .SetImpactEffectParameters( FeatureDefinitionAdditionalDamages.AdditionalDamageBrandingSmite.impactParticleReference) + .SetConditionEffectParameters(ConditionDefinitions.ConditionBlinded) .Build()) .AddCustomSubFeatures( new PowerOrSpellFinishedByMeHolyWeapon(), @@ -1284,13 +1284,10 @@ internal static SpellDefinition BuildTelekinesis() EffectFormBuilder.ConditionForm(conditionTelekinesisNoCost), EffectFormBuilder.ConditionForm(conditionTelekinesis)) .SetParticleEffectParameters(MindTwist) + .SetConditionEffectParameters() .Build()) .AddToDB(); - spell.EffectDescription.EffectParticleParameters.conditionStartParticleReference = new AssetReference(); - spell.EffectDescription.EffectParticleParameters.conditionParticleReference = new AssetReference(); - spell.EffectDescription.EffectParticleParameters.conditionEndParticleReference = new AssetReference(); - var customBehavior = new CustomBehaviorTelekinesis(conditionTelekinesisNoCost, spell); powerTelekinesis.AddCustomSubFeatures(customBehavior); diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel06.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel06.cs index 8edf0ae1a2..a8420e27cb 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel06.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel06.cs @@ -496,17 +496,11 @@ internal static SpellDefinition BuildFlashFreeze() .Build()) .SetParticleEffectParameters(PowerDomainElementalHeraldOfTheElementsCold) .SetCasterEffectParameters(SleetStorm) + .SetConditionEffectParameters(ConditionDefinitions.ConditionRestrained) .Build()) .AddCustomSubFeatures(new FilterTargetingCharacterFlashFreeze()) .AddToDB(); - spell.EffectDescription.EffectParticleParameters.conditionStartParticleReference = - ConditionDefinitions.ConditionRestrained.conditionStartParticleReference; - spell.EffectDescription.EffectParticleParameters.conditionParticleReference = - ConditionDefinitions.ConditionRestrained.conditionParticleReference; - spell.EffectDescription.EffectParticleParameters.conditionEndParticleReference = - ConditionDefinitions.ConditionRestrained.conditionEndParticleReference; - return spell; } diff --git a/SolastaUnfinishedBusiness/Subclasses/MartialForceKnight.cs b/SolastaUnfinishedBusiness/Subclasses/MartialForceKnight.cs index 2f72b59b0f..4fd656381d 100644 --- a/SolastaUnfinishedBusiness/Subclasses/MartialForceKnight.cs +++ b/SolastaUnfinishedBusiness/Subclasses/MartialForceKnight.cs @@ -16,7 +16,6 @@ using SolastaUnfinishedBusiness.Properties; using SolastaUnfinishedBusiness.Spells; using SolastaUnfinishedBusiness.Validators; -using UnityEngine.AddressableAssets; using static RuleDefinitions; using static SolastaUnfinishedBusiness.Api.DatabaseHelper; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.ActionDefinitions; @@ -493,13 +492,10 @@ public MartialForceKnight() EffectFormBuilder.ConditionForm(conditionTelekinesisNoCost), EffectFormBuilder.ConditionForm(conditionTelekinesis)) .SetParticleEffectParameters(SpellDefinitions.MindTwist) + .SetConditionEffectParameters() .Build()) .AddToDB(); - spell.EffectDescription.EffectParticleParameters.conditionStartParticleReference = new AssetReference(); - spell.EffectDescription.EffectParticleParameters.conditionParticleReference = new AssetReference(); - spell.EffectDescription.EffectParticleParameters.conditionEndParticleReference = new AssetReference(); - var customBehavior = new SpellBuilders.CustomBehaviorTelekinesis(conditionTelekinesisNoCost, spell); powerTelekinesis.AddCustomSubFeatures(customBehavior); diff --git a/SolastaUnfinishedBusiness/Subclasses/PathOfTheYeoman.cs b/SolastaUnfinishedBusiness/Subclasses/PathOfTheYeoman.cs index 5cdde34a77..eb185e9e1a 100644 --- a/SolastaUnfinishedBusiness/Subclasses/PathOfTheYeoman.cs +++ b/SolastaUnfinishedBusiness/Subclasses/PathOfTheYeoman.cs @@ -174,12 +174,11 @@ public PathOfTheYeoman() .SetDamageForm(DamageTypeThunder) .Build()) .SetParticleEffectParameters(SpellDefinitions.CallLightning) + .SetImpactEffectParameters(SpellDefinitions.CallLightning + .EffectDescription.EffectParticleParameters.effectParticleReference) .Build()) .AddToDB(); - powerMightyShot.EffectDescription.EffectParticleParameters.impactParticleReference = - powerMightyShot.EffectDescription.EffectParticleParameters.effectParticleReference; - powerMightyShot.AddCustomSubFeatures( ModifyPowerVisibility.Hidden, new UpgradeWeaponDice((_, damage) => (damage.diceNumber, DieType.D12, DieType.D12), IsLongBow), diff --git a/SolastaUnfinishedBusiness/Subclasses/PatronCelestial.cs b/SolastaUnfinishedBusiness/Subclasses/PatronCelestial.cs index 12c7d4a6b5..93b210a483 100644 --- a/SolastaUnfinishedBusiness/Subclasses/PatronCelestial.cs +++ b/SolastaUnfinishedBusiness/Subclasses/PatronCelestial.cs @@ -223,8 +223,8 @@ public PatronCelestial() .Build(), EffectFormBuilder.ConditionForm(conditionBlindedBySearingVengeance)) .SetParticleEffectParameters(PowerDomainSunHeraldOfTheSun) - .SetCasterEffectParameters(HolyAura.EffectDescription.EffectParticleParameters - .effectParticleReference) + .SetCasterEffectParameters( + HolyAura.EffectDescription.EffectParticleParameters.effectParticleReference) .Build()) .AddToDB(); diff --git a/SolastaUnfinishedBusiness/Subclasses/RangerLightBearer.cs b/SolastaUnfinishedBusiness/Subclasses/RangerLightBearer.cs index 67e37ff89e..318d10aa05 100644 --- a/SolastaUnfinishedBusiness/Subclasses/RangerLightBearer.cs +++ b/SolastaUnfinishedBusiness/Subclasses/RangerLightBearer.cs @@ -153,6 +153,7 @@ public RangerLightBearer() ConditionForm.ConditionOperation.Add) .HasSavingThrow(EffectSavingThrowType.Negates, TurnOccurenceType.EndOfTurn, true) .Build()) + .SetParticleEffectParameters(FeatureDefinitionPowers.PowerDomainSunHeraldOfTheSun) .Build()) .AddCustomSubFeatures(ModifyPowerVisibility.Hidden) .AddToDB(); diff --git a/SolastaUnfinishedBusiness/Subclasses/RoguishRavenScion.cs b/SolastaUnfinishedBusiness/Subclasses/RoguishRavenScion.cs index 8c00dfa163..409d303597 100644 --- a/SolastaUnfinishedBusiness/Subclasses/RoguishRavenScion.cs +++ b/SolastaUnfinishedBusiness/Subclasses/RoguishRavenScion.cs @@ -11,7 +11,6 @@ using SolastaUnfinishedBusiness.Interfaces; using SolastaUnfinishedBusiness.Properties; using SolastaUnfinishedBusiness.Validators; -using UnityEngine.AddressableAssets; using static RuleDefinitions; using static SolastaUnfinishedBusiness.Api.DatabaseHelper; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionPowers; @@ -87,14 +86,10 @@ public RoguishRavenScion() .AddCustomSubFeatures(new TryAlterOutcomeAttackDeadlyAimHeartSeekingShot()) .AddToDB())) .SetParticleEffectParameters(PowerPactChainImp) + .SetConditionEffectParameters() .Build()) .AddToDB(); - powerHeartSeekingShot.EffectDescription.EffectParticleParameters.conditionStartParticleReference = - new AssetReference(); - powerHeartSeekingShot.EffectDescription.EffectParticleParameters.conditionEndParticleReference = - new AssetReference(); - // LEVEL 13 // Deadly Focus diff --git a/SolastaUnfinishedBusiness/Subclasses/WayOfTheStormSoul.cs b/SolastaUnfinishedBusiness/Subclasses/WayOfTheStormSoul.cs index b4aacad385..4dfc678f6c 100644 --- a/SolastaUnfinishedBusiness/Subclasses/WayOfTheStormSoul.cs +++ b/SolastaUnfinishedBusiness/Subclasses/WayOfTheStormSoul.cs @@ -144,13 +144,12 @@ public WayOfTheStormSoul() .SetConditionForm(conditionEyeOfTheStorm, ConditionForm.ConditionOperation.Remove) .Build()) .SetParticleEffectParameters(PowerDomainElementalLightningBlade) + .SetImpactEffectParameters(PowerDomainElementalLightningBlade + .EffectDescription.EffectParticleParameters.effectParticleReference) .Build()) .AddCustomSubFeatures(ValidatorsValidatePowerUse.InCombat) .AddToDB(); - powerEyeOfTheStormLeap.EffectDescription.EffectParticleParameters.impactParticleReference = - powerEyeOfTheStormLeap.EffectDescription.EffectParticleParameters.effectParticleReference; - var powerEyeOfTheStorm = FeatureDefinitionPowerBuilder .Create($"Power{Name}EyeOfTheStorm") .SetGuiPresentation($"FeatureSet{Name}EyeOfTheStorm", Category.Feature, From 2ae32298e9fb6f9b35983738a6729ff6e73dfc79 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Thu, 12 Sep 2024 09:37:58 -0700 Subject: [PATCH 121/212] fix interaction between Swift Quiver spell and Flurry of Blows --- .../Api/DatabaseHelper-RELEASE.cs | 3 +++ .../Patches/CharacterActionAttackPatcher.cs | 10 ++++++++++ .../Patches/GameLocationCharacterPatcher.cs | 12 ++++++++++++ .../Spells/SpellBuildersLevel05.cs | 7 ++++++- .../Subclasses/WayOfTheZenArchery.cs | 3 ++- 5 files changed, 33 insertions(+), 2 deletions(-) diff --git a/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs b/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs index 1cc814e40a..e48b7bb12e 100644 --- a/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs +++ b/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs @@ -303,6 +303,9 @@ internal static class CharacterSubclassDefinitions internal static class ConditionDefinitions { + internal static ConditionDefinition ConditionMonkFlurryOfBlowsUnarmedStrikeBonus { get; } = + GetDefinition("ConditionMonkFlurryOfBlowsUnarmedStrikeBonus"); + internal static ConditionDefinition ConditionSpiderClimb { get; } = GetDefinition("ConditionSpiderClimb"); diff --git a/SolastaUnfinishedBusiness/Patches/CharacterActionAttackPatcher.cs b/SolastaUnfinishedBusiness/Patches/CharacterActionAttackPatcher.cs index a5ce00d632..f414d51fb5 100644 --- a/SolastaUnfinishedBusiness/Patches/CharacterActionAttackPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/CharacterActionAttackPatcher.cs @@ -1,10 +1,12 @@ using System.Collections; +using System.Collections.Generic; using System.Linq; using HarmonyLib; using JetBrains.Annotations; using SolastaUnfinishedBusiness.Api.GameExtensions; using SolastaUnfinishedBusiness.Behaviors.Specific; using SolastaUnfinishedBusiness.Interfaces; +using SolastaUnfinishedBusiness.Spells; using UnityEngine; using static RuleDefinitions; using Coroutine = TA.Coroutine; @@ -47,6 +49,14 @@ internal static IEnumerator ExecuteImpl(CharacterActionAttack __instance) var itemService = ServiceRepository.GetService(); var positioningService = ServiceRepository.GetService(); + //BEGIN PATCH + //support Swift Quiver spell interaction with Flurry of Blows + if (attackMode.AttackTags.Contains(SpellBuilders.SwiftQuiverAttackTag)) + { + actingCharacter.UsedSpecialFeatures.TryAdd(SpellBuilders.SwiftQuiverAttackTag, 0); + } + //END PATCH + // Check action params var canAttackMain = actingCharacter.GetActionStatus( diff --git a/SolastaUnfinishedBusiness/Patches/GameLocationCharacterPatcher.cs b/SolastaUnfinishedBusiness/Patches/GameLocationCharacterPatcher.cs index a32908ca7a..83bd6e17bc 100644 --- a/SolastaUnfinishedBusiness/Patches/GameLocationCharacterPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/GameLocationCharacterPatcher.cs @@ -13,6 +13,7 @@ using SolastaUnfinishedBusiness.CustomUI; using SolastaUnfinishedBusiness.Interfaces; using SolastaUnfinishedBusiness.Models; +using SolastaUnfinishedBusiness.Spells; using SolastaUnfinishedBusiness.Validators; using TA; using UnityEngine; @@ -374,6 +375,17 @@ or ActionDefinitions.Id.FlurryOfBlowsUnendingStrikes && __result = ActionDefinitions.ActionStatus.Available; } + //PATCH: support Swift Quiver spell interaction with Flurry of Blows + if (actionId + is ActionDefinitions.Id.FlurryOfBlows + or ActionDefinitions.Id.FlurryOfBlowsSwiftSteps + or ActionDefinitions.Id.FlurryOfBlowsUnendingStrikes && + __instance.UsedSpecialFeatures.ContainsKey(SpellBuilders.SwiftQuiverAttackTag) && + __result == ActionDefinitions.ActionStatus.Available) + { + __result = ActionDefinitions.ActionStatus.CannotPerform; + } + var traditionFreedomLevel = __instance.RulesetCharacter.GetSubclassLevel(DatabaseHelper.CharacterClassDefinitions.Monk, "TraditionFreedom"); diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel05.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel05.cs index 43e1c5cda7..ed1d132332 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel05.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel05.cs @@ -1108,6 +1108,8 @@ public IEnumerator ComputeValidPositions(CursorLocationSelectPosition cursorLoca #region Swift Quiver + internal const string SwiftQuiverAttackTag = "SwiftQuiverAttack"; + internal static SpellDefinition BuildSwiftQuiver() { const string NAME = "SwiftQuiver"; @@ -1115,7 +1117,9 @@ internal static SpellDefinition BuildSwiftQuiver() var condition = ConditionDefinitionBuilder .Create($"Condition{NAME}") .SetGuiPresentation(NAME, Category.Spell, ConditionDefinitions.ConditionReckless) - .AddCustomSubFeatures(new AddExtraSwiftQuiverAttack(ActionDefinitions.ActionType.Bonus)) + .AddCustomSubFeatures(new AddExtraSwiftQuiverAttack( + ActionDefinitions.ActionType.Bonus, + ValidatorsCharacter.HasNoneOfConditions(ConditionMonkFlurryOfBlowsUnarmedStrikeBonus.Name))) .CopyParticleReferences(ConditionDefinitions.ConditionSpiderClimb) .AddToDB(); @@ -1188,6 +1192,7 @@ protected override List GetAttackModes([NotNull] RulesetChara ); attackMode.AttacksNumber = 2; + attackMode.AddAttackTagAsNeeded(SwiftQuiverAttackTag); return [attackMode]; } diff --git a/SolastaUnfinishedBusiness/Subclasses/WayOfTheZenArchery.cs b/SolastaUnfinishedBusiness/Subclasses/WayOfTheZenArchery.cs index 71b4c17cb1..c27ecc93f9 100644 --- a/SolastaUnfinishedBusiness/Subclasses/WayOfTheZenArchery.cs +++ b/SolastaUnfinishedBusiness/Subclasses/WayOfTheZenArchery.cs @@ -40,8 +40,9 @@ public WayOfZenArchery() .SetGuiPresentation(Category.Feature) .AddCustomSubFeatures( new ModifyWeaponAttackModeFlurryOfArrows(), - new AddExtraMainHandAttack( + new AddExtraRangedAttack( ActionDefinitions.ActionType.Bonus, + ValidatorsWeapon.AlwaysValid, ValidatorsCharacter.HasBowWithoutArmor, ValidatorsCharacter.HasAnyOfConditions(ConditionMonkMartialArtsUnarmedStrikeBonus))) .AddToDB(); From 6a813aa32c20f7ea9c94bad32cdcc27f39a502a4 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Thu, 12 Sep 2024 09:39:03 -0700 Subject: [PATCH 122/212] fix demonic influence duration and combat log --- SolastaUnfinishedBusiness/Models/FixesContext.cs | 3 ++- .../Patches/GameLocationCharacterManagerPatcher.cs | 5 ++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/SolastaUnfinishedBusiness/Models/FixesContext.cs b/SolastaUnfinishedBusiness/Models/FixesContext.cs index d2dde255e7..8d2ce15f2a 100644 --- a/SolastaUnfinishedBusiness/Models/FixesContext.cs +++ b/SolastaUnfinishedBusiness/Models/FixesContext.cs @@ -51,10 +51,11 @@ internal static void Load() internal static void LateLoad() { - //ConditionDefinitions.ConditionUnderDemonicInfluence.forceBehavior = false; + // fix demonic influence duration and combat log (conditions with ForcedBehavior should have special duration) ConditionDefinitions.ConditionUnderDemonicInfluence.specialDuration = true; ConditionDefinitions.ConditionUnderDemonicInfluence.durationType = DurationType.Hour; ConditionDefinitions.ConditionUnderDemonicInfluence.durationParameter = 1; + ConditionDefinitions.ConditionUnderDemonicInfluence.possessive = true; AddAdditionalActionTitles(); ExtendCharmImmunityToDemonicInfluence(); diff --git a/SolastaUnfinishedBusiness/Patches/GameLocationCharacterManagerPatcher.cs b/SolastaUnfinishedBusiness/Patches/GameLocationCharacterManagerPatcher.cs index 1c2890b820..a55a51baed 100644 --- a/SolastaUnfinishedBusiness/Patches/GameLocationCharacterManagerPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/GameLocationCharacterManagerPatcher.cs @@ -25,7 +25,10 @@ public static void Prefix(Side side, ref GameLocationBehaviourPackage behaviourP { if (side == Side.Ally) { - behaviourPackage ??= new GameLocationBehaviourPackage { EncounterId = 424242 }; + behaviourPackage ??= new GameLocationBehaviourPackage + { + BattleStartBehavior = GameLocationBehaviourPackage.BattleStartBehaviorType.DoNotRaiseAlarm + }; } } } From 1f5939874ae746a157fc7268c695df05100d6d93 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Thu, 12 Sep 2024 09:39:37 -0700 Subject: [PATCH 123/212] fix RefreshAttributes patch to refresh attribute if not up to date instead of ignoring it in the loop --- .../Patches/RulesetActorPatcher.cs | 24 +++++++++++-------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/SolastaUnfinishedBusiness/Patches/RulesetActorPatcher.cs b/SolastaUnfinishedBusiness/Patches/RulesetActorPatcher.cs index ace4520048..fbd05f842b 100644 --- a/SolastaUnfinishedBusiness/Patches/RulesetActorPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/RulesetActorPatcher.cs @@ -964,16 +964,22 @@ private static void RefreshClassModifiers(RulesetActor actor) return; } - foreach (var attribute in actor.Attributes - .Where(x => x.Value.UpToDate)) + foreach (var attribute in actor.Attributes) { - foreach (var modifier in attribute.Value.ActiveModifiers) + var rulesetAttribute = attribute.Value; + + if (!rulesetAttribute.upToDate) + { + rulesetAttribute.Refresh(); + } + + foreach (var attributeModifier in rulesetAttribute.ActiveModifiers) { - switch (modifier.Operation) + switch (attributeModifier.Operation) { case AttributeModifierOperation.MultiplyByClassLevel or AttributeModifierOperation.MultiplyByClassLevelBeforeAdditions: - modifier.Value = attribute.Key switch + attributeModifier.Value = attribute.Key switch { AttributeDefinitions.HealingPool => hero.GetClassLevel(DatabaseHelper.CharacterClassDefinitions.Paladin), @@ -988,28 +994,26 @@ private static void RefreshClassModifiers(RulesetActor actor) { var halfPb = hero.TryGetAttributeValue(AttributeDefinitions.ProficiencyBonus) / 2; - modifier.Value = halfPb; + attributeModifier.Value = halfPb; break; } case AttributeModifierOperation.AddProficiencyBonus: { var pb = hero.TryGetAttributeValue(AttributeDefinitions.ProficiencyBonus); - modifier.Value = pb; + attributeModifier.Value = pb; break; } case AttributeModifierOperation.Additive when attribute.Key == AttributeDefinitions.HealingPool: { - //make this more generic. it supports Ancient Forest and Light Bearer subclasses - //this will not work if both subclasses are present... var levels = hero.GetSubclassLevel(DatabaseHelper.CharacterClassDefinitions.Druid, CircleOfTheAncientForest.Name) + hero.GetSubclassLevel(DatabaseHelper.CharacterClassDefinitions.Ranger, RangerLightBearer.Name); - modifier.Value = levels * 5; + attributeModifier.Value = levels * 5; break; } } From 1f493924e38f8878fb04161b980ba1dcfdcf2b86 Mon Sep 17 00:00:00 2001 From: EnderWiggin Date: Thu, 12 Sep 2024 21:07:21 +0300 Subject: [PATCH 124/212] patch to allow push and pull motion effects to change vertical position of a target --- .../Behaviors/VerticalPushPullMotion.cs | 96 +++++++++++++++++++ .../GameLocationEnvironmentManagerPatcher.cs | 44 +++++++++ 2 files changed, 140 insertions(+) create mode 100644 SolastaUnfinishedBusiness/Behaviors/VerticalPushPullMotion.cs diff --git a/SolastaUnfinishedBusiness/Behaviors/VerticalPushPullMotion.cs b/SolastaUnfinishedBusiness/Behaviors/VerticalPushPullMotion.cs new file mode 100644 index 0000000000..eccccfd7cf --- /dev/null +++ b/SolastaUnfinishedBusiness/Behaviors/VerticalPushPullMotion.cs @@ -0,0 +1,96 @@ +using System; +using TA; +using UnityEngine; + +namespace SolastaUnfinishedBusiness.Behaviors; + +internal static class VerticalPushPullMotion +{ + private const double Epsilon = 0.015; + private const double StepHigh = 0.4 - Epsilon; + private const double StepLow = 0.1 - Epsilon; + + public static bool ComputePushDestination( + Vector3 sourceCenter, + GameLocationCharacter target, + int distance, + bool reverse, + IGameLocationPositioningService positioningService, + out int3 destination, + out Vector3 step) + { + var targetCenter = new Vector3(); + positioningService.ComputeGravityCenterPosition(target, ref targetCenter); + var direction = targetCenter - sourceCenter; + if (reverse) + { + direction = -direction; + var b = (int)Math.Max(Math.Max(Mathf.Abs(direction.x), Mathf.Abs(direction.y)), Mathf.Abs(direction.z)); + distance = distance <= 0 ? b : Mathf.Min(distance, b); + } + else + { + distance = Mathf.Max(1, distance); + } + + step = direction.normalized; + destination = target.LocationPosition; + var position = target.LocationPosition; + var delta = new Vector3(); + var canPush = false; + + for (var index = 0; index < distance; ++index) + { + delta += step; + + var sides = Step(delta, StepHigh); + if (sides is { x: 0, y: 0, z: 0 }) + { + sides = Step(delta, StepLow); + } + + position += sides; + delta.x = sides.x == 0 ? delta.x : 0; + delta.y = sides.y == 0 ? delta.y : 0; + delta.z = sides.z == 0 ? delta.z : 0; + + var allSurfaceSides = CellFlags.DirectionToAllSurfaceSides(sides); + var flag = true; + var canMoveThroughWalls = target.CanMoveInSituation(RulesetCharacter.MotionRange.ThroughWalls); + foreach (var allSide in CellFlags.AllSides) + { + if (flag && (allSide & allSurfaceSides) != CellFlags.Side.None) + { + flag &= positioningService.CanCharacterMoveThroughSide(target.SizeParameters, position, allSide, + canMoveThroughWalls); + } + } + + if (flag && positioningService.CanPlaceCharacter(target, position, CellHelpers.PlacementMode.Station)) + { + destination = position; + canPush = true; + } + else + { + break; + } + } + + //TODO: remove after testing + Main.Log( + $"Motion applied: {canPush}, source: {sourceCenter}, target: {targetCenter}, destination: {destination}", + true); + + return canPush; + } + + private static int3 Step(Vector3 delta, double tolerance) + { + return new int3( + (int)Mathf.Sign(delta.x) * (Mathf.Abs(delta.x) < tolerance ? 0 : 1), + (int)Mathf.Sign(delta.y) * (Mathf.Abs(delta.y) < tolerance ? 0 : 1), + (int)Mathf.Sign(delta.z) * (Mathf.Abs(delta.z) < tolerance ? 0 : 1) + ); + } +} diff --git a/SolastaUnfinishedBusiness/Patches/GameLocationEnvironmentManagerPatcher.cs b/SolastaUnfinishedBusiness/Patches/GameLocationEnvironmentManagerPatcher.cs index 15c1983fc1..c164175a10 100644 --- a/SolastaUnfinishedBusiness/Patches/GameLocationEnvironmentManagerPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/GameLocationEnvironmentManagerPatcher.cs @@ -8,6 +8,8 @@ using SolastaUnfinishedBusiness.Api.GameExtensions; using SolastaUnfinishedBusiness.Api.Helpers; using SolastaUnfinishedBusiness.Behaviors; +using TA; +using UnityEngine; using static RuleDefinitions; namespace SolastaUnfinishedBusiness.Patches; @@ -89,4 +91,46 @@ public static IEnumerable Transpiler([NotNull] IEnumerable Date: Thu, 12 Sep 2024 22:22:07 +0300 Subject: [PATCH 125/212] added setting to hide QuickenedCast action if metamagic is toggled off --- SolastaUnfinishedBusiness/Displays/RulesDisplay.cs | 9 +++++++++ .../Models/CustomActionIdContext.cs | 2 +- SolastaUnfinishedBusiness/Settings.cs | 1 + .../Translations/en/Settings-en.txt | 1 + 4 files changed, 12 insertions(+), 1 deletion(-) diff --git a/SolastaUnfinishedBusiness/Displays/RulesDisplay.cs b/SolastaUnfinishedBusiness/Displays/RulesDisplay.cs index 55db1cd95d..061442d5f8 100644 --- a/SolastaUnfinishedBusiness/Displays/RulesDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/RulesDisplay.cs @@ -206,6 +206,15 @@ internal static void DisplayRules() { Main.Settings.EnableSorcererQuickenedAction = toggle; } + + if (Main.Settings.EnableSorcererQuickenedAction) + { + toggle = Main.Settings.HideQuickenedActionWhenMetamagicOff; + if (UI.Toggle(Gui.Localize("ModUi/&HideQuickenedActionWhenMetamagicOff"), ref toggle, UI.AutoWidth())) + { + Main.Settings.HideQuickenedActionWhenMetamagicOff = toggle; + } + } UI.Label(); diff --git a/SolastaUnfinishedBusiness/Models/CustomActionIdContext.cs b/SolastaUnfinishedBusiness/Models/CustomActionIdContext.cs index 3bf257d7ae..e45c4719ed 100644 --- a/SolastaUnfinishedBusiness/Models/CustomActionIdContext.cs +++ b/SolastaUnfinishedBusiness/Models/CustomActionIdContext.cs @@ -680,7 +680,7 @@ private static ActionStatus CanUseActionQuickened(GameLocationCharacter glc, Act // more or less in order of cost if (hero == null || !hero.TrainedMetamagicOptions.Contains(quickenedSpell) || - !glc.IsActionOnGoing(Id.MetamagicToggle) || + (Main.Settings.HideQuickenedActionWhenMetamagicOff && !glc.IsActionOnGoing(Id.MetamagicToggle)) || glc.GetActionTypeStatus(ActionType.Bonus) != ActionStatus.Available || !glc.RulesetCharacter.CanCastSpellOfActionType(ActionType.Main, glc.CanOnlyUseCantrips)) { diff --git a/SolastaUnfinishedBusiness/Settings.cs b/SolastaUnfinishedBusiness/Settings.cs index c0b1ac4cab..efde30524a 100644 --- a/SolastaUnfinishedBusiness/Settings.cs +++ b/SolastaUnfinishedBusiness/Settings.cs @@ -220,6 +220,7 @@ public class Settings : UnityModManager.ModSettings public bool EnableRogueStrSaving { get; set; } public bool EnableSorcererMagicalGuidance { get; set; } public bool EnableSorcererQuickenedAction { get; set; } + public bool HideQuickenedActionWhenMetamagicOff { get; set; } // Visuals public bool OfferAdditionalLoreFriendlyNames { get; set; } diff --git a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt index 5194e61bc4..c0869048a8 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt @@ -208,6 +208,7 @@ ModUi/&GrantScimitarSpecializationToBarkMonkRogue=Grant Scimitar Weapon Speci ModUi/&GridSelectedColor=Change the movement grid color ModUi/&HideExitAndTeleporterGizmosIfNotDiscovered=Hide exits and teleporters visual effects if not discovered yet ModUi/&HideMonsterHitPoints=Display Monsters' health in steps of 25% / 50% / 75% / 100% instead of exact hit points +ModUi/&HideQuickenedActionWhenMetamagicOff=+ Hide this action when metamagic is toggled off ModUi/&HighContrastTargetingAoeColor=Change AoE creatures highlight select color ModUi/&HighContrastTargetingSingleColor=Change single creatures highlight select color ModUi/&House=House: From b48498034ac73cef7d6eb4ac407cb05bdcdfbd1b Mon Sep 17 00:00:00 2001 From: EnderWiggin Date: Thu, 12 Sep 2024 22:28:40 +0300 Subject: [PATCH 126/212] tweaked sort order of various casting actions to make more sense --- .../Builders/GuiPresentationBuilder.cs | 15 +++++++++++++++ .../Models/CharacterContext.cs | 1 + .../Models/CustomActionIdContext.cs | 8 ++++++-- 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/SolastaUnfinishedBusiness/Builders/GuiPresentationBuilder.cs b/SolastaUnfinishedBusiness/Builders/GuiPresentationBuilder.cs index 48da7de118..80a2e2a02b 100644 --- a/SolastaUnfinishedBusiness/Builders/GuiPresentationBuilder.cs +++ b/SolastaUnfinishedBusiness/Builders/GuiPresentationBuilder.cs @@ -336,4 +336,19 @@ internal static TBuilder SetGuiPresentationNoContent(this TBuilder bui : GuiPresentationBuilder.NoContent); return builder; } + + internal static TBuilder SetSortOrder(this TBuilder builder, BaseDefinition definition) + where TBuilder : IDefinitionBuilder + { + return builder.SetSortOrder(definition.GuiPresentation.SortOrder); + } + + internal static TBuilder SetSortOrder(this TBuilder builder, int sortOrder) + where TBuilder : IDefinitionBuilder + { + var gui = builder.GetGuiPresentation(); + gui.sortOrder = sortOrder; + + return builder; + } } diff --git a/SolastaUnfinishedBusiness/Models/CharacterContext.cs b/SolastaUnfinishedBusiness/Models/CharacterContext.cs index d7a63d4217..5c1c8d8f77 100644 --- a/SolastaUnfinishedBusiness/Models/CharacterContext.cs +++ b/SolastaUnfinishedBusiness/Models/CharacterContext.cs @@ -353,6 +353,7 @@ private static void LoadSorcererQuickened() .Create(CastBonus, "CastQuickened") .SetGuiPresentation( "Rules/&MetamagicOptionQuickenedSpellTitle", "Action/&CastQuickenedDescription", CastMain) + .SetSortOrder(CastBonus) .SetActionId(ExtraActionId.CastQuickened) .AddToDB(); diff --git a/SolastaUnfinishedBusiness/Models/CustomActionIdContext.cs b/SolastaUnfinishedBusiness/Models/CustomActionIdContext.cs index e45c4719ed..3cbba90d63 100644 --- a/SolastaUnfinishedBusiness/Models/CustomActionIdContext.cs +++ b/SolastaUnfinishedBusiness/Models/CustomActionIdContext.cs @@ -114,6 +114,7 @@ private static void BuildCustomInvocationActions() { ActionDefinitionBuilder .Create(CastInvocation, "CastInvocationBonus") + .SetSortOrder(CastBonus.GuiPresentation.sortOrder + 2) .SetActionId(ExtraActionId.CastInvocationBonus) .SetActionType(ActionType.Bonus) .SetActionScope(ActionScope.Battle) @@ -121,6 +122,7 @@ private static void BuildCustomInvocationActions() ActionDefinitionBuilder .Create(CastInvocation, "CastInvocationNoCost") + .SetSortOrder(CastNoCost.GuiPresentation.sortOrder + 2) .SetActionId(ExtraActionId.CastInvocationNoCost) .SetActionType(ActionType.NoCost) .SetActionScope(ActionScope.Battle) @@ -128,7 +130,8 @@ private static void BuildCustomInvocationActions() ActionDefinitionBuilder .Create(CastInvocation, "CastPlaneMagicMain") - .SetGuiPresentation("CastPlaneMagic", Category.Action, Sprites.ActionPlaneMagic, 10) + .SetGuiPresentation("CastPlaneMagic", Category.Action, Sprites.ActionPlaneMagic) + .SetSortOrder(CastMain.GuiPresentation.sortOrder + 1) .SetActionId(ExtraActionId.CastPlaneMagicMain) .SetActionType(ActionType.Main) .SetActionScope(ActionScope.All) @@ -136,7 +139,8 @@ private static void BuildCustomInvocationActions() ActionDefinitionBuilder .Create(CastInvocation, "CastPlaneMagicBonus") - .SetGuiPresentation("CastPlaneMagic", Category.Action, Sprites.ActionPlaneMagic, 41) + .SetGuiPresentation("CastPlaneMagic", Category.Action, Sprites.ActionPlaneMagic) + .SetSortOrder(CastBonus.GuiPresentation.sortOrder + 1) .SetActionId(ExtraActionId.CastPlaneMagicBonus) .SetActionType(ActionType.Bonus) .SetActionScope(ActionScope.Battle) From bf91db9d2c168b20ecd8d2236f721be1a8b7e25b Mon Sep 17 00:00:00 2001 From: EnderWiggin Date: Thu, 12 Sep 2024 22:40:41 +0300 Subject: [PATCH 127/212] improved vertical push logging --- .../Behaviors/VerticalPushPullMotion.cs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/SolastaUnfinishedBusiness/Behaviors/VerticalPushPullMotion.cs b/SolastaUnfinishedBusiness/Behaviors/VerticalPushPullMotion.cs index eccccfd7cf..d9f6683e14 100644 --- a/SolastaUnfinishedBusiness/Behaviors/VerticalPushPullMotion.cs +++ b/SolastaUnfinishedBusiness/Behaviors/VerticalPushPullMotion.cs @@ -37,7 +37,7 @@ public static bool ComputePushDestination( destination = target.LocationPosition; var position = target.LocationPosition; var delta = new Vector3(); - var canPush = false; + var result = false; for (var index = 0; index < distance; ++index) { @@ -69,7 +69,7 @@ public static bool ComputePushDestination( if (flag && positioningService.CanPlaceCharacter(target, position, CellHelpers.PlacementMode.Station)) { destination = position; - canPush = true; + result = true; } else { @@ -78,11 +78,12 @@ public static bool ComputePushDestination( } //TODO: remove after testing + var dir = reverse ? "Pull" : "Push"; Main.Log( - $"Motion applied: {canPush}, source: {sourceCenter}, target: {targetCenter}, destination: {destination}", + $"{dir} [{target.Name}] {distance}\u25ce applied: {result}, source: {sourceCenter}, target: {targetCenter}, destination: {destination}", true); - return canPush; + return result; } private static int3 Step(Vector3 delta, double tolerance) From 6d4645411a9f6b4e96c53b43301ca4c486f3f998 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Thu, 12 Sep 2024 15:02:47 -0700 Subject: [PATCH 128/212] review usages of AllConditionsForEnumeration and prefer usage on a fewer scenarios - ConditionsByCategory always carry the latest up-to-date conditions - AllConditions comes after and gets update sometimes a bit later on flow - AllConditionsForEnumeration must always be populated with GetConditions --- .../GameExtensions/RulesetActorExtensions.cs | 12 ++++++++---- .../RulesetCharacterExtensions.cs | 6 ++++-- .../Behaviors/CustomSituationalContext.cs | 18 ++++++++++++------ SolastaUnfinishedBusiness/Feats/ClassFeats.cs | 6 ++++-- .../FightingStyles/Interception.cs | 6 ++++-- .../Models/CustomConditionsContext.cs | 13 ++++++++----- .../Models/LightingAndObscurementContext.cs | 5 +++-- .../Models/SpellPointsContext.cs | 6 ++++-- .../Models/ToolsContext.cs | 8 ++++---- .../Patches/CharacterActionAttackPatcher.cs | 3 ++- .../CharacterActionMagicEffectPatcher.cs | 3 ++- ...iderationsInfluenceEnemyProximityPatcher.cs | 5 ++++- ...tionsInfluenceFearSourceProximityPatcher.cs | 9 +++++++-- .../CursorLocationSelectTargetPatcher.cs | 8 +++++--- .../Patches/FunctorPatcher.cs | 11 ++++++----- .../Patches/RulesetActorPatcher.cs | 3 +++ .../Patches/RulesetCharacterPatcher.cs | 18 ++++++++---------- ...esetImplementationManagerLocationPatcher.cs | 3 ++- .../Spells/SpellBuildersLevel01.cs | 9 ++++++--- .../Spells/SpellBuildersLevel04.cs | 8 +++++--- .../Subclasses/CircleOfTheCosmos.cs | 7 +++++-- .../Subclasses/CircleOfTheLife.cs | 6 +++--- .../Subclasses/WayOfTheDiscordance.cs | 10 +++++++--- .../Subclasses/WayOfTheStormSoul.cs | 8 +++++--- .../Subclasses/WayOfTheWealAndWoe.cs | 4 +++- .../Validators/ValidatorsCharacter.cs | 3 ++- 26 files changed, 126 insertions(+), 72 deletions(-) diff --git a/SolastaUnfinishedBusiness/Api/GameExtensions/RulesetActorExtensions.cs b/SolastaUnfinishedBusiness/Api/GameExtensions/RulesetActorExtensions.cs index 7c21852993..3a86bce35d 100644 --- a/SolastaUnfinishedBusiness/Api/GameExtensions/RulesetActorExtensions.cs +++ b/SolastaUnfinishedBusiness/Api/GameExtensions/RulesetActorExtensions.cs @@ -28,7 +28,9 @@ private static void OnRollSavingThrowOath( if (sourceDefinition is not SpellDefinition { castingTime: ActivationTime.Action } && sourceDefinition is not FeatureDefinitionPower { RechargeRate: RechargeRate.ChannelDivinity } && - !caster.AllConditionsForEnumeration.Any(x => x.Name.Contains("Smite"))) + !caster.ConditionsByCategory + .SelectMany(x => x.Value) + .Any(x => x.Name.Contains("Smite"))) { return; } @@ -293,8 +295,9 @@ internal static List GetSubFeaturesByType([CanBeNull] this RulesetActor ac if (actor != null) { - list.AddRange( - actor.AllConditionsForEnumeration.SelectMany(x => x.ConditionDefinition.GetAllSubFeaturesOfType())); + list.AddRange(actor.ConditionsByCategory + .SelectMany(x => x.Value) + .SelectMany(x => x.ConditionDefinition.GetAllSubFeaturesOfType())); } return list; @@ -311,7 +314,8 @@ internal static bool HasSubFeatureOfType([CanBeNull] this RulesetActor actor, return true; } - return actor?.AllConditionsForEnumeration + return actor?.ConditionsByCategory + .SelectMany(x => x.Value) .SelectMany(x => x.ConditionDefinition.GetAllSubFeaturesOfType()) .FirstOrDefault() != null; } diff --git a/SolastaUnfinishedBusiness/Api/GameExtensions/RulesetCharacterExtensions.cs b/SolastaUnfinishedBusiness/Api/GameExtensions/RulesetCharacterExtensions.cs index 2d5be5882d..81c4d73bfd 100644 --- a/SolastaUnfinishedBusiness/Api/GameExtensions/RulesetCharacterExtensions.cs +++ b/SolastaUnfinishedBusiness/Api/GameExtensions/RulesetCharacterExtensions.cs @@ -536,7 +536,8 @@ internal static bool IsMyFavoriteEnemy(this RulesetCharacter me, RulesetCharacte internal static bool RemoveAllConditionsOfType(this RulesetCharacter character, params string[] types) { //should we return number of removed conditions, instead of whether we removed any? - var conditions = character?.AllConditionsForEnumeration + var conditions = character?.ConditionsByCategoryAndType + .SelectMany(x => x.Value) .Where(c => types.Contains(c.conditionDefinition.Name)) .ToList(); @@ -580,7 +581,8 @@ internal static RulesetCharacterHero GetOriginalHero(this RulesetCharacter chara internal static bool HasTemporaryConditionOfType(this RulesetCharacter character, string conditionName) { - return character.AllConditionsForEnumeration + return character.ConditionsByCategory + .SelectMany(x => x.Value) .Any(condition => condition.ConditionDefinition.IsSubtypeOf(conditionName) && condition.DurationType != DurationType.Permanent); } diff --git a/SolastaUnfinishedBusiness/Behaviors/CustomSituationalContext.cs b/SolastaUnfinishedBusiness/Behaviors/CustomSituationalContext.cs index 00b52a01ef..a374933ecf 100644 --- a/SolastaUnfinishedBusiness/Behaviors/CustomSituationalContext.cs +++ b/SolastaUnfinishedBusiness/Behaviors/CustomSituationalContext.cs @@ -60,16 +60,22 @@ internal static bool IsContextValid( ExtraSituationalContext.IsNotConditionSource => // this is required whenever there is a SetMyAttackAdvantage (Taunted, Illuminating Strike, Honed Bear) - contextParams.target.Guid != contextParams.source.AllConditionsForEnumeration.FirstOrDefault(x => - x.ConditionDefinition == contextParams.condition)?.SourceGuid && + contextParams.target.Guid != contextParams.source.ConditionsByCategory + .SelectMany(x => x.Value) + .FirstOrDefault(x => + x.ConditionDefinition == contextParams.condition)?.SourceGuid && // this is required whenever there is a SetAttackOnMeAdvantage (Press the Advantage, Gambit Blind) - contextParams.source.Guid != contextParams.target.AllConditionsForEnumeration.FirstOrDefault(x => - x.ConditionDefinition == contextParams.condition)?.SourceGuid, + contextParams.source.Guid != contextParams.target.ConditionsByCategory + .SelectMany(x => x.Value) + .FirstOrDefault(x => + x.ConditionDefinition == contextParams.condition)?.SourceGuid, ExtraSituationalContext.IsNotConditionSourceNotRanged => // this is required whenever there is a SetMyAttackAdvantage (Wolf Leadership) - contextParams.source.Guid != contextParams.source.AllConditionsForEnumeration.FirstOrDefault(x => - x.ConditionDefinition == contextParams.condition)?.SourceGuid && + contextParams.source.Guid != contextParams.source.ConditionsByCategory + .SelectMany(x => x.Value) + .FirstOrDefault(x => + x.ConditionDefinition == contextParams.condition)?.SourceGuid && !contextParams.rangedAttack, ExtraSituationalContext.TargetIsFavoriteEnemy => diff --git a/SolastaUnfinishedBusiness/Feats/ClassFeats.cs b/SolastaUnfinishedBusiness/Feats/ClassFeats.cs index 8dd160f2b0..5bff83a7c9 100644 --- a/SolastaUnfinishedBusiness/Feats/ClassFeats.cs +++ b/SolastaUnfinishedBusiness/Feats/ClassFeats.cs @@ -499,8 +499,10 @@ public IEnumerator OnActionFinishedByMe(CharacterAction action) } var rulesetCondition = - rulesetCharacterMonster.AllConditionsForEnumeration.FirstOrDefault(x => - x.SourceGuid == TemporaryHitPointsGuid); + rulesetCharacterMonster.ConditionsByCategory + .SelectMany(x => x.Value) + .FirstOrDefault(x => + x.SourceGuid == TemporaryHitPointsGuid); if (rulesetCondition != null) { diff --git a/SolastaUnfinishedBusiness/FightingStyles/Interception.cs b/SolastaUnfinishedBusiness/FightingStyles/Interception.cs index 2ae715395c..ee846b1b85 100644 --- a/SolastaUnfinishedBusiness/FightingStyles/Interception.cs +++ b/SolastaUnfinishedBusiness/FightingStyles/Interception.cs @@ -43,8 +43,10 @@ internal sealed class Interception : AbstractFightingStyle .SetGuiPresentation(Name, Category.FightingStyle) .SetAlwaysActiveReducedDamage( (_, defender) => - defender.RulesetActor.AllConditionsForEnumeration.FirstOrDefault( - x => x.ConditionDefinition.Name == $"Condition{Name}")!.Amount) + defender.RulesetActor.ConditionsByCategory + .SelectMany(x => x.Value) + .FirstOrDefault( + x => x.ConditionDefinition.Name == $"Condition{Name}")!.Amount) .AddToDB()) .AddToDB())) .AddToDB()) diff --git a/SolastaUnfinishedBusiness/Models/CustomConditionsContext.cs b/SolastaUnfinishedBusiness/Models/CustomConditionsContext.cs index dfea13600f..1165d321ad 100644 --- a/SolastaUnfinishedBusiness/Models/CustomConditionsContext.cs +++ b/SolastaUnfinishedBusiness/Models/CustomConditionsContext.cs @@ -325,10 +325,11 @@ public void OnConditionAdded(RulesetCharacter target, RulesetCondition rulesetCo } else { - var conditions = target.AllConditionsForEnumeration; - - foreach (var condition in conditions - .Where(condition => condition.ConditionDefinition.IsSubtypeOf("ConditionFlying"))) + // need ToList to avoid enumerator issues with RemoveCondition + foreach (var condition in target.ConditionsByCategory + .SelectMany(x => x.Value) + .Where(condition => condition.ConditionDefinition.IsSubtypeOf("ConditionFlying")) + .ToList()) { //We are not interested in permanent effects if (condition.DurationType == DurationType.Permanent) @@ -522,7 +523,9 @@ public IEnumerator OnActionFinishedByMe(CharacterAction characterAction) var actingCharacter = characterAction.ActingCharacter; var rulesetCharacter = actingCharacter.RulesetCharacter; - foreach (var rulesetCondition in rulesetCharacter.AllConditionsForEnumeration + // need ToList to avoid enumerator issues with RemoveCondition + foreach (var rulesetCondition in rulesetCharacter.ConditionsByCategory + .SelectMany(x => x.Value) .Where(x => x.ConditionDefinition.Name == Taunted.Name) .Select(a => new { a, rulesetCaster = EffectHelpers.GetCharacterByGuid(a.SourceGuid) }) .Where(t => t.rulesetCaster != null) diff --git a/SolastaUnfinishedBusiness/Models/LightingAndObscurementContext.cs b/SolastaUnfinishedBusiness/Models/LightingAndObscurementContext.cs index 3701e09bac..ff7985ee3b 100644 --- a/SolastaUnfinishedBusiness/Models/LightingAndObscurementContext.cs +++ b/SolastaUnfinishedBusiness/Models/LightingAndObscurementContext.cs @@ -234,9 +234,10 @@ private static bool IsBlindNotFromDarkness(RulesetActor actor) { return actor != null && - actor.AllConditionsForEnumeration + actor.ConditionsByCategory + .SelectMany(x => x.Value) .Select(y => y.ConditionDefinition) - .Any(x => x.IsSubtypeOf(ConditionBlinded.Name) && x != ConditionBlindedByDarkness); + .Any(z => z.IsSubtypeOf(ConditionBlinded.Name) && z != ConditionBlindedByDarkness); } // improved cell perception routine that takes sight into consideration diff --git a/SolastaUnfinishedBusiness/Models/SpellPointsContext.cs b/SolastaUnfinishedBusiness/Models/SpellPointsContext.cs index 784bbaa00a..b347c6ae81 100644 --- a/SolastaUnfinishedBusiness/Models/SpellPointsContext.cs +++ b/SolastaUnfinishedBusiness/Models/SpellPointsContext.cs @@ -253,9 +253,11 @@ void ConsumeSlot(int slot) internal static void ConvertAdditionalSlotsIntoSpellPointsBeforeRefreshSpellRepertoire(RulesetCharacterHero hero) { var usablePower = PowerProvider.Get(PowerSpellPoints, hero); - var activeConditions = hero.AllConditionsForEnumeration.ToList(); - foreach (var activeCondition in activeConditions) + // need ToList to avoid enumerator issues with RemoveCondition + foreach (var activeCondition in hero.ConditionsByCategory + .SelectMany(x => x.Value) + .ToList()) { var removeCondition = false; diff --git a/SolastaUnfinishedBusiness/Models/ToolsContext.cs b/SolastaUnfinishedBusiness/Models/ToolsContext.cs index c23409f0e7..1012074c9c 100644 --- a/SolastaUnfinishedBusiness/Models/ToolsContext.cs +++ b/SolastaUnfinishedBusiness/Models/ToolsContext.cs @@ -279,18 +279,18 @@ private static void TransferConditionsOfCategory(RulesetActor oldHero, RulesetAc newHero.AddConditionCategoryAsNeeded(category); newHero.AllConditions.AddRange(conditions); - newHero.AllConditionsForEnumeration.AddRange(conditions); newHero.ConditionsByCategory[category].AddRange(conditions); } private static void CleanupOldHeroConditions(RulesetCharacterHero oldHero, RulesetCharacterHero newHero) { //Unregister all conditions that are not present in new hero - oldHero.allConditions - .Where(c => !newHero.AllConditions.Contains(c)) + oldHero.ConditionsByCategory + .SelectMany(x => x.Value) + .Where(c => !newHero.ConditionsByCategory.SelectMany(x => x.Value).Contains(c)) + .ToList() .Do(c => c.Unregister()); oldHero.AllConditions.Clear(); - oldHero.AllConditionsForEnumeration.Clear(); oldHero.ConditionsByCategory.Clear(); } diff --git a/SolastaUnfinishedBusiness/Patches/CharacterActionAttackPatcher.cs b/SolastaUnfinishedBusiness/Patches/CharacterActionAttackPatcher.cs index f414d51fb5..5424d6a524 100644 --- a/SolastaUnfinishedBusiness/Patches/CharacterActionAttackPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/CharacterActionAttackPatcher.cs @@ -855,7 +855,8 @@ internal static IEnumerator ExecuteImpl(CharacterActionAttack __instance) rulesetDefender.matchingInterruption = true; rulesetDefender.matchingInterruptionConditions.Clear(); - foreach (var rulesetCondition in rulesetDefender.AllConditionsForEnumeration + foreach (var rulesetCondition in rulesetDefender.ConditionsByCategory + .SelectMany(x => x.Value) .Where(rulesetCondition => rulesetCondition.ConditionDefinition.HasSpecialInterruptionOfType( (ConditionInterruption)ExtraConditionInterruption diff --git a/SolastaUnfinishedBusiness/Patches/CharacterActionMagicEffectPatcher.cs b/SolastaUnfinishedBusiness/Patches/CharacterActionMagicEffectPatcher.cs index 97b23c609b..59202be5b5 100644 --- a/SolastaUnfinishedBusiness/Patches/CharacterActionMagicEffectPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/CharacterActionMagicEffectPatcher.cs @@ -1245,7 +1245,8 @@ private static IEnumerator ExecuteMagicAttack( rulesetTarget.matchingInterruption = true; rulesetTarget.matchingInterruptionConditions.Clear(); - foreach (var rulesetCondition in rulesetTarget.AllConditionsForEnumeration + foreach (var rulesetCondition in rulesetTarget.ConditionsByCategory + .SelectMany(x => x.Value) .Where(rulesetCondition => rulesetCondition.ConditionDefinition.HasSpecialInterruptionOfType( (ConditionInterruption)ExtraConditionInterruption diff --git a/SolastaUnfinishedBusiness/Patches/Considerations/ConsiderationsInfluenceEnemyProximityPatcher.cs b/SolastaUnfinishedBusiness/Patches/Considerations/ConsiderationsInfluenceEnemyProximityPatcher.cs index 7aaa8db5e7..aa3818c48a 100644 --- a/SolastaUnfinishedBusiness/Patches/Considerations/ConsiderationsInfluenceEnemyProximityPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/Considerations/ConsiderationsInfluenceEnemyProximityPatcher.cs @@ -43,7 +43,10 @@ private static void Score( var floatParameter = consideration.FloatParameter; var position = consideration.BoolParameter ? context.position : character.LocationPosition; var numerator = 0.0f; - var approachSourceGuid = rulesetCharacter.AllConditionsForEnumeration.FirstOrDefault(x => + + var approachSourceGuid = rulesetCharacter.ConditionsByCategory + .SelectMany(x => x.Value) + .FirstOrDefault(x => x.ConditionDefinition.Name == consideration.StringParameter)?.SourceGuid ?? 0; // ReSharper disable once ForeachCanBePartlyConvertedToQueryUsingAnotherGetEnumerator diff --git a/SolastaUnfinishedBusiness/Patches/Considerations/ConsiderationsInfluenceFearSourceProximityPatcher.cs b/SolastaUnfinishedBusiness/Patches/Considerations/ConsiderationsInfluenceFearSourceProximityPatcher.cs index 1ce04523d9..064499f3c0 100644 --- a/SolastaUnfinishedBusiness/Patches/Considerations/ConsiderationsInfluenceFearSourceProximityPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/Considerations/ConsiderationsInfluenceFearSourceProximityPatcher.cs @@ -43,8 +43,13 @@ private static void Score( var floatParameter = consideration.FloatParameter; var position = consideration.BoolParameter ? context.position : character.LocationPosition; var numerator = 0.0f; - var approachSourceGuid = rulesetCharacter.AllConditionsForEnumeration.FirstOrDefault(x => - x.ConditionDefinition.Name == consideration.StringParameter)?.SourceGuid ?? 0; + + // prefer enumerate first to save some cycles + rulesetCharacter.GetAllConditions(rulesetCharacter.AllConditionsForEnumeration); + + var approachSourceGuid = rulesetCharacter.AllConditionsForEnumeration + .FirstOrDefault(x => + x.ConditionDefinition.Name == consideration.StringParameter)?.SourceGuid ?? 0; foreach (var rulesetCondition in rulesetCharacter.AllConditionsForEnumeration .Where(rulesetCondition => diff --git a/SolastaUnfinishedBusiness/Patches/CursorLocationSelectTargetPatcher.cs b/SolastaUnfinishedBusiness/Patches/CursorLocationSelectTargetPatcher.cs index 4fad022d5a..7d8e18fc45 100644 --- a/SolastaUnfinishedBusiness/Patches/CursorLocationSelectTargetPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/CursorLocationSelectTargetPatcher.cs @@ -80,9 +80,11 @@ rulesetEffectSpell.EffectDescription.RangeType is not (RangeType.Touch or RangeT .FirstOrDefault(x => x.RulesetCharacter is RulesetCharacterMonster rulesetCharacterMonster && rulesetCharacterMonster.MonsterDefinition.Name == OwlFamiliar && - rulesetCharacterMonster.AllConditionsForEnumeration.Exists(y => - y.ConditionDefinition == ConditionDefinitions.ConditionConjuredCreature && - y.SourceGuid == actingCharacter.Guid)); + rulesetCharacterMonster.ConditionsByCategory + .SelectMany(x => x.Value) + .Exists(y => + y.ConditionDefinition == ConditionDefinitions.ConditionConjuredCreature && + y.SourceGuid == actingCharacter.Guid)); var canAttack = familiar != null && familiar.IsWithinRange(target, 1); diff --git a/SolastaUnfinishedBusiness/Patches/FunctorPatcher.cs b/SolastaUnfinishedBusiness/Patches/FunctorPatcher.cs index 615c7b6496..543a1a3856 100644 --- a/SolastaUnfinishedBusiness/Patches/FunctorPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/FunctorPatcher.cs @@ -42,11 +42,12 @@ public static void Postfix( continue; } - if (!rulesetCharacter.ConditionsByCategory.Values.Select(rulesetConditions => rulesetConditions - .Where(x => x.ConditionDefinition == - DatabaseHelper.ConditionDefinitions.ConditionConjuredCreature) - .Any(x => characterService.PartyCharacters.Any(y => - y.RulesetCharacter.Guid == x.SourceGuid))).Any(found => found)) + if (!rulesetCharacter.ConditionsByCategory + .SelectMany(x => x.Value) + .Where(x => + x.ConditionDefinition == DatabaseHelper.ConditionDefinitions.ConditionConjuredCreature) + .Any(x => characterService.PartyCharacters + .Any(y => y.RulesetCharacter.Guid == x.SourceGuid))) { continue; } diff --git a/SolastaUnfinishedBusiness/Patches/RulesetActorPatcher.cs b/SolastaUnfinishedBusiness/Patches/RulesetActorPatcher.cs index fbd05f842b..b3306b31b4 100644 --- a/SolastaUnfinishedBusiness/Patches/RulesetActorPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/RulesetActorPatcher.cs @@ -1112,12 +1112,14 @@ private static void EnumerateFeatureDefinitionSpellImmunity( Dictionary featuresOrigin) { __instance.EnumerateFeaturesToBrowse(featuresToBrowse, featuresOrigin); + __instance.GetAllConditions(__instance.AllConditionsForEnumeration); // ReSharper disable once ForeachCanBePartlyConvertedToQueryUsingAnotherGetEnumerator foreach (var rulesetCondition in __instance.AllConditionsForEnumeration) { var immunityRemovingFeatures = rulesetCondition.conditionDefinition .GetAllSubFeaturesOfType(); + if (!immunityRemovingFeatures.Any(x => x.IsValid(__instance, rulesetCondition))) { continue; @@ -1152,6 +1154,7 @@ private static void EnumerateFeatureDefinitionSpellImmunityLevel( Dictionary featuresOrigin) { __instance.EnumerateFeaturesToBrowse(featuresToBrowse, featuresOrigin); + __instance.GetAllConditions(__instance.AllConditionsForEnumeration); // ReSharper disable once ForeachCanBePartlyConvertedToQueryUsingAnotherGetEnumerator foreach (var rulesetCondition in __instance.AllConditionsForEnumeration) diff --git a/SolastaUnfinishedBusiness/Patches/RulesetCharacterPatcher.cs b/SolastaUnfinishedBusiness/Patches/RulesetCharacterPatcher.cs index c41befb2da..fd5f5304ba 100644 --- a/SolastaUnfinishedBusiness/Patches/RulesetCharacterPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/RulesetCharacterPatcher.cs @@ -144,15 +144,10 @@ private static void ComputeAttackModifier( } } - __instance.GetAllConditions(__instance.AllConditionsForEnumeration); - - foreach (var rulesetCondition in __instance.AllConditionsForEnumeration) + foreach (var rulesetCondition in __instance.ConditionsByCategory + .SelectMany(x => x.Value) + .Where(x => x.ConditionDefinition.UsesBardicInspirationDie())) { - if (!rulesetCondition.ConditionDefinition.UsesBardicInspirationDie()) - { - continue; - } - foreach (var feature in rulesetCondition.ConditionDefinition.Features) { if (feature is ICombatAffinityProvider affinityProvider) @@ -444,11 +439,14 @@ private static void ProcessConditionsMatchingInterruptionSourceRageStop( .OfType() .ToList()) { - foreach (var rulesetCondition in targetRulesetCharacter.AllConditionsForEnumeration + // need ToList to avoid enumerator issues with RemoveCondition + foreach (var rulesetCondition in targetRulesetCharacter.ConditionsByCategory + .SelectMany(x => x.Value) .Where(x => x.ConditionDefinition.SpecialInterruptions.Contains( (ConditionInterruption)ExtraConditionInterruption.SourceRageStop) && - x.SourceGuid == sourceCharacter.Guid)) + x.SourceGuid == sourceCharacter.Guid) + .ToList()) { targetRulesetCharacter.RemoveCondition(rulesetCondition); diff --git a/SolastaUnfinishedBusiness/Patches/RulesetImplementationManagerLocationPatcher.cs b/SolastaUnfinishedBusiness/Patches/RulesetImplementationManagerLocationPatcher.cs index 0983462ade..d14c0c6281 100644 --- a/SolastaUnfinishedBusiness/Patches/RulesetImplementationManagerLocationPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/RulesetImplementationManagerLocationPatcher.cs @@ -112,7 +112,8 @@ private static void TeleportCharacter( if (Main.Settings.EnableTeleportToRemoveRestrained) { var rulesetCharacter = character.RulesetCharacter; - var conditionsToRemove = rulesetCharacter.AllConditionsForEnumeration + var conditionsToRemove = rulesetCharacter.ConditionsByCategory + .SelectMany(x => x.Value) .Where(x => x.ConditionDefinition.IsSubtypeOf(ConditionRestrained) && (character.Side == Side.Ally || diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs index f8f9adbbec..f07498bd34 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs @@ -1562,7 +1562,8 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, var conditionsToRemove = new List(); var shouldRemove = false; - foreach (var activeCondition in rulesetTarget.AllConditionsForEnumeration + foreach (var activeCondition in rulesetTarget.ConditionsByCategory + .SelectMany(x => x.Value) .Where(activeCondition => conditions.Contains(activeCondition.ConditionDefinition))) { if (activeCondition.SourceGuid == caster.Guid) @@ -2367,8 +2368,10 @@ public EffectDescription GetEffectDescription( RulesetEffect rulesetEffect) { var rulesetCondition = - character.AllConditionsForEnumeration.FirstOrDefault(x => - x.ConditionDefinition == conditionSkinOfRetribution); + character.ConditionsByCategory + .SelectMany(x => x.Value) + .FirstOrDefault(x => + x.ConditionDefinition == conditionSkinOfRetribution); var effectLevel = rulesetCondition!.EffectLevel; var damageForm = effectDescription.FindFirstDamageForm(); diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel04.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel04.cs index 2cc256a496..38071b3a52 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel04.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel04.cs @@ -1592,9 +1592,11 @@ public void OnSavingThrowFinished( return; } - if (!rulesetActorDefender.AllConditionsForEnumeration.Any(x => - x.ConditionDefinition.IsSubtypeOf(ConditionDefinitions.ConditionCharmed.Name) && - x.SourceGuid == rulesetActorCaster?.Guid)) + if (!rulesetActorDefender.ConditionsByCategory + .SelectMany(x => x.Value) + .Any(x => + x.ConditionDefinition.IsSubtypeOf(ConditionDefinitions.ConditionCharmed.Name) && + x.SourceGuid == rulesetActorCaster?.Guid)) { return; } diff --git a/SolastaUnfinishedBusiness/Subclasses/CircleOfTheCosmos.cs b/SolastaUnfinishedBusiness/Subclasses/CircleOfTheCosmos.cs index f1ce4806cb..c54a5fba3f 100644 --- a/SolastaUnfinishedBusiness/Subclasses/CircleOfTheCosmos.cs +++ b/SolastaUnfinishedBusiness/Subclasses/CircleOfTheCosmos.cs @@ -1245,8 +1245,11 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, { var actingCharacter = action.ActingCharacter; var rulesetCharacter = actingCharacter.RulesetCharacter; - var activeCondition = rulesetCharacter.AllConditionsForEnumeration.FirstOrDefault(x => - ConstellationFormConditions.Contains(x.Name)); + + var activeCondition = rulesetCharacter.ConditionsByCategory + .SelectMany(x => x.Value) + .FirstOrDefault(x => + ConstellationFormConditions.Contains(x.Name)); if (activeCondition == null) { diff --git a/SolastaUnfinishedBusiness/Subclasses/CircleOfTheLife.cs b/SolastaUnfinishedBusiness/Subclasses/CircleOfTheLife.cs index b1fe12ab8c..b53912a9fc 100644 --- a/SolastaUnfinishedBusiness/Subclasses/CircleOfTheLife.cs +++ b/SolastaUnfinishedBusiness/Subclasses/CircleOfTheLife.cs @@ -223,9 +223,9 @@ public void OnCharacterTurnStarted(GameLocationCharacter locationCharacter) locationCharacter.UsedSpecialFeatures.Add(VerdancyHealedTag, 1); - foreach (var rulesetCondition in rulesetCharacter.AllConditionsForEnumeration - .Where(x => x.ConditionDefinition.Name is ConditionVerdancy or ConditionVerdancy14) - .ToList()) + foreach (var rulesetCondition in rulesetCharacter.ConditionsByCategory + .SelectMany(x => x.Value) + .Where(x => x.ConditionDefinition.Name is ConditionVerdancy or ConditionVerdancy14)) { var caster = EffectHelpers.GetCharacterByGuid(rulesetCondition.SourceGuid); diff --git a/SolastaUnfinishedBusiness/Subclasses/WayOfTheDiscordance.cs b/SolastaUnfinishedBusiness/Subclasses/WayOfTheDiscordance.cs index 224703d006..eef5220cfc 100644 --- a/SolastaUnfinishedBusiness/Subclasses/WayOfTheDiscordance.cs +++ b/SolastaUnfinishedBusiness/Subclasses/WayOfTheDiscordance.cs @@ -388,7 +388,9 @@ public IEnumerator OnPhysicalAttackFinishedByMe( yield break; } - if (rulesetDefender.AllConditionsForEnumeration.All(x => x.ConditionDefinition != conditionDiscordance)) + if (rulesetDefender.ConditionsByCategory + .SelectMany(x => x.Value) + .All(x => x.ConditionDefinition != conditionDiscordance)) { rulesetDefender.InflictCondition( conditionDiscordance.Name, @@ -469,8 +471,10 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, var targets = action.actionParams.TargetCharacters .Where(x => x.RulesetActor is { IsDeadOrDyingOrUnconscious: false } - && x.RulesetActor.AllConditionsForEnumeration.Count(y => - y.ConditionDefinition == conditionDiscordance) > 1) + && x.RulesetActor.ConditionsByCategory + .SelectMany(y => y.Value) + .Count(z => + z.ConditionDefinition == conditionDiscordance) > 1) .ToList(); var actingCharacter = action.ActingCharacter; diff --git a/SolastaUnfinishedBusiness/Subclasses/WayOfTheStormSoul.cs b/SolastaUnfinishedBusiness/Subclasses/WayOfTheStormSoul.cs index 4dfc678f6c..e14d4ff05f 100644 --- a/SolastaUnfinishedBusiness/Subclasses/WayOfTheStormSoul.cs +++ b/SolastaUnfinishedBusiness/Subclasses/WayOfTheStormSoul.cs @@ -357,9 +357,11 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, var usablePower = PowerProvider.Get(powerEyeOfTheStormLeap, rulesetAttacker); var targets = Gui.Battle.GetContenders(attacker) .Where(x => - x.RulesetActor.AllConditionsForEnumeration - .Any(y => y.ConditionDefinition == conditionEyeOfTheStorm && - y.SourceGuid == rulesetAttacker.Guid)) + x.RulesetActor.ConditionsByCategory + .SelectMany(y => y.Value) + .Any(z => + z.ConditionDefinition == conditionEyeOfTheStorm && + z.SourceGuid == rulesetAttacker.Guid)) .ToArray(); attacker.MyExecuteActionPowerNoCost(usablePower, targets); diff --git a/SolastaUnfinishedBusiness/Subclasses/WayOfTheWealAndWoe.cs b/SolastaUnfinishedBusiness/Subclasses/WayOfTheWealAndWoe.cs index 10e0d68c90..dd57adcde7 100644 --- a/SolastaUnfinishedBusiness/Subclasses/WayOfTheWealAndWoe.cs +++ b/SolastaUnfinishedBusiness/Subclasses/WayOfTheWealAndWoe.cs @@ -161,7 +161,9 @@ public void AfterRoll( } var conditionWealCount = - rulesetCharacter.AllConditionsForEnumeration.Count(x => x.ConditionDefinition == conditionWeal); + rulesetCharacter.ConditionsByCategory + .SelectMany(x => x.Value) + .Count(x => x.ConditionDefinition == conditionWeal); if (result == 1 || result - conditionWealCount > 1) { diff --git a/SolastaUnfinishedBusiness/Validators/ValidatorsCharacter.cs b/SolastaUnfinishedBusiness/Validators/ValidatorsCharacter.cs index bbc30f3bb4..946007a6f7 100644 --- a/SolastaUnfinishedBusiness/Validators/ValidatorsCharacter.cs +++ b/SolastaUnfinishedBusiness/Validators/ValidatorsCharacter.cs @@ -253,7 +253,8 @@ internal static bool IsFreeOffhand(RulesetCharacter character) [MethodImpl(MethodImplOptions.AggressiveInlining)] internal static bool HasConditionWithSubFeatureOfType(this RulesetCharacter character) where T : class { - return character.AllConditionsForEnumeration + return character.ConditionsByCategory + .SelectMany(x => x.Value) .Any(rulesetCondition => rulesetCondition.ConditionDefinition.HasSubFeatureOfType()); } From 99dd0131a0f588cbb24c07b10575e7103c2e3316 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Thu, 12 Sep 2024 15:12:48 -0700 Subject: [PATCH 129/212] add EnablePullPushOnVerticalDirection setting --- .../Api/DatabaseHelper-RELEASE.cs | 1 + .../Behaviors/VerticalPushPullMotion.cs | 6 ++++-- SolastaUnfinishedBusiness/ChangelogHistory.txt | 1 + .../Displays/RulesDisplay.cs | 8 +++++++- .../GameLocationEnvironmentManagerPatcher.cs | 17 +++++++++++------ SolastaUnfinishedBusiness/Settings.cs | 1 + .../Translations/de/Settings-de.txt | 2 ++ .../Translations/en/Settings-en.txt | 3 ++- .../Translations/es/Settings-es.txt | 2 ++ .../Translations/fr/Settings-fr.txt | 2 ++ .../Translations/it/Settings-it.txt | 2 ++ .../Translations/ja/Settings-ja.txt | 2 ++ .../Translations/ko/Settings-ko.txt | 2 ++ .../Translations/pt-BR/Settings-pt-BR.txt | 2 ++ .../Translations/ru/Settings-ru.txt | 2 ++ .../Translations/zh-CN/Settings-zh-CN.txt | 2 ++ 16 files changed, 45 insertions(+), 10 deletions(-) diff --git a/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs b/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs index e48b7bb12e..7d58ede0e6 100644 --- a/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs +++ b/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs @@ -30,6 +30,7 @@ internal static class ActionDefinitions internal static ActionDefinition CastMain { get; } = GetDefinition("CastMain"); internal static ActionDefinition CastBonus { get; } = GetDefinition("CastBonus"); internal static ActionDefinition CastInvocation { get; } = GetDefinition("CastInvocation"); + internal static ActionDefinition CastNoCost { get; } = GetDefinition("CastNoCost"); internal static ActionDefinition DashBonus { get; } = GetDefinition("DashBonus"); internal static ActionDefinition ReapplyEffect { get; } = GetDefinition("ReapplyEffect"); internal static ActionDefinition SpiritRage { get; } = GetDefinition("SpiritRage"); diff --git a/SolastaUnfinishedBusiness/Behaviors/VerticalPushPullMotion.cs b/SolastaUnfinishedBusiness/Behaviors/VerticalPushPullMotion.cs index d9f6683e14..d1c1f2536e 100644 --- a/SolastaUnfinishedBusiness/Behaviors/VerticalPushPullMotion.cs +++ b/SolastaUnfinishedBusiness/Behaviors/VerticalPushPullMotion.cs @@ -16,8 +16,8 @@ public static bool ComputePushDestination( int distance, bool reverse, IGameLocationPositioningService positioningService, - out int3 destination, - out Vector3 step) + ref int3 destination, + ref Vector3 step) { var targetCenter = new Vector3(); positioningService.ComputeGravityCenterPosition(target, ref targetCenter); @@ -78,10 +78,12 @@ public static bool ComputePushDestination( } //TODO: remove after testing +#if DEBUG var dir = reverse ? "Pull" : "Push"; Main.Log( $"{dir} [{target.Name}] {distance}\u25ce applied: {result}, source: {sourceCenter}, target: {targetCenter}, destination: {destination}", true); +#endif return result; } diff --git a/SolastaUnfinishedBusiness/ChangelogHistory.txt b/SolastaUnfinishedBusiness/ChangelogHistory.txt index 7827dc466a..75386ca967 100644 --- a/SolastaUnfinishedBusiness/ChangelogHistory.txt +++ b/SolastaUnfinishedBusiness/ChangelogHistory.txt @@ -1,6 +1,7 @@ 1.5.97.30: - added Command, Dissonant Whispers, Holy Weapon, and Swift Quiver spells +- added Character > Rules > 'Enable push and pull motion effects to also work on up/down axis' setting - added Interface > Game UI > 'Enable CTRL click-drag to bypass quest items checks on drop' setting - fixed Barbarian Sundering Blow interaction with Call Lightning, and other attack proxies - fixed Bardic Inspiration, Indomitable Resistances, and Legendary Resistances save logic diff --git a/SolastaUnfinishedBusiness/Displays/RulesDisplay.cs b/SolastaUnfinishedBusiness/Displays/RulesDisplay.cs index 061442d5f8..a3de8f3d70 100644 --- a/SolastaUnfinishedBusiness/Displays/RulesDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/RulesDisplay.cs @@ -206,7 +206,7 @@ internal static void DisplayRules() { Main.Settings.EnableSorcererQuickenedAction = toggle; } - + if (Main.Settings.EnableSorcererQuickenedAction) { toggle = Main.Settings.HideQuickenedActionWhenMetamagicOff; @@ -540,6 +540,12 @@ internal static void DisplayRules() Main.Settings.EnableHigherGroundRules = toggle; } + toggle = Main.Settings.EnablePullPushOnVerticalDirection; + if (UI.Toggle(Gui.Localize("ModUi/&EnablePullPushOnVerticalDirection"), ref toggle, UI.AutoWidth())) + { + Main.Settings.EnablePullPushOnVerticalDirection = toggle; + } + toggle = Main.Settings.EnableTeleportToRemoveRestrained; if (UI.Toggle(Gui.Localize("ModUi/&EnableTeleportToRemoveRestrained"), ref toggle, UI.AutoWidth())) { diff --git a/SolastaUnfinishedBusiness/Patches/GameLocationEnvironmentManagerPatcher.cs b/SolastaUnfinishedBusiness/Patches/GameLocationEnvironmentManagerPatcher.cs index c164175a10..f154aebad4 100644 --- a/SolastaUnfinishedBusiness/Patches/GameLocationEnvironmentManagerPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/GameLocationEnvironmentManagerPatcher.cs @@ -116,19 +116,24 @@ public static IEnumerable Transpiler([NotNull] IEnumerableMönch [Neustart erforderlich] ModUi/&EnableOneDndHealingSpellsBuf=Aktiviere den OneDnd-Heilwürfel-Buf für Wunden heilen, Heilendes Wort, Massenhafte Wunden heilen und Massenhaftes Heilendes Wort ModUi/&EnablePcgRandom=Aktivieren Sie einen besseren Zufallsgenerator-Algorithmus [https://www.pcg-random.org] +ModUi/&EnablePullPushOnVerticalDirection=Aktivieren Sie Push- und Pull-Bewegungseffekte, damit diese auch auf der Auf-/Ab-Achse funktionieren ModUi/&EnableRangerNatureShroudAt10=Aktiviere die Funktion Waldläufer Naturschleier auf Stufe 10 [als Bonusaktion kannst du bis zum Beginn der nächsten Runde auf magische Weise unsichtbar werden ] ModUi/&EnableRejoinParty=Aktivieren Sie STRG-UMSCHALT-(R), um sich der Gruppe um den ausgewählten Helden oder den Anführer wieder anzuschließen, wenn keiner ausgewählt ist [nützlich bei Gruppen von 5 oder 6 Personen ] ModUi/&EnableRelearnSpells=Aktivieren Sie die Auswahl von Cantrips oder Zaubersprüchen, die bereits aus anderen Quellen gelernt wurden @@ -208,6 +209,7 @@ ModUi/&GrantScimitarSpecializationToBarkMonkRogue=Gewähre Waffenspezialisier ModUi/&GridSelectedColor=Ändern Sie die Bewegung Gitterfarbe ModUi/&HideExitAndTeleporterGizmosIfNotDiscovered=Verstecke die visuellen Effekte von Ausgängen und Teleportern, falls sie noch nicht entdeckt wurden ModUi/&HideMonsterHitPoints=Zeigt die Gesundheit der Monster in Schritten von 25 % / 50 % / 75 % / 100 % anstelle der genauen Trefferpunkte an +ModUi/&HideQuickenedActionWhenMetamagicOff=+ Diese Aktion verbergen, wenn die Metamagie-Umschaltung ausgeschaltet ist ModUi/&HighContrastTargetingAoeColor=AoE-Kreaturen ändern Farbe auswählen ModUi/&HighContrastTargetingSingleColor=Einzelne Kreaturen ändern Farbe auswählen ModUi/&House=Haus: diff --git a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt index c0869048a8..b5cc2563e1 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt @@ -153,6 +153,7 @@ ModUi/&EnableMonkWeaponSpecialization=Enable Monk Weap ModUi/&EnableMulticlass=Enable multiclass [Requires Restart] ModUi/&EnableOneDndHealingSpellsBuf=Enable OneDnd healing dice buff on Cure Wounds, Healing Word, Mass Cure Wounds, and Mass Healing Word ModUi/&EnablePcgRandom=Enable a better random generator algorithm [https://www.pcg-random.org] +ModUi/&EnablePullPushOnVerticalDirection=Enable push and pull motion effects to also work on up/down axis ModUi/&EnableRangerNatureShroudAt10=Enable Ranger Nature's Veil feature at level 10 [as a bonus action, you can magically become invisible until start of next turn] ModUi/&EnableRejoinParty=Enable CTRL-SHIFT-(R) to rejoin the party around the selected hero or the leader if none is selected [useful with parties of 5 or 6] ModUi/&EnableRelearnSpells=Enable selection of cantrips or spells already learned from other sources @@ -208,7 +209,7 @@ ModUi/&GrantScimitarSpecializationToBarkMonkRogue=Grant Scimitar Weapon Speci ModUi/&GridSelectedColor=Change the movement grid color ModUi/&HideExitAndTeleporterGizmosIfNotDiscovered=Hide exits and teleporters visual effects if not discovered yet ModUi/&HideMonsterHitPoints=Display Monsters' health in steps of 25% / 50% / 75% / 100% instead of exact hit points -ModUi/&HideQuickenedActionWhenMetamagicOff=+ Hide this action when metamagic is toggled off +ModUi/&HideQuickenedActionWhenMetamagicOff=+ Hide this action when metamagic toggle is off ModUi/&HighContrastTargetingAoeColor=Change AoE creatures highlight select color ModUi/&HighContrastTargetingSingleColor=Change single creatures highlight select color ModUi/&House=House: diff --git a/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt b/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt index 9694e2b808..9e61feb7d9 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt @@ -153,6 +153,7 @@ ModUi/&EnableMonkWeaponSpecialization=Habilita Monje E ModUi/&EnableMulticlass=Habilitar multiclase [Requiere reinicio] ModUi/&EnableOneDndHealingSpellsBuf=Habilite la mejora de dados de curación OneDnd en Curar heridas, Palabra de curación, Curar heridas en masa y Palabra de sanación masiva ModUi/&EnablePcgRandom=Habilite un mejor algoritmo generador aleatorio [https://www.pcg-random.org] +ModUi/&EnablePullPushOnVerticalDirection=Habilite los efectos de movimiento de empujar y tirar para que funcionen también en el eje arriba/abajo ModUi/&EnableRangerNatureShroudAt10=Activa la función Ranger Velo de la Naturaleza en el nivel 10 [como acción adicional, puedes volverte invisible mágicamente hasta el comienzo del siguiente turno. ] ModUi/&EnableRejoinParty=Habilite CTRL-SHIFT-(R) para volver a unirse al grupo alrededor del héroe seleccionado o del líder si no se selecciona ninguno [útil con grupos de 5 o 6 ] ModUi/&EnableRelearnSpells=Habilitar la selección de trucos o hechizos ya aprendidos de otras fuentes. @@ -208,6 +209,7 @@ ModUi/&GrantScimitarSpecializationToBarkMonkRogue=Otorga especialización en ModUi/&GridSelectedColor=Cambiar el movimiento color de la cuadrícula ModUi/&HideExitAndTeleporterGizmosIfNotDiscovered=Ocultar salidas y efectos visuales de teletransportadores si aún no se han descubierto ModUi/&HideMonsterHitPoints=Muestra la salud de los monstruos en pasos de 25% / 50% / 75% / 100% en lugar de puntos de vida exactos. +ModUi/&HideQuickenedActionWhenMetamagicOff=+ Ocultar esta acción cuando la opción metamágica esté desactivada ModUi/&HighContrastTargetingAoeColor=Cambiar criaturas AoE resaltar seleccionar color ModUi/&HighContrastTargetingSingleColor=Cambiar criaturas individuales resaltar seleccionar color ModUi/&House=Casa: diff --git a/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt index 59976f0292..80cfa0aae4 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt @@ -153,6 +153,7 @@ ModUi/&EnableMonkWeaponSpecialization=Activez la Moine [Nécessite un redémarrage] ModUi/&EnableOneDndHealingSpellsBuf=Activez le bonus des dés de guérison OneDnd sur Cure Wounds, Healing Word, Mass Cure Wounds et Mot de guérison de masse ModUi/&EnablePcgRandom=Activer un meilleur algorithme de générateur aléatoire [https://www.pcg-random.org] +ModUi/&EnablePullPushOnVerticalDirection=Activez les effets de mouvement de poussée et de traction pour qu'ils fonctionnent également sur l'axe haut/bas ModUi/&EnableRangerNatureShroudAt10=Activez la fonctionnalité Ranger Voile de la nature au niveau 10 [en tant qu'action bonus, vous pouvez devenir invisible par magie jusqu'au début du prochain tour. ] ModUi/&EnableRejoinParty=Activez CTRL-SHIFT-(R) pour rejoindre le groupe autour du héros sélectionné ou du chef si aucun n'est sélectionné [utile avec des groupes de 5 ou 6 personnes ] ModUi/&EnableRelearnSpells=Activer la sélection de cantrips ou de sorts déjà appris à partir d'autres sources @@ -208,6 +209,7 @@ ModUi/&GrantScimitarSpecializationToBarkMonkRogue=Accordez la spécialisation ModUi/&GridSelectedColor=Changer la couleur de la grille du mouvement ModUi/&HideExitAndTeleporterGizmosIfNotDiscovered=Masquer les effets visuels des sorties et des téléporteurs s'ils ne sont pas encore découverts ModUi/&HideMonsterHitPoints=Afficher la santé des monstres par incréments de 25 %/50 %/75 %/100 % au lieu des points de vie exacts +ModUi/&HideQuickenedActionWhenMetamagicOff=+ Masquer cette action lorsque la bascule métamagique est désactivée ModUi/&HighContrastTargetingAoeColor=Changer les créatures AoE surligner la couleur sélectionnée ModUi/&HighContrastTargetingSingleColor=Changer des créatures uniques surligner la couleur sélectionnée ModUi/&House=Maison : diff --git a/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt b/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt index a1a18adda2..a50ec74ee7 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt @@ -153,6 +153,7 @@ ModUi/&EnableMonkWeaponSpecialization=Abilita Monaco s ModUi/&EnableMulticlass=Abilita multiclasse [Richiede il riavvio] ModUi/&EnableOneDndHealingSpellsBuf=Abilita il potenziamento dei dadi di guarigione OneDnd su Cura ferite, Parola curativa, Cura ferite di massa e Parola di guarigione di massa ModUi/&EnablePcgRandom=Abilita un algoritmo di generazione casuale migliore [https://www.pcg-random.org] +ModUi/&EnablePullPushOnVerticalDirection=Abilita gli effetti di movimento push e pull per funzionare anche sull'asse su/giù ModUi/&EnableRangerNatureShroudAt10=Abilita la funzione Ranger Velo della Natura al livello 10 [come azione bonus, puoi diventare magicamente invisibile fino all'inizio del turno successivo ] ModUi/&EnableRejoinParty=Abilita CTRL-MAIUSC-(R) per unirsi al gruppo attorno all'eroe selezionato o al leader se non è selezionato nessuno [utile con gruppi di 5 o 6 ] ModUi/&EnableRelearnSpells=Abilita la selezione di trucchetti o incantesimi già appresi da altre fonti @@ -208,6 +209,7 @@ ModUi/&GrantScimitarSpecializationToBarkMonkRogue=Concede la specializzazione ModUi/&GridSelectedColor=Cambia il colore della griglia del movimento ModUi/&HideExitAndTeleporterGizmosIfNotDiscovered=Nascondi gli effetti visivi delle uscite e del teletrasporto se non ancora scoperti ModUi/&HideMonsterHitPoints=Visualizza la salute dei mostri in incrementi del 25%/50%/75%/100% anziché i punti ferita esatti +ModUi/&HideQuickenedActionWhenMetamagicOff=+ Nascondi questa azione quando l'interruttore metamagia è disattivato ModUi/&HighContrastTargetingAoeColor=Cambia le creature AoE evidenzia seleziona colore ModUi/&HighContrastTargetingSingleColor=Cambia singole creature evidenzia seleziona colore ModUi/&House=Casa: diff --git a/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt index da36f7ec06..c6adfc0db3 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt @@ -153,6 +153,7 @@ ModUi/&EnableMonkWeaponSpecialization=レベル 2 と 11 でモ ModUi/&EnableMulticlass=マルチクラス [再起動が必要] を有効にする ModUi/&EnableOneDndHealingSpellsBuf=Cure Wounds、Healing Word、Mass Cure Wounds、Mass Healing Word で OneDnd ヒーリング ダイス バッファーを有効にします。 ModUi/&EnablePcgRandom=より優れたランダム生成アルゴリズムを有効にする [https://www.pcg-random.org] +ModUi/&EnablePullPushOnVerticalDirection=プッシュとプルのモーション効果を上下軸でも有効にします ModUi/&EnableRangerNatureShroudAt10=レンジャー の自然のベール機能をレベル 10 で有効にします[ボーナス アクションとして、次のターンの開始時まで魔法のように透明になることができます。 ] ModUi/&EnableRejoinParty=CTRL-SHIFT-(R) を有効にすると、何も選択されていない場合、選択したヒーローまたはリーダーを中心としたパーティーに再参加できます[5 人または 6 人のパーティーで便利です] ] ModUi/&EnableRelearnSpells=他のソースからすでに学習したキャントリップまたは呪文の選択を有効にする @@ -208,6 +209,7 @@ ModUi/&GrantScimitarSpecializationToBarkMonkRogue=吟遊詩人グリッドの色を変更します。 ModUi/&HideExitAndTeleporterGizmosIfNotDiscovered=まだ発見されていない場合は、出口とテレポーターの視覚効果を非表示にします ModUi/&HideMonsterHitPoints=正確なヒットポイントではなく、モンスターの体力を 25% / 50% / 75% / 100% の段階で表示します +ModUi/&HideQuickenedActionWhenMetamagicOff=+ メタマジックトグルがオフのときはこのアクションを非表示にする ModUi/&HighContrastTargetingAoeColor=範囲クリーチャーを変更する選択した色をハイライト表示 ModUi/&HighContrastTargetingSingleColor=単一のクリーチャーを変更する選択した色をハイライト表示 ModUi/&House=家: diff --git a/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt index 7a0519d2fe..913ea3dcca 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt @@ -153,6 +153,7 @@ ModUi/&EnableMonkWeaponSpecialization=레벨 2와 11에서 몽크 ModUi/&EnableMulticlass=멀티클래스 활성화 [다시 시작 필요] ModUi/&EnableOneDndHealingSpellsBuf=상처 치료, 치유의 말씀, 상처 대량 치료 및 대량 치유의 말씀 ModUi/&EnablePcgRandom=더 나은 무작위 생성기 알고리즘 활성화 [https://www.pcg-random.org] +ModUi/&EnablePullPushOnVerticalDirection=위/아래 축에서도 푸시 및 풀 모션 효과를 작동하도록 설정 ModUi/&EnableRangerNatureShroudAt10=레벨 10에서 레인저 자연의 장막 기능을 활성화하세요. [보너스 액션으로 다음 턴이 시작될 때까지 마법처럼 투명해질 수 있습니다 ] ModUi/&EnableRejoinParty=CTRL-SHIFT-(R)을 활성화하면 선택한 영웅이나 리더를 중심으로 파티에 다시 합류할 수 있습니다. [5인 또는 6인 파티에 유용합니다. ] ModUi/&EnableRelearnSpells=다른 소스에서 이미 배운 캔트립이나 주문 선택 활성화 @@ -208,6 +209,7 @@ ModUi/&GrantScimitarSpecializationToBarkMonkRogue=음유시인그리드 색상 이동 변경 ModUi/&HideExitAndTeleporterGizmosIfNotDiscovered=아직 발견되지 않은 경우 출구 및 텔레포터 시각 효과 숨기기 ModUi/&HideMonsterHitPoints=정확한 체력 대신 몬스터의 체력을 25% / 50% / 75% / 100% 단계로 표시합니다. +ModUi/&HideQuickenedActionWhenMetamagicOff=+ 메타매직 토글이 꺼져 있을 때 이 동작을 숨깁니다. ModUi/&HighContrastTargetingAoeColor=AoE 생물 변경 선택 색상 강조 표시 ModUi/&HighContrastTargetingSingleColor=단일 생물 변경 선택 색상 강조 표시 ModUi/&House=집: diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt index a62930e861..8a73d310f9 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt @@ -153,6 +153,7 @@ ModUi/&EnableMonkWeaponSpecialization=Habilite Monk Es ModUi/&EnableMulticlass=Ativar multiclasse [Requer reinicialização] ModUi/&EnableOneDndHealingSpellsBuf=Ative o bônus de dados de cura OneDnd em Curar Feridas, Palavra de Cura, Curar Feridas em Massa e Palavra de Cura em Massa ModUi/&EnablePcgRandom=Habilite um algoritmo gerador aleatório melhor [https://www.pcg-random.org] +ModUi/&EnablePullPushOnVerticalDirection=Habilitar efeitos de movimento de empurrar e puxar para também funcionarem no eixo para cima/baixo ModUi/&EnableRangerNatureShroudAt10=Habilite o recurso Ranger Nature's Veil no nível 10 [como uma ação bônus, você pode ficar invisível magicamente até o início do próximo turno ] ModUi/&EnableRejoinParty=Ative CTRL-SHIFT-(R) para voltar ao grupo em torno do herói ou líder selecionado se nenhum estiver selecionado [útil com grupos de 5 ou 6 ] ModUi/&EnableRelearnSpells=Habilite a seleção de truques ou feitiços já aprendidos de outras fontes @@ -208,6 +209,7 @@ ModUi/&GrantScimitarSpecializationToBarkMonkRogue=Conceda especialização em ModUi/&GridSelectedColor=Alterar a cor da grade do movimento ModUi/&HideExitAndTeleporterGizmosIfNotDiscovered=Ocultar efeitos visuais de saídas e teletransportadores se ainda não forem descobertos ModUi/&HideMonsterHitPoints=Exibe a saúde dos monstros em passos de 25% / 50% / 75% / 100% em vez dos pontos de vida exatos +ModUi/&HideQuickenedActionWhenMetamagicOff=+ Ocultar esta ação quando a alternância de metamagia estiver desligada ModUi/&HighContrastTargetingAoeColor=Alterar criaturas AoE destaque e selecione cor ModUi/&HighContrastTargetingSingleColor=Alterar criaturas únicas destacar cor e selecionar ModUi/&House=Casa: diff --git a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt index 01932ec3a2..ef9f019190 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt @@ -153,6 +153,7 @@ ModUi/&EnableMonkWeaponSpecialization=Включить Специализац ModUi/&EnableMulticlass=Включить мультиклассирование [Необходим перезапуск] ModUi/&EnableOneDndHealingSpellsBuf=Включить улучшение костей лечения из OneDnd для Лечения ран, Лечащего слова, Множественного лечения ран и Множественного лечащего слова ModUi/&EnablePcgRandom=Включить улучшенный алгоритм генерации случайных чисел [https://www.pcg-random.org] +ModUi/&EnablePullPushOnVerticalDirection=Включить эффекты движения «толкать» и «тянуть» для работы по осям вверх/вниз ModUi/&EnableRangerNatureShroudAt10=Включить умение Следопыта Природная завеса на уровне 10 [бонусным действием вы можете волшебным образом стать невидимым до начала следующего хода] ModUi/&EnableRejoinParty=Включить принудительную группировку персонажей вокруг выбранного героя или лидера, если никто не выбран, по нажатию CTRL-SHIFT-(R) [полезно в пати из 5 или 6 персонажей] ModUi/&EnableRelearnSpells=Включить возможность выбирать заговоры или заклинания, уже известные из других источников @@ -208,6 +209,7 @@ ModUi/&GrantScimitarSpecializationToBarkMonkRogue=Дать Специализ ModUi/&GridSelectedColor=Изменить цвет сетки перемещения ModUi/&HideExitAndTeleporterGizmosIfNotDiscovered=Скрыть визуальные эффекты выходов и телепортов, если они ещё не открыты ModUi/&HideMonsterHitPoints=Отображать здоровье противников в относительных 25% / 50% / 75% / 100% вместо точных значений хитов +ModUi/&HideQuickenedActionWhenMetamagicOff=+ Скрыть это действие, когда переключатель метамагии выключен ModUi/&HighContrastTargetingAoeColor=Изменить цвет подсветки эффектов по площади ModUi/&HighContrastTargetingSingleColor=Изменить цвет подсветки цели ModUi/&House=Домашние правила: diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt index 9285f457d8..99480fa18c 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt @@ -153,6 +153,7 @@ ModUi/&EnableMonkWeaponSpecialization=在武僧 2 级和 ModUi/&EnableMulticlass=启用兼职[需要重启] ModUi/&EnableOneDndHealingSpellsBuf=在疗伤术、治愈真言、群体疗伤术和群体治愈真言上启用 OneDnd 治疗骰增益 ModUi/&EnablePcgRandom=启用更好的随机数算法[https://www.pcg-random.org] +ModUi/&EnablePullPushOnVerticalDirection=使推拉运动效果也适用于上/下轴 ModUi/&EnableRangerNatureShroudAt10=在游侠 10 级启用自然面纱特性[作为附赠动作,你可以魔法地变得隐形,直到下回合开始] ModUi/&EnableRejoinParty=启用CTRL-SHIFT-(R)重新加入所选英雄或领导者周围的队伍(如果未选择)[适用于 5 人或 6 人的队伍] ModUi/&EnableRelearnSpells=+可以选择其他职业已经学过的戏法或法术 @@ -208,6 +209,7 @@ ModUi/&GrantScimitarSpecializationToBarkMonkRogue=为吟游诗人 ModUi/&GridSelectedColor=更改移动网格颜色 ModUi/&HideExitAndTeleporterGizmosIfNotDiscovered=如果尚未发现,则隐藏出口和传送器视觉效果 ModUi/&HideMonsterHitPoints=以25%/50%/75%/100%的步骤显示怪物的生命值,而不是准确生命值 +ModUi/&HideQuickenedActionWhenMetamagicOff=+ 当 metamagic 切换关闭时隐藏此操作 ModUi/&HighContrastTargetingAoeColor=更改 AoE 生物突出显示选择颜色 ModUi/&HighContrastTargetingSingleColor=更改单个生物突出显示选择颜色 ModUi/&House=房规: From a7c507ef59c84fe87ceb949783b09bb44fa3ccb5 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Thu, 12 Sep 2024 15:45:36 -0700 Subject: [PATCH 130/212] fix Seize the Chance reaction terms --- .../Translations/de/SubClasses/RoguishOpportunist-de.txt | 8 ++++---- .../Translations/en/SubClasses/RoguishOpportunist-en.txt | 8 ++++---- .../Translations/es/SubClasses/RoguishOpportunist-es.txt | 8 ++++---- .../Translations/fr/SubClasses/RoguishOpportunist-fr.txt | 8 ++++---- .../Translations/it/SubClasses/RoguishOpportunist-it.txt | 8 ++++---- .../Translations/ja/SubClasses/RoguishOpportunist-ja.txt | 8 ++++---- .../Translations/ko/SubClasses/RoguishOpportunist-ko.txt | 8 ++++---- .../pt-BR/SubClasses/RoguishOpportunist-pt-BR.txt | 8 ++++---- .../Translations/ru/SubClasses/RoguishOpportunist-ru.txt | 8 ++++---- .../zh-CN/SubClasses/RoguishOpportunist-zh-CN.txt | 8 ++++---- 10 files changed, 40 insertions(+), 40 deletions(-) diff --git a/SolastaUnfinishedBusiness/Translations/de/SubClasses/RoguishOpportunist-de.txt b/SolastaUnfinishedBusiness/Translations/de/SubClasses/RoguishOpportunist-de.txt index 93d8e91ff8..71d71449ba 100644 --- a/SolastaUnfinishedBusiness/Translations/de/SubClasses/RoguishOpportunist-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/SubClasses/RoguishOpportunist-de.txt @@ -14,10 +14,10 @@ Feature/&PowerRoguishOpportunistExposedWeaknessDescription=Ab der 17. Stufe sind Feature/&PowerRoguishOpportunistExposedWeaknessTitle=Offengelegte Schwäche Feature/&PowerRoguishOpportunistImprovedDebilitatingStrikeDescription=Ab der 13. Stufe muss eine Kreatur, wenn Sie sie heimlich angreifen, einen Rettungswurf für Konstitution bestehen (DC 8 + Kompetenzbonus + Geschicklichkeitsmodifikator) oder ihre Bewegungsgeschwindigkeit wird um 10 Fuß reduziert und sie muss alle Rettungswürfe mit einer Strafe von –1W6 bis zum Ende Ihres nächsten Zuges würfeln. Feature/&PowerRoguishOpportunistImprovedDebilitatingStrikeTitle=Verbesserter schwächender Schlag -Reaction/&SeizeTheChanceDescription=Ein Gegner hat einen Rettungswurf nicht geschafft. Sie können Ihre Reaktion für einen Gelegenheitsangriff nutzen. -Reaction/&SeizeTheChanceReactDescription=Ein Gegner hat einen Rettungswurf nicht geschafft. Sie können Ihre Reaktion für einen Gelegenheitsangriff nutzen. -Reaction/&SeizeTheChanceReactTitle=Nutze die Chance -Reaction/&SeizeTheChanceTitle=Nutze die Chance +Reaction/&ReactionAttackSeizeTheChanceDescription=Ein Gegner hat einen Rettungswurf nicht geschafft. Sie können Ihre Reaktion für einen Gelegenheitsangriff nutzen. +Reaction/&ReactionAttackSeizeTheChanceReactDescription=Ein Gegner hat einen Rettungswurf nicht geschafft. Sie können Ihre Reaktion für einen Gelegenheitsangriff nutzen. +Reaction/&ReactionAttackSeizeTheChanceReactTitle=Nutze die Chance +Reaction/&ReactionAttackSeizeTheChanceTitle=Nutze die Chance Reaction/&SubitemSelectSeizeTheChanceTitle=Nutze die Chance Subclass/&RoguishOpportunistDescription=Opportunisten sind diejenigen, die sich keine Chance entgehen lassen, ihren Feinden den Garaus zu machen. Sie stechen schnell und genau dort zu, wo es darauf ankommt. Nicht viele, die ihnen gegenüberstehen, kommen unbeschadet davon. Subclass/&RoguishOpportunistTitle=Opportunist diff --git a/SolastaUnfinishedBusiness/Translations/en/SubClasses/RoguishOpportunist-en.txt b/SolastaUnfinishedBusiness/Translations/en/SubClasses/RoguishOpportunist-en.txt index 345c853853..93d9d8cfc9 100644 --- a/SolastaUnfinishedBusiness/Translations/en/SubClasses/RoguishOpportunist-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/SubClasses/RoguishOpportunist-en.txt @@ -14,10 +14,10 @@ Feature/&PowerRoguishOpportunistExposedWeaknessDescription=Starting at 17th leve Feature/&PowerRoguishOpportunistExposedWeaknessTitle=Exposed Weakness Feature/&PowerRoguishOpportunistImprovedDebilitatingStrikeDescription=Starting at 13th level, whenever you sneak attack a creature, that creature must pass a Constitution saving throw (DC 8 + proficiency bonus + Dexterity modifier) or have the movement speed reduced by 10 ft, and roll all saving throws with –1d6 penalty until the end of your next turn. Feature/&PowerRoguishOpportunistImprovedDebilitatingStrikeTitle=Improved Debilitating Strike -Reaction/&SeizeTheChanceDescription=An enemy failed a saving throw. You can use your reaction to make an attack of opportunity. -Reaction/&SeizeTheChanceReactDescription=An enemy failed a saving throw. You can use your reaction to make an attack of opportunity. -Reaction/&SeizeTheChanceReactTitle=Seize the Chance -Reaction/&SeizeTheChanceTitle=Seize the Chance +Reaction/&ReactionAttackSeizeTheChanceDescription=An enemy failed a saving throw. You can use your reaction to make an attack of opportunity. +Reaction/&ReactionAttackSeizeTheChanceReactDescription=An enemy failed a saving throw. You can use your reaction to make an attack of opportunity. +Reaction/&ReactionAttackSeizeTheChanceReactTitle=Seize the Chance +Reaction/&ReactionAttackSeizeTheChanceTitle=Seize the Chance Reaction/&SubitemSelectSeizeTheChanceTitle=Seize the Chance Subclass/&RoguishOpportunistDescription=Opportunist are those who never let a chance to finish their enemies slide. They stab fast and stab where it matters. Not many facing them can escape unscratched. Subclass/&RoguishOpportunistTitle=Opportunist diff --git a/SolastaUnfinishedBusiness/Translations/es/SubClasses/RoguishOpportunist-es.txt b/SolastaUnfinishedBusiness/Translations/es/SubClasses/RoguishOpportunist-es.txt index e31b9df173..1538b24969 100644 --- a/SolastaUnfinishedBusiness/Translations/es/SubClasses/RoguishOpportunist-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/SubClasses/RoguishOpportunist-es.txt @@ -14,10 +14,10 @@ Feature/&PowerRoguishOpportunistExposedWeaknessDescription=A partir del nivel 17 Feature/&PowerRoguishOpportunistExposedWeaknessTitle=Debilidad expuesta Feature/&PowerRoguishOpportunistImprovedDebilitatingStrikeDescription=A partir del nivel 13, siempre que realices un ataque furtivo contra una criatura, esa criatura debe pasar una tirada de salvación de Constitución (CD 8 + bonificador de competencia + modificador de Destreza) o ver reducida su velocidad de movimiento en 10 pies, y realizar todas las tiradas de salvación con una penalización de -1d6 hasta el final de tu siguiente turno. Feature/&PowerRoguishOpportunistImprovedDebilitatingStrikeTitle=Golpe debilitante mejorado -Reaction/&SeizeTheChanceDescription=Un enemigo ha fallado una tirada de salvación. Puedes usar tu reacción para realizar un ataque de oportunidad. -Reaction/&SeizeTheChanceReactDescription=Un enemigo ha fallado una tirada de salvación. Puedes usar tu reacción para realizar un ataque de oportunidad. -Reaction/&SeizeTheChanceReactTitle=Aprovecha la oportunidad -Reaction/&SeizeTheChanceTitle=Aprovecha la oportunidad +Reaction/&ReactionAttackSeizeTheChanceDescription=Un enemigo ha fallado una tirada de salvación. Puedes usar tu reacción para realizar un ataque de oportunidad. +Reaction/&ReactionAttackSeizeTheChanceReactDescription=Un enemigo ha fallado una tirada de salvación. Puedes usar tu reacción para realizar un ataque de oportunidad. +Reaction/&ReactionAttackSeizeTheChanceReactTitle=Aprovecha la oportunidad +Reaction/&ReactionAttackSeizeTheChanceTitle=Aprovecha la oportunidad Reaction/&SubitemSelectSeizeTheChanceTitle=Aprovecha la oportunidad Subclass/&RoguishOpportunistDescription=Los oportunistas son aquellos que nunca dejan pasar la oportunidad de acabar con sus enemigos. Apuñalan rápido y donde importa. No muchos de los que se enfrentan a ellos pueden escapar ilesos. Subclass/&RoguishOpportunistTitle=Oportunista diff --git a/SolastaUnfinishedBusiness/Translations/fr/SubClasses/RoguishOpportunist-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/SubClasses/RoguishOpportunist-fr.txt index fd219c7de5..0e9615a799 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/SubClasses/RoguishOpportunist-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/SubClasses/RoguishOpportunist-fr.txt @@ -14,10 +14,10 @@ Feature/&PowerRoguishOpportunistExposedWeaknessDescription=À partir du niveau 1 Feature/&PowerRoguishOpportunistExposedWeaknessTitle=Faiblesse exposée Feature/&PowerRoguishOpportunistImprovedDebilitatingStrikeDescription=À partir du niveau 13, chaque fois que vous attaquez sournoisement une créature, cette créature doit réussir un jet de sauvegarde de Constitution (DD 8 + bonus de maîtrise + modificateur de Dextérité) ou voir sa vitesse de déplacement réduite de 3 m, et lancer tous ses jets de sauvegarde avec une pénalité de -1d6 jusqu'à la fin de votre prochain tour. Feature/&PowerRoguishOpportunistImprovedDebilitatingStrikeTitle=Frappe débilitante améliorée -Reaction/&SeizeTheChanceDescription=Un ennemi a raté son jet de sauvegarde. Vous pouvez utiliser votre réaction pour effectuer une attaque d'opportunité. -Reaction/&SeizeTheChanceReactDescription=Un ennemi a raté son jet de sauvegarde. Vous pouvez utiliser votre réaction pour effectuer une attaque d'opportunité. -Reaction/&SeizeTheChanceReactTitle=Saisir l'opportunité -Reaction/&SeizeTheChanceTitle=Saisir l'opportunité +Reaction/&ReactionAttackSeizeTheChanceDescription=Un ennemi a raté son jet de sauvegarde. Vous pouvez utiliser votre réaction pour effectuer une attaque d'opportunité. +Reaction/&ReactionAttackSeizeTheChanceReactDescription=Un ennemi a raté son jet de sauvegarde. Vous pouvez utiliser votre réaction pour effectuer une attaque d'opportunité. +Reaction/&ReactionAttackSeizeTheChanceReactTitle=Saisir l'opportunité +Reaction/&ReactionAttackSeizeTheChanceTitle=Saisir l'opportunité Reaction/&SubitemSelectSeizeTheChanceTitle=Saisir l'opportunité Subclass/&RoguishOpportunistDescription=Les opportunistes sont ceux qui ne laissent jamais passer une chance d'achever leurs ennemis. Ils frappent vite et là où ça compte. Peu de ceux qui leur font face peuvent s'en sortir indemnes. Subclass/&RoguishOpportunistTitle=Opportuniste diff --git a/SolastaUnfinishedBusiness/Translations/it/SubClasses/RoguishOpportunist-it.txt b/SolastaUnfinishedBusiness/Translations/it/SubClasses/RoguishOpportunist-it.txt index 244f7f3394..c26a98896d 100644 --- a/SolastaUnfinishedBusiness/Translations/it/SubClasses/RoguishOpportunist-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/SubClasses/RoguishOpportunist-it.txt @@ -14,10 +14,10 @@ Feature/&PowerRoguishOpportunistExposedWeaknessDescription=A partire dal 17° li Feature/&PowerRoguishOpportunistExposedWeaknessTitle=Debolezza esposta Feature/&PowerRoguishOpportunistImprovedDebilitatingStrikeDescription=A partire dal 13° livello, ogni volta che attacchi furtivamente una creatura, quella creatura deve superare un tiro salvezza su Costituzione (CD 8 + bonus di competenza + modificatore di Destrezza) o subire una riduzione della velocità di movimento di 3 metri, e tirare tutti i tiri salvezza con penalità -1d6 fino alla fine del tuo turno successivo. Feature/&PowerRoguishOpportunistImprovedDebilitatingStrikeTitle=Colpo debilitante migliorato -Reaction/&SeizeTheChanceDescription=Un nemico ha fallito un tiro salvezza. Puoi usare la tua reazione per effettuare un attacco di opportunità. -Reaction/&SeizeTheChanceReactDescription=Un nemico ha fallito un tiro salvezza. Puoi usare la tua reazione per effettuare un attacco di opportunità. -Reaction/&SeizeTheChanceReactTitle=Cogli l'occasione -Reaction/&SeizeTheChanceTitle=Cogli l'occasione +Reaction/&ReactionAttackSeizeTheChanceDescription=Un nemico ha fallito un tiro salvezza. Puoi usare la tua reazione per effettuare un attacco di opportunità. +Reaction/&ReactionAttackSeizeTheChanceReactDescription=Un nemico ha fallito un tiro salvezza. Puoi usare la tua reazione per effettuare un attacco di opportunità. +Reaction/&ReactionAttackSeizeTheChanceReactTitle=Cogli l'occasione +Reaction/&ReactionAttackSeizeTheChanceTitle=Cogli l'occasione Reaction/&SubitemSelectSeizeTheChanceTitle=Cogli l'occasione Subclass/&RoguishOpportunistDescription=Gli opportunisti sono coloro che non si lasciano sfuggire l'occasione di finire i loro nemici. Colpiscono rapidamente e pugnalano dove serve. Non molti di quelli che li affrontano riescono a sfuggire senza un graffio. Subclass/&RoguishOpportunistTitle=Opportunista diff --git a/SolastaUnfinishedBusiness/Translations/ja/SubClasses/RoguishOpportunist-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/SubClasses/RoguishOpportunist-ja.txt index 7f522e7237..37b19678d5 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/SubClasses/RoguishOpportunist-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/SubClasses/RoguishOpportunist-ja.txt @@ -14,10 +14,10 @@ Feature/&PowerRoguishOpportunistExposedWeaknessDescription=17レベル以降、 Feature/&PowerRoguishOpportunistExposedWeaknessTitle=露呈した弱さ Feature/&PowerRoguishOpportunistImprovedDebilitatingStrikeDescription=13レベル以降、クリーチャーを急所攻撃するときは常に、そのクリーチャーは体質セーヴィング・スロー(DC 8 + 熟練度ボーナス + 器用さ修正値)をパスするか、移動速度を10フィート低下させ、-1d6のペナルティを伴うすべてのセーヴィング・スローをロールする必要があります。次のターンの終わり。 Feature/&PowerRoguishOpportunistImprovedDebilitatingStrikeTitle=改良された衰弱攻撃 -Reaction/&SeizeTheChanceDescription=敵がセーヴィング・スローに失敗した。あなたの反応を利用して機会攻撃を行うことができます。 -Reaction/&SeizeTheChanceReactDescription=敵がセーヴィング・スローに失敗した。あなたの反応を利用して機会攻撃を行うことができます。 -Reaction/&SeizeTheChanceReactTitle=チャンスをつかみましょう -Reaction/&SeizeTheChanceTitle=チャンスをつかみましょう +Reaction/&ReactionAttackSeizeTheChanceDescription=敵がセーヴィング・スローに失敗した。あなたの反応を利用して機会攻撃を行うことができます。 +Reaction/&ReactionAttackSeizeTheChanceReactDescription=敵がセーヴィング・スローに失敗した。あなたの反応を利用して機会攻撃を行うことができます。 +Reaction/&ReactionAttackSeizeTheChanceReactTitle=チャンスをつかみましょう +Reaction/&ReactionAttackSeizeTheChanceTitle=チャンスをつかみましょう Reaction/&SubitemSelectSeizeTheChanceTitle=チャンスをつかみましょう Subclass/&RoguishOpportunistDescription=日和見主義者は、敵を倒すチャンスを決して逃さない。素早く、要所を突き刺す。彼らに立ち向かう者のうち、無傷で逃げられる者は多くない。 Subclass/&RoguishOpportunistTitle=日和見主義者 diff --git a/SolastaUnfinishedBusiness/Translations/ko/SubClasses/RoguishOpportunist-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/SubClasses/RoguishOpportunist-ko.txt index 9dd7fc7362..a4e1079806 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/SubClasses/RoguishOpportunist-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/SubClasses/RoguishOpportunist-ko.txt @@ -14,10 +14,10 @@ Feature/&PowerRoguishOpportunistExposedWeaknessDescription=17레벨부터, 약 Feature/&PowerRoguishOpportunistExposedWeaknessTitle=노출된 약점 Feature/&PowerRoguishOpportunistImprovedDebilitatingStrikeDescription=13레벨부터, 당신이 생물을 몰래 공격할 때마다, 그 생물은 건강 내성 굴림(DC 8 + 숙련도 보너스 + 민첩 수정치)을 통과하거나 이동 속도를 10피트 줄여야 하며, 모든 내성 굴림에 –1d6 페널티를 적용하여 굴려야 합니다. 다음 차례가 끝났습니다. Feature/&PowerRoguishOpportunistImprovedDebilitatingStrikeTitle=향상된 약화 공격 -Reaction/&SeizeTheChanceDescription=적이 내성 굴림에 실패했습니다. 당신의 반응을 이용해 기회공격을 할 수 있습니다. -Reaction/&SeizeTheChanceReactDescription=적이 내성 굴림에 실패했습니다. 당신의 반응을 이용해 기회공격을 할 수 있습니다. -Reaction/&SeizeTheChanceReactTitle=기회를 잡아라 -Reaction/&SeizeTheChanceTitle=기회를 잡아라 +Reaction/&ReactionAttackSeizeTheChanceDescription=적이 내성 굴림에 실패했습니다. 당신의 반응을 이용해 기회공격을 할 수 있습니다. +Reaction/&ReactionAttackSeizeTheChanceReactDescription=적이 내성 굴림에 실패했습니다. 당신의 반응을 이용해 기회공격을 할 수 있습니다. +Reaction/&ReactionAttackSeizeTheChanceReactTitle=기회를 잡아라 +Reaction/&ReactionAttackSeizeTheChanceTitle=기회를 잡아라 Reaction/&SubitemSelectSeizeTheChanceTitle=기회를 잡아라 Subclass/&RoguishOpportunistDescription=기회주의자는 적들을 끝장낼 기회를 절대 놓치지 않는 사람들입니다. 그들은 빠르게 찌르고 중요한 곳에 찌릅니다. 그들과 마주한 많은 사람들은 흠집 없이 탈출할 수 없습니다. Subclass/&RoguishOpportunistTitle=기회주의자 diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/SubClasses/RoguishOpportunist-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/SubClasses/RoguishOpportunist-pt-BR.txt index 882ce66afb..7f479c7f59 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/SubClasses/RoguishOpportunist-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/SubClasses/RoguishOpportunist-pt-BR.txt @@ -14,10 +14,10 @@ Feature/&PowerRoguishOpportunistExposedWeaknessDescription=A partir do 17º nív Feature/&PowerRoguishOpportunistExposedWeaknessTitle=Fraqueza exposta Feature/&PowerRoguishOpportunistImprovedDebilitatingStrikeDescription=A partir do 13º nível, sempre que você atacar furtivamente uma criatura, aquela criatura deve passar em um teste de resistência de Constituição (CD 8 + bônus de proficiência + modificador de Destreza) ou terá a velocidade de movimento reduzida em 3 metros, e rolar todos os testes de resistência com penalidade de –1d6 até o final do seu próximo turno. Feature/&PowerRoguishOpportunistImprovedDebilitatingStrikeTitle=Ataque Debilitante Aprimorado -Reaction/&SeizeTheChanceDescription=Um inimigo falhou em um teste de resistência. Você pode usar sua reação para fazer um ataque de oportunidade. -Reaction/&SeizeTheChanceReactDescription=Um inimigo falhou em um teste de resistência. Você pode usar sua reação para fazer um ataque de oportunidade. -Reaction/&SeizeTheChanceReactTitle=Aproveite a oportunidade -Reaction/&SeizeTheChanceTitle=Aproveite a oportunidade +Reaction/&ReactionAttackSeizeTheChanceDescription=Um inimigo falhou em um teste de resistência. Você pode usar sua reação para fazer um ataque de oportunidade. +Reaction/&ReactionAttackSeizeTheChanceReactDescription=Um inimigo falhou em um teste de resistência. Você pode usar sua reação para fazer um ataque de oportunidade. +Reaction/&ReactionAttackSeizeTheChanceReactTitle=Aproveite a oportunidade +Reaction/&ReactionAttackSeizeTheChanceTitle=Aproveite a oportunidade Reaction/&SubitemSelectSeizeTheChanceTitle=Aproveite a oportunidade Subclass/&RoguishOpportunistDescription=Oportunistas são aqueles que nunca deixam escapar uma chance de acabar com seus inimigos. Eles apunhalam rápido e apunhalam onde é importante. Poucos que os enfrentam conseguem escapar ilesos. Subclass/&RoguishOpportunistTitle=Oportunista diff --git a/SolastaUnfinishedBusiness/Translations/ru/SubClasses/RoguishOpportunist-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/SubClasses/RoguishOpportunist-ru.txt index 0d86fad692..914abc7a12 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/SubClasses/RoguishOpportunist-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/SubClasses/RoguishOpportunist-ru.txt @@ -14,10 +14,10 @@ Feature/&PowerRoguishOpportunistExposedWeaknessDescription=Начиная с 17- Feature/&PowerRoguishOpportunistExposedWeaknessTitle=Выявленная слабость Feature/&PowerRoguishOpportunistImprovedDebilitatingStrikeDescription=Начиная с 13-го уровня, каждый раз, когда вы совершаете скрытую атаку по существу, оно должно пройти спасбросок Телосложения (Сл равна 8 + ваш бонус мастерства + ваш модификатор Ловкости) или его скорость передвижения будет уменьшена на 10 футов, а все спасброски оно будет совершать со штрафом -1d6 до конца вашего следующего хода. Feature/&PowerRoguishOpportunistImprovedDebilitatingStrikeTitle=Улучшенный ослабляющий удар -Reaction/&SeizeTheChanceDescription=Противник провалил спасбросок. Вы можете использовать свою реакцию, чтобы совершить атаку по возможности. -Reaction/&SeizeTheChanceReactDescription=Противник провалил спасбросок. Вы можете использовать свою реакцию, чтобы совершить атаку по возможности. -Reaction/&SeizeTheChanceReactTitle=Воспользоваться шансом -Reaction/&SeizeTheChanceTitle=Воспользоваться шансом +Reaction/&ReactionAttackSeizeTheChanceDescription=Противник провалил спасбросок. Вы можете использовать свою реакцию, чтобы совершить атаку по возможности. +Reaction/&ReactionAttackSeizeTheChanceReactDescription=Противник провалил спасбросок. Вы можете использовать свою реакцию, чтобы совершить атаку по возможности. +Reaction/&ReactionAttackSeizeTheChanceReactTitle=Воспользоваться шансом +Reaction/&ReactionAttackSeizeTheChanceTitle=Воспользоваться шансом Reaction/&SubitemSelectSeizeTheChanceTitle=Воспользоваться шансом Subclass/&RoguishOpportunistDescription=Оппортунисты - это те, кто никогда не упускает шанса покончить со своими врагами. Они наносят быстрые удары по самым болезненным местам. Немногим из тех, кто сталкивается с ними, удаётся уйти невредимыми. Subclass/&RoguishOpportunistTitle=Оппортунист diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/SubClasses/RoguishOpportunist-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/SubClasses/RoguishOpportunist-zh-CN.txt index eacc8afec6..1e6066f30e 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/SubClasses/RoguishOpportunist-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/SubClasses/RoguishOpportunist-zh-CN.txt @@ -14,10 +14,10 @@ Feature/&PowerRoguishOpportunistExposedWeaknessDescription=从 17 级开始, Feature/&PowerRoguishOpportunistExposedWeaknessTitle=暴露弱点 Feature/&PowerRoguishOpportunistImprovedDebilitatingStrikeDescription=每当你偷袭一个生物时,该生物必须通过一次体质豁免检定(DC 8 + 熟练加值 + 敏捷调整值)或移动速度降低 10 尺,并在所有豁免检定中受到 –1d6 的罚值,直到你的下一次回合结束。 Feature/&PowerRoguishOpportunistImprovedDebilitatingStrikeTitle=强化衰弱打击 -Reaction/&SeizeTheChanceDescription=一名敌人未能通过豁免检定。你可以利用你的反应来发动借机攻击。 -Reaction/&SeizeTheChanceReactDescription=一名敌人未能通过豁免检定。你可以利用你的反应来发动借机攻击。 -Reaction/&SeizeTheChanceReactTitle=趁机 -Reaction/&SeizeTheChanceTitle=趁机 +Reaction/&ReactionAttackSeizeTheChanceDescription=一名敌人未能通过豁免检定。你可以利用你的反应来发动借机攻击。 +Reaction/&ReactionAttackSeizeTheChanceReactDescription=一名敌人未能通过豁免检定。你可以利用你的反应来发动借机攻击。 +Reaction/&ReactionAttackSeizeTheChanceReactTitle=趁机 +Reaction/&ReactionAttackSeizeTheChanceTitle=趁机 Reaction/&SubitemSelectSeizeTheChanceTitle=趁机 Subclass/&RoguishOpportunistDescription=巧技斗士是那些永远不放过消灭敌人的机会的人。他们刺得很快,刺到重要的地方。面对他们,没有多少人能毫发无伤地逃脱。 Subclass/&RoguishOpportunistTitle=巧技斗士 From 07d369aa6389bb192f0a7cd2672fc0feebecc037 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Thu, 12 Sep 2024 15:59:13 -0700 Subject: [PATCH 131/212] solve TODO check if MyExecuteActionSpendPower works here --- SolastaUnfinishedBusiness/Models/Level20SubclassesContext.cs | 3 +-- SolastaUnfinishedBusiness/Spells/SpellBuildersLevel03.cs | 3 +-- SolastaUnfinishedBusiness/Subclasses/OathOfDread.cs | 3 +-- .../Subclasses/RoguishArcaneScoundrel.cs | 3 +-- SolastaUnfinishedBusiness/Subclasses/WayOfTheDiscordance.cs | 4 +--- 5 files changed, 5 insertions(+), 11 deletions(-) diff --git a/SolastaUnfinishedBusiness/Models/Level20SubclassesContext.cs b/SolastaUnfinishedBusiness/Models/Level20SubclassesContext.cs index 872f50c33d..1ef502cb3e 100644 --- a/SolastaUnfinishedBusiness/Models/Level20SubclassesContext.cs +++ b/SolastaUnfinishedBusiness/Models/Level20SubclassesContext.cs @@ -1514,8 +1514,7 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, var rulesetCharacter = actingCharacter.RulesetCharacter; var usablePower = PowerProvider.Get(powerFortuneFavorTheBold, rulesetCharacter); - //TODO: check if MyExecuteActionSpendPower works here - actingCharacter.MyExecuteActionPowerNoCost(usablePower, actingCharacter); + actingCharacter.MyExecuteActionSpendPower(usablePower, false, actingCharacter); yield break; } diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel03.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel03.cs index 40f927c221..d91ed5035b 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel03.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel03.cs @@ -544,8 +544,7 @@ public void MoveStepFinished(GameLocationCharacter mover) var rulesetAttacker = mover.RulesetCharacter; var usablePower = PowerProvider.Get(powerDamage, rulesetAttacker); - //TODO: check if MyExecuteActionSpendPower works here - mover.MyExecuteActionPowerNoCost(usablePower, targets); + mover.MyExecuteActionSpendPower(usablePower, false, targets); } } diff --git a/SolastaUnfinishedBusiness/Subclasses/OathOfDread.cs b/SolastaUnfinishedBusiness/Subclasses/OathOfDread.cs index b383a282fc..f7d09f3723 100644 --- a/SolastaUnfinishedBusiness/Subclasses/OathOfDread.cs +++ b/SolastaUnfinishedBusiness/Subclasses/OathOfDread.cs @@ -334,8 +334,7 @@ public void OnCharacterTurnStarted(GameLocationCharacter character) var usablePower = PowerProvider.Get(powerAuraOfDominationDamage, rulesetAttacker); - //TODO: check if MyExecuteActionSpendPower works here - attacker.MyExecuteActionPowerNoCost(usablePower, character); + attacker.MyExecuteActionSpendPower(usablePower, false, character); } } diff --git a/SolastaUnfinishedBusiness/Subclasses/RoguishArcaneScoundrel.cs b/SolastaUnfinishedBusiness/Subclasses/RoguishArcaneScoundrel.cs index 1b073341ca..50531e1a97 100644 --- a/SolastaUnfinishedBusiness/Subclasses/RoguishArcaneScoundrel.cs +++ b/SolastaUnfinishedBusiness/Subclasses/RoguishArcaneScoundrel.cs @@ -313,8 +313,7 @@ public IEnumerator OnMagicEffectFinishedByMe( attacker.UsedSpecialFeatures.TryAdd(AdditionalDamageRogueSneakAttack.Name, 1); - //TODO: check if MyExecuteActionSpendPower works here - attacker.MyExecuteActionPowerNoCost(usablePower, [.. targets]); + attacker.MyExecuteActionSpendPower(usablePower, false, [.. targets]); } } diff --git a/SolastaUnfinishedBusiness/Subclasses/WayOfTheDiscordance.cs b/SolastaUnfinishedBusiness/Subclasses/WayOfTheDiscordance.cs index eef5220cfc..4585b54eb4 100644 --- a/SolastaUnfinishedBusiness/Subclasses/WayOfTheDiscordance.cs +++ b/SolastaUnfinishedBusiness/Subclasses/WayOfTheDiscordance.cs @@ -481,7 +481,6 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, var rulesetCharacter = actingCharacter.RulesetCharacter; var usablePowerDiscordance = PowerProvider.Get(powerDiscordance, rulesetCharacter); - //TODO: check if MyExecuteActionSpendPower works here actingCharacter.MyExecuteActionPowerNoCost(usablePowerDiscordance, [.. targets]); // Turmoil @@ -574,8 +573,7 @@ public IEnumerator HandleReducedToZeroHpByMeOrAlly( var usablePower = PowerProvider.Get(powerTidesOfChaos, rulesetAlly); - //TODO: check if MyExecuteActionSpendPower works here - ally.MyExecuteActionPowerNoCost(usablePower, ally); + ally.MyExecuteActionSpendPower(usablePower, false, ally); } } } From b9516ec4e77db565e4474d4eecb76b120065a823 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Thu, 12 Sep 2024 17:01:12 -0700 Subject: [PATCH 132/212] improve Holy Weapon behavior --- .../PowerHolyWeapon.json | 10 ++--- .../GameLocationCharacterExtensions.cs | 2 +- .../Spells/SpellBuildersLevel05.cs | 43 ++++++++++++++----- .../Translations/de/Others-de.txt | 1 + .../Translations/de/Spells/Spells05-de.txt | 2 +- .../Translations/en/Others-en.txt | 1 + .../Translations/en/Spells/Spells05-en.txt | 2 +- .../Translations/es/Others-es.txt | 1 + .../Translations/es/Spells/Spells05-es.txt | 2 +- .../Translations/fr/Others-fr.txt | 1 + .../Translations/fr/Spells/Spells05-fr.txt | 2 +- .../Translations/it/Others-it.txt | 1 + .../Translations/it/Spells/Spells05-it.txt | 2 +- .../Translations/ja/Others-ja.txt | 1 + .../Translations/ja/Spells/Spells05-ja.txt | 2 +- .../Translations/ko/Others-ko.txt | 1 + .../Translations/ko/Spells/Spells05-ko.txt | 2 +- .../Translations/pt-BR/Others-pt-BR.txt | 1 + .../pt-BR/Spells/Spells05-pt-BR.txt | 2 +- .../Translations/ru/Others-ru.txt | 1 + .../Translations/ru/Spells/Spells05-ru.txt | 2 +- .../Translations/zh-CN/Others-zh-CN.txt | 1 + .../zh-CN/Spells/Spells05-zh-CN.txt | 2 +- 23 files changed, 59 insertions(+), 26 deletions(-) diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerHolyWeapon.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerHolyWeapon.json index 5633bd074a..408e8cf9d9 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerHolyWeapon.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerHolyWeapon.json @@ -2,13 +2,13 @@ "$type": "FeatureDefinitionPower, Assembly-CSharp", "effectDescription": { "$type": "EffectDescription, Assembly-CSharp", - "rangeType": "Self", - "rangeParameter": 0, + "rangeType": "Distance", + "rangeParameter": 6, "halfDamageOnAMiss": false, "hitAffinitiesByTargetTag": [], - "targetType": "Sphere", + "targetType": "IndividualsUnique", "itemSelectionType": "None", - "targetParameter": 6, + "targetParameter": 1, "targetParameter2": 2, "emissiveBorder": "None", "emissiveParameter": 1, @@ -30,7 +30,7 @@ "trapRangeType": "Triggerer", "targetConditionName": "", "targetConditionAsset": null, - "targetSide": "Enemy", + "targetSide": "All", "durationType": "Minute", "durationParameter": 1, "endOfEffect": "EndOfTurn", diff --git a/SolastaUnfinishedBusiness/Api/GameExtensions/GameLocationCharacterExtensions.cs b/SolastaUnfinishedBusiness/Api/GameExtensions/GameLocationCharacterExtensions.cs index 21767654a7..b8a731b451 100644 --- a/SolastaUnfinishedBusiness/Api/GameExtensions/GameLocationCharacterExtensions.cs +++ b/SolastaUnfinishedBusiness/Api/GameExtensions/GameLocationCharacterExtensions.cs @@ -19,7 +19,7 @@ namespace SolastaUnfinishedBusiness.Api.GameExtensions; public static class GameLocationCharacterExtensions { - private static List GetActionModifiers(int count) + internal static List GetActionModifiers(int count) { var actionModifiers = new List(); diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel05.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel05.cs index ed1d132332..ba2eb5fe4c 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel05.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel05.cs @@ -21,6 +21,7 @@ using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionPowers; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.SpellDefinitions; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.WeaponTypeDefinitions; +using static SolastaUnfinishedBusiness.Api.GameExtensions.GameLocationCharacterExtensions; namespace SolastaUnfinishedBusiness.Spells; @@ -903,7 +904,7 @@ internal static SpellDefinition BuildHolyWeapon() EffectDescriptionBuilder .Create() .SetDurationData(DurationType.Minute, 1) - .SetTargetingData(Side.Enemy, RangeType.Self, 0, TargetType.Sphere, 6) + .SetTargetingData(Side.All, RangeType.Distance, 6, TargetType.IndividualsUnique) .SetSavingThrowData(false, AttributeDefinitions.Constitution, true, EffectDifficultyClassComputation.SpellCastingFeature) .SetEffectForms( @@ -924,13 +925,7 @@ internal static SpellDefinition BuildHolyWeapon() FeatureDefinitionAdditionalDamages.AdditionalDamageBrandingSmite.impactParticleReference) .SetConditionEffectParameters(ConditionDefinitions.ConditionBlinded) .Build()) - .AddCustomSubFeatures( - new PowerOrSpellFinishedByMeHolyWeapon(), - new ValidatorsValidatePowerUse(c => - c.GetMainWeapon()?.DynamicItemProperties.Any(x => x.FeatureDefinition == additionalDamage) == - true || - c.GetOffhandWeapon()?.DynamicItemProperties.Any(x => x.FeatureDefinition == additionalDamage) == - true)) + .AddCustomSubFeatures(new CustomBehaviorHolyWeapon(additionalDamage)) .AddToDB(); var condition = ConditionDefinitionBuilder @@ -981,10 +976,38 @@ internal static SpellDefinition BuildHolyWeapon() return spell; } - private sealed class PowerOrSpellFinishedByMeHolyWeapon : IPowerOrSpellInitiatedByMe + private sealed class CustomBehaviorHolyWeapon(FeatureDefinitionAdditionalDamage additionalDamage) + : IPowerOrSpellInitiatedByMe, IFilterTargetingCharacter { + public bool EnforceFullSelection => false; + + public bool IsValid(CursorLocationSelectTarget __instance, GameLocationCharacter target) + { + var hero = target.RulesetCharacter.GetOriginalHero(); + var rulesetItem = hero?.CharacterInventory.EnumerateAllSlots() + .FirstOrDefault(x => + x.EquipedItem?.DynamicItemProperties.Any(y => y.FeatureDefinition == additionalDamage) == true) + ?.EquipedItem; + var sourceEffectGuid = rulesetItem?.DynamicItemProperties + .FirstOrDefault(x => x.FeatureDefinition == additionalDamage)?.SourceEffectGuid ?? 0; + var caster = EffectHelpers.GetCharacterByEffectGuid(sourceEffectGuid); + var hasHolyWeapon = caster != null && __instance.ActionParams.ActingCharacter.RulesetCharacter == caster; + + if (!hasHolyWeapon) + { + __instance.actionModifier.FailureFlags.Add("Tooltip/&TargetMustHaveHolyWeapon"); + } + + return hasHolyWeapon; + } + public IEnumerator OnPowerOrSpellInitiatedByMe(CharacterActionMagicEffect action, BaseDefinition baseDefinition) { + var ally = action.ActionParams.TargetCharacters[0]; + var targets = Gui.Battle?.GetContenders(ally, withinRange: 6) ?? []; + + action.ActionParams.TargetCharacters.SetRange(targets); + action.ActionParams.ActionModifiers.SetRange(GetActionModifiers(targets.Count)); action.ActingCharacter.RulesetCharacter.BreakConcentration(); yield break; @@ -1109,7 +1132,7 @@ public IEnumerator ComputeValidPositions(CursorLocationSelectPosition cursorLoca #region Swift Quiver internal const string SwiftQuiverAttackTag = "SwiftQuiverAttack"; - + internal static SpellDefinition BuildSwiftQuiver() { const string NAME = "SwiftQuiver"; diff --git a/SolastaUnfinishedBusiness/Translations/de/Others-de.txt b/SolastaUnfinishedBusiness/Translations/de/Others-de.txt index 68d8da842e..d95664e968 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Others-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Others-de.txt @@ -311,6 +311,7 @@ Tooltip/&Tag9000Title=Benutzerdefinierter Effekt Tooltip/&TagDamageChaosBoltTitle=Chaotischer Schaden Tooltip/&TagUnfinishedBusinessTitle=Unerledigte Aufgabe Tooltip/&TargetMeleeWeaponError=Auf dieses Ziel kann kein Nahkampfangriff ausgeführt werden, da es sich nicht innerhalb von {0} befindet +Tooltip/&TargetMustHaveHolyWeapon=Ziel muss heilige Waffe besitzen Tooltip/&TargetMustNotBeSurprised=Das Ziel darf nicht überrascht werden Tooltip/&TargetMustUnderstandYou=Das Ziel muss Ihren Befehl verstehen UI/&CustomFeatureSelectionStageDescription=Wählen Sie zusätzliche Funktionen für Ihre Klasse/Unterklasse aus. diff --git a/SolastaUnfinishedBusiness/Translations/de/Spells/Spells05-de.txt b/SolastaUnfinishedBusiness/Translations/de/Spells/Spells05-de.txt index 2fb2153338..71c901ed20 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Spells/Spells05-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Spells/Spells05-de.txt @@ -34,7 +34,7 @@ Spell/&EmpoweredKnowledgeDescription=Deine Magie vertieft das Verständnis einer Spell/&EmpoweredKnowledgeTitle=Kompetenzerweiterung Spell/&FarStepDescription=Du teleportierst dich bis zu 60 Fuß weit an einen freien Ort, den du sehen kannst. In jedem deiner Züge, bevor der Zauber endet, kannst du eine Bonusaktion nutzen, um dich erneut auf diese Weise zu teleportieren. Spell/&FarStepTitle=Weiter Schritt -Spell/&HolyWeaponDescription=Du erfüllst eine Waffe, die du berührst, mit heiliger Kraft. Bis der Zauber endet, strahlt die Waffe helles Licht in einem Radius von 30 Fuß und schwaches Licht für weitere 30 Fuß aus. Außerdem verursachen mit ihr ausgeführte Waffenangriffe bei einem Treffer zusätzliche 2W8 Strahlungsschaden. Wenn die Waffe nicht bereits eine magische Waffe ist, wird sie für die Dauer zu einer. Als Bonusaktion in deinem Zug kannst du, wenn du die Waffe führst, diesen Zauber aufheben und die Waffe einen Strahlungsausbruch aussenden lassen. Jede Kreatur deiner Wahl, die du innerhalb von 30 Fuß der Waffe sehen kannst, muss einen Konstitutionsrettungswurf machen. Bei einem misslungenen Rettungswurf erleidet die Kreatur 4W8 Strahlungsschaden und ist 1 Minute lang geblendet. Bei einem erfolgreichen Rettungswurf erleidet die Kreatur nur halb so viel Schaden und ist nicht geblendet. Am Ende jedes ihrer Züge kann eine geblendete Kreatur einen Konstitutionsrettungswurf machen und bei einem Erfolg den Effekt auf sich selbst beenden. +Spell/&HolyWeaponDescription=Du erfüllst eine Waffe, die du berührst, mit heiliger Kraft. Bis der Zauber endet, strahlt die Waffe helles Licht in einem Radius von 30 Fuß und schwaches Licht für weitere 30 Fuß aus. Außerdem verursachen mit ihr ausgeführte Waffenangriffe bei einem Treffer zusätzliche 2W8 Strahlungsschaden. Wenn die Waffe nicht bereits eine magische Waffe ist, wird sie für die Dauer zu einer. Als Bonusaktion in deinem Zug kannst du diesen Zauber aufheben und die Waffe einen Strahlungsausbruch aussenden lassen, wenn sich die Waffe innerhalb von 30 Fuß befindet. Jede Kreatur deiner Wahl, die du innerhalb von 30 Fuß der Waffe sehen kannst, muss einen Konstitutionsrettungswurf machen. Bei einem misslungenen Rettungswurf erleidet die Kreatur 4W8 Strahlungsschaden und ist 1 Minute lang geblendet. Bei einem erfolgreichen Rettungswurf erleidet die Kreatur nur halb so viel Schaden und ist nicht geblendet. Am Ende jedes ihrer Züge kann eine geblendete Kreatur einen Konstitutionsrettungswurf machen und bei einem Erfolg den Effekt auf sich selbst beenden. Spell/&HolyWeaponTitle=Heilige Waffe Spell/&IncinerationDescription=Flammen umhüllen eine Kreatur, die du in Reichweite sehen kannst. Das Ziel muss einen Rettungswurf für Geschicklichkeit machen. Bei einem misslungenen Rettungswurf erleidet es 8W6 Feuerschaden, bei einem erfolgreichen Rettungswurf nur halb so viel. Bei einem misslungenen Rettungswurf brennt das Ziel außerdem für die Dauer des Zaubers. Das brennende Ziel strahlt helles Licht in einem Radius von 30 Fuß und schwaches Licht für weitere 30 Fuß aus und erleidet zu Beginn jeder seiner Runden 8W6 Feuerschaden. Spell/&IncinerationTitle=Selbstverbrennung diff --git a/SolastaUnfinishedBusiness/Translations/en/Others-en.txt b/SolastaUnfinishedBusiness/Translations/en/Others-en.txt index 1d48921236..e8ddec4832 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Others-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Others-en.txt @@ -311,6 +311,7 @@ Tooltip/&Tag9000Title=Custom Effect Tooltip/&TagDamageChaosBoltTitle=Chaotic Damage Tooltip/&TagUnfinishedBusinessTitle=Unfinished Business Tooltip/&TargetMeleeWeaponError=Can't perform melee attack on this target as not within {0} +Tooltip/&TargetMustHaveHolyWeapon=Target must have holy weapon UI/&CustomFeatureSelectionStageDescription=Select extra features for your class/subclass. UI/&CustomFeatureSelectionStageFeatures=Features UI/&CustomFeatureSelectionStageNotDone=You must select all available features before proceeding diff --git a/SolastaUnfinishedBusiness/Translations/en/Spells/Spells05-en.txt b/SolastaUnfinishedBusiness/Translations/en/Spells/Spells05-en.txt index bc92d6becc..5fdc641b9d 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Spells/Spells05-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Spells/Spells05-en.txt @@ -34,7 +34,7 @@ Spell/&EmpoweredKnowledgeDescription=Your magic deepens a creature's understandi Spell/&EmpoweredKnowledgeTitle=Skill Empowerment Spell/&FarStepDescription=You teleport up to 60 ft to an unoccupied space you can see. On each of your turns before the spell ends, you can use a bonus action to teleport in this way again. Spell/&FarStepTitle=Far Step -Spell/&HolyWeaponDescription=You imbue a weapon you touch with holy power. Until the spell ends, the weapon emits bright light in a 30-foot radius and dim light for an additional 30 feet. In addition, weapon attacks made with it deal an extra 2d8 radiant damage on a hit. If the weapon isn't already a magic weapon, it becomes one for the duration. As a bonus action on your turn, if wielding the weapon, you can dismiss this spell and cause the weapon to emit a burst of radiance. Each creature of your choice that you can see within 30 feet of the weapon must make a Constitution saving throw. On a failed save, a creature takes 4d8 radiant damage, and it is blinded for 1 minute. On a successful save, a creature takes half as much damage and isn't blinded. At the end of each of its turns, a blinded creature can make a Constitution saving throw, ending the effect on itself on a success. +Spell/&HolyWeaponDescription=You imbue a weapon you touch with holy power. Until the spell ends, the weapon emits bright light in a 30-foot radius and dim light for an additional 30 feet. In addition, weapon attacks made with it deal an extra 2d8 radiant damage on a hit. If the weapon isn't already a magic weapon, it becomes one for the duration. As a bonus action on your turn, if the weapon is within 30 ft, you can dismiss this spell and cause the weapon to emit a burst of radiance. Each creature of your choice that you can see within 30 feet of the weapon must make a Constitution saving throw. On a failed save, a creature takes 4d8 radiant damage, and it is blinded for 1 minute. On a successful save, a creature takes half as much damage and isn't blinded. At the end of each of its turns, a blinded creature can make a Constitution saving throw, ending the effect on itself on a success. Spell/&HolyWeaponTitle=Holy Weapon Spell/&IncinerationDescription=Flames wreathe one creature you can see within range. The target must make a Dexterity saving throw. It takes 8d6 fire damage on a failed save, or half as much damage on a successful one. On a failed save, the target also burns for the spell's duration. The burning target sheds bright light in a 30-foot radius and dim light for an additional 30 feet and takes 8d6 fire damage at the start of each of its turns. Spell/&IncinerationTitle=Immolation diff --git a/SolastaUnfinishedBusiness/Translations/es/Others-es.txt b/SolastaUnfinishedBusiness/Translations/es/Others-es.txt index b3380aeb17..80c2fe1828 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Others-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Others-es.txt @@ -311,6 +311,7 @@ Tooltip/&Tag9000Title=Efecto personalizado Tooltip/&TagDamageChaosBoltTitle=Daño caótico Tooltip/&TagUnfinishedBusinessTitle=Negocios inconclusos Tooltip/&TargetMeleeWeaponError=No se puede realizar un ataque cuerpo a cuerpo contra este objetivo porque no está dentro de {0} +Tooltip/&TargetMustHaveHolyWeapon=El objetivo debe tener un arma sagrada. Tooltip/&TargetMustNotBeSurprised=El objetivo no debe sorprenderse Tooltip/&TargetMustUnderstandYou=El objetivo debe comprender tu orden UI/&CustomFeatureSelectionStageDescription=Seleccione funciones adicionales para su clase/subclase. diff --git a/SolastaUnfinishedBusiness/Translations/es/Spells/Spells05-es.txt b/SolastaUnfinishedBusiness/Translations/es/Spells/Spells05-es.txt index 960905cb08..145cd1d259 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Spells/Spells05-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Spells/Spells05-es.txt @@ -34,7 +34,7 @@ Spell/&EmpoweredKnowledgeDescription=Tu magia profundiza la comprensión de una Spell/&EmpoweredKnowledgeTitle=Empoderamiento de habilidades Spell/&FarStepDescription=Te teletransportas hasta 60 pies a un espacio desocupado que puedas ver. En cada uno de tus turnos antes de que termine el hechizo, puedes usar una acción adicional para teletransportarte de esta manera nuevamente. Spell/&FarStepTitle=Paso lejano -Spell/&HolyWeaponDescription=Imbuyes un arma que tocas con poder sagrado. Hasta que el conjuro termina, el arma emite luz brillante en un radio de 30 pies y luz tenue por otros 30 pies. Además, los ataques con armas realizados con ella infligen 2d8 puntos de daño radiante adicionales con cada impacto. Si el arma no es ya un arma mágica, se convierte en una durante el tiempo que dure el conjuro. Como acción adicional en tu turno, si empuñas el arma, puedes anular este conjuro y hacer que el arma emita una explosión de resplandor. Cada criatura de tu elección que puedas ver a 30 pies del arma debe realizar una tirada de salvación de Constitución. Si la tirada falla, la criatura sufre 4d8 puntos de daño radiante y queda cegada durante 1 minuto. Si la tirada tiene éxito, la criatura sufre la mitad del daño y no queda cegada. Al final de cada uno de sus turnos, una criatura cegada puede realizar una tirada de salvación de Constitución, terminando el efecto sobre sí misma si tiene éxito. +Spell/&HolyWeaponDescription=Imbuyes un arma que tocas con poder sagrado. Hasta que el conjuro termina, el arma emite luz brillante en un radio de 30 pies y luz tenue por otros 30 pies. Además, los ataques con armas realizados con ella infligen 2d8 puntos de daño radiante adicionales con cada impacto. Si el arma no es ya un arma mágica, se convierte en una durante el tiempo que dure el conjuro. Como acción adicional en tu turno, si el arma está a 30 pies o menos del arma, puedes anular este conjuro y hacer que el arma emita una explosión de resplandor. Cada criatura de tu elección que puedas ver a 30 pies o menos del arma debe realizar una tirada de salvación de Constitución. Si la tirada falla, la criatura sufre 4d8 puntos de daño radiante y queda cegada durante 1 minuto. Si la tirada tiene éxito, la criatura sufre la mitad del daño y no queda cegada. Al final de cada uno de sus turnos, una criatura cegada puede realizar una tirada de salvación de Constitución, que termina el efecto sobre sí misma si tiene éxito. Spell/&HolyWeaponTitle=Arma sagrada Spell/&IncinerationDescription=Las llamas envuelven a una criatura que puedas ver dentro del alcance. El objetivo debe realizar una tirada de salvación de Destreza. Recibe 8d6 puntos de daño por fuego si falla la tirada, o la mitad si tiene éxito. Si falla la tirada, el objetivo también arde durante la duración del conjuro. El objetivo en llamas emite una luz brillante en un radio de 30 pies y una luz tenue durante otros 30 pies y recibe 8d6 puntos de daño por fuego al comienzo de cada uno de sus turnos. Spell/&IncinerationTitle=Inmolación diff --git a/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt index 14c492c508..3e897aa906 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt @@ -311,6 +311,7 @@ Tooltip/&Tag9000Title=Effet personnalisé Tooltip/&TagDamageChaosBoltTitle=Dégâts chaotiques Tooltip/&TagUnfinishedBusinessTitle=Inachevé Tooltip/&TargetMeleeWeaponError=Impossible d'effectuer une attaque au corps à corps sur cette cible car elle se trouve à {0} +Tooltip/&TargetMustHaveHolyWeapon=La cible doit avoir une arme sacrée Tooltip/&TargetMustNotBeSurprised=La cible ne doit pas être surprise Tooltip/&TargetMustUnderstandYou=La cible doit comprendre votre commande UI/&CustomFeatureSelectionStageDescription=Sélectionnez des fonctionnalités supplémentaires pour votre classe/sous-classe. diff --git a/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells05-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells05-fr.txt index e140f84e78..e669c4bf46 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells05-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells05-fr.txt @@ -34,7 +34,7 @@ Spell/&EmpoweredKnowledgeDescription=Votre magie permet à une créature de mieu Spell/&EmpoweredKnowledgeTitle=Renforcement des compétences Spell/&FarStepDescription=Vous vous téléportez jusqu'à 18 mètres dans un espace inoccupé que vous pouvez voir. À chacun de vos tours avant la fin du sort, vous pouvez utiliser une action bonus pour vous téléporter de cette manière à nouveau. Spell/&FarStepTitle=Pas lointain -Spell/&HolyWeaponDescription=Vous imprégnez une arme que vous touchez d'un pouvoir sacré. Jusqu'à la fin du sort, l'arme émet une lumière vive dans un rayon de 9 mètres et une lumière tamisée sur 9 mètres supplémentaires. De plus, les attaques d'armes effectuées avec cette arme infligent 2d8 dégâts radiants supplémentaires en cas de succès. Si l'arme n'est pas déjà une arme magique, elle en devient une pendant la durée du sort. En tant qu'action bonus à votre tour, si vous utilisez l'arme, vous pouvez annuler ce sort et faire en sorte que l'arme émette une explosion de rayonnement. Chaque créature de votre choix que vous pouvez voir à 9 mètres ou moins de l'arme doit effectuer un jet de sauvegarde de Constitution. En cas d'échec, une créature subit 4d8 dégâts radiants et est aveuglée pendant 1 minute. En cas de réussite, une créature subit la moitié de ces dégâts et n'est pas aveuglée. À la fin de chacun de ses tours, une créature aveuglée peut effectuer un jet de sauvegarde de Constitution, mettant fin à l'effet sur elle-même en cas de réussite. +Spell/&HolyWeaponDescription=Vous imprégnez une arme que vous touchez d'un pouvoir sacré. Jusqu'à la fin du sort, l'arme émet une lumière vive dans un rayon de 9 mètres et une lumière tamisée sur 9 mètres supplémentaires. De plus, les attaques d'armes effectuées avec cette arme infligent 2d8 dégâts radiants supplémentaires en cas de succès. Si l'arme n'est pas déjà une arme magique, elle en devient une pendant la durée du sort. En tant qu'action bonus à votre tour, si l'arme est à 9 mètres ou moins, vous pouvez annuler ce sort et faire en sorte que l'arme émette une explosion de rayonnement. Chaque créature de votre choix que vous pouvez voir à 9 mètres ou moins de l'arme doit effectuer un jet de sauvegarde de Constitution. En cas d'échec, une créature subit 4d8 dégâts radiants et est aveuglée pendant 1 minute. En cas de réussite, une créature subit la moitié de ces dégâts et n'est pas aveuglée. À la fin de chacun de ses tours, une créature aveuglée peut effectuer un jet de sauvegarde de Constitution, mettant fin à l'effet sur elle-même en cas de réussite. Spell/&HolyWeaponTitle=Arme sacrée Spell/&IncinerationDescription=Les flammes encerclent une créature visible à portée. La cible doit réussir un jet de sauvegarde de Dextérité. Elle subit 8d6 dégâts de feu en cas d'échec, ou la moitié de ces dégâts en cas de réussite. En cas d'échec, la cible brûle également pendant la durée du sort. La cible en feu projette une lumière vive dans un rayon de 9 mètres et une lumière tamisée sur 9 mètres supplémentaires et subit 8d6 dégâts de feu au début de chacun de ses tours. Spell/&IncinerationTitle=Immolation diff --git a/SolastaUnfinishedBusiness/Translations/it/Others-it.txt b/SolastaUnfinishedBusiness/Translations/it/Others-it.txt index 96f6cee8e2..11ecbe18c4 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Others-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Others-it.txt @@ -311,6 +311,7 @@ Tooltip/&Tag9000Title=Effetto personalizzato Tooltip/&TagDamageChaosBoltTitle=Danno caotico Tooltip/&TagUnfinishedBusinessTitle=Lavoro incompleto Tooltip/&TargetMeleeWeaponError=Non è possibile eseguire un attacco corpo a corpo su questo bersaglio poiché non si trova entro {0} +Tooltip/&TargetMustHaveHolyWeapon=Il bersaglio deve avere un'arma sacra Tooltip/&TargetMustNotBeSurprised=Il bersaglio non deve essere sorpreso Tooltip/&TargetMustUnderstandYou=Il bersaglio deve capire il tuo comando UI/&CustomFeatureSelectionStageDescription=Seleziona funzionalità extra per la tua classe/sottoclasse. diff --git a/SolastaUnfinishedBusiness/Translations/it/Spells/Spells05-it.txt b/SolastaUnfinishedBusiness/Translations/it/Spells/Spells05-it.txt index 05609310d3..b512dead13 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Spells/Spells05-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Spells/Spells05-it.txt @@ -34,7 +34,7 @@ Spell/&EmpoweredKnowledgeDescription=La tua magia approfondisce la comprensione Spell/&EmpoweredKnowledgeTitle=Potenziamento delle competenze Spell/&FarStepDescription=Ti teletrasporti fino a 60 piedi in uno spazio non occupato che puoi vedere. In ogni tuo turno prima che l'incantesimo finisca, puoi usare un'azione bonus per teletrasportarti di nuovo in questo modo. Spell/&FarStepTitle=Passo lontano -Spell/&HolyWeaponDescription=Infondi un'arma che tocchi con potere sacro. Finché l'incantesimo non termina, l'arma emette luce intensa in un raggio di 30 piedi e luce fioca per altri 30 piedi. Inoltre, gli attacchi con arma effettuati con essa infliggono 2d8 danni radianti extra a colpo andato a segno. Se l'arma non è già un'arma magica, lo diventa per la durata. Come azione bonus nel tuo turno, se stai impugnando l'arma, puoi interrompere questo incantesimo e far sì che l'arma emetta un'esplosione di radiosità. Ogni creatura a tua scelta che puoi vedere entro 30 piedi dall'arma deve effettuare un tiro salvezza su Costituzione. Se fallisce il tiro salvezza, una creatura subisce 4d8 danni radianti e rimane accecata per 1 minuto. Se supera il tiro salvezza, una creatura subisce la metà dei danni e non rimane accecata. Alla fine di ogni suo turno, una creatura accecata può effettuare un tiro salvezza su Costituzione, terminando l'effetto su se stessa in caso di successo. +Spell/&HolyWeaponDescription=Infondi un'arma che tocchi con potere sacro. Finché l'incantesimo non termina, l'arma emette luce intensa in un raggio di 30 piedi e luce fioca per altri 30 piedi. Inoltre, gli attacchi con arma effettuati con essa infliggono 2d8 danni radianti extra a colpo andato a segno. Se l'arma non è già un'arma magica, lo diventa per la durata. Come azione bonus nel tuo turno, se l'arma si trova entro 30 piedi, puoi interrompere questo incantesimo e far sì che l'arma emetta un'esplosione di radiosità. Ogni creatura a tua scelta che puoi vedere entro 30 piedi dall'arma deve effettuare un tiro salvezza su Costituzione. Se fallisce il tiro salvezza, una creatura subisce 4d8 danni radianti e rimane accecata per 1 minuto. Se supera il tiro salvezza, una creatura subisce la metà dei danni e non rimane accecata. Alla fine di ogni suo turno, una creatura accecata può effettuare un tiro salvezza su Costituzione, terminando l'effetto su se stessa in caso di successo. Spell/&HolyWeaponTitle=Arma sacra Spell/&IncinerationDescription=Le fiamme avvolgono una creatura che puoi vedere entro il raggio d'azione. Il bersaglio deve effettuare un tiro salvezza su Destrezza. Subisce 8d6 danni da fuoco se fallisce il tiro salvezza, o la metà dei danni se lo supera. Se fallisce il tiro salvezza, il bersaglio brucia anche per la durata dell'incantesimo. Il bersaglio in fiamme diffonde luce intensa in un raggio di 30 piedi e luce fioca per altri 30 piedi e subisce 8d6 danni da fuoco all'inizio di ogni suo turno. Spell/&IncinerationTitle=Immolazione diff --git a/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt index f42b4d0eb5..5ea03fed71 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt @@ -311,6 +311,7 @@ Tooltip/&Tag9000Title=カスタムエフェクト Tooltip/&TagDamageChaosBoltTitle=カオスダメージ Tooltip/&TagUnfinishedBusinessTitle=未完の仕事 Tooltip/&TargetMeleeWeaponError={0} 内にないため、このターゲットに近接攻撃を実行できません +Tooltip/&TargetMustHaveHolyWeapon=対象は聖なる武器を持っている必要があります Tooltip/&TargetMustNotBeSurprised=ターゲットは驚いてはいけない Tooltip/&TargetMustUnderstandYou=ターゲットはあなたのコマンドを理解する必要があります UI/&CustomFeatureSelectionStageDescription=クラス/サブクラスの追加機能を選択します。 diff --git a/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells05-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells05-ja.txt index e5b9b361a3..0e64a99e9b 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells05-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells05-ja.txt @@ -34,7 +34,7 @@ Spell/&EmpoweredKnowledgeDescription=あなたの魔法は、クリーチャー Spell/&EmpoweredKnowledgeTitle=強化された知識 Spell/&FarStepDescription=最大 60 フィートの、目に見える空きスペースまでテレポートします。呪文が終了する前の各ターンで、ボーナス アクションを使用して、この方法で再びテレポートできます。 Spell/&FarStepTitle=ファーステップ -Spell/&HolyWeaponDescription=触れた武器に聖なる力を吹き込む。呪文が終了するまで、武器は半径 30 フィートに明るい光を放ち、さらに 30 フィートに薄暗い光を放つ。加えて、この武器による攻撃は命中時に追加で 2d8 の光輝ダメージを与える。武器がまだ魔法の武器でない場合、持続時間中は魔法の武器になる。自分のターンにボーナス アクションとして、武器を装備している場合、この呪文を解除して武器から光のバーストを発させることができる。武器から 30 フィート以内にいる、自分が見ることができる任意のクリーチャーは、それぞれ【耐久力】セーヴィング スローを行わなければならない。セーヴに失敗すると、クリーチャーは 4d8 の光輝ダメージを受け、1 分間盲目になる。セーヴに成功すると、クリーチャーは半分のダメージしか受けず、盲目にならない。盲目になったクリーチャーは、自分のターンの終わりに【耐久力】セーヴィング スローを行うことができ、成功すると自分への効果を終了できる。 +Spell/&HolyWeaponDescription=術者は触れた武器に聖なる力を吹き込む。呪文が終了するまで、武器は半径 30 フィートに明るい光を放ち、さらに 30 フィートに薄暗い光を放つ。加えて、この武器による攻撃は命中時に追加で 2d8 の光輝ダメージを与える。武器がすでに魔法の武器でない場合、持続時間中は魔法の武器になる。自分のターンのボーナス アクションとして、武器が 30 フィート以内にあれば、術者はこの呪文を解除し、武器から光のバーストを発させることができる。武器から 30 フィート以内にいる、術者が見ることができるクリーチャーはそれぞれ、【耐久力】セーヴィング スローを行わなければならない。セーヴに失敗すると、クリーチャーは 4d8 の光輝ダメージを受け、1 分間盲目になる。セーヴに成功すると、クリーチャーは半分のダメージしか受けず、盲目にならない。盲目になったクリーチャーは、自分のターンの終了時に【耐久力】セーヴィング スローを行うことができ、成功すると自分への効果を終了できる。 Spell/&HolyWeaponTitle=聖なる武器 Spell/&IncinerationDescription=範囲内に見える 1 体の生き物が炎で覆われます。ターゲットは器用さセーヴィングスローを行わなければなりません。セーブに失敗した場合は 8d6 の火ダメージを受け、成功した場合はその半分のダメージを受けます。セーブに失敗すると、ターゲットも呪文の持続時間の間燃えます。燃えているターゲットは半径 30 フィートで明るい光を放ち、さらに 30 フィートで薄暗い光を放ち、各ターンの開始時に 8d6 の火災ダメージを受けます。 Spell/&IncinerationTitle=焼身自殺 diff --git a/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt index 10892f7e13..711a5c8f43 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt @@ -311,6 +311,7 @@ Tooltip/&Tag9000Title=맞춤 효과 Tooltip/&TagDamageChaosBoltTitle=혼돈스러운 피해 Tooltip/&TagUnfinishedBusinessTitle=끝나지 않은 사업 Tooltip/&TargetMeleeWeaponError={0} 내에 없기 때문에 이 대상에 근접 공격을 수행할 수 없습니다. +Tooltip/&TargetMustHaveHolyWeapon=대상은 신성한 무기를 가지고 있어야 합니다. Tooltip/&TargetMustNotBeSurprised=타겟은 놀라지 않아야 합니다. Tooltip/&TargetMustUnderstandYou=타겟은 당신의 명령을 이해해야 합니다 UI/&CustomFeatureSelectionStageDescription=클래스/하위 클래스에 대한 추가 기능을 선택하세요. diff --git a/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells05-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells05-ko.txt index a420f57dbf..6764208798 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells05-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells05-ko.txt @@ -34,7 +34,7 @@ Spell/&EmpoweredKnowledgeDescription=당신의 마법은 생물이 자신의 재 Spell/&EmpoweredKnowledgeTitle=강화된 지식 Spell/&FarStepDescription=당신은 당신이 볼 수 있는 빈 공간으로 최대 60피트까지 순간이동합니다. 주문이 끝나기 전 매 턴마다 보너스 액션을 사용하여 이런 방식으로 다시 순간이동할 수 있습니다. Spell/&FarStepTitle=먼 단계 -Spell/&HolyWeaponDescription=당신은 신성한 힘으로 당신이 만지는 무기에 마법을 부여합니다. 주문이 끝날 때까지 무기는 30피트 반경에 밝은 빛을 내고, 추가로 30피트에 희미한 빛을 냅니다. 추가로, 이 무기로 하는 무기 공격은 명중 시 추가로 2d8의 광채 피해를 입힙니다. 무기가 아직 마법 무기가 아니라면, 지속 시간 동안 마법 무기가 됩니다. 당신의 턴에 보너스 액션으로, 무기를 휘두르고 있다면, 이 주문을 해제하고 무기가 광채를 폭발하게 할 수 있습니다. 무기에서 30피트 이내에 보이는 당신이 선택한 각 생물은 체력 구원 굴림을 해야 합니다. 구원에 실패하면, 생물은 4d8의 광채 피해를 입고, 1분 동안 실명합니다. 구원에 성공하면, 생물은 절반의 피해를 입고 실명되지 않습니다. 각 턴이 끝날 때, 실명한 생물은 체력 구원 굴림을 할 수 있으며, 성공 시 자신에게 미치는 효과가 끝납니다. +Spell/&HolyWeaponDescription=당신은 신성한 힘으로 당신이 만지는 무기에 마법을 부여합니다. 주문이 끝날 때까지 무기는 30피트 반경에 밝은 빛을 내고, 추가로 30피트에 희미한 빛을 냅니다. 추가로, 이 무기로 하는 무기 공격은 명중 시 2d8의 추가 광채 피해를 입힙니다. 무기가 이미 마법 무기가 아니라면, 지속 시간 동안 마법 무기가 됩니다. 당신의 턴에 보너스 액션으로, 무기가 30피트 이내에 있다면, 당신은 이 주문을 해제하고 무기가 광채의 폭발을 내뿜게 할 수 있습니다. 당신이 무기에서 30피트 이내에 볼 수 있는 당신이 선택한 각 생물은 체력 구원 굴림을 해야 합니다. 구원에 실패하면, 생물은 4d8의 광채 피해를 입고, 1분 동안 실명합니다. 구원에 성공하면, 생물은 절반의 피해를 입고 실명되지 않습니다. 각 턴이 끝날 때, 실명한 생물은 체력 구원 굴림을 할 수 있으며, 성공 시 자신에게 미치는 효과가 끝납니다. Spell/&HolyWeaponTitle=신성한 무기 Spell/&IncinerationDescription=화염은 범위 내에서 볼 수 있는 생물 한 마리를 둘러싸고 있습니다. 대상은 민첩 내성 굴림을 해야 합니다. 저장에 실패하면 8d6의 화염 피해를 입으며, 성공하면 절반의 피해를 입습니다. 저장에 실패하면 대상도 주문 지속 시간 동안 불타게 됩니다. 불타는 대상은 30피트 반경에서 밝은 빛을 발산하고 추가로 30피트 동안 희미한 빛을 발산하며 각 턴이 시작될 때 8d6의 화염 피해를 입습니다. Spell/&IncinerationTitle=제물 diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt index d907300af1..17b69ae868 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt @@ -311,6 +311,7 @@ Tooltip/&Tag9000Title=Efeito personalizado Tooltip/&TagDamageChaosBoltTitle=Dano Caótico Tooltip/&TagUnfinishedBusinessTitle=Negócios inacabados Tooltip/&TargetMeleeWeaponError=Não é possível realizar ataque corpo a corpo neste alvo, pois ele não está a {0} +Tooltip/&TargetMustHaveHolyWeapon=O alvo deve ter uma arma sagrada Tooltip/&TargetMustNotBeSurprised=O alvo não deve ser surpreendido Tooltip/&TargetMustUnderstandYou=O alvo deve entender seu comando UI/&CustomFeatureSelectionStageDescription=Selecione recursos extras para sua classe/subclasse. diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells05-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells05-pt-BR.txt index 2b57c6d9bd..6cd9b3aa5d 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells05-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells05-pt-BR.txt @@ -34,7 +34,7 @@ Spell/&EmpoweredKnowledgeDescription=Sua magia aprofunda a compreensão de uma c Spell/&EmpoweredKnowledgeTitle=Empoderamento de Habilidades Spell/&FarStepDescription=Você se teleporta até 60 pés para um espaço desocupado que você pode ver. Em cada um dos seus turnos antes que a magia termine, você pode usar uma ação bônus para se teleportar dessa forma novamente. Spell/&FarStepTitle=Passo Distante -Spell/&HolyWeaponDescription=Você imbui uma arma que você toca com poder sagrado. Até que a magia termine, a arma emite luz brilhante em um raio de 30 pés e luz fraca por mais 30 pés. Além disso, ataques de arma feitos com ela causam 2d8 de dano radiante extra em um acerto. Se a arma ainda não for uma arma mágica, ela se torna uma pela duração. Como uma ação bônus no seu turno, se estiver empunhando a arma, você pode dispensar esta magia e fazer com que a arma emita uma explosão de radiância. Cada criatura de sua escolha que você puder ver a até 30 pés da arma deve fazer um teste de resistência de Constituição. Em uma falha, uma criatura sofre 4d8 de dano radiante e fica cega por 1 minuto. Em um sucesso, uma criatura sofre metade do dano e não fica cega. No final de cada um de seus turnos, uma criatura cega pode fazer um teste de resistência de Constituição, encerrando o efeito sobre si mesma em um sucesso. +Spell/&HolyWeaponDescription=Você imbui uma arma que você toca com poder sagrado. Até que a magia termine, a arma emite luz brilhante em um raio de 30 pés e luz fraca por mais 30 pés. Além disso, ataques de arma feitos com ela causam 2d8 de dano radiante extra em um acerto. Se a arma ainda não for uma arma mágica, ela se torna uma pela duração. Como uma ação bônus no seu turno, se a arma estiver a 30 pés, você pode dispensar esta magia e fazer com que a arma emita uma explosão de radiância. Cada criatura de sua escolha que você puder ver a 30 pés da arma deve fazer um teste de resistência de Constituição. Em uma falha, uma criatura sofre 4d8 de dano radiante e fica cega por 1 minuto. Em um sucesso, uma criatura sofre metade do dano e não fica cega. No final de cada um de seus turnos, uma criatura cega pode fazer um teste de resistência de Constituição, encerrando o efeito sobre si mesma em um sucesso. Spell/&HolyWeaponTitle=Arma Sagrada Spell/&IncinerationDescription=Chamas envolvem uma criatura que você possa ver dentro do alcance. O alvo deve fazer um teste de resistência de Destreza. Ele sofre 8d6 de dano de fogo em uma falha na resistência, ou metade do dano em uma falha bem-sucedida. Em uma falha na resistência, o alvo também queima pela duração da magia. O alvo em chamas emite luz brilhante em um raio de 30 pés e luz fraca por mais 30 pés e sofre 8d6 de dano de fogo no início de cada um de seus turnos. Spell/&IncinerationTitle=Imolação diff --git a/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt index 87af59347d..d5bc3330b6 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt @@ -311,6 +311,7 @@ Tooltip/&Tag9000Title=Кастомный эффект Tooltip/&TagDamageChaosBoltTitle=Хаотичный урон Tooltip/&TagUnfinishedBusinessTitle=Неоконченное Дело Tooltip/&TargetMeleeWeaponError=Невозможно провести атаку ближнего боя по этой цели, так как она находится вне пределов {0} +Tooltip/&TargetMustHaveHolyWeapon=Цель должна иметь святое оружие. Tooltip/&TargetMustNotBeSurprised=Цель не должна быть застигнута врасплох Tooltip/&TargetMustUnderstandYou=Цель должна понимать ваш приказ UI/&CustomFeatureSelectionStageDescription=Выберите дополнительные черты для вашего класса/архетипа. diff --git a/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells05-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells05-ru.txt index 8f1326a552..9d93903298 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells05-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells05-ru.txt @@ -34,7 +34,7 @@ Spell/&EmpoweredKnowledgeDescription=Ваша магия углубляет по Spell/&EmpoweredKnowledgeTitle=Усиление навыка Spell/&FarStepDescription=Вы телепортируетесь до 60 футов в свободное пространство, видимое вами. Вы можете каждый ваш ход до окончания действия заклинания бонусным действием телепортироваться таким образом снова. Spell/&FarStepTitle=Далёкий шаг -Spell/&HolyWeaponDescription=Вы наделяете оружие, к которому прикасаетесь, святой силой. Пока заклинание действует, оружие излучает яркий свет в радиусе 30 футов и тусклый свет в радиусе дополнительных 30 футов. Кроме того, атаки оружием, сделанные с его помощью, наносят дополнительный урон излучением 2d8 при попадании. Если оружие еще не является магическим оружием, оно становится таковым на время действия. В качестве бонусного действия в свой ход, если вы владеете оружием, вы можете отменить это заклинание и заставить оружие испустить вспышку сияния. Каждое существо по вашему выбору, которое вы можете видеть в пределах 30 футов от оружия, должно совершить спасбросок Телосложения. При провале спасброска существо получает 4d8 урона излучением и ослепляется на 1 минуту. При успешном спасброске существо получает половину урона и не ослепляется. В конце каждого своего хода ослепленное существо может совершить спасбросок Телосложения, прекращая эффект на себе при успехе. +Spell/&HolyWeaponDescription=Вы наделяете оружие, к которому прикасаетесь, святой силой. Пока заклинание действует, оружие излучает яркий свет в радиусе 30 футов и тусклый свет в радиусе дополнительных 30 футов. Кроме того, атаки оружием, сделанные с его помощью, наносят дополнительный урон излучением 2d8 при попадании. Если оружие еще не является магическим оружием, оно становится таковым на время действия. В качестве бонусного действия в свой ход, если оружие находится в пределах 30 футов, вы можете отменить это заклинание и заставить оружие испустить вспышку сияния. Каждое существо по вашему выбору, которое вы можете видеть в пределах 30 футов от оружия, должно совершить спасбросок Телосложения. При провале спасброска существо получает 4d8 урона излучением и ослепляется на 1 минуту. При успешном спасброске существо получает половину урона и не ослепляется. В конце каждого своего хода ослепленное существо может совершить спасбросок Телосложения, заканчивая эффект на себе при успехе. Spell/&HolyWeaponTitle=Священное Оружие Spell/&IncinerationDescription=Одно существо, которое вы можете видеть в пределах дистанции, охватывает пламя. Цель должна совершить спасбросок Ловкости. Существо получает 8d6 урона огнём при провале или половину этого урона при успехе. Кроме того, при провале цель воспламеняется на время действия заклинания. Горящая цель испускает яркий свет в пределах 30 футов и тусклый свет в пределах ещё 30 футов и получает 8d6 урона огнём в начале каждого своего хода. Spell/&IncinerationTitle=Испепеление diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt index 38c1bda2f6..b0207018d8 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt @@ -311,6 +311,7 @@ Tooltip/&Tag9000Title=自定义效果 Tooltip/&TagDamageChaosBoltTitle=混沌伤害 Tooltip/&TagUnfinishedBusinessTitle=未竟之业 Tooltip/&TargetMeleeWeaponError=无法对该目标进行近战攻击,因为目标不在{0}内 +Tooltip/&TargetMustHaveHolyWeapon=目标必须持有神圣武器 Tooltip/&TargetMustNotBeSurprised=目标不能感到惊讶 Tooltip/&TargetMustUnderstandYou=目标必须理解你的命令 UI/&CustomFeatureSelectionStageDescription=为你的职业/子职业选择额外的特性。 diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells05-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells05-zh-CN.txt index 2304e2a320..22c785916a 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells05-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells05-zh-CN.txt @@ -34,7 +34,7 @@ Spell/&EmpoweredKnowledgeDescription=你的魔法加深了生物对自己天赋 Spell/&EmpoweredKnowledgeTitle=知识赋能 Spell/&FarStepDescription=你传送到最远 60 尺的一个你能看到的未被占据的空间。在法术结束前的每个回合中,你都可以使用附赠动作再次以这种方式传送。 Spell/&FarStepTitle=渺远步 -Spell/&HolyWeaponDescription=你为触碰的武器注入神圣力量。在法术结束前,该武器会在 30 英尺半径范围内发出明亮光线,并在额外 30 英尺范围内发出昏暗光线。此外,使用该武器进行的武器攻击命中时会造成额外的 2d8 辐射伤害。如果该武器之前不是魔法武器,则会在持续时间内变为魔法武器。作为你回合的奖励动作,如果你持有该武器,你可以解除此法术并让武器发出一阵光芒。你在武器 30 英尺范围内可以看到每个你选择的生物都必须进行体质豁免检定。如果豁免失败,生物将受到 4d8 辐射伤害,并且失明 1 分钟。如果豁免成功,生物受到的伤害减半并且不会失明。在每个回合结束时,失明的生物可以进行体质豁免检定,成功则结束对自己的影响。 +Spell/&HolyWeaponDescription=你为触碰的武器注入神圣力量。在法术结束前,该武器会在 30 英尺半径范围内发出明亮光线,并在额外 30 英尺范围内发出昏暗光线。此外,使用该武器进行的武器攻击命中时会造成额外的 2d8 辐射伤害。如果该武器之前不是魔法武器,则会在法术持续时间内变为魔法武器。作为你的回合中的奖励动作,如果武器在 30 英尺范围内,你可以解除此法术并让武器发出一阵光芒。你在武器 30 英尺范围内可以看到的每个你选择的生物都必须进行体质豁免检定。如果豁免失败,生物将受到 4d8 辐射伤害,并且失明 1 分钟。如果豁免成功,生物受到的伤害减半并且不会失明。在每个回合结束时,失明的生物可以进行体质豁免检定,成功则结束对自己的影响。 Spell/&HolyWeaponTitle=神圣武器 Spell/&IncinerationDescription=火焰包围着范围内你能看到的一种生物。目标必须进行敏捷豁免检定。豁免失败会造成 8d6 火焰伤害,成功豁免则受到一半伤害。如果豁免失败,目标也会在法术持续时间内燃烧。燃烧的目标会在 30 尺半径内发出明亮的光芒,并在额外 30 尺的范围内发出昏暗的光芒,并在每个回合开始时受到 8d6 火焰伤害。 Spell/&IncinerationTitle=焚烧术 From 6caeeb07e4219f6c22cf760f3a73463ae0086bab Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Thu, 12 Sep 2024 17:52:25 -0700 Subject: [PATCH 133/212] add 'Add the Fall Prone action to all playable races' setting --- .../Api/DatabaseHelper-RELEASE.cs | 1 + SolastaUnfinishedBusiness/ChangelogHistory.txt | 18 +++++++++--------- .../Displays/CharacterDisplay.cs | 7 +++++++ .../Models/CharacterContext.cs | 8 ++++++++ SolastaUnfinishedBusiness/Settings.cs | 1 + .../Translations/de/Settings-de.txt | 1 + .../Translations/en/Settings-en.txt | 1 + .../Translations/es/Settings-es.txt | 1 + .../Translations/fr/Settings-fr.txt | 1 + .../Translations/it/Settings-it.txt | 1 + .../Translations/ja/Settings-ja.txt | 1 + .../Translations/ko/Settings-ko.txt | 1 + .../Translations/pt-BR/Settings-pt-BR.txt | 1 + .../Translations/ru/Settings-ru.txt | 1 + .../Translations/zh-CN/Settings-zh-CN.txt | 1 + 15 files changed, 36 insertions(+), 9 deletions(-) diff --git a/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs b/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs index 7d58ede0e6..c9f68738be 100644 --- a/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs +++ b/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs @@ -32,6 +32,7 @@ internal static class ActionDefinitions internal static ActionDefinition CastInvocation { get; } = GetDefinition("CastInvocation"); internal static ActionDefinition CastNoCost { get; } = GetDefinition("CastNoCost"); internal static ActionDefinition DashBonus { get; } = GetDefinition("DashBonus"); + internal static ActionDefinition DropProne { get; } = GetDefinition("DropProne"); internal static ActionDefinition ReapplyEffect { get; } = GetDefinition("ReapplyEffect"); internal static ActionDefinition SpiritRage { get; } = GetDefinition("SpiritRage"); diff --git a/SolastaUnfinishedBusiness/ChangelogHistory.txt b/SolastaUnfinishedBusiness/ChangelogHistory.txt index 75386ca967..7c30371eb2 100644 --- a/SolastaUnfinishedBusiness/ChangelogHistory.txt +++ b/SolastaUnfinishedBusiness/ChangelogHistory.txt @@ -1,29 +1,29 @@ 1.5.97.30: - added Command, Dissonant Whispers, Holy Weapon, and Swift Quiver spells -- added Character > Rules > 'Enable push and pull motion effects to also work on up/down axis' setting -- added Interface > Game UI > 'Enable CTRL click-drag to bypass quest items checks on drop' setting -- fixed Barbarian Sundering Blow interaction with Call Lightning, and other attack proxies +- added Character > General 'Add the Fall Prone action to all playable races' +- added Character > Rules > 'Enable push and pull motion effects to also work on up/down axis' +- added Interface > Game UI > 'Enable CTRL click-drag to bypass quest items checks on drop' +- fixed Barbarian Sundering Blow interaction with Call Lightning - fixed Bardic Inspiration, Indomitable Resistances, and Legendary Resistances save logic - fixed Bend Luck, Flash of Genius, Inspiring Protection, Shield Master, and Weal/Woe reaction consumption -- fixed Demonic Influence adding all location enemies as new contenders [VANILLA] +- fixed Circle of the Cosmos woe ability checks reaction not triggering +- fixed Demonic Influence adding all location enemies to battle [VANILLA] - fixed Dwarven Fortitude, and Magical Guidance incorrectly consuming a reaction - fixed Exploiter feat not checking for reactions from 2nd target onwards - fixed Green-Flame Blade cantrip adding extra damage to subsequent attacks on same turn - fixed Lucky, and Mage Slayer feats double consumption - fixed Martial Commander coordinated defense to require an attack first [VANILLA] - fixed Party Editor to register/unregister powers from feats -- fixed Path of the Wild Magic retribution, and Patron Archfey misty step to only react against enemies +- fixed Path of the Wild Magic retribution, and Patron Archfey misty step reacting against allies - fixed Power Attack feat not triggering on unarmed attacks - fixed Quickened interaction with melee attack cantrips - fixed Wrathful Smite to do a wisdom ability check against caster DC -- improved ability checks to also allow reactions on success -- improved gadgets to trigger "try alter save outcome" type reactions [VANILLA] +- improved gadgets to trigger "try alter save outcome" reactions [VANILLA] - improved Maneuvering Attack, and Martial Warlord strategic repositioning to use a run stance - improved mod UI to ensure all settings required to be in sync on MP sessions are now under Gameplay -- improved saving roll reaction modal descriptions [Circle of the Cosmos, Sorcerer Wild Magic, etc.] +- improved saving roll reaction modal descriptions - improved Sorcerer Wild Magic tides of chaos, Conversion Slots, and Shorthand versatilities to react on ability checks -- improved spells documentation dump to include allowed casting classes - improved victory modal export behavior to allow heroes not in pool to be exported [VANILLA] KNOWN ISSUES: diff --git a/SolastaUnfinishedBusiness/Displays/CharacterDisplay.cs b/SolastaUnfinishedBusiness/Displays/CharacterDisplay.cs index d12fc11cfe..07f3adfece 100644 --- a/SolastaUnfinishedBusiness/Displays/CharacterDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/CharacterDisplay.cs @@ -50,6 +50,13 @@ internal static void DisplayCharacter() UI.Label(); UI.Label(); + toggle = Main.Settings.AddFallProneActionToAllRaces; + if (UI.Toggle(Gui.Localize("ModUi/&AddFallProneActionToAllRaces"), ref toggle, UI.AutoWidth())) + { + Main.Settings.AddFallProneActionToAllRaces = toggle; + CharacterContext.SwitchProneAction(); + } + toggle = Main.Settings.AddHelpActionToAllRaces; if (UI.Toggle(Gui.Localize("ModUi/&AddHelpActionToAllRaces"), ref toggle, UI.AutoWidth())) { diff --git a/SolastaUnfinishedBusiness/Models/CharacterContext.cs b/SolastaUnfinishedBusiness/Models/CharacterContext.cs index 5c1c8d8f77..77e718722b 100644 --- a/SolastaUnfinishedBusiness/Models/CharacterContext.cs +++ b/SolastaUnfinishedBusiness/Models/CharacterContext.cs @@ -219,6 +219,7 @@ internal static void LateLoad() SwitchFighterLevelToIndomitableSavingReroll(); SwitchFighterWeaponSpecialization(); SwitchFirstLevelTotalFeats(); + SwitchProneAction(); SwitchHelpPower(); SwitchMonkAbundantKi(); SwitchMonkFightingStyle(); @@ -738,6 +739,13 @@ internal static void SwitchHelpPower() } } + internal static void SwitchProneAction() + { + DropProne.formType = Main.Settings.AddFallProneActionToAllRaces + ? ActionDefinitions.ActionFormType.Large + : ActionDefinitions.ActionFormType.Invisible; + } + internal static void SwitchDarknessPerceptive() { var races = new List diff --git a/SolastaUnfinishedBusiness/Settings.cs b/SolastaUnfinishedBusiness/Settings.cs index 511b5dae42..91f9a95db1 100644 --- a/SolastaUnfinishedBusiness/Settings.cs +++ b/SolastaUnfinishedBusiness/Settings.cs @@ -173,6 +173,7 @@ public class Settings : UnityModManager.ModSettings public bool EnableFlexibleBackgrounds { get; set; } public bool DisableSenseDarkVisionFromAllRaces { get; set; } public bool DisableSenseSuperiorDarkVisionFromAllRaces { get; set; } + public bool AddFallProneActionToAllRaces { get; set; } public bool AddHelpActionToAllRaces { get; set; } public bool EnableAlternateHuman { get; set; } public bool EnableFlexibleRaces { get; set; } diff --git a/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt b/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt index a0ddcf0593..ea52b5224a 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt @@ -5,6 +5,7 @@ ModUi/&AddBleedingToLesserRestoration=Fügen Sie den Zustand Blut ModUi/&AddCustomIconsToOfficialItems=Fügen Sie benutzerdefinierte Symbole zu offiziellen Spielgegenständen hinzu [Munition, Rezepte, Kits usw.] [Neustart erforderlich] ModUi/&AddDarknessPerceptiveToDarkRaces=Aktivieren Sie Darkness Perceptive für Darkelf, Dark Kobold und Gray Dwarf \n[Gewährt Vorteil bei Wahrnehmungsprüfungen, wenn es nicht beleuchtet ist oder sich in magischer Dunkelheit befindet] ModUi/&AddDexModifierToEnemiesInitiativeRoll=DEX-Modifikator zu Feinden hinzufügen Initiative Roll +ModUi/&AddFallProneActionToAllRaces=Füge die Aktion In den Bauch fallen zu allen spielbaren Rassen hinzu [du kannst kostenlos in den Bauch fallen] ModUi/&AddFighterLevelToIndomitableSavingReroll=Aktivieren Sie Kämpfer, um die Klassenstufe als Bonus zur Wiederholung des Unbezwingbaren Widerstands-Rettungswurfs hinzuzufügen ModUi/&AddHelpActionToAllRaces=Füge die Aktion Hilfe zu allen spielbaren Rassen hinzu [Du kannst einer befreundeten Kreatur dabei helfen, eine Kreatur innerhalb einer Zelle um dich anzugreifen] ModUi/&AddHumanoidFavoredEnemyToRanger=Aktiviere Ranger humanoide bevorzugte Feinde diff --git a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt index b5cc2563e1..9542a270e0 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt @@ -5,6 +5,7 @@ ModUi/&AddBleedingToLesserRestoration=Add the Bleeding co ModUi/&AddCustomIconsToOfficialItems=Add custom icons to official game items [ammunition, recipes, kits, etc.] [Requires Restart] ModUi/&AddDarknessPerceptiveToDarkRaces=Enable Darkness Perceptive on Darkelf, Dark Kobold, and Gray Dwarf \n[grants advantage on perception checks when unlit or under magical darkness] ModUi/&AddDexModifierToEnemiesInitiativeRoll=Add DEX modifier to enemies Initiative Roll +ModUi/&AddFallProneActionToAllRaces=Add the Fall Prone action to all playable races [you can fall prone at no cost] ModUi/&AddFighterLevelToIndomitableSavingReroll=Enable Fighter to add the class level as a bonus to Indomitable Resistance saving throw reroll ModUi/&AddHelpActionToAllRaces=Add the Help action to all playable races [you can aid a friendly creature in attacking a creature within 1 cell of you] ModUi/&AddHumanoidFavoredEnemyToRanger=Enable Ranger humanoid preferred enemies diff --git a/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt b/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt index 9e61feb7d9..f808f43292 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt @@ -5,6 +5,7 @@ ModUi/&AddBleedingToLesserRestoration=Agregue la condición de Sa ModUi/&AddCustomIconsToOfficialItems=Añade íconos personalizados a los elementos oficiales del juego [municiones, recetas, kits, etc.] [Requiere reinicio] ModUi/&AddDarknessPerceptiveToDarkRaces=Habilite Percepción de oscuridad en Darkelf, Dark Kobold y Grey Dwarf. color> \n[otorga ventaja en las pruebas de percepción cuando no está iluminado o bajo oscuridad mágica] ModUi/&AddDexModifierToEnemiesInitiativeRoll=Añade el modificador DEX a los enemigos Tiro de iniciativa +ModUi/&AddFallProneActionToAllRaces=Añade la acción Caer boca abajo a todas las razas jugables [puedes caer boca abajo sin coste] ModUi/&AddFighterLevelToIndomitableSavingReroll=Habilite Luchador para agregar el nivel de clase como bonificación a la repetición de la tirada de salvación de Resistencia Indomable. ModUi/&AddHelpActionToAllRaces=Agrega la acción Ayuda a todas las razas jugables [puedes ayudar a una criatura amiga a atacar a una criatura dentro de 1 celda de ti] ModUi/&AddHumanoidFavoredEnemyToRanger=Habilitar enemigos preferidos humanoides Ranger diff --git a/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt index 80cfa0aae4..1b27a57531 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt @@ -5,6 +5,7 @@ ModUi/&AddBleedingToLesserRestoration=Ajoutez la condition Saigne ModUi/&AddCustomIconsToOfficialItems=Ajoutez des icônes personnalisées aux objets officiels du jeu [munitions, recettes, kits, etc.] [Nécessite un redémarrage] ModUi/&AddDarknessPerceptiveToDarkRaces=Activez Darkness Perceptive sur Darkelf, Dark Kobold et Grey Dwarf \n[accorde un avantage sur les tests de perception lorsqu'il n'est pas éclairé ou dans l'obscurité magique] ModUi/&AddDexModifierToEnemiesInitiativeRoll=Ajoutez un modificateur DEX aux ennemis Initiative Roll +ModUi/&AddFallProneActionToAllRaces=Ajoutez l'action Tomber à terre à toutes les races jouables [vous pouvez tomber à terre sans frais] ModUi/&AddFighterLevelToIndomitableSavingReroll=Activez Combattant pour ajouter le niveau de classe en bonus à la relance du jet de sauvegarde de la Résistance indomptable. ModUi/&AddHelpActionToAllRaces=Ajoutez l'action Aide à toutes les races jouables [vous pouvez aider une créature amie à attaquer une créature à moins d'une cellule de vous] ModUi/&AddHumanoidFavoredEnemyToRanger=Activer les ennemis préférés humanoïdes Ranger diff --git a/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt b/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt index a50ec74ee7..e63b807aac 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt @@ -5,6 +5,7 @@ ModUi/&AddBleedingToLesserRestoration=Aggiungi la condizione San ModUi/&AddCustomIconsToOfficialItems=Aggiungi icone personalizzate agli oggetti di gioco ufficiali [munizioni, ricette, kit, ecc.] [Richiede il riavvio] ModUi/&AddDarknessPerceptiveToDarkRaces=Abilita Percettivo dell'oscurità su Elfo Oscuro, Coboldo Oscuro e Nano Grigio \n[concede vantaggio alle prove di percezione quando spento o nell'oscurità magica] ModUi/&AddDexModifierToEnemiesInitiativeRoll=Aggiungi modificatore DEX al tiro di iniziativa dei nemici +ModUi/&AddFallProneActionToAllRaces=Aggiungi l'azione Cadere prono a tutte le razze giocabili [puoi cadere prono senza alcun costo] ModUi/&AddFighterLevelToIndomitableSavingReroll=Abilita Guerriero per aggiungere il livello di classe come bonus al tiro salvezza di Resistenza indomabile ModUi/&AddHelpActionToAllRaces=Aggiungi l'azione Aiuto a tutte le razze giocabili [puoi aiutare una creatura amica ad attaccare una creatura entro 1 cella da te] ModUi/&AddHumanoidFavoredEnemyToRanger=Abilita i nemici preferiti umanoidi Ranger diff --git a/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt index c6adfc0db3..274d77b409 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt @@ -5,6 +5,7 @@ ModUi/&AddBleedingToLesserRestoration=出血状態を[弾薬、レシピ、キットなど] [再起動が必要] にカスタム アイコンを追加します。 ModUi/&AddDarknessPerceptiveToDarkRaces=ダークエルフ、ダークコボルト、グレイドワーフの闇の知覚を有効にするcolor> \n[照明が当たっていないとき、または魔法の暗闇の下で知覚チェックで有利になる] ModUi/&AddDexModifierToEnemiesInitiativeRoll=敵に DEX 修飾子を追加する イニシアティブ ロール +ModUi/&AddFallProneActionToAllRaces=すべてのプレイ可能な種族に うつ伏せになる アクションを追加します [コストをかけずにうつ伏せになることができます] ModUi/&AddFighterLevelToIndomitableSavingReroll=ファイターを有効にして、不屈の抵抗セービングスローのリロールにボーナスとしてクラスレベルを追加します ModUi/&AddHelpActionToAllRaces=すべてのプレイ可能な種族に助けるアクションを追加します[味方のクリーチャーが自分の1マス以内にいるクリーチャーを攻撃するのを助けることができます] ModUi/&AddHumanoidFavoredEnemyToRanger=レンジャー が好む人型の敵を有効にする diff --git a/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt index 913ea3dcca..e3583f38aa 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt @@ -5,6 +5,7 @@ ModUi/&AddBleedingToLesserRestoration=상급 및 [탄약, 조리법, 키트 등] [다시 시작해야 함] ModUi/&AddDarknessPerceptiveToDarkRaces=Darkelf, Dark Kobold 및 Gray Dwarf에서 Darkness Perceptive를 활성화하세요. color> \n[빛이 없거나 마법의 어둠 속에서 인지 검사에 이점을 부여합니다.] ModUi/&AddDexModifierToEnemiesInitiativeRoll=적에게 DEX 수정치를 추가합니다 이니셔티브 롤 +ModUi/&AddFallProneActionToAllRaces=모든 플레이 가능한 종족에 엎드려 넘어지기 액션을 추가합니다. [비용 없이 엎드려 넘어질 수 있습니다] ModUi/&AddFighterLevelToIndomitableSavingReroll=파이터를 활성화하여 클래스 레벨을 불굴의 저항 저장 던지기 재굴림에 보너스로 추가하세요. ModUi/&AddHelpActionToAllRaces=플레이 가능한 모든 종족에 도움말 액션을 추가하세요. [당신은 1셀 내의 생물을 공격하는 아군 생물을 도울 수 있습니다] ModUi/&AddHumanoidFavoredEnemyToRanger=레인저 인간형 선호 적 활성화 diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt index 8a73d310f9..1682ec2b12 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt @@ -5,6 +5,7 @@ ModUi/&AddBleedingToLesserRestoration=Adicione a condição Sangr ModUi/&AddCustomIconsToOfficialItems=Adicione ícones personalizados aos itens oficiais do jogo [munições, receitas, kits, etc.] [Requer reinicialização] ModUi/&AddDarknessPerceptiveToDarkRaces=Ative Darkness Perceptive em Darkelf, Dark Kobold e Gray Dwarf \n[concede vantagem em testes de percepção quando apagado ou sob escuridão mágica] ModUi/&AddDexModifierToEnemiesInitiativeRoll=Adicionado modificador de DES aos inimigos Rolagem de Iniciativa +ModUi/&AddFallProneActionToAllRaces=Adicione a ação Cair De bruços a todas as raças jogáveis ​​[você pode cair de bruços sem custo] ModUi/&AddFighterLevelToIndomitableSavingReroll=Habilite Lutador para adicionar o nível de classe como um bônus na nova rolagem do teste de resistência de Resistência Indomável ModUi/&AddHelpActionToAllRaces=Adicionada a ação Ajuda a todas as raças jogáveis [você pode ajudar uma criatura aliada a atacar uma criatura a até 1 espaço de você] ModUi/&AddHumanoidFavoredEnemyToRanger=Ativar inimigos humanóides preferidos do Ranger diff --git a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt index ef9f019190..b6d0c729cb 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt @@ -5,6 +5,7 @@ ModUi/&AddBleedingToLesserRestoration=Добавить Крово ModUi/&AddCustomIconsToOfficialItems=Добавить кастомные значки к официальным игровым предметам [боеприпасы, рецепты, наборы и т.д.] [Необходим перезапуск] ModUi/&AddDarknessPerceptiveToDarkRaces=Включить Восприятие тьмы для рас Тёмных эльфов, Тёмных кобольдов и Серых дварфов \n[даёт преимущество при проверках восприятия, когда персонаж не на свету или находится в магической темноте] ModUi/&AddDexModifierToEnemiesInitiativeRoll=Добавлять модификатор Ловкости к броскам Инициативы противников +ModUi/&AddFallProneActionToAllRaces=Добавьте действие Упасть ничком ко всем игровым расам [вы можете упасть ничком бесплатно] ModUi/&AddFighterLevelToIndomitableSavingReroll=Включить Воинам добавление уровня класса к повторным спасброскам умения Упорный ModUi/&AddHelpActionToAllRaces=Добавить действие Помощь всем игровым расам [вы можете помочь дружественному существу атаковать другое существо, находящееся в пределах 1 клетки от вас] ModUi/&AddHumanoidFavoredEnemyToRanger=Включить гуманоидов в список предпочтительных противников для Следопытам diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt index 99480fa18c..0f3c358c5c 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt @@ -5,6 +5,7 @@ ModUi/&AddBleedingToLesserRestoration=将流血状态添 ModUi/&AddCustomIconsToOfficialItems=为官方游戏物品添加自定义图标[弹药、配方、工具包等][需要重启] ModUi/&AddDarknessPerceptiveToDarkRaces=对黑暗精灵、黑暗狗头人和灰矮人启用黑暗感知\n[在未照明或在魔法黑暗下时察觉检定具有优势] ModUi/&AddDexModifierToEnemiesInitiativeRoll=为敌人添加 DEX 修正值主动掷骰 +ModUi/&AddFallProneActionToAllRaces=为所有可玩种族添加倒地动作[你可以无代价倒地] ModUi/&AddFighterLevelToIndomitableSavingReroll=将战士等级添加到不屈豁免重投中 ModUi/&AddHelpActionToAllRaces=为所有可玩种族添加帮助动作[你可以帮助友方生物攻击距离你5尺以内的生物] ModUi/&AddHumanoidFavoredEnemyToRanger=启用游侠类人生物宿敌 From 9bd7e69fbe28934bbaaa1533a768fc48639ac5ca Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Thu, 12 Sep 2024 18:05:29 -0700 Subject: [PATCH 134/212] fix Rescue the Dying spell reacting on enemy death --- SolastaUnfinishedBusiness/ChangelogHistory.txt | 1 + SolastaUnfinishedBusiness/Spells/SpellBuildersLevel07.cs | 1 + 2 files changed, 2 insertions(+) diff --git a/SolastaUnfinishedBusiness/ChangelogHistory.txt b/SolastaUnfinishedBusiness/ChangelogHistory.txt index 7c30371eb2..f34868a875 100644 --- a/SolastaUnfinishedBusiness/ChangelogHistory.txt +++ b/SolastaUnfinishedBusiness/ChangelogHistory.txt @@ -17,6 +17,7 @@ - fixed Party Editor to register/unregister powers from feats - fixed Path of the Wild Magic retribution, and Patron Archfey misty step reacting against allies - fixed Power Attack feat not triggering on unarmed attacks +- fixed Rescue the Dying spell reacting on enemy death - fixed Quickened interaction with melee attack cantrips - fixed Wrathful Smite to do a wisdom ability check against caster DC - improved gadgets to trigger "try alter save outcome" reactions [VANILLA] diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel07.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel07.cs index 1aa863e987..438d340f53 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel07.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel07.cs @@ -264,6 +264,7 @@ internal static IEnumerator HandleRescueTheDyingReaction( var locationCharacterService = ServiceRepository.GetService(); var contenders = locationCharacterService.PartyCharacters.Union(locationCharacterService.GuestCharacters) .Where(x => + x.Side == defender.Side && x.CanReact() && x.IsWithinRange(defender, 18) && x.CanPerceiveTarget(defender) && From fb601e6f6942d6d999df365f6d19e7683966e039 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Thu, 12 Sep 2024 18:05:54 -0700 Subject: [PATCH 135/212] update collaterals --- .../ActionDefinition/CastInvocationBonus.json | 2 +- .../ActionDefinition/CastInvocationNoCost.json | 2 +- .../ActionDefinition/CastPlaneMagicBonus.json | 2 +- .../ActionDefinition/CastPlaneMagicMain.json | 2 +- .../ActionDefinition/CastQuickened.json | 2 +- SolastaUnfinishedBusiness/Settings/empty.xml | 3 +++ 6 files changed, 8 insertions(+), 5 deletions(-) diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ActionDefinition/CastInvocationBonus.json b/Diagnostics/UnfinishedBusinessBlueprints/ActionDefinition/CastInvocationBonus.json index 9c49313057..15513e9f3e 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/ActionDefinition/CastInvocationBonus.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/ActionDefinition/CastInvocationBonus.json @@ -63,7 +63,7 @@ "a": 1.0 }, "symbolChar": "221E", - "sortOrder": 12, + "sortOrder": 43, "unusedInSolastaCOTM": false, "usedInValleyDLC": false }, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ActionDefinition/CastInvocationNoCost.json b/Diagnostics/UnfinishedBusinessBlueprints/ActionDefinition/CastInvocationNoCost.json index ad5edb39fb..f76f05806f 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/ActionDefinition/CastInvocationNoCost.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/ActionDefinition/CastInvocationNoCost.json @@ -63,7 +63,7 @@ "a": 1.0 }, "symbolChar": "221E", - "sortOrder": 12, + "sortOrder": 101, "unusedInSolastaCOTM": false, "usedInValleyDLC": false }, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ActionDefinition/CastPlaneMagicBonus.json b/Diagnostics/UnfinishedBusinessBlueprints/ActionDefinition/CastPlaneMagicBonus.json index 1101d52978..6e9a8273a2 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/ActionDefinition/CastPlaneMagicBonus.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/ActionDefinition/CastPlaneMagicBonus.json @@ -63,7 +63,7 @@ "a": 1.0 }, "symbolChar": "221E", - "sortOrder": 41, + "sortOrder": 42, "unusedInSolastaCOTM": false, "usedInValleyDLC": false }, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ActionDefinition/CastPlaneMagicMain.json b/Diagnostics/UnfinishedBusinessBlueprints/ActionDefinition/CastPlaneMagicMain.json index fe7b1b3ff1..70d2f75822 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/ActionDefinition/CastPlaneMagicMain.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/ActionDefinition/CastPlaneMagicMain.json @@ -63,7 +63,7 @@ "a": 1.0 }, "symbolChar": "221E", - "sortOrder": 10, + "sortOrder": 11, "unusedInSolastaCOTM": false, "usedInValleyDLC": false }, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ActionDefinition/CastQuickened.json b/Diagnostics/UnfinishedBusinessBlueprints/ActionDefinition/CastQuickened.json index 679cfd69a8..0b5dd97063 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/ActionDefinition/CastQuickened.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/ActionDefinition/CastQuickened.json @@ -63,7 +63,7 @@ "a": 1.0 }, "symbolChar": "221E", - "sortOrder": 0, + "sortOrder": 41, "unusedInSolastaCOTM": false, "usedInValleyDLC": false }, diff --git a/SolastaUnfinishedBusiness/Settings/empty.xml b/SolastaUnfinishedBusiness/Settings/empty.xml index b4ba966b13..4d1f148ab3 100644 --- a/SolastaUnfinishedBusiness/Settings/empty.xml +++ b/SolastaUnfinishedBusiness/Settings/empty.xml @@ -304,6 +304,7 @@ false false false + false false false false @@ -350,6 +351,7 @@ false false false + false false false false @@ -429,6 +431,7 @@ false false false + false false false false From b091cdf84cbf567730a745e703e0cb3ef6b63555 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Thu, 12 Sep 2024 18:06:18 -0700 Subject: [PATCH 136/212] auto format and clean up --- SolastaUnfinishedBusiness/Models/CharacterContext.cs | 2 +- .../ConsiderationsInfluenceEnemyProximityPatcher.cs | 2 +- SolastaUnfinishedBusiness/Subclasses/WayOfTheStormSoul.cs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/SolastaUnfinishedBusiness/Models/CharacterContext.cs b/SolastaUnfinishedBusiness/Models/CharacterContext.cs index 77e718722b..aa50b046f1 100644 --- a/SolastaUnfinishedBusiness/Models/CharacterContext.cs +++ b/SolastaUnfinishedBusiness/Models/CharacterContext.cs @@ -742,7 +742,7 @@ internal static void SwitchHelpPower() internal static void SwitchProneAction() { DropProne.formType = Main.Settings.AddFallProneActionToAllRaces - ? ActionDefinitions.ActionFormType.Large + ? ActionDefinitions.ActionFormType.Large : ActionDefinitions.ActionFormType.Invisible; } diff --git a/SolastaUnfinishedBusiness/Patches/Considerations/ConsiderationsInfluenceEnemyProximityPatcher.cs b/SolastaUnfinishedBusiness/Patches/Considerations/ConsiderationsInfluenceEnemyProximityPatcher.cs index aa3818c48a..5234d54009 100644 --- a/SolastaUnfinishedBusiness/Patches/Considerations/ConsiderationsInfluenceEnemyProximityPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/Considerations/ConsiderationsInfluenceEnemyProximityPatcher.cs @@ -47,7 +47,7 @@ private static void Score( var approachSourceGuid = rulesetCharacter.ConditionsByCategory .SelectMany(x => x.Value) .FirstOrDefault(x => - x.ConditionDefinition.Name == consideration.StringParameter)?.SourceGuid ?? 0; + x.ConditionDefinition.Name == consideration.StringParameter)?.SourceGuid ?? 0; // ReSharper disable once ForeachCanBePartlyConvertedToQueryUsingAnotherGetEnumerator foreach (var enemy in parameters.situationalInformation.RelevantEnemies) diff --git a/SolastaUnfinishedBusiness/Subclasses/WayOfTheStormSoul.cs b/SolastaUnfinishedBusiness/Subclasses/WayOfTheStormSoul.cs index e14d4ff05f..953f22f439 100644 --- a/SolastaUnfinishedBusiness/Subclasses/WayOfTheStormSoul.cs +++ b/SolastaUnfinishedBusiness/Subclasses/WayOfTheStormSoul.cs @@ -361,7 +361,7 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, .SelectMany(y => y.Value) .Any(z => z.ConditionDefinition == conditionEyeOfTheStorm && - z.SourceGuid == rulesetAttacker.Guid)) + z.SourceGuid == rulesetAttacker.Guid)) .ToArray(); attacker.MyExecuteActionPowerNoCost(usablePower, targets); From b862624be95450dbbfa69ecb27635f651fd17779 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Thu, 12 Sep 2024 20:27:28 -0700 Subject: [PATCH 137/212] add interface > Dungeon Maker > 'Enable variable placeholders on descriptions' --- .../Behaviors/AddExtraAttack.cs | 22 +----- .../ChangelogHistory.txt | 3 +- .../Displays/DungeonMakerDisplay.cs | 6 ++ .../UserGadgetParameterValuePatcher.cs | 74 +++++++++++++++++++ SolastaUnfinishedBusiness/Settings.cs | 5 +- .../Translations/de/Settings-de.txt | 1 + .../Translations/en/Settings-en.txt | 1 + .../Translations/es/Settings-es.txt | 1 + .../Translations/fr/Settings-fr.txt | 1 + .../Translations/it/Settings-it.txt | 1 + .../Translations/ja/Settings-ja.txt | 1 + .../Translations/ko/Settings-ko.txt | 1 + .../Translations/pt-BR/Settings-pt-BR.txt | 1 + .../Translations/ru/Settings-ru.txt | 1 + .../Translations/zh-CN/Settings-zh-CN.txt | 1 + 15 files changed, 99 insertions(+), 21 deletions(-) create mode 100644 SolastaUnfinishedBusiness/Patches/UserGadgetParameterValuePatcher.cs diff --git a/SolastaUnfinishedBusiness/Behaviors/AddExtraAttack.cs b/SolastaUnfinishedBusiness/Behaviors/AddExtraAttack.cs index 812f263874..0b677ce045 100644 --- a/SolastaUnfinishedBusiness/Behaviors/AddExtraAttack.cs +++ b/SolastaUnfinishedBusiness/Behaviors/AddExtraAttack.cs @@ -239,25 +239,11 @@ protected override List GetAttackModes([NotNull] RulesetChara return null; } - var result = new List(); - - AddItemAttack(result, EquipmentDefinitions.SlotTypeMainHand, hero); - AddItemAttack(result, EquipmentDefinitions.SlotTypeOffHand, hero); - - return result; - } - - private void AddItemAttack( - // ReSharper disable once SuggestBaseTypeForParameter - List attackModes, - [NotNull] string slot, - [NotNull] RulesetCharacterHero hero) - { - var item = hero.CharacterInventory.InventorySlotsByName[slot].EquipedItem; + var item = hero.CharacterInventory.InventorySlotsByName[EquipmentDefinitions.SlotTypeMainHand].EquipedItem; if (item == null || !_weaponValidator.Invoke(null, item, hero)) { - return; + return null; } var strikeDefinition = item.ItemDefinition; @@ -267,7 +253,7 @@ private void AddItemAttack( strikeDefinition.WeaponDescription, ValidatorsCharacter.IsFreeOffhand(hero), true, - slot, + EquipmentDefinitions.SlotTypeMainHand, hero.attackModifiers, hero.FeaturesOrigin, item @@ -278,7 +264,7 @@ private void AddItemAttack( attackMode.Thrown = ValidatorsWeapon.HasAnyWeaponTag(item.ItemDefinition, TagsDefinitions.WeaponTagThrown); attackMode.AttackTags.Remove(TagsDefinitions.WeaponTagMelee); - attackModes.Add(attackMode); + return [attackMode]; } } diff --git a/SolastaUnfinishedBusiness/ChangelogHistory.txt b/SolastaUnfinishedBusiness/ChangelogHistory.txt index f34868a875..03a74b231b 100644 --- a/SolastaUnfinishedBusiness/ChangelogHistory.txt +++ b/SolastaUnfinishedBusiness/ChangelogHistory.txt @@ -3,13 +3,14 @@ - added Command, Dissonant Whispers, Holy Weapon, and Swift Quiver spells - added Character > General 'Add the Fall Prone action to all playable races' - added Character > Rules > 'Enable push and pull motion effects to also work on up/down axis' +- added interface > Dungeon Maker > 'Enable variable placeholders on descriptions' - added Interface > Game UI > 'Enable CTRL click-drag to bypass quest items checks on drop' - fixed Barbarian Sundering Blow interaction with Call Lightning - fixed Bardic Inspiration, Indomitable Resistances, and Legendary Resistances save logic - fixed Bend Luck, Flash of Genius, Inspiring Protection, Shield Master, and Weal/Woe reaction consumption - fixed Circle of the Cosmos woe ability checks reaction not triggering - fixed Demonic Influence adding all location enemies to battle [VANILLA] -- fixed Dwarven Fortitude, and Magical Guidance incorrectly consuming a reaction +- fixed Dwarven Fortitude, and Magical Guidance consuming a reaction - fixed Exploiter feat not checking for reactions from 2nd target onwards - fixed Green-Flame Blade cantrip adding extra damage to subsequent attacks on same turn - fixed Lucky, and Mage Slayer feats double consumption diff --git a/SolastaUnfinishedBusiness/Displays/DungeonMakerDisplay.cs b/SolastaUnfinishedBusiness/Displays/DungeonMakerDisplay.cs index 1e73f7ed90..98a07d9500 100644 --- a/SolastaUnfinishedBusiness/Displays/DungeonMakerDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/DungeonMakerDisplay.cs @@ -109,6 +109,12 @@ internal static void DisplayDungeonMaker() Main.Settings.UnleashNpcAsEnemy = toggle; } + toggle = Main.Settings.EnableVariablePlaceholdersOnTexts; + if (UI.Toggle(Gui.Localize("ModUi/&EnableVariablePlaceholdersOnTexts"), ref toggle)) + { + Main.Settings.EnableVariablePlaceholdersOnTexts = toggle; + } + toggle = Main.Settings.EnableDungeonMakerModdedContent; if (UI.Toggle(Gui.Localize("ModUi/&EnableDungeonMakerModdedContent"), ref toggle)) { diff --git a/SolastaUnfinishedBusiness/Patches/UserGadgetParameterValuePatcher.cs b/SolastaUnfinishedBusiness/Patches/UserGadgetParameterValuePatcher.cs new file mode 100644 index 0000000000..c0e738e7c1 --- /dev/null +++ b/SolastaUnfinishedBusiness/Patches/UserGadgetParameterValuePatcher.cs @@ -0,0 +1,74 @@ +using System.Diagnostics.CodeAnalysis; +using System.Text.RegularExpressions; +using HarmonyLib; +using JetBrains.Annotations; + +namespace SolastaUnfinishedBusiness.Patches; + +//PATCH: support variable placeholders on custom content (EnableVariablePlaceholdersOnTexts) +[UsedImplicitly] +public static class UserGadgetParameterValuePatcher +{ + private static readonly Regex MatchPlaceholders = new(@"\{\w+?\}", RegexOptions.Compiled); + + private static string ReplacePlaceholders(string userContent) + { + return string.IsNullOrEmpty(userContent) ? userContent : MatchPlaceholders.Replace(userContent, Replace); + + static string Replace(Match match) + { + var variableName = match.Value.Trim('{', '}'); + var variableService = ServiceRepository.GetService(); + + if (variableService?.TryFindVariable(variableName, out var variable) == true) + { + return variable.Type switch + { + GameVariableDefinitions.Type.Bool => variable.BoolValue.ToString(), + GameVariableDefinitions.Type.Int => variable.IntValue.ToString(), + _ => variable.StringValue + }; + } + + return match.Value; + } + } + + [HarmonyPatch(typeof(UserGadgetParameterValue), nameof(UserGadgetParameterValue.StringValue), MethodType.Getter)] + [SuppressMessage("Minor Code Smell", "S101:Types should be named in PascalCase", Justification = "Patch")] + [UsedImplicitly] + public static class StringValue_Getter_Patch + { + [UsedImplicitly] + public static bool Prefix(UserGadgetParameterValue __instance, ref string __result) + { + if (!Main.Settings.EnableVariablePlaceholdersOnTexts) { return true; } + + if (!Gui.Game) { return true; } // this if statement should be standalone to avoid unity life check issues + + var userContent = __instance.stringValue; + + __result = ReplacePlaceholders(userContent); + + return false; + } + } + + [HarmonyPatch(typeof(UserContentDefinitions), nameof(UserContentDefinitions.CensorUserContent))] + [SuppressMessage("Minor Code Smell", "S101:Types should be named in PascalCase", Justification = "Patch")] + [UsedImplicitly] + public static class CensorUserContent_Patch + { + [UsedImplicitly] + public static bool Prefix(string userContent, ref string __result) + { + if (!Main.Settings.EnableVariablePlaceholdersOnTexts) { return true; } + + if (!Gui.Game) { return true; } // this if statement should be standalone to avoid unity life check issues + + __result = string.IsNullOrEmpty(userContent) ? userContent : ReplacePlaceholders(userContent); + + return false; + } + } +} diff --git a/SolastaUnfinishedBusiness/Settings.cs b/SolastaUnfinishedBusiness/Settings.cs index 91f9a95db1..09b854117c 100644 --- a/SolastaUnfinishedBusiness/Settings.cs +++ b/SolastaUnfinishedBusiness/Settings.cs @@ -323,7 +323,6 @@ public class Settings : UnityModManager.ModSettings // Gameplay - Items, Crafting & Merchants // public bool AddNewWeaponsAndRecipesToShops { get; set; } - public bool AddNewWeaponsAndRecipesToEditor { get; set; } public bool EnableMonkHandwrapsUseGauntletSlot { get; set; } public bool EnableGauntletMainAttacks { get; set; } public bool AddPickPocketableLoot { get; set; } @@ -486,8 +485,10 @@ public class Settings : UnityModManager.ModSettings public bool EnableLoggingInvalidReferencesInUserCampaigns { get; set; } public bool EnableSortingDungeonMakerAssets { get; set; } public bool AllowGadgetsAndPropsToBePlacedAnywhere { get; set; } - public bool UnleashNpcAsEnemy { get; set; } public bool UnleashEnemyAsNpc { get; set; } + public bool AddNewWeaponsAndRecipesToEditor { get; set; } + public bool UnleashNpcAsEnemy { get; set; } + public bool EnableVariablePlaceholdersOnTexts { get; set; } public bool EnableDungeonMakerModdedContent { get; set; } // diff --git a/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt b/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt index ea52b5224a..bfd3ee904d 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt @@ -175,6 +175,7 @@ ModUi/&EnableTeleportToRemoveRestrained=Aktivieren Sie Teleportie ModUi/&EnableTogglesToOverwriteDefaultTestParty=Aktivieren Sie die Schalter für den Charakterpool, um Ihre Standardspiel- und Testgruppe festzulegen ModUi/&EnableTooltipDistance=Aktivieren Sie die Anzeige der Entfernung in Tooltips, wenn Sie im Kampf mit der Maus über einen Charakter fahren ModUi/&EnableUpcastConjureElementalAndFey=Aktivieren Sie die Übertragung von Elementar beschwören und Fee beschwören +ModUi/&EnableVariablePlaceholdersOnTexts=Aktivieren Sie variable Platzhalter in Beschreibungen [verwenden Sie {VARIABLE_NAME} als Platzhalter] ModUi/&EnableVttCamera=Aktivieren Sie STRG-UMSCHALT-(V), um die VTT-Kamera umzuschalten [rechtsklicken und ziehen, um die Kamera zu positionieren, WASD zum Schwenken und Bild auf/ Seite nach unten zum Vergrößern] ModUi/&EnablesAsiAndFeat=Aktivieren Sie sowohl die Erhöhung der Attributwerte als auch die Auswahl von Leistungen [anstelle einer exklusiven Auswahl] ModUi/&EncounterPercentageChance=Legen Sie die prozentuale Chance auf zufällige Begegnungen fest diff --git a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt index 9542a270e0..104db9cc12 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt @@ -175,6 +175,7 @@ ModUi/&EnableTeleportToRemoveRestrained=Enable Teleport t ModUi/&EnableTogglesToOverwriteDefaultTestParty=Enable toggles on character pool to set your default play and test party ModUi/&EnableTooltipDistance=Enable showing distance on tooltips when hovering over a character in combat ModUi/&EnableUpcastConjureElementalAndFey=Enable upcast of Conjure Elemental and Conjure Fey +ModUi/&EnableVariablePlaceholdersOnTexts=Enable variable placeholders on descriptions [use {VARIABLE_NAME} as placeholder] ModUi/&EnableVttCamera=Enable CTRL-SHIFT-(V) to toggle the VTT camera [right-click and drag to position the camera, WASD to pan and Page Up/Page Down to zoom] ModUi/&EnablesAsiAndFeat=Enable both attribute scores increase and feats selection [instead of an exclusive choice] ModUi/&EncounterPercentageChance=Set random encounters percentage chances diff --git a/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt b/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt index f808f43292..40ab179f84 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt @@ -175,6 +175,7 @@ ModUi/&EnableTeleportToRemoveRestrained=Habilite TeletransporteConjure Elemental y Conjure Fey +ModUi/&EnableVariablePlaceholdersOnTexts=Habilitar marcadores de posición de variables en las descripciones [use {VARIABLE_NAME} como marcador de posición] ModUi/&EnableVttCamera=Habilite CTRL-SHIFT-(V) para alternar la cámara VTT [haga clic derecho y arrastre para posicionar la cámara, WASD para desplazarse y Re Pág/ Avance de página para hacer zoom] ModUi/&EnablesAsiAndFeat=Habilite el aumento de puntuaciones de atributos y la selección de dotes [en lugar de una elección exclusiva] ModUi/&EncounterPercentageChance=Establecer porcentaje de posibilidades de encuentros aleatorios diff --git a/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt index 1b27a57531..44364645bb 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt @@ -175,6 +175,7 @@ ModUi/&EnableTeleportToRemoveRestrained=Activez la téléportatio ModUi/&EnableTogglesToOverwriteDefaultTestParty=Activez les bascules sur le pool de personnages pour définir votre jeu par défaut et votre groupe de test ModUi/&EnableTooltipDistance=Activer l'affichage de la distance dans les info-bulles lors du survol d'un personnage en combat ModUi/&EnableUpcastConjureElementalAndFey=Activer la diffusion ascendante de Conjure Elemental et Conjure Fey +ModUi/&EnableVariablePlaceholdersOnTexts=Activer les espaces réservés aux variables dans les descriptions [utiliser {VARIABLE_NAME} comme espace réservé] ModUi/&EnableVttCamera=Activez CTRL-SHIFT-(V) pour basculer la caméra VTT [cliquez avec le bouton droit et faites glisser pour positionner la caméra, WASD pour effectuer un panoramique et Page précédente/ Page suivante pour zoomer] ModUi/&EnablesAsiAndFeat=Activer l'augmentation des scores d'attribut et la sélection des exploits [au lieu d'un choix exclusif] ModUi/&EncounterPercentageChance=Définir le pourcentage de chances de rencontres aléatoires diff --git a/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt b/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt index e63b807aac..f419797d86 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt @@ -175,6 +175,7 @@ ModUi/&EnableTeleportToRemoveRestrained=Abilita TeletrasportoEvoca Elementale e Evoca Fata +ModUi/&EnableVariablePlaceholdersOnTexts=Abilita segnaposto variabili nelle descrizioni [usa {VARIABLE_NAME} come segnaposto] ModUi/&EnableVttCamera=Abilita CTRL-SHIFT-(V) per attivare/disattivare la telecamera VTT [fai clic con il pulsante destro del mouse e trascina per posizionare la telecamera, WASD per eseguire la panoramica e Pagina su/ Pagina giù per ingrandire] ModUi/&EnablesAsiAndFeat=Abilita sia l'aumento dei punteggi degli attributi che la selezione dei talenti [invece di una scelta esclusiva] ModUi/&EncounterPercentageChance=Imposta la percentuale di possibilità di incontri casuali diff --git a/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt index 274d77b409..dea769ed66 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt @@ -175,6 +175,7 @@ ModUi/&EnableTeleportToRemoveRestrained=テレポート ModUi/&EnableTogglesToOverwriteDefaultTestParty=キャラクタープールの切り替えを有効にして、デフォルトのプレイおよびテストパーティーを設定します ModUi/&EnableTooltipDistance=戦闘中にキャラクターの上にマウスを置いたときにツールチップに距離を表示できるようになります ModUi/&EnableUpcastConjureElementalAndFey=コンジュア・エレメンタルとコンジュア・フェイのアップキャストを有効にする +ModUi/&EnableVariablePlaceholdersOnTexts=説明に変数プレースホルダーを有効にする [プレースホルダーとして {VARIABLE_NAME} を使用する] ModUi/&EnableVttCamera=CTRL-SHIFT-(V) を有効にして VTT カメラを切り替えます[右クリックしてドラッグしてカメラの位置を決め、WASD でパンして Page Up/ページを下に移動してズーム] ModUi/&EnablesAsiAndFeat=属性スコアの増加と特技の選択[排他的な選択肢の代わりに]の両方を有効にします ModUi/&EncounterPercentageChance=ランダムな遭遇確率を設定する diff --git a/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt index e3583f38aa..7b1d471db4 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt @@ -175,6 +175,7 @@ ModUi/&EnableTeleportToRemoveRestrained=텔레포트를 ModUi/&EnableTogglesToOverwriteDefaultTestParty=기본 플레이 및 테스트 파티를 설정하려면 캐릭터 풀의 토글을 활성화하세요. ModUi/&EnableTooltipDistance=전투 중 캐릭터 위로 마우스를 가져갈 때 툴팁에 거리 표시 활성화 ModUi/&EnableUpcastConjureElementalAndFey=정령 창조 및 페이 창조의 업캐스트를 활성화합니다. +ModUi/&EnableVariablePlaceholdersOnTexts=설명에 변수 플레이스홀더 활성화 [플레이스홀더로 {VARIABLE_NAME} 사용] ModUi/&EnableVttCamera=CTRL-SHIFT-(V)를 활성화하여 VTT 카메라를 전환합니다. [카메라 위치를 마우스 오른쪽 버튼으로 클릭하고 드래그하고, 팬 및 페이지 위로 이동하려면 WASD/ 확대하려면 페이지를 아래로 내리세요] ModUi/&EnablesAsiAndFeat=속성 점수 증가와 feats 선택 [독점 선택 대신]을 모두 활성화합니다. ModUi/&EncounterPercentageChance=무작위 만남 확률 설정 diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt index 1682ec2b12..c419a5e3a5 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt @@ -175,6 +175,7 @@ ModUi/&EnableTeleportToRemoveRestrained=Habilitar Teletransporte< ModUi/&EnableTogglesToOverwriteDefaultTestParty=Ative o conjunto de personagens para definir seu grupo de jogo e teste padrão ModUi/&EnableTooltipDistance=Ativar a exibição da distância nas dicas de ferramentas ao passar o mouse sobre um personagem em combate ModUi/&EnableUpcastConjureElementalAndFey=Ativar upcast de Conjure Elemental e Conjure Fey +ModUi/&EnableVariablePlaceholdersOnTexts=Habilitar marcadores de posição variáveis ​​em descrições [usar {VARIABLE_NAME} como marcador de posição] ModUi/&EnableVttCamera=Ative CTRL-SHIFT-(V) para alternar a câmera VTT [clique com o botão direito e arraste para posicionar a câmera, WASD para panoramizar e Page Up/ Desça a página para ampliar] ModUi/&EnablesAsiAndFeat=Ative o aumento de pontuação de atributos e a seleção de talentos [em vez de uma escolha exclusiva] ModUi/&EncounterPercentageChance=Definir chances percentuais de encontros aleatórios diff --git a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt index b6d0c729cb..fef497b871 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt @@ -175,6 +175,7 @@ ModUi/&EnableTeleportToRemoveRestrained=Включить возможность ModUi/&EnableTogglesToOverwriteDefaultTestParty=Включить в списке персонажей возможность выбирать группу по умолчанию ModUi/&EnableTooltipDistance=Включить отображение расстояния во всплывающей подсказке панели при наведении курсора на персонажа в бою ModUi/&EnableUpcastConjureElementalAndFey=Включить возможность накладывать на высоких уровнях Призыв элементаля и Призыв феи +ModUi/&EnableVariablePlaceholdersOnTexts=Включить переменные заполнители в описаниях [использовать {VARIABLE_NAME} как заполнители] ModUi/&EnableVttCamera=Включать камеру виртуальной настольной игры по нажатию CTRL-SHIFT-(V) [позиционирование камеры правой кнопкой мыши, WASD для панорамного вида и зум по нажатию Page Up/Page Down] ModUi/&EnablesAsiAndFeat=Включить возможность и повышать характеристики, и выбирать черту одновременно [вместо того, чтобы делать выбор между этими вариантами] ModUi/&EncounterPercentageChance=Вероятность случайных событий в процентах diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt index 0f3c358c5c..6f6312a344 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt @@ -175,6 +175,7 @@ ModUi/&EnableTeleportToRemoveRestrained=启用传送以 ModUi/&EnableTogglesToOverwriteDefaultTestParty=启用角色池的切换来设置默认的游戏和测试队伍 ModUi/&EnableTooltipDistance=在战斗中将鼠标悬停在角色上时启用在工具提示上显示距离 ModUi/&EnableUpcastConjureElementalAndFey=启用元素咒唤术和精类咒唤术的升环 +ModUi/&EnableVariablePlaceholdersOnTexts=在描述中启用变量占位符[使用 {VARIABLE_NAME} 作为占位符] ModUi/&EnableVttCamera=启用 CTRL-SHIFT-(V) 切换 VTT 摄像头[右键单击并拖动以定位摄像头,WASD 进行平移和 Page Up/向下翻页放大] ModUi/&EnablesAsiAndFeat=启用属性值提升和专长选择[而不是独占选择] ModUi/&EncounterPercentageChance=设置随机遭遇百分比几率 From e862e19be4b25430469ff89796a5bb7ef03600e8 Mon Sep 17 00:00:00 2001 From: EnderWiggin Date: Fri, 13 Sep 2024 10:55:12 +0300 Subject: [PATCH 138/212] added option to modify Gravity Slam spell to push targets down --- .../ForcePushOrDragFromEffectPoint.cs | 15 ++++++-- .../Behaviors/VerticalPushPullMotion.cs | 9 +++++ .../Displays/RulesDisplay.cs | 11 ++++++ .../Models/SrdAndHouseRulesContext.cs | 35 +++++++++++++++++++ SolastaUnfinishedBusiness/Settings.cs | 1 + .../Translations/en/Settings-en.txt | 1 + 6 files changed, 69 insertions(+), 3 deletions(-) diff --git a/SolastaUnfinishedBusiness/Behaviors/ForcePushOrDragFromEffectPoint.cs b/SolastaUnfinishedBusiness/Behaviors/ForcePushOrDragFromEffectPoint.cs index 2e9942664b..ef4b401629 100644 --- a/SolastaUnfinishedBusiness/Behaviors/ForcePushOrDragFromEffectPoint.cs +++ b/SolastaUnfinishedBusiness/Behaviors/ForcePushOrDragFromEffectPoint.cs @@ -30,11 +30,19 @@ internal static int SetPositionAndApplyForms( { var positions = action.ActionParams.Positions; - if (positions.Count != 0 && - formsParams.activeEffect.SourceDefinition.HasSubFeatureOfType()) + var sourceDefinition = formsParams.activeEffect.SourceDefinition; + if (positions.Count != 0 && sourceDefinition.HasSubFeatureOfType()) { formsParams.position = positions[0]; } + else if (sourceDefinition.HasSubFeatureOfType()) + { + var locationTarget = GameLocationCharacter.GetFromActor(formsParams.targetCharacter); + if (locationTarget != null) + { + formsParams.position = locationTarget.locationPosition + new int3(0, 10, 0); + } + } return service.ApplyEffectForms( effectForms, @@ -61,7 +69,8 @@ public static bool TryPushFromEffectTargetPoint( } var position = formsParams.position; - var active = source.HasSubFeatureOfType(); + var active = source.HasSubFeatureOfType() + || source.HasSubFeatureOfType(); if (!active || position == int3.zero) { diff --git a/SolastaUnfinishedBusiness/Behaviors/VerticalPushPullMotion.cs b/SolastaUnfinishedBusiness/Behaviors/VerticalPushPullMotion.cs index d1c1f2536e..807b2a256e 100644 --- a/SolastaUnfinishedBusiness/Behaviors/VerticalPushPullMotion.cs +++ b/SolastaUnfinishedBusiness/Behaviors/VerticalPushPullMotion.cs @@ -97,3 +97,12 @@ private static int3 Step(Vector3 delta, double tolerance) ); } } + +internal class SlamDown +{ + private SlamDown() + { + } + + public static SlamDown Mark { get; } = new(); +} diff --git a/SolastaUnfinishedBusiness/Displays/RulesDisplay.cs b/SolastaUnfinishedBusiness/Displays/RulesDisplay.cs index a3de8f3d70..3cb9eea9ba 100644 --- a/SolastaUnfinishedBusiness/Displays/RulesDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/RulesDisplay.cs @@ -544,6 +544,17 @@ internal static void DisplayRules() if (UI.Toggle(Gui.Localize("ModUi/&EnablePullPushOnVerticalDirection"), ref toggle, UI.AutoWidth())) { Main.Settings.EnablePullPushOnVerticalDirection = toggle; + SrdAndHouseRulesContext.ToggleGravitySlamModification(); + } + + if (Main.Settings.EnablePullPushOnVerticalDirection) + { + toggle = Main.Settings.ModifyGravitySlam; + if (UI.Toggle(Gui.Localize("ModUi/&ModifyGravitySlam"), ref toggle, UI.AutoWidth())) + { + Main.Settings.ModifyGravitySlam = toggle; + SrdAndHouseRulesContext.ToggleGravitySlamModification(); + } } toggle = Main.Settings.EnableTeleportToRemoveRestrained; diff --git a/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs b/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs index 16ed7c0f40..ab2a367756 100644 --- a/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs +++ b/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs @@ -3,6 +3,7 @@ using JetBrains.Annotations; using SolastaUnfinishedBusiness.Api.GameExtensions; using SolastaUnfinishedBusiness.Api.LanguageExtensions; +using SolastaUnfinishedBusiness.Behaviors; using SolastaUnfinishedBusiness.Builders; using SolastaUnfinishedBusiness.Builders.Features; using SolastaUnfinishedBusiness.Interfaces; @@ -108,6 +109,7 @@ internal static void LateLoad() SwitchUniversalSylvanArmorAndLightbringer(); SwitchUseHeightOneCylinderEffect(); NoTwinnedBladeCantrips(); + ModifyGravitySlam(); } private static void LoadSenseNormalVisionRangeMultiplier() @@ -937,6 +939,39 @@ private static void NoTwinnedBladeCantrips() MetamagicOptionDefinitions.MetamagicTwinnedSpell.AddCustomSubFeatures(NoTwinned.Validator); } + #region Gravity Slam + + private static EffectDescription gravitySlamVanilla; + private static EffectDescription gravitySlamModified; + + private static void ModifyGravitySlam() + { + gravitySlamVanilla = GravitySlam.EffectDescription; + + gravitySlamModified = EffectDescriptionBuilder.Create(gravitySlamVanilla) + .SetTargetingData(Side.All, RangeType.Distance, 20, TargetType.Cylinder, 4, 10) + //TODO: try making tooltip say "Push Down" instead "Push Away" + .AddEffectForms(EffectFormBuilder.MotionForm(MotionForm.MotionType.PushFromOrigin, 10)) + .Build(); + + GravitySlam.AddCustomSubFeatures(SlamDown.Mark); //does nothing if it has no push motion + ToggleGravitySlamModification(); + } + + internal static void ToggleGravitySlamModification() + { + if (Main.Settings.EnablePullPushOnVerticalDirection && Main.Settings.ModifyGravitySlam) + { + GravitySlam.effectDescription = gravitySlamModified; + } + else + { + GravitySlam.effectDescription = gravitySlamVanilla; + } + } + + #endregion + private sealed class FilterTargetingCharacterChainLightning : IFilterTargetingCharacter { public bool EnforceFullSelection => false; diff --git a/SolastaUnfinishedBusiness/Settings.cs b/SolastaUnfinishedBusiness/Settings.cs index 09b854117c..6e7ac53602 100644 --- a/SolastaUnfinishedBusiness/Settings.cs +++ b/SolastaUnfinishedBusiness/Settings.cs @@ -308,6 +308,7 @@ public class Settings : UnityModManager.ModSettings public bool EnableCharactersOnFireToEmitLight { get; set; } public bool EnableHigherGroundRules { get; set; } public bool EnablePullPushOnVerticalDirection { get; set; } + public bool ModifyGravitySlam { get; set; } = true; public bool FullyControlConjurations { get; set; } public bool EnableTeleportToRemoveRestrained { get; set; } public bool ColdResistanceAlsoGrantsImmunityToChilledCondition { get; set; } diff --git a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt index 104db9cc12..bbf5c32b63 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt @@ -239,6 +239,7 @@ ModUi/&MarkInvisibleTeleportersOnLevelMap=+ Also mark the location of invisib ModUi/&MaxAllowedClasses=Max allowed classes ModUi/&Merchants=Merchants: ModUi/&Metamagic=Metamagic +ModUi/&ModifyGravitySlam=+ Modify Gravity Slam spell to push affected targets down ModUi/&Monsters=Monsters: ModUi/&MovementGridWidthModifier=Multiply the movement grid width by [%] ModUi/&MulticlassKeyHelp=SHIFT click on a spell inverts the default repertoire slot type consumed\n[Warlock spends white spell slots and others spend pact green ones] From b8b0a032f3f1a6779b1ffda7f46264cbfbaabd34 Mon Sep 17 00:00:00 2001 From: EnderWiggin Date: Fri, 13 Sep 2024 11:26:33 +0300 Subject: [PATCH 139/212] refresh controlled character to apply Gravity Slam modification immediately --- SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs | 2 ++ SolastaUnfinishedBusiness/_Globals.cs | 5 +++++ 2 files changed, 7 insertions(+) diff --git a/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs b/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs index ab2a367756..a9341b4ace 100644 --- a/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs +++ b/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs @@ -968,6 +968,8 @@ internal static void ToggleGravitySlamModification() { GravitySlam.effectDescription = gravitySlamVanilla; } + + Global.RefreshControlledCharacter(); } #endregion diff --git a/SolastaUnfinishedBusiness/_Globals.cs b/SolastaUnfinishedBusiness/_Globals.cs index 7697aeb03b..c1f5433ebf 100644 --- a/SolastaUnfinishedBusiness/_Globals.cs +++ b/SolastaUnfinishedBusiness/_Globals.cs @@ -40,4 +40,9 @@ private static GameLocationCharacter SelectedLocationCharacter [CanBeNull] internal static RulesetCharacter CurrentCharacter => InspectedHero ?? LevelUpHero ?? SelectedLocationCharacter?.RulesetCharacter; + + internal static void RefreshControlledCharacter() + { + SelectedLocationCharacter?.RulesetCharacter?.RefreshAll(); + } } From d77f01652991b6bc1747bdb484fb33d946d503ec Mon Sep 17 00:00:00 2001 From: EnderWiggin Date: Fri, 13 Sep 2024 12:07:40 +0300 Subject: [PATCH 140/212] - changed Push Down motion from using custom feature marker to using extra motion type - patched Gui.FormatMotionForm to format CustomSwap and PushDown motion forms --- .../Api/GameExtensions/EnumExtensions.cs | 3 +- .../ForcePushOrDragFromEffectPoint.cs | 32 ++++++++++++------- .../Behaviors/VerticalPushPullMotion.cs | 9 ------ .../Models/SrdAndHouseRulesContext.cs | 5 +-- .../Patches/GuiPatcher.cs | 22 +++++++++++++ .../Translations/en/Others-en.txt | 2 ++ 6 files changed, 47 insertions(+), 26 deletions(-) diff --git a/SolastaUnfinishedBusiness/Api/GameExtensions/EnumExtensions.cs b/SolastaUnfinishedBusiness/Api/GameExtensions/EnumExtensions.cs index 5ae8b2a5d5..d46084a900 100644 --- a/SolastaUnfinishedBusiness/Api/GameExtensions/EnumExtensions.cs +++ b/SolastaUnfinishedBusiness/Api/GameExtensions/EnumExtensions.cs @@ -153,7 +153,8 @@ internal enum ExtraMotionType // Telekinesis, // RallyKindred, // PushRandomDirection, - CustomSwap = 9000 + CustomSwap = 9000, + PushDown = 9001, } internal enum ExtraPowerAttackHitComputation diff --git a/SolastaUnfinishedBusiness/Behaviors/ForcePushOrDragFromEffectPoint.cs b/SolastaUnfinishedBusiness/Behaviors/ForcePushOrDragFromEffectPoint.cs index ef4b401629..1897a43134 100644 --- a/SolastaUnfinishedBusiness/Behaviors/ForcePushOrDragFromEffectPoint.cs +++ b/SolastaUnfinishedBusiness/Behaviors/ForcePushOrDragFromEffectPoint.cs @@ -35,14 +35,6 @@ internal static int SetPositionAndApplyForms( { formsParams.position = positions[0]; } - else if (sourceDefinition.HasSubFeatureOfType()) - { - var locationTarget = GameLocationCharacter.GetFromActor(formsParams.targetCharacter); - if (locationTarget != null) - { - formsParams.position = locationTarget.locationPosition + new int3(0, 10, 0); - } - } return service.ApplyEffectForms( effectForms, @@ -68,11 +60,27 @@ public static bool TryPushFromEffectTargetPoint( return true; } - var position = formsParams.position; - var active = source.HasSubFeatureOfType() - || source.HasSubFeatureOfType(); + int3 position; + if (source.HasSubFeatureOfType()) + { + position = formsParams.position; + } + else if(effectForm.MotionForm?.Type == (MotionForm.MotionType)ExtraMotionType.PushDown) + { + var locationTarget = GameLocationCharacter.GetFromActor(formsParams.targetCharacter); + if (locationTarget == null) + { + //Do nothing, maybe log error? + return false; + } + position = locationTarget.locationPosition + new int3(0, 10, 0); + } + else + { + return true; + } - if (!active || position == int3.zero) + if (position == int3.zero) { return true; } diff --git a/SolastaUnfinishedBusiness/Behaviors/VerticalPushPullMotion.cs b/SolastaUnfinishedBusiness/Behaviors/VerticalPushPullMotion.cs index 807b2a256e..d1c1f2536e 100644 --- a/SolastaUnfinishedBusiness/Behaviors/VerticalPushPullMotion.cs +++ b/SolastaUnfinishedBusiness/Behaviors/VerticalPushPullMotion.cs @@ -97,12 +97,3 @@ private static int3 Step(Vector3 delta, double tolerance) ); } } - -internal class SlamDown -{ - private SlamDown() - { - } - - public static SlamDown Mark { get; } = new(); -} diff --git a/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs b/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs index a9341b4ace..e557936719 100644 --- a/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs +++ b/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs @@ -3,7 +3,6 @@ using JetBrains.Annotations; using SolastaUnfinishedBusiness.Api.GameExtensions; using SolastaUnfinishedBusiness.Api.LanguageExtensions; -using SolastaUnfinishedBusiness.Behaviors; using SolastaUnfinishedBusiness.Builders; using SolastaUnfinishedBusiness.Builders.Features; using SolastaUnfinishedBusiness.Interfaces; @@ -950,11 +949,9 @@ private static void ModifyGravitySlam() gravitySlamModified = EffectDescriptionBuilder.Create(gravitySlamVanilla) .SetTargetingData(Side.All, RangeType.Distance, 20, TargetType.Cylinder, 4, 10) - //TODO: try making tooltip say "Push Down" instead "Push Away" - .AddEffectForms(EffectFormBuilder.MotionForm(MotionForm.MotionType.PushFromOrigin, 10)) + .AddEffectForms(EffectFormBuilder.MotionForm(ExtraMotionType.PushDown, 10)) .Build(); - GravitySlam.AddCustomSubFeatures(SlamDown.Mark); //does nothing if it has no push motion ToggleGravitySlamModification(); } diff --git a/SolastaUnfinishedBusiness/Patches/GuiPatcher.cs b/SolastaUnfinishedBusiness/Patches/GuiPatcher.cs index 6af0702c87..e27fc2cd46 100644 --- a/SolastaUnfinishedBusiness/Patches/GuiPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/GuiPatcher.cs @@ -3,6 +3,7 @@ using System.Linq; using HarmonyLib; using JetBrains.Annotations; +using SolastaUnfinishedBusiness.Api.GameExtensions; using static RuleDefinitions; using static FeatureDefinitionAttributeModifier; @@ -42,6 +43,27 @@ public static void Postfix(ref string __result, RangeType rangeType, int rangeVa } } + [HarmonyPatch(typeof(Gui), nameof(Gui.FormatMotionForm))] + [SuppressMessage("Minor Code Smell", "S101:Types should be named in PascalCase", Justification = "Patch")] + [UsedImplicitly] + public static class FormatMotionForm_Patch + { + [UsedImplicitly] + public static void Postfix(ref string __result, MotionForm motionForm, int range) + { + //PATCH: format extra motion types + switch ((ExtraMotionType)motionForm.Type) + { + case ExtraMotionType.CustomSwap: + __result = Gui.Format("Rules/&MotionFormSwitchFormat", Gui.FormatDistance(motionForm.Distance)); + break; + case ExtraMotionType.PushDown: + __result = Gui.Format("Rules/&MotionFormPushDownFormat", Gui.FormatDistance(motionForm.Distance)); + break; + } + } + } + //PATCH: always displays a sign on attribute modifiers [HarmonyPatch(typeof(Gui), nameof(Gui.FormatTrendsList))] [SuppressMessage("Minor Code Smell", "S101:Types should be named in PascalCase", Justification = "Patch")] diff --git a/SolastaUnfinishedBusiness/Translations/en/Others-en.txt b/SolastaUnfinishedBusiness/Translations/en/Others-en.txt index e8ddec4832..2fb21c5989 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Others-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Others-en.txt @@ -246,6 +246,8 @@ Rules/&ActivationTypeOnRageStartAutomaticTitle=Auto Rage Start Rules/&ActivationTypeOnReduceCreatureToZeroHPAutoTitle=Auto Creature Reduced to Zero HP Rules/&ActivationTypeOnSneakAttackHitAutoTitle=Auto Sneak Attack Rules/&CounterFormDismissCreatureFormat=Dismisses a target conjured creature +Rules/&MotionFormPushDownFormat=Push down {0} +Rules/&MotionFormSwitchFormat=Switch places Rules/&SituationalContext9000Format=Has Blade Mastery weapon types in hands: Rules/&SituationalContext9001Format=Has Greatsword in hands: Rules/&SituationalContext9002Format=Has Longsword in hands: From b2d46f70a2ad740f71feec91216fe9d4b2947369 Mon Sep 17 00:00:00 2001 From: EnderWiggin Date: Fri, 13 Sep 2024 12:10:28 +0300 Subject: [PATCH 141/212] tweaked description of modify Gravity Slam setting --- SolastaUnfinishedBusiness/Translations/en/Settings-en.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt index bbf5c32b63..230a7558f9 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt @@ -239,7 +239,7 @@ ModUi/&MarkInvisibleTeleportersOnLevelMap=+ Also mark the location of invisib ModUi/&MaxAllowedClasses=Max allowed classes ModUi/&Merchants=Merchants: ModUi/&Metamagic=Metamagic -ModUi/&ModifyGravitySlam=+ Modify Gravity Slam spell to push affected targets down +ModUi/&ModifyGravitySlam=+ Modify Gravity Slam spell to push affected targets down and be a cylinder instead of a sphere ModUi/&Monsters=Monsters: ModUi/&MovementGridWidthModifier=Multiply the movement grid width by [%] ModUi/&MulticlassKeyHelp=SHIFT click on a spell inverts the default repertoire slot type consumed\n[Warlock spends white spell slots and others spend pact green ones] From 0e57063c1e047b5d027a57913aff0ab45cd10dda Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Fri, 13 Sep 2024 06:59:12 -0700 Subject: [PATCH 142/212] update translations and docs --- Documentation/Spells.md | 2 +- SolastaUnfinishedBusiness/Translations/de/Others-de.txt | 2 ++ SolastaUnfinishedBusiness/Translations/de/Settings-de.txt | 1 + SolastaUnfinishedBusiness/Translations/es/Others-es.txt | 2 ++ SolastaUnfinishedBusiness/Translations/es/Settings-es.txt | 1 + SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt | 2 ++ SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt | 1 + SolastaUnfinishedBusiness/Translations/it/Others-it.txt | 2 ++ SolastaUnfinishedBusiness/Translations/it/Settings-it.txt | 1 + SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt | 2 ++ SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt | 1 + SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt | 2 ++ SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt | 1 + SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt | 2 ++ SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt | 1 + SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt | 2 ++ SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt | 1 + SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt | 2 ++ SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt | 1 + 19 files changed, 28 insertions(+), 1 deletion(-) diff --git a/Documentation/Spells.md b/Documentation/Spells.md index caa74d6b00..1957870dcd 100644 --- a/Documentation/Spells.md +++ b/Documentation/Spells.md @@ -1502,7 +1502,7 @@ Paralyzes a creature unless it succeeds a WIS saving throw. No effect on undead. **[Cleric, Paladin]** -You imbue a weapon you touch with holy power. Until the spell ends, the weapon emits bright light in a 30-foot radius and dim light for an additional 30 feet. In addition, weapon attacks made with it deal an extra 2d8 radiant damage on a hit. If the weapon isn't already a magic weapon, it becomes one for the duration. As a bonus action on your turn, if wielding the weapon, you can dismiss this spell and cause the weapon to emit a burst of radiance. Each creature of your choice that you can see within 30 feet of the weapon must make a Constitution saving throw. On a failed save, a creature takes 4d8 radiant damage, and it is blinded for 1 minute. On a successful save, a creature takes half as much damage and isn't blinded. At the end of each of its turns, a blinded creature can make a Constitution saving throw, ending the effect on itself on a success. +You imbue a weapon you touch with holy power. Until the spell ends, the weapon emits bright light in a 30-foot radius and dim light for an additional 30 feet. In addition, weapon attacks made with it deal an extra 2d8 radiant damage on a hit. If the weapon isn't already a magic weapon, it becomes one for the duration. As a bonus action on your turn, if the weapon is within 30 ft, you can dismiss this spell and cause the weapon to emit a burst of radiance. Each creature of your choice that you can see within 30 feet of the weapon must make a Constitution saving throw. On a failed save, a creature takes 4d8 radiant damage, and it is blinded for 1 minute. On a successful save, a creature takes half as much damage and isn't blinded. At the end of each of its turns, a blinded creature can make a Constitution saving throw, ending the effect on itself on a success. # 250. - *Immolation* © (V) level 5 Evocation [Concentration] [UB] diff --git a/SolastaUnfinishedBusiness/Translations/de/Others-de.txt b/SolastaUnfinishedBusiness/Translations/de/Others-de.txt index d95664e968..e53dd75eda 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Others-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Others-de.txt @@ -246,6 +246,8 @@ Rules/&ActivationTypeOnRageStartAutomaticTitle=Automatischer Wutstart Rules/&ActivationTypeOnReduceCreatureToZeroHPAutoTitle=Automatische Kreatur auf null HP reduziert Rules/&ActivationTypeOnSneakAttackHitAutoTitle=Automatischer Schleichangriff Rules/&CounterFormDismissCreatureFormat=Entlässt eine gewünschte heraufbeschworene Kreatur +Rules/&MotionFormPushDownFormat=Drücken Sie {0} nach unten +Rules/&MotionFormSwitchFormat=Die Plätze tauschen Rules/&SituationalContext9000Format=Hat Blade Mastery-Waffentypen in den Händen: Rules/&SituationalContext9001Format=Hat ein Großschwert in den Händen: Rules/&SituationalContext9002Format=Hat ein Langschwert in den Händen: diff --git a/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt b/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt index bfd3ee904d..6137bfcbe2 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt @@ -239,6 +239,7 @@ ModUi/&MarkInvisibleTeleportersOnLevelMap=+ Markieren Sie nach der Entdeckung ModUi/&MaxAllowedClasses=Maximal zulässige Klassen ModUi/&Merchants=Händler: ModUi/&Metamagic=Metamagie +ModUi/&ModifyGravitySlam=+ Ändern Sie den Zauber Gravitationsschlag, um betroffene Ziele nach unten zu drücken und einen Zylinder statt einer Kugel anzuzeigen ModUi/&Monsters=Monster: ModUi/&MovementGridWidthModifier=Multiplizieren Sie die Breite des Bewegungsrasters mit [%] ModUi/&MulticlassKeyHelp=UMSCHALT-Klick auf einen Zauber kehrt den verbrauchten Standardrepertoire-Slottyp um.\n[Hexenmeister gibt weiße Zauberslots aus und andere geben Paktgrüne aus] diff --git a/SolastaUnfinishedBusiness/Translations/es/Others-es.txt b/SolastaUnfinishedBusiness/Translations/es/Others-es.txt index 80c2fe1828..5a9ab777f8 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Others-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Others-es.txt @@ -246,6 +246,8 @@ Rules/&ActivationTypeOnRageStartAutomaticTitle=Inicio de furia automática Rules/&ActivationTypeOnReduceCreatureToZeroHPAutoTitle=Criatura automática reducida a cero HP Rules/&ActivationTypeOnSneakAttackHitAutoTitle=Ataque furtivo automático Rules/&CounterFormDismissCreatureFormat=Despierta a una criatura conjurada objetivo. +Rules/&MotionFormPushDownFormat=Empuja hacia abajo {0} +Rules/&MotionFormSwitchFormat=Cambiar de lugar Rules/&SituationalContext9000Format=Tiene en sus manos los siguientes tipos de armas de maestría en la espada: Rules/&SituationalContext9001Format=Tiene una gran espada en sus manos: Rules/&SituationalContext9002Format=Tiene una espada larga en las manos: diff --git a/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt b/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt index 40ab179f84..843053f0cb 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt @@ -239,6 +239,7 @@ ModUi/&MarkInvisibleTeleportersOnLevelMap=+ También marca la ubicación de l ModUi/&MaxAllowedClasses=Clases máximas permitidas ModUi/&Merchants=Comerciantes: ModUi/&Metamagic=Metamagia +ModUi/&ModifyGravitySlam=+ Modificar el hechizo Golpe de gravedad para empujar a los objetivos afectados hacia abajo y que sea un cilindro en lugar de una esfera ModUi/&Monsters=Monstruos: ModUi/&MovementGridWidthModifier=Multiplica el ancho de la cuadrícula de movimiento por [%] ModUi/&MulticlassKeyHelp=SHIFT hace clic en un hechizo para invertir el tipo de espacio de repertorio predeterminado consumido\n[Brujo gasta espacios de hechizo blancos y otros gastan los verdes de pacto] diff --git a/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt index 3e897aa906..d544bda717 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt @@ -246,6 +246,8 @@ Rules/&ActivationTypeOnRageStartAutomaticTitle=Démarrage automatique de la rage Rules/&ActivationTypeOnReduceCreatureToZeroHPAutoTitle=Créature automatique réduite à zéro PV Rules/&ActivationTypeOnSneakAttackHitAutoTitle=Attaque furtive automatique Rules/&CounterFormDismissCreatureFormat=Renvoie une créature invoquée ciblée +Rules/&MotionFormPushDownFormat=Appuyez sur {0} +Rules/&MotionFormSwitchFormat=Changer de place Rules/&SituationalContext9000Format=A des types d'armes de maîtrise de la lame en main : Rules/&SituationalContext9001Format=A une épée à deux mains : Rules/&SituationalContext9002Format=A une épée longue dans les mains : diff --git a/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt index 44364645bb..ec201bfa57 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt @@ -239,6 +239,7 @@ ModUi/&MarkInvisibleTeleportersOnLevelMap=+ Marquez également l'emplacement ModUi/&MaxAllowedClasses=Classes maximales autorisées ModUi/&Merchants=Marchands : ModUi/&Metamagic=Métamagie +ModUi/&ModifyGravitySlam=+ Modifier le sort Gravity Slam pour pousser les cibles affectées vers le bas et être un cylindre au lieu d'une sphère ModUi/&Monsters=Monstres : ModUi/&MovementGridWidthModifier=Multipliez la largeur de la grille de mouvement par [%] ModUi/&MulticlassKeyHelp=SHIFT cliquez sur un sort pour inverser le type d'emplacement de répertoire par défaut consommé\n[Warlock dépense des emplacements de sorts blancs et d'autres dépensent des verts du pacte] diff --git a/SolastaUnfinishedBusiness/Translations/it/Others-it.txt b/SolastaUnfinishedBusiness/Translations/it/Others-it.txt index 11ecbe18c4..ab16f30e79 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Others-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Others-it.txt @@ -246,6 +246,8 @@ Rules/&ActivationTypeOnRageStartAutomaticTitle=Avvio automatico della rabbia Rules/&ActivationTypeOnReduceCreatureToZeroHPAutoTitle=Creatura automatica ridotta a zero HP Rules/&ActivationTypeOnSneakAttackHitAutoTitle=Attacco furtivo automatico Rules/&CounterFormDismissCreatureFormat=Congeda una creatura bersaglio evocata +Rules/&MotionFormPushDownFormat=Spingere verso il basso {0} +Rules/&MotionFormSwitchFormat=Cambiare posto Rules/&SituationalContext9000Format=Ha in mano i tipi di armi Blade Mastery: Rules/&SituationalContext9001Format=Ha la Spada Grande in mano: Rules/&SituationalContext9002Format=Ha la spada lunga in mano: diff --git a/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt b/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt index f419797d86..6da72c390e 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt @@ -239,6 +239,7 @@ ModUi/&MarkInvisibleTeleportersOnLevelMap=+ Contrassegna anche la posizione d ModUi/&MaxAllowedClasses=Classi massime consentite ModUi/&Merchants=Commercianti: ModUi/&Metamagic=Metamagia +ModUi/&ModifyGravitySlam=+ Modifica l'incantesimo Gravity Slam per spingere verso il basso i bersagli colpiti e trasformarlo in un cilindro anziché in una sfera ModUi/&Monsters=Mostri: ModUi/&MovementGridWidthModifier=Moltiplica la larghezza della griglia di movimento per [%] ModUi/&MulticlassKeyHelp=MAIUSC fare clic su un incantesimo inverte il tipo di slot di repertorio predefinito consumato\n[Stregone spende slot incantesimo bianchi e altri spendono quelli verdi del patto] diff --git a/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt index 5ea03fed71..2a5a6514e8 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt @@ -246,6 +246,8 @@ Rules/&ActivationTypeOnRageStartAutomaticTitle=オートレイジスタート Rules/&ActivationTypeOnReduceCreatureToZeroHPAutoTitle=自動クリーチャーのHPがゼロに減少 Rules/&ActivationTypeOnSneakAttackHitAutoTitle=オートスニークアタック Rules/&CounterFormDismissCreatureFormat=対象の召喚されたクリーチャーを退ける +Rules/&MotionFormPushDownFormat={0}を押し下げる +Rules/&MotionFormSwitchFormat=場所を交換する Rules/&SituationalContext9000Format=ブレードマスタリーの武器タイプを手に持っています: Rules/&SituationalContext9001Format=手に大剣を持っている: Rules/&SituationalContext9002Format=ロングソードを手に持っている: diff --git a/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt index dea769ed66..98e7779264 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt @@ -239,6 +239,7 @@ ModUi/&MarkInvisibleTeleportersOnLevelMap=+ 発見後にレベルマップ上 ModUi/&MaxAllowedClasses=許可されるクラスの最大数 ModUi/&Merchants=販売者: ModUi/&Metamagic=メタマジック +ModUi/&ModifyGravitySlam=+ 重力スラム 呪文を変更して、影響を受けたターゲットを押し下げ、球体ではなく円筒形になるようにします ModUi/&Monsters=モンスター: ModUi/&MovementGridWidthModifier=移動グリッドの幅を乗算します [%] ModUi/&MulticlassKeyHelp=SHIFT で呪文をクリックすると、消費されるデフォルトのレパートリー スロット タイプが反転します\n[ウォーロックは白い呪文スロットを消費します他の人は協定の緑のものを使います] diff --git a/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt index 711a5c8f43..2cebe7200d 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt @@ -246,6 +246,8 @@ Rules/&ActivationTypeOnRageStartAutomaticTitle=자동 분노 시작 Rules/&ActivationTypeOnReduceCreatureToZeroHPAutoTitle=자동 생명체의 HP가 0으로 감소했습니다. Rules/&ActivationTypeOnSneakAttackHitAutoTitle=자동 몰래 공격 Rules/&CounterFormDismissCreatureFormat=소환된 대상 생물을 해제합니다. +Rules/&MotionFormPushDownFormat={0}을 누르세요 +Rules/&MotionFormSwitchFormat=자리를 바꾸다 Rules/&SituationalContext9000Format=손에 블레이드 마스터리 무기 유형이 있음: Rules/&SituationalContext9001Format=대검을 손에 쥐고 있음: Rules/&SituationalContext9002Format=손에 장검이 있음: diff --git a/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt index 7b1d471db4..ce7c02191c 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt @@ -239,6 +239,7 @@ ModUi/&MarkInvisibleTeleportersOnLevelMap=+ 발견 후 레벨 지도에 보 ModUi/&MaxAllowedClasses=최대 허용 수업 ModUi/&Merchants=상점: ModUi/&Metamagic=메타매직 +ModUi/&ModifyGravitySlam=+ 중력 강타 주문을 수정하여 영향을 받는 대상을 아래로 밀어내고 구체 대신 원통형으로 만듭니다. ModUi/&Monsters=괴물: ModUi/&MovementGridWidthModifier=이동 그리드 너비에 [%]를 곱합니다. ModUi/&MulticlassKeyHelp=주문을 SHIFT 클릭하면 소비되는 기본 레퍼토리 슬롯 유형이 반전됩니다.\n[워록은 흰색 주문 슬롯을 소비합니다. 다른 사람들은 녹색 계약을 사용합니다.] diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt index 17b69ae868..95aa028f76 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt @@ -246,6 +246,8 @@ Rules/&ActivationTypeOnRageStartAutomaticTitle=Início de raiva automática Rules/&ActivationTypeOnReduceCreatureToZeroHPAutoTitle=Criatura Automática Reduzida a Zero HP Rules/&ActivationTypeOnSneakAttackHitAutoTitle=Ataque furtivo automático Rules/&CounterFormDismissCreatureFormat=Dispensa uma criatura alvo conjurada +Rules/&MotionFormPushDownFormat=Empurre para baixo {0} +Rules/&MotionFormSwitchFormat=Trocar de lugar Rules/&SituationalContext9000Format=Tem tipos de armas de Maestria em Lâmina em mãos: Rules/&SituationalContext9001Format=Tem Greatsword em mãos: Rules/&SituationalContext9002Format=Possui Espada Longa em mãos: diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt index c419a5e3a5..b2d123bd4a 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt @@ -239,6 +239,7 @@ ModUi/&MarkInvisibleTeleportersOnLevelMap=+ Marque também a localização do ModUi/&MaxAllowedClasses=Máximo de classes permitidas ModUi/&Merchants=Comerciantes: ModUi/&Metamagic=Metamágica +ModUi/&ModifyGravitySlam=+ Modificar o feitiço Gravity Slam para empurrar os alvos afetados para baixo e torná-lo um cilindro em vez de uma esfera ModUi/&Monsters=Monstros: ModUi/&MovementGridWidthModifier=Multiplique a largura da grade de movimento por [%] ModUi/&MulticlassKeyHelp=SHIFT clicar em um feitiço inverte o tipo de slot de repertório padrão consumido\n[Warlock gasta slots de feitiço branco e outros gastam os verdes do pacto] diff --git a/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt index d5bc3330b6..e628c63aac 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt @@ -246,6 +246,8 @@ Rules/&ActivationTypeOnRageStartAutomaticTitle=Автоматическое на Rules/&ActivationTypeOnReduceCreatureToZeroHPAutoTitle=Автоматическое уменьшение хитов существа до нуля Rules/&ActivationTypeOnSneakAttackHitAutoTitle=Автоматическая скрытая атака Rules/&CounterFormDismissCreatureFormat=Отпускает призванное существо +Rules/&MotionFormPushDownFormat=Нажмите вниз {0} +Rules/&MotionFormSwitchFormat=Поменяться местами Rules/&SituationalContext9000Format=Держит в руках тип оружия Мастерства клинка: Rules/&SituationalContext9001Format=Держит в руках двуручный меч: Rules/&SituationalContext9002Format=Держит в руках длинный меч: diff --git a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt index fef497b871..bc47955649 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt @@ -239,6 +239,7 @@ ModUi/&MarkInvisibleTeleportersOnLevelMap=+ Также помечать ме ModUi/&MaxAllowedClasses=Максимальное разрешённое количество классов ModUi/&Merchants=Торговцы: ModUi/&Metamagic=Метамагия +ModUi/&ModifyGravitySlam=+ Измените заклинание Гравитационный удар, чтобы оно толкало пораженные цели вниз и принимало форму цилиндра вместо сферы ModUi/&Monsters=Монстры: ModUi/&MovementGridWidthModifier=Увеличить ширину сетки передвижения на множитель [%] ModUi/&MulticlassKeyHelp=Нажатие с SHIFT по заклинанию переключает тип затрачиваемой ячейки по умолчанию\n[Колдун тратит белые ячейки заклинаний, а остальные - зелёные ячейки колдуна] diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt index b0207018d8..a4820a2a86 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt @@ -246,6 +246,8 @@ Rules/&ActivationTypeOnRageStartAutomaticTitle=自动开始狂暴 Rules/&ActivationTypeOnReduceCreatureToZeroHPAutoTitle=自动生物生命值降至零 Rules/&ActivationTypeOnSneakAttackHitAutoTitle=自动偷袭 Rules/&CounterFormDismissCreatureFormat=解散一个目标召唤生物 +Rules/&MotionFormPushDownFormat=下推{0} +Rules/&MotionFormSwitchFormat=交换位置 Rules/&SituationalContext9000Format=手持剑刃精通武器: Rules/&SituationalContext9001Format=手持巨剑: Rules/&SituationalContext9002Format=手持长剑: diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt index 6f6312a344..abcb9290aa 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt @@ -239,6 +239,7 @@ ModUi/&MarkInvisibleTeleportersOnLevelMap=+发现后在关卡地图上标记 ModUi/&MaxAllowedClasses=最大允许职业 ModUi/&Merchants=商家: ModUi/&Metamagic=超魔 +ModUi/&ModifyGravitySlam=+ 修改重力猛击法术,将受影响的目标向下推,并将其变为圆柱体而不是球体 ModUi/&Monsters=怪物: ModUi/&MovementGridWidthModifier=将移动格子宽度乘以 [%] ModUi/&MulticlassKeyHelp=SHIFT点击法术会反转消耗的默认曲目槽类型\n[术士消耗白色法术位,其他职业消耗绿色的] From 2ee7c76cc4672a47c5f87fc5c6606b7fa47b5bd8 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Fri, 13 Sep 2024 07:00:32 -0700 Subject: [PATCH 143/212] update collaterals --- .../ConditionStrikeWithTheWindMovement.json | 6 +++--- .../ConditionSwiftQuiver.json | 19 +++++++------------ .../SpellDefinition/SwiftQuiver.json | 6 +++--- .../ChangelogHistory.txt | 6 +++--- SolastaUnfinishedBusiness/Settings/empty.xml | 12 +++++++++--- 5 files changed, 25 insertions(+), 24 deletions(-) diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionStrikeWithTheWindMovement.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionStrikeWithTheWindMovement.json index 0f37b38454..7566848a37 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionStrikeWithTheWindMovement.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionStrikeWithTheWindMovement.json @@ -40,19 +40,19 @@ "additionalConditionTurnOccurenceType": "StartOfTurn", "conditionStartParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", + "m_AssetGUID": "26586e11a6341f142bd148aa07107e4e", "m_SubObjectName": "", "m_SubObjectType": "" }, "conditionParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "8bc6a625e714ba043a1d90d489520d99", + "m_AssetGUID": "16f7e35a477e694418d4a62dfd0fe425", "m_SubObjectName": "", "m_SubObjectType": "" }, "conditionEndParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "aa315960d51fe0149842924060067b43", + "m_AssetGUID": "4a751908e7238124d81c60a1fdfdaf9f", "m_SubObjectName": "", "m_SubObjectType": "" }, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionSwiftQuiver.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionSwiftQuiver.json index 0e2aa62869..abdcf08f11 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionSwiftQuiver.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionSwiftQuiver.json @@ -39,27 +39,22 @@ "conditionStartParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" + "m_SubObjectName": null, + "m_SubObjectType": null }, "conditionParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" + "m_SubObjectName": null, + "m_SubObjectType": null }, "conditionEndParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "recurrentEffectParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" + "m_SubObjectName": null, + "m_SubObjectType": null }, + "recurrentEffectParticleReference": null, "characterShaderReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", "m_AssetGUID": "", diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/SwiftQuiver.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/SwiftQuiver.json index a9b310e79e..8b41b7e597 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/SwiftQuiver.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/SwiftQuiver.json @@ -261,19 +261,19 @@ }, "conditionStartParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", + "m_AssetGUID": "2da227cea9dca7d41b5d447904eb594c", "m_SubObjectName": "", "m_SubObjectType": "" }, "conditionParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", + "m_AssetGUID": "efdfc9a01d8307f4ba69ffa457abd4d3", "m_SubObjectName": "", "m_SubObjectType": "" }, "conditionEndParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", + "m_AssetGUID": "0a30f6db20ec9ce47b58cb2b1cfeb655", "m_SubObjectName": "", "m_SubObjectType": "" }, diff --git a/SolastaUnfinishedBusiness/ChangelogHistory.txt b/SolastaUnfinishedBusiness/ChangelogHistory.txt index 03a74b231b..181425c1d0 100644 --- a/SolastaUnfinishedBusiness/ChangelogHistory.txt +++ b/SolastaUnfinishedBusiness/ChangelogHistory.txt @@ -3,8 +3,9 @@ - added Command, Dissonant Whispers, Holy Weapon, and Swift Quiver spells - added Character > General 'Add the Fall Prone action to all playable races' - added Character > Rules > 'Enable push and pull motion effects to also work on up/down axis' -- added interface > Dungeon Maker > 'Enable variable placeholders on descriptions' +- added Interface > Dungeon Maker > 'Enable variable placeholders on descriptions' - added Interface > Game UI > 'Enable CTRL click-drag to bypass quest items checks on drop' +- fixed Ashardalon's Stride spell doing multiple damages to same target on same round - fixed Barbarian Sundering Blow interaction with Call Lightning - fixed Bardic Inspiration, Indomitable Resistances, and Legendary Resistances save logic - fixed Bend Luck, Flash of Genius, Inspiring Protection, Shield Master, and Weal/Woe reaction consumption @@ -21,10 +22,9 @@ - fixed Rescue the Dying spell reacting on enemy death - fixed Quickened interaction with melee attack cantrips - fixed Wrathful Smite to do a wisdom ability check against caster DC -- improved gadgets to trigger "try alter save outcome" reactions [VANILLA] +- improved location gadgets to trigger "try alter save outcome" reactions [VANILLA] - improved Maneuvering Attack, and Martial Warlord strategic repositioning to use a run stance - improved mod UI to ensure all settings required to be in sync on MP sessions are now under Gameplay -- improved saving roll reaction modal descriptions - improved Sorcerer Wild Magic tides of chaos, Conversion Slots, and Shorthand versatilities to react on ability checks - improved victory modal export behavior to allow heroes not in pool to be exported [VANILLA] diff --git a/SolastaUnfinishedBusiness/Settings/empty.xml b/SolastaUnfinishedBusiness/Settings/empty.xml index 4d1f148ab3..575d1f76ed 100644 --- a/SolastaUnfinishedBusiness/Settings/empty.xml +++ b/SolastaUnfinishedBusiness/Settings/empty.xml @@ -2,7 +2,7 @@ 1 0 - 0 + 4 false false false @@ -432,6 +432,7 @@ false false false + true false false false @@ -444,7 +445,6 @@ 0 0 false - false false false false @@ -1099,11 +1099,17 @@ false false false - false false + false + false + false false en false false false + 0 + false + false + false \ No newline at end of file From 21a06f5536211dc6823ecb5f975249a646d9f98b Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Fri, 13 Sep 2024 07:01:17 -0700 Subject: [PATCH 144/212] auto format, clean up, and SFX tweaks --- .../Api/DatabaseHelper-RELEASE.cs | 3 + .../Api/GameExtensions/EnumExtensions.cs | 2 +- .../ForcePushOrDragFromEffectPoint.cs | 3 +- .../Models/CharacterContext.cs | 3 +- .../Models/SrdAndHouseRulesContext.cs | 66 +++++++++---------- .../UserGadgetParameterValuePatcher.cs | 2 +- .../Spells/SpellBuildersLevel01.cs | 2 +- .../Spells/SpellBuildersLevel05.cs | 14 ++-- 8 files changed, 52 insertions(+), 43 deletions(-) diff --git a/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs b/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs index c9f68738be..8b1c2c02c3 100644 --- a/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs +++ b/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs @@ -1741,6 +1741,9 @@ internal static class FeatureDefinitionPointPools internal static class FeatureDefinitionPowers { + internal static FeatureDefinitionPower PowerWindGuidingWinds { get; } = + GetDefinition("PowerWindGuidingWinds"); + internal static FeatureDefinitionPower PowerBardTraditionVerbalOnslaught { get; } = GetDefinition("PowerBardTraditionVerbalOnslaught"); diff --git a/SolastaUnfinishedBusiness/Api/GameExtensions/EnumExtensions.cs b/SolastaUnfinishedBusiness/Api/GameExtensions/EnumExtensions.cs index d46084a900..18a61c5ea6 100644 --- a/SolastaUnfinishedBusiness/Api/GameExtensions/EnumExtensions.cs +++ b/SolastaUnfinishedBusiness/Api/GameExtensions/EnumExtensions.cs @@ -154,7 +154,7 @@ internal enum ExtraMotionType // RallyKindred, // PushRandomDirection, CustomSwap = 9000, - PushDown = 9001, + PushDown = 9001 } internal enum ExtraPowerAttackHitComputation diff --git a/SolastaUnfinishedBusiness/Behaviors/ForcePushOrDragFromEffectPoint.cs b/SolastaUnfinishedBusiness/Behaviors/ForcePushOrDragFromEffectPoint.cs index 1897a43134..37c2968948 100644 --- a/SolastaUnfinishedBusiness/Behaviors/ForcePushOrDragFromEffectPoint.cs +++ b/SolastaUnfinishedBusiness/Behaviors/ForcePushOrDragFromEffectPoint.cs @@ -65,7 +65,7 @@ public static bool TryPushFromEffectTargetPoint( { position = formsParams.position; } - else if(effectForm.MotionForm?.Type == (MotionForm.MotionType)ExtraMotionType.PushDown) + else if (effectForm.MotionForm?.Type == (MotionForm.MotionType)ExtraMotionType.PushDown) { var locationTarget = GameLocationCharacter.GetFromActor(formsParams.targetCharacter); if (locationTarget == null) @@ -73,6 +73,7 @@ public static bool TryPushFromEffectTargetPoint( //Do nothing, maybe log error? return false; } + position = locationTarget.locationPosition + new int3(0, 10, 0); } else diff --git a/SolastaUnfinishedBusiness/Models/CharacterContext.cs b/SolastaUnfinishedBusiness/Models/CharacterContext.cs index aa50b046f1..50ca7023ff 100644 --- a/SolastaUnfinishedBusiness/Models/CharacterContext.cs +++ b/SolastaUnfinishedBusiness/Models/CharacterContext.cs @@ -741,8 +741,9 @@ internal static void SwitchHelpPower() internal static void SwitchProneAction() { + DropProne.actionType = ActionDefinitions.ActionType.NoCost; DropProne.formType = Main.Settings.AddFallProneActionToAllRaces - ? ActionDefinitions.ActionFormType.Large + ? ActionDefinitions.ActionFormType.Small : ActionDefinitions.ActionFormType.Invisible; } diff --git a/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs b/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs index e557936719..dbfc65c476 100644 --- a/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs +++ b/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs @@ -938,39 +938,6 @@ private static void NoTwinnedBladeCantrips() MetamagicOptionDefinitions.MetamagicTwinnedSpell.AddCustomSubFeatures(NoTwinned.Validator); } - #region Gravity Slam - - private static EffectDescription gravitySlamVanilla; - private static EffectDescription gravitySlamModified; - - private static void ModifyGravitySlam() - { - gravitySlamVanilla = GravitySlam.EffectDescription; - - gravitySlamModified = EffectDescriptionBuilder.Create(gravitySlamVanilla) - .SetTargetingData(Side.All, RangeType.Distance, 20, TargetType.Cylinder, 4, 10) - .AddEffectForms(EffectFormBuilder.MotionForm(ExtraMotionType.PushDown, 10)) - .Build(); - - ToggleGravitySlamModification(); - } - - internal static void ToggleGravitySlamModification() - { - if (Main.Settings.EnablePullPushOnVerticalDirection && Main.Settings.ModifyGravitySlam) - { - GravitySlam.effectDescription = gravitySlamModified; - } - else - { - GravitySlam.effectDescription = gravitySlamVanilla; - } - - Global.RefreshControlledCharacter(); - } - - #endregion - private sealed class FilterTargetingCharacterChainLightning : IFilterTargetingCharacter { public bool EnforceFullSelection => false; @@ -1049,4 +1016,37 @@ internal sealed class NoTwinned public static NoTwinned Mark { get; } = new(); } + + #region Gravity Slam + + private static EffectDescription gravitySlamVanilla; + private static EffectDescription gravitySlamModified; + + private static void ModifyGravitySlam() + { + gravitySlamVanilla = GravitySlam.EffectDescription; + + gravitySlamModified = EffectDescriptionBuilder.Create(gravitySlamVanilla) + .SetTargetingData(Side.All, RangeType.Distance, 20, TargetType.Cylinder, 4, 10) + .AddEffectForms(EffectFormBuilder.MotionForm(ExtraMotionType.PushDown, 10)) + .Build(); + + ToggleGravitySlamModification(); + } + + internal static void ToggleGravitySlamModification() + { + if (Main.Settings.EnablePullPushOnVerticalDirection && Main.Settings.ModifyGravitySlam) + { + GravitySlam.effectDescription = gravitySlamModified; + } + else + { + GravitySlam.effectDescription = gravitySlamVanilla; + } + + Global.RefreshControlledCharacter(); + } + + #endregion } diff --git a/SolastaUnfinishedBusiness/Patches/UserGadgetParameterValuePatcher.cs b/SolastaUnfinishedBusiness/Patches/UserGadgetParameterValuePatcher.cs index c0e738e7c1..4b570bc606 100644 --- a/SolastaUnfinishedBusiness/Patches/UserGadgetParameterValuePatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/UserGadgetParameterValuePatcher.cs @@ -33,7 +33,7 @@ static string Replace(Match match) return match.Value; } } - + [HarmonyPatch(typeof(UserGadgetParameterValue), nameof(UserGadgetParameterValue.StringValue), MethodType.Getter)] [SuppressMessage("Minor Code Smell", "S101:Types should be named in PascalCase", Justification = "Patch")] [UsedImplicitly] diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs index f07498bd34..15520155ab 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs @@ -2140,7 +2140,7 @@ internal static SpellDefinition BuildGoneWithTheWind() .SetGuiPresentation(Category.Condition, Gui.EmptyContent, ConditionDefinitions.ConditionDisengaging) .SetPossessive() .SetFeatures(movementAffinityStrikeWithTheWind) - .SetConditionParticleReference(ConditionSpellbladeArcaneEscape) + .SetConditionParticleReference(PowerWindGuidingWinds) .AddToDB(); var additionalDamageStrikeWithTheWind = FeatureDefinitionAdditionalDamageBuilder diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel05.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel05.cs index ba2eb5fe4c..1dd581b97e 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel05.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel05.cs @@ -1143,7 +1143,6 @@ internal static SpellDefinition BuildSwiftQuiver() .AddCustomSubFeatures(new AddExtraSwiftQuiverAttack( ActionDefinitions.ActionType.Bonus, ValidatorsCharacter.HasNoneOfConditions(ConditionMonkFlurryOfBlowsUnarmedStrikeBonus.Name))) - .CopyParticleReferences(ConditionDefinitions.ConditionSpiderClimb) .AddToDB(); var spell = SpellDefinitionBuilder @@ -1165,6 +1164,10 @@ internal static SpellDefinition BuildSwiftQuiver() .SetTargetingData(Side.Ally, RangeType.Self, 0, TargetType.Self) .SetEffectForms(EffectFormBuilder.ConditionForm(condition)) .SetCasterEffectParameters(WindWall) + .SetConditionEffectParameters( + Haste.EffectDescription.EffectParticleParameters.conditionStartParticleReference, + SpiderClimb.EffectDescription.EffectParticleParameters.conditionParticleReference, + Haste.EffectDescription.EffectParticleParameters.conditionEndParticleReference) .Build()) .AddToDB(); @@ -1180,10 +1183,11 @@ internal AddExtraSwiftQuiverAttack( // Empty } - private static bool IsTwoHandedBow(RulesetAttackMode mode, RulesetItem item, RulesetCharacterHero hero) + private static bool IsBowOrCrossbow(RulesetAttackMode mode, RulesetItem item, RulesetCharacterHero hero) { - return ValidatorsWeapon.IsOfWeaponType(LongbowType, ShortbowType, HeavyCrossbowType, LightCrossbowType)( - mode, item, hero); + return ValidatorsWeapon.IsOfWeaponType( + LongbowType, ShortbowType, HeavyCrossbowType, LightCrossbowType, + CustomWeaponsContext.HandXbowWeaponType)(mode, item, hero); } protected override List GetAttackModes([NotNull] RulesetCharacter character) @@ -1196,7 +1200,7 @@ protected override List GetAttackModes([NotNull] RulesetChara var item = hero.CharacterInventory.InventorySlotsByName[EquipmentDefinitions.SlotTypeMainHand].EquipedItem; if (item == null || - !IsTwoHandedBow(null, item, hero)) + !IsBowOrCrossbow(null, item, hero)) { return null; } From e72ccf578191c67914a977dce3c785a25bffd76b Mon Sep 17 00:00:00 2001 From: EnderWiggin Date: Fri, 13 Sep 2024 17:36:34 +0300 Subject: [PATCH 145/212] fixed PushDown motion form not working --- .../Behaviors/ForcePushOrDragFromEffectPoint.cs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/SolastaUnfinishedBusiness/Behaviors/ForcePushOrDragFromEffectPoint.cs b/SolastaUnfinishedBusiness/Behaviors/ForcePushOrDragFromEffectPoint.cs index 37c2968948..b99c9c5a30 100644 --- a/SolastaUnfinishedBusiness/Behaviors/ForcePushOrDragFromEffectPoint.cs +++ b/SolastaUnfinishedBusiness/Behaviors/ForcePushOrDragFromEffectPoint.cs @@ -1,6 +1,7 @@ using System.Collections.Generic; using SolastaUnfinishedBusiness.Api.GameExtensions; using TA; +using static MotionForm; namespace SolastaUnfinishedBusiness.Behaviors; @@ -65,7 +66,7 @@ public static bool TryPushFromEffectTargetPoint( { position = formsParams.position; } - else if (effectForm.MotionForm?.Type == (MotionForm.MotionType)ExtraMotionType.PushDown) + else if (effectForm.MotionForm?.Type == (MotionType)ExtraMotionType.PushDown) { var locationTarget = GameLocationCharacter.GetFromActor(formsParams.targetCharacter); if (locationTarget == null) @@ -97,8 +98,9 @@ formsParams.saveOutcome is not var motionForm = effectForm.MotionForm; - if (motionForm.Type != MotionForm.MotionType.PushFromOrigin - && motionForm.Type != MotionForm.MotionType.DragToOrigin) + if (motionForm.Type is not MotionType.PushFromOrigin + and not MotionType.DragToOrigin + and not (MotionType)ExtraMotionType.PushDown) { return true; } @@ -116,7 +118,7 @@ formsParams.saveOutcome is not return false; } - var reverse = motionForm.Type == MotionForm.MotionType.DragToOrigin; + var reverse = motionForm.Type == MotionType.DragToOrigin; if (!ServiceRepository.GetService() .ComputePushDestination(position, target, motionForm.Distance, reverse, From 1ffb89acdde0986d4a1ffee42919f32047d22614 Mon Sep 17 00:00:00 2001 From: EnderWiggin Date: Fri, 13 Sep 2024 18:28:24 +0300 Subject: [PATCH 146/212] fixed downward push/pull ton bringing flyers to ground, but 1 tile above --- .../Behaviors/VerticalPushPullMotion.cs | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/SolastaUnfinishedBusiness/Behaviors/VerticalPushPullMotion.cs b/SolastaUnfinishedBusiness/Behaviors/VerticalPushPullMotion.cs index d1c1f2536e..23132822d7 100644 --- a/SolastaUnfinishedBusiness/Behaviors/VerticalPushPullMotion.cs +++ b/SolastaUnfinishedBusiness/Behaviors/VerticalPushPullMotion.cs @@ -1,6 +1,7 @@ using System; using TA; using UnityEngine; +using static CellFlags; namespace SolastaUnfinishedBusiness.Behaviors; @@ -54,16 +55,22 @@ public static bool ComputePushDestination( delta.y = sides.y == 0 ? delta.y : 0; delta.z = sides.z == 0 ? delta.z : 0; - var allSurfaceSides = CellFlags.DirectionToAllSurfaceSides(sides); + sides.y = -sides.y; //invert vertical direction before getting flags + var surfaceSides = DirectionToAllSurfaceSides(sides); + sides.y = -sides.y; //return vertical direction to normal + var flag = true; var canMoveThroughWalls = target.CanMoveInSituation(RulesetCharacter.MotionRange.ThroughWalls); - foreach (var allSide in CellFlags.AllSides) + var size = target.SizeParameters; + + //TODO: find a way to add sliding if only part of sides are blocked? + foreach (var side in AllSides) { - if (flag && (allSide & allSurfaceSides) != CellFlags.Side.None) - { - flag &= positioningService.CanCharacterMoveThroughSide(target.SizeParameters, position, allSide, - canMoveThroughWalls); - } + if (!flag) { break; } + + if ((side & surfaceSides) == Side.None) { continue; } + + flag &= positioningService.CanCharacterMoveThroughSide(size, position, side, canMoveThroughWalls); } if (flag && positioningService.CanPlaceCharacter(target, position, CellHelpers.PlacementMode.Station)) From 245798eea6e9660c8b3436552fa22094585fbdf1 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Fri, 13 Sep 2024 15:03:39 -0700 Subject: [PATCH 147/212] add Character > Rules > 'Allow allies to perceive Ranger GloomStalker when in natural darkness' --- SolastaUnfinishedBusiness/Displays/RulesDisplay.cs | 8 +++++++- SolastaUnfinishedBusiness/Settings.cs | 1 + .../Subclasses/RangerGloomStalker.cs | 7 ++++--- SolastaUnfinishedBusiness/Translations/de/Settings-de.txt | 1 + SolastaUnfinishedBusiness/Translations/en/Settings-en.txt | 1 + SolastaUnfinishedBusiness/Translations/es/Settings-es.txt | 1 + SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt | 1 + SolastaUnfinishedBusiness/Translations/it/Settings-it.txt | 1 + SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt | 1 + SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt | 1 + .../Translations/pt-BR/Settings-pt-BR.txt | 1 + SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt | 1 + .../Translations/zh-CN/Settings-zh-CN.txt | 1 + 13 files changed, 22 insertions(+), 4 deletions(-) diff --git a/SolastaUnfinishedBusiness/Displays/RulesDisplay.cs b/SolastaUnfinishedBusiness/Displays/RulesDisplay.cs index 3cb9eea9ba..09f4223922 100644 --- a/SolastaUnfinishedBusiness/Displays/RulesDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/RulesDisplay.cs @@ -485,13 +485,19 @@ internal static void DisplayRules() UI.Label(); + toggle = Main.Settings.AllowAlliesToPerceiveRangerGloomStalkerInNaturalDarkness; + if (UI.Toggle(Gui.Localize("ModUi/&AllowAlliesToPerceiveRangerGloomStalkerInNaturalDarkness"), ref toggle, UI.AutoWidth())) + { + Main.Settings.AllowAlliesToPerceiveRangerGloomStalkerInNaturalDarkness = toggle; + } + toggle = Main.Settings.ChangeDragonbornElementalBreathUsages; if (UI.Toggle(Gui.Localize("ModUi/&ChangeDragonbornElementalBreathUsages"), ref toggle, UI.AutoWidth())) { Main.Settings.ChangeDragonbornElementalBreathUsages = toggle; CharacterContext.SwitchDragonbornElementalBreathUsages(); } - + toggle = Main.Settings.EnableSignatureSpellsRelearn; if (UI.Toggle(Gui.Localize("ModUi/&EnableSignatureSpellsRelearn"), ref toggle, UI.AutoWidth())) { diff --git a/SolastaUnfinishedBusiness/Settings.cs b/SolastaUnfinishedBusiness/Settings.cs index 6e7ac53602..52b47443a3 100644 --- a/SolastaUnfinishedBusiness/Settings.cs +++ b/SolastaUnfinishedBusiness/Settings.cs @@ -299,6 +299,7 @@ public class Settings : UnityModManager.ModSettings public bool IgnoreHandXbowFreeHandRequirements { get; set; } public bool MakeAllMagicStaveArcaneFoci { get; set; } public int WildSurgeDieRollThreshold { get; set; } = 2; + public bool AllowAlliesToPerceiveRangerGloomStalkerInNaturalDarkness { get; set; } public bool ChangeDragonbornElementalBreathUsages { get; set; } public bool EnableSignatureSpellsRelearn { get; set; } public bool AccountForAllDiceOnFollowUpStrike { get; set; } diff --git a/SolastaUnfinishedBusiness/Subclasses/RangerGloomStalker.cs b/SolastaUnfinishedBusiness/Subclasses/RangerGloomStalker.cs index 0d9c28678a..fa634a0906 100644 --- a/SolastaUnfinishedBusiness/Subclasses/RangerGloomStalker.cs +++ b/SolastaUnfinishedBusiness/Subclasses/RangerGloomStalker.cs @@ -267,8 +267,6 @@ public IEnumerator OnPhysicalAttackFinishedByMe( private sealed class CustomBehaviorUmbralSight(FeatureDefinitionSense senseDarkvision18) : ICustomLevelUpLogic, IPreventEnemySenseMode { - private static readonly List Senses = [SenseMode.Type.Darkvision]; - public void ApplyFeature(RulesetCharacterHero hero, string tag) { hero.ActiveFeatures[tag] @@ -285,7 +283,10 @@ public void RemoveFeature(RulesetCharacterHero hero, string tag) public List PreventedSenseModes(GameLocationCharacter attacker, RulesetCharacter defender) { - return Senses; + return Main.Settings.AllowAlliesToPerceiveRangerGloomStalkerInNaturalDarkness && + attacker.Side == defender.Side + ? [] + : [SenseMode.Type.Darkvision]; } } diff --git a/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt b/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt index 6137bfcbe2..823fe68f1d 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt @@ -19,6 +19,7 @@ ModUi/&AdvancedHelp=• ACHTUNG: Diese Einstellu ModUi/&AllItemInDm=Alle Artikel in DM ModUi/&AllRecipesInDm=Alle Rezepte in DM ModUi/&AllowAllPlayersOnNarrativeSequences=+ Alle Spieler in Erzählsequenzen zulassen +ModUi/&AllowAlliesToPerceiveRangerGloomStalkerInNaturalDarkness=Erlaubt Verbündeten, Ranger GloomStalker in natürlicher Dunkelheit wahrzunehmen ModUi/&AllowAnyClassToWearSylvanArmor=Erlaube jeder Klasse, Sylvan-Rüstung oder Lichtbringer-Kleidung zu tragen ModUi/&AllowBeardlessDwarves=Erlaube bartlose Zwerge ModUi/&AllowBladeCantripsToUseReach=Erlaube Blade Cantrips, eine Reichweite statt 5 Fuß zu verwenden. diff --git a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt index 230a7558f9..cacbd9ca71 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt @@ -19,6 +19,7 @@ ModUi/&AdvancedHelp=• ATTENTION: These setting ModUi/&AllItemInDm=All items in DM ModUi/&AllRecipesInDm=All recipes in DM ModUi/&AllowAllPlayersOnNarrativeSequences=+ Allow all players on narrative sequences +ModUi/&AllowAlliesToPerceiveRangerGloomStalkerInNaturalDarkness=Allow allies to perceive Ranger GloomStalker when in natural darkness ModUi/&AllowAnyClassToWearSylvanArmor=Allow any class to wear Sylvan Armor or Lightbringer Clothes ModUi/&AllowBeardlessDwarves=Allow beardless Dwarves ModUi/&AllowBladeCantripsToUseReach=Allow Blade Cantrips to use reach instead of 5 ft diff --git a/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt b/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt index 843053f0cb..8c9c8c62c6 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt @@ -19,6 +19,7 @@ ModUi/&AdvancedHelp=• ATENCIÓN: Esta configur ModUi/&AllItemInDm=Todos los artículos en DM ModUi/&AllRecipesInDm=Todas las recetas en DM. ModUi/&AllowAllPlayersOnNarrativeSequences=+ Permitir a todos los jugadores en secuencias narrativas +ModUi/&AllowAlliesToPerceiveRangerGloomStalkerInNaturalDarkness=Permitir que los aliados perciban a Ranger GloomStalker cuando se encuentran en oscuridad natural ModUi/&AllowAnyClassToWearSylvanArmor=Permitir que cualquier clase use Armadura Sylvan o Ropa de Iluminador ModUi/&AllowBeardlessDwarves=Permitir Enanos imberbes ModUi/&AllowBladeCantripsToUseReach=Permitir que los trucos de espada utilicen alcance en lugar de 5 pies diff --git a/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt index ec201bfa57..2da9dfadeb 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt @@ -19,6 +19,7 @@ ModUi/&AdvancedHelp=• ATTENTION : Ces paramè ModUi/&AllItemInDm=Tous les articles en DM ModUi/&AllRecipesInDm=Toutes les recettes en DM ModUi/&AllowAllPlayersOnNarrativeSequences=+ Autoriser tous les joueurs sur les séquences narratives +ModUi/&AllowAlliesToPerceiveRangerGloomStalkerInNaturalDarkness=Permettre aux alliés de percevoir Ranger GloomStalker lorsqu'ils sont dans l'obscurité naturelle ModUi/&AllowAnyClassToWearSylvanArmor=Autoriser n'importe quelle classe à porter une armure sylvestre ou des vêtements de porteur de lumière ModUi/&AllowBeardlessDwarves=Autoriser les Nains imberbes ModUi/&AllowBladeCantripsToUseReach=Autoriser les sorties de lame à utiliser la portée au lieu de 1,50 m diff --git a/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt b/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt index 6da72c390e..d5db7532d7 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt @@ -19,6 +19,7 @@ ModUi/&AdvancedHelp=• ATTENZIONE: Queste impos ModUi/&AllItemInDm=Tutti gli articoli in DM ModUi/&AllRecipesInDm=Tutte le ricette in DM ModUi/&AllowAllPlayersOnNarrativeSequences=+ Consenti a tutti i giocatori sequenze narrative +ModUi/&AllowAlliesToPerceiveRangerGloomStalkerInNaturalDarkness=Consenti agli alleati di percepire Ranger GloomStalker quando si trovano nell'oscurità naturale ModUi/&AllowAnyClassToWearSylvanArmor=Consenti a qualsiasi classe di indossare Armatura Silvana o Abiti da Portatore di Luce ModUi/&AllowBeardlessDwarves=Consenti Nani senza barba ModUi/&AllowBladeCantripsToUseReach=Consenti a Trucchetti Lama di usare la portata invece di 5 piedi diff --git a/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt index 98e7779264..dba836cd36 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt @@ -19,6 +19,7 @@ ModUi/&AdvancedHelp=• 注意: これらの設 ModUi/&AllItemInDm=DM内のすべてのアイテム ModUi/&AllRecipesInDm=すべてのレシピはDMにあります ModUi/&AllowAllPlayersOnNarrativeSequences=+ すべてのプレイヤーに物語シーケンスを許可 +ModUi/&AllowAlliesToPerceiveRangerGloomStalkerInNaturalDarkness=自然の暗闇にいるときに味方がレンジャー グロウムストーカーを感知できるようにする ModUi/&AllowAnyClassToWearSylvanArmor=どのクラスも森の鎧またはライトブリンガーの服を着用できるようにする ModUi/&AllowBeardlessDwarves=ひげのないドワーフを許可する ModUi/&AllowBladeCantripsToUseReach=ブレード・カントリップが5フィートではなくリーチを使用できるようにする diff --git a/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt index ce7c02191c..fca9548b68 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt @@ -19,6 +19,7 @@ ModUi/&AdvancedHelp=• 주의: 이 설정을 ModUi/&AllItemInDm=DM의 모든 항목 ModUi/&AllRecipesInDm=모든 레시피는 DM에 있어요 ModUi/&AllowAllPlayersOnNarrativeSequences=+ 내러티브 시퀀스에서 모든 플레이어 허용 +ModUi/&AllowAlliesToPerceiveRangerGloomStalkerInNaturalDarkness=자연스러운 어둠 속에서 아군이 레인저 글룸스토커를 인식하도록 허용합니다. ModUi/&AllowAnyClassToWearSylvanArmor=모든 클래스가 실반 갑옷 또는 빛의 인도자 옷을 착용할 수 있도록 허용합니다. ModUi/&AllowBeardlessDwarves=수염이 없는 드워프 허용 ModUi/&AllowBladeCantripsToUseReach=블레이드 캔트립이 5피트 대신 리치를 사용하도록 허용 diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt index b2d123bd4a..166b0aa76d 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt @@ -19,6 +19,7 @@ ModUi/&AdvancedHelp=• ATENÇÃO: Essas configu ModUi/&AllItemInDm=Todos os itens no DM ModUi/&AllRecipesInDm=Todas as receitas em DM ModUi/&AllowAllPlayersOnNarrativeSequences=+ Permitir todos os jogadores em sequências narrativas +ModUi/&AllowAlliesToPerceiveRangerGloomStalkerInNaturalDarkness=Permitir que os aliados percebam Ranger GloomStalker quando na escuridão natural ModUi/&AllowAnyClassToWearSylvanArmor=Permitir que qualquer classe use Armadura Sylvan ou Roupas Lightbringer ModUi/&AllowBeardlessDwarves=Permitir Anões sem barba ModUi/&AllowBladeCantripsToUseReach=Permitir que Blade Cantrips usem alcance em vez de 5 pés diff --git a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt index bc47955649..1b9c138a4a 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt @@ -19,6 +19,7 @@ ModUi/&AdvancedHelp=• ВНИМАНИЕ: Для ModUi/&AllItemInDm=Все предметы в СП ModUi/&AllRecipesInDm=Все рецепты в СП ModUi/&AllowAllPlayersOnNarrativeSequences=+ Позволить всем игрокам участвовать в нарративных последовательностях +ModUi/&AllowAlliesToPerceiveRangerGloomStalkerInNaturalDarkness=Разрешить союзникам воспринимать Ranger GloomStalker в естественной темноте. ModUi/&AllowAnyClassToWearSylvanArmor=Позволить всем классам носить Доспехи Сильвана или Одежды Несущего свет ModUi/&AllowBeardlessDwarves=Разрешить безбородых Дварфов [как, вообще, можно подумать о чём-то столь противоестественном?] ModUi/&AllowBladeCantripsToUseReach=Позволить Заговорам клинков использовать досягаемость персонажа вместо обычных 5 футов diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt index abcb9290aa..ab42c47d71 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt @@ -19,6 +19,7 @@ ModUi/&AdvancedHelp=•注意:这些设置将 ModUi/&AllItemInDm=DM中的所有项目 ModUi/&AllRecipesInDm=冒险中的所有配方 ModUi/&AllowAllPlayersOnNarrativeSequences=+允许所有玩家进行叙述序列 +ModUi/&AllowAlliesToPerceiveRangerGloomStalkerInNaturalDarkness=允许盟友在自然黑暗中感知Ranger GloomStalker ModUi/&AllowAnyClassToWearSylvanArmor=允许任何职业穿森林之甲或光明使者之衣 ModUi/&AllowBeardlessDwarves=允许无须矮人 ModUi/&AllowBladeCantripsToUseReach=允许剑术戏法使用触及范围,而不是 5 英尺 From d1321e60e03e154bbd292a3d5e75cb95fa1202f1 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Fri, 13 Sep 2024 15:04:41 -0700 Subject: [PATCH 148/212] minor format and SFX tweaks --- .../Api/DatabaseHelper-RELEASE.cs | 6 ------ .../Models/SrdAndHouseRulesContext.cs | 12 ++++++------ SolastaUnfinishedBusiness/Patches/GuiPatcher.cs | 17 ++++++++--------- .../Spells/SpellBuildersLevel01.cs | 6 ++---- .../Spells/SpellBuildersLevel05.cs | 7 +++++-- 5 files changed, 21 insertions(+), 27 deletions(-) diff --git a/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs b/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs index 8b1c2c02c3..700c612582 100644 --- a/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs +++ b/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs @@ -308,9 +308,6 @@ internal static class ConditionDefinitions internal static ConditionDefinition ConditionMonkFlurryOfBlowsUnarmedStrikeBonus { get; } = GetDefinition("ConditionMonkFlurryOfBlowsUnarmedStrikeBonus"); - internal static ConditionDefinition ConditionSpiderClimb { get; } = - GetDefinition("ConditionSpiderClimb"); - internal static ConditionDefinition ConditionDomainMischiefBorrowedLuck { get; } = GetDefinition("ConditionDomainMischiefBorrowedLuck"); @@ -689,9 +686,6 @@ internal static class ConditionDefinitions internal static ConditionDefinition ConditionSorcererChildRiftDeflection { get; } = GetDefinition("ConditionSorcererChildRiftDeflection"); - internal static ConditionDefinition ConditionSpellbladeArcaneEscape { get; } = - GetDefinition("ConditionSpellbladeArcaneEscape"); - internal static ConditionDefinition ConditionSpiritGuardians { get; } = GetDefinition("ConditionSpiritGuardians"); diff --git a/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs b/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs index dbfc65c476..7883c796a1 100644 --- a/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs +++ b/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs @@ -1019,14 +1019,14 @@ internal sealed class NoTwinned #region Gravity Slam - private static EffectDescription gravitySlamVanilla; - private static EffectDescription gravitySlamModified; + private static EffectDescription _gravitySlamVanilla; + private static EffectDescription _gravitySlamModified; private static void ModifyGravitySlam() { - gravitySlamVanilla = GravitySlam.EffectDescription; + _gravitySlamVanilla = GravitySlam.EffectDescription; - gravitySlamModified = EffectDescriptionBuilder.Create(gravitySlamVanilla) + _gravitySlamModified = EffectDescriptionBuilder.Create(_gravitySlamVanilla) .SetTargetingData(Side.All, RangeType.Distance, 20, TargetType.Cylinder, 4, 10) .AddEffectForms(EffectFormBuilder.MotionForm(ExtraMotionType.PushDown, 10)) .Build(); @@ -1038,11 +1038,11 @@ internal static void ToggleGravitySlamModification() { if (Main.Settings.EnablePullPushOnVerticalDirection && Main.Settings.ModifyGravitySlam) { - GravitySlam.effectDescription = gravitySlamModified; + GravitySlam.effectDescription = _gravitySlamModified; } else { - GravitySlam.effectDescription = gravitySlamVanilla; + GravitySlam.effectDescription = _gravitySlamVanilla; } Global.RefreshControlledCharacter(); diff --git a/SolastaUnfinishedBusiness/Patches/GuiPatcher.cs b/SolastaUnfinishedBusiness/Patches/GuiPatcher.cs index e27fc2cd46..b1abcc68cf 100644 --- a/SolastaUnfinishedBusiness/Patches/GuiPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/GuiPatcher.cs @@ -49,18 +49,17 @@ public static void Postfix(ref string __result, RangeType rangeType, int rangeVa public static class FormatMotionForm_Patch { [UsedImplicitly] - public static void Postfix(ref string __result, MotionForm motionForm, int range) + public static void Postfix(ref string __result, MotionForm motionForm) { //PATCH: format extra motion types - switch ((ExtraMotionType)motionForm.Type) + __result = (ExtraMotionType)motionForm.Type switch { - case ExtraMotionType.CustomSwap: - __result = Gui.Format("Rules/&MotionFormSwitchFormat", Gui.FormatDistance(motionForm.Distance)); - break; - case ExtraMotionType.PushDown: - __result = Gui.Format("Rules/&MotionFormPushDownFormat", Gui.FormatDistance(motionForm.Distance)); - break; - } + ExtraMotionType.CustomSwap => Gui.Format("Rules/&MotionFormSwitchFormat", + Gui.FormatDistance(motionForm.Distance)), + ExtraMotionType.PushDown => Gui.Format("Rules/&MotionFormPushDownFormat", + Gui.FormatDistance(motionForm.Distance)), + _ => __result + }; } } diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs index 15520155ab..eaf402c9a6 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs @@ -2140,8 +2140,7 @@ internal static SpellDefinition BuildGoneWithTheWind() .SetGuiPresentation(Category.Condition, Gui.EmptyContent, ConditionDefinitions.ConditionDisengaging) .SetPossessive() .SetFeatures(movementAffinityStrikeWithTheWind) - .SetConditionParticleReference(PowerWindGuidingWinds) - .AddToDB(); + .AddToDB(); var additionalDamageStrikeWithTheWind = FeatureDefinitionAdditionalDamageBuilder .Create($"AdditionalDamage{NAME}") @@ -2165,7 +2164,6 @@ internal static SpellDefinition BuildGoneWithTheWind() .SetSpecialInterruptions(ConditionInterruption.Attacks) .AddCustomSubFeatures( new OnConditionAddedOrRemovedStrikeWithTheWindAttack(conditionStrikeWithTheWindAttackMovement)) - .SetConditionParticleReference(ConditionStrikeOfChaosAttackAdvantage) .AddToDB(); var powerStrikeWithTheWind = FeatureDefinitionPowerBuilder @@ -2187,7 +2185,7 @@ internal static SpellDefinition BuildGoneWithTheWind() .SetPossessive() .AddFeatures(powerStrikeWithTheWind) .AddCustomSubFeatures(AddUsablePowersFromCondition.Marker) - .SetConditionParticleReference(ConditionStrikeOfChaosAttackAdvantage) + .SetConditionParticleReference(PowerWindGuidingWinds) .AddToDB(); var spell = SpellDefinitionBuilder diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel05.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel05.cs index 1dd581b97e..14ee21edfb 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel05.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel05.cs @@ -900,11 +900,12 @@ internal static SpellDefinition BuildHolyWeapon() .Create($"Power{NAME}") .SetGuiPresentation(Category.Feature, Sprites.GetSprite(NAME, Resources.PowerHolyWeapon, 256, 128)) .SetUsesFixed(ActivationTime.BonusAction) + .SetShowCasting(false) .SetEffectDescription( EffectDescriptionBuilder .Create() .SetDurationData(DurationType.Minute, 1) - .SetTargetingData(Side.All, RangeType.Distance, 6, TargetType.IndividualsUnique) + .SetTargetingData(Side.All, RangeType.Distance, 24, TargetType.IndividualsUnique) .SetSavingThrowData(false, AttributeDefinitions.Constitution, true, EffectDifficultyClassComputation.SpellCastingFeature) .SetEffectForms( @@ -920,7 +921,6 @@ internal static SpellDefinition BuildHolyWeapon() ConditionDefinitions.ConditionBlinded, ConditionForm.ConditionOperation.Add) .Build()) .SetParticleEffectParameters(FaerieFire) - .SetCasterEffectParameters(PowerOathOfDevotionTurnUnholy) .SetImpactEffectParameters( FeatureDefinitionAdditionalDamages.AdditionalDamageBrandingSmite.impactParticleReference) .SetConditionEffectParameters(ConditionDefinitions.ConditionBlinded) @@ -1004,6 +1004,9 @@ public bool IsValid(CursorLocationSelectTarget __instance, GameLocationCharacter public IEnumerator OnPowerOrSpellInitiatedByMe(CharacterActionMagicEffect action, BaseDefinition baseDefinition) { var ally = action.ActionParams.TargetCharacters[0]; + + EffectHelpers.StartVisualEffect(ally, ally, PowerOathOfDevotionTurnUnholy, EffectHelpers.EffectType.Caster); + var targets = Gui.Battle?.GetContenders(ally, withinRange: 6) ?? []; action.ActionParams.TargetCharacters.SetRange(targets); From 615c95250051dff65db358f92188ddb961c56765 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Fri, 13 Sep 2024 15:05:13 -0700 Subject: [PATCH 149/212] update resources and translations --- .../Properties/Resources.Designer.cs | 10 ++++++++++ .../Properties/Resources.resx | 5 +++++ .../Resources/Spells/CreateBonfire.png | Bin 0 -> 14116 bytes .../Translations/de/Spells/Cantrips-de.txt | 2 ++ .../Translations/en/Spells/Cantrips-en.txt | 2 ++ .../Translations/es/Spells/Cantrips-es.txt | 2 ++ .../Translations/fr/Spells/Cantrips-fr.txt | 2 ++ .../Translations/it/Spells/Cantrips-it.txt | 2 ++ .../Translations/ja/Spells/Cantrips-ja.txt | 2 ++ .../Translations/ko/Spells/Cantrips-ko.txt | 2 ++ .../pt-BR/Spells/Cantrips-pt-BR.txt | 2 ++ .../Translations/ru/Spells/Cantrips-ru.txt | 2 ++ .../zh-CN/Spells/Cantrips-zh-CN.txt | 2 ++ 13 files changed, 35 insertions(+) create mode 100644 SolastaUnfinishedBusiness/Resources/Spells/CreateBonfire.png diff --git a/SolastaUnfinishedBusiness/Properties/Resources.Designer.cs b/SolastaUnfinishedBusiness/Properties/Resources.Designer.cs index 4576d4c983..e2aef9cdd8 100644 --- a/SolastaUnfinishedBusiness/Properties/Resources.Designer.cs +++ b/SolastaUnfinishedBusiness/Properties/Resources.Designer.cs @@ -1129,6 +1129,16 @@ public static byte[] CorruptingBolt { } } + /// + /// Looks up a localized resource of type System.Byte[]. + /// + public static byte[] CreateBonfire { + get { + object obj = ResourceManager.GetObject("CreateBonfire", resourceCulture); + return ((byte[])(obj)); + } + } + /// /// Looks up a localized resource of type System.Byte[]. /// diff --git a/SolastaUnfinishedBusiness/Properties/Resources.resx b/SolastaUnfinishedBusiness/Properties/Resources.resx index bf80f5ed8d..26adf00796 100644 --- a/SolastaUnfinishedBusiness/Properties/Resources.resx +++ b/SolastaUnfinishedBusiness/Properties/Resources.resx @@ -147,6 +147,11 @@ PublicKeyToken=b77a5c561934e089 + + ../Resources/Spells/CreateBonfire.png;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + ../Resources/Spells/AganazzarScorcher.png;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 diff --git a/SolastaUnfinishedBusiness/Resources/Spells/CreateBonfire.png b/SolastaUnfinishedBusiness/Resources/Spells/CreateBonfire.png new file mode 100644 index 0000000000000000000000000000000000000000..bd9153e17ccb2b27dc722402c12d9c7056279c7b GIT binary patch literal 14116 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 Date: Fri, 13 Sep 2024 17:58:12 -0700 Subject: [PATCH 150/212] update translations and diagnostics --- .../UnfinishedBusinessBlueprints/Assets.txt | 5 + .../ConditionCreateBonfireMark.json | 157 +++++ .../ConditionStrikeWithTheWind.json | 6 +- .../ConditionStrikeWithTheWindAttack.json | 16 +- .../ConditionStrikeWithTheWindMovement.json | 18 +- ...yCircleOfTheWildfireCauterizingFlames.json | 5 +- .../ProxyCreateBonfire.json | 143 ++++ .../ProxyFaithfulHound.json | 2 +- .../PowerCreateBonfireDamage.json | 363 ++++++++++ .../PowerHolyWeapon.json | 6 +- .../SpellDefinition/CreateBonfire.json | 372 ++++++++++ Documentation/Spells.md | 644 +++++++++--------- .../Translations/de/Spells/Cantrips-de.txt | 3 + .../Translations/de/Spells/Spells04-de.txt | 1 - .../Translations/en/Spells/Cantrips-en.txt | 5 +- .../Translations/en/Spells/Spells04-en.txt | 1 - .../Translations/es/Spells/Cantrips-es.txt | 3 + .../Translations/es/Spells/Spells04-es.txt | 1 - .../Translations/fr/Spells/Cantrips-fr.txt | 3 + .../Translations/fr/Spells/Spells04-fr.txt | 1 - .../Translations/it/Spells/Cantrips-it.txt | 3 + .../Translations/it/Spells/Spells04-it.txt | 1 - .../Translations/ja/Spells/Cantrips-ja.txt | 3 + .../Translations/ja/Spells/Spells04-ja.txt | 1 - .../Translations/ko/Spells/Cantrips-ko.txt | 3 + .../Translations/ko/Spells/Spells04-ko.txt | 1 - .../pt-BR/Spells/Cantrips-pt-BR.txt | 3 + .../pt-BR/Spells/Spells04-pt-BR.txt | 1 - .../Translations/ru/Spells/Cantrips-ru.txt | 3 + .../Translations/ru/Spells/Spells04-ru.txt | 1 - .../zh-CN/Spells/Cantrips-zh-CN.txt | 3 + .../zh-CN/Spells/Spells04-zh-CN.txt | 1 - 32 files changed, 1421 insertions(+), 358 deletions(-) create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCreateBonfireMark.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/EffectProxyDefinition/ProxyCreateBonfire.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerCreateBonfireDamage.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateBonfire.json diff --git a/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt b/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt index b68854e0ef..62d8c59a96 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt +++ b/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt @@ -697,6 +697,7 @@ ConditionCommandSpellFlee ConditionDefinition ConditionDefinition b52e3cc4-15af- ConditionCommandSpellGrovel ConditionDefinition ConditionDefinition 6422ce36-c309-52f9-b699-bddb61fde71e ConditionCommandSpellHalt ConditionDefinition ConditionDefinition d20e7a46-e706-5c54-8bea-955b2054193a ConditionCorruptingBolt ConditionDefinition ConditionDefinition c47e9ae4-841b-53af-b40f-2cb08dfa7d08 +ConditionCreateBonfireMark ConditionDefinition ConditionDefinition 16259b67-cbf3-59fe-8127-e240592f1470 ConditionCrownOfStars ConditionDefinition ConditionDefinition 2d6f7c70-16fc-550b-83ff-f2e945b43449 ConditionCrusadersMantle ConditionDefinition ConditionDefinition 04a3a8c7-cf68-5a07-a0c1-9aabc911cad9 ConditionCrystalDefense ConditionDefinition ConditionDefinition 9f04a1bd-b2f4-5e66-9939-cc140c9fd83f @@ -1260,6 +1261,7 @@ BreakFreeAbilityCheckConditionWrathfulSmiteEnemy TA.AI.DecisionPackageDefinition DissonantWhispers_Fear TA.AI.DecisionPackageDefinition TA.AI.DecisionPackageDefinition dfe2cc9e-cc70-5cfe-9057-19454acb1068 DieTypeD3 DieTypeDefinition DieTypeDefinition 63dc904b-8d78-5406-90aa-e7e1f3eefd84 ProxyCircleOfTheWildfireCauterizingFlames EffectProxyDefinition EffectProxyDefinition 5d3d90cd-1858-5044-b4f6-586754122132 +ProxyCreateBonfire EffectProxyDefinition EffectProxyDefinition a84e5459-b44a-5dfd-9f27-c4a44b571c3a ProxyDawn EffectProxyDefinition EffectProxyDefinition 5c460453-060a-51c2-9099-a6a40908dba9 ProxyEarthTremor EffectProxyDefinition EffectProxyDefinition fdec4a73-e825-5a14-9f0e-1faca83c21d3 ProxyElementalBreathGreen EffectProxyDefinition EffectProxyDefinition d97ae7c7-c0e5-51d3-8e0b-6a517d0d6ef4 @@ -3086,6 +3088,7 @@ PowerCollegeOfThespianImprovedTerrificPerformance FeatureDefinitionPower Feature PowerCollegeOfThespianTerrificPerformance FeatureDefinitionPower FeatureDefinition ed5f8e89-7ca7-59ee-bd76-b9f936d0797a PowerCollegeOfValianceDishearteningPerformance FeatureDefinitionPower FeatureDefinition 1f54f672-43cd-52b3-8e3e-c9077a7f8eb4 PowerCollegeOfValianceHeroicInspiration FeatureDefinitionPower FeatureDefinition 5b82d737-651e-5bc2-b18b-1963f134f1b5 +PowerCreateBonfireDamage FeatureDefinitionPower FeatureDefinition b7c2435b-6087-5c17-a46b-e970baee8a07 PowerCreateInfusedReplicaAmuletOfHealth FeatureDefinitionPowerSharedPool FeatureDefinition 241cfb02-8421-5f82-8f11-300407bff7c7 PowerCreateInfusedReplicaBackpack_Bag_Of_Holding FeatureDefinitionPowerSharedPool FeatureDefinition 41031a48-4461-5e48-8a60-f7da9a7bd597 PowerCreateInfusedReplicaBeltOfGiantHillStrength FeatureDefinitionPowerSharedPool FeatureDefinition bbd152a7-2d27-5836-a649-3f466da89ce6 @@ -5909,6 +5912,7 @@ PowerCollegeOfThespianImprovedTerrificPerformance FeatureDefinitionPower Feature PowerCollegeOfThespianTerrificPerformance FeatureDefinitionPower FeatureDefinitionPower ed5f8e89-7ca7-59ee-bd76-b9f936d0797a PowerCollegeOfValianceDishearteningPerformance FeatureDefinitionPower FeatureDefinitionPower 1f54f672-43cd-52b3-8e3e-c9077a7f8eb4 PowerCollegeOfValianceHeroicInspiration FeatureDefinitionPower FeatureDefinitionPower 5b82d737-651e-5bc2-b18b-1963f134f1b5 +PowerCreateBonfireDamage FeatureDefinitionPower FeatureDefinitionPower b7c2435b-6087-5c17-a46b-e970baee8a07 PowerCreateInfusedReplicaAmuletOfHealth FeatureDefinitionPowerSharedPool FeatureDefinitionPower 241cfb02-8421-5f82-8f11-300407bff7c7 PowerCreateInfusedReplicaBackpack_Bag_Of_Holding FeatureDefinitionPowerSharedPool FeatureDefinitionPower 41031a48-4461-5e48-8a60-f7da9a7bd597 PowerCreateInfusedReplicaBeltOfGiantHillStrength FeatureDefinitionPowerSharedPool FeatureDefinitionPower bbd152a7-2d27-5836-a649-3f466da89ce6 @@ -12166,6 +12170,7 @@ CommandSpellGrovel SpellDefinition SpellDefinition b48998ac-2379-5637-ad85-8e45c CommandSpellHalt SpellDefinition SpellDefinition d4e87ec4-f113-5c33-b5c6-0452ab42231b ConjureElementalInvisibleStalker SpellDefinition SpellDefinition 4f4b45b0-1a32-55c5-ab58-66d105a6f07f CorruptingBolt SpellDefinition SpellDefinition 715e1a9b-115f-5036-99b9-bf54f7e34f01 +CreateBonfire SpellDefinition SpellDefinition 3f2e87e8-860f-58ce-b347-b54c8d6581ac CreateDeadRisenGhost SpellDefinition SpellDefinition 02a12317-e3e2-5833-9611-eeaaead7c151 CreateDeadRisenGhoul SpellDefinition SpellDefinition 154586bd-b1a2-53d0-ac83-ecf3d0be8a7d CreateDeadRisenSkeleton SpellDefinition SpellDefinition 86611dbf-bc5e-50d4-b699-bb09f11c79a5 diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCreateBonfireMark.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCreateBonfireMark.json new file mode 100644 index 0000000000..d45639b117 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCreateBonfireMark.json @@ -0,0 +1,157 @@ +{ + "$type": "ConditionDefinition, Assembly-CSharp", + "inDungeonEditor": false, + "parentCondition": null, + "conditionType": "Beneficial", + "features": [], + "allowMultipleInstances": false, + "silentWhenAdded": true, + "silentWhenRemoved": true, + "silentWhenRefreshed": false, + "terminateWhenRemoved": false, + "specialDuration": false, + "durationType": "Hour", + "durationParameterDie": "D4", + "durationParameter": 1, + "forceTurnOccurence": false, + "turnOccurence": "EndOfTurn", + "specialInterruptions": [ + "AnyBattleTurnEnd" + ], + "interruptionRequiresSavingThrow": false, + "interruptionSavingThrowComputationMethod": "SaveOverride", + "interruptionSavingThrowAbility": "", + "interruptionDamageThreshold": 0, + "keepConditionIfSavingThrowSucceeds": false, + "interruptionSavingThrowAffinity": "None", + "conditionTags": [], + "recurrentEffectForms": [], + "cancellingConditions": [], + "additionalDamageWhenHit": false, + "additionalDamageTypeDetermination": "Specific", + "additionalDamageType": "", + "additionalDamageQuantity": "AbilityBonus", + "additionalDamageDieType": "D1", + "additionalDamageDieNumber": 1, + "additionalConditionWhenHit": false, + "additionalCondition": null, + "additionalConditionDurationType": "Round", + "additionalConditionDurationParameter": 1, + "additionalConditionTurnOccurenceType": "StartOfTurn", + "conditionStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "conditionParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "conditionEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "recurrentEffectParticleReference": null, + "characterShaderReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "particlesBasedOnAncestryDamageType": false, + "ancestryType": "Sorcerer", + "acidParticleParameters": null, + "coldParticleParameters": null, + "fireParticleParameters": null, + "lightningParticleParameters": null, + "poisonParticleParameters": null, + "overrideCharacterShaderColors": false, + "firstCharacterShaderColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "secondCharacterShaderColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "timeToWaitBeforeApplyingShader": 0.5, + "timeToWaitBeforeRemovingShader": 0.5, + "possessive": false, + "amountOrigin": "None", + "baseAmount": 0, + "additiveAmount": false, + "sourceAbilityBonusMinValue": 1, + "subsequentOnRemoval": null, + "subsequentHasSavingThrow": false, + "subsequentSavingThrowAbilityScore": "Constitution", + "subsequentVariableForDC": "FrenzyExhaustionDC", + "subsequentDCIncrease": 5, + "effectFormsOnRemoved": [], + "forceBehavior": false, + "addBehavior": false, + "fearSource": false, + "battlePackage": null, + "explorationPackage": null, + "removedFromTheGame": false, + "permanentlyRemovedIfExtraPlanar": false, + "refundReceivedDamageWhenRemoved": false, + "followSourcePosition": false, + "disolveCharacterOnDeath": false, + "disolveParameters": { + "$type": "GraphicsCharacterDefinitions+DisolveParameters, Assembly-CSharp", + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "colorWidth": 0.0, + "noiseScale": 5.0, + "hueScale": 0.0, + "vertexOffset": 0.0, + "curve": { + "$type": "UnityEngine.AnimationCurve, UnityEngine.CoreModule" + }, + "startAfterDeathAnimation": false, + "duration": 0.0 + }, + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": true, + "title": "Feature/&NoContentTitle", + "description": "Feature/&NoContentTitle", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "16259b67-cbf3-59fe-8127-e240592f1470", + "contentPack": 9999, + "name": "ConditionCreateBonfireMark" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionStrikeWithTheWind.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionStrikeWithTheWind.json index a4167b8cff..61cbb98275 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionStrikeWithTheWind.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionStrikeWithTheWind.json @@ -41,19 +41,19 @@ "additionalConditionTurnOccurenceType": "StartOfTurn", "conditionStartParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", + "m_AssetGUID": "26586e11a6341f142bd148aa07107e4e", "m_SubObjectName": "", "m_SubObjectType": "" }, "conditionParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "ce76e6d0b360cd44da4abb7efe45187e", + "m_AssetGUID": "16f7e35a477e694418d4a62dfd0fe425", "m_SubObjectName": "", "m_SubObjectType": "" }, "conditionEndParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "c5bd1eed8b51172459c06ed42ce4b095", + "m_AssetGUID": "4a751908e7238124d81c60a1fdfdaf9f", "m_SubObjectName": "", "m_SubObjectType": "" }, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionStrikeWithTheWindAttack.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionStrikeWithTheWindAttack.json index e4361e837f..382cfc0f75 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionStrikeWithTheWindAttack.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionStrikeWithTheWindAttack.json @@ -44,20 +44,20 @@ "conditionStartParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" + "m_SubObjectName": null, + "m_SubObjectType": null }, "conditionParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "ce76e6d0b360cd44da4abb7efe45187e", - "m_SubObjectName": "", - "m_SubObjectType": "" + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null }, "conditionEndParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "c5bd1eed8b51172459c06ed42ce4b095", - "m_SubObjectName": "", - "m_SubObjectType": "" + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null }, "recurrentEffectParticleReference": null, "characterShaderReference": { diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionStrikeWithTheWindMovement.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionStrikeWithTheWindMovement.json index 7566848a37..bb14e9dede 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionStrikeWithTheWindMovement.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionStrikeWithTheWindMovement.json @@ -40,21 +40,21 @@ "additionalConditionTurnOccurenceType": "StartOfTurn", "conditionStartParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "26586e11a6341f142bd148aa07107e4e", - "m_SubObjectName": "", - "m_SubObjectType": "" + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null }, "conditionParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "16f7e35a477e694418d4a62dfd0fe425", - "m_SubObjectName": "", - "m_SubObjectType": "" + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null }, "conditionEndParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "4a751908e7238124d81c60a1fdfdaf9f", - "m_SubObjectName": "", - "m_SubObjectType": "" + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null }, "recurrentEffectParticleReference": null, "characterShaderReference": { diff --git a/Diagnostics/UnfinishedBusinessBlueprints/EffectProxyDefinition/ProxyCircleOfTheWildfireCauterizingFlames.json b/Diagnostics/UnfinishedBusinessBlueprints/EffectProxyDefinition/ProxyCircleOfTheWildfireCauterizingFlames.json index 3589129c2c..db3be05ffd 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/EffectProxyDefinition/ProxyCircleOfTheWildfireCauterizingFlames.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/EffectProxyDefinition/ProxyCircleOfTheWildfireCauterizingFlames.json @@ -18,10 +18,7 @@ "addAbilityToDamage": false, "attackPower": null, "impactsPlacement": false, - "additionalFeatures": [ - "Definition:MoveModeMove2:0127a492ba7a429408b3282dde9374d7", - "Definition:MoveModeFly12:5e70172c8e2a40146b375001ab656a44" - ], + "additionalFeatures": [], "attackParticle": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", "m_AssetGUID": "", diff --git a/Diagnostics/UnfinishedBusinessBlueprints/EffectProxyDefinition/ProxyCreateBonfire.json b/Diagnostics/UnfinishedBusinessBlueprints/EffectProxyDefinition/ProxyCreateBonfire.json new file mode 100644 index 0000000000..9179e59938 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/EffectProxyDefinition/ProxyCreateBonfire.json @@ -0,0 +1,143 @@ +{ + "$type": "EffectProxyDefinition, Assembly-CSharp", + "canMove": false, + "canRotate": true, + "canMoveOnCharacters": false, + "canAttack": false, + "canTriggerPower": false, + "autoTerminateOnTriggerPower": false, + "incrementalDamageDice": 0, + "actionId": "NoAction", + "freeActionId": "NoAction", + "attackMethod": "CasterSpellAbility", + "firstAttackIsFree": false, + "constrainedToSpellArea": false, + "damageDie": "D8", + "damageDieNum": 1, + "damageType": "DamageRadiant", + "addAbilityToDamage": false, + "attackPower": null, + "impactsPlacement": false, + "additionalFeatures": [], + "attackParticle": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "attackImpactParticle": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "addLightSource": false, + "lightSourceForm": { + "$type": "LightSourceForm, Assembly-CSharp", + "lightSourceType": "Basic", + "brightRange": 2, + "dimAdditionalRange": 2, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.933333337, + "g": 0.8428167, + "b": 0.4196078, + "a": 1.0 + }, + "graphicsPrefabReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "b604c9f0be3f29241adbf0c6754b7324", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "applyToSelf": false, + "forceOnSelf": false + }, + "lightSourceOffset": { + "$type": "UnityEngine.Vector3, UnityEngine.CoreModule", + "x": 0.0, + "y": 0.5, + "z": 0.0 + }, + "spellImmunityFromOutside": false, + "maxSpellLevelImmunity": 1, + "hasPresentation": true, + "prefabReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "6c9e02aed79129b4dadb6ea301ee193d", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "isEmptyPresentation": false, + "modelScale": 1.0, + "showWorldLocationFeedbacks": true, + "hasPortrait": true, + "portraitSpriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "a206bbd84c5d22147a9aa91bb99eeb90", + "m_SubObjectName": "ProxyDancingLights", + "m_SubObjectType": "" + }, + "startEvent": { + "$type": "AK.Wwise.Event, AK.Wwise.Unity.API.WwiseTypes", + "WwiseObjectReference": null, + "idInternal": 0, + "valueGuidInternal": { + "$type": "System.Byte[], mscorlib", + "$value": "" + } + }, + "stopEvent": { + "$type": "AK.Wwise.Event, AK.Wwise.Unity.API.WwiseTypes", + "WwiseObjectReference": null, + "idInternal": 0, + "valueGuidInternal": { + "$type": "System.Byte[], mscorlib", + "$value": "" + } + }, + "soundEffectOnHitDescription": { + "$type": "SoundEffectOnHitDescription, Assembly-CSharp", + "switchOnHit": { + "$type": "AK.Wwise.Switch, AK.Wwise.Unity.API.WwiseTypes", + "WwiseObjectReference": null, + "groupIdInternal": 0, + "groupGuidInternal": { + "$type": "System.Byte[], mscorlib", + "$value": "" + }, + "idInternal": 0, + "valueGuidInternal": { + "$type": "System.Byte[], mscorlib", + "$value": "" + } + } + }, + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "Proxy/&ProxyCreateBonfireTitle", + "description": "Feature/&NoContentTitle", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "a206bbd84c5d22147a9aa91bb99eeb90", + "m_SubObjectName": "ProxyDancingLights", + "m_SubObjectType": "UnityEngine.Sprite, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "a84e5459-b44a-5dfd-9f27-c4a44b571c3a", + "contentPack": 9999, + "name": "ProxyCreateBonfire" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/EffectProxyDefinition/ProxyFaithfulHound.json b/Diagnostics/UnfinishedBusinessBlueprints/EffectProxyDefinition/ProxyFaithfulHound.json index a69396513b..078304a384 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/EffectProxyDefinition/ProxyFaithfulHound.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/EffectProxyDefinition/ProxyFaithfulHound.json @@ -133,7 +133,7 @@ "$type": "GuiPresentation, Assembly-CSharp", "hidden": false, "title": "Proxy/&ProxyFaithfulHoundTitle", - "description": "Proxy/&ProxyFaithfulHoundDescription", + "description": "Feature/&NoContentTitle", "spriteReference": { "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", "m_AssetGUID": "9ccae0cf-fedf-5b4b-a2fa-770939e6b8e9", diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerCreateBonfireDamage.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerCreateBonfireDamage.json new file mode 100644 index 0000000000..d4e9ab7604 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerCreateBonfireDamage.json @@ -0,0 +1,363 @@ +{ + "$type": "FeatureDefinitionPower, Assembly-CSharp", + "effectDescription": { + "$type": "EffectDescription, Assembly-CSharp", + "rangeType": "Distance", + "rangeParameter": 6, + "halfDamageOnAMiss": false, + "hitAffinitiesByTargetTag": [], + "targetType": "IndividualsUnique", + "itemSelectionType": "None", + "targetParameter": 1, + "targetParameter2": 2, + "emissiveBorder": "None", + "emissiveParameter": 1, + "requiresTargetProximity": false, + "targetProximityDistance": 6, + "targetExcludeCaster": false, + "canBePlacedOnCharacter": true, + "affectOnlyGround": false, + "targetFilteringMethod": "CharacterOnly", + "targetFilteringTag": "No", + "requiresVisibilityForPosition": true, + "inviteOptionalAlly": false, + "slotTypes": [], + "recurrentEffect": "No", + "retargetAfterDeath": false, + "retargetActionType": "Bonus", + "poolFilterDiceNumber": 5, + "poolFilterDieType": "D8", + "trapRangeType": "Triggerer", + "targetConditionName": "", + "targetConditionAsset": null, + "targetSide": "All", + "durationType": "Round", + "durationParameter": 0, + "endOfEffect": "EndOfTurn", + "hasSavingThrow": true, + "disableSavingThrowOnAllies": false, + "savingThrowAbility": "Dexterity", + "ignoreCover": false, + "grantedConditionOnSave": null, + "rollSaveOnlyIfRelevantForms": false, + "hasShoveRoll": false, + "createdByCharacter": true, + "difficultyClassComputation": "SpellCastingFeature", + "savingThrowDifficultyAbility": "Wisdom", + "fixedSavingThrowDifficultyClass": 10, + "savingThrowAffinitiesBySense": [], + "savingThrowAffinitiesByFamily": [], + "damageAffinitiesByFamily": [], + "advantageForEnemies": false, + "canBeDispersed": false, + "hasVelocity": false, + "velocityCellsPerRound": 2, + "velocityType": "AwayFromSourceOriginalPosition", + "restrictedCreatureFamilies": [], + "immuneCreatureFamilies": [], + "restrictedCharacterSizes": [], + "hasLimitedEffectPool": false, + "effectPoolAmount": 60, + "effectApplication": "All", + "effectFormFilters": [], + "effectForms": [ + { + "$type": "EffectForm, Assembly-CSharp", + "formType": "Damage", + "addBonusMode": "None", + "applyLevel": "No", + "levelType": "ClassLevel", + "levelMultiplier": 1, + "diceByLevelTable": [], + "createdByCharacter": true, + "createdByCondition": false, + "hasSavingThrow": true, + "savingThrowAffinity": "Negates", + "dcModifier": 0, + "canSaveToCancel": false, + "saveOccurence": "EndOfTurn", + "damageForm": { + "$type": "DamageForm, Assembly-CSharp", + "versatile": false, + "diceNumber": 1, + "dieType": "D8", + "overrideWithBardicInspirationDie": false, + "versatileDieType": "D1", + "bonusDamage": 0, + "damageType": "DamageFire", + "ancestryType": "Sorcerer", + "healFromInflictedDamage": "Never", + "hitPointsFloor": 0, + "forceKillOnZeroHp": false, + "specialDeathCondition": null, + "ignoreFlyingCharacters": false, + "ignoreCriticalDoubleDice": false + }, + "hasFilterId": false, + "filterId": 0 + } + ], + "specialFormsDescription": "", + "effectAdvancement": { + "$type": "EffectAdvancement, Assembly-CSharp", + "effectIncrementMethod": "CasterLevelTable", + "incrementMultiplier": 1, + "additionalTargetsPerIncrement": 0, + "additionalSubtargetsPerIncrement": 0, + "additionalDicePerIncrement": 1, + "additionalSpellLevelPerIncrement": 0, + "additionalSummonsPerIncrement": 0, + "additionalHPPerIncrement": 0, + "additionalTempHPPerIncrement": 0, + "additionalTargetCellsPerIncrement": 0, + "additionalItemBonus": 0, + "additionalWeaponDie": 0, + "alteredDuration": "None" + }, + "speedType": "Instant", + "speedParameter": 10.0, + "offsetImpactTimeBasedOnDistance": false, + "offsetImpactTimeBasedOnDistanceFactor": 0.1, + "offsetImpactTimePerTarget": 0.0, + "effectParticleParameters": { + "$type": "EffectParticleParameters, Assembly-CSharp", + "casterParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "81560ac3813217d4d9fd281d5e73c234", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "casterSelfParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "casterQuickSpellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "targetParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "effectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "effectSubTargetParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "zoneParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "beforeImpactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "impactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "e446eddf529bfc94c9b972fc384b9986", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectImpactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceParticlePerIndex": "", + "activeEffectSurfaceParticlePerIndexCount": 0, + "emissiveBorderCellStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderCellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderCellEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "forceApplyZoneParticle": false, + "applyEmissionColorOnWeapons": false, + "emissionColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "emissionColorFadeInDuration": 0.0, + "emissionColorFadeOutDuration": 0.0 + }, + "effectAIParameters": { + "$type": "EffectAIParameters, Assembly-CSharp", + "aoeScoreMultiplier": 1.0, + "cooldownForCaster": 0, + "cooldownForBattle": 0, + "sortingScoreMultiplier": 1.0, + "dynamicCooldown": false + }, + "animationMagicEffect": "Animation0", + "lightCounterDispellsEffect": false, + "hideSavingThrowAnimation": false + }, + "delegatedToAction": false, + "surrogateToSpell": null, + "triggeredBySpecialMove": false, + "activationTime": "NoCost", + "autoActivationRequiredTargetSenseType": "None", + "autoActivationRequiredTargetCreatureTag": "", + "autoActivationPowerTag": "", + "triggeringPower": null, + "copyTargetingFromTriggeringPower": false, + "reactionContext": "None", + "damageTypes": [], + "reactionName": "", + "reactionActingCharacterParamIdx": 0, + "reactionAttackerParamIdx": -1, + "hasCastingFailure": false, + "castingSuccessComputation": "CasterLevel", + "canUseInDialog": false, + "disableIfConditionIsOwned": null, + "disableIfTargetConditionIsOwned": null, + "rechargeRate": "AtWill", + "costPerUse": 1, + "spellcastingFeature": null, + "usesDetermination": "Fixed", + "abilityScoreDetermination": "Explicit", + "usesAbilityScoreName": "Charisma", + "fixedUsesPerRecharge": 1, + "abilityScore": "Intelligence", + "attackHitComputation": "AbilityScore", + "fixedAttackHit": 0, + "abilityScoreBonusToAttack": false, + "proficiencyBonusToAttack": false, + "uniqueInstance": false, + "showCasting": false, + "shortTitleOverride": "", + "overriddenPower": null, + "includeBaseDescription": false, + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": true, + "title": "Feature/&PowerCreateBonfireDamageTitle", + "description": "Feature/&PowerCreateBonfireDamageDescription", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "b7c2435b-6087-5c17-a46b-e970baee8a07", + "contentPack": 9999, + "name": "PowerCreateBonfireDamage" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerHolyWeapon.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerHolyWeapon.json index 408e8cf9d9..ab3dd72e4b 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerHolyWeapon.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerHolyWeapon.json @@ -3,7 +3,7 @@ "effectDescription": { "$type": "EffectDescription, Assembly-CSharp", "rangeType": "Distance", - "rangeParameter": 6, + "rangeParameter": 24, "halfDamageOnAMiss": false, "hitAffinitiesByTargetTag": [], "targetType": "IndividualsUnique", @@ -150,7 +150,7 @@ "$type": "EffectParticleParameters, Assembly-CSharp", "casterParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "8b9fa0fcdb99d2347a36d25a972de9f5", + "m_AssetGUID": "3cff2b6f11a2cd649b3fb3fb2c402351", "m_SubObjectName": "", "m_SubObjectType": "" }, @@ -356,7 +356,7 @@ "abilityScoreBonusToAttack": false, "proficiencyBonusToAttack": false, "uniqueInstance": false, - "showCasting": true, + "showCasting": false, "shortTitleOverride": "", "overriddenPower": null, "includeBaseDescription": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateBonfire.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateBonfire.json new file mode 100644 index 0000000000..5bfd501a8f --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateBonfire.json @@ -0,0 +1,372 @@ +{ + "$type": "SpellDefinition, Assembly-CSharp", + "spellsBundle": false, + "subspellsList": [], + "compactSubspellsTooltip": false, + "implemented": true, + "schoolOfMagic": "SchoolConjuration", + "spellLevel": 0, + "ritual": false, + "uniqueInstance": false, + "castingTime": "Action", + "reactionContext": "None", + "ritualCastingTime": "Action", + "requiresConcentration": false, + "effectDescription": { + "$type": "EffectDescription, Assembly-CSharp", + "rangeType": "Distance", + "rangeParameter": 12, + "halfDamageOnAMiss": false, + "hitAffinitiesByTargetTag": [], + "targetType": "Position", + "itemSelectionType": "None", + "targetParameter": 1, + "targetParameter2": 2, + "emissiveBorder": "None", + "emissiveParameter": 1, + "requiresTargetProximity": false, + "targetProximityDistance": 6, + "targetExcludeCaster": false, + "canBePlacedOnCharacter": true, + "affectOnlyGround": false, + "targetFilteringMethod": "CharacterOnly", + "targetFilteringTag": "No", + "requiresVisibilityForPosition": true, + "inviteOptionalAlly": false, + "slotTypes": [], + "recurrentEffect": "No", + "retargetAfterDeath": false, + "retargetActionType": "Bonus", + "poolFilterDiceNumber": 5, + "poolFilterDieType": "D8", + "trapRangeType": "Triggerer", + "targetConditionName": "", + "targetConditionAsset": null, + "targetSide": "Enemy", + "durationType": "Minute", + "durationParameter": 1, + "endOfEffect": "EndOfTurn", + "hasSavingThrow": true, + "disableSavingThrowOnAllies": false, + "savingThrowAbility": "Dexterity", + "ignoreCover": false, + "grantedConditionOnSave": null, + "rollSaveOnlyIfRelevantForms": true, + "hasShoveRoll": false, + "createdByCharacter": true, + "difficultyClassComputation": "SpellCastingFeature", + "savingThrowDifficultyAbility": "Wisdom", + "fixedSavingThrowDifficultyClass": 10, + "savingThrowAffinitiesBySense": [], + "savingThrowAffinitiesByFamily": [], + "damageAffinitiesByFamily": [], + "advantageForEnemies": false, + "canBeDispersed": false, + "hasVelocity": false, + "velocityCellsPerRound": 2, + "velocityType": "AwayFromSourceOriginalPosition", + "restrictedCreatureFamilies": [], + "immuneCreatureFamilies": [], + "restrictedCharacterSizes": [], + "hasLimitedEffectPool": false, + "effectPoolAmount": 60, + "effectApplication": "All", + "effectFormFilters": [], + "effectForms": [ + { + "$type": "EffectForm, Assembly-CSharp", + "formType": "Summon", + "addBonusMode": "None", + "applyLevel": "No", + "levelType": "ClassLevel", + "levelMultiplier": 1, + "diceByLevelTable": [], + "createdByCharacter": true, + "createdByCondition": false, + "hasSavingThrow": false, + "savingThrowAffinity": "None", + "dcModifier": 0, + "canSaveToCancel": false, + "saveOccurence": "EndOfTurn", + "summonForm": { + "$type": "SummonForm, Assembly-CSharp", + "summonType": "EffectProxy", + "itemDefinition": null, + "trackItem": false, + "monsterDefinitionName": "", + "number": 0, + "conditionDefinition": null, + "persistOnConcentrationLoss": true, + "decisionPackage": null, + "effectProxyDefinitionName": "ProxyCreateBonfire" + }, + "hasFilterId": false, + "filterId": 0 + }, + { + "$type": "EffectForm, Assembly-CSharp", + "formType": "Topology", + "addBonusMode": "None", + "applyLevel": "No", + "levelType": "ClassLevel", + "levelMultiplier": 1, + "diceByLevelTable": [], + "createdByCharacter": true, + "createdByCondition": false, + "hasSavingThrow": false, + "savingThrowAffinity": "None", + "dcModifier": 0, + "canSaveToCancel": false, + "saveOccurence": "EndOfTurn", + "topologyForm": { + "$type": "TopologyForm, Assembly-CSharp", + "changeType": "DangerousZone", + "impactsFlyingCharacters": true + }, + "hasFilterId": false, + "filterId": 0 + } + ], + "specialFormsDescription": "", + "effectAdvancement": { + "$type": "EffectAdvancement, Assembly-CSharp", + "effectIncrementMethod": "CasterLevelTable", + "incrementMultiplier": 1, + "additionalTargetsPerIncrement": 0, + "additionalSubtargetsPerIncrement": 0, + "additionalDicePerIncrement": 1, + "additionalSpellLevelPerIncrement": 0, + "additionalSummonsPerIncrement": 0, + "additionalHPPerIncrement": 0, + "additionalTempHPPerIncrement": 0, + "additionalTargetCellsPerIncrement": 0, + "additionalItemBonus": 0, + "additionalWeaponDie": 0, + "alteredDuration": "None" + }, + "speedType": "Instant", + "speedParameter": 10.0, + "offsetImpactTimeBasedOnDistance": false, + "offsetImpactTimeBasedOnDistanceFactor": 0.1, + "offsetImpactTimePerTarget": 0.0, + "effectParticleParameters": { + "$type": "EffectParticleParameters, Assembly-CSharp", + "casterParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "casterSelfParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "casterQuickSpellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "targetParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "effectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "effectSubTargetParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "zoneParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "beforeImpactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "impactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectImpactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceParticlePerIndex": "", + "activeEffectSurfaceParticlePerIndexCount": 0, + "emissiveBorderCellStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderCellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderCellEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "forceApplyZoneParticle": false, + "applyEmissionColorOnWeapons": false, + "emissionColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "emissionColorFadeInDuration": 0.0, + "emissionColorFadeOutDuration": 0.0 + }, + "effectAIParameters": { + "$type": "EffectAIParameters, Assembly-CSharp", + "aoeScoreMultiplier": 1.0, + "cooldownForCaster": 0, + "cooldownForBattle": 0, + "sortingScoreMultiplier": 1.0, + "dynamicCooldown": false + }, + "animationMagicEffect": "Animation0", + "lightCounterDispellsEffect": false, + "hideSavingThrowAnimation": false + }, + "aiParameters": { + "$type": "SpellAIParameters, Assembly-CSharp", + "learnPriority": "Low", + "preparePriority": "Low" + }, + "concentrationAction": "None", + "verboseComponent": true, + "somaticComponent": true, + "materialComponentType": "None", + "specificMaterialComponentTag": "Diamond", + "specificMaterialComponentCostGp": 100, + "specificMaterialComponentConsumed": true, + "terminateOnItemUnequip": false, + "displayConditionDuration": false, + "vocalSpellSemeType": "Attack", + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "Spell/&CreateBonfireTitle", + "description": "Spell/&CreateBonfireDescription", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "980d155a-27a5-504d-bff0-259234b00eeb", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "3f2e87e8-860f-58ce-b347-b54c8d6581ac", + "contentPack": 9999, + "name": "CreateBonfire" +} \ No newline at end of file diff --git a/Documentation/Spells.md b/Documentation/Spells.md index 1957870dcd..6c87ae82ab 100644 --- a/Documentation/Spells.md +++ b/Documentation/Spells.md @@ -34,283 +34,289 @@ You brandish the weapon used in the spell's casting and make a melee attack with Deal damage to one enemy and prevent healing for a limited time. -# 7. - Dancing Lights (V,S) level 0 Evocation [Concentration] [SOL] +# 7. - *Create Bonfire* © (V,S) level 0 Conjuration [UB] + +**[Artificer, Druid, Sorcerer, Warlock, Wizard]** + +You create a bonfire on ground that you can see within range. Until the spell ends, the bonfire fills a 5-foot cube. Any creature in the bonfire's space when you cast the spell must succeed on a Dexterity saving throw or take 1d8 fire damage. A creature must also make the saving throw when it enters the bonfire's space for the first time on a turn or ends its turn there. The spell's damage increases by an additional die at 5th, 11th and 17th level. + +# 8. - Dancing Lights (V,S) level 0 Evocation [Concentration] [SOL] **[Bard, Sorcerer, Wizard]** Create dancing lights that move at your command. -# 8. - Dazzle (S) level 0 Illusion [SOL] +# 9. - Dazzle (S) level 0 Illusion [SOL] **[Bard, Sorcerer, Warlock, Wizard]** Lower a target's AC and prevent reaction until the start of its next turn. -# 9. - Eldritch Blast (V,S) level 0 Evocation [SOL] +# 10. - Eldritch Blast (V,S) level 0 Evocation [SOL] **[Warlock]** Unleash a beam of crackling energy with a ranged spell attack against the target. On a hit, it takes 1d10 force damage. -# 10. - Fire Bolt (V,S) level 0 Evocation [SOL] +# 11. - Fire Bolt (V,S) level 0 Evocation [SOL] **[Artificer, Sorcerer, Wizard]** Launch a fire bolt. -# 11. - *Green-Flame Blade* © (M,S) level 0 Evocation [UB] +# 12. - *Green-Flame Blade* © (M,S) level 0 Evocation [UB] **[Artificer, Sorcerer, Warlock, Wizard]** You brandish the weapon used in the spell's casting and make a melee attack with it against one creature within 5 ft distance. On a hit, the target suffers the weapon attack's normal effects, and you can cause green fire to leap from the target to a different creature of your choice that you can see within 5 ft of it. The second creature takes fire damage equal to your spellcasting ability modifier. At 5th level, the melee attack deals an extra 1d8 fire damage to the target on a hit, and the fire damage to the second creature increases to 1d8 + your spellcasting ability modifier. Both damage rolls increase by 1d8 at 11th and 17th levels. -# 12. - Guidance (V,S) level 0 Divination [Concentration] [SOL] +# 13. - Guidance (V,S) level 0 Divination [Concentration] [SOL] **[Artificer, Cleric, Druid]** Increase an ally's ability checks for a limited time. -# 13. - *Gust* © (V,S) level 0 Transmutation [UB] +# 14. - *Gust* © (V,S) level 0 Transmutation [UB] **[Druid, Sorcerer, Wizard]** Fire a blast of focused air at your target. -# 14. - Illuminating Sphere (V,S) level 0 Enchantment [UB] +# 15. - Illuminating Sphere (V,S) level 0 Enchantment [UB] **[Bard, Sorcerer, Wizard]** Causes light sources such as torches and mana lamps in the area of effect to light up. -# 15. - *Infestation* © (V,S) level 0 Conjuration [UB] +# 16. - *Infestation* © (V,S) level 0 Conjuration [UB] **[Druid, Sorcerer, Warlock, Wizard]** You cause a cloud of mites, fleas, and other parasites to appear momentarily on one creature you can see within range. The target must succeed on a Constitution saving throw, or it takes 1d6 poison damage and moves 5 ft in a random direction. The spell's damage increases by an additional die at 5th, 11th and 17th level. -# 16. - Light (V) level 0 Evocation [SOL] +# 17. - Light (V) level 0 Evocation [SOL] **[Bard, Cleric, Sorcerer, Wizard]** An object you can touch emits a powerful light for a limited time. -# 17. - *Lightning Lure* © (V) level 0 Evocation [UB] +# 18. - *Lightning Lure* © (V) level 0 Evocation [UB] **[Artificer, Sorcerer, Warlock, Wizard]** You create a lash of lightning energy that strikes at one creature of your choice that you can see within 15 ft of you. The target must succeed on a Strength saving throw or be pulled up to 10 ft in a straight line toward you and then take 1d8 lightning damage. The spell's damage increases by an additional die at 5th, 11th and 17th level. -# 18. - *Mind Sliver* © (V) level 0 Enchantment [UB] +# 19. - *Mind Sliver* © (V) level 0 Enchantment [UB] **[Sorcerer, Warlock, Wizard]** You drive a disorienting spike of psychic energy into the mind of one creature you can see within range. The target must succeed on an Intelligence saving throw or take 1d6 psychic damage and subtract 1d4 from the next saving throw it makes before the end of your next turn. -# 19. - Minor Lifesteal (V,S) level 0 Necromancy [UB] +# 20. - Minor Lifesteal (V,S) level 0 Necromancy [UB] **[Bard, Sorcerer, Warlock, Wizard]** You drain vital energy from a nearby enemy creature. Make a melee spell attack against a creature within 5 ft of you. On a hit, the creature takes 1d6 necrotic damage, and you heal for half the damage dealt (rounded down). This spell has no effect on undead and constructs. The spell's damage increases by an additional die at 5th, 11th and 17th level. -# 20. - Poison Spray (V,S) level 0 Conjuration [SOL] +# 21. - Poison Spray (V,S) level 0 Conjuration [SOL] **[Artificer, Druid, Sorcerer, Warlock, Wizard]** Fire a poison spray at an enemy you can see, within range. -# 21. - *Primal Savagery* © (S) level 0 Transmutation [UB] +# 22. - *Primal Savagery* © (S) level 0 Transmutation [UB] **[Druid]** You channel primal magic to cause your teeth or fingernails to sharpen, ready to deliver a corrosive attack. Make a melee spell attack against one creature within 5 ft of you. On a hit, the target takes 1d10 acid damage. The spell's damage increases by an additional die at 5th, 11th and 17th level. -# 22. - Produce Flame (V,S) level 0 Conjuration [SOL] +# 23. - Produce Flame (V,S) level 0 Conjuration [SOL] **[Druid]** Conjures a flickering flame in your hand, which generates light or can be hurled to inflict fire damage. -# 23. - Ray of Frost (V,S) level 0 Evocation [SOL] +# 24. - Ray of Frost (V,S) level 0 Evocation [SOL] **[Artificer, Sorcerer, Wizard]** Launch a freezing ray at an enemy to damage and slow them. -# 24. - Resistance (V,S) level 0 Abjuration [Concentration] [SOL] +# 25. - Resistance (V,S) level 0 Abjuration [Concentration] [SOL] **[Artificer, Cleric, Druid]** Grant an ally a one-time bonus to saving throws. -# 25. - Sacred Flame (V,S) level 0 Evocation [SOL] +# 26. - Sacred Flame (V,S) level 0 Evocation [SOL] **[Cleric]** Strike an enemy with radiant damage. -# 26. - *Sapping Sting* © (V,S) level 0 Necromancy [UB] +# 27. - *Sapping Sting* © (V,S) level 0 Necromancy [UB] **[Wizard]** You sap the vitality of one creature you can see in range. The target must succeed on a Constitution saving throw or take 1d4 necrotic damage and fall prone. -# 27. - Shadow Armor (V,S) level 0 Abjuration [SOL] +# 28. - Shadow Armor (V,S) level 0 Abjuration [SOL] **[Bard, Sorcerer, Warlock, Wizard]** Grants 3 temporary hit points for one minute. -# 28. - Shadow Dagger (V,S) level 0 Illusion [SOL] +# 29. - Shadow Dagger (V,S) level 0 Illusion [SOL] **[Bard, Sorcerer, Warlock, Wizard]** Launches an illusionary dagger that causes psychic damage. -# 29. - Shillelagh (V,S) level 0 Transmutation [SOL] +# 30. - Shillelagh (V,S) level 0 Transmutation [SOL] **[Druid]** Conjures a magical club whose attacks are magical and use your spellcasting ability instead of strength. -# 30. - Shine (V,S) level 0 Conjuration [SOL] +# 31. - Shine (V,S) level 0 Conjuration [SOL] **[Cleric, Sorcerer, Wizard]** An enemy you can see becomes luminous for a while. -# 31. - Shocking Grasp (V,S) level 0 Evocation [SOL] +# 32. - Shocking Grasp (V,S) level 0 Evocation [SOL] **[Artificer, Sorcerer, Wizard]** Damage and daze an enemy on a successful touch. -# 32. - Spare the Dying (S) level 0 Necromancy [SOL] +# 33. - Spare the Dying (S) level 0 Necromancy [SOL] **[Artificer, Cleric]** Touch a dying ally to stabilize them. -# 33. - Sparkle (V,S) level 0 Enchantment [SOL] +# 34. - Sparkle (V,S) level 0 Enchantment [SOL] **[Bard, Cleric, Druid, Sorcerer, Warlock, Wizard]** Target up to three objects that can be illuminated and light them up immediately. -# 34. - *Starry Wisp* © (V,S) level 0 Evocation [UB] +# 35. - *Starry Wisp* © (V,S) level 0 Evocation [UB] **[Bard, Druid]** You launch a mote of light at one creature or object within range. Make a ranged spell attack against the target. On a hit, the target takes 1d8 Radiant damage, and until the end of your next turn, it emits Dim Light in a 10-foot radius and can't benefit from the Invisible condition. The spell's damage increases by an additional die at 5th, 11th and 17th level. -# 35. - Sunlit Blade (M,S) level 0 Evocation [UB] +# 36. - Sunlit Blade (M,S) level 0 Evocation [UB] **[Artificer, Sorcerer, Warlock, Wizard]** You brandish the weapon used in the spell's casting and make a melee attack with it against one creature within 5 ft distance. On a hit, the target suffers the weapon attack's normal effects, and is enveloped in glowing radiant energy, shedding dim light for the turn. Next attack against this creature while it is highlighted is done with advantage. At 5th level, the melee attack deals an extra 1d8 radiant damage to the target. The damage increases by another 1d8 at 11th and 17th levels. -# 36. - *Sword Burst* © (V,S) level 0 Enchantment [UB] +# 37. - *Sword Burst* © (V,S) level 0 Enchantment [UB] **[Artificer, Sorcerer, Warlock, Wizard]** You create a momentary circle of spectral blades that sweep around you. All other creatures within 5 ft of you must each succeed on a Dexterity saving throw or take 1d6 force damage. -# 37. - *Thorn Whip* © (V,S) level 0 Transmutation [UB] +# 38. - *Thorn Whip* © (V,S) level 0 Transmutation [UB] **[Artificer, Druid]** You create a long, whip-like vine covered in thorns that lashes out at your command toward a creature in range. Make a ranged spell attack against the target. If the attack hits, the creature takes 1d6 piercing damage, and you pull the creature up to 10 ft closer to you. -# 38. - *Thunderclap* © (V,S) level 0 Evocation [UB] +# 39. - *Thunderclap* © (V,S) level 0 Evocation [UB] **[Artificer, Bard, Druid, Sorcerer, Warlock, Wizard]** Create a burst of thundering sound, forcing creatures adjacent to you to make a Constitution saving throw or take 1d6 thunder damage. The spell's damage increases by an additional die at 5th, 11th and 17th level. -# 39. - *Toll the Dead* © (V,S) level 0 Necromancy [UB] +# 40. - *Toll the Dead* © (V,S) level 0 Necromancy [UB] **[Cleric, Warlock, Wizard]** You point at one creature you can see within range, and the sound of a dolorous bell fills the air around it for a moment. The target must succeed on a Wisdom saving throw or take 1d6 necrotic damage. If the target is missing any of its hit points, it instead takes 1d12 necrotic damage. -# 40. - True Strike (S) level 0 Divination [Concentration] [SOL] +# 41. - True Strike (S) level 0 Divination [Concentration] [SOL] **[Bard, Sorcerer, Warlock, Wizard]** Increases your chance to hit a target you can see, one time. -# 41. - Venomous Spike (V,S) level 0 Enchantment [SOL] +# 42. - Venomous Spike (V,S) level 0 Enchantment [SOL] **[Druid]** A bone spike that pierces and poisons its target. -# 42. - Vicious Mockery (V) level 0 Enchantment [SOL] +# 43. - Vicious Mockery (V) level 0 Enchantment [SOL] **[Bard]** Unleash a torrent of magically-enhanced insults on a creature you can see. It must make a successful wisdom saving throw, or take psychic damage and have disadvantage on its next attack roll. The effect lasts until the end of its next turn. -# 43. - *Word of Radiance* © (V) level 0 Evocation [UB] +# 44. - *Word of Radiance* © (V) level 0 Evocation [UB] **[Cleric]** Create a brilliant flash of shimmering light, damaging all enemies around you. -# 44. - Wrack (V,S) level 0 Necromancy [UB] +# 45. - Wrack (V,S) level 0 Necromancy [UB] **[Cleric]** Unleash a wave of crippling pain at a creature within range. The target must make a Constitution saving throw or take 1d6 necrotic damage, and preventing them from dashing or disengaging. -# 45. - *Absorb Elements* © (S) level 1 Abjuration [UB] +# 46. - *Absorb Elements* © (S) level 1 Abjuration [UB] **[Druid, Ranger, Sorcerer, Wizard]** The spell captures some of the incoming energy, lessening its effect on you and storing it for your next melee attack. You have resistance to the triggering damage type until the start of your next turn. Also, the first time you hit with a melee attack on your next turn, the target takes an extra 1d6 damage of the triggering type, and the spell ends. When you cast this spell using a spell slot of 2nd level or higher, the extra damage increases by 1d6 for each slot level above 1st. -# 46. - Animal Friendship (V,S) level 1 Enchantment [SOL] +# 47. - Animal Friendship (V,S) level 1 Enchantment [SOL] **[Bard, Druid, Ranger]** Choose a beast that you can see within the spell's range. The beast must make a Wisdom saving throw or be charmed for the spell's duration. -# 47. - *Armor of Agathys* © (V,S) level 1 Abjuration [UB] +# 48. - *Armor of Agathys* © (V,S) level 1 Abjuration [UB] **[Warlock]** A protective elemental skin envelops you, covering you and your gear. You gain 5 temporary hit points per spell level for the duration. In addition, if a creature hits you with a melee attack while you have these temporary hit points, the creature takes 5 cold damage per spell level. -# 48. - *Arms of Hadar* © (V,S) level 1 Evocation [UB] +# 49. - *Arms of Hadar* © (V,S) level 1 Evocation [UB] **[Warlock]** You invoke the power of malevolent forces. Tendrils of dark energy erupt from you and batter all creatures within 10 feet of you. Each creature in that area must make a Strength saving throw. On a failed save, a target takes 2d6 necrotic damage and can't take reactions until the start of your next turn. On a successful save, the creature takes half damage, but suffers no other effect. When you cast this spell using a spell slot of 2nd level or higher, the damage increases by 1d6 for each slot level above 1st. -# 49. - Bane (V,S) level 1 Enchantment [Concentration] [SOL] +# 50. - Bane (V,S) level 1 Enchantment [Concentration] [SOL] **[Bard, Cleric]** Reduce your enemies' attack and saving throws for a limited time. -# 50. - Bless (V,S) level 1 Enchantment [Concentration] [SOL] +# 51. - Bless (V,S) level 1 Enchantment [Concentration] [SOL] **[Cleric, Paladin]** Increase your allies' saving throws and attack rolls for a limited time. -# 51. - Burning Hands (V,S) level 1 Evocation [SOL] +# 52. - Burning Hands (V,S) level 1 Evocation [SOL] **[Sorcerer, Wizard]** Spray a cone of fire in front of you. -# 52. - Caustic Zap (V,S) level 1 Evocation [UB] +# 53. - Caustic Zap (V,S) level 1 Evocation [UB] **[Artificer, Sorcerer, Wizard]** You send a jolt of green energy toward the target momentarily disorientating them as the spell burn some of their armor. The spell targets one enemy with a spell attack and deals 1d4 acid and 1d6 lightning damage and applies the dazzled condition. -# 53. - *Chaos Bolt* © (V,S) level 1 Evocation [UB] +# 54. - *Chaos Bolt* © (V,S) level 1 Evocation [UB] **[Sorcerer]** @@ -321,25 +327,25 @@ Make a ranged spell attack against a target. On a hit, the target takes 2d8 + 1d 7: ◹ Psychic 8: ◼ Thunder If you roll the same number on both d8s, you can use your free action to target a different creature of your choice. Make a new attack roll against the new target, and make a new damage roll, which could cause the chaotic energy to leap again. A creature can be damaged only once by each casting of this spell. -# 54. - Charm Person (V,S) level 1 Enchantment [SOL] +# 55. - Charm Person (V,S) level 1 Enchantment [SOL] **[Bard, Druid, Sorcerer, Warlock, Wizard]** Makes an ally of an enemy. -# 55. - *Chromatic Orb* © (M,V,S) level 1 Evocation [UB] +# 56. - *Chromatic Orb* © (M,V,S) level 1 Evocation [UB] **[Sorcerer, Wizard]** You hurl a 4-inch-diameter sphere of energy at a creature that you can see within range. You choose acid, cold, fire, lightning, poison, or thunder for the type of orb you create, and then make a ranged spell attack against the target. If the attack hits, the creature takes 3d8 damage of the type you chose. -# 56. - Color Spray (V,S) level 1 Illusion [SOL] +# 57. - Color Spray (V,S) level 1 Illusion [SOL] **[Sorcerer, Wizard]** Spray a luminous cone that briefly blinds your enemies. Roll 6d10: the total is how many hit points of creatures this spell can affect. -# 57. - *Command* © (V) level 1 Enchantment [UB] +# 58. - *Command* © (V) level 1 Enchantment [UB] **[Bard, Cleric, Paladin]** @@ -347,438 +353,438 @@ You speak a one-word command to a creature you can see within range. The target You can only command creatures you share a language with. Humanoids are considered knowing Common. To command a non-humanoid creature, you must know Draconic for Dragons, Elvish for Fey, Giant for Giants, Infernal for Fiends and Terran for Elementals. Cannot target Undead or Surprised creatures. -# 58. - Comprehend Languages (V,S) level 1 Divination [SOL] +# 59. - Comprehend Languages (V,S) level 1 Divination [SOL] **[Bard, Sorcerer, Warlock, Wizard]** For the duration of the spell, you understand the literal meaning of any spoken words that you hear. -# 59. - Cure Wounds (V,S) level 1 Evocation [SOL] +# 60. - Cure Wounds (V,S) level 1 Evocation [SOL] **[Artificer, Bard, Cleric, Druid, Paladin, Ranger]** Heal an ally by touch. -# 60. - Detect Evil and Good (V,S) level 1 Divination [Concentration] [SOL] +# 61. - Detect Evil and Good (V,S) level 1 Divination [Concentration] [SOL] **[Cleric, Paladin]** Detect nearby creatures of evil or good nature. -# 61. - Detect Magic (V,S) level 1 Divination [Concentration] [SOL] +# 62. - Detect Magic (V,S) level 1 Divination [Concentration] [SOL] **[Artificer, Bard, Cleric, Druid, Paladin, Ranger, Sorcerer, Wizard]** Detect nearby magic objects or creatures. -# 62. - Detect Poison and Disease (V,S) level 1 Divination [Concentration] [SOL] +# 63. - Detect Poison and Disease (V,S) level 1 Divination [Concentration] [SOL] **[Druid]** TMP For the duration you sense the presence and location of poisonous creatures and diseases within 6 cells of you. -# 63. - *Dissonant Whispers* © (V) level 1 Enchantment [UB] +# 64. - *Dissonant Whispers* © (V) level 1 Enchantment [UB] **[Bard]** You whisper a discordant melody that only one creature of your choice within range can hear, wracking it with terrible pain. The target must make a Wisdom saving throw. On a failed save, it takes 3d6 psychic damage and must immediately use its reaction, if available, to move as far as its speed allows away from you. The creature doesn't move into obviously dangerous ground, such as a fire or a pit. On a successful save, the target takes half as much damage and doesn't have to move away. When you cast this spell using a spell slot of 2nd level or higher, the damage increases by 1d6 for each slot level above 1st. -# 64. - Divine Favor (V,S) level 1 Evocation [Concentration] [SOL] +# 65. - Divine Favor (V,S) level 1 Evocation [Concentration] [SOL] **[Paladin]** Gain additional radiant damage for a limited time. -# 65. - *Earth Tremor* © (V,S) level 1 Evocation [UB] +# 66. - *Earth Tremor* © (V,S) level 1 Evocation [UB] **[Bard, Druid, Sorcerer, Wizard]** You strike the ground and unleash a tremor of seismic force, hurling up earth, rock, and sand. -# 66. - *Ensnaring Strike* © (V) level 1 Conjuration [Concentration] [UB] +# 67. - *Ensnaring Strike* © (V) level 1 Conjuration [Concentration] [UB] **[Ranger]** The next time you hit a creature with a weapon attack before this spell ends, a writhing mass of thorny vines appears at the point of impact, and the target must succeed on a Strength saving throw or be restrained by the magical vines until the spell ends.While restrained by this spell, the target takes 1d6 piercing damage at the start of each of its turns. A creature restrained by the vines can use its action to make a Strength check against your spell save DC. -# 67. - Entangle (V,S) level 1 Conjuration [Concentration] [SOL] +# 68. - Entangle (V,S) level 1 Conjuration [Concentration] [SOL] **[Druid]** Creatures in a four-cell square area are restrained if they fail a STR saving throw -# 68. - Expeditious Retreat (V,S) level 1 Transmutation [Concentration] [SOL] +# 69. - Expeditious Retreat (V,S) level 1 Transmutation [Concentration] [SOL] **[Artificer, Sorcerer, Warlock, Wizard]** Gain movement points and become able to dash as a bonus action for a limited time. -# 69. - Faerie Fire (V) level 1 Evocation [Concentration] [SOL] +# 70. - Faerie Fire (V) level 1 Evocation [Concentration] [SOL] **[Artificer, Bard, Druid]** Highlight creatures to give advantage to anyone attacking them. -# 70. - False Life (V,S) level 1 Necromancy [SOL] +# 71. - False Life (V,S) level 1 Necromancy [SOL] **[Artificer, Sorcerer, Wizard]** Gain a few temporary hit points for a limited time. -# 71. - Feather Fall (V) level 1 Transmutation [SOL] +# 72. - Feather Fall (V) level 1 Transmutation [SOL] **[Artificer, Bard, Sorcerer, Wizard]** Provide a safe landing when you or an ally falls. -# 72. - *Find Familiar* © (V,S) level 1 Conjuration [UB] +# 73. - *Find Familiar* © (V,S) level 1 Conjuration [UB] **[Wizard]** You gain the service of a familiar. The familiar can use the help action, and you can cast any touch or melee hit spell through the familiar. -# 73. - Fog Cloud (V,S) level 1 Conjuration [Concentration] [SOL] +# 74. - Fog Cloud (V,S) level 1 Conjuration [Concentration] [SOL] **[Druid, Ranger, Sorcerer, Wizard]** Generate a sphere of thick fog for a limited time. The area is heavily obscured, penalizing creatures inside it that rely on sight. -# 74. - *Gift of Alacrity* © (V,S) level 1 Divination [UB] +# 75. - *Gift of Alacrity* © (V,S) level 1 Divination [UB] **[Wizard]** You touch a willing creature. For the duration, the target can add 1d8 to its initiative rolls. -# 75. - Goodberry (V,S) level 1 Transmutation [SOL] +# 76. - Goodberry (V,S) level 1 Transmutation [SOL] **[Druid, Ranger]** Creates 10 berries infused with magic. Eating a berry restores 1 hit point and provides sustenance for a long rest. Berries vanish after a long rest. -# 76. - Grease (V,S) level 1 Conjuration [SOL] +# 77. - Grease (V,S) level 1 Conjuration [SOL] **[Artificer, Wizard]** Cover an area of 2 x 2 cells with grease. Creatures trying to cross it may fall prone. -# 77. - Guiding Bolt (V,S) level 1 Evocation [SOL] +# 78. - Guiding Bolt (V,S) level 1 Evocation [SOL] **[Cleric]** Launch a radiant attack against an enemy and make them easy to hit. -# 78. - *Hail of Thorns* © (V) level 1 Conjuration [Concentration] [UB] +# 79. - *Hail of Thorns* © (V) level 1 Conjuration [Concentration] [UB] **[Ranger]** The next time you hit a creature with a ranged weapon attack before the spell ends, this spell creates a rain of thorns that sprouts from your ranged weapon or ammunition. In addition to the normal effect of the attack, the target of the attack and each creature within 5 feet of it must make a Dexterity saving throw. A creature takes 1d10 piercing damage on a failed save, or half as much damage on a successful one. -# 79. - Healing Word (V) level 1 Evocation [SOL] +# 80. - Healing Word (V) level 1 Evocation [SOL] **[Bard, Cleric, Druid]** Heal an ally you can see. -# 80. - Hellish Rebuke (V,S) level 1 Evocation [SOL] +# 81. - Hellish Rebuke (V,S) level 1 Evocation [SOL] **[Warlock]** When you are damaged by a creature within range, you can use your reaction to inflict fire damage back. -# 81. - Heroism (V,S) level 1 Enchantment [Concentration] [SOL] +# 82. - Heroism (V,S) level 1 Enchantment [Concentration] [SOL] **[Bard, Paladin]** An ally gains temporary hit points and cannot be frightened for a limited time. -# 82. - Hideous Laughter (V,S) level 1 Enchantment [Concentration] [SOL] +# 83. - Hideous Laughter (V,S) level 1 Enchantment [Concentration] [SOL] **[Bard, Wizard]** Make an enemy helpless with irresistible laughter. -# 83. - Hunter's Mark (V) level 1 Divination [Concentration] [SOL] +# 84. - Hunter's Mark (V) level 1 Divination [Concentration] [SOL] **[Ranger]** An enemy gets additional damage from you, and you can easily detect it for a limited time. -# 84. - *Ice Knife* © (S) level 1 Conjuration [UB] +# 85. - *Ice Knife* © (S) level 1 Conjuration [UB] **[Druid, Sorcerer, Wizard]** You create a shard of ice and fling it at one creature within range. Make a ranged spell attack against the target. On a hit, the target takes 1d10 piercing damage. Hit or miss, the shard then explodes. The target and each creature within 5 feet of the point where the ice exploded must succeed on a Dexterity saving throw or take 2d6 cold damage. When you cast this spell using a spell slot of 2nd level or higher, both the cold and piercing damage increase by 1 die for each slot level above 1st. -# 85. - Identify (M,V,S) level 1 Divination [SOL] +# 86. - Identify (M,V,S) level 1 Divination [SOL] **[Artificer, Bard, Wizard]** Identify the hidden properties of an object. -# 86. - Inflict Wounds (V,S) level 1 Necromancy [SOL] +# 87. - Inflict Wounds (V,S) level 1 Necromancy [SOL] **[Cleric]** Deal necrotic damage to an enemy you hit. -# 87. - Jump (V,S) level 1 Transmutation [SOL] +# 88. - Jump (V,S) level 1 Transmutation [SOL] **[Artificer, Druid, Ranger, Sorcerer, Wizard]** Increase an ally's jumping distance. -# 88. - Jump (V,S) level 1 Transmutation [SOL] +# 89. - Jump (V,S) level 1 Transmutation [SOL] Increase an ally's jumping distance. -# 89. - Longstrider (V,S) level 1 Transmutation [SOL] +# 90. - Longstrider (V,S) level 1 Transmutation [SOL] **[Artificer, Bard, Druid, Ranger, Wizard]** Increases an ally's speed by two cells per turn. -# 90. - Mage Armor (V,S) level 1 Abjuration [SOL] +# 91. - Mage Armor (V,S) level 1 Abjuration [SOL] **[Sorcerer, Wizard]** Provide magical armor to an ally who doesn't wear armor. -# 91. - Magic Missile (V,S) level 1 Evocation [SOL] +# 92. - Magic Missile (V,S) level 1 Evocation [SOL] **[Sorcerer, Wizard]** Strike one or more enemies with projectiles that can't miss. -# 92. - *Magnify Gravity* © (V,S) level 1 Transmutation [UB] +# 93. - *Magnify Gravity* © (V,S) level 1 Transmutation [UB] **[Wizard]** Sharply increase gravity in a 10-foot-radius sphere to crush and slow targets. -# 93. - Malediction (V,S) level 1 Enchantment [Concentration] [SOL] +# 94. - Malediction (V,S) level 1 Enchantment [Concentration] [SOL] **[Warlock]** Until the spell ends, whenever you hit a target with an attack you deal an extra 1d6 magical damage of the same type as the attack's damage. -# 94. - Mule (V,S) level 1 Transmutation [UB] +# 95. - Mule (V,S) level 1 Transmutation [UB] **[Bard, Sorcerer, Warlock, Wizard]** The recipient of this spell is able to ignore the effects of heavy loads or armor on movement speed. They can also carry slightly more weight. -# 95. - Protect vs Evil & Good (V,S) level 1 Abjuration [Concentration] [SOL] +# 96. - Protect vs Evil & Good (V,S) level 1 Abjuration [Concentration] [SOL] **[Cleric, Paladin, Warlock, Wizard]** Touch an ally to give them protection from evil or good creatures for a limited time. -# 96. - Radiant Motes (V,S) level 1 Evocation [UB] +# 97. - Radiant Motes (V,S) level 1 Evocation [UB] **[Artificer, Wizard]** Unleashes a swarm of 4 radiant projectiles that deal 1d4 radiant damage each. When you cast this spell using a spell slot of 2nd level or higher, the spell creates 1 more projectile for each slot above 1st. -# 97. - *Sanctuary* © (V,S) level 1 Abjuration [UB] +# 98. - *Sanctuary* © (V,S) level 1 Abjuration [UB] **[Artificer, Cleric]** You ward a creature within range against attack. Until the spell ends, any creature who targets the warded creature with an attack or a harmful spell must first make a Wisdom saving throw. On a failed save, the creature loses the attack or spell. This spell doesn't protect the warded creature from area effects. If the warded creature makes an attack or casts a spell, this spell ends. -# 98. - *Searing Smite* © (V) level 1 Evocation [Concentration] [UB] +# 99. - *Searing Smite* © (V) level 1 Evocation [Concentration] [UB] **[Paladin, Ranger]** The next time you hit a creature with a melee weapon attack during the spell's duration, your weapon flares with white-hot intensity, and the attack deals an extra 1d6 fire damage to the target and causes the target to ignite in flames. At the start of each of its turns until the spell ends, the target must make a Constitution saving throw. On a failed save, it takes 1d6 fire damage. On a successful save, the spells ends. If the target or a creature within 5 feet of it uses an action to put out the flames, or if some other effect douses the flames (such as the target being submerged in water), the spell ends. When you cast this spell using a spell slot of 2nd level or higher, the extra damage increases by 1d6 for each slot level above 1st. -# 99. - Shield (V,S) level 1 Abjuration [SOL] +# 100. - Shield (V,S) level 1 Abjuration [SOL] **[Sorcerer, Wizard]** Increase your AC by 5 just before you would take a hit. -# 100. - Shield of Faith (V,S) level 1 Abjuration [Concentration] [SOL] +# 101. - Shield of Faith (V,S) level 1 Abjuration [Concentration] [SOL] **[Cleric, Paladin]** Increase an ally's AC by 2 for a limited time. -# 101. - Sleep (V,S) level 1 Enchantment [SOL] +# 102. - Sleep (V,S) level 1 Enchantment [SOL] **[Bard, Sorcerer, Wizard]** Put a number of creatures to sleep for a limited time. Roll 5d8: the total is how many hit points of creatures this spell can affect. -# 102. - *Tasha's Caustic Brew* © (V,S) level 1 Evocation [Concentration] [UB] +# 103. - *Tasha's Caustic Brew* © (V,S) level 1 Evocation [Concentration] [UB] **[Artificer, Sorcerer, Wizard]** A stream of acid emanates from you in a line 30 feet long and 5 feet wide in a direction you choose. Each creature in the line must succeed on a Dexterity saving throw or be covered in acid for the spell's duration or until a creature uses its action to scrape or wash the acid off itself or another creature. A creature covered in the acid takes 2d4 acid damage at start of each of its turns. When you cast this spell using a spell slot 2nd level or higher, the damage increases by 2d4 for each slot level above 1st. -# 103. - *Thunderous Smite* © (V) level 1 Evocation [Concentration] [UB] +# 104. - *Thunderous Smite* © (V) level 1 Evocation [Concentration] [UB] **[Paladin]** The first time you hit with a melee weapon attack during this spell's duration, your weapon rings with thunder that is audible within 300 feet of you, and the attack deals an extra 2d6 thunder damage to the target. Additionally, if the target is a creature, it must succeed on a Strength saving throw or be pushed 10 feet away from you and knocked prone. -# 104. - Thunderwave (V,S) level 1 Evocation [SOL] +# 105. - Thunderwave (V,S) level 1 Evocation [SOL] **[Bard, Druid, Sorcerer, Wizard]** Emit a wave of force that causes damage and pushes creatures and objects away. -# 105. - Tiefling's Hellish Rebuke (V,S) level 1 Evocation [SOL] +# 106. - Tiefling's Hellish Rebuke (V,S) level 1 Evocation [SOL] When you are damaged by a creature withing range, you can use your reaction to inflict fire damage back at them. This tiefling version of the spell is more powerful than the common one but cannot use a higher level Spell Slot to increase damage. -# 106. - *Witch Bolt* © (V,S) level 1 Evocation [Concentration] [UB] +# 107. - *Witch Bolt* © (V,S) level 1 Evocation [Concentration] [UB] **[Sorcerer, Warlock, Wizard]** A beam of crackling, blue energy lances out toward a creature within range, forming a sustained arc of lightning between you and the target. Make a ranged spell attack against that creature. On a hit, the target takes 1d12 lightning damage, and on each of your turns for the duration, you can use your action to deal 1d12 lightning damage to the target automatically. The spell ends if you use your action to do anything else. The spell also ends if the target is ever outside the spell's range. When you cast this spell using a spell slot of 2nd level or higher, the damage increases by 1d12 for each slot level above 1st. -# 107. - *Wrathful Smite* © (V) level 1 Evocation [Concentration] [UB] +# 108. - *Wrathful Smite* © (V) level 1 Evocation [Concentration] [UB] **[Paladin]** The next time you hit with a melee weapon attack during this spell's duration, your attack deals an extra 1d6 psychic damage. Additionally, if the target is a creature, it must make a Wisdom saving throw or be frightened of you until the spell ends. As an action, the creature can make a Wisdom check against your spell save DC to steel its resolve and end this spell. -# 108. - *Zephyr Strike* © (V) level 1 Transmutation [Concentration] [UB] +# 109. - *Zephyr Strike* © (V) level 1 Transmutation [Concentration] [UB] **[Ranger]** You move like the wind. For the duration, your movement doesn't provoke opportunity attacks. Once before the spell ends, you can give yourself advantage on one weapon attack roll on your turn. That attack deals an extra 1d8 force damage on a hit. Whether you hit or miss, your walking speed increases by 30 feet until the end of that turn. -# 109. - Acid Arrow (V,S) level 2 Evocation [SOL] +# 110. - Acid Arrow (V,S) level 2 Evocation [SOL] **[Wizard]** Launch an acid arrow that deals some damage even if you miss your shot. -# 110. - *Aganazzar's Scorcher* © (V,S) level 2 Evocation [UB] +# 111. - *Aganazzar's Scorcher* © (V,S) level 2 Evocation [UB] **[Sorcerer, Wizard]** A line of roaring flame 30 feet long and 5 feet wide emanates from you in a direction you choose. Each creature in the line must make a Dexterity saving throw. A creature takes 3d10 fire damage on a failed save, or half as much damage on a successful one. When you cast this spell using a spell slot of 3rd level or higher, the damage increases by 1d10 for each slot level above 2nd. -# 111. - Aid (V,S) level 2 Abjuration [SOL] +# 112. - Aid (V,S) level 2 Abjuration [SOL] **[Artificer, Cleric, Paladin]** Temporarily increases hit points for up to three allies. -# 112. - Barkskin (V,S) level 2 Transmutation [Concentration] [SOL] +# 113. - Barkskin (V,S) level 2 Transmutation [Concentration] [SOL] **[Druid, Ranger]** Gives you or an ally you can touch an AC of at least 16. -# 113. - Blindness (V) level 2 Necromancy [SOL] +# 114. - Blindness (V) level 2 Necromancy [SOL] **[Bard, Cleric, Sorcerer, Wizard]** Blind an enemy for one minute. -# 114. - Blur (V) level 2 Illusion [Concentration] [SOL] +# 115. - Blur (V) level 2 Illusion [Concentration] [SOL] **[Artificer, Sorcerer, Wizard]** Makes you blurry and harder to hit for up to one minute. -# 115. - *Borrowed Knowledge* © (V,S) level 2 Divination [UB] +# 116. - *Borrowed Knowledge* © (V,S) level 2 Divination [UB] **[Bard, Cleric, Warlock, Wizard]** You draw on knowledge from spirits of the past. Choose one skill in which you lack proficiency. For 1 hour, you have proficiency in the chosen skill. The spell ends early if you cast it again. -# 116. - Branding Smite (V) level 2 Evocation [Concentration] [SOL] +# 117. - Branding Smite (V) level 2 Evocation [Concentration] [SOL] **[Paladin]** Your next hit causes additional radiant damage and your target becomes luminous. -# 117. - Calm Emotions (V,S) level 2 Enchantment [Concentration] [SOL] +# 118. - Calm Emotions (V,S) level 2 Enchantment [Concentration] [SOL] **[Bard, Cleric]** Stops allies from being charmed or frightened and makes hostile humanoids indifferent. -# 118. - *Cloud of Daggers* © (V,S) level 2 Conjuration [Concentration] [UB] +# 119. - *Cloud of Daggers* © (V,S) level 2 Conjuration [Concentration] [UB] **[Bard, Sorcerer, Warlock, Wizard]** You fill the air with spinning daggers in a cube 5 feet on each side, centered on a point you choose within range. A creature takes 4d4 slashing damage when it enters the spell's area for the first time on a turn or starts its turn there. When you cast this spell using a spell slot of 3rd level or higher, the damage increases by 2d4 for each slot level above 2nd. -# 119. - Color Burst (V,S) level 2 Illusion [UB] +# 120. - Color Burst (V,S) level 2 Illusion [UB] **[Artificer, Sorcerer, Wizard]** Burst a luminous cube that briefly blinds anyone within 10 ft. 8d10 is how many hit points of creatures this spell can affect. -# 120. - Conjure Goblinoids (V,S) level 2 Conjuration [Concentration] [UB] +# 121. - Conjure Goblinoids (V,S) level 2 Conjuration [Concentration] [UB] **[Druid, Ranger]** Conjures 2 goblins who obey your orders unless you lose concentration. -# 121. - Darkness (V) level 2 Evocation [Concentration] [SOL] +# 122. - Darkness (V) level 2 Evocation [Concentration] [SOL] **[Sorcerer, Warlock, Wizard]** Create an area of magical darkness. -# 122. - Darkvision (V,S) level 2 Transmutation [SOL] +# 123. - Darkvision (V,S) level 2 Transmutation [SOL] **[Artificer, Druid, Ranger, Sorcerer, Wizard]** Grant Darkvision to the target. -# 123. - Enhance Ability (V,S) level 2 Transmutation [Concentration] [SOL] +# 124. - Enhance Ability (V,S) level 2 Transmutation [Concentration] [SOL] **[Artificer, Bard, Cleric, Druid]** Grant temporary powers to an ally for up to one hour. -# 124. - Find Traps (V,S) level 2 Evocation [SOL] +# 125. - Find Traps (V,S) level 2 Evocation [SOL] **[Cleric, Druid, Ranger]** Spot mechanical and magical traps, but not natural hazards. -# 125. - Flame Blade (V,S) level 2 Evocation [Concentration] [SOL] +# 126. - Flame Blade (V,S) level 2 Evocation [Concentration] [SOL] **[Druid]** Evokes a fiery blade for ten minutes that you can wield in battle. -# 126. - Flaming Sphere (V,S) level 2 Evocation [Concentration] [SOL] +# 127. - Flaming Sphere (V,S) level 2 Evocation [Concentration] [SOL] **[Druid, Wizard]** Summons a movable, burning sphere. -# 127. - Heat Metal (V,S) level 2 Transmutation [Concentration] [SOL] +# 128. - Heat Metal (V,S) level 2 Transmutation [Concentration] [SOL] **[Artificer, Bard, Druid]** Causes metallic armor worn by a target creature to glow red hot, causing fire damage and disadvantage to attack rolls and ability checks. The damage can be repeated every turn with a bonus action. -# 128. - Hold Person (V,S) level 2 Enchantment [Concentration] [SOL] +# 129. - Hold Person (V,S) level 2 Enchantment [Concentration] [SOL] **[Bard, Cleric, Druid, Sorcerer, Warlock, Wizard]** Paralyze a humanoid you can see for a limited time. -# 129. - Invisibility (V,S) level 2 Illusion [Concentration] [SOL] +# 130. - Invisibility (V,S) level 2 Illusion [Concentration] [SOL] **[Artificer, Bard, Sorcerer, Warlock, Wizard]** Make an ally invisible for a limited time. -# 130. - *Kinetic Jaunt* © (S) level 2 Evocation [Concentration] [UB] +# 131. - *Kinetic Jaunt* © (S) level 2 Evocation [Concentration] [UB] **[Artificer, Bard, Sorcerer, Wizard]** @@ -787,36 +793,36 @@ You magically empower your movement with dance like steps, giving yourself the f • You don't provoke opportunity attacks. • You can move through the space of any creature. -# 131. - Knock (V) level 2 Transmutation [SOL] +# 132. - Knock (V) level 2 Transmutation [SOL] **[Bard, Sorcerer, Wizard]** Magically open locked doors, chests, and the like. -# 132. - Lesser Restoration (V,S) level 2 Abjuration [SOL] +# 133. - Lesser Restoration (V,S) level 2 Abjuration [SOL] **[Artificer, Bard, Cleric, Druid, Paladin, Ranger]** Remove a detrimental condition from an ally. -# 133. - Levitate (V,S) level 2 Transmutation [Concentration] [SOL] +# 134. - Levitate (V,S) level 2 Transmutation [Concentration] [SOL] **[Artificer, Sorcerer, Wizard]** Allow a creature to levitate and gain control of its aerial movement for a limited time. Can affect enemies if their size is medium or smaller. -# 134. - Levitate (V,S) level 2 Transmutation [Concentration] [SOL] +# 135. - Levitate (V,S) level 2 Transmutation [Concentration] [SOL] Allow a creature to levitate and gain control of its aerial movement for a limited time. Can affect enemies if their size is medium or smaller. -# 135. - Magic Weapon (V,S) level 2 Transmutation [Concentration] [SOL] +# 136. - Magic Weapon (V,S) level 2 Transmutation [Concentration] [SOL] **[Artificer, Paladin, Wizard]** A nonmagical weapon becomes a +1 weapon for up to one hour. -# 136. - *Mirror Image* © (V,S) level 2 Illusion [UB] +# 137. - *Mirror Image* © (V,S) level 2 Illusion [UB] **[Bard, Sorcerer, Warlock, Wizard]** @@ -825,348 +831,348 @@ If you have 3 duplicates, you must roll a 6 or higher to change the attack's tar A duplicate's AC is equal to 10 + your Dexterity modifier. If an attack hits a duplicate, the duplicate is destroyed. A duplicate can be destroyed only by an attack that hits it. It ignores all other damage and effects. The spell ends when all three duplicates are destroyed. A creature is unaffected by this spell if it is Blinded, or has Blindsight, Truesight or Tremorsense (doesn't apply if you don't touch ground). -# 137. - Misty Step (V) level 2 Conjuration [SOL] +# 138. - Misty Step (V) level 2 Conjuration [SOL] **[Sorcerer, Warlock, Wizard]** Teleports you to a free cell you can see, no more than 6 cells away. -# 138. - Moon Beam (V,S) level 2 Evocation [Concentration] [SOL] +# 139. - Moon Beam (V,S) level 2 Evocation [Concentration] [SOL] **[Druid]** Conjures a vertical column of moonlight which causes radiant damage. Shapechangers have disadvantage on the save. -# 139. - Noxious Spray (V,S) level 2 Evocation [UB] +# 140. - Noxious Spray (V,S) level 2 Evocation [UB] **[Druid, Sorcerer, Warlock, Wizard]** You unleash a spray of noxious gases on a target within range. Make a ranged spell attack. On a hit, the target takes 4d6 poison damage and must succeed on a Constitution saving throw or spend all its next turn retching and heaving, unable to move or take actions. Constructs, elementals and undead are unaffected by this spell. When you cast this spell using a slot of 3rd level or higher, you can target one additional creature for each slot level above 2nd. -# 140. - Pass Without Trace (V,S) level 2 Abjuration [Concentration] [SOL] +# 141. - Pass Without Trace (V,S) level 2 Abjuration [Concentration] [SOL] **[Druid, Ranger]** Make yourself and up to 5 allies stealthier for one hour. -# 141. - Petal Storm (V,S) level 2 Conjuration [Concentration] [UB] +# 142. - Petal Storm (V,S) level 2 Conjuration [Concentration] [UB] **[Druid]** Choose an unoccupied 15-foot cube of air that you can see within range. An elemental force of swirling winds appears in the cube and lasts for the spell's duration. The cloud heavily obscures its area. Any creature that enters the storm for the first time on a turn or starts its turn there must make a Strength saving throw. On a failed save, the creature takes 3d4 slashing damage. As a bonus action, you can move the storm up to 30 ft in any direction. -# 142. - Prayer of Healing (V) level 2 Evocation [SOL] +# 143. - Prayer of Healing (V) level 2 Evocation [SOL] **[Cleric]** Heal multiple allies at the same time. -# 143. - Protect Threshold (V,S) level 2 Abjuration [UB] +# 144. - Protect Threshold (V,S) level 2 Abjuration [UB] **[Cleric, Druid, Paladin]** Tracing arcane sigils along its boundary, you can ward a doorway, window, or other portal from entry. For the duration, an invisible eldritch creature stalks the warded portal. Any creature that attempts to pass through the portal must make a Wisdom saving throw or take 4d6 psychic damage, or half as much on a successful save. -# 144. - Protection from Poison (V,S) level 2 Abjuration [SOL] +# 145. - Protection from Poison (V,S) level 2 Abjuration [SOL] **[Artificer, Druid, Paladin, Ranger]** Cures and protects against poison. -# 145. - Ray of Enfeeblement (V,S) level 2 Necromancy [Concentration] [SOL] +# 146. - Ray of Enfeeblement (V,S) level 2 Necromancy [Concentration] [SOL] **[Sorcerer, Warlock, Wizard]** Weaken an enemy so they deal less damage for one minute. -# 146. - *Rime's Binding Ice* © (S) level 2 Evocation [UB] +# 147. - *Rime's Binding Ice* © (S) level 2 Evocation [UB] **[Sorcerer, Wizard]** A burst of cold energy emanates from you in a 30-foot cone. Each creature in that area must make a Constitution saving throw. On a failed save, a creature takes 3d8 cold damage and is hindered by ice formations for 1 minute, or until it uses an action to break away the ice. A creature hindered by ice has its speed reduced to 0. On a successful save, a creature takes half as much damage and isn't hindered by ice. -# 147. - Scorching Ray (V,S) level 2 Evocation [SOL] +# 148. - Scorching Ray (V,S) level 2 Evocation [SOL] **[Sorcerer, Wizard]** Fling rays of fire at one or more enemies. -# 148. - See Invisibility (V,S) level 2 Divination [SOL] +# 149. - See Invisibility (V,S) level 2 Divination [SOL] **[Artificer, Bard, Sorcerer, Wizard]** You can see invisible creatures. -# 149. - *Shadow Blade* © (V,S) level 2 Illusion [Concentration] [UB] +# 150. - *Shadow Blade* © (V,S) level 2 Illusion [Concentration] [UB] **[Sorcerer, Warlock, Wizard]** You weave together threads of shadow to create a dagger of solidified gloom in your hand. It deals 2d8 psychic damage on a hit and has the finesse, light, and thrown properties. In addition, when you use it to attack a target that is in dim light or darkness, you make the attack roll with advantage. -# 150. - Shatter (V,S) level 2 Evocation [SOL] +# 151. - Shatter (V,S) level 2 Evocation [SOL] **[Bard, Sorcerer, Warlock, Wizard]** Triggers a sudden noise that causes Thunder Damage in a 2-cell radius. -# 151. - Silence (V,S) level 2 Illusion [Concentration] [SOL] +# 152. - Silence (V,S) level 2 Illusion [Concentration] [SOL] **[Bard, Cleric, Ranger]** Creates a sphere four cells in radius, inside which sound cannot exist. Stops thunder damage and prevents spellcasting using verbal components. -# 152. - *Snilloc's Snowball Storm* © (V,S) level 2 Evocation [UB] +# 153. - *Snilloc's Snowball Storm* © (V,S) level 2 Evocation [UB] **[Sorcerer, Wizard]** A flurry of magic snowballs erupts from a point you choose within range. Each creature in a 3x3 cube centered on that point must make a Dexterity saving throw. A creature takes 3d8 cold damage on a failed save, or half as much damage on a successful one. When you cast this spell using a spell slot of 3rd level or higher, the damage increases by 1d8 for each slot level above 2nd. -# 153. - Spider Climb (V,S) level 2 Transmutation [Concentration] [SOL] +# 154. - Spider Climb (V,S) level 2 Transmutation [Concentration] [SOL] **[Artificer, Sorcerer, Warlock, Wizard]** Touch an ally to allow them to climb walls like a spider for a limited time. -# 154. - Spike Growth (V,S) level 2 Transmutation [Concentration] [SOL] +# 155. - Spike Growth (V,S) level 2 Transmutation [Concentration] [SOL] **[Druid, Ranger]** Grows spikes and thorns in the area, making the terrain difficult and causing damage for every cell of movement. -# 155. - Spiritual Weapon (V,S) level 2 Evocation [SOL] +# 156. - Spiritual Weapon (V,S) level 2 Evocation [SOL] **[Cleric]** Summon a weapon that fights for you. -# 156. - *Tasha's Mind Whip* © (V) level 2 Enchantment [UB] +# 157. - *Tasha's Mind Whip* © (V) level 2 Enchantment [UB] **[Sorcerer, Wizard]** You psychically lash out at one creature you can see within range. The target must make an Intelligence saving throw. On a failed save, the target takes 3d6 psychic damage, and it can't take a reaction until the end of its next turn. Moreover, on its next turn, it must choose whether it gets a move, an action, or a bonus action; it gets only one of the three. On a successful save, the target takes half as much damage and suffers none of the spell's other effects. When you cast this spell using a spell slot of 3rd level or higher, you can target one additional creature for each slot level above 2nd. -# 157. - *Warding Bond* © (V,S) level 2 Abjuration [SOL] +# 158. - *Warding Bond* © (V,S) level 2 Abjuration [SOL] Creates a bond with the target, who gains +1 AC, +1 to saving throws and resistance to all damage, but you share all damage it receives. Lasts for one hour. -# 158. - *Web* © (V,S) level 2 Conjuration [Concentration] [UB] +# 159. - *Web* © (V,S) level 2 Conjuration [Concentration] [UB] **[Artificer, Sorcerer, Wizard]** You conjure a mass of thick, sticky webbing at a point of your choice within range. The webs fill a 20-foot cube from that point for the duration. The webs are difficult terrain and lightly obscure their area. Each creature that enters them during its turn must make a Dexterity saving throw. On a failed save, the creature is restrained as long as it remains in the webs or until it breaks free. A creature restrained by the webs can use its actions to make a Strength check against your spell save DC. If it succeeds, it is no longer restrained. -# 159. - *Wither and Bloom* © (V,S) level 2 Necromancy [UB] +# 160. - *Wither and Bloom* © (V,S) level 2 Necromancy [UB] **[Druid, Sorcerer, Wizard]** You invoke both death and life upon a 10-foot-radius sphere centered on an ally. Each enemy in that area must make a Constitution saving throw, taking 2d6 necrotic damage on a failed save, or half as much damage on a successful one. In addition, the target spends and rolls one of its unspent Hit Dice and regain a number of hit points equal to the roll plus your spellcasting ability modifier. When you cast this spell using a spell slot of 3rd level or higher, the damage increases by 1d6 for each slot above 2nd, and the number of Hit Dice that can be spent and added to the healing roll increases by one for each slot above 2nd. -# 160. - Adder's Fangs (V,S) level 3 Conjuration [UB] +# 161. - Adder's Fangs (V,S) level 3 Conjuration [UB] **[Druid, Ranger, Sorcerer, Warlock]** You create the visage of a massive green snake that appears for an instant before bearing down on your foe. Choose a creature you can see within range. The target must make a constitution saving throw, taking 4d10 poison damage on a failure, or half as much damage on a successful one. A creature that fails its saving throw is also poisoned, and its speed is halved while poisoned by this spell. At the end of each of its turns, a target may make a constitution saving throw, ending the poison on a success. Otherwise, the poison lasts for 1 minute. When you cast this spell using a spell slot of 4th level or higher, you may target an additional creature within range for each slot level above 3rd. -# 161. - *Ashardalon's Stride* © (V,S) level 3 Transmutation [Concentration] [UB] +# 162. - *Ashardalon's Stride* © (V,S) level 3 Transmutation [Concentration] [UB] **[Artificer, Ranger, Sorcerer, Wizard]** The billowing flames of a dragon blast from your feet, granting you explosive speed. For the duration, your speed increases by 20 feet and moving doesn't provoke opportunity attacks. When you move within 5 feet of a creature, it takes 1d6 fire damage from your trail of heat. A creature can take this damage only once during a turn. When you cast this spell using a spell slot of 4th level or higher, increase your speed by 5 feet for each spell slot level above 3rd. The spell deals an additional 1d6 fire damage for each slot level above 3rd. -# 162. - *Aura of Vitality* © (V) level 3 Evocation [Concentration] [UB] +# 163. - *Aura of Vitality* © (V) level 3 Evocation [Concentration] [UB] **[Cleric, Paladin]** Healing energy radiates from you in an aura with a 30-foot radius. Until the spell ends, the aura moves with you, centered on you. You can use a bonus action to cause one creature in the aura (including you) to regain 2d6 hit points. -# 163. - Beacon of Hope (V,S) level 3 Abjuration [Concentration] [SOL] +# 164. - Beacon of Hope (V,S) level 3 Abjuration [Concentration] [SOL] **[Cleric]** Raise hope and vitality. -# 164. - Bestow Curse (V,S) level 3 Necromancy [Concentration] [SOL] +# 165. - Bestow Curse (V,S) level 3 Necromancy [Concentration] [SOL] **[Bard, Cleric, Wizard]** Curses a creature you can touch. -# 165. - *Blinding Smite* © (V) level 3 Evocation [Concentration] [UB] +# 166. - *Blinding Smite* © (V) level 3 Evocation [Concentration] [UB] **[Paladin]** The next time you hit a creature with a melee weapon attack during this spell's duration, you weapon flares with a bright light, and the attack deals an extra 3d8 radiant damage to the target. Additionally, the target must succeed on a Constitution saving throw or be blinded until the spell ends. A creature blinded by this spell makes another Constitution saving throw at the end of each of its turns. On a successful save, it is no longer blinded. -# 166. - Call Lightning (V,S) level 3 Conjuration [Concentration] [SOL] +# 167. - Call Lightning (V,S) level 3 Conjuration [Concentration] [SOL] **[Druid]** Conjures a storm cloud from which you can call a vertical bolt of lightning to strike targets, dealing 3D10 lightning damage. Another bolt can be repeated every turn by using an action. -# 167. - Conjure Animal (V,S) level 3 Conjuration [Concentration] [SOL] +# 168. - Conjure Animal (V,S) level 3 Conjuration [Concentration] [SOL] **[Druid, Ranger]** Summon spirits in the form of beasts to help you in battle -# 168. - Corrupting Bolt (V,S) level 3 Necromancy [UB] +# 169. - Corrupting Bolt (V,S) level 3 Necromancy [UB] **[Sorcerer, Warlock, Wizard]** You can fire a pulse of necrotic energy that causes a creature's body to begin to wither and decay. Make a ranged attack against a creature. On a hit, the target takes 4d8 necrotic damage and must succeed a Constitution saving throw. On a failed saving throw, the next time you or an ally of yours hits the corrupted creature with an attack before the end of your next turn, the creature has vulnerability to all of that attack's damage, and then the corruption ends. When you cast this spell using a spell slot of 4th level or higher, the damage increases by 1d8 for each slot level above 3rd. -# 169. - Counterspell (S) level 3 Abjuration [SOL] +# 170. - Counterspell (S) level 3 Abjuration [SOL] **[Sorcerer, Warlock, Wizard]** Interrupt an enemy's spellcasting. -# 170. - Create Food (S) level 3 Conjuration [SOL] +# 171. - Create Food (S) level 3 Conjuration [SOL] **[Artificer, Cleric, Paladin]** Conjure 15 units of food. -# 171. - *Crusader's Mantle* © (V) level 3 Evocation [Concentration] [UB] +# 172. - *Crusader's Mantle* © (V) level 3 Evocation [Concentration] [UB] **[Paladin]** Surround yourself with a magical aura. Allies within the aura gain a bonus 1d4 radiant damage on their attacks. -# 172. - Daylight (V,S) level 3 Evocation [SOL] +# 173. - Daylight (V,S) level 3 Evocation [SOL] **[Cleric, Druid, Paladin, Ranger, Sorcerer]** Summon a globe of bright light. -# 173. - Dispel Magic (V,S) level 3 Abjuration [SOL] +# 174. - Dispel Magic (V,S) level 3 Abjuration [SOL] **[Artificer, Bard, Cleric, Druid, Paladin, Sorcerer, Warlock, Wizard]** End active spells on a creature or object. -# 174. - *Elemental Weapon* © (V,S) level 3 Transmutation [Concentration] [UB] +# 175. - *Elemental Weapon* © (V,S) level 3 Transmutation [Concentration] [UB] **[Artificer, Druid, Paladin, Ranger]** Imbue a non-magical weapon with elemental magic. It gains a +1 to attack and damage rolls, and it gains 1d4 of the corresponding element's damage. When casting with a 5 or 6 spell slots, the effects increased by one die while casting at a spell slot 7 or higher increases the effects by 2. -# 175. - Fear (V,S) level 3 Illusion [Concentration] [SOL] +# 176. - Fear (V,S) level 3 Illusion [Concentration] [SOL] **[Bard, Sorcerer, Warlock, Wizard]** Frighten creatures and force them to flee. -# 176. - Fireball (V,S) level 3 Evocation [SOL] +# 177. - Fireball (V,S) level 3 Evocation [SOL] **[Sorcerer, Wizard]** Launch a fireball that explodes from a point of your choosing. -# 177. - *Flame Arrows* © (M,V,S) level 3 Transmutation [Concentration] [UB] +# 178. - *Flame Arrows* © (M,V,S) level 3 Transmutation [Concentration] [UB] **[Artificer, Druid, Ranger, Sorcerer, Wizard]** You must be wielding a ranged weapon. When a target is hit by it, the target takes an extra 1d6 fire damage. The spell ends when twelve pieces of ammunition have been drawn from the quiver. When you cast this spell using a spell slot of 4th level or higher, the number of pieces of ammunition you can affect with this spell increases by two for each slot level above 3rd. -# 178. - Fly (V,S) level 3 Transmutation [Concentration] [SOL] +# 179. - Fly (V,S) level 3 Transmutation [Concentration] [SOL] **[Artificer, Sorcerer, Warlock, Wizard]** An ally you touch gains the ability to fly for a limited time. -# 179. - Haste (V,S) level 3 Transmutation [Concentration] [SOL] +# 180. - Haste (V,S) level 3 Transmutation [Concentration] [SOL] **[Artificer, Sorcerer, Wizard]** Make an ally faster and more agile, and grant them an additional action for a limited time. -# 180. - *Hunger of Hadar* © (V,S) level 3 Transmutation [Concentration] [UB] +# 181. - *Hunger of Hadar* © (V,S) level 3 Transmutation [Concentration] [UB] **[Warlock]** You open a gateway to the dark between the stars, a region infested with unknown horrors. A 20-foot-radius sphere of blackness and bitter cold appears, centered on a point with range and lasting for the duration. The area extinguishes light, and creatures within it are blinded. Any creature that starts its turn in the area takes 2d6 cold damage. Any creature that ends its turn in the area must succeed on a Dexterity saving throw or take 2d6 acid damage as milky, otherworldly tentacles rub against it. -# 181. - Hypnotic Pattern (S) level 3 Illusion [Concentration] [SOL] +# 182. - Hypnotic Pattern (S) level 3 Illusion [Concentration] [SOL] **[Bard, Sorcerer, Warlock, Wizard]** Charms enemies to make them harmless until attacked, but also affects allies in range. -# 182. - *Intellect Fortress* © (V) level 3 Abjuration [Concentration] [UB] +# 183. - *Intellect Fortress* © (V) level 3 Abjuration [Concentration] [UB] **[Artificer, Bard, Sorcerer, Warlock, Wizard]** For the duration, you or one willing creature you can see within range has resistance to psychic damage, as well as advantage on Intelligence, Wisdom, and Charisma saving throws. When you cast this spell using a spell slot of 4th level or higher, you may target an additional creature within range for each slot level above 3rd. -# 183. - *Life Transference* © (V,S) level 3 Necromancy [UB] +# 184. - *Life Transference* © (V,S) level 3 Necromancy [UB] **[Cleric, Wizard]** You sacrifice some of your health to mend another creature's injuries. You take 4d8 necrotic damage, and one creature of your choice that you can see within range regains a number of hit points equal to twice the necrotic damage you take. When you cast this spell using a spell s lot of 4th level or higher, the damage increases by 1d8 for each slot level above 3rd. -# 184. - *Lightning Arrow* © (V,S) level 3 Transmutation [Concentration] [UB] +# 185. - *Lightning Arrow* © (V,S) level 3 Transmutation [Concentration] [UB] **[Ranger]** The next time you make a ranged weapon attack during the spell's duration, the weapon's ammunition, or the weapon itself if it's a thrown weapon, transforms into a bolt of lightning. Make the attack roll as normal. The target takes 3d8 lightning damage on a hit, or half as much damage on a miss. Whether you hit or miss, each creature within 10 feet of the target must make a Dexterity saving throw. Each of these creatures takes 2d8 lightning damage on a failed save, or half as much damage on a successful one. When you cast this spell using a spell slot of 4th level or higher, the damage for both effects of the spell increases by 1d8 for each slot level above 3rd. -# 185. - Lightning Bolt (V,S) level 3 Evocation [SOL] +# 186. - Lightning Bolt (V,S) level 3 Evocation [SOL] **[Sorcerer, Wizard]** Unleash a stroke of lightning in a direction of your choice, damaging everyone it touches. -# 186. - Mass Healing Word (V) level 3 Evocation [SOL] +# 187. - Mass Healing Word (V) level 3 Evocation [SOL] **[Cleric]** Instantly heals up to six allies you can see. -# 187. - Protection from Energy (V,S) level 3 Abjuration [Concentration] [SOL] +# 188. - Protection from Energy (V,S) level 3 Abjuration [Concentration] [SOL] **[Artificer, Cleric, Druid, Ranger, Sorcerer, Wizard]** Touch one willing creature to give them resistance to this damage type. -# 188. - *Pulse Wave* © (V,S) level 3 Evocation [UB] +# 189. - *Pulse Wave* © (V,S) level 3 Evocation [UB] **[Wizard]** You create intense pressure, unleash it in a 30-foot cone, and decide whether the pressure pulls or pushes creatures and objects. Each creature in that cone must make a Constitution saving throw. A creature takes 6d6 force damage on a failed save, or half as much damage on a successful one. And every creature that fails the save is either pulled 15 feet toward you or pushed 15 feet away from you, depending on the choice you made for the spell. When you cast this spell using a spell slot of 4th level or higher, the damage increases by 1d6 and the distance pulled or pushed increases by 5 feet for each slot level above 3rd. -# 189. - Remove Curse (V,S) level 3 Abjuration [SOL] +# 190. - Remove Curse (V,S) level 3 Abjuration [SOL] **[Cleric, Paladin, Warlock, Wizard]** Removes all curses affecting the target. -# 190. - Revivify (M,V,S) level 3 Necromancy [SOL] +# 191. - Revivify (M,V,S) level 3 Necromancy [SOL] **[Artificer, Cleric, Paladin]** Brings one creature back to life, up to 1 minute after death. -# 191. - Sleet Storm (V,S) level 3 Conjuration [Concentration] [SOL] +# 192. - Sleet Storm (V,S) level 3 Conjuration [Concentration] [SOL] **[Druid, Sorcerer, Wizard]** Creates an area where the ground is slippery, vision is obscured, and concentration is harder. -# 192. - Slow (V,S) level 3 Transmutation [Concentration] [SOL] +# 193. - Slow (V,S) level 3 Transmutation [Concentration] [SOL] **[Sorcerer, Wizard]** Slows and impairs the actions of up to 6 creatures. -# 193. - Spirit Guardians (V,S) level 3 Conjuration [Concentration] [SOL] +# 194. - Spirit Guardians (V,S) level 3 Conjuration [Concentration] [SOL] **[Cleric]** Call forth spirits to protect you. -# 194. - *Spirit Shroud* © (V,S) level 3 Necromancy [Concentration] [UB] +# 195. - *Spirit Shroud* © (V,S) level 3 Necromancy [Concentration] [UB] **[Cleric, Paladin, Warlock, Wizard]** @@ -1175,444 +1181,444 @@ Until the spell ends, any attack you make deals 1d8 extra damage when you hit a In addition, any enemy creature within 10ft of you when you cast, or that enters or starts its turn in that range has its movement speed lowered by 10ft until start of its next turn. When you cast this spell using a spell slot of 4th level or higher, the damage increases by 1d8 for every two slot levels above 3rd. -# 195. - Stinking Cloud (V,S) level 3 Conjuration [Concentration] [SOL] +# 196. - Stinking Cloud (V,S) level 3 Conjuration [Concentration] [SOL] **[Bard, Sorcerer, Wizard]** Create a cloud of incapacitating, noxious gas. -# 196. - *Thunder Step* © (V) level 3 Conjuration [UB] +# 197. - *Thunder Step* © (V) level 3 Conjuration [UB] **[Sorcerer, Warlock, Wizard]** You teleport yourself to an unoccupied space you can see within range. Immediately after you disappear, a thunderous boom sounds, and each creature within 10 feet of the space you left must make a Constitution saving throw, taking 3d10 thunder damage on a failed save, or half as much damage on a successful one. You can also teleport one willing ally. When you cast this spell using a spell slot of 4th level or higher, the damage increases by 1d10 for each slot level above 3rd. -# 197. - Tongues (V) level 3 Divination [SOL] +# 198. - Tongues (V) level 3 Divination [SOL] **[Bard, Cleric, Sorcerer, Warlock, Wizard]** Grants knowledge of all languages for one hour. -# 198. - Vampiric Touch (V,S) level 3 Necromancy [Concentration] [SOL] +# 199. - Vampiric Touch (V,S) level 3 Necromancy [Concentration] [SOL] **[Warlock, Wizard]** Grants you a life-draining melee attack for one minute. -# 199. - Wind Wall (V,S) level 3 Evocation [Concentration] [SOL] +# 200. - Wind Wall (V,S) level 3 Evocation [Concentration] [SOL] **[Druid, Ranger]** Create a wall of wind that causes damage, pushes creatures and objects away, and disperses fogs and gases. -# 200. - Winter's Breath (V,S) level 3 Conjuration [UB] +# 201. - Winter's Breath (V,S) level 3 Conjuration [UB] **[Druid, Sorcerer, Wizard]** Create a blast of cold wind to chill your enemies and knock them prone. -# 201. - *Aura of Life* © (V) level 4 Abjuration [Concentration] [UB] +# 202. - *Aura of Life* © (V) level 4 Abjuration [Concentration] [UB] **[Cleric, Paladin]** Life-preserving energy radiates from you in an aura with a 30-foot radius. Until the spell ends, the aura moves with you, centered on you. Each non-hostile creature in the aura, including you, has resistance to necrotic damage, and its hit point maximum can't be reduced. In addition, a non-hostile, living creature regains 1 hit point when it starts its turn in the aura with 0 hit points. -# 202. - *Aura of Purity* © (V) level 4 Abjuration [Concentration] [UB] +# 203. - *Aura of Purity* © (V) level 4 Abjuration [Concentration] [UB] **[Cleric, Paladin]** Purifying energy radiates from you in an aura with a 30-foot radius. Until the spell ends, the aura moves with you, centered on you. Each non-hostile creature in the aura, including you, can't become diseased, has resistance to poison damage, and has advantage on saving throws against effects that cause any of the following conditions: blinded, charmed, deafened, frightened, paralyzed, poisoned, and stunned. -# 203. - Banishment (V,S) level 4 Abjuration [Concentration] [SOL] +# 204. - Banishment (V,S) level 4 Abjuration [Concentration] [SOL] **[Cleric, Paladin, Sorcerer, Warlock, Wizard]** Banishes a creature as long as you concentrate. The creature can be permanently banished if it is extraplanar. -# 204. - Black Tentacles (V,S) level 4 Conjuration [Concentration] [SOL] +# 205. - Black Tentacles (V,S) level 4 Conjuration [Concentration] [SOL] **[Wizard]** Conjures black tentacles that restrain and damage creatures within the area of effect. -# 205. - Blessing of Rime (V,S) level 4 Evocation [UB] +# 206. - Blessing of Rime (V,S) level 4 Evocation [UB] **[Bard, Druid, Ranger]** You summon a chill wind that numbs the pain of your allies. Choose up to three creatures within range. Each creature gains 3d8 temporary hit points for the duration. While a creature has these hit points, if it would make a Constitution saving throw, it gains advantage on the roll. When you cast this spell using a spell slot of 5th level or higher, the temporary hit points increase by 1d8 for each slot level above 4th. -# 206. - Blight (V,S) level 4 Necromancy [SOL] +# 207. - Blight (V,S) level 4 Necromancy [SOL] **[Druid, Sorcerer, Warlock, Wizard]** Drains life from a creature, causing massive necrotic damage. -# 207. - Brain Bulwark (V) level 4 Abjuration [UB] +# 208. - Brain Bulwark (V) level 4 Abjuration [UB] **[Artificer, Bard, Sorcerer, Warlock, Wizard]** For the duration, you or one willing creature you can see within range has resistance to psychic damage, as well as Immunity to the Charmed, Frightened, Fear, Mind dominated and Mind controlled conditions. -# 208. - Confusion (V,S) level 4 Enchantment [Concentration] [SOL] +# 209. - Confusion (V,S) level 4 Enchantment [Concentration] [SOL] **[Bard, Druid, Sorcerer, Wizard]** Creates confusion and erratic behavior in a creature, possibly leading it to attack its allies. -# 209. - Conjure 4 Elementals (V,S) level 4 Conjuration [Concentration] [SOL] +# 210. - Conjure 4 Elementals (V,S) level 4 Conjuration [Concentration] [SOL] 4 elementals are conjured (CR 1/2). -# 210. - Conjure Minor Elementals (V,S) level 4 Conjuration [Concentration] [SOL] +# 211. - Conjure Minor Elementals (V,S) level 4 Conjuration [Concentration] [SOL] **[Druid, Wizard]** Conjure elemental creatures under your command, which are dismissed when the spell ends or is broken. -# 211. - Death Ward (V,S) level 4 Abjuration [SOL] +# 212. - Death Ward (V,S) level 4 Abjuration [SOL] **[Cleric, Paladin]** Protects the creature once against instant death or being reduced to 0 hit points. -# 212. - Dimension Door (V) level 4 Conjuration [SOL] +# 213. - Dimension Door (V) level 4 Conjuration [SOL] **[Bard, Sorcerer, Warlock, Wizard]** Transfers the caster and a friendly creature to a specified destination. -# 213. - Dominate Beast (V,S) level 4 Enchantment [Concentration] [SOL] +# 214. - Dominate Beast (V,S) level 4 Enchantment [Concentration] [SOL] **[Druid, Sorcerer]** Grants you control over an enemy beast. -# 214. - Dreadful Omen (V,S) level 4 Enchantment [SOL] +# 215. - Dreadful Omen (V,S) level 4 Enchantment [SOL] **[Bard, Warlock]** You whisper dreadful words that cause immense mental anguish in your enemies. On a failed wisdom saving throw, they take psychic damage and become frightened until the end of their next turn, moving away from you as much as possible. On a successful save, they take half as much damage and are not frightened. -# 215. - *Elemental Bane* © (V,S) level 4 Transmutation [Concentration] [UB] +# 216. - *Elemental Bane* © (V,S) level 4 Transmutation [Concentration] [UB] **[Artificer, Druid, Warlock, Wizard]** Choose one creature you can see within range, and choose one of the following damage types: acid, cold, fire, lightning, or thunder. The target must succeed on a Constitution saving throw or be affected by the spell for its duration. The first time each turn the affected target takes non-recurrent damage of the chosen type, the target takes an extra 2d6 damage of that type. Moreover, the target loses any resistance to that damage type until the spell ends. When you cast this spell using a spell slot of 5th level or higher, you can target one additional creature for each slot level above 4th. The creatures must be within 30 feet of each other when you target them. -# 216. - Fire Shield (V,S) level 4 Evocation [SOL] +# 217. - Fire Shield (V,S) level 4 Evocation [SOL] **[Sorcerer, Wizard]** Grants resistance to fire or cold, and damages creatures attacking the caster with melee attacks. -# 217. - Freedom of Movement (V,S) level 4 Abjuration [SOL] +# 218. - Freedom of Movement (V,S) level 4 Abjuration [SOL] **[Artificer, Bard, Cleric, Druid, Ranger]** Grants immunity to movement restrictions, as well as being paralyzed or restrained. -# 218. - Giant Insect (V,S) level 4 Transmutation [Concentration] [SOL] +# 219. - Giant Insect (V,S) level 4 Transmutation [Concentration] [SOL] **[Druid]** Conjures a giant version of a natural insect or arthropod. -# 219. - *Gravity Sinkhole* © (V,S) level 4 Evocation [UB] +# 220. - *Gravity Sinkhole* © (V,S) level 4 Evocation [UB] **[Wizard]** A 20-foot-radius sphere of crushing force forms at a point you can see within range and tugs at the creatures there. Each creature in the sphere must make a Constitution saving throw. On a failed save, the creature takes 5d10 force damage, and is pulled in a straight line toward the center of the sphere, ending in an unoccupied space as close to the center as possible. On a successful save, the creature takes half as much damage and isn't pulled. When you cast this spell using a spell slot of 5th level or higher, the damage increases by 1d10 for each slot level above 4th. -# 220. - Greater Invisibility (V,S) level 4 Illusion [Concentration] [SOL] +# 221. - Greater Invisibility (V,S) level 4 Illusion [Concentration] [SOL] **[Bard, Sorcerer, Wizard]** Target becomes invisible for the duration, even when attacking or casting spells. -# 221. - Guardian of Faith (V) level 4 Conjuration [SOL] +# 222. - Guardian of Faith (V) level 4 Conjuration [SOL] **[Cleric]** Conjures a large spectral guardian that damages approaching enemies. -# 222. - *Guardian of Nature* © (V) level 4 Transmutation [Concentration] [UB] +# 223. - *Guardian of Nature* © (V) level 4 Transmutation [Concentration] [UB] **[Druid, Ranger]** A nature spirit answers your call and transforms you into a powerful guardian. The transformation lasts until the spell ends. You choose between a Beast or a Tree form. -# 223. - Ice Storm (V,S) level 4 Evocation [SOL] +# 224. - Ice Storm (V,S) level 4 Evocation [SOL] **[Druid, Sorcerer, Wizard]** Causes bludgeoning and cold damage in the area, and turns the ground into difficult terrain. -# 224. - Identify Creatures (V,S) level 4 Divination [SOL] +# 225. - Identify Creatures (V,S) level 4 Divination [SOL] **[Wizard]** Reveals full bestiary knowledge for the affected creatures. -# 225. - Irresistible Performance (V) level 4 Enchantment [UB] +# 226. - Irresistible Performance (V) level 4 Enchantment [UB] **[Bard]** You weave a song into the air, causing those who hear it to applaud its magnificence. All creatures of your choice inside a 30-foot-cube within range must make a Charisma saving throw or be forced to clap and shout until the start of your next turn. A creature that is charmed by you always fails this saving throw. A clapping creature cannot perform any actions that require their hands or mouth but can otherwise act normally. This spell has no effect on creatures that are immune to charm. -# 226. - *Mordenkainen's Faithful Hound* © (V,S) level 4 Conjuration [UB] +# 227. - *Mordenkainen's Faithful Hound* © (V,S) level 4 Conjuration [UB] **[Artificer, Wizard]** You conjure a phantom watchdog in an unoccupied space that you can see within range, where it remains for the duration. The hound has Darkvision up to 60 ft, Truesight up to 80 ft, is invisible to all creatures except you and can't be harmed. During each of your turns, the hound can attempt to bite one creature within 5 feet of it that is hostile to you as a free action. The hound's attack bonus is equal to your spellcasting ability modifier + your proficiency bonus. On a hit, it deals 4d8 piercing damage. -# 227. - Phantasmal Killer (V,S) level 4 Illusion [Concentration] [SOL] +# 228. - Phantasmal Killer (V,S) level 4 Illusion [Concentration] [SOL] **[Wizard]** Causes psychic damage to the target creature with each turn, unless a saving throw is successful or the effect ends. -# 228. - Psionic Blast (V) level 4 Evocation [UB] +# 229. - Psionic Blast (V) level 4 Evocation [UB] **[Sorcerer, Warlock, Wizard]** You unleash a debilitating wave of mental power in a 30-foot cone. Each creature in the area must make an Intelligence saving throw. On a failed save, a target takes 5d8 psychic damage, becomes dazzled and has its movement speed halved until the end of your next turn. On a successful save, a target only takes half as much damage. When you cast this spell using a spell slot of 4th level or higher, the damage increases by 1d8 for each slot level above 4th. -# 229. - *Raulothim's Psychic Lance* © (V) level 4 Enchantment [UB] +# 230. - *Raulothim's Psychic Lance* © (V) level 4 Enchantment [UB] **[Bard, Sorcerer, Warlock, Wizard]** You unleash a shimmering lance of psychic power from your forehead at a creature that you can see within range. It must succeed on an Intelligence saving throw or take 7d6 psychic damage and be incapacitated until the end of your next turn. On a successful save, the creature takes half damage and isn't incapacitated. At Higher Levels. When you cast this spell using a spell slot of 4th level or higher, the damage increases by 1d6 for each slot level above 4th. -# 230. - *Sickening Radiance* © (V,S) level 4 Evocation [Concentration] [UB] +# 231. - *Sickening Radiance* © (V,S) level 4 Evocation [Concentration] [UB] **[Sorcerer, Warlock, Wizard]** Dim light spreads within a 30-foot-radius sphere centered on a point you choose within range. The light spreads around corners, and it lasts until the spell ends. When a creature moves into the spell's area for the first time on a turn or starts its turn there, that creature must succeed on a Constitution saving throw or take 4d10 radiant damage, and it suffers one level of exhaustion and emits a dim light in a 5-foot radius. This light makes it impossible for the creature to benefit from being invisible. The light and any levels of exhaustion caused by this spell go away when the spell ends. -# 231. - *Staggering Smite* © (V) level 4 Evocation [Concentration] [UB] +# 232. - *Staggering Smite* © (V) level 4 Evocation [Concentration] [UB] **[Paladin]** The next time you hit a creature with a melee weapon attack during this spell's duration, your weapon pierces both body and mind, and the attack deals an extra 4d6 psychic damage to the target. The target must make a Wisdom saving throw. On a failed save, it has disadvantage on attack rolls and ability checks, and can't take reactions, until the end of its next turn. -# 232. - Stoneskin (M,V,S) level 4 Abjuration [Concentration] [SOL] +# 233. - Stoneskin (M,V,S) level 4 Abjuration [Concentration] [SOL] **[Artificer, Druid, Ranger, Sorcerer, Wizard]** Grants resistance to non-magical bludgeoning, slashing, and piercing damage. -# 233. - *Vitriolic Sphere* © (V,S) level 4 Evocation [UB] +# 234. - *Vitriolic Sphere* © (V,S) level 4 Evocation [UB] **[Sorcerer, Wizard]** You point at a place within range, and a glowing 1-foot ball of emerald acid streaks there and explodes in a 20-foot radius. Each creature in that area must make a Dexterity saving throw. On a failed save, a creature takes 10d4 acid damage and 5d4 acid damage at the end of its next turn. On a successful save, a creature takes half the initial damage and no damage at the end of its next turn. When you cast this spell using a spell slot of 5th level or higher, the initial damage increases by 2d4 for each slot level above 4th. -# 234. - Wall of Fire (V,S) level 4 Evocation [Concentration] [SOL] +# 235. - Wall of Fire (V,S) level 4 Evocation [Concentration] [SOL] **[Druid, Sorcerer, Wizard]** Create a burning wall that injures creatures in or next to it. -# 235. - *Banishing Smite* © (V) level 5 Abjuration [Concentration] [UB] +# 236. - *Banishing Smite* © (V) level 5 Abjuration [Concentration] [UB] **[Paladin]** The next time you hit a creature with a weapon attack before this spell ends, your weapon crackles with force, and the attack deals an extra 5d10 force damage to the target. Additionally, if this attack reduces the target to 50 hit points of fewer, you banish it. If the target is native to a different plane of existence than the on you're on, the target disappears, returning to its home plane. If the target is native to the plane you're on, the creature vanishes into a harmless demi-plane. While there, the target is incapacitated. It remains there until the spell ends, at which point the target reappears in the space it left or in the nearest unoccupied space if that space is occupied. -# 236. - *Circle of Power* © (V) level 5 Abjuration [Concentration] [UB] +# 237. - *Circle of Power* © (V) level 5 Abjuration [Concentration] [UB] **[Paladin]** Divine energy radiates from you, distorting and diffusing magical energy within 30 feet of you. Until the spell ends, the sphere moves with you, centered on you. For the duration, each friendly creature in the area, including you, has advantage on saving throws against spells and other magical effects. Additionally, when an affected creature succeeds on a saving throw made against a spell or magical effect that allows it to make a saving throw to take only half damage, it instead takes no damage if it succeeds on the saving throws. -# 237. - Cloudkill (V,S) level 5 Conjuration [Concentration] [SOL] +# 238. - Cloudkill (V,S) level 5 Conjuration [Concentration] [SOL] **[Sorcerer, Wizard]** Creates an obscuring and poisonous cloud. The cloud moves every round. -# 238. - Cone of Cold (V,S) level 5 Evocation [SOL] +# 239. - Cone of Cold (V,S) level 5 Evocation [SOL] **[Sorcerer, Wizard]** Inflicts massive cold damage in the cone of effect. -# 239. - Conjure Elemental (V,S) level 5 Conjuration [Concentration] [SOL] +# 240. - Conjure Elemental (V,S) level 5 Conjuration [Concentration] [SOL] **[Druid, Wizard]** Conjures an elemental of the chosen element that fights alongside you. If you lose concentration, the elemental remains and becomes hostile. -# 240. - Contagion (V,S) level 5 Necromancy [SOL] +# 241. - Contagion (V,S) level 5 Necromancy [SOL] **[Cleric, Druid]** Hit a creature to inflict a disease from the options. -# 241. - *Dawn* © (V,S) level 5 Evocation [Concentration] [UB] +# 242. - *Dawn* © (V,S) level 5 Evocation [Concentration] [UB] **[Cleric, Wizard]** The light of dawn shines down on a location you specify within range. Until the spell ends, a 30-foot-radius, 40-foot-high cylinder of bright light glimmers there. This light is sunlight. When the cylinder appears, each creature in it must make a Constitution saving throw, taking 4d10 radiant damage on a failed save, or half as much damage on a successful one. A creature must also make this saving throw whenever it ends its turn in the cylinder. If you're within 60 feet of the cylinder, you can move it up to 60 feet as a bonus action on your turn. -# 242. - *Destructive Wave* © (V) level 5 Evocation [UB] +# 243. - *Destructive Wave* © (V) level 5 Evocation [UB] **[Paladin]** You strike the ground, creating a burst of divine energy that ripples outward from you. Each creature you choose within 30 feet of you must succeed on a Constitution saving throw or take 5d6 thunder damage, as well as 5d6 radiant or necrotic damage, and be knocked prone. A creature that succeeds on its saving throw takes half as much damage and isn't knocked prone. -# 243. - Dispel Evil and Good (V,S) level 5 Abjuration [Concentration] [SOL] +# 244. - Dispel Evil and Good (V,S) level 5 Abjuration [Concentration] [SOL] **[Cleric, Paladin]** Celestial, elementals, feys, fiends, and undead have disadvantage on attacks against you. This spell also allows you to cancel hostile enchantments or dismiss extraplanar creatures hit by your attacks once. -# 244. - Dominate Person (V,S) level 5 Enchantment [Concentration] [SOL] +# 245. - Dominate Person (V,S) level 5 Enchantment [Concentration] [SOL] **[Bard, Sorcerer, Wizard]** Grants you control over an enemy creature. -# 245. - *Far Step* © (V) level 5 Conjuration [Concentration] [UB] +# 246. - *Far Step* © (V) level 5 Conjuration [Concentration] [UB] **[Sorcerer, Warlock, Wizard]** You teleport up to 60 ft to an unoccupied space you can see. On each of your turns before the spell ends, you can use a bonus action to teleport in this way again. -# 246. - Flame Strike (V,S) level 5 Evocation [SOL] +# 247. - Flame Strike (V,S) level 5 Evocation [SOL] **[Cleric]** Conjures a burning column of fire and radiance affecting all creatures inside. -# 247. - Greater Restoration (V,S) level 5 Abjuration [SOL] +# 248. - Greater Restoration (V,S) level 5 Abjuration [SOL] **[Artificer, Bard, Cleric, Druid]** Removes one detrimental condition, such as a charm or curse, or an effect that reduces an ability score or hit points. -# 248. - Hold Monster (V,S) level 5 Enchantment [Concentration] [SOL] +# 249. - Hold Monster (V,S) level 5 Enchantment [Concentration] [SOL] **[Bard, Sorcerer, Warlock, Wizard]** Paralyzes a creature unless it succeeds a WIS saving throw. No effect on undead. -# 249. - *Holy Weapon* © (V,S) level 5 Evocation [Concentration] [UB] +# 250. - *Holy Weapon* © (V,S) level 5 Evocation [Concentration] [UB] **[Cleric, Paladin]** You imbue a weapon you touch with holy power. Until the spell ends, the weapon emits bright light in a 30-foot radius and dim light for an additional 30 feet. In addition, weapon attacks made with it deal an extra 2d8 radiant damage on a hit. If the weapon isn't already a magic weapon, it becomes one for the duration. As a bonus action on your turn, if the weapon is within 30 ft, you can dismiss this spell and cause the weapon to emit a burst of radiance. Each creature of your choice that you can see within 30 feet of the weapon must make a Constitution saving throw. On a failed save, a creature takes 4d8 radiant damage, and it is blinded for 1 minute. On a successful save, a creature takes half as much damage and isn't blinded. At the end of each of its turns, a blinded creature can make a Constitution saving throw, ending the effect on itself on a success. -# 250. - *Immolation* © (V) level 5 Evocation [Concentration] [UB] +# 251. - *Immolation* © (V) level 5 Evocation [Concentration] [UB] **[Sorcerer, Wizard]** Flames wreathe one creature you can see within range. The target must make a Dexterity saving throw. It takes 8d6 fire damage on a failed save, or half as much damage on a successful one. On a failed save, the target also burns for the spell's duration. The burning target sheds bright light in a 30-foot radius and dim light for an additional 30 feet and takes 8d6 fire damage at the start of each of its turns. -# 251. - Insect Plague (V,S) level 5 Conjuration [Concentration] [SOL] +# 252. - Insect Plague (V,S) level 5 Conjuration [Concentration] [SOL] **[Cleric, Druid, Sorcerer]** Summons a sphere of biting insects. -# 252. - Mantle of Thorns (V,S) level 5 Transmutation [Concentration] [UB] +# 253. - Mantle of Thorns (V,S) level 5 Transmutation [Concentration] [UB] **[Druid]** Surround yourself with an aura of thorns. Those that start or walk through take 2d8 piercing damage. This damage scales at higher levels by 1d8 per slot. -# 253. - Mass Cure Wounds (V,S) level 5 Evocation [SOL] +# 254. - Mass Cure Wounds (V,S) level 5 Evocation [SOL] **[Bard, Cleric, Druid]** Heals up to 6 creatures. -# 254. - Mind Twist (V,S) level 5 Enchantment [SOL] +# 255. - Mind Twist (V,S) level 5 Enchantment [SOL] **[Sorcerer, Warlock, Wizard]** Causes massive psychic damage to all creatures around you, and incapacitates them if they fail their INT saving throw. -# 255. - Raise Dead (M,V,S) level 5 Necromancy [SOL] +# 256. - Raise Dead (M,V,S) level 5 Necromancy [SOL] **[Bard, Cleric, Paladin]** Brings one creature back to life, up to 10 days after death. -# 256. - *Skill Empowerment* © (V,S) level 5 Divination [UB] +# 257. - *Skill Empowerment* © (V,S) level 5 Divination [UB] **[Artificer, Bard, Sorcerer, Wizard]** Your magic deepens a creature's understanding of its own talent. You touch one willing creature and give it expertise in one skill of your choice; until the spell ends, the creature doubles its proficiency bonus for ability checks it makes that use the chosen skill. For 1 hour, you have proficiency in the chosen skill. The spell ends early if you cast it again. You must choose a skill in which the target is proficient and that isn't already benefiting from expertise. -# 257. - Sonic Boom (V,S) level 5 Evocation [UB] +# 258. - Sonic Boom (V,S) level 5 Evocation [UB] **[Sorcerer, Wizard]** A small orb the same color as the balloon used appears at a point you choose within range then expands with a loud crack into an explosion of force. Each creature in a 30-foot radius must make a Strength saving throw. A target is pushed up to 30 feet away from the center and dealt 6d8 thunder damage on a failed save, or half as much damage and no movement on a successful one. -# 258. - *Steel Wind Strike* © (M,S) level 5 Conjuration [UB] +# 259. - *Steel Wind Strike* © (M,S) level 5 Conjuration [UB] **[Ranger, Wizard]** You flourish the weapon used in the casting and then vanish to strike like the wind. Choose up to five creatures you can see within range. Make a melee spell attack against each target. On a hit, a target takes 6d10 force damage. You can then teleport to an unoccupied space you can see within 5 feet of one of the targets you hit or missed. -# 259. - *Swift Quiver* © (M,V,S) level 5 Transmutation [Concentration] [UB] +# 260. - *Swift Quiver* © (M,V,S) level 5 Transmutation [Concentration] [UB] **[Ranger]** You transmute your quiver so it automatically makes the ammunition leap into your hand when you reach for it. On each of your turns until the spell ends, you can use a bonus action to make two attacks with a ranged weapon. -# 260. - *Synaptic Static* © (V) level 5 Evocation [UB] +# 261. - *Synaptic Static* © (V) level 5 Evocation [UB] **[Bard, Sorcerer, Warlock, Wizard]** You choose a point within range and cause psychic energy to explode there. Each creature in a 20-foot-radius sphere centered on that point must make an Intelligence saving throw. A target takes 8d6 psychic damage on a failed save, or half as much damage on a successful After a failed save, a target has muddled thoughts for 1 minute. During that time, it rolls a d6 and subtracts the number rolled from all its attack rolls and ability checks. The target can make an Intelligence saving throw at the end of each of its turns, ending the effect on itself on a success. -# 261. - *Telekinesis* © (V,S) level 5 Transmutation [Concentration] [UB] +# 262. - *Telekinesis* © (V,S) level 5 Transmutation [Concentration] [UB] **[Sorcerer, Wizard]** You can try to move a Huge or smaller creature. Make an ability check with your spellcasting ability contested by the creature's Strength check. If you win the contest, you move the creature up to 30 feet in any direction, but not beyond the range of this spell. Until the end of your next turn, the creature is restrained in your telekinetic grip. On subsequent rounds, you can use your action to attempt to maintain your telekinetic grip on the creature by repeating the contest, or target a new creature, ending the restrained effect on the previously affected creature. -# 262. - Blade Barrier (V,S) level 6 Evocation [Concentration] [SOL] +# 263. - Blade Barrier (V,S) level 6 Evocation [Concentration] [SOL] **[Cleric]** Conjures a wall of razor sharp blades which causes 6d10 slashing damage to anyone crossing it -# 263. - Chain Lightning (V,S) level 6 Evocation [SOL] +# 264. - Chain Lightning (V,S) level 6 Evocation [SOL] **[Sorcerer, Wizard]** Target a creature with lightning, which can arc to 3 other targets within 6 cells. -# 264. - Circle of Death (M,V,S) level 6 Necromancy [SOL] +# 265. - Circle of Death (M,V,S) level 6 Necromancy [SOL] **[Sorcerer, Warlock, Wizard]** A sphere of negative energy causes Necrotic damage from a point you choose -# 265. - Conjure Fey (V,S) level 6 Conjuration [Concentration] [SOL] +# 266. - Conjure Fey (V,S) level 6 Conjuration [Concentration] [SOL] **[Druid, Warlock]** Conjures a fey creature of challenge rating 1 to 6 to fight alongside you. If you lose concentration, the creature stays but becomes hostile. -# 266. - Disintegrate (V,S) level 6 Transmutation [SOL] +# 267. - Disintegrate (V,S) level 6 Transmutation [SOL] **[Sorcerer, Wizard]** Causes massive force damage on the target, which can be disintegrated if reduced to 0 hit points -# 267. - Eyebite (V,S) level 6 Necromancy [Concentration] [SOL] +# 268. - Eyebite (V,S) level 6 Necromancy [Concentration] [SOL] **[Bard, Sorcerer, Warlock, Wizard]** Your eyes gain a specific property which can target a creature each turn -# 268. - *Fizban's Platinum Shield* © (M,V,S) level 6 Abjuration [Concentration] [UB] +# 269. - *Fizban's Platinum Shield* © (M,V,S) level 6 Abjuration [Concentration] [UB] **[Sorcerer, Wizard]** @@ -1622,85 +1628,85 @@ You create a field of silvery light that surrounds a creature of your choice wit • If the creature is subjected to an effect that allows it to make a Dexterity saving throw to take only half damage, the creature instead takes no damage if it succeeds on the saving throw, and only half damage if it fails. As a bonus action on subsequent turns, you can move the field to another creature within 60 feet of the field. -# 269. - Flash Freeze (V,S) level 6 Evocation [UB] +# 270. - Flash Freeze (V,S) level 6 Evocation [UB] **[Druid, Sorcerer, Warlock]** You attempt to encase a creature you can see within range in a prison of solid ice. The target must make a Dexterity saving throw. On a failed save, the target takes 10d6 cold damage and becomes restrained in layers of thick ice. On a successful save, the target takes half as much damage and is not restrained. The spell can only be used on creatures up to large size. To break out, the restrained target can make a Strength check as an action against your spell save DC. On success, the target escapes and is no longer restrained. When you cast this spell using a spell slot of 7th level or higher, the cold damage increases by 2d6 for each slot level above 6th. -# 270. - Freezing Sphere (V,S) level 6 Evocation [SOL] +# 271. - Freezing Sphere (V,S) level 6 Evocation [SOL] **[Wizard]** Toss a huge ball of cold energy that explodes on impact -# 271. - Globe Of Invulnerability (V,S) level 6 Abjuration [Concentration] [SOL] +# 272. - Globe Of Invulnerability (V,S) level 6 Abjuration [Concentration] [SOL] **[Sorcerer, Wizard]** A sphere surrounding you prevents any spell up to 5th level to affect anyone inside it. -# 272. - Harm (V,S) level 6 Necromancy [SOL] +# 273. - Harm (V,S) level 6 Necromancy [SOL] **[Cleric]** Inflicts devastating necrotic damage and reduces the maximum hit points accordingly. Cannot drop the target below 1 hit points -# 273. - Heal (V,S) level 6 Evocation [SOL] +# 274. - Heal (V,S) level 6 Evocation [SOL] **[Cleric, Druid]** Heals 70 hit points and also removes blindness and diseases -# 274. - Heroes Feast (M,V,S) level 6 Conjuration [SOL] +# 275. - Heroes Feast (M,V,S) level 6 Conjuration [SOL] **[Cleric, Druid]** Summons a feast which cures most ailments and grants immunity to poisonand being frightened, WIS save advantage, and increased maximum hitpoints -# 275. - Hilarity (V) level 6 Enchantment [Concentration] [SOL] +# 276. - Hilarity (V) level 6 Enchantment [Concentration] [SOL] **[Bard, Wizard]** Choose one target. They fall down laughing, becoming prone and incapacitated, and take psychic damage until they save at the end of one of their turns, or until the spell ends. -# 276. - Poison Wave (M,V,S) level 6 Evocation [UB] +# 277. - Poison Wave (M,V,S) level 6 Evocation [UB] **[Wizard]** A poisonous wave erupts from you, engulfing those close by. Each creature within the spell's radius must make a Constitution saving throw, taking 6d10 poison damage on a failure, or half as much damage on a successful one. A creature who fails their saving throw is also poisoned for 1 minute, and can repeat the saving throw at the end of each of its turn. When you cast this spell using a slot of 7th level or higher, the damage increases by 1d10 for each slot level above 6th. -# 277. - Ring of Blades (M,V,S) level 6 Conjuration [Concentration] [UB] +# 278. - Ring of Blades (M,V,S) level 6 Conjuration [Concentration] [UB] **[Wizard]** You raise both hands as you evoke six transparent blades around you as a bonus action. When you cast this spell, and as a bonus action on each subsequent turn, you can throw one of these blades at a creature within 60 feet from you. Make a ranged spell attack. On a hit, the target takes 4d10 force damage. When you cast this spell using a spell slot of 7th level or higher, the damage of each blade increases by 1d10 for each slot level above 6th. -# 278. - *Scatter* © (V) level 6 Conjuration [UB] +# 279. - *Scatter* © (V) level 6 Conjuration [UB] **[Sorcerer, Warlock, Wizard]** The air quivers around up to five creatures of your choice that you can see within range. An unwilling creature must succeed on a Wisdom saving throw to resist this spell. You teleport each affected target to an unoccupied space that you can see within 120 feet of you. That space must be on the ground or on a floor. -# 279. - Shelter from Energy (V,S) level 6 Abjuration [UB] +# 280. - Shelter from Energy (V,S) level 6 Abjuration [UB] **[Cleric, Druid, Sorcerer, Wizard]** Choose one of the following damage types: acid, cold, fire, lightning, necrotic, radiant, or thunder, and then choose up to six willing creatures that you can see within range. For 1 hour, targets have resistance to that damage type. When you cast this spell using a spell slot of 7th level or higher, you may target up to one additional willing creature for each slot level above 6th. -# 280. - Sunbeam (V,S) level 6 Evocation [Concentration] [SOL] +# 281. - Sunbeam (V,S) level 6 Evocation [Concentration] [SOL] **[Druid, Sorcerer, Wizard]** You conjure a line of radiance which can burn and blind creatures in the line of effect; undead and oozes save with disadvantage. The beam can be retargeted each turn -# 281. - *Tasha's Otherworldly Guise* © (M,V,S) level 6 Transmutation [Concentration] [UB] +# 282. - *Tasha's Otherworldly Guise* © (M,V,S) level 6 Transmutation [Concentration] [UB] **[Sorcerer, Warlock, Wizard]** Uttering an incantation, you draw on the magic of the Lower Planes or Upper Planes (your choice) to transform yourself. -# 282. - *Tenser's Transformation* © (V,S) level 6 Transmutation [Concentration] [UB] +# 283. - *Tenser's Transformation* © (V,S) level 6 Transmutation [Concentration] [UB] **[Wizard]** @@ -1712,49 +1718,49 @@ You endow yourself with endurance and martial prowess fueled by magic. Until the • You can attack twice, instead of once, when you take the Attack action on your turn. Immediately after the spell ends, you must succeed on a DC 15 Constitution saving throw or suffer one level of exhaustion. -# 283. - True Seeing (V,S) level 6 Divination [SOL] +# 284. - True Seeing (V,S) level 6 Divination [SOL] **[Bard, Cleric, Sorcerer, Warlock, Wizard]** A creature you touch gains True Sight for one hour -# 284. - Wall of Thorns (V,S) level 6 Conjuration [Concentration] [SOL] +# 285. - Wall of Thorns (V,S) level 6 Conjuration [Concentration] [SOL] **[Druid]** Creates a wall of tough of needle-sharp thorns, that hurts and slows every creature in it. -# 285. - Arcane Sword (M,V,S) level 7 Evocation [Concentration] [SOL] +# 286. - Arcane Sword (M,V,S) level 7 Evocation [Concentration] [SOL] **[Bard, Wizard]** Summon a weapon that fights for you. -# 286. - Conjure Celestial (V,S) level 7 Conjuration [Concentration] [SOL] +# 287. - Conjure Celestial (V,S) level 7 Conjuration [Concentration] [SOL] **[Cleric]** Conjures a celestial creature of challenge rating 4 that fights alongside you. If you lose concentration, the creature is dismissed. -# 287. - *Crown of Stars* © (V,S) level 7 Evocation [UB] +# 288. - *Crown of Stars* © (V,S) level 7 Evocation [UB] **[Sorcerer, Warlock, Wizard]** Seven star-like motes of light appear and orbit your head until the spell ends. You can use a bonus action to send one of the motes streaking toward one creature or object within 120 feet of you. When you do so, make a ranged spell attack. On a hit, the target takes 4d12 radiant damage. Whether you hit or miss, the mote is expended. The spell ends early if you expend the last mote. If you have four or more motes remaining, they shed bright light in a 30-foot radius and dim light for an additional 30 feet. If you have one to three motes remaining, they shed dim light in a 30-foot radius. When you cast this spell using a spell slot of 8th level or higher, the number of motes created increases by two for each slot level above 7th. -# 288. - Delayed Blast Fireball (V,S) level 7 Evocation [Concentration] [SOL] +# 289. - Delayed Blast Fireball (V,S) level 7 Evocation [Concentration] [SOL] **[Sorcerer, Wizard]** Conjures a ball of fire that grows more powerful with time, detonating when a creature enters its space or when the spell ends. -# 289. - Divine Word (V) level 7 Evocation [SOL] +# 290. - Divine Word (V) level 7 Evocation [SOL] **[Cleric]** Utter a divine word that inflicts various negative conditions on enemies you can see, based on their HP. Also banishes all celestials, elementals, feys, and fiends if they fail their saving throws. -# 290. - *Draconic Transformation* © (M,V,S) level 7 Transmutation [Concentration] [UB] +# 291. - *Draconic Transformation* © (M,V,S) level 7 Transmutation [Concentration] [UB] **[Druid, Sorcerer, Wizard]** @@ -1763,210 +1769,210 @@ With a roar, you draw on the magic of dragons to transform yourself, taking on d • When you cast this spell, and as a bonus action on subsequent turns for the duration, you can exhale shimmering energy in a 60-foot cone. Each creature in that area must make a Dexterity saving throw, taking 6d8 force damage on a failed save, or half as much damage on a successful one. • Incorporeal wings sprout from your back, giving you a flying speed of 60 feet. -# 291. - Finger of Death (V,S) level 7 Necromancy [SOL] +# 292. - Finger of Death (V,S) level 7 Necromancy [SOL] **[Sorcerer, Warlock, Wizard]** Send negative energy coursing through a creature within range. -# 292. - Fire Storm (V,S) level 7 Evocation [SOL] +# 293. - Fire Storm (V,S) level 7 Evocation [SOL] **[Cleric, Druid, Sorcerer]** Causes a wide wall of roaring flames to burst up wherever you choose within range. -# 293. - Gravity Slam (V,S) level 7 Transmutation [SOL] +# 294. - Gravity Slam (V,S) level 7 Transmutation [SOL] **[Druid, Sorcerer, Warlock, Wizard]** Increase gravity to slam everyone in a specific area onto the ground. -# 294. - Prismatic Spray (V,S) level 7 Evocation [SOL] +# 295. - Prismatic Spray (V,S) level 7 Evocation [SOL] **[Sorcerer, Wizard]** Each creature within the cone of effect is randomly affected by one or two (roll 8 on d8) rays with the following effects: -# 295. - Regenerate (V,S) level 7 Transmutation [SOL] +# 296. - Regenerate (V,S) level 7 Transmutation [SOL] **[Bard, Cleric, Druid]** Touch a creature and stimulate its natural healing ability. -# 296. - Rescue the Dying (V) level 7 Transmutation [UB] +# 297. - Rescue the Dying (V) level 7 Transmutation [UB] **[Cleric, Druid]** With a word, you call positive energy into the target's body to heal and ward it. The target regains a number of hit points equal to 4d10 + 30. It also gains temporary hit points equal to half that amount and resistance to all damage, both lasting until the end of your next turn. When you cast this spell using a spell slot of 8th level or higher, the healing increases by 2d10 for each slot level above 7th. -# 297. - Resurrection (M,V,S) level 7 Necromancy [SOL] +# 298. - Resurrection (M,V,S) level 7 Necromancy [SOL] **[Bard, Cleric, Druid]** Brings one creature back to life, up to 100 years after death. -# 298. - *Reverse Gravity* © (V,S) level 7 Transmutation [Concentration] [UB] +# 299. - *Reverse Gravity* © (V,S) level 7 Transmutation [Concentration] [UB] **[Druid, Sorcerer, Wizard]** This spell reverses gravity in a 50-foot-radius, 100-foot-high cylinder centered on a point within range. -# 299. - Symbol (V,S) level 7 Abjuration [SOL] +# 300. - Symbol (V,S) level 7 Abjuration [SOL] **[Bard, Cleric, Wizard]** Inscribe a glyph on a surface. When an enemy starts its turn in the area or enters it, the glyph's effect is applied in a sphere with a 12-cell radius. -# 300. - *Abi-Dalzim's Horrid Wilting* © (V,S) level 8 Necromancy [UB] +# 301. - *Abi-Dalzim's Horrid Wilting* © (V,S) level 8 Necromancy [UB] **[Sorcerer, Wizard]** You draw the moisture from every creature in a 30-foot cube centered on a point you choose within range. Each creature in that area must make a Constitution saving throw. Constructs and undead aren't affected, and plants and ice elementals make this saving throw with disadvantage. A creature takes 10d8 necrotic damage on a failed save, or half as much damage on a successful one. -# 301. - Divine Blade (V,S) level 8 Evocation [Concentration] [SOL] +# 302. - Divine Blade (V,S) level 8 Evocation [Concentration] [SOL] **[Cleric]** A glowing blade of pure energy springs from your hand. On a hit, the target takes 6d8 radiant damage and must roll a Wisdom saving throw to avoid being stunned until the end of its next turn. -# 302. - Dominate Monster (V,S) level 8 Enchantment [Concentration] [SOL] +# 303. - Dominate Monster (V,S) level 8 Enchantment [Concentration] [SOL] **[Bard, Sorcerer, Warlock, Wizard]** Grants you control over an enemy creature of any type. -# 303. - Earthquake (V,S) level 8 Evocation [Concentration] [SOL] +# 304. - Earthquake (V,S) level 8 Evocation [Concentration] [SOL] **[Cleric, Druid, Sorcerer]** You create a seismic disturbance that violently shakes the ground and the creatures standing on it for the duration of the spell. -# 304. - Feeblemind (V,S) level 8 Enchantment [SOL] +# 305. - Feeblemind (V,S) level 8 Enchantment [SOL] **[Bard, Druid, Warlock, Wizard]** You blast the mind of one creature, attempting to shatter its intellect and personality. The target takes 4d6 psychic damage and must make an Intelligence saving throw. On a failed save, the creature's Intelligence, Charisma and Wisdom scores become 1 and it is unable to cast spells. These effects last for 1 minute. -# 305. - Holy Aura (V,S) level 8 Abjuration [Concentration] [SOL] +# 306. - Holy Aura (V,S) level 8 Abjuration [Concentration] [SOL] **[Cleric]** Allies within 6 cells of you when you cast Holy Aura gain advantage on all saving throws, and other creatures have disadvantage on attack rolls against them until the spell ends. In addition, when a fiend or an undead hits an affected creature with a melee attack, they must succeed on a Constitution saving throw or be blinded until the spell ends. -# 306. - Incendiary Cloud (V,S) level 8 Conjuration [Concentration] [SOL] +# 307. - Incendiary Cloud (V,S) level 8 Conjuration [Concentration] [SOL] **[Sorcerer, Wizard]** A cloud of smoke appears in a sphere with a 4-cell radius. The cloud damages each creature inside it, and moves away from you each turn until the end of the spell's duration or until a moderate wind disperses the cloud. -# 307. - *Maddening Darkness* © (V) level 8 Evocation [Concentration] [UB] +# 308. - *Maddening Darkness* © (V) level 8 Evocation [Concentration] [UB] **[Warlock, Wizard]** Magical darkness spreads from a point you choose within range to fill a 60-foot-radius sphere until the spell ends. Shrieks, gibbering, and mad laughter can be heard within the sphere. On activation, and whenever a creature ends its turn in the sphere, it must make a Wisdom saving throw, taking 6d8 psychic damage on a failed save, or half as much damage on a successful one. -# 308. - Maze (V,S) level 8 Abjuration [Concentration] [SOL] +# 309. - Maze (V,S) level 8 Abjuration [Concentration] [SOL] **[Wizard]** You banish a creature that you can see within range into a labyrinthine demiplane. The target remains there for the spell's duration or until it escapes the maze. -# 309. - *Mind Blank* © (V,S) level 8 Transmutation [UB] +# 310. - *Mind Blank* © (V,S) level 8 Transmutation [UB] **[Bard, Wizard]** Until the spell ends, one willing creature you touch is immune to psychic damage, any effect that would sense its emotions or read its thoughts, divination spells, and the charmed condition. -# 310. - Power Word Stun (V) level 8 Enchantment [SOL] +# 311. - Power Word Stun (V) level 8 Enchantment [SOL] **[Bard, Sorcerer, Warlock, Wizard]** Overwhelm the mind of a creature that has 150 hit points or fewer, leaving it stunned. -# 311. - Soul Expulsion (V,S) level 8 Necromancy [UB] +# 312. - Soul Expulsion (V,S) level 8 Necromancy [UB] **[Cleric, Sorcerer, Wizard]** You blast a foe's soul with magical power, causing it to glow with otherwordly light. Choose one creature that you can see within range, which must make a Charisma saving throw. On a failed saving throw, the target takes 11d8 necrotic damage and is stunned until the start of your next turn. On a successful saving throw, the target takes half damage and isn't stunned. Each enemy other than the target that is within 60 feet of the target must make a Wisdom saving throw. On a failed save, a creature takes 7d8 radiant damage and has disadvantage on attack rolls until the end of your next turn. On a successful saving throw a creature takes half damage and nothing else. When this spell targets undead, the spell ignores any resistance or immunity to necrotic damage, and the target has disadvantage on the saving throw. When you cast this spell using a spell slot of 9th level, both the necrotic damage and radiant damage increase by 2d8. -# 312. - Spell Ward (V,S) level 8 Abjuration [Concentration] [SOL] +# 313. - Spell Ward (V,S) level 8 Abjuration [Concentration] [SOL] **[Cleric, Wizard]** Creates a mobile globe that is impenetrable to enemy spells cast from outside it. -# 313. - Sunburst (V,S) level 8 Evocation [SOL] +# 314. - Sunburst (V,S) level 8 Evocation [SOL] **[Druid, Sorcerer, Wizard]** Brilliant sunlight blazes in a sphere with a 12-cell radius. Each creature that fails a Constitution saving throw takes radiant damage and is blinded for 1 minute. Any darkness created by a spell in the area is dispelled. -# 314. - Thunderstorm (V,S) level 8 Transmutation [SOL] +# 315. - Thunderstorm (V,S) level 8 Transmutation [SOL] **[Cleric, Druid, Wizard]** You create a blast of thunder in a sphere that causes thunder and lightning damage to everyone, and can blind or stun those who fail a CON saving throw. -# 315. - Wild Shapes (V,S) level 8 Transmutation [Concentration] [SOL] +# 316. - Wild Shapes (V,S) level 8 Transmutation [Concentration] [SOL] Turns other creatures in to beasts for one day. -# 316. - *Foresight* © (V,S) level 9 Transmutation [UB] +# 317. - *Foresight* © (V,S) level 9 Transmutation [UB] **[Bard, Druid, Warlock, Wizard]** You touch a willing creature and bestow a limited ability to see into the immediate future. For the duration, the target can't be surprised and has advantage on attack rolls, ability checks, and saving throws. Additionally, other creatures have disadvantage on attack rolls against the target for the duration. -# 317. - *Invulnerability* © (M,V,S) level 9 Abjuration [Concentration] [UB] +# 318. - *Invulnerability* © (M,V,S) level 9 Abjuration [Concentration] [UB] **[Wizard]** You are immune to all damage until the spell ends. -# 318. - *Mass Heal* © (V,S) level 9 Transmutation [UB] +# 319. - *Mass Heal* © (V,S) level 9 Transmutation [UB] **[Cleric]** A flood of healing energy flows from you into injured creatures around you. You restore 120 hit points each to 6 creatures that you can see within range. Creatures healed by this spell are also cured of all diseases and any effect making them blinded or deafened. This spell has no effect on undead or constructs. -# 319. - *Meteor Swarm* © (V,S) level 9 Transmutation [UB] +# 320. - *Meteor Swarm* © (V,S) level 9 Transmutation [UB] **[Sorcerer, Wizard]** Blazing orbs of fire plummet to the ground at a single point you can see within range. Each creature in a 40-foot-radius sphere centered on the point you choose must make a Dexterity saving throw. The sphere spreads around corners. A creature takes 20d6 fire damage and 20d6 bludgeoning damage on a failed save, or half as much damage on a successful one. A creature in the area of more than one fiery burst is affected only once. -# 320. - *Power Word Heal* © (V,S) level 9 Enchantment [UB] +# 321. - *Power Word Heal* © (V,S) level 9 Enchantment [UB] **[Bard, Cleric]** A wave of healing energy washes over the creature you touch. The target regains all its hit points. If the creature is charmed, frightened, paralyzed, or stunned, the condition ends. If the creature is prone, it can use its reaction to stand up. This spell has no effect on undead or constructs. -# 321. - *Power Word Kill* © (V,S) level 9 Transmutation [UB] +# 322. - *Power Word Kill* © (V,S) level 9 Transmutation [UB] **[Bard, Sorcerer, Warlock, Wizard]** You utter a word of power that can compel one creature you can see within range to die instantly. If the creature you choose has 100 hit points or fewer, it dies. Otherwise, the spell has no effect. -# 322. - *Psychic Scream* © (S) level 9 Enchantment [UB] +# 323. - *Psychic Scream* © (S) level 9 Enchantment [UB] **[Bard, Sorcerer, Warlock, Wizard]** You unleash the power of your mind to blast the intellect of up to ten creatures of your choice that you can see within range. Each target must make an Intelligence saving throw. On a failed save, a target takes 14d6 psychic damage and is stunned for 1 minute. On a successful save, a target takes half as much damage and isn't stunned. A stunned target can make an Intelligence saving throw at the end of each of its turns. On a successful save, the stunning effect ends. -# 323. - *Shapechange* © (M,V,S) level 9 Transmutation [Concentration] [UB] +# 324. - *Shapechange* © (M,V,S) level 9 Transmutation [Concentration] [UB] **[Druid, Wizard]** You assume the form of a different creature for the duration. The new form can be of any creature with a challenge rating equal to your level or lower. -# 324. - *Time Stop* © (V) level 9 Transmutation [UB] +# 325. - *Time Stop* © (V) level 9 Transmutation [UB] **[Sorcerer, Wizard]** You briefly stop the flow of time for everyone but yourself. No time passes for other creatures, while you take 1d4+1 turns in a row, during which you can use actions and move as normal. This spell ends if one of the actions you use during this period, or any effects that you create during this period, affects a creature other than you. -# 325. - *Weird* © (V,S) level 9 Illusion [Concentration] [UB] +# 326. - *Weird* © (V,S) level 9 Illusion [Concentration] [UB] **[Warlock, Wizard]** diff --git a/SolastaUnfinishedBusiness/Translations/de/Spells/Cantrips-de.txt b/SolastaUnfinishedBusiness/Translations/de/Spells/Cantrips-de.txt index 653037e888..008024c458 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Spells/Cantrips-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Spells/Cantrips-de.txt @@ -8,6 +8,8 @@ Condition/&ConditionStarryWispDescription=Der Zustand „Unsichtbar“ kann nich Condition/&ConditionStarryWispTitle=Sternenwisp Condition/&ConditionWrackDescription=Sie können die Aktion „Sprinten“ oder „Ausrücken“ nicht ausführen. Condition/&ConditionWrackTitle=Zerstört +Feature/&PowerCreateBonfireDamageDescription=Jede Kreatur, die sich beim Wirken des Zaubers im Feld des Lagerfeuers befindet, muss einen Rettungswurf für Geschicklichkeit bestehen oder erleidet 1W8 Feuerschaden. Eine Kreatur muss den Rettungswurf auch bestehen, wenn sie das Feld des Lagerfeuers zum ersten Mal in einer Runde betritt oder ihre Runde dort beendet. Der Schaden des Zaubers erhöht sich auf der 5., 11. und 17. Stufe um einen zusätzlichen Würfel. +Feature/&PowerCreateBonfireDamageTitle=Lagerfeuerschaden Feedback/&AdditionalDamageBoomingBladeFormat=Dröhnende Klinge! Feedback/&AdditionalDamageBoomingBladeLine={0} steckt {1} in die Scheide mit der dröhnenden Klinge! (+{2}) Feedback/&AdditionalDamageResonatingStrikeFormat=Grüne Flammenklinge! @@ -16,6 +18,7 @@ Feedback/&AdditionalDamageSunlightBladeFormat=Sonnenbeschienene Klinge! Feedback/&AdditionalDamageSunlightBladeLine={0} erleuchtet {1} mit sonnenbeschienener Klinge! (+{2}) Feedback/&Within5Ft=5 Fuß Feedback/&WithinReach=Erreichen +Proxy/&ProxyCreateBonfireTitle=Feuer Spell/&AcidClawsDescription=Ihre Fingernägel schärfen sich, bereit für einen ätzenden Angriff. Führen Sie einen Nahkampf-Zauberangriff gegen eine Kreatur innerhalb von 1,5 m um Sie herum aus. Bei einem Treffer erleidet das Ziel 1W8 Säureschaden und seine RK wird 1 Runde lang um 1 gesenkt (nicht stapelbar). Spell/&AcidClawsTitle=Säureklauen Spell/&AirBlastDescription=Feuern Sie einen konzentrierten Luftstoß auf Ihr Ziel ab. diff --git a/SolastaUnfinishedBusiness/Translations/de/Spells/Spells04-de.txt b/SolastaUnfinishedBusiness/Translations/de/Spells/Spells04-de.txt index a3609128a5..42aa48e2a6 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Spells/Spells04-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Spells/Spells04-de.txt @@ -37,7 +37,6 @@ Feedback/&AdditionalDamageElementalBaneFormat=Elementarer Fluch! Feedback/&AdditionalDamageElementalBaneLine=Elemental Bane verursacht zusätzlichen Schaden! Feedback/&AdditionalDamageStaggeringSmiteFormat=Atemberaubender Schlag! Feedback/&AdditionalDamageStaggeringSmiteLine={0} fügt {1} durch einen atemberaubenden Schlag mehr Schaden zu (+{2}) -Proxy/&ProxyFaithfulHoundDescription=Treuer Hund, der bei einem Treffer 4W8 Stichschaden verursacht. Proxy/&ProxyFaithfulHoundTitle=Mordenkainens treuer Hund Spell/&AuraOfPerseveranceDescription=Reinigende Energie strahlt von dir in einer Aura mit einem Radius von 9 Metern aus. Bis der Zauber endet, bewegt sich die Aura mit dir, auf dich zentriert. Jede nicht feindliche Kreatur in der Aura, dich eingeschlossen, kann nicht erkranken, ist resistent gegen Giftschäden und hat einen Vorteil bei Rettungswürfen gegen Effekte, die einen der folgenden Zustände verursachen: geblendet, bezaubert, taub, verängstigt, gelähmt, vergiftet und betäubt. Spell/&AuraOfPerseveranceTitle=Aura der Reinheit diff --git a/SolastaUnfinishedBusiness/Translations/en/Spells/Cantrips-en.txt b/SolastaUnfinishedBusiness/Translations/en/Spells/Cantrips-en.txt index d7209a47d1..d6ced630ff 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Spells/Cantrips-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Spells/Cantrips-en.txt @@ -8,6 +8,8 @@ Condition/&ConditionStarryWispDescription=Can't benefit from the Invisible condi Condition/&ConditionStarryWispTitle=Starry Wisp Condition/&ConditionWrackDescription=You are unable to take the dash or disengage action. Condition/&ConditionWrackTitle=Wracked +Feature/&PowerCreateBonfireDamageDescription=Any creature in the bonfire's space when you cast the spell must succeed on a Dexterity saving throw or take 1d8 fire damage. A creature must also make the saving throw when it enters the bonfire's space for the first time on a turn or ends its turn there. The spell's damage increases by an additional die at 5th, 11th and 17th level. +Feature/&PowerCreateBonfireDamageTitle=Bonfire Damage Feedback/&AdditionalDamageBoomingBladeFormat=Booming Blade! Feedback/&AdditionalDamageBoomingBladeLine={0} sheaths {1} with Booming Blade! (+{2}) Feedback/&AdditionalDamageResonatingStrikeFormat=Green-Flame Blade! @@ -16,6 +18,7 @@ Feedback/&AdditionalDamageSunlightBladeFormat=Sunlit Blade! Feedback/&AdditionalDamageSunlightBladeLine={0} illuminates {1} with Sunlit Blade! (+{2}) Feedback/&Within5Ft=5 ft Feedback/&WithinReach=Reach +Proxy/&ProxyCreateBonfireTitle=Bonfire Spell/&AcidClawsDescription=Your fingernails sharpen, ready to deliver a corrosive attack. Make a melee spell attack against one creature within 5 ft of you. On a hit, the target takes 1d8 acid damage and has AC lowered by 1 for 1 round (not stacking). Spell/&AcidClawsTitle=Acid Claws Spell/&AirBlastDescription=Fire a blast of focused air at your target. @@ -26,7 +29,7 @@ Spell/&BoomingBladeDescription=You brandish the weapon used in the spell's casti Spell/&BoomingBladeTitle=Booming Blade Spell/&BurstOfRadianceDescription=Create a brilliant flash of shimmering light, damaging all enemies around you. Spell/&BurstOfRadianceTitle=Word of Radiance -Spell/&CreateBonfireDescription=You create a bonfire on ground that you can see within range. Until the spell ends, the bonfire fills a 5-foot cube. Any creature in the bonfire’s space when you cast the spell must succeed on a Dexterity saving throw or take 1d8 fire damage. A creature must also make the saving throw when it enters the bonfire’s space for the first time on a turn or ends its turn there. The spell's damage increases by an additional die at 5th, 11th and 17th level. +Spell/&CreateBonfireDescription=You create a bonfire on ground that you can see within range. Until the spell ends, the bonfire fills a 5-foot cube. Any creature in the bonfire's space when you cast the spell must succeed on a Dexterity saving throw or take 1d8 fire damage. A creature must also make the saving throw when it enters the bonfire's space for the first time on a turn or ends its turn there. The spell's damage increases by an additional die at 5th, 11th and 17th level. Spell/&CreateBonfireTitle=Create Bonfire Spell/&EnduringStingDescription=You sap the vitality of one creature you can see in range. The target must succeed on a Constitution saving throw or take 1d4 necrotic damage and fall prone. Spell/&EnduringStingTitle=Sapping Sting diff --git a/SolastaUnfinishedBusiness/Translations/en/Spells/Spells04-en.txt b/SolastaUnfinishedBusiness/Translations/en/Spells/Spells04-en.txt index bf9b6f7a9a..938234ebdc 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Spells/Spells04-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Spells/Spells04-en.txt @@ -37,7 +37,6 @@ Feedback/&AdditionalDamageElementalBaneFormat=Elemental Bane! Feedback/&AdditionalDamageElementalBaneLine=Elemental Bane deals extra damage! Feedback/&AdditionalDamageStaggeringSmiteFormat=Staggering Smite! Feedback/&AdditionalDamageStaggeringSmiteLine={0} deals more damage to {1} through a staggering smite (+{2}) -Proxy/&ProxyFaithfulHoundDescription=Faithful Hound that deals 4d8 piercing damage on hit. Proxy/&ProxyFaithfulHoundTitle=Mordenkainen's Faithful Hound Spell/&AuraOfPerseveranceDescription=Purifying energy radiates from you in an aura with a 30-foot radius. Until the spell ends, the aura moves with you, centered on you. Each non-hostile creature in the aura, including you, can't become diseased, has resistance to poison damage, and has advantage on saving throws against effects that cause any of the following conditions: blinded, charmed, deafened, frightened, paralyzed, poisoned, and stunned. Spell/&AuraOfPerseveranceTitle=Aura of Purity diff --git a/SolastaUnfinishedBusiness/Translations/es/Spells/Cantrips-es.txt b/SolastaUnfinishedBusiness/Translations/es/Spells/Cantrips-es.txt index 43323baea2..e34bc1e2bc 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Spells/Cantrips-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Spells/Cantrips-es.txt @@ -8,6 +8,8 @@ Condition/&ConditionStarryWispDescription=No puede beneficiarse de la condición Condition/&ConditionStarryWispTitle=Hilo estrellado Condition/&ConditionWrackDescription=No puedes realizar la acción de guión o desvincularte. Condition/&ConditionWrackTitle=Destrozado +Feature/&PowerCreateBonfireDamageDescription=Cualquier criatura que se encuentre en el espacio de la hoguera cuando lances el conjuro debe superar una tirada de salvación de Destreza o sufrir 1d8 puntos de daño por fuego. Una criatura también debe superar la tirada de salvación cuando entra en el espacio de la hoguera por primera vez en un turno o termina su turno allí. El daño del conjuro aumenta en un dado adicional en los niveles 5, 11 y 17. +Feature/&PowerCreateBonfireDamageTitle=Daño por hoguera Feedback/&AdditionalDamageBoomingBladeFormat=¡Espada en auge! Feedback/&AdditionalDamageBoomingBladeLine=¡{0} envaina {1} con Espada Explosiva! (+{2}) Feedback/&AdditionalDamageResonatingStrikeFormat=¡Espada de llama verde! @@ -16,6 +18,7 @@ Feedback/&AdditionalDamageSunlightBladeFormat=¡Espada iluminada por el sol! Feedback/&AdditionalDamageSunlightBladeLine=¡{0} ilumina a {1} con Sunlit Blade! (+{2}) Feedback/&Within5Ft=5 pies Feedback/&WithinReach=Alcanzar +Proxy/&ProxyCreateBonfireTitle=Hoguera Spell/&AcidClawsDescription=Tus uñas se afilan, listas para lanzar un ataque corrosivo. Realiza un ataque con hechizo cuerpo a cuerpo contra una criatura a 5 pies de ti. Con un golpe, el objetivo sufre 1d8 de daño por ácido y su CA se reduce en 1 durante 1 ronda (no se acumula). Spell/&AcidClawsTitle=Garras ácidas Spell/&AirBlastDescription=Dispara una ráfaga de aire concentrada hacia tu objetivo. diff --git a/SolastaUnfinishedBusiness/Translations/es/Spells/Spells04-es.txt b/SolastaUnfinishedBusiness/Translations/es/Spells/Spells04-es.txt index 72065400cc..a9087d4a17 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Spells/Spells04-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Spells/Spells04-es.txt @@ -37,7 +37,6 @@ Feedback/&AdditionalDamageElementalBaneFormat=¡Perdición elemental! Feedback/&AdditionalDamageElementalBaneLine=¡Elemental Bane inflige daño adicional! Feedback/&AdditionalDamageStaggeringSmiteFormat=¡Golpe asombroso! Feedback/&AdditionalDamageStaggeringSmiteLine={0} inflige más daño a {1} a través de un golpe tambaleante (+{2}) -Proxy/&ProxyFaithfulHoundDescription=Perro fiel que inflige 4d8 de daño perforante al impactar. Proxy/&ProxyFaithfulHoundTitle=El fiel perro de Mordenkainen Spell/&AuraOfPerseveranceDescription=La energía purificadora irradia desde ti en un aura con un radio de 30 pies. Hasta que el conjuro termine, el aura se mueve contigo, centrada en ti. Ninguna criatura no hostil en el aura, incluido tú, puede enfermarse, tiene resistencia al daño por veneno y tiene ventaja en las tiradas de salvación contra efectos que causen cualquiera de las siguientes condiciones: cegado, encantado, ensordecido, asustado, paralizado, envenenado y aturdido. Spell/&AuraOfPerseveranceTitle=Aura de pureza diff --git a/SolastaUnfinishedBusiness/Translations/fr/Spells/Cantrips-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Spells/Cantrips-fr.txt index 46f2f0f745..e423919a68 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Spells/Cantrips-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Spells/Cantrips-fr.txt @@ -8,6 +8,8 @@ Condition/&ConditionStarryWispDescription=Ne peut pas bénéficier de la conditi Condition/&ConditionStarryWispTitle=Feu follet étoilé Condition/&ConditionWrackDescription=Vous ne pouvez pas prendre le tiret ou vous désengager. Condition/&ConditionWrackTitle=Dévasté +Feature/&PowerCreateBonfireDamageDescription=Toute créature présente dans l'emplacement du feu de camp au moment où vous lancez le sort doit réussir un jet de sauvegarde de Dextérité ou subir 1d8 dégâts de feu. Une créature doit également réussir le jet de sauvegarde lorsqu'elle entre dans l'emplacement du feu de camp pour la première fois au cours d'un tour ou lorsqu'elle y termine son tour. Les dégâts du sort augmentent d'un dé supplémentaire aux niveaux 5, 11 et 17. +Feature/&PowerCreateBonfireDamageTitle=Dégâts causés par un feu de joie Feedback/&AdditionalDamageBoomingBladeFormat=Lame en plein essor ! Feedback/&AdditionalDamageBoomingBladeLine={0} fourre {1} avec Booming Blade ! (+{2}) Feedback/&AdditionalDamageResonatingStrikeFormat=Lame de Flamme Verte ! @@ -16,6 +18,7 @@ Feedback/&AdditionalDamageSunlightBladeFormat=Lame ensoleillée ! Feedback/&AdditionalDamageSunlightBladeLine={0} illumine {1} avec Sunlit Blade ! (+{2}) Feedback/&Within5Ft=5 pieds Feedback/&WithinReach=Atteindre +Proxy/&ProxyCreateBonfireTitle=Feu Spell/&AcidClawsDescription=Vos ongles s'aiguisent, prêts à délivrer une attaque corrosive. Lancez une attaque de sort au corps à corps contre une créature à 1,50 m de vous. En cas de succès, la cible subit 1d8 dégâts d'acide et voit sa CA diminuée de 1 pendant 1 round (non cumulable). Spell/&AcidClawsTitle=Griffes acides Spell/&AirBlastDescription=Tirez une bouffée d'air concentrée sur votre cible. diff --git a/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells04-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells04-fr.txt index f53a5d4b28..b78f509eaa 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells04-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells04-fr.txt @@ -37,7 +37,6 @@ Feedback/&AdditionalDamageElementalBaneFormat=Fléau élémentaire ! Feedback/&AdditionalDamageElementalBaneLine=Le fléau élémentaire inflige des dégâts supplémentaires ! Feedback/&AdditionalDamageStaggeringSmiteFormat=Frappe stupéfiante ! Feedback/&AdditionalDamageStaggeringSmiteLine={0} inflige plus de dégâts à {1} grâce à un coup étourdissant (+{2}) -Proxy/&ProxyFaithfulHoundDescription=Chien fidèle qui inflige 4d8 dégâts perforants à l'impact. Proxy/&ProxyFaithfulHoundTitle=Le fidèle chien de Mordenkainen Spell/&AuraOfPerseveranceDescription=Une énergie purificatrice rayonne de vous dans une aura d'un rayon de 9 mètres. Jusqu'à la fin du sort, l'aura se déplace avec vous, centrée sur vous. Chaque créature non hostile dans l'aura, y compris vous, ne peut pas tomber malade, a une résistance aux dégâts de poison et a un avantage aux jets de sauvegarde contre les effets qui provoquent l'une des conditions suivantes : aveuglé, charmé, assourdi, effrayé, paralysé, empoisonné et abasourdi. Spell/&AuraOfPerseveranceTitle=Aura de pureté diff --git a/SolastaUnfinishedBusiness/Translations/it/Spells/Cantrips-it.txt b/SolastaUnfinishedBusiness/Translations/it/Spells/Cantrips-it.txt index 5994bb5818..6d82c01a62 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Spells/Cantrips-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Spells/Cantrips-it.txt @@ -8,6 +8,8 @@ Condition/&ConditionStarryWispDescription=Non può trarre beneficio dalla condiz Condition/&ConditionStarryWispTitle=Ciuffo stellato Condition/&ConditionWrackDescription=Non è possibile eseguire l'azione di scatto o di disattivazione. Condition/&ConditionWrackTitle=Distrutto +Feature/&PowerCreateBonfireDamageDescription=Ogni creatura nello spazio del falò quando lanci l'incantesimo deve superare un tiro salvezza su Destrezza o subire 1d8 danni da fuoco. Una creatura deve anche effettuare il tiro salvezza quando entra nello spazio del falò per la prima volta in un turno o termina il suo turno lì. Il danno dell'incantesimo aumenta di un dado aggiuntivo al 5°, 11° e 17° livello. +Feature/&PowerCreateBonfireDamageTitle=Danni da falò Feedback/&AdditionalDamageBoomingBladeFormat=Lama rimbombante! Feedback/&AdditionalDamageBoomingBladeLine={0} guaine {1} con Lama Rimbombante! (+{2}) Feedback/&AdditionalDamageResonatingStrikeFormat=Lama Fiamma Verde! @@ -16,6 +18,7 @@ Feedback/&AdditionalDamageSunlightBladeFormat=Lama illuminata dal sole! Feedback/&AdditionalDamageSunlightBladeLine={0} illumina {1} con la Lama Illuminata dal Sole! (+{2}) Feedback/&Within5Ft=5 piedi Feedback/&WithinReach=Portata +Proxy/&ProxyCreateBonfireTitle=Falò Spell/&AcidClawsDescription=Le tue unghie si affilano, pronte a sferrare un attacco corrosivo. Effettua un attacco con incantesimo in mischia contro una creatura entro 1,5 metri da te. In caso di colpo, il bersaglio subisce 1d8 danni da acido e ha la CA ridotta di 1 per 1 round (non cumulabile). Spell/&AcidClawsTitle=Artigli acidi Spell/&AirBlastDescription=Spara un getto d'aria concentrato sul tuo bersaglio. diff --git a/SolastaUnfinishedBusiness/Translations/it/Spells/Spells04-it.txt b/SolastaUnfinishedBusiness/Translations/it/Spells/Spells04-it.txt index 98d28ec9ad..16df04bd9a 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Spells/Spells04-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Spells/Spells04-it.txt @@ -37,7 +37,6 @@ Feedback/&AdditionalDamageElementalBaneFormat=Flagello Elementale! Feedback/&AdditionalDamageElementalBaneLine=Elemental Bane infligge danni extra! Feedback/&AdditionalDamageStaggeringSmiteFormat=Colpo sconvolgente! Feedback/&AdditionalDamageStaggeringSmiteLine={0} infligge più danni a {1} tramite un colpo sconcertante (+{2}) -Proxy/&ProxyFaithfulHoundDescription=Segugio fedele che infligge 4d8 danni perforanti quando colpisce. Proxy/&ProxyFaithfulHoundTitle=Il fedele segugio di Mordenkainen Spell/&AuraOfPerseveranceDescription=L'energia purificatrice si irradia da te in un'aura con un raggio di 30 piedi. Finché l'incantesimo non termina, l'aura si muove con te, centrata su di te. Ogni creatura non ostile nell'aura, incluso te, non può ammalarsi, ha resistenza ai danni da veleno e ha vantaggio sui tiri salvezza contro effetti che causano una qualsiasi delle seguenti condizioni: accecato, affascinato, assordato, spaventato, paralizzato, avvelenato e stordito. Spell/&AuraOfPerseveranceTitle=Aura di Purezza diff --git a/SolastaUnfinishedBusiness/Translations/ja/Spells/Cantrips-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Spells/Cantrips-ja.txt index f29052f362..d593cdc430 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Spells/Cantrips-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Spells/Cantrips-ja.txt @@ -8,6 +8,8 @@ Condition/&ConditionStarryWispDescription=不可視状態の恩恵を受ける Condition/&ConditionStarryWispTitle=星のウィスプ Condition/&ConditionWrackDescription=ダッシュしたり、離脱アクションを実行したりすることはできません。 Condition/&ConditionWrackTitle=ひび割れた +Feature/&PowerCreateBonfireDamageDescription=呪文を唱えたときに篝火の空間にいるクリーチャーは、敏捷性セーヴィング スローに成功しなければ 1d8 の火ダメージを受けます。クリーチャーは、ターン中に初めて篝火の空間に入るとき、またはそこでターンを終了するときにもセーヴィング スローを実行する必要があります。呪文のダメージは、レベル 5、11、17 でダイス 1 個ずつ増加します。 +Feature/&PowerCreateBonfireDamageTitle=焚き火のダメージ Feedback/&AdditionalDamageBoomingBladeFormat=ブーミングブレード! Feedback/&AdditionalDamageBoomingBladeLine={0} が Booming Blade で {1} を鞘に収めます! (+{2}) Feedback/&AdditionalDamageResonatingStrikeFormat=緑炎の刃! @@ -16,6 +18,7 @@ Feedback/&AdditionalDamageSunlightBladeFormat=陽光の刃! Feedback/&AdditionalDamageSunlightBladeLine={0} がサンリット ブレードで {1} を照らします! (+{2}) Feedback/&Within5Ft=5フィート Feedback/&WithinReach=到着 +Proxy/&ProxyCreateBonfireTitle=焚き火 Spell/&AcidClawsDescription=あなたの爪は鋭くなり、腐食攻撃を仕掛ける準備が整います。あなたの周囲 5 フィート以内にいる 1 体のクリーチャーに対して近接呪文攻撃を行います。命中すると、ターゲットは 1d8 の酸ダメージを受け、1 ラウンドの間、アーマー クラスが 1 低下します (重複しません)。 Spell/&AcidClawsTitle=アシッドクロー Spell/&AirBlastDescription=ターゲットに向かって集中した空気を発射します。 diff --git a/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells04-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells04-ja.txt index 30b143ff24..209acdd48c 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells04-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells04-ja.txt @@ -37,7 +37,6 @@ Feedback/&AdditionalDamageElementalBaneFormat=エレメンタルベイン! Feedback/&AdditionalDamageElementalBaneLine=エレメンタルベインは追加の ダメージを与えます。 Feedback/&AdditionalDamageStaggeringSmiteFormat=驚異のスマイト! Feedback/&AdditionalDamageStaggeringSmiteLine={0} は驚異的な打撃により {1} にさらに多くのダメージを与えます (+{2}) -Proxy/&ProxyFaithfulHoundDescription=ヒット時に4d8の貫通ダメージを与える忠実な猟犬。 Proxy/&ProxyFaithfulHoundTitle=モルデンカイネンの忠実な猟犬 Spell/&AuraOfPerseveranceDescription=浄化のエネルギーがあなたから半径 30 フィートのオーラとして放射されます。呪文が終わるまで、オーラはあなたを中心としてあなたと一緒に移動します。あなたを含め、オーラ内の非敵対的なクリーチャーは病気になることがなく、毒ダメージに対する耐性があり、次の状態のいずれかを引き起こす効果に対してセーヴィング スローで有利になります: 盲目、魅惑、聴覚障害、恐怖、麻痺、毒を盛られて気絶した。 Spell/&AuraOfPerseveranceTitle=純粋さのオーラ diff --git a/SolastaUnfinishedBusiness/Translations/ko/Spells/Cantrips-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Spells/Cantrips-ko.txt index 8f00cfbb17..a250c9ffc4 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Spells/Cantrips-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Spells/Cantrips-ko.txt @@ -8,6 +8,8 @@ Condition/&ConditionStarryWispDescription=투명 상태의 이점을 누릴 수 Condition/&ConditionStarryWispTitle=별이 빛나는 위습 Condition/&ConditionWrackDescription=대시를 하거나 해제 조치를 취할 수 없습니다. Condition/&ConditionWrackTitle=망가진 +Feature/&PowerCreateBonfireDamageDescription=주문을 시전할 때 모닥불 공간에 있는 모든 생물은 민첩성 구원 굴림에 성공해야 하며, 그렇지 않으면 1d8의 화염 피해를 입습니다. 생물은 또한 모닥불 공간에 처음으로 들어가거나 그곳에서 턴을 마칠 때 구원 굴림을 해야 합니다. 주문의 피해는 5, 11, 17레벨에서 주사위가 하나 더 늘어납니다. +Feature/&PowerCreateBonfireDamageTitle=모닥불 피해 Feedback/&AdditionalDamageBoomingBladeFormat=부밍 블레이드! Feedback/&AdditionalDamageBoomingBladeLine=Booming Blade로 {0}이 {1}을(를) 덮었습니다! (+{2}) Feedback/&AdditionalDamageResonatingStrikeFormat=녹색 불꽃 블레이드! @@ -16,6 +18,7 @@ Feedback/&AdditionalDamageSunlightBladeFormat=선라이트 블레이드! Feedback/&AdditionalDamageSunlightBladeLine={0}가 Sunlit Blade로 {1}을(를) 비춥니다! (+{2}) Feedback/&Within5Ft=5 피트 Feedback/&WithinReach=도달하다 +Proxy/&ProxyCreateBonfireTitle=모닥불 Spell/&AcidClawsDescription=손톱이 날카로워져 부식성 공격을 가할 준비가 되었습니다. 당신으로부터 5피트 내의 생물 하나에 대해 근접 주문 공격을 가하십시오. 적중 시 대상은 1d8의 산성 피해를 입고 방어구 등급이 1라운드 동안 1만큼 낮아집니다(중첩되지 않음). Spell/&AcidClawsTitle=산성 발톱 Spell/&AirBlastDescription=목표물에 집중된 공기를 발사합니다. diff --git a/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells04-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells04-ko.txt index 8aa9846ba7..b078c7db65 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells04-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells04-ko.txt @@ -37,7 +37,6 @@ Feedback/&AdditionalDamageElementalBaneFormat=엘리멘탈 베인! Feedback/&AdditionalDamageElementalBaneLine=원소의 베인은 추가로 의 피해를 입힙니다! Feedback/&AdditionalDamageStaggeringSmiteFormat=스태킹 스마이트! Feedback/&AdditionalDamageStaggeringSmiteLine={0}는 엄청난 강타(+{2})를 통해 {1}에 더 많은 피해를 입힙니다. -Proxy/&ProxyFaithfulHoundDescription=적중 시 4d8의 관통 피해를 주는 충실한 사냥개입니다. Proxy/&ProxyFaithfulHoundTitle=모덴카이넨의 충실한 사냥개 Spell/&AuraOfPerseveranceDescription=정화 에너지는 반경 30피트의 오라로 당신에게서 방출됩니다. 주문이 끝날 때까지 오라는 당신을 중심으로 당신과 함께 움직입니다. 당신을 포함하여 오라에 있는 적대적이지 않은 각 생물은 질병에 걸릴 수 없으며, 독 피해에 대한 저항력을 갖고 있으며, 다음 조건 중 하나를 유발하는 효과에 대한 내성 굴림에 이점이 있습니다. 중독되어 기절했습니다. Spell/&AuraOfPerseveranceTitle=순수의 오라 diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Cantrips-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Cantrips-pt-BR.txt index f09b0e1352..3fa1dd675b 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Cantrips-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Cantrips-pt-BR.txt @@ -8,6 +8,8 @@ Condition/&ConditionStarryWispDescription=Não é possível se beneficiar da con Condition/&ConditionStarryWispTitle=Fogo-fátuo estrelado Condition/&ConditionWrackDescription=Você não consegue realizar a ação de correr ou desengatar. Condition/&ConditionWrackTitle=Destruído +Feature/&PowerCreateBonfireDamageDescription=Qualquer criatura no espaço da fogueira quando você conjurar a magia deve ter sucesso em um teste de resistência de Destreza ou sofrer 1d8 de dano de fogo. Uma criatura também deve fazer o teste de resistência quando entrar no espaço da fogueira pela primeira vez em um turno ou terminar seu turno lá. O dano da magia aumenta em um dado adicional no 5º, 11º e 17º nível. +Feature/&PowerCreateBonfireDamageTitle=Dano de fogueira Feedback/&AdditionalDamageBoomingBladeFormat=Lâmina estrondosa! Feedback/&AdditionalDamageBoomingBladeLine={0} bainhas {1} com Lâmina Explosiva! (+{2}) Feedback/&AdditionalDamageResonatingStrikeFormat=Lâmina de Chama Verde! @@ -16,6 +18,7 @@ Feedback/&AdditionalDamageSunlightBladeFormat=Lâmina iluminada pelo sol! Feedback/&AdditionalDamageSunlightBladeLine={0} ilumina {1} com Sunlit Blade! (+{2}) Feedback/&Within5Ft=5 pés Feedback/&WithinReach=Alcançar +Proxy/&ProxyCreateBonfireTitle=Fogueira Spell/&AcidClawsDescription=Suas unhas afiam, prontas para desferir um ataque corrosivo. Faça um ataque de magia corpo a corpo contra uma criatura a até 5 pés de você. Em um acerto, o alvo recebe 1d8 de dano ácido e tem CA reduzida em 1 por 1 rodada (não acumula). Spell/&AcidClawsTitle=Garras Ácidas Spell/&AirBlastDescription=Dispare uma rajada de ar concentrada em seu alvo. diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells04-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells04-pt-BR.txt index 60c14f21c6..55201aca01 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells04-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells04-pt-BR.txt @@ -37,7 +37,6 @@ Feedback/&AdditionalDamageElementalBaneFormat=Maldição Elemental! Feedback/&AdditionalDamageElementalBaneLine=Elemental Bane causa dano extra! Feedback/&AdditionalDamageStaggeringSmiteFormat=Golpe Escalonante! Feedback/&AdditionalDamageStaggeringSmiteLine={0} causa mais dano a {1} por meio de um golpe impressionante (+{2}) -Proxy/&ProxyFaithfulHoundDescription=Cão Fiel que causa 4d8 de dano perfurante ao acertar. Proxy/&ProxyFaithfulHoundTitle=O fiel cão de caça de Mordenkainen Spell/&AuraOfPerseveranceDescription=Energia purificadora irradia de você em uma aura com um raio de 30 pés. Até que a magia termine, a aura se move com você, centralizada em você. Cada criatura não hostil na aura, incluindo você, não pode ficar doente, tem resistência a dano de veneno e tem vantagem em testes de resistência contra efeitos que causam qualquer uma das seguintes condições: cego, encantado, surdo, assustado, paralisado, envenenado e atordoado. Spell/&AuraOfPerseveranceTitle=Aura de Pureza diff --git a/SolastaUnfinishedBusiness/Translations/ru/Spells/Cantrips-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Spells/Cantrips-ru.txt index 1520604150..20ed2d0662 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Spells/Cantrips-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Spells/Cantrips-ru.txt @@ -8,6 +8,8 @@ Condition/&ConditionStarryWispDescription=Не получает преимуще Condition/&ConditionStarryWispTitle=Отблеск звезды Condition/&ConditionWrackDescription=Вы не можете совершать действия Рывок или Отход. Condition/&ConditionWrackTitle=Измучен +Feature/&PowerCreateBonfireDamageDescription=Любое существо в пространстве костра, когда вы произносите заклинание, должно преуспеть в спасброске Ловкости или получить 1d8 урона от огня. Существо также должно сделать спасбросок, когда оно впервые за ход входит в пространство костра или заканчивает там свой ход. Урон заклинания увеличивается на дополнительный кубик на 5-м, 11-м и 17-м уровнях. +Feature/&PowerCreateBonfireDamageTitle=Ущерб от пожара Feedback/&AdditionalDamageBoomingBladeFormat=Громовой клинок! Feedback/&AdditionalDamageBoomingBladeLine={0} покрывает {1} энергией Громового клинка! (+{2}) Feedback/&AdditionalDamageResonatingStrikeFormat=Клинок зелёного пламени! @@ -16,6 +18,7 @@ Feedback/&AdditionalDamageSunlightBladeFormat=Освещённый солнце Feedback/&AdditionalDamageSunlightBladeLine={0} озаряет {1} Освещённым солнцем клинком! (+{2}) Feedback/&Within5Ft=5 футов Feedback/&WithinReach=Досягаемость +Proxy/&ProxyCreateBonfireTitle=Костер Spell/&AcidClawsDescription=Ваши ногти заостряются, и вы готовитесь совершить едкую атаку. Совершите рукопашную атаку заклинанием по одному существу в радиусе 5 футов от вас. При попадании цель получает 1d8 урона кислотой, а её КД снижается на 1 в течение одного раунда (не стакается). Spell/&AcidClawsTitle=Кислотные когти Spell/&AirBlastDescription=Выстрелите в цель сфокусированным потоком воздуха. diff --git a/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells04-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells04-ru.txt index 1ffcb2a437..22b2c6cc2c 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells04-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells04-ru.txt @@ -37,7 +37,6 @@ Feedback/&AdditionalDamageElementalBaneFormat=Проклятье стихий! Feedback/&AdditionalDamageElementalBaneLine=Проклятье стихий наносит дополнительный урон! Feedback/&AdditionalDamageStaggeringSmiteFormat=Оглушающая кара! Feedback/&AdditionalDamageStaggeringSmiteLine={0} наносит больше урона {1} с помощью оглушающей кары (+{2}) -Proxy/&ProxyFaithfulHoundDescription=Верный пёс, который наносит 4d8 колющего урона при попадании. Proxy/&ProxyFaithfulHoundTitle=Верный пёс Морденкайнена Spell/&AuraOfPerseveranceDescription=От вас исходит очищающая аура с радиусом 30 футов. Пока заклинание активно, аура перемещается вместе с вами, оставаясь с центром на вас. Все невраждебные существа в ауре, включая вас, не могут заболеть, имеют сопротивление урону ядом и совершают с преимуществом спасброски от эффектов, вызывающих следующие состояния: глухота, испуг, ослепление, отравление, очарование, ошеломление и паралич. Spell/&AuraOfPerseveranceTitle=Аура очищения diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Cantrips-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Cantrips-zh-CN.txt index e9ab3c5bb5..04dca99f46 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Cantrips-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Cantrips-zh-CN.txt @@ -8,6 +8,8 @@ Condition/&ConditionStarryWispDescription=无法从隐形状态中受益。 Condition/&ConditionStarryWispTitle=点点星芒 Condition/&ConditionWrackDescription=你无法进行冲刺或脱离动作。 Condition/&ConditionWrackTitle=伤痕累累 +Feature/&PowerCreateBonfireDamageDescription=施放法术时,篝火空间中的任何生物都必须成功进行敏捷豁免,否则将受到 1d8 火焰伤害。生物在回合中第一次进入篝火空间或在那里结束回合时也必须进行豁免。法术的伤害在第 5、11 和 17 级时增加一个额外的骰子。 +Feature/&PowerCreateBonfireDamageTitle=篝火伤害 Feedback/&AdditionalDamageBoomingBladeFormat=轰雷剑! Feedback/&AdditionalDamageBoomingBladeLine={0} 用轰雷剑轰击 {1}! (+{2}) Feedback/&AdditionalDamageResonatingStrikeFormat=灼焰剑! @@ -16,6 +18,7 @@ Feedback/&AdditionalDamageSunlightBladeFormat=耀阳剑! Feedback/&AdditionalDamageSunlightBladeLine={0} 用耀阳剑照亮 {1}! (+{2}) Feedback/&Within5Ft=5 英尺 Feedback/&WithinReach=抵达 +Proxy/&ProxyCreateBonfireTitle=篝火 Spell/&AcidClawsDescription=你的指甲变尖了,准备好进行腐蚀性攻击。对距离你 5 尺以内的一个生物进行一次近战法术攻击。命中时,目标会受到 1d8 强酸伤害,并且护甲等级降低 1,持续 1 轮(不叠加)。 Spell/&AcidClawsTitle=酸爪 Spell/&AirBlastDescription=向你的目标发射一股聚焦空气。 diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells04-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells04-zh-CN.txt index 593cf4f4cd..5a3b142799 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells04-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells04-zh-CN.txt @@ -37,7 +37,6 @@ Feedback/&AdditionalDamageElementalBaneFormat=元素祸害! Feedback/&AdditionalDamageElementalBaneLine=元素灾厄造成额外伤害! Feedback/&AdditionalDamageStaggeringSmiteFormat=惊惧斩! Feedback/&AdditionalDamageStaggeringSmiteLine={0} 通过惊惧斩对 {1} 造成更多伤害 (+{2}) -Proxy/&ProxyFaithfulHoundDescription=忠实的猎犬击中时造成 4d8 穿刺伤害。 Proxy/&ProxyFaithfulHoundTitle=魔邓肯忠犬 Spell/&AuraOfPerseveranceDescription=你身上散发出半径 30 尺的灵光,具有净化能量。直到法术结束前,灵光会随着你移动,以你为中心。灵光中的每个非敌对生物(包括你)都不会患病,对毒素伤害有抗性,并且在对抗导致以下任何情况的效果时具有优势:目盲、魅惑、耳聋、恐慌、失能、中毒,昏迷。 Spell/&AuraOfPerseveranceTitle=净化灵光 From 2dc8b369adc0b0798ed37632df18d7706746f4b6 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Fri, 13 Sep 2024 17:59:50 -0700 Subject: [PATCH 151/212] add Create Bonfire cantrip --- .../ChangelogHistory.txt | 3 +- SolastaUnfinishedBusiness/Displays/_ModUi.cs | 1 + .../Interfaces/ICharacterBattleListeners.cs | 7 + .../Models/SpellsContext.cs | 4 +- .../Patches/CharacterActionPatcher.cs | 6 +- .../GameLocationBattleManagerPatcher.cs | 3 + .../Spells/SpellBuildersCantrips.cs | 201 ++++++++++++++++++ 7 files changed, 221 insertions(+), 4 deletions(-) diff --git a/SolastaUnfinishedBusiness/ChangelogHistory.txt b/SolastaUnfinishedBusiness/ChangelogHistory.txt index 181425c1d0..82a2fa2bb5 100644 --- a/SolastaUnfinishedBusiness/ChangelogHistory.txt +++ b/SolastaUnfinishedBusiness/ChangelogHistory.txt @@ -1,7 +1,8 @@ 1.5.97.30: -- added Command, Dissonant Whispers, Holy Weapon, and Swift Quiver spells +- added Create Bonfire, Command, Dissonant Whispers, Holy Weapon, and Swift Quiver spells - added Character > General 'Add the Fall Prone action to all playable races' +- added Character > Rules > 'Allow allies to perceive Ranger GloomStalker when in natural darkness' - added Character > Rules > 'Enable push and pull motion effects to also work on up/down axis' - added Interface > Dungeon Maker > 'Enable variable placeholders on descriptions' - added Interface > Game UI > 'Enable CTRL click-drag to bypass quest items checks on drop' diff --git a/SolastaUnfinishedBusiness/Displays/_ModUi.cs b/SolastaUnfinishedBusiness/Displays/_ModUi.cs index b13b3d0dd5..a335b5905d 100644 --- a/SolastaUnfinishedBusiness/Displays/_ModUi.cs +++ b/SolastaUnfinishedBusiness/Displays/_ModUi.cs @@ -61,6 +61,7 @@ internal static class ModUi "CollegeOfLife", "CollegeOfValiance", "CommandSpell", + "CreateBonfire", "CrownOfStars", "CrusadersMantle", "Dawn", diff --git a/SolastaUnfinishedBusiness/Interfaces/ICharacterBattleListeners.cs b/SolastaUnfinishedBusiness/Interfaces/ICharacterBattleListeners.cs index 8e365f0930..935c3bb8c1 100644 --- a/SolastaUnfinishedBusiness/Interfaces/ICharacterBattleListeners.cs +++ b/SolastaUnfinishedBusiness/Interfaces/ICharacterBattleListeners.cs @@ -2,6 +2,7 @@ using JetBrains.Annotations; using SolastaUnfinishedBusiness.Api; using SolastaUnfinishedBusiness.Api.GameExtensions; +using SolastaUnfinishedBusiness.Spells; namespace SolastaUnfinishedBusiness.Interfaces; @@ -78,6 +79,9 @@ public static void OnCharacterTurnStarted(GameLocationCharacter locationCharacte return; } + //PATCH: supports Create Bonfire cantrip + SpellBuilders.HandleCreateBonfireBehavior(locationCharacter); + //PATCH: supports EnableMonkDoNotRequireAttackActionForBonusUnarmoredAttack if (Main.Settings.EnableMonkDoNotRequireAttackActionForBonusUnarmoredAttack && rulesetCharacter.GetClassLevel(DatabaseHelper.CharacterClassDefinitions.Monk) > 0) @@ -119,6 +123,9 @@ public static void OnCharacterTurnEnded(GameLocationCharacter locationCharacter) return; } + //PATCH: supports Create Bonfire cantrip + SpellBuilders.HandleCreateBonfireBehavior(locationCharacter, false); + var listeners = rulesetCharacter.GetSubFeaturesByType(); foreach (var listener in listeners) diff --git a/SolastaUnfinishedBusiness/Models/SpellsContext.cs b/SolastaUnfinishedBusiness/Models/SpellsContext.cs index 152badea8d..52d3442303 100644 --- a/SolastaUnfinishedBusiness/Models/SpellsContext.cs +++ b/SolastaUnfinishedBusiness/Models/SpellsContext.cs @@ -241,9 +241,9 @@ internal static void LateLoad() RegisterSpell(BuildBoomingBlade(), 0, SpellListSorcerer, SpellListWarlock, SpellListWizard, spellListInventorClass); RegisterSpell(BurstOfRadiance, 0, SpellListCleric); - // RegisterSpell(BuildEgoShock(), 0, SpellListBard, SpellListSorcerer, SpellListWarlock, SpellListWizard); + RegisterSpell(BuildCreateBonfire(), 0, SpellListDruid, SpellListSorcerer, SpellListWarlock, SpellListWizard, + spellListInventorClass); RegisterSpell(EnduringSting, 0, SpellListWizard); - // RegisterSpell(BuildForceStrike(), 0, SpellListSorcerer, SpellListWarlock, SpellListWizard, spellListInventorClass); RegisterSpell(BuildIlluminatingSphere(), 0, SpellListBard, SpellListSorcerer, SpellListWizard); RegisterSpell(BuildInfestation(), 0, SpellListDruid, SpellListSorcerer, SpellListWarlock, SpellListWizard); RegisterSpell(BuildLightningLure(), 0, SpellListSorcerer, SpellListWarlock, SpellListWizard, diff --git a/SolastaUnfinishedBusiness/Patches/CharacterActionPatcher.cs b/SolastaUnfinishedBusiness/Patches/CharacterActionPatcher.cs index bbfe811371..cca9186dd3 100644 --- a/SolastaUnfinishedBusiness/Patches/CharacterActionPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/CharacterActionPatcher.cs @@ -12,6 +12,7 @@ using SolastaUnfinishedBusiness.Feats; using SolastaUnfinishedBusiness.Interfaces; using SolastaUnfinishedBusiness.Models; +using SolastaUnfinishedBusiness.Spells; using SolastaUnfinishedBusiness.Subclasses; using static RuleDefinitions; @@ -239,12 +240,15 @@ public static IEnumerator Postfix(IEnumerator values, CharacterAction __instance } } - //PATCH: support for Circle of the Wildfire cauterizing flames if (__instance is CharacterActionShove) { foreach (var targetCharacter in __instance.ActionParams.TargetCharacters) { + //PATCH: support for Circle of the Wildfire cauterizing flames yield return CircleOfTheWildfire.HandleCauterizingFlamesBehavior(targetCharacter); + + //PATCH: supports Create Bonfire cantrip + SpellBuilders.HandleCreateBonfireBehavior(targetCharacter); } } diff --git a/SolastaUnfinishedBusiness/Patches/GameLocationBattleManagerPatcher.cs b/SolastaUnfinishedBusiness/Patches/GameLocationBattleManagerPatcher.cs index e2ec78e2be..c6a1769cdc 100644 --- a/SolastaUnfinishedBusiness/Patches/GameLocationBattleManagerPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/GameLocationBattleManagerPatcher.cs @@ -317,6 +317,9 @@ public static IEnumerator Postfix( //PATCH: support for Circle of Wildfire proxies yield return CircleOfTheWildfire.HandleCauterizingFlamesBehavior(mover); + //PATCH: support for Create Bonfire proxies + SpellBuilders.HandleCreateBonfireBehavior(mover); + //PATCH: set cursor to dirty and reprocess valid positions if ally was moved by Gambit or Warlord if (mover.IsMyTurn() || mover.Side != Side.Ally) { diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs index df1719d21b..84b65fe01f 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs @@ -1,5 +1,6 @@ using System.Collections; using System.Collections.Generic; +using System.Linq; using SolastaUnfinishedBusiness.Api.GameExtensions; using SolastaUnfinishedBusiness.Api.Helpers; using SolastaUnfinishedBusiness.Behaviors; @@ -914,6 +915,206 @@ public IEnumerator OnActionFinishedByMe(CharacterAction action) #endregion + #region Create Bonfire + + private static readonly ConditionDefinition ConditionCreateBonfireMark = ConditionDefinitionBuilder + .Create("ConditionCreateBonfireMark") + .SetGuiPresentationNoContent(true) + .SetSilent(Silent.WhenAddedOrRemoved) + .SetSpecialInterruptions(ConditionInterruption.AnyBattleTurnEnd) + .AddToDB(); + + private static readonly FeatureDefinitionPower PowerCreateBonfireDamage = FeatureDefinitionPowerBuilder + .Create("PowerCreateBonfireDamage") + .SetGuiPresentation(Category.Feature, hidden: true) + .SetUsesFixed(ActivationTime.NoCost) + .SetShowCasting(false) + .SetEffectDescription( + EffectDescriptionBuilder + .Create() + .SetDurationData(DurationType.Round) + .SetTargetingData(Side.All, RangeType.Distance, 6, TargetType.IndividualsUnique) + .SetEffectAdvancement(EffectIncrementMethod.CasterLevelTable, additionalDicePerIncrement: 1) + .SetSavingThrowData(false, AttributeDefinitions.Dexterity, false, + EffectDifficultyClassComputation.SpellCastingFeature) + .SetEffectForms( + EffectFormBuilder + .Create() + .HasSavingThrow(EffectSavingThrowType.Negates) + .SetDamageForm(DamageTypeFire, 1, DieType.D8) + .Build()) + .SetImpactEffectParameters(FireBolt) + .Build()) + .AddCustomSubFeatures(new CustomBehaviorCreateBonfireDamage()) + .AddToDB(); + + private static readonly EffectProxyDefinition EffectProxyCreateBonfire = EffectProxyDefinitionBuilder + .Create(EffectProxyDefinitions.ProxyDancingLights, "ProxyCreateBonfire") + .SetOrUpdateGuiPresentation(Category.Proxy) + .SetCanMove(false, false) + .SetAdditionalFeatures() + .AddToDB(); + + internal static SpellDefinition BuildCreateBonfire() + { + const string NAME = "CreateBonfire"; + + EffectProxyCreateBonfire.actionId = Id.NoAction; + EffectProxyCreateBonfire.addLightSource = false; + EffectProxyCreateBonfire.GuiPresentation.description = Gui.NoLocalization; + + var spell = SpellDefinitionBuilder + .Create(NAME) + .SetGuiPresentation(Category.Spell, Sprites.GetSprite(NAME, Resources.CreateBonfire, 128)) + .SetSchoolOfMagic(SchoolOfMagicDefinitions.SchoolConjuration) + .SetSpellLevel(0) + .SetCastingTime(ActivationTime.Action) + .SetMaterialComponent(MaterialComponentType.None) + .SetVerboseComponent(true) + .SetSomaticComponent(true) + .SetVocalSpellSameType(VocalSpellSemeType.Attack) + .SetEffectDescription( + EffectDescriptionBuilder + .Create() + .SetDurationData(DurationType.Minute, 1) + .SetTargetingData(Side.Enemy, RangeType.Distance, 12, TargetType.Position) + .SetEffectAdvancement(EffectIncrementMethod.CasterLevelTable, additionalDicePerIncrement: 1) + .SetSavingThrowData(false, AttributeDefinitions.Dexterity, false, + EffectDifficultyClassComputation.SpellCastingFeature) + .RollSaveOnlyIfRelevantForms() + .SetEffectForms( + EffectFormBuilder + .Create() + .SetSummonEffectProxyForm(EffectProxyCreateBonfire) + .Build(), + EffectFormBuilder + .Create() + .SetTopologyForm(TopologyForm.Type.DangerousZone, true) + .Build()) + .SetCasterEffectParameters(ProduceFlame) + .Build()) + .AddCustomSubFeatures(new PowerOrSpellFinishedByMeCreateBonfire()) + .AddToDB(); + + return spell; + } + + private sealed class CustomBehaviorCreateBonfireDamage : IModifyEffectDescription, IPowerOrSpellFinishedByMe + { + public bool IsValid(BaseDefinition definition, RulesetCharacter character, EffectDescription effectDescription) + { + return definition == PowerCreateBonfireDamage; + } + + public EffectDescription GetEffectDescription( + BaseDefinition definition, + EffectDescription effectDescription, + RulesetCharacter character, + RulesetEffect rulesetEffect) + { + var diceNumber = character.TryGetAttributeValue(AttributeDefinitions.CharacterLevel) switch + { + >= 17 => 3, + >= 11 => 2, + >= 5 => 1, + _ => 0 + }; + + var damageForm = effectDescription.EffectForms[0].DamageForm; + + damageForm.DiceNumber = diceNumber; + + return effectDescription; + } + + public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, BaseDefinition baseDefinition) + { + if (action.SaveOutcome is RollOutcome.Success or RollOutcome.CriticalSuccess) + { + yield break; + } + + var rulesetCaster = action.ActingCharacter.RulesetCharacter; + var rulesetTarget = action.ActionParams.TargetCharacters[0].RulesetCharacter; + + rulesetCaster.InflictCondition( + ConditionCreateBonfireMark.Name, + DurationType.Round, + 0, + TurnOccurenceType.EndOfTurn, + AttributeDefinitions.TagStatus, + rulesetTarget.Guid, + rulesetTarget.CurrentFaction.Name, + 1, + ConditionCreateBonfireMark.Name, + 0, + 0, + 0); + } + } + + private sealed class PowerOrSpellFinishedByMeCreateBonfire : IPowerOrSpellFinishedByMe + { + public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, BaseDefinition baseDefinition) + { + var locationCharacterService = ServiceRepository.GetService(); + var contenders = + (Gui.Battle?.AllContenders ?? + locationCharacterService.PartyCharacters.Union(locationCharacterService.GuestCharacters)) + .ToList(); + + var target = contenders.FirstOrDefault(x => + x.LocationPosition == action.ActionParams.Positions[0]); + + if (target != null) + { + HandleCreateBonfireBehavior(target); + } + + yield break; + } + } + + internal static void HandleCreateBonfireBehavior(GameLocationCharacter character, bool checkCondition = true) + { + var battleManager = ServiceRepository.GetService() as GameLocationBattleManager; + + if (!battleManager) + { + return; + } + + var locationCharacterService = ServiceRepository.GetService(); + var bonfireProxy = locationCharacterService.AllProxyCharacters + .FirstOrDefault(u => + character.LocationPosition == u.LocationPosition && + u.RulesetCharacter is RulesetCharacterEffectProxy rulesetCharacterEffectProxy && + rulesetCharacterEffectProxy.EffectProxyDefinition == EffectProxyCreateBonfire); + + if (bonfireProxy == null) + { + return; + } + + var rulesetProxy = bonfireProxy.RulesetCharacter as RulesetCharacterEffectProxy; + var rulesetSource = EffectHelpers.GetCharacterByGuid(rulesetProxy!.ControllerGuid); + + if (checkCondition && + character.RulesetCharacter.TryGetConditionOfCategoryAndType( + AttributeDefinitions.TagEffect, ConditionCreateBonfireMark.Name, out var activeCondition) && + activeCondition.SourceGuid == rulesetSource.Guid) + { + return; + } + + var source = GameLocationCharacter.GetFromActor(rulesetSource); + var usablePower = PowerProvider.Get(PowerCreateBonfireDamage, rulesetSource); + + source.MyExecuteActionSpendPower(usablePower, false, character); + } + + #endregion + #region Resonating Strike internal static SpellDefinition BuildResonatingStrike() From f41c9e8e689c1ae074b8a2fe0ea896ff9a7a1462 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Fri, 13 Sep 2024 18:00:03 -0700 Subject: [PATCH 152/212] minor tweaks --- SolastaUnfinishedBusiness/Spells/SpellBuildersLevel04.cs | 2 +- SolastaUnfinishedBusiness/Subclasses/CircleOfTheWildfire.cs | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel04.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel04.cs index 38071b3a52..cd16c0993f 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel04.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel04.cs @@ -89,7 +89,7 @@ internal static SpellDefinition BuildFaithfulHound() var proxyFaithfulHound = EffectProxyDefinitionBuilder .Create(EffectProxyDefinitions.ProxyArcaneSword, $"Proxy{NAME}") - .SetGuiPresentation(Category.Proxy, sprite) + .SetGuiPresentation(Category.Proxy, Gui.NoLocalization, sprite) .SetPortrait(sprite) .SetActionId(ExtraActionId.ProxyHoundWeapon) .SetAttackMethod(ProxyAttackMethod.CasterSpellAbility, DamageTypePiercing, DieType.D8, 4) diff --git a/SolastaUnfinishedBusiness/Subclasses/CircleOfTheWildfire.cs b/SolastaUnfinishedBusiness/Subclasses/CircleOfTheWildfire.cs index 634069dcd7..8727c52f16 100644 --- a/SolastaUnfinishedBusiness/Subclasses/CircleOfTheWildfire.cs +++ b/SolastaUnfinishedBusiness/Subclasses/CircleOfTheWildfire.cs @@ -38,6 +38,7 @@ public sealed class CircleOfTheWildfire : AbstractSubclass .Create(EffectProxyDefinitions.ProxyDancingLights, $"Proxy{Name}CauterizingFlames") .SetOrUpdateGuiPresentation($"Power{Name}SummonCauterizingFlames", Category.Feature) .SetCanMove(false, false) + .SetAdditionalFeatures() .AddToDB(); private static readonly FeatureDefinitionPower PowerCauterizingFlames = From 2c246fa5aa32406b88774b6151a1011f42edb28c Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Fri, 13 Sep 2024 18:11:16 -0700 Subject: [PATCH 153/212] fix bonfire and wildfire behaviors to ignore self --- SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs | 4 +++- SolastaUnfinishedBusiness/Subclasses/CircleOfTheWildfire.cs | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs index 84b65fe01f..2b1b446671 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs @@ -1079,7 +1079,9 @@ internal static void HandleCreateBonfireBehavior(GameLocationCharacter character { var battleManager = ServiceRepository.GetService() as GameLocationBattleManager; - if (!battleManager) + if (!battleManager || + (character.RulesetCharacter is RulesetCharacterEffectProxy proxy && + proxy.EffectProxyDefinition == EffectProxyCreateBonfire)) { return; } diff --git a/SolastaUnfinishedBusiness/Subclasses/CircleOfTheWildfire.cs b/SolastaUnfinishedBusiness/Subclasses/CircleOfTheWildfire.cs index 8727c52f16..4205935970 100644 --- a/SolastaUnfinishedBusiness/Subclasses/CircleOfTheWildfire.cs +++ b/SolastaUnfinishedBusiness/Subclasses/CircleOfTheWildfire.cs @@ -489,7 +489,9 @@ internal static IEnumerator HandleCauterizingFlamesBehavior(GameLocationCharacte { var battleManager = ServiceRepository.GetService() as GameLocationBattleManager; - if (!battleManager) + if (!battleManager || + (character.RulesetCharacter is RulesetCharacterEffectProxy proxy && + proxy.EffectProxyDefinition == EffectProxyCauterizingFlames)) { yield break; } From 78b4103d8f2af6846f81ba30ee4ee4ea6123a077 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Fri, 13 Sep 2024 19:47:50 -0700 Subject: [PATCH 154/212] add Magic Stone cantrip skeleton code --- SolastaUnfinishedBusiness/Displays/_ModUi.cs | 1 + .../Models/SpellsContext.cs | 1 + .../Properties/Resources.Designer.cs | 10 ++++ .../Properties/Resources.resx | 5 ++ .../Resources/Spells/MagicStone.png | Bin 0 -> 13899 bytes .../Spells/SpellBuildersCantrips.cs | 43 ++++++++++++++++++ .../Translations/de/Spells/Cantrips-de.txt | 2 + .../Translations/en/Spells/Cantrips-en.txt | 2 + .../Translations/es/Spells/Cantrips-es.txt | 2 + .../Translations/fr/Spells/Cantrips-fr.txt | 2 + .../Translations/it/Spells/Cantrips-it.txt | 2 + .../Translations/ja/Spells/Cantrips-ja.txt | 2 + .../Translations/ko/Spells/Cantrips-ko.txt | 2 + .../pt-BR/Spells/Cantrips-pt-BR.txt | 2 + .../Translations/ru/Spells/Cantrips-ru.txt | 2 + .../zh-CN/Spells/Cantrips-zh-CN.txt | 2 + 16 files changed, 80 insertions(+) create mode 100644 SolastaUnfinishedBusiness/Resources/Spells/MagicStone.png diff --git a/SolastaUnfinishedBusiness/Displays/_ModUi.cs b/SolastaUnfinishedBusiness/Displays/_ModUi.cs index a335b5905d..3d989852e2 100644 --- a/SolastaUnfinishedBusiness/Displays/_ModUi.cs +++ b/SolastaUnfinishedBusiness/Displays/_ModUi.cs @@ -194,6 +194,7 @@ internal static class ModUi "LightningArrow", "LightningLure", "MaddeningDarkness", + "MagicStone", "MagnifyGravity", "MartialArcaneArcher", "MartialForceKnight", diff --git a/SolastaUnfinishedBusiness/Models/SpellsContext.cs b/SolastaUnfinishedBusiness/Models/SpellsContext.cs index 52d3442303..7a93f17937 100644 --- a/SolastaUnfinishedBusiness/Models/SpellsContext.cs +++ b/SolastaUnfinishedBusiness/Models/SpellsContext.cs @@ -248,6 +248,7 @@ internal static void LateLoad() RegisterSpell(BuildInfestation(), 0, SpellListDruid, SpellListSorcerer, SpellListWarlock, SpellListWizard); RegisterSpell(BuildLightningLure(), 0, SpellListSorcerer, SpellListWarlock, SpellListWizard, spellListInventorClass); + RegisterSpell(BuildMagicStone(), 0, SpellListDruid, SpellListWarlock, spellListInventorClass); RegisterSpell(BuildMindSpike(), 0, SpellListSorcerer, SpellListWarlock, SpellListWizard); RegisterSpell(BuildMinorLifesteal(), 0, SpellListBard, SpellListSorcerer, SpellListWarlock, SpellListWizard); RegisterSpell(BuildPrimalSavagery(), 0, SpellListDruid); diff --git a/SolastaUnfinishedBusiness/Properties/Resources.Designer.cs b/SolastaUnfinishedBusiness/Properties/Resources.Designer.cs index e2aef9cdd8..ec94d9cb48 100644 --- a/SolastaUnfinishedBusiness/Properties/Resources.Designer.cs +++ b/SolastaUnfinishedBusiness/Properties/Resources.Designer.cs @@ -2369,6 +2369,16 @@ public static byte[] MaddeningDarkness { } } + /// + /// Looks up a localized resource of type System.Byte[]. + /// + public static byte[] MagicStone { + get { + object obj = ResourceManager.GetObject("MagicStone", resourceCulture); + return ((byte[])(obj)); + } + } + /// /// Looks up a localized resource of type System.Byte[]. /// diff --git a/SolastaUnfinishedBusiness/Properties/Resources.resx b/SolastaUnfinishedBusiness/Properties/Resources.resx index 26adf00796..b29c8e9a45 100644 --- a/SolastaUnfinishedBusiness/Properties/Resources.resx +++ b/SolastaUnfinishedBusiness/Properties/Resources.resx @@ -162,6 +162,11 @@ PublicKeyToken=b77a5c561934e089 + + ../Resources/Spells/MagicStone.png;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + ../Resources/Powers/PowerHolyWeapon.png;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 diff --git a/SolastaUnfinishedBusiness/Resources/Spells/MagicStone.png b/SolastaUnfinishedBusiness/Resources/Spells/MagicStone.png new file mode 100644 index 0000000000000000000000000000000000000000..b26132595e38082e3ea6616455c5e542a3d6330d GIT binary patch literal 13899 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 Zegc(cEKZ!@LTvy5002ovPDHLkV1jp<>@NTS literal 0 HcmV?d00001 diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs index 2b1b446671..c7ffac1c22 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs @@ -365,6 +365,49 @@ internal static SpellDefinition BuildLightningLure() #region Mind Spike + internal static SpellDefinition BuildMagicStone() + { + const string NAME = "MagicStone"; + + var condition = ConditionDefinitionBuilder + .Create($"Condition{NAME}") + .SetGuiPresentationNoContent(true) + .SetSilent(Silent.WhenAddedOrRemoved) + .AddToDB(); + + var spell = SpellDefinitionBuilder + .Create(NAME) + .SetGuiPresentation(Category.Spell, Sprites.GetSprite(NAME, Resources.MagicStone, 128)) + .SetSchoolOfMagic(SchoolOfMagicDefinitions.SchoolTransmutation) + .SetSpellLevel(0) + .SetCastingTime(ActivationTime.BonusAction) + .SetMaterialComponent(MaterialComponentType.None) + .SetVerboseComponent(true) + .SetSomaticComponent(true) + .SetVocalSpellSameType(VocalSpellSemeType.Buff) + .SetEffectDescription( + EffectDescriptionBuilder + .Create() + .SetDurationData(DurationType.Minute, 1) + .SetTargetingData(Side.Ally, RangeType.Touch, 0, TargetType.IndividualsUnique) + .SetEffectAdvancement(EffectIncrementMethod.CasterLevelTable, additionalSummonsPerIncrement: 1) + .SetEffectForms( + EffectFormBuilder + .Create() + .SetSummonItemForm(ItemDefinitions.Dart, 3, true) + .Build(), + EffectFormBuilder.ConditionForm(condition, ConditionForm.ConditionOperation.Add, true)) + .SetParticleEffectParameters(ShadowDagger) + .Build()) + .AddToDB(); + + return spell; + } + + #endregion + + #region Mind Spike + internal static SpellDefinition BuildMindSpike() { const string NAME = "MindSpike"; diff --git a/SolastaUnfinishedBusiness/Translations/de/Spells/Cantrips-de.txt b/SolastaUnfinishedBusiness/Translations/de/Spells/Cantrips-de.txt index 008024c458..0faf06f712 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Spells/Cantrips-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Spells/Cantrips-de.txt @@ -39,6 +39,8 @@ Spell/&InfestationDescription=Du lässt eine Wolke aus Milben, Flöhen und ander Spell/&InfestationTitle=Befall Spell/&LightningLureDescription=Du erzeugst einen Blitzschlag, der eine Kreatur deiner Wahl trifft, die du in einem Umkreis von 4,5 m sehen kannst. Das Ziel muss einen Rettungswurf bestehen oder wird bis zu 3 m in gerader Linie auf dich zugezogen und erleidet dann 1W8 Blitzschaden. Der Schaden des Zaubers erhöht sich auf der 5., 11. und 17. Stufe um einen weiteren Würfel. Spell/&LightningLureTitle=Blitzköder +Spell/&MagicStoneDescription=Du berührst ein bis drei Kieselsteine ​​und verleihst ihnen Magie. Du oder jemand anders kann mit einem der Kieselsteine ​​einen Fernangriff ausführen, indem du ihn mit einer Reichweite von 60 Fuß wirfst. Wenn jemand anderes mit dem Kieselstein angreift, addiert dieser Angreifer deinen Zauberfähigkeitsmodifikator, nicht den des Angreifers, zum Angriffswurf. Bei einem Treffer erleidet das Ziel Schlagschaden in Höhe von 1W6 + deinem Zauberfähigkeitsmodifikator. Ob Treffer oder Fehlschlag, der Zauber endet dann auf dem Stein. +Spell/&MagicStoneTitle=Magischer Stein Spell/&MindSpikeDescription=Du treibst einen desorientierenden Strahl psychischer Energie in den Geist einer Kreatur, die du in Reichweite sehen kannst. Das Ziel muss einen Intelligenzrettungswurf bestehen oder erleidet 1W6 psychischen Schaden und zieht 1W4 vom nächsten Rettungswurf ab, den es vor dem Ende deines nächsten Zuges macht. Spell/&MindSpikeTitle=Gedankensplitter Spell/&MinorLifestealDescription=Du entziehst einer feindlichen Kreatur in der Nähe Lebensenergie. Führe einen Nahkampfangriff mit einem Zauber gegen eine Kreatur aus, die sich in einem Umkreis von 1,5 m um dich befindet. Bei einem Treffer erleidet die Kreatur 1W6 nekrotischen Schaden und du wirst um die Hälfte des zugefügten Schadens geheilt (abgerundet). Dieser Zauber hat keine Wirkung auf Untote und Konstrukte. Der Schaden des Zaubers erhöht sich auf der 5., 11. und 17. Stufe um einen zusätzlichen Würfel. diff --git a/SolastaUnfinishedBusiness/Translations/en/Spells/Cantrips-en.txt b/SolastaUnfinishedBusiness/Translations/en/Spells/Cantrips-en.txt index d6ced630ff..262a2840ed 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Spells/Cantrips-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Spells/Cantrips-en.txt @@ -39,6 +39,8 @@ Spell/&InfestationDescription=You cause a cloud of mites, fleas, and other paras Spell/&InfestationTitle=Infestation Spell/&LightningLureDescription=You create a lash of lightning energy that strikes at one creature of your choice that you can see within 15 ft of you. The target must succeed on a Strength saving throw or be pulled up to 10 ft in a straight line toward you and then take 1d8 lightning damage. The spell's damage increases by an additional die at 5th, 11th and 17th level. Spell/&LightningLureTitle=Lightning Lure +Spell/&MagicStoneDescription=You touch one to three pebbles and imbue them with magic. You or someone else can make a ranged spell attack with one of the pebbles by throwing it with a range of 60 feet. If someone else attacks with the pebble, that attacker adds your spellcasting ability modifier, not the attacker's, to the attack roll. On a hit, the target takes bludgeoning damage equal to 1d6 + your spellcasting ability modifier. Hit or miss, the spell then ends on the stone. +Spell/&MagicStoneTitle=Magic Stone Spell/&MindSpikeDescription=You drive a disorienting spike of psychic energy into the mind of one creature you can see within range. The target must succeed on an Intelligence saving throw or take 1d6 psychic damage and subtract 1d4 from the next saving throw it makes before the end of your next turn. Spell/&MindSpikeTitle=Mind Sliver Spell/&MinorLifestealDescription=You drain vital energy from a nearby enemy creature. Make a melee spell attack against a creature within 5 ft of you. On a hit, the creature takes 1d6 necrotic damage, and you heal for half the damage dealt (rounded down). This spell has no effect on undead and constructs. The spell's damage increases by an additional die at 5th, 11th and 17th level. diff --git a/SolastaUnfinishedBusiness/Translations/es/Spells/Cantrips-es.txt b/SolastaUnfinishedBusiness/Translations/es/Spells/Cantrips-es.txt index e34bc1e2bc..d7368a395e 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Spells/Cantrips-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Spells/Cantrips-es.txt @@ -39,6 +39,8 @@ Spell/&InfestationDescription=Provocas que una nube de ácaros, pulgas y otros p Spell/&InfestationTitle=Infestación Spell/&LightningLureDescription=Creas un rayo de energía eléctrica que golpea a una criatura de tu elección que puedas ver a 15 pies de ti. El objetivo debe superar una tirada de salvación de Fuerza o será atraído hasta 10 pies en línea recta hacia ti y luego recibirá 1d8 puntos de daño por rayo. El daño del conjuro aumenta en un dado adicional en los niveles 5, 11 y 17. Spell/&LightningLureTitle=Señuelo relámpago +Spell/&MagicStoneDescription=Tocas de uno a tres guijarros y los imbuyes de magia. Tú u otra persona pueden realizar un ataque de conjuro a distancia con uno de los guijarros lanzándolo con un alcance de 60 pies. Si otra persona ataca con el guijarro, ese atacante suma tu modificador por capacidad de lanzamiento de conjuros, no el del atacante, a la tirada de ataque. Si impactas, el objetivo sufre daño contundente igual a 1d6 + tu modificador por capacidad de lanzamiento de conjuros. Tanto si impactas como si fallas, el conjuro termina en la piedra. +Spell/&MagicStoneTitle=Piedra mágica Spell/&MindSpikeDescription=Lanzas una descarga desorientadora de energía psíquica a la mente de una criatura que puedas ver dentro del alcance. El objetivo debe superar una tirada de salvación de Inteligencia o sufrir 1d6 de daño psíquico y restar 1d4 de la siguiente tirada de salvación que realice antes del final de tu siguiente turno. Spell/&MindSpikeTitle=Mente fragmentada Spell/&MinorLifestealDescription=Drenas energía vital de una criatura enemiga cercana. Realiza un ataque de hechizo cuerpo a cuerpo contra una criatura a 5 pies o menos de ti. Si impactas, la criatura sufre 1d6 puntos de daño necrótico y tú te curas la mitad del daño infligido (redondeado hacia abajo). Este hechizo no tiene efecto sobre muertos vivientes y constructos. El daño del hechizo aumenta en un dado adicional en los niveles 5, 11 y 17. diff --git a/SolastaUnfinishedBusiness/Translations/fr/Spells/Cantrips-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Spells/Cantrips-fr.txt index e423919a68..200a1f8403 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Spells/Cantrips-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Spells/Cantrips-fr.txt @@ -39,6 +39,8 @@ Spell/&InfestationDescription=Vous faites apparaître momentanément un nuage d' Spell/&InfestationTitle=Infestation Spell/&LightningLureDescription=Vous créez une décharge d'énergie électrique qui frappe une créature de votre choix que vous pouvez voir à 4,5 m ou moins de vous. La cible doit réussir un jet de sauvegarde de Force ou être attirée vers vous en ligne droite jusqu'à 3 m et subir 1d8 dégâts de foudre. Les dégâts du sort augmentent d'un dé supplémentaire aux niveaux 5, 11 et 17. Spell/&LightningLureTitle=Leurre éclair +Spell/&MagicStoneDescription=Vous touchez un à trois cailloux et les imprégnez de magie. Vous ou quelqu'un d'autre pouvez lancer une attaque de sort à distance avec l'un des cailloux en le lançant à une portée de 18 mètres. Si quelqu'un d'autre attaque avec le caillou, cet attaquant ajoute votre modificateur de capacité de lancement de sorts, et non celui de l'attaquant, au jet d'attaque. En cas de succès, la cible subit des dégâts contondants égaux à 1d6 + votre modificateur de capacité de lancement de sorts. Que le sort réussisse ou non, il se termine alors sur la pierre. +Spell/&MagicStoneTitle=Pierre magique Spell/&MindSpikeDescription=Vous envoyez une décharge d'énergie psychique désorientante dans l'esprit d'une créature que vous pouvez voir à portée. La cible doit réussir un jet de sauvegarde d'Intelligence ou subir 1d6 dégâts psychiques et soustraire 1d4 au prochain jet de sauvegarde qu'elle effectuera avant la fin de votre prochain tour. Spell/&MindSpikeTitle=Ruban mental Spell/&MinorLifestealDescription=Vous drainez l'énergie vitale d'une créature ennemie proche. Lancez une attaque de sort au corps à corps contre une créature à 1,50 m ou moins de vous. En cas de succès, la créature subit 1d6 dégâts nécrotiques et vous récupérez la moitié des dégâts infligés (arrondis à l'inférieur). Ce sort n'a aucun effet sur les morts-vivants et les créatures artificielles. Les dégâts du sort augmentent d'un dé supplémentaire aux niveaux 5, 11 et 17. diff --git a/SolastaUnfinishedBusiness/Translations/it/Spells/Cantrips-it.txt b/SolastaUnfinishedBusiness/Translations/it/Spells/Cantrips-it.txt index 6d82c01a62..59ed2a3369 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Spells/Cantrips-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Spells/Cantrips-it.txt @@ -39,6 +39,8 @@ Spell/&InfestationDescription=Fai apparire momentaneamente una nuvola di acari, Spell/&InfestationTitle=Infestazione Spell/&LightningLureDescription=Crei una sferzata di energia fulminea che colpisce una creatura a tua scelta che puoi vedere entro 15 piedi da te. Il bersaglio deve superare un tiro salvezza su Forza o essere tirato su di 10 piedi in linea retta verso di te e poi subire 1d8 danni da fulmine. Il danno dell'incantesimo aumenta di un dado aggiuntivo al 5°, 11° e 17° livello. Spell/&LightningLureTitle=Esca per fulmini +Spell/&MagicStoneDescription=Tocca da uno a tre ciottoli e li impregna di magia. Tu o qualcun altro potete effettuare un attacco con incantesimo a distanza con uno dei ciottoli lanciandolo con una gittata di 60 piedi. Se qualcun altro attacca con il ciottolo, quell'attaccante aggiunge il tuo modificatore di abilità di lancio di incantesimi, non quello dell'attaccante, al tiro per colpire. In caso di successo, il bersaglio subisce danni contundenti pari a 1d6 + il tuo modificatore di abilità di lancio di incantesimi. Colpito o mancato, l'incantesimo termina sulla pietra. +Spell/&MagicStoneTitle=Pietra magica Spell/&MindSpikeDescription=Scagli una scarica disorientante di energia psichica nella mente di una creatura che puoi vedere entro il raggio d'azione. Il bersaglio deve superare un tiro salvezza su Intelligenza o subire 1d6 danni psichici e sottrarre 1d4 dal prossimo tiro salvezza che effettua prima della fine del tuo prossimo turno. Spell/&MindSpikeTitle=Frammento di Mente Spell/&MinorLifestealDescription=Drenare energia vitale da una creatura nemica vicina. Effettuare un attacco con incantesimo in mischia contro una creatura entro 5 piedi da te. In caso di colpo, la creatura subisce 1d6 danni necrotici e tu guarisci per metà dei danni inflitti (arrotondati per difetto). Questo incantesimo non ha effetto su non morti e costrutti. Il danno dell'incantesimo aumenta di un dado aggiuntivo al 5°, 11° e 17° livello. diff --git a/SolastaUnfinishedBusiness/Translations/ja/Spells/Cantrips-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Spells/Cantrips-ja.txt index d593cdc430..1159baff94 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Spells/Cantrips-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Spells/Cantrips-ja.txt @@ -39,6 +39,8 @@ Spell/&InfestationDescription=範囲内にいる、あなたが見ることが Spell/&InfestationTitle=感染 Spell/&LightningLureDescription=稲妻のエネルギーの突撃を作り出し、あなたの周囲 15 フィート以内にいる、あなたが選択した 1 体のクリーチャーを攻撃します。ターゲットは筋力セーヴィング スローに成功しなければ、あなたの方向に 10 フィートまで直線的に引き寄せられ、1d8 の稲妻ダメージを受けます。呪文のダメージは、レベル 5、11、17 でダイス 1 個ずつ増加します。 Spell/&LightningLureTitle=ライトニングルアー +Spell/&MagicStoneDescription=1 個から 3 個の小石に触れて、魔法を吹き込みます。あなたまたは他の誰かが、小石の 1 つを 60 フィートの距離に投げて遠隔呪文攻撃を行うことができます。他の誰かが小石で攻撃する場合、その攻撃者は攻撃ロールに、攻撃者の呪文発動能力修正値ではなく、あなたの呪文発動能力修正値を追加します。命中した場合、ターゲットは 1d6 + あなたの呪文発動能力修正値に等しい打撃ダメージを受けます。命中しても外れても、呪文は石で終了します。 +Spell/&MagicStoneTitle=魔法の石 Spell/&MindSpikeDescription=あなたは、範囲内に見える 1 匹の生き物の心に、方向感覚を失わせるような精神的エネルギーのスパイクを打ち込みます。対象は知力セーヴィング・スローに成功するか、1d6の精神的ダメージを受け、次のターン終了前に行う次のセーヴィング・スローから1d4を減算しなければならない。 Spell/&MindSpikeTitle=マインドスライバー Spell/&MinorLifestealDescription=近くの敵クリーチャーから生命力を吸収します。5 フィート以内のクリーチャーに対して近接呪文攻撃を行います。命中すると、クリーチャーは 1d6 の死傷ダメージを受け、与えたダメージの半分 (端数切り捨て) だけ回復します。この呪文はアンデッドや構築物には効果がありません。呪文のダメージは 5、11、17 レベルでダイス 1 個ずつ増加します。 diff --git a/SolastaUnfinishedBusiness/Translations/ko/Spells/Cantrips-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Spells/Cantrips-ko.txt index a250c9ffc4..3b3e359c11 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Spells/Cantrips-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Spells/Cantrips-ko.txt @@ -39,6 +39,8 @@ Spell/&InfestationDescription=범위 내에서 볼 수 있는 한 생명체에 Spell/&InfestationTitle=감염 Spell/&LightningLureDescription=당신은 15피트 이내에서 볼 수 있는 당신이 선택한 생명체 하나를 공격하는 번개 에너지의 채찍을 생성합니다. 대상은 힘 세이빙 스로우에 성공해야 하며, 그렇지 않으면 직선으로 10피트까지 당신을 향해 끌려가 1d8 번개 피해를 입습니다. 이 주문의 피해는 5, 11, 17레벨에서 주사위가 하나 더 늘어납니다. Spell/&LightningLureTitle=번개 미끼 +Spell/&MagicStoneDescription=당신은 1~3개의 자갈을 만지고 마법을 부여합니다. 당신이나 다른 누군가가 자갈 중 하나를 던져 60피트 범위로 원거리 주문 공격을 할 수 있습니다. 다른 누군가가 자갈로 공격하면, 그 공격자는 공격자의 주문 시전 능력 수정치가 아닌 당신의 주문 시전 능력 수정치를 공격 굴림에 추가합니다. 적중 시 대상은 1d6 + 당신의 주문 시전 능력 수정치에 해당하는 둔기 피해를 입습니다. 적중하든 적중하지 않든, 주문은 돌 위에서 끝납니다. +Spell/&MagicStoneTitle=마법의 돌 Spell/&MindSpikeDescription=당신은 범위 내에서 볼 수 있는 한 생물의 정신에 혼란스러운 심령 에너지의 스파이크를 몰아냅니다. 대상은 지능 내성 굴림에 성공해야 하며, 그렇지 않으면 1d6의 정신적 피해를 입고 다음 차례가 끝나기 전에 다음 내성 굴림에서 1d4를 빼야 합니다. Spell/&MindSpikeTitle=마인드 슬라이버 Spell/&MinorLifestealDescription=근처의 적 생물로부터 생명력을 소모합니다. 5피트 이내의 생물에게 근접 주문 공격을 합니다. 적중 시 생물은 1d6의 괴사 피해를 입고, 당신은 입힌 피해의 절반만큼 회복합니다(반올림). 이 주문은 언데드와 구조물에는 효과가 없습니다. 이 주문의 피해는 5, 11, 17레벨에서 주사위가 하나 더 늘어납니다. diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Cantrips-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Cantrips-pt-BR.txt index 3fa1dd675b..5f96dd6431 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Cantrips-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Cantrips-pt-BR.txt @@ -39,6 +39,8 @@ Spell/&InfestationDescription=Você faz com que uma nuvem de ácaros, pulgas e o Spell/&InfestationTitle=Infestação Spell/&LightningLureDescription=Você cria um chicote de energia de relâmpago que atinge uma criatura de sua escolha que você possa ver a até 15 pés de você. O alvo deve ter sucesso em um teste de resistência de Força ou será puxado até 10 pés em uma linha reta em sua direção e então sofrerá 1d8 de dano de relâmpago. O dano da magia aumenta em um dado adicional no 5º, 11º e 17º nível. Spell/&LightningLureTitle=Isca de Relâmpago +Spell/&MagicStoneDescription=Você toca de uma a três pedras e as imbui com magia. Você ou outra pessoa pode fazer um ataque mágico à distância com uma das pedras, jogando-a com um alcance de 60 pés. Se outra pessoa atacar com a pedra, esse atacante adiciona seu modificador de habilidade de conjuração, não o do atacante, à jogada de ataque. Em um acerto, o alvo recebe dano contundente igual a 1d6 + seu modificador de habilidade de conjuração. Acerte ou erre, a magia então termina na pedra. +Spell/&MagicStoneTitle=Pedra mágica Spell/&MindSpikeDescription=Você enfia um pico desorientador de energia psíquica na mente de uma criatura que você pode ver dentro do alcance. O alvo deve ter sucesso em um teste de resistência de Inteligência ou sofrer 1d6 de dano psíquico e subtrair 1d4 do próximo teste de resistência que fizer antes do fim do seu próximo turno. Spell/&MindSpikeTitle=Lasca Mental Spell/&MinorLifestealDescription=Você drena energia vital de uma criatura inimiga próxima. Faça um ataque mágico corpo a corpo contra uma criatura a até 5 pés de você. Em um acerto, a criatura recebe 1d6 de dano necrótico, e você se cura pela metade do dano causado (arredondado para baixo). Esta magia não tem efeito em mortos-vivos e constructos. O dano da magia aumenta em um dado adicional no 5º, 11º e 17º nível. diff --git a/SolastaUnfinishedBusiness/Translations/ru/Spells/Cantrips-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Spells/Cantrips-ru.txt index 20ed2d0662..ccf6994ed6 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Spells/Cantrips-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Spells/Cantrips-ru.txt @@ -39,6 +39,8 @@ Spell/&InfestationDescription=Вы вызываете клещей, блох и Spell/&InfestationTitle=Нашествие Spell/&LightningLureDescription=Вы создаёте хлыст из молний, поражающий одно существо по вашему выбору, которое вы можете видеть в пределах 15 футов от вас. Цель должна преуспеть в спасброске Силы, иначе будет притянута на 10 футов по прямой к вам, после чего получит 1d8 урона электричеством. Урон заклинания увеличивается на одну дополнительную кость, когда вы достигаете 5-го, 11-го и 17-го уровня. Spell/&LightningLureTitle=Лассо молнии +Spell/&MagicStoneDescription=Вы касаетесь от одного до трех камешков и наделяете их магией. Вы или кто-то другой можете провести дальнюю атаку заклинанием с одним из камешков, бросив его с расстояния 60 футов. Если кто-то другой атакует камешком, этот нападающий добавляет ваш модификатор способности заклинания, а не нападающего, к броску атаки. При попадании цель получает дробящий урон, равный 1d6 + ваш модификатор способности заклинания. Попадание или промах, заклинание затем заканчивается на камне. +Spell/&MagicStoneTitle=Волшебный камень Spell/&MindSpikeDescription=Вы отправляете дезориентирующий луч психической энергии в разум одного существа, которое видите в пределах дистанции. Цель должна преуспеть в спасброске Интеллекта, иначе получит 1d6 урона психической энергией и вычтет 1d4 из следующего спасброска, совершаемого ею до конца вашего следующего хода. Spell/&MindSpikeTitle=Расщепление разума Spell/&MinorLifestealDescription=Вы вытягиваете жизненную энергию из ближайшего враждебного существа. Совершите рукопашную атаку заклинанием по существу в пределах 5 футов от вас. Цель получает 1d6 некротического урона при попадании, а вы исцеляете количество хитов, равное половине нанесённого урона (с округлением вниз). Это заклинание не оказывает эффекта на нежить и конструкты. Урон заклинания увеличивается на одну дополнительную кость на уровнях 5, 11 и 17. diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Cantrips-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Cantrips-zh-CN.txt index 04dca99f46..1609bbe4e3 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Cantrips-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Cantrips-zh-CN.txt @@ -39,6 +39,8 @@ Spell/&InfestationDescription=你让一团螨虫、跳蚤和其他寄生虫瞬 Spell/&InfestationTitle=虫群孳生 Spell/&LightningLureDescription=你制造一道闪电能量,攻击你选择的 15 英尺范围内可见的生物。目标必须成功通过力量豁免,否则将被拉向你 10 英尺外的直线,然后受到 1d8 闪电伤害。该法术的伤害在第 5、11 和 17 级时增加一个额外的骰子。 Spell/&LightningLureTitle=闪电牵引 +Spell/&MagicStoneDescription=你触摸一到三颗鹅卵石,并给它们注入魔法。你或其他人可以用其中一颗鹅卵石进行远程法术攻击,方法是将其投掷到 60 英尺的范围内。如果其他人用鹅卵石进行攻击,则攻击者会将你的施法能力修正值(而不是攻击者的修正值)添加到攻击掷骰中。如果命中,目标将受到钝击伤害,伤害值等于 1d6 + 你的施法能力修正值。命中或未命中,法术将在该石头上结束。 +Spell/&MagicStoneTitle=魔法石 Spell/&MindSpikeDescription=你将一股令人迷惑的精神能量刺入施法距离内一个你能看到的生物的脑海中。目标必须成功通过一次智力豁免检定,否则将受到 1d6 心灵伤害,并在你的下一轮结束前从它进行的下一次豁免检定中减去 1d4。 Spell/&MindSpikeTitle=心灵之楔 Spell/&MinorLifestealDescription=你吸取附近敌方生物的生命能量。对你 5 英尺范围内的生物进行近战法术攻击。命中后,该生物将受到 1d6 坏死性伤害,而你可治愈所造成伤害的一半(向下取整)。此法术对亡灵和构造体无效。法术的伤害在第 5、11 和 17 级时增加一个额外的骰子。 From 530aef7844250f0d4383ccd8c23657ae40842ff5 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Fri, 13 Sep 2024 22:20:52 -0700 Subject: [PATCH 155/212] add Glibness spell --- .../ConditionGlibness.json | 155 +++++ .../SpellDefinition/Glibness.json | 346 ++++++++++ Documentation/Spells.md | 628 +++++++++--------- .../ChangelogHistory.txt | 2 +- SolastaUnfinishedBusiness/Displays/_ModUi.cs | 1 + .../Models/SpellsContext.cs | 1 + .../Properties/Resources.Designer.cs | 10 + .../Properties/Resources.resx | 5 + .../Resources/Spells/Glibness.png | Bin 0 -> 14991 bytes .../Spells/SpellBuildersLevel08.cs | 58 +- .../Translations/de/Spells/Spells08-de.txt | 2 + .../Translations/en/Spells/Spells08-en.txt | 2 + .../Translations/es/Spells/Spells08-es.txt | 2 + .../Translations/fr/Spells/Spells08-fr.txt | 2 + .../Translations/it/Spells/Spells08-it.txt | 2 + .../Translations/ja/Spells/Spells08-ja.txt | 2 + .../Translations/ko/Spells/Spells08-ko.txt | 2 + .../pt-BR/Spells/Spells08-pt-BR.txt | 2 + .../Translations/ru/Spells/Spells08-ru.txt | 2 + .../zh-CN/Spells/Spells08-zh-CN.txt | 2 + 20 files changed, 916 insertions(+), 310 deletions(-) create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGlibness.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/Glibness.json create mode 100644 SolastaUnfinishedBusiness/Resources/Spells/Glibness.png diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGlibness.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGlibness.json new file mode 100644 index 0000000000..710f6c8d61 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGlibness.json @@ -0,0 +1,155 @@ +{ + "$type": "ConditionDefinition, Assembly-CSharp", + "inDungeonEditor": false, + "parentCondition": null, + "conditionType": "Beneficial", + "features": [], + "allowMultipleInstances": false, + "silentWhenAdded": false, + "silentWhenRemoved": false, + "silentWhenRefreshed": false, + "terminateWhenRemoved": false, + "specialDuration": false, + "durationType": "Hour", + "durationParameterDie": "D4", + "durationParameter": 1, + "forceTurnOccurence": false, + "turnOccurence": "EndOfTurn", + "specialInterruptions": [], + "interruptionRequiresSavingThrow": false, + "interruptionSavingThrowComputationMethod": "SaveOverride", + "interruptionSavingThrowAbility": "", + "interruptionDamageThreshold": 0, + "keepConditionIfSavingThrowSucceeds": false, + "interruptionSavingThrowAffinity": "None", + "conditionTags": [], + "recurrentEffectForms": [], + "cancellingConditions": [], + "additionalDamageWhenHit": false, + "additionalDamageTypeDetermination": "Specific", + "additionalDamageType": "", + "additionalDamageQuantity": "AbilityBonus", + "additionalDamageDieType": "D1", + "additionalDamageDieNumber": 1, + "additionalConditionWhenHit": false, + "additionalCondition": null, + "additionalConditionDurationType": "Round", + "additionalConditionDurationParameter": 1, + "additionalConditionTurnOccurenceType": "StartOfTurn", + "conditionStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "conditionParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "conditionEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "recurrentEffectParticleReference": null, + "characterShaderReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "particlesBasedOnAncestryDamageType": false, + "ancestryType": "Sorcerer", + "acidParticleParameters": null, + "coldParticleParameters": null, + "fireParticleParameters": null, + "lightningParticleParameters": null, + "poisonParticleParameters": null, + "overrideCharacterShaderColors": false, + "firstCharacterShaderColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "secondCharacterShaderColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "timeToWaitBeforeApplyingShader": 0.5, + "timeToWaitBeforeRemovingShader": 0.5, + "possessive": true, + "amountOrigin": "None", + "baseAmount": 0, + "additiveAmount": false, + "sourceAbilityBonusMinValue": 1, + "subsequentOnRemoval": null, + "subsequentHasSavingThrow": false, + "subsequentSavingThrowAbilityScore": "Constitution", + "subsequentVariableForDC": "FrenzyExhaustionDC", + "subsequentDCIncrease": 5, + "effectFormsOnRemoved": [], + "forceBehavior": false, + "addBehavior": false, + "fearSource": false, + "battlePackage": null, + "explorationPackage": null, + "removedFromTheGame": false, + "permanentlyRemovedIfExtraPlanar": false, + "refundReceivedDamageWhenRemoved": false, + "followSourcePosition": false, + "disolveCharacterOnDeath": false, + "disolveParameters": { + "$type": "GraphicsCharacterDefinitions+DisolveParameters, Assembly-CSharp", + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "colorWidth": 0.0, + "noiseScale": 5.0, + "hueScale": 0.0, + "vertexOffset": 0.0, + "curve": { + "$type": "UnityEngine.AnimationCurve, UnityEngine.CoreModule" + }, + "startAfterDeathAnimation": false, + "duration": 0.0 + }, + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "Spell/&GlibnessTitle", + "description": "Spell/&GlibnessDescription", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "3182a19d-2d56-5f7a-849b-c2b28c7536b5", + "contentPack": 9999, + "name": "ConditionGlibness" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/Glibness.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/Glibness.json new file mode 100644 index 0000000000..f4d3883901 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/Glibness.json @@ -0,0 +1,346 @@ +{ + "$type": "SpellDefinition, Assembly-CSharp", + "spellsBundle": false, + "subspellsList": [], + "compactSubspellsTooltip": false, + "implemented": true, + "schoolOfMagic": "SchoolTransmutation", + "spellLevel": 8, + "ritual": false, + "uniqueInstance": false, + "castingTime": "Action", + "reactionContext": "None", + "ritualCastingTime": "Action", + "requiresConcentration": false, + "effectDescription": { + "$type": "EffectDescription, Assembly-CSharp", + "rangeType": "Self", + "rangeParameter": 0, + "halfDamageOnAMiss": false, + "hitAffinitiesByTargetTag": [], + "targetType": "Self", + "itemSelectionType": "None", + "targetParameter": 1, + "targetParameter2": 2, + "emissiveBorder": "None", + "emissiveParameter": 1, + "requiresTargetProximity": false, + "targetProximityDistance": 30, + "targetExcludeCaster": false, + "canBePlacedOnCharacter": true, + "affectOnlyGround": false, + "targetFilteringMethod": "AllCharacterAndGadgets", + "targetFilteringTag": "No", + "requiresVisibilityForPosition": true, + "inviteOptionalAlly": false, + "slotTypes": [], + "recurrentEffect": "OnActivation, OnTurnStart, OnEnter", + "retargetAfterDeath": false, + "retargetActionType": "Bonus", + "poolFilterDiceNumber": 5, + "poolFilterDieType": "D8", + "trapRangeType": "Triggerer", + "targetConditionName": "", + "targetConditionAsset": null, + "targetSide": "All", + "durationType": "Hour", + "durationParameter": 1, + "endOfEffect": "EndOfTurn", + "hasSavingThrow": false, + "disableSavingThrowOnAllies": false, + "savingThrowAbility": "Dexterity", + "ignoreCover": false, + "grantedConditionOnSave": null, + "rollSaveOnlyIfRelevantForms": false, + "hasShoveRoll": false, + "createdByCharacter": true, + "difficultyClassComputation": "SpellCastingFeature", + "savingThrowDifficultyAbility": "Wisdom", + "fixedSavingThrowDifficultyClass": 15, + "savingThrowAffinitiesBySense": [], + "savingThrowAffinitiesByFamily": [], + "damageAffinitiesByFamily": [], + "advantageForEnemies": false, + "canBeDispersed": false, + "hasVelocity": false, + "velocityCellsPerRound": 2, + "velocityType": "AwayFromSourceOriginalPosition", + "restrictedCreatureFamilies": [], + "immuneCreatureFamilies": [], + "restrictedCharacterSizes": [], + "hasLimitedEffectPool": false, + "effectPoolAmount": 60, + "effectApplication": "All", + "effectFormFilters": [], + "effectForms": [ + { + "$type": "EffectForm, Assembly-CSharp", + "formType": "Condition", + "addBonusMode": "None", + "applyLevel": "No", + "levelType": "ClassLevel", + "levelMultiplier": 1, + "diceByLevelTable": [], + "createdByCharacter": true, + "createdByCondition": false, + "hasSavingThrow": false, + "savingThrowAffinity": "None", + "dcModifier": 0, + "canSaveToCancel": false, + "saveOccurence": "EndOfTurn", + "conditionForm": { + "$type": "ConditionForm, Assembly-CSharp", + "conditionDefinitionName": "ConditionGlibness", + "conditionDefinition": "Definition:ConditionGlibness:3182a19d-2d56-5f7a-849b-c2b28c7536b5", + "operation": "Add", + "conditionsList": [], + "applyToSelf": false, + "forceOnSelf": false + }, + "hasFilterId": false, + "filterId": 0 + } + ], + "specialFormsDescription": "", + "effectAdvancement": { + "$type": "EffectAdvancement, Assembly-CSharp", + "effectIncrementMethod": "None", + "incrementMultiplier": 1, + "additionalTargetsPerIncrement": 0, + "additionalSubtargetsPerIncrement": 0, + "additionalDicePerIncrement": 0, + "additionalSpellLevelPerIncrement": 0, + "additionalSummonsPerIncrement": 0, + "additionalHPPerIncrement": 0, + "additionalTempHPPerIncrement": 0, + "additionalTargetCellsPerIncrement": 0, + "additionalItemBonus": 0, + "additionalWeaponDie": 0, + "alteredDuration": "None" + }, + "speedType": "Instant", + "speedParameter": 10.0, + "offsetImpactTimeBasedOnDistance": false, + "offsetImpactTimeBasedOnDistanceFactor": 0.1, + "offsetImpactTimePerTarget": 0.0, + "effectParticleParameters": { + "$type": "EffectParticleParameters, Assembly-CSharp", + "casterParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "74aff29d9a49eb042a3377c2511b13a2", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "casterSelfParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "casterQuickSpellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "targetParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "effectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "effectSubTargetParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "zoneParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "beforeImpactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "impactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectImpactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceParticlePerIndex": "", + "activeEffectSurfaceParticlePerIndexCount": 0, + "emissiveBorderCellStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderCellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderCellEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "forceApplyZoneParticle": false, + "applyEmissionColorOnWeapons": false, + "emissionColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "emissionColorFadeInDuration": 0.0, + "emissionColorFadeOutDuration": 0.0 + }, + "effectAIParameters": { + "$type": "EffectAIParameters, Assembly-CSharp", + "aoeScoreMultiplier": 1.0, + "cooldownForCaster": 0, + "cooldownForBattle": 0, + "sortingScoreMultiplier": 1.0, + "dynamicCooldown": false + }, + "animationMagicEffect": "Animation0", + "lightCounterDispellsEffect": false, + "hideSavingThrowAnimation": false + }, + "aiParameters": { + "$type": "SpellAIParameters, Assembly-CSharp", + "learnPriority": "Low", + "preparePriority": "Low" + }, + "concentrationAction": "None", + "verboseComponent": true, + "somaticComponent": false, + "materialComponentType": "None", + "specificMaterialComponentTag": "Diamond", + "specificMaterialComponentCostGp": 100, + "specificMaterialComponentConsumed": true, + "terminateOnItemUnequip": false, + "displayConditionDuration": false, + "vocalSpellSemeType": "Buff", + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "Spell/&GlibnessTitle", + "description": "Spell/&GlibnessDescription", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "b1b3864d-84d0-5132-b2c0-f1144c4bf2eb", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "6fff4ed6-1408-5410-9bb6-16392e1e6b15", + "contentPack": 9999, + "name": "Glibness" +} \ No newline at end of file diff --git a/Documentation/Spells.md b/Documentation/Spells.md index 6c87ae82ab..618630d07b 100644 --- a/Documentation/Spells.md +++ b/Documentation/Spells.md @@ -106,217 +106,223 @@ An object you can touch emits a powerful light for a limited time. You create a lash of lightning energy that strikes at one creature of your choice that you can see within 15 ft of you. The target must succeed on a Strength saving throw or be pulled up to 10 ft in a straight line toward you and then take 1d8 lightning damage. The spell's damage increases by an additional die at 5th, 11th and 17th level. -# 19. - *Mind Sliver* © (V) level 0 Enchantment [UB] +# 19. - *Magic Stone* © (V,S) level 0 Transmutation [UB] + +**[Artificer, Druid, Warlock]** + +You touch one to three pebbles and imbue them with magic. You or someone else can make a ranged spell attack with one of the pebbles by throwing it with a range of 60 feet. If someone else attacks with the pebble, that attacker adds your spellcasting ability modifier, not the attacker's, to the attack roll. On a hit, the target takes bludgeoning damage equal to 1d6 + your spellcasting ability modifier. Hit or miss, the spell then ends on the stone. + +# 20. - *Mind Sliver* © (V) level 0 Enchantment [UB] **[Sorcerer, Warlock, Wizard]** You drive a disorienting spike of psychic energy into the mind of one creature you can see within range. The target must succeed on an Intelligence saving throw or take 1d6 psychic damage and subtract 1d4 from the next saving throw it makes before the end of your next turn. -# 20. - Minor Lifesteal (V,S) level 0 Necromancy [UB] +# 21. - Minor Lifesteal (V,S) level 0 Necromancy [UB] **[Bard, Sorcerer, Warlock, Wizard]** You drain vital energy from a nearby enemy creature. Make a melee spell attack against a creature within 5 ft of you. On a hit, the creature takes 1d6 necrotic damage, and you heal for half the damage dealt (rounded down). This spell has no effect on undead and constructs. The spell's damage increases by an additional die at 5th, 11th and 17th level. -# 21. - Poison Spray (V,S) level 0 Conjuration [SOL] +# 22. - Poison Spray (V,S) level 0 Conjuration [SOL] **[Artificer, Druid, Sorcerer, Warlock, Wizard]** Fire a poison spray at an enemy you can see, within range. -# 22. - *Primal Savagery* © (S) level 0 Transmutation [UB] +# 23. - *Primal Savagery* © (S) level 0 Transmutation [UB] **[Druid]** You channel primal magic to cause your teeth or fingernails to sharpen, ready to deliver a corrosive attack. Make a melee spell attack against one creature within 5 ft of you. On a hit, the target takes 1d10 acid damage. The spell's damage increases by an additional die at 5th, 11th and 17th level. -# 23. - Produce Flame (V,S) level 0 Conjuration [SOL] +# 24. - Produce Flame (V,S) level 0 Conjuration [SOL] **[Druid]** Conjures a flickering flame in your hand, which generates light or can be hurled to inflict fire damage. -# 24. - Ray of Frost (V,S) level 0 Evocation [SOL] +# 25. - Ray of Frost (V,S) level 0 Evocation [SOL] **[Artificer, Sorcerer, Wizard]** Launch a freezing ray at an enemy to damage and slow them. -# 25. - Resistance (V,S) level 0 Abjuration [Concentration] [SOL] +# 26. - Resistance (V,S) level 0 Abjuration [Concentration] [SOL] **[Artificer, Cleric, Druid]** Grant an ally a one-time bonus to saving throws. -# 26. - Sacred Flame (V,S) level 0 Evocation [SOL] +# 27. - Sacred Flame (V,S) level 0 Evocation [SOL] **[Cleric]** Strike an enemy with radiant damage. -# 27. - *Sapping Sting* © (V,S) level 0 Necromancy [UB] +# 28. - *Sapping Sting* © (V,S) level 0 Necromancy [UB] **[Wizard]** You sap the vitality of one creature you can see in range. The target must succeed on a Constitution saving throw or take 1d4 necrotic damage and fall prone. -# 28. - Shadow Armor (V,S) level 0 Abjuration [SOL] +# 29. - Shadow Armor (V,S) level 0 Abjuration [SOL] **[Bard, Sorcerer, Warlock, Wizard]** Grants 3 temporary hit points for one minute. -# 29. - Shadow Dagger (V,S) level 0 Illusion [SOL] +# 30. - Shadow Dagger (V,S) level 0 Illusion [SOL] **[Bard, Sorcerer, Warlock, Wizard]** Launches an illusionary dagger that causes psychic damage. -# 30. - Shillelagh (V,S) level 0 Transmutation [SOL] +# 31. - Shillelagh (V,S) level 0 Transmutation [SOL] **[Druid]** Conjures a magical club whose attacks are magical and use your spellcasting ability instead of strength. -# 31. - Shine (V,S) level 0 Conjuration [SOL] +# 32. - Shine (V,S) level 0 Conjuration [SOL] **[Cleric, Sorcerer, Wizard]** An enemy you can see becomes luminous for a while. -# 32. - Shocking Grasp (V,S) level 0 Evocation [SOL] +# 33. - Shocking Grasp (V,S) level 0 Evocation [SOL] **[Artificer, Sorcerer, Wizard]** Damage and daze an enemy on a successful touch. -# 33. - Spare the Dying (S) level 0 Necromancy [SOL] +# 34. - Spare the Dying (S) level 0 Necromancy [SOL] **[Artificer, Cleric]** Touch a dying ally to stabilize them. -# 34. - Sparkle (V,S) level 0 Enchantment [SOL] +# 35. - Sparkle (V,S) level 0 Enchantment [SOL] **[Bard, Cleric, Druid, Sorcerer, Warlock, Wizard]** Target up to three objects that can be illuminated and light them up immediately. -# 35. - *Starry Wisp* © (V,S) level 0 Evocation [UB] +# 36. - *Starry Wisp* © (V,S) level 0 Evocation [UB] **[Bard, Druid]** You launch a mote of light at one creature or object within range. Make a ranged spell attack against the target. On a hit, the target takes 1d8 Radiant damage, and until the end of your next turn, it emits Dim Light in a 10-foot radius and can't benefit from the Invisible condition. The spell's damage increases by an additional die at 5th, 11th and 17th level. -# 36. - Sunlit Blade (M,S) level 0 Evocation [UB] +# 37. - Sunlit Blade (M,S) level 0 Evocation [UB] **[Artificer, Sorcerer, Warlock, Wizard]** You brandish the weapon used in the spell's casting and make a melee attack with it against one creature within 5 ft distance. On a hit, the target suffers the weapon attack's normal effects, and is enveloped in glowing radiant energy, shedding dim light for the turn. Next attack against this creature while it is highlighted is done with advantage. At 5th level, the melee attack deals an extra 1d8 radiant damage to the target. The damage increases by another 1d8 at 11th and 17th levels. -# 37. - *Sword Burst* © (V,S) level 0 Enchantment [UB] +# 38. - *Sword Burst* © (V,S) level 0 Enchantment [UB] **[Artificer, Sorcerer, Warlock, Wizard]** You create a momentary circle of spectral blades that sweep around you. All other creatures within 5 ft of you must each succeed on a Dexterity saving throw or take 1d6 force damage. -# 38. - *Thorn Whip* © (V,S) level 0 Transmutation [UB] +# 39. - *Thorn Whip* © (V,S) level 0 Transmutation [UB] **[Artificer, Druid]** You create a long, whip-like vine covered in thorns that lashes out at your command toward a creature in range. Make a ranged spell attack against the target. If the attack hits, the creature takes 1d6 piercing damage, and you pull the creature up to 10 ft closer to you. -# 39. - *Thunderclap* © (V,S) level 0 Evocation [UB] +# 40. - *Thunderclap* © (V,S) level 0 Evocation [UB] **[Artificer, Bard, Druid, Sorcerer, Warlock, Wizard]** Create a burst of thundering sound, forcing creatures adjacent to you to make a Constitution saving throw or take 1d6 thunder damage. The spell's damage increases by an additional die at 5th, 11th and 17th level. -# 40. - *Toll the Dead* © (V,S) level 0 Necromancy [UB] +# 41. - *Toll the Dead* © (V,S) level 0 Necromancy [UB] **[Cleric, Warlock, Wizard]** You point at one creature you can see within range, and the sound of a dolorous bell fills the air around it for a moment. The target must succeed on a Wisdom saving throw or take 1d6 necrotic damage. If the target is missing any of its hit points, it instead takes 1d12 necrotic damage. -# 41. - True Strike (S) level 0 Divination [Concentration] [SOL] +# 42. - True Strike (S) level 0 Divination [Concentration] [SOL] **[Bard, Sorcerer, Warlock, Wizard]** Increases your chance to hit a target you can see, one time. -# 42. - Venomous Spike (V,S) level 0 Enchantment [SOL] +# 43. - Venomous Spike (V,S) level 0 Enchantment [SOL] **[Druid]** A bone spike that pierces and poisons its target. -# 43. - Vicious Mockery (V) level 0 Enchantment [SOL] +# 44. - Vicious Mockery (V) level 0 Enchantment [SOL] **[Bard]** Unleash a torrent of magically-enhanced insults on a creature you can see. It must make a successful wisdom saving throw, or take psychic damage and have disadvantage on its next attack roll. The effect lasts until the end of its next turn. -# 44. - *Word of Radiance* © (V) level 0 Evocation [UB] +# 45. - *Word of Radiance* © (V) level 0 Evocation [UB] **[Cleric]** Create a brilliant flash of shimmering light, damaging all enemies around you. -# 45. - Wrack (V,S) level 0 Necromancy [UB] +# 46. - Wrack (V,S) level 0 Necromancy [UB] **[Cleric]** Unleash a wave of crippling pain at a creature within range. The target must make a Constitution saving throw or take 1d6 necrotic damage, and preventing them from dashing or disengaging. -# 46. - *Absorb Elements* © (S) level 1 Abjuration [UB] +# 47. - *Absorb Elements* © (S) level 1 Abjuration [UB] **[Druid, Ranger, Sorcerer, Wizard]** The spell captures some of the incoming energy, lessening its effect on you and storing it for your next melee attack. You have resistance to the triggering damage type until the start of your next turn. Also, the first time you hit with a melee attack on your next turn, the target takes an extra 1d6 damage of the triggering type, and the spell ends. When you cast this spell using a spell slot of 2nd level or higher, the extra damage increases by 1d6 for each slot level above 1st. -# 47. - Animal Friendship (V,S) level 1 Enchantment [SOL] +# 48. - Animal Friendship (V,S) level 1 Enchantment [SOL] **[Bard, Druid, Ranger]** Choose a beast that you can see within the spell's range. The beast must make a Wisdom saving throw or be charmed for the spell's duration. -# 48. - *Armor of Agathys* © (V,S) level 1 Abjuration [UB] +# 49. - *Armor of Agathys* © (V,S) level 1 Abjuration [UB] **[Warlock]** A protective elemental skin envelops you, covering you and your gear. You gain 5 temporary hit points per spell level for the duration. In addition, if a creature hits you with a melee attack while you have these temporary hit points, the creature takes 5 cold damage per spell level. -# 49. - *Arms of Hadar* © (V,S) level 1 Evocation [UB] +# 50. - *Arms of Hadar* © (V,S) level 1 Evocation [UB] **[Warlock]** You invoke the power of malevolent forces. Tendrils of dark energy erupt from you and batter all creatures within 10 feet of you. Each creature in that area must make a Strength saving throw. On a failed save, a target takes 2d6 necrotic damage and can't take reactions until the start of your next turn. On a successful save, the creature takes half damage, but suffers no other effect. When you cast this spell using a spell slot of 2nd level or higher, the damage increases by 1d6 for each slot level above 1st. -# 50. - Bane (V,S) level 1 Enchantment [Concentration] [SOL] +# 51. - Bane (V,S) level 1 Enchantment [Concentration] [SOL] **[Bard, Cleric]** Reduce your enemies' attack and saving throws for a limited time. -# 51. - Bless (V,S) level 1 Enchantment [Concentration] [SOL] +# 52. - Bless (V,S) level 1 Enchantment [Concentration] [SOL] **[Cleric, Paladin]** Increase your allies' saving throws and attack rolls for a limited time. -# 52. - Burning Hands (V,S) level 1 Evocation [SOL] +# 53. - Burning Hands (V,S) level 1 Evocation [SOL] **[Sorcerer, Wizard]** Spray a cone of fire in front of you. -# 53. - Caustic Zap (V,S) level 1 Evocation [UB] +# 54. - Caustic Zap (V,S) level 1 Evocation [UB] **[Artificer, Sorcerer, Wizard]** You send a jolt of green energy toward the target momentarily disorientating them as the spell burn some of their armor. The spell targets one enemy with a spell attack and deals 1d4 acid and 1d6 lightning damage and applies the dazzled condition. -# 54. - *Chaos Bolt* © (V,S) level 1 Evocation [UB] +# 55. - *Chaos Bolt* © (V,S) level 1 Evocation [UB] **[Sorcerer]** @@ -327,25 +333,25 @@ Make a ranged spell attack against a target. On a hit, the target takes 2d8 + 1d 7: ◹ Psychic 8: ◼ Thunder If you roll the same number on both d8s, you can use your free action to target a different creature of your choice. Make a new attack roll against the new target, and make a new damage roll, which could cause the chaotic energy to leap again. A creature can be damaged only once by each casting of this spell. -# 55. - Charm Person (V,S) level 1 Enchantment [SOL] +# 56. - Charm Person (V,S) level 1 Enchantment [SOL] **[Bard, Druid, Sorcerer, Warlock, Wizard]** Makes an ally of an enemy. -# 56. - *Chromatic Orb* © (M,V,S) level 1 Evocation [UB] +# 57. - *Chromatic Orb* © (M,V,S) level 1 Evocation [UB] **[Sorcerer, Wizard]** You hurl a 4-inch-diameter sphere of energy at a creature that you can see within range. You choose acid, cold, fire, lightning, poison, or thunder for the type of orb you create, and then make a ranged spell attack against the target. If the attack hits, the creature takes 3d8 damage of the type you chose. -# 57. - Color Spray (V,S) level 1 Illusion [SOL] +# 58. - Color Spray (V,S) level 1 Illusion [SOL] **[Sorcerer, Wizard]** Spray a luminous cone that briefly blinds your enemies. Roll 6d10: the total is how many hit points of creatures this spell can affect. -# 58. - *Command* © (V) level 1 Enchantment [UB] +# 59. - *Command* © (V) level 1 Enchantment [UB] **[Bard, Cleric, Paladin]** @@ -353,438 +359,438 @@ You speak a one-word command to a creature you can see within range. The target You can only command creatures you share a language with. Humanoids are considered knowing Common. To command a non-humanoid creature, you must know Draconic for Dragons, Elvish for Fey, Giant for Giants, Infernal for Fiends and Terran for Elementals. Cannot target Undead or Surprised creatures. -# 59. - Comprehend Languages (V,S) level 1 Divination [SOL] +# 60. - Comprehend Languages (V,S) level 1 Divination [SOL] **[Bard, Sorcerer, Warlock, Wizard]** For the duration of the spell, you understand the literal meaning of any spoken words that you hear. -# 60. - Cure Wounds (V,S) level 1 Evocation [SOL] +# 61. - Cure Wounds (V,S) level 1 Evocation [SOL] **[Artificer, Bard, Cleric, Druid, Paladin, Ranger]** Heal an ally by touch. -# 61. - Detect Evil and Good (V,S) level 1 Divination [Concentration] [SOL] +# 62. - Detect Evil and Good (V,S) level 1 Divination [Concentration] [SOL] **[Cleric, Paladin]** Detect nearby creatures of evil or good nature. -# 62. - Detect Magic (V,S) level 1 Divination [Concentration] [SOL] +# 63. - Detect Magic (V,S) level 1 Divination [Concentration] [SOL] **[Artificer, Bard, Cleric, Druid, Paladin, Ranger, Sorcerer, Wizard]** Detect nearby magic objects or creatures. -# 63. - Detect Poison and Disease (V,S) level 1 Divination [Concentration] [SOL] +# 64. - Detect Poison and Disease (V,S) level 1 Divination [Concentration] [SOL] **[Druid]** TMP For the duration you sense the presence and location of poisonous creatures and diseases within 6 cells of you. -# 64. - *Dissonant Whispers* © (V) level 1 Enchantment [UB] +# 65. - *Dissonant Whispers* © (V) level 1 Enchantment [UB] **[Bard]** You whisper a discordant melody that only one creature of your choice within range can hear, wracking it with terrible pain. The target must make a Wisdom saving throw. On a failed save, it takes 3d6 psychic damage and must immediately use its reaction, if available, to move as far as its speed allows away from you. The creature doesn't move into obviously dangerous ground, such as a fire or a pit. On a successful save, the target takes half as much damage and doesn't have to move away. When you cast this spell using a spell slot of 2nd level or higher, the damage increases by 1d6 for each slot level above 1st. -# 65. - Divine Favor (V,S) level 1 Evocation [Concentration] [SOL] +# 66. - Divine Favor (V,S) level 1 Evocation [Concentration] [SOL] **[Paladin]** Gain additional radiant damage for a limited time. -# 66. - *Earth Tremor* © (V,S) level 1 Evocation [UB] +# 67. - *Earth Tremor* © (V,S) level 1 Evocation [UB] **[Bard, Druid, Sorcerer, Wizard]** You strike the ground and unleash a tremor of seismic force, hurling up earth, rock, and sand. -# 67. - *Ensnaring Strike* © (V) level 1 Conjuration [Concentration] [UB] +# 68. - *Ensnaring Strike* © (V) level 1 Conjuration [Concentration] [UB] **[Ranger]** The next time you hit a creature with a weapon attack before this spell ends, a writhing mass of thorny vines appears at the point of impact, and the target must succeed on a Strength saving throw or be restrained by the magical vines until the spell ends.While restrained by this spell, the target takes 1d6 piercing damage at the start of each of its turns. A creature restrained by the vines can use its action to make a Strength check against your spell save DC. -# 68. - Entangle (V,S) level 1 Conjuration [Concentration] [SOL] +# 69. - Entangle (V,S) level 1 Conjuration [Concentration] [SOL] **[Druid]** Creatures in a four-cell square area are restrained if they fail a STR saving throw -# 69. - Expeditious Retreat (V,S) level 1 Transmutation [Concentration] [SOL] +# 70. - Expeditious Retreat (V,S) level 1 Transmutation [Concentration] [SOL] **[Artificer, Sorcerer, Warlock, Wizard]** Gain movement points and become able to dash as a bonus action for a limited time. -# 70. - Faerie Fire (V) level 1 Evocation [Concentration] [SOL] +# 71. - Faerie Fire (V) level 1 Evocation [Concentration] [SOL] **[Artificer, Bard, Druid]** Highlight creatures to give advantage to anyone attacking them. -# 71. - False Life (V,S) level 1 Necromancy [SOL] +# 72. - False Life (V,S) level 1 Necromancy [SOL] **[Artificer, Sorcerer, Wizard]** Gain a few temporary hit points for a limited time. -# 72. - Feather Fall (V) level 1 Transmutation [SOL] +# 73. - Feather Fall (V) level 1 Transmutation [SOL] **[Artificer, Bard, Sorcerer, Wizard]** Provide a safe landing when you or an ally falls. -# 73. - *Find Familiar* © (V,S) level 1 Conjuration [UB] +# 74. - *Find Familiar* © (V,S) level 1 Conjuration [UB] **[Wizard]** You gain the service of a familiar. The familiar can use the help action, and you can cast any touch or melee hit spell through the familiar. -# 74. - Fog Cloud (V,S) level 1 Conjuration [Concentration] [SOL] +# 75. - Fog Cloud (V,S) level 1 Conjuration [Concentration] [SOL] **[Druid, Ranger, Sorcerer, Wizard]** Generate a sphere of thick fog for a limited time. The area is heavily obscured, penalizing creatures inside it that rely on sight. -# 75. - *Gift of Alacrity* © (V,S) level 1 Divination [UB] +# 76. - *Gift of Alacrity* © (V,S) level 1 Divination [UB] **[Wizard]** You touch a willing creature. For the duration, the target can add 1d8 to its initiative rolls. -# 76. - Goodberry (V,S) level 1 Transmutation [SOL] +# 77. - Goodberry (V,S) level 1 Transmutation [SOL] **[Druid, Ranger]** Creates 10 berries infused with magic. Eating a berry restores 1 hit point and provides sustenance for a long rest. Berries vanish after a long rest. -# 77. - Grease (V,S) level 1 Conjuration [SOL] +# 78. - Grease (V,S) level 1 Conjuration [SOL] **[Artificer, Wizard]** Cover an area of 2 x 2 cells with grease. Creatures trying to cross it may fall prone. -# 78. - Guiding Bolt (V,S) level 1 Evocation [SOL] +# 79. - Guiding Bolt (V,S) level 1 Evocation [SOL] **[Cleric]** Launch a radiant attack against an enemy and make them easy to hit. -# 79. - *Hail of Thorns* © (V) level 1 Conjuration [Concentration] [UB] +# 80. - *Hail of Thorns* © (V) level 1 Conjuration [Concentration] [UB] **[Ranger]** The next time you hit a creature with a ranged weapon attack before the spell ends, this spell creates a rain of thorns that sprouts from your ranged weapon or ammunition. In addition to the normal effect of the attack, the target of the attack and each creature within 5 feet of it must make a Dexterity saving throw. A creature takes 1d10 piercing damage on a failed save, or half as much damage on a successful one. -# 80. - Healing Word (V) level 1 Evocation [SOL] +# 81. - Healing Word (V) level 1 Evocation [SOL] **[Bard, Cleric, Druid]** Heal an ally you can see. -# 81. - Hellish Rebuke (V,S) level 1 Evocation [SOL] +# 82. - Hellish Rebuke (V,S) level 1 Evocation [SOL] **[Warlock]** When you are damaged by a creature within range, you can use your reaction to inflict fire damage back. -# 82. - Heroism (V,S) level 1 Enchantment [Concentration] [SOL] +# 83. - Heroism (V,S) level 1 Enchantment [Concentration] [SOL] **[Bard, Paladin]** An ally gains temporary hit points and cannot be frightened for a limited time. -# 83. - Hideous Laughter (V,S) level 1 Enchantment [Concentration] [SOL] +# 84. - Hideous Laughter (V,S) level 1 Enchantment [Concentration] [SOL] **[Bard, Wizard]** Make an enemy helpless with irresistible laughter. -# 84. - Hunter's Mark (V) level 1 Divination [Concentration] [SOL] +# 85. - Hunter's Mark (V) level 1 Divination [Concentration] [SOL] **[Ranger]** An enemy gets additional damage from you, and you can easily detect it for a limited time. -# 85. - *Ice Knife* © (S) level 1 Conjuration [UB] +# 86. - *Ice Knife* © (S) level 1 Conjuration [UB] **[Druid, Sorcerer, Wizard]** You create a shard of ice and fling it at one creature within range. Make a ranged spell attack against the target. On a hit, the target takes 1d10 piercing damage. Hit or miss, the shard then explodes. The target and each creature within 5 feet of the point where the ice exploded must succeed on a Dexterity saving throw or take 2d6 cold damage. When you cast this spell using a spell slot of 2nd level or higher, both the cold and piercing damage increase by 1 die for each slot level above 1st. -# 86. - Identify (M,V,S) level 1 Divination [SOL] +# 87. - Identify (M,V,S) level 1 Divination [SOL] **[Artificer, Bard, Wizard]** Identify the hidden properties of an object. -# 87. - Inflict Wounds (V,S) level 1 Necromancy [SOL] +# 88. - Inflict Wounds (V,S) level 1 Necromancy [SOL] **[Cleric]** Deal necrotic damage to an enemy you hit. -# 88. - Jump (V,S) level 1 Transmutation [SOL] +# 89. - Jump (V,S) level 1 Transmutation [SOL] **[Artificer, Druid, Ranger, Sorcerer, Wizard]** Increase an ally's jumping distance. -# 89. - Jump (V,S) level 1 Transmutation [SOL] +# 90. - Jump (V,S) level 1 Transmutation [SOL] Increase an ally's jumping distance. -# 90. - Longstrider (V,S) level 1 Transmutation [SOL] +# 91. - Longstrider (V,S) level 1 Transmutation [SOL] **[Artificer, Bard, Druid, Ranger, Wizard]** Increases an ally's speed by two cells per turn. -# 91. - Mage Armor (V,S) level 1 Abjuration [SOL] +# 92. - Mage Armor (V,S) level 1 Abjuration [SOL] **[Sorcerer, Wizard]** Provide magical armor to an ally who doesn't wear armor. -# 92. - Magic Missile (V,S) level 1 Evocation [SOL] +# 93. - Magic Missile (V,S) level 1 Evocation [SOL] **[Sorcerer, Wizard]** Strike one or more enemies with projectiles that can't miss. -# 93. - *Magnify Gravity* © (V,S) level 1 Transmutation [UB] +# 94. - *Magnify Gravity* © (V,S) level 1 Transmutation [UB] **[Wizard]** Sharply increase gravity in a 10-foot-radius sphere to crush and slow targets. -# 94. - Malediction (V,S) level 1 Enchantment [Concentration] [SOL] +# 95. - Malediction (V,S) level 1 Enchantment [Concentration] [SOL] **[Warlock]** Until the spell ends, whenever you hit a target with an attack you deal an extra 1d6 magical damage of the same type as the attack's damage. -# 95. - Mule (V,S) level 1 Transmutation [UB] +# 96. - Mule (V,S) level 1 Transmutation [UB] **[Bard, Sorcerer, Warlock, Wizard]** The recipient of this spell is able to ignore the effects of heavy loads or armor on movement speed. They can also carry slightly more weight. -# 96. - Protect vs Evil & Good (V,S) level 1 Abjuration [Concentration] [SOL] +# 97. - Protect vs Evil & Good (V,S) level 1 Abjuration [Concentration] [SOL] **[Cleric, Paladin, Warlock, Wizard]** Touch an ally to give them protection from evil or good creatures for a limited time. -# 97. - Radiant Motes (V,S) level 1 Evocation [UB] +# 98. - Radiant Motes (V,S) level 1 Evocation [UB] **[Artificer, Wizard]** Unleashes a swarm of 4 radiant projectiles that deal 1d4 radiant damage each. When you cast this spell using a spell slot of 2nd level or higher, the spell creates 1 more projectile for each slot above 1st. -# 98. - *Sanctuary* © (V,S) level 1 Abjuration [UB] +# 99. - *Sanctuary* © (V,S) level 1 Abjuration [UB] **[Artificer, Cleric]** You ward a creature within range against attack. Until the spell ends, any creature who targets the warded creature with an attack or a harmful spell must first make a Wisdom saving throw. On a failed save, the creature loses the attack or spell. This spell doesn't protect the warded creature from area effects. If the warded creature makes an attack or casts a spell, this spell ends. -# 99. - *Searing Smite* © (V) level 1 Evocation [Concentration] [UB] +# 100. - *Searing Smite* © (V) level 1 Evocation [Concentration] [UB] **[Paladin, Ranger]** The next time you hit a creature with a melee weapon attack during the spell's duration, your weapon flares with white-hot intensity, and the attack deals an extra 1d6 fire damage to the target and causes the target to ignite in flames. At the start of each of its turns until the spell ends, the target must make a Constitution saving throw. On a failed save, it takes 1d6 fire damage. On a successful save, the spells ends. If the target or a creature within 5 feet of it uses an action to put out the flames, or if some other effect douses the flames (such as the target being submerged in water), the spell ends. When you cast this spell using a spell slot of 2nd level or higher, the extra damage increases by 1d6 for each slot level above 1st. -# 100. - Shield (V,S) level 1 Abjuration [SOL] +# 101. - Shield (V,S) level 1 Abjuration [SOL] **[Sorcerer, Wizard]** Increase your AC by 5 just before you would take a hit. -# 101. - Shield of Faith (V,S) level 1 Abjuration [Concentration] [SOL] +# 102. - Shield of Faith (V,S) level 1 Abjuration [Concentration] [SOL] **[Cleric, Paladin]** Increase an ally's AC by 2 for a limited time. -# 102. - Sleep (V,S) level 1 Enchantment [SOL] +# 103. - Sleep (V,S) level 1 Enchantment [SOL] **[Bard, Sorcerer, Wizard]** Put a number of creatures to sleep for a limited time. Roll 5d8: the total is how many hit points of creatures this spell can affect. -# 103. - *Tasha's Caustic Brew* © (V,S) level 1 Evocation [Concentration] [UB] +# 104. - *Tasha's Caustic Brew* © (V,S) level 1 Evocation [Concentration] [UB] **[Artificer, Sorcerer, Wizard]** A stream of acid emanates from you in a line 30 feet long and 5 feet wide in a direction you choose. Each creature in the line must succeed on a Dexterity saving throw or be covered in acid for the spell's duration or until a creature uses its action to scrape or wash the acid off itself or another creature. A creature covered in the acid takes 2d4 acid damage at start of each of its turns. When you cast this spell using a spell slot 2nd level or higher, the damage increases by 2d4 for each slot level above 1st. -# 104. - *Thunderous Smite* © (V) level 1 Evocation [Concentration] [UB] +# 105. - *Thunderous Smite* © (V) level 1 Evocation [Concentration] [UB] **[Paladin]** The first time you hit with a melee weapon attack during this spell's duration, your weapon rings with thunder that is audible within 300 feet of you, and the attack deals an extra 2d6 thunder damage to the target. Additionally, if the target is a creature, it must succeed on a Strength saving throw or be pushed 10 feet away from you and knocked prone. -# 105. - Thunderwave (V,S) level 1 Evocation [SOL] +# 106. - Thunderwave (V,S) level 1 Evocation [SOL] **[Bard, Druid, Sorcerer, Wizard]** Emit a wave of force that causes damage and pushes creatures and objects away. -# 106. - Tiefling's Hellish Rebuke (V,S) level 1 Evocation [SOL] +# 107. - Tiefling's Hellish Rebuke (V,S) level 1 Evocation [SOL] When you are damaged by a creature withing range, you can use your reaction to inflict fire damage back at them. This tiefling version of the spell is more powerful than the common one but cannot use a higher level Spell Slot to increase damage. -# 107. - *Witch Bolt* © (V,S) level 1 Evocation [Concentration] [UB] +# 108. - *Witch Bolt* © (V,S) level 1 Evocation [Concentration] [UB] **[Sorcerer, Warlock, Wizard]** A beam of crackling, blue energy lances out toward a creature within range, forming a sustained arc of lightning between you and the target. Make a ranged spell attack against that creature. On a hit, the target takes 1d12 lightning damage, and on each of your turns for the duration, you can use your action to deal 1d12 lightning damage to the target automatically. The spell ends if you use your action to do anything else. The spell also ends if the target is ever outside the spell's range. When you cast this spell using a spell slot of 2nd level or higher, the damage increases by 1d12 for each slot level above 1st. -# 108. - *Wrathful Smite* © (V) level 1 Evocation [Concentration] [UB] +# 109. - *Wrathful Smite* © (V) level 1 Evocation [Concentration] [UB] **[Paladin]** The next time you hit with a melee weapon attack during this spell's duration, your attack deals an extra 1d6 psychic damage. Additionally, if the target is a creature, it must make a Wisdom saving throw or be frightened of you until the spell ends. As an action, the creature can make a Wisdom check against your spell save DC to steel its resolve and end this spell. -# 109. - *Zephyr Strike* © (V) level 1 Transmutation [Concentration] [UB] +# 110. - *Zephyr Strike* © (V) level 1 Transmutation [Concentration] [UB] **[Ranger]** You move like the wind. For the duration, your movement doesn't provoke opportunity attacks. Once before the spell ends, you can give yourself advantage on one weapon attack roll on your turn. That attack deals an extra 1d8 force damage on a hit. Whether you hit or miss, your walking speed increases by 30 feet until the end of that turn. -# 110. - Acid Arrow (V,S) level 2 Evocation [SOL] +# 111. - Acid Arrow (V,S) level 2 Evocation [SOL] **[Wizard]** Launch an acid arrow that deals some damage even if you miss your shot. -# 111. - *Aganazzar's Scorcher* © (V,S) level 2 Evocation [UB] +# 112. - *Aganazzar's Scorcher* © (V,S) level 2 Evocation [UB] **[Sorcerer, Wizard]** A line of roaring flame 30 feet long and 5 feet wide emanates from you in a direction you choose. Each creature in the line must make a Dexterity saving throw. A creature takes 3d10 fire damage on a failed save, or half as much damage on a successful one. When you cast this spell using a spell slot of 3rd level or higher, the damage increases by 1d10 for each slot level above 2nd. -# 112. - Aid (V,S) level 2 Abjuration [SOL] +# 113. - Aid (V,S) level 2 Abjuration [SOL] **[Artificer, Cleric, Paladin]** Temporarily increases hit points for up to three allies. -# 113. - Barkskin (V,S) level 2 Transmutation [Concentration] [SOL] +# 114. - Barkskin (V,S) level 2 Transmutation [Concentration] [SOL] **[Druid, Ranger]** Gives you or an ally you can touch an AC of at least 16. -# 114. - Blindness (V) level 2 Necromancy [SOL] +# 115. - Blindness (V) level 2 Necromancy [SOL] **[Bard, Cleric, Sorcerer, Wizard]** Blind an enemy for one minute. -# 115. - Blur (V) level 2 Illusion [Concentration] [SOL] +# 116. - Blur (V) level 2 Illusion [Concentration] [SOL] **[Artificer, Sorcerer, Wizard]** Makes you blurry and harder to hit for up to one minute. -# 116. - *Borrowed Knowledge* © (V,S) level 2 Divination [UB] +# 117. - *Borrowed Knowledge* © (V,S) level 2 Divination [UB] **[Bard, Cleric, Warlock, Wizard]** You draw on knowledge from spirits of the past. Choose one skill in which you lack proficiency. For 1 hour, you have proficiency in the chosen skill. The spell ends early if you cast it again. -# 117. - Branding Smite (V) level 2 Evocation [Concentration] [SOL] +# 118. - Branding Smite (V) level 2 Evocation [Concentration] [SOL] **[Paladin]** Your next hit causes additional radiant damage and your target becomes luminous. -# 118. - Calm Emotions (V,S) level 2 Enchantment [Concentration] [SOL] +# 119. - Calm Emotions (V,S) level 2 Enchantment [Concentration] [SOL] **[Bard, Cleric]** Stops allies from being charmed or frightened and makes hostile humanoids indifferent. -# 119. - *Cloud of Daggers* © (V,S) level 2 Conjuration [Concentration] [UB] +# 120. - *Cloud of Daggers* © (V,S) level 2 Conjuration [Concentration] [UB] **[Bard, Sorcerer, Warlock, Wizard]** You fill the air with spinning daggers in a cube 5 feet on each side, centered on a point you choose within range. A creature takes 4d4 slashing damage when it enters the spell's area for the first time on a turn or starts its turn there. When you cast this spell using a spell slot of 3rd level or higher, the damage increases by 2d4 for each slot level above 2nd. -# 120. - Color Burst (V,S) level 2 Illusion [UB] +# 121. - Color Burst (V,S) level 2 Illusion [UB] **[Artificer, Sorcerer, Wizard]** Burst a luminous cube that briefly blinds anyone within 10 ft. 8d10 is how many hit points of creatures this spell can affect. -# 121. - Conjure Goblinoids (V,S) level 2 Conjuration [Concentration] [UB] +# 122. - Conjure Goblinoids (V,S) level 2 Conjuration [Concentration] [UB] **[Druid, Ranger]** Conjures 2 goblins who obey your orders unless you lose concentration. -# 122. - Darkness (V) level 2 Evocation [Concentration] [SOL] +# 123. - Darkness (V) level 2 Evocation [Concentration] [SOL] **[Sorcerer, Warlock, Wizard]** Create an area of magical darkness. -# 123. - Darkvision (V,S) level 2 Transmutation [SOL] +# 124. - Darkvision (V,S) level 2 Transmutation [SOL] **[Artificer, Druid, Ranger, Sorcerer, Wizard]** Grant Darkvision to the target. -# 124. - Enhance Ability (V,S) level 2 Transmutation [Concentration] [SOL] +# 125. - Enhance Ability (V,S) level 2 Transmutation [Concentration] [SOL] **[Artificer, Bard, Cleric, Druid]** Grant temporary powers to an ally for up to one hour. -# 125. - Find Traps (V,S) level 2 Evocation [SOL] +# 126. - Find Traps (V,S) level 2 Evocation [SOL] **[Cleric, Druid, Ranger]** Spot mechanical and magical traps, but not natural hazards. -# 126. - Flame Blade (V,S) level 2 Evocation [Concentration] [SOL] +# 127. - Flame Blade (V,S) level 2 Evocation [Concentration] [SOL] **[Druid]** Evokes a fiery blade for ten minutes that you can wield in battle. -# 127. - Flaming Sphere (V,S) level 2 Evocation [Concentration] [SOL] +# 128. - Flaming Sphere (V,S) level 2 Evocation [Concentration] [SOL] **[Druid, Wizard]** Summons a movable, burning sphere. -# 128. - Heat Metal (V,S) level 2 Transmutation [Concentration] [SOL] +# 129. - Heat Metal (V,S) level 2 Transmutation [Concentration] [SOL] **[Artificer, Bard, Druid]** Causes metallic armor worn by a target creature to glow red hot, causing fire damage and disadvantage to attack rolls and ability checks. The damage can be repeated every turn with a bonus action. -# 129. - Hold Person (V,S) level 2 Enchantment [Concentration] [SOL] +# 130. - Hold Person (V,S) level 2 Enchantment [Concentration] [SOL] **[Bard, Cleric, Druid, Sorcerer, Warlock, Wizard]** Paralyze a humanoid you can see for a limited time. -# 130. - Invisibility (V,S) level 2 Illusion [Concentration] [SOL] +# 131. - Invisibility (V,S) level 2 Illusion [Concentration] [SOL] **[Artificer, Bard, Sorcerer, Warlock, Wizard]** Make an ally invisible for a limited time. -# 131. - *Kinetic Jaunt* © (S) level 2 Evocation [Concentration] [UB] +# 132. - *Kinetic Jaunt* © (S) level 2 Evocation [Concentration] [UB] **[Artificer, Bard, Sorcerer, Wizard]** @@ -793,36 +799,36 @@ You magically empower your movement with dance like steps, giving yourself the f • You don't provoke opportunity attacks. • You can move through the space of any creature. -# 132. - Knock (V) level 2 Transmutation [SOL] +# 133. - Knock (V) level 2 Transmutation [SOL] **[Bard, Sorcerer, Wizard]** Magically open locked doors, chests, and the like. -# 133. - Lesser Restoration (V,S) level 2 Abjuration [SOL] +# 134. - Lesser Restoration (V,S) level 2 Abjuration [SOL] **[Artificer, Bard, Cleric, Druid, Paladin, Ranger]** Remove a detrimental condition from an ally. -# 134. - Levitate (V,S) level 2 Transmutation [Concentration] [SOL] +# 135. - Levitate (V,S) level 2 Transmutation [Concentration] [SOL] **[Artificer, Sorcerer, Wizard]** Allow a creature to levitate and gain control of its aerial movement for a limited time. Can affect enemies if their size is medium or smaller. -# 135. - Levitate (V,S) level 2 Transmutation [Concentration] [SOL] +# 136. - Levitate (V,S) level 2 Transmutation [Concentration] [SOL] Allow a creature to levitate and gain control of its aerial movement for a limited time. Can affect enemies if their size is medium or smaller. -# 136. - Magic Weapon (V,S) level 2 Transmutation [Concentration] [SOL] +# 137. - Magic Weapon (V,S) level 2 Transmutation [Concentration] [SOL] **[Artificer, Paladin, Wizard]** A nonmagical weapon becomes a +1 weapon for up to one hour. -# 137. - *Mirror Image* © (V,S) level 2 Illusion [UB] +# 138. - *Mirror Image* © (V,S) level 2 Illusion [UB] **[Bard, Sorcerer, Warlock, Wizard]** @@ -831,348 +837,348 @@ If you have 3 duplicates, you must roll a 6 or higher to change the attack's tar A duplicate's AC is equal to 10 + your Dexterity modifier. If an attack hits a duplicate, the duplicate is destroyed. A duplicate can be destroyed only by an attack that hits it. It ignores all other damage and effects. The spell ends when all three duplicates are destroyed. A creature is unaffected by this spell if it is Blinded, or has Blindsight, Truesight or Tremorsense (doesn't apply if you don't touch ground). -# 138. - Misty Step (V) level 2 Conjuration [SOL] +# 139. - Misty Step (V) level 2 Conjuration [SOL] **[Sorcerer, Warlock, Wizard]** Teleports you to a free cell you can see, no more than 6 cells away. -# 139. - Moon Beam (V,S) level 2 Evocation [Concentration] [SOL] +# 140. - Moon Beam (V,S) level 2 Evocation [Concentration] [SOL] **[Druid]** Conjures a vertical column of moonlight which causes radiant damage. Shapechangers have disadvantage on the save. -# 140. - Noxious Spray (V,S) level 2 Evocation [UB] +# 141. - Noxious Spray (V,S) level 2 Evocation [UB] **[Druid, Sorcerer, Warlock, Wizard]** You unleash a spray of noxious gases on a target within range. Make a ranged spell attack. On a hit, the target takes 4d6 poison damage and must succeed on a Constitution saving throw or spend all its next turn retching and heaving, unable to move or take actions. Constructs, elementals and undead are unaffected by this spell. When you cast this spell using a slot of 3rd level or higher, you can target one additional creature for each slot level above 2nd. -# 141. - Pass Without Trace (V,S) level 2 Abjuration [Concentration] [SOL] +# 142. - Pass Without Trace (V,S) level 2 Abjuration [Concentration] [SOL] **[Druid, Ranger]** Make yourself and up to 5 allies stealthier for one hour. -# 142. - Petal Storm (V,S) level 2 Conjuration [Concentration] [UB] +# 143. - Petal Storm (V,S) level 2 Conjuration [Concentration] [UB] **[Druid]** Choose an unoccupied 15-foot cube of air that you can see within range. An elemental force of swirling winds appears in the cube and lasts for the spell's duration. The cloud heavily obscures its area. Any creature that enters the storm for the first time on a turn or starts its turn there must make a Strength saving throw. On a failed save, the creature takes 3d4 slashing damage. As a bonus action, you can move the storm up to 30 ft in any direction. -# 143. - Prayer of Healing (V) level 2 Evocation [SOL] +# 144. - Prayer of Healing (V) level 2 Evocation [SOL] **[Cleric]** Heal multiple allies at the same time. -# 144. - Protect Threshold (V,S) level 2 Abjuration [UB] +# 145. - Protect Threshold (V,S) level 2 Abjuration [UB] **[Cleric, Druid, Paladin]** Tracing arcane sigils along its boundary, you can ward a doorway, window, or other portal from entry. For the duration, an invisible eldritch creature stalks the warded portal. Any creature that attempts to pass through the portal must make a Wisdom saving throw or take 4d6 psychic damage, or half as much on a successful save. -# 145. - Protection from Poison (V,S) level 2 Abjuration [SOL] +# 146. - Protection from Poison (V,S) level 2 Abjuration [SOL] **[Artificer, Druid, Paladin, Ranger]** Cures and protects against poison. -# 146. - Ray of Enfeeblement (V,S) level 2 Necromancy [Concentration] [SOL] +# 147. - Ray of Enfeeblement (V,S) level 2 Necromancy [Concentration] [SOL] **[Sorcerer, Warlock, Wizard]** Weaken an enemy so they deal less damage for one minute. -# 147. - *Rime's Binding Ice* © (S) level 2 Evocation [UB] +# 148. - *Rime's Binding Ice* © (S) level 2 Evocation [UB] **[Sorcerer, Wizard]** A burst of cold energy emanates from you in a 30-foot cone. Each creature in that area must make a Constitution saving throw. On a failed save, a creature takes 3d8 cold damage and is hindered by ice formations for 1 minute, or until it uses an action to break away the ice. A creature hindered by ice has its speed reduced to 0. On a successful save, a creature takes half as much damage and isn't hindered by ice. -# 148. - Scorching Ray (V,S) level 2 Evocation [SOL] +# 149. - Scorching Ray (V,S) level 2 Evocation [SOL] **[Sorcerer, Wizard]** Fling rays of fire at one or more enemies. -# 149. - See Invisibility (V,S) level 2 Divination [SOL] +# 150. - See Invisibility (V,S) level 2 Divination [SOL] **[Artificer, Bard, Sorcerer, Wizard]** You can see invisible creatures. -# 150. - *Shadow Blade* © (V,S) level 2 Illusion [Concentration] [UB] +# 151. - *Shadow Blade* © (V,S) level 2 Illusion [Concentration] [UB] **[Sorcerer, Warlock, Wizard]** You weave together threads of shadow to create a dagger of solidified gloom in your hand. It deals 2d8 psychic damage on a hit and has the finesse, light, and thrown properties. In addition, when you use it to attack a target that is in dim light or darkness, you make the attack roll with advantage. -# 151. - Shatter (V,S) level 2 Evocation [SOL] +# 152. - Shatter (V,S) level 2 Evocation [SOL] **[Bard, Sorcerer, Warlock, Wizard]** Triggers a sudden noise that causes Thunder Damage in a 2-cell radius. -# 152. - Silence (V,S) level 2 Illusion [Concentration] [SOL] +# 153. - Silence (V,S) level 2 Illusion [Concentration] [SOL] **[Bard, Cleric, Ranger]** Creates a sphere four cells in radius, inside which sound cannot exist. Stops thunder damage and prevents spellcasting using verbal components. -# 153. - *Snilloc's Snowball Storm* © (V,S) level 2 Evocation [UB] +# 154. - *Snilloc's Snowball Storm* © (V,S) level 2 Evocation [UB] **[Sorcerer, Wizard]** A flurry of magic snowballs erupts from a point you choose within range. Each creature in a 3x3 cube centered on that point must make a Dexterity saving throw. A creature takes 3d8 cold damage on a failed save, or half as much damage on a successful one. When you cast this spell using a spell slot of 3rd level or higher, the damage increases by 1d8 for each slot level above 2nd. -# 154. - Spider Climb (V,S) level 2 Transmutation [Concentration] [SOL] +# 155. - Spider Climb (V,S) level 2 Transmutation [Concentration] [SOL] **[Artificer, Sorcerer, Warlock, Wizard]** Touch an ally to allow them to climb walls like a spider for a limited time. -# 155. - Spike Growth (V,S) level 2 Transmutation [Concentration] [SOL] +# 156. - Spike Growth (V,S) level 2 Transmutation [Concentration] [SOL] **[Druid, Ranger]** Grows spikes and thorns in the area, making the terrain difficult and causing damage for every cell of movement. -# 156. - Spiritual Weapon (V,S) level 2 Evocation [SOL] +# 157. - Spiritual Weapon (V,S) level 2 Evocation [SOL] **[Cleric]** Summon a weapon that fights for you. -# 157. - *Tasha's Mind Whip* © (V) level 2 Enchantment [UB] +# 158. - *Tasha's Mind Whip* © (V) level 2 Enchantment [UB] **[Sorcerer, Wizard]** You psychically lash out at one creature you can see within range. The target must make an Intelligence saving throw. On a failed save, the target takes 3d6 psychic damage, and it can't take a reaction until the end of its next turn. Moreover, on its next turn, it must choose whether it gets a move, an action, or a bonus action; it gets only one of the three. On a successful save, the target takes half as much damage and suffers none of the spell's other effects. When you cast this spell using a spell slot of 3rd level or higher, you can target one additional creature for each slot level above 2nd. -# 158. - *Warding Bond* © (V,S) level 2 Abjuration [SOL] +# 159. - *Warding Bond* © (V,S) level 2 Abjuration [SOL] Creates a bond with the target, who gains +1 AC, +1 to saving throws and resistance to all damage, but you share all damage it receives. Lasts for one hour. -# 159. - *Web* © (V,S) level 2 Conjuration [Concentration] [UB] +# 160. - *Web* © (V,S) level 2 Conjuration [Concentration] [UB] **[Artificer, Sorcerer, Wizard]** You conjure a mass of thick, sticky webbing at a point of your choice within range. The webs fill a 20-foot cube from that point for the duration. The webs are difficult terrain and lightly obscure their area. Each creature that enters them during its turn must make a Dexterity saving throw. On a failed save, the creature is restrained as long as it remains in the webs or until it breaks free. A creature restrained by the webs can use its actions to make a Strength check against your spell save DC. If it succeeds, it is no longer restrained. -# 160. - *Wither and Bloom* © (V,S) level 2 Necromancy [UB] +# 161. - *Wither and Bloom* © (V,S) level 2 Necromancy [UB] **[Druid, Sorcerer, Wizard]** You invoke both death and life upon a 10-foot-radius sphere centered on an ally. Each enemy in that area must make a Constitution saving throw, taking 2d6 necrotic damage on a failed save, or half as much damage on a successful one. In addition, the target spends and rolls one of its unspent Hit Dice and regain a number of hit points equal to the roll plus your spellcasting ability modifier. When you cast this spell using a spell slot of 3rd level or higher, the damage increases by 1d6 for each slot above 2nd, and the number of Hit Dice that can be spent and added to the healing roll increases by one for each slot above 2nd. -# 161. - Adder's Fangs (V,S) level 3 Conjuration [UB] +# 162. - Adder's Fangs (V,S) level 3 Conjuration [UB] **[Druid, Ranger, Sorcerer, Warlock]** You create the visage of a massive green snake that appears for an instant before bearing down on your foe. Choose a creature you can see within range. The target must make a constitution saving throw, taking 4d10 poison damage on a failure, or half as much damage on a successful one. A creature that fails its saving throw is also poisoned, and its speed is halved while poisoned by this spell. At the end of each of its turns, a target may make a constitution saving throw, ending the poison on a success. Otherwise, the poison lasts for 1 minute. When you cast this spell using a spell slot of 4th level or higher, you may target an additional creature within range for each slot level above 3rd. -# 162. - *Ashardalon's Stride* © (V,S) level 3 Transmutation [Concentration] [UB] +# 163. - *Ashardalon's Stride* © (V,S) level 3 Transmutation [Concentration] [UB] **[Artificer, Ranger, Sorcerer, Wizard]** The billowing flames of a dragon blast from your feet, granting you explosive speed. For the duration, your speed increases by 20 feet and moving doesn't provoke opportunity attacks. When you move within 5 feet of a creature, it takes 1d6 fire damage from your trail of heat. A creature can take this damage only once during a turn. When you cast this spell using a spell slot of 4th level or higher, increase your speed by 5 feet for each spell slot level above 3rd. The spell deals an additional 1d6 fire damage for each slot level above 3rd. -# 163. - *Aura of Vitality* © (V) level 3 Evocation [Concentration] [UB] +# 164. - *Aura of Vitality* © (V) level 3 Evocation [Concentration] [UB] **[Cleric, Paladin]** Healing energy radiates from you in an aura with a 30-foot radius. Until the spell ends, the aura moves with you, centered on you. You can use a bonus action to cause one creature in the aura (including you) to regain 2d6 hit points. -# 164. - Beacon of Hope (V,S) level 3 Abjuration [Concentration] [SOL] +# 165. - Beacon of Hope (V,S) level 3 Abjuration [Concentration] [SOL] **[Cleric]** Raise hope and vitality. -# 165. - Bestow Curse (V,S) level 3 Necromancy [Concentration] [SOL] +# 166. - Bestow Curse (V,S) level 3 Necromancy [Concentration] [SOL] **[Bard, Cleric, Wizard]** Curses a creature you can touch. -# 166. - *Blinding Smite* © (V) level 3 Evocation [Concentration] [UB] +# 167. - *Blinding Smite* © (V) level 3 Evocation [Concentration] [UB] **[Paladin]** The next time you hit a creature with a melee weapon attack during this spell's duration, you weapon flares with a bright light, and the attack deals an extra 3d8 radiant damage to the target. Additionally, the target must succeed on a Constitution saving throw or be blinded until the spell ends. A creature blinded by this spell makes another Constitution saving throw at the end of each of its turns. On a successful save, it is no longer blinded. -# 167. - Call Lightning (V,S) level 3 Conjuration [Concentration] [SOL] +# 168. - Call Lightning (V,S) level 3 Conjuration [Concentration] [SOL] **[Druid]** Conjures a storm cloud from which you can call a vertical bolt of lightning to strike targets, dealing 3D10 lightning damage. Another bolt can be repeated every turn by using an action. -# 168. - Conjure Animal (V,S) level 3 Conjuration [Concentration] [SOL] +# 169. - Conjure Animal (V,S) level 3 Conjuration [Concentration] [SOL] **[Druid, Ranger]** Summon spirits in the form of beasts to help you in battle -# 169. - Corrupting Bolt (V,S) level 3 Necromancy [UB] +# 170. - Corrupting Bolt (V,S) level 3 Necromancy [UB] **[Sorcerer, Warlock, Wizard]** You can fire a pulse of necrotic energy that causes a creature's body to begin to wither and decay. Make a ranged attack against a creature. On a hit, the target takes 4d8 necrotic damage and must succeed a Constitution saving throw. On a failed saving throw, the next time you or an ally of yours hits the corrupted creature with an attack before the end of your next turn, the creature has vulnerability to all of that attack's damage, and then the corruption ends. When you cast this spell using a spell slot of 4th level or higher, the damage increases by 1d8 for each slot level above 3rd. -# 170. - Counterspell (S) level 3 Abjuration [SOL] +# 171. - Counterspell (S) level 3 Abjuration [SOL] **[Sorcerer, Warlock, Wizard]** Interrupt an enemy's spellcasting. -# 171. - Create Food (S) level 3 Conjuration [SOL] +# 172. - Create Food (S) level 3 Conjuration [SOL] **[Artificer, Cleric, Paladin]** Conjure 15 units of food. -# 172. - *Crusader's Mantle* © (V) level 3 Evocation [Concentration] [UB] +# 173. - *Crusader's Mantle* © (V) level 3 Evocation [Concentration] [UB] **[Paladin]** Surround yourself with a magical aura. Allies within the aura gain a bonus 1d4 radiant damage on their attacks. -# 173. - Daylight (V,S) level 3 Evocation [SOL] +# 174. - Daylight (V,S) level 3 Evocation [SOL] **[Cleric, Druid, Paladin, Ranger, Sorcerer]** Summon a globe of bright light. -# 174. - Dispel Magic (V,S) level 3 Abjuration [SOL] +# 175. - Dispel Magic (V,S) level 3 Abjuration [SOL] **[Artificer, Bard, Cleric, Druid, Paladin, Sorcerer, Warlock, Wizard]** End active spells on a creature or object. -# 175. - *Elemental Weapon* © (V,S) level 3 Transmutation [Concentration] [UB] +# 176. - *Elemental Weapon* © (V,S) level 3 Transmutation [Concentration] [UB] **[Artificer, Druid, Paladin, Ranger]** Imbue a non-magical weapon with elemental magic. It gains a +1 to attack and damage rolls, and it gains 1d4 of the corresponding element's damage. When casting with a 5 or 6 spell slots, the effects increased by one die while casting at a spell slot 7 or higher increases the effects by 2. -# 176. - Fear (V,S) level 3 Illusion [Concentration] [SOL] +# 177. - Fear (V,S) level 3 Illusion [Concentration] [SOL] **[Bard, Sorcerer, Warlock, Wizard]** Frighten creatures and force them to flee. -# 177. - Fireball (V,S) level 3 Evocation [SOL] +# 178. - Fireball (V,S) level 3 Evocation [SOL] **[Sorcerer, Wizard]** Launch a fireball that explodes from a point of your choosing. -# 178. - *Flame Arrows* © (M,V,S) level 3 Transmutation [Concentration] [UB] +# 179. - *Flame Arrows* © (M,V,S) level 3 Transmutation [Concentration] [UB] **[Artificer, Druid, Ranger, Sorcerer, Wizard]** You must be wielding a ranged weapon. When a target is hit by it, the target takes an extra 1d6 fire damage. The spell ends when twelve pieces of ammunition have been drawn from the quiver. When you cast this spell using a spell slot of 4th level or higher, the number of pieces of ammunition you can affect with this spell increases by two for each slot level above 3rd. -# 179. - Fly (V,S) level 3 Transmutation [Concentration] [SOL] +# 180. - Fly (V,S) level 3 Transmutation [Concentration] [SOL] **[Artificer, Sorcerer, Warlock, Wizard]** An ally you touch gains the ability to fly for a limited time. -# 180. - Haste (V,S) level 3 Transmutation [Concentration] [SOL] +# 181. - Haste (V,S) level 3 Transmutation [Concentration] [SOL] **[Artificer, Sorcerer, Wizard]** Make an ally faster and more agile, and grant them an additional action for a limited time. -# 181. - *Hunger of Hadar* © (V,S) level 3 Transmutation [Concentration] [UB] +# 182. - *Hunger of Hadar* © (V,S) level 3 Transmutation [Concentration] [UB] **[Warlock]** You open a gateway to the dark between the stars, a region infested with unknown horrors. A 20-foot-radius sphere of blackness and bitter cold appears, centered on a point with range and lasting for the duration. The area extinguishes light, and creatures within it are blinded. Any creature that starts its turn in the area takes 2d6 cold damage. Any creature that ends its turn in the area must succeed on a Dexterity saving throw or take 2d6 acid damage as milky, otherworldly tentacles rub against it. -# 182. - Hypnotic Pattern (S) level 3 Illusion [Concentration] [SOL] +# 183. - Hypnotic Pattern (S) level 3 Illusion [Concentration] [SOL] **[Bard, Sorcerer, Warlock, Wizard]** Charms enemies to make them harmless until attacked, but also affects allies in range. -# 183. - *Intellect Fortress* © (V) level 3 Abjuration [Concentration] [UB] +# 184. - *Intellect Fortress* © (V) level 3 Abjuration [Concentration] [UB] **[Artificer, Bard, Sorcerer, Warlock, Wizard]** For the duration, you or one willing creature you can see within range has resistance to psychic damage, as well as advantage on Intelligence, Wisdom, and Charisma saving throws. When you cast this spell using a spell slot of 4th level or higher, you may target an additional creature within range for each slot level above 3rd. -# 184. - *Life Transference* © (V,S) level 3 Necromancy [UB] +# 185. - *Life Transference* © (V,S) level 3 Necromancy [UB] **[Cleric, Wizard]** You sacrifice some of your health to mend another creature's injuries. You take 4d8 necrotic damage, and one creature of your choice that you can see within range regains a number of hit points equal to twice the necrotic damage you take. When you cast this spell using a spell s lot of 4th level or higher, the damage increases by 1d8 for each slot level above 3rd. -# 185. - *Lightning Arrow* © (V,S) level 3 Transmutation [Concentration] [UB] +# 186. - *Lightning Arrow* © (V,S) level 3 Transmutation [Concentration] [UB] **[Ranger]** The next time you make a ranged weapon attack during the spell's duration, the weapon's ammunition, or the weapon itself if it's a thrown weapon, transforms into a bolt of lightning. Make the attack roll as normal. The target takes 3d8 lightning damage on a hit, or half as much damage on a miss. Whether you hit or miss, each creature within 10 feet of the target must make a Dexterity saving throw. Each of these creatures takes 2d8 lightning damage on a failed save, or half as much damage on a successful one. When you cast this spell using a spell slot of 4th level or higher, the damage for both effects of the spell increases by 1d8 for each slot level above 3rd. -# 186. - Lightning Bolt (V,S) level 3 Evocation [SOL] +# 187. - Lightning Bolt (V,S) level 3 Evocation [SOL] **[Sorcerer, Wizard]** Unleash a stroke of lightning in a direction of your choice, damaging everyone it touches. -# 187. - Mass Healing Word (V) level 3 Evocation [SOL] +# 188. - Mass Healing Word (V) level 3 Evocation [SOL] **[Cleric]** Instantly heals up to six allies you can see. -# 188. - Protection from Energy (V,S) level 3 Abjuration [Concentration] [SOL] +# 189. - Protection from Energy (V,S) level 3 Abjuration [Concentration] [SOL] **[Artificer, Cleric, Druid, Ranger, Sorcerer, Wizard]** Touch one willing creature to give them resistance to this damage type. -# 189. - *Pulse Wave* © (V,S) level 3 Evocation [UB] +# 190. - *Pulse Wave* © (V,S) level 3 Evocation [UB] **[Wizard]** You create intense pressure, unleash it in a 30-foot cone, and decide whether the pressure pulls or pushes creatures and objects. Each creature in that cone must make a Constitution saving throw. A creature takes 6d6 force damage on a failed save, or half as much damage on a successful one. And every creature that fails the save is either pulled 15 feet toward you or pushed 15 feet away from you, depending on the choice you made for the spell. When you cast this spell using a spell slot of 4th level or higher, the damage increases by 1d6 and the distance pulled or pushed increases by 5 feet for each slot level above 3rd. -# 190. - Remove Curse (V,S) level 3 Abjuration [SOL] +# 191. - Remove Curse (V,S) level 3 Abjuration [SOL] **[Cleric, Paladin, Warlock, Wizard]** Removes all curses affecting the target. -# 191. - Revivify (M,V,S) level 3 Necromancy [SOL] +# 192. - Revivify (M,V,S) level 3 Necromancy [SOL] **[Artificer, Cleric, Paladin]** Brings one creature back to life, up to 1 minute after death. -# 192. - Sleet Storm (V,S) level 3 Conjuration [Concentration] [SOL] +# 193. - Sleet Storm (V,S) level 3 Conjuration [Concentration] [SOL] **[Druid, Sorcerer, Wizard]** Creates an area where the ground is slippery, vision is obscured, and concentration is harder. -# 193. - Slow (V,S) level 3 Transmutation [Concentration] [SOL] +# 194. - Slow (V,S) level 3 Transmutation [Concentration] [SOL] **[Sorcerer, Wizard]** Slows and impairs the actions of up to 6 creatures. -# 194. - Spirit Guardians (V,S) level 3 Conjuration [Concentration] [SOL] +# 195. - Spirit Guardians (V,S) level 3 Conjuration [Concentration] [SOL] **[Cleric]** Call forth spirits to protect you. -# 195. - *Spirit Shroud* © (V,S) level 3 Necromancy [Concentration] [UB] +# 196. - *Spirit Shroud* © (V,S) level 3 Necromancy [Concentration] [UB] **[Cleric, Paladin, Warlock, Wizard]** @@ -1181,444 +1187,444 @@ Until the spell ends, any attack you make deals 1d8 extra damage when you hit a In addition, any enemy creature within 10ft of you when you cast, or that enters or starts its turn in that range has its movement speed lowered by 10ft until start of its next turn. When you cast this spell using a spell slot of 4th level or higher, the damage increases by 1d8 for every two slot levels above 3rd. -# 196. - Stinking Cloud (V,S) level 3 Conjuration [Concentration] [SOL] +# 197. - Stinking Cloud (V,S) level 3 Conjuration [Concentration] [SOL] **[Bard, Sorcerer, Wizard]** Create a cloud of incapacitating, noxious gas. -# 197. - *Thunder Step* © (V) level 3 Conjuration [UB] +# 198. - *Thunder Step* © (V) level 3 Conjuration [UB] **[Sorcerer, Warlock, Wizard]** You teleport yourself to an unoccupied space you can see within range. Immediately after you disappear, a thunderous boom sounds, and each creature within 10 feet of the space you left must make a Constitution saving throw, taking 3d10 thunder damage on a failed save, or half as much damage on a successful one. You can also teleport one willing ally. When you cast this spell using a spell slot of 4th level or higher, the damage increases by 1d10 for each slot level above 3rd. -# 198. - Tongues (V) level 3 Divination [SOL] +# 199. - Tongues (V) level 3 Divination [SOL] **[Bard, Cleric, Sorcerer, Warlock, Wizard]** Grants knowledge of all languages for one hour. -# 199. - Vampiric Touch (V,S) level 3 Necromancy [Concentration] [SOL] +# 200. - Vampiric Touch (V,S) level 3 Necromancy [Concentration] [SOL] **[Warlock, Wizard]** Grants you a life-draining melee attack for one minute. -# 200. - Wind Wall (V,S) level 3 Evocation [Concentration] [SOL] +# 201. - Wind Wall (V,S) level 3 Evocation [Concentration] [SOL] **[Druid, Ranger]** Create a wall of wind that causes damage, pushes creatures and objects away, and disperses fogs and gases. -# 201. - Winter's Breath (V,S) level 3 Conjuration [UB] +# 202. - Winter's Breath (V,S) level 3 Conjuration [UB] **[Druid, Sorcerer, Wizard]** Create a blast of cold wind to chill your enemies and knock them prone. -# 202. - *Aura of Life* © (V) level 4 Abjuration [Concentration] [UB] +# 203. - *Aura of Life* © (V) level 4 Abjuration [Concentration] [UB] **[Cleric, Paladin]** Life-preserving energy radiates from you in an aura with a 30-foot radius. Until the spell ends, the aura moves with you, centered on you. Each non-hostile creature in the aura, including you, has resistance to necrotic damage, and its hit point maximum can't be reduced. In addition, a non-hostile, living creature regains 1 hit point when it starts its turn in the aura with 0 hit points. -# 203. - *Aura of Purity* © (V) level 4 Abjuration [Concentration] [UB] +# 204. - *Aura of Purity* © (V) level 4 Abjuration [Concentration] [UB] **[Cleric, Paladin]** Purifying energy radiates from you in an aura with a 30-foot radius. Until the spell ends, the aura moves with you, centered on you. Each non-hostile creature in the aura, including you, can't become diseased, has resistance to poison damage, and has advantage on saving throws against effects that cause any of the following conditions: blinded, charmed, deafened, frightened, paralyzed, poisoned, and stunned. -# 204. - Banishment (V,S) level 4 Abjuration [Concentration] [SOL] +# 205. - Banishment (V,S) level 4 Abjuration [Concentration] [SOL] **[Cleric, Paladin, Sorcerer, Warlock, Wizard]** Banishes a creature as long as you concentrate. The creature can be permanently banished if it is extraplanar. -# 205. - Black Tentacles (V,S) level 4 Conjuration [Concentration] [SOL] +# 206. - Black Tentacles (V,S) level 4 Conjuration [Concentration] [SOL] **[Wizard]** Conjures black tentacles that restrain and damage creatures within the area of effect. -# 206. - Blessing of Rime (V,S) level 4 Evocation [UB] +# 207. - Blessing of Rime (V,S) level 4 Evocation [UB] **[Bard, Druid, Ranger]** You summon a chill wind that numbs the pain of your allies. Choose up to three creatures within range. Each creature gains 3d8 temporary hit points for the duration. While a creature has these hit points, if it would make a Constitution saving throw, it gains advantage on the roll. When you cast this spell using a spell slot of 5th level or higher, the temporary hit points increase by 1d8 for each slot level above 4th. -# 207. - Blight (V,S) level 4 Necromancy [SOL] +# 208. - Blight (V,S) level 4 Necromancy [SOL] **[Druid, Sorcerer, Warlock, Wizard]** Drains life from a creature, causing massive necrotic damage. -# 208. - Brain Bulwark (V) level 4 Abjuration [UB] +# 209. - Brain Bulwark (V) level 4 Abjuration [UB] **[Artificer, Bard, Sorcerer, Warlock, Wizard]** For the duration, you or one willing creature you can see within range has resistance to psychic damage, as well as Immunity to the Charmed, Frightened, Fear, Mind dominated and Mind controlled conditions. -# 209. - Confusion (V,S) level 4 Enchantment [Concentration] [SOL] +# 210. - Confusion (V,S) level 4 Enchantment [Concentration] [SOL] **[Bard, Druid, Sorcerer, Wizard]** Creates confusion and erratic behavior in a creature, possibly leading it to attack its allies. -# 210. - Conjure 4 Elementals (V,S) level 4 Conjuration [Concentration] [SOL] +# 211. - Conjure 4 Elementals (V,S) level 4 Conjuration [Concentration] [SOL] 4 elementals are conjured (CR 1/2). -# 211. - Conjure Minor Elementals (V,S) level 4 Conjuration [Concentration] [SOL] +# 212. - Conjure Minor Elementals (V,S) level 4 Conjuration [Concentration] [SOL] **[Druid, Wizard]** Conjure elemental creatures under your command, which are dismissed when the spell ends or is broken. -# 212. - Death Ward (V,S) level 4 Abjuration [SOL] +# 213. - Death Ward (V,S) level 4 Abjuration [SOL] **[Cleric, Paladin]** Protects the creature once against instant death or being reduced to 0 hit points. -# 213. - Dimension Door (V) level 4 Conjuration [SOL] +# 214. - Dimension Door (V) level 4 Conjuration [SOL] **[Bard, Sorcerer, Warlock, Wizard]** Transfers the caster and a friendly creature to a specified destination. -# 214. - Dominate Beast (V,S) level 4 Enchantment [Concentration] [SOL] +# 215. - Dominate Beast (V,S) level 4 Enchantment [Concentration] [SOL] **[Druid, Sorcerer]** Grants you control over an enemy beast. -# 215. - Dreadful Omen (V,S) level 4 Enchantment [SOL] +# 216. - Dreadful Omen (V,S) level 4 Enchantment [SOL] **[Bard, Warlock]** You whisper dreadful words that cause immense mental anguish in your enemies. On a failed wisdom saving throw, they take psychic damage and become frightened until the end of their next turn, moving away from you as much as possible. On a successful save, they take half as much damage and are not frightened. -# 216. - *Elemental Bane* © (V,S) level 4 Transmutation [Concentration] [UB] +# 217. - *Elemental Bane* © (V,S) level 4 Transmutation [Concentration] [UB] **[Artificer, Druid, Warlock, Wizard]** Choose one creature you can see within range, and choose one of the following damage types: acid, cold, fire, lightning, or thunder. The target must succeed on a Constitution saving throw or be affected by the spell for its duration. The first time each turn the affected target takes non-recurrent damage of the chosen type, the target takes an extra 2d6 damage of that type. Moreover, the target loses any resistance to that damage type until the spell ends. When you cast this spell using a spell slot of 5th level or higher, you can target one additional creature for each slot level above 4th. The creatures must be within 30 feet of each other when you target them. -# 217. - Fire Shield (V,S) level 4 Evocation [SOL] +# 218. - Fire Shield (V,S) level 4 Evocation [SOL] **[Sorcerer, Wizard]** Grants resistance to fire or cold, and damages creatures attacking the caster with melee attacks. -# 218. - Freedom of Movement (V,S) level 4 Abjuration [SOL] +# 219. - Freedom of Movement (V,S) level 4 Abjuration [SOL] **[Artificer, Bard, Cleric, Druid, Ranger]** Grants immunity to movement restrictions, as well as being paralyzed or restrained. -# 219. - Giant Insect (V,S) level 4 Transmutation [Concentration] [SOL] +# 220. - Giant Insect (V,S) level 4 Transmutation [Concentration] [SOL] **[Druid]** Conjures a giant version of a natural insect or arthropod. -# 220. - *Gravity Sinkhole* © (V,S) level 4 Evocation [UB] +# 221. - *Gravity Sinkhole* © (V,S) level 4 Evocation [UB] **[Wizard]** A 20-foot-radius sphere of crushing force forms at a point you can see within range and tugs at the creatures there. Each creature in the sphere must make a Constitution saving throw. On a failed save, the creature takes 5d10 force damage, and is pulled in a straight line toward the center of the sphere, ending in an unoccupied space as close to the center as possible. On a successful save, the creature takes half as much damage and isn't pulled. When you cast this spell using a spell slot of 5th level or higher, the damage increases by 1d10 for each slot level above 4th. -# 221. - Greater Invisibility (V,S) level 4 Illusion [Concentration] [SOL] +# 222. - Greater Invisibility (V,S) level 4 Illusion [Concentration] [SOL] **[Bard, Sorcerer, Wizard]** Target becomes invisible for the duration, even when attacking or casting spells. -# 222. - Guardian of Faith (V) level 4 Conjuration [SOL] +# 223. - Guardian of Faith (V) level 4 Conjuration [SOL] **[Cleric]** Conjures a large spectral guardian that damages approaching enemies. -# 223. - *Guardian of Nature* © (V) level 4 Transmutation [Concentration] [UB] +# 224. - *Guardian of Nature* © (V) level 4 Transmutation [Concentration] [UB] **[Druid, Ranger]** A nature spirit answers your call and transforms you into a powerful guardian. The transformation lasts until the spell ends. You choose between a Beast or a Tree form. -# 224. - Ice Storm (V,S) level 4 Evocation [SOL] +# 225. - Ice Storm (V,S) level 4 Evocation [SOL] **[Druid, Sorcerer, Wizard]** Causes bludgeoning and cold damage in the area, and turns the ground into difficult terrain. -# 225. - Identify Creatures (V,S) level 4 Divination [SOL] +# 226. - Identify Creatures (V,S) level 4 Divination [SOL] **[Wizard]** Reveals full bestiary knowledge for the affected creatures. -# 226. - Irresistible Performance (V) level 4 Enchantment [UB] +# 227. - Irresistible Performance (V) level 4 Enchantment [UB] **[Bard]** You weave a song into the air, causing those who hear it to applaud its magnificence. All creatures of your choice inside a 30-foot-cube within range must make a Charisma saving throw or be forced to clap and shout until the start of your next turn. A creature that is charmed by you always fails this saving throw. A clapping creature cannot perform any actions that require their hands or mouth but can otherwise act normally. This spell has no effect on creatures that are immune to charm. -# 227. - *Mordenkainen's Faithful Hound* © (V,S) level 4 Conjuration [UB] +# 228. - *Mordenkainen's Faithful Hound* © (V,S) level 4 Conjuration [UB] **[Artificer, Wizard]** You conjure a phantom watchdog in an unoccupied space that you can see within range, where it remains for the duration. The hound has Darkvision up to 60 ft, Truesight up to 80 ft, is invisible to all creatures except you and can't be harmed. During each of your turns, the hound can attempt to bite one creature within 5 feet of it that is hostile to you as a free action. The hound's attack bonus is equal to your spellcasting ability modifier + your proficiency bonus. On a hit, it deals 4d8 piercing damage. -# 228. - Phantasmal Killer (V,S) level 4 Illusion [Concentration] [SOL] +# 229. - Phantasmal Killer (V,S) level 4 Illusion [Concentration] [SOL] **[Wizard]** Causes psychic damage to the target creature with each turn, unless a saving throw is successful or the effect ends. -# 229. - Psionic Blast (V) level 4 Evocation [UB] +# 230. - Psionic Blast (V) level 4 Evocation [UB] **[Sorcerer, Warlock, Wizard]** You unleash a debilitating wave of mental power in a 30-foot cone. Each creature in the area must make an Intelligence saving throw. On a failed save, a target takes 5d8 psychic damage, becomes dazzled and has its movement speed halved until the end of your next turn. On a successful save, a target only takes half as much damage. When you cast this spell using a spell slot of 4th level or higher, the damage increases by 1d8 for each slot level above 4th. -# 230. - *Raulothim's Psychic Lance* © (V) level 4 Enchantment [UB] +# 231. - *Raulothim's Psychic Lance* © (V) level 4 Enchantment [UB] **[Bard, Sorcerer, Warlock, Wizard]** You unleash a shimmering lance of psychic power from your forehead at a creature that you can see within range. It must succeed on an Intelligence saving throw or take 7d6 psychic damage and be incapacitated until the end of your next turn. On a successful save, the creature takes half damage and isn't incapacitated. At Higher Levels. When you cast this spell using a spell slot of 4th level or higher, the damage increases by 1d6 for each slot level above 4th. -# 231. - *Sickening Radiance* © (V,S) level 4 Evocation [Concentration] [UB] +# 232. - *Sickening Radiance* © (V,S) level 4 Evocation [Concentration] [UB] **[Sorcerer, Warlock, Wizard]** Dim light spreads within a 30-foot-radius sphere centered on a point you choose within range. The light spreads around corners, and it lasts until the spell ends. When a creature moves into the spell's area for the first time on a turn or starts its turn there, that creature must succeed on a Constitution saving throw or take 4d10 radiant damage, and it suffers one level of exhaustion and emits a dim light in a 5-foot radius. This light makes it impossible for the creature to benefit from being invisible. The light and any levels of exhaustion caused by this spell go away when the spell ends. -# 232. - *Staggering Smite* © (V) level 4 Evocation [Concentration] [UB] +# 233. - *Staggering Smite* © (V) level 4 Evocation [Concentration] [UB] **[Paladin]** The next time you hit a creature with a melee weapon attack during this spell's duration, your weapon pierces both body and mind, and the attack deals an extra 4d6 psychic damage to the target. The target must make a Wisdom saving throw. On a failed save, it has disadvantage on attack rolls and ability checks, and can't take reactions, until the end of its next turn. -# 233. - Stoneskin (M,V,S) level 4 Abjuration [Concentration] [SOL] +# 234. - Stoneskin (M,V,S) level 4 Abjuration [Concentration] [SOL] **[Artificer, Druid, Ranger, Sorcerer, Wizard]** Grants resistance to non-magical bludgeoning, slashing, and piercing damage. -# 234. - *Vitriolic Sphere* © (V,S) level 4 Evocation [UB] +# 235. - *Vitriolic Sphere* © (V,S) level 4 Evocation [UB] **[Sorcerer, Wizard]** You point at a place within range, and a glowing 1-foot ball of emerald acid streaks there and explodes in a 20-foot radius. Each creature in that area must make a Dexterity saving throw. On a failed save, a creature takes 10d4 acid damage and 5d4 acid damage at the end of its next turn. On a successful save, a creature takes half the initial damage and no damage at the end of its next turn. When you cast this spell using a spell slot of 5th level or higher, the initial damage increases by 2d4 for each slot level above 4th. -# 235. - Wall of Fire (V,S) level 4 Evocation [Concentration] [SOL] +# 236. - Wall of Fire (V,S) level 4 Evocation [Concentration] [SOL] **[Druid, Sorcerer, Wizard]** Create a burning wall that injures creatures in or next to it. -# 236. - *Banishing Smite* © (V) level 5 Abjuration [Concentration] [UB] +# 237. - *Banishing Smite* © (V) level 5 Abjuration [Concentration] [UB] **[Paladin]** The next time you hit a creature with a weapon attack before this spell ends, your weapon crackles with force, and the attack deals an extra 5d10 force damage to the target. Additionally, if this attack reduces the target to 50 hit points of fewer, you banish it. If the target is native to a different plane of existence than the on you're on, the target disappears, returning to its home plane. If the target is native to the plane you're on, the creature vanishes into a harmless demi-plane. While there, the target is incapacitated. It remains there until the spell ends, at which point the target reappears in the space it left or in the nearest unoccupied space if that space is occupied. -# 237. - *Circle of Power* © (V) level 5 Abjuration [Concentration] [UB] +# 238. - *Circle of Power* © (V) level 5 Abjuration [Concentration] [UB] **[Paladin]** Divine energy radiates from you, distorting and diffusing magical energy within 30 feet of you. Until the spell ends, the sphere moves with you, centered on you. For the duration, each friendly creature in the area, including you, has advantage on saving throws against spells and other magical effects. Additionally, when an affected creature succeeds on a saving throw made against a spell or magical effect that allows it to make a saving throw to take only half damage, it instead takes no damage if it succeeds on the saving throws. -# 238. - Cloudkill (V,S) level 5 Conjuration [Concentration] [SOL] +# 239. - Cloudkill (V,S) level 5 Conjuration [Concentration] [SOL] **[Sorcerer, Wizard]** Creates an obscuring and poisonous cloud. The cloud moves every round. -# 239. - Cone of Cold (V,S) level 5 Evocation [SOL] +# 240. - Cone of Cold (V,S) level 5 Evocation [SOL] **[Sorcerer, Wizard]** Inflicts massive cold damage in the cone of effect. -# 240. - Conjure Elemental (V,S) level 5 Conjuration [Concentration] [SOL] +# 241. - Conjure Elemental (V,S) level 5 Conjuration [Concentration] [SOL] **[Druid, Wizard]** Conjures an elemental of the chosen element that fights alongside you. If you lose concentration, the elemental remains and becomes hostile. -# 241. - Contagion (V,S) level 5 Necromancy [SOL] +# 242. - Contagion (V,S) level 5 Necromancy [SOL] **[Cleric, Druid]** Hit a creature to inflict a disease from the options. -# 242. - *Dawn* © (V,S) level 5 Evocation [Concentration] [UB] +# 243. - *Dawn* © (V,S) level 5 Evocation [Concentration] [UB] **[Cleric, Wizard]** The light of dawn shines down on a location you specify within range. Until the spell ends, a 30-foot-radius, 40-foot-high cylinder of bright light glimmers there. This light is sunlight. When the cylinder appears, each creature in it must make a Constitution saving throw, taking 4d10 radiant damage on a failed save, or half as much damage on a successful one. A creature must also make this saving throw whenever it ends its turn in the cylinder. If you're within 60 feet of the cylinder, you can move it up to 60 feet as a bonus action on your turn. -# 243. - *Destructive Wave* © (V) level 5 Evocation [UB] +# 244. - *Destructive Wave* © (V) level 5 Evocation [UB] **[Paladin]** You strike the ground, creating a burst of divine energy that ripples outward from you. Each creature you choose within 30 feet of you must succeed on a Constitution saving throw or take 5d6 thunder damage, as well as 5d6 radiant or necrotic damage, and be knocked prone. A creature that succeeds on its saving throw takes half as much damage and isn't knocked prone. -# 244. - Dispel Evil and Good (V,S) level 5 Abjuration [Concentration] [SOL] +# 245. - Dispel Evil and Good (V,S) level 5 Abjuration [Concentration] [SOL] **[Cleric, Paladin]** Celestial, elementals, feys, fiends, and undead have disadvantage on attacks against you. This spell also allows you to cancel hostile enchantments or dismiss extraplanar creatures hit by your attacks once. -# 245. - Dominate Person (V,S) level 5 Enchantment [Concentration] [SOL] +# 246. - Dominate Person (V,S) level 5 Enchantment [Concentration] [SOL] **[Bard, Sorcerer, Wizard]** Grants you control over an enemy creature. -# 246. - *Far Step* © (V) level 5 Conjuration [Concentration] [UB] +# 247. - *Far Step* © (V) level 5 Conjuration [Concentration] [UB] **[Sorcerer, Warlock, Wizard]** You teleport up to 60 ft to an unoccupied space you can see. On each of your turns before the spell ends, you can use a bonus action to teleport in this way again. -# 247. - Flame Strike (V,S) level 5 Evocation [SOL] +# 248. - Flame Strike (V,S) level 5 Evocation [SOL] **[Cleric]** Conjures a burning column of fire and radiance affecting all creatures inside. -# 248. - Greater Restoration (V,S) level 5 Abjuration [SOL] +# 249. - Greater Restoration (V,S) level 5 Abjuration [SOL] **[Artificer, Bard, Cleric, Druid]** Removes one detrimental condition, such as a charm or curse, or an effect that reduces an ability score or hit points. -# 249. - Hold Monster (V,S) level 5 Enchantment [Concentration] [SOL] +# 250. - Hold Monster (V,S) level 5 Enchantment [Concentration] [SOL] **[Bard, Sorcerer, Warlock, Wizard]** Paralyzes a creature unless it succeeds a WIS saving throw. No effect on undead. -# 250. - *Holy Weapon* © (V,S) level 5 Evocation [Concentration] [UB] +# 251. - *Holy Weapon* © (V,S) level 5 Evocation [Concentration] [UB] **[Cleric, Paladin]** You imbue a weapon you touch with holy power. Until the spell ends, the weapon emits bright light in a 30-foot radius and dim light for an additional 30 feet. In addition, weapon attacks made with it deal an extra 2d8 radiant damage on a hit. If the weapon isn't already a magic weapon, it becomes one for the duration. As a bonus action on your turn, if the weapon is within 30 ft, you can dismiss this spell and cause the weapon to emit a burst of radiance. Each creature of your choice that you can see within 30 feet of the weapon must make a Constitution saving throw. On a failed save, a creature takes 4d8 radiant damage, and it is blinded for 1 minute. On a successful save, a creature takes half as much damage and isn't blinded. At the end of each of its turns, a blinded creature can make a Constitution saving throw, ending the effect on itself on a success. -# 251. - *Immolation* © (V) level 5 Evocation [Concentration] [UB] +# 252. - *Immolation* © (V) level 5 Evocation [Concentration] [UB] **[Sorcerer, Wizard]** Flames wreathe one creature you can see within range. The target must make a Dexterity saving throw. It takes 8d6 fire damage on a failed save, or half as much damage on a successful one. On a failed save, the target also burns for the spell's duration. The burning target sheds bright light in a 30-foot radius and dim light for an additional 30 feet and takes 8d6 fire damage at the start of each of its turns. -# 252. - Insect Plague (V,S) level 5 Conjuration [Concentration] [SOL] +# 253. - Insect Plague (V,S) level 5 Conjuration [Concentration] [SOL] **[Cleric, Druid, Sorcerer]** Summons a sphere of biting insects. -# 253. - Mantle of Thorns (V,S) level 5 Transmutation [Concentration] [UB] +# 254. - Mantle of Thorns (V,S) level 5 Transmutation [Concentration] [UB] **[Druid]** Surround yourself with an aura of thorns. Those that start or walk through take 2d8 piercing damage. This damage scales at higher levels by 1d8 per slot. -# 254. - Mass Cure Wounds (V,S) level 5 Evocation [SOL] +# 255. - Mass Cure Wounds (V,S) level 5 Evocation [SOL] **[Bard, Cleric, Druid]** Heals up to 6 creatures. -# 255. - Mind Twist (V,S) level 5 Enchantment [SOL] +# 256. - Mind Twist (V,S) level 5 Enchantment [SOL] **[Sorcerer, Warlock, Wizard]** Causes massive psychic damage to all creatures around you, and incapacitates them if they fail their INT saving throw. -# 256. - Raise Dead (M,V,S) level 5 Necromancy [SOL] +# 257. - Raise Dead (M,V,S) level 5 Necromancy [SOL] **[Bard, Cleric, Paladin]** Brings one creature back to life, up to 10 days after death. -# 257. - *Skill Empowerment* © (V,S) level 5 Divination [UB] +# 258. - *Skill Empowerment* © (V,S) level 5 Divination [UB] **[Artificer, Bard, Sorcerer, Wizard]** Your magic deepens a creature's understanding of its own talent. You touch one willing creature and give it expertise in one skill of your choice; until the spell ends, the creature doubles its proficiency bonus for ability checks it makes that use the chosen skill. For 1 hour, you have proficiency in the chosen skill. The spell ends early if you cast it again. You must choose a skill in which the target is proficient and that isn't already benefiting from expertise. -# 258. - Sonic Boom (V,S) level 5 Evocation [UB] +# 259. - Sonic Boom (V,S) level 5 Evocation [UB] **[Sorcerer, Wizard]** A small orb the same color as the balloon used appears at a point you choose within range then expands with a loud crack into an explosion of force. Each creature in a 30-foot radius must make a Strength saving throw. A target is pushed up to 30 feet away from the center and dealt 6d8 thunder damage on a failed save, or half as much damage and no movement on a successful one. -# 259. - *Steel Wind Strike* © (M,S) level 5 Conjuration [UB] +# 260. - *Steel Wind Strike* © (M,S) level 5 Conjuration [UB] **[Ranger, Wizard]** You flourish the weapon used in the casting and then vanish to strike like the wind. Choose up to five creatures you can see within range. Make a melee spell attack against each target. On a hit, a target takes 6d10 force damage. You can then teleport to an unoccupied space you can see within 5 feet of one of the targets you hit or missed. -# 260. - *Swift Quiver* © (M,V,S) level 5 Transmutation [Concentration] [UB] +# 261. - *Swift Quiver* © (M,V,S) level 5 Transmutation [Concentration] [UB] **[Ranger]** You transmute your quiver so it automatically makes the ammunition leap into your hand when you reach for it. On each of your turns until the spell ends, you can use a bonus action to make two attacks with a ranged weapon. -# 261. - *Synaptic Static* © (V) level 5 Evocation [UB] +# 262. - *Synaptic Static* © (V) level 5 Evocation [UB] **[Bard, Sorcerer, Warlock, Wizard]** You choose a point within range and cause psychic energy to explode there. Each creature in a 20-foot-radius sphere centered on that point must make an Intelligence saving throw. A target takes 8d6 psychic damage on a failed save, or half as much damage on a successful After a failed save, a target has muddled thoughts for 1 minute. During that time, it rolls a d6 and subtracts the number rolled from all its attack rolls and ability checks. The target can make an Intelligence saving throw at the end of each of its turns, ending the effect on itself on a success. -# 262. - *Telekinesis* © (V,S) level 5 Transmutation [Concentration] [UB] +# 263. - *Telekinesis* © (V,S) level 5 Transmutation [Concentration] [UB] **[Sorcerer, Wizard]** You can try to move a Huge or smaller creature. Make an ability check with your spellcasting ability contested by the creature's Strength check. If you win the contest, you move the creature up to 30 feet in any direction, but not beyond the range of this spell. Until the end of your next turn, the creature is restrained in your telekinetic grip. On subsequent rounds, you can use your action to attempt to maintain your telekinetic grip on the creature by repeating the contest, or target a new creature, ending the restrained effect on the previously affected creature. -# 263. - Blade Barrier (V,S) level 6 Evocation [Concentration] [SOL] +# 264. - Blade Barrier (V,S) level 6 Evocation [Concentration] [SOL] **[Cleric]** Conjures a wall of razor sharp blades which causes 6d10 slashing damage to anyone crossing it -# 264. - Chain Lightning (V,S) level 6 Evocation [SOL] +# 265. - Chain Lightning (V,S) level 6 Evocation [SOL] **[Sorcerer, Wizard]** Target a creature with lightning, which can arc to 3 other targets within 6 cells. -# 265. - Circle of Death (M,V,S) level 6 Necromancy [SOL] +# 266. - Circle of Death (M,V,S) level 6 Necromancy [SOL] **[Sorcerer, Warlock, Wizard]** A sphere of negative energy causes Necrotic damage from a point you choose -# 266. - Conjure Fey (V,S) level 6 Conjuration [Concentration] [SOL] +# 267. - Conjure Fey (V,S) level 6 Conjuration [Concentration] [SOL] **[Druid, Warlock]** Conjures a fey creature of challenge rating 1 to 6 to fight alongside you. If you lose concentration, the creature stays but becomes hostile. -# 267. - Disintegrate (V,S) level 6 Transmutation [SOL] +# 268. - Disintegrate (V,S) level 6 Transmutation [SOL] **[Sorcerer, Wizard]** Causes massive force damage on the target, which can be disintegrated if reduced to 0 hit points -# 268. - Eyebite (V,S) level 6 Necromancy [Concentration] [SOL] +# 269. - Eyebite (V,S) level 6 Necromancy [Concentration] [SOL] **[Bard, Sorcerer, Warlock, Wizard]** Your eyes gain a specific property which can target a creature each turn -# 269. - *Fizban's Platinum Shield* © (M,V,S) level 6 Abjuration [Concentration] [UB] +# 270. - *Fizban's Platinum Shield* © (M,V,S) level 6 Abjuration [Concentration] [UB] **[Sorcerer, Wizard]** @@ -1628,85 +1634,85 @@ You create a field of silvery light that surrounds a creature of your choice wit • If the creature is subjected to an effect that allows it to make a Dexterity saving throw to take only half damage, the creature instead takes no damage if it succeeds on the saving throw, and only half damage if it fails. As a bonus action on subsequent turns, you can move the field to another creature within 60 feet of the field. -# 270. - Flash Freeze (V,S) level 6 Evocation [UB] +# 271. - Flash Freeze (V,S) level 6 Evocation [UB] **[Druid, Sorcerer, Warlock]** You attempt to encase a creature you can see within range in a prison of solid ice. The target must make a Dexterity saving throw. On a failed save, the target takes 10d6 cold damage and becomes restrained in layers of thick ice. On a successful save, the target takes half as much damage and is not restrained. The spell can only be used on creatures up to large size. To break out, the restrained target can make a Strength check as an action against your spell save DC. On success, the target escapes and is no longer restrained. When you cast this spell using a spell slot of 7th level or higher, the cold damage increases by 2d6 for each slot level above 6th. -# 271. - Freezing Sphere (V,S) level 6 Evocation [SOL] +# 272. - Freezing Sphere (V,S) level 6 Evocation [SOL] **[Wizard]** Toss a huge ball of cold energy that explodes on impact -# 272. - Globe Of Invulnerability (V,S) level 6 Abjuration [Concentration] [SOL] +# 273. - Globe Of Invulnerability (V,S) level 6 Abjuration [Concentration] [SOL] **[Sorcerer, Wizard]** A sphere surrounding you prevents any spell up to 5th level to affect anyone inside it. -# 273. - Harm (V,S) level 6 Necromancy [SOL] +# 274. - Harm (V,S) level 6 Necromancy [SOL] **[Cleric]** Inflicts devastating necrotic damage and reduces the maximum hit points accordingly. Cannot drop the target below 1 hit points -# 274. - Heal (V,S) level 6 Evocation [SOL] +# 275. - Heal (V,S) level 6 Evocation [SOL] **[Cleric, Druid]** Heals 70 hit points and also removes blindness and diseases -# 275. - Heroes Feast (M,V,S) level 6 Conjuration [SOL] +# 276. - Heroes Feast (M,V,S) level 6 Conjuration [SOL] **[Cleric, Druid]** Summons a feast which cures most ailments and grants immunity to poisonand being frightened, WIS save advantage, and increased maximum hitpoints -# 276. - Hilarity (V) level 6 Enchantment [Concentration] [SOL] +# 277. - Hilarity (V) level 6 Enchantment [Concentration] [SOL] **[Bard, Wizard]** Choose one target. They fall down laughing, becoming prone and incapacitated, and take psychic damage until they save at the end of one of their turns, or until the spell ends. -# 277. - Poison Wave (M,V,S) level 6 Evocation [UB] +# 278. - Poison Wave (M,V,S) level 6 Evocation [UB] **[Wizard]** A poisonous wave erupts from you, engulfing those close by. Each creature within the spell's radius must make a Constitution saving throw, taking 6d10 poison damage on a failure, or half as much damage on a successful one. A creature who fails their saving throw is also poisoned for 1 minute, and can repeat the saving throw at the end of each of its turn. When you cast this spell using a slot of 7th level or higher, the damage increases by 1d10 for each slot level above 6th. -# 278. - Ring of Blades (M,V,S) level 6 Conjuration [Concentration] [UB] +# 279. - Ring of Blades (M,V,S) level 6 Conjuration [Concentration] [UB] **[Wizard]** You raise both hands as you evoke six transparent blades around you as a bonus action. When you cast this spell, and as a bonus action on each subsequent turn, you can throw one of these blades at a creature within 60 feet from you. Make a ranged spell attack. On a hit, the target takes 4d10 force damage. When you cast this spell using a spell slot of 7th level or higher, the damage of each blade increases by 1d10 for each slot level above 6th. -# 279. - *Scatter* © (V) level 6 Conjuration [UB] +# 280. - *Scatter* © (V) level 6 Conjuration [UB] **[Sorcerer, Warlock, Wizard]** The air quivers around up to five creatures of your choice that you can see within range. An unwilling creature must succeed on a Wisdom saving throw to resist this spell. You teleport each affected target to an unoccupied space that you can see within 120 feet of you. That space must be on the ground or on a floor. -# 280. - Shelter from Energy (V,S) level 6 Abjuration [UB] +# 281. - Shelter from Energy (V,S) level 6 Abjuration [UB] **[Cleric, Druid, Sorcerer, Wizard]** Choose one of the following damage types: acid, cold, fire, lightning, necrotic, radiant, or thunder, and then choose up to six willing creatures that you can see within range. For 1 hour, targets have resistance to that damage type. When you cast this spell using a spell slot of 7th level or higher, you may target up to one additional willing creature for each slot level above 6th. -# 281. - Sunbeam (V,S) level 6 Evocation [Concentration] [SOL] +# 282. - Sunbeam (V,S) level 6 Evocation [Concentration] [SOL] **[Druid, Sorcerer, Wizard]** You conjure a line of radiance which can burn and blind creatures in the line of effect; undead and oozes save with disadvantage. The beam can be retargeted each turn -# 282. - *Tasha's Otherworldly Guise* © (M,V,S) level 6 Transmutation [Concentration] [UB] +# 283. - *Tasha's Otherworldly Guise* © (M,V,S) level 6 Transmutation [Concentration] [UB] **[Sorcerer, Warlock, Wizard]** Uttering an incantation, you draw on the magic of the Lower Planes or Upper Planes (your choice) to transform yourself. -# 283. - *Tenser's Transformation* © (V,S) level 6 Transmutation [Concentration] [UB] +# 284. - *Tenser's Transformation* © (V,S) level 6 Transmutation [Concentration] [UB] **[Wizard]** @@ -1718,49 +1724,49 @@ You endow yourself with endurance and martial prowess fueled by magic. Until the • You can attack twice, instead of once, when you take the Attack action on your turn. Immediately after the spell ends, you must succeed on a DC 15 Constitution saving throw or suffer one level of exhaustion. -# 284. - True Seeing (V,S) level 6 Divination [SOL] +# 285. - True Seeing (V,S) level 6 Divination [SOL] **[Bard, Cleric, Sorcerer, Warlock, Wizard]** A creature you touch gains True Sight for one hour -# 285. - Wall of Thorns (V,S) level 6 Conjuration [Concentration] [SOL] +# 286. - Wall of Thorns (V,S) level 6 Conjuration [Concentration] [SOL] **[Druid]** Creates a wall of tough of needle-sharp thorns, that hurts and slows every creature in it. -# 286. - Arcane Sword (M,V,S) level 7 Evocation [Concentration] [SOL] +# 287. - Arcane Sword (M,V,S) level 7 Evocation [Concentration] [SOL] **[Bard, Wizard]** Summon a weapon that fights for you. -# 287. - Conjure Celestial (V,S) level 7 Conjuration [Concentration] [SOL] +# 288. - Conjure Celestial (V,S) level 7 Conjuration [Concentration] [SOL] **[Cleric]** Conjures a celestial creature of challenge rating 4 that fights alongside you. If you lose concentration, the creature is dismissed. -# 288. - *Crown of Stars* © (V,S) level 7 Evocation [UB] +# 289. - *Crown of Stars* © (V,S) level 7 Evocation [UB] **[Sorcerer, Warlock, Wizard]** Seven star-like motes of light appear and orbit your head until the spell ends. You can use a bonus action to send one of the motes streaking toward one creature or object within 120 feet of you. When you do so, make a ranged spell attack. On a hit, the target takes 4d12 radiant damage. Whether you hit or miss, the mote is expended. The spell ends early if you expend the last mote. If you have four or more motes remaining, they shed bright light in a 30-foot radius and dim light for an additional 30 feet. If you have one to three motes remaining, they shed dim light in a 30-foot radius. When you cast this spell using a spell slot of 8th level or higher, the number of motes created increases by two for each slot level above 7th. -# 289. - Delayed Blast Fireball (V,S) level 7 Evocation [Concentration] [SOL] +# 290. - Delayed Blast Fireball (V,S) level 7 Evocation [Concentration] [SOL] **[Sorcerer, Wizard]** Conjures a ball of fire that grows more powerful with time, detonating when a creature enters its space or when the spell ends. -# 290. - Divine Word (V) level 7 Evocation [SOL] +# 291. - Divine Word (V) level 7 Evocation [SOL] **[Cleric]** Utter a divine word that inflicts various negative conditions on enemies you can see, based on their HP. Also banishes all celestials, elementals, feys, and fiends if they fail their saving throws. -# 291. - *Draconic Transformation* © (M,V,S) level 7 Transmutation [Concentration] [UB] +# 292. - *Draconic Transformation* © (M,V,S) level 7 Transmutation [Concentration] [UB] **[Druid, Sorcerer, Wizard]** @@ -1769,210 +1775,216 @@ With a roar, you draw on the magic of dragons to transform yourself, taking on d • When you cast this spell, and as a bonus action on subsequent turns for the duration, you can exhale shimmering energy in a 60-foot cone. Each creature in that area must make a Dexterity saving throw, taking 6d8 force damage on a failed save, or half as much damage on a successful one. • Incorporeal wings sprout from your back, giving you a flying speed of 60 feet. -# 292. - Finger of Death (V,S) level 7 Necromancy [SOL] +# 293. - Finger of Death (V,S) level 7 Necromancy [SOL] **[Sorcerer, Warlock, Wizard]** Send negative energy coursing through a creature within range. -# 293. - Fire Storm (V,S) level 7 Evocation [SOL] +# 294. - Fire Storm (V,S) level 7 Evocation [SOL] **[Cleric, Druid, Sorcerer]** Causes a wide wall of roaring flames to burst up wherever you choose within range. -# 294. - Gravity Slam (V,S) level 7 Transmutation [SOL] +# 295. - Gravity Slam (V,S) level 7 Transmutation [SOL] **[Druid, Sorcerer, Warlock, Wizard]** Increase gravity to slam everyone in a specific area onto the ground. -# 295. - Prismatic Spray (V,S) level 7 Evocation [SOL] +# 296. - Prismatic Spray (V,S) level 7 Evocation [SOL] **[Sorcerer, Wizard]** Each creature within the cone of effect is randomly affected by one or two (roll 8 on d8) rays with the following effects: -# 296. - Regenerate (V,S) level 7 Transmutation [SOL] +# 297. - Regenerate (V,S) level 7 Transmutation [SOL] **[Bard, Cleric, Druid]** Touch a creature and stimulate its natural healing ability. -# 297. - Rescue the Dying (V) level 7 Transmutation [UB] +# 298. - Rescue the Dying (V) level 7 Transmutation [UB] **[Cleric, Druid]** With a word, you call positive energy into the target's body to heal and ward it. The target regains a number of hit points equal to 4d10 + 30. It also gains temporary hit points equal to half that amount and resistance to all damage, both lasting until the end of your next turn. When you cast this spell using a spell slot of 8th level or higher, the healing increases by 2d10 for each slot level above 7th. -# 298. - Resurrection (M,V,S) level 7 Necromancy [SOL] +# 299. - Resurrection (M,V,S) level 7 Necromancy [SOL] **[Bard, Cleric, Druid]** Brings one creature back to life, up to 100 years after death. -# 299. - *Reverse Gravity* © (V,S) level 7 Transmutation [Concentration] [UB] +# 300. - *Reverse Gravity* © (V,S) level 7 Transmutation [Concentration] [UB] **[Druid, Sorcerer, Wizard]** This spell reverses gravity in a 50-foot-radius, 100-foot-high cylinder centered on a point within range. -# 300. - Symbol (V,S) level 7 Abjuration [SOL] +# 301. - Symbol (V,S) level 7 Abjuration [SOL] **[Bard, Cleric, Wizard]** Inscribe a glyph on a surface. When an enemy starts its turn in the area or enters it, the glyph's effect is applied in a sphere with a 12-cell radius. -# 301. - *Abi-Dalzim's Horrid Wilting* © (V,S) level 8 Necromancy [UB] +# 302. - *Abi-Dalzim's Horrid Wilting* © (V,S) level 8 Necromancy [UB] **[Sorcerer, Wizard]** You draw the moisture from every creature in a 30-foot cube centered on a point you choose within range. Each creature in that area must make a Constitution saving throw. Constructs and undead aren't affected, and plants and ice elementals make this saving throw with disadvantage. A creature takes 10d8 necrotic damage on a failed save, or half as much damage on a successful one. -# 302. - Divine Blade (V,S) level 8 Evocation [Concentration] [SOL] +# 303. - Divine Blade (V,S) level 8 Evocation [Concentration] [SOL] **[Cleric]** A glowing blade of pure energy springs from your hand. On a hit, the target takes 6d8 radiant damage and must roll a Wisdom saving throw to avoid being stunned until the end of its next turn. -# 303. - Dominate Monster (V,S) level 8 Enchantment [Concentration] [SOL] +# 304. - Dominate Monster (V,S) level 8 Enchantment [Concentration] [SOL] **[Bard, Sorcerer, Warlock, Wizard]** Grants you control over an enemy creature of any type. -# 304. - Earthquake (V,S) level 8 Evocation [Concentration] [SOL] +# 305. - Earthquake (V,S) level 8 Evocation [Concentration] [SOL] **[Cleric, Druid, Sorcerer]** You create a seismic disturbance that violently shakes the ground and the creatures standing on it for the duration of the spell. -# 305. - Feeblemind (V,S) level 8 Enchantment [SOL] +# 306. - Feeblemind (V,S) level 8 Enchantment [SOL] **[Bard, Druid, Warlock, Wizard]** You blast the mind of one creature, attempting to shatter its intellect and personality. The target takes 4d6 psychic damage and must make an Intelligence saving throw. On a failed save, the creature's Intelligence, Charisma and Wisdom scores become 1 and it is unable to cast spells. These effects last for 1 minute. -# 306. - Holy Aura (V,S) level 8 Abjuration [Concentration] [SOL] +# 307. - *Glibness* © (V) level 8 Transmutation [UB] + +**[Bard, Warlock]** + +Until the spell ends, when you make a Charisma check, you can replace the number you roll with a 15. + +# 308. - Holy Aura (V,S) level 8 Abjuration [Concentration] [SOL] **[Cleric]** Allies within 6 cells of you when you cast Holy Aura gain advantage on all saving throws, and other creatures have disadvantage on attack rolls against them until the spell ends. In addition, when a fiend or an undead hits an affected creature with a melee attack, they must succeed on a Constitution saving throw or be blinded until the spell ends. -# 307. - Incendiary Cloud (V,S) level 8 Conjuration [Concentration] [SOL] +# 309. - Incendiary Cloud (V,S) level 8 Conjuration [Concentration] [SOL] **[Sorcerer, Wizard]** A cloud of smoke appears in a sphere with a 4-cell radius. The cloud damages each creature inside it, and moves away from you each turn until the end of the spell's duration or until a moderate wind disperses the cloud. -# 308. - *Maddening Darkness* © (V) level 8 Evocation [Concentration] [UB] +# 310. - *Maddening Darkness* © (V) level 8 Evocation [Concentration] [UB] **[Warlock, Wizard]** Magical darkness spreads from a point you choose within range to fill a 60-foot-radius sphere until the spell ends. Shrieks, gibbering, and mad laughter can be heard within the sphere. On activation, and whenever a creature ends its turn in the sphere, it must make a Wisdom saving throw, taking 6d8 psychic damage on a failed save, or half as much damage on a successful one. -# 309. - Maze (V,S) level 8 Abjuration [Concentration] [SOL] +# 311. - Maze (V,S) level 8 Abjuration [Concentration] [SOL] **[Wizard]** You banish a creature that you can see within range into a labyrinthine demiplane. The target remains there for the spell's duration or until it escapes the maze. -# 310. - *Mind Blank* © (V,S) level 8 Transmutation [UB] +# 312. - *Mind Blank* © (V,S) level 8 Transmutation [UB] **[Bard, Wizard]** Until the spell ends, one willing creature you touch is immune to psychic damage, any effect that would sense its emotions or read its thoughts, divination spells, and the charmed condition. -# 311. - Power Word Stun (V) level 8 Enchantment [SOL] +# 313. - Power Word Stun (V) level 8 Enchantment [SOL] **[Bard, Sorcerer, Warlock, Wizard]** Overwhelm the mind of a creature that has 150 hit points or fewer, leaving it stunned. -# 312. - Soul Expulsion (V,S) level 8 Necromancy [UB] +# 314. - Soul Expulsion (V,S) level 8 Necromancy [UB] **[Cleric, Sorcerer, Wizard]** You blast a foe's soul with magical power, causing it to glow with otherwordly light. Choose one creature that you can see within range, which must make a Charisma saving throw. On a failed saving throw, the target takes 11d8 necrotic damage and is stunned until the start of your next turn. On a successful saving throw, the target takes half damage and isn't stunned. Each enemy other than the target that is within 60 feet of the target must make a Wisdom saving throw. On a failed save, a creature takes 7d8 radiant damage and has disadvantage on attack rolls until the end of your next turn. On a successful saving throw a creature takes half damage and nothing else. When this spell targets undead, the spell ignores any resistance or immunity to necrotic damage, and the target has disadvantage on the saving throw. When you cast this spell using a spell slot of 9th level, both the necrotic damage and radiant damage increase by 2d8. -# 313. - Spell Ward (V,S) level 8 Abjuration [Concentration] [SOL] +# 315. - Spell Ward (V,S) level 8 Abjuration [Concentration] [SOL] **[Cleric, Wizard]** Creates a mobile globe that is impenetrable to enemy spells cast from outside it. -# 314. - Sunburst (V,S) level 8 Evocation [SOL] +# 316. - Sunburst (V,S) level 8 Evocation [SOL] **[Druid, Sorcerer, Wizard]** Brilliant sunlight blazes in a sphere with a 12-cell radius. Each creature that fails a Constitution saving throw takes radiant damage and is blinded for 1 minute. Any darkness created by a spell in the area is dispelled. -# 315. - Thunderstorm (V,S) level 8 Transmutation [SOL] +# 317. - Thunderstorm (V,S) level 8 Transmutation [SOL] **[Cleric, Druid, Wizard]** You create a blast of thunder in a sphere that causes thunder and lightning damage to everyone, and can blind or stun those who fail a CON saving throw. -# 316. - Wild Shapes (V,S) level 8 Transmutation [Concentration] [SOL] +# 318. - Wild Shapes (V,S) level 8 Transmutation [Concentration] [SOL] Turns other creatures in to beasts for one day. -# 317. - *Foresight* © (V,S) level 9 Transmutation [UB] +# 319. - *Foresight* © (V,S) level 9 Transmutation [UB] **[Bard, Druid, Warlock, Wizard]** You touch a willing creature and bestow a limited ability to see into the immediate future. For the duration, the target can't be surprised and has advantage on attack rolls, ability checks, and saving throws. Additionally, other creatures have disadvantage on attack rolls against the target for the duration. -# 318. - *Invulnerability* © (M,V,S) level 9 Abjuration [Concentration] [UB] +# 320. - *Invulnerability* © (M,V,S) level 9 Abjuration [Concentration] [UB] **[Wizard]** You are immune to all damage until the spell ends. -# 319. - *Mass Heal* © (V,S) level 9 Transmutation [UB] +# 321. - *Mass Heal* © (V,S) level 9 Transmutation [UB] **[Cleric]** A flood of healing energy flows from you into injured creatures around you. You restore 120 hit points each to 6 creatures that you can see within range. Creatures healed by this spell are also cured of all diseases and any effect making them blinded or deafened. This spell has no effect on undead or constructs. -# 320. - *Meteor Swarm* © (V,S) level 9 Transmutation [UB] +# 322. - *Meteor Swarm* © (V,S) level 9 Transmutation [UB] **[Sorcerer, Wizard]** Blazing orbs of fire plummet to the ground at a single point you can see within range. Each creature in a 40-foot-radius sphere centered on the point you choose must make a Dexterity saving throw. The sphere spreads around corners. A creature takes 20d6 fire damage and 20d6 bludgeoning damage on a failed save, or half as much damage on a successful one. A creature in the area of more than one fiery burst is affected only once. -# 321. - *Power Word Heal* © (V,S) level 9 Enchantment [UB] +# 323. - *Power Word Heal* © (V,S) level 9 Enchantment [UB] **[Bard, Cleric]** A wave of healing energy washes over the creature you touch. The target regains all its hit points. If the creature is charmed, frightened, paralyzed, or stunned, the condition ends. If the creature is prone, it can use its reaction to stand up. This spell has no effect on undead or constructs. -# 322. - *Power Word Kill* © (V,S) level 9 Transmutation [UB] +# 324. - *Power Word Kill* © (V,S) level 9 Transmutation [UB] **[Bard, Sorcerer, Warlock, Wizard]** You utter a word of power that can compel one creature you can see within range to die instantly. If the creature you choose has 100 hit points or fewer, it dies. Otherwise, the spell has no effect. -# 323. - *Psychic Scream* © (S) level 9 Enchantment [UB] +# 325. - *Psychic Scream* © (S) level 9 Enchantment [UB] **[Bard, Sorcerer, Warlock, Wizard]** You unleash the power of your mind to blast the intellect of up to ten creatures of your choice that you can see within range. Each target must make an Intelligence saving throw. On a failed save, a target takes 14d6 psychic damage and is stunned for 1 minute. On a successful save, a target takes half as much damage and isn't stunned. A stunned target can make an Intelligence saving throw at the end of each of its turns. On a successful save, the stunning effect ends. -# 324. - *Shapechange* © (M,V,S) level 9 Transmutation [Concentration] [UB] +# 326. - *Shapechange* © (M,V,S) level 9 Transmutation [Concentration] [UB] **[Druid, Wizard]** You assume the form of a different creature for the duration. The new form can be of any creature with a challenge rating equal to your level or lower. -# 325. - *Time Stop* © (V) level 9 Transmutation [UB] +# 327. - *Time Stop* © (V) level 9 Transmutation [UB] **[Sorcerer, Wizard]** You briefly stop the flow of time for everyone but yourself. No time passes for other creatures, while you take 1d4+1 turns in a row, during which you can use actions and move as normal. This spell ends if one of the actions you use during this period, or any effects that you create during this period, affects a creature other than you. -# 326. - *Weird* © (V,S) level 9 Illusion [Concentration] [UB] +# 328. - *Weird* © (V,S) level 9 Illusion [Concentration] [UB] **[Warlock, Wizard]** diff --git a/SolastaUnfinishedBusiness/ChangelogHistory.txt b/SolastaUnfinishedBusiness/ChangelogHistory.txt index 82a2fa2bb5..6423c0b4ce 100644 --- a/SolastaUnfinishedBusiness/ChangelogHistory.txt +++ b/SolastaUnfinishedBusiness/ChangelogHistory.txt @@ -1,6 +1,6 @@ 1.5.97.30: -- added Create Bonfire, Command, Dissonant Whispers, Holy Weapon, and Swift Quiver spells +- added Create Bonfire, Magic Stone, Command, Dissonant Whispers, Holy Weapon, Swift Quiver, and Glibness spells - added Character > General 'Add the Fall Prone action to all playable races' - added Character > Rules > 'Allow allies to perceive Ranger GloomStalker when in natural darkness' - added Character > Rules > 'Enable push and pull motion effects to also work on up/down axis' diff --git a/SolastaUnfinishedBusiness/Displays/_ModUi.cs b/SolastaUnfinishedBusiness/Displays/_ModUi.cs index 3d989852e2..d1155615d1 100644 --- a/SolastaUnfinishedBusiness/Displays/_ModUi.cs +++ b/SolastaUnfinishedBusiness/Displays/_ModUi.cs @@ -154,6 +154,7 @@ internal static class ModUi "FlameArrows", "Foresight", "ForestGuardian", + "Glibness", "GiftOfAlacrity", "GravitySinkhole", "HeroicInfusion", diff --git a/SolastaUnfinishedBusiness/Models/SpellsContext.cs b/SolastaUnfinishedBusiness/Models/SpellsContext.cs index 7a93f17937..92a3d87de2 100644 --- a/SolastaUnfinishedBusiness/Models/SpellsContext.cs +++ b/SolastaUnfinishedBusiness/Models/SpellsContext.cs @@ -385,6 +385,7 @@ internal static void LateLoad() // 8th level RegisterSpell(BuildAbiDalzimHorridWilting(), 0, SpellListSorcerer, SpellListWizard); + RegisterSpell(BuildGlibness(), 0, SpellListBard, SpellListWarlock); RegisterSpell(BuildMindBlank(), 0, SpellListBard, SpellListWizard); RegisterSpell(MaddeningDarkness, 0, SpellListWarlock, SpellListWizard); RegisterSpell(BuildSoulExpulsion(), 0, SpellListCleric, SpellListSorcerer, SpellListWizard); diff --git a/SolastaUnfinishedBusiness/Properties/Resources.Designer.cs b/SolastaUnfinishedBusiness/Properties/Resources.Designer.cs index ec94d9cb48..7d314074f0 100644 --- a/SolastaUnfinishedBusiness/Properties/Resources.Designer.cs +++ b/SolastaUnfinishedBusiness/Properties/Resources.Designer.cs @@ -1789,6 +1789,16 @@ public static byte[] GambitUrgentOrders { } } + /// + /// Looks up a localized resource of type System.Byte[]. + /// + public static byte[] Glibness { + get { + object obj = ResourceManager.GetObject("Glibness", resourceCulture); + return ((byte[])(obj)); + } + } + /// /// Looks up a localized resource of type System.Byte[]. /// diff --git a/SolastaUnfinishedBusiness/Properties/Resources.resx b/SolastaUnfinishedBusiness/Properties/Resources.resx index b29c8e9a45..339f9978f5 100644 --- a/SolastaUnfinishedBusiness/Properties/Resources.resx +++ b/SolastaUnfinishedBusiness/Properties/Resources.resx @@ -157,6 +157,11 @@ PublicKeyToken=b77a5c561934e089 + + ../Resources/Spells/Glibness.png;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + ../Resources/Spells/HolyWeapon.png;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 diff --git a/SolastaUnfinishedBusiness/Resources/Spells/Glibness.png b/SolastaUnfinishedBusiness/Resources/Spells/Glibness.png new file mode 100644 index 0000000000000000000000000000000000000000..2fd80af838c098c6c1f30f804beda019ade0dc44 GIT binary patch literal 14991 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 Z_;2^ajtKQJUHJe2002ovPDHLkV1l^5cToTU literal 0 HcmV?d00001 diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel08.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel08.cs index 7340d7c3bf..71a93331f4 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel08.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel08.cs @@ -1,4 +1,5 @@ -using System.Collections; +using System; +using System.Collections; using System.Collections.Generic; using System.Linq; using SolastaUnfinishedBusiness.Api.GameExtensions; @@ -89,6 +90,61 @@ internal static SpellDefinition BuildMindBlank() #endregion + #region Glibness + + internal static SpellDefinition BuildGlibness() + { + const string NAME = "Glibness"; + + var condition = ConditionDefinitionBuilder + .Create($"Condition{NAME}") + .SetGuiPresentation(NAME, Category.Spell) + .SetPossessive() + .AddCustomSubFeatures(new ModifyAbilityCheckGlibness()) + .AddToDB(); + + return SpellDefinitionBuilder + .Create(NAME) + .SetGuiPresentation(Category.Spell, Sprites.GetSprite(NAME, Resources.Glibness, 128)) + .SetSchoolOfMagic(SchoolOfMagicDefinitions.SchoolTransmutation) + .SetSpellLevel(8) + .SetCastingTime(ActivationTime.Action) + .SetMaterialComponent(MaterialComponentType.None) + .SetSomaticComponent(false) + .SetVerboseComponent(true) + .SetVocalSpellSameType(VocalSpellSemeType.Buff) + .SetEffectDescription( + EffectDescriptionBuilder + .Create(Darkness) + .SetDurationData(DurationType.Hour, 1) + .SetTargetingData(Side.All, RangeType.Self, 0, TargetType.Self) + .SetEffectForms(EffectFormBuilder.ConditionForm(condition)) + .SetParticleEffectParameters(Light) + .Build()) + .AddToDB(); + } + + private sealed class ModifyAbilityCheckGlibness : IModifyAbilityCheck + { + public void MinRoll( + RulesetCharacter character, + int baseBonus, + string abilityScoreName, + string proficiencyName, + List advantageTrends, + List modifierTrends, + ref int rollModifier, + ref int minRoll) + { + if (abilityScoreName == AttributeDefinitions.Charisma) + { + minRoll = Math.Max(minRoll, 15); + } + } + } + + #endregion + #region Abi-Dalzim's Horrid Wilting internal static SpellDefinition BuildAbiDalzimHorridWilting() diff --git a/SolastaUnfinishedBusiness/Translations/de/Spells/Spells08-de.txt b/SolastaUnfinishedBusiness/Translations/de/Spells/Spells08-de.txt index 2704fca214..0b791d29b1 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Spells/Spells08-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Spells/Spells08-de.txt @@ -3,6 +3,8 @@ Condition/&ConditionMindBlankTitle=Gedankenleere Condition/&ConditionSoulExpulsionCombatAffinityTitle=Unruhig Spell/&AbiDalzimHorridWiltingDescription=Du entziehst jedem Lebewesen in einem 30 Fuß großen Würfel, dessen Mittelpunkt ein von dir gewählter Punkt innerhalb der Reichweite ist, Feuchtigkeit. Jedes Lebewesen in diesem Bereich muss einen Konstitutionsrettungswurf machen. Konstrukte und Untote sind davon nicht betroffen und Pflanzen und Eiselementare schaffen diesen Rettungswurf mit Nachteil. Ein Lebewesen erleidet bei einem misslungenen Rettungswurf 10W8 nekrotischen Schaden oder bei einem erfolgreichen Rettungswurf die Hälfte. Spell/&AbiDalzimHorridWiltingTitle=Abi-Dalzims schreckliches Welken +Spell/&GlibnessDescription=Bis der Zauber endet, können Sie bei einer Charismaprüfung die gewürfelte Zahl durch eine 15 ersetzen. +Spell/&GlibnessTitle=Zungenfertigkeit Spell/&MaddeningDarknessDescription=Magische Dunkelheit breitet sich von einem Punkt innerhalb der Reichweite deiner Wahl aus und füllt eine Kugel mit einem Radius von 60 Fuß, bis der Zauber endet. In der Kugel sind Kreischen, Gebrabbel und verrücktes Gelächter zu hören. Bei Aktivierung und immer dann, wenn eine Kreatur ihren Zug in der Kugel beendet, muss sie einen Weisheitsrettungswurf machen und erleidet bei einem misslungenen Rettungswurf 6W8 psychischen Schaden oder bei einem erfolgreichen Rettungswurf die Hälfte. Spell/&MaddeningDarknessTitle=Unerträgliche Dunkelheit Spell/&MindBlankDescription=Bis der Zauber endet, ist eine willige Kreatur, die Sie berühren, immun gegen psychischen Schaden, alle Effekte, die ihre Emotionen spüren oder ihre Gedanken lesen würden, Wahrsagezauber und den Zustand des Verzauberten. diff --git a/SolastaUnfinishedBusiness/Translations/en/Spells/Spells08-en.txt b/SolastaUnfinishedBusiness/Translations/en/Spells/Spells08-en.txt index 1bd88ebccc..93383116ae 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Spells/Spells08-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Spells/Spells08-en.txt @@ -3,6 +3,8 @@ Condition/&ConditionMindBlankTitle=Mind Blank Condition/&ConditionSoulExpulsionCombatAffinityTitle=Unsettled Spell/&AbiDalzimHorridWiltingDescription=You draw the moisture from every creature in a 30-foot cube centered on a point you choose within range. Each creature in that area must make a Constitution saving throw. Constructs and undead aren't affected, and plants and ice elementals make this saving throw with disadvantage. A creature takes 10d8 necrotic damage on a failed save, or half as much damage on a successful one. Spell/&AbiDalzimHorridWiltingTitle=Abi-Dalzim's Horrid Wilting +Spell/&GlibnessDescription=Until the spell ends, when you make a Charisma check, you can replace the number you roll with a 15. +Spell/&GlibnessTitle=Glibness Spell/&MaddeningDarknessDescription=Magical darkness spreads from a point you choose within range to fill a 60-foot-radius sphere until the spell ends. Shrieks, gibbering, and mad laughter can be heard within the sphere. On activation, and whenever a creature ends its turn in the sphere, it must make a Wisdom saving throw, taking 6d8 psychic damage on a failed save, or half as much damage on a successful one. Spell/&MaddeningDarknessTitle=Maddening Darkness Spell/&MindBlankDescription=Until the spell ends, one willing creature you touch is immune to psychic damage, any effect that would sense its emotions or read its thoughts, divination spells, and the charmed condition. diff --git a/SolastaUnfinishedBusiness/Translations/es/Spells/Spells08-es.txt b/SolastaUnfinishedBusiness/Translations/es/Spells/Spells08-es.txt index 3c8d8b6830..b4e64f0d6d 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Spells/Spells08-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Spells/Spells08-es.txt @@ -3,6 +3,8 @@ Condition/&ConditionMindBlankTitle=Mente en blanco Condition/&ConditionSoulExpulsionCombatAffinityTitle=Inestable Spell/&AbiDalzimHorridWiltingDescription=Extraes la humedad de todas las criaturas que se encuentran en un cubo de 30 pies centrado en un punto que elijas dentro del alcance. Cada criatura en esa área debe realizar una tirada de salvación de Constitución. Los constructos y los no muertos no se ven afectados, y las plantas y los elementales de hielo realizan esta tirada de salvación con desventaja. Una criatura recibe 10d8 puntos de daño necrótico si falla una tirada de salvación, o la mitad de ese daño si tiene éxito. Spell/&AbiDalzimHorridWiltingTitle=El horrible marchitamiento de Abi-Dalzim +Spell/&GlibnessDescription=Hasta que el hechizo termine, cuando hagas una prueba de Carisma, puedes reemplazar el número que saques por un 15. +Spell/&GlibnessTitle=Labia Spell/&MaddeningDarknessDescription=La oscuridad mágica se extiende desde un punto que elijas dentro del alcance para llenar una esfera de 60 pies de radio hasta que el conjuro termine. Se pueden escuchar chillidos, farfulleos y risas enloquecidas dentro de la esfera. Al activarse, y siempre que una criatura termine su turno en la esfera, debe realizar una tirada de salvación de Sabiduría, recibiendo 6d8 puntos de daño psíquico si falla, o la mitad de daño si tiene éxito. Spell/&MaddeningDarknessTitle=Oscuridad enloquecedora Spell/&MindBlankDescription=Hasta que el hechizo termine, cualquier criatura voluntaria que toques será inmune al daño psíquico, a cualquier efecto que pueda detectar sus emociones o leer sus pensamientos, a los hechizos de adivinación y a la condición encantada. diff --git a/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells08-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells08-fr.txt index 4b9e955f1b..2c7cf0089a 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells08-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells08-fr.txt @@ -3,6 +3,8 @@ Condition/&ConditionMindBlankTitle=Esprit vide Condition/&ConditionSoulExpulsionCombatAffinityTitle=Instable Spell/&AbiDalzimHorridWiltingDescription=Vous puisez l'humidité de chaque créature dans un cube de 9 mètres centré sur un point que vous choisissez à portée. Chaque créature dans cette zone doit effectuer un jet de sauvegarde de Constitution. Les créatures artificielles et les morts-vivants ne sont pas affectés, et les plantes et les élémentaires de glace effectuent ce jet de sauvegarde avec un désavantage. Une créature subit 10d8 dégâts nécrotiques en cas d'échec, ou la moitié de ces dégâts en cas de réussite. Spell/&AbiDalzimHorridWiltingTitle=L'horrible flétrissement d'Abi-Dalzim +Spell/&GlibnessDescription=Jusqu'à la fin du sort, lorsque vous effectuez un test de Charisme, vous pouvez remplacer le nombre obtenu par un 15. +Spell/&GlibnessTitle=Bagou Spell/&MaddeningDarknessDescription=Les ténèbres magiques se répandent à partir d'un point que vous choisissez dans la portée pour remplir une sphère de 18 mètres de rayon jusqu'à la fin du sort. Des cris perçants, des bavardages et des rires fous peuvent être entendus dans la sphère. À l'activation, et chaque fois qu'une créature termine son tour dans la sphère, elle doit effectuer un jet de sauvegarde de Sagesse, subissant 6d8 dégâts psychiques en cas d'échec, ou la moitié de ces dégâts en cas de réussite. Spell/&MaddeningDarknessTitle=Obscurité affolante Spell/&MindBlankDescription=Jusqu'à la fin du sort, une créature consentante que vous touchez est immunisée contre les dégâts psychiques, tout effet qui détecterait ses émotions ou lirait ses pensées, les sorts de divination et la condition charmée. diff --git a/SolastaUnfinishedBusiness/Translations/it/Spells/Spells08-it.txt b/SolastaUnfinishedBusiness/Translations/it/Spells/Spells08-it.txt index ac4337325a..6ec90437d8 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Spells/Spells08-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Spells/Spells08-it.txt @@ -3,6 +3,8 @@ Condition/&ConditionMindBlankTitle=Mente vuota Condition/&ConditionSoulExpulsionCombatAffinityTitle=Instabile Spell/&AbiDalzimHorridWiltingDescription=Prendi l'umidità da ogni creatura in un cubo di 30 piedi centrato su un punto che scegli entro il raggio d'azione. Ogni creatura in quell'area deve effettuare un tiro salvezza su Costituzione. Costrutti e non morti non sono influenzati, e piante ed elementali del ghiaccio effettuano questo tiro salvezza con svantaggio. Una creatura subisce 10d8 danni necrotici se fallisce il tiro salvezza, o la metà dei danni se lo supera. Spell/&AbiDalzimHorridWiltingTitle=L'orribile avvizzimento di Abi-Dalzim +Spell/&GlibnessDescription=Finché l'incantesimo non termina, quando effettui una prova di Carisma, puoi sostituire il numero ottenuto con 15. +Spell/&GlibnessTitle=Sciocchezza Spell/&MaddeningDarknessDescription=L'oscurità magica si diffonde da un punto che scegli entro il raggio per riempire una sfera di 60 piedi di raggio fino alla fine dell'incantesimo. All'interno della sfera si possono udire strilli, gorgoglii e risate folli. All'attivazione, e ogni volta che una creatura termina il suo turno nella sfera, deve effettuare un tiro salvezza su Saggezza, subendo 6d8 danni psichici se fallisce il tiro salvezza, o la metà dei danni se lo supera. Spell/&MaddeningDarknessTitle=Oscurità esasperante Spell/&MindBlankDescription=Finché l'incantesimo non termina, una creatura consenziente che tocchi è immune ai danni psichici, a qualsiasi effetto che percepisca le sue emozioni o ne legga i pensieri, agli incantesimi di divinazione e alla condizione di ammaliato. diff --git a/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells08-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells08-ja.txt index 8bd0f15234..a24995dd06 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells08-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells08-ja.txt @@ -3,6 +3,8 @@ Condition/&ConditionMindBlankTitle=マインドブランク Condition/&ConditionSoulExpulsionCombatAffinityTitle=落ち着かない Spell/&AbiDalzimHorridWiltingDescription=範囲内で選択した点を中心とした 30 フィートの立方体内のすべてのクリーチャーから水分を吸い取ります。そのエリア内の各クリーチャーは耐久力セーヴィング スローを実行する必要があります。人造生物とアンデッドは影響を受けませんが、植物と氷の精霊は不利な条件でこのセーヴィング スローを実行します。セーヴィングに失敗するとクリーチャーは 10d8 の壊死ダメージを受け、成功すると半分のダメージを受けます。 Spell/&AbiDalzimHorridWiltingTitle=アビ・ダルジムの恐ろしい萎縮 +Spell/&GlibnessDescription=呪文が終了するまで、魅力判定を行う際に、出た目を 15 に置き換えることができます。 +Spell/&GlibnessTitle=口達者 Spell/&MaddeningDarknessDescription=魔法の闇は、範囲内で選択した点から広がり、呪文が終了するまで半径 60 フィートの球体を埋め尽くします。球内では金切り声、意味不明な叫び声、狂った笑い声が聞こえます。発動時、およびクリーチャーが球体内でターンを終了するたびに、クリーチャーは知恵セーヴィング・スローを行わなければならず、セーヴに失敗した場合は6d8の精神的ダメージを受けるか、成功した場合はその半分のダメージを受ける。 Spell/&MaddeningDarknessTitle=狂気の闇 Spell/&MindBlankDescription=呪文が終了するまで、あなたが触れた意志のあるクリーチャー1体は、精神的ダメージ、感情を感知したり思考を読み取る効果、占い呪文、魅了された状態の影響を受けません。 diff --git a/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells08-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells08-ko.txt index 8705699463..eaa5bbd7ae 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells08-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells08-ko.txt @@ -3,6 +3,8 @@ Condition/&ConditionMindBlankTitle=마음의 공백 Condition/&ConditionSoulExpulsionCombatAffinityTitle=변하기 쉬운 Spell/&AbiDalzimHorridWiltingDescription=범위 내에서 선택한 지점을 중심으로 하는 30피트 입방체의 모든 생물로부터 수분을 끌어옵니다. 그 지역에 있는 각 생물은 건강 내성 굴림을 해야 합니다. 구조물과 언데드는 영향을 받지 않으며, 식물과 얼음 정령은 이 내성굴림에 불리하게 작용합니다. 생물은 저장 실패 시 10d8의 괴사 피해를 입거나, 성공 시 절반의 피해를 입습니다. Spell/&AbiDalzimHorridWiltingTitle=Abi-Dalzim의 끔찍한 시들음 +Spell/&GlibnessDescription=주문이 끝날 때까지 카리스마 판정을 할 때, 굴린 숫자를 15로 대체할 수 있습니다. +Spell/&GlibnessTitle=유창함 Spell/&MaddeningDarknessDescription=마법의 어둠은 주문이 끝날 때까지 반경 60피트의 구체를 채우기 위해 범위 내에서 선택한 지점에서 퍼집니다. 비명소리, 횡설수설, 미친 웃음 소리가 구체 내에서 들립니다. 활성화 시, 생물이 구체에서 차례를 마칠 때마다 지혜 내성굴림을 해야 하며, 내성굴림에 실패하면 6d8의 정신적 피해를 입거나, 성공하면 절반의 피해를 입습니다. Spell/&MaddeningDarknessTitle=미치게 만드는 어둠 Spell/&MindBlankDescription=주문이 끝날 때까지 당신이 접촉한 하나의 의지가 있는 생물은 정신 피해, 감정을 감지하거나 생각을 읽는 모든 효과, 점술 주문 및 매혹 상태에 면역입니다. diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells08-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells08-pt-BR.txt index d5612a2384..aed87aec3c 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells08-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells08-pt-BR.txt @@ -3,6 +3,8 @@ Condition/&ConditionMindBlankTitle=Mente em branco Condition/&ConditionSoulExpulsionCombatAffinityTitle=Inquieto Spell/&AbiDalzimHorridWiltingDescription=Você extrai a umidade de cada criatura em um cubo de 30 pés centralizado em um ponto que você escolher dentro do alcance. Cada criatura naquela área deve fazer um teste de resistência de Constituição. Construtos e mortos-vivos não são afetados, e plantas e elementais de gelo fazem esse teste de resistência com desvantagem. Uma criatura sofre 10d8 de dano necrótico em um teste de resistência falho, ou metade do dano em um teste bem-sucedido. Spell/&AbiDalzimHorridWiltingTitle=O Horrível Murchidão de Abi-Dalzim +Spell/&GlibnessDescription=Até que a magia termine, quando você fizer um teste de Carisma, você pode substituir o número rolado por 15. +Spell/&GlibnessTitle=Loquacidade Spell/&MaddeningDarknessDescription=Escuridão mágica se espalha de um ponto que você escolher dentro do alcance para preencher uma esfera de 60 pés de raio até que a magia termine. Gritos, balbucios e risadas loucas podem ser ouvidos dentro da esfera. Na ativação, e sempre que uma criatura terminar seu turno na esfera, ela deve fazer um teste de resistência de Sabedoria, sofrendo 6d8 de dano psíquico em um teste falho, ou metade do dano em um teste bem-sucedido. Spell/&MaddeningDarknessTitle=Escuridão enlouquecedora Spell/&MindBlankDescription=Até que a magia termine, uma criatura voluntária que você tocar ficará imune a dano psíquico, qualquer efeito que sinta suas emoções ou leia seus pensamentos, magias de adivinhação e a condição enfeitiçada. diff --git a/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells08-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells08-ru.txt index d629ecd61d..e4e04f7769 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells08-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells08-ru.txt @@ -3,6 +3,8 @@ Condition/&ConditionMindBlankTitle=Сокрытие разума Condition/&ConditionSoulExpulsionCombatAffinityTitle=Неустойчивый Spell/&AbiDalzimHorridWiltingDescription=Вы вытягиваете влагу из всех существ в кубе с длиной ребра 30 футов с центром на указанной вами точке в пределах дистанции. Каждое существо в этой области должно совершить спасбросок Телосложения. Это заклинание не действует на Конструктов и Нежить, а Растения и ледяные элементали совершают спасбросок с помехой. При провале существо получает 10d8 урона некротической энергией или половину этого урона при успехе. Spell/&AbiDalzimHorridWiltingTitle=Ужасное увядание Аби-Далзима +Spell/&GlibnessDescription=Пока заклинание действует, при проверке Харизмы вы можете заменить выпавшее число на 15. +Spell/&GlibnessTitle=Бойкость Spell/&MaddeningDarknessDescription=Из точки, выбранной вами в пределах дистанции, расползается и остаётся в течение времени действия заклинания магическая тьма сферой с радиусом 60 футов. В этой сфере можно услышать крики, бормотание и безумный смех. При накладывании и всякий раз, когда существо заканчивает свой ход в сфере, оно должно совершить спасбросок Мудрости, получая 6d8 урона психической энергией при провале или половину этого урона при успехе. Spell/&MaddeningDarknessTitle=Одуряющая тьма Spell/&MindBlankDescription=Пока заклинание активно, одно согласное существо, которого вы касаетесь, получает иммунитет к урону психической энергией и всем эффектам, которые должны чувствовать его эмоции или читать мысли, заклинаниям школы Прорицания и состоянию "очарованный". diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells08-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells08-zh-CN.txt index ae86ab8efb..c5cba6fece 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells08-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells08-zh-CN.txt @@ -3,6 +3,8 @@ Condition/&ConditionMindBlankTitle=心灵屏障 Condition/&ConditionSoulExpulsionCombatAffinityTitle=未解决 Spell/&AbiDalzimHorridWiltingDescription=你从范围内以你选择的点为中心的 30 英尺立方体中的每个生物身上吸取水分。该区域内的每个生物都必须进行体质豁免检定。构造体和不死生物不受影响,植物和冰元素进行此豁免检定时处于劣势。豁免失败时生物会受到 10d8 坏死伤害,豁免成功时伤害减半。 Spell/&AbiDalzimHorridWiltingTitle=阿比达尔齐姆的恐怖枯萎 +Spell/&GlibnessDescription=直到咒语结束为止,当你进行魅力检查时,你可以将掷出的数字替换为 15。 +Spell/&GlibnessTitle=油嘴滑舌 Spell/&MaddeningDarknessDescription=魔法黑暗从你在范围内选择的一个点开始蔓延,充满一个 60 尺半径的球体,直到法术结束。球体中可以听到尖叫声,低语声,以及疯狂的大笑声。激活后,每当一个生物在球体中开始其回合时,它必须进行一次感知豁免,豁免失败会受到 6d8 心灵伤害,豁免成功则受到一半伤害。 Spell/&MaddeningDarknessTitle=疯狂之暗 Spell/&MindBlankDescription=在法术结束之前,你接触的一个自愿生物免疫心灵伤害、任何能感知其情绪或阅读其思想的效果、预言法术和魅惑状态。 From 94c9784164102c62c9d585a0960a70ebb499551f Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Fri, 13 Sep 2024 22:22:02 -0700 Subject: [PATCH 156/212] remove superfluous parameter on method LogCharacterUsedFeature --- SolastaUnfinishedBusiness/Subclasses/WayOfTheWealAndWoe.cs | 1 - .../Translations/de/SubClasses/WayOfWealAndWoe-de.txt | 2 +- .../Translations/en/SubClasses/WayOfWealAndWoe-en.txt | 2 +- .../Translations/es/SubClasses/WayOfWealAndWoe-es.txt | 2 +- .../Translations/fr/SubClasses/WayOfWealAndWoe-fr.txt | 2 +- .../Translations/it/SubClasses/WayOfWealAndWoe-it.txt | 2 +- .../Translations/ja/SubClasses/WayOfWealAndWoe-ja.txt | 2 +- .../Translations/ko/SubClasses/WayOfWealAndWoe-ko.txt | 2 +- .../Translations/pt-BR/SubClasses/WayOfWealAndWoe-pt-BR.txt | 2 +- .../Translations/ru/SubClasses/WayOfWealAndWoe-ru.txt | 2 +- .../Translations/zh-CN/SubClasses/WayOfWealAndWoe-zh-CN.txt | 2 +- 11 files changed, 10 insertions(+), 11 deletions(-) diff --git a/SolastaUnfinishedBusiness/Subclasses/WayOfTheWealAndWoe.cs b/SolastaUnfinishedBusiness/Subclasses/WayOfTheWealAndWoe.cs index dd57adcde7..901e30ee96 100644 --- a/SolastaUnfinishedBusiness/Subclasses/WayOfTheWealAndWoe.cs +++ b/SolastaUnfinishedBusiness/Subclasses/WayOfTheWealAndWoe.cs @@ -171,7 +171,6 @@ public void AfterRoll( } rulesetCharacter.LogCharacterUsedFeature(featureWeal, "Feedback/&WoeReroll", false, - (ConsoleStyleDuplet.ParameterType.Player, rulesetCharacter.Name), (ConsoleStyleDuplet.ParameterType.SuccessfulRoll, result.ToString()), (ConsoleStyleDuplet.ParameterType.FailedRoll, 1.ToString())); diff --git a/SolastaUnfinishedBusiness/Translations/de/SubClasses/WayOfWealAndWoe-de.txt b/SolastaUnfinishedBusiness/Translations/de/SubClasses/WayOfWealAndWoe-de.txt index 54587d1145..f8a02ff0d3 100644 --- a/SolastaUnfinishedBusiness/Translations/de/SubClasses/WayOfWealAndWoe-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/SubClasses/WayOfWealAndWoe-de.txt @@ -8,6 +8,6 @@ Feature/&FeatureWayOfWealAndWoeWealDescription=Nachdem Sie einen Angriffswurf mi Feature/&FeatureWayOfWealAndWoeWealTitle=Wohl Feature/&FeatureWayOfWealAndWoeWoeDescription=Wenn Sie einen Angriffswurf mit einer Mönchswaffe oder einen unbewaffneten Angriff ausführen und kritisch verfehlen, erleiden Sie Schaden in Höhe eines Wurfs Ihres Kampfkunstwürfels. Feature/&FeatureWayOfWealAndWoeWoeTitle=Woe -Feedback/&WoeReroll=Aufgrund von {1} wird beim Angriffswurf durch {2} eine Änderung des Würfels von einer {3} auf eine {4} vorgenommen. +Feedback/&WoeReroll=Aufgrund von {1} wird beim Angriffswurf durch {0} ein Würfel von {2} auf {3} geändert. Subclass/&WayOfWealAndWoeDescription=Mönche des Wegs von Wohl und Wehe konzentrieren sich sowohl auf Wohlstand als auch auf Widrigkeiten, um ihren Feinden in die Schlacht zu ziehen. Subclass/&WayOfWealAndWoeTitle=Weg des Wohls und des Leids diff --git a/SolastaUnfinishedBusiness/Translations/en/SubClasses/WayOfWealAndWoe-en.txt b/SolastaUnfinishedBusiness/Translations/en/SubClasses/WayOfWealAndWoe-en.txt index 148f1f4af7..1a67db31f1 100644 --- a/SolastaUnfinishedBusiness/Translations/en/SubClasses/WayOfWealAndWoe-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/SubClasses/WayOfWealAndWoe-en.txt @@ -8,6 +8,6 @@ Feature/&FeatureWayOfWealAndWoeWealDescription=After you make an attack roll wit Feature/&FeatureWayOfWealAndWoeWealTitle=Weal Feature/&FeatureWayOfWealAndWoeWoeDescription=After you make an attack roll with a monk weapon or an unarmed attack, and critically miss, you take damage equal to one roll of your martial arts die. Feature/&FeatureWayOfWealAndWoeWoeTitle=Woe -Feedback/&WoeReroll=Because of {1} {2} re-rolls the attack roll die from a {3} to a {4} +Feedback/&WoeReroll=Because of {1} {0} re-rolls the attack roll die from a {2} to a {3} Subclass/&WayOfWealAndWoeDescription=Monks of the Way of Weal and Woe focus on both prosperity and adversity to engage their enemies in battle. Subclass/&WayOfWealAndWoeTitle=Way of Weal and Woe diff --git a/SolastaUnfinishedBusiness/Translations/es/SubClasses/WayOfWealAndWoe-es.txt b/SolastaUnfinishedBusiness/Translations/es/SubClasses/WayOfWealAndWoe-es.txt index 12798276d9..f2dcc911ff 100644 --- a/SolastaUnfinishedBusiness/Translations/es/SubClasses/WayOfWealAndWoe-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/SubClasses/WayOfWealAndWoe-es.txt @@ -8,6 +8,6 @@ Feature/&FeatureWayOfWealAndWoeWealDescription=Después de realizar una tirada d Feature/&FeatureWayOfWealAndWoeWealTitle=Roncha Feature/&FeatureWayOfWealAndWoeWoeDescription=Después de realizar una tirada de ataque con un arma de monje o un ataque desarmado, y fallar críticamente, sufres un daño igual a una tirada de tu dado de artes marciales. Feature/&FeatureWayOfWealAndWoeWoeTitle=Woe -Feedback/&WoeReroll=Debido a que {1} {2} vuelve a tirar el dado de ataque de un {3} a un {4} +Feedback/&WoeReroll=Debido a que {1} {0} vuelve a tirar el dado de ataque de {2} a {3} Subclass/&WayOfWealAndWoeDescription=Los monjes del Camino de la Riqueza y la Pena se centran tanto en la prosperidad como en la adversidad para enfrentarse a sus enemigos en la batalla. Subclass/&WayOfWealAndWoeTitle=Camino de prosperidad y de desgracia diff --git a/SolastaUnfinishedBusiness/Translations/fr/SubClasses/WayOfWealAndWoe-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/SubClasses/WayOfWealAndWoe-fr.txt index 6946f2f536..42e3ad3872 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/SubClasses/WayOfWealAndWoe-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/SubClasses/WayOfWealAndWoe-fr.txt @@ -8,6 +8,6 @@ Feature/&FeatureWayOfWealAndWoeWealDescription=Après avoir effectué un jet d'a Feature/&FeatureWayOfWealAndWoeWealTitle=Bonheur Feature/&FeatureWayOfWealAndWoeWoeDescription=Après avoir effectué un jet d'attaque avec une arme de moine ou une attaque à mains nues et avoir échoué de manière critique, vous subissez des dégâts égaux à un jet de votre dé d'arts martiaux. Feature/&FeatureWayOfWealAndWoeWoeTitle=Woe -Feedback/&WoeReroll=À cause de {1}, {2} relance le dé d'attaque de {3} à {4} +Feedback/&WoeReroll=À cause de {1}, {0} relance le dé d'attaque de {2} à {3} Subclass/&WayOfWealAndWoeDescription=Les moines de la Voie du Bien et du Malheur se concentrent à la fois sur la prospérité et l'adversité pour engager leurs ennemis dans la bataille. Subclass/&WayOfWealAndWoeTitle=La voie du bonheur et du malheur diff --git a/SolastaUnfinishedBusiness/Translations/it/SubClasses/WayOfWealAndWoe-it.txt b/SolastaUnfinishedBusiness/Translations/it/SubClasses/WayOfWealAndWoe-it.txt index 33beff78dd..db5c9b00ff 100644 --- a/SolastaUnfinishedBusiness/Translations/it/SubClasses/WayOfWealAndWoe-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/SubClasses/WayOfWealAndWoe-it.txt @@ -8,6 +8,6 @@ Feature/&FeatureWayOfWealAndWoeWealDescription=Dopo aver effettuato un tiro per Feature/&FeatureWayOfWealAndWoeWealTitle=Benessere Feature/&FeatureWayOfWealAndWoeWoeDescription=Dopo aver effettuato un tiro per colpire con un'arma da monaco o un attacco senz'armi e aver mancato un colpo critico, subisci un danno pari a un tiro del tuo dado di arti marziali. Feature/&FeatureWayOfWealAndWoeWoeTitle=Woe -Feedback/&WoeReroll=A causa di {1} {2} rilancia il dado di attacco da un {3} a un {4} +Feedback/&WoeReroll=A causa di {1} {0} rilancia il dado di attacco da un {2} a un {3} Subclass/&WayOfWealAndWoeDescription=I monaci della Via della Ricchezza e della Sventura si concentrano sia sulla prosperità che sulle avversità per affrontare i loro nemici in battaglia. Subclass/&WayOfWealAndWoeTitle=Via del benessere e del dolore diff --git a/SolastaUnfinishedBusiness/Translations/ja/SubClasses/WayOfWealAndWoe-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/SubClasses/WayOfWealAndWoe-ja.txt index fe748267cb..a945856527 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/SubClasses/WayOfWealAndWoe-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/SubClasses/WayOfWealAndWoe-ja.txt @@ -8,6 +8,6 @@ Feature/&FeatureWayOfWealAndWoeWealDescription=モンク武器または素手攻 Feature/&FeatureWayOfWealAndWoeWealTitle=ウェル Feature/&FeatureWayOfWealAndWoeWoeDescription=モンク武器または素手攻撃で攻撃ロールを行い、クリティカルミスをした後、武術ダイスの 1 ロールに等しいダメージを受けます。 Feature/&FeatureWayOfWealAndWoeWoeTitle=Woe -Feedback/&WoeReroll={1} のため、{2} は攻撃ロールのダイスを {3} から {4} に振り直します。 +Feedback/&WoeReroll={1} のため、{0} は攻撃ロールダイスを {2} から {3} に再ロールします。 Subclass/&WayOfWealAndWoeDescription=貧富の道の修道士は、繁栄と逆境の両方に焦点を当てて敵と戦います。 Subclass/&WayOfWealAndWoeTitle=幸と不幸の道 diff --git a/SolastaUnfinishedBusiness/Translations/ko/SubClasses/WayOfWealAndWoe-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/SubClasses/WayOfWealAndWoe-ko.txt index 06452cda18..fadfc503ad 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/SubClasses/WayOfWealAndWoe-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/SubClasses/WayOfWealAndWoe-ko.txt @@ -8,6 +8,6 @@ Feature/&FeatureWayOfWealAndWoeWealDescription=수도사 무기나 비무장 공 Feature/&FeatureWayOfWealAndWoeWealTitle=복리 Feature/&FeatureWayOfWealAndWoeWoeDescription=수도사 무기나 비무장 공격으로 공격 굴림을 하고 치명타 피해를 입은 후에는 무술 주사위 굴림 1개에 해당하는 피해를 입습니다. Feature/&FeatureWayOfWealAndWoeWoeTitle=Woe -Feedback/&WoeReroll={1} 때문에 {2} 공격 굴림 주사위를 {3}에서 {4}로 다시 굴립니다. +Feedback/&WoeReroll={1} {0} 때문에 공격 굴림 주사위를 {2}에서 {3}으로 다시 굴립니다. Subclass/&WayOfWealAndWoeDescription=복과 비의 길의 승려들은 번영과 역경 모두에 초점을 맞춰 적과 전투를 벌입니다. Subclass/&WayOfWealAndWoeTitle=행복과 비애의 길 diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/SubClasses/WayOfWealAndWoe-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/SubClasses/WayOfWealAndWoe-pt-BR.txt index 24ca4d67da..858ce83aa2 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/SubClasses/WayOfWealAndWoe-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/SubClasses/WayOfWealAndWoe-pt-BR.txt @@ -8,6 +8,6 @@ Feature/&FeatureWayOfWealAndWoeWealDescription=Depois de fazer uma jogada de ata Feature/&FeatureWayOfWealAndWoeWealTitle=Bem Feature/&FeatureWayOfWealAndWoeWoeDescription=Depois de fazer uma jogada de ataque com uma arma de monge ou um ataque desarmado e errar gravemente, você sofre dano igual a uma jogada do seu dado de artes marciais. Feature/&FeatureWayOfWealAndWoeWoeTitle=Woe -Feedback/&WoeReroll=Por causa de {1} {2} re-rola o dado de ataque de um {3} para um {4} +Feedback/&WoeReroll=Por causa de {1} {0} re-rola o dado de ataque de um {2} para um {3} Subclass/&WayOfWealAndWoeDescription=Os monges do Caminho da Prosperidade e da Infelicidade concentram-se tanto na prosperidade quanto na adversidade para enfrentar seus inimigos na batalha. Subclass/&WayOfWealAndWoeTitle=Caminho da prosperidade e da desgraça diff --git a/SolastaUnfinishedBusiness/Translations/ru/SubClasses/WayOfWealAndWoe-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/SubClasses/WayOfWealAndWoe-ru.txt index a436c5657c..44163226de 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/SubClasses/WayOfWealAndWoe-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/SubClasses/WayOfWealAndWoe-ru.txt @@ -8,6 +8,6 @@ Feature/&FeatureWayOfWealAndWoeWealDescription=После того, как вы Feature/&FeatureWayOfWealAndWoeWealTitle=Благо Feature/&FeatureWayOfWealAndWoeWoeDescription=После того, как вы совершаете бросок атаки оружием монаха или безоружной атаки и критически промахиваетесь, вы получаете урон, равный одному броску вашей кости боевых искусств. Feature/&FeatureWayOfWealAndWoeWoeTitle=Горе -Feedback/&WoeReroll=Из-за {1} {2} перебрасывает кость броска атаки с {3} на {4} +Feedback/&WoeReroll=Из-за {1} {0} перебрасывает кость броска атаки с {2} на {3} Subclass/&WayOfWealAndWoeDescription=Монахи Пути блага и горя сосредотачиваются как на процветании, так и на невзгодах, чтобы вовлечь своих врагов в битву. Subclass/&WayOfWealAndWoeTitle=Путь блага и горя diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/SubClasses/WayOfWealAndWoe-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/SubClasses/WayOfWealAndWoe-zh-CN.txt index 6d89221566..24d4b2a7a1 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/SubClasses/WayOfWealAndWoe-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/SubClasses/WayOfWealAndWoe-zh-CN.txt @@ -8,6 +8,6 @@ Feature/&FeatureWayOfWealAndWoeWealDescription=当你使用武僧武器进行攻 Feature/&FeatureWayOfWealAndWoeWealTitle=福 Feature/&FeatureWayOfWealAndWoeWoeDescription=当你使用武僧武器或徒手攻击进行一次攻击检定并严重失手后,你会受到一次你的武艺骰的伤害。 Feature/&FeatureWayOfWealAndWoeWoeTitle=祸 -Feedback/&WoeReroll=由于 {1} {2} 重新投掷攻击检定,从 {3} 变为 {4} +Feedback/&WoeReroll=由于{1},{0}将攻击骰子从{2}重新掷到{3} Subclass/&WayOfWealAndWoeDescription=福祸宗的武僧,善于利用顺境与逆境同敌人作战。 Subclass/&WayOfWealAndWoeTitle=福祸宗 From 32462911c2625a818e91254e7f62e2a2c2c4ca54 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Fri, 13 Sep 2024 22:23:02 -0700 Subject: [PATCH 157/212] auto format and clean up --- .../UnfinishedBusinessBlueprints/Assets.txt | 4 + .../ConditionMagicStone.json | 155 ++++++++++++++++++ .../GameLocationCharacterExtensions.cs | 2 +- .../Behaviors/VerticalPushPullMotion.cs | 2 +- .../Displays/RulesDisplay.cs | 7 +- .../Models/CharacterContext.cs | 2 +- .../Spells/SpellBuildersLevel01.cs | 2 +- 7 files changed, 167 insertions(+), 7 deletions(-) create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionMagicStone.json diff --git a/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt b/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt index 62d8c59a96..b10e9e0fd1 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt +++ b/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt @@ -847,6 +847,7 @@ ConditionGiftOfTheChromaticDragonDamageCold ConditionDefinition ConditionDefinit ConditionGiftOfTheChromaticDragonDamageFire ConditionDefinition ConditionDefinition 36e168e5-ccb2-539d-b735-7953ef295b21 ConditionGiftOfTheChromaticDragonDamageLightning ConditionDefinition ConditionDefinition a4ca0c1c-fbea-51b6-a622-9105a9a7932f ConditionGiftOfTheChromaticDragonDamagePoison ConditionDefinition ConditionDefinition 6cf96f9b-b329-5af6-9c28-ead86e5b14b5 +ConditionGlibness ConditionDefinition ConditionDefinition 3182a19d-2d56-5f7a-849b-c2b28c7536b5 ConditionGrappledRestrainedEnsnared ConditionDefinition ConditionDefinition 526a12f3-594a-5627-82fa-8403e9315b07 ConditionGrappledRestrainedIceBound ConditionDefinition ConditionDefinition 968f2f49-dd5a-5f60-99e0-fe22f189bad2 ConditionGrappledRestrainedSpellWeb ConditionDefinition ConditionDefinition 7593e0f9-a1ff-539c-bf19-9ba1c7abfd60 @@ -926,6 +927,7 @@ ConditionLauncherAttackMarker ConditionDefinition ConditionDefinition 775d0214-8 ConditionLightlyObscured ConditionDefinition ConditionDefinition b4f6a93a-e532-5b1e-9482-4fc19a163c4a ConditionLightningArrow ConditionDefinition ConditionDefinition a07682ec-5181-5d93-94a2-0bcdfde53042 ConditionLightSensitivity ConditionDefinition ConditionDefinition 0c2dcf8b-8320-536c-b9f2-e685ec85b00e +ConditionMagicStone ConditionDefinition ConditionDefinition e26abe14-2554-598d-89d1-e8df7c362553 ConditionMalakhAngelicFlight ConditionDefinition ConditionDefinition 94211922-11c5-58ee-b5c5-42a3382f1b4a ConditionMalakhAngelicRadiance ConditionDefinition ConditionDefinition 5c99cf39-c491-5cda-847f-4117508bfc31 ConditionMalakhAngelicVisage ConditionDefinition ConditionDefinition d7521618-7bff-5b79-bc7a-e623cdf9e000 @@ -12216,6 +12218,7 @@ FlashFreeze SpellDefinition SpellDefinition c7bca121-71cb-5243-ad33-de4f547dd73b Foresight SpellDefinition SpellDefinition 7e0b6dac-dd42-59de-8216-2a15d6b05693 ForestGuardian SpellDefinition SpellDefinition e84a5167-a3d0-5e96-b978-60039654e3bb GiftOfAlacrity SpellDefinition SpellDefinition cfc1affd-8762-5031-b552-4a48251d784c +Glibness SpellDefinition SpellDefinition 6fff4ed6-1408-5410-9bb6-16392e1e6b15 GravitySinkhole SpellDefinition SpellDefinition 42bea70d-ddc5-5295-8c18-c6b6b9c3abf6 HeroicInfusion SpellDefinition SpellDefinition cf5c6a2f-ae52-59d6-a88d-31bb5d00c17d HolyWeapon SpellDefinition SpellDefinition ed4a2ccf-c199-5f4c-bfc3-7bc8a584e4ce @@ -12232,6 +12235,7 @@ LevitateSpell SpellDefinition SpellDefinition 91d64839-2a19-5655-a8f5-e14cd8e803 LightningArrow SpellDefinition SpellDefinition 67f4d8f5-2b76-530c-969d-887c67ecbbc3 LightningLure SpellDefinition SpellDefinition a371e3b0-84af-5794-9d67-642b9677fc8d MaddeningDarkness SpellDefinition SpellDefinition 307ab880-6bb4-514a-bc43-cd1bbb6df87d +MagicStone SpellDefinition SpellDefinition e7b2ec32-cf9f-5044-9645-08d130d4350f MagnifyGravity SpellDefinition SpellDefinition 79f50c24-d249-5283-b784-10d3ffa9b444 MantleOfThorns SpellDefinition SpellDefinition e104287c-c35e-5355-b4ab-527a4a46860e MassHeal SpellDefinition SpellDefinition 0a9e59ba-4e57-52a5-ab05-27ae3c96e34f diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionMagicStone.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionMagicStone.json new file mode 100644 index 0000000000..fb3aef7c7a --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionMagicStone.json @@ -0,0 +1,155 @@ +{ + "$type": "ConditionDefinition, Assembly-CSharp", + "inDungeonEditor": false, + "parentCondition": null, + "conditionType": "Beneficial", + "features": [], + "allowMultipleInstances": false, + "silentWhenAdded": true, + "silentWhenRemoved": true, + "silentWhenRefreshed": false, + "terminateWhenRemoved": false, + "specialDuration": false, + "durationType": "Hour", + "durationParameterDie": "D4", + "durationParameter": 1, + "forceTurnOccurence": false, + "turnOccurence": "EndOfTurn", + "specialInterruptions": [], + "interruptionRequiresSavingThrow": false, + "interruptionSavingThrowComputationMethod": "SaveOverride", + "interruptionSavingThrowAbility": "", + "interruptionDamageThreshold": 0, + "keepConditionIfSavingThrowSucceeds": false, + "interruptionSavingThrowAffinity": "None", + "conditionTags": [], + "recurrentEffectForms": [], + "cancellingConditions": [], + "additionalDamageWhenHit": false, + "additionalDamageTypeDetermination": "Specific", + "additionalDamageType": "", + "additionalDamageQuantity": "AbilityBonus", + "additionalDamageDieType": "D1", + "additionalDamageDieNumber": 1, + "additionalConditionWhenHit": false, + "additionalCondition": null, + "additionalConditionDurationType": "Round", + "additionalConditionDurationParameter": 1, + "additionalConditionTurnOccurenceType": "StartOfTurn", + "conditionStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "conditionParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "conditionEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "recurrentEffectParticleReference": null, + "characterShaderReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "particlesBasedOnAncestryDamageType": false, + "ancestryType": "Sorcerer", + "acidParticleParameters": null, + "coldParticleParameters": null, + "fireParticleParameters": null, + "lightningParticleParameters": null, + "poisonParticleParameters": null, + "overrideCharacterShaderColors": false, + "firstCharacterShaderColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "secondCharacterShaderColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "timeToWaitBeforeApplyingShader": 0.5, + "timeToWaitBeforeRemovingShader": 0.5, + "possessive": false, + "amountOrigin": "None", + "baseAmount": 0, + "additiveAmount": false, + "sourceAbilityBonusMinValue": 1, + "subsequentOnRemoval": null, + "subsequentHasSavingThrow": false, + "subsequentSavingThrowAbilityScore": "Constitution", + "subsequentVariableForDC": "FrenzyExhaustionDC", + "subsequentDCIncrease": 5, + "effectFormsOnRemoved": [], + "forceBehavior": false, + "addBehavior": false, + "fearSource": false, + "battlePackage": null, + "explorationPackage": null, + "removedFromTheGame": false, + "permanentlyRemovedIfExtraPlanar": false, + "refundReceivedDamageWhenRemoved": false, + "followSourcePosition": false, + "disolveCharacterOnDeath": false, + "disolveParameters": { + "$type": "GraphicsCharacterDefinitions+DisolveParameters, Assembly-CSharp", + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "colorWidth": 0.0, + "noiseScale": 5.0, + "hueScale": 0.0, + "vertexOffset": 0.0, + "curve": { + "$type": "UnityEngine.AnimationCurve, UnityEngine.CoreModule" + }, + "startAfterDeathAnimation": false, + "duration": 0.0 + }, + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": true, + "title": "Feature/&NoContentTitle", + "description": "Feature/&NoContentTitle", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "e26abe14-2554-598d-89d1-e8df7c362553", + "contentPack": 9999, + "name": "ConditionMagicStone" +} \ No newline at end of file diff --git a/SolastaUnfinishedBusiness/Api/GameExtensions/GameLocationCharacterExtensions.cs b/SolastaUnfinishedBusiness/Api/GameExtensions/GameLocationCharacterExtensions.cs index b8a731b451..574e82121b 100644 --- a/SolastaUnfinishedBusiness/Api/GameExtensions/GameLocationCharacterExtensions.cs +++ b/SolastaUnfinishedBusiness/Api/GameExtensions/GameLocationCharacterExtensions.cs @@ -813,7 +813,7 @@ internal static void HandleMonkMartialArts(this GameLocationCharacter instance) var usablePower = PowerProvider.Get(FeatureDefinitionPowers.PowerMonkMartialArts, rulesetCharacter); - instance.MyExecuteActionSpendPower(usablePower); + instance.MyExecuteActionSpendPower(usablePower, true, instance); } internal static int GetAllowedMainAttacks(this GameLocationCharacter instance) diff --git a/SolastaUnfinishedBusiness/Behaviors/VerticalPushPullMotion.cs b/SolastaUnfinishedBusiness/Behaviors/VerticalPushPullMotion.cs index 23132822d7..3fe4f3570a 100644 --- a/SolastaUnfinishedBusiness/Behaviors/VerticalPushPullMotion.cs +++ b/SolastaUnfinishedBusiness/Behaviors/VerticalPushPullMotion.cs @@ -62,7 +62,7 @@ public static bool ComputePushDestination( var flag = true; var canMoveThroughWalls = target.CanMoveInSituation(RulesetCharacter.MotionRange.ThroughWalls); var size = target.SizeParameters; - + //TODO: find a way to add sliding if only part of sides are blocked? foreach (var side in AllSides) { diff --git a/SolastaUnfinishedBusiness/Displays/RulesDisplay.cs b/SolastaUnfinishedBusiness/Displays/RulesDisplay.cs index 09f4223922..5c3f78035e 100644 --- a/SolastaUnfinishedBusiness/Displays/RulesDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/RulesDisplay.cs @@ -486,18 +486,19 @@ internal static void DisplayRules() UI.Label(); toggle = Main.Settings.AllowAlliesToPerceiveRangerGloomStalkerInNaturalDarkness; - if (UI.Toggle(Gui.Localize("ModUi/&AllowAlliesToPerceiveRangerGloomStalkerInNaturalDarkness"), ref toggle, UI.AutoWidth())) + if (UI.Toggle(Gui.Localize("ModUi/&AllowAlliesToPerceiveRangerGloomStalkerInNaturalDarkness"), ref toggle, + UI.AutoWidth())) { Main.Settings.AllowAlliesToPerceiveRangerGloomStalkerInNaturalDarkness = toggle; } - + toggle = Main.Settings.ChangeDragonbornElementalBreathUsages; if (UI.Toggle(Gui.Localize("ModUi/&ChangeDragonbornElementalBreathUsages"), ref toggle, UI.AutoWidth())) { Main.Settings.ChangeDragonbornElementalBreathUsages = toggle; CharacterContext.SwitchDragonbornElementalBreathUsages(); } - + toggle = Main.Settings.EnableSignatureSpellsRelearn; if (UI.Toggle(Gui.Localize("ModUi/&EnableSignatureSpellsRelearn"), ref toggle, UI.AutoWidth())) { diff --git a/SolastaUnfinishedBusiness/Models/CharacterContext.cs b/SolastaUnfinishedBusiness/Models/CharacterContext.cs index 50ca7023ff..9b475df961 100644 --- a/SolastaUnfinishedBusiness/Models/CharacterContext.cs +++ b/SolastaUnfinishedBusiness/Models/CharacterContext.cs @@ -741,7 +741,7 @@ internal static void SwitchHelpPower() internal static void SwitchProneAction() { - DropProne.actionType = ActionDefinitions.ActionType.NoCost; + DropProne.actionType = ActionDefinitions.ActionType.NoCost; DropProne.formType = Main.Settings.AddFallProneActionToAllRaces ? ActionDefinitions.ActionFormType.Small : ActionDefinitions.ActionFormType.Invisible; diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs index eaf402c9a6..cc94b2d529 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs @@ -2140,7 +2140,7 @@ internal static SpellDefinition BuildGoneWithTheWind() .SetGuiPresentation(Category.Condition, Gui.EmptyContent, ConditionDefinitions.ConditionDisengaging) .SetPossessive() .SetFeatures(movementAffinityStrikeWithTheWind) - .AddToDB(); + .AddToDB(); var additionalDamageStrikeWithTheWind = FeatureDefinitionAdditionalDamageBuilder .Create($"AdditionalDamage{NAME}") From abf379f9367bb8ea329aa4dc69ef11e66dbca640 Mon Sep 17 00:00:00 2001 From: EnderWiggin Date: Sat, 14 Sep 2024 10:20:15 +0300 Subject: [PATCH 158/212] moved patch for GameLocationCharacterManager.RevealCharacter from GameLocationPositioningManagerPatcher to GameLocationCharacterManagerPatcher --- .../Patches/GameLocationCharacterManagerPatcher.cs | 13 +++++++++++++ .../GameLocationPositioningManagerPatcher.cs | 14 -------------- 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/SolastaUnfinishedBusiness/Patches/GameLocationCharacterManagerPatcher.cs b/SolastaUnfinishedBusiness/Patches/GameLocationCharacterManagerPatcher.cs index a55a51baed..14cc27d2f5 100644 --- a/SolastaUnfinishedBusiness/Patches/GameLocationCharacterManagerPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/GameLocationCharacterManagerPatcher.cs @@ -32,6 +32,19 @@ public static void Prefix(Side side, ref GameLocationBehaviourPackage behaviourP } } } + + //PATH: Fire monsters should emit light + [HarmonyPatch(typeof(GameLocationCharacterManager), nameof(GameLocationCharacterManager.RevealCharacter))] + [SuppressMessage("Minor Code Smell", "S101:Types should be named in PascalCase", Justification = "Patch")] + [UsedImplicitly] + public static class RevealCharacter_Patch + { + [UsedImplicitly] + public static void Postfix(GameLocationCharacter character) + { + SrdAndHouseRulesContext.AddLightSourceIfNeeded(character); + } + } [HarmonyPatch(typeof(GameLocationCharacterManager), nameof(GameLocationCharacterManager.CreateAndBindEffectProxy))] diff --git a/SolastaUnfinishedBusiness/Patches/GameLocationPositioningManagerPatcher.cs b/SolastaUnfinishedBusiness/Patches/GameLocationPositioningManagerPatcher.cs index b1d68df272..8f4fc398fb 100644 --- a/SolastaUnfinishedBusiness/Patches/GameLocationPositioningManagerPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/GameLocationPositioningManagerPatcher.cs @@ -6,7 +6,6 @@ using HarmonyLib; using JetBrains.Annotations; using SolastaUnfinishedBusiness.Api.Helpers; -using SolastaUnfinishedBusiness.Models; using TA; namespace SolastaUnfinishedBusiness.Patches; @@ -32,17 +31,4 @@ public static IEnumerable Transpiler([NotNull] IEnumerable Date: Sat, 14 Sep 2024 13:04:06 +0300 Subject: [PATCH 159/212] fix medium creatures with height 60+ inches (elves, humans and orcs mostly) being considered 1 tile taller --- .../Patches/RulesetCharacterPatcher.cs | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/SolastaUnfinishedBusiness/Patches/RulesetCharacterPatcher.cs b/SolastaUnfinishedBusiness/Patches/RulesetCharacterPatcher.cs index fd5f5304ba..20088bb365 100644 --- a/SolastaUnfinishedBusiness/Patches/RulesetCharacterPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/RulesetCharacterPatcher.cs @@ -8,6 +8,7 @@ using System.Reflection.Emit; using HarmonyLib; using JetBrains.Annotations; +using SolastaUnfinishedBusiness.Api; using SolastaUnfinishedBusiness.Api.GameExtensions; using SolastaUnfinishedBusiness.Api.Helpers; using SolastaUnfinishedBusiness.Api.LanguageExtensions; @@ -82,6 +83,27 @@ private static void EnumerateFeatureDefinitionRegeneration( !__instance.IsValid(x.GetAllSubFeaturesOfType())); } + [HarmonyPatch(typeof(RulesetCharacter), nameof(RulesetCharacter.RefreshSizeParams))] + [SuppressMessage("Minor Code Smell", "S101:Types should be named in PascalCase", Justification = "Patch")] + [UsedImplicitly] + public static class RefreshSizeParams_Patch + { + [UsedImplicitly] + public static void Postfix(RulesetCharacter __instance) + { + //PATCH: fix medium creatures with height 60+ inches (elves, humans and orcs mostly) being considered 1 tile taller + CharacterSizeDefinition size = __instance.SizeDefinition; + //skip for non-medium creatures, since I didn't find any non-medium creatures that have this problem + if (size.Name != DatabaseHelper.CharacterSizeDefinitions.Medium.Name) { return; } + + __instance.SizeParams = new RulesetActor.SizeParameters + { + minExtent = size.MinExtent, + maxExtent = size.MaxExtent + }; + } + } + //PATCH: supports Prone condition to correctly interact with reach attacks [HarmonyPatch(typeof(RulesetCharacter), nameof(RulesetCharacter.ComputeAttackModifier))] [SuppressMessage("Minor Code Smell", "S101:Types should be named in PascalCase", Justification = "Patch")] From 6c62e6bed517e98122b2701890d8e0073a00ec0e Mon Sep 17 00:00:00 2001 From: EnderWiggin Date: Sat, 14 Sep 2024 14:45:36 +0300 Subject: [PATCH 160/212] fixed save by location not showing saves for campaigns you don't have installed --- .../Models/SaveByLocationContext.cs | 324 ++++++------------ .../TacticalAdventuresApplicationPatcher.cs | 2 +- 2 files changed, 105 insertions(+), 221 deletions(-) diff --git a/SolastaUnfinishedBusiness/Models/SaveByLocationContext.cs b/SolastaUnfinishedBusiness/Models/SaveByLocationContext.cs index 0e7e27da44..500a53974f 100644 --- a/SolastaUnfinishedBusiness/Models/SaveByLocationContext.cs +++ b/SolastaUnfinishedBusiness/Models/SaveByLocationContext.cs @@ -17,6 +17,7 @@ internal static class SaveByLocationContext private const string LocationSaveFolder = @"CE\Location"; private const string CampaignSaveFolder = @"CE\Campaign"; private const string OfficialSaveFolder = @"CE\Official"; + private const string DefaultName = "Default"; internal static readonly string DefaultSaveGameDirectory = Path.Combine(TacticalAdventuresApplication.GameDirectory, "Saves"); @@ -30,132 +31,50 @@ internal static class SaveByLocationContext private static readonly string OfficialSaveGameDirectory = Path.Combine(DefaultSaveGameDirectory, OfficialSaveFolder); - private static List _allOfficialCampaigns; - private static List _allUserLocations; - private static List _allUserCampaigns; - internal static CustomDropDown Dropdown { get; private set; } + //TODO: is this still used? internal static bool UseLightEnumeration { get; private set; } - private static IEnumerable AllOfficialCampaigns + private static List GetAllSavePlaces() { - get - { - if (_allOfficialCampaigns != null) - { - return _allOfficialCampaigns; - } - - _allOfficialCampaigns = []; - - var allElements = DatabaseRepository.GetDatabase().GetAllElements(); - - foreach (var campaign in allElements) - { - if (campaign.GuiPresentation.Hidden || campaign.IsUserCampaign || campaign.EditorOnly) - { - continue; - } - - _allOfficialCampaigns.Add(campaign); - } - - return _allOfficialCampaigns; - } + // Find the most recently touched save file and select the correct location/campaign for that save + return EnumerateDirectories(LocationSaveGameDirectory, LocationType.UserLocation) + .Concat(EnumerateDirectories(CampaignSaveGameDirectory, LocationType.CustomCampaign)) + .Concat(EnumerateDirectories(OfficialSaveGameDirectory, LocationType.StandardCampaign)) + .Append(MostRecentFile(DefaultSaveGameDirectory, LocationType.Default)) + .Where(d => d.Available) + .ToList(); } - private static IEnumerable AllUserLocations + internal static SavePlace GetMostRecentPlace() { - get - { - if (_allUserLocations != null) - { - return _allUserLocations; - } - - var userLocationPoolService = - (UserLocationPoolManager)ServiceRepository.GetService(); - - if (!userLocationPoolService.Enumerated) - { - UseLightEnumeration = true; - userLocationPoolService.EnumeratePool(out _, []); - userLocationPoolService.enumerated = false; - UseLightEnumeration = false; - } - - _allUserLocations = userLocationPoolService.AllLocations; - - return _allUserLocations; - } + return GetAllSavePlaces() + .Where(d => d.Date.HasValue) + .OrderByDescending(d => d.Date.Value) + .FirstOrDefault() + ?? SavePlace.Default(); } - private static IEnumerable AllUserCampaigns + private static IEnumerable EnumerateDirectories(string where, LocationType type) { - get - { - if (_allUserCampaigns != null) - { - return _allUserCampaigns; - } - - var userCampaignPoolService = - (UserCampaignPoolManager)ServiceRepository.GetService(); - - if (!userCampaignPoolService.Enumerated) - { - UseLightEnumeration = true; - userCampaignPoolService.EnumeratePool(out _, []); - userCampaignPoolService.enumerated = false; - UseLightEnumeration = false; - } - - _allUserCampaigns = userCampaignPoolService.AllCampaigns; - - return _allUserCampaigns; - } + return Directory.EnumerateDirectories(where) + .Select(dir => MostRecentFile(dir, type)); } - internal static (string, LocationType) GetMostRecent() + private static SavePlace MostRecentFile(string dir, LocationType type) { - // Find the most recently touched save file and select the correct location/campaign for that save - var mostRecent = Directory.EnumerateDirectories(LocationSaveGameDirectory) - .Select(d => - ( - d, - Directory.EnumerateFiles(d, "*.sav").Max(f => (DateTime?)File.GetLastWriteTimeUtc(f)), - LocationType.UserLocation - )) - .Concat( - Directory.EnumerateDirectories(CampaignSaveGameDirectory) - .Select(d => - ( - d, - Directory.EnumerateFiles(d, "*.sav").Max(f => (DateTime?)File.GetLastWriteTimeUtc(f)), - LocationType.CustomCampaign - )) - .Concat( - Directory.EnumerateDirectories(OfficialSaveGameDirectory) - .Select(d => - ( - d, - Directory.EnumerateFiles(d, "*.sav").Max(f => (DateTime?)File.GetLastWriteTimeUtc(f)), - LocationType.StandardCampaign - )) - .Concat( - Enumerable.Repeat( - ( - DefaultSaveGameDirectory, - Directory.EnumerateFiles(DefaultSaveGameDirectory, "*.sav") - .Max(f => (DateTime?)File.GetLastWriteTimeUtc(f)), - LocationType.Default - ), 1)))) - .Where(d => d.Item2.HasValue) - .OrderByDescending(d => d.Item2) - .FirstOrDefault(); - - return (mostRecent.Item1 ?? DefaultSaveGameDirectory, mostRecent.Item3); + var files = Directory.EnumerateFiles(dir, "*.sav").ToList(); + var place = new SavePlace + { + Name = type == LocationType.Default ? DefaultName : Path.GetFileName(dir), + Path = dir, + Count = files.Count, + Date = files.Max(f => (DateTime?)File.GetLastWriteTimeUtc(f)), + Type = type + }; + Main.Log2($"[{place.Name}] type:{place.Type} count:{place.Count}, date:{place.Date}, path:{place.Path}"); + return place; } internal static void LateLoad() @@ -171,46 +90,11 @@ internal static void LateLoad() Main.EnsureFolderExists(CampaignSaveGameDirectory); // Find the most recently touched save file and select the correct location/campaign for that save - var (path, locationType) = GetMostRecent(); + var place = GetMostRecentPlace(); + Main.Log2($"MOST RECENT '{place.Path}' type:{place.Type}"); ServiceRepositoryEx.GetOrCreateService() - .SetCampaignLocation(locationType, Path.GetFileName(path)); - } - - private static int SaveFileCount(LocationType locationType, string folder) - { - switch (locationType) - { - case LocationType.UserLocation: - { - var saveFolder = Path.Combine(LocationSaveGameDirectory, folder); - - return Directory.Exists(saveFolder) ? Directory.EnumerateFiles(saveFolder, "*.sav").Count() : 0; - } - case LocationType.CustomCampaign: - { - var saveFolder = Path.Combine(CampaignSaveGameDirectory, folder); - - return Directory.Exists(saveFolder) ? Directory.EnumerateFiles(saveFolder, "*.sav").Count() : 0; - } - case LocationType.StandardCampaign: - { - var saveFolder = Path.Combine(OfficialSaveGameDirectory, folder); - - return Directory.Exists(saveFolder) ? Directory.EnumerateFiles(saveFolder, "*.sav").Count() : 0; - } - case LocationType.Default: - { - var saveFolder = DefaultSaveGameDirectory; - - return Directory.Exists(saveFolder) ? Directory.EnumerateFiles(saveFolder, "*.sav").Count() : 0; - } - default: - Main.Error($"Unknown LocationType: {locationType}"); - break; - } - - return 0; + .SetCampaignLocation(place.Type, place.Name); } internal static void LoadPanelOnBeginShowSaveByLocationBehavior(LoadPanel panel) @@ -224,42 +108,11 @@ internal static void LoadPanelOnBeginShowSaveByLocationBehavior(LoadPanel panel) // populate the dropdown guiDropdown.ClearOptions(); - - var officialCampaigns = AllOfficialCampaigns - .Select(c => new - { - LocationType = LocationType.StandardCampaign, Title = Gui.Localize(c.GuiPresentation.Title) - }) - .OrderBy(c => c.Title) - .ToList(); - - // add them together - each block sorted - can we have separators? - var userContentList = - AllUserCampaigns - .Select(l => new { LocationType = LocationType.CustomCampaign, l.Title }) - .OrderBy(l => l.Title) - .Concat(AllUserLocations - .Select(l => new { LocationType = LocationType.UserLocation, l.Title }) - .OrderBy(l => l.Title)) - .ToList(); - guiDropdown.AddOptions( - Enumerable.Repeat(new { LocationType = LocationType.Default, Title = "Default" }, 1) - .Union(officialCampaigns) - .Union(userContentList) - .Select(opt => new - { - opt.LocationType, opt.Title, SaveFileCount = SaveFileCount(opt.LocationType, opt.Title) - }) - .Select(opt => new LocationOptionData - { - LocationType = opt.LocationType, - text = GetTitle(opt.LocationType, opt.Title), - CampaignOrLocation = opt.Title, - TooltipContent = $"{opt.SaveFileCount} save{(opt.SaveFileCount == 1 ? "" : "s")}", - ShowInDropdown = opt.SaveFileCount > 0 || opt.LocationType is LocationType.Default - }) - .Where(opt => opt.ShowInDropdown) // Only show locations that have saves + GetAllSavePlaces() + .Where(p => p.Available) + .OrderBy(p => p) + .Select(LocationOptionData.Create) .Cast() .ToList()); @@ -271,7 +124,7 @@ internal static void LoadPanelOnBeginShowSaveByLocationBehavior(LoadPanel panel) var option = guiDropdown.Options .Cast() - .Select((o, i) => new { o.CampaignOrLocation, o.LocationType, Index = i }) + .Select((o, i) => new { CampaignOrLocation = o.Title, o.LocationType, Index = i }) .Where(opt => opt.LocationType == selectedCampaign.LocationType) .FirstOrDefault(o => o.CampaignOrLocation == selectedCampaign.CampaignOrLocationName); @@ -295,24 +148,6 @@ internal static void LoadPanelOnBeginShowSaveByLocationBehavior(LoadPanel panel) return; - string GetTitle(LocationType locationType, string title) - { - switch (locationType) - { - default: - Main.Error($"Unknown LocationType: {locationType}"); - return title.Red(); - case LocationType.Default: - return title; - case LocationType.StandardCampaign: - return title; - case LocationType.CustomCampaign: - return title.Khaki(); - case LocationType.UserLocation: - return title.Orange(); - } - } - void ValueChanged([NotNull] TMP_Dropdown.OptionData selected) { // update selected campaign @@ -325,7 +160,7 @@ void ValueChanged([NotNull] TMP_Dropdown.OptionData selected) // ReSharper disable once InvocationIsSkipped Main.Log( - $"ValueChanged: selected={locationData.LocationType}, {locationData.text}, {locationData.CampaignOrLocation}"); + $"ValueChanged: selected={locationData.LocationType}, {locationData.text}, {locationData.Title}"); selectedCampaignService.SetCampaignLocation(locationData); @@ -379,9 +214,37 @@ CustomDropDown CreateOrActivateDropdown() internal sealed class LocationOptionData : GuiDropdown.OptionDataAdvanced { - internal string CampaignOrLocation { get; set; } - internal LocationType LocationType { get; set; } - internal bool ShowInDropdown { get; set; } + internal string Title { get; private set; } + internal LocationType LocationType { get; private set; } + + internal static LocationOptionData Create(SavePlace place) + { + return new LocationOptionData + { + LocationType = place.Type, + text = GetTitle(place.Type, place.Name), + Title = place.Name, + TooltipContent = $"{place.Count} save{(place.Count == 1 ? "" : "s")}", + }; + } + + private static string GetTitle(LocationType locationType, string title) + { + switch (locationType) + { + case LocationType.Default: + return title; + case LocationType.StandardCampaign: + return title; + case LocationType.CustomCampaign: + return title.Khaki(); + case LocationType.UserLocation: + return title.Orange(); + default: + Main.Error($"Unknown LocationType: {locationType}"); + return title.Red(); + } + } } internal static class ServiceRepositoryEx @@ -403,23 +266,15 @@ internal static class ServiceRepositoryEx } } - private interface ISelectedCampaignService : IService - { - // string CampaignOrLocationName { get; } - // LocationType LocationType { get; } - // string SaveGameDirectory { get; } - // void SetCampaignLocation(string campaign, string location); - } - internal enum LocationType { Default, StandardCampaign, - UserLocation, - CustomCampaign + CustomCampaign, + UserLocation } - internal sealed class SelectedCampaignService : ISelectedCampaignService + internal sealed class SelectedCampaignService : IService { internal string CampaignOrLocationName { get; private set; } internal string SaveGameDirectory { get; private set; } @@ -427,7 +282,7 @@ internal sealed class SelectedCampaignService : ISelectedCampaignService internal void SetCampaignLocation([NotNull] LocationOptionData selected) { - SetCampaignLocation(selected.LocationType, selected.CampaignOrLocation); + SetCampaignLocation(selected.LocationType, selected.Title); } internal void SetCampaignLocation(LocationType type, string name) @@ -452,4 +307,33 @@ internal void SetCampaignLocation(LocationType type, string name) $"SelectedCampaignService: Type='{LocationType}', Name='{CampaignOrLocationName}', Folder='{SaveGameDirectory}'"); } } + + internal class SavePlace : IComparable + { + public string Name; + public string Path; + public int Count; + public DateTime? Date; + public LocationType Type; + + public bool Available => Count > 0 || Type is LocationType.Default; + + public static SavePlace Default() + { + return new SavePlace + { + Path = DefaultSaveGameDirectory, Count = 0, Date = null, Type = LocationType.Default + }; + } + + public int CompareTo(SavePlace other) + { + if (other == null) { return -1; } + + var type = Type.CompareTo(other.Type); + return type != 0 + ? type + : String.Compare(Name, other.Name, StringComparison.Ordinal); + } + } } diff --git a/SolastaUnfinishedBusiness/Patches/TacticalAdventuresApplicationPatcher.cs b/SolastaUnfinishedBusiness/Patches/TacticalAdventuresApplicationPatcher.cs index eb6ab30f2a..f66c1b7be9 100644 --- a/SolastaUnfinishedBusiness/Patches/TacticalAdventuresApplicationPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/TacticalAdventuresApplicationPatcher.cs @@ -24,7 +24,7 @@ private static bool EnableSaveByLocation(ref string __result) if (Gui.GameCampaign?.campaignDefinition?.IsUserCampaign == true && selectedCampaignService is { LocationType: LocationType.StandardCampaign }) { - (__result, _) = GetMostRecent(); + __result = GetMostRecentPlace().Path; return false; } From a1e360e2af35c8fc520d3c36efeb58026b588707 Mon Sep 17 00:00:00 2001 From: EnderWiggin Date: Sat, 14 Sep 2024 14:46:04 +0300 Subject: [PATCH 161/212] fixed save by campaign not disabling continue/load buttons if there's no saves --- .../GameSerializationManagerPatcher.cs | 34 ++++++++++++------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/SolastaUnfinishedBusiness/Patches/GameSerializationManagerPatcher.cs b/SolastaUnfinishedBusiness/Patches/GameSerializationManagerPatcher.cs index be9ba9251c..6e181f26ab 100644 --- a/SolastaUnfinishedBusiness/Patches/GameSerializationManagerPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/GameSerializationManagerPatcher.cs @@ -1,32 +1,40 @@ using System.Diagnostics.CodeAnalysis; using HarmonyLib; using JetBrains.Annotations; +using SolastaUnfinishedBusiness.Models; namespace SolastaUnfinishedBusiness.Patches; [UsedImplicitly] public static class GameSerializationManagerPatcher { - [HarmonyPatch(typeof(GameSerializationManager), nameof(GameSerializationManager.CanLoad), MethodType.Getter)] + [HarmonyPatch(typeof(GameSerializationManager), nameof(GameSerializationManager.Refresh))] [SuppressMessage("Minor Code Smell", "S101:Types should be named in PascalCase", Justification = "Patch")] [UsedImplicitly] - public static class CanLoad_Getter_Patch + public static class Refresh_Patch { [UsedImplicitly] - public static bool Prefix( - GameSerializationManager __instance, - ref bool __result) + public static void Postfix(GameSerializationManager __instance) { - //PATCH: EnableSaveByLocation - if (!Main.Settings.EnableSaveByLocation) - { - return true; - } + //PATCH: update state of load buttons for SaveByLocation + if (!Main.Settings.EnableSaveByLocation) { return; } - // Enable/disable the 'load' button in the load save panel - __result = !__instance.saving && !__instance.loading && __instance.loadDisabledTokens.Count == 0; + __instance.hasSavedGames = SaveByLocationContext.GetMostRecentPlace().Count > 0; + } + } + + [HarmonyPatch(typeof(GameSerializationManager), nameof(GameSerializationManager.RefreshAsync))] + [SuppressMessage("Minor Code Smell", "S101:Types should be named in PascalCase", Justification = "Patch")] + [UsedImplicitly] + public static class RefreshAsync_Patch + { + [UsedImplicitly] + public static void Postfix(GameSerializationManager __instance) + { + //PATCH: update state of load buttons for SaveByLocation + if (!Main.Settings.EnableSaveByLocation) { return; } - return false; + __instance.hasSavedGames = SaveByLocationContext.GetMostRecentPlace().Count > 0; } } } From 1219d87275dd12032311e3f8e2de8fc9b660187b Mon Sep 17 00:00:00 2001 From: EnderWiggin Date: Sat, 14 Sep 2024 14:48:44 +0300 Subject: [PATCH 162/212] removed extra logs --- SolastaUnfinishedBusiness/Models/SaveByLocationContext.cs | 2 -- 1 file changed, 2 deletions(-) diff --git a/SolastaUnfinishedBusiness/Models/SaveByLocationContext.cs b/SolastaUnfinishedBusiness/Models/SaveByLocationContext.cs index 500a53974f..45171726e2 100644 --- a/SolastaUnfinishedBusiness/Models/SaveByLocationContext.cs +++ b/SolastaUnfinishedBusiness/Models/SaveByLocationContext.cs @@ -73,7 +73,6 @@ private static SavePlace MostRecentFile(string dir, LocationType type) Date = files.Max(f => (DateTime?)File.GetLastWriteTimeUtc(f)), Type = type }; - Main.Log2($"[{place.Name}] type:{place.Type} count:{place.Count}, date:{place.Date}, path:{place.Path}"); return place; } @@ -91,7 +90,6 @@ internal static void LateLoad() // Find the most recently touched save file and select the correct location/campaign for that save var place = GetMostRecentPlace(); - Main.Log2($"MOST RECENT '{place.Path}' type:{place.Type}"); ServiceRepositoryEx.GetOrCreateService() .SetCampaignLocation(place.Type, place.Name); From 0fa6f2c9180a7133008deb5710e774679b0df3d6 Mon Sep 17 00:00:00 2001 From: EnderWiggin Date: Sat, 14 Sep 2024 17:52:28 +0300 Subject: [PATCH 163/212] report Dashing condition, so players can see when characters use dash action --- .../Models/FixesContext.cs | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/SolastaUnfinishedBusiness/Models/FixesContext.cs b/SolastaUnfinishedBusiness/Models/FixesContext.cs index 8d2ce15f2a..815911ab56 100644 --- a/SolastaUnfinishedBusiness/Models/FixesContext.cs +++ b/SolastaUnfinishedBusiness/Models/FixesContext.cs @@ -88,6 +88,7 @@ internal static void LateLoad() FixTwinnedMetamagic(); FixUncannyDodgeForRoguishDuelist(); FixPaladinAurasDisplayOnActionBar(); + ReportDashing(); // fix Dazzled attribute modifier UI previously displaying Daaaaal on attribute modifier AttributeModifierDazzled.GuiPresentation.title = "Feature/&AttributeModifierDazzledTitle"; @@ -659,6 +660,28 @@ x.ActivationTime is ActivationTime.Permanent or ActivationTime.PermanentUnlessIn power.AddCustomSubFeatures(ModifyPowerVisibility.Hidden); } } + + private static void ReportDashing() + { + Report(ConditionDefinitions.ConditionDashing); + Report(ConditionDefinitions.ConditionDashingAdditional); + Report(ConditionDefinitions.ConditionDashingAdditionalSwiftBlade); + Report(ConditionDefinitions.ConditionDashingBonus); + Report(ConditionDefinitions.ConditionDashingBonusAdditional); + Report(ConditionDefinitions.ConditionDashingBonusStepOfTheWind); + Report(ConditionDefinitions.ConditionDashingBonusSwiftBlade); + Report(ConditionDefinitions.ConditionDashingBonusSwiftSteps); + Report(ConditionDefinitions.ConditionDashingExpeditiousRetreat); + Report(ConditionDefinitions.ConditionDashingExpeditiousRetreatSwiftBlade); + return; + + static void Report(ConditionDefinition condition) + { + condition.GuiPresentation.Title = "Screen/&DashModeTitle"; + condition.GuiPresentation.hidden = false; + condition.silentWhenAdded = false; + } + } private static void FixAdditionalDamageRogueSneakAttack() { From b221206a833b5f684ba7c6bd0cf95db6dc82a9be Mon Sep 17 00:00:00 2001 From: EnderWiggin Date: Sat, 14 Sep 2024 17:52:55 +0300 Subject: [PATCH 164/212] small cleanup --- SolastaUnfinishedBusiness/Models/AiContext.cs | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/SolastaUnfinishedBusiness/Models/AiContext.cs b/SolastaUnfinishedBusiness/Models/AiContext.cs index da85c7eaaf..f67d0264e3 100644 --- a/SolastaUnfinishedBusiness/Models/AiContext.cs +++ b/SolastaUnfinishedBusiness/Models/AiContext.cs @@ -6,6 +6,7 @@ using TA.AI; using TA.AI.Activities; using TA.AI.Considerations; +using UnityEngine; using Object = UnityEngine.Object; namespace SolastaUnfinishedBusiness.Models; @@ -58,10 +59,7 @@ internal static ActivityScorerDefinition CreateActivityScorer( private static ConsiderationDefinition CreateConsiderationDefinition( string name, ConsiderationDescription consideration) { - var baseDescription = - FixesContext.DecisionMoveAfraid.Decision.Scorer.WeightedConsiderations[0].ConsiderationDefinition; - - var result = Object.Instantiate(baseDescription); + var result = ScriptableObject.CreateInstance(); result.name = name; result.consideration = consideration; @@ -72,12 +70,9 @@ private static ConsiderationDefinition CreateConsiderationDefinition( private static WeightedConsiderationDescription GetWeightedConsiderationDescriptionByDecisionAndConsideration( DecisionDefinition decisionDefinition, string considerationType) { - var weightedConsiderationDescription = - decisionDefinition.Decision.Scorer.WeightedConsiderations - .FirstOrDefault(y => y.ConsiderationDefinition.Consideration.considerationType == considerationType) - ?? throw new Exception(); - - return weightedConsiderationDescription; + return decisionDefinition.Decision.Scorer.WeightedConsiderations + .FirstOrDefault(y => y.ConsiderationDefinition.Consideration.considerationType == considerationType) + ?? throw new Exception(); } internal static DecisionPackageDefinition BuildDecisionPackageBreakFree(string conditionName) From 0f91ad337e2f594467fee5d2a7fc885ff5d73b66 Mon Sep 17 00:00:00 2001 From: EnderWiggin Date: Sat, 14 Sep 2024 17:53:49 +0300 Subject: [PATCH 165/212] removed free dash from Command: Approach --- SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs index cc94b2d529..0b42073023 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs @@ -1283,7 +1283,6 @@ internal static SpellDefinition BuildCommand() .SetPossessive() .SetSpecialDuration() .SetBrain(packageApproach, forceBehavior: true, fearSource: true) - .SetFeatures(MovementAffinityConditionDashing) .AddToDB(); conditionApproach.AddCustomSubFeatures(new ActionFinishedByMeApproach(conditionApproach)); From 0e318f043000a4f2762c88e5b5b1bde1a4cfecff Mon Sep 17 00:00:00 2001 From: Dovel Date: Sat, 14 Sep 2024 17:58:51 +0300 Subject: [PATCH 166/212] update russian translation --- .../Translations/ru/Others-ru.txt | 12 +++++------ .../Translations/ru/Settings-ru.txt | 10 +++++----- .../Translations/ru/Spells/Cantrips-ru.txt | 12 +++++------ .../Translations/ru/Spells/Spells01-ru.txt | 8 ++++---- .../Translations/ru/Spells/Spells03-ru.txt | 2 +- .../Translations/ru/Spells/Spells04-ru.txt | 2 +- .../Translations/ru/Spells/Spells05-ru.txt | 20 +++++++++---------- .../Translations/ru/Spells/Spells08-ru.txt | 4 ++-- 8 files changed, 35 insertions(+), 35 deletions(-) diff --git a/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt index e628c63aac..ff4c86f890 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt @@ -61,10 +61,10 @@ ContentPack/&9999Description=Мод Неоконченное Дело - это ContentPack/&9999Title=Мод Неоконченное Дело Equipment/&BeltOfRegeneration_Function_Description=Восстанавливает 5 хитов за раунд в течение одной минуты. Equipment/&DLC3_DwarvenWeapon_Dagger+3_CriticalThreshold=Ваши атаки становятся критическими попаданиями при бросках 18, 19 или 20, пока вы используете это оружие и настроены на него. -Failure/&FailureFlagCannotTargetUndead=Невозможно выбрать в качестве цели нежить. -Failure/&FailureFlagMustKnowLanguage=Вы должны владеть {0} языком, чтобы управлять этим существом +Failure/&FailureFlagCannotTargetUndead=Нежить не может быть целью +Failure/&FailureFlagMustKnowLanguage=Вы должны владеть языком {0}, чтобы приказывать этому существу Failure/&FailureFlagTargetMustNotBeSurprised=Цель не должна быть застигнута врасплох -Failure/&FailureFlagTargetMustUnderstandYou=Цель должна понимать вашу команду. +Failure/&FailureFlagTargetMustUnderstandYou=Цель должна понимать ваш приказ Feature/&AbilityCheckAffinityDarknessPerceptiveDescription=Вы совершаете с преимуществом проверки Мудрости (Восприятие), если находитесь не на свету или в области магической тьмы. Feature/&AbilityCheckAffinityDarknessPerceptiveTitle=Восприятие тьмы Feature/&AlwaysBeardDescription=Шанс {0}% отрастить великолепную бороду! @@ -171,7 +171,7 @@ Feedback/&AdditionalDamageBrutalStrikeFormat=Жестокий удар Feedback/&AdditionalDamageBrutalStrikeLine=Жестокий удар наносит дополнительно +{2} урона! Feedback/&AdditionalDamageSunderingBlowFormat=Раскалывающий удар Feedback/&AdditionalDamageSunderingBlowLine=Раскалывающий наносит дополнительно +{2} урона! -Feedback/&BreakFreeAttempt={0} пытается вырваться на свободу от {2} +Feedback/&BreakFreeAttempt={0} пытается вырваться из {2} Feedback/&ChangeGloombladeDieType={1} меняет тип кости сумрачного клинка с {2} на {3} Feedback/&ChangeSneakDiceDieType={1} изменяет тип кости скрытой атаки с {2} на {3} Feedback/&ChangeSneakDiceNumber={1} изменяет число на кости скрытой атаки с {2} на {3}. @@ -246,7 +246,7 @@ Rules/&ActivationTypeOnRageStartAutomaticTitle=Автоматическое на Rules/&ActivationTypeOnReduceCreatureToZeroHPAutoTitle=Автоматическое уменьшение хитов существа до нуля Rules/&ActivationTypeOnSneakAttackHitAutoTitle=Автоматическая скрытая атака Rules/&CounterFormDismissCreatureFormat=Отпускает призванное существо -Rules/&MotionFormPushDownFormat=Нажмите вниз {0} +Rules/&MotionFormPushDownFormat=Толкуть вниз {0} Rules/&MotionFormSwitchFormat=Поменяться местами Rules/&SituationalContext9000Format=Держит в руках тип оружия Мастерства клинка: Rules/&SituationalContext9001Format=Держит в руках двуручный меч: @@ -313,7 +313,7 @@ Tooltip/&Tag9000Title=Кастомный эффект Tooltip/&TagDamageChaosBoltTitle=Хаотичный урон Tooltip/&TagUnfinishedBusinessTitle=Неоконченное Дело Tooltip/&TargetMeleeWeaponError=Невозможно провести атаку ближнего боя по этой цели, так как она находится вне пределов {0} -Tooltip/&TargetMustHaveHolyWeapon=Цель должна иметь святое оружие. +Tooltip/&TargetMustHaveHolyWeapon=У цели должно быть священное оружие Tooltip/&TargetMustNotBeSurprised=Цель не должна быть застигнута врасплох Tooltip/&TargetMustUnderstandYou=Цель должна понимать ваш приказ UI/&CustomFeatureSelectionStageDescription=Выберите дополнительные черты для вашего класса/архетипа. diff --git a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt index 1b9c138a4a..cd6fb368d2 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt @@ -5,7 +5,7 @@ ModUi/&AddBleedingToLesserRestoration=Добавить Крово ModUi/&AddCustomIconsToOfficialItems=Добавить кастомные значки к официальным игровым предметам [боеприпасы, рецепты, наборы и т.д.] [Необходим перезапуск] ModUi/&AddDarknessPerceptiveToDarkRaces=Включить Восприятие тьмы для рас Тёмных эльфов, Тёмных кобольдов и Серых дварфов \n[даёт преимущество при проверках восприятия, когда персонаж не на свету или находится в магической темноте] ModUi/&AddDexModifierToEnemiesInitiativeRoll=Добавлять модификатор Ловкости к броскам Инициативы противников -ModUi/&AddFallProneActionToAllRaces=Добавьте действие Упасть ничком ко всем игровым расам [вы можете упасть ничком бесплатно] +ModUi/&AddFallProneActionToAllRaces=Добавить действие Упасть ничком всем игровым расам [вы можете упасть ничком без затрат каких-либо действий] ModUi/&AddFighterLevelToIndomitableSavingReroll=Включить Воинам добавление уровня класса к повторным спасброскам умения Упорный ModUi/&AddHelpActionToAllRaces=Добавить действие Помощь всем игровым расам [вы можете помочь дружественному существу атаковать другое существо, находящееся в пределах 1 клетки от вас] ModUi/&AddHumanoidFavoredEnemyToRanger=Включить гуманоидов в список предпочтительных противников для Следопытам @@ -19,7 +19,7 @@ ModUi/&AdvancedHelp=• ВНИМАНИЕ: Для ModUi/&AllItemInDm=Все предметы в СП ModUi/&AllRecipesInDm=Все рецепты в СП ModUi/&AllowAllPlayersOnNarrativeSequences=+ Позволить всем игрокам участвовать в нарративных последовательностях -ModUi/&AllowAlliesToPerceiveRangerGloomStalkerInNaturalDarkness=Разрешить союзникам воспринимать Ranger GloomStalker в естественной темноте. +ModUi/&AllowAlliesToPerceiveRangerGloomStalkerInNaturalDarkness=Позволить союзникам замечать Сумрачного охотника в естественной темноте ModUi/&AllowAnyClassToWearSylvanArmor=Позволить всем классам носить Доспехи Сильвана или Одежды Несущего свет ModUi/&AllowBeardlessDwarves=Разрешить безбородых Дварфов [как, вообще, можно подумать о чём-то столь противоестественном?] ModUi/&AllowBladeCantripsToUseReach=Позволить Заговорам клинков использовать досягаемость персонажа вместо обычных 5 футов @@ -155,7 +155,7 @@ ModUi/&EnableMonkWeaponSpecialization=Включить Специализац ModUi/&EnableMulticlass=Включить мультиклассирование [Необходим перезапуск] ModUi/&EnableOneDndHealingSpellsBuf=Включить улучшение костей лечения из OneDnd для Лечения ран, Лечащего слова, Множественного лечения ран и Множественного лечащего слова ModUi/&EnablePcgRandom=Включить улучшенный алгоритм генерации случайных чисел [https://www.pcg-random.org] -ModUi/&EnablePullPushOnVerticalDirection=Включить эффекты движения «толкать» и «тянуть» для работы по осям вверх/вниз +ModUi/&EnablePullPushOnVerticalDirection=Включить работу эффектов толкания и притяжения по вертикальным осям ModUi/&EnableRangerNatureShroudAt10=Включить умение Следопыта Природная завеса на уровне 10 [бонусным действием вы можете волшебным образом стать невидимым до начала следующего хода] ModUi/&EnableRejoinParty=Включить принудительную группировку персонажей вокруг выбранного героя или лидера, если никто не выбран, по нажатию CTRL-SHIFT-(R) [полезно в пати из 5 или 6 персонажей] ModUi/&EnableRelearnSpells=Включить возможность выбирать заговоры или заклинания, уже известные из других источников @@ -176,7 +176,7 @@ ModUi/&EnableTeleportToRemoveRestrained=Включить возможность ModUi/&EnableTogglesToOverwriteDefaultTestParty=Включить в списке персонажей возможность выбирать группу по умолчанию ModUi/&EnableTooltipDistance=Включить отображение расстояния во всплывающей подсказке панели при наведении курсора на персонажа в бою ModUi/&EnableUpcastConjureElementalAndFey=Включить возможность накладывать на высоких уровнях Призыв элементаля и Призыв феи -ModUi/&EnableVariablePlaceholdersOnTexts=Включить переменные заполнители в описаниях [использовать {VARIABLE_NAME} как заполнители] +ModUi/&EnableVariablePlaceholdersOnTexts=Включить заглушки для переменных описаний [использовать {VARIABLE_NAME} в качесте заглушки] ModUi/&EnableVttCamera=Включать камеру виртуальной настольной игры по нажатию CTRL-SHIFT-(V) [позиционирование камеры правой кнопкой мыши, WASD для панорамного вида и зум по нажатию Page Up/Page Down] ModUi/&EnablesAsiAndFeat=Включить возможность и повышать характеристики, и выбирать черту одновременно [вместо того, чтобы делать выбор между этими вариантами] ModUi/&EncounterPercentageChance=Вероятность случайных событий в процентах @@ -240,7 +240,7 @@ ModUi/&MarkInvisibleTeleportersOnLevelMap=+ Также помечать ме ModUi/&MaxAllowedClasses=Максимальное разрешённое количество классов ModUi/&Merchants=Торговцы: ModUi/&Metamagic=Метамагия -ModUi/&ModifyGravitySlam=+ Измените заклинание Гравитационный удар, чтобы оно толкало пораженные цели вниз и принимало форму цилиндра вместо сферы +ModUi/&ModifyGravitySlam=+ Изменить заклинание Гравитационный толчок, чтобы оно толкало поражённые цели вниз и принимало форму цилиндра вместо сферы ModUi/&Monsters=Монстры: ModUi/&MovementGridWidthModifier=Увеличить ширину сетки передвижения на множитель [%] ModUi/&MulticlassKeyHelp=Нажатие с SHIFT по заклинанию переключает тип затрачиваемой ячейки по умолчанию\n[Колдун тратит белые ячейки заклинаний, а остальные - зелёные ячейки колдуна] diff --git a/SolastaUnfinishedBusiness/Translations/ru/Spells/Cantrips-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Spells/Cantrips-ru.txt index ccf6994ed6..7e63f41081 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Spells/Cantrips-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Spells/Cantrips-ru.txt @@ -8,8 +8,8 @@ Condition/&ConditionStarryWispDescription=Не получает преимуще Condition/&ConditionStarryWispTitle=Отблеск звезды Condition/&ConditionWrackDescription=Вы не можете совершать действия Рывок или Отход. Condition/&ConditionWrackTitle=Измучен -Feature/&PowerCreateBonfireDamageDescription=Любое существо в пространстве костра, когда вы произносите заклинание, должно преуспеть в спасброске Ловкости или получить 1d8 урона от огня. Существо также должно сделать спасбросок, когда оно впервые за ход входит в пространство костра или заканчивает там свой ход. Урон заклинания увеличивается на дополнительный кубик на 5-м, 11-м и 17-м уровнях. -Feature/&PowerCreateBonfireDamageTitle=Ущерб от пожара +Feature/&PowerCreateBonfireDamageDescription=Все существа, оказавшиеся в этом пространстве в момент накладывания заклинания, должны преуспеть в спасброске Ловкости, иначе получат 1d8 урона огнём. Существо также должно совершать спасбросок, когда впервые за ход перемещается в область действия заклинания или заканчивает свой ход в ней. Урон заклинания увеличивается на дополнительную кость на 5-м, 11-м и 17-м уровнях. +Feature/&PowerCreateBonfireDamageTitle=Урон от костра Feedback/&AdditionalDamageBoomingBladeFormat=Громовой клинок! Feedback/&AdditionalDamageBoomingBladeLine={0} покрывает {1} энергией Громового клинка! (+{2}) Feedback/&AdditionalDamageResonatingStrikeFormat=Клинок зелёного пламени! @@ -18,7 +18,7 @@ Feedback/&AdditionalDamageSunlightBladeFormat=Освещённый солнце Feedback/&AdditionalDamageSunlightBladeLine={0} озаряет {1} Освещённым солнцем клинком! (+{2}) Feedback/&Within5Ft=5 футов Feedback/&WithinReach=Досягаемость -Proxy/&ProxyCreateBonfireTitle=Костер +Proxy/&ProxyCreateBonfireTitle=Костёр Spell/&AcidClawsDescription=Ваши ногти заостряются, и вы готовитесь совершить едкую атаку. Совершите рукопашную атаку заклинанием по одному существу в радиусе 5 футов от вас. При попадании цель получает 1d8 урона кислотой, а её КД снижается на 1 в течение одного раунда (не стакается). Spell/&AcidClawsTitle=Кислотные когти Spell/&AirBlastDescription=Выстрелите в цель сфокусированным потоком воздуха. @@ -29,8 +29,8 @@ Spell/&BoomingBladeDescription=Вы взмахиваете оружием, вы Spell/&BoomingBladeTitle=Громовой клинок Spell/&BurstOfRadianceDescription=Создайте яркую вспышку мерцающего света, наносящую урон всем врагам вокруг вас. Каждое существо, которое вы можете видеть в пределах дистанции, должно преуспеть в спасброске Телосложения, иначе получит 1d6 урона излучением. Spell/&BurstOfRadianceTitle=Слово сияния -Spell/&CreateBonfireDescription=Вы создаете костер на земле, которую вы можете видеть в пределах досягаемости. Пока заклинание не закончится, костер заполняет 5-футовый куб. Любое существо в пространстве костра, когда вы произносите заклинание, должно преуспеть в спасброске Ловкости или получить 1d8 урона от огня. Существо также должно сделать спасбросок, когда оно впервые за ход входит в пространство костра или заканчивает там свой ход. Урон заклинания увеличивается на дополнительный кубик на 5-м, 11-м и 17-м уровнях. -Spell/&CreateBonfireTitle=Создать костер +Spell/&CreateBonfireDescription=Вы создаёте огонь на поверхности земли в точке, которую можете видеть в пределах дистанции. Пока заклинание действует, огонь занимает область в кубе с длиной ребра 5 футов. Все существа, оказавшиеся в этом пространстве в момент накладывания заклинания, должны преуспеть в спасброске Ловкости, иначе получат 1d8 урона огнём. Существо также должно совершать спасбросок, когда впервые за ход перемещается в область действия заклинания или заканчивает свой ход в ней. Урон заклинания увеличивается на дополнительную кость на 5-м, 11-м и 17-м уровнях. +Spell/&CreateBonfireTitle=Сотворение костра Spell/&EnduringStingDescription=Вы вытягиваете жизненные силы одного видимого существа в пределах дистанции. Цель должна преуспеть в спасброске Телосложения, иначе получит 1d4 урона некротической энергией и упадёт ничком. Spell/&EnduringStingTitle=Иссушающий укол Spell/&IlluminatingSphereDescription=Заставляет источники света, такие как факелы и лампы маны, загораться в зоне действия эффекта. @@ -39,7 +39,7 @@ Spell/&InfestationDescription=Вы вызываете клещей, блох и Spell/&InfestationTitle=Нашествие Spell/&LightningLureDescription=Вы создаёте хлыст из молний, поражающий одно существо по вашему выбору, которое вы можете видеть в пределах 15 футов от вас. Цель должна преуспеть в спасброске Силы, иначе будет притянута на 10 футов по прямой к вам, после чего получит 1d8 урона электричеством. Урон заклинания увеличивается на одну дополнительную кость, когда вы достигаете 5-го, 11-го и 17-го уровня. Spell/&LightningLureTitle=Лассо молнии -Spell/&MagicStoneDescription=Вы касаетесь от одного до трех камешков и наделяете их магией. Вы или кто-то другой можете провести дальнюю атаку заклинанием с одним из камешков, бросив его с расстояния 60 футов. Если кто-то другой атакует камешком, этот нападающий добавляет ваш модификатор способности заклинания, а не нападающего, к броску атаки. При попадании цель получает дробящий урон, равный 1d6 + ваш модификатор способности заклинания. Попадание или промах, заклинание затем заканчивается на камне. +Spell/&MagicStoneDescription=Вы касаетесь от 1 до 3 камней и наделяете их магической силой. Вы или кто-либо ещё можете совершить дальнобойную атаку заклинанием, кинув один из этих камней. Дальность броска рукой составляет 60 футов. Если кто-либо другой атакует этим камнем, он использует для броска атаки ваш модификатор базовой характеристики вместо своего. При попадании цель получает 1d6 + ваш модификатор базовой характеристики дробящего урона. Вне зависимости от того, попал камень или нет, это заклинание перестаёт на него действовать. Spell/&MagicStoneTitle=Волшебный камень Spell/&MindSpikeDescription=Вы отправляете дезориентирующий луч психической энергии в разум одного существа, которое видите в пределах дистанции. Цель должна преуспеть в спасброске Интеллекта, иначе получит 1d6 урона психической энергией и вычтет 1d4 из следующего спасброска, совершаемого ею до конца вашего следующего хода. Spell/&MindSpikeTitle=Расщепление разума diff --git a/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells01-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells01-ru.txt index e29215d3dd..5d8b72ad2a 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells01-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells01-ru.txt @@ -76,7 +76,7 @@ Spell/&ChromaticOrbDescription=Вы бросаете 4-дюймовую сфер Spell/&ChromaticOrbTitle=Цветной шарик Spell/&CommandSpellApproachDescription=Цель перемещается ближе к вам по кратчайшему и самому прямому маршруту, оканчивая ход, если оказывается в пределах 5 футов от вас. Spell/&CommandSpellApproachTitle=Подойди -Spell/&CommandSpellDescription=Вы произносите однословную команду существу, которое видите в пределах досягаемости. Цель должна преуспеть в спасброске Мудрости или выполнить команду на следующем ходу.\nВы можете командовать только теми существами, с которыми у вас общий язык. Гуманоиды считаются знающими Общий. Чтобы командовать негуманоидным существом, вы должны знать Драконий для Драконов, Эльфийский для Фей, Гигантский для Гигантов, Адский для Извергов и Терранский для Элементалей.\nНельзя выбирать целью Нежить или Удивленных существ. +Spell/&CommandSpellDescription=Вы произносите команду из одного слова существу, которое видите в пределах дистанции. Цель должна преуспеть в спасброске Мудрости, иначе в свой следующий ход будет исполнять эту команду. Вы можете отдавать приказы только существами, которые понимают ваш язык, включая всех гуманоидов. Чтобы отдавать приказы негуманоидным существам, вы должны знать Драконий язык для драконов, Эльфийский язык для фей, Великаний язык для великанов, Инфернальный язык для демонов и Изначальниый для элементалей.\nНежить и существа, которых застали врасплох, не могут быть целями заклинания. Spell/&CommandSpellFleeDescription=Цель тратит ход на то, что перемещается прочь от вас самым быстрым способом. Spell/&CommandSpellFleeTitle=Убегай Spell/&CommandSpellGrovelDescription=Цель падает ничком и оканчивает ход. @@ -105,7 +105,7 @@ Spell/&MuleTitle=Мул Spell/&RadiantMotesDescription=Выпускает рой из 4 лучевых снарядов, наносящих 1d4 урона излучением каждый.\nЕсли вы накладываете это заклинание, используя ячейку 2-го уровня или выше, заклинание создает по одному дополнительному дротику за каждый уровень ячейки выше первого. Spell/&RadiantMotesTitle=Сияющие пятна Spell/&SanctuaryDescription=Вы защищаете одно существо в пределах дистанции от атаки. Пока заклинание активно, все существа, нацеливающиеся на защищённое существо атаками или вредоносными заклинаниями, должны вначале совершить спасбросок Мудрости. При провале существо теряет атаку или заклинание. Это заклинание не защищает от эффектов, действующих на площадь. Если защищённое существо совершает атаку или накладывает заклинание, это заклинание оканчивается. -Spell/&SearingSmiteDescription=Когда вы в следующий раз попадёте по существу рукопашной атакой оружием, пока заклинание активно, ваше оружие вспыхивает ярким белым светом, и атака причиняет цели дополнительный 1к6 урона огнём и поджигает её.\nПока заклинание активно, цель в начале каждого своего хода должна совершать спасбросок Телосложения. При провале она получает 1к6 урона огнём. При успехе заклинание заканчивается.\nНа больших уровнях: Если вы накладываете это заклинание, используя ячейку 2-го уровня или выше, первичный дополнительный урон от атаки увеличивается на 1к6 за каждый уровень ячейки выше первого. +Spell/&SearingSmiteDescription=Когда вы в следующий раз попадёте по существу рукопашной атакой оружием, пока заклинание активно, ваше оружие вспыхивает ярким белым светом, и атака причиняет цели дополнительный 1d6 урона огнём и поджигает её. Пока заклинание активно, цель в начале каждого своего хода должна совершать спасбросок Телосложения. При провале она получает 1d6 урона огнём. При успехе заклинание заканчивается. Если цель или существо, находящееся в пределах 5 футов от неё, потратит действие на тушение пламени, или если какой-то другой эффект потушит пламя (например, погружение в воду), заклинание тоже закончится. Если вы накладываете это заклинание, используя ячейку 2-го уровня или выше, первичный дополнительный урон от атаки увеличивается на 1d6 за каждый уровень ячейки выше первого. Spell/&SearingSmiteTitle=Палящая кара Spell/&SkinOfRetributionDescription=Вас окружает защитное магическое поле, проявляющееся в виде призрачной изморози, покрывшей вас и ваше снаряжение. Вы получаете 5 временных хитов на период действия заклинания. Если существо попадает по вам рукопашной атакой, пока у вас есть эти хиты, оно получает 5 урона холодом за каждый уровень заклинания. Spell/&SkinOfRetributionTitle=Доспех Агатиса @@ -115,7 +115,7 @@ Spell/&StrikeWithTheWindDescription=Вы движетесь подобно ве Spell/&StrikeWithTheWindTitle=Удар Зефира Spell/&SubSpellChromaticOrbDescription=Существо получает 3d8 урона типа {0}. Spell/&SubSpellSkinOfRetributionDescription=Существо получает 5 урона типа {0} за уровень заклинания. -Spell/&ThunderousSmiteDescription=В первый раз, когда вы наносите удар оружием ближнего боя во время действия этого заклинания, ваше оружие звенит громом, который слышен в радиусе 300 футов от вас, и атака наносит цели дополнительный урон громом 2d6. Кроме того, если цель — существо, она должна преуспеть в спасброске Силы или будет отброшена на 10 футов от вас и сбита с ног. +Spell/&ThunderousSmiteDescription=В первый раз, когда вы попадаете рукопашной атакой оружием, пока заклинание активно, ваше оружие издаёт громовой рокот, слышимый с расстояния 300 футов, и атака причиняет цели дополнительный урон звуком 2d6. Кроме того, если цель — существо, она должна преуспеть в спасброске Силы, иначе она будет оттолкнута на 10 футов от вас и сбита с ног. Spell/&ThunderousSmiteTitle=Громовая кара Spell/&VileBrewDescription=Вы испускаете струю кислоты вдоль линии длиной 30 футов и шириной 5 футов в выбранном вами направлении. Каждое существо, находящееся на этой линии должно преуспеть в спасброске Ловкости, иначе станет покрыто кислотой на время действия заклинания или до тех пор, пока кто-то действием не соскребёт или смоет кислоту с себя или другого существа. Существо, покрытое кислотой, получает 2d4 урона кислотой в начале каждого своего хода. Когда вы накладываете это заклинание, используя ячейку 2-го уровня или выше, урон увеличивается на 2d4 за каждый уровень ячейки выше первого. Spell/&VileBrewTitle=Едкое варево Таши @@ -123,7 +123,7 @@ Spell/&VoidGraspDescription=Вы взываете к мощи нечистой Spell/&VoidGraspTitle=Руки Хадара Spell/&WitchBoltDescription=Луч потрескивающей синеватой энергии устремляется к существу в пределах дистанции, формируя между вами и целью непрерывный дуговой разряд. Совершите дальнобойную атаку заклинанием по этому существу. При попадании цель получает 1d12 урона электричеством, и, пока заклинание активно, вы можете в каждый свой ход действием автоматически причинять цели 1d12 урона электричеством. Это заклинание оканчивается, если вы действием сделаете что-то иное. Заклинание также оканчивается, если цель окажется за пределами дистанции заклинания. Если вы накладываете это заклинание, используя ячейку 2-го уровня или выше, урон увеличивается на 1d12 за каждый уровень ячейки выше первого. Spell/&WitchBoltTitle=Ведьмин снаряд -Spell/&WrathfulSmiteDescription=В следующий раз, когда вы нанесете удар оружием ближнего боя во время действия этого заклинания, ваша атака нанесет дополнительный психический урон 1d6. Кроме того, если цель — существо, оно должно сделать спасбросок Мудрости или испугаться вас, пока заклинание не закончится. В качестве действия существо может сделать проверку Мудрости против вашего спасброска от заклинания, чтобы укрепить свою решимость и закончить это заклинание. +Spell/&WrathfulSmiteDescription=В следующий раз, когда вы попадёте рукопашной атакой оружием, пока активно это заклинание, ваша атака причиняет дополнительный 1d6 урона психической энергией. Кроме того, если цель — существо, оно должно совершить спасбросок Мудрости, иначе оно станет испуганным до окончания действия заклинания. Существо может действием совершить проверку Мудрости против Сл ваших заклинаний, чтобы успокоиться и окончить это заклинание. Spell/&WrathfulSmiteTitle=Гневная кара Tooltip/&MustBeWitchBolt=Должен быть отмечен Ведьминым снарядом Tooltip/&MustNotHaveChaosBoltMark=Не может получить урон от Снаряда хаоса в этом ходу. diff --git a/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells03-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells03-ru.txt index 61d6b36eb8..cd633ab369 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells03-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells03-ru.txt @@ -38,7 +38,7 @@ Spell/&AshardalonStrideDescription=Из-под ваших ног вырывае Spell/&AshardalonStrideTitle=Ашардалонова поступь Spell/&AuraOfLifeDescription=От вас исходит аура живительной энергии с радиусом 30 футов. Пока заклинание активно, аура перемещается вместе с вами, оставаясь с центром на вас. Вы можете бонусным действием восстанавливать одному любому существу в ауре (включая себя) 2d6 хитов. Spell/&AuraOfLifeTitle=Аура живучести -Spell/&BlindingSmiteDescription=В следующий раз, когда вы попадете по существу атакой оружием ближнего боя во время действия этого заклинания, ваше оружие вспыхнет ярким светом, и атака нанесет цели дополнительный урон излучением в 3d8 единиц. Кроме того, цель должна преуспеть в спасброске Телосложения или быть ослепленной до окончания заклинания. Существо, ослепленное этим заклинанием, совершает еще один спасбросок Телосложения в конце каждого своего хода. При успешном спасброске оно больше не ослеплено. +Spell/&BlindingSmiteDescription=Когда вы в следующий раз попадёте по существу рукопашной атакой оружием, пока заклинание активно, ваше оружие вспыхивает ярким светом, и атака причиняет цели дополнительный урон излучением 3d8. Кроме того, цель должна преуспеть в спасброске Телосложения, иначе она станет ослеплённой до окончания заклинания. Ослеплённое этим заклинанием существо совершает спасброски Телосложения в конце каждого своего хода. В случае успеха оно перестаёт быть ослеплённым. Spell/&BlindingSmiteTitle=Ослепляющая кара Spell/&BoomingStepDescription=Вы телепортируете себя в свободное пространство, которое вы можете видеть в пределах дистанции. Сразу после того, как вы исчезли, раздается раскат грома, и каждое существо в радиусе 10 футов от покинутого пространства должно совершить спасбросок Телосложения, получив 3d10 урона звуком при провале или половину этого урона при успехе. Вы также можете взять с собой одно согласное существо. Если вы накладываете это заклинание, используя ячейку 4-го уровня или выше, урон увеличивается на 1d10 за каждый уровень ячейки выше 3-го. Spell/&BoomingStepTitle=Громовой шаг diff --git a/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells04-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells04-ru.txt index 22b2c6cc2c..50b4ac5636 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells04-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells04-ru.txt @@ -64,7 +64,7 @@ Spell/&PsychicLanceDescription=Вы выпускаете мерцающее ко Spell/&PsychicLanceTitle=Психическое копьё Раулотима Spell/&SickeningRadianceDescription=Из точки, выбранной вами в пределах дистанции, распространяется сфера тусклого зеленоватого света с радиусом 30 футов. Свет огибает углы и существует до тех пор, пока заклинание не закончится. Если существо впервые за раунд входит в область заклинания или начинает в ней свой ход, оно должно преуспеть в спасброске Телосложения, иначе получит 4d10 урона излучением. Оно также получает одну степень истощения и само начинает испускать тусклый зеленоватый свет в радиусе 5 футов. Этот свет лишает существо возможности быть невидимым. Этот свет делает невозможным получение преимуществ от невидимости. Свет и любые степени истощения, вызванные этим заклинанием, проходят, когда заклинание оканчивается. Spell/&SickeningRadianceTitle=Болезненное сияние -Spell/&StaggeringSmiteDescription=В следующий раз, когда вы попадете по существу атакой оружием ближнего боя во время действия этого заклинания, ваше оружие пронзит и тело, и разум, а атака нанесет цели дополнительный психический урон 4d6. Цель должна сделать спасбросок Мудрости. При провале спасброска она получает помеху на броски атаки и проверки способностей и не может совершать реакции до конца своего следующего хода. +Spell/&StaggeringSmiteDescription=В следующий раз, когда вы попадёте по существу рукопашной атакой оружием, пока активно это заклинание, ваша атака пронзает не только его тело, но и сознание, и атака дополнительно наносит цели 4d6 урона психической энергией. Цель должна совершить спасбросок Мудрости. При провале она до конца своего следующего хода совершает с помехой броски атаки и проверки характеристик, а также не может совершать реакции. Spell/&StaggeringSmiteTitle=Оглушающая кара Spell/&TreeForestGuardianDescription=Ваша кожа покрывается корой, листья прорастают из ваших волос, и вы получаете следующие преимущества:\n• Вы получаете 10 временных хитов.\n• Вы совершаете с преимуществом спасброски Телосложения.\n• Вы совершаете броски атаки, основанные на Ловкости и Мудрости, с преимуществом.\n• Существа в радиусе 30 футов от вас должны пройти спасбросок Силы, иначе они будут скованы на время действия заклинания. Они могут повторять спасбросок в начале каждого хода. Spell/&TreeForestGuardianTitle=Великое древо diff --git a/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells05-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells05-ru.txt index 9d93903298..fd1f271265 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells05-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells05-ru.txt @@ -2,23 +2,23 @@ Condition/&ConditionFarStepDescription=Бонусным действием вы Condition/&ConditionFarStepTitle=Далёкий шаг Condition/&ConditionTelekinesisDescription=Вы можете действием пытаться поддерживать телекинетическую хватку существа, повторяя встречную проверку, или выбрать новое существо, оканчивая эффект опутывания на предыдущей цели. Condition/&ConditionTelekinesisTitle=Телекинез -Feature/&AdditionalDamageHolyWeaponDescription=Наносит дополнительный урон излучением 2d8 при попадании -Feature/&AdditionalDamageHolyWeaponTitle=Священное Оружие -Feature/&PowerHolyWeaponDescription=Бонусным действием в свой ход вы можете отклонить это заклинание и заставить оружие испустить вспышку сияния. Каждое существо по вашему выбору, которое вы можете видеть в пределах 30 футов от оружия, должно совершить спасбросок Телосложения. При провале спасброска существо получает 4d8 урона излучением и ослепляется на 1 минуту. При успешном спасброске существо получает половину урона и не ослепляется. В конце каждого своего хода ослепленное существо может совершить спасбросок Телосложения, заканчивая эффект на себе при успехе. -Feature/&PowerHolyWeaponTitle=Отклонить Священное Оружие +Feature/&AdditionalDamageHolyWeaponDescription=Наносит дополнительно 2d8 урона излучением при попадании +Feature/&AdditionalDamageHolyWeaponTitle=Священное оружие +Feature/&PowerHolyWeaponDescription=Бонусным действием, если оружие находится в пределах 30 футов, вы можете отменить это заклинание и создать вспышку света, исходящую из оружия. Каждое существо по вашему выбору, которое вы видите в пределах 30 футов от оружия, должно совершить спасбросок Телосложения. При неудачном спасброске существо получает 4d8 урона излучением, и становится ослеплённым на 1 минуту. При успешном спасброске существо получает половину урона и не ослепляется. В конце каждого своего хода ослеплённое существо может повторить спасбросок Телосложения, оканчивая эффект на себе при успехе. +Feature/&PowerHolyWeaponTitle=Отменить Священное оружие Feature/&PowerSteelWhirlwindTeleportDescription=Вы можете телепортироваться в свободное пространство, которое вы можете видеть в пределах 5 футов от одной из целей, по которой вы попали или промахнулись Ударом стального ветра. Feature/&PowerSteelWhirlwindTeleportTitle=Телепортироваться Feedback/&AdditionalDamageBanishingSmiteFormat=Изгоняющая кара! Feedback/&AdditionalDamageBanishingSmiteLine={0} наносит больше урона {1} с помощью изгоняющей кары (+{2}) Feedback/&AdditionalDamageHolyWeaponFormat=Священное оружие! -Feedback/&AdditionalDamageHolyWeaponLine={0} наносит больше урона {1} святым оружием (+{2}) +Feedback/&AdditionalDamageHolyWeaponLine={0} наносит больше урона {1} священным оружием (+{2}) Proxy/&ProxyDawnDescription=Если вы находитесь в пределах 60 футов от цилиндра, в свой ход вы можете бонусным действием переместить его на расстояние до 60 футов. Proxy/&ProxyDawnTitle=Рассвет Reaction/&ReactionSpendPowerBundleEmpoweredKnowledgeDescription=Выберите один навык, в котором вам не хватает компетентности. Вы получаете компетентность в выбранном навыке на 1 час. Reaction/&ReactionSpendPowerBundleEmpoweredKnowledgeReactDescription=Получите компетентность в выбранном навыке. Reaction/&ReactionSpendPowerBundleEmpoweredKnowledgeReactTitle=Усиление навыка Reaction/&ReactionSpendPowerBundleEmpoweredKnowledgeTitle=Усиление навыка -Spell/&BanishingSmiteDescription=В следующий раз, когда вы попадете по существу с помощью атаки оружием до того, как закончится это заклинание, ваше оружие затрещит от силы, и атака нанесет цели дополнительный урон силой 5d10. Кроме того, если эта атака уменьшит количество хитов цели до 50 или меньше, вы изгоните ее. Если цель является уроженцем другого плана существования, чем тот, на котором вы находитесь, цель исчезает, возвращаясь на свой родной план. Если цель является уроженцем плана, на котором вы находитесь, существо исчезает в безвредном полуплане. Находясь там, цель становится недееспособной. Она остается там до тех пор, пока не закончится заклинание, после чего цель снова появляется в пространстве, которое она покинула, или в ближайшем незанятом пространстве, если это пространство занято. +Spell/&BanishingSmiteDescription=В следующий раз, когда вы попадёте по существу атакой оружием, пока активно это заклинание, ваше оружие покрывается силовым полем, и атака причиняет цели дополнительный урон силовым полем 5d10. Кроме того, если эта атака опустила хиты цели до 50 или ниже, вы изгоняете её. Если цель родом не с того плана существования, на котором сейчас находитесь вы, цель исчезает, возвращаясь на свой родной план. Если цель родом с того плана, на котором находитесь вы, она исчезает в безопасном демиплане. Находясь там, цель недееспособна. Она остаётся там, пока активно заклинание, после чего возвращается в пространство, из которого исчезла, или ближайшее свободное пространство, если то место занято. Spell/&BanishingSmiteTitle=Изгоняющая кара Spell/&CircleOfMagicalNegationDescription=От вас исходит божественная энергия, искажающая и рассеивающая магическую энергию в пределах 30 футов от вас. Пока заклинание активно, сфера перемещается вместе с вами, оставаясь с центром на вас. Все дружественные существа в этой области, включая вас, получают преимущество к спасброскам от заклинаний и других магических эффектов. Кроме того, когда такое существо преуспевает в спасброске от заклинания или магического эффекта, позволяющего совершить спасбросок для получения всего лишь половины урона, оно не получает урон вообще. Spell/&CircleOfMagicalNegationTitle=Круг силы @@ -34,8 +34,8 @@ Spell/&EmpoweredKnowledgeDescription=Ваша магия углубляет по Spell/&EmpoweredKnowledgeTitle=Усиление навыка Spell/&FarStepDescription=Вы телепортируетесь до 60 футов в свободное пространство, видимое вами. Вы можете каждый ваш ход до окончания действия заклинания бонусным действием телепортироваться таким образом снова. Spell/&FarStepTitle=Далёкий шаг -Spell/&HolyWeaponDescription=Вы наделяете оружие, к которому прикасаетесь, святой силой. Пока заклинание действует, оружие излучает яркий свет в радиусе 30 футов и тусклый свет в радиусе дополнительных 30 футов. Кроме того, атаки оружием, сделанные с его помощью, наносят дополнительный урон излучением 2d8 при попадании. Если оружие еще не является магическим оружием, оно становится таковым на время действия. В качестве бонусного действия в свой ход, если оружие находится в пределах 30 футов, вы можете отменить это заклинание и заставить оружие испустить вспышку сияния. Каждое существо по вашему выбору, которое вы можете видеть в пределах 30 футов от оружия, должно совершить спасбросок Телосложения. При провале спасброска существо получает 4d8 урона излучением и ослепляется на 1 минуту. При успешном спасброске существо получает половину урона и не ослепляется. В конце каждого своего хода ослепленное существо может совершить спасбросок Телосложения, заканчивая эффект на себе при успехе. -Spell/&HolyWeaponTitle=Священное Оружие +Spell/&HolyWeaponDescription=Вы наполняете оружие, которого касаетесь, святой силой. Пока заклинание активно, оружие излучает яркий свет в пределах 30 футов и тусклый свет в пределах ещё 30 футов. Кроме того, атаки, совершенные этим оружием, наносят дополнительно 2d8 урона излучением при попадании. Если оружие ещё не является магическим, оно становится таковым на время действия заклинания. Бонусным действием, если оружие находится в пределах 30 футов, вы можете отменить это заклинание и создать вспышку света, исходящую из оружия. Каждое существо по вашему выбору, которое вы видите в пределах 30 футов от оружия, должно совершить спасбросок Телосложения. При неудачном спасброске существо получает 4d8 урона излучением, и становится ослеплённым на 1 минуту. При успешном спасброске существо получает половину урона и не ослепляется. В конце каждого своего хода ослеплённое существо может повторить спасбросок Телосложения, оканчивая эффект на себе при успехе. +Spell/&HolyWeaponTitle=Священное оружие Spell/&IncinerationDescription=Одно существо, которое вы можете видеть в пределах дистанции, охватывает пламя. Цель должна совершить спасбросок Ловкости. Существо получает 8d6 урона огнём при провале или половину этого урона при успехе. Кроме того, при провале цель воспламеняется на время действия заклинания. Горящая цель испускает яркий свет в пределах 30 футов и тусклый свет в пределах ещё 30 футов и получает 8d6 урона огнём в начале каждого своего хода. Spell/&IncinerationTitle=Испепеление Spell/&MantleOfThornsDescription=Окружите себя аурой шипов. Те, кто начинает движение в её области или проходит сквозь неё, получают 2d8 колющего урона. На более высоких уровнях этот урон увеличивается на 1d8 за каждый уровень ячейки заклинания выше 5-го. @@ -44,8 +44,8 @@ Spell/&SonicBoomDescription=Небольшой шар появляется в в Spell/&SonicBoomTitle=Звуковой удар Spell/&SteelWhirlwindDescription=Вы взмахиваете оружием, используемым для заклинания, а затем исчезаете, чтобы ударить, подобно ветру. Выберите до пяти существ в пределах дистанции, которых вы можете видеть. Совершите рукопашную атаку заклинанием по каждой цели. При попадании цель получает 6d10 урона силовым полем. После этого вы можете телепортироваться в свободное пространство, которое вы можете видеть в пределах 5 футов от одной из целей, которую вы атаковали, независимо от того, попали вы по ней или нет. Spell/&SteelWhirlwindTitle=Удар стального ветра -Spell/&SwiftQuiverDescription=Вы трансмутируете свой колчан, так что он автоматически заставляет боеприпасы прыгать в вашу руку, когда вы тянетесь к нему. На каждом из ваших ходов, пока заклинание не закончится, вы можете использовать бонусное действие, чтобы совершить две атаки оружием дальнего боя. -Spell/&SwiftQuiverTitle=Быстрый Колчан +Spell/&SwiftQuiverDescription=Вы так модифицируете свой колчан, что он начинает автоматически подавать боеприпасы, которые сами прыгают в вашу руку, когда вы тянетесь за ними. Пока заклинание активно, вы в каждом своём ходу можете бонусным действием совершить две атаки оружием, использующим боеприпасы из колчана. +Spell/&SwiftQuiverTitle=Быстрый колчан Spell/&SynapticStaticDescription=Вы выбираете точку в пределах дистанции и вызываете в ней взрыв психической энергии. Каждое существо в сфере с радиусом 20 футов с центром в этой точке должно совершить спасбросок Интеллекта. Цель получает 8d6 урона психической энергией при провале или половину этого урона при успехе. После неудачного спасброска цель начинает путаться в мыслях на протяжении 1 минуты. В течение этого времени она бросает d6 и вычитает получившееся число из всех её бросков атаки и проверок характеристики. В конце каждого своего хода цель может совершать спасбросок Интеллекта, оканчивая эффект на себе при успехе. Spell/&SynapticStaticTitle=Синаптический разряд Spell/&TelekinesisDescription=Вы можете попытаться переместить существо с размером не больше Огромного. Совершите проверку своей базовой характеристики, противопоставив её проверке Силы существа. Если вы выиграете проверку, вы перемещаете существо на 30 футов в любом направлении, включая вверх, но не за пределы дистанции заклинания. До конца вашего следующего хода существо становится опутанным телекинетической хваткой. Существо, поднятое вверх, висит в воздухе. В последующих раундах вы можете действием пытаться поддерживать телекинетическую хватку существа, повторяя встречную проверку, или выбрать новое существо, оканчивая эффект опутывания на предыдущей цели. diff --git a/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells08-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells08-ru.txt index e4e04f7769..df6300cc76 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells08-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells08-ru.txt @@ -3,8 +3,8 @@ Condition/&ConditionMindBlankTitle=Сокрытие разума Condition/&ConditionSoulExpulsionCombatAffinityTitle=Неустойчивый Spell/&AbiDalzimHorridWiltingDescription=Вы вытягиваете влагу из всех существ в кубе с длиной ребра 30 футов с центром на указанной вами точке в пределах дистанции. Каждое существо в этой области должно совершить спасбросок Телосложения. Это заклинание не действует на Конструктов и Нежить, а Растения и ледяные элементали совершают спасбросок с помехой. При провале существо получает 10d8 урона некротической энергией или половину этого урона при успехе. Spell/&AbiDalzimHorridWiltingTitle=Ужасное увядание Аби-Далзима -Spell/&GlibnessDescription=Пока заклинание действует, при проверке Харизмы вы можете заменить выпавшее число на 15. -Spell/&GlibnessTitle=Бойкость +Spell/&GlibnessDescription=Пока заклинание не окончится, каждый раз, когда вы совершаете проверку Харизмы, вы можете заменить выпавший результат числом «15». +Spell/&GlibnessTitle=Находчивость Spell/&MaddeningDarknessDescription=Из точки, выбранной вами в пределах дистанции, расползается и остаётся в течение времени действия заклинания магическая тьма сферой с радиусом 60 футов. В этой сфере можно услышать крики, бормотание и безумный смех. При накладывании и всякий раз, когда существо заканчивает свой ход в сфере, оно должно совершить спасбросок Мудрости, получая 6d8 урона психической энергией при провале или половину этого урона при успехе. Spell/&MaddeningDarknessTitle=Одуряющая тьма Spell/&MindBlankDescription=Пока заклинание активно, одно согласное существо, которого вы касаетесь, получает иммунитет к урону психической энергией и всем эффектам, которые должны чувствовать его эмоции или читать мысли, заклинаниям школы Прорицания и состоянию "очарованный". From 1cd504425b4e9433a1f4f1484f8be845c18be0f5 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sat, 14 Sep 2024 08:36:26 -0700 Subject: [PATCH 167/212] minor tweaks on spells SFX and behaviors --- .../Api/DatabaseHelper-RELEASE.cs | 2 ++ .../Resources/Spells/Glibness.png | Bin 14991 -> 10848 bytes .../Spells/SpellBuildersCantrips.cs | 10 +++++++--- .../Spells/SpellBuildersLevel05.cs | 3 ++- .../Spells/SpellBuildersLevel08.cs | 5 +++-- 5 files changed, 14 insertions(+), 6 deletions(-) diff --git a/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs b/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs index 700c612582..1b3edff17b 100644 --- a/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs +++ b/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs @@ -3786,6 +3786,8 @@ internal static class SpellDefinitions internal static SpellDefinition PrayerOfHealing { get; } = GetDefinition("PrayerOfHealing"); internal static SpellDefinition PrismaticSpray { get; } = GetDefinition("PrismaticSpray"); internal static SpellDefinition ProduceFlame { get; } = GetDefinition("ProduceFlame"); + internal static SpellDefinition ProduceFlameHold { get; } = GetDefinition("ProduceFlameHold"); + internal static SpellDefinition ProduceFlameHurl { get; } = GetDefinition("ProduceFlameHurl"); internal static SpellDefinition ProtectionFromEnergy { get; } = diff --git a/SolastaUnfinishedBusiness/Resources/Spells/Glibness.png b/SolastaUnfinishedBusiness/Resources/Spells/Glibness.png index 2fd80af838c098c6c1f30f804beda019ade0dc44..d1ca0c3d3f8cbdcfac4764295dc455c2a3585182 100644 GIT binary patch literal 10848 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 Z_;2^ajtKQJUHJe2002ovPDHLkV1l^5cToTU diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs index c7ffac1c22..dbe6586c51 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs @@ -363,7 +363,7 @@ internal static SpellDefinition BuildLightningLure() #endregion - #region Mind Spike + #region Magic Stone internal static SpellDefinition BuildMagicStone() { @@ -1016,11 +1016,12 @@ internal static SpellDefinition BuildCreateBonfire() .SetVerboseComponent(true) .SetSomaticComponent(true) .SetVocalSpellSameType(VocalSpellSemeType.Attack) + .SetRequiresConcentration(true) .SetEffectDescription( EffectDescriptionBuilder .Create() .SetDurationData(DurationType.Minute, 1) - .SetTargetingData(Side.Enemy, RangeType.Distance, 12, TargetType.Position) + .SetTargetingData(Side.All, RangeType.Distance, 6, TargetType.Cube) .SetEffectAdvancement(EffectIncrementMethod.CasterLevelTable, additionalDicePerIncrement: 1) .SetSavingThrowData(false, AttributeDefinitions.Dexterity, false, EffectDifficultyClassComputation.SpellCastingFeature) @@ -1034,7 +1035,7 @@ internal static SpellDefinition BuildCreateBonfire() .Create() .SetTopologyForm(TopologyForm.Type.DangerousZone, true) .Build()) - .SetCasterEffectParameters(ProduceFlame) + .SetCasterEffectParameters(ProduceFlameHold) .Build()) .AddCustomSubFeatures(new PowerOrSpellFinishedByMeCreateBonfire()) .AddToDB(); @@ -1042,6 +1043,7 @@ internal static SpellDefinition BuildCreateBonfire() return spell; } + // increase damage die and mark enemies damaged this turn private sealed class CustomBehaviorCreateBonfireDamage : IModifyEffectDescription, IPowerOrSpellFinishedByMe { public bool IsValid(BaseDefinition definition, RulesetCharacter character, EffectDescription effectDescription) @@ -1096,6 +1098,7 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, } } + // issue power damage if there is a target on cube position on spell end private sealed class PowerOrSpellFinishedByMeCreateBonfire : IPowerOrSpellFinishedByMe { public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, BaseDefinition baseDefinition) @@ -1118,6 +1121,7 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, } } + // handle on turn start, on turn end, shove, move behaviors internal static void HandleCreateBonfireBehavior(GameLocationCharacter character, bool checkCondition = true) { var battleManager = ServiceRepository.GetService() as GameLocationBattleManager; diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel05.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel05.cs index 14ee21edfb..321a15a091 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel05.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel05.cs @@ -900,7 +900,6 @@ internal static SpellDefinition BuildHolyWeapon() .Create($"Power{NAME}") .SetGuiPresentation(Category.Feature, Sprites.GetSprite(NAME, Resources.PowerHolyWeapon, 256, 128)) .SetUsesFixed(ActivationTime.BonusAction) - .SetShowCasting(false) .SetEffectDescription( EffectDescriptionBuilder .Create() @@ -920,6 +919,7 @@ internal static SpellDefinition BuildHolyWeapon() .SetConditionForm( ConditionDefinitions.ConditionBlinded, ConditionForm.ConditionOperation.Add) .Build()) + .SetCasterEffectParameters(PowerOathOfDevotionTurnUnholy) .SetParticleEffectParameters(FaerieFire) .SetImpactEffectParameters( FeatureDefinitionAdditionalDamages.AdditionalDamageBrandingSmite.impactParticleReference) @@ -970,6 +970,7 @@ internal static SpellDefinition BuildHolyWeapon() .Build(), EffectFormBuilder.ConditionForm(condition, ConditionForm.ConditionOperation.Add, true)) .SetCasterEffectParameters(HolyAura) + .SetEffectEffectParameters(PowerOathOfJugementPurgeCorruption) .Build()) .AddToDB(); diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel08.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel08.cs index 71a93331f4..c94c27ab02 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel08.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel08.cs @@ -115,11 +115,12 @@ internal static SpellDefinition BuildGlibness() .SetVocalSpellSameType(VocalSpellSemeType.Buff) .SetEffectDescription( EffectDescriptionBuilder - .Create(Darkness) + .Create() .SetDurationData(DurationType.Hour, 1) .SetTargetingData(Side.All, RangeType.Self, 0, TargetType.Self) .SetEffectForms(EffectFormBuilder.ConditionForm(condition)) - .SetParticleEffectParameters(Light) + .SetCasterEffectParameters(Tongues) + .SetEffectEffectParameters(PowerOathOfJugementPurgeCorruption) .Build()) .AddToDB(); } From 5dad07611fc21dd1e5efb02986ed17965607c3eb Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sat, 14 Sep 2024 08:36:58 -0700 Subject: [PATCH 168/212] remove unused UseLightEnumeration --- .../Models/SaveByLocationContext.cs | 5 +--- .../Patches/UserCampaignPatcher.cs | 23 ------------------- .../Patches/UserLocationPatcher.cs | 23 ------------------- 3 files changed, 1 insertion(+), 50 deletions(-) delete mode 100644 SolastaUnfinishedBusiness/Patches/UserCampaignPatcher.cs delete mode 100644 SolastaUnfinishedBusiness/Patches/UserLocationPatcher.cs diff --git a/SolastaUnfinishedBusiness/Models/SaveByLocationContext.cs b/SolastaUnfinishedBusiness/Models/SaveByLocationContext.cs index 45171726e2..3559a30486 100644 --- a/SolastaUnfinishedBusiness/Models/SaveByLocationContext.cs +++ b/SolastaUnfinishedBusiness/Models/SaveByLocationContext.cs @@ -33,9 +33,6 @@ internal static class SaveByLocationContext internal static CustomDropDown Dropdown { get; private set; } - //TODO: is this still used? - internal static bool UseLightEnumeration { get; private set; } - private static List GetAllSavePlaces() { // Find the most recently touched save file and select the correct location/campaign for that save @@ -222,7 +219,7 @@ internal static LocationOptionData Create(SavePlace place) LocationType = place.Type, text = GetTitle(place.Type, place.Name), Title = place.Name, - TooltipContent = $"{place.Count} save{(place.Count == 1 ? "" : "s")}", + TooltipContent = $"{place.Count} save{(place.Count == 1 ? "" : "s")}" }; } diff --git a/SolastaUnfinishedBusiness/Patches/UserCampaignPatcher.cs b/SolastaUnfinishedBusiness/Patches/UserCampaignPatcher.cs deleted file mode 100644 index 79954b1568..0000000000 --- a/SolastaUnfinishedBusiness/Patches/UserCampaignPatcher.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System.Diagnostics.CodeAnalysis; -using HarmonyLib; -using JetBrains.Annotations; -using SolastaUnfinishedBusiness.Models; - -namespace SolastaUnfinishedBusiness.Patches; - -[UsedImplicitly] -public static class UserCampaignPatcher -{ - [HarmonyPatch(typeof(UserCampaign), nameof(UserCampaign.PostLoadJson))] - [SuppressMessage("Minor Code Smell", "S101:Types should be named in PascalCase", Justification = "Patch")] - [UsedImplicitly] - public static class PostLoadJson_Patch - { - //PATCH: Performance enhancement for SaveByLocation feature - [UsedImplicitly] - public static bool Prefix() - { - return !SaveByLocationContext.UseLightEnumeration; - } - } -} diff --git a/SolastaUnfinishedBusiness/Patches/UserLocationPatcher.cs b/SolastaUnfinishedBusiness/Patches/UserLocationPatcher.cs deleted file mode 100644 index 94b008c61f..0000000000 --- a/SolastaUnfinishedBusiness/Patches/UserLocationPatcher.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System.Diagnostics.CodeAnalysis; -using HarmonyLib; -using JetBrains.Annotations; -using SolastaUnfinishedBusiness.Models; - -namespace SolastaUnfinishedBusiness.Patches; - -[UsedImplicitly] -public static class UserLocationPatcher -{ - [HarmonyPatch(typeof(UserLocation), nameof(UserLocation.PostLoadJson))] - [SuppressMessage("Minor Code Smell", "S101:Types should be named in PascalCase", Justification = "Patch")] - [UsedImplicitly] - public static class PostLoadJson_Patch - { - //PATCH: Performance enhancement for SaveByLocation feature - [UsedImplicitly] - public static bool Prefix() - { - return !SaveByLocationContext.UseLightEnumeration; - } - } -} From 7f885bc2184fe25e9fcbdcf0fa27e5448680ce52 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sat, 14 Sep 2024 08:41:10 -0700 Subject: [PATCH 169/212] update collaterals --- .../PowerHolyWeapon.json | 2 +- .../SpellDefinition/CreateBonfire.json | 12 +- .../SpellDefinition/Glibness.json | 12 +- .../SpellDefinition/HolyWeapon.json | 2 +- .../SpellDefinition/MagicStone.json | 376 ++++++++++++++++++ Documentation/Spells.md | 2 +- .../ChangelogHistory.txt | 6 +- 7 files changed, 395 insertions(+), 17 deletions(-) create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/MagicStone.json diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerHolyWeapon.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerHolyWeapon.json index ab3dd72e4b..bccc15c0ff 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerHolyWeapon.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerHolyWeapon.json @@ -356,7 +356,7 @@ "abilityScoreBonusToAttack": false, "proficiencyBonusToAttack": false, "uniqueInstance": false, - "showCasting": false, + "showCasting": true, "shortTitleOverride": "", "overriddenPower": null, "includeBaseDescription": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateBonfire.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateBonfire.json index 5bfd501a8f..4522385af6 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateBonfire.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateBonfire.json @@ -11,17 +11,17 @@ "castingTime": "Action", "reactionContext": "None", "ritualCastingTime": "Action", - "requiresConcentration": false, + "requiresConcentration": true, "effectDescription": { "$type": "EffectDescription, Assembly-CSharp", "rangeType": "Distance", - "rangeParameter": 12, + "rangeParameter": 6, "halfDamageOnAMiss": false, "hitAffinitiesByTargetTag": [], - "targetType": "Position", + "targetType": "Cube", "itemSelectionType": "None", "targetParameter": 1, - "targetParameter2": 2, + "targetParameter2": 0, "emissiveBorder": "None", "emissiveParameter": 1, "requiresTargetProximity": false, @@ -42,7 +42,7 @@ "trapRangeType": "Triggerer", "targetConditionName": "", "targetConditionAsset": null, - "targetSide": "Enemy", + "targetSide": "All", "durationType": "Minute", "durationParameter": 1, "endOfEffect": "EndOfTurn", @@ -153,7 +153,7 @@ "$type": "EffectParticleParameters, Assembly-CSharp", "casterParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", + "m_AssetGUID": "179010f7336fe024b8d0d1892b2386c9", "m_SubObjectName": "", "m_SubObjectType": "" }, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/Glibness.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/Glibness.json index f4d3883901..01a2dc9d57 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/Glibness.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/Glibness.json @@ -25,16 +25,16 @@ "emissiveBorder": "None", "emissiveParameter": 1, "requiresTargetProximity": false, - "targetProximityDistance": 30, + "targetProximityDistance": 6, "targetExcludeCaster": false, "canBePlacedOnCharacter": true, "affectOnlyGround": false, - "targetFilteringMethod": "AllCharacterAndGadgets", + "targetFilteringMethod": "CharacterOnly", "targetFilteringTag": "No", "requiresVisibilityForPosition": true, "inviteOptionalAlly": false, "slotTypes": [], - "recurrentEffect": "OnActivation, OnTurnStart, OnEnter", + "recurrentEffect": "No", "retargetAfterDeath": false, "retargetActionType": "Bonus", "poolFilterDiceNumber": 5, @@ -127,13 +127,13 @@ "$type": "EffectParticleParameters, Assembly-CSharp", "casterParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "74aff29d9a49eb042a3377c2511b13a2", + "m_AssetGUID": "571a64165c20f514eb4d4e632a93fff4", "m_SubObjectName": "", "m_SubObjectType": "" }, "casterSelfParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", + "m_AssetGUID": "b8e3910dc27fdf743ab63e37bc90ba01", "m_SubObjectName": "", "m_SubObjectType": "" }, @@ -151,7 +151,7 @@ }, "effectParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", + "m_AssetGUID": "440ce6c2017fc654fa1accc32e030c96", "m_SubObjectName": "", "m_SubObjectType": "" }, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/HolyWeapon.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/HolyWeapon.json index ad89040a85..5442771dc7 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/HolyWeapon.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/HolyWeapon.json @@ -220,7 +220,7 @@ }, "effectParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", + "m_AssetGUID": "440ce6c2017fc654fa1accc32e030c96", "m_SubObjectName": "", "m_SubObjectType": "" }, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/MagicStone.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/MagicStone.json new file mode 100644 index 0000000000..2cee43df57 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/MagicStone.json @@ -0,0 +1,376 @@ +{ + "$type": "SpellDefinition, Assembly-CSharp", + "spellsBundle": false, + "subspellsList": [], + "compactSubspellsTooltip": false, + "implemented": true, + "schoolOfMagic": "SchoolTransmutation", + "spellLevel": 0, + "ritual": false, + "uniqueInstance": false, + "castingTime": "BonusAction", + "reactionContext": "None", + "ritualCastingTime": "Action", + "requiresConcentration": false, + "effectDescription": { + "$type": "EffectDescription, Assembly-CSharp", + "rangeType": "Touch", + "rangeParameter": 0, + "halfDamageOnAMiss": false, + "hitAffinitiesByTargetTag": [], + "targetType": "IndividualsUnique", + "itemSelectionType": "None", + "targetParameter": 1, + "targetParameter2": 2, + "emissiveBorder": "None", + "emissiveParameter": 1, + "requiresTargetProximity": false, + "targetProximityDistance": 6, + "targetExcludeCaster": false, + "canBePlacedOnCharacter": true, + "affectOnlyGround": false, + "targetFilteringMethod": "CharacterOnly", + "targetFilteringTag": "No", + "requiresVisibilityForPosition": true, + "inviteOptionalAlly": false, + "slotTypes": [], + "recurrentEffect": "No", + "retargetAfterDeath": false, + "retargetActionType": "Bonus", + "poolFilterDiceNumber": 5, + "poolFilterDieType": "D8", + "trapRangeType": "Triggerer", + "targetConditionName": "", + "targetConditionAsset": null, + "targetSide": "Ally", + "durationType": "Minute", + "durationParameter": 1, + "endOfEffect": "EndOfTurn", + "hasSavingThrow": false, + "disableSavingThrowOnAllies": false, + "savingThrowAbility": "Dexterity", + "ignoreCover": false, + "grantedConditionOnSave": null, + "rollSaveOnlyIfRelevantForms": false, + "hasShoveRoll": false, + "createdByCharacter": true, + "difficultyClassComputation": "SpellCastingFeature", + "savingThrowDifficultyAbility": "Wisdom", + "fixedSavingThrowDifficultyClass": 15, + "savingThrowAffinitiesBySense": [], + "savingThrowAffinitiesByFamily": [], + "damageAffinitiesByFamily": [], + "advantageForEnemies": false, + "canBeDispersed": false, + "hasVelocity": false, + "velocityCellsPerRound": 2, + "velocityType": "AwayFromSourceOriginalPosition", + "restrictedCreatureFamilies": [], + "immuneCreatureFamilies": [], + "restrictedCharacterSizes": [], + "hasLimitedEffectPool": false, + "effectPoolAmount": 60, + "effectApplication": "All", + "effectFormFilters": [], + "effectForms": [ + { + "$type": "EffectForm, Assembly-CSharp", + "formType": "Summon", + "addBonusMode": "None", + "applyLevel": "No", + "levelType": "ClassLevel", + "levelMultiplier": 1, + "diceByLevelTable": [], + "createdByCharacter": true, + "createdByCondition": false, + "hasSavingThrow": false, + "savingThrowAffinity": "None", + "dcModifier": 0, + "canSaveToCancel": false, + "saveOccurence": "EndOfTurn", + "summonForm": { + "$type": "SummonForm, Assembly-CSharp", + "summonType": "InventoryItem", + "itemDefinition": "Definition:Dart:4fd5b12327964f74eae8cd62910dd518", + "trackItem": true, + "monsterDefinitionName": "", + "number": 3, + "conditionDefinition": null, + "persistOnConcentrationLoss": true, + "decisionPackage": null, + "effectProxyDefinitionName": null + }, + "hasFilterId": false, + "filterId": 0 + }, + { + "$type": "EffectForm, Assembly-CSharp", + "formType": "Condition", + "addBonusMode": "None", + "applyLevel": "No", + "levelType": "ClassLevel", + "levelMultiplier": 1, + "diceByLevelTable": [], + "createdByCharacter": true, + "createdByCondition": false, + "hasSavingThrow": false, + "savingThrowAffinity": "None", + "dcModifier": 0, + "canSaveToCancel": false, + "saveOccurence": "EndOfTurn", + "conditionForm": { + "$type": "ConditionForm, Assembly-CSharp", + "conditionDefinitionName": "ConditionMagicStone", + "conditionDefinition": "Definition:ConditionMagicStone:e26abe14-2554-598d-89d1-e8df7c362553", + "operation": "Add", + "conditionsList": [], + "applyToSelf": true, + "forceOnSelf": false + }, + "hasFilterId": false, + "filterId": 0 + } + ], + "specialFormsDescription": "", + "effectAdvancement": { + "$type": "EffectAdvancement, Assembly-CSharp", + "effectIncrementMethod": "CasterLevelTable", + "incrementMultiplier": 1, + "additionalTargetsPerIncrement": 0, + "additionalSubtargetsPerIncrement": 0, + "additionalDicePerIncrement": 0, + "additionalSpellLevelPerIncrement": 0, + "additionalSummonsPerIncrement": 1, + "additionalHPPerIncrement": 0, + "additionalTempHPPerIncrement": 0, + "additionalTargetCellsPerIncrement": 0, + "additionalItemBonus": 0, + "additionalWeaponDie": 0, + "alteredDuration": "None" + }, + "speedType": "Instant", + "speedParameter": 10.0, + "offsetImpactTimeBasedOnDistance": false, + "offsetImpactTimeBasedOnDistanceFactor": 0.1, + "offsetImpactTimePerTarget": 0.0, + "effectParticleParameters": { + "$type": "EffectParticleParameters, Assembly-CSharp", + "casterParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "2a5fb39a57ad3754ebaaaccd9e92e9ce", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "casterSelfParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "casterQuickSpellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "targetParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "effectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "05c5c0f49bcabdf449d3dc9ba3ae10cb", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "effectSubTargetParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "zoneParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "beforeImpactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "impactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "c50fd7065bb34304ca1f1a3a02dcd532", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectImpactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceParticlePerIndex": "", + "activeEffectSurfaceParticlePerIndexCount": 0, + "emissiveBorderCellStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderCellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderCellEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "forceApplyZoneParticle": false, + "applyEmissionColorOnWeapons": false, + "emissionColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "emissionColorFadeInDuration": 0.0, + "emissionColorFadeOutDuration": 0.0 + }, + "effectAIParameters": { + "$type": "EffectAIParameters, Assembly-CSharp", + "aoeScoreMultiplier": 1.0, + "cooldownForCaster": 0, + "cooldownForBattle": 0, + "sortingScoreMultiplier": 1.0, + "dynamicCooldown": false + }, + "animationMagicEffect": "Animation0", + "lightCounterDispellsEffect": false, + "hideSavingThrowAnimation": false + }, + "aiParameters": { + "$type": "SpellAIParameters, Assembly-CSharp", + "learnPriority": "Low", + "preparePriority": "Low" + }, + "concentrationAction": "None", + "verboseComponent": true, + "somaticComponent": true, + "materialComponentType": "None", + "specificMaterialComponentTag": "Diamond", + "specificMaterialComponentCostGp": 100, + "specificMaterialComponentConsumed": true, + "terminateOnItemUnequip": false, + "displayConditionDuration": false, + "vocalSpellSemeType": "Buff", + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "Spell/&MagicStoneTitle", + "description": "Spell/&MagicStoneDescription", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "5183a34e-8e8b-59ba-9a3f-3657b0a591c2", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "e7b2ec32-cf9f-5044-9645-08d130d4350f", + "contentPack": 9999, + "name": "MagicStone" +} \ No newline at end of file diff --git a/Documentation/Spells.md b/Documentation/Spells.md index 618630d07b..ac9dcc5ea0 100644 --- a/Documentation/Spells.md +++ b/Documentation/Spells.md @@ -34,7 +34,7 @@ You brandish the weapon used in the spell's casting and make a melee attack with Deal damage to one enemy and prevent healing for a limited time. -# 7. - *Create Bonfire* © (V,S) level 0 Conjuration [UB] +# 7. - *Create Bonfire* © (V,S) level 0 Conjuration [Concentration] [UB] **[Artificer, Druid, Sorcerer, Warlock, Wizard]** diff --git a/SolastaUnfinishedBusiness/ChangelogHistory.txt b/SolastaUnfinishedBusiness/ChangelogHistory.txt index 6423c0b4ce..829f60aac6 100644 --- a/SolastaUnfinishedBusiness/ChangelogHistory.txt +++ b/SolastaUnfinishedBusiness/ChangelogHistory.txt @@ -1,9 +1,9 @@ 1.5.97.30: -- added Create Bonfire, Magic Stone, Command, Dissonant Whispers, Holy Weapon, Swift Quiver, and Glibness spells - added Character > General 'Add the Fall Prone action to all playable races' - added Character > Rules > 'Allow allies to perceive Ranger GloomStalker when in natural darkness' - added Character > Rules > 'Enable push and pull motion effects to also work on up/down axis' +- added Create Bonfire, Magic Stone [wip], Command, Dissonant Whispers, Holy Weapon, Swift Quiver, and Glibness spells - added Interface > Dungeon Maker > 'Enable variable placeholders on descriptions' - added Interface > Game UI > 'Enable CTRL click-drag to bypass quest items checks on drop' - fixed Ashardalon's Stride spell doing multiple damages to same target on same round @@ -17,11 +17,13 @@ - fixed Green-Flame Blade cantrip adding extra damage to subsequent attacks on same turn - fixed Lucky, and Mage Slayer feats double consumption - fixed Martial Commander coordinated defense to require an attack first [VANILLA] +- fixed medium creatures with height 5ft+ being considered only 1 tile taller [VANILLA] - fixed Party Editor to register/unregister powers from feats - fixed Path of the Wild Magic retribution, and Patron Archfey misty step reacting against allies - fixed Power Attack feat not triggering on unarmed attacks -- fixed Rescue the Dying spell reacting on enemy death - fixed Quickened interaction with melee attack cantrips +- fixed Rescue the Dying spell reacting on enemy death +- fixed save by location not offering saves for campaigns you don't have, and disabling buttons if there are no saves - fixed Wrathful Smite to do a wisdom ability check against caster DC - improved location gadgets to trigger "try alter save outcome" reactions [VANILLA] - improved Maneuvering Attack, and Martial Warlord strategic repositioning to use a run stance From 299459df22123195aa8238c50358f8fcef91bd7f Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sat, 14 Sep 2024 08:47:27 -0700 Subject: [PATCH 170/212] prevent custom SFX on multiplayer sessions --- SolastaUnfinishedBusiness/Api/Helpers/EffectHelpers.cs | 6 ++++++ SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs | 7 ++----- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/SolastaUnfinishedBusiness/Api/Helpers/EffectHelpers.cs b/SolastaUnfinishedBusiness/Api/Helpers/EffectHelpers.cs index 72aa7eb0cb..653e26f2bd 100644 --- a/SolastaUnfinishedBusiness/Api/Helpers/EffectHelpers.cs +++ b/SolastaUnfinishedBusiness/Api/Helpers/EffectHelpers.cs @@ -20,6 +20,12 @@ internal static void StartVisualEffect( IMagicEffect magicEffect, EffectType effectType = EffectType.Impact) { + // be safe on multiplayer sessions as depending on flow, SFX can break them + if (Global.IsMultiplayer) + { + return; + } + var prefab = effectType switch { EffectType.Caster => magicEffect.EffectDescription.EffectParticleParameters.CasterParticle, diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs index cc94b2d529..d0618eaac1 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs @@ -2092,11 +2092,8 @@ void ReactionValidated(CharacterActionParams actionParams) { var slotUsed = actionParams.IntParameter; - if (!Global.IsMultiplayer) - { - EffectHelpers.StartVisualEffect(defender, defender, ShadowArmor, EffectHelpers.EffectType.Caster); - EffectHelpers.StartVisualEffect(defender, defender, ShadowArmor, EffectHelpers.EffectType.Effect); - } + EffectHelpers.StartVisualEffect(defender, defender, ShadowArmor, EffectHelpers.EffectType.Caster); + EffectHelpers.StartVisualEffect(defender, defender, ShadowArmor, EffectHelpers.EffectType.Effect); foreach (var condition in resistanceDamageTypes .Select(damageType => From 811ea4fe30be9321cd72f2caa9c4f182532839ba Mon Sep 17 00:00:00 2001 From: EnderWiggin Date: Sat, 14 Sep 2024 18:48:49 +0300 Subject: [PATCH 171/212] fixed character levelup spell selection panel scrolling if last spell group has more spells than fit in view --- ...haracterStageSpellSelectionPanelPatcher.cs | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/SolastaUnfinishedBusiness/Patches/CharacterStageSpellSelectionPanelPatcher.cs b/SolastaUnfinishedBusiness/Patches/CharacterStageSpellSelectionPanelPatcher.cs index 552c8dfa35..6ca2958d8a 100644 --- a/SolastaUnfinishedBusiness/Patches/CharacterStageSpellSelectionPanelPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/CharacterStageSpellSelectionPanelPatcher.cs @@ -7,6 +7,7 @@ using SolastaUnfinishedBusiness.Api.Helpers; using SolastaUnfinishedBusiness.Models; using UnityEngine; +using UnityEngine.UI; namespace SolastaUnfinishedBusiness.Patches; @@ -47,5 +48,29 @@ public static IEnumerable Transpiler([NotNull] IEnumerable().rect.width; + var spacing = levelTable.GetComponent().spacing; + var totalWidth = 0f; + var lastWidth = 0f; + for (var i = 0; i < levelTable.childCount; ++i) + { + var child = levelTable.GetChild(i); + if (!child.gameObject.activeSelf) { continue; } + + lastWidth = child.GetComponent().rect.width + spacing; + totalWidth += lastWidth; + } + + levelTable.sizeDelta = new Vector2( + //totalWidth + (viewWidth - lastWidth), //original, adds just enough space to last level to make it fit + //but there's problem if there's more spells that can fit - do not add space then, as it is not needed + totalWidth + Math.Max(viewWidth - lastWidth, 0), + levelTable.sizeDelta.y); + } } } From b4344d76fe9aad2a543845abfa783ad1b25fe76c Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sat, 14 Sep 2024 09:04:26 -0700 Subject: [PATCH 172/212] fix unity objects life check --- .../Models/EncounterSpawnContext.cs | 31 ++++++++++++------- 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/SolastaUnfinishedBusiness/Models/EncounterSpawnContext.cs b/SolastaUnfinishedBusiness/Models/EncounterSpawnContext.cs index 7b4bfafe8a..2b0a9f0478 100644 --- a/SolastaUnfinishedBusiness/Models/EncounterSpawnContext.cs +++ b/SolastaUnfinishedBusiness/Models/EncounterSpawnContext.cs @@ -114,21 +114,28 @@ internal static void ConfirmStageEncounter() null, null); } - else if (Gui.GameLocation && - Gui.GameLocation.LocationDefinition && - Gui.GameLocation.LocationDefinition.IsUserLocation) + + if (!Gui.GameLocation) { - var position = GetEncounterPosition(); + return; + } - Gui.GuiService.ShowMessage( - MessageModal.Severity.Attention2, - "Message/&SpawnCustomEncounterTitle", - Gui.Format("Message/&SpawnCustomEncounterDescription", position.x.ToString(), - position.x.ToString()), - "Message/&MessageYesTitle", "Message/&MessageNoTitle", - () => StageEncounter(position), - null); + if (!Gui.GameLocation.LocationDefinition || + !Gui.GameLocation.LocationDefinition.IsUserLocation) + { + return; } + + var position = GetEncounterPosition(); + + Gui.GuiService.ShowMessage( + MessageModal.Severity.Attention2, + "Message/&SpawnCustomEncounterTitle", + Gui.Format("Message/&SpawnCustomEncounterDescription", position.x.ToString(), + position.x.ToString()), + "Message/&MessageYesTitle", "Message/&MessageNoTitle", + () => StageEncounter(position), + null); } private static int3 GetEncounterPosition() From 104d42994a11b1baec8ae34c6388580c60f4d11f Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sat, 14 Sep 2024 09:15:47 -0700 Subject: [PATCH 173/212] add ConditionDashingSwiftBlade to report --- .../Api/DatabaseHelper-RELEASE.cs | 33 +++++++++++++++++++ .../ChangelogHistory.txt | 2 ++ .../Models/FixesContext.cs | 3 +- 3 files changed, 37 insertions(+), 1 deletion(-) diff --git a/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs b/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs index 1b3edff17b..280a68cad9 100644 --- a/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs +++ b/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs @@ -305,6 +305,39 @@ internal static class CharacterSubclassDefinitions internal static class ConditionDefinitions { + internal static ConditionDefinition ConditionDashing { get; } = + GetDefinition("ConditionDashing"); + + internal static ConditionDefinition ConditionDashingAdditional { get; } = + GetDefinition("ConditionDashingAdditional"); + + internal static ConditionDefinition ConditionDashingAdditionalSwiftBlade { get; } = + GetDefinition("ConditionDashingAdditionalSwiftBlade"); + + internal static ConditionDefinition ConditionDashingBonus { get; } = + GetDefinition("ConditionDashingBonus"); + + internal static ConditionDefinition ConditionDashingBonusAdditional { get; } = + GetDefinition("ConditionDashingBonusAdditional"); + + internal static ConditionDefinition ConditionDashingBonusStepOfTheWind { get; } = + GetDefinition("ConditionDashingBonusStepOfTheWind"); + + internal static ConditionDefinition ConditionDashingBonusSwiftBlade { get; } = + GetDefinition("ConditionDashingBonusSwiftBlade"); + + internal static ConditionDefinition ConditionDashingBonusSwiftSteps { get; } = + GetDefinition("ConditionDashingBonusSwiftSteps"); + + internal static ConditionDefinition ConditionDashingExpeditiousRetreat { get; } = + GetDefinition("ConditionDashingExpeditiousRetreat"); + + internal static ConditionDefinition ConditionDashingExpeditiousRetreatSwiftBlade { get; } = + GetDefinition("ConditionDashingExpeditiousRetreatSwiftBlade"); + + internal static ConditionDefinition ConditionDashingSwiftBlade { get; } = + GetDefinition("ConditionDashingSwiftBlade"); + internal static ConditionDefinition ConditionMonkFlurryOfBlowsUnarmedStrikeBonus { get; } = GetDefinition("ConditionMonkFlurryOfBlowsUnarmedStrikeBonus"); diff --git a/SolastaUnfinishedBusiness/ChangelogHistory.txt b/SolastaUnfinishedBusiness/ChangelogHistory.txt index 829f60aac6..3ee6c7cc58 100644 --- a/SolastaUnfinishedBusiness/ChangelogHistory.txt +++ b/SolastaUnfinishedBusiness/ChangelogHistory.txt @@ -25,6 +25,7 @@ - fixed Rescue the Dying spell reacting on enemy death - fixed save by location not offering saves for campaigns you don't have, and disabling buttons if there are no saves - fixed Wrathful Smite to do a wisdom ability check against caster DC +- improved combat log so players can see when characters use dash action [VANILLA] - improved location gadgets to trigger "try alter save outcome" reactions [VANILLA] - improved Maneuvering Attack, and Martial Warlord strategic repositioning to use a run stance - improved mod UI to ensure all settings required to be in sync on MP sessions are now under Gameplay @@ -41,6 +42,7 @@ KNOWN ISSUES: - fixed cantrips **CRASH** if not a melee cantrip and hero has replace attack with cantrips - fixed Bait and Switch maneuver incorrectly changing AC with an add. +1 - fixed Bardic Inspiration attribute checks to use modifiers instead of adding to roll +- fixed character spell selection panel scrolling if last spell group has more spells than it can fit in view - fixed Circle of the Cosmos weal/woe double consumption - fixed Circle of the Wildfire cauterizing flames heal from half to full hit points cap - fixed College of Elegance evasive footwork incorrectly changing AC with an add. +1 diff --git a/SolastaUnfinishedBusiness/Models/FixesContext.cs b/SolastaUnfinishedBusiness/Models/FixesContext.cs index 815911ab56..3ba2e99fde 100644 --- a/SolastaUnfinishedBusiness/Models/FixesContext.cs +++ b/SolastaUnfinishedBusiness/Models/FixesContext.cs @@ -660,7 +660,7 @@ x.ActivationTime is ActivationTime.Permanent or ActivationTime.PermanentUnlessIn power.AddCustomSubFeatures(ModifyPowerVisibility.Hidden); } } - + private static void ReportDashing() { Report(ConditionDefinitions.ConditionDashing); @@ -673,6 +673,7 @@ private static void ReportDashing() Report(ConditionDefinitions.ConditionDashingBonusSwiftSteps); Report(ConditionDefinitions.ConditionDashingExpeditiousRetreat); Report(ConditionDefinitions.ConditionDashingExpeditiousRetreatSwiftBlade); + Report(ConditionDefinitions.ConditionDashingSwiftBlade); return; static void Report(ConditionDefinition condition) From 29ee9fc5d0e389e8e98cd098a6a7cb2c4d25983f Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sat, 14 Sep 2024 09:43:43 -0700 Subject: [PATCH 174/212] demote Magic Stone cantrip and add skeleton Gravity Fissure spell --- SolastaUnfinishedBusiness/Displays/_ModUi.cs | 1 + .../Models/SpellsContext.cs | 5 +- .../Properties/Resources.Designer.cs | 20 ++++---- .../Properties/Resources.resx | 7 +++ .../Resources/Spells}/GravityFissure.png | Bin .../Spells/SpellBuildersCantrips.cs | 43 +++++++++++++++++- .../Spells/SpellBuildersLevel06.cs | 38 ++++++++++++++++ .../Translations/de/Spells/Spells06-de.txt | 2 + .../Translations/en/Spells/Spells06-en.txt | 2 + .../Translations/es/Spells/Spells06-es.txt | 2 + .../Translations/fr/Spells/Spells06-fr.txt | 2 + .../Translations/it/Spells/Spells06-it.txt | 2 + .../Translations/ja/Spells/Spells06-ja.txt | 2 + .../Translations/ko/Spells/Spells06-ko.txt | 2 + .../pt-BR/Spells/Spells06-pt-BR.txt | 2 + .../Translations/ru/Spells/Spells06-ru.txt | 2 + .../zh-CN/Spells/Spells06-zh-CN.txt | 2 + 17 files changed, 121 insertions(+), 13 deletions(-) rename {Media => SolastaUnfinishedBusiness/Resources/Spells}/GravityFissure.png (100%) diff --git a/SolastaUnfinishedBusiness/Displays/_ModUi.cs b/SolastaUnfinishedBusiness/Displays/_ModUi.cs index d1155615d1..a1bcdd0d63 100644 --- a/SolastaUnfinishedBusiness/Displays/_ModUi.cs +++ b/SolastaUnfinishedBusiness/Displays/_ModUi.cs @@ -156,6 +156,7 @@ internal static class ModUi "ForestGuardian", "Glibness", "GiftOfAlacrity", + "GravityFissure", "GravitySinkhole", "HeroicInfusion", "HolyWeapon", diff --git a/SolastaUnfinishedBusiness/Models/SpellsContext.cs b/SolastaUnfinishedBusiness/Models/SpellsContext.cs index 92a3d87de2..301bf8a670 100644 --- a/SolastaUnfinishedBusiness/Models/SpellsContext.cs +++ b/SolastaUnfinishedBusiness/Models/SpellsContext.cs @@ -248,7 +248,7 @@ internal static void LateLoad() RegisterSpell(BuildInfestation(), 0, SpellListDruid, SpellListSorcerer, SpellListWarlock, SpellListWizard); RegisterSpell(BuildLightningLure(), 0, SpellListSorcerer, SpellListWarlock, SpellListWizard, spellListInventorClass); - RegisterSpell(BuildMagicStone(), 0, SpellListDruid, SpellListWarlock, spellListInventorClass); + //RegisterSpell(BuildMagicStone(), 0, SpellListDruid, SpellListWarlock, spellListInventorClass); RegisterSpell(BuildMindSpike(), 0, SpellListSorcerer, SpellListWarlock, SpellListWizard); RegisterSpell(BuildMinorLifesteal(), 0, SpellListBard, SpellListSorcerer, SpellListWarlock, SpellListWizard); RegisterSpell(BuildPrimalSavagery(), 0, SpellListDruid); @@ -368,8 +368,9 @@ internal static void LateLoad() RegisterSpell(Telekinesis, 0, SpellListSorcerer, SpellListWizard); // 6th level - RegisterSpell(BuildHeroicInfusion(), 0, SpellListWizard); RegisterSpell(BuildFlashFreeze(), 0, SpellListDruid, SpellListSorcerer, SpellListWarlock); + RegisterSpell(BuildGravityFissure(), 0, SpellListWizard); + RegisterSpell(BuildHeroicInfusion(), 0, SpellListWizard); RegisterSpell(BuildMysticalCloak(), 0, SpellListSorcerer, SpellListWarlock, SpellListWizard); RegisterSpell(BuildPoisonWave(), 0, SpellListWizard); RegisterSpell(BuildFizbanPlatinumShield(), 0, SpellListSorcerer, SpellListWizard); diff --git a/SolastaUnfinishedBusiness/Properties/Resources.Designer.cs b/SolastaUnfinishedBusiness/Properties/Resources.Designer.cs index 7d314074f0..5823c8685d 100644 --- a/SolastaUnfinishedBusiness/Properties/Resources.Designer.cs +++ b/SolastaUnfinishedBusiness/Properties/Resources.Designer.cs @@ -1809,6 +1809,16 @@ public static byte[] GoldDragon { } } + /// + /// Looks up a localized resource of type System.Byte[]. + /// + public static byte[] GravityFissure { + get { + object obj = ResourceManager.GetObject("GravityFissure", resourceCulture); + return ((byte[])(obj)); + } + } + /// /// Looks up a localized resource of type System.Byte[]. /// @@ -2379,16 +2389,6 @@ public static byte[] MaddeningDarkness { } } - /// - /// Looks up a localized resource of type System.Byte[]. - /// - public static byte[] MagicStone { - get { - object obj = ResourceManager.GetObject("MagicStone", resourceCulture); - return ((byte[])(obj)); - } - } - /// /// Looks up a localized resource of type System.Byte[]. /// diff --git a/SolastaUnfinishedBusiness/Properties/Resources.resx b/SolastaUnfinishedBusiness/Properties/Resources.resx index 339f9978f5..8ae461c47b 100644 --- a/SolastaUnfinishedBusiness/Properties/Resources.resx +++ b/SolastaUnfinishedBusiness/Properties/Resources.resx @@ -162,16 +162,23 @@ PublicKeyToken=b77a5c561934e089 + + ../Resources/Spells/GravityFissure.png;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + ../Resources/Spells/HolyWeapon.png;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + ../Resources/Powers/PowerHolyWeapon.png;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 diff --git a/Media/GravityFissure.png b/SolastaUnfinishedBusiness/Resources/Spells/GravityFissure.png similarity index 100% rename from Media/GravityFissure.png rename to SolastaUnfinishedBusiness/Resources/Spells/GravityFissure.png diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs index dbe6586c51..9c996742ad 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs @@ -363,12 +363,45 @@ internal static SpellDefinition BuildLightningLure() #endregion +#if false #region Magic Stone internal static SpellDefinition BuildMagicStone() { const string NAME = "MagicStone"; + var itemShadowStone = ItemDefinitionBuilder + .Create(ItemDefinitions.Dart, $"Item{NAME}") + //.SetGuiPresentation(Category.Item) + .SetItemTags(TagsDefinitions.ItemTagConjured) + .SetStaticProperties( + ItemPropertyDescriptionBuilder.From( + FeatureDefinitionBuilder + .Create($"Feature{NAME}") + .SetGuiPresentation($"Feature{NAME}", Category.Feature) + .AddToDB(), + knowledgeAffinity: EquipmentDefinitions.KnowledgeAffinity.ActiveAndVisible) + .Build()) + .HideFromDungeonEditor() + .AddToDB(); + + itemShadowStone.activeTags.Clear(); + itemShadowStone.itemPresentation.assetReference = + ItemDefinitions.StoneOfGoodLuck.itemPresentation.assetReference; + itemShadowStone.weaponDefinition.EffectDescription.EffectParticleParameters.impactParticleReference = + EffectProxyDefinitions.ProxyArcaneSword.attackImpactParticle; + + var weaponDescription = itemShadowStone.WeaponDescription; + + weaponDescription.closeRange = 12; + weaponDescription.maxRange = 12; + + var damageForm = weaponDescription.EffectDescription.FindFirstDamageForm(); + + damageForm.damageType = DamageTypeBludgeoning; + damageForm.dieType = DieType.D6; + damageForm.diceNumber = 1; + var condition = ConditionDefinitionBuilder .Create($"Condition{NAME}") .SetGuiPresentationNoContent(true) @@ -394,17 +427,25 @@ internal static SpellDefinition BuildMagicStone() .SetEffectForms( EffectFormBuilder .Create() - .SetSummonItemForm(ItemDefinitions.Dart, 3, true) + .SetSummonItemForm(itemShadowStone, 3, true) .Build(), EffectFormBuilder.ConditionForm(condition, ConditionForm.ConditionOperation.Add, true)) .SetParticleEffectParameters(ShadowDagger) .Build()) .AddToDB(); + spell.EffectDescription.slotTypes = + [ + EquipmentDefinitions.SlotTypeMainHand, + EquipmentDefinitions.SlotTypeOffHand, + EquipmentDefinitions.SlotTypeContainer + ]; + return spell; } #endregion +#endif #region Mind Spike diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel06.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel06.cs index a8420e27cb..058ccdfaba 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel06.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel06.cs @@ -186,6 +186,44 @@ internal static SpellDefinition BuildPoisonWave() #endregion + #region Gravity Fissure + + internal static SpellDefinition BuildGravityFissure() + { + const string NAME = "GravityFissure"; + + var spell = SpellDefinitionBuilder + .Create($"{NAME}HigherPlane") + .SetGuiPresentation(Category.Spell, Sprites.GetSprite(NAME, Resources.GravityFissure, 128)) + .SetSchoolOfMagic(SchoolOfMagicDefinitions.SchoolEvocation) + .SetSpellLevel(6) + .SetCastingTime(ActivationTime.Action) + .SetMaterialComponent(MaterialComponentType.Mundane) + .SetVerboseComponent(true) + .SetSomaticComponent(true) + .SetVocalSpellSameType(VocalSpellSemeType.Attack) + .SetEffectDescription( + EffectDescriptionBuilder + .Create() + .SetTargetingData(Side.All, RangeType.Self, 0, TargetType.Line, 12) + .SetSavingThrowData(false, AttributeDefinitions.Constitution, true, + EffectDifficultyClassComputation.SpellCastingFeature) + .SetEffectAdvancement(EffectIncrementMethod.PerAdditionalSlotLevel, additionalDicePerIncrement: 1) + .SetEffectForms( + EffectFormBuilder + .Create() + .HasSavingThrow(EffectSavingThrowType.HalfDamage) + .SetDamageForm(DamageTypeForce, 8, DieType.D8) + .Build()) + .Build()) + .AddToDB(); + + + return spell; + } + + #endregion + #region Shelter From Energy private static readonly List<(FeatureDefinitionDamageAffinity, IMagicEffect, AssetReference)> ShelterDamageTypes = diff --git a/SolastaUnfinishedBusiness/Translations/de/Spells/Spells06-de.txt b/SolastaUnfinishedBusiness/Translations/de/Spells/Spells06-de.txt index 07c2706fef..5c3fafffb8 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Spells/Spells06-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Spells/Spells06-de.txt @@ -10,6 +10,8 @@ Spell/&FizbanPlatinumShieldDescription=Du erschaffst ein Feld aus silbrigem Lich Spell/&FizbanPlatinumShieldTitle=Fizbans Platinschild Spell/&FlashFreezeDescription=Sie versuchen, eine Kreatur, die Sie in Reichweite sehen können, in ein Gefängnis aus massivem Eis einzuschließen. Das Ziel muss einen Geschicklichkeitsrettungswurf machen. Bei einem misslungenen Rettungswurf erleidet das Ziel 10W6 Kälteschaden und wird in Schichten aus dickem Eis gefangen. Bei einem erfolgreichen Rettungswurf erleidet das Ziel nur halb so viel Schaden und wird nicht gefangen gehalten. Der Zauber kann nur auf Kreaturen bis zu großer Größe angewendet werden. Um auszubrechen, kann das gefangene Ziel einen Stärkewurf als Aktion gegen Ihren Zauberrettungswurf-SG machen. Bei Erfolg entkommt das Ziel und ist nicht länger gefangen. Wenn Sie diesen Zauber mit einem Zauberplatz der 7. Stufe oder höher wirken, erhöht sich der Kälteschaden um 2W6 für jede Platzstufe über der 6. Spell/&FlashFreezeTitle=Schockgefrieren +Spell/&GravityFissureDescription=Du erzeugst eine Schlucht aus Gravitationsenergie in einer Linie, die von dir ausgeht und 100 Fuß lang und 5 Fuß breit ist. Jede Kreatur in dieser Linie muss einen Konstitutionsrettungswurf machen und erleidet bei einem misslungenen Rettungswurf 8W8 Kraftschaden oder bei einem erfolgreichen Rettungswurf die Hälfte. Jede Kreatur innerhalb von 10 Fuß der Linie, die sich aber nicht darin befindet, muss einen Konstitutionsrettungswurf machen oder erleidet 8W8 Kraftschaden und wird zur Linie gezogen, bis die Kreatur in ihrem Bereich ist. Wenn du diesen Zauber mit einem Slot der 7. Stufe oder höher wirkst, erhöht sich der Schaden um 1W8 für jeden Slotlevel über dem 6. +Spell/&GravityFissureTitle=Schwerkraftspalt Spell/&HeroicInfusionDescription=Sie verleihen sich Ausdauer und Kampfgeschick, angetrieben durch Magie. Bis der Zauber endet, können Sie keine Zauber wirken und Sie erhalten die folgenden Vorteile:\n• Sie erhalten 50 temporäre Trefferpunkte. Wenn welche davon übrig sind, wenn der Zauber endet, sind sie verloren.\n• Sie haben einen Vorteil bei Angriffswürfen, die Sie mit einfachen und Kampfwaffen machen.\n• Wenn Sie ein Ziel mit einem Waffenangriff treffen, erleidet dieses Ziel zusätzlichen Kraftschaden von 2W12.\n• Sie besitzen die Rüstungs-, Waffen- und Rettungswurffähigkeiten der Kämpferklasse.\n• Sie können zweimal angreifen, statt einmal, wenn Sie in Ihrem Zug die Angriffsaktion ausführen.\nUnmittelbar nachdem der Zauber endet, müssen Sie einen Konstitutionsrettungswurf DC 15 bestehen oder erleiden eine Stufe Erschöpfung. Spell/&HeroicInfusionTitle=Tensers Verwandlung Spell/&MysticalCloakDescription=Indem Sie einen Zauberspruch aussprechen, greifen Sie auf die Magie der unteren oder oberen Ebenen (Ihre Wahl) zurück, um sich zu verwandeln. diff --git a/SolastaUnfinishedBusiness/Translations/en/Spells/Spells06-en.txt b/SolastaUnfinishedBusiness/Translations/en/Spells/Spells06-en.txt index bd5cf07bf1..b923e11a36 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Spells/Spells06-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Spells/Spells06-en.txt @@ -10,6 +10,8 @@ Spell/&FizbanPlatinumShieldDescription=You create a field of silvery light that Spell/&FizbanPlatinumShieldTitle=Fizban's Platinum Shield Spell/&FlashFreezeDescription=You attempt to encase a creature you can see within range in a prison of solid ice. The target must make a Dexterity saving throw. On a failed save, the target takes 10d6 cold damage and becomes restrained in layers of thick ice. On a successful save, the target takes half as much damage and is not restrained. The spell can only be used on creatures up to large size. To break out, the restrained target can make a Strength check as an action against your spell save DC. On success, the target escapes and is no longer restrained. When you cast this spell using a spell slot of 7th level or higher, the cold damage increases by 2d6 for each slot level above 6th. Spell/&FlashFreezeTitle=Flash Freeze +Spell/&GravityFissureDescription=You manifest a ravine of gravitational energy in a line originating from you that is 100 feet long and 5 feet wide. Each creature in that line must make a Constitution saving throw, taking 8d8 force damage on a failed save, or half as much damage on a successful one. Each creature within 10 feet of the line but not in it must succeed on a Constitution saving throw or take 8d8 force damage and be pulled toward the line until the creature is in its area. When you cast this spell using a slot of 7th level or higher, the damage increases by 1d8 for each slot level above 6th. +Spell/&GravityFissureTitle=Gravity Fissure Spell/&HeroicInfusionDescription=You endow yourself with endurance and martial prowess fueled by magic. Until the spell ends, you can't cast spells, and you gain the following benefits:\n• You gain 50 temporary hit points. If any of these remain when the spell ends, they are lost.\n• You have advantage on attack rolls that you make with simple and martial weapons.\n• When you hit a target with a weapon attack, that target takes an extra 2d12 force damage.\n• You have the Fighter class armor, weapons, and saving throws proficiencies.\n• You can attack twice, instead of once, when you take the Attack action on your turn.\nImmediately after the spell ends, you must succeed on a DC 15 Constitution saving throw or suffer one level of exhaustion. Spell/&HeroicInfusionTitle=Tenser's Transformation Spell/&MysticalCloakDescription=Uttering an incantation, you draw on the magic of the Lower Planes or Upper Planes (your choice) to transform yourself. diff --git a/SolastaUnfinishedBusiness/Translations/es/Spells/Spells06-es.txt b/SolastaUnfinishedBusiness/Translations/es/Spells/Spells06-es.txt index 6e481303f2..ec88d808aa 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Spells/Spells06-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Spells/Spells06-es.txt @@ -10,6 +10,8 @@ Spell/&FizbanPlatinumShieldDescription=Creas un campo de luz plateada que rodea Spell/&FizbanPlatinumShieldTitle=Escudo de platino de Fizban Spell/&FlashFreezeDescription=Intentas encerrar a una criatura que puedes ver dentro del alcance en una prisión de hielo sólido. El objetivo debe realizar una tirada de salvación de Destreza. Si falla la tirada, el objetivo sufre 10d6 puntos de daño por frío y queda inmovilizado en capas de hielo grueso. Si tiene éxito, el objetivo sufre la mitad de daño y no queda inmovilizado. El conjuro solo se puede usar en criaturas de tamaño grande. Para escapar, el objetivo inmovilizado puede realizar una prueba de Fuerza como acción contra la CD de tu tirada de salvación de conjuros. Si tiene éxito, el objetivo escapa y ya no queda inmovilizado. Cuando lanzas este conjuro usando un espacio de conjuro de nivel 7 o superior, el daño por frío aumenta en 2d6 por cada nivel de espacio por encima del 6. Spell/&FlashFreezeTitle=Congelación instantánea +Spell/&GravityFissureDescription=Manifiestas un barranco de energía gravitatoria en una línea que se origina desde ti y que tiene 100 pies de largo y 5 pies de ancho. Cada criatura en esa línea debe realizar una tirada de salvación de Constitución, recibiendo 8d8 puntos de daño por fuerza si falla la tirada, o la mitad de daño si tiene éxito. Cada criatura que se encuentre a 10 pies de la línea pero que no esté dentro de ella debe superar una tirada de salvación de Constitución o recibirá 8d8 puntos de daño por fuerza y ​​será atraída hacia la línea hasta que la criatura esté en su área. Cuando lanzas este conjuro usando un espacio de nivel 7 o superior, el daño aumenta en 1d8 por cada nivel de espacio por encima del 6. +Spell/&GravityFissureTitle=Fisura de gravedad Spell/&HeroicInfusionDescription=Te dotas de resistencia y destreza marcial alimentadas por la magia. Hasta que el conjuro termine, no puedes lanzar conjuros, y obtienes los siguientes beneficios:\n• Obtienes 50 puntos de golpe temporales. Si alguno de estos permanece cuando el conjuro termina, se pierde.\n• Tienes ventaja en las tiradas de ataque que hagas con armas simples y marciales.\n• Cuando golpeas a un objetivo con un ataque de arma, ese objetivo sufre 2d12 puntos de daño de fuerza adicionales.\n• Tienes las competencias de armadura, armas y tiradas de salvación de la clase Guerrero.\n• Puedes atacar dos veces, en lugar de una, cuando realizas la acción de Ataque en tu turno.\nInmediatamente después de que el conjuro termine, debes tener éxito en una tirada de salvación de Constitución CD 15 o sufrir un nivel de agotamiento. Spell/&HeroicInfusionTitle=La transformación de Tenser Spell/&MysticalCloakDescription=Al pronunciar un encantamiento, recurres a la magia de los Planos Inferiores o de los Planos Superiores (a tu elección) para transformarte. diff --git a/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells06-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells06-fr.txt index f183a96102..aa898f6cbb 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells06-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells06-fr.txt @@ -10,6 +10,8 @@ Spell/&FizbanPlatinumShieldDescription=Vous créez un champ de lumière argenté Spell/&FizbanPlatinumShieldTitle=Bouclier de platine de Fizban Spell/&FlashFreezeDescription=Vous tentez d'enfermer une créature visible à portée dans une prison de glace solide. La cible doit réussir un jet de sauvegarde de Dextérité. En cas d'échec, la cible subit 10d6 dégâts de froid et se retrouve emprisonnée dans d'épaisses couches de glace. En cas de réussite, la cible subit la moitié des dégâts et n'est plus emprisonnée. Le sort ne peut être utilisé que sur des créatures de grande taille. Pour s'échapper, la cible emprisonnée peut effectuer un test de Force en tant qu'action contre le DD de votre sauvegarde contre les sorts. En cas de réussite, la cible s'échappe et n'est plus emprisonnée. Lorsque vous lancez ce sort en utilisant un emplacement de sort de niveau 7 ou supérieur, les dégâts de froid augmentent de 2d6 pour chaque niveau d'emplacement au-dessus du niveau 6. Spell/&FlashFreezeTitle=Gel instantané +Spell/&GravityFissureDescription=Vous manifestez un ravin d'énergie gravitationnelle dans une ligne partant de vous et mesurant 30 mètres de long et 1,5 mètre de large. Chaque créature dans cette ligne doit réussir un jet de sauvegarde de Constitution, subissant 8d8 dégâts de force en cas d'échec, ou la moitié de ces dégâts en cas de réussite. Chaque créature à 3 mètres de la ligne mais qui n'en fait pas partie doit réussir un jet de sauvegarde de Constitution ou subir 8d8 dégâts de force et être attirée vers la ligne jusqu'à ce qu'elle soit dans sa zone. Lorsque vous lancez ce sort en utilisant un emplacement de niveau 7 ou supérieur, les dégâts augmentent de 1d8 pour chaque niveau d'emplacement au-dessus du niveau 6. +Spell/&GravityFissureTitle=Fissure gravitationnelle Spell/&HeroicInfusionDescription=Vous vous dote d'endurance et de prouesses martiales alimentées par la magie. Jusqu'à la fin du sort, vous ne pouvez pas lancer de sorts et vous obtenez les avantages suivants :\n• Vous gagnez 50 points de vie temporaires. S'il en reste à la fin du sort, ils sont perdus.\n• Vous avez l'avantage sur les jets d'attaque que vous effectuez avec des armes simples et martiales.\n• Lorsque vous touchez une cible avec une attaque d'arme, cette cible subit 2d12 dégâts de force supplémentaires.\n• Vous avez les compétences de classe Guerrier en armure, en armes et en jets de sauvegarde.\n• Vous pouvez attaquer deux fois, au lieu d'une, lorsque vous effectuez l'action Attaquer à votre tour.\nImmédiatement après la fin du sort, vous devez réussir un jet de sauvegarde de Constitution DD 15 ou subir un niveau d'épuisement. Spell/&HeroicInfusionTitle=Transformation de Tenser Spell/&MysticalCloakDescription=En prononçant une incantation, vous faites appel à la magie des plans inférieurs ou des plans supérieurs (à votre choix) pour vous transformer. diff --git a/SolastaUnfinishedBusiness/Translations/it/Spells/Spells06-it.txt b/SolastaUnfinishedBusiness/Translations/it/Spells/Spells06-it.txt index bfbb9e88dc..5986e018ed 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Spells/Spells06-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Spells/Spells06-it.txt @@ -10,6 +10,8 @@ Spell/&FizbanPlatinumShieldDescription=Crei un campo di luce argentata che circo Spell/&FizbanPlatinumShieldTitle=Scudo di platino di Fizban Spell/&FlashFreezeDescription=Tenti di rinchiudere una creatura che puoi vedere entro il raggio d'azione in una prigione di ghiaccio solido. Il bersaglio deve effettuare un tiro salvezza su Destrezza. Se fallisce il tiro salvezza, il bersaglio subisce 10d6 danni da freddo e rimane trattenuto in strati di ghiaccio spesso. Se supera il tiro salvezza, il bersaglio subisce la metà dei danni e non è trattenuto. L'incantesimo può essere utilizzato solo su creature fino a grandi dimensioni. Per evadere, il bersaglio trattenuto può effettuare una prova di Forza come azione contro la CD del tiro salvezza dell'incantesimo. In caso di successo, il bersaglio fugge e non è più trattenuto. Quando lanci questo incantesimo usando uno slot incantesimo di 7° livello o superiore, i danni da freddo aumentano di 2d6 per ogni livello di slot superiore al 6°. Spell/&FlashFreezeTitle=Congelamento rapido +Spell/&GravityFissureDescription=Manifesti un burrone di energia gravitazionale in una linea che parte da te, lunga 100 piedi e larga 5 piedi. Ogni creatura in quella linea deve effettuare un tiro salvezza su Costituzione, subendo 8d8 danni da forza se fallisce il tiro salvezza, o la metà dei danni se lo supera. Ogni creatura entro 10 piedi dalla linea ma non al suo interno deve superare un tiro salvezza su Costituzione o subire 8d8 danni da forza ed essere tirata verso la linea finché non si trova nella sua area. Quando lanci questo incantesimo usando uno slot di 7° livello o superiore, il danno aumenta di 1d8 per ogni livello di slot superiore al 6°. +Spell/&GravityFissureTitle=Fessura di gravità Spell/&HeroicInfusionDescription=Ti doti di resistenza e abilità marziale alimentate dalla magia. Finché l'incantesimo non finisce, non puoi lanciare incantesimi e ottieni i seguenti benefici:\n• Ottieni 50 punti ferita temporanei. Se ne rimangono quando l'incantesimo finisce, vengono persi.\n• Hai vantaggio sui tiri per colpire che effettui con armi semplici e da guerra.\n• Quando colpisci un bersaglio con un attacco con arma, quel bersaglio subisce 2d12 danni da forza extra.\n• Hai le competenze di classe Guerriero in armature, armi e tiri salvezza.\n• Puoi attaccare due volte, invece di una, quando esegui l'azione Attacco nel tuo turno.\nImmediatamente dopo la fine dell'incantesimo, devi superare un tiro salvezza su Costituzione CD 15 o subire un livello di esaurimento. Spell/&HeroicInfusionTitle=La trasformazione di Tenser Spell/&MysticalCloakDescription=Pronunciando un incantesimo, attingi alla magia dei Piani Inferiori o Superiori (a tua scelta) per trasformarti. diff --git a/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells06-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells06-ja.txt index d27450aa62..3eedb8f7e4 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells06-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells06-ja.txt @@ -10,6 +10,8 @@ Spell/&FizbanPlatinumShieldDescription=範囲内の選択したクリーチャ Spell/&FizbanPlatinumShieldTitle=フィズバンのプラチナシールド Spell/&FlashFreezeDescription=あなたは範囲内に見える生き物を固い氷の牢獄に閉じ込めようとします。ターゲットは器用さセーヴィングスローを行わなければなりません。セーブに失敗すると、ターゲットは 10d6 の冷気ダメージを受け、厚い氷の層に拘束されます。セーブに成功すると、ターゲットは半分のダメージを受け、拘束されなくなります。この呪文は大きいサイズまでのクリーチャーにのみ使用できます。打開するために、拘束されたターゲットはあなたのスペルセーブ難易度に対するアクションとして筋力チェックを行うことができます。成功するとターゲットは逃走し、拘束されなくなります。 7 レベル以上の呪文スロットを使用してこの呪文を唱えると、冷気ダメージは 6 レベル以上のスロット レベルごとに 2d6 増加します。 Spell/&FlashFreezeTitle=フラッシュフリーズ +Spell/&GravityFissureDescription=君は、君自身から始まる長さ 100 フィート、幅 5 フィートの線に重力エネルギーの峡谷を顕現させる。その線上の各クリーチャーは耐久力セーヴィング スローを行わなければならず、失敗すると 8d8 の力場ダメージを受け、成功すると半分のダメージを受ける。線から 10 フィート以内にいるが線上にいない各クリーチャーは、耐久力セーヴィング スローに成功するか、8d8 の力場ダメージを受け、クリーチャーがその領域に入るまで線に向かって引き寄せられる。この呪文を 7 レベル以上のスロットを使用して発動すると、6 レベルを超えるスロット レベルごとにダメージが 1d8 増加する。 +Spell/&GravityFissureTitle=重力亀裂 Spell/&HeroicInfusionDescription=あなたは魔法によって強化された持久力と武勇を自分に与えます。呪文が終了するまで、呪文を唱えることはできませんが、次の利点が得られます:\n• 一時的に 50 ヒット ポイントを獲得します。呪文が終了するときにこれらのいずれかが残っている場合、それらは失われます。\n• 単純な武器と格闘武器を使って行う攻撃ロールでは有利です。\n• 武器攻撃でターゲットを攻撃すると、そのターゲットは次のダメージを受けます。追加の 2d12 フォース ダメージ。\n• ファイター クラスのアーマー、武器、セーヴィング スローの熟練度を持っています。\n• 自分のターンに攻撃アクションを行うと、1 回ではなく 2 回攻撃できます。\n呪文が終了した直後に、難易度 15 の耐久力セーヴィング スローに成功するか、1 レベルの疲労状態に陥る必要があります。 Spell/&HeroicInfusionTitle=テンサーの変身 Spell/&MysticalCloakDescription=呪文を唱えながら、下層界または上層界(選択)の魔法を利用して自分自身を変身させます。 diff --git a/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells06-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells06-ko.txt index a4153151f2..92a92b4899 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells06-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells06-ko.txt @@ -10,6 +10,8 @@ Spell/&FizbanPlatinumShieldDescription=당신은 범위 내에서 당신이 선 Spell/&FizbanPlatinumShieldTitle=피즈반의 백금 방패 Spell/&FlashFreezeDescription=당신은 범위 내에서 볼 수 있는 생물을 단단한 얼음 감옥에 가두려고 합니다. 대상은 민첩 내성 굴림을 해야 합니다. 저장에 실패하면 대상은 10d6의 냉기 피해를 입고 두꺼운 얼음 층에 갇히게 됩니다. 내성에 성공하면 대상은 절반의 피해를 입고 구속되지 않습니다. 이 주문은 최대 크기의 생물에게만 사용할 수 있습니다. 탈출하기 위해, 제한된 목표는 당신의 주문 내성 DC에 대한 행동으로 힘 체크를 할 수 있습니다. 성공하면 대상은 탈출하고 더 이상 구속되지 않습니다. 7레벨 이상의 주문 슬롯을 사용하여 이 주문을 시전하면 6레벨 이상의 슬롯 레벨마다 냉기 피해가 2d6씩 증가합니다. Spell/&FlashFreezeTitle=플래시 프리즈 +Spell/&GravityFissureDescription=당신은 길이 100피트, 너비 5피트의 중력 에너지 협곡을 당신에게서 시작하는 선으로 나타냅니다. 그 선에 있는 각 생명체는 체력 구원 굴림을 해야 하며, 실패하면 8d8의 힘 피해를 입거나, 성공하면 절반의 피해를 입습니다. 선에서 10피트 이내에 있지만 선 안에 있지 않은 각 생명체는 체력 구원 굴림에 성공해야 하며, 실패하면 8d8의 힘 피해를 입고 생명체가 그 영역에 들어올 때까지 선으로 끌려갑니다. 7레벨 이상의 슬롯을 사용하여 이 주문을 시전하면, 6레벨 이상의 슬롯 레벨마다 피해가 1d8씩 증가합니다. +Spell/&GravityFissureTitle=중력 균열 Spell/&HeroicInfusionDescription=당신은 마법에 힘입어 지구력과 무술의 기량을 자신에게 부여합니다. 주문이 끝날 때까지 주문을 시전할 수 없으며 다음과 같은 이점을 얻습니다.\n• 임시 체력 50점을 얻습니다. 주문이 끝날 때 이들 중 하나라도 남아 있으면 잃게 됩니다.\n• 단순 무기와 군용 무기로 하는 공격 굴림에 이점이 있습니다.\n• 무기 공격으로 대상을 명중하면 해당 대상은 다음과 같은 공격을 받습니다. 추가 2d12 강제 피해.\n• 파이터 클래스 방어구, 무기 및 내성 굴림 능력이 있습니다.\n• 자신의 차례에 공격 행동을 취할 때 한 번이 아닌 두 번 공격할 수 있습니다.\n 주문이 끝난 직후, 당신은 DC 15 헌법 내성 굴림에 성공해야 하며, 그렇지 않으면 한 단계의 탈진을 겪어야 합니다. Spell/&HeroicInfusionTitle=텐서의 변환 Spell/&MysticalCloakDescription=주문을 외우면 하위 차원 또는 상위 차원(선택)의 마법을 끌어와 자신을 변화시킬 수 있습니다. diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells06-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells06-pt-BR.txt index 5f4f9fbe89..2b68c768b3 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells06-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells06-pt-BR.txt @@ -10,6 +10,8 @@ Spell/&FizbanPlatinumShieldDescription=Você cria um campo de luz prateada que c Spell/&FizbanPlatinumShieldTitle=Escudo de Platina de Fizban Spell/&FlashFreezeDescription=Você tenta prender uma criatura que você pode ver dentro do alcance em uma prisão de gelo sólido. O alvo deve fazer um teste de resistência de Destreza. Em uma falha, o alvo sofre 10d6 de dano de frio e fica contido em camadas de gelo espesso. Em uma resistência bem-sucedida, o alvo sofre metade do dano e não fica contido. A magia só pode ser usada em criaturas de tamanho até grande. Para escapar, o alvo contido pode fazer um teste de Força como uma ação contra sua CD de resistência à magia. Em caso de sucesso, o alvo escapa e não fica mais contido. Quando você conjura esta magia usando um espaço de magia de 7º nível ou superior, o dano de frio aumenta em 2d6 para cada nível de espaço acima do 6º. Spell/&FlashFreezeTitle=Congelamento instantâneo +Spell/&GravityFissureDescription=Você manifesta uma ravina de energia gravitacional em uma linha originada de você que tem 100 pés de comprimento e 5 pés de largura. Cada criatura naquela linha deve fazer um teste de resistência de Constituição, sofrendo 8d8 de dano de força em um teste falho, ou metade do dano em um teste bem-sucedido. Cada criatura a 10 pés da linha, mas não dentro dela, deve ter sucesso em um teste de resistência de Constituição ou sofrer 8d8 de dano de força e ser puxada em direção à linha até que a criatura esteja em sua área. Quando você conjura esta magia usando um slot de 7º nível ou superior, o dano aumenta em 1d8 para cada nível de slot acima de 6º. +Spell/&GravityFissureTitle=Fissura Gravitacional Spell/&HeroicInfusionDescription=Você se dota de resistência e destreza marcial alimentadas por magia. Até que a magia termine, você não pode conjurar magias e ganha os seguintes benefícios:\n• Você ganha 50 pontos de vida temporários. Se algum deles permanecer quando a magia terminar, eles serão perdidos.\n• Você tem vantagem em jogadas de ataque que fizer com armas simples e marciais.\n• Quando você atinge um alvo com um ataque de arma, esse alvo recebe 2d12 de dano de força extra.\n• Você tem as proficiências de armadura, armas e testes de resistência da classe Guerreiro.\n• Você pode atacar duas vezes, em vez de uma, quando realiza a ação Atacar no seu turno.\nImediatamente após o fim da magia, você deve ser bem-sucedido em um teste de resistência de Constituição CD 15 ou sofrer um nível de exaustão. Spell/&HeroicInfusionTitle=Transformação de Tenser Spell/&MysticalCloakDescription=Ao proferir um encantamento, você recorre à magia dos Planos Inferiores ou Superiores (à sua escolha) para se transformar. diff --git a/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells06-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells06-ru.txt index 6799adc624..8b32ab9d44 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells06-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells06-ru.txt @@ -10,6 +10,8 @@ Spell/&FizbanPlatinumShieldDescription=Вы создаёте поле сереб Spell/&FizbanPlatinumShieldTitle=Платиновый щит Физбана Spell/&FlashFreezeDescription=Вы пытаетесь заключить существо, которое видите в пределах дистанции, в темницу из твёрдого льда. Цель должна совершить спасбросок Ловкости. При провале цель получает 10d6 урона холодом и становится опутанной, покрываясь слоями толстого льда. При успешном спасброске цель получает в два раза меньше урона и не становится опутанной. Заклинание можно применять только к существам вплоть до большого размера. Чтобы освободиться, опутанная цель может действием совершить проверку Силы против Сл спасброска заклинания. При успехе цель освобождается и больше не является опутанной. Когда вы накладываете это заклинание, используя ячейку заклинания 7-го уровня или выше, урон от холода увеличивается на 2d6 за каждый уровень ячейки выше 6-го. Spell/&FlashFreezeTitle=Мгновенная заморозка +Spell/&GravityFissureDescription=Вы создаете овраг гравитационной энергии в исходящей от вас линии длиной 100 футов и шириной 5 футов. Каждое существо в этой линии должно сделать спасбросок Телосложения, получив 8d8 урона силой при провале или половину урона при успехе. Каждое существо в пределах 10 футов от линии, но не на ней, должно преуспеть в спасброске Телосложения или получить 8d8 урона силой и быть притянутым к линии, пока существо не окажется в ее области. Когда вы произносите это заклинание, используя слот 7-го уровня или выше, урон увеличивается на 1d8 за каждый уровень слота выше 6-го. +Spell/&GravityFissureTitle=Гравитационная трещина Spell/&HeroicInfusionDescription=Вы наделяете себя выносливостью и воинской доблестью, подпитываемыми магией. Пока заклинание не закончится, вы не можете накладывать заклинания, но получаете следующие преимущества:\n• Вы получаете 50 временных хитов. Если какое-либо их количество остаётся, когда заклинание заканчивается, они теряются.\n• Вы совершаете с преимуществом все броски атаки, совершаемые простым или воинским оружием.\n• Когда вы попадаете по цели атакой оружием, она получает дополнительно 2d12 урона силовым полем.\n• Вы получаете владение всеми доспехами, оружием и спасбросками, присущими классу Воина.\n• Если вы в свой ход совершаете действие Атака, вы можете совершить две атаки вместо одной.\nСразу после того, как заклинание оканчивается, вы должны преуспеть в спасброске Телосложения Сл 15, иначе получите одну степень истощения. Spell/&HeroicInfusionTitle=Трансформация Тензера Spell/&MysticalCloakDescription=Накладывая заклинание, вы обращаетесь к магии Нижних или Верхних планов (по вашему выбору), чтобы преобразовать себя. diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells06-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells06-zh-CN.txt index 4138fb270c..d4b8f2cf9f 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells06-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells06-zh-CN.txt @@ -10,6 +10,8 @@ Spell/&FizbanPlatinumShieldDescription=你创造一道闪着银光的力场, Spell/&FizbanPlatinumShieldTitle=费资本铂金盾 Spell/&FlashFreezeDescription=你试图将一个你能在范围内看到的生物关进坚固的冰牢里。目标必须进行敏捷豁免检定。如果豁免失败,目标会受到 10d6 的冷冻伤害,并被束缚在厚厚的冰层中。成功豁免后,目标将受到一半伤害并且不受束缚。该法术只能对上限为大型体型的生物使用。为了逃脱,被束缚的目标可以一个动作进行一次力量检定,对抗你的法术豁免 DC。成功后,目标将逃脱并不再受到束缚。当你使用 7 环或更高环阶的法术位施放此法术时,每高于 6 环的法术位环阶,冷冻伤害就会增加 2d6。 Spell/&FlashFreezeTitle=急冻术 +Spell/&GravityFissureDescription=你以你为起点,在一条长 100 英尺、宽 5 英尺的直线上显现出引力能量峡谷。该直线上的每个生物都必须进行体质豁免检定,豁免失败则受到 8d8 力场伤害,豁免成功则伤害减半。该直线 10 英尺范围内但不在该直线上的每个生物都必须通过体质豁免检定,否则将受到 8d8 力场伤害并被拉向该直线,直到该生物进入其区域。当你使用 7 级或更高级别的槽位施放此法术时,每高于 6 级槽位,伤害增加 1d8。 +Spell/&GravityFissureTitle=重力裂缝 Spell/&HeroicInfusionDescription=你赋予自己以魔法为燃料的耐力与武艺。在法术结束之前,你无法施展法术,并且你会获得以下好处:\n• 你获得 50 点临时生命值。如果法术结束时有未消耗的部分,则全部消失。\n• 你在使用简单武器和军用武器进行的攻击检定中具有优势。\n• 当你使用武器攻击击中目标时,该目标将受到额外的 2d12 力场伤害。\n• 你获得战士的护甲、武器和豁免熟练项。\n• 当你在自己的回合中采取攻击动作时,你可以攻击两次,而不是一次。\n法术结束后,你必须立即通过 DC 15 的体质豁免检定,否则会承受一级力竭。 Spell/&HeroicInfusionTitle=谭森变形术 Spell/&MysticalCloakDescription=念出咒语,你可以利用下层位面或上层位面(你的选择)的魔法来改变自己。 From 66d2071a4cce65256f52d6820ca45c3e82d72743 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sat, 14 Sep 2024 10:52:20 -0700 Subject: [PATCH 175/212] fixed Counter Spell not rolling a charisma attribute check --- .../ChangelogHistory.txt | 1 + .../CharacterActionCastSpellPatcher.cs | 52 +++++++++---------- 2 files changed, 26 insertions(+), 27 deletions(-) diff --git a/SolastaUnfinishedBusiness/ChangelogHistory.txt b/SolastaUnfinishedBusiness/ChangelogHistory.txt index 3ee6c7cc58..d3c7b8bac8 100644 --- a/SolastaUnfinishedBusiness/ChangelogHistory.txt +++ b/SolastaUnfinishedBusiness/ChangelogHistory.txt @@ -11,6 +11,7 @@ - fixed Bardic Inspiration, Indomitable Resistances, and Legendary Resistances save logic - fixed Bend Luck, Flash of Genius, Inspiring Protection, Shield Master, and Weal/Woe reaction consumption - fixed Circle of the Cosmos woe ability checks reaction not triggering +- fixed Counter Spell not rolling a charisma attribute check - fixed Demonic Influence adding all location enemies to battle [VANILLA] - fixed Dwarven Fortitude, and Magical Guidance consuming a reaction - fixed Exploiter feat not checking for reactions from 2nd target onwards diff --git a/SolastaUnfinishedBusiness/Patches/CharacterActionCastSpellPatcher.cs b/SolastaUnfinishedBusiness/Patches/CharacterActionCastSpellPatcher.cs index 879ad00346..bb8181cbd1 100644 --- a/SolastaUnfinishedBusiness/Patches/CharacterActionCastSpellPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/CharacterActionCastSpellPatcher.cs @@ -158,34 +158,32 @@ public static bool Prefix(ref IEnumerator __result, CharacterActionCastSpell __i } private static IEnumerator Process( - CharacterActionCastSpell actionCastSpell, + CharacterActionCastSpell characterActionCastSpell, CharacterAction counterAction) { - if (actionCastSpell.ActionParams.TargetAction == null) + var targetAction = characterActionCastSpell.ActionParams.TargetAction; + + if (targetAction == null) { yield break; } - var actingCharacter = actionCastSpell.ActingCharacter; + var actingCharacter = characterActionCastSpell.ActingCharacter; var rulesetCharacter = actingCharacter.RulesetCharacter; - var actionParams = actionCastSpell.ActionParams.TargetAction.ActionParams; + var actionParams = characterActionCastSpell.ActionParams; + var targetActionParams = targetAction.ActionParams; + var counteredSpell = targetActionParams.RulesetEffect as RulesetEffectSpell; + var counteredSpellDefinition = counteredSpell!.SpellDefinition; + var slotLevel = counteredSpell.SlotLevel; var actionModifier = actionParams.ActionModifiers[0]; - foreach (var effectForm in actionParams.RulesetEffect.EffectDescription.EffectForms) + foreach (var counterForm in actionParams.RulesetEffect.EffectDescription.EffectForms + .Where(effectForm => effectForm.FormType == EffectForm.EffectFormType.Counter) + .Select(effectForm => effectForm.CounterForm)) { - if (effectForm.FormType != EffectForm.EffectFormType.Counter) - { - continue; - } - - var counterForm = effectForm.CounterForm; - var counteredSpell = actionParams.TargetAction.ActionParams.RulesetEffect as RulesetEffectSpell; - var counteredSpellDefinition = counteredSpell!.SpellDefinition; - var slotLevel = counteredSpell.SlotLevel; - - if (counterForm.AutomaticSpellLevel + actionCastSpell.addSpellLevel >= slotLevel) + if (counterForm.AutomaticSpellLevel + characterActionCastSpell.addSpellLevel >= slotLevel) { - actionCastSpell.ActionParams.TargetAction.Countered = true; + targetAction.Countered = true; } else if (counterForm.CheckBaseDC != 0) { @@ -229,7 +227,7 @@ private static IEnumerator Process( } var abilityCheckRoll = actingCharacter.RollAbilityCheck( - actionCastSpell.activeSpell.SpellRepertoire.SpellCastingAbility, + characterActionCastSpell.activeSpell.SpellRepertoire.SpellCastingAbility, proficiencyName, checkDC, AdvantageType.None, @@ -246,23 +244,23 @@ private static IEnumerator Process( AbilityCheckRollOutcome = outcome, AbilityCheckSuccessDelta = successDelta, AbilityCheckActionModifier = actionModifier, - Action = actionCastSpell + Action = characterActionCastSpell }; yield return TryAlterOutcomeAttributeCheck .HandleITryAlterOutcomeAttributeCheck(actingCharacter, abilityCheckData); - actionCastSpell.AbilityCheckRoll = abilityCheckData.AbilityCheckRoll; - actionCastSpell.AbilityCheckRollOutcome = abilityCheckData.AbilityCheckRollOutcome; - actionCastSpell.AbilityCheckSuccessDelta = abilityCheckData.AbilityCheckSuccessDelta; + characterActionCastSpell.AbilityCheckRoll = abilityCheckData.AbilityCheckRoll; + characterActionCastSpell.AbilityCheckRollOutcome = abilityCheckData.AbilityCheckRollOutcome; + characterActionCastSpell.AbilityCheckSuccessDelta = abilityCheckData.AbilityCheckSuccessDelta; if (counterAction.AbilityCheckRollOutcome == RollOutcome.Success) { - actionCastSpell.ActionParams.TargetAction.Countered = true; + targetAction.Countered = true; } } - if (!actionParams.TargetAction.Countered || + if (!targetAction.Countered || rulesetCharacter.SpellCounter == null) { continue; @@ -270,11 +268,11 @@ private static IEnumerator Process( var unknown = string.IsNullOrEmpty(counteredSpell.IdentifiedBy); - actionCastSpell.ActingCharacter.RulesetCharacter.SpellCounter( + characterActionCastSpell.ActingCharacter.RulesetCharacter.SpellCounter( rulesetCharacter, - actionCastSpell.ActionParams.TargetAction.ActingCharacter.RulesetCharacter, + targetAction.ActingCharacter.RulesetCharacter, counteredSpellDefinition, - actionCastSpell.ActionParams.TargetAction.Countered, + targetAction.Countered, unknown); } } From f55e4c2f67957a152225799bd5272754ac3b5d3f Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sat, 14 Sep 2024 13:49:31 -0700 Subject: [PATCH 176/212] auto format and clean up --- .../Models/SaveByLocationContext.cs | 20 +++++++++---------- .../GameLocationCharacterManagerPatcher.cs | 4 ++-- .../Patches/RulesetCharacterPatcher.cs | 5 ++--- 3 files changed, 14 insertions(+), 15 deletions(-) diff --git a/SolastaUnfinishedBusiness/Models/SaveByLocationContext.cs b/SolastaUnfinishedBusiness/Models/SaveByLocationContext.cs index 3559a30486..469a10bf8f 100644 --- a/SolastaUnfinishedBusiness/Models/SaveByLocationContext.cs +++ b/SolastaUnfinishedBusiness/Models/SaveByLocationContext.cs @@ -305,22 +305,14 @@ internal void SetCampaignLocation(LocationType type, string name) internal class SavePlace : IComparable { + public int Count; + public DateTime? Date; public string Name; public string Path; - public int Count; - public DateTime? Date; public LocationType Type; public bool Available => Count > 0 || Type is LocationType.Default; - public static SavePlace Default() - { - return new SavePlace - { - Path = DefaultSaveGameDirectory, Count = 0, Date = null, Type = LocationType.Default - }; - } - public int CompareTo(SavePlace other) { if (other == null) { return -1; } @@ -330,5 +322,13 @@ public int CompareTo(SavePlace other) ? type : String.Compare(Name, other.Name, StringComparison.Ordinal); } + + public static SavePlace Default() + { + return new SavePlace + { + Path = DefaultSaveGameDirectory, Count = 0, Date = null, Type = LocationType.Default + }; + } } } diff --git a/SolastaUnfinishedBusiness/Patches/GameLocationCharacterManagerPatcher.cs b/SolastaUnfinishedBusiness/Patches/GameLocationCharacterManagerPatcher.cs index 14cc27d2f5..7bb587cdd3 100644 --- a/SolastaUnfinishedBusiness/Patches/GameLocationCharacterManagerPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/GameLocationCharacterManagerPatcher.cs @@ -32,8 +32,8 @@ public static void Prefix(Side side, ref GameLocationBehaviourPackage behaviourP } } } - - //PATH: Fire monsters should emit light + + //PATCH: Fire monsters should emit light [HarmonyPatch(typeof(GameLocationCharacterManager), nameof(GameLocationCharacterManager.RevealCharacter))] [SuppressMessage("Minor Code Smell", "S101:Types should be named in PascalCase", Justification = "Patch")] [UsedImplicitly] diff --git a/SolastaUnfinishedBusiness/Patches/RulesetCharacterPatcher.cs b/SolastaUnfinishedBusiness/Patches/RulesetCharacterPatcher.cs index 20088bb365..c0d0c1a082 100644 --- a/SolastaUnfinishedBusiness/Patches/RulesetCharacterPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/RulesetCharacterPatcher.cs @@ -92,14 +92,13 @@ public static class RefreshSizeParams_Patch public static void Postfix(RulesetCharacter __instance) { //PATCH: fix medium creatures with height 60+ inches (elves, humans and orcs mostly) being considered 1 tile taller - CharacterSizeDefinition size = __instance.SizeDefinition; + var size = __instance.SizeDefinition; //skip for non-medium creatures, since I didn't find any non-medium creatures that have this problem if (size.Name != DatabaseHelper.CharacterSizeDefinitions.Medium.Name) { return; } __instance.SizeParams = new RulesetActor.SizeParameters { - minExtent = size.MinExtent, - maxExtent = size.MaxExtent + minExtent = size.MinExtent, maxExtent = size.MaxExtent }; } } From 4d5b5dfbc8046862c7a03554af523a9480976981 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sat, 14 Sep 2024 13:50:57 -0700 Subject: [PATCH 177/212] update collaterals --- .../UnfinishedBusinessBlueprints/Assets.txt | 5 +- .../ConditionCommandSpellApproach.json | 4 +- .../ConditionMagicStone.json | 155 ------ .../PowerGravityFissure.json | 388 +++++++++++++ .../{MagicStone.json => GravityFissure.json} | 112 ++-- Documentation/Spells.md | 520 +++++++++--------- .../ChangelogHistory.txt | 3 +- 7 files changed, 699 insertions(+), 488 deletions(-) delete mode 100644 Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionMagicStone.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerGravityFissure.json rename Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/{MagicStone.json => GravityFissure.json} (81%) diff --git a/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt b/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt index b10e9e0fd1..30d7f1d0ab 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt +++ b/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt @@ -927,7 +927,6 @@ ConditionLauncherAttackMarker ConditionDefinition ConditionDefinition 775d0214-8 ConditionLightlyObscured ConditionDefinition ConditionDefinition b4f6a93a-e532-5b1e-9482-4fc19a163c4a ConditionLightningArrow ConditionDefinition ConditionDefinition a07682ec-5181-5d93-94a2-0bcdfde53042 ConditionLightSensitivity ConditionDefinition ConditionDefinition 0c2dcf8b-8320-536c-b9f2-e685ec85b00e -ConditionMagicStone ConditionDefinition ConditionDefinition e26abe14-2554-598d-89d1-e8df7c362553 ConditionMalakhAngelicFlight ConditionDefinition ConditionDefinition 94211922-11c5-58ee-b5c5-42a3382f1b4a ConditionMalakhAngelicRadiance ConditionDefinition ConditionDefinition 5c99cf39-c491-5cda-847f-4117508bfc31 ConditionMalakhAngelicVisage ConditionDefinition ConditionDefinition d7521618-7bff-5b79-bc7a-e623cdf9e000 @@ -3374,6 +3373,7 @@ PowerGiftOfTheChromaticDragonDamageFire FeatureDefinitionPowerSharedPool Feature PowerGiftOfTheChromaticDragonDamageLightning FeatureDefinitionPowerSharedPool FeatureDefinition 612d9e92-f959-5b0a-9c88-320cd96e304c PowerGiftOfTheChromaticDragonDamagePoison FeatureDefinitionPowerSharedPool FeatureDefinition 37753c37-0501-5ec7-96df-26cd5c2f5bea PowerGiftOfTheChromaticDragonReactiveResistance FeatureDefinitionPower FeatureDefinition de9b1627-30f9-5f78-992a-58bbde7cbc90 +PowerGravityFissure FeatureDefinitionPower FeatureDefinition 684f8db8-663a-5332-bc46-1bbe219ffecb PowerGrayDwarfInvisibility FeatureDefinitionPower FeatureDefinition c4864fef-ecc0-5cf5-bb63-638addf6e90a PowerGrayDwarfStoneStrength FeatureDefinitionPower FeatureDefinition a3310dbb-532e-56a8-ba7d-cb855cabe127 PowerHandwrapsOfPulling FeatureDefinitionPower FeatureDefinition 81b318cf-8220-5876-bac8-996c44adcdb9 @@ -6198,6 +6198,7 @@ PowerGiftOfTheChromaticDragonDamageFire FeatureDefinitionPowerSharedPool Feature PowerGiftOfTheChromaticDragonDamageLightning FeatureDefinitionPowerSharedPool FeatureDefinitionPower 612d9e92-f959-5b0a-9c88-320cd96e304c PowerGiftOfTheChromaticDragonDamagePoison FeatureDefinitionPowerSharedPool FeatureDefinitionPower 37753c37-0501-5ec7-96df-26cd5c2f5bea PowerGiftOfTheChromaticDragonReactiveResistance FeatureDefinitionPower FeatureDefinitionPower de9b1627-30f9-5f78-992a-58bbde7cbc90 +PowerGravityFissure FeatureDefinitionPower FeatureDefinitionPower 684f8db8-663a-5332-bc46-1bbe219ffecb PowerGrayDwarfInvisibility FeatureDefinitionPower FeatureDefinitionPower c4864fef-ecc0-5cf5-bb63-638addf6e90a PowerGrayDwarfStoneStrength FeatureDefinitionPower FeatureDefinitionPower a3310dbb-532e-56a8-ba7d-cb855cabe127 PowerHandwrapsOfPulling FeatureDefinitionPower FeatureDefinitionPower 81b318cf-8220-5876-bac8-996c44adcdb9 @@ -12219,6 +12220,7 @@ Foresight SpellDefinition SpellDefinition 7e0b6dac-dd42-59de-8216-2a15d6b05693 ForestGuardian SpellDefinition SpellDefinition e84a5167-a3d0-5e96-b978-60039654e3bb GiftOfAlacrity SpellDefinition SpellDefinition cfc1affd-8762-5031-b552-4a48251d784c Glibness SpellDefinition SpellDefinition 6fff4ed6-1408-5410-9bb6-16392e1e6b15 +GravityFissure SpellDefinition SpellDefinition e230eac9-00f7-5e9f-86f8-51c2796721cd GravitySinkhole SpellDefinition SpellDefinition 42bea70d-ddc5-5295-8c18-c6b6b9c3abf6 HeroicInfusion SpellDefinition SpellDefinition cf5c6a2f-ae52-59d6-a88d-31bb5d00c17d HolyWeapon SpellDefinition SpellDefinition ed4a2ccf-c199-5f4c-bfc3-7bc8a584e4ce @@ -12235,7 +12237,6 @@ LevitateSpell SpellDefinition SpellDefinition 91d64839-2a19-5655-a8f5-e14cd8e803 LightningArrow SpellDefinition SpellDefinition 67f4d8f5-2b76-530c-969d-887c67ecbbc3 LightningLure SpellDefinition SpellDefinition a371e3b0-84af-5794-9d67-642b9677fc8d MaddeningDarkness SpellDefinition SpellDefinition 307ab880-6bb4-514a-bc43-cd1bbb6df87d -MagicStone SpellDefinition SpellDefinition e7b2ec32-cf9f-5044-9645-08d130d4350f MagnifyGravity SpellDefinition SpellDefinition 79f50c24-d249-5283-b784-10d3ffa9b444 MantleOfThorns SpellDefinition SpellDefinition e104287c-c35e-5355-b4ab-527a4a46860e MassHeal SpellDefinition SpellDefinition 0a9e59ba-4e57-52a5-ab05-27ae3c96e34f diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellApproach.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellApproach.json index de69aa40b3..8d4ac544bd 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellApproach.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCommandSpellApproach.json @@ -3,9 +3,7 @@ "inDungeonEditor": false, "parentCondition": null, "conditionType": "Detrimental", - "features": [ - "Definition:MovementAffinityConditionDashing:f04b97bac67dce94fae71500ae6412ad" - ], + "features": [], "allowMultipleInstances": false, "silentWhenAdded": false, "silentWhenRemoved": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionMagicStone.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionMagicStone.json deleted file mode 100644 index fb3aef7c7a..0000000000 --- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionMagicStone.json +++ /dev/null @@ -1,155 +0,0 @@ -{ - "$type": "ConditionDefinition, Assembly-CSharp", - "inDungeonEditor": false, - "parentCondition": null, - "conditionType": "Beneficial", - "features": [], - "allowMultipleInstances": false, - "silentWhenAdded": true, - "silentWhenRemoved": true, - "silentWhenRefreshed": false, - "terminateWhenRemoved": false, - "specialDuration": false, - "durationType": "Hour", - "durationParameterDie": "D4", - "durationParameter": 1, - "forceTurnOccurence": false, - "turnOccurence": "EndOfTurn", - "specialInterruptions": [], - "interruptionRequiresSavingThrow": false, - "interruptionSavingThrowComputationMethod": "SaveOverride", - "interruptionSavingThrowAbility": "", - "interruptionDamageThreshold": 0, - "keepConditionIfSavingThrowSucceeds": false, - "interruptionSavingThrowAffinity": "None", - "conditionTags": [], - "recurrentEffectForms": [], - "cancellingConditions": [], - "additionalDamageWhenHit": false, - "additionalDamageTypeDetermination": "Specific", - "additionalDamageType": "", - "additionalDamageQuantity": "AbilityBonus", - "additionalDamageDieType": "D1", - "additionalDamageDieNumber": 1, - "additionalConditionWhenHit": false, - "additionalCondition": null, - "additionalConditionDurationType": "Round", - "additionalConditionDurationParameter": 1, - "additionalConditionTurnOccurenceType": "StartOfTurn", - "conditionStartParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": null, - "m_SubObjectType": null - }, - "conditionParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": null, - "m_SubObjectType": null - }, - "conditionEndParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": null, - "m_SubObjectType": null - }, - "recurrentEffectParticleReference": null, - "characterShaderReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": null, - "m_SubObjectType": null - }, - "particlesBasedOnAncestryDamageType": false, - "ancestryType": "Sorcerer", - "acidParticleParameters": null, - "coldParticleParameters": null, - "fireParticleParameters": null, - "lightningParticleParameters": null, - "poisonParticleParameters": null, - "overrideCharacterShaderColors": false, - "firstCharacterShaderColor": { - "$type": "UnityEngine.Color, UnityEngine.CoreModule", - "r": 0.0, - "g": 0.0, - "b": 0.0, - "a": 0.0 - }, - "secondCharacterShaderColor": { - "$type": "UnityEngine.Color, UnityEngine.CoreModule", - "r": 0.0, - "g": 0.0, - "b": 0.0, - "a": 0.0 - }, - "timeToWaitBeforeApplyingShader": 0.5, - "timeToWaitBeforeRemovingShader": 0.5, - "possessive": false, - "amountOrigin": "None", - "baseAmount": 0, - "additiveAmount": false, - "sourceAbilityBonusMinValue": 1, - "subsequentOnRemoval": null, - "subsequentHasSavingThrow": false, - "subsequentSavingThrowAbilityScore": "Constitution", - "subsequentVariableForDC": "FrenzyExhaustionDC", - "subsequentDCIncrease": 5, - "effectFormsOnRemoved": [], - "forceBehavior": false, - "addBehavior": false, - "fearSource": false, - "battlePackage": null, - "explorationPackage": null, - "removedFromTheGame": false, - "permanentlyRemovedIfExtraPlanar": false, - "refundReceivedDamageWhenRemoved": false, - "followSourcePosition": false, - "disolveCharacterOnDeath": false, - "disolveParameters": { - "$type": "GraphicsCharacterDefinitions+DisolveParameters, Assembly-CSharp", - "color": { - "$type": "UnityEngine.Color, UnityEngine.CoreModule", - "r": 0.0, - "g": 0.0, - "b": 0.0, - "a": 0.0 - }, - "colorWidth": 0.0, - "noiseScale": 5.0, - "hueScale": 0.0, - "vertexOffset": 0.0, - "curve": { - "$type": "UnityEngine.AnimationCurve, UnityEngine.CoreModule" - }, - "startAfterDeathAnimation": false, - "duration": 0.0 - }, - "guiPresentation": { - "$type": "GuiPresentation, Assembly-CSharp", - "hidden": true, - "title": "Feature/&NoContentTitle", - "description": "Feature/&NoContentTitle", - "spriteReference": { - "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": null, - "m_SubObjectType": null - }, - "color": { - "$type": "UnityEngine.Color, UnityEngine.CoreModule", - "r": 1.0, - "g": 1.0, - "b": 1.0, - "a": 1.0 - }, - "symbolChar": "221E", - "sortOrder": 0, - "unusedInSolastaCOTM": false, - "usedInValleyDLC": false - }, - "contentCopyright": "UserContent", - "guid": "e26abe14-2554-598d-89d1-e8df7c362553", - "contentPack": 9999, - "name": "ConditionMagicStone" -} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerGravityFissure.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerGravityFissure.json new file mode 100644 index 0000000000..55f08f9c67 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerGravityFissure.json @@ -0,0 +1,388 @@ +{ + "$type": "FeatureDefinitionPower, Assembly-CSharp", + "effectDescription": { + "$type": "EffectDescription, Assembly-CSharp", + "rangeType": "Distance", + "rangeParameter": 6, + "halfDamageOnAMiss": false, + "hitAffinitiesByTargetTag": [], + "targetType": "IndividualsUnique", + "itemSelectionType": "None", + "targetParameter": 1, + "targetParameter2": 2, + "emissiveBorder": "None", + "emissiveParameter": 1, + "requiresTargetProximity": false, + "targetProximityDistance": 6, + "targetExcludeCaster": false, + "canBePlacedOnCharacter": true, + "affectOnlyGround": false, + "targetFilteringMethod": "CharacterOnly", + "targetFilteringTag": "No", + "requiresVisibilityForPosition": true, + "inviteOptionalAlly": false, + "slotTypes": [], + "recurrentEffect": "No", + "retargetAfterDeath": false, + "retargetActionType": "Bonus", + "poolFilterDiceNumber": 5, + "poolFilterDieType": "D8", + "trapRangeType": "Triggerer", + "targetConditionName": "", + "targetConditionAsset": null, + "targetSide": "All", + "durationType": "Instantaneous", + "durationParameter": 1, + "endOfEffect": "EndOfTurn", + "hasSavingThrow": true, + "disableSavingThrowOnAllies": false, + "savingThrowAbility": "Constitution", + "ignoreCover": true, + "grantedConditionOnSave": null, + "rollSaveOnlyIfRelevantForms": false, + "hasShoveRoll": false, + "createdByCharacter": true, + "difficultyClassComputation": "SpellCastingFeature", + "savingThrowDifficultyAbility": "Wisdom", + "fixedSavingThrowDifficultyClass": 10, + "savingThrowAffinitiesBySense": [], + "savingThrowAffinitiesByFamily": [], + "damageAffinitiesByFamily": [], + "advantageForEnemies": false, + "canBeDispersed": false, + "hasVelocity": false, + "velocityCellsPerRound": 2, + "velocityType": "AwayFromSourceOriginalPosition", + "restrictedCreatureFamilies": [], + "immuneCreatureFamilies": [], + "restrictedCharacterSizes": [], + "hasLimitedEffectPool": false, + "effectPoolAmount": 60, + "effectApplication": "All", + "effectFormFilters": [], + "effectForms": [ + { + "$type": "EffectForm, Assembly-CSharp", + "formType": "Damage", + "addBonusMode": "None", + "applyLevel": "No", + "levelType": "ClassLevel", + "levelMultiplier": 1, + "diceByLevelTable": [], + "createdByCharacter": true, + "createdByCondition": false, + "hasSavingThrow": true, + "savingThrowAffinity": "Negates", + "dcModifier": 0, + "canSaveToCancel": false, + "saveOccurence": "EndOfTurn", + "damageForm": { + "$type": "DamageForm, Assembly-CSharp", + "versatile": false, + "diceNumber": 8, + "dieType": "D8", + "overrideWithBardicInspirationDie": false, + "versatileDieType": "D1", + "bonusDamage": 0, + "damageType": "DamageForce", + "ancestryType": "Sorcerer", + "healFromInflictedDamage": "Never", + "hitPointsFloor": 0, + "forceKillOnZeroHp": false, + "specialDeathCondition": null, + "ignoreFlyingCharacters": false, + "ignoreCriticalDoubleDice": false + }, + "hasFilterId": false, + "filterId": 0 + }, + { + "$type": "EffectForm, Assembly-CSharp", + "formType": "Motion", + "addBonusMode": "None", + "applyLevel": "No", + "levelType": "ClassLevel", + "levelMultiplier": 1, + "diceByLevelTable": [], + "createdByCharacter": true, + "createdByCondition": false, + "hasSavingThrow": true, + "savingThrowAffinity": "Negates", + "dcModifier": 0, + "canSaveToCancel": false, + "saveOccurence": "EndOfTurn", + "motionForm": { + "$type": "MotionForm, Assembly-CSharp", + "type": "DragToOrigin", + "distance": 2, + "forceTurnTowardsSourceCharacterAfterPush": false, + "forceSourceCharacterTurnTowardsTargetAfterPush": false + }, + "hasFilterId": false, + "filterId": 0 + } + ], + "specialFormsDescription": "", + "effectAdvancement": { + "$type": "EffectAdvancement, Assembly-CSharp", + "effectIncrementMethod": "None", + "incrementMultiplier": 1, + "additionalTargetsPerIncrement": 0, + "additionalSubtargetsPerIncrement": 0, + "additionalDicePerIncrement": 0, + "additionalSpellLevelPerIncrement": 0, + "additionalSummonsPerIncrement": 0, + "additionalHPPerIncrement": 0, + "additionalTempHPPerIncrement": 0, + "additionalTargetCellsPerIncrement": 0, + "additionalItemBonus": 0, + "additionalWeaponDie": 0, + "alteredDuration": "None" + }, + "speedType": "Instant", + "speedParameter": 10.0, + "offsetImpactTimeBasedOnDistance": false, + "offsetImpactTimeBasedOnDistanceFactor": 0.1, + "offsetImpactTimePerTarget": 0.0, + "effectParticleParameters": { + "$type": "EffectParticleParameters, Assembly-CSharp", + "casterParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "7b70493edfd42734b975cf604767e952", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "casterSelfParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "casterQuickSpellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "targetParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "effectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "effectSubTargetParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "zoneParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "27a46eed70a684e42bf43db0fba210b9", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "beforeImpactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "impactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "7f06ef11e32162e45925324de6f9e1d5", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectImpactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceParticlePerIndex": "", + "activeEffectSurfaceParticlePerIndexCount": 0, + "emissiveBorderCellStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderCellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderCellEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "forceApplyZoneParticle": false, + "applyEmissionColorOnWeapons": false, + "emissionColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "emissionColorFadeInDuration": 0.0, + "emissionColorFadeOutDuration": 0.0 + }, + "effectAIParameters": { + "$type": "EffectAIParameters, Assembly-CSharp", + "aoeScoreMultiplier": 1.0, + "cooldownForCaster": 0, + "cooldownForBattle": 0, + "sortingScoreMultiplier": 1.0, + "dynamicCooldown": false + }, + "animationMagicEffect": "Animation0", + "lightCounterDispellsEffect": false, + "hideSavingThrowAnimation": false + }, + "delegatedToAction": false, + "surrogateToSpell": null, + "triggeredBySpecialMove": false, + "activationTime": "NoCost", + "autoActivationRequiredTargetSenseType": "None", + "autoActivationRequiredTargetCreatureTag": "", + "autoActivationPowerTag": "", + "triggeringPower": null, + "copyTargetingFromTriggeringPower": false, + "reactionContext": "None", + "damageTypes": [], + "reactionName": "", + "reactionActingCharacterParamIdx": 0, + "reactionAttackerParamIdx": -1, + "hasCastingFailure": false, + "castingSuccessComputation": "CasterLevel", + "canUseInDialog": false, + "disableIfConditionIsOwned": null, + "disableIfTargetConditionIsOwned": null, + "rechargeRate": "AtWill", + "costPerUse": 1, + "spellcastingFeature": null, + "usesDetermination": "Fixed", + "abilityScoreDetermination": "Explicit", + "usesAbilityScoreName": "Charisma", + "fixedUsesPerRecharge": 1, + "abilityScore": "Intelligence", + "attackHitComputation": "AbilityScore", + "fixedAttackHit": 0, + "abilityScoreBonusToAttack": false, + "proficiencyBonusToAttack": false, + "uniqueInstance": false, + "showCasting": false, + "shortTitleOverride": "", + "overriddenPower": null, + "includeBaseDescription": false, + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": true, + "title": "Feature/&NoContentTitle", + "description": "Feature/&NoContentTitle", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "684f8db8-663a-5332-bc46-1bbe219ffecb", + "contentPack": 9999, + "name": "PowerGravityFissure" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/MagicStone.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/GravityFissure.json similarity index 81% rename from Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/MagicStone.json rename to Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/GravityFissure.json index 2cee43df57..392229ed3d 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/MagicStone.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/GravityFissure.json @@ -4,23 +4,23 @@ "subspellsList": [], "compactSubspellsTooltip": false, "implemented": true, - "schoolOfMagic": "SchoolTransmutation", - "spellLevel": 0, + "schoolOfMagic": "SchoolEvocation", + "spellLevel": 6, "ritual": false, "uniqueInstance": false, - "castingTime": "BonusAction", + "castingTime": "Action", "reactionContext": "None", "ritualCastingTime": "Action", "requiresConcentration": false, "effectDescription": { "$type": "EffectDescription, Assembly-CSharp", - "rangeType": "Touch", + "rangeType": "Self", "rangeParameter": 0, "halfDamageOnAMiss": false, "hitAffinitiesByTargetTag": [], - "targetType": "IndividualsUnique", + "targetType": "Line", "itemSelectionType": "None", - "targetParameter": 1, + "targetParameter": 12, "targetParameter2": 2, "emissiveBorder": "None", "emissiveParameter": 1, @@ -42,21 +42,21 @@ "trapRangeType": "Triggerer", "targetConditionName": "", "targetConditionAsset": null, - "targetSide": "Ally", - "durationType": "Minute", + "targetSide": "All", + "durationType": "Instantaneous", "durationParameter": 1, "endOfEffect": "EndOfTurn", - "hasSavingThrow": false, + "hasSavingThrow": true, "disableSavingThrowOnAllies": false, - "savingThrowAbility": "Dexterity", - "ignoreCover": false, + "savingThrowAbility": "Constitution", + "ignoreCover": true, "grantedConditionOnSave": null, "rollSaveOnlyIfRelevantForms": false, "hasShoveRoll": false, "createdByCharacter": true, "difficultyClassComputation": "SpellCastingFeature", "savingThrowDifficultyAbility": "Wisdom", - "fixedSavingThrowDifficultyClass": 15, + "fixedSavingThrowDifficultyClass": 10, "savingThrowAffinitiesBySense": [], "savingThrowAffinitiesByFamily": [], "damageAffinitiesByFamily": [], @@ -75,7 +75,7 @@ "effectForms": [ { "$type": "EffectForm, Assembly-CSharp", - "formType": "Summon", + "formType": "Damage", "addBonusMode": "None", "applyLevel": "No", "levelType": "ClassLevel", @@ -83,49 +83,27 @@ "diceByLevelTable": [], "createdByCharacter": true, "createdByCondition": false, - "hasSavingThrow": false, - "savingThrowAffinity": "None", + "hasSavingThrow": true, + "savingThrowAffinity": "HalfDamage", "dcModifier": 0, "canSaveToCancel": false, "saveOccurence": "EndOfTurn", - "summonForm": { - "$type": "SummonForm, Assembly-CSharp", - "summonType": "InventoryItem", - "itemDefinition": "Definition:Dart:4fd5b12327964f74eae8cd62910dd518", - "trackItem": true, - "monsterDefinitionName": "", - "number": 3, - "conditionDefinition": null, - "persistOnConcentrationLoss": true, - "decisionPackage": null, - "effectProxyDefinitionName": null - }, - "hasFilterId": false, - "filterId": 0 - }, - { - "$type": "EffectForm, Assembly-CSharp", - "formType": "Condition", - "addBonusMode": "None", - "applyLevel": "No", - "levelType": "ClassLevel", - "levelMultiplier": 1, - "diceByLevelTable": [], - "createdByCharacter": true, - "createdByCondition": false, - "hasSavingThrow": false, - "savingThrowAffinity": "None", - "dcModifier": 0, - "canSaveToCancel": false, - "saveOccurence": "EndOfTurn", - "conditionForm": { - "$type": "ConditionForm, Assembly-CSharp", - "conditionDefinitionName": "ConditionMagicStone", - "conditionDefinition": "Definition:ConditionMagicStone:e26abe14-2554-598d-89d1-e8df7c362553", - "operation": "Add", - "conditionsList": [], - "applyToSelf": true, - "forceOnSelf": false + "damageForm": { + "$type": "DamageForm, Assembly-CSharp", + "versatile": false, + "diceNumber": 8, + "dieType": "D8", + "overrideWithBardicInspirationDie": false, + "versatileDieType": "D1", + "bonusDamage": 0, + "damageType": "DamageForce", + "ancestryType": "Sorcerer", + "healFromInflictedDamage": "Never", + "hitPointsFloor": 0, + "forceKillOnZeroHp": false, + "specialDeathCondition": null, + "ignoreFlyingCharacters": false, + "ignoreCriticalDoubleDice": false }, "hasFilterId": false, "filterId": 0 @@ -134,13 +112,13 @@ "specialFormsDescription": "", "effectAdvancement": { "$type": "EffectAdvancement, Assembly-CSharp", - "effectIncrementMethod": "CasterLevelTable", + "effectIncrementMethod": "PerAdditionalSlotLevel", "incrementMultiplier": 1, "additionalTargetsPerIncrement": 0, "additionalSubtargetsPerIncrement": 0, - "additionalDicePerIncrement": 0, + "additionalDicePerIncrement": 1, "additionalSpellLevelPerIncrement": 0, - "additionalSummonsPerIncrement": 1, + "additionalSummonsPerIncrement": 0, "additionalHPPerIncrement": 0, "additionalTempHPPerIncrement": 0, "additionalTargetCellsPerIncrement": 0, @@ -157,7 +135,7 @@ "$type": "EffectParticleParameters, Assembly-CSharp", "casterParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "2a5fb39a57ad3754ebaaaccd9e92e9ce", + "m_AssetGUID": "d26797bf421dbc2448872162f23d8fd3", "m_SubObjectName": "", "m_SubObjectType": "" }, @@ -181,7 +159,7 @@ }, "effectParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "05c5c0f49bcabdf449d3dc9ba3ae10cb", + "m_AssetGUID": "", "m_SubObjectName": "", "m_SubObjectType": "" }, @@ -193,7 +171,7 @@ }, "zoneParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", + "m_AssetGUID": "b6820f3b2273d454c97a4c29dd5e50dd", "m_SubObjectName": "", "m_SubObjectType": "" }, @@ -205,7 +183,7 @@ }, "impactParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "c50fd7065bb34304ca1f1a3a02dcd532", + "m_AssetGUID": "3e25fca5d3585174f9b7e20aca6ef3d9", "m_SubObjectName": "", "m_SubObjectType": "" }, @@ -339,21 +317,21 @@ "concentrationAction": "None", "verboseComponent": true, "somaticComponent": true, - "materialComponentType": "None", + "materialComponentType": "Mundane", "specificMaterialComponentTag": "Diamond", "specificMaterialComponentCostGp": 100, "specificMaterialComponentConsumed": true, "terminateOnItemUnequip": false, "displayConditionDuration": false, - "vocalSpellSemeType": "Buff", + "vocalSpellSemeType": "Attack", "guiPresentation": { "$type": "GuiPresentation, Assembly-CSharp", "hidden": false, - "title": "Spell/&MagicStoneTitle", - "description": "Spell/&MagicStoneDescription", + "title": "Spell/&GravityFissureTitle", + "description": "Spell/&GravityFissureDescription", "spriteReference": { "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", - "m_AssetGUID": "5183a34e-8e8b-59ba-9a3f-3657b0a591c2", + "m_AssetGUID": "543799d2-0a37-5662-8cb5-9ac355c09595", "m_SubObjectName": null, "m_SubObjectType": null }, @@ -370,7 +348,7 @@ "usedInValleyDLC": false }, "contentCopyright": "UserContent", - "guid": "e7b2ec32-cf9f-5044-9645-08d130d4350f", + "guid": "e230eac9-00f7-5e9f-86f8-51c2796721cd", "contentPack": 9999, - "name": "MagicStone" + "name": "GravityFissure" } \ No newline at end of file diff --git a/Documentation/Spells.md b/Documentation/Spells.md index ac9dcc5ea0..d45b382aae 100644 --- a/Documentation/Spells.md +++ b/Documentation/Spells.md @@ -106,223 +106,217 @@ An object you can touch emits a powerful light for a limited time. You create a lash of lightning energy that strikes at one creature of your choice that you can see within 15 ft of you. The target must succeed on a Strength saving throw or be pulled up to 10 ft in a straight line toward you and then take 1d8 lightning damage. The spell's damage increases by an additional die at 5th, 11th and 17th level. -# 19. - *Magic Stone* © (V,S) level 0 Transmutation [UB] - -**[Artificer, Druid, Warlock]** - -You touch one to three pebbles and imbue them with magic. You or someone else can make a ranged spell attack with one of the pebbles by throwing it with a range of 60 feet. If someone else attacks with the pebble, that attacker adds your spellcasting ability modifier, not the attacker's, to the attack roll. On a hit, the target takes bludgeoning damage equal to 1d6 + your spellcasting ability modifier. Hit or miss, the spell then ends on the stone. - -# 20. - *Mind Sliver* © (V) level 0 Enchantment [UB] +# 19. - *Mind Sliver* © (V) level 0 Enchantment [UB] **[Sorcerer, Warlock, Wizard]** You drive a disorienting spike of psychic energy into the mind of one creature you can see within range. The target must succeed on an Intelligence saving throw or take 1d6 psychic damage and subtract 1d4 from the next saving throw it makes before the end of your next turn. -# 21. - Minor Lifesteal (V,S) level 0 Necromancy [UB] +# 20. - Minor Lifesteal (V,S) level 0 Necromancy [UB] **[Bard, Sorcerer, Warlock, Wizard]** You drain vital energy from a nearby enemy creature. Make a melee spell attack against a creature within 5 ft of you. On a hit, the creature takes 1d6 necrotic damage, and you heal for half the damage dealt (rounded down). This spell has no effect on undead and constructs. The spell's damage increases by an additional die at 5th, 11th and 17th level. -# 22. - Poison Spray (V,S) level 0 Conjuration [SOL] +# 21. - Poison Spray (V,S) level 0 Conjuration [SOL] **[Artificer, Druid, Sorcerer, Warlock, Wizard]** Fire a poison spray at an enemy you can see, within range. -# 23. - *Primal Savagery* © (S) level 0 Transmutation [UB] +# 22. - *Primal Savagery* © (S) level 0 Transmutation [UB] **[Druid]** You channel primal magic to cause your teeth or fingernails to sharpen, ready to deliver a corrosive attack. Make a melee spell attack against one creature within 5 ft of you. On a hit, the target takes 1d10 acid damage. The spell's damage increases by an additional die at 5th, 11th and 17th level. -# 24. - Produce Flame (V,S) level 0 Conjuration [SOL] +# 23. - Produce Flame (V,S) level 0 Conjuration [SOL] **[Druid]** Conjures a flickering flame in your hand, which generates light or can be hurled to inflict fire damage. -# 25. - Ray of Frost (V,S) level 0 Evocation [SOL] +# 24. - Ray of Frost (V,S) level 0 Evocation [SOL] **[Artificer, Sorcerer, Wizard]** Launch a freezing ray at an enemy to damage and slow them. -# 26. - Resistance (V,S) level 0 Abjuration [Concentration] [SOL] +# 25. - Resistance (V,S) level 0 Abjuration [Concentration] [SOL] **[Artificer, Cleric, Druid]** Grant an ally a one-time bonus to saving throws. -# 27. - Sacred Flame (V,S) level 0 Evocation [SOL] +# 26. - Sacred Flame (V,S) level 0 Evocation [SOL] **[Cleric]** Strike an enemy with radiant damage. -# 28. - *Sapping Sting* © (V,S) level 0 Necromancy [UB] +# 27. - *Sapping Sting* © (V,S) level 0 Necromancy [UB] **[Wizard]** You sap the vitality of one creature you can see in range. The target must succeed on a Constitution saving throw or take 1d4 necrotic damage and fall prone. -# 29. - Shadow Armor (V,S) level 0 Abjuration [SOL] +# 28. - Shadow Armor (V,S) level 0 Abjuration [SOL] **[Bard, Sorcerer, Warlock, Wizard]** Grants 3 temporary hit points for one minute. -# 30. - Shadow Dagger (V,S) level 0 Illusion [SOL] +# 29. - Shadow Dagger (V,S) level 0 Illusion [SOL] **[Bard, Sorcerer, Warlock, Wizard]** Launches an illusionary dagger that causes psychic damage. -# 31. - Shillelagh (V,S) level 0 Transmutation [SOL] +# 30. - Shillelagh (V,S) level 0 Transmutation [SOL] **[Druid]** Conjures a magical club whose attacks are magical and use your spellcasting ability instead of strength. -# 32. - Shine (V,S) level 0 Conjuration [SOL] +# 31. - Shine (V,S) level 0 Conjuration [SOL] **[Cleric, Sorcerer, Wizard]** An enemy you can see becomes luminous for a while. -# 33. - Shocking Grasp (V,S) level 0 Evocation [SOL] +# 32. - Shocking Grasp (V,S) level 0 Evocation [SOL] **[Artificer, Sorcerer, Wizard]** Damage and daze an enemy on a successful touch. -# 34. - Spare the Dying (S) level 0 Necromancy [SOL] +# 33. - Spare the Dying (S) level 0 Necromancy [SOL] **[Artificer, Cleric]** Touch a dying ally to stabilize them. -# 35. - Sparkle (V,S) level 0 Enchantment [SOL] +# 34. - Sparkle (V,S) level 0 Enchantment [SOL] **[Bard, Cleric, Druid, Sorcerer, Warlock, Wizard]** Target up to three objects that can be illuminated and light them up immediately. -# 36. - *Starry Wisp* © (V,S) level 0 Evocation [UB] +# 35. - *Starry Wisp* © (V,S) level 0 Evocation [UB] **[Bard, Druid]** You launch a mote of light at one creature or object within range. Make a ranged spell attack against the target. On a hit, the target takes 1d8 Radiant damage, and until the end of your next turn, it emits Dim Light in a 10-foot radius and can't benefit from the Invisible condition. The spell's damage increases by an additional die at 5th, 11th and 17th level. -# 37. - Sunlit Blade (M,S) level 0 Evocation [UB] +# 36. - Sunlit Blade (M,S) level 0 Evocation [UB] **[Artificer, Sorcerer, Warlock, Wizard]** You brandish the weapon used in the spell's casting and make a melee attack with it against one creature within 5 ft distance. On a hit, the target suffers the weapon attack's normal effects, and is enveloped in glowing radiant energy, shedding dim light for the turn. Next attack against this creature while it is highlighted is done with advantage. At 5th level, the melee attack deals an extra 1d8 radiant damage to the target. The damage increases by another 1d8 at 11th and 17th levels. -# 38. - *Sword Burst* © (V,S) level 0 Enchantment [UB] +# 37. - *Sword Burst* © (V,S) level 0 Enchantment [UB] **[Artificer, Sorcerer, Warlock, Wizard]** You create a momentary circle of spectral blades that sweep around you. All other creatures within 5 ft of you must each succeed on a Dexterity saving throw or take 1d6 force damage. -# 39. - *Thorn Whip* © (V,S) level 0 Transmutation [UB] +# 38. - *Thorn Whip* © (V,S) level 0 Transmutation [UB] **[Artificer, Druid]** You create a long, whip-like vine covered in thorns that lashes out at your command toward a creature in range. Make a ranged spell attack against the target. If the attack hits, the creature takes 1d6 piercing damage, and you pull the creature up to 10 ft closer to you. -# 40. - *Thunderclap* © (V,S) level 0 Evocation [UB] +# 39. - *Thunderclap* © (V,S) level 0 Evocation [UB] **[Artificer, Bard, Druid, Sorcerer, Warlock, Wizard]** Create a burst of thundering sound, forcing creatures adjacent to you to make a Constitution saving throw or take 1d6 thunder damage. The spell's damage increases by an additional die at 5th, 11th and 17th level. -# 41. - *Toll the Dead* © (V,S) level 0 Necromancy [UB] +# 40. - *Toll the Dead* © (V,S) level 0 Necromancy [UB] **[Cleric, Warlock, Wizard]** You point at one creature you can see within range, and the sound of a dolorous bell fills the air around it for a moment. The target must succeed on a Wisdom saving throw or take 1d6 necrotic damage. If the target is missing any of its hit points, it instead takes 1d12 necrotic damage. -# 42. - True Strike (S) level 0 Divination [Concentration] [SOL] +# 41. - True Strike (S) level 0 Divination [Concentration] [SOL] **[Bard, Sorcerer, Warlock, Wizard]** Increases your chance to hit a target you can see, one time. -# 43. - Venomous Spike (V,S) level 0 Enchantment [SOL] +# 42. - Venomous Spike (V,S) level 0 Enchantment [SOL] **[Druid]** A bone spike that pierces and poisons its target. -# 44. - Vicious Mockery (V) level 0 Enchantment [SOL] +# 43. - Vicious Mockery (V) level 0 Enchantment [SOL] **[Bard]** Unleash a torrent of magically-enhanced insults on a creature you can see. It must make a successful wisdom saving throw, or take psychic damage and have disadvantage on its next attack roll. The effect lasts until the end of its next turn. -# 45. - *Word of Radiance* © (V) level 0 Evocation [UB] +# 44. - *Word of Radiance* © (V) level 0 Evocation [UB] **[Cleric]** Create a brilliant flash of shimmering light, damaging all enemies around you. -# 46. - Wrack (V,S) level 0 Necromancy [UB] +# 45. - Wrack (V,S) level 0 Necromancy [UB] **[Cleric]** Unleash a wave of crippling pain at a creature within range. The target must make a Constitution saving throw or take 1d6 necrotic damage, and preventing them from dashing or disengaging. -# 47. - *Absorb Elements* © (S) level 1 Abjuration [UB] +# 46. - *Absorb Elements* © (S) level 1 Abjuration [UB] **[Druid, Ranger, Sorcerer, Wizard]** The spell captures some of the incoming energy, lessening its effect on you and storing it for your next melee attack. You have resistance to the triggering damage type until the start of your next turn. Also, the first time you hit with a melee attack on your next turn, the target takes an extra 1d6 damage of the triggering type, and the spell ends. When you cast this spell using a spell slot of 2nd level or higher, the extra damage increases by 1d6 for each slot level above 1st. -# 48. - Animal Friendship (V,S) level 1 Enchantment [SOL] +# 47. - Animal Friendship (V,S) level 1 Enchantment [SOL] **[Bard, Druid, Ranger]** Choose a beast that you can see within the spell's range. The beast must make a Wisdom saving throw or be charmed for the spell's duration. -# 49. - *Armor of Agathys* © (V,S) level 1 Abjuration [UB] +# 48. - *Armor of Agathys* © (V,S) level 1 Abjuration [UB] **[Warlock]** A protective elemental skin envelops you, covering you and your gear. You gain 5 temporary hit points per spell level for the duration. In addition, if a creature hits you with a melee attack while you have these temporary hit points, the creature takes 5 cold damage per spell level. -# 50. - *Arms of Hadar* © (V,S) level 1 Evocation [UB] +# 49. - *Arms of Hadar* © (V,S) level 1 Evocation [UB] **[Warlock]** You invoke the power of malevolent forces. Tendrils of dark energy erupt from you and batter all creatures within 10 feet of you. Each creature in that area must make a Strength saving throw. On a failed save, a target takes 2d6 necrotic damage and can't take reactions until the start of your next turn. On a successful save, the creature takes half damage, but suffers no other effect. When you cast this spell using a spell slot of 2nd level or higher, the damage increases by 1d6 for each slot level above 1st. -# 51. - Bane (V,S) level 1 Enchantment [Concentration] [SOL] +# 50. - Bane (V,S) level 1 Enchantment [Concentration] [SOL] **[Bard, Cleric]** Reduce your enemies' attack and saving throws for a limited time. -# 52. - Bless (V,S) level 1 Enchantment [Concentration] [SOL] +# 51. - Bless (V,S) level 1 Enchantment [Concentration] [SOL] **[Cleric, Paladin]** Increase your allies' saving throws and attack rolls for a limited time. -# 53. - Burning Hands (V,S) level 1 Evocation [SOL] +# 52. - Burning Hands (V,S) level 1 Evocation [SOL] **[Sorcerer, Wizard]** Spray a cone of fire in front of you. -# 54. - Caustic Zap (V,S) level 1 Evocation [UB] +# 53. - Caustic Zap (V,S) level 1 Evocation [UB] **[Artificer, Sorcerer, Wizard]** You send a jolt of green energy toward the target momentarily disorientating them as the spell burn some of their armor. The spell targets one enemy with a spell attack and deals 1d4 acid and 1d6 lightning damage and applies the dazzled condition. -# 55. - *Chaos Bolt* © (V,S) level 1 Evocation [UB] +# 54. - *Chaos Bolt* © (V,S) level 1 Evocation [UB] **[Sorcerer]** @@ -333,25 +327,25 @@ Make a ranged spell attack against a target. On a hit, the target takes 2d8 + 1d 7: ◹ Psychic 8: ◼ Thunder If you roll the same number on both d8s, you can use your free action to target a different creature of your choice. Make a new attack roll against the new target, and make a new damage roll, which could cause the chaotic energy to leap again. A creature can be damaged only once by each casting of this spell. -# 56. - Charm Person (V,S) level 1 Enchantment [SOL] +# 55. - Charm Person (V,S) level 1 Enchantment [SOL] **[Bard, Druid, Sorcerer, Warlock, Wizard]** Makes an ally of an enemy. -# 57. - *Chromatic Orb* © (M,V,S) level 1 Evocation [UB] +# 56. - *Chromatic Orb* © (M,V,S) level 1 Evocation [UB] **[Sorcerer, Wizard]** You hurl a 4-inch-diameter sphere of energy at a creature that you can see within range. You choose acid, cold, fire, lightning, poison, or thunder for the type of orb you create, and then make a ranged spell attack against the target. If the attack hits, the creature takes 3d8 damage of the type you chose. -# 58. - Color Spray (V,S) level 1 Illusion [SOL] +# 57. - Color Spray (V,S) level 1 Illusion [SOL] **[Sorcerer, Wizard]** Spray a luminous cone that briefly blinds your enemies. Roll 6d10: the total is how many hit points of creatures this spell can affect. -# 59. - *Command* © (V) level 1 Enchantment [UB] +# 58. - *Command* © (V) level 1 Enchantment [UB] **[Bard, Cleric, Paladin]** @@ -359,438 +353,438 @@ You speak a one-word command to a creature you can see within range. The target You can only command creatures you share a language with. Humanoids are considered knowing Common. To command a non-humanoid creature, you must know Draconic for Dragons, Elvish for Fey, Giant for Giants, Infernal for Fiends and Terran for Elementals. Cannot target Undead or Surprised creatures. -# 60. - Comprehend Languages (V,S) level 1 Divination [SOL] +# 59. - Comprehend Languages (V,S) level 1 Divination [SOL] **[Bard, Sorcerer, Warlock, Wizard]** For the duration of the spell, you understand the literal meaning of any spoken words that you hear. -# 61. - Cure Wounds (V,S) level 1 Evocation [SOL] +# 60. - Cure Wounds (V,S) level 1 Evocation [SOL] **[Artificer, Bard, Cleric, Druid, Paladin, Ranger]** Heal an ally by touch. -# 62. - Detect Evil and Good (V,S) level 1 Divination [Concentration] [SOL] +# 61. - Detect Evil and Good (V,S) level 1 Divination [Concentration] [SOL] **[Cleric, Paladin]** Detect nearby creatures of evil or good nature. -# 63. - Detect Magic (V,S) level 1 Divination [Concentration] [SOL] +# 62. - Detect Magic (V,S) level 1 Divination [Concentration] [SOL] **[Artificer, Bard, Cleric, Druid, Paladin, Ranger, Sorcerer, Wizard]** Detect nearby magic objects or creatures. -# 64. - Detect Poison and Disease (V,S) level 1 Divination [Concentration] [SOL] +# 63. - Detect Poison and Disease (V,S) level 1 Divination [Concentration] [SOL] **[Druid]** TMP For the duration you sense the presence and location of poisonous creatures and diseases within 6 cells of you. -# 65. - *Dissonant Whispers* © (V) level 1 Enchantment [UB] +# 64. - *Dissonant Whispers* © (V) level 1 Enchantment [UB] **[Bard]** You whisper a discordant melody that only one creature of your choice within range can hear, wracking it with terrible pain. The target must make a Wisdom saving throw. On a failed save, it takes 3d6 psychic damage and must immediately use its reaction, if available, to move as far as its speed allows away from you. The creature doesn't move into obviously dangerous ground, such as a fire or a pit. On a successful save, the target takes half as much damage and doesn't have to move away. When you cast this spell using a spell slot of 2nd level or higher, the damage increases by 1d6 for each slot level above 1st. -# 66. - Divine Favor (V,S) level 1 Evocation [Concentration] [SOL] +# 65. - Divine Favor (V,S) level 1 Evocation [Concentration] [SOL] **[Paladin]** Gain additional radiant damage for a limited time. -# 67. - *Earth Tremor* © (V,S) level 1 Evocation [UB] +# 66. - *Earth Tremor* © (V,S) level 1 Evocation [UB] **[Bard, Druid, Sorcerer, Wizard]** You strike the ground and unleash a tremor of seismic force, hurling up earth, rock, and sand. -# 68. - *Ensnaring Strike* © (V) level 1 Conjuration [Concentration] [UB] +# 67. - *Ensnaring Strike* © (V) level 1 Conjuration [Concentration] [UB] **[Ranger]** The next time you hit a creature with a weapon attack before this spell ends, a writhing mass of thorny vines appears at the point of impact, and the target must succeed on a Strength saving throw or be restrained by the magical vines until the spell ends.While restrained by this spell, the target takes 1d6 piercing damage at the start of each of its turns. A creature restrained by the vines can use its action to make a Strength check against your spell save DC. -# 69. - Entangle (V,S) level 1 Conjuration [Concentration] [SOL] +# 68. - Entangle (V,S) level 1 Conjuration [Concentration] [SOL] **[Druid]** Creatures in a four-cell square area are restrained if they fail a STR saving throw -# 70. - Expeditious Retreat (V,S) level 1 Transmutation [Concentration] [SOL] +# 69. - Expeditious Retreat (V,S) level 1 Transmutation [Concentration] [SOL] **[Artificer, Sorcerer, Warlock, Wizard]** Gain movement points and become able to dash as a bonus action for a limited time. -# 71. - Faerie Fire (V) level 1 Evocation [Concentration] [SOL] +# 70. - Faerie Fire (V) level 1 Evocation [Concentration] [SOL] **[Artificer, Bard, Druid]** Highlight creatures to give advantage to anyone attacking them. -# 72. - False Life (V,S) level 1 Necromancy [SOL] +# 71. - False Life (V,S) level 1 Necromancy [SOL] **[Artificer, Sorcerer, Wizard]** Gain a few temporary hit points for a limited time. -# 73. - Feather Fall (V) level 1 Transmutation [SOL] +# 72. - Feather Fall (V) level 1 Transmutation [SOL] **[Artificer, Bard, Sorcerer, Wizard]** Provide a safe landing when you or an ally falls. -# 74. - *Find Familiar* © (V,S) level 1 Conjuration [UB] +# 73. - *Find Familiar* © (V,S) level 1 Conjuration [UB] **[Wizard]** You gain the service of a familiar. The familiar can use the help action, and you can cast any touch or melee hit spell through the familiar. -# 75. - Fog Cloud (V,S) level 1 Conjuration [Concentration] [SOL] +# 74. - Fog Cloud (V,S) level 1 Conjuration [Concentration] [SOL] **[Druid, Ranger, Sorcerer, Wizard]** Generate a sphere of thick fog for a limited time. The area is heavily obscured, penalizing creatures inside it that rely on sight. -# 76. - *Gift of Alacrity* © (V,S) level 1 Divination [UB] +# 75. - *Gift of Alacrity* © (V,S) level 1 Divination [UB] **[Wizard]** You touch a willing creature. For the duration, the target can add 1d8 to its initiative rolls. -# 77. - Goodberry (V,S) level 1 Transmutation [SOL] +# 76. - Goodberry (V,S) level 1 Transmutation [SOL] **[Druid, Ranger]** Creates 10 berries infused with magic. Eating a berry restores 1 hit point and provides sustenance for a long rest. Berries vanish after a long rest. -# 78. - Grease (V,S) level 1 Conjuration [SOL] +# 77. - Grease (V,S) level 1 Conjuration [SOL] **[Artificer, Wizard]** Cover an area of 2 x 2 cells with grease. Creatures trying to cross it may fall prone. -# 79. - Guiding Bolt (V,S) level 1 Evocation [SOL] +# 78. - Guiding Bolt (V,S) level 1 Evocation [SOL] **[Cleric]** Launch a radiant attack against an enemy and make them easy to hit. -# 80. - *Hail of Thorns* © (V) level 1 Conjuration [Concentration] [UB] +# 79. - *Hail of Thorns* © (V) level 1 Conjuration [Concentration] [UB] **[Ranger]** The next time you hit a creature with a ranged weapon attack before the spell ends, this spell creates a rain of thorns that sprouts from your ranged weapon or ammunition. In addition to the normal effect of the attack, the target of the attack and each creature within 5 feet of it must make a Dexterity saving throw. A creature takes 1d10 piercing damage on a failed save, or half as much damage on a successful one. -# 81. - Healing Word (V) level 1 Evocation [SOL] +# 80. - Healing Word (V) level 1 Evocation [SOL] **[Bard, Cleric, Druid]** Heal an ally you can see. -# 82. - Hellish Rebuke (V,S) level 1 Evocation [SOL] +# 81. - Hellish Rebuke (V,S) level 1 Evocation [SOL] **[Warlock]** When you are damaged by a creature within range, you can use your reaction to inflict fire damage back. -# 83. - Heroism (V,S) level 1 Enchantment [Concentration] [SOL] +# 82. - Heroism (V,S) level 1 Enchantment [Concentration] [SOL] **[Bard, Paladin]** An ally gains temporary hit points and cannot be frightened for a limited time. -# 84. - Hideous Laughter (V,S) level 1 Enchantment [Concentration] [SOL] +# 83. - Hideous Laughter (V,S) level 1 Enchantment [Concentration] [SOL] **[Bard, Wizard]** Make an enemy helpless with irresistible laughter. -# 85. - Hunter's Mark (V) level 1 Divination [Concentration] [SOL] +# 84. - Hunter's Mark (V) level 1 Divination [Concentration] [SOL] **[Ranger]** An enemy gets additional damage from you, and you can easily detect it for a limited time. -# 86. - *Ice Knife* © (S) level 1 Conjuration [UB] +# 85. - *Ice Knife* © (S) level 1 Conjuration [UB] **[Druid, Sorcerer, Wizard]** You create a shard of ice and fling it at one creature within range. Make a ranged spell attack against the target. On a hit, the target takes 1d10 piercing damage. Hit or miss, the shard then explodes. The target and each creature within 5 feet of the point where the ice exploded must succeed on a Dexterity saving throw or take 2d6 cold damage. When you cast this spell using a spell slot of 2nd level or higher, both the cold and piercing damage increase by 1 die for each slot level above 1st. -# 87. - Identify (M,V,S) level 1 Divination [SOL] +# 86. - Identify (M,V,S) level 1 Divination [SOL] **[Artificer, Bard, Wizard]** Identify the hidden properties of an object. -# 88. - Inflict Wounds (V,S) level 1 Necromancy [SOL] +# 87. - Inflict Wounds (V,S) level 1 Necromancy [SOL] **[Cleric]** Deal necrotic damage to an enemy you hit. -# 89. - Jump (V,S) level 1 Transmutation [SOL] +# 88. - Jump (V,S) level 1 Transmutation [SOL] **[Artificer, Druid, Ranger, Sorcerer, Wizard]** Increase an ally's jumping distance. -# 90. - Jump (V,S) level 1 Transmutation [SOL] +# 89. - Jump (V,S) level 1 Transmutation [SOL] Increase an ally's jumping distance. -# 91. - Longstrider (V,S) level 1 Transmutation [SOL] +# 90. - Longstrider (V,S) level 1 Transmutation [SOL] **[Artificer, Bard, Druid, Ranger, Wizard]** Increases an ally's speed by two cells per turn. -# 92. - Mage Armor (V,S) level 1 Abjuration [SOL] +# 91. - Mage Armor (V,S) level 1 Abjuration [SOL] **[Sorcerer, Wizard]** Provide magical armor to an ally who doesn't wear armor. -# 93. - Magic Missile (V,S) level 1 Evocation [SOL] +# 92. - Magic Missile (V,S) level 1 Evocation [SOL] **[Sorcerer, Wizard]** Strike one or more enemies with projectiles that can't miss. -# 94. - *Magnify Gravity* © (V,S) level 1 Transmutation [UB] +# 93. - *Magnify Gravity* © (V,S) level 1 Transmutation [UB] **[Wizard]** Sharply increase gravity in a 10-foot-radius sphere to crush and slow targets. -# 95. - Malediction (V,S) level 1 Enchantment [Concentration] [SOL] +# 94. - Malediction (V,S) level 1 Enchantment [Concentration] [SOL] **[Warlock]** Until the spell ends, whenever you hit a target with an attack you deal an extra 1d6 magical damage of the same type as the attack's damage. -# 96. - Mule (V,S) level 1 Transmutation [UB] +# 95. - Mule (V,S) level 1 Transmutation [UB] **[Bard, Sorcerer, Warlock, Wizard]** The recipient of this spell is able to ignore the effects of heavy loads or armor on movement speed. They can also carry slightly more weight. -# 97. - Protect vs Evil & Good (V,S) level 1 Abjuration [Concentration] [SOL] +# 96. - Protect vs Evil & Good (V,S) level 1 Abjuration [Concentration] [SOL] **[Cleric, Paladin, Warlock, Wizard]** Touch an ally to give them protection from evil or good creatures for a limited time. -# 98. - Radiant Motes (V,S) level 1 Evocation [UB] +# 97. - Radiant Motes (V,S) level 1 Evocation [UB] **[Artificer, Wizard]** Unleashes a swarm of 4 radiant projectiles that deal 1d4 radiant damage each. When you cast this spell using a spell slot of 2nd level or higher, the spell creates 1 more projectile for each slot above 1st. -# 99. - *Sanctuary* © (V,S) level 1 Abjuration [UB] +# 98. - *Sanctuary* © (V,S) level 1 Abjuration [UB] **[Artificer, Cleric]** You ward a creature within range against attack. Until the spell ends, any creature who targets the warded creature with an attack or a harmful spell must first make a Wisdom saving throw. On a failed save, the creature loses the attack or spell. This spell doesn't protect the warded creature from area effects. If the warded creature makes an attack or casts a spell, this spell ends. -# 100. - *Searing Smite* © (V) level 1 Evocation [Concentration] [UB] +# 99. - *Searing Smite* © (V) level 1 Evocation [Concentration] [UB] **[Paladin, Ranger]** The next time you hit a creature with a melee weapon attack during the spell's duration, your weapon flares with white-hot intensity, and the attack deals an extra 1d6 fire damage to the target and causes the target to ignite in flames. At the start of each of its turns until the spell ends, the target must make a Constitution saving throw. On a failed save, it takes 1d6 fire damage. On a successful save, the spells ends. If the target or a creature within 5 feet of it uses an action to put out the flames, or if some other effect douses the flames (such as the target being submerged in water), the spell ends. When you cast this spell using a spell slot of 2nd level or higher, the extra damage increases by 1d6 for each slot level above 1st. -# 101. - Shield (V,S) level 1 Abjuration [SOL] +# 100. - Shield (V,S) level 1 Abjuration [SOL] **[Sorcerer, Wizard]** Increase your AC by 5 just before you would take a hit. -# 102. - Shield of Faith (V,S) level 1 Abjuration [Concentration] [SOL] +# 101. - Shield of Faith (V,S) level 1 Abjuration [Concentration] [SOL] **[Cleric, Paladin]** Increase an ally's AC by 2 for a limited time. -# 103. - Sleep (V,S) level 1 Enchantment [SOL] +# 102. - Sleep (V,S) level 1 Enchantment [SOL] **[Bard, Sorcerer, Wizard]** Put a number of creatures to sleep for a limited time. Roll 5d8: the total is how many hit points of creatures this spell can affect. -# 104. - *Tasha's Caustic Brew* © (V,S) level 1 Evocation [Concentration] [UB] +# 103. - *Tasha's Caustic Brew* © (V,S) level 1 Evocation [Concentration] [UB] **[Artificer, Sorcerer, Wizard]** A stream of acid emanates from you in a line 30 feet long and 5 feet wide in a direction you choose. Each creature in the line must succeed on a Dexterity saving throw or be covered in acid for the spell's duration or until a creature uses its action to scrape or wash the acid off itself or another creature. A creature covered in the acid takes 2d4 acid damage at start of each of its turns. When you cast this spell using a spell slot 2nd level or higher, the damage increases by 2d4 for each slot level above 1st. -# 105. - *Thunderous Smite* © (V) level 1 Evocation [Concentration] [UB] +# 104. - *Thunderous Smite* © (V) level 1 Evocation [Concentration] [UB] **[Paladin]** The first time you hit with a melee weapon attack during this spell's duration, your weapon rings with thunder that is audible within 300 feet of you, and the attack deals an extra 2d6 thunder damage to the target. Additionally, if the target is a creature, it must succeed on a Strength saving throw or be pushed 10 feet away from you and knocked prone. -# 106. - Thunderwave (V,S) level 1 Evocation [SOL] +# 105. - Thunderwave (V,S) level 1 Evocation [SOL] **[Bard, Druid, Sorcerer, Wizard]** Emit a wave of force that causes damage and pushes creatures and objects away. -# 107. - Tiefling's Hellish Rebuke (V,S) level 1 Evocation [SOL] +# 106. - Tiefling's Hellish Rebuke (V,S) level 1 Evocation [SOL] When you are damaged by a creature withing range, you can use your reaction to inflict fire damage back at them. This tiefling version of the spell is more powerful than the common one but cannot use a higher level Spell Slot to increase damage. -# 108. - *Witch Bolt* © (V,S) level 1 Evocation [Concentration] [UB] +# 107. - *Witch Bolt* © (V,S) level 1 Evocation [Concentration] [UB] **[Sorcerer, Warlock, Wizard]** A beam of crackling, blue energy lances out toward a creature within range, forming a sustained arc of lightning between you and the target. Make a ranged spell attack against that creature. On a hit, the target takes 1d12 lightning damage, and on each of your turns for the duration, you can use your action to deal 1d12 lightning damage to the target automatically. The spell ends if you use your action to do anything else. The spell also ends if the target is ever outside the spell's range. When you cast this spell using a spell slot of 2nd level or higher, the damage increases by 1d12 for each slot level above 1st. -# 109. - *Wrathful Smite* © (V) level 1 Evocation [Concentration] [UB] +# 108. - *Wrathful Smite* © (V) level 1 Evocation [Concentration] [UB] **[Paladin]** The next time you hit with a melee weapon attack during this spell's duration, your attack deals an extra 1d6 psychic damage. Additionally, if the target is a creature, it must make a Wisdom saving throw or be frightened of you until the spell ends. As an action, the creature can make a Wisdom check against your spell save DC to steel its resolve and end this spell. -# 110. - *Zephyr Strike* © (V) level 1 Transmutation [Concentration] [UB] +# 109. - *Zephyr Strike* © (V) level 1 Transmutation [Concentration] [UB] **[Ranger]** You move like the wind. For the duration, your movement doesn't provoke opportunity attacks. Once before the spell ends, you can give yourself advantage on one weapon attack roll on your turn. That attack deals an extra 1d8 force damage on a hit. Whether you hit or miss, your walking speed increases by 30 feet until the end of that turn. -# 111. - Acid Arrow (V,S) level 2 Evocation [SOL] +# 110. - Acid Arrow (V,S) level 2 Evocation [SOL] **[Wizard]** Launch an acid arrow that deals some damage even if you miss your shot. -# 112. - *Aganazzar's Scorcher* © (V,S) level 2 Evocation [UB] +# 111. - *Aganazzar's Scorcher* © (V,S) level 2 Evocation [UB] **[Sorcerer, Wizard]** A line of roaring flame 30 feet long and 5 feet wide emanates from you in a direction you choose. Each creature in the line must make a Dexterity saving throw. A creature takes 3d10 fire damage on a failed save, or half as much damage on a successful one. When you cast this spell using a spell slot of 3rd level or higher, the damage increases by 1d10 for each slot level above 2nd. -# 113. - Aid (V,S) level 2 Abjuration [SOL] +# 112. - Aid (V,S) level 2 Abjuration [SOL] **[Artificer, Cleric, Paladin]** Temporarily increases hit points for up to three allies. -# 114. - Barkskin (V,S) level 2 Transmutation [Concentration] [SOL] +# 113. - Barkskin (V,S) level 2 Transmutation [Concentration] [SOL] **[Druid, Ranger]** Gives you or an ally you can touch an AC of at least 16. -# 115. - Blindness (V) level 2 Necromancy [SOL] +# 114. - Blindness (V) level 2 Necromancy [SOL] **[Bard, Cleric, Sorcerer, Wizard]** Blind an enemy for one minute. -# 116. - Blur (V) level 2 Illusion [Concentration] [SOL] +# 115. - Blur (V) level 2 Illusion [Concentration] [SOL] **[Artificer, Sorcerer, Wizard]** Makes you blurry and harder to hit for up to one minute. -# 117. - *Borrowed Knowledge* © (V,S) level 2 Divination [UB] +# 116. - *Borrowed Knowledge* © (V,S) level 2 Divination [UB] **[Bard, Cleric, Warlock, Wizard]** You draw on knowledge from spirits of the past. Choose one skill in which you lack proficiency. For 1 hour, you have proficiency in the chosen skill. The spell ends early if you cast it again. -# 118. - Branding Smite (V) level 2 Evocation [Concentration] [SOL] +# 117. - Branding Smite (V) level 2 Evocation [Concentration] [SOL] **[Paladin]** Your next hit causes additional radiant damage and your target becomes luminous. -# 119. - Calm Emotions (V,S) level 2 Enchantment [Concentration] [SOL] +# 118. - Calm Emotions (V,S) level 2 Enchantment [Concentration] [SOL] **[Bard, Cleric]** Stops allies from being charmed or frightened and makes hostile humanoids indifferent. -# 120. - *Cloud of Daggers* © (V,S) level 2 Conjuration [Concentration] [UB] +# 119. - *Cloud of Daggers* © (V,S) level 2 Conjuration [Concentration] [UB] **[Bard, Sorcerer, Warlock, Wizard]** You fill the air with spinning daggers in a cube 5 feet on each side, centered on a point you choose within range. A creature takes 4d4 slashing damage when it enters the spell's area for the first time on a turn or starts its turn there. When you cast this spell using a spell slot of 3rd level or higher, the damage increases by 2d4 for each slot level above 2nd. -# 121. - Color Burst (V,S) level 2 Illusion [UB] +# 120. - Color Burst (V,S) level 2 Illusion [UB] **[Artificer, Sorcerer, Wizard]** Burst a luminous cube that briefly blinds anyone within 10 ft. 8d10 is how many hit points of creatures this spell can affect. -# 122. - Conjure Goblinoids (V,S) level 2 Conjuration [Concentration] [UB] +# 121. - Conjure Goblinoids (V,S) level 2 Conjuration [Concentration] [UB] **[Druid, Ranger]** Conjures 2 goblins who obey your orders unless you lose concentration. -# 123. - Darkness (V) level 2 Evocation [Concentration] [SOL] +# 122. - Darkness (V) level 2 Evocation [Concentration] [SOL] **[Sorcerer, Warlock, Wizard]** Create an area of magical darkness. -# 124. - Darkvision (V,S) level 2 Transmutation [SOL] +# 123. - Darkvision (V,S) level 2 Transmutation [SOL] **[Artificer, Druid, Ranger, Sorcerer, Wizard]** Grant Darkvision to the target. -# 125. - Enhance Ability (V,S) level 2 Transmutation [Concentration] [SOL] +# 124. - Enhance Ability (V,S) level 2 Transmutation [Concentration] [SOL] **[Artificer, Bard, Cleric, Druid]** Grant temporary powers to an ally for up to one hour. -# 126. - Find Traps (V,S) level 2 Evocation [SOL] +# 125. - Find Traps (V,S) level 2 Evocation [SOL] **[Cleric, Druid, Ranger]** Spot mechanical and magical traps, but not natural hazards. -# 127. - Flame Blade (V,S) level 2 Evocation [Concentration] [SOL] +# 126. - Flame Blade (V,S) level 2 Evocation [Concentration] [SOL] **[Druid]** Evokes a fiery blade for ten minutes that you can wield in battle. -# 128. - Flaming Sphere (V,S) level 2 Evocation [Concentration] [SOL] +# 127. - Flaming Sphere (V,S) level 2 Evocation [Concentration] [SOL] **[Druid, Wizard]** Summons a movable, burning sphere. -# 129. - Heat Metal (V,S) level 2 Transmutation [Concentration] [SOL] +# 128. - Heat Metal (V,S) level 2 Transmutation [Concentration] [SOL] **[Artificer, Bard, Druid]** Causes metallic armor worn by a target creature to glow red hot, causing fire damage and disadvantage to attack rolls and ability checks. The damage can be repeated every turn with a bonus action. -# 130. - Hold Person (V,S) level 2 Enchantment [Concentration] [SOL] +# 129. - Hold Person (V,S) level 2 Enchantment [Concentration] [SOL] **[Bard, Cleric, Druid, Sorcerer, Warlock, Wizard]** Paralyze a humanoid you can see for a limited time. -# 131. - Invisibility (V,S) level 2 Illusion [Concentration] [SOL] +# 130. - Invisibility (V,S) level 2 Illusion [Concentration] [SOL] **[Artificer, Bard, Sorcerer, Warlock, Wizard]** Make an ally invisible for a limited time. -# 132. - *Kinetic Jaunt* © (S) level 2 Evocation [Concentration] [UB] +# 131. - *Kinetic Jaunt* © (S) level 2 Evocation [Concentration] [UB] **[Artificer, Bard, Sorcerer, Wizard]** @@ -799,36 +793,36 @@ You magically empower your movement with dance like steps, giving yourself the f • You don't provoke opportunity attacks. • You can move through the space of any creature. -# 133. - Knock (V) level 2 Transmutation [SOL] +# 132. - Knock (V) level 2 Transmutation [SOL] **[Bard, Sorcerer, Wizard]** Magically open locked doors, chests, and the like. -# 134. - Lesser Restoration (V,S) level 2 Abjuration [SOL] +# 133. - Lesser Restoration (V,S) level 2 Abjuration [SOL] **[Artificer, Bard, Cleric, Druid, Paladin, Ranger]** Remove a detrimental condition from an ally. -# 135. - Levitate (V,S) level 2 Transmutation [Concentration] [SOL] +# 134. - Levitate (V,S) level 2 Transmutation [Concentration] [SOL] **[Artificer, Sorcerer, Wizard]** Allow a creature to levitate and gain control of its aerial movement for a limited time. Can affect enemies if their size is medium or smaller. -# 136. - Levitate (V,S) level 2 Transmutation [Concentration] [SOL] +# 135. - Levitate (V,S) level 2 Transmutation [Concentration] [SOL] Allow a creature to levitate and gain control of its aerial movement for a limited time. Can affect enemies if their size is medium or smaller. -# 137. - Magic Weapon (V,S) level 2 Transmutation [Concentration] [SOL] +# 136. - Magic Weapon (V,S) level 2 Transmutation [Concentration] [SOL] **[Artificer, Paladin, Wizard]** A nonmagical weapon becomes a +1 weapon for up to one hour. -# 138. - *Mirror Image* © (V,S) level 2 Illusion [UB] +# 137. - *Mirror Image* © (V,S) level 2 Illusion [UB] **[Bard, Sorcerer, Warlock, Wizard]** @@ -837,348 +831,348 @@ If you have 3 duplicates, you must roll a 6 or higher to change the attack's tar A duplicate's AC is equal to 10 + your Dexterity modifier. If an attack hits a duplicate, the duplicate is destroyed. A duplicate can be destroyed only by an attack that hits it. It ignores all other damage and effects. The spell ends when all three duplicates are destroyed. A creature is unaffected by this spell if it is Blinded, or has Blindsight, Truesight or Tremorsense (doesn't apply if you don't touch ground). -# 139. - Misty Step (V) level 2 Conjuration [SOL] +# 138. - Misty Step (V) level 2 Conjuration [SOL] **[Sorcerer, Warlock, Wizard]** Teleports you to a free cell you can see, no more than 6 cells away. -# 140. - Moon Beam (V,S) level 2 Evocation [Concentration] [SOL] +# 139. - Moon Beam (V,S) level 2 Evocation [Concentration] [SOL] **[Druid]** Conjures a vertical column of moonlight which causes radiant damage. Shapechangers have disadvantage on the save. -# 141. - Noxious Spray (V,S) level 2 Evocation [UB] +# 140. - Noxious Spray (V,S) level 2 Evocation [UB] **[Druid, Sorcerer, Warlock, Wizard]** You unleash a spray of noxious gases on a target within range. Make a ranged spell attack. On a hit, the target takes 4d6 poison damage and must succeed on a Constitution saving throw or spend all its next turn retching and heaving, unable to move or take actions. Constructs, elementals and undead are unaffected by this spell. When you cast this spell using a slot of 3rd level or higher, you can target one additional creature for each slot level above 2nd. -# 142. - Pass Without Trace (V,S) level 2 Abjuration [Concentration] [SOL] +# 141. - Pass Without Trace (V,S) level 2 Abjuration [Concentration] [SOL] **[Druid, Ranger]** Make yourself and up to 5 allies stealthier for one hour. -# 143. - Petal Storm (V,S) level 2 Conjuration [Concentration] [UB] +# 142. - Petal Storm (V,S) level 2 Conjuration [Concentration] [UB] **[Druid]** Choose an unoccupied 15-foot cube of air that you can see within range. An elemental force of swirling winds appears in the cube and lasts for the spell's duration. The cloud heavily obscures its area. Any creature that enters the storm for the first time on a turn or starts its turn there must make a Strength saving throw. On a failed save, the creature takes 3d4 slashing damage. As a bonus action, you can move the storm up to 30 ft in any direction. -# 144. - Prayer of Healing (V) level 2 Evocation [SOL] +# 143. - Prayer of Healing (V) level 2 Evocation [SOL] **[Cleric]** Heal multiple allies at the same time. -# 145. - Protect Threshold (V,S) level 2 Abjuration [UB] +# 144. - Protect Threshold (V,S) level 2 Abjuration [UB] **[Cleric, Druid, Paladin]** Tracing arcane sigils along its boundary, you can ward a doorway, window, or other portal from entry. For the duration, an invisible eldritch creature stalks the warded portal. Any creature that attempts to pass through the portal must make a Wisdom saving throw or take 4d6 psychic damage, or half as much on a successful save. -# 146. - Protection from Poison (V,S) level 2 Abjuration [SOL] +# 145. - Protection from Poison (V,S) level 2 Abjuration [SOL] **[Artificer, Druid, Paladin, Ranger]** Cures and protects against poison. -# 147. - Ray of Enfeeblement (V,S) level 2 Necromancy [Concentration] [SOL] +# 146. - Ray of Enfeeblement (V,S) level 2 Necromancy [Concentration] [SOL] **[Sorcerer, Warlock, Wizard]** Weaken an enemy so they deal less damage for one minute. -# 148. - *Rime's Binding Ice* © (S) level 2 Evocation [UB] +# 147. - *Rime's Binding Ice* © (S) level 2 Evocation [UB] **[Sorcerer, Wizard]** A burst of cold energy emanates from you in a 30-foot cone. Each creature in that area must make a Constitution saving throw. On a failed save, a creature takes 3d8 cold damage and is hindered by ice formations for 1 minute, or until it uses an action to break away the ice. A creature hindered by ice has its speed reduced to 0. On a successful save, a creature takes half as much damage and isn't hindered by ice. -# 149. - Scorching Ray (V,S) level 2 Evocation [SOL] +# 148. - Scorching Ray (V,S) level 2 Evocation [SOL] **[Sorcerer, Wizard]** Fling rays of fire at one or more enemies. -# 150. - See Invisibility (V,S) level 2 Divination [SOL] +# 149. - See Invisibility (V,S) level 2 Divination [SOL] **[Artificer, Bard, Sorcerer, Wizard]** You can see invisible creatures. -# 151. - *Shadow Blade* © (V,S) level 2 Illusion [Concentration] [UB] +# 150. - *Shadow Blade* © (V,S) level 2 Illusion [Concentration] [UB] **[Sorcerer, Warlock, Wizard]** You weave together threads of shadow to create a dagger of solidified gloom in your hand. It deals 2d8 psychic damage on a hit and has the finesse, light, and thrown properties. In addition, when you use it to attack a target that is in dim light or darkness, you make the attack roll with advantage. -# 152. - Shatter (V,S) level 2 Evocation [SOL] +# 151. - Shatter (V,S) level 2 Evocation [SOL] **[Bard, Sorcerer, Warlock, Wizard]** Triggers a sudden noise that causes Thunder Damage in a 2-cell radius. -# 153. - Silence (V,S) level 2 Illusion [Concentration] [SOL] +# 152. - Silence (V,S) level 2 Illusion [Concentration] [SOL] **[Bard, Cleric, Ranger]** Creates a sphere four cells in radius, inside which sound cannot exist. Stops thunder damage and prevents spellcasting using verbal components. -# 154. - *Snilloc's Snowball Storm* © (V,S) level 2 Evocation [UB] +# 153. - *Snilloc's Snowball Storm* © (V,S) level 2 Evocation [UB] **[Sorcerer, Wizard]** A flurry of magic snowballs erupts from a point you choose within range. Each creature in a 3x3 cube centered on that point must make a Dexterity saving throw. A creature takes 3d8 cold damage on a failed save, or half as much damage on a successful one. When you cast this spell using a spell slot of 3rd level or higher, the damage increases by 1d8 for each slot level above 2nd. -# 155. - Spider Climb (V,S) level 2 Transmutation [Concentration] [SOL] +# 154. - Spider Climb (V,S) level 2 Transmutation [Concentration] [SOL] **[Artificer, Sorcerer, Warlock, Wizard]** Touch an ally to allow them to climb walls like a spider for a limited time. -# 156. - Spike Growth (V,S) level 2 Transmutation [Concentration] [SOL] +# 155. - Spike Growth (V,S) level 2 Transmutation [Concentration] [SOL] **[Druid, Ranger]** Grows spikes and thorns in the area, making the terrain difficult and causing damage for every cell of movement. -# 157. - Spiritual Weapon (V,S) level 2 Evocation [SOL] +# 156. - Spiritual Weapon (V,S) level 2 Evocation [SOL] **[Cleric]** Summon a weapon that fights for you. -# 158. - *Tasha's Mind Whip* © (V) level 2 Enchantment [UB] +# 157. - *Tasha's Mind Whip* © (V) level 2 Enchantment [UB] **[Sorcerer, Wizard]** You psychically lash out at one creature you can see within range. The target must make an Intelligence saving throw. On a failed save, the target takes 3d6 psychic damage, and it can't take a reaction until the end of its next turn. Moreover, on its next turn, it must choose whether it gets a move, an action, or a bonus action; it gets only one of the three. On a successful save, the target takes half as much damage and suffers none of the spell's other effects. When you cast this spell using a spell slot of 3rd level or higher, you can target one additional creature for each slot level above 2nd. -# 159. - *Warding Bond* © (V,S) level 2 Abjuration [SOL] +# 158. - *Warding Bond* © (V,S) level 2 Abjuration [SOL] Creates a bond with the target, who gains +1 AC, +1 to saving throws and resistance to all damage, but you share all damage it receives. Lasts for one hour. -# 160. - *Web* © (V,S) level 2 Conjuration [Concentration] [UB] +# 159. - *Web* © (V,S) level 2 Conjuration [Concentration] [UB] **[Artificer, Sorcerer, Wizard]** You conjure a mass of thick, sticky webbing at a point of your choice within range. The webs fill a 20-foot cube from that point for the duration. The webs are difficult terrain and lightly obscure their area. Each creature that enters them during its turn must make a Dexterity saving throw. On a failed save, the creature is restrained as long as it remains in the webs or until it breaks free. A creature restrained by the webs can use its actions to make a Strength check against your spell save DC. If it succeeds, it is no longer restrained. -# 161. - *Wither and Bloom* © (V,S) level 2 Necromancy [UB] +# 160. - *Wither and Bloom* © (V,S) level 2 Necromancy [UB] **[Druid, Sorcerer, Wizard]** You invoke both death and life upon a 10-foot-radius sphere centered on an ally. Each enemy in that area must make a Constitution saving throw, taking 2d6 necrotic damage on a failed save, or half as much damage on a successful one. In addition, the target spends and rolls one of its unspent Hit Dice and regain a number of hit points equal to the roll plus your spellcasting ability modifier. When you cast this spell using a spell slot of 3rd level or higher, the damage increases by 1d6 for each slot above 2nd, and the number of Hit Dice that can be spent and added to the healing roll increases by one for each slot above 2nd. -# 162. - Adder's Fangs (V,S) level 3 Conjuration [UB] +# 161. - Adder's Fangs (V,S) level 3 Conjuration [UB] **[Druid, Ranger, Sorcerer, Warlock]** You create the visage of a massive green snake that appears for an instant before bearing down on your foe. Choose a creature you can see within range. The target must make a constitution saving throw, taking 4d10 poison damage on a failure, or half as much damage on a successful one. A creature that fails its saving throw is also poisoned, and its speed is halved while poisoned by this spell. At the end of each of its turns, a target may make a constitution saving throw, ending the poison on a success. Otherwise, the poison lasts for 1 minute. When you cast this spell using a spell slot of 4th level or higher, you may target an additional creature within range for each slot level above 3rd. -# 163. - *Ashardalon's Stride* © (V,S) level 3 Transmutation [Concentration] [UB] +# 162. - *Ashardalon's Stride* © (V,S) level 3 Transmutation [Concentration] [UB] **[Artificer, Ranger, Sorcerer, Wizard]** The billowing flames of a dragon blast from your feet, granting you explosive speed. For the duration, your speed increases by 20 feet and moving doesn't provoke opportunity attacks. When you move within 5 feet of a creature, it takes 1d6 fire damage from your trail of heat. A creature can take this damage only once during a turn. When you cast this spell using a spell slot of 4th level or higher, increase your speed by 5 feet for each spell slot level above 3rd. The spell deals an additional 1d6 fire damage for each slot level above 3rd. -# 164. - *Aura of Vitality* © (V) level 3 Evocation [Concentration] [UB] +# 163. - *Aura of Vitality* © (V) level 3 Evocation [Concentration] [UB] **[Cleric, Paladin]** Healing energy radiates from you in an aura with a 30-foot radius. Until the spell ends, the aura moves with you, centered on you. You can use a bonus action to cause one creature in the aura (including you) to regain 2d6 hit points. -# 165. - Beacon of Hope (V,S) level 3 Abjuration [Concentration] [SOL] +# 164. - Beacon of Hope (V,S) level 3 Abjuration [Concentration] [SOL] **[Cleric]** Raise hope and vitality. -# 166. - Bestow Curse (V,S) level 3 Necromancy [Concentration] [SOL] +# 165. - Bestow Curse (V,S) level 3 Necromancy [Concentration] [SOL] **[Bard, Cleric, Wizard]** Curses a creature you can touch. -# 167. - *Blinding Smite* © (V) level 3 Evocation [Concentration] [UB] +# 166. - *Blinding Smite* © (V) level 3 Evocation [Concentration] [UB] **[Paladin]** The next time you hit a creature with a melee weapon attack during this spell's duration, you weapon flares with a bright light, and the attack deals an extra 3d8 radiant damage to the target. Additionally, the target must succeed on a Constitution saving throw or be blinded until the spell ends. A creature blinded by this spell makes another Constitution saving throw at the end of each of its turns. On a successful save, it is no longer blinded. -# 168. - Call Lightning (V,S) level 3 Conjuration [Concentration] [SOL] +# 167. - Call Lightning (V,S) level 3 Conjuration [Concentration] [SOL] **[Druid]** Conjures a storm cloud from which you can call a vertical bolt of lightning to strike targets, dealing 3D10 lightning damage. Another bolt can be repeated every turn by using an action. -# 169. - Conjure Animal (V,S) level 3 Conjuration [Concentration] [SOL] +# 168. - Conjure Animal (V,S) level 3 Conjuration [Concentration] [SOL] **[Druid, Ranger]** Summon spirits in the form of beasts to help you in battle -# 170. - Corrupting Bolt (V,S) level 3 Necromancy [UB] +# 169. - Corrupting Bolt (V,S) level 3 Necromancy [UB] **[Sorcerer, Warlock, Wizard]** You can fire a pulse of necrotic energy that causes a creature's body to begin to wither and decay. Make a ranged attack against a creature. On a hit, the target takes 4d8 necrotic damage and must succeed a Constitution saving throw. On a failed saving throw, the next time you or an ally of yours hits the corrupted creature with an attack before the end of your next turn, the creature has vulnerability to all of that attack's damage, and then the corruption ends. When you cast this spell using a spell slot of 4th level or higher, the damage increases by 1d8 for each slot level above 3rd. -# 171. - Counterspell (S) level 3 Abjuration [SOL] +# 170. - Counterspell (S) level 3 Abjuration [SOL] **[Sorcerer, Warlock, Wizard]** Interrupt an enemy's spellcasting. -# 172. - Create Food (S) level 3 Conjuration [SOL] +# 171. - Create Food (S) level 3 Conjuration [SOL] **[Artificer, Cleric, Paladin]** Conjure 15 units of food. -# 173. - *Crusader's Mantle* © (V) level 3 Evocation [Concentration] [UB] +# 172. - *Crusader's Mantle* © (V) level 3 Evocation [Concentration] [UB] **[Paladin]** Surround yourself with a magical aura. Allies within the aura gain a bonus 1d4 radiant damage on their attacks. -# 174. - Daylight (V,S) level 3 Evocation [SOL] +# 173. - Daylight (V,S) level 3 Evocation [SOL] **[Cleric, Druid, Paladin, Ranger, Sorcerer]** Summon a globe of bright light. -# 175. - Dispel Magic (V,S) level 3 Abjuration [SOL] +# 174. - Dispel Magic (V,S) level 3 Abjuration [SOL] **[Artificer, Bard, Cleric, Druid, Paladin, Sorcerer, Warlock, Wizard]** End active spells on a creature or object. -# 176. - *Elemental Weapon* © (V,S) level 3 Transmutation [Concentration] [UB] +# 175. - *Elemental Weapon* © (V,S) level 3 Transmutation [Concentration] [UB] **[Artificer, Druid, Paladin, Ranger]** Imbue a non-magical weapon with elemental magic. It gains a +1 to attack and damage rolls, and it gains 1d4 of the corresponding element's damage. When casting with a 5 or 6 spell slots, the effects increased by one die while casting at a spell slot 7 or higher increases the effects by 2. -# 177. - Fear (V,S) level 3 Illusion [Concentration] [SOL] +# 176. - Fear (V,S) level 3 Illusion [Concentration] [SOL] **[Bard, Sorcerer, Warlock, Wizard]** Frighten creatures and force them to flee. -# 178. - Fireball (V,S) level 3 Evocation [SOL] +# 177. - Fireball (V,S) level 3 Evocation [SOL] **[Sorcerer, Wizard]** Launch a fireball that explodes from a point of your choosing. -# 179. - *Flame Arrows* © (M,V,S) level 3 Transmutation [Concentration] [UB] +# 178. - *Flame Arrows* © (M,V,S) level 3 Transmutation [Concentration] [UB] **[Artificer, Druid, Ranger, Sorcerer, Wizard]** You must be wielding a ranged weapon. When a target is hit by it, the target takes an extra 1d6 fire damage. The spell ends when twelve pieces of ammunition have been drawn from the quiver. When you cast this spell using a spell slot of 4th level or higher, the number of pieces of ammunition you can affect with this spell increases by two for each slot level above 3rd. -# 180. - Fly (V,S) level 3 Transmutation [Concentration] [SOL] +# 179. - Fly (V,S) level 3 Transmutation [Concentration] [SOL] **[Artificer, Sorcerer, Warlock, Wizard]** An ally you touch gains the ability to fly for a limited time. -# 181. - Haste (V,S) level 3 Transmutation [Concentration] [SOL] +# 180. - Haste (V,S) level 3 Transmutation [Concentration] [SOL] **[Artificer, Sorcerer, Wizard]** Make an ally faster and more agile, and grant them an additional action for a limited time. -# 182. - *Hunger of Hadar* © (V,S) level 3 Transmutation [Concentration] [UB] +# 181. - *Hunger of Hadar* © (V,S) level 3 Transmutation [Concentration] [UB] **[Warlock]** You open a gateway to the dark between the stars, a region infested with unknown horrors. A 20-foot-radius sphere of blackness and bitter cold appears, centered on a point with range and lasting for the duration. The area extinguishes light, and creatures within it are blinded. Any creature that starts its turn in the area takes 2d6 cold damage. Any creature that ends its turn in the area must succeed on a Dexterity saving throw or take 2d6 acid damage as milky, otherworldly tentacles rub against it. -# 183. - Hypnotic Pattern (S) level 3 Illusion [Concentration] [SOL] +# 182. - Hypnotic Pattern (S) level 3 Illusion [Concentration] [SOL] **[Bard, Sorcerer, Warlock, Wizard]** Charms enemies to make them harmless until attacked, but also affects allies in range. -# 184. - *Intellect Fortress* © (V) level 3 Abjuration [Concentration] [UB] +# 183. - *Intellect Fortress* © (V) level 3 Abjuration [Concentration] [UB] **[Artificer, Bard, Sorcerer, Warlock, Wizard]** For the duration, you or one willing creature you can see within range has resistance to psychic damage, as well as advantage on Intelligence, Wisdom, and Charisma saving throws. When you cast this spell using a spell slot of 4th level or higher, you may target an additional creature within range for each slot level above 3rd. -# 185. - *Life Transference* © (V,S) level 3 Necromancy [UB] +# 184. - *Life Transference* © (V,S) level 3 Necromancy [UB] **[Cleric, Wizard]** You sacrifice some of your health to mend another creature's injuries. You take 4d8 necrotic damage, and one creature of your choice that you can see within range regains a number of hit points equal to twice the necrotic damage you take. When you cast this spell using a spell s lot of 4th level or higher, the damage increases by 1d8 for each slot level above 3rd. -# 186. - *Lightning Arrow* © (V,S) level 3 Transmutation [Concentration] [UB] +# 185. - *Lightning Arrow* © (V,S) level 3 Transmutation [Concentration] [UB] **[Ranger]** The next time you make a ranged weapon attack during the spell's duration, the weapon's ammunition, or the weapon itself if it's a thrown weapon, transforms into a bolt of lightning. Make the attack roll as normal. The target takes 3d8 lightning damage on a hit, or half as much damage on a miss. Whether you hit or miss, each creature within 10 feet of the target must make a Dexterity saving throw. Each of these creatures takes 2d8 lightning damage on a failed save, or half as much damage on a successful one. When you cast this spell using a spell slot of 4th level or higher, the damage for both effects of the spell increases by 1d8 for each slot level above 3rd. -# 187. - Lightning Bolt (V,S) level 3 Evocation [SOL] +# 186. - Lightning Bolt (V,S) level 3 Evocation [SOL] **[Sorcerer, Wizard]** Unleash a stroke of lightning in a direction of your choice, damaging everyone it touches. -# 188. - Mass Healing Word (V) level 3 Evocation [SOL] +# 187. - Mass Healing Word (V) level 3 Evocation [SOL] **[Cleric]** Instantly heals up to six allies you can see. -# 189. - Protection from Energy (V,S) level 3 Abjuration [Concentration] [SOL] +# 188. - Protection from Energy (V,S) level 3 Abjuration [Concentration] [SOL] **[Artificer, Cleric, Druid, Ranger, Sorcerer, Wizard]** Touch one willing creature to give them resistance to this damage type. -# 190. - *Pulse Wave* © (V,S) level 3 Evocation [UB] +# 189. - *Pulse Wave* © (V,S) level 3 Evocation [UB] **[Wizard]** You create intense pressure, unleash it in a 30-foot cone, and decide whether the pressure pulls or pushes creatures and objects. Each creature in that cone must make a Constitution saving throw. A creature takes 6d6 force damage on a failed save, or half as much damage on a successful one. And every creature that fails the save is either pulled 15 feet toward you or pushed 15 feet away from you, depending on the choice you made for the spell. When you cast this spell using a spell slot of 4th level or higher, the damage increases by 1d6 and the distance pulled or pushed increases by 5 feet for each slot level above 3rd. -# 191. - Remove Curse (V,S) level 3 Abjuration [SOL] +# 190. - Remove Curse (V,S) level 3 Abjuration [SOL] **[Cleric, Paladin, Warlock, Wizard]** Removes all curses affecting the target. -# 192. - Revivify (M,V,S) level 3 Necromancy [SOL] +# 191. - Revivify (M,V,S) level 3 Necromancy [SOL] **[Artificer, Cleric, Paladin]** Brings one creature back to life, up to 1 minute after death. -# 193. - Sleet Storm (V,S) level 3 Conjuration [Concentration] [SOL] +# 192. - Sleet Storm (V,S) level 3 Conjuration [Concentration] [SOL] **[Druid, Sorcerer, Wizard]** Creates an area where the ground is slippery, vision is obscured, and concentration is harder. -# 194. - Slow (V,S) level 3 Transmutation [Concentration] [SOL] +# 193. - Slow (V,S) level 3 Transmutation [Concentration] [SOL] **[Sorcerer, Wizard]** Slows and impairs the actions of up to 6 creatures. -# 195. - Spirit Guardians (V,S) level 3 Conjuration [Concentration] [SOL] +# 194. - Spirit Guardians (V,S) level 3 Conjuration [Concentration] [SOL] **[Cleric]** Call forth spirits to protect you. -# 196. - *Spirit Shroud* © (V,S) level 3 Necromancy [Concentration] [UB] +# 195. - *Spirit Shroud* © (V,S) level 3 Necromancy [Concentration] [UB] **[Cleric, Paladin, Warlock, Wizard]** @@ -1187,444 +1181,444 @@ Until the spell ends, any attack you make deals 1d8 extra damage when you hit a In addition, any enemy creature within 10ft of you when you cast, or that enters or starts its turn in that range has its movement speed lowered by 10ft until start of its next turn. When you cast this spell using a spell slot of 4th level or higher, the damage increases by 1d8 for every two slot levels above 3rd. -# 197. - Stinking Cloud (V,S) level 3 Conjuration [Concentration] [SOL] +# 196. - Stinking Cloud (V,S) level 3 Conjuration [Concentration] [SOL] **[Bard, Sorcerer, Wizard]** Create a cloud of incapacitating, noxious gas. -# 198. - *Thunder Step* © (V) level 3 Conjuration [UB] +# 197. - *Thunder Step* © (V) level 3 Conjuration [UB] **[Sorcerer, Warlock, Wizard]** You teleport yourself to an unoccupied space you can see within range. Immediately after you disappear, a thunderous boom sounds, and each creature within 10 feet of the space you left must make a Constitution saving throw, taking 3d10 thunder damage on a failed save, or half as much damage on a successful one. You can also teleport one willing ally. When you cast this spell using a spell slot of 4th level or higher, the damage increases by 1d10 for each slot level above 3rd. -# 199. - Tongues (V) level 3 Divination [SOL] +# 198. - Tongues (V) level 3 Divination [SOL] **[Bard, Cleric, Sorcerer, Warlock, Wizard]** Grants knowledge of all languages for one hour. -# 200. - Vampiric Touch (V,S) level 3 Necromancy [Concentration] [SOL] +# 199. - Vampiric Touch (V,S) level 3 Necromancy [Concentration] [SOL] **[Warlock, Wizard]** Grants you a life-draining melee attack for one minute. -# 201. - Wind Wall (V,S) level 3 Evocation [Concentration] [SOL] +# 200. - Wind Wall (V,S) level 3 Evocation [Concentration] [SOL] **[Druid, Ranger]** Create a wall of wind that causes damage, pushes creatures and objects away, and disperses fogs and gases. -# 202. - Winter's Breath (V,S) level 3 Conjuration [UB] +# 201. - Winter's Breath (V,S) level 3 Conjuration [UB] **[Druid, Sorcerer, Wizard]** Create a blast of cold wind to chill your enemies and knock them prone. -# 203. - *Aura of Life* © (V) level 4 Abjuration [Concentration] [UB] +# 202. - *Aura of Life* © (V) level 4 Abjuration [Concentration] [UB] **[Cleric, Paladin]** Life-preserving energy radiates from you in an aura with a 30-foot radius. Until the spell ends, the aura moves with you, centered on you. Each non-hostile creature in the aura, including you, has resistance to necrotic damage, and its hit point maximum can't be reduced. In addition, a non-hostile, living creature regains 1 hit point when it starts its turn in the aura with 0 hit points. -# 204. - *Aura of Purity* © (V) level 4 Abjuration [Concentration] [UB] +# 203. - *Aura of Purity* © (V) level 4 Abjuration [Concentration] [UB] **[Cleric, Paladin]** Purifying energy radiates from you in an aura with a 30-foot radius. Until the spell ends, the aura moves with you, centered on you. Each non-hostile creature in the aura, including you, can't become diseased, has resistance to poison damage, and has advantage on saving throws against effects that cause any of the following conditions: blinded, charmed, deafened, frightened, paralyzed, poisoned, and stunned. -# 205. - Banishment (V,S) level 4 Abjuration [Concentration] [SOL] +# 204. - Banishment (V,S) level 4 Abjuration [Concentration] [SOL] **[Cleric, Paladin, Sorcerer, Warlock, Wizard]** Banishes a creature as long as you concentrate. The creature can be permanently banished if it is extraplanar. -# 206. - Black Tentacles (V,S) level 4 Conjuration [Concentration] [SOL] +# 205. - Black Tentacles (V,S) level 4 Conjuration [Concentration] [SOL] **[Wizard]** Conjures black tentacles that restrain and damage creatures within the area of effect. -# 207. - Blessing of Rime (V,S) level 4 Evocation [UB] +# 206. - Blessing of Rime (V,S) level 4 Evocation [UB] **[Bard, Druid, Ranger]** You summon a chill wind that numbs the pain of your allies. Choose up to three creatures within range. Each creature gains 3d8 temporary hit points for the duration. While a creature has these hit points, if it would make a Constitution saving throw, it gains advantage on the roll. When you cast this spell using a spell slot of 5th level or higher, the temporary hit points increase by 1d8 for each slot level above 4th. -# 208. - Blight (V,S) level 4 Necromancy [SOL] +# 207. - Blight (V,S) level 4 Necromancy [SOL] **[Druid, Sorcerer, Warlock, Wizard]** Drains life from a creature, causing massive necrotic damage. -# 209. - Brain Bulwark (V) level 4 Abjuration [UB] +# 208. - Brain Bulwark (V) level 4 Abjuration [UB] **[Artificer, Bard, Sorcerer, Warlock, Wizard]** For the duration, you or one willing creature you can see within range has resistance to psychic damage, as well as Immunity to the Charmed, Frightened, Fear, Mind dominated and Mind controlled conditions. -# 210. - Confusion (V,S) level 4 Enchantment [Concentration] [SOL] +# 209. - Confusion (V,S) level 4 Enchantment [Concentration] [SOL] **[Bard, Druid, Sorcerer, Wizard]** Creates confusion and erratic behavior in a creature, possibly leading it to attack its allies. -# 211. - Conjure 4 Elementals (V,S) level 4 Conjuration [Concentration] [SOL] +# 210. - Conjure 4 Elementals (V,S) level 4 Conjuration [Concentration] [SOL] 4 elementals are conjured (CR 1/2). -# 212. - Conjure Minor Elementals (V,S) level 4 Conjuration [Concentration] [SOL] +# 211. - Conjure Minor Elementals (V,S) level 4 Conjuration [Concentration] [SOL] **[Druid, Wizard]** Conjure elemental creatures under your command, which are dismissed when the spell ends or is broken. -# 213. - Death Ward (V,S) level 4 Abjuration [SOL] +# 212. - Death Ward (V,S) level 4 Abjuration [SOL] **[Cleric, Paladin]** Protects the creature once against instant death or being reduced to 0 hit points. -# 214. - Dimension Door (V) level 4 Conjuration [SOL] +# 213. - Dimension Door (V) level 4 Conjuration [SOL] **[Bard, Sorcerer, Warlock, Wizard]** Transfers the caster and a friendly creature to a specified destination. -# 215. - Dominate Beast (V,S) level 4 Enchantment [Concentration] [SOL] +# 214. - Dominate Beast (V,S) level 4 Enchantment [Concentration] [SOL] **[Druid, Sorcerer]** Grants you control over an enemy beast. -# 216. - Dreadful Omen (V,S) level 4 Enchantment [SOL] +# 215. - Dreadful Omen (V,S) level 4 Enchantment [SOL] **[Bard, Warlock]** You whisper dreadful words that cause immense mental anguish in your enemies. On a failed wisdom saving throw, they take psychic damage and become frightened until the end of their next turn, moving away from you as much as possible. On a successful save, they take half as much damage and are not frightened. -# 217. - *Elemental Bane* © (V,S) level 4 Transmutation [Concentration] [UB] +# 216. - *Elemental Bane* © (V,S) level 4 Transmutation [Concentration] [UB] **[Artificer, Druid, Warlock, Wizard]** Choose one creature you can see within range, and choose one of the following damage types: acid, cold, fire, lightning, or thunder. The target must succeed on a Constitution saving throw or be affected by the spell for its duration. The first time each turn the affected target takes non-recurrent damage of the chosen type, the target takes an extra 2d6 damage of that type. Moreover, the target loses any resistance to that damage type until the spell ends. When you cast this spell using a spell slot of 5th level or higher, you can target one additional creature for each slot level above 4th. The creatures must be within 30 feet of each other when you target them. -# 218. - Fire Shield (V,S) level 4 Evocation [SOL] +# 217. - Fire Shield (V,S) level 4 Evocation [SOL] **[Sorcerer, Wizard]** Grants resistance to fire or cold, and damages creatures attacking the caster with melee attacks. -# 219. - Freedom of Movement (V,S) level 4 Abjuration [SOL] +# 218. - Freedom of Movement (V,S) level 4 Abjuration [SOL] **[Artificer, Bard, Cleric, Druid, Ranger]** Grants immunity to movement restrictions, as well as being paralyzed or restrained. -# 220. - Giant Insect (V,S) level 4 Transmutation [Concentration] [SOL] +# 219. - Giant Insect (V,S) level 4 Transmutation [Concentration] [SOL] **[Druid]** Conjures a giant version of a natural insect or arthropod. -# 221. - *Gravity Sinkhole* © (V,S) level 4 Evocation [UB] +# 220. - *Gravity Sinkhole* © (V,S) level 4 Evocation [UB] **[Wizard]** A 20-foot-radius sphere of crushing force forms at a point you can see within range and tugs at the creatures there. Each creature in the sphere must make a Constitution saving throw. On a failed save, the creature takes 5d10 force damage, and is pulled in a straight line toward the center of the sphere, ending in an unoccupied space as close to the center as possible. On a successful save, the creature takes half as much damage and isn't pulled. When you cast this spell using a spell slot of 5th level or higher, the damage increases by 1d10 for each slot level above 4th. -# 222. - Greater Invisibility (V,S) level 4 Illusion [Concentration] [SOL] +# 221. - Greater Invisibility (V,S) level 4 Illusion [Concentration] [SOL] **[Bard, Sorcerer, Wizard]** Target becomes invisible for the duration, even when attacking or casting spells. -# 223. - Guardian of Faith (V) level 4 Conjuration [SOL] +# 222. - Guardian of Faith (V) level 4 Conjuration [SOL] **[Cleric]** Conjures a large spectral guardian that damages approaching enemies. -# 224. - *Guardian of Nature* © (V) level 4 Transmutation [Concentration] [UB] +# 223. - *Guardian of Nature* © (V) level 4 Transmutation [Concentration] [UB] **[Druid, Ranger]** A nature spirit answers your call and transforms you into a powerful guardian. The transformation lasts until the spell ends. You choose between a Beast or a Tree form. -# 225. - Ice Storm (V,S) level 4 Evocation [SOL] +# 224. - Ice Storm (V,S) level 4 Evocation [SOL] **[Druid, Sorcerer, Wizard]** Causes bludgeoning and cold damage in the area, and turns the ground into difficult terrain. -# 226. - Identify Creatures (V,S) level 4 Divination [SOL] +# 225. - Identify Creatures (V,S) level 4 Divination [SOL] **[Wizard]** Reveals full bestiary knowledge for the affected creatures. -# 227. - Irresistible Performance (V) level 4 Enchantment [UB] +# 226. - Irresistible Performance (V) level 4 Enchantment [UB] **[Bard]** You weave a song into the air, causing those who hear it to applaud its magnificence. All creatures of your choice inside a 30-foot-cube within range must make a Charisma saving throw or be forced to clap and shout until the start of your next turn. A creature that is charmed by you always fails this saving throw. A clapping creature cannot perform any actions that require their hands or mouth but can otherwise act normally. This spell has no effect on creatures that are immune to charm. -# 228. - *Mordenkainen's Faithful Hound* © (V,S) level 4 Conjuration [UB] +# 227. - *Mordenkainen's Faithful Hound* © (V,S) level 4 Conjuration [UB] **[Artificer, Wizard]** You conjure a phantom watchdog in an unoccupied space that you can see within range, where it remains for the duration. The hound has Darkvision up to 60 ft, Truesight up to 80 ft, is invisible to all creatures except you and can't be harmed. During each of your turns, the hound can attempt to bite one creature within 5 feet of it that is hostile to you as a free action. The hound's attack bonus is equal to your spellcasting ability modifier + your proficiency bonus. On a hit, it deals 4d8 piercing damage. -# 229. - Phantasmal Killer (V,S) level 4 Illusion [Concentration] [SOL] +# 228. - Phantasmal Killer (V,S) level 4 Illusion [Concentration] [SOL] **[Wizard]** Causes psychic damage to the target creature with each turn, unless a saving throw is successful or the effect ends. -# 230. - Psionic Blast (V) level 4 Evocation [UB] +# 229. - Psionic Blast (V) level 4 Evocation [UB] **[Sorcerer, Warlock, Wizard]** You unleash a debilitating wave of mental power in a 30-foot cone. Each creature in the area must make an Intelligence saving throw. On a failed save, a target takes 5d8 psychic damage, becomes dazzled and has its movement speed halved until the end of your next turn. On a successful save, a target only takes half as much damage. When you cast this spell using a spell slot of 4th level or higher, the damage increases by 1d8 for each slot level above 4th. -# 231. - *Raulothim's Psychic Lance* © (V) level 4 Enchantment [UB] +# 230. - *Raulothim's Psychic Lance* © (V) level 4 Enchantment [UB] **[Bard, Sorcerer, Warlock, Wizard]** You unleash a shimmering lance of psychic power from your forehead at a creature that you can see within range. It must succeed on an Intelligence saving throw or take 7d6 psychic damage and be incapacitated until the end of your next turn. On a successful save, the creature takes half damage and isn't incapacitated. At Higher Levels. When you cast this spell using a spell slot of 4th level or higher, the damage increases by 1d6 for each slot level above 4th. -# 232. - *Sickening Radiance* © (V,S) level 4 Evocation [Concentration] [UB] +# 231. - *Sickening Radiance* © (V,S) level 4 Evocation [Concentration] [UB] **[Sorcerer, Warlock, Wizard]** Dim light spreads within a 30-foot-radius sphere centered on a point you choose within range. The light spreads around corners, and it lasts until the spell ends. When a creature moves into the spell's area for the first time on a turn or starts its turn there, that creature must succeed on a Constitution saving throw or take 4d10 radiant damage, and it suffers one level of exhaustion and emits a dim light in a 5-foot radius. This light makes it impossible for the creature to benefit from being invisible. The light and any levels of exhaustion caused by this spell go away when the spell ends. -# 233. - *Staggering Smite* © (V) level 4 Evocation [Concentration] [UB] +# 232. - *Staggering Smite* © (V) level 4 Evocation [Concentration] [UB] **[Paladin]** The next time you hit a creature with a melee weapon attack during this spell's duration, your weapon pierces both body and mind, and the attack deals an extra 4d6 psychic damage to the target. The target must make a Wisdom saving throw. On a failed save, it has disadvantage on attack rolls and ability checks, and can't take reactions, until the end of its next turn. -# 234. - Stoneskin (M,V,S) level 4 Abjuration [Concentration] [SOL] +# 233. - Stoneskin (M,V,S) level 4 Abjuration [Concentration] [SOL] **[Artificer, Druid, Ranger, Sorcerer, Wizard]** Grants resistance to non-magical bludgeoning, slashing, and piercing damage. -# 235. - *Vitriolic Sphere* © (V,S) level 4 Evocation [UB] +# 234. - *Vitriolic Sphere* © (V,S) level 4 Evocation [UB] **[Sorcerer, Wizard]** You point at a place within range, and a glowing 1-foot ball of emerald acid streaks there and explodes in a 20-foot radius. Each creature in that area must make a Dexterity saving throw. On a failed save, a creature takes 10d4 acid damage and 5d4 acid damage at the end of its next turn. On a successful save, a creature takes half the initial damage and no damage at the end of its next turn. When you cast this spell using a spell slot of 5th level or higher, the initial damage increases by 2d4 for each slot level above 4th. -# 236. - Wall of Fire (V,S) level 4 Evocation [Concentration] [SOL] +# 235. - Wall of Fire (V,S) level 4 Evocation [Concentration] [SOL] **[Druid, Sorcerer, Wizard]** Create a burning wall that injures creatures in or next to it. -# 237. - *Banishing Smite* © (V) level 5 Abjuration [Concentration] [UB] +# 236. - *Banishing Smite* © (V) level 5 Abjuration [Concentration] [UB] **[Paladin]** The next time you hit a creature with a weapon attack before this spell ends, your weapon crackles with force, and the attack deals an extra 5d10 force damage to the target. Additionally, if this attack reduces the target to 50 hit points of fewer, you banish it. If the target is native to a different plane of existence than the on you're on, the target disappears, returning to its home plane. If the target is native to the plane you're on, the creature vanishes into a harmless demi-plane. While there, the target is incapacitated. It remains there until the spell ends, at which point the target reappears in the space it left or in the nearest unoccupied space if that space is occupied. -# 238. - *Circle of Power* © (V) level 5 Abjuration [Concentration] [UB] +# 237. - *Circle of Power* © (V) level 5 Abjuration [Concentration] [UB] **[Paladin]** Divine energy radiates from you, distorting and diffusing magical energy within 30 feet of you. Until the spell ends, the sphere moves with you, centered on you. For the duration, each friendly creature in the area, including you, has advantage on saving throws against spells and other magical effects. Additionally, when an affected creature succeeds on a saving throw made against a spell or magical effect that allows it to make a saving throw to take only half damage, it instead takes no damage if it succeeds on the saving throws. -# 239. - Cloudkill (V,S) level 5 Conjuration [Concentration] [SOL] +# 238. - Cloudkill (V,S) level 5 Conjuration [Concentration] [SOL] **[Sorcerer, Wizard]** Creates an obscuring and poisonous cloud. The cloud moves every round. -# 240. - Cone of Cold (V,S) level 5 Evocation [SOL] +# 239. - Cone of Cold (V,S) level 5 Evocation [SOL] **[Sorcerer, Wizard]** Inflicts massive cold damage in the cone of effect. -# 241. - Conjure Elemental (V,S) level 5 Conjuration [Concentration] [SOL] +# 240. - Conjure Elemental (V,S) level 5 Conjuration [Concentration] [SOL] **[Druid, Wizard]** Conjures an elemental of the chosen element that fights alongside you. If you lose concentration, the elemental remains and becomes hostile. -# 242. - Contagion (V,S) level 5 Necromancy [SOL] +# 241. - Contagion (V,S) level 5 Necromancy [SOL] **[Cleric, Druid]** Hit a creature to inflict a disease from the options. -# 243. - *Dawn* © (V,S) level 5 Evocation [Concentration] [UB] +# 242. - *Dawn* © (V,S) level 5 Evocation [Concentration] [UB] **[Cleric, Wizard]** The light of dawn shines down on a location you specify within range. Until the spell ends, a 30-foot-radius, 40-foot-high cylinder of bright light glimmers there. This light is sunlight. When the cylinder appears, each creature in it must make a Constitution saving throw, taking 4d10 radiant damage on a failed save, or half as much damage on a successful one. A creature must also make this saving throw whenever it ends its turn in the cylinder. If you're within 60 feet of the cylinder, you can move it up to 60 feet as a bonus action on your turn. -# 244. - *Destructive Wave* © (V) level 5 Evocation [UB] +# 243. - *Destructive Wave* © (V) level 5 Evocation [UB] **[Paladin]** You strike the ground, creating a burst of divine energy that ripples outward from you. Each creature you choose within 30 feet of you must succeed on a Constitution saving throw or take 5d6 thunder damage, as well as 5d6 radiant or necrotic damage, and be knocked prone. A creature that succeeds on its saving throw takes half as much damage and isn't knocked prone. -# 245. - Dispel Evil and Good (V,S) level 5 Abjuration [Concentration] [SOL] +# 244. - Dispel Evil and Good (V,S) level 5 Abjuration [Concentration] [SOL] **[Cleric, Paladin]** Celestial, elementals, feys, fiends, and undead have disadvantage on attacks against you. This spell also allows you to cancel hostile enchantments or dismiss extraplanar creatures hit by your attacks once. -# 246. - Dominate Person (V,S) level 5 Enchantment [Concentration] [SOL] +# 245. - Dominate Person (V,S) level 5 Enchantment [Concentration] [SOL] **[Bard, Sorcerer, Wizard]** Grants you control over an enemy creature. -# 247. - *Far Step* © (V) level 5 Conjuration [Concentration] [UB] +# 246. - *Far Step* © (V) level 5 Conjuration [Concentration] [UB] **[Sorcerer, Warlock, Wizard]** You teleport up to 60 ft to an unoccupied space you can see. On each of your turns before the spell ends, you can use a bonus action to teleport in this way again. -# 248. - Flame Strike (V,S) level 5 Evocation [SOL] +# 247. - Flame Strike (V,S) level 5 Evocation [SOL] **[Cleric]** Conjures a burning column of fire and radiance affecting all creatures inside. -# 249. - Greater Restoration (V,S) level 5 Abjuration [SOL] +# 248. - Greater Restoration (V,S) level 5 Abjuration [SOL] **[Artificer, Bard, Cleric, Druid]** Removes one detrimental condition, such as a charm or curse, or an effect that reduces an ability score or hit points. -# 250. - Hold Monster (V,S) level 5 Enchantment [Concentration] [SOL] +# 249. - Hold Monster (V,S) level 5 Enchantment [Concentration] [SOL] **[Bard, Sorcerer, Warlock, Wizard]** Paralyzes a creature unless it succeeds a WIS saving throw. No effect on undead. -# 251. - *Holy Weapon* © (V,S) level 5 Evocation [Concentration] [UB] +# 250. - *Holy Weapon* © (V,S) level 5 Evocation [Concentration] [UB] **[Cleric, Paladin]** You imbue a weapon you touch with holy power. Until the spell ends, the weapon emits bright light in a 30-foot radius and dim light for an additional 30 feet. In addition, weapon attacks made with it deal an extra 2d8 radiant damage on a hit. If the weapon isn't already a magic weapon, it becomes one for the duration. As a bonus action on your turn, if the weapon is within 30 ft, you can dismiss this spell and cause the weapon to emit a burst of radiance. Each creature of your choice that you can see within 30 feet of the weapon must make a Constitution saving throw. On a failed save, a creature takes 4d8 radiant damage, and it is blinded for 1 minute. On a successful save, a creature takes half as much damage and isn't blinded. At the end of each of its turns, a blinded creature can make a Constitution saving throw, ending the effect on itself on a success. -# 252. - *Immolation* © (V) level 5 Evocation [Concentration] [UB] +# 251. - *Immolation* © (V) level 5 Evocation [Concentration] [UB] **[Sorcerer, Wizard]** Flames wreathe one creature you can see within range. The target must make a Dexterity saving throw. It takes 8d6 fire damage on a failed save, or half as much damage on a successful one. On a failed save, the target also burns for the spell's duration. The burning target sheds bright light in a 30-foot radius and dim light for an additional 30 feet and takes 8d6 fire damage at the start of each of its turns. -# 253. - Insect Plague (V,S) level 5 Conjuration [Concentration] [SOL] +# 252. - Insect Plague (V,S) level 5 Conjuration [Concentration] [SOL] **[Cleric, Druid, Sorcerer]** Summons a sphere of biting insects. -# 254. - Mantle of Thorns (V,S) level 5 Transmutation [Concentration] [UB] +# 253. - Mantle of Thorns (V,S) level 5 Transmutation [Concentration] [UB] **[Druid]** Surround yourself with an aura of thorns. Those that start or walk through take 2d8 piercing damage. This damage scales at higher levels by 1d8 per slot. -# 255. - Mass Cure Wounds (V,S) level 5 Evocation [SOL] +# 254. - Mass Cure Wounds (V,S) level 5 Evocation [SOL] **[Bard, Cleric, Druid]** Heals up to 6 creatures. -# 256. - Mind Twist (V,S) level 5 Enchantment [SOL] +# 255. - Mind Twist (V,S) level 5 Enchantment [SOL] **[Sorcerer, Warlock, Wizard]** Causes massive psychic damage to all creatures around you, and incapacitates them if they fail their INT saving throw. -# 257. - Raise Dead (M,V,S) level 5 Necromancy [SOL] +# 256. - Raise Dead (M,V,S) level 5 Necromancy [SOL] **[Bard, Cleric, Paladin]** Brings one creature back to life, up to 10 days after death. -# 258. - *Skill Empowerment* © (V,S) level 5 Divination [UB] +# 257. - *Skill Empowerment* © (V,S) level 5 Divination [UB] **[Artificer, Bard, Sorcerer, Wizard]** Your magic deepens a creature's understanding of its own talent. You touch one willing creature and give it expertise in one skill of your choice; until the spell ends, the creature doubles its proficiency bonus for ability checks it makes that use the chosen skill. For 1 hour, you have proficiency in the chosen skill. The spell ends early if you cast it again. You must choose a skill in which the target is proficient and that isn't already benefiting from expertise. -# 259. - Sonic Boom (V,S) level 5 Evocation [UB] +# 258. - Sonic Boom (V,S) level 5 Evocation [UB] **[Sorcerer, Wizard]** A small orb the same color as the balloon used appears at a point you choose within range then expands with a loud crack into an explosion of force. Each creature in a 30-foot radius must make a Strength saving throw. A target is pushed up to 30 feet away from the center and dealt 6d8 thunder damage on a failed save, or half as much damage and no movement on a successful one. -# 260. - *Steel Wind Strike* © (M,S) level 5 Conjuration [UB] +# 259. - *Steel Wind Strike* © (M,S) level 5 Conjuration [UB] **[Ranger, Wizard]** You flourish the weapon used in the casting and then vanish to strike like the wind. Choose up to five creatures you can see within range. Make a melee spell attack against each target. On a hit, a target takes 6d10 force damage. You can then teleport to an unoccupied space you can see within 5 feet of one of the targets you hit or missed. -# 261. - *Swift Quiver* © (M,V,S) level 5 Transmutation [Concentration] [UB] +# 260. - *Swift Quiver* © (M,V,S) level 5 Transmutation [Concentration] [UB] **[Ranger]** You transmute your quiver so it automatically makes the ammunition leap into your hand when you reach for it. On each of your turns until the spell ends, you can use a bonus action to make two attacks with a ranged weapon. -# 262. - *Synaptic Static* © (V) level 5 Evocation [UB] +# 261. - *Synaptic Static* © (V) level 5 Evocation [UB] **[Bard, Sorcerer, Warlock, Wizard]** You choose a point within range and cause psychic energy to explode there. Each creature in a 20-foot-radius sphere centered on that point must make an Intelligence saving throw. A target takes 8d6 psychic damage on a failed save, or half as much damage on a successful After a failed save, a target has muddled thoughts for 1 minute. During that time, it rolls a d6 and subtracts the number rolled from all its attack rolls and ability checks. The target can make an Intelligence saving throw at the end of each of its turns, ending the effect on itself on a success. -# 263. - *Telekinesis* © (V,S) level 5 Transmutation [Concentration] [UB] +# 262. - *Telekinesis* © (V,S) level 5 Transmutation [Concentration] [UB] **[Sorcerer, Wizard]** You can try to move a Huge or smaller creature. Make an ability check with your spellcasting ability contested by the creature's Strength check. If you win the contest, you move the creature up to 30 feet in any direction, but not beyond the range of this spell. Until the end of your next turn, the creature is restrained in your telekinetic grip. On subsequent rounds, you can use your action to attempt to maintain your telekinetic grip on the creature by repeating the contest, or target a new creature, ending the restrained effect on the previously affected creature. -# 264. - Blade Barrier (V,S) level 6 Evocation [Concentration] [SOL] +# 263. - Blade Barrier (V,S) level 6 Evocation [Concentration] [SOL] **[Cleric]** Conjures a wall of razor sharp blades which causes 6d10 slashing damage to anyone crossing it -# 265. - Chain Lightning (V,S) level 6 Evocation [SOL] +# 264. - Chain Lightning (V,S) level 6 Evocation [SOL] **[Sorcerer, Wizard]** Target a creature with lightning, which can arc to 3 other targets within 6 cells. -# 266. - Circle of Death (M,V,S) level 6 Necromancy [SOL] +# 265. - Circle of Death (M,V,S) level 6 Necromancy [SOL] **[Sorcerer, Warlock, Wizard]** A sphere of negative energy causes Necrotic damage from a point you choose -# 267. - Conjure Fey (V,S) level 6 Conjuration [Concentration] [SOL] +# 266. - Conjure Fey (V,S) level 6 Conjuration [Concentration] [SOL] **[Druid, Warlock]** Conjures a fey creature of challenge rating 1 to 6 to fight alongside you. If you lose concentration, the creature stays but becomes hostile. -# 268. - Disintegrate (V,S) level 6 Transmutation [SOL] +# 267. - Disintegrate (V,S) level 6 Transmutation [SOL] **[Sorcerer, Wizard]** Causes massive force damage on the target, which can be disintegrated if reduced to 0 hit points -# 269. - Eyebite (V,S) level 6 Necromancy [Concentration] [SOL] +# 268. - Eyebite (V,S) level 6 Necromancy [Concentration] [SOL] **[Bard, Sorcerer, Warlock, Wizard]** Your eyes gain a specific property which can target a creature each turn -# 270. - *Fizban's Platinum Shield* © (M,V,S) level 6 Abjuration [Concentration] [UB] +# 269. - *Fizban's Platinum Shield* © (M,V,S) level 6 Abjuration [Concentration] [UB] **[Sorcerer, Wizard]** @@ -1634,24 +1628,30 @@ You create a field of silvery light that surrounds a creature of your choice wit • If the creature is subjected to an effect that allows it to make a Dexterity saving throw to take only half damage, the creature instead takes no damage if it succeeds on the saving throw, and only half damage if it fails. As a bonus action on subsequent turns, you can move the field to another creature within 60 feet of the field. -# 271. - Flash Freeze (V,S) level 6 Evocation [UB] +# 270. - Flash Freeze (V,S) level 6 Evocation [UB] **[Druid, Sorcerer, Warlock]** You attempt to encase a creature you can see within range in a prison of solid ice. The target must make a Dexterity saving throw. On a failed save, the target takes 10d6 cold damage and becomes restrained in layers of thick ice. On a successful save, the target takes half as much damage and is not restrained. The spell can only be used on creatures up to large size. To break out, the restrained target can make a Strength check as an action against your spell save DC. On success, the target escapes and is no longer restrained. When you cast this spell using a spell slot of 7th level or higher, the cold damage increases by 2d6 for each slot level above 6th. -# 272. - Freezing Sphere (V,S) level 6 Evocation [SOL] +# 271. - Freezing Sphere (V,S) level 6 Evocation [SOL] **[Wizard]** Toss a huge ball of cold energy that explodes on impact -# 273. - Globe Of Invulnerability (V,S) level 6 Abjuration [Concentration] [SOL] +# 272. - Globe Of Invulnerability (V,S) level 6 Abjuration [Concentration] [SOL] **[Sorcerer, Wizard]** A sphere surrounding you prevents any spell up to 5th level to affect anyone inside it. +# 273. - *Gravity Fissure* © (V,S) level 6 Evocation [UB] + +**[Wizard]** + +You manifest a ravine of gravitational energy in a line originating from you that is 100 feet long and 5 feet wide. Each creature in that line must make a Constitution saving throw, taking 8d8 force damage on a failed save, or half as much damage on a successful one. Each creature within 10 feet of the line but not in it must succeed on a Constitution saving throw or take 8d8 force damage and be pulled toward the line until the creature is in its area. When you cast this spell using a slot of 7th level or higher, the damage increases by 1d8 for each slot level above 6th. + # 274. - Harm (V,S) level 6 Necromancy [SOL] **[Cleric]** diff --git a/SolastaUnfinishedBusiness/ChangelogHistory.txt b/SolastaUnfinishedBusiness/ChangelogHistory.txt index d3c7b8bac8..dba0a1b147 100644 --- a/SolastaUnfinishedBusiness/ChangelogHistory.txt +++ b/SolastaUnfinishedBusiness/ChangelogHistory.txt @@ -3,10 +3,11 @@ - added Character > General 'Add the Fall Prone action to all playable races' - added Character > Rules > 'Allow allies to perceive Ranger GloomStalker when in natural darkness' - added Character > Rules > 'Enable push and pull motion effects to also work on up/down axis' -- added Create Bonfire, Magic Stone [wip], Command, Dissonant Whispers, Holy Weapon, Swift Quiver, and Glibness spells +- added Create Bonfire, Command, Dissonant Whispers, Holy Weapon, Swift Quiver, Gravity Fissure, and Glibness spells - added Interface > Dungeon Maker > 'Enable variable placeholders on descriptions' - added Interface > Game UI > 'Enable CTRL click-drag to bypass quest items checks on drop' - fixed Ashardalon's Stride spell doing multiple damages to same target on same round +- fixed auto powers displaying on action bar under others group [VANILLA] - fixed Barbarian Sundering Blow interaction with Call Lightning - fixed Bardic Inspiration, Indomitable Resistances, and Legendary Resistances save logic - fixed Bend Luck, Flash of Genius, Inspiring Protection, Shield Master, and Weal/Woe reaction consumption From 1d137615a0e2a730637201d71b7221636ad3922f Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sat, 14 Sep 2024 13:52:47 -0700 Subject: [PATCH 178/212] add Gravity Fissure drag to origin line behavior --- .../CharacterActionMagicEffectPatcher.cs | 6 + .../Spells/SpellBuildersLevel06.cs | 118 +++++++++++++++++- 2 files changed, 123 insertions(+), 1 deletion(-) diff --git a/SolastaUnfinishedBusiness/Patches/CharacterActionMagicEffectPatcher.cs b/SolastaUnfinishedBusiness/Patches/CharacterActionMagicEffectPatcher.cs index 59202be5b5..8d0011f72c 100644 --- a/SolastaUnfinishedBusiness/Patches/CharacterActionMagicEffectPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/CharacterActionMagicEffectPatcher.cs @@ -21,6 +21,9 @@ namespace SolastaUnfinishedBusiness.Patches; [UsedImplicitly] public static class CharacterActionMagicEffectPatcher { + internal static readonly List CoveredFloorPositions = []; + internal static readonly List AffectedFloorPositions = []; + [HarmonyPatch(typeof(CharacterActionMagicEffect), nameof(CharacterActionMagicEffect.MagicEffectExecuteOnPositions))] [UsedImplicitly] public static class MagicEffectExecuteOnPositions_Patch @@ -577,6 +580,9 @@ private static IEnumerator ExecuteImpl(CharacterActionMagicEffect __instance) actionParams.HasMagneticTargeting, actingCharacter, coveredPositions, + CoveredFloorPositions, + null, + AffectedFloorPositions, groundOnly: effectDescription.AffectOnlyGround); } diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel06.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel06.cs index 058ccdfaba..7420654e69 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel06.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel06.cs @@ -1,15 +1,19 @@ using System.Collections; using System.Collections.Generic; +using System.Linq; using SolastaUnfinishedBusiness.Api.GameExtensions; using SolastaUnfinishedBusiness.Behaviors; +using SolastaUnfinishedBusiness.Behaviors.Specific; using SolastaUnfinishedBusiness.Builders; using SolastaUnfinishedBusiness.Builders.Features; using SolastaUnfinishedBusiness.CustomUI; using SolastaUnfinishedBusiness.Interfaces; using SolastaUnfinishedBusiness.Models; +using SolastaUnfinishedBusiness.Patches; using SolastaUnfinishedBusiness.Properties; using SolastaUnfinishedBusiness.Subclasses; using SolastaUnfinishedBusiness.Validators; +using TA; using UnityEngine.AddressableAssets; using static ActionDefinitions; using static RuleDefinitions; @@ -192,8 +196,35 @@ internal static SpellDefinition BuildGravityFissure() { const string NAME = "GravityFissure"; + var power = FeatureDefinitionPowerBuilder + .Create($"Power{NAME}") + .SetGuiPresentationNoContent(true) + .SetUsesFixed(ActivationTime.NoCost) + .SetShowCasting(false) + .SetEffectDescription( + EffectDescriptionBuilder + .Create() + .SetTargetingData(Side.All, RangeType.Distance, 6, TargetType.IndividualsUnique) + .SetSavingThrowData(false, AttributeDefinitions.Constitution, true, + EffectDifficultyClassComputation.SpellCastingFeature) + .SetEffectForms( + EffectFormBuilder + .Create() + .HasSavingThrow(EffectSavingThrowType.Negates) + .SetDamageForm(DamageTypeForce, 8, DieType.D8) + .Build(), + EffectFormBuilder + .Create() + .HasSavingThrow(EffectSavingThrowType.Negates) + .SetMotionForm(MotionForm.MotionType.DragToOrigin, 2) + .Build()) + .SetParticleEffectParameters(GravitySlam) + .SetImpactEffectParameters(ArcaneSword) + .Build()) + .AddToDB(); + var spell = SpellDefinitionBuilder - .Create($"{NAME}HigherPlane") + .Create($"{NAME}") .SetGuiPresentation(Category.Spell, Sprites.GetSprite(NAME, Resources.GravityFissure, 128)) .SetSchoolOfMagic(SchoolOfMagicDefinitions.SchoolEvocation) .SetSpellLevel(6) @@ -215,13 +246,98 @@ internal static SpellDefinition BuildGravityFissure() .HasSavingThrow(EffectSavingThrowType.HalfDamage) .SetDamageForm(DamageTypeForce, 8, DieType.D8) .Build()) + .SetParticleEffectParameters(GravitySlam) + .SetImpactEffectParameters(ArcaneSword) .Build()) + .AddCustomSubFeatures(new PowerOrSpellFinishedByMeGravityFissure(power)) .AddToDB(); return spell; } + private sealed class PowerOrSpellFinishedByMeGravityFissure(FeatureDefinitionPower powerDrag) + : IPowerOrSpellFinishedByMe + { + public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, BaseDefinition baseDefinition) + { + var actingCharacter = action.ActingCharacter; + var placeholderPosition = new int3(800, 800, 800); + var locationCharacterService = ServiceRepository.GetService(); + var dummy = locationCharacterService.DummyCharacter; + + // only non affected contenders + var contendersAndPositions = + (Gui.Battle?.AllContenders ?? + locationCharacterService.PartyCharacters.Union(locationCharacterService.GuestCharacters)) + .Where(x => + x != actingCharacter && + !CharacterActionMagicEffectPatcher.AffectedFloorPositions.Contains(x.LocationPosition)) + .ToDictionary(x => x, _ => new Container(placeholderPosition)); + + foreach (var contenderAndPosition in contendersAndPositions) + { + var contender = contenderAndPosition.Key; + var bestDragToPosition = contenderAndPosition.Value.Position; + + foreach (var affectedFloorPosition in CharacterActionMagicEffectPatcher.CoveredFloorPositions) + { + dummy.LocationPosition = affectedFloorPosition; + + if (!contender.IsWithinRange(dummy, 2)) + { + continue; + } + + var newDistance = DistanceCalculation.GetDistanceFromCharacters(contender, dummy); + + dummy.LocationPosition = bestDragToPosition; + + var currentDistance = DistanceCalculation.GetDistanceFromCharacters(contender, dummy); + + if (newDistance > currentDistance) + { + continue; + } + + contenderAndPosition.Value.Position = affectedFloorPosition; + } + } + + var actionService = ServiceRepository.GetService(); + var implementationService = ServiceRepository.GetService(); + var rulesetCharacter = actingCharacter.RulesetCharacter; + var usablePower = PowerProvider.Get(powerDrag, rulesetCharacter); + + // drag each selected contender to the closest position + foreach (var actionParams in contendersAndPositions + .Where(x => x.Value.Position != placeholderPosition) + .Select(x => new CharacterActionParams(actingCharacter, Id.SpendPower) + { + RulesetEffect = + implementationService.InstantiateEffectPower(rulesetCharacter, usablePower, false), + UsablePower = usablePower, + TargetCharacters = { x.Key }, + Positions = { x.Value.Position } + })) + { + actionService.ExecuteInstantSingleAction(actionParams); + } + + yield break; + } + + private sealed class Container + { + internal int3 Position; + + internal Container(int3 position) + { + Position = position; + } + } + } + #endregion #region Shelter From Energy From c5a0c6eaaf20783350f10d2bc89d8d1680dcaf88 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sat, 14 Sep 2024 16:21:06 -0700 Subject: [PATCH 179/212] improve Gravity Fissure spell --- .../PowerGravityFissure.json | 14 +-- .../SpellDefinition/GravityFissure.json | 2 +- .../Spells/SpellBuildersLevel06.cs | 97 +++++++++++++------ 3 files changed, 75 insertions(+), 38 deletions(-) diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerGravityFissure.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerGravityFissure.json index 55f08f9c67..7affe1a784 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerGravityFissure.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerGravityFissure.json @@ -148,7 +148,7 @@ "$type": "EffectParticleParameters, Assembly-CSharp", "casterParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "7b70493edfd42734b975cf604767e952", + "m_AssetGUID": "81560ac3813217d4d9fd281d5e73c234", "m_SubObjectName": "", "m_SubObjectType": "" }, @@ -184,7 +184,7 @@ }, "zoneParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "27a46eed70a684e42bf43db0fba210b9", + "m_AssetGUID": "", "m_SubObjectName": "", "m_SubObjectType": "" }, @@ -196,7 +196,7 @@ }, "impactParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "7f06ef11e32162e45925324de6f9e1d5", + "m_AssetGUID": "3e25fca5d3585174f9b7e20aca6ef3d9", "m_SubObjectName": "", "m_SubObjectType": "" }, @@ -360,12 +360,12 @@ "includeBaseDescription": false, "guiPresentation": { "$type": "GuiPresentation, Assembly-CSharp", - "hidden": true, - "title": "Feature/&NoContentTitle", - "description": "Feature/&NoContentTitle", + "hidden": false, + "title": "Spell/&GravityFissureTitle", + "description": "Spell/&GravityFissureDescription", "spriteReference": { "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", - "m_AssetGUID": "", + "m_AssetGUID": "543799d2-0a37-5662-8cb5-9ac355c09595", "m_SubObjectName": null, "m_SubObjectType": null }, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/GravityFissure.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/GravityFissure.json index 392229ed3d..d09935f891 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/GravityFissure.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/GravityFissure.json @@ -171,7 +171,7 @@ }, "zoneParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "b6820f3b2273d454c97a4c29dd5e50dd", + "m_AssetGUID": "", "m_SubObjectName": "", "m_SubObjectType": "" }, diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel06.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel06.cs index 7420654e69..26ca5f5857 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel06.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel06.cs @@ -196,9 +196,11 @@ internal static SpellDefinition BuildGravityFissure() { const string NAME = "GravityFissure"; + var sprite = Sprites.GetSprite(NAME, Resources.GravityFissure, 128); + var power = FeatureDefinitionPowerBuilder .Create($"Power{NAME}") - .SetGuiPresentationNoContent(true) + .SetGuiPresentation(NAME, Category.Spell, sprite) .SetUsesFixed(ActivationTime.NoCost) .SetShowCasting(false) .SetEffectDescription( @@ -218,14 +220,16 @@ internal static SpellDefinition BuildGravityFissure() .HasSavingThrow(EffectSavingThrowType.Negates) .SetMotionForm(MotionForm.MotionType.DragToOrigin, 2) .Build()) - .SetParticleEffectParameters(GravitySlam) - .SetImpactEffectParameters(ArcaneSword) + .SetImpactEffectParameters(Thunderwave) .Build()) .AddToDB(); + power.AddCustomSubFeatures( + ForcePushOrDragFromEffectPoint.Marker, new ModifyEffectDescriptionGravityFissure(power)); + var spell = SpellDefinitionBuilder .Create($"{NAME}") - .SetGuiPresentation(Category.Spell, Sprites.GetSprite(NAME, Resources.GravityFissure, 128)) + .SetGuiPresentation(Category.Spell, sprite) .SetSchoolOfMagic(SchoolOfMagicDefinitions.SchoolEvocation) .SetSpellLevel(6) .SetCastingTime(ActivationTime.Action) @@ -246,43 +250,66 @@ internal static SpellDefinition BuildGravityFissure() .HasSavingThrow(EffectSavingThrowType.HalfDamage) .SetDamageForm(DamageTypeForce, 8, DieType.D8) .Build()) - .SetParticleEffectParameters(GravitySlam) - .SetImpactEffectParameters(ArcaneSword) + .SetCasterEffectParameters(Thunderwave) + .SetImpactEffectParameters(Thunderwave) .Build()) .AddCustomSubFeatures(new PowerOrSpellFinishedByMeGravityFissure(power)) .AddToDB(); - return spell; } + private sealed class ModifyEffectDescriptionGravityFissure(FeatureDefinitionPower powerDrag) + : IModifyEffectDescription + { + public bool IsValid(BaseDefinition definition, RulesetCharacter character, EffectDescription effectDescription) + { + return definition == powerDrag; + } + + public EffectDescription GetEffectDescription( + BaseDefinition definition, + EffectDescription effectDescription, + RulesetCharacter character, + RulesetEffect rulesetEffect) + { + if (rulesetEffect is RulesetEffectPower rulesetEffectPower) + { + effectDescription.EffectForms[0].DamageForm.diceNumber = 2 + rulesetEffectPower.usablePower.saveDC; + } + + return effectDescription; + } + } + private sealed class PowerOrSpellFinishedByMeGravityFissure(FeatureDefinitionPower powerDrag) : IPowerOrSpellFinishedByMe { public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, BaseDefinition baseDefinition) { var actingCharacter = action.ActingCharacter; - var placeholderPosition = new int3(800, 800, 800); var locationCharacterService = ServiceRepository.GetService(); var dummy = locationCharacterService.DummyCharacter; - - // only non affected contenders var contendersAndPositions = (Gui.Battle?.AllContenders ?? locationCharacterService.PartyCharacters.Union(locationCharacterService.GuestCharacters)) .Where(x => + // don't include caster x != actingCharacter && + // don't include affected contenders !CharacterActionMagicEffectPatcher.AffectedFloorPositions.Contains(x.LocationPosition)) - .ToDictionary(x => x, _ => new Container(placeholderPosition)); + // create tab to select best position and set initial to far beyond + .ToDictionary(x => x, _ => new Container()); + // select the best position possible to force a drag to effect origin foreach (var contenderAndPosition in contendersAndPositions) { var contender = contenderAndPosition.Key; var bestDragToPosition = contenderAndPosition.Value.Position; - foreach (var affectedFloorPosition in CharacterActionMagicEffectPatcher.CoveredFloorPositions) + foreach (var coveredFloorPosition in CharacterActionMagicEffectPatcher.CoveredFloorPositions) { - dummy.LocationPosition = affectedFloorPosition; + dummy.LocationPosition = coveredFloorPosition; if (!contender.IsWithinRange(dummy, 2)) { @@ -300,41 +327,51 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, continue; } - contenderAndPosition.Value.Position = affectedFloorPosition; + contenderAndPosition.Value.Position = coveredFloorPosition; } } + // clean up the house as a good guest + dummy.LocationPosition = Container.PlaceHolderPosition; + + // issue drag to origin powers to all contenders with a non placeholder position var actionService = ServiceRepository.GetService(); var implementationService = ServiceRepository.GetService(); var rulesetCharacter = actingCharacter.RulesetCharacter; var usablePower = PowerProvider.Get(powerDrag, rulesetCharacter); + // store the effect level on save DC as easier to retrieve later + usablePower.saveDC = action.ActionParams.activeEffect.EffectLevel; + // drag each selected contender to the closest position - foreach (var actionParams in contendersAndPositions - .Where(x => x.Value.Position != placeholderPosition) - .Select(x => new CharacterActionParams(actingCharacter, Id.SpendPower) - { - RulesetEffect = - implementationService.InstantiateEffectPower(rulesetCharacter, usablePower, false), - UsablePower = usablePower, - TargetCharacters = { x.Key }, - Positions = { x.Value.Position } - })) + // ReSharper disable once ForeachCanBePartlyConvertedToQueryUsingAnotherGetEnumerator + foreach (var x in contendersAndPositions) { + if (x.Value.Position == Container.PlaceHolderPosition) + { + continue; + } + + var actionParams = new CharacterActionParams(actingCharacter, Id.PowerNoCost) + { + ActionModifiers = { new ActionModifier() }, + RulesetEffect = implementationService.InstantiateEffectPower(rulesetCharacter, usablePower, false), + UsablePower = usablePower, + TargetCharacters = { x.Key }, + Positions = { x.Value.Position } + }; + actionService.ExecuteInstantSingleAction(actionParams); } yield break; } + // container class to hold selected dragging position to avoid changing enumerator private sealed class Container { - internal int3 Position; - - internal Container(int3 position) - { - Position = position; - } + internal static readonly int3 PlaceHolderPosition = new(800, 800, 800); + internal int3 Position = PlaceHolderPosition; } } From df10c95005c585b8f5633d1cf2a6392e7abd03ee Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sat, 14 Sep 2024 18:23:16 -0700 Subject: [PATCH 180/212] support ForcePushOrDragFromEffectPoint from spend power --- .../Patches/CharacterActionSpendPowerPatcher.cs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/SolastaUnfinishedBusiness/Patches/CharacterActionSpendPowerPatcher.cs b/SolastaUnfinishedBusiness/Patches/CharacterActionSpendPowerPatcher.cs index b9ceb2d121..628f7174bf 100644 --- a/SolastaUnfinishedBusiness/Patches/CharacterActionSpendPowerPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/CharacterActionSpendPowerPatcher.cs @@ -244,6 +244,16 @@ private static IEnumerator ExecuteImpl(CharacterActionSpendPower __instance) var targetCurrentHitPoints = target.RulesetCharacter.CurrentHitPoints; //END BUGFIX + //BEGIN PATCH + var positions = __instance.ActionParams.Positions; + + var sourceDefinition = activePower.SourceDefinition; + if (positions.Count != 0 && sourceDefinition.HasSubFeatureOfType()) + { + applyFormsParams.position = positions[0]; + } + // END PATCH + implementationService.ApplyEffectForms( effectForms, applyFormsParams, From 427cb59a388a46d20b7bafb29c5851beaacc3a06 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sat, 14 Sep 2024 18:42:59 -0700 Subject: [PATCH 181/212] fix Gravity Fissure range on translations --- .../Translations/de/Spells/Spells06-de.txt | 2 +- .../Translations/en/Spells/Spells06-en.txt | 2 +- .../Translations/es/Spells/Spells06-es.txt | 2 +- .../Translations/fr/Spells/Spells06-fr.txt | 2 +- .../Translations/it/Spells/Spells06-it.txt | 2 +- .../Translations/ja/Spells/Spells06-ja.txt | 2 +- .../Translations/ko/Spells/Spells06-ko.txt | 2 +- .../Translations/pt-BR/Spells/Spells06-pt-BR.txt | 2 +- .../Translations/ru/Spells/Spells06-ru.txt | 2 +- .../Translations/zh-CN/Spells/Spells06-zh-CN.txt | 2 +- 10 files changed, 10 insertions(+), 10 deletions(-) diff --git a/SolastaUnfinishedBusiness/Translations/de/Spells/Spells06-de.txt b/SolastaUnfinishedBusiness/Translations/de/Spells/Spells06-de.txt index 5c3fafffb8..85b8340289 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Spells/Spells06-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Spells/Spells06-de.txt @@ -10,7 +10,7 @@ Spell/&FizbanPlatinumShieldDescription=Du erschaffst ein Feld aus silbrigem Lich Spell/&FizbanPlatinumShieldTitle=Fizbans Platinschild Spell/&FlashFreezeDescription=Sie versuchen, eine Kreatur, die Sie in Reichweite sehen können, in ein Gefängnis aus massivem Eis einzuschließen. Das Ziel muss einen Geschicklichkeitsrettungswurf machen. Bei einem misslungenen Rettungswurf erleidet das Ziel 10W6 Kälteschaden und wird in Schichten aus dickem Eis gefangen. Bei einem erfolgreichen Rettungswurf erleidet das Ziel nur halb so viel Schaden und wird nicht gefangen gehalten. Der Zauber kann nur auf Kreaturen bis zu großer Größe angewendet werden. Um auszubrechen, kann das gefangene Ziel einen Stärkewurf als Aktion gegen Ihren Zauberrettungswurf-SG machen. Bei Erfolg entkommt das Ziel und ist nicht länger gefangen. Wenn Sie diesen Zauber mit einem Zauberplatz der 7. Stufe oder höher wirken, erhöht sich der Kälteschaden um 2W6 für jede Platzstufe über der 6. Spell/&FlashFreezeTitle=Schockgefrieren -Spell/&GravityFissureDescription=Du erzeugst eine Schlucht aus Gravitationsenergie in einer Linie, die von dir ausgeht und 100 Fuß lang und 5 Fuß breit ist. Jede Kreatur in dieser Linie muss einen Konstitutionsrettungswurf machen und erleidet bei einem misslungenen Rettungswurf 8W8 Kraftschaden oder bei einem erfolgreichen Rettungswurf die Hälfte. Jede Kreatur innerhalb von 10 Fuß der Linie, die sich aber nicht darin befindet, muss einen Konstitutionsrettungswurf machen oder erleidet 8W8 Kraftschaden und wird zur Linie gezogen, bis die Kreatur in ihrem Bereich ist. Wenn du diesen Zauber mit einem Slot der 7. Stufe oder höher wirkst, erhöht sich der Schaden um 1W8 für jeden Slotlevel über dem 6. +Spell/&GravityFissureDescription=Du erzeugst eine Schlucht aus Gravitationsenergie in einer Linie, die von dir ausgeht und 60 Fuß lang und 5 Fuß breit ist. Jede Kreatur in dieser Linie muss einen Konstitutionsrettungswurf machen und erleidet bei einem misslungenen Rettungswurf 8W8 Kraftschaden oder bei einem erfolgreichen Rettungswurf die Hälfte. Jede Kreatur innerhalb von 10 Fuß der Linie, die sich aber nicht darin befindet, muss einen Konstitutionsrettungswurf machen oder erleidet 8W8 Kraftschaden und wird zur Linie gezogen, bis die Kreatur in ihrem Bereich ist. Wenn du diesen Zauber mit einem Slot der 7. Stufe oder höher wirkst, erhöht sich der Schaden um 1W8 für jeden Slot über der 6. Stufe. Spell/&GravityFissureTitle=Schwerkraftspalt Spell/&HeroicInfusionDescription=Sie verleihen sich Ausdauer und Kampfgeschick, angetrieben durch Magie. Bis der Zauber endet, können Sie keine Zauber wirken und Sie erhalten die folgenden Vorteile:\n• Sie erhalten 50 temporäre Trefferpunkte. Wenn welche davon übrig sind, wenn der Zauber endet, sind sie verloren.\n• Sie haben einen Vorteil bei Angriffswürfen, die Sie mit einfachen und Kampfwaffen machen.\n• Wenn Sie ein Ziel mit einem Waffenangriff treffen, erleidet dieses Ziel zusätzlichen Kraftschaden von 2W12.\n• Sie besitzen die Rüstungs-, Waffen- und Rettungswurffähigkeiten der Kämpferklasse.\n• Sie können zweimal angreifen, statt einmal, wenn Sie in Ihrem Zug die Angriffsaktion ausführen.\nUnmittelbar nachdem der Zauber endet, müssen Sie einen Konstitutionsrettungswurf DC 15 bestehen oder erleiden eine Stufe Erschöpfung. Spell/&HeroicInfusionTitle=Tensers Verwandlung diff --git a/SolastaUnfinishedBusiness/Translations/en/Spells/Spells06-en.txt b/SolastaUnfinishedBusiness/Translations/en/Spells/Spells06-en.txt index b923e11a36..f601282e78 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Spells/Spells06-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Spells/Spells06-en.txt @@ -10,7 +10,7 @@ Spell/&FizbanPlatinumShieldDescription=You create a field of silvery light that Spell/&FizbanPlatinumShieldTitle=Fizban's Platinum Shield Spell/&FlashFreezeDescription=You attempt to encase a creature you can see within range in a prison of solid ice. The target must make a Dexterity saving throw. On a failed save, the target takes 10d6 cold damage and becomes restrained in layers of thick ice. On a successful save, the target takes half as much damage and is not restrained. The spell can only be used on creatures up to large size. To break out, the restrained target can make a Strength check as an action against your spell save DC. On success, the target escapes and is no longer restrained. When you cast this spell using a spell slot of 7th level or higher, the cold damage increases by 2d6 for each slot level above 6th. Spell/&FlashFreezeTitle=Flash Freeze -Spell/&GravityFissureDescription=You manifest a ravine of gravitational energy in a line originating from you that is 100 feet long and 5 feet wide. Each creature in that line must make a Constitution saving throw, taking 8d8 force damage on a failed save, or half as much damage on a successful one. Each creature within 10 feet of the line but not in it must succeed on a Constitution saving throw or take 8d8 force damage and be pulled toward the line until the creature is in its area. When you cast this spell using a slot of 7th level or higher, the damage increases by 1d8 for each slot level above 6th. +Spell/&GravityFissureDescription=You manifest a ravine of gravitational energy in a line originating from you that is 60 feet long and 5 feet wide. Each creature in that line must make a Constitution saving throw, taking 8d8 force damage on a failed save, or half as much damage on a successful one. Each creature within 10 feet of the line but not in it must succeed on a Constitution saving throw or take 8d8 force damage and be pulled toward the line until the creature is in its area. When you cast this spell using a slot of 7th level or higher, the damage increases by 1d8 for each slot level above 6th. Spell/&GravityFissureTitle=Gravity Fissure Spell/&HeroicInfusionDescription=You endow yourself with endurance and martial prowess fueled by magic. Until the spell ends, you can't cast spells, and you gain the following benefits:\n• You gain 50 temporary hit points. If any of these remain when the spell ends, they are lost.\n• You have advantage on attack rolls that you make with simple and martial weapons.\n• When you hit a target with a weapon attack, that target takes an extra 2d12 force damage.\n• You have the Fighter class armor, weapons, and saving throws proficiencies.\n• You can attack twice, instead of once, when you take the Attack action on your turn.\nImmediately after the spell ends, you must succeed on a DC 15 Constitution saving throw or suffer one level of exhaustion. Spell/&HeroicInfusionTitle=Tenser's Transformation diff --git a/SolastaUnfinishedBusiness/Translations/es/Spells/Spells06-es.txt b/SolastaUnfinishedBusiness/Translations/es/Spells/Spells06-es.txt index ec88d808aa..71f4a4b87a 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Spells/Spells06-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Spells/Spells06-es.txt @@ -10,7 +10,7 @@ Spell/&FizbanPlatinumShieldDescription=Creas un campo de luz plateada que rodea Spell/&FizbanPlatinumShieldTitle=Escudo de platino de Fizban Spell/&FlashFreezeDescription=Intentas encerrar a una criatura que puedes ver dentro del alcance en una prisión de hielo sólido. El objetivo debe realizar una tirada de salvación de Destreza. Si falla la tirada, el objetivo sufre 10d6 puntos de daño por frío y queda inmovilizado en capas de hielo grueso. Si tiene éxito, el objetivo sufre la mitad de daño y no queda inmovilizado. El conjuro solo se puede usar en criaturas de tamaño grande. Para escapar, el objetivo inmovilizado puede realizar una prueba de Fuerza como acción contra la CD de tu tirada de salvación de conjuros. Si tiene éxito, el objetivo escapa y ya no queda inmovilizado. Cuando lanzas este conjuro usando un espacio de conjuro de nivel 7 o superior, el daño por frío aumenta en 2d6 por cada nivel de espacio por encima del 6. Spell/&FlashFreezeTitle=Congelación instantánea -Spell/&GravityFissureDescription=Manifiestas un barranco de energía gravitatoria en una línea que se origina desde ti y que tiene 100 pies de largo y 5 pies de ancho. Cada criatura en esa línea debe realizar una tirada de salvación de Constitución, recibiendo 8d8 puntos de daño por fuerza si falla la tirada, o la mitad de daño si tiene éxito. Cada criatura que se encuentre a 10 pies de la línea pero que no esté dentro de ella debe superar una tirada de salvación de Constitución o recibirá 8d8 puntos de daño por fuerza y ​​será atraída hacia la línea hasta que la criatura esté en su área. Cuando lanzas este conjuro usando un espacio de nivel 7 o superior, el daño aumenta en 1d8 por cada nivel de espacio por encima del 6. +Spell/&GravityFissureDescription=Manifiestas un barranco de energía gravitatoria en una línea que se origina desde ti y que tiene 60 pies de largo y 5 pies de ancho. Cada criatura en esa línea debe realizar una tirada de salvación de Constitución, recibiendo 8d8 puntos de daño por fuerza si falla la tirada, o la mitad de daño si tiene éxito. Cada criatura que se encuentre a 10 pies de la línea pero que no esté dentro de ella debe superar una tirada de salvación de Constitución o recibirá 8d8 puntos de daño por fuerza y ​​será atraída hacia la línea hasta que la criatura esté en su área. Cuando lanzas este conjuro usando un espacio de nivel 7 o superior, el daño aumenta en 1d8 por cada nivel de espacio por encima del 6. Spell/&GravityFissureTitle=Fisura de gravedad Spell/&HeroicInfusionDescription=Te dotas de resistencia y destreza marcial alimentadas por la magia. Hasta que el conjuro termine, no puedes lanzar conjuros, y obtienes los siguientes beneficios:\n• Obtienes 50 puntos de golpe temporales. Si alguno de estos permanece cuando el conjuro termina, se pierde.\n• Tienes ventaja en las tiradas de ataque que hagas con armas simples y marciales.\n• Cuando golpeas a un objetivo con un ataque de arma, ese objetivo sufre 2d12 puntos de daño de fuerza adicionales.\n• Tienes las competencias de armadura, armas y tiradas de salvación de la clase Guerrero.\n• Puedes atacar dos veces, en lugar de una, cuando realizas la acción de Ataque en tu turno.\nInmediatamente después de que el conjuro termine, debes tener éxito en una tirada de salvación de Constitución CD 15 o sufrir un nivel de agotamiento. Spell/&HeroicInfusionTitle=La transformación de Tenser diff --git a/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells06-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells06-fr.txt index aa898f6cbb..e81088e73d 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells06-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells06-fr.txt @@ -10,7 +10,7 @@ Spell/&FizbanPlatinumShieldDescription=Vous créez un champ de lumière argenté Spell/&FizbanPlatinumShieldTitle=Bouclier de platine de Fizban Spell/&FlashFreezeDescription=Vous tentez d'enfermer une créature visible à portée dans une prison de glace solide. La cible doit réussir un jet de sauvegarde de Dextérité. En cas d'échec, la cible subit 10d6 dégâts de froid et se retrouve emprisonnée dans d'épaisses couches de glace. En cas de réussite, la cible subit la moitié des dégâts et n'est plus emprisonnée. Le sort ne peut être utilisé que sur des créatures de grande taille. Pour s'échapper, la cible emprisonnée peut effectuer un test de Force en tant qu'action contre le DD de votre sauvegarde contre les sorts. En cas de réussite, la cible s'échappe et n'est plus emprisonnée. Lorsque vous lancez ce sort en utilisant un emplacement de sort de niveau 7 ou supérieur, les dégâts de froid augmentent de 2d6 pour chaque niveau d'emplacement au-dessus du niveau 6. Spell/&FlashFreezeTitle=Gel instantané -Spell/&GravityFissureDescription=Vous manifestez un ravin d'énergie gravitationnelle dans une ligne partant de vous et mesurant 30 mètres de long et 1,5 mètre de large. Chaque créature dans cette ligne doit réussir un jet de sauvegarde de Constitution, subissant 8d8 dégâts de force en cas d'échec, ou la moitié de ces dégâts en cas de réussite. Chaque créature à 3 mètres de la ligne mais qui n'en fait pas partie doit réussir un jet de sauvegarde de Constitution ou subir 8d8 dégâts de force et être attirée vers la ligne jusqu'à ce qu'elle soit dans sa zone. Lorsque vous lancez ce sort en utilisant un emplacement de niveau 7 ou supérieur, les dégâts augmentent de 1d8 pour chaque niveau d'emplacement au-dessus du niveau 6. +Spell/&GravityFissureDescription=Vous manifestez un ravin d'énergie gravitationnelle dans une ligne partant de vous et mesurant 18 mètres de long et 1,5 mètre de large. Chaque créature dans cette ligne doit réussir un jet de sauvegarde de Constitution, subissant 8d8 dégâts de force en cas d'échec, ou la moitié de ces dégâts en cas de réussite. Chaque créature à 3 mètres de la ligne mais qui n'y est pas doit réussir un jet de sauvegarde de Constitution ou subir 8d8 dégâts de force et être attirée vers la ligne jusqu'à ce qu'elle soit dans sa zone. Lorsque vous lancez ce sort en utilisant un emplacement de niveau 7 ou supérieur, les dégâts augmentent de 1d8 pour chaque niveau d'emplacement au-dessus du niveau 6. Spell/&GravityFissureTitle=Fissure gravitationnelle Spell/&HeroicInfusionDescription=Vous vous dote d'endurance et de prouesses martiales alimentées par la magie. Jusqu'à la fin du sort, vous ne pouvez pas lancer de sorts et vous obtenez les avantages suivants :\n• Vous gagnez 50 points de vie temporaires. S'il en reste à la fin du sort, ils sont perdus.\n• Vous avez l'avantage sur les jets d'attaque que vous effectuez avec des armes simples et martiales.\n• Lorsque vous touchez une cible avec une attaque d'arme, cette cible subit 2d12 dégâts de force supplémentaires.\n• Vous avez les compétences de classe Guerrier en armure, en armes et en jets de sauvegarde.\n• Vous pouvez attaquer deux fois, au lieu d'une, lorsque vous effectuez l'action Attaquer à votre tour.\nImmédiatement après la fin du sort, vous devez réussir un jet de sauvegarde de Constitution DD 15 ou subir un niveau d'épuisement. Spell/&HeroicInfusionTitle=Transformation de Tenser diff --git a/SolastaUnfinishedBusiness/Translations/it/Spells/Spells06-it.txt b/SolastaUnfinishedBusiness/Translations/it/Spells/Spells06-it.txt index 5986e018ed..f91460bd24 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Spells/Spells06-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Spells/Spells06-it.txt @@ -10,7 +10,7 @@ Spell/&FizbanPlatinumShieldDescription=Crei un campo di luce argentata che circo Spell/&FizbanPlatinumShieldTitle=Scudo di platino di Fizban Spell/&FlashFreezeDescription=Tenti di rinchiudere una creatura che puoi vedere entro il raggio d'azione in una prigione di ghiaccio solido. Il bersaglio deve effettuare un tiro salvezza su Destrezza. Se fallisce il tiro salvezza, il bersaglio subisce 10d6 danni da freddo e rimane trattenuto in strati di ghiaccio spesso. Se supera il tiro salvezza, il bersaglio subisce la metà dei danni e non è trattenuto. L'incantesimo può essere utilizzato solo su creature fino a grandi dimensioni. Per evadere, il bersaglio trattenuto può effettuare una prova di Forza come azione contro la CD del tiro salvezza dell'incantesimo. In caso di successo, il bersaglio fugge e non è più trattenuto. Quando lanci questo incantesimo usando uno slot incantesimo di 7° livello o superiore, i danni da freddo aumentano di 2d6 per ogni livello di slot superiore al 6°. Spell/&FlashFreezeTitle=Congelamento rapido -Spell/&GravityFissureDescription=Manifesti un burrone di energia gravitazionale in una linea che parte da te, lunga 100 piedi e larga 5 piedi. Ogni creatura in quella linea deve effettuare un tiro salvezza su Costituzione, subendo 8d8 danni da forza se fallisce il tiro salvezza, o la metà dei danni se lo supera. Ogni creatura entro 10 piedi dalla linea ma non al suo interno deve superare un tiro salvezza su Costituzione o subire 8d8 danni da forza ed essere tirata verso la linea finché non si trova nella sua area. Quando lanci questo incantesimo usando uno slot di 7° livello o superiore, il danno aumenta di 1d8 per ogni livello di slot superiore al 6°. +Spell/&GravityFissureDescription=Manifesti un burrone di energia gravitazionale in una linea che parte da te, lunga 60 piedi e larga 5 piedi. Ogni creatura in quella linea deve effettuare un tiro salvezza su Costituzione, subendo 8d8 danni da forza se fallisce il tiro salvezza, o la metà dei danni se lo supera. Ogni creatura entro 10 piedi dalla linea ma non al suo interno deve superare un tiro salvezza su Costituzione o subire 8d8 danni da forza ed essere tirata verso la linea finché non si trova nella sua area. Quando lanci questo incantesimo usando uno slot di 7° livello o superiore, il danno aumenta di 1d8 per ogni livello di slot superiore al 6°. Spell/&GravityFissureTitle=Fessura di gravità Spell/&HeroicInfusionDescription=Ti doti di resistenza e abilità marziale alimentate dalla magia. Finché l'incantesimo non finisce, non puoi lanciare incantesimi e ottieni i seguenti benefici:\n• Ottieni 50 punti ferita temporanei. Se ne rimangono quando l'incantesimo finisce, vengono persi.\n• Hai vantaggio sui tiri per colpire che effettui con armi semplici e da guerra.\n• Quando colpisci un bersaglio con un attacco con arma, quel bersaglio subisce 2d12 danni da forza extra.\n• Hai le competenze di classe Guerriero in armature, armi e tiri salvezza.\n• Puoi attaccare due volte, invece di una, quando esegui l'azione Attacco nel tuo turno.\nImmediatamente dopo la fine dell'incantesimo, devi superare un tiro salvezza su Costituzione CD 15 o subire un livello di esaurimento. Spell/&HeroicInfusionTitle=La trasformazione di Tenser diff --git a/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells06-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells06-ja.txt index 3eedb8f7e4..17ff16762d 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells06-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells06-ja.txt @@ -10,7 +10,7 @@ Spell/&FizbanPlatinumShieldDescription=範囲内の選択したクリーチャ Spell/&FizbanPlatinumShieldTitle=フィズバンのプラチナシールド Spell/&FlashFreezeDescription=あなたは範囲内に見える生き物を固い氷の牢獄に閉じ込めようとします。ターゲットは器用さセーヴィングスローを行わなければなりません。セーブに失敗すると、ターゲットは 10d6 の冷気ダメージを受け、厚い氷の層に拘束されます。セーブに成功すると、ターゲットは半分のダメージを受け、拘束されなくなります。この呪文は大きいサイズまでのクリーチャーにのみ使用できます。打開するために、拘束されたターゲットはあなたのスペルセーブ難易度に対するアクションとして筋力チェックを行うことができます。成功するとターゲットは逃走し、拘束されなくなります。 7 レベル以上の呪文スロットを使用してこの呪文を唱えると、冷気ダメージは 6 レベル以上のスロット レベルごとに 2d6 増加します。 Spell/&FlashFreezeTitle=フラッシュフリーズ -Spell/&GravityFissureDescription=君は、君自身から始まる長さ 100 フィート、幅 5 フィートの線に重力エネルギーの峡谷を顕現させる。その線上の各クリーチャーは耐久力セーヴィング スローを行わなければならず、失敗すると 8d8 の力場ダメージを受け、成功すると半分のダメージを受ける。線から 10 フィート以内にいるが線上にいない各クリーチャーは、耐久力セーヴィング スローに成功するか、8d8 の力場ダメージを受け、クリーチャーがその領域に入るまで線に向かって引き寄せられる。この呪文を 7 レベル以上のスロットを使用して発動すると、6 レベルを超えるスロット レベルごとにダメージが 1d8 増加する。 +Spell/&GravityFissureDescription=君は、君自身から始まる長さ 60 フィート、幅 5 フィートの線に重力エネルギーの峡谷を出現させる。その線上の各クリーチャーは耐久力セーヴィング スローを行わなければならず、失敗すると 8d8 の力場ダメージを受け、成功すると半分のダメージを受ける。線から 10 フィート以内にいるが線上にいない各クリーチャーは、耐久力セーヴィング スローに成功するか、8d8 の力場ダメージを受け、クリーチャーがその領域に入るまで線に向かって引き寄せられる。この呪文を 7 レベル以上のスロットを使用して発動する場合、ダメージは 6 レベルを超えるスロット レベルごとに 1d8 増加する。 Spell/&GravityFissureTitle=重力亀裂 Spell/&HeroicInfusionDescription=あなたは魔法によって強化された持久力と武勇を自分に与えます。呪文が終了するまで、呪文を唱えることはできませんが、次の利点が得られます:\n• 一時的に 50 ヒット ポイントを獲得します。呪文が終了するときにこれらのいずれかが残っている場合、それらは失われます。\n• 単純な武器と格闘武器を使って行う攻撃ロールでは有利です。\n• 武器攻撃でターゲットを攻撃すると、そのターゲットは次のダメージを受けます。追加の 2d12 フォース ダメージ。\n• ファイター クラスのアーマー、武器、セーヴィング スローの熟練度を持っています。\n• 自分のターンに攻撃アクションを行うと、1 回ではなく 2 回攻撃できます。\n呪文が終了した直後に、難易度 15 の耐久力セーヴィング スローに成功するか、1 レベルの疲労状態に陥る必要があります。 Spell/&HeroicInfusionTitle=テンサーの変身 diff --git a/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells06-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells06-ko.txt index 92a92b4899..b3137623bf 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells06-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells06-ko.txt @@ -10,7 +10,7 @@ Spell/&FizbanPlatinumShieldDescription=당신은 범위 내에서 당신이 선 Spell/&FizbanPlatinumShieldTitle=피즈반의 백금 방패 Spell/&FlashFreezeDescription=당신은 범위 내에서 볼 수 있는 생물을 단단한 얼음 감옥에 가두려고 합니다. 대상은 민첩 내성 굴림을 해야 합니다. 저장에 실패하면 대상은 10d6의 냉기 피해를 입고 두꺼운 얼음 층에 갇히게 됩니다. 내성에 성공하면 대상은 절반의 피해를 입고 구속되지 않습니다. 이 주문은 최대 크기의 생물에게만 사용할 수 있습니다. 탈출하기 위해, 제한된 목표는 당신의 주문 내성 DC에 대한 행동으로 힘 체크를 할 수 있습니다. 성공하면 대상은 탈출하고 더 이상 구속되지 않습니다. 7레벨 이상의 주문 슬롯을 사용하여 이 주문을 시전하면 6레벨 이상의 슬롯 레벨마다 냉기 피해가 2d6씩 증가합니다. Spell/&FlashFreezeTitle=플래시 프리즈 -Spell/&GravityFissureDescription=당신은 길이 100피트, 너비 5피트의 중력 에너지 협곡을 당신에게서 시작하는 선으로 나타냅니다. 그 선에 있는 각 생명체는 체력 구원 굴림을 해야 하며, 실패하면 8d8의 힘 피해를 입거나, 성공하면 절반의 피해를 입습니다. 선에서 10피트 이내에 있지만 선 안에 있지 않은 각 생명체는 체력 구원 굴림에 성공해야 하며, 실패하면 8d8의 힘 피해를 입고 생명체가 그 영역에 들어올 때까지 선으로 끌려갑니다. 7레벨 이상의 슬롯을 사용하여 이 주문을 시전하면, 6레벨 이상의 슬롯 레벨마다 피해가 1d8씩 증가합니다. +Spell/&GravityFissureDescription=당신은 길이 60피트, 너비 5피트의 중력 에너지 협곡을 당신에게서 시작하는 선으로 나타냅니다. 그 선에 있는 각 생명체는 체력 구원 굴림을 해야 하며, 실패하면 8d8의 힘 피해를 입거나, 성공하면 절반의 피해를 입습니다. 선에서 10피트 이내에 있지만 선 안에 있지 않은 각 생명체는 체력 구원 굴림에 성공해야 하며, 실패하면 8d8의 힘 피해를 입고 생명체가 그 영역에 들어올 때까지 선으로 끌려갑니다. 7레벨 이상의 슬롯을 사용하여 이 주문을 시전하면, 6레벨 이상의 슬롯 레벨마다 피해가 1d8씩 증가합니다. Spell/&GravityFissureTitle=중력 균열 Spell/&HeroicInfusionDescription=당신은 마법에 힘입어 지구력과 무술의 기량을 자신에게 부여합니다. 주문이 끝날 때까지 주문을 시전할 수 없으며 다음과 같은 이점을 얻습니다.\n• 임시 체력 50점을 얻습니다. 주문이 끝날 때 이들 중 하나라도 남아 있으면 잃게 됩니다.\n• 단순 무기와 군용 무기로 하는 공격 굴림에 이점이 있습니다.\n• 무기 공격으로 대상을 명중하면 해당 대상은 다음과 같은 공격을 받습니다. 추가 2d12 강제 피해.\n• 파이터 클래스 방어구, 무기 및 내성 굴림 능력이 있습니다.\n• 자신의 차례에 공격 행동을 취할 때 한 번이 아닌 두 번 공격할 수 있습니다.\n 주문이 끝난 직후, 당신은 DC 15 헌법 내성 굴림에 성공해야 하며, 그렇지 않으면 한 단계의 탈진을 겪어야 합니다. Spell/&HeroicInfusionTitle=텐서의 변환 diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells06-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells06-pt-BR.txt index 2b68c768b3..974cb66de1 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells06-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells06-pt-BR.txt @@ -10,7 +10,7 @@ Spell/&FizbanPlatinumShieldDescription=Você cria um campo de luz prateada que c Spell/&FizbanPlatinumShieldTitle=Escudo de Platina de Fizban Spell/&FlashFreezeDescription=Você tenta prender uma criatura que você pode ver dentro do alcance em uma prisão de gelo sólido. O alvo deve fazer um teste de resistência de Destreza. Em uma falha, o alvo sofre 10d6 de dano de frio e fica contido em camadas de gelo espesso. Em uma resistência bem-sucedida, o alvo sofre metade do dano e não fica contido. A magia só pode ser usada em criaturas de tamanho até grande. Para escapar, o alvo contido pode fazer um teste de Força como uma ação contra sua CD de resistência à magia. Em caso de sucesso, o alvo escapa e não fica mais contido. Quando você conjura esta magia usando um espaço de magia de 7º nível ou superior, o dano de frio aumenta em 2d6 para cada nível de espaço acima do 6º. Spell/&FlashFreezeTitle=Congelamento instantâneo -Spell/&GravityFissureDescription=Você manifesta uma ravina de energia gravitacional em uma linha originada de você que tem 100 pés de comprimento e 5 pés de largura. Cada criatura naquela linha deve fazer um teste de resistência de Constituição, sofrendo 8d8 de dano de força em um teste falho, ou metade do dano em um teste bem-sucedido. Cada criatura a 10 pés da linha, mas não dentro dela, deve ter sucesso em um teste de resistência de Constituição ou sofrer 8d8 de dano de força e ser puxada em direção à linha até que a criatura esteja em sua área. Quando você conjura esta magia usando um slot de 7º nível ou superior, o dano aumenta em 1d8 para cada nível de slot acima de 6º. +Spell/&GravityFissureDescription=Você manifesta uma ravina de energia gravitacional em uma linha originada de você que tem 60 pés de comprimento e 5 pés de largura. Cada criatura naquela linha deve fazer um teste de resistência de Constituição, sofrendo 8d8 de dano de força em um teste falho, ou metade do dano em um teste bem-sucedido. Cada criatura a 10 pés da linha, mas não dentro dela, deve ter sucesso em um teste de resistência de Constituição ou sofrer 8d8 de dano de força e ser puxada em direção à linha até que a criatura esteja em sua área. Quando você conjura esta magia usando um slot de 7º nível ou superior, o dano aumenta em 1d8 para cada nível de slot acima de 6º. Spell/&GravityFissureTitle=Fissura Gravitacional Spell/&HeroicInfusionDescription=Você se dota de resistência e destreza marcial alimentadas por magia. Até que a magia termine, você não pode conjurar magias e ganha os seguintes benefícios:\n• Você ganha 50 pontos de vida temporários. Se algum deles permanecer quando a magia terminar, eles serão perdidos.\n• Você tem vantagem em jogadas de ataque que fizer com armas simples e marciais.\n• Quando você atinge um alvo com um ataque de arma, esse alvo recebe 2d12 de dano de força extra.\n• Você tem as proficiências de armadura, armas e testes de resistência da classe Guerreiro.\n• Você pode atacar duas vezes, em vez de uma, quando realiza a ação Atacar no seu turno.\nImediatamente após o fim da magia, você deve ser bem-sucedido em um teste de resistência de Constituição CD 15 ou sofrer um nível de exaustão. Spell/&HeroicInfusionTitle=Transformação de Tenser diff --git a/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells06-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells06-ru.txt index 8b32ab9d44..2cc782912a 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells06-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells06-ru.txt @@ -10,7 +10,7 @@ Spell/&FizbanPlatinumShieldDescription=Вы создаёте поле сереб Spell/&FizbanPlatinumShieldTitle=Платиновый щит Физбана Spell/&FlashFreezeDescription=Вы пытаетесь заключить существо, которое видите в пределах дистанции, в темницу из твёрдого льда. Цель должна совершить спасбросок Ловкости. При провале цель получает 10d6 урона холодом и становится опутанной, покрываясь слоями толстого льда. При успешном спасброске цель получает в два раза меньше урона и не становится опутанной. Заклинание можно применять только к существам вплоть до большого размера. Чтобы освободиться, опутанная цель может действием совершить проверку Силы против Сл спасброска заклинания. При успехе цель освобождается и больше не является опутанной. Когда вы накладываете это заклинание, используя ячейку заклинания 7-го уровня или выше, урон от холода увеличивается на 2d6 за каждый уровень ячейки выше 6-го. Spell/&FlashFreezeTitle=Мгновенная заморозка -Spell/&GravityFissureDescription=Вы создаете овраг гравитационной энергии в исходящей от вас линии длиной 100 футов и шириной 5 футов. Каждое существо в этой линии должно сделать спасбросок Телосложения, получив 8d8 урона силой при провале или половину урона при успехе. Каждое существо в пределах 10 футов от линии, но не на ней, должно преуспеть в спасброске Телосложения или получить 8d8 урона силой и быть притянутым к линии, пока существо не окажется в ее области. Когда вы произносите это заклинание, используя слот 7-го уровня или выше, урон увеличивается на 1d8 за каждый уровень слота выше 6-го. +Spell/&GravityFissureDescription=Вы создаете овраг гравитационной энергии в исходящей от вас линии длиной 60 футов и шириной 5 футов. Каждое существо в этой линии должно сделать спасбросок Телосложения, получив 8d8 урона силой при провале или половину урона при успехе. Каждое существо в пределах 10 футов от линии, но не на ней, должно преуспеть в спасброске Телосложения или получить 8d8 урона силой и быть притянутым к линии, пока существо не окажется в ее области. Когда вы произносите это заклинание, используя слот 7-го уровня или выше, урон увеличивается на 1d8 за каждый уровень слота выше 6-го. Spell/&GravityFissureTitle=Гравитационная трещина Spell/&HeroicInfusionDescription=Вы наделяете себя выносливостью и воинской доблестью, подпитываемыми магией. Пока заклинание не закончится, вы не можете накладывать заклинания, но получаете следующие преимущества:\n• Вы получаете 50 временных хитов. Если какое-либо их количество остаётся, когда заклинание заканчивается, они теряются.\n• Вы совершаете с преимуществом все броски атаки, совершаемые простым или воинским оружием.\n• Когда вы попадаете по цели атакой оружием, она получает дополнительно 2d12 урона силовым полем.\n• Вы получаете владение всеми доспехами, оружием и спасбросками, присущими классу Воина.\n• Если вы в свой ход совершаете действие Атака, вы можете совершить две атаки вместо одной.\nСразу после того, как заклинание оканчивается, вы должны преуспеть в спасброске Телосложения Сл 15, иначе получите одну степень истощения. Spell/&HeroicInfusionTitle=Трансформация Тензера diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells06-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells06-zh-CN.txt index d4b8f2cf9f..cd80bf7cbf 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells06-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells06-zh-CN.txt @@ -10,7 +10,7 @@ Spell/&FizbanPlatinumShieldDescription=你创造一道闪着银光的力场, Spell/&FizbanPlatinumShieldTitle=费资本铂金盾 Spell/&FlashFreezeDescription=你试图将一个你能在范围内看到的生物关进坚固的冰牢里。目标必须进行敏捷豁免检定。如果豁免失败,目标会受到 10d6 的冷冻伤害,并被束缚在厚厚的冰层中。成功豁免后,目标将受到一半伤害并且不受束缚。该法术只能对上限为大型体型的生物使用。为了逃脱,被束缚的目标可以一个动作进行一次力量检定,对抗你的法术豁免 DC。成功后,目标将逃脱并不再受到束缚。当你使用 7 环或更高环阶的法术位施放此法术时,每高于 6 环的法术位环阶,冷冻伤害就会增加 2d6。 Spell/&FlashFreezeTitle=急冻术 -Spell/&GravityFissureDescription=你以你为起点,在一条长 100 英尺、宽 5 英尺的直线上显现出引力能量峡谷。该直线上的每个生物都必须进行体质豁免检定,豁免失败则受到 8d8 力场伤害,豁免成功则伤害减半。该直线 10 英尺范围内但不在该直线上的每个生物都必须通过体质豁免检定,否则将受到 8d8 力场伤害并被拉向该直线,直到该生物进入其区域。当你使用 7 级或更高级别的槽位施放此法术时,每高于 6 级槽位,伤害增加 1d8。 +Spell/&GravityFissureDescription=你以你为起点,在一条长 60 英尺、宽 5 英尺的直线上显现出引力能量峡谷。该直线上的每个生物都必须进行体质豁免检定,豁免失败则受到 8d8 力场伤害,豁免成功则伤害减半。该直线 10 英尺范围内但不在该直线上的每个生物都必须通过体质豁免检定,否则将受到 8d8 力场伤害并被拉向该直线,直到该生物进入其区域。当你使用 7 级或更高级别的槽位施放此法术时,每高于 6 级槽位,伤害增加 1d8。 Spell/&GravityFissureTitle=重力裂缝 Spell/&HeroicInfusionDescription=你赋予自己以魔法为燃料的耐力与武艺。在法术结束之前,你无法施展法术,并且你会获得以下好处:\n• 你获得 50 点临时生命值。如果法术结束时有未消耗的部分,则全部消失。\n• 你在使用简单武器和军用武器进行的攻击检定中具有优势。\n• 当你使用武器攻击击中目标时,该目标将受到额外的 2d12 力场伤害。\n• 你获得战士的护甲、武器和豁免熟练项。\n• 当你在自己的回合中采取攻击动作时,你可以攻击两次,而不是一次。\n法术结束后,你必须立即通过 DC 15 的体质豁免检定,否则会承受一级力竭。 Spell/&HeroicInfusionTitle=谭森变形术 From 2b6054a238101e2c927cb75ef20496181cd1a1a6 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sat, 14 Sep 2024 21:37:14 -0700 Subject: [PATCH 182/212] improve Gravity Fissure SFX and descriptions --- .../Api/DatabaseHelper-RELEASE.cs | 1 + .../Spells/SpellBuildersLevel06.cs | 29 ++++++++++++------- .../Translations/de/Spells/Spells06-de.txt | 2 +- .../Translations/en/Spells/Spells06-en.txt | 2 +- .../Translations/es/Spells/Spells06-es.txt | 2 +- .../Translations/fr/Spells/Spells06-fr.txt | 2 +- .../Translations/it/Spells/Spells06-it.txt | 2 +- .../Translations/ja/Spells/Spells06-ja.txt | 2 +- .../Translations/ko/Spells/Spells06-ko.txt | 2 +- .../pt-BR/Spells/Spells06-pt-BR.txt | 2 +- .../Translations/ru/Spells/Spells06-ru.txt | 2 +- .../zh-CN/Spells/Spells06-zh-CN.txt | 2 +- 12 files changed, 30 insertions(+), 20 deletions(-) diff --git a/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs b/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs index 280a68cad9..53c05fdc9c 100644 --- a/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs +++ b/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs @@ -3635,6 +3635,7 @@ internal static class SpellDefinitions internal static SpellDefinition DelayedBlastFireball { get; } = GetDefinition("DelayedBlastFireball"); + internal static SpellDefinition Earthquake { get; } = GetDefinition("Earthquake"); internal static SpellDefinition AcidArrow { get; } = GetDefinition("AcidArrow"); internal static SpellDefinition AcidSplash { get; } = GetDefinition("AcidSplash"); internal static SpellDefinition Aid { get; } = GetDefinition("Aid"); diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel06.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel06.cs index 26ca5f5857..10b4e3ea5c 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel06.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel06.cs @@ -220,7 +220,7 @@ internal static SpellDefinition BuildGravityFissure() .HasSavingThrow(EffectSavingThrowType.Negates) .SetMotionForm(MotionForm.MotionType.DragToOrigin, 2) .Build()) - .SetImpactEffectParameters(Thunderwave) + .SetImpactEffectParameters(Earthquake) .Build()) .AddToDB(); @@ -239,19 +239,24 @@ internal static SpellDefinition BuildGravityFissure() .SetVocalSpellSameType(VocalSpellSemeType.Attack) .SetEffectDescription( EffectDescriptionBuilder - .Create() - .SetTargetingData(Side.All, RangeType.Self, 0, TargetType.Line, 12) + .Create(Earthquake) + // only required to get the SFX in this particular scenario to activate + // deviates a bit from TT but not OP at all to have difficult terrain until end of turn + .SetDurationData(DurationType.Round) + .SetTargetingData(Side.All, RangeType.Self, 1, TargetType.Line, 12) .SetSavingThrowData(false, AttributeDefinitions.Constitution, true, EffectDifficultyClassComputation.SpellCastingFeature) .SetEffectAdvancement(EffectIncrementMethod.PerAdditionalSlotLevel, additionalDicePerIncrement: 1) + // only required to get the SFX in this particular scenario to activate + .SetRecurrentEffect(RecurrentEffect.OnActivation) .SetEffectForms( EffectFormBuilder .Create() .HasSavingThrow(EffectSavingThrowType.HalfDamage) .SetDamageForm(DamageTypeForce, 8, DieType.D8) - .Build()) - .SetCasterEffectParameters(Thunderwave) - .SetImpactEffectParameters(Thunderwave) + .Build(), + // only required to get the SFX in this particular scenario to activate + EffectFormBuilder.TopologyForm(TopologyForm.Type.DangerousZone, false)) .Build()) .AddCustomSubFeatures(new PowerOrSpellFinishedByMeGravityFissure(power)) .AddToDB(); @@ -301,14 +306,17 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, // create tab to select best position and set initial to far beyond .ToDictionary(x => x, _ => new Container()); + CharacterActionMagicEffectPatcher.CoveredFloorPositions.Reverse(); + // select the best position possible to force a drag to effect origin foreach (var contenderAndPosition in contendersAndPositions) { var contender = contenderAndPosition.Key; - var bestDragToPosition = contenderAndPosition.Value.Position; foreach (var coveredFloorPosition in CharacterActionMagicEffectPatcher.CoveredFloorPositions) { + var bestDragToPosition = contenderAndPosition.Value.Position; + dummy.LocationPosition = coveredFloorPosition; if (!contender.IsWithinRange(dummy, 2)) @@ -322,7 +330,7 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, var currentDistance = DistanceCalculation.GetDistanceFromCharacters(contender, dummy); - if (newDistance > currentDistance) + if (currentDistance - newDistance < 0) { continue; } @@ -352,10 +360,11 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, continue; } - var actionParams = new CharacterActionParams(actingCharacter, Id.PowerNoCost) + var actionParams = new CharacterActionParams(actingCharacter, Id.SpendPower) { ActionModifiers = { new ActionModifier() }, - RulesetEffect = implementationService.InstantiateEffectPower(rulesetCharacter, usablePower, false), + RulesetEffect = + implementationService.InstantiateEffectPower(rulesetCharacter, usablePower, false), UsablePower = usablePower, TargetCharacters = { x.Key }, Positions = { x.Value.Position } diff --git a/SolastaUnfinishedBusiness/Translations/de/Spells/Spells06-de.txt b/SolastaUnfinishedBusiness/Translations/de/Spells/Spells06-de.txt index 85b8340289..14fd8aa24d 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Spells/Spells06-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Spells/Spells06-de.txt @@ -10,7 +10,7 @@ Spell/&FizbanPlatinumShieldDescription=Du erschaffst ein Feld aus silbrigem Lich Spell/&FizbanPlatinumShieldTitle=Fizbans Platinschild Spell/&FlashFreezeDescription=Sie versuchen, eine Kreatur, die Sie in Reichweite sehen können, in ein Gefängnis aus massivem Eis einzuschließen. Das Ziel muss einen Geschicklichkeitsrettungswurf machen. Bei einem misslungenen Rettungswurf erleidet das Ziel 10W6 Kälteschaden und wird in Schichten aus dickem Eis gefangen. Bei einem erfolgreichen Rettungswurf erleidet das Ziel nur halb so viel Schaden und wird nicht gefangen gehalten. Der Zauber kann nur auf Kreaturen bis zu großer Größe angewendet werden. Um auszubrechen, kann das gefangene Ziel einen Stärkewurf als Aktion gegen Ihren Zauberrettungswurf-SG machen. Bei Erfolg entkommt das Ziel und ist nicht länger gefangen. Wenn Sie diesen Zauber mit einem Zauberplatz der 7. Stufe oder höher wirken, erhöht sich der Kälteschaden um 2W6 für jede Platzstufe über der 6. Spell/&FlashFreezeTitle=Schockgefrieren -Spell/&GravityFissureDescription=Du erzeugst eine Schlucht aus Gravitationsenergie in einer Linie, die von dir ausgeht und 60 Fuß lang und 5 Fuß breit ist. Jede Kreatur in dieser Linie muss einen Konstitutionsrettungswurf machen und erleidet bei einem misslungenen Rettungswurf 8W8 Kraftschaden oder bei einem erfolgreichen Rettungswurf die Hälfte. Jede Kreatur innerhalb von 10 Fuß der Linie, die sich aber nicht darin befindet, muss einen Konstitutionsrettungswurf machen oder erleidet 8W8 Kraftschaden und wird zur Linie gezogen, bis die Kreatur in ihrem Bereich ist. Wenn du diesen Zauber mit einem Slot der 7. Stufe oder höher wirkst, erhöht sich der Schaden um 1W8 für jeden Slot über der 6. Stufe. +Spell/&GravityFissureDescription=Du erzeugst eine Schlucht aus Gravitationsenergie in einer Linie, die von dir ausgeht, 60 Fuß lang und 5 Fuß breit ist und bis zum Ende deines Zuges zu schwierigem Gelände wird. Jede Kreatur in dieser Linie muss einen Konstitutionsrettungswurf machen und erleidet bei einem misslungenen Rettungswurf 8W8 Kraftschaden oder bei einem erfolgreichen Rettungswurf die Hälfte. Jede Kreatur innerhalb von 10 Fuß der Linie, die sich aber nicht darin befindet, muss einen Konstitutionsrettungswurf machen oder erleidet 8W8 Kraftschaden und wird zur Linie gezogen, bis die Kreatur in ihrem Bereich ist. Wenn du diesen Zauber mit einem Slot der 7. Stufe oder höher wirkst, erhöht sich der Schaden um 1W8 für jeden Slotlevel über dem 6. Spell/&GravityFissureTitle=Schwerkraftspalt Spell/&HeroicInfusionDescription=Sie verleihen sich Ausdauer und Kampfgeschick, angetrieben durch Magie. Bis der Zauber endet, können Sie keine Zauber wirken und Sie erhalten die folgenden Vorteile:\n• Sie erhalten 50 temporäre Trefferpunkte. Wenn welche davon übrig sind, wenn der Zauber endet, sind sie verloren.\n• Sie haben einen Vorteil bei Angriffswürfen, die Sie mit einfachen und Kampfwaffen machen.\n• Wenn Sie ein Ziel mit einem Waffenangriff treffen, erleidet dieses Ziel zusätzlichen Kraftschaden von 2W12.\n• Sie besitzen die Rüstungs-, Waffen- und Rettungswurffähigkeiten der Kämpferklasse.\n• Sie können zweimal angreifen, statt einmal, wenn Sie in Ihrem Zug die Angriffsaktion ausführen.\nUnmittelbar nachdem der Zauber endet, müssen Sie einen Konstitutionsrettungswurf DC 15 bestehen oder erleiden eine Stufe Erschöpfung. Spell/&HeroicInfusionTitle=Tensers Verwandlung diff --git a/SolastaUnfinishedBusiness/Translations/en/Spells/Spells06-en.txt b/SolastaUnfinishedBusiness/Translations/en/Spells/Spells06-en.txt index f601282e78..3d293d40b2 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Spells/Spells06-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Spells/Spells06-en.txt @@ -10,7 +10,7 @@ Spell/&FizbanPlatinumShieldDescription=You create a field of silvery light that Spell/&FizbanPlatinumShieldTitle=Fizban's Platinum Shield Spell/&FlashFreezeDescription=You attempt to encase a creature you can see within range in a prison of solid ice. The target must make a Dexterity saving throw. On a failed save, the target takes 10d6 cold damage and becomes restrained in layers of thick ice. On a successful save, the target takes half as much damage and is not restrained. The spell can only be used on creatures up to large size. To break out, the restrained target can make a Strength check as an action against your spell save DC. On success, the target escapes and is no longer restrained. When you cast this spell using a spell slot of 7th level or higher, the cold damage increases by 2d6 for each slot level above 6th. Spell/&FlashFreezeTitle=Flash Freeze -Spell/&GravityFissureDescription=You manifest a ravine of gravitational energy in a line originating from you that is 60 feet long and 5 feet wide. Each creature in that line must make a Constitution saving throw, taking 8d8 force damage on a failed save, or half as much damage on a successful one. Each creature within 10 feet of the line but not in it must succeed on a Constitution saving throw or take 8d8 force damage and be pulled toward the line until the creature is in its area. When you cast this spell using a slot of 7th level or higher, the damage increases by 1d8 for each slot level above 6th. +Spell/&GravityFissureDescription=You manifest a ravine of gravitational energy in a line originating from you that is 60 feet long, 5 feet wide, and becomes difficult terrain until the end of your turn. Each creature in that line must make a Constitution saving throw, taking 8d8 force damage on a failed save, or half as much damage on a successful one. Each creature within 10 feet of the line but not in it must succeed on a Constitution saving throw or take 8d8 force damage and be pulled toward the line until the creature is in its area. When you cast this spell using a slot of 7th level or higher, the damage increases by 1d8 for each slot level above 6th. Spell/&GravityFissureTitle=Gravity Fissure Spell/&HeroicInfusionDescription=You endow yourself with endurance and martial prowess fueled by magic. Until the spell ends, you can't cast spells, and you gain the following benefits:\n• You gain 50 temporary hit points. If any of these remain when the spell ends, they are lost.\n• You have advantage on attack rolls that you make with simple and martial weapons.\n• When you hit a target with a weapon attack, that target takes an extra 2d12 force damage.\n• You have the Fighter class armor, weapons, and saving throws proficiencies.\n• You can attack twice, instead of once, when you take the Attack action on your turn.\nImmediately after the spell ends, you must succeed on a DC 15 Constitution saving throw or suffer one level of exhaustion. Spell/&HeroicInfusionTitle=Tenser's Transformation diff --git a/SolastaUnfinishedBusiness/Translations/es/Spells/Spells06-es.txt b/SolastaUnfinishedBusiness/Translations/es/Spells/Spells06-es.txt index 71f4a4b87a..75fb83afef 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Spells/Spells06-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Spells/Spells06-es.txt @@ -10,7 +10,7 @@ Spell/&FizbanPlatinumShieldDescription=Creas un campo de luz plateada que rodea Spell/&FizbanPlatinumShieldTitle=Escudo de platino de Fizban Spell/&FlashFreezeDescription=Intentas encerrar a una criatura que puedes ver dentro del alcance en una prisión de hielo sólido. El objetivo debe realizar una tirada de salvación de Destreza. Si falla la tirada, el objetivo sufre 10d6 puntos de daño por frío y queda inmovilizado en capas de hielo grueso. Si tiene éxito, el objetivo sufre la mitad de daño y no queda inmovilizado. El conjuro solo se puede usar en criaturas de tamaño grande. Para escapar, el objetivo inmovilizado puede realizar una prueba de Fuerza como acción contra la CD de tu tirada de salvación de conjuros. Si tiene éxito, el objetivo escapa y ya no queda inmovilizado. Cuando lanzas este conjuro usando un espacio de conjuro de nivel 7 o superior, el daño por frío aumenta en 2d6 por cada nivel de espacio por encima del 6. Spell/&FlashFreezeTitle=Congelación instantánea -Spell/&GravityFissureDescription=Manifiestas un barranco de energía gravitatoria en una línea que se origina desde ti y que tiene 60 pies de largo y 5 pies de ancho. Cada criatura en esa línea debe realizar una tirada de salvación de Constitución, recibiendo 8d8 puntos de daño por fuerza si falla la tirada, o la mitad de daño si tiene éxito. Cada criatura que se encuentre a 10 pies de la línea pero que no esté dentro de ella debe superar una tirada de salvación de Constitución o recibirá 8d8 puntos de daño por fuerza y ​​será atraída hacia la línea hasta que la criatura esté en su área. Cuando lanzas este conjuro usando un espacio de nivel 7 o superior, el daño aumenta en 1d8 por cada nivel de espacio por encima del 6. +Spell/&GravityFissureDescription=Manifiestas un barranco de energía gravitatoria en una línea que se origina desde ti y que tiene 60 pies de largo y 5 pies de ancho, y se convierte en terreno difícil hasta el final de tu turno. Cada criatura en esa línea debe realizar una tirada de salvación de Constitución, recibiendo 8d8 puntos de daño por fuerza si falla la tirada, o la mitad de daño si tiene éxito. Cada criatura que se encuentre a 10 pies de la línea pero que no esté dentro de ella debe superar una tirada de salvación de Constitución o recibirá 8d8 puntos de daño por fuerza y ​​será atraída hacia la línea hasta que la criatura esté en su área. Cuando lanzas este conjuro usando un espacio de nivel 7 o superior, el daño aumenta en 1d8 por cada nivel de espacio por encima del 6. Spell/&GravityFissureTitle=Fisura de gravedad Spell/&HeroicInfusionDescription=Te dotas de resistencia y destreza marcial alimentadas por la magia. Hasta que el conjuro termine, no puedes lanzar conjuros, y obtienes los siguientes beneficios:\n• Obtienes 50 puntos de golpe temporales. Si alguno de estos permanece cuando el conjuro termina, se pierde.\n• Tienes ventaja en las tiradas de ataque que hagas con armas simples y marciales.\n• Cuando golpeas a un objetivo con un ataque de arma, ese objetivo sufre 2d12 puntos de daño de fuerza adicionales.\n• Tienes las competencias de armadura, armas y tiradas de salvación de la clase Guerrero.\n• Puedes atacar dos veces, en lugar de una, cuando realizas la acción de Ataque en tu turno.\nInmediatamente después de que el conjuro termine, debes tener éxito en una tirada de salvación de Constitución CD 15 o sufrir un nivel de agotamiento. Spell/&HeroicInfusionTitle=La transformación de Tenser diff --git a/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells06-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells06-fr.txt index e81088e73d..939d4f5c41 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells06-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells06-fr.txt @@ -10,7 +10,7 @@ Spell/&FizbanPlatinumShieldDescription=Vous créez un champ de lumière argenté Spell/&FizbanPlatinumShieldTitle=Bouclier de platine de Fizban Spell/&FlashFreezeDescription=Vous tentez d'enfermer une créature visible à portée dans une prison de glace solide. La cible doit réussir un jet de sauvegarde de Dextérité. En cas d'échec, la cible subit 10d6 dégâts de froid et se retrouve emprisonnée dans d'épaisses couches de glace. En cas de réussite, la cible subit la moitié des dégâts et n'est plus emprisonnée. Le sort ne peut être utilisé que sur des créatures de grande taille. Pour s'échapper, la cible emprisonnée peut effectuer un test de Force en tant qu'action contre le DD de votre sauvegarde contre les sorts. En cas de réussite, la cible s'échappe et n'est plus emprisonnée. Lorsque vous lancez ce sort en utilisant un emplacement de sort de niveau 7 ou supérieur, les dégâts de froid augmentent de 2d6 pour chaque niveau d'emplacement au-dessus du niveau 6. Spell/&FlashFreezeTitle=Gel instantané -Spell/&GravityFissureDescription=Vous manifestez un ravin d'énergie gravitationnelle dans une ligne partant de vous et mesurant 18 mètres de long et 1,5 mètre de large. Chaque créature dans cette ligne doit réussir un jet de sauvegarde de Constitution, subissant 8d8 dégâts de force en cas d'échec, ou la moitié de ces dégâts en cas de réussite. Chaque créature à 3 mètres de la ligne mais qui n'y est pas doit réussir un jet de sauvegarde de Constitution ou subir 8d8 dégâts de force et être attirée vers la ligne jusqu'à ce qu'elle soit dans sa zone. Lorsque vous lancez ce sort en utilisant un emplacement de niveau 7 ou supérieur, les dégâts augmentent de 1d8 pour chaque niveau d'emplacement au-dessus du niveau 6. +Spell/&GravityFissureDescription=Vous manifestez un ravin d'énergie gravitationnelle dans une ligne partant de vous, qui mesure 18 mètres de long et 1,5 mètre de large et qui devient un terrain difficile jusqu'à la fin de votre tour. Chaque créature dans cette ligne doit réussir un jet de sauvegarde de Constitution, subissant 8d8 dégâts de force en cas d'échec, ou la moitié de ces dégâts en cas de réussite. Chaque créature à 3 mètres de la ligne mais qui n'en fait pas partie doit réussir un jet de sauvegarde de Constitution ou subir 8d8 dégâts de force et être attirée vers la ligne jusqu'à ce qu'elle soit dans sa zone. Lorsque vous lancez ce sort en utilisant un emplacement de niveau 7 ou supérieur, les dégâts augmentent de 1d8 pour chaque niveau d'emplacement au-dessus du niveau 6. Spell/&GravityFissureTitle=Fissure gravitationnelle Spell/&HeroicInfusionDescription=Vous vous dote d'endurance et de prouesses martiales alimentées par la magie. Jusqu'à la fin du sort, vous ne pouvez pas lancer de sorts et vous obtenez les avantages suivants :\n• Vous gagnez 50 points de vie temporaires. S'il en reste à la fin du sort, ils sont perdus.\n• Vous avez l'avantage sur les jets d'attaque que vous effectuez avec des armes simples et martiales.\n• Lorsque vous touchez une cible avec une attaque d'arme, cette cible subit 2d12 dégâts de force supplémentaires.\n• Vous avez les compétences de classe Guerrier en armure, en armes et en jets de sauvegarde.\n• Vous pouvez attaquer deux fois, au lieu d'une, lorsque vous effectuez l'action Attaquer à votre tour.\nImmédiatement après la fin du sort, vous devez réussir un jet de sauvegarde de Constitution DD 15 ou subir un niveau d'épuisement. Spell/&HeroicInfusionTitle=Transformation de Tenser diff --git a/SolastaUnfinishedBusiness/Translations/it/Spells/Spells06-it.txt b/SolastaUnfinishedBusiness/Translations/it/Spells/Spells06-it.txt index f91460bd24..7c98a7cf29 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Spells/Spells06-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Spells/Spells06-it.txt @@ -10,7 +10,7 @@ Spell/&FizbanPlatinumShieldDescription=Crei un campo di luce argentata che circo Spell/&FizbanPlatinumShieldTitle=Scudo di platino di Fizban Spell/&FlashFreezeDescription=Tenti di rinchiudere una creatura che puoi vedere entro il raggio d'azione in una prigione di ghiaccio solido. Il bersaglio deve effettuare un tiro salvezza su Destrezza. Se fallisce il tiro salvezza, il bersaglio subisce 10d6 danni da freddo e rimane trattenuto in strati di ghiaccio spesso. Se supera il tiro salvezza, il bersaglio subisce la metà dei danni e non è trattenuto. L'incantesimo può essere utilizzato solo su creature fino a grandi dimensioni. Per evadere, il bersaglio trattenuto può effettuare una prova di Forza come azione contro la CD del tiro salvezza dell'incantesimo. In caso di successo, il bersaglio fugge e non è più trattenuto. Quando lanci questo incantesimo usando uno slot incantesimo di 7° livello o superiore, i danni da freddo aumentano di 2d6 per ogni livello di slot superiore al 6°. Spell/&FlashFreezeTitle=Congelamento rapido -Spell/&GravityFissureDescription=Manifesti un burrone di energia gravitazionale in una linea che parte da te, lunga 60 piedi e larga 5 piedi. Ogni creatura in quella linea deve effettuare un tiro salvezza su Costituzione, subendo 8d8 danni da forza se fallisce il tiro salvezza, o la metà dei danni se lo supera. Ogni creatura entro 10 piedi dalla linea ma non al suo interno deve superare un tiro salvezza su Costituzione o subire 8d8 danni da forza ed essere tirata verso la linea finché non si trova nella sua area. Quando lanci questo incantesimo usando uno slot di 7° livello o superiore, il danno aumenta di 1d8 per ogni livello di slot superiore al 6°. +Spell/&GravityFissureDescription=Manifesti un burrone di energia gravitazionale in una linea che parte da te, lunga 60 piedi, larga 5 piedi, e che diventa terreno difficile fino alla fine del tuo turno. Ogni creatura in quella linea deve effettuare un tiro salvezza su Costituzione, subendo 8d8 danni da forza se fallisce il tiro salvezza, o la metà dei danni se lo supera. Ogni creatura entro 10 piedi dalla linea ma non al suo interno deve superare un tiro salvezza su Costituzione o subire 8d8 danni da forza ed essere tirata verso la linea finché non si trova nella sua area. Quando lanci questo incantesimo usando uno slot di 7° livello o superiore, il danno aumenta di 1d8 per ogni livello di slot superiore al 6°. Spell/&GravityFissureTitle=Fessura di gravità Spell/&HeroicInfusionDescription=Ti doti di resistenza e abilità marziale alimentate dalla magia. Finché l'incantesimo non finisce, non puoi lanciare incantesimi e ottieni i seguenti benefici:\n• Ottieni 50 punti ferita temporanei. Se ne rimangono quando l'incantesimo finisce, vengono persi.\n• Hai vantaggio sui tiri per colpire che effettui con armi semplici e da guerra.\n• Quando colpisci un bersaglio con un attacco con arma, quel bersaglio subisce 2d12 danni da forza extra.\n• Hai le competenze di classe Guerriero in armature, armi e tiri salvezza.\n• Puoi attaccare due volte, invece di una, quando esegui l'azione Attacco nel tuo turno.\nImmediatamente dopo la fine dell'incantesimo, devi superare un tiro salvezza su Costituzione CD 15 o subire un livello di esaurimento. Spell/&HeroicInfusionTitle=La trasformazione di Tenser diff --git a/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells06-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells06-ja.txt index 17ff16762d..c7fdfb7327 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells06-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells06-ja.txt @@ -10,7 +10,7 @@ Spell/&FizbanPlatinumShieldDescription=範囲内の選択したクリーチャ Spell/&FizbanPlatinumShieldTitle=フィズバンのプラチナシールド Spell/&FlashFreezeDescription=あなたは範囲内に見える生き物を固い氷の牢獄に閉じ込めようとします。ターゲットは器用さセーヴィングスローを行わなければなりません。セーブに失敗すると、ターゲットは 10d6 の冷気ダメージを受け、厚い氷の層に拘束されます。セーブに成功すると、ターゲットは半分のダメージを受け、拘束されなくなります。この呪文は大きいサイズまでのクリーチャーにのみ使用できます。打開するために、拘束されたターゲットはあなたのスペルセーブ難易度に対するアクションとして筋力チェックを行うことができます。成功するとターゲットは逃走し、拘束されなくなります。 7 レベル以上の呪文スロットを使用してこの呪文を唱えると、冷気ダメージは 6 レベル以上のスロット レベルごとに 2d6 増加します。 Spell/&FlashFreezeTitle=フラッシュフリーズ -Spell/&GravityFissureDescription=君は、君自身から始まる長さ 60 フィート、幅 5 フィートの線に重力エネルギーの峡谷を出現させる。その線上の各クリーチャーは耐久力セーヴィング スローを行わなければならず、失敗すると 8d8 の力場ダメージを受け、成功すると半分のダメージを受ける。線から 10 フィート以内にいるが線上にいない各クリーチャーは、耐久力セーヴィング スローに成功するか、8d8 の力場ダメージを受け、クリーチャーがその領域に入るまで線に向かって引き寄せられる。この呪文を 7 レベル以上のスロットを使用して発動する場合、ダメージは 6 レベルを超えるスロット レベルごとに 1d8 増加する。 +Spell/&GravityFissureDescription=君自身を起点として長さ 60 フィート、幅 5 フィートの線上に重力エネルギーの峡谷を出現させ、君のターン終了時まで移動困難な地形とする。その線上の各クリーチャーは耐久力セーヴィング スローを行わなければならず、失敗すると 8d8 の力場ダメージを受け、成功すると半分のダメージを受ける。線から 10 フィート以内にいるが線上にいない各クリーチャーは耐久力セーヴィング スローに成功するか、8d8 の力場ダメージを受け、クリーチャーがその領域に入るまで線に向かって引き寄せられる。この呪文を 7 レベル以上のスロットを使用して発動する場合、ダメージは 6 レベルを超えるスロット レベルごとに 1d8 増加する。 Spell/&GravityFissureTitle=重力亀裂 Spell/&HeroicInfusionDescription=あなたは魔法によって強化された持久力と武勇を自分に与えます。呪文が終了するまで、呪文を唱えることはできませんが、次の利点が得られます:\n• 一時的に 50 ヒット ポイントを獲得します。呪文が終了するときにこれらのいずれかが残っている場合、それらは失われます。\n• 単純な武器と格闘武器を使って行う攻撃ロールでは有利です。\n• 武器攻撃でターゲットを攻撃すると、そのターゲットは次のダメージを受けます。追加の 2d12 フォース ダメージ。\n• ファイター クラスのアーマー、武器、セーヴィング スローの熟練度を持っています。\n• 自分のターンに攻撃アクションを行うと、1 回ではなく 2 回攻撃できます。\n呪文が終了した直後に、難易度 15 の耐久力セーヴィング スローに成功するか、1 レベルの疲労状態に陥る必要があります。 Spell/&HeroicInfusionTitle=テンサーの変身 diff --git a/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells06-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells06-ko.txt index b3137623bf..d5ef7952bf 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells06-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells06-ko.txt @@ -10,7 +10,7 @@ Spell/&FizbanPlatinumShieldDescription=당신은 범위 내에서 당신이 선 Spell/&FizbanPlatinumShieldTitle=피즈반의 백금 방패 Spell/&FlashFreezeDescription=당신은 범위 내에서 볼 수 있는 생물을 단단한 얼음 감옥에 가두려고 합니다. 대상은 민첩 내성 굴림을 해야 합니다. 저장에 실패하면 대상은 10d6의 냉기 피해를 입고 두꺼운 얼음 층에 갇히게 됩니다. 내성에 성공하면 대상은 절반의 피해를 입고 구속되지 않습니다. 이 주문은 최대 크기의 생물에게만 사용할 수 있습니다. 탈출하기 위해, 제한된 목표는 당신의 주문 내성 DC에 대한 행동으로 힘 체크를 할 수 있습니다. 성공하면 대상은 탈출하고 더 이상 구속되지 않습니다. 7레벨 이상의 주문 슬롯을 사용하여 이 주문을 시전하면 6레벨 이상의 슬롯 레벨마다 냉기 피해가 2d6씩 증가합니다. Spell/&FlashFreezeTitle=플래시 프리즈 -Spell/&GravityFissureDescription=당신은 길이 60피트, 너비 5피트의 중력 에너지 협곡을 당신에게서 시작하는 선으로 나타냅니다. 그 선에 있는 각 생명체는 체력 구원 굴림을 해야 하며, 실패하면 8d8의 힘 피해를 입거나, 성공하면 절반의 피해를 입습니다. 선에서 10피트 이내에 있지만 선 안에 있지 않은 각 생명체는 체력 구원 굴림에 성공해야 하며, 실패하면 8d8의 힘 피해를 입고 생명체가 그 영역에 들어올 때까지 선으로 끌려갑니다. 7레벨 이상의 슬롯을 사용하여 이 주문을 시전하면, 6레벨 이상의 슬롯 레벨마다 피해가 1d8씩 증가합니다. +Spell/&GravityFissureDescription=당신은 60피트 길이, 5피트 너비의 중력 에너지 협곡을 당신에게서 시작하여 선으로 나타내며, 턴이 끝날 때까지 어려운 지형이 됩니다. 그 선에 있는 각 생물은 체력 구원 굴림을 해야 하며, 실패하면 8d8의 힘 피해를 입거나, 성공하면 절반의 피해를 입습니다. 선에서 10피트 이내에 있지만 선 안에 있지 않은 각 생물은 체력 구원 굴림에 성공해야 하며, 실패하면 8d8의 힘 피해를 입고 생물이 그 영역에 들어올 때까지 선으로 끌려갑니다. 7레벨 이상의 슬롯을 사용하여 이 주문을 시전하면 6레벨 이상의 슬롯 레벨마다 피해가 1d8씩 증가합니다. Spell/&GravityFissureTitle=중력 균열 Spell/&HeroicInfusionDescription=당신은 마법에 힘입어 지구력과 무술의 기량을 자신에게 부여합니다. 주문이 끝날 때까지 주문을 시전할 수 없으며 다음과 같은 이점을 얻습니다.\n• 임시 체력 50점을 얻습니다. 주문이 끝날 때 이들 중 하나라도 남아 있으면 잃게 됩니다.\n• 단순 무기와 군용 무기로 하는 공격 굴림에 이점이 있습니다.\n• 무기 공격으로 대상을 명중하면 해당 대상은 다음과 같은 공격을 받습니다. 추가 2d12 강제 피해.\n• 파이터 클래스 방어구, 무기 및 내성 굴림 능력이 있습니다.\n• 자신의 차례에 공격 행동을 취할 때 한 번이 아닌 두 번 공격할 수 있습니다.\n 주문이 끝난 직후, 당신은 DC 15 헌법 내성 굴림에 성공해야 하며, 그렇지 않으면 한 단계의 탈진을 겪어야 합니다. Spell/&HeroicInfusionTitle=텐서의 변환 diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells06-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells06-pt-BR.txt index 974cb66de1..4609f0392e 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells06-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells06-pt-BR.txt @@ -10,7 +10,7 @@ Spell/&FizbanPlatinumShieldDescription=Você cria um campo de luz prateada que c Spell/&FizbanPlatinumShieldTitle=Escudo de Platina de Fizban Spell/&FlashFreezeDescription=Você tenta prender uma criatura que você pode ver dentro do alcance em uma prisão de gelo sólido. O alvo deve fazer um teste de resistência de Destreza. Em uma falha, o alvo sofre 10d6 de dano de frio e fica contido em camadas de gelo espesso. Em uma resistência bem-sucedida, o alvo sofre metade do dano e não fica contido. A magia só pode ser usada em criaturas de tamanho até grande. Para escapar, o alvo contido pode fazer um teste de Força como uma ação contra sua CD de resistência à magia. Em caso de sucesso, o alvo escapa e não fica mais contido. Quando você conjura esta magia usando um espaço de magia de 7º nível ou superior, o dano de frio aumenta em 2d6 para cada nível de espaço acima do 6º. Spell/&FlashFreezeTitle=Congelamento instantâneo -Spell/&GravityFissureDescription=Você manifesta uma ravina de energia gravitacional em uma linha originada de você que tem 60 pés de comprimento e 5 pés de largura. Cada criatura naquela linha deve fazer um teste de resistência de Constituição, sofrendo 8d8 de dano de força em um teste falho, ou metade do dano em um teste bem-sucedido. Cada criatura a 10 pés da linha, mas não dentro dela, deve ter sucesso em um teste de resistência de Constituição ou sofrer 8d8 de dano de força e ser puxada em direção à linha até que a criatura esteja em sua área. Quando você conjura esta magia usando um slot de 7º nível ou superior, o dano aumenta em 1d8 para cada nível de slot acima de 6º. +Spell/&GravityFissureDescription=Você manifesta uma ravina de energia gravitacional em uma linha originada de você que tem 60 pés de comprimento, 5 pés de largura e se torna terreno difícil até o final do seu turno. Cada criatura naquela linha deve fazer um teste de resistência de Constituição, sofrendo 8d8 de dano de força em um teste falho, ou metade do dano em um teste bem-sucedido. Cada criatura a 10 pés da linha, mas não dentro dela, deve ter sucesso em um teste de resistência de Constituição ou sofrer 8d8 de dano de força e ser puxada em direção à linha até que a criatura esteja em sua área. Quando você conjura esta magia usando um slot de 7º nível ou superior, o dano aumenta em 1d8 para cada nível de slot acima de 6º. Spell/&GravityFissureTitle=Fissura Gravitacional Spell/&HeroicInfusionDescription=Você se dota de resistência e destreza marcial alimentadas por magia. Até que a magia termine, você não pode conjurar magias e ganha os seguintes benefícios:\n• Você ganha 50 pontos de vida temporários. Se algum deles permanecer quando a magia terminar, eles serão perdidos.\n• Você tem vantagem em jogadas de ataque que fizer com armas simples e marciais.\n• Quando você atinge um alvo com um ataque de arma, esse alvo recebe 2d12 de dano de força extra.\n• Você tem as proficiências de armadura, armas e testes de resistência da classe Guerreiro.\n• Você pode atacar duas vezes, em vez de uma, quando realiza a ação Atacar no seu turno.\nImediatamente após o fim da magia, você deve ser bem-sucedido em um teste de resistência de Constituição CD 15 ou sofrer um nível de exaustão. Spell/&HeroicInfusionTitle=Transformação de Tenser diff --git a/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells06-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells06-ru.txt index 2cc782912a..74c3a796fe 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells06-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells06-ru.txt @@ -10,7 +10,7 @@ Spell/&FizbanPlatinumShieldDescription=Вы создаёте поле сереб Spell/&FizbanPlatinumShieldTitle=Платиновый щит Физбана Spell/&FlashFreezeDescription=Вы пытаетесь заключить существо, которое видите в пределах дистанции, в темницу из твёрдого льда. Цель должна совершить спасбросок Ловкости. При провале цель получает 10d6 урона холодом и становится опутанной, покрываясь слоями толстого льда. При успешном спасброске цель получает в два раза меньше урона и не становится опутанной. Заклинание можно применять только к существам вплоть до большого размера. Чтобы освободиться, опутанная цель может действием совершить проверку Силы против Сл спасброска заклинания. При успехе цель освобождается и больше не является опутанной. Когда вы накладываете это заклинание, используя ячейку заклинания 7-го уровня или выше, урон от холода увеличивается на 2d6 за каждый уровень ячейки выше 6-го. Spell/&FlashFreezeTitle=Мгновенная заморозка -Spell/&GravityFissureDescription=Вы создаете овраг гравитационной энергии в исходящей от вас линии длиной 60 футов и шириной 5 футов. Каждое существо в этой линии должно сделать спасбросок Телосложения, получив 8d8 урона силой при провале или половину урона при успехе. Каждое существо в пределах 10 футов от линии, но не на ней, должно преуспеть в спасброске Телосложения или получить 8d8 урона силой и быть притянутым к линии, пока существо не окажется в ее области. Когда вы произносите это заклинание, используя слот 7-го уровня или выше, урон увеличивается на 1d8 за каждый уровень слота выше 6-го. +Spell/&GravityFissureDescription=Вы создаете овраг гравитационной энергии в исходящей от вас линии, которая имеет длину 60 футов, ширину 5 футов и становится труднопроходимой местностью до конца вашего хода. Каждое существо в этой линии должно сделать спасбросок Телосложения, получив 8d8 урона силой при провале или половину урона при успехе. Каждое существо в пределах 10 футов от линии, но не на ней, должно преуспеть в спасброске Телосложения или получить 8d8 урона силой и быть притянутым к линии, пока существо не окажется в его области. Когда вы произносите это заклинание, используя слот 7-го уровня или выше, урон увеличивается на 1d8 за каждый уровень слота выше 6-го. Spell/&GravityFissureTitle=Гравитационная трещина Spell/&HeroicInfusionDescription=Вы наделяете себя выносливостью и воинской доблестью, подпитываемыми магией. Пока заклинание не закончится, вы не можете накладывать заклинания, но получаете следующие преимущества:\n• Вы получаете 50 временных хитов. Если какое-либо их количество остаётся, когда заклинание заканчивается, они теряются.\n• Вы совершаете с преимуществом все броски атаки, совершаемые простым или воинским оружием.\n• Когда вы попадаете по цели атакой оружием, она получает дополнительно 2d12 урона силовым полем.\n• Вы получаете владение всеми доспехами, оружием и спасбросками, присущими классу Воина.\n• Если вы в свой ход совершаете действие Атака, вы можете совершить две атаки вместо одной.\nСразу после того, как заклинание оканчивается, вы должны преуспеть в спасброске Телосложения Сл 15, иначе получите одну степень истощения. Spell/&HeroicInfusionTitle=Трансформация Тензера diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells06-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells06-zh-CN.txt index cd80bf7cbf..cab86c6187 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells06-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells06-zh-CN.txt @@ -10,7 +10,7 @@ Spell/&FizbanPlatinumShieldDescription=你创造一道闪着银光的力场, Spell/&FizbanPlatinumShieldTitle=费资本铂金盾 Spell/&FlashFreezeDescription=你试图将一个你能在范围内看到的生物关进坚固的冰牢里。目标必须进行敏捷豁免检定。如果豁免失败,目标会受到 10d6 的冷冻伤害,并被束缚在厚厚的冰层中。成功豁免后,目标将受到一半伤害并且不受束缚。该法术只能对上限为大型体型的生物使用。为了逃脱,被束缚的目标可以一个动作进行一次力量检定,对抗你的法术豁免 DC。成功后,目标将逃脱并不再受到束缚。当你使用 7 环或更高环阶的法术位施放此法术时,每高于 6 环的法术位环阶,冷冻伤害就会增加 2d6。 Spell/&FlashFreezeTitle=急冻术 -Spell/&GravityFissureDescription=你以你为起点,在一条长 60 英尺、宽 5 英尺的直线上显现出引力能量峡谷。该直线上的每个生物都必须进行体质豁免检定,豁免失败则受到 8d8 力场伤害,豁免成功则伤害减半。该直线 10 英尺范围内但不在该直线上的每个生物都必须通过体质豁免检定,否则将受到 8d8 力场伤害并被拉向该直线,直到该生物进入其区域。当你使用 7 级或更高级别的槽位施放此法术时,每高于 6 级槽位,伤害增加 1d8。 +Spell/&GravityFissureDescription=你以你为起点,在一条直线上显现出一个引力能量峡谷,长 60 英尺,宽 5 英尺,在你的回合结束前,该峡谷将变成困难地形。该直线上的每个生物都必须进行体质豁免检定,豁免失败则受到 8d8 力场伤害,豁免成功则伤害减半。该直线 10 英尺范围内但不在线内的生物必须通过体质豁免检定,否则将受到 8d8 力场伤害,并被拉向该直线,直到该生物进入其区域。当你使用 7 级或更高级别的槽位施放此法术时,每高于 6 级槽位,伤害增加 1d8。 Spell/&GravityFissureTitle=重力裂缝 Spell/&HeroicInfusionDescription=你赋予自己以魔法为燃料的耐力与武艺。在法术结束之前,你无法施展法术,并且你会获得以下好处:\n• 你获得 50 点临时生命值。如果法术结束时有未消耗的部分,则全部消失。\n• 你在使用简单武器和军用武器进行的攻击检定中具有优势。\n• 当你使用武器攻击击中目标时,该目标将受到额外的 2d12 力场伤害。\n• 你获得战士的护甲、武器和豁免熟练项。\n• 当你在自己的回合中采取攻击动作时,你可以攻击两次,而不是一次。\n法术结束后,你必须立即通过 DC 15 的体质豁免检定,否则会承受一级力竭。 Spell/&HeroicInfusionTitle=谭森变形术 From 3f7cb27a63971df9442303c67659964ce93db50d Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sat, 14 Sep 2024 22:18:49 -0700 Subject: [PATCH 183/212] prefer MyExecuteActionSpendPower on Cunning Strike Knock Out, Circle of Stars Twinkling Constellations, Stunning Strike, Merciless, Hunger of Hadar, Way of Discordance turmoil/discordance --- SolastaUnfinishedBusiness/Feats/OtherFeats.cs | 17 ++++++----------- .../Models/CharacterUAContext.cs | 14 +++++++------- .../Models/FixesContext.cs | 2 +- .../Spells/SpellBuildersLevel03.cs | 2 +- .../Subclasses/CircleOfTheCosmos.cs | 4 +--- .../Subclasses/WayOfTheDiscordance.cs | 2 +- 6 files changed, 17 insertions(+), 24 deletions(-) diff --git a/SolastaUnfinishedBusiness/Feats/OtherFeats.cs b/SolastaUnfinishedBusiness/Feats/OtherFeats.cs index 2d578b9042..0ce1c1f9d2 100644 --- a/SolastaUnfinishedBusiness/Feats/OtherFeats.cs +++ b/SolastaUnfinishedBusiness/Feats/OtherFeats.cs @@ -2492,7 +2492,6 @@ public bool CanIgnoreAoOOnSelf(RulesetCharacter defender, RulesetCharacter attac .Create() .SetDurationData(DurationType.Minute, 1) .SetTargetingData(Side.Enemy, RangeType.Distance, 1, TargetType.IndividualsUnique) - .ExcludeCaster() .SetSavingThrowData(false, AttributeDefinitions.Constitution, false, EffectDifficultyClassComputation.AbilityScoreAndProficiency, @@ -2527,7 +2526,7 @@ private static IEnumerator PoisonTarget(GameLocationCharacter me, GameLocationCh var usablePower = PowerProvider.Get(PowerFeatPoisonousSkin, rulesetMe); - me.MyExecuteActionPowerNoCost(usablePower, target); + me.MyExecuteActionSpendPower(usablePower, false, target); } //Poison character that shoves me @@ -2790,18 +2789,14 @@ private static FeatDefinition BuildMerciless() .Create() .SetTargetingData(Side.Enemy, RangeType.Touch, 0, TargetType.IndividualsUnique) .SetDurationData(DurationType.Round, 1, TurnOccurenceType.EndOfSourceTurn) - .SetSavingThrowData( - false, - AttributeDefinitions.Wisdom, - true, - EffectDifficultyClassComputation.AbilityScoreAndProficiency, - AttributeDefinitions.Strength, 8) + .SetSavingThrowData(false, AttributeDefinitions.Wisdom, true, + EffectDifficultyClassComputation.AbilityScoreAndProficiency, AttributeDefinitions.Strength, 8) .SetEffectForms( EffectFormBuilder .Create() - .SetConditionForm(ConditionDefinitions.ConditionFrightened, - ConditionForm.ConditionOperation.Add) .HasSavingThrow(EffectSavingThrowType.Negates) + .SetConditionForm( + ConditionDefinitions.ConditionFrightened, ConditionForm.ConditionOperation.Add) .Build()) .Build()) .AddToDB(); @@ -2852,7 +2847,7 @@ public IEnumerator HandleReducedToZeroHpByMe( withinRange: distance) .ToArray(); - attacker.MyExecuteActionPowerNoCost(usablePower, targets); + attacker.MyExecuteActionSpendPower(usablePower, false, targets); } public IEnumerator OnPhysicalAttackBeforeHitConfirmedOnEnemy( diff --git a/SolastaUnfinishedBusiness/Models/CharacterUAContext.cs b/SolastaUnfinishedBusiness/Models/CharacterUAContext.cs index a430765a49..26455df4f2 100644 --- a/SolastaUnfinishedBusiness/Models/CharacterUAContext.cs +++ b/SolastaUnfinishedBusiness/Models/CharacterUAContext.cs @@ -679,8 +679,8 @@ internal static void SwitchBarbarianFightingStyle() .SetEffectDescription( EffectDescriptionBuilder .Create() - .SetTargetingData(Side.Ally, RangeType.Self, 0, TargetType.Self) .SetDurationData(DurationType.Minute, 1) + .SetTargetingData(Side.Ally, RangeType.Self, 0, TargetType.Self) .SetEffectForms( EffectFormBuilder .Create() @@ -1221,8 +1221,8 @@ private static void BuildRogueCunningStrike() .SetEffectDescription( EffectDescriptionBuilder .Create() - .SetTargetingData(Side.Enemy, RangeType.Distance, 6, TargetType.IndividualsUnique) .SetDurationData(DurationType.Round, 1) + .SetTargetingData(Side.Enemy, RangeType.Distance, 6, TargetType.IndividualsUnique) .SetSavingThrowData(false, AttributeDefinitions.Dexterity, false, EffectDifficultyClassComputation.AbilityScoreAndProficiency, AttributeDefinitions.Dexterity, 8) .SetEffectForms( @@ -1245,8 +1245,8 @@ private static void BuildRogueCunningStrike() .SetEffectDescription( EffectDescriptionBuilder .Create() - .SetTargetingData(Side.Enemy, RangeType.Distance, 6, TargetType.IndividualsUnique) .SetDurationData(DurationType.Minute, 1) + .SetTargetingData(Side.Enemy, RangeType.Distance, 6, TargetType.IndividualsUnique) .SetSavingThrowData(false, AttributeDefinitions.Constitution, false, EffectDifficultyClassComputation.AbilityScoreAndProficiency, AttributeDefinitions.Dexterity, 8) .SetEffectForms( @@ -1344,8 +1344,8 @@ private static void BuildRogueCunningStrike() .SetEffectDescription( EffectDescriptionBuilder .Create() - .SetTargetingData(Side.Enemy, RangeType.Distance, 6, TargetType.IndividualsUnique) .SetDurationData(DurationType.Round, 1) + .SetTargetingData(Side.Enemy, RangeType.Distance, 6, TargetType.IndividualsUnique) .SetSavingThrowData(false, AttributeDefinitions.Constitution, false, EffectDifficultyClassComputation.AbilityScoreAndProficiency, AttributeDefinitions.Dexterity, 8) .SetEffectForms( @@ -1384,8 +1384,8 @@ private static void BuildRogueCunningStrike() .SetEffectDescription( EffectDescriptionBuilder .Create() - .SetTargetingData(Side.Enemy, RangeType.Distance, 6, TargetType.IndividualsUnique) .SetDurationData(DurationType.Minute, 1) + .SetTargetingData(Side.Enemy, RangeType.Distance, 6, TargetType.IndividualsUnique) .SetSavingThrowData(false, AttributeDefinitions.Constitution, false, EffectDifficultyClassComputation.AbilityScoreAndProficiency, AttributeDefinitions.Dexterity, 8) .SetEffectForms( @@ -1407,8 +1407,8 @@ private static void BuildRogueCunningStrike() .SetEffectDescription( EffectDescriptionBuilder .Create() - .SetTargetingData(Side.Enemy, RangeType.Distance, 6, TargetType.IndividualsUnique) .SetDurationData(DurationType.Round, 1) + .SetTargetingData(Side.Enemy, RangeType.Distance, 6, TargetType.IndividualsUnique) .SetSavingThrowData(false, AttributeDefinitions.Dexterity, false, EffectDifficultyClassComputation.AbilityScoreAndProficiency, AttributeDefinitions.Dexterity, 8) .SetEffectForms( @@ -1623,7 +1623,7 @@ private IEnumerator HandleKnockOut(GameLocationCharacter attacker, GameLocationC var rulesetAttacker = attacker.RulesetCharacter; var usablePower = PowerProvider.Get(powerKnockOutApply, rulesetAttacker); - attacker.MyExecuteActionPowerNoCost(usablePower, defender); + attacker.MyExecuteActionSpendPower(usablePower, false, defender); } } diff --git a/SolastaUnfinishedBusiness/Models/FixesContext.cs b/SolastaUnfinishedBusiness/Models/FixesContext.cs index 3ba2e99fde..a451ba3490 100644 --- a/SolastaUnfinishedBusiness/Models/FixesContext.cs +++ b/SolastaUnfinishedBusiness/Models/FixesContext.cs @@ -793,7 +793,7 @@ public IEnumerator OnPhysicalAttackFinishedByMe( yield break; } - attacker.MyExecuteActionPowerNoCost(usablePower, defender); + attacker.MyExecuteActionSpendPower(usablePower, false, defender); } public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, BaseDefinition baseDefinition) diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel03.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel03.cs index d91ed5035b..6eaf8f23e8 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel03.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel03.cs @@ -1206,7 +1206,7 @@ public void OnCharacterBeforeTurnEnded(GameLocationCharacter character) var caster = GameLocationCharacter.GetFromActor(rulesetCaster); var usablePower = PowerProvider.Get(powerHungerOfTheVoidDamageAcid, rulesetCaster); - caster.MyExecuteActionPowerNoCost(usablePower, character); + caster.MyExecuteActionSpendPower(usablePower, false, character); } public void OnCharacterTurnStarted(GameLocationCharacter character) diff --git a/SolastaUnfinishedBusiness/Subclasses/CircleOfTheCosmos.cs b/SolastaUnfinishedBusiness/Subclasses/CircleOfTheCosmos.cs index c54a5fba3f..961505f391 100644 --- a/SolastaUnfinishedBusiness/Subclasses/CircleOfTheCosmos.cs +++ b/SolastaUnfinishedBusiness/Subclasses/CircleOfTheCosmos.cs @@ -1267,9 +1267,7 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, effectPower.remainingRounds = remainingRounds; - actingCharacter.MyExecuteActionPowerNoCost(usablePower, actingCharacter); - - usablePower.RepayUse(); + actingCharacter.MyExecuteActionSpendPower(usablePower, false, actingCharacter); } } } diff --git a/SolastaUnfinishedBusiness/Subclasses/WayOfTheDiscordance.cs b/SolastaUnfinishedBusiness/Subclasses/WayOfTheDiscordance.cs index 4585b54eb4..aecea83cc9 100644 --- a/SolastaUnfinishedBusiness/Subclasses/WayOfTheDiscordance.cs +++ b/SolastaUnfinishedBusiness/Subclasses/WayOfTheDiscordance.cs @@ -427,7 +427,7 @@ private static void UsePower( var rulesetAttacker = attacker.RulesetCharacter; var usablePower = PowerProvider.Get(featureDefinitionPower, rulesetAttacker); - attacker.MyExecuteActionPowerNoCost(usablePower, defender); + attacker.MyExecuteActionSpendPower(usablePower, false, defender); } } From 6055bda8ad090687f0111b675899bf1cbeaa3de2 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sat, 14 Sep 2024 23:53:29 -0700 Subject: [PATCH 184/212] validate myExecutionActionSpendPower usages --- .../Subclasses/OathOfThunder.cs | 4 ++-- .../Subclasses/PathOfTheElements.cs | 2 +- .../Subclasses/PathOfTheReaver.cs | 2 +- .../Subclasses/PathOfTheWildMagic.cs | 2 +- .../Subclasses/PathOfTheYeoman.cs | 8 ++++---- .../Subclasses/RangerSkyWarrior.cs | 2 +- .../Subclasses/RoguishArcaneScoundrel.cs | 2 +- .../Subclasses/SorcerousFieldManipulator.cs | 9 +++------ .../Subclasses/WayOfTheDiscordance.cs | 12 ++++++------ .../Subclasses/WayOfTheDragon.cs | 2 +- .../Subclasses/WayOfTheStormSoul.cs | 5 ++--- .../Subclasses/WayOfTheWealAndWoe.cs | 2 +- .../Subclasses/WizardWarMagic.cs | 3 +-- 13 files changed, 25 insertions(+), 30 deletions(-) diff --git a/SolastaUnfinishedBusiness/Subclasses/OathOfThunder.cs b/SolastaUnfinishedBusiness/Subclasses/OathOfThunder.cs index 2eefe76498..32e771f094 100644 --- a/SolastaUnfinishedBusiness/Subclasses/OathOfThunder.cs +++ b/SolastaUnfinishedBusiness/Subclasses/OathOfThunder.cs @@ -178,7 +178,7 @@ public OathOfThunder() .SetEffectDescription( EffectDescriptionBuilder .Create() - .SetTargetingData(Side.Enemy, RangeType.Touch, 0, TargetType.IndividualsUnique) + .SetTargetingData(Side.Enemy, RangeType.Distance, 6, TargetType.IndividualsUnique) .SetSavingThrowData(true, AttributeDefinitions.Constitution, true, EffectDifficultyClassComputation.SpellCastingFeature) .SetEffectForms( @@ -353,7 +353,7 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, .GetContenders(attacker, hasToPerceiveTarget: true, withinRange: 2) .ToArray(); - attacker.MyExecuteActionPowerNoCost(usablePower, targets); + attacker.MyExecuteActionSpendPower(usablePower, targets); } } } diff --git a/SolastaUnfinishedBusiness/Subclasses/PathOfTheElements.cs b/SolastaUnfinishedBusiness/Subclasses/PathOfTheElements.cs index 4dc9efc56a..1f28c8460a 100644 --- a/SolastaUnfinishedBusiness/Subclasses/PathOfTheElements.cs +++ b/SolastaUnfinishedBusiness/Subclasses/PathOfTheElements.cs @@ -538,7 +538,7 @@ public void OnCharacterBeforeTurnEnded(GameLocationCharacter locationCharacter) var usablePower = PowerProvider.Get(powerDamage, rulesetAttacker); var targets = Gui.Battle.GetContenders(locationCharacter, withinRange: 1).ToArray(); - locationCharacter.MyExecuteActionSpendPower(usablePower, false, targets); + locationCharacter.MyExecuteActionSpendPower(usablePower, targets); } } diff --git a/SolastaUnfinishedBusiness/Subclasses/PathOfTheReaver.cs b/SolastaUnfinishedBusiness/Subclasses/PathOfTheReaver.cs index 9c806bf565..785fe6fefd 100644 --- a/SolastaUnfinishedBusiness/Subclasses/PathOfTheReaver.cs +++ b/SolastaUnfinishedBusiness/Subclasses/PathOfTheReaver.cs @@ -281,7 +281,7 @@ public IEnumerator OnPhysicalAttackFinishedOnMe( var usablePower = PowerProvider.Get(powerCorruptedBlood, rulesetDefender); - defender.MyExecuteActionSpendPower(usablePower, false, attacker); + defender.MyExecuteActionSpendPower(usablePower, attacker); } } } diff --git a/SolastaUnfinishedBusiness/Subclasses/PathOfTheWildMagic.cs b/SolastaUnfinishedBusiness/Subclasses/PathOfTheWildMagic.cs index 6e87689f61..a335bd021f 100644 --- a/SolastaUnfinishedBusiness/Subclasses/PathOfTheWildMagic.cs +++ b/SolastaUnfinishedBusiness/Subclasses/PathOfTheWildMagic.cs @@ -908,7 +908,7 @@ public IEnumerator HandleWildSurge(GameLocationCharacter character, GameLocation } else if (reactingOutOfTurn) { - character.MyExecuteActionSpendPower(usablePower, true, attacker); + character.MyExecuteActionSpendPower(usablePower, attacker); } } else diff --git a/SolastaUnfinishedBusiness/Subclasses/PathOfTheYeoman.cs b/SolastaUnfinishedBusiness/Subclasses/PathOfTheYeoman.cs index eb185e9e1a..4cd74fd96e 100644 --- a/SolastaUnfinishedBusiness/Subclasses/PathOfTheYeoman.cs +++ b/SolastaUnfinishedBusiness/Subclasses/PathOfTheYeoman.cs @@ -164,7 +164,7 @@ public PathOfTheYeoman() .SetEffectDescription( EffectDescriptionBuilder .Create() - .SetTargetingData(Side.Enemy, RangeType.Touch, 0, TargetType.IndividualsUnique) + .SetTargetingData(Side.Enemy, RangeType.Distance, 6, TargetType.IndividualsUnique) .SetSavingThrowData(false, AttributeDefinitions.Dexterity, true, EffectDifficultyClassComputation.AbilityScoreAndProficiency, AttributeDefinitions.Strength, 8) .SetEffectForms( @@ -182,7 +182,7 @@ public PathOfTheYeoman() powerMightyShot.AddCustomSubFeatures( ModifyPowerVisibility.Hidden, new UpgradeWeaponDice((_, damage) => (damage.diceNumber, DieType.D12, DieType.D12), IsLongBow), - new PhysicalAttackFinishedByMeMightyShot(powerMightyShot)); + new CustomBehaviorMightyShot(powerMightyShot)); // MAIN @@ -271,7 +271,7 @@ internal override bool IsValid( // Mighty Shot // - private sealed class PhysicalAttackFinishedByMeMightyShot(FeatureDefinitionPower powerMightyShot) + private sealed class CustomBehaviorMightyShot(FeatureDefinitionPower powerMightyShot) : IPhysicalAttackFinishedByMe, IModifyEffectDescription { public bool IsValid(BaseDefinition definition, RulesetCharacter character, EffectDescription effectDescription) @@ -326,7 +326,7 @@ public IEnumerator OnPhysicalAttackFinishedByMe( .GetContenders(defender, isOppositeSide: false, withinRange: 3) .ToArray(); - attacker.MyExecuteActionPowerNoCost(usablePower, targets); + attacker.MyExecuteActionSpendPower(usablePower, targets); } } } diff --git a/SolastaUnfinishedBusiness/Subclasses/RangerSkyWarrior.cs b/SolastaUnfinishedBusiness/Subclasses/RangerSkyWarrior.cs index 37723c4b4f..d42008899f 100644 --- a/SolastaUnfinishedBusiness/Subclasses/RangerSkyWarrior.cs +++ b/SolastaUnfinishedBusiness/Subclasses/RangerSkyWarrior.cs @@ -416,7 +416,7 @@ private void HandleConditionAndDamage(GameLocationCharacter attacker, bool criti var usablePower = PowerProvider.Get(powerDeathFromAbove, rulesetAttacker); - attacker.MyExecuteActionSpendPower(usablePower, false, targets); + attacker.MyExecuteActionSpendPower(usablePower, targets); } } } diff --git a/SolastaUnfinishedBusiness/Subclasses/RoguishArcaneScoundrel.cs b/SolastaUnfinishedBusiness/Subclasses/RoguishArcaneScoundrel.cs index 50531e1a97..a966ed8346 100644 --- a/SolastaUnfinishedBusiness/Subclasses/RoguishArcaneScoundrel.cs +++ b/SolastaUnfinishedBusiness/Subclasses/RoguishArcaneScoundrel.cs @@ -313,7 +313,7 @@ public IEnumerator OnMagicEffectFinishedByMe( attacker.UsedSpecialFeatures.TryAdd(AdditionalDamageRogueSneakAttack.Name, 1); - attacker.MyExecuteActionSpendPower(usablePower, false, [.. targets]); + attacker.MyExecuteActionSpendPower(usablePower, [.. targets]); } } diff --git a/SolastaUnfinishedBusiness/Subclasses/SorcerousFieldManipulator.cs b/SolastaUnfinishedBusiness/Subclasses/SorcerousFieldManipulator.cs index 89e91cff38..c40abb98a2 100644 --- a/SolastaUnfinishedBusiness/Subclasses/SorcerousFieldManipulator.cs +++ b/SolastaUnfinishedBusiness/Subclasses/SorcerousFieldManipulator.cs @@ -103,12 +103,9 @@ public SorcerousFieldManipulator() EffectDescriptionBuilder .Create() .SetDurationData(DurationType.Round, 1) - .SetTargetingData(Side.Enemy, RangeType.Touch, 0, TargetType.IndividualsUnique) + .SetTargetingData(Side.Enemy, RangeType.Distance, 6, TargetType.IndividualsUnique) .SetParticleEffectParameters(EldritchBlast) - .SetSavingThrowData( - true, - AttributeDefinitions.Strength, - true, + .SetSavingThrowData(true, AttributeDefinitions.Strength, true, EffectDifficultyClassComputation.SpellCastingFeature) .SetEffectForms( EffectFormBuilder @@ -248,7 +245,7 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, var usablePower = PowerProvider.Get(powerApply, rulesetAttacker); var targets = Gui.Battle.GetContenders(attacker, withinRange: 2).ToArray(); - attacker.MyExecuteActionPowerNoCost(usablePower, targets); + attacker.MyExecuteActionSpendPower(usablePower, targets); } } } diff --git a/SolastaUnfinishedBusiness/Subclasses/WayOfTheDiscordance.cs b/SolastaUnfinishedBusiness/Subclasses/WayOfTheDiscordance.cs index aecea83cc9..98cb80ad2a 100644 --- a/SolastaUnfinishedBusiness/Subclasses/WayOfTheDiscordance.cs +++ b/SolastaUnfinishedBusiness/Subclasses/WayOfTheDiscordance.cs @@ -59,7 +59,7 @@ public WayOfTheDiscordance() EffectDescriptionBuilder .Create() .SetDurationData(DurationType.Round) - .SetTargetingData(Side.Enemy, RangeType.Touch, 0, TargetType.IndividualsUnique) + .SetTargetingData(Side.Enemy, RangeType.Distance, 6, TargetType.IndividualsUnique) .SetEffectForms( EffectFormBuilder.ConditionForm(conditionDiscordance, ConditionOperation.Remove), EffectFormBuilder.ConditionForm(conditionDiscordance, ConditionOperation.Remove), @@ -173,7 +173,7 @@ public WayOfTheDiscordance() EffectDescriptionBuilder .Create() .SetDurationData(DurationType.Minute, 1) - .SetTargetingData(Side.Enemy, RangeType.Touch, 0, TargetType.IndividualsUnique) + .SetTargetingData(Side.Enemy, RangeType.Distance, 6, TargetType.IndividualsUnique) .SetSavingThrowData(false, Charisma, false, EffectDifficultyClassComputation.AbilityScoreAndProficiency, Wisdom, 8) .SetEffectForms( @@ -427,7 +427,7 @@ private static void UsePower( var rulesetAttacker = attacker.RulesetCharacter; var usablePower = PowerProvider.Get(featureDefinitionPower, rulesetAttacker); - attacker.MyExecuteActionSpendPower(usablePower, false, defender); + attacker.MyExecuteActionSpendPower(usablePower, defender); } } @@ -481,7 +481,7 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, var rulesetCharacter = actingCharacter.RulesetCharacter; var usablePowerDiscordance = PowerProvider.Get(powerDiscordance, rulesetCharacter); - actingCharacter.MyExecuteActionPowerNoCost(usablePowerDiscordance, [.. targets]); + actingCharacter.MyExecuteActionSpendPower(usablePowerDiscordance, [.. targets]); // Turmoil var monkLevel = rulesetCharacter.GetClassLevel(CharacterClassDefinitions.Monk); @@ -502,7 +502,7 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, var usablePowerTurmoil = PowerProvider.Get(powerTurmoil, rulesetCharacter); - actingCharacter.MyExecuteActionPowerNoCost(usablePowerTurmoil, [.. targets]); + actingCharacter.MyExecuteActionSpendPower(usablePowerTurmoil, [.. targets]); } } @@ -573,7 +573,7 @@ public IEnumerator HandleReducedToZeroHpByMeOrAlly( var usablePower = PowerProvider.Get(powerTidesOfChaos, rulesetAlly); - ally.MyExecuteActionSpendPower(usablePower, false, ally); + ally.MyExecuteActionSpendPower(usablePower, ally); } } } diff --git a/SolastaUnfinishedBusiness/Subclasses/WayOfTheDragon.cs b/SolastaUnfinishedBusiness/Subclasses/WayOfTheDragon.cs index 6bc60b70da..4ec3f80946 100644 --- a/SolastaUnfinishedBusiness/Subclasses/WayOfTheDragon.cs +++ b/SolastaUnfinishedBusiness/Subclasses/WayOfTheDragon.cs @@ -806,7 +806,7 @@ public IEnumerator OnPhysicalAttackFinishedOnMe( var usablePower = PowerProvider.Get(powerReactiveHideDamage, rulesetDefender); - defender.MyExecuteActionSpendPower(usablePower, false, attacker); + defender.MyExecuteActionSpendPower(usablePower, attacker); } public int HandlerPriority => 10; diff --git a/SolastaUnfinishedBusiness/Subclasses/WayOfTheStormSoul.cs b/SolastaUnfinishedBusiness/Subclasses/WayOfTheStormSoul.cs index 953f22f439..53243d8ee2 100644 --- a/SolastaUnfinishedBusiness/Subclasses/WayOfTheStormSoul.cs +++ b/SolastaUnfinishedBusiness/Subclasses/WayOfTheStormSoul.cs @@ -129,7 +129,7 @@ public WayOfTheStormSoul() .SetEffectDescription( EffectDescriptionBuilder .Create() - .SetTargetingData(Side.Enemy, RangeType.Distance, 0, TargetType.IndividualsUnique) + .SetTargetingData(Side.Enemy, RangeType.Distance, 6, TargetType.IndividualsUnique) .SetDurationData(DurationType.Round, 1, TurnOccurenceType.EndOfSourceTurn) .SetSavingThrowData(false, AttributeDefinitions.Dexterity, true, EffectDifficultyClassComputation.AbilityScoreAndProficiency, AttributeDefinitions.Wisdom, 8) @@ -147,7 +147,6 @@ public WayOfTheStormSoul() .SetImpactEffectParameters(PowerDomainElementalLightningBlade .EffectDescription.EffectParticleParameters.effectParticleReference) .Build()) - .AddCustomSubFeatures(ValidatorsValidatePowerUse.InCombat) .AddToDB(); var powerEyeOfTheStorm = FeatureDefinitionPowerBuilder @@ -364,7 +363,7 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, z.SourceGuid == rulesetAttacker.Guid)) .ToArray(); - attacker.MyExecuteActionPowerNoCost(usablePower, targets); + attacker.MyExecuteActionSpendPower(usablePower, targets); } } } diff --git a/SolastaUnfinishedBusiness/Subclasses/WayOfTheWealAndWoe.cs b/SolastaUnfinishedBusiness/Subclasses/WayOfTheWealAndWoe.cs index 901e30ee96..5f7f8eec55 100644 --- a/SolastaUnfinishedBusiness/Subclasses/WayOfTheWealAndWoe.cs +++ b/SolastaUnfinishedBusiness/Subclasses/WayOfTheWealAndWoe.cs @@ -275,7 +275,7 @@ private static void InflictMartialArtDieDamage( var rulesetAttacker = attacker.RulesetCharacter; var usablePower = PowerProvider.Get(power, rulesetAttacker); - attacker.MyExecuteActionSpendPower(usablePower, false, defender); + attacker.MyExecuteActionSpendPower(usablePower, defender); } } diff --git a/SolastaUnfinishedBusiness/Subclasses/WizardWarMagic.cs b/SolastaUnfinishedBusiness/Subclasses/WizardWarMagic.cs index a4042f814d..12592c4a00 100644 --- a/SolastaUnfinishedBusiness/Subclasses/WizardWarMagic.cs +++ b/SolastaUnfinishedBusiness/Subclasses/WizardWarMagic.cs @@ -126,7 +126,6 @@ public WizardWarMagic() .Create() .SetTargetingData(Side.Enemy, RangeType.Distance, 12, TargetType.IndividualsUnique, 3) .SetEffectForms(EffectFormBuilder.DamageForm(DamageTypeForce)) - //.SetCasterEffectParameters(FeatureDefinitionPowers.PowerSorcererDraconicDragonWingsSprout) .SetImpactEffectParameters(SpellDefinitions.ArcaneSword) .Build()) .AddToDB(); @@ -321,7 +320,7 @@ private void HandleDeflectionShroud(GameLocationCharacter helper) .Take(3) .ToArray(); - helper.MyExecuteActionSpendPower(usablePower, false, targets); + helper.MyExecuteActionSpendPower(usablePower, targets); } } From 2f23828830d56dc3c7f1e4268b6965c3424e9bd1 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sat, 14 Sep 2024 23:57:01 -0700 Subject: [PATCH 185/212] supports `IMagicEffectFinishedByMe` on metamagic --- .../Patches/CharacterActionMagicEffectPatcher.cs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/SolastaUnfinishedBusiness/Patches/CharacterActionMagicEffectPatcher.cs b/SolastaUnfinishedBusiness/Patches/CharacterActionMagicEffectPatcher.cs index 8d0011f72c..a146537c1f 100644 --- a/SolastaUnfinishedBusiness/Patches/CharacterActionMagicEffectPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/CharacterActionMagicEffectPatcher.cs @@ -903,6 +903,18 @@ private static IEnumerator ExecuteImpl(CharacterActionMagicEffect __instance) magicEffectFinishedByMe.OnMagicEffectFinishedByMe(__instance, actingCharacter, targets); } + //PATCH: supports `IMagicEffectFinishedByMe` on metamagic + if (hero != null) + { + foreach (var magicEffectFinishedByMe in hero.TrainedMetamagicOptions + .SelectMany(metamagic => + metamagic.GetAllSubFeaturesOfType())) + { + yield return + magicEffectFinishedByMe.OnMagicEffectFinishedByMe(__instance, actingCharacter, targets); + } + } + //PATCH: support for `IMagicEffectFinishedOnMe` foreach (var target in targets) { From 1c5bf3a9a24d804e23b48cd9377217b7ee0a3c68 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sat, 14 Sep 2024 23:58:17 -0700 Subject: [PATCH 186/212] prefer spend power for better MP --- .../GameLocationCharacterExtensions.cs | 22 ++--- .../StopPowerConcentrationProvider.cs | 2 +- .../Feats/MeleeCombatFeats.cs | 2 +- SolastaUnfinishedBusiness/Feats/OtherFeats.cs | 4 +- .../Models/CharacterUAContext.cs | 2 +- .../Models/FixesContext.cs | 2 +- .../Models/Level20SubclassesContext.cs | 4 +- .../Patches/CharacterActionShovePatcher.cs | 2 +- SolastaUnfinishedBusiness/Races/Malakh.cs | 2 +- .../Spells/SpellBuildersCantrips.cs | 6 +- .../Spells/SpellBuildersLevel01.cs | 33 +++---- .../Spells/SpellBuildersLevel03.cs | 30 +++--- .../Spells/SpellBuildersLevel04.cs | 4 +- .../Spells/SpellBuildersLevel08.cs | 15 +-- .../Builders/InvocationsBuilders.cs | 4 +- .../Subclasses/Builders/MetamagicBuilders.cs | 99 +++++++++++++------ .../Subclasses/CircleOfTheCosmos.cs | 2 +- .../Subclasses/CircleOfTheForestGuardian.cs | 2 +- .../Subclasses/CircleOfTheWildfire.cs | 10 +- .../Subclasses/CollegeOfAudacity.cs | 2 +- .../Subclasses/CollegeOfElegance.cs | 3 +- .../Subclasses/CollegeOfThespian.cs | 2 +- .../Subclasses/InnovationArtillerist.cs | 2 +- .../Subclasses/InnovationVitriolist.cs | 2 +- .../Subclasses/MartialArcaneArcher.cs | 2 +- .../Subclasses/OathOfDread.cs | 2 +- 26 files changed, 143 insertions(+), 119 deletions(-) diff --git a/SolastaUnfinishedBusiness/Api/GameExtensions/GameLocationCharacterExtensions.cs b/SolastaUnfinishedBusiness/Api/GameExtensions/GameLocationCharacterExtensions.cs index 574e82121b..29ea3f0463 100644 --- a/SolastaUnfinishedBusiness/Api/GameExtensions/GameLocationCharacterExtensions.cs +++ b/SolastaUnfinishedBusiness/Api/GameExtensions/GameLocationCharacterExtensions.cs @@ -75,9 +75,7 @@ internal static void MyExecuteActionDodge(this GameLocationCharacter character) } internal static void MyExecuteActionPowerNoCost( - this GameLocationCharacter character, - RulesetUsablePower usablePower, - params GameLocationCharacter[] targets) + this GameLocationCharacter character, RulesetUsablePower usablePower, params GameLocationCharacter[] targets) { var actionModifiers = GetActionModifiers(targets.Length); var actionService = ServiceRepository.GetService(); @@ -88,17 +86,15 @@ internal static void MyExecuteActionPowerNoCost( ActionModifiers = actionModifiers, RulesetEffect = implementationService.InstantiateEffectPower(rulesetCharacter, usablePower, false), UsablePower = usablePower, - targetCharacters = [.. targets] + targetCharacters = [.. targets], + SkipAnimationsAndVFX = true }; actionService.ExecuteAction(actionParams, null, true); } internal static void MyExecuteActionSpendPower( - this GameLocationCharacter character, - RulesetUsablePower usablePower, - bool skipAnimationAndVFX = false, - params GameLocationCharacter[] targets) + this GameLocationCharacter character, RulesetUsablePower usablePower, params GameLocationCharacter[] targets) { var actionService = ServiceRepository.GetService(); var implementationService = ServiceRepository.GetService(); @@ -109,7 +105,7 @@ internal static void MyExecuteActionSpendPower( RulesetEffect = implementationService.InstantiateEffectPower(rulesetCharacter, usablePower, false), UsablePower = usablePower, targetCharacters = [.. targets], - SkipAnimationsAndVFX = skipAnimationAndVFX + SkipAnimationsAndVFX = true }; actionService.ExecuteInstantSingleAction(actionParams); @@ -307,7 +303,8 @@ internal static IEnumerator MyReactToSpendPower( StringParameter2 = stringParameter2, RulesetEffect = implementationService.InstantiateEffectPower(character.RulesetCharacter, usablePower, false), - UsablePower = usablePower + UsablePower = usablePower, + SkipAnimationsAndVFX = true }; actionService.ReactToSpendPower(actionParams); @@ -351,7 +348,8 @@ internal static IEnumerator MyReactToSpendPowerBundle( RulesetEffect = implementationService.InstantiateEffectPower(character.RulesetCharacter, usablePower, false), UsablePower = usablePower, - targetCharacters = targets + targetCharacters = targets, + SkipAnimationsAndVFX = true }; var reactionRequest = new ReactionRequestSpendBundlePower(actionParams); @@ -813,7 +811,7 @@ internal static void HandleMonkMartialArts(this GameLocationCharacter instance) var usablePower = PowerProvider.Get(FeatureDefinitionPowers.PowerMonkMartialArts, rulesetCharacter); - instance.MyExecuteActionSpendPower(usablePower, true, instance); + instance.MyExecuteActionSpendPower(usablePower, instance); } internal static int GetAllowedMainAttacks(this GameLocationCharacter instance) diff --git a/SolastaUnfinishedBusiness/CustomUI/StopPowerConcentrationProvider.cs b/SolastaUnfinishedBusiness/CustomUI/StopPowerConcentrationProvider.cs index b79d788633..05da63a5ef 100644 --- a/SolastaUnfinishedBusiness/CustomUI/StopPowerConcentrationProvider.cs +++ b/SolastaUnfinishedBusiness/CustomUI/StopPowerConcentrationProvider.cs @@ -29,6 +29,6 @@ public void Stop(RulesetCharacter character) var locationCharacter = GameLocationCharacter.GetFromActor(character); var usablePower = PowerProvider.Get(StopPower, character); - locationCharacter.MyExecuteActionSpendPower(usablePower, true, locationCharacter); + locationCharacter.MyExecuteActionSpendPower(usablePower, locationCharacter); } } diff --git a/SolastaUnfinishedBusiness/Feats/MeleeCombatFeats.cs b/SolastaUnfinishedBusiness/Feats/MeleeCombatFeats.cs index 067f370661..bbc17ebfe5 100644 --- a/SolastaUnfinishedBusiness/Feats/MeleeCombatFeats.cs +++ b/SolastaUnfinishedBusiness/Feats/MeleeCombatFeats.cs @@ -1538,7 +1538,7 @@ public IEnumerator OnPhysicalAttackFinishedByMe( var usablePower = PowerProvider.Get(power, rulesetAttacker); - attacker.MyExecuteActionSpendPower(usablePower, false, defender); + attacker.MyExecuteActionSpendPower(usablePower, defender); } } diff --git a/SolastaUnfinishedBusiness/Feats/OtherFeats.cs b/SolastaUnfinishedBusiness/Feats/OtherFeats.cs index 0ce1c1f9d2..a22f7a287e 100644 --- a/SolastaUnfinishedBusiness/Feats/OtherFeats.cs +++ b/SolastaUnfinishedBusiness/Feats/OtherFeats.cs @@ -2526,7 +2526,7 @@ private static IEnumerator PoisonTarget(GameLocationCharacter me, GameLocationCh var usablePower = PowerProvider.Get(PowerFeatPoisonousSkin, rulesetMe); - me.MyExecuteActionSpendPower(usablePower, false, target); + me.MyExecuteActionSpendPower(usablePower, target); } //Poison character that shoves me @@ -2847,7 +2847,7 @@ public IEnumerator HandleReducedToZeroHpByMe( withinRange: distance) .ToArray(); - attacker.MyExecuteActionSpendPower(usablePower, false, targets); + attacker.MyExecuteActionSpendPower(usablePower, targets); } public IEnumerator OnPhysicalAttackBeforeHitConfirmedOnEnemy( diff --git a/SolastaUnfinishedBusiness/Models/CharacterUAContext.cs b/SolastaUnfinishedBusiness/Models/CharacterUAContext.cs index 26455df4f2..36064c6d93 100644 --- a/SolastaUnfinishedBusiness/Models/CharacterUAContext.cs +++ b/SolastaUnfinishedBusiness/Models/CharacterUAContext.cs @@ -1623,7 +1623,7 @@ private IEnumerator HandleKnockOut(GameLocationCharacter attacker, GameLocationC var rulesetAttacker = attacker.RulesetCharacter; var usablePower = PowerProvider.Get(powerKnockOutApply, rulesetAttacker); - attacker.MyExecuteActionSpendPower(usablePower, false, defender); + attacker.MyExecuteActionSpendPower(usablePower, defender); } } diff --git a/SolastaUnfinishedBusiness/Models/FixesContext.cs b/SolastaUnfinishedBusiness/Models/FixesContext.cs index a451ba3490..25e05a0746 100644 --- a/SolastaUnfinishedBusiness/Models/FixesContext.cs +++ b/SolastaUnfinishedBusiness/Models/FixesContext.cs @@ -793,7 +793,7 @@ public IEnumerator OnPhysicalAttackFinishedByMe( yield break; } - attacker.MyExecuteActionSpendPower(usablePower, false, defender); + attacker.MyExecuteActionSpendPower(usablePower, defender); } public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, BaseDefinition baseDefinition) diff --git a/SolastaUnfinishedBusiness/Models/Level20SubclassesContext.cs b/SolastaUnfinishedBusiness/Models/Level20SubclassesContext.cs index 1ef502cb3e..750ce83d3a 100644 --- a/SolastaUnfinishedBusiness/Models/Level20SubclassesContext.cs +++ b/SolastaUnfinishedBusiness/Models/Level20SubclassesContext.cs @@ -1514,7 +1514,7 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, var rulesetCharacter = actingCharacter.RulesetCharacter; var usablePower = PowerProvider.Get(powerFortuneFavorTheBold, rulesetCharacter); - actingCharacter.MyExecuteActionSpendPower(usablePower, false, actingCharacter); + actingCharacter.MyExecuteActionSpendPower(usablePower, actingCharacter); yield break; } @@ -1990,7 +1990,7 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, { var usablePower = PowerProvider.Get(powerQuiveringPalmDamage, rulesetAttacker); - attacker.MyExecuteActionSpendPower(usablePower, false, target); + attacker.MyExecuteActionSpendPower(usablePower, target); yield break; } diff --git a/SolastaUnfinishedBusiness/Patches/CharacterActionShovePatcher.cs b/SolastaUnfinishedBusiness/Patches/CharacterActionShovePatcher.cs index 0e2cf03ae1..c7d2f3fc16 100644 --- a/SolastaUnfinishedBusiness/Patches/CharacterActionShovePatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/CharacterActionShovePatcher.cs @@ -119,7 +119,7 @@ private static IEnumerator Execute(CharacterActionShove characterActionShove) rulesetCharacter.GetRemainingUsesOfPower(usablePower) > 0 && usablePower.PowerDefinition.ActivationTime == ActivationTime.OnSuccessfulShoveAuto) { - actingCharacter.MyExecuteActionSpendPower(usablePower, true, target); + actingCharacter.MyExecuteActionSpendPower(usablePower, target); } } } diff --git a/SolastaUnfinishedBusiness/Races/Malakh.cs b/SolastaUnfinishedBusiness/Races/Malakh.cs index 1a7cac0fe5..39311b9ef8 100644 --- a/SolastaUnfinishedBusiness/Races/Malakh.cs +++ b/SolastaUnfinishedBusiness/Races/Malakh.cs @@ -332,7 +332,7 @@ public void OnCharacterBeforeTurnEnded(GameLocationCharacter locationCharacter) var usablePower = PowerProvider.Get(powerAngelicRadianceDamage, rulesetAttacker); var targets = Gui.Battle.GetContenders(locationCharacter, withinRange: 3).ToArray(); - locationCharacter.MyExecuteActionSpendPower(usablePower, false, targets); + locationCharacter.MyExecuteActionSpendPower(usablePower, targets); } } } diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs index 9c996742ad..7b8bd00698 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs @@ -993,7 +993,7 @@ public IEnumerator OnActionFinishedByMe(CharacterAction action) var attacker = GameLocationCharacter.GetFromActor(rulesetAttacker); var usablePower = PowerProvider.Get(powerBoomingBladeDamage, rulesetAttacker); - attacker.MyExecuteActionSpendPower(usablePower, false, defender); + attacker.MyExecuteActionSpendPower(usablePower, defender); } } @@ -1200,7 +1200,7 @@ u.RulesetCharacter is RulesetCharacterEffectProxy rulesetCharacterEffectProxy && var source = GameLocationCharacter.GetFromActor(rulesetSource); var usablePower = PowerProvider.Get(PowerCreateBonfireDamage, rulesetSource); - source.MyExecuteActionSpendPower(usablePower, false, character); + source.MyExecuteActionSpendPower(usablePower, character); } #endregion @@ -1404,7 +1404,7 @@ rollOutcome is not (RollOutcome.Success or RollOutcome.CriticalSuccess)) var usablePower = PowerProvider.Get(powerResonatingStrikeDamage, rulesetAttacker); - attacker.MyExecuteActionSpendPower(usablePower, false, secondDefender); + attacker.MyExecuteActionSpendPower(usablePower, secondDefender); } } diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs index fb23294c66..c22a90cc32 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs @@ -1760,7 +1760,7 @@ internal static SpellDefinition BuildIceBlade() .Create() .SetTargetingData(Side.Enemy, RangeType.Distance, 1, TargetType.IndividualsUnique) .SetSavingThrowData(false, AttributeDefinitions.Dexterity, false, - EffectDifficultyClassComputation.FixedValue) + EffectDifficultyClassComputation.SpellCastingFeature) .SetEffectForms( EffectFormBuilder .Create() @@ -1817,7 +1817,10 @@ public EffectDescription GetEffectDescription( RulesetCharacter character, RulesetEffect rulesetEffect) { - effectDescription.FindFirstDamageForm().DiceNumber = 2 + (PowerOrSpellFinishedByMeIceBlade.EffectLevel - 1); + if (rulesetEffect is RulesetEffectPower rulesetEffectPower) + { + effectDescription.FindFirstDamageForm().DiceNumber = 2 + (rulesetEffectPower.usablePower.saveDC - 1); + } return effectDescription; } @@ -1826,8 +1829,6 @@ public EffectDescription GetEffectDescription( private sealed class PowerOrSpellFinishedByMeIceBlade(FeatureDefinitionPower powerIceBlade) : IPowerOrSpellFinishedByMe { - internal static int EffectLevel; - public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, BaseDefinition baseDefinition) { if (Gui.Battle == null) @@ -1842,23 +1843,19 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, var caster = actionCastSpell.ActingCharacter; var rulesetCaster = caster.RulesetCharacter; + var usablePower = PowerProvider.Get(powerIceBlade, rulesetCaster); - EffectLevel = actionCastSpell.ActionParams.activeEffect.EffectLevel; + usablePower.saveDC = 8 + actionCastSpell.ActiveSpell.MagicAttackBonus; // need to loop over target characters to support twinned metamagic scenarios - foreach (var target in actionCastSpell.ActionParams.TargetCharacters) + foreach (var targets in actionCastSpell.ActionParams.TargetCharacters + .Select(target => Gui.Battle.AllContenders + .Where(x => + x.RulesetCharacter is { IsDeadOrDyingOrUnconscious: false } && + x.IsWithinRange(target, 1)) + .ToArray())) { - var targets = Gui.Battle.AllContenders - .Where(x => - x.RulesetCharacter is { IsDeadOrDyingOrUnconscious: false } && - x.IsWithinRange(target, 1)) - .ToArray(); - - var usablePower = PowerProvider.Get(powerIceBlade, rulesetCaster); - - usablePower.saveDC = 8 + actionCastSpell.ActiveSpell.MagicAttackBonus; - - caster.MyExecuteActionPowerNoCost(usablePower, targets); + caster.MyExecuteActionSpendPower(usablePower, targets); } } } @@ -2819,7 +2816,7 @@ public IEnumerator OnPhysicalAttackFinishedByMe( var rulesetAttacker = attacker.RulesetCharacter; var usablePower = PowerProvider.Get(powerSpikeBarrage, rulesetAttacker); - attacker.MyExecuteActionPowerNoCost(usablePower, targets); + attacker.MyExecuteActionSpendPower(usablePower, targets); } } diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel03.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel03.cs index 6eaf8f23e8..a4256882eb 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel03.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel03.cs @@ -544,7 +544,7 @@ public void MoveStepFinished(GameLocationCharacter mover) var rulesetAttacker = mover.RulesetCharacter; var usablePower = PowerProvider.Get(powerDamage, rulesetAttacker); - mover.MyExecuteActionSpendPower(usablePower, false, targets); + mover.MyExecuteActionSpendPower(usablePower, targets); } } @@ -779,7 +779,7 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, var rulesetAttacker = attacker.RulesetCharacter; var usablePower = PowerProvider.Get(powerExplode, rulesetAttacker); - attacker.MyExecuteActionPowerNoCost(usablePower, [.. _targets]); + attacker.MyExecuteActionSpendPower(usablePower, [.. _targets]); } public IEnumerator OnPowerOrSpellInitiatedByMe(CharacterActionMagicEffect action, BaseDefinition baseDefinition) @@ -1206,7 +1206,7 @@ public void OnCharacterBeforeTurnEnded(GameLocationCharacter character) var caster = GameLocationCharacter.GetFromActor(rulesetCaster); var usablePower = PowerProvider.Get(powerHungerOfTheVoidDamageAcid, rulesetCaster); - caster.MyExecuteActionSpendPower(usablePower, false, character); + caster.MyExecuteActionSpendPower(usablePower, character); } public void OnCharacterTurnStarted(GameLocationCharacter character) @@ -1223,7 +1223,7 @@ public void OnCharacterTurnStarted(GameLocationCharacter character) var caster = GameLocationCharacter.GetFromActor(rulesetCaster); var usablePower = PowerProvider.Get(powerHungerOfTheVoidDamageCold, rulesetCaster); - caster.MyExecuteActionSpendPower(usablePower, false, character); + caster.MyExecuteActionSpendPower(usablePower, character); } } @@ -1263,13 +1263,13 @@ internal static SpellDefinition BuildLightningArrow() .SetFeatures(powerLightningArrowLeap) .AddToDB(); - powerLightningArrowLeap.AddCustomSubFeatures( - new ModifyEffectDescriptionLightningArrowLeap(powerLightningArrowLeap, conditionLightningArrow)); - conditionLightningArrow.AddCustomSubFeatures( AddUsablePowersFromCondition.Marker, new CustomBehaviorLightningArrow(powerLightningArrowLeap, conditionLightningArrow)); + powerLightningArrowLeap.AddCustomSubFeatures( + new ModifyEffectDescriptionLightningArrowLeap(powerLightningArrowLeap, conditionLightningArrow)); + var spell = SpellDefinitionBuilder .Create(Name) .SetGuiPresentation(Category.Spell, Sprites.GetSprite(Name, Resources.LightningArrow, 128)) @@ -1296,10 +1296,8 @@ internal static SpellDefinition BuildLightningArrow() } private sealed class ModifyEffectDescriptionLightningArrowLeap( - // ReSharper disable once SuggestBaseTypeForParameterInConstructor FeatureDefinitionPower featureDefinitionPower, - // ReSharper disable once SuggestBaseTypeForParameterInConstructor - ConditionDefinition conditionDefinition) + ConditionDefinition conditionLightningArrow) : IModifyEffectDescription { public bool IsValid(BaseDefinition definition, RulesetCharacter character, EffectDescription effectDescription) @@ -1313,12 +1311,10 @@ public EffectDescription GetEffectDescription( RulesetCharacter character, RulesetEffect rulesetEffect) { - var glc = GameLocationCharacter.GetFromActor(character); - - if (glc != null && - glc.UsedSpecialFeatures.TryGetValue(conditionDefinition.Name, out var additionalDice)) + if (character.TryGetConditionOfCategoryAndType( + AttributeDefinitions.TagEffect, conditionLightningArrow.Name, out var activeCondition)) { - effectDescription.FindFirstDamageForm().diceNumber = 2 + additionalDice; + effectDescription.FindFirstDamageForm().diceNumber = 2 + activeCondition.EffectLevel; } return effectDescription; @@ -1398,8 +1394,6 @@ public IEnumerator OnPhysicalAttackFinishedByMe( // keep a tab on additionalDice for leap power later on var additionalDice = activeCondition.EffectLevel - 3; - attacker.UsedSpecialFeatures.TryAdd(conditionLightningArrow.Name, additionalDice); - rulesetAttacker.RemoveCondition(activeCondition); // half damage on target on a miss @@ -1442,7 +1436,7 @@ public IEnumerator OnPhysicalAttackFinishedByMe( .GetContenders(defender, isOppositeSide: false, withinRange: 2) .ToArray(); - attacker.MyExecuteActionPowerNoCost(usablePower, targets); + attacker.MyExecuteActionSpendPower(usablePower, targets); } } diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel04.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel04.cs index cd16c0993f..927ec60eb3 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel04.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel04.cs @@ -829,7 +829,7 @@ public void OnConditionRemoved(RulesetCharacter rulesetCharacter, RulesetConditi var character = GameLocationCharacter.GetFromActor(rulesetCharacter); var usablePower = PowerProvider.Get(power, rulesetCaster); - caster.MyExecuteActionSpendPower(usablePower, false, character); + caster.MyExecuteActionSpendPower(usablePower, character); } } @@ -1290,7 +1290,7 @@ private void DamageReceivedHandler( var usablePower = PowerProvider.Get(powerElementalBane, rulesetAttacker); - attacker.MyExecuteActionSpendPower(usablePower, false, defender); + attacker.MyExecuteActionSpendPower(usablePower, defender); } } diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel08.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel08.cs index c94c27ab02..10c8483dc3 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel08.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel08.cs @@ -283,6 +283,7 @@ internal static SpellDefinition BuildSoulExpulsion() .SetTargetingData(Side.All, RangeType.Distance, 24, TargetType.IndividualsUnique) .SetSavingThrowData(false, AttributeDefinitions.Wisdom, false, EffectDifficultyClassComputation.SpellCastingFeature) + // UI Only .SetEffectAdvancement(EffectIncrementMethod.PerAdditionalSlotLevel, additionalDicePerIncrement: 2) .SetEffectForms( EffectFormBuilder @@ -370,12 +371,10 @@ public EffectDescription GetEffectDescription( RulesetCharacter character, RulesetEffect rulesetEffect) { - var glc = GameLocationCharacter.GetFromActor(character); - - if (glc != null && - glc.UsedSpecialFeatures.TryGetValue("SoulExpulsion", out var effectLevel)) + if (rulesetEffect is RulesetEffectPower rulesetEffectPower) { - effectDescription.FindFirstDamageForm().DiceNumber = 7 + (2 * (effectLevel - 8)); + effectDescription.FindFirstDamageForm().DiceNumber = + 7 + (2 * (rulesetEffectPower.usablePower.saveDC - 8)); } return effectDescription; @@ -402,8 +401,10 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, target, actingCharacter, isOppositeSide: false, hasToPerceiveTarget: true, withinRange: 12) .ToArray(); - actingCharacter.UsedSpecialFeatures.TryAdd("SoulExpulsion", action.ActionParams.RulesetEffect.EffectLevel); - actingCharacter.MyExecuteActionPowerNoCost(usablePower, targets); + // use fixed saveDC to store effect level to be used later by power + usablePower.saveDC = action.ActionParams.RulesetEffect.EffectLevel; + + actingCharacter.MyExecuteActionSpendPower(usablePower, targets); } public IEnumerator OnPowerOrSpellInitiatedByMe(CharacterActionMagicEffect action, BaseDefinition baseDefinition) diff --git a/SolastaUnfinishedBusiness/Subclasses/Builders/InvocationsBuilders.cs b/SolastaUnfinishedBusiness/Subclasses/Builders/InvocationsBuilders.cs index 371d82d51b..bf209a1cba 100644 --- a/SolastaUnfinishedBusiness/Subclasses/Builders/InvocationsBuilders.cs +++ b/SolastaUnfinishedBusiness/Subclasses/Builders/InvocationsBuilders.cs @@ -846,7 +846,7 @@ public void OnCharacterTurnStarted(GameLocationCharacter character) var caster = GameLocationCharacter.GetFromActor(rulesetCaster); var usablePower = PowerProvider.Get(powerPerniciousCloakDamage, rulesetCaster); - caster.MyExecuteActionSpendPower(usablePower, false, character); + caster.MyExecuteActionSpendPower(usablePower, character); } } @@ -1145,7 +1145,7 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, var usablePower = PowerProvider.Get(powerChillingHexDamage, rulesetAttacker); var targets = Gui.Battle.GetContenders(defender, isOppositeSide: false, withinRange: 1).ToArray(); - attacker.MyExecuteActionSpendPower(usablePower, false, targets); + attacker.MyExecuteActionSpendPower(usablePower, targets); } } diff --git a/SolastaUnfinishedBusiness/Subclasses/Builders/MetamagicBuilders.cs b/SolastaUnfinishedBusiness/Subclasses/Builders/MetamagicBuilders.cs index 8ac5f7285b..5c5e90dd96 100644 --- a/SolastaUnfinishedBusiness/Subclasses/Builders/MetamagicBuilders.cs +++ b/SolastaUnfinishedBusiness/Subclasses/Builders/MetamagicBuilders.cs @@ -325,6 +325,8 @@ select FeatureDefinitionPowerSharedPoolBuilder .SetSpecialInterruptions(ConditionInterruption.AnyBattleTurnEnd) .AddToDB(); + condition.AddCustomSubFeatures(new CustomBehaviorTransmuted(condition)); + var metamagic = MetamagicOptionDefinitionBuilder .Create(MetamagicTransmuted) .SetGuiPresentation(Category.Feature) @@ -332,7 +334,7 @@ select FeatureDefinitionPowerSharedPoolBuilder .AddToDB(); metamagic.AddCustomSubFeatures( - new MagicEffectBeforeHitConfirmedOnEnemyTransmuted(metamagic, condition, powerPool), validator); + new MagicEffectInitiatedByMeTransmuted(metamagic, condition, powerPool), validator); return metamagic; } @@ -356,24 +358,21 @@ private static void IsMetamagicTransmutedSpellValid( result = false; } - private sealed class MagicEffectBeforeHitConfirmedOnEnemyTransmuted( + private sealed class MagicEffectInitiatedByMeTransmuted( MetamagicOptionDefinition metamagicOptionDefinition, ConditionDefinition condition, - FeatureDefinitionPower powerPool) : IMagicEffectBeforeHitConfirmedOnEnemy + FeatureDefinitionPower powerPool) : IMagicEffectInitiatedByMe { - private string _newDamageType; + private const string TransmutedDamage = "TransmutedDamage"; - public IEnumerator OnMagicEffectBeforeHitConfirmedOnEnemy( - GameLocationBattleManager battleManager, + public IEnumerator OnMagicEffectInitiatedByMe( + CharacterAction action, + RulesetEffect activeEffect, GameLocationCharacter attacker, - GameLocationCharacter defender, - ActionModifier actionModifier, - RulesetEffect rulesetEffect, - List actualEffectForms, - bool firstTarget, - bool criticalHit) + List targets) { var rulesetAttacker = attacker.RulesetCharacter; + var rulesetEffect = action.ActionParams.RulesetEffect; if (rulesetEffect.MetamagicOption != metamagicOptionDefinition && rulesetAttacker.SpellsCastByMe @@ -382,12 +381,7 @@ public IEnumerator OnMagicEffectBeforeHitConfirmedOnEnemy( yield break; } - if (rulesetAttacker.HasConditionOfCategoryAndType(AttributeDefinitions.TagEffect, condition.Name)) - { - yield break; - } - - rulesetAttacker.InflictCondition( + var activeCondition = rulesetAttacker.InflictCondition( condition.Name, DurationType.Round, 0, @@ -405,38 +399,79 @@ public IEnumerator OnMagicEffectBeforeHitConfirmedOnEnemy( yield return attacker.MyReactToSpendPowerBundle( usablePower, - [defender], + [attacker], attacker, MetamagicTransmuted, string.Empty, ReactionValidated, - ReactionNotValidated, - battleManager); + ReactionNotValidated); yield break; void ReactionValidated(ReactionRequestSpendBundlePower reactionRequest) { - var option = reactionRequest.SelectedSubOption; - - _newDamageType = TransmutedDamageTypes[option]; - - foreach (var effectForm in actualEffectForms - .Where(x => - x.FormType == EffectForm.EffectFormType.Damage && - TransmutedDamageTypes.Contains(x.DamageForm.DamageType))) - { - effectForm.DamageForm.damageType = _newDamageType; - } + attacker.SetSpecialFeatureUses(TransmutedDamage, reactionRequest.SelectedSubOption); } void ReactionNotValidated(ReactionRequestSpendBundlePower reactionRequest) { + attacker.SetSpecialFeatureUses(TransmutedDamage, -1); + rulesetAttacker.RemoveCondition(activeCondition); rulesetAttacker.SpendSorceryPoints(-1); } } } + private sealed class CustomBehaviorTransmuted(ConditionDefinition condition) + : IMagicEffectBeforeHitConfirmedOnEnemy, IMagicEffectFinishedByMe + { + private const string TransmutedDamage = "TransmutedDamage"; + + public IEnumerator OnMagicEffectBeforeHitConfirmedOnEnemy( + GameLocationBattleManager battleManager, + GameLocationCharacter attacker, + GameLocationCharacter defender, + ActionModifier actionModifier, + RulesetEffect rulesetEffect, + List actualEffectForms, + bool firstTarget, + bool criticalHit) + { + var option = attacker.GetSpecialFeatureUses(TransmutedDamage); + + if (option < 0) + { + yield break; + } + + var newDamageType = TransmutedDamageTypes[option]; + + foreach (var effectForm in actualEffectForms + .Where(x => + x.FormType == EffectForm.EffectFormType.Damage && + TransmutedDamageTypes.Contains(x.DamageForm.DamageType))) + { + effectForm.DamageForm.damageType = newDamageType; + } + } + + public IEnumerator OnMagicEffectFinishedByMe( + CharacterAction action, + GameLocationCharacter attacker, + List targets) + { + var rulesetAttacker = attacker.RulesetCharacter; + + if (!rulesetAttacker.TryGetConditionOfCategoryAndType(AttributeDefinitions.TagEffect, condition.Name, + out var activeCondition)) + { + yield break; + } + + rulesetAttacker.RemoveCondition(activeCondition); + } + } + #endregion #region Metamagic Seeking diff --git a/SolastaUnfinishedBusiness/Subclasses/CircleOfTheCosmos.cs b/SolastaUnfinishedBusiness/Subclasses/CircleOfTheCosmos.cs index 961505f391..d2b63d6082 100644 --- a/SolastaUnfinishedBusiness/Subclasses/CircleOfTheCosmos.cs +++ b/SolastaUnfinishedBusiness/Subclasses/CircleOfTheCosmos.cs @@ -1267,7 +1267,7 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, effectPower.remainingRounds = remainingRounds; - actingCharacter.MyExecuteActionSpendPower(usablePower, false, actingCharacter); + actingCharacter.MyExecuteActionSpendPower(usablePower, actingCharacter); } } } diff --git a/SolastaUnfinishedBusiness/Subclasses/CircleOfTheForestGuardian.cs b/SolastaUnfinishedBusiness/Subclasses/CircleOfTheForestGuardian.cs index 706ff35524..8ce47e5a27 100644 --- a/SolastaUnfinishedBusiness/Subclasses/CircleOfTheForestGuardian.cs +++ b/SolastaUnfinishedBusiness/Subclasses/CircleOfTheForestGuardian.cs @@ -237,7 +237,7 @@ action.AttackRollOutcome is not (RollOutcome.Success or RollOutcome.CriticalSucc var usablePower = PowerProvider.Get(powerImprovedBarkWardDamage, rulesetDefender); - defender.MyExecuteActionSpendPower(usablePower, false, attacker); + defender.MyExecuteActionSpendPower(usablePower, attacker); } } } diff --git a/SolastaUnfinishedBusiness/Subclasses/CircleOfTheWildfire.cs b/SolastaUnfinishedBusiness/Subclasses/CircleOfTheWildfire.cs index 4205935970..d9368cb742 100644 --- a/SolastaUnfinishedBusiness/Subclasses/CircleOfTheWildfire.cs +++ b/SolastaUnfinishedBusiness/Subclasses/CircleOfTheWildfire.cs @@ -544,7 +544,7 @@ void ReactionValidated() : PowerCauterizingFlamesHeal, rulesetSource); - source.MyExecuteActionSpendPower(usablePower, false, character); + source.MyExecuteActionSpendPower(usablePower, character); } } } @@ -638,7 +638,7 @@ public void OnCharacterBeforeTurnEnded(GameLocationCharacter locationCharacter) // Summon Spirit // - private sealed class PowerOrSpellFinishedByMeSummonSpirit(FeatureDefinitionPower powerSummonSpirit) + private sealed class PowerOrSpellFinishedByMeSummonSpirit(FeatureDefinitionPower powerSummonSpiritDamage) : IPowerOrSpellFinishedByMe { public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, BaseDefinition baseDefinition) @@ -646,7 +646,7 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, var locationCharacterService = ServiceRepository.GetService(); var attacker = action.ActingCharacter; var rulesetAttacker = attacker.RulesetCharacter; - var usablePower = PowerProvider.Get(powerSummonSpirit, rulesetAttacker); + var usablePower = PowerProvider.Get(powerSummonSpiritDamage, rulesetAttacker); var spirit = GetMySpirit(attacker.Guid); var contenders = Gui.Battle?.AllContenders ?? @@ -658,7 +658,7 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, spirit.IsWithinRange(x, 2)) .ToArray(); - attacker.MyExecuteActionPowerNoCost(usablePower, targets); + attacker.MyExecuteActionSpendPower(usablePower, targets); yield break; } @@ -707,7 +707,7 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, var rulesetAttacker = attacker.RulesetCharacter; var usablePower = PowerProvider.Get(powerExplode, rulesetAttacker); - attacker.MyExecuteActionPowerNoCost(usablePower, [.. _targets]); + attacker.MyExecuteActionSpendPower(usablePower, [.. _targets]); yield break; } diff --git a/SolastaUnfinishedBusiness/Subclasses/CollegeOfAudacity.cs b/SolastaUnfinishedBusiness/Subclasses/CollegeOfAudacity.cs index 8dd8c3472c..91e47b8779 100644 --- a/SolastaUnfinishedBusiness/Subclasses/CollegeOfAudacity.cs +++ b/SolastaUnfinishedBusiness/Subclasses/CollegeOfAudacity.cs @@ -291,7 +291,7 @@ public IEnumerator OnMagicEffectBeforeHitConfirmedOnEnemy( var usablePower = PowerProvider.Get(powerSlashingWhirlDamage, rulesetAttacker); var targets = Gui.Battle.GetContenders(attacker, withinRange: 1).Where(x => x != defender).ToArray(); - attacker.MyExecuteActionSpendPower(usablePower, false, targets); + attacker.MyExecuteActionSpendPower(usablePower, targets); } public bool IsValid(BaseDefinition definition, RulesetCharacter character, EffectDescription effectDescription) diff --git a/SolastaUnfinishedBusiness/Subclasses/CollegeOfElegance.cs b/SolastaUnfinishedBusiness/Subclasses/CollegeOfElegance.cs index eda9e9cc10..2ae976eca8 100644 --- a/SolastaUnfinishedBusiness/Subclasses/CollegeOfElegance.cs +++ b/SolastaUnfinishedBusiness/Subclasses/CollegeOfElegance.cs @@ -176,7 +176,6 @@ public CollegeOfElegance() .HasSavingThrow(EffectSavingThrowType.Negates) .SetConditionForm(conditionAmazingDisplay, ConditionForm.ConditionOperation.Add) .Build()) - .SetCasterEffectParameters(PowerOathOfDevotionTurnUnholy) .Build()) .AddCustomSubFeatures(ModifyPowerVisibility.Hidden) .AddToDB(); @@ -384,7 +383,7 @@ public IEnumerator OnPhysicalAttackFinishedByMe( var usablePowerEnemy = PowerProvider.Get(powerAmazingDisplayEnemy, rulesetAttacker); - attacker.MyExecuteActionPowerNoCost(usablePowerEnemy, [.. targets]); + attacker.MyExecuteActionSpendPower(usablePowerEnemy, [.. targets]); } } } diff --git a/SolastaUnfinishedBusiness/Subclasses/CollegeOfThespian.cs b/SolastaUnfinishedBusiness/Subclasses/CollegeOfThespian.cs index 5be7fde95b..ac7434fcaa 100644 --- a/SolastaUnfinishedBusiness/Subclasses/CollegeOfThespian.cs +++ b/SolastaUnfinishedBusiness/Subclasses/CollegeOfThespian.cs @@ -289,7 +289,7 @@ public IEnumerator HandleReducedToZeroHpByMe( var power = classLevel < 14 ? powerTerrificPerformance : powerImprovedTerrificPerformance; var usablePower = PowerProvider.Get(power, rulesetAttacker); - attacker.MyExecuteActionPowerNoCost(usablePower, targets); + attacker.MyExecuteActionSpendPower(usablePower, targets); } } diff --git a/SolastaUnfinishedBusiness/Subclasses/InnovationArtillerist.cs b/SolastaUnfinishedBusiness/Subclasses/InnovationArtillerist.cs index 99694048db..7ecbd7af2b 100644 --- a/SolastaUnfinishedBusiness/Subclasses/InnovationArtillerist.cs +++ b/SolastaUnfinishedBusiness/Subclasses/InnovationArtillerist.cs @@ -1071,7 +1071,7 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, x.IsWithinRange(selectedTarget, 4)) .ToArray(); - selectedTarget.MyExecuteActionPowerNoCost(usablePower, targets); + selectedTarget.MyExecuteActionSpendPower(usablePower, targets); yield break; } diff --git a/SolastaUnfinishedBusiness/Subclasses/InnovationVitriolist.cs b/SolastaUnfinishedBusiness/Subclasses/InnovationVitriolist.cs index 014c791321..bf43d80406 100644 --- a/SolastaUnfinishedBusiness/Subclasses/InnovationVitriolist.cs +++ b/SolastaUnfinishedBusiness/Subclasses/InnovationVitriolist.cs @@ -616,7 +616,7 @@ private void InflictDamage(GameLocationCharacter attacker, List Date: Sun, 15 Sep 2024 12:50:06 +0300 Subject: [PATCH 187/212] made MyReactToSpendPowerBundle callbacks called earlier - right after reaction is processed --- .../GameLocationCharacterExtensions.cs | 12 ++-------- .../CustomUI/ReactionRequestCustom.cs | 23 ++++++++++++++++++- .../ReactionRequestSpendBundlePower.cs | 15 +++++++++--- .../Patches/LocalCommandManagerPatcher.cs | 22 ++++++++++++++++++ 4 files changed, 58 insertions(+), 14 deletions(-) diff --git a/SolastaUnfinishedBusiness/Api/GameExtensions/GameLocationCharacterExtensions.cs b/SolastaUnfinishedBusiness/Api/GameExtensions/GameLocationCharacterExtensions.cs index 29ea3f0463..d7b19b5d05 100644 --- a/SolastaUnfinishedBusiness/Api/GameExtensions/GameLocationCharacterExtensions.cs +++ b/SolastaUnfinishedBusiness/Api/GameExtensions/GameLocationCharacterExtensions.cs @@ -351,20 +351,12 @@ internal static IEnumerator MyReactToSpendPowerBundle( targetCharacters = targets, SkipAnimationsAndVFX = true }; - var reactionRequest = new ReactionRequestSpendBundlePower(actionParams); + var reactionRequest = new ReactionRequestSpendBundlePower(actionParams, + reactionValidated, reactionNotValidated); actionManager.AddInterruptRequest(reactionRequest); yield return battleManager.WaitForReactions(waiter, actionManager, count); - - if (actionParams.ReactionValidated) - { - reactionValidated?.Invoke(reactionRequest); - } - else - { - reactionNotValidated?.Invoke(reactionRequest); - } } internal static IEnumerator MyReactToUsePower( diff --git a/SolastaUnfinishedBusiness/CustomUI/ReactionRequestCustom.cs b/SolastaUnfinishedBusiness/CustomUI/ReactionRequestCustom.cs index 6eb199649e..43e75615bb 100644 --- a/SolastaUnfinishedBusiness/CustomUI/ReactionRequestCustom.cs +++ b/SolastaUnfinishedBusiness/CustomUI/ReactionRequestCustom.cs @@ -1,4 +1,6 @@ -using SolastaUnfinishedBusiness.Interfaces; +using System; +using JetBrains.Annotations; +using SolastaUnfinishedBusiness.Interfaces; namespace SolastaUnfinishedBusiness.CustomUI; @@ -7,6 +9,25 @@ public interface IReactionRequestWithResource ICustomReactionResource Resource { get; } } +public interface IReactionRequestWithCallbacks// where T : ReactionRequest +{ + [CanBeNull] + public Action ReactionValidated { get; } + [CanBeNull] + public Action ReactionNotValidated { get; } +} + +public static class ReactionRequestCallback +{ + [CanBeNull] + public static Action Transform([CanBeNull] Action callback) where T : ReactionRequest + { + if (callback == null) { return null; } + + return request => callback((T)request); + } +} + public class ReactionRequestCustom : ReactionRequest, IReactionRequestWithResource { internal static readonly string EnvTitle = Gui.Localize("Screen/&EditorLocationEnvironmentTitle"); diff --git a/SolastaUnfinishedBusiness/CustomUI/ReactionRequestSpendBundlePower.cs b/SolastaUnfinishedBusiness/CustomUI/ReactionRequestSpendBundlePower.cs index 77e9784ad4..6a5b634fa8 100644 --- a/SolastaUnfinishedBusiness/CustomUI/ReactionRequestSpendBundlePower.cs +++ b/SolastaUnfinishedBusiness/CustomUI/ReactionRequestSpendBundlePower.cs @@ -1,4 +1,5 @@ -using System.Linq; +using System; +using System.Linq; using JetBrains.Annotations; using SolastaUnfinishedBusiness.Api.GameExtensions; using SolastaUnfinishedBusiness.Behaviors; @@ -8,17 +9,25 @@ namespace SolastaUnfinishedBusiness.CustomUI; -internal sealed class ReactionRequestSpendBundlePower : ReactionRequest, IReactionRequestWithResource +internal sealed class ReactionRequestSpendBundlePower : ReactionRequest, IReactionRequestWithResource, + IReactionRequestWithCallbacks { internal const string Name = "ReactionSpendPowerBundle"; private readonly GuiCharacter _guiCharacter; private readonly FeatureDefinitionPower _masterPower; private readonly ActionModifier _modifier; private readonly GameLocationCharacter _target; + public Action ReactionValidated { get; } + public Action ReactionNotValidated { get; } - internal ReactionRequestSpendBundlePower([NotNull] CharacterActionParams reactionParams) + internal ReactionRequestSpendBundlePower([NotNull] CharacterActionParams reactionParams, + Action reactionValidated = null, + Action reactionNotValidated = null) : base(Name, reactionParams) { + ReactionValidated = ReactionRequestCallback.Transform(reactionValidated); + ReactionNotValidated = ReactionRequestCallback.Transform(reactionNotValidated); + _target = reactionParams.TargetCharacters[0]; _modifier = reactionParams.ActionModifiers.ElementAtOrDefault(0) ?? new ActionModifier(); _guiCharacter = new GuiCharacter(reactionParams.ActingCharacter); diff --git a/SolastaUnfinishedBusiness/Patches/LocalCommandManagerPatcher.cs b/SolastaUnfinishedBusiness/Patches/LocalCommandManagerPatcher.cs index d710d533dc..d1686f8820 100644 --- a/SolastaUnfinishedBusiness/Patches/LocalCommandManagerPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/LocalCommandManagerPatcher.cs @@ -2,6 +2,7 @@ using HarmonyLib; using JetBrains.Annotations; using SolastaUnfinishedBusiness.Api.GameExtensions; +using SolastaUnfinishedBusiness.CustomUI; using SolastaUnfinishedBusiness.Interfaces; namespace SolastaUnfinishedBusiness.Patches; @@ -35,6 +36,27 @@ private static void Check(GameLocationCharacter character, ActionDefinitions.Act } } #endif + [HarmonyPatch(typeof(LocalCommandManager), nameof(LocalCommandManager.ProcessReactionRequest))] + [SuppressMessage("Minor Code Smell", "S101:Types should be named in PascalCase", Justification = "Patch")] + [UsedImplicitly] + public static class ProcessReactionRequest_Patch + { + [UsedImplicitly] + public static void Postfix(ReactionRequest reactionRequest, bool validated) + { + if (reactionRequest is not IReactionRequestWithCallbacks callbacks) { return; } + + if (validated) + { + callbacks.ReactionValidated?.Invoke(reactionRequest); + } + else + { + callbacks.ReactionNotValidated?.Invoke(reactionRequest); + } + } + } + [HarmonyPatch(typeof(LocalCommandManager), nameof(LocalCommandManager.TogglePermanentInvocation))] [SuppressMessage("Minor Code Smell", "S101:Types should be named in PascalCase", Justification = "Patch")] [UsedImplicitly] From ec94291d826305b93f6bb2dd96404a0cfb999408 Mon Sep 17 00:00:00 2001 From: EnderWiggin Date: Sun, 15 Sep 2024 12:51:20 +0300 Subject: [PATCH 188/212] Transmute Spell metamagic: store which spell triggered reaction and process damage alteration and effect termination only for it --- .../Subclasses/Builders/MetamagicBuilders.cs | 51 +++++++++++-------- 1 file changed, 31 insertions(+), 20 deletions(-) diff --git a/SolastaUnfinishedBusiness/Subclasses/Builders/MetamagicBuilders.cs b/SolastaUnfinishedBusiness/Subclasses/Builders/MetamagicBuilders.cs index 5c5e90dd96..00e51d44fd 100644 --- a/SolastaUnfinishedBusiness/Subclasses/Builders/MetamagicBuilders.cs +++ b/SolastaUnfinishedBusiness/Subclasses/Builders/MetamagicBuilders.cs @@ -9,7 +9,6 @@ using SolastaUnfinishedBusiness.Behaviors.Specific; using SolastaUnfinishedBusiness.Builders; using SolastaUnfinishedBusiness.Builders.Features; -using SolastaUnfinishedBusiness.CustomUI; using SolastaUnfinishedBusiness.Interfaces; using SolastaUnfinishedBusiness.Validators; using static MetricsDefinitions; @@ -357,13 +356,18 @@ private static void IsMetamagicTransmutedSpellValid( failure = "Failure/&FailureTransmutedSpell"; result = false; } + private const string TransmutedDamage = "TransmutedDamage"; + + private static string TransmutedSpell(RulesetEffect effect) + { + return $"TransmutedSpell:{effect.Name}:{effect.Guid}"; + } private sealed class MagicEffectInitiatedByMeTransmuted( MetamagicOptionDefinition metamagicOptionDefinition, ConditionDefinition condition, FeatureDefinitionPower powerPool) : IMagicEffectInitiatedByMe { - private const string TransmutedDamage = "TransmutedDamage"; public IEnumerator OnMagicEffectInitiatedByMe( CharacterAction action, @@ -403,30 +407,24 @@ public IEnumerator OnMagicEffectInitiatedByMe( attacker, MetamagicTransmuted, string.Empty, - ReactionValidated, - ReactionNotValidated); - - yield break; - - void ReactionValidated(ReactionRequestSpendBundlePower reactionRequest) - { - attacker.SetSpecialFeatureUses(TransmutedDamage, reactionRequest.SelectedSubOption); - } - - void ReactionNotValidated(ReactionRequestSpendBundlePower reactionRequest) - { - attacker.SetSpecialFeatureUses(TransmutedDamage, -1); - rulesetAttacker.RemoveCondition(activeCondition); - rulesetAttacker.SpendSorceryPoints(-1); - } + reactionRequest => + { + attacker.SetSpecialFeatureUses(TransmutedDamage, reactionRequest.SelectedSubOption); + attacker.SetSpecialFeatureUses(TransmutedSpell(activeEffect), 1); + }, + _ => + { + attacker.SetSpecialFeatureUses(TransmutedDamage, -1); + attacker.SetSpecialFeatureUses(TransmutedSpell(activeEffect), -1); + rulesetAttacker.RemoveCondition(activeCondition); + rulesetAttacker.SpendSorceryPoints(-1); + }); } } private sealed class CustomBehaviorTransmuted(ConditionDefinition condition) : IMagicEffectBeforeHitConfirmedOnEnemy, IMagicEffectFinishedByMe { - private const string TransmutedDamage = "TransmutedDamage"; - public IEnumerator OnMagicEffectBeforeHitConfirmedOnEnemy( GameLocationBattleManager battleManager, GameLocationCharacter attacker, @@ -437,6 +435,11 @@ public IEnumerator OnMagicEffectBeforeHitConfirmedOnEnemy( bool firstTarget, bool criticalHit) { + if (attacker.GetSpecialFeatureUses(TransmutedSpell(rulesetEffect)) != 1) + { + yield break; + } + var option = attacker.GetSpecialFeatureUses(TransmutedDamage); if (option < 0) @@ -460,6 +463,14 @@ public IEnumerator OnMagicEffectFinishedByMe( GameLocationCharacter attacker, List targets) { + var transmutedSpell = TransmutedSpell(action.actionParams.activeEffect); + if (attacker.GetSpecialFeatureUses(transmutedSpell) != 1) + { + yield break; + } + + attacker.SetSpecialFeatureUses(transmutedSpell, -1); + var rulesetAttacker = attacker.RulesetCharacter; if (!rulesetAttacker.TryGetConditionOfCategoryAndType(AttributeDefinitions.TagEffect, condition.Name, From 0f9b34f14fb324c302eba95a4bd61b4fb8a284e4 Mon Sep 17 00:00:00 2001 From: EnderWiggin Date: Sun, 15 Sep 2024 12:55:12 +0300 Subject: [PATCH 189/212] replace vanilla Activities if custom ones have same name + added same builder for Considerations --- .../Patches/AiLocationManagerPatcher.cs | 76 +++++++++++++------ 1 file changed, 52 insertions(+), 24 deletions(-) diff --git a/SolastaUnfinishedBusiness/Patches/AiLocationManagerPatcher.cs b/SolastaUnfinishedBusiness/Patches/AiLocationManagerPatcher.cs index f99fd12492..0e88fbef12 100644 --- a/SolastaUnfinishedBusiness/Patches/AiLocationManagerPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/AiLocationManagerPatcher.cs @@ -14,6 +14,12 @@ namespace SolastaUnfinishedBusiness.Patches; [UsedImplicitly] public static class AiLocationManagerPatcher { + //TODO: move to separate class? + internal static T CreateDelegate(this MethodInfo method) where T : Delegate + { + return (T)Delegate.CreateDelegate(typeof(T), method); + } + //PATCH: support for Circle of the Wildfire cauterizing flames [HarmonyPatch(typeof(AiLocationManager), nameof(AiLocationManager.ProcessBattleTurn))] [SuppressMessage("Minor Code Smell", "S101:Types should be named in PascalCase", Justification = "Patch")] @@ -44,43 +50,65 @@ public static void Postfix(AiLocationManager __instance) Assembly.GetExecutingAssembly().GetTypes() .Where(t => t.IsSubclassOf(typeof(ActivityBase)))) { - __instance.activitiesMap.TryAdd(type.ToString().Split('.').Last(), type); + var name = type.ToString().Split('.').Last(); + __instance.activitiesMap.AddOrReplace(name, type); foreach (var method in type.GetMethods(BindingFlags.Static | BindingFlags.Public)) { var parameters = method.GetParameters(); if (method.ReturnType == typeof(ContextType)) { - __instance.activityContextsMap.TryAdd( - type.ToString().Split('.').Last(), - (AiLocationDefinitions.GetContextTypeHandler)Delegate.CreateDelegate( - typeof(AiLocationDefinitions.GetContextTypeHandler), method)); + __instance.activityContextsMap.AddOrReplace(name, + method.CreateDelegate()); } - else if (method.ReturnType == typeof(void) && - parameters.Length == 2 && - parameters[0].ParameterType.GetElementType() == typeof(ActionDefinitions.Id) && - parameters[1].ParameterType.GetElementType() == typeof(ActionDefinitions.Id)) + else if (method.ReturnType == typeof(void) + && parameters.Length == 2 + && parameters[0].ParameterType.GetElementType() == typeof(ActionDefinitions.Id) + && parameters[1].ParameterType.GetElementType() == typeof(ActionDefinitions.Id)) { - __instance.activityActionIdsMap.TryAdd( - type.ToString().Split('.').Last(), - (AiLocationDefinitions.GetActionIdHandler)Delegate.CreateDelegate( - typeof(AiLocationDefinitions.GetActionIdHandler), method)); + __instance.activityActionIdsMap.AddOrReplace(name, + method.CreateDelegate()); } - else if (method.ReturnType == typeof(bool) && - parameters.Length == 2 && parameters[0].ParameterType.GetElementType() == - typeof(GameLocationCharacter)) + else if (method.ReturnType == typeof(bool) + && parameters.Length == 2 + && parameters[0].ParameterType.GetElementType() == typeof(GameLocationCharacter)) { - __instance.activityShouldBeSkippedMap.TryAdd( - type.ToString().Split('.').Last(), - (AiLocationDefinitions.ShouldBeSkippedHandler)Delegate.CreateDelegate( - typeof(AiLocationDefinitions.ShouldBeSkippedHandler), method)); + __instance.activityShouldBeSkippedMap.AddOrReplace(name, + method.CreateDelegate()); } else if (method.ReturnType == typeof(bool) && parameters.Length == 0) { - __instance.activityUsesMovementContextsMap.TryAdd( - type.ToString().Split('.').Last(), - (AiLocationDefinitions.UsesMovementContextsHandler)Delegate.CreateDelegate( - typeof(AiLocationDefinitions.UsesMovementContextsHandler), method)); + __instance.activityUsesMovementContextsMap.AddOrReplace(name, + method.CreateDelegate()); + } + } + } + } + } + + [HarmonyPatch(typeof(AiLocationManager), nameof(AiLocationManager.BuildConsiderationsMap))] + [SuppressMessage("Minor Code Smell", "S101:Types should be named in PascalCase", Justification = "Patch")] + [UsedImplicitly] + public static class BuildConsiderationsMap_Patch + { + [UsedImplicitly] + public static void Postfix(AiLocationManager __instance) + { + foreach (Type type in Assembly.GetExecutingAssembly().GetTypes() + .Where(t => t.IsSubclassOf(typeof(ConsiderationBase)))) + { + var name = type.ToString().Split('.').Last(); + foreach (MethodInfo method in type.GetMethods(BindingFlags.Static | BindingFlags.Public)) + { + if (method.ReturnType == typeof(IEnumerator)) + { + __instance.considerationsWithAllocMap.AddOrReplace(name, + method.CreateDelegate()); + } + else if (method.ReturnType == typeof(void)) + { + __instance.considerationsMap.AddOrReplace(name, + method.CreateDelegate()); } } } From 570159bafdf10dcf463b1731f00cb673f66981aa Mon Sep 17 00:00:00 2001 From: EnderWiggin Date: Sun, 15 Sep 2024 14:31:06 +0300 Subject: [PATCH 190/212] allow sliding along 1 axis when pushing/pulling - solves push issues when caster is above target, or pulls when caster is below target + some cases where target is near wall --- .../Behaviors/VerticalPushPullMotion.cs | 99 +++++++++++++++---- 1 file changed, 81 insertions(+), 18 deletions(-) diff --git a/SolastaUnfinishedBusiness/Behaviors/VerticalPushPullMotion.cs b/SolastaUnfinishedBusiness/Behaviors/VerticalPushPullMotion.cs index 3fe4f3570a..5b0d871278 100644 --- a/SolastaUnfinishedBusiness/Behaviors/VerticalPushPullMotion.cs +++ b/SolastaUnfinishedBusiness/Behaviors/VerticalPushPullMotion.cs @@ -1,4 +1,5 @@ using System; +using System.Linq; using TA; using UnityEngine; using static CellFlags; @@ -45,32 +46,27 @@ public static bool ComputePushDestination( delta += step; var sides = Step(delta, StepHigh); - if (sides is { x: 0, y: 0, z: 0 }) + if (sides == int3.zero) { sides = Step(delta, StepLow); } - position += sides; - delta.x = sides.x == 0 ? delta.x : 0; - delta.y = sides.y == 0 ? delta.y : 0; - delta.z = sides.z == 0 ? delta.z : 0; + var flag = sides != int3.zero; - sides.y = -sides.y; //invert vertical direction before getting flags - var surfaceSides = DirectionToAllSurfaceSides(sides); - sides.y = -sides.y; //return vertical direction to normal - - var flag = true; - var canMoveThroughWalls = target.CanMoveInSituation(RulesetCharacter.MotionRange.ThroughWalls); - var size = target.SizeParameters; - - //TODO: find a way to add sliding if only part of sides are blocked? - foreach (var side in AllSides) + if (flag) { - if (!flag) { break; } + var canMoveThroughWalls = target.CanMoveInSituation(RulesetCharacter.MotionRange.ThroughWalls); + var size = target.SizeParameters; - if ((side & surfaceSides) == Side.None) { continue; } + var slide = Slide(sides, delta, position, canMoveThroughWalls, size, positioningService); - flag &= positioningService.CanCharacterMoveThroughSide(size, position, side, canMoveThroughWalls); + flag = slide != int3.zero; + position += slide; + + //zero delta based on full motion + delta.x = sides.x == 0 ? delta.x : 0; + delta.y = sides.y == 0 ? delta.y : 0; + delta.z = sides.z == 0 ? delta.z : 0; } if (flag && positioningService.CanPlaceCharacter(target, position, CellHelpers.PlacementMode.Station)) @@ -95,6 +91,73 @@ public static bool ComputePushDestination( return result; } + private static int3 Slide(int3 sides, Vector3 delta, int3 position, bool canMoveThroughWalls, + RulesetActor.SizeParameters size, IGameLocationPositioningService positioningService) + { + if (CheckDirections(sides, position, canMoveThroughWalls, size, positioningService)) + { + return sides; + } + + //TODO: should this have a setting, or always allow sliding? + //Full motion didn't succeed, try sliding + //try zeroing each direction and pick passing one with shortest zeroed delta + + var d = float.MaxValue; + var slide = int3.zero; + int3 tmp; + + //Try zeroing X axis + if (sides.x != 0 && delta.x < d) + { + tmp = new int3(0, sides.y, sides.z); + if (tmp != int3.zero && CheckDirections(tmp, position, canMoveThroughWalls, size, positioningService)) + { + // ReSharper disable once RedundantAssignment + d = delta.x; + slide = tmp; + } + } + + //Try zeroing Y axis + if (sides.y != 0 && delta.y < d) + { + tmp = new int3(sides.x, 0, sides.z); + if (tmp != int3.zero && CheckDirections(tmp, position, canMoveThroughWalls, size, positioningService)) + { + // ReSharper disable once RedundantAssignment + d = delta.y; + slide = tmp; + } + } + + //Try zeroing Z axis + if (sides.z != 0 && delta.z < d) + { + tmp = new int3(sides.x, sides.y, 0); + if (tmp != int3.zero && CheckDirections(tmp, position, canMoveThroughWalls, size, positioningService)) + { + // ReSharper disable once RedundantAssignment + d = delta.z; + slide = tmp; + } + } + + return slide; + } + + private static bool CheckDirections(int3 sides, int3 position, bool canMoveThroughWalls, + RulesetActor.SizeParameters size, IGameLocationPositioningService positioning) + { + sides.y = -sides.y; //invert vertical direction before getting flags + var surfaceSides = DirectionToAllSurfaceSides(sides); + sides.y = -sides.y; //return vertical direction to normal + + return AllSides + .Where(side => (side & surfaceSides) != Side.None) + .All(side => positioning.CanCharacterMoveThroughSide(size, position + sides, side, canMoveThroughWalls)); + } + private static int3 Step(Vector3 delta, double tolerance) { return new int3( From 78c45c630ee76653587c2e2deb8b64da7d5a73e7 Mon Sep 17 00:00:00 2001 From: EnderWiggin Date: Sun, 15 Sep 2024 16:24:06 +0300 Subject: [PATCH 191/212] fixed walls considered 1 tile closer in direction of push --- SolastaUnfinishedBusiness/Behaviors/VerticalPushPullMotion.cs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/SolastaUnfinishedBusiness/Behaviors/VerticalPushPullMotion.cs b/SolastaUnfinishedBusiness/Behaviors/VerticalPushPullMotion.cs index 5b0d871278..c8bce32d06 100644 --- a/SolastaUnfinishedBusiness/Behaviors/VerticalPushPullMotion.cs +++ b/SolastaUnfinishedBusiness/Behaviors/VerticalPushPullMotion.cs @@ -149,13 +149,11 @@ private static int3 Slide(int3 sides, Vector3 delta, int3 position, bool canMove private static bool CheckDirections(int3 sides, int3 position, bool canMoveThroughWalls, RulesetActor.SizeParameters size, IGameLocationPositioningService positioning) { - sides.y = -sides.y; //invert vertical direction before getting flags var surfaceSides = DirectionToAllSurfaceSides(sides); - sides.y = -sides.y; //return vertical direction to normal return AllSides .Where(side => (side & surfaceSides) != Side.None) - .All(side => positioning.CanCharacterMoveThroughSide(size, position + sides, side, canMoveThroughWalls)); + .All(side => positioning.CanCharacterMoveThroughSide(size, position, side, canMoveThroughWalls)); } private static int3 Step(Vector3 delta, double tolerance) From 5b86a09b7404c8f55518f874c876b2b636c0dc57 Mon Sep 17 00:00:00 2001 From: EnderWiggin Date: Sun, 15 Sep 2024 16:25:37 +0300 Subject: [PATCH 192/212] do not limit pull distance by distance to caster --- .../Behaviors/VerticalPushPullMotion.cs | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/SolastaUnfinishedBusiness/Behaviors/VerticalPushPullMotion.cs b/SolastaUnfinishedBusiness/Behaviors/VerticalPushPullMotion.cs index c8bce32d06..c18ddca38a 100644 --- a/SolastaUnfinishedBusiness/Behaviors/VerticalPushPullMotion.cs +++ b/SolastaUnfinishedBusiness/Behaviors/VerticalPushPullMotion.cs @@ -24,17 +24,9 @@ public static bool ComputePushDestination( var targetCenter = new Vector3(); positioningService.ComputeGravityCenterPosition(target, ref targetCenter); var direction = targetCenter - sourceCenter; - if (reverse) - { - direction = -direction; - var b = (int)Math.Max(Math.Max(Mathf.Abs(direction.x), Mathf.Abs(direction.y)), Mathf.Abs(direction.z)); - distance = distance <= 0 ? b : Mathf.Min(distance, b); - } - else - { - distance = Mathf.Max(1, distance); - } + if (reverse) { direction = -direction; } + distance = Mathf.Max(1, distance); step = direction.normalized; destination = target.LocationPosition; var position = target.LocationPosition; From 052f62a8395069766642b690aaa73098c005aa6b Mon Sep 17 00:00:00 2001 From: EnderWiggin Date: Sun, 15 Sep 2024 16:26:40 +0300 Subject: [PATCH 193/212] slightly improved logging --- .../Api/LanguageExtensions/Int3Extensions.cs | 12 ++++++++++++ .../Behaviors/VerticalPushPullMotion.cs | 9 +++++---- 2 files changed, 17 insertions(+), 4 deletions(-) create mode 100644 SolastaUnfinishedBusiness/Api/LanguageExtensions/Int3Extensions.cs diff --git a/SolastaUnfinishedBusiness/Api/LanguageExtensions/Int3Extensions.cs b/SolastaUnfinishedBusiness/Api/LanguageExtensions/Int3Extensions.cs new file mode 100644 index 0000000000..21e33505bf --- /dev/null +++ b/SolastaUnfinishedBusiness/Api/LanguageExtensions/Int3Extensions.cs @@ -0,0 +1,12 @@ +using System; +using TA; + +namespace SolastaUnfinishedBusiness.Api.LanguageExtensions; + +public static class Int3Extensions +{ + public static int Manhattan(this int3 self) + { + return Math.Max(Math.Abs(self.x), Math.Max(Math.Abs(self.y), Math.Abs(self.z))); + } +} diff --git a/SolastaUnfinishedBusiness/Behaviors/VerticalPushPullMotion.cs b/SolastaUnfinishedBusiness/Behaviors/VerticalPushPullMotion.cs index c18ddca38a..82405a9d53 100644 --- a/SolastaUnfinishedBusiness/Behaviors/VerticalPushPullMotion.cs +++ b/SolastaUnfinishedBusiness/Behaviors/VerticalPushPullMotion.cs @@ -1,5 +1,5 @@ -using System; -using System.Linq; +using System.Linq; +using SolastaUnfinishedBusiness.Api.LanguageExtensions; using TA; using UnityEngine; using static CellFlags; @@ -74,9 +74,10 @@ public static bool ComputePushDestination( //TODO: remove after testing #if DEBUG + var applied = (target.LocationPosition - destination).Manhattan(); var dir = reverse ? "Pull" : "Push"; Main.Log( - $"{dir} [{target.Name}] {distance}\u25ce applied: {result}, source: {sourceCenter}, target: {targetCenter}, destination: {destination}", + $"{dir}:{distance}\u25ce [{target.Name}] moved: {applied}\u25ce, source: {sourceCenter}, target: {targetCenter}, destination: {destination}", true); #endif @@ -90,7 +91,7 @@ private static int3 Slide(int3 sides, Vector3 delta, int3 position, bool canMove { return sides; } - + //TODO: should this have a setting, or always allow sliding? //Full motion didn't succeed, try sliding //try zeroing each direction and pick passing one with shortest zeroed delta From 48e5cc09fa090ce0a96d73f0fbb78a0d0eec7bca Mon Sep 17 00:00:00 2001 From: EnderWiggin Date: Sun, 15 Sep 2024 16:40:09 +0300 Subject: [PATCH 194/212] try sliding horizontally only as a last resort --- .../Behaviors/VerticalPushPullMotion.cs | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/SolastaUnfinishedBusiness/Behaviors/VerticalPushPullMotion.cs b/SolastaUnfinishedBusiness/Behaviors/VerticalPushPullMotion.cs index 82405a9d53..f021ecd902 100644 --- a/SolastaUnfinishedBusiness/Behaviors/VerticalPushPullMotion.cs +++ b/SolastaUnfinishedBusiness/Behaviors/VerticalPushPullMotion.cs @@ -136,6 +136,38 @@ private static int3 Slide(int3 sides, Vector3 delta, int3 position, bool canMove } } + //We either got successful slide, or no way to try double slide with Y=0 + if (slide != int3.zero || sides.x == 0 || sides.z == 0) + { + return slide; + } + + //Last attempt: zero on Y and one of X/Z axis + + //Try zeroing X and Y axis + if (delta.x < d) + { + tmp = new int3(0, 0, sides.z); + if (CheckDirections(tmp, position, canMoveThroughWalls, size, positioningService)) + { + // ReSharper disable once RedundantAssignment + d = delta.x; + slide = tmp; + } + } + + //Try zeroing Y and Z axis + if (delta.z < d) + { + tmp = new int3(sides.x, 0, 0); + if (CheckDirections(tmp, position, canMoveThroughWalls, size, positioningService)) + { + // ReSharper disable once RedundantAssignment + d = delta.z; + slide = tmp; + } + } + return slide; } From 74860c625fe054ae122bf0b2a6f83e8e2ab5d14d Mon Sep 17 00:00:00 2001 From: EnderWiggin Date: Sun, 15 Sep 2024 16:53:14 +0300 Subject: [PATCH 195/212] CharacterActionItemForm: disable word wrapping for attack number --- .../Patches/CharacterActionItemFormPatcher.cs | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/SolastaUnfinishedBusiness/Patches/CharacterActionItemFormPatcher.cs b/SolastaUnfinishedBusiness/Patches/CharacterActionItemFormPatcher.cs index b71d4b6eca..b31d508fd6 100644 --- a/SolastaUnfinishedBusiness/Patches/CharacterActionItemFormPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/CharacterActionItemFormPatcher.cs @@ -23,15 +23,22 @@ public static void Postfix(CharacterActionItemForm __instance) { //PATCH: make caption on small form wrap, instead of truncating //TODO: do we need a setting to control this? - if (__instance.highSlotNumber == null) + TMP_Text tmpText; + if (__instance.highSlotNumber == null && (tmpText = __instance.captionLabel.tmpText) != null) { - var tmpText = __instance.captionLabel.tmpText; - tmpText.enableWordWrapping = true; tmpText.alignment = TextAlignmentOptions.Bottom; tmpText.overflowMode = TextOverflowModes.Overflow; } + //PATCH: disable word wrapping for attack number + //useful when you have Spell Points enabled and have 100+ of them, not noticeable otherwise + var attacks = __instance.attacksNumberValue; + if (attacks != null && (tmpText = attacks.tmpText) != null) + { + tmpText.enableWordWrapping = false; + } + //PATCH: Get dynamic properties from forced attack if (__instance.guiCharacterAction.forcedAttackMode == null) { From d342bcd56eca0f1a06b6986aa53af89024619d12 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sun, 15 Sep 2024 07:30:30 -0700 Subject: [PATCH 196/212] review and add proper comments to subclass calls to MyExecuteActionSpendPower to ensure no need to consume power --- .../PowerFeatPoisonousSkin.json | 2 +- .../PowerGravityFissure.json | 2 +- .../SpellDefinition/GravityFissure.json | 49 ++++++++++++++----- .../ChangelogHistory.txt | 3 +- .../Models/SaveByLocationContext.cs | 2 +- .../Builders/InvocationsBuilders.cs | 2 + .../Subclasses/CircleOfTheCosmos.cs | 1 + .../Subclasses/CircleOfTheForestGuardian.cs | 1 + .../Subclasses/CircleOfTheWildfire.cs | 5 +- .../Subclasses/CollegeOfAudacity.cs | 1 + .../Subclasses/CollegeOfElegance.cs | 3 +- .../Subclasses/CollegeOfThespian.cs | 1 + .../Subclasses/InnovationArtillerist.cs | 1 + .../Subclasses/InnovationVitriolist.cs | 1 + .../Subclasses/MartialArcaneArcher.cs | 2 + .../Subclasses/OathOfDread.cs | 1 + .../Subclasses/OathOfThunder.cs | 1 + .../Subclasses/PathOfTheElements.cs | 1 + .../Subclasses/PathOfTheReaver.cs | 4 +- .../Subclasses/PathOfTheYeoman.cs | 1 + .../Subclasses/RangerSkyWarrior.cs | 3 +- .../Subclasses/RoguishArcaneScoundrel.cs | 1 + .../Subclasses/SorcerousFieldManipulator.cs | 1 + .../Subclasses/WayOfTheDiscordance.cs | 4 ++ .../Subclasses/WayOfTheDragon.cs | 1 + .../Subclasses/WayOfTheStormSoul.cs | 1 + .../Subclasses/WayOfTheWealAndWoe.cs | 1 + .../Subclasses/WizardWarMagic.cs | 1 + 28 files changed, 76 insertions(+), 21 deletions(-) diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerFeatPoisonousSkin.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerFeatPoisonousSkin.json index 59fe6706ed..6ba66993bb 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerFeatPoisonousSkin.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerFeatPoisonousSkin.json @@ -14,7 +14,7 @@ "emissiveParameter": 1, "requiresTargetProximity": false, "targetProximityDistance": 6, - "targetExcludeCaster": true, + "targetExcludeCaster": false, "canBePlacedOnCharacter": true, "affectOnlyGround": false, "targetFilteringMethod": "CharacterOnly", diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerGravityFissure.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerGravityFissure.json index 7affe1a784..73991784ab 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerGravityFissure.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerGravityFissure.json @@ -196,7 +196,7 @@ }, "impactParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "3e25fca5d3585174f9b7e20aca6ef3d9", + "m_AssetGUID": "", "m_SubObjectName": "", "m_SubObjectType": "" }, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/GravityFissure.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/GravityFissure.json index d09935f891..db981d7c3b 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/GravityFissure.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/GravityFissure.json @@ -15,7 +15,7 @@ "effectDescription": { "$type": "EffectDescription, Assembly-CSharp", "rangeType": "Self", - "rangeParameter": 0, + "rangeParameter": 1, "halfDamageOnAMiss": false, "hitAffinitiesByTargetTag": [], "targetType": "Line", @@ -30,21 +30,21 @@ "canBePlacedOnCharacter": true, "affectOnlyGround": false, "targetFilteringMethod": "CharacterOnly", - "targetFilteringTag": "No", + "targetFilteringTag": "NotFlying", "requiresVisibilityForPosition": true, "inviteOptionalAlly": false, "slotTypes": [], - "recurrentEffect": "No", + "recurrentEffect": "OnActivation", "retargetAfterDeath": false, - "retargetActionType": "Bonus", + "retargetActionType": "None", "poolFilterDiceNumber": 5, "poolFilterDieType": "D8", "trapRangeType": "Triggerer", "targetConditionName": "", "targetConditionAsset": null, "targetSide": "All", - "durationType": "Instantaneous", - "durationParameter": 1, + "durationType": "Round", + "durationParameter": 0, "endOfEffect": "EndOfTurn", "hasSavingThrow": true, "disableSavingThrowOnAllies": false, @@ -107,6 +107,29 @@ }, "hasFilterId": false, "filterId": 0 + }, + { + "$type": "EffectForm, Assembly-CSharp", + "formType": "Topology", + "addBonusMode": "None", + "applyLevel": "No", + "levelType": "ClassLevel", + "levelMultiplier": 1, + "diceByLevelTable": [], + "createdByCharacter": true, + "createdByCondition": false, + "hasSavingThrow": false, + "savingThrowAffinity": "None", + "dcModifier": 0, + "canSaveToCancel": false, + "saveOccurence": "EndOfTurn", + "topologyForm": { + "$type": "TopologyForm, Assembly-CSharp", + "changeType": "DangerousZone", + "impactsFlyingCharacters": false + }, + "hasFilterId": false, + "filterId": 0 } ], "specialFormsDescription": "", @@ -135,7 +158,7 @@ "$type": "EffectParticleParameters, Assembly-CSharp", "casterParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "d26797bf421dbc2448872162f23d8fd3", + "m_AssetGUID": "4cd9d54e34323a640b05b2f1f7a67ff8", "m_SubObjectName": "", "m_SubObjectType": "" }, @@ -183,13 +206,13 @@ }, "impactParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "3e25fca5d3585174f9b7e20aca6ef3d9", + "m_AssetGUID": "", "m_SubObjectName": "", "m_SubObjectType": "" }, "activeEffectImpactParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", + "m_AssetGUID": "0cf7d6b4dc876b44fbe88623cfeb3959", "m_SubObjectName": "", "m_SubObjectType": "" }, @@ -213,23 +236,23 @@ }, "activeEffectSurfaceStartParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", + "m_AssetGUID": "6c17be351f2b9ff4aa1185d493235050", "m_SubObjectName": "", "m_SubObjectType": "" }, "activeEffectSurfaceParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", + "m_AssetGUID": "078a274c32322044baa5a19b901d5f4f", "m_SubObjectName": "", "m_SubObjectType": "" }, "activeEffectSurfaceEndParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", + "m_AssetGUID": "780bc00265f8d9f49bc6db61627acb92", "m_SubObjectName": "", "m_SubObjectType": "" }, - "activeEffectSurfaceParticlePerIndex": "", + "activeEffectSurfaceParticlePerIndex": "Earthquake", "activeEffectSurfaceParticlePerIndexCount": 0, "emissiveBorderCellStartParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", diff --git a/SolastaUnfinishedBusiness/ChangelogHistory.txt b/SolastaUnfinishedBusiness/ChangelogHistory.txt index dba0a1b147..3a031772bc 100644 --- a/SolastaUnfinishedBusiness/ChangelogHistory.txt +++ b/SolastaUnfinishedBusiness/ChangelogHistory.txt @@ -12,7 +12,7 @@ - fixed Bardic Inspiration, Indomitable Resistances, and Legendary Resistances save logic - fixed Bend Luck, Flash of Genius, Inspiring Protection, Shield Master, and Weal/Woe reaction consumption - fixed Circle of the Cosmos woe ability checks reaction not triggering -- fixed Counter Spell not rolling a charisma attribute check +- fixed Counter Spell not rolling charisma attribute checks - fixed Demonic Influence adding all location enemies to battle [VANILLA] - fixed Dwarven Fortitude, and Magical Guidance consuming a reaction - fixed Exploiter feat not checking for reactions from 2nd target onwards @@ -26,6 +26,7 @@ - fixed Quickened interaction with melee attack cantrips - fixed Rescue the Dying spell reacting on enemy death - fixed save by location not offering saves for campaigns you don't have, and disabling buttons if there are no saves +- fixed Transmuted metamagic only changing first target damage type with AoE spells - fixed Wrathful Smite to do a wisdom ability check against caster DC - improved combat log so players can see when characters use dash action [VANILLA] - improved location gadgets to trigger "try alter save outcome" reactions [VANILLA] diff --git a/SolastaUnfinishedBusiness/Models/SaveByLocationContext.cs b/SolastaUnfinishedBusiness/Models/SaveByLocationContext.cs index 469a10bf8f..cfe898532e 100644 --- a/SolastaUnfinishedBusiness/Models/SaveByLocationContext.cs +++ b/SolastaUnfinishedBusiness/Models/SaveByLocationContext.cs @@ -305,7 +305,7 @@ internal void SetCampaignLocation(LocationType type, string name) internal class SavePlace : IComparable { - public int Count; + public int Count; public DateTime? Date; public string Name; public string Path; diff --git a/SolastaUnfinishedBusiness/Subclasses/Builders/InvocationsBuilders.cs b/SolastaUnfinishedBusiness/Subclasses/Builders/InvocationsBuilders.cs index bf209a1cba..98efd49597 100644 --- a/SolastaUnfinishedBusiness/Subclasses/Builders/InvocationsBuilders.cs +++ b/SolastaUnfinishedBusiness/Subclasses/Builders/InvocationsBuilders.cs @@ -846,6 +846,7 @@ public void OnCharacterTurnStarted(GameLocationCharacter character) var caster = GameLocationCharacter.GetFromActor(rulesetCaster); var usablePower = PowerProvider.Get(powerPerniciousCloakDamage, rulesetCaster); + // pernicious cloak damage is a use at will power caster.MyExecuteActionSpendPower(usablePower, character); } } @@ -1145,6 +1146,7 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, var usablePower = PowerProvider.Get(powerChillingHexDamage, rulesetAttacker); var targets = Gui.Battle.GetContenders(defender, isOppositeSide: false, withinRange: 1).ToArray(); + // chilling hex damage is a use at will power attacker.MyExecuteActionSpendPower(usablePower, targets); } } diff --git a/SolastaUnfinishedBusiness/Subclasses/CircleOfTheCosmos.cs b/SolastaUnfinishedBusiness/Subclasses/CircleOfTheCosmos.cs index d2b63d6082..e3ed09c36a 100644 --- a/SolastaUnfinishedBusiness/Subclasses/CircleOfTheCosmos.cs +++ b/SolastaUnfinishedBusiness/Subclasses/CircleOfTheCosmos.cs @@ -1267,6 +1267,7 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, effectPower.remainingRounds = remainingRounds; + //TODO: double check if spend power works here actingCharacter.MyExecuteActionSpendPower(usablePower, actingCharacter); } } diff --git a/SolastaUnfinishedBusiness/Subclasses/CircleOfTheForestGuardian.cs b/SolastaUnfinishedBusiness/Subclasses/CircleOfTheForestGuardian.cs index 8ce47e5a27..0d4a7bdff7 100644 --- a/SolastaUnfinishedBusiness/Subclasses/CircleOfTheForestGuardian.cs +++ b/SolastaUnfinishedBusiness/Subclasses/CircleOfTheForestGuardian.cs @@ -237,6 +237,7 @@ action.AttackRollOutcome is not (RollOutcome.Success or RollOutcome.CriticalSucc var usablePower = PowerProvider.Get(powerImprovedBarkWardDamage, rulesetDefender); + // improved bark ward damage is a use at will power defender.MyExecuteActionSpendPower(usablePower, attacker); } } diff --git a/SolastaUnfinishedBusiness/Subclasses/CircleOfTheWildfire.cs b/SolastaUnfinishedBusiness/Subclasses/CircleOfTheWildfire.cs index d9368cb742..d23a7075b5 100644 --- a/SolastaUnfinishedBusiness/Subclasses/CircleOfTheWildfire.cs +++ b/SolastaUnfinishedBusiness/Subclasses/CircleOfTheWildfire.cs @@ -118,7 +118,7 @@ public CircleOfTheWildfire() var powerSpiritTeleportDamage = FeatureDefinitionPowerBuilder .Create($"Power{Name}SpiritTeleportDamage") - .SetGuiPresentation(Category.Feature) + .SetGuiPresentation(Category.Feature, hidden: true) .SetUsesFixed(ActivationTime.NoCost) .SetShowCasting(false) .SetEffectDescription( @@ -544,6 +544,7 @@ void ReactionValidated() : PowerCauterizingFlamesHeal, rulesetSource); + // cauterizing flames damage or heal are use at will power source.MyExecuteActionSpendPower(usablePower, character); } } @@ -658,6 +659,7 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, spirit.IsWithinRange(x, 2)) .ToArray(); + // spirit summon damage is a use at will power attacker.MyExecuteActionSpendPower(usablePower, targets); yield break; @@ -707,6 +709,7 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, var rulesetAttacker = attacker.RulesetCharacter; var usablePower = PowerProvider.Get(powerExplode, rulesetAttacker); + // spirit teleport explode is a use at will power attacker.MyExecuteActionSpendPower(usablePower, [.. _targets]); yield break; diff --git a/SolastaUnfinishedBusiness/Subclasses/CollegeOfAudacity.cs b/SolastaUnfinishedBusiness/Subclasses/CollegeOfAudacity.cs index 91e47b8779..21a909acea 100644 --- a/SolastaUnfinishedBusiness/Subclasses/CollegeOfAudacity.cs +++ b/SolastaUnfinishedBusiness/Subclasses/CollegeOfAudacity.cs @@ -291,6 +291,7 @@ public IEnumerator OnMagicEffectBeforeHitConfirmedOnEnemy( var usablePower = PowerProvider.Get(powerSlashingWhirlDamage, rulesetAttacker); var targets = Gui.Battle.GetContenders(attacker, withinRange: 1).Where(x => x != defender).ToArray(); + // slashing whirl damage is a use at will power attacker.MyExecuteActionSpendPower(usablePower, targets); } diff --git a/SolastaUnfinishedBusiness/Subclasses/CollegeOfElegance.cs b/SolastaUnfinishedBusiness/Subclasses/CollegeOfElegance.cs index 2ae976eca8..a08d8d2340 100644 --- a/SolastaUnfinishedBusiness/Subclasses/CollegeOfElegance.cs +++ b/SolastaUnfinishedBusiness/Subclasses/CollegeOfElegance.cs @@ -177,7 +177,6 @@ public CollegeOfElegance() .SetConditionForm(conditionAmazingDisplay, ConditionForm.ConditionOperation.Add) .Build()) .Build()) - .AddCustomSubFeatures(ModifyPowerVisibility.Hidden) .AddToDB(); var powerAmazingDisplay = FeatureDefinitionPowerBuilder @@ -188,6 +187,7 @@ public CollegeOfElegance() .AddToDB(); powerAmazingDisplay.AddCustomSubFeatures( + ModifyPowerVisibility.Hidden, new PhysicalAttackFinishedByMeAmazingDisplay( conditionAmazingDisplayMarker, powerAmazingDisplay, powerAmazingDisplayEnemy)); @@ -383,6 +383,7 @@ public IEnumerator OnPhysicalAttackFinishedByMe( var usablePowerEnemy = PowerProvider.Get(powerAmazingDisplayEnemy, rulesetAttacker); + // amazing display enemy is a use at will power attacker.MyExecuteActionSpendPower(usablePowerEnemy, [.. targets]); } } diff --git a/SolastaUnfinishedBusiness/Subclasses/CollegeOfThespian.cs b/SolastaUnfinishedBusiness/Subclasses/CollegeOfThespian.cs index ac7434fcaa..08b32d1a38 100644 --- a/SolastaUnfinishedBusiness/Subclasses/CollegeOfThespian.cs +++ b/SolastaUnfinishedBusiness/Subclasses/CollegeOfThespian.cs @@ -289,6 +289,7 @@ public IEnumerator HandleReducedToZeroHpByMe( var power = classLevel < 14 ? powerTerrificPerformance : powerImprovedTerrificPerformance; var usablePower = PowerProvider.Get(power, rulesetAttacker); + // terrific and improved terrific performance are use at will power attacker.MyExecuteActionSpendPower(usablePower, targets); } } diff --git a/SolastaUnfinishedBusiness/Subclasses/InnovationArtillerist.cs b/SolastaUnfinishedBusiness/Subclasses/InnovationArtillerist.cs index 7ecbd7af2b..0ced1194a9 100644 --- a/SolastaUnfinishedBusiness/Subclasses/InnovationArtillerist.cs +++ b/SolastaUnfinishedBusiness/Subclasses/InnovationArtillerist.cs @@ -1071,6 +1071,7 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, x.IsWithinRange(selectedTarget, 4)) .ToArray(); + // eldirith detonation is a use at will power selectedTarget.MyExecuteActionSpendPower(usablePower, targets); yield break; diff --git a/SolastaUnfinishedBusiness/Subclasses/InnovationVitriolist.cs b/SolastaUnfinishedBusiness/Subclasses/InnovationVitriolist.cs index bf43d80406..c3dc8e4907 100644 --- a/SolastaUnfinishedBusiness/Subclasses/InnovationVitriolist.cs +++ b/SolastaUnfinishedBusiness/Subclasses/InnovationVitriolist.cs @@ -616,6 +616,7 @@ private void InflictDamage(GameLocationCharacter attacker, List Date: Sun, 15 Sep 2024 18:58:25 +0300 Subject: [PATCH 197/212] Revert "do not limit pull distance by distance to caster" This reverts commit 5b86a09b7404c8f55518f874c876b2b636c0dc57. --- .../Behaviors/VerticalPushPullMotion.cs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/SolastaUnfinishedBusiness/Behaviors/VerticalPushPullMotion.cs b/SolastaUnfinishedBusiness/Behaviors/VerticalPushPullMotion.cs index f021ecd902..217ccc8510 100644 --- a/SolastaUnfinishedBusiness/Behaviors/VerticalPushPullMotion.cs +++ b/SolastaUnfinishedBusiness/Behaviors/VerticalPushPullMotion.cs @@ -24,9 +24,17 @@ public static bool ComputePushDestination( var targetCenter = new Vector3(); positioningService.ComputeGravityCenterPosition(target, ref targetCenter); var direction = targetCenter - sourceCenter; - if (reverse) { direction = -direction; } + if (reverse) + { + direction = -direction; + var b = (int)Math.Max(Math.Max(Mathf.Abs(direction.x), Mathf.Abs(direction.y)), Mathf.Abs(direction.z)); + distance = distance <= 0 ? b : Mathf.Min(distance, b); + } + else + { + distance = Mathf.Max(1, distance); + } - distance = Mathf.Max(1, distance); step = direction.normalized; destination = target.LocationPosition; var position = target.LocationPosition; From a70489eb55407be8180e8bef62d53448dd59dd79 Mon Sep 17 00:00:00 2001 From: EnderWiggin Date: Sun, 15 Sep 2024 19:25:48 +0300 Subject: [PATCH 198/212] fixed pull distance limiter to behave same way vanilla one does - fixes some unintuitive pulls and allows for negative pull distance to mean pull all the way to caster --- .../Api/LanguageExtensions/Vector3Extensions.cs | 12 ++++++++++++ .../Behaviors/VerticalPushPullMotion.cs | 12 ++++++------ 2 files changed, 18 insertions(+), 6 deletions(-) create mode 100644 SolastaUnfinishedBusiness/Api/LanguageExtensions/Vector3Extensions.cs diff --git a/SolastaUnfinishedBusiness/Api/LanguageExtensions/Vector3Extensions.cs b/SolastaUnfinishedBusiness/Api/LanguageExtensions/Vector3Extensions.cs new file mode 100644 index 0000000000..363c8f53f8 --- /dev/null +++ b/SolastaUnfinishedBusiness/Api/LanguageExtensions/Vector3Extensions.cs @@ -0,0 +1,12 @@ +using System; +using UnityEngine; + +namespace SolastaUnfinishedBusiness.Api.LanguageExtensions; + +public static class Vector3Extensions +{ + public static float Manhattan(this Vector3 self) + { + return Math.Max(Math.Abs(self.x), Math.Max(Math.Abs(self.y), Math.Abs(self.z))); + } +} diff --git a/SolastaUnfinishedBusiness/Behaviors/VerticalPushPullMotion.cs b/SolastaUnfinishedBusiness/Behaviors/VerticalPushPullMotion.cs index 217ccc8510..a2e21fed85 100644 --- a/SolastaUnfinishedBusiness/Behaviors/VerticalPushPullMotion.cs +++ b/SolastaUnfinishedBusiness/Behaviors/VerticalPushPullMotion.cs @@ -19,15 +19,15 @@ public static bool ComputePushDestination( bool reverse, IGameLocationPositioningService positioningService, ref int3 destination, - ref Vector3 step) + ref Vector3 direction) { var targetCenter = new Vector3(); positioningService.ComputeGravityCenterPosition(target, ref targetCenter); - var direction = targetCenter - sourceCenter; + direction = targetCenter - sourceCenter; if (reverse) { direction = -direction; - var b = (int)Math.Max(Math.Max(Mathf.Abs(direction.x), Mathf.Abs(direction.y)), Mathf.Abs(direction.z)); + var b = ((int)direction.Manhattan()) - 1; distance = distance <= 0 ? b : Mathf.Min(distance, b); } else @@ -35,7 +35,7 @@ public static bool ComputePushDestination( distance = Mathf.Max(1, distance); } - step = direction.normalized; + direction = direction.normalized; destination = target.LocationPosition; var position = target.LocationPosition; var delta = new Vector3(); @@ -43,7 +43,7 @@ public static bool ComputePushDestination( for (var index = 0; index < distance; ++index) { - delta += step; + delta += direction; var sides = Step(delta, StepHigh); if (sides == int3.zero) @@ -151,7 +151,7 @@ private static int3 Slide(int3 sides, Vector3 delta, int3 position, bool canMove } //Last attempt: zero on Y and one of X/Z axis - + //Try zeroing X and Y axis if (delta.x < d) { From 02606a9b255bb74fd0928553225362087bf8f0bb Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sun, 15 Sep 2024 09:57:58 -0700 Subject: [PATCH 199/212] review pass effect level logic from spell to power whenever there isn't a condition avail to fetch it - using spentPoints field as all these powers are NoCost AtWill - haven't done a deep QA to ensure this technique won't break anything else - if so we'll need to rely on self conditions to fetch the effect level --- .../Spells/SpellBuildersLevel01.cs | 6 ++++-- .../Spells/SpellBuildersLevel03.cs | 10 +++++----- .../Spells/SpellBuildersLevel06.cs | 13 ++++++++----- .../Spells/SpellBuildersLevel07.cs | 2 ++ .../Spells/SpellBuildersLevel08.cs | 6 +++--- 5 files changed, 22 insertions(+), 15 deletions(-) diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs index c22a90cc32..ce7ea27595 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs @@ -1819,7 +1819,8 @@ public EffectDescription GetEffectDescription( { if (rulesetEffect is RulesetEffectPower rulesetEffectPower) { - effectDescription.FindFirstDamageForm().DiceNumber = 2 + (rulesetEffectPower.usablePower.saveDC - 1); + effectDescription.FindFirstDamageForm().DiceNumber = + 2 + (rulesetEffectPower.usablePower.spentPoints - 1); } return effectDescription; @@ -1845,7 +1846,8 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, var rulesetCaster = caster.RulesetCharacter; var usablePower = PowerProvider.Get(powerIceBlade, rulesetCaster); - usablePower.saveDC = 8 + actionCastSpell.ActiveSpell.MagicAttackBonus; + // use spentPoints to store effect level to be used later by power + usablePower.spentPoints = action.ActionParams.activeEffect.EffectLevel; // need to loop over target characters to support twinned metamagic scenarios foreach (var targets in actionCastSpell.ActionParams.TargetCharacters diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel03.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel03.cs index a4256882eb..4f6a65ddab 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel03.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel03.cs @@ -519,7 +519,7 @@ public EffectDescription GetEffectDescription( return effectDescription; } - effectDescription.FindFirstDamageForm().DiceNumber = character.ConcentratedSpell.EffectLevel - 2; + effectDescription.FindFirstDamageForm().DiceNumber = 1 + (character.ConcentratedSpell.EffectLevel - 3); return effectDescription; } @@ -825,7 +825,7 @@ public EffectDescription GetEffectDescription( return effectDescription; } - effectDescription.FindFirstDamageForm().DiceNumber = activeCondition.EffectLevel; + effectDescription.FindFirstDamageForm().DiceNumber = 3 + (activeCondition.EffectLevel - 3); return effectDescription; } @@ -1314,7 +1314,7 @@ public EffectDescription GetEffectDescription( if (character.TryGetConditionOfCategoryAndType( AttributeDefinitions.TagEffect, conditionLightningArrow.Name, out var activeCondition)) { - effectDescription.FindFirstDamageForm().diceNumber = 2 + activeCondition.EffectLevel; + effectDescription.FindFirstDamageForm().diceNumber = 2 + (activeCondition.EffectLevel - 3); } return effectDescription; @@ -1356,7 +1356,7 @@ public IEnumerator OnPhysicalAttackBeforeHitConfirmedOnEnemy( yield break; } - var diceNumber = MainTargetDiceNumber + activeCondition.EffectLevel - 3; + var diceNumber = MainTargetDiceNumber + (activeCondition.EffectLevel - 3); var pos = actualEffectForms.FindIndex(x => x.FormType == EffectForm.EffectFormType.Damage); if (pos >= 0) @@ -1761,7 +1761,7 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, var caster = action.ActingCharacter; var rulesetCaster = caster.RulesetCharacter; - var diceNumber = 4 + actionCastSpell.activeSpell.EffectLevel - 3; + var diceNumber = 4 + (actionCastSpell.activeSpell.EffectLevel - 3); // need to loop over target characters to support twinned metamagic scenarios foreach (var target in action.ActionParams.TargetCharacters) diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel06.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel06.cs index 10b4e3ea5c..8b1036f589 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel06.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel06.cs @@ -209,6 +209,7 @@ internal static SpellDefinition BuildGravityFissure() .SetTargetingData(Side.All, RangeType.Distance, 6, TargetType.IndividualsUnique) .SetSavingThrowData(false, AttributeDefinitions.Constitution, true, EffectDifficultyClassComputation.SpellCastingFeature) + .SetEffectAdvancement(EffectIncrementMethod.PerAdditionalSlotLevel, additionalDicePerIncrement: 1) .SetEffectForms( EffectFormBuilder .Create() @@ -220,7 +221,7 @@ internal static SpellDefinition BuildGravityFissure() .HasSavingThrow(EffectSavingThrowType.Negates) .SetMotionForm(MotionForm.MotionType.DragToOrigin, 2) .Build()) - .SetImpactEffectParameters(Earthquake) + .SetImpactEffectParameters(GravitySlam) .Build()) .AddToDB(); @@ -257,6 +258,7 @@ internal static SpellDefinition BuildGravityFissure() .Build(), // only required to get the SFX in this particular scenario to activate EffectFormBuilder.TopologyForm(TopologyForm.Type.DangerousZone, false)) + .SetImpactEffectParameters(GravitySlam) .Build()) .AddCustomSubFeatures(new PowerOrSpellFinishedByMeGravityFissure(power)) .AddToDB(); @@ -280,7 +282,8 @@ public EffectDescription GetEffectDescription( { if (rulesetEffect is RulesetEffectPower rulesetEffectPower) { - effectDescription.EffectForms[0].DamageForm.diceNumber = 2 + rulesetEffectPower.usablePower.saveDC; + effectDescription.EffectForms[0].DamageForm.diceNumber = + 8 + (rulesetEffectPower.usablePower.spentPoints - 6); } return effectDescription; @@ -348,8 +351,8 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, var rulesetCharacter = actingCharacter.RulesetCharacter; var usablePower = PowerProvider.Get(powerDrag, rulesetCharacter); - // store the effect level on save DC as easier to retrieve later - usablePower.saveDC = action.ActionParams.activeEffect.EffectLevel; + // use spentPoints to store effect level to be used later by power + usablePower.spentPoints = action.ActionParams.activeEffect.EffectLevel; // drag each selected contender to the closest position // ReSharper disable once ForeachCanBePartlyConvertedToQueryUsingAnotherGetEnumerator @@ -995,7 +998,7 @@ public EffectDescription GetEffectDescription( return effectDescription; } - damageForm.diceNumber = 4 + activeCondition.EffectLevel - 6; + damageForm.diceNumber = 4 + (activeCondition.EffectLevel - 6); return effectDescription; } diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel07.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel07.cs index 438d340f53..10948755c9 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel07.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel07.cs @@ -309,6 +309,8 @@ internal static SpellDefinition BuildCrownOfStars() EffectDescriptionBuilder .Create() .SetTargetingData(Side.Enemy, RangeType.RangeHit, 24, TargetType.IndividualsUnique) + .SetEffectAdvancement(EffectIncrementMethod.PerAdditionalSlotLevel, + additionalSummonsPerIncrement: 2) .SetEffectForms(EffectFormBuilder.DamageForm(DamageTypeRadiant, 4, DieType.D12)) .SetParticleEffectParameters(ShadowDagger) .SetParticleEffectParameters(GuidingBolt) diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel08.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel08.cs index 10c8483dc3..f61f2aa429 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel08.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel08.cs @@ -374,7 +374,7 @@ public EffectDescription GetEffectDescription( if (rulesetEffect is RulesetEffectPower rulesetEffectPower) { effectDescription.FindFirstDamageForm().DiceNumber = - 7 + (2 * (rulesetEffectPower.usablePower.saveDC - 8)); + 7 + (2 * (rulesetEffectPower.usablePower.spentPoints - 8)); } return effectDescription; @@ -401,8 +401,8 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, target, actingCharacter, isOppositeSide: false, hasToPerceiveTarget: true, withinRange: 12) .ToArray(); - // use fixed saveDC to store effect level to be used later by power - usablePower.saveDC = action.ActionParams.RulesetEffect.EffectLevel; + // use spentPoints to store effect level to be used later by power + usablePower.spentPoints = action.ActionParams.RulesetEffect.EffectLevel; actingCharacter.MyExecuteActionSpendPower(usablePower, targets); } From 18bcc8cbd144be71109b153e6845090c9d6d1c44 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sun, 15 Sep 2024 09:58:57 -0700 Subject: [PATCH 200/212] auto format and clean up --- .../GameExtensions/GameLocationCharacterExtensions.cs | 4 ++-- .../CustomUI/ReactionRequestCustom.cs | 9 ++++----- .../CustomUI/ReactionRequestSpendBundlePower.cs | 5 +++-- .../Patches/AiLocationManagerPatcher.cs | 10 +++++----- .../Subclasses/Builders/MetamagicBuilders.cs | 6 +++--- 5 files changed, 17 insertions(+), 17 deletions(-) diff --git a/SolastaUnfinishedBusiness/Api/GameExtensions/GameLocationCharacterExtensions.cs b/SolastaUnfinishedBusiness/Api/GameExtensions/GameLocationCharacterExtensions.cs index d7b19b5d05..de8ae5a884 100644 --- a/SolastaUnfinishedBusiness/Api/GameExtensions/GameLocationCharacterExtensions.cs +++ b/SolastaUnfinishedBusiness/Api/GameExtensions/GameLocationCharacterExtensions.cs @@ -351,8 +351,8 @@ internal static IEnumerator MyReactToSpendPowerBundle( targetCharacters = targets, SkipAnimationsAndVFX = true }; - var reactionRequest = new ReactionRequestSpendBundlePower(actionParams, - reactionValidated, reactionNotValidated); + var reactionRequest = new ReactionRequestSpendBundlePower( + actionParams, reactionValidated, reactionNotValidated); actionManager.AddInterruptRequest(reactionRequest); diff --git a/SolastaUnfinishedBusiness/CustomUI/ReactionRequestCustom.cs b/SolastaUnfinishedBusiness/CustomUI/ReactionRequestCustom.cs index 43e75615bb..b45507bd76 100644 --- a/SolastaUnfinishedBusiness/CustomUI/ReactionRequestCustom.cs +++ b/SolastaUnfinishedBusiness/CustomUI/ReactionRequestCustom.cs @@ -9,12 +9,11 @@ public interface IReactionRequestWithResource ICustomReactionResource Resource { get; } } -public interface IReactionRequestWithCallbacks// where T : ReactionRequest +public interface IReactionRequestWithCallbacks // where T : ReactionRequest { - [CanBeNull] - public Action ReactionValidated { get; } - [CanBeNull] - public Action ReactionNotValidated { get; } + [CanBeNull] public Action ReactionValidated { get; } + + [CanBeNull] public Action ReactionNotValidated { get; } } public static class ReactionRequestCallback diff --git a/SolastaUnfinishedBusiness/CustomUI/ReactionRequestSpendBundlePower.cs b/SolastaUnfinishedBusiness/CustomUI/ReactionRequestSpendBundlePower.cs index 6a5b634fa8..433065dd5b 100644 --- a/SolastaUnfinishedBusiness/CustomUI/ReactionRequestSpendBundlePower.cs +++ b/SolastaUnfinishedBusiness/CustomUI/ReactionRequestSpendBundlePower.cs @@ -17,8 +17,6 @@ internal sealed class ReactionRequestSpendBundlePower : ReactionRequest, IReacti private readonly FeatureDefinitionPower _masterPower; private readonly ActionModifier _modifier; private readonly GameLocationCharacter _target; - public Action ReactionValidated { get; } - public Action ReactionNotValidated { get; } internal ReactionRequestSpendBundlePower([NotNull] CharacterActionParams reactionParams, Action reactionValidated = null, @@ -59,6 +57,9 @@ public override int SelectedSubOption ServiceRepository.GetService().ValidCharacters.Contains(_target) && _target.RulesetCharacter is { IsDeadOrDyingOrUnconscious: false }; + public Action ReactionValidated { get; } + public Action ReactionNotValidated { get; } + public ICustomReactionResource Resource { get; set; } private void BuildSuboptions() diff --git a/SolastaUnfinishedBusiness/Patches/AiLocationManagerPatcher.cs b/SolastaUnfinishedBusiness/Patches/AiLocationManagerPatcher.cs index 0e88fbef12..ca86c223b7 100644 --- a/SolastaUnfinishedBusiness/Patches/AiLocationManagerPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/AiLocationManagerPatcher.cs @@ -61,9 +61,9 @@ public static void Postfix(AiLocationManager __instance) __instance.activityContextsMap.AddOrReplace(name, method.CreateDelegate()); } - else if (method.ReturnType == typeof(void) - && parameters.Length == 2 - && parameters[0].ParameterType.GetElementType() == typeof(ActionDefinitions.Id) + else if (method.ReturnType == typeof(void) + && parameters.Length == 2 + && parameters[0].ParameterType.GetElementType() == typeof(ActionDefinitions.Id) && parameters[1].ParameterType.GetElementType() == typeof(ActionDefinitions.Id)) { __instance.activityActionIdsMap.AddOrReplace(name, @@ -94,11 +94,11 @@ public static class BuildConsiderationsMap_Patch [UsedImplicitly] public static void Postfix(AiLocationManager __instance) { - foreach (Type type in Assembly.GetExecutingAssembly().GetTypes() + foreach (var type in Assembly.GetExecutingAssembly().GetTypes() .Where(t => t.IsSubclassOf(typeof(ConsiderationBase)))) { var name = type.ToString().Split('.').Last(); - foreach (MethodInfo method in type.GetMethods(BindingFlags.Static | BindingFlags.Public)) + foreach (var method in type.GetMethods(BindingFlags.Static | BindingFlags.Public)) { if (method.ReturnType == typeof(IEnumerator)) { diff --git a/SolastaUnfinishedBusiness/Subclasses/Builders/MetamagicBuilders.cs b/SolastaUnfinishedBusiness/Subclasses/Builders/MetamagicBuilders.cs index 00e51d44fd..5020280ca5 100644 --- a/SolastaUnfinishedBusiness/Subclasses/Builders/MetamagicBuilders.cs +++ b/SolastaUnfinishedBusiness/Subclasses/Builders/MetamagicBuilders.cs @@ -356,6 +356,7 @@ private static void IsMetamagicTransmutedSpellValid( failure = "Failure/&FailureTransmutedSpell"; result = false; } + private const string TransmutedDamage = "TransmutedDamage"; private static string TransmutedSpell(RulesetEffect effect) @@ -368,7 +369,6 @@ private sealed class MagicEffectInitiatedByMeTransmuted( ConditionDefinition condition, FeatureDefinitionPower powerPool) : IMagicEffectInitiatedByMe { - public IEnumerator OnMagicEffectInitiatedByMe( CharacterAction action, RulesetEffect activeEffect, @@ -468,9 +468,9 @@ public IEnumerator OnMagicEffectFinishedByMe( { yield break; } - + attacker.SetSpecialFeatureUses(transmutedSpell, -1); - + var rulesetAttacker = attacker.RulesetCharacter; if (!rulesetAttacker.TryGetConditionOfCategoryAndType(AttributeDefinitions.TagEffect, condition.Name, From b02c6bfe05f1d0e2fd9ac64f9122dc0296080ba6 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sun, 15 Sep 2024 09:59:36 -0700 Subject: [PATCH 201/212] update collaterals --- .../PowerCircleOfTheWildfireSpiritTeleportDamage.json | 2 +- .../PowerCollegeOfEleganceAmazingDisplayEnemy.json | 2 +- .../FeatureDefinitionPower/PowerIceBlade.json | 2 +- .../PowerOathOfThunderBifrostDamage.json | 4 ++-- .../PowerPathOfTheYeomanMightyShot.json | 4 ++-- .../PowerSorcerousFieldManipulatorForcefulStepApply.json | 4 ++-- .../PowerWayOfTheDiscordanceDiscordance.json | 4 ++-- .../PowerWayOfTheDiscordanceTurmoil.json | 4 ++-- .../PowerWayOfTheStormSoulEyeOfTheStormLeap.json | 2 +- 9 files changed, 14 insertions(+), 14 deletions(-) diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerCircleOfTheWildfireSpiritTeleportDamage.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerCircleOfTheWildfireSpiritTeleportDamage.json index 3df0800746..fb33d65f9f 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerCircleOfTheWildfireSpiritTeleportDamage.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerCircleOfTheWildfireSpiritTeleportDamage.json @@ -335,7 +335,7 @@ "includeBaseDescription": false, "guiPresentation": { "$type": "GuiPresentation, Assembly-CSharp", - "hidden": false, + "hidden": true, "title": "Feature/&PowerCircleOfTheWildfireSpiritTeleportDamageTitle", "description": "Feature/&PowerCircleOfTheWildfireSpiritTeleportDamageDescription", "spriteReference": { diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerCollegeOfEleganceAmazingDisplayEnemy.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerCollegeOfEleganceAmazingDisplayEnemy.json index 096034a15e..9d44881a1c 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerCollegeOfEleganceAmazingDisplayEnemy.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerCollegeOfEleganceAmazingDisplayEnemy.json @@ -142,7 +142,7 @@ "$type": "EffectParticleParameters, Assembly-CSharp", "casterParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "8b9fa0fcdb99d2347a36d25a972de9f5", + "m_AssetGUID": "81560ac3813217d4d9fd281d5e73c234", "m_SubObjectName": "", "m_SubObjectType": "" }, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerIceBlade.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerIceBlade.json index 7b88237449..1ae4b20894 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerIceBlade.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerIceBlade.json @@ -42,7 +42,7 @@ "rollSaveOnlyIfRelevantForms": false, "hasShoveRoll": false, "createdByCharacter": true, - "difficultyClassComputation": "FixedValue", + "difficultyClassComputation": "SpellCastingFeature", "savingThrowDifficultyAbility": "Wisdom", "fixedSavingThrowDifficultyClass": 10, "savingThrowAffinitiesBySense": [], diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerOathOfThunderBifrostDamage.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerOathOfThunderBifrostDamage.json index 3000c04aff..44a62c5584 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerOathOfThunderBifrostDamage.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerOathOfThunderBifrostDamage.json @@ -2,8 +2,8 @@ "$type": "FeatureDefinitionPower, Assembly-CSharp", "effectDescription": { "$type": "EffectDescription, Assembly-CSharp", - "rangeType": "Touch", - "rangeParameter": 0, + "rangeType": "Distance", + "rangeParameter": 6, "halfDamageOnAMiss": false, "hitAffinitiesByTargetTag": [], "targetType": "IndividualsUnique", diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerPathOfTheYeomanMightyShot.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerPathOfTheYeomanMightyShot.json index 87bce04a1c..c928895b0e 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerPathOfTheYeomanMightyShot.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerPathOfTheYeomanMightyShot.json @@ -2,8 +2,8 @@ "$type": "FeatureDefinitionPower, Assembly-CSharp", "effectDescription": { "$type": "EffectDescription, Assembly-CSharp", - "rangeType": "Touch", - "rangeParameter": 0, + "rangeType": "Distance", + "rangeParameter": 6, "halfDamageOnAMiss": false, "hitAffinitiesByTargetTag": [], "targetType": "IndividualsUnique", diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerSorcerousFieldManipulatorForcefulStepApply.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerSorcerousFieldManipulatorForcefulStepApply.json index 4d0e521cbb..bef59a3fc5 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerSorcerousFieldManipulatorForcefulStepApply.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerSorcerousFieldManipulatorForcefulStepApply.json @@ -2,8 +2,8 @@ "$type": "FeatureDefinitionPower, Assembly-CSharp", "effectDescription": { "$type": "EffectDescription, Assembly-CSharp", - "rangeType": "Touch", - "rangeParameter": 0, + "rangeType": "Distance", + "rangeParameter": 6, "halfDamageOnAMiss": false, "hitAffinitiesByTargetTag": [], "targetType": "IndividualsUnique", diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerWayOfTheDiscordanceDiscordance.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerWayOfTheDiscordanceDiscordance.json index fac29bff24..9c30227ed7 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerWayOfTheDiscordanceDiscordance.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerWayOfTheDiscordanceDiscordance.json @@ -2,8 +2,8 @@ "$type": "FeatureDefinitionPower, Assembly-CSharp", "effectDescription": { "$type": "EffectDescription, Assembly-CSharp", - "rangeType": "Touch", - "rangeParameter": 0, + "rangeType": "Distance", + "rangeParameter": 6, "halfDamageOnAMiss": false, "hitAffinitiesByTargetTag": [], "targetType": "IndividualsUnique", diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerWayOfTheDiscordanceTurmoil.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerWayOfTheDiscordanceTurmoil.json index 6e0478b552..1d902d1397 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerWayOfTheDiscordanceTurmoil.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerWayOfTheDiscordanceTurmoil.json @@ -2,8 +2,8 @@ "$type": "FeatureDefinitionPower, Assembly-CSharp", "effectDescription": { "$type": "EffectDescription, Assembly-CSharp", - "rangeType": "Touch", - "rangeParameter": 0, + "rangeType": "Distance", + "rangeParameter": 6, "halfDamageOnAMiss": false, "hitAffinitiesByTargetTag": [], "targetType": "IndividualsUnique", diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerWayOfTheStormSoulEyeOfTheStormLeap.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerWayOfTheStormSoulEyeOfTheStormLeap.json index 17d6708675..1ba1e9e120 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerWayOfTheStormSoulEyeOfTheStormLeap.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerWayOfTheStormSoulEyeOfTheStormLeap.json @@ -3,7 +3,7 @@ "effectDescription": { "$type": "EffectDescription, Assembly-CSharp", "rangeType": "Distance", - "rangeParameter": 0, + "rangeParameter": 6, "halfDamageOnAMiss": false, "hitAffinitiesByTargetTag": [], "targetType": "IndividualsUnique", From f0c4953f988605212d2bc9fab69568d40a0ff312 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sun, 15 Sep 2024 11:52:11 -0700 Subject: [PATCH 202/212] update translations --- .../Translations/de/Spells/Spells06-de.txt | 2 +- .../Translations/en/Spells/Spells06-en.txt | 2 +- .../Translations/es/Spells/Spells06-es.txt | 2 +- .../Translations/fr/Spells/Spells06-fr.txt | 2 +- .../Translations/it/Spells/Spells06-it.txt | 2 +- .../Translations/ja/Spells/Spells06-ja.txt | 2 +- .../Translations/ko/Spells/Spells06-ko.txt | 2 +- .../Translations/pt-BR/Spells/Spells06-pt-BR.txt | 2 +- .../Translations/ru/Spells/Spells06-ru.txt | 2 +- .../Translations/zh-CN/Spells/Spells06-zh-CN.txt | 2 +- 10 files changed, 10 insertions(+), 10 deletions(-) diff --git a/SolastaUnfinishedBusiness/Translations/de/Spells/Spells06-de.txt b/SolastaUnfinishedBusiness/Translations/de/Spells/Spells06-de.txt index 14fd8aa24d..63d12633b9 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Spells/Spells06-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Spells/Spells06-de.txt @@ -10,7 +10,7 @@ Spell/&FizbanPlatinumShieldDescription=Du erschaffst ein Feld aus silbrigem Lich Spell/&FizbanPlatinumShieldTitle=Fizbans Platinschild Spell/&FlashFreezeDescription=Sie versuchen, eine Kreatur, die Sie in Reichweite sehen können, in ein Gefängnis aus massivem Eis einzuschließen. Das Ziel muss einen Geschicklichkeitsrettungswurf machen. Bei einem misslungenen Rettungswurf erleidet das Ziel 10W6 Kälteschaden und wird in Schichten aus dickem Eis gefangen. Bei einem erfolgreichen Rettungswurf erleidet das Ziel nur halb so viel Schaden und wird nicht gefangen gehalten. Der Zauber kann nur auf Kreaturen bis zu großer Größe angewendet werden. Um auszubrechen, kann das gefangene Ziel einen Stärkewurf als Aktion gegen Ihren Zauberrettungswurf-SG machen. Bei Erfolg entkommt das Ziel und ist nicht länger gefangen. Wenn Sie diesen Zauber mit einem Zauberplatz der 7. Stufe oder höher wirken, erhöht sich der Kälteschaden um 2W6 für jede Platzstufe über der 6. Spell/&FlashFreezeTitle=Schockgefrieren -Spell/&GravityFissureDescription=Du erzeugst eine Schlucht aus Gravitationsenergie in einer Linie, die von dir ausgeht, 60 Fuß lang und 5 Fuß breit ist und bis zum Ende deines Zuges zu schwierigem Gelände wird. Jede Kreatur in dieser Linie muss einen Konstitutionsrettungswurf machen und erleidet bei einem misslungenen Rettungswurf 8W8 Kraftschaden oder bei einem erfolgreichen Rettungswurf die Hälfte. Jede Kreatur innerhalb von 10 Fuß der Linie, die sich aber nicht darin befindet, muss einen Konstitutionsrettungswurf machen oder erleidet 8W8 Kraftschaden und wird zur Linie gezogen, bis die Kreatur in ihrem Bereich ist. Wenn du diesen Zauber mit einem Slot der 7. Stufe oder höher wirkst, erhöht sich der Schaden um 1W8 für jeden Slotlevel über dem 6. +Spell/&GravityFissureDescription=Du erzeugst eine Schlucht aus Gravitationsenergie in einer Linie, die von dir ausgeht, 60 Fuß lang und 5 Fuß breit ist und bis zum Beginn deines nächsten Zuges zu schwierigem Gelände wird. Jede Kreatur in dieser Linie muss einen Konstitutionsrettungswurf machen und erleidet bei einem misslungenen Rettungswurf 8W8 Kraftschaden oder bei einem erfolgreichen Rettungswurf die Hälfte des Schadens. Jede Kreatur innerhalb von 10 Fuß der Linie, die sich aber nicht darin befindet, muss einen Konstitutionsrettungswurf machen oder erleidet 8W8 Kraftschaden und wird zur Linie gezogen, bis die Kreatur in ihrem Bereich ist. Wenn du diesen Zauber mit einem Slot der 7. Stufe oder höher wirkst, erhöht sich der Schaden um 1W8 für jeden Slotlevel über dem 6. Spell/&GravityFissureTitle=Schwerkraftspalt Spell/&HeroicInfusionDescription=Sie verleihen sich Ausdauer und Kampfgeschick, angetrieben durch Magie. Bis der Zauber endet, können Sie keine Zauber wirken und Sie erhalten die folgenden Vorteile:\n• Sie erhalten 50 temporäre Trefferpunkte. Wenn welche davon übrig sind, wenn der Zauber endet, sind sie verloren.\n• Sie haben einen Vorteil bei Angriffswürfen, die Sie mit einfachen und Kampfwaffen machen.\n• Wenn Sie ein Ziel mit einem Waffenangriff treffen, erleidet dieses Ziel zusätzlichen Kraftschaden von 2W12.\n• Sie besitzen die Rüstungs-, Waffen- und Rettungswurffähigkeiten der Kämpferklasse.\n• Sie können zweimal angreifen, statt einmal, wenn Sie in Ihrem Zug die Angriffsaktion ausführen.\nUnmittelbar nachdem der Zauber endet, müssen Sie einen Konstitutionsrettungswurf DC 15 bestehen oder erleiden eine Stufe Erschöpfung. Spell/&HeroicInfusionTitle=Tensers Verwandlung diff --git a/SolastaUnfinishedBusiness/Translations/en/Spells/Spells06-en.txt b/SolastaUnfinishedBusiness/Translations/en/Spells/Spells06-en.txt index 3d293d40b2..f9f12d25ce 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Spells/Spells06-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Spells/Spells06-en.txt @@ -10,7 +10,7 @@ Spell/&FizbanPlatinumShieldDescription=You create a field of silvery light that Spell/&FizbanPlatinumShieldTitle=Fizban's Platinum Shield Spell/&FlashFreezeDescription=You attempt to encase a creature you can see within range in a prison of solid ice. The target must make a Dexterity saving throw. On a failed save, the target takes 10d6 cold damage and becomes restrained in layers of thick ice. On a successful save, the target takes half as much damage and is not restrained. The spell can only be used on creatures up to large size. To break out, the restrained target can make a Strength check as an action against your spell save DC. On success, the target escapes and is no longer restrained. When you cast this spell using a spell slot of 7th level or higher, the cold damage increases by 2d6 for each slot level above 6th. Spell/&FlashFreezeTitle=Flash Freeze -Spell/&GravityFissureDescription=You manifest a ravine of gravitational energy in a line originating from you that is 60 feet long, 5 feet wide, and becomes difficult terrain until the end of your turn. Each creature in that line must make a Constitution saving throw, taking 8d8 force damage on a failed save, or half as much damage on a successful one. Each creature within 10 feet of the line but not in it must succeed on a Constitution saving throw or take 8d8 force damage and be pulled toward the line until the creature is in its area. When you cast this spell using a slot of 7th level or higher, the damage increases by 1d8 for each slot level above 6th. +Spell/&GravityFissureDescription=You manifest a ravine of gravitational energy in a line originating from you that is 60 feet long, 5 feet wide, and becomes difficult terrain until the start of your next turn. Each creature in that line must make a Constitution saving throw, taking 8d8 force damage on a failed save, or half as much damage on a successful one. Each creature within 10 feet of the line but not in it must succeed on a Constitution saving throw or take 8d8 force damage and be pulled toward the line until the creature is in its area. When you cast this spell using a slot of 7th level or higher, the damage increases by 1d8 for each slot level above 6th. Spell/&GravityFissureTitle=Gravity Fissure Spell/&HeroicInfusionDescription=You endow yourself with endurance and martial prowess fueled by magic. Until the spell ends, you can't cast spells, and you gain the following benefits:\n• You gain 50 temporary hit points. If any of these remain when the spell ends, they are lost.\n• You have advantage on attack rolls that you make with simple and martial weapons.\n• When you hit a target with a weapon attack, that target takes an extra 2d12 force damage.\n• You have the Fighter class armor, weapons, and saving throws proficiencies.\n• You can attack twice, instead of once, when you take the Attack action on your turn.\nImmediately after the spell ends, you must succeed on a DC 15 Constitution saving throw or suffer one level of exhaustion. Spell/&HeroicInfusionTitle=Tenser's Transformation diff --git a/SolastaUnfinishedBusiness/Translations/es/Spells/Spells06-es.txt b/SolastaUnfinishedBusiness/Translations/es/Spells/Spells06-es.txt index 75fb83afef..3aaee056e8 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Spells/Spells06-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Spells/Spells06-es.txt @@ -10,7 +10,7 @@ Spell/&FizbanPlatinumShieldDescription=Creas un campo de luz plateada que rodea Spell/&FizbanPlatinumShieldTitle=Escudo de platino de Fizban Spell/&FlashFreezeDescription=Intentas encerrar a una criatura que puedes ver dentro del alcance en una prisión de hielo sólido. El objetivo debe realizar una tirada de salvación de Destreza. Si falla la tirada, el objetivo sufre 10d6 puntos de daño por frío y queda inmovilizado en capas de hielo grueso. Si tiene éxito, el objetivo sufre la mitad de daño y no queda inmovilizado. El conjuro solo se puede usar en criaturas de tamaño grande. Para escapar, el objetivo inmovilizado puede realizar una prueba de Fuerza como acción contra la CD de tu tirada de salvación de conjuros. Si tiene éxito, el objetivo escapa y ya no queda inmovilizado. Cuando lanzas este conjuro usando un espacio de conjuro de nivel 7 o superior, el daño por frío aumenta en 2d6 por cada nivel de espacio por encima del 6. Spell/&FlashFreezeTitle=Congelación instantánea -Spell/&GravityFissureDescription=Manifiestas un barranco de energía gravitatoria en una línea que se origina desde ti y que tiene 60 pies de largo y 5 pies de ancho, y se convierte en terreno difícil hasta el final de tu turno. Cada criatura en esa línea debe realizar una tirada de salvación de Constitución, recibiendo 8d8 puntos de daño por fuerza si falla la tirada, o la mitad de daño si tiene éxito. Cada criatura que se encuentre a 10 pies de la línea pero que no esté dentro de ella debe superar una tirada de salvación de Constitución o recibirá 8d8 puntos de daño por fuerza y ​​será atraída hacia la línea hasta que la criatura esté en su área. Cuando lanzas este conjuro usando un espacio de nivel 7 o superior, el daño aumenta en 1d8 por cada nivel de espacio por encima del 6. +Spell/&GravityFissureDescription=Manifiestas un barranco de energía gravitatoria en una línea que se origina desde ti y que tiene 60 pies de largo y 5 pies de ancho, y se convierte en terreno difícil hasta el comienzo de tu siguiente turno. Cada criatura en esa línea debe realizar una tirada de salvación de Constitución, recibiendo 8d8 puntos de daño por fuerza si falla la tirada, o la mitad de daño si tiene éxito. Cada criatura a 10 pies de la línea pero que no esté dentro de ella debe superar una tirada de salvación de Constitución o recibir 8d8 puntos de daño por fuerza y ​​ser atraída hacia la línea hasta que la criatura esté en su área. Cuando lanzas este conjuro usando un espacio de nivel 7 o superior, el daño aumenta en 1d8 por cada nivel de espacio por encima del 6. Spell/&GravityFissureTitle=Fisura de gravedad Spell/&HeroicInfusionDescription=Te dotas de resistencia y destreza marcial alimentadas por la magia. Hasta que el conjuro termine, no puedes lanzar conjuros, y obtienes los siguientes beneficios:\n• Obtienes 50 puntos de golpe temporales. Si alguno de estos permanece cuando el conjuro termina, se pierde.\n• Tienes ventaja en las tiradas de ataque que hagas con armas simples y marciales.\n• Cuando golpeas a un objetivo con un ataque de arma, ese objetivo sufre 2d12 puntos de daño de fuerza adicionales.\n• Tienes las competencias de armadura, armas y tiradas de salvación de la clase Guerrero.\n• Puedes atacar dos veces, en lugar de una, cuando realizas la acción de Ataque en tu turno.\nInmediatamente después de que el conjuro termine, debes tener éxito en una tirada de salvación de Constitución CD 15 o sufrir un nivel de agotamiento. Spell/&HeroicInfusionTitle=La transformación de Tenser diff --git a/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells06-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells06-fr.txt index 939d4f5c41..483c8a58de 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells06-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells06-fr.txt @@ -10,7 +10,7 @@ Spell/&FizbanPlatinumShieldDescription=Vous créez un champ de lumière argenté Spell/&FizbanPlatinumShieldTitle=Bouclier de platine de Fizban Spell/&FlashFreezeDescription=Vous tentez d'enfermer une créature visible à portée dans une prison de glace solide. La cible doit réussir un jet de sauvegarde de Dextérité. En cas d'échec, la cible subit 10d6 dégâts de froid et se retrouve emprisonnée dans d'épaisses couches de glace. En cas de réussite, la cible subit la moitié des dégâts et n'est plus emprisonnée. Le sort ne peut être utilisé que sur des créatures de grande taille. Pour s'échapper, la cible emprisonnée peut effectuer un test de Force en tant qu'action contre le DD de votre sauvegarde contre les sorts. En cas de réussite, la cible s'échappe et n'est plus emprisonnée. Lorsque vous lancez ce sort en utilisant un emplacement de sort de niveau 7 ou supérieur, les dégâts de froid augmentent de 2d6 pour chaque niveau d'emplacement au-dessus du niveau 6. Spell/&FlashFreezeTitle=Gel instantané -Spell/&GravityFissureDescription=Vous manifestez un ravin d'énergie gravitationnelle dans une ligne partant de vous, qui mesure 18 mètres de long et 1,5 mètre de large et qui devient un terrain difficile jusqu'à la fin de votre tour. Chaque créature dans cette ligne doit réussir un jet de sauvegarde de Constitution, subissant 8d8 dégâts de force en cas d'échec, ou la moitié de ces dégâts en cas de réussite. Chaque créature à 3 mètres de la ligne mais qui n'en fait pas partie doit réussir un jet de sauvegarde de Constitution ou subir 8d8 dégâts de force et être attirée vers la ligne jusqu'à ce qu'elle soit dans sa zone. Lorsque vous lancez ce sort en utilisant un emplacement de niveau 7 ou supérieur, les dégâts augmentent de 1d8 pour chaque niveau d'emplacement au-dessus du niveau 6. +Spell/&GravityFissureDescription=Vous faites apparaître un ravin d'énergie gravitationnelle sur une ligne partant de vous, qui mesure 18 mètres de long et 1,5 mètre de large et qui devient un terrain difficile jusqu'au début de votre prochain tour. Chaque créature sur cette ligne doit réussir un jet de sauvegarde de Constitution, subissant 8d8 dégâts de force en cas d'échec, ou la moitié de ces dégâts en cas de réussite. Chaque créature à 3 mètres de la ligne mais qui n'en fait pas partie doit réussir un jet de sauvegarde de Constitution ou subir 8d8 dégâts de force et être attirée vers la ligne jusqu'à ce qu'elle soit dans sa zone. Lorsque vous lancez ce sort en utilisant un emplacement de niveau 7 ou supérieur, les dégâts augmentent de 1d8 pour chaque niveau d'emplacement au-dessus du niveau 6. Spell/&GravityFissureTitle=Fissure gravitationnelle Spell/&HeroicInfusionDescription=Vous vous dote d'endurance et de prouesses martiales alimentées par la magie. Jusqu'à la fin du sort, vous ne pouvez pas lancer de sorts et vous obtenez les avantages suivants :\n• Vous gagnez 50 points de vie temporaires. S'il en reste à la fin du sort, ils sont perdus.\n• Vous avez l'avantage sur les jets d'attaque que vous effectuez avec des armes simples et martiales.\n• Lorsque vous touchez une cible avec une attaque d'arme, cette cible subit 2d12 dégâts de force supplémentaires.\n• Vous avez les compétences de classe Guerrier en armure, en armes et en jets de sauvegarde.\n• Vous pouvez attaquer deux fois, au lieu d'une, lorsque vous effectuez l'action Attaquer à votre tour.\nImmédiatement après la fin du sort, vous devez réussir un jet de sauvegarde de Constitution DD 15 ou subir un niveau d'épuisement. Spell/&HeroicInfusionTitle=Transformation de Tenser diff --git a/SolastaUnfinishedBusiness/Translations/it/Spells/Spells06-it.txt b/SolastaUnfinishedBusiness/Translations/it/Spells/Spells06-it.txt index 7c98a7cf29..e618838aaf 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Spells/Spells06-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Spells/Spells06-it.txt @@ -10,7 +10,7 @@ Spell/&FizbanPlatinumShieldDescription=Crei un campo di luce argentata che circo Spell/&FizbanPlatinumShieldTitle=Scudo di platino di Fizban Spell/&FlashFreezeDescription=Tenti di rinchiudere una creatura che puoi vedere entro il raggio d'azione in una prigione di ghiaccio solido. Il bersaglio deve effettuare un tiro salvezza su Destrezza. Se fallisce il tiro salvezza, il bersaglio subisce 10d6 danni da freddo e rimane trattenuto in strati di ghiaccio spesso. Se supera il tiro salvezza, il bersaglio subisce la metà dei danni e non è trattenuto. L'incantesimo può essere utilizzato solo su creature fino a grandi dimensioni. Per evadere, il bersaglio trattenuto può effettuare una prova di Forza come azione contro la CD del tiro salvezza dell'incantesimo. In caso di successo, il bersaglio fugge e non è più trattenuto. Quando lanci questo incantesimo usando uno slot incantesimo di 7° livello o superiore, i danni da freddo aumentano di 2d6 per ogni livello di slot superiore al 6°. Spell/&FlashFreezeTitle=Congelamento rapido -Spell/&GravityFissureDescription=Manifesti un burrone di energia gravitazionale in una linea che parte da te, lunga 60 piedi, larga 5 piedi, e che diventa terreno difficile fino alla fine del tuo turno. Ogni creatura in quella linea deve effettuare un tiro salvezza su Costituzione, subendo 8d8 danni da forza se fallisce il tiro salvezza, o la metà dei danni se lo supera. Ogni creatura entro 10 piedi dalla linea ma non al suo interno deve superare un tiro salvezza su Costituzione o subire 8d8 danni da forza ed essere tirata verso la linea finché non si trova nella sua area. Quando lanci questo incantesimo usando uno slot di 7° livello o superiore, il danno aumenta di 1d8 per ogni livello di slot superiore al 6°. +Spell/&GravityFissureDescription=Manifesti un burrone di energia gravitazionale in una linea che parte da te, lunga 60 piedi e larga 5 piedi, e diventa terreno difficile fino all'inizio del tuo turno successivo. Ogni creatura in quella linea deve effettuare un tiro salvezza su Costituzione, subendo 8d8 danni da forza se fallisce il tiro salvezza, o la metà dei danni se lo supera. Ogni creatura entro 10 piedi dalla linea ma non al suo interno deve superare un tiro salvezza su Costituzione o subire 8d8 danni da forza ed essere tirata verso la linea finché non si trova nella sua area. Quando lanci questo incantesimo usando uno slot di 7° livello o superiore, il danno aumenta di 1d8 per ogni livello di slot superiore al 6°. Spell/&GravityFissureTitle=Fessura di gravità Spell/&HeroicInfusionDescription=Ti doti di resistenza e abilità marziale alimentate dalla magia. Finché l'incantesimo non finisce, non puoi lanciare incantesimi e ottieni i seguenti benefici:\n• Ottieni 50 punti ferita temporanei. Se ne rimangono quando l'incantesimo finisce, vengono persi.\n• Hai vantaggio sui tiri per colpire che effettui con armi semplici e da guerra.\n• Quando colpisci un bersaglio con un attacco con arma, quel bersaglio subisce 2d12 danni da forza extra.\n• Hai le competenze di classe Guerriero in armature, armi e tiri salvezza.\n• Puoi attaccare due volte, invece di una, quando esegui l'azione Attacco nel tuo turno.\nImmediatamente dopo la fine dell'incantesimo, devi superare un tiro salvezza su Costituzione CD 15 o subire un livello di esaurimento. Spell/&HeroicInfusionTitle=La trasformazione di Tenser diff --git a/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells06-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells06-ja.txt index c7fdfb7327..d4585b0961 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells06-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells06-ja.txt @@ -10,7 +10,7 @@ Spell/&FizbanPlatinumShieldDescription=範囲内の選択したクリーチャ Spell/&FizbanPlatinumShieldTitle=フィズバンのプラチナシールド Spell/&FlashFreezeDescription=あなたは範囲内に見える生き物を固い氷の牢獄に閉じ込めようとします。ターゲットは器用さセーヴィングスローを行わなければなりません。セーブに失敗すると、ターゲットは 10d6 の冷気ダメージを受け、厚い氷の層に拘束されます。セーブに成功すると、ターゲットは半分のダメージを受け、拘束されなくなります。この呪文は大きいサイズまでのクリーチャーにのみ使用できます。打開するために、拘束されたターゲットはあなたのスペルセーブ難易度に対するアクションとして筋力チェックを行うことができます。成功するとターゲットは逃走し、拘束されなくなります。 7 レベル以上の呪文スロットを使用してこの呪文を唱えると、冷気ダメージは 6 レベル以上のスロット レベルごとに 2d6 増加します。 Spell/&FlashFreezeTitle=フラッシュフリーズ -Spell/&GravityFissureDescription=君自身を起点として長さ 60 フィート、幅 5 フィートの線上に重力エネルギーの峡谷を出現させ、君のターン終了時まで移動困難な地形とする。その線上の各クリーチャーは耐久力セーヴィング スローを行わなければならず、失敗すると 8d8 の力場ダメージを受け、成功すると半分のダメージを受ける。線から 10 フィート以内にいるが線上にいない各クリーチャーは耐久力セーヴィング スローに成功するか、8d8 の力場ダメージを受け、クリーチャーがその領域に入るまで線に向かって引き寄せられる。この呪文を 7 レベル以上のスロットを使用して発動する場合、ダメージは 6 レベルを超えるスロット レベルごとに 1d8 増加する。 +Spell/&GravityFissureDescription=君自身を起点として長さ 60 フィート、幅 5 フィートの線上に重力エネルギーの峡谷を出現させ、君の次のターンの開始時まで移動困難な地形とする。その線上の各クリーチャーは耐久力セーヴィング スローを行わなければならず、失敗すると 8d8 の力場ダメージを受け、成功すると半分のダメージを受ける。線から 10 フィート以内にいるが線上にいない各クリーチャーは耐久力セーヴィング スローに成功するか、8d8 の力場ダメージを受け、クリーチャーがその領域に入るまで線に向かって引き寄せられる。この呪文を 7 レベル以上のスロットを使用して発動する場合、ダメージは 6 レベルを超えるスロット レベルごとに 1d8 増加する。 Spell/&GravityFissureTitle=重力亀裂 Spell/&HeroicInfusionDescription=あなたは魔法によって強化された持久力と武勇を自分に与えます。呪文が終了するまで、呪文を唱えることはできませんが、次の利点が得られます:\n• 一時的に 50 ヒット ポイントを獲得します。呪文が終了するときにこれらのいずれかが残っている場合、それらは失われます。\n• 単純な武器と格闘武器を使って行う攻撃ロールでは有利です。\n• 武器攻撃でターゲットを攻撃すると、そのターゲットは次のダメージを受けます。追加の 2d12 フォース ダメージ。\n• ファイター クラスのアーマー、武器、セーヴィング スローの熟練度を持っています。\n• 自分のターンに攻撃アクションを行うと、1 回ではなく 2 回攻撃できます。\n呪文が終了した直後に、難易度 15 の耐久力セーヴィング スローに成功するか、1 レベルの疲労状態に陥る必要があります。 Spell/&HeroicInfusionTitle=テンサーの変身 diff --git a/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells06-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells06-ko.txt index d5ef7952bf..b76ed95508 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells06-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells06-ko.txt @@ -10,7 +10,7 @@ Spell/&FizbanPlatinumShieldDescription=당신은 범위 내에서 당신이 선 Spell/&FizbanPlatinumShieldTitle=피즈반의 백금 방패 Spell/&FlashFreezeDescription=당신은 범위 내에서 볼 수 있는 생물을 단단한 얼음 감옥에 가두려고 합니다. 대상은 민첩 내성 굴림을 해야 합니다. 저장에 실패하면 대상은 10d6의 냉기 피해를 입고 두꺼운 얼음 층에 갇히게 됩니다. 내성에 성공하면 대상은 절반의 피해를 입고 구속되지 않습니다. 이 주문은 최대 크기의 생물에게만 사용할 수 있습니다. 탈출하기 위해, 제한된 목표는 당신의 주문 내성 DC에 대한 행동으로 힘 체크를 할 수 있습니다. 성공하면 대상은 탈출하고 더 이상 구속되지 않습니다. 7레벨 이상의 주문 슬롯을 사용하여 이 주문을 시전하면 6레벨 이상의 슬롯 레벨마다 냉기 피해가 2d6씩 증가합니다. Spell/&FlashFreezeTitle=플래시 프리즈 -Spell/&GravityFissureDescription=당신은 60피트 길이, 5피트 너비의 중력 에너지 협곡을 당신에게서 시작하여 선으로 나타내며, 턴이 끝날 때까지 어려운 지형이 됩니다. 그 선에 있는 각 생물은 체력 구원 굴림을 해야 하며, 실패하면 8d8의 힘 피해를 입거나, 성공하면 절반의 피해를 입습니다. 선에서 10피트 이내에 있지만 선 안에 있지 않은 각 생물은 체력 구원 굴림에 성공해야 하며, 실패하면 8d8의 힘 피해를 입고 생물이 그 영역에 들어올 때까지 선으로 끌려갑니다. 7레벨 이상의 슬롯을 사용하여 이 주문을 시전하면 6레벨 이상의 슬롯 레벨마다 피해가 1d8씩 증가합니다. +Spell/&GravityFissureDescription=당신은 60피트 길이, 5피트 너비의 중력 에너지 협곡을 당신에게서 시작하여 다음 턴이 시작될 때까지 어려운 지형이 되는 선으로 나타냅니다. 그 선에 있는 각 생물은 체력 구원 굴림을 해야 하며, 실패하면 8d8의 힘 피해를 입거나 성공하면 절반의 피해를 입습니다. 선에서 10피트 이내에 있지만 선 안에 있지 않은 각 생물은 체력 구원 굴림에 성공해야 하며, 실패하면 8d8의 힘 피해를 입고 생물이 그 영역에 들어올 때까지 선으로 끌려갑니다. 7레벨 이상의 슬롯을 사용하여 이 주문을 시전하면 6레벨 이상의 슬롯 레벨마다 피해가 1d8씩 증가합니다. Spell/&GravityFissureTitle=중력 균열 Spell/&HeroicInfusionDescription=당신은 마법에 힘입어 지구력과 무술의 기량을 자신에게 부여합니다. 주문이 끝날 때까지 주문을 시전할 수 없으며 다음과 같은 이점을 얻습니다.\n• 임시 체력 50점을 얻습니다. 주문이 끝날 때 이들 중 하나라도 남아 있으면 잃게 됩니다.\n• 단순 무기와 군용 무기로 하는 공격 굴림에 이점이 있습니다.\n• 무기 공격으로 대상을 명중하면 해당 대상은 다음과 같은 공격을 받습니다. 추가 2d12 강제 피해.\n• 파이터 클래스 방어구, 무기 및 내성 굴림 능력이 있습니다.\n• 자신의 차례에 공격 행동을 취할 때 한 번이 아닌 두 번 공격할 수 있습니다.\n 주문이 끝난 직후, 당신은 DC 15 헌법 내성 굴림에 성공해야 하며, 그렇지 않으면 한 단계의 탈진을 겪어야 합니다. Spell/&HeroicInfusionTitle=텐서의 변환 diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells06-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells06-pt-BR.txt index 4609f0392e..9ed388c993 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells06-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells06-pt-BR.txt @@ -10,7 +10,7 @@ Spell/&FizbanPlatinumShieldDescription=Você cria um campo de luz prateada que c Spell/&FizbanPlatinumShieldTitle=Escudo de Platina de Fizban Spell/&FlashFreezeDescription=Você tenta prender uma criatura que você pode ver dentro do alcance em uma prisão de gelo sólido. O alvo deve fazer um teste de resistência de Destreza. Em uma falha, o alvo sofre 10d6 de dano de frio e fica contido em camadas de gelo espesso. Em uma resistência bem-sucedida, o alvo sofre metade do dano e não fica contido. A magia só pode ser usada em criaturas de tamanho até grande. Para escapar, o alvo contido pode fazer um teste de Força como uma ação contra sua CD de resistência à magia. Em caso de sucesso, o alvo escapa e não fica mais contido. Quando você conjura esta magia usando um espaço de magia de 7º nível ou superior, o dano de frio aumenta em 2d6 para cada nível de espaço acima do 6º. Spell/&FlashFreezeTitle=Congelamento instantâneo -Spell/&GravityFissureDescription=Você manifesta uma ravina de energia gravitacional em uma linha originada de você que tem 60 pés de comprimento, 5 pés de largura e se torna terreno difícil até o final do seu turno. Cada criatura naquela linha deve fazer um teste de resistência de Constituição, sofrendo 8d8 de dano de força em um teste falho, ou metade do dano em um teste bem-sucedido. Cada criatura a 10 pés da linha, mas não dentro dela, deve ter sucesso em um teste de resistência de Constituição ou sofrer 8d8 de dano de força e ser puxada em direção à linha até que a criatura esteja em sua área. Quando você conjura esta magia usando um slot de 7º nível ou superior, o dano aumenta em 1d8 para cada nível de slot acima de 6º. +Spell/&GravityFissureDescription=Você manifesta uma ravina de energia gravitacional em uma linha originada de você que tem 60 pés de comprimento, 5 pés de largura e se torna terreno difícil até o início do seu próximo turno. Cada criatura naquela linha deve fazer um teste de resistência de Constituição, sofrendo 8d8 de dano de força em um teste falho, ou metade do dano em um teste bem-sucedido. Cada criatura a 10 pés da linha, mas não dentro dela, deve ter sucesso em um teste de resistência de Constituição ou sofrer 8d8 de dano de força e ser puxada em direção à linha até que a criatura esteja em sua área. Quando você conjura esta magia usando um slot de 7º nível ou superior, o dano aumenta em 1d8 para cada nível de slot acima do 6º. Spell/&GravityFissureTitle=Fissura Gravitacional Spell/&HeroicInfusionDescription=Você se dota de resistência e destreza marcial alimentadas por magia. Até que a magia termine, você não pode conjurar magias e ganha os seguintes benefícios:\n• Você ganha 50 pontos de vida temporários. Se algum deles permanecer quando a magia terminar, eles serão perdidos.\n• Você tem vantagem em jogadas de ataque que fizer com armas simples e marciais.\n• Quando você atinge um alvo com um ataque de arma, esse alvo recebe 2d12 de dano de força extra.\n• Você tem as proficiências de armadura, armas e testes de resistência da classe Guerreiro.\n• Você pode atacar duas vezes, em vez de uma, quando realiza a ação Atacar no seu turno.\nImediatamente após o fim da magia, você deve ser bem-sucedido em um teste de resistência de Constituição CD 15 ou sofrer um nível de exaustão. Spell/&HeroicInfusionTitle=Transformação de Tenser diff --git a/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells06-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells06-ru.txt index 74c3a796fe..793cd8bdda 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells06-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells06-ru.txt @@ -10,7 +10,7 @@ Spell/&FizbanPlatinumShieldDescription=Вы создаёте поле сереб Spell/&FizbanPlatinumShieldTitle=Платиновый щит Физбана Spell/&FlashFreezeDescription=Вы пытаетесь заключить существо, которое видите в пределах дистанции, в темницу из твёрдого льда. Цель должна совершить спасбросок Ловкости. При провале цель получает 10d6 урона холодом и становится опутанной, покрываясь слоями толстого льда. При успешном спасброске цель получает в два раза меньше урона и не становится опутанной. Заклинание можно применять только к существам вплоть до большого размера. Чтобы освободиться, опутанная цель может действием совершить проверку Силы против Сл спасброска заклинания. При успехе цель освобождается и больше не является опутанной. Когда вы накладываете это заклинание, используя ячейку заклинания 7-го уровня или выше, урон от холода увеличивается на 2d6 за каждый уровень ячейки выше 6-го. Spell/&FlashFreezeTitle=Мгновенная заморозка -Spell/&GravityFissureDescription=Вы создаете овраг гравитационной энергии в исходящей от вас линии, которая имеет длину 60 футов, ширину 5 футов и становится труднопроходимой местностью до конца вашего хода. Каждое существо в этой линии должно сделать спасбросок Телосложения, получив 8d8 урона силой при провале или половину урона при успехе. Каждое существо в пределах 10 футов от линии, но не на ней, должно преуспеть в спасброске Телосложения или получить 8d8 урона силой и быть притянутым к линии, пока существо не окажется в его области. Когда вы произносите это заклинание, используя слот 7-го уровня или выше, урон увеличивается на 1d8 за каждый уровень слота выше 6-го. +Spell/&GravityFissureDescription=Вы создаете овраг гравитационной энергии в линии, исходящей от вас, длиной 60 футов, шириной 5 футов, и он становится труднопроходимой местностью до начала вашего следующего хода. Каждое существо в этой линии должно сделать спасбросок Телосложения, получив 8d8 урона силой при провале или половину урона при успехе. Каждое существо в пределах 10 футов от линии, но не на ней, должно преуспеть в спасброске Телосложения или получить 8d8 урона силой и быть притянутым к линии, пока существо не окажется в его области. Когда вы произносите это заклинание, используя слот 7-го уровня или выше, урон увеличивается на 1d8 за каждый уровень слота выше 6-го. Spell/&GravityFissureTitle=Гравитационная трещина Spell/&HeroicInfusionDescription=Вы наделяете себя выносливостью и воинской доблестью, подпитываемыми магией. Пока заклинание не закончится, вы не можете накладывать заклинания, но получаете следующие преимущества:\n• Вы получаете 50 временных хитов. Если какое-либо их количество остаётся, когда заклинание заканчивается, они теряются.\n• Вы совершаете с преимуществом все броски атаки, совершаемые простым или воинским оружием.\n• Когда вы попадаете по цели атакой оружием, она получает дополнительно 2d12 урона силовым полем.\n• Вы получаете владение всеми доспехами, оружием и спасбросками, присущими классу Воина.\n• Если вы в свой ход совершаете действие Атака, вы можете совершить две атаки вместо одной.\nСразу после того, как заклинание оканчивается, вы должны преуспеть в спасброске Телосложения Сл 15, иначе получите одну степень истощения. Spell/&HeroicInfusionTitle=Трансформация Тензера diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells06-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells06-zh-CN.txt index cab86c6187..637198afc7 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells06-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells06-zh-CN.txt @@ -10,7 +10,7 @@ Spell/&FizbanPlatinumShieldDescription=你创造一道闪着银光的力场, Spell/&FizbanPlatinumShieldTitle=费资本铂金盾 Spell/&FlashFreezeDescription=你试图将一个你能在范围内看到的生物关进坚固的冰牢里。目标必须进行敏捷豁免检定。如果豁免失败,目标会受到 10d6 的冷冻伤害,并被束缚在厚厚的冰层中。成功豁免后,目标将受到一半伤害并且不受束缚。该法术只能对上限为大型体型的生物使用。为了逃脱,被束缚的目标可以一个动作进行一次力量检定,对抗你的法术豁免 DC。成功后,目标将逃脱并不再受到束缚。当你使用 7 环或更高环阶的法术位施放此法术时,每高于 6 环的法术位环阶,冷冻伤害就会增加 2d6。 Spell/&FlashFreezeTitle=急冻术 -Spell/&GravityFissureDescription=你以你为起点,在一条直线上显现出一个引力能量峡谷,长 60 英尺,宽 5 英尺,在你的回合结束前,该峡谷将变成困难地形。该直线上的每个生物都必须进行体质豁免检定,豁免失败则受到 8d8 力场伤害,豁免成功则伤害减半。该直线 10 英尺范围内但不在线内的生物必须通过体质豁免检定,否则将受到 8d8 力场伤害,并被拉向该直线,直到该生物进入其区域。当你使用 7 级或更高级别的槽位施放此法术时,每高于 6 级槽位,伤害增加 1d8。 +Spell/&GravityFissureDescription=你从你身上引出一条长 60 英尺、宽 5 英尺的引力峡谷,这条峡谷在你下一轮开始前会变成一条困难地形。这条峡谷内的每个生物都必须进行体质豁免,豁免失败则受到 8d8 力场伤害,豁免成功则伤害减半。距离这条峡谷 10 英尺以内但不在线内的生物必须通过体质豁免,否则会受到 8d8 力场伤害并被拉向这条峡谷,直到生物进入其区域。当你使用 7 级或更高等级的槽位施放此法术时,每高于 6 级槽位等级,伤害增加 1d8。 Spell/&GravityFissureTitle=重力裂缝 Spell/&HeroicInfusionDescription=你赋予自己以魔法为燃料的耐力与武艺。在法术结束之前,你无法施展法术,并且你会获得以下好处:\n• 你获得 50 点临时生命值。如果法术结束时有未消耗的部分,则全部消失。\n• 你在使用简单武器和军用武器进行的攻击检定中具有优势。\n• 当你使用武器攻击击中目标时,该目标将受到额外的 2d12 力场伤害。\n• 你获得战士的护甲、武器和豁免熟练项。\n• 当你在自己的回合中采取攻击动作时,你可以攻击两次,而不是一次。\n法术结束后,你必须立即通过 DC 15 的体质豁免检定,否则会承受一级力竭。 Spell/&HeroicInfusionTitle=谭森变形术 From 0a435b33656a51c95a213f3cc408d9d2e07e269b Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sun, 15 Sep 2024 12:03:36 -0700 Subject: [PATCH 203/212] minor tweaks and fixes on spells SFX and behaviors --- .../Resources/Spells/GravityFissure.png | Bin 17125 -> 14160 bytes .../Spells/SpellBuildersCantrips.cs | 8 +-- .../Spells/SpellBuildersLevel05.cs | 2 +- .../Spells/SpellBuildersLevel06.cs | 67 +++++++++++------- .../Spells/SpellBuildersLevel08.cs | 2 +- 5 files changed, 46 insertions(+), 33 deletions(-) diff --git a/SolastaUnfinishedBusiness/Resources/Spells/GravityFissure.png b/SolastaUnfinishedBusiness/Resources/Spells/GravityFissure.png index 09a5a089a9db494de02b1c3aaa8449ec48c7e9d9..25d68139c70999a2df9aef828ec703d94e172b3a 100644 GIT binary patch literal 14160 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 Ef|b|6!2kdN diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs index 7b8bd00698..281c0085e7 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs @@ -1100,10 +1100,10 @@ public EffectDescription GetEffectDescription( { var diceNumber = character.TryGetAttributeValue(AttributeDefinitions.CharacterLevel) switch { - >= 17 => 3, - >= 11 => 2, - >= 5 => 1, - _ => 0 + >= 17 => 4, + >= 11 => 3, + >= 5 => 2, + _ => 1 }; var damageForm = effectDescription.EffectForms[0].DamageForm; diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel05.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel05.cs index 321a15a091..57b79cb25b 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel05.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel05.cs @@ -919,8 +919,8 @@ internal static SpellDefinition BuildHolyWeapon() .SetConditionForm( ConditionDefinitions.ConditionBlinded, ConditionForm.ConditionOperation.Add) .Build()) - .SetCasterEffectParameters(PowerOathOfDevotionTurnUnholy) .SetParticleEffectParameters(FaerieFire) + .SetCasterEffectParameters(PowerOathOfDevotionTurnUnholy) .SetImpactEffectParameters( FeatureDefinitionAdditionalDamages.AdditionalDamageBrandingSmite.impactParticleReference) .SetConditionEffectParameters(ConditionDefinitions.ConditionBlinded) diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel06.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel06.cs index 8b1036f589..884d3320bc 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel06.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel06.cs @@ -209,7 +209,7 @@ internal static SpellDefinition BuildGravityFissure() .SetTargetingData(Side.All, RangeType.Distance, 6, TargetType.IndividualsUnique) .SetSavingThrowData(false, AttributeDefinitions.Constitution, true, EffectDifficultyClassComputation.SpellCastingFeature) - .SetEffectAdvancement(EffectIncrementMethod.PerAdditionalSlotLevel, additionalDicePerIncrement: 1) + .SetEffectAdvancement(EffectIncrementMethod.PerAdditionalSlotLevel, additionalDicePerIncrement: 1) .SetEffectForms( EffectFormBuilder .Create() @@ -221,7 +221,7 @@ internal static SpellDefinition BuildGravityFissure() .HasSavingThrow(EffectSavingThrowType.Negates) .SetMotionForm(MotionForm.MotionType.DragToOrigin, 2) .Build()) - .SetImpactEffectParameters(GravitySlam) + .SetImpactEffectParameters(EldritchBlast) .Build()) .AddToDB(); @@ -242,8 +242,8 @@ internal static SpellDefinition BuildGravityFissure() EffectDescriptionBuilder .Create(Earthquake) // only required to get the SFX in this particular scenario to activate - // deviates a bit from TT but not OP at all to have difficult terrain until end of turn - .SetDurationData(DurationType.Round) + // deviates a bit from TT but not OP at all to have difficult terrain until start of turn + .SetDurationData(DurationType.Round, 0, TurnOccurenceType.StartOfTurn) .SetTargetingData(Side.All, RangeType.Self, 1, TargetType.Line, 12) .SetSavingThrowData(false, AttributeDefinitions.Constitution, true, EffectDifficultyClassComputation.SpellCastingFeature) @@ -258,7 +258,7 @@ internal static SpellDefinition BuildGravityFissure() .Build(), // only required to get the SFX in this particular scenario to activate EffectFormBuilder.TopologyForm(TopologyForm.Type.DangerousZone, false)) - .SetImpactEffectParameters(GravitySlam) + .SetImpactEffectParameters(EldritchBlast) .Build()) .AddCustomSubFeatures(new PowerOrSpellFinishedByMeGravityFissure(power)) .AddToDB(); @@ -298,6 +298,13 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, var actingCharacter = action.ActingCharacter; var locationCharacterService = ServiceRepository.GetService(); var dummy = locationCharacterService.DummyCharacter; + + // collect all covered positions except for the one under the caster + var coveredFloorPositions = CharacterActionMagicEffectPatcher.CoveredFloorPositions + .Where(x => x != actingCharacter.LocationPosition) + .ToList(); + + // collect all contenders that should be dragged var contendersAndPositions = (Gui.Battle?.AllContenders ?? locationCharacterService.PartyCharacters.Union(locationCharacterService.GuestCharacters)) @@ -305,10 +312,18 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, // don't include caster x != actingCharacter && // don't include affected contenders - !CharacterActionMagicEffectPatcher.AffectedFloorPositions.Contains(x.LocationPosition)) + !CharacterActionMagicEffectPatcher.AffectedFloorPositions.Contains(x.LocationPosition) && + // don't include actions not within 2 cells range + coveredFloorPositions.Any(y => + { + dummy.LocationPosition = y; + + return x.IsWithinRange(dummy, 2); + })) // create tab to select best position and set initial to far beyond .ToDictionary(x => x, _ => new Container()); + CharacterActionMagicEffectPatcher.CoveredFloorPositions.Reverse(); // select the best position possible to force a drag to effect origin @@ -316,23 +331,20 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, { var contender = contenderAndPosition.Key; - foreach (var coveredFloorPosition in CharacterActionMagicEffectPatcher.CoveredFloorPositions) + foreach (var coveredFloorPosition in coveredFloorPositions) { + // must be inside loop as Position can change on previous interactions var bestDragToPosition = contenderAndPosition.Value.Position; - dummy.LocationPosition = coveredFloorPosition; - - if (!contender.IsWithinRange(dummy, 2)) - { - continue; - } - - var newDistance = DistanceCalculation.GetDistanceFromCharacters(contender, dummy); - dummy.LocationPosition = bestDragToPosition; var currentDistance = DistanceCalculation.GetDistanceFromCharacters(contender, dummy); + dummy.LocationPosition = coveredFloorPosition; + + var newDistance = DistanceCalculation.GetDistanceFromCharacters(contender, dummy); + + //TODO: improve this with a better logic to determine which cell should pull in the end if (currentDistance - newDistance < 0) { continue; @@ -342,9 +354,6 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, } } - // clean up the house as a good guest - dummy.LocationPosition = Container.PlaceHolderPosition; - // issue drag to origin powers to all contenders with a non placeholder position var actionService = ServiceRepository.GetService(); var implementationService = ServiceRepository.GetService(); @@ -354,15 +363,16 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, // use spentPoints to store effect level to be used later by power usablePower.spentPoints = action.ActionParams.activeEffect.EffectLevel; - // drag each selected contender to the closest position - // ReSharper disable once ForeachCanBePartlyConvertedToQueryUsingAnotherGetEnumerator - foreach (var x in contendersAndPositions) - { - if (x.Value.Position == Container.PlaceHolderPosition) - { - continue; - } + // drag each contender to the selected position starting with the ones closer to the line + foreach (var x in contendersAndPositions + .Where(x => x.Value.Position != Container.PlaceHolderPosition) + .OrderBy(x => + { + dummy.LocationPosition = x.Value.Position; + return DistanceCalculation.GetDistanceFromCharacters(x.Key, dummy); + })) + { var actionParams = new CharacterActionParams(actingCharacter, Id.SpendPower) { ActionModifiers = { new ActionModifier() }, @@ -376,6 +386,9 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, actionService.ExecuteInstantSingleAction(actionParams); } + // clean up the house as a good guest + dummy.LocationPosition = Container.PlaceHolderPosition; + yield break; } diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel08.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel08.cs index f61f2aa429..46f80ef4b9 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel08.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel08.cs @@ -98,7 +98,7 @@ internal static SpellDefinition BuildGlibness() var condition = ConditionDefinitionBuilder .Create($"Condition{NAME}") - .SetGuiPresentation(NAME, Category.Spell) + .SetGuiPresentation(NAME, Category.Spell, ConditionBlessed) .SetPossessive() .AddCustomSubFeatures(new ModifyAbilityCheckGlibness()) .AddToDB(); From c0e8f9f8add7b6492abab68406b2f183c8ff22e7 Mon Sep 17 00:00:00 2001 From: Dovel Date: Sun, 15 Sep 2024 22:18:20 +0300 Subject: [PATCH 204/212] update russian translation --- .../Translations/ru/Spells/Spells06-ru.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells06-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells06-ru.txt index 793cd8bdda..8afde196d5 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells06-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells06-ru.txt @@ -10,8 +10,8 @@ Spell/&FizbanPlatinumShieldDescription=Вы создаёте поле сереб Spell/&FizbanPlatinumShieldTitle=Платиновый щит Физбана Spell/&FlashFreezeDescription=Вы пытаетесь заключить существо, которое видите в пределах дистанции, в темницу из твёрдого льда. Цель должна совершить спасбросок Ловкости. При провале цель получает 10d6 урона холодом и становится опутанной, покрываясь слоями толстого льда. При успешном спасброске цель получает в два раза меньше урона и не становится опутанной. Заклинание можно применять только к существам вплоть до большого размера. Чтобы освободиться, опутанная цель может действием совершить проверку Силы против Сл спасброска заклинания. При успехе цель освобождается и больше не является опутанной. Когда вы накладываете это заклинание, используя ячейку заклинания 7-го уровня или выше, урон от холода увеличивается на 2d6 за каждый уровень ячейки выше 6-го. Spell/&FlashFreezeTitle=Мгновенная заморозка -Spell/&GravityFissureDescription=Вы создаете овраг гравитационной энергии в линии, исходящей от вас, длиной 60 футов, шириной 5 футов, и он становится труднопроходимой местностью до начала вашего следующего хода. Каждое существо в этой линии должно сделать спасбросок Телосложения, получив 8d8 урона силой при провале или половину урона при успехе. Каждое существо в пределах 10 футов от линии, но не на ней, должно преуспеть в спасброске Телосложения или получить 8d8 урона силой и быть притянутым к линии, пока существо не окажется в его области. Когда вы произносите это заклинание, используя слот 7-го уровня или выше, урон увеличивается на 1d8 за каждый уровень слота выше 6-го. -Spell/&GravityFissureTitle=Гравитационная трещина +Spell/&GravityFissureDescription=Вы создаете червоточину в пространстве, обладающую огромным притяжением. Червоточина исходит от вас на 60 футов в длину и 5 футов в ширину, это пространство становится труднопроходимой местностью до начала вашего следующего хода. Все существа, попавшие в эту линию, должны совершить спасбросок Телосложения, получая 8d8 урона силовым полем при провале и половину этого урона при успехе. Все существа в пределах 10 футов от линии, не находящиеся в ней, должны преуспеть в спасброске Телосложения, иначе получит 8d8 урона силовым полем и притянется по прямой к линии, пока не окажется в её пространстве. Если вы накладываете это заклинание, используя ячейку 7-го уровня или выше, урон увеличивается на 1d8 за каждый уровень выше шестого. +Spell/&GravityFissureTitle=Гравитационный разлом Spell/&HeroicInfusionDescription=Вы наделяете себя выносливостью и воинской доблестью, подпитываемыми магией. Пока заклинание не закончится, вы не можете накладывать заклинания, но получаете следующие преимущества:\n• Вы получаете 50 временных хитов. Если какое-либо их количество остаётся, когда заклинание заканчивается, они теряются.\n• Вы совершаете с преимуществом все броски атаки, совершаемые простым или воинским оружием.\n• Когда вы попадаете по цели атакой оружием, она получает дополнительно 2d12 урона силовым полем.\n• Вы получаете владение всеми доспехами, оружием и спасбросками, присущими классу Воина.\n• Если вы в свой ход совершаете действие Атака, вы можете совершить две атаки вместо одной.\nСразу после того, как заклинание оканчивается, вы должны преуспеть в спасброске Телосложения Сл 15, иначе получите одну степень истощения. Spell/&HeroicInfusionTitle=Трансформация Тензера Spell/&MysticalCloakDescription=Накладывая заклинание, вы обращаетесь к магии Нижних или Верхних планов (по вашему выбору), чтобы преобразовать себя. From fb42c97027c6d319a453b5deb0fedf15a7981dfd Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sun, 15 Sep 2024 14:32:34 -0700 Subject: [PATCH 205/212] minor formatting and tweaks --- Documentation/Spells.md | 2 +- SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs | 4 +++- .../Api/LanguageExtensions/Int3Extensions.cs | 4 +++- SolastaUnfinishedBusiness/Patches/AiLocationManagerPatcher.cs | 2 +- SolastaUnfinishedBusiness/Subclasses/CircleOfTheWildfire.cs | 1 - 5 files changed, 8 insertions(+), 5 deletions(-) diff --git a/Documentation/Spells.md b/Documentation/Spells.md index d45b382aae..629cd0a3cd 100644 --- a/Documentation/Spells.md +++ b/Documentation/Spells.md @@ -1650,7 +1650,7 @@ A sphere surrounding you prevents any spell up to 5th level to affect anyone ins **[Wizard]** -You manifest a ravine of gravitational energy in a line originating from you that is 100 feet long and 5 feet wide. Each creature in that line must make a Constitution saving throw, taking 8d8 force damage on a failed save, or half as much damage on a successful one. Each creature within 10 feet of the line but not in it must succeed on a Constitution saving throw or take 8d8 force damage and be pulled toward the line until the creature is in its area. When you cast this spell using a slot of 7th level or higher, the damage increases by 1d8 for each slot level above 6th. +You manifest a ravine of gravitational energy in a line originating from you that is 60 feet long, 5 feet wide, and becomes difficult terrain until the start of your next turn. Each creature in that line must make a Constitution saving throw, taking 8d8 force damage on a failed save, or half as much damage on a successful one. Each creature within 10 feet of the line but not in it must succeed on a Constitution saving throw or take 8d8 force damage and be pulled toward the line until the creature is in its area. When you cast this spell using a slot of 7th level or higher, the damage increases by 1d8 for each slot level above 6th. # 274. - Harm (V,S) level 6 Necromancy [SOL] diff --git a/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs b/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs index 53c05fdc9c..3aac386d9b 100644 --- a/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs +++ b/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs @@ -786,6 +786,9 @@ internal static class DeityDefinitions internal static class EffectProxyDefinitions { + internal static EffectProxyDefinition ProxyWallOfFire_Line { get; } = + GetDefinition("ProxyWallOfFire_Line"); + internal static EffectProxyDefinition ProxyIndomitableLight { get; } = GetDefinition("ProxyIndomitableLight"); @@ -810,7 +813,6 @@ internal static class EffectProxyDefinitions internal static EffectProxyDefinition ProxyInsectPlague { get; } = GetDefinition("ProxyInsectPlague"); - internal static EffectProxyDefinition ProxySpikeGrowth { get; } = GetDefinition("ProxySpikeGrowth"); diff --git a/SolastaUnfinishedBusiness/Api/LanguageExtensions/Int3Extensions.cs b/SolastaUnfinishedBusiness/Api/LanguageExtensions/Int3Extensions.cs index 21e33505bf..d0480662ed 100644 --- a/SolastaUnfinishedBusiness/Api/LanguageExtensions/Int3Extensions.cs +++ b/SolastaUnfinishedBusiness/Api/LanguageExtensions/Int3Extensions.cs @@ -1,4 +1,5 @@ -using System; +#if DEBUG +using System; using TA; namespace SolastaUnfinishedBusiness.Api.LanguageExtensions; @@ -10,3 +11,4 @@ public static int Manhattan(this int3 self) return Math.Max(Math.Abs(self.x), Math.Max(Math.Abs(self.y), Math.Abs(self.z))); } } +#endif diff --git a/SolastaUnfinishedBusiness/Patches/AiLocationManagerPatcher.cs b/SolastaUnfinishedBusiness/Patches/AiLocationManagerPatcher.cs index ca86c223b7..8328f27592 100644 --- a/SolastaUnfinishedBusiness/Patches/AiLocationManagerPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/AiLocationManagerPatcher.cs @@ -15,7 +15,7 @@ namespace SolastaUnfinishedBusiness.Patches; public static class AiLocationManagerPatcher { //TODO: move to separate class? - internal static T CreateDelegate(this MethodInfo method) where T : Delegate + private static T CreateDelegate(this MethodInfo method) where T : Delegate { return (T)Delegate.CreateDelegate(typeof(T), method); } diff --git a/SolastaUnfinishedBusiness/Subclasses/CircleOfTheWildfire.cs b/SolastaUnfinishedBusiness/Subclasses/CircleOfTheWildfire.cs index d23a7075b5..775f5dd4b6 100644 --- a/SolastaUnfinishedBusiness/Subclasses/CircleOfTheWildfire.cs +++ b/SolastaUnfinishedBusiness/Subclasses/CircleOfTheWildfire.cs @@ -394,7 +394,6 @@ public CircleOfTheWildfire() // EffectProxyCauterizingFlames.actionId = Id.NoAction; - EffectProxyCauterizingFlames.addLightSource = false; var powerSummonCauterizingFlames = FeatureDefinitionPowerBuilder .Create(PowerSummonCauterizingFlamesName) From 13ecea02fe85f00189cddbc33ce9e80c0ba20a96 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sun, 15 Sep 2024 16:29:04 -0700 Subject: [PATCH 206/212] improve bonfire cantrip to use vanilla only at the expense of more than 1 damage instance on same hero if entering area more than once on same turn --- .../ConditionCreateBonfireMark.json | 157 -------- .../ProxyCreateBonfire.json | 36 +- .../PowerCreateBonfireDamage.json | 363 ------------------ .../SpellDefinition/CreateBonfire.json | 59 ++- Documentation/Spells.md | 2 +- .../Interfaces/ICharacterBattleListeners.cs | 7 - .../Patches/CharacterActionPatcher.cs | 4 - .../GameLocationBattleManagerPatcher.cs | 3 - .../Spells/SpellBuildersCantrips.cs | 269 +++---------- .../Translations/de/Spells/Cantrips-de.txt | 2 +- .../Translations/en/Spells/Cantrips-en.txt | 2 +- .../Translations/es/Spells/Cantrips-es.txt | 2 +- .../Translations/fr/Spells/Cantrips-fr.txt | 2 +- .../Translations/it/Spells/Cantrips-it.txt | 2 +- .../Translations/ja/Spells/Cantrips-ja.txt | 2 +- .../Translations/ko/Spells/Cantrips-ko.txt | 2 +- .../pt-BR/Spells/Cantrips-pt-BR.txt | 2 +- .../Translations/ru/Spells/Cantrips-ru.txt | 3 +- .../zh-CN/Spells/Cantrips-zh-CN.txt | 2 +- 19 files changed, 142 insertions(+), 779 deletions(-) delete mode 100644 Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCreateBonfireMark.json delete mode 100644 Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerCreateBonfireDamage.json diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCreateBonfireMark.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCreateBonfireMark.json deleted file mode 100644 index d45639b117..0000000000 --- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCreateBonfireMark.json +++ /dev/null @@ -1,157 +0,0 @@ -{ - "$type": "ConditionDefinition, Assembly-CSharp", - "inDungeonEditor": false, - "parentCondition": null, - "conditionType": "Beneficial", - "features": [], - "allowMultipleInstances": false, - "silentWhenAdded": true, - "silentWhenRemoved": true, - "silentWhenRefreshed": false, - "terminateWhenRemoved": false, - "specialDuration": false, - "durationType": "Hour", - "durationParameterDie": "D4", - "durationParameter": 1, - "forceTurnOccurence": false, - "turnOccurence": "EndOfTurn", - "specialInterruptions": [ - "AnyBattleTurnEnd" - ], - "interruptionRequiresSavingThrow": false, - "interruptionSavingThrowComputationMethod": "SaveOverride", - "interruptionSavingThrowAbility": "", - "interruptionDamageThreshold": 0, - "keepConditionIfSavingThrowSucceeds": false, - "interruptionSavingThrowAffinity": "None", - "conditionTags": [], - "recurrentEffectForms": [], - "cancellingConditions": [], - "additionalDamageWhenHit": false, - "additionalDamageTypeDetermination": "Specific", - "additionalDamageType": "", - "additionalDamageQuantity": "AbilityBonus", - "additionalDamageDieType": "D1", - "additionalDamageDieNumber": 1, - "additionalConditionWhenHit": false, - "additionalCondition": null, - "additionalConditionDurationType": "Round", - "additionalConditionDurationParameter": 1, - "additionalConditionTurnOccurenceType": "StartOfTurn", - "conditionStartParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": null, - "m_SubObjectType": null - }, - "conditionParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": null, - "m_SubObjectType": null - }, - "conditionEndParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": null, - "m_SubObjectType": null - }, - "recurrentEffectParticleReference": null, - "characterShaderReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": null, - "m_SubObjectType": null - }, - "particlesBasedOnAncestryDamageType": false, - "ancestryType": "Sorcerer", - "acidParticleParameters": null, - "coldParticleParameters": null, - "fireParticleParameters": null, - "lightningParticleParameters": null, - "poisonParticleParameters": null, - "overrideCharacterShaderColors": false, - "firstCharacterShaderColor": { - "$type": "UnityEngine.Color, UnityEngine.CoreModule", - "r": 0.0, - "g": 0.0, - "b": 0.0, - "a": 0.0 - }, - "secondCharacterShaderColor": { - "$type": "UnityEngine.Color, UnityEngine.CoreModule", - "r": 0.0, - "g": 0.0, - "b": 0.0, - "a": 0.0 - }, - "timeToWaitBeforeApplyingShader": 0.5, - "timeToWaitBeforeRemovingShader": 0.5, - "possessive": false, - "amountOrigin": "None", - "baseAmount": 0, - "additiveAmount": false, - "sourceAbilityBonusMinValue": 1, - "subsequentOnRemoval": null, - "subsequentHasSavingThrow": false, - "subsequentSavingThrowAbilityScore": "Constitution", - "subsequentVariableForDC": "FrenzyExhaustionDC", - "subsequentDCIncrease": 5, - "effectFormsOnRemoved": [], - "forceBehavior": false, - "addBehavior": false, - "fearSource": false, - "battlePackage": null, - "explorationPackage": null, - "removedFromTheGame": false, - "permanentlyRemovedIfExtraPlanar": false, - "refundReceivedDamageWhenRemoved": false, - "followSourcePosition": false, - "disolveCharacterOnDeath": false, - "disolveParameters": { - "$type": "GraphicsCharacterDefinitions+DisolveParameters, Assembly-CSharp", - "color": { - "$type": "UnityEngine.Color, UnityEngine.CoreModule", - "r": 0.0, - "g": 0.0, - "b": 0.0, - "a": 0.0 - }, - "colorWidth": 0.0, - "noiseScale": 5.0, - "hueScale": 0.0, - "vertexOffset": 0.0, - "curve": { - "$type": "UnityEngine.AnimationCurve, UnityEngine.CoreModule" - }, - "startAfterDeathAnimation": false, - "duration": 0.0 - }, - "guiPresentation": { - "$type": "GuiPresentation, Assembly-CSharp", - "hidden": true, - "title": "Feature/&NoContentTitle", - "description": "Feature/&NoContentTitle", - "spriteReference": { - "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": null, - "m_SubObjectType": null - }, - "color": { - "$type": "UnityEngine.Color, UnityEngine.CoreModule", - "r": 1.0, - "g": 1.0, - "b": 1.0, - "a": 1.0 - }, - "symbolChar": "221E", - "sortOrder": 0, - "unusedInSolastaCOTM": false, - "usedInValleyDLC": false - }, - "contentCopyright": "UserContent", - "guid": "16259b67-cbf3-59fe-8127-e240592f1470", - "contentPack": 9999, - "name": "ConditionCreateBonfireMark" -} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/EffectProxyDefinition/ProxyCreateBonfire.json b/Diagnostics/UnfinishedBusinessBlueprints/EffectProxyDefinition/ProxyCreateBonfire.json index 9179e59938..4fd0a58767 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/EffectProxyDefinition/ProxyCreateBonfire.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/EffectProxyDefinition/ProxyCreateBonfire.json @@ -1,7 +1,7 @@ { "$type": "EffectProxyDefinition, Assembly-CSharp", "canMove": false, - "canRotate": true, + "canRotate": false, "canMoveOnCharacters": false, "canAttack": false, "canTriggerPower": false, @@ -31,7 +31,7 @@ "m_SubObjectName": "", "m_SubObjectType": "" }, - "addLightSource": false, + "addLightSource": true, "lightSourceForm": { "$type": "LightSourceForm, Assembly-CSharp", "lightSourceType": "Basic", @@ -39,14 +39,14 @@ "dimAdditionalRange": 2, "color": { "$type": "UnityEngine.Color, UnityEngine.CoreModule", - "r": 0.933333337, - "g": 0.8428167, - "b": 0.4196078, + "r": 1.0, + "g": 0.5409614, + "b": 0.193396211, "a": 1.0 }, "graphicsPrefabReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "b604c9f0be3f29241adbf0c6754b7324", + "m_AssetGUID": "792bd092227ae074ca8d89efc06dbfc6", "m_SubObjectName": "", "m_SubObjectType": "" }, @@ -64,23 +64,29 @@ "hasPresentation": true, "prefabReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "6c9e02aed79129b4dadb6ea301ee193d", + "m_AssetGUID": "58aff54afb62c3a43be06958596b2bf2", "m_SubObjectName": "", "m_SubObjectType": "" }, - "isEmptyPresentation": false, + "isEmptyPresentation": true, "modelScale": 1.0, - "showWorldLocationFeedbacks": true, - "hasPortrait": true, + "showWorldLocationFeedbacks": false, + "hasPortrait": false, "portraitSpriteReference": { "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", - "m_AssetGUID": "a206bbd84c5d22147a9aa91bb99eeb90", - "m_SubObjectName": "ProxyDancingLights", + "m_AssetGUID": "", + "m_SubObjectName": "", "m_SubObjectType": "" }, "startEvent": { "$type": "AK.Wwise.Event, AK.Wwise.Unity.API.WwiseTypes", - "WwiseObjectReference": null, + "WwiseObjectReference": { + "$type": "WwiseEventReference, AK.Wwise.Unity.API.WwiseTypes", + "objectName": "Play_Vfx_EVO_WallOfFire_Cell", + "id": 1935475708, + "guid": "73EB45BB-E4D5-480F-B6D9-6BEEF1BF62E3", + "name": "73EB45BB-E4D5-480F-B6D9-6BEEF1BF62E3" + }, "idInternal": 0, "valueGuidInternal": { "$type": "System.Byte[], mscorlib", @@ -120,8 +126,8 @@ "description": "Feature/&NoContentTitle", "spriteReference": { "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", - "m_AssetGUID": "a206bbd84c5d22147a9aa91bb99eeb90", - "m_SubObjectName": "ProxyDancingLights", + "m_AssetGUID": "4cfa51a7cbd64134d9097a59eefe34c7", + "m_SubObjectName": "WallOfFire", "m_SubObjectType": "UnityEngine.Sprite, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" }, "color": { diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerCreateBonfireDamage.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerCreateBonfireDamage.json deleted file mode 100644 index d4e9ab7604..0000000000 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerCreateBonfireDamage.json +++ /dev/null @@ -1,363 +0,0 @@ -{ - "$type": "FeatureDefinitionPower, Assembly-CSharp", - "effectDescription": { - "$type": "EffectDescription, Assembly-CSharp", - "rangeType": "Distance", - "rangeParameter": 6, - "halfDamageOnAMiss": false, - "hitAffinitiesByTargetTag": [], - "targetType": "IndividualsUnique", - "itemSelectionType": "None", - "targetParameter": 1, - "targetParameter2": 2, - "emissiveBorder": "None", - "emissiveParameter": 1, - "requiresTargetProximity": false, - "targetProximityDistance": 6, - "targetExcludeCaster": false, - "canBePlacedOnCharacter": true, - "affectOnlyGround": false, - "targetFilteringMethod": "CharacterOnly", - "targetFilteringTag": "No", - "requiresVisibilityForPosition": true, - "inviteOptionalAlly": false, - "slotTypes": [], - "recurrentEffect": "No", - "retargetAfterDeath": false, - "retargetActionType": "Bonus", - "poolFilterDiceNumber": 5, - "poolFilterDieType": "D8", - "trapRangeType": "Triggerer", - "targetConditionName": "", - "targetConditionAsset": null, - "targetSide": "All", - "durationType": "Round", - "durationParameter": 0, - "endOfEffect": "EndOfTurn", - "hasSavingThrow": true, - "disableSavingThrowOnAllies": false, - "savingThrowAbility": "Dexterity", - "ignoreCover": false, - "grantedConditionOnSave": null, - "rollSaveOnlyIfRelevantForms": false, - "hasShoveRoll": false, - "createdByCharacter": true, - "difficultyClassComputation": "SpellCastingFeature", - "savingThrowDifficultyAbility": "Wisdom", - "fixedSavingThrowDifficultyClass": 10, - "savingThrowAffinitiesBySense": [], - "savingThrowAffinitiesByFamily": [], - "damageAffinitiesByFamily": [], - "advantageForEnemies": false, - "canBeDispersed": false, - "hasVelocity": false, - "velocityCellsPerRound": 2, - "velocityType": "AwayFromSourceOriginalPosition", - "restrictedCreatureFamilies": [], - "immuneCreatureFamilies": [], - "restrictedCharacterSizes": [], - "hasLimitedEffectPool": false, - "effectPoolAmount": 60, - "effectApplication": "All", - "effectFormFilters": [], - "effectForms": [ - { - "$type": "EffectForm, Assembly-CSharp", - "formType": "Damage", - "addBonusMode": "None", - "applyLevel": "No", - "levelType": "ClassLevel", - "levelMultiplier": 1, - "diceByLevelTable": [], - "createdByCharacter": true, - "createdByCondition": false, - "hasSavingThrow": true, - "savingThrowAffinity": "Negates", - "dcModifier": 0, - "canSaveToCancel": false, - "saveOccurence": "EndOfTurn", - "damageForm": { - "$type": "DamageForm, Assembly-CSharp", - "versatile": false, - "diceNumber": 1, - "dieType": "D8", - "overrideWithBardicInspirationDie": false, - "versatileDieType": "D1", - "bonusDamage": 0, - "damageType": "DamageFire", - "ancestryType": "Sorcerer", - "healFromInflictedDamage": "Never", - "hitPointsFloor": 0, - "forceKillOnZeroHp": false, - "specialDeathCondition": null, - "ignoreFlyingCharacters": false, - "ignoreCriticalDoubleDice": false - }, - "hasFilterId": false, - "filterId": 0 - } - ], - "specialFormsDescription": "", - "effectAdvancement": { - "$type": "EffectAdvancement, Assembly-CSharp", - "effectIncrementMethod": "CasterLevelTable", - "incrementMultiplier": 1, - "additionalTargetsPerIncrement": 0, - "additionalSubtargetsPerIncrement": 0, - "additionalDicePerIncrement": 1, - "additionalSpellLevelPerIncrement": 0, - "additionalSummonsPerIncrement": 0, - "additionalHPPerIncrement": 0, - "additionalTempHPPerIncrement": 0, - "additionalTargetCellsPerIncrement": 0, - "additionalItemBonus": 0, - "additionalWeaponDie": 0, - "alteredDuration": "None" - }, - "speedType": "Instant", - "speedParameter": 10.0, - "offsetImpactTimeBasedOnDistance": false, - "offsetImpactTimeBasedOnDistanceFactor": 0.1, - "offsetImpactTimePerTarget": 0.0, - "effectParticleParameters": { - "$type": "EffectParticleParameters, Assembly-CSharp", - "casterParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "81560ac3813217d4d9fd281d5e73c234", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "casterSelfParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "casterQuickSpellParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "targetParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "effectParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "effectSubTargetParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "zoneParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "beforeImpactParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "impactParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "e446eddf529bfc94c9b972fc384b9986", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "activeEffectImpactParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "activeEffectCellStartParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "activeEffectCellParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "activeEffectCellEndParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "activeEffectSurfaceStartParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "activeEffectSurfaceParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "activeEffectSurfaceEndParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "activeEffectSurfaceParticlePerIndex": "", - "activeEffectSurfaceParticlePerIndexCount": 0, - "emissiveBorderCellStartParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "emissiveBorderCellParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "emissiveBorderCellEndParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "emissiveBorderSurfaceStartParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "emissiveBorderSurfaceParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "emissiveBorderSurfaceEndParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "conditionStartParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "conditionParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "conditionEndParticleReference": { - "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": "", - "m_SubObjectType": "" - }, - "forceApplyZoneParticle": false, - "applyEmissionColorOnWeapons": false, - "emissionColor": { - "$type": "UnityEngine.Color, UnityEngine.CoreModule", - "r": 0.0, - "g": 0.0, - "b": 0.0, - "a": 0.0 - }, - "emissionColorFadeInDuration": 0.0, - "emissionColorFadeOutDuration": 0.0 - }, - "effectAIParameters": { - "$type": "EffectAIParameters, Assembly-CSharp", - "aoeScoreMultiplier": 1.0, - "cooldownForCaster": 0, - "cooldownForBattle": 0, - "sortingScoreMultiplier": 1.0, - "dynamicCooldown": false - }, - "animationMagicEffect": "Animation0", - "lightCounterDispellsEffect": false, - "hideSavingThrowAnimation": false - }, - "delegatedToAction": false, - "surrogateToSpell": null, - "triggeredBySpecialMove": false, - "activationTime": "NoCost", - "autoActivationRequiredTargetSenseType": "None", - "autoActivationRequiredTargetCreatureTag": "", - "autoActivationPowerTag": "", - "triggeringPower": null, - "copyTargetingFromTriggeringPower": false, - "reactionContext": "None", - "damageTypes": [], - "reactionName": "", - "reactionActingCharacterParamIdx": 0, - "reactionAttackerParamIdx": -1, - "hasCastingFailure": false, - "castingSuccessComputation": "CasterLevel", - "canUseInDialog": false, - "disableIfConditionIsOwned": null, - "disableIfTargetConditionIsOwned": null, - "rechargeRate": "AtWill", - "costPerUse": 1, - "spellcastingFeature": null, - "usesDetermination": "Fixed", - "abilityScoreDetermination": "Explicit", - "usesAbilityScoreName": "Charisma", - "fixedUsesPerRecharge": 1, - "abilityScore": "Intelligence", - "attackHitComputation": "AbilityScore", - "fixedAttackHit": 0, - "abilityScoreBonusToAttack": false, - "proficiencyBonusToAttack": false, - "uniqueInstance": false, - "showCasting": false, - "shortTitleOverride": "", - "overriddenPower": null, - "includeBaseDescription": false, - "guiPresentation": { - "$type": "GuiPresentation, Assembly-CSharp", - "hidden": true, - "title": "Feature/&PowerCreateBonfireDamageTitle", - "description": "Feature/&PowerCreateBonfireDamageDescription", - "spriteReference": { - "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": null, - "m_SubObjectType": null - }, - "color": { - "$type": "UnityEngine.Color, UnityEngine.CoreModule", - "r": 1.0, - "g": 1.0, - "b": 1.0, - "a": 1.0 - }, - "symbolChar": "221E", - "sortOrder": 0, - "unusedInSolastaCOTM": false, - "usedInValleyDLC": false - }, - "contentCopyright": "UserContent", - "guid": "b7c2435b-6087-5c17-a46b-e970baee8a07", - "contentPack": 9999, - "name": "PowerCreateBonfireDamage" -} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateBonfire.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateBonfire.json index 4522385af6..fdc1cc5201 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateBonfire.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateBonfire.json @@ -22,19 +22,19 @@ "itemSelectionType": "None", "targetParameter": 1, "targetParameter2": 0, - "emissiveBorder": "None", - "emissiveParameter": 1, + "emissiveBorder": "Outer", + "emissiveParameter": 2, "requiresTargetProximity": false, - "targetProximityDistance": 6, + "targetProximityDistance": 30, "targetExcludeCaster": false, "canBePlacedOnCharacter": true, "affectOnlyGround": false, - "targetFilteringMethod": "CharacterOnly", + "targetFilteringMethod": "AllCharacterAndGadgets", "targetFilteringTag": "No", "requiresVisibilityForPosition": true, "inviteOptionalAlly": false, "slotTypes": [], - "recurrentEffect": "No", + "recurrentEffect": "OnActivation, OnTurnEnd, OnEnter", "retargetAfterDeath": false, "retargetActionType": "Bonus", "poolFilterDiceNumber": 5, @@ -51,7 +51,7 @@ "savingThrowAbility": "Dexterity", "ignoreCover": false, "grantedConditionOnSave": null, - "rollSaveOnlyIfRelevantForms": true, + "rollSaveOnlyIfRelevantForms": false, "hasShoveRoll": false, "createdByCharacter": true, "difficultyClassComputation": "SpellCastingFeature", @@ -121,7 +121,42 @@ "topologyForm": { "$type": "TopologyForm, Assembly-CSharp", "changeType": "DangerousZone", - "impactsFlyingCharacters": true + "impactsFlyingCharacters": false + }, + "hasFilterId": false, + "filterId": 0 + }, + { + "$type": "EffectForm, Assembly-CSharp", + "formType": "Damage", + "addBonusMode": "None", + "applyLevel": "No", + "levelType": "ClassLevel", + "levelMultiplier": 1, + "diceByLevelTable": [], + "createdByCharacter": true, + "createdByCondition": false, + "hasSavingThrow": true, + "savingThrowAffinity": "Negates", + "dcModifier": 0, + "canSaveToCancel": false, + "saveOccurence": "EndOfTurn", + "damageForm": { + "$type": "DamageForm, Assembly-CSharp", + "versatile": false, + "diceNumber": 1, + "dieType": "D8", + "overrideWithBardicInspirationDie": false, + "versatileDieType": "D1", + "bonusDamage": 0, + "damageType": "DamageFire", + "ancestryType": "Sorcerer", + "healFromInflictedDamage": "Never", + "hitPointsFloor": 0, + "forceKillOnZeroHp": false, + "specialDeathCondition": null, + "ignoreFlyingCharacters": false, + "ignoreCriticalDoubleDice": false }, "hasFilterId": false, "filterId": 0 @@ -207,7 +242,7 @@ }, "activeEffectImpactParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", + "m_AssetGUID": "0337980aa6d17aa499baa006ca4dea96", "m_SubObjectName": "", "m_SubObjectType": "" }, @@ -231,13 +266,13 @@ }, "activeEffectSurfaceStartParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", + "m_AssetGUID": "36d6739006d39724999b07d8d8840fc6", "m_SubObjectName": "", "m_SubObjectType": "" }, "activeEffectSurfaceParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", + "m_AssetGUID": "786ab47a0a2827a448eadb610712686b", "m_SubObjectName": "", "m_SubObjectType": "" }, @@ -269,13 +304,13 @@ }, "emissiveBorderSurfaceStartParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", + "m_AssetGUID": "e9168d3a71f96b241a436aa368035167", "m_SubObjectName": "", "m_SubObjectType": "" }, "emissiveBorderSurfaceParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", + "m_AssetGUID": "1c2affce0bafab1448dd5392598421c9", "m_SubObjectName": "", "m_SubObjectType": "" }, diff --git a/Documentation/Spells.md b/Documentation/Spells.md index 629cd0a3cd..bf68977b76 100644 --- a/Documentation/Spells.md +++ b/Documentation/Spells.md @@ -38,7 +38,7 @@ Deal damage to one enemy and prevent healing for a limited time. **[Artificer, Druid, Sorcerer, Warlock, Wizard]** -You create a bonfire on ground that you can see within range. Until the spell ends, the bonfire fills a 5-foot cube. Any creature in the bonfire's space when you cast the spell must succeed on a Dexterity saving throw or take 1d8 fire damage. A creature must also make the saving throw when it enters the bonfire's space for the first time on a turn or ends its turn there. The spell's damage increases by an additional die at 5th, 11th and 17th level. +You create a bonfire on ground that you can see within range. Until the spell ends, the bonfire fills a 5-foot cube. Any creature in the bonfire's space when you cast the spell must succeed on a Dexterity saving throw or take 1d8 fire damage. A creature must also make the saving throw when it enters the bonfire's space or ends its turn there. The spell's damage increases by an additional die at 5th, 11th and 17th level. # 8. - Dancing Lights (V,S) level 0 Evocation [Concentration] [SOL] diff --git a/SolastaUnfinishedBusiness/Interfaces/ICharacterBattleListeners.cs b/SolastaUnfinishedBusiness/Interfaces/ICharacterBattleListeners.cs index 935c3bb8c1..8e365f0930 100644 --- a/SolastaUnfinishedBusiness/Interfaces/ICharacterBattleListeners.cs +++ b/SolastaUnfinishedBusiness/Interfaces/ICharacterBattleListeners.cs @@ -2,7 +2,6 @@ using JetBrains.Annotations; using SolastaUnfinishedBusiness.Api; using SolastaUnfinishedBusiness.Api.GameExtensions; -using SolastaUnfinishedBusiness.Spells; namespace SolastaUnfinishedBusiness.Interfaces; @@ -79,9 +78,6 @@ public static void OnCharacterTurnStarted(GameLocationCharacter locationCharacte return; } - //PATCH: supports Create Bonfire cantrip - SpellBuilders.HandleCreateBonfireBehavior(locationCharacter); - //PATCH: supports EnableMonkDoNotRequireAttackActionForBonusUnarmoredAttack if (Main.Settings.EnableMonkDoNotRequireAttackActionForBonusUnarmoredAttack && rulesetCharacter.GetClassLevel(DatabaseHelper.CharacterClassDefinitions.Monk) > 0) @@ -123,9 +119,6 @@ public static void OnCharacterTurnEnded(GameLocationCharacter locationCharacter) return; } - //PATCH: supports Create Bonfire cantrip - SpellBuilders.HandleCreateBonfireBehavior(locationCharacter, false); - var listeners = rulesetCharacter.GetSubFeaturesByType(); foreach (var listener in listeners) diff --git a/SolastaUnfinishedBusiness/Patches/CharacterActionPatcher.cs b/SolastaUnfinishedBusiness/Patches/CharacterActionPatcher.cs index cca9186dd3..c8183e5ce5 100644 --- a/SolastaUnfinishedBusiness/Patches/CharacterActionPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/CharacterActionPatcher.cs @@ -12,7 +12,6 @@ using SolastaUnfinishedBusiness.Feats; using SolastaUnfinishedBusiness.Interfaces; using SolastaUnfinishedBusiness.Models; -using SolastaUnfinishedBusiness.Spells; using SolastaUnfinishedBusiness.Subclasses; using static RuleDefinitions; @@ -246,9 +245,6 @@ public static IEnumerator Postfix(IEnumerator values, CharacterAction __instance { //PATCH: support for Circle of the Wildfire cauterizing flames yield return CircleOfTheWildfire.HandleCauterizingFlamesBehavior(targetCharacter); - - //PATCH: supports Create Bonfire cantrip - SpellBuilders.HandleCreateBonfireBehavior(targetCharacter); } } diff --git a/SolastaUnfinishedBusiness/Patches/GameLocationBattleManagerPatcher.cs b/SolastaUnfinishedBusiness/Patches/GameLocationBattleManagerPatcher.cs index c6a1769cdc..e2ec78e2be 100644 --- a/SolastaUnfinishedBusiness/Patches/GameLocationBattleManagerPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/GameLocationBattleManagerPatcher.cs @@ -317,9 +317,6 @@ public static IEnumerator Postfix( //PATCH: support for Circle of Wildfire proxies yield return CircleOfTheWildfire.HandleCauterizingFlamesBehavior(mover); - //PATCH: support for Create Bonfire proxies - SpellBuilders.HandleCreateBonfireBehavior(mover); - //PATCH: set cursor to dirty and reprocess valid positions if ally was moved by Gambit or Warlord if (mover.IsMyTurn() || mover.Side != Side.Ally) { diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs index 281c0085e7..a99cf5ed5b 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs @@ -1,6 +1,5 @@ using System.Collections; using System.Collections.Generic; -using System.Linq; using SolastaUnfinishedBusiness.Api.GameExtensions; using SolastaUnfinishedBusiness.Api.Helpers; using SolastaUnfinishedBusiness.Behaviors; @@ -208,6 +207,68 @@ internal static SpellDefinition BuildBurstOfRadiance() #endregion + #region Create Bonfire + + internal static SpellDefinition BuildCreateBonfire() + { + const string NAME = "CreateBonfire"; + + var effectProxyCreateBonfire = EffectProxyDefinitionBuilder + .Create(EffectProxyDefinitions.ProxyWallOfFire_Line, "ProxyCreateBonfire") + .SetOrUpdateGuiPresentation(Category.Proxy) + .SetCanMove(false, false) + .SetAdditionalFeatures() + .AddToDB(); + + effectProxyCreateBonfire.actionId = Id.NoAction; + effectProxyCreateBonfire.GuiPresentation.description = Gui.NoLocalization; + effectProxyCreateBonfire.lightSourceForm.dimAdditionalRange = 2; + effectProxyCreateBonfire.lightSourceForm.brightRange = 2; + + var spell = SpellDefinitionBuilder + .Create(NAME) + .SetGuiPresentation(Category.Spell, Sprites.GetSprite(NAME, Resources.CreateBonfire, 128)) + .SetSchoolOfMagic(SchoolOfMagicDefinitions.SchoolConjuration) + .SetSpellLevel(0) + .SetCastingTime(ActivationTime.Action) + .SetMaterialComponent(MaterialComponentType.None) + .SetVerboseComponent(true) + .SetSomaticComponent(true) + .SetVocalSpellSameType(VocalSpellSemeType.Attack) + .SetRequiresConcentration(true) + .SetEffectDescription( + EffectDescriptionBuilder + .Create(WallOfFireLine) + .SetDurationData(DurationType.Minute, 1) + .SetTargetingData(Side.All, RangeType.Distance, 6, TargetType.Cube) + .SetEffectAdvancement(EffectIncrementMethod.CasterLevelTable, additionalDicePerIncrement: 1) + .SetSavingThrowData(false, AttributeDefinitions.Dexterity, false, + EffectDifficultyClassComputation.SpellCastingFeature) + .SetRecurrentEffect( + RecurrentEffect.OnActivation | RecurrentEffect.OnEnter | RecurrentEffect.OnTurnEnd) + .SetEffectForms( + EffectFormBuilder + .Create() + .SetSummonEffectProxyForm(effectProxyCreateBonfire) + .Build(), + EffectFormBuilder + .Create() + .SetTopologyForm(TopologyForm.Type.DangerousZone, false) + .Build(), + EffectFormBuilder + .Create() + .HasSavingThrow(EffectSavingThrowType.Negates) + .SetDamageForm(DamageTypeFire, 1, DieType.D8) + .Build()) + .SetCasterEffectParameters(ProduceFlameHold) + .Build()) + .AddToDB(); + + return spell; + } + + #endregion + #region Enduring Sting internal static SpellDefinition BuildEnduringSting() @@ -999,212 +1060,6 @@ public IEnumerator OnActionFinishedByMe(CharacterAction action) #endregion - #region Create Bonfire - - private static readonly ConditionDefinition ConditionCreateBonfireMark = ConditionDefinitionBuilder - .Create("ConditionCreateBonfireMark") - .SetGuiPresentationNoContent(true) - .SetSilent(Silent.WhenAddedOrRemoved) - .SetSpecialInterruptions(ConditionInterruption.AnyBattleTurnEnd) - .AddToDB(); - - private static readonly FeatureDefinitionPower PowerCreateBonfireDamage = FeatureDefinitionPowerBuilder - .Create("PowerCreateBonfireDamage") - .SetGuiPresentation(Category.Feature, hidden: true) - .SetUsesFixed(ActivationTime.NoCost) - .SetShowCasting(false) - .SetEffectDescription( - EffectDescriptionBuilder - .Create() - .SetDurationData(DurationType.Round) - .SetTargetingData(Side.All, RangeType.Distance, 6, TargetType.IndividualsUnique) - .SetEffectAdvancement(EffectIncrementMethod.CasterLevelTable, additionalDicePerIncrement: 1) - .SetSavingThrowData(false, AttributeDefinitions.Dexterity, false, - EffectDifficultyClassComputation.SpellCastingFeature) - .SetEffectForms( - EffectFormBuilder - .Create() - .HasSavingThrow(EffectSavingThrowType.Negates) - .SetDamageForm(DamageTypeFire, 1, DieType.D8) - .Build()) - .SetImpactEffectParameters(FireBolt) - .Build()) - .AddCustomSubFeatures(new CustomBehaviorCreateBonfireDamage()) - .AddToDB(); - - private static readonly EffectProxyDefinition EffectProxyCreateBonfire = EffectProxyDefinitionBuilder - .Create(EffectProxyDefinitions.ProxyDancingLights, "ProxyCreateBonfire") - .SetOrUpdateGuiPresentation(Category.Proxy) - .SetCanMove(false, false) - .SetAdditionalFeatures() - .AddToDB(); - - internal static SpellDefinition BuildCreateBonfire() - { - const string NAME = "CreateBonfire"; - - EffectProxyCreateBonfire.actionId = Id.NoAction; - EffectProxyCreateBonfire.addLightSource = false; - EffectProxyCreateBonfire.GuiPresentation.description = Gui.NoLocalization; - - var spell = SpellDefinitionBuilder - .Create(NAME) - .SetGuiPresentation(Category.Spell, Sprites.GetSprite(NAME, Resources.CreateBonfire, 128)) - .SetSchoolOfMagic(SchoolOfMagicDefinitions.SchoolConjuration) - .SetSpellLevel(0) - .SetCastingTime(ActivationTime.Action) - .SetMaterialComponent(MaterialComponentType.None) - .SetVerboseComponent(true) - .SetSomaticComponent(true) - .SetVocalSpellSameType(VocalSpellSemeType.Attack) - .SetRequiresConcentration(true) - .SetEffectDescription( - EffectDescriptionBuilder - .Create() - .SetDurationData(DurationType.Minute, 1) - .SetTargetingData(Side.All, RangeType.Distance, 6, TargetType.Cube) - .SetEffectAdvancement(EffectIncrementMethod.CasterLevelTable, additionalDicePerIncrement: 1) - .SetSavingThrowData(false, AttributeDefinitions.Dexterity, false, - EffectDifficultyClassComputation.SpellCastingFeature) - .RollSaveOnlyIfRelevantForms() - .SetEffectForms( - EffectFormBuilder - .Create() - .SetSummonEffectProxyForm(EffectProxyCreateBonfire) - .Build(), - EffectFormBuilder - .Create() - .SetTopologyForm(TopologyForm.Type.DangerousZone, true) - .Build()) - .SetCasterEffectParameters(ProduceFlameHold) - .Build()) - .AddCustomSubFeatures(new PowerOrSpellFinishedByMeCreateBonfire()) - .AddToDB(); - - return spell; - } - - // increase damage die and mark enemies damaged this turn - private sealed class CustomBehaviorCreateBonfireDamage : IModifyEffectDescription, IPowerOrSpellFinishedByMe - { - public bool IsValid(BaseDefinition definition, RulesetCharacter character, EffectDescription effectDescription) - { - return definition == PowerCreateBonfireDamage; - } - - public EffectDescription GetEffectDescription( - BaseDefinition definition, - EffectDescription effectDescription, - RulesetCharacter character, - RulesetEffect rulesetEffect) - { - var diceNumber = character.TryGetAttributeValue(AttributeDefinitions.CharacterLevel) switch - { - >= 17 => 4, - >= 11 => 3, - >= 5 => 2, - _ => 1 - }; - - var damageForm = effectDescription.EffectForms[0].DamageForm; - - damageForm.DiceNumber = diceNumber; - - return effectDescription; - } - - public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, BaseDefinition baseDefinition) - { - if (action.SaveOutcome is RollOutcome.Success or RollOutcome.CriticalSuccess) - { - yield break; - } - - var rulesetCaster = action.ActingCharacter.RulesetCharacter; - var rulesetTarget = action.ActionParams.TargetCharacters[0].RulesetCharacter; - - rulesetCaster.InflictCondition( - ConditionCreateBonfireMark.Name, - DurationType.Round, - 0, - TurnOccurenceType.EndOfTurn, - AttributeDefinitions.TagStatus, - rulesetTarget.Guid, - rulesetTarget.CurrentFaction.Name, - 1, - ConditionCreateBonfireMark.Name, - 0, - 0, - 0); - } - } - - // issue power damage if there is a target on cube position on spell end - private sealed class PowerOrSpellFinishedByMeCreateBonfire : IPowerOrSpellFinishedByMe - { - public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, BaseDefinition baseDefinition) - { - var locationCharacterService = ServiceRepository.GetService(); - var contenders = - (Gui.Battle?.AllContenders ?? - locationCharacterService.PartyCharacters.Union(locationCharacterService.GuestCharacters)) - .ToList(); - - var target = contenders.FirstOrDefault(x => - x.LocationPosition == action.ActionParams.Positions[0]); - - if (target != null) - { - HandleCreateBonfireBehavior(target); - } - - yield break; - } - } - - // handle on turn start, on turn end, shove, move behaviors - internal static void HandleCreateBonfireBehavior(GameLocationCharacter character, bool checkCondition = true) - { - var battleManager = ServiceRepository.GetService() as GameLocationBattleManager; - - if (!battleManager || - (character.RulesetCharacter is RulesetCharacterEffectProxy proxy && - proxy.EffectProxyDefinition == EffectProxyCreateBonfire)) - { - return; - } - - var locationCharacterService = ServiceRepository.GetService(); - var bonfireProxy = locationCharacterService.AllProxyCharacters - .FirstOrDefault(u => - character.LocationPosition == u.LocationPosition && - u.RulesetCharacter is RulesetCharacterEffectProxy rulesetCharacterEffectProxy && - rulesetCharacterEffectProxy.EffectProxyDefinition == EffectProxyCreateBonfire); - - if (bonfireProxy == null) - { - return; - } - - var rulesetProxy = bonfireProxy.RulesetCharacter as RulesetCharacterEffectProxy; - var rulesetSource = EffectHelpers.GetCharacterByGuid(rulesetProxy!.ControllerGuid); - - if (checkCondition && - character.RulesetCharacter.TryGetConditionOfCategoryAndType( - AttributeDefinitions.TagEffect, ConditionCreateBonfireMark.Name, out var activeCondition) && - activeCondition.SourceGuid == rulesetSource.Guid) - { - return; - } - - var source = GameLocationCharacter.GetFromActor(rulesetSource); - var usablePower = PowerProvider.Get(PowerCreateBonfireDamage, rulesetSource); - - source.MyExecuteActionSpendPower(usablePower, character); - } - - #endregion - #region Resonating Strike internal static SpellDefinition BuildResonatingStrike() diff --git a/SolastaUnfinishedBusiness/Translations/de/Spells/Cantrips-de.txt b/SolastaUnfinishedBusiness/Translations/de/Spells/Cantrips-de.txt index 0faf06f712..faa762fcf4 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Spells/Cantrips-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Spells/Cantrips-de.txt @@ -29,7 +29,7 @@ Spell/&BoomingBladeDescription=Du schwingst die Waffe, die du beim Wirken des Za Spell/&BoomingBladeTitle=Dröhnende Klinge Spell/&BurstOfRadianceDescription=Erzeugen Sie einen hellen, schimmernden Lichtblitz, der allen Feinden in Ihrer Umgebung Schaden zufügt. Spell/&BurstOfRadianceTitle=Wort der Ausstrahlung -Spell/&CreateBonfireDescription=Du entzündest ein Lagerfeuer auf dem Boden, das du in Reichweite sehen kannst. Bis der Zauber endet, füllt das Lagerfeuer einen 5-Fuß-Würfel. Jede Kreatur, die sich im Bereich des Lagerfeuers befindet, wenn du den Zauber wirkst, muss einen Rettungswurf für Geschicklichkeit bestehen oder erleidet 1W8 Feuerschaden. Eine Kreatur muss den Rettungswurf auch bestehen, wenn sie den Bereich des Lagerfeuers zum ersten Mal in einer Runde betritt oder ihre Runde dort beendet. Der Schaden des Zaubers erhöht sich auf der 5., 11. und 17. Stufe um einen zusätzlichen Würfel. +Spell/&CreateBonfireDescription=Du entzündest ein Lagerfeuer auf dem Boden, das du in Reichweite sehen kannst. Bis der Zauber endet, füllt das Lagerfeuer einen 5-Fuß-Würfel. Jede Kreatur, die sich beim Wirken des Zaubers im Bereich des Lagerfeuers befindet, muss einen Rettungswurf für Geschicklichkeit bestehen oder erleidet 1W8 Feuerschaden. Eine Kreatur muss den Rettungswurf auch bestehen, wenn sie den Bereich des Lagerfeuers betritt oder ihren Zug dort beendet. Der Schaden des Zaubers erhöht sich auf der 5., 11. und 17. Stufe um einen zusätzlichen Würfel. Spell/&CreateBonfireTitle=Lagerfeuer erstellen Spell/&EnduringStingDescription=Du entziehst einem sichtbaren Wesen in Reichweite die Lebenskraft. Das Ziel muss einen Rettungswurf für Konstitution bestehen oder erleidet 1W4 nekrotischen Schaden und fällt zu Boden. Spell/&EnduringStingTitle=Schwächlicher Stich diff --git a/SolastaUnfinishedBusiness/Translations/en/Spells/Cantrips-en.txt b/SolastaUnfinishedBusiness/Translations/en/Spells/Cantrips-en.txt index 262a2840ed..03c25e0d12 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Spells/Cantrips-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Spells/Cantrips-en.txt @@ -29,7 +29,7 @@ Spell/&BoomingBladeDescription=You brandish the weapon used in the spell's casti Spell/&BoomingBladeTitle=Booming Blade Spell/&BurstOfRadianceDescription=Create a brilliant flash of shimmering light, damaging all enemies around you. Spell/&BurstOfRadianceTitle=Word of Radiance -Spell/&CreateBonfireDescription=You create a bonfire on ground that you can see within range. Until the spell ends, the bonfire fills a 5-foot cube. Any creature in the bonfire's space when you cast the spell must succeed on a Dexterity saving throw or take 1d8 fire damage. A creature must also make the saving throw when it enters the bonfire's space for the first time on a turn or ends its turn there. The spell's damage increases by an additional die at 5th, 11th and 17th level. +Spell/&CreateBonfireDescription=You create a bonfire on ground that you can see within range. Until the spell ends, the bonfire fills a 5-foot cube. Any creature in the bonfire's space when you cast the spell must succeed on a Dexterity saving throw or take 1d8 fire damage. A creature must also make the saving throw when it enters the bonfire's space or ends its turn there. The spell's damage increases by an additional die at 5th, 11th and 17th level. Spell/&CreateBonfireTitle=Create Bonfire Spell/&EnduringStingDescription=You sap the vitality of one creature you can see in range. The target must succeed on a Constitution saving throw or take 1d4 necrotic damage and fall prone. Spell/&EnduringStingTitle=Sapping Sting diff --git a/SolastaUnfinishedBusiness/Translations/es/Spells/Cantrips-es.txt b/SolastaUnfinishedBusiness/Translations/es/Spells/Cantrips-es.txt index d7368a395e..fa6a70ac96 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Spells/Cantrips-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Spells/Cantrips-es.txt @@ -29,7 +29,7 @@ Spell/&BoomingBladeDescription=Blandes el arma utilizada en el lanzamiento del h Spell/&BoomingBladeTitle=Espada en auge Spell/&BurstOfRadianceDescription=Crea un destello brillante de luz resplandeciente que daña a todos los enemigos que te rodean. Spell/&BurstOfRadianceTitle=Palabra de resplandor -Spell/&CreateBonfireDescription=Creas una hoguera en el suelo que puedas ver dentro del alcance. Hasta que el conjuro termine, la hoguera llena un cubo de 5 pies. Cualquier criatura que esté en el espacio de la hoguera cuando lances el conjuro debe superar una tirada de salvación de Destreza o sufrir 1d8 puntos de daño por fuego. Una criatura también debe superar la tirada de salvación cuando entra en el espacio de la hoguera por primera vez en un turno o termina su turno allí. El daño del conjuro aumenta en un dado adicional en los niveles 5, 11 y 17. +Spell/&CreateBonfireDescription=Creas una hoguera en el suelo que puedas ver dentro del alcance. Hasta que el conjuro termine, la hoguera llena un cubo de 5 pies. Cualquier criatura que esté en el espacio de la hoguera cuando lances el conjuro debe superar una tirada de salvación de Destreza o sufrir 1d8 puntos de daño por fuego. Una criatura también debe superar la tirada de salvación cuando entre en el espacio de la hoguera o termine su turno allí. El daño del conjuro aumenta en un dado adicional en los niveles 5, 11 y 17. Spell/&CreateBonfireTitle=Crear hoguera Spell/&EnduringStingDescription=Absorbes la vitalidad de una criatura que puedas ver dentro del alcance. El objetivo debe superar una tirada de salvación de Constitución o recibirá 1d4 de daño necrótico y caerá al suelo. Spell/&EnduringStingTitle=Picadura de socavón diff --git a/SolastaUnfinishedBusiness/Translations/fr/Spells/Cantrips-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Spells/Cantrips-fr.txt index 200a1f8403..ab28184e8d 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Spells/Cantrips-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Spells/Cantrips-fr.txt @@ -29,7 +29,7 @@ Spell/&BoomingBladeDescription=Vous brandissez l'arme utilisée lors du lancemen Spell/&BoomingBladeTitle=Lame en plein essor Spell/&BurstOfRadianceDescription=Créez un éclair brillant de lumière scintillante, endommageant tous les ennemis autour de vous. Spell/&BurstOfRadianceTitle=Parole de Rayonnement -Spell/&CreateBonfireDescription=Vous créez un feu de joie sur le sol que vous pouvez voir à portée. Jusqu'à la fin du sort, le feu de joie remplit un cube de 1,50 mètre. Toute créature se trouvant dans l'espace du feu de joie lorsque vous lancez le sort doit réussir un jet de sauvegarde de Dextérité ou subir 1d8 dégâts de feu. Une créature doit également réussir le jet de sauvegarde lorsqu'elle entre dans l'espace du feu de joie pour la première fois au cours d'un tour ou lorsqu'elle y termine son tour. Les dégâts du sort augmentent d'un dé supplémentaire aux niveaux 5, 11 et 17. +Spell/&CreateBonfireDescription=Vous créez un feu de joie sur le sol que vous pouvez voir à portée. Jusqu'à la fin du sort, le feu de joie remplit un cube de 1,50 mètre. Toute créature se trouvant dans l'espace du feu de joie lorsque vous lancez le sort doit réussir un jet de sauvegarde de Dextérité ou subir 1d8 dégâts de feu. Une créature doit également réussir le jet de sauvegarde lorsqu'elle entre dans l'espace du feu de joie ou y termine son tour. Les dégâts du sort augmentent d'un dé supplémentaire aux niveaux 5, 11 et 17. Spell/&CreateBonfireTitle=Créer un feu de joie Spell/&EnduringStingDescription=Vous sapez la vitalité d'une créature visible à portée. La cible doit réussir un jet de sauvegarde de Constitution ou subir 1d4 dégâts nécrotiques et tomber à terre. Spell/&EnduringStingTitle=Piqûre sapante diff --git a/SolastaUnfinishedBusiness/Translations/it/Spells/Cantrips-it.txt b/SolastaUnfinishedBusiness/Translations/it/Spells/Cantrips-it.txt index 59ed2a3369..7bf39d5f5d 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Spells/Cantrips-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Spells/Cantrips-it.txt @@ -29,7 +29,7 @@ Spell/&BoomingBladeDescription=Brandisci l'arma usata per lanciare l'incantesimo Spell/&BoomingBladeTitle=Lama in forte espansione Spell/&BurstOfRadianceDescription=Crea un brillante lampo di luce scintillante, danneggiando tutti i nemici intorno a te. Spell/&BurstOfRadianceTitle=Parola di Radianza -Spell/&CreateBonfireDescription=Crei un falò su un terreno che puoi vedere entro il raggio d'azione. Finché l'incantesimo non termina, il falò riempie un cubo di 5 piedi. Ogni creatura nello spazio del falò quando lanci l'incantesimo deve superare un tiro salvezza su Destrezza o subire 1d8 danni da fuoco. Una creatura deve anche effettuare il tiro salvezza quando entra nello spazio del falò per la prima volta in un turno o termina il suo turno lì. Il danno dell'incantesimo aumenta di un dado aggiuntivo al 5°, 11° e 17° livello. +Spell/&CreateBonfireDescription=Crei un falò su un terreno che puoi vedere entro il raggio d'azione. Finché l'incantesimo non finisce, il falò riempie un cubo di 5 piedi. Ogni creatura nello spazio del falò quando lanci l'incantesimo deve superare un tiro salvezza su Destrezza o subire 1d8 danni da fuoco. Una creatura deve anche effettuare il tiro salvezza quando entra nello spazio del falò o termina il suo turno lì. Il danno dell'incantesimo aumenta di un dado aggiuntivo al 5°, 11° e 17° livello. Spell/&CreateBonfireTitle=Crea Falò Spell/&EnduringStingDescription=Prosciuga la vitalità di una creatura che puoi vedere nel raggio d'azione. Il bersaglio deve superare un tiro salvezza su Costituzione o subire 1d4 danni necrotici e cadere prono. Spell/&EnduringStingTitle=Puntura indebolente diff --git a/SolastaUnfinishedBusiness/Translations/ja/Spells/Cantrips-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Spells/Cantrips-ja.txt index 1159baff94..ba9c119e17 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Spells/Cantrips-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Spells/Cantrips-ja.txt @@ -29,7 +29,7 @@ Spell/&BoomingBladeDescription=呪文を唱える際に使用した武器を振 Spell/&BoomingBladeTitle=ブーミングブレード Spell/&BurstOfRadianceDescription=きらめく光の鮮やかなフラッシュを生成し、周囲のすべての敵にダメージを与えます。 Spell/&BurstOfRadianceTitle=輝きの言葉 -Spell/&CreateBonfireDescription=範囲内で見ることができる地面に焚き火を作成します。呪文が終了するまで、焚き火は 5 フィートの立方体を満たします。呪文を唱えたときに焚き火の空間にいたクリーチャーは、敏捷性セーヴィング スローに成功しなければ 1d8 の火ダメージを受けます。クリーチャーは、ターン中に初めて焚き火の空間に入るとき、またはそこでターンを終了するときにもセーヴィング スローを実行する必要があります。呪文のダメージは、5、11、17 レベルで追加のダイス 1 つ分増加します。 +Spell/&CreateBonfireDescription=範囲内で見ることができる地面に焚き火を作成します。呪文が終了するまで、焚き火は 5 フィートの立方体を満たします。呪文を唱えたときに焚き火の空間にいたクリーチャーは、敏捷性セーヴィング スローに成功しなければ 1d8 の火ダメージを受けます。クリーチャーは、焚き火の空間に入るとき、またはそこでターンを終了するときにもセーヴィング スローを実行する必要があります。呪文のダメージは、レベル 5、11、17 で追加のダイス 1 つ分増加します。 Spell/&CreateBonfireTitle=焚き火を作る Spell/&EnduringStingDescription=範囲内に見える1匹の生き物の活力を奪います。ターゲットは憲法セーヴィング・スローに成功するか、1d4 の壊死ダメージを受けて伏せる必要があります。 Spell/&EnduringStingTitle=サッピング・スティング diff --git a/SolastaUnfinishedBusiness/Translations/ko/Spells/Cantrips-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Spells/Cantrips-ko.txt index 3b3e359c11..ad3b5ab0b4 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Spells/Cantrips-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Spells/Cantrips-ko.txt @@ -29,7 +29,7 @@ Spell/&BoomingBladeDescription=주문을 시전하는 데 사용된 무기를 Spell/&BoomingBladeTitle=부밍 블레이드 Spell/&BurstOfRadianceDescription=반짝이는 빛의 화려한 섬광을 만들어 주변의 모든 적에게 피해를 줍니다. Spell/&BurstOfRadianceTitle=빛의 말씀 -Spell/&CreateBonfireDescription=범위 내에서 볼 수 있는 땅에 모닥불을 만듭니다. 주문이 끝날 때까지 모닥불은 5피트 큐브를 채웁니다. 주문을 시전할 때 모닥불 공간에 있는 모든 생물은 민첩성 구원 굴림에 성공해야 하며, 그렇지 않으면 1d8 화염 피해를 입습니다. 생물은 또한 턴에서 모닥불 공간에 처음 들어가거나 그곳에서 턴을 마칠 때 구원 굴림을 해야 합니다. 주문의 피해는 5, 11, 17레벨에서 주사위가 하나 더 늘어납니다. +Spell/&CreateBonfireDescription=범위 내에서 볼 수 있는 땅에 모닥불을 만듭니다. 주문이 끝날 때까지 모닥불은 5피트 큐브를 채웁니다. 주문을 시전할 때 모닥불 공간에 있는 모든 생물은 민첩성 구원 굴림에 성공해야 하며, 그렇지 않으면 1d8 화염 피해를 입습니다. 생물은 모닥불 공간에 들어가거나 그곳에서 턴을 마칠 때도 구원 굴림을 해야 합니다. 주문의 피해는 5, 11, 17레벨에서 주사위가 하나 더 늘어납니다. Spell/&CreateBonfireTitle=모닥불 만들기 Spell/&EnduringStingDescription=범위 내에서 볼 수 있는 생물 하나의 생명력을 약화시킵니다. 대상은 건강 내성 굴림에 성공해야 하며 그렇지 않으면 1d4의 괴사 피해를 입고 넘어지기 쉽습니다. Spell/&EnduringStingTitle=수액 찌르기 diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Cantrips-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Cantrips-pt-BR.txt index 5f96dd6431..c9820acb47 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Cantrips-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Cantrips-pt-BR.txt @@ -29,7 +29,7 @@ Spell/&BoomingBladeDescription=Você brande a arma usada na conjuração da magi Spell/&BoomingBladeTitle=Lâmina Crescente Spell/&BurstOfRadianceDescription=Cria um clarão brilhante de luz cintilante, causando dano a todos os inimigos ao seu redor. Spell/&BurstOfRadianceTitle=Palavra de Radiância -Spell/&CreateBonfireDescription=Você cria uma fogueira no chão que você pode ver dentro do alcance. Até que a magia termine, a fogueira preenche um cubo de 1,5 m. Qualquer criatura no espaço da fogueira quando você conjura a magia deve ter sucesso em um teste de resistência de Destreza ou sofrer 1d8 de dano de fogo. Uma criatura também deve fazer o teste de resistência quando entra no espaço da fogueira pela primeira vez em um turno ou termina seu turno lá. O dano da magia aumenta em um dado adicional no 5º, 11º e 17º nível. +Spell/&CreateBonfireDescription=Você cria uma fogueira no chão que você pode ver dentro do alcance. Até que a magia termine, a fogueira preenche um cubo de 5 pés. Qualquer criatura no espaço da fogueira quando você conjura a magia deve ter sucesso em um teste de resistência de Destreza ou sofrer 1d8 de dano de fogo. Uma criatura também deve fazer o teste de resistência quando entra no espaço da fogueira ou termina seu turno lá. O dano da magia aumenta em um dado adicional no 5º, 11º e 17º nível. Spell/&CreateBonfireTitle=Criar fogueira Spell/&EnduringStingDescription=Você suga a vitalidade de uma criatura que você pode ver no alcance. O alvo deve ter sucesso em um teste de resistência de Constituição ou sofrer 1d4 de dano necrótico e cair prostrado. Spell/&EnduringStingTitle=Picada de Sapping diff --git a/SolastaUnfinishedBusiness/Translations/ru/Spells/Cantrips-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Spells/Cantrips-ru.txt index 7e63f41081..db58f0018a 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Spells/Cantrips-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Spells/Cantrips-ru.txt @@ -29,7 +29,8 @@ Spell/&BoomingBladeDescription=Вы взмахиваете оружием, вы Spell/&BoomingBladeTitle=Громовой клинок Spell/&BurstOfRadianceDescription=Создайте яркую вспышку мерцающего света, наносящую урон всем врагам вокруг вас. Каждое существо, которое вы можете видеть в пределах дистанции, должно преуспеть в спасброске Телосложения, иначе получит 1d6 урона излучением. Spell/&BurstOfRadianceTitle=Слово сияния -Spell/&CreateBonfireDescription=Вы создаёте огонь на поверхности земли в точке, которую можете видеть в пределах дистанции. Пока заклинание действует, огонь занимает область в кубе с длиной ребра 5 футов. Все существа, оказавшиеся в этом пространстве в момент накладывания заклинания, должны преуспеть в спасброске Ловкости, иначе получат 1d8 урона огнём. Существо также должно совершать спасбросок, когда впервые за ход перемещается в область действия заклинания или заканчивает свой ход в ней. Урон заклинания увеличивается на дополнительную кость на 5-м, 11-м и 17-м уровнях. +Spell/&CreateBonfireDescription=Вы создаете костер на земле, которую вы можете видеть в пределах досягаемости. Пока заклинание не закончится, костер заполняет 5-футовый куб. Любое существо в пространстве костра, когда вы произносите заклинание, должно преуспеть в спасброске Ловкости или получить 1d8 урона от огня. Существо также должно совершить спасбросок, когда оно входит в пространство костра или заканчивает там свой ход. Урон заклинания увеличивается на дополнительный кубик на 5-м, 11-м и 17-м уровнях. +Spell/&CreateBonfireDescription=Вы создаёте огонь на поверхности земли в точке, которую можете видеть в пределах дистанции. Пока заклинание действует, огонь занимает область в кубе с длиной ребра 5 футов. Все существа, оказавшиеся в этом пространстве в момент накладывания заклинания, должны преуспеть в спасброске Ловкости, иначе получат 1d8 урона огнём. Существо также должно совершать спасбросок, при перемещении в область действия заклинания или завершении в ней своего хода. Урон заклинания увеличивается на дополнительную кость на 5-м, 11-м и 17-м уровнях. Spell/&CreateBonfireTitle=Сотворение костра Spell/&EnduringStingDescription=Вы вытягиваете жизненные силы одного видимого существа в пределах дистанции. Цель должна преуспеть в спасброске Телосложения, иначе получит 1d4 урона некротической энергией и упадёт ничком. Spell/&EnduringStingTitle=Иссушающий укол diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Cantrips-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Cantrips-zh-CN.txt index 1609bbe4e3..f43010dc59 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Cantrips-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Cantrips-zh-CN.txt @@ -29,7 +29,7 @@ Spell/&BoomingBladeDescription=你挥舞着法术施放时使用的武器,用 Spell/&BoomingBladeTitle=轰雷剑 Spell/&BurstOfRadianceDescription=制造一道耀眼的闪光,对你周围的所有敌人造成伤害。 Spell/&BurstOfRadianceTitle=光耀祷词 -Spell/&CreateBonfireDescription=你在可见范围内的地面上生起篝火。在法术结束前,篝火会填满一个 5 英尺的立方体。施放法术时,篝火空间中的任何生物都必须成功进行敏捷豁免检定,否则将受到 1d8 火焰伤害。生物在回合中第一次进入篝火空间或在那里结束回合时也必须进行豁免检定。法术的伤害在第 5、11 和 17 级时增加一个额外的骰子。 +Spell/&CreateBonfireDescription=你在可见范围内的地面上生起篝火。在法术结束前,篝火会填满一个 5 英尺的立方体。施放法术时,篝火空间中的任何生物都必须成功进行敏捷豁免检定,否则将受到 1d8 火焰伤害。生物进入篝火空间或在那里结束回合时也必须进行豁免检定。法术的伤害在第 5、11 和 17 级时增加一个额外的骰子。 Spell/&CreateBonfireTitle=创造篝火 Spell/&EnduringStingDescription=你削弱了范围内你能看到的一个生物的生命力。目标必须通过一次体质豁免检定,否则将受到 1d4 黯蚀伤害并倒地。 Spell/&EnduringStingTitle=削弱芒刺 From 99dd4394f5fa86afb3e6eceb0146d25b38056c71 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sun, 15 Sep 2024 16:30:20 -0700 Subject: [PATCH 207/212] update diagnostics --- Diagnostics/UnfinishedBusinessBlueprints/Assets.txt | 3 --- .../ConditionDefinition/ConditionGlibness.json | 6 +++--- .../ProxyCircleOfTheWildfireCauterizingFlames.json | 2 +- .../FeatureDefinitionPower/PowerCrownOfStars.json | 4 ++-- .../FeatureDefinitionPower/PowerGravityFissure.json | 6 +++--- .../FeatureDefinitionPower/PowerHolyWeapon.json | 2 +- 6 files changed, 10 insertions(+), 13 deletions(-) diff --git a/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt b/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt index 30d7f1d0ab..6a3e86c1bc 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt +++ b/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt @@ -697,7 +697,6 @@ ConditionCommandSpellFlee ConditionDefinition ConditionDefinition b52e3cc4-15af- ConditionCommandSpellGrovel ConditionDefinition ConditionDefinition 6422ce36-c309-52f9-b699-bddb61fde71e ConditionCommandSpellHalt ConditionDefinition ConditionDefinition d20e7a46-e706-5c54-8bea-955b2054193a ConditionCorruptingBolt ConditionDefinition ConditionDefinition c47e9ae4-841b-53af-b40f-2cb08dfa7d08 -ConditionCreateBonfireMark ConditionDefinition ConditionDefinition 16259b67-cbf3-59fe-8127-e240592f1470 ConditionCrownOfStars ConditionDefinition ConditionDefinition 2d6f7c70-16fc-550b-83ff-f2e945b43449 ConditionCrusadersMantle ConditionDefinition ConditionDefinition 04a3a8c7-cf68-5a07-a0c1-9aabc911cad9 ConditionCrystalDefense ConditionDefinition ConditionDefinition 9f04a1bd-b2f4-5e66-9939-cc140c9fd83f @@ -3089,7 +3088,6 @@ PowerCollegeOfThespianImprovedTerrificPerformance FeatureDefinitionPower Feature PowerCollegeOfThespianTerrificPerformance FeatureDefinitionPower FeatureDefinition ed5f8e89-7ca7-59ee-bd76-b9f936d0797a PowerCollegeOfValianceDishearteningPerformance FeatureDefinitionPower FeatureDefinition 1f54f672-43cd-52b3-8e3e-c9077a7f8eb4 PowerCollegeOfValianceHeroicInspiration FeatureDefinitionPower FeatureDefinition 5b82d737-651e-5bc2-b18b-1963f134f1b5 -PowerCreateBonfireDamage FeatureDefinitionPower FeatureDefinition b7c2435b-6087-5c17-a46b-e970baee8a07 PowerCreateInfusedReplicaAmuletOfHealth FeatureDefinitionPowerSharedPool FeatureDefinition 241cfb02-8421-5f82-8f11-300407bff7c7 PowerCreateInfusedReplicaBackpack_Bag_Of_Holding FeatureDefinitionPowerSharedPool FeatureDefinition 41031a48-4461-5e48-8a60-f7da9a7bd597 PowerCreateInfusedReplicaBeltOfGiantHillStrength FeatureDefinitionPowerSharedPool FeatureDefinition bbd152a7-2d27-5836-a649-3f466da89ce6 @@ -5914,7 +5912,6 @@ PowerCollegeOfThespianImprovedTerrificPerformance FeatureDefinitionPower Feature PowerCollegeOfThespianTerrificPerformance FeatureDefinitionPower FeatureDefinitionPower ed5f8e89-7ca7-59ee-bd76-b9f936d0797a PowerCollegeOfValianceDishearteningPerformance FeatureDefinitionPower FeatureDefinitionPower 1f54f672-43cd-52b3-8e3e-c9077a7f8eb4 PowerCollegeOfValianceHeroicInspiration FeatureDefinitionPower FeatureDefinitionPower 5b82d737-651e-5bc2-b18b-1963f134f1b5 -PowerCreateBonfireDamage FeatureDefinitionPower FeatureDefinitionPower b7c2435b-6087-5c17-a46b-e970baee8a07 PowerCreateInfusedReplicaAmuletOfHealth FeatureDefinitionPowerSharedPool FeatureDefinitionPower 241cfb02-8421-5f82-8f11-300407bff7c7 PowerCreateInfusedReplicaBackpack_Bag_Of_Holding FeatureDefinitionPowerSharedPool FeatureDefinitionPower 41031a48-4461-5e48-8a60-f7da9a7bd597 PowerCreateInfusedReplicaBeltOfGiantHillStrength FeatureDefinitionPowerSharedPool FeatureDefinitionPower bbd152a7-2d27-5836-a649-3f466da89ce6 diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGlibness.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGlibness.json index 710f6c8d61..902eeaadd1 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGlibness.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGlibness.json @@ -132,9 +132,9 @@ "description": "Spell/&GlibnessDescription", "spriteReference": { "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": null, - "m_SubObjectType": null + "m_AssetGUID": "7e8c5d4d891953345b54b82e51c6d884", + "m_SubObjectName": "ConditionPositive", + "m_SubObjectType": "UnityEngine.Sprite, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" }, "color": { "$type": "UnityEngine.Color, UnityEngine.CoreModule", diff --git a/Diagnostics/UnfinishedBusinessBlueprints/EffectProxyDefinition/ProxyCircleOfTheWildfireCauterizingFlames.json b/Diagnostics/UnfinishedBusinessBlueprints/EffectProxyDefinition/ProxyCircleOfTheWildfireCauterizingFlames.json index db3be05ffd..1587612f27 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/EffectProxyDefinition/ProxyCircleOfTheWildfireCauterizingFlames.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/EffectProxyDefinition/ProxyCircleOfTheWildfireCauterizingFlames.json @@ -31,7 +31,7 @@ "m_SubObjectName": "", "m_SubObjectType": "" }, - "addLightSource": false, + "addLightSource": true, "lightSourceForm": { "$type": "LightSourceForm, Assembly-CSharp", "lightSourceType": "Basic", diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerCrownOfStars.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerCrownOfStars.json index 71c42ca875..5cbbec26c3 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerCrownOfStars.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerCrownOfStars.json @@ -100,13 +100,13 @@ "specialFormsDescription": "", "effectAdvancement": { "$type": "EffectAdvancement, Assembly-CSharp", - "effectIncrementMethod": "None", + "effectIncrementMethod": "PerAdditionalSlotLevel", "incrementMultiplier": 1, "additionalTargetsPerIncrement": 0, "additionalSubtargetsPerIncrement": 0, "additionalDicePerIncrement": 0, "additionalSpellLevelPerIncrement": 0, - "additionalSummonsPerIncrement": 0, + "additionalSummonsPerIncrement": 2, "additionalHPPerIncrement": 0, "additionalTempHPPerIncrement": 0, "additionalTargetCellsPerIncrement": 0, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerGravityFissure.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerGravityFissure.json index 73991784ab..72ca49bc03 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerGravityFissure.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerGravityFissure.json @@ -125,11 +125,11 @@ "specialFormsDescription": "", "effectAdvancement": { "$type": "EffectAdvancement, Assembly-CSharp", - "effectIncrementMethod": "None", + "effectIncrementMethod": "PerAdditionalSlotLevel", "incrementMultiplier": 1, "additionalTargetsPerIncrement": 0, "additionalSubtargetsPerIncrement": 0, - "additionalDicePerIncrement": 0, + "additionalDicePerIncrement": 1, "additionalSpellLevelPerIncrement": 0, "additionalSummonsPerIncrement": 0, "additionalHPPerIncrement": 0, @@ -196,7 +196,7 @@ }, "impactParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", + "m_AssetGUID": "570add77272f276419384de82fce1d15", "m_SubObjectName": "", "m_SubObjectType": "" }, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerHolyWeapon.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerHolyWeapon.json index bccc15c0ff..5874e1524f 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerHolyWeapon.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerHolyWeapon.json @@ -150,7 +150,7 @@ "$type": "EffectParticleParameters, Assembly-CSharp", "casterParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "3cff2b6f11a2cd649b3fb3fb2c402351", + "m_AssetGUID": "8b9fa0fcdb99d2347a36d25a972de9f5", "m_SubObjectName": "", "m_SubObjectType": "" }, From 64bb9df5d584217091b32c1443a82035f7cd6f95 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sun, 15 Sep 2024 16:37:03 -0700 Subject: [PATCH 208/212] reduce warning comments --- .../Behaviors/VerticalPushPullMotion.cs | 26 ++++++++++--------- 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/SolastaUnfinishedBusiness/Behaviors/VerticalPushPullMotion.cs b/SolastaUnfinishedBusiness/Behaviors/VerticalPushPullMotion.cs index a2e21fed85..60ac298be0 100644 --- a/SolastaUnfinishedBusiness/Behaviors/VerticalPushPullMotion.cs +++ b/SolastaUnfinishedBusiness/Behaviors/VerticalPushPullMotion.cs @@ -114,7 +114,6 @@ private static int3 Slide(int3 sides, Vector3 delta, int3 position, bool canMove tmp = new int3(0, sides.y, sides.z); if (tmp != int3.zero && CheckDirections(tmp, position, canMoveThroughWalls, size, positioningService)) { - // ReSharper disable once RedundantAssignment d = delta.x; slide = tmp; } @@ -126,7 +125,6 @@ private static int3 Slide(int3 sides, Vector3 delta, int3 position, bool canMove tmp = new int3(sides.x, 0, sides.z); if (tmp != int3.zero && CheckDirections(tmp, position, canMoveThroughWalls, size, positioningService)) { - // ReSharper disable once RedundantAssignment d = delta.y; slide = tmp; } @@ -138,7 +136,6 @@ private static int3 Slide(int3 sides, Vector3 delta, int3 position, bool canMove tmp = new int3(sides.x, sides.y, 0); if (tmp != int3.zero && CheckDirections(tmp, position, canMoveThroughWalls, size, positioningService)) { - // ReSharper disable once RedundantAssignment d = delta.z; slide = tmp; } @@ -158,24 +155,29 @@ private static int3 Slide(int3 sides, Vector3 delta, int3 position, bool canMove tmp = new int3(0, 0, sides.z); if (CheckDirections(tmp, position, canMoveThroughWalls, size, positioningService)) { - // ReSharper disable once RedundantAssignment d = delta.x; slide = tmp; } } //Try zeroing Y and Z axis - if (delta.z < d) + if (delta.z >= d) { - tmp = new int3(sides.x, 0, 0); - if (CheckDirections(tmp, position, canMoveThroughWalls, size, positioningService)) - { - // ReSharper disable once RedundantAssignment - d = delta.z; - slide = tmp; - } + return slide; } + tmp = new int3(sides.x, 0, 0); + if (!CheckDirections(tmp, position, canMoveThroughWalls, size, positioningService)) + { + return slide; + } + +#pragma warning disable IDE0059 + // ReSharper disable once RedundantAssignment + d = delta.z; +#pragma warning restore IDE0059 + slide = tmp; + return slide; } From 35114aea99ba43f00128b25ca1f8d8a5261a56c9 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sun, 15 Sep 2024 18:15:43 -0700 Subject: [PATCH 209/212] demote GameLocationCharacterManager.UnlockCharactersForLoading patch as no longer required --- .../ChangelogHistory.txt | 1 + .../GameLocationCharacterManagerPatcher.cs | 21 ------------------- 2 files changed, 1 insertion(+), 21 deletions(-) diff --git a/SolastaUnfinishedBusiness/ChangelogHistory.txt b/SolastaUnfinishedBusiness/ChangelogHistory.txt index 3a031772bc..a866d25266 100644 --- a/SolastaUnfinishedBusiness/ChangelogHistory.txt +++ b/SolastaUnfinishedBusiness/ChangelogHistory.txt @@ -29,6 +29,7 @@ - fixed Transmuted metamagic only changing first target damage type with AoE spells - fixed Wrathful Smite to do a wisdom ability check against caster DC - improved combat log so players can see when characters use dash action [VANILLA] +- improved hero positioning on party spawning with parties bigger than 4 - improved location gadgets to trigger "try alter save outcome" reactions [VANILLA] - improved Maneuvering Attack, and Martial Warlord strategic repositioning to use a run stance - improved mod UI to ensure all settings required to be in sync on MP sessions are now under Gameplay diff --git a/SolastaUnfinishedBusiness/Patches/GameLocationCharacterManagerPatcher.cs b/SolastaUnfinishedBusiness/Patches/GameLocationCharacterManagerPatcher.cs index 7bb587cdd3..7cd419dc1b 100644 --- a/SolastaUnfinishedBusiness/Patches/GameLocationCharacterManagerPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/GameLocationCharacterManagerPatcher.cs @@ -256,27 +256,6 @@ private static void CreateAndBindEffectProxy( } } - //PATCH: recalculates additional party members positions (PARTYSIZE) - [HarmonyPatch(typeof(GameLocationCharacterManager), - nameof(GameLocationCharacterManager.UnlockCharactersForLoading))] - [SuppressMessage("Minor Code Smell", "S101:Types should be named in PascalCase", Justification = "Patch")] - [UsedImplicitly] - public static class UnlockCharactersForLoading_Patch - { - [UsedImplicitly] - public static void Prefix([NotNull] GameLocationCharacterManager __instance) - { - var partyCharacters = __instance.PartyCharacters; - - for (var idx = ToolsContext.GamePartySize; idx < partyCharacters.Count; idx++) - { - var position = partyCharacters[idx % ToolsContext.GamePartySize].LocationPosition; - - partyCharacters[idx].LocationPosition = new int3(position.x, position.y, position.z); - } - } - } - [HarmonyPatch(typeof(GameLocationCharacterManager), nameof(GameLocationCharacterManager.LoseWildShapeAndRefund))] [SuppressMessage("Minor Code Smell", "S101:Types should be named in PascalCase", Justification = "Patch")] [UsedImplicitly] From 6a89bd65f60d54238bc2876bf58aae54c4e2ff8e Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sun, 15 Sep 2024 19:28:39 -0700 Subject: [PATCH 210/212] improve spells code to be consistent on IModifyEffectDescription on effect level get --- .../SpellDefinition/GravityFissure.json | 2 +- Documentation/Spells.md | 2 +- .../Resources/Spells => Media}/MagicStone.png | Bin .../Resources/Spells/HolyWeapon.png | Bin 14882 -> 14179 bytes .../Spells/SpellBuildersLevel01.cs | 24 ++++++----------- .../Spells/SpellBuildersLevel03.cs | 25 ++++++++---------- .../Spells/SpellBuildersLevel06.cs | 23 ++++++++-------- .../Spells/SpellBuildersLevel08.cs | 2 +- .../Translations/de/Spells/Spells06-de.txt | 2 +- .../Translations/en/Spells/Spells06-en.txt | 2 +- .../Translations/es/Spells/Spells06-es.txt | 2 +- .../Translations/fr/Spells/Spells06-fr.txt | 2 +- .../Translations/it/Spells/Spells06-it.txt | 2 +- .../Translations/ja/Spells/Spells06-ja.txt | 2 +- .../Translations/ko/Spells/Spells06-ko.txt | 2 +- .../pt-BR/Spells/Spells06-pt-BR.txt | 2 +- .../Translations/ru/Spells/Cantrips-ru.txt | 1 - .../Translations/ru/Spells/Spells06-ru.txt | 2 +- .../zh-CN/Spells/Spells06-zh-CN.txt | 2 +- 19 files changed, 43 insertions(+), 56 deletions(-) rename {SolastaUnfinishedBusiness/Resources/Spells => Media}/MagicStone.png (100%) diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/GravityFissure.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/GravityFissure.json index db981d7c3b..dceca18364 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/GravityFissure.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/GravityFissure.json @@ -206,7 +206,7 @@ }, "impactParticleReference": { "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", - "m_AssetGUID": "", + "m_AssetGUID": "570add77272f276419384de82fce1d15", "m_SubObjectName": "", "m_SubObjectType": "" }, diff --git a/Documentation/Spells.md b/Documentation/Spells.md index bf68977b76..ae0a829007 100644 --- a/Documentation/Spells.md +++ b/Documentation/Spells.md @@ -1650,7 +1650,7 @@ A sphere surrounding you prevents any spell up to 5th level to affect anyone ins **[Wizard]** -You manifest a ravine of gravitational energy in a line originating from you that is 60 feet long, 5 feet wide, and becomes difficult terrain until the start of your next turn. Each creature in that line must make a Constitution saving throw, taking 8d8 force damage on a failed save, or half as much damage on a successful one. Each creature within 10 feet of the line but not in it must succeed on a Constitution saving throw or take 8d8 force damage and be pulled toward the line until the creature is in its area. When you cast this spell using a slot of 7th level or higher, the damage increases by 1d8 for each slot level above 6th. +You manifest a ravine of gravitational energy in a line originating from you that is 60 feet long, and 5 feet wide. Each creature in that line must make a Constitution saving throw, taking 8d8 force damage on a failed save, or half as much damage on a successful one. Each creature within 10 feet of the line but not in it must succeed on a Constitution saving throw or take 8d8 force damage and be pulled toward the line until the creature is in its area. When you cast this spell using a slot of 7th level or higher, the damage increases by 1d8 for each slot level above 6th. # 274. - Harm (V,S) level 6 Necromancy [SOL] diff --git a/SolastaUnfinishedBusiness/Resources/Spells/MagicStone.png b/Media/MagicStone.png similarity index 100% rename from SolastaUnfinishedBusiness/Resources/Spells/MagicStone.png rename to Media/MagicStone.png diff --git a/SolastaUnfinishedBusiness/Resources/Spells/HolyWeapon.png b/SolastaUnfinishedBusiness/Resources/Spells/HolyWeapon.png index 057dfa88f0c76447bc555e284d2b0c0d9cc94cab..4451ca5382a0bbbd96408be5a72394252d98d648 100644 GIT binary patch delta 13913 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 n@Wf8Sbk*Z1e4?2iKY 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 T{Kdio00000NkvXXu0mjf!2Z=l diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs index ce7ea27595..48a6b76d1f 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs @@ -1819,7 +1819,7 @@ public EffectDescription GetEffectDescription( { if (rulesetEffect is RulesetEffectPower rulesetEffectPower) { - effectDescription.FindFirstDamageForm().DiceNumber = + effectDescription.EffectForms[0].DamageForm.DiceNumber = 2 + (rulesetEffectPower.usablePower.spentPoints - 1); } @@ -1847,7 +1847,7 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, var usablePower = PowerProvider.Get(powerIceBlade, rulesetCaster); // use spentPoints to store effect level to be used later by power - usablePower.spentPoints = action.ActionParams.activeEffect.EffectLevel; + usablePower.spentPoints = action.ActionParams.RulesetEffect.EffectLevel; // need to loop over target characters to support twinned metamagic scenarios foreach (var targets in actionCastSpell.ActionParams.TargetCharacters @@ -2779,16 +2779,12 @@ public EffectDescription GetEffectDescription( RulesetCharacter character, RulesetEffect rulesetEffect) { - if (!character.TryGetConditionOfCategoryAndType( + if (character.TryGetConditionOfCategoryAndType( AttributeDefinitions.TagEffect, conditionSpikeBarrage.Name, out var activeCondition)) { - return effectDescription; + effectDescription.EffectForms[0].DamageForm.DiceNumber = activeCondition.EffectLevel; } - var damageForm = effectDescription.FindFirstDamageForm(); - - damageForm.DiceNumber = activeCondition.EffectLevel; - return effectDescription; } @@ -2939,17 +2935,13 @@ public EffectDescription GetEffectDescription( RulesetCharacter character, RulesetEffect rulesetEffect) { - var rulesetSpell = character.SpellsCastByMe.FirstOrDefault(x => x.SpellDefinition == spellWitchBolt); - - if (rulesetSpell == null) + if (character.ConcentratedSpell != null && + character.ConcentratedSpell.SpellDefinition == spellWitchBolt) { - return effectDescription; + effectDescription.EffectForms[0].DamageForm.DiceNumber = + 1 + (character.ConcentratedSpell.EffectLevel - 1); } - var effectLevel = rulesetSpell.EffectLevel; - - effectDescription.FindFirstDamageForm().DiceNumber = effectLevel; - return effectDescription; } } diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel03.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel03.cs index 4f6a65ddab..8b6959b3b9 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel03.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel03.cs @@ -513,14 +513,13 @@ public EffectDescription GetEffectDescription( RulesetCharacter character, RulesetEffect rulesetEffect) { - if (character.ConcentratedSpell == null || - character.ConcentratedSpell.SpellDefinition != spell) + if (character.ConcentratedSpell != null && + character.ConcentratedSpell.SpellDefinition == spell) { - return effectDescription; + effectDescription.EffectForms[0].DamageForm.DiceNumber = + 1 + (character.ConcentratedSpell.EffectLevel - 3); } - effectDescription.FindFirstDamageForm().DiceNumber = 1 + (character.ConcentratedSpell.EffectLevel - 3); - return effectDescription; } } @@ -819,14 +818,12 @@ public EffectDescription GetEffectDescription( RulesetCharacter character, RulesetEffect rulesetEffect) { - if (!character.TryGetConditionOfCategoryAndType( + if (character.TryGetConditionOfCategoryAndType( AttributeDefinitions.TagEffect, conditionExplode.Name, out var activeCondition)) { - return effectDescription; + effectDescription.EffectForms[0].DamageForm.DiceNumber = 3 + (activeCondition.EffectLevel - 3); } - effectDescription.FindFirstDamageForm().DiceNumber = 3 + (activeCondition.EffectLevel - 3); - return effectDescription; } } @@ -1314,7 +1311,7 @@ public EffectDescription GetEffectDescription( if (character.TryGetConditionOfCategoryAndType( AttributeDefinitions.TagEffect, conditionLightningArrow.Name, out var activeCondition)) { - effectDescription.FindFirstDamageForm().diceNumber = 2 + (activeCondition.EffectLevel - 3); + effectDescription.EffectForms[0].DamageForm.DiceNumber = 2 + (activeCondition.EffectLevel - 3); } return effectDescription; @@ -1762,16 +1759,16 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, var caster = action.ActingCharacter; var rulesetCaster = caster.RulesetCharacter; var diceNumber = 4 + (actionCastSpell.activeSpell.EffectLevel - 3); + var damageForm = new DamageForm + { + DamageType = DamageTypeNecrotic, DiceNumber = diceNumber, DieType = DieType.D8 + }; // need to loop over target characters to support twinned metamagic scenarios foreach (var target in action.ActionParams.TargetCharacters) { var rulesetTarget = target.RulesetCharacter; var rolls = new List(); - var damageForm = new DamageForm - { - DamageType = DamageTypeNecrotic, DiceNumber = diceNumber, DieType = DieType.D8 - }; var totalDamage = rulesetCaster.RollDamage(damageForm, 0, false, 0, 0, 1, false, false, false, rolls); var totalHealing = totalDamage * 2; var currentHitPoints = rulesetCaster.CurrentHitPoints; diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel06.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel06.cs index 884d3320bc..969183070b 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel06.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel06.cs @@ -242,8 +242,7 @@ internal static SpellDefinition BuildGravityFissure() EffectDescriptionBuilder .Create(Earthquake) // only required to get the SFX in this particular scenario to activate - // deviates a bit from TT but not OP at all to have difficult terrain until start of turn - .SetDurationData(DurationType.Round, 0, TurnOccurenceType.StartOfTurn) + .SetDurationData(DurationType.Round) .SetTargetingData(Side.All, RangeType.Self, 1, TargetType.Line, 12) .SetSavingThrowData(false, AttributeDefinitions.Constitution, true, EffectDifficultyClassComputation.SpellCastingFeature) @@ -257,6 +256,7 @@ internal static SpellDefinition BuildGravityFissure() .SetDamageForm(DamageTypeForce, 8, DieType.D8) .Build(), // only required to get the SFX in this particular scenario to activate + // dangerous zone won't be enforced here as not a concentration spell EffectFormBuilder.TopologyForm(TopologyForm.Type.DangerousZone, false)) .SetImpactEffectParameters(EldritchBlast) .Build()) @@ -282,7 +282,7 @@ public EffectDescription GetEffectDescription( { if (rulesetEffect is RulesetEffectPower rulesetEffectPower) { - effectDescription.EffectForms[0].DamageForm.diceNumber = + effectDescription.EffectForms[0].DamageForm.DiceNumber = 8 + (rulesetEffectPower.usablePower.spentPoints - 6); } @@ -323,7 +323,6 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, // create tab to select best position and set initial to far beyond .ToDictionary(x => x, _ => new Container()); - CharacterActionMagicEffectPatcher.CoveredFloorPositions.Reverse(); // select the best position possible to force a drag to effect origin @@ -361,7 +360,7 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, var usablePower = PowerProvider.Get(powerDrag, rulesetCharacter); // use spentPoints to store effect level to be used later by power - usablePower.spentPoints = action.ActionParams.activeEffect.EffectLevel; + usablePower.spentPoints = action.ActionParams.RulesetEffect.EffectLevel; // drag each contender to the selected position starting with the ones closer to the line foreach (var x in contendersAndPositions @@ -922,6 +921,11 @@ internal static SpellDefinition BuildRingOfBlades() conditionRingOfBlades.GuiPresentation.description = Gui.EmptyContent; + var behavior = new ModifyEffectDescriptionRingOfBlades(powerRingOfBlades, conditionRingOfBlades); + + powerRingOfBlades.AddCustomSubFeatures(behavior); + powerRingOfBladesFree.AddCustomSubFeatures(behavior); + var conditionRingOfBladesFree = ConditionDefinitionBuilder .Create($"Condition{NAME}Free") .SetGuiPresentationNoContent(true) @@ -960,7 +964,6 @@ internal static SpellDefinition BuildRingOfBlades() .SetParticleEffectParameters(HypnoticPattern) .SetEffectEffectParameters(PowerMagebaneSpellCrusher) .Build()) - .AddCustomSubFeatures(new ModifyEffectDescriptionRingOfBlades(powerRingOfBlades, conditionRingOfBlades)) .AddToDB(); return spell; @@ -1003,16 +1006,12 @@ public EffectDescription GetEffectDescription( RulesetCharacter character, RulesetEffect rulesetEffect) { - var damageForm = effectDescription.FindFirstDamageForm(); - - if (!character.TryGetConditionOfCategoryAndType( + if (character.TryGetConditionOfCategoryAndType( AttributeDefinitions.TagEffect, conditionRingOfBlades.Name, out var activeCondition)) { - return effectDescription; + effectDescription.EffectForms[0].DamageForm.DiceNumber = 4 + (activeCondition.EffectLevel - 6); } - damageForm.diceNumber = 4 + (activeCondition.EffectLevel - 6); - return effectDescription; } } diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel08.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel08.cs index 46f80ef4b9..36c27ef583 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel08.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel08.cs @@ -373,7 +373,7 @@ public EffectDescription GetEffectDescription( { if (rulesetEffect is RulesetEffectPower rulesetEffectPower) { - effectDescription.FindFirstDamageForm().DiceNumber = + effectDescription.EffectForms[0].DamageForm.DiceNumber = 7 + (2 * (rulesetEffectPower.usablePower.spentPoints - 8)); } diff --git a/SolastaUnfinishedBusiness/Translations/de/Spells/Spells06-de.txt b/SolastaUnfinishedBusiness/Translations/de/Spells/Spells06-de.txt index 63d12633b9..85b8340289 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Spells/Spells06-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Spells/Spells06-de.txt @@ -10,7 +10,7 @@ Spell/&FizbanPlatinumShieldDescription=Du erschaffst ein Feld aus silbrigem Lich Spell/&FizbanPlatinumShieldTitle=Fizbans Platinschild Spell/&FlashFreezeDescription=Sie versuchen, eine Kreatur, die Sie in Reichweite sehen können, in ein Gefängnis aus massivem Eis einzuschließen. Das Ziel muss einen Geschicklichkeitsrettungswurf machen. Bei einem misslungenen Rettungswurf erleidet das Ziel 10W6 Kälteschaden und wird in Schichten aus dickem Eis gefangen. Bei einem erfolgreichen Rettungswurf erleidet das Ziel nur halb so viel Schaden und wird nicht gefangen gehalten. Der Zauber kann nur auf Kreaturen bis zu großer Größe angewendet werden. Um auszubrechen, kann das gefangene Ziel einen Stärkewurf als Aktion gegen Ihren Zauberrettungswurf-SG machen. Bei Erfolg entkommt das Ziel und ist nicht länger gefangen. Wenn Sie diesen Zauber mit einem Zauberplatz der 7. Stufe oder höher wirken, erhöht sich der Kälteschaden um 2W6 für jede Platzstufe über der 6. Spell/&FlashFreezeTitle=Schockgefrieren -Spell/&GravityFissureDescription=Du erzeugst eine Schlucht aus Gravitationsenergie in einer Linie, die von dir ausgeht, 60 Fuß lang und 5 Fuß breit ist und bis zum Beginn deines nächsten Zuges zu schwierigem Gelände wird. Jede Kreatur in dieser Linie muss einen Konstitutionsrettungswurf machen und erleidet bei einem misslungenen Rettungswurf 8W8 Kraftschaden oder bei einem erfolgreichen Rettungswurf die Hälfte des Schadens. Jede Kreatur innerhalb von 10 Fuß der Linie, die sich aber nicht darin befindet, muss einen Konstitutionsrettungswurf machen oder erleidet 8W8 Kraftschaden und wird zur Linie gezogen, bis die Kreatur in ihrem Bereich ist. Wenn du diesen Zauber mit einem Slot der 7. Stufe oder höher wirkst, erhöht sich der Schaden um 1W8 für jeden Slotlevel über dem 6. +Spell/&GravityFissureDescription=Du erzeugst eine Schlucht aus Gravitationsenergie in einer Linie, die von dir ausgeht und 60 Fuß lang und 5 Fuß breit ist. Jede Kreatur in dieser Linie muss einen Konstitutionsrettungswurf machen und erleidet bei einem misslungenen Rettungswurf 8W8 Kraftschaden oder bei einem erfolgreichen Rettungswurf die Hälfte. Jede Kreatur innerhalb von 10 Fuß der Linie, die sich aber nicht darin befindet, muss einen Konstitutionsrettungswurf machen oder erleidet 8W8 Kraftschaden und wird zur Linie gezogen, bis die Kreatur in ihrem Bereich ist. Wenn du diesen Zauber mit einem Slot der 7. Stufe oder höher wirkst, erhöht sich der Schaden um 1W8 für jeden Slot über der 6. Stufe. Spell/&GravityFissureTitle=Schwerkraftspalt Spell/&HeroicInfusionDescription=Sie verleihen sich Ausdauer und Kampfgeschick, angetrieben durch Magie. Bis der Zauber endet, können Sie keine Zauber wirken und Sie erhalten die folgenden Vorteile:\n• Sie erhalten 50 temporäre Trefferpunkte. Wenn welche davon übrig sind, wenn der Zauber endet, sind sie verloren.\n• Sie haben einen Vorteil bei Angriffswürfen, die Sie mit einfachen und Kampfwaffen machen.\n• Wenn Sie ein Ziel mit einem Waffenangriff treffen, erleidet dieses Ziel zusätzlichen Kraftschaden von 2W12.\n• Sie besitzen die Rüstungs-, Waffen- und Rettungswurffähigkeiten der Kämpferklasse.\n• Sie können zweimal angreifen, statt einmal, wenn Sie in Ihrem Zug die Angriffsaktion ausführen.\nUnmittelbar nachdem der Zauber endet, müssen Sie einen Konstitutionsrettungswurf DC 15 bestehen oder erleiden eine Stufe Erschöpfung. Spell/&HeroicInfusionTitle=Tensers Verwandlung diff --git a/SolastaUnfinishedBusiness/Translations/en/Spells/Spells06-en.txt b/SolastaUnfinishedBusiness/Translations/en/Spells/Spells06-en.txt index f9f12d25ce..988edf4962 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Spells/Spells06-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Spells/Spells06-en.txt @@ -10,7 +10,7 @@ Spell/&FizbanPlatinumShieldDescription=You create a field of silvery light that Spell/&FizbanPlatinumShieldTitle=Fizban's Platinum Shield Spell/&FlashFreezeDescription=You attempt to encase a creature you can see within range in a prison of solid ice. The target must make a Dexterity saving throw. On a failed save, the target takes 10d6 cold damage and becomes restrained in layers of thick ice. On a successful save, the target takes half as much damage and is not restrained. The spell can only be used on creatures up to large size. To break out, the restrained target can make a Strength check as an action against your spell save DC. On success, the target escapes and is no longer restrained. When you cast this spell using a spell slot of 7th level or higher, the cold damage increases by 2d6 for each slot level above 6th. Spell/&FlashFreezeTitle=Flash Freeze -Spell/&GravityFissureDescription=You manifest a ravine of gravitational energy in a line originating from you that is 60 feet long, 5 feet wide, and becomes difficult terrain until the start of your next turn. Each creature in that line must make a Constitution saving throw, taking 8d8 force damage on a failed save, or half as much damage on a successful one. Each creature within 10 feet of the line but not in it must succeed on a Constitution saving throw or take 8d8 force damage and be pulled toward the line until the creature is in its area. When you cast this spell using a slot of 7th level or higher, the damage increases by 1d8 for each slot level above 6th. +Spell/&GravityFissureDescription=You manifest a ravine of gravitational energy in a line originating from you that is 60 feet long, and 5 feet wide. Each creature in that line must make a Constitution saving throw, taking 8d8 force damage on a failed save, or half as much damage on a successful one. Each creature within 10 feet of the line but not in it must succeed on a Constitution saving throw or take 8d8 force damage and be pulled toward the line until the creature is in its area. When you cast this spell using a slot of 7th level or higher, the damage increases by 1d8 for each slot level above 6th. Spell/&GravityFissureTitle=Gravity Fissure Spell/&HeroicInfusionDescription=You endow yourself with endurance and martial prowess fueled by magic. Until the spell ends, you can't cast spells, and you gain the following benefits:\n• You gain 50 temporary hit points. If any of these remain when the spell ends, they are lost.\n• You have advantage on attack rolls that you make with simple and martial weapons.\n• When you hit a target with a weapon attack, that target takes an extra 2d12 force damage.\n• You have the Fighter class armor, weapons, and saving throws proficiencies.\n• You can attack twice, instead of once, when you take the Attack action on your turn.\nImmediately after the spell ends, you must succeed on a DC 15 Constitution saving throw or suffer one level of exhaustion. Spell/&HeroicInfusionTitle=Tenser's Transformation diff --git a/SolastaUnfinishedBusiness/Translations/es/Spells/Spells06-es.txt b/SolastaUnfinishedBusiness/Translations/es/Spells/Spells06-es.txt index 3aaee056e8..71f4a4b87a 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Spells/Spells06-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Spells/Spells06-es.txt @@ -10,7 +10,7 @@ Spell/&FizbanPlatinumShieldDescription=Creas un campo de luz plateada que rodea Spell/&FizbanPlatinumShieldTitle=Escudo de platino de Fizban Spell/&FlashFreezeDescription=Intentas encerrar a una criatura que puedes ver dentro del alcance en una prisión de hielo sólido. El objetivo debe realizar una tirada de salvación de Destreza. Si falla la tirada, el objetivo sufre 10d6 puntos de daño por frío y queda inmovilizado en capas de hielo grueso. Si tiene éxito, el objetivo sufre la mitad de daño y no queda inmovilizado. El conjuro solo se puede usar en criaturas de tamaño grande. Para escapar, el objetivo inmovilizado puede realizar una prueba de Fuerza como acción contra la CD de tu tirada de salvación de conjuros. Si tiene éxito, el objetivo escapa y ya no queda inmovilizado. Cuando lanzas este conjuro usando un espacio de conjuro de nivel 7 o superior, el daño por frío aumenta en 2d6 por cada nivel de espacio por encima del 6. Spell/&FlashFreezeTitle=Congelación instantánea -Spell/&GravityFissureDescription=Manifiestas un barranco de energía gravitatoria en una línea que se origina desde ti y que tiene 60 pies de largo y 5 pies de ancho, y se convierte en terreno difícil hasta el comienzo de tu siguiente turno. Cada criatura en esa línea debe realizar una tirada de salvación de Constitución, recibiendo 8d8 puntos de daño por fuerza si falla la tirada, o la mitad de daño si tiene éxito. Cada criatura a 10 pies de la línea pero que no esté dentro de ella debe superar una tirada de salvación de Constitución o recibir 8d8 puntos de daño por fuerza y ​​ser atraída hacia la línea hasta que la criatura esté en su área. Cuando lanzas este conjuro usando un espacio de nivel 7 o superior, el daño aumenta en 1d8 por cada nivel de espacio por encima del 6. +Spell/&GravityFissureDescription=Manifiestas un barranco de energía gravitatoria en una línea que se origina desde ti y que tiene 60 pies de largo y 5 pies de ancho. Cada criatura en esa línea debe realizar una tirada de salvación de Constitución, recibiendo 8d8 puntos de daño por fuerza si falla la tirada, o la mitad de daño si tiene éxito. Cada criatura que se encuentre a 10 pies de la línea pero que no esté dentro de ella debe superar una tirada de salvación de Constitución o recibirá 8d8 puntos de daño por fuerza y ​​será atraída hacia la línea hasta que la criatura esté en su área. Cuando lanzas este conjuro usando un espacio de nivel 7 o superior, el daño aumenta en 1d8 por cada nivel de espacio por encima del 6. Spell/&GravityFissureTitle=Fisura de gravedad Spell/&HeroicInfusionDescription=Te dotas de resistencia y destreza marcial alimentadas por la magia. Hasta que el conjuro termine, no puedes lanzar conjuros, y obtienes los siguientes beneficios:\n• Obtienes 50 puntos de golpe temporales. Si alguno de estos permanece cuando el conjuro termina, se pierde.\n• Tienes ventaja en las tiradas de ataque que hagas con armas simples y marciales.\n• Cuando golpeas a un objetivo con un ataque de arma, ese objetivo sufre 2d12 puntos de daño de fuerza adicionales.\n• Tienes las competencias de armadura, armas y tiradas de salvación de la clase Guerrero.\n• Puedes atacar dos veces, en lugar de una, cuando realizas la acción de Ataque en tu turno.\nInmediatamente después de que el conjuro termine, debes tener éxito en una tirada de salvación de Constitución CD 15 o sufrir un nivel de agotamiento. Spell/&HeroicInfusionTitle=La transformación de Tenser diff --git a/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells06-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells06-fr.txt index 483c8a58de..d8277c93c3 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells06-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Spells/Spells06-fr.txt @@ -10,7 +10,7 @@ Spell/&FizbanPlatinumShieldDescription=Vous créez un champ de lumière argenté Spell/&FizbanPlatinumShieldTitle=Bouclier de platine de Fizban Spell/&FlashFreezeDescription=Vous tentez d'enfermer une créature visible à portée dans une prison de glace solide. La cible doit réussir un jet de sauvegarde de Dextérité. En cas d'échec, la cible subit 10d6 dégâts de froid et se retrouve emprisonnée dans d'épaisses couches de glace. En cas de réussite, la cible subit la moitié des dégâts et n'est plus emprisonnée. Le sort ne peut être utilisé que sur des créatures de grande taille. Pour s'échapper, la cible emprisonnée peut effectuer un test de Force en tant qu'action contre le DD de votre sauvegarde contre les sorts. En cas de réussite, la cible s'échappe et n'est plus emprisonnée. Lorsque vous lancez ce sort en utilisant un emplacement de sort de niveau 7 ou supérieur, les dégâts de froid augmentent de 2d6 pour chaque niveau d'emplacement au-dessus du niveau 6. Spell/&FlashFreezeTitle=Gel instantané -Spell/&GravityFissureDescription=Vous faites apparaître un ravin d'énergie gravitationnelle sur une ligne partant de vous, qui mesure 18 mètres de long et 1,5 mètre de large et qui devient un terrain difficile jusqu'au début de votre prochain tour. Chaque créature sur cette ligne doit réussir un jet de sauvegarde de Constitution, subissant 8d8 dégâts de force en cas d'échec, ou la moitié de ces dégâts en cas de réussite. Chaque créature à 3 mètres de la ligne mais qui n'en fait pas partie doit réussir un jet de sauvegarde de Constitution ou subir 8d8 dégâts de force et être attirée vers la ligne jusqu'à ce qu'elle soit dans sa zone. Lorsque vous lancez ce sort en utilisant un emplacement de niveau 7 ou supérieur, les dégâts augmentent de 1d8 pour chaque niveau d'emplacement au-dessus du niveau 6. +Spell/&GravityFissureDescription=Vous manifestez un ravin d'énergie gravitationnelle dans une ligne partant de vous et mesurant 18 mètres de long et 1,5 mètre de large. Chaque créature dans cette ligne doit réussir un jet de sauvegarde de Constitution, subissant 8d8 dégâts de force en cas d'échec, ou la moitié de ces dégâts en cas de réussite. Chaque créature à 3 mètres de la ligne mais qui n'en fait pas partie doit réussir un jet de sauvegarde de Constitution ou subir 8d8 dégâts de force et être attirée vers la ligne jusqu'à ce qu'elle soit dans sa zone. Lorsque vous lancez ce sort en utilisant un emplacement de niveau 7 ou supérieur, les dégâts augmentent de 1d8 pour chaque niveau d'emplacement au-dessus du niveau 6. Spell/&GravityFissureTitle=Fissure gravitationnelle Spell/&HeroicInfusionDescription=Vous vous dote d'endurance et de prouesses martiales alimentées par la magie. Jusqu'à la fin du sort, vous ne pouvez pas lancer de sorts et vous obtenez les avantages suivants :\n• Vous gagnez 50 points de vie temporaires. S'il en reste à la fin du sort, ils sont perdus.\n• Vous avez l'avantage sur les jets d'attaque que vous effectuez avec des armes simples et martiales.\n• Lorsque vous touchez une cible avec une attaque d'arme, cette cible subit 2d12 dégâts de force supplémentaires.\n• Vous avez les compétences de classe Guerrier en armure, en armes et en jets de sauvegarde.\n• Vous pouvez attaquer deux fois, au lieu d'une, lorsque vous effectuez l'action Attaquer à votre tour.\nImmédiatement après la fin du sort, vous devez réussir un jet de sauvegarde de Constitution DD 15 ou subir un niveau d'épuisement. Spell/&HeroicInfusionTitle=Transformation de Tenser diff --git a/SolastaUnfinishedBusiness/Translations/it/Spells/Spells06-it.txt b/SolastaUnfinishedBusiness/Translations/it/Spells/Spells06-it.txt index e618838aaf..f91460bd24 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Spells/Spells06-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Spells/Spells06-it.txt @@ -10,7 +10,7 @@ Spell/&FizbanPlatinumShieldDescription=Crei un campo di luce argentata che circo Spell/&FizbanPlatinumShieldTitle=Scudo di platino di Fizban Spell/&FlashFreezeDescription=Tenti di rinchiudere una creatura che puoi vedere entro il raggio d'azione in una prigione di ghiaccio solido. Il bersaglio deve effettuare un tiro salvezza su Destrezza. Se fallisce il tiro salvezza, il bersaglio subisce 10d6 danni da freddo e rimane trattenuto in strati di ghiaccio spesso. Se supera il tiro salvezza, il bersaglio subisce la metà dei danni e non è trattenuto. L'incantesimo può essere utilizzato solo su creature fino a grandi dimensioni. Per evadere, il bersaglio trattenuto può effettuare una prova di Forza come azione contro la CD del tiro salvezza dell'incantesimo. In caso di successo, il bersaglio fugge e non è più trattenuto. Quando lanci questo incantesimo usando uno slot incantesimo di 7° livello o superiore, i danni da freddo aumentano di 2d6 per ogni livello di slot superiore al 6°. Spell/&FlashFreezeTitle=Congelamento rapido -Spell/&GravityFissureDescription=Manifesti un burrone di energia gravitazionale in una linea che parte da te, lunga 60 piedi e larga 5 piedi, e diventa terreno difficile fino all'inizio del tuo turno successivo. Ogni creatura in quella linea deve effettuare un tiro salvezza su Costituzione, subendo 8d8 danni da forza se fallisce il tiro salvezza, o la metà dei danni se lo supera. Ogni creatura entro 10 piedi dalla linea ma non al suo interno deve superare un tiro salvezza su Costituzione o subire 8d8 danni da forza ed essere tirata verso la linea finché non si trova nella sua area. Quando lanci questo incantesimo usando uno slot di 7° livello o superiore, il danno aumenta di 1d8 per ogni livello di slot superiore al 6°. +Spell/&GravityFissureDescription=Manifesti un burrone di energia gravitazionale in una linea che parte da te, lunga 60 piedi e larga 5 piedi. Ogni creatura in quella linea deve effettuare un tiro salvezza su Costituzione, subendo 8d8 danni da forza se fallisce il tiro salvezza, o la metà dei danni se lo supera. Ogni creatura entro 10 piedi dalla linea ma non al suo interno deve superare un tiro salvezza su Costituzione o subire 8d8 danni da forza ed essere tirata verso la linea finché non si trova nella sua area. Quando lanci questo incantesimo usando uno slot di 7° livello o superiore, il danno aumenta di 1d8 per ogni livello di slot superiore al 6°. Spell/&GravityFissureTitle=Fessura di gravità Spell/&HeroicInfusionDescription=Ti doti di resistenza e abilità marziale alimentate dalla magia. Finché l'incantesimo non finisce, non puoi lanciare incantesimi e ottieni i seguenti benefici:\n• Ottieni 50 punti ferita temporanei. Se ne rimangono quando l'incantesimo finisce, vengono persi.\n• Hai vantaggio sui tiri per colpire che effettui con armi semplici e da guerra.\n• Quando colpisci un bersaglio con un attacco con arma, quel bersaglio subisce 2d12 danni da forza extra.\n• Hai le competenze di classe Guerriero in armature, armi e tiri salvezza.\n• Puoi attaccare due volte, invece di una, quando esegui l'azione Attacco nel tuo turno.\nImmediatamente dopo la fine dell'incantesimo, devi superare un tiro salvezza su Costituzione CD 15 o subire un livello di esaurimento. Spell/&HeroicInfusionTitle=La trasformazione di Tenser diff --git a/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells06-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells06-ja.txt index d4585b0961..9d646abbb3 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells06-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Spells/Spells06-ja.txt @@ -10,7 +10,7 @@ Spell/&FizbanPlatinumShieldDescription=範囲内の選択したクリーチャ Spell/&FizbanPlatinumShieldTitle=フィズバンのプラチナシールド Spell/&FlashFreezeDescription=あなたは範囲内に見える生き物を固い氷の牢獄に閉じ込めようとします。ターゲットは器用さセーヴィングスローを行わなければなりません。セーブに失敗すると、ターゲットは 10d6 の冷気ダメージを受け、厚い氷の層に拘束されます。セーブに成功すると、ターゲットは半分のダメージを受け、拘束されなくなります。この呪文は大きいサイズまでのクリーチャーにのみ使用できます。打開するために、拘束されたターゲットはあなたのスペルセーブ難易度に対するアクションとして筋力チェックを行うことができます。成功するとターゲットは逃走し、拘束されなくなります。 7 レベル以上の呪文スロットを使用してこの呪文を唱えると、冷気ダメージは 6 レベル以上のスロット レベルごとに 2d6 増加します。 Spell/&FlashFreezeTitle=フラッシュフリーズ -Spell/&GravityFissureDescription=君自身を起点として長さ 60 フィート、幅 5 フィートの線上に重力エネルギーの峡谷を出現させ、君の次のターンの開始時まで移動困難な地形とする。その線上の各クリーチャーは耐久力セーヴィング スローを行わなければならず、失敗すると 8d8 の力場ダメージを受け、成功すると半分のダメージを受ける。線から 10 フィート以内にいるが線上にいない各クリーチャーは耐久力セーヴィング スローに成功するか、8d8 の力場ダメージを受け、クリーチャーがその領域に入るまで線に向かって引き寄せられる。この呪文を 7 レベル以上のスロットを使用して発動する場合、ダメージは 6 レベルを超えるスロット レベルごとに 1d8 増加する。 +Spell/&GravityFissureDescription=君は、君自身から始まる長さ 60 フィート、幅 5 フィートの線に重力エネルギーの峡谷を出現させる。その線上の各クリーチャーは耐久力セーヴィング スローを行わなければならず、失敗すると 8d8 の力場ダメージを受け、成功すると半分のダメージを受ける。線から 10 フィート以内にいるが線上にいない各クリーチャーは、耐久力セーヴィング スローに成功するか、8d8 の力場ダメージを受け、クリーチャーがその領域に入るまで線に向かって引き寄せられる。この呪文を 7 レベル以上のスロットを使用して発動すると、6 レベルを超えるスロット レベルごとにダメージが 1d8 増加する。 Spell/&GravityFissureTitle=重力亀裂 Spell/&HeroicInfusionDescription=あなたは魔法によって強化された持久力と武勇を自分に与えます。呪文が終了するまで、呪文を唱えることはできませんが、次の利点が得られます:\n• 一時的に 50 ヒット ポイントを獲得します。呪文が終了するときにこれらのいずれかが残っている場合、それらは失われます。\n• 単純な武器と格闘武器を使って行う攻撃ロールでは有利です。\n• 武器攻撃でターゲットを攻撃すると、そのターゲットは次のダメージを受けます。追加の 2d12 フォース ダメージ。\n• ファイター クラスのアーマー、武器、セーヴィング スローの熟練度を持っています。\n• 自分のターンに攻撃アクションを行うと、1 回ではなく 2 回攻撃できます。\n呪文が終了した直後に、難易度 15 の耐久力セーヴィング スローに成功するか、1 レベルの疲労状態に陥る必要があります。 Spell/&HeroicInfusionTitle=テンサーの変身 diff --git a/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells06-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells06-ko.txt index b76ed95508..b3137623bf 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells06-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Spells/Spells06-ko.txt @@ -10,7 +10,7 @@ Spell/&FizbanPlatinumShieldDescription=당신은 범위 내에서 당신이 선 Spell/&FizbanPlatinumShieldTitle=피즈반의 백금 방패 Spell/&FlashFreezeDescription=당신은 범위 내에서 볼 수 있는 생물을 단단한 얼음 감옥에 가두려고 합니다. 대상은 민첩 내성 굴림을 해야 합니다. 저장에 실패하면 대상은 10d6의 냉기 피해를 입고 두꺼운 얼음 층에 갇히게 됩니다. 내성에 성공하면 대상은 절반의 피해를 입고 구속되지 않습니다. 이 주문은 최대 크기의 생물에게만 사용할 수 있습니다. 탈출하기 위해, 제한된 목표는 당신의 주문 내성 DC에 대한 행동으로 힘 체크를 할 수 있습니다. 성공하면 대상은 탈출하고 더 이상 구속되지 않습니다. 7레벨 이상의 주문 슬롯을 사용하여 이 주문을 시전하면 6레벨 이상의 슬롯 레벨마다 냉기 피해가 2d6씩 증가합니다. Spell/&FlashFreezeTitle=플래시 프리즈 -Spell/&GravityFissureDescription=당신은 60피트 길이, 5피트 너비의 중력 에너지 협곡을 당신에게서 시작하여 다음 턴이 시작될 때까지 어려운 지형이 되는 선으로 나타냅니다. 그 선에 있는 각 생물은 체력 구원 굴림을 해야 하며, 실패하면 8d8의 힘 피해를 입거나 성공하면 절반의 피해를 입습니다. 선에서 10피트 이내에 있지만 선 안에 있지 않은 각 생물은 체력 구원 굴림에 성공해야 하며, 실패하면 8d8의 힘 피해를 입고 생물이 그 영역에 들어올 때까지 선으로 끌려갑니다. 7레벨 이상의 슬롯을 사용하여 이 주문을 시전하면 6레벨 이상의 슬롯 레벨마다 피해가 1d8씩 증가합니다. +Spell/&GravityFissureDescription=당신은 길이 60피트, 너비 5피트의 중력 에너지 협곡을 당신에게서 시작하는 선으로 나타냅니다. 그 선에 있는 각 생명체는 체력 구원 굴림을 해야 하며, 실패하면 8d8의 힘 피해를 입거나, 성공하면 절반의 피해를 입습니다. 선에서 10피트 이내에 있지만 선 안에 있지 않은 각 생명체는 체력 구원 굴림에 성공해야 하며, 실패하면 8d8의 힘 피해를 입고 생명체가 그 영역에 들어올 때까지 선으로 끌려갑니다. 7레벨 이상의 슬롯을 사용하여 이 주문을 시전하면, 6레벨 이상의 슬롯 레벨마다 피해가 1d8씩 증가합니다. Spell/&GravityFissureTitle=중력 균열 Spell/&HeroicInfusionDescription=당신은 마법에 힘입어 지구력과 무술의 기량을 자신에게 부여합니다. 주문이 끝날 때까지 주문을 시전할 수 없으며 다음과 같은 이점을 얻습니다.\n• 임시 체력 50점을 얻습니다. 주문이 끝날 때 이들 중 하나라도 남아 있으면 잃게 됩니다.\n• 단순 무기와 군용 무기로 하는 공격 굴림에 이점이 있습니다.\n• 무기 공격으로 대상을 명중하면 해당 대상은 다음과 같은 공격을 받습니다. 추가 2d12 강제 피해.\n• 파이터 클래스 방어구, 무기 및 내성 굴림 능력이 있습니다.\n• 자신의 차례에 공격 행동을 취할 때 한 번이 아닌 두 번 공격할 수 있습니다.\n 주문이 끝난 직후, 당신은 DC 15 헌법 내성 굴림에 성공해야 하며, 그렇지 않으면 한 단계의 탈진을 겪어야 합니다. Spell/&HeroicInfusionTitle=텐서의 변환 diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells06-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells06-pt-BR.txt index 9ed388c993..974cb66de1 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells06-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Spells/Spells06-pt-BR.txt @@ -10,7 +10,7 @@ Spell/&FizbanPlatinumShieldDescription=Você cria um campo de luz prateada que c Spell/&FizbanPlatinumShieldTitle=Escudo de Platina de Fizban Spell/&FlashFreezeDescription=Você tenta prender uma criatura que você pode ver dentro do alcance em uma prisão de gelo sólido. O alvo deve fazer um teste de resistência de Destreza. Em uma falha, o alvo sofre 10d6 de dano de frio e fica contido em camadas de gelo espesso. Em uma resistência bem-sucedida, o alvo sofre metade do dano e não fica contido. A magia só pode ser usada em criaturas de tamanho até grande. Para escapar, o alvo contido pode fazer um teste de Força como uma ação contra sua CD de resistência à magia. Em caso de sucesso, o alvo escapa e não fica mais contido. Quando você conjura esta magia usando um espaço de magia de 7º nível ou superior, o dano de frio aumenta em 2d6 para cada nível de espaço acima do 6º. Spell/&FlashFreezeTitle=Congelamento instantâneo -Spell/&GravityFissureDescription=Você manifesta uma ravina de energia gravitacional em uma linha originada de você que tem 60 pés de comprimento, 5 pés de largura e se torna terreno difícil até o início do seu próximo turno. Cada criatura naquela linha deve fazer um teste de resistência de Constituição, sofrendo 8d8 de dano de força em um teste falho, ou metade do dano em um teste bem-sucedido. Cada criatura a 10 pés da linha, mas não dentro dela, deve ter sucesso em um teste de resistência de Constituição ou sofrer 8d8 de dano de força e ser puxada em direção à linha até que a criatura esteja em sua área. Quando você conjura esta magia usando um slot de 7º nível ou superior, o dano aumenta em 1d8 para cada nível de slot acima do 6º. +Spell/&GravityFissureDescription=Você manifesta uma ravina de energia gravitacional em uma linha originada de você que tem 60 pés de comprimento e 5 pés de largura. Cada criatura naquela linha deve fazer um teste de resistência de Constituição, sofrendo 8d8 de dano de força em um teste falho, ou metade do dano em um teste bem-sucedido. Cada criatura a 10 pés da linha, mas não dentro dela, deve ter sucesso em um teste de resistência de Constituição ou sofrer 8d8 de dano de força e ser puxada em direção à linha até que a criatura esteja em sua área. Quando você conjura esta magia usando um slot de 7º nível ou superior, o dano aumenta em 1d8 para cada nível de slot acima de 6º. Spell/&GravityFissureTitle=Fissura Gravitacional Spell/&HeroicInfusionDescription=Você se dota de resistência e destreza marcial alimentadas por magia. Até que a magia termine, você não pode conjurar magias e ganha os seguintes benefícios:\n• Você ganha 50 pontos de vida temporários. Se algum deles permanecer quando a magia terminar, eles serão perdidos.\n• Você tem vantagem em jogadas de ataque que fizer com armas simples e marciais.\n• Quando você atinge um alvo com um ataque de arma, esse alvo recebe 2d12 de dano de força extra.\n• Você tem as proficiências de armadura, armas e testes de resistência da classe Guerreiro.\n• Você pode atacar duas vezes, em vez de uma, quando realiza a ação Atacar no seu turno.\nImediatamente após o fim da magia, você deve ser bem-sucedido em um teste de resistência de Constituição CD 15 ou sofrer um nível de exaustão. Spell/&HeroicInfusionTitle=Transformação de Tenser diff --git a/SolastaUnfinishedBusiness/Translations/ru/Spells/Cantrips-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Spells/Cantrips-ru.txt index db58f0018a..62c0e20bb3 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Spells/Cantrips-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Spells/Cantrips-ru.txt @@ -29,7 +29,6 @@ Spell/&BoomingBladeDescription=Вы взмахиваете оружием, вы Spell/&BoomingBladeTitle=Громовой клинок Spell/&BurstOfRadianceDescription=Создайте яркую вспышку мерцающего света, наносящую урон всем врагам вокруг вас. Каждое существо, которое вы можете видеть в пределах дистанции, должно преуспеть в спасброске Телосложения, иначе получит 1d6 урона излучением. Spell/&BurstOfRadianceTitle=Слово сияния -Spell/&CreateBonfireDescription=Вы создаете костер на земле, которую вы можете видеть в пределах досягаемости. Пока заклинание не закончится, костер заполняет 5-футовый куб. Любое существо в пространстве костра, когда вы произносите заклинание, должно преуспеть в спасброске Ловкости или получить 1d8 урона от огня. Существо также должно совершить спасбросок, когда оно входит в пространство костра или заканчивает там свой ход. Урон заклинания увеличивается на дополнительный кубик на 5-м, 11-м и 17-м уровнях. Spell/&CreateBonfireDescription=Вы создаёте огонь на поверхности земли в точке, которую можете видеть в пределах дистанции. Пока заклинание действует, огонь занимает область в кубе с длиной ребра 5 футов. Все существа, оказавшиеся в этом пространстве в момент накладывания заклинания, должны преуспеть в спасброске Ловкости, иначе получат 1d8 урона огнём. Существо также должно совершать спасбросок, при перемещении в область действия заклинания или завершении в ней своего хода. Урон заклинания увеличивается на дополнительную кость на 5-м, 11-м и 17-м уровнях. Spell/&CreateBonfireTitle=Сотворение костра Spell/&EnduringStingDescription=Вы вытягиваете жизненные силы одного видимого существа в пределах дистанции. Цель должна преуспеть в спасброске Телосложения, иначе получит 1d4 урона некротической энергией и упадёт ничком. diff --git a/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells06-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells06-ru.txt index 8afde196d5..458835a5fe 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells06-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Spells/Spells06-ru.txt @@ -10,7 +10,7 @@ Spell/&FizbanPlatinumShieldDescription=Вы создаёте поле сереб Spell/&FizbanPlatinumShieldTitle=Платиновый щит Физбана Spell/&FlashFreezeDescription=Вы пытаетесь заключить существо, которое видите в пределах дистанции, в темницу из твёрдого льда. Цель должна совершить спасбросок Ловкости. При провале цель получает 10d6 урона холодом и становится опутанной, покрываясь слоями толстого льда. При успешном спасброске цель получает в два раза меньше урона и не становится опутанной. Заклинание можно применять только к существам вплоть до большого размера. Чтобы освободиться, опутанная цель может действием совершить проверку Силы против Сл спасброска заклинания. При успехе цель освобождается и больше не является опутанной. Когда вы накладываете это заклинание, используя ячейку заклинания 7-го уровня или выше, урон от холода увеличивается на 2d6 за каждый уровень ячейки выше 6-го. Spell/&FlashFreezeTitle=Мгновенная заморозка -Spell/&GravityFissureDescription=Вы создаете червоточину в пространстве, обладающую огромным притяжением. Червоточина исходит от вас на 60 футов в длину и 5 футов в ширину, это пространство становится труднопроходимой местностью до начала вашего следующего хода. Все существа, попавшие в эту линию, должны совершить спасбросок Телосложения, получая 8d8 урона силовым полем при провале и половину этого урона при успехе. Все существа в пределах 10 футов от линии, не находящиеся в ней, должны преуспеть в спасброске Телосложения, иначе получит 8d8 урона силовым полем и притянется по прямой к линии, пока не окажется в её пространстве. Если вы накладываете это заклинание, используя ячейку 7-го уровня или выше, урон увеличивается на 1d8 за каждый уровень выше шестого. +Spell/&GravityFissureDescription=Вы создаете червоточину в пространстве, обладающую огромным притяжением. Червоточина исходит от вас на 60 футов в длину и 5 футов в ширину. Все существа, попавшие в эту линию, должны совершить спасбросок Телосложения, получая 8d8 урона силовым полем при провале и половину этого урона при успехе. Все существа в пределах 10 футов от линии, не находящиеся в ней, должны преуспеть в спасброске Телосложения, иначе получит 8d8 урона силовым полем и притянется по прямой к линии, пока не окажется в её пространстве. Если вы накладываете это заклинание, используя ячейку 7-го уровня или выше, урон увеличивается на 1d8 за каждый уровень выше шестого. Spell/&GravityFissureTitle=Гравитационный разлом Spell/&HeroicInfusionDescription=Вы наделяете себя выносливостью и воинской доблестью, подпитываемыми магией. Пока заклинание не закончится, вы не можете накладывать заклинания, но получаете следующие преимущества:\n• Вы получаете 50 временных хитов. Если какое-либо их количество остаётся, когда заклинание заканчивается, они теряются.\n• Вы совершаете с преимуществом все броски атаки, совершаемые простым или воинским оружием.\n• Когда вы попадаете по цели атакой оружием, она получает дополнительно 2d12 урона силовым полем.\n• Вы получаете владение всеми доспехами, оружием и спасбросками, присущими классу Воина.\n• Если вы в свой ход совершаете действие Атака, вы можете совершить две атаки вместо одной.\nСразу после того, как заклинание оканчивается, вы должны преуспеть в спасброске Телосложения Сл 15, иначе получите одну степень истощения. Spell/&HeroicInfusionTitle=Трансформация Тензера diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells06-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells06-zh-CN.txt index 637198afc7..cd80bf7cbf 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells06-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Spells/Spells06-zh-CN.txt @@ -10,7 +10,7 @@ Spell/&FizbanPlatinumShieldDescription=你创造一道闪着银光的力场, Spell/&FizbanPlatinumShieldTitle=费资本铂金盾 Spell/&FlashFreezeDescription=你试图将一个你能在范围内看到的生物关进坚固的冰牢里。目标必须进行敏捷豁免检定。如果豁免失败,目标会受到 10d6 的冷冻伤害,并被束缚在厚厚的冰层中。成功豁免后,目标将受到一半伤害并且不受束缚。该法术只能对上限为大型体型的生物使用。为了逃脱,被束缚的目标可以一个动作进行一次力量检定,对抗你的法术豁免 DC。成功后,目标将逃脱并不再受到束缚。当你使用 7 环或更高环阶的法术位施放此法术时,每高于 6 环的法术位环阶,冷冻伤害就会增加 2d6。 Spell/&FlashFreezeTitle=急冻术 -Spell/&GravityFissureDescription=你从你身上引出一条长 60 英尺、宽 5 英尺的引力峡谷,这条峡谷在你下一轮开始前会变成一条困难地形。这条峡谷内的每个生物都必须进行体质豁免,豁免失败则受到 8d8 力场伤害,豁免成功则伤害减半。距离这条峡谷 10 英尺以内但不在线内的生物必须通过体质豁免,否则会受到 8d8 力场伤害并被拉向这条峡谷,直到生物进入其区域。当你使用 7 级或更高等级的槽位施放此法术时,每高于 6 级槽位等级,伤害增加 1d8。 +Spell/&GravityFissureDescription=你以你为起点,在一条长 60 英尺、宽 5 英尺的直线上显现出引力能量峡谷。该直线上的每个生物都必须进行体质豁免检定,豁免失败则受到 8d8 力场伤害,豁免成功则伤害减半。该直线 10 英尺范围内但不在该直线上的每个生物都必须通过体质豁免检定,否则将受到 8d8 力场伤害并被拉向该直线,直到该生物进入其区域。当你使用 7 级或更高级别的槽位施放此法术时,每高于 6 级槽位,伤害增加 1d8。 Spell/&GravityFissureTitle=重力裂缝 Spell/&HeroicInfusionDescription=你赋予自己以魔法为燃料的耐力与武艺。在法术结束之前,你无法施展法术,并且你会获得以下好处:\n• 你获得 50 点临时生命值。如果法术结束时有未消耗的部分,则全部消失。\n• 你在使用简单武器和军用武器进行的攻击检定中具有优势。\n• 当你使用武器攻击击中目标时,该目标将受到额外的 2d12 力场伤害。\n• 你获得战士的护甲、武器和豁免熟练项。\n• 当你在自己的回合中采取攻击动作时,你可以攻击两次,而不是一次。\n法术结束后,你必须立即通过 DC 15 的体质豁免检定,否则会承受一级力竭。 Spell/&HeroicInfusionTitle=谭森变形术 From f3732df27c9994c7fd98109c7fea37afee45494e Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sun, 15 Sep 2024 20:04:50 -0700 Subject: [PATCH 211/212] fix save by location collateral case when game starts with a fresh saves folder and setting is on --- SolastaUnfinishedBusiness/Main.cs | 7 +++++-- SolastaUnfinishedBusiness/Models/BootContext.cs | 1 - .../Models/DocumentationContext.cs | 5 ++++- SolastaUnfinishedBusiness/Models/PortraitsContext.cs | 2 +- .../Models/SaveByLocationContext.cs | 12 +++++++----- 5 files changed, 17 insertions(+), 10 deletions(-) diff --git a/SolastaUnfinishedBusiness/Main.cs b/SolastaUnfinishedBusiness/Main.cs index d5ae0cf0a0..e192ddd52d 100644 --- a/SolastaUnfinishedBusiness/Main.cs +++ b/SolastaUnfinishedBusiness/Main.cs @@ -94,6 +94,11 @@ internal static bool Load([NotNull] UnityModManager.ModEntry modEntry) return false; } + EnsureFolderExists(SettingsFolder); + DocumentationContext.EnsureFolderExists(); + PortraitsContext.EnsureFolderExists(); + SaveByLocationContext.EnsureFoldersExist(); + try { Mod = new ModManager(); @@ -131,8 +136,6 @@ internal static bool Load([NotNull] UnityModManager.ModEntry modEntry) internal static void LoadSettingFilenames() { - EnsureFolderExists(SettingsFolder); - SettingsFiles = Directory.GetFiles(SettingsFolder) .Where(x => x.EndsWith(".xml")) .Select(Path.GetFileNameWithoutExtension) diff --git a/SolastaUnfinishedBusiness/Models/BootContext.cs b/SolastaUnfinishedBusiness/Models/BootContext.cs index 17f432b2de..206e5bc637 100644 --- a/SolastaUnfinishedBusiness/Models/BootContext.cs +++ b/SolastaUnfinishedBusiness/Models/BootContext.cs @@ -27,7 +27,6 @@ internal static void Startup() DiagnosticsContext.CacheTaDefinitions(); // Load Portraits, Translations and Resources Locator after - PortraitsContext.Load(); TranslatorContext.Load(); ResourceLocatorContext.Load(); diff --git a/SolastaUnfinishedBusiness/Models/DocumentationContext.cs b/SolastaUnfinishedBusiness/Models/DocumentationContext.cs index b89f96cb5b..13fdf0c464 100644 --- a/SolastaUnfinishedBusiness/Models/DocumentationContext.cs +++ b/SolastaUnfinishedBusiness/Models/DocumentationContext.cs @@ -14,11 +14,14 @@ namespace SolastaUnfinishedBusiness.Models; internal static class DocumentationContext { - internal static void DumpDocumentation() + internal static void EnsureFolderExists() { Main.EnsureFolderExists($"{Main.ModFolder}/Documentation"); Main.EnsureFolderExists($"{Main.ModFolder}/Documentation/Monsters"); + } + internal static void DumpDocumentation() + { foreach (var characterFamilyDefinition in DatabaseRepository.GetDatabase() .Where(x => x.Name is not ("Giant_Rugan" or "Ooze") && diff --git a/SolastaUnfinishedBusiness/Models/PortraitsContext.cs b/SolastaUnfinishedBusiness/Models/PortraitsContext.cs index a5d3c183a1..bc8634b198 100644 --- a/SolastaUnfinishedBusiness/Models/PortraitsContext.cs +++ b/SolastaUnfinishedBusiness/Models/PortraitsContext.cs @@ -17,7 +17,7 @@ public static class PortraitsContext private static readonly string PersonalFolder = $"{PortraitsFolder}/Personal"; private static readonly string MonstersFolder = $"{PortraitsFolder}/Monsters"; - internal static void Load() + internal static void EnsureFolderExists() { Main.EnsureFolderExists(PortraitsFolder); Main.EnsureFolderExists(PreGenFolder); diff --git a/SolastaUnfinishedBusiness/Models/SaveByLocationContext.cs b/SolastaUnfinishedBusiness/Models/SaveByLocationContext.cs index cfe898532e..b0a149c318 100644 --- a/SolastaUnfinishedBusiness/Models/SaveByLocationContext.cs +++ b/SolastaUnfinishedBusiness/Models/SaveByLocationContext.cs @@ -33,6 +33,13 @@ internal static class SaveByLocationContext internal static CustomDropDown Dropdown { get; private set; } + internal static void EnsureFoldersExist() + { + Main.EnsureFolderExists(OfficialSaveGameDirectory); + Main.EnsureFolderExists(LocationSaveGameDirectory); + Main.EnsureFolderExists(CampaignSaveGameDirectory); + } + private static List GetAllSavePlaces() { // Find the most recently touched save file and select the correct location/campaign for that save @@ -80,11 +87,6 @@ internal static void LateLoad() return; } - // Ensure folders exist - Main.EnsureFolderExists(OfficialSaveGameDirectory); - Main.EnsureFolderExists(LocationSaveGameDirectory); - Main.EnsureFolderExists(CampaignSaveGameDirectory); - // Find the most recently touched save file and select the correct location/campaign for that save var place = GetMostRecentPlace(); From 0cd7464a83e83fb4d0ee1e6c9676f2b2f01af051 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sun, 15 Sep 2024 21:40:23 -0700 Subject: [PATCH 212/212] prepare for `1.5.97.30` release --- SolastaUnfinishedBusiness/Info.json | 2 +- SolastaUnfinishedBusiness/Settings/empty.xml | 8 +++----- .../Settings/zappastuff.xml | 19 +++++++++++++++++-- .../SolastaUnfinishedBusiness.csproj | 2 +- 4 files changed, 22 insertions(+), 9 deletions(-) diff --git a/SolastaUnfinishedBusiness/Info.json b/SolastaUnfinishedBusiness/Info.json index 5dafd70004..3ff9903980 100644 --- a/SolastaUnfinishedBusiness/Info.json +++ b/SolastaUnfinishedBusiness/Info.json @@ -1,7 +1,7 @@ { "Id": "SolastaUnfinishedBusiness", "DisplayName": "[Un] Finished Business", - "Version": "1.5.97.29", + "Version": "1.5.97.30", "GameVersion": "1.5.97", "ManagerVersion": "0.24.0", "AssemblyName": "SolastaUnfinishedBusiness.dll", diff --git a/SolastaUnfinishedBusiness/Settings/empty.xml b/SolastaUnfinishedBusiness/Settings/empty.xml index 575d1f76ed..ba04104685 100644 --- a/SolastaUnfinishedBusiness/Settings/empty.xml +++ b/SolastaUnfinishedBusiness/Settings/empty.xml @@ -2,7 +2,7 @@ 1 0 - 4 + 0 false false false @@ -423,6 +423,8 @@ false false 2 + false + false false false @@ -1108,8 +1110,4 @@ false false false - 0 - false - false - false \ No newline at end of file diff --git a/SolastaUnfinishedBusiness/Settings/zappastuff.xml b/SolastaUnfinishedBusiness/Settings/zappastuff.xml index 056554803e..30f892cefc 100644 --- a/SolastaUnfinishedBusiness/Settings/zappastuff.xml +++ b/SolastaUnfinishedBusiness/Settings/zappastuff.xml @@ -401,6 +401,7 @@ false false false + false false true false @@ -447,6 +448,7 @@ true true true + false true true true @@ -518,6 +520,8 @@ true true 2 + false + true false true @@ -526,6 +530,8 @@ true false true + false + true true false true @@ -538,7 +544,6 @@ 0 0 true - true true false true @@ -1349,6 +1354,7 @@ PsychicLance EmpoweredKnowledge SynapticStatic + Glibness MindBlank Foresight PowerWordHeal @@ -1394,6 +1400,7 @@ AcidClaws + CreateBonfire AirBlast Infestation PrimalSavagery @@ -1433,6 +1440,7 @@ BoomingBlade + CreateBonfire ResonatingStrike LightningLure SunlightBlade @@ -1517,6 +1525,7 @@ Foresight BladeWard BoomingBlade + CreateBonfire ResonatingStrike AirBlast IlluminatingSphere @@ -1592,6 +1601,7 @@ EmpoweredKnowledge BladeWard BoomingBlade + CreateBonfire ResonatingStrike Infestation LightningLure @@ -1627,6 +1637,7 @@ Scatter MysticalCloak CrownOfStars + Glibness MaddeningDarkness Foresight PowerWordKill @@ -1651,6 +1662,7 @@ BladeWard BoomingBlade + CreateBonfire ResonatingStrike AirBlast IlluminatingSphere @@ -1714,6 +1726,7 @@ SynapticStatic Telekinesis FizbanPlatinumShield + GravityFissure PoisonWave RingOfBlades Scatter @@ -1980,8 +1993,10 @@ true true true - false false + true + false + false false en false diff --git a/SolastaUnfinishedBusiness/SolastaUnfinishedBusiness.csproj b/SolastaUnfinishedBusiness/SolastaUnfinishedBusiness.csproj index 71f31a2ab7..025d9eb5db 100644 --- a/SolastaUnfinishedBusiness/SolastaUnfinishedBusiness.csproj +++ b/SolastaUnfinishedBusiness/SolastaUnfinishedBusiness.csproj @@ -3,7 +3,7 @@ 12 net48 - 1.5.97.29 + 1.5.97.30 https://github.com/SolastaMods/SolastaUnfinishedBusiness git Debug Install;Release Install