X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Ffiles.c;h=8b69451a5f747767416c85b8bf249008a1f2e107;hb=c3387d3deda2aeece28600228e47d67dfbc52bcb;hp=33b174de4e367911d92531c65ecf778d6366eb30;hpb=499ad3bb12d513266ddcebe41a84eee8237a7fb5;p=rocksndiamonds.git diff --git a/src/files.c b/src/files.c index 33b174de..8b69451a 100644 --- a/src/files.c +++ b/src/files.c @@ -3779,6 +3779,15 @@ static void CopyNativeTape_RND_to_SP(struct LevelInfo *level) { int demo_action = map_key_RND_to_SP(tape.pos[i].action[0]); int demo_repeat = tape.pos[i].delay; + int demo_entries = (demo_repeat + 15) / 16; + + if (demo->length + demo_entries >= SP_MAX_TAPE_LEN) + { + Error(ERR_WARN, "tape truncated: size exceeds maximum SP demo size %d", + SP_MAX_TAPE_LEN); + + break; + } for (j = 0; j < demo_repeat / 16; j++) demo->data[demo->length++] = 0xf0 | demo_action; @@ -3787,8 +3796,6 @@ static void CopyNativeTape_RND_to_SP(struct LevelInfo *level) demo->data[demo->length++] = ((demo_repeat % 16 - 1) << 4) | demo_action; } - demo->data[demo->length++] = 0xff; - demo->is_available = TRUE; } @@ -3808,12 +3815,16 @@ static void CopyNativeTape_SP_to_RND(struct LevelInfo *level) return; tape.level_nr = demo->level_nr; /* (currently not used) */ - tape.length = demo->length - 1; /* without "end of demo" byte */ + tape.length = MIN(demo->length, MAX_TAPE_LEN); tape.random_seed = level_sp->header.DemoRandomSeed; TapeSetDateFromEpochSeconds(getFileTimestampEpochSeconds(filename)); - for (i = 0; i < demo->length - 1; i++) + if (tape.length < demo->length) + Error(ERR_WARN, "SP demo truncated: size %d exceeds maximum tape size %d", + demo->length, MAX_TAPE_LEN); + + for (i = 0; i < tape.length; i++) { int demo_action = demo->data[i] & 0x0f; int demo_repeat = (demo->data[i] & 0xf0) >> 4; @@ -8077,10 +8088,11 @@ void SaveScore(int nr) #define SETUP_TOKEN_INT_FALLBACK_MUSIC_FILE 13 #define SETUP_TOKEN_INT_DEFAULT_LEVEL_SERIES 14 #define SETUP_TOKEN_INT_CHOOSE_FROM_TOP_LEVELDIR 15 -#define SETUP_TOKEN_INT_DEFAULT_WINDOW_WIDTH 16 -#define SETUP_TOKEN_INT_DEFAULT_WINDOW_HEIGHT 17 +#define SETUP_TOKEN_INT_SHOW_SCALING_IN_TITLE 16 +#define SETUP_TOKEN_INT_DEFAULT_WINDOW_WIDTH 17 +#define SETUP_TOKEN_INT_DEFAULT_WINDOW_HEIGHT 18 -#define NUM_INTERNAL_SETUP_TOKENS 18 +#define NUM_INTERNAL_SETUP_TOKENS 19 /* debug setup */ #define SETUP_TOKEN_DEBUG_FRAME_DELAY_0 0 @@ -8272,6 +8284,7 @@ static struct TokenInfo internal_setup_tokens[] = { TYPE_STRING, &sxi.fallback_music_file, "fallback_music_file" }, { TYPE_STRING, &sxi.default_level_series, "default_level_series" }, { TYPE_BOOLEAN,&sxi.choose_from_top_leveldir, "choose_from_top_leveldir" }, + { TYPE_BOOLEAN,&sxi.show_scaling_in_title, "show_scaling_in_title" }, { TYPE_INTEGER,&sxi.default_window_width, "default_window_width" }, { TYPE_INTEGER,&sxi.default_window_height, "default_window_height" }, }; @@ -8470,6 +8483,7 @@ static void setSetupInfoToDefaults(struct SetupInfo *si) si->internal.default_level_series = getStringCopy(UNDEFINED_LEVELSET); si->internal.choose_from_top_leveldir = FALSE; + si->internal.show_scaling_in_title = TRUE; si->internal.default_window_width = WIN_XSIZE_DEFAULT; si->internal.default_window_height = WIN_YSIZE_DEFAULT;