![]() ![]() |
Die Spielzeiterfassung |
Bevor ihr überhaupt mit der Spielzeiterfassung loslegen könnt, muss euch klar sein, dass
diese - wie der Geldzähler auch - grafisch dargestellt werden soll. Auch die
Schrift sollte zum Rest der Inventar-Hauptseite passen.
Optimal eignen sich für diese Zwecke CharSets, die ohne großen Aufwand an einem
bestimmtem Punkt positioniert werden können. Die Beispielgrafik [counterset.png],
die dem E-Book beigefügt ist, soll in unserem Beispiel zur Darstellung des
Zählerergebnisses dienen. Falls ihr eigene Zahlen-CharSets entwerfen wollt,
verwendet [diese Vorlagengrafik]. Der
Hintergrund wird später durch das Anlegen des Zählers deutlich.
Hier solltet ihr euch zuerst darüber im Klarem sein, was eure
Spielzeiterfassung aussagen soll.
Generell ist dies die Dauer, die Spieler mit eurem Projekt beschäftigt sind, die
angezeigt werden soll. Nur wie wollt ihr diese gliedern und aufteilen? Wollt ihr
alles nur in Form von Sekunden anzeigen lassen, wäre dies etwas armselig und
nicht gerade ein Tutorial wert. Wir gehen hier einen Schritt weiter und wollen
eine Anzeige von Tagen, Stunden, Minuten und Sekunden haben. Die Anzeige für die
Tage wird lediglich zweistellig sein und sollte für die meisten Zwecke
ausreichen. Doch wie stellt ihr eine Spielzeiterfassung auf die Beine, die sich
auch dafür eignet, zur Darstellung zu dienen?
![]() |
Zunächst brauchen wir ein "Common Event/Häufig benötigtes Ereignis", das
als paralleler Prozess im Hintergrund läuft, egal auf welcher Karte sich die
Heldentruppe befindet. |
||||||||||||||||||||||||
![]() |
Zuerst soll eine Bedingung abfragen, ob ein Schalter "Timer-Max
erreicht" auf AUS steht. Würde dieser Schalter auf AN stehen, wäre der
maximale Zählerstand erreicht, der Zähler wurde stoppen. Einen Nein-Fall brauchen wir in der Bedingung nicht. |
||||||||||||||||||||||||
![]() |
Innerhalb des Ja-Falles der Bedingung soll nun eine neue, freie
Variable, der ihr den Namen "Sec - 1er" (für die einzelnen Sekunden < 10) um
1 erhöht werden. Sucht euch danach noch sieben weitere Variablen aus, denen ihr die Namen "Sec - 10er", "Min - 1er", "Min - 10er", "H - 1er", "H - 10er", "T - 1er" und "T - 10er" gebt. Macht aber neben der Namensvergabe nichts weiter mit diesen Variablen. |
||||||||||||||||||||||||
![]() |
Ein Warte-Ereigniskommando soll das Fortfahren des Maker-Codes für 1
Sekunde pausieren. |
||||||||||||||||||||||||
![]() |
Nun, wenn eine Sekunde vergangen ist, soll mit Bedingungen abgefragt
werden, ob eine Spielzeit von 99 Tagen, 23 Stunden, 59 Minuten und 59
Sekunden vorliegt. Ist dem sol, so soll der Schalter "Timer-Max erreicht"
auf AN gesetzt werden. Ein Nein-Fall ist, wie auch in den nachfolgenden
Bedingungsszenarien, nie erforderlich. |
||||||||||||||||||||||||
![]() |
Direkt nach dem eben geschildertem Szenario soll ein weiteres folgen
(immer noch innerhalb der zuerst angelegten Bedingung. Diesmal soll
abgefragt werden, ob eine Spielzeit von 9 Tagen, 23 Stunden, 59 Minuten und
59 Sekunden erreicht wurde. Ist dem so, so sollen die Variablen "Sec - 1er",
"Sec - 10er", "Min - 1er", "Min - 10er", "H - 1er", "H - 10er", "T - 1er"
auf 0 gesetzt und die Variable "T - 10er" um 1 erhöht werden. Direkt nach diesen Variablenveränderungen soll ein Warte-Kommando das Code-Fortfahren für 1 Sekunde pausieren. |
||||||||||||||||||||||||
![]() |
Verfahrt nach selbigem Schema für folgende Spielzeitstände in genannter
Reihenfolge:
|
Spielzeit-Ereignis [Parallel] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
[Bedingung][Schalter][Timer-Max
erreicht][AUS]
|
Im englischem Maker |
<>If Switch (xxxx: Timer-Max
erreicht) is OFF <>Change Var: Var[aaa1: Sec - 1er} (+)- 1 <>Wait: 1.0sec <>If Var (aaa8: T - 10er) 9 <>If Var (aaa7: T - 1er) 9 <>If Var (aaa6: H - 10er) 2 <>If Var (aaa5: H - 1er) 3 <>If Var (aaa4: Min - 10er) 5 <>If Var (aaa3: Min - 1er) 9 <>If Var (aaa2: Sec - 10er) 5 <>If Var (aaa1: Sec - 1er) 9 <>Change Switch: Var[xxxx: Timer-Max erreicht] Switch ON <> :End Case <> :End Case <> :End Case <> :End Case <> :End Case <> :End Case <> :End Case <> :End Case <>If Var (aaa7: T - 1er) 9 <>If Var (aaa6: H - 10er) 2 <>If Var (aaa5: H - 1er) 3 <>If Var (aaa4: Min - 10er) 5 <>If Var (aaa3: Min - 1er) 9 <>If Var (aaa2: Sec - 10er) 5 <>If Var (aaa1: Sec - 1er) 9 <>Change Var: [aaa1 to aaa7] (Set)- 0 <>Chance Var: [aaa8: T - 10er] (+)- 1 <>Wait: 1.0sec <> :End Case <> :End Case <> :End Case <> :End Case <> :End Case <> :End Case <> :End Case <>If Var (aaa6: H - 10er) 2 <>If Var (aaa5: H - 1er) 3 <>If Var (aaa4: Min - 10er) 5 <>If Var (aaa3: Min - 1er) 9 <>If Var (aaa2: Sec - 10er) 5 <>If Var (aaa1: Sec - 1er) 9 <>Change Var: [aaa1 to aaa6] (Set)- 0 <>Change Var: [aaa7: T - 1er] (+)- 1 <>Wait: 1.0sec <> :End Case <> :End Case <> :End Case <> :End Case <> :End Case <> :End Case <>If Var (aaa5: H - 1er) 9 <>If Var (aaa4: Min - 10er) 5 <>If Var (aaa3: Min - 1er) 9 <>If Var (aaa2: Sec - 10er) 5 <>If Var (aaa1: Sec - 1er) 9 <>Change Var: [aaa1 to aaa5] (Set)- 0 <>Change Var: [aaa6: H - 10er] (+)- 1 <>Wait: 1.0sec <> :End Case <> :End Case <> :End Case <> :End Case <> :End Case <>If Var (aaa4: Min - 10er) 5 <>If Var (aaa3: Min - 1er) 9 <>If Var (aaa2: Sec - 10er) 5 <>If Var (aaa1: Sec - 1er) 9 <>Change Var: [aaa1 to aaa4] (Set)- 0 <>Change Var: [aaa5: H - 1er] (+)- 1 <>Wait: 1.0sec <> :End Case <> :End Case <> :End Case <> :End Case <>If Var (aaa3: Min - 1er) 9 <>If Var (aaa2: Sec - 10er) 5 <>If Var (aaa1: Sec - 1er) 9 <>Change Var: [aaa1 to aaa3] (Set)- 0 <>Change Var: [aaa5: Min - 10er] (+)- 1 <>Wait: 1.0sec <> :End Case <> :End Case <> :End Case <>If Var (aaa2: Sec - 10er) 5 <>If Var (aaa1: Sec - 1er) 9 <>Change Var: [aaa1 to aaa2] (Set)- 0 <>Change Var: [aaa5: Min - 1er] (+)- 1 <>Wait: 1.0sec <> :End Case <> :End Case <>If Var (aaa1: Sec - 1er) 9 <>Change Var: [aaa1: Sec - 1er] (Set)- 0 <>Change Var: [aaa5: Sec - 10er] (+)- 1 <>Wait: 1.0sec <> :End Case <> :End Case <> |
Im deutschem Maker (V1.10c) |
<>Bedingung:Schalter[xxxx:
Timer-Max erreicht]- AUS <>Var. ändern:[aaa1:Sec - 1er] +, 1 <>Warten: 1.0S. <>Bedingung:Varbl[aaa8: T - 10er]-9 <>Bedingung:Varbl[aaa7: T - 1er]-9 <>Bedingung:Varbl[aaa6: H - 10er]-2 <>Bedingung:Varbl[aaa5: H - 1er]-3 <>Bedingung:Varbl[aaa4: Min - 10er]-5 <>Bedingung:Varbl[aaa3: Min - 1er]-9 <>Bedingung:Varbl[aaa2: Sec - 10er]-5 <>Bedingung:Varbl[aaa1: Sec - 1er]-9 <>Schalter ändern:[xxxx: Timer-Max erreicht]-[AN] <> :End-Fall <> :End-Fall <> :End-Fall <> :End-Fall <> :End-Fall <> :End-Fall <> :End-Fall <> :End-Fall <>Bedingung:Varbl[aaa7: T - 1er]-9 <>Bedingung:Varbl[aaa6: H - 10er]-2 <>Bedingung:Varbl[aaa5: H - 1er]-3 <>Bedingung:Varbl[aaa4: Min - 10er]-5 <>Bedingung:Varbl[aaa3: Min - 1er]-9 <>Bedingung:Varbl[aaa2: Sec - 10er]-5 <>Bedingung:Varbl[aaa1: Sec - 1er]-9 <>Var. ändern:[aaa1*aaa7] Wert, 0 <>Var. ändern:[aaa8: T - 10er] +, 1 <>Warten: 1.0S. <> :End-Fall <> :End-Fall <> :End-Fall <> :End-Fall <> :End-Fall <> :End-Fall <> :End-Fall <>Bedingung:Varbl[aaa6: H - 10er]-2 <>Bedingung:Varbl[aaa5: H - 1er]-3 <>Bedingung:Varbl[aaa4: Min - 10er]-5 <>Bedingung:Varbl[aaa3: Min - 1er]-9 <>Bedingung:Varbl[aaa2: Sec - 10er]-5 <>Bedingung:Varbl[aaa1: Sec - 1er]-9 <>Var. ändern:[aaa1*aaa6] Wert, 0 <>Var. ändern:[aaa7: T - 1er] +, 1 <>Warten: 1.0S. <> :End-Fall <> :End-Fall <> :End-Fall <> :End-Fall <> :End-Fall <> :End-Fall <>Bedingung:Varbl[aaa5: H - 1er]-9 <>Bedingung:Varbl[aaa4: Min - 10er]-5 <>Bedingung:Varbl[aaa3: Min - 1er]-9 <>Bedingung:Varbl[aaa2: Sec - 10er]-5 <>Bedingung:Varbl[aaa1: Sec - 1er]-9 <>Var. ändern:[aaa1*aaa5] Wert, 0 <>Var. ändern:[aaa6: H - 10er] +, 1 <>Warten: 1.0S. <> :End-Fall <> :End-Fall <> :End-Fall <> :End-Fall <> :End-Fall <>Bedingung:Varbl[aaa4: Min - 10er]-5 <>Bedingung:Varbl[aaa3: Min - 1er]-9 <>Bedingung:Varbl[aaa2: Sec - 10er]-5 <>Bedingung:Varbl[aaa1: Sec - 1er]-9 <>Var. ändern:[aaa1*aaa4] Wert, 0 <>Var. ändern:[aaa5: H - 1er] +, 1 <>Warten: 1.0S. <> :End-Fall <> :End-Fall <> :End-Fall <> :End-Fall <>Bedingung:Varbl[aaa3: Min - 1er]-9 <>Bedingung:Varbl[aaa2: Sec - 10er]-5 <>Bedingung:Varbl[aaa1: Sec - 1er]-9 <>Var. ändern:[aaa1*aaa3] Wert, 0 <>Var. ändern:[aaa4: Min - 10er] +, 1 <>Warten: 1.0S. <> :End-Fall <> :End-Fall <> :End-Fall <>Bedingung:Varbl[aaa2: Sec - 10er]-5 <>Bedingung:Varbl[aaa1: Sec - 1er]-9 <>Var. ändern:[aaa1*aaa2] Wert, 0 <>Var. ändern:[aaa3: Min - 1er] +, 1 <>Warten: 1.0S. <> :End-Fall <> :End-Fall <>Bedingung:Varbl[aaa1: Sec - 1er]-9 <>Var. ändern:[aaa1: Sec - 1er] Wert, 0 <>Var. ändern:[aaa3: Sec - 10er] +, 1 <>Warten: 1.0S. <> :End-Fall <> :End-Fall |
Ihr habt nun die Spielzeiterfassung soweit angelegt. Immer, egal wo sich die Heldentruppe befindet, wird die Spielzeit weitergezählt. Doch zu sehen ist für die Spieler davon noch nichts. Hierfür kommt nun die am Anfang erwähnte Beispielgrafik [counterset.png] zum Einsatz, auf der ihr die Zahlen für die Darstellung der Spielzeit findet. Falls noch nicht geschehen, importiert nun das CharSet mit Hilfe "des RAW-Material-Editors/der Materialverwaltung" des Makers. Bevor ihr loslegen könnt, solltet ihr euch - wie bereits beim Geldzähler geschehen - folgendes vor Augen führen:
![]() |
Ihr habt acht Variablen, die für die Anzeige der Spielzeit
zuständig sind: "Sec - 1er", "Sec - 10er", "Min - 1er", "Min - 10er", "H - 1er", "H - 10er", "T - 1er" und "T - 10er". |
![]() |
Demzufolge braucht ihr acht Ereignisse auf der Karte "Inventory - main",
auf der ihr schon den Geldzähler angelegt habt. |
![]() |
Jedes dieser Ereignisse wird aus zehn Ereignisseiten bestehen. Jede dieser Ereignisseiten wird genau dann aktiv, wenn ein bestimmter Wert in der betreffenden Variable steht. |
![]() |
Diese Werte sollen nach folgendem Schema in jedem der sechs Ereignisse
von jeder der Variablen abgefragt werden: Seite 1: 0 Seite 2: 1 Seite 3: 2 ... Seite 10: 9 |
![]() |
Die acht Ereignisse werden keine Ereigniskommandos beinhalten,
sondern lediglich zur Zahlendarstellung dienen. |
![]() |
Die Werte der Variablen "Sec - 1er", "Min - 1er", "H - 1er" und "T -
1er" werden durch rechtsbündige Zahlen dargestellt, die restlichen vier
Variablen durch linksbündige. |
![]() |
Wichtig: Damit auch immer die richtigen Zahlen angezeigt werden, muss jedes einzelne gewählte Char-Set in den Ereignissen, die den Geld-Stand anzeigen sollen, als "Fixed Graphic/Fixierte Grafik" angezeigt werden. |
Sec - 1er - Ereignis |
[Ereignisseite 1][Variable [Sec - 1er]] >= [0] |
[Ereignisseite 2][Variable [Sec - 1er]] >= [1] |
[Ereignisseite 3][Variable [Sec - 1er]] >= [2] |
[Ereignisseite 4][Variable [Sec - 1er]] >= [3] |
[Ereignisseite 5][Variable [Sec - 1er]] >= [4] |
[Ereignisseite 6][Variable [Sec - 1er]] >= [5] |
[Ereignisseite 7][Variable [Sec - 1er]] >= [6] |
[Ereignisseite 8][Variable [Sec - 1er]] >= [7] |
[Ereignisseite 9][Variable [Sec - 1er]] >= [8] |
[Ereignisseite 10][Variable [Sec - 1er]] >= [9] |
Nach diesem Schema solltet ihr am Ende acht Ereignisse haben, die jede der
acht Variablen
"Sec - 1er", "Sec - 10er", "Min - 1er", "Min - 10er", "H - 1er", "H - 10er",
"T - 1er" und "T - 10er"
komplett von 0 bis 9 abfragen. Die Hauptseite eures Inventars könnte nun wie
folgt aussehen:
[Beispiel-Darstellung]
Das Problem, dem ihr noch gegenüber steht, ist, dass die Beispiel-Darstellung nahezu identisch ist mit der, die sich euch während des Spielens bietet. Ihr hättet also, wenn ihr nach der [Beispiel-Darstellung] vorgegangen seid, eine "zweizeilige Spielzeit-Anzeige", die eigentlich einzeilig sein sollte. Doch dies lässt sich schnell und recht einfach beheben.
![]() |
Merkt oder notiert euch die Nummern der vier Zahlen-Ereignisse, die
nicht an der richtigen Position sitzen. |
![]() |
Bedenkt: Über dem Ereignis, das die Werte der Variable "Sec - 1er" darstellt, soll das Ereignis platziert werden, das "Sec - 10er" darstellt. Über dem Ereignis, das "Min - 1er" darstellt, soll das Ereignis sitzen, das "Min - 10er" darstellt. Über das Ereignis, das "H - 1er" darstellt, soll das Ereignis gelegt werden, das "H - 10er" darstellt. Zuletzt soll über das Ereignis, das "T - 1er" darstellt, das Ereignis gelegt werden, das "T - 10er" darstellt. |
![]() |
Es sind vier zusätzliche Ereigniskommandos erforderlich, die vier der
Zahlen-Ereignisse bewegen, die allesamt über "Set Event place/Ereignis
positionieren" angelegt werden. Sie sollen dafür sorgen, dass die Ereignisse
übereinander liegen, die übereinander liegen sollen. |
![]() |
Diese vier Ereigniskommandos sollen nun ganz an den Anfang des Ereignisses angelegt werden, wo ihr schon die Ereigniskommandos zur Positionierung der Geldzähler-Ereignisse angelegt habt. |
Cash-Counter-Ereignis |
[Ereignisposition][Sec - 10er][Manuelle
Kartenposition] /* *Das Ereignis "Sec - 10er" soll auf das Ereignis "Cash-1" gelegt *werden */ [Ereignisposition][Min - 10er][Manuelle Kartenposition] /* *Das Ereignis "Min - 10er" soll auf das Ereignis "Cash-1" gelegt *werden */ [Ereignisposition][H - 10er][Manuelle Kartenposition] /* *Das Ereignis "H - 10er" soll auf das Ereignis "Cash-1" gelegt *werden */ [Ereignisposition][T - 10er][Manuelle Kartenposition] /* *Das Ereignis "T - 10er" soll auf das Ereignis "Cash-1" gelegt *werden */ /* *Direkt hiernach folgt der restliche Code des Cash-Counters */ |
Die Änderungen zum Maker-Code des zuvor angelegten Cash-Counters sind fett hervorgehoben.
Im englischem Maker |
<>Teleport Event:
Sec-10-(___,___) <>Teleport Event: Min-10-(___,___) <>Teleport Event: H-10-(___,___) <>Teleport Event: T-10-(___,___) <>Teleport Event: Cash-10-(___,___) <>Teleport Event: Cash-1000-(___,___) <>Teleport Event: Cash-100000-(___,___) <>Change Var: [asd1 to asd6] (Set)-0 <>Change Var: Var[asdf: Cash-Counter] (Set)-[$ Have] <>Loop <>If Var(asdf: Cash-Counter) 100000(>=) <>Change Var: Var[asd1: Cash-100K] (+)-1 <>Change Var: Var[asdf: Cash-Counter] (-)-100000 <> :Else Case <>If Var(asdf: Cash-Counter) 10000(>=) <>Change Var: Var[asd2: Cash-10K] (+)-1 <>Change Var: Var[asdf: Cash-Counter] (-)-10000 <> :Else Case <>If Var(asdf: Cash-Counter) 1000(>=) <>Change Var: Var[asd3: Cash-1K] (+)-1 <>Change Var: Var[asdf: Cash-Counter] (-)-1000 <> :Else Case <>If Var(asdf: Cash-Counter) 100(>=) <>Change Var: Var[asd4: Cash-100] (+)-1 <>Change Var: Var[asdf: Cash-Counter] (-)-100 <> :Else Case <>If Var(asdf: Cash-Counter) 10(>=) <>Change Var: Var[asd5: Cash-10] (+)-1 <>Change Var: Var[asdf: Cash-Counter] (-)-10 <> :Else Case <>If Var(asdf: Cash-Counter) 1(>=) <>Change Var: Var[asd6: Cash-1] (+)-1 <>Change Var: Var[asdf: Cash-Counter] (-)-1 <> :Else Case <>Break :End Case <> :End Case <> :End Case <> :End Case <> :End Case <> :End Case <> :End Loop <>Change Switch: Var[asdf: Geldzähler Läuft] Switch OFF <> |
Im deutschem Maker (V1.10c) |
<>Ereign.-Platz setzn:
Sec-10,
(___,___) <>Ereign.-Platz setzn: Min-10, (___,___) <>Ereign.-Platz setzn: H-10, (___,___) <>Ereign.-Platz setzn: T-10, (___,___) <>Ereign.-Platz setzn: Cash-10, (___,___) <>Ereign.-Platz setzn: Cash-1000, (___,___) <>Ereign.-Platz setzn: Cash-100000, (___,___) <>Var. ändern: [asd1*asd6] Wert, 0 <>Var. ändern: [asdf: Cash-Counter] Wert, Geld # <>Schleife <>Bedingung:Varbl[asdf: Cash-Counter]-100000(>=) <>Var. ändern:[asd1: Cash-100K] +, 1 <>Var. ändern:[asdf: Cash-Counter] -, 100000 <> :Ansonsten <>Bedingung:Varbl[asdf: Cash-Counter]-10000(>=) <>Var. ändern:[asd2: Cash-10K] +, 1 <>Var. ändern:[asdf: Cash-Counter] -, 10000 <> :Ansonsten <>Bedingung:Varbl[asdf: Cash-Counter]-1000(>=) <>Var. ändern:[asd3: Cash-1K] +, 1 <>Var. ändern:[asdf: Cash-Counter] -, 1000 <> :Ansonsten <>Bedingung:Varbl[asdf: Cash-Counter]-100(>=) <>Var. ändern:[asd4: Cash-100] +, 1 <>Var. ändern:[asdf: Cash-Counter] -, 100 <> :Ansonsten <>Bedingung:Varbl[asdf: Cash-Counter]-10(>=) <>Var. ändern:[asd5: Cash-10] +, 1 <>Var. ändern:[asdf: Cash-Counter] -, 10 <> :Ansonsten <>Bedingung:Varbl[asdf: Cash-Counter]-1(>=) <>Var. ändern:[asd6: Cash-1] +, 1 <>Var. ändern:[asdf: Cash-Counter] -, 1 <> :Ansonsten <>Schleife stoppen <> :End-Fall <> :End-Fall <> :End-Fall <> :End-Fall <> :End-Fall <> :End-Fall <> :Schleifenende <>Schalter ändern:[asdf: Geldzähler läuft]-[AUS] <> |