static int map_player_action[MAX_PLAYERS];
-static boolean TEST_game_team_mode;
-
/* ------------------------------------------------------------------------- */
/* definition of elements that automatically change to other elements after */
game.engine_version = (tape.playing ? tape.engine_version :
level.game_version);
+ /* set single or multi-player game mode (needed for re-playing tapes) */
+ game.team_mode = setup.team_mode;
+
+ if (tape.playing)
+ {
+ int num_players = 0;
+
+ for (i = 0; i < MAX_PLAYERS; i++)
+ if (tape.player_participates[i])
+ num_players++;
+
+ /* multi-player tapes contain input data for more than one player */
+ game.team_mode = (num_players > 1);
+ }
+
/* ---------------------------------------------------------------------- */
/* set flags for bugs and changes according to active game engine version */
/* ---------------------------------------------------------------------- */
local_player->connected = TRUE;
/* !!! SAME AS init.c:InitPlayerInfo() -- FIX THIS !!! */
- TEST_game_team_mode = setup.team_mode;
+#if 0
+ printf("::: TEAM MODE: %d\n", game.team_mode);
+#endif
if (tape.playing)
{
-#if 1
- int num_players = 0;
-
- for (i = 0; i < MAX_PLAYERS; i++)
- if (tape.player_participates[i])
- num_players++;
-
- TEST_game_team_mode = (num_players > 1);
-
- printf("::: TAPE TEAM MODE: %s (%d)\n",
- (TEST_game_team_mode ? "true" : "false"), num_players);
-#endif
-
#if 1
for (i = 0; i < MAX_PLAYERS; i++)
stored_player[i].connected = tape.player_participates[i];
stored_player[i].connected = TRUE;
#endif
}
- else if (setup.team_mode && !options.network)
+ else if (game.team_mode && !options.network)
{
/* try to guess locally connected team mode players (needed for correct
assignment of player figures from level to locally playing players) */
#if USE_NEW_PLAYER_ASSIGNMENTS
#if 1
- // if (!setup.team_mode)
- if (!TEST_game_team_mode)
+ if (!game.team_mode)
#endif
for (i = 0; i < MAX_PLAYERS; i++)
Feld[jx][jy] = EL_EMPTY;
}
}
+
#else
+
for (i = 0; i < MAX_PLAYERS; i++)
{
if (stored_player[i].active &&
}
#endif
}
- else if (!options.network && !setup.team_mode) /* && !tape.playing */
+ else if (!options.network && !game.team_mode) /* && !tape.playing */
{
/* when in single player mode, eliminate all but the first active player */
summarized_player_action |= stored_player[i].action;
#if 1
- if (!network_playing && (setup.team_mode || tape.playing))
+ if (!network_playing && (game.team_mode || tape.playing))
stored_player[i].effective_action = stored_player[i].action;
#else
if (!network_playing)
SendToServer_MovePlayer(summarized_player_action);
#endif
- if (!options.network && !setup.team_mode)
+ if (!options.network && !game.team_mode)
local_player->effective_action = summarized_player_action;
- if (setup.team_mode && setup.input_on_focus && game.centered_player_nr != -1)
+ if (tape.recording &&
+ setup.team_mode &&
+ setup.input_on_focus &&
+ game.centered_player_nr != -1)
{
for (i = 0; i < MAX_PLAYERS; i++)
stored_player[i].effective_action =
tape_action[i] = stored_player[i].effective_action;
#if 1
- /* (this can only happen in the R'n'D game engine) */
- if (setup.team_mode &&
- tape.recording &&
+ /* (this may happen in the RND game engine if a player was not present on
+ the playfield on level start, but appeared later from a custom element */
+ if (tape.recording &&
+ setup.team_mode &&
tape_action[i] &&
!tape.player_participates[i])
- tape.player_participates[i] = TRUE; /* player just appeared from CE */
+ tape.player_participates[i] = TRUE;
#else
/* (this can only happen in the R'n'D game engine) */
if (tape.recording && tape_action[i] && !tape.player_participates[i])
#if USE_NEW_PLAYER_ASSIGNMENTS
#if 1
- // if (setup.team_mode)
- if (TEST_game_team_mode)
+ if (game.team_mode)
#endif
{
byte mapped_action[MAX_PLAYERS];
#endif
#endif
-#if 0
- if (!options.network && !setup.team_mode)
- local_player->effective_action = summarized_player_action;
-#endif
-
#if 0
printf("::: summarized_player_action == %d\n",
local_player->effective_action);