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.
Kommentar (übersetzt) von Chris Lansdown zu Ren'Py
Ren'Py dürfte wohl die einfachste Art überhaupt zu sein, Visual Novels zu schreiben. Trotzdem sind viele Menschen, die zum ersten Mal ein Ren'Py-Script sehen von diesem etwas verängstigt. Wie kann das sein?
Die Antwort ich einfach: Ziel von Ren'Py ist es, das Erstellen einer kompletten Visual Novel so einfach machen wie möglich. Es ist nicht das Ziel, den Anfang davon so einfach wie möglich zu machen. Was ist der Unterschied? Visual Novel bestehen aus langen und komplexen Handlungen. Tools, die für kleine Projekte ausgelegt sind, sind aber bei größeren Projekten meist eher umständlich. Vergleichen wir ein Handschäufelchen mit einem Spaten: wenn du eine kleine Topfpflanze für das Fenster pflanzen willst, hilft der kurze Griff und die kleine Fläche der Schäufelchen. Aber wenn du im Garten ein Loch ausheben willst, um einen Baum zu pflanzen, geht es mit dem Spaten um ein zehnfaches schneller. Es es keines davon ein richtiges oder falsches Werkzeug: sie sine jeweils das richtige Werkzeug für die Aufgabe, für die sie ausgelegt sind.
Und machen wir uns nichts vor: eine Visual Novel zu entwickeln entspricht eher dem Pflanzen eines Baums. Auch eine Visual Novel, die man in einer halben Stunde durchspielt, kann leicht 10.000 Wörter haben und mehrere Verzweigungen. 10.000 Wörter einer Handlung, sie sich aufspaltet und zum Teil wieder verein, ist mühevoll. Es gibt auch Spiele auf Ren'Py-Basis mit 30.000 Wörtern. Professionelle Visual Novels haben meist über 100.000 Wörter. Das ist wirklich viel Arbeit.
Das Ziel von Ren'Py ist es, so wenig wie möglich zusätzliche Arbeit zu machen. Deswegen wirkt es am Anfang vielleicht etwas einschüchternd. Die Funktionen, die man braucht um eine 50.000-Wörter-Visual-Novel zu schreiben, erscheinen wohl erst mal überflüssig, wenn man nur die ersten 50 Wörter schreiben will. Aber wenn man einmal weiterschreibt, wird man sie schnell brauchen.
Also, selbst wenn Ren'Py zu Beginn vielleicht noch etwas kompliziert wirkt, es ist wirklich die einfachste Art, eine Visual Novel zu schreiben. Weil sobald man einmal wirklich angefangen hat, wird die Schwierigkeit nur noch darin liegen, all die Charaktere in eine konsistente, logische Handlung mit verschiedenen Verzweigungen unterzubekommen, während der Umgang mit den Ren'Py-Scripts schnell so natürlich wird, dass man ihn fast gar nicht mehr wahrnimmt.
Um Ren'Py benutzen zu können, muss man nicht programmieren können. Es stimmt allerdings auch, dass selbst eine einfache Ren'Py Visual Novel ein paar Zeilen in der Programmiersprache Python enthält. Mach dir deswegen aber nicht allzu viele Sorgen - in diesem Tutorial werden wir alle wichtigen Python-Anweisungen vorstellen, und du kannst sie dann direkt kopieren und dabei nur noch die Namen von Charakteren, Dateien usw. ersetzen.
Du musst also kein Python können um eine Visual Novel; du musst nur die entsprechenden Zeilen kopieren können.
Wenn du programmieren kannst, oder mit jemandem im Team arbeitest, der Programmieren kann, kannst du dir natürlich die Mühe machen, den Programmcode zu versehen; es geht aber auch ohne. Wenn du dagegen Python nutzen willst, um einige coole und einzigartige Funktionen einzubauen, findest du gelegentlich Links auf das Referenzhandbuch, in dem die dafür wichtigen Funktionen genauer beschrieben werden.
Das größte Problem mit Computern, und also auch mit Ren'Py, ist, dass sie recht dumm sind. Sie können uns Menschen in unserer Sprache nicht verstehen, deswegen haben wir den ganzen Ärger, ihnen alles auf ihrer Sprache zu sagen. Ist nicht ganz fair, aber in einem Beziehungskrieg gewinnt üblicherweise der, der weniger zu verlieren hat; und da Computer tote Objekte sind, haben sie praktisch gar nichts zu verliegen.
Wir müssen uns also Möglichkeiten ausdenken, wie uns der Computer versteht. Meistens geht das sogar einigermaßen. Zum Beispiel verwenden wir Variablen, um Werte zu speichern. Wir sind es ja gewohnt, Dingen Namen zu geben, also ist uns das Prinzip schon vertraut. Es mag zwar etwas seltsam aussehen, so etwas zu schreiben:
$ geschenk = "badeanzug"
aber letztlich ist es nur eine formalere Art, das auszudrücken, was wir ohnehin tun. In diesem Fall oben sagt man gewissermaßen "das Geschenk für meine Freundin ist ein Badeanzug" - und in jedem folgenden Fall, wenn vom "Geschenk" die Rede ist, weiß man automatisch, dass vom Badeanzug die Rede ist, auch wenn das Wort selbst nicht mehr verwendet wird. Die Codezeile macht genau diese Zuweisung, nur eben auf computisch statt auf deutsch.
Ein weiteres Konzept, das man kennen sollte, ist der "Kontext". Damit sind Anweisungen bzw. Sätze gemeint, die erst durch einen Bezugspunkt, also im richtigen Kontext, den richtigen Sinn erhalten. Wenn in einem Gespräch mit einem Freund der Satz "ich schenk dir 10 euro" fällt, heißt er etwas völlig unterschiedliches, je nachdem ob er ohne Kontext gesagt wird, oder in einem Satz wie "Kathi sagte mir gestern völlig überraschend: >>ich schenk dir 10 euro<<", oder "du hättest jetzt wohl gerne, dass ich sage: >>ich schenk dir 10 euro<<. Bei Computern kommt etwas ähnliches auch häufig vor - besonders häufig, dass eine bestimmte Aussage bzw. Anweisung nur unter einer bestimmten Bedingung ausgeführt wird. "Kathi sagte" oder die Bedingung ist jeweils der Kontext, in dem die Aussage ihre Gültigkeit hat. Solche Kontext-Abhängigkeiten muss man dem Computer auch irgendwie klar machen.
Ren'Py benützt dazu Einrückungen. Einrückungen sind die Leerzeichen, die vor dem ersten Wort einer Zeile stehen. Zum Beispiel:
"Diese Zeile ist nicht eingerückt."
"Diese Zeile ist um 4 Zeichen eingerückt."
"Diese Zeile ist um 8 Zeichen eingerückt."
"Diese Zeile ist auch um 4 Zeichen eingerückt."
"Und diese Zeile ist um 4 Zeichen eingerückt."
"Diese Zeile ist wiederum gar nicht eingerückt."
In Ren'Py wird das verwendet, um bestimmten Anweisungen einen bestimmten Kontext zu geben. Alle Anweisungen, welche mindestens die selbe Einrückung haben (oder noch mehr), gehören zum selben Kontext. Eine Reihe solcher Anweisung wird "Block" genannt. Zum Beispiel wird noch von sogenannten "Init-Blocks" die Rede sein. Gemeint sind dann alle Anweisungen, welche im Kontext des "init" stehen, also danach eingerückt sind:
init:
# Das hier ist innerhalb des Init-Blocks
# Das hier auch
# Das hier aber nicht mehr
Es kann auch einen Block innerhalb eines anderen geben, etwa so ineinander verschachtelt wie jene russischen Matrioshka[TODO]-Puppen:
init:
# Das hier ist innerhalb des Init-Blocks
# Das hier auch
python:
# Diese Zeile ist sowohl im Init- als auch im Python-Block
# Da der Python-Block selbst im Kontext des Init-Blocks ist,
# ist grundsätzlich jede Anweisung daran auch Teil des Init-Blocks.
# Diese Zeile ist noch im Init-Block, nicht mehr aber im Python-Block.
# Der Python-Block ist damit also "geschlossen", es kann danach keine
# weiteren Anweisungen mehr in ihm geben. Der Init-Block ist dagegen
# hier noch nicht geschlossen.
# Diese Zeile ist nicht mehr im Init-Block (dieser ist hiermit auch geschlossen)
Keine Sorge, wenn du noch nicht so ganz verstehst, wozu das alles gut ist; es wird klarer werden, wenn weitere Funktionen in diesem Tutorial vorgestellt werden. Es reicht, wenn du an dieser Stelle einmal davon gehört hast - man muss es noch nicht ganz verstehen. :)