},
{
Yandroid_ne, FALSE, FALSE,
- EL_EMC_ANDROID, ACTION_TURNING_FROM_UP, MV_BIT_RIGHT
+ EL_EMC_ANDROID, ACTION_GROWING, MV_BIT_UPRIGHT
},
{
Yandroid_neB, FALSE, TRUE,
- EL_EMC_ANDROID, ACTION_TURNING_FROM_UP, MV_BIT_RIGHT
+ EL_EMC_ANDROID, ACTION_SHRINKING, MV_BIT_UPRIGHT
},
{
Yandroid_e, FALSE, FALSE,
},
{
Yandroid_se, FALSE, FALSE,
- EL_EMC_ANDROID, ACTION_TURNING_FROM_DOWN, MV_BIT_RIGHT
+ EL_EMC_ANDROID, ACTION_GROWING, MV_BIT_DOWNRIGHT
},
{
Yandroid_seB, FALSE, TRUE,
- EL_EMC_ANDROID, ACTION_TURNING_FROM_DOWN, MV_BIT_RIGHT
+ EL_EMC_ANDROID, ACTION_SHRINKING, MV_BIT_DOWNRIGHT
},
{
Yandroid_s, FALSE, FALSE,
},
{
Yandroid_sw, FALSE, FALSE,
- EL_EMC_ANDROID, ACTION_TURNING_FROM_DOWN, MV_BIT_LEFT
+ EL_EMC_ANDROID, ACTION_GROWING, MV_BIT_DOWNLEFT
},
{
Yandroid_swB, FALSE, TRUE,
- EL_EMC_ANDROID, ACTION_TURNING_FROM_DOWN, MV_BIT_LEFT
+ EL_EMC_ANDROID, ACTION_SHRINKING, MV_BIT_DOWNLEFT
},
{
Yandroid_w, FALSE, FALSE,
},
{
Yandroid_nw, FALSE, FALSE,
- EL_EMC_ANDROID, ACTION_TURNING_FROM_UP, MV_BIT_LEFT
+ EL_EMC_ANDROID, ACTION_GROWING, MV_BIT_UPLEFT
},
{
Yandroid_nwB, FALSE, TRUE,
- EL_EMC_ANDROID, ACTION_TURNING_FROM_UP, MV_BIT_LEFT
+ EL_EMC_ANDROID, ACTION_SHRINKING, MV_BIT_UPLEFT
},
{
Xspring, TRUE, FALSE,
SPR_still, 1,
EL_PLAYER_2, ACTION_DEFAULT, -1,
},
+ {
+ SPR_walk + 0, 2,
+ EL_PLAYER_3, ACTION_MOVING, MV_BIT_UP,
+ },
+ {
+ SPR_walk + 1, 2,
+ EL_PLAYER_3, ACTION_MOVING, MV_BIT_RIGHT,
+ },
+ {
+ SPR_walk + 2, 2,
+ EL_PLAYER_3, ACTION_MOVING, MV_BIT_DOWN,
+ },
+ {
+ SPR_walk + 3, 2,
+ EL_PLAYER_3, ACTION_MOVING, MV_BIT_LEFT,
+ },
+ {
+ SPR_push + 0, 2,
+ EL_PLAYER_3, ACTION_PUSHING, MV_BIT_UP,
+ },
+ {
+ SPR_push + 1, 2,
+ EL_PLAYER_3, ACTION_PUSHING, MV_BIT_RIGHT,
+ },
+ {
+ SPR_push + 2, 2,
+ EL_PLAYER_3, ACTION_PUSHING, MV_BIT_DOWN,
+ },
+ {
+ SPR_push + 3, 2,
+ EL_PLAYER_3, ACTION_PUSHING, MV_BIT_LEFT,
+ },
+ {
+ SPR_spray + 0, 2,
+ EL_PLAYER_3, ACTION_SNAPPING, MV_BIT_UP,
+ },
+ {
+ SPR_spray + 1, 2,
+ EL_PLAYER_3, ACTION_SNAPPING, MV_BIT_RIGHT,
+ },
+ {
+ SPR_spray + 2, 2,
+ EL_PLAYER_3, ACTION_SNAPPING, MV_BIT_DOWN,
+ },
+ {
+ SPR_spray + 3, 2,
+ EL_PLAYER_3, ACTION_SNAPPING, MV_BIT_LEFT,
+ },
+ {
+ SPR_walk + 0, 3,
+ EL_PLAYER_4, ACTION_MOVING, MV_BIT_UP,
+ },
+ {
+ SPR_walk + 1, 3,
+ EL_PLAYER_4, ACTION_MOVING, MV_BIT_RIGHT,
+ },
+ {
+ SPR_walk + 2, 3,
+ EL_PLAYER_4, ACTION_MOVING, MV_BIT_DOWN,
+ },
+ {
+ SPR_walk + 3, 3,
+ EL_PLAYER_4, ACTION_MOVING, MV_BIT_LEFT,
+ },
+ {
+ SPR_push + 0, 3,
+ EL_PLAYER_4, ACTION_PUSHING, MV_BIT_UP,
+ },
+ {
+ SPR_push + 1, 3,
+ EL_PLAYER_4, ACTION_PUSHING, MV_BIT_RIGHT,
+ },
+ {
+ SPR_push + 2, 3,
+ EL_PLAYER_4, ACTION_PUSHING, MV_BIT_DOWN,
+ },
+ {
+ SPR_push + 3, 3,
+ EL_PLAYER_4, ACTION_PUSHING, MV_BIT_LEFT,
+ },
+ {
+ SPR_spray + 0, 3,
+ EL_PLAYER_4, ACTION_SNAPPING, MV_BIT_UP,
+ },
+ {
+ SPR_spray + 1, 3,
+ EL_PLAYER_4, ACTION_SNAPPING, MV_BIT_RIGHT,
+ },
+ {
+ SPR_spray + 2, 3,
+ EL_PLAYER_4, ACTION_SNAPPING, MV_BIT_DOWN,
+ },
+ {
+ SPR_spray + 3, 3,
+ EL_PLAYER_4, ACTION_SNAPPING, MV_BIT_LEFT,
+ },
+ {
+ SPR_still, 2,
+ EL_PLAYER_3, ACTION_DEFAULT, -1,
+ },
+ {
+ SPR_still, 3,
+ EL_PLAYER_4, ACTION_DEFAULT, -1,
+ },
{
-1, -1,
struct LEVEL *lev = level_em->lev;
int i, j;
+ for (i = 0; i < TILE_MAX; i++)
+ lev->android_array[i] = Xblank;
+
for (i = 0; i < level->num_android_clone_elements; i++)
{
int element_rnd = level->android_clone_element[i];
if (direction == MV_NONE)
return element_info[element].graphic[action];
- direction = MV_DIR_BIT(direction);
+ direction = MV_DIR_TO_BIT(direction);
return element_info[element].direction_graphic[action][direction];
}
int el_act_dir2img(int element, int action, int direction)
{
element = GFX_ELEMENT(element);
- direction = MV_DIR_BIT(direction); /* default: MV_NONE => MV_DOWN */
+ direction = MV_DIR_TO_BIT(direction); /* default: MV_NONE => MV_DOWN */
/* direction_graphic[][] == graphic[] for undefined direction graphics */
return element_info[element].direction_graphic[action][direction];
if (direction == MV_NONE)
return element_info[element].crumbled[action];
- direction = MV_DIR_BIT(direction);
+ direction = MV_DIR_TO_BIT(direction);
return element_info[element].direction_crumbled[action][direction];
}
static int el_act_dir2crm(int element, int action, int direction)
{
element = GFX_ELEMENT(element);
- direction = MV_DIR_BIT(direction); /* default: MV_NONE => MV_DOWN */
+ direction = MV_DIR_TO_BIT(direction); /* default: MV_NONE => MV_DOWN */
/* direction_graphic[][] == graphic[] for undefined direction graphics */
return element_info[element].direction_crumbled[action][direction];
void InitGraphicInfo_EM(void)
{
struct Mapping_EM_to_RND_object object_mapping[TILE_MAX];
- struct Mapping_EM_to_RND_player player_mapping[2][SPR_MAX];
+ struct Mapping_EM_to_RND_player player_mapping[MAX_PLAYERS][SPR_MAX];
int i, j, p;
#if DEBUG_EM_GFX
}
/* always start with reliable default values */
- for (p = 0; p < 2; p++)
+ for (p = 0; p < MAX_PLAYERS; p++)
{
for (i = 0; i < SPR_MAX; i++)
{
object_mapping[e].action = em_object_mapping_list[i].action;
if (em_object_mapping_list[i].direction != -1)
- object_mapping[e].direction = (1 << em_object_mapping_list[i].direction);
+ object_mapping[e].direction =
+ MV_DIR_FROM_BIT(em_object_mapping_list[i].direction);
}
for (i = 0; em_player_mapping_list[i].action_em != -1; i++)
if (em_player_mapping_list[i].direction != -1)
player_mapping[p][a].direction =
- (1 << em_player_mapping_list[i].direction);
+ MV_DIR_FROM_BIT(em_player_mapping_list[i].direction);
}
for (i = 0; i < TILE_MAX; i++)
g_em->height = TILEY - cy * step;
}
+#if 1
+ /* create unique graphic identifier to decide if tile must be redrawn */
+ /* bit 31 - 16 (16 bit): EM style graphic
+ bit 15 - 12 ( 4 bit): EM style frame
+ bit 11 - 6 ( 6 bit): graphic width
+ bit 5 - 0 ( 6 bit): graphic height */
+ g_em->unique_identifier =
+ (graphic << 16) | (frame << 12) | (g_em->width << 6) | g_em->height;
+#else
/* create unique graphic identifier to decide if tile must be redrawn */
/* bit 31 - 16 (16 bit): EM style element
bit 15 - 12 ( 4 bit): EM style frame
bit 5 - 0 ( 6 bit): graphic height */
g_em->unique_identifier =
(i << 16) | (j << 12) | (g_em->width << 6) | g_em->height;
+#endif
+
+#if 0
+ if (effective_element == EL_ROCK)
+ printf("::: EL_ROCK(%d, %d): %d, %d => %d\n",
+ effective_action, j, graphic, frame, g_em->unique_identifier);
+#endif
#if DEBUG_EM_GFX
+
+#if 1
+ /* skip check for EMC elements not contained in original EMC artwork */
+ if (element == EL_EMC_FAKE_ACID)
+ continue;
+#endif
+
if (g_em->bitmap != debug_bitmap ||
g_em->src_x != debug_src_x ||
g_em->src_y != debug_src_y ||
}
}
- for (p = 0; p < 2; p++)
+ for (p = 0; p < MAX_PLAYERS; p++)
{
for (i = 0; i < SPR_MAX; i++)
{