Retro Plasma

retro-plasma is a full-screen animation demo that renders a classic plasma effect directly in the terminal. It is both a visual showcase and a practical example of continuous buffer updates, palette switching, keyboard controls, and resize-aware rendering.

Use This Demo When You Need…

  • A support example for continuous full-screen animation with keyboard input.

  • A place to study palette-based color animation with ColorSequence.

  • A lively example of a resize-aware terminal application that still keeps its controls readable.

Run the Demo

Start the demo from the build directory:

$ ./cmake-build-debug/demo-apps/retro-plasma

Use F to speed up, S to slow down, P or Space to pause, C to switch palettes, and Q to quit.

Captured Output (80x25)

▒░█▓▓▒░░░░░░▒▒▓██ ░▒▒▓██ ░░░▒▒▒▒▓▓▓▒▒▒▒░░   ██▓▓▒▒░░░░░░░░░░░░░░░░░░░░░▒▒▒▒▒▓▓██
░ █▓▓▒▒▒▒▓▓██ ░░▒▓▓██   ░░░░░░░░░░░░   ██▓▓▓▒▒░░░      ░░░▒▒▒▓▓▓█████████▓▓▓▓▓▓█
  ██████  ░▒▒▓▓███    ░░░░░░░░░░░    ███▓▓▒▒░░░        ░░▒▒▓██  ░░░▒▒▒░░░  █████
░░░░░░▒▒▓▓██   ░░░░░░░░░░░░░░░░░░░    ███▓▓▓▒▒▒░░░░░░░░░▒▒▓██ ░░▒▓▓▓▓▓▓▓▓▒░░  ██
▒▒▒▓▓██  ░░▒▒▒▒▒▒░░░░░░░░░░░░░░░▒▒▒▒░░░░░░   ███▓▓▓▓▓▓▓▓▓▓██  ░▒▒▓▓██████▓▓▒░░
▓██  ░░▒▒▓▓▓▓▓▒▒▒░░░░ ░░░░░▒▒▒▒▓▓▓▓▓▓▓▓▓▓▓▓▓▒▒▒▒░░░    ████   ░░▒▒▓▓██████▓▓▒░░
 ░░▒▒▓▓▓▓▓▓▓▒▒░░       ░░░▒▒▓▓▓██████████████████▓▓▒▒▒░░        ░░▒▒▒▓▓▓▓▓▒▒░░
 ░░▒▓▓▓█▓▓▓▒▒░  ███████  ░░▒▒▓▓▓▓▓█████████        ██▓▓▒░░ ██▓▓▓▓▓██  ░░░▒▒▒░░░
 ░▒▒▓▓▓▓▓▒▒░ ██▓▒▒▒▒▒▓▓██  ░░▒▒▒▒▒▒▒▒▒▒▒▓▓▓▓███     ██▓▒░ ██▓▒░░░░░▒▒▓▓█    ░
░░▒▒▓▓▒▒░░ █▓▒░░    ░░▒▓▓██              ░░░▒▒▓▓▓███▓▓▒▒░ ▓▒░  █████  ░▒▓▓██
░░▒▒▒▒░░ █▓▒░ ██▓▓▓██ ░░▒▓▓▓▓█▓▓▓▓▓▓▓▓▓▓███   ░░▒▒▒▒▒▒░ █▓▒░ █▓▒▒░▒▒▓▓█ ░▒▓██
░░░▒░░  █▓░ █▓▓▒▒▒▒▓▓█  ░▒▒▓▓▓▓▓▒▒▒▒▒▓▓▓███████   ░░   █▓▒░ ▓▒░░   ░░▒▓ ░▒▓██
░░░░░░ █▓▒ █▓▒░░░░░▒▓▓█ ░▒▒▓▓▓▓▓▓▓▓▓▓▓██  ████████  ███▓▒░ █▓▒░    ░░▒█ ░▒▓█  ░░
░░░░░  █▒░ █▓▒░░░░░▒▓█ ░▒▓▓███ ███████     ███████████▓▒░ █▓▒░░   ░░▒▓ ░▒█ ░░▒▒▒
░▒▒░░  █▓░ █▓▒░░░░▒▓▓ ░▒▓█ ░░▒▒▒▒▒▒▒▒░░░░░░░        ██▓▒░ ██▓▒░░░▒▒▓█ ▒▓█░▒▒▓▓▓▓
▒▒▒▒░░ █▓▒░ █▓▓▒▒▒▓█ ░▒▓ ░▒▓██      ████▓▓▓▓▒▒▒▒░░░  █▓▓▒░ █▓▓▓▓▓██░▒▓█░▒▓██   █
▒▒▒▒░░  █▓▒░░ █████ ░▒▓ ░▒▓█ ░▒▒▒▒▒▒▒▒░░░   ██▓▓▓▒░░ ██▓▒░   ██  ░▒▓█░▒▓█  ░░░░
░░░░░░░  ██▓▒▒░░░░░▒▒▓█ ▒▓█ ░▒▒▓▓███▓▓▓▓▒▒░░  █▓▓▒░░ █▓▓▒░░░░░░▒▒▓█░▒▓█ ░░▒▒░░░
           ██▓▓▓▓▓▓▓██ ░▒▒▓█ ░▒▒▒▓▓▓▓▓▒▒▒░░ ██▓▒▒░  █▓▓▒▒▒░▒▒▒▓██ ░▓██ ░░░░░░  ▓▓████          █████  ░░▒▒▓▓██         ██▓▓▒▒░  ██▓▓▒▒▒▒▒▒▒▓▓█ ░▒▓██  ░░░  ██▓▒
▒▒▒▒▒▓▓██   ░░░░░        ░░░░░▒▒▒▒▒▒▒▒░░░   ██▓▓▓▒▒▒▒▒▒▒▒▒▓▓█  ░▒▒▓██████▓▓▒▒░
    ░░▒▓▓██  ░░░░░░░░░     █████████▓▓▓▓▓▒▒▒▒▒░░░░░░░▒▒▒▓▓██  ░░▒▒▒▓▒▒▒▒░░ ██▓▓▒
████  ░░▒▓▓█   ░░░░░░░   ███▓▓▓▒▒▒▒▒░░░░░░░░░░░░░░▒▒▒▒▓▓███   ░░░░░   █▓▓▒▒░░
 █████  ░░▒▓▓██         ███▓▓▓▒▒▒▒▒░░░░░░░░▒▒▒▒▒▓▓▓▓████        ██▓▓▒▒░  ███████
Retro Plasma [Q] quit [F] faster [S] slower [P] pause [C] palette speed 100%

The capture may not show the terminal output correctly. Here a screenshot:

../../_images/retro-plasma.jpg

Features Demonstrated

  • Full-screen rendering using Buffer together with Terminal::updateScreen().

  • A timed animation loop combined with keyboard input in Input::Mode::Key.

  • Palette-based color animation implemented with ColorSequence.

  • Resize-aware rendering using custom UpdateSettings with minimum-size handling.

  • A dynamic footer prompt composed from colored String fragments.

Relevant Source Files

If you want to explore how the effect is implemented, start with demo/retro-plasma/src/RetroPlasmaApp.cpp and demo/retro-plasma/src/PlasmaRenderer.cpp.