X-Git-Url: https://git.artsoft.org/?p=rocksndiamonds.git;a=blobdiff_plain;f=src%2Ffiles.c;h=ac73db93f8faf2337d1cba0f3e8e268b998478cc;hp=62bab2023a81ae4acb279af213678824a6d0dec6;hb=8c7cf0796617d786268af85fc5e5f1ad7846f3a1;hpb=4e745044fe35b4b093b1490a6e3da0fe4ee512de diff --git a/src/files.c b/src/files.c index 62bab202..ac73db93 100644 --- a/src/files.c +++ b/src/files.c @@ -288,6 +288,11 @@ static struct LevelFileConfigInfo chunk_config_ELEM[] = TYPE_BOOLEAN, CONF_VALUE_8_BIT(12), &li.shifted_relocation, FALSE }, + { + EL_PLAYER_1, -1, + TYPE_BOOLEAN, CONF_VALUE_8_BIT(15), + &li.lazy_relocation, FALSE + }, /* (these values are different for each player) */ { @@ -3007,6 +3012,8 @@ static int LoadLevel_NOTE(File *file, int chunk_size, struct LevelInfo *level) int envelope_nr = element - EL_ENVELOPE_1; int real_chunk_size = 2; + xx_envelope = level->envelope[envelope_nr]; /* copy into temporary buffer */ + while (!checkEndOfFile(file)) { real_chunk_size += LoadLevel_MicroChunk(file, chunk_config_NOTE, @@ -3016,7 +3023,7 @@ static int LoadLevel_NOTE(File *file, int chunk_size, struct LevelInfo *level) break; } - level->envelope[envelope_nr] = xx_envelope; + level->envelope[envelope_nr] = xx_envelope; /* copy from temporary buffer */ return real_chunk_size; } @@ -7158,34 +7165,34 @@ void DumpLevel(struct LevelInfo *level) return; } - printf_line("-", 79); - printf("Level xxx (file version %08d, game version %08d)\n", - level->file_version, level->game_version); - printf_line("-", 79); + PrintLine("-", 79); + Print("Level xxx (file version %08d, game version %08d)\n", + level->file_version, level->game_version); + PrintLine("-", 79); - printf("Level author: '%s'\n", level->author); - printf("Level title: '%s'\n", level->name); - printf("\n"); - printf("Playfield size: %d x %d\n", level->fieldx, level->fieldy); - printf("\n"); - printf("Level time: %d seconds\n", level->time); - printf("Gems needed: %d\n", level->gems_needed); - printf("\n"); - printf("Time for magic wall: %d seconds\n", level->time_magic_wall); - printf("Time for wheel: %d seconds\n", level->time_wheel); - printf("Time for light: %d seconds\n", level->time_light); - printf("Time for timegate: %d seconds\n", level->time_timegate); - printf("\n"); - printf("Amoeba speed: %d\n", level->amoeba_speed); - printf("\n"); + Print("Level author: '%s'\n", level->author); + Print("Level title: '%s'\n", level->name); + Print("\n"); + Print("Playfield size: %d x %d\n", level->fieldx, level->fieldy); + Print("\n"); + Print("Level time: %d seconds\n", level->time); + Print("Gems needed: %d\n", level->gems_needed); + Print("\n"); + Print("Time for magic wall: %d seconds\n", level->time_magic_wall); + Print("Time for wheel: %d seconds\n", level->time_wheel); + Print("Time for light: %d seconds\n", level->time_light); + Print("Time for timegate: %d seconds\n", level->time_timegate); + Print("\n"); + Print("Amoeba speed: %d\n", level->amoeba_speed); + Print("\n"); - printf("EM style slippery gems: %s\n", (level->em_slippery_gems ? "yes" : "no")); - printf("Player blocks last field: %s\n", (level->block_last_field ? "yes" : "no")); - printf("SP player blocks last field: %s\n", (level->sp_block_last_field ? "yes" : "no")); - printf("use spring bug: %s\n", (level->use_spring_bug ? "yes" : "no")); - printf("use step counter: %s\n", (level->use_step_counter ? "yes" : "no")); + Print("EM style slippery gems: %s\n", (level->em_slippery_gems ? "yes" : "no")); + Print("Player blocks last field: %s\n", (level->block_last_field ? "yes" : "no")); + Print("SP player blocks last field: %s\n", (level->sp_block_last_field ? "yes" : "no")); + Print("use spring bug: %s\n", (level->use_spring_bug ? "yes" : "no")); + Print("use step counter: %s\n", (level->use_step_counter ? "yes" : "no")); - printf_line("-", 79); + PrintLine("-", 79); } @@ -7748,13 +7755,13 @@ void DumpTape(struct TapeInfo *tape) return; } - printf_line("-", 79); - printf("Tape of Level %03d (file version %08d, game version %08d)\n", - tape->level_nr, tape->file_version, tape->game_version); - printf(" (effective engine version %08d)\n", - tape->engine_version); - printf("Level series identifier: '%s'\n", tape->level_identifier); - printf_line("-", 79); + PrintLine("-", 79); + Print("Tape of Level %03d (file version %08d, game version %08d)\n", + tape->level_nr, tape->file_version, tape->game_version); + Print(" (effective engine version %08d)\n", + tape->engine_version); + Print("Level series identifier: '%s'\n", tape->level_identifier); + PrintLine("-", 79); tape_frame_counter = 0; @@ -7763,7 +7770,7 @@ void DumpTape(struct TapeInfo *tape) if (i >= MAX_TAPE_LEN) break; - printf("%04d: ", i); + Print("%04d: ", i); for (j = 0; j < MAX_PLAYERS; j++) { @@ -7771,24 +7778,24 @@ void DumpTape(struct TapeInfo *tape) { int action = tape->pos[i].action[j]; - printf("%d:%02x ", j, action); - printf("[%c%c%c%c|%c%c] - ", - (action & JOY_LEFT ? '<' : ' '), - (action & JOY_RIGHT ? '>' : ' '), - (action & JOY_UP ? '^' : ' '), - (action & JOY_DOWN ? 'v' : ' '), - (action & JOY_BUTTON_1 ? '1' : ' '), - (action & JOY_BUTTON_2 ? '2' : ' ')); + Print("%d:%02x ", j, action); + Print("[%c%c%c%c|%c%c] - ", + (action & JOY_LEFT ? '<' : ' '), + (action & JOY_RIGHT ? '>' : ' '), + (action & JOY_UP ? '^' : ' '), + (action & JOY_DOWN ? 'v' : ' '), + (action & JOY_BUTTON_1 ? '1' : ' '), + (action & JOY_BUTTON_2 ? '2' : ' ')); } } - printf("(%03d) ", tape->pos[i].delay); - printf("[%05d]\n", tape_frame_counter); + Print("(%03d) ", tape->pos[i].delay); + Print("[%05d]\n", tape_frame_counter); tape_frame_counter += tape->pos[i].delay; } - printf_line("-", 79); + PrintLine("-", 79); } @@ -7893,27 +7900,27 @@ void SaveScore(int nr) #define SETUP_TOKEN_SCROLL_DELAY 6 #define SETUP_TOKEN_SCROLL_DELAY_VALUE 7 #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_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_SHOW_SNAPSHOT_BUTTONS 29 #define SETUP_TOKEN_GRAPHICS_SET 30 #define SETUP_TOKEN_SOUNDS_SET 31 #define SETUP_TOKEN_MUSIC_SET 32 @@ -8028,16 +8035,17 @@ void SaveScore(int nr) #define SETUP_TOKEN_INT_PROGRAM_WEBSITE 3 #define SETUP_TOKEN_INT_PROGRAM_COPYRIGHT 4 #define SETUP_TOKEN_INT_PROGRAM_COMPANY 5 -#define SETUP_TOKEN_INT_DEFAULT_GRAPHICS_SET 6 -#define SETUP_TOKEN_INT_DEFAULT_SOUNDS_SET 7 -#define SETUP_TOKEN_INT_DEFAULT_MUSIC_SET 8 -#define SETUP_TOKEN_INT_FALLBACK_GRAPHICS_FILE 9 -#define SETUP_TOKEN_INT_FALLBACK_SOUNDS_FILE 10 -#define SETUP_TOKEN_INT_FALLBACK_MUSIC_FILE 11 -#define SETUP_TOKEN_INT_DEFAULT_LEVEL_SERIES 12 -#define SETUP_TOKEN_INT_CHOOSE_FROM_TOP_LEVELDIR 13 - -#define NUM_INTERNAL_SETUP_TOKENS 14 +#define SETUP_TOKEN_INT_PROGRAM_ICON_FILE 6 +#define SETUP_TOKEN_INT_DEFAULT_GRAPHICS_SET 7 +#define SETUP_TOKEN_INT_DEFAULT_SOUNDS_SET 8 +#define SETUP_TOKEN_INT_DEFAULT_MUSIC_SET 9 +#define SETUP_TOKEN_INT_FALLBACK_GRAPHICS_FILE 10 +#define SETUP_TOKEN_INT_FALLBACK_SOUNDS_FILE 11 +#define SETUP_TOKEN_INT_FALLBACK_MUSIC_FILE 12 +#define SETUP_TOKEN_INT_DEFAULT_LEVEL_SERIES 13 +#define SETUP_TOKEN_INT_CHOOSE_FROM_TOP_LEVELDIR 14 + +#define NUM_INTERNAL_SETUP_TOKENS 15 /* options setup */ #define SETUP_TOKEN_OPTIONS_VERBOSE 0 @@ -8065,7 +8073,6 @@ static struct TokenInfo global_setup_tokens[] = { 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"}, { TYPE_SWITCH, &si.show_titlescreen, "show_titlescreen" }, @@ -8086,6 +8093,7 @@ static struct TokenInfo global_setup_tokens[] = { TYPE_INTEGER,&si.game_frame_delay, "game_frame_delay" }, { TYPE_SWITCH, &si.sp_show_border_elements, "sp_show_border_elements" }, { TYPE_SWITCH, &si.small_game_graphics, "small_game_graphics" }, + { TYPE_SWITCH, &si.show_snapshot_buttons, "show_snapshot_buttons" }, { TYPE_STRING, &si.graphics_set, "graphics_set" }, { TYPE_STRING, &si.sounds_set, "sounds_set" }, { TYPE_STRING, &si.music_set, "music_set" }, @@ -8200,6 +8208,7 @@ static struct TokenInfo internal_setup_tokens[] = { TYPE_STRING, &sxi.program_website, "program_website" }, { TYPE_STRING, &sxi.program_copyright, "program_copyright" }, { TYPE_STRING, &sxi.program_company, "program_company" }, + { TYPE_STRING, &sxi.program_icon_file, "program_icon_file" }, { TYPE_STRING, &sxi.default_graphics_set, "default_graphics_set" }, { TYPE_STRING, &sxi.default_sounds_set, "default_sounds_set" }, { TYPE_STRING, &sxi.default_music_set, "default_music_set" }, @@ -8244,7 +8253,6 @@ static void setSetupInfoToDefaults(struct SetupInfo *si) 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; si->show_titlescreen = TRUE; @@ -8265,6 +8273,7 @@ static void setSetupInfoToDefaults(struct SetupInfo *si) si->game_frame_delay = GAME_FRAME_DELAY; si->sp_show_border_elements = FALSE; si->small_game_graphics = FALSE; + si->show_snapshot_buttons = FALSE; si->graphics_set = getStringCopy(GFX_CLASSIC_SUBDIR); si->sounds_set = getStringCopy(SND_CLASSIC_SUBDIR); @@ -8357,6 +8366,8 @@ static void setSetupInfoToDefaults(struct SetupInfo *si) si->internal.program_copyright = getStringCopy(PROGRAM_COPYRIGHT_STRING); si->internal.program_company = getStringCopy(PROGRAM_COMPANY_STRING); + si->internal.program_icon_file = getStringCopy(PROGRAM_ICON_FILENAME); + si->internal.default_graphics_set = getStringCopy(GFX_CLASSIC_SUBDIR); si->internal.default_sounds_set = getStringCopy(SND_CLASSIC_SUBDIR); si->internal.default_music_set = getStringCopy(MUS_CLASSIC_SUBDIR); @@ -8784,9 +8795,36 @@ static void InitMenuDesignSettings_SpecialPreProcessing() static void InitMenuDesignSettings_SpecialPostProcessing() { + static struct + { + struct XY *dst, *src; + } + game_buttons_xy[] = + { + { &game.button.save, &game.button.stop }, + { &game.button.pause2, &game.button.pause }, + { &game.button.load, &game.button.play }, + { &game.button.undo, &game.button.stop }, + { &game.button.redo, &game.button.play }, + + { NULL, NULL } + }; + int i; + /* special case: initialize later added SETUP list size from LEVELS value */ if (menu.list_size[GAME_MODE_SETUP] == -1) menu.list_size[GAME_MODE_SETUP] = menu.list_size[GAME_MODE_LEVELS]; + + /* set default position for snapshot buttons to stop/pause/play buttons */ + for (i = 0; game_buttons_xy[i].dst != NULL; i++) + { + if ((*game_buttons_xy[i].dst).x == -1 && + (*game_buttons_xy[i].dst).y == -1) + { + (*game_buttons_xy[i].dst).x = (*game_buttons_xy[i].src).x; + (*game_buttons_xy[i].dst).y = (*game_buttons_xy[i].src).y; + } + } } static void LoadMenuDesignSettingsFromFilename(char *filename) @@ -8861,6 +8899,14 @@ static void LoadMenuDesignSettingsFromFilename(char *filename) menu.draw_xoffset_info[i] = get_integer_from_string(value_1); if (value_2 != NULL) menu.draw_yoffset_info[i] = get_integer_from_string(value_2); + + if (i == GFX_SPECIAL_ARG_INFO_ELEMENTS) + { + char *value_1 = getHashEntry(setup_file_hash, "menu.list_size.INFO"); + + if (value_1 != NULL) + menu.list_size_info[i] = get_integer_from_string(value_1); + } } /* special case: initialize with default values that may be overwritten */