Engine Proposal: Wasserdurchlässiges Material

Ist natürlich nur eine Spinnerei, ich weiß dass die Community viel zu klein ist, um noch Energie in Engine-Umbauten zu stecken und weiß auch nicht mal ob die Engine ‚offen‘ genug für solche Anpassungen ist.

Aber ich finde die Idee interessant, bin neugierig was andere davon halten und vielleicht taugt sie ja zumindest als Gedankenspiel.

Die Idee ist feste Materialen (also wie Erde oder Sand) zuzulassen, auf die Wasser aber reagiert als seien sie durchlässige Materialen (wie Himmel oder Tunnel). Diese Materialien würden sich wie bekannte feste Materialien verhalten, man kann darauf laufen, Bäume können darauf wachsen, Fahrzeuge darauf stehen, usw. aber Wasser und Regen, etc. würde einfach hindurch fallen.

Was hat das für einen Effekt? Es würde eine plumpe Form eines Versicker-Effekts erlauben. Das ergibt natürlich nur Sinn, wenn das wasserdurchlässigen Material durch eine tiefere undurchlässigere Schicht ergänzt wird, auf der sich schließlich das Grundwasser sammelt.

versickerung

(Dies ist ein GIF, falls es nicht abspielt, drauf klicken)

Der Sinn dahinter wäre eine realistischere Bergbau-Erfahrung zu ermöglichen, bei der man erst ab einer gewissen Tiefe mit dem altbekannten Problem des Grubenwassers konfrontier wird. Im Moment muss man sich erstens ständig mit Wasserpfützen und Seen auf der Oberfläche herumschlagen, kann das Grubenwasser aber sehr simpel damit lösen, dass man den Fahrstuhlschacht als einzigen Wasserzugang halbwegs wasserdicht platziert.

Die Idee dazu kam mir beim Basteln am Seepack und den unzähligen Problemen, die Wasser mit der Solid-Mask der Schiffe verursacht: Wasser muss programmatatisch vom Deck unters Deck, von vor dem Schiff hinters Schiff und von hinten nach vorne geschöpft werden, der Wasserstand kann vom Objekt nicht ordentlich für den Auftrieb ermittelt werden, weil die Stelle von der Solid-Mask verdeckt ist, usw. Da hatte ich mir mehr als einmal gewünscht, dass ich das Objekt einfach so konfigurieren könnte, dass Wasser die Solid-Mask einfach ignoriert. Dann fiel mir auf dass man so eine Konfiguration auch für Material zulassen könnte und welche interessanten Implikationen sich daraus ergeben.

Findet ihr das Konzept auch interessant? Seht ihr da grobe spielmechanische Probleme? Und hat jemand genug Einblick in die Engine, um beurteilen zu können wie (un-)möglich sowas umzusetzen wäre? Im Prinzip müsste die Eigenschaft der Festigkeit von Material geteilt werden, so dass Wasser darauf reagiert wie bei Himmel und andere Kollisionsabfragen wie auf Erde. Gleichzeitig würde man damit aber natürlich eine dritte Ebene einfügen, vor den durchlässigen Materialien (Himmel, Erde), der ja immer noch hinter diesem Material wartet und vor den flüssigen Matieralien, das sich in diesem Material anstauen kann. Auf einem Pixel können dann also Erde und Wasser und Tunnel gleichzeitig liegen.

WH_dev_GroundwaterTest.c4s (5,0 MB)

Hab mal versucht, die Idee per Skript und Material umzusetzen. (Das Wasser auf dem Screenshot war ursprünglich alles oben im großen Wasserbecken).
Erde unter oder neben Wasser wird zu nasser Erde. NasseErdpixel wandern langsam nach unten und ein bisschen zur Seite, bis sie auf ein wasserundurchlässiges Material (alles außer Erde) treffen, oder in eine Höhle (Sky/Tunnel) hineintropfen.

Die Karte wird in 100*100 Pixel Chunks unterteilt. Alle 3 Scriptcounter-Aufrufe wird ein weiterer Chunk im Array auf Wasser/NasseErde überprüft, und wenn vorhanden aktiviert, sonst deaktiviert. In jedem Scriptcounter-Aufruf werden in allen aktiven Chunks eine Anzahl von Pixeln (momentan 400) an einer zufälligen Position im aktiven Chunk ausgewählt und falls dort ein Pixel Wasser/NasseErde ist, wird versucht, den Pixel nach unten bzw. zur Seite zu verschieben.

Es sind noch die Standardpack HD-Clonks drinnen, überladen dass sie beim Graben nasse Erde als Wasserpixel ausgraben. Beim Sprengen von nasser Erde erstellt ein Hilfsobjekt Wasser. Aus nasser Erde können wenn gewünscht auch nasse Erdklumpen ausgegraben werden. Aktivieren um das Wasser herauszudrücken und einen normalen Erdklumpen zu erhalten.
Pumpe und Bohrturm sind überladen und stoppen, wenn man versucht Wasser zu vernichten, indem der Abfluss (oder ohne Abfluss die Pumpe) in festem Material oder in Flüssigkeit mit festem Material darüber liegt.
Viel Spaß beim Testen :slight_smile:

6 Likes

Coole Idee, das per Script zu lösen! Ich habe genau das gleiche Problem mit Clonk, dass ich das Verhalten von Wasser aktuell sehr unrealistisch finde.

Das unrealistische Verhalten ist mittlerweile ein Teil von Clonk. Stellt euch vor wie viele Szenarien kaputt gehen würden wenn es anders wäre. Sobald man einen Siphon gräbt hat man derzeit ruhe, bei einem Druckausgleich würden alle Höhlen überflutet werden :sweat_smile:

1 Like

Ja man könnte ja neben dem „Lehmboden“ auch „sandigen Lehmboden“ als Material einführen.

Das ist ja ein super cooler Prototyp zur Umsetzung der Idee! Ich habe die Versickerung gerade mit @Chemo in einem angepassten Szenario getestet: Die Idee war, in einer kompletten Erdwelt mit Höhlen zu spielen, wobei von oben aus einem See permanent Grundwasser heruntersickert. Dieses wird irgendwann zu einer Gefahr, wenn es sich sammelt, überall heraussuppt, alles vollläuft und man es nicht mehr schnell genug wegpumpen kann. Spielziel ist, Gold und Öl abzubauen. Für die optimale Herausforderung müsste man es ohne Aquaclonks spielen, damit das Wasser wirklich nervt :) Außerdem benötigten Gebäude Strom, der sich aber mit dem Sickerwasser erfreulich effektiv durch Wasserräder (aus dem Seepack) erzeugen ließ. Theoretisch sind somit „Sanduhr-Szenarien“ möglich, bei denen man gegen die Zeit bzw. Versickerung spielt und alles abbauen muss, bevor alles absäuft.

In der Praxis ist die aktuelle Umsetzung allerdings zu performance-lastig: Auch bei relativ kleiner Karte hatten wir recht schnell nur noch ~22 FPS, obwohl wir die „Abtastrate“ bereits von 400 auf 200 halbiert hatten. Abgesehen davon funktioniert das Prinzip aber ganz prima, insbesondere die „Sättigung“ in Wasser-Stau-Bereichen und es hat Spaß gemacht, das Wasser durch Gänge oder Betonsperren zu „lenken“ oder Bereiche zu schützen. Die Wasserräder sind außerdem die perfekte Ergänzung :)

Hier zwei Screenshots aus der frühen Phase des Spiels:


4 Likes

Genau. Großes Sorry, dass ich erst jetzt antworte. Ich hab einfach ne Weile nicht mehr reingeschaut.
Fantastische Arbeit @Wipfhunter! Das neue Wasser-Verhalten eröffnet viele interessante neue Aspekte.
Aber wie @Supaplex schon schreibt skaliert das performance-technisch nicht gut. Wir haben ein bisschen gebrainstormt wie man das optimieren könnte aber müssten da mal rumprobieren. Wenn ich irgendwann mal dazu komme schaue ich mir das Skript mal genauer an.

1 Like

Cool das euch der Prototyp gefallen hat :D @Supaplex Die Wasserräder aus dem Seepack sehen ja cool aus :) Ja so ein Sanduhr-Szenario hab ich mit dem System tatsächlich schon gebaut, allerdings in einem etwas anderen Setting- SvenitcoreMining:


Ziel ist es das rosarot/violette Svenit abzubauen und in einer tief unten im Erdreich platzierten Svenitschmelze zu Barren einzuschmelzen, die man dann verkaufen kann. Unverarbeitetes Svenit ist aber fragil und spawnt bei Erschütterung Meteoriten, die beim Aufschlag Vulkane von oben erzeugen. Lava suppt währenddessen langsam auch konstant von oben durch. Es gibt auch ein paar optionale Nebenquests die beim Abschluss Belohnungen geben. Tief unten ist das Erdreich instabil, und häufiges Graben/Sprengungen werden dort Folgen haben… Falls die Startkapsel in der Lava ist, kann man per Kontextmenü bis zu 2 mal eine Notbohrung starten.
@Chemo In Svenitcore Mining sind einerseits die Chunks kleiner (problematisch ists ja wenn in Chunks ohne Flüssigkeit/NasserErde wirklich alle Pixel überprüft werden müssen, und nicht durch Finden einer Flüssigkeit vorher abgebrochen werden), dafür mit häufigeren Checks, und andererseits ist die Gesamtzahl der Pixel, in allen Aktiven Chunks versucht wird zu versetzen, durch ein globales Maximum limitiert. Wenn ihr aber noch andere Ideen für Optimierung habt, nur gerne her damit :slight_smile:

Anbei der Link zum Siedelszenario SvenitcoreMining (auf Discord hochgeladen, da zu groß für Clonkspot). https://cdn.discordapp.com/attachments/851738818503770153/1199070872175128747/WH_SveniteCoreMining.c4s?ex=65f893c5&is=65e61ec5&hm=0b17a87055f35e1ea8f2bb0baa29aaf2f4ffbf4f53260beaeaa93a96bd4e39b5&
Viel Spaß damit :volcano:
(Edit: Downloadlink aktualisiert)

3 Likes

Was für eine geniale Idee :)! Leider ist der Link down

Link sollte wieder gehen, ansonsten einfach im Clonk Discordserver unter content-collection suchen

1 Like