Version 0.9.0
Compatible with Foundry VTT v14 (verified 14.365). Foundry v13 is no longer supported. Manifest: https://github.com/Nimble-Co/FoundryVTT-Nimble/releases/download/0.9.0/system.json
Back up your world before updating. This release runs migrations 042 through 047, which rewrite embedded copies of six shipped items on your existing actors and unbank
maxHpBonustotals from every character's stored hit point bonus.
The system now runs on Foundry v14, verified by a live integration suite that drives a real v14 world. Area-of-effect spells and features place as native v14 Regions and target what is inside them. Spells can be dropped onto a sheet as scrolls, Shadow Trap rolls its damage when it actually lands, and a new situationalRollMode rule offers advantage in the roll dialog for circumstances only the table can judge. GMs can author custom conditions, and ancestries that cover several peoples ask which one during character creation.
Read the Behaviour changes section before updating a live game.
Additions / Changes
Foundry v14
- [#843] The system runs on Foundry v14: data model registration, document subtype generics, deletion operators, Active Effect V2 condition models, the status-effect proxy, dialogs and sheet helpers are all on the v14 API. @Fronix
- [#843] The default token's mana bar and per-subtype prototype token settings come from
system.jsonand each actor's creation hook, replacing the removedcore.defaultTokenworld seeding. @Fronix - [#843] A Playwright-driven live-Foundry integration suite (23 files, 98 tests) exercises chat cards, sheets, conditions, every rule family, initiative, dice pools and the damage pipeline against a real v14 world. @Fronix
Areas of effect
- [#843] Activating a spell, feature or object with an AoE starts an interactive placement: a preview of the exact grid cells the area will cover, per-shape snapping, wheel rotation in 45 degree steps (shift for 15), shift for free placement, right-click to cancel. Placement creates a player-visible Region, tokens inside it are added to the card's targets (hidden and defeated tokens excluded), and the card keeps a "Place N-square shape" button as the retry path. @Fronix
- [#843] Template shape tags in the targeting config can be deselected, and the dead v13 MeasuredTemplate code that was never wired into any card is gone. @Fronix
Rules engine
- [#908] [#402] New
situationalRollModerule type. It offers a roll mode adjustment the roller opts into for conditions the system cannot see, such as "against fear". Nothing is stored on the actor: the check roll dialog's Situational Modifiers panel lists every option whose predicate, check type and target key match, checking one moves the roll mode slider, and the adjustment applies to that roll only. Covers saves, ability checks, skill checks and initiative. Attacks keepconditionalBonus. @trevlar
Spells
- [#913] Dropping a spell on a character sheet opens a chooser: spell list or scroll, defaulting to the spell list so Enter reproduces the old behaviour. It states the mana cost, how far each destination can upcast, whether the Arcana check applies, and warns when the actor has no mana. Dropping a scroll template instead opens a searchable, school-filtered picker of that tier's spells; secret spells are offered to a GM only. @trevlar
- [#913] A scroll casts the spell it carries: it costs the spell's actions, spends no mana, cannot be upcast, and is consumed on use. The DC 10 Arcana check applies only when the wielder knows no spell of the scroll's school, and a failed check wastes the scroll. The roll dialog explains what raised the check and what a failure costs. @trevlar
- [#913] New world setting: whether a new scroll copies the inscribed spell's description beneath the scroll rules. @trevlar
- [#910] [#370] Damage nodes gain a "deferred roll" option, set from the item sheet, for damage that lands on a creature the activation cannot know about. The card offers a Roll Damage button to the author and GM in place of a total, the roll is a
DamageRollso it still misses on a 1 and crits on its maximum, and Apply Damage then treats it as an ordinary packet. @trevlar
Conditions
- [#911] GMs can add, edit and remove custom conditions from a world-settings editor, each with an icon and description. They behave like the built-ins everywhere conditions appear: token HUD, actor sheets, enrichers, rules and activation effects. Ids are validated and locked once saved, names are escaped in generated HTML, and conditions a module adds survive a save. @trevlar
- [#911] Removing a condition that is in use lists the creatures carrying it and the items whose rules or effects name it, with the choice to strip it everywhere or leave the references. Cleanup runs on save, each rule type is retired appropriately, and a chat chip naming a removed condition falls back to its raw id. @trevlar
Character creation
- [#912] Ancestries can list the peoples they cover in
system.variantson the sheet's Config tab. Two or more names add an Ancestry Variant step to character creation, gating the stage the way size does. The character's ancestry takes the chosen name while its identifier stays pinned, so a Shroomling still answers todryad-shroomlingand keeps its language grants. Nothing is inferred from the ancestry's own name; the GM writes the list. @trevlar - [#912] Variant rows carry a game-icons.net silhouette keyed by name, the steps under Step 2 letter themselves in the order they are asked, and a size the ancestry settles is stated as a plain line rather than posed as a step. @trevlar
Dice
- [#914] The primary die renders distinctly in Dice So Nice. The appearance is baked into the roll at construction so each roller's choice travels to every client, the system colorset is hidden from the theme list, and a mapped damage type no longer overrides the primary die's colours. Without the module active the options are inert. @Fronix
- [#914] New per-user 3D Dice settings dialog, reachable by every player: an enable toggle, colour pickers for die body and numerals, a preview swatch, and a reset to the crimson and gold defaults. Without Dice So Nice installed and enabled the button is disabled with an explanation. @Fronix
Fixes
Combat
- [#843] Foundry v14 dispatches turn events for combatants who were merely jumped over (Next Round mid-round, skip defeated). Skipped dispatches no longer refill pools, recover charges or reset actions for combatants who never took their turn. @Fronix
- [#843] The hidden-combatant initiative whisper is back. v14 ignores a roll mode key in message data, so hidden initiative had been posting publicly. @Fronix
Conditions and effects
- [#843] Token status icons stay on effects created before the v14 upgrade, which v14 otherwise hides unless the effect has a temporary duration. An explicit "never" still hides an icon. @Fronix
- [#843] Toggling a status effect no longer crashes with "changes is not iterable", and condition effects are created from their source data so derived duration fields are not stored. @Fronix
- [#843] v14's token HUD height cap no longer turns the conditions panel into a scroll window and clips the clear-all button. @Fronix
Chat cards
- [#843] A square AoE's place button reads its configured width, so a 3x3 square no longer reads "Place 1-square square", and placement failures surface as a notification instead of a silently missing area. @Fronix
- [#843] Cards whose author user has since been deleted render again instead of failing on the header colour. @Fronix
- [#843] Strings with placeholders interpolate on v14. The upcast dialog had shown the raw "Upcast {spellName}". @Fronix
Rules engine
- [#927] [#499]
maxHpBonusis recalculated on level-up. It used to be banked into the stored hit point bonus when the item was added, so aperLevelrule on anything but a class item froze at that level and deleting and re-adding it could not repair the total. The import preview counts these rules too, so Veteran and Experienced no longer preview short, and the rule warns when its predicate only matches after max HP is computed. @Fronix - [#907] [#906] Two copies of the same class feature (a world item beside its pack original) froze the level-up dialog with a duplicate-key error. @Fronix
- [#843]
RecordFieldentry deletion removes the entry on v14 instead of silently resetting it to defaults. @Fronix
Mana
- [#919] A caster's current mana is seeded to full when the maximum first becomes non-zero at level 2, instead of sitting at 0/N until the first rest. It is clamped when the maximum falls away on level down, history reset or class deletion, which used to render a 2/0 chip. Batched updates and unlinked tokens no longer collide on the seed. @Fronix
Character progression
- [#929] The Shepherd gains two Sacred Graces at level 5 and one each at 9 and 13. A sheet warning opens a correction dialog for a character an earlier level still owes picks, recorded so a level down reverts them. @trevlar
Sheet and UI
- [#928] Checkboxes are square, centred, and legible in dark mode, where a checked box had been indistinguishable from the card behind it. @trevlar
- [#843] Character portraits stay editable when Tokenizer is enabled but did not load. Shift to bypass Tokenizer is unchanged. @Fronix
- [#915] The PDF export prints document link labels instead of raw UUIDs. @trevlar
Tests and CI
- [#931] The live test harness joins the world through the v14.367 username field. @trevlar
- [#843] The integration pool no longer trips Vitest 4's five-second worker start cap. @Fronix
- [#908] The migration-count CI check no longer counts a co-located
.test.tsas a migration. @trevlar
System Data
- [#843] Pyroclasm is flagged as an AoE per the rules, and Boisterous Winds' stale default square template is cleared. @Fronix
- [#908] [#402] Haunted Past carries a
situationalRollModerule: advantage on Will saves "against fear", offered per roll. @trevlar - [#909] [#401] Survivalist carries a
situationalRollModerule: advantage on Strength saves "against poison", offered per roll since Strength also covers forced movement, restraint and temperature. @trevlar - [#910] [#370] Shadow Trap carries a deferred 3d12 damage node. It previously shipped with no damage at all. @trevlar
- [#912] Dryad/Shroomling, Minotaur/Beastfolk and Oozeling/Construct list their variant names. @trevlar
- [#913] The spell scroll blanks are renamed "Spell Scroll, Tier N" and are small-sized, so scrolls share one inventory slot rather than taking one each. @trevlar
- [#917] The Create Opening action description is updated for the current rules. @Fronix
Behaviour changes
- Foundry v13 worlds must update Foundry before installing. The manifest declares a minimum of v14. [#843]
- A bare template shape no longer makes an item an AoE. Placement and the AoE crit and miss rule are gated on "acquire targets from template". Homebrew that relied on a template shape alone needs that flag set. [#843]
- Activating an AoE item creates a Region on the scene. Players can create Regions under Foundry's default permissions; a world that has revoked that permission will see placement fail with a notification. [#843]
attributes.hp.bonusmeans the player's manual bonus again. Rules no longer write into it. A character who set a manual bonus and also had a driftedperLevelrule may need that bonus checked by hand after migration 044. [#927]
Migrations
| Migration | What it repairs |
|---|---|
| 042 | Pyroclasm's missing AoE flag and Boisterous Winds' stale square template |
| 043 | Retargets copies of the spell scroll blanks to the renamed, small-sized templates |
| 044 | Removes banked maxHpBonus amounts from each character's stored hit point bonus |
| 045 | Haunted Past's fear advantage rule on embedded and world-level copies |
| 046 | Shadow Trap's deferred damage node, skipping copies that already carry damage |
| 047 | Survivalist's poison advantage rule on embedded and world-level copies |
Schema version 41 to 47. Rule types 44 to 45.
Contributors
If you would like to support continued development, you can do so on Patreon or Ko-fi.