X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Ffiles.c;h=6195f9613c5cc304df3f36258a53bcf9d4723c9a;hb=580d57b32a5bf92e628a9c1d936bf67a8709a39a;hp=01c166e12a857dab0ef3212b5e0d0087e311620e;hpb=5500133caf57ac0d86b85c53b5fe38c466d65447;p=rocksndiamonds.git diff --git a/src/files.c b/src/files.c index 01c166e1..6195f961 100644 --- a/src/files.c +++ b/src/files.c @@ -1045,7 +1045,7 @@ static struct LevelFileConfigInfo chunk_config_CUSX_change[] = { -1, -1, TYPE_ELEMENT, CONF_VALUE_16_BIT(5), - &xx_change.trigger_element, EL_EMPTY_SPACE + &xx_change.initial_trigger_element, EL_EMPTY_SPACE }, { @@ -1694,8 +1694,8 @@ static int getFileTypeFromBasename(char *basename) return LEVEL_FILE_TYPE_SP; /* check for typical filename of a Diamond Caves II level package file */ - if (strEqualSuffix(basename, ".dc") || - strEqualSuffix(basename, ".dc2")) + if (strSuffix(basename, ".dc") || + strSuffix(basename, ".dc2")) return LEVEL_FILE_TYPE_DC; /* ---------- try to determine file type from filesize ---------- */ @@ -2384,7 +2384,7 @@ static int LoadLevel_CUS3(FILE *file, int chunk_size, struct LevelInfo *level) ei->change->delay_random = getFile16BitBE(file); ei->change->delay_frames = getFile16BitBE(file); - ei->change->trigger_element = getMappedElement(getFile16BitBE(file)); + ei->change->initial_trigger_element= getMappedElement(getFile16BitBE(file)); ei->change->explode = getFile8Bit(file); ei->change->use_target_content = getFile8Bit(file); @@ -2517,7 +2517,7 @@ static int LoadLevel_CUS4(FILE *file, int chunk_size, struct LevelInfo *level) change->delay_random = getFile16BitBE(file); change->delay_frames = getFile16BitBE(file); - change->trigger_element = getMappedElement(getFile16BitBE(file)); + change->initial_trigger_element = getMappedElement(getFile16BitBE(file)); change->explode = getFile8Bit(file); change->use_target_content = getFile8Bit(file); @@ -5767,7 +5767,7 @@ static void LoadLevelFromFileInfo_DC(struct LevelInfo *level, fgets(magic_bytes, num_magic_bytes + 1, file); /* check "magic bytes" for correct file format */ - if (!strEqualPrefix(magic_bytes, "DC2")) + if (!strPrefix(magic_bytes, "DC2")) { level->no_valid_file = TRUE; @@ -5777,8 +5777,8 @@ static void LoadLevelFromFileInfo_DC(struct LevelInfo *level, return; } - if (strEqualPrefix(magic_bytes, "DC2Win95") || - strEqualPrefix(magic_bytes, "DC2Win98")) + if (strPrefix(magic_bytes, "DC2Win95") || + strPrefix(magic_bytes, "DC2Win98")) { int position_first_level = 0x00fa; int extra_bytes = 4; @@ -6797,7 +6797,7 @@ static void SaveLevel_CUS3(FILE *file, struct LevelInfo *level, putFile16BitBE(file, ei->change->delay_random); putFile16BitBE(file, ei->change->delay_frames); - putFile16BitBE(file, ei->change->trigger_element); + putFile16BitBE(file, ei->change->initial_trigger_element); putFile8Bit(file, ei->change->explode); putFile8Bit(file, ei->change->use_target_content); @@ -6909,7 +6909,7 @@ static void SaveLevel_CUS4(FILE *file, struct LevelInfo *level, int element) putFile16BitBE(file, change->delay_random); putFile16BitBE(file, change->delay_frames); - putFile16BitBE(file, change->trigger_element); + putFile16BitBE(file, change->initial_trigger_element); putFile8Bit(file, change->explode); putFile8Bit(file, change->use_target_content); @@ -8139,9 +8139,9 @@ static struct TokenInfo global_setup_tokens[] = { TYPE_STRING, &si.graphics_set, "graphics_set" }, { TYPE_STRING, &si.sounds_set, "sounds_set" }, { TYPE_STRING, &si.music_set, "music_set" }, - { TYPE_SWITCH, &si.override_level_graphics, "override_level_graphics" }, - { TYPE_SWITCH, &si.override_level_sounds, "override_level_sounds" }, - { TYPE_SWITCH, &si.override_level_music, "override_level_music" }, + { TYPE_SWITCH3,&si.override_level_graphics, "override_level_graphics" }, + { TYPE_SWITCH3,&si.override_level_sounds, "override_level_sounds" }, + { TYPE_SWITCH3,&si.override_level_music, "override_level_music" }, }; static boolean not_used = FALSE; @@ -8270,8 +8270,6 @@ static void setSetupInfoToDefaults(struct SetupInfo *si) si->sound_music = TRUE; si->sound_simple = TRUE; si->toons = TRUE; - si->double_buffering = TRUE; - si->direct_draw = !si->double_buffering; si->scroll_delay = TRUE; si->scroll_delay_value = STD_SCROLL_DELAY; si->soft_scrolling = TRUE; @@ -8292,9 +8290,9 @@ static void setSetupInfoToDefaults(struct SetupInfo *si) 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); - si->music_set = getStringCopy(MUS_CLASSIC_SUBDIR); + si->graphics_set = getStringCopy(GFX_DEFAULT_SUBDIR); + si->sounds_set = getStringCopy(SND_DEFAULT_SUBDIR); + si->music_set = getStringCopy(MUS_DEFAULT_SUBDIR); si->override_level_graphics = FALSE; si->override_level_sounds = FALSE; si->override_level_music = FALSE; @@ -8352,6 +8350,14 @@ static void setSetupInfoToDefaults(struct SetupInfo *si) si->system.audio_fragment_size = DEFAULT_AUDIO_FRAGMENT_SIZE; si->options.verbose = FALSE; + +#if defined(CREATE_SPECIAL_EDITION_RND_JUE) + si->handicap = FALSE; + si->fullscreen = TRUE; + si->override_level_graphics = AUTO; + si->override_level_sounds = AUTO; + si->override_level_music = AUTO; +#endif } static void setSetupInfoToDefaults_EditorCascade(struct SetupInfo *si) @@ -8469,8 +8475,6 @@ void LoadSetup() checkSetupFileHashIdentifier(setup_file_hash, filename,getCookie("SETUP")); decodeSetupFileHash(setup_file_hash); - setup.direct_draw = !setup.double_buffering; - freeSetupFileHash(setup_file_hash); /* needed to work around problems with fixed length strings */ @@ -8651,12 +8655,19 @@ void LoadCustomElementDescriptions() static int getElementFromToken(char *token) { +#if 1 + char *value = getHashEntry(element_token_hash, token); + + if (value != NULL) + return atoi(value); +#else int i; /* !!! OPTIMIZE THIS BY USING HASH !!! */ for (i = 0; i < MAX_NUM_ELEMENTS; i++) if (strEqual(token, element_info[i].token_name)) return i; +#endif Error(ERR_WARN, "unknown element token '%s'", token); @@ -8700,9 +8711,12 @@ static int get_token_parameter_value(char *token, char *value_raw) void InitMenuDesignSettings_Static() { +#if 0 static SetupFileHash *image_config_hash = NULL; +#endif int i; +#if 0 if (image_config_hash == NULL) { image_config_hash = newSetupFileHash(); @@ -8712,6 +8726,7 @@ void InitMenuDesignSettings_Static() image_config[i].token, image_config[i].value); } +#endif #if 1 /* always start with reliable default values from static default config */ @@ -8945,7 +8960,8 @@ static void LoadMenuDesignSettingsFromFilename(char *filename) { char *value = getHashEntry(setup_file_hash, image_config_vars[i].token); - if (value != NULL) + /* (ignore definitions set to "[DEFAULT]" which are already initialized) */ + if (value != NULL && !strEqual(value, ARG_DEFAULT)) *image_config_vars[i].value = get_token_parameter_value(image_config_vars[i].token, value); } @@ -8960,7 +8976,11 @@ void LoadMenuDesignSettings() InitMenuDesignSettings_Static(); InitMenuDesignSettings_SpecialPreProcessing(); +#if 1 + if (!GFX_OVERRIDE_ARTWORK(ARTWORK_TYPE_GRAPHICS)) +#else if (!SETUP_OVERRIDE_ARTWORK(setup, ARTWORK_TYPE_GRAPHICS)) +#endif { /* first look for special settings configured in level series config */ filename_base = getCustomArtworkLevelConfigFilename(ARTWORK_TYPE_GRAPHICS); @@ -9605,9 +9625,9 @@ void LoadHelpTextInfo() } -/* ------------------------------------------------------------------------- * - * convert levels - * ------------------------------------------------------------------------- */ +/* ------------------------------------------------------------------------- */ +/* convert levels */ +/* ------------------------------------------------------------------------- */ #define MAX_NUM_CONVERT_LEVELS 1000 @@ -9717,3 +9737,162 @@ void ConvertLevels() CloseAllAndExit(0); } + + +/* ------------------------------------------------------------------------- */ +/* create and save images for use in level sketches (raw BMP format) */ +/* ------------------------------------------------------------------------- */ + +void CreateLevelSketchImages() +{ +#if defined(TARGET_SDL) + Bitmap *bitmap1; + Bitmap *bitmap2; + int i; + + bitmap1 = CreateBitmap(TILEX, TILEY, DEFAULT_DEPTH); + bitmap2 = CreateBitmap(MINI_TILEX, MINI_TILEY, DEFAULT_DEPTH); + + for (i = 0; i < NUM_FILE_ELEMENTS; i++) + { + Bitmap *src_bitmap; + int src_x, src_y; + int graphic = el2edimg(i); + char basename1[16]; + char basename2[16]; + char *filename1; + char *filename2; + + sprintf(basename1, "%03d.bmp", i); + sprintf(basename2, "%03ds.bmp", i); + + filename1 = getPath2(global.create_images_dir, basename1); + filename2 = getPath2(global.create_images_dir, basename2); + + getGraphicSource(graphic, 0, &src_bitmap, &src_x, &src_y); + BlitBitmap(src_bitmap, bitmap1, src_x, src_y, TILEX, TILEY, 0, 0); + + if (SDL_SaveBMP(bitmap1->surface, filename1) != 0) + Error(ERR_EXIT, "cannot save level sketch image file '%s'", filename1); + + getMiniGraphicSource(graphic, &src_bitmap, &src_x, &src_y); + BlitBitmap(src_bitmap, bitmap2, src_x, src_y, MINI_TILEX, MINI_TILEY, 0, 0); + + if (SDL_SaveBMP(bitmap2->surface, filename2) != 0) + Error(ERR_EXIT, "cannot save level sketch image file '%s'", filename2); + + free(filename1); + free(filename2); + + if (options.debug) + printf("%03d `%03d%c", i, i, (i % 10 < 9 ? ' ' : '\n')); + } + + FreeBitmap(bitmap1); + FreeBitmap(bitmap2); + + if (options.debug) + printf("\n"); + + Error(ERR_INFO, "%d normal and small images created", NUM_FILE_ELEMENTS); + + CloseAllAndExit(0); +#endif +} + + +/* ------------------------------------------------------------------------- */ +/* create and save images for custom and group elements (raw BMP format) */ +/* ------------------------------------------------------------------------- */ + +void CreateCustomElementImages() +{ +#if defined(TARGET_SDL) + char *filename = "graphics.classic/RocksCE.bmp"; + Bitmap *bitmap; + Bitmap *src_bitmap; + int dummy_graphic = IMG_CUSTOM_99; + int yoffset_ce = 0; + int yoffset_ge = (TILEY * NUM_CUSTOM_ELEMENTS / 16); + int src_x, src_y; + int i; + + bitmap = CreateBitmap(TILEX * 16 * 2, + TILEY * (NUM_CUSTOM_ELEMENTS + NUM_GROUP_ELEMENTS) / 16, + DEFAULT_DEPTH); + + getGraphicSource(dummy_graphic, 0, &src_bitmap, &src_x, &src_y); + + for (i = 0; i < NUM_CUSTOM_ELEMENTS; i++) + { + int x = i % 16; + int y = i / 16; + int ii = i + 1; + int j; + + BlitBitmap(src_bitmap, bitmap, 0, 0, TILEX, TILEY, + TILEX * x, TILEY * y + yoffset_ce); + + BlitBitmap(src_bitmap, bitmap, 0, TILEY, TILEX, TILEY, + TILEX * x + TILEX * 16, TILEY * y + yoffset_ce); + + for (j = 2; j >= 0; j--) + { + int c = ii % 10; + + BlitBitmap(src_bitmap, bitmap, TILEX + c * 7, 0, 6, 10, + TILEX * x + 6 + j * 7, + TILEY * y + 11 + yoffset_ce); + + BlitBitmap(src_bitmap, bitmap, TILEX + c * 8, TILEY, 6, 10, + TILEX * 16 + TILEX * x + 6 + j * 8, + TILEY * y + 10 + yoffset_ce); + + ii /= 10; + } + } + + for (i = 0; i < NUM_GROUP_ELEMENTS; i++) + { + int x = i % 16; + int y = i / 16; + int ii = i + 1; + int j; + + BlitBitmap(src_bitmap, bitmap, 0, 0, TILEX, TILEY, + TILEX * x, TILEY * y + yoffset_ge); + + BlitBitmap(src_bitmap, bitmap, 0, TILEY, TILEX, TILEY, + TILEX * x + TILEX * 16, TILEY * y + yoffset_ge); + + for (j = 1; j >= 0; j--) + { + int c = ii % 10; + + BlitBitmap(src_bitmap, bitmap, TILEX + c * 10, 11, 10, 10, + TILEX * x + 6 + j * 10, + TILEY * y + 11 + yoffset_ge); + + BlitBitmap(src_bitmap, bitmap, TILEX + c * 8, TILEY + 12, 6, 10, + TILEX * 16 + TILEX * x + 10 + j * 8, + TILEY * y + 10 + yoffset_ge); + + ii /= 10; + } + } + + if (SDL_SaveBMP(bitmap->surface, filename) != 0) + Error(ERR_EXIT, "cannot save CE graphics file '%s'", filename); + + FreeBitmap(bitmap); + + CloseAllAndExit(0); +#endif +} + +#if 0 +void CreateLevelSketchImages_TEST() +{ + void CreateCustomElementImages() +} +#endif