gibribbon

gibribbon · sources · schema v1

GIBRIBBON (video) — a Vib-Ribbon spiritual successor rendered with DOOM shareware-WAD sprites. A single white vector "ribbon"/ground line scrolls right→left on black (Vib-Ribbon's exact line-art grammar: the ground dips into a pit V for a LOOP, rises into a hump for a JUMP), while imp (TROO*) and zombie/former-human (POSS*) enemies — REAL sprites decoded from the same DOOM1.WAD the DOOM module uses — ride the ribbon in from the right. The player character is the green DOOM marine (PLAY*). An overhead ABXY prompt strip shows the button each upcoming event needs. FOUR events map to the four ABXY buttons: LOOP (A), JUMP (B), IMP SPAWN (X), ZOMBIE SPAWN (Y); a correct, in-window press clears the obstacle (marine loops/jumps) or fires-and-kills the enemy (it plays its DOOM death animation). Missing an event degrades the marine down a DOOM-flavoured health ladder (super → healthy → wounded → critical → GAME OVER); clean streaks recover rungs and reach a SUPER state. Inputs: cv1..cv4 (modsignal — drive event GENERATION from slow Synesthesia envelopes; each channel maps to one event kind), clock (the 1× scroll/tempo tick), gate (the beat — biases which CV channel spawns), x + y (joystick axes), and four ABXY button gates a / b / x_btn / y_btn (named to disambiguate from the x/y axes). Outputs: out (video), evt_hit / evt_miss / evt_fire / evt_kill / evt_gameover (10 ms gate pulses), and health_cv (marine vitality 0..1). Event generation is a PURE deterministic function of the inputs (gibribbon-events.ts) with all CV→event thresholds in a single tunable GIB_TUNING block; sprite extraction is a PURE WAD picture/PLAYPAL decoder (wad-sprites.ts) run at load time. DOOM1.WAD stays gitignored + fetched like the DOOM module; without it the game falls back to line-art placeholder figures so it still plays. DOOM shareware terms apply (same as the DOOM module).

A Vib-Ribbon-style rhythm side-scroller rendered as a patchable VIDEO source: a single white vector ribbon scrolls right-to-left on black, obstacles deform the line (loop=a pit-V dip, jump=a hump) while enemies (imps/zombies) ride it in as real DOOM shareware-WAD sprites (with a wireframe line-art fallback when DOOM1.WAD is absent — the card shows a "line-art (no WAD)" badge). A DOOM marine stands left-of-centre at the judgement point; you clear each event by pulsing its mapped ABXY button within a timing window as it arrives (loop=A, jump=B, imp=X, zombie=Y). A fixed top "lookahead lane" shows the next four buttons left-to-right (nearest first) so the queue is readable. Hits score (combo-multiplied, cap x8) and can heal or reach SUPER; misses degrade the marine down a DOOM health ladder (super/healthy/wounded/critical/dead) to GAME OVER. Drive it three ways: AUTOPLAY (default ON) runs an internal ~0.42 s-beat clock so a freshly-dropped card self-plays with synthesized rotating CV; patching an external CLOCK + GATE + CV1-4 takes over for musical mode (each clock edge advances a beat and spawns from whichever eligible CV channel is hottest above threshold) and suppresses autoplay for ~1.5 s; and keyboard play (click the card to focus, then F/D/J/K or arrow keys = A/B/X/Y, R = restart). Patch the X/Y axes to aim, and the event gate outputs feed the cross-domain video-to-audio bridge so hits/kills/game-over can trigger synths. (The on-card preview is a fixed-size screen, not resizable; RESET/RESTART are DOM buttons, not params.)

the faceplate

gibribboncv1modsignalcv2modsignalcv3modsignalcv4modsignalclockgategategatexmodsignalymodsignalagatebgatex_btngatey_btngateoutvideoevt_hitgateevt_missgateevt_firegateevt_killgateevt_gameovergatehealth_cvcvaudiocvgatepitch
12 inputs · 7 outputs · 13 params

inputs

idcablewhat it does
cv1modsignalCV that drives loop-event (button A) generation: on each beat, channels above the spawn threshold (~0.42) compete and the strongest spawns its mapped event. Patch a slow envelope here so an energetic band spawns loops. Modulates the CV1 control.
modulation (CV / gate / audio); modulates cv1 (additive offset — ±1 CV sweeps the full range, centered on the knob)
cv2modsignalCV that drives jump-event (button B) generation; eligible when its level exceeds the spawn threshold (~0.42) and it wins the per-beat strongest-channel contest. Modulates the CV2 control.
modulation (CV / gate / audio); modulates cv2 (additive offset — ±1 CV sweeps the full range, centered on the knob)
cv3modsignalCV that drives imp-event (button X) generation — imps render as DOOM imp sprites that the marine fires on and kills when cleared. Modulates the CV3 control.
modulation (CV / gate / audio); modulates cv3 (additive offset — ±1 CV sweeps the full range, centered on the knob)
cv4modsignalCV that drives zombie-event (button Y) generation — former-human sprites the marine fires on and kills on a successful clear. Modulates the CV4 control.
modulation (CV / gate / audio); modulates cv4 (additive offset — ±1 CV sweeps the full range, centered on the knob)
clockgateThe transport beat (a 1x clock train, declared gate-typed but EDGE-detected, i.e. a trigger). Each rising edge advances the ribbon one authoritative beat and runs spawn generation, and switches the game into external/musical mode, suppressing the internal AUTOPLAY clock for ~1.5 s.
gate / trigger; modulates clock (summed directly (the destination DSP scales it))
gategateThe beat gate, read as a sampled level (gate, high above 0.5), not edge-judged: when high the strongest eligible CV channel spawns on the beat; when low, only a notably-strong channel spawns, so off-beat spawns are sparser.
gate / trigger; modulates gate (summed directly (the destination DSP scales it))
xmodsignalJoystick X axis (bipolar -1..1) consumed as AIM: re-centres the judgement point by up to one hit-window (stick left = clear events slightly early, right = slightly late). A timing aid that shifts, not widens, the window. Modulates the axis_x control.
modulation (CV / gate / audio); modulates axis_x (additive offset — ±1 CV sweeps the full range, centered on the knob)
ymodsignalJoystick Y axis (bipolar -1..1) consumed as the marine's VERTICAL position: push up to raise the marine off the ribbon (aim high), down to crouch (up to +/-26 px). Modulates the axis_y control.
modulation (CV / gate / audio); modulates axis_y (additive offset — ±1 CV sweeps the full range, centered on the knob)
agateThe A player button (rising edge = a trigger): on the edge it judges the nearest in-window LOOP event and clears it on a match. Spare presses with no matching event are ignored (no penalty).
gate / trigger; modulates btn_a (summed directly (the destination DSP scales it))
bgateThe B player button (rising edge / trigger): judges the nearest in-window JUMP event on the edge, clearing it on a match.
gate / trigger; modulates btn_b (summed directly (the destination DSP scales it))
x_btngateThe X player button (rising edge / trigger): judges the nearest in-window IMP event on the edge. Named x_btn to disambiguate from the x AXIS port.
gate / trigger; modulates btn_x (summed directly (the destination DSP scales it))
y_btngateThe Y player button (rising edge / trigger): judges the nearest in-window ZOMBIE event on the edge. Named y_btn to disambiguate from the y AXIS port.
gate / trigger; modulates btn_y (summed directly (the destination DSP scales it))

outputs

idcablewhat it does
outvideoThe rendered game frame (video): the 16:9 ribbon scene rasterised and letterboxed (bars top/bottom) into the engine's 4:3 output.
RGB video stream
evt_hitgateA ~10 ms gate pulse on every successful clear (any in-window button match), for triggering hit feedback in the audio domain.
gate / trigger
evt_missgateA ~10 ms gate pulse on every missed event (one that scrolled past the marine uncleared), as the marine degrades a health rung.
gate / trigger
evt_firegateA ~10 ms gate pulse when the marine FIRES — emitted on a successful enemy (imp/zombie) clear.
gate / trigger
evt_killgateA ~10 ms gate pulse when an enemy DIES (its death animation), emitted alongside evt_fire on an enemy clear.
gate / trigger
evt_gameovergateA ~10 ms gate pulse fired once when the marine reaches GAME OVER (health hits dead).
gate / trigger
health_cvcvThe marine's vitality as a 0..1 CV (super=1, healthy=0.75, wounded=0.5, critical=0.25, dead=0), ramped smoothly on each health change.
control voltage (CV)

params

idlabelrangedefaultcurve
cv1CV10..10linear
cv2CV20..10linear
cv3CV30..10linear
cv4CV40..10linear
clockCLOCK0..10linear
gateGATE0..10linear
autoplayAUTOPLAY0..11linear
axis_xX-1..10linear
axis_yY-1..10linear
btn_aA0..10linear
btn_bB0..10linear
btn_xX (btn)0..10linear
btn_yY (btn)0..10linear

controls

controlwhat it does
AUTOPLAYAutoplay toggle (0/1, default 1 = ON): when on and no external clock is active, an internal clock (~0.42 s beat) self-plays the game with synthesized rotating CV. Set 0 to require an external clock for pure deterministic/musical control.
XThe joystick X aim value (-1..1, default 0): re-centres the judgement point by up to one hit-window for leading/lagging the beat. Normally driven by the X axis input jack.
YThe joystick Y value (-1..1, default 0): raises/lowers the marine on the ribbon (up to +/-26 px). Normally driven by the Y axis input jack.
AThe A-button target value (0..1); a rising edge judges the nearest in-window loop event. Normally driven by the A input jack (or keyboard F / left-arrow).
BThe B-button target value (0..1); a rising edge judges the nearest in-window jump event. Normally driven by the B input jack (or keyboard D / down-arrow).
X (btn)The X-button target value (0..1); a rising edge judges the nearest in-window imp event. Normally driven by the x_btn input jack (or keyboard J / right-arrow).
Y (btn)The Y-button target value (0..1); a rising edge judges the nearest in-window zombie event. Normally driven by the y_btn input jack (or keyboard K / up-arrow).
CLOCKThe clock port's target value (0..1); a rising edge here advances one beat and runs spawn generation. Normally driven by the CLOCK input jack.
CV1Sets/holds the loop-channel CV level read on each beat for spawn generation (0..1); normally driven by the CV1 input jack.
CV2Sets/holds the jump-channel CV level read on each beat (0..1); normally driven by the CV2 input jack.
CV3Sets/holds the imp-channel CV level read on each beat (0..1); normally driven by the CV3 input jack.
CV4Sets/holds the zombie-channel CV level read on each beat (0..1); normally driven by the CV4 input jack.
GATEThe beat-gate level (0..1, high above 0.5) that biases per-beat spawn selection; normally driven by the GATE input jack.

source

gibribbon.ts on GitHub.

Generated from packages/web/src/lib/{audio,video}/module-registry.ts · repo