added optional button to restart game (door, panel and touch variants)
[rocksndiamonds.git] / src / game.h
index aed0ce0483c078db0dbcba53fa54b39b7769e110..3752ba00a7ed37d657bcb9a59b281cf54b9fb86a 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/
 // ----------------------------------------------------------------------------
 // game.h
 // ============================================================================
 #define STR_SNAPSHOT_MODE_EVERY_COLLECT        "every_collect"
 #define STR_SNAPSHOT_MODE_DEFAULT      STR_SNAPSHOT_MODE_OFF
 
+#define STR_SCORES_TYPE_LOCAL_ONLY      "local_scores_only"
+#define STR_SCORES_TYPE_SERVER_ONLY     "server_scores_only"
+#define STR_SCORES_TYPE_LOCAL_AND_SERVER "local_and_server_scores"
+#define STR_SCORES_TYPE_DEFAULT                 STR_SCORES_TYPE_LOCAL_AND_SERVER
+
 #define SNAPSHOT_MODE_OFF              0
 #define SNAPSHOT_MODE_EVERY_STEP       1
 #define SNAPSHOT_MODE_EVERY_MOVE       2
@@ -118,6 +123,8 @@ struct GameButtonInfo
   struct XY pause2;
   struct XY load;
 
+  struct XY restart;
+
   struct XY sound_music;
   struct XY sound_loops;
   struct XY sound_simple;
@@ -126,9 +133,15 @@ struct GameButtonInfo
   struct XY panel_pause;
   struct XY panel_play;
 
+  struct XY panel_restart;
+
   struct XY panel_sound_music;
   struct XY panel_sound_loops;
   struct XY panel_sound_simple;
+
+  struct XY touch_stop;
+  struct XY touch_pause;
+  struct XY touch_restart;
 };
 
 struct GameSnapshotInfo
@@ -153,6 +166,10 @@ struct GameInfo
   boolean use_native_emc_graphics_engine;
   boolean use_native_sp_graphics_engine;
   boolean use_masked_pushing;
+  boolean use_masked_elements;
+  boolean use_masked_elements_initial;
+  int forced_scroll_x;
+  int forced_scroll_y;
   int forced_scroll_delay_value;
   int scroll_delay_value;
   int tile_size;
@@ -175,6 +192,10 @@ struct GameInfo
   boolean max_num_changes_per_frame;
   boolean use_reverse_scan_direction;
 
+  // flags to indicate which game actions are used in this game
+  boolean use_key_actions;
+  boolean use_mouse_actions;
+
   // variable within running game
   int yamyam_content_nr;
   boolean robot_wheel_active;
@@ -189,7 +210,11 @@ struct GameInfo
 
   boolean explosions_delayed;
   boolean envelope_active;
-  boolean no_time_limit;       // (variable only in very special case)
+  boolean no_level_time_limit; // (variable only in very special case)
+  boolean time_limit;          // forced by levelset config or setup option
+
+  int time_final;              // time (in seconds) or steps left or played
+  int score_time_final;                // time (in frames) or steps played
 
   int score;
   int score_final;
@@ -204,12 +229,15 @@ struct GameInfo
   int players_still_needed;
   int friends_still_needed;
 
+  int robot_wheel_x, robot_wheel_y;
+  int exit_x, exit_y;
+
   boolean all_players_gone;
 
   // values for the new EMC elements
   int lenses_time_left;
   int magnify_time_left;
-  boolean ball_state;
+  boolean ball_active;
   int ball_content_nr;
 
   // values for player idle animation (no effect on engine)
@@ -221,9 +249,6 @@ struct GameInfo
   // values for special game initialization control
   boolean restart_level;
 
-  // trigger message to ask for restarting the game
-  char *restart_game_message;
-
   // values for special request dialog control
   boolean request_active;
 
@@ -231,6 +256,10 @@ struct GameInfo
   int centered_player_nr;
   int centered_player_nr_next;
   boolean set_centered_player;
+  boolean set_centered_player_wrap;
+
+  // values for single step mode control
+  boolean enter_single_step_mode;
 
   // values for random number generator initialization after snapshot
   unsigned int num_random_calls;
@@ -240,6 +269,7 @@ struct GameInfo
 
   // values for handling states for solved level and game over
   boolean LevelSolved;
+  boolean GamePlayed;
   boolean GameOver;
 
   boolean LevelSolved_GameWon;
@@ -250,6 +280,8 @@ struct GameInfo
   int LevelSolved_CountingTime;
   int LevelSolved_CountingScore;
   int LevelSolved_CountingHealth;
+
+  boolean RestartGameRequested;
 };
 
 struct PlayerInfo
@@ -271,12 +303,12 @@ struct PlayerInfo
   int client_nr;               // network client identifier
 
   byte action;                 // action from local input device
-  byte mapped_action;          // action mapped from device to player
   byte effective_action;       /* action acknowledged from network server
                                   or summarized over all configured input
                                   devices when in single player mode */
   byte programmed_action;      /* action forced by game itself (like moving
                                   through doors); overrides other actions */
+  byte snap_action;            // action from TAS snap keys
 
   struct MouseActionInfo mouse_action;          // (used by MM engine only)
   struct MouseActionInfo effective_mouse_action; // (used by MM engine only)
@@ -352,7 +384,7 @@ struct PlayerInfo
   int push_delay;
   int push_delay_value;
 
-  unsigned int actual_frame_counter;
+  DelayCounter actual_frame_counter;
 
   int drop_delay;
   int drop_pressed_delay;
@@ -365,6 +397,8 @@ struct PlayerInfo
   int shield_normal_time_left;
   int shield_deadly_time_left;
 
+  int last_removed_element;
+
   int inventory_element[MAX_INVENTORY_SIZE];
   int inventory_infinite_element;
   int inventory_size;
@@ -383,7 +417,7 @@ int GetElementFromGroupElement(int);
 
 int getPlayerInventorySize(int);
 
-void DrawGameValue_Time(int);
+void UpdateGameDoorValues(void);
 void DrawGameDoorValues(void);
 
 void UpdateAndDisplayGameControlValues(void);
@@ -395,9 +429,13 @@ void UpdateEngineValues(int, int, int, int);
 void GameWon(void);
 void GameEnd(void);
 
+void MergeServerScore(void);
+
 void InitPlayerGfxAnimation(struct PlayerInfo *, int, int);
+
 void Moving2Blocked(int, int, int *, int *);
 void Blocked2Moving(int, int, int *, int *);
+
 void DrawDynamite(int, int);
 
 void StartGameActions(boolean, boolean, int);
@@ -424,9 +462,8 @@ void RaiseScoreElement(int);
 
 void RequestQuitGameExt(boolean, boolean, char *);
 void RequestQuitGame(boolean);
-void RequestRestartGame(char *);
-void CheckGameOver(void);
 
+boolean CheckRestartGame(void);
 boolean checkGameSolved(void);
 boolean checkGameFailed(void);
 boolean checkGameEnded(void);
@@ -446,8 +483,9 @@ boolean CheckEngineSnapshotList(void);
 
 void CreateGameButtons(void);
 void FreeGameButtons(void);
+void MapLoadSaveButtons(void);
 void MapUndoRedoButtons(void);
-void UnmapUndoRedoButtons(void);
+void ModifyPauseButtons(void);
 void MapGameButtons(void);
 void UnmapGameButtons(void);
 void RedrawGameButtons(void);