rnd-19981017-1
[rocksndiamonds.git] / src / screens.c
index 907878bf6dac80c1bddbc9e2836f24d68705fa7f..d728c42a24a4ac7ec2eeabd1fb9415f9b01937ba 100644 (file)
@@ -1,13 +1,12 @@
 /***********************************************************
 *  Rocks'n'Diamonds -- McDuffin Strikes Back!              *
 *----------------------------------------------------------*
-*  ©1995 Artsoft Development                               *
-*        Holger Schemel                                    *
-*        33659 Bielefeld-Senne                             *
-*        Telefon: (0521) 493245                            *
-*        eMail: aeglos@valinor.owl.de                      *
-*               aeglos@uni-paderborn.de                    *
-*               q99492@pbhrzx.uni-paderborn.de             *
+*  (c) 1995-98 Artsoft Entertainment                       *
+*              Holger Schemel                              *
+*              Oststrasse 11a                              *
+*              33604 Bielefeld                             *
+*              phone: ++49 +521 290471                     *
+*              email: aeglos@valinor.owl.de                *
 *----------------------------------------------------------*
 *  screens.c                                               *
 ***********************************************************/
@@ -24,6 +23,7 @@
 #include "tape.h"
 #include "joystick.h"
 #include "cartoons.h"
+#include "network.h"
 
 #ifdef MSDOS
 extern unsigned char get_ascii(KeySym);
@@ -51,7 +51,7 @@ void DrawMainMenu()
   ClearWindow();
   DrawHeadline();
   DrawText(SX+32, SY+64, "Name:",FS_BIG,FC_GREEN);
-  DrawText(SX+192,SY+64, player.alias_name,FS_BIG,FC_RED);
+  DrawText(SX+192,SY+64, local_player->alias_name,FS_BIG,FC_RED);
   DrawText(SX+32, SY+96, "Level:",FS_BIG,FC_GREEN);
   DrawText(SX+352,SY+96, int2str(level_nr,3),FS_BIG,
           (level_nr<leveldir[leveldir_nr].levels ? FC_RED : FC_YELLOW));
@@ -69,7 +69,7 @@ void DrawMainMenu()
   DrawGraphic(10,3,GFX_PFEIL_L);
   DrawGraphic(14,3,GFX_PFEIL_R);
 
-  DrawText(SX+54+16,SY+326,"A Game by Artsoft Development",FS_SMALL,FC_BLUE);
+  DrawText(SX+40+16,SY+326,"A Game by Artsoft Entertainment",FS_SMALL,FC_BLUE);
   DrawText(SX+40+16,SY+344,"Graphics: Deluxe Paint IV Amiga",
           FS_SMALL,FC_BLUE);
   DrawText(SX+60+16,SY+362,"Sounds: AudioMaster IV Amiga",
@@ -146,13 +146,13 @@ void HandleMainMenu(int mx, int my, int dx, int dy, int button)
     if (new_level_nr>leveldir[leveldir_nr].levels-1)
       new_level_nr = leveldir[leveldir_nr].levels-1;
 
-    if (old_level_nr==new_level_nr || !DelayReached(&level_delay,15))
+    if (old_level_nr==new_level_nr || !DelayReached(&level_delay,150))
       goto out;
 
     level_nr = new_level_nr;
 
-    if (level_nr>player.handicap)
-      level_nr = player.handicap;
+    if (level_nr > local_player->handicap)
+      level_nr = local_player->handicap;
 
     DrawTextExt(drawto,gc,SX+352,SY+96, int2str(level_nr,3), FS_BIG,FC_RED);
     DrawTextExt(window,gc,SX+352,SY+96,        int2str(level_nr,3), FS_BIG,FC_RED);
@@ -185,7 +185,7 @@ void HandleMainMenu(int mx, int my, int dx, int dy, int button)
       if (y==3)
       {
        game_status = TYPENAME;
-       HandleTypeName(strlen(player.alias_name),0);
+       HandleTypeName(strlen(local_player->alias_name),0);
       }
       else if (y==4)
       {
@@ -205,7 +205,7 @@ void HandleMainMenu(int mx, int my, int dx, int dy, int button)
       {
        game_status = LEVELED;
        if (leveldir[leveldir_nr].readonly)
-         AreYouSure("This level is read only !",AYS_CONFIRM);
+         Request("This level is read only !",REQ_CONFIRM);
        DrawLevelEd();
       }
       else if (y==7)
@@ -215,11 +215,16 @@ void HandleMainMenu(int mx, int my, int dx, int dy, int button)
       }
       else if (y==8)
       {
-       if (autorecord_on)
+       if (setup.autorecord_on)
          TapeStartRecording();
 
-       game_status = PLAYING;
-       InitGame();
+       if (options.network)
+         SendToServer_StartPlaying();
+       else
+       {
+         game_status = PLAYING;
+         InitGame();
+       }
       }
       else if (y==9)
       {
@@ -229,7 +234,7 @@ void HandleMainMenu(int mx, int my, int dx, int dy, int button)
       else if (y==10)
       {
        SavePlayerInfo(PLAYER_LEVEL);
-        if (AreYouSure("Do you really want to quit ?",AYS_ASK|AYS_STAY_CLOSED))
+        if (Request("Do you really want to quit ?", REQ_ASK | REQ_STAY_CLOSED))
          game_status = EXITGAME;
       }
 
@@ -255,12 +260,12 @@ static int helpscreen_frame[MAX_HELPSCREEN_ELS];
 static int helpscreen_delay[MAX_HELPSCREEN_ELS];
 static int helpscreen_action[] =
 {
-  GFX_SPIELER_DOWN,4,2,
-  GFX_SPIELER_UP,4,2,
-  GFX_SPIELER_LEFT,4,2,
-  GFX_SPIELER_RIGHT,4,2,
-  GFX_SPIELER_PUSH_LEFT,4,2,
-  GFX_SPIELER_PUSH_RIGHT,4,2,                                  HA_NEXT,
+  GFX_SPIELER1_DOWN,4,2,
+  GFX_SPIELER1_UP,4,2,
+  GFX_SPIELER1_LEFT,4,2,
+  GFX_SPIELER1_RIGHT,4,2,
+  GFX_SPIELER1_PUSH_LEFT,4,2,
+  GFX_SPIELER1_PUSH_RIGHT,4,2,                                 HA_NEXT,
   GFX_ERDREICH,1,100,                                          HA_NEXT,
   GFX_LEERRAUM,1,100,                                          HA_NEXT,
   GFX_MORAST_LEER,1,100,                                       HA_NEXT,
@@ -678,15 +683,17 @@ void HandleHelpScreen(int button)
 
 void CheckCheat()
 {
-  int old_handicap = player.handicap;
+  int old_handicap = local_player->handicap;
 
-  if (!strcmp(player.alias_name,"Artsoft"))
-    player.handicap = leveldir[leveldir_nr].levels-1;
+#if 0
+  if (!strcmp(local_player->alias_name,"Artsoft"))
+#endif
+    local_player->handicap = leveldir[leveldir_nr].levels-1;
 
-  if (player.handicap != old_handicap)
+  if (local_player->handicap != old_handicap)
   {
     SavePlayerInfo(PLAYER_LEVEL);
-    level_nr = player.handicap;
+    level_nr = local_player->handicap;
   }
 }
 
@@ -698,7 +705,7 @@ void HandleTypeName(int newxpos, KeySym key)
   if (newxpos)
   {
     xpos = newxpos;
-    DrawText(SX+6*32,SY+ypos*32,player.alias_name,FS_BIG,FC_YELLOW);
+    DrawText(SX+6*32, SY+ypos*32, local_player->alias_name, FS_BIG, FC_YELLOW);
     DrawGraphic(xpos+6,ypos,GFX_KUGEL_ROT);
     return;
   }
@@ -715,25 +722,25 @@ void HandleTypeName(int newxpos, KeySym key)
   if((ascii = get_ascii(key)) && xpos<MAX_NAMELEN-1)
   {
 #endif
-    player.alias_name[xpos] = ascii;
-    player.alias_name[xpos+1] = 0;
+    local_player->alias_name[xpos] = ascii;
+    local_player->alias_name[xpos+1] = 0;
     xpos++;
     DrawTextExt(drawto,gc,SX+6*32,SY+ypos*32,
-               player.alias_name,FS_BIG,FC_YELLOW);
+               local_player->alias_name,FS_BIG,FC_YELLOW);
     DrawTextExt(window,gc,SX+6*32,SY+ypos*32,
-               player.alias_name,FS_BIG,FC_YELLOW);
+               local_player->alias_name,FS_BIG,FC_YELLOW);
     DrawGraphic(xpos+6,ypos,GFX_KUGEL_ROT);
   }
   else if ((key==XK_Delete || key==XK_BackSpace) && xpos>0)
   {
     xpos--;
-    player.alias_name[xpos] = 0;
+    local_player->alias_name[xpos] = 0;
     DrawGraphic(xpos+6,ypos,GFX_KUGEL_ROT);
     DrawGraphic(xpos+7,ypos,GFX_LEERRAUM);
   }
   else if (key==XK_Return && xpos>0)
   {
-    DrawText(SX+6*32,SY+ypos*32,player.alias_name,FS_BIG,FC_RED);
+    DrawText(SX+6*32,SY+ypos*32,local_player->alias_name,FS_BIG,FC_RED);
     DrawGraphic(xpos+6,ypos,GFX_LEERRAUM);
     SavePlayerInfo(PLAYER_SETUP);
     CheckCheat();
@@ -822,7 +829,7 @@ void HandleChooseLevel(int mx, int my, int dx, int dy, int button)
     }
     else
     {
-      player.leveldir_nr = leveldir_nr = y-3;
+      local_player->leveldir_nr = leveldir_nr = y-3;
       LoadPlayerInfo(PLAYER_LEVEL);
       SavePlayerInfo(PLAYER_SETUP);
       CheckCheat();
@@ -929,7 +936,7 @@ void DrawSetupScreen()
     if (i < SETUP_SCREEN_POS_EMPTY)
     {
       int setting_bit = setup[base].bit;
-      int setting_pos = ((player.setup & setting_bit) != 0 ? 0 : 1);
+      int setting_pos = ((local_player->setup & setting_bit) != 0 ? 0 : 1);
       DrawText(SX+14*32, SY+i*32,setup[base].mode[setting_pos],
               FS_BIG,setup[base].color[setting_pos]);
     }
@@ -1003,105 +1010,105 @@ void HandleSetupScreen(int mx, int my, int dx, int dy, int button)
 
       if (y==3 && sound_status==SOUND_AVAILABLE)
       {
-       if (SETUP_SOUND_ON(player.setup))
+       if (SETUP_SOUND_ON(local_player->setup))
        {
          DrawText(SX+14*32, SY+yy*32,"off",FS_BIG,FC_BLUE);
          DrawText(SX+14*32, SY+(yy+1)*32,"off",FS_BIG,FC_BLUE);
          DrawText(SX+14*32, SY+(yy+2)*32,"off",FS_BIG,FC_BLUE);
-         player.setup &= ~SETUP_SOUND_LOOPS;
-         player.setup &= ~SETUP_SOUND_MUSIC;
+         local_player->setup &= ~SETUP_SOUND_LOOPS;
+         local_player->setup &= ~SETUP_SOUND_MUSIC;
        }
        else
          DrawText(SX+14*32, SY+yy*32,"on ",FS_BIG,FC_YELLOW);
-       player.setup ^= SETUP_SOUND;
+       local_player->setup ^= SETUP_SOUND;
       }
       else if (y==4 && sound_loops_allowed)
       {
-       if (SETUP_SOUND_LOOPS_ON(player.setup))
+       if (SETUP_SOUND_LOOPS_ON(local_player->setup))
          DrawText(SX+14*32, SY+yy*32,"off",FS_BIG,FC_BLUE);
        else
        {
          DrawText(SX+14*32, SY+yy*32,"on ",FS_BIG,FC_YELLOW);
          DrawText(SX+14*32, SY+(yy-1)*32,"on ",FS_BIG,FC_YELLOW);
-         player.setup |= SETUP_SOUND;
+         local_player->setup |= SETUP_SOUND;
        }
-       player.setup ^= SETUP_SOUND_LOOPS;
+       local_player->setup ^= SETUP_SOUND_LOOPS;
       }
       else if (y==5 && sound_loops_allowed)
       {
-       if (SETUP_SOUND_MUSIC_ON(player.setup))
+       if (SETUP_SOUND_MUSIC_ON(local_player->setup))
          DrawText(SX+14*32, SY+yy*32,"off",FS_BIG,FC_BLUE);
        else
        {
          DrawText(SX+14*32, SY+yy*32,"on ",FS_BIG,FC_YELLOW);
          DrawText(SX+14*32, SY+(yy-2)*32,"on ",FS_BIG,FC_YELLOW);
-         player.setup |= SETUP_SOUND;
+         local_player->setup |= SETUP_SOUND;
        }
-       player.setup ^= SETUP_SOUND_MUSIC;
+       local_player->setup ^= SETUP_SOUND_MUSIC;
       }
       else if (y==6)
       {
-       if (SETUP_TOONS_ON(player.setup))
+       if (SETUP_TOONS_ON(local_player->setup))
          DrawText(SX+14*32, SY+yy*32,"off",FS_BIG,FC_BLUE);
        else
          DrawText(SX+14*32, SY+yy*32,"on ",FS_BIG,FC_YELLOW);
-       player.setup ^= SETUP_TOONS;
+       local_player->setup ^= SETUP_TOONS;
       }
       else if (y==7)
       {
-       if (!SETUP_DIRECT_DRAW_ON(player.setup))
+       if (!SETUP_DIRECT_DRAW_ON(local_player->setup))
          DrawText(SX+14*32, SY+yy*32,"off",FS_BIG,FC_BLUE);
        else
          DrawText(SX+14*32, SY+yy*32,"on ",FS_BIG,FC_YELLOW);
-       player.setup ^= SETUP_DIRECT_DRAW;
+       local_player->setup ^= SETUP_DIRECT_DRAW;
       }
       else if (y==8)
       {
-       if (SETUP_SCROLL_DELAY_ON(player.setup))
+       if (SETUP_SCROLL_DELAY_ON(local_player->setup))
          DrawText(SX+14*32, SY+yy*32,"off",FS_BIG,FC_BLUE);
        else
          DrawText(SX+14*32, SY+yy*32,"on ",FS_BIG,FC_YELLOW);
-       player.setup ^= SETUP_SCROLL_DELAY;
+       local_player->setup ^= SETUP_SCROLL_DELAY;
       }
       else if (y==9)
       {
-       if (SETUP_SOFT_SCROLL_ON(player.setup))
+       if (SETUP_SOFT_SCROLL_ON(local_player->setup))
          DrawText(SX+14*32, SY+yy*32,"off",FS_BIG,FC_BLUE);
        else
          DrawText(SX+14*32, SY+yy*32,"on ",FS_BIG,FC_YELLOW);
-       player.setup ^= SETUP_SOFT_SCROLL;
+       local_player->setup ^= SETUP_SOFT_SCROLL;
       }
       else if (y==10)
       {
-       if (SETUP_FADING_ON(player.setup))
+       if (SETUP_FADING_ON(local_player->setup))
          DrawText(SX+14*32, SY+yy*32,"off",FS_BIG,FC_BLUE);
        else
          DrawText(SX+14*32, SY+yy*32,"on ",FS_BIG,FC_YELLOW);
-       player.setup ^= SETUP_FADING;
+       local_player->setup ^= SETUP_FADING;
       }
       else if (y==11)
       {
-       if (SETUP_QUICK_DOORS_ON(player.setup))
+       if (SETUP_QUICK_DOORS_ON(local_player->setup))
          DrawText(SX+14*32, SY+yy*32,"off",FS_BIG,FC_BLUE);
        else
          DrawText(SX+14*32, SY+yy*32,"on ",FS_BIG,FC_YELLOW);
-       player.setup ^= SETUP_QUICK_DOORS;
+       local_player->setup ^= SETUP_QUICK_DOORS;
       }
       else if (y==12)
       {
-       if (SETUP_AUTO_RECORD_ON(player.setup))
+       if (SETUP_AUTO_RECORD_ON(local_player->setup))
          DrawText(SX+14*32, SY+yy*32,"off",FS_BIG,FC_BLUE);
        else
          DrawText(SX+14*32, SY+yy*32,"on ",FS_BIG,FC_YELLOW);
-       player.setup ^= SETUP_AUTO_RECORD;
+       local_player->setup ^= SETUP_AUTO_RECORD;
       }
       else if (y==13)
       {
-       if (SETUP_2ND_JOYSTICK_ON(player.setup))
+       if (SETUP_2ND_JOYSTICK_ON(local_player->setup))
          DrawText(SX+14*32, SY+yy*32,"1st",FS_BIG,FC_YELLOW);
        else
          DrawText(SX+14*32, SY+yy*32,"2nd",FS_BIG,FC_YELLOW);
-       player.setup ^= SETUP_2ND_JOYSTICK;
+       local_player->setup ^= SETUP_2ND_JOYSTICK;
       }
       else if (y==14)
       {
@@ -1238,12 +1245,12 @@ void CalibrateJoystick()
   new_joystick_xmiddle = joy_ctrl.x;
   new_joystick_ymiddle = joy_ctrl.y;
 
-  joystick[joystick_nr].xleft = new_joystick_xleft;
-  joystick[joystick_nr].yupper = new_joystick_yupper;
-  joystick[joystick_nr].xright = new_joystick_xright;
-  joystick[joystick_nr].ylower = new_joystick_ylower;
-  joystick[joystick_nr].xmiddle = new_joystick_xmiddle;
-  joystick[joystick_nr].ymiddle = new_joystick_ymiddle;
+  joystick[setup.joystick_nr].xleft = new_joystick_xleft;
+  joystick[setup.joystick_nr].yupper = new_joystick_yupper;
+  joystick[setup.joystick_nr].xright = new_joystick_xright;
+  joystick[setup.joystick_nr].ylower = new_joystick_ylower;
+  joystick[setup.joystick_nr].xmiddle = new_joystick_xmiddle;
+  joystick[setup.joystick_nr].ymiddle = new_joystick_ymiddle;
 
   CheckJoystickData();
 
@@ -1256,7 +1263,7 @@ void CalibrateJoystick()
 
 #ifdef MSDOS
   joy_nr[0] = '#';
-  joy_nr[1] = SETUP_2ND_JOYSTICK_ON(player.setup)+49;
+  joy_nr[1] = SETUP_2ND_JOYSTICK_ON(local_player->setup)+49;
   joy_nr[2] = '\0';
 
   remove_joystick();
@@ -1276,7 +1283,7 @@ void CalibrateJoystick()
   BackToFront();
 
   for(clear_keybuf();!keypressed(););
-  calibrate_joystick(SETUP_2ND_JOYSTICK_ON(player.setup));
+  calibrate_joystick(SETUP_2ND_JOYSTICK_ON(local_player->setup));
 
   ClearWindow();
   DrawText(SX+16, SY+7*32, "MOVE JOYSTICK TO",FS_BIG,FC_YELLOW);
@@ -1285,7 +1292,7 @@ void CalibrateJoystick()
   BackToFront();
 
   for(clear_keybuf();!keypressed(););
-  calibrate_joystick(SETUP_2ND_JOYSTICK_ON(player.setup));
+  calibrate_joystick(SETUP_2ND_JOYSTICK_ON(local_player->setup));
 
   DrawSetupScreen();
   return;
@@ -1299,18 +1306,18 @@ void CalibrateJoystick()
   DrawSetupScreen();
 }
 
-void HandleGameActions()
+void HandleGameActions(byte player_action)
 {
   if (game_status != PLAYING)
     return;
 
-  if (LevelSolved)
+  if (local_player->LevelSolved)
     GameWon();
 
-  if (PlayerGone && !TAPE_IS_STOPPED(tape))
+  if (AllPlayersGone && !TAPE_IS_STOPPED(tape))
     TapeStop();
 
-  GameActions();
+  GameActions(player_action);
 
   BackToFront();
 }
@@ -1328,7 +1335,7 @@ void HandleVideoButtons(int mx, int my, int button)
       {
        LoadLevelTape(level_nr);
        if (TAPE_IS_EMPTY(tape))
-         AreYouSure("No tape for this level !",AYS_CONFIRM);
+         Request("No tape for this level !",REQ_CONFIRM);
       }
       else
       {
@@ -1338,18 +1345,27 @@ void HandleVideoButtons(int mx, int my, int button)
       }
       DrawCompleteVideoDisplay();
       break;
+
     case BUTTON_VIDEO_STOP:
       TapeStop();
       break;
+
     case BUTTON_VIDEO_PAUSE:
       TapeTogglePause();
       break;
+
     case BUTTON_VIDEO_REC:
       if (TAPE_IS_STOPPED(tape))
       {
        TapeStartRecording();
-       game_status = PLAYING;
-       InitGame();
+
+       if (options.network)
+         SendToServer_StartPlaying();
+       else
+       {
+         game_status = PLAYING;
+         InitGame();
+       }
       }
       else if (tape.pausing)
       {
@@ -1366,6 +1382,7 @@ void HandleVideoButtons(int mx, int my, int button)
          TapeTogglePause();
       }
       break;
+
     case BUTTON_VIDEO_PLAY:
       if (TAPE_IS_EMPTY(tape))
        break;
@@ -1373,6 +1390,7 @@ void HandleVideoButtons(int mx, int my, int button)
       if (TAPE_IS_STOPPED(tape))
       {
        TapeStartPlaying();
+
        game_status = PLAYING;
        InitGame();
       }
@@ -1398,6 +1416,7 @@ void HandleVideoButtons(int mx, int my, int button)
        }
       }
       break;
+
     default:
       break;
   }
@@ -1413,55 +1432,58 @@ void HandleSoundButtons(int mx, int my, int button)
   switch(CheckSoundButtons(mx,my,button))
   {
     case BUTTON_SOUND_MUSIC:
-      if (sound_music_on)
+      if (setup.sound_music_on)
       { 
-       sound_music_on = FALSE;
-       player.setup &= ~SETUP_SOUND_MUSIC;
+       setup.sound_music_on = FALSE;
+       local_player->setup &= ~SETUP_SOUND_MUSIC;
        FadeSound(background_loop[level_nr % num_bg_loops]);
        DrawSoundDisplay(BUTTON_SOUND_MUSIC_OFF);
       }
       else if (sound_loops_allowed)
       { 
-       sound_on = sound_music_on = TRUE;
-       player.setup |= (SETUP_SOUND | SETUP_SOUND_MUSIC);
+       setup.sound_on = setup.sound_music_on = TRUE;
+       local_player->setup |= (SETUP_SOUND | SETUP_SOUND_MUSIC);
        PlaySoundLoop(background_loop[level_nr % num_bg_loops]);
        DrawSoundDisplay(BUTTON_SOUND_MUSIC_ON);
       }
       else
        DrawSoundDisplay(BUTTON_SOUND_MUSIC_OFF);
       break;
+
     case BUTTON_SOUND_LOOPS:
-      if (sound_loops_on)
+      if (setup.sound_loops_on)
       { 
-       sound_loops_on = FALSE;
-       player.setup &= ~SETUP_SOUND_LOOPS;
+       setup.sound_loops_on = FALSE;
+       local_player->setup &= ~SETUP_SOUND_LOOPS;
        DrawSoundDisplay(BUTTON_SOUND_LOOPS_OFF);
       }
       else if (sound_loops_allowed)
       { 
-       sound_on = sound_loops_on = TRUE;
-       player.setup |= (SETUP_SOUND | SETUP_SOUND_LOOPS);
+       setup.sound_on = setup.sound_loops_on = TRUE;
+       local_player->setup |= (SETUP_SOUND | SETUP_SOUND_LOOPS);
        DrawSoundDisplay(BUTTON_SOUND_LOOPS_ON);
       }
       else
        DrawSoundDisplay(BUTTON_SOUND_LOOPS_OFF);
       break;
+
     case BUTTON_SOUND_SIMPLE:
-      if (sound_simple_on)
+      if (setup.sound_simple_on)
       { 
-       sound_simple_on = FALSE;
-       player.setup &= ~SETUP_SOUND;
+       setup.sound_simple_on = FALSE;
+       local_player->setup &= ~SETUP_SOUND;
        DrawSoundDisplay(BUTTON_SOUND_SIMPLE_OFF);
       }
       else if (sound_status==SOUND_AVAILABLE)
       { 
-       sound_on = sound_simple_on = TRUE;
-       player.setup |= SETUP_SOUND;
+       setup.sound_on = setup.sound_simple_on = TRUE;
+       local_player->setup |= SETUP_SOUND;
        DrawSoundDisplay(BUTTON_SOUND_SIMPLE_ON);
       }
       else
        DrawSoundDisplay(BUTTON_SOUND_SIMPLE_OFF);
       break;
+
     default:
       break;
   }
@@ -1477,7 +1499,7 @@ void HandleGameButtons(int mx, int my, int button)
   switch(CheckGameButtons(mx,my,button))
   {
     case BUTTON_GAME_STOP:
-      if (GameOver)
+      if (AllPlayersGone)
       {
        CloseDoor(DOOR_CLOSE_1);
        game_status = MAINMENU;
@@ -1485,34 +1507,70 @@ void HandleGameButtons(int mx, int my, int button)
        break;
       }
 
-      if (AreYouSure("Do you really want to quit the game ?",
-                     AYS_ASK | AYS_STAY_CLOSED))
+      if (Request("Do you really want to quit the game ?",
+                 REQ_ASK | REQ_STAY_CLOSED))
       { 
-       game_status = MAINMENU;
-       DrawMainMenu();
+       if (options.network)
+         SendToServer_StopPlaying();
+       else
+       {
+         game_status = MAINMENU;
+         DrawMainMenu();
+       }
       }
       else
        OpenDoor(DOOR_OPEN_1 | DOOR_COPY_BACK);
       break;
+
     case BUTTON_GAME_PAUSE:
+      if (options.network)
+      {
+       if (tape.pausing)
+         SendToServer_ContinuePlaying();
+       else
+         SendToServer_PausePlaying();
+      }
+      else
+       TapeTogglePause();
+
+      /*
       if (tape.pausing)
       {
-       tape.pausing = FALSE;
-       DrawVideoDisplay(VIDEO_STATE_PAUSE_OFF,0);
+       if (options.network)
+         SendToServer_ContinuePlaying();
+       else
+       {
+         tape.pausing = FALSE;
+         DrawVideoDisplay(VIDEO_STATE_PAUSE_OFF,0);
+       }
       }
       else
       {
-       tape.pausing = TRUE;
-       DrawVideoDisplay(VIDEO_STATE_PAUSE_ON,0);
+       if (options.network)
+         SendToServer_PausePlaying();
+       else
+       {
+         tape.pausing = TRUE;
+         DrawVideoDisplay(VIDEO_STATE_PAUSE_ON,0);
+       }
       }
+      */
+
       break;
+
     case BUTTON_GAME_PLAY:
       if (tape.pausing)
       {
-       tape.pausing = FALSE;
-       DrawVideoDisplay(VIDEO_STATE_PAUSE_OFF,0);
+       if (options.network)
+         SendToServer_ContinuePlaying();
+       else
+       {
+         tape.pausing = FALSE;
+         DrawVideoDisplay(VIDEO_STATE_PAUSE_OFF,0);
+       }
       }
       break;
+
     default:
       break;
   }