X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fgame.c;h=504e2d89cf341a2075fb0ed7181bc28c3a87a9e8;hb=f645e74fab72d2bc94db81ea937904a865d5831e;hp=5d9e473b0d412d0cd976ff55ec44ece8308d33c5;hpb=f681967164edaa7709d1082327fa7c309e05fd87;p=rocksndiamonds.git diff --git a/src/game.c b/src/game.c index 5d9e473b..504e2d89 100644 --- a/src/game.c +++ b/src/game.c @@ -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)