X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fgame_em%2Fconvert.c;h=6aac3b7d4db789b8f3d711a78096906f65658436;hb=1e4a6b46371858fdb85052eec3e7143732ff91b5;hp=c40eed93dee9583f264b5c6f6bfe94d9fb18ad5d;hpb=0078fa1620abed262370083c0c6aa475a25e1b04;p=rocksndiamonds.git diff --git a/src/game_em/convert.c b/src/game_em/convert.c index c40eed93..6aac3b7d 100644 --- a/src/game_em/convert.c +++ b/src/game_em/convert.c @@ -134,8 +134,12 @@ int cleanup_em_level(unsigned char *src, int length) for (i = 2112; i < 2148; i++) src[i] = src[i - 64]; } +#if 0 + else if (length >= 2106) /* !!! TEST ONLY: SHOW BROKEN LEVELS !!! */ +#else else if (length >= 2106 && src[1983] == 116) +#endif { /* ---------- this cave has V4 file format ---------- */ file_version = FILE_VERSION_EM_V4; @@ -165,10 +169,35 @@ int cleanup_em_level(unsigned char *src, int length) for (i = 2112; i < 2148; i++) src[i] = src[i - 64]; } +#if 1 + else if (length >= 2106 && + src[0] == 245 && + src[1983] == 27) + { + unsigned char j = 94; + + /* ---------- this cave has V3 file format ---------- */ + file_version = FILE_VERSION_EM_V3; + + for (i = 0; i < 2106; i++) + src[i] = (src[i] ^ (j += 7)) - 0x11; + src[1] = 131; + for (i = 0; i < 2048; i++) + src[i] = remap_v4[src[i]]; + for (i = 2048; i < 2084; i++) + src[i] = remap_v4eater[src[i] >= 28 ? 0 : src[i]]; + for (i = 2112; i < 2148; i++) + src[i] = src[i - 64]; + } +#endif else { /* ---------- this cave has unknown file format ---------- */ +#if 1 + printf("::: %d, %d\n", src[0], src[1983]); +#endif + return 0; } @@ -213,13 +242,13 @@ int cleanup_em_level(unsigned char *src, int length) /* fix acid */ for (i = 64; i < 2048; i++) { - if (src[i] == 63) + if (src[i] == 63) /* 'Xacid_s' (acid pool, bottom middle) */ { if (file_version == FILE_VERSION_EM_V4 && i < 2048 - 64 && src[i + 64] == 63) - src[i - 64] = 255; + src[i - 64] = 255; /* replace element above with 'Xfake_acid_1' */ else - src[i - 64] = 101; + src[i - 64] = 101; /* replace element above with 'Xacid_1' */ } } #endif @@ -352,7 +381,7 @@ int cleanup_em_level(unsigned char *src, int length) /* size of v6 cave */ length = 2172; -#if 0 +#if 1 printf("::: EM level file version: %d\n", file_version); #endif @@ -872,7 +901,11 @@ void prepare_em_level(void) for (x = 0; x < WIDTH; x++) Draw[y][x] = Cave[y][x]; +#if 1 + lev.time_initial = lev.time_seconds; +#else lev.time_initial = (lev.time_seconds * 50 + 7) / 8; +#endif lev.time = lev.time_initial; lev.required = lev.required_initial; @@ -903,6 +936,8 @@ void prepare_em_level(void) lev.home = lev.home_initial; + lev.killed_out_of_time = FALSE; + ply1.num = 0; ply1.alive = ply1.alive_initial; ply1.dynamite = 0;