DavidKinder / Windows-Frotz

Z-code interpreter for Windows, based on Stefan Jokisch's Frotz interpreter core.
http://www.davidkinder.co.uk/frotz.html
GNU General Public License v2.0
58 stars 12 forks source link

Time is reported as "Moves" #33

Open toiletduk opened 1 month ago

toiletduk commented 1 month ago

In games with a timestamp (Planetfall and Stationfall are ones I know specifically that exhibit this), the time is represented as "Moves" in the status bar. Proof attached.

image

Oddly, Suspect doesn't do this.

image

I messed around with the source, and I'm 99.99999% sure I did this right, and this should fix it.

DavidKinder commented 1 month ago

The Z-code files for Planetfall and Stationfall don't have the bit set in the header to indicate that the status bar is supposed to display time: instead what they call time is just the move count. For example, Planetfall running on an Amiga with Infocom's interpreter:

Planetfall

For Z-code version 3 it's up to the interpreter to draw the status bar: all the game provides is the location text, whether to show score/moves or time, and the value for that. Different Infocom interpreters showed it differently, but Planetfall and Stationfall are definitely really just showing score and moves.

DavidKinder commented 1 month ago

Suggested patch from OP inline:

diff --git a/Generic/fastmem.c b/Generic/fastmem.c
--- Generic/fastmem.c
+++ Generic/fastmem.c
@@ -273,8 +273,15 @@
    { LURKING_HORROR, 203, "870506" },
    { LURKING_HORROR, 219, "870912" },
    { LURKING_HORROR, 221, "870918" },
    {           AMFV,  47, "850313" },
+   {     PLANETFALL,  10, "880531" },
+   {     PLANETFALL,  20, "830708" },
+   {     PLANETFALL,  26, "831014" },
+   {     PLANETFALL,  29, "840118" },
+   {     PLANETFALL,  37, "851003" },
+   {     PLANETFALL,  39, "880501" },
+       {        STATIONFALL,   1, "861017" },
+       {        STATIONFALL,  63, "870218" },
+       {        STATIONFALL,  87, "870326" },
+   {    STATIONFALL, 107, "870430" },
    {        UNKNOWN,   0, "------" }
     };

     /* Open story file */
diff --git a/Generic/frotz.h b/Generic/frotz.h
--- Generic/frotz.h
+++ Generic/frotz.h
@@ -35,8 +35,10 @@
     ARTHUR,
     JOURNEY,
     LURKING_HORROR,
     AMFV,
+    PLANETFALL,
+    STATIONFALL,
     UNKNOWN
 };

 /*** Constants that may be set at compile time ***/
diff --git a/Generic/screen.c b/Generic/screen.c
--- Generic/screen.c
+++ Generic/screen.c
@@ -1866,13 +1866,21 @@
    print_string (brief ? "S: " : "Score: ");
    print_num (global1);

    pad_status_line (brief ? 8 : 14);
+    
+    if (story_id == PLANETFALL || story_id == STATIONFALL) { /* conditional statement to determine if Stationfall/Planetfall */
+                                                             /* both games have time codes that would be incorrectly reported as */
+        print_string (brief ? "T: " : "Time: ");                             /* move counts */
+       print_num (global2);

-   print_string (brief ? "M: " : "Moves: ");
-   print_num (global2);
-
     }
+    else
+    {
+        print_string (brief ? "M: " : "Moves: ");
+       print_num (global2);
+    
+    }

     /* Pad the end of the status line with spaces */

     pad_status_line (0);