// (c) 1995-2014 by Artsoft Entertainment
// Holger Schemel
// info@artsoft.org
-// http://www.artsoft.org/
+// https://www.artsoft.org/
// ----------------------------------------------------------------------------
// main.h
// ============================================================================
#define CE_VALUE_CHANGES_OF_X 41
#define CE_SCORE_CHANGES 42
#define CE_SCORE_CHANGES_OF_X 43
+#define CE_CLICKED_BY_MOUSE 44
+#define CE_PRESSED_BY_MOUSE 45
+#define CE_MOUSE_CLICKED_ON_X 46
+#define CE_MOUSE_PRESSED_ON_X 47
-#define NUM_CHANGE_EVENTS 44
+#define NUM_CHANGE_EVENTS 48
#define NUM_CE_BITFIELDS ((NUM_CHANGE_EVENTS + 31) / 32)
+#define CE_HEADLINE_SPECIAL_EVENTS 250
+#define CE_UNDEFINED 255
+
#define CE_BITMASK_DEFAULT 0
#define CH_EVENT_BITFIELD_NR(e) (e / 32)
#define CA_SET_PLAYER_INVENTORY 18
#define CA_SET_CE_ARTWORK 19
#define CA_SET_LEVEL_RANDOM_SEED 20
+#define CA_MOVE_PLAYER_NEW 21
#define CA_HEADLINE_LEVEL_ACTIONS 250
#define CA_HEADLINE_PLAYER_ACTIONS 251
#define IS_DC_STEELWALL_2(e) ((e) >= EL_DC_STEELWALL_2_LEFT && \
(e) <= EL_DC_STEELWALL_2_SINGLE)
+// !!! IMPROVE THIS !!!
+#define IS_EM_ELEMENT(e) (map_element_EM_to_RND_cave(map_element_RND_to_EM_cave(e)) == (e))
+
#define MM_WALL_BASE(e) ((e) & 0xfff0)
#define MM_WALL_BITS(e) ((e) & 0x000f)
#if 1
#define TILE_GFX_ELEMENT(x, y) \
(GfxElement[x][y] != EL_UNDEFINED && \
- Feld[x][y] != EL_EXPLOSION ? \
- GfxElement[x][y] : Feld[x][y])
+ Tile[x][y] != EL_EXPLOSION ? \
+ GfxElement[x][y] : Tile[x][y])
#else
#define TILE_GFX_ELEMENT(x, y) \
GFX_ELEMENT(GfxElement[x][y] != EL_UNDEFINED && \
- Feld[x][y] != EL_EXPLOSION ? \
- GfxElement[x][y] : Feld[x][y])
+ Tile[x][y] != EL_EXPLOSION ? \
+ GfxElement[x][y] : Tile[x][y])
#endif
// !!! "use sound" deactivated due to problems with level "bug machine" !!!
#define IS_PLAYER(x, y) (ELEM_IS_PLAYER(StorePlayer[x][y]))
-#define IS_FREE(x, y) (Feld[x][y] == EL_EMPTY && !IS_PLAYER(x, y))
-#define IS_FREE_OR_PLAYER(x, y) (Feld[x][y] == EL_EMPTY)
+#define IS_FREE(x, y) (Tile[x][y] == EL_EMPTY && !IS_PLAYER(x, y))
+#define IS_FREE_OR_PLAYER(x, y) (Tile[x][y] == EL_EMPTY)
#define IS_MOVING(x,y) (MovPos[x][y] != 0)
#define IS_FALLING(x,y) (MovPos[x][y] != 0 && MovDir[x][y] == MV_DOWN)
-#define IS_BLOCKED(x,y) (Feld[x][y] == EL_BLOCKED)
+#define IS_BLOCKED(x,y) (Tile[x][y] == EL_BLOCKED)
#define IS_MV_DIAGONAL(x) ((x) & MV_HORIZONTAL && (x) & MV_VERTICAL)
#define PLAYERINFO(x,y) (&stored_player[StorePlayer[x][y]-EL_PLAYER_1])
#define SHIELD_ON(p) ((p)->shield_normal_time_left > 0)
-#define ENEMY_PROTECTED_FIELD(x,y) (IS_PROTECTED(Feld[x][y]) || \
+#define ENEMY_PROTECTED_FIELD(x,y) (IS_PROTECTED(Tile[x][y]) || \
IS_PROTECTED(Back[x][y]))
-#define EXPLOSION_PROTECTED_FIELD(x,y) (IS_EXPLOSION_PROOF(Feld[x][y]))
+#define EXPLOSION_PROTECTED_FIELD(x,y) (IS_EXPLOSION_PROOF(Tile[x][y]))
#define PLAYER_ENEMY_PROTECTED(x,y) (SHIELD_ON(PLAYERINFO(x, y)) || \
ENEMY_PROTECTED_FIELD(x, y))
#define PLAYER_EXPLOSION_PROTECTED(x,y) (SHIELD_ON(PLAYERINFO(x, y)) || \
#define MIN_ELEMENTS_IN_GROUP 1
#define MAX_ELEMENTS_IN_GROUP 16
#define MIN_ANDROID_ELEMENTS 1
-#define MAX_ANDROID_ELEMENTS 16
+#define MAX_ANDROID_ELEMENTS 32
+#define MAX_ANDROID_ELEMENTS_OLD 16 // (extended since version 4.2.0.0)
// values for elements with content
#define MIN_ELEMENT_CONTENTS 1
#define EL_MM_END_2 (EL_DF_START2 + 430)
#define EL_MM_END EL_MM_END_2
-#define NUM_FILE_ELEMENTS 1215
+#define EL_SPRING_LEFT 1215
+#define EL_SPRING_RIGHT 1216
+
+#define NUM_FILE_ELEMENTS 1217
// "real" (and therefore drawable) runtime elements
// values for graphics/sounds action types
-#define ACTION_DEFAULT 0
-#define ACTION_WAITING 1
-#define ACTION_FALLING 2
-#define ACTION_MOVING 3
-#define ACTION_DIGGING 4
-#define ACTION_SNAPPING 5
-#define ACTION_COLLECTING 6
-#define ACTION_DROPPING 7
-#define ACTION_PUSHING 8
-#define ACTION_WALKING 9
-#define ACTION_PASSING 10
-#define ACTION_IMPACT 11
-#define ACTION_BREAKING 12
-#define ACTION_ACTIVATING 13
-#define ACTION_DEACTIVATING 14
-#define ACTION_OPENING 15
-#define ACTION_CLOSING 16
-#define ACTION_ATTACKING 17
-#define ACTION_GROWING 18
-#define ACTION_SHRINKING 19
-#define ACTION_ACTIVE 20
-#define ACTION_FILLING 21
-#define ACTION_EMPTYING 22
-#define ACTION_CHANGING 23
-#define ACTION_EXPLODING 24
-#define ACTION_BORING 25
-#define ACTION_BORING_1 26
-#define ACTION_BORING_2 27
-#define ACTION_BORING_3 28
-#define ACTION_BORING_4 29
-#define ACTION_BORING_5 30
-#define ACTION_BORING_6 31
-#define ACTION_BORING_7 32
-#define ACTION_BORING_8 33
-#define ACTION_BORING_9 34
-#define ACTION_BORING_10 35
-#define ACTION_SLEEPING 36
-#define ACTION_SLEEPING_1 37
-#define ACTION_SLEEPING_2 38
-#define ACTION_SLEEPING_3 39
-#define ACTION_AWAKENING 40
-#define ACTION_DYING 41
-#define ACTION_TURNING 42
-#define ACTION_TURNING_FROM_LEFT 43
-#define ACTION_TURNING_FROM_RIGHT 44
-#define ACTION_TURNING_FROM_UP 45
-#define ACTION_TURNING_FROM_DOWN 46
-#define ACTION_SMASHED_BY_ROCK 47
-#define ACTION_SMASHED_BY_SPRING 48
-#define ACTION_EATING 49
-#define ACTION_TWINKLING 50
-#define ACTION_SPLASHING 51
-#define ACTION_HITTING 52
-#define ACTION_PAGE_1 53
-#define ACTION_PAGE_2 54
-#define ACTION_PAGE_3 55
-#define ACTION_PAGE_4 56
-#define ACTION_PAGE_5 57
-#define ACTION_PAGE_6 58
-#define ACTION_PAGE_7 59
-#define ACTION_PAGE_8 60
-#define ACTION_PAGE_9 61
-#define ACTION_PAGE_10 62
-#define ACTION_PAGE_11 63
-#define ACTION_PAGE_12 64
-#define ACTION_PAGE_13 65
-#define ACTION_PAGE_14 66
-#define ACTION_PAGE_15 67
-#define ACTION_PAGE_16 68
-#define ACTION_PAGE_17 69
-#define ACTION_PAGE_18 70
-#define ACTION_PAGE_19 71
-#define ACTION_PAGE_20 72
-#define ACTION_PAGE_21 73
-#define ACTION_PAGE_22 74
-#define ACTION_PAGE_23 75
-#define ACTION_PAGE_24 76
-#define ACTION_PAGE_25 77
-#define ACTION_PAGE_26 78
-#define ACTION_PAGE_27 79
-#define ACTION_PAGE_28 80
-#define ACTION_PAGE_29 81
-#define ACTION_PAGE_30 82
-#define ACTION_PAGE_31 83
-#define ACTION_PAGE_32 84
-#define ACTION_PART_1 85
-#define ACTION_PART_2 86
-#define ACTION_PART_3 87
-#define ACTION_PART_4 88
-#define ACTION_PART_5 89
-#define ACTION_PART_6 90
-#define ACTION_PART_7 91
-#define ACTION_PART_8 92
-#define ACTION_PART_9 93
-#define ACTION_PART_10 94
-#define ACTION_PART_11 95
-#define ACTION_PART_12 96
-#define ACTION_PART_13 97
-#define ACTION_PART_14 98
-#define ACTION_PART_15 99
-#define ACTION_PART_16 100
-#define ACTION_PART_17 101
-#define ACTION_PART_18 102
-#define ACTION_PART_19 103
-#define ACTION_PART_20 104
-#define ACTION_PART_21 105
-#define ACTION_PART_22 106
-#define ACTION_PART_23 107
-#define ACTION_PART_24 108
-#define ACTION_PART_25 109
-#define ACTION_PART_26 110
-#define ACTION_PART_27 111
-#define ACTION_PART_28 112
-#define ACTION_PART_29 113
-#define ACTION_PART_30 114
-#define ACTION_PART_31 115
-#define ACTION_PART_32 116
-#define ACTION_OTHER 117
-
-#define NUM_ACTIONS 118
+enum
+{
+ ACTION_DEFAULT = 0,
+ ACTION_WAITING,
+ ACTION_FALLING,
+ ACTION_MOVING,
+ ACTION_DIGGING,
+ ACTION_SNAPPING,
+ ACTION_COLLECTING,
+ ACTION_DROPPING,
+ ACTION_PUSHING,
+ ACTION_WALKING,
+ ACTION_PASSING,
+ ACTION_IMPACT,
+ ACTION_BREAKING,
+ ACTION_ACTIVATING,
+ ACTION_DEACTIVATING,
+ ACTION_OPENING,
+ ACTION_CLOSING,
+ ACTION_ATTACKING,
+ ACTION_GROWING,
+ ACTION_SHRINKING,
+ ACTION_ACTIVE,
+ ACTION_FILLING,
+ ACTION_EMPTYING,
+ ACTION_CHANGING,
+ ACTION_EXPLODING,
+ ACTION_BORING,
+ ACTION_BORING_1,
+ ACTION_BORING_2,
+ ACTION_BORING_3,
+ ACTION_BORING_4,
+ ACTION_BORING_5,
+ ACTION_BORING_6,
+ ACTION_BORING_7,
+ ACTION_BORING_8,
+ ACTION_BORING_9,
+ ACTION_BORING_10,
+ ACTION_SLEEPING,
+ ACTION_SLEEPING_1,
+ ACTION_SLEEPING_2,
+ ACTION_SLEEPING_3,
+ ACTION_AWAKENING,
+ ACTION_DYING,
+ ACTION_TURNING,
+ ACTION_TURNING_FROM_LEFT,
+ ACTION_TURNING_FROM_RIGHT,
+ ACTION_TURNING_FROM_UP,
+ ACTION_TURNING_FROM_DOWN,
+ ACTION_SMASHED_BY_ROCK,
+ ACTION_SMASHED_BY_SPRING,
+ ACTION_EATING,
+ ACTION_TWINKLING,
+ ACTION_SPLASHING,
+ ACTION_HITTING,
+ ACTION_PAGE_1,
+ ACTION_PAGE_2,
+ ACTION_PAGE_3,
+ ACTION_PAGE_4,
+ ACTION_PAGE_5,
+ ACTION_PAGE_6,
+ ACTION_PAGE_7,
+ ACTION_PAGE_8,
+ ACTION_PAGE_9,
+ ACTION_PAGE_10,
+ ACTION_PAGE_11,
+ ACTION_PAGE_12,
+ ACTION_PAGE_13,
+ ACTION_PAGE_14,
+ ACTION_PAGE_15,
+ ACTION_PAGE_16,
+ ACTION_PAGE_17,
+ ACTION_PAGE_18,
+ ACTION_PAGE_19,
+ ACTION_PAGE_20,
+ ACTION_PAGE_21,
+ ACTION_PAGE_22,
+ ACTION_PAGE_23,
+ ACTION_PAGE_24,
+ ACTION_PAGE_25,
+ ACTION_PAGE_26,
+ ACTION_PAGE_27,
+ ACTION_PAGE_28,
+ ACTION_PAGE_29,
+ ACTION_PAGE_30,
+ ACTION_PAGE_31,
+ ACTION_PAGE_32,
+ ACTION_PART_1,
+ ACTION_PART_2,
+ ACTION_PART_3,
+ ACTION_PART_4,
+ ACTION_PART_5,
+ ACTION_PART_6,
+ ACTION_PART_7,
+ ACTION_PART_8,
+ ACTION_PART_9,
+ ACTION_PART_10,
+ ACTION_PART_11,
+ ACTION_PART_12,
+ ACTION_PART_13,
+ ACTION_PART_14,
+ ACTION_PART_15,
+ ACTION_PART_16,
+ ACTION_PART_17,
+ ACTION_PART_18,
+ ACTION_PART_19,
+ ACTION_PART_20,
+ ACTION_PART_21,
+ ACTION_PART_22,
+ ACTION_PART_23,
+ ACTION_PART_24,
+ ACTION_PART_25,
+ ACTION_PART_26,
+ ACTION_PART_27,
+ ACTION_PART_28,
+ ACTION_PART_29,
+ ACTION_PART_30,
+ ACTION_PART_31,
+ ACTION_PART_32,
+ ACTION_OTHER,
+
+ NUM_ACTIONS
+};
#define ACTION_BORING_LAST ACTION_BORING_10
#define ACTION_SLEEPING_LAST ACTION_SLEEPING_3
// values for special image configuration suffixes (must match game mode)
-#define GFX_SPECIAL_ARG_DEFAULT 0
-#define GFX_SPECIAL_ARG_LOADING 1
-#define GFX_SPECIAL_ARG_TITLE_INITIAL 2
-#define GFX_SPECIAL_ARG_TITLE_INITIAL_1 3
-#define GFX_SPECIAL_ARG_TITLE_INITIAL_2 4
-#define GFX_SPECIAL_ARG_TITLE_INITIAL_3 5
-#define GFX_SPECIAL_ARG_TITLE_INITIAL_4 6
-#define GFX_SPECIAL_ARG_TITLE_INITIAL_5 7
-#define GFX_SPECIAL_ARG_TITLE 8
-#define GFX_SPECIAL_ARG_TITLE_1 9
-#define GFX_SPECIAL_ARG_TITLE_2 10
-#define GFX_SPECIAL_ARG_TITLE_3 11
-#define GFX_SPECIAL_ARG_TITLE_4 12
-#define GFX_SPECIAL_ARG_TITLE_5 13
-#define GFX_SPECIAL_ARG_MAIN 14
-#define GFX_SPECIAL_ARG_LEVELS 15
-#define GFX_SPECIAL_ARG_LEVELNR 16
-#define GFX_SPECIAL_ARG_SCORES 17
-#define GFX_SPECIAL_ARG_EDITOR 18
-#define GFX_SPECIAL_ARG_INFO 19
-#define GFX_SPECIAL_ARG_SETUP 20
-#define GFX_SPECIAL_ARG_PLAYING 21
-#define GFX_SPECIAL_ARG_DOOR 22
-#define GFX_SPECIAL_ARG_TAPE 23
-#define GFX_SPECIAL_ARG_PANEL 24
-#define GFX_SPECIAL_ARG_PREVIEW 25
-#define GFX_SPECIAL_ARG_CRUMBLED 26
-#define GFX_SPECIAL_ARG_MAINONLY 27
-#define GFX_SPECIAL_ARG_TYPENAME 28
-#define GFX_SPECIAL_ARG_SUBMENU 29
-#define GFX_SPECIAL_ARG_MENU 30
-#define GFX_SPECIAL_ARG_TOONS 31
-#define GFX_SPECIAL_ARG_SCORESOLD 32
-#define GFX_SPECIAL_ARG_SCORESNEW 33
-#define GFX_SPECIAL_ARG_NO_TITLE 34
-#define GFX_SPECIAL_ARG_FADING 35
-#define GFX_SPECIAL_ARG_QUIT 36
-
-#define NUM_SPECIAL_GFX_ARGS 37
+enum
+{
+ GFX_SPECIAL_ARG_DEFAULT = 0,
+ GFX_SPECIAL_ARG_LOADING,
+ GFX_SPECIAL_ARG_TITLE_INITIAL,
+ GFX_SPECIAL_ARG_TITLE_INITIAL_1,
+ GFX_SPECIAL_ARG_TITLE_INITIAL_2,
+ GFX_SPECIAL_ARG_TITLE_INITIAL_3,
+ GFX_SPECIAL_ARG_TITLE_INITIAL_4,
+ GFX_SPECIAL_ARG_TITLE_INITIAL_5,
+ GFX_SPECIAL_ARG_TITLE,
+ GFX_SPECIAL_ARG_TITLE_1,
+ GFX_SPECIAL_ARG_TITLE_2,
+ GFX_SPECIAL_ARG_TITLE_3,
+ GFX_SPECIAL_ARG_TITLE_4,
+ GFX_SPECIAL_ARG_TITLE_5,
+ GFX_SPECIAL_ARG_MAIN,
+ GFX_SPECIAL_ARG_NAMES,
+ GFX_SPECIAL_ARG_LEVELS,
+ GFX_SPECIAL_ARG_LEVELNR,
+ GFX_SPECIAL_ARG_SCORES,
+ GFX_SPECIAL_ARG_EDITOR,
+ GFX_SPECIAL_ARG_INFO,
+ GFX_SPECIAL_ARG_SETUP,
+ GFX_SPECIAL_ARG_PLAYING,
+ GFX_SPECIAL_ARG_DOOR,
+ GFX_SPECIAL_ARG_TAPE,
+ GFX_SPECIAL_ARG_PANEL,
+ GFX_SPECIAL_ARG_PREVIEW,
+ GFX_SPECIAL_ARG_CRUMBLED,
+ GFX_SPECIAL_ARG_MAINONLY,
+ GFX_SPECIAL_ARG_NAMESONLY,
+ GFX_SPECIAL_ARG_TYPENAME,
+ GFX_SPECIAL_ARG_TYPENAMES,
+ GFX_SPECIAL_ARG_SUBMENU,
+ GFX_SPECIAL_ARG_MENU,
+ GFX_SPECIAL_ARG_TOONS,
+ GFX_SPECIAL_ARG_SCORESOLD,
+ GFX_SPECIAL_ARG_SCORESNEW,
+ GFX_SPECIAL_ARG_NO_TITLE,
+ GFX_SPECIAL_ARG_FADING,
+ GFX_SPECIAL_ARG_QUIT,
+
+ NUM_SPECIAL_GFX_ARGS
+};
// these additional definitions are currently only used for draw offsets
-#define GFX_SPECIAL_ARG_INFO_MAIN 0
-#define GFX_SPECIAL_ARG_INFO_TITLE 1
-#define GFX_SPECIAL_ARG_INFO_ELEMENTS 2
-#define GFX_SPECIAL_ARG_INFO_MUSIC 3
-#define GFX_SPECIAL_ARG_INFO_CREDITS 4
-#define GFX_SPECIAL_ARG_INFO_PROGRAM 5
-#define GFX_SPECIAL_ARG_INFO_VERSION 6
-#define GFX_SPECIAL_ARG_INFO_LEVELSET 7
-
-#define NUM_SPECIAL_GFX_INFO_ARGS 8
+enum
+{
+ GFX_SPECIAL_ARG_INFO_MAIN = 0,
+ GFX_SPECIAL_ARG_INFO_TITLE,
+ GFX_SPECIAL_ARG_INFO_ELEMENTS,
+ GFX_SPECIAL_ARG_INFO_MUSIC,
+ GFX_SPECIAL_ARG_INFO_CREDITS,
+ GFX_SPECIAL_ARG_INFO_PROGRAM,
+ GFX_SPECIAL_ARG_INFO_VERSION,
+ GFX_SPECIAL_ARG_INFO_LEVELSET,
+
+ NUM_SPECIAL_GFX_INFO_ARGS
+};
// these additional definitions are currently only used for draw offsets
// (must match SETUP_MODE_* values as defined in src/screens.c)
// (should also match corresponding entries in src/conf_gfx.c)
-#define GFX_SPECIAL_ARG_SETUP_MAIN 0
-#define GFX_SPECIAL_ARG_SETUP_GAME 1
-#define GFX_SPECIAL_ARG_SETUP_EDITOR 2
-#define GFX_SPECIAL_ARG_SETUP_GRAPHICS 3
-#define GFX_SPECIAL_ARG_SETUP_SOUND 4
-#define GFX_SPECIAL_ARG_SETUP_ARTWORK 5
-#define GFX_SPECIAL_ARG_SETUP_INPUT 6
-#define GFX_SPECIAL_ARG_SETUP_TOUCH 7
-#define GFX_SPECIAL_ARG_SETUP_SHORTCUTS 8
-#define GFX_SPECIAL_ARG_SETUP_SHORTCUTS_1 9
-#define GFX_SPECIAL_ARG_SETUP_SHORTCUTS_2 10
-#define GFX_SPECIAL_ARG_SETUP_SHORTCUTS_3 11
-#define GFX_SPECIAL_ARG_SETUP_SHORTCUTS_4 12
-#define GFX_SPECIAL_ARG_SETUP_SHORTCUTS_5 13
-#define GFX_SPECIAL_ARG_SETUP_CHOOSE_ARTWORK 14
-#define GFX_SPECIAL_ARG_SETUP_CHOOSE_OTHER 15
-
-#define NUM_SPECIAL_GFX_SETUP_ARGS 16
-
+enum
+{
+ GFX_SPECIAL_ARG_SETUP_MAIN = 0,
+ GFX_SPECIAL_ARG_SETUP_GAME,
+ GFX_SPECIAL_ARG_SETUP_ENGINES,
+ GFX_SPECIAL_ARG_SETUP_EDITOR,
+ GFX_SPECIAL_ARG_SETUP_GRAPHICS,
+ GFX_SPECIAL_ARG_SETUP_SOUND,
+ GFX_SPECIAL_ARG_SETUP_ARTWORK,
+ GFX_SPECIAL_ARG_SETUP_INPUT,
+ GFX_SPECIAL_ARG_SETUP_TOUCH,
+ GFX_SPECIAL_ARG_SETUP_SHORTCUTS,
+ GFX_SPECIAL_ARG_SETUP_SHORTCUTS_1,
+ GFX_SPECIAL_ARG_SETUP_SHORTCUTS_2,
+ GFX_SPECIAL_ARG_SETUP_SHORTCUTS_3,
+ GFX_SPECIAL_ARG_SETUP_SHORTCUTS_4,
+ GFX_SPECIAL_ARG_SETUP_SHORTCUTS_5,
+ GFX_SPECIAL_ARG_SETUP_CHOOSE_ARTWORK,
+ GFX_SPECIAL_ARG_SETUP_CHOOSE_OTHER,
+
+ NUM_SPECIAL_GFX_SETUP_ARGS
+};
// values for image configuration suffixes
-#define GFX_ARG_X 0
-#define GFX_ARG_Y 1
-#define GFX_ARG_XPOS 2
-#define GFX_ARG_YPOS 3
-#define GFX_ARG_WIDTH 4
-#define GFX_ARG_HEIGHT 5
-#define GFX_ARG_VERTICAL 6
-#define GFX_ARG_OFFSET 7
-#define GFX_ARG_XOFFSET 8
-#define GFX_ARG_YOFFSET 9
-#define GFX_ARG_2ND_MOVEMENT_TILE 10
-#define GFX_ARG_2ND_VERTICAL 11
-#define GFX_ARG_2ND_OFFSET 12
-#define GFX_ARG_2ND_XOFFSET 13
-#define GFX_ARG_2ND_YOFFSET 14
-#define GFX_ARG_2ND_SWAP_TILES 15
-#define GFX_ARG_FRAMES 16
-#define GFX_ARG_FRAMES_PER_LINE 17
-#define GFX_ARG_START_FRAME 18
-#define GFX_ARG_DELAY 19
-#define GFX_ARG_ANIM_MODE 20
-#define GFX_ARG_GLOBAL_SYNC 21
-#define GFX_ARG_CRUMBLED_LIKE 22
-#define GFX_ARG_DIGGABLE_LIKE 23
-#define GFX_ARG_BORDER_SIZE 24
-#define GFX_ARG_STEP_OFFSET 25
-#define GFX_ARG_STEP_XOFFSET 26
-#define GFX_ARG_STEP_YOFFSET 27
-#define GFX_ARG_STEP_DELAY 28
-#define GFX_ARG_DIRECTION 29
-#define GFX_ARG_POSITION 30
-#define GFX_ARG_DRAW_XOFFSET 31
-#define GFX_ARG_DRAW_YOFFSET 32
-#define GFX_ARG_DRAW_MASKED 33
-#define GFX_ARG_DRAW_ORDER 34
-#define GFX_ARG_INIT_DELAY_FIXED 35
-#define GFX_ARG_INIT_DELAY_RANDOM 36
-#define GFX_ARG_ANIM_DELAY_FIXED 37
-#define GFX_ARG_ANIM_DELAY_RANDOM 38
-#define GFX_ARG_POST_DELAY_FIXED 39
-#define GFX_ARG_POST_DELAY_RANDOM 40
-#define GFX_ARG_INIT_EVENT 41
-#define GFX_ARG_INIT_EVENT_ACTION 42
-#define GFX_ARG_ANIM_EVENT 43
-#define GFX_ARG_ANIM_EVENT_ACTION 44
-#define GFX_ARG_NAME 45
-#define GFX_ARG_SCALE_UP_FACTOR 46
-#define GFX_ARG_TILE_SIZE 47
-#define GFX_ARG_CLONE_FROM 48
-#define GFX_ARG_FADE_MODE 49
-#define GFX_ARG_FADE_DELAY 50
-#define GFX_ARG_POST_DELAY 51
-#define GFX_ARG_AUTO_DELAY 52
-#define GFX_ARG_ALIGN 53
-#define GFX_ARG_VALIGN 54
-#define GFX_ARG_SORT_PRIORITY 55
-#define GFX_ARG_CLASS 56
-#define GFX_ARG_STYLE 57
-#define GFX_ARG_ACTIVE_XOFFSET 58
-#define GFX_ARG_ACTIVE_YOFFSET 59
-#define GFX_ARG_PRESSED_XOFFSET 60
-#define GFX_ARG_PRESSED_YOFFSET 61
-
-#define NUM_GFX_ARGS 62
-
+enum
+{
+ GFX_ARG_X = 0,
+ GFX_ARG_Y,
+ GFX_ARG_XPOS,
+ GFX_ARG_YPOS,
+ GFX_ARG_WIDTH,
+ GFX_ARG_HEIGHT,
+ GFX_ARG_VERTICAL,
+ GFX_ARG_OFFSET,
+ GFX_ARG_XOFFSET,
+ GFX_ARG_YOFFSET,
+ GFX_ARG_2ND_MOVEMENT_TILE,
+ GFX_ARG_2ND_VERTICAL,
+ GFX_ARG_2ND_OFFSET,
+ GFX_ARG_2ND_XOFFSET,
+ GFX_ARG_2ND_YOFFSET,
+ GFX_ARG_2ND_SWAP_TILES,
+ GFX_ARG_FRAMES,
+ GFX_ARG_FRAMES_PER_LINE,
+ GFX_ARG_START_FRAME,
+ GFX_ARG_DELAY,
+ GFX_ARG_ANIM_MODE,
+ GFX_ARG_GLOBAL_SYNC,
+ GFX_ARG_CRUMBLED_LIKE,
+ GFX_ARG_DIGGABLE_LIKE,
+ GFX_ARG_BORDER_SIZE,
+ GFX_ARG_STEP_OFFSET,
+ GFX_ARG_STEP_XOFFSET,
+ GFX_ARG_STEP_YOFFSET,
+ GFX_ARG_STEP_DELAY,
+ GFX_ARG_DIRECTION,
+ GFX_ARG_POSITION,
+ GFX_ARG_DRAW_XOFFSET,
+ GFX_ARG_DRAW_YOFFSET,
+ GFX_ARG_DRAW_MASKED,
+ GFX_ARG_DRAW_ORDER,
+ GFX_ARG_INIT_DELAY_FIXED,
+ GFX_ARG_INIT_DELAY_RANDOM,
+ GFX_ARG_INIT_DELAY_ACTION,
+ GFX_ARG_ANIM_DELAY_FIXED,
+ GFX_ARG_ANIM_DELAY_RANDOM,
+ GFX_ARG_ANIM_DELAY_ACTION,
+ GFX_ARG_POST_DELAY_FIXED,
+ GFX_ARG_POST_DELAY_RANDOM,
+ GFX_ARG_POST_DELAY_ACTION,
+ GFX_ARG_INIT_EVENT,
+ GFX_ARG_INIT_EVENT_ACTION,
+ GFX_ARG_ANIM_EVENT,
+ GFX_ARG_ANIM_EVENT_ACTION,
+ GFX_ARG_NAME,
+ GFX_ARG_SCALE_UP_FACTOR,
+ GFX_ARG_TILE_SIZE,
+ GFX_ARG_CLONE_FROM,
+ GFX_ARG_FADE_MODE,
+ GFX_ARG_FADE_DELAY,
+ GFX_ARG_POST_DELAY,
+ GFX_ARG_AUTO_DELAY,
+ GFX_ARG_AUTO_DELAY_UNIT,
+ GFX_ARG_ALIGN,
+ GFX_ARG_VALIGN,
+ GFX_ARG_SORT_PRIORITY,
+ GFX_ARG_CLASS,
+ GFX_ARG_STYLE,
+ GFX_ARG_ACTIVE_XOFFSET,
+ GFX_ARG_ACTIVE_YOFFSET,
+ GFX_ARG_PRESSED_XOFFSET,
+ GFX_ARG_PRESSED_YOFFSET,
+
+ NUM_GFX_ARGS
+};
// values for sound configuration suffixes
-#define SND_ARG_MODE_LOOP 0
-#define SND_ARG_VOLUME 1
-#define SND_ARG_PRIORITY 2
-
-#define NUM_SND_ARGS 3
+enum
+{
+ SND_ARG_MODE_LOOP = 0,
+ SND_ARG_VOLUME,
+ SND_ARG_PRIORITY,
+ NUM_SND_ARGS
+};
// values for music configuration suffixes
-#define MUS_ARG_MODE_LOOP 0
-
-#define NUM_MUS_ARGS 1
+enum
+{
+ MUS_ARG_MODE_LOOP = 0,
+ NUM_MUS_ARGS
+};
// values for font configuration (definitions must match those from main.c)
-#define FONT_INITIAL_1 0
-#define FONT_INITIAL_2 1
-#define FONT_INITIAL_3 2
-#define FONT_INITIAL_4 3
-#define FONT_TITLE_1 4
-#define FONT_TITLE_2 5
-#define FONT_MENU_1_ACTIVE 6
-#define FONT_MENU_2_ACTIVE 7
-#define FONT_MENU_1 8
-#define FONT_MENU_2 9
-#define FONT_TEXT_1_ACTIVE 10
-#define FONT_TEXT_2_ACTIVE 11
-#define FONT_TEXT_3_ACTIVE 12
-#define FONT_TEXT_4_ACTIVE 13
-#define FONT_TEXT_1 14
-#define FONT_TEXT_2 15
-#define FONT_TEXT_3 16
-#define FONT_TEXT_4 17
-#define FONT_ENVELOPE_1 18
-#define FONT_ENVELOPE_2 19
-#define FONT_ENVELOPE_3 20
-#define FONT_ENVELOPE_4 21
-#define FONT_REQUEST 22
-#define FONT_INPUT_1_ACTIVE 23
-#define FONT_INPUT_2_ACTIVE 24
-#define FONT_INPUT_1 25
-#define FONT_INPUT_2 26
-#define FONT_OPTION_OFF_NARROW 27
-#define FONT_OPTION_OFF 28
-#define FONT_OPTION_ON_NARROW 29
-#define FONT_OPTION_ON 30
-#define FONT_VALUE_1 31
-#define FONT_VALUE_2 32
-#define FONT_VALUE_OLD_NARROW 33
-#define FONT_VALUE_OLD 34
-#define FONT_VALUE_NARROW 35
-#define FONT_LEVEL_NUMBER_ACTIVE 36
-#define FONT_LEVEL_NUMBER 37
-#define FONT_TAPE_RECORDER 38
-#define FONT_GAME_INFO 39
-#define FONT_INFO_ELEMENTS 40
-#define FONT_INFO_LEVELSET 41
-#define FONT_MAIN_NETWORK_PLAYERS 42
-
-#define NUM_FONTS 43
+enum
+{
+ FONT_INITIAL_1 = MAIN_FONT_INITIAL_1,
+ FONT_INITIAL_2 = MAIN_FONT_INITIAL_2,
+ FONT_INITIAL_3 = MAIN_FONT_INITIAL_3,
+ FONT_INITIAL_4 = MAIN_FONT_INITIAL_4,
+ FONT_TITLE_1,
+ FONT_TITLE_2,
+ FONT_MENU_1_ACTIVE,
+ FONT_MENU_2_ACTIVE,
+ FONT_MENU_1,
+ FONT_MENU_2,
+ FONT_TEXT_1_ACTIVE,
+ FONT_TEXT_2_ACTIVE,
+ FONT_TEXT_3_ACTIVE,
+ FONT_TEXT_4_ACTIVE,
+ FONT_TEXT_1,
+ FONT_TEXT_2,
+ FONT_TEXT_3,
+ FONT_TEXT_4,
+ FONT_ENVELOPE_1,
+ FONT_ENVELOPE_2,
+ FONT_ENVELOPE_3,
+ FONT_ENVELOPE_4,
+ FONT_REQUEST,
+ FONT_INPUT_1_ACTIVE,
+ FONT_INPUT_2_ACTIVE,
+ FONT_INPUT_1,
+ FONT_INPUT_2,
+ FONT_OPTION_OFF_NARROW,
+ FONT_OPTION_OFF,
+ FONT_OPTION_ON_NARROW,
+ FONT_OPTION_ON,
+ FONT_VALUE_1,
+ FONT_VALUE_2,
+ FONT_VALUE_OLD_NARROW,
+ FONT_VALUE_OLD,
+ FONT_VALUE_NARROW,
+ FONT_LEVEL_NUMBER_ACTIVE,
+ FONT_LEVEL_NUMBER,
+ FONT_TAPE_RECORDER,
+ FONT_GAME_INFO,
+ FONT_INFO_ELEMENTS,
+ FONT_INFO_LEVELSET,
+ FONT_MAIN_NETWORK_PLAYERS,
+
+ NUM_FONTS
+};
+
#define NUM_INITIAL_FONTS 4
// values for toon animation configuration
#define IMG_GLOBAL_BORDER_LAST IMG_GLOBAL_BORDER_PLAYING
// values for game_status (must match special image configuration suffixes)
-#define GAME_MODE_DEFAULT 0
-#define GAME_MODE_LOADING 1
-#define GAME_MODE_TITLE_INITIAL 2
-#define GAME_MODE_TITLE_INITIAL_1 3
-#define GAME_MODE_TITLE_INITIAL_2 4
-#define GAME_MODE_TITLE_INITIAL_3 5
-#define GAME_MODE_TITLE_INITIAL_4 6
-#define GAME_MODE_TITLE_INITIAL_5 7
-#define GAME_MODE_TITLE 8
-#define GAME_MODE_TITLE_1 9
-#define GAME_MODE_TITLE_2 10
-#define GAME_MODE_TITLE_3 11
-#define GAME_MODE_TITLE_4 12
-#define GAME_MODE_TITLE_5 13
-#define GAME_MODE_MAIN 14
-#define GAME_MODE_LEVELS 15
-#define GAME_MODE_LEVELNR 16
-#define GAME_MODE_SCORES 17
-#define GAME_MODE_EDITOR 18
-#define GAME_MODE_INFO 19
-#define GAME_MODE_SETUP 20
-#define GAME_MODE_PLAYING 21
-#define GAME_MODE_PSEUDO_DOOR 22
-#define GAME_MODE_PSEUDO_TAPE 23
-#define GAME_MODE_PSEUDO_PANEL 24
-#define GAME_MODE_PSEUDO_PREVIEW 25
-#define GAME_MODE_PSEUDO_CRUMBLED 26
-#define GAME_MODE_PSEUDO_MAINONLY 27
-#define GAME_MODE_PSEUDO_TYPENAME 28
-#define GAME_MODE_PSEUDO_SUBMENU 29
-#define GAME_MODE_PSEUDO_MENU 30
-#define GAME_MODE_PSEUDO_TOONS 31
-#define GAME_MODE_PSEUDO_SCORESOLD 32
-#define GAME_MODE_PSEUDO_SCORESNEW 33
-#define GAME_MODE_PSEUDO_NO_TITLE 34
-#define GAME_MODE_PSEUDO_FADING 35
-#define GAME_MODE_QUIT 36
-
-#define NUM_GAME_MODES 37
+#define GAME_MODE_DEFAULT GFX_SPECIAL_ARG_DEFAULT
+#define GAME_MODE_LOADING GFX_SPECIAL_ARG_LOADING
+#define GAME_MODE_TITLE_INITIAL GFX_SPECIAL_ARG_TITLE_INITIAL
+#define GAME_MODE_TITLE_INITIAL_1 GFX_SPECIAL_ARG_TITLE_INITIAL_1
+#define GAME_MODE_TITLE_INITIAL_2 GFX_SPECIAL_ARG_TITLE_INITIAL_2
+#define GAME_MODE_TITLE_INITIAL_3 GFX_SPECIAL_ARG_TITLE_INITIAL_3
+#define GAME_MODE_TITLE_INITIAL_4 GFX_SPECIAL_ARG_TITLE_INITIAL_4
+#define GAME_MODE_TITLE_INITIAL_5 GFX_SPECIAL_ARG_TITLE_INITIAL_5
+#define GAME_MODE_TITLE GFX_SPECIAL_ARG_TITLE
+#define GAME_MODE_TITLE_1 GFX_SPECIAL_ARG_TITLE_1
+#define GAME_MODE_TITLE_2 GFX_SPECIAL_ARG_TITLE_2
+#define GAME_MODE_TITLE_3 GFX_SPECIAL_ARG_TITLE_3
+#define GAME_MODE_TITLE_4 GFX_SPECIAL_ARG_TITLE_4
+#define GAME_MODE_TITLE_5 GFX_SPECIAL_ARG_TITLE_5
+#define GAME_MODE_MAIN GFX_SPECIAL_ARG_MAIN
+#define GAME_MODE_NAMES GFX_SPECIAL_ARG_NAMES
+#define GAME_MODE_LEVELS GFX_SPECIAL_ARG_LEVELS
+#define GAME_MODE_LEVELNR GFX_SPECIAL_ARG_LEVELNR
+#define GAME_MODE_SCORES GFX_SPECIAL_ARG_SCORES
+#define GAME_MODE_EDITOR GFX_SPECIAL_ARG_EDITOR
+#define GAME_MODE_INFO GFX_SPECIAL_ARG_INFO
+#define GAME_MODE_SETUP GFX_SPECIAL_ARG_SETUP
+#define GAME_MODE_PLAYING GFX_SPECIAL_ARG_PLAYING
+#define GAME_MODE_PSEUDO_DOOR GFX_SPECIAL_ARG_DOOR
+#define GAME_MODE_PSEUDO_TAPE GFX_SPECIAL_ARG_TAPE
+#define GAME_MODE_PSEUDO_PANEL GFX_SPECIAL_ARG_PANEL
+#define GAME_MODE_PSEUDO_PREVIEW GFX_SPECIAL_ARG_PREVIEW
+#define GAME_MODE_PSEUDO_CRUMBLED GFX_SPECIAL_ARG_CRUMBLED
+#define GAME_MODE_PSEUDO_MAINONLY GFX_SPECIAL_ARG_MAINONLY
+#define GAME_MODE_PSEUDO_NAMESONLY GFX_SPECIAL_ARG_NAMESONLY
+#define GAME_MODE_PSEUDO_TYPENAME GFX_SPECIAL_ARG_TYPENAME
+#define GAME_MODE_PSEUDO_TYPENAMES GFX_SPECIAL_ARG_TYPENAMES
+#define GAME_MODE_PSEUDO_SUBMENU GFX_SPECIAL_ARG_SUBMENU
+#define GAME_MODE_PSEUDO_MENU GFX_SPECIAL_ARG_MENU
+#define GAME_MODE_PSEUDO_TOONS GFX_SPECIAL_ARG_TOONS
+#define GAME_MODE_PSEUDO_SCORESOLD GFX_SPECIAL_ARG_SCORESOLD
+#define GAME_MODE_PSEUDO_SCORESNEW GFX_SPECIAL_ARG_SCORESNEW
+#define GAME_MODE_PSEUDO_NO_TITLE GFX_SPECIAL_ARG_NO_TITLE
+#define GAME_MODE_PSEUDO_FADING GFX_SPECIAL_ARG_FADING
+#define GAME_MODE_QUIT GFX_SPECIAL_ARG_QUIT
+
+#define NUM_GAME_MODES NUM_SPECIAL_GFX_ARGS
// special definitions currently only used for custom artwork configuration
#define MUSIC_PREFIX_BACKGROUND 0
// program information and versioning definitions
#define PROGRAM_VERSION_SUPER 4
-#define PROGRAM_VERSION_MAJOR 1
-#define PROGRAM_VERSION_MINOR 1
-#define PROGRAM_VERSION_PATCH 1
+#define PROGRAM_VERSION_MAJOR 2
+#define PROGRAM_VERSION_MINOR 2
+#define PROGRAM_VERSION_PATCH 2
#define PROGRAM_VERSION_EXTRA ""
#define PROGRAM_TITLE_STRING "Rocks'n'Diamonds"
#define PROGRAM_AUTHOR_STRING "Holger Schemel"
#define PROGRAM_EMAIL_STRING "info@artsoft.org"
-#define PROGRAM_WEBSITE_STRING "http://www.artsoft.org/"
-#define PROGRAM_COPYRIGHT_STRING "Copyright \xa9""1995-2018 by Holger Schemel"
+#define PROGRAM_WEBSITE_STRING "https://www.artsoft.org/"
+#define PROGRAM_COPYRIGHT_STRING "Copyright \xa9""1995-2021 by Holger Schemel"
#define PROGRAM_COMPANY_STRING "A Game by Artsoft Entertainment"
#define PROGRAM_ICON_FILENAME "RocksIcon32x32.png"
#define AUTOPLAY_FFWD (1 << 1)
#define AUTOPLAY_WARP (1 << 2)
#define AUTOPLAY_TEST (1 << 3)
+#define AUTOPLAY_FIX (1 << 4)
#define AUTOPLAY_WARP_NO_DISPLAY AUTOPLAY_TEST
#define AUTOPLAY_MODE_NONE 0
#define AUTOPLAY_MODE_FFWD (AUTOPLAY_MODE_PLAY | AUTOPLAY_FFWD)
#define AUTOPLAY_MODE_WARP (AUTOPLAY_MODE_FFWD | AUTOPLAY_WARP)
#define AUTOPLAY_MODE_TEST (AUTOPLAY_MODE_WARP | AUTOPLAY_TEST)
+#define AUTOPLAY_MODE_FIX (AUTOPLAY_MODE_TEST | AUTOPLAY_FIX)
#define AUTOPLAY_MODE_WARP_NO_DISPLAY AUTOPLAY_MODE_TEST
struct TextPosInfo yes;
struct TextPosInfo no;
struct TextPosInfo confirm;
+
struct TextPosInfo player_1;
struct TextPosInfo player_2;
struct TextPosInfo player_3;
struct TextPosInfo player_4;
+
+ struct TextPosInfo touch_yes;
+ struct TextPosInfo touch_no;
+ struct TextPosInfo touch_confirm;
};
struct MenuMainButtonInfo
struct MenuPosInfo insert_solution;
struct MenuPosInfo play_solution;
+
+ struct MenuPosInfo switch_ecs_aga;
};
struct MenuMainTextInfo
struct TextPosInfo network_players;
};
+struct MenuSetupButtonInfo
+{
+ struct MenuPosInfo prev_player;
+ struct MenuPosInfo next_player;
+
+ struct MenuPosInfo touch_back;
+ struct MenuPosInfo touch_next;
+ struct MenuPosInfo touch_back2;
+ struct MenuPosInfo touch_next2;
+};
+
+struct MenuSetupInfo
+{
+ struct MenuSetupButtonInfo button;
+};
+
struct TitleFadingInfo
{
int fade_mode;
int fade_delay;
int post_delay;
int auto_delay;
+ int auto_delay_unit;
};
struct TitleMessageInfo
int fade_delay;
int post_delay;
int auto_delay;
+ int auto_delay_unit;
};
struct InitInfo
int scrollbar_xoffset;
+ struct MenuPosInfo list_setup[NUM_SPECIAL_GFX_SETUP_ARGS];
+
int list_size[NUM_SPECIAL_GFX_ARGS];
int list_size_info[NUM_SPECIAL_GFX_INFO_ARGS];
int music[NUM_SPECIAL_GFX_ARGS];
struct MenuMainInfo main;
+ struct MenuSetupInfo setup;
};
struct DoorInfo
int anim_mode;
int align;
int valign;
+ int sort_priority;
boolean autowrap;
boolean centered;
boolean wrap_single_words;
+
+ // run-time values
+ Bitmap *bitmap;
+ int sx, sy;
+ int xsize, ysize;
};
struct PreviewInfo
int step_offset;
int step_delay;
int anim_mode;
+
+ boolean redefined; // redefined by custom artwork
};
struct EditorTabsInfo
int android_move_time;
int android_clone_time;
boolean ball_random;
- boolean ball_state_initial;
+ boolean ball_active_initial;
int ball_time;
int lenses_score;
int magnify_score;
boolean sb_objects_needed; // all Sokoban objects must be solved
boolean auto_exit_sokoban; // automatically finish solved Sokoban levels
boolean solved_by_one_player; // level is solved if one player enters exit
+ boolean finish_dig_collect; // only finished dig/collect triggers ce action
boolean continuous_snapping; // repeated snapping without releasing key
boolean block_snap_field; // snapping blocks field to show animation
// ('int' instead of 'boolean' because used as selectbox value in editor)
int use_step_counter; // count steps instead of seconds for level
+ int time_score_base; // use time score for 1 or 10 seconds/steps
+
short field[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
boolean use_custom_template; // use custom properties from template file
boolean autoplay_all;
boolean autoplay_mode;
+ char *patchtapes_mode;
+ char *patchtapes_leveldir;
+ int patchtapes_level[MAX_TAPES_PER_SET];
+ boolean patchtapes_all;
+
char *convert_leveldir;
int convert_level_nr;
int anim_status_next;
boolean use_envelope_request;
+
+ char **user_names;
};
struct ElementChangeInfo
int drop_delay_random; // additional random delay after dropping
int move_delay_fixed; // constant delay after moving
int move_delay_random; // additional random delay after moving
+ int step_delay_fixed; // constant delay while moving
+ int step_delay_random; // additional random delay while moving
int move_pattern; // direction movable element moves to
int move_direction_initial; // initial direction element moves to
int music[NUM_GLOBAL_ANIM_PARTS_ALL][NUM_SPECIAL_GFX_ARGS];
};
+struct GlobalAnimEventListInfo
+{
+ int *event_value;
+ int num_event_values;
+};
+
+struct GlobalAnimEventInfo
+{
+ struct GlobalAnimEventListInfo **event_list;
+ int num_event_lists;
+};
+
struct GraphicInfo
{
Bitmap **bitmaps; // bitmaps in all required sizes
int init_delay_fixed; // optional initial delay values for global
int init_delay_random; // animations (pause interval before start)
+ int init_delay_action; // optional action called on animation start
int anim_delay_fixed; // optional delay values for bored/sleeping
int anim_delay_random; // and global animations (animation length)
+ int anim_delay_action; // optional action called on animation end
int post_delay_fixed; // optional delay values after bored/global
int post_delay_random; // animations (pause before next animation)
+ int post_delay_action; // optional action called after post delay
int init_event; // optional event triggering animation start
int init_event_action; // optional action called on animation start
int fade_delay; // optional setting for drawing title screens
int post_delay; // optional setting for drawing title screens
int auto_delay; // optional setting for drawing title screens
+ int auto_delay_unit; // optional setting for drawing title screens
int align, valign; // optional setting for drawing title screens
int sort_priority; // optional setting for drawing title screens
extern DrawBuffer *drawto_field;
extern int game_status;
-extern boolean game_status_last_screen;
+extern int game_status_last_screen;
extern boolean level_editor_test_game;
extern boolean network_playing;
-#if defined(TARGET_SDL)
-extern boolean network_server;
-extern SDL_Thread *server_thread;
-#endif
-
extern int key_joystick_mapping;
-extern short Feld[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
+extern short Tile[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
extern short Last[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
extern short MovPos[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
extern short MovDir[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
extern int BX2, BY2;
extern int SBX_Left, SBX_Right;
extern int SBY_Upper, SBY_Lower;
-extern int ZX, ZY;
extern int TimeFrames, TimePlayed, TimeLeft, TapeTime;
extern struct FontInfo font_info[];
extern struct GlobalAnimInfo global_anim_info[];
extern struct GlobalAnimNameInfo global_anim_name_info[];
+extern struct GlobalAnimEventInfo global_anim_event_info;
extern struct MusicPrefixInfo music_prefix_info[];
extern struct GraphicInfo *graphic_info;
extern struct SoundInfo *sound_info;