rnd-20001203-4-src
[rocksndiamonds.git] / src / libgame / libgame.h
index fd613b9ce9cd97339d5f81743b838d4dc571c92e..e8956034534b13b741986acc5b26263d128b8135 100644 (file)
 #include "misc.h"
 
 
+/* default name for empty highscore entry */
+#define EMPTY_PLAYER_NAME      "no name"
+
+/* default name for unknown player names */
+#define ANONYMOUS_NAME         "anonymous"
+
+/* default name for new levels */
+#define NAMELESS_LEVEL_NAME    "nameless level"
+
+/* definitions for game sub-directories */
+#ifndef RO_GAME_DIR
+#define RO_GAME_DIR            "."
+#endif
+
+#ifndef RW_GAME_DIR
+#define RW_GAME_DIR            "."
+#endif
+
+#define RO_BASE_PATH           RO_GAME_DIR
+#define RW_BASE_PATH           RW_GAME_DIR
+
+#define GRAPHICS_DIRECTORY     "graphics"
+#define SOUNDS_DIRECTORY       "sounds"
+#define LEVELS_DIRECTORY       "levels"
+#define TAPES_DIRECTORY                "tapes"
+#define SCORES_DIRECTORY       "scores"
+
 /* areas in bitmap PIX_DOOR */
 /* meaning in PIX_DB_DOOR: (3 PAGEs)
    PAGEX1: 1. buffer for DOOR_1
 #define DOOR_GFX_PAGEY1                (0)
 #define DOOR_GFX_PAGEY2                (gfx.dysize)
 
+struct LevelDirInfo
+{
+  char *filename;      /* level series single directory name */
+  char *fullpath;      /* complete path relative to level directory */
+  char *basepath;      /* absolute base path of level directory */
+  char *name;          /* level series name, as displayed on main screen */
+  char *name_short;    /* optional short name for level selection screen */
+  char *name_sorting;  /* optional sorting name for correct level sorting */
+  char *author;                /* level series author name levels without author */
+  char *imported_from; /* optional comment for imported level series */
+  int levels;          /* number of levels in level series */
+  int first_level;     /* first level number (to allow start with 0 or 1) */
+  int last_level;      /* last level number (automatically calculated) */
+  int sort_priority;   /* sort levels by 'sort_priority' and then by name */
+  boolean level_group; /* directory contains more level series directories */
+  boolean parent_link; /* entry links back to parent directory */
+  boolean user_defined;        /* user defined levels are stored in home directory */
+  boolean readonly;    /* readonly levels can not be changed with editor */
+  int color;           /* color to use on selection screen for this level */
+  char *class_desc;    /* description of level series class */
+  int handicap_level;  /* number of the lowest unsolved level */
+  int cl_first;                /* internal control field for "choose level" screen */
+  int cl_cursor;       /* internal control field for "choose level" screen */
+
+  struct LevelDirInfo *node_parent;    /* parent level directory info */
+  struct LevelDirInfo *node_group;     /* level group sub-directory info */
+  struct LevelDirInfo *next;           /* next level series structure node */
+};
+
+
+/* ========================================================================= */
+/* exported variables                                                        */
+/* ========================================================================= */
+
+extern struct ProgramInfo      program;
+extern struct OptionInfo       options;
+extern struct VideoSystemInfo  video;
+extern struct AudioSystemInfo  audio;
+extern struct GfxInfo          gfx;
+
+extern struct LevelDirInfo     *leveldir_first;
+extern struct LevelDirInfo     *leveldir_current;
+
+extern Display        *display;
+extern Visual         *visual;
+extern int             screen;
+extern Colormap                cmap;
+
+extern DrawWindow      window;
+extern DrawBuffer      backbuffer;
+extern DrawBuffer      drawto;
+
+extern int             button_status;
+extern boolean         motion_status;
+
+extern int             redraw_mask;
+extern int             redraw_tiles;
+
+extern int             FrameCounter;
+
 #endif /* LIBGAME_H */