Aus der beliebten Kategorie „Sachen, die ich unglaublich toll finde und die ich schon vor Jahren hätte mitkriegen sollen, ich aber erst vor Kurzem kennengelernt habe“ (in der auch Undertale zu finden war): Pixelflut.
Pixelflut ist… ein Spiel? Ein kompetetives Kunstprojekt? Es ist schwierig, eine Kategorie dafür zu finden. Also beschreibe ich Pixelflut einfach nur.
Man nehme ein Bild in irgendeiner Auflösung. Dieses Bild liegt im Speicher eines Servers und wird auf einem Bildschirm angezeigt, mit einem Beamer gegen eine Wand geworfen oder ins Netzwerk gestreamed. Gleichzeitig bietet der Server eine Schnittstelle, um schreibend auf dieses Bild zuzugreifen. Über TCP, und eigentlich gibt es nur einen nennenswerten Befehl: PX <x> <y> <color>
, mit einem Zeilenumbruch am Ende.
<x>
und <y>
geben die Koordinaten des zu schreibenden Pixels an. <color>
die Farbe, auf die dieses Pixel gesetzt wird. Die Farbe ist üblicherweise RGB, aber einige Implementierungen nehmen auch RGBA oder Grauwerte (wobei letztere den Vorteil haben, dass der Befehl dadurch kleiner wird).
Es gibt noch ein paar andere Befehle, aber keinen anderen Befehl, der Pixel verändert. Jedes Pixel muss also mit einer Menge Overhead einzeln gesetzt werden. Der Trick ist jetzt, dass man dieses sehr ineffiziente Protokoll so effizient wie möglich umsetzen will. Denn es ist ein Multiplayer-Spiel, und wenn dutzende bis hunderte Spieler gleichzeitig Befehle an den Server senden, dann sind Teile des eigenen Bildes schon wieder überschrieben, bevor man das letzte Pixel gesetzt hat. Heraus kommt ein flackerndes, sich stets veränderndes und ziemlich verglitcht aussehendes Bild.
Das Spiel gibt es seit Jahren, länger schon, als ich selber zum Congress gehe und taucht auf allen möglichen Chaos-Veranstaltungen auf. Es hat zu so viel Traffic geführt, dass untersagt wurde, es über WLAN zu betreiben (was sowieso ungünstig ist, weil viel langsamer). Ich aber habe es erst auf dem 37C3 wirklich bewusst wahrgenommen, durch den Werbespruch „Play more Pixelflut“.
Dort war eine schnelle (wenn auch, wie der Entwickler kurz vor dem Congress feststellen musste, nicht die schnellste) Rust-Implementierung namens Wellenbrecher im Einsatz. Ich habe mich erst an Tag 3 überhaupt über Pixelflut informiert und erst an Tag 4 ausprobiert, wie man es benutzt. Dementsprechend war mein Ergebnis nicht mehr als ein grünes Rechteck, das aber stabil genug angezeigt wurde.
Für den nächsten Congress will ich aber vorbereitet sein und arbeite gerade an meinem eigenen Rust-Client. Natürlich gibt es andere, effizientere Clients online, aber der Spaß an der Sache ist ja, den Client selber zu schreiben. Es gibt auch schier unendliche viele Optimierungsmöglichkeiten, von denen mir nur ein paar selber einfallen. Ich schreibe einfach eine solide Basis, die ich dann auf dem nächsten Congress ausprobieren und dort verbessern kann. Denn wie soll ich das auch ohne Konkurrenz wirklich testen?
Den schnellsten Client zu haben, ist nicht mein Ziel, dafür müsste ich da zu viel Arbeit reinstecken. Aber mit ein bisschen Arbeit sollte ich schon einen ganz soliden Client kriegen, der stabil kleinere bis mittelgroße Bilder und Animationen anzeigen kann. Mal schauen.