|
1 | | -# Infix Demo |
| 1 | +# Oldschool Demo for Shows etc. |
2 | 2 |
|
3 | | -A classic demoscene-style demo featuring multiple visual effects with |
4 | | -oldschool aesthetics. |
| 3 | +[](https://opensource.org/licenses/MIT) |
| 4 | +[](https://github.com/kernelkit/demo/actions) |
| 5 | +[](https://ghcr.io/kernelkit/demo) |
| 6 | +[](https://github.com/kernelkit/demo/releases/latest) |
5 | 7 |
|
6 | | -## Scenes |
| 8 | +A classic demoscene-style demo featuring multiple visual effects with oldschool aesthetics. Built with SDL2 and inspired by 1990s Amiga/PC demos. |
7 | 9 |
|
8 | | -The demo cycles through different scenes. |
| 10 | + |
9 | 11 |
|
10 | | -- **Starfield** — 3D scrolling stars with sine wave text scroller |
11 | | -- **Plasma** — Colorful plasma effect with sine wave text scroller |
| 12 | +## Features |
| 13 | + |
| 14 | +### Visual Effects |
| 15 | + |
| 16 | +The demo includes 9 different scenes that cycle automatically: |
| 17 | + |
| 18 | +- **Starfield** — 3D star field with rotating textured Jack sphere, periodic particle bursts, and burning logo effects |
| 19 | +- **Plasma** — Colorful plasma effect with animated gradients |
12 | 20 | - **Rotating Cube** — Texture-mapped 3D cube with copper bars background |
13 | | - and traditional bottom scroller |
14 | | -- **Tunnel** — Psychedelic tunnel effect with traditional bottom scroller |
15 | | -- **Bouncing Logo** — Animated logo with bouncing physics and rotation effects |
| 21 | +- **Tunnel** — Psychedelic texture-mapped tunnel effect |
| 22 | +- **Bouncing Logo** — Physics-based bouncing and rotating logo |
| 23 | +- **Raining Logo** — Multiple logos falling with physics |
| 24 | +- **3D Star Ball** — Fibonacci sphere with rotating dots |
| 25 | +- **Checkered Floor** — Classic perspective floor with bouncing starball |
| 26 | +- **Rotozoomer** — Rotating and zooming texture effect |
16 | 27 |
|
17 | | -## Dependencies |
| 28 | +### Text Scrollers |
18 | 29 |
|
19 | | -On a Debian/Ubuntu/Mint system: |
| 30 | +Multiple scroller styles with smooth effects: |
| 31 | +- **Classic** — Traditional bottom scroller |
| 32 | +- **Sine Wave** — Undulating wave motion |
| 33 | +- **3D Roller** — Perspective roller with configurable outline/glow effects |
| 34 | +- **Bounce** — Bouncing text with squash/stretch |
20 | 35 |
|
21 | | -``` |
22 | | -sudo apt install libsdl2-dev libsdl2-ttf-dev libsdl2-image-dev libsdl2-mixer-dev |
23 | | -``` |
| 36 | +### Interactive Features |
24 | 37 |
|
25 | | -## Building |
| 38 | +- Dynamic scroll text with control codes for speed, color, style changes, and pauses |
| 39 | +- Command-line options for fullscreen, window size, scene selection, and duration |
| 40 | +- Custom scroll text loading from files |
| 41 | +- Embedded MOD tracker music playback |
| 42 | +- Configurable roller text effects (4 visual modes) |
26 | 43 |
|
| 44 | +## Quick Start |
| 45 | + |
| 46 | +### Download and Run (Easiest) |
| 47 | + |
| 48 | +Download the latest AppImage for your architecture: |
| 49 | + |
| 50 | +**x86_64 (Intel/AMD):** |
| 51 | +```bash |
| 52 | +wget https://github.com/kernelkit/demo/releases/latest/download/InfixDemo-x86_64.AppImage |
| 53 | +chmod +x InfixDemo-x86_64.AppImage |
| 54 | +./InfixDemo-x86_64.AppImage |
27 | 55 | ``` |
28 | | -make |
| 56 | + |
| 57 | +**aarch64 (ARM64):** |
| 58 | +```bash |
| 59 | +wget https://github.com/kernelkit/demo/releases/latest/download/InfixDemo-aarch64.AppImage |
| 60 | +chmod +x InfixDemo-aarch64.AppImage |
| 61 | +./InfixDemo-aarch64.AppImage |
29 | 62 | ``` |
30 | 63 |
|
31 | | -## Running |
| 64 | +No installation required! The AppImage bundles all dependencies. |
| 65 | + |
| 66 | +### Run with Docker |
32 | 67 |
|
| 68 | +**Pull and run the latest image:** |
| 69 | +```bash |
| 70 | +# Allow X11 connections (run once per session) |
| 71 | +xhost +local:docker |
| 72 | + |
| 73 | +# Run the demo |
| 74 | +docker run --rm -it \ |
| 75 | + -e DISPLAY=$DISPLAY \ |
| 76 | + -v /tmp/.X11-unix:/tmp/.X11-unix \ |
| 77 | + ghcr.io/kernelkit/demo:latest |
33 | 78 | ``` |
34 | | -make run |
| 79 | + |
| 80 | +**Or use docker-compose:** |
| 81 | +```bash |
| 82 | +docker compose up |
35 | 83 | ``` |
36 | 84 |
|
37 | | -### Command-Line Options |
| 85 | +## Building from Source |
| 86 | + |
| 87 | +### Dependencies |
38 | 88 |
|
39 | | -Run `./demo --help` to see all available options. |
| 89 | +On Debian/Ubuntu/Mint: |
| 90 | +```bash |
| 91 | +sudo apt install libsdl2-dev libsdl2-ttf-dev libsdl2-image-dev libsdl2-mixer-dev |
| 92 | +``` |
40 | 93 |
|
41 | | -## Distribution |
| 94 | +On Fedora/RHEL: |
| 95 | +```bash |
| 96 | +sudo dnf install SDL2-devel SDL2_ttf-devel SDL2_image-devel SDL2_mixer-devel |
| 97 | +``` |
42 | 98 |
|
43 | | -### AppImage (Recommended for sharing) |
| 99 | +On Arch: |
| 100 | +```bash |
| 101 | +sudo pacman -S sdl2 sdl2_ttf sdl2_image sdl2_mixer |
| 102 | +``` |
44 | 103 |
|
45 | | -Create a portable AppImage that works on most Linux distributions: |
| 104 | +### Build and Run |
46 | 105 |
|
| 106 | +```bash |
| 107 | +make |
| 108 | +./demo |
47 | 109 | ``` |
| 110 | + |
| 111 | +### Build AppImage |
| 112 | + |
| 113 | +```bash |
48 | 114 | make appimage |
49 | 115 | ``` |
50 | 116 |
|
51 | | -This creates `InfixDemo-x86_64.AppImage` - a single executable file you |
52 | | -can share with friends. They just need to: |
| 117 | +Creates a portable `InfixDemo-<arch>.AppImage` file. |
53 | 118 |
|
54 | | -1. Download the `.AppImage` file |
55 | | -2. Make it executable: `chmod +x InfixDemo-x86_64.AppImage` |
56 | | -3. Run it: `./InfixDemo-x86_64.AppImage` |
| 119 | +### Build Docker Image |
57 | 120 |
|
58 | | -**What is AppImage?** |
59 | | -- Single-file executable that works on most Linux distros |
60 | | -- No installation required - just download and run |
61 | | -- Bundles all dependencies (SDL2, fonts, music, textures) |
62 | | -- Works on Ubuntu, Debian, Fedora, Arch, etc. |
63 | | -- Great for distributing demos to friends! |
| 121 | +```bash |
| 122 | +docker build -t demo . |
| 123 | +``` |
64 | 124 |
|
65 | | -### Docker |
| 125 | +## Command-Line Options |
66 | 126 |
|
67 | 127 | ``` |
68 | | -make docker-run |
| 128 | +Usage: demo [OPTIONS] [SCENE...] |
| 129 | +
|
| 130 | +Display Options: |
| 131 | + -f, --fullscreen Run in fullscreen mode (scales to display) |
| 132 | + -w, --window WxH Set window size (e.g., 1920x1080) |
| 133 | + -s, --scale N Integer scaling (e.g., 2 = 1600x1200) |
| 134 | +
|
| 135 | +Playback Options: |
| 136 | + -d, --duration SEC Scene duration in seconds (default: 15) |
| 137 | + -t, --text FILE Load scroll text from file |
| 138 | + -r, --roller N Roller effect: 0=all, 1=no outline, 2=clean, 3=color (default: 1) |
| 139 | + -h, --help Show this help message |
| 140 | +
|
| 141 | +Scenes: |
| 142 | + 0 - Starfield 3 - Tunnel 6 - 3D Star Ball |
| 143 | + 1 - Plasma 4 - Bouncing Logo 7 - Rotozoomer |
| 144 | + 2 - Cube 5 - Raining Logo 8 - Checkered Floor |
| 145 | +
|
| 146 | +Examples: |
| 147 | + demo -f # Fullscreen, auto-cycle scenes |
| 148 | + demo -s 2 # 2x window size (1600x1200) |
| 149 | + demo -w 1920x1080 # Custom window size |
| 150 | + demo -d 30 2 6 # Show cube & star ball, 30s each |
| 151 | + demo -t /mnt/scroll.txt # Custom scroll text |
| 152 | + demo -r 2 0 # Clean roller effect, starfield only |
69 | 153 | ``` |
70 | 154 |
|
71 | | -## Assets & Licenses |
| 155 | +## Customizing Scroll Text |
72 | 156 |
|
73 | | -### Font |
| 157 | +### Using Custom Text File |
| 158 | + |
| 159 | +Create a text file with your scroll message: |
| 160 | +```bash |
| 161 | +echo "Hello demoscene! This is my custom scroller..." > myscroll.txt |
| 162 | +./demo -t myscroll.txt |
| 163 | +``` |
74 | 164 |
|
75 | | -The FontStruction [Amiga Topaz 8][1] by [nonarkitten][2] is licensed |
76 | | -under a Creative Commons Attribution [Share Alike license][3]. |
| 165 | +### Control Codes |
77 | 166 |
|
78 | | -[1]: https://fontstruct.com/fontstructions/show/889446 |
79 | | -[2]: https://fontstruct.com/fontstructors/828567/nonarkiteen |
80 | | -[3]: http://creativecommons.org/licenses/by-sa/3.0/ |
| 167 | +The scroll text supports embedded control codes for dynamic effects: |
81 | 168 |
|
82 | | -### Music |
| 169 | +| Code | Description | Example | |
| 170 | +|------|-------------|---------| |
| 171 | +| `{PAUSE:seconds}` | Pause scrolling for N seconds | `{PAUSE:3}` | |
| 172 | +| `{SPEED:pixels}` | Change scroll speed (pixels/sec) | `{SPEED:100}` | |
| 173 | +| `{STYLE:name}` | Switch scroll effect style | `{STYLE:roller}` | |
| 174 | +| `{COLOR:r,g,b}` | Set text color (RGB 0-255) | `{COLOR:255,0,0}` | |
| 175 | + |
| 176 | +**Available Styles:** |
| 177 | +- `wave` - Sine wave scroller |
| 178 | +- `roller` - 3D roller scroller with outline and glow |
| 179 | +- `classic` - Traditional bottom scroller |
| 180 | +- `bounce` - Bouncing text with squash/stretch |
| 181 | + |
| 182 | +**Example scroll.txt:** |
| 183 | +``` |
| 184 | +{SPEED:400}{STYLE:bounce} |
| 185 | +
|
| 186 | +Welcome to... the Demo!{PAUSE:2} |
| 187 | +{SPEED:400} |
| 188 | +
|
| 189 | +Now scrolling... FAST!{SPEED:800} |
83 | 190 |
|
84 | | -The demo includes **"Enigma"** by [Phenomena][4], licensed under the |
85 | | -[Mod Archive Distribution license][5]. |
| 191 | +{SPEED:400} |
| 192 | +{STYLE:roller}Now with 3D roller! {PAUSE:1.5} |
86 | 193 |
|
87 | | -[4]: https://modarchive.org/index.php?request=view_artist_modules&query=72943 |
88 | | -[5]: https://modarchive.org/index.php?request=view_by_license&query=publicdomain |
| 194 | +{COLOR:255,0,0} |
| 195 | +RED |
| 196 | +
|
| 197 | +{COLOR:0,255,0} |
| 198 | +GREEN |
| 199 | +
|
| 200 | +{COLOR:0,0,255} |
| 201 | +BLUE |
| 202 | +
|
| 203 | +{COLOR:0,0,0}{STYLE:wave}Back to waves... Greetings to the demoscene! <3 |
| 204 | +``` |
| 205 | + |
| 206 | +**Note:** Use `{COLOR:0,0,0}` to return to the default rainbow gradient effect. |
89 | 207 |
|
90 | 208 | ## Adding Custom Music |
91 | 209 |
|
92 | | -The demo supports MOD/XM/IT tracker music files. To replace the music: |
| 210 | +The demo supports MOD/XM/IT tracker music files: |
93 | 211 |
|
94 | | -1. Download a compatible MOD file from [The Mod Archive][6] |
| 212 | +1. Download a MOD file from [The Mod Archive](https://modarchive.org/) |
95 | 213 | 2. Rename it to `music.mod` |
96 | 214 | 3. Place it in the project directory |
97 | | -4. Run `make clean && make` |
| 215 | +4. Rebuild: `make clean && make` |
98 | 216 |
|
99 | | -[6]: https://modarchive.org/ |
| 217 | +The music will be embedded in the binary. |
100 | 218 |
|
101 | | -## Customizing Scroll Text |
| 219 | +## Development |
102 | 220 |
|
103 | | -Use the `-t` option to load custom scroll text from a file. This is especially |
104 | | -useful when running in containers where you can mount your scroll text file: |
| 221 | +### Project Structure |
105 | 222 |
|
106 | | -```bash |
107 | | -./demo -t /path/to/scroll.txt |
| 223 | +``` |
| 224 | +. |
| 225 | +├── demo.c # Main source code |
| 226 | +├── Makefile # Build system |
| 227 | +├── Dockerfile # Container build |
| 228 | +├── utils/ |
| 229 | +│ └── build-appimage.sh # AppImage build script |
| 230 | +├── .github/ |
| 231 | +│ └── workflows/ |
| 232 | +│ └── build.yml # CI/CD pipeline |
| 233 | +├── topaz-8.otf # Embedded font |
| 234 | +├── jack.png # Texture asset |
| 235 | +├── logo.png # Logo asset |
| 236 | +├── infix.png # Infix logo for fire effect |
| 237 | +├── wires.png # Wires logo for fire effect |
| 238 | +├── scroll.txt # Default scroll text |
| 239 | +└── music.mod # Optional MOD music file |
108 | 240 | ``` |
109 | 241 |
|
110 | | -### Control Codes |
| 242 | +### Architecture Support |
111 | 243 |
|
112 | | -The scroll text supports embedded control codes for dynamic effects, inspired |
113 | | -by classic demoscene scrollers. Control codes use the format `{CODE:PARAMETER}`. |
| 244 | +- **x86_64** (Intel/AMD 64-bit) |
| 245 | +- **aarch64** (ARM 64-bit) |
114 | 246 |
|
115 | | -#### Available Control Codes |
| 247 | +Both architectures are built automatically via GitHub Actions and released as AppImages and Docker images. |
116 | 248 |
|
117 | | -| Code | Description | Example | |
118 | | -|------|-------------|---------| |
119 | | -| `{PAUSE:seconds}` | Pause scrolling for N seconds | `{PAUSE:3}` | |
120 | | -| `{SPEED:pixels}` | Change scroll speed (pixels/sec) | `{SPEED:100}` | |
121 | | -| `{STYLE:name}` | Switch scroll effect style | `{STYLE:roller}` | |
122 | | -| `{COLOR:r,g,b}` | Set text color (RGB 0-255) | `{COLOR:255,0,0}` | |
| 249 | +## Assets & Licenses |
123 | 250 |
|
124 | | -#### Style Names |
| 251 | +### Code |
125 | 252 |
|
126 | | -- `wave` - Sine wave scroller |
127 | | -- `roller` - 3D roller scroller with outline and glow |
128 | | -- `bottom` - Traditional bottom scroller |
| 253 | +MIT License - See LICENSE file for details. |
129 | 254 |
|
130 | | -#### Example Scroll Text |
| 255 | +### Font |
131 | 256 |
|
132 | | -``` |
133 | | -Welcome to the Infix Demo!{PAUSE:2} {SPEED:250}Fast text!{SPEED:180} |
134 | | -{STYLE:roller} Now with 3D roller effect!{PAUSE:1.5} |
135 | | -{COLOR:255,0,0}Red text!{COLOR:0,255,0} Green text!{COLOR:0,0,0} |
136 | | -{STYLE:wave} Back to sine wave... Greetings to the demoscene! |
137 | | -``` |
| 257 | +The FontStruction [Amiga Topaz 8](https://fontstruct.com/fontstructions/show/889446) by [nonarkitten](https://fontstruct.com/fontstructors/828567/nonarkiteen) is licensed under a Creative Commons Attribution [Share Alike license](http://creativecommons.org/licenses/by-sa/3.0/). |
138 | 258 |
|
139 | | -**Note:** Use `{COLOR:0,0,0}` to return to the default rainbow gradient effect. |
| 259 | +### Music |
| 260 | + |
| 261 | +The demo includes **"Enigma"** by [Phenomena](https://modarchive.org/index.php?request=view_artist_modules&query=72943), licensed under the [Mod Archive Distribution license](https://modarchive.org/index.php?request=view_by_license&query=publicdomain). |
| 262 | + |
| 263 | +## Contributing |
| 264 | + |
| 265 | +Contributions are welcome! Feel free to: |
| 266 | +- Report bugs or request features via [GitHub Issues](https://github.com/kernelkit/demo/issues) |
| 267 | +- Submit pull requests with improvements |
| 268 | +- Share your custom scroll texts and music combinations |
| 269 | + |
| 270 | +## Acknowledgments |
| 271 | + |
| 272 | +Inspired by classic Amiga and PC demos from the 1990s demoscene. Special thanks to: |
| 273 | +- The demoscene community for decades of creative inspiration |
| 274 | +- SDL2 developers for the excellent multimedia library |
| 275 | +- Mod Archive for preserving tracker music history |
| 276 | +- Classic demoscene resources at [lodev.org](https://lodev.org/cgtutor/) |
| 277 | + |
| 278 | +--- |
| 279 | + |
| 280 | +**Made with ❤️ for the demoscene** |
0 commit comments