Skip to content

v0.7.0

2026-02-28

  • [x] Enable copy/paste via keyboard shortcuts (Cmd/Ctrl + C, Cmd/Ctrl + V) for tokens. When a token is copied, all of its properties and actions are copied as well. If the cursor is on the map, pasting creates a new token at the cursor location. If the cursor is not on the map, pasting creates a new token at the same location as the original token, with a slight offset to indicate that it's a different token. This works on multiple tokens when they are selected.
  • [x] Add an option for tokens to be moved or copied to another map in the same campaign (single or multiple)
  • [x] In the Token Context, when a background token is selected, add a button to "Auto-Detect Grid Size". This uses the existing in-browser LLM to analyze the token image and identify the grid lines, calculating the grid size accordingly.
  • [x] Add the group, sort, and filter features from the standard list component to the Import Character as Token modal.
  • [x] In the Edit Token modal, when selecting a background or border color, add an eyedropper options, allowing the user to pick a color by clicking on the token art itself.

Map

  • [x] Persist the user's map-specific camera settings, current impersonated token, and current map layer (background, tokens, drawings) so that when they return to that map, it restores to the same state they left it in.
  • [x] Hide the Impersonated Token context. The CurrentTokenBar at the bottom will serve as the main way to see and interact with the impersonated token. Add a close button to that component to stop impersonating that token.
  • [x] Add "view character sheet" to the token context and CurrentTokenBar. This will spawn a modal, showing the Character sheet in Play mode.
  • [x] When a drawing is selected, an X button is supposed to appear on the top right corner of the drawing to delete it. This button exists, but its location seems to be a function of the drawing's position on the map, so moving the drawing a few pixels left might make the button move tens of pixels left.

Character

Playtest Issues

Fixed

  • [x] Show initiative order to players; currently only the GM can see it.
  • [x] Initiative rolls are all undefined; even if the token doesn't have dexterity it should still roll a d20 and use that result for initiative.
  • [x] Character Import should bring in the stats (str, dex, con etc) as properties and add an action for each one. (e.g. a character with strength 20 should have a Strength action that rolls 1d20+5).
  • [x] Add facing indicators to tokens, and the ability to set facing. The indicator is a small triangle on the edge of the token, pointing in the direction the token is facing. It can be changed by shift-mousewheel while the token is selected, or by right-clicking the token and clicking "Set Facing" in the context menu, which causes the facing to point towards the cursor position (rounded off to the 8 cardinal and intercardinal directions).
  • [x] Add Dodge and Parry actions for System 8 characters. Dodge is a Dex roll and Parry is Str. Equipment will modify these later, but for now it's straight dex/str.
  • [x] Imported attack actions aren't rolling damage, only hit. System 8 attacks already specify light/medium/heavy damage, and the formulas for that damage should already exist. 5e attacks should have a specified damage formula in the attack itself.
  • [x] Add Bar button does nothing
  • [x] Token properties change to something random every time I select the token. Any change to the numeric input for a property should persist immmediately to the database.
  • [x] Character Import attacks have the wrong math. I suspect System 8 is erroneously using a 'proficiency bonus' that no longer exists. The current logic is that all attack rolls are a straight ability score check. So a Str-based weapon used by someone with a +8 to Strength (base 16, +10 from proficiency, total 26) would have a roll of 1d20+8. I'm seeing numbers 3-4 points higher than expected, which makes me think the proficiency bonus is being added in when it shouldn't be.
  • [x] Add pronouns to characters/tokens, use pronouns in initiative chat (i.e. "Alice has started her turn".). Include he/him, she/her, they/them, and two text fields for custom pronouns.
  • [x] The 2nd-level nav on the character detail page, which shows a list of characters, needs the standard grouping, filtering, and sorting features of the standard list component.
  • [x] When a drawing is selected, the drawing tools should pop up, allowing fill/stroke settings to be changed for that drawing.
  • [x] When a drawing is given a partially transparent fill color, it shows up on the map as opaque white. It should show up with the correct color and transparency. Also, the color picker should have a transparency slider.
  • [x] Drawings should be on a layer below Tokens, above Background. Only drawings exist on this layer; it can't be selected for token insertion, nor does it need to be the "current layer" in order to select drawings (which is currently true).
  • [x] Can't set condition from context menu, but it works fine from Token Context.
  • [x] Assign an Action button (die roll result in chat) does nothing. This should allow the user to choose an existing action and replace the presentation of that die roll with the chosen action. Effectively, it's the same as deleting the roll and running the action, except the die roll they clicked on will be used as the die roll in the action (if there is a matching die roll). This would be applied to the impersonated token, or if not impersonating, the currently selected token. If neither exists, disable the action with a tooltip explaining that they need to select or impersonate a token first.
  • [x] Create Macro (die roll result in chat) does nothing. This should take the expression that rolled the die (e.g. 1d20+7) and open the Create Action modal with return '1d20+7' (or equivalent) pre-filled in the code editor, allowing the user to quickly create a new action based on that die roll. This would be applied to the impersonated token, or if not impersonating, the currently selected token. If neither exists, disable the action with a tooltip explaining that they need to select or impersonate a token first.
  • [x] Initiative Tracker disappears on reload, no way to restore. The current state of initiative (enabled/disabled, everyone's initiative result, who's turn it is, etc) should be persisted, and when loading a map with initiative enabled, the initiative tracker should show up with the correct information.
  • [x] Add a "classless" class choice for System 8. This removes any restrictions that might exist regarding which feats/powers may be taken based on class (but other restrictions like Rank still exist).
  • [x] In player mode, on a map route, add options to the 2nd level nav on the top bar: Actions (one menu item for each; requires impersonated token), Dice (one menu item for 1d20, 1d12, etc, requires impersonated token).
  • [x] Avatars aren't displaying in chat. When rolling as a user (as opposed to rolling as an impersonated token), there is an avatar definable in an options window. It should show up in chat, when specified, instead of the generic avatar based on user name.
  • [x] Make chat text color customizable. For user chat, it would customized in Chat Settings. For tokens and characters, it should be specified at the token/character level, in their respective UIs.
  • [x] Map Status Label (which shows current world coords, grid coords, and zoom):
    • Move it down to flush with the viewport bottom
    • Reduce font size by about 80%, tighten padding
  • [x] Horizontal Impersonate UI at the bottom:
    • Make it about 50% taller (same bottom coordinate)
    • Make it wider, max width should fit between the two sidebars with a few rem of padding.
    • Consolidate all dice icons into one, with a flyout showing all the options, rather than having separate icons for d20, d12, etc.
    • For the actions section, use a flex layout to show as many actions in a row as possible. consolidate dice icons, use flex layout for actions, slightly taller, and stop colliding with the status indicator
    • Add a "add condition" button to the conditions area
    • Use the portrait art for the token, if available, in place of the token art.
    • Show bars under the art.
  • [x] Action categories: Actions can have an optionally assigned category (dropdown of existing categories, plus text input to define a new one). Actions can be optionally sorted by category in the Token Context. When importing a character, give actions appropriate categories (ability scores, attacks, powers, etc)
  • [x] The tooltip that appears when mousing over a condition name in the Token Context is behind the context itself (z-index issue).

Equipment

  • [x] Add a "Buff" entity.
    • Fields: name:String, description:String, duration:BuffDuration, effects:BuffEffect[].
    • BuffDuration: type:Enum('save ends', 'concentration', 'timed'); if timed, then also quantity:Number, unit:Enum('round', 'minute', 'hour', 'day', 'turn')
    • BuffEffect: targetProperty:String, modifierType:Enum('add', 'multiply', 'override'), value:Number
    • No UI treatment yet.
  • [x] Add buffs:Buff[] to Feats and Powers, as well as enabled:Boolean.
  • [x] Added an Equipment entity.
    • Characters can have 0, 1, or many pieces of Equipment
    • Equipment can be imported as a token onto the map
    • Fields: name, level, marketValue, weight, description, imageUrls, properties (key-value pairs defined by the system/campaign, similar to token properties), buffs:Buff[]
    • UI Treatment:
      • On the Character sheet, there is an Equipment section which lists the character's equipment, showing name, level, and any relevant properties (e.g. a sword might show its damage and range). Clicking on an equipment item opens a detail modal with the full description and properties, and any buffs it provides. There is also an "Add to Map" button which allows the user to place that piece of equipment onto the map as a token.
    • Populating the data: in system8, the equipment will be found in https://system8.purplecat.wiki/character/equipment.json. In 5e, the API should have an endpoint for equipment. Only some of the properties of Equipment and Buffs will be populated by the system data. For system8, TBD...