| Latest version | 0.0.22 |
|---|---|
| Minimum Core | 14 |
| Compatible Core | 14 |
| Last updated | 1 day ago |
| Created | 7 months ago |
| Authors |
|
| Languages |
English |
| Systems |
TheWitcherTRPG |
| Project source | Project URL |
| Read-me | Readme URL |
WTTRPG Enhancements adds flexible combat tools to The Witcher TRPG system for Foundry VTT. It helps GMs create ongoing effects, special weapon techniques, lifesteal, conditional and situational bonuses, and more controlled damage application while keeping the system's normal combat flow.
Active Effects can deal damage or restore health automatically when a character's turn begins.
Example: A poison effect deals 2d6 damage to the torso at the start of each affected character's turn, while a regeneration potion restores 1d6 HP per turn.
Weapons, spells, weapon skills, and damaging ongoing effects can return part of the damage they deal to the attacker.
0 for no cap.Example: A vampiric sword restores 25% of the HP damage it deals. If its wielder is already at full HP, half of that excess healing becomes a shield, up to a chosen limit.
Active Effects can increase an attacker's damage for one damage type or for all damage.
Example: A monster-hunting oil adds 1d6 damage against monsters, while a vulnerability effect doubles slashing damage.
Conditions can use actor (an alias for attacker), attacker, target, damage, source, and professionTree, including their full property paths. source is the Item that produced the attack, so a weapon skill remains distinguishable from its parent weapon. professionTree is the attacker's profession system data. The expression parser supports comparisons, arithmetic, &&, ||, !, and parentheses.
Common values have shorter helper functions:
hp(), sta(), shield(), focus(), resolve(), vigor(), luck(), and toxicity() return the attacker's current value. Pass an actor to read another actor, such as hp(target).maxHp(), maxSta(), maxShield(), maxFocus(), maxResolve(), maxVigor(), maxLuck(), and maxToxicity().attribute('name', actor?) and maxAttribute('name', actor?) read any derived stat or regular stat. stat('ref', actor?) is a shortcut for a regular stat.skillLevel('name', actor?) returns the level of a standard or custom skill, or 0 when the skill is absent. Standard skills can be identified by internal key, name, or localized label; for example, skillLevel('Athletics') >= 6 or skillLevel('Swordsmanship', target) < 5.hasActiveEffect('name', actor?) checks for a non-disabled, non-suppressed Active Effect by name. getActiveEffect('name', actor?) returns that effect so its data can be used in an expression.armor(location?, actor?) returns total stopping power. It defaults to the current target and damage location; for example, armor('head') or armor('torso', attacker).isSourceAWeaponSkill(name?) and isSourceAWeapon(name?) check the attack source, optionally matching its name without regard to case.professionTree(actor?) returns the complete profession system data. professionSkill('name', actor?) returns a profession ability so any of its properties can be inspected.professionSkillRank('name', actor?) returns an ability's rank, or 0 if it is absent. hasProfessionSkill('name', minimumRank?, actor?) checks that it has been raised to at least the requested rank (rank 1 by default).professionSkillPoints(actor?) returns the total points invested in the defining skill and all nine profession path skills.Examples:
hp(target) < maxHp(target) / 2
stat('ref') > 5 && hasActiveEffect('Monster Oil')
getActiveEffect('Blood Frenzy').system.changes[0].value * 2 > damage.amount
armor() < 10 && damage.type === 'slashing'
isSourceAWeaponSkill('Whirl') && professionSkillRank('Fury') >= 5
professionSkillPoints() >= 20
isSourceAWeapon() && professionSkill('Tactical Awareness').thresholds.hasThresholds
skillLevel('Athletics') >= 6 && skillLevel('My Custom Skill') > 0
Condition fields on amplifier, lifesteal, weapon-skill, and situational-bonus sheets offer context-aware autocomplete while typing. Use the arrow keys to move through suggestions, Enter or Tab to insert one, and Escape to close the list.
Actors can carry optional bonuses which a player selects when making a roll. Each situational bonus has a title, description, image, roll formula, and optional availability condition. Its scope determines where it appears:
Bonuses attached directly to an actor are global and can apply whenever their scope and condition match. Weapons and spells can also have their own bonuses, which only appear while attacking or dealing damage with that specific item. Weapon skills recognize bonuses attached to their parent weapon.
The roll dialog clearly labels every available bonus with:
Each bonus has a configurable roll-card image layout:
Situational bonuses are Item documents. This means a GM can create reusable world or compendium bonus templates and drag copies into an actor, weapon, or spell manager. Dropping a bonus into the actor manager makes it global; dropping it onto a weapon or spell binds the copy to that item. Item-bound bonuses only support Attack and Damage scopes. When a configured world weapon or spell is added to an actor, its attached bonuses are copied with it.
Conditions use the same safe expression engine and autocomplete as other enhancements. They can inspect the acting actor, current target, attack source, damage context, resources, Active Effects, ordinary skills, and profession abilities.
Examples:
+2 to attacks while its condition is true.1d6 only to selected skill checks when skillLevel('Athletics') >= 6.1d6 damage only when that sword attacks.An enhanced Apply Damage option is available from damage messages in chat.
Example: The GM can reduce an incoming hit by 50% for a special resistance, move it to the arm, add a small flat bonus, or grant temporary stopping power without editing the original roll or armor.
A weapon can have several alternate techniques attached to it. Whenever that weapon attacks, the player can use its normal attack or choose one of those techniques.
Each weapon skill can have its own:
Skills can be created directly on a weapon or copied from reusable templates. An attached copy can inherit the weapon's properties or keep the template's own values.
The attack picker shows the weapon's normal attack alongside its skills. Skill conditions use actor (the weapon's owner) and target (the first currently targeted actor). Skills whose conditions are not met are hidden by default. The player can show and use every attached skill for the current attack with the Show all skills option; if no skill is available, the standard weapon attack is selected automatically.
Example: A Pommel Strike may cost 3 Stamina, deal bludgeoning damage, use a different attack skill, and allow the defender an additional defense option. A Whirl technique may make a fixed number of attacks with its own accuracy penalty.
Enhanced Combat HUD for The Witcher TRPG is supported as a soft dependency. WTTRPG Enhancements continues to work normally when it is not installed.
When the Argon core and Witcher integration modules are active:
The GM can open WTTRPG Enhancements from the header of:
The actor-sheet header uses the standard WTTRPG Enhancements icon to open its situational-bonus manager. Damage messages gain an enhanced Apply Damage entry in their context menu. Timed effects are processed by the GM during combat.
Optional:
To install this package, open your Foundry Setup screen and navigate to your Module tab and click the Install Module button.
From there, you can either search for the package unique name: wttrpg-enhancements or copy its manifest URL:
And paste it to the input box at the bottom of your window.

You can install this package directly to your Forge account.