================================================================================
____ ___ ___ __ __ ___ ___ ___ _ _ ___ _ _ __ _ _ _ __
/ ___|/ _ \ / __| \/ |_ _/ __| | _ \ | | / __| || | / /| || | | |/ /
| | | | | |\__ \ |\/| || | (__ | / |_| \__ \ __ | / _ \| || |_| ' <
| |___| |_| |___) | | || |\___| |_|_\\___/|___/_||_|/_/ \_\_||_|_|_|\_\\
COSMIC RUSH 64K
a 64k intro by felisuco
CTM
Euskal Encounter 34 (2026)
64k intro compo
================================================================================
"ZERO GB. ZERO MB. ONLY BYTES."
Un ejecutable Linux <= 64 KB inspirado en Cosmic Rush 3 (la demo grande).
C99 + raw X11 + GLX (OpenGL 3.3 core) con TODO el trabajo pesado en un
fragment shader raymarched. Shader embebido en el binario, ningun fichero
externo, ninguna dependencia opcional.
Empieza como un 64k intro clasico (torus + solids + terrain + finale
mandelbulb + credits) y despues explota en un MONTAJE de 80+ mini-escenas
homenajeando cine, videojuegos, demoscene y guiños vascos.
--------------------------------------------------------------------------------
REGLAS DEL COMPO (EE 64K INTRO)
--------------------------------------------------------------------------------
* Tamaño maximo: 65536 bytes (un solo fichero ejecutable).
* Solo librerias del sistema por defecto (nada tipo msvcr70.dll o SDL2).
* Sin permisos de root/admin.
* Salida limpia con ESC.
* No escribir a disco (excepto tmp, y limpiar al salir).
--------------------------------------------------------------------------------
DEPENDENCIAS RUNTIME (dynamic-linked, no cuentan al tamaño)
--------------------------------------------------------------------------------
libc.so.6 (siempre)
libm.so.6 (siempre)
libX11.so.6 (siempre en cualquier Linux con entorno grafico)
libGL.so.1 (siempre en cualquier Linux con graficos; provee GLX)
libasound.so.2 (ALSA, siempre en cualquier Linux con audio)
libpthread (parte de glibc moderno)
Instalar HEADERS en Debian/Ubuntu para compilar:
sudo apt install libx11-dev libgl1-mesa-dev libasound2-dev
--------------------------------------------------------------------------------
BUILD
--------------------------------------------------------------------------------
make # compila y muestra reporte de tamaño
make pack # aplica UPX al ELF final (build/demo64k.final)
make run # ventana 1280x720
make run-fs # pantalla completa
make clean
--------------------------------------------------------------------------------
RUN
--------------------------------------------------------------------------------
Fullscreen (por defecto):
./build/demo64k.final
./build/demo64k
Ventana 1280x720:
./build/demo64k.final w
./build/demo64k w
Teclas:
ESC / Q quit
N quit (respuesta al prompt CRT)
Y reinicia visual+audio desde el principio
ENTER skip al post-DANCE (arranca la parte de mini-juegos)
Click mouse quit (escape hatch)
Al terminar el GAME OVER final la demo se cierra automaticamente.
--------------------------------------------------------------------------------
TIMELINE (~337s total)
--------------------------------------------------------------------------------
--- BLOQUE 64k INTRO CLASICO (0-63s) ---
0 - 2 s card 0 : FELISUCO
2 - 4 s card 1 : IN EE34 VISION
4 - 8 s card 2 : COSMIC RUSH 64K
8 - 16 s TORUS : donut plum con grid wireframe sobre papel lavanda
16 - 22 s SOLIDS : grid infinito de cajas/octaedros fly-through
22 - 30 s ORBIT : 5 solidos girando alrededor de octaedro central
30 - 33 s NEBULA : particulas cosmicas + shockwave sincro con kick
33 - 41 s TUNNEL : atravesando un tubo torcido
41 - 49 s TERRAIN : heightmap raymarched + cielo purpura
49 - 57 s FINALE : mandelbulb + arpeggio A minor
57 - 63 s CREDITS : FELISUCO / CTM / THANK YOU en papel
--- BLOQUE CRT + MINI-JUEGOS (63-337s) ---
63 - 69 s ANOTHER WORLD-style preroll: CRT verde, HDD, prompt Y/N
69 - 81 s DANCE 4 chapters (aurora / kaleidoscope / pixel / arena)
con drop de techno 160 BPM
81 - 99 s MATRIX digital rain
99+ s mini-games/refs montage @ 4x speed (~3s cada uno):
SHMUP · TETRIS · MARIO · PACMAN · PONG · ASTEROIDS ·
STAR WARS · SNAKE · BREAKOUT · KAMEHAMEHA · DVD ·
WOLFENSTEIN · STREET FIGHTER · FLAPPY BIRD · BSOD ·
SONIC · HAL 9000 · INDIANA JONES · TERMINATOR ·
BLADE RUNNER · IKURRIÑA · EUSKAL LOGO · DONKEY KONG ·
ZELDA · GALAGA · TRON · JURASSIC PARK · AKIRA ·
MEGA MAN · BACK TO THE FUTURE · FROGGER · METROID ·
JAWS · STRANGER THINGS · DUNE · GHOSTBUSTERS · DOOM ·
CONTRA · METAL SLUG · BOMBERMAN · MINECRAFT · STAR TREK ·
PLASMA · KEFRENS BARS · ROTOZOOMER · STARFIELD 3D ·
METABALLS · FIRE · GREETINGS SCROLLER · CENTIPEDE ·
TUNNEL FX · VECTOR BALLS · MANDELBROT · ANOTHER WORLD ·
ALIEN xenomorph · SPACE INVADERS · AMIGA WORKBENCH ·
KITT scanner · VOXEL LANDSCAPE · DRAGON BALL SS ·
PREDATOR thermal · Q*BERT · MS-DOS prompt · SEGA splash ·
PORTAL · ROCKY · MATRIX pill · GAMEBOY boot · RAMBO ·
PIKACHU · MTV · WINDOWS 3.1 · MARIO KART · SIMPSONS ·
BATMAN signal · SUPERMAN shield · MASTER CHIEF (Halo)
~337 s INSERT COIN / GAME OVER --> auto-close
--------------------------------------------------------------------------------
AUDIO
--------------------------------------------------------------------------------
Mini synth procedural via ALSA en thread separado. Cero samples.
SONG A (dark minor, 120 BPM):
Progresion Am - F - C - G
Kick 4-on-the-floor + snare beats 2/4 + off-beat hats
Bass saw + octave con sidechain-like dip en cada kick
Pad triada con LFO lento + lead melody escala A minor
Arp finale A minor arpeggio en la parte mandelbulb
SONG B (techno drop, 160 BPM):
Progresion Em - C - G - Dm mas etereo
Kick mas fuerte con click + hats de 16 (0.09s)
Solo durante DANCE (T=69-81)
Fade in/out limpio, silencio dramatico en MATRIX
El shader recibe `T` (tiempo audio-driven) y `B` (beat envelope 0..1)
para sincronia visual-musical.
--------------------------------------------------------------------------------
ARQUITECTURA
--------------------------------------------------------------------------------
src/main.c
XOpenDisplay + glXChooseFBConfig + glXCreateContextAttribsARB (3.3 core)
+ main loop con XNextEvent. Fullscreen via _NET_WM_STATE_FULLSCREEN.
Punteros GL cargados via glXGetProcAddressARB (evita GLEW).
Fullscreen triangle via gl_VertexID trick (sin VBO).
Torus mesh 28x14 con VBO/EBO (flat shading via dFdx/dFdy).
Keyboard: event loop + XQueryKeymap polling (double-safety en XWayland).
Time-remap dispatcher para reordenar/velocidad de escenas sin editarlas.
src/audio.c
pthread + ALSA (snd_pcm_open + snd_pcm_writei blocking).
Osciladores sin/saw/sqr en C, kick/snare/hat sinteticos.
Master volume schedule con fades entre song A y song B.
shader.frag
Todas las escenas viven aqui: raymarching + SDFs + procedurales +
mini pixel-art font (glyphs 3x5 packed en int bits).
9 funciones scene_extras1..9 con 62 mini-escenas del montaje.
Se embebe en compile time por el Makefile via sed -> src/shader_embed.h.
Iteracion: editar shader.frag y `make` recompila (~1 segundo).
--------------------------------------------------------------------------------
REPORTE DE TAMAÑO
--------------------------------------------------------------------------------
Version actual: ~62 KB (94% del budget de 64 KB).
Pipeline de compresion:
elf raw ~333 KB (gcc -Os + strip)
upx --best ~62 KB (LZMA compression, ELF real ejecutable)
El .final es un ELF nativo (double-click funciona en cualquier file
manager). No hay shell trampoline ni auto-extract: es el binario real.
--------------------------------------------------------------------------------
ORIGEN
--------------------------------------------------------------------------------
Version big-brother: ../cosmicrush3/ (Python + pygame, demo compo grande)
La estructura visual mimica CR3 pero cada escena es un shader GLSL
original, no un port del codigo Python (imposible portar numpy a GLSL).
Escenas basadas en CR3:
* INTRO cards -> mismo estilo paper lavanda + typography black
* TORUS -> plum + grid wireframe (matches TorusScene BG/palette)
* SOLIDS -> inspirado en SolidsRainScene de CR3
* ORBIT -> inspirado en OrbitingSolidsScene de CR3
* NEBULA -> particulas cosmicas + shockwave sincronizado
* TERRAIN -> heightmap fly-through como en CR3
* FINALE -> mandelbulb (nuevo, no equivalente 1:1)
* CREDITS -> FELISUCO/CTM/THANK YOU stacked sobre papel
El bloque de mini-juegos es exclusivo de la version 64k: aprovechando
que cabe muchisimo shader en pocos KB tras UPX, se rellena el budget
con 60+ mini-escenas homenaje.
--------------------------------------------------------------------------------
CREDITOS
--------------------------------------------------------------------------------
Code + shader ..... felisuco
Music (synth) ..... procedural, C
Tools ............. C99, gcc -Os, X11 headers, GL headers, ALSA headers, UPX
Group ............. CTM / Chimuelos Taxidermistas En Motonieve
felisuco -- info@justdust.com
https://justdust.com
Todos los personajes, logos y refs son propiedad de sus respectivos
dueños. Uso puramente como homenaje demoscene sin animo de lucro.
--------------------------------------------------------------------------------
GREETINGS
--------------------------------------------------------------------------------
To the good people at EE34, y a toda la scene: RGBA, TPOLM, ULM, iNK,
MERCURY, FARBRAUSCH, TITAN, KEFRENS y a todos los que siguen empujando
bytes uno a uno.
STAY COSMIC. KEEP CODING.
================================================================================