Text-Adventure-Engine


Modran

Member
Joined
Jan 11, 2007
Messages
218
Location
NRW
Website
voynich-ms.de
WEBSITE
http://voynich-ms.de/Merlin
LOCATION
NRW
Hip hip, ich darf nun endlich eine dreifache Premiere ankündigen:
- mein erstes Programm für den GP2X
- mein erstes Programm auf SDL-Basis
- und mein erstes Programm in C.
:)

Es hat ein Weilchen gedauert, weil ich nicht nur Neuland betreten habe, sondern auch jede Menge Schnickschnack mit einbauen wollte. Doch nun ist die Engine für mein geplantes Text-Adventure erstmal fertig.

Wenn Ihr Lust habt, könnt Ihr sie mal auf Herz und Nieren testen, schauen ob Ihr Bugs findet und natürlich Vorschläge und böse Kritik äußern - dann mach ich mich inzwischen schon mal ans Schreiben der Story.

Hier ist das VERALTETE Zip-File: http://voynich-ms.de/LiS/LiS_Alpha.zip ( 4,2 MB ).
Die Alpha enthält die Engine (nur Load und Save sind noch nicht implementiert) und ein paar Seiten Test-Text, ohne bereits Story oder Rätsel zu beinhalten.

Edit: Demo mit sinnvoll spielbarem ersten Kapitel (36.000 Zeichen Text oder ca. 23 Seiten) und neuerer Engine gibt es hier: http://voynich-ms.de/LiS/LiS_Demo.zip ( 14 MB ).

Jede Menge Anregungen und Kritik sind erwünscht ... 8)

edit: sorry, hab ganz vergessen, ein paar Screenshots zu machen.
Mhhh, Screenshots von einem Text-Adventure ...
Na egal, hier sind ein paar vom neuesten Stand der Entwicklung:

LiSss1.jpg
LiSss2.jpg
LiSss8.jpg
LiSss3.jpg
LiSss4.jpg
LiSss5.jpg
LiSss6.jpg
LiSss7.jpg


----
Aktuelle readme:
http://voynich-ms.de/LiS/LiS_Demo_readme.txt

Nur für Coder
Derzeitiger Quellcode der Funktion, die die Seitentexte konstruiert:
http://voynich-ms.de/LiS/SetPageText.txt
 
huhu :)

erst mal, feine idee :) ich hab auch über sowas nachgedacht... allerdings hab ich mir imma wieder gefragt, wie ich die interaktion realisieren soll... entweder einpaar default commands auf die buttons, oder eine virtuelle tastatur gebaut.. ne idee für ne story habe ich... also, wenn dir mal nix einfällt -g- so als tip vorweg: "lost in time" - ein mix aus real time, fantasy und ein wenig cyberpunk.... naja, letzteres is blos minimal mit drinn...

öhm, is der code hardcodet? cross platform? -g-
 
Tatsächlich erstes GP2X, SDL und C Programm?! Respekt! Das gefällt mir alles sehr gut. Besonders der Titel-Screen ist gut gelungen. Ich würde sagen vom Interface ist es schon fast perfekt.
Die einzige Verbesserung die mir dafür noch einfällt (aber vielleicht geht es auch schon; ich habe es nicht getestet) wäre, dass man eigene Hintergründe und Schriftarten einfach in das Data-Verzeichnis reinkopiert und diese dann automatisch auch im Menü auswählen kann. Und dass man anstatt fest vorgegebenen Farben einfach den RGB-Wert einstellen kann.
Und was die Story betrifft: Ich finde nirgendwo eine Datei, wo diese gespeichert ist. Wenn sie wirklich hardcoded ist solltest du überlegen, das noch zu ändern und ein eigenes Dateiformat dafür zu entwickeln, dass dann von der Engine einfach abgearbeitet wird. Es ist zwar bestimmt etwas aufwändig, aber dadurch könnten später neue Storys leicht hinzugefügt werden, sogar von anderen Community-Mitgliedern. Aber wenn du sowas machen willst, mach es am besten jetzt schon, damit du die Story nachher nicht nachträglich anpassen musst.
 
Stimmt, die Story ist hardcoded. Ich hatte erst über ein Protokollformat nachgedacht, doch das wurde schnell sehr umfangreich, da einzelne Sätze oder Worte in ihrem Erscheinen von komplexen Bedingungen abhängig sind, die alle im Datenformat mit implementiert werden müßten. Ich müßte also eigens eine (gar nicht so kleine) Programmiersprache konstruieren.
Am Ende erschien es mir einfacher, die Story direkt als C-Funktion zu schreiben und mitkompilieren zu lassen. Hat den Vorteil, daß böse Tippfehler vom Compiler erkannt werden können, aber den Nachteil, daß man zum Story schreiben C können muß.
Ich tüftele mal noch ein bischen, ob ich da eine bessere Lösung hinbekomme.
Andererseits ist das Intro ja auch hardcoded, müßte also ebenfalls parametrierbar gemacht werden. Mal sehen ...

Erstmal war mir wichtig, daß der Text (egal wo er herkommt) sauber gerendert wird, besonders auf die Wortumbrüche bin ich etwas stolz ;), und die Bedienung möglichst intuitiv erfolgt (die Schultertaten lassen sich übrigens frei konfigurieren, schon gesehen? )
Beim (langsamen) Scrollen schwimmt die Schrift etwas, da muß ich nochmal ran, hab aber noch nicht herausgefunden, wie ich das Prog mit dem Screen synchronisieren kann (beim C64 gabs dafür Rasterzeilen-Interrupts).

Den Roh-Text werde ich wahrscheinlich noch in ROT13 oder etwas ähnliches umkodieren, um den neugierigen Benutzer vor Spoilern zu schützen. ;)
 
Was das coden der Story angeht ist mir noch eine Idee gekommen. Du hast wahrscheinlich Recht, dass es zu kompliziert ist eine eigene Programmiersprache dafür zu schreiben. Aber die Story in C zu programmieren ist ja eigentlich auch kein Problem. Du müsstest sie halt nur separat als dynamische Library mit klar definierten Schnittstellen kompilieren. Der Vorteil entsteht ja durch die separate Datei.
Ich weiss nicht genau was du mit der "schwimmenden" Schrift und dem "synchronisieren" meinst. Du benutzt doch Double buffering oder nicht?
 
Eine einfache Anbindung von einem Befehl mit Parameter in eine intern kompilierte Funktion geht recht einfach... Ich hoffe ich bin mit meinem Projekt recht bald fertig damit ich dessen Src veröffentlichen kann. Aber ich würde das auch schon vorher gerne erklären.
 
Ich glaube, ich werde folgendes machen: ich bastele meine Story weiter in C, werde aber auch eine reine Engine-Variante basteln, die mit Spiel-Scripten versorgt werden kann.

Dazu werde ich die wichtigsten Parameter für den Scripter verfügbar machen (zum Beispiel wie oft ein "Raum" bereits betreten wurde, die Spielzeit oder auch eine simple Zufallszahl) und ein leicht vertändliches Scriptsystem zusammenstellen. Das könnte ungefähr so aussehen:
Code:
== Raum 1 ==
  "Dies ist Raum 1."

SELECT VISITS:
  "Du siehst ihn gerade zum ersten Mal."
  "Du warst schonmal hier."
  "Du bist schon zum dritten Mal hier."
  "Und dieser letzte Satz erscheint bei jedem weiteren Mal."
END

SELECT RANDOM:
  "Dies ist ein Zufallstext."
  "Dies ist noch einer."
  "Einer dieser drei Sätze wird zufällig ausgewählt."
END

  "... während diese Zeile immer erscheint."

  "Du spielst seit "
WORD th
  " Stunden, "
WORD tm
  " Minuten und "
WORD ts
  " Sekunden."

  "Ø -> Eine Zeile, in der ein Ø vorkommt, wird ZENTRIERT dargestellt."

  "Du kannst dem Prog¬ramm auch sa¬gen, wo es die ein¬zel¬nen Wor¬te tren¬nen darf. Das Zei¬chen da¬für ist:  ¬"
// Dieses Zeichen überall einzufügen macht etwas Arbeit, verbessert aber das Schriftbild - gerade auf einem so kleinen Screen - erheblich.
// Und dies ist übrigens eine Kommentarzeile.

  "Hier wird ein Zeilenumbruch erzwungen: ¶"

  "Mit SETKEYS definierst Du, wohin die Tasten A,B,X und Y führen."
SETKEYS: 1, 0, 3, 2
  "A) ... bleibe hier in Raum 1."
  "B) ... die Raumnummer 0 und alle Raumnummern, die nicht existieren, führen zu einer Fehlerseite."
  "X) ... Raum 3 existiert nicht.
SELECT VISIT(2):
  "Y) ... gehe zu Raum 2"
  "Y) ... gehe NOCHMAL zu Raum 2"
END

== Raum 2 ==
"Raum 2 ... und so weiter"
"Da in Raum 2 keine Tasten definiert werden, führen alle 4 Tasten zur Fehlerseite 0."


Mal schauen, was zuerst fertig wird: meine Story, oder die Story von jemand anderem auf meiner Engine. ;)

edit:
HEP said:
Ich weiss nicht genau was du mit der "schwimmenden" Schrift und dem "synchronisieren" meinst. Du benutzt doch Double buffering oder nicht?
Simmt, aber ich weiß nie genau, wann ich die nächste Page zeichnen muß. Ich warte 17 ms dazwischen, aber das Hardware-Timing scheint bei 60HZ zu liegen, ich müßte also 16,66666... ms warten, was nicht geht. Deshalb kommt es alle 50 frames zu einem Ruckler. Da muß ich mich wohl noch etwas in die Hardware-Register reinfriemeln. Übrigens auch für die Lautstärke, die ich derzeit noch softwareseitig über den Mixer regele, was unbefriedigend ist.

noch'n ps.:
Das Titelbild ist übrigens nichts weiter als ein Gekritzel auf einem recht einfachen JavaApplet, das ich vor Jahren mal aus Langeweile getestet habe ( http://artpad.art.com/gallery/?im09c51fvlso ). In 320*240 siehts fast gut aus. :D
 
HEP said:
Die einzige Verbesserung die mir dafür noch einfällt (aber vielleicht geht es auch schon; ich habe es nicht getestet) wäre, dass man eigene Hintergründe und Schriftarten einfach in das Data-Verzeichnis reinkopiert und diese dann automatisch auch im Menü auswählen kann. Und dass man anstatt fest vorgegebenen Farben einfach den RGB-Wert einstellen kann.
- Skins: ich habe lange gegrübelt, aber am Ende finde ich, daß die Auswahl der Hintergründe, Fonts und Musik beim Skripter des Spiels liegen sollte, denn der möchte ja eine zu seiner Story passende Atmosphäre erzeugen.
Ein Skinning durch den Enduser, also den Spieler, ist nicht geplant - er kann jedoch die Dateien durch andere mit dem selben Namen ersetzen, wenn er denn unbedingt will.
- Farben: da wirds richtig kompliziert. Ich hatte über freie RGB-Einstellung nachgedacht, aber das zerstört die Einfachheit der Bedienung (z.Bsp. Farbwahl über Schultertasten) auf unnötige Weise. Auch hier sollte der Scripter dem Enduser eine sinnvolle Auswahl anbieten, die zu seinen Hintergründen paßt (das ist mir noch nicht so ganz gelungen).
Eventuell könnte man auch zu jedem Hintergrund eine Default-Farbe (und Schatten und so) definieren lassen .... ich merke gerade, da kann man sich noch viele Verbesserungen in der Bedienbarkeit einfallen lassen. Um allen bisher verfügbaren Text-Readern für den GP2X mal den Hammer zu zeigen :) (siehe http://www.youtube.com/watch?v=ZM10R979ZXg )

Aber dafür habe ich bereits den SoundTrack für mein Game fix und fertig. Er besteht aus 10 Songs völlig unterschiedlicher Musiker und Stilrichtungen, die so freundlich waren, ihre Kunst unter einer GNU-Lizenz (oder heißt das jetzt Lizens? ;) ) zu veröffentlichen. Dehalb wird das fertige Spiel wohl auch leider 30MB groß sein - sorry, Modem-User :(
 
Soderle, das 1. Kapitel ist (einigermaßen) fertig und bereit zum Beta-testen.

http://voynich-ms.de/LiS/LiS_Demo.zip ( 14,1 MB )

Wenn ihr möchtet, könnt Ihr es anschauen und Euch einen Eindruck von Story und Spielprinzip verschaffen, wieder Ideen, Meinungen und Kritik äußern, doch diesmal geht es nicht um die Engine, sondern um die Brauchbarkeit des "Spiels" selbst.
Kann man auf diese Art einen ganzen Roman schreiben/lesen, macht das Lesen Spaß oder wird es schnell langweilig? Oder ist es zu verwirrend? Ist der Schwierigkeitsgrad zu hoch? Zu niedrig?

ED hatte sich mal als Fan von e-Novellen geoutet, deshalb wäre mir seine Meinung besonders wichtig. Ich selbst habe diese Sachen nämlich noch nicht angeschaut (sonst laufe ich Gefahr, Ideen zu klauen), und mich würde der Vergleich interessieren.


p.s.: Load und Save fehlen immer noch, kommt aber direkt als nächstes dran
 
sieht soweit klasse aus... aba gleich 14mb für so nen text adventure...?

öhm e-novellen? meinst du damit sowas wie romane, die nen leichten touch an text adventures habn...? ik sollte net anfangen, sowas zu schreiben... hab da noch was im scifi bereich rumliegen -fg- aba nie fertig geworden...
 
Back
Top