diff --git a/Diagnostics/CE-Definitions-GuiPresentation-InvalidSyntaxTranslation-en.txt b/Diagnostics/CE-Definitions-GuiPresentation-InvalidSyntaxTranslation-en.txt
index fde0f010cf..aaf529b9d8 100644
--- a/Diagnostics/CE-Definitions-GuiPresentation-InvalidSyntaxTranslation-en.txt
+++ b/Diagnostics/CE-Definitions-GuiPresentation-InvalidSyntaxTranslation-en.txt
@@ -68,6 +68,7 @@ AttributeModifierDomainSmithReinforceArmor1 Description='This armor has been rei
AttributeModifierDomainSmithReinforceArmor2 Description='This armor has been reinforced providing an additional +2 AC.'.
AttributeModifierDomainSmithReinforceArmor3 Description='This armor has been reinforced providing an additional +3 AC.'.
AttributeModifierDomainSmithReinforceArmor4 Description='This armor has been reinforced providing an additional +4 AC.'.
+BoomingBlade Description='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.'.
CastSpellFeatMagicInitiateBard Title='Initiate'.
CastSpellFeatMagicInitiateBard Description='You learn two cantrips of your choice from the Bard spell list. In addition, choose one 1st-level spell to learn from that same list. Using this feat, you can cast the spell once at its lowest level, and you must finish a long rest before you can cast it in this way again.'.
CastSpellFeatMagicInitiateCleric Title='Initiate'.
@@ -271,7 +272,6 @@ ConditionRangerWildMasterBeastCompanionAttackRoll Description='-'.
ConditionRangerWildMasterBeastCompanionDamageRoll Description='-'.
ConditionRangerWildMasterBeastCompanionHitPoints Description='-'.
ConditionRescueTheDying Description='-'.
-ConditionResonatingStrike Description='-'.
ConditionRingOfBlades Description='-'.
ConditionRogueCunningStrikeDisarmed Description='-'.
ConditionRogueDeviousStrikeKnockOut Description='-'.
@@ -1108,6 +1108,7 @@ PointPool4BonusFeats Title='4 Bonus Feats'.
PointPool4BonusFeats Description='Select 4 additional feats for your character.'.
PointPool5BonusFeats Title='5 Bonus Feats'.
PointPool5BonusFeats Description='Select 5 additional feats for your character.'.
+PowerBoomingBladeDamage Description='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.'.
PowerChaosBoltDamageAcid Title='Acid Damage'.
PowerChaosBoltDamageAcid Description='Use Acid Damage damage.'.
PowerChaosBoltDamageCold Title='Cold Damage'.
@@ -1481,6 +1482,7 @@ PowerRangerWildMasterSummonBeastCompanionKindredSpiritEagle Title='Summon Badlan
PowerRangerWildMasterSummonBeastCompanionKindredSpiritEagle Description='A Badlands Eagle bonded to a Ranger.'.
PowerRangerWildMasterSummonBeastCompanionKindredSpiritWolf Title='Summon Grayback Wolf'.
PowerRangerWildMasterSummonBeastCompanionKindredSpiritWolf Description='A Grayback Wolf bonded to a Ranger.'.
+PowerResonatingStrike Description='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.'.
PowerSharedPoolCelestialHealingLight1 Title='Healing Light 1D6'.
PowerSharedPoolCelestialHealingLight1 Description='As a bonus action, you can heal one creature you can see within 60 feet of you, spending 1 dice from the pool. Roll the dice you spend, add them together, and restore a number of hit points equal to the total. Your pool regains all expended dice when you finish a long rest.'.
PowerSharedPoolCelestialHealingLight2 Title='Healing Light 2D6'.
@@ -1528,6 +1530,7 @@ PowerWayOfTheDiscordanceBurstOfDisharmony8 Title='Burst of Disharmony [8 Ki]'.
PowerWayOfTheDiscordanceBurstOfDisharmony8 Description='Spend 8 Ki Point to deal 9d6 necrotic damage.'.
PowerWayOfTheDiscordanceBurstOfDisharmony9 Title='Burst of Disharmony [9 Ki]'.
PowerWayOfTheDiscordanceBurstOfDisharmony9 Description='Spend 9 Ki Point to deal 10d6 necrotic damage.'.
+ResonatingStrike Description='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.'.
SavingThrowAffinityWayOfTheDiscordanceTurmoil Title='Turmoil'.
SpellPowerChaosBoltDamageAcid Title='Acid Damage'.
SpellPowerChaosBoltDamageAcid Description='Use Acid Damage damage.'.
@@ -1903,3 +1906,4 @@ SpellStoringWandOfWitchBolt Title='Wand of Witch Bolt'.
SpellStoringWandOfWitchBolt Description='This wand allows casting the Witch Bolt spell using spell casting stats of the Artificer who created it.'.
SpellStoringWandOfWitherAndBloom Title='Wand of Wither and Bloom'.
SpellStoringWandOfWitherAndBloom Description='This wand allows casting the Wither and Bloom spell using spell casting stats of the Artificer who created it.'.
+SunlightBlade Description='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.'.
diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ActionDefinition/Quickened.json b/Diagnostics/UnfinishedBusinessBlueprints/ActionDefinition/CastQuickened.json
similarity index 62%
rename from Diagnostics/UnfinishedBusinessBlueprints/ActionDefinition/Quickened.json
rename to Diagnostics/UnfinishedBusinessBlueprints/ActionDefinition/CastQuickened.json
index 2a3bf071e6..679cfd69a8 100644
--- a/Diagnostics/UnfinishedBusinessBlueprints/ActionDefinition/Quickened.json
+++ b/Diagnostics/UnfinishedBusinessBlueprints/ActionDefinition/CastQuickened.json
@@ -1,24 +1,24 @@
{
"$type": "ActionDefinition, Assembly-CSharp",
- "id": 9068,
- "actionType": "NoCost",
+ "id": 9069,
+ "actionType": "Bonus",
"actionScope": "Battle",
- "pairedActionId": "NoAction",
+ "pairedActionId": "CastMain",
"usesPerTurn": -1,
- "classNameOverride": "",
- "requiresAuthorization": true,
- "stealthBreakerBehavior": "None",
- "feedbackOnHoverType": "None",
+ "classNameOverride": "CastSpell",
+ "requiresAuthorization": false,
+ "stealthBreakerBehavior": "RollIfTargets",
+ "feedbackOnHoverType": "LineOfSight",
"iterativeTargeting": false,
"canTriggerBattle": false,
- "parameter": "None",
+ "parameter": "SelectSpell",
"formType": "Large",
"overrideGuiActionType": false,
"overridenGuiActionType": "Main",
"focusCameraOnAction": true,
"addedConditionName": "",
"removedConditionName": "",
- "preventsSerialization": false,
+ "preventsSerialization": true,
"baseActionForFailureTooltips": null,
"activatedPower": null,
"displayPowerTooltip": false,
@@ -29,13 +29,26 @@
"targetType": "Sphere",
"targetParameter": 1,
"matchingCondition": "",
- "particlePrefab": null,
- "soundEvent": null,
+ "particlePrefab": {
+ "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables",
+ "m_AssetGUID": "",
+ "m_SubObjectName": "",
+ "m_SubObjectType": ""
+ },
+ "soundEvent": {
+ "$type": "AK.Wwise.Event, AK.Wwise.Unity.API.WwiseTypes",
+ "WwiseObjectReference": null,
+ "idInternal": 0,
+ "valueGuidInternal": {
+ "$type": "System.Byte[], mscorlib",
+ "$value": ""
+ }
+ },
"guiPresentation": {
"$type": "GuiPresentation, Assembly-CSharp",
"hidden": false,
"title": "Rules/&MetamagicOptionQuickenedSpellTitle",
- "description": "Rules/&MetamagicOptionQuickenedSpellDescription",
+ "description": "Action/&CastQuickenedDescription",
"spriteReference": {
"$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables",
"m_AssetGUID": "944eb32f28b68144283fab27de377493",
@@ -55,7 +68,7 @@
"usedInValleyDLC": false
},
"contentCopyright": "UserContent",
- "guid": "eb19933b-6209-5087-a127-16978d24656d",
+ "guid": "f49577d4-6ad5-543c-874a-e7b9177150f0",
"contentPack": 9999,
- "name": "Quickened"
+ "name": "CastQuickened"
}
\ No newline at end of file
diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ActionDefinition/WildSurgeReroll.json b/Diagnostics/UnfinishedBusinessBlueprints/ActionDefinition/WildSurgeReroll.json
new file mode 100644
index 0000000000..0bad7059dd
--- /dev/null
+++ b/Diagnostics/UnfinishedBusinessBlueprints/ActionDefinition/WildSurgeReroll.json
@@ -0,0 +1,74 @@
+{
+ "$type": "ActionDefinition, Assembly-CSharp",
+ "id": 9068,
+ "actionType": "Bonus",
+ "actionScope": "All",
+ "pairedActionId": "NoAction",
+ "usesPerTurn": -1,
+ "classNameOverride": "UsePower",
+ "requiresAuthorization": true,
+ "stealthBreakerBehavior": "None",
+ "feedbackOnHoverType": "None",
+ "iterativeTargeting": false,
+ "canTriggerBattle": false,
+ "parameter": "ActivatePower",
+ "formType": "Large",
+ "overrideGuiActionType": false,
+ "overridenGuiActionType": "Main",
+ "focusCameraOnAction": false,
+ "addedConditionName": "",
+ "removedConditionName": "",
+ "preventsSerialization": false,
+ "baseActionForFailureTooltips": null,
+ "activatedPower": "Definition:PowerPathOfTheWildMagicWildSurgeReroll:011775eb-afc7-5751-bc38-e62ce6abfbc5",
+ "displayPowerTooltip": true,
+ "dieType": "D10",
+ "abilityScore": "Dexterity",
+ "addLevel": false,
+ "maxCells": 1,
+ "targetType": "Sphere",
+ "targetParameter": 1,
+ "matchingCondition": "",
+ "particlePrefab": {
+ "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables",
+ "m_AssetGUID": "",
+ "m_SubObjectName": "",
+ "m_SubObjectType": ""
+ },
+ "soundEvent": {
+ "$type": "AK.Wwise.Event, AK.Wwise.Unity.API.WwiseTypes",
+ "WwiseObjectReference": null,
+ "idInternal": 0,
+ "valueGuidInternal": {
+ "$type": "System.Byte[], mscorlib",
+ "$value": ""
+ }
+ },
+ "guiPresentation": {
+ "$type": "GuiPresentation, Assembly-CSharp",
+ "hidden": false,
+ "title": "Feature/&PowerPathOfTheWildMagicWildSurgeRerollTitle",
+ "description": "Feature/&PowerPathOfTheWildMagicWildSurgeRerollDescription",
+ "spriteReference": {
+ "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables",
+ "m_AssetGUID": "f039effbc135454c9bb55de2851472b1",
+ "m_SubObjectName": "MetamagicToggle",
+ "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": "561cfafb-7363-5e70-b035-ced4429fdebd",
+ "contentPack": 9999,
+ "name": "WildSurgeReroll"
+}
\ No newline at end of file
diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ActionDefinition/ZenShotToggle.json b/Diagnostics/UnfinishedBusinessBlueprints/ActionDefinition/ZenShotToggle.json
index 41515f51f8..95b4ef8a04 100644
--- a/Diagnostics/UnfinishedBusinessBlueprints/ActionDefinition/ZenShotToggle.json
+++ b/Diagnostics/UnfinishedBusinessBlueprints/ActionDefinition/ZenShotToggle.json
@@ -1,6 +1,6 @@
{
"$type": "ActionDefinition, Assembly-CSharp",
- "id": 9069,
+ "id": 9070,
"actionType": "NoCost",
"actionScope": "All",
"pairedActionId": "NoAction",
diff --git a/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt b/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt
index fcd9c42268..652fed9039 100644
--- a/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt
+++ b/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt
@@ -25,6 +25,7 @@ CastInvocationBonus ActionDefinition ActionDefinition f2d189c0-5e0a-5a69-9ace-b4
CastInvocationNoCost ActionDefinition ActionDefinition 0a4870d5-055f-5c2a-a6bd-e9529bb4a963
CastPlaneMagicBonus ActionDefinition ActionDefinition c02d5cad-8d69-5b88-8b98-790acbbca5b9
CastPlaneMagicMain ActionDefinition ActionDefinition 77bc881a-c83d-5817-a1b8-b30a01442dfd
+CastQuickened ActionDefinition ActionDefinition f49577d4-6ad5-543c-874a-e7b9177150f0
CombatRageStart ActionDefinition ActionDefinition 9206ca7c-6ae0-59f1-8f28-ffd769a921d9
CombatWildShape ActionDefinition ActionDefinition 24ead3d3-6347-5c8b-99b0-c28850ea83ea
CompellingStrikeToggle ActionDefinition ActionDefinition 0fc75ec8-58df-53ea-98a8-79e9287b8fd5
@@ -54,7 +55,6 @@ PowerSurgeToggle ActionDefinition ActionDefinition 374d1053-67f3-5302-b464-e47a8
PressTheAdvantageToggle ActionDefinition ActionDefinition 73ab67e7-6aa3-565a-a86a-acc4a62094f5
PrioritizeAction ActionDefinition ActionDefinition 118b1701-a7f2-509d-9ce2-90050c30e17c
PushedCustom ActionDefinition ActionDefinition bfbd8373-389e-558c-8c4b-d20700c78ec2
-Quickened ActionDefinition ActionDefinition eb19933b-6209-5087-a127-16978d24656d
SupremeWillToggle ActionDefinition ActionDefinition dbd5c37d-30a8-59a5-a54f-6ccafd2289a0
TacticianGambitBonus ActionDefinition ActionDefinition b1ef155a-7411-575e-8e44-7250ed15ffa4
TacticianGambitMain ActionDefinition ActionDefinition e43aa2c6-cefa-5fb6-af89-a4301acd224c
@@ -65,6 +65,7 @@ TraditionOpenHandQuiveringPalmToggle ActionDefinition ActionDefinition 3ff38f3d-
WildlingFeralAgility ActionDefinition ActionDefinition 7602b2b6-ee3b-5c99-bb6a-5c6fe3d82a40
WildSurgeBolt ActionDefinition ActionDefinition 20bc7bf1-65b4-5848-bace-96a3980150e0
WildSurgeBoltFree ActionDefinition ActionDefinition 2399cdc2-eada-53fd-aba8-62a265a3fce9
+WildSurgeReroll ActionDefinition ActionDefinition 561cfafb-7363-5e70-b035-ced4429fdebd
WildSurgeSummon ActionDefinition ActionDefinition 3937a3f5-5a6e-5d66-b588-e7dac29d563f
WildSurgeSummonFree ActionDefinition ActionDefinition 572d0e56-f959-553f-b434-21ae08da910c
WildSurgeTeleport ActionDefinition ActionDefinition 71b8cdd2-551c-5014-9828-ac1fbb32766d
@@ -631,7 +632,6 @@ ConditionBlindedBySleetStorm ConditionDefinition ConditionDefinition b3142408-c8
ConditionBlindedByStinkingCloud ConditionDefinition ConditionDefinition cbe1c74b-902f-55cf-95e4-6aa2dc62cf14
ConditionBlindingSmite ConditionDefinition ConditionDefinition 2c93801f-485a-5dde-b448-a94fadf31253
ConditionBoomingBlade ConditionDefinition ConditionDefinition b28052a9-3d74-50f4-8363-8b1a2e848289
-ConditionBoomingBladeMarked ConditionDefinition ConditionDefinition 69813f6c-ceca-5c5a-a7ef-7975ff227b50
ConditionBoomingBladeSheathed ConditionDefinition ConditionDefinition faf795f2-d67c-5e4d-a072-bfd6cc4be447
ConditionBoomingStepExplode ConditionDefinition ConditionDefinition 7ca1af35-0aa4-50e1-b647-7404766a5439
ConditionBorrowedKnowledgeAcrobatics ConditionDefinition ConditionDefinition 40404fe3-7281-5b1a-b308-5a5a5b7ad56b
@@ -1036,6 +1036,7 @@ ConditionPathOfTheWildMagicBolsteringMagicSpell1 ConditionDefinition ConditionDe
ConditionPathOfTheWildMagicBolsteringMagicSpell2 ConditionDefinition ConditionDefinition d191a3db-358d-5ccc-9338-2a9a1b7c7318
ConditionPathOfTheWildMagicBolsteringMagicSpell3 ConditionDefinition ConditionDefinition 6021ab50-0827-5742-9eda-e79317477671
ConditionPathOfTheWildMagicPreventAction ConditionDefinition ConditionDefinition b085e32a-439d-5edd-937f-2b0b25eecf36
+ConditionPathOfTheWildMagicReroll ConditionDefinition ConditionDefinition 399723d2-af57-507b-8b51-1906c61182d5
ConditionPathOfTheWildMagicUnstableBacklash ConditionDefinition ConditionDefinition 4ebd5e95-2cb5-5dbd-a445-24b808b71e4a
ConditionPathOfTheWildMagicWildSurgeAura ConditionDefinition ConditionDefinition b329237c-004b-5969-9433-f73610bb5852
ConditionPathOfTheWildMagicWildSurgeBolt ConditionDefinition ConditionDefinition 704169f3-8ab4-56ca-a674-25bb7343e247
@@ -1177,7 +1178,6 @@ 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
-ConditionSunlightBladeMarked ConditionDefinition ConditionDefinition 7f19eac4-e539-5805-ae41-40dcda6d3b23
ConditionSynapticStatic ConditionDefinition ConditionDefinition 0e14b879-1475-52c8-843b-429d5ee6bc8a
ConditionTaunted ConditionDefinition ConditionDefinition 4684284a-a3b2-54f9-9b40-0badf8e95081
ConditionTaunter ConditionDefinition ConditionDefinition 44ef4a88-e18c-5b4f-862b-0cf1ed14b71e
@@ -1626,6 +1626,7 @@ ActionAffinityPathOfTheSpiritsHonedAnimalAspectsWolf FeatureDefinitionActionAffi
ActionAffinityPathOfTheWildMagicBolt FeatureDefinitionActionAffinity FeatureDefinition 37e40dc0-40ad-5d10-8bfb-ea01beda1532
ActionAffinityPathOfTheWildMagicBoltFree FeatureDefinitionActionAffinity FeatureDefinition 4acb3741-8891-5758-9246-c32b87021d87
ActionAffinityPathOfTheWildMagicPreventAction FeatureDefinitionActionAffinity FeatureDefinition df9c4d34-d0c1-531f-af70-48349c04f872
+ActionAffinityPathOfTheWildMagicReroll FeatureDefinitionActionAffinity FeatureDefinition 6a0d4f99-9615-555d-85a4-630bfc0562eb
ActionAffinityPathOfTheWildMagicSummon FeatureDefinitionActionAffinity FeatureDefinition 6e503d92-dcc4-53df-8b67-a8ee02e5fd0b
ActionAffinityPathOfTheWildMagicSummonFree FeatureDefinitionActionAffinity FeatureDefinition c6fd9fc3-4f86-5532-b89f-638fc24da119
ActionAffinityPathOfTheWildMagicTeleport FeatureDefinitionActionAffinity FeatureDefinition 4e317955-9e8c-59cb-b1e6-a579feed847f
@@ -1644,7 +1645,7 @@ ActionAffinityRangerWildMasterBeastCompanionDisengageMain FeatureDefinitionActio
ActionAffinityRogueDeviousStrikeDazed FeatureDefinitionActionAffinity FeatureDefinition 4acf5836-6199-5c3c-8686-7d2b1ba9858f
ActionAffinityRogueDeviousStrikeDazedOnlyMovement FeatureDefinitionActionAffinity FeatureDefinition 287a07de-dab8-5761-9d93-cf44c7f4ed60
ActionAffinityRoguishDuelistSwirlingDance FeatureDefinitionActionAffinity FeatureDefinition 2fc02396-1a32-57a7-a7bd-63a427dd840a
-ActionAffinitySorcererQuickened FeatureDefinitionActionAffinity FeatureDefinition 38bb8988-a558-5c0c-8145-02d893f70586
+ActionAffinitySorcererQuickened FeatureDefinition FeatureDefinition 38bb8988-a558-5c0c-8145-02d893f70586
ActionAffinitySorcerousPsionMindSculpt FeatureDefinitionActionAffinity FeatureDefinition b44a69ae-520c-5492-ab2b-307fcbd5fc12
ActionAffinitySorcerousPsionSupremeWill FeatureDefinitionActionAffinity FeatureDefinition 9f270f78-1a1d-5c51-94bf-0d59799b2a98
ActionAffinitySpellShieldRangedDefense FeatureDefinitionPower FeatureDefinition cc7a8cde-d4d4-5b3b-bba0-78c87c1f0489
@@ -1674,7 +1675,6 @@ AdditionalActionRangerGloomStalkerDreadAmbusherMain FeatureDefinitionAdditionalA
AdditionalActionRavenScionKillingSpree FeatureDefinitionAdditionalAction FeatureDefinition db19cd06-511d-5598-93a9-2914efb3ae67
AdditionalActionRoguishBladeCallerBladeSurge FeatureDefinitionAdditionalAction FeatureDefinition 926805ab-e274-5f8d-9aab-746d51acbe30
AdditionalActionRoguishDarkweaverDarkAssault FeatureDefinitionAdditionalAction FeatureDefinition 1e2433eb-cfff-5a10-9e19-2f6a31eb0610
-AdditionalActionSorcererQuickenedCastMain FeatureDefinitionAdditionalAction FeatureDefinition 5aaab60e-6ab6-5d5d-b47d-f3a265133a7c
AdditionalDamageArcaneFighterBonusWeapon FeatureDefinitionAdditionalDamage FeatureDefinition 173ff646-05c7-5827-b06c-940b98f046d0
AdditionalDamageArcanistArcaneDetonation FeatureDefinitionAdditionalDamage FeatureDefinition 911c2325-0931-5f7c-bc64-e4b4dc92ee93
AdditionalDamageArcanistArcaneDetonationUpgrade FeatureDefinition FeatureDefinition 4d45788b-57e8-58eb-8f14-1ee97ae6d93a
@@ -2647,6 +2647,7 @@ FeatureSetWayOfTheDragonFury FeatureDefinitionFeatureSet FeatureDefinition af962
FeatureSetWayOfTheStormSoulEyeOfTheStorm FeatureDefinitionFeatureSet FeatureDefinition a5f1e36a-8f82-5e98-99e1-4711b6dd9ce2
FeatureSetWayOfTheStormSoulLightningWarrior FeatureDefinitionFeatureSet FeatureDefinition 0d28ebfa-b5ac-5055-9749-eb9cd158e724
FeatureSetWildlingAbilityScoreIncrease FeatureDefinitionFeatureSet FeatureDefinition c1ca36f2-7125-5509-8e15-38dae4ae403c
+FeatureShadowBlade FeatureDefinition FeatureDefinition aa9a0c6a-22d4-5f5a-b9c6-0bc354dd70f3
FeatureSorcererMagicalGuidance FeatureDefinition FeatureDefinition 7ead2f7d-4077-52c2-bbe3-6b2912e07a20
FeatureSorcerousWildMagicSpellBombardment FeatureDefinition FeatureDefinition 836685ef-d8b3-5642-bb4e-a52cb99a2afa
FeatureTacticianGambitDieSizeD10 FeatureDefinition FeatureDefinition 200658b7-db0d-5eec-ba50-4203fa3e9618
@@ -3679,6 +3680,7 @@ PowerPathOfTheWildMagicWildSurgeBolt FeatureDefinitionPowerSharedPool FeatureDef
PowerPathOfTheWildMagicWildSurgeDrain FeatureDefinitionPowerSharedPool FeatureDefinition 3407693e-4bb3-5c3a-be53-b3c2e3fd4c65
PowerPathOfTheWildMagicWildSurgeGrowth FeatureDefinitionPowerSharedPool FeatureDefinition 04179a05-b274-53a3-9718-1be7ef880b24
PowerPathOfTheWildMagicWildSurgePool FeatureDefinitionPower FeatureDefinition c4efb3a8-d5a4-5221-bc44-080144a4194e
+PowerPathOfTheWildMagicWildSurgeReroll FeatureDefinitionPower FeatureDefinition 011775eb-afc7-5751-bc38-e62ce6abfbc5
PowerPathOfTheWildMagicWildSurgeRetribution FeatureDefinitionPowerSharedPool FeatureDefinition d3d4eaa6-87c4-5764-963b-12ea235cff02
PowerPathOfTheWildMagicWildSurgeSummon FeatureDefinitionPowerSharedPool FeatureDefinition 73f4938b-4a09-5a0f-9491-a3e9c0cb1ec3
PowerPathOfTheWildMagicWildSurgeTeleport FeatureDefinitionPowerSharedPool FeatureDefinition 749bb41a-afda-5873-a883-d2ad31e9c578
@@ -4274,6 +4276,7 @@ ActionAffinityPathOfTheSpiritsHonedAnimalAspectsWolf FeatureDefinitionActionAffi
ActionAffinityPathOfTheWildMagicBolt FeatureDefinitionActionAffinity FeatureDefinitionActionAffinity 37e40dc0-40ad-5d10-8bfb-ea01beda1532
ActionAffinityPathOfTheWildMagicBoltFree FeatureDefinitionActionAffinity FeatureDefinitionActionAffinity 4acb3741-8891-5758-9246-c32b87021d87
ActionAffinityPathOfTheWildMagicPreventAction FeatureDefinitionActionAffinity FeatureDefinitionActionAffinity df9c4d34-d0c1-531f-af70-48349c04f872
+ActionAffinityPathOfTheWildMagicReroll FeatureDefinitionActionAffinity FeatureDefinitionActionAffinity 6a0d4f99-9615-555d-85a4-630bfc0562eb
ActionAffinityPathOfTheWildMagicSummon FeatureDefinitionActionAffinity FeatureDefinitionActionAffinity 6e503d92-dcc4-53df-8b67-a8ee02e5fd0b
ActionAffinityPathOfTheWildMagicSummonFree FeatureDefinitionActionAffinity FeatureDefinitionActionAffinity c6fd9fc3-4f86-5532-b89f-638fc24da119
ActionAffinityPathOfTheWildMagicTeleport FeatureDefinitionActionAffinity FeatureDefinitionActionAffinity 4e317955-9e8c-59cb-b1e6-a579feed847f
@@ -4292,7 +4295,6 @@ ActionAffinityRangerWildMasterBeastCompanionDisengageMain FeatureDefinitionActio
ActionAffinityRogueDeviousStrikeDazed FeatureDefinitionActionAffinity FeatureDefinitionActionAffinity 4acf5836-6199-5c3c-8686-7d2b1ba9858f
ActionAffinityRogueDeviousStrikeDazedOnlyMovement FeatureDefinitionActionAffinity FeatureDefinitionActionAffinity 287a07de-dab8-5761-9d93-cf44c7f4ed60
ActionAffinityRoguishDuelistSwirlingDance FeatureDefinitionActionAffinity FeatureDefinitionActionAffinity 2fc02396-1a32-57a7-a7bd-63a427dd840a
-ActionAffinitySorcererQuickened FeatureDefinitionActionAffinity FeatureDefinitionActionAffinity 38bb8988-a558-5c0c-8145-02d893f70586
ActionAffinitySorcerousPsionMindSculpt FeatureDefinitionActionAffinity FeatureDefinitionActionAffinity b44a69ae-520c-5492-ab2b-307fcbd5fc12
ActionAffinitySorcerousPsionSupremeWill FeatureDefinitionActionAffinity FeatureDefinitionActionAffinity 9f270f78-1a1d-5c51-94bf-0d59799b2a98
ActionAffinityStaggeringSmite FeatureDefinitionActionAffinity FeatureDefinitionActionAffinity f087f049-96dd-5932-8401-e58c194ea1cb
@@ -4319,7 +4321,6 @@ AdditionalActionRangerGloomStalkerDreadAmbusherMain FeatureDefinitionAdditionalA
AdditionalActionRavenScionKillingSpree FeatureDefinitionAdditionalAction FeatureDefinitionAdditionalAction db19cd06-511d-5598-93a9-2914efb3ae67
AdditionalActionRoguishBladeCallerBladeSurge FeatureDefinitionAdditionalAction FeatureDefinitionAdditionalAction 926805ab-e274-5f8d-9aab-746d51acbe30
AdditionalActionRoguishDarkweaverDarkAssault FeatureDefinitionAdditionalAction FeatureDefinitionAdditionalAction 1e2433eb-cfff-5a10-9e19-2f6a31eb0610
-AdditionalActionSorcererQuickenedCastMain FeatureDefinitionAdditionalAction FeatureDefinitionAdditionalAction 5aaab60e-6ab6-5d5d-b47d-f3a265133a7c
AdditionalDamageArcaneFighterBonusWeapon FeatureDefinitionAdditionalDamage FeatureDefinitionAdditionalDamage 173ff646-05c7-5827-b06c-940b98f046d0
AdditionalDamageArcanistArcaneDetonation FeatureDefinitionAdditionalDamage FeatureDefinitionAdditionalDamage 911c2325-0931-5f7c-bc64-e4b4dc92ee93
AdditionalDamageArcanistMark FeatureDefinitionAdditionalDamage FeatureDefinitionAdditionalDamage 63e97e06-1a84-5fa6-8381-fc53d620fd4b
@@ -6497,6 +6498,7 @@ PowerPathOfTheWildMagicWildSurgeBolt FeatureDefinitionPowerSharedPool FeatureDef
PowerPathOfTheWildMagicWildSurgeDrain FeatureDefinitionPowerSharedPool FeatureDefinitionPower 3407693e-4bb3-5c3a-be53-b3c2e3fd4c65
PowerPathOfTheWildMagicWildSurgeGrowth FeatureDefinitionPowerSharedPool FeatureDefinitionPower 04179a05-b274-53a3-9718-1be7ef880b24
PowerPathOfTheWildMagicWildSurgePool FeatureDefinitionPower FeatureDefinitionPower c4efb3a8-d5a4-5221-bc44-080144a4194e
+PowerPathOfTheWildMagicWildSurgeReroll FeatureDefinitionPower FeatureDefinitionPower 011775eb-afc7-5751-bc38-e62ce6abfbc5
PowerPathOfTheWildMagicWildSurgeRetribution FeatureDefinitionPowerSharedPool FeatureDefinitionPower d3d4eaa6-87c4-5764-963b-12ea235cff02
PowerPathOfTheWildMagicWildSurgeSummon FeatureDefinitionPowerSharedPool FeatureDefinitionPower 73f4938b-4a09-5a0f-9491-a3e9c0cb1ec3
PowerPathOfTheWildMagicWildSurgeTeleport FeatureDefinitionPowerSharedPool FeatureDefinitionPower 749bb41a-afda-5873-a883-d2ad31e9c578
diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionBoomingBlade.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionBoomingBlade.json
index 2d57cd1f1f..76595943da 100644
--- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionBoomingBlade.json
+++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionBoomingBlade.json
@@ -131,9 +131,9 @@
},
"guiPresentation": {
"$type": "GuiPresentation, Assembly-CSharp",
- "hidden": false,
- "title": "Condition/&ConditionBoomingBladeTitle",
- "description": "Condition/&ConditionBoomingBladeDescription",
+ "hidden": true,
+ "title": "Feature/&NoContentTitle",
+ "description": "Feature/&NoContentTitle",
"spriteReference": {
"$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables",
"m_AssetGUID": "",
diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionBoomingBladeSheathed.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionBoomingBladeSheathed.json
index fa859bb01b..eb61595c98 100644
--- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionBoomingBladeSheathed.json
+++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionBoomingBladeSheathed.json
@@ -11,10 +11,10 @@
"terminateWhenRemoved": false,
"specialDuration": true,
"durationType": "Round",
- "durationParameterDie": "D1",
- "durationParameter": 1,
+ "durationParameterDie": "D4",
+ "durationParameter": 0,
"forceTurnOccurence": false,
- "turnOccurence": "EndOfSourceTurn",
+ "turnOccurence": 9000,
"specialInterruptions": [],
"interruptionRequiresSavingThrow": false,
"interruptionSavingThrowComputationMethod": "SaveOverride",
@@ -220,7 +220,7 @@
},
"timeToWaitBeforeApplyingShader": 0.5,
"timeToWaitBeforeRemovingShader": 0.5,
- "possessive": true,
+ "possessive": false,
"amountOrigin": "None",
"baseAmount": 0,
"additiveAmount": false,
diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionBoomingBladeMarked.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionPathOfTheWildMagicReroll.json
similarity index 91%
rename from Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionBoomingBladeMarked.json
rename to Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionPathOfTheWildMagicReroll.json
index 14339e10f9..6c51274d8a 100644
--- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionBoomingBladeMarked.json
+++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionPathOfTheWildMagicReroll.json
@@ -3,10 +3,13 @@
"inDungeonEditor": false,
"parentCondition": null,
"conditionType": "Beneficial",
- "features": [],
+ "features": [
+ "Definition:ActionAffinityPathOfTheWildMagicReroll:6a0d4f99-9615-555d-85a4-630bfc0562eb",
+ "Definition:PowerPathOfTheWildMagicWildSurgeReroll:011775eb-afc7-5751-bc38-e62ce6abfbc5"
+ ],
"allowMultipleInstances": false,
- "silentWhenAdded": true,
- "silentWhenRemoved": true,
+ "silentWhenAdded": false,
+ "silentWhenRemoved": false,
"silentWhenRefreshed": false,
"terminateWhenRemoved": false,
"specialDuration": false,
@@ -16,7 +19,9 @@
"forceTurnOccurence": false,
"turnOccurence": "EndOfTurn",
"specialInterruptions": [
- 9000
+ "BattleEnd",
+ "NoAttackOrDamagedInTurn",
+ "RageStop"
],
"interruptionRequiresSavingThrow": false,
"interruptionSavingThrowComputationMethod": "SaveOverride",
@@ -151,7 +156,7 @@
"usedInValleyDLC": false
},
"contentCopyright": "UserContent",
- "guid": "69813f6c-ceca-5c5a-a7ef-7975ff227b50",
+ "guid": "399723d2-af57-507b-8b51-1906c61182d5",
"contentPack": 9999,
- "name": "ConditionBoomingBladeMarked"
+ "name": "ConditionPathOfTheWildMagicReroll"
}
\ No newline at end of file
diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionResonatingStrike.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionResonatingStrike.json
index 53a2a13bb8..2c811f345b 100644
--- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionResonatingStrike.json
+++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionResonatingStrike.json
@@ -17,7 +17,9 @@
"durationParameter": 1,
"forceTurnOccurence": false,
"turnOccurence": "EndOfTurn",
- "specialInterruptions": [],
+ "specialInterruptions": [
+ "UsePowerExecuted"
+ ],
"interruptionRequiresSavingThrow": false,
"interruptionSavingThrowComputationMethod": "SaveOverride",
"interruptionSavingThrowAbility": "",
@@ -129,9 +131,9 @@
},
"guiPresentation": {
"$type": "GuiPresentation, Assembly-CSharp",
- "hidden": false,
- "title": "Condition/&ConditionResonatingStrikeTitle",
- "description": "-",
+ "hidden": true,
+ "title": "Feature/&NoContentTitle",
+ "description": "Feature/&NoContentTitle",
"spriteReference": {
"$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables",
"m_AssetGUID": "",
diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionSorcererQuickenedCastMain.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionSorcererQuickenedCastMain.json
index c31f8a7040..a9ad93b834 100644
--- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionSorcererQuickenedCastMain.json
+++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionSorcererQuickenedCastMain.json
@@ -3,9 +3,7 @@
"inDungeonEditor": false,
"parentCondition": null,
"conditionType": "Beneficial",
- "features": [
- "Definition:AdditionalActionSorcererQuickenedCastMain:5aaab60e-6ab6-5d5d-b47d-f3a265133a7c"
- ],
+ "features": [],
"allowMultipleInstances": false,
"silentWhenAdded": true,
"silentWhenRemoved": true,
diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionSunlightBlade.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionSunlightBlade.json
index 52ca794937..3791b3c4cf 100644
--- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionSunlightBlade.json
+++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionSunlightBlade.json
@@ -131,9 +131,9 @@
},
"guiPresentation": {
"$type": "GuiPresentation, Assembly-CSharp",
- "hidden": false,
- "title": "Condition/&ConditionSunlightBladeTitle",
- "description": "Condition/&ConditionSunlightBladeDescription",
+ "hidden": true,
+ "title": "Feature/&NoContentTitle",
+ "description": "Feature/&NoContentTitle",
"spriteReference": {
"$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables",
"m_AssetGUID": "",
diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionSunlightBladeMarked.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionSunlightBladeMarked.json
deleted file mode 100644
index 829d2b340b..0000000000
--- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionSunlightBladeMarked.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": [
- 9000
- ],
- "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": "7f19eac4-e539-5805-ae41-40dcda6d3b23",
- "contentPack": 9999,
- "name": "ConditionSunlightBladeMarked"
-}
\ No newline at end of file
diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAdditionalAction/AdditionalActionSorcererQuickenedCastMain.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinition/ActionAffinitySorcererQuickened.json
similarity index 67%
rename from Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAdditionalAction/AdditionalActionSorcererQuickenedCastMain.json
rename to Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinition/ActionAffinitySorcererQuickened.json
index d2cd8f2adf..036002b88a 100644
--- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAdditionalAction/AdditionalActionSorcererQuickenedCastMain.json
+++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinition/ActionAffinitySorcererQuickened.json
@@ -1,13 +1,5 @@
{
- "$type": "FeatureDefinitionAdditionalAction, Assembly-CSharp",
- "actionType": "Main",
- "forbiddenActions": [],
- "authorizedActions": [],
- "restrictedActions": [
- "CastMain"
- ],
- "maxAttacksNumber": -1,
- "triggerCondition": "None",
+ "$type": "FeatureDefinition, Assembly-CSharp",
"guiPresentation": {
"$type": "GuiPresentation, Assembly-CSharp",
"hidden": true,
@@ -32,7 +24,7 @@
"usedInValleyDLC": false
},
"contentCopyright": "UserContent",
- "guid": "5aaab60e-6ab6-5d5d-b47d-f3a265133a7c",
+ "guid": "38bb8988-a558-5c0c-8145-02d893f70586",
"contentPack": 9999,
- "name": "AdditionalActionSorcererQuickenedCastMain"
+ "name": "ActionAffinitySorcererQuickened"
}
\ No newline at end of file
diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinition/FeatureShadowBlade.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinition/FeatureShadowBlade.json
new file mode 100644
index 0000000000..018e79e240
--- /dev/null
+++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinition/FeatureShadowBlade.json
@@ -0,0 +1,30 @@
+{
+ "$type": "FeatureDefinition, Assembly-CSharp",
+ "guiPresentation": {
+ "$type": "GuiPresentation, Assembly-CSharp",
+ "hidden": false,
+ "title": "Feature/&FeatureShadowBladeTitle",
+ "description": "Feature/&FeatureShadowBladeDescription",
+ "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": "aa9a0c6a-22d4-5f5a-b9c6-0bc354dd70f3",
+ "contentPack": 9999,
+ "name": "FeatureShadowBlade"
+}
\ No newline at end of file
diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionActionAffinity/ActionAffinitySorcererQuickened.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionActionAffinity/ActionAffinityPathOfTheWildMagicReroll.json
similarity index 92%
rename from Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionActionAffinity/ActionAffinitySorcererQuickened.json
rename to Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionActionAffinity/ActionAffinityPathOfTheWildMagicReroll.json
index 0284387af6..a436a03e21 100644
--- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionActionAffinity/ActionAffinitySorcererQuickened.json
+++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionActionAffinity/ActionAffinityPathOfTheWildMagicReroll.json
@@ -44,7 +44,7 @@
"usedInValleyDLC": false
},
"contentCopyright": "UserContent",
- "guid": "38bb8988-a558-5c0c-8145-02d893f70586",
+ "guid": "6a0d4f99-9615-555d-85a4-630bfc0562eb",
"contentPack": 9999,
- "name": "ActionAffinitySorcererQuickened"
+ "name": "ActionAffinityPathOfTheWildMagicReroll"
}
\ No newline at end of file
diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionActionAffinity/ActionAffinityZenShotToggle.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionActionAffinity/ActionAffinityZenShotToggle.json
index 556f0f2699..4d4b62e4bb 100644
--- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionActionAffinity/ActionAffinityZenShotToggle.json
+++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionActionAffinity/ActionAffinityZenShotToggle.json
@@ -12,7 +12,7 @@
"maxAttacksNumber": -1,
"forbiddenActions": [],
"authorizedActions": [
- 9069
+ 9070
],
"restrictedActions": [],
"actionExecutionModifiers": [],
diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAdditionalDamage/AdditionalDamageBoomingBlade.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAdditionalDamage/AdditionalDamageBoomingBlade.json
index 70903cffa2..4c755e1757 100644
--- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAdditionalDamage/AdditionalDamageBoomingBlade.json
+++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAdditionalDamage/AdditionalDamageBoomingBlade.json
@@ -5,11 +5,11 @@
"firstTargetOnly": true,
"targetSide": "Enemy",
"otherSimilarAdditionalDamages": [],
- "triggerCondition": "TargetHasCondition",
+ "triggerCondition": "AlwaysActive",
"requiredProperty": "MeleeWeapon",
"attackModeOnly": true,
"attackOnly": false,
- "requiredTargetCondition": "Definition:ConditionBoomingBladeMarked:69813f6c-ceca-5c5a-a7ef-7975ff227b50",
+ "requiredTargetCondition": null,
"requiredTargetSenseType": "Darkvision",
"requiredTargetCreatureTag": "",
"requiredCharacterFamily": null,
diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAdditionalDamage/AdditionalDamageSunlightBlade.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAdditionalDamage/AdditionalDamageSunlightBlade.json
index e4a53b2ae4..717ba9458b 100644
--- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAdditionalDamage/AdditionalDamageSunlightBlade.json
+++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAdditionalDamage/AdditionalDamageSunlightBlade.json
@@ -5,11 +5,11 @@
"firstTargetOnly": true,
"targetSide": "Enemy",
"otherSimilarAdditionalDamages": [],
- "triggerCondition": "TargetHasCondition",
+ "triggerCondition": "AlwaysActive",
"requiredProperty": "MeleeWeapon",
"attackModeOnly": true,
"attackOnly": false,
- "requiredTargetCondition": "Definition:ConditionSunlightBladeMarked:7f19eac4-e539-5805-ae41-40dcda6d3b23",
+ "requiredTargetCondition": null,
"requiredTargetSenseType": "Darkvision",
"requiredTargetCreatureTag": "",
"requiredCharacterFamily": null,
diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/FeatureWayOfWealAndWoeBrutalWeal.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/FeatureWayOfWealAndWoeBrutalWeal.json
index b19e3e0817..b9111ba498 100644
--- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/FeatureWayOfWealAndWoeBrutalWeal.json
+++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/FeatureWayOfWealAndWoeBrutalWeal.json
@@ -335,7 +335,7 @@
"includeBaseDescription": false,
"guiPresentation": {
"$type": "GuiPresentation, Assembly-CSharp",
- "hidden": true,
+ "hidden": false,
"title": "Feature/&FeatureWayOfWealAndWoeBrutalWealTitle",
"description": "Feature/&FeatureWayOfWealAndWoeBrutalWealDescription",
"spriteReference": {
diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/FeatureWayOfWealAndWoeTheirWoe.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/FeatureWayOfWealAndWoeTheirWoe.json
index 3eb5583122..e546e1126c 100644
--- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/FeatureWayOfWealAndWoeTheirWoe.json
+++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/FeatureWayOfWealAndWoeTheirWoe.json
@@ -335,7 +335,7 @@
"includeBaseDescription": false,
"guiPresentation": {
"$type": "GuiPresentation, Assembly-CSharp",
- "hidden": true,
+ "hidden": false,
"title": "Feature/&FeatureWayOfWealAndWoeTheirWoeTitle",
"description": "Feature/&FeatureWayOfWealAndWoeTheirWoeDescription",
"spriteReference": {
diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerBoomingBladeDamage.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerBoomingBladeDamage.json
index 643421f458..ecedf4c11c 100644
--- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerBoomingBladeDamage.json
+++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerBoomingBladeDamage.json
@@ -65,10 +65,111 @@
"$type": "EffectForm, Assembly-CSharp",
"formType": "Damage",
"addBonusMode": "None",
- "applyLevel": "No",
- "levelType": "ClassLevel",
+ "applyLevel": "DiceNumberByLevelTable",
+ "levelType": "CharacterLevel",
"levelMultiplier": 1,
- "diceByLevelTable": [],
+ "diceByLevelTable": [
+ {
+ "$type": "DiceByRank, Assembly-CSharp",
+ "rank": 1,
+ "diceNumber": 1
+ },
+ {
+ "$type": "DiceByRank, Assembly-CSharp",
+ "rank": 2,
+ "diceNumber": 1
+ },
+ {
+ "$type": "DiceByRank, Assembly-CSharp",
+ "rank": 3,
+ "diceNumber": 1
+ },
+ {
+ "$type": "DiceByRank, Assembly-CSharp",
+ "rank": 4,
+ "diceNumber": 1
+ },
+ {
+ "$type": "DiceByRank, Assembly-CSharp",
+ "rank": 5,
+ "diceNumber": 2
+ },
+ {
+ "$type": "DiceByRank, Assembly-CSharp",
+ "rank": 6,
+ "diceNumber": 2
+ },
+ {
+ "$type": "DiceByRank, Assembly-CSharp",
+ "rank": 7,
+ "diceNumber": 2
+ },
+ {
+ "$type": "DiceByRank, Assembly-CSharp",
+ "rank": 8,
+ "diceNumber": 2
+ },
+ {
+ "$type": "DiceByRank, Assembly-CSharp",
+ "rank": 9,
+ "diceNumber": 2
+ },
+ {
+ "$type": "DiceByRank, Assembly-CSharp",
+ "rank": 10,
+ "diceNumber": 2
+ },
+ {
+ "$type": "DiceByRank, Assembly-CSharp",
+ "rank": 11,
+ "diceNumber": 3
+ },
+ {
+ "$type": "DiceByRank, Assembly-CSharp",
+ "rank": 12,
+ "diceNumber": 3
+ },
+ {
+ "$type": "DiceByRank, Assembly-CSharp",
+ "rank": 13,
+ "diceNumber": 3
+ },
+ {
+ "$type": "DiceByRank, Assembly-CSharp",
+ "rank": 14,
+ "diceNumber": 3
+ },
+ {
+ "$type": "DiceByRank, Assembly-CSharp",
+ "rank": 15,
+ "diceNumber": 3
+ },
+ {
+ "$type": "DiceByRank, Assembly-CSharp",
+ "rank": 16,
+ "diceNumber": 3
+ },
+ {
+ "$type": "DiceByRank, Assembly-CSharp",
+ "rank": 17,
+ "diceNumber": 4
+ },
+ {
+ "$type": "DiceByRank, Assembly-CSharp",
+ "rank": 18,
+ "diceNumber": 4
+ },
+ {
+ "$type": "DiceByRank, Assembly-CSharp",
+ "rank": 19,
+ "diceNumber": 4
+ },
+ {
+ "$type": "DiceByRank, Assembly-CSharp",
+ "rank": 20,
+ "diceNumber": 4
+ }
+ ],
"createdByCharacter": true,
"createdByCondition": false,
"hasSavingThrow": false,
@@ -335,14 +436,14 @@
"includeBaseDescription": false,
"guiPresentation": {
"$type": "GuiPresentation, Assembly-CSharp",
- "hidden": true,
+ "hidden": false,
"title": "Spell/&BoomingBladeTitle",
- "description": "Spell/&BoomingBladeDescription",
+ "description": "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.",
"spriteReference": {
"$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables",
- "m_AssetGUID": "",
- "m_SubObjectName": null,
- "m_SubObjectType": null
+ "m_AssetGUID": "df2faaa7db39d064b913d8578da6d3e8",
+ "m_SubObjectName": "DivineBlade",
+ "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/PowerChaosBoltLeap.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerChaosBoltLeap.json
index 1bee84f811..5f8c867ffa 100644
--- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerChaosBoltLeap.json
+++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerChaosBoltLeap.json
@@ -13,7 +13,7 @@
"emissiveBorder": "None",
"emissiveParameter": 1,
"requiresTargetProximity": false,
- "targetProximityDistance": 30,
+ "targetProximityDistance": 6,
"targetExcludeCaster": false,
"canBePlacedOnCharacter": true,
"affectOnlyGround": false,
@@ -32,7 +32,7 @@
"targetConditionAsset": null,
"targetSide": "Enemy",
"durationType": "Instantaneous",
- "durationParameter": 0,
+ "durationParameter": 1,
"endOfEffect": "EndOfTurn",
"hasSavingThrow": false,
"disableSavingThrowOnAllies": false,
@@ -149,8 +149,8 @@
"additionalWeaponDie": 0,
"alteredDuration": "None"
},
- "speedType": "CellsPerSeconds",
- "speedParameter": 9.5,
+ "speedType": "Instant",
+ "speedParameter": 10.0,
"offsetImpactTimeBasedOnDistance": false,
"offsetImpactTimeBasedOnDistanceFactor": 0.1,
"offsetImpactTimePerTarget": 0.0,
@@ -323,10 +323,10 @@
"effectAIParameters": {
"$type": "EffectAIParameters, Assembly-CSharp",
"aoeScoreMultiplier": 1.0,
- "cooldownForCaster": 2,
+ "cooldownForCaster": 0,
"cooldownForBattle": 0,
"sortingScoreMultiplier": 1.0,
- "dynamicCooldown": true
+ "dynamicCooldown": false
},
"animationMagicEffect": "Animation0",
"lightCounterDispellsEffect": false,
diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerCircleOfTheWildfireBlazingRevival.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerCircleOfTheWildfireBlazingRevival.json
index c888a3f769..80a18e07eb 100644
--- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerCircleOfTheWildfireBlazingRevival.json
+++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerCircleOfTheWildfireBlazingRevival.json
@@ -168,7 +168,7 @@
"abilityScoreBonusToAttack": false,
"proficiencyBonusToAttack": false,
"uniqueInstance": false,
- "showCasting": true,
+ "showCasting": false,
"shortTitleOverride": "",
"overriddenPower": null,
"includeBaseDescription": false,
diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerGiftOfTheChromaticDragonReactiveResistance.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerGiftOfTheChromaticDragonReactiveResistance.json
index 7932c9e535..b7d0ff435d 100644
--- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerGiftOfTheChromaticDragonReactiveResistance.json
+++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerGiftOfTheChromaticDragonReactiveResistance.json
@@ -17,7 +17,7 @@
"targetExcludeCaster": false,
"canBePlacedOnCharacter": true,
"affectOnlyGround": false,
- "targetFilteringMethod": "CharacterOnly",
+ "targetFilteringMethod": "AllCharacterAndGadgets",
"targetFilteringTag": "No",
"requiresVisibilityForPosition": true,
"inviteOptionalAlly": false,
@@ -41,7 +41,7 @@
"grantedConditionOnSave": null,
"rollSaveOnlyIfRelevantForms": false,
"hasShoveRoll": false,
- "createdByCharacter": true,
+ "createdByCharacter": false,
"difficultyClassComputation": "SpellCastingFeature",
"savingThrowDifficultyAbility": "Wisdom",
"fixedSavingThrowDifficultyClass": 15,
@@ -85,158 +85,33 @@
"offsetImpactTimePerTarget": 0.0,
"effectParticleParameters": {
"$type": "EffectParticleParameters, Assembly-CSharp",
- "casterParticleReference": {
- "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables",
- "m_AssetGUID": "62721d4b0a53082428ecb807aeb2cf5a",
- "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": ""
- },
+ "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": {
- "$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": ""
- },
+ "emissiveBorderCellStartParticleReference": null,
+ "emissiveBorderCellParticleReference": null,
+ "emissiveBorderCellEndParticleReference": null,
+ "emissiveBorderSurfaceStartParticleReference": null,
+ "emissiveBorderSurfaceParticleReference": null,
+ "emissiveBorderSurfaceEndParticleReference": null,
+ "conditionStartParticleReference": null,
+ "conditionParticleReference": null,
+ "conditionEndParticleReference": null,
"forceApplyZoneParticle": false,
"applyEmissionColorOnWeapons": false,
"emissionColor": {
@@ -293,7 +168,7 @@
"abilityScoreBonusToAttack": false,
"proficiencyBonusToAttack": false,
"uniqueInstance": false,
- "showCasting": true,
+ "showCasting": false,
"shortTitleOverride": "",
"overriddenPower": null,
"includeBaseDescription": false,
diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerInnovationArtilleristEldritchCannonDetonateCannon.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerInnovationArtilleristEldritchCannonDetonateCannon.json
index 92447ed8b7..aef2ddc4a4 100644
--- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerInnovationArtilleristEldritchCannonDetonateCannon.json
+++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerInnovationArtilleristEldritchCannonDetonateCannon.json
@@ -13,11 +13,11 @@
"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,
@@ -32,7 +32,7 @@
"targetConditionAsset": null,
"targetSide": "All",
"durationType": "Instantaneous",
- "durationParameter": 0,
+ "durationParameter": 1,
"endOfEffect": "EndOfTurn",
"hasSavingThrow": true,
"disableSavingThrowOnAllies": false,
@@ -100,11 +100,11 @@
"specialFormsDescription": "",
"effectAdvancement": {
"$type": "EffectAdvancement, Assembly-CSharp",
- "effectIncrementMethod": "PerAdditionalSlotLevel",
+ "effectIncrementMethod": "None",
"incrementMultiplier": 1,
"additionalTargetsPerIncrement": 0,
"additionalSubtargetsPerIncrement": 0,
- "additionalDicePerIncrement": 1,
+ "additionalDicePerIncrement": 0,
"additionalSpellLevelPerIncrement": 0,
"additionalSummonsPerIncrement": 0,
"additionalHPPerIncrement": 0,
@@ -114,10 +114,10 @@
"additionalWeaponDie": 0,
"alteredDuration": "None"
},
- "speedType": "CellsPerSeconds",
- "speedParameter": 11.0,
- "offsetImpactTimeBasedOnDistance": true,
- "offsetImpactTimeBasedOnDistanceFactor": 0.05,
+ "speedType": "Instant",
+ "speedParameter": 10.0,
+ "offsetImpactTimeBasedOnDistance": false,
+ "offsetImpactTimeBasedOnDistanceFactor": 0.1,
"offsetImpactTimePerTarget": 0.0,
"effectParticleParameters": {
"$type": "EffectParticleParameters, Assembly-CSharp",
@@ -288,10 +288,10 @@
"effectAIParameters": {
"$type": "EffectAIParameters, Assembly-CSharp",
"aoeScoreMultiplier": 1.0,
- "cooldownForCaster": 1,
- "cooldownForBattle": 1,
+ "cooldownForCaster": 0,
+ "cooldownForBattle": 0,
"sortingScoreMultiplier": 1.0,
- "dynamicCooldown": true
+ "dynamicCooldown": false
},
"animationMagicEffect": "Animation0",
"lightCounterDispellsEffect": false,
diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerInnovationArtilleristEldritchCannonDetonateSelf.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerInnovationArtilleristEldritchCannonDetonateSelf.json
index b8d97c5fe9..06f8f8d0b2 100644
--- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerInnovationArtilleristEldritchCannonDetonateSelf.json
+++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerInnovationArtilleristEldritchCannonDetonateSelf.json
@@ -13,11 +13,11 @@
"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,
@@ -32,7 +32,7 @@
"targetConditionAsset": null,
"targetSide": "All",
"durationType": "Instantaneous",
- "durationParameter": 0,
+ "durationParameter": 1,
"endOfEffect": "EndOfTurn",
"hasSavingThrow": true,
"disableSavingThrowOnAllies": false,
@@ -181,11 +181,11 @@
"specialFormsDescription": "",
"effectAdvancement": {
"$type": "EffectAdvancement, Assembly-CSharp",
- "effectIncrementMethod": "PerAdditionalSlotLevel",
+ "effectIncrementMethod": "None",
"incrementMultiplier": 1,
"additionalTargetsPerIncrement": 0,
"additionalSubtargetsPerIncrement": 0,
- "additionalDicePerIncrement": 1,
+ "additionalDicePerIncrement": 0,
"additionalSpellLevelPerIncrement": 0,
"additionalSummonsPerIncrement": 0,
"additionalHPPerIncrement": 0,
@@ -195,10 +195,10 @@
"additionalWeaponDie": 0,
"alteredDuration": "None"
},
- "speedType": "CellsPerSeconds",
- "speedParameter": 11.0,
- "offsetImpactTimeBasedOnDistance": true,
- "offsetImpactTimeBasedOnDistanceFactor": 0.05,
+ "speedType": "Instant",
+ "speedParameter": 10.0,
+ "offsetImpactTimeBasedOnDistance": false,
+ "offsetImpactTimeBasedOnDistanceFactor": 0.1,
"offsetImpactTimePerTarget": 0.0,
"effectParticleParameters": {
"$type": "EffectParticleParameters, Assembly-CSharp",
@@ -369,10 +369,10 @@
"effectAIParameters": {
"$type": "EffectAIParameters, Assembly-CSharp",
"aoeScoreMultiplier": 1.0,
- "cooldownForCaster": 1,
- "cooldownForBattle": 1,
+ "cooldownForCaster": 0,
+ "cooldownForBattle": 0,
"sortingScoreMultiplier": 1.0,
- "dynamicCooldown": true
+ "dynamicCooldown": false
},
"animationMagicEffect": "Animation0",
"lightCounterDispellsEffect": false,
diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerInnovationArtilleristFlamethrower.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerInnovationArtilleristFlamethrower.json
index fa0a098091..83cac890d0 100644
--- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerInnovationArtilleristFlamethrower.json
+++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerInnovationArtilleristFlamethrower.json
@@ -13,11 +13,11 @@
"emissiveBorder": "None",
"emissiveParameter": 1,
"requiresTargetProximity": false,
- "targetProximityDistance": 30,
+ "targetProximityDistance": 6,
"targetExcludeCaster": true,
"canBePlacedOnCharacter": true,
"affectOnlyGround": false,
- "targetFilteringMethod": "AllCharacterAndGadgets",
+ "targetFilteringMethod": "CharacterOnly",
"targetFilteringTag": "No",
"requiresVisibilityForPosition": true,
"inviteOptionalAlly": false,
@@ -32,7 +32,7 @@
"targetConditionAsset": null,
"targetSide": "All",
"durationType": "Instantaneous",
- "durationParameter": 0,
+ "durationParameter": 1,
"endOfEffect": "EndOfTurn",
"hasSavingThrow": true,
"disableSavingThrowOnAllies": false,
@@ -227,11 +227,11 @@
"specialFormsDescription": "",
"effectAdvancement": {
"$type": "EffectAdvancement, Assembly-CSharp",
- "effectIncrementMethod": "PerAdditionalSlotLevel",
+ "effectIncrementMethod": "None",
"incrementMultiplier": 1,
"additionalTargetsPerIncrement": 0,
"additionalSubtargetsPerIncrement": 0,
- "additionalDicePerIncrement": 1,
+ "additionalDicePerIncrement": 0,
"additionalSpellLevelPerIncrement": 0,
"additionalSummonsPerIncrement": 0,
"additionalHPPerIncrement": 0,
@@ -243,7 +243,7 @@
},
"speedType": "Instant",
"speedParameter": 10.0,
- "offsetImpactTimeBasedOnDistance": true,
+ "offsetImpactTimeBasedOnDistance": false,
"offsetImpactTimeBasedOnDistanceFactor": 0.1,
"offsetImpactTimePerTarget": 0.0,
"effectParticleParameters": {
@@ -414,11 +414,11 @@
},
"effectAIParameters": {
"$type": "EffectAIParameters, Assembly-CSharp",
- "aoeScoreMultiplier": 1.5,
- "cooldownForCaster": 2,
- "cooldownForBattle": 1,
+ "aoeScoreMultiplier": 1.0,
+ "cooldownForCaster": 0,
+ "cooldownForBattle": 0,
"sortingScoreMultiplier": 1.0,
- "dynamicCooldown": true
+ "dynamicCooldown": false
},
"animationMagicEffect": "Animation0",
"lightCounterDispellsEffect": false,
diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerInnovationArtilleristForceBallista.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerInnovationArtilleristForceBallista.json
index 6e9633389a..25f68a1567 100644
--- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerInnovationArtilleristForceBallista.json
+++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerInnovationArtilleristForceBallista.json
@@ -17,7 +17,7 @@
"targetExcludeCaster": false,
"canBePlacedOnCharacter": true,
"affectOnlyGround": false,
- "targetFilteringMethod": "AllCharacterAndGadgets",
+ "targetFilteringMethod": "CharacterOnly",
"targetFilteringTag": "No",
"requiresVisibilityForPosition": true,
"inviteOptionalAlly": false,
@@ -32,7 +32,7 @@
"targetConditionAsset": null,
"targetSide": "Enemy",
"durationType": "Instantaneous",
- "durationParameter": 0,
+ "durationParameter": 1,
"endOfEffect": "EndOfTurn",
"hasSavingThrow": false,
"disableSavingThrowOnAllies": false,
@@ -226,9 +226,9 @@
"specialFormsDescription": "",
"effectAdvancement": {
"$type": "EffectAdvancement, Assembly-CSharp",
- "effectIncrementMethod": "CasterLevelTable",
+ "effectIncrementMethod": "None",
"incrementMultiplier": 1,
- "additionalTargetsPerIncrement": 1,
+ "additionalTargetsPerIncrement": 0,
"additionalSubtargetsPerIncrement": 0,
"additionalDicePerIncrement": 0,
"additionalSpellLevelPerIncrement": 0,
@@ -240,8 +240,8 @@
"additionalWeaponDie": 0,
"alteredDuration": "None"
},
- "speedType": "CellsPerSeconds",
- "speedParameter": 12.0,
+ "speedType": "Instant",
+ "speedParameter": 10.0,
"offsetImpactTimeBasedOnDistance": false,
"offsetImpactTimeBasedOnDistanceFactor": 0.1,
"offsetImpactTimePerTarget": 0.0,
@@ -416,7 +416,7 @@
"aoeScoreMultiplier": 1.0,
"cooldownForCaster": 0,
"cooldownForBattle": 0,
- "sortingScoreMultiplier": 2.0,
+ "sortingScoreMultiplier": 1.0,
"dynamicCooldown": false
},
"animationMagicEffect": "Animation0",
diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerPathOfTheReaverBloodbath.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerPathOfTheReaverBloodbath.json
index 65c209309f..daddfd77d9 100644
--- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerPathOfTheReaverBloodbath.json
+++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerPathOfTheReaverBloodbath.json
@@ -168,7 +168,7 @@
"abilityScoreBonusToAttack": false,
"proficiencyBonusToAttack": false,
"uniqueInstance": false,
- "showCasting": true,
+ "showCasting": false,
"shortTitleOverride": "",
"overriddenPower": null,
"includeBaseDescription": false,
diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerPathOfTheWildMagicWildSurgeReroll.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerPathOfTheWildMagicWildSurgeReroll.json
new file mode 100644
index 0000000000..4f2ae3bcd0
--- /dev/null
+++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerPathOfTheWildMagicWildSurgeReroll.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": true,
+ "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": true,
+ "shortTitleOverride": "",
+ "overriddenPower": null,
+ "includeBaseDescription": false,
+ "guiPresentation": {
+ "$type": "GuiPresentation, Assembly-CSharp",
+ "hidden": false,
+ "title": "Feature/&PowerPathOfTheWildMagicWildSurgeRerollTitle",
+ "description": "Feature/&PowerPathOfTheWildMagicWildSurgeRerollDescription",
+ "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": "011775eb-afc7-5751-bc38-e62ce6abfbc5",
+ "contentPack": 9999,
+ "name": "PowerPathOfTheWildMagicWildSurgeReroll"
+}
\ No newline at end of file
diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerResonatingStrike.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerResonatingStrike.json
index deeb68e408..998c60ad10 100644
--- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerResonatingStrike.json
+++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerResonatingStrike.json
@@ -335,12 +335,12 @@
"includeBaseDescription": false,
"guiPresentation": {
"$type": "GuiPresentation, Assembly-CSharp",
- "hidden": true,
+ "hidden": false,
"title": "Spell/&ResonatingStrikeTitle",
- "description": "Spell/&ResonatingStrikeDescription",
+ "description": "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.",
"spriteReference": {
"$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables",
- "m_AssetGUID": "",
+ "m_AssetGUID": "0b77d7d8-cada-50c9-8e0d-8dbb46184739",
"m_SubObjectName": null,
"m_SubObjectType": null
},
diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerSkinOfRetribution.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerSkinOfRetribution.json
index 6ccc918baf..d86aafac06 100644
--- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerSkinOfRetribution.json
+++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerSkinOfRetribution.json
@@ -83,7 +83,7 @@
"dieType": "D1",
"overrideWithBardicInspirationDie": false,
"versatileDieType": "D1",
- "bonusDamage": 5,
+ "bonusDamage": 0,
"damageType": "DamageCold",
"ancestryType": "Sorcerer",
"healFromInflictedDamage": "Never",
diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerWayOfTheDragonElementalBreathGreen.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerWayOfTheDragonElementalBreathGreen.json
index 6f8f9e0e9c..134b6196c9 100644
--- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerWayOfTheDragonElementalBreathGreen.json
+++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerWayOfTheDragonElementalBreathGreen.json
@@ -199,7 +199,7 @@
"$type": "EffectParticleParameters, Assembly-CSharp",
"casterParticleReference": {
"$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables",
- "m_AssetGUID": "9c8ef92c6a9321b4c9bfaa0be971e805",
+ "m_AssetGUID": "e9487d823810bec44a538c8a7df4a835",
"m_SubObjectName": "",
"m_SubObjectType": ""
},
@@ -235,7 +235,7 @@
},
"zoneParticleReference": {
"$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables",
- "m_AssetGUID": "",
+ "m_AssetGUID": "3979afebdbcd9e647860aa7229a385cc",
"m_SubObjectName": "",
"m_SubObjectType": ""
},
@@ -247,7 +247,7 @@
},
"impactParticleReference": {
"$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables",
- "m_AssetGUID": "",
+ "m_AssetGUID": "e0e3231f189432d44bb8aebae679f54e",
"m_SubObjectName": "",
"m_SubObjectType": ""
},
@@ -259,13 +259,13 @@
},
"activeEffectCellStartParticleReference": {
"$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables",
- "m_AssetGUID": "9709aa137fcf92147a2fcdea635a0cb4",
+ "m_AssetGUID": "",
"m_SubObjectName": "",
"m_SubObjectType": ""
},
"activeEffectCellParticleReference": {
"$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables",
- "m_AssetGUID": "9c1d53f4f8866d64c9501d36e699df68",
+ "m_AssetGUID": "",
"m_SubObjectName": "",
"m_SubObjectType": ""
},
diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerWayOfTheDragonElementalBreathGreenPoints.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerWayOfTheDragonElementalBreathGreenPoints.json
index c3e5a8cb85..700ddb2363 100644
--- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerWayOfTheDragonElementalBreathGreenPoints.json
+++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerWayOfTheDragonElementalBreathGreenPoints.json
@@ -199,7 +199,7 @@
"$type": "EffectParticleParameters, Assembly-CSharp",
"casterParticleReference": {
"$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables",
- "m_AssetGUID": "9c8ef92c6a9321b4c9bfaa0be971e805",
+ "m_AssetGUID": "e9487d823810bec44a538c8a7df4a835",
"m_SubObjectName": "",
"m_SubObjectType": ""
},
@@ -235,7 +235,7 @@
},
"zoneParticleReference": {
"$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables",
- "m_AssetGUID": "",
+ "m_AssetGUID": "3979afebdbcd9e647860aa7229a385cc",
"m_SubObjectName": "",
"m_SubObjectType": ""
},
@@ -247,7 +247,7 @@
},
"impactParticleReference": {
"$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables",
- "m_AssetGUID": "",
+ "m_AssetGUID": "e0e3231f189432d44bb8aebae679f54e",
"m_SubObjectName": "",
"m_SubObjectType": ""
},
@@ -259,13 +259,13 @@
},
"activeEffectCellStartParticleReference": {
"$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables",
- "m_AssetGUID": "9709aa137fcf92147a2fcdea635a0cb4",
+ "m_AssetGUID": "",
"m_SubObjectName": "",
"m_SubObjectType": ""
},
"activeEffectCellParticleReference": {
"$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables",
- "m_AssetGUID": "9c1d53f4f8866d64c9501d36e699df68",
+ "m_AssetGUID": "",
"m_SubObjectName": "",
"m_SubObjectType": ""
},
diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ItemDefinition/ItemShadowBlade.json b/Diagnostics/UnfinishedBusinessBlueprints/ItemDefinition/ItemShadowBlade.json
index a8bf156ce6..144d0172b4 100644
--- a/Diagnostics/UnfinishedBusinessBlueprints/ItemDefinition/ItemShadowBlade.json
+++ b/Diagnostics/UnfinishedBusinessBlueprints/ItemDefinition/ItemShadowBlade.json
@@ -34,7 +34,16 @@
"requiredAttunementClasses": [],
"itemRarity": "Common",
"incompatibleWithMonkReturnMissile": false,
- "staticProperties": [],
+ "staticProperties": [
+ {
+ "$type": "ItemPropertyDescription, Assembly-CSharp",
+ "appliesOnItemOnly": true,
+ "type": "Feature",
+ "featureDefinition": "Definition:FeatureShadowBlade:aa9a0c6a-22d4-5f5a-b9c6-0bc354dd70f3",
+ "conditionDefinition": null,
+ "knowledgeAffinity": "ActiveAndVisible"
+ }
+ ],
"isArmor": false,
"isWeapon": true,
"weaponDefinition": {
diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/AbiDalzimHorridWilting.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/AbiDalzimHorridWilting.json
index b0f457603f..000aff214a 100644
--- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/AbiDalzimHorridWilting.json
+++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/AbiDalzimHorridWilting.json
@@ -21,7 +21,7 @@
"targetType": "Cube",
"itemSelectionType": "None",
"targetParameter": 6,
- "targetParameter2": 2,
+ "targetParameter2": 0,
"emissiveBorder": "None",
"emissiveParameter": 1,
"requiresTargetProximity": false,
diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/BoomingBlade.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/BoomingBlade.json
index 35b1ee6b46..63a5a23086 100644
--- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/BoomingBlade.json
+++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/BoomingBlade.json
@@ -99,33 +99,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": "ConditionBoomingBladeMarked",
- "conditionDefinition": "Definition:ConditionBoomingBladeMarked:69813f6c-ceca-5c5a-a7ef-7975ff227b50",
- "operation": "Add",
- "conditionsList": [],
- "applyToSelf": false,
- "forceOnSelf": false
- },
- "hasFilterId": false,
- "filterId": 0
}
],
"specialFormsDescription": "",
@@ -347,7 +320,7 @@
"$type": "GuiPresentation, Assembly-CSharp",
"hidden": false,
"title": "Spell/&BoomingBladeTitle",
- "description": "Spell/&BoomingBladeDescription",
+ "description": "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.",
"spriteReference": {
"$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables",
"m_AssetGUID": "df2faaa7db39d064b913d8578da6d3e8",
diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/ChaosBolt.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/ChaosBolt.json
index 0d9cf66b88..d6700c4c76 100644
--- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/ChaosBolt.json
+++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/ChaosBolt.json
@@ -25,7 +25,7 @@
"emissiveBorder": "None",
"emissiveParameter": 1,
"requiresTargetProximity": false,
- "targetProximityDistance": 30,
+ "targetProximityDistance": 6,
"targetExcludeCaster": false,
"canBePlacedOnCharacter": true,
"affectOnlyGround": false,
@@ -44,7 +44,7 @@
"targetConditionAsset": null,
"targetSide": "Enemy",
"durationType": "Instantaneous",
- "durationParameter": 0,
+ "durationParameter": 1,
"endOfEffect": "EndOfTurn",
"hasSavingThrow": false,
"disableSavingThrowOnAllies": false,
@@ -161,8 +161,8 @@
"additionalWeaponDie": 0,
"alteredDuration": "None"
},
- "speedType": "CellsPerSeconds",
- "speedParameter": 9.5,
+ "speedType": "Instant",
+ "speedParameter": 10.0,
"offsetImpactTimeBasedOnDistance": false,
"offsetImpactTimeBasedOnDistanceFactor": 0.1,
"offsetImpactTimePerTarget": 0.0,
@@ -335,10 +335,10 @@
"effectAIParameters": {
"$type": "EffectAIParameters, Assembly-CSharp",
"aoeScoreMultiplier": 1.0,
- "cooldownForCaster": 2,
+ "cooldownForCaster": 0,
"cooldownForBattle": 0,
"sortingScoreMultiplier": 1.0,
- "dynamicCooldown": true
+ "dynamicCooldown": false
},
"animationMagicEffect": "Animation0",
"lightCounterDispellsEffect": false,
diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CloudOfDaggers.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CloudOfDaggers.json
index 94903b29c7..946e9222e8 100644
--- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CloudOfDaggers.json
+++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CloudOfDaggers.json
@@ -21,7 +21,7 @@
"targetType": "Cube",
"itemSelectionType": "None",
"targetParameter": 2,
- "targetParameter2": 2,
+ "targetParameter2": 0,
"emissiveBorder": "None",
"emissiveParameter": 1,
"requiresTargetProximity": false,
diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/IrresistiblePerformance.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/IrresistiblePerformance.json
index b49ba946b0..fce9d174d6 100644
--- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/IrresistiblePerformance.json
+++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/IrresistiblePerformance.json
@@ -21,7 +21,7 @@
"targetType": "Cube",
"itemSelectionType": "None",
"targetParameter": 6,
- "targetParameter2": 2,
+ "targetParameter2": 0,
"emissiveBorder": "None",
"emissiveParameter": 1,
"requiresTargetProximity": false,
diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/ResonatingStrike.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/ResonatingStrike.json
index 929a144a2f..6d0fe44297 100644
--- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/ResonatingStrike.json
+++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/ResonatingStrike.json
@@ -44,7 +44,7 @@
"targetConditionAsset": null,
"targetSide": "Enemy",
"durationType": "Round",
- "durationParameter": 1,
+ "durationParameter": 0,
"endOfEffect": "EndOfTurn",
"hasSavingThrow": false,
"disableSavingThrowOnAllies": false,
@@ -320,7 +320,7 @@
"$type": "GuiPresentation, Assembly-CSharp",
"hidden": false,
"title": "Spell/&ResonatingStrikeTitle",
- "description": "Spell/&ResonatingStrikeDescription",
+ "description": "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.",
"spriteReference": {
"$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables",
"m_AssetGUID": "0b77d7d8-cada-50c9-8e0d-8dbb46184739",
diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/SnillocSnowballStorm.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/SnillocSnowballStorm.json
index d6cac36da6..d359229ae1 100644
--- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/SnillocSnowballStorm.json
+++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/SnillocSnowballStorm.json
@@ -21,7 +21,7 @@
"targetType": "Cube",
"itemSelectionType": "None",
"targetParameter": 3,
- "targetParameter2": 2,
+ "targetParameter2": 0,
"emissiveBorder": "None",
"emissiveParameter": 1,
"requiresTargetProximity": false,
diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/SunlightBlade.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/SunlightBlade.json
index c13ddee1d1..d5ddd87944 100644
--- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/SunlightBlade.json
+++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/SunlightBlade.json
@@ -99,33 +99,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": "ConditionSunlightBladeMarked",
- "conditionDefinition": "Definition:ConditionSunlightBladeMarked:7f19eac4-e539-5805-ae41-40dcda6d3b23",
- "operation": "Add",
- "conditionsList": [],
- "applyToSelf": false,
- "forceOnSelf": false
- },
- "hasFilterId": false,
- "filterId": 0
}
],
"specialFormsDescription": "",
@@ -347,7 +320,7 @@
"$type": "GuiPresentation, Assembly-CSharp",
"hidden": false,
"title": "Spell/&SunlightBladeTitle",
- "description": "Spell/&SunlightBladeDescription",
+ "description": "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.",
"spriteReference": {
"$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables",
"m_AssetGUID": "be056650-f9ad-5dc3-98e9-acd10c9c362d",
diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/SwordStorm.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/SwordStorm.json
index a576cc8546..5156941210 100644
--- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/SwordStorm.json
+++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/SwordStorm.json
@@ -21,7 +21,7 @@
"targetType": "Cube",
"itemSelectionType": "None",
"targetParameter": 3,
- "targetParameter2": 2,
+ "targetParameter2": 0,
"emissiveBorder": "None",
"emissiveParameter": 1,
"requiresTargetProximity": false,
diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/ThunderStrike.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/ThunderStrike.json
index 90c40fec50..3d37ddde50 100644
--- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/ThunderStrike.json
+++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/ThunderStrike.json
@@ -21,7 +21,7 @@
"targetType": "Cube",
"itemSelectionType": "None",
"targetParameter": 3,
- "targetParameter2": 2,
+ "targetParameter2": 0,
"emissiveBorder": "None",
"emissiveParameter": 1,
"requiresTargetProximity": false,
diff --git a/Documentation/Items.md b/Documentation/Items.md
index 688cfc2adf..1d78032949 100644
--- a/Documentation/Items.md
+++ b/Documentation/Items.md
@@ -2232,7 +2232,7 @@ This unique weapon is an Anfarel family treasure. A powerful relic able to infli
# 559. - Shadow Blade [UB]
-It deals 2d8 psychic damage on a hit and has the finesse, light, and thrown properties.
+A dagger of solidified gloom.
# 560. - Shield [SOL]
diff --git a/Documentation/Spells.md b/Documentation/Spells.md
index c4d57ce8b1..2144380039 100644
--- a/Documentation/Spells.md
+++ b/Documentation/Spells.md
@@ -16,8 +16,7 @@ You extend your hand and trace a sigil of warding in the air. Until the end of y
# 5. - *Booming Blade* © (M,S) level 0 Evocation [UB]
-Make a melee attack with a weapon. On a hit, the target suffers the attack's normal effects, and then becomes sheathed in booming energy until the start of your next turn. If the target willingly moves 5 feet or more before then, the target takes 1d8 thunder damage, and the spell ends.
-At 5th level, the melee attack and the damage the target takes for moving deals extra 1d8 thunder damage. Both damage rolls increase by 1d8 at 11th and 17th levels.
+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]
@@ -41,8 +40,7 @@ Launch a fire bolt.
# 11. - *Green-Flame Blade* © (M,S) level 0 Evocation [UB]
-Select one creature within melee range of you and a different creature that you can see within 5 ft of main target. You make a melee attack with current weapon against first creature. On a hit, the target suffers the weapon attack's normal effects, and flames leap to second target, dealing fire damage equal to your spellcasting ability modifier.
-At 5th level, the melee attack deals 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.
+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]
@@ -58,8 +56,7 @@ Causes light sources such as torches and mana lamps in the area of effect to lig
# 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 feet in a random direction.
-This spell's damage increases by 1d6 when you reach 5th level (2d6), 11th level (3d6), and 17th level (4d6).
+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]
@@ -71,8 +68,7 @@ An object you can touch emits a powerful light for a limited time.
# 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 feet of you. The target must succeed on a Strength saving throw or be pulled up to 10 feet in a straight line toward you and then take 1d8 lightning damage.
-This spell's damage increases by 1d8 when you reach 5th level (2d8), 11th level (3d8), and 17th level (4d8).
+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]
@@ -80,7 +76,7 @@ You drive a disorienting spike of psychic energy into the mind of one creature y
# 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 feet 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.
+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]
@@ -88,8 +84,7 @@ Fire a poison spray at an enemy you can see, within range.
# 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 feet of you. On a hit, the target takes 1d10 acid damage.
-This spell's damage increases by 1d6 when you reach 5th level (2d6), 11th level (3d6), and 17th level (4d6).
+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]
@@ -141,13 +136,11 @@ Target up to three objects that can be illuminated and light them up immediately
# 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.
-This spell's damage increases by 1d8 when you reach levels 5 (2d8), 11 (3d8), and 17 (4d8).
+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]
-Make a melee attack with a weapon. On a hit, the target suffers the 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 level and 17th level.
+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]
@@ -159,8 +152,7 @@ You create a long, whip-like vine covered in thorns that lashes out at your comm
# 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.
-This spell's damage increases by 1d6 when you reach 5th level (2d6), 11th level (3d6), and 17th level (4d6).
+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]
@@ -610,7 +602,7 @@ You can see invisible creatures.
# 148. - *Shadow Blade* © (V,S) level 2 Illusion [Concentration] [UB]
-You weave together threads of shadow to create a sword of solidified gloom in your hand.
+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]
diff --git a/Documentation/Subclasses.md b/Documentation/Subclasses.md
index 3dd3730c45..63a77e866d 100644
--- a/Documentation/Subclasses.md
+++ b/Documentation/Subclasses.md
@@ -861,6 +861,8 @@ As an action, you can open your awareness to the presence of concentrated magic.
When you enter your rage, roll on the Wild Magic table to determine the magical effect produced. If the effect requires a saving throw, the DC equals 8 + your proficiency bonus + your Constitution modifier.
+Once per rage, you can use your bonus action to reroll on the Wild Magic table. The new effect will replace your current Wild Magic effect.
+
Wild Magic Table:
- Each creature within 30 feet of you must succeed on a Constitution saving throw or take 1d12 necrotic damage. You also gain 1d12 temporary hit points.
- You teleport up to 30 feet to an unoccupied space you can see. Until your rage ends, you can use this effect again on each of your turns as a bonus action.
@@ -3842,6 +3844,20 @@ After you make an attack roll with a monk weapon or an unarmed attack, and criti
After you make an attack roll with a monk weapon or an unarmed attack, and critically hit, you refund 1 Ki point.
+### Level 11
+
+* Brutal Weal
+
+After you make an attack roll with a monk weapon or an unarmed attack, and critically hit, you deal additional damage equal to one roll of your martial arts die.
+
+
+### Level 17
+
+* Their Woe
+
+After you make an attack roll with a monk weapon or an unarmed attack, and critically miss, you instead deal the Woe damage to the target instead of yourself.
+
+
## 10. Way of Zen Archery [UB]
diff --git a/SolastaUnfinishedBusiness/Actions/CharacterActionQuickened.cs b/SolastaUnfinishedBusiness/Actions/CharacterActionQuickened.cs
deleted file mode 100644
index 766846c0d8..0000000000
--- a/SolastaUnfinishedBusiness/Actions/CharacterActionQuickened.cs
+++ /dev/null
@@ -1,43 +0,0 @@
-using System.Collections;
-using JetBrains.Annotations;
-using SolastaUnfinishedBusiness.Api.GameExtensions;
-using SolastaUnfinishedBusiness.Api.Helpers;
-using static RuleDefinitions;
-using static SolastaUnfinishedBusiness.Api.DatabaseHelper.MetamagicOptionDefinitions;
-
-//This should have default namespace so that it can be properly created by `CharacterActionPatcher`
-// ReSharper disable once CheckNamespace
-[UsedImplicitly]
-#pragma warning disable CA1050
-public class CharacterActionQuickened(CharacterActionParams actionParams) : CharacterAction(actionParams)
-#pragma warning restore CA1050
-{
- public override IEnumerator ExecuteImpl()
- {
- var rulesetCharacter = ActingCharacter.RulesetCharacter;
- var hero = rulesetCharacter.GetOriginalHero();
-
- if (hero == null)
- {
- yield break;
- }
-
- ActingCharacter.SpendActionType(ActionDefinitions.ActionType.Bonus);
- hero.SpendSorceryPoints(2);
- hero.InflictCondition(
- "ConditionSorcererQuickenedCastMain",
- DurationType.Round,
- 0,
- TurnOccurenceType.EndOfTurn,
- AttributeDefinitions.TagEffect,
- hero.guid,
- hero.CurrentFaction.Name,
- 1,
- "ConditionSorcererQuickenedCastMain",
- 0,
- 0,
- 0);
- hero.LogCharacterActivatesAbility(
- MetamagicQuickenedSpell.FormatTitle(), "Feedback/&MetamagicActivatedShortLine");
- }
-}
diff --git a/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs b/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs
index 28a0b0b68b..916e33a072 100644
--- a/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs
+++ b/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs
@@ -1796,9 +1796,6 @@ internal static class FeatureDefinitionPowers
internal static FeatureDefinitionPower PowerDefilerMistyFormEscape { get; } =
GetDefinition("PowerDefilerMistyFormEscape");
- internal static FeatureDefinitionPower PowerDispelEvilBreakEnchantment { get; } =
- GetDefinition("PowerDispelEvilBreakEnchantment");
-
internal static FeatureDefinitionPower PowerDruidCircleBalanceBalanceOfPower { get; } =
GetDefinition("PowerDruidCircleBalanceBalanceOfPower");
@@ -3153,9 +3150,6 @@ internal static class MerchantDefinitions
internal static class MetamagicOptionDefinitions
{
- internal static MetamagicOptionDefinition MetamagicEmpoweredSpell { get; } =
- GetDefinition("MetamagicEmpoweredSpell");
-
internal static MetamagicOptionDefinition MetamagicQuickenedSpell { get; } =
GetDefinition("MetamagicQuickenedSpell");
diff --git a/SolastaUnfinishedBusiness/Api/GameExtensions/EnumExtensions.cs b/SolastaUnfinishedBusiness/Api/GameExtensions/EnumExtensions.cs
index b1258f6f6d..be7171b530 100644
--- a/SolastaUnfinishedBusiness/Api/GameExtensions/EnumExtensions.cs
+++ b/SolastaUnfinishedBusiness/Api/GameExtensions/EnumExtensions.cs
@@ -70,7 +70,8 @@ internal enum ExtraActionId
WildSurgeSummonFree,
WildSurgeTeleport,
WildSurgeTeleportFree,
- Quickened,
+ WildSurgeReroll,
+ CastQuickened,
ZenShotToggle,
PrioritizeAction = 10000
}
diff --git a/SolastaUnfinishedBusiness/Api/GameExtensions/GameLocationCharacterExtensions.cs b/SolastaUnfinishedBusiness/Api/GameExtensions/GameLocationCharacterExtensions.cs
index 9badffacc3..8543bac156 100644
--- a/SolastaUnfinishedBusiness/Api/GameExtensions/GameLocationCharacterExtensions.cs
+++ b/SolastaUnfinishedBusiness/Api/GameExtensions/GameLocationCharacterExtensions.cs
@@ -70,9 +70,9 @@ internal static void MyExecuteActionCastNoCost(
internal static void MyExecuteActionPowerNoCost(
this GameLocationCharacter character,
RulesetUsablePower usablePower,
- List targets)
+ params GameLocationCharacter[] targets)
{
- var actionModifiers = GetActionModifiers(targets.Count);
+ var actionModifiers = GetActionModifiers(targets.Length);
var rulesetCharacter = character.RulesetCharacter;
var implementationManager =
ServiceRepository.GetService() as RulesetImplementationManager;
@@ -82,10 +82,10 @@ internal static void MyExecuteActionPowerNoCost(
ActionModifiers = actionModifiers,
RulesetEffect = implementationManager.MyInstantiateEffectPower(rulesetCharacter, usablePower, false),
UsablePower = usablePower,
- targetCharacters = targets
+ targetCharacters = [.. targets]
};
- ServiceRepository.GetService()?.ExecuteAction(actionParams, null, true);
+ ServiceRepository.GetService().ExecuteAction(actionParams, null, true);
}
internal static void MyExecuteActionStabilizeAndStandUp(
@@ -180,8 +180,7 @@ internal static IEnumerator MyReactToCastSpell(
RulesetEffect = ServiceRepository.GetService()
.InstantiateEffectSpell(ruleCaster, repertoire, spell, slotLevel, false),
SpellRepertoire = repertoire,
- TargetCharacters = { target },
- IsReactionEffect = true
+ TargetCharacters = { target }
};
var count = actionService.PendingReactionRequestGroups.Count;
@@ -260,8 +259,7 @@ internal static IEnumerator MyReactToSpendPower(
StringParameter2 = stringParameter2,
RulesetEffect =
implementationManager.MyInstantiateEffectPower(character.RulesetCharacter, usablePower, false),
- UsablePower = usablePower,
- IsReactionEffect = true
+ UsablePower = usablePower
};
actionService.ReactToSpendPower(actionParams);
@@ -305,8 +303,7 @@ internal static IEnumerator MyReactToSpendPowerBundle(
RulesetEffect =
implementationManager.MyInstantiateEffectPower(character.RulesetCharacter, usablePower, false),
UsablePower = usablePower,
- targetCharacters = targets,
- IsReactionEffect = true
+ targetCharacters = targets
};
var reactionRequest = new ReactionRequestSpendBundlePower(actionParams);
@@ -356,8 +353,7 @@ internal static IEnumerator MyReactToUsePower(
RulesetEffect =
implementationManager.MyInstantiateEffectPower(character.RulesetCharacter, usablePower, false),
UsablePower = usablePower,
- targetCharacters = targets,
- IsReactionEffect = true
+ targetCharacters = targets
};
actionService.ReactToUsePower(actionParams, "UsePower", character);
@@ -631,6 +627,18 @@ internal static void IncrementSpecialFeatureUses(this GameLocationCharacter inst
instance.UsedSpecialFeatures.AddOrReplace(key, instance.UsedSpecialFeatures.GetValueOrDefault(key) + 1);
}
+ internal static void SetSpecialFeatureUses(this GameLocationCharacter instance, string key, int value)
+ {
+ instance.UsedSpecialFeatures.AddOrReplace(key, value);
+ }
+
+ internal static int GetSpecialFeatureUses(this GameLocationCharacter instance, string key, int def = -1)
+ {
+ return instance.UsedSpecialFeatures.TryGetValue(key, out var value)
+ ? value
+ : def;
+ }
+
internal static bool OncePerTurnIsValid(this GameLocationCharacter instance, string key)
{
return !instance.UsedSpecialFeatures.ContainsKey(key);
@@ -767,9 +775,24 @@ internal static void HandleMonkMartialArts(this GameLocationCharacter instance)
UsablePower = usablePower
};
- ServiceRepository.GetService()?.ExecuteAction(actionParams, null, true);
+ ServiceRepository.GetService().ExecuteAction(actionParams, null, true);
}
+ private static int GetAllowedMainAttacks(this GameLocationCharacter instance)
+ {
+ var performanceFilters = instance.actionPerformancesByType[ActionType.Main];
+ var index = instance.currentActionRankByType[ActionType.Main];
+
+ var maxAttacks = instance.RulesetCharacter.AttackModes
+ .Where(mode => mode.ActionType == ActionType.Main)
+ .Max(mode => mode.AttacksNumber);
+
+ var maxAllowedAttacks = index >= performanceFilters.Count ? -1 : performanceFilters[index].MaxAttacksNumber;
+
+ return maxAllowedAttacks < 0 || maxAllowedAttacks > maxAttacks ? maxAttacks : maxAllowedAttacks;
+ }
+
+
internal static void BurnOneMainAttack(this GameLocationCharacter instance)
{
if (Gui.Battle == null)
@@ -787,10 +810,9 @@ internal static void BurnOneMainAttack(this GameLocationCharacter instance)
rulesetCharacter.ExecutedAttacks++;
rulesetCharacter.RefreshAttackModes();
- var maxAttacks = rulesetCharacter.AttackModes
- .FirstOrDefault(attackMode => attackMode.ActionType == ActionType.Main)?.AttacksNumber ?? 0;
+ var allowedMainAttacks = instance.GetAllowedMainAttacks();
- if (instance.UsedMainAttacks < maxAttacks)
+ if (instance.UsedMainAttacks < allowedMainAttacks)
{
return;
}
diff --git a/SolastaUnfinishedBusiness/Api/GameExtensions/RulesetSpellRepertoireExtensions.cs b/SolastaUnfinishedBusiness/Api/GameExtensions/RulesetSpellRepertoireExtensions.cs
index a2b3a3b6a9..1b88366145 100644
--- a/SolastaUnfinishedBusiness/Api/GameExtensions/RulesetSpellRepertoireExtensions.cs
+++ b/SolastaUnfinishedBusiness/Api/GameExtensions/RulesetSpellRepertoireExtensions.cs
@@ -1,4 +1,6 @@
-using SolastaUnfinishedBusiness.Api.Helpers;
+using JetBrains.Annotations;
+using SolastaUnfinishedBusiness.Api.Helpers;
+using SolastaUnfinishedBusiness.Behaviors;
namespace SolastaUnfinishedBusiness.Api.GameExtensions;
@@ -11,6 +13,13 @@ public static RulesetCharacterHero GetCasterHero(this RulesetSpellRepertoire rep
?? Global.InspectedHero;
}
+ [CanBeNull]
+ public static CharacterClassDefinition GetCastingClass(this RulesetSpellRepertoire repertoire)
+ {
+ return repertoire.SpellCastingFeature.GetFirstSubFeatureOfType()?.Class
+ ?? repertoire.SpellCastingClass;
+ }
+
public static bool AtLeastOneSpellSlotAvailable(this RulesetSpellRepertoire repertoire)
{
for (var spellLevel = 1;
diff --git a/SolastaUnfinishedBusiness/Api/Infrastructure/SerializableDictionary.cs b/SolastaUnfinishedBusiness/Api/Infrastructure/SerializableDictionary.cs
index 83369cd04e..b1319e3d2c 100644
--- a/SolastaUnfinishedBusiness/Api/Infrastructure/SerializableDictionary.cs
+++ b/SolastaUnfinishedBusiness/Api/Infrastructure/SerializableDictionary.cs
@@ -20,6 +20,7 @@ public void AddMissingKeys(IUpdatableSettings from)
{
if (from is SerializableDictionary fromDict)
{
+ // ReSharper disable once UsageOfDefaultStructEquality
_ = this.Union(fromDict.Where(k => !ContainsKey(k.Key))).ToDictionary(k => k.Key, v => v.Value);
}
}
diff --git a/SolastaUnfinishedBusiness/Api/ModKit/UI+Toggles.cs b/SolastaUnfinishedBusiness/Api/ModKit/UI+Toggles.cs
index 92c88970dd..6180eea4c4 100644
--- a/SolastaUnfinishedBusiness/Api/ModKit/UI+Toggles.cs
+++ b/SolastaUnfinishedBusiness/Api/ModKit/UI+Toggles.cs
@@ -67,8 +67,6 @@ private static bool TogglePrivate(
{
return false;
}
-
- value = !value;
}
else
{
@@ -76,10 +74,10 @@ private static bool TogglePrivate(
{
return false;
}
-
- value = !value;
}
+ value = !value;
+
return true;
}
diff --git a/SolastaUnfinishedBusiness/Behaviors/AddExtraAttack.cs b/SolastaUnfinishedBusiness/Behaviors/AddExtraAttack.cs
index 23974540d4..0137fbdcd0 100644
--- a/SolastaUnfinishedBusiness/Behaviors/AddExtraAttack.cs
+++ b/SolastaUnfinishedBusiness/Behaviors/AddExtraAttack.cs
@@ -457,6 +457,7 @@ protected override List GetAttackModes([NotNull] RulesetChara
if (duelingTrend.sourceName == "Dueling")
{
damageForm.BonusDamage -= 2;
+ // ReSharper disable once UsageOfDefaultStructEquality
damageForm.DamageBonusTrends.Remove(duelingTrend);
}
diff --git a/SolastaUnfinishedBusiness/Behaviors/ClassHolder.cs b/SolastaUnfinishedBusiness/Behaviors/ClassHolder.cs
new file mode 100644
index 0000000000..1ecefd5d2c
--- /dev/null
+++ b/SolastaUnfinishedBusiness/Behaviors/ClassHolder.cs
@@ -0,0 +1,23 @@
+using SolastaUnfinishedBusiness.Classes;
+using clazz = SolastaUnfinishedBusiness.Api.DatabaseHelper.CharacterClassDefinitions;
+
+namespace SolastaUnfinishedBusiness.Behaviors;
+
+///
+/// Used for IAdditionalDamageProvider features to allow its damage to scale with class level (using
+/// DiceByRankTable), even if it isn't directly added to the class (via AddFeaturesAtLevel).
+/// Used by Magic Initiate feats to specify class so that Potent Spellcaster feats can recognize proper class.
+///
+public record ClassHolder(CharacterClassDefinition Class)
+{
+ public static readonly ClassHolder Barbarian = new(clazz.Barbarian);
+ public static readonly ClassHolder Bard = new(clazz.Bard);
+ public static readonly ClassHolder Cleric = new(clazz.Cleric);
+ public static readonly ClassHolder Druid = new(clazz.Druid);
+ public static readonly ClassHolder Inventor = new(InventorClass.Class);
+ public static readonly ClassHolder Rogue = new(clazz.Rogue);
+ public static readonly ClassHolder Sorcerer = new(clazz.Sorcerer);
+ public static readonly ClassHolder Warlock = new(clazz.Warlock);
+ public static readonly ClassHolder Wizard = new(clazz.Wizard);
+ public readonly CharacterClassDefinition Class = Class;
+}
diff --git a/SolastaUnfinishedBusiness/Behaviors/PowerProvider.cs b/SolastaUnfinishedBusiness/Behaviors/PowerProvider.cs
index 168f21639e..96b60c1398 100644
--- a/SolastaUnfinishedBusiness/Behaviors/PowerProvider.cs
+++ b/SolastaUnfinishedBusiness/Behaviors/PowerProvider.cs
@@ -14,7 +14,7 @@ internal static class PowerProvider
[NotNull]
internal static RulesetUsablePower Get(FeatureDefinitionPower power, [CanBeNull] RulesetCharacter actor = null)
{
- var result = (RulesetUsablePower)null;
+ RulesetUsablePower result = null;
if (actor != null)
{
diff --git a/SolastaUnfinishedBusiness/Behaviors/Specific/AttackAfterMagicEffect.cs b/SolastaUnfinishedBusiness/Behaviors/Specific/AttackAfterMagicEffect.cs
index 4563217cfd..8faedf0c03 100644
--- a/SolastaUnfinishedBusiness/Behaviors/Specific/AttackAfterMagicEffect.cs
+++ b/SolastaUnfinishedBusiness/Behaviors/Specific/AttackAfterMagicEffect.cs
@@ -20,14 +20,22 @@ internal sealed class AttackAfterMagicEffect : IFilterTargetingCharacter
public bool IsValid(CursorLocationSelectTarget __instance, GameLocationCharacter target)
{
- var isValid = CanAttack(__instance.ActionParams.ActingCharacter, target);
+ // only enforce weapon reach or 5 ft on first target
+ if (__instance.SelectionService.SelectedTargets.Count != 0)
+ {
+ return true;
+ }
- if (!isValid)
+ if (CanAttack(__instance.ActionParams.ActingCharacter, target))
{
- __instance.actionModifier.FailureFlags.Add("Tooltip/&TargetMeleeWeaponError");
+ return true;
}
- return isValid;
+ var text = Main.Settings.AllowBladeCantripsToUseReach ? "Feedback/&WithinReach" : "Feedback/&Within5Ft";
+
+ __instance.actionModifier.FailureFlags.Add(Gui.Format("Tooltip/&TargetMeleeWeaponError", text));
+
+ return false;
}
internal static void HandleAttackAfterMagicEffect(GameLocationCharacter character,
@@ -87,7 +95,8 @@ internal static bool CanAttack([NotNull] GameLocationCharacter caster, GameLocat
evalParams.FillForPhysicalReachAttack(
caster, caster.LocationPosition, attackMode, target, target.LocationPosition, attackModifier);
- return battleService.CanAttack(evalParams);
+ return battleService.CanAttack(evalParams) &&
+ (Main.Settings.AllowBladeCantripsToUseReach || caster.IsWithinRange(target, 1));
}
internal static List PerformAttackAfterUse(CharacterActionMagicEffect actionMagicEffect)
@@ -154,12 +163,8 @@ internal static List PerformAttackAfterUse(CharacterActio
attackMode.AttackTags.TryAdd(ReplaceAttackCantrip);
}
- var twinned = false;
-
if (actionMagicEffect is CharacterActionCastSpell actionCastSpell)
{
- twinned = actionCastSpell.ActiveSpell.MetamagicOption == MetamagicTwinnedSpell;
-
//mark this attack for proper integration with Quickened
if (actionCastSpell.ActiveSpell.MetamagicOption == MetamagicQuickenedSpell)
{
@@ -167,27 +172,17 @@ internal static List PerformAttackAfterUse(CharacterActio
}
}
- var maxAttacks = 1 + (twinned ? 1 : 0);
-
// 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;
- foreach (var target in targets)
- {
- var attackActionParams =
- new CharacterActionParams(caster, actionId) { AttackMode = attackMode };
-
- attackActionParams.TargetCharacters.Add(target);
- attackActionParams.ActionModifiers.Add(new ActionModifier());
- attacks.Add(attackActionParams);
+ var attackActionParams =
+ new CharacterActionParams(caster, actionId) { AttackMode = attackMode };
- if (attackActionParams.TargetCharacters.Count >= maxAttacks)
- {
- break;
- }
- }
+ attackActionParams.TargetCharacters.Add(targets[0]);
+ attackActionParams.ActionModifiers.Add(new ActionModifier());
+ attacks.Add(attackActionParams);
return attacks;
}
diff --git a/SolastaUnfinishedBusiness/Behaviors/UpgradeEffectDamageBonusBasedOnClassLevel.cs b/SolastaUnfinishedBusiness/Behaviors/UpgradeEffectDamageBonusBasedOnClassLevel.cs
new file mode 100644
index 0000000000..2ee36f3c3a
--- /dev/null
+++ b/SolastaUnfinishedBusiness/Behaviors/UpgradeEffectDamageBonusBasedOnClassLevel.cs
@@ -0,0 +1,32 @@
+using System;
+using SolastaUnfinishedBusiness.Api.GameExtensions;
+using SolastaUnfinishedBusiness.Interfaces;
+
+namespace SolastaUnfinishedBusiness.Behaviors;
+
+internal sealed class UpgradeEffectDamageBonusBasedOnClassLevel(
+ BaseDefinition baseDefinition,
+ CharacterClassDefinition characterClassDefinition,
+ double modifier = 1) : IModifyEffectDescription
+{
+ public bool IsValid(
+ BaseDefinition definition,
+ RulesetCharacter character,
+ EffectDescription effectDescription)
+ {
+ return baseDefinition == definition;
+ }
+
+ public EffectDescription GetEffectDescription(
+ BaseDefinition definition,
+ EffectDescription effectDescription,
+ RulesetCharacter rulesetCharacter,
+ RulesetEffect rulesetEffect)
+ {
+ var bonus = (int)Math.Ceiling(rulesetCharacter.GetClassLevel(characterClassDefinition) * modifier);
+
+ effectDescription.FindFirstDamageForm().BonusDamage = bonus;
+
+ return effectDescription;
+ }
+}
diff --git a/SolastaUnfinishedBusiness/Behaviors/UpgradeSpellRangeBasedOnWeaponReach.cs b/SolastaUnfinishedBusiness/Behaviors/UpgradeEffectRangeBasedOnWeaponReach.cs
similarity index 51%
rename from SolastaUnfinishedBusiness/Behaviors/UpgradeSpellRangeBasedOnWeaponReach.cs
rename to SolastaUnfinishedBusiness/Behaviors/UpgradeEffectRangeBasedOnWeaponReach.cs
index dc1b08f743..d86879218e 100644
--- a/SolastaUnfinishedBusiness/Behaviors/UpgradeSpellRangeBasedOnWeaponReach.cs
+++ b/SolastaUnfinishedBusiness/Behaviors/UpgradeEffectRangeBasedOnWeaponReach.cs
@@ -2,7 +2,7 @@
namespace SolastaUnfinishedBusiness.Behaviors;
-internal sealed class UpgradeSpellRangeBasedOnWeaponReach(BaseDefinition baseDefinition) : IModifyEffectDescription
+internal sealed class UpgradeEffectRangeBasedOnWeaponReach(BaseDefinition baseDefinition) : IModifyEffectDescription
{
public bool IsValid(
BaseDefinition definition,
@@ -17,38 +17,25 @@ public bool IsValid(
var caster = GameLocationCharacter.GetFromActor(character);
var attackMode = caster?.FindActionAttackMode(ActionDefinitions.Id.AttackMain);
- if (caster == null || attackMode is not { SourceObject: RulesetItem })
- {
- return false;
- }
-
- if (attackMode.Ranged || !attackMode.Reach)
- {
- return false;
- }
-
- var reach = attackMode.reachRange;
-
- return reach > 1;
+ return attackMode is { SourceObject: RulesetItem, Ranged: false, Reach: true, ReachRange: > 1 };
}
public EffectDescription GetEffectDescription(
BaseDefinition definition,
EffectDescription effectDescription,
- RulesetCharacter character,
+ RulesetCharacter rulesetCharacter,
RulesetEffect rulesetEffect)
{
- var caster = GameLocationCharacter.GetFromActor(character);
+ var character = GameLocationCharacter.GetFromActor(rulesetCharacter);
- if (caster == null)
+ if (character == null)
{
return effectDescription;
}
- var attackMode = caster.FindActionAttackMode(ActionDefinitions.Id.AttackMain);
- var reach = attackMode.reachRange;
+ var attackMode = character.FindActionAttackMode(ActionDefinitions.Id.AttackMain);
- effectDescription.rangeParameter = reach;
+ effectDescription.rangeParameter = attackMode.ReachRange;
return effectDescription;
}
diff --git a/SolastaUnfinishedBusiness/Builders/ActionDefinitionBuilder.cs b/SolastaUnfinishedBusiness/Builders/ActionDefinitionBuilder.cs
index 77408764c8..84a51e63f4 100644
--- a/SolastaUnfinishedBusiness/Builders/ActionDefinitionBuilder.cs
+++ b/SolastaUnfinishedBusiness/Builders/ActionDefinitionBuilder.cs
@@ -57,11 +57,16 @@ public ActionDefinitionBuilder OverrideClassName(string name)
internal ActionDefinitionBuilder SetActivatedPower(
FeatureDefinitionPower power,
- ActionDefinitions.ActionParameter parameter = ActionDefinitions.ActionParameter.ActivatePower,
+ // ActionDefinitions.ActionParameter parameter = ActionDefinitions.ActionParameter.ActivatePower,
bool usePowerTooltip = true)
{
Definition.activatedPower = power;
Definition.displayPowerTooltip = usePowerTooltip;
+ return SetParameter(ActionDefinitions.ActionParameter.ActivatePower);
+ }
+
+ internal ActionDefinitionBuilder SetParameter(ActionDefinitions.ActionParameter parameter)
+ {
Definition.parameter = parameter;
return this;
}
diff --git a/SolastaUnfinishedBusiness/ChangelogHistory.txt b/SolastaUnfinishedBusiness/ChangelogHistory.txt
index 800948dc21..e8e49a77d7 100644
--- a/SolastaUnfinishedBusiness/ChangelogHistory.txt
+++ b/SolastaUnfinishedBusiness/ChangelogHistory.txt
@@ -1,3 +1,28 @@
+1.5.97.27:
+
+- added Gameplay > Crafting, Items & Merchants > 'Enable Monk handwraps and gauntlets to work in gauntlet slot' setting
+- added Gameplay > Rules > 'Allow Blade Cantrips to use reach instead of 5 ft' setting
+- added Gameplay > Rules > 'Enable quick cast Light Cantrip to use head, neck or torso worn items first' setting
+- added Gameplay > Rules > 'Enable Teleport to remove all restrained conditions from target' setting
+- added Path of Wild Magic wild surge reroll power
+- fixed blade cantrips getting offered twinned metamagic, and not scaling 2nd target damage
+- fixed Domain Tempest destructive wrath sometimes triggering when out of charges
+- fixed inventory filtering and sorting to also work under multiplayer
+- fixed Paladin aura powers, modded and vanilla, to not clutter the action bar
+- fixed Path of Wild Magic rage damage not applying to thrown weapons
+- fixed Potent Spellcaster feat affecting all cantrips regardless of source
+- fixed RESPEC not registering new hero correctly
+- fixed Spend Power action not triggering DamageReceived, ReactionToDamageShare, and TargetReducedToZeroHP [VANILLA]
+- fixed Slow condition interaction with custom actions that spend bonus or main
+- fixed Way of Weal and Woe missing 11 and 17 descriptions on level up
+- improved Quickened action to show spell selection panel, and cast main spell with quickened metamagic applied
+- improved Shadow Blade spell to name ADV as 'Shadow Blade', and show ADV feature on dagger and spell descriptions
+
+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.26:
- fixed Absorb Elements spell triggering behavior
@@ -16,11 +41,6 @@
- improved Chaos Bolt spell tooltip to present damage symbols, and correct 1d6 damage progression
- improved Time Stop spell to behave as in tabletop, and grant 1d4+1 additional turns during combat
-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.25:
- added Gameplay > Character > 'Enable Sorcerer quickened action to allow cast leveled main in the end'
diff --git a/SolastaUnfinishedBusiness/Classes/InventorClass.cs b/SolastaUnfinishedBusiness/Classes/InventorClass.cs
index 1b17ca0467..33940c451a 100644
--- a/SolastaUnfinishedBusiness/Classes/InventorClass.cs
+++ b/SolastaUnfinishedBusiness/Classes/InventorClass.cs
@@ -836,7 +836,7 @@ private static ItemDefinition BuildWandOfSpell(SpellDefinition spell)
.SetOrUpdateGuiPresentation(title, description)
.SetRequiresIdentification(false)
.HideFromDungeonEditor()
- .AddCustomSubFeatures(ModifyAdditionalDamageClassLevelInventor.Instance)
+ .AddCustomSubFeatures(ClassHolder.Inventor)
.SetCosts(Costs)
.SetUsableDeviceDescription(new UsableDeviceDescriptionBuilder()
.SetUsage(EquipmentDefinitions.ItemUsage.Charges)
@@ -910,10 +910,8 @@ public IEnumerator HandleReducedToZeroHpByEnemy(
yield break;
}
- yield return defender.MyReactToUsePower(
- ActionDefinitions.Id.PowerNoCost,
+ yield return defender.MyReactToSpendPower(
usablePower,
- [defender],
attacker,
"SoulOfArtifice",
reactionValidated: ReactionValidated);
@@ -1076,10 +1074,8 @@ public IEnumerator OnTryAlterOutcomeSavingThrow(
yield break;
}
- yield return helper.MyReactToUsePower(
- ActionDefinitions.Id.PowerReaction,
+ yield return helper.MyReactToSpendPower(
usablePower,
- [helper],
attacker,
"InventorFlashOfGenius",
FormatReactionDescription(action, attacker, defender, helper),
diff --git a/SolastaUnfinishedBusiness/CustomUI/StopPowerConcentrationProvider.cs b/SolastaUnfinishedBusiness/CustomUI/StopPowerConcentrationProvider.cs
index 2e353ff9ec..b981e40a06 100644
--- a/SolastaUnfinishedBusiness/CustomUI/StopPowerConcentrationProvider.cs
+++ b/SolastaUnfinishedBusiness/CustomUI/StopPowerConcentrationProvider.cs
@@ -43,10 +43,10 @@ public void Stop(RulesetCharacter character)
SkipAnimationsAndVFX = true
};
- ServiceRepository.GetService()?
+ ServiceRepository.GetService()
.ExecuteAction(actionParams, _ => { }, false);
#endif
- locationCharacter.MyExecuteActionPowerNoCost(usablePower, [locationCharacter]);
+ locationCharacter.MyExecuteActionPowerNoCost(usablePower, locationCharacter);
}
}
diff --git a/SolastaUnfinishedBusiness/DataMiner/EffectFormVerification.cs b/SolastaUnfinishedBusiness/DataMiner/EffectFormVerification.cs
index 6d6342b864..a712299d49 100644
--- a/SolastaUnfinishedBusiness/DataMiner/EffectFormVerification.cs
+++ b/SolastaUnfinishedBusiness/DataMiner/EffectFormVerification.cs
@@ -51,11 +51,10 @@ internal static void VerifyUsage(EffectForm form, EffectForm.EffectFormType t
var path = Path.Combine(DiagnosticsContext.DiagnosticsFolder, LogName);
File.AppendAllLines(path,
- new[]
- {
- $"{Environment.NewLine}",
- "------------------------------------------------------------------------------------", msg
- });
+ [
+ $"{Environment.NewLine}",
+ "------------------------------------------------------------------------------------", msg
+ ]);
File.AppendAllText(path, Environment.StackTrace);
}
diff --git a/SolastaUnfinishedBusiness/DataMiner/ItemDefinitionVerification.cs b/SolastaUnfinishedBusiness/DataMiner/ItemDefinitionVerification.cs
index 339946c0a9..43e4de7ce4 100644
--- a/SolastaUnfinishedBusiness/DataMiner/ItemDefinitionVerification.cs
+++ b/SolastaUnfinishedBusiness/DataMiner/ItemDefinitionVerification.cs
@@ -56,11 +56,10 @@ internal static void VerifyUsage(ItemDefinition definition, bool hasFlag, ref
var path = Path.Combine(DiagnosticsContext.DiagnosticsFolder, LogName);
File.AppendAllLines(path,
- new[]
- {
- $"{Environment.NewLine}",
- "------------------------------------------------------------------------------------", msg
- });
+ [
+ $"{Environment.NewLine}",
+ "------------------------------------------------------------------------------------", msg
+ ]);
File.AppendAllText(path, Environment.StackTrace);
if (Mode.HasFlag(Verification.ReturnNull))
diff --git a/SolastaUnfinishedBusiness/Definitions/InvocationValidateDefinitionCustom.cs b/SolastaUnfinishedBusiness/Definitions/InvocationValidateDefinitionCustom.cs
index b06df3e8b1..595d28e513 100644
--- a/SolastaUnfinishedBusiness/Definitions/InvocationValidateDefinitionCustom.cs
+++ b/SolastaUnfinishedBusiness/Definitions/InvocationValidateDefinitionCustom.cs
@@ -35,7 +35,7 @@ internal Id BattleActionId
//TODO: add validator setter
public IEnumerable Validators { get; } =
- new IValidateDefinitionPreRequisites.Validate[] { CheckRequiredLevel, CheckRequiredSpell, CheckRequiredPact };
+ [CheckRequiredLevel, CheckRequiredSpell, CheckRequiredPact];
private static bool CheckRequiredLevel(
RulesetCharacter character,
diff --git a/SolastaUnfinishedBusiness/Displays/CharacterDisplay.cs b/SolastaUnfinishedBusiness/Displays/CharacterDisplay.cs
index 6f4822a1a8..d12fc11cfe 100644
--- a/SolastaUnfinishedBusiness/Displays/CharacterDisplay.cs
+++ b/SolastaUnfinishedBusiness/Displays/CharacterDisplay.cs
@@ -173,12 +173,6 @@ internal static void DisplayCharacter()
UI.Label();
}
- toggle = Main.Settings.EnableRelearnSpells;
- if (UI.Toggle(Gui.Localize("ModUi/&EnableRelearnSpells"), ref toggle, UI.AutoWidth()))
- {
- Main.Settings.EnableRelearnSpells = toggle;
- }
-
UI.Label();
toggle = Main.Settings.EnablesAsiAndFeat;
@@ -218,13 +212,6 @@ internal static void DisplayCharacter()
CharacterContext.SwitchSorcererMagicalGuidance();
}
- toggle = Main.Settings.EnableSorcererQuickenedAction;
- if (UI.Toggle(Gui.Localize("ModUi/&EnableSorcererQuickenedAction"), ref toggle, UI.AutoWidth()))
- {
- Main.Settings.EnableSorcererQuickenedAction = toggle;
- CharacterContext.SwitchSorcererQuickenedAction();
- }
-
toggle = Main.Settings.GrantScimitarSpecializationToBardRogue;
if (UI.Toggle(Gui.Localize("ModUi/&GrantScimitarSpecializationToBarkMonkRogue"), ref toggle, UI.AutoWidth()))
{
diff --git a/SolastaUnfinishedBusiness/Displays/GameUiDisplay.cs b/SolastaUnfinishedBusiness/Displays/GameUiDisplay.cs
index 7b982fe118..605c9213b7 100644
--- a/SolastaUnfinishedBusiness/Displays/GameUiDisplay.cs
+++ b/SolastaUnfinishedBusiness/Displays/GameUiDisplay.cs
@@ -153,12 +153,6 @@ internal static void DisplayGameUi()
UI.Label();
- toggle = Main.Settings.EnableAttributeCheckHelpersToWorkOffCombat;
- if (UI.Toggle(Gui.Localize("ModUi/&EnableAttributeCheckHelpersToWorkOffCombat"), ref toggle, UI.AutoWidth()))
- {
- Main.Settings.EnableAttributeCheckHelpersToWorkOffCombat = toggle;
- }
-
toggle = Main.Settings.EnableHeroWithBestProficiencyToRollChoice;
if (UI.Toggle(Gui.Localize("ModUi/&EnableHeroWithBestProficiencyToRollChoice"), ref toggle, UI.AutoWidth()))
{
diff --git a/SolastaUnfinishedBusiness/Displays/ItemsAndCraftingDisplay.cs b/SolastaUnfinishedBusiness/Displays/ItemsAndCraftingDisplay.cs
index cf01f97d95..e8a66f6816 100644
--- a/SolastaUnfinishedBusiness/Displays/ItemsAndCraftingDisplay.cs
+++ b/SolastaUnfinishedBusiness/Displays/ItemsAndCraftingDisplay.cs
@@ -103,6 +103,14 @@ private static void DisplayGeneral()
}
}
+ toggle = Main.Settings.EnableMonkHandwrapsUseGauntletSlot;
+ if (UI.Toggle(Gui.Localize(Gui.Localize("ModUi/&EnableMonkHandwrapsUseGauntletSlot")), ref toggle,
+ UI.AutoWidth()))
+ {
+ Main.Settings.EnableMonkHandwrapsUseGauntletSlot = toggle;
+ CustomWeaponsContext.UpdateHandWrapsUseGauntletSlot();
+ }
+
UI.Label();
var intValue = Main.Settings.RecipeCost;
diff --git a/SolastaUnfinishedBusiness/Displays/RulesDisplay.cs b/SolastaUnfinishedBusiness/Displays/RulesDisplay.cs
index 1049e425b4..9954ef2af6 100644
--- a/SolastaUnfinishedBusiness/Displays/RulesDisplay.cs
+++ b/SolastaUnfinishedBusiness/Displays/RulesDisplay.cs
@@ -201,6 +201,12 @@ internal static void DisplayRules()
Main.Settings.DontEndTurnAfterReady = toggle;
}
+ toggle = Main.Settings.EnableSorcererQuickenedAction;
+ if (UI.Toggle(Gui.Localize("ModUi/&EnableSorcererQuickenedAction"), ref toggle, UI.AutoWidth()))
+ {
+ Main.Settings.EnableSorcererQuickenedAction = toggle;
+ }
+
UI.Label();
toggle = Main.Settings.KeepInvisibilityWhenUsingItems;
@@ -376,6 +382,13 @@ internal static void DisplayRules()
UI.Label();
+ toggle = Main.Settings.AllowBladeCantripsToUseReach;
+ if (UI.Toggle(Gui.Localize("ModUi/&AllowBladeCantripsToUseReach"), ref toggle, UI.AutoWidth()))
+ {
+ Main.Settings.AllowBladeCantripsToUseReach = toggle;
+ SrdAndHouseRulesContext.SwitchAllowBladeCantripsToUseReach();
+ }
+
toggle = Main.Settings.AllowHasteCasting;
if (UI.Toggle(Gui.Localize("ModUi/&AllowHasteCasting"), ref toggle, UI.AutoWidth()))
{
@@ -395,6 +408,12 @@ internal static void DisplayRules()
Main.Settings.EnableCantripsTriggeringOnWarMagic = toggle;
}
+ toggle = Main.Settings.EnableRelearnSpells;
+ if (UI.Toggle(Gui.Localize("ModUi/&EnableRelearnSpells"), ref toggle, UI.AutoWidth()))
+ {
+ Main.Settings.EnableRelearnSpells = toggle;
+ }
+
toggle = Main.Settings.RemoveSchoolRestrictionsFromShadowCaster;
if (UI.Toggle(Gui.Localize("ModUi/&RemoveSchoolRestrictionsFromShadowCaster"), ref toggle, UI.AutoWidth()))
{
@@ -464,6 +483,12 @@ internal static void DisplayRules()
CharacterContext.SwitchDragonbornElementalBreathUsages();
}
+ toggle = Main.Settings.EnableAttributeCheckHelpersToWorkOffCombat;
+ if (UI.Toggle(Gui.Localize("ModUi/&EnableAttributeCheckHelpersToWorkOffCombat"), ref toggle, UI.AutoWidth()))
+ {
+ Main.Settings.EnableAttributeCheckHelpersToWorkOffCombat = toggle;
+ }
+
toggle = Main.Settings.EnableSignatureSpellsRelearn;
if (UI.Toggle(Gui.Localize("ModUi/&EnableSignatureSpellsRelearn"), ref toggle, UI.AutoWidth()))
{
@@ -512,6 +537,12 @@ internal static void DisplayRules()
Main.Settings.EnableHigherGroundRules = toggle;
}
+ toggle = Main.Settings.EnableTeleportToRemoveRestrained;
+ if (UI.Toggle(Gui.Localize("ModUi/&EnableTeleportToRemoveRestrained"), ref toggle, UI.AutoWidth()))
+ {
+ Main.Settings.EnableTeleportToRemoveRestrained = toggle;
+ }
+
toggle = Main.Settings.FullyControlConjurations;
if (UI.Toggle(Gui.Localize("ModUi/&FullyControlConjurations"), ref toggle, UI.AutoWidth()))
{
@@ -539,6 +570,14 @@ internal static void DisplayRules()
UI.Label();
+ toggle = Main.Settings.QuickCastLightCantripOnWornItemsFirst;
+ if (UI.Toggle(Gui.Localize("ModUi/&QuickCastLightCantripOnWornItemsFirst"), ref toggle, UI.AutoWidth()))
+ {
+ Main.Settings.QuickCastLightCantripOnWornItemsFirst = toggle;
+ }
+
+ UI.Label();
+
intValue = Main.Settings.SenseNormalVisionRangeMultiplier;
using (UI.HorizontalScope())
diff --git a/SolastaUnfinishedBusiness/Feats/ArmorFeats.cs b/SolastaUnfinishedBusiness/Feats/ArmorFeats.cs
index 99e9e1f2dc..685239dc6f 100644
--- a/SolastaUnfinishedBusiness/Feats/ArmorFeats.cs
+++ b/SolastaUnfinishedBusiness/Feats/ArmorFeats.cs
@@ -174,10 +174,8 @@ public IEnumerator OnMagicEffectBeforeHitConfirmedOnMe(
var usablePower = PowerProvider.Get(powerShieldTechniques, rulesetDefender);
- yield return defender.MyReactToUsePower(
- ActionDefinitions.Id.PowerNoCost,
+ yield return defender.MyReactToSpendPower(
usablePower,
- [defender],
attacker,
"ShieldTechniques",
reactionValidated: ReactionValidated,
diff --git a/SolastaUnfinishedBusiness/Feats/ClassFeats.cs b/SolastaUnfinishedBusiness/Feats/ClassFeats.cs
index 0c2daa0da4..40ca68c061 100644
--- a/SolastaUnfinishedBusiness/Feats/ClassFeats.cs
+++ b/SolastaUnfinishedBusiness/Feats/ClassFeats.cs
@@ -820,7 +820,7 @@ private static FeatDefinition BuildPotentSpellcaster(List feats)
.SetGuiPresentation(
Gui.Format("Feat/&FeatPotentSpellcasterTitle", classTitle),
Gui.Format("Feat/&FeatPotentSpellcasterDescription", classTitle))
- .AddCustomSubFeatures(new ModifyEffectDescriptionFeatPotentSpellcaster())
+ .AddCustomSubFeatures(new ModifyEffectDescriptionFeatPotentSpellcaster(classes[i]))
.SetValidators(validator)
.SetFeatFamily("PotentSpellcaster")
.AddToDB();
@@ -837,7 +837,7 @@ private static FeatDefinition BuildPotentSpellcaster(List feats)
return potentSpellcasterGroup;
}
- private sealed class ModifyEffectDescriptionFeatPotentSpellcaster
+ private sealed class ModifyEffectDescriptionFeatPotentSpellcaster(CharacterClassDefinition castingClass)
: IModifyEffectDescription, IModifyWeaponAttackMode
{
public bool IsValid(
@@ -845,7 +845,12 @@ public bool IsValid(
RulesetCharacter character,
EffectDescription effectDescription)
{
- return definition is SpellDefinition { SpellLevel: 0 };
+ if (definition is not SpellDefinition { SpellLevel: 0 } spell) { return false; }
+
+ var repertoires = new List();
+ character.GetSpellRepertoireFromDefinition(spell, allMatchingRepertoires: repertoires);
+
+ return repertoires.Any(r => r.GetCastingClass() == castingClass);
}
public EffectDescription GetEffectDescription(
diff --git a/SolastaUnfinishedBusiness/Feats/MeleeCombatFeats.cs b/SolastaUnfinishedBusiness/Feats/MeleeCombatFeats.cs
index f20f4e838b..b1a6254d78 100644
--- a/SolastaUnfinishedBusiness/Feats/MeleeCombatFeats.cs
+++ b/SolastaUnfinishedBusiness/Feats/MeleeCombatFeats.cs
@@ -1541,7 +1541,7 @@ public IEnumerator OnPhysicalAttackFinishedByMe(
var usablePower = PowerProvider.Get(power, rulesetAttacker);
- attacker.MyExecuteActionPowerNoCost(usablePower, [defender]);
+ attacker.MyExecuteActionPowerNoCost(usablePower, defender);
}
}
diff --git a/SolastaUnfinishedBusiness/Feats/OtherFeats.cs b/SolastaUnfinishedBusiness/Feats/OtherFeats.cs
index 7740b1c721..525ec16d19 100644
--- a/SolastaUnfinishedBusiness/Feats/OtherFeats.cs
+++ b/SolastaUnfinishedBusiness/Feats/OtherFeats.cs
@@ -292,18 +292,18 @@ private static FeatDefinition BuildMagicInitiate()
const string NAME = "FeatMagicInitiate";
var magicInitiateFeats = new List();
- var castSpells = new List
+ var castSpells = new List<(FeatureDefinitionCastSpell feature, ClassHolder clazz)>
{
- CastSpellBard,
- CastSpellCleric,
- CastSpellDruid,
- CastSpellSorcerer,
- CastSpellWarlock,
- CastSpellWizard
+ (CastSpellBard, ClassHolder.Bard),
+ (CastSpellCleric, ClassHolder.Cleric),
+ (CastSpellDruid, ClassHolder.Druid),
+ (CastSpellSorcerer, ClassHolder.Sorcerer),
+ (CastSpellWarlock, ClassHolder.Warlock),
+ (CastSpellWizard, ClassHolder.Wizard)
};
// ReSharper disable once ForeachCanBeConvertedToQueryUsingAnotherGetEnumerator
- foreach (var castSpell in castSpells)
+ foreach (var (castSpell, clazz) in castSpells)
{
var spellList = castSpell.SpellListDefinition;
var className = spellList.Name.Replace("SpellList", "");
@@ -329,7 +329,7 @@ private static FeatDefinition BuildMagicInitiate()
.SetKnownSpells(2, FeatureDefinitionCastSpellBuilder.CasterProgression.Flat)
.SetReplacedSpells(1, 0)
.SetUniqueLevelSlots(false)
- .AddCustomSubFeatures(new FeatHelpers.SpellTag(FeatMagicInitiateTag))
+ .AddCustomSubFeatures(new FeatHelpers.SpellTag(FeatMagicInitiateTag), clazz)
.AddToDB(),
FeatureDefinitionPointPoolBuilder
.Create($"PointPool{NAME}{className}Cantrip")
@@ -850,9 +850,7 @@ private static FeatDefinition BuildBalefulScion(List feats)
.Create(ActionAffinitySorcererMetamagicToggle, "ActionAffinityBalefulScionToggle")
.SetGuiPresentationNoContent(true)
.SetAuthorizedActions((ActionDefinitions.Id)ExtraActionId.BalefulScionToggle)
- .AddCustomSubFeatures(
- new CustomBehaviorBalefulScion(conditionBalefulScion, powerBalefulScion),
- new ValidateDefinitionApplication(ValidatorsCharacter.HasAvailablePowerUsage(powerBalefulScion)))
+ .AddCustomSubFeatures(new CustomBehaviorBalefulScion(conditionBalefulScion, powerBalefulScion))
.AddToDB();
var attributeIncreases = new List<(FeatureDefinition, string)>
@@ -1679,11 +1677,7 @@ private static FeatDefinition BuildGiftOfTheChromaticDragon()
.Create($"Power{Name}ReactiveResistance")
.SetGuiPresentation(Category.Feature, hidden: true)
.SetUsesProficiencyBonus(ActivationTime.NoCost)
- .SetEffectDescription(
- EffectDescriptionBuilder
- .Create()
- .SetCasterEffectParameters(PowerDispelEvilBreakEnchantment)
- .Build())
+ .SetShowCasting(false)
.AddToDB();
powerReactiveResistance.AddCustomSubFeatures(new CustomBehaviorReactiveResistance(powerReactiveResistance));
@@ -1770,13 +1764,11 @@ private IEnumerator HandleReaction(
var damageType = effectForm.DamageForm.DamageType;
var damageTitle = Gui.Localize($"Rules/&{damageType}Title");
- yield return defender.MyReactToUsePower(
- ActionDefinitions.Id.PowerReaction,
+ yield return defender.MyReactToSpendPower(
usablePower,
- [defender],
attacker,
"ReactiveResistance",
- "UseReactiveResistanceDescription".Formatted(Category.Reaction, attacker.Name, damageTitle),
+ "SpendPowerReactiveResistanceDescription".Formatted(Category.Reaction, attacker.Name, damageTitle),
ReactionValidated,
battleManager);
@@ -1784,6 +1776,8 @@ private IEnumerator HandleReaction(
void ReactionValidated()
{
+ defender.SpendActionType(ActionDefinitions.ActionType.Reaction);
+
var conditionName = $"ConditionGiftOfTheChromaticDragon{damageType}";
rulesetDefender.InflictCondition(
@@ -1899,9 +1893,8 @@ public EffectDescription GetEffectDescription(
RulesetEffect rulesetEffect)
{
var characterLevel = character.TryGetAttributeValue(AttributeDefinitions.CharacterLevel);
- var medicineBonus = character
- .ComputeBaseAbilityCheckBonus(
- AttributeDefinitions.Wisdom, rulesetEffect?.MagicAttackTrends, "Medicine");
+ var medicineBonus = character.ComputeBaseAbilityCheckBonus(
+ AttributeDefinitions.Wisdom, rulesetEffect?.MagicAttackTrends, "Medicine");
effectDescription.EffectForms[0].HealingForm.bonusHealing = characterLevel + medicineBonus;
@@ -2003,10 +1996,8 @@ public IEnumerator OnTryAlterOutcomeAttack(
yield break;
}
- yield return helper.MyReactToUsePower(
- ActionDefinitions.Id.PowerNoCost,
+ yield return helper.MyReactToSpendPower(
usablePower,
- [helper],
attacker,
stringParameter,
reactionValidated: ReactionValidated,
@@ -2089,10 +2080,8 @@ public IEnumerator OnTryAlterAttributeCheck(
yield break;
}
- yield return helper.MyReactToUsePower(
- ActionDefinitions.Id.PowerNoCost,
+ yield return helper.MyReactToSpendPower(
usablePower,
- [helper],
defender,
"LuckyCheck",
reactionValidated: ReactionValidated,
@@ -2162,15 +2151,12 @@ public IEnumerator OnTryAlterOutcomeSavingThrow(
yield break;
}
- yield return helper.MyReactToUsePower(
- ActionDefinitions.Id.PowerNoCost,
+ yield return helper.MyReactToSpendPower(
usablePower,
- [helper],
attacker,
"LuckySaving",
- "UseLuckySavingDescription".Formatted(Category.Reaction, defender.Name, attacker.Name, helper.Name),
- ReactionValidated,
- battleManager);
+ reactionValidated: ReactionValidated,
+ battleManager: battleManager);
yield break;
@@ -2342,7 +2328,7 @@ public IEnumerator OnTryAlterOutcomeSavingThrow(
usablePower,
attacker,
"MageSlayer",
- "CustomReactionMageSlayerDescription".Formatted(Category.Reaction, attacker.Name),
+ "SpendPowerMageSlayerDescription".Formatted(Category.Reaction, attacker.Name),
ReactionValidated,
battleManager);
@@ -2552,7 +2538,7 @@ private static IEnumerator PoisonTarget(GameLocationCharacter me, GameLocationCh
var usablePower = PowerProvider.Get(PowerFeatPoisonousSkin, rulesetMe);
- me.MyExecuteActionPowerNoCost(usablePower, [target]);
+ me.MyExecuteActionPowerNoCost(usablePower, target);
}
//Poison character that shoves me
@@ -2871,8 +2857,11 @@ public IEnumerator HandleReducedToZeroHpByMe(
var distance = attacker.UsedSpecialFeatures.TryGetValue(MercilessName, out var value) && value == 1
? proficiencyBonus
: (proficiencyBonus + 1) / 2;
- var targets = Gui.Battle.GetContenders(
- downedCreature, attacker, isOppositeSide: false, hasToPerceivePerceiver: true, withinRange: distance);
+ var targets =
+ Gui.Battle.GetContenders(
+ downedCreature, attacker, isOppositeSide: false, hasToPerceivePerceiver: true,
+ withinRange: distance)
+ .ToArray();
attacker.MyExecuteActionPowerNoCost(usablePower, targets);
}
diff --git a/SolastaUnfinishedBusiness/Feats/RaceFeats.cs b/SolastaUnfinishedBusiness/Feats/RaceFeats.cs
index 3f8502a9c2..e20d3d0f72 100644
--- a/SolastaUnfinishedBusiness/Feats/RaceFeats.cs
+++ b/SolastaUnfinishedBusiness/Feats/RaceFeats.cs
@@ -1427,13 +1427,11 @@ public EffectDescription GetEffectDescription(
{
var glc = GameLocationCharacter.GetFromActor(character);
- if (glc == null)
+ if (glc != null)
{
- return effectDescription;
+ effectDescription.rangeParameter = glc.MaxTacticalMoves;
}
- effectDescription.rangeParameter = glc.MaxTacticalMoves;
-
return effectDescription;
}
@@ -1552,8 +1550,6 @@ private static FeatDefinition BuildOrcishFury(List feats)
"ActionAffinityOrcishFuryToggle")
.SetGuiPresentationNoContent(true)
.SetAuthorizedActions((ActionDefinitions.Id)ExtraActionId.OrcishFuryToggle)
- .AddCustomSubFeatures(
- new ValidateDefinitionApplication(ValidatorsCharacter.HasAvailablePowerUsage(power)))
.AddToDB();
var orcishFuryStr = FeatDefinitionWithPrerequisitesBuilder
diff --git a/SolastaUnfinishedBusiness/Info.json b/SolastaUnfinishedBusiness/Info.json
index 926b77517b..a48595cd38 100644
--- a/SolastaUnfinishedBusiness/Info.json
+++ b/SolastaUnfinishedBusiness/Info.json
@@ -1,7 +1,7 @@
{
"Id": "SolastaUnfinishedBusiness",
"DisplayName": "[Un] Finished Business",
- "Version": "1.5.97.26",
+ "Version": "1.5.97.27",
"GameVersion": "1.5.97",
"ManagerVersion": "0.24.0",
"AssemblyName": "SolastaUnfinishedBusiness.dll",
diff --git a/SolastaUnfinishedBusiness/Interfaces/IModifyAdditionalDamageClassLevel.cs b/SolastaUnfinishedBusiness/Interfaces/IModifyAdditionalDamageClassLevel.cs
deleted file mode 100644
index a3d7e1a964..0000000000
--- a/SolastaUnfinishedBusiness/Interfaces/IModifyAdditionalDamageClassLevel.cs
+++ /dev/null
@@ -1,57 +0,0 @@
-using SolastaUnfinishedBusiness.Classes;
-using static SolastaUnfinishedBusiness.Api.DatabaseHelper.CharacterClassDefinitions;
-
-namespace SolastaUnfinishedBusiness.Interfaces;
-
-///
-/// Implement on an IAdditionalDamageProvider feature to allow its damage to scale with class level (using
-/// DiceByRankTable), even if it isn't directly added to the class (via AddFeaturesAtLevel).
-///
-public interface IModifyAdditionalDamageClassLevel
-{
- public CharacterClassDefinition Class { get; }
-}
-
-public sealed class ModifyAdditionalDamageClassLevelBarbarian : IModifyAdditionalDamageClassLevel
-{
- private ModifyAdditionalDamageClassLevelBarbarian()
- {
- }
-
- public static IModifyAdditionalDamageClassLevel Instance { get; } = new ModifyAdditionalDamageClassLevelBarbarian();
-
- public CharacterClassDefinition Class => Barbarian;
-}
-
-public sealed class ModifyAdditionalDamageClassLevelInventor : IModifyAdditionalDamageClassLevel
-{
- private ModifyAdditionalDamageClassLevelInventor()
- {
- }
-
- public static IModifyAdditionalDamageClassLevel Instance { get; } = new ModifyAdditionalDamageClassLevelInventor();
-
- public CharacterClassDefinition Class => InventorClass.Class;
-}
-
-public sealed class ModifyAdditionalDamageClassLevelRogue : IModifyAdditionalDamageClassLevel
-{
- private ModifyAdditionalDamageClassLevelRogue()
- {
- }
-
- public static IModifyAdditionalDamageClassLevel Instance { get; } = new ModifyAdditionalDamageClassLevelRogue();
-
- public CharacterClassDefinition Class => Rogue;
-}
-
-public sealed class ModifyAdditionalDamageClassLevelWarlock : IModifyAdditionalDamageClassLevel
-{
- private ModifyAdditionalDamageClassLevelWarlock()
- {
- }
-
- public static IModifyAdditionalDamageClassLevel Instance { get; } = new ModifyAdditionalDamageClassLevelWarlock();
-
- public CharacterClassDefinition Class => Warlock;
-}
diff --git a/SolastaUnfinishedBusiness/Models/BootContext.cs b/SolastaUnfinishedBusiness/Models/BootContext.cs
index 942d85043e..221578341b 100644
--- a/SolastaUnfinishedBusiness/Models/BootContext.cs
+++ b/SolastaUnfinishedBusiness/Models/BootContext.cs
@@ -103,9 +103,6 @@ internal static void Startup()
// Custom metamagic
MetamagicContext.LateLoad();
- // SRD rules switches
- SrdAndHouseRulesContext.LateLoad();
-
// Action Switching
ActionSwitching.LateLoad();
@@ -125,6 +122,7 @@ internal static void Startup()
SharedSpellsContext.LateLoad();
// Set anything on subs that depends on spells and others
+ SrdAndHouseRulesContext.LateLoad();
SubclassesContext.LateLoad();
InventorClass.LateLoadSpellStoringItem();
LightingAndObscurementContext.LateLoad();
@@ -227,7 +225,8 @@ private static void LogMissingReferencesInUserCampaigns()
{
var referenceDefinition = userItem["referenceDefinition"]!.Value();
- if (DatabaseRepository.GetDatabase().TryGetElement(referenceDefinition, out _))
+ if (DatabaseRepository.GetDatabase().TryGetElement(referenceDefinition, out var element) &&
+ element.ContentPack != CeContentPackContext.CeContentPack)
{
continue;
}
@@ -240,7 +239,8 @@ private static void LogMissingReferencesInUserCampaigns()
{
var referenceDefinition = userMonster["referenceDefinition"]!.Value();
- if (DatabaseRepository.GetDatabase().TryGetElement(referenceDefinition, out _))
+ if (DatabaseRepository.GetDatabase().TryGetElement(referenceDefinition, out var element) &&
+ element.ContentPack != CeContentPackContext.CeContentPack)
{
continue;
}
diff --git a/SolastaUnfinishedBusiness/Models/CharacterContext.cs b/SolastaUnfinishedBusiness/Models/CharacterContext.cs
index cbe2f04849..139b8d521f 100644
--- a/SolastaUnfinishedBusiness/Models/CharacterContext.cs
+++ b/SolastaUnfinishedBusiness/Models/CharacterContext.cs
@@ -16,7 +16,6 @@
using SolastaUnfinishedBusiness.Subclasses;
using SolastaUnfinishedBusiness.Validators;
using TA;
-using static ActionDefinitions;
using static RuleDefinitions;
using static FeatureDefinitionAttributeModifier;
using static SolastaUnfinishedBusiness.Api.DatabaseHelper;
@@ -29,7 +28,6 @@
using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionPowers;
using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionProficiencys;
using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionSenses;
-using static SolastaUnfinishedBusiness.Api.DatabaseHelper.MetamagicOptionDefinitions;
using static SolastaUnfinishedBusiness.Api.DatabaseHelper.MorphotypeElementDefinitions;
using static SolastaUnfinishedBusiness.Api.DatabaseHelper.SpellDefinitions;
@@ -52,15 +50,6 @@ internal static partial class CharacterContext
.AddCustomSubFeatures(new TryAlterOutcomeAttributeCheckSorcererMagicalGuidance())
.AddToDB();
- private static readonly FeatureDefinitionActionAffinity ActionAffinitySorcererQuickened =
- FeatureDefinitionActionAffinityBuilder
- .Create("ActionAffinitySorcererQuickened")
- .SetGuiPresentationNoContent(true)
- .SetAllowedActionTypes()
- .SetAuthorizedActions((Id)ExtraActionId.Quickened)
- .AddCustomSubFeatures(new ValidateDefinitionApplication(CanUseActionQuickened))
- .AddToDB();
-
internal static readonly ConditionDefinition ConditionIndomitableSaving = ConditionDefinitionBuilder
.Create("ConditionIndomitableSaving")
.SetGuiPresentationNoContent(true)
@@ -201,17 +190,6 @@ internal static partial class CharacterContext
private static int PreviousTotalFeatsGrantedFirstLevel { get; set; } = -1;
private static bool PreviousAlternateHuman { get; set; }
- private static bool CanUseActionQuickened(RulesetCharacter rulesetCharacter)
- {
- var glc = GameLocationCharacter.GetFromActor(rulesetCharacter);
- var hero = rulesetCharacter.GetOriginalHero();
-
- return glc is { UsedMainSpell: false } &&
- glc.GetActionTypeStatus(ActionType.Bonus) == ActionStatus.Available &&
- hero is { RemainingSorceryPoints: > 1 } &&
- hero.TrainedMetamagicOptions.Contains(MetamagicQuickenedSpell);
- }
-
internal static void LateLoad()
{
FlexibleBackgroundsContext.Load();
@@ -260,7 +238,6 @@ internal static void LateLoad()
SwitchRogueSteadyAim();
SwitchRogueStrSaving();
SwitchSorcererMagicalGuidance();
- SwitchSorcererQuickenedAction();
SwitchScimitarWeaponSpecialization();
SwitchBardHealingBalladOnLongRest();
SwitchSubclassAncestriesToUseCustomInvocationPools(
@@ -271,6 +248,12 @@ internal static void LateLoad()
"Sorcerer", SorcerousDraconicBloodline,
FeatureSetSorcererDraconicChoice, InvocationPoolSorcererDraconicChoice,
InvocationPoolTypeCustom.Pools.SorcererDraconicChoice);
+
+ //keeping for compatibility
+ _ = FeatureDefinitionBuilder
+ .Create("ActionAffinitySorcererQuickened")
+ .SetGuiPresentationNoContent(true)
+ .AddToDB();
}
private static void AddNameToRace(CharacterRaceDefinition raceDefinition, string gender, string name)
@@ -367,26 +350,18 @@ private static void LoadFeatsPointPools()
private static void LoadSorcererQuickened()
{
_ = ActionDefinitionBuilder
- .Create("Quickened")
- .SetGuiPresentation("MetamagicOptionQuickenedSpell", Category.Rules, CastMain)
- .RequiresAuthorization()
- .SetActionType(ActionType.NoCost)
- .SetActionId(ExtraActionId.Quickened)
- .SetFormType(ActionFormType.Large)
- .SetActionScope(ActionScope.Battle)
+ .Create(CastBonus, "CastQuickened")
+ .SetGuiPresentation(
+ "Rules/&MetamagicOptionQuickenedSpellTitle", "Action/&CastQuickenedDescription", CastMain)
+ .SetActionId(ExtraActionId.CastQuickened)
.AddToDB();
+ //leaving for compatibility?
+ //needed for characters who saved while affected by this
_ = ConditionDefinitionBuilder
.Create("ConditionSorcererQuickenedCastMain")
.SetGuiPresentationNoContent(true)
.SetSilent(Silent.WhenAddedOrRemoved)
- .AddFeatures(
- FeatureDefinitionAdditionalActionBuilder
- .Create("AdditionalActionSorcererQuickenedCastMain")
- .SetGuiPresentationNoContent(true)
- .SetActionType(ActionType.Main)
- .SetRestrictedActions(Id.CastMain)
- .AddToDB())
.AddToDB();
}
@@ -972,25 +947,6 @@ internal static void SwitchSorcererMagicalGuidance()
}
}
- internal static void SwitchSorcererQuickenedAction()
- {
- if (Main.Settings.EnableSorcererQuickenedAction)
- {
- Sorcerer.FeatureUnlocks.TryAdd(new FeatureUnlockByLevel(ActionAffinitySorcererQuickened, 3));
- }
- else
- {
- Sorcerer.FeatureUnlocks
- .RemoveAll(x => x.level == 3 &&
- x.FeatureDefinition == ActionAffinitySorcererQuickened);
- }
-
- if (Main.Settings.EnableSorcererQuickenedAction)
- {
- Sorcerer.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock);
- }
- }
-
internal static void SwitchScimitarWeaponSpecialization()
{
var proficiencies = new List { ProficiencyBardWeapon, ProficiencyRogueWeapon };
diff --git a/SolastaUnfinishedBusiness/Models/CharacterUAContext.cs b/SolastaUnfinishedBusiness/Models/CharacterUAContext.cs
index afbd94a1ae..3f6092cb9c 100644
--- a/SolastaUnfinishedBusiness/Models/CharacterUAContext.cs
+++ b/SolastaUnfinishedBusiness/Models/CharacterUAContext.cs
@@ -133,7 +133,7 @@ private static void BuildBarbarianBrutalStrike()
.SetAdvancement(AdditionalDamageAdvancement.ClassLevel, 1, 1, 8, 9)
.SetRequiredProperty(RestrictedContextRequiredProperty.Weapon)
.AddCustomSubFeatures(
- ModifyAdditionalDamageClassLevelBarbarian.Instance,
+ ClassHolder.Barbarian,
new ValidateContextInsteadOfRestrictedProperty((_, _, character, _, _, _, _) => (OperationType.Set,
character.IsToggleEnabled((ActionDefinitions.Id)ExtraActionId.BrutalStrikeToggle))))
.AddToDB();
@@ -1624,7 +1624,7 @@ private IEnumerator HandleKnockOut(GameLocationCharacter attacker, GameLocationC
var rulesetAttacker = attacker.RulesetCharacter;
var usablePower = PowerProvider.Get(powerKnockOutApply, rulesetAttacker);
- attacker.MyExecuteActionPowerNoCost(usablePower, [defender]);
+ attacker.MyExecuteActionPowerNoCost(usablePower, defender);
}
}
diff --git a/SolastaUnfinishedBusiness/Models/CustomActionIdContext.cs b/SolastaUnfinishedBusiness/Models/CustomActionIdContext.cs
index f54b543789..3bf257d7ae 100644
--- a/SolastaUnfinishedBusiness/Models/CustomActionIdContext.cs
+++ b/SolastaUnfinishedBusiness/Models/CustomActionIdContext.cs
@@ -1,6 +1,5 @@
using System.Collections.Generic;
using System.Linq;
-using SolastaUnfinishedBusiness.Api;
using SolastaUnfinishedBusiness.Api.GameExtensions;
using SolastaUnfinishedBusiness.Behaviors.Specific;
using SolastaUnfinishedBusiness.Builders;
@@ -12,6 +11,7 @@
using SolastaUnfinishedBusiness.Subclasses.Builders;
using static ActionDefinitions;
using static RuleDefinitions;
+using static SolastaUnfinishedBusiness.Api.DatabaseHelper;
using static SolastaUnfinishedBusiness.Api.DatabaseHelper.ActionDefinitions;
namespace SolastaUnfinishedBusiness.Models;
@@ -48,6 +48,24 @@ public static class CustomActionIdContext
(Id)ExtraActionId.ZenShotToggle
];
+ private static readonly List ExtraActionIdPowers =
+ [
+ (Id)ExtraActionId.AmazingDisplayToggle,
+ (Id)ExtraActionId.ArcaneArcherToggle,
+ (Id)ExtraActionId.AudaciousWhirlToggle,
+ (Id)ExtraActionId.BalefulScionToggle,
+ (Id)ExtraActionId.BondOfTheTalismanTeleport,
+ (Id)ExtraActionId.CoordinatedAssaultToggle,
+ (Id)ExtraActionId.DestructiveWrathToggle,
+ (Id)ExtraActionId.FarStep,
+ (Id)ExtraActionId.ForcePoweredStrikeToggle,
+ (Id)ExtraActionId.ImpishWrathToggle,
+ (Id)ExtraActionId.OrcishFuryToggle,
+ (Id)ExtraActionId.PowerSurgeToggle,
+ (Id)ExtraActionId.QuiveringPalmToggle,
+ (Id)ExtraActionId.ZenShotToggle
+ ];
+
internal static FeatureDefinitionPower FarStep { get; private set; }
internal static void Load()
@@ -202,11 +220,6 @@ private static void BuildCustomRageStartAction()
.AddToDB();
}
- internal static bool IsCustomActionIdToggle(Id action)
- {
- return ExtraActionIdToggles.Contains(action);
- }
-
internal static void ReorderToggles(List actions)
{
var powerNdx = actions.FindIndex(x => x == Id.Cautious);
@@ -364,7 +377,7 @@ private static void BuildFarStepAction()
.Create()
.SetMotionForm(MotionForm.MotionType.TeleportToDestination)
.Build())
- .SetParticleEffectParameters(DatabaseHelper.SpellDefinitions.MistyStep)
+ .SetParticleEffectParameters(SpellDefinitions.MistyStep)
.UseQuickAnimations()
.Build())
.AddToDB();
@@ -432,6 +445,7 @@ public static void ProcessCustomActionIds(
case (Id)ExtraActionId.CombatWildShape:
{
var power = character.GetPowerFromDefinition(action.ActivatedPower);
+
if (power is not { RemainingUses: > 0 } ||
(character is RulesetCharacterMonster monster &&
monster.MonsterDefinition.CreatureTags.Contains(TagsDefinitions.CreatureTagWildShape)))
@@ -492,6 +506,11 @@ public static void ProcessCustomActionIds(
: ActionStatus.Unavailable;
return;
}
+ case (Id)ExtraActionId.CastQuickened:
+ {
+ result = CanUseActionQuickened(locationCharacter, scope);
+ return;
+ }
}
var isInvocationAction = IsInvocationActionId(actionId);
@@ -602,26 +621,12 @@ private static ActionStatus CanUseInvocationAction(
: ActionStatus.Unavailable;
}
- internal static bool IsInvocationActionId(Id id)
- {
- var extra = (ExtraActionId)id;
-
- return id is Id.CastInvocation
- || extra is ExtraActionId.CastInvocationBonus
- or ExtraActionId.CastInvocationNoCost
- or ExtraActionId.InventorInfusion
- or ExtraActionId.CastPlaneMagicMain
- or ExtraActionId.CastPlaneMagicBonus
- || IsGambitActionId(id)
- || IsEldritchVersatilityId(id)
- || IsEldritchVersatilityId(id);
- }
-
private static bool IsEldritchVersatilityId(Id id)
{
var extra = (ExtraActionId)id;
- return extra is ExtraActionId.EldritchVersatilityMain
+ return extra
+ is ExtraActionId.EldritchVersatilityMain
or ExtraActionId.EldritchVersatilityBonus
or ExtraActionId.EldritchVersatilityNoCost;
}
@@ -630,16 +635,93 @@ private static bool IsGambitActionId(Id id)
{
var extra = (ExtraActionId)id;
- return extra is ExtraActionId.TacticianGambitMain
+ return extra
+ is ExtraActionId.TacticianGambitMain
or ExtraActionId.TacticianGambitBonus
or ExtraActionId.TacticianGambitNoCost;
}
- private static bool IsPowerUseActionId(Id id)
+ internal static bool IsInvocationActionId(Id id)
{
var extra = (ExtraActionId)id;
- return extra is ExtraActionId.BondOfTheTalismanTeleport
- or ExtraActionId.FarStep;
+ return id is Id.CastInvocation ||
+ extra
+ is ExtraActionId.CastInvocationBonus
+ or ExtraActionId.CastInvocationNoCost
+ or ExtraActionId.InventorInfusion
+ or ExtraActionId.CastPlaneMagicMain
+ or ExtraActionId.CastPlaneMagicBonus ||
+ IsGambitActionId(id) ||
+ IsEldritchVersatilityId(id) ||
+ IsEldritchVersatilityId(id);
+ }
+
+ private static bool IsPowerUseActionId(Id id)
+ {
+ return ExtraActionIdPowers.Contains(id);
+ }
+
+ internal static bool IsToggleId(Id id)
+ {
+ return ExtraActionIdToggles.Contains(id);
+ }
+
+ private static ActionStatus CanUseActionQuickened(GameLocationCharacter glc, ActionScope scope)
+ {
+ if (!Main.Settings.EnableSorcererQuickenedAction || scope != ActionScope.Battle)
+ {
+ return ActionStatus.Unavailable;
+ }
+
+ var hero = glc.RulesetCharacter.GetOriginalHero();
+ var quickenedSpell = MetamagicOptionDefinitions.MetamagicQuickenedSpell;
+
+ // more or less in order of cost
+ if (hero == null ||
+ !hero.TrainedMetamagicOptions.Contains(quickenedSpell) ||
+ !glc.IsActionOnGoing(Id.MetamagicToggle) ||
+ glc.GetActionTypeStatus(ActionType.Bonus) != ActionStatus.Available ||
+ !glc.RulesetCharacter.CanCastSpellOfActionType(ActionType.Main, glc.CanOnlyUseCantrips))
+ {
+ return ActionStatus.Unavailable;
+ }
+
+ return hero.RemainingSorceryPoints < quickenedSpell.SorceryPointsCost
+ ? ActionStatus.OutOfUses
+ : ActionStatus.Available;
+ }
+
+ internal static void CheckQuickenedStatus(GuiCharacterAction action, ActionStatus status, GuiTooltip tooltip,
+ ref string fail)
+ {
+ if (action.ActionId != (Id)ExtraActionId.CastQuickened) { return; }
+
+ if (status != ActionStatus.OutOfUses) { return; }
+
+ tooltip.Content = tooltip.Content.Substring(0, tooltip.Content.Length - fail.Length);
+ fail = "\n" + Gui.Colorize(Gui.Format(FailureFlagInsufficientSorceryPoints), Gui.ColorFailure);
+ tooltip.Content += fail;
+ }
+
+ internal static void UpdateCastActionForm(GuiCharacterAction action, List actions)
+ {
+ if (action.ActionId == Id.CastBonus)
+ {
+ action.actionDefinition.formType = actions.Contains((Id)ExtraActionId.CastQuickened)
+ ? ActionFormType.Small
+ : ActionFormType.Large;
+ }
+ else if (action.actionId == (Id)ExtraActionId.CastQuickened)
+ {
+ action.actionDefinition.formType = actions.Contains(Id.CastBonus)
+ ? ActionFormType.Small
+ : ActionFormType.Large;
+ }
+ }
+
+ internal static bool IsCastSpellAction(this ActionDefinition action)
+ {
+ return action.Id is Id.CastMain or Id.CastBonus or (Id)ExtraActionId.CastQuickened;
}
}
diff --git a/SolastaUnfinishedBusiness/Models/CustomWeaponsContext.cs b/SolastaUnfinishedBusiness/Models/CustomWeaponsContext.cs
index da3d3c399c..da11f554f4 100644
--- a/SolastaUnfinishedBusiness/Models/CustomWeaponsContext.cs
+++ b/SolastaUnfinishedBusiness/Models/CustomWeaponsContext.cs
@@ -63,6 +63,7 @@ internal static void Load()
BuildThunderGauntlet();
BuildLightningLauncher();
BuildUnarmedStrikeClaws();
+ UpdateHandWrapsUseGauntletSlot();
}
[NotNull]
@@ -782,6 +783,27 @@ internal static ItemDefinition GetStandardWeaponOfType(string type)
item.WeaponDescription.WeaponTypeDefinition.Name == type);
}
+ internal static void UpdateHandWrapsUseGauntletSlot()
+ {
+ foreach (var item in DatabaseRepository.GetDatabase())
+ {
+ if (item is not { WeaponDescription.weaponType: "UnarmedStrikeType" }) { continue; }
+
+ if (item == ItemDefinitions.UnarmedStrikeBase) { continue; }
+
+ if (Main.Settings.EnableMonkHandwrapsUseGauntletSlot)
+ {
+ item.SlotTypes.Add(EquipmentDefinitions.SlotTypeGloves);
+ item.SlotsWhereActive.Add(EquipmentDefinitions.SlotTypeGloves);
+ }
+ else
+ {
+ item.SlotTypes.Remove(EquipmentDefinitions.SlotTypeGloves);
+ item.SlotsWhereActive.Remove(EquipmentDefinitions.SlotTypeGloves);
+ }
+ }
+ }
+
#region Halberd Icons
private static AssetReferenceSprite
diff --git a/SolastaUnfinishedBusiness/Models/FixesContext.cs b/SolastaUnfinishedBusiness/Models/FixesContext.cs
index 6d2e378559..b09d37b967 100644
--- a/SolastaUnfinishedBusiness/Models/FixesContext.cs
+++ b/SolastaUnfinishedBusiness/Models/FixesContext.cs
@@ -64,6 +64,7 @@ internal static void LateLoad()
FixStunningStrikeForAnyMonkWeapon();
FixTwinnedMetamagic();
FixUncannyDodgeForRoguishDuelist();
+ FixPaladinAurasDisplayOnActionBar();
// fix Dazzled attribute modifier UI previously displaying Daaaaal on attribute modifier
AttributeModifierDazzled.GuiPresentation.title = "Feature/&AttributeModifierDazzledTitle";
@@ -618,6 +619,17 @@ private static void FixUncannyDodgeForRoguishDuelist()
character.HasConditionOfType(RoguishDuelist.ConditionReflexiveParryName)));
}
+ private static void FixPaladinAurasDisplayOnActionBar()
+ {
+ foreach (var power in DatabaseRepository.GetDatabase()
+ .Where(x =>
+ x.ActivationTime == ActivationTime.PermanentUnlessIncapacitated &&
+ (x.Name.StartsWith("PowerOath") || x.Name.StartsWith("PowerPaladin"))))
+ {
+ power.AddCustomSubFeatures(ModifyPowerVisibility.Hidden);
+ }
+ }
+
private static void FixAdditionalDamageRogueSneakAttack()
{
AdditionalDamageRogueSneakAttack.AddCustomSubFeatures(
@@ -728,7 +740,7 @@ public IEnumerator OnPhysicalAttackFinishedByMe(
yield break;
}
- attacker.MyExecuteActionPowerNoCost(usablePower, [defender]);
+ attacker.MyExecuteActionPowerNoCost(usablePower, defender);
}
public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, BaseDefinition baseDefinition)
diff --git a/SolastaUnfinishedBusiness/Models/GameUiContext.cs b/SolastaUnfinishedBusiness/Models/GameUiContext.cs
index 8e3500b3a8..b117a67f27 100644
--- a/SolastaUnfinishedBusiness/Models/GameUiContext.cs
+++ b/SolastaUnfinishedBusiness/Models/GameUiContext.cs
@@ -155,7 +155,7 @@ internal static IEnumerator SelectPosition(CharacterAction action, FeatureDefini
var cursorService = ServiceRepository.GetService();
ResetCamera();
- cursorService.ActivateCursor([actionParams]);
+ cursorService.ActivateCursor(actionParams);
var position = int3.zero;
diff --git a/SolastaUnfinishedBusiness/Models/InventoryManagementContext.cs b/SolastaUnfinishedBusiness/Models/InventoryManagementContext.cs
index f0ecdc350d..0d19b7def6 100644
--- a/SolastaUnfinishedBusiness/Models/InventoryManagementContext.cs
+++ b/SolastaUnfinishedBusiness/Models/InventoryManagementContext.cs
@@ -15,6 +15,7 @@ internal static class InventoryManagementContext
{
private static readonly List SortCategories =
[
+ "UI/&InventoryFilterNone",
"UI/&InventoryFilterName",
"UI/&InventoryFilterCategory",
"UI/&InventoryFilterCost",
@@ -22,10 +23,14 @@ internal static class InventoryManagementContext
"UI/&InventoryFilterCostPerWeight"
];
- private static readonly List FilteredItems = [];
-
private static readonly List ItemCategories = [];
+ private static readonly List Filtered = [];
+ private static bool _dirty = true;
+
+ public static bool Enabled => Main.Settings.EnableInventoryFilteringAndSorting;
+ // && (!Global.IsMultiplayer || Main.Settings.AllowSortingInMultiplayer);
+
private static GuiDropdown FilterGuiDropdown { get; set; }
private static SortGroup BySortGroup { get; set; }
@@ -37,8 +42,6 @@ internal static class InventoryManagementContext
private static Toggle UnidentifiedToggle { get; set; }
private static GameObject UnidentifiedText { get; set; }
- internal static Action SelectionChanged { get; private set; }
-
internal static void Load()
{
var characterInspectionScreen = Gui.GuiService.GetScreen();
@@ -81,50 +84,24 @@ internal static void Load()
UnidentifiedToggle.onValueChanged.RemoveAllListeners();
UnidentifiedText = Object.Instantiate(byTextMesh.gameObject, rightGroup);
- //
- // on any control change we need to unbind / bind the entire panel to refresh all the additional items gizmos
- //
-
- SelectionChanged = () =>
- {
- var container = containerPanel.Container;
-
- if (container == null)
- {
- return;
- }
-
- var inspectedCharacter = containerPanel.InspectedCharacter;
- var dropAreaClicked = containerPanel.DropAreaClicked;
- var visibleSlotsRefreshed = containerPanel.VisibleSlotsRefreshed;
-
- containerPanel.Unbind();
- Flush(container);
- SortAndFilter(container);
- containerPanel.Bind(container, inspectedCharacter, dropAreaClicked, visibleSlotsRefreshed);
- containerPanel.RefreshNow();
- };
-
- // changes the reorder button label and refactor the listener
+ // repositions the reorder button and refactor the listener
var reorder = rightGroup.transform.Find("ReorderPersonalContainerButton");
var reorderButton = reorder.GetComponent