WTTRPG Enhancements
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.
What the module adds
Ongoing damage and healing
Active Effects can deal damage or restore health automatically when a character's turn begins.
- Create poison, bleeding, burning, regeneration, and similar effects.
- Choose the roll formula, damage type, hit location, and armor-related properties.
- Apply damage automatically or leave it as a chat roll for the GM to resolve.
- Show clear chat cards for every damage or healing tick.
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.
Lifesteal and overheal
Weapons, spells, weapon skills, and damaging ongoing effects can return part of the damage they deal to the attacker.
- Restore HP, Stamina, or the same attribute that was damaged.
- Limit how much can be stolen by a single attack; set the limit to
0for no cap. - Turn excess HP recovery into a shield.
- Set a maximum shield value.
- Add conditions so lifesteal only works in specific situations.
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.
Conditional damage bonuses
Active Effects can increase an attacker's damage for one damage type or for all damage.
- Add extra dice or a flat bonus to a damage roll.
- Multiply the final damage.
- Limit the bonus with conditions based on the attacker, target, or damage dealt.
- Apply the same bonuses to ongoing damage where appropriate.
Example: A monster-hunting oil adds 1d6 damage against monsters, while a vulnerability effect doubles slashing damage.
Condition expressions
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(), andtoxicity()return the attacker's current value. Pass an actor to read another actor, such ashp(target).- The matching maximum helpers are
maxHp(),maxSta(),maxShield(),maxFocus(),maxResolve(),maxVigor(),maxLuck(), andmaxToxicity(). attribute('name', actor?)andmaxAttribute('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, or0when the skill is absent. Standard skills can be identified by internal key, name, or localized label; for example,skillLevel('Athletics') >= 6orskillLevel('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')orarmor('torso', attacker).isSourceAWeaponSkill(name?)andisSourceAWeapon(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, or0if it is absent.hasProfessionSkill('name', minimumRank?, actor?)checks that it has been raised to at least the requested rank (rank1by 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.
Situational bonuses
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:
- Skill Check adds its formula to standard or custom skill checks. It can apply to every skill or only selected skills.
- Attack adds its formula to a weapon or spell attack roll.
- Damage adds its formula to weapon or spell damage. Damage bonuses are also available in the enhanced Apply Damage dialog.
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:
- Its scope: Skill Check, Attack, or Damage.
- Its origin: Actor (Global) or the name of its weapon or spell.
- Its formula, title, description, and artwork.
Each bonus has a configurable roll-card image layout:
- Image on Left displays a dedicated image panel on the left.
- Image on Right mirrors the panel to the right.
- Full Card Cover stretches the image across the card beneath a readability gradient.
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:
- Higher Ground adds
+2to attacks while its condition is true. - Specialized Training adds
1d6only to selected skill checks whenskillLevel('Athletics') >= 6. - Silver Edge is attached to one sword and adds
1d6damage only when that sword attacks. - Focused Sign is attached to one spell and improves only that spell's attack roll.
More control when applying damage
An enhanced Apply Damage option is available from damage messages in chat.
- Adjust the rolled amount by a fixed number or percentage before applying it.
- Choose the hit location.
- Add temporary stopping power to that location for this damage application without changing the actor's armor.
- Mark the damage as non-lethal.
- Account for vulnerability, weapon oils, and monster resistances.
- Trigger any lifesteal attached to the attack.
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.
Weapon skills and special attacks
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:
- Damage formula and damage types.
- Melee or ranged attack mode.
- Attack skill and roll modifier.
- Stamina cost and number of attacks.
- Allowed strike types and target locations.
- Range, ammunition use, and damage properties.
- Defense options available to the target.
- Lifesteal and Active Effects.
- An availability condition based on the attacking actor and current target.
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.
Optional Argon Combat HUD integration
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:
- Available attached weapon skills appear as direct action buttons around their weapon, using the same actor-and-target condition checks as the attack picker. The first three occupy the lower edge, the next three occupy the upper edge, and additional rows grow upward.
- Left-clicking a skill performs that skill's attack directly. Right-clicking opens its item sheet.
- Monsters without equipped weapons still receive HUD buttons for all of their non-ammunition weapons. Player characters continue to use Argon's equipped-weapon behavior.
- Client settings can independently hide Brawling actions, Verbal Combat, and Special Attacks from the HUD.
Where to find the features
The GM can open WTTRPG Enhancements from the header of:
- An Active Effect to configure ongoing damage, ongoing healing, lifesteal, or damage amplification.
- A weapon or spell to configure lifesteal.
- A weapon to create, attach, and manage weapon skills.
- An owned actor to create, attach, and manage global situational bonuses.
- A weapon or spell to create, attach, and manage item-specific Attack and Damage bonuses.
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.
Requirements
- Foundry VTT 13 or 14
- The Witcher TRPG system 14.2.1 or newer
- libWrapper
Optional: