Das TextRPG Modul bietet eine Skriptumgebung für textbasierte Computerrollenspiele und interaktive Geschichten.
Es wurde so entworfen, dass die als Code geschriebenen Geschichten ähnlich aussehen wie Drehbücher oder Theaterskripte.
Im deutschen Python Forum habe ich dazu ein schnelles Beispielskript [3] geschrieben, das zeigt wie eine schon recht komplexe Geschichte umgesetzt wird. Ein Beispiel für nichtlineare Geschichten [4] gibt es im Quellcode.
Dazu gibt es ein interaktives Tutorial (als TextRPG Skript geschrieben), das beim Download mitgeliefert wird (tutorial_de.py). Einfaches (doppelt) anklicken sollte es starten (zumindest auf GNU/LInux und MacOSX - wenn es nicht klappt, schreib mir bitte [5]!).
Zur Umsetzung von Geschichten bietet das TextRPG Modul dabei einige einfache Funktionen:
story()
gibt den Text aus, der ihr übergeben wird.
answer = ask()
Stellt die Frage in den Klammern und weist answer den Textwert der Antwort des Nutzers zu.
save(chars=[])
Speichert eine Liste von Charakteren. Beim nächsten laden der Charaktere werden sie die neuen Werte haben.
give_exp(char, amount=0)
Einem Char Erfahrungspunkte geben, die automatisch verteilt werden. Das Ergebnis wird als Textdialog angezeigt.
get_experience(chars=[], amount=0)
Einer Gruppe von Charakteren die gleiche Erfahrung geben. Das Ergebnis wird als gemeinsamer Textdialog angezeigt.
exit()
die Geschichte beenden (eine Standard-Python Funktion).
Zusätzlich definiert es die Klasse Char() über die Charaktere erzeugt werden können, die wiederum einige Praktische Möglichkeiten liefern.
Einige der Hauptmöglichkeiten sind:
char = Char(source="tag:1w6.org,2008:Name")
einen Charakter erzeugen. "source" ist im tag-Format: "tag:" + (url oder email-adresse) + "," + Jahr (yyyy) + ":" + Name des Chars).
char.say()
den Charakter sprechen lassen (wie story(), nur mit Charakternamen vor der Ausgabe und dem Vorteil, dass bei einer Umsetzung in eine GUI Umgebung genutzt werden kann, dass der Char spricht).
char.ask()
den Charakter fragen lassen (wie ask(), s.o.).
char.check_skill(skill_name, MW=9, related_skills=[name, name, ...], related_attributes=[name, name, ...], mods=[])
prüft, ob der Char eine bestimmte Fertigkeitsprobe schafft. Wundmali u.ä. sind direkt drin. Mods ist eine Liste von Zahlen: pos. und neg. Modifikatoren auf die Probe.
char.compete_skill(other, skill_name, self_mods=[], other_mods=[])
Lässt den Char in der gewählten Fertigkeit (skill) gegen den anderen Char antreten. Wundmali u.ä. sind direkt drin.
char.battle(other)
startet einen Interaktiven Kampf gegen einen anderen Charakter.
char.fight_one_roll_battle(other)
startet einen kurzen nicht-interaktiven Kampf mit dem Ein Wurf System. Einer der Charaktere ist danach kampfunfähig.
char.active
enthält die Information, ob der char aktiv ist (also fähig zu handeln).
char.alive
enthält die Information, ob der char lebt.
char.die()
tötet den char.
Weiterhin können jegliche anderen Python Befehle und Module genutzt werden, da die Skriptdateien einfache Python Dateien sind.
Zusätzlich zu seiner einfachen Syntax ist es so entworfen, dass eine Umsetzung eines eigentlich für eine Textausgabe geschriebenen Skriptes in eine GUI-Umgebung extrem einfach sein sollte (nur eine Zeile zu ändern). Was gehen sollte, sobald es ein Backend für eine GUI-Umgebung gibt.
Viel Spaß beim Skripten! - Drak [6]
Mit dem graphischen Terminal AKFAvatar [7] können RPGs mit der TextRPG [8]-Syntax sehr einfach in grafische RPGs umgewandelt werden, in denen Interaktionen automatisch über das 1w6-System [9] abgehandelt werden können.
Andreas K. Förster hat dafür die Flexibilität des TextRPG genutzt, um AKFAvatar zusätzliche Steuerbefehle zu geben, mit denen er Bilder anzeigt, Dialoge anpasst und Audio ausgibt.
Vielleicht erkennst du ja aus welchem freien Spiel die Charaktere stammen (Auflösung unten :) ).
Der Code für die Geschichte steht in der entsprechenden Codedatei [10] und ist auch ohne Programmierkenntnisse gut lesbar (die Funktion avatarsay kontrolliert Grafik und Sound).
Wenn ihr es selbst ausprobieren wollt (unter GNU/Linux), müsst ihr euch bisher noch erst AKFAvatar [7] installieren und dann das TextRPG Repository [11] klonen. Im TextRPG repository ist es dann einfach
avatarsay ./simple_story.py
(d.h. simple_story.py mit avatarsay öffnen. Wenn ihr simple_story.py mit einem anderen Terminal startet, seht ihr die gleiche Geschichte, allerdings ohne Grafik und Sound - unter Windows funktioniert AKFAvatar übrigens auch, allerdings kann es nicht als vollwertiges virtuelles Terminal genutzt werden. Wenn ihr es nutzen wollt, holt euch ein GNU/Linux - zur Not auf einem USB-Stick oder als virtuelle Maschine. Auf seiner Seite hat AKF auch Infos zur Nutzung von avatarsay [12] - Ich bin kein Experte in AKFAvatar, daher kann es sein, dass irgendwas hier nicht ganz korrekt ist. In dem Fall schreib bitte einen Kommentar. - Drak [6] )
Als Regelwerk im Hintergrund läuft übrigens das EWS (v2.2). Charaktere können so auch gesteigert werden, jegliche Proben ablegen und in einem einfachen Textformat gespeichert werden.
Noch ist avatarsay allerdings nicht komplett eingebunden. Ich will die grafische Ausgabe langfristig vollständig integrieren, so dass automatisch Bilder gezeigt werden, wenn die Charaktere Bilder definiert haben und ein TextRPG Skript mit avatarsay gestartet wird (ein Schritt in Richtung vom Nutzer auswählbarer GUI-Umgebungen :) ).
Wenn dich die Syntax für TextRPGs interessiert, schau dir die Grundlagen doch einfach auf der TextRPG Seite [8] an. Ein noch einfacheres Beispiel ist die ministory [13].
Auflösung: Die Grafiken stammen aus Battle for Wesnoth [14], einem freien Strategiespiel, grafisch im Stil von Shining Force® (von Sega) und anderen klassichen 2D Spielen, vom Spielgefühl her allerdings stärker auf Taktik und größere Geschichten, dafür weniger auf einzelne Charakterentwicklung ausgerichtet. Es hat eine aktive Gemeinde von Autoren, die immer neue Kampagnen schreiben, und alle Spielmaterialien sind unter der GPL freigegeben.
Anhang | Größe |
---|---|
avatarsay-screenshot1.png [15] | 35.04 KB |
avatarsay-screenshot2.png [16] | 54.1 KB |
avatarsay-screenshot3.png [17] | 3.19 KB |
avatarsay-screenshot4.png [18] | 9.4 KB |
avatarsay-screenshot5.png [19] | 13.04 KB |
Leider bin ich zur Zeit rein Rechnertechnisch etwas verhindert, ein neuer ist aber im Anmarsch. Da ich auf meiner alten Mühle keine große Lust habe, noch alles besonders einzurichten um mit dem Bugfixing bei schlachtfeld.py weiter zu machen. Bis zum Wochenende sollte der Rechner da sein und im Verlauf der nächsten Woche sollte ich wieder ins bugfixing einsteigen können, um danach auch noch ein paar neue Ideen zu verbauen und die Schnittstelle zwischen schlachtfeld.py und Charakter.py auszubauen, damit Charaktere aus der Datenbank geholt und durch die Datenbank exportiert werden können.
Wenn es sich anbietet, dann können wir auch mal Ideen zu einer Solo-Abenteuer-Engine angehen als Plattform, um EWS(?) Abenteuer auf dem Rechner zu spielen und zu schreiben. Dabei bin ich mir aber noch nicht 100% sicher, ob sich das EWS optimal zur Umsetzung als Solo-Engine eignet. Also, überzeugt mich!
Links:
[1] http://pypi.python.org/pypi/TextRPG/
[2] http://1w6.org/textrpg-api-docs/
[3] http://www.python-forum.de/viewtopic.php?p=104477
[4] http://bitbucket.org/ArneBab/textrpg/src/tip/branching_story.py
[5] https://www.1w6.org/contact
[6] https://www.1w6.org/uzanto/drak
[7] http://akfavatar.nongnu.org/
[8] https://www.1w6.org/deutsch/anhang/programme/textrpg
[9] https://www.1w6.org/deutsch/regeln
[10] http://bitbucket.org/ArneBab/textrpg/src/tip/simple_story.py
[11] http://bitbucket.org/ArneBab/textrpg/
[12] http://akfavatar.nongnu.org/manual/de/Anweisungen-f_00c3_00bcr-avatarsay.html
[13] http://bitbucket.org/ArneBab/textrpg/src/tip/ministory.py
[14] http://wesnoth.org
[15] https://www.1w6.org/files/avatarsay-screenshot1.png
[16] https://www.1w6.org/files/avatarsay-screenshot2.png
[17] https://www.1w6.org/files/avatarsay-screenshot3.png
[18] https://www.1w6.org/files/avatarsay-screenshot4.png
[19] https://www.1w6.org/files/avatarsay-screenshot5.png