header Ich möchte Deutsch. YouTube
Clonk Livestream on Twitch.tv!
Not logged inClonkspot Forum
Forum Home Help Search Register Login
Up Topic Deutsch / Miniblogs / WebClonk
- - By flgr Date 05.03.2014 15:59 Edited 05.03.2014 16:38
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.
Parent - By flgr Date 05.03.2014 16:10 Edited 05.03.2014 16:17
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.
Parent - By Nachtfalter (More than 1000 posts.) Date 05.03.2014 16:23
Na dann, wohlan!

Es wäre vielleicht ganz nützlich noch einen Link im Anfangspost reinzudingsen. Zum rumspielen und so!
Parent - By flgr Date 05.03.2014 16:32 Edited 05.03.2014 16:35
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:

Parent - - By Gecko (More than 500 posts.) Date 05.03.2014 20:38
Also von mir bekommst du 'n dicken Motivationskeks! :happy:

Ist schon sehr kuhl soweit - war quasi geflasht Clonk im Browser zu sehen. :D
Parent - - By flgr Date 06.03.2014 00:45
Ich glaub im Moment ist es mehr Motivation als sonstwas. Und auch dementsprechend schwierig irgendwen dafür zu begeistern. ;)
Parent - By Maddino (More than 50 posts.) Date 06.03.2014 13:02
Go flgr! :cool:
Parent - - By Nachtfalter (More than 1000 posts.) Date 06.03.2014 17:21
Ich glaube da ist dir jemand zuvorgekommen :-)

Eke Online
Parent - - By Tflk3 (More than 50 posts.) Date 06.03.2014 18:50
Leider nur für Google Chrome benutzer......
Parent - - By Maddino (More than 50 posts.) Date 07.03.2014 17:04
Safari geht auch, kann ich als mac-nutzer bestätigen!
Parent - By Tflk3 (More than 50 posts.) Date 07.03.2014 18:45
Gute Info! :grin:
Parent - - By Luchs (More than 1000 posts.) Date 08.03.2014 13:31
...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");
Parent - - By Zapper (More than 500 posts.) Date 08.03.2014 14:06
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.
Parent - - By Luchs (More than 1000 posts.) Date 08.03.2014 15:30
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.
Parent - - By Mirosch (More than 15 posts.) Date 03.04.2014 10:57
Okay, der Post ist alt, aber ich hab mich hier gerade erst angemeldet (schöne Seite, schönes Forum, gefällt mir). Zum Thema: Anfangs, das war vor 2 Jahren, hab ich mich auf Grund der Performance erstmal auf Chrome konzentriert, später hatte ich ne gut lauffähige Version für alle Browser. Schließlich kam der Sound über die Web Audio API dazu. Und dabei gibt es derzeit einfach zu krasse Unterschiede und Unmöglichkeiten bei anderen Browsern, so dass ich die Browser-Wahl für Eke Online erstmal beschränkt habe. Also nicht nur reine Faulheit :wink:. Die ganze Situation kann sich in ein paar Monaten auch schon geändert haben, geht ja fix in der Branche.
Parent - - By Luchs (More than 1000 posts.) Date 03.04.2014 17:26
Du solltest in dem Fall aber wirklich lieber konkret auf die Web Audio API testen und nicht den User Agent. So verwendet etwa Opera ab 13 ebenso Chromium und unterstützt diese API dementsprechend, wird aber von deinem Test ausgeschlossen.
Parent - By Mirosch (More than 15 posts.) Date 04.04.2014 10:11
Ja, ich werde das Thema sicher noch mal angehen. Allein das CSS für alle Browser anzupassen, frisst sehr viel Zeit. Oft stimmt die Positionierung der Elemente nicht, selbst wenn es nur ein einziger Pixel ist, sowas mag ich nicht ignorieren.
Parent - - By ala (More than 1000 posts.) Date 08.03.2014 17:11

>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.
Parent - By Maddino (More than 50 posts.) Date 08.03.2014 18:02
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!
Parent - By Tyron (Tyrone) Date 06.03.2014 20:54
[x] <- Mein Stimme für eine Unity-Clonk-Engine für beide Projekte \o/
Parent - By Tflk3 (More than 50 posts.) Date 07.03.2014 18:39 Edited 07.03.2014 18:45
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!!!
Parent - - By flgr Date 08.03.2014 00:01
Ruckelt bei mir ziemlich; muss ich mir aber mal genauer anschauen. :)

Kennst Du den Autoren?
Parent - - By Tflk3 (More than 50 posts.) Date 08.03.2014 07:34
Parent - - By flgr Date 08.03.2014 18:30
Hm, was ist Eke Reloaded? War das auch schon im Browser?

Ich hab's mir mal genauer angeschaut (läuft aber bei mir echt krass langsam mit 6 - 8 FPS, kA warum) und würde gerne mehr über den Entwicklungsprozess erfahren, falls das irgendwo dokumentiert ist.

Sah aber so aus als seien bisher kein NetPlay und auch keine modifizierbare Karte implementiert. Oder täusche ich mich? IMHO sind genau das die spannenden Aspekte an Clonk.

Wenn man einfach nur Hazard- oder EKE-Feeling möchte, gibt es doch auch massenweise Alternativen wie Soldat oder so was. Ich brauch schon Buddeln im Erdreich und Rohstoffe und so. :)
Parent - By Nachtfalter (More than 1000 posts.) Date 08.03.2014 18:32
Eke Reloaded war eine neu aufgesetzte Version vom alten ClonkPlanet EKE für Clonk Rage. Das Ding da ist dasselbe, nur dass es scheinbar im Browser läuft und man kein ClonkRage mehr für benötigt!
Parent - - By Maddino (More than 50 posts.) Date 09.03.2014 09:44
Clonk Planet --> Eke

Clonk Rage --> Eke Reloaded

Online --> Eke Online (2014)

Und ich finde du hast Recht. Das richtige Clonkfeeling entsteht erst durch das Buddeln^^ Aber das war ja nicht sein Ziel. Der Entwickler wollte nur Eke in den Browser bringen. :sad: Für den Rest kannst du ja sorgen! :tongue:
Parent - - By Tflk3 (More than 50 posts.) Date 09.03.2014 11:34
:cool:
Mal so ne Frage neben bei.... ist's denn möglich ähnlich wie im Clonk-Editor eigene Objecte für "Web-Clonk" zu erstellen oder wird das eine Standart Version für alle?
(Mir is klar das es nicht so weit ist aber wo soll's mit der Entwicklung hingehen?)
Parent - - By flgr Date 09.03.2014 13:59 Edited 09.03.2014 14:02
Ja, das ist geplant. Im Prinzip kann man auch jetzt schon eigene Objekte erstellen. Der Code für den Stein sieht so aus:

Rock.prototype.hit = function(speed) {
  if (speed > 0.75) {
    playSound("sounds/RockHit.wav", speed / 3.0, this.x, this.y);
  }
}


Der für den Feuerstein so:

var Firestone = function(x, y) {
  C4Object.call(this, x, y); 

  this.scale = (randomX(0.8, 1.3) + randomX(0.8, 1.3) + randomX(0.8, 1.3)) / 3;
  this.width = Math.ceil(this.width * this.scale);
  this.height = Math.ceil(this.height * this.scale);
  this.gridX = Math.floor(Math.random() * 3);
}

Firestone.prototype.hit = function(speed) {
  if (speed > 0.75) {
    var boundXs = boundBy(this.xs * 2, -5, +5);
    var boundYs = boundBy(this.ys * 2, -5, +5);

    createExplosion(this.x + boundXs, this.y + boundYs, 48 * this.scale * this.scale);
    this.remove();
  }
}
Parent - - By Maddino (More than 50 posts.) Date 11.03.2014 07:17
Was ist das für eine Programmiersprache?
Parent - - By Zapper (More than 500 posts.) Date 11.03.2014 09:47
Ich rate einfach mal drauf los: JavaScript
Parent - By Gecko (More than 500 posts.) Date 11.03.2014 18:25
Und Objektorientiert. :)
Parent - - By Shadow (More than 200 posts.) Date 24.04.2014 15:37 Edited 24.04.2014 15:43
He flgr, gibt es hierzu inzwischen paar News / neue Features die noch nicht auf webclonk.flgr.me gehostet sind?

Aktuell ist es halt wirklich nur Spielerei bzw. kann man ja so gut wie nichts machen. Ne Hütte / Basis und was außenrumm wäre also schon klasse. Ist es geplant das langfristig auch mit anderen Leuten im Browser spielen zu können, also so richtig als Browsergame für toll undso :)?

Der Sound wenn man gräbt ist btw. schon extrem penetrant, der sollte seltener kommen. Klettern und hangeln wäre auch noch sehr hilfreich. Lava / Säure / wäre Stark, und man kann Schwefel und das komische weiße Zeugs noch nicht ausgraben oder? Ah und es gibt zu viele Objekte im Erdreich, außerdem Erdreich vllt. nicht unendlich groß nach unten machen, nur die Welt nach links und rechts unendlich gestalten. (Vllt. ein Menü wo man das einstellen kann oder aber die Option das man irgendwann, wenn man ewig nach rechts läuft wieder am linken Kartenrand ist, ohne das zu merken.

PS: Ich habe gerade bemerkt das Objekte sich stapeln und man auch drüberlaufen kann, dass ist richtig gut :)!
Parent - - By flgr Date 24.04.2014 16:07 Edited 25.04.2014 11:45
Merci auf jeden Fall mal fürs signifikante Feedback.

Ich hab mein Backend an Ostern mal von JavaScript zu Java umgestellt. Ich war vorher echt mehr am Kämpfen mit Async-Code als sonstwas. Wenn irgendwann Generatoren mit yield return kommen, wird das alles besser.

Aber ja, ich bin wieder dran. Ich war nur etwas enttäuscht, wie wenig Feedback aus der alten Community kam (vor allem auf das Techminiblogzeugs da oben, das auch Zeug ist, das noch nicht in der gereleasten Version ist — das interessiert hier einfach niemanden; schade drum) und hab zwischendurch mal noch ein Indie-GameDev-MeetUp gegründet als Supportplattform für mich und andere anonyme Spieleentwickler.

>  Ist es geplant das langfristig auch mit anderen Leuten im Browser spielen zu können, also so richtig als Browsergame für toll undso :)?


Das ist die Priorität Nummer 1. Basisbau, Energie und sonst irgendwie tausend kleinere Features wären total einfach zu implementieren, aber ich will sofort und als nächstes Multiplayer. Das wird das Spiel zu dem machen, was es überhaupt ist.

> Lava / Säure / wäre Stark, und man kann Schwefel und das komische weiße Zeugs noch nicht ausgraben oder?


Aber, aber. Das ist doch kein komisches weißes Zeug sondern Schießpulver. Vermutlich wird Schwefel eh komplett dadurch ersetzt, langfristig. Was OpenClonk richtig macht, ist unnötige Dopplungen im Gameplay zu vermeiden.

> Ah und es gibt zu viele Objekte im Erdreich, außerdem Erdreich vllt. nicht unendlich groß nach unten machen, nur die Welt nach links und rechts unendlich gestalten. (Vllt. ein Menü wo man das einstellen kann oder aber die Option das man irgendwann, wenn man ewig nach rechts läuft wieder am linken Kartenrand ist, ohne das zu merken.


Eigene Szenarien sind geplant. Ich muss mal schauen. Ich fänd's cool, wenn man all so was mit eigenem Code lösen könnte. ClonkX hatte viel Spiellogik in seiner Scriptsprache. Das hat was, das ganze Spiel umcoden zu können. Zumindest ist der Kartengenerator schon mal ein Konzept. Eine begrenzte Karte würde nach unten hin halt einfach nur noch Granit rauswerfen oder meinetwegen Bedrock oder so. Ein Fünfzeiler.

> PS: Ich habe gerade bemerkt das Objekte sich stapeln und man auch drüberlaufen kann, dass ist richtig gut :)!


Es steckt teilweise mehr dahinter als man sofort auf den ersten Blick sieht. Das Feature war mir wichtig. Im alten Clonk konnte man nie wissen, ob sich hinter den zwei Goldstücken nicht noch 500 weitere verbergen. Wenn Objekte sich stapeln, umgeht man das. Außerdem kann man so Wälle aus Steinen aufschichten. (Später kann man Zeug per Drag&Drop aus dem Inventar direkt in einen Umkreis um den Clonk auf die Karte ziehen und damit auch Brücken und so was aus losen Objekten improvisieren.)

Mein größtes Problem ist, dass ich eine One-Man-Show bin. Und ich hab eh immer so viele Baustellen. Vielleicht mag ja irgendwann auch noch jemand mitcoden oder zumindest mal den Code modden, der schon da ist.
Parent - - By Nachtfalter (More than 1000 posts.) Date 24.04.2014 20:24

>(vor allem auf das Techminiblogzeugs da oben, das auch Zeug ist, das noch nicht in der gereleasten Version ist — das interessiert hier einfach niemanden; schade drum)


Das würde ich so nicht pauschalisieren. Viele sind einfach nur Mitleser, weil sie sich "zu doof" fühlen um da irgendwie mitreden zu können. Trotzdem ist es unterhaltsam!
Parent - By Shadow (More than 200 posts.) Date 24.04.2014 22:29
Ich muss gestehen, dass ich für sowas "zu doof" bin bzw. kenne ich mich einfach nicht genügend aus in der Thematik!
Parent - - By Luchs (More than 1000 posts.) Date 24.04.2014 21:45

>Ich hab mein Backend an Ostern mal von JavaScript zu NodeJS umgestellt. Ich war vorher echt mehr am Kämpfen mit Async-Code als sonstwas. Wenn irgendwann Generatoren mit yield return kommen, wird das alles besser.


Node ist doch immer noch JS? ;)

Ich finde dabei jedenfalls Promises recht angenehm, damit kann man gut arbeiten. Es ist zwar etwas Arbeit, für alle externen Aufrufe entsprechende Funktionen bereitzustellen, aber es lohnt sich. Ansonsten kann man ja mit node --harmony tatsächlich auch jetzt schon Generatoren verwenden :)
Parent - By flgr Date 25.04.2014 11:46

> NodeJS


Java. Was erzähl ich denn da wieder für Sachen.

> Ich finde dabei jedenfalls Promises recht angenehm, damit kann man gut arbeiten. Es ist zwar etwas Arbeit, für alle externen Aufrufe entsprechende Funktionen bereitzustellen, aber es lohnt sich. Ansonsten kann man ja mit node --harmony tatsächlich auch jetzt schon Generatoren verwenden :)


Aber auch nur im Backend. Ich hab mich von Code-Sharing erst mal verabschiedet und war überrascht, wie viel produktiver ich mit Java unterwegs war.
Parent - By Shadow (More than 200 posts.) Date 12.05.2015 19:42
Hey ich komme nicht auf Webclonk, Seite down :(? Passiert hier noch was?
Up Topic Deutsch / Miniblogs / WebClonk

Powered by mwForum 2.29.7 © 1999-2015 Markus Wichitill