X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fgame_em%2Fconvert.c;h=e82a3547a84637417d1b45f5fb58d83c2131f522;hb=0bc034af5fcbf709be96723aff7ec5bc0c3c7baf;hp=dc5d78c6926caf01bd93469fa1221b7a42ceda8b;hpb=66967822ba41a7912b70292ee6bed3c0f6b3e968;p=rocksndiamonds.git diff --git a/src/game_em/convert.c b/src/game_em/convert.c index dc5d78c6..e82a3547 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; } @@ -353,7 +382,8 @@ int cleanup_em_level(unsigned char *src, int length) length = 2172; #if 1 - printf("::: EM level file version: %d\n", file_version); + if (options.debug) + printf("::: EM level file version: %d\n", file_version); #endif return file_version; @@ -872,7 +902,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 +937,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; @@ -911,7 +947,7 @@ void prepare_em_level(void) ply1.anim = 0; ply1.oldx = ply1.x = ply1.x_initial; ply1.oldy = ply1.y = ply1.y_initial; - ply1.last_move_dir = MV_NO_MOVING; + ply1.last_move_dir = MV_NONE; ply1.joy_n = ply1.joy_e = ply1.joy_s = ply1.joy_w = 0; ply1.joy_snap = ply1.joy_drop = 0; ply1.joy_stick = ply1.joy_spin = 0; @@ -924,7 +960,7 @@ void prepare_em_level(void) ply2.anim = 0; ply2.oldx = ply2.x = ply2.x_initial; ply2.oldy = ply2.y = ply2.y_initial; - ply2.last_move_dir = MV_NO_MOVING; + ply2.last_move_dir = MV_NONE; ply2.joy_n = ply2.joy_e = ply2.joy_s = ply2.joy_w = 0; ply2.joy_snap = ply1.joy_drop = 0; ply2.joy_stick = ply2.joy_spin = 0;