rnd-20100315-2-src
[rocksndiamonds.git] / src / game_sp / Demo.c
1 // ----------------------------------------------------------------------------
2 // Demo.c
3 // ----------------------------------------------------------------------------
4
5 #include "Demo.h"
6
7
8 int RecDemoRandomSeed;
9 byte FirstDemoByte;
10 char *MySignature;
11
12 void subGetNextDemoKey()
13 {
14   int ax;
15
16   if (0 < DemoKeyRepeatCounter)
17   {
18     DemoKeyRepeatCounter = DemoKeyRepeatCounter - 1;
19   }
20   else
21   {
22     DemoOffset = DemoOffset + 1;
23     if (DemoOffset <= FileMax)
24     {
25       ax = PlayField8[DemoOffset];
26       if (ax == 0xFF)
27       {
28         demo_stopped = 1;
29         ExitToMenuFlag = 1;
30       }
31       else
32       {
33         DemoKeyCode = ax & 0xF;
34         DemoKeyRepeatCounter = (ax & 0xF0) / 0x10;
35       }
36
37     }
38     else
39     {
40       ExitToMenuFlag = 1;
41     }
42   }
43
44 #if 0
45   printf("::: %04d [%03ld, %02d] ----------> %s [%d] [%d, %d] [%d, %d]\n",
46          TimerVar,
47          DemoOffset - DemoPointer, DemoKeyRepeatCounter,
48          (DemoKeyCode == keyNone        ? "(none)"              :
49           DemoKeyCode == keyLeft        ? "left"                :
50           DemoKeyCode == keyRight       ? "right"               :
51           DemoKeyCode == keyUp          ? "up"                  :
52           DemoKeyCode == keyDown        ? "down"                :
53           DemoKeyCode == keySpace       ? "space"               :
54           DemoKeyCode == keySpaceLeft   ? "space + left"        :
55           DemoKeyCode == keySpaceRight  ? "space + right"       :
56           DemoKeyCode == keySpaceUp     ? "space + up"          :
57           DemoKeyCode == keySpaceDown   ? "space + down"        : "(unknown)"),
58          DemoKeyCode,
59          MurphyScreenXPos, MurphyScreenYPos,
60          MurphyPosIndex % 60, MurphyPosIndex / 60);
61 #endif
62
63 }
64
65 currency GetTotalFramesOfDemo()
66 {
67   currency GetTotalFramesOfDemo;
68
69   long i;
70   currency nFrames;
71   byte db;
72
73   GetTotalFramesOfDemo = 0;
74   if (! DemoAvailable)
75     return GetTotalFramesOfDemo;
76
77   nFrames = 1;
78   i = DemoPointer + 1;
79
80   // --- On Error GoTo GetTotalFramesOfDemoEH
81   db = PlayField8[i];
82   while (db != 0xFF)
83   {
84     nFrames = nFrames + (db & 0xF0) / 0x10 + 1;
85     i = i + 1;
86     db = PlayField8[i];
87   }
88
89   GetTotalFramesOfDemo = nFrames;
90   return GetTotalFramesOfDemo;
91
92   GetTotalFramesOfDemo = 0;
93   DemoAvailable = False;
94
95   return GetTotalFramesOfDemo;
96 }