X-Git-Url: https://git.artsoft.org/?p=rocksndiamonds.git;a=blobdiff_plain;f=src%2Feditor.c;h=9ce3bd5b1369f4b622be84da24beb02da8af7865;hp=2791934f678473d79b61c34a90eb875565adf6dc;hb=abe44529b439ad39b4d8dbf19cbd67c9b9844279;hpb=1952fc1018a7bde3f04b24485d8f89052e80da14 diff --git a/src/editor.c b/src/editor.c index 2791934f..9ce3bd5b 100644 --- a/src/editor.c +++ b/src/editor.c @@ -1,15 +1,13 @@ -/*********************************************************** -* Rocks'n'Diamonds -- McDuffin Strikes Back! * -*----------------------------------------------------------* -* (c) 1995-2006 Artsoft Entertainment * -* Holger Schemel * -* Detmolder Strasse 189 * -* 33604 Bielefeld * -* Germany * -* e-mail: info@artsoft.org * -*----------------------------------------------------------* -* editor.c * -***********************************************************/ +// ============================================================================ +// Rocks'n'Diamonds - McDuffin Strikes Back! +// ---------------------------------------------------------------------------- +// (c) 1995-2014 by Artsoft Entertainment +// Holger Schemel +// info@artsoft.org +// http://www.artsoft.org/ +// ---------------------------------------------------------------------------- +// editor.c +// ============================================================================ #include @@ -4797,7 +4795,7 @@ static int *editor_el_dynamic_ptr = NULL; static int num_editor_hl_dynamic = SIZEOF_ARRAY_INT(editor_hl_dynamic); static int num_editor_el_dynamic = 0; -static int editor_hl_empty[] = { }; +static int editor_hl_empty[] = { EL_EMPTY }; #if 1 static int *editor_el_empty = NULL; /* dynamically allocated */ #else @@ -7743,14 +7741,27 @@ void CheckElementDescriptions() Error(ERR_WARN, "no element description for element '%s'", EL_NAME(i)); } +static boolean playfield_area_changed = FALSE; + void DrawLevelEd() { + int old_sx = SX; + int old_sy = SY; + int old_sxsize = SXSIZE; + int old_sysize = SYSIZE; + StopAnimation(); CloseDoor(DOOR_CLOSE_ALL); #if 1 FadeOut(REDRAW_FIELD); + // FadeOut(REDRAW_ALL); +#endif + +#if 1 + /* needed after playing if editor playfield area has different size */ + ClearRectangle(drawto, REAL_SX, REAL_SY, FULL_SXSIZE, FULL_SYSIZE); #endif #if 1 @@ -7758,7 +7769,27 @@ void DrawLevelEd() ChangeViewportPropertiesIfNeeded(); #endif + if (old_sx != SX || + old_sy != SY || + old_sxsize != SXSIZE || + old_sysize != SYSIZE) + { + playfield_area_changed = TRUE; + +#if 0 + printf("::: %d, %d, %d, %d != %d, %d, %d, %d\n", + old_sx, old_sy, old_sxsize, old_sysize, + SX, SY, SXSIZE, SYSIZE); +#endif + } + else + playfield_area_changed = FALSE; + +#if 1 + OpenDoor(DOOR_OPEN_1 | DOOR_OPEN_2 | DOOR_NO_DELAY); +#else OpenDoor(DOOR_OPEN_2 | DOOR_NO_DELAY); +#endif #if DEBUG CheckElementDescriptions(); @@ -7831,20 +7862,29 @@ void DrawLevelEd() DrawEditModeWindow(); #if 1 + FadeIn(playfield_area_changed ? REDRAW_ALL : REDRAW_FIELD); +#else FadeIn(REDRAW_FIELD); + // FadeIn(REDRAW_ALL); #endif /* copy actual editor door content to door double buffer for OpenDoor() */ +#if 1 + BlitBitmap(drawto, bitmap_db_door_1, DX, DY, DXSIZE, DYSIZE, 0, 0); +#else BlitBitmap(drawto, bitmap_db_door, DX, DY, DXSIZE, DYSIZE, DOOR_GFX_PAGEX1, DOOR_GFX_PAGEY1); +#endif -#if 1 +#if 0 /* draw new control window (with border) to window */ redraw_mask |= REDRAW_ALL; BackToFront(); #endif +#if 0 OpenDoor(DOOR_OPEN_1); +#endif } static void AdjustDrawingAreaGadgets() @@ -11894,7 +11934,16 @@ static void HandleControlButtons(struct GadgetInfo *gi) CloseDoor(DOOR_CLOSE_ALL); +#if 0 BackToFront(); /* force redraw of undrawn special door */ +#endif + +#if 1 + /* needed before playing if editor playfield area has different size */ + ClearRectangle(drawto, REAL_SX, REAL_SY, FULL_SXSIZE, FULL_SYSIZE); + + redraw_mask = REDRAW_ALL; +#endif #if 0 DrawCompleteVideoDisplay(); @@ -12376,8 +12425,13 @@ void RequestExitLevelEditor(boolean ask_if_level_has_changed, Request("Level has changed! Exit without saving?", REQ_ASK | REQ_STAY_OPEN)) { +#if 1 + // CloseDoor(DOOR_CLOSE_1); + SetDoorState(DOOR_CLOSE_2); +#else CloseDoor(DOOR_CLOSE_1); SetDoorState(DOOR_CLOSE_2); +#endif #if 1 if (quick_quit) @@ -12388,15 +12442,24 @@ void RequestExitLevelEditor(boolean ask_if_level_has_changed, #endif game_status = GAME_MODE_MAIN; +#if 1 + DrawAndFadeInMainMenu(playfield_area_changed ? REDRAW_ALL : REDRAW_FIELD); +#else #if 1 DrawAndFadeInMainMenu(REDRAW_FIELD); #else DrawMainMenu(); +#endif #endif } else { +#if 1 + // CloseDoor(DOOR_CLOSE_1); + OpenDoor(DOOR_OPEN_1 | DOOR_COPY_BACK); +#else CloseDoor(DOOR_CLOSE_1); OpenDoor(DOOR_OPEN_1 | DOOR_COPY_BACK); +#endif } }