added creating engine snapshots when using mouse click events
[rocksndiamonds.git] / src / main.h
index 1a23e6d1fa8cc178f1ce56ebad4a00bcd6330164..0ab4907d5db570a8e3cb73b3255d77aba0f54ce9 100644 (file)
@@ -4,7 +4,7 @@
 // (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
 #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
@@ -2312,6 +2324,7 @@ 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,
@@ -2547,16 +2560,16 @@ enum
 
 // program information and versioning definitions
 #define PROGRAM_VERSION_SUPER          4
-#define PROGRAM_VERSION_MAJOR          1
-#define PROGRAM_VERSION_MINOR          3
-#define PROGRAM_VERSION_PATCH          1
+#define PROGRAM_VERSION_MAJOR          2
+#define PROGRAM_VERSION_MINOR          0
+#define PROGRAM_VERSION_PATCH          3
 #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-2019 by Holger Schemel"
+#define PROGRAM_WEBSITE_STRING         "https://www.artsoft.org/"
+#define PROGRAM_COPYRIGHT_STRING       "Copyright \xa9""1995-2020 by Holger Schemel"
 #define PROGRAM_COMPANY_STRING         "A Game by Artsoft Entertainment"
 
 #define PROGRAM_ICON_FILENAME          "RocksIcon32x32.png"
@@ -2628,6 +2641,7 @@ enum
 #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
@@ -2635,6 +2649,7 @@ enum
 #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
 
 
@@ -2680,6 +2695,8 @@ struct MenuMainButtonInfo
 
   struct MenuPosInfo insert_solution;
   struct MenuPosInfo play_solution;
+
+  struct MenuPosInfo switch_ecs_aga;
 };
 
 struct MenuMainTextInfo
@@ -3115,7 +3132,7 @@ struct LevelInfo
   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;
@@ -3204,6 +3221,11 @@ struct GlobalInfo
   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;
 
@@ -3617,12 +3639,10 @@ extern int                      game_status;
 extern boolean                 game_status_last_screen;
 extern boolean                 level_editor_test_game;
 extern boolean                 network_playing;
-extern boolean                 network_server;
-extern SDL_Thread             *server_thread;
 
 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];