X-Git-Url: https://git.artsoft.org/?p=rocksndiamonds.git;a=blobdiff_plain;f=src%2Feditor.c;h=9ce3bd5b1369f4b622be84da24beb02da8af7865;hp=1fe6e544b86c631277e8a35ac611a8225c28177a;hb=abe44529b439ad39b4d8dbf19cbd67c9b9844279;hpb=90e8811a711b5daa481c1c3a36a9cbeae4ad233c diff --git a/src/editor.c b/src/editor.c index 1fe6e544..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,8 +7741,15 @@ 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); @@ -7754,11 +7759,32 @@ void DrawLevelEd() // 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 /* needed if different viewport properties defined for editor */ 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 @@ -7836,6 +7862,8 @@ void DrawLevelEd() DrawEditModeWindow(); #if 1 + FadeIn(playfield_area_changed ? REDRAW_ALL : REDRAW_FIELD); +#else FadeIn(REDRAW_FIELD); // FadeIn(REDRAW_ALL); #endif @@ -7848,7 +7876,7 @@ void DrawLevelEd() 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(); @@ -11906,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(); @@ -12388,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) @@ -12400,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 } }