ASCII-Spiel - ein Kompromiss zwischen Authentizität und Komfort

Hallo alle zusammen! Bei der Entwicklung eines als Textmodus stilisierten Spiels bin ich auf den erwarteten Widerspruch gestoßen. Einerseits sollte das Spiel mit dem Geist des Textmodus gesättigt sein, denn dafür gefällt es mir und ich hoffe, Fans von Retro-Spielen werden es mögen. Andererseits möchte ich, dass das Gameplay so unterhaltsam und modern wie möglich ist. In diesem Artikel werde ich fünf Punkte beschreiben, bei denen ich vom True-Text-Modus abgewichen bin. Habe ich es geschafft, die alphanumerische Stimmung der Röhre im Spiel zu halten? Ich bitte um eine Meinung!



1. Zeichensatz


Absolut alle Grafiken im Spiel werden mit den Zeichen erstellt, die auf der Tastatur eingegeben werden. Genauer gesagt werden die Zeichen aus der ASCII-Tabelle vom 32. bis zum 126. Zeichen verwendet.



Die Texte im Spiel sind jedoch in mehreren Sprachen lokalisiert. Jetzt unterstütze ich Russisch und Englisch parallel, aber ich möchte noch ein paar hinzufügen, einschließlich Chinesisch. Zeichen aus ASCII-Tabellen, auch erweiterte, reichen für diese Zwecke eindeutig nicht aus.



Dialoge im Spiel können Charaktere enthalten, die nicht aus dem authentischen Bereich stammen. Diese Zeichen sind jedoch nicht am Design beteiligt. Grafiken sind nur ASCII.

2. Genauigkeit der Unterzeichen


Im Gegensatz zu Textmodi verwendet ASCIIDENT die Pixelgenauigkeit zum Verschieben von Textebenen und Sprites.



Im Textmodus sieht das Verschieben des Sprites um eine Position wie ein spürbarer Sprung aus. Für ein so dynamisches Spiel wie ASCIIDENT ist dies aus Sicht des modernen Spielerlebnisses nicht akzeptabel. Daher habe ich für einzelne Sprites und Textebenen, auf die später noch eingegangen wird, eine reibungslose Bewegung ausgeführt.

Um die Authentizität aufrechtzuerhalten, halte ich mich an die folgende Regel. Innerhalb einer Textebene sind alle statischen Objekte klar im Zeichenraster ausgerichtet. Darüber hinaus besteht jedes Sprite aus Zeichen, die ebenfalls in einem Zeichenraster ausgerichtet sind.

Ebenen und sich bewegende Objekte können relativ zueinander in einem sub-symbolischen Abstand angeordnet sein. Dies sorgt für eine reibungslose Bewegung und dementsprechend für ein komfortables Gameplay. Dies ist ein solcher Kompromiss.

3. Parallaxe


Das Spiel verfügt über mehrere Textebenen, die sich mit unterschiedlicher Geschwindigkeit bewegen und den Parallaxeeffekt realisieren. Die Symbole der oberen Schichten überlappen die Symbole der unteren. Bei der Genauigkeit von Unterzeichen ist das Überlappungskriterium eine Überlagerung von mehr als 50% der Breite und / oder Höhe der Textzelle. Mit einem einfachen Z-Puffer ist diese Überlappung einfach zu implementieren.



Parallaxe mit gleichmäßiger Bewegung von Ebenen ist eine sehr ausdrucksstarke grafische Technik. Ja, dies kann die Authentizität des Textmodus erheblich beeinträchtigen. Ich entschied mich jedoch für Parallaxe. Es fällt sehr schön aus.

4. Animation


Animation einzelner Sprites im Spiel "ehrlich", ausschließlich im Textmodus. Die Position jedes Zeichens wird im Textraster ausgerichtet. Animationen werden durch Ersetzen von Zeichen in Zellen erhalten.



Ich fand es sehr wichtig, die Integrität von Sprite-Animationen aufrechtzuerhalten. Dies ist wahrscheinlich die Hauptsache, die das Spiel so retro-attraktiv macht. Darüber hinaus wird es mit dieser Art von Animation technisch sehr einfach, animierte ASCII-Sprites zu erstellen und zu bearbeiten. Ich konnte nicht widerstehen und machte einen eingebauten ASCII-Editor im Spiel. Es kann jederzeit ein beliebiges Grafikelement geladen und geändert werden. Sie können beispielsweise die Truhe bearbeiten, indem Sie Animationsrahmen hinzufügen. Nachdem Sie alle Truhen an allen Stellen des Spiels gespeichert haben, werden sie neu. Jeder Spieler kann dies tun und so seinen eigenen Mod des Spiels erstellen.


Manchmal benötigen Sie jedoch eine reibungslose Animation! Zum Beispiel gibt es im Spiel einen solchen Ort, an dem biologische Lichtwellenleiter wachsen. Über den Betten fliegt eine Drohne, die die optische Faser mit einer giftigen Flüssigkeit bewässert. Die Flüssigkeit sollte glatt tropfen, sonst hässlich. Um solche Effekte zu implementieren, habe ich Sprite-Generatoren und deren Bindung an andere Sprites in der Spielwelt erstellt. Technisch gesehen ist jeder Tropfen ein separates Sprite, das sich mit Subpixel-Genauigkeit bewegen kann. Wieder ein vernünftiger Kompromiss.

5. Licht, Farbe und Schriftart


Viele Leute, denen ich das Spiel zeige, machen die Bemerkung, dass mein Spiel zu viele Farben enthält. In Textmodi gab es keinen solchen Farbreichtum. Tatsache ist, dass ich eine Vollbild-Lichtkarte implementiert habe, die eine beliebige Anzahl von Lichtquellen berechnet. Gleichzeitig ist die Farbe jedes Zeichens 24-Bit (16.777.216 verschiedene Farben). Manchmal sieht das Bild bunt aus.



Um Retro-Farbmodi zu emulieren, habe ich sieben zusätzliche Optionen ausgewählt: drei Monochrom-Modi, zwei 16-Farben-Modi (DOS / Mac), 2-Bit- und Game Boy-Modus. Der LED-Schriftmodus ist ebenfalls verfügbar. In diesem Modus wird jedes Pixel jedes Zeichens von benachbarten getrennt. Das folgende Video zeigt alle Modi - wie sie sich auf das Bild auswirken.


Der Farbkonvertierungsalgorithmus für Monochrom-Modi hat dies ermöglicht. Zuerst berechne ich die Farbhelligkeit (R, G, B):

V = 0,3 * R + 0,59 * G + 0,11 * B

Monochrome Retro-Monitore haben unterschiedliche Farbtöne für unterschiedliche Symbolhelligkeit. Daher muss sich auch der Farbton ändern. Ich verwende eine solche lineare Interpolation:

RR = sqrt (V) * (monoR1 * (1 - V) + monoR2 * V)

GG = sqrt (V) * (monoG1 * (1 - V) + monoG2 * V)

BB = sqrt (V. ) * (monoB1 * (1 - V) + monoB2 * V) Endfarbe

(RR, GG, BB)

Für 16-Farben-Modi verwende ich einen anderen Algorithmus. Für jede Farbe (R, G, B) suche ich die nächstgelegene Farbe in der Palette. Das ist alles.

Der 2-Bit- und Game Boy-Modus enthält nur vier Farben in der Palette. Eine einfache Suche nach der nächsten Farbe ergibt ein sehr dunkles Bild. Bevor ich nach einer Farbe in der Palette suche, mache ich die Normalisierung:

d = 1 / max (R, G, B)

normR = d * R, normG = d * G, normB = d * B Die

Formeln sind schematisch. Schecks auf Division durch Null wurden nicht erwähnt. Ich hoffe, dass jeder, der sich für ASCIIDENT entscheidet, ein Farbschema auswählen kann, das seine Retro-Seele maximal wärmt.

6. Konsole mit einem ehrlichen Textmodus


Bei der Erstellung des Spiels kam die Idee, Computerterminals mit einem ehrlichen Textmodus in die Spielwelt zu integrieren. Sie können sich ihnen nähern, sich verbinden und arbeiten / spielen.

Wenn das Spiel selbst als 80x25-Textmodus mit reibungslosem Bildlauf und Parallaxe von Textebenen stilisiert ist, hat der integrierte Terminalbildschirm eine Auflösung von 72x20 Zeichen, ohne dass die Möglichkeit besteht, über dieses Raster hinauszugehen.

Alle Anwendungen für eingebettete Terminals (einschließlich des Bootloaders) sind in der Programmiersprache DUHASM geschrieben. Diese Sprache ähnelt Assembler, verfügt jedoch über dynamische Variablen und Arrays. Hier ist zum Beispiel ein Teil des Pi-astre Hanter-Spielcodes:



Eine unterhaltsame Funktion ist, dass Schleifen als Teil von bedingten Konstrukten implementiert werden, bei denen LOOP anstelle von END platziert wird.

Beim Start lädt das Spiel Anwendungen aus * .duhasm-Dateien und kompiliert sie zu Bytecode. Wenn ein Spieler die Konsole aktiviert, wird ein ehrlicher Dolmetscher gestartet.

Im Moment habe ich zwei Spiele auf DUHASM geschrieben, die bereits in der aktuellen Version verfügbar sind. Es ist geplant, einen Code-Editor zu schreiben (natürlich auch auf DUHASM), damit jeder Spieler versuchen kann, eine Anwendung / ein Spiel zu erstellen, die / das alle anderen Spieler sehen werden.


Ich hoffe, dass ich nicht umsonst viel Mühe und Zeit aufgewendet habe, um diese Funktion zu implementieren, und es wird Leute geben, die sie mögen. Die DUHASM-Sprache muss sicherlich verfeinert werden. Mir gefällt nicht wirklich, wie beispielsweise Funktionen mit Argumenten aufgerufen werden. Laut der Geschichte des Spiels hat die DUHASM-Sprache einen halbwegs vernünftigen Cyborg entwickelt, der aus dem Labor der Weltraumpiraten entkommen ist. Überraschenderweise hat diese Programmiersprache am Rande des bewohnten Teils des Universums Wurzeln geschlagen.

FAZIT


Nun, es gab viele Kompromisse - eine Reihe von Zeichen, Präzision der Unterzeichen, Animation, Farben. Aber auch um ein Gefühl der Authentizität für den Textmodus zu bewahren, habe ich in diesen mehr als zwei Jahren der Entwicklung viel unternommen. Um mehr Feedback zu erhalten und zu verstehen, ob ich mich in die richtige Richtung bewege, habe ich beschlossen, das Spiel mit einem frühen Zugriff in Steam zu starten . In Textmodi gibt es etwas magisch Attraktives. Wenn ein Bild mit Zeichen auf der Tastatur eingegeben werden kann, ist es manchmal schwierig, dem Spiel mit dem integrierten ASCII-Editor zu widerstehen und es nicht zu starten, und es wird nicht einmal ein Prototyp eines neuen Minispiels gezeichnet, das dann in der Sprache DUHASM implementiert wird.



Danke an alle! Tschüss!

All Articles