X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Feditor.c;h=bcb76d4f96acfa6089f6b04445fcd0bf9a8f5fc1;hb=2a8cb1d38a6d7074927b740a81b51242007142f3;hp=081dc373c0c6145855fb277046a4e3c190bc5d74;hpb=0d03b05bd2b0faf67444063af59c3b0fef45dd09;p=rocksndiamonds.git diff --git a/src/editor.c b/src/editor.c index 081dc373..bcb76d4f 100644 --- a/src/editor.c +++ b/src/editor.c @@ -1515,6 +1515,7 @@ static struct ValueTextInfo options_deadliness[] = { { EP_DONT_RUN_INTO, "running into" }, { EP_DONT_COLLIDE_WITH, "colliding with" }, + { EP_DONT_GET_HIT_BY, "getting hit by" }, { EP_DONT_TOUCH, "touching" }, { -1, NULL } @@ -3092,7 +3093,7 @@ static struct { -1, ED_AREA_1X1_SETTINGS_YPOS(5), GADGET_ID_CUSTOM_CHANGE_TRIGGER, GADGET_ID_CHANGE_OTHER_ACTION, - &custom_element_change.trigger_element, 1, 1, + &custom_element_change.initial_trigger_element, 1, 1, NULL, NULL, NULL, "other element triggering change" }, @@ -3311,6 +3312,11 @@ static int editor_el_emerald_mine[] = EL_EM_GATE_2_GRAY, EL_EM_GATE_3_GRAY, EL_EM_GATE_4_GRAY, + + EL_EM_EXIT_CLOSED, + EL_EM_EXIT_OPEN, + EL_EM_STEEL_EXIT_CLOSED, + EL_EM_STEEL_EXIT_OPEN, }; static int *editor_hl_emerald_mine_ptr = editor_hl_emerald_mine; static int *editor_el_emerald_mine_ptr = editor_el_emerald_mine; @@ -3642,25 +3648,25 @@ static int editor_el_diamond_caves[] = EL_SWITCHGATE_SWITCH_UP, EL_SWITCHGATE_SWITCH_DOWN, - EL_EMPTY, - EL_EMPTY, - EL_DC_SWITCHGATE_SWITCH_UP, - EL_DC_SWITCHGATE_SWITCH_DOWN, - - EL_SIGN_EXCLAMATION, - EL_SIGN_STOP, EL_LIGHT_SWITCH, EL_LIGHT_SWITCH_ACTIVE, + EL_DC_SWITCHGATE_SWITCH_UP, + EL_DC_SWITCHGATE_SWITCH_DOWN, + EL_STEEL_EXIT_CLOSED, + EL_STEEL_EXIT_OPEN, EL_STEELWALL_SLIPPERY, EL_INVISIBLE_SAND, + + EL_QUICKSAND_FAST_EMPTY, + EL_QUICKSAND_FAST_FULL, EL_LANDMINE, EL_DC_LANDMINE, EL_SHIELD_NORMAL, EL_SHIELD_DEADLY, EL_EXTRA_TIME, - EL_EMPTY, + EL_DC_MAGIC_WALL, EL_ENVELOPE_1, EL_ENVELOPE_2, @@ -3677,6 +3683,7 @@ static int editor_el_diamond_caves[] = EL_SIGN_EMERGENCY_EXIT, EL_SIGN_YIN_YANG, +#if 0 EL_SIGN_SPERMS, EL_SIGN_BULLET, EL_SIGN_HEART, @@ -3696,11 +3703,12 @@ static int editor_el_diamond_caves[] = EL_EMPTY, EL_EMPTY, EL_EMPTY, +#endif EL_DC_STEELWALL_2_SINGLE, EL_DC_STEELWALL_2_TOP, - EL_STEEL_EXIT_CLOSED, - EL_STEEL_EXIT_OPEN, + EL_SIGN_EXCLAMATION, + EL_SIGN_STOP, EL_DC_STEELWALL_2_LEFT, EL_DC_STEELWALL_2_MIDDLE, @@ -3710,52 +3718,32 @@ static int editor_el_diamond_caves[] = EL_DC_STEELWALL_1_TOPLEFT, EL_DC_STEELWALL_2_VERTICAL, EL_DC_STEELWALL_1_TOPRIGHT, - EL_EMPTY, + EL_DC_GATE_WHITE, EL_DC_STEELWALL_1_VERTICAL, EL_DC_STEELWALL_2_BOTTOM, - EL_EMPTY, - EL_EMPTY, + EL_DC_KEY_WHITE, + EL_DC_GATE_WHITE_GRAY, EL_DC_STEELWALL_1_BOTTOMLEFT, EL_DC_STEELWALL_1_HORIZONTAL, EL_DC_STEELWALL_1_BOTTOMRIGHT, - EL_EMPTY, + EL_DC_GATE_FAKE_GRAY, EL_DC_STEELWALL_1_BOTTOMRIGHT_2, EL_DC_STEELWALL_1_BOTTOM, EL_DC_STEELWALL_1_BOTTOMLEFT_2, - EL_EMPTY, + EL_EXPANDABLE_STEELWALL_HORIZONTAL, EL_DC_STEELWALL_1_RIGHT, EL_EMPTY, EL_DC_STEELWALL_1_LEFT, - EL_EMPTY, + EL_EXPANDABLE_STEELWALL_VERTICAL, EL_DC_STEELWALL_1_TOPRIGHT_2, EL_DC_STEELWALL_1_TOP, EL_DC_STEELWALL_1_TOPLEFT_2, - EL_EMPTY, - - EL_EXPANDABLE_STEELWALL_HORIZONTAL, - EL_EXPANDABLE_STEELWALL_VERTICAL, EL_EXPANDABLE_STEELWALL_ANY, - EL_EMPTY, - - EL_EM_EXIT_CLOSED, - EL_EM_EXIT_OPEN, - EL_EM_STEEL_EXIT_CLOSED, - EL_EM_STEEL_EXIT_OPEN, - - EL_DC_KEY_WHITE, - EL_DC_GATE_WHITE, - EL_DC_GATE_WHITE_GRAY, - EL_DC_GATE_FAKE_GRAY, - - EL_DC_MAGIC_WALL, - EL_QUICKSAND_FAST_EMPTY, - EL_QUICKSAND_FAST_FULL, - EL_EMPTY, }; static int *editor_hl_diamond_caves_ptr = editor_hl_diamond_caves; static int *editor_el_diamond_caves_ptr = editor_el_diamond_caves; @@ -5001,10 +4989,38 @@ static void DrawDrawingArea(int id) static void ScrollMiniLevel(int from_x, int from_y, int scroll) { - int x,y; +#if 0 + /* (directly solved in BlitBitmap() now) */ + static Bitmap *tmp_backbuffer = NULL; +#endif + int x, y; int dx = (scroll == ED_SCROLL_LEFT ? -1 : scroll == ED_SCROLL_RIGHT ? 1 : 0); int dy = (scroll == ED_SCROLL_UP ? -1 : scroll == ED_SCROLL_DOWN ? 1 : 0); +#if 0 + /* (directly solved in BlitBitmap() now) */ + if (tmp_backbuffer == NULL) + tmp_backbuffer = CreateBitmap(WIN_XSIZE, WIN_YSIZE, DEFAULT_DEPTH); + + /* needed when blitting directly to same bitmap -- should not be needed with + recent SDL libraries, but apparently does not work in 1.2.11 directly */ + BlitBitmap(drawto, tmp_backbuffer, + SX + (dx == -1 ? MINI_TILEX : 0), + SY + (dy == -1 ? MINI_TILEY : 0), + (ed_fieldx * MINI_TILEX) - (dx != 0 ? MINI_TILEX : 0), + (ed_fieldy * MINI_TILEY) - (dy != 0 ? MINI_TILEY : 0), + SX + (dx == +1 ? MINI_TILEX : 0), + SY + (dy == +1 ? MINI_TILEY : 0)); + BlitBitmap(tmp_backbuffer, drawto, + SX + (dx == +1 ? MINI_TILEX : 0), + SY + (dy == +1 ? MINI_TILEY : 0), + (ed_fieldx * MINI_TILEX) - (dx != 0 ? MINI_TILEX : 0), + (ed_fieldy * MINI_TILEY) - (dy != 0 ? MINI_TILEY : 0), + SX + (dx == +1 ? MINI_TILEX : 0), + SY + (dy == +1 ? MINI_TILEY : 0)); + +#else + BlitBitmap(drawto, drawto, SX + (dx == -1 ? MINI_TILEX : 0), SY + (dy == -1 ? MINI_TILEY : 0), @@ -5012,6 +5028,8 @@ static void ScrollMiniLevel(int from_x, int from_y, int scroll) (ed_fieldy * MINI_TILEY) - (dy != 0 ? MINI_TILEY : 0), SX + (dx == +1 ? MINI_TILEX : 0), SY + (dy == +1 ? MINI_TILEY : 0)); +#endif + if (dx) { x = (dx == 1 ? 0 : ed_fieldx - 1); @@ -6575,8 +6593,8 @@ static void replace_custom_element_in_settings(int element_from, if (change->target_element == element_from) change->target_element = element_to; - if (change->trigger_element == element_from) - change->trigger_element = element_to; + if (change->initial_trigger_element == element_from) + change->initial_trigger_element = element_to; for (y = 0; y < 3; y++) for (x = 0; x < 3; x++) @@ -6752,11 +6770,13 @@ static void CopyCustomElementPropertiesToEditor(int element) /* set deadliness selectbox help value */ custom_element.deadliness = (DONT_TOUCH(element) ? EP_DONT_TOUCH : + DONT_GET_HIT_BY(element) ? EP_DONT_GET_HIT_BY : DONT_COLLIDE_WITH(element) ? EP_DONT_COLLIDE_WITH : DONT_RUN_INTO(element) ? EP_DONT_RUN_INTO : custom_element.deadliness); custom_element_properties[EP_DEADLY] = (DONT_TOUCH(element) || + DONT_GET_HIT_BY(element) || DONT_COLLIDE_WITH(element) || DONT_RUN_INTO(element)); @@ -6904,6 +6924,7 @@ static void CopyCustomElementPropertiesToGame(int element) /* set deadliness property from checkbox and selectbox */ custom_element_properties[EP_DONT_RUN_INTO] = FALSE; custom_element_properties[EP_DONT_COLLIDE_WITH] = FALSE; + custom_element_properties[EP_DONT_GET_HIT_BY] = FALSE; custom_element_properties[EP_DONT_TOUCH] = FALSE; custom_element_properties[custom_element.deadliness] = custom_element_properties[EP_DEADLY]; @@ -7013,6 +7034,11 @@ void CheckElementDescriptions() void DrawLevelEd() { CloseDoor(DOOR_CLOSE_ALL); + +#if 1 + FadeOut(REDRAW_FIELD); +#endif + OpenDoor(DOOR_OPEN_2 | DOOR_NO_DELAY); #if DEBUG @@ -7060,7 +7086,7 @@ void DrawLevelEd() #endif MapControlButtons(); -#if 1 +#if 0 FadeOut(REDRAW_FIELD); #endif @@ -7074,6 +7100,12 @@ void DrawLevelEd() BlitBitmap(drawto, bitmap_db_door, DX, DY, DXSIZE, DYSIZE, DOOR_GFX_PAGEX1, DOOR_GFX_PAGEY1); +#if 1 + /* draw new control window (with border) to window */ + redraw_mask |= REDRAW_ALL; + BackToFront(); +#endif + OpenDoor(DOOR_OPEN_1); } @@ -7326,7 +7358,7 @@ static void DrawDrawingWindow() stick_element_properties_window = FALSE; SetMainBackgroundImage(IMG_UNDEFINED); - ClearWindow(); + ClearField(); UnmapLevelEditorWindowGadgets(); UnmapLevelEditorToolboxCustomGadgets(); @@ -7349,7 +7381,7 @@ static void DrawLevelInfoWindow() stick_element_properties_window = FALSE; SetMainBackgroundImage(IMG_BACKGROUND_EDITOR); - ClearWindow(); + ClearField(); UnmapLevelEditorWindowGadgets(); #if 0 @@ -7684,6 +7716,7 @@ static void DrawPropertiesInfo() { EP_DONT_RUN_INTO, "- deadly when running into" }, { EP_DONT_COLLIDE_WITH, "- deadly when colliding with" }, + { EP_DONT_GET_HIT_BY, "- deadly when getting hit by" }, { EP_DONT_TOUCH, "- deadly when touching" }, { EP_INDESTRUCTIBLE, "- indestructible" }, @@ -7857,6 +7890,7 @@ static struct { EL_EMC_KEY_6, &level.score[SC_KEY], TEXT_COLLECTING }, { EL_EMC_KEY_7, &level.score[SC_KEY], TEXT_COLLECTING }, { EL_EMC_KEY_8, &level.score[SC_KEY], TEXT_COLLECTING }, + { EL_DC_KEY_WHITE, &level.score[SC_KEY], TEXT_COLLECTING }, { EL_AMOEBA_WET, &level.amoeba_speed, TEXT_AMOEBA_SPEED }, { EL_AMOEBA_DRY, &level.amoeba_speed, TEXT_AMOEBA_SPEED }, { EL_AMOEBA_FULL, &level.amoeba_speed, TEXT_AMOEBA_SPEED }, @@ -8319,7 +8353,7 @@ static void DrawPropertiesWindow() MapLevelEditorToolboxCustomGadgets(); SetMainBackgroundImage(IMG_BACKGROUND_EDITOR); - ClearWindow(); + ClearField(); #if 0 DrawTextSCentered(ED_SETTINGS1_YPOS, FONT_TITLE_1, "Element Settings"); @@ -10302,7 +10336,10 @@ static void HandleCounterButtons(struct GadgetInfo *gi) if (counter_id == ED_COUNTER_ID_SELECT_LEVEL) { LoadLevel(level_nr); + LoadScore(level_nr); + TapeErase(); + ResetUndoBuffer(); DrawEditModeWindow();