Autor |
Nachricht |
< Turns hochzählen in Inform6? |
|
Verfasst am:
Mo, 8 März 2010 - 13:03
|
|
|
Abenteurer

Anmeldungsdatum: 05.03.2008
Beiträge: 285
Wohnort: Wien
|
|
Weiß einer von euch, wie man händisch die Turns hochzählen kann?
Ich will nämlich auch in einer menügesteuerten Konversation die Zeit weiterlaufen lassen.
TimePasses() war irgendwie nicht das Richtige... |
|
|
|
 |
|
Verfasst am:
Mo, 8 März 2010 - 14:19
|
|
|
Experte

Anmeldungsdatum: 25.08.2002
Beiträge: 677
Wohnort: München
|
|
Mischa hat folgendes geschrieben: | TimePasses() war irgendwie nicht das Richtige... |
TimePasses ist ein Einhänger, bei dem Du definieren kannst, was nach jedem Zug passieren soll. Er wird aufgerufen, nachdem die Dämonen und Zeitzünder (timers) abgelaufen sind.
Du kannst aber die Routine verwenden, die TimePasses() aufruft. Mit InformLibrary.end_turn_sequence() lässt Du alles das passieren, was in einem normalen Zug passiert, nachdem die Eingabe des Spielers abgearbeitet wurde: Zeit und Züge werden hochgezählt, Dämonen, Timer, each_turn und TimePasses() werden aufgerufen, und dann werden noch ein paar Haushaltdinge erledigt wie allen Objekten, die beim Spieler sind das Attribut moved zu geben.
Wenn Dein Menü eine Konversation ist, ist das gewiss die richtige Methode.
Wenn Du nur die Züge und die Spielzeit aktualisieren willst, könntest Du AdvanceWorldClock() aufrufen. Dann passiert aber sonst nichts. Das ist vermutlich keine so gute Lösung, denn wie genau die Anzahl der Züge ist, ist ja egal. Wichtig ist ja, was in den Zügen passiert. (Und, schlimmer, wenn Du Züge hernimmst, um Ereignisse zu coden, kann es sein, dass Deine Timer den richtigen Zug verpassen, weil er mit AdvanceWorldClock() übersprungen wurde.)
Zur Illustration:
Code: |
Constant Story = "Zwischenruf";
Constant Headline = "^Eine interaktive Zeitverschiebung^^";
Replace WaitSub;
Replace ThinkSub;
Include "Parser.h";
Include "VerbLib.h";
Object Park "In einem Park"
with name 'blaetter' 'laub',
description
"Der kalte Oktoberwind pfeift durch diesen zugigen
Teil des Stadtparks.",
cant_go "Nicht jetzt. Du musst auf deinen Kontakt warten.",
each_turn [;
switch(turns % 4) {
1: "Ein scharfer Windstoss wirbelt einige Blätter
umher.^";
2: "Der Lärm einer Polizeisirene wird vom Wind
herübergetragen.^";
3: "Ein Hund bellt irgendwo.^";
default:
"Wo bleibt denn bloß dieser ~Schmidt~?^";
}
],
has light;
[ WaitSub;
print "Du wartest...^^";
InformLibrary.end_turn_sequence();
print "Du und wartest...^^";
InformLibrary.end_turn_sequence();
print "... und wartest.^^";
InformLibrary.end_turn_sequence();
"Nichts.";
];
[ ThinkSub;
print "Du denkst...^^";
AdvanceWorldClock();
print "Du und grübelst...^^";
AdvanceWorldClock();
print "... und zermarterst dein Hirn.^^";
AdvanceWorldClock();
"Nichts.";
];
[ Initialise;
location = Park;
"^^^Hier ist die Stelle, wo Du ~Schmidt~ treffen sollst.^^^";
];
Include "GermanG";
|
"Warte" oder "z" implementiet Fall 1 von oben, "denke nach" Fall 2. _________________ Every silver lining has a cloud. |
|
|
|
 |
|
Verfasst am:
Mo, 8 März 2010 - 23:28
|
|
|
Abenteurer

Anmeldungsdatum: 05.03.2008
Beiträge: 285
Wohnort: Wien
|
|
Im Prinzip funktioniert das Hochzählen... Allerdings nicht in Echtzeit. Die Turns in der Statusline werden erst am Ende der Konversation (die in einer (Endlos-)Schleife abläuft) aktualisiert.
Ein eingestellter Timer schlägt zu, aber die Statusline hätte ich auch gern aktuell. DrawStatusLine() hat da leider nichts gebracht... :-( |
|
|
|
 |
|
Verfasst am:
Di, 9 März 2010 - 2:44
|
|
|
Experte

Anmeldungsdatum: 05.05.2004
Beiträge: 633
Wohnort: Hamburg
|
|
Hi Mischa,
falls Du die an TWW angepasste phtalkoo.h benutzt (Endlosschleife klingt ja fast so), dann probier doch mal bitte Folgendes kurz vor Ende der TalkTo-"Schleife" (in meiner Version Zeile 125):
Code: | InformLibrary.end_turn_sequence(); DisplayStatus(); |
direkt vor
Code: | self.loop = true; <<TalkTo self>>; |
DrawStatusLine() wird beim Lesen der Tastatureingabe schon automatisch aktualisiert, aber die Variable sline2 wird erst mit DisplayStatus() auf den neuesten Stand gebracht.
Grüße,
Christian |
|
|
|
 |
|
Verfasst am:
Di, 9 März 2010 - 8:00
|
|
|
Abenteurer

Anmeldungsdatum: 05.03.2008
Beiträge: 285
Wohnort: Wien
|
|
Natürlich verwende ich deine Library! :-)
Und ja, jetzt klappt alles! :-) Danke dafür.
Ich merke immer wieder, wie lückenhaft das DM4 ist... :-(
Hat irgendwer ein besseres Nachschlagewerk?
Edit: Habe allerdings noch eine Abfrage eingefügt, sonst würden die Turns an Diskussionsenden zweimal hochgezählt. Zusätzlich hat der NPC nun noch ein Flag talking, das wahr ist, wenn gerade der Dialog in Schleife läuft. Könnte irgendwer an der Library Interesse haben? :-) |
|
|
|
 |
|