Forum moved to if-forum.org
Autor Nachricht
<  Turns hochzählen in Inform6?
Mischa
BeitragVerfasst am: Mo, 8 März 2010 - 13:03  Antworten mit Zitat
Abenteurer
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...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Martin
BeitragVerfasst am: Mo, 8 März 2010 - 14:19  Antworten mit Zitat
Experte
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.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Mischa
BeitragVerfasst am: Mo, 8 März 2010 - 23:28  Antworten mit Zitat
Abenteurer
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... :-(
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
ChristianB
BeitragVerfasst am: Di, 9 März 2010 - 2:44  Antworten mit Zitat
Experte
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
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Mischa
BeitragVerfasst am: Di, 9 März 2010 - 8:00  Antworten mit Zitat
Abenteurer
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? :-)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Alle Zeiten sind GMT + 1 Stunde (MEZ)

Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Seite 1 von 1
if-de :: Forum Foren-Übersicht  >  Inform & Glulx

Neues Thema eröffnen   Neue Antwort erstellen


 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.



Kontakt: Administrator

Powered by phpBB and NoseBleed v1.05