rnd-19981202-1
[rocksndiamonds.git] / src / main.h
index ef8ee9cd6027b7e1793f94eb52cd82884c1c02ce..4dc5883b60e36dea7af94eca4275150c9ac543a5 100644 (file)
@@ -17,9 +17,9 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
-#include <errno.h>
 #include <sys/types.h>
 #include <sys/stat.h>
+#include <errno.h>
 
 #ifndef MSDOS
 #define XK_MISCELLANY
@@ -48,8 +48,8 @@ typedef unsigned char boolean;
 typedef unsigned char byte;
 
 #ifndef FALSE
-#define FALSE 0
-#define TRUE (!FALSE)
+#define FALSE          0
+#define TRUE           (!FALSE)
 #endif
 
 #define WIN_XSIZE      672
@@ -191,21 +191,19 @@ typedef unsigned char byte;
 
 /* boundaries of arrays etc. */
 #define MAX_NAMELEN            (10+1)
-
 #define MAX_LEVNAMLEN          32
-#define MAX_LEVSCORE_ENTRIES   16
-#define NUM_FREE_LVHD_BYTES    18
 #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_LEVDIR_ENTRIES     100
 #define MAX_SCORE_ENTRIES      100
-
-#define MAX_OPTION_LEN         256
-#define MAX_FILENAME_LEN       256
-#define MAX_NUM_AMOEBA         100
 #define MAX_ELEMENTS           512
+#define MAX_NUM_AMOEBA         100
+
+#define LEVEL_SCORE_ELEMENTS   16      /* level elements with score */
+
+/* fundamental game speed values */
+#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)
 
 struct HiScore
 {
@@ -329,7 +327,7 @@ struct LevelInfo
   int time;
   int edelsteine;
   char name[MAX_LEVNAMLEN];
-  int score[MAX_LEVSCORE_ENTRIES];
+  int score[LEVEL_SCORE_ELEMENTS];
   int mampfer_inhalt[4][3][3];
   int tempo_amoebe;
   int dauer_sieb;
@@ -347,7 +345,7 @@ struct LevelDirInfo
   boolean readonly;
 };
 
-struct RecordingInfo
+struct TapeInfo
 {
   int level_nr;
   unsigned long random_seed;
@@ -360,6 +358,7 @@ struct RecordingInfo
   boolean recording, playing, pausing;
   boolean fast_forward;
   boolean changed;
+  boolean player_participates[MAX_PLAYERS];
   struct
   {
     byte action[MAX_PLAYERS];
@@ -387,12 +386,10 @@ extern int                sound_device;
 extern char           *sound_device_name;
 extern int             joystick_device;
 extern char           *joystick_device_name[];
-extern int                     width, height;
 
 extern char           *program_name;
 
 extern int             game_status;
-extern int             game_emulation;
 extern boolean         network_playing;
 extern int             button_status;
 extern boolean         motion_status;
@@ -436,13 +433,12 @@ extern int                FrameCounter, TimeFrames, TimeLeft;
 extern int             MampferNr, SiebAktiv;
 
 extern boolean         network_player_action_received;
-extern int             TestPlayer;
 
 extern struct LevelDirInfo     leveldir[];
 extern struct LevelInfo                level;
 extern struct PlayerInfo       stored_player[], *local_player;
 extern struct HiScore          highscore[];
-extern struct RecordingInfo    tape;
+extern struct TapeInfo         tape;
 extern struct SoundInfo                Sound[];
 extern struct JoystickInfo     joystick[];
 extern struct OptionInfo       options;
@@ -953,19 +949,6 @@ extern int         num_bg_loops;
 #define GFX_CHAR_COPY          (GFX_CHAR_ASCII0+94)
 #define GFX_CHAR_END           (GFX_CHAR_START+79)
 
-/* score for elements */
-#define SC_EDELSTEIN           0
-#define SC_DIAMANT             1
-#define SC_KAEFER              2
-#define SC_FLIEGER             3
-#define SC_MAMPFER             4
-#define SC_ROBOT               5
-#define SC_PACMAN              6
-#define SC_KOKOSNUSS           7
-#define SC_DYNAMIT             8
-#define SC_SCHLUESSEL          9
-#define SC_ZEITBONUS           10
-
 /* the names of the sounds */
 #define SND_ALCHEMY            0
 #define SND_AMOEBE             1
@@ -1022,13 +1005,6 @@ extern int               num_bg_loops;
 
 #define NUM_SOUNDS             52
 
-#define IS_LOOP_SOUND(s)       ((s)==SND_KLAPPER || (s)==SND_ROEHR ||  \
-                                (s)==SND_NJAM || (s)==SND_MIEP)
-#define IS_MUSIC_SOUND(s)      ((s)==SND_ALCHEMY || (s)==SND_CHASE || \
-                                (s)==SND_NETWORK || (s)==SND_CZARDASZ || \
-                                (s)==SND_TYGER || (s)==SND_VOYAGER || \
-                                (s)==SND_TWILIGHT)
-
 /* default input keys */
 #define KEY_UNDEFINDED         XK_VoidSymbol
 #define DEFAULT_KEY_LEFT       XK_Left
@@ -1059,21 +1035,17 @@ extern int              num_bg_loops;
 #define FC_SPECIAL2            5
 
 /* values for game_status */
-#define MAINMENU               0
-#define PLAYING                        1
-#define LEVELED                        2
-#define HELPSCREEN             3
-#define CHOOSELEVEL            4
-#define TYPENAME               5
-#define HALLOFFAME             6
-#define SETUP                  7
-#define SETUPINPUT             8
-#define EXITGAME               9
-
-/* values for game_emulation */
-#define EMU_NONE               0
-#define EMU_BOULDERDASH                1
-#define EMU_SOKOBAN            2
+#define EXITGAME               0
+#define MAINMENU               1
+#define PLAYING                        2
+#define LEVELED                        3
+#define HELPSCREEN             4
+#define CHOOSELEVEL            5
+#define TYPENAME               6
+#define HALLOFFAME             7
+#define SETUP                  8
+#define SETUPINPUT             9
+#define CALIBRATION            10
 
 #ifndef GAME_DIR
 #define GAME_DIR               "."
@@ -1087,62 +1059,13 @@ extern int              num_bg_loops;
 #define TAPES_DIRECTORY                "tapes"
 #define SCORES_DIRECTORY       "scores"
 
-#ifndef MSDOS
-#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 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 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 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.2"
-#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 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 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 preview 1"
 #define GAMETITLE_STRING       "Rocks'n'Diamonds"
 #define WINDOWTITLE_STRING     GAMETITLE_STRING " " VERSION_STRING
 #define COPYRIGHT_STRING       "Copyright ^1995-98 by Holger Schemel"
 
-/* Leerer Login- und Alias-Name */
-#define EMPTY_LOGIN            "NO_LOGIN"
-#define EMPTY_ALIAS            "NO_NAME"
+/* default name for empty highscore entry */
+#define EMPTY_PLAYER_NAME      "no name"
 
 /* values for button_status */
 #define MB_NOT_PRESSED         FALSE
@@ -1160,11 +1083,6 @@ extern int               num_bg_loops;
 #define MB_RIGHT               3
 #endif
 
-/* values for key_status */
-#define KEY_NOT_PRESSED                FALSE
-#define KEY_RELEASED           FALSE
-#define KEY_PRESSED            TRUE
-
 /* values for redraw_mask */
 #define REDRAW_ALL             (1L<<0)
 #define REDRAW_FIELD           (1L<<1)
@@ -1180,51 +1098,24 @@ extern int              num_bg_loops;
 #define REDRAW_MAIN    (REDRAW_FIELD | REDRAW_TILES | REDRAW_MICROLEV)
 #define REDRAWTILES_THRESHOLD  SCR_FIELDX*SCR_FIELDY/2
 
-/* positions in the game control window */
-#define XX_LEVEL               37
-#define YY_LEVEL               20
-#define XX_EMERALDS            29
-#define YY_EMERALDS            54
-#define XX_DYNAMITE            29
-#define YY_DYNAMITE            89
-#define XX_KEYS                        18
-#define YY_KEYS                        123
-#define XX_SCORE               15
-#define YY_SCORE               159
-#define XX_TIME                        29
-#define YY_TIME                        194
-
-#define DX_LEVEL               (DX+XX_LEVEL)
-#define DY_LEVEL               (DY+YY_LEVEL)
-#define DX_EMERALDS            (DX+XX_EMERALDS)
-#define DY_EMERALDS            (DY+YY_EMERALDS)
-#define DX_DYNAMITE            (DX+XX_DYNAMITE)
-#define DY_DYNAMITE            (DY+YY_DYNAMITE)
-#define DX_KEYS                        (DX+XX_KEYS)
-#define DY_KEYS                        (DY+YY_KEYS)
-#define DX_SCORE               (DX+XX_SCORE)
-#define DY_SCORE               (DY+YY_SCORE)
-#define DX_TIME                        (DX+XX_TIME)
-#define DY_TIME                        (DY+YY_TIME)
-
-/* Felder in PIX_DOOR */
-/* Bedeutung in PIX_DB_DOOR: (3 PAGEs)
-   PAGEX1: 1. Zwischenspeicher für DOOR_1
-   PAGEX2: 2. Zwischenspeicher für DOOR_1
-   PAGEX3: Pufferspeicher für Animationen
+/* areas in pixmap PIX_DOOR */
+/* meaning in PIX_DB_DOOR: (3 PAGEs)
+   PAGEX1: 1. buffer for DOOR_1
+   PAGEX2: 2. buffer for DOOR_1
+   PAGEX3: buffer for animations
 */
 
 #define DOOR_GFX_PAGESIZE      DXSIZE
-#define DOOR_GFX_PAGEX1                (0*DOOR_GFX_PAGESIZE)
-#define DOOR_GFX_PAGEX2                (1*DOOR_GFX_PAGESIZE)
-#define DOOR_GFX_PAGEX3                (2*DOOR_GFX_PAGESIZE)
-#define DOOR_GFX_PAGEX4                (3*DOOR_GFX_PAGESIZE)
-#define DOOR_GFX_PAGEX5                (4*DOOR_GFX_PAGESIZE)
-#define DOOR_GFX_PAGEX6                (5*DOOR_GFX_PAGESIZE)
+#define DOOR_GFX_PAGEX1                (0 * DOOR_GFX_PAGESIZE)
+#define DOOR_GFX_PAGEX2                (1 * DOOR_GFX_PAGESIZE)
+#define DOOR_GFX_PAGEX3                (2 * DOOR_GFX_PAGESIZE)
+#define DOOR_GFX_PAGEX4                (3 * DOOR_GFX_PAGESIZE)
+#define DOOR_GFX_PAGEX5                (4 * DOOR_GFX_PAGESIZE)
+#define DOOR_GFX_PAGEX6                (5 * DOOR_GFX_PAGESIZE)
 #define DOOR_GFX_PAGEY1                0
 #define DOOR_GFX_PAGEY2                DYSIZE
 
-/* für DrawGraphicAnimation (tools.c) und AnimateToon (cartoons.c) */
+/* for DrawGraphicAnimation() [tools.c] and AnimateToon() [cartoons.c] */
 #define ANIM_NORMAL    0
 #define ANIM_OSCILLATE 1
 #define ANIM_REVERSE   2