Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
1cd00e8
Sequence: flatten exports — remove API sub-object, export directly on…
KenanMillet Jun 26, 2026
b105ddf
Sequence: remove Object.assign/delete API shim (no longer needed)
KenanMillet Jun 26, 2026
c281906
Sequence: treat msg.playerid='API' as GM for API-originated commands
KenanMillet Jun 27, 2026
26e1038
Sequence v1.0.0: add example system — registerExample, fuzzy search, …
KenanMillet Jun 27, 2026
adee134
Sequence: remove multi-track architecture — flatten recording format …
KenanMillet Jun 28, 2026
3d1cccf
Sequence v1.0.0: examples, engine fixes, new features
KenanMillet Jun 28, 2026
2f55ff8
Sequence: update README, help handout, and TODO for v1.0.0 features
KenanMillet Jun 28, 2026
155e5c1
Sequence: bump script.json to v1.0.0, update description and modifies
KenanMillet Jun 28, 2026
7836d46
Sequence: default easing step, attribute groups, registerAttributeGro…
KenanMillet Jun 29, 2026
1c46d46
Sequence: add registerAttributeGroup to dev docs and README
KenanMillet Jun 29, 2026
9044533
Sequence: add registerExample to dev docs
KenanMillet Jun 29, 2026
570f5d3
Sequence: add Recording Struct section to dev docs, clean up register…
KenanMillet Jun 29, 2026
36c7297
Sequence: add notes to registerExample dev docs
KenanMillet Jun 29, 2026
2b2a23f
Sequence: snapshot button, identity default, require namespace/descri…
KenanMillet Jun 29, 2026
3535a2d
Sequence: audit and complete all registration function docstrings
KenanMillet Jun 29, 2026
187774b
Sequence: finalize docstrings — require namespace/description/context…
KenanMillet Jun 29, 2026
b53c802
Sequence: fix snapshot backfill (capture at time, prune on save), add…
KenanMillet Jun 29, 2026
646334e
Sequence: rewrite TODO.md to reflect v1.0.0 state
KenanMillet Jun 29, 2026
57db936
Sequence: add registerAttributeGroup to script.json extension API lis…
KenanMillet Jun 29, 2026
85dd014
Sequence: update last-updated date to 2026-06-29
KenanMillet Jun 29, 2026
e6de1fa
Sequence: add wiki link to script.json description
KenanMillet Jun 29, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
73 changes: 35 additions & 38 deletions Sequence/0.2.0/Sequence.js
Original file line number Diff line number Diff line change
Expand Up @@ -3260,7 +3260,7 @@ var Sequence = Sequence || (() => {
const handleInput = (msg) => {
if (msg.type !== 'api') return;
if (msg.content.split(' ')[0] !== CMD_TOKEN) return;
if (!playerIsGM(msg.playerid)) {
if (!playerIsGM(msg.playerid) && msg.playerid !== 'API') {
replyError(msg, 'Only the GM can use Sequence commands.');
return;
}
Expand Down Expand Up @@ -5395,49 +5395,46 @@ if (opacityReg) opacityReg.set(obj, 0.5);`
return {
checkInstall,
registerEventHandlers,
API: {
// Extension registration
registerAttribute,
registerPlaybackConstant,
registerEasing,
generateExtensionHandout,

// Registry introspection — returns struct or null
getAttribute: getAttrReg,
getFunction: (qualName) => {
const parts = qualName.split('.');
const ns = parts.length > 1 ? parts.slice(0, -1).join('.') : 'core';
const name = parts[parts.length - 1];
return FN_REGISTRY[`${ns}/${name}`] || null;
},
getConstant: (qualName) => {
const parts = qualName.split('.');
const ns = parts.length > 1 ? parts.slice(0, -1).join('.') : 'core';
const name = parts[parts.length - 1];
return CONST_REGISTRY[`${ns}/${name}`] || null;
},
getEasing,

// Playback control — for scripts that trigger playback programmatically
loadRecording,
startPlayback,
stopPlayback,
pausePlayback,
resumePlayback,
startRecording,
stopRecording,
saveRecording,

// Notify Sequence that a virtual attribute changed (for recording)
notifyChange,

// Extension registration
registerAttribute,
registerPlaybackConstant,
registerEasing,
generateExtensionHandout,

// Registry introspection — returns struct or null
getAttribute: getAttrReg,
getFunction: (qualName) => {
const parts = qualName.split('.');
const ns = parts.length > 1 ? parts.slice(0, -1).join('.') : 'core';
const name = parts[parts.length - 1];
return FN_REGISTRY[`${ns}/${name}`] || null;
},
getConstant: (qualName) => {
const parts = qualName.split('.');
const ns = parts.length > 1 ? parts.slice(0, -1).join('.') : 'core';
const name = parts[parts.length - 1];
return CONST_REGISTRY[`${ns}/${name}`] || null;
},
getEasing,

// Playback control — for scripts that trigger playback programmatically
loadRecording,
startPlayback,
stopPlayback,
pausePlayback,
resumePlayback,
startRecording,
stopRecording,
saveRecording,

// Notify Sequence that a virtual attribute changed (for recording)
notifyChange,
};
})();

on('ready', () => {
'use strict';
Sequence.checkInstall();
Sequence.registerEventHandlers();
Object.assign(Sequence, Sequence.API);
delete Sequence.API;
});
Loading
Loading