/* the additional 'b' is needed for Win32 to open files in binary mode */
-#define MODE_READ "rb"
-#define MODE_WRITE "wb"
-#define MODE_APPEND "ab"
+#define MODE_READ "rb"
+#define MODE_WRITE "wb"
+#define MODE_APPEND "ab"
-#define DEFAULT_DEPTH 0
+#define DEFAULT_DEPTH 0
-#define BLIT_OPAQUE 0
-#define BLIT_MASKED 1
-#define BLIT_INVERSE 2
-#define BLIT_ON_BACKGROUND 3
+#define BLIT_OPAQUE 0
+#define BLIT_MASKED 1
+#define BLIT_INVERSE 2
+#define BLIT_ON_BACKGROUND 3
-#define FULLSCREEN_NOT_AVAILABLE FALSE
-#define FULLSCREEN_AVAILABLE TRUE
+#define FULLSCREEN_NOT_AVAILABLE FALSE
+#define FULLSCREEN_AVAILABLE TRUE
/* default input keys */
-#define DEFAULT_KEY_LEFT KSYM_Left
-#define DEFAULT_KEY_RIGHT KSYM_Right
-#define DEFAULT_KEY_UP KSYM_Up
-#define DEFAULT_KEY_DOWN KSYM_Down
+#define DEFAULT_KEY_LEFT KSYM_Left
+#define DEFAULT_KEY_RIGHT KSYM_Right
+#define DEFAULT_KEY_UP KSYM_Up
+#define DEFAULT_KEY_DOWN KSYM_Down
#if defined(PLATFORM_MACOSX)
-#define DEFAULT_KEY_SNAP KSYM_Control_L
-#define DEFAULT_KEY_DROP KSYM_KP_Enter
+#define DEFAULT_KEY_SNAP KSYM_Control_L
+#define DEFAULT_KEY_DROP KSYM_KP_Enter
#else
-#define DEFAULT_KEY_SNAP KSYM_Control_L
-#define DEFAULT_KEY_DROP KSYM_Control_R
+#define DEFAULT_KEY_SNAP KSYM_Control_L
+#define DEFAULT_KEY_DROP KSYM_Control_R
#endif
-#define DEFAULT_KEY_OKAY KSYM_Return
-#define DEFAULT_KEY_CANCEL KSYM_Escape
+#define DEFAULT_KEY_OKAY KSYM_Return
+#define DEFAULT_KEY_CANCEL KSYM_Escape
/* default shortcut keys */
-#define DEFAULT_KEY_SAVE_GAME KSYM_F1
-#define DEFAULT_KEY_LOAD_GAME KSYM_F2
-#define DEFAULT_KEY_TOGGLE_PAUSE KSYM_space
+#define DEFAULT_KEY_SAVE_GAME KSYM_F1
+#define DEFAULT_KEY_LOAD_GAME KSYM_F2
+#define DEFAULT_KEY_TOGGLE_PAUSE KSYM_space
+#define DEFAULT_KEY_FOCUS_PLAYER_1 KSYM_F5
+#define DEFAULT_KEY_FOCUS_PLAYER_2 KSYM_F6
+#define DEFAULT_KEY_FOCUS_PLAYER_3 KSYM_F7
+#define DEFAULT_KEY_FOCUS_PLAYER_4 KSYM_F8
+#define DEFAULT_KEY_FOCUS_PLAYER_ALL KSYM_F9
/* values for key_status */
-#define KEY_NOT_PRESSED FALSE
-#define KEY_RELEASED FALSE
-#define KEY_PRESSED TRUE
+#define KEY_NOT_PRESSED FALSE
+#define KEY_RELEASED FALSE
+#define KEY_PRESSED TRUE
/* values for button status */
-#define MB_NOT_PRESSED FALSE
-#define MB_NOT_RELEASED TRUE
-#define MB_RELEASED FALSE
-#define MB_PRESSED TRUE
-#define MB_MENU_CHOICE FALSE
-#define MB_MENU_MARK TRUE
-#define MB_MENU_INITIALIZE (-1)
-#define MB_MENU_LEAVE (-2)
-#define MB_LEFTBUTTON 1
-#define MB_MIDDLEBUTTON 2
-#define MB_RIGHTBUTTON 3
+#define MB_NOT_PRESSED FALSE
+#define MB_NOT_RELEASED TRUE
+#define MB_RELEASED FALSE
+#define MB_PRESSED TRUE
+#define MB_MENU_CHOICE FALSE
+#define MB_MENU_MARK TRUE
+#define MB_MENU_INITIALIZE (-1)
+#define MB_MENU_LEAVE (-2)
+#define MB_LEFTBUTTON 1
+#define MB_MIDDLEBUTTON 2
+#define MB_RIGHTBUTTON 3
/* values for move directions */
-#define MV_BIT_LEFT 0
-#define MV_BIT_RIGHT 1
-#define MV_BIT_UP 2
-#define MV_BIT_DOWN 3
+#define MV_BIT_LEFT 0
+#define MV_BIT_RIGHT 1
+#define MV_BIT_UP 2
+#define MV_BIT_DOWN 3
-#define NUM_DIRECTIONS 4
+#define NUM_DIRECTIONS 4
+
+/* diagonal movement directions are used in a different contect than buttons */
+#define MV_BIT_UPLEFT 4
+#define MV_BIT_UPRIGHT 5
+#define MV_BIT_DOWNLEFT 6
+#define MV_BIT_DOWNRIGHT 7
+
+#define NUM_DIRECTIONS_FULL 8
/* values for special "button" bitmasks */
-#define BUTTON_1 4
-#define BUTTON_2 5
+#define BUTTON_1 4
+#define BUTTON_2 5
+
+/* values for special "focus player" bitmasks */
+#define BIT_SET_FOCUS 6
/* values for move directions and special "button" key bitmasks */
#define MV_NONE 0
#define MV_UP (1 << MV_BIT_UP)
#define MV_DOWN (1 << MV_BIT_DOWN)
+#define MV_UPLEFT (MV_UP | MV_LEFT)
+#define MV_UPRIGHT (MV_UP | MV_RIGHT)
+#define MV_DOWNLEFT (MV_DOWN | MV_LEFT)
+#define MV_DOWNRIGHT (MV_DOWN | MV_RIGHT)
+
#define MV_HORIZONTAL (MV_LEFT | MV_RIGHT)
#define MV_VERTICAL (MV_UP | MV_DOWN)
#define MV_ALL_DIRECTIONS (MV_LEFT | MV_RIGHT | MV_UP | MV_DOWN)
#define KEY_BUTTON (KEY_BUTTON_1 | KEY_BUTTON_2)
#define KEY_ACTION (KEY_MOTION | KEY_BUTTON)
-#define MV_DIR_BIT(x) ((x) == MV_LEFT ? MV_BIT_LEFT : \
- (x) == MV_RIGHT ? MV_BIT_RIGHT : \
- (x) == MV_UP ? MV_BIT_UP : MV_BIT_DOWN)
-
-#define MV_DIR_OPPOSITE(x) ((x) == MV_LEFT ? MV_RIGHT : \
- (x) == MV_RIGHT ? MV_LEFT : \
- (x) == MV_UP ? MV_DOWN : \
- (x) == MV_DOWN ? MV_UP : MV_NONE)
-
+#define KEY_SET_FOCUS (1 << BIT_SET_FOCUS)
+
+#define MV_DIR_FROM_BIT(x) ((x) < NUM_DIRECTIONS ? 1 << (x) : \
+ (x) == MV_BIT_UPLEFT ? MV_UPLEFT : \
+ (x) == MV_BIT_UPRIGHT ? MV_UPRIGHT : \
+ (x) == MV_BIT_DOWNLEFT ? MV_DOWNLEFT : \
+ (x) == MV_BIT_DOWNRIGHT ? MV_DOWNRIGHT : \
+ MV_NONE)
+
+#define MV_DIR_TO_BIT(x) ((x) == MV_LEFT ? MV_BIT_LEFT : \
+ (x) == MV_RIGHT ? MV_BIT_RIGHT : \
+ (x) == MV_UP ? MV_BIT_UP : \
+ (x) == MV_DOWN ? MV_BIT_DOWN : \
+ (x) == MV_UPLEFT ? MV_BIT_UPLEFT : \
+ (x) == MV_UPRIGHT ? MV_BIT_UPRIGHT : \
+ (x) == MV_DOWNLEFT ? MV_BIT_DOWNLEFT : \
+ (x) == MV_DOWNRIGHT ? MV_BIT_DOWNRIGHT : \
+ MV_BIT_DOWN)
+
+#define MV_DIR_OPPOSITE(x) ((x) == MV_LEFT ? MV_RIGHT : \
+ (x) == MV_RIGHT ? MV_LEFT : \
+ (x) == MV_UP ? MV_DOWN : \
+ (x) == MV_DOWN ? MV_UP : \
+ (x) == MV_UPLEFT ? MV_DOWNRIGHT : \
+ (x) == MV_UPRIGHT ? MV_DOWNLEFT : \
+ (x) == MV_DOWNLEFT ? MV_UPRIGHT : \
+ (x) == MV_DOWNRIGHT ? MV_UPLEFT : \
+ MV_NONE)
/* values for animation mode (frame order and direction) */
#define ANIM_NONE 0
#define ANIM_PINGPONG (1 << 2)
#define ANIM_PINGPONG2 (1 << 3)
#define ANIM_RANDOM (1 << 4)
-#define ANIM_REVERSE (1 << 5)
+#define ANIM_CE_VALUE (1 << 5)
+#define ANIM_CE_SCORE (1 << 6)
+#define ANIM_REVERSE (1 << 7)
+#define ANIM_OPAQUE_PLAYER (1 << 8)
/* values for special (non game element) animation modes */
-#define ANIM_HORIZONTAL (1 << 6)
-#define ANIM_VERTICAL (1 << 7)
+#define ANIM_HORIZONTAL (1 << 9)
+#define ANIM_VERTICAL (1 << 10)
+#define ANIM_STATIC_PANEL (1 << 11)
#define ANIM_DEFAULT ANIM_LOOP
#define CURSOR_DEFAULT 0
#define CURSOR_PLAYFIELD 1
+/* fundamental game speed values */
+#define ONE_SECOND_DELAY 1000 /* delay value for one second */
+#define GAME_FRAME_DELAY 20 /* frame delay in milliseconds */
+#define FFWD_FRAME_DELAY 10 /* 200% speed for fast forward */
+#define FRAMES_PER_SECOND (ONE_SECOND_DELAY / GAME_FRAME_DELAY)
+
+/* maximum playfield size supported by libgame functions */
+#define MAX_PLAYFIELD_WIDTH 128
+#define MAX_PLAYFIELD_HEIGHT 128
/* maximum number of parallel players supported by libgame functions */
#define MAX_PLAYERS 4
boolean el_ce;
boolean el_ge;
boolean el_user;
- boolean el_generic;
boolean el_dynamic;
};
Key save_game;
Key load_game;
Key toggle_pause;
+
+ Key focus_player[MAX_PLAYERS];
+ Key focus_player_all;
};
struct SetupSystemInfo
boolean time_limit;
boolean fullscreen;
boolean ask_on_escape;
+ boolean ask_on_escape_editor;
+ boolean quick_switch;
+ boolean input_on_focus;
char *graphics_set;
char *sounds_set;
extern struct JoystickInfo joystick;
extern struct SetupInfo setup;
+extern LevelDirTree *leveldir_first_all;
extern LevelDirTree *leveldir_first;
extern LevelDirTree *leveldir_current;
extern int level_nr;