From 28ee36fce8f4fa6bdbf0369b844d63cc8e037e65 Mon Sep 17 00:00:00 2001 From: Kenan Millet Date: Fri, 12 Jun 2026 11:59:06 -0400 Subject: [PATCH 1/2] Sequence: replace em/en-dashes with ASCII in script.json for proper rendering in one-click menu --- Sequence/script.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sequence/script.json b/Sequence/script.json index a703b622a..d6102cc95 100644 --- a/Sequence/script.json +++ b/Sequence/script.json @@ -1,4 +1,4 @@ -{ +{ "name": "Sequence", "script": "Sequence.js", "version": "0.2.0", From fc9f365bf6ab3e3d3c051d69a4172c5b7a749369 Mon Sep 17 00:00:00 2001 From: Kenan Millet Date: Fri, 12 Jun 2026 12:05:34 -0400 Subject: [PATCH 2/2] Sequence: replace \u2014/\u2013 escape sequences with ASCII dashes in script.json --- Sequence/script.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Sequence/script.json b/Sequence/script.json index d6102cc95..84af1939a 100644 --- a/Sequence/script.json +++ b/Sequence/script.json @@ -1,9 +1,9 @@ -{ +{ "name": "Sequence", "script": "Sequence.js", "version": "0.2.0", "previousversions": [], - "description": "# Sequence\n\nA general-purpose keyframe animation engine for Roll20 tokens. Record token movements and attribute changes in real time, then play them back on any token with smooth interpolation, easing, looping, speed control, and expression-driven values.\n\n## Features\n\n- **Record** \u2014 Move a token and change its attributes while Sequence captures each change as a timestamped keyframe.\n- **Playback** \u2014 Replay recordings on any token with smooth lerp interpolation between keyframes.\n- **Easing** \u2014 Per-attribute easing curves: `linear`, `sine`, `quad`, `cubic`, `expo`, `circle`, `power(n)`, `bezier(x1,y1,x2,y2)` (CSS cubic-bezier). Ease-in, ease-out, and ease-in-out all supported.\n- **Expressions** \u2014 Keyframe values can be expressions: `+rand(-140,140)`, `=clamp(prev+50,orig-200,orig+200)`, `=color.hsl(rand(0,360),100,50)`.\n- **Looping** \u2014 Loop indefinitely or N times, with `reset` (snap back) or `accumulate` (each cycle builds on the last) modes.\n- **Portable** \u2014 Recordings stored in `[Sequence] name` handouts. Copy a handout to another campaign to transfer an animation.\n- **Extensible** \u2014 External scripts can register custom attributes, expression functions, constants, and easing curves.\n\n## Quick Start\n\n1. Select a token and type `!sequence record my-animation`\n2. Move the token and change its attributes\n3. Type `!sequence stop` \u2014 the recording saves automatically\n4. Select any token and type `!sequence play my-animation`\n\n## Commands\n\n`!sequence record [name] [--attrs a,b,...]` \u2014 Start recording selected token(s)\n\n`!sequence stop` \u2014 Stop and save recording\n\n`!sequence pause` / `!sequence resume` \u2014 Pause/resume recording\n\n`!sequence play [--loop] [--loops n] [--speed x] [--reverse] [--offset ms] [--only a,b] [--exclude a,b]` \u2014 Play a recording\n\n`!sequence preview ` \u2014 Play and auto-revert when finished\n\n`!sequence stop-play` / `!sequence pause-play` / `!sequence resume-play` \u2014 Control playback\n\n`!sequence list` \u2014 List all recordings\n\n`!sequence edit ` \u2014 Open the recording handout\n\n`!sequence delete ` \u2014 Delete a recording\n\n`!sequence add-attribute ` \u2014 Add an attribute column\n\n`!sequence remove-attribute ` \u2014 Remove an attribute column\n\n`!sequence add-row