lev.ball_time = cav.ball_time;
lev.ball_cnt = cav.ball_time;
- lev.ball_state = cav.ball_state;
+ lev.ball_active = cav.ball_active;
lev.ball_random = cav.ball_random;
lev.ball_pos = 0;
lev.shine_cnt = 0;
lev.lenses_time = cav.lenses_time;
- lev.lenses_cnt = cav.lenses_cnt;
+ lev.lenses_cnt = cav.lenses_active ? cav.lenses_time : 0;
lev.magnify_time = cav.magnify_time;
- lev.magnify_cnt = cav.magnify_cnt;
+ lev.magnify_cnt = cav.magnify_active ? cav.magnify_time : 0;
lev.wheel_time = cav.wheel_time;
- lev.wheel_cnt = cav.wheel_cnt;
+ lev.wheel_cnt = cav.wheel_active ? cav.wheel_time : 0;
lev.wheel_x = cav.wheel_x;
lev.wheel_y = cav.wheel_y;
lev.wind_time = cav.wind_time;
- lev.wind_cnt = cav.wind_cnt;
+ lev.wind_cnt = cav.wind_time;
lev.wind_direction = cav.wind_direction;
- lev.wonderwall_time = cav.wonderwall_time;
- lev.wonderwall_state = cav.wonderwall_state;
+ lev.wonderwall_time = cav.wonderwall_time;
+ lev.wonderwall_active = cav.wonderwall_active;
lev.killed_out_of_time = FALSE;
for (i = 0; i < GAME_TILE_MAX; i++)
lev.android_array[i] = map[cav.android_array[i]];
- /* determine number of players in this level */
lev.home_initial = 0;
+ /* check for players in this level */
for (i = 0; i < MAX_PLAYERS; i++)
{
- ply[i].exists = 0;
- ply[i].alive_initial = FALSE;
+ ply[i].exists = FALSE;
+ ply[i].alive = FALSE;
if (cav.player_x[i] != -1 &&
cav.player_y[i] != -1)
{
- ply[i].exists = 1;
+ ply[i].exists = TRUE;
lev.home_initial++;
}
lev.home = lev.home_initial;
players_left = lev.home_initial;
+ /* assign active players */
for (i = 0; i < MAX_PLAYERS; i++)
{
- if (ply[i].exists)
+ if (ply[i].exists && isActivePlayer_EM(i))
{
if (players_left)
{
- ply[i].alive_initial = TRUE;
+ ply[i].alive = TRUE;
players_left--;
}
- else
- {
- int x = cav.player_x[i];
- int y = cav.player_y[i];
+ }
+ }
- lev.cave[lev.left + x][lev.top + y] = Xblank;
- lev.next[lev.left + x][lev.top + y] = Xblank;
- lev.draw[lev.left + x][lev.top + y] = Xblank;
- }
+ /* remove inactive players */
+ for (i = 0; i < MAX_PLAYERS; i++)
+ {
+ if (ply[i].exists && !ply[i].alive)
+ {
+ int x = cav.player_x[i];
+ int y = cav.player_y[i];
+
+ lev.cave[lev.left + x][lev.top + y] = Xblank;
+ lev.next[lev.left + x][lev.top + y] = Xblank;
+ lev.draw[lev.left + x][lev.top + y] = Xblank;
}
}
for (i = 0; i < MAX_PLAYERS; i++)
{
ply[i].num = i;
- ply[i].alive = ply[i].alive_initial;
- ply[i].dynamite = 0;
- ply[i].dynamite_cnt = 0;
- ply[i].keys = 0;
- ply[i].anim = 0;
- ply[i].oldx = ply[i].x = cav.player_x[i] + lev.left;
- ply[i].oldy = ply[i].y = cav.player_y[i] + lev.top;
+ ply[i].anim = PLY_still;
+
+ ply[i].x = cav.player_x[i] + lev.left;
+ ply[i].y = cav.player_y[i] + lev.top;
+ ply[i].prev_x = ply[i].x;
+ ply[i].prev_y = ply[i].y;
+
+ ply[i].dynamite = 0;
+ ply[i].dynamite_cnt = 0;
+ ply[i].keys = 0;
+
ply[i].last_move_dir = MV_NONE;
- ply[i].joy_n = ply[i].joy_e = ply[i].joy_s = ply[i].joy_w = 0;
- ply[i].joy_snap = ply[i].joy_drop = 0;
- ply[i].joy_stick = ply[i].joy_spin = 0;
+
+ ply[i].joy_n = FALSE;
+ ply[i].joy_e = FALSE;
+ ply[i].joy_s = FALSE;
+ ply[i].joy_w = FALSE;
+ ply[i].joy_snap = FALSE;
+ ply[i].joy_drop = FALSE;
+ ply[i].joy_stick = FALSE;
}
// the following engine variables are initialized to version-specific values