04.06.2012, 09:05
Ja es gibt so einen Spielzeittimer.
Das Spiel hat eine Hauptschleife, welche i.d.R. verlassen wird wenn der Spieler das Spiel beendet.
Würde man bei jedem Schleifendurchlauf die Ingame-Zeit erhöhen wäre sie von der Dauer eines Schleifendurchlaufs abhängig.
Diese Dauer wird meistens durch die Taktfrequenz der CPU bestimmt, was bedeuten würde:
Je schneller die CPU desto schneller die Ingame-Zeit.
Das wäre katrastophal!
Schick wurde für den 80286 geschrieben welchen es u.A. mit 4MHz und 25MHz gab.
Hätte man für die 4MHz Variante entwickelt, wäre die Ingame-Zeit auf dem 25MHz Modell etwas mehr als sechs mal so schnell vergangen.
Mein Prozessor hat 2400MHz, das 600-fache vom 4MHz-Modell.

Die bessere Lösung wäre soetwas wie ein Metronom mit einer festen Frequenz, die auf jedem Rechner gleich ist.
Soetwas gibt es. Der Intel 8253 PIT mit einer Frequenz von 18.2Hz unterbricht ca. alle 55ms den Prozessor
und ein Unterprogramm für das aktualisieren der Menschen-Uhrzeit wird aufgerufen.
Die Programmier haben beim Spielstart dieses Unterprogramm auf ein Eigenes umgeleitet
und erhöhen bei Ausführung die Ingame-Zeit um einen Tick.
Außerdem führen sie auch das alte Unterprogramm aus, damit beim Beenden des Spiels die Menschen-Uhrzeit nocht stimmt.
Eine Ingame-Stunde besteht aus 5400 Ticks. Daraus folgt:
1 Ingame Stunde = 5400 Ticks / (18.2 Hz * 60s) = 5 min in Menschen-Zeit.
Frage: In wieviel Menschen-Zeit würde eine Ingame-Stunde auf meinem Prozessor vergehen,
wenn die Ingame-Zeit in der Hauptschleife aktualisiert werden würde?
Schick wäre für die 4MHz Variante entwickelt worden.
Die Ingame-Zeit läuft also auch wenn man nichts tut. Möchte der Spieler das verhindern,
so kann er mit STRG+P die Pause aktivieren. Die Ingame Zeit läuft dann nicht weiter.
Dadurch, dass das Spiel vom diesem Unterprogramm an jeder beleibigen Stelle unterbrochen werden kann
ergeben sich Nebenläufigkeiten. Das Unterprogramm ist nämlich nicht nur für die Zeit zuständig,
sondern aktualisiert auch die Animationsbilder, z.B. im Tempel.
Vielleicht ist ist euch beim Start von Schick manchmal aufgefallen, dass die Augen des Priesters im Tempel
im Slot des NPC erscheinen. Das ist das Resultat von nicht ordentlich behandelten Nebenläufigkeiten
und tritt auch nicht immer auf. Diese Art von Fehlern zu debuggen ist nochmal eine Kunst für sich.
Mal sehen ob ich das auch noch lerne.
Das Spiel hat eine Hauptschleife, welche i.d.R. verlassen wird wenn der Spieler das Spiel beendet.
Würde man bei jedem Schleifendurchlauf die Ingame-Zeit erhöhen wäre sie von der Dauer eines Schleifendurchlaufs abhängig.
Diese Dauer wird meistens durch die Taktfrequenz der CPU bestimmt, was bedeuten würde:
Je schneller die CPU desto schneller die Ingame-Zeit.
Das wäre katrastophal!

Schick wurde für den 80286 geschrieben welchen es u.A. mit 4MHz und 25MHz gab.
Hätte man für die 4MHz Variante entwickelt, wäre die Ingame-Zeit auf dem 25MHz Modell etwas mehr als sechs mal so schnell vergangen.
Mein Prozessor hat 2400MHz, das 600-fache vom 4MHz-Modell.

Die bessere Lösung wäre soetwas wie ein Metronom mit einer festen Frequenz, die auf jedem Rechner gleich ist.
Soetwas gibt es. Der Intel 8253 PIT mit einer Frequenz von 18.2Hz unterbricht ca. alle 55ms den Prozessor
und ein Unterprogramm für das aktualisieren der Menschen-Uhrzeit wird aufgerufen.
Die Programmier haben beim Spielstart dieses Unterprogramm auf ein Eigenes umgeleitet
und erhöhen bei Ausführung die Ingame-Zeit um einen Tick.
Außerdem führen sie auch das alte Unterprogramm aus, damit beim Beenden des Spiels die Menschen-Uhrzeit nocht stimmt.
Eine Ingame-Stunde besteht aus 5400 Ticks. Daraus folgt:
1 Ingame Stunde = 5400 Ticks / (18.2 Hz * 60s) = 5 min in Menschen-Zeit.
Frage: In wieviel Menschen-Zeit würde eine Ingame-Stunde auf meinem Prozessor vergehen,
wenn die Ingame-Zeit in der Hauptschleife aktualisiert werden würde?
Schick wäre für die 4MHz Variante entwickelt worden.
Die Ingame-Zeit läuft also auch wenn man nichts tut. Möchte der Spieler das verhindern,
so kann er mit STRG+P die Pause aktivieren. Die Ingame Zeit läuft dann nicht weiter.
Dadurch, dass das Spiel vom diesem Unterprogramm an jeder beleibigen Stelle unterbrochen werden kann
ergeben sich Nebenläufigkeiten. Das Unterprogramm ist nämlich nicht nur für die Zeit zuständig,
sondern aktualisiert auch die Animationsbilder, z.B. im Tempel.
Vielleicht ist ist euch beim Start von Schick manchmal aufgefallen, dass die Augen des Priesters im Tempel
im Slot des NPC erscheinen. Das ist das Resultat von nicht ordentlich behandelten Nebenläufigkeiten
und tritt auch nicht immer auf. Diese Art von Fehlern zu debuggen ist nochmal eine Kunst für sich.
Mal sehen ob ich das auch noch lerne.
