X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Ffiles.c;h=60782f76520d2c2ea511dcd695be2590ff84c85c;hb=db0cf963a41d958dc11ee1d3cfb2b1f88cba7f76;hp=87741c788b1fc42c6d76e02cfb5f2f2076428f63;hpb=000f4fbffe0d915d1ded9c981a5a2d521cdf7e5e;p=rocksndiamonds.git diff --git a/src/files.c b/src/files.c index 87741c78..60782f76 100644 --- a/src/files.c +++ b/src/files.c @@ -739,6 +739,17 @@ static struct LevelFileConfigInfo chunk_config_NOTE[] = &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), @@ -4133,7 +4144,7 @@ int getMappedElement_DC(int element) break; case 0x0e77: /* quicksand (boulder) */ - element = EL_QUICKSAND_FULL; + element = EL_QUICKSAND_FAST_FULL; break; case 0x0e99: /* slow quicksand (boulder) */ @@ -4141,35 +4152,35 @@ int getMappedElement_DC(int element) 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: @@ -4184,7 +4195,7 @@ int getMappedElement_DC(int element) break; case 0x0fb9: - element = EL_MAGIC_WALL; + element = EL_DC_MAGIC_WALL; break; case 0x0fd0: @@ -4252,7 +4263,7 @@ int getMappedElement_DC(int element) break; case 0x1437: - element = EL_SWITCHGATE_SWITCH_UP; + element = EL_DC_SWITCHGATE_SWITCH_UP; break; case 0x143a: @@ -4320,19 +4331,19 @@ int getMappedElement_DC(int element) 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: @@ -4348,7 +4359,7 @@ int getMappedElement_DC(int element) break; case 0x1578: /* quicksand (empty) */ - element = EL_QUICKSAND_EMPTY; + element = EL_QUICKSAND_FAST_EMPTY; break; case 0x1579: /* slow quicksand (empty) */ @@ -4359,10 +4370,10 @@ int getMappedElement_DC(int element) /* EL_SAND */ /* 0x1590 - 0x159f: */ - /* EL_LANDMINE */ + /* EL_DC_LANDMINE */ case 0x15a0: - element = EL_DYNAMITE; + element = EL_EM_DYNAMITE; break; case 0x15a1: /* key (red) */ @@ -4382,7 +4393,7 @@ int getMappedElement_DC(int element) break; case 0x15a5: /* key (white) */ - element = EL_KEY_WHITE; + element = EL_DC_KEY_WHITE; break; case 0x15a6: @@ -5294,15 +5305,15 @@ int getMappedElement_DC(int element) 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: @@ -5310,7 +5321,7 @@ int getMappedElement_DC(int element) break; case 0x168d: - element = EL_TIMEGATE_SWITCH; + element = EL_DC_TIMEGATE_SWITCH; break; case 0x168e: @@ -5516,7 +5527,7 @@ int getMappedElement_DC(int element) 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 @@ -5615,6 +5626,11 @@ static void LoadLevelFromFileInfo_DC(struct LevelInfo *level, 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'; @@ -5696,9 +5712,16 @@ static void LoadLevelFromFileInfo_DC(struct LevelInfo *level, 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 @@ -5714,6 +5737,7 @@ static void LoadLevelFromFileInfo_DC(struct LevelInfo *level, level->field, level->fieldx, level->fieldy); #endif } +#endif } @@ -6077,7 +6101,10 @@ static void LoadLevel_InitPlayfield(struct LevelInfo *level, char *filename) 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) @@ -7664,14 +7691,15 @@ void SaveScore(int nr) #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 @@ -7790,6 +7818,7 @@ static struct TokenInfo global_setup_tokens[] = { 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" }, @@ -7942,6 +7971,7 @@ static void setSetupInfoToDefaults(struct SetupInfo *si) 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); @@ -8423,19 +8453,19 @@ void LoadUserDefinedEditorElementList(int **elements, int *num_elements) { if (num_unknown_tokens == 0) { - Error(ERR_RETURN_LINE, "-"); - Error(ERR_RETURN, "warning: unknown token(s) found in config file:"); - Error(ERR_RETURN, "- config file: '%s'", filename); + Error(ERR_INFO_LINE, "-"); + Error(ERR_INFO, "warning: unknown token(s) found in config file:"); + Error(ERR_INFO, "- config file: '%s'", filename); num_unknown_tokens++; } - Error(ERR_RETURN, "- token: '%s'", list->token); + Error(ERR_INFO, "- token: '%s'", list->token); } } if (num_unknown_tokens > 0) - Error(ERR_RETURN_LINE, "-"); + Error(ERR_INFO_LINE, "-"); while (*num_elements % 4) /* pad with empty elements, if needed */ (*elements)[(*num_elements)++] = EL_EMPTY; @@ -8736,18 +8766,18 @@ void print_unknown_token(char *filename, char *token, int token_nr) { if (token_nr == 0) { - Error(ERR_RETURN_LINE, "-"); - Error(ERR_RETURN, "warning: unknown token(s) found in config file:"); - Error(ERR_RETURN, "- config file: '%s'", filename); + Error(ERR_INFO_LINE, "-"); + Error(ERR_INFO, "warning: unknown token(s) found in config file:"); + Error(ERR_INFO, "- config file: '%s'", filename); } - Error(ERR_RETURN, "- token: '%s'", token); + Error(ERR_INFO, "- token: '%s'", token); } void print_unknown_token_end(int token_nr) { if (token_nr > 0) - Error(ERR_RETURN_LINE, "-"); + Error(ERR_INFO_LINE, "-"); } void LoadHelpAnimInfo()