*/
#define GET_BE16(x) ((&x)[0] << 8 | (&x)[1])
-#define PUT_BE16(x, y) {(&x)[0] = (y) >> 8; (&x)[1] = (y) & 0xff;}
static const short map_emc[256] =
{
/* common to all emc caves */
- cav.time_seconds = GET_BE16(src[2110]);
- if (cav.time_seconds > 9999)
- cav.time_seconds = 9999;
-
- cav.required_initial = src[2095];
+ cav.time_seconds = MIN(GET_BE16(src[2110]), 9999);
+ cav.gems_needed = src[2095];
/* scores */
/* times */
- cav.android_move_time = GET_BE16(src[2164]);
- cav.android_clone_time = GET_BE16(src[2166]);
- cav.ball_time = GET_BE16(src[2160]);
-
- cav.lenses_time = GET_BE16(src[2154]);
- cav.magnify_time = GET_BE16(src[2156]);
- cav.wheel_time = GET_BE16(src[2104]);
+ cav.android_move_time = MIN(GET_BE16(src[2164]), 9999);
+ cav.android_clone_time = MIN(GET_BE16(src[2166]), 9999);
+ cav.ball_time = MIN(GET_BE16(src[2160]), 9999);
- temp = GET_BE16(src[2100]) * 28;
- if (temp > 9999)
- temp = 9999;
- cav.amoeba_time = temp;
+ cav.lenses_time = MIN(GET_BE16(src[2154]), 9999);
+ cav.magnify_time = MIN(GET_BE16(src[2156]), 9999);
+ cav.wheel_time = MIN(GET_BE16(src[2104]), 9999);
- cav.wonderwall_time_initial = GET_BE16(src[2102]);
+ cav.amoeba_time = MIN(GET_BE16(src[2100]) * 28, 9999);
+ cav.wonderwall_time = MIN(GET_BE16(src[2102]), 9999);
- cav.wind_cnt_initial = src[2149] & 15 ? cav.wind_time : 0;
+ cav.wind_cnt = src[2149] & 15 ? cav.wind_time : 0;
temp = src[2149];
- cav.wind_direction_initial = (temp & 8 ? 0 :
- temp & 1 ? 1 :
- temp & 2 ? 2 :
- temp & 4 ? 3 : 0);
+ cav.wind_direction = (temp & 8 ? 0 :
+ temp & 1 ? 1 :
+ temp & 2 ? 2 :
+ temp & 4 ? 3 : 0);
+
/* global flags */
- cav.ball_random = src[2162] & 1 ? 1 : 0;
- cav.ball_state_initial = src[2162] & 128 ? 1 : 0;
+ cav.ball_random = src[2162] & 1 ? 1 : 0;
+ cav.ball_state = src[2162] & 128 ? 1 : 0;
for (temp = 1; temp < 2047; temp++)
{
switch (src[temp])
{
case 36: /* wonderwall */
- cav.wonderwall_state_initial = 1;
- cav.wonderwall_time_initial = 9999;
+ cav.wonderwall_state = 1;
+ cav.wonderwall_time = 9999;
break;
case 40: /* wheel */
- cav.wheel_x_initial = temp & 63;
- cav.wheel_y_initial = temp >> 6;
- cav.wheel_cnt_initial = cav.wheel_time;
+ cav.wheel_x = temp & 63;
+ cav.wheel_y = temp >> 6;
+ cav.wheel_cnt = cav.wheel_time;
break;
case 163: /* fake blank */
- cav.lenses_cnt_initial = 9999;
+ cav.lenses_cnt = 9999;
break;
case 164: /* fake grass */
- cav.magnify_cnt_initial = 9999;
+ cav.magnify_cnt = 9999;
break;
}
}
/* android */
- temp = GET_BE16(src[2168]);
-
- init_android_clone_table(temp);
+ init_android_clone_table(GET_BE16(src[2168]));
/* eaters */
/* first fill the complete playfield with the default border element */
for (y = 0; y < CAVE_HEIGHT; y++)
for (x = 0; x < CAVE_WIDTH; x++)
- cav.cave_raw[x][y] = Zborder;
+ cav.cave[x][y] = Zborder;
/* then copy the real level contents from level file into the playfield */
temp = 0;
for (y = 0; y < cav.height; y++)
for (x = 0; x < cav.width; x++)
- cav.cave_raw[x][y] = map_emc[src[temp++]];
+ cav.cave[x][y] = map_emc[src[temp++]];
/* at last, set the two players at their positions in the playfield */
/* (native EM[C] levels always have exactly two players in a level) */
for (i = 0; i < 2; i++)
- cav.cave_raw[cav.player_x[i]][cav.player_y[i]] = Zplayer;
+ cav.cave[cav.player_x[i]][cav.player_y[i]] = Zplayer;
native_em_level.file_version = file_version;
}
src[2098] &= 7;
src[GET_BE16(src[2098])] = 128;
- /* amoeba speed */
- if (GET_BE16(src[2100]) > 9999)
- PUT_BE16(src[2100], 9999);
-
- /* time wonderwall */
- if (GET_BE16(src[2102]) > 9999)
- PUT_BE16(src[2102], 9999);
-
- /* time */
- if (GET_BE16(src[2110]) > 9999)
- PUT_BE16(src[2110], 9999);
-
/* wind direction */
i = src[2149];
i &= 15;
i &= -i;
src[2149] = i;
- /* time lenses */
- if (GET_BE16(src[2154]) > 9999)
- PUT_BE16(src[2154], 9999);
-
- /* time magnify */
- if (GET_BE16(src[2156]) > 9999)
- PUT_BE16(src[2156], 9999);
-
/* ball object */
src[2158] = 0;
src[2159] = map_v6[src[2159]];
- /* ball pause */
- if (GET_BE16(src[2160]) > 9999)
- PUT_BE16(src[2160], 9999);
-
/* ball data */
src[2162] &= 129;
if (src[2162] & 1)
src[2163] = 0;
- /* android move pause */
- if (GET_BE16(src[2164]) > 9999)
- PUT_BE16(src[2164], 9999);
-
- /* android clone pause */
- if (GET_BE16(src[2166]) > 9999)
- PUT_BE16(src[2166], 9999);
-
/* android data */
src[2168] &= 31;