rnd-19990107-2
authorHolger Schemel <info@artsoft.org>
Thu, 7 Jan 1999 00:28:43 +0000 (01:28 +0100)
committerHolger Schemel <info@artsoft.org>
Sat, 30 Aug 2014 08:32:52 +0000 (10:32 +0200)
src/editor.c
src/files.c
src/game.c
src/main.h
src/misc.c
src/misc.h
src/sound.c
src/tools.c

index 6c1375652715fe1b6db18057fabe38ac2e7bb125..1265f4f72def1379441a5bd44af6991018146391 100644 (file)
@@ -18,6 +18,7 @@
 #include "buttons.h"
 #include "files.h"
 #include "game.h"
 #include "buttons.h"
 #include "files.h"
 #include "game.h"
+#include "tape.h"
 
 /* positions in the level editor */
 #define ED_WIN_MB_LEFT_XPOS    7
 
 /* positions in the level editor */
 #define ED_WIN_MB_LEFT_XPOS    7
@@ -909,6 +910,8 @@ void DrawLevelEd()
 
   CloseDoor(DOOR_CLOSE_ALL);
 
 
   CloseDoor(DOOR_CLOSE_ALL);
 
+  OpenDoor(DOOR_OPEN_2 | DOOR_NO_DELAY);
+
   if (level_editor_test_game)
   {
     for(x=0; x<lev_fieldx; x++)
   if (level_editor_test_game)
   {
     for(x=0; x<lev_fieldx; x++)
@@ -2969,8 +2972,25 @@ static void HandleControlButtons(struct GadgetInfo *gi)
          for(y=0; y<lev_fieldy; y++)
            Ur[x][y] = Feld[x][y];
 
          for(y=0; y<lev_fieldy; y++)
            Ur[x][y] = Feld[x][y];
 
+       UnmapLevelEditorGadgets();
+
+       /* draw smaller door */
+       XCopyArea(display, pix[PIX_DOOR], drawto, gc,
+                 DOOR_GFX_PAGEX7, 64,
+                 108, 64,
+                 EX - 4, EY - 12);
+       redraw_mask |= REDRAW_ALL;
+
+       CloseDoor(DOOR_CLOSE_ALL);
+
+       DrawCompleteVideoDisplay();
+
+       if (setup.autorecord)
+         TapeStartRecording();
+
        level_editor_test_game = TRUE;
        game_status = PLAYING;
        level_editor_test_game = TRUE;
        game_status = PLAYING;
+
        InitGame();
       }
       break;
        InitGame();
       }
       break;
index be07f7201127b37cc837be9e6653ef3f1f993e1f..87a60c1cc6112ad8546d4c8ad7587471b357d5d6 100644 (file)
@@ -421,20 +421,6 @@ void LoadLevel(int level_nr)
     Error(ERR_WARN, "using high speed movement for player");
     level.high_speed = TRUE;
   }
     Error(ERR_WARN, "using high speed movement for player");
     level.high_speed = TRUE;
   }
-
-  /* determine border element */
-  BorderElement = EL_LEERRAUM;
-  for(y=0; y<lev_fieldy && BorderElement == EL_LEERRAUM; y++)
-  {
-    for(x=0; x<lev_fieldx; x++)
-    {
-      if (!IS_MASSIVE(Feld[x][y]))
-       BorderElement = EL_BETON;
-
-      if (y != 0 && y != lev_fieldy - 1 && x != lev_fieldx - 1)
-       x = lev_fieldx - 2;
-    }
-  }
 }
 
 void SaveLevel(int level_nr)
 }
 
 void SaveLevel(int level_nr)
index 02448c8bbb1ae3ab56a1f2ae1d0440dec51a666c..4514b646f2ca304e1f51546cab27cd22dcf5a6dc 100644 (file)
@@ -535,6 +535,9 @@ void InitGame()
                    emulate_sb ? EMU_SOKOBAN :
                    emulate_sp ? EMU_SUPAPLEX : EMU_NONE);
 
                    emulate_sb ? EMU_SOKOBAN :
                    emulate_sp ? EMU_SUPAPLEX : EMU_NONE);
 
+  /* determine border element for this level */
+  SetBorderElement();
+
   if (BorderElement == EL_LEERRAUM)
   {
     SBX_Left = 0;
   if (BorderElement == EL_LEERRAUM)
   {
     SBX_Left = 0;
@@ -551,26 +554,11 @@ void InitGame()
   }
 
   if (lev_fieldx < SCR_FIELDX)
   }
 
   if (lev_fieldx < SCR_FIELDX)
-  {
     SBX_Left = SBX_Right = -1 * (SCR_FIELDX - lev_fieldx) / 2;
 
     SBX_Left = SBX_Right = -1 * (SCR_FIELDX - lev_fieldx) / 2;
 
-    /*
-    SBX_Left  -= (SCR_FIELDX - lev_fieldx) / 2;
-    SBX_Right -= (SCR_FIELDX - lev_fieldx) / 2;
-    */
-  }
-
   if (lev_fieldy < SCR_FIELDY)
   if (lev_fieldy < SCR_FIELDY)
-  {
     SBY_Upper = SBY_Lower = -1 * (SCR_FIELDY - lev_fieldy) / 2;
 
     SBY_Upper = SBY_Lower = -1 * (SCR_FIELDY - lev_fieldy) / 2;
 
-    /*
-    SBY_Upper -= (SCR_FIELDY - lev_fieldy) / 2;
-    SBY_Lower -= (SCR_FIELDY - lev_fieldy) / 2;
-    */
-  }
-
-#if 1
   scroll_x = SBX_Left;
   scroll_y = SBY_Upper;
   if (local_player->jx >= SBX_Left + MIDPOSX)
   scroll_x = SBX_Left;
   scroll_y = SBY_Upper;
   if (local_player->jx >= SBX_Left + MIDPOSX)
@@ -581,17 +569,6 @@ void InitGame()
     scroll_y = (local_player->jy <= SBY_Lower + MIDPOSY ?
                local_player->jy - MIDPOSY :
                SBY_Lower);
     scroll_y = (local_player->jy <= SBY_Lower + MIDPOSY ?
                local_player->jy - MIDPOSY :
                SBY_Lower);
-#else
-  scroll_x = scroll_y = -1;
-  if (local_player->jx >= MIDPOSX-1)
-    scroll_x = (local_player->jx <= lev_fieldx-MIDPOSX ?
-               local_player->jx - MIDPOSX :
-               lev_fieldx - SCR_FIELDX + 1);
-  if (local_player->jy >= MIDPOSY-1)
-    scroll_y = (local_player->jy <= lev_fieldy-MIDPOSY ?
-               local_player->jy - MIDPOSY :
-               lev_fieldy - SCR_FIELDY + 1);
-#endif
 
   CloseDoor(DOOR_CLOSE_1);
 
 
   CloseDoor(DOOR_CLOSE_1);
 
@@ -630,7 +607,7 @@ void InitGame()
            DOOR_GFX_PAGEX1 + GAME_CONTROL_XPOS,
            DOOR_GFX_PAGEY1 + GAME_CONTROL_YPOS);
 
            DOOR_GFX_PAGEX1 + GAME_CONTROL_XPOS,
            DOOR_GFX_PAGEY1 + GAME_CONTROL_YPOS);
 
-  OpenDoor(DOOR_OPEN_1);
+  OpenDoor(DOOR_OPEN_ALL);
 
   if (setup.sound_music)
     PlaySoundLoop(background_loop[level_nr % num_bg_loops]);
 
   if (setup.sound_music)
     PlaySoundLoop(background_loop[level_nr % num_bg_loops]);
@@ -3919,19 +3896,13 @@ boolean MoveFigure(struct PlayerInfo *player, int dx, int dy)
     {
       if (jx != old_jx)                /* player has moved horizontally */
       {
     {
       if (jx != old_jx)                /* player has moved horizontally */
       {
-       if ((player->MovDir == MV_LEFT && scroll_x > jx-MIDPOSX+offset) ||
-           (player->MovDir == MV_RIGHT && scroll_x < jx-MIDPOSX-offset))
+       if ((player->MovDir == MV_LEFT && scroll_x > jx - MIDPOSX + offset) ||
+           (player->MovDir == MV_RIGHT && scroll_x < jx - MIDPOSX - offset))
          scroll_x = jx-MIDPOSX + (scroll_x < jx-MIDPOSX ? -offset : +offset);
 
          scroll_x = jx-MIDPOSX + (scroll_x < jx-MIDPOSX ? -offset : +offset);
 
-#if 1
        /* don't scroll over playfield boundaries */
        if (scroll_x < SBX_Left || scroll_x > SBX_Right)
          scroll_x = (scroll_x < SBX_Left ? SBX_Left : SBX_Right);
        /* don't scroll over playfield boundaries */
        if (scroll_x < SBX_Left || scroll_x > SBX_Right)
          scroll_x = (scroll_x < SBX_Left ? SBX_Left : SBX_Right);
-#else
-       /* don't scroll over playfield boundaries */
-       if (scroll_x < -1 || scroll_x > lev_fieldx - SCR_FIELDX + 1)
-         scroll_x = (scroll_x < -1 ? -1 : lev_fieldx - SCR_FIELDX + 1);
-#endif
 
        /* don't scroll more than one field at a time */
        scroll_x = old_scroll_x + SIGN(scroll_x - old_scroll_x);
 
        /* don't scroll more than one field at a time */
        scroll_x = old_scroll_x + SIGN(scroll_x - old_scroll_x);
@@ -3943,19 +3914,13 @@ boolean MoveFigure(struct PlayerInfo *player, int dx, int dy)
       }
       else                     /* player has moved vertically */
       {
       }
       else                     /* player has moved vertically */
       {
-       if ((player->MovDir == MV_UP && scroll_y > jy-MIDPOSY+offset) ||
-           (player->MovDir == MV_DOWN && scroll_y < jy-MIDPOSY-offset))
+       if ((player->MovDir == MV_UP && scroll_y > jy - MIDPOSY + offset) ||
+           (player->MovDir == MV_DOWN && scroll_y < jy - MIDPOSY - offset))
          scroll_y = jy-MIDPOSY + (scroll_y < jy-MIDPOSY ? -offset : +offset);
 
          scroll_y = jy-MIDPOSY + (scroll_y < jy-MIDPOSY ? -offset : +offset);
 
-#if 1
        /* don't scroll over playfield boundaries */
        if (scroll_y < SBY_Upper || scroll_y > SBY_Lower)
          scroll_y = (scroll_y < SBY_Upper ? SBY_Upper : SBY_Lower);
        /* don't scroll over playfield boundaries */
        if (scroll_y < SBY_Upper || scroll_y > SBY_Lower)
          scroll_y = (scroll_y < SBY_Upper ? SBY_Upper : SBY_Lower);
-#else
-       /* don't scroll over playfield boundaries */
-       if (scroll_y < -1 || scroll_y > lev_fieldy - SCR_FIELDY + 1)
-         scroll_y = (scroll_y < -1 ? -1 : lev_fieldy - SCR_FIELDY + 1);
-#endif
 
        /* don't scroll more than one field at a time */
        scroll_y = old_scroll_y + SIGN(scroll_y - old_scroll_y);
 
        /* don't scroll more than one field at a time */
        scroll_y = old_scroll_y + SIGN(scroll_y - old_scroll_y);
index f1d500482a641d27f839fc6379de3cebf97db412..c945cec02360582136ce66d7629cc00aec7c70a0 100644 (file)
@@ -65,14 +65,8 @@ typedef unsigned char byte;
 #define SCR_FIELDY     17
 #define MAX_BUF_XSIZE  (SCR_FIELDX + 2)
 #define MAX_BUF_YSIZE  (SCR_FIELDY + 2)
 #define SCR_FIELDY     17
 #define MAX_BUF_XSIZE  (SCR_FIELDX + 2)
 #define MAX_BUF_YSIZE  (SCR_FIELDY + 2)
-
-#if 0
-#define MIN_LEV_FIELDX (SCR_FIELDX - 2)
-#define MIN_LEV_FIELDY (SCR_FIELDY - 2)
-#else
 #define MIN_LEV_FIELDX 3
 #define MIN_LEV_FIELDY 3
 #define MIN_LEV_FIELDX 3
 #define MIN_LEV_FIELDY 3
-#endif
 #define STD_LEV_FIELDX 64
 #define STD_LEV_FIELDY 32
 #define MAX_LEV_FIELDX 128
 #define STD_LEV_FIELDX 64
 #define STD_LEV_FIELDY 32
 #define MAX_LEV_FIELDX 128
index 3b3f6a04212dcbde4775d8a54874d9bdf8a4c844..63ca326e24787b5aa8fbb9cb934f7761480930c7 100644 (file)
@@ -315,6 +315,25 @@ void MarkTileDirty(int x, int y)
   redraw_mask |= REDRAW_TILES;
 }
 
   redraw_mask |= REDRAW_TILES;
 }
 
+void SetBorderElement()
+{
+  int x, y;
+
+  BorderElement = EL_LEERRAUM;
+
+  for(y=0; y<lev_fieldy && BorderElement == EL_LEERRAUM; y++)
+  {
+    for(x=0; x<lev_fieldx; x++)
+    {
+      if (!IS_MASSIVE(Feld[x][y]))
+       BorderElement = EL_BETON;
+
+      if (y != 0 && y != lev_fieldy - 1 && x != lev_fieldx - 1)
+       x = lev_fieldx - 2;
+    }
+  }
+}
+
 void GetOptions(char *argv[])
 {
   char **options_left = &argv[1];
 void GetOptions(char *argv[])
 {
   char **options_left = &argv[1];
index c1c18bb5b4821fdecc54532985aba766aaaf21ac..d925f98355ddc7dcccc4dce479a9a4e95463cbef 100644 (file)
@@ -51,6 +51,7 @@ char *getPath3(char *, char *, char*);
 char *getStringCopy(char *);
 char *getStringToLower(char *);
 void MarkTileDirty(int, int);
 char *getStringCopy(char *);
 char *getStringToLower(char *);
 void MarkTileDirty(int, int);
+void SetBorderElement();
 void GetOptions(char **);
 void Error(int, char *, ...);
 void *checked_malloc(unsigned long);
 void GetOptions(char **);
 void Error(int, char *, ...);
 void *checked_malloc(unsigned long);
index 340ec942b8ebc30d25e62107bdf02a28e30498c5..d39a98612efdccc61df92dcf136e0e87f3392a0d 100644 (file)
@@ -498,6 +498,7 @@ void SoundServer_FadeSound(int nr)
 }
 */
 
 }
 */
 
+#ifdef MSDOS
 static void SoundServer_StopSound(int nr)
 {
   int i;
 static void SoundServer_StopSound(int nr)
 {
   int i;
@@ -540,6 +541,7 @@ static void SoundServer_StopAllSounds()
   close(sound_device);
 #endif
 }
   close(sound_device);
 #endif
 }
+#endif /* MSDOS */
 
 #ifdef HPUX_AUDIO
 static void HPUX_Audio_Control()
 
 #ifdef HPUX_AUDIO
 static void HPUX_Audio_Control()
@@ -564,6 +566,7 @@ static void HPUX_Audio_Control()
 }
 #endif /* HPUX_AUDIO */
 
 }
 #endif /* HPUX_AUDIO */
 
+#ifndef VOXWARE
 /* these two are stolen from "sox"... :) */
 
 /*
 /* these two are stolen from "sox"... :) */
 
 /*
@@ -667,6 +670,7 @@ static int ulaw_to_linear(unsigned char ulawbyte)
 
   return(sample);
 }
 
   return(sample);
 }
+#endif /* !VOXWARE */
 
 /*** THE STUFF ABOVE IS ONLY USED BY THE SOUND SERVER CHILD PROCESS ***/
 
 
 /*** THE STUFF ABOVE IS ONLY USED BY THE SOUND SERVER CHILD PROCESS ***/
 
index 424a3272071868cb0877171f5dfffab88fa7a544..0c8bde1b9e04ef02429fdcd9027d9813b2338375 100644 (file)
@@ -1383,6 +1383,9 @@ void DrawMicroLevel(int xpos, int ypos)
 {
   int x,y;
 
 {
   int x,y;
 
+  /* determine border element for this level */
+  SetBorderElement();
+
   XFillRectangle(display, drawto, gc,
                 xpos - MICRO_TILEX, ypos - MICRO_TILEY,
                 MICRO_TILEX * (STD_LEV_FIELDX + 2),
   XFillRectangle(display, drawto, gc,
                 xpos - MICRO_TILEX, ypos - MICRO_TILEY,
                 MICRO_TILEX * (STD_LEV_FIELDX + 2),