WebClonk

Mal schauen, wie das Miniblog-Format so funktioniert. Vielleicht fällt dabei ja ein Motivationsschub raus oder so.

Eine spielbare Version von WebClonk (aktuell noch Single-Player) findet sich unter http://webclonk.flgr.me/
Steuerung: WASD + Zifferntasten / Tab zum Inventarwechseln + Maus zum Graben / Werfen.

Die aktuelle Entwicklung läuft im NetPlay-Modus.
* http://o.flgr.me:1337/ ist eine etwas ältere Version des neuen Kartengenerators für unendliche große Karten.
* http://o.flgr.me:1337/index-net.html ist ein Proof of Concept Test für eine erste Version des NetCodes.

Schon vor ein paar Wochen habe ich den Kartengenerator so umgestellt, dass er unendlich große Karten unterstützt. Die Karte ist bei WebClonk in gezoomt 256x256 Pixel große Sektoren unterteilt, die aus jeweils 16x16 Pixeln Rohdaten entstehen.

Unendliche große Karten realisiert man üblicherweise, indem man eine Möglichkeit hat einen Sektor mit einer bestimmten Koordinate direkt zu erzeugen, ohne vorher angrenzende Sektoren erzeugen zu müssen. (Im Prinzip ist das das Konzept wahlfreien Zugriffs.)

Man nimmt dafür in der Regel eine Noise-Primitive, die für eine beliebige X,Y-Koordinate einen zufälligen deterministischen Wert zurück gibt. Populär sind Simplex- oder Perlin-Noise, möglicherweise auch fraktal iteriert (kann ich bei Interesse vielleicht mal genauer aufschreiben).

Bisher war die Grenze zwischen Himmel und Erdreich bei dem neuen Infinite-Map-Generator von WebClonk einfach ein Heightfield. Das ist beim Kartengeneratoren des alten Clonks sehr ähnlich. Man kann damit ganz hübsche Karten erhalten. Bei WebClonk gibt es sogar ab und an Abschnitte mit Canyons und so was, aber auch ruhigere sanft an- und absinkende Ebenen. Die Kontraste sind ganz nett.

Aber man erhält bei einem Heightfield keine Überhänge. Am letzten Wochenende habe ich mal 30 Minuten oder so investiert um das zu ändern: (Der Clonk hilft dabei, die Größe einzuschätzen.)



Im Wesentlichen erreiche ich den Effekt indem ich für jede Position eine X-Turbulenz berechne. Da ich die auch wieder aus Simplex-Noise ziehe, gibt es weiche Übergänge zwischen benachbarnden Koordinaten.

Na dann, wohlan!

Es wäre vielleicht ganz nützlich noch einen Link im Anfangspost reinzudingsen. Zum rumspielen und so!

Bei der Umstellung auf Client/Server hatte ich ursprünglich gehofft, den Client entlasten zu können. Der Client verwendete bislang die meiste Zeit dafür, die fertigen Sektoren aus den rohen Kartendaten zu rendern. Der Server muss die Kartendaten rendern, damit die Kollision pixelgenau sein kann.

Leider komprimieren die fertig gerenderten Sektoren viel schlechter als ich dachte. Ich hatte auch mit JPG und WebP experimentiert, war aber mit den Ergebnissen nicht zufrieden. Die Datenmengen sind für eine vertretbare Qualität einfach zu hoch.

Künftig wird also wieder jeder Client selbst die Aufgabe des Renderings übernehmen müssen. Zum Rendern läuft man üblicherweise einmal über alle Material-Texturkombinationen in der Reihenfolge in der sie letztendlich gerendert werden sollen. Für jede Kombination läuft man dann einmal durch alle Rohdaten des Sektors und schaut, ob das aktuelle Material an der Stelle ist. Das ist sehr teuer.

Im Server hatte ich deswegen mit einem Inverted Index experimentiert, der mir für jede Material-Texturkombination alle Positionen im Sektor gibt, an denen das entsprechende Material vorhanden ist.

Beim Server schauen die Renderingzeiten damit so aus:

Ohne Optimierung:   ~58.72 ms / Sektor (~17 Sektoren / Sekunde)
Mit MaterialCounts:  ~44.67 ms / Sektor (~22 Sektoren / Sekunde)
Mit Positionen:          ~17.95 ms / Sektor (~56 Sektoren / Sekunde)

Mit dem neuen Index lassen sich also effektiv 3x so viele Sektoren pro Zeiteinheit rendern als zuvor.

Der Client wird zum Rendern die generierten Chunks brauchen. In Rohform sähen diese mit dem Ellipsen-Algorithmus für Chunks aktuell so aus:



Diese Chunks müssen vom Server an den Client übertragen werden bevor er anfangen kann Sektoren zu rendern. Damit das Spiel sich gut anfühlt, sollte man nach Öffnen der Webseite möglichst schnell drin sein. Mehrere hundert KB nur für die Chunks durch die Gegend zu schleudern, wäre also ziemlich doof.

Glücklicherweise ist ohnehin nur die Form relevant ist und viele verschiedene Material-Texturen-Kombinationen nutzen sehr ähnliche Chunkformen. Man kann also die Texturen durch schwarz ersetzen, die Variantenanzahl reduzieren und (zumindest einen Teil der) doppelte(n) Chunkformen einfach weglassen:

Also von mir bekommst du 'n dicken Motivationskeks! :happy:

Ist schon sehr kuhl soweit - war quasi geflasht Clonk im Browser zu sehen. :smiley:

Ich glaub im Moment ist es mehr Motivation als sonstwas. Und auch dementsprechend schwierig irgendwen dafür zu begeistern. :wink:

Go flgr! :cool:

Ich glaube da ist dir jemand zuvorgekommen :slight_smile:

Eke Online

Leider nur für Google Chrome benutzer…

[x] <- Mein Stimme für eine Unity-Clonk-Engine für beide Projekte \o/

Safari geht auch, kann ich als mac-nutzer bestätigen!

Habs grad mit dem Iron-Browser Portable (http://www.srware.net/software_srware_iron_download.php) ausprobiert.
^^ Sehr Sehr schön ^^ Das is schon ein riesen stück Arbeit!!

Weiter so!!!

Gute Info! :grin:

Ruckelt bei mir ziemlich; muss ich mir aber mal genauer anschauen. :slight_smile:

Kennst Du den Autoren?

:cool: Schau mal hier: https://clonkforge.net/pr.php?pr=930

…was aber keinen technischen Hintergrund hat sondern eher ein "ich will nicht in mehr als einen Browser testen" ist:

var isChrome = /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor);
var isSafari = /Safari/.test(navigator.userAgent) && /Apple Computer/.test(navigator.vendor);

if (isChrome || isSafari) getUserData();
else menu.show(null, "Browser");

Naja. Das ist ja erstmal nur der Grund für die Fehlermeldung selbst.
Das heisst ja nicht, dass danach alles klappen würde, wenn man die einfach rausnimmt. Obwohl ich sagen muss, dass wenn es keine total schlimmen Probleme gibt, ich zumindestens eine "Auf eigenes Risiko trotzdem versuchen"-Möglichkeit gerne hätte…

Ich habe sein Teil leider bisher so noch nicht testen können.

Ja, es wird nicht alles klappen. An einigen Stellen wird beispielsweise explizit nur der webkit-Präfix für experimentelle Funktionalität verwendet, obwohl dasselbe auch mit entsprechedem Präfix von IE und Firefox implementiert ist. Was aber wieder nur eine Sache der Faulheit ist und keine technische Einschränkung.

>Ich habe sein Teil leider bisher so noch nicht testen können.


Dito, mir extra einen neuen Browser einzurichten, ist mir spontan auch ein Schritt zu viel.

Lohnt sich aber! :wink:

Lässt sich wirklich gut spielen. Man hat das typische Clonkfeeling beim Spielen und es fühlt sich irgendwie moderner an, besonders die Steuerung. Die Physik ist auch toll. Am Besten finde ich jedoch, dass man sich endlich, wie schon in OC, im Sprung bewegen kann!