rnd-20001203-4-src
[rocksndiamonds.git] / src / libgame / libgame.h
1 /***********************************************************
2 *  Rocks'n'Diamonds -- McDuffin Strikes Back!              *
3 *----------------------------------------------------------*
4 *  (c) 1995-98 Artsoft Entertainment                       *
5 *              Holger Schemel                              *
6 *              Oststrasse 11a                              *
7 *              33604 Bielefeld                             *
8 *              phone: ++49 +521 290471                     *
9 *              email: aeglos@valinor.owl.de                *
10 *----------------------------------------------------------*
11 *  libgame.h                                               *
12 ***********************************************************/
13
14 #ifndef LIBGAME_H
15 #define LIBGAME_H
16
17 #include "platform.h"
18 #include "types.h"
19 #include "private.h"
20 #include "system.h"
21 #include "random.h"
22 #include "gadgets.h"
23 #include "text.h"
24 #include "sound.h"
25 #include "image.h"
26 #include "pcx.h"
27 #include "misc.h"
28
29
30 /* default name for empty highscore entry */
31 #define EMPTY_PLAYER_NAME       "no name"
32
33 /* default name for unknown player names */
34 #define ANONYMOUS_NAME          "anonymous"
35
36 /* default name for new levels */
37 #define NAMELESS_LEVEL_NAME     "nameless level"
38
39 /* definitions for game sub-directories */
40 #ifndef RO_GAME_DIR
41 #define RO_GAME_DIR             "."
42 #endif
43
44 #ifndef RW_GAME_DIR
45 #define RW_GAME_DIR             "."
46 #endif
47
48 #define RO_BASE_PATH            RO_GAME_DIR
49 #define RW_BASE_PATH            RW_GAME_DIR
50
51 #define GRAPHICS_DIRECTORY      "graphics"
52 #define SOUNDS_DIRECTORY        "sounds"
53 #define LEVELS_DIRECTORY        "levels"
54 #define TAPES_DIRECTORY         "tapes"
55 #define SCORES_DIRECTORY        "scores"
56
57 /* areas in bitmap PIX_DOOR */
58 /* meaning in PIX_DB_DOOR: (3 PAGEs)
59    PAGEX1: 1. buffer for DOOR_1
60    PAGEX2: 2. buffer for DOOR_1
61    PAGEX3: buffer for animations
62 */
63
64 #define DOOR_GFX_PAGESIZE       (gfx.dxsize)
65 #define DOOR_GFX_PAGEX1         (0 * DOOR_GFX_PAGESIZE)
66 #define DOOR_GFX_PAGEX2         (1 * DOOR_GFX_PAGESIZE)
67 #define DOOR_GFX_PAGEX3         (2 * DOOR_GFX_PAGESIZE)
68 #define DOOR_GFX_PAGEX4         (3 * DOOR_GFX_PAGESIZE)
69 #define DOOR_GFX_PAGEX5         (4 * DOOR_GFX_PAGESIZE)
70 #define DOOR_GFX_PAGEX6         (5 * DOOR_GFX_PAGESIZE)
71 #define DOOR_GFX_PAGEX7         (6 * DOOR_GFX_PAGESIZE)
72 #define DOOR_GFX_PAGEX8         (7 * DOOR_GFX_PAGESIZE)
73 #define DOOR_GFX_PAGEY1         (0)
74 #define DOOR_GFX_PAGEY2         (gfx.dysize)
75
76 struct LevelDirInfo
77 {
78   char *filename;       /* level series single directory name */
79   char *fullpath;       /* complete path relative to level directory */
80   char *basepath;       /* absolute base path of level directory */
81   char *name;           /* level series name, as displayed on main screen */
82   char *name_short;     /* optional short name for level selection screen */
83   char *name_sorting;   /* optional sorting name for correct level sorting */
84   char *author;         /* level series author name levels without author */
85   char *imported_from;  /* optional comment for imported level series */
86   int levels;           /* number of levels in level series */
87   int first_level;      /* first level number (to allow start with 0 or 1) */
88   int last_level;       /* last level number (automatically calculated) */
89   int sort_priority;    /* sort levels by 'sort_priority' and then by name */
90   boolean level_group;  /* directory contains more level series directories */
91   boolean parent_link;  /* entry links back to parent directory */
92   boolean user_defined; /* user defined levels are stored in home directory */
93   boolean readonly;     /* readonly levels can not be changed with editor */
94   int color;            /* color to use on selection screen for this level */
95   char *class_desc;     /* description of level series class */
96   int handicap_level;   /* number of the lowest unsolved level */
97   int cl_first;         /* internal control field for "choose level" screen */
98   int cl_cursor;        /* internal control field for "choose level" screen */
99
100   struct LevelDirInfo *node_parent;     /* parent level directory info */
101   struct LevelDirInfo *node_group;      /* level group sub-directory info */
102   struct LevelDirInfo *next;            /* next level series structure node */
103 };
104
105
106 /* ========================================================================= */
107 /* exported variables                                                        */
108 /* ========================================================================= */
109
110 extern struct ProgramInfo       program;
111 extern struct OptionInfo        options;
112 extern struct VideoSystemInfo   video;
113 extern struct AudioSystemInfo   audio;
114 extern struct GfxInfo           gfx;
115
116 extern struct LevelDirInfo     *leveldir_first;
117 extern struct LevelDirInfo     *leveldir_current;
118
119 extern Display         *display;
120 extern Visual          *visual;
121 extern int              screen;
122 extern Colormap         cmap;
123
124 extern DrawWindow       window;
125 extern DrawBuffer       backbuffer;
126 extern DrawBuffer       drawto;
127
128 extern int              button_status;
129 extern boolean          motion_status;
130
131 extern int              redraw_mask;
132 extern int              redraw_tiles;
133
134 extern int              FrameCounter;
135
136 #endif /* LIBGAME_H */