From fc75248be965e2d68ebc16af009fefb30e9ac370 Mon Sep 17 00:00:00 2001 From: Holger Schemel Date: Sat, 18 Apr 2020 00:40:17 +0200 Subject: [PATCH] added new change action "move player new" to CE change actions The difference to the already existing change action "move player" is that "move player new" only moves the player if this starts a "new" movement (that is, the player is either not moving at all yet, or has just finished moving to the next tile). This is useful to prevent the case of an apparent "two-step movement" caused by moving the player right after a movement has just started, which then adds a "second" movement after the "first" movement. --- src/editor.c | 6 ++++-- src/game.c | 5 ++++- src/main.h | 1 + 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/editor.c b/src/editor.c index 838a898d..7931d896 100644 --- a/src/editor.c +++ b/src/editor.c @@ -2092,10 +2092,11 @@ static struct ValueTextInfo options_action_type[] = { CA_SET_LEVEL_SCORE, "set score" }, { CA_SET_LEVEL_GEMS, "set gems" }, { CA_SET_LEVEL_WIND, "set wind dir." }, - { CA_SET_LEVEL_RANDOM_SEED, "set rand. seed" }, + { CA_SET_LEVEL_RANDOM_SEED, "set random seed" }, { CA_UNDEFINED, " " }, { CA_HEADLINE_PLAYER_ACTIONS, "[player]" }, { CA_MOVE_PLAYER, "move player" }, + { CA_MOVE_PLAYER_NEW, "move player new" }, { CA_EXIT_PLAYER, "exit player" }, { CA_KILL_PLAYER, "kill player" }, { CA_SET_PLAYER_KEYS, "set keys" }, @@ -2421,6 +2422,7 @@ action_arg_options[] = { CA_EXIT_PLAYER, 0, options_action_arg_player, }, { CA_KILL_PLAYER, 0, options_action_arg_player, }, { CA_MOVE_PLAYER, 0, options_action_arg_direction, }, + { CA_MOVE_PLAYER_NEW, 0, options_action_arg_direction, }, { CA_RESTART_LEVEL, 0, options_action_arg_none, }, { CA_SHOW_ENVELOPE, 0, options_action_arg_envelope, }, { CA_SET_LEVEL_TIME, 3, options_action_arg_number, }, @@ -2673,7 +2675,7 @@ static struct { ED_ELEMENT_SETTINGS_XPOS(1), ED_ELEMENT_SETTINGS_YPOS(13), GADGET_ID_ACTION_TYPE, GADGET_ID_NONE, - -1, + 15, options_action_type, &custom_element_change.action_type, NULL, NULL, NULL, "action on specified condition" diff --git a/src/game.c b/src/game.c index fd1bdc53..d73efcfb 100644 --- a/src/game.c +++ b/src/game.c @@ -9880,11 +9880,14 @@ static void ExecuteCustomElementAction(int x, int y, int element, int page) // ---------- player actions --------------------------------------------- case CA_MOVE_PLAYER: + case CA_MOVE_PLAYER_NEW: { // automatically move to the next field in specified direction for (i = 0; i < MAX_PLAYERS; i++) if (trigger_player_bits & (1 << i)) - stored_player[i].programmed_action = action_arg_direction; + if (action_type == CA_MOVE_PLAYER || + stored_player[i].MovPos == 0) + stored_player[i].programmed_action = action_arg_direction; break; } diff --git a/src/main.h b/src/main.h index 41af237f..75ed2ee8 100644 --- a/src/main.h +++ b/src/main.h @@ -373,6 +373,7 @@ #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 -- 2.34.1