rnd-19981202-1
[rocksndiamonds.git] / src / main.h
index 6cf2bb23891b4c939dbb1b3ba4c6240afad33b8e..4dc5883b60e36dea7af94eca4275150c9ac543a5 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 <sys/types.h>
+#include <sys/stat.h>
+#include <errno.h>
+
+#ifndef MSDOS
 #define XK_MISCELLANY
 #define XK_LATIN1
 
 #include <X11/Xlib.h>
 #include <X11/Xutil.h>
+#include <X11/Xatom.h>
 #include <X11/Xos.h>
 #include <X11/Intrinsic.h>
 #include <X11/keysymdef.h>
 
 #ifdef   XPM_INCLUDE_FILE
+#define  USE_XPM_LIBRARY
 #include XPM_INCLUDE_FILE
-#else
-#include "YOU HAVE TO SET 'XPM_INCLUDE_FILE' IN THE 'Makefile'!!!"
 #endif
+#else  /* MSDOS */
+#include "msdos.h"
+#endif  /* MSDOS */
 
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
+#ifdef DEBUG
+#define DEBUG_TIMING   0
+#endif
 
-typedef int BOOL;
+typedef unsigned char boolean;
+typedef unsigned char byte;
 
-#define TRUE           1
+#ifndef FALSE
 #define FALSE          0
+#define TRUE           (!FALSE)
+#endif
 
-#define WIN_XPOS       0
-#define WIN_YPOS       0
 #define WIN_XSIZE      672
 #define WIN_YSIZE      560
+#ifndef MSDOS
+#define WIN_XPOS       0
+#define WIN_YPOS       0
+#else  /* MSDOS */
+#define WIN_XPOS       ((XRES - WIN_XSIZE) / 2)
+#define WIN_YPOS       ((YRES - WIN_YSIZE) / 2)
+#endif /* MSDOS */
 #define SCR_FIELDX     17
 #define SCR_FIELDY     17
+#define MAX_BUF_XSIZE  (SCR_FIELDX + 2)
+#define MAX_BUF_YSIZE  (SCR_FIELDY + 2)
 
-#define MIN_LEV_FIELDX (SCR_FIELDX-2)
-#define MIN_LEV_FIELDY (SCR_FIELDY-2)
+#define MIN_LEV_FIELDX (SCR_FIELDX - 2)
+#define MIN_LEV_FIELDY (SCR_FIELDY - 2)
 #define STD_LEV_FIELDX 64
 #define STD_LEV_FIELDY 32
 #define MAX_LEV_FIELDX 128
 #define MAX_LEV_FIELDY 128
 
-#define MIN(a,b)       ((a)<(b) ? (a) : (b))
-#define MAX(a,b)       ((a)>(b) ? (a) : (b))
-#define ABS(a)         ((a)<0 ? -(a) : (a))
-#define SIGN(a)                ((a)<0 ? -1 : ((a)>0 ? 1 : 0))
-#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 IN_SCR_FIELD(x,y) ((x)>=0 && (x)<SCR_FIELDX && (y)>=0 &&(y)<SCR_FIELDY)
-#define IN_LEV_FIELD(x,y) ((x)>=0 && (x)<lev_fieldx && (y)>=0 &&(y)<lev_fieldy)
+#define MAX_PLAYERS    4
+
+#ifndef MIN
+#define MIN(a,b)       ((a) < (b) ? (a) : (b))
+#endif
+#ifndef MAX
+#define MAX(a,b)       ((a) > (b) ? (a) : (b))
+#endif
+#ifndef ABS
+#define ABS(a)         ((a) < 0 ? -(a) : (a))
+#endif
+#ifndef SIGN
+#define SIGN(a)                ((a) < 0 ? -1 : ((a)>0 ? 1 : 0))
+#endif
 
-#define IS_PLAYER(x,y)         (JX==(x) && JY==(y))
-#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)
-#define IS_MOVING(x,y)         (MovPos[x][y]!=0)
-#define IS_BLOCKED(x,y)                (Feld[x][y]==EL_BLOCKED)
+#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)
 
 #define EP_BIT_AMOEBALIVE      (1<<0)
 #define EP_BIT_AMOEBOID                (1<<1)
-#define EP_BIT_BADEWANNOID     (1<<2)
-#define EP_BIT_SCHLUESSEL      (1<<3)
-#define EP_BIT_PFORTE          (1<<4)
-#define EP_BIT_SOLID           (1<<5)
-#define EP_BIT_MASSIV          (1<<6)
-#define EP_BIT_SLIPPERY                (1<<7)
-#define EP_BIT_ENEMY           (1<<8)
-#define EP_BIT_MAUER           (1<<9)
-#define EP_BIT_CAN_FALL                (1<<10)
-#define EP_BIT_CAN_SMASH       (1<<11)
-#define EP_BIT_CAN_CHANGE      (1<<12)
-#define EP_BIT_CAN_MOVE                (1<<13)
-#define EP_BIT_COULD_MOVE      (1<<14)
-#define EP_BIT_DONT_TOUCH      (1<<15)
-#define EP_BIT_DONT_GO_TO      (1<<16)
-#define EP_BIT_MAMPF2          (1<<17)
-#define EP_BIT_CHAR            (1<<18)
-#define EP_BIT_BD_ELEMENT      (1<<19)
-#define EP_BIT_SB_ELEMENT      (1<<20)
-#define EP_BIT_GEM             (1<<21)
-#define EP_BIT_INACTIVE                (1<<22)
+#define EP_BIT_SCHLUESSEL      (1<<2)
+#define EP_BIT_PFORTE          (1<<3)
+#define EP_BIT_SOLID           (1<<4)
+#define EP_BIT_MASSIV          (1<<5)
+#define EP_BIT_SLIPPERY                (1<<6)
+#define EP_BIT_ENEMY           (1<<7)
+#define EP_BIT_MAUER           (1<<8)
+#define EP_BIT_CAN_FALL                (1<<9)
+#define EP_BIT_CAN_SMASH       (1<<10)
+#define EP_BIT_CAN_CHANGE      (1<<11)
+#define EP_BIT_CAN_MOVE                (1<<12)
+#define EP_BIT_COULD_MOVE      (1<<13)
+#define EP_BIT_DONT_TOUCH      (1<<14)
+#define EP_BIT_DONT_GO_TO      (1<<15)
+#define EP_BIT_MAMPF2          (1<<16)
+#define EP_BIT_CHAR            (1<<17)
+#define EP_BIT_BD_ELEMENT      (1<<18)
+#define EP_BIT_SB_ELEMENT      (1<<19)
+#define EP_BIT_GEM             (1<<20)
+#define EP_BIT_INACTIVE                (1<<21)
+#define EP_BIT_EXPLOSIVE       (1<<22)
+#define EP_BIT_MAMPF3          (1<<23)
+#define EP_BIT_PUSHABLE                (1<<24)
+#define EP_BIT_PLAYER          (1<<25)
 
 #define IS_AMOEBALIVE(e)       (Elementeigenschaften[e] & EP_BIT_AMOEBALIVE)
 #define IS_AMOEBOID(e)         (Elementeigenschaften[e] & EP_BIT_AMOEBOID)
-#define IS_BADEWANNOID(e)      (Elementeigenschaften[e] & EP_BIT_BADEWANNOID)
 #define IS_SCHLUESSEL(e)       (Elementeigenschaften[e] & EP_BIT_SCHLUESSEL)
 #define IS_PFORTE(e)           (Elementeigenschaften[e] & EP_BIT_PFORTE)
 #define IS_SOLID(e)            (Elementeigenschaften[e] & EP_BIT_SOLID)
@@ -120,56 +145,65 @@ typedef int BOOL;
 #define IS_SB_ELEMENT(e)       (Elementeigenschaften[e] & EP_BIT_SB_ELEMENT)
 #define IS_GEM(e)              (Elementeigenschaften[e] & EP_BIT_GEM)
 #define IS_INACTIVE(e)         (Elementeigenschaften[e] & EP_BIT_INACTIVE)
+#define IS_EXPLOSIVE(e)                (Elementeigenschaften[e] & EP_BIT_EXPLOSIVE)
+#define IS_MAMPF3(e)           (Elementeigenschaften[e] & EP_BIT_MAMPF3)
+#define IS_PUSHABLE(e)         (Elementeigenschaften[e] & EP_BIT_PUSHABLE)
+#define ELEM_IS_PLAYER(e)      (Elementeigenschaften[e] & EP_BIT_PLAYER)
+
+#define IS_PLAYER(x,y)         (ELEM_IS_PLAYER(StorePlayer[x][y]))
+
+#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)
 
-#define EL_CHANGED(e)          ((e)==EL_FELSBROCKEN    ? EL_EDELSTEIN :  \
-                                (e)==EL_EDELSTEIN      ? EL_DIAMANT :    \
-                                (e)==EL_EDELSTEIN_GELB ? EL_DIAMANT :    \
-                                (e)==EL_EDELSTEIN_ROT  ? EL_DIAMANT :    \
-                                (e)==EL_EDELSTEIN_LILA ? EL_DIAMANT :    \
+#define IS_MOVING(x,y)         (MovPos[x][y] != 0)
+#define IS_BLOCKED(x,y)                (Feld[x][y] == EL_BLOCKED)
+
+#define EL_CHANGED(e)          ((e) == EL_FELSBROCKEN    ? EL_EDELSTEIN :  \
+                                (e) == EL_EDELSTEIN      ? EL_DIAMANT :    \
+                                (e) == EL_EDELSTEIN_GELB ? EL_DIAMANT :    \
+                                (e) == EL_EDELSTEIN_ROT  ? EL_DIAMANT :    \
+                                (e) == EL_EDELSTEIN_LILA ? EL_DIAMANT :    \
                                 EL_FELSBROCKEN)
-#define EL_CHANGED2(e)         ((e)==EL_FELSBROCKEN ? EL_EDELSTEIN_BD :  \
+#define EL_CHANGED2(e)         ((e) == EL_FELSBROCKEN ? EL_EDELSTEIN_BD :  \
                                 EL_FELSBROCKEN)
-#define IS_DRAWABLE(e)         ((e)<EL_BLOCKED)
-#define IS_NOT_DRAWABLE(e)     ((e)>=EL_BLOCKED)
-#define TIMESIZE               (TimeLeft*100/level.time)
+#define IS_DRAWABLE(e)         ((e) < EL_BLOCKED)
+#define IS_NOT_DRAWABLE(e)     ((e) >= EL_BLOCKED)
+#define TIMESIZE               (TimeLeft * 100 / level.time)
 #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
-#define PIX_TOONS              2
-#define        PIX_BIGFONT             3
-#define PIX_SMALLFONT          4
+#define PIX_HEROES             2
+#define PIX_TOONS              3
+#define        PIX_BIGFONT             4
+#define PIX_SMALLFONT          5
 /* Pixmaps without them */
-#define PIX_DB_BACK            5
-#define PIX_DB_DOOR            6
+#define PIX_DB_BACK            6
+#define PIX_DB_DOOR            7
+#define PIX_DB_FIELD           8
 
-#define NUM_PICTURES           5
-#define NUM_PIXMAPS            7
+#define NUM_PICTURES           6
+#define NUM_PIXMAPS            9
 
 /* boundaries of arrays etc. */
 #define MAX_NAMELEN            (10+1)
-
 #define MAX_LEVNAMLEN          32
-#define MAX_LEVSCORE_ENTRIES   16
-#define NUM_FREE_LVHD_BYTES    18
-#define MAX_TAPELEN            10000
-
-#define MAX_LEVDIR_FILENAME    (64+1)
-#define MAX_LEVDIR_NAME                (16+1)
-#define MAX_LEVDIR_ENTRIES     15
-#define MAX_SCORE_ENTRIES      15
-
-#define MAX_FILENAME           256
-#define MAX_NUM_AMOEBA         100
+#define MAX_TAPELEN            (1000 * 50)     /* max. time * framerate */
+#define MAX_LEVDIR_ENTRIES     100
+#define MAX_SCORE_ENTRIES      100
 #define MAX_ELEMENTS           512
+#define MAX_NUM_AMOEBA         100
 
-struct PictureFile
-{
-  char *picture_filename;
-  char *picturemask_filename;
-};
+#define LEVEL_SCORE_ELEMENTS   16      /* level elements with score */
+
+/* fundamental game speed values */
+#define GAME_FRAME_DELAY       20      /* frame delay in milliseconds */
+#define FFWD_FRAME_DELAY       10      /* 200% speed for fast forward */
+#define FRAMES_PER_SECOND      (1000 / GAME_FRAME_DELAY)
 
 struct HiScore
 {
@@ -177,14 +211,113 @@ struct HiScore
   int Score;
 };
 
+struct OptionInfo
+{
+  char *display_name;
+  char *server_host;
+  int server_port;
+  char *base_directory;
+  char *level_directory;
+  boolean serveronly;
+  boolean network;
+  boolean verbose;
+};
+
+struct SetupJoystickInfo
+{
+  char *device_name;
+  int xleft, xmiddle, xright;
+  int yupper, ymiddle, ylower;
+  int snap;
+  int bomb;
+};
+
+struct SetupKeyboardInfo
+{
+  KeySym left;
+  KeySym right;
+  KeySym up;
+  KeySym down;
+  KeySym snap;
+  KeySym bomb;
+};
+
+struct SetupInputInfo
+{
+  boolean use_joystick;
+  struct SetupJoystickInfo joy;
+  struct SetupKeyboardInfo key;
+};
+
+struct SetupInfo
+{
+  char *player_name;
+
+  boolean sound;
+  boolean sound_loops;
+  boolean sound_music;
+  boolean sound_simple;
+  boolean toons;
+  boolean double_buffering;
+  boolean direct_draw;         /* !double_buffering (redundant!) */
+  boolean scroll_delay;
+  boolean soft_scrolling;
+  boolean fading;
+  boolean autorecord;
+  boolean quick_doors;
+  boolean team_mode;
+
+  struct SetupInputInfo input[MAX_PLAYERS];
+};
+
+struct SetupFileList
+{
+  char *token;
+  char *value;
+  struct SetupFileList *next;
+};
+
 struct PlayerInfo
 {
-  char login_name[MAX_NAMELEN];
-  char alias_name[MAX_NAMELEN];
-  int handicap;
-  unsigned int setup;
-  int leveldir_nr;
-  int level_nr;
+  boolean present;             /* player present in level playfield */
+  boolean connected;           /* player connected (locally or via network) */
+  boolean active;              /* player (present && connected) */
+
+  int index_nr, client_nr, element_nr;
+
+  byte action;                 /* action from local input device */
+  byte effective_action;       /* action aknowledged from network server
+                                  or summarized over all configured input
+                                  devices when in single player mode */
+
+  int joystick_fd;             /* file descriptor of player's joystick */
+
+  int jx,jy, last_jx,last_jy;
+  int MovDir, MovPos, GfxPos;
+  int Frame;
+
+  boolean Pushing;
+  boolean gone, LevelSolved, GameOver;
+  boolean snapped;
+
+  long move_delay;
+  int last_move_dir;
+
+  long push_delay;
+  int push_delay_value;
+
+  int frame_reset_delay;
+
+  long actual_frame_counter;
+
+  int score;
+  int gems_still_needed;
+  int sokobanfields_still_needed;
+  int lights_still_needed;
+  int friends_still_needed;
+  int key[4];
+  int dynamite;
+  int dynabomb_count, dynabomb_size, dynabombs_left, dynabomb_xl;
 };
 
 struct LevelInfo
@@ -194,7 +327,7 @@ struct LevelInfo
   int time;
   int edelsteine;
   char name[MAX_LEVNAMLEN];
-  int score[MAX_LEVSCORE_ENTRIES];
+  int score[LEVEL_SCORE_ELEMENTS];
   int mampfer_inhalt[4][3][3];
   int tempo_amoebe;
   int dauer_sieb;
@@ -204,114 +337,119 @@ struct LevelInfo
 
 struct LevelDirInfo
 {
-  char filename[MAX_LEVDIR_FILENAME];
-  char name[MAX_LEVDIR_NAME];
+  char *filename;
+  char *name;
   int levels;
-  int readonly;
+  int sort_priority;
+  boolean user_defined;
+  boolean readonly;
 };
 
-struct RecordingInfo
+struct TapeInfo
 {
   int level_nr;
-  unsigned int random_seed;
+  unsigned long random_seed;
   unsigned long date;
   unsigned long counter;
   unsigned long length;
   unsigned long length_seconds;
   unsigned int delay_played;
-  BOOL pause_before_death;
-  BOOL changed;
-  BOOL recording, playing, pausing;
-  BOOL fast_forward;
+  boolean pause_before_death;
+  boolean recording, playing, pausing;
+  boolean fast_forward;
+  boolean changed;
+  boolean player_participates[MAX_PLAYERS];
   struct
   {
-    unsigned char joystickdata;
-    unsigned char delay;
+    byte action[MAX_PLAYERS];
+    byte delay;
   } pos[MAX_TAPELEN];
 };
 
-struct JoystickInfo
-{
-  int xleft, xright, xmiddle;
-  int yupper, ylower, ymiddle;
-};
-
 extern Display        *display;
+extern Visual         *visual;
 extern int             screen;
 extern Window                  window;
-extern GC              gc, clip_gc[];
-extern XImage         *image[];
-extern Pixmap          clipmask[];
+extern GC              gc, clip_gc[], tile_clip_gc;
 extern Pixmap          pix[];
+extern Pixmap          clipmask[], tile_clipmask[];
+
+#ifdef USE_XPM_LIBRARY
 extern XpmAttributes   xpm_att[];
-extern Drawable        drawto, drawto_field, backbuffer;
+#endif
+
+extern Drawable        drawto, drawto_field, backbuffer, fieldbuffer;
 extern Colormap                cmap;
 
 extern int             sound_pipe[2];
 extern int             sound_device;
 extern char           *sound_device_name;
 extern int             joystick_device;
-extern char           *joystick_device_name[2];
-extern char           *level_directory;
-extern int                     width, height;
-extern unsigned long   pen_fg, pen_bg;
+extern char           *joystick_device_name[];
+
+extern char           *program_name;
 
 extern int             game_status;
-extern int             game_emulation;
-extern int             button_status, motion_status;
+extern boolean         network_playing;
+extern int             button_status;
+extern boolean         motion_status;
 extern int             key_joystick_mapping;
 extern int             global_joystick_status, joystick_status;
-extern int             sound_status, sound_on;
-extern int             sound_loops_allowed, sound_loops_on;
-extern int             sound_music_on;
-extern int             sound_simple_on;
-extern int             toons_on;
-extern int             direct_draw_on;
-extern int             scroll_delay_on;
-extern int             fading_on;
-extern int             autorecord_on;
-extern int             joystick_nr;
-extern int             quick_doors;
-
-extern BOOL            redraw[SCR_FIELDX][SCR_FIELDY];
+extern int             sound_status;
+extern boolean         sound_loops_allowed;
+
+extern boolean         redraw[MAX_BUF_XSIZE][MAX_BUF_YSIZE];
+extern int             redraw_x1, redraw_y1;
 extern int             redraw_mask;
 extern int             redraw_tiles;
 
-extern int             Feld[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
-extern int             Ur[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
-extern int             MovPos[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
-extern int             MovDir[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
-extern int             MovDelay[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
-extern int             Store[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
-extern int             Store2[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
-extern int             Frame[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
-extern int             Stop[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
-extern int             JustHit[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
-extern int             AmoebaNr[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
-extern int             AmoebaCnt[MAX_NUM_AMOEBA], AmoebaCnt2[MAX_NUM_AMOEBA];
-extern long            Elementeigenschaften[MAX_ELEMENTS];
+extern short           Feld[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
+extern short           Ur[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
+extern short           MovPos[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
+extern short           MovDir[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
+extern short           MovDelay[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
+extern short           Store[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
+extern short           Store2[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
+extern short           StorePlayer[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
+extern short           Frame[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
+extern boolean         Stop[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
+extern short           JustHit[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
+extern short           AmoebaNr[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
+extern short           AmoebaCnt[MAX_NUM_AMOEBA], AmoebaCnt2[MAX_NUM_AMOEBA];
+extern unsigned long   Elementeigenschaften[MAX_ELEMENTS];
 
 extern int             level_nr, leveldir_nr, num_leveldirs;
 extern int             lev_fieldx,lev_fieldy, scroll_x,scroll_y;
 
-extern int             LevelSolved,GameOver, JX,JY, ZX,ZY;
-extern int             FrameCounter,TimeFrames,TimeLeft,Score;
-extern int             Gems,SokobanFields,Lights,Dynamite,Key[4],MampferNr;
-extern int             DynaBombCount, DynaBombSize, DynaBombsLeft, DynaBombXL;
-extern int             SiebAktiv;
+extern int             FX,FY, ScrollStepSize;
+extern int             ScreenMovDir, ScreenMovPos, ScreenGfxPos;
+extern int             GameFrameDelay;
+extern int             FfwdFrameDelay;
+extern int             MoveSpeed;
+extern int             BX1,BY1, BX2,BY2;
+extern int             ZX,ZY, ExitX,ExitY;
+extern int             AllPlayersGone;
+extern int             FrameCounter, TimeFrames, TimeLeft;
+extern int             MampferNr, SiebAktiv;
+
+extern boolean         network_player_action_received;
 
 extern struct LevelDirInfo     leveldir[];
 extern struct LevelInfo                level;
-extern struct PlayerInfo       player;
+extern struct PlayerInfo       stored_player[], *local_player;
 extern struct HiScore          highscore[];
-extern struct RecordingInfo    tape;
+extern struct TapeInfo         tape;
+extern struct SoundInfo                Sound[];
 extern struct JoystickInfo     joystick[];
+extern struct OptionInfo       options;
+extern struct SetupInfo                setup;
+extern struct SetupFileList    *setup_list;
+extern struct SetupFileList    *level_setup_list;
 
+extern char            *sound_name[];
 extern int             background_loop[];
 extern int             num_bg_loops;
 
-extern char            *progname;
-
 
 /* often used screen positions */
 #define SX                     8
@@ -332,6 +470,8 @@ extern char         *progname;
 #define MIDPOSY                        (SCR_FIELDY/2)
 #define SXSIZE                 (SCR_FIELDX*TILEX)
 #define SYSIZE                 (SCR_FIELDY*TILEY)
+#define FXSIZE                 ((SCR_FIELDX+2)*TILEX)
+#define FYSIZE                 ((SCR_FIELDY+2)*TILEY)
 #define DXSIZE                 100
 #define DYSIZE                 280
 #define VXSIZE                 DXSIZE
@@ -361,6 +501,7 @@ extern char         *progname;
 #define GFX_PER_LINE           16
 #define MINI_GFX_PER_LINE      32
 #define MICRO_GFX_PER_LINE     128
+#define HEROES_PER_LINE                16
 #define FONT_CHARS_PER_LINE    16
 #define FONT_LINES_PER_FONT    4
 
@@ -381,7 +522,7 @@ extern char         *progname;
 #define EL_KAEFER              9
 #define EL_FLIEGER             10
 #define EL_MAMPFER             11
-#define EL_ZOMBIE              12
+#define EL_ROBOT               12
 #define EL_BETON               13
 #define EL_DIAMANT             14
 #define EL_AMOEBE_TOT          15
@@ -487,6 +628,17 @@ extern char                *progname;
 #define EL_AUSGANG_AUF         107
 #define EL_SIEB2_TOT           108
 #define EL_AMOEBA2DIAM         109
+#define EL_MAULWURF            110
+#define EL_PINGUIN             111
+#define EL_SONDE               112
+#define EL_PFEIL_L             113
+#define EL_PFEIL_R             114
+#define EL_PFEIL_O             115
+#define EL_PFEIL_U             116
+#define EL_SCHWEIN             117
+#define EL_DRACHE              118
+
+#define EL_UNUSED_119          119
 
 #define EL_CHAR_START          120
 #define EL_CHAR_ASCII0         (EL_CHAR_START-32)
@@ -519,6 +671,14 @@ extern char                *progname;
 #define EL_CHAR_COPY           (EL_CHAR_ASCII0+94)
 #define EL_CHAR_END            (EL_CHAR_START+79)
 
+#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
+
 /* "unreal" runtime elements */
 #define EL_BLOCKED             300
 #define EL_EXPLODING           301
@@ -527,8 +687,25 @@ extern char                *progname;
 #define EL_BLURB_RIGHT         304
 #define EL_AMOEBING            305
 #define EL_MAUERND             306
+#define EL_BURNING             307
+#define EL_PLAYER_IS_LEAVING   308
 
-/* names for the graphic objects */
+/* game graphics:
+**       0 - 255: graphics from "RocksScreen"
+**     256 - 511: graphics from "RocksFont"
+**     512 - 767: graphics from "RocksHeroes"
+*/
+
+#define GFX_START_ROCKSSCREEN  0
+#define GFX_END_ROCKSSCREEN    255
+#define GFX_START_ROCKSFONT    256
+#define GFX_END_ROCKSFONT      511
+#define GFX_START_ROCKSHEROES  512
+#define GFX_END_ROCKSHEROES    767
+
+#define NUM_TILES              768
+
+/* graphics from "RocksScreen" */
 /* Zeile 0 (0) */
 #define GFX_LEERRAUM           (-1)
 #define        GFX_ERDREICH            0
@@ -560,7 +737,7 @@ extern char         *progname;
 #define GFX_BADEWANNE3         32
 #define GFX_BADEWANNE4         33
 #define GFX_BADEWANNE5         34
-#define        GFX_SPIELFIGUR          35
+#define        GFX_SMILEY              35
 #define GFX_PFORTE1            36
 #define GFX_PFORTE2            37
 #define GFX_PFORTE3            38
@@ -586,7 +763,7 @@ extern char         *progname;
 #define GFX_KAEFER_U           75
 /* Zeile 5 (80) */
 #define GFX_MAMPFER            80
-#define GFX_ZOMBIE             84
+#define GFX_ROBOT              84
 #define GFX_PACMAN             88
 #define GFX_PACMAN_R           88
 #define GFX_PACMAN_O           89
@@ -608,6 +785,10 @@ extern char                *progname;
 #define GFX_BIRNE_EIN          113
 #define GFX_ZEIT_VOLL          114
 #define GFX_ZEIT_LEER          115
+#define GFX_SPIELER1           116
+#define GFX_SPIELER2           117
+#define GFX_SPIELER3           118
+#define GFX_SPIELER4           119
 #define GFX_AMOEBE_VOLL                120
 #define GFX_AMOEBE_BD          GFX_AMOEBE_VOLL
 #define GFX_SOKOBAN_OBJEKT     121
@@ -630,16 +811,24 @@ extern char               *progname;
 #define GFX_KUGEL_GELB         142
 #define GFX_KUGEL_GRAU         143
 /* Zeile 9 (144) */
-#define GFX_BLURB_LEFT         144
-#define GFX_BLURB_RIGHT                148
+#define GFX_PINGUIN            144
+#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
@@ -669,15 +858,67 @@ extern char               *progname;
 #define GFX_FIREFLY_L          206
 #define GFX_FIREFLY_U          207
 
-#define        GFX_SCHLUESSEL          GFX_SCHLUESSEL1
-
-#define GFX_SPIELER1           116
-#define GFX_SPIELER2           117
-#define GFX_SPIELER3           118
-#define GFX_SPIELER4           119
-
-/* nicht in "RocksScreen" sondern woanders :) */
-#define GFX_CHAR_START         256
+#define GFX_SCHLUESSEL         GFX_SCHLUESSEL1
+#define GFX_SPIELFIGUR         GFX_SPIELER1
+
+
+/* graphics from "RocksHeroes" */
+
+#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)
+#define GFX_SCHWEIN_RIGHT      (GFX_START_ROCKSHEROES + 1*HEROES_PER_LINE +12)
+#define GFX_DRACHE_DOWN                (GFX_START_ROCKSHEROES + 2*HEROES_PER_LINE + 8)
+#define GFX_DRACHE_UP          (GFX_START_ROCKSHEROES + 2*HEROES_PER_LINE +12)
+#define GFX_DRACHE_LEFT                (GFX_START_ROCKSHEROES + 3*HEROES_PER_LINE + 8)
+#define GFX_DRACHE_RIGHT       (GFX_START_ROCKSHEROES + 3*HEROES_PER_LINE +12)
+#define GFX_MAULWURF_DOWN      (GFX_START_ROCKSHEROES + 4*HEROES_PER_LINE + 8)
+#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 + 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)
 #define GFX_CHAR_ASCII0                (GFX_CHAR_START-32)
 #define GFX_CHAR_AUSRUF                (GFX_CHAR_ASCII0+33)
 #define GFX_CHAR_ZOLL          (GFX_CHAR_ASCII0+34)
@@ -708,19 +949,6 @@ extern char                *progname;
 #define GFX_CHAR_COPY          (GFX_CHAR_ASCII0+94)
 #define GFX_CHAR_END           (GFX_CHAR_START+79)
 
-/* score for elements */
-#define SC_EDELSTEIN           0
-#define SC_DIAMANT             1
-#define SC_KAEFER              2
-#define SC_FLIEGER             3
-#define SC_MAMPFER             4
-#define SC_ZOMBIE              5
-#define SC_PACMAN              6
-#define SC_KOKOSNUSS           7
-#define SC_DYNAMIT             8
-#define SC_SCHLUESSEL          9
-#define SC_ZEITBONUS           10
-
 /* the names of the sounds */
 #define SND_ALCHEMY            0
 #define SND_AMOEBE             1
@@ -777,23 +1005,23 @@ extern char              *progname;
 
 #define NUM_SOUNDS             52
 
-#define IS_LOOP_SOUND(s)       ((s)==SND_KLAPPER || (s)==SND_ROEHR ||  \
-                                (s)==SND_NJAM || (s)==SND_MIEP)
-#define IS_MUSIC_SOUND(s)      ((s)==SND_ALCHEMY || (s)==SND_CHASE || \
-                                (s)==SND_NETWORK || (s)==SND_CZARDASZ || \
-                                (s)==SND_TYGER || (s)==SND_VOYAGER || \
-                                (s)==SND_TWILIGHT)
-extern char *sound_name[NUM_SOUNDS];
-
-/* this structure contains the sound data for the sound server */
-extern struct SoundInfo Sound[NUM_SOUNDS];
+/* default input keys */
+#define KEY_UNDEFINDED         XK_VoidSymbol
+#define DEFAULT_KEY_LEFT       XK_Left
+#define DEFAULT_KEY_RIGHT      XK_Right
+#define DEFAULT_KEY_UP         XK_Up
+#define DEFAULT_KEY_DOWN       XK_Down
+#define DEFAULT_KEY_SNAP       XK_Shift_L
+#define DEFAULT_KEY_BOMB       XK_Shift_R
+#define DEFAULT_KEY_OKAY       XK_Return
+#define DEFAULT_KEY_CANCEL     XK_Escape
 
 /* 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
@@ -807,124 +1035,37 @@ extern struct SoundInfo Sound[NUM_SOUNDS];
 #define FC_SPECIAL2            5
 
 /* values for game_status */
-#define MAINMENU               0
-#define PLAYING                        1
-#define LEVELED                        2
-#define HELPSCREEN             3
-#define CHOOSELEVEL            4
-#define TYPENAME               5
-#define HALLOFFAME             6
-#define SETUP                  7
-#define EXITGAME               8
-
-/* values for game_emulation */
-#define EMU_NONE               0
-#define EMU_BOULDERDASH                1
-#define EMU_SOKOBAN            2
-
-/* values for the joystick */
-#define JOYSTICK_OFF           0
-#define        JOYSTICK_AVAILABLE      1
-#ifdef __FreeBSD__
-#include <machine/joystick.h>
-#define DEV_JOYSTICK_0         "/dev/joy0"
-#define DEV_JOYSTICK_1         "/dev/joy1"
-#else
-#define DEV_JOYSTICK_0         "/dev/js0"
-#define DEV_JOYSTICK_1         "/dev/js1"
-#endif
-
-/* get these values from the program 'js' from the joystick package, */
-/* set JOYSTICK_PERCENT to a threshold appropriate for your joystick */
-#define JOYSTICK_XLEFT         30
-#define JOYSTICK_XRIGHT                1250
-#define JOYSTICK_XMIDDLE       530
-#define JOYSTICK_YUPPER                40
-#define JOYSTICK_YLOWER                1440
-#define JOYSTICK_YMIDDLE       680
-#define JOYSTICK_PERCENT       25
-#define JOY_LEFT               MV_LEFT
-#define JOY_RIGHT              MV_RIGHT
-#define JOY_UP                 MV_UP
-#define JOY_DOWN               MV_DOWN
-#define JOY_BUTTON_1           16
-#define JOY_BUTTON_2           32
-#define JOY_BUTTON             (JOY_BUTTON_1 | JOY_BUTTON_2)
-#define JOY_BUTTON_NOT_PRESSED 0
-#define JOY_BUTTON_PRESSED     1
-#define JOY_BUTTON_NEW_PRESSED 2
-#define JOY_BUTTON_NEW_RELEASED        3
-
-#ifdef NO_JOYSTICK
-#define JOYSTICK_STATUS                JOYSTICK_OFF
-#else
-#define JOYSTICK_STATUS                JOYSTICK_AVAILABLE
-#endif
+#define EXITGAME               0
+#define MAINMENU               1
+#define PLAYING                        2
+#define LEVELED                        3
+#define HELPSCREEN             4
+#define CHOOSELEVEL            5
+#define TYPENAME               6
+#define HALLOFFAME             7
+#define SETUP                  8
+#define SETUPINPUT             9
+#define CALIBRATION            10
 
 #ifndef GAME_DIR
 #define GAME_DIR               "."
 #endif
 
-#ifndef GFX_PATH
-#define GFX_PATH               GAME_DIR "/graphics"
-#endif
-#ifndef SND_PATH
-#define SND_PATH               GAME_DIR "/sounds"
-#endif
-#ifndef LEVEL_PATH
-#define LEVEL_PATH             GAME_DIR "/levels"
-#endif
-#ifndef SCORE_PATH
-#define SCORE_PATH             LEVEL_PATH
-#endif
-#ifndef NAMES_PATH
-#define NAMES_PATH             LEVEL_PATH
-#endif
-#ifndef CONFIG_PATH
-#define CONFIG_PATH            GAME_DIR
-#endif
-#ifndef JOYDAT_PATH
-#define JOYDAT_PATH            GAME_DIR
-#endif
+#define BASE_PATH              GAME_DIR
+
+#define GRAPHICS_DIRECTORY     "graphics"
+#define SOUNDS_DIRECTORY       "sounds"
+#define LEVELS_DIRECTORY       "levels"
+#define TAPES_DIRECTORY                "tapes"
+#define SCORES_DIRECTORY       "scores"
 
-#define SCORE_FILENAME         "ROCKS.score"
-#define NAMES_FILENAME         "ROCKS.names"
-#define LEVDIR_FILENAME                "ROCKS.levelinfo"
-#define JOYDAT_FILENAME                "ROCKS.joystick"
-
-#define JOYDAT_FILE            JOYDAT_PATH "/" JOYDAT_FILENAME
-
-#define LEVEL_PERMS    (S_IRUSR|S_IWUSR | S_IRGRP|S_IWGRP | S_IROTH|S_IWOTH)
-#define SCORE_PERMS            LEVEL_PERMS
-#define NAMES_PERMS            LEVEL_PERMS
-#define LEVDIR_PERMS           LEVEL_PERMS
-#define LEVREC_PERMS           LEVEL_PERMS
-#define JOYDAT_PERMS           LEVEL_PERMS
-
-/* old cookies */
-#define NAMES_COOKIE_10                "ROCKSNDIAMONDS_NAMES_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 JOYSTICK_COOKIE                "ROCKSNDIAMONDS_JOYSTICK_FILE_VERSION_1.0"
-#define LEVEL_COOKIE_LEN       (strlen(LEVEL_COOKIE)+1)
-#define SCORE_COOKIE_LEN       (strlen(SCORE_COOKIE)+1)
-#define NAMES_COOKIE_LEN       (strlen(NAMES_COOKIE)+1)
-#define LEVELDIR_COOKIE_LEN    (strlen(LEVELDIR_COOKIE)+1)
-#define LEVELREC_COOKIE_LEN    (strlen(LEVELREC_COOKIE)+1)
-#define JOYSTICK_COOKIE_LEN    (strlen(JOYSTICK_COOKIE)+1)
-
-#define VERSION_STRING         "1.1"
+#define VERSION_STRING         "1.2 preview 1"
 #define GAMETITLE_STRING       "Rocks'n'Diamonds"
 #define WINDOWTITLE_STRING     GAMETITLE_STRING " " VERSION_STRING
-#define COPYRIGHT_STRING       "Copyright ^1995-97 by Holger Schemel"
+#define COPYRIGHT_STRING       "Copyright ^1995-98 by Holger Schemel"
 
-/* Leerer Login- und Alias-Name */
-#define EMPTY_LOGIN            "NO_LOGIN"
-#define EMPTY_ALIAS            "NO_NAME"
+/* default name for empty highscore entry */
+#define EMPTY_PLAYER_NAME      "no name"
 
 /* values for button_status */
 #define MB_NOT_PRESSED         FALSE
@@ -932,18 +1073,15 @@ extern struct SoundInfo Sound[NUM_SOUNDS];
 #define MB_PRESSED             TRUE
 #define MB_MENU_CHOICE         FALSE
 #define MB_MENU_MARK           TRUE
+#define MB_MENU_INITIALIZE     (-1)
 #define MB_LEFT                        1
+#ifdef MSDOS
+#define MB_MIDDLE              4
+#define MB_RIGHT               2
+#else
 #define MB_MIDDLE              2
 #define MB_RIGHT               3
-
-/* values for key_status */
-#define KEY_NOT_PRESSED                FALSE
-#define KEY_RELEASED           FALSE
-#define KEY_PRESSED            TRUE
-
-/* values for focus_status */
-#define FOCUS_OUT              FALSE
-#define FOCUS_IN               TRUE
+#endif
 
 /* values for redraw_mask */
 #define REDRAW_ALL             (1L<<0)
@@ -954,53 +1092,32 @@ extern struct SoundInfo Sound[NUM_SOUNDS];
 #define REDRAW_VIDEO_2         (1L<<5)
 #define REDRAW_VIDEO_3         (1L<<6)
 #define REDRAW_MICROLEV                (1L<<7)
+#define REDRAW_FROM_BACKBUFFER (1L<<8)
 #define REDRAW_DOOR_2  (REDRAW_VIDEO_1 | REDRAW_VIDEO_2 | REDRAW_VIDEO_3)
 #define REDRAW_DOORS   (REDRAW_DOOR_1 | REDRAW_DOOR_2)
 #define REDRAW_MAIN    (REDRAW_FIELD | REDRAW_TILES | REDRAW_MICROLEV)
-#define REDRAWTILES_TH         SCR_FIELDX*SCR_FIELDY/2
-
-/* positions in the game control window */
-#define XX_LEVEL               37
-#define YY_LEVEL               20
-#define XX_EMERALDS            29
-#define YY_EMERALDS            54
-#define XX_DYNAMITE            29
-#define YY_DYNAMITE            89
-#define XX_KEYS                        18
-#define YY_KEYS                        123
-#define XX_SCORE               15
-#define YY_SCORE               159
-#define XX_TIME                        29
-#define YY_TIME                        194
-
-#define DX_LEVEL               (DX+XX_LEVEL)
-#define DY_LEVEL               (DY+YY_LEVEL)
-#define DX_EMERALDS            (DX+XX_EMERALDS)
-#define DY_EMERALDS            (DY+YY_EMERALDS)
-#define DX_DYNAMITE            (DX+XX_DYNAMITE)
-#define DY_DYNAMITE            (DY+YY_DYNAMITE)
-#define DX_KEYS                        (DX+XX_KEYS)
-#define DY_KEYS                        (DY+YY_KEYS)
-#define DX_SCORE               (DX+XX_SCORE)
-#define DY_SCORE               (DY+YY_SCORE)
-#define DX_TIME                        (DX+XX_TIME)
-#define DY_TIME                        (DY+YY_TIME)
-
-/* Felder in PIX_DOOR */
-/* Bedeutung in PIX_DB_DOOR: (3 PAGEs)
-   PAGEX1: 1. Zwischenspeicher für DOOR_1
-   PAGEX2: 2. Zwischenspeicher für DOOR_1
-   PAGEX3: Pufferspeicher für Animationen
+#define REDRAWTILES_THRESHOLD  SCR_FIELDX*SCR_FIELDY/2
+
+/* areas in pixmap PIX_DOOR */
+/* meaning in PIX_DB_DOOR: (3 PAGEs)
+   PAGEX1: 1. buffer for DOOR_1
+   PAGEX2: 2. buffer for DOOR_1
+   PAGEX3: buffer for animations
 */
 
 #define DOOR_GFX_PAGESIZE      DXSIZE
-#define DOOR_GFX_PAGEX1                (0*DOOR_GFX_PAGESIZE)
-#define DOOR_GFX_PAGEX2                (1*DOOR_GFX_PAGESIZE)
-#define DOOR_GFX_PAGEX3                (2*DOOR_GFX_PAGESIZE)
-#define DOOR_GFX_PAGEX4                (3*DOOR_GFX_PAGESIZE)
-#define DOOR_GFX_PAGEX5                (4*DOOR_GFX_PAGESIZE)
-#define DOOR_GFX_PAGEX6                (5*DOOR_GFX_PAGESIZE)
+#define DOOR_GFX_PAGEX1                (0 * DOOR_GFX_PAGESIZE)
+#define DOOR_GFX_PAGEX2                (1 * DOOR_GFX_PAGESIZE)
+#define DOOR_GFX_PAGEX3                (2 * DOOR_GFX_PAGESIZE)
+#define DOOR_GFX_PAGEX4                (3 * DOOR_GFX_PAGESIZE)
+#define DOOR_GFX_PAGEX5                (4 * DOOR_GFX_PAGESIZE)
+#define DOOR_GFX_PAGEX6                (5 * DOOR_GFX_PAGESIZE)
 #define DOOR_GFX_PAGEY1                0
 #define DOOR_GFX_PAGEY2                DYSIZE
 
-#endif
+/* for DrawGraphicAnimation() [tools.c] and AnimateToon() [cartoons.c] */
+#define ANIM_NORMAL    0
+#define ANIM_OSCILLATE 1
+#define ANIM_REVERSE   2
+
+#endif /* MAIN_H */