struct PLAYER **ply = level_em->ply;
int i, j, x, y;
- lev->width = MIN(level->fieldx, EM_MAX_CAVE_WIDTH);
- lev->height = MIN(level->fieldy, EM_MAX_CAVE_HEIGHT);
+ lev->width = MIN(level->fieldx, MAX_PLAYFIELD_WIDTH);
+ lev->height = MIN(level->fieldy, MAX_PLAYFIELD_HEIGHT);
lev->time_seconds = level->time;
lev->required_initial = level->gems_needed;
// first fill the complete playfield with the default border element
for (y = 0; y < EM_MAX_CAVE_HEIGHT; y++)
for (x = 0; x < EM_MAX_CAVE_WIDTH; x++)
- level_em->cave[x][y] = ZBORDER;
-
- if (BorderElement == EL_STEELWALL)
- {
- for (y = 0; y < lev->height + 2; y++)
- for (x = 0; x < lev->width + 2; x++)
- level_em->cave[x + 1][y + 1] = map_element_RND_to_EM(EL_STEELWALL);
- }
+ level_em->cave[x][y] = Zborder;
// then copy the real level contents from level file into the playfield
for (y = 0; y < lev->height; y++) for (x = 0; x < lev->width; x++)
{
int new_element = map_element_RND_to_EM(level->field[x][y]);
- int offset = (BorderElement == EL_STEELWALL ? 1 : 0);
- int xx = x + 1 + offset;
- int yy = y + 1 + offset;
if (level->field[x][y] == EL_AMOEBA_DEAD)
new_element = map_element_RND_to_EM(EL_AMOEBA_WET);
- level_em->cave[xx][yy] = new_element;
+ level_em->cave[x][y] = new_element;
}
for (i = 0; i < MAX_PLAYERS; i++)
{
- ply[i]->x_initial = 0;
- ply[i]->y_initial = 0;
+ ply[i]->x_initial = -1;
+ ply[i]->y_initial = -1;
}
// initialize player positions and delete players from the playfield
if (ELEM_IS_PLAYER(level->field[x][y]))
{
int player_nr = GET_PLAYER_NR(level->field[x][y]);
- int offset = (BorderElement == EL_STEELWALL ? 1 : 0);
- int xx = x + 1 + offset;
- int yy = y + 1 + offset;
- ply[player_nr]->x_initial = xx;
- ply[player_nr]->y_initial = yy;
+ ply[player_nr]->x_initial = x;
+ ply[player_nr]->y_initial = y;
- level_em->cave[xx][yy] = map_element_RND_to_EM(EL_EMPTY);
+ level_em->cave[x][y] = map_element_RND_to_EM(EL_EMPTY);
}
}
-
- if (BorderElement == EL_STEELWALL)
- {
- lev->width += 2;
- lev->height += 2;
- }
}
static void CopyNativeLevel_EM_to_RND(struct LevelInfo *level)
// convert the playfield (some elements need special treatment)
for (y = 0; y < level->fieldy; y++) for (x = 0; x < level->fieldx; x++)
{
- int new_element = map_element_EM_to_RND(level_em->cave[x + 1][y + 1]);
+ int new_element = map_element_EM_to_RND(level_em->cave[x][y]);
if (new_element == EL_AMOEBA_WET && level->amoeba_speed == 0)
new_element = EL_AMOEBA_DEAD;
{
// in case of all players set to the same field, use the first player
int nr = MAX_PLAYERS - i - 1;
- int jx = ply[nr]->x_initial - 1;
- int jy = ply[nr]->y_initial - 1;
+ int jx = ply[nr]->x_initial;
+ int jy = ply[nr]->y_initial;
if (jx != -1 && jy != -1)
level->field[jx][jy] = EL_PLAYER_1 + nr;
TYPE_BOOLEAN,
&setup.internal.show_scaling_in_title, "show_scaling_in_title"
},
+ {
+ TYPE_BOOLEAN,
+ &setup.internal.create_user_levelset, "create_user_levelset"
+ },
{
TYPE_BOOLEAN,
&setup.internal.menu_game, "menu_game"
si->internal.default_level_series = getStringCopy(UNDEFINED_LEVELSET);
si->internal.choose_from_top_leveldir = FALSE;
si->internal.show_scaling_in_title = TRUE;
+ si->internal.create_user_levelset = TRUE;
si->internal.default_window_width = WIN_XSIZE_DEFAULT;
si->internal.default_window_height = WIN_YSIZE_DEFAULT;
string_has_parameter(value, "curtain") ? FADE_MODE_CURTAIN :
FADE_MODE_DEFAULT);
}
+ else if (strEqual(suffix, ".auto_delay_unit"))
+ {
+ result = (string_has_parameter(value, "ms") ? AUTO_DELAY_UNIT_MS :
+ string_has_parameter(value, "frames") ? AUTO_DELAY_UNIT_FRAMES :
+ AUTO_DELAY_UNIT_DEFAULT);
+ }
else if (strPrefix(suffix, ".font")) // (may also be ".font_xyz")
{
result = gfx.get_font_from_token_function(value);
title_initial_first_default.post_delay;
titlescreen_initial_first_default.auto_delay =
title_initial_first_default.auto_delay;
+ titlescreen_initial_first_default.auto_delay_unit =
+ title_initial_first_default.auto_delay_unit;
titlescreen_first_default.fade_mode = title_first_default.fade_mode;
titlescreen_first_default.fade_delay = title_first_default.fade_delay;
titlescreen_first_default.post_delay = title_first_default.post_delay;
titlescreen_first_default.auto_delay = title_first_default.auto_delay;
+ titlescreen_first_default.auto_delay_unit =
+ title_first_default.auto_delay_unit;
titlemessage_initial_first_default.fade_mode =
title_initial_first_default.fade_mode;
titlemessage_initial_first_default.fade_delay =
title_initial_first_default.post_delay;
titlemessage_initial_first_default.auto_delay =
title_initial_first_default.auto_delay;
+ titlemessage_initial_first_default.auto_delay_unit =
+ title_initial_first_default.auto_delay_unit;
titlemessage_first_default.fade_mode = title_first_default.fade_mode;
titlemessage_first_default.fade_delay = title_first_default.fade_delay;
titlemessage_first_default.post_delay = title_first_default.post_delay;
titlemessage_first_default.auto_delay = title_first_default.auto_delay;
+ titlemessage_first_default.auto_delay_unit =
+ title_first_default.auto_delay_unit;
titlescreen_initial_default.fade_mode = title_initial_default.fade_mode;
titlescreen_initial_default.fade_delay = title_initial_default.fade_delay;
titlescreen_initial_default.post_delay = title_initial_default.post_delay;
titlescreen_initial_default.auto_delay = title_initial_default.auto_delay;
+ titlescreen_initial_default.auto_delay_unit =
+ title_initial_default.auto_delay_unit;
titlescreen_default.fade_mode = title_default.fade_mode;
titlescreen_default.fade_delay = title_default.fade_delay;
titlescreen_default.post_delay = title_default.post_delay;
titlescreen_default.auto_delay = title_default.auto_delay;
+ titlescreen_default.auto_delay_unit = title_default.auto_delay_unit;
titlemessage_initial_default.fade_mode = title_initial_default.fade_mode;
titlemessage_initial_default.fade_delay = title_initial_default.fade_delay;
titlemessage_initial_default.post_delay = title_initial_default.post_delay;
- titlemessage_initial_default.auto_delay = title_initial_default.auto_delay;
+ titlemessage_initial_default.auto_delay_unit =
+ title_initial_default.auto_delay_unit;
titlemessage_default.fade_mode = title_default.fade_mode;
titlemessage_default.fade_delay = title_default.fade_delay;
titlemessage_default.post_delay = title_default.post_delay;
titlemessage_default.auto_delay = title_default.auto_delay;
+ titlemessage_default.auto_delay_unit = title_default.auto_delay_unit;
// special case: initialize "ARG_DEFAULT" values in static default config
// (e.g., init "titlemessage_1.fade_mode" from "[titlemessage].fade_mode")
{ TYPE_INTEGER, &tfi.fade_delay, ".fade_delay" },
{ TYPE_INTEGER, &tfi.post_delay, ".post_delay" },
{ TYPE_INTEGER, &tfi.auto_delay, ".auto_delay" },
+ { TYPE_INTEGER, &tfi.auto_delay_unit, ".auto_delay_unit" },
{ -1, NULL, NULL }
};
{ TYPE_INTEGER, &tmi.fade_delay, ".fade_delay" },
{ TYPE_INTEGER, &tmi.post_delay, ".post_delay" },
{ TYPE_INTEGER, &tmi.auto_delay, ".auto_delay" },
+ { TYPE_INTEGER, &tmi.auto_delay_unit, ".auto_delay_unit" },
{ -1, NULL, NULL }
};