rnd-20001203-5-src
[rocksndiamonds.git] / src / main.h
index add49d76a76f13b59fcfa5d6cd06bb7b401aee4b..6c0ec325a8d19d106f3d0ab51b6de6c0678b7c0d 100644 (file)
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <sys/time.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
-#endif
-#else  /* MSDOS */
-#include "msdos.h"
-#endif  /* MSDOS */
+#include <unistd.h>
+#include <fcntl.h>
 
 #ifdef DEBUG
 #define DEBUG_TIMING   0
 #endif
 
-typedef unsigned char boolean;
-typedef unsigned char byte;
+#include "libgame/libgame.h"
 
 #ifndef FALSE
 #define FALSE          0
@@ -54,13 +37,16 @@ typedef unsigned char byte;
 
 #define WIN_XSIZE      672
 #define WIN_YSIZE      560
-#ifndef MSDOS
+#define WIN_SDL_DEPTH  16      /* !!! change this !!! */
+
+#if !defined(PLATFORM_MSDOS)
 #define WIN_XPOS       0
 #define WIN_YPOS       0
-#else  /* MSDOS */
+#else
 #define WIN_XPOS       ((XRES - WIN_XSIZE) / 2)
 #define WIN_YPOS       ((YRES - WIN_YSIZE) / 2)
-#endif /* MSDOS */
+#endif
+
 #define SCR_FIELDX     17
 #define SCR_FIELDY     17
 #define MAX_BUF_XSIZE  (SCR_FIELDX + 2)
@@ -74,6 +60,7 @@ typedef unsigned char byte;
 
 #define MAX_PLAYERS    4
 
+#if 0
 #ifndef MIN
 #define MIN(a,b)       ((a) < (b) ? (a) : (b))
 #endif
@@ -86,6 +73,7 @@ typedef unsigned char byte;
 #ifndef SIGN
 #define SIGN(a)                ((a) < 0 ? -1 : ((a)>0 ? 1 : 0))
 #endif
+#endif
 
 #define SCREENX(a)     ((a) - scroll_x)
 #define SCREENY(a)     ((a) - scroll_y)
@@ -200,7 +188,7 @@ typedef unsigned char byte;
 #define PLAYER_PROTECTED(x,y)  (SHIELD_ON(PLAYERINFO(x, y)) ||         \
                                 PROTECTED_FIELD(x, y))
 
-/* Pixmaps with graphic file */
+/* Bitmaps with graphic file */
 #define PIX_BACK               0
 #define PIX_DOOR               1
 #define PIX_HEROES             2
@@ -211,13 +199,12 @@ typedef unsigned char byte;
 #define        PIX_BIGFONT             7
 #define PIX_SMALLFONT          8
 #define PIX_MEDIUMFONT         9
-/* Pixmaps without graphic file */
-#define PIX_DB_BACK            10
-#define PIX_DB_DOOR            11
-#define PIX_DB_FIELD           12
+/* Bitmaps without graphic file */
+#define PIX_DB_DOOR            10
+#define PIX_DB_FIELD           11
 
 #define NUM_PICTURES           10
-#define NUM_PIXMAPS            13
+#define NUM_BITMAPS            12
 
 /* boundaries of arrays etc. */
 #define MAX_PLAYER_NAME_LEN    10
@@ -239,7 +226,9 @@ typedef unsigned char byte;
 #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)
+#if 0
 #define GADGET_FRAME_DELAY     150     /* delay between gadget actions */
+#endif
 #define MICROLEVEL_SCROLL_DELAY        50      /* delay for scrolling micro level */
 #define MICROLEVEL_LABEL_DELAY 250     /* delay for micro level label */
 
@@ -249,19 +238,6 @@ struct HiScore
   int Score;
 };
 
-struct OptionInfo
-{
-  char *display_name;
-  char *server_host;
-  int server_port;
-  char *ro_base_directory;
-  char *rw_base_directory;
-  char *level_directory;
-  boolean serveronly;
-  boolean network;
-  boolean verbose;
-};
-
 struct SetupJoystickInfo
 {
   char *device_name;
@@ -273,12 +249,12 @@ struct SetupJoystickInfo
 
 struct SetupKeyboardInfo
 {
-  KeySym left;
-  KeySym right;
-  KeySym up;
-  KeySym down;
-  KeySym snap;
-  KeySym bomb;
+  Key left;
+  Key right;
+  Key up;
+  Key down;
+  Key snap;
+  Key bomb;
 };
 
 struct SetupInputInfo
@@ -307,6 +283,7 @@ struct SetupInfo
   boolean team_mode;
   boolean handicap;
   boolean time_limit;
+  boolean fullscreen;
 
   struct SetupInputInfo input[MAX_PLAYERS];
 };
@@ -389,35 +366,6 @@ struct LevelInfo
   boolean gravity;
 };
 
-struct LevelDirInfo
-{
-  char *filename;      /* level series single directory name */
-  char *fullpath;      /* complete path relative to level directory */
-  char *basepath;      /* absolute base path of level directory */
-  char *name;          /* level series name, as displayed on main screen */
-  char *name_short;    /* optional short name for level selection screen */
-  char *name_sorting;  /* optional sorting name for correct level sorting */
-  char *author;                /* level series author name levels without author */
-  char *imported_from; /* optional comment for imported level series */
-  int levels;          /* number of levels in level series */
-  int first_level;     /* first level number (to allow start with 0 or 1) */
-  int last_level;      /* last level number (automatically calculated) */
-  int sort_priority;   /* sort levels by 'sort_priority' and then by name */
-  boolean level_group; /* directory contains more level series directories */
-  boolean parent_link; /* entry links back to parent directory */
-  boolean user_defined;        /* user defined levels are stored in home directory */
-  boolean readonly;    /* readonly levels can not be changed with editor */
-  int color;           /* color to use on selection screen for this level */
-  char *class_desc;    /* description of level series class */
-  int handicap_level;  /* number of the lowest unsolved level */
-  int cl_first;                /* internal control field for "choose level" screen */
-  int cl_cursor;       /* internal control field for "choose level" screen */
-
-  struct LevelDirInfo *node_parent;    /* parent level directory info */
-  struct LevelDirInfo *node_group;     /* level group sub-directory info */
-  struct LevelDirInfo *next;           /* next level series structure node */
-};
-
 struct TapeInfo
 {
   int level_nr;
@@ -455,46 +403,74 @@ struct GameInfo
 
 struct GlobalInfo
 {
-  int dummy;
+  float frames_per_second;
+  boolean fps_slowdown;
+  int fps_slowdown_factor;
 };
 
-extern Display        *display;
-extern Visual         *visual;
-extern int             screen;
-extern Window                  window;
-extern GC              gc, clip_gc[], tile_clip_gc;
-extern Pixmap          pix[];
-extern Pixmap          clipmask[], tile_clipmask[];
+#if 0
+extern DrawWindow      window;
+extern DrawBuffer      backbuffer;
+extern GC              gc;
+#endif
 
-#ifdef USE_XPM_LIBRARY
-extern XpmAttributes   xpm_att[];
+#if 0
+extern GC              clip_gc[];
 #endif
+extern GC              tile_clip_gc;
+extern Bitmap          pix[];
+#if 0
+extern Bitmap          pix_masked[];
 
-extern Drawable        drawto, drawto_field, backbuffer, fieldbuffer;
+extern Bitmap          tile_masked[];
+
+extern Pixmap          clipmask[];
+#endif
+extern Pixmap          tile_clipmask[];
+
+#if 0
+extern DrawBuffer      drawto;
+#endif
+extern DrawBuffer      drawto_field, fieldbuffer;
+#if 0
 extern Colormap                cmap;
+#endif
 
-extern int             sound_pipe[2];
-extern int             sound_device;
+#if 0
 extern char           *sound_device_name;
+#endif
+
 extern int             joystick_device;
 extern char           *joystick_device_name[];
 
+#if 0
 extern char           *program_name;
+#endif
 
 extern int             game_status;
 extern boolean         level_editor_test_game;
 extern boolean         network_playing;
+
+#if 0
 extern int             button_status;
 extern boolean         motion_status;
+#endif
+
 extern int             key_joystick_mapping;
 extern int             global_joystick_status, joystick_status;
-extern int             sound_status;
-extern boolean         sound_loops_allowed;
+
+#if 0
+extern boolean         fullscreen_available;
+extern boolean         fullscreen_enabled;
+#endif
 
 extern boolean         redraw[MAX_BUF_XSIZE][MAX_BUF_YSIZE];
 extern int             redraw_x1, redraw_y1;
+
+#if 0
 extern int             redraw_mask;
 extern int             redraw_tiles;
+#endif
 
 extern short           Feld[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern short           Ur[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
@@ -525,29 +501,48 @@ extern int                SBX_Left, SBX_Right;
 extern int             SBY_Upper, SBY_Lower;
 extern int             ZX,ZY, ExitX,ExitY;
 extern int             AllPlayersGone;
-extern int             FrameCounter, TimeFrames, TimePlayed, TimeLeft;
+
+#if 0
+extern int             FrameCounter;
+#endif
+
+extern int             TimeFrames, TimePlayed, TimeLeft;
 extern boolean         SiebAktiv;
 extern int             SiebCount;
 
 extern boolean         network_player_action_received;
 
+#if 0
 extern struct LevelDirInfo     *leveldir_first, *leveldir_current;
+#endif
 extern struct LevelInfo                level;
 extern struct PlayerInfo       stored_player[], *local_player;
 extern struct HiScore          highscore[];
 extern struct TapeInfo         tape;
-extern struct SoundInfo                Sound[];
+#if 0
+extern struct SampleInfo       Sound[];
+#endif
 extern struct JoystickInfo     joystick[];
+
+#if 0
 extern struct OptionInfo       options;
+#endif
+
 extern struct SetupInfo                setup;
 extern struct GameInfo         game;
+
+#if 0
+extern struct VideoSystemInfo  video;
+extern struct AudioSystemInfo  audio;
+#endif
+
 extern struct GlobalInfo       global;
 
 extern char            *sound_name[];
 extern int             background_loop[];
 extern int             num_bg_loops;
 extern char            *element_info[];
-
+extern int             num_element_info;
 
 /* often used screen positions */
 #define SX                     8
@@ -585,6 +580,8 @@ extern char         *element_info[];
 #define MICROLEV_XPOS          (SX + (SXSIZE - MICROLEV_XSIZE) / 2)
 #define MICROLEV_YPOS          (SX + 12 * TILEY - MICRO_TILEY)
 #define MICROLABEL_YPOS                (MICROLEV_YPOS + MICROLEV_YSIZE + 7)
+
+#if 0
 #define FONT1_XSIZE            32
 #define FONT1_YSIZE            32
 #define FONT2_XSIZE            14
@@ -597,6 +594,7 @@ extern char         *element_info[];
 #define FONT5_YSIZE            14
 #define FONT6_XSIZE            16
 #define FONT6_YSIZE            32
+#endif
 
 #define GFX_STARTX             SX
 #define GFX_STARTY             SY
@@ -634,8 +632,10 @@ extern char                *element_info[];
 #define MINI_MORE_PER_LINE     16
 #define MICRO_MORE_PER_LINE    16
 
+#if 0
 #define FONT_CHARS_PER_LINE    16
 #define FONT_LINES_PER_FONT    4
+#endif
 
 /* game elements:
 **       0 - 499: real elements, stored in level file
@@ -1602,15 +1602,14 @@ extern char             *element_info[];
 #define NUM_SOUNDS             62
 
 /* 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
+#define DEFAULT_KEY_LEFT       KSYM_Left
+#define DEFAULT_KEY_RIGHT      KSYM_Right
+#define DEFAULT_KEY_UP         KSYM_Up
+#define DEFAULT_KEY_DOWN       KSYM_Down
+#define DEFAULT_KEY_SNAP       KSYM_Shift_L
+#define DEFAULT_KEY_BOMB       KSYM_Shift_R
+#define DEFAULT_KEY_OKAY       KSYM_Return
+#define DEFAULT_KEY_CANCEL     KSYM_Escape
 
 /* directions for moving */
 #define MV_NO_MOVING           0
@@ -1619,6 +1618,7 @@ extern char               *element_info[];
 #define MV_UP                  (1 << 2)
 #define MV_DOWN                        (1 << 3)
 
+#if 0
 /* font types */
 #define FS_SMALL               0
 #define FS_BIG                 1
@@ -1631,6 +1631,7 @@ extern char               *element_info[];
 #define FC_SPECIAL1            4
 #define FC_SPECIAL2            5
 #define FC_SPECIAL3            6
+#endif
 
 /* values for game_status */
 #define EXITGAME               0
@@ -1645,6 +1646,7 @@ extern char               *element_info[];
 #define SETUPINPUT             9
 #define CALIBRATION            10
 
+#if 0
 #ifndef RO_GAME_DIR
 #define RO_GAME_DIR            "."
 #endif
@@ -1661,13 +1663,24 @@ extern char             *element_info[];
 #define LEVELS_DIRECTORY       "levels"
 #define TAPES_DIRECTORY                "tapes"
 #define SCORES_DIRECTORY       "scores"
+#endif
 
-#define PROGRAM_VERSION_STRING "1.4.0"
+#define PROGRAM_VERSION_STRING "1.5.0"
 #define PROGRAM_TITLE_STRING   "Rocks'n'Diamonds"
 #define PROGRAM_AUTHOR_STRING  "Holger Schemel"
-#define WINDOW_TITLE_STRING    PROGRAM_TITLE_STRING " " PROGRAM_VERSION_STRING
-#define COPYRIGHT_STRING       "Copyright ^1995-99 by " PROGRAM_AUTHOR_STRING
-
+#define PROGRAM_RIGHTS_STRING  "Copyright ^1995-2000 by"
+#define PROGRAM_DOS_PORT_STRING        "DOS port done by Guido Schulz"
+#define PROGRAM_IDENT_STRING   PROGRAM_VERSION_STRING " " TARGET_STRING
+#define WINDOW_TITLE_STRING    PROGRAM_TITLE_STRING " " PROGRAM_IDENT_STRING
+#define WINDOW_SUBTITLE_STRING PROGRAM_RIGHTS_STRING " " PROGRAM_AUTHOR_STRING
+#define ICON_TITLE_STRING      PROGRAM_TITLE_STRING
+#define UNIX_USERDATA_DIRECTORY        ".rocksndiamonds"
+
+#define X11_ICON_FILENAME      "rocks_icon.xbm"
+#define X11_ICONMASK_FILENAME  "rocks_iconmask.xbm"
+#define MSDOS_POINTER_FILENAME "mouse.pcx"
+
+#if 0
 /* default name for empty highscore entry */
 #define EMPTY_PLAYER_NAME      "no name"
 
@@ -1676,7 +1689,9 @@ extern char               *element_info[];
 
 /* default name for new levels */
 #define NAMELESS_LEVEL_NAME    "nameless level"
+#endif
 
+#if 0
 /* values for button_status */
 #define MB_NOT_PRESSED         FALSE
 #define MB_RELEASED            FALSE
@@ -1684,10 +1699,12 @@ extern char             *element_info[];
 #define MB_MENU_CHOICE         FALSE
 #define MB_MENU_MARK           TRUE
 #define MB_MENU_INITIALIZE     (-1)
-#define MB_LEFT                        1
-#define MB_MIDDLE              2
-#define MB_RIGHT               3
+#define MB_LEFTBUTTON          1
+#define MB_MIDDLEBUTTON                2
+#define MB_RIGHTBUTTON         3
+#endif
 
+#if 0
 /* values for redraw_mask */
 #define REDRAW_ALL             (1 << 0)
 #define REDRAW_FIELD           (1 << 1)
@@ -1708,9 +1725,12 @@ extern char              *element_info[];
 #define REDRAW_MAIN            (REDRAW_FIELD | \
                                 REDRAW_TILES | \
                                 REDRAW_MICROLEVEL)
+#define REDRAW_FPS             (1 << 10)
 #define REDRAWTILES_THRESHOLD  (SCR_FIELDX * SCR_FIELDY / 2)
+#endif
 
-/* areas in pixmap PIX_DOOR */
+#if 0
+/* areas in bitmap PIX_DOOR */
 /* meaning in PIX_DB_DOOR: (3 PAGEs)
    PAGEX1: 1. buffer for DOOR_1
    PAGEX2: 2. buffer for DOOR_1
@@ -1728,6 +1748,7 @@ extern char               *element_info[];
 #define DOOR_GFX_PAGEX8                (7 * 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