rnd-20000718-1-src
[rocksndiamonds.git] / src / main.c
index 14756c5ec57383f5f1c9f2462d661e608a4a5c48..2c0b95c3a11fd742f92da0b0adc462e483845560 100644 (file)
@@ -38,6 +38,14 @@ XpmAttributes        xpm_att[NUM_PICTURES];
 Drawable        drawto, drawto_field, backbuffer, fieldbuffer;
 Colormap       cmap;
 
 Drawable        drawto, drawto_field, backbuffer, fieldbuffer;
 Colormap       cmap;
 
+#ifdef USE_SDL_LIBRARY
+SDL_Surface    *sdl_window;
+SDL_Surface    *sdl_drawto, *sdl_drawto_field;
+SDL_Surface    *sdl_backbuffer, *sdl_fieldbuffer;
+SDL_Surface    *sdl_pix[NUM_PIXMAPS];
+SDL_Surface    *sdl_pix_masked[NUM_PIXMAPS], *sdl_tile_masked[NUM_TILES];
+#endif
+
 int            sound_pipe[2];
 int            sound_device;
 char          *sound_device_name = SOUND_DEVICE;
 int            sound_pipe[2];
 int            sound_device;
 char          *sound_device_name = SOUND_DEVICE;
@@ -78,12 +86,13 @@ short               Store2[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 short          StorePlayer[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 short          Frame[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 boolean                Stop[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 short          StorePlayer[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 short          Frame[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 boolean                Stop[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
-short          JustHit[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
+short          JustStopped[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 short          AmoebaNr[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 short          AmoebaCnt[MAX_NUM_AMOEBA], AmoebaCnt2[MAX_NUM_AMOEBA];
 short          AmoebaNr[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 short          AmoebaCnt[MAX_NUM_AMOEBA], AmoebaCnt2[MAX_NUM_AMOEBA];
-unsigned long  Elementeigenschaften[MAX_ELEMENTS];
+unsigned long  Elementeigenschaften1[MAX_ELEMENTS];
+unsigned long  Elementeigenschaften2[MAX_ELEMENTS];
 
 
-int            level_nr, leveldir_nr, num_leveldirs;
+int            level_nr;
 int            lev_fieldx,lev_fieldy, scroll_x,scroll_y;
 
 int            FX = SX, FY = SY, ScrollStepSize;
 int            lev_fieldx,lev_fieldy, scroll_x,scroll_y;
 
 int            FX = SX, FY = SY, ScrollStepSize;
@@ -101,7 +110,7 @@ int         FrameCounter, TimeFrames, TimePlayed, TimeLeft;
 
 boolean                network_player_action_received = FALSE;
 
 
 boolean                network_player_action_received = FALSE;
 
-struct LevelDirInfo    leveldir[MAX_LEVDIR_ENTRIES];
+struct LevelDirInfo    *leveldir_first = NULL, *leveldir_current = NULL;
 struct LevelInfo       level;
 struct PlayerInfo      stored_player[MAX_PLAYERS], *local_player = NULL;
 struct HiScore         highscore[MAX_SCORE_ENTRIES];
 struct LevelInfo       level;
 struct PlayerInfo      stored_player[MAX_PLAYERS], *local_player = NULL;
 struct HiScore         highscore[MAX_SCORE_ENTRIES];
@@ -109,8 +118,6 @@ struct SoundInfo    Sound[NUM_SOUNDS];
 struct TapeInfo                tape;
 struct OptionInfo      options;
 struct SetupInfo       setup;
 struct TapeInfo                tape;
 struct OptionInfo      options;
 struct SetupInfo       setup;
-struct SetupFileList   *setup_list = NULL;
-struct SetupFileList   *level_setup_list = NULL;
 struct GameInfo                game;
 struct GlobalInfo      global;
 
 struct GameInfo                game;
 struct GlobalInfo      global;
 
@@ -196,7 +203,7 @@ int num_bg_loops = sizeof(background_loop)/sizeof(int);
 
 char *element_info[] =
 {
 
 char *element_info[] =
 {
-  "empty space",
+  "empty space",                               /* 0 */
   "sand",
   "normal wall",
   "round wall",
   "sand",
   "normal wall",
   "round wall",
@@ -206,7 +213,7 @@ char *element_info[] =
   "closed exit",
   "player",
   "bug",
   "closed exit",
   "player",
   "bug",
-  "spaceship",
+  "spaceship",                                 /* 10 */
   "yam yam",
   "robot",
   "steel wall",
   "yam yam",
   "robot",
   "steel wall",
@@ -216,7 +223,7 @@ char *element_info[] =
   "quicksand with rock",
   "amoeba drop",
   "bomb",
   "quicksand with rock",
   "amoeba drop",
   "bomb",
-  "magic wall",
+  "magic wall",                                        /* 20 */
   "speed ball",
   "acid pool",
   "dropping amoeba",
   "speed ball",
   "acid pool",
   "dropping amoeba",
@@ -226,7 +233,7 @@ char *element_info[] =
   "biomaze",
   "burning dynamite",
   "unknown",
   "biomaze",
   "burning dynamite",
   "unknown",
-  "magic wheel",
+  "magic wheel",                               /* 30 */
   "running wire",
   "red key",
   "yellow key",
   "running wire",
   "red key",
   "yellow key",
@@ -236,7 +243,7 @@ char *element_info[] =
   "yellow door",
   "green door",
   "blue door",
   "yellow door",
   "green door",
   "blue door",
-  "gray door (opened by red key)",
+  "gray door (opened by red key)",             /* 40 */
   "gray door (opened by yellow key)",
   "gray door (opened by green key)",
   "gray door (opened by blue key)",
   "gray door (opened by yellow key)",
   "gray door (opened by green key)",
   "gray door (opened by blue key)",
@@ -246,7 +253,7 @@ char *element_info[] =
   "light bulb (dark)",
   "ligh bulb (glowing)",
   "wall with emerald",
   "light bulb (dark)",
   "ligh bulb (glowing)",
   "wall with emerald",
-  "wall with diamond",
+  "wall with diamond",                         /* 50 */
   "amoeba with content",
   "amoeba (BD style)",
   "time orb (full)",
   "amoeba with content",
   "amoeba (BD style)",
   "time orb (full)",
@@ -256,17 +263,17 @@ char *element_info[] =
   "yellow emerald",
   "wall with BD style diamond",
   "wall with yellow emerald",
   "yellow emerald",
   "wall with BD style diamond",
   "wall with yellow emerald",
-  "dark yam yam",
+  "dark yam yam",                              /* 60 */
   "magic wall (BD style)",
   "invisible steel wall",
   "magic wall (BD style)",
   "invisible steel wall",
-  "dynabomb",
+  "-",
   "increases number of bombs",
   "increases explosion size",
   "increases power of explosion",
   "sokoban object",
   "sokoban empty field",
   "sokoban field with object",
   "increases number of bombs",
   "increases explosion size",
   "increases power of explosion",
   "sokoban object",
   "sokoban empty field",
   "sokoban field with object",
-  "butterfly (starts moving right)",
+  "butterfly (starts moving right)",           /* 70 */
   "butterfly (starts moving up)",
   "butterfly (starts moving left)",
   "butterfly (starts moving down)",
   "butterfly (starts moving up)",
   "butterfly (starts moving left)",
   "butterfly (starts moving down)",
@@ -276,7 +283,7 @@ char *element_info[] =
   "firefly (starts moving down)",
   "butterfly",
   "firefly",
   "firefly (starts moving down)",
   "butterfly",
   "firefly",
-  "yellow player",
+  "yellow player",                             /* 80 */
   "red player",
   "green player",
   "blue player",
   "red player",
   "green player",
   "blue player",
@@ -286,7 +293,7 @@ char *element_info[] =
   "bug (starts moving down)",
   "spaceship (starts moving right)",
   "spaceship (starts moving up)",
   "bug (starts moving down)",
   "spaceship (starts moving right)",
   "spaceship (starts moving up)",
-  "spaceship (starts moving left)",
+  "spaceship (starts moving left)",            /* 90 */
   "spaceship (starts moving down)",
   "pac man (starts moving right)",
   "pac man (starts moving up)",
   "spaceship (starts moving down)",
   "pac man (starts moving right)",
   "pac man (starts moving up)",
@@ -296,17 +303,17 @@ char *element_info[] =
   "violet emerald",
   "wall with red emerald",
   "wall with violet emerald",
   "violet emerald",
   "wall with red emerald",
   "wall with violet emerald",
+  "unknown",                                   /* 100 */
   "unknown",
   "unknown",
   "unknown",
   "unknown",
   "unknown",
   "unknown",
   "unknown",
   "unknown",
-  "unknown",
-  "unknown",
-  "unknown",
+  "normal wall (BD style)",
+  "rock (BD style)",
   "open exit",
   "unknown",
   "amoeba",
   "open exit",
   "unknown",
   "amoeba",
-  "mole",
+  "mole",                                      /* 110 */
   "penguin",
   "satellite",
   "arrow left",
   "penguin",
   "satellite",
   "arrow left",
@@ -316,7 +323,7 @@ char *element_info[] =
   "pig",
   "fire breathing dragon",
   "unknown",
   "pig",
   "fire breathing dragon",
   "unknown",
-  "letter ' '",
+  "letter ' '",                                        /* 120 */
   "letter '!'",
   "letter '\"'",
   "letter '#'",
   "letter '!'",
   "letter '\"'",
   "letter '#'",
@@ -326,7 +333,7 @@ char *element_info[] =
   "letter '''",
   "letter '('",
   "letter ')'",
   "letter '''",
   "letter '('",
   "letter ')'",
-  "letter '*'",
+  "letter '*'",                                        /* 130 */
   "letter '+'",
   "letter ','",
   "letter '-'",
   "letter '+'",
   "letter ','",
   "letter '-'",
@@ -336,7 +343,7 @@ char *element_info[] =
   "letter '1'",
   "letter '2'",
   "letter '3'",
   "letter '1'",
   "letter '2'",
   "letter '3'",
-  "letter '4'",
+  "letter '4'",                                        /* 140 */
   "letter '5'",
   "letter '6'",
   "letter '7'",
   "letter '5'",
   "letter '6'",
   "letter '7'",
@@ -346,7 +353,7 @@ char *element_info[] =
   "letter ';'",
   "letter '<'",
   "letter '='",
   "letter ';'",
   "letter '<'",
   "letter '='",
-  "letter '>'",
+  "letter '>'",                                        /* 150 */
   "letter '?'",
   "letter '@'",
   "letter 'A'",
   "letter '?'",
   "letter '@'",
   "letter 'A'",
@@ -356,7 +363,7 @@ char *element_info[] =
   "letter 'E'",
   "letter 'F'",
   "letter 'G'",
   "letter 'E'",
   "letter 'F'",
   "letter 'G'",
-  "letter 'H'",
+  "letter 'H'",                                        /* 160 */
   "letter 'I'",
   "letter 'J'",
   "letter 'K'",
   "letter 'I'",
   "letter 'J'",
   "letter 'K'",
@@ -366,7 +373,7 @@ char *element_info[] =
   "letter 'O'",
   "letter 'P'",
   "letter 'Q'",
   "letter 'O'",
   "letter 'P'",
   "letter 'Q'",
-  "letter 'R'",
+  "letter 'R'",                                        /* 170 */
   "letter 'S'",
   "letter 'T'",
   "letter 'U'",
   "letter 'S'",
   "letter 'T'",
   "letter 'U'",
@@ -376,7 +383,7 @@ char *element_info[] =
   "letter 'Y'",
   "letter 'Z'",
   "letter 'Ä'",
   "letter 'Y'",
   "letter 'Z'",
   "letter 'Ä'",
-  "letter 'Ö'",
+  "letter 'Ö'",                                        /* 180 */
   "letter 'Ü'",
   "letter '^'",
   "letter ''",
   "letter 'Ü'",
   "letter '^'",
   "letter ''",
@@ -386,6 +393,7 @@ char *element_info[] =
   "letter ''",
   "letter ''",
   "letter ''",
   "letter ''",
   "letter ''",
   "letter ''",
+  "letter ''",                                 /* 190 */
   "letter ''",
   "letter ''",
   "letter ''",
   "letter ''",
   "letter ''",
   "letter ''",
@@ -395,9 +403,8 @@ char *element_info[] =
   "letter ''",
   "letter ''",
   "letter ''",
   "letter ''",
   "letter ''",
   "letter ''",
-  "letter ''",
-  "growing wall (horizontally)",
-  "growing wall (vertically)",
+  "growing wall (horizontal)",                 /* 200 */
+  "growing wall (vertical)",
   "growing wall (all directions)",
   "unused",
   "unused",
   "growing wall (all directions)",
   "unused",
   "unused",
@@ -406,7 +413,7 @@ char *element_info[] =
   "unused",
   "unused",
   "unused",
   "unused",
   "unused",
   "unused",
-  "empty space",
+  "empty space",                               /* 210 */
   "zonk",
   "base",
   "murphy",
   "zonk",
   "base",
   "murphy",
@@ -416,7 +423,7 @@ char *element_info[] =
   "exit",
   "orange disk",
   "port (leading right)",
   "exit",
   "orange disk",
   "port (leading right)",
-  "port (leading down)",
+  "port (leading down)",                       /* 220 */
   "port (leading left)",
   "port (leading up)",
   "port (leading right)",
   "port (leading left)",
   "port (leading up)",
   "port (leading right)",
@@ -426,9 +433,9 @@ char *element_info[] =
   "snik snak",
   "yellow disk",
   "terminal",
   "snik snak",
   "yellow disk",
   "terminal",
-  "red disk",
-  "port (vertically)",
-  "port (horizontally)",
+  "red disk",                                  /* 230 */
+  "port (vertical)",
+  "port (horizontal)",
   "port (all directions)",
   "electron",
   "buggy base",
   "port (all directions)",
   "electron",
   "buggy base",
@@ -436,7 +443,7 @@ char *element_info[] =
   "chip (right half)",
   "hardware",
   "hardware",
   "chip (right half)",
   "hardware",
   "hardware",
-  "hardware",
+  "hardware",                                  /* 240 */
   "hardware",
   "hardware",
   "hardware",
   "hardware",
   "hardware",
   "hardware",
@@ -446,7 +453,7 @@ char *element_info[] =
   "hardware",
   "chip (upper half)",
   "chip (lower half)",
   "hardware",
   "chip (upper half)",
   "chip (lower half)",
-  "unknown",
+  "unknown",                                   /* 250 */
   "unknown",
   "unknown",
   "unknown",
   "unknown",
   "unknown",
   "unknown",
@@ -455,37 +462,51 @@ char *element_info[] =
 
   /* 256 */
 
 
   /* 256 */
 
-  "pearl",
+  "pearl",                                     /* (256) */
   "crystal",
   "wall with pearl",
   "wall with crystal",
   "crystal",
   "wall with pearl",
   "wall with crystal",
-  "white door",
+  "white door",                                        /* 260 */
   "gray door (opened by white key)",
   "white key",
   "gray door (opened by white key)",
   "white key",
-  "force field",
+  "shield (passive)",
   "extra time",
   "switch gate (open)",
   "switch gate (closed)",
   "switch for switch gate",
   "extra time",
   "switch gate (open)",
   "switch gate (closed)",
   "switch for switch gate",
-  "time gate",
-  "time gate with magic wheel",
-  "green conveyor belt (left)",
-  "green conveyor belt (middle)",
-  "green conveyor belt (right)",
-  "switch for green conveyor belt",
+  "switch for switch gate",
+  "-",
+  "-",                                         /* 270 */
   "red conveyor belt (left)",
   "red conveyor belt (middle)",
   "red conveyor belt (right)",
   "red conveyor belt (left)",
   "red conveyor belt (middle)",
   "red conveyor belt (right)",
-  "switch for red conveyor belt",
+  "switch for red conveyor belt (left)",
+  "switch for red conveyor belt (middle)",
+  "switch for red conveyor belt (right)",
+  "yellow conveyor belt (left)",
+  "yellow conveyor belt (middle)",
+  "yellow conveyor belt (right)",
+  "switch for yellow conveyor belt (left)",    /* 280 */
+  "switch for yellow conveyor belt (middle)",
+  "switch for yellow conveyor belt (right)",
+  "green conveyor belt (left)",
+  "green conveyor belt (middle)",
+  "green conveyor belt (right)",
+  "switch for green conveyor belt (left)",
+  "switch for green conveyor belt (middle)",
+  "switch for green conveyor belt (right)",
   "blue conveyor belt (left)",
   "blue conveyor belt (left)",
-  "blue conveyor belt (middle)",
+  "blue conveyor belt (middle)",               /* 290 */
   "blue conveyor belt (right)",
   "blue conveyor belt (right)",
-  "switch for blue conveyor belt",
+  "switch for blue conveyor belt (left)",
+  "switch for blue conveyor belt (middle)",
+  "switch for blue conveyor belt (right)",
   "land mine",
   "mail envelope",
   "land mine",
   "mail envelope",
-  "light switch",
+  "light switch (off)",
+  "light switch (on)",
   "sign (exclamation)",
   "sign (exclamation)",
-  "sign (radio activity)",
+  "sign (radio activity)",                     /* 300 */
   "sign (stop)",
   "sign (wheel chair)",
   "sign (parking)",
   "sign (stop)",
   "sign (wheel chair)",
   "sign (parking)",
@@ -495,22 +516,54 @@ char *element_info[] =
   "sign (round)",
   "sign (exit)",
   "sign (yin yang)",
   "sign (round)",
   "sign (exit)",
   "sign (yin yang)",
-  "sign (other)",
+  "sign (other)",                              /* 310 */
   "mole (starts moving left)",
   "mole (starts moving right)",
   "mole (starts moving up)",
   "mole (starts moving down)",
   "mole (starts moving left)",
   "mole (starts moving right)",
   "mole (starts moving up)",
   "mole (starts moving down)",
-  "steel (?)",
+  "steel wall (slanted)",
   "invisible sand",
   "invisible sand",
+  "dx unknown 15",
+  "dx unknown 42",
   "-",
   "-",
-  "-",
-  "-",
-  "-",
-  "-",
-  "-",
-  "-",
-  "-",
-  "-",
+  "-",                                         /* 320 */
+  "shield (active, kills enemies)",
+  "time gate (open)",
+  "time gate (closed)",
+  "switch for time gate",
+  "switch for time gate",
+  "balloon",
+  "send balloon to the left",
+  "send balloon to the right",
+  "send balloon up",
+  "send balloon down",                         /* 330 */
+  "send balloon in any direction",
+  "steel wall",
+  "steel wall",
+  "steel wall",
+  "steel wall",
+  "normal wall",
+  "normal wall",
+  "normal wall",
+  "normal wall",
+  "normal wall",                               /* 340 */
+  "normal wall",
+  "normal wall",
+  "normal wall",
+  "tube (all directions)",
+  "tube (vertical)",
+  "tube (horizontal)",
+  "tube (vertical & left)",
+  "tube (vertical & right)",
+  "tube (horizontal & up)",
+  "tube (horizontal & down)",                  /* 350 */
+  "tube (left & up)",
+  "tube (left & down)",
+  "tube (right & up)",
+  "tube (right & down)",
+  "spring",
+  "trap",
+  "stable bomb (DX style)",
   "-"
 
   /*
   "-"
 
   /*
@@ -518,6 +571,183 @@ char *element_info[] =
   */
 };
 
   */
 };
 
+
+
+/* +-----------------------------------------------------------------------+ */
+/* | SDL TEST STUFF                                                        | */
+/* +-----------------------------------------------------------------------+ */
+
+#ifdef USE_SDL_LIBRARY
+
+SDL_Surface *sdl_screen, *sdl_image_tmp, *sdl_image, *sdl_image_masked;
+SDL_Surface *sdl_image2_tmp, *sdl_image2, *sdl_image2_masked;
+
+void TEST_SDL_BLIT_RECT(int x, int y)
+{
+  SDL_Rect rect_src, rect_dst;
+
+  SDLCopyArea(sdl_pix_masked[PIX_HEROES], sdl_window,
+             8 * TILEX, 8 * TILEY, TILEX, TILEY, x, y);
+  return;
+
+  rect_src.x = 8 * TILEX;
+  rect_src.y = 8 * TILEY;
+  rect_src.w = TILEX;
+  rect_src.h = TILEY;
+
+  rect_dst.x = x;
+  rect_dst.y = y;
+  rect_dst.w = TILEX;
+  rect_dst.h = TILEY;
+
+  SDL_BlitSurface(sdl_image2_masked, &rect_src, sdl_screen, &rect_dst);
+  SDL_UpdateRect(sdl_screen, x, y, TILEX, TILEY);
+}
+
+void TEST_SDL_INIT_DISPLAY()
+{
+  SDL_Rect rect_src, rect_dst;
+
+  if (SDL_Init(SDL_INIT_VIDEO) < 0)
+  {
+    fprintf(stderr, "SDL_Init() failed: %s\n", SDL_GetError());
+    exit(1);
+  }
+
+  /* automatically cleanup SDL stuff after exit() */
+  atexit(SDL_Quit);
+
+  if ((sdl_screen = SDL_SetVideoMode(WIN_XSIZE, WIN_YSIZE, 16, SDL_HWSURFACE))
+      == NULL)
+  {
+    fprintf(stderr, "SDL_SetVideoMode() failed: %s\n", SDL_GetError());
+    exit(1);
+  }
+
+  SDL_WM_SetCaption(WINDOW_TITLE_STRING, WINDOW_TITLE_STRING);
+
+  if ((sdl_image_tmp = IMG_Load("graphics/RocksScreen.pcx")) == NULL)
+  {
+    fprintf(stderr, "IMG_Load() failed: %s\n", SDL_GetError());
+    exit(1);
+  }
+
+  sdl_image = SDL_DisplayFormat(sdl_image_tmp);
+
+  SDL_SetColorKey(sdl_image_tmp, SDL_SRCCOLORKEY,
+                 SDL_MapRGB(sdl_image_tmp->format, 0x00, 0x00, 0x00));
+  sdl_image_masked = SDL_DisplayFormat(sdl_image_tmp);
+
+  SDL_FreeSurface(sdl_image_tmp);
+
+  if ((sdl_image2_tmp = IMG_Load("graphics/RocksHeroes.pcx")) == NULL)
+  {
+    fprintf(stderr, "IMG_Load() failed: %s\n", SDL_GetError());
+    exit(1);
+  }
+
+  sdl_image2 = SDL_DisplayFormat(sdl_image2_tmp);
+  SDL_FreeSurface(sdl_image2_tmp);
+
+  sdl_image2_masked = SDL_DisplayFormat(sdl_image2);
+  SDL_SetColorKey(sdl_image2_masked, SDL_SRCCOLORKEY,
+                 SDL_MapRGB(sdl_image2_masked->format, 0x00, 0x00, 0x00));
+
+  rect_src.x = 0;
+  rect_src.y = 0;
+  rect_src.w = sdl_image->w;
+  rect_src.h = sdl_image->h;
+
+  rect_dst.x = 0;
+  rect_dst.y = 0;
+  rect_dst.w = sdl_image->w;
+  rect_dst.h = sdl_image->h;
+                                           
+  SDL_BlitSurface(sdl_image, &rect_src, sdl_screen, &rect_dst);
+
+  /*
+  SDL_UpdateRect(sdl_screen, 0, 0, WIN_XSIZE, WIN_YSIZE);
+  */
+  /*
+  SDL_UpdateRect(sdl_screen, 0, 0, 0, 0);
+  */
+  SDL_Flip(sdl_screen);
+
+  /*
+  SDL_Delay(5000);
+  */
+}
+
+void TEST_SDL_EVENT_LOOP()
+{
+  SDL_Event event;
+  int quit_loop = 0;
+
+  SDL_EventState(SDL_MOUSEMOTION, SDL_IGNORE);
+
+  while (!quit_loop && SDL_WaitEvent(&event) >=0)
+  {
+    /* hier werden die Ereignisse behandelt */
+    switch(event.type)
+    {
+      case SDL_QUIT:
+      {
+       quit_loop = 1;
+       break;
+      }
+
+      case SDL_MOUSEBUTTONDOWN:
+      {
+       int x = event.button.x;
+       int y = event.button.y;
+
+       SDL_EventState(SDL_MOUSEMOTION, SDL_ENABLE);
+
+       TEST_SDL_BLIT_RECT(x, y);
+
+       printf("SDL_MOUSEBUTTONDOWN(%d, %d)\n", x, y);
+       break;
+      }
+
+      case SDL_MOUSEBUTTONUP:
+      {
+       int x = event.button.x;
+       int y = event.button.y;
+
+       SDL_EventState(SDL_MOUSEMOTION, SDL_IGNORE);
+
+       printf("SDL_MOUSEBUTTONUP(%d, %d)\n", x, y);
+       break;
+      }
+
+      case SDL_MOUSEMOTION:
+      {
+       int x = event.motion.x;
+       int y = event.motion.y;
+
+       TEST_SDL_BLIT_RECT(x, y);
+
+       printf("SDL_MOUSEMOTION(%d, %d)\n", x, y);
+       break;
+      }
+
+      default:
+       break;
+    }
+  }
+
+  SDL_FreeSurface(sdl_image);
+  SDL_Quit();
+}
+
+#endif /* USE_SDL_LIBRARY */
+
+/* +-----------------------------------------------------------------------+ */
+/* | SDL TEST STUFF                                                        | */
+/* +-----------------------------------------------------------------------+ */
+
+
+
 int main(int argc, char *argv[])
 {
   program_name = (strrchr(argv[0],'/') ? strrchr(argv[0],'/') + 1 : argv[0]);
 int main(int argc, char *argv[])
 {
   program_name = (strrchr(argv[0],'/') ? strrchr(argv[0],'/') + 1 : argv[0]);
@@ -528,6 +758,13 @@ int main(int argc, char *argv[])
 
   GetOptions(argv);
   OpenAll(argc,argv);
 
   GetOptions(argv);
   OpenAll(argc,argv);
+
+#ifdef USE_SDL_LIBRARY
+  TEST_SDL_BLIT_RECT((WIN_XSIZE - TILEX)/2, (WIN_YSIZE - TILEY)/2);
+  TEST_SDL_EVENT_LOOP();
+  exit(0);
+#endif
+
   EventLoop();
   CloseAllAndExit(0);
   exit(0);     /* to keep compilers happy */
   EventLoop();
   CloseAllAndExit(0);
   exit(0);     /* to keep compilers happy */