(b) <= MB_WHEEL_DOWN)
#define DEFAULT_WHEEL_STEPS 3
+#define BUTTON_STEPSIZE(b) ((b) == MB_LEFTBUTTON ? 1 : \
+ (b) == MB_MIDDLEBUTTON ? 5 : \
+ (b) == MB_RIGHTBUTTON ? 10 : 1)
+
/* values for move directions */
#define MV_BIT_LEFT 0
#define MV_BIT_RIGHT 1
#define REDRAW_NONE (0)
#define REDRAW_ALL (1 << 0)
#define REDRAW_FIELD (1 << 1)
-#define REDRAW_TILES (1 << 2)
-#define REDRAW_DOOR_1 (1 << 3)
-#define REDRAW_VIDEO_1 (1 << 4)
-#define REDRAW_VIDEO_2 (1 << 5)
-#define REDRAW_VIDEO_3 (1 << 6)
-#define REDRAW_MICROLEVEL (1 << 7)
-#define REDRAW_MICROLABEL (1 << 8)
-#define REDRAW_FROM_BACKBUFFER (1 << 9)
-#define REDRAW_DOOR_2 (REDRAW_VIDEO_1 | \
- REDRAW_VIDEO_2 | \
- REDRAW_VIDEO_3)
-#define REDRAW_DOOR_3 (1 << 10)
+#define REDRAW_DOOR_1 (1 << 2)
+#define REDRAW_DOOR_2 (1 << 3)
+#define REDRAW_DOOR_3 (1 << 4)
+#define REDRAW_FPS (1 << 5)
+
#define REDRAW_DOORS (REDRAW_DOOR_1 | \
REDRAW_DOOR_2 | \
REDRAW_DOOR_3)
-#define REDRAW_MAIN (REDRAW_FIELD | \
- REDRAW_TILES | \
- REDRAW_MICROLEVEL)
-#define REDRAW_FPS (1 << 11)
-
-/* on modern graphics systems and when using the SDL target, the old tile redraw
- optimization can slow things down a lot due to many small blits compared to
- one single playfield-sized blit (especially observed on Mac OS X with SDL) */
-#define REDRAWTILES_THRESHOLD 0
#define IN_GFX_FIELD_PLAY(x, y) (x >= gfx.sx && x < gfx.sx + gfx.sxsize && \
y >= gfx.sy && y < gfx.sy + gfx.sysize)
/* default value for undefined filename */
#define UNDEFINED_FILENAME "[NONE]"
+/* default value for undefined levelset */
+#define UNDEFINED_LEVELSET "[NONE]"
+
/* default value for undefined parameter */
#define ARG_DEFAULT "[DEFAULT]"
#define SND_CLASSIC_SUBDIR "snd_classic"
#define MUS_CLASSIC_SUBDIR "mus_classic"
-#if defined(CREATE_SPECIAL_EDITION_RND_JUE)
-#define GFX_DEFAULT_SUBDIR "jue0"
-#define SND_DEFAULT_SUBDIR "jue0"
-#define MUS_DEFAULT_SUBDIR "jue0"
-#else
-#define GFX_DEFAULT_SUBDIR GFX_CLASSIC_SUBDIR
-#define SND_DEFAULT_SUBDIR SND_CLASSIC_SUBDIR
-#define MUS_DEFAULT_SUBDIR MUS_CLASSIC_SUBDIR
-#endif
+#define GFX_DEFAULT_SUBDIR (setup.internal.default_graphics_set)
+#define SND_DEFAULT_SUBDIR (setup.internal.default_sounds_set)
+#define MUS_DEFAULT_SUBDIR (setup.internal.default_music_set)
-#if defined(CREATE_SPECIAL_EDITION)
-#define GFX_FALLBACK_FILENAME "fallback.pcx"
-#define SND_FALLBACK_FILENAME "fallback.wav"
-#define MUS_FALLBACK_FILENAME "fallback.wav"
-#endif
+#define GFX_FALLBACK_FILENAME (setup.internal.fallback_graphics_file)
+#define SND_FALLBACK_FILENAME (setup.internal.fallback_sounds_file)
+#define MUS_FALLBACK_FILENAME (setup.internal.fallback_music_file)
+
+#define DEFAULT_LEVELSET (setup.internal.default_level_series)
/* file names and filename extensions */
#define LEVELSETUP_DIRECTORY "levelsetup"
#define TAPEFILE_EXTENSION "tape"
#define SCOREFILE_EXTENSION "score"
-#define ERROR_BASENAME "stderr.txt"
+#define LOG_OUT_BASENAME "stdout.txt"
+#define LOG_ERR_BASENAME "stderr.txt"
+
+#define LOG_OUT_ID 0
+#define LOG_ERR_ID 1
+#define NUM_LOGS 2
+
+#define STRING_PARENT_DIRECTORY ".."
+#define STRING_TOP_DIRECTORY "/"
#define CHAR_PATH_SEPARATOR_UNIX '/'
#define CHAR_PATH_SEPARATOR_DOS '\\'
char *command_basepath; /* path to the program binary */
char *command_basename; /* base filename of the program binary */
+ char *config_filename; /* optional global program config filename */
+
char *maindata_path; /* main game data (installation) directory */
char *userdata_subdir; /* personal user game data directory */
char *window_title;
char *icon_title;
- char *sdl_icon_filename;
+ char *icon_filename;
char *cookie_prefix;
- char *error_filename; /* filename where to write error messages to */
- FILE *error_file; /* (used instead of 'stderr' on some systems) */
+ char *log_filename[NUM_LOGS]; /* log filenames for out/err messages */
+ FILE *log_file[NUM_LOGS]; /* log file handles for out/err files */
+ FILE *log_file_default[NUM_LOGS]; /* default log file handles (out/err) */
int version_major;
int version_minor;
boolean window_scaling_available;
int window_scaling_percent;
char *window_scaling_quality;
+
+ boolean initialized;
};
struct AudioSystemInfo
int anim_random_frame;
void (*draw_busy_anim_function)(void);
+
+ int cursor_mode;
};
struct JoystickInfo
int audio_fragment_size;
};
+struct SetupInternalInfo
+{
+ char *program_title;
+ char *program_author;
+ char *program_email;
+ char *program_website;
+ char *program_copyright;
+ char *program_company;
+
+ char *program_icon_file;
+
+ char *default_graphics_set;
+ char *default_sounds_set;
+ char *default_music_set;
+
+ char *fallback_graphics_file;
+ char *fallback_sounds_file;
+ char *fallback_music_file;
+
+ char *default_level_series;
+
+ boolean choose_from_top_leveldir;
+};
+
struct SetupInfo
{
char *player_name;
boolean toons;
boolean scroll_delay;
boolean scroll_delay_value;
- boolean soft_scrolling;
+ char *engine_snapshot_mode;
boolean fade_screens;
boolean autorecord;
boolean show_titlescreen;
struct SetupInputInfo input[MAX_PLAYERS];
struct SetupTouchInfo touch;
struct SetupSystemInfo system;
+ struct SetupInternalInfo internal;
struct OptionInfo options;
};
#endif
extern int redraw_mask;
-extern int redraw_tiles;
extern int FrameCounter;
/* function definitions */
void InitProgramInfo(char *, char *, char *, char *, char *, char *, char *,
- int);
+ char *, int);
void SetWindowTitle();
void InitGfxClipRegion(boolean, int, int, int, int);
void InitGfxDrawBusyAnimFunction(void (*draw_busy_anim_function)(void));
void InitGfxCustomArtworkInfo();
+void InitGfxOtherSettings();
void SetDrawDeactivationMask(int);
void SetDrawBackgroundMask(int);
void SetWindowBackgroundBitmap(Bitmap *);
void KeyboardAutoRepeatOn(void);
void KeyboardAutoRepeatOff(void);
-boolean PointerInWindow(DrawWindow *);
boolean SetVideoMode(boolean);
boolean ChangeVideoModeIfNeeded(boolean);