rnd-19981012-1
authorHolger Schemel <info@artsoft.org>
Mon, 12 Oct 1998 07:44:48 +0000 (09:44 +0200)
committerHolger Schemel <info@artsoft.org>
Sat, 30 Aug 2014 08:31:06 +0000 (10:31 +0200)
src/files.c
src/network.c
src/screens.c
src/screens.h
src/tools.c
src/tools.h

index d34fe40da717af4a1ab00e4a1b927d58f4a255c7..5a290699a648c1eef340b5448081d91da48d90ce 100644 (file)
@@ -459,7 +459,9 @@ void LoadPlayerInfo(int mode)
   }
 
   level_nr = local_player->level_nr;
-  fclose(file);
+
+  if (file)
+    fclose(file);
 }
 
 void SaveLevel(int level_nr)
index 2d4e0e64f542ae9de19ba38e1d6a2d47374eb531..db7fc95f980d13811ac05718e16a5eff50959ffd 100644 (file)
@@ -506,6 +506,9 @@ static void Handle_OP_STOP_PLAYING()
   printf("OP_STOP_PLAYING: %d\n", buf[0]);
   sprintf(msgbuf, "client %d stops game", buf[0]);
   sysmsg(msgbuf);
+
+  game_status = MAINMENU;
+  DrawMainMenu();
 }
 
 static void Handle_OP_MOVE_FIGURE()
index a4489ab32048405e751f341063fdc5cd251a21c8..dbed745e212b8df13a59dbe62c74f6bfaef990c8 100644 (file)
@@ -234,7 +234,7 @@ void HandleMainMenu(int mx, int my, int dx, int dy, int button)
       else if (y==10)
       {
        SavePlayerInfo(PLAYER_LEVEL);
-        if (Request("Do you really want to quit ?",REQ_ASK|REQ_STAY_CLOSED))
+        if (Request("Do you really want to quit ?", REQ_ASK | REQ_STAY_CLOSED))
          game_status = EXITGAME;
       }
 
@@ -1507,8 +1507,13 @@ void HandleGameButtons(int mx, int my, int button)
       if (Request("Do you really want to quit the game ?",
                  REQ_ASK | REQ_STAY_CLOSED))
       { 
-       game_status = MAINMENU;
-       DrawMainMenu();
+       if (standalone)
+       {
+         game_status = MAINMENU;
+         DrawMainMenu();
+       }
+       else
+         SendToServer_StopPlaying();
       }
       else
        OpenDoor(DOOR_OPEN_1 | DOOR_COPY_BACK);
index 4095a0a0c6745ca50f7914d54aa9acbf2ea99f1a..1e29566aa86327cfb6865c4c0c42c1b48ec1bd62 100644 (file)
@@ -16,6 +16,7 @@
 
 #include "main.h"
 
+/* for DrawSetupScreen(), HandleSetupScreen() */
 #define SETUP_SCREEN_POS_START         2
 #define SETUP_SCREEN_POS_END           16
 #define SETUP_SCREEN_POS_EMPTY         (SETUP_SCREEN_POS_END - 2)
index 1327e4e58acc2a057f47c1e544e61cb41f72250b..aefd540aceac4e01b33b34b0b05261a4c36ed93e 100644 (file)
@@ -23,6 +23,7 @@
 #include "buttons.h"
 #include "joystick.h"
 #include "cartoons.h"
+#include "network.h"
 
 #include <math.h>
 
@@ -1307,6 +1308,10 @@ BOOL Request(char *text, unsigned int req_state)
   int mx,my, ty, result = -1;
   unsigned int old_door_state;
 
+  /* pause network game while waiting for request to answer */
+  if (!standalone && game_status == PLAYING && req_state & REQUEST_WAIT_FOR)
+    SendToServer_PausePlaying();
+
   old_door_state = GetDoorState();
 
   CloseDoor(DOOR_CLOSE_1);
@@ -1390,9 +1395,7 @@ BOOL Request(char *text, unsigned int req_state)
   OpenDoor(DOOR_OPEN_1);
   ClearEventQueue();
 
-  if (!(req_state & REQ_ASK) &&
-      !(req_state & REQ_CONFIRM) &&
-      !(req_state & REQ_PLAYER))
+  if (!(req_state & REQUEST_WAIT_FOR))
     return(FALSE);
 
   if (game_status != MAINMENU)
@@ -1531,6 +1534,10 @@ BOOL Request(char *text, unsigned int req_state)
     }
   }
 
+  /* continue network game after request */
+  if (!standalone && game_status == PLAYING && req_state & REQUEST_WAIT_FOR)
+    SendToServer_ContinuePlaying();
+
   return(result);
 }
 
index 4c7544df2fb191c619d31a8b2b30a7d8caee1901..40430781d1b53311dc5358b24cb7003fda59ee11 100644 (file)
 #include "main.h"
 
 /* for SetDrawtoField */
-#define DRAW_DIRECT    0
-#define DRAW_BUFFERED  1
-#define DRAW_BACKBUFFER        2
+#define DRAW_DIRECT            0
+#define DRAW_BUFFERED          1
+#define DRAW_BACKBUFFER                2
 
 /* for DrawElementShifted */
-#define NO_CUTTING     0
-#define CUT_ABOVE      1
-#define CUT_BELOW      2
-#define CUT_LEFT       4
-#define CUT_RIGHT      8
+#define NO_CUTTING             0
+#define CUT_ABOVE              (1 << 0)
+#define CUT_BELOW              (1 << 1)
+#define CUT_LEFT               (1 << 2)
+#define CUT_RIGHT              (1 << 3)
 
 /* for masking functions */
-#define NO_MASKING     0
-#define USE_MASKING    1
+#define NO_MASKING             0
+#define USE_MASKING            1
  
 /* for MoveDoor */
-#define DOOR_OPEN_1    (1 << 0)
-#define DOOR_OPEN_2    (1 << 1)
-#define DOOR_CLOSE_1   (1 << 2)
-#define DOOR_CLOSE_2   (1 << 3)
-#define DOOR_OPEN_BOTH (DOOR_OPEN_1 | DOOR_OPEN_2)
-#define DOOR_CLOSE_BOTH        (DOOR_CLOSE_1 | DOOR_CLOSE_2)
-#define DOOR_ACTION_1  (DOOR_OPEN_1 | DOOR_CLOSE_1)
-#define DOOR_ACTION_2  (DOOR_OPEN_2 | DOOR_CLOSE_2)
-#define DOOR_ACTION    (DOOR_ACTION_1 | DOOR_ACTION_2)
-#define DOOR_COPY_BACK (1 << 4)
-#define DOOR_NO_DELAY  (1 << 5)
-#define DOOR_GET_STATE (1 << 6)
+#define DOOR_OPEN_1            (1 << 0)
+#define DOOR_OPEN_2            (1 << 1)
+#define DOOR_CLOSE_1           (1 << 2)
+#define DOOR_CLOSE_2           (1 << 3)
+#define DOOR_OPEN_BOTH         (DOOR_OPEN_1 | DOOR_OPEN_2)
+#define DOOR_CLOSE_BOTH                (DOOR_CLOSE_1 | DOOR_CLOSE_2)
+#define DOOR_ACTION_1          (DOOR_OPEN_1 | DOOR_CLOSE_1)
+#define DOOR_ACTION_2          (DOOR_OPEN_2 | DOOR_CLOSE_2)
+#define DOOR_ACTION            (DOOR_ACTION_1 | DOOR_ACTION_2)
+#define DOOR_COPY_BACK         (1 << 4)
+#define DOOR_NO_DELAY          (1 << 5)
+#define DOOR_GET_STATE         (1 << 6)
 
 /* for Request */
-#define REQ_ASK                (1 << 0)
-#define REQ_OPEN       (1 << 1)
-#define REQ_CLOSE      (1 << 2)
-#define REQ_CONFIRM    (1 << 3)
-#define REQ_STAY_CLOSED        (1 << 4)
-#define REQ_STAY_OPEN  (1 << 5)
-#define REQ_PLAYER     (1 << 6)
+#define REQ_ASK                        (1 << 0)
+#define REQ_OPEN               (1 << 1)
+#define REQ_CLOSE              (1 << 2)
+#define REQ_CONFIRM            (1 << 3)
+#define REQ_STAY_CLOSED                (1 << 4)
+#define REQ_STAY_OPEN          (1 << 5)
+#define REQ_PLAYER             (1 << 6)
+
+#define REQUEST_WAIT_FOR       (REQ_ASK | REQ_CONFIRM | REQ_PLAYER)
 
 void SetDrawtoField(int);
 void BackToFront();