&xx_envelope.ysize, MAX_ENVELOPE_YSIZE,
},
+ {
+ -1, -1,
+ TYPE_BOOLEAN, CONF_VALUE_8_BIT(3),
+ &xx_envelope.autowrap, FALSE
+ },
+ {
+ -1, -1,
+ TYPE_BOOLEAN, CONF_VALUE_8_BIT(4),
+ &xx_envelope.centered, FALSE
+ },
+
{
-1, -1,
TYPE_STRING, CONF_VALUE_BYTES(1),
break;
case 0x0e77: /* quicksand (boulder) */
- element = EL_QUICKSAND_FULL;
+ element = EL_QUICKSAND_FAST_FULL;
break;
case 0x0e99: /* slow quicksand (boulder) */
break;
case 0x0ed2:
- element = EL_EXIT_OPEN;
+ element = EL_EM_EXIT_OPEN;
break;
case 0x0ee3:
- element = EL_EXIT_CLOSED;
+ element = EL_EM_EXIT_CLOSED;
break;
case 0x0eeb:
- element = EL_STEEL_EXIT_OPEN;
+ element = EL_EM_STEEL_EXIT_OPEN;
break;
case 0x0efc:
- element = EL_STEEL_EXIT_CLOSED;
+ element = EL_EM_STEEL_EXIT_CLOSED;
break;
case 0x0f4f: /* dynamite (lit 1) */
- element = EL_DYNAMITE_ACTIVE;
+ element = EL_EM_DYNAMITE_ACTIVE;
break;
case 0x0f57: /* dynamite (lit 2) */
- element = EL_DYNAMITE_ACTIVE;
+ element = EL_EM_DYNAMITE_ACTIVE;
break;
case 0x0f5f: /* dynamite (lit 3) */
- element = EL_DYNAMITE_ACTIVE;
+ element = EL_EM_DYNAMITE_ACTIVE;
break;
case 0x0f67: /* dynamite (lit 4) */
- element = EL_DYNAMITE_ACTIVE;
+ element = EL_EM_DYNAMITE_ACTIVE;
break;
case 0x0f81:
break;
case 0x0fb9:
- element = EL_MAGIC_WALL;
+ element = EL_DC_MAGIC_WALL;
break;
case 0x0fd0:
break;
case 0x1437:
- element = EL_SWITCHGATE_SWITCH_UP;
+ element = EL_DC_SWITCHGATE_SWITCH_UP;
break;
case 0x143a:
break;
case 0x14ce: /* growing steel wall (left/right) */
- element = EL_EXPANDABLE_WALL_HORIZONTAL;
+ element = EL_EXPANDABLE_STEELWALL_HORIZONTAL;
break;
case 0x14df: /* growing steel wall (up/down) */
- element = EL_EXPANDABLE_WALL_VERTICAL;
+ element = EL_EXPANDABLE_STEELWALL_VERTICAL;
break;
case 0x14e8: /* growing steel wall (up/down/left/right) */
- element = EL_EXPANDABLE_WALL_ANY;
+ element = EL_EXPANDABLE_STEELWALL_ANY;
break;
case 0x14e9:
- element = EL_SHIELD_NORMAL;
+ element = EL_SHIELD_DEADLY;
break;
case 0x1501:
break;
case 0x1578: /* quicksand (empty) */
- element = EL_QUICKSAND_EMPTY;
+ element = EL_QUICKSAND_FAST_EMPTY;
break;
case 0x1579: /* slow quicksand (empty) */
/* EL_SAND */
/* 0x1590 - 0x159f: */
- /* EL_LANDMINE */
+ /* EL_DC_LANDMINE */
case 0x15a0:
- element = EL_DYNAMITE;
+ element = EL_EM_DYNAMITE;
break;
case 0x15a1: /* key (red) */
break;
case 0x15a5: /* key (white) */
- element = EL_KEY_WHITE;
+ element = EL_DC_KEY_WHITE;
break;
case 0x15a6:
break;
case 0x1689: /* gate (white) */
- element = EL_DOOR_WHITE;
+ element = EL_DC_GATE_WHITE;
break;
case 0x168a: /* secret gate (white) */
- element = EL_DOOR_WHITE_GRAY;
+ element = EL_DC_GATE_WHITE_GRAY;
break;
case 0x168b: /* secret gate (no key) */
- element = EL_UNKNOWN;
+ element = EL_DC_GATE_FAKE_GRAY;
break;
case 0x168c:
break;
case 0x168d:
- element = EL_TIMEGATE_SWITCH;
+ element = EL_DC_TIMEGATE_SWITCH;
break;
case 0x168e:
else if (element >= 0x157c && element <= 0x158b)
element = EL_SAND;
else if (element >= 0x1590 && element <= 0x159f)
- element = EL_LANDMINE;
+ element = EL_DC_LANDMINE;
else if (element >= 0x16bc && element <= 0x16cb)
element = EL_INVISIBLE_SAND;
else
level->envelope[0].text[envelope_size] = '\0';
+ level->envelope[0].xsize = MAX_ENVELOPE_XSIZE;
+ level->envelope[0].ysize = 10;
+ level->envelope[0].autowrap = TRUE;
+ level->envelope[0].centered = TRUE;
+
for (i = 0; i < level_name_len; i++)
level->name[i] = header[level_name_pos + 1 + i];
level->name[level_name_len] = '\0';
fclose(file);
+ /* Diamond Caves has the same (strange) behaviour as Emerald Mine that gems
+ can slip down from flat walls, like normal walls and steel walls */
+ level->em_slippery_gems = TRUE;
+
+#if 0
/* Diamond Caves II levels are always surrounded by indestructible wall, but
not necessarily in a rectangular way -- fill with invisible steel wall */
+ /* !!! not always true !!! keep level and set BorderElement instead !!! */
+
for (y = 0; y < level->fieldy; y++) for (x = 0; x < level->fieldx; x++)
{
#if 1
level->field, level->fieldx, level->fieldy);
#endif
}
+#endif
}
lev_fieldy = level->fieldy;
/* determine border element for this level */
- SetBorderElement();
+ if (level->file_info.type == LEVEL_FILE_TYPE_DC)
+ BorderElement = EL_EMPTY; /* (in editor, SetBorderElement() is used) */
+ else
+ SetBorderElement();
}
static void LoadLevel_InitNativeEngines(struct LevelInfo *level,char *filename)
#define SETUP_TOKEN_QUICK_SWITCH 20
#define SETUP_TOKEN_INPUT_ON_FOCUS 21
#define SETUP_TOKEN_PREFER_AGA_GRAPHICS 22
-#define SETUP_TOKEN_GRAPHICS_SET 23
-#define SETUP_TOKEN_SOUNDS_SET 24
-#define SETUP_TOKEN_MUSIC_SET 25
-#define SETUP_TOKEN_OVERRIDE_LEVEL_GRAPHICS 26
-#define SETUP_TOKEN_OVERRIDE_LEVEL_SOUNDS 27
-#define SETUP_TOKEN_OVERRIDE_LEVEL_MUSIC 28
+#define SETUP_TOKEN_GAME_FRAME_DELAY 23
+#define SETUP_TOKEN_GRAPHICS_SET 24
+#define SETUP_TOKEN_SOUNDS_SET 25
+#define SETUP_TOKEN_MUSIC_SET 26
+#define SETUP_TOKEN_OVERRIDE_LEVEL_GRAPHICS 27
+#define SETUP_TOKEN_OVERRIDE_LEVEL_SOUNDS 28
+#define SETUP_TOKEN_OVERRIDE_LEVEL_MUSIC 29
-#define NUM_GLOBAL_SETUP_TOKENS 29
+#define NUM_GLOBAL_SETUP_TOKENS 30
/* editor setup */
#define SETUP_TOKEN_EDITOR_EL_BOULDERDASH 0
{ TYPE_SWITCH, &si.quick_switch, "quick_player_switch" },
{ TYPE_SWITCH, &si.input_on_focus, "input_on_focus" },
{ TYPE_SWITCH, &si.prefer_aga_graphics, "prefer_aga_graphics" },
+ { TYPE_INTEGER,&si.game_frame_delay, "game_frame_delay" },
{ TYPE_STRING, &si.graphics_set, "graphics_set" },
{ TYPE_STRING, &si.sounds_set, "sounds_set" },
{ TYPE_STRING, &si.music_set, "music_set" },
si->quick_switch = FALSE;
si->input_on_focus = FALSE;
si->prefer_aga_graphics = TRUE;
+ si->game_frame_delay = GAME_FRAME_DELAY;
si->graphics_set = getStringCopy(GFX_CLASSIC_SUBDIR);
si->sounds_set = getStringCopy(SND_CLASSIC_SUBDIR);