top | item 10068655

Winning 1kb intro released at Assembly 2015

222 points| joeyspn | 10 years ago |p01.org

64 comments

order
[+] bane|10 years ago|reply
Anybody interested in a well written history of the scene that really helps explain it as a cultural phenomenon should probably read the demoscene chapter in "The Future Was Here", a book about the Amiga. It's probably one of the best written synopsis of the scene I've ever read and really places it well as both a technical and artistic movement and helps provide context for this kind of work.
[+] adam12|10 years ago|reply
Here is the UNPACKED source.

function u() { requestAnimationFrame(u);

    for (g = p ? B.currentTime * 60 : (B = 'RIFFdataWAVEfmt ' + atob('EAAAAAEAAQAAeAAAAHgAAAEACAA') + 'data', b.style.background = 'radial-gradient(circle,#345,#000)', b.style.position = 'fixed', b.style.height = b.style.width = '100%', b.height = 720, h = b.style.left = b.style.top = A = f = C = 0, 6177); g > f; h *= f % 1 ? 1 : .995)
        for (s = Math.pow(Math.min(f / 5457, 1), 87) + Math.pow(1 - Math.min(f / 5457, 1), 8), f == [b.width = 1280, 1599, 2175, 2469, 2777, 3183, 3369, 3995, 4199, 4470, 4777, 5120][C] && (C++, h = 640), f += p ? (c.translate(640, 360 + h / 45 * Math.random()), c.rotate(A / 5457 - h / 5457), c.scale(1 + s * 8, 1 + s * 8), 1) : (B += T((1 + s * 8) * Math.random() + (1 - s) * (h / 45 * (f * (2 + C / 3 % 1) & 1) + (C > 3) * 8 * (f * (2 + (f / 8 & 3)) % 1)) | 1), 1 / 512), i = p.length; i;) y = p[i -= 7], x = p[i ^= 1], r = p[i + 4], l = p[i + 6], s = 2 * Math.random() + 1, t = s * 4, a = 122, 640 > r ? (640 > Math.abs(p[i ^= 1] += p[i + 2]) || (p[i + 2] *= -1), 640 > Math.abs(p[i ^= 1] += p[i + 2]) || (p[i + 2] *= -1), t = Math.random() > p[i + 7] || p[i + 7] == '22312131212313' [C] & h == 640, w = x - A, p[i + 2] || r * r / 3 > w * w && (t = s * (r - Math.abs(w)) / 45 + 2, a = 2 * Math.random() + 5, p.push(A, 0, s * Math.sin(a += 599), s * Math.sin(a - 11), s * t, C + s, 640, .995), s = 2 * Math.random() + 1, a = 2 * Math.random() + 5, p.push(A, 0, s * Math.sin(a += 599), s * Math.sin(a - 11), s * t, C + s, 640, .995), s = 2 * Math.random() + 1, a = 2 * Math.random() + 2, p.push(A, 0, s * Math.sin(a += 599), s * Math.sin(a - 11), s * t, C + s, 640, .995)), a = p[i + 2] * y / 45, l = p[i + 6] = t ? 640 : .9 * l, t = r) : A = p[i] ++, g > f || (s = r, c.beginPath(), c.lineTo(x + s * Math.sin(a += 599), y - s * Math.sin(a - 11)), s = t, c.lineTo(x + s * Math.sin(a += 599), y - s * Math.sin(a - 11)), c.lineTo(x + s * Math.sin(a += 599), y - s * Math.sin(a - 11)), c.shadowBlur = r, s = l, x = s * 2, a = p[i + 5], c.shadowColor = c.fillStyle = 'rgb(' + [x + s * Math.sin(a += 599) | 1, x + s * Math.sin(a += 599) | 1, x + s * Math.sin(a += 599) | 1] + ')', c.fill());
    p ? c.fillText('BLCK4777', 90, 99) : (B = new Audio('data:Audio/WAV;base64,' + btoa(B))).play(p = [f = C = 0, 0, 0, 0, 180, 2, 0, 1, -360, 0, 0, 0, 99, 1, 0, 2, 360, 0, 0, 0, 99, 1, 0, 3, -2880, 0, 0, 0, 1280, 0, 1280, 0])
};
[+] segmondy|10 years ago|reply
And today, I was reading that facebook's mobile messenger has 18000 classes, and is about a 100mb, this doesn't take into account other dependencies it has on the OS. These demos are 100% standalone, no external libraries. Progress is a funny thing.
[+] mrich|10 years ago|reply
This is a Javascript demo. So let's not discount the browser, Javascript engine, JIT, 3d acceleration libs, sound libs, and everything used from the OS that is involved here. Still it is a great effort.

Your argument fits better to a machine like the C64, where demos are really going directly to the hardware and the OS is basically inactive.

[+] nomercy400|10 years ago|reply
Different use case. Facebook is a communications application, with user inputs and networking, focused on getting the information to you as fast as possible for the best user experience, and being always working 24/7.

This is a one-off deterministic demo, without inputs or networking.

Still, a 1k demo like this is impressive. And 18000 classes is too much for a messenger. But you can't compare them.

[+] mbilker|10 years ago|reply
The only other dependencies would be assets and OS included libraries. All of the code executed is part of the binary or it is remote JS.
[+] justin_|10 years ago|reply
Here's a 256b web compo from 2002 (!) http://wildmag.de/compo/

A lot of the stuff looks almost trivial compared to what we do today. (And unfortunately a lot of these won't work anymore)

[+] X-Istence|10 years ago|reply
This is one of my favourite demoscene's: https://www.youtube.com/watch?v=auagm5UBTwY
[+] skrebbel|10 years ago|reply
Nitpick: the demoscene is a community. You linked to one of your favourite demos.

(and insiders wouldn't call it a demo but an intro because it's small, and obviously the word "intro" signals something about file size)

[+] btzll|10 years ago|reply
I wonder if the bad performance is due to the <1kb requirement.
[+] Ellipsis753|10 years ago|reply
Almost certainly. It would be tempting just to pre-render this to an HD video otherwise.
[+] tantalor|10 years ago|reply
Why "intro"? As if "demo" wasn't confusing enough.
[+] Mithaldu|10 years ago|reply
The demoscene started out of the software piracy scene. An intro was a short thing like this one, that people put into the boot sequence of games they cracked or otherwise made available to the scene. Over time these got more elaborate and people started making them separate from the games to show off their prowess in coding, called demos. Nowadays the names serve to differentiate the runtime length and size of the program. Intro = short thing, demo = long full effort thing.
[+] baxter001|10 years ago|reply
An intro is a demo with a size limit.
[+] enqk|10 years ago|reply
It is standard demoscene terminology for a small Demo.
[+] xorcist|10 years ago|reply
Just wait until you get to the "megademo". :)
[+] alt_|10 years ago|reply
Cute, but doesn't really compare to non-js stuff: https://www.youtube.com/watch?v=qQNIKOD6WnY
[+] mrspeaker|10 years ago|reply
Ha, I love that you are so condescending about what he made, and one of the first comments on the video you linked to was "Yawn. We did better in 256 byte microcode strings in 1986."
[+] JoeCoder_|10 years ago|reply
Youtube is being slow for me today. If only there were a way to compress the video smaller...
[+] xentronium|10 years ago|reply
Different limitations (source vs compiled file size).
[+] agumonkey|10 years ago|reply
Ouh that was cute. The dragon curve part felt like cube ^^ inception. I'd pay to see that in an IMAX theater.
[+] cranklin|10 years ago|reply
i used to collect future crew's demos
[+] phaemon|10 years ago|reply
Indeed, astonishing how that fit all into just 1kB (plus a copy of Microsoft Windows).
[+] clippit|10 years ago|reply
How to unpack the compressed html file? I see a lot of binaries in there starts with "PNG".
[+] aikah|10 years ago|reply
crashed my browser(chrome latest,win 8.1) but there is a video capture linked .
[+] LeoPanthera|10 years ago|reply
Works fine in Safari 8.0.8, OS X 10.10.5