accelr8 3.6.1 → 3.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunks/{app-RLI7EJGK.js → app-EOVXVIEE.js} +204 -271
- package/dist/chunks/{chunk-HXMWH7DE.js → chunk-P3CEHEKI.js} +1 -1
- package/dist/chunks/{client-HEB5PQCT.js → client-OIVTEENE.js} +1 -1
- package/dist/chunks/{server-43CHBWWU.js → server-NZ5JUOCF.js} +1 -1
- package/dist/cli.js +4 -4
- package/package.json +1 -1
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
} from "./chunk-HY6ULYGH.js";
|
|
7
7
|
import {
|
|
8
8
|
DEFAULT_SERVER
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-P3CEHEKI.js";
|
|
10
10
|
|
|
11
11
|
// src/radio/app.ts
|
|
12
12
|
import tk from "terminal-kit";
|
|
@@ -139,20 +139,20 @@ var Showrunner = class {
|
|
|
139
139
|
const vizHold = opts?.vizHold ?? DEFAULT_VIZ_HOLD;
|
|
140
140
|
const fade = opts?.fade ?? FADE;
|
|
141
141
|
this.fade = fade;
|
|
142
|
+
const VIZ_SLOTS = opts?.vizSlots ?? 60;
|
|
143
|
+
const BUMP_EVERY = opts?.bumpEvery ?? 6;
|
|
144
|
+
const VIG_EVERY = opts?.vigEvery ?? 30;
|
|
142
145
|
const viz = scenes.filter((s) => s.kind === "visualizer");
|
|
143
146
|
const bumps = scenes.filter((s) => s.kind === "bump");
|
|
144
147
|
const vig = scenes.filter((s) => s.kind === "vignette");
|
|
145
148
|
const push = (s) => this.seq.push({ scene: s, hold: Math.max(fade * 2, s.durationMs ?? vizHold) });
|
|
146
149
|
if (viz.length) {
|
|
147
|
-
let
|
|
148
|
-
for (let
|
|
149
|
-
push(viz[
|
|
150
|
-
|
|
151
|
-
if (
|
|
152
|
-
if (count % 6 === 0 && vig.length) push(vig[vgi++ % vig.length]);
|
|
150
|
+
let vi = 0, bi = 0, vgi = 0;
|
|
151
|
+
for (let n = 1; n <= VIZ_SLOTS; n++) {
|
|
152
|
+
push(viz[vi++ % viz.length]);
|
|
153
|
+
if (vig.length && n % VIG_EVERY === 0) push(vig[vgi++ % vig.length]);
|
|
154
|
+
else if (bumps.length && n % BUMP_EVERY === 0) push(bumps[bi++ % bumps.length]);
|
|
153
155
|
}
|
|
154
|
-
while (bi < bumps.length) push(bumps[bi++]);
|
|
155
|
-
while (vgi < vig.length) push(vig[vgi++]);
|
|
156
156
|
} else {
|
|
157
157
|
for (const s of scenes) push(s);
|
|
158
158
|
}
|
|
@@ -2880,272 +2880,203 @@ var bassShock = {
|
|
|
2880
2880
|
};
|
|
2881
2881
|
var SCENES7 = [waveScope, eqSunburst, arcDischarge, bassShock];
|
|
2882
2882
|
|
|
2883
|
-
// src/radio/
|
|
2884
|
-
var INK3 = xterm256(3, 3, 5);
|
|
2883
|
+
// src/radio/bumpengine.ts
|
|
2885
2884
|
var WHITE = 231;
|
|
2886
|
-
var
|
|
2887
|
-
var
|
|
2888
|
-
|
|
2889
|
-
|
|
2890
|
-
|
|
2891
|
-
|
|
2892
|
-
|
|
2893
|
-
|
|
2894
|
-
|
|
2895
|
-
|
|
2896
|
-
|
|
2897
|
-
|
|
2898
|
-
|
|
2899
|
-
|
|
2885
|
+
var BLACK = 16;
|
|
2886
|
+
var CURSOR = "\u258C";
|
|
2887
|
+
function makeBump(name, beats, opts = {}) {
|
|
2888
|
+
const baseCps = opts.cps ?? 20;
|
|
2889
|
+
const segs = [];
|
|
2890
|
+
let t = 0, row = -1;
|
|
2891
|
+
for (const b of beats) {
|
|
2892
|
+
if ("pause" in b) {
|
|
2893
|
+
t += b.pause;
|
|
2894
|
+
continue;
|
|
2895
|
+
}
|
|
2896
|
+
if ("pop" in b) {
|
|
2897
|
+
row++;
|
|
2898
|
+
segs.push({ row, text: b.pop, start: t, end: t + 1 });
|
|
2899
|
+
t += 1;
|
|
2900
|
+
continue;
|
|
2901
|
+
}
|
|
2902
|
+
const cps = "cps" in b && b.cps ? b.cps : baseCps;
|
|
2903
|
+
const text = "line" in b ? b.line : b.add;
|
|
2904
|
+
if ("line" in b) row++;
|
|
2905
|
+
if (row < 0) row = 0;
|
|
2906
|
+
const dur = Math.max(1, text.length / cps * 1e3);
|
|
2907
|
+
segs.push({ row, text, start: t, end: t + dur });
|
|
2908
|
+
t += dur;
|
|
2909
|
+
}
|
|
2910
|
+
const holdEnd = opts.holdEnd ?? 2800;
|
|
2911
|
+
const rows = Math.max(1, row + 1);
|
|
2912
|
+
const durationMs = t + holdEnd;
|
|
2900
2913
|
return {
|
|
2901
2914
|
name,
|
|
2902
2915
|
kind: "bump",
|
|
2903
|
-
durationMs
|
|
2916
|
+
durationMs,
|
|
2904
2917
|
frame(tMs, w, h) {
|
|
2905
|
-
const out = new Array(w * h);
|
|
2906
|
-
out.
|
|
2907
|
-
if (w
|
|
2908
|
-
const
|
|
2909
|
-
let
|
|
2910
|
-
for (
|
|
2911
|
-
if (tMs >=
|
|
2912
|
-
|
|
2913
|
-
|
|
2914
|
-
|
|
2915
|
-
|
|
2916
|
-
|
|
2917
|
-
const left = Math.floor((w - line.length) / 2);
|
|
2918
|
-
let revealed = tMs <= starts[li] ? 0 : Math.floor((tMs - starts[li]) / CHAR_MS);
|
|
2919
|
-
if (revealed > line.length) revealed = line.length;
|
|
2920
|
-
for (let ci = 0; ci < revealed; ci++) {
|
|
2921
|
-
const x = left + ci;
|
|
2922
|
-
if (x < 0 || x >= w) continue;
|
|
2923
|
-
const ch = line[ci];
|
|
2924
|
-
out[y * w + x] = { ch: ch === " " ? " " : ch, color: WHITE };
|
|
2918
|
+
const out = new Array(Math.max(0, w * h));
|
|
2919
|
+
for (let i = 0; i < out.length; i++) out[i] = { ch: " ", color: BLACK };
|
|
2920
|
+
if (w < 1 || h < 1) return out;
|
|
2921
|
+
const rowText = new Array(rows).fill("");
|
|
2922
|
+
let headRow = 0, typing = false;
|
|
2923
|
+
for (const s of segs) {
|
|
2924
|
+
if (tMs >= s.end) rowText[s.row] += s.text;
|
|
2925
|
+
else if (tMs >= s.start) {
|
|
2926
|
+
const n = Math.floor((tMs - s.start) / (s.end - s.start) * s.text.length);
|
|
2927
|
+
rowText[s.row] += s.text.slice(0, n);
|
|
2928
|
+
headRow = s.row;
|
|
2929
|
+
typing = true;
|
|
2925
2930
|
}
|
|
2926
2931
|
}
|
|
2927
|
-
|
|
2928
|
-
|
|
2929
|
-
|
|
2930
|
-
|
|
2931
|
-
const line = lines[activeLine];
|
|
2932
|
-
const left = Math.floor((w - line.length) / 2);
|
|
2933
|
-
let cChars = tMs <= starts[activeLine] ? 0 : Math.floor((tMs - starts[activeLine]) / CHAR_MS);
|
|
2934
|
-
if (cChars > line.length) cChars = line.length;
|
|
2935
|
-
const cx = left + cChars;
|
|
2936
|
-
if (cy >= 0 && cy < h && cx >= 0 && cx < w) {
|
|
2937
|
-
out[cy * w + cx] = { ch: CURSOR, color: WHITE };
|
|
2932
|
+
if (!typing) {
|
|
2933
|
+
for (let r = rows - 1; r >= 0; r--) if (rowText[r]) {
|
|
2934
|
+
headRow = r;
|
|
2935
|
+
break;
|
|
2938
2936
|
}
|
|
2939
2937
|
}
|
|
2938
|
+
const top = Math.max(0, Math.floor((h - rows) / 2));
|
|
2939
|
+
const put2 = (x, y, ch, color) => {
|
|
2940
|
+
if (x >= 0 && x < w && y >= 0 && y < h) out[y * w + x] = { ch, color };
|
|
2941
|
+
};
|
|
2942
|
+
for (let r = 0; r < rows; r++) {
|
|
2943
|
+
const line = rowText[r];
|
|
2944
|
+
if (!line) continue;
|
|
2945
|
+
const x0 = Math.max(0, Math.floor((w - line.length) / 2));
|
|
2946
|
+
for (let i = 0; i < line.length; i++) put2(x0 + i, top + r, line[i], WHITE);
|
|
2947
|
+
}
|
|
2948
|
+
const blink = typing || (tMs / 480 | 0) % 2 === 0;
|
|
2949
|
+
if (blink) {
|
|
2950
|
+
const line = rowText[headRow] ?? "";
|
|
2951
|
+
const x0 = Math.max(0, Math.floor((w - Math.max(1, line.length)) / 2));
|
|
2952
|
+
put2(x0 + line.length, top + headRow, CURSOR, WHITE);
|
|
2953
|
+
}
|
|
2940
2954
|
return out;
|
|
2941
2955
|
}
|
|
2942
2956
|
};
|
|
2943
2957
|
}
|
|
2958
|
+
|
|
2959
|
+
// src/radio/scenes/bumps-a.ts
|
|
2944
2960
|
var SCENES8 = [
|
|
2945
|
-
makeBump("bump-
|
|
2946
|
-
"
|
|
2947
|
-
|
|
2948
|
-
"
|
|
2949
|
-
|
|
2950
|
-
|
|
2951
|
-
"// TODO: fix this later",
|
|
2952
|
-
"it is later now.",
|
|
2953
|
-
"later brought nothing."
|
|
2961
|
+
makeBump("bump-friday-deploy", [
|
|
2962
|
+
{ line: "you are pushing to production." },
|
|
2963
|
+
{ pause: 1400 },
|
|
2964
|
+
{ line: "on a friday." },
|
|
2965
|
+
{ pause: 2400 },
|
|
2966
|
+
{ line: "godspeed." }
|
|
2954
2967
|
]),
|
|
2955
|
-
makeBump("bump-
|
|
2956
|
-
|
|
2957
|
-
|
|
2958
|
-
"
|
|
2968
|
+
makeBump("bump-it-compiled", [
|
|
2969
|
+
{ line: "it compiled." },
|
|
2970
|
+
{ pause: 2300 },
|
|
2971
|
+
{ line: "be suspicious." }
|
|
2959
2972
|
]),
|
|
2960
|
-
makeBump("bump-
|
|
2961
|
-
"
|
|
2962
|
-
|
|
2963
|
-
|
|
2973
|
+
makeBump("bump-why", [
|
|
2974
|
+
{ line: "the code works." },
|
|
2975
|
+
{ pause: 1500 },
|
|
2976
|
+
{ line: "nobody knows " },
|
|
2977
|
+
{ add: "why", cps: 6 },
|
|
2978
|
+
{ add: "." },
|
|
2979
|
+
{ pause: 2e3 },
|
|
2980
|
+
{ line: "do not touch it." }
|
|
2964
2981
|
]),
|
|
2965
2982
|
makeBump("bump-rubber-duck", [
|
|
2966
|
-
"the rubber duck
|
|
2967
|
-
|
|
2968
|
-
"the rubber duck
|
|
2983
|
+
{ line: "the rubber duck knows." },
|
|
2984
|
+
{ pause: 1900 },
|
|
2985
|
+
{ line: "the rubber duck has " },
|
|
2986
|
+
{ add: "always", cps: 7 },
|
|
2987
|
+
{ add: " known." }
|
|
2969
2988
|
]),
|
|
2970
|
-
makeBump("bump-
|
|
2971
|
-
"
|
|
2972
|
-
|
|
2973
|
-
"
|
|
2974
|
-
|
|
2989
|
+
makeBump("bump-agent-refactor", [
|
|
2990
|
+
{ line: "somewhere, right now," },
|
|
2991
|
+
{ pause: 800 },
|
|
2992
|
+
{ line: "your agent is refactoring code" },
|
|
2993
|
+
{ pause: 600 },
|
|
2994
|
+
{ line: "you will never read." },
|
|
2995
|
+
{ pause: 2100 },
|
|
2996
|
+
{ line: "thank it." }
|
|
2975
2997
|
]),
|
|
2976
2998
|
makeBump("bump-git-blame", [
|
|
2977
|
-
"git blame says it was you.",
|
|
2978
|
-
|
|
2979
|
-
"git
|
|
2999
|
+
{ line: "git blame says it was you." },
|
|
3000
|
+
{ pause: 2200 },
|
|
3001
|
+
{ line: "git blame does not " },
|
|
3002
|
+
{ add: "lie", cps: 6 },
|
|
3003
|
+
{ add: "." }
|
|
3004
|
+
]),
|
|
3005
|
+
makeBump("bump-one-more", [
|
|
3006
|
+
{ line: "just one more " },
|
|
3007
|
+
{ add: "feature", cps: 7 },
|
|
3008
|
+
{ add: "." },
|
|
3009
|
+
{ pause: 2500 },
|
|
3010
|
+
{ line: "it is 4am." }
|
|
2980
3011
|
]),
|
|
2981
|
-
makeBump("bump-
|
|
2982
|
-
|
|
2983
|
-
|
|
2984
|
-
|
|
3012
|
+
makeBump("bump-three-tests", [
|
|
3013
|
+
{ line: "all tests pass." },
|
|
3014
|
+
{ pause: 1700 },
|
|
3015
|
+
{ line: "you wrote " },
|
|
3016
|
+
{ add: "three", cps: 6 },
|
|
3017
|
+
{ add: " tests." }
|
|
2985
3018
|
])
|
|
2986
3019
|
];
|
|
2987
3020
|
|
|
2988
3021
|
// src/radio/scenes/bumps-b.ts
|
|
2989
|
-
var
|
|
2990
|
-
|
|
2991
|
-
|
|
2992
|
-
|
|
2993
|
-
|
|
2994
|
-
|
|
2995
|
-
|
|
2996
|
-
|
|
2997
|
-
|
|
2998
|
-
|
|
2999
|
-
|
|
3000
|
-
|
|
3001
|
-
|
|
3002
|
-
|
|
3003
|
-
|
|
3004
|
-
|
|
3005
|
-
|
|
3006
|
-
|
|
3007
|
-
|
|
3008
|
-
|
|
3009
|
-
|
|
3010
|
-
|
|
3011
|
-
|
|
3012
|
-
|
|
3013
|
-
|
|
3014
|
-
|
|
3015
|
-
|
|
3016
|
-
|
|
3017
|
-
|
|
3018
|
-
|
|
3019
|
-
|
|
3020
|
-
|
|
3021
|
-
|
|
3022
|
-
|
|
3023
|
-
|
|
3024
|
-
|
|
3025
|
-
|
|
3026
|
-
|
|
3027
|
-
|
|
3028
|
-
|
|
3029
|
-
|
|
3030
|
-
|
|
3031
|
-
|
|
3032
|
-
|
|
3033
|
-
|
|
3034
|
-
|
|
3035
|
-
|
|
3036
|
-
|
|
3037
|
-
|
|
3038
|
-
|
|
3039
|
-
|
|
3040
|
-
|
|
3041
|
-
|
|
3042
|
-
|
|
3043
|
-
|
|
3044
|
-
|
|
3045
|
-
|
|
3046
|
-
},
|
|
3047
|
-
{
|
|
3048
|
-
name: "bump-still-up",
|
|
3049
|
-
layout: "center",
|
|
3050
|
-
lines: [
|
|
3051
|
-
"still up?",
|
|
3052
|
-
"yeah.",
|
|
3053
|
-
"us too. we left a light on."
|
|
3054
|
-
]
|
|
3055
|
-
},
|
|
3056
|
-
{
|
|
3057
|
-
name: "bump-cursor-patient",
|
|
3058
|
-
layout: "center",
|
|
3059
|
-
lines: [
|
|
3060
|
-
"the cursor blinks at the speed",
|
|
3061
|
-
"it blinked the night you began.",
|
|
3062
|
-
"it has waited this whole time."
|
|
3063
|
-
]
|
|
3064
|
-
}
|
|
3022
|
+
var SCENES9 = [
|
|
3023
|
+
makeBump("bump-only-you", [
|
|
3024
|
+
{ line: "you are the only one listening." },
|
|
3025
|
+
{ pause: 1700 },
|
|
3026
|
+
{ line: "we checked." },
|
|
3027
|
+
{ pause: 2400 },
|
|
3028
|
+
{ line: "twice." }
|
|
3029
|
+
]),
|
|
3030
|
+
makeBump("bump-terminal-candle", [
|
|
3031
|
+
{ line: "the terminal is just a candle" },
|
|
3032
|
+
{ pause: 700 },
|
|
3033
|
+
{ line: "you type into." },
|
|
3034
|
+
{ pause: 2600 },
|
|
3035
|
+
{ line: "keep it lit." }
|
|
3036
|
+
]),
|
|
3037
|
+
makeBump("bump-still-up", [
|
|
3038
|
+
{ line: "still up?" },
|
|
3039
|
+
{ pause: 2300 },
|
|
3040
|
+
{ line: "yeah." },
|
|
3041
|
+
{ pause: 1500 },
|
|
3042
|
+
{ line: "us too." }
|
|
3043
|
+
]),
|
|
3044
|
+
makeBump("bump-ship-it", [
|
|
3045
|
+
{ line: "ship it." },
|
|
3046
|
+
{ pause: 2400 },
|
|
3047
|
+
{ line: "the bar was " },
|
|
3048
|
+
{ add: "never", cps: 7 },
|
|
3049
|
+
{ add: " real." }
|
|
3050
|
+
]),
|
|
3051
|
+
makeBump("bump-nobody-asked", [
|
|
3052
|
+
{ line: "you built a thing" },
|
|
3053
|
+
{ pause: 700 },
|
|
3054
|
+
{ line: "nobody asked for." },
|
|
3055
|
+
{ pause: 2200 },
|
|
3056
|
+
{ line: "that is the whole point." }
|
|
3057
|
+
]),
|
|
3058
|
+
makeBump("bump-cursor-patient", [
|
|
3059
|
+
{ line: "the cursor is very patient." },
|
|
3060
|
+
{ pause: 2400 },
|
|
3061
|
+
{ line: "it will wait as long" },
|
|
3062
|
+
{ pause: 500 },
|
|
3063
|
+
{ line: "as you need." }
|
|
3064
|
+
]),
|
|
3065
|
+
makeBump("bump-200-ok", [
|
|
3066
|
+
{ line: "the server says 200 OK." },
|
|
3067
|
+
{ pause: 2200 },
|
|
3068
|
+
{ line: "are " },
|
|
3069
|
+
{ add: "you", cps: 5 },
|
|
3070
|
+
{ add: "?" }
|
|
3071
|
+
]),
|
|
3072
|
+
makeBump("bump-3am", [
|
|
3073
|
+
{ line: "it is 3am somewhere." },
|
|
3074
|
+
{ pause: 1200 },
|
|
3075
|
+
{ line: "it is 3am here." },
|
|
3076
|
+
{ pause: 2300 },
|
|
3077
|
+
{ line: "make something." }
|
|
3078
|
+
])
|
|
3065
3079
|
];
|
|
3066
|
-
function makeBump2(def) {
|
|
3067
|
-
const lines = def.lines;
|
|
3068
|
-
const nLines = lines.length;
|
|
3069
|
-
const totalChars = lines.reduce((s, l) => s + l.length, 0);
|
|
3070
|
-
const maxLen = lines.reduce((m, l) => Math.max(m, l.length), 0);
|
|
3071
|
-
const LINE_PAUSE2 = 240;
|
|
3072
|
-
const TARGET = 1900;
|
|
3073
|
-
const rawPer = (TARGET - (nLines - 1) * LINE_PAUSE2) / Math.max(1, totalChars);
|
|
3074
|
-
const perChar = Math.max(18, Math.min(70, rawPer));
|
|
3075
|
-
return {
|
|
3076
|
-
name: def.name,
|
|
3077
|
-
kind: "bump",
|
|
3078
|
-
durationMs: 7e3,
|
|
3079
|
-
frame(tMs, w, h) {
|
|
3080
|
-
const N = Math.max(0, w * h);
|
|
3081
|
-
const out = new Array(N);
|
|
3082
|
-
for (let i = 0; i < N; i++) out[i] = { ch: " ", color: INK4 };
|
|
3083
|
-
if (w <= 0 || h <= 0) return out;
|
|
3084
|
-
const shown = new Array(nLines);
|
|
3085
|
-
let doneAll = true;
|
|
3086
|
-
let headLine = nLines - 1;
|
|
3087
|
-
let headChar = 0;
|
|
3088
|
-
let g = 0;
|
|
3089
|
-
for (let i = 0; i < nLines; i++) {
|
|
3090
|
-
const len = lines[i].length;
|
|
3091
|
-
let s = 0;
|
|
3092
|
-
for (let j = 0; j < len; j++) {
|
|
3093
|
-
const revealAt = i * LINE_PAUSE2 + g * perChar;
|
|
3094
|
-
if (tMs >= revealAt) {
|
|
3095
|
-
s++;
|
|
3096
|
-
} else if (doneAll) {
|
|
3097
|
-
doneAll = false;
|
|
3098
|
-
headLine = i;
|
|
3099
|
-
headChar = j;
|
|
3100
|
-
}
|
|
3101
|
-
g++;
|
|
3102
|
-
}
|
|
3103
|
-
shown[i] = s;
|
|
3104
|
-
}
|
|
3105
|
-
const gap = nLines * 2 - 1 <= h ? 2 : 1;
|
|
3106
|
-
const blockH = (nLines - 1) * gap + 1;
|
|
3107
|
-
let top;
|
|
3108
|
-
if (def.layout === "lower-left") {
|
|
3109
|
-
top = h - blockH - 2;
|
|
3110
|
-
if (top < 0) top = Math.max(0, h - blockH);
|
|
3111
|
-
} else {
|
|
3112
|
-
top = Math.floor((h - blockH) / 2);
|
|
3113
|
-
if (top < 0) top = 0;
|
|
3114
|
-
}
|
|
3115
|
-
const leftMargin = Math.min(3, Math.max(0, w - maxLen));
|
|
3116
|
-
const startColOf = (line) => def.layout === "lower-left" ? leftMargin : Math.max(0, Math.floor((w - line.length) / 2));
|
|
3117
|
-
for (let i = 0; i < nLines; i++) {
|
|
3118
|
-
const row = top + i * gap;
|
|
3119
|
-
if (row < 0 || row >= h) continue;
|
|
3120
|
-
const line = lines[i];
|
|
3121
|
-
const startCol = startColOf(line);
|
|
3122
|
-
const rowBase = row * w;
|
|
3123
|
-
const vis = shown[i];
|
|
3124
|
-
for (let j = 0; j < vis; j++) {
|
|
3125
|
-
const col13 = startCol + j;
|
|
3126
|
-
if (col13 < 0 || col13 >= w) continue;
|
|
3127
|
-
out[rowBase + col13] = { ch: line[j], color: LIT };
|
|
3128
|
-
}
|
|
3129
|
-
}
|
|
3130
|
-
let curRow;
|
|
3131
|
-
let curCol;
|
|
3132
|
-
if (doneAll) {
|
|
3133
|
-
const li = nLines - 1;
|
|
3134
|
-
curRow = top + li * gap;
|
|
3135
|
-
curCol = startColOf(lines[li]) + lines[li].length;
|
|
3136
|
-
} else {
|
|
3137
|
-
curRow = top + headLine * gap;
|
|
3138
|
-
curCol = startColOf(lines[headLine]) + headChar;
|
|
3139
|
-
}
|
|
3140
|
-
const caretOn = doneAll ? tMs % 900 < 520 : true;
|
|
3141
|
-
if (caretOn && curRow >= 0 && curRow < h && curCol >= 0 && curCol < w) {
|
|
3142
|
-
out[curRow * w + curCol] = { ch: "\u2588", color: LIT };
|
|
3143
|
-
}
|
|
3144
|
-
return out;
|
|
3145
|
-
}
|
|
3146
|
-
};
|
|
3147
|
-
}
|
|
3148
|
-
var SCENES9 = DECK.map(makeBump2);
|
|
3149
3080
|
|
|
3150
3081
|
// src/radio/scenes/vignette-socratic.ts
|
|
3151
3082
|
var TAU9 = Math.PI * 2;
|
|
@@ -3823,16 +3754,16 @@ var DESCARTES = buildFigure({
|
|
|
3823
3754
|
});
|
|
3824
3755
|
var SIG_L = [70, 176, 255];
|
|
3825
3756
|
var SIG_R = [255, 100, 186];
|
|
3826
|
-
var
|
|
3757
|
+
var CHAR_MS = 40;
|
|
3827
3758
|
var HOLD_MS = 1050;
|
|
3828
3759
|
var PUNCH_HOLD = 1650;
|
|
3829
|
-
var
|
|
3760
|
+
var LEAD_MS = 420;
|
|
3830
3761
|
var TAIL_MS = 2400;
|
|
3831
3762
|
function schedule(lines) {
|
|
3832
3763
|
const beats = [];
|
|
3833
|
-
let t =
|
|
3764
|
+
let t = LEAD_MS;
|
|
3834
3765
|
for (const ln of lines) {
|
|
3835
|
-
const typeEnd = t + ln.text.length *
|
|
3766
|
+
const typeEnd = t + ln.text.length * CHAR_MS;
|
|
3836
3767
|
const end = typeEnd + (ln.punch ? PUNCH_HOLD : HOLD_MS);
|
|
3837
3768
|
beats.push({ who: ln.who, text: ln.text, punch: !!ln.punch, start: t, typeEnd, end });
|
|
3838
3769
|
t = end;
|
|
@@ -3911,7 +3842,7 @@ function makeVignette2(name, theme, lines) {
|
|
|
3911
3842
|
let boxY = boxBottom - boxH + 1;
|
|
3912
3843
|
if (boxY < 0) boxY = 0;
|
|
3913
3844
|
const totalChars = textLines.reduce((s, l) => s + l.length, 0);
|
|
3914
|
-
const revealed = clamp3(Math.floor((tMs - beat.start) /
|
|
3845
|
+
const revealed = clamp3(Math.floor((tMs - beat.start) / CHAR_MS), 0, totalChars);
|
|
3915
3846
|
const typing = tMs < beat.typeEnd;
|
|
3916
3847
|
drawBubble2(out, w, h, boxX, boxY, boxW, boxH, boxInnerW, textLines, revealed, sig, tMs, typing);
|
|
3917
3848
|
drawTail(out, w, h, boxX, boxY + boxH, boxW, speakerCX, figTop, sig);
|
|
@@ -4159,8 +4090,8 @@ var SCENE_ORACLE = makeVignette2(
|
|
|
4159
4090
|
var SCENES11 = [SCENE_SUNLIGHT, SCENE_DREAM, SCENE_ORACLE];
|
|
4160
4091
|
|
|
4161
4092
|
// src/radio/scenes/vignette-nietzsche.ts
|
|
4162
|
-
var
|
|
4163
|
-
var
|
|
4093
|
+
var LEAD_MS2 = 300;
|
|
4094
|
+
var CHAR_MS2 = 38;
|
|
4164
4095
|
var HOLD_MS2 = 950;
|
|
4165
4096
|
var CY = [46, 168, 255];
|
|
4166
4097
|
var MG = [255, 93, 177];
|
|
@@ -4311,7 +4242,7 @@ function makeVignette3(name, look, script) {
|
|
|
4311
4242
|
let acc = 0;
|
|
4312
4243
|
for (const b of script) {
|
|
4313
4244
|
starts.push(acc);
|
|
4314
|
-
acc +=
|
|
4245
|
+
acc += LEAD_MS2 + b.text.length * CHAR_MS2 + HOLD_MS2;
|
|
4315
4246
|
}
|
|
4316
4247
|
const total = acc;
|
|
4317
4248
|
return {
|
|
@@ -4331,8 +4262,8 @@ function makeVignette3(name, look, script) {
|
|
|
4331
4262
|
for (let i = 0; i < script.length; i++) if (tMs >= starts[i]) bi = i;
|
|
4332
4263
|
const beat = script[bi];
|
|
4333
4264
|
const tIn = tMs - starts[bi];
|
|
4334
|
-
const typing = tIn >=
|
|
4335
|
-
const typed = tIn <
|
|
4265
|
+
const typing = tIn >= LEAD_MS2 && tIn < LEAD_MS2 + beat.text.length * CHAR_MS2;
|
|
4266
|
+
const typed = tIn < LEAD_MS2 ? 0 : Math.floor((tIn - LEAD_MS2) / CHAR_MS2);
|
|
4336
4267
|
const activeL = beat.who === "L";
|
|
4337
4268
|
const spriteH = h >= 20 ? 7 : h >= 12 ? 4 : 0;
|
|
4338
4269
|
const figW = 9;
|
|
@@ -4619,7 +4550,7 @@ var DIOGENES_BUST = {
|
|
|
4619
4550
|
],
|
|
4620
4551
|
mini: [",www,", "(e e)", "[=m=]"]
|
|
4621
4552
|
};
|
|
4622
|
-
var
|
|
4553
|
+
var CHAR_MS3 = 28;
|
|
4623
4554
|
var BEAT_LEAD = 240;
|
|
4624
4555
|
var BEAT_HOLD = 820;
|
|
4625
4556
|
var CURSOR2 = "\u258F";
|
|
@@ -4662,7 +4593,7 @@ function makeVignette4(def) {
|
|
|
4662
4593
|
let acc = 0;
|
|
4663
4594
|
for (const b of def.script) {
|
|
4664
4595
|
starts.push(acc);
|
|
4665
|
-
acc += BEAT_LEAD + b.text.length *
|
|
4596
|
+
acc += BEAT_LEAD + b.text.length * CHAR_MS3 + BEAT_HOLD;
|
|
4666
4597
|
}
|
|
4667
4598
|
const totalMs = acc;
|
|
4668
4599
|
const pal = PAL[def.backdrop];
|
|
@@ -4672,8 +4603,8 @@ function makeVignette4(def) {
|
|
|
4672
4603
|
durationMs: clamp4(totalMs, 18e3, 26e3),
|
|
4673
4604
|
frame(tMs, w, h) {
|
|
4674
4605
|
const out = new Array(w * h);
|
|
4675
|
-
const
|
|
4676
|
-
out.fill(
|
|
4606
|
+
const BG2 = { ch: " ", color: 16 };
|
|
4607
|
+
out.fill(BG2);
|
|
4677
4608
|
if (w <= 0 || h <= 0) return out;
|
|
4678
4609
|
const setCell = (x, y, ch, color) => {
|
|
4679
4610
|
if (x >= 0 && x < w && y >= 0 && y < h) out[y * w + x] = { ch, color };
|
|
@@ -4712,7 +4643,7 @@ function makeVignette4(def) {
|
|
|
4712
4643
|
for (let i = 0; i < starts.length; i++) if (tMs >= starts[i]) ab = i;
|
|
4713
4644
|
const beat = def.script[ab];
|
|
4714
4645
|
const localT = tMs - starts[ab];
|
|
4715
|
-
const rawTyped = Math.floor((localT - BEAT_LEAD) /
|
|
4646
|
+
const rawTyped = Math.floor((localT - BEAT_LEAD) / CHAR_MS3);
|
|
4716
4647
|
const big = h >= 18 && w >= 34;
|
|
4717
4648
|
const figH = big ? 6 : 3;
|
|
4718
4649
|
const feetY = h - 1;
|
|
@@ -4972,6 +4903,11 @@ var CUT = /* @__PURE__ */ new Set([
|
|
|
4972
4903
|
// Pat's reject: the spectrum-analyzer visualizer
|
|
4973
4904
|
]);
|
|
4974
4905
|
var originals = VISUALIZERS.map((v) => ({ name: v.name, kind: "visualizer", frame: v.frame }));
|
|
4906
|
+
function dilate(s, f) {
|
|
4907
|
+
return { name: s.name, kind: s.kind, durationMs: Math.round((s.durationMs ?? 2e4) * f), frame: (t, w, h) => s.frame(t / f, w, h) };
|
|
4908
|
+
}
|
|
4909
|
+
var VIGNETTE_SLOW = 1.6;
|
|
4910
|
+
var vignettes = [...SCENES10, ...SCENES11, ...SCENES12, ...SCENES13].map((s) => dilate(s, VIGNETTE_SLOW));
|
|
4975
4911
|
var ALL_SCENES = [
|
|
4976
4912
|
...originals,
|
|
4977
4913
|
...SCENES,
|
|
@@ -4983,10 +4919,7 @@ var ALL_SCENES = [
|
|
|
4983
4919
|
...SCENES7,
|
|
4984
4920
|
...SCENES8,
|
|
4985
4921
|
...SCENES9,
|
|
4986
|
-
...
|
|
4987
|
-
...SCENES11,
|
|
4988
|
-
...SCENES12,
|
|
4989
|
-
...SCENES13
|
|
4922
|
+
...vignettes
|
|
4990
4923
|
].filter((s) => !CUT.has(s.name));
|
|
4991
4924
|
var SCENE_COUNT = ALL_SCENES.length;
|
|
4992
4925
|
|
|
@@ -5697,23 +5630,23 @@ function drawVolToast() {
|
|
|
5697
5630
|
for (let i = 0; i < s.length && x + i < screen.width; i++)
|
|
5698
5631
|
screen.put({ x: x + i, y, attr: { color: 231, bgColor: 16, bold: true }, dx: 1, dy: 0, wrap: false }, s[i]);
|
|
5699
5632
|
}
|
|
5700
|
-
var
|
|
5633
|
+
var BG = 16;
|
|
5701
5634
|
function blitVideo() {
|
|
5702
5635
|
const w = screen.width, h = screen.height;
|
|
5703
5636
|
if (lastFrame && frameW === w && frameH === h) {
|
|
5704
5637
|
for (let y = 0; y < h; y++) {
|
|
5705
5638
|
for (let x = 0; x < w; x++) {
|
|
5706
5639
|
const c = lastFrame[y * w + x];
|
|
5707
|
-
if (c) screen.put({ x, y, attr: { color: c.color, bgColor:
|
|
5640
|
+
if (c) screen.put({ x, y, attr: { color: c.color, bgColor: BG }, dx: 1, dy: 0, wrap: false }, c.ch);
|
|
5708
5641
|
}
|
|
5709
5642
|
}
|
|
5710
5643
|
} else {
|
|
5711
5644
|
for (let y = 0; y < h; y++)
|
|
5712
|
-
screen.put({ x: 0, y, attr: { color:
|
|
5645
|
+
screen.put({ x: 0, y, attr: { color: BG, bgColor: BG }, dx: 1, dy: 0, wrap: false }, " ".repeat(w));
|
|
5713
5646
|
}
|
|
5714
5647
|
}
|
|
5715
5648
|
function videoColorAt(_x, _y) {
|
|
5716
|
-
return
|
|
5649
|
+
return BG;
|
|
5717
5650
|
}
|
|
5718
5651
|
function blitOverlay(cells) {
|
|
5719
5652
|
const w = screen.width, h = screen.height;
|
package/dist/cli.js
CHANGED
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
DEFAULT_SERVER,
|
|
4
4
|
PORT,
|
|
5
5
|
VERSION
|
|
6
|
-
} from "./chunks/chunk-
|
|
6
|
+
} from "./chunks/chunk-P3CEHEKI.js";
|
|
7
7
|
|
|
8
8
|
// src/cli.ts
|
|
9
9
|
var HELP = `
|
|
@@ -53,7 +53,7 @@ async function main() {
|
|
|
53
53
|
console.error(`invalid port: ${argVal(args, "--port")}`);
|
|
54
54
|
process.exit(1);
|
|
55
55
|
}
|
|
56
|
-
const { runServer } = await import("./chunks/server-
|
|
56
|
+
const { runServer } = await import("./chunks/server-NZ5JUOCF.js");
|
|
57
57
|
runServer(port);
|
|
58
58
|
return;
|
|
59
59
|
}
|
|
@@ -67,7 +67,7 @@ async function main() {
|
|
|
67
67
|
console.error("accelr8 radio needs an interactive terminal (TTY).");
|
|
68
68
|
process.exit(1);
|
|
69
69
|
}
|
|
70
|
-
const { runRadio } = await import("./chunks/app-
|
|
70
|
+
const { runRadio } = await import("./chunks/app-EOVXVIEE.js");
|
|
71
71
|
runRadio({
|
|
72
72
|
name: argVal(args, "--name"),
|
|
73
73
|
server: argVal(args, "--server"),
|
|
@@ -90,7 +90,7 @@ async function main() {
|
|
|
90
90
|
const { cachedUpdate, refreshUpdateCache } = await import("./chunks/update-UEPNGB6Y.js");
|
|
91
91
|
refreshUpdateCache();
|
|
92
92
|
const update = cachedUpdate(VERSION);
|
|
93
|
-
const { runClient } = await import("./chunks/client-
|
|
93
|
+
const { runClient } = await import("./chunks/client-OIVTEENE.js");
|
|
94
94
|
runClient({
|
|
95
95
|
name: argVal(args, "--name"),
|
|
96
96
|
server: argVal(args, "--server"),
|