minor change of preprocessor macro
[rocksndiamonds.git] / src / game.c
index 5d9e473b0d412d0cd976ff55ec44ece8308d33c5..504e2d89cf341a2075fb0ed7181bc28c3a87a9e8 100644 (file)
@@ -3280,21 +3280,32 @@ static void InitGameEngine(void)
   if (level.game_engine_type == GAME_ENGINE_TYPE_SP)
     level.time = 0;
 
-  // ----------initialize flag for handling mouse events ---------------------
+  // ---------- initialize flags for handling game actions --------------------
 
-  // set flag to default value: do not handle mouse events
-  game.use_mouse_events = FALSE;
+  // set flags for game actions to default values
+  game.use_key_actions = TRUE;
+  game.use_mouse_actions = FALSE;
 
-  // now check for custom elements which have mouse click events defined
-  for (i = 0; i < NUM_CUSTOM_ELEMENTS; i++)
+  // when using Mirror Magic game engine, handle mouse events only
+  if (level.game_engine_type == GAME_ENGINE_TYPE_MM)
   {
-    int element = EL_CUSTOM_START + i;
+    game.use_key_actions = FALSE;
+    game.use_mouse_actions = TRUE;
+  }
 
-    if (HAS_CHANGE_EVENT(element, CE_CLICKED_BY_MOUSE) ||
-       HAS_CHANGE_EVENT(element, CE_PRESSED_BY_MOUSE) ||
-       HAS_CHANGE_EVENT(element, CE_MOUSE_CLICKED_ON_X) ||
-       HAS_CHANGE_EVENT(element, CE_MOUSE_PRESSED_ON_X))
-      game.use_mouse_events = TRUE;
+  // check for custom elements with mouse click events
+  if (level.game_engine_type == GAME_ENGINE_TYPE_RND)
+  {
+    for (i = 0; i < NUM_CUSTOM_ELEMENTS; i++)
+    {
+      int element = EL_CUSTOM_START + i;
+
+      if (HAS_CHANGE_EVENT(element, CE_CLICKED_BY_MOUSE) ||
+         HAS_CHANGE_EVENT(element, CE_PRESSED_BY_MOUSE) ||
+         HAS_CHANGE_EVENT(element, CE_MOUSE_CLICKED_ON_X) ||
+         HAS_CHANGE_EVENT(element, CE_MOUSE_PRESSED_ON_X))
+       game.use_mouse_actions = TRUE;
+    }
   }
 }
 
@@ -3408,6 +3419,13 @@ void InitGame(void)
   InitGameEngine();
   InitGameControlValues();
 
+  // initialize tape actions from game when recording tape
+  if (tape.recording)
+  {
+    tape.use_key_actions   = game.use_key_actions;
+    tape.use_mouse_actions = game.use_mouse_actions;
+  }
+
   // don't play tapes over network
   network_playing = (network.enabled && !tape.playing);
 
@@ -11165,7 +11183,7 @@ static byte PlayerActions(struct PlayerInfo *player, byte player_action)
 static void SetMouseActionFromTapeAction(struct MouseActionInfo *mouse_action,
                                         byte *tape_action)
 {
-  if (!tape.use_mouse)
+  if (!tape.use_mouse_actions)
     return;
 
   mouse_action->lx     = tape_action[TAPE_ACTION_LX];
@@ -11176,7 +11194,7 @@ static void SetMouseActionFromTapeAction(struct MouseActionInfo *mouse_action,
 static void SetTapeActionFromMouseAction(byte *tape_action,
                                         struct MouseActionInfo *mouse_action)
 {
-  if (!tape.use_mouse)
+  if (!tape.use_mouse_actions)
     return;
 
   tape_action[TAPE_ACTION_LX]     = mouse_action->lx;
@@ -11374,7 +11392,7 @@ static void GameActionsExt(void)
   unsigned int game_frame_delay_value;
   byte *recorded_player_action;
   byte summarized_player_action = 0;
-  byte tape_action[MAX_PLAYERS];
+  byte tape_action[MAX_TAPE_ACTIONS] = { 0 };
   int i;
 
   // detect endless loops, caused by custom element programming
@@ -11899,8 +11917,8 @@ void GameActions_RND(void)
   {
     int new_button = (mouse_action.button && mouse_action_last.button == 0);
 
-    x = local_player->mouse_action.lx;
-    y = local_player->mouse_action.ly;
+    x = mouse_action.lx;
+    y = mouse_action.ly;
     element = Feld[x][y];
 
     if (new_button)