You've reached a page on the Ren'Py wiki. Due to massive spam, the wiki hasn't been updated in over 5 years, and much of the information here is very out of date. We've kept it because some of it is of historic interest, but all the information relevant to modern versions of Ren'Py has been moved elsewhere.
Some places to look are:
Please do not create new links to this page.
Das Programm kann sich an Auswahlen des Nutzers erinnern, wenn sie in Variablen gespeichert werden. Zum Beispiel:
menu:
"Ihr einen Leguan kaufen":
$ geschenk = "Leguan"
b "Ich nehme einen Leguan, gnädiger Herr!"
"Ihr eine Kornnatter kaufen":
$ geschenk = "Kornnatter"
b "Ich möchte eine Kornnatter, gnädiger Herr!"
"Ihr eine Schildkröte kaufen":
$ geschenk = "Schildkröte"
b "Geben Sie mir bitte Ihre langsamste Schildkröte!"
Nennenswert ist es, dass ein einzelnes "=" verwendet wird, um einer Variable einen Wert zuzuweisen.
Später im Skript kann "" verwendet werden, um das Skript je nach voriger Auswahl fortzuführen:
b "Öffne es, Mary."
if geschenk == "Leguan":
m "Oh Bob, ich wollte schon immer einen Leguan!"
if geschenk == "Kornnatter":
m "Oh Bob, ich wollte schon immer eine Kornnatter, die zu meinem Kleid passt! Vielen Dank!"
if geschenk == "Schildkröte"
m "Bob! Sie ist ja so langsam! Ich liebe dich!"
Hier wird das doppelte "==" verwendet, da hier auf Gleichheit überprüft werden soll.
Variablen können beliebig benannt werden, solange sie nicht mit Ren'Py-spezifischen Schlüsselwörtern oder den Namen von Charakter-Objekten kollidieren. Wichtig ist aber, dass man einer Variable zuerst einen Wert zuweisen muss, bevor man sie in einem "if" verwenden darf.
In Punkt-basierten Spielen hängt der Fortgang der Geschichte nicht nur von einer einzeln Entscheidung des Spielers ab, sondern mehrere Entscheidungen wirken zusammen. Bei jeder Entscheidung werden Punkte vergeben, und an einer bestimmten Stelle wird je nach gesammelter Punktezahl der Fortgang ausgewählt.
Zuerst muss man also festlegen, in welchen Bereichen überhaupt Punkte vergeben werden. Zum Beispiel könnte man Punkte bekomman, wenn man (1) seine Muskeln trainiert ("strength"), jonglieren lernt ("dexterity") oder (3) in chemischen Experimenten komplexere Lebensformen erschafft ("Mad Science").
Als nächstes muss man die Variablen, in denen die Punkte festgehalten werden, mit Startwerten belegt werden. Das macht man gleich als erstes nach dem "start"-Label:
label start:
$ strength_points = 0
$ dexterity_points = 0
$ mad_science_points = 0
Während dem Spiel stellt man den Spieler vor Entscheidungen, welche diese Punkte beeinflussen, und verändert die Variablen dementsprechend. Um die Punktezahl zu erhöhen, benutzt man:
$ variable += 1
(Also ein Plus, gefolgt von einem Gleichheitszeichen). Man kann es um beliebige Zahlen erhöhen, nicht nur um 1. Um die Punktzahl zu reduzieren:
$ variable -= 1
Ein Beispiel wäre:
menu:
"Ins Fitness-Studio gehen":
$ strength_points += 1
"Das Fitness-Studio war heiß und verschwitzt."
"Ich hob schwere Gegenstände hoch und setzte wie wieder ab."
"Ich verstand den Nutzen der Aktion noch nie so recht,
unterm Strich kommt ja schließlich das selbe Ergebnis heraus,
als wenn man sie gleich liegen gelassen hätte."
"Mit Bällen jonglieren":
$ dexterity_points += 1
"Ich übte das Jonglieren mit sieben Bällen."
"Es war schwierig, aber am Ende schaffte ich es zumindest einmal."
"Mit agressiven Stachelschweinen jonglieren":
$ dexterity_points += 3
$ strength_points -= 1
"Mit agressiven Stachelschweinen zu jonglieren hat meine Reflexe wirklich verbessert.
Leider bin ich durch die folgende Blutarmut geschwächt."
"Ein friedliches Stachelschwein erfinden":
$ mad_science_points += 1
"Leider kam bei den Experimenten nur ein melancholischen Ameisenigel heraus,
aber ich lernte viel und bin mir sicher, es das nächste Mal besser zu machen."
(Mit den weiter oben vorgestellten Techniken kann man die Reaktionen natürlich auch von der momentanen Punktezahl abhängig machen.)
Zuletzt macht man das Ende des Spiels von der Punktzahl abhängig:
if strength_points > max(dexterity_points, mad_science_points):
"Du packst dir eine Kuh unter den Arm und springst über den Mond."
elif dexterity_points > max(strength_points, mad_science_points):
"Du Jonglierst mit 215 Bällen und erreichst damit einen neuen Weltrekord."
else:
"Du erschaffst dir deinen perfekten Partner und lässt dich mit ihm
in dem Schloss nieder, dass deine Armee achtarmiger Gorillas gebaut hat,
die du am Vormittag mal eben erschaffen hast."
return
Im Falle eines Unentschiedens entscheidet sich der Code oben für die letzte Möglichkeit (mad science). Es ist ein bisschen komplizierter, die Fälle eines Unentschiedens genauer abzufangen, weil es dann insgesamt sieben verschiedene Konstellationen geben kann. Es ist aber immer noch machbar und schaut etwa folgendermaßen aus:
if strength_points > max(dexterity_points, mad_science_points):
"Du packst dir eine Kuh unter den Arm und springst über den Mond."
elif dexterity_points > max(strength_points, mad_science_points):
"Du Jonglierst mit 215 Bällen und erreichst damit einen neuen Weltrekord."
elif mad_science_points > max(strength_points, dexterity_points):
"Du erschaffst dir deine perfekte Freundin aus dem Reagenzglas und lässt dich mit ihr
in dem Schloss nieder, dass deine Armee achtarmiger Gorillas gebaut hat,
die du am Vormittag mal eben erschaffen hast."
elif strength_points == dexterity_points == mad_science_points:
"Deine Truppe treu ergebener sechzehn-armiger Gorillamenschen bauen dir
drei Schlösser, die du jonglierst um deine perfekte Freundin zu beeindrucken,
die du am Vormittag mal eben im Reagenzglas erschaffen hast."
elif strength_points == dexterity_points:
"Du jonglierst mit drei großen Felsen, und viele attraktive Menschen
des anderen Geschlechts fallen daraufhin in Ohnmacht."
elif dexterity_points == mad_science_points:
"Du kreirst eine neue Gattung kugelrunder Kolibris und jonglierst
5.000 davon gleichzeitig."
elif strength_points == mad_science_points:
"Du erschaffst einen 30-Tonnen schweren, 24-armigen Gorillamenschen
und hebst ihn hoch, damit er das Dach des Hauses bemalen kann,
das er für dich gebaut hat."
return
Die Reihenfolge der einzelnen Bedingungen oben ist wichtig, weil spätere Bedingungen bereits voraussetzen, dass die vorigen alle nicht erfüllt sind. Für gewöhnlich testet man erst, ob sich eine einzelne Variable durchsetzen kann, dann ob alle gleich sind, und zuletzt welche zwei identisch sind. Diese Reihenfolge vermeidet ein paar typische Fallen, die sich beim Erstellen der Spielelogik stellen.