The previous solution using bitmasks was simply over-engineered.
local_player->mouse_action.ly = ly;
local_player->mouse_action.button = button;
- if (tape.recording && tape.pausing && (tape.event_mask & GAME_EVENTS_MOUSE))
+ if (tape.recording && tape.pausing && tape.use_mouse_actions)
{
// un-pause a paused game only if mouse button was newly pressed down
if (new_button)
{
if (strEqual(setup.touch.control_type, TOUCH_CONTROL_FOLLOW_FINGER))
HandleButtonOrFinger_FollowFinger(mx, my, button);
- else if ((game.event_mask & GAME_EVENTS_MOUSE) && valid_mouse_event)
+ else if (game.use_mouse_actions && valid_mouse_event)
SetPlayerMouseAction(mx, my, button);
}
}
if (stored_player[pnr].snap_action)
stored_player[pnr].action |= JOY_BUTTON_SNAP;
- if (tape.recording && tape.pausing && (tape.event_mask & GAME_EVENTS_KEYS))
+ if (tape.recording && tape.pausing && tape.use_key_actions)
{
if (tape.single_step)
{
return;
}
- if (tape.recording && tape.pausing && (tape.event_mask & GAME_EVENTS_KEYS))
+ if (tape.recording && tape.pausing && tape.use_key_actions)
{
if (tape.single_step)
{
{
int tape_pos_size = 0;
- if (tape->event_mask & GAME_EVENTS_KEYS)
+ if (tape->use_key_actions)
tape_pos_size += tape->num_participating_players;
- if (tape->event_mask & GAME_EVENTS_MOUSE)
+ if (tape->use_mouse_actions)
tape_pos_size += 3; // x and y position and mouse button mask
tape_pos_size += 1; // tape action delay value
return tape_pos_size;
}
-static int getGameEventMaskFromTapeEventValue(int value)
+static void setTapeActionFlags(struct TapeInfo *tape, int value)
{
- switch (value)
- {
- case TAPE_EVENTS_KEYS_ONLY:
- return GAME_EVENTS_KEYS;
-
- case TAPE_EVENTS_MOUSE_ONLY:
- return GAME_EVENTS_MOUSE;
+ tape->use_key_actions = FALSE;
+ tape->use_mouse_actions = FALSE;
- case TAPE_EVENTS_KEYS_AND_MOUSE:
- return GAME_EVENTS_KEYS | GAME_EVENTS_MOUSE;
+ if (value != TAPE_USE_MOUSE_ACTIONS_ONLY)
+ tape->use_key_actions = TRUE;
- default:
- return GAME_EVENTS_DEFAULT;
- }
+ if (value != TAPE_USE_KEY_ACTIONS_ONLY)
+ tape->use_mouse_actions = TRUE;
}
-static int getTapeEventValueFromGameEventMask(int mask)
+static int getTapeActionValue(struct TapeInfo *tape)
{
- switch (mask)
- {
- case GAME_EVENTS_KEYS:
- return TAPE_EVENTS_KEYS_ONLY;
-
- case GAME_EVENTS_MOUSE:
- return TAPE_EVENTS_MOUSE_ONLY;
-
- case GAME_EVENTS_KEYS | GAME_EVENTS_MOUSE:
- return TAPE_EVENTS_KEYS_AND_MOUSE;
-
- default:
- return TAPE_EVENTS_DEFAULT;
- }
+ return (tape->use_key_actions &&
+ tape->use_mouse_actions ? TAPE_USE_KEY_AND_MOUSE_ACTIONS :
+ tape->use_key_actions ? TAPE_USE_KEY_ACTIONS_ONLY :
+ tape->use_mouse_actions ? TAPE_USE_MOUSE_ACTIONS_ONLY :
+ TAPE_ACTIONS_DEFAULT);
}
static int LoadTape_VERS(File *file, int chunk_size, struct TapeInfo *tape)
}
}
- tape->event_mask = getGameEventMaskFromTapeEventValue(getFile8Bit(file));
+ setTapeActionFlags(tape, getFile8Bit(file));
ReadUnusedBytesFromFile(file, TAPE_CHUNK_HEAD_UNUSED);
break;
}
- if (tape->event_mask & GAME_EVENTS_KEYS)
+ if (tape->use_key_actions)
{
for (j = 0; j < MAX_PLAYERS; j++)
{
}
}
- if (tape->event_mask & GAME_EVENTS_MOUSE)
+ if (tape->use_mouse_actions)
{
tape->pos[i].action[TAPE_ACTION_LX] = getFile8Bit(file);
tape->pos[i].action[TAPE_ACTION_LY] = getFile8Bit(file);
putFile8Bit(file, store_participating_players);
- putFile8Bit(file, getTapeEventValueFromGameEventMask(tape->event_mask));
+ putFile8Bit(file, getTapeActionValue(tape));
// unused bytes not at the end here for 4-byte alignment of engine_version
WriteUnusedBytesToFile(file, TAPE_CHUNK_HEAD_UNUSED);
for (i = 0; i < tape->length; i++)
{
- if (tape->event_mask & GAME_EVENTS_KEYS)
+ if (tape->use_key_actions)
{
for (j = 0; j < MAX_PLAYERS; j++)
if (tape->player_participates[j])
putFile8Bit(file, tape->pos[i].action[j]);
}
- if (tape->event_mask & GAME_EVENTS_MOUSE)
+ if (tape->use_mouse_actions)
{
putFile8Bit(file, tape->pos[i].action[TAPE_ACTION_LX]);
putFile8Bit(file, tape->pos[i].action[TAPE_ACTION_LY]);
if (level.game_engine_type == GAME_ENGINE_TYPE_SP)
level.time = 0;
- // ---------- initialize mask for handling game action events ---------------
+ // ---------- initialize flags for handling game actions --------------------
- // set game action events mask to default value
- game.event_mask = GAME_EVENTS_DEFAULT;
+ // set flags for game actions to default values
+ game.use_key_actions = TRUE;
+ game.use_mouse_actions = FALSE;
// when using Mirror Magic game engine, handle mouse events only
if (level.game_engine_type == GAME_ENGINE_TYPE_MM)
- game.event_mask = GAME_EVENTS_MOUSE;
+ {
+ game.use_key_actions = FALSE;
+ game.use_mouse_actions = TRUE;
+ }
// check for custom elements with mouse click events
if (level.game_engine_type == GAME_ENGINE_TYPE_RND)
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.event_mask = GAME_EVENTS_KEYS | GAME_EVENTS_MOUSE;
+ game.use_mouse_actions = TRUE;
}
}
}
InitGameEngine();
InitGameControlValues();
- // initialize tape action events from game when recording tape
+ // initialize tape actions from game when recording tape
if (tape.recording)
- tape.event_mask = game.event_mask;
+ {
+ 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);
static void SetMouseActionFromTapeAction(struct MouseActionInfo *mouse_action,
byte *tape_action)
{
- if (!(tape.event_mask & GAME_EVENTS_MOUSE))
+ if (!tape.use_mouse_actions)
return;
mouse_action->lx = tape_action[TAPE_ACTION_LX];
static void SetTapeActionFromMouseAction(byte *tape_action,
struct MouseActionInfo *mouse_action)
{
- if (!(tape.event_mask & GAME_EVENTS_MOUSE))
+ if (!tape.use_mouse_actions)
return;
tape_action[TAPE_ACTION_LX] = mouse_action->lx;
#define SNAPSHOT_MODE_EVERY_COLLECT 3
#define SNAPSHOT_MODE_DEFAULT SNAPSHOT_MODE_OFF
-// values for game action events handled by game engine
-#define GAME_EVENTS_NONE 0
-#define GAME_EVENTS_KEYS (1 << 0)
-#define GAME_EVENTS_MOUSE (1 << 1)
-
-#define GAME_EVENTS_DEFAULT GAME_EVENTS_KEYS
-
struct GamePanelInfo
{
boolean max_num_changes_per_frame;
boolean use_reverse_scan_direction;
- // bit mask to indicate game action events handled by game engine
- int event_mask;
+ // 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;
tape.centered_player_nr_next = -1;
tape.set_centered_player = FALSE;
- tape.event_mask = GAME_EVENTS_DEFAULT;
+ // set flags for game actions to default values (may be overwritten later)
+ tape.use_key_actions = TRUE;
+ tape.use_mouse_actions = FALSE;
}
static void TapeRewind(void)
for (i = 0; i < MAX_TAPE_ACTIONS; i++)
action[i] = action_raw[i];
- if ((tape.event_mask & GAME_EVENTS_KEYS) && tape.set_centered_player)
+ if (tape.use_key_actions && tape.set_centered_player)
{
for (i = 0; i < MAX_PLAYERS; i++)
if (tape.centered_player_nr_next == i ||
tape.set_centered_player = FALSE;
tape.centered_player_nr_next = -999;
- if (tape.event_mask & GAME_EVENTS_KEYS)
+ if (tape.use_key_actions)
{
for (i = 0; i < MAX_PLAYERS; i++)
{
// values for tape properties
#define MAX_TAPE_LEN (1000 * FRAMES_PER_SECOND) // max.time x fps
-// values for tape mouse actions
+// values for tape action array positions
#define TAPE_ACTION_LX (MAX_PLAYERS + 0)
#define TAPE_ACTION_LY (MAX_PLAYERS + 1)
#define TAPE_ACTION_BUTTON (MAX_PLAYERS + 2)
#define MAX_TAPE_ACTIONS (MAX_PLAYERS + 3)
-// values for tape action events stored in tape file
-#define TAPE_EVENTS_KEYS_ONLY 0
-#define TAPE_EVENTS_MOUSE_ONLY 1
-#define TAPE_EVENTS_KEYS_AND_MOUSE 2
+// values for tape actions stored in tape file
+#define TAPE_USE_KEY_ACTIONS_ONLY 0
+#define TAPE_USE_MOUSE_ACTIONS_ONLY 1
+#define TAPE_USE_KEY_AND_MOUSE_ACTIONS 2
-#define TAPE_EVENTS_DEFAULT TAPE_EVENTS_KEYS_ONLY
+#define TAPE_ACTIONS_DEFAULT TAPE_USE_KEY_ACTIONS_ONLY
// some positions in the video tape control window
#define VIDEO_DISPLAY1_XPOS 5
int centered_player_nr_next;
boolean set_centered_player;
- int event_mask; // game action events stored in tape actions
+ // flags to indicate which game actions are stored in this tape
+ boolean use_key_actions;
+ boolean use_mouse_actions;
struct
{