#include "msdos.h"
#endif /* #ifndef MSDOS */
-typedef int BOOL;
+typedef unsigned char boolean;
typedef unsigned char byte;
#ifndef FALSE
int Score;
};
+struct OptionInfo
+{
+ char *display_name;
+ char *server_host;
+ int server_port;
+ boolean serveronly;
+ boolean network;
+ boolean verbose;
+};
+
+struct SetupJoystickInfo
+{
+ int snap;
+ int bomb;
+};
+
+struct SetupKeyboardInfo
+{
+ KeySym left;
+ KeySym right;
+ KeySym up;
+ KeySym down;
+ KeySym snap;
+ KeySym bomb;
+};
+
+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;
+ boolean quick_doors;
+ struct
+ {
+ boolean use_joystick;
+ int joystick_nr;
+ struct SetupJoystickInfo joy;
+ struct SetupKeyboardInfo key;
+ } input[MAX_PLAYERS];
+};
+
+struct SetupFileInfo
+{
+ char *token;
+ char *value;
+ struct SetupFileInfo *next;
+};
+
struct PlayerInfo
{
- int active, local;
+ boolean present; /* player present in level playfield */
+ boolean connected; /* player connected locally or via network */
+ boolean local; /* player connected locally */
+ boolean active; /* player (present && connected) */
+
int index_nr, client_nr, element_nr;
+ byte action;
+
char login_name[MAX_NAMELEN];
char alias_name[MAX_NAMELEN];
int handicap;
int jx,jy, last_jx,last_jy;
int MovDir, MovPos, GfxPos;
- int Pushing, Frame;
-
- int gone, LevelSolved, GameOver;
-
- long actual_frame_counter;
+ int Frame;
- int frame_reset_delay;
+ boolean Pushing;
+ boolean gone, LevelSolved, GameOver;
+ boolean snapped;
long move_delay;
int last_move_dir;
long push_delay;
int push_delay_value;
- int snapped;
+ int frame_reset_delay;
+
+ long actual_frame_counter;
int score;
int gems_still_needed;
unsigned long length;
unsigned long length_seconds;
unsigned int delay_played;
- BOOL pause_before_death;
- BOOL recording, playing, pausing;
- BOOL fast_forward;
- BOOL changed;
+ boolean pause_before_death;
+ boolean recording, playing, pausing;
+ boolean fast_forward;
+ boolean changed;
struct
{
byte action[MAX_PLAYERS];
extern int width, height;
extern char *program_name;
-extern char *display_name;
-extern char *server_host;
-extern int server_port;
-extern int serveronly;
-extern int network;
-extern int verbose;
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 soft_scrolling_on;
-extern int fading_on;
-extern int autorecord_on;
-extern int joystick_nr;
-extern int quick_doors;
-
-extern BOOL redraw[MAX_BUF_XSIZE][MAX_BUF_YSIZE];
+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 StorePlayer[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 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 BOOL network_player_action_received;
+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[];
+extern struct OptionInfo options;
+extern struct SetupInfo setup;
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
#ifndef JOYDAT_PATH
#define JOYDAT_PATH GAME_DIR
#endif
+#ifndef SETUP_PATH
+#define SETUP_PATH GAME_DIR
+#endif
#ifndef MSDOS
#define SCORE_FILENAME "ROCKS.score"
#define NAMES_FILENAME "ROCKS.names"
#define LEVDIR_FILENAME "ROCKS.levelinfo"
#define JOYDAT_FILENAME "ROCKS.joystick"
+#define SETUP_FILENAME "ROCKS.setup"
#else
#define SCORE_FILENAME "ROCKS.sco"
#define NAMES_FILENAME "ROCKS.nam"
#define LEVDIR_FILENAME "ROCKS.lev"
#define JOYDAT_FILENAME "ROCKS.joy"
+#define SETUP_FILENAME "ROCKS.set"
#endif
#define JOYDAT_FILE JOYDAT_PATH "/" JOYDAT_FILENAME
#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 LEVELDIR_COOKIE "ROCKSNDIAMONDS_LEVELDIR_FILE_VERSION_1.0"
#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 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 VERSION_STRING "1.2"
#define GAMETITLE_STRING "Rocks'n'Diamonds"