{ ANIM_LINEAR, "linear" },
{ ANIM_PINGPONG, "pingpong" },
{ ANIM_PINGPONG2, "pingpong 2" },
+ { ANIM_LEVEL_NR, "level number" },
{ -1, NULL }
};
setup_editor_el_mirror_magic = FALSE;
setup_editor_el_deflektor = FALSE;
}
+ else if (level.game_engine_type == GAME_ENGINE_TYPE_BD)
+ {
+ setup_editor_el_emerald_mine = FALSE;
+ setup_editor_el_emerald_mine_club = FALSE;
+ setup_editor_el_more = FALSE;
+ setup_editor_el_sokoban = FALSE;
+ setup_editor_el_supaplex = FALSE;
+ setup_editor_el_diamond_caves = FALSE;
+ setup_editor_el_dx_boulderdash = FALSE;
+ setup_editor_el_mirror_magic = FALSE;
+ setup_editor_el_deflektor = FALSE;
+ setup_editor_el_chars = FALSE;
+ setup_editor_el_steel_chars = FALSE;
+
+ setup_editor_el_custom = FALSE;
+ }
else if (level.game_engine_type == GAME_ENGINE_TYPE_EM)
{
setup_editor_el_boulderdash = FALSE;
{
int font_nr = FONT_TEXT_1;
int font_height = getFontHeight(font_nr);
- struct GadgetInfo *gi= level_editor_gadget[graphicbutton_info[id].gadget_id];
+ struct GadgetInfo *gi = level_editor_gadget[graphicbutton_info[id].gadget_id];
int xoffset_left = getTextWidthForGadget(graphicbutton_info[id].text_left);
int xoffset_right = ED_GADGET_TEXT_DISTANCE;
int yoffset = (gi->height - font_height) / 2;
if (suppressBorderElement())
{
- ed_xsize = max_ed_fieldx;
- ed_ysize = max_ed_fieldy;
+ ed_xsize = lev_fieldx;
+ ed_ysize = lev_fieldy;
}
// check if we need any scrollbars
num_element_counters);
counterbutton_info[counter_id].value = elements_with_counter[i].value;
- counterbutton_info[counter_id].text_right= elements_with_counter[i].text;
+ counterbutton_info[counter_id].text_right = elements_with_counter[i].text;
if (properties_element == EL_GAME_OF_LIFE ||
properties_element == EL_BIOMAZE)
static int numHiresTiles(int element)
{
- if (!IS_MM_WALL(element))
- return 1;
-
- int bits = MM_WALL_BITS(element);
- int num_bits = 0;
-
- while (bits)
- {
- bits &= bits - 1;
- num_bits++;
- }
+ if (IS_MM_WALL(element))
+ return get_number_of_bits(MM_WALL_BITS(element));
- return num_bits;
+ return 1;
}
static void SetDrawModeHiRes(int element)
lev_fieldx = level.fieldx = brush_width;
lev_fieldy = level.fieldy = brush_height;
+ boolean use_bd_engine = TRUE;
boolean use_em_engine = TRUE;
boolean use_sp_engine = TRUE;
boolean use_mm_engine = TRUE;
{
int element = Tile[x][y];
+ if (!IS_BD_ELEMENT(element) && !IS_PLAYER_ELEMENT(element))
+ use_bd_engine = FALSE;
+
if (!IS_EM_ELEMENT(element) && !IS_PLAYER_ELEMENT(element))
use_em_engine = FALSE;
}
}
- level.game_engine_type = (use_em_engine ? GAME_ENGINE_TYPE_EM :
+ level.game_engine_type = (use_bd_engine ? GAME_ENGINE_TYPE_BD :
+ use_em_engine ? GAME_ENGINE_TYPE_EM :
use_sp_engine ? GAME_ENGINE_TYPE_SP :
use_mm_engine ? GAME_ENGINE_TYPE_MM :
GAME_ENGINE_TYPE_RND);
CopyLevelToUndoBuffer(UNDO_ACCUMULATE);
}
-static void DrawAreaElementHighlight(boolean highlighted)
+static void DrawAreaElementHighlight(boolean highlighted,
+ boolean highlighted_similar)
{
DrawEditorLevel(ed_fieldx, ed_fieldy, level_xpos, level_ypos);
{
for (y = 0; y < ed_fieldy; y++)
{
+ boolean highlight = FALSE;
int lx = x + level_xpos;
int ly = y + level_ypos;
if (!IN_LEV_FIELD(lx, ly))
continue;
- if (Tile[lx][ly] != new_element1)
+ // check if element is the same
+ if (Tile[lx][ly] == new_element1)
+ highlight = TRUE;
+
+ // check if element is similar
+ if (highlighted_similar &&
+ strEqual(element_info[Tile[lx][ly]].class_name,
+ element_info[new_element1].class_name))
+ highlight = TRUE;
+
+ // check if element is matching MM style wall
+ if (IS_MM_WALL(Tile[lx][ly]) &&
+ map_mm_wall_element(Tile[lx][ly]) == new_element1)
+ highlight = TRUE;
+
+ if (!highlight)
continue;
- int sx = SX + x * ed_tilesize;
- int sy = SY + y * ed_tilesize;
- int from_sx = sx;
- int from_sy = sy;
- int to_sx = sx + ed_tilesize - 1;
- int to_sy = sy + ed_tilesize - 1;
-
- DrawSimpleWhiteLine(drawto, from_sx, from_sy, to_sx, from_sy);
- DrawSimpleWhiteLine(drawto, to_sx, from_sy, to_sx, to_sy);
- DrawSimpleWhiteLine(drawto, to_sx, to_sy, from_sx, to_sy);
- DrawSimpleWhiteLine(drawto, from_sx, to_sy, from_sx, from_sy);
+ if (IS_MM_WALL(Tile[lx][ly]) && !highlighted_similar)
+ {
+ int i;
+
+ for (i = 0; i < 4; i++)
+ {
+ if (!(MM_WALL_BITS(Tile[lx][ly]) & (1 << i)))
+ continue;
+
+ int xx = x * 2 + (i % 2);
+ int yy = y * 2 + (i / 2);
+ int sx = SX + xx * ed_tilesize / 2;
+ int sy = SY + yy * ed_tilesize / 2;
+ int from_sx = sx;
+ int from_sy = sy;
+ int to_sx = sx + ed_tilesize / 2 - 1;
+ int to_sy = sy + ed_tilesize / 2 - 1;
+
+ DrawSimpleWhiteLine(drawto, from_sx, from_sy, to_sx, from_sy);
+ DrawSimpleWhiteLine(drawto, to_sx, from_sy, to_sx, to_sy);
+ DrawSimpleWhiteLine(drawto, to_sx, to_sy, from_sx, to_sy);
+ DrawSimpleWhiteLine(drawto, from_sx, to_sy, from_sx, from_sy);
+ }
+ }
+ else
+ {
+ int sx = SX + x * ed_tilesize;
+ int sy = SY + y * ed_tilesize;
+ int from_sx = sx;
+ int from_sy = sy;
+ int to_sx = sx + ed_tilesize - 1;
+ int to_sy = sy + ed_tilesize - 1;
+
+ DrawSimpleWhiteLine(drawto, from_sx, from_sy, to_sx, from_sy);
+ DrawSimpleWhiteLine(drawto, to_sx, from_sy, to_sx, to_sy);
+ DrawSimpleWhiteLine(drawto, to_sx, to_sy, from_sx, to_sy);
+ DrawSimpleWhiteLine(drawto, from_sx, to_sy, from_sx, from_sy);
+ }
}
}
}
for (i = 0; editor_elements_info[i].setup_value != NULL; i++)
{
- int *cascade_element= &(*editor_elements_info[i].headline_list)[0];
- boolean *cascade_value=editor_elements_info[i].setup_cascade_value;
+ int *cascade_element = &(*editor_elements_info[i].headline_list)[0];
+ boolean *cascade_value = editor_elements_info[i].setup_cascade_value;
if (*cascade_element == new_element)
{
static void HandleLevelEditorIdle_Drawing(void)
{
static boolean last_highlighted = FALSE;
+ static boolean last_highlighted_similar = FALSE;
boolean highlighted = (GetKeyModState() & KMOD_Alt);
+ boolean highlighted_similar = (GetKeyModState() & KMOD_Shift);
- if (highlighted != last_highlighted)
+ if (highlighted != last_highlighted ||
+ (highlighted && highlighted_similar != last_highlighted_similar))
{
- DrawAreaElementHighlight(highlighted);
-
- last_highlighted = highlighted;
+ DrawAreaElementHighlight(highlighted, highlighted_similar);
redraw_mask |= REDRAW_FIELD;
}
+
+ last_highlighted = highlighted;
+ last_highlighted_similar = highlighted_similar;
}
void HandleLevelEditorIdle(void)
vp_door_2->height == VYSIZE)
CloseDoor(DOOR_CLOSE_ALL | DOOR_NO_DELAY);
else
- SetDoorState(DOOR_CLOSE_2);
+ SetDoorState(DOOR_CLOSE_ALL);
BackToFront();