Ich hab hier mal eine sehr gute Erklärung zum Tag/Nacht Zyklus, für alle.
Ich möchte hiermit nur sagen dass sie aus dem Rm2k Kurs von
www.rpg2000.de stammt. Wenn das nicht erlaubt sein sollte, so werde ich ihn sofort wieder löschen. (Oder die Mods können das für mich übernehmen ^^)
Tag/Nacht Zyklus (erweitert)
--------------------------------------------------------------------------------
Gut, angekommen im letzten Abschnitt dieses sechsten Kursteiles, angekommen bei der weitaus besseren Variante des Tag/Nacht - Zyklusses. Wenn ihr euch erinnert, der Zyklus, den wir im letzten Kursteil hatten, war nicht besonders gut. So fing jedesmal, wenn man in einen neuen Raum kam, der Zähler wieder von vorne an. Das lässt sich mit Hilfe von Variablen viel einfacher, übersichtlicher und besser gestalten!
Das erste, was nun geschehen muss, ist, alles wieder auf den Ausgangsstatus zurück zu bringen. Alle Events, die nur mit dem Tag/Nacht Zyklus zu tun haben, werden gelöscht, in alle Teleports werden die Veränderungen der Switches rausgenommen, und die Teleports selber werden wieder auf die Erase Screen - Teleport - Show Screen Form gebracht, auch die, die aus den Häusern hinaus führen. Wenn man jetzt testet, sollte alles wieder normal und ohne Tag/Nacht Zyklus laufen.
Als nächstes öffnen wir die Database und gehen in den Common Events Bereich. Es bleibt euch überlassen, ob ihr die Alten Tag/Nacht Events lassen wollt, oder nicht. Auf jeden Fall kommt jetzt direkt der erste große Vorteil: Dank der neu gelernten Fork Conditions-Funktion brauchen wir jetzt nicht mehr 4 sondern nur noch EIN Event. Diese stellt ihr auf Parallel Process, ohne Startswitch.
Wir beginnen mit einer ForkCondition, die überprüft, ob der Switch ZyjklusStop AUSgeschaltet ist. Man brauch hier keinen ELSE Case hinzuzufügen. Diesen Switch kann man dann im Spiel aktivieren, wenn man möchte, dss die Zeit angehalten wird, zum Beispiel in Zwischensequenzen/etc. Innerhalb dieser Fork beginnen wir mit einer weiteren Fork, die überprüft, ob die Variable Uhrzeit über 240 sein sollte. Ist dies der Fall, dann kommt ein Goto Label 2. Anschließend folgt die Cycle Funktion. Wenn ihr diese auf Seite 3 der Events aktiviert, seht ihr wieder ein Geblide, ähnlich dem von Forks oder Choices, nur dass es hier nicht mehrere Felder gibt. Cycle steht für eine Schleife, dass heißt, immer wenn alle Befehle innerhalb des Cycles ausgeführt worden sind, springt der Maker wieder zurück zum Anfang des Cycles, also geht das im Proinzip endlos so weiter. Innerhalb der Schleife beginnen wir mit einem Wait von einer Sekunde (bzw. 10 * 0,1 Sec). Danach erhöhen wir die Variable Uhrzeit um 1. Das hat den Effekt, dass jede Sekunde einzeln gewertet wird, und nicht wie im alten Entwurf die gesamte Zeitspanne als ganzes. Dann kommt die Fork, die überprüft, ob inzwischen der Switch "Zyklus Stop" angeschaltet wurde. Sollte das der Fall sein, dann geht der Maker zu Label 1, dieses setzt ihr nach ganz unten im Common Event. Danach kommt eine Fork (wir befinden uns immer noch im Cycle!), die als Bedingung hat, dass der Wert der Uhrzeit-Variable auf 240 steht (Wenn ihr nicht 4 Minuten für einen halben Tag haben wollt, stellt hir einen anderen Wert ein!). Wenn das der Fall ist, kommt gleich die nächste Fork, die überprüft, ob der Switch T/N unsichtbar AUS ist. In Gebäuden ist dieser Switch dann angeschaltet, dass heißt, es macht sich keine Veränderung der Helligkeit bemerkbar. Wenn der Switch nun aber aus ist, wird der Screen Tone auf 70/70/70/100 (stellt es nach euren Wünschen ein) gesetzt. In diese Fork kommt sonst nichts weiteres, aber in die Übergeordnete (mit der Bedingung, dass Uhrzeit = 240 ist) kommt als nächstes ein Break Cycle. Dieser Befehl lässt den Cycle beenden und den Maker hinter diesen springen. Ein weiterer Befehl kommt nicht herein. Hinter den Cycle setzen wir das Label Nr. 2.
Zum Überblick, was ist bisher passiert?
Das Event wird automatisch zu Beginn des Spieles aufgerufen (sollte nicht gerade der Switch "ZyklusStop" eingeschaltet sein...) . Dann wird überprüft, ob es nicht schon Nacht ist (Variable Uhrzeit > 240), wenn dies der Fall ist geht es hinter dem ersten Cacle weiter. In diesem wird 4 Minuten lang eine Variable erhöht und zwischendurch immer überprüft, ob der Zyklus nicht gestoppt werden muss. Dann wird, falls sich der Held unter freiem Himmel befindet der Bildschirm verdunkelt, aber auf jeden Fall der Cycle unterbrochen. Also läuft hier der Tag ab, kann aber jederzeit angehalten werden (die bisherige Uhrzeit bleibt allerdings in der Variable gespeichert!).
Nach dem Label Nr. 2 folgt ein weiterer Cycle. Kopiert dazu den oberen samt Inhalt und fügt ihn hier ein. Das einzige, was jetzt noch verändert werden muss ist
1. Die Fork, die überprüft, ob die Variable Uhrzeit den Wert 240 hat, muss überprüfen, ob die Variable den Wert 480 hat.
2. Der Screen Tone muss auf 100/100/100/100 gesetzt werden.
Unter diesem Cycle setzt ihr die Variable "Uhrzeit" wieder auf 0.
Das wars fürs Common Event, aber für die, denen das jetzt zu viel Text und ein zu verschachtelter Aufbau war, will ich das fertige Event noch einmal wiedergeben:
<> FORK Optn:Switch[00XY:ZyklusStop] - OFF
<> FORK Optn:Varbl[000X:Uhrzeit]-240 abov
<>GOTO Label: 2No
<>
:END Case
<>CYCLE
<>Wait: 1.0s
<>Variable Ch:[000X:Uhrzeit]+ , 1
<>FORK Optn:Switch[00XY:ZyklusStop] - ON
<>GOTO Label: 1No
<>
:END Case
<>FORK Optn:Varbl[000X:Uhrzeit]-240
<>FORK Optn:Switch[00YZ:T/N unsichtbar] - OFF
<>Set Screen Tone

R070,G070,B070,S100),5.0 sec
<>
:END Case
<>BREAK Cycle
<>
:END Case
<>
:END Cycle
<>LABEL: 2No
<>CYCLE
<>Wait: 1.0s
<>Variable Ch:[000X:Uhrzeit]+ , 1
<>FORK Optn:Switch[00XY:ZyklusStop] - ON
<>GOTO Label: 1No
<>
:END Case
<>FORK Optn:Varbl[000X:Uhrzeit]-480
<>FORK Optn:Switch[00YZ:T/N unsichtbar] - OFF
<>Set Screen Tone

R100,G100,B100,S100),5.0 sec
<>
:END Case
<>BREAK Cycle
<>
:END Case
<>
:END Cycle
Variable Ch[000X:Uhrzeit]Set, 0
<>
:END Case
<>LABEL: 1No
<>
Das ist das komplette Common Event, das jetzt die vorigen (unübersichtlichen) VIER anderen Common Events ersetzt.
Allein reicht leider auch dieses Event nicht, ein bisschen muss noch per Hand gearbeitet werden. Bei jedem Teleport von der Stadt Map (bzw. von einer Map, auf der der Zyklus zu sehen ist) auf eine Map, wo der Zyklus nicht zu sehen ist, müssen zwischen dem Teleport und dem Show Screen einmal der Switch "T/N unsichtbar" eingeschaltet, und der Screen Tone auf 100/100/100/100 gesetzt werden. wichtig dabei ist, dass man bei der Zeit zur Umstellung der Helligkeit nbedingt 0 eingibt, und Wait until Done, sonst sieht man bei Nacht das Innere des Hauses zuerst dunkel.
Bei jedem Teleport von einer Innen auf ein Außenmap muss der Switch wieder ausgeschaltet werden, außerdem muss der Screen Tone wieder auf Nacht gesetzt werden, wenn denn die Uhrzeit bei mehr als 240 liegt (Jap, da muss eine Fork hin!). Mehr gibt es nicht zu machen, keine zusätzlichen Events oder sonstwas.
Nun muss halt nur immer noch daran gedacht werden, bei jedem Teleport die jeweiligen Funktionen einzugeben und den Zyklus anzuhalten, wenn nötig: Übrigens, wenn ihr jetzt im Spiel einen Zeitsprung haben wollt, einfach nur der Uhrzeit-Variable den bestimmten Wert geben, und ggf. noch die Helligkeit umstellen.