[Cbomb] = Xbomb,
[Cnut] = Xnut,
[Cspring] = Xspring,
+ [Cspring_e] = Xspring_e,
+ [Cspring_w] = Xspring_w,
[Cpush_emerald_e] = Xpush_emerald_e,
[Cpush_emerald_w] = Xpush_emerald_w,
[Cpush_diamond_e] = Xpush_diamond_e,
{
if (element_em_cave < 0 || element_em_cave >= CAVE_TILE_MAX)
{
- Error(ERR_WARN, "invalid EM cave element %d", element_em_cave);
+ Warn("invalid EM cave element %d", element_em_cave);
return Xblank;
}
if (element_em_game < 0 || element_em_game >= GAME_TILE_MAX)
{
- Error(ERR_WARN, "invalid EM game element %d", element_em_game);
+ Warn("invalid EM game element %d", element_em_game);
return Cblank;
}
int element_em_cave = map_reverse[element_em_game];
if (element_em_cave == Cblank && element_em_game != Xblank)
- Error(ERR_WARN, "unknown EM game element %d", element_em_game);
+ Warn("unknown EM game element %d", element_em_game);
return element_em_cave;
}
lev.right = lev.left + lev.width;
lev.bottom = lev.top + lev.height;
- if (cav.infinite)
+ lev.infinite = game_em.use_wrap_around;
+ lev.infinite_true = cav.infinite_true;
+
+ if (lev.infinite)
{
/* add linked cave buffer columns for wrap-around movement */
for (x = 0; x < lev.left; x++)
{
- lev.cavecol[x] = lev.cavecol[lev.width + x];
- lev.nextcol[x] = lev.nextcol[lev.width + x];
- lev.drawcol[x] = lev.drawcol[lev.width + x];
- lev.boomcol[x] = lev.boomcol[lev.width + x];
-
- lev.cavecol[lev.right + x] = lev.cavecol[lev.left + x];
- lev.nextcol[lev.right + x] = lev.nextcol[lev.left + x];
- lev.drawcol[lev.right + x] = lev.drawcol[lev.left + x];
- lev.boomcol[lev.right + x] = lev.boomcol[lev.left + x];
+ int offset = (lev.infinite_true ? 0 : 1);
+
+ lev.cavecol[x] = &lev.cavecol[lev.width + x][-offset];
+ lev.nextcol[x] = &lev.nextcol[lev.width + x][-offset];
+ lev.drawcol[x] = &lev.drawcol[lev.width + x][-offset];
+ lev.boomcol[x] = &lev.boomcol[lev.width + x][-offset];
+
+ lev.cavecol[lev.right + x] = &lev.cavecol[lev.left + x][offset];
+ lev.nextcol[lev.right + x] = &lev.nextcol[lev.left + x][offset];
+ lev.drawcol[lev.right + x] = &lev.drawcol[lev.left + x][offset];
+ lev.boomcol[lev.right + x] = &lev.boomcol[lev.left + x][offset];
}
}
lev.wheel_time = cav.wheel_time;
lev.wheel_cnt = cav.wheel_active ? cav.wheel_time : 0;
- lev.wheel_x = cav.wheel_x;
- lev.wheel_y = cav.wheel_y;
+ lev.wheel_x = cav.wheel_x + lev.left;
+ lev.wheel_y = cav.wheel_y + lev.top;
lev.wind_time = cav.wind_time;
lev.wind_cnt = cav.wind_time;
lev.killed_out_of_time = FALSE;
- lev.num_ball_arrays = cav.num_ball_arrays;
+ lev.num_eater_arrays = cav.num_eater_arrays;
+ lev.num_ball_arrays = cav.num_ball_arrays;
for (i = 0; i < 8; i++)
for (j = 0; j < 9; j++)
/* assign active players */
for (i = 0; i < MAX_PLAYERS; i++)
{
- if (ply[i].exists)
+ if (ply[i].exists && isActivePlayer_EM(i))
{
if (players_left)
{
//
// - game_em.use_single_button (default: TRUE)
// - game_em.use_snap_key_bug (default: FALSE)
+ // - game_em.use_random_bug (default: FALSE)
// - game_em.use_old_explosions (default: FALSE)
+ // - game_em.use_old_android (default: FALSE)
+ // - game_em.use_old_push_elements (default: FALSE)
+ // - game_em.use_old_push_into_acid (default: FALSE)
+ // - game_em.use_wrap_around (default: TRUE)
game_em.level_solved = FALSE;
game_em.game_over = FALSE;