rnd-19981001-2
[rocksndiamonds.git] / src / init.c
index c6cd0da3953dc0e1a9226aa4663ab461851ad15c..36eb3217283048a8d4bfdc10a159057fb27fff2a 100644 (file)
@@ -1,17 +1,18 @@
 /***********************************************************
 *  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                *
 *----------------------------------------------------------*
 *  init.c                                                  *
 ***********************************************************/
 
+#include <signal.h>
+
 #include "init.h"
 #include "misc.h"
 #include "sound.h"
@@ -21,8 +22,7 @@
 #include "joystick.h"
 #include "gfxload.h"
 #include "gifload.h"
-
-#include <signal.h>
+#include "network.h"
 
 #ifdef DEBUG
 /*
@@ -44,6 +44,7 @@ struct IconFileInfo
 
 static int sound_process_id = 0;
 
+static void InitServer(void);
 static void InitLevelAndPlayerInfo(void);
 static void InitDisplay(int, char **);
 static void InitSound(void);
@@ -56,6 +57,7 @@ static void InitElementProperties(void);
 void OpenAll(int argc, char *argv[])
 {
   InitLevelAndPlayerInfo();
+  InitServer();
 
   InitCounter();
   InitSound();
@@ -80,7 +82,7 @@ void OpenAll(int argc, char *argv[])
 
 void InitLevelAndPlayerInfo()
 {
-  player = local_player = &stored_player[0];
+  local_player = &stored_player[0];
 
   if (!LoadLevelInfo())                        /* global level info */
     CloseAll();
@@ -89,6 +91,24 @@ void InitLevelAndPlayerInfo()
   LoadPlayerInfo(PLAYER_LEVEL);                /* level specific info */
 }
 
+void InitServer()
+{
+  standalone = FALSE;
+
+  if (standalone)
+    return;
+
+  if (!ConnectToServer(server_host, server_port))
+  {
+    fprintf(stderr,"%s: cannot connect to multiplayer server.\n", 
+           progname);
+    exit(-1);
+  }
+
+  SendNicknameToServer(local_player->alias_name);
+  SendProtocolVersionToServer();
+}
+
 void InitSound()
 {
   int i;
@@ -432,17 +452,36 @@ void InitGfx()
   }
   tile_needs_clipping[] =
   {
-    { GFX_SPIELER_UP, 4 },
-    { GFX_SPIELER_DOWN, 4 },
-    { GFX_SPIELER_LEFT, 4 },
-    { GFX_SPIELER_RIGHT, 4 },
-    { GFX_SPIELER_PUSH_LEFT, 4 },
-    { GFX_SPIELER_PUSH_RIGHT, 4 },
+    { GFX_SPIELER1_UP, 4 },
+    { GFX_SPIELER1_DOWN, 4 },
+    { GFX_SPIELER1_LEFT, 4 },
+    { GFX_SPIELER1_RIGHT, 4 },
+    { GFX_SPIELER1_PUSH_LEFT, 4 },
+    { GFX_SPIELER1_PUSH_RIGHT, 4 },
+    { GFX_SPIELER2_UP, 4 },
+    { GFX_SPIELER2_DOWN, 4 },
+    { GFX_SPIELER2_LEFT, 4 },
+    { GFX_SPIELER2_RIGHT, 4 },
+    { GFX_SPIELER2_PUSH_LEFT, 4 },
+    { GFX_SPIELER2_PUSH_RIGHT, 4 },
+    { GFX_SPIELER3_UP, 4 },
+    { GFX_SPIELER3_DOWN, 4 },
+    { GFX_SPIELER3_LEFT, 4 },
+    { GFX_SPIELER3_RIGHT, 4 },
+    { GFX_SPIELER3_PUSH_LEFT, 4 },
+    { GFX_SPIELER3_PUSH_RIGHT, 4 },
+    { GFX_SPIELER4_UP, 4 },
+    { GFX_SPIELER4_DOWN, 4 },
+    { GFX_SPIELER4_LEFT, 4 },
+    { GFX_SPIELER4_RIGHT, 4 },
+    { GFX_SPIELER4_PUSH_LEFT, 4 },
+    { GFX_SPIELER4_PUSH_RIGHT, 4 },
     { GFX_GEBLUBBER, 4 },
     { GFX_DYNAMIT, 7 },
     { GFX_DYNABOMB, 4 },
     { GFX_SOKOBAN_OBJEKT, 1 },
-    { GFX_MASK_SPARKLING, 3 },
+    { GFX_FUNKELN_BLAU, 3 },
+    { GFX_FUNKELN_WEISS, 3 },
     { -1, 0 }
   };
 
@@ -504,15 +543,8 @@ void InitGfx()
       int src_x, src_y;
       Pixmap src_pixmap;
 
-      if (tile_needs_clipping[i].start == GFX_MASK_SPARKLING)
-      {
-       /* special case -- should be cleaned up sometimes... */
-       src_pixmap = clipmask[PIX_BACK];
-       src_x  = SX + GFX_PER_LINE*TILEX;
-       src_y  = SY + j*TILEY;
-      }
-      else if (graphic >= GFX_START_ROCKSSCREEN &&
-              graphic <= GFX_END_ROCKSSCREEN)
+      if (graphic >= GFX_START_ROCKSSCREEN &&
+         graphic <= GFX_END_ROCKSSCREEN)
       {
        src_pixmap = clipmask[PIX_BACK];
        graphic -= GFX_START_ROCKSSCREEN;