#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;
+#if 0
+#include "libgame/libgame.h"
+#endif
#ifndef FALSE
#define FALSE 0
#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)
#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
#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
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;
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
boolean team_mode;
boolean handicap;
boolean time_limit;
+ boolean fullscreen;
struct SetupInputInfo input[MAX_PLAYERS];
};
struct GlobalInfo
{
+ 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
+
+#if 0
+extern GC clip_gc[];
+#endif
+extern GC tile_clip_gc;
+extern Bitmap pix[];
+#if 0
+extern Bitmap pix_masked[];
+
+extern Bitmap tile_masked[];
-#ifdef USE_XPM_LIBRARY
-extern XpmAttributes xpm_att[];
+extern Pixmap clipmask[];
#endif
+extern Pixmap tile_clipmask[];
-extern Drawable drawto, drawto_field, backbuffer, fieldbuffer;
+#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[];
extern boolean motion_status;
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];
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 struct PlayerInfo stored_player[], *local_player;
extern struct HiScore highscore[];
extern struct TapeInfo tape;
-extern struct SoundInfo Sound[];
+extern struct SampleInfo Sound[];
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
#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
#define FONT5_YSIZE 14
#define FONT6_XSIZE 16
#define FONT6_YSIZE 32
+#endif
#define GFX_STARTX SX
#define GFX_STARTY SY
#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
#define EL_MORAST_VOLL 17
#define EL_TROPFEN 18
#define EL_BOMBE 19
-#define EL_SIEB_INAKTIV 20
+#define EL_MAGIC_WALL_OFF 20
#define EL_SPEED_PILL 21
#define EL_SALZSAEURE 22
#define EL_AMOEBE_NASS 23
#define EL_ERZ_EDEL_BD 58
#define EL_ERZ_EDEL_GELB 59
#define EL_MAMPFER2 60
-#define EL_SIEB2_INAKTIV 61
+#define EL_MAGIC_WALL_BD_OFF 61
#define EL_INVISIBLE_STEEL 62
#define EL_UNUSED_63 63
/* "real" (and therefore drawable) runtime elements */
#define EL_FIRST_RUNTIME_EL 500
-#define EL_SIEB_LEER 500
-#define EL_SIEB2_LEER 501
-#define EL_SIEB_VOLL 502
-#define EL_SIEB2_VOLL 503
-#define EL_SIEB_TOT 504
-#define EL_SIEB2_TOT 505
+#define EL_MAGIC_WALL_EMPTY 500
+#define EL_MAGIC_WALL_BD_EMPTY 501
+#define EL_MAGIC_WALL_FULL 502
+#define EL_MAGIC_WALL_BD_FULL 503
+#define EL_MAGIC_WALL_DEAD 504
+#define EL_MAGIC_WALL_BD_DEAD 505
#define EL_AUSGANG_ACT 506
#define EL_SP_TERMINAL_ACTIVE 507
#define EL_SP_BUG_ACTIVE 508
#define EL_PEARL_BREAKING 521
#define EL_TRAP_ACTIVE 522
#define EL_SPRING_MOVING 523
+#define EL_SP_MURPHY_CLONE 524
/* "unreal" (and therefore not drawable) runtime elements */
#define EL_BLOCKED 600
#define GFX_SOKOBAN_FELD_VOLL 123
#define GFX_GEBLUBBER 124
/* Zeile 8 (128) */
-#define GFX_SIEB_INAKTIV 128
-#define GFX_SIEB_LEER GFX_SIEB_INAKTIV
-#define GFX_SIEB_VOLL GFX_SIEB_INAKTIV
-#define GFX_SIEB_TOT GFX_SIEB_INAKTIV
+#define GFX_MAGIC_WALL_OFF 128
+#define GFX_MAGIC_WALL_EMPTY GFX_MAGIC_WALL_OFF
+#define GFX_MAGIC_WALL_FULL GFX_MAGIC_WALL_OFF
+#define GFX_MAGIC_WALL_DEAD GFX_MAGIC_WALL_OFF
#define GFX_ERZ_EDEL 132
#define GFX_ERZ_DIAM 133
#define GFX_ERZ_EDEL_ROT 134
#define GFX_MAUER_L1 GFX_MAUER_LEFT
#define GFX_MAUER_L 170
#define GFX_MAUER_LEBT 171
-#define GFX_SIEB2_INAKTIV 172
-#define GFX_SIEB2_LEER GFX_SIEB2_INAKTIV
-#define GFX_SIEB2_VOLL GFX_SIEB2_INAKTIV
-#define GFX_SIEB2_TOT GFX_SIEB2_INAKTIV
+#define GFX_MAGIC_WALL_BD_OFF 172
+#define GFX_MAGIC_WALL_BD_EMPTY GFX_MAGIC_WALL_BD_OFF
+#define GFX_MAGIC_WALL_BD_FULL GFX_MAGIC_WALL_BD_OFF
+#define GFX_MAGIC_WALL_BD_DEAD GFX_MAGIC_WALL_BD_OFF
/* Zeile 11 (176) */
#define GFX_AUSGANG_ZU 176
#define GFX_AUSGANG_ACT 177
#define GFX2_SP_TERMINAL (GFX_START_ROCKSSP + 11 * SP_PER_LINE + 8)
#define GFX2_SP_TERMINAL_ACTIVE (GFX_START_ROCKSSP + 12 * SP_PER_LINE + 8)
+#define GFX_SP_MURPHY_CLONE (GFX_START_ROCKSSP + 0 * SP_PER_LINE + 3)
+
/* graphics from "RocksDC" */
#define GFX_BELT1_MIDDLE (GFX_START_ROCKSDC + 0 * DC_PER_LINE + 0)
#define GFX_BELT1_LEFT (GFX_START_ROCKSDC + 1 * DC_PER_LINE + 0)
#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
#define MV_UP (1 << 2)
#define MV_DOWN (1 << 3)
+#if 0
/* font types */
#define FS_SMALL 0
#define FS_BIG 1
#define FC_SPECIAL1 4
#define FC_SPECIAL2 5
#define FC_SPECIAL3 6
+#endif
/* values for game_status */
#define EXITGAME 0
#define TAPES_DIRECTORY "tapes"
#define SCORES_DIRECTORY "scores"
-#define PROGRAM_VERSION_STRING "1.3.5"
+#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 X11_ICON_FILENAME "rocks_icon.xbm"
+#define X11_ICONMASK_FILENAME "rocks_iconmask.xbm"
+#define MSDOS_POINTER_FILENAME "mouse.pcx"
/* default name for empty highscore entry */
#define EMPTY_PLAYER_NAME "no name"
#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
+#if 0
/* values for redraw_mask */
#define REDRAW_ALL (1 << 0)
#define REDRAW_FIELD (1 << 1)
#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 */
+/* areas in bitmap PIX_DOOR */
/* meaning in PIX_DB_DOOR: (3 PAGEs)
PAGEX1: 1. buffer for DOOR_1
PAGEX2: 2. buffer for DOOR_1