diff --git a/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt b/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt index 07c7326314..b62f1561a3 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt +++ b/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt @@ -972,6 +972,7 @@ DecisionBreakFreeConditionGrappledRestrainedEnsnared TA.AI.DecisionDefinition TA DecisionBreakFreeConditionGrappledRestrainedIceBound TA.AI.DecisionDefinition TA.AI.DecisionDefinition 017c5b82-f11c-5899-8729-947eabcf949f DecisionBreakFreeConditionGrappledRestrainedSpellWeb TA.AI.DecisionDefinition TA.AI.DecisionDefinition 61e7fc96-8cb5-5c2b-8a67-75fbef4f333a DecisionBreakFreeConditionNoxiousSpray TA.AI.DecisionDefinition TA.AI.DecisionDefinition 2f033fcf-d478-5581-94d9-27a3ad4496ad +DecisionBreakFreeConditionRestrainedByEntangle TA.AI.DecisionDefinition TA.AI.DecisionDefinition 2a416669-5ec8-53c1-b07b-8fe6f29da4d2 DecisionBreakFreeConditionVileBrew TA.AI.DecisionDefinition TA.AI.DecisionDefinition 4b3278e8-334a-58d6-8c75-2f48e28b4e54 EffectGreenElementalBreath EffectProxyDefinition EffectProxyDefinition 1b305d09-3001-59d9-a97f-32ba86034933 ProxyEarthTremor EffectProxyDefinition EffectProxyDefinition fdec4a73-e825-5a14-9f0e-1faca83c21d3 @@ -3095,6 +3096,7 @@ PowerSpiritBeastEyebiteSickened FeatureDefinitionPower FeatureDefinition 3d7befe PowerSteelWhirlwindTeleport FeatureDefinitionPower FeatureDefinition 8f74fc44-7afd-57f0-9cd4-c9e21998ec51 PowerStrikeWithTheWind FeatureDefinitionPower FeatureDefinition 84e17bae-7d8d-5a38-90e4-b2b0f3f25a54 PowerTacticianSharedVigilance FeatureDefinitionPower FeatureDefinition 3581ed42-7ce9-5464-a495-910e3bd168a9 +PowerTeleportSummon FeatureDefinitionPower FeatureDefinition f0d1e121-9b02-52ee-b4c7-5525d575c078 PowerThunderousSmiteThunderousSmite FeatureDefinitionPower FeatureDefinition dba75004-bf8b-52f2-9787-999aa36d258d PowerTieflingFeralDemonicWingsDismiss FeatureDefinitionPower FeatureDefinition 9357b380-e0e6-5ed7-aca3-374f01a05572 PowerTieflingFeralDemonicWingsSprout FeatureDefinitionPower FeatureDefinition 807ff5a3-bb54-5ae3-a280-2efb487ba004 @@ -3119,6 +3121,7 @@ PowerUseModifierTacticianGambitPool00 SolastaUnfinishedBusiness.CustomDefinition PowerUseModifierTacticianGambitPool01 SolastaUnfinishedBusiness.CustomDefinitions.FeatureDefinitionPowerUseModifier FeatureDefinition 72c23326-29d2-5224-a708-c494fd573533 PowerUseModifierTacticianGambitPoolFeatTacticianAdept SolastaUnfinishedBusiness.CustomDefinitions.FeatureDefinitionPowerUseModifier FeatureDefinition b33418e8-2cd7-5940-983d-8107873b39e0 PowerUseModifierTacticianGambitPoolImproviseStrategy SolastaUnfinishedBusiness.CustomDefinitions.FeatureDefinitionPowerUseModifier FeatureDefinition 18ec73c9-8c06-5ef8-b4c9-9aba6a7e649f +PowerVanishSummon FeatureDefinitionPower FeatureDefinition 2e2b66aa-217d-5063-9073-32f0dca0efb1 PowerWarDancerWarDance FeatureDefinitionPower FeatureDefinition a89352fc-4f22-586e-947c-2cd98120eacb PowerWarlockEldritchMaster FeatureDefinitionPower FeatureDefinition 8d5bb433-7ede-51cb-bb6b-e04405ea891c PowerWayOfSilhouetteDarkness FeatureDefinitionPower FeatureDefinition fb406968-b055-586f-9a1a-2b4e4f28a8ce @@ -5361,6 +5364,7 @@ PowerSpiritBeastEyebiteSickened FeatureDefinitionPower FeatureDefinitionPower 3d PowerSteelWhirlwindTeleport FeatureDefinitionPower FeatureDefinitionPower 8f74fc44-7afd-57f0-9cd4-c9e21998ec51 PowerStrikeWithTheWind FeatureDefinitionPower FeatureDefinitionPower 84e17bae-7d8d-5a38-90e4-b2b0f3f25a54 PowerTacticianSharedVigilance FeatureDefinitionPower FeatureDefinitionPower 3581ed42-7ce9-5464-a495-910e3bd168a9 +PowerTeleportSummon FeatureDefinitionPower FeatureDefinitionPower f0d1e121-9b02-52ee-b4c7-5525d575c078 PowerThunderousSmiteThunderousSmite FeatureDefinitionPower FeatureDefinitionPower dba75004-bf8b-52f2-9787-999aa36d258d PowerTieflingFeralDemonicWingsDismiss FeatureDefinitionPower FeatureDefinitionPower 9357b380-e0e6-5ed7-aca3-374f01a05572 PowerTieflingFeralDemonicWingsSprout FeatureDefinitionPower FeatureDefinitionPower 807ff5a3-bb54-5ae3-a280-2efb487ba004 @@ -5368,6 +5372,7 @@ PowerTraditionLightPurityOfLight FeatureDefinitionPower FeatureDefinitionPower f PowerTraditionOpenHandQuiveringPalm FeatureDefinitionPower FeatureDefinitionPower 9b1f88b1-bace-5a9a-ba01-4c833533f515 PowerTraditionOpenHandQuiveringPalmTrigger FeatureDefinitionPower FeatureDefinitionPower f4ceee0a-4db3-50b3-80aa-e29c92073219 PowerTraditionSurvivalPhysicalPerfection FeatureDefinitionPower FeatureDefinitionPower 12013063-7606-507c-99ab-3fa7b9d43be5 +PowerVanishSummon FeatureDefinitionPower FeatureDefinitionPower 2e2b66aa-217d-5063-9073-32f0dca0efb1 PowerWarDancerWarDance FeatureDefinitionPower FeatureDefinitionPower a89352fc-4f22-586e-947c-2cd98120eacb PowerWarlockEldritchMaster FeatureDefinitionPower FeatureDefinitionPower 8d5bb433-7ede-51cb-bb6b-e04405ea891c PowerWayOfSilhouetteDarkness FeatureDefinitionPower FeatureDefinitionPower fb406968-b055-586f-9a1a-2b4e4f28a8ce diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCircleOfTheLifeVerdancy.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCircleOfTheLifeVerdancy.json index 268c97a829..5017a3d5a7 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCircleOfTheLifeVerdancy.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCircleOfTheLifeVerdancy.json @@ -12,7 +12,7 @@ "specialDuration": true, "durationType": "Round", "durationParameterDie": "D1", - "durationParameter": 2, + "durationParameter": 3, "forceTurnOccurence": false, "turnOccurence": "EndOfSourceTurn", "specialInterruptions": [], diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCircleOfTheLifeVerdancy14.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCircleOfTheLifeVerdancy14.json index f5733879d3..df7e3fead4 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCircleOfTheLifeVerdancy14.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionCircleOfTheLifeVerdancy14.json @@ -12,7 +12,7 @@ "specialDuration": true, "durationType": "Round", "durationParameterDie": "D1", - "durationParameter": 4, + "durationParameter": 5, "forceTurnOccurence": false, "turnOccurence": "EndOfSourceTurn", "specialInterruptions": [], diff --git a/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionRestrainedByEntangle.json b/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionRestrainedByEntangle.json new file mode 100644 index 0000000000..e6a5f84791 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/DecisionBreakFreeConditionRestrainedByEntangle.json @@ -0,0 +1,94 @@ +{ + "$type": "TA.AI.DecisionDefinition, Assembly-CSharp", + "decision": { + "$type": "TA.AI.DecisionDescription, Assembly-CSharp", + "description": "if restrained and can use main action, try to break free", + "scorer": { + "$type": "TA.AI.ActivityScorerDefinition, Assembly-CSharp", + "scorer": { + "$type": "TA.AI.ActivityScorer, Assembly-CSharp", + "considerations": [ + { + "$type": "TA.AI.WeightedConsiderationDescription, Assembly-CSharp", + "consideration": { + "$type": "TA.AI.ConsiderationDefinition, Assembly-CSharp", + "consideration": { + "$type": "TA.AI.ConsiderationDescription, Assembly-CSharp", + "considerationType": "HasCondition", + "curve": { + "$type": "UnityEngine.AnimationCurve, UnityEngine.CoreModule" + }, + "stringParameter": "ConditionRestrainedByEntangle", + "floatParameter": 2.0, + "intParameter": 2, + "byteParameter": 0, + "boolParameter": true, + "boolSecParameter": false, + "boolTerParameter": false + }, + "name": "HasConditionRestrainedByEntangle" + }, + "weight": 1.0 + }, + { + "$type": "TA.AI.WeightedConsiderationDescription, Assembly-CSharp", + "consideration": { + "$type": "TA.AI.ConsiderationDefinition, Assembly-CSharp", + "consideration": { + "$type": "TA.AI.ConsiderationDescription, Assembly-CSharp", + "considerationType": "ActionTypeStatus", + "curve": { + "$type": "UnityEngine.AnimationCurve, UnityEngine.CoreModule" + }, + "stringParameter": "", + "floatParameter": 1.0, + "intParameter": 0, + "byteParameter": 0, + "boolParameter": true, + "boolSecParameter": false, + "boolTerParameter": false + }, + "name": "MainActionNotFullyConsumed" + }, + "weight": 1.0 + } + ] + }, + "name": "BreakFree" + }, + "activityType": "BreakFree", + "stringParameter": "2", + "stringSecParameter": "", + "boolParameter": false, + "boolSecParameter": false, + "floatParameter": 3.0, + "enumParameter": 1 + }, + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": true, + "title": "Feature/&NoContentTitle", + "description": "Feature/&NoContentTitle", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "2a416669-5ec8-53c1-b07b-8fe6f29da4d2", + "contentPack": 9999, + "name": "DecisionBreakFreeConditionRestrainedByEntangle" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerSorcerousFieldManipulatorDisplacement.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerSorcerousFieldManipulatorDisplacement.json index 94718a5c0b..480740a3a8 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerSorcerousFieldManipulatorDisplacement.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerSorcerousFieldManipulatorDisplacement.json @@ -79,7 +79,7 @@ "motionForm": { "$type": "MotionForm, Assembly-CSharp", "type": "TeleportToDestination", - "distance": 12, + "distance": 0, "forceTurnTowardsSourceCharacterAfterPush": false, "forceSourceCharacterTurnTowardsTargetAfterPush": false }, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerTeleportSummon.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerTeleportSummon.json new file mode 100644 index 0000000000..092b7b9dd0 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerTeleportSummon.json @@ -0,0 +1,353 @@ +{ + "$type": "FeatureDefinitionPower, Assembly-CSharp", + "effectDescription": { + "$type": "EffectDescription, Assembly-CSharp", + "rangeType": "Distance", + "rangeParameter": 6, + "halfDamageOnAMiss": false, + "hitAffinitiesByTargetTag": [], + "targetType": "Position", + "itemSelectionType": "None", + "targetParameter": 1, + "targetParameter2": 2, + "emissiveBorder": "None", + "emissiveParameter": 1, + "requiresTargetProximity": false, + "targetProximityDistance": 6, + "targetExcludeCaster": false, + "canBePlacedOnCharacter": true, + "affectOnlyGround": false, + "targetFilteringMethod": "CharacterOnly", + "targetFilteringTag": "No", + "requiresVisibilityForPosition": true, + "inviteOptionalAlly": false, + "slotTypes": [], + "recurrentEffect": "No", + "retargetAfterDeath": false, + "retargetActionType": "Bonus", + "poolFilterDiceNumber": 5, + "poolFilterDieType": "D8", + "trapRangeType": "Triggerer", + "targetConditionName": "", + "targetConditionAsset": null, + "targetSide": "Ally", + "durationType": "Instantaneous", + "durationParameter": 1, + "endOfEffect": "EndOfTurn", + "hasSavingThrow": false, + "disableSavingThrowOnAllies": false, + "savingThrowAbility": "Dexterity", + "ignoreCover": false, + "grantedConditionOnSave": null, + "rollSaveOnlyIfRelevantForms": false, + "hasShoveRoll": false, + "createdByCharacter": true, + "difficultyClassComputation": "SpellCastingFeature", + "savingThrowDifficultyAbility": "Wisdom", + "fixedSavingThrowDifficultyClass": 15, + "savingThrowAffinitiesBySense": [], + "savingThrowAffinitiesByFamily": [], + "damageAffinitiesByFamily": [], + "advantageForEnemies": false, + "canBeDispersed": false, + "hasVelocity": false, + "velocityCellsPerRound": 2, + "velocityType": "AwayFromSourceOriginalPosition", + "restrictedCreatureFamilies": [], + "immuneCreatureFamilies": [], + "restrictedCharacterSizes": [], + "hasLimitedEffectPool": false, + "effectPoolAmount": 60, + "effectApplication": "All", + "effectFormFilters": [], + "effectForms": [ + { + "$type": "EffectForm, Assembly-CSharp", + "formType": "Motion", + "addBonusMode": "None", + "applyLevel": "No", + "levelType": "ClassLevel", + "levelMultiplier": 1, + "diceByLevelTable": [], + "createdByCharacter": true, + "createdByCondition": false, + "hasSavingThrow": false, + "savingThrowAffinity": "None", + "dcModifier": 0, + "canSaveToCancel": false, + "saveOccurence": "EndOfTurn", + "motionForm": { + "$type": "MotionForm, Assembly-CSharp", + "type": "TeleportToDestination", + "distance": 0, + "forceTurnTowardsSourceCharacterAfterPush": false, + "forceSourceCharacterTurnTowardsTargetAfterPush": false + }, + "hasFilterId": false, + "filterId": 0 + } + ], + "specialFormsDescription": "", + "effectAdvancement": { + "$type": "EffectAdvancement, Assembly-CSharp", + "effectIncrementMethod": "None", + "incrementMultiplier": 1, + "additionalTargetsPerIncrement": 0, + "additionalSubtargetsPerIncrement": 0, + "additionalDicePerIncrement": 0, + "additionalSpellLevelPerIncrement": 0, + "additionalSummonsPerIncrement": 0, + "additionalHPPerIncrement": 0, + "additionalTempHPPerIncrement": 0, + "additionalTargetCellsPerIncrement": 0, + "additionalItemBonus": 0, + "additionalWeaponDie": 0, + "alteredDuration": "None" + }, + "speedType": "Instant", + "speedParameter": -1.0, + "offsetImpactTimeBasedOnDistance": false, + "offsetImpactTimeBasedOnDistanceFactor": 0.1, + "offsetImpactTimePerTarget": 0.0, + "effectParticleParameters": { + "$type": "EffectParticleParameters, Assembly-CSharp", + "casterParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "81560ac3813217d4d9fd281d5e73c234", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "casterSelfParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "casterQuickSpellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "81560ac3813217d4d9fd281d5e73c234", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "targetParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "effectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "effectSubTargetParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "zoneParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "beforeImpactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "impactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectImpactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceParticlePerIndex": "", + "activeEffectSurfaceParticlePerIndexCount": 0, + "emissiveBorderCellStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderCellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderCellEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "forceApplyZoneParticle": false, + "applyEmissionColorOnWeapons": false, + "emissionColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "emissionColorFadeInDuration": 0.0, + "emissionColorFadeOutDuration": 0.0 + }, + "effectAIParameters": { + "$type": "EffectAIParameters, Assembly-CSharp", + "aoeScoreMultiplier": 1.0, + "cooldownForCaster": 0, + "cooldownForBattle": 0, + "sortingScoreMultiplier": 1.0, + "dynamicCooldown": false + }, + "animationMagicEffect": "Animation0", + "lightCounterDispellsEffect": false, + "hideSavingThrowAnimation": false + }, + "delegatedToAction": false, + "surrogateToSpell": null, + "triggeredBySpecialMove": false, + "activationTime": "NoCost", + "autoActivationRequiredTargetSenseType": "None", + "autoActivationRequiredTargetCreatureTag": "", + "autoActivationPowerTag": "", + "triggeringPower": null, + "copyTargetingFromTriggeringPower": false, + "reactionContext": "None", + "damageTypes": [], + "reactionName": "", + "reactionActingCharacterParamIdx": 0, + "reactionAttackerParamIdx": -1, + "hasCastingFailure": false, + "castingSuccessComputation": "CasterLevel", + "canUseInDialog": false, + "disableIfConditionIsOwned": null, + "disableIfTargetConditionIsOwned": null, + "rechargeRate": "AtWill", + "costPerUse": 1, + "spellcastingFeature": null, + "usesDetermination": "Fixed", + "abilityScoreDetermination": "Explicit", + "usesAbilityScoreName": "Charisma", + "fixedUsesPerRecharge": 1, + "abilityScore": "Intelligence", + "attackHitComputation": "AbilityScore", + "fixedAttackHit": 0, + "abilityScoreBonusToAttack": false, + "proficiencyBonusToAttack": false, + "uniqueInstance": false, + "showCasting": true, + "shortTitleOverride": "", + "overriddenPower": null, + "includeBaseDescription": false, + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "Feature/&PowerTeleportSummonTitle", + "description": "Feature/&PowerTeleportSummonDescription", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "9297138bfa224da49af37f225c13096a", + "m_SubObjectName": "DimensionDoor", + "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": "f0d1e121-9b02-52ee-b4c7-5525d575c078", + "contentPack": 9999, + "name": "PowerTeleportSummon" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerVanishSummon.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerVanishSummon.json new file mode 100644 index 0000000000..05d54b86d6 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerVanishSummon.json @@ -0,0 +1,352 @@ +{ + "$type": "FeatureDefinitionPower, Assembly-CSharp", + "effectDescription": { + "$type": "EffectDescription, Assembly-CSharp", + "rangeType": "Self", + "rangeParameter": 0, + "halfDamageOnAMiss": false, + "hitAffinitiesByTargetTag": [], + "targetType": "Self", + "itemSelectionType": "None", + "targetParameter": 1, + "targetParameter2": 2, + "emissiveBorder": "None", + "emissiveParameter": 1, + "requiresTargetProximity": false, + "targetProximityDistance": 6, + "targetExcludeCaster": false, + "canBePlacedOnCharacter": true, + "affectOnlyGround": false, + "targetFilteringMethod": "CharacterOnly", + "targetFilteringTag": "No", + "requiresVisibilityForPosition": true, + "inviteOptionalAlly": false, + "slotTypes": [], + "recurrentEffect": "No", + "retargetAfterDeath": false, + "retargetActionType": "Bonus", + "poolFilterDiceNumber": 5, + "poolFilterDieType": "D8", + "trapRangeType": "Triggerer", + "targetConditionName": "", + "targetConditionAsset": null, + "targetSide": "Ally", + "durationType": "Instantaneous", + "durationParameter": 1, + "endOfEffect": "EndOfTurn", + "hasSavingThrow": false, + "disableSavingThrowOnAllies": false, + "savingThrowAbility": "Dexterity", + "ignoreCover": false, + "grantedConditionOnSave": null, + "rollSaveOnlyIfRelevantForms": false, + "hasShoveRoll": false, + "createdByCharacter": true, + "difficultyClassComputation": "SpellCastingFeature", + "savingThrowDifficultyAbility": "Wisdom", + "fixedSavingThrowDifficultyClass": 15, + "savingThrowAffinitiesBySense": [], + "savingThrowAffinitiesByFamily": [], + "damageAffinitiesByFamily": [], + "advantageForEnemies": false, + "canBeDispersed": false, + "hasVelocity": false, + "velocityCellsPerRound": 2, + "velocityType": "AwayFromSourceOriginalPosition", + "restrictedCreatureFamilies": [], + "immuneCreatureFamilies": [], + "restrictedCharacterSizes": [], + "hasLimitedEffectPool": false, + "effectPoolAmount": 60, + "effectApplication": "All", + "effectFormFilters": [], + "effectForms": [ + { + "$type": "EffectForm, Assembly-CSharp", + "formType": "Kill", + "addBonusMode": "None", + "applyLevel": "No", + "levelType": "ClassLevel", + "levelMultiplier": 1, + "diceByLevelTable": [], + "createdByCharacter": true, + "createdByCondition": false, + "hasSavingThrow": false, + "savingThrowAffinity": "None", + "dcModifier": 0, + "canSaveToCancel": false, + "saveOccurence": "EndOfTurn", + "killForm": { + "$type": "KillForm, Assembly-CSharp", + "killCondition": "Always", + "challengeRating": 0.0, + "hitPoints": 0 + }, + "hasFilterId": false, + "filterId": 0 + } + ], + "specialFormsDescription": "", + "effectAdvancement": { + "$type": "EffectAdvancement, Assembly-CSharp", + "effectIncrementMethod": "None", + "incrementMultiplier": 1, + "additionalTargetsPerIncrement": 0, + "additionalSubtargetsPerIncrement": 0, + "additionalDicePerIncrement": 0, + "additionalSpellLevelPerIncrement": 0, + "additionalSummonsPerIncrement": 0, + "additionalHPPerIncrement": 0, + "additionalTempHPPerIncrement": 0, + "additionalTargetCellsPerIncrement": 0, + "additionalItemBonus": 0, + "additionalWeaponDie": 0, + "alteredDuration": "None" + }, + "speedType": "Instant", + "speedParameter": -1.0, + "offsetImpactTimeBasedOnDistance": false, + "offsetImpactTimeBasedOnDistanceFactor": 0.1, + "offsetImpactTimePerTarget": 0.0, + "effectParticleParameters": { + "$type": "EffectParticleParameters, Assembly-CSharp", + "casterParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "81560ac3813217d4d9fd281d5e73c234", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "casterSelfParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "casterQuickSpellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "81560ac3813217d4d9fd281d5e73c234", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "targetParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "effectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "effectSubTargetParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "zoneParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "beforeImpactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "impactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectImpactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceParticlePerIndex": "", + "activeEffectSurfaceParticlePerIndexCount": 0, + "emissiveBorderCellStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderCellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderCellEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "forceApplyZoneParticle": false, + "applyEmissionColorOnWeapons": false, + "emissionColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "emissionColorFadeInDuration": 0.0, + "emissionColorFadeOutDuration": 0.0 + }, + "effectAIParameters": { + "$type": "EffectAIParameters, Assembly-CSharp", + "aoeScoreMultiplier": 1.0, + "cooldownForCaster": 0, + "cooldownForBattle": 0, + "sortingScoreMultiplier": 1.0, + "dynamicCooldown": false + }, + "animationMagicEffect": "Animation0", + "lightCounterDispellsEffect": false, + "hideSavingThrowAnimation": false + }, + "delegatedToAction": false, + "surrogateToSpell": null, + "triggeredBySpecialMove": false, + "activationTime": "NoCost", + "autoActivationRequiredTargetSenseType": "None", + "autoActivationRequiredTargetCreatureTag": "", + "autoActivationPowerTag": "", + "triggeringPower": null, + "copyTargetingFromTriggeringPower": false, + "reactionContext": "None", + "damageTypes": [], + "reactionName": "", + "reactionActingCharacterParamIdx": 0, + "reactionAttackerParamIdx": -1, + "hasCastingFailure": false, + "castingSuccessComputation": "CasterLevel", + "canUseInDialog": false, + "disableIfConditionIsOwned": null, + "disableIfTargetConditionIsOwned": null, + "rechargeRate": "AtWill", + "costPerUse": 1, + "spellcastingFeature": null, + "usesDetermination": "Fixed", + "abilityScoreDetermination": "Explicit", + "usesAbilityScoreName": "Charisma", + "fixedUsesPerRecharge": 1, + "abilityScore": "Intelligence", + "attackHitComputation": "AbilityScore", + "fixedAttackHit": 0, + "abilityScoreBonusToAttack": false, + "proficiencyBonusToAttack": false, + "uniqueInstance": false, + "showCasting": true, + "shortTitleOverride": "", + "overriddenPower": null, + "includeBaseDescription": false, + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "Feature/&PowerVanishSummonTitle", + "description": "Feature/&PowerVanishSummonDescription", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "78aa1e489ac1fcb47bcd2d2e2bcf264b", + "m_SubObjectName": "FlexibleCastingCreateSpellSlot", + "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": "2e2b66aa-217d-5063-9073-32f0dca0efb1", + "contentPack": 9999, + "name": "PowerVanishSummon" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/MonsterDefinition/InnovationWeaponAdvancedSteelDefender.json b/Diagnostics/UnfinishedBusinessBlueprints/MonsterDefinition/InnovationWeaponAdvancedSteelDefender.json index adc1032cfc..78913a6d31 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/MonsterDefinition/InnovationWeaponAdvancedSteelDefender.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/MonsterDefinition/InnovationWeaponAdvancedSteelDefender.json @@ -75,6 +75,8 @@ "Definition:MoveModeMove8:4c110104739c99e4d920529a058ab2e2", "Definition:PerceptionAffinitySteelDefender:1e2f7b93-3ee7-571a-b87a-ad16d7b85c9e", "Definition:PowerInnovationWeaponSteelDefenderRepair:a60028a8-b127-5bcb-9304-946d6b8387c3", + "Definition:PowerTeleportSummon:f0d1e121-9b02-52ee-b4c7-5525d575c078", + "Definition:PowerVanishSummon:2e2b66aa-217d-5063-9073-32f0dca0efb1", "Definition:SenseDarkvision12:b7ab84f45ce51764ca9c430f745a6b4e" ], "attackIterations": [ diff --git a/Diagnostics/UnfinishedBusinessBlueprints/MonsterDefinition/InnovationWeaponSteelDefender.json b/Diagnostics/UnfinishedBusinessBlueprints/MonsterDefinition/InnovationWeaponSteelDefender.json index 10d966df0f..2a13a7df68 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/MonsterDefinition/InnovationWeaponSteelDefender.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/MonsterDefinition/InnovationWeaponSteelDefender.json @@ -75,6 +75,8 @@ "Definition:MoveModeMove8:4c110104739c99e4d920529a058ab2e2", "Definition:PerceptionAffinitySteelDefender:1e2f7b93-3ee7-571a-b87a-ad16d7b85c9e", "Definition:PowerInnovationWeaponSteelDefenderRepair:a60028a8-b127-5bcb-9304-946d6b8387c3", + "Definition:PowerTeleportSummon:f0d1e121-9b02-52ee-b4c7-5525d575c078", + "Definition:PowerVanishSummon:2e2b66aa-217d-5063-9073-32f0dca0efb1", "Definition:SenseDarkvision12:b7ab84f45ce51764ca9c430f745a6b4e" ], "attackIterations": [ diff --git a/Diagnostics/UnfinishedBusinessBlueprints/MonsterDefinition/OwlFamiliar.json b/Diagnostics/UnfinishedBusinessBlueprints/MonsterDefinition/OwlFamiliar.json index fd5ad5ef12..b31154a896 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/MonsterDefinition/OwlFamiliar.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/MonsterDefinition/OwlFamiliar.json @@ -61,6 +61,8 @@ "Definition:MoveModeFly12:5e70172c8e2a40146b375001ab656a44", "Definition:MoveModeMove2:0127a492ba7a429408b3282dde9374d7", "Definition:PowerHelp:faded953-56c9-55e9-aa49-54a485c1de6d", + "Definition:PowerTeleportSummon:f0d1e121-9b02-52ee-b4c7-5525d575c078", + "Definition:PowerVanishSummon:2e2b66aa-217d-5063-9073-32f0dca0efb1", "Definition:SenseDarkvision24:a7a21553e478546448413923e8dd948e", "Definition:SenseNormalVision:222ef639393ed4e4bbd7152690597945" ], diff --git a/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs b/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs index f47a5d315e..ca2bde57e8 100644 --- a/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs +++ b/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs @@ -1852,6 +1852,9 @@ internal static class FeatureDefinitionPowers internal static FeatureDefinitionPower PowerSorcererChildRiftOffering { get; } = GetDefinition("PowerSorcererChildRiftOffering"); + internal static FeatureDefinitionPower PowerSorcererCreateSpellSlot { get; } = + GetDefinition("PowerSorcererCreateSpellSlot"); + internal static FeatureDefinitionPower PowerSorcererHauntedSoulSpiritVisage { get; } = GetDefinition("PowerSorcererHauntedSoulSpiritVisage"); @@ -3562,6 +3565,14 @@ internal static class SpellDefinitions internal static SpellDefinition VenomousSpike { get; } = GetDefinition("VenomousSpike"); internal static SpellDefinition ViciousMockery { get; } = GetDefinition("ViciousMockery"); internal static SpellDefinition WallOfFire { get; } = GetDefinition("WallOfFire"); + internal static SpellDefinition WallOfFireLine { get; } = GetDefinition("WallOfFireLine"); + + internal static SpellDefinition WallOfFireRing_Inner { get; } = + GetDefinition("WallOfFireRing_Inner"); + + internal static SpellDefinition WallOfFireRing_Outer { get; } = + GetDefinition("WallOfFireRing_Outer"); + internal static SpellDefinition WallOfForce { get; } = GetDefinition("WallOfForce"); internal static SpellDefinition WallOfThornsWallLine { get; } = diff --git a/SolastaUnfinishedBusiness/ChangelogHistory.txt b/SolastaUnfinishedBusiness/ChangelogHistory.txt index 88ce41f285..3f8325c58a 100644 --- a/SolastaUnfinishedBusiness/ChangelogHistory.txt +++ b/SolastaUnfinishedBusiness/ChangelogHistory.txt @@ -1,4 +1,20 @@ -1.5.94.36: +1.5.94.37: + +- added additional sample portraits [by Artyoan] +- added Gameplay > Rules > 'Only apply Entangle effect at casting time and also force a strength check to break free from the vines' +- added Gameplay > Rules > 'Use official small races rules when wielding heavy weapons' +- fixed action switching integration with some custom campaigns NPCs preventing loading locations +- fixed Circle of the Eternal Grove verdancy condition healing way too much on turn start and not getting removed on self +- fixed Interface > Game UI > 'Hide exits and teleporters visual effects if not discovered yet' not displaying gizmos under certain scenarios +- fixed Path of The Reaver eviscerate power updating usage before reaction was confirmed +- fixed Patron Mountain still offering Barrier of Stone reaction from level 6 instead of Eternal Guardian one +- fixed vanilla Insect Plague spell not rolling a constitution saving throw +- fixed vanilla Sorcerer spells list not having Insect Plague at level 5 +- fixed vanilla Wall of Fire spell not rolling a dexterity saving throw +- improved Find Familiar and Steel Defender with vanish and teleport to caster powers [teleport works off combat only] +- removed Gameplay > Rules > 'Only apply Entangle effect at casting time' + +1.5.94.36: - fixed a null exception on gadgets saving throws diff --git a/SolastaUnfinishedBusiness/CustomBehaviors/ActionSwitching.cs b/SolastaUnfinishedBusiness/CustomBehaviors/ActionSwitching.cs index ebafe724c1..ed85d6a0be 100644 --- a/SolastaUnfinishedBusiness/CustomBehaviors/ActionSwitching.cs +++ b/SolastaUnfinishedBusiness/CustomBehaviors/ActionSwitching.cs @@ -47,8 +47,11 @@ private static void EnumerateFeaturesHierarchically( ICollection<(FeatureDefinition feature, string origin)> features, IEnumerable parentList, string origin) { + // extra null checks required as some custom campaigns NPCs might produce a null here foreach (var feature in parentList - .Where(feature => feature.AllowsDuplicate || features.All(x => x.feature != feature))) + .Where(feature => + feature != null && feature.AllowsDuplicate || + features != null && features.All(x => x.feature != feature))) { switch (feature) { diff --git a/SolastaUnfinishedBusiness/CustomBehaviors/ModifyEffectDescriptionOnLevels.cs b/SolastaUnfinishedBusiness/CustomBehaviors/ModifyEffectDescriptionOnLevels.cs index 796074013c..45514cca79 100644 --- a/SolastaUnfinishedBusiness/CustomBehaviors/ModifyEffectDescriptionOnLevels.cs +++ b/SolastaUnfinishedBusiness/CustomBehaviors/ModifyEffectDescriptionOnLevels.cs @@ -6,16 +6,16 @@ namespace SolastaUnfinishedBusiness.CustomBehaviors; public class ModifyEffectDescriptionOnLevels : IModifyEffectDescription { - private readonly string _className; + private readonly CharacterClassDefinition _class; private readonly (int level, EffectDescription description)[] _effects; private readonly FeatureDefinitionPower _power; public ModifyEffectDescriptionOnLevels( - string className, + CharacterClassDefinition klass, FeatureDefinitionPower power, params (int, EffectDescription)[] effects) { - _className = className; + _class = klass; _power = power; _effects = effects; } @@ -51,8 +51,8 @@ public EffectDescription GetEffectDescription( private int GetLevel(RulesetCharacter character) { - return string.IsNullOrEmpty(_className) + return _class == null ? character.TryGetAttributeValue(AttributeDefinitions.CharacterLevel) - : character.GetClassLevel(_className); + : character.GetClassLevel(_class); } } diff --git a/SolastaUnfinishedBusiness/CustomBehaviors/ModifyProviderRankByClassLevel.cs b/SolastaUnfinishedBusiness/CustomBehaviors/ModifyProviderRankByClassLevel.cs index a155d20268..f590bf451c 100644 --- a/SolastaUnfinishedBusiness/CustomBehaviors/ModifyProviderRankByClassLevel.cs +++ b/SolastaUnfinishedBusiness/CustomBehaviors/ModifyProviderRankByClassLevel.cs @@ -5,19 +5,15 @@ namespace SolastaUnfinishedBusiness.CustomBehaviors; public class ModifyProviderRankByClassLevel : IModifyProviderRank { - private readonly string _className; + private readonly CharacterClassDefinition _class; - private ModifyProviderRankByClassLevel(string className) - { - _className = className; - } - - public ModifyProviderRankByClassLevel(BaseDefinition classDefinition) : this(classDefinition.Name) + public ModifyProviderRankByClassLevel(CharacterClassDefinition klass) { + _class = klass; } public int GetRank(RulesetCharacter character) { - return character.GetClassLevel(_className); + return character.GetClassLevel(_class); } } diff --git a/SolastaUnfinishedBusiness/CustomBehaviors/PowerVisibilityModifier.cs b/SolastaUnfinishedBusiness/CustomBehaviors/PowerVisibilityModifier.cs index f94a6a7f7f..3f4de16e4c 100644 --- a/SolastaUnfinishedBusiness/CustomBehaviors/PowerVisibilityModifier.cs +++ b/SolastaUnfinishedBusiness/CustomBehaviors/PowerVisibilityModifier.cs @@ -30,6 +30,7 @@ internal class PowerVisibilityModifier internal static readonly PowerVisibilityModifier Hidden = new((_, _, _) => false); internal static readonly PowerVisibilityModifier Visible = new((_, _, _) => true); + internal static readonly PowerVisibilityModifier NotInCombat = new((_, _, _) => Gui.Battle == null); private readonly IsPowerVisibleHandler _handler; diff --git a/SolastaUnfinishedBusiness/CustomBuilders/InfusionsBuilders.cs b/SolastaUnfinishedBusiness/CustomBuilders/InfusionsBuilders.cs index 10a4d1c0e1..af277c0085 100644 --- a/SolastaUnfinishedBusiness/CustomBuilders/InfusionsBuilders.cs +++ b/SolastaUnfinishedBusiness/CustomBuilders/InfusionsBuilders.cs @@ -439,7 +439,7 @@ private static void UpgradeInfusionPower( { power.AddCustomSubFeatures( new ModifyEffectDescriptionOnLevels( - InventorClass.ClassName, + InventorClass.Class, power, (level, BuildInfuseItemWithFeaturesEffect(features)))); } diff --git a/SolastaUnfinishedBusiness/Displays/RulesDisplay.cs b/SolastaUnfinishedBusiness/Displays/RulesDisplay.cs index c385f8aa74..a67762199f 100644 --- a/SolastaUnfinishedBusiness/Displays/RulesDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/RulesDisplay.cs @@ -67,6 +67,12 @@ internal static void DisplayRules() Main.Settings.UseOfficialDistanceCalculation = toggle; } + toggle = Main.Settings.UseOfficialSmallRacesDisWithHeavyWeapons; + if (UI.Toggle(Gui.Localize("ModUi/&UseOfficialSmallRacesDisWithHeavyWeapons"), ref toggle, UI.AutoWidth())) + { + Main.Settings.UseOfficialSmallRacesDisWithHeavyWeapons = toggle; + } + UI.Label(); toggle = Main.Settings.StealthBreaksWhenAttackHits; diff --git a/SolastaUnfinishedBusiness/Info.json b/SolastaUnfinishedBusiness/Info.json index 6ad45fe814..a571efadda 100644 --- a/SolastaUnfinishedBusiness/Info.json +++ b/SolastaUnfinishedBusiness/Info.json @@ -1,7 +1,7 @@ { "Id": "SolastaUnfinishedBusiness", "DisplayName": "Unfinished Business [UB1]", - "Version": "1.5.94.36", + "Version": "1.5.94.37", "GameVersion": "1.5.94", "ManagerVersion": "0.24.0", "AssemblyName": "SolastaUnfinishedBusiness.dll", diff --git a/SolastaUnfinishedBusiness/Main.cs b/SolastaUnfinishedBusiness/Main.cs index e2f25b317f..5bb109b10b 100644 --- a/SolastaUnfinishedBusiness/Main.cs +++ b/SolastaUnfinishedBusiness/Main.cs @@ -16,8 +16,6 @@ namespace SolastaUnfinishedBusiness; //#endif internal static class Main { - internal static readonly bool IsDebugBuild = Debug.isDebugBuild; - internal static readonly string ModFolder = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); private static ModManager Mod { get; set; } private static UnityModManager.ModEntry ModEntry { get; set; } diff --git a/SolastaUnfinishedBusiness/Models/AiContext.cs b/SolastaUnfinishedBusiness/Models/AiContext.cs index 1d1b5a7aa5..025c6d99a7 100644 --- a/SolastaUnfinishedBusiness/Models/AiContext.cs +++ b/SolastaUnfinishedBusiness/Models/AiContext.cs @@ -25,6 +25,7 @@ internal static void Load() BuildDecisionBreakFreeFromCondition("ConditionFlashFreeze", DoStrengthCheckCasterDC); BuildDecisionBreakFreeFromCondition("ConditionGrappledRestrainedEnsnared", DoStrengthCheckCasterDC); BuildDecisionBreakFreeFromCondition("ConditionGrappledRestrainedSpellWeb", DoStrengthCheckCasterDC); + BuildDecisionBreakFreeFromCondition("ConditionRestrainedByEntangle", DoStrengthCheckCasterDC); // vanilla } // boolParameter false won't do any ability check diff --git a/SolastaUnfinishedBusiness/Models/CharacterContext.cs b/SolastaUnfinishedBusiness/Models/CharacterContext.cs index 0fe48d265d..e3711c338b 100644 --- a/SolastaUnfinishedBusiness/Models/CharacterContext.cs +++ b/SolastaUnfinishedBusiness/Models/CharacterContext.cs @@ -16,6 +16,7 @@ using SolastaUnfinishedBusiness.Properties; using SolastaUnfinishedBusiness.Races; using SolastaUnfinishedBusiness.Subclasses; +using TA; using static RuleDefinitions; using static FeatureDefinitionAttributeModifier; using static SolastaUnfinishedBusiness.Api.DatabaseHelper; @@ -32,6 +33,7 @@ using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionProficiencys; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionSenses; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.MorphotypeElementDefinitions; +using static SolastaUnfinishedBusiness.Api.DatabaseHelper.SpellDefinitions; namespace SolastaUnfinishedBusiness.Models; @@ -188,9 +190,44 @@ internal static class CharacterContext .SetUniqueInstance() .AddToDB(); + internal static readonly FeatureDefinitionPower PowerTeleportSummon = FeatureDefinitionPowerBuilder + .Create("PowerTeleportSummon") + .SetGuiPresentation(Category.Feature, DimensionDoor) + .SetUsesFixed(ActivationTime.NoCost) + .SetEffectDescription( + EffectDescriptionBuilder + .Create() + .SetTargetingData(Side.Ally, RangeType.Distance, 6, TargetType.Position) + .SetEffectForms( + EffectFormBuilder + .Create() + .SetMotionForm(MotionForm.MotionType.TeleportToDestination) + .Build()) + .UseQuickAnimations() + .Build()) + .AddCustomSubFeatures(PowerVisibilityModifier.NotInCombat, new FilterTargetingPositionPowerTeleportSummon()) + .AddToDB(); + + internal static readonly FeatureDefinitionPower PowerVanishSummon = FeatureDefinitionPowerBuilder + .Create("PowerVanishSummon") + .SetGuiPresentation(Category.Feature, PowerSorcererCreateSpellSlot) + .SetUsesFixed(ActivationTime.NoCost) + .SetEffectDescription( + EffectDescriptionBuilder + .Create() + .SetTargetingData(Side.Ally, RangeType.Self, 0, TargetType.Self) + .SetEffectForms( + EffectFormBuilder + .Create() + .SetKillForm(KillCondition.Always) + .Build()) + .UseQuickAnimations() + .Build()) + .AddToDB(); + private static readonly FeatureDefinitionPower FeatureDefinitionPowerNatureShroud = FeatureDefinitionPowerBuilder .Create("PowerRangerNatureShroud") - .SetGuiPresentation(Category.Feature, SpellDefinitions.Invisibility) + .SetGuiPresentation(Category.Feature, Invisibility) .SetUsesProficiencyBonus(ActivationTime.BonusAction) .SetEffectDescription( EffectDescriptionBuilder @@ -1385,6 +1422,30 @@ private static bool IsSubRace(CharacterRaceDefinition raceDefinition) .Any(crd => crd.SubRaces.Contains(raceDefinition)); } + private sealed class FilterTargetingPositionPowerTeleportSummon : IFilterTargetingPosition + { + public void EnumerateValidPositions( + CursorLocationSelectPosition cursorLocationSelectPosition, List validPositions) + { + var gameLocationPositioningService = ServiceRepository.GetService(); + var source = cursorLocationSelectPosition.ActionParams.ActingCharacter; + var summoner = source.RulesetCharacter.GetMySummoner(); + var boxInt = new BoxInt( + summoner.LocationPosition, new int3(-1, -1, -1), new int3(1, 1, 1)); + + foreach (var position in boxInt.EnumerateAllPositionsWithin()) + { + if (gameLocationPositioningService.CanPlaceCharacter( + source, position, CellHelpers.PlacementMode.Station) && + gameLocationPositioningService.CanCharacterStayAtPosition_Floor( + source, position, onlyCheckCellsWithRealGround: true)) + { + validPositions.Add(position); + } + } + } + } + private sealed class RollSavingThrowInitiatedIndomitableSaving : IRollSavingThrowInitiated { public void OnSavingThrowInitiated( diff --git a/SolastaUnfinishedBusiness/Models/FixesContext.cs b/SolastaUnfinishedBusiness/Models/FixesContext.cs index 2ebc1ddc2d..f27a90de2b 100644 --- a/SolastaUnfinishedBusiness/Models/FixesContext.cs +++ b/SolastaUnfinishedBusiness/Models/FixesContext.cs @@ -18,6 +18,7 @@ using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionActionAffinitys; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionAdditionalDamages; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.SpellDefinitions; +using static SolastaUnfinishedBusiness.Api.DatabaseHelper.SpellListDefinitions; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.CharacterClassDefinitions; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionAttributeModifiers; @@ -407,6 +408,36 @@ private static void FixMinorSpellIssues() ChillTouch.EffectDescription.EffectForms[0].savingThrowAffinity = EffectSavingThrowType.None; RayOfFrost.EffectDescription.EffectForms[0].savingThrowAffinity = EffectSavingThrowType.None; + //BUGFIX: Wall of Fire should have a DEX saving throw + WallOfFire.EffectDescription.hasSavingThrow = true; + WallOfFire.EffectDescription.savingThrowAbility = AttributeDefinitions.Dexterity; + WallOfFire.EffectDescription.EffectForms[0].hasSavingThrow = true; + WallOfFire.EffectDescription.EffectForms[0].savingThrowAffinity = EffectSavingThrowType.HalfDamage; + + WallOfFireLine.EffectDescription.hasSavingThrow = true; + WallOfFireLine.EffectDescription.savingThrowAbility = AttributeDefinitions.Dexterity; + WallOfFireLine.EffectDescription.EffectForms[0].hasSavingThrow = true; + WallOfFireLine.EffectDescription.EffectForms[0].savingThrowAffinity = EffectSavingThrowType.HalfDamage; + + WallOfFireRing_Inner.EffectDescription.hasSavingThrow = true; + WallOfFireRing_Inner.EffectDescription.savingThrowAbility = AttributeDefinitions.Dexterity; + WallOfFireRing_Inner.EffectDescription.EffectForms[0].hasSavingThrow = true; + WallOfFireRing_Inner.EffectDescription.EffectForms[0].savingThrowAffinity = EffectSavingThrowType.HalfDamage; + + WallOfFireRing_Outer.EffectDescription.hasSavingThrow = true; + WallOfFireRing_Outer.EffectDescription.savingThrowAbility = AttributeDefinitions.Dexterity; + WallOfFireRing_Outer.EffectDescription.EffectForms[0].hasSavingThrow = true; + WallOfFireRing_Outer.EffectDescription.EffectForms[0].savingThrowAffinity = EffectSavingThrowType.HalfDamage; + + //BUGFIX: Insect Plague should have a CON saving throw + InsectPlague.EffectDescription.hasSavingThrow = true; + InsectPlague.EffectDescription.savingThrowAbility = AttributeDefinitions.Constitution; + InsectPlague.EffectDescription.EffectForms[0].hasSavingThrow = true; + InsectPlague.EffectDescription.EffectForms[0].savingThrowAffinity = EffectSavingThrowType.HalfDamage; + + //BUGFIX: Sorcerers should have Insect Plague at level 5 + SpellListSorcerer.SpellsByLevel.FirstOrDefault(x => x.Level == 5)!.Spells.Add(InsectPlague); + //BUGFIX: Shows Concentration tag in UI BladeBarrier.requiresConcentration = true; diff --git a/SolastaUnfinishedBusiness/Models/GameUiContext.cs b/SolastaUnfinishedBusiness/Models/GameUiContext.cs index 6d807432a9..93c66896d6 100644 --- a/SolastaUnfinishedBusiness/Models/GameUiContext.cs +++ b/SolastaUnfinishedBusiness/Models/GameUiContext.cs @@ -500,13 +500,17 @@ internal static void ComputeIsRevealedExtended(GameGadget __instance, ref bool _ __instance.revealed = false; __result = false; - var x = (int)__instance.FeedbackPosition.x; - var y = (int)__instance.FeedbackPosition.z; + var referenceBoundingBox = __instance.ReferenceBoundingBox; + var gridAccessor = GridAccessor.Default; - var feedbackPosition = new int3(x, 0, y); - var referenceBoundingBox = new BoxInt(feedbackPosition, feedbackPosition); + // required for gadgets that are enabled from conditional states + if (!referenceBoundingBox.IsValid) + { + __instance.revealed = true; + __result = true; - var gridAccessor = GridAccessor.Default; + return; + } foreach (var position in referenceBoundingBox.EnumerateAllPositionsWithin()) { diff --git a/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs b/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs index fc89c902eb..0d2ef222c8 100644 --- a/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs +++ b/SolastaUnfinishedBusiness/Models/SrdAndHouseRulesContext.cs @@ -365,11 +365,15 @@ internal static void SwitchRecurringEffectOnEntangle() { // Remove recurring effect on Entangle (as per SRD, any creature is only affected at cast time) Entangle.effectDescription.recurrentEffect = RecurrentEffect.OnActivation; + Entangle.effectDescription.EffectForms[2].canSaveToCancel = false; + ConditionRestrainedByEntangle.Features.Add(FeatureDefinitionActionAffinitys.ActionAffinityGrappled); } else { Entangle.effectDescription.recurrentEffect = RecurrentEffect.OnActivation | RecurrentEffect.OnTurnEnd | RecurrentEffect.OnEnter; + Entangle.effectDescription.EffectForms[2].canSaveToCancel = true; + ConditionRestrainedByEntangle.Features.Remove(FeatureDefinitionActionAffinitys.ActionAffinityGrappled); } } @@ -714,6 +718,24 @@ internal static bool IsHandCrossbowUseInvalid( && main.ItemDefinition.WeaponDescription?.WeaponType != WeaponTypeDefinitions.UnarmedStrikeType.Name; } + internal static void HandleSmallRaces(BattleDefinitions.AttackEvaluationParams evaluationParams) + { + if (!Main.Settings.UseOfficialSmallRacesDisWithHeavyWeapons) + { + return; + } + + var hero = evaluationParams.attacker.RulesetCharacter.GetOriginalHero(); + + if (hero?.RaceDefinition.SizeDefinition == CharacterSizeDefinitions.Small && + evaluationParams.attackMode is { SourceDefinition: ItemDefinition { IsWeapon: true } itemDefinition } && + itemDefinition.WeaponDescription.WeaponTags.Contains(TagsDefinitions.WeaponTagHeavy)) + { + evaluationParams.attackModifier.AttackAdvantageTrends.Add( + new TrendInfo(-1, FeatureSourceType.Unknown, "Feedback/&SmallRace", null)); + } + } + private sealed class CanIdentifyOnRest : IValidatePowerUse { private CanIdentifyOnRest() @@ -1133,6 +1155,7 @@ private static bool IsFlankingWithMath(GameLocationCharacter attacker, GameLocat } var allyCenter = new FlankingMathExtensions.Point3D(ally.LocationBattleBoundingBox.Center); + result = FlankingMathExtensions.LineIntersectsCubeOppositeSides(attackerCenter, allyCenter, defenderCube); if (result) diff --git a/SolastaUnfinishedBusiness/Patches/AttackEvaluationParamsPatcher.cs b/SolastaUnfinishedBusiness/Patches/AttackEvaluationParamsPatcher.cs index 74af49d73b..26a89883b7 100644 --- a/SolastaUnfinishedBusiness/Patches/AttackEvaluationParamsPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/AttackEvaluationParamsPatcher.cs @@ -53,6 +53,9 @@ public static void Postfix( //PATCH: apply higher ground rules FlankingAndHigherGroundRules.HandleHigherGround(__instance); + //PATCH: apply small races rules + SrdAndHouseRulesContext.HandleSmallRaces(__instance); + //PATCH: allow for `MeleeHit` effects to have reach changed, unless `Distant Spell` metamagic is used if (metamagicOption is { Type: MetamagicType.DistantSpell }) { @@ -79,6 +82,9 @@ public static void Postfix( //PATCH: apply higher ground rules FlankingAndHigherGroundRules.HandleHigherGround(__instance); + + //PATCH: apply small races rules + SrdAndHouseRulesContext.HandleSmallRaces(__instance); } } @@ -98,6 +104,9 @@ public static void Postfix( //PATCH: apply higher ground rules FlankingAndHigherGroundRules.HandleHigherGround(__instance); + + //PATCH: apply small races rules + SrdAndHouseRulesContext.HandleSmallRaces(__instance); } } diff --git a/SolastaUnfinishedBusiness/Patches/CharacterActionBreakFreePatcher.cs b/SolastaUnfinishedBusiness/Patches/CharacterActionBreakFreePatcher.cs index 8db934dbc4..59762b7cc3 100644 --- a/SolastaUnfinishedBusiness/Patches/CharacterActionBreakFreePatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/CharacterActionBreakFreePatcher.cs @@ -61,6 +61,7 @@ public static IEnumerator Postfix(IEnumerator values, CharacterActionBreakFree _ __instance.ActingCharacter.RulesetCharacter.RemoveCondition(restrainingCondition); yield break; case "ConditionGrappledRestrainedSpellWeb": + case "ConditionRestrainedByEntangle": { if (RulesetEntity.TryGetEntity(sourceGuid, out RulesetCharacterHero rulesetCharacterHero)) { diff --git a/SolastaUnfinishedBusiness/Patches/CharacterActionPanelPatcher.cs b/SolastaUnfinishedBusiness/Patches/CharacterActionPanelPatcher.cs index 3b1a6cfd26..962a03c972 100644 --- a/SolastaUnfinishedBusiness/Patches/CharacterActionPanelPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/CharacterActionPanelPatcher.cs @@ -239,7 +239,10 @@ public static bool Prefix(CharacterActionPanel __instance) } if (restrainingCondition?.ConditionDefinition.Name is not - ("ConditionVileBrew" or "ConditionGrappledRestrainedIceBound" or "ConditionGrappledRestrainedSpellWeb")) + ("ConditionVileBrew" or + "ConditionGrappledRestrainedIceBound" or + "ConditionGrappledRestrainedSpellWeb" or + "ConditionRestrainedByEntangle")) { return true; } diff --git a/SolastaUnfinishedBusiness/Patches/CursorLocationBattleFriendlyTurnPatcher.cs b/SolastaUnfinishedBusiness/Patches/CursorLocationBattleFriendlyTurnPatcher.cs index c86a99bd31..1ef9ef0a3e 100644 --- a/SolastaUnfinishedBusiness/Patches/CursorLocationBattleFriendlyTurnPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/CursorLocationBattleFriendlyTurnPatcher.cs @@ -31,9 +31,7 @@ public static IEnumerable Transpiler([NotNull] IEnumerable Transpiler([NotNull] IEnumerable instructions) { - var roomTransformPos = Main.IsDebugBuild ? 8 : 4; - var userRoomPos = Main.IsDebugBuild ? 4 : 2; var setLocalPositionMethod = typeof(Transform).GetMethod("set_localPosition"); var setupFlatRoomsMethod = new Action(DmProRendererContext.SetupFlatRooms).Method; var addVegetationMaskAreaMethod = @@ -46,12 +44,12 @@ public static IEnumerable Transpiler([NotNull] IEnumerable 10 net472 - 1.5.94.36 + 1.5.94.37 https://github.com/SolastaMods/SolastaUnfinishedBusiness git Debug Install;Release Install diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs index 6059a81df8..07e76462eb 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs @@ -1463,7 +1463,10 @@ internal static SpellDefinition BuildFindFamiliar() FeatureDefinitionCombatAffinitys.CombatAffinityFlyby, MovementAffinityNoClimb, MovementAffinityNoSpecialMoves, - FeatureDefinitionConditionAffinitys.ConditionAffinityProneImmunity) + FeatureDefinitionConditionAffinitys.ConditionAffinityProneImmunity, + CharacterContext.FeatureDefinitionPowerHelpAction, + CharacterContext.PowerTeleportSummon, + CharacterContext.PowerVanishSummon) .SetMonsterPresentation( MonsterPresentationBuilder .Create() @@ -1488,7 +1491,6 @@ internal static SpellDefinition BuildFindFamiliar() .SetFullyControlledWhenAllied(true) .SetDefaultFaction(FactionDefinitions.Party) .SetBestiaryEntry(BestiaryDefinitions.BestiaryEntry.None) - .AddFeatures(CharacterContext.FeatureDefinitionPowerHelpAction) .AddToDB(); var spell = SpellDefinitionBuilder.Create(Fireball, "FindFamiliar") diff --git a/SolastaUnfinishedBusiness/Subclasses/CircleOfTheLife.cs b/SolastaUnfinishedBusiness/Subclasses/CircleOfTheLife.cs index 195963ddb3..2f858a0c00 100644 --- a/SolastaUnfinishedBusiness/Subclasses/CircleOfTheLife.cs +++ b/SolastaUnfinishedBusiness/Subclasses/CircleOfTheLife.cs @@ -55,8 +55,8 @@ public CircleOfTheLife() var conditionVerdancy = ConditionDefinitionBuilder .Create(ConditionVerdancy) .SetGuiPresentation(Category.Condition, ConditionChildOfDarkness_DimLight) - // uses 2 but it will trigger 3 times as required because of the time we add it - .SetSpecialDuration(DurationType.Round, 2, TurnOccurenceType.EndOfSourceTurn) + // used End of Source Turn but in reality we manage this on TurnStartEvent + .SetSpecialDuration(DurationType.Round, 3, TurnOccurenceType.EndOfSourceTurn) .SetPossessive() .CopyParticleReferences(ConditionAided) .AllowMultipleInstances() @@ -68,8 +68,8 @@ public CircleOfTheLife() var conditionVerdancy14 = ConditionDefinitionBuilder .Create(ConditionVerdancy14) .SetGuiPresentation(ConditionVerdancy, Category.Condition, ConditionChildOfDarkness_DimLight) - // uses 4 but it will trigger 5 times as required because of the time we add it - .SetSpecialDuration(DurationType.Round, 4, TurnOccurenceType.EndOfSourceTurn) + // used End of Source Turn but in reality we manage this on TurnStartEvent + .SetSpecialDuration(DurationType.Round, 5, TurnOccurenceType.EndOfSourceTurn) .SetPossessive() .CopyParticleReferences(ConditionAided) .AllowMultipleInstances() @@ -181,7 +181,7 @@ private static int GetDruidLevel(ulong guid) { var caster = EffectHelpers.GetCharacterByGuid(guid); - return caster?.GetClassLevel(DruidClass) ?? 0; + return caster?.GetClassLevel(Druid) ?? 0; } private static bool IsAuthorizedSpell(EffectDescription effectDescription, BaseDefinition baseDefinition) @@ -211,6 +211,8 @@ private static void RemoveRevitalizingBoonIfRequired(RulesetActor removedFrom) private sealed class CharacterTurnStartListenerVerdancy : ICharacterTurnStartListener { + private const string VerdancyHealedTag = "VerdancyHealed"; + public void OnCharacterTurnStarted(GameLocationCharacter locationCharacter) { var rulesetCharacter = locationCharacter.RulesetCharacter; @@ -220,6 +222,13 @@ public void OnCharacterTurnStarted(GameLocationCharacter locationCharacter) return; } + if (locationCharacter.UsedSpecialFeatures.ContainsKey(VerdancyHealedTag)) + { + return; + } + + locationCharacter.UsedSpecialFeatures.Add(VerdancyHealedTag, 1); + foreach (var rulesetCondition in rulesetCharacter.AllConditions .Where(x => x.ConditionDefinition.Name is ConditionVerdancy or ConditionVerdancy14) .ToList()) @@ -231,10 +240,17 @@ public void OnCharacterTurnStarted(GameLocationCharacter locationCharacter) continue; } + var effectLevel = rulesetCondition.EffectLevel; var levels = caster.GetClassLevel(Druid); - var bonus = rulesetCondition.EffectLevel; + var harmoniousBloomBonus = levels >= 14 ? 1 : 0; + + rulesetCharacter.ReceiveHealing(effectLevel + harmoniousBloomBonus, true, caster.Guid); - rulesetCharacter.ReceiveHealing(levels + bonus, true, caster.Guid); + // have to manually handle condition removal as vanilla is a bit odd depending on initiative order + if (rulesetCondition.RemainingRounds == 0) + { + rulesetCharacter.RemoveCondition(rulesetCondition); + } } } } @@ -303,20 +319,29 @@ public void OnCharacterTurnStarted(GameLocationCharacter locationCharacter) return; } - foreach (var rulesetCondition in rulesetCharacter.AllConditions - .Where(x => x.ConditionDefinition.Name == ConditionSeedOfLife) - .ToList()) + var rulesetCondition = rulesetCharacter.AllConditions + .FirstOrDefault(x => x.ConditionDefinition.Name == ConditionSeedOfLife); + + if (rulesetCondition == null) { - var caster = EffectHelpers.GetCharacterByGuid(rulesetCondition.SourceGuid); + return; + } - if (caster is not { IsDeadOrDyingOrUnconscious: false }) - { - continue; - } + var caster = EffectHelpers.GetCharacterByGuid(rulesetCondition.SourceGuid); - var pb = caster.TryGetAttributeValue(AttributeDefinitions.ProficiencyBonus); + if (caster is not { IsDeadOrDyingOrUnconscious: false }) + { + return; + } - rulesetCharacter.ReceiveHealing(pb, true, caster.Guid); + var pb = caster.TryGetAttributeValue(AttributeDefinitions.ProficiencyBonus); + + rulesetCharacter.ReceiveHealing(pb, true, caster.Guid); + + // have to manually handle condition removal as vanilla is a bit odd depending on initiative order + if (rulesetCondition.RemainingRounds == 0) + { + rulesetCharacter.RemoveCondition(rulesetCondition); } } } diff --git a/SolastaUnfinishedBusiness/Subclasses/CollegeOfHarlequin.cs b/SolastaUnfinishedBusiness/Subclasses/CollegeOfHarlequin.cs index 04f732f260..3483d070f7 100644 --- a/SolastaUnfinishedBusiness/Subclasses/CollegeOfHarlequin.cs +++ b/SolastaUnfinishedBusiness/Subclasses/CollegeOfHarlequin.cs @@ -285,7 +285,7 @@ public IEnumerator HandleReducedToZeroHpByMe( yield break; } - var level = attacker.RulesetCharacter.GetClassLevel(BardClass); + var level = attacker.RulesetCharacter.GetClassLevel(CharacterClassDefinitions.Bard); var power = level >= 14 ? _power14 : _power6; var usablePower = UsablePowersProvider.Get(power, rulesetAttacker); diff --git a/SolastaUnfinishedBusiness/Subclasses/InnovationArtillerist.cs b/SolastaUnfinishedBusiness/Subclasses/InnovationArtillerist.cs index f69bb32f65..a86d5bf11c 100644 --- a/SolastaUnfinishedBusiness/Subclasses/InnovationArtillerist.cs +++ b/SolastaUnfinishedBusiness/Subclasses/InnovationArtillerist.cs @@ -44,7 +44,7 @@ public sealed class InnovationArtillerist : AbstractSubclass private const string ArcaneFirearm = "ArcaneFirearm"; private static readonly LimitEffectInstances CannonLimiter = - new(CreatureTag, character => character.GetSubclassLevel(InventorClass.Class, Name) < 15 ? 1 : 2); + new(CreatureTag, character => character.GetClassLevel(InventorClass.Class) < 15 ? 1 : 2); public InnovationArtillerist() { diff --git a/SolastaUnfinishedBusiness/Subclasses/InnovationWeapon.cs b/SolastaUnfinishedBusiness/Subclasses/InnovationWeapon.cs index ca792130e2..22cbfcd874 100644 --- a/SolastaUnfinishedBusiness/Subclasses/InnovationWeapon.cs +++ b/SolastaUnfinishedBusiness/Subclasses/InnovationWeapon.cs @@ -394,7 +394,9 @@ private static MonsterDefinition BuildSteelDefenderMonster() FeatureDefinitionActionAffinitys.ActionAffinityFightingStyleProtection, FeatureDefinitionConditionAffinitys.ConditionAffinityCharmImmunity, FeatureDefinitionConditionAffinitys.ConditionAffinityExhaustionImmunity, - FeatureDefinitionConditionAffinitys.ConditionAffinityPoisonImmunity) + FeatureDefinitionConditionAffinitys.ConditionAffinityPoisonImmunity, + CharacterContext.PowerTeleportSummon, + CharacterContext.PowerVanishSummon) .SetCreatureTags(SteelDefenderTag) .SetDefaultFaction(FactionDefinitions.Party) .SetFullyControlledWhenAllied(true) diff --git a/SolastaUnfinishedBusiness/Subclasses/PathOfTheReaver.cs b/SolastaUnfinishedBusiness/Subclasses/PathOfTheReaver.cs index 7b79abf458..5640a46b22 100644 --- a/SolastaUnfinishedBusiness/Subclasses/PathOfTheReaver.cs +++ b/SolastaUnfinishedBusiness/Subclasses/PathOfTheReaver.cs @@ -164,8 +164,6 @@ private static IEnumerator HandleEnemyDeath( yield break; } - rulesetAttacker.UpdateUsageForPower(featureDefinitionPower, featureDefinitionPower.CostPerUse); - var classLevel = rulesetAttacker.GetClassLevel(CharacterClassDefinitions.Barbarian); var totalHealing = 2 * classLevel; var reactionParams = @@ -187,6 +185,7 @@ private static IEnumerator HandleEnemyDeath( yield break; } + rulesetAttacker.UpdateUsageForPower(featureDefinitionPower, featureDefinitionPower.CostPerUse); rulesetAttacker.LogCharacterUsedPower(featureDefinitionPower); ReceiveHealing(attacker, totalHealing); } diff --git a/SolastaUnfinishedBusiness/Subclasses/PatronMountain.cs b/SolastaUnfinishedBusiness/Subclasses/PatronMountain.cs index d2caab028d..beb50a1a73 100644 --- a/SolastaUnfinishedBusiness/Subclasses/PatronMountain.cs +++ b/SolastaUnfinishedBusiness/Subclasses/PatronMountain.cs @@ -97,9 +97,6 @@ public PatronMountain() .SetReactionContext(ExtraReactionContext.Custom) .AddToDB(); - powerBarrierOfStone.AddCustomSubFeatures( - new AttackBeforeHitConfirmedOnMeBarrierOfStone(powerBarrierOfStone, conditionBarrierOfStone)); - // Knowledge of Aeons var proficiencyNatureSurvival = FeatureDefinitionProficiencyBuilder @@ -150,8 +147,8 @@ public PatronMountain() .SetOverriddenPower(powerBarrierOfStone) .AddToDB(); - powerEternalGuardian.AddCustomSubFeatures( - new AttackBeforeHitConfirmedOnMeBarrierOfStone(powerEternalGuardian, conditionBarrierOfStone)); + powerBarrierOfStone.AddCustomSubFeatures(new AttackBeforeHitConfirmedOnMeBarrierOfStone( + powerBarrierOfStone, powerEternalGuardian, conditionBarrierOfStone)); // LEVEL 10 @@ -230,13 +227,16 @@ private class AttackBeforeHitConfirmedOnMeBarrierOfStone : IAttackBeforeHitConfirmedOnMeOrAlly, IMagicalAttackBeforeHitConfirmedOnMeOrAlly { private readonly ConditionDefinition _conditionDefinition; - private readonly FeatureDefinitionPower _featureDefinitionPower; + private readonly FeatureDefinitionPower _powerBarrierOfStone; + private readonly FeatureDefinitionPower _powerEternalGuardian; public AttackBeforeHitConfirmedOnMeBarrierOfStone( - FeatureDefinitionPower featureDefinitionPower, + FeatureDefinitionPower powerBarrierOfStone, + FeatureDefinitionPower powerEternalGuardian, ConditionDefinition conditionDefinition) { - _featureDefinitionPower = featureDefinitionPower; + _powerBarrierOfStone = powerBarrierOfStone; + _powerEternalGuardian = powerEternalGuardian; _conditionDefinition = conditionDefinition; } @@ -309,13 +309,15 @@ private IEnumerator HandleReaction(GameLocationCharacter defender, GameLocationC } var rulesetMe = me.RulesetCharacter; + var levels = rulesetMe.GetClassLevel(CharacterClassDefinitions.Warlock); + var power = levels < 6 ? _powerBarrierOfStone : _powerEternalGuardian; - if (rulesetMe.GetRemainingPowerCharges(_featureDefinitionPower) <= 0) + if (rulesetMe.GetRemainingPowerCharges(power) <= 0) { yield break; } - var usablePower = UsablePowersProvider.Get(_featureDefinitionPower, rulesetMe); + var usablePower = UsablePowersProvider.Get(power, rulesetMe); var reactionParams = new CharacterActionParams(me, (ActionDefinitions.Id)ExtraActionId.DoNothingReaction) { @@ -335,7 +337,7 @@ private IEnumerator HandleReaction(GameLocationCharacter defender, GameLocationC yield break; } - rulesetMe.UpdateUsageForPower(_featureDefinitionPower, _featureDefinitionPower.CostPerUse); + rulesetMe.UpdateUsageForPower(power, power.CostPerUse); rulesetDefender.InflictCondition( _conditionDefinition.Name, _conditionDefinition.DurationType, diff --git a/SolastaUnfinishedBusiness/Subclasses/SorcerousFieldManipulator.cs b/SolastaUnfinishedBusiness/Subclasses/SorcerousFieldManipulator.cs index 99455d69ee..ba9cdc4e6c 100644 --- a/SolastaUnfinishedBusiness/Subclasses/SorcerousFieldManipulator.cs +++ b/SolastaUnfinishedBusiness/Subclasses/SorcerousFieldManipulator.cs @@ -59,7 +59,7 @@ public SorcerousFieldManipulator() .SetEffectForms( EffectFormBuilder .Create() - .SetMotionForm(MotionForm.MotionType.TeleportToDestination, 12) + .SetMotionForm(MotionForm.MotionType.TeleportToDestination) .HasSavingThrow(EffectSavingThrowType.Negates) .Build()) .Build()) diff --git a/SolastaUnfinishedBusiness/Translations/de/Others-de.txt b/SolastaUnfinishedBusiness/Translations/de/Others-de.txt index 1f928c75b9..3d3c8355a4 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Others-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Others-de.txt @@ -104,6 +104,10 @@ Feature/&PowerRogueDeviousStrikeKnockOutTitle=Schlagen Feature/&PowerRogueDeviousStrikeObscureDescription=Dem Ziel muss ein Geschicklichkeitsrettungswurf gelingen, sonst ist es bis zum Ende des nächsten Zuges geblendet. Es kostet 3 Sneak Dice. Feature/&PowerRogueDeviousStrikeObscureTitle=Obskur Feature/&PowerRogueDeviousStrikeTitle=Hinterhältiger Schlag +Feature/&PowerTeleportSummonDescription=Sie können sich zu jedem Ort im Umkreis von 5 Fuß um den Zaubernden teleportieren. +Feature/&PowerTeleportSummonTitle=Teleportieren +Feature/&PowerVanishSummonDescription=Sie können Harakiri begehen und diese Existenzebene verlassen. +Feature/&PowerVanishSummonTitle=Verschwinden Feature/&ToolGainChoicesPluralDescription=Wählen Sie {0} dieser Tools: {1} Feature/&ToolGainChoicesSingleDescription=Wählen Sie eines dieser Tools: {1} Feedback/&CharacterGivesBonusToSaveWithDCFormat={0} gibt einen Bonus von {1}, neues Ergebnis ist {2} (DC: {3}) @@ -113,6 +117,7 @@ Feedback/&FlankingAttack=Flankierend Feedback/&HigherGroundAttack=Eine höhere Ebene Feedback/&NarrativeChoiceRoll={0} würfelt eine Erzählauswahl von {1} mit einem Ergebnis von {2}. Feedback/&ReturningWeaponActivates={1} kehrt zu {0} zurück! +Feedback/&SmallRace=Kleines Rennen Feedback/&TriggerFeatureLine={0} löst {1} aus Feedback/&TriggerRerollLine={0} aktiviert die Kraft {1}, um {2} = {3} erneut zu würfeln. Format/&LevelAndExperienceFormat=Level: {0}\nErfahrung: {1}\n{2} Punkte erforderlich, um Level {3} zu erreichen diff --git a/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt b/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt index f5fe827f49..cf4a8a220f 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt @@ -214,7 +214,7 @@ ModUi/&RelicForgeries=Reliktfälschungen ModUi/&RemoveAttunementRequirements=Einstimmungsanforderungen entfernen [Neustart erforderlich] ModUi/&RemoveBugVisualModels=Ersetzen Sie spinnenartige Modelle durch alternative Grafiken im Spiel [Neustart erforderlich] ModUi/&RemoveHumanoidFilterOnHideousLaughter=Entferne den Humanoidenfilter für Abscheuliches Lachen -ModUi/&RemoveRecurringEffectOnEntangle=Wende den Entangle-Effekt nur zum Zeitpunkt des Wirkens an [d. h.: kein wiederkehrender Effekt] +ModUi/&RemoveRecurringEffectOnEntangle=Wenden Sie beim Wirken nur den Effekt Verwickeln an und erzwingen Sie außerdem eine Stärkeprüfung, um sich von den Ranken zu befreien ModUi/&RemoveSchoolRestrictionsFromShadowCaster=Schulbeschränkungen aus Shadowcaster entfernen ModUi/&RemoveSchoolRestrictionsFromSpellBlade=Entferne die Schulbeschränkungen von Spellblade ModUi/&RestockAntiquarians=Antiquare [Halman Summer] auffüllen @@ -280,4 +280,5 @@ ModUi/&UseOfficialFlankingRulesAlsoForRanged=+ Auch für Fernkampfangriffe ak ModUi/&UseOfficialFlankingRulesAlsoForReach=+ Auch für Reichweitenangriffe aktivieren ModUi/&UseOfficialFlankingRulesButAddAttackModifier=+ Anstelle des Vorteils gewähre +1 auf den Angriffswurf ModUi/&UseOfficialFoodRationsWeight=Verwenden Sie die offizielle Lebensmittelration mit einem Gewicht von 2 Pfund +ModUi/&UseOfficialSmallRacesDisWithHeavyWeapons=Benutze die offiziellen Regeln für kleine Rassen, wenn du schwere Waffen führst [deine Angriffe haben Nachteile] ModUi/&Visuals=Visuals: [Neustart erforderlich] diff --git a/SolastaUnfinishedBusiness/Translations/en/Others-en.txt b/SolastaUnfinishedBusiness/Translations/en/Others-en.txt index 4ad2797eba..329c4dfd23 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Others-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Others-en.txt @@ -104,6 +104,10 @@ Feature/&PowerRogueDeviousStrikeKnockOutTitle=Knock Out Feature/&PowerRogueDeviousStrikeObscureDescription=The target must succeed on a Dexterity saving throw, or be blinded until end of its next turn. It costs 3 sneak dice. Feature/&PowerRogueDeviousStrikeObscureTitle=Obscure Feature/&PowerRogueDeviousStrikeTitle=Devious Strike +Feature/&PowerTeleportSummonDescription=You can teleport to any location within 5 ft from the caster. +Feature/&PowerTeleportSummonTitle=Teleport +Feature/&PowerVanishSummonDescription=You can commit Harakiri and depart from this plane of existence. +Feature/&PowerVanishSummonTitle=Vanish Feature/&ToolGainChoicesPluralDescription=Choose {0} of these tools: {1} Feature/&ToolGainChoicesSingleDescription=Choose one of these tools: {1} Feedback/&CharacterGivesBonusToSaveWithDCFormat={0} gives a bonus of {1}, new result is {2} (DC: {3}) @@ -113,6 +117,7 @@ Feedback/&FlankingAttack=Flanking Feedback/&HigherGroundAttack=Higher Ground Feedback/&NarrativeChoiceRoll={0} rolls a {1} narrative choice with a {2} result. Feedback/&ReturningWeaponActivates={1} returns to {0}! +Feedback/&SmallRace=Small Race Feedback/&TriggerFeatureLine={0} triggers {1} Feedback/&TriggerRerollLine={0} activates the {1} power to reroll {2} = {3} Format/&LevelAndExperienceFormat=Level: {0}\nExperience: {1}\n{2} points required to reach level {3} diff --git a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt index e908cfd8e6..da1570644e 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt @@ -214,7 +214,7 @@ ModUi/&RelicForgeries=Relic Forgeries ModUi/&RemoveAttunementRequirements=Remove attunement requirements [Requires Restart] ModUi/&RemoveBugVisualModels=Replace spider like models with alternative visuals in the game [Requires Restart] ModUi/&RemoveHumanoidFilterOnHideousLaughter=Remove humanoid filter on Hideous Laughter -ModUi/&RemoveRecurringEffectOnEntangle=Only apply Entangle effect at casting time [i.e.: no recurring effect] +ModUi/&RemoveRecurringEffectOnEntangle=Only apply Entangle effect at casting time and also force a strength check to break free from the vines ModUi/&RemoveSchoolRestrictionsFromShadowCaster=Remove school restrictions from Shadowcaster ModUi/&RemoveSchoolRestrictionsFromSpellBlade=Remove school restrictions from Spellblade ModUi/&RestockAntiquarians=Restock Antiquarians [Halman Summer] @@ -280,4 +280,5 @@ ModUi/&UseOfficialFlankingRulesAlsoForRanged=+ Also enable for ranged attacks ModUi/&UseOfficialFlankingRulesAlsoForReach=+ Also enable for reach attacks ModUi/&UseOfficialFlankingRulesButAddAttackModifier=+ Instead of advantage grant +1 to attack roll ModUi/&UseOfficialFoodRationsWeight=Use official food ration weight of 2 pounds +ModUi/&UseOfficialSmallRacesDisWithHeavyWeapons=Use official small races rules when wielding heavy weapons [your attacks have disadvantage] ModUi/&Visuals=Visuals: [Requires Restart] diff --git a/SolastaUnfinishedBusiness/Translations/es/Others-es.txt b/SolastaUnfinishedBusiness/Translations/es/Others-es.txt index 7738ac0293..08eafc035a 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Others-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Others-es.txt @@ -104,6 +104,10 @@ Feature/&PowerRogueDeviousStrikeKnockOutTitle=Knockear Feature/&PowerRogueDeviousStrikeObscureDescription=El objetivo debe tener éxito en una tirada de salvación de Destreza, o quedará cegado hasta el final de su próximo turno. Cuesta 3 dados furtivos. Feature/&PowerRogueDeviousStrikeObscureTitle=Oscuro Feature/&PowerRogueDeviousStrikeTitle=Golpe tortuoso +Feature/&PowerTeleportSummonDescription=Puedes teletransportarte a cualquier ubicación dentro de 5 pies del lanzador. +Feature/&PowerTeleportSummonTitle=Teletransportarse +Feature/&PowerVanishSummonDescription=Puedes cometer Harakiri y partir de este plano de existencia. +Feature/&PowerVanishSummonTitle=Desaparecer Feature/&ToolGainChoicesPluralDescription=Elija {0} de estas herramientas: {1} Feature/&ToolGainChoicesSingleDescription=Elija una de estas herramientas: {1} Feedback/&CharacterGivesBonusToSaveWithDCFormat={0} otorga una bonificación de {1}, el nuevo resultado es {2} (DC: {3}) @@ -113,6 +117,7 @@ Feedback/&FlankingAttack=Flanqueando Feedback/&HigherGroundAttack=Terreno más alto Feedback/&NarrativeChoiceRoll={0} lanza una elección narrativa {1} con un resultado {2}. Feedback/&ReturningWeaponActivates=¡{1} vuelve a {0}! +Feedback/&SmallRace=Raza pequeña Feedback/&TriggerFeatureLine={0} activa {1} Feedback/&TriggerRerollLine={0} activa el poder {1} para volver a tirar {2} = {3} Format/&LevelAndExperienceFormat=Nivel: {0}\nExperiencia: {1}\n{2} puntos necesarios para alcanzar el nivel {3} diff --git a/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt b/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt index 55493d5e64..c127af6fcc 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt @@ -214,7 +214,7 @@ ModUi/&RelicForgeries=Falsificaciones de reliquias ModUi/&RemoveAttunementRequirements=Eliminar los requisitos de sintonización [Requiere reiniciar] ModUi/&RemoveBugVisualModels=Reemplace los modelos con forma de araña con imágenes alternativas en el juego [Requiere reinicio] ModUi/&RemoveHumanoidFilterOnHideousLaughter=Eliminar filtro humanoide en Risas espantosas -ModUi/&RemoveRecurringEffectOnEntangle=Solo aplica el efecto Enredar en el momento del lanzamiento [es decir, sin efecto recurrente] +ModUi/&RemoveRecurringEffectOnEntangle=Solo aplica el efecto Enredar en el momento del lanzamiento y también fuerza una prueba de fuerza para liberarte de las enredaderas ModUi/&RemoveSchoolRestrictionsFromShadowCaster=Eliminar las restricciones escolares de Shadowcaster ModUi/&RemoveSchoolRestrictionsFromSpellBlade=Eliminar las restricciones escolares de Spellblade ModUi/&RestockAntiquarians=Reponer anticuarios [Halman Summer] @@ -280,4 +280,5 @@ ModUi/&UseOfficialFlankingRulesAlsoForRanged=+ Habilitar también para ataque ModUi/&UseOfficialFlankingRulesAlsoForReach=+ Habilitar también para ataques de alcance ModUi/&UseOfficialFlankingRulesButAddAttackModifier=+ En lugar de ventaja otorga +1 a la tirada de ataque ModUi/&UseOfficialFoodRationsWeight=Utilice ración de alimentos con un peso oficial de 2 libras +ModUi/&UseOfficialSmallRacesDisWithHeavyWeapons=Usa las reglas oficiales de razas pequeñas cuando empuñas armas pesadas [tus ataques tienen desventaja] ModUi/&Visuals=Imágenes: [Requiere reiniciar] diff --git a/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt index ab515faf11..cccc04c953 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt @@ -104,6 +104,10 @@ Feature/&PowerRogueDeviousStrikeKnockOutTitle=Assommer Feature/&PowerRogueDeviousStrikeObscureDescription=La cible doit réussir un jet de sauvegarde de Dextérité ou être aveuglée jusqu'à la fin de son prochain tour. Cela coûte 3 dés d'Attaque Sournoise. Feature/&PowerRogueDeviousStrikeObscureTitle=Aveugler Feature/&PowerRogueDeviousStrikeTitle=Frappe Perfide +Feature/&PowerTeleportSummonDescription=Vous pouvez vous téléporter n’importe où à moins de 1,50 m du lanceur. +Feature/&PowerTeleportSummonTitle=Téléportation +Feature/&PowerVanishSummonDescription=Vous pouvez commettre Harakiri et quitter ce plan d’existence. +Feature/&PowerVanishSummonTitle=Disparaître Feature/&ToolGainChoicesPluralDescription=Choisissez {0} de ces outils : {1} Feature/&ToolGainChoicesSingleDescription=Choisissez l'un de ces outils : {1} Feedback/&CharacterGivesBonusToSaveWithDCFormat={0} donne un bonus de {1}, le nouveau résultat est {2} (DC : {3}) @@ -113,6 +117,7 @@ Feedback/&FlankingAttack=Prise en Tenaille Feedback/&HigherGroundAttack=Surélevé Feedback/&NarrativeChoiceRoll={0} lance un choix narratif {1} avec un résultat {2}. Feedback/&ReturningWeaponActivates={1} revient à {0} ! +Feedback/&SmallRace=Petite course Feedback/&TriggerFeatureLine={0} déclenche {1} Feedback/&TriggerRerollLine={0} active le pouvoir {1} pour relancer {2} = {3} Format/&LevelAndExperienceFormat=Niveau : {0}\nExpérience : {1}\n{2} points requis pour atteindre le niveau {3} diff --git a/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt index e464a9690b..583b8e25ef 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt @@ -214,7 +214,7 @@ ModUi/&RelicForgeries=Contrefaçons de reliques ModUi/&RemoveAttunementRequirements=Supprimer les exigences de Lien des objets magiques [Nécessite un redémarrage] ModUi/&RemoveBugVisualModels=Remplacez les modèles ressemblant à des araignées par des visuels alternatifs dans le jeu [Nécessite un redémarrage] ModUi/&RemoveHumanoidFilterOnHideousLaughter=Supprimer le filtre Humanoïde sur Hideous Laughter -ModUi/&RemoveRecurringEffectOnEntangle=N'applique l'effet Enchevêtrement qu'au moment de l'incantation [c'est-à-dire : pas d'effet récurrent lors des prochains tours] +ModUi/&RemoveRecurringEffectOnEntangle=Appliquez uniquement l'effet Entangle au moment du lancement et forcez également un test de force pour vous libérer des vignes ModUi/&RemoveSchoolRestrictionsFromShadowCaster=Supprimer les restrictions scolaires de Shadowcaster ModUi/&RemoveSchoolRestrictionsFromSpellBlade=Supprimer les restrictions scolaires de Spellblade ModUi/&RestockAntiquarians=Réapprovisionner les Antiquaires [Halman Summer] @@ -280,4 +280,5 @@ ModUi/&UseOfficialFlankingRulesAlsoForRanged=+ Activer également pour les at ModUi/&UseOfficialFlankingRulesAlsoForReach=+ Activer également pour les attaques par armes avec Allonge ModUi/&UseOfficialFlankingRulesButAddAttackModifier=+ Au lieu de l'avantage, accordez +1 au jet d'attaque ModUi/&UseOfficialFoodRationsWeight=Utilisez la ration alimentaire officielle d'un poids de 2 livres +ModUi/&UseOfficialSmallRacesDisWithHeavyWeapons=Utilisez les règles officielles des petites races lorsque vous maniez des armes lourdes [vos attaques ont un désavantage] ModUi/&Visuals=Visuels : [Nécessite un redémarrage] diff --git a/SolastaUnfinishedBusiness/Translations/it/Others-it.txt b/SolastaUnfinishedBusiness/Translations/it/Others-it.txt index 3f4189bb75..066ca57e13 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Others-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Others-it.txt @@ -105,6 +105,10 @@ Feature/&PowerRogueDeviousStrikeKnockOutTitle=Tramortire Feature/&PowerRogueDeviousStrikeObscureDescription=Il bersaglio deve superare un tiro salvezza su Destrezza o rimanere accecato fino alla fine del turno successivo. Costa 3 dadi furtivi. Feature/&PowerRogueDeviousStrikeObscureTitle=Oscuro Feature/&PowerRogueDeviousStrikeTitle=Colpo Subdolo +Feature/&PowerTeleportSummonDescription=Puoi teletrasportarti in qualsiasi luogo entro 5 piedi dall'incantatore. +Feature/&PowerTeleportSummonTitle=Teletrasporto +Feature/&PowerVanishSummonDescription=Puoi commettere Harakiri e partire da questo piano di esistenza. +Feature/&PowerVanishSummonTitle=Svanire Feature/&ToolGainChoicesPluralDescription=Scegli {0} di questi strumenti: {1} Feature/&ToolGainChoicesSingleDescription=Scegli uno di questi strumenti: {1} Feedback/&CharacterGivesBonusToSaveWithDCFormat={0} dà un bonus di {1}, il nuovo risultato è {2} (DC: {3}) @@ -114,6 +118,7 @@ Feedback/&FlankingAttack=Fiancheggiamento Feedback/&HigherGroundAttack=Terreno più elevato Feedback/&NarrativeChoiceRoll={0} lancia una scelta narrativa {1} con un risultato {2}. Feedback/&ReturningWeaponActivates={1} torna a {0}! +Feedback/&SmallRace=Piccola Razza Feedback/&TriggerFeatureLine={0} trigger {1} Feedback/&TriggerRerollLine={0} attiva il potere {1} per ripetere il tiro {2} = {3} Format/&LevelAndExperienceFormat=Livello: {0}\nEsperienza: {1}\n{2} punti richiesti per raggiungere il livello {3} diff --git a/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt b/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt index 5112682017..899d88fe8a 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt @@ -214,7 +214,7 @@ ModUi/&RelicForgeries=Falsi di reliquie ModUi/&RemoveAttunementRequirements=Rimuovi i requisiti di attivazione [Richiede il riavvio] ModUi/&RemoveBugVisualModels=Sostituisci i modelli simili a ragni con effetti visivi alternativi nel gioco [Richiede il riavvio] ModUi/&RemoveHumanoidFilterOnHideousLaughter=Rimuovi il filtro umanoide su Risate orribili -ModUi/&RemoveRecurringEffectOnEntangle=Applica solo l'effetto Intralcio al momento del lancio [es.: nessun effetto ricorrente] +ModUi/&RemoveRecurringEffectOnEntangle=Applica l'effetto Intralcia solo al momento del lancio e forza anche un controllo di forza per liberarsi dai rampicanti ModUi/&RemoveSchoolRestrictionsFromShadowCaster=Rimuovi le restrizioni scolastiche da Incantatrice ModUi/&RemoveSchoolRestrictionsFromSpellBlade=Rimuovi le restrizioni scolastiche da Spellblade ModUi/&RestockAntiquarians=Rifornisci Antiquari [Halman Summer] @@ -280,5 +280,6 @@ ModUi/&UseOfficialFlankingRulesAlsoForRanged=+ Abilita anche per attacchi a d ModUi/&UseOfficialFlankingRulesAlsoForReach=+ Abilita anche per attacchi di portata ModUi/&UseOfficialFlankingRulesButAddAttackModifier=+ Invece del vantaggio, concedi +1 al tiro per colpire ModUi/&UseOfficialFoodRationsWeight=Usa razione di cibo ufficiale di 2 libbre +ModUi/&UseOfficialSmallRacesDisWithHeavyWeapons=Utilizza le regole ufficiali delle razze piccole quando impugni armi pesanti [i tuoi attacchi hanno svantaggio] ModUi/&Visuals= Immagini: [Richiede il riavvio] odUi/&EnableDungeonMakerModdedContent=Abilita Dungeon Maker Pro\n[includi stanze piatte, dungeon di dimensioni 150x150 e 200x200 e senza fronzoli che mescolano risorse da tutti gli ambienti] diff --git a/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt index ea9a9f11d0..672ae4f53b 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt @@ -104,6 +104,10 @@ Feature/&PowerRogueDeviousStrikeKnockOutTitle=ノックアウト Feature/&PowerRogueDeviousStrikeObscureDescription=ターゲットは器用さセーヴィング・スローに成功するか、次のターンが終了するまで盲目状態でなければなりません。スニークダイス3個かかります。 Feature/&PowerRogueDeviousStrikeObscureTitle=あいまいな Feature/&PowerRogueDeviousStrikeTitle=デビアス・ストライク +Feature/&PowerTeleportSummonDescription=キャスターから 5 フィート以内の任意の場所にテレポートできます。 +Feature/&PowerTeleportSummonTitle=テレポート +Feature/&PowerVanishSummonDescription=あなたはハラキリを犯して、この存在の次元から離れることができます。 +Feature/&PowerVanishSummonTitle=消える Feature/&ToolGainChoicesPluralDescription=次のツールから {0} を選択してください: {1} Feature/&ToolGainChoicesSingleDescription=次のツールのいずれかを選択します: {1} Feedback/&CharacterGivesBonusToSaveWithDCFormat={0} は {1} のボーナスを与え、新しい結果は {2} です (DC: {3}) @@ -113,6 +117,7 @@ Feedback/&FlankingAttack=側面攻撃 Feedback/&HigherGroundAttack=高いところ Feedback/&NarrativeChoiceRoll={0} は、{1} の物語の選択肢をロールして、{2} の結果をもたらします。 Feedback/&ReturningWeaponActivates={1} は {0} に戻ります! +Feedback/&SmallRace=スモールレース Feedback/&TriggerFeatureLine={0} が {1} をトリガーします Feedback/&TriggerRerollLine={0} は、{2} = {3} を再ロールするための {1} パワーを有効にします Format/&LevelAndExperienceFormat=レベル: {0}\n経験値: {1}\n{2} ポイントがレベル {3} に到達するために必要です diff --git a/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt index 32e0f75526..06f63a36f7 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt @@ -214,7 +214,7 @@ ModUi/&RelicForgeries=遺物偽造品 ModUi/&RemoveAttunementRequirements=アチューンメント要件を削除[再起動が必要] ModUi/&RemoveBugVisualModels=ゲーム内のクモのようなモデルを別のビジュアルに置き換えます[再起動が必要] ModUi/&RemoveHumanoidFilterOnHideousLaughter=おぞましい笑いの人型フィルターを削除 -ModUi/&RemoveRecurringEffectOnEntangle=エンタングル効果は詠唱時にのみ適用されます[例: 繰り返し効果なし] +ModUi/&RemoveRecurringEffectOnEntangle=もつれ効果は詠唱時にのみ適用し、蔓から解放するために強度チェックも強制します ModUi/&RemoveSchoolRestrictionsFromShadowCaster=シャドウキャスターから学校の制限を削除する ModUi/&RemoveSchoolRestrictionsFromSpellBlade=スペルブレードから学校の制限を削除する ModUi/&RestockAntiquarians=古物収集者 [ハルマン サマー] を補充する @@ -280,4 +280,5 @@ ModUi/&UseOfficialFlankingRulesAlsoForRanged=+ 遠距離攻撃も有効にし ModUi/&UseOfficialFlankingRulesAlsoForReach=+ リーチ攻撃も有効にする ModUi/&UseOfficialFlankingRulesButAddAttackModifier=+ アドバンテージの代わりに攻撃ロールに +1 を与える ModUi/&UseOfficialFoodRationsWeight=公式の食料配給量の重量は2ポンドを使用してください +ModUi/&UseOfficialSmallRacesDisWithHeavyWeapons=重火器を使用するときは、公式の小規模種族ルールを使用してください[攻撃には不利があります] ModUi/&Visuals=ビジュアル: [再起動が必要] diff --git a/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt index da0c699964..57f7d8661c 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt @@ -104,6 +104,10 @@ Feature/&PowerRogueDeviousStrikeKnockOutTitle=넉아웃 Feature/&PowerRogueDeviousStrikeObscureDescription=대상은 민첩 내성 굴림을 성공하거나 다음 턴이 끝날 때까지 실명 됩니다. 은신 주사위 3개를 소모합니다. Feature/&PowerRogueDeviousStrikeObscureTitle=눈 찌르기 Feature/&PowerRogueDeviousStrikeTitle=비열한 습격 +Feature/&PowerTeleportSummonDescription=시전자로부터 5피트 이내의 어느 위치로든 순간이동할 수 있습니다. +Feature/&PowerTeleportSummonTitle=텔레포트 +Feature/&PowerVanishSummonDescription=당신은 하라키리를 범하고 이 존재계에서 떠날 수 있습니다. +Feature/&PowerVanishSummonTitle=사라지다 Feature/&ToolGainChoicesPluralDescription=다음 도구 중 {0}개를 선택합니다: {1} Feature/&ToolGainChoicesSingleDescription=다음 도구 중 하나를 선택합니다: {1} Feedback/&CharacterGivesBonusToSaveWithDCFormat={0}이 {1}의 보너스를 제공하여, 새 결과는 {2}(DC: {3})입니다 @@ -113,6 +117,7 @@ Feedback/&FlankingAttack=측면 공격 Feedback/&HigherGroundAttack=고지대 Feedback/&NarrativeChoiceRoll={0}는 {2} 결과와 함께 {1} 설명 선택을 굴립니다. Feedback/&ReturningWeaponActivates={1}이 {0}으로 돌아감! +Feedback/&SmallRace=소규모 경주 Feedback/&TriggerFeatureLine={0}이 {1}을 촉발 Feedback/&TriggerRerollLine={0} 이 {1} 을 활성화, {2} = {3} 다시 굴림 Format/&LevelAndExperienceFormat=레벨: {0}\n경험치: 레벨 {3}에 도달하는 데 필요한 포인트: {1}\n{2} 포인트 diff --git a/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt index 25824f6fa8..48877771d2 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt @@ -214,7 +214,7 @@ ModUi/&RelicForgeries=위조 유물 ModUi/&RemoveAttunementRequirements=조율 요구 사항 제거 [게임 재실행 필요] ModUi/&RemoveBugVisualModels=거미 등의 벌레 모델링을 다른 모습으로 대체 [재시작 필요] ModUi/&RemoveHumanoidFilterOnHideousLaughter=소름끼치는 웃음 주문에서 인간형 제약 제거 -ModUi/&RemoveRecurringEffectOnEntangle=시전한 턴에만얽힘 주문 효과 적용 [반복 효과 없어짐] +ModUi/&RemoveRecurringEffectOnEntangle=시전 시에만 얽힘 효과를 적용하고 덩굴에서 벗어나기 위해 강도 검사를 강제 적용합니다 ModUi/&RemoveSchoolRestrictionsFromShadowCaster=Shadowcaster에서 학교 제한을 제거하세요. ModUi/&RemoveSchoolRestrictionsFromSpellBlade=Spellblade에서 학교 제한을 제거하세요. ModUi/&RestockAntiquarians=고고학 길드 [할만 서머] 재입고 @@ -280,4 +280,5 @@ ModUi/&UseOfficialFlankingRulesAlsoForRanged=+ 원거리 공격에도 적용< ModUi/&UseOfficialFlankingRulesAlsoForReach=+ 장병기 공격에도 적용 ModUi/&UseOfficialFlankingRulesButAddAttackModifier=+ 이점 대신 명중 굴림에 +1 부여 ModUi/&UseOfficialFoodRationsWeight=식량 무게를 공식 규칙에 따라 2파운드로 변경 +ModUi/&UseOfficialSmallRacesDisWithHeavyWeapons=무거운 무기를 휘두를 때 공식 소규모 종족 규칙을 사용하세요. [공격에 불이익이 있습니다] ModUi/&Visuals=비주얼: [재시작 필요] diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt index 2cfca42cd5..221c570e3b 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt @@ -104,6 +104,10 @@ Feature/&PowerRogueDeviousStrikeKnockOutTitle=Suprimir Feature/&PowerRogueDeviousStrikeObscureDescription=O alvo deve ter sucesso em um teste de resistência de Destreza ou ficará cego até o final do próximo turno. Custa 3 dados furtivos. Feature/&PowerRogueDeviousStrikeObscureTitle=Obscurecer Feature/&PowerRogueDeviousStrikeTitle=Golpe Desonesto +Feature/&PowerTeleportSummonDescription=Você pode se teletransportar para qualquer local a até 1,5 metro do lançador. +Feature/&PowerTeleportSummonTitle=Teleportar +Feature/&PowerVanishSummonDescription=Você pode cometer Harakiri e partir deste plano de existência. +Feature/&PowerVanishSummonTitle=Desaparecer Feature/&ToolGainChoicesPluralDescription=Escolha {0} destas ferramentas: {1} Feature/&ToolGainChoicesSingleDescription=Escolha uma destas ferramentas: {1} Feedback/&CharacterGivesBonusToSaveWithDCFormat={0} dá um bônus de {1}, o novo resultado é {2} (DC: {3}) @@ -113,6 +117,7 @@ Feedback/&FlankingAttack=Flanqueando Feedback/&HigherGroundAttack=Terreno mais elevado Feedback/&NarrativeChoiceRoll={0} lança uma escolha narrativa {1} com um resultado {2}. Feedback/&ReturningWeaponActivates={1} retorna para {0}! +Feedback/&SmallRace=Corrida Pequena Feedback/&TriggerFeatureLine={0} gatilhos {1} Feedback/&TriggerRerollLine={0} ativa o poder {1} para rolar novamente {2} = {3} Format/&LevelAndExperienceFormat=Nível: {0}\nExperiência: {1}\n{2} pontos necessários para atingir o nível {3} diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt index fcd6bb6dd5..49fc6e541f 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt @@ -214,7 +214,7 @@ ModUi/&RelicForgeries=Falsificações de relíquias ModUi/&RemoveAttunementRequirements=Remova os requisitos de sintonização [Requer reinicialização] ModUi/&RemoveBugVisualModels=Substitua modelos semelhantes a aranhas por visuais alternativos no jogo [Requer reinicialização] ModUi/&RemoveHumanoidFilterOnHideousLaughter=Remova o filtro humanoide em Gargalhada -ModUi/&RemoveRecurringEffectOnEntangle=Aplique o efeito Enredar apenas no momento da conjuração [ou seja: sem efeito recorrente] +ModUi/&RemoveRecurringEffectOnEntangle=Aplique apenas o efeito Entangle no momento do lançamento e também force um teste de força para se libertar das vinhas ModUi/&RemoveSchoolRestrictionsFromShadowCaster=Remover restrições escolares do Shadowcaster ModUi/&RemoveSchoolRestrictionsFromSpellBlade=Remover restrições escolares do Spellblade ModUi/&RestockAntiquarians=Reabastecer Antiquários [Halman Summer] @@ -280,4 +280,5 @@ ModUi/&UseOfficialFlankingRulesAlsoForRanged=+ Ativar também para ataques à ModUi/&UseOfficialFlankingRulesAlsoForReach=+ Ativar também para ataques de alcance ModUi/&UseOfficialFlankingRulesButAddAttackModifier=+ Em vez de conceder vantagem +1 para jogada de ataque ModUi/&UseOfficialFoodRationsWeight=Use ração alimentar oficial de 2 libras +ModUi/&UseOfficialSmallRacesDisWithHeavyWeapons=Use as regras oficiais de pequenas raças ao empunhar armas pesadas [seus ataques têm desvantagem] ModUi/&Visuals=Visuais: [Requer reinicialização] diff --git a/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt index 18940a6b0e..f84aeb70ff 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt @@ -104,6 +104,10 @@ Feature/&PowerRogueDeviousStrikeKnockOutTitle=Нокаут Feature/&PowerRogueDeviousStrikeObscureDescription=Цель должна преуспеть в спасброске Ловкости или будет ослеплена до конца своего следующего хода. Это будет стоить 3 кости Скрытой атаки. Feature/&PowerRogueDeviousStrikeObscureTitle=Затемнение Feature/&PowerRogueDeviousStrikeTitle=Коварный удар +Feature/&PowerTeleportSummonDescription=Вы можете телепортироваться в любое место в пределах 5 футов от заклинателя. +Feature/&PowerTeleportSummonTitle=Телепортироваться +Feature/&PowerVanishSummonDescription=Вы можете совершить Харакири и покинуть этот план существования. +Feature/&PowerVanishSummonTitle=Исчезновение Feature/&ToolGainChoicesPluralDescription=Выберите {0} из этих инструментов: {1} Feature/&ToolGainChoicesSingleDescription=Выберите один из этих инструментов: {1} Feedback/&CharacterGivesBonusToSaveWithDCFormat={0} даёт бонус {1}, новый результат - {2} (DC: {3}) @@ -113,6 +117,7 @@ Feedback/&FlankingAttack=Угроза с фланга Feedback/&HigherGroundAttack=Возвышенность Feedback/&NarrativeChoiceRoll={0} бросает нарративный выбор {1} с результатом {2}. Feedback/&ReturningWeaponActivates={1} возвращается к {0}! +Feedback/&SmallRace=Раса маленького размера Feedback/&TriggerFeatureLine={0} вызывает срабатывание {1} Feedback/&TriggerRerollLine={0} активирует силу {1}, чтобы перебросить {2} = {3} Format/&LevelAndExperienceFormat=Level: {0}\nОпыт: {1}\n{2} очков до уровня {3} diff --git a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt index 84cbeecd25..1e791ed7f0 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt @@ -214,7 +214,7 @@ ModUi/&RelicForgeries=Поддельные реликвии ModUi/&RemoveAttunementRequirements=Убрать требования настройки [Необходим перезапуск] ModUi/&RemoveBugVisualModels=Заменить паукообразные модельки альтернативными в игре [Необходим перезапуск] ModUi/&RemoveHumanoidFilterOnHideousLaughter=Убрать гуманоидный фильтр на Жуткий смех -ModUi/&RemoveRecurringEffectOnEntangle=Применять эффект Опутывания только на время действия заклинания [т.е.: без повторяющегося эффекта] +ModUi/&RemoveRecurringEffectOnEntangle=Применять эффект Опутывания только на время действия заклинания, а также принудительно совершать проверку Силы, чтобы вырваться из лоз ModUi/&RemoveSchoolRestrictionsFromShadowCaster=Снять ограничения по школе заклинаний с Заклинателя теней ModUi/&RemoveSchoolRestrictionsFromSpellBlade=Снять ограничения по школе заклинаний с Боевого волшебника ModUi/&RestockAntiquarians=Пополнять Антикваров [Халман Саммер] @@ -280,4 +280,5 @@ ModUi/&UseOfficialFlankingRulesAlsoForRanged=+ Включить эти пра ModUi/&UseOfficialFlankingRulesAlsoForReach=+ Также включить для атак досягаемости ModUi/&UseOfficialFlankingRulesButAddAttackModifier=+ Вместо преимущества давать +1 к броскам атаки ModUi/&UseOfficialFoodRationsWeight=Использовать официальный вес Рационов (2 фунта) +ModUi/&UseOfficialSmallRacesDisWithHeavyWeapons=Использовать официальные правила рас маленького размера при использовании тяжёлого оружия [вы совершаете атаки с помехой] ModUi/&Visuals=Визуальные настройки: [Необходим перезапуск] diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt index 840498cf85..74ff076d73 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt @@ -104,6 +104,10 @@ Feature/&PowerRogueDeviousStrikeKnockOutTitle=昏死 Feature/&PowerRogueDeviousStrikeObscureDescription=目标必须成功通过敏捷豁免,否则将被致盲直至下回合结束。花费 3 个潜行骰子。 Feature/&PowerRogueDeviousStrikeObscureTitle=朦胧 Feature/&PowerRogueDeviousStrikeTitle=狡猾的打击 +Feature/&PowerTeleportSummonDescription=你可以传送到施法者 5 英尺以内的任何位置。 +Feature/&PowerTeleportSummonTitle=传送 +Feature/&PowerVanishSummonDescription=你可以进行切腹并离开这个存在层面。 +Feature/&PowerVanishSummonTitle=消失 Feature/&ToolGainChoicesPluralDescription=从这些工具中选择 {0}:{1} Feature/&ToolGainChoicesSingleDescription=选择以下工具之一:{1} Feedback/&CharacterGivesBonusToSaveWithDCFormat={0} 奖励 {1},新结果为 {2}(DC:{3}) @@ -113,6 +117,7 @@ Feedback/&FlankingAttack=背后夹击 Feedback/&HigherGroundAttack=高处攻击 Feedback/&NarrativeChoiceRoll={0} 滚动 {1} 个叙述选项,结果为 {2}。 Feedback/&ReturningWeaponActivates={1} 返回 {0}! +Feedback/&SmallRace=小赛 Feedback/&TriggerFeatureLine={0} 触发 {1} Feedback/&TriggerRerollLine={0} 激活 {1} 以重投 {2} = {3} Format/&LevelAndExperienceFormat=等级:{0}\n经验:{1}\n升到{3}级需要 {2} 经验 diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt index b8b5233a33..ab660c4f86 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt @@ -215,7 +215,7 @@ ModUi/&RelicForgeries=文物伪造品 ModUi/&RemoveAttunementRequirements=删除同调要求[需要重启] ModUi/&RemoveBugVisualModels=用游戏中的替代视觉效果替换蜘蛛类模型[需要重启] ModUi/&RemoveHumanoidFilterOnHideousLaughter=移除狂笑术的类人敌人限制 -ModUi/&RemoveRecurringEffectOnEntangle=仅在施法时应用纠缠效果[即:无重复效果] +ModUi/&RemoveRecurringEffectOnEntangle=仅在施法时应用缠绕效果,并强制进行强度检查以挣脱藤蔓 ModUi/&RemoveSchoolRestrictionsFromShadowCaster=移除 Shadowcaster 的学校限制 ModUi/&RemoveSchoolRestrictionsFromSpellBlade=移除Spellblade的学校限制 ModUi/&RestockAntiquarians=补货古文物协会[Halman Summer] @@ -281,4 +281,5 @@ ModUi/&UseOfficialFlankingRulesAlsoForRanged=+ 对远程攻击生效 ModUi/&UseOfficialFlankingRulesAlsoForReach=+ 对触及攻击生效 ModUi/&UseOfficialFlankingRulesButAddAttackModifier=+ 将优势改为 +1 攻击掷骰 ModUi/&UseOfficialFoodRationsWeight=将食物配给的重量减少到2磅 +ModUi/&UseOfficialSmallRacesDisWithHeavyWeapons=使用重型武器时请使用官方小型比赛规则[你的攻击处于劣势] ModUi/&Visuals=视觉效果:[需要重启]