X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Ffiles.c;h=4dab81954d6e630fb6686dba0294531ad7efe0dc;hb=9fa601d400aa71f38fcdc19eaf107f42e0d2a2a3;hp=343c6d9431342da4593034f924acb22d858f06be;hpb=3ff2e8a0b5c27b99a9920bdf5ed82bc41bf40181;p=rocksndiamonds.git diff --git a/src/files.c b/src/files.c index 343c6d94..4dab8195 100644 --- a/src/files.c +++ b/src/files.c @@ -1608,18 +1608,21 @@ static void setLevelInfoToDefaults_Level(struct LevelInfo *level) level->encoding_16bit_yamyam = TRUE; level->encoding_16bit_amoeba = TRUE; - for (x = 0; x < MAX_LEV_FIELDX; x++) - for (y = 0; y < MAX_LEV_FIELDY; y++) - level->field[x][y] = EL_SAND; - + /* clear level name and level author string buffers */ for (i = 0; i < MAX_LEVEL_NAME_LEN; i++) level->name[i] = '\0'; for (i = 0; i < MAX_LEVEL_AUTHOR_LEN; i++) level->author[i] = '\0'; + /* set level name and level author to default values */ strcpy(level->name, NAMELESS_LEVEL_NAME); strcpy(level->author, ANONYMOUS_NAME); + /* set level playfield to playable default level with player and exit */ + for (x = 0; x < MAX_LEV_FIELDX; x++) + for (y = 0; y < MAX_LEV_FIELDY; y++) + level->field[x][y] = EL_SAND; + level->field[0][0] = EL_PLAYER_1; level->field[STD_LEV_FIELDX - 1][STD_LEV_FIELDY - 1] = EL_EXIT_CLOSED; @@ -3743,7 +3746,8 @@ static void CopyNativeTape_SP_to_RND(struct LevelInfo *level) tape.pos[i].delay = demo_repeat + 1; } - tape.length_seconds = GetTapeLength(); + tape.length_frames = GetTapeLengthFrames(); + tape.length_seconds = GetTapeLengthSeconds(); } @@ -6217,6 +6221,12 @@ static void LoadLevel_InitPlayfield(struct LevelInfo *level, char *filename) level->field[x][y] = getMappedElementByVersion(level->field[x][y], level->game_version); + /* clear unused playfield data (nicer if level gets resized in editor) */ + for (x = 0; x < MAX_LEV_FIELDX; x++) + for (y = 0; y < MAX_LEV_FIELDY; y++) + if (x >= level->fieldx || y >= level->fieldy) + level->field[x][y] = EL_EMPTY; + /* copy elements to runtime playfield array */ for (x = 0; x < MAX_LEV_FIELDX; x++) for (y = 0; y < MAX_LEV_FIELDY; y++) @@ -7430,7 +7440,8 @@ void LoadTape_SokobanSolution(char *filename) if (tape.no_valid_file) return; - tape.length_seconds = GetTapeLength(); + tape.length_frames = GetTapeLengthFrames(); + tape.length_seconds = GetTapeLengthSeconds(); } void LoadTapeFromFilename(char *filename) @@ -7572,7 +7583,8 @@ void LoadTapeFromFilename(char *filename) closeFile(file); - tape.length_seconds = GetTapeLength(); + tape.length_frames = GetTapeLengthFrames(); + tape.length_seconds = GetTapeLengthSeconds(); #if 0 printf("::: tape file version: %d\n", tape.file_version); @@ -7880,41 +7892,42 @@ void SaveScore(int nr) #define SETUP_TOKEN_TOONS 5 #define SETUP_TOKEN_SCROLL_DELAY 6 #define SETUP_TOKEN_SCROLL_DELAY_VALUE 7 -#define SETUP_TOKEN_SOFT_SCROLLING 8 -#define SETUP_TOKEN_FADE_SCREENS 9 -#define SETUP_TOKEN_AUTORECORD 10 -#define SETUP_TOKEN_SHOW_TITLESCREEN 11 -#define SETUP_TOKEN_QUICK_DOORS 12 -#define SETUP_TOKEN_TEAM_MODE 13 -#define SETUP_TOKEN_HANDICAP 14 -#define SETUP_TOKEN_SKIP_LEVELS 15 -#define SETUP_TOKEN_TIME_LIMIT 16 -#define SETUP_TOKEN_FULLSCREEN 17 -#define SETUP_TOKEN_FULLSCREEN_MODE 18 -#define SETUP_TOKEN_WINDOW_SCALING_PERCENT 19 -#define SETUP_TOKEN_WINDOW_SCALING_QUALITY 20 -#define SETUP_TOKEN_ASK_ON_ESCAPE 21 -#define SETUP_TOKEN_ASK_ON_ESCAPE_EDITOR 22 -#define SETUP_TOKEN_QUICK_SWITCH 23 -#define SETUP_TOKEN_INPUT_ON_FOCUS 24 -#define SETUP_TOKEN_PREFER_AGA_GRAPHICS 25 -#define SETUP_TOKEN_GAME_FRAME_DELAY 26 -#define SETUP_TOKEN_SP_SHOW_BORDER_ELEMENTS 27 -#define SETUP_TOKEN_SMALL_GAME_GRAPHICS 28 -#define SETUP_TOKEN_GRAPHICS_SET 29 -#define SETUP_TOKEN_SOUNDS_SET 30 -#define SETUP_TOKEN_MUSIC_SET 31 -#define SETUP_TOKEN_OVERRIDE_LEVEL_GRAPHICS 32 -#define SETUP_TOKEN_OVERRIDE_LEVEL_SOUNDS 33 -#define SETUP_TOKEN_OVERRIDE_LEVEL_MUSIC 34 -#define SETUP_TOKEN_VOLUME_SIMPLE 35 -#define SETUP_TOKEN_VOLUME_LOOPS 36 -#define SETUP_TOKEN_VOLUME_MUSIC 37 -#define SETUP_TOKEN_TOUCH_CONTROL_TYPE 38 -#define SETUP_TOKEN_TOUCH_MOVE_DISTANCE 39 -#define SETUP_TOKEN_TOUCH_DROP_DISTANCE 40 - -#define NUM_GLOBAL_SETUP_TOKENS 41 +#define SETUP_TOKEN_ENGINE_SNAPSHOT_MODE 8 +#define SETUP_TOKEN_SOFT_SCROLLING 9 +#define SETUP_TOKEN_FADE_SCREENS 10 +#define SETUP_TOKEN_AUTORECORD 11 +#define SETUP_TOKEN_SHOW_TITLESCREEN 12 +#define SETUP_TOKEN_QUICK_DOORS 13 +#define SETUP_TOKEN_TEAM_MODE 14 +#define SETUP_TOKEN_HANDICAP 15 +#define SETUP_TOKEN_SKIP_LEVELS 16 +#define SETUP_TOKEN_TIME_LIMIT 17 +#define SETUP_TOKEN_FULLSCREEN 18 +#define SETUP_TOKEN_FULLSCREEN_MODE 19 +#define SETUP_TOKEN_WINDOW_SCALING_PERCENT 20 +#define SETUP_TOKEN_WINDOW_SCALING_QUALITY 21 +#define SETUP_TOKEN_ASK_ON_ESCAPE 22 +#define SETUP_TOKEN_ASK_ON_ESCAPE_EDITOR 23 +#define SETUP_TOKEN_QUICK_SWITCH 24 +#define SETUP_TOKEN_INPUT_ON_FOCUS 25 +#define SETUP_TOKEN_PREFER_AGA_GRAPHICS 26 +#define SETUP_TOKEN_GAME_FRAME_DELAY 27 +#define SETUP_TOKEN_SP_SHOW_BORDER_ELEMENTS 28 +#define SETUP_TOKEN_SMALL_GAME_GRAPHICS 29 +#define SETUP_TOKEN_GRAPHICS_SET 30 +#define SETUP_TOKEN_SOUNDS_SET 31 +#define SETUP_TOKEN_MUSIC_SET 32 +#define SETUP_TOKEN_OVERRIDE_LEVEL_GRAPHICS 33 +#define SETUP_TOKEN_OVERRIDE_LEVEL_SOUNDS 34 +#define SETUP_TOKEN_OVERRIDE_LEVEL_MUSIC 35 +#define SETUP_TOKEN_VOLUME_SIMPLE 36 +#define SETUP_TOKEN_VOLUME_LOOPS 37 +#define SETUP_TOKEN_VOLUME_MUSIC 38 +#define SETUP_TOKEN_TOUCH_CONTROL_TYPE 39 +#define SETUP_TOKEN_TOUCH_MOVE_DISTANCE 40 +#define SETUP_TOKEN_TOUCH_DROP_DISTANCE 41 + +#define NUM_GLOBAL_SETUP_TOKENS 42 /* editor setup */ #define SETUP_TOKEN_EDITOR_EL_BOULDERDASH 0 @@ -8032,6 +8045,7 @@ static struct TokenInfo global_setup_tokens[] = { TYPE_SWITCH, &si.toons, "toons" }, { TYPE_SWITCH, &si.scroll_delay, "scroll_delay" }, { TYPE_INTEGER,&si.scroll_delay_value, "scroll_delay_value" }, + { TYPE_STRING, &si.engine_snapshot_mode, "engine_snapshot_mode" }, { TYPE_SWITCH, &si.soft_scrolling, "soft_scrolling" }, { TYPE_SWITCH, &si.fade_screens, "fade_screens" }, { TYPE_SWITCH, &si.autorecord, "automatic_tape_recording"}, @@ -8067,21 +8081,20 @@ static struct TokenInfo global_setup_tokens[] = { TYPE_INTEGER,&si.touch.drop_distance, "touch.drop_distance" }, }; -static boolean not_used = FALSE; static struct TokenInfo editor_setup_tokens[] = { - { TYPE_SWITCH, ¬_used, "editor.el_boulderdash" }, - { TYPE_SWITCH, ¬_used, "editor.el_emerald_mine" }, - { TYPE_SWITCH, ¬_used, "editor.el_emerald_mine_club" }, - { TYPE_SWITCH, ¬_used, "editor.el_more" }, - { TYPE_SWITCH, ¬_used, "editor.el_sokoban" }, - { TYPE_SWITCH, ¬_used, "editor.el_supaplex" }, - { TYPE_SWITCH, ¬_used, "editor.el_diamond_caves" }, - { TYPE_SWITCH, ¬_used, "editor.el_dx_boulderdash" }, + { TYPE_SWITCH, &sei.el_boulderdash, "editor.el_boulderdash" }, + { TYPE_SWITCH, &sei.el_emerald_mine, "editor.el_emerald_mine" }, + { TYPE_SWITCH, &sei.el_emerald_mine_club,"editor.el_emerald_mine_club"}, + { TYPE_SWITCH, &sei.el_more, "editor.el_more" }, + { TYPE_SWITCH, &sei.el_sokoban, "editor.el_sokoban" }, + { TYPE_SWITCH, &sei.el_supaplex, "editor.el_supaplex" }, + { TYPE_SWITCH, &sei.el_diamond_caves, "editor.el_diamond_caves" }, + { TYPE_SWITCH, &sei.el_dx_boulderdash,"editor.el_dx_boulderdash" }, { TYPE_SWITCH, &sei.el_chars, "editor.el_chars" }, { TYPE_SWITCH, &sei.el_steel_chars, "editor.el_steel_chars" }, { TYPE_SWITCH, &sei.el_custom, "editor.el_custom" }, - { TYPE_SWITCH, ¬_used, "editor.el_headlines" }, + { TYPE_SWITCH, &sei.el_headlines, "editor.el_headlines" }, { TYPE_SWITCH, &sei.el_user_defined, "editor.el_user_defined" }, { TYPE_SWITCH, &sei.el_dynamic, "editor.el_dynamic" }, { TYPE_SWITCH, &sei.el_by_game, "editor.el_by_game" }, @@ -8193,6 +8206,7 @@ static void setSetupInfoToDefaults(struct SetupInfo *si) si->toons = TRUE; si->scroll_delay = TRUE; si->scroll_delay_value = STD_SCROLL_DELAY; + si->engine_snapshot_mode = getStringCopy(STR_SNAPSHOT_MODE_DEFAULT); si->soft_scrolling = TRUE; si->fade_screens = TRUE; si->autorecord = TRUE; @@ -8426,7 +8440,6 @@ void LoadSetup() { char *player_name_new; - checkSetupFileHashIdentifier(setup_file_hash, filename,getCookie("SETUP")); decodeSetupFileHash(setup_file_hash); freeSetupFileHash(setup_file_hash); @@ -8463,7 +8476,6 @@ void LoadSetup_EditorCascade() if (setup_file_hash) { - checkSetupFileHashIdentifier(setup_file_hash, filename,getCookie("SETUP")); decodeSetupFileHash_EditorCascade(setup_file_hash); freeSetupFileHash(setup_file_hash); @@ -8486,9 +8498,7 @@ void SaveSetup() return; } - fprintf(file, "%s\n", getFormattedSetupEntry(TOKEN_STR_FILE_IDENTIFIER, - getCookie("SETUP"))); - fprintf(file, "\n"); + fprintFileHeader(file, SETUP_FILENAME); /* global setup */ si = setup; @@ -8561,12 +8571,9 @@ void SaveSetup_EditorCascade() return; } - fprintf(file, "%s\n", getFormattedSetupEntry(TOKEN_STR_FILE_IDENTIFIER, - getCookie("SETUP"))); - fprintf(file, "\n"); + fprintFileHeader(file, EDITORCASCADE_FILENAME); seci = setup.editor_cascade; - fprintf(file, "\n"); for (i = 0; i < NUM_EDITOR_CASCADE_SETUP_TOKENS; i++) fprintf(file, "%s\n", getSetupLine(editor_cascade_setup_tokens, "", i)); @@ -9257,7 +9264,7 @@ void LoadMusicInfo() if (music_already_used) continue; - if (!FileIsMusic(basename)) + if (!FileIsMusic(dir_entry->filename)) continue; if (!music_info_listed(music_file_info, basename)) @@ -9761,24 +9768,27 @@ void CreateLevelSketchImages() /* create and save images for custom and group elements (raw BMP format) */ /* ------------------------------------------------------------------------- */ -void CreateCustomElementImages() +void CreateCustomElementImages(char *directory) { #if defined(TARGET_SDL) - char *filename = "graphics.classic/RocksCE.bmp"; - Bitmap *bitmap; + char *src_basename = "RocksCE-template.ilbm"; + char *dst_basename = "RocksCE.bmp"; + char *src_filename = getPath2(directory, src_basename); + char *dst_filename = getPath2(directory, dst_basename); Bitmap *src_bitmap; - int dummy_graphic = IMG_CUSTOM_99; + Bitmap *bitmap; int yoffset_ce = 0; int yoffset_ge = (TILEY * NUM_CUSTOM_ELEMENTS / 16); - int src_x, src_y; int i; + SDLInitVideoDisplay(); + + src_bitmap = LoadImage(src_filename); + bitmap = CreateBitmap(TILEX * 16 * 2, TILEY * (NUM_CUSTOM_ELEMENTS + NUM_GROUP_ELEMENTS) / 16, DEFAULT_DEPTH); - getFixedGraphicSource(dummy_graphic, 0, &src_bitmap, &src_x, &src_y); - for (i = 0; i < NUM_CUSTOM_ELEMENTS; i++) { int x = i % 16; @@ -9844,8 +9854,8 @@ void CreateCustomElementImages() } } - if (SDL_SaveBMP(bitmap->surface, filename) != 0) - Error(ERR_EXIT, "cannot save CE graphics file '%s'", filename); + if (SDL_SaveBMP(bitmap->surface, dst_filename) != 0) + Error(ERR_EXIT, "cannot save CE graphics file '%s'", dst_filename); FreeBitmap(bitmap);