Skip to content

feat(CombatEncounterDirector): Improves UI consistency and language settings - #2369

Open
steverobertsuk wants to merge 14 commits into
Roll20:masterfrom
steverobertsuk:sr/ced-v1-0-2
Open

steverobertsuk wants to merge 14 commits into
Roll20:masterfrom
steverobertsuk:sr/ced-v1-0-2

Conversation

@steverobertsuk

@steverobertsuk steverobertsuk commented Nov 2, 2026 •

Copy link
Copy Markdown
Contributor

This release enhances the Combat Encounter Director with a more unified user interface, improved language configuration, and introduces internal tooling improvements for localisation.

Added

  • The Config section of the Command Deck now has a Language button, which opens a drop-down of all 24 languages, and a table of the languages available (flag and code, English name, native name), as in the other MidNite Shadow mods. Its description already said the language could be chosen there.
  • README: a Languages section, and the language setting in the configuration table.
  • A Preset Reference at the end of the README and of the Command Deck (All and Scaling tabs): tables of every party and boss preset, with what each changes and a worked example (a 40 HP, AC 15 monster). The deck builds its tables from the preset data, so they always match.

Removed

  • Damage scaling. The damage percentage never changed anything on the token or in rolls; it was only a number in the status report, and users took it to be calculated from the monster's damage. Presets and boss tiers now scale HP and AC only. !ced scale damage, the Damage % buttons on the Command Deck and the Dmg column of the Status handout are gone; !ced scale damage now explains that it was removed. Damage values saved by earlier versions are cleared from tokens and saved encounters when the Mod starts.

Changed

  • The Command Deck and Status handouts now look like CED's chat replies: the same card, title bar, buttons and label/value rows. The Status handout's tables no longer pick up Roll20's handout table borders and white background, and minions show their hit points as "= 1" instead of "-999%".

Fixed

  • Auto-number Selected (!ced reinforce enumerate) now understands names Roll20's own Advanced Transform > Enumerate Tokens has numbered, such as "Goblin 3 (1)". Before, it kept "(1)" as part of the name and gave "Goblin 3 (1) 1".
  • Changing the language with !ced config language now rewrites the Command Deck in that language straight away. Before, only chat replies changed until the deck was next rebuilt.

Signed-off-by: Steve Roberts steve@shadowcomputers.co.uk

…age changes

Setting the language with !ced config language only changed chat replies;
the Command Deck kept its old language until it was next rebuilt. It is now
rewritten straight away, on the view the GM was using.

Signed-off-by: Steve Roberts <steve@shadowcomputers.co.uk>
The Config section's description already said the interface language could
be chosen there, but it had no control for it. It now has a Language button
that opens a drop-down of all 24 languages, and lists them with the current
one in bold. The README gains a Languages section and the language setting
in its configuration table.

Signed-off-by: Steve Roberts <steve@shadowcomputers.co.uk>
Builds the root script and its 1.0.2 snapshot, bumps the version in
package.json and script.json, and adds the 1.0.2 changelog entry.

Signed-off-by: Steve Roberts <steve@shadowcomputers.co.uk>
The Command Deck and Status handouts had their own look, and the Status
handout's tables picked up Roll20's handout table borders and white
background, leaving grey text on white. Both handouts are now built from the
chat card, title bar and buttons in chat.js: the deck is one card with each
section headed like a card title, and the report is a Summary card and a
Tracked tokens card whose tables reset Roll20's styling. Minions' hit points
show as "= 1" rather than the internal -999 flag.

Stays in 1.0.2, so the root script and its 1.0.2 snapshot are rebuilt.

Signed-off-by: Steve Roberts <steve@shadowcomputers.co.uk>
The Status report's table styles, which undo Roll20's handout table borders
and white background, move into chat.js beside the card builders, with a
buildTable() helper, so the Command Deck can use the same tables.

Signed-off-by: Steve Roberts <steve@shadowcomputers.co.uk>
The Config section of the Command Deck listed the languages as a line of
names. It now has the same table as the other MidNite Shadow mods: flag and
code, English name and native name, with the language in use in bold. The
three column headings are new locale keys; the machine translations were
corrected where they meant a person's name (cs, pl, ru, ko and others) or
read oddly (de, ja, he, pt-BR).

Stays in 1.0.2, so the root script and its 1.0.2 snapshot are rebuilt.

Signed-off-by: Steve Roberts <steve@shadowcomputers.co.uk>
Roll20's Advanced Transform > Enumerate Tokens numbers duplicate names as
"Goblin 3 (1)". Auto-number Selected took its base name from the first
selected token and only stripped a trailing number, so it kept "(1)" and
named the tokens "Goblin 3 (1) 1" and so on. It now strips Roll20's "(n)"
as well, giving "Goblin 1" to "Goblin 7".

Stays in 1.0.2, so the root script and its 1.0.2 snapshot are rebuilt.

Signed-off-by: Steve Roberts <steve@shadowcomputers.co.uk>
…nd Command Deck

GMs had to work out for themselves what a preset does to a monster: the
README listed the percentages, and the Command Deck only had the buttons.
Both now end with a Preset Reference: a table of the party presets (with the
party sizes `!ced scale party` maps to each) and one of the boss presets,
giving what each changes and a worked example for a 40 HP, AC 15 monster
that deals 20 damage.

The deck builds its tables from PARTY_PRESETS and BOSS_PRESETS with the same
rounding as scaling, so they cannot drift from the code. They are on the
All and Scaling tabs; the Admin tab is unchanged. The eight new strings are
translated into all 23 other languages and proofread (party as a group of
adventurers, boss as a monster, damage dice rather than bread rolls).

Stays in 1.0.2, so the root script and its 1.0.2 snapshot are rebuilt.

Signed-off-by: Steve Roberts <steve@shadowcomputers.co.uk>
The damage percentage on presets, boss tiers and `!ced scale damage` never
changed anything in the game: CED cannot reach damage, which comes from
dice and character sheets, so the value was only stored and shown in the
status report. A user asked whether the numbers were calculated from the
monster's average damage, which shows it read as a real feature. Presets
and boss tiers now scale HP and AC only.

Gone: the damage values in PARTY_PRESETS and BOSS_PRESETS, the Damage rows
on the chat cards, the Damage % buttons on the Command Deck, the Dmg column
of the Status handout and the damage figures in the Preset Reference.
`!ced scale damage` now whispers that damage scaling was removed instead
of reporting an unknown action. The damageModifier that earlier versions
stored on token records and saved encounters is removed once each time the
Mod starts, not on a version change, so games already running an earlier
1.0.2 build are cleaned up too.

Five strings are removed from every locale. The new warning and the
reworded Preset Reference description are translated into the 23 other
languages and the worst mistakes corrected (damage rolls as bread rolls,
scrolls or cylinders, the token as a coin or a witness, a Simplified
Chinese sentence in zh-TW).

Tested live in Mod Test Lab: data seeded with 1.0.1 was cleaned at
start-up, and no card or handout mentions damage.

Stays in 1.0.2, so the root script and its 1.0.2 snapshot are rebuilt.

Signed-off-by: Steve Roberts <steve@shadowcomputers.co.uk>
The README's preset tables, scaling commands and Preset Reference no longer
list damage, and How Scaling Works now says why CED leaves damage to the
GM: it comes from dice rolls and character sheets, not the token. The
developer notes, file map and manual test list follow the code: no
damageModifier in the state example, no parseDamagePercent, and
`!ced scale damage` is expected to whisper that it was removed.

Signed-off-by: Steve Roberts <steve@shadowcomputers.co.uk>
…n on its handouts in the Journal

The Command Deck and Status handouts now use the plain Combat Encounter Director icon from Roll20's file store as their journal icon (the handout avatar). The icon is set when a handout is created and added to handouts from earlier versions, so existing games get it too.

Roll20 stores the avatar as max.webp with a number, so a handout counts as having the icon when its avatar contains the image's path. Only the webp files exist (thumb.png is a 404), so the URL uses thumb.webp. A new ensureHandoutIcon helper in utils.js covers each place they are written, including a Command Deck renamed from its old name.

Signed-off-by: Steve Roberts <steve@shadowcomputers.co.uk>
…l icon

The root script and the 1.0.2 snapshot are rebuilt without a version bump and remain identical.

Signed-off-by: Steve Roberts <steve@shadowcomputers.co.uk>
…r fills the handout

Roll20 always stores a handout's journal icon as the full-size file, whatever size the Mod asks for, and shows that file at its natural size at the top of an open handout. The CombatEncounterDirector icon was a 1024 pixel upload, so it filled the handout above the text.

The icon now points at a 100 pixel copy of the same artwork. Handouts from earlier builds are matched on the image path, so they change to the small icon the next time the Mod starts.

Signed-off-by: Steve Roberts <steve@shadowcomputers.co.uk>
…journal icon

The built script and its 1.0.2 copy carry the new icon path. The version number is unchanged.

Signed-off-by: Steve Roberts <steve@shadowcomputers.co.uk>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants