rnd-19981001-2
[rocksndiamonds.git] / src / init.c
index 726f78560b8f25eae13d3a5cd26c8c0337879221..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,6 +82,8 @@ void OpenAll(int argc, char *argv[])
 
 void InitLevelAndPlayerInfo()
 {
+  local_player = &stored_player[0];
+
   if (!LoadLevelInfo())                        /* global level info */
     CloseAll();
 
@@ -87,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;
@@ -430,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 }
   };
 
@@ -502,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;
@@ -1201,6 +1235,16 @@ void InitElementProperties()
   };
   static int ep_pushable_num = sizeof(ep_pushable)/sizeof(int);
 
+  static int ep_player[] =
+  {
+    EL_SPIELFIGUR,
+    EL_SPIELER1,
+    EL_SPIELER2,
+    EL_SPIELER3,
+    EL_SPIELER4
+  };
+  static int ep_player_num = sizeof(ep_player)/sizeof(int);
+
   static long ep_bit[] =
   {
     EP_BIT_AMOEBALIVE,
@@ -1226,7 +1270,8 @@ void InitElementProperties()
     EP_BIT_INACTIVE,
     EP_BIT_EXPLOSIVE,
     EP_BIT_MAMPF3,
-    EP_BIT_PUSHABLE
+    EP_BIT_PUSHABLE,
+    EP_BIT_PLAYER
   };
   static int *ep_array[] =
   {
@@ -1253,7 +1298,8 @@ void InitElementProperties()
     ep_inactive,
     ep_explosive,
     ep_mampf3,
-    ep_pushable
+    ep_pushable,
+    ep_player
   };
   static int *ep_num[] =
   {
@@ -1280,7 +1326,8 @@ void InitElementProperties()
     &ep_inactive_num,
     &ep_explosive_num,
     &ep_mampf3_num,
-    &ep_pushable_num
+    &ep_pushable_num,
+    &ep_player_num
   };
   static int num_properties = sizeof(ep_num)/sizeof(int *);