rnd-19981005-1
[rocksndiamonds.git] / src / main.h
index ae4d28074a51e43e36144c03122e5d48c9f97aa0..354b23eca1c7bf2938e42c844bda537ad5a8a5bc 100644 (file)
@@ -1,13 +1,12 @@
 /***********************************************************
 *  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                *
 *----------------------------------------------------------*
 *  main.h                                                  *
 ***********************************************************/
 #ifndef MAIN_H
 #define MAIN_H
 
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+
 #ifndef MSDOS
 #define XK_MISCELLANY
 #define XK_LATIN1
 #include "msdos.h"
 #endif  /* #ifndef MSDOS */
 
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-
 typedef int BOOL;
+typedef unsigned char byte;
 
 #ifndef FALSE
 #define FALSE 0
@@ -82,10 +82,11 @@ typedef int BOOL;
 #ifndef SIGN
 #define SIGN(a)                ((a) < 0 ? -1 : ((a)>0 ? 1 : 0))
 #endif
-#define SCROLLX(a)     ((a) - scroll_x)
-#define SCROLLY(a)     ((a) - scroll_y)
-#define UNSCROLLX(a)   ((a) + scroll_x)
-#define UNSCROLLY(a)   ((a) + scroll_y)
+#define SCREENX(a)     ((a) - scroll_x)
+#define SCREENY(a)     ((a) - scroll_y)
+#define LEVELX(a)      ((a) + scroll_x)
+#define LEVELY(a)      ((a) + scroll_y)
+#define IN_VIS_FIELD(x,y) ((x)>=0 && (x)<SCR_FIELDX && (y)>=0 &&(y)<SCR_FIELDY)
 #define IN_SCR_FIELD(x,y) ((x)>=BX1 && (x)<=BX2 && (y)>=BY1 &&(y)<=BY2)
 #define IN_LEV_FIELD(x,y) ((x)>=0 && (x)<lev_fieldx && (y)>=0 &&(y)<lev_fieldy)
 
@@ -143,12 +144,7 @@ typedef int BOOL;
 #define IS_PUSHABLE(e)         (Elementeigenschaften[e] & EP_BIT_PUSHABLE)
 #define ELEM_IS_PLAYER(e)      (Elementeigenschaften[e] & EP_BIT_PLAYER)
 
-/*
-#define IS_PLAYER(x,y)         (JX == (x) && JY == (y))
-*/
-
 #define IS_PLAYER(x,y)         (ELEM_IS_PLAYER(StorePlayer[x][y]))
-#define IS_LOCAL_PLAYER(x,y)   (StorePlayer[x][y] == EL_SPIELER1)
 
 #define IS_FREE(x,y)           (Feld[x][y] == EL_LEERRAUM && !IS_PLAYER(x,y))
 #define IS_FREE_OR_PLAYER(x,y) (Feld[x][y] == EL_LEERRAUM)
@@ -170,6 +166,8 @@ typedef int BOOL;
 #define TAPE_IS_EMPTY(x)       ((x).length == 0)
 #define TAPE_IS_STOPPED(x)     (!(x).recording && !(x).playing &&!(x).pausing)
 
+#define PLAYERINFO(x,y)                (&stored_player[StorePlayer[x][y]-EL_SPIELER1])
+
 /* Pixmaps with Xpm or X11 Bitmap files */
 #define PIX_BACK               0
 #define PIX_DOOR               1
@@ -198,7 +196,8 @@ typedef int BOOL;
 #define MAX_LEVDIR_ENTRIES     15
 #define MAX_SCORE_ENTRIES      15
 
-#define MAX_FILENAME           256
+#define MAX_OPTION_LEN         256
+#define MAX_FILENAME_LEN       256
 #define MAX_NUM_AMOEBA         100
 #define MAX_ELEMENTS           512
 
@@ -210,7 +209,8 @@ struct HiScore
 
 struct PlayerInfo
 {
-  int nr, active, local;
+  int active, local;
+  int index_nr, client_nr, element_nr;
 
   char login_name[MAX_NAMELEN];
   char alias_name[MAX_NAMELEN];
@@ -219,11 +219,13 @@ struct PlayerInfo
   int leveldir_nr;
   int level_nr;
 
-  int JX,JY, lastJX,lastJY, ZX,ZY, ExitX,ExitY;
-  int MovDir, MovPos, Pushing;
-  int Frame, GfxPos;
+  int jx,jy, last_jx,last_jy;
+  int MovDir, MovPos, GfxPos;
+  int Pushing, Frame;
+
+  int gone, LevelSolved, GameOver;
 
-  int PlayerGone, LevelSolved, GameOver;
+  long actual_frame_counter;
 
   int frame_reset_delay;
 
@@ -233,6 +235,8 @@ struct PlayerInfo
   long push_delay;
   int push_delay_value;
 
+  int snapped;
+
   int score;
   int gems_still_needed;
   int sokobanfields_still_needed;
@@ -281,8 +285,8 @@ struct RecordingInfo
   BOOL changed;
   struct
   {
-    unsigned char joystickdata;
-    unsigned char delay;
+    byte action[MAX_PLAYERS];
+    byte delay;
   } pos[MAX_TAPELEN];
 };
 
@@ -315,6 +319,13 @@ extern char               *joystick_device_name[2];
 extern char           *level_directory;
 extern int                     width, height;
 
+extern char           *program_name;
+extern char           *display_name;
+extern char           *server_host;
+extern int             server_port;
+extern int             standalone;
+extern int             verbose;
+
 extern int             game_status;
 extern int             game_emulation;
 extern int             button_status, motion_status;
@@ -356,18 +367,23 @@ extern long               Elementeigenschaften[MAX_ELEMENTS];
 extern int             level_nr, leveldir_nr, num_leveldirs;
 extern int             lev_fieldx,lev_fieldy, scroll_x,scroll_y;
 
-extern int             FX,FY, ScreenMovPos, ScrollStepSize;
+extern int             FX,FY, ScrollStepSize;
+extern int             ScreenMovDir, ScreenMovPos, ScreenGfxPos;
 extern int             GameFrameDelay, MoveSpeed;
 extern int             BX1,BY1, BX2,BY2;
-extern int             JX,JY, lastJX,lastJY, ZX,ZY, ExitX,ExitY;
-extern int             PlayerGone,LevelSolved,GameOver;
-extern int             FrameCounter,TimeFrames,TimeLeft;
+extern int             ZX,ZY, ExitX,ExitY;
+extern int             AllPlayersGone;
+extern int             FrameCounter, TimeFrames, TimeLeft;
 extern int             MampferNr, SiebAktiv;
 
+extern byte            network_player_action[];
+extern BOOL            network_player_action_stored;
+extern int             TestPlayer;
+
 extern struct LevelDirInfo     leveldir[];
 extern struct LevelInfo                level;
 extern struct PlayerInfo       stored_player[];
-extern struct PlayerInfo       *local_player, *player;
+extern struct PlayerInfo       *local_player;
 extern struct HiScore          highscore[];
 extern struct RecordingInfo    tape;
 extern struct SoundInfo                Sound[];
@@ -377,8 +393,6 @@ extern char         *sound_name[];
 extern int             background_loop[];
 extern int             num_bg_loops;
 
-extern char            *progname;
-
 
 /* often used screen positions */
 #define SX                     8
@@ -600,7 +614,11 @@ extern char                *progname;
 #define EL_CHAR_COPY           (EL_CHAR_ASCII0+94)
 #define EL_CHAR_END            (EL_CHAR_START+79)
 
-#define EL_UNUSED_200          200
+#define EL_MAUER_X             200
+#define EL_MAUER_Y             201
+#define EL_MAUER_XY            202
+
+#define EL_UNUSED_200          203
 /* ... */
 #define EL_UNUSED_255          255
 
@@ -740,15 +758,20 @@ extern char               *progname;
 #define GFX_MAULWURF           145
 #define GFX_SCHWEIN            146
 #define GFX_DRACHE             147
+#define GFX_MAUER_XY           148
+#define GFX_MAUER_X            149
+#define GFX_MAUER_Y            150
 #define GFX_EDELSTEIN_ROT      152
 #define GFX_EDELSTEIN_LILA     154
 #define GFX_DYNABOMB_XL                156
 #define GFX_SONDE              159
 /* Zeile 10 (160) */
 #define GFX_EDELSTEIN_BD       163
-#define GFX_MAUER_R1           165
+#define GFX_MAUER_RIGHT                165
+#define GFX_MAUER_R1           GFX_MAUER_RIGHT
 #define GFX_MAUER_R            167
-#define GFX_MAUER_L1           168
+#define GFX_MAUER_LEFT         168
+#define GFX_MAUER_L1           GFX_MAUER_LEFT
 #define GFX_MAUER_L            170
 #define GFX_MAUER_LEBT         171
 #define GFX_SIEB2_LEER         172
@@ -778,23 +801,40 @@ extern char               *progname;
 #define GFX_FIREFLY_L          206
 #define GFX_FIREFLY_U          207
 
-/* CHANGE THIS!!!! (NO REGULAR POSITIONS...) */
-#define GFX_MASK_SPARKLING     210
-/* CHANGE THIS!!!! (NO REGULAR POSITIONS...) */
-
 #define GFX_SCHLUESSEL         GFX_SCHLUESSEL1
 #define GFX_SPIELFIGUR         GFX_SPIELER1
 
 
 /* graphics from "RocksHeroes" */
 
-#define GFX_SPIELER_DOWN       (GFX_START_ROCKSHEROES + 0*HEROES_PER_LINE + 0)
-#define GFX_SPIELER_UP         (GFX_START_ROCKSHEROES + 0*HEROES_PER_LINE + 4)
-#define GFX_SPIELER_LEFT       (GFX_START_ROCKSHEROES + 1*HEROES_PER_LINE + 0)
-#define GFX_SPIELER_RIGHT      (GFX_START_ROCKSHEROES + 1*HEROES_PER_LINE + 4)
-#define GFX_SPIELER_PUSH_RIGHT (GFX_START_ROCKSHEROES + 2*HEROES_PER_LINE + 0)
-#define GFX_SPIELER_PUSH_LEFT  (GFX_START_ROCKSHEROES + 2*HEROES_PER_LINE + 4)
-#define GFX_SONDE_START                (GFX_START_ROCKSHEROES + 7*HEROES_PER_LINE + 0)
+#define GFX_SPIELER1_DOWN      (GFX_START_ROCKSHEROES + 0*HEROES_PER_LINE + 0)
+#define GFX_SPIELER1_UP                (GFX_START_ROCKSHEROES + 0*HEROES_PER_LINE + 4)
+#define GFX_SPIELER1_LEFT      (GFX_START_ROCKSHEROES + 1*HEROES_PER_LINE + 0)
+#define GFX_SPIELER1_RIGHT     (GFX_START_ROCKSHEROES + 1*HEROES_PER_LINE + 4)
+#define GFX_SPIELER1_PUSH_RIGHT        (GFX_START_ROCKSHEROES + 2*HEROES_PER_LINE + 0)
+#define GFX_SPIELER1_PUSH_LEFT (GFX_START_ROCKSHEROES + 2*HEROES_PER_LINE + 4)
+#define GFX_SPIELER2_DOWN      (GFX_START_ROCKSHEROES + 3*HEROES_PER_LINE + 0)
+#define GFX_SPIELER2_UP                (GFX_START_ROCKSHEROES + 3*HEROES_PER_LINE + 4)
+#define GFX_SPIELER2_LEFT      (GFX_START_ROCKSHEROES + 4*HEROES_PER_LINE + 0)
+#define GFX_SPIELER2_RIGHT     (GFX_START_ROCKSHEROES + 4*HEROES_PER_LINE + 4)
+#define GFX_SPIELER2_PUSH_RIGHT        (GFX_START_ROCKSHEROES + 5*HEROES_PER_LINE + 0)
+#define GFX_SPIELER2_PUSH_LEFT (GFX_START_ROCKSHEROES + 5*HEROES_PER_LINE + 4)
+#define GFX_SPIELER3_DOWN      (GFX_START_ROCKSHEROES + 6*HEROES_PER_LINE + 0)
+#define GFX_SPIELER3_UP                (GFX_START_ROCKSHEROES + 6*HEROES_PER_LINE + 4)
+#define GFX_SPIELER3_LEFT      (GFX_START_ROCKSHEROES + 7*HEROES_PER_LINE + 0)
+#define GFX_SPIELER3_RIGHT     (GFX_START_ROCKSHEROES + 7*HEROES_PER_LINE + 4)
+#define GFX_SPIELER3_PUSH_RIGHT        (GFX_START_ROCKSHEROES + 8*HEROES_PER_LINE + 0)
+#define GFX_SPIELER3_PUSH_LEFT (GFX_START_ROCKSHEROES + 8*HEROES_PER_LINE + 4)
+#define GFX_SPIELER4_DOWN      (GFX_START_ROCKSHEROES + 9*HEROES_PER_LINE + 0)
+#define GFX_SPIELER4_UP                (GFX_START_ROCKSHEROES + 9*HEROES_PER_LINE + 4)
+#define GFX_SPIELER4_LEFT      (GFX_START_ROCKSHEROES +10*HEROES_PER_LINE + 0)
+#define GFX_SPIELER4_RIGHT     (GFX_START_ROCKSHEROES +10*HEROES_PER_LINE + 4)
+#define GFX_SPIELER4_PUSH_RIGHT        (GFX_START_ROCKSHEROES +11*HEROES_PER_LINE + 0)
+#define GFX_SPIELER4_PUSH_LEFT (GFX_START_ROCKSHEROES +11*HEROES_PER_LINE + 4)
+#define GFX_MAUER_DOWN         (GFX_START_ROCKSHEROES +12*HEROES_PER_LINE + 0)
+#define GFX_MAUER_UP           (GFX_START_ROCKSHEROES +12*HEROES_PER_LINE + 3)
+
+#define GFX_SONDE_START                (GFX_START_ROCKSHEROES + 9*HEROES_PER_LINE + 8)
 #define GFX_SCHWEIN_DOWN       (GFX_START_ROCKSHEROES + 0*HEROES_PER_LINE + 8)
 #define GFX_SCHWEIN_UP         (GFX_START_ROCKSHEROES + 0*HEROES_PER_LINE +12)
 #define GFX_SCHWEIN_LEFT       (GFX_START_ROCKSHEROES + 1*HEROES_PER_LINE + 8)
@@ -807,16 +847,18 @@ extern char               *progname;
 #define GFX_MAULWURF_UP                (GFX_START_ROCKSHEROES + 4*HEROES_PER_LINE +12)
 #define GFX_MAULWURF_LEFT      (GFX_START_ROCKSHEROES + 5*HEROES_PER_LINE + 8)
 #define GFX_MAULWURF_RIGHT     (GFX_START_ROCKSHEROES + 5*HEROES_PER_LINE +12)
-#define GFX_PINGUIN_DOWN       (GFX_START_ROCKSHEROES + 7*HEROES_PER_LINE + 8)
-#define GFX_PINGUIN_UP         (GFX_START_ROCKSHEROES + 7*HEROES_PER_LINE +12)
-#define GFX_PINGUIN_LEFT       (GFX_START_ROCKSHEROES + 8*HEROES_PER_LINE + 8)
-#define GFX_PINGUIN_RIGHT      (GFX_START_ROCKSHEROES + 8*HEROES_PER_LINE +12)
-#define GFX_BLURB_LEFT         (GFX_START_ROCKSHEROES + 9*HEROES_PER_LINE + 8)
-#define GFX_BLURB_RIGHT                (GFX_START_ROCKSHEROES + 9*HEROES_PER_LINE +12)
-#define GFX_FLAMMEN_LEFT       (GFX_START_ROCKSHEROES + 8*HEROES_PER_LINE + 0)
-#define GFX_FLAMMEN_RIGHT      (GFX_START_ROCKSHEROES + 9*HEROES_PER_LINE + 0)
-#define GFX_FLAMMEN_UP         (GFX_START_ROCKSHEROES +10*HEROES_PER_LINE + 0)
-#define GFX_FLAMMEN_DOWN       (GFX_START_ROCKSHEROES +11*HEROES_PER_LINE + 0)
+#define GFX_PINGUIN_DOWN       (GFX_START_ROCKSHEROES + 6*HEROES_PER_LINE + 8)
+#define GFX_PINGUIN_UP         (GFX_START_ROCKSHEROES + 6*HEROES_PER_LINE +12)
+#define GFX_PINGUIN_LEFT       (GFX_START_ROCKSHEROES + 7*HEROES_PER_LINE + 8)
+#define GFX_PINGUIN_RIGHT      (GFX_START_ROCKSHEROES + 7*HEROES_PER_LINE +12)
+#define GFX_BLURB_LEFT         (GFX_START_ROCKSHEROES +10*HEROES_PER_LINE + 8)
+#define GFX_BLURB_RIGHT                (GFX_START_ROCKSHEROES +10*HEROES_PER_LINE +12)
+#define GFX_FUNKELN_BLAU       (GFX_START_ROCKSHEROES +11*HEROES_PER_LINE + 8)
+#define GFX_FUNKELN_WEISS      (GFX_START_ROCKSHEROES +11*HEROES_PER_LINE +12)
+#define GFX_FLAMMEN_LEFT       (GFX_START_ROCKSHEROES +12*HEROES_PER_LINE + 8)
+#define GFX_FLAMMEN_RIGHT      (GFX_START_ROCKSHEROES +13*HEROES_PER_LINE + 8)
+#define GFX_FLAMMEN_UP         (GFX_START_ROCKSHEROES +14*HEROES_PER_LINE + 8)
+#define GFX_FLAMMEN_DOWN       (GFX_START_ROCKSHEROES +15*HEROES_PER_LINE + 8)
 
 /* graphics from "RocksFont" */
 #define GFX_CHAR_START         (GFX_START_ROCKSFONT)
@@ -929,10 +971,10 @@ extern char               *progname;
 
 /* directions for moving */
 #define MV_NO_MOVING           0
-#define MV_LEFT                        1
-#define MV_RIGHT               2
-#define MV_UP                  4
-#define MV_DOWN                        8
+#define MV_LEFT                        (1<<0)
+#define MV_RIGHT               (1<<1)
+#define MV_UP                  (1<<2)
+#define MV_DOWN                        (1<<3)
 
 /* font types */
 #define FS_SMALL               0
@@ -1011,12 +1053,13 @@ extern char             *progname;
 
 /* old cookies */
 #define NAMES_COOKIE_10                "ROCKSNDIAMONDS_NAMES_FILE_VERSION_1.0"
+#define LEVELREC_COOKIE_10     "ROCKSNDIAMONDS_LEVELREC_FILE_VERSION_1.0"
 
 #define LEVEL_COOKIE           "ROCKSNDIAMONDS_LEVEL_FILE_VERSION_1.0"
 #define SCORE_COOKIE           "ROCKSNDIAMONDS_SCORE_FILE_VERSION_1.0"
 #define NAMES_COOKIE           "ROCKSNDIAMONDS_NAMES_FILE_VERSION_1.1"
 #define LEVELDIR_COOKIE                "ROCKSNDIAMONDS_LEVELDIR_FILE_VERSION_1.0"
-#define LEVELREC_COOKIE                "ROCKSNDIAMONDS_LEVELREC_FILE_VERSION_1.0"
+#define LEVELREC_COOKIE                "ROCKSNDIAMONDS_LEVELREC_FILE_VERSION_1.2"
 #define JOYSTICK_COOKIE                "ROCKSNDIAMONDS_JOYSTICK_FILE_VERSION_1.0"
 #define LEVEL_COOKIE_LEN       (strlen(LEVEL_COOKIE)+1)
 #define SCORE_COOKIE_LEN       (strlen(SCORE_COOKIE)+1)