//#define RECORDDEMO

typedef struct
{
   u_short X;
   u_short Y;
   int FrameNbr;
   u_int PlayerNbr;
} Mardien;

#define  MAXMARDIEN  300
Mardien  ShotMardien[MAXMARDIEN];
int      NbrMardien = 0;
int      CurrentMardien = 0;

//-------------------------------------
// Flush demo mode informations into a
// file on the PC
//-------------------------------------
void FlushDemoInfos (void)
{
   #ifdef TARGETPC
      #ifdef RECORDDEMO
         int filehandle = PCcreat ("D:\\FLUSH.DMO", 0);
         PCwrite (filehandle, (char *)&NbrMardien, sizeof(NbrMardien));
         PCwrite (filehandle, (char *)ShotMardien, NbrMardien * sizeof (Mardien));
         PCclose (filehandle);
      #endif
   #endif
}

//------------------------------------
// demo mode dump data
//------------------------------------
void DemoDumpData (void)
{
   Mardien *j = &ShotMardien[NbrMardien - 1];

   FntPrint ("Nbr shots: %d\n", NbrMardien);
   if (NbrMardien > 0)
   {
      FntPrint ("Last shot X:%d Y:%d Plr:%d FrameCnt:%d\n",
                j->X, j->Y, j->PlayerNbr, j->FrameNbr);
   }
}

//-------------------------------------
// Initialize the demo mode module
//-------------------------------------
InitDemoMode ()
{
   #ifdef RECORDDEMO
      NbrMardien = 0;
      CurrentMardien = 0;
   #endif
}

//-------------------------------------
// Load a demo file.  Return (-1) if
// error.
//-------------------------------------
int LoadDemoFile (char *filename)
{
   if (OpenFile (filename))
      return (-1);

   if (ReadFile ((char *)&NbrMardien, sizeof (NbrMardien)) != sizeof (NbrMardien))
   {
      CloseFile ();
      return (-1);
   }

   if (ReadFile ((char *)ShotMardien, sizeof (Mardien) * NbrMardien) !=
       sizeof (Mardien) * NbrMardien)
   {
      CloseFile ();
      return (-1);
   }

   CurrentMardien = 0;

   return (0);
}
