Skip to content

Releases: wetherc/cartographer

1.27.1

Choose a tag to compare

@wetherc wetherc released this 14 Oct 17:32

This release makes loading a campaign faster. The decoder builds each map tile once, checks image references once per palette entry instead of once per tile, and skips the broken-link walk for maps whose link list is complete. Cell variants are picked with whole-number math. A warm load of the benchmark save (the example campaign plus 50 large regions and 300 creatures, about 50,000 tiles) takes about 14 ms, against 22 ms in 1.27.0. The deserialize budget of the commit benchmark is back at 25 ms.

The save format and the loaded campaign are the same as in 1.27.0. Load time still grows with the number of tiles, because each cell gets its own frozen tile record. Undo and Redo reload the page, so each step pays the full load.

1.27.0

Choose a tag to compare

@wetherc wetherc released this 14 Oct 16:44

GM tools

  • Library mode has a Tables tab of weighted random tables, with three built-in examples.
  • The dice tray rolls a random table and logs the result to the travelogue. The Hidden roll box keeps the result from the players.
  • A campaign can have month and season names, with a weather roll at Dawn.
  • A campaign has a faction list. The creature form has a faction select, and the NPCs panel filters by faction.
  • A print stylesheet prints the open character sheet or sidebar tab without the app frame.

Characters and items

  • Library equipment has SRD prices, and the Inventory tab has a Buy row that pays from the character's coins.
  • An item has no separate notes field. Its notes move into the description, and the save version is 9.
  • Custom resource pools can regain on a short rest, and the feat form has requirement controls.
  • An assigned level logs its HP gain, and every XP award uses the same wording.
  • The Level up button opens the full sheet on its Character tab.
  • Typed ability scores stop at 30.

5e rules

  • Ammunition, Heavy, and Loading apply in combat.
  • Slow, Confusion, and Bestow Curse resolve as save spells with a chip.
  • The catalog has 131 spells. docs/spells-missing.md lists every SRD spell that is not built in.
  • The expertise picks have clearer wording, and the Half-Elf skill picks leave out skills the character already has.

Combat

  • The combat screen is wider, and each combatant card keeps its reactions in a Reaction disclosure.
  • The fight outcome banner sits under the turn ribbon and names dying party members.
  • The dice tray words attack rolls as hit or miss.
  • The Encounter dialog groups creatures by name, and combat setup shows the initiative default as a placeholder.

Map and Build mode

  • Town place names center on their buildings and hide when they would cover a neighbour. Build mode has a Place labels toggle.
  • The Build link controls use plain map words: the Link tool, Links to, and New sub-map here.
  • Generate and Export PNG share one row above the palette.
  • Pick on map opens the chosen map first and names it in the hint.
  • The Play mini-map sits in the bottom-right corner, as in Build mode.

Screens and layout

  • The header fits on one row from 1280 pixels wide in every mode.
  • Build mode labels the save history buttons Previous save and Next save. Library mode labels the transfer buttons Export campaign and Import campaign.
  • The party roster actions sit in a footer under the roster.
  • The quest, objective, and handout toggles have fixed accessible names.
  • The page shows a notice when its modules fail to load.
  • The Welcome card opens on the Play map from Library mode and closes on Escape.

Code and docs

  • Every source file is under 500 lines.
  • The Entities architecture guide is six topic guides, and each large guide has a contents list.
  • The GM guide and GM reference cover random tables, factions, the calendar, and buying items.

1.26.0

Choose a tag to compare

@wetherc wetherc released this 10 Oct 15:30

Combat

  • The combat screen is a fixed frame with compact cards, and a phone gets a turn bar.
  • Previous turn, initiative edits, Delay, a condition bar, and a fight bar above the map.
  • A creature can have more than one weapon, and save actions such as a breath weapon. A save action recharges on a roll at the start of the creature's turn.
  • The end-of-fight dialog offers the gear of defeated foes and a coin split.
  • An XP award goes to living characters only.

5e rules

  • Rage, exhaustion on the 2014 ladder (death at level 6), Lucky, race save traits, Evasion, and War Caster.
  • Brutal Critical, Savage Attacks, Indomitable, Reliable Talent, Primal Champion, and Durable.
  • The Rogue Expertise pick offers thieves' tools, and a level 1 rogue gets them.
  • An off-hand attack needs a light melee weapon in the Attack action. A swing at disadvantage gets no Sneak Attack dice.
  • Concentration ends when its last chip is used, when its time runs out, or when the GM deletes the caster.
  • Race picks at creation: Half-Elf abilities and skills, a High Elf wizard cantrip, a Dwarf tool, and Dragonborn ancestry.
  • A warning when a Bard, Sorcerer, Warlock, or Ranger knows too many spells.

Characters

  • Each character has a five-coin purse, with a Coins row in the inventory.
  • The GM can edit a character's name, ability scores, and proficiencies after creation.
  • Max HP comes from per-level trait grants. A long rest gives a character at 0 HP nothing.

Map and exploration

  • Darkvision and carried light widen the sight radius at night and in dark rooms.
  • A walk discovers points of interest along its path.
  • Build mode marks locked maps, and Map settings suggests key item names.
  • Region entry and exit landings stay off deep water. A map is at most 64 tiles wide or high.

GM tools

  • A campaign search box in the header jumps to the matching card or map tile.
  • The GM dice tray has a Hidden roll box.
  • The travelogue has a note box, kind filters, and Copy as text.
  • The Time panel locks during a fight and shows the minutes inside a watch.
  • Build mode has Redo stroke.

Screens and layout

  • Library mode is a fixed screen, and its entry editors open in a dialog over the list.
  • The Build mini-map floats in the bottom-right corner. On narrow screens the palette sits under the map.

Stability and sync

  • Fixes to cross-tab sync, to recovery after a failed boot, and to writes on a full localStorage origin.
  • Load-time repair of repeated ids, __proto__ keys, and item names that are not strings.

Code and docs

  • Large modules in storage, library, and app wiring are split into smaller files.
  • The lint fails on an import from a pure module into ui/ or app/, and a test fails on any import cycle.
  • The GM reference has one page per mode. New how-to guides cover a class mechanic and other common extensions.

1.25.2

Choose a tag to compare

@wetherc wetherc released this 10 Oct 15:33

This release draws the map terrain layer on a CPU-backed canvas, because its context asks for willReadFrequently. Firefox on Android draws a default canvas on the GPU. There, a strip of about 250 tile draws costs 48 ms on a Pixel against 2 ms on the CPU canvas, and each strip repaint stalls a pan for 100 to 150 ms. On a Pixel 10a in Firefox 156, a pan of a generated world has no frame over 34 ms after the tile rasters warm up.

About 9 percent of frames still miss one vsync. The copy of the CPU layer onto the map canvas costs about 2 ms on every pan frame, and the first two seconds after a new world still drop frames while the tile rasters fill.

1.25.1

Choose a tag to compare

@wetherc wetherc released this 10 Oct 15:33

Map panning costs less script per frame, which matters most in Firefox for Android. The point-of-interest glow draws from a cached sprite, so Firefox no longer blurs a canvas shadow on every frame, and the live map caches its terrain in an offscreen layer, so a pan copies pixels and draws only the strip that comes into view. In desktop Firefox a pan frame drops from about 4 ms of render script to about 2.3 ms. The cost of compositing the canvas on a phone is not measured.

1.25.0

Choose a tag to compare

@wetherc wetherc released this 10 Oct 15:33

Play mode is a fixed screen with a left dock for the party and the dice tray, a Sheet tab, a full-page character sheet with equipment slots, item tiles, spell cards and feature cards, and a phone layout with a bottom view bar and a header menu. The GM sees the map under a see-through fog, the Play map fits the revealed tiles, the mini-map floats over the map, Nearby encounters shows one line per group of foes, and confirm dialogs name their action and object. In combat, XP is asked for before the fight ends, the target and HP amount reset on each turn, spent action buttons are marked, the dice tray sits under the log, and a Map tab shows the fight area.

Build mode paints only from the Paint tab and names the active tool on the map, the World tree is one tab stop with arrow keys, Generate a world builds a whole world and starts the party beside a town, and empty maps show a card with Paint tiles and Generate map. Library mode has class, level, school and CR filters and visible field labels, and the creature form is grouped into sections with a Pick on map button and placement warnings. The documentation screenshots show the new layouts. Several files are over the 500-line guideline and are not split in this release.

1.24.0

Choose a tag to compare

@wetherc wetherc released this 10 Oct 15:33

In combat, a dying character keeps its turn and rolls death saves, the combat HP box acts on the chosen target, attack rolls no longer write an AC into the dice tray DC field, log lines name numbered foes, and a fled foe no longer turns into a neutral NPC. Life Domain heals add Disciple of Life, clerics get Turn Undead and Preserve Life, healing items heal from dice stored on the item, the bonus action spell rule applies on the caster's own turn, nearby foes can join a fight, and creatures can have legendary actions and legendary resistance. On the map, a lit room reveals in full, castle fog marks the edge of explored floor, the view pans only as far as it needs to, a walk announces the watches it takes and asks before it runs into Night, a long rest lasts eight hours, and a map can be locked behind a key item. Quests can unlock other quests and pay gold and XP, an NPC can travel with the party, the GM gets a cue on a tile with a hidden handout, and a Player tab lists every revealed handout.

The example campaign has SRD-style stat blocks, larger fights, notes and handouts for every step the GM had to improvise, a road from Briarwick Vale to Kelmoor, a locked barrow far from Thornhold that needs the warding key, a personal quest for Mirelle, and quest rewards that bring the party close to level 5 before the barrow. Legendary actions cover attacks only, and a save forced by a weapon hit does not offer legendary resistance.

1.23.1

Choose a tag to compare

@wetherc wetherc released this 10 Oct 15:33

This release loads the tile images of the Build palette only when Build mode shows the palette, and each closed section loads its own images when it opens. A blank campaign now starts with about 3,700 DOM nodes instead of about 41,000, and the browser bench boot takes about 230 ms instead of 470 ms. The bench fight scenario now waits for the Next turn button and advances all twenty turns.

The first switch to Build mode fetches the Terrain images at that moment, so the swatches can appear a moment after the palette does on a slow connection.

1.23.0

Choose a tag to compare

@wetherc wetherc released this 10 Oct 15:33

Combat setup has a Stealth contest for both sides, a Surprised box, and a Parley button, and Start combat rolls any initiative that is not rolled yet. The combat screen has standard action buttons, Cunning Action, Second Wind, Action Surge, and pressable budget pips. Creatures can have Multiattack, Pack Tactics, on-hit weapon saves, Surprise Attack dice, and a Redirect Attack reaction. Characters get the Fighting Style pick, class feature pools that refill by rest kind, custom resource pools with Sorcerous Restoration, and Set expertise. The GM can award fight XP while foes still stand, and Award Party XP can split a total.

The party walks along a real path that clears fog and spends time, and the clock has minutes inside a watch with a travel time table. A short rest takes one hour, and fog sight depends on the map and the hour. Each world region map follows the terrain of its block on the world map, an edge exit arrow shows only when the party is near that edge, and the foes on and around the party's tile form one encounter. Taverns, inns, shops, and temples have their own floor plans, and burned and ruined markers mark wrecked buildings. Log entries show the in-game day, watch, and round, Undo and Redo name what they changed, and the header has a Welcome button.

1.22.1

Choose a tag to compare

@wetherc wetherc released this 10 Oct 15:33

This release offers the defender's damage reaction after a spell attack hit or a save spell's damage, one target at a time, with the Shield question first. Thirsting Blade grants its second swing only with the pact weapon, and leaving the Pact of the Tome removes the Book of Shadows cantrips and the Book of Ancient Secrets rituals. The Library spell form gains controls for an extra chip that an attack spell's hit puts on chosen creature types, such as the Chill Touch chip on undead.

The combat screen still counts the banked Thirsting Blade swing after a pact weapon attack, and a saved warlock without the Tome keeps a stale book until the next pact boon or invocation change. A multi-ray spell asks for the damage reaction once per target, not once per ray. A save spell cannot put a typed extra chip on its target.