X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Feditor.c;h=04d03e1b24e703b4a0247556e1fa218ff3b1c606;hb=2176d1de29652bc9e8db1baa283fdc1c4e99e674;hp=9f8182d6702911351761230e8e86c9580140e5b3;hpb=f89a490028c36509216b97a96b779b779c2065c9;p=rocksndiamonds.git diff --git a/src/editor.c b/src/editor.c index 9f8182d6..04d03e1b 100644 --- a/src/editor.c +++ b/src/editor.c @@ -79,7 +79,7 @@ #define IMG_BORDER_2 IMG_EDITOR_ELEMENT_BORDER_INPUT #define ED_ELEMENT_BORDER (graphic_info[IMG_BORDER_1].border_size) #define ED_DRAWINGAREA_BORDER_SIZE (graphic_info[IMG_BORDER_2].border_size) -#define ED_DRAWINGAREA_TILE_SIZE (graphic_info[IMG_BORDER_2].tile_size) +#define ED_DRAWINGAREA_TILE_SIZE (editor.drawingarea.tile_size) /* values for checkbutton gadgets */ #define ED_CHECKBUTTON_XSIZE (graphic_info[IMG_EDITOR_CHECKBOX].width) @@ -590,45 +590,46 @@ #define GADGET_ID_SP_BLOCK_LAST_FIELD (GADGET_ID_CHECKBUTTON_FIRST + 15) #define GADGET_ID_INSTANT_RELOCATION (GADGET_ID_CHECKBUTTON_FIRST + 16) #define GADGET_ID_SHIFTED_RELOCATION (GADGET_ID_CHECKBUTTON_FIRST + 17) -#define GADGET_ID_USE_START_ELEMENT (GADGET_ID_CHECKBUTTON_FIRST + 18) -#define GADGET_ID_USE_ARTWORK_ELEMENT (GADGET_ID_CHECKBUTTON_FIRST + 19) -#define GADGET_ID_USE_EXPLOSION_ELEMENT (GADGET_ID_CHECKBUTTON_FIRST + 20) -#define GADGET_ID_INITIAL_GRAVITY (GADGET_ID_CHECKBUTTON_FIRST + 21) -#define GADGET_ID_USE_INITIAL_INVENTORY (GADGET_ID_CHECKBUTTON_FIRST + 22) -#define GADGET_ID_CAN_PASS_TO_WALKABLE (GADGET_ID_CHECKBUTTON_FIRST + 23) -#define GADGET_ID_CAN_FALL_INTO_ACID (GADGET_ID_CHECKBUTTON_FIRST + 24) -#define GADGET_ID_CAN_MOVE_INTO_ACID (GADGET_ID_CHECKBUTTON_FIRST + 25) -#define GADGET_ID_DONT_COLLIDE_WITH (GADGET_ID_CHECKBUTTON_FIRST + 26) -#define GADGET_ID_ENVELOPE_AUTOWRAP (GADGET_ID_CHECKBUTTON_FIRST + 27) -#define GADGET_ID_ENVELOPE_CENTERED (GADGET_ID_CHECKBUTTON_FIRST + 28) -#define GADGET_ID_CUSTOM_INDESTRUCTIBLE (GADGET_ID_CHECKBUTTON_FIRST + 29) -#define GADGET_ID_CUSTOM_CAN_EXPLODE (GADGET_ID_CHECKBUTTON_FIRST + 30) -#define GADGET_ID_CUSTOM_EXPLODE_FIRE (GADGET_ID_CHECKBUTTON_FIRST + 31) -#define GADGET_ID_CUSTOM_EXPLODE_SMASH (GADGET_ID_CHECKBUTTON_FIRST + 32) -#define GADGET_ID_CUSTOM_EXPLODE_IMPACT (GADGET_ID_CHECKBUTTON_FIRST + 33) -#define GADGET_ID_CUSTOM_WALK_TO_OBJECT (GADGET_ID_CHECKBUTTON_FIRST + 34) -#define GADGET_ID_CUSTOM_DEADLY (GADGET_ID_CHECKBUTTON_FIRST + 35) -#define GADGET_ID_CUSTOM_CAN_MOVE (GADGET_ID_CHECKBUTTON_FIRST + 36) -#define GADGET_ID_CUSTOM_CAN_FALL (GADGET_ID_CHECKBUTTON_FIRST + 37) -#define GADGET_ID_CUSTOM_CAN_SMASH (GADGET_ID_CHECKBUTTON_FIRST + 38) -#define GADGET_ID_CUSTOM_SLIPPERY (GADGET_ID_CHECKBUTTON_FIRST + 39) -#define GADGET_ID_CUSTOM_ACCESSIBLE (GADGET_ID_CHECKBUTTON_FIRST + 40) -#define GADGET_ID_CUSTOM_GRAV_REACHABLE (GADGET_ID_CHECKBUTTON_FIRST + 41) -#define GADGET_ID_CUSTOM_USE_LAST_VALUE (GADGET_ID_CHECKBUTTON_FIRST + 42) -#define GADGET_ID_CUSTOM_USE_GRAPHIC (GADGET_ID_CHECKBUTTON_FIRST + 43) -#define GADGET_ID_CUSTOM_USE_TEMPLATE (GADGET_ID_CHECKBUTTON_FIRST + 44) -#define GADGET_ID_CUSTOM_CAN_CHANGE (GADGET_ID_CHECKBUTTON_FIRST + 45) -#define GADGET_ID_CHANGE_USE_CONTENT (GADGET_ID_CHECKBUTTON_FIRST + 46) -#define GADGET_ID_CHANGE_USE_EXPLOSION (GADGET_ID_CHECKBUTTON_FIRST + 47) -#define GADGET_ID_CHANGE_ONLY_COMPLETE (GADGET_ID_CHECKBUTTON_FIRST + 48) -#define GADGET_ID_CHANGE_USE_RANDOM (GADGET_ID_CHECKBUTTON_FIRST + 49) -#define GADGET_ID_CHANGE_HAS_ACTION (GADGET_ID_CHECKBUTTON_FIRST + 50) -#define GADGET_ID_CHANGE_DELAY (GADGET_ID_CHECKBUTTON_FIRST + 51) -#define GADGET_ID_CHANGE_BY_DIRECT_ACT (GADGET_ID_CHECKBUTTON_FIRST + 52) -#define GADGET_ID_CHANGE_BY_OTHER_ACT (GADGET_ID_CHECKBUTTON_FIRST + 53) +#define GADGET_ID_LAZY_RELOCATION (GADGET_ID_CHECKBUTTON_FIRST + 18) +#define GADGET_ID_USE_START_ELEMENT (GADGET_ID_CHECKBUTTON_FIRST + 19) +#define GADGET_ID_USE_ARTWORK_ELEMENT (GADGET_ID_CHECKBUTTON_FIRST + 20) +#define GADGET_ID_USE_EXPLOSION_ELEMENT (GADGET_ID_CHECKBUTTON_FIRST + 21) +#define GADGET_ID_INITIAL_GRAVITY (GADGET_ID_CHECKBUTTON_FIRST + 22) +#define GADGET_ID_USE_INITIAL_INVENTORY (GADGET_ID_CHECKBUTTON_FIRST + 23) +#define GADGET_ID_CAN_PASS_TO_WALKABLE (GADGET_ID_CHECKBUTTON_FIRST + 24) +#define GADGET_ID_CAN_FALL_INTO_ACID (GADGET_ID_CHECKBUTTON_FIRST + 25) +#define GADGET_ID_CAN_MOVE_INTO_ACID (GADGET_ID_CHECKBUTTON_FIRST + 26) +#define GADGET_ID_DONT_COLLIDE_WITH (GADGET_ID_CHECKBUTTON_FIRST + 27) +#define GADGET_ID_ENVELOPE_AUTOWRAP (GADGET_ID_CHECKBUTTON_FIRST + 28) +#define GADGET_ID_ENVELOPE_CENTERED (GADGET_ID_CHECKBUTTON_FIRST + 29) +#define GADGET_ID_CUSTOM_INDESTRUCTIBLE (GADGET_ID_CHECKBUTTON_FIRST + 30) +#define GADGET_ID_CUSTOM_CAN_EXPLODE (GADGET_ID_CHECKBUTTON_FIRST + 31) +#define GADGET_ID_CUSTOM_EXPLODE_FIRE (GADGET_ID_CHECKBUTTON_FIRST + 32) +#define GADGET_ID_CUSTOM_EXPLODE_SMASH (GADGET_ID_CHECKBUTTON_FIRST + 33) +#define GADGET_ID_CUSTOM_EXPLODE_IMPACT (GADGET_ID_CHECKBUTTON_FIRST + 34) +#define GADGET_ID_CUSTOM_WALK_TO_OBJECT (GADGET_ID_CHECKBUTTON_FIRST + 35) +#define GADGET_ID_CUSTOM_DEADLY (GADGET_ID_CHECKBUTTON_FIRST + 36) +#define GADGET_ID_CUSTOM_CAN_MOVE (GADGET_ID_CHECKBUTTON_FIRST + 37) +#define GADGET_ID_CUSTOM_CAN_FALL (GADGET_ID_CHECKBUTTON_FIRST + 38) +#define GADGET_ID_CUSTOM_CAN_SMASH (GADGET_ID_CHECKBUTTON_FIRST + 39) +#define GADGET_ID_CUSTOM_SLIPPERY (GADGET_ID_CHECKBUTTON_FIRST + 40) +#define GADGET_ID_CUSTOM_ACCESSIBLE (GADGET_ID_CHECKBUTTON_FIRST + 41) +#define GADGET_ID_CUSTOM_GRAV_REACHABLE (GADGET_ID_CHECKBUTTON_FIRST + 42) +#define GADGET_ID_CUSTOM_USE_LAST_VALUE (GADGET_ID_CHECKBUTTON_FIRST + 43) +#define GADGET_ID_CUSTOM_USE_GRAPHIC (GADGET_ID_CHECKBUTTON_FIRST + 44) +#define GADGET_ID_CUSTOM_USE_TEMPLATE (GADGET_ID_CHECKBUTTON_FIRST + 45) +#define GADGET_ID_CUSTOM_CAN_CHANGE (GADGET_ID_CHECKBUTTON_FIRST + 46) +#define GADGET_ID_CHANGE_USE_CONTENT (GADGET_ID_CHECKBUTTON_FIRST + 47) +#define GADGET_ID_CHANGE_USE_EXPLOSION (GADGET_ID_CHECKBUTTON_FIRST + 48) +#define GADGET_ID_CHANGE_ONLY_COMPLETE (GADGET_ID_CHECKBUTTON_FIRST + 49) +#define GADGET_ID_CHANGE_USE_RANDOM (GADGET_ID_CHECKBUTTON_FIRST + 50) +#define GADGET_ID_CHANGE_HAS_ACTION (GADGET_ID_CHECKBUTTON_FIRST + 51) +#define GADGET_ID_CHANGE_DELAY (GADGET_ID_CHECKBUTTON_FIRST + 52) +#define GADGET_ID_CHANGE_BY_DIRECT_ACT (GADGET_ID_CHECKBUTTON_FIRST + 53) +#define GADGET_ID_CHANGE_BY_OTHER_ACT (GADGET_ID_CHECKBUTTON_FIRST + 54) /* gadgets for buttons in element list */ -#define GADGET_ID_ELEMENTLIST_FIRST (GADGET_ID_CHECKBUTTON_FIRST + 54) +#define GADGET_ID_ELEMENTLIST_FIRST (GADGET_ID_CHECKBUTTON_FIRST + 55) #define GADGET_ID_ELEMENTLIST_LAST (GADGET_ID_ELEMENTLIST_FIRST + \ ED_NUM_ELEMENTLIST_BUTTONS - 1) @@ -830,44 +831,45 @@ #define ED_CHECKBUTTON_ID_SP_BLOCK_LAST_FIELD 13 #define ED_CHECKBUTTON_ID_INSTANT_RELOCATION 14 #define ED_CHECKBUTTON_ID_SHIFTED_RELOCATION 15 -#define ED_CHECKBUTTON_ID_USE_START_ELEMENT 16 -#define ED_CHECKBUTTON_ID_USE_ARTWORK_ELEMENT 17 -#define ED_CHECKBUTTON_ID_USE_EXPLOSION_ELEMENT 18 -#define ED_CHECKBUTTON_ID_INITIAL_GRAVITY 19 -#define ED_CHECKBUTTON_ID_USE_INITIAL_INVENTORY 20 -#define ED_CHECKBUTTON_ID_CAN_PASS_TO_WALKABLE 21 -#define ED_CHECKBUTTON_ID_CAN_FALL_INTO_ACID 22 -#define ED_CHECKBUTTON_ID_CAN_MOVE_INTO_ACID 23 -#define ED_CHECKBUTTON_ID_DONT_COLLIDE_WITH 24 -#define ED_CHECKBUTTON_ID_ENVELOPE_AUTOWRAP 25 -#define ED_CHECKBUTTON_ID_ENVELOPE_CENTERED 26 -#define ED_CHECKBUTTON_ID_CUSTOM_USE_GRAPHIC 27 -#define ED_CHECKBUTTON_ID_CUSTOM_USE_TEMPLATE 28 -#define ED_CHECKBUTTON_ID_CUSTOM_ACCESSIBLE 29 -#define ED_CHECKBUTTON_ID_CUSTOM_GRAV_REACHABLE 30 -#define ED_CHECKBUTTON_ID_CUSTOM_USE_LAST_VALUE 31 -#define ED_CHECKBUTTON_ID_CUSTOM_WALK_TO_OBJECT 32 -#define ED_CHECKBUTTON_ID_CUSTOM_INDESTRUCTIBLE 33 -#define ED_CHECKBUTTON_ID_CUSTOM_CAN_MOVE 34 -#define ED_CHECKBUTTON_ID_CUSTOM_CAN_FALL 35 -#define ED_CHECKBUTTON_ID_CUSTOM_CAN_SMASH 36 -#define ED_CHECKBUTTON_ID_CUSTOM_SLIPPERY 37 -#define ED_CHECKBUTTON_ID_CUSTOM_DEADLY 38 -#define ED_CHECKBUTTON_ID_CUSTOM_CAN_EXPLODE 39 -#define ED_CHECKBUTTON_ID_CUSTOM_EXPLODE_FIRE 40 -#define ED_CHECKBUTTON_ID_CUSTOM_EXPLODE_SMASH 41 -#define ED_CHECKBUTTON_ID_CUSTOM_EXPLODE_IMPACT 42 -#define ED_CHECKBUTTON_ID_CUSTOM_CAN_CHANGE 43 -#define ED_CHECKBUTTON_ID_CHANGE_DELAY 44 -#define ED_CHECKBUTTON_ID_CHANGE_BY_DIRECT_ACT 45 -#define ED_CHECKBUTTON_ID_CHANGE_BY_OTHER_ACT 46 -#define ED_CHECKBUTTON_ID_CHANGE_USE_EXPLOSION 47 -#define ED_CHECKBUTTON_ID_CHANGE_USE_CONTENT 48 -#define ED_CHECKBUTTON_ID_CHANGE_ONLY_COMPLETE 49 -#define ED_CHECKBUTTON_ID_CHANGE_USE_RANDOM 50 -#define ED_CHECKBUTTON_ID_CHANGE_HAS_ACTION 51 - -#define ED_NUM_CHECKBUTTONS 52 +#define ED_CHECKBUTTON_ID_LAZY_RELOCATION 16 +#define ED_CHECKBUTTON_ID_USE_START_ELEMENT 17 +#define ED_CHECKBUTTON_ID_USE_ARTWORK_ELEMENT 18 +#define ED_CHECKBUTTON_ID_USE_EXPLOSION_ELEMENT 19 +#define ED_CHECKBUTTON_ID_INITIAL_GRAVITY 20 +#define ED_CHECKBUTTON_ID_USE_INITIAL_INVENTORY 21 +#define ED_CHECKBUTTON_ID_CAN_PASS_TO_WALKABLE 22 +#define ED_CHECKBUTTON_ID_CAN_FALL_INTO_ACID 23 +#define ED_CHECKBUTTON_ID_CAN_MOVE_INTO_ACID 24 +#define ED_CHECKBUTTON_ID_DONT_COLLIDE_WITH 25 +#define ED_CHECKBUTTON_ID_ENVELOPE_AUTOWRAP 26 +#define ED_CHECKBUTTON_ID_ENVELOPE_CENTERED 27 +#define ED_CHECKBUTTON_ID_CUSTOM_USE_GRAPHIC 28 +#define ED_CHECKBUTTON_ID_CUSTOM_USE_TEMPLATE 29 +#define ED_CHECKBUTTON_ID_CUSTOM_ACCESSIBLE 30 +#define ED_CHECKBUTTON_ID_CUSTOM_GRAV_REACHABLE 31 +#define ED_CHECKBUTTON_ID_CUSTOM_USE_LAST_VALUE 32 +#define ED_CHECKBUTTON_ID_CUSTOM_WALK_TO_OBJECT 33 +#define ED_CHECKBUTTON_ID_CUSTOM_INDESTRUCTIBLE 34 +#define ED_CHECKBUTTON_ID_CUSTOM_CAN_MOVE 35 +#define ED_CHECKBUTTON_ID_CUSTOM_CAN_FALL 36 +#define ED_CHECKBUTTON_ID_CUSTOM_CAN_SMASH 37 +#define ED_CHECKBUTTON_ID_CUSTOM_SLIPPERY 38 +#define ED_CHECKBUTTON_ID_CUSTOM_DEADLY 39 +#define ED_CHECKBUTTON_ID_CUSTOM_CAN_EXPLODE 40 +#define ED_CHECKBUTTON_ID_CUSTOM_EXPLODE_FIRE 41 +#define ED_CHECKBUTTON_ID_CUSTOM_EXPLODE_SMASH 42 +#define ED_CHECKBUTTON_ID_CUSTOM_EXPLODE_IMPACT 43 +#define ED_CHECKBUTTON_ID_CUSTOM_CAN_CHANGE 44 +#define ED_CHECKBUTTON_ID_CHANGE_DELAY 45 +#define ED_CHECKBUTTON_ID_CHANGE_BY_DIRECT_ACT 46 +#define ED_CHECKBUTTON_ID_CHANGE_BY_OTHER_ACT 47 +#define ED_CHECKBUTTON_ID_CHANGE_USE_EXPLOSION 48 +#define ED_CHECKBUTTON_ID_CHANGE_USE_CONTENT 49 +#define ED_CHECKBUTTON_ID_CHANGE_ONLY_COMPLETE 50 +#define ED_CHECKBUTTON_ID_CHANGE_USE_RANDOM 51 +#define ED_CHECKBUTTON_ID_CHANGE_HAS_ACTION 52 + +#define ED_NUM_CHECKBUTTONS 53 #define ED_CHECKBUTTON_ID_EDITOR_FIRST ED_CHECKBUTTON_ID_RANDOM_RESTRICTED #define ED_CHECKBUTTON_ID_EDITOR_LAST ED_CHECKBUTTON_ID_RANDOM_RESTRICTED @@ -2262,7 +2264,7 @@ static struct /* ---------- element settings: configure (several elements) ------------- */ { - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(6), + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(7), GADGET_ID_PLAYER_SPEED, GADGET_ID_NONE, -1, options_player_speed, @@ -2786,14 +2788,14 @@ static struct "exit level if all fields solved", "automatically finish Sokoban levels" }, { - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(8), + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(9), GADGET_ID_CONTINUOUS_SNAPPING, GADGET_ID_NONE, &level.continuous_snapping, NULL, "continuous snapping", "use snapping without releasing key" }, { - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(7), + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(8), GADGET_ID_BLOCK_SNAP_FIELD, GADGET_ID_NONE, &level.block_snap_field, NULL, @@ -2828,28 +2830,35 @@ static struct "no centering when relocating", "level not centered after relocation" }, { - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(9), + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(5), + GADGET_ID_LAZY_RELOCATION, GADGET_ID_NONE, + &level.lazy_relocation, + NULL, + "only redraw off-screen relocation","no redraw if relocation target visible" + }, + { + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(10), GADGET_ID_USE_START_ELEMENT, GADGET_ID_NONE, &level.use_start_element[0], NULL, "use level start element:", "start level at this element's position" }, { - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(10), + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(11), GADGET_ID_USE_ARTWORK_ELEMENT, GADGET_ID_NONE, &level.use_artwork_element[0], NULL, "use artwork from element:", "use player artwork from other element" }, { - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(11), + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(12), GADGET_ID_USE_EXPLOSION_ELEMENT, GADGET_ID_NONE, &level.use_explosion_element[0], NULL, "use explosion from element:", "use explosion properties from element" }, { - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(12), + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(13), GADGET_ID_INITIAL_GRAVITY, GADGET_ID_NONE, &level.initial_player_gravity[0], NULL, @@ -2863,7 +2872,7 @@ static struct "use initial inventory:", "use collected elements on level start" }, { - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(5), + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(6), GADGET_ID_CAN_PASS_TO_WALKABLE, GADGET_ID_NONE, &level.can_pass_to_walkable, NULL, @@ -3253,7 +3262,7 @@ static struct /* ---------- level start element ---------------------------------------- */ { - -1, ED_AREA_1X1_SETTINGS_YPOS(9), + -1, ED_AREA_1X1_SETTINGS_YPOS(10), 0, ED_AREA_1X1_SETTINGS_YOFF, GADGET_ID_START_ELEMENT, GADGET_ID_USE_START_ELEMENT, &level.start_element[0], 1, 1, @@ -3263,7 +3272,7 @@ static struct /* ---------- player artwork element ------------------------------------- */ { - -1, ED_AREA_1X1_SETTINGS_YPOS(10), + -1, ED_AREA_1X1_SETTINGS_YPOS(11), 0, ED_AREA_1X1_SETTINGS_YOFF, GADGET_ID_ARTWORK_ELEMENT, GADGET_ID_USE_ARTWORK_ELEMENT, &level.artwork_element[0], 1, 1, @@ -3273,7 +3282,7 @@ static struct /* ---------- player explosion element ----------------------------------- */ { - -1, ED_AREA_1X1_SETTINGS_YPOS(11), + -1, ED_AREA_1X1_SETTINGS_YPOS(12), 0, ED_AREA_1X1_SETTINGS_YOFF, GADGET_ID_EXPLOSION_ELEMENT, GADGET_ID_USE_EXPLOSION_ELEMENT, &level.explosion_element[0], 1, 1, @@ -6394,10 +6403,8 @@ static void CreateRadiobuttonGadgets() void CreateLevelEditorGadgets() { - int old_game_status = game_status; - - /* setting 'game_status' is needed to get the right fonts for the editor */ - game_status = GAME_MODE_EDITOR; + /* force EDITOR font inside level editor */ + SetFontStatus(GAME_MODE_EDITOR); /* these values are not constant, but can change at runtime */ ed_fieldx = MAX_ED_FIELDX - 1; @@ -6431,7 +6438,7 @@ void CreateLevelEditorGadgets() CreateTextbuttonGadgets(); CreateDrawingAreas(); - game_status = old_game_status; + ResetFontStatus(); } void FreeLevelEditorGadgets() @@ -7616,37 +7623,17 @@ void DrawLevelEd() { int fade_mask = REDRAW_FIELD; - StopAnimation(); - - CloseDoor(DOOR_CLOSE_ALL); + FadeSoundsAndMusic(); -#if 1 /* needed if different viewport properties defined for editor */ ChangeViewportPropertiesIfNeeded(); -#endif - if (CheckIfRedrawGlobalBorderIsNeeded()) + if (CheckIfGlobalBorderHasChanged()) fade_mask = REDRAW_ALL; -#if 0 - printf("::: %d\n", (fade_mask == REDRAW_ALL ? 1 : 0)); -#endif - FadeOut(fade_mask); -#if 0 - /* needed after playing if editor playfield area has different size */ - ClearRectangle(drawto, REAL_SX, REAL_SY, FULL_SXSIZE, FULL_SYSIZE); -#endif - -#if 0 - /* needed if different viewport properties defined for editor */ - ChangeViewportPropertiesIfNeeded(); -#endif - -#if 1 ClearField(); -#endif InitZoomLevelSettings(); @@ -7708,6 +7695,8 @@ void DrawLevelEd() DrawEditModeWindow(); + DrawMaskedBorder(fade_mask); + FadeIn(fade_mask); /* copy actual editor door content to door double buffer for OpenDoor() */ @@ -8795,6 +8784,7 @@ static void DrawPropertiesConfig() MapCheckbuttonGadget(ED_CHECKBUTTON_ID_CONTINUOUS_SNAPPING); MapCheckbuttonGadget(ED_CHECKBUTTON_ID_INSTANT_RELOCATION); MapCheckbuttonGadget(ED_CHECKBUTTON_ID_SHIFTED_RELOCATION); + MapCheckbuttonGadget(ED_CHECKBUTTON_ID_LAZY_RELOCATION); MapCheckbuttonGadget(ED_CHECKBUTTON_ID_USE_START_ELEMENT); MapCheckbuttonGadget(ED_CHECKBUTTON_ID_USE_ARTWORK_ELEMENT); MapCheckbuttonGadget(ED_CHECKBUTTON_ID_USE_EXPLOSION_ELEMENT); @@ -10939,7 +10929,7 @@ static void HandleDrawingAreas(struct GadgetInfo *gi) DrawFixedGraphicExt(drawto, gi->x + sx * TILEX, gi->y + sy * TILEY, - el2img(new_element), 0); + el2edimg(new_element), 0); if (id == GADGET_ID_CUSTOM_GRAPHIC) new_element = GFX_ELEMENT(new_element); @@ -12275,12 +12265,31 @@ void RequestExitLevelEditor(boolean ask_if_level_has_changed, Request("Level has changed! Exit without saving?", REQ_ASK | REQ_STAY_OPEN)) { - SetDoorState(DOOR_CLOSE_2); + struct RectWithBorder *vp_door_1 = &viewport.door_1[GAME_MODE_MAIN]; + struct RectWithBorder *vp_door_2 = &viewport.door_2[GAME_MODE_MAIN]; + + /* draw normal door */ + UndrawSpecialEditorDoor(); + + // close editor doors if viewport definition is the same as in main menu + if (vp_door_1->x == DX && + vp_door_1->y == DY && + vp_door_1->width == DXSIZE && + vp_door_1->height == DYSIZE && + vp_door_2->x == VX && + vp_door_2->y == VY && + vp_door_2->width == VXSIZE && + vp_door_2->height == VYSIZE) + CloseDoor(DOOR_CLOSE_ALL | DOOR_NO_DELAY); + else + SetDoorState(DOOR_CLOSE_2); + + BackToFront(); if (quick_quit) FadeSkipNextFadeIn(); - game_status = GAME_MODE_MAIN; + SetGameStatus(GAME_MODE_MAIN); DrawMainMenu(); }