#define RW_BASE_PATH RW_GAME_DIR
#define GRAPHICS_DIRECTORY "graphics"
-#define MUSIC_DIRECTORY "music"
#define SOUNDS_DIRECTORY "sounds"
+#define MUSIC_DIRECTORY "music"
#define LEVELS_DIRECTORY "levels"
#define TAPES_DIRECTORY "tapes"
#define SCORES_DIRECTORY "scores"
+#if !defined(PLATFORM_MSDOS)
+#define GRAPHICS_SUBDIR "gfx_classic"
+#define SOUNDS_SUBDIR "snd_classic"
+#define MUSIC_SUBDIR "mus_classic"
+#else
+#define GRAPHICS_SUBDIR "gfx_orig"
+#define SOUNDS_SUBDIR "snd_orig"
+#define MUSIC_SUBDIR "mus_orig"
+#endif
+
/* areas in bitmap PIX_DOOR */
/* meaning in PIX_DB_DOOR: (3 PAGEs)
PAGEX1: 1. buffer for DOOR_1
boolean draw_deactivation_mask;
};
-struct ArtworkInfo
-{
- char *custom_artwork;
- char *custom_graphics;
- char *custom_sounds;
- char *custom_music;
-};
-
struct JoystickInfo
{
int status;
boolean handicap;
boolean time_limit;
boolean fullscreen;
+ boolean ask_on_escape;
+
+ char *graphics_set;
+ char *sounds_set;
+ char *music_set;
struct SetupShortcutInfo shortcut;
struct SetupInputInfo input[MAX_PLAYERS];
};
-struct LevelDirInfo
+#define TREE_TYPE_GENERIC 0
+#define TREE_TYPE_LEVEL_DIR 1
+#define TREE_TYPE_GRAPHICS_DIR 2
+#define TREE_TYPE_SOUNDS_DIR 3
+#define TREE_TYPE_MUSIC_DIR 4
+
+struct TreeInfo
{
+ struct TreeInfo **node_top; /* topmost node in tree */
+ struct TreeInfo *node_parent; /* parent level directory info */
+ struct TreeInfo *node_group; /* level group sub-directory info */
+ struct TreeInfo *next; /* next level series structure node */
+
+ int cl_first; /* internal control field for setup screen */
+ int cl_cursor; /* internal control field for setup screen */
+
+ int type; /* type of tree content */
+
+ /* fields for "type == TREE_TYPE_LEVEL_DIR" */
+
char *filename; /* level series single directory name */
char *fullpath; /* complete path relative to level directory */
char *basepath; /* absolute base path of level directory */
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 */
+};
+
+typedef struct TreeInfo TreeInfo;
+typedef struct TreeInfo LevelDirTree;
+typedef struct TreeInfo GraphicsDirTree;
+typedef struct TreeInfo SoundsDirTree;
+typedef struct TreeInfo MusicDirTree;
- 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 */
+struct ArtworkInfo
+{
+ GraphicsDirTree *gfx_first;
+ GraphicsDirTree *gfx_current;
+ SoundsDirTree *snd_first;
+ SoundsDirTree *snd_current;
+ MusicDirTree *mus_first;
+ MusicDirTree *mus_current;
+
+ char *graphics_set_current;
+ char *sounds_set_current;
+ char *music_set_current;
};
extern struct JoystickInfo joystick;
extern struct SetupInfo setup;
-extern struct LevelDirInfo *leveldir_first;
-extern struct LevelDirInfo *leveldir_current;
+extern LevelDirTree *leveldir_first;
+extern LevelDirTree *leveldir_current;
extern int level_nr;
extern Display *display;
Bitmap *LoadImage(char *);
Bitmap *LoadCustomImage(char *);
+void ReloadCustomImage(Bitmap *, char *);
inline void OpenAudio(void);
inline void CloseAudio(void);