Crits N ThingsSeason 5
dcc.critsnthings.com

Table Tools · Fan-made

Roll20 Character Sheet

There is no published Roll20 sheet for the Dungeon Crawler Carl RPG, so we built one and have been running the campaign on it. It rolls what the book says it rolls, works out its own modifiers, and can take a crawler in and hand one back. It is free. Take it.

Download

Version 2.27.0

Released 2026-10-09. One zip, about 95 KB, 3 files and no installer.

dcc-favor.js is deprecated

Since 2.9.0 the sheet handles AI Favor itself, and the Mod script is no longer in the download. If your game has it installed, remove it under Settings, Mod (API) Scripts. Nothing on the sheet calls it any more.

The Compendium script

Since 2.11.0 the sheet's ? and hammer buttons talk to a mod script. It looks things up and breaks items down into materials. The public copy carries the crafting system and a thousand everyday items, and reads your own rules from a handout. Without it the rest of the sheet works as before.

Download the sheet
  • dcc-carl.htmlThe sheet's HTML layout, roll templates and workers
  • dcc-carl.cssThe sheet's styling, and the chat card's
  • README.txtThese instructions, for once the zip is on your desktop

What you need

A Pro or Elite subscription on the Roll20 account that owns the game. That is Roll20’s rule for custom sheets of any kind, not ours. Players joining that game need nothing at all, and pay nothing.

No Mod scripts for the sheet itself. The ? and hammer buttons need the Compendium script; everything else, the sheet does on its own.

Setting it up

Once per game, and it takes about two minutes.

  1. Open the game's settings

    From the game's details page, outside the game itself: Settings, then Game Settings.

  2. Choose a custom sheet

    Scroll to Character Sheet Template and pick Custom. Three tabs appear: HTML Layout, CSS Styling and a settings box.

  3. Paste the two files

    dcc-carl.html goes in HTML Layout. dcc-carl.css goes in CSS Styling. Paste each one whole, replacing anything already there.

  4. Leave Legacy Sanitization unchecked

    This is the one that costs people an evening. The sheet is written for Roll20's current sheet engine, where the class names match between the HTML and the CSS. Ticking that box silently strips every style on the page and you get an unreadable wall of boxes.

  5. Save, then open a character

    The sheet appears on every character in that game. Existing characters keep whatever attributes they already had.

AI Favor

Gain and Spend work on their own. Spending asks whether you are buying an extra action or a re-roll, and a re-roll rolls your last roll again with the same numbers it had.

Versions before 2.9.0 needed a Mod script, dcc-favor.js, for those buttons. The sheet no longer uses it, so if your game has it installed you can remove it.

Updating

Download the new zip and paste the two files over the old ones. Characters keep everything they have.

Where a version moves a number from one field to another, each sheet does that for itself the first time somebody opens it. Nothing happens until the sheet is looked at, and nothing happens twice. The version the sheet is running is printed at the bottom of every tab, so you can always tell whether a game has had the update.

Changelog

Written for the people who use the sheet rather than the people who edit it. Where a version moves numbers you had already entered, the entry says what happens to them.

2.27.0

2026-10-09Current
  • When: an attack row or a spell row picks a Skill or Spell from the book (not "Other..." and not the dash) and the Skills list has no row for it (matched as everywhere else, so "Clubs" answers for Club and "Improvised Weapon" for Improvised Weapons). On open, and when you pick a skill or change the rank on an attack or spell row. Never on an Archive import.
  • At what rank: the attack's rank less what worn gear adds, so the Skills row holds the rank you learned. A "+1 Longsword" item takes 1 off; an item that grants the Skill at a rank is met by the house rule, using the lowest learned rank that still rolls at the attack's rank. Two attacks naming one Skill add it once, at the higher rank. A Spell is named "Water Breathing (Spell)".
  • After that the attack row follows the Skills row, as every attack naming a listed Skill does: raise the Skills row and the attack goes up with it. The list stays A to Z.
  • What moves: each sheet gains those rows the next time it is opened, and the archive gets them on the next party export, as ordinary Skills rows. On file today: Steve gains Longsword 5 (beside his Cutlass 5 row, which names no book Skill; rename or remove that one if they are the same Skill) and Pip gains Water Breathing (Spell) 1. Nobody else. No attack rolls a different number.
  • DCC Apply needs nothing: the new rows are ordinary rows, already in its A-to-Z order.
  • crawler creator: resync (npm run roll20:sync): the sheet's worker changed; the dcc-crawler/2 format and the fake sheet did not. A new character's payload should carry a Skills row for every book Skill or Spell its attack and spell rows pick (the sheet adds a missing one on first open, never on import, so the round trip is unaffected either way).

2.26.0

2026-10-09
  • Older files still import. An export from before 2.26.0 carries atk_mana (blank) on every attack row, and every crawler file in the archive does until its next party export. The Archive import drops it from weapon rows before writing anything. A spell still sitting on an attack row in a 2.16.0 file keeps its typed cost when it moves to the Spells section, on import and on open, as before.
  • What moves: the export. Attack rows lose atk_mana; no other field, no value, no order changes. Spell rows (sp_mana) are untouched. crawlers/*.json lose the field on the next party export; roll20/exports/ never had it (the payload builder already dropped it).
  • DCC Import and DCC Apply need nothing: neither reads atk_mana. !dcc-import of an older file still writes the field on a weapon row, where nothing reads or exports it, so a 2.16.0 spell row's cost can still be moved across when the sheet is opened.
  • crawler creator: resync (npm run roll20:sync): the sheet's export changed; fakeSheet is unchanged. Stop emitting atk_mana on attack rows if anything still does: dcc-crawler/2 attack rows have no atk_mana from 2.26.0 (the creator's src/engine/sheet/roll20.ts already emits none, and its tests already say so). Older payloads that carry it still import.
  • GM: paste roll20/paste/dcc-carl.html and roll20/paste/dcc-carl.css into Game Settings. No Mod script changes.

2.25.2

2026-10-09
  • Evade (the chip's hover text, the line under it, and the Evade & defence note on the Core tab): Evade is an Interrupt. It costs one of your two Actions for the round and covers every attack aimed at you that round, one roll per attack; an attack you don't Evade hits. Every Interrupt (Evade, Intervene, Heal, Catcher, Taunt) comes out of the same two Actions. A Mob attacking at Disadvantage gives you a free Evade.
  • Damage resistance comes off every hit first, always (the tile's line and hover text, the Core tab note and the Health note).
  • Dying (the Health note): rounds equal to your Con mod, the table's ruling where the books disagree; one fewer at each Clean Up and each time you would take damage; healed one band, you live.
  • Advancement (the marked dot's hover text and the Skills note): marked skills roll at the end of every 2 hours of play at Rank 4 or lower, and at the end of the floor at Rank 5 or higher; a d20 at or above the rank gains 1, up to 15. (It used to say "since the last checkpoint".)
  • Untrained and Help (the Skills note): an Attack or Utility skill can be tried on the stat alone, without Disadvantage on Floors 1 and 2 (house rule); outside combat, a helper with a rank gives you Advantage (house rule), so set the roll state.
  • AI Favor 's spend button: 1 Favor, for an extra non-Attack Action this round or your last d20 again before the result, never a natural 1.
  • Salvage without the skill (the Salvage line on the Inventory tab): breaking an item down untrained has no Disadvantage on Floors 1 and 2 (house rule), and Disadvantage from Floor 3. The Compendium script 1.7.0 rolls it that way.
  • What moves: words and the Skills row's layout. No numbers, no values, nothing in the export.
  • crawler creator: resync only (npm run roll20:sync): the sheet's markup and CSS changed, and in the worker only the Salvage line's words; the export did not, and fakeSheet is unchanged.
  • GM: paste roll20/paste/dcc-carl.html and roll20/paste/dcc-carl.css into Game Settings, and the Compendium script 1.7.0 (below). For the Crawler reference handout, run !dcc-reference (Compendium script 1.7.0).

2.25.1

2026-10-09
  • What moves: the order of each sheet's Skills on screen, the first time it is opened or the next Sync or party export. No numbers, no values, nothing in the archive files.
  • crawler creator: resync (npm run roll20:sync), sheet and fakeSheet. The fake sheet now has setSectionOrder (it stores the order in _reporder_repeating_<section>, and throws on a repeating_ prefix, an id that is not a row, a repeat, or a row left out), drops a worker's own setAttrs write to _reporder_* as Roll20 does, and lists every call in sectionOrders. A creator test that set the order through the worker's setAttrs would now see no change. The export is unchanged, field for field; nothing to port.
  • GM: paste roll20/paste/dcc-carl.html and roll20/paste/dcc-carl.css, paste dcc-apply.js (1.10.2) over the old copy, then Restart API Sandbox. DCC Import and the Compendium script are unchanged.

2.25.0

2026-10-09
  • Nothing moves in the archive files. The GM tools button, the grant line and the hint are never exported. A row the sheet adds is an ordinary Rank 0 Skills row, and it goes out with the next export (Barry's Character Actor, Pip's Sleight of Hand).
  • crawler creator: resync the sheet copy (npm run roll20:sync). Nothing to port: the export is unchanged, the creator writes no gear rows, and the new rows are added on open, never on import.

2.24.0

2026-10-09
  • Which rows grant: each skill or spell "gives" row on the Gear tab has a new box: auto, bonus or grants at rank. On auto, every Spell grants, and a Skill grants when the item's name or note says "level N <Skill>" or "<Skill> at Rank N"; anything else is a bonus. The box stays on this sheet and isn't part of the archive file.
  • Your Rank at first wear is kept in a new box at the foot of the Gear tab, by item and Skill, so what you train while wearing the item counts in full and stays when it comes off. It travels in the archive file. The GM can edit an entry ("l0") or delete it to have it taken again.
  • Several granting items for one Skill: only the best counts. Bonuses add on top.
  • Rank is still yours. A rank-up, DCC Apply and the archive all use it. Gear is what your items add on top, and the big number is still Rank + Gear. Turn on Edit in the Skills head to see a grant's sum ("item 10 on your 11: 14 + 1 trained since = 15").
  • The attack row, Dodge's Evade Buff and the Salvage check all read the new number.
  • This moves four rows on the crawlers on file, each a Rank 1 grant on a learned Rank 1, which is now 1 rather than 2: Barry's Catcher (his Gold Club says "Catcher Skill rank 1"), Frank's Lightning Bolt, Pip's Shock Treatment and Steve's Drain Life (the spell rows go with them). If an item's spell is meant as a "+1" bonus, set that gives row to bonus. Every "+N Skill" bonus is unchanged.
  • Which items are Celestial: each Gear item row has a new tier box. Leave it blank and the sheet treats the item as Celestial when its name or note says "Celestial"; pick a tier to say for sure. The tier box stays on this sheet and is not part of the archive file.
  • The row shows the working: "+20% Strength -> +9 (20% of Str 47 incl. gear and buffs, Celestial, set 2026-10-09)". The number is fixed from then on, like every percentage item.
  • Numbers already worked out stay as they are. To have a Celestial item worked out again from the full Stat, the GM deletes its entry in the Percentage items box and the next wear sets it.
  • Moves: the four Skill rows above (and their spell rows), on open, and those four sheets gain an entry in the new kept-Rank box. Nothing else; no Stat, no stored percentage number.
  • crawler creator: resync (npm run roll20:sync), and hand-port the grant rule from scripts/roll20-payload.mjs into src/engine/sheet/roll20.ts: sumGear now splits skills (bonuses, in full) from grants, skillRankOf / grantedSkillRank / grantInText give a row's rank, and grantSnapshots writes the new optional skill_grant_map attribute (only when a worn item grants a skill, so a new character without one exports as before). gr_tier, gr_grant and sk_working are new sheet-local fields that never travel.
  • GM: paste roll20/paste/dcc-carl.html and roll20/paste/dcc-carl.css, then Restart API Sandbox. No Mod script changed.

2.23.1

2026-10-09
  • DCC Apply 1.10.1 and DCC Import carry the same rule; nothing else in them changed.
  • Nothing moves on any sheet, and nothing is exported differently.
  • crawler creator: resync when convenient (npm run roll20:sync); only the item-name rule in the sheet's worker changed, and the dcc-crawler/2 export is unchanged, field for field.
  • GM: paste roll20/paste/dcc-carl.html (the CSS is unchanged), paste dcc-apply.js (1.10.1) and dcc-import.js over the old copies, re-download the Compendium script (1.6.2, below), then Restart API Sandbox.

2.23.0

2026-10-09
  • The first time this crawler wears it (the Gear row's toggle on), the sheet works out that percent of the base Stat, Start + Level with no gear or buffs, rounded down: +10% Strength on a base of 34 is +3. The number goes into Gear under the score, like any "gives" row, for as long as the item is worn.
  • The row shows the working on a line under the item: "+10% Strength -> +3 (10% of base Str 34, set 2026-10-09)". An item not yet worn says "set the first time it is worn". Worn effects on the Core tab add the number in brackets.
  • The number is this crawler's for good. It is kept in the new Percentage items box at the foot of the Gear tab, by item and Stat. When the Stat goes up later (Floor 3's refund included) the number stays. When the item is sold, traded or lost and comes back, the same number comes back with it. Another crawler who wears it gets their own number from their own base.
  • The GM can change it: the box is plain JSON. Edit an entry's "n", or delete the entry to have it worked out again the next time the item is worn. If the box isn't valid JSON, the percentage items give nothing and the amber line on the Gear tab says so, and the sheet never overwrites it.
  • An item whose percent changes (an upgrade from +10% to +15%) is worked out again at the new percent.
  • Exported: the box travels in the Archive file as pct_stat_map, only when it holds something, so every crawler on file exports exactly as before. DCC Apply is unchanged (it already writes the printed text into the note).
  • crawler creator: resync (npm run roll20:sync). Nothing to port: a new character has no percentage numbers, so the creator's dcc-crawler/2 payload is unchanged; pct_stat_map is an optional attribute only an export from play carries.
  • GM: paste roll20/paste/dcc-carl.html and roll20/paste/dcc-carl.css, then Restart API Sandbox. No Mod script changed.

2.22.2

2026-10-09
  • The Gear row. The worn row with the item's name (a not-worn one if none is worn) gets the upgrade's numbers as new "gives" rows under the ones it already has, and the upgrade's note added to the end of its note. A skill or spell the upgrade raises that the crawler doesn't have gets a Rank 0 row, and the Skills list stays A to Z.
  • The attack rows. Every attack row with the item's name gets the extra damage in its Misc box and the new effect added to the end of its effects. Spell rows are never touched.
  • A new name, when the upgrade gives one (a Crowbar becomes a Blazing Crowbar), goes on the Gear row and every attack row of that item.
  • The scroll is used up: one comes off the Inventory stack with its name. If that crawler isn't carrying it, nothing comes off, and the line says so; take it off whoever has it by hand.
  • A weapon kept only on the Attacks tab gets its damage, effect and name. Numbers and a note have nowhere to go without a Gear row, so the line says "not written" and the GM adds them.
  • An item that isn't on the sheet (sold, renamed by hand, never added) gets nothing written, and the line says "not found". The change stays waiting on the loot site, and the next Sync tries it again, once the item is on the sheet.
  • A change this script doesn't know is now left waiting the same way, rather than being marked done. So a kind the loot site adds later is never lost in a game that hasn't had the new script pasted yet. (Up to 1.9.0 an unknown change was marked done and never came back.)
  • Nothing moves on any sheet.
  • crawler creator: resync when convenient (npm run roll20:sync); only the item-name rule in the sheet's worker changed, and the dcc-crawler/2 export is unchanged, field for field.
  • GM: paste roll20/paste/dcc-carl.html (the CSS is unchanged), paste dcc-apply.js (1.10.0) over the old copy, re-download the Compendium script (1.6.1, below), then Restart API Sandbox. Paste DCC Apply 1.10.0 before the first upgrade is synced.

2.22.1

2026-10-04

    2.22.0

    2026-10-04
    • The rails have swapped. The left rail is now everything about the crawler's state: Attributes at the top, then the Health track, Injuries, Debuffs, External buffs and Worn effects. The right rail is the Skills list alone, top to bottom, so it has room for twenty-odd skills. The > in the Skills head folds that rail to a narrow strip when you want the room back; the left rail no longer folds, because health and injuries are read every round. A sheet that was left folded opens with the Skills rail folded; press open to bring it back.
    • Find a skill. A search box at the top of the Skills rail, like the Gear and Inventory ones: type part of a name or a stat ("dex") and press Enter or click away, and only the matching skills show, with a line saying how many. Empty the box to see them all.
    • Skills keep themselves A to Z by name ("The" at the front doesn't count). The list sorts itself when the sheet is opened and whenever a skill is added or renamed. Your skills don't change, only their order. The archive copy picks up the new order the next time the party is exported (a one-off reshuffle in each crawler's file); an Archive import keeps the file's order until the sheet is next opened.
    • Pin to the Hotlist. Every skill, attack, spell and Inventory row has a small Pin button (on a skill's second line; behind the chevron on an attack or spell). Press it and the row goes into the first empty Hotlist slot, or a new slot. The slot shows what it does (Skill check, Attack, Cast, Item) and the name, and pressing it does exactly what the row's own button does: the skill check (and its mark), the attack, the cast with its Mana spent. An item's slot shows the item in chat: name, how many, what it's made of, its notes. Every card from the Hotlist says "from the Hotlist". The little x empties a slot. Slots you typed into keep working as notes, exactly as before. Rename a pinned row and the slot follows; delete it and the slot turns back into a note with the name in it. An Archive import brings every slot back as a note (the pins point at rows on this sheet only).
    • Popularity is in the vitals strip, as a number, beside AI Favor (it was a box at the bottom of the Story tab, which is gone; the number is the same). Under it, once your Popularity is above 0 or you're on the Second Floor or deeper, the show's numbers: Views, Followers and Favorites, worked out from your Popularity the same way the GM's desk does, so the two always agree. About a million followers at Popularity 0, ten times as many every 2.5 points. Views never go down, even if Popularity does. Big numbers read as words ("117.4 million", "1.1 trillion").
    • DCC Apply 1.9.0. When a Sync adds a skill, the Skills list lands A to Z straight away, before anyone opens the sheet. And a worn item the GM sends again (loot's "send it again") no longer takes a second copy off an Inventory stack of the same name: the first send already moved one.
    • The Compendium's Popularity page now has the Atlas's Second Floor list (what earns and loses a point there), this table's rulings (everyone starts the Second Floor at 0; the Second Floor Charisma loss is at 5 or less; the Third Floor baseline adds to what was earned; Fan Boxes; when a PR agent turns up), and a note on the sheet's Views, Followers and Favorites.
    • What moves: the order of each sheet's skills, once, the first time it is opened. Nothing else changes on any sheet: no numbers move, and the Popularity number stays where it was.
    • crawler creator: resync (npm run roll20:sync). The sheet's layout and worker changed (new sheet-only fields: sk_search, sk_hide, hot_kind, hot_src, hot_label, the Popularity counters); the dcc-crawler/2 export is unchanged, field for field, and an import is not re-sorted.
    • GM: paste roll20/paste/dcc-carl.html and roll20/paste/dcc-carl.css again, paste dcc-apply.js (1.9.0) over the old copy, then Restart API Sandbox.

    2.21.0

    2026-10-02
    • Every item that teaches a Spell is now a "Tome of X". The book had three names for it (Magic Tome, Spellbook, Rare Spellbook) and called some Spells "weak" without ever saying what that means. Curtis ruled them one item: a Tome. Spell Scrolls stay Scrolls, and "weak" is gone from both.
    • What moves, once per sheet, the first time it is opened: an Inventory row called "Magic Tome of Heal (Learn a new, weak Spell)" becomes "Tome of Heal (Learn a new Spell)", "Spellbook of Oakhide" becomes "Tome of Oakhide", and a Tome's or a Scroll's notes lose the words "weak Spell" ("Learn a new, weak Spell" reads "Learn a new Spell"; "One shot, no Mana casting; weak Spell" loses its last part). Gear item names get the same pass. Nothing else on the row changes, the loot link (inv_ref) included, and opening the sheet again changes nothing.
    • The archive is already renamed (Frank, Johan, Madisen and Elsie held old names), so an Archive import brings the new names in. The import's "this file would drop items" check treats an old and a new name as one item, so a sheet not yet opened since this update is not warned about its own Tomes.
    • DCC Apply 1.8.0 treats the old and new names as the same item: a "Tome of Heal" from loot stacks onto a sheet's "Magic Tome of Heal", and a worn item finds its Inventory row the same way. DCC Import compares names the same way in its drop check. The Compendium script (1.4.1) carries the new name rule; !dcc-lookup Tome of Heal finds the Tome and the Spell, as the old names still do.
    • crawler creator: resync (npm run roll20:sync). Its starting spell tome is written "Spell tome: X" (src/engine/sheet/sheetModel.ts) and should now be "Tome of X"; a sheet renames only names it recognises, and "Spell tome: X" is not one.
    • GM: paste both files again, paste dcc-apply.js (1.8.0) and dcc-import.js over the old copies, download the Compendium script (1.4.1) from the Compendium's Roll20 script page and paste it over the old copy, then Restart API Sandbox.

    2.20.0

    2026-10-02
    • Three rest buttons in the tab strip: Short rest, Long rest, Full day. Each asks you first, in a prompt that says what it will do, and does nothing until you answer Yes; then it changes the sheet and posts one card saying what moved (bands healed, Mana before and after, which injury ended). Answer No and the card says "Not applied"; close the prompt and nothing posts at all.
    • Short rest (2 hours): the book heals 5 Health Bar slots; on this sheet a slot is a band, so five lost bands come back, the highest percentages first (fewer if fewer are lost). Mana comes back by half your maximum, rounded down, up to the maximum. A Minor Injury ends; a long-term one does not.
    • Long rest (8 hours): every band back, Mana to the maximum, a Major Injury and a long-term Minor Injury end. A long-term Major stays. The card reminds you to take Fatigued out of your Debuffs (that box is free text, so the sheet does not touch it) and that External Buffs can be picked again.
    • Full day (30 hours): as a Long rest, and a long-term Major Injury ends too.
    • What a rest never touches: AI Favor, cooldowns, daily uses. There is no once-a-day limit; that is the GM's call at the table.
    • Nothing moves on its own. No attribute, row or export changed; the buttons write only when you press them and answer Yes.
    • GM: paste both files again; no Mod script changed.

    2.19.0

    2026-10-02
    • A Compendium card lists its facts one per line. Pressing ? on a skill, spell, attack, gear or inventory row used to print the facts as one run-on line ("Kind: Attack · Mana: 2 · Range: 30 feet · ..."). The card now shows them as labelled rows, Kind, Mana, Range, Target, Duration, Damage and so on, in the same dress as a roll card's Attack and Damage lines. This is the sheet's roll template and the Compendium script together: the script (1.4.0) posts each fact as its own field, and the sheet gives each a row. An older script on a new sheet still prints the old line; a new script on an older sheet prints no facts at all until the sheet is pasted, so do both.
    • Nothing moves. No attribute, row or export changed.
    • GM: paste both files again, and download the Compendium script (1.4.0) from the Compendium's Roll20 script page and paste it over the old copy under Mod (API) Scripts, then Restart API Sandbox.

    2.18.5

    2026-10-02
    • The Inventory head's wide button is now "Component lookup", a small grey button like Add and Modify beside it, instead of "Fill in what everything is made of" in the big red style, which ran into Roll20's Add button on a narrow sheet. It does the same thing: matches every inventory row to the Compendium and fills in its Made of box. The hint under the Materials boxes names it.
    • Nothing moves. GM: paste both files again; no Mod script changed.

    2.18.4

    2026-10-02
    • Roll20's row controls are Roll20's again. In 2.18.3 the sheet redrew the trashcan and the drag handle as two small squares at the right end of each row, and the trashcan still deleted nothing. Roll20 deletes a row on one plain click of its own button, with no confirm step, so the sheet now leaves the control exactly as Roll20 lays it out: the pale wash over the row while Modify is on, the grey handle at the row's left, the red trashcan at its right, at Roll20's own size. The sheet only colours them, keeps them above its roll chips, and gives each row room at both ends so they sit over empty space.
    • Hotlist slots: the handle and the trashcan sit across a slot's top, clear of its number, and the text moves down under them.
    • A brand-new row cannot be deleted until it holds something. Checked in the live game on 2026-10-02: the trashcan removes any row that has a saved value, and a row you just added and never typed in stays, because Roll20 has no attribute to remove yet. Type in it, or leave Modify and come back, and the trashcan works. The current client prints nothing to the browser console on a delete.

    2.18.3

    2026-10-02
    • Modify shows a real trashcan and drag handle on every row. Pressing Modify on Attacks, Spells, Skills, Gear, Inventory, the Hotlist or a Story list used to print a red # and a red block over the row; the sheet's own button style was covering Roll20's icon. Each row now gets a small red trashcan and a grey three-bar handle at its right end, in space the row only has while Modify is on.
    • The trashcan deletes. It sat under the roll chips, so the click landed on them. It is on top now, in every section.
    • Hotlist slots stay ten across in Modify. The red strip at each slot's right edge is gone: the trashcan and handle sit in the slot's top corner beside its number, and the text moves down under them.

    2.18.2

    2026-10-02
    • The Health tile is gone from the vitals strip. It repeated the Health track in the right column, which is where health is marked. Slots left over slots in all now sit in the track's title line ("32 / 40"); five equal tiles remain: Evade, DR, Move / Step, Mana, AI Favor. A token bar pointed at hp still works. A creature keeps its slots tile.
    • Nothing moves. GM: paste both files again; no Mod script changed.

    2.18.1

    2026-10-02
    • The sheet stops at 1200px and sits in the middle of a wider window, so the vitals and the hotbar no longer spread thin across a big popout. Six equal vitals tiles; AI Favor's + and - sit beside the number.
    • Attack, spell and inventory rows stay inside their panel. On a narrow Combat tab the spell rows ran out past the border into the right column. The name gives way instead, and the look-up and v buttons are a touch bigger.
    • Add and Modify are small grey buttons at the right end of each panel's title line, and of the Hotlist line, instead of two red blocks on a line of their own. The hotbar is ten equal slots whatever is in it.
    • The right column: the health bands are evenly spaced with a slimmer percent badge; Minor and Major injuries are one line each. The band's race, class and other fields show their underline only when you hover or type. The folded left column is five chips with the modifier inside each ("STR 4"); open it with the > or the Skills button as before.
    • A roll chip changes colour as one thing when you hover it, number included, and clicking the number rolls too.

    2.18.0

    2026-10-02
    • A red band at the top with the character's Roll20 portrait, the name, and race, class, level, floor, crawler number and pronouns as text you can click into. The Crawler / Creature switch is at its right.
    • Six tabs: Combat, Gear, Inventory, Story, Crew, Archive. Combat is the tab Core was. The Normal / Advantage / Disadvantage pills are at the right end of the tab strip, on every tab, and still stay set until you change them. Beside them, Hide help hides every help paragraph on the sheet and brings them back; they show until you hide them.
    • Vitals on every tab: Health as slots left over slots in all, with a bar that empties from the right as bands are ticked; Evade as the blue chip that rolls it; DR; Move and Step with Size; Mana over its maximum; AI Favor with its gain and spend buttons and the note naming the roll a re-roll would buy.
    • The Hotlist is a hotbar of numbered slots under the vitals, on every tab. The same list, moved out of Inventory; an eleventh entry wraps.
    • Attributes and Skills are a column on the left, on every tab. Each stat is a tile: the roll chip, the total, its modifier, and start, level, gear and buff under them. The Skills list is under the tiles: name, the die, the rank the roll uses and the marked dot, with the check and the notes as a line under the name. Edit in the Skills head shows every row's rank, gear, stat and modifier boxes and the look-up. The < at the top folds the column to a strip of the five stat chips with their modifiers. There is no Skills tab; a sheet last saved on it opens on Combat.
    • Health, injuries, debuffs and buffs are a column on the right. The ten bands run 100% at the top to 10% at the bottom, each a coloured strip with its slots and its lost box; a ticked band greys out. Injuries are the same three-way choice, as pills, with the penalty spelled out in the maroon box under them. Debuffs, the three External buffs and Worn effects follow.
    • Attack and spell rows are one line to roll from: the name over its effects, the rank, the red to-hit chip (blue for a cast) with the total in it, the damage chip with the dice and the bonus, the look-up and a v. The skill out of the book, the stat pickers and the Misc boxes are behind the v, and the sheet remembers which rows you opened. A spell row has its Mana box in its own column. A creature's rows open by themselves.
    • Gear, Inventory, Story, Crew and Archive are re-dressed, every field where it was: the Find box is a bar above the rows, Gold sits beside it on Inventory, the worn tick is a toggle, and the slot warning, the import report and the salvage note are amber and green boxes that show only when they have something to say.
    • Creatures: the band holds rank, type, level, floor and size; a strip shows slots left, Surprise, Evade, DR and Move; Health bands sit beside the attacks; Notes below.
    • Chat cards wear the same red band, with the natural 20, natural 1, bought re-roll and short-on-Mana banners as green, red, blue and amber boxes. The same fields in the same order.
    • A narrow window wraps instead of squeezing: the right column drops under the open tab, then the left one, with the stat tiles going five across.
    • New type: Oswald and Source Sans 3, the faces the site uses, loaded from Google Fonts.

    2.17.0

    2026-10-02
    • Spells have a section of their own, on the Core tab under Attacks. One row per spell you can cast, whether or not it rolls anything: your name for it, which spell it is out of the book (every spell is on the list, with Other… for one the book never printed), its Rank, which follows the row on the Skills tab the way an attack's does - Heal (Spell) there is Heal here - its Mana, and the same to-hit and damage line an attack has. Heal, Oakhide, Torch and Ping finally get a button.
    • One Cast button. Press ✶ and the row's Mana comes off your pool first, with Mana 12 → 7 on the card; short is still a warning and never a refusal, as in 2.16.0. Then a spell the book prints dice for - Fireball, Drain Life, Soul Collector, Vine Porn - rolls d20 + rank + to hit and the damage exactly as an attack does; any other spell posts its name, the Mana and whatever you typed in Effects, with no dice. Type heals 2 slots under Heal and that is what the table sees. Casting marks the spell's row on the Skills tab, as rolling a skill does. A re-roll bought with AI Favor repeats a rolled cast and never pays again; a cast with no dice cannot be bought back. Creatures never pay and have no Spells section.
    • The Attacks dropdown is shorter. It holds the attack skills, then every other skill, then Other… - no spells. The attack row no longer shows a Mana box and the ⚔ button no longer spends; picking a skill never seeds a cost.
    • Your spells move on their own, once. Every attack row whose Skill is a spell becomes a spell row the first time the sheet is opened on 2.17.0, or imported: same name, skill, rank, Mana (a typed cost stays, 0 included), stats, Misc boxes, dice and effects, in the order the attack rows were in, after any spell row already there. The attack row goes. Nothing else moves, and nothing happens twice. An Aiming pick on a spell row does not come across; no spell in the book is a ranged attack the skill applies to.
    • Every spell on your Skills tab gets a Spells row, so Heal costs Mana on every sheet. When the sheet is opened or imported, each skill row that is a spell in the book - Heal (Spell), Oakhide (Spell), Torch - and has no Spells row yet gets one: the book's name, its cost in the Mana box, and for a damaging spell its stats, dice and effects. A row you made yourself is never touched, and a spell already there (by pick, by name, or under Other…) is not added twice. A name the book does not print, such as Ping Spell, is left alone: rename the skill row, or add the Spells row by hand. Delete an added row and it comes back the next time the sheet opens while the skill row is still there; if the spell is really gone, take it off the Skills tab.
    • atk_mana is deprecated. The attack row keeps the field one more release, hidden, so a 2.16.0 export still imports and its typed cost is carried to the spell row. It spends nothing there and leaves the attack row in 2.18.0.
    • The archive splits the same way. npm run roll20 writes a spell section in every export, carved out of the spell attack rows in crawlers/*.json by the same rule, plus a row for every spell on the Skills tab - so all seven crawlers carry Heal - and the GM's desk still sees every spell under attacks. The crawler files themselves are not rewritten; the next party export will.
    • GM: dcc-import.js and dcc-apply.js carry the new section in their generated row tables, so paste both into Mod (API) Scripts, then Restart API Sandbox. !dcc-import writes spell rows from a new file and still writes a 2.16.0 file's spell attack rows as attacks, which the sheet moves when it is next opened. A spell on an attack row keeps its Atk: token action until that character is next imported; the Cast button has no token action yet.
    • crawler creator: resync test/fixtures/roll20/ to the 2.17.0 sheet; fakeSheet is unchanged. dcc-crawler/2 gains an additive repeating.spell section, after attack, and the creator should write a Spells row there for every spell the crawler knows - every spell on its Skills rows, Heal included - and no spell attack rows. (The sheet adds a missing one on import anyway, by matching skill names to the book with nameKey, but the file should not rely on it.) A spell row's fields, in export order: sp_name, sp_skill (the book's spell id, other, or ""), sp_skill_tx (the name typed under Other…), sp_rank, sp_mana (a number or ""; blank is filled with the book's cost on import), sp_stat, sp_hit_misc, sp_hit, sp_dice ("" for a spell that rolls nothing), sp_dmg_stat, sp_dmg_misc, sp_dmg, sp_effects. sp_hit and sp_dmg are sp_stat's / sp_dmg_stat's modifier plus the Misc box, as an attack's are. atk_mana on an attack row is still accepted this release and ignored on a weapon; a spell attack row in a file is moved to the spell section on import. scripts/roll20-payload.mjs now writes both sections, and adds the Skills tab's spells (skillSpells), so the hand port in src/engine/sheet/roll20.ts should follow.

    2.16.0

    2026-10-02
    • Casting a spell spends its Mana. An attack row whose Skill is a spell now shows a Mana box under the dropdown, filled in from the book the first time the spell is picked: Fireball 45, Heal 2, Drain Life 14, and so on, for every spell in the book and not only the ones that roll damage. Pressing the row's attack button takes that much off Mana on the Core tab and says so on the card: Mana 12 → 7.
    • Not enough Mana is a warning, not a refusal. The roll still happens and the Mana still comes off, below zero if it must, and the card carries a banner saying how short you are: Mana 2 → -3, Short by 3 Mana. The sheet does not know about the potion you are about to drink; the table does.
    • The box is yours after the first fill. Type over it and the number stays through a re-pick. Put 0 in it for a free spell, such as an Inherent Spell on a forged item, and the row costs nothing. Clear it and the book's cost comes back the next time the sheet is opened. Pick a weapon over a spell and the cost goes away with the spell.
    • A re-roll bought with AI Favor does not pay again. The Mana was spent on the cast, and the re-roll is the same cast. Creatures never pay.
    • One number moves, once. Every spell row already on a sheet is given the book's cost the first time the sheet is opened on 2.16.0, or imported. Your Mana itself does not change until you roll. Check your forged items: an Inherent Spell wants a 0 in its box.
    • crawler creator: resync test/fixtures/roll20/ to the 2.16.0 sheet. Attack rows carry a new field, atk_mana, the Mana the row spends when rolled. A dcc-crawler/2 file that leaves it out or blank is still valid: blank reads as "not set", which spends nothing (0) on a weapon row, and on a spell row is filled in with the book's cost on import. Writing it is optional; scripts/roll20-payload.mjs now writes it (the number on file, else the book's cost for a spell row, else ""), so the hand port in src/engine/sheet/roll20.ts should follow. fakeSheet is unchanged.

    2.15.6

    2026-09-29
    • Accents no longer matter when names are matched. A skill, item or crawler written "Café" now matches "Cafe", on the sheet and in DCC Apply 1.7.1, DCC Import and the Compendium 1.3.1, the same way the crawler creator and the loot site already read them.
    • Nothing moves. No crawler on file has an accent in their name, so no archive slug changes.
    • The name rules are now dcc-data 1.7.0's own code, copied in as it is, instead of a hand-written copy that had to be kept in step.
    • GM: paste the new dcc-apply.js (1.7.1) and dcc-import.js into Mod (API) Scripts, and download the Compendium script (1.3.1) again; until then those still match names the old way.
    • crawler creator: resync test/fixtures/roll20/ to the 2.15.6 sheet. fakeSheet is unchanged.

    2.15.5

    2026-09-29
    • Import will not throw away your loot without asking. Importing replaces every row on the sheet. When the file you pasted does not carry an item this sheet holds, on the Inventory tab or as a Gear item, the Archive tab now stops, names those items, and imports nothing. That is what happens with a new character's file from the crawler creator, which holds only starting gear: importing it over a crawler in play used to erase everything loot had sent, and no Sync would ever send it again. Press Import a second time with the same file to import anyway. A different file asks again. Your own archive export carries your items, so it imports on the first press as before.
    • A crawler already in play is kept up to date through DCC Apply and the archive, not by re-importing it (roll20/README.md, "A crawler already in play").
    • DCC Import does the same for the GM.!dcc-import skips a character holding items the file does not carry, names them, and imports it with --force. --dry says which characters would be skipped. It needs the new dcc-import.js pasted into Mod (API) Scripts.
    • Nothing moves.
    • crawler creator: resync test/fixtures/roll20/ (the sheet, now 2.15.5, and fakeSheet). Nothing about its payloads changes, and a new character imports on the first press. The one change it will see: importing onto a sheet that already holds Inventory rows or Gear items the payload does not carry now returns a status starting "Not imported" until Import is pressed again. fakeSheet's interface (set, get, click) is unchanged.

    2.15.4

    2026-09-29
    • The crafting materials really show every digit now. 2.15.3 widened the boxes, but Roll20's own styles kept the number inside each one narrow, so 2,316 still read as "231". Each box now holds five digits whatever Roll20 asks for, the way the Gold box does.
    • Nothing moves.

    2.15.3

    2026-09-29
    • The crafting materials show every digit. The eight boxes on the Inventory tab were narrow enough that 2,316 Metal read as "231". Each now has room for five digits, and on a narrow sheet they wrap onto a second row. The numbers themselves were always kept whole.
    • Nothing moves.

    2.15.2

    2026-09-29
    • A gives row counts for the item it is shown under. Until now the sheet never managed to read the order rows are shown in, so a gives row counted for whichever item was made last before it: a row you added counted for the bottom item, and dragging it under another item in Modify mode changed nothing. Drag it where it belongs now and it counts there. Roll20 may not tell the sheet about a drag, so if the numbers do not follow at once, close the sheet and open it again. The of box on the row says which item it counts for.
    • Your export lists every section in the order you see it, so gives rows stay under their items on the way to the archive and back.
    • What moves: only a gives row that was shown under one item while it counted for another. That row now counts for the one you see. If a total changes when you open a sheet, the Gear tab's of boxes say why.
    • On the rare occasion Roll20's own row maker is missing, the sheet's stand-in no longer makes a row id with an underscore in it, which hid the row. The Mod scripts had the same fault and are fixed in DCC Apply 1.6.1, which also brings back rows it hid.

    2.15.1

    2026-09-28
    • Nothing you will notice. The Salvage line's rank and the Advantage and Disadvantage dice now come from one place each inside the sheet, instead of being written out twice. Every roll and every line reads as it did.
    • Nothing moves.

    2.15.0

    2026-09-28
    • An attack finds its skill even when one of them is plural. An attack row that says Clubs now follows the rank of the skill Club, and the other way round; so do gear effects that name a skill. Names with an apostrophe match the same way everywhere, too. The sheet now reads a name exactly the way the GM's tools do, so the rank the GM sees and the rank you roll are one number.
    • Every roll card carries your crawler's ID. It is hidden, so you will not see it; the GM's tools use it to tell whose roll was whose when they read the chat log, instead of guessing from the name on the card.
    • The gear warning says "Hands / Holding". That is how the rest of the sheet writes it.
    • One thing can move. An attack row whose skill is only a plural away from one of your skill rows now uses that skill's rank, so its to-hit can go up the first time the sheet is opened. Nothing else changes.

    2.14.0

    2026-09-28
    • An export says which sheet made it. The GM's tools read that and tell the GM when a game is on an older sheet, instead of a feature quietly doing nothing. Nothing to do at the table.
    • Nothing moves.

    2.13.0

    2026-09-28
    • The GM can export the whole party at once. With the new DCC Apply mod script installed, !dcc-export-party asks every crawler's sheet to export itself and gathers them into one handout, instead of five trips to the Archive tab. The Archive tab's Export button is unchanged.
    • The GM can apply levels, Ranks, stat points and loot in one go.!dcc-apply writes what the GM's tools worked out straight into the sheet. You will see your level, Ranks and Level-column points change when it runs.
    • Marks remember when they were made, so when the GM clears the marks a checkpoint rolled, a skill you rolled after the checkpoint stays marked.
    • Nothing moves. No number on any crawler changes until the GM applies something.

    2.12.0

    2026-09-28
    • Rolling a skill marks it for you. Every Skill Check marks its Skill, pass or fail, and the marks are what the Two Hours and End of Floor checkpoints roll to advance. Press a skill's die, or an attack that uses a skill, and the sheet ticks that skill's mark box. Leave it ticked: the GM's checkpoint clears it.
    • What doesn't mark: a skill whose check says Passive, a re-roll bought with AI Favor (it is the same check), and stat checks and Evade, which aren't skills. A Damage Effect row marks itself rather than the attack, as the book says. A skill you have no row for yet marks nothing; tell the GM and it gets a row.
    • Nothing moves. No number on any crawler changes.

    2.11.1

    2026-09-28
    • The ? and hammer buttons fit their rows again. Roll20 draws its own d20 on every roll button. On these buttons that pushed the ? and the hammer past the edge of the row, on inventory, skill and gear rows. The d20 is gone, and the buttons are a little wider and sit inside the row.
    • Nothing moves.

    2.11.0

    2026-09-28
    • Look things up in the Compendium. A ? now sits at the end of every gear item, skill row, attack and inventory row. It posts that thing's card to chat: what it does, the table's ruling, what it's made of, and a link to the full page on the Compendium.
    • Break items down. The hammer on an inventory row breaks one of that item down. The materials go into your Materials on the Inventory tab, and the item leaves your inventory. You get back half, rounded down, or all of it at Salvage rank 10. Tiny things give nothing on their own, but the reply offers to break the whole stack down together.
    • Fill in what everything is made of. A new button above the inventory matches every row to the Compendium and fills in its Made of box.
    • All of these need the Compendium mod script. The GM installs it once per game from the Compendium's Roll20 script page. Until then the buttons do nothing.
    • Nothing moves. No number on any crawler changes.

    2.10.0

    2026-09-28
    • Inventory has its own tab. The Gear tab is now worn gear only: Find, the gear rows and Worn & held. The Hotlist, Gold and your inventory moved to a new Inventory tab, which has its own Find box. Each Find box filters only its own tab.
    • Gear can boost spells, and skills the book never printed. A gear item's gives row now lists every spell as well as every skill. At the bottom of that list, Other... opens a box where you type a name, such as a homebrew skill or a class skill. The name has to match a row on your Skills tab, so add the skill there first. If it doesn't match, the line under the gear list says so.
    • Attacks offer the same list. An attack's Skill dropdown now also lists every other skill and spell in the book, plus Other.... Those entries don't fill in dice the way a weapon or damage spell does, but the attack's rank follows the skill row, so it stays current when you level up.
    • Crafting materials. The Inventory tab has a Materials strip: Wood, Metal, Electronics, Glass, Chemical, Alchemical and Misc Junk, with a total. Below it, a line says what breaking an item down gives back at your Salvage rank. Each inventory row gains a Made of box and two buttons: ? looks the item up in the Compendium, and the hammer breaks it down. Both buttons need the Compendium mod script (see 2.11.0).
    • Nothing moves. No number on any existing crawler changes. Your items are where they were, just on a different tab.

    2.9.2

    2026-09-27
    • Creature attacks post again. Pressing the sword on a creature's attack row announces its Evade TN and rolls its damage, as it did before 2.9.1. In 2.9.1 the button did nothing at all.
    • Nothing moves. Creatures you already have need nothing done.

    2.9.1

    2026-09-21
    • AI Favor has a strip of its own under Evade & defence: the count in large type, a filled + Gain button and a red Spend button, with the re-roll line beside them. It used to be one more small box in the grid.
    • The d20 is back on every roll button. Roll20 draws it on its own roll buttons, and these stopped being that kind of button in 2.9.0. They look the way they did before now.
    • Nothing moves. Your AI Favor count is the same field in a new place.

    2.9.0

    2026-09-21
    • Spending AI Favor on a re-roll rolls it for you. Press Spend, pick the re-roll, and the sheet takes one favor and rolls your last roll again. The new card is marked bought with AI Favor so the table can tell it from the roll it replaces.
    • The prompt says which roll that is, e.g. Re-roll Stealth check, and so does the line beside the Spend button. It is always the last roll made on your sheet, so declare the spend before the GM says how the roll went.
    • The re-roll has the same numbers the first roll had. If Advantage came off or an injury healed in between, the re-roll still uses what the first roll used. Only the dice are new.
    • No more Mod script. Gain and Spend used to need dcc-favor.js installed in the game. They don't now, and the script is gone from the download. A game that has it can remove it, or leave it; nothing calls it.
    • Every roll button works the same as before and rolls the same thing. They save what they rolled first, which is what makes the re-roll possible.
    • Characters you already have need nothing done. Until someone rolls, the Spend prompt only offers an extra action.

    2.8.0

    2026-09-21
    • The Gear tab has a Find box at the top. Type part of a name and press Enter or click away, and Gear and Inventory show only the rows that match. Every word has to match, in any order, and case doesn't matter.
    • Gear matches on more than its name. An item's note, its slot and what its gives rows give count too, so dodge finds anything that helps you dodge and head finds your helmet. Those gives rows stay under their item.
    • A line under the box says how many rows are showing. Clear the box and everything comes back.
    • Searching only hides rows. A worn item that doesn't match still counts toward your scores, DR and skills, and nothing about a search is exported.
    • Characters you already have need nothing done. The box starts empty.

    2.7.1

    2026-09-15
    • Fixed: clearing an injury left its red line on the sheet. Set Minor or Major back to None and the line saying what you were carrying stayed put, so the sheet claimed a penalty it was no longer applying. The rolls were always right; only the line was wrong.
    • Fixed the same thing in the gear warning. A slot over its limit said so, and went on saying so after the slot was fixed.

    2.7.0

    2026-09-15
    • Injuries have somewhere to live, under the health track. Two controls, Minor and Major, each set to None, Injured or Long-term.
    • The penalty comes off every check you roll. Minor is -2, Major is -5, and holding one of each is -7. It applies to stat checks, skill checks, attacks and Evade, and the chat card's banner says Injured -7 so nobody has to remember mid-fight. Damage is not a check and is never reduced.
    • Taking the same injury twice does not double it. It becomes the long-term version, which is the same penalty and a longer wait. The controls will not let you count one twice, and the line underneath says which rest clears what you have: short rest, long rest, or a full day.
    • Everything else still goes in Debuffs, in your own words. This is only for the two injuries, because they are the two the sheet can do the arithmetic for.
    • Characters you already have arrive with no injuries, which is the right answer for anyone nobody has hurt yet.

    2.6.0

    2026-09-15
    • An attack row can name a skill that modifies it. A new and also picker on the second line of each attack row, next to the damage boxes.
    • Aiming is the first one, and picking it does all three things at once. It adds your Aiming rank to the attack roll, rolls the attack at Disadvantage because that is what the skill costs, and adds the d4s your rank is worth to the damage: one at Rank 1, and another at Rank 5, Rank 10 and Rank 15.
    • Advantage cancels against it. If the control at the top of the sheet says Advantage and the row is Aiming, the two cancel and you roll normally, which is what the book says. The chat card says so rather than leaving you to work it out.
    • Take out a d4 you typed in yourself. If you were already keeping an aiming row with the d4 written into the dice box, the modifier now adds its own and the row will roll two. Clear the typed one. npm run roll20 names every row this applies to.
    • Aiming is for Ranged attacks only and the sheet does not enforce it. It knows what an attack skill is but not whether it is fired or swung, and refusing a choice on a guess is worse than trusting you.
    • Only Aiming is on the list. Double Tap is declared for a whole round rather than for one attack, so it does not fit a picker on one row.

    2.5.0

    2026-09-15
    • Dodge pays out on its own. The Evade block has a new Dodge box that follows the rank of your Dodge skill row and adds the Evade Buff that rank is worth: +1 from Rank 1, +2 from Rank 5, +4 from Rank 10 and +6 from Rank 15. Worn gear that raises the skill counts, so a Skill patch that buys you Rank 5 buys the bigger buff while it is on.
    • Nothing to switch on. Dodge is a Passive skill and its buff always applies, so there is no button and no toggle. Delete the skill row and the buff goes with it.
    • Two parts of Dodge are still yours to play. Rank 10 rolls Evade with Advantage against Spells and Ranged Attacks, which depends on what is coming at you, so use the roll control at the top of the sheet when it applies. The extra Step at Rank 5 and the free Evade Action at Rank 15 are action economy and the sheet does not track them.
    • Characters you already have: anyone with a Dodge row gains the buff the first time the sheet is opened. If you had typed that bonus into Buffs by hand it is not counted twice, but the Buffs box is now the place to check if your Evade looks a point high.
    • Fixed: the Evade migration could double-count a bonus that came from worn gear, copying it into Buffs and then adding it again. No item on file gives Evade, so nobody has met this one.

    2.4.0

    2026-09-15
    • Gold holds ten digits. The box on the Gear tab is wider and the number is larger, so a purse in the billions fits and stays readable. The digits no longer shift sideways as you type. The ceiling is 9,999,999,999.
    • Versions start here. The sheet prints its version at the bottom, and this file says what each one changed.

    2.3.0

    2026-09-13
    • The attributes are a table. One row per stat, with Total, Mod, Start, Level, Gear and Buff as columns. The stat's name is the roll button.
    • Base split into Start and Level. Start is the score you built the crawler with. Level is what you have spent levelling up since. A line under the table tallies what you have spent against the three points a level gives you, and says how many are still to spend. It counts. It never refuses.
    • Characters you already have: the first time the sheet opens, the whole of the old base moves into Start. Split it yourself if you want the history.
    • Fixed: the attribute rows not lining up with their headings. The roll button sat under the wrong column and Buff wrapped onto a line of its own.
    • Creatures show Total and Mod only, since the rest is a crawler's bookkeeping.

    2.2.0

    2026-09-13
    • Gear is rows. An item is a row on the Gear tab: tick it while it is worn or held, name it, pick the slot, and put anything that is not a number in also does.
    • One row per number an item gives. Add a row under the item for each stat, DR, Evade or skill it changes, and by how much. Signed, so a cursed ring is -2. The sheet adds them into the Core tab and into each skill's Gear column.
    • Untick worn and every number it gives leaves the Core tab. The row stays, because the helmet is still in the bag.
    • Armor is no longer typed. It is the DR of what you are actually wearing, so putting a shield down takes its point back on its own.
    • Every worn item's note is listed under Worn effects on the Core tab, and a banner names any bonus still typed by hand, so nothing gets counted twice.
    • Slots are counted but never refused. A four-armed crawler can ignore the line that appears.

    2.1.0

    2026-09-13
    • AI Favor has buttons. Gain and Spend, on the Core tab. Spending asks what it buys and posts the result to chat.
    • Buying a re-roll announces that you bought one. You then press your own roll button again, which is more reliable than the sheet trying to repeat the roll for you.
    • These need the dcc-favor.js mod script installed in the game. Without it the buttons print their text and the count never moves, and a note beside them says as much.

    2.0.0

    2026-09-13
    • A crawler's stat score is base plus buff. You stop typing the total, which means a level-up is one number instead of two, and the enhanced score is the one Evade, the health track, every skill and every attack read from.
    • An attack names its weapon skill, and its rank follows that skill row. No more rolling the rank you wrote down when you picked the weapon up.
    • To hit and Damage are a stat modifier plus a Misc box, each with its own stat picker, so a bow can be Dex to hit and Str to damage.
    • Evade rolls from its caption, which it should have done from the start.
    • A creature's attack announces the Evade target the crawler has to beat and rolls damage, rather than rolling to hit against a number it cannot see.
    • The Attacks header says which column is your name for the weapon and which is the book's skill.
    • Characters you already have: nobody's numbers moved. A gap between a typed score and its base became the buff, and an attack's old totals moved into Misc, where you can see them.
    • Fixed: the Buff box being laid out past the right edge of its card, half under the scrollbar, with its caption clipped.

    1.3.0

    2026-09-11
    • Stat modifiers, Evade and DR are worked out for you and read-only, drawn with a dashed border so it is clear they are not yours to type. Gear that raises a stat now raises everything downstream of it.
    • Health bands fill themselves from Constitution. Every band holds slots equal to your Constitution modifier and updates when it changes. Raising Constitution used to mean retyping ten boxes, and crawlers were walking around a modifier short in every band at once.
    • Attack rows gained a Stat dropdown feeding To hit. Setting it to - leaves To hit typeable, which is what a spell wants.

    1.2.0

    2026-09-10
    • Creature mode. A Crawler / Creature switch at the top of the sheet swaps the whole layout: rank, type, size, the printed defences a bestiary entry has, a health track of one to ten bands, and a two-tab strip instead of six.

    1.1.0

    2026-09-08
    • The Import tab became the Archive tab, and exports as well as imports. Press Export, copy the box, and the crawler goes back to the archive in the same format the import reads.
    • Fixed: big imports quietly losing rows, and rows coming back in a different order than they went in. A sheet with forty-odd skills was the one that showed it.

    1.0.0

    2026-09-06
    • The first sheet. Six tabs, a roll button on every stat, a ten-band health track, repeating attacks, skills, gear and inventory, the story and crew pages, and an import that fills a crawler in from the archive.
    • Chat output has its own card rather than Roll20's default one.
    • The Archive tab takes a crawler in as pasted JSON, with no scripts needed.

    The legal bit

    This sheet is made by and supported by CritsNThings. It is an unofficial fan work.

    It is not endorsed by, affiliated with, or supported by Renegade Game Studios or Matt Dinniman. Nobody involved makes any money from it, and there is nothing to buy here. Bugs and questions come to us, not to them.

    It is offered as is, with no promise that it will be maintained or that it will go on working. Roll20 changes, the game changes, and this may stop keeping up with either. Use it because it is useful today, not because it is guaranteed tomorrow.

    Dungeon Crawler Carl and the Dungeon Crawler Carl RPG belong to their respective owners. You need the rulebook to play; this is only somewhere to write the numbers down.