rnd-19981108-1
[rocksndiamonds.git] / src / main.h
index 7fa6425715a497943e05c9b05b4c8354bd274928..d63a289f8d141d83561545651315f96c13ed81cd 100644 (file)
@@ -35,9 +35,9 @@
 #ifdef   XPM_INCLUDE_FILE
 #include XPM_INCLUDE_FILE
 #endif
-#else
+#else  /* MSDOS */
 #include "msdos.h"
-#endif  /* #ifndef MSDOS */
+#endif  /* MSDOS */
 
 typedef unsigned char boolean;
 typedef unsigned char byte;
@@ -52,10 +52,10 @@ 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)
@@ -82,6 +82,7 @@ typedef unsigned char byte;
 #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)
@@ -217,6 +218,15 @@ struct OptionInfo
   boolean verbose;
 };
 
+struct SetupJoystickInfo
+{
+  char device_name[MAX_FILENAME_LEN];
+  int xleft, xmiddle, xright;
+  int yupper, ymiddle, ylower;
+  int snap;
+  int bomb;
+};
+
 struct SetupKeyboardInfo
 {
   KeySym left;
@@ -227,46 +237,56 @@ struct SetupKeyboardInfo
   KeySym bomb;
 };
 
-struct SetupJoystickInfo
+struct SetupInputInfo
 {
   boolean use_joystick;
-  int joystick_nr;
-  int button_snap;
-  int button_bomb;
+  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;
+  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;
-  struct SetupKeyboardInfo key_input[MAX_PLAYERS];
-  struct SetupJoystickInfo joy_input[MAX_PLAYERS];
+  boolean team_mode;
+
+  char login_name[MAX_NAMELEN];
+  char alias_name[MAX_NAMELEN];
+
+  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;
@@ -339,12 +359,6 @@ struct RecordingInfo
   } pos[MAX_TAPELEN];
 };
 
-struct JoystickInfo
-{
-  int xleft, xright, xmiddle;
-  int yupper, ylower, ymiddle;
-};
-
 extern Display        *display;
 extern Visual         *visual;
 extern int             screen;
@@ -364,7 +378,7 @@ 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           *joystick_device_name[];
 extern char           *level_directory;
 extern int                     width, height;
 
@@ -414,7 +428,6 @@ 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;
 
@@ -427,6 +440,8 @@ 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[];
@@ -1008,12 +1023,15 @@ extern int              num_bg_loops;
                                 (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
@@ -1042,7 +1060,8 @@ extern int                num_bg_loops;
 #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
@@ -1075,27 +1094,43 @@ extern int              num_bg_loops;
 #ifndef JOYDAT_PATH
 #define JOYDAT_PATH            GAME_DIR
 #endif
+#ifndef SETUP_PATH
+#define SETUP_PATH             GAME_DIR
+#endif
 
 #ifndef MSDOS
+#define USERDATA_DIRECTORY     ".rocksndiamonds"
+#define TAPEDATA_DIRECTORY     "tapes"
 #define SCORE_FILENAME         "ROCKS.score"
-#define NAMES_FILENAME         "ROCKS.names"
 #define LEVDIR_FILENAME                "ROCKS.levelinfo"
 #define JOYDAT_FILENAME                "ROCKS.joystick"
+#define SETUP_FILENAME         "setup"
+#define LEVELSETUP_FILENAME    "setup.level"
+#define TAPEFILE_EXTENSION     "tape"
 #else
+#define USERDATA_DIRECTORY     "userdata"
+#define TAPEDATA_DIRECTORY     "tapes"
 #define SCORE_FILENAME         "ROCKS.sco"
-#define NAMES_FILENAME         "ROCKS.nam"
 #define LEVDIR_FILENAME                "ROCKS.lev"
 #define JOYDAT_FILENAME                "ROCKS.joy"
+#define SETUP_FILENAME         "setup"
+#define LEVELSETUP_FILENAME    "setup.lev"
+#define TAPEFILE_EXTENSION     "rec"
 #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"
@@ -1107,14 +1142,18 @@ extern int              num_bg_loops;
 #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 LEVELSETUP_COOKIE      "ROCKSNDIAMONDS_LEVELSETUP_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 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"
@@ -1208,4 +1247,4 @@ extern int                num_bg_loops;
 #define ANIM_OSCILLATE 1
 #define ANIM_REVERSE   2
 
-#endif
+#endif /* MAIN_H */