Heute erzähle ich von einem neuen Spielfeature, das ich das erste mal in Dark Souls gesehen habe. Seitdem wollte ich es schon immer mal kopieren, endlich ist der Tag gekommen! Ähnlich wie in der Vorlage kann man nun in Dungeon Sounds die Phantome anderer Spieler sehen, die an den gleichen stellen vorbeigekommen sind und den Dungeon erkunden. Man sieht sie aber nicht nur, man hört sogar die Lieder, die sie gespielt haben als entferntes Echo.
Diese mysteriösen Phantome erscheinen im Spiel leuchtend blau und verblassen, wenn man ihnen zu nahe kommt.
Nun ein wenig zur technischen Lösung des ganzen:
Das Spiel logt ab sofort die eigenen Daten ( Position und gespielte Noten ) der letzten 60 Sekunden als ein Segment. Ist dies voll, werden die gesammelten Daten gebündelt und an einen Server geschickt. Jedes Segment wird einem Spielquadranten, die eine Reichweite von 10x10 Feldern haben, zugeordnet.
Nun schickt das Spiel jede 2 Minuten eine Anfrage an den Server, ob in dem aktuellen Quadranten des Spieles denn nicht mal ein Spieler vorbei gekommen ist. Wenn dem so ist, schickt der Server das entsprechende Segment des Spielers ( 60 Sekunden! ) zurück zum Spieler und zeigt sie an.
Wir sind nach wie vor dabei die Atmosphäre im Spiel zu verdichten, also gibt es ab sofort: Kerzen!
Wer sich noch an den Post über unser Mappingsystem erinnert, dem fällt sicher auf: Einzelne Kerzen zu platzieren ist gar nicht mal so einfach! Da wir Objekte eigentlich nur auf einem Tile-Raster mittels Skriptbefehl aufstellen können war uns schnell klar, dass wir so nicht weiterkommen. Unsere Vorstellung war, ganze Räume mit Kerzen zu schmücken und so die Stimmung deutlich zu erhöhen.
wie sind wir also vorgegangen? Ich präsentiere, Kerzentexturen:
Ähnlich wie wir unseren Dungeon mittels einer Textur speichern, verfahren wir mit den Kerzen. Jeder graue Punkt erzeugt eine Kerze im Spiel, wobei die Helligkeit des Pixels bestimmt, wie hoch die entsprechende Kerze platziert wird.
Die Kerzentextur ist quasi eine detailreichere Variante der Dungeonkarte und wird im Spiel einfach über diese drauf gelegt. Im Bild sieht man gut, wie die Textur ( die in diesem Fall eine Fläche von 3x3 Dungeontiles abdeckt) in das Spiel integriert wird. Durch die höhere Auflösung können so genauer die Kerzen plaziert werden. In einer Kerzentextur wird ein Feld mit 20x20 pixel beschrieben, theoretisch könnten also 400 Kerzen paziert werden.
Die Größe der Kerzentextur ist übrigens variabel, muss nur jeweils durch 20 teilbar sein. eine Kerzentextur kann also ein einzelnes Feld, oder einen ganzen Raum abdecken!
Ein Kerzenareal wird dynamisch mittels einer Skriptzeile eingebunden:
Parametererklärung: path Pfad zur Kerzentextur maxheight Höhenmodifikator - er bestimmt, wie hoch eine Kerze maximal plaziert werden kann. Die tatsächliche Höhe wird interpoliert von Schwarz (0) bis Weiß (Höhenmodifikator). candleType Kerzentyp. Wir haben sowohl Weiße (0), als auch rote (1) Kerzen. position Position des Areals auf der Dungeonkarte id Id des Objektes, um es später anzusprechen und zu modifizieren.
Großartig! damit ist alles erklärt!
Nein halt, vielleicht ist dem ein oder anderen aufgefallen, dass die Kerzentextur noch eine weitere Information speichert. Die Farbe, die eine Kerze umgibt, legt fest, wie spät sie entzündet wird.
Mittels des skriptbefehls
Ist es möglich die Kerzen per Skript zu aktivieren. Dies war uns wichtig für Cutscenes oder wenn Räume betreten werden! Die Kerzen werden zeitversetzt aktiviert, je nach Farbwert, der sie umgibt: Die roten Bereiche werden später aktiviert, als die grünen. Durch saubere Verläufe in der Textur können schöne Effekte erzeugt werden, hier ein letztes Beispiel:
Ich finde es sehr beeindruckend, wir ihr mit eurem "Paint"-Leveleditor angefangen habt und diesen nach und nach durch weitere Funktionen erweitert! Die Kerzentextur ist ein schönes Beispiel, wieviele verschiedene Informationen man über Farben in einem Bild codieren kann. Danke für den Einblick!
Die Kerzen sind ein atmosphärischer Zusatz und werten das Gruftfeeling sehr auf! Habt ihr mal über herabtropfendes Wasser nachgedacht mit passendem Platschgeräusch? Das ist doch ein schöner Dungeonsound!
Wird es eigentlich auch eine größere bzw. tiefgehende Story geben? Bisher sieht es nicht danach aus, aber falls dem doch so sein sollte, kämt ihr bei eurem musikalischen Fokus mMn kaum an eigenen Leitmotiven für wichtige Charaktere vorbei (s. z.B. Chrono Trigger, Terranigma).
Mir würde das jedenfalls sehr gefallen.
Aphonia heroica: Unvermögen eines Helden, eigene Dialoge zu generieren. Prominente Fälle: Link (Legend of Zelda), Crono (Chrono Trigger), Edel (Hell Gates 2)
Pi = 2! ...zumindest in 1D...
Kutte benutzt Dinkelplätzchen. - Es ist sehr effektiv!
Wir spielen derzeit mit dem Gedanken, zumindest die Texte, die es in der Game Jam Version gab und die die Geschichte der "Welt" erzählen nochmal zu über arbeiten. Mir wäre es sogar lieber, diesmal zuerst eine deutsche Version zu veröffentlichen, weil ich darin doch ein Stück besser bin
Es gibt ein paar Schlüsselfiguren in der Geschichte, allerdings wird die Geschichte hauptsächlich über die Texte erzählt, die man im Spiel findet, die aber kompakt gehalten sind. Csg will aber auf jedenfall auch mehr Fokus auf Kamerafahrten und Cutscenes legen, die vielleicht noch das Quentchen mehr beitragen und ich arbeite noch an grafischen Details die dem Spieler noch besser helfen, sich in der Welt zurecht zu finden.
Eine Story ala Chrono Trigger wird es wohl eher nicht geben, wir haben uns bei der Komplexität und auch dem Inhalt an einem Märchen orientiert, die ja bekanntermaßen eher Symboltief als wirklich Charakterstark sind.
Kurz: Wir bereiten die Geschichte so liebevoll auf wie möglich, der Fokus liegt aber definitiv auf dem Gameplay.
Aphonia heroica: Unvermögen eines Helden, eigene Dialoge zu generieren. Prominente Fälle: Link (Legend of Zelda), Crono (Chrono Trigger), Edel (Hell Gates 2)
Pi = 2! ...zumindest in 1D...
Kutte benutzt Dinkelplätzchen. - Es ist sehr effektiv!