#include <X11/keysymdef.h>
#ifdef XPM_INCLUDE_FILE
+#define USE_XPM_LIBRARY
#include XPM_INCLUDE_FILE
#endif
-#else
+#else /* MSDOS */
#include "msdos.h"
-#endif /* #ifndef MSDOS */
+#endif /* MSDOS */
+
+#ifdef DEBUG
+#define DEBUG_TIMING 0
+#endif
typedef unsigned char boolean;
typedef unsigned char byte;
#ifndef MSDOS
#define WIN_XPOS 0
#define WIN_YPOS 0
-#else
+#else /* MSDOS */
#define WIN_XPOS ((XRES - WIN_XSIZE) / 2)
#define WIN_YPOS ((YRES - WIN_YSIZE) / 2)
-#endif
+#endif /* MSDOS */
#define SCR_FIELDX 17
#define SCR_FIELDY 17
#define MAX_BUF_XSIZE (SCR_FIELDX + 2)
#ifndef SIGN
#define SIGN(a) ((a) < 0 ? -1 : ((a)>0 ? 1 : 0))
#endif
+
#define SCREENX(a) ((a) - scroll_x)
#define SCREENY(a) ((a) - scroll_y)
#define LEVELX(a) ((a) + scroll_x)
#define MAX_LEVNAMLEN 32
#define MAX_LEVSCORE_ENTRIES 16
#define NUM_FREE_LVHD_BYTES 18
-#define MAX_TAPELEN 10000
+#define MAX_TAPELEN (1000 * 50) /* max. time * framerate */
#define MAX_LEVDIR_FILENAME (64+1)
#define MAX_LEVDIR_NAME (16+1)
-#define MAX_LEVDIR_ENTRIES 15
-#define MAX_SCORE_ENTRIES 15
+#define MAX_LEVDIR_ENTRIES 100
+#define MAX_SCORE_ENTRIES 100
+#define MAX_VISIBLE_ENTRIES 15
#define MAX_OPTION_LEN 256
#define MAX_FILENAME_LEN 256
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
{
- boolean sound_on;
- boolean sound_loops_on;
- boolean sound_music_on;
- boolean sound_simple_on;
- boolean toons_on;
- boolean direct_draw_on;
- boolean scroll_delay_on;
- boolean soft_scrolling_on;
- boolean fading_on;
- boolean autorecord_on;
+ 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;
- int joystick_nr;
+ boolean team_mode;
+
+ struct SetupInputInfo input[MAX_PLAYERS];
+};
+
+struct SetupFileList
+{
+ char *token;
+ char *value;
+ struct SetupFileList *next;
};
struct PlayerInfo
{
boolean present; /* player present in level playfield */
- boolean connected; /* player connected locally or via network */
- boolean local; /* player connected locally */
+ boolean connected; /* player connected (locally or via network) */
boolean active; /* player (present && connected) */
int index_nr, client_nr, element_nr;
- char login_name[MAX_NAMELEN];
- char alias_name[MAX_NAMELEN];
- int handicap;
- unsigned int setup;
- int leveldir_nr;
- int level_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;
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
} pos[MAX_TAPELEN];
};
-struct JoystickInfo
-{
- int xleft, xright, xmiddle;
- int yupper, ylower, ymiddle;
-};
-
extern Display *display;
extern Visual *visual;
extern int screen;
extern Pixmap pix[];
extern Pixmap clipmask[], tile_clipmask[];
-#ifdef XPM_INCLUDE_FILE
+#ifdef USE_XPM_LIBRARY
extern XpmAttributes xpm_att[];
#endif
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 char *joystick_device_name[];
extern char *program_name;
extern int FX,FY, ScrollStepSize;
extern int ScreenMovDir, ScreenMovPos, ScreenGfxPos;
-extern int GameFrameDelay, MoveSpeed;
+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 byte network_player_action[];
extern boolean network_player_action_received;
extern int TestPlayer;
extern struct LevelDirInfo leveldir[];
extern struct LevelInfo level;
-extern struct PlayerInfo stored_player[];
-extern struct PlayerInfo *local_player;
+extern struct PlayerInfo stored_player[], *local_player;
extern struct HiScore highscore[];
extern struct RecordingInfo tape;
extern struct SoundInfo Sound[];
extern struct JoystickInfo joystick[];
-struct OptionInfo options;
-struct SetupInfo setup;
+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[];
(s)==SND_TYGER || (s)==SND_VOYAGER || \
(s)==SND_TWILIGHT)
+/* 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 TYPENAME 5
#define HALLOFFAME 6
#define SETUP 7
-#define EXITGAME 8
+#define SETUPINPUT 8
+#define EXITGAME 9
/* values for game_emulation */
#define EMU_NONE 0
#define EMU_BOULDERDASH 1
#define EMU_SOKOBAN 2
-
#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"
#ifndef MSDOS
-#define SCORE_FILENAME "ROCKS.score"
-#define NAMES_FILENAME "ROCKS.names"
-#define LEVDIR_FILENAME "ROCKS.levelinfo"
-#define JOYDAT_FILENAME "ROCKS.joystick"
+#define USERDATA_DIRECTORY ".rocksndiamonds"
+#define SETUP_FILENAME "setup.conf"
+#define LEVELSETUP_FILENAME "levelsetup.conf"
+#define LEVELINFO_FILENAME "levelinfo.conf"
+#define TAPEFILE_EXTENSION "tape"
+#define SCOREFILE_EXTENSION "score"
#else
-#define SCORE_FILENAME "ROCKS.sco"
-#define NAMES_FILENAME "ROCKS.nam"
-#define LEVDIR_FILENAME "ROCKS.lev"
-#define JOYDAT_FILENAME "ROCKS.joy"
+#define USERDATA_DIRECTORY "userdata"
+#define SETUP_FILENAME "setup.cnf"
+#define LEVELSETUP_FILENAME "lvlsetup.cnf"
+#define LEVELINFO_FILENAME "lvlinfo.cnf"
+#define TAPEFILE_EXTENSION "rec"
+#define SCOREFILE_EXTENSION "sco"
#endif
-#define JOYDAT_FILE JOYDAT_PATH "/" JOYDAT_FILENAME
-
-#define LEVEL_PERMS (S_IRUSR|S_IWUSR | S_IRGRP|S_IWGRP | S_IROTH|S_IWOTH)
+#define MODE_R_ALL (S_IRUSR | S_IRGRP | S_IROTH)
+#define MODE_W_ALL (S_IWUSR | S_IWGRP | S_IWOTH)
+#define MODE_X_ALL (S_IXUSR | S_IXGRP | S_IXOTH)
+#define USERDATA_DIR_MODE (MODE_R_ALL | MODE_X_ALL | S_IWUSR)
+#define LEVEL_PERMS (MODE_R_ALL | MODE_W_ALL)
#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
+#define SETUP_PERMS LEVEL_PERMS
/* 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 SCORE_COOKIE "ROCKSNDIAMONDS_SCORE_FILE_VERSION_1.2"
#define LEVELREC_COOKIE "ROCKSNDIAMONDS_LEVELREC_FILE_VERSION_1.2"
-#define JOYSTICK_COOKIE "ROCKSNDIAMONDS_JOYSTICK_FILE_VERSION_1.0"
+#define SETUP_COOKIE "ROCKSNDIAMONDS_SETUP_FILE_VERSION_1.2"
+#define LEVELSETUP_COOKIE "ROCKSNDIAMONDS_LEVELSETUP_FILE_VERSION_1.2"
+#define LEVELINFO_COOKIE "ROCKSNDIAMONDS_LEVELINFO_FILE_VERSION_1.2"
+
#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 SETUP_COOKIE_LEN (strlen(SETUP_COOKIE)+1)
+#define LEVELSETUP_COOKIE_LEN (strlen(LEVELSETUP_COOKIE)+1)
+#define LEVELINFO_COOKIE_LEN (strlen(LEVELINFO_COOKIE)+1)
-#define VERSION_STRING "1.2"
+#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-98 by Holger Schemel"
#define ANIM_OSCILLATE 1
#define ANIM_REVERSE 2
-#endif
+#endif /* MAIN_H */