X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Feditor.c;h=8c1302cc0232b150bc5c004b6bccd13bbd16df36;hb=bfcccf30d39e98f488fa1c0bac7551a0e54ee170;hp=1a1a8527762225cd1d506c76629e4d29ff6c2cdf;hpb=002c075b9935dc5dc055d3a8f35b2774796fa1c4;p=rocksndiamonds.git diff --git a/src/editor.c b/src/editor.c index 1a1a8527..8c1302cc 100644 --- a/src/editor.c +++ b/src/editor.c @@ -879,6 +879,9 @@ static struct char *text; } control_info[ED_NUM_CTRL_BUTTONS] = { + /* note: some additional characters are already reserved for "cheat mode" + shortcuts (":XYZ" style) -- for details, see "events.c" */ + { 's', "draw single items" }, { 'd', "draw connected items" }, { 'l', "draw lines" }, @@ -1256,6 +1259,7 @@ static struct ValueTextInfo options_access_protected[] = static struct ValueTextInfo options_access_direction[] = { + { MV_NO_DIRECTIONS, "no direction" }, { MV_LEFT, "left" }, { MV_RIGHT, "right" }, { MV_UP, "up" }, @@ -1327,6 +1331,7 @@ static struct ValueTextInfo options_move_direction[] = static struct ValueTextInfo options_move_stepsize[] = { + { 0, "not moving" }, { 1, "very slow" }, { 2, "slow" }, { 4, "normal" }, @@ -1426,22 +1431,22 @@ static struct ValueTextInfo options_change_direct_action[] = static struct ValueTextInfo options_change_other_action[] = { - { CE_OTHER_GETS_TOUCHED, "player touches" }, - { CE_OTHER_GETS_PRESSED, "player presses" }, - { CE_OTHER_GETS_PUSHED, "player pushes" }, - { CE_OTHER_GETS_ENTERED, "player enters" }, - { CE_OTHER_GETS_LEFT, "player leaves" }, - { CE_OTHER_GETS_DIGGED, "player digs" }, - { CE_OTHER_GETS_COLLECTED, "player collects" }, - { CE_OTHER_GETS_DROPPED, "player drops/throws" }, - { CE_OTHER_IS_TOUCHING, "touching" }, + { CE_PLAYER_TOUCHES_X, "player touches" }, + { CE_PLAYER_PRESSES_X, "player presses" }, + { CE_PLAYER_PUSHES_X, "player pushes" }, + { CE_PLAYER_ENTERS_X, "player enters" }, + { CE_PLAYER_LEAVES_X, "player leaves" }, + { CE_PLAYER_DIGS_X, "player digs" }, + { CE_PLAYER_COLLECTS_X, "player collects" }, + { CE_PLAYER_DROPS_X, "player drops/throws" }, + { CE_TOUCHING_X, "touching" }, #if 1 - { CE_OTHER_IS_HITTING, "hitting" }, - { CE_OTHER_GETS_HIT, "hit by" }, + { CE_HITTING_X, "hitting" }, + { CE_HIT_BY_X, "hit by" }, #endif - { CE_OTHER_IS_SWITCHING, "switch of" }, - { CE_OTHER_IS_CHANGING, "change by page of" }, - { CE_OTHER_IS_EXPLODING, "explosion of" }, + { CE_SWITCH_OF_X, "switch of" }, + { CE_CHANGE_OF_X, "change by page of" }, + { CE_EXPLOSION_OF_X, "explosion of" }, { -1, NULL } }; @@ -2718,20 +2723,20 @@ static int editor_hl_emerald_mine_club[] = static int editor_el_emerald_mine_club[] = { - EL_EM_KEY_5, - EL_EM_KEY_6, - EL_EM_KEY_7, - EL_EM_KEY_8, + EL_EMC_KEY_5, + EL_EMC_KEY_6, + EL_EMC_KEY_7, + EL_EMC_KEY_8, - EL_EM_GATE_5, - EL_EM_GATE_6, - EL_EM_GATE_7, - EL_EM_GATE_8, + EL_EMC_GATE_5, + EL_EMC_GATE_6, + EL_EMC_GATE_7, + EL_EMC_GATE_8, - EL_EM_GATE_5_GRAY, - EL_EM_GATE_6_GRAY, - EL_EM_GATE_7_GRAY, - EL_EM_GATE_8_GRAY, + EL_EMC_GATE_5_GRAY, + EL_EMC_GATE_6_GRAY, + EL_EMC_GATE_7_GRAY, + EL_EMC_GATE_8_GRAY, EL_EMC_STEELWALL_1, EL_EMC_STEELWALL_2, @@ -2763,10 +2768,18 @@ static int editor_el_emerald_mine_club[] = EL_EMC_WALL_11, EL_EMC_WALL_12, +#if RELEASE_312 + EL_EMPTY, +#else EL_EMC_ANDROID, +#endif EL_BALLOON, EL_BALLOON_SWITCH_ANY, +#if RELEASE_312 + EL_EMPTY, +#else EL_BALLOON_SWITCH_NONE, +#endif EL_BALLOON_SWITCH_LEFT, EL_BALLOON_SWITCH_RIGHT, @@ -2775,16 +2788,34 @@ static int editor_el_emerald_mine_club[] = EL_EMC_GRASS, EL_EMC_PLANT, +#if RELEASE_312 + EL_EMPTY, + EL_EMPTY, +#else EL_EMC_LENSES, EL_EMC_MAGNIFIER, +#endif +#if RELEASE_312 + EL_EMPTY, + EL_EMPTY, +#else EL_EMC_MAGIC_BALL, EL_EMC_MAGIC_BALL_SWITCH, +#endif EL_SPRING, +#if RELEASE_312 + EL_EMPTY, +#else EL_EMC_SPRING_BUMPER, +#endif - EL_EMC_DRIPPER, +#if RELEASE_312 EL_EMPTY, +#else + EL_EMC_DRIPPER, +#endif + EL_EMC_FAKE_GRASS, EL_EMPTY, EL_EMPTY, }; @@ -6172,20 +6203,20 @@ static void CopyCustomElementPropertiesToEditor(int element) /* set "change by other element action" selectbox help value */ custom_element_change.other_action = - (HAS_CHANGE_EVENT(element, CE_OTHER_GETS_TOUCHED) ? CE_OTHER_GETS_TOUCHED : - HAS_CHANGE_EVENT(element, CE_OTHER_GETS_PRESSED) ? CE_OTHER_GETS_PRESSED : - HAS_CHANGE_EVENT(element, CE_OTHER_GETS_PUSHED) ? CE_OTHER_GETS_PUSHED : - HAS_CHANGE_EVENT(element, CE_OTHER_GETS_ENTERED) ? CE_OTHER_GETS_ENTERED : - HAS_CHANGE_EVENT(element, CE_OTHER_GETS_LEFT) ? CE_OTHER_GETS_LEFT : - HAS_CHANGE_EVENT(element, CE_OTHER_GETS_DIGGED) ? CE_OTHER_GETS_DIGGED : - HAS_CHANGE_EVENT(element, CE_OTHER_GETS_COLLECTED) ? CE_OTHER_GETS_COLLECTED : - HAS_CHANGE_EVENT(element, CE_OTHER_GETS_DROPPED) ? CE_OTHER_GETS_DROPPED : - HAS_CHANGE_EVENT(element, CE_OTHER_IS_TOUCHING) ? CE_OTHER_IS_TOUCHING : - HAS_CHANGE_EVENT(element, CE_OTHER_IS_HITTING) ? CE_OTHER_IS_HITTING : - HAS_CHANGE_EVENT(element, CE_OTHER_GETS_HIT) ? CE_OTHER_GETS_HIT : - HAS_CHANGE_EVENT(element, CE_OTHER_IS_SWITCHING) ? CE_OTHER_IS_SWITCHING : - HAS_CHANGE_EVENT(element, CE_OTHER_IS_CHANGING) ? CE_OTHER_IS_CHANGING : - HAS_CHANGE_EVENT(element, CE_OTHER_IS_EXPLODING) ? CE_OTHER_IS_EXPLODING : + (HAS_CHANGE_EVENT(element, CE_PLAYER_TOUCHES_X) ? CE_PLAYER_TOUCHES_X : + HAS_CHANGE_EVENT(element, CE_PLAYER_PRESSES_X) ? CE_PLAYER_PRESSES_X : + HAS_CHANGE_EVENT(element, CE_PLAYER_PUSHES_X) ? CE_PLAYER_PUSHES_X : + HAS_CHANGE_EVENT(element, CE_PLAYER_ENTERS_X) ? CE_PLAYER_ENTERS_X : + HAS_CHANGE_EVENT(element, CE_PLAYER_LEAVES_X) ? CE_PLAYER_LEAVES_X : + HAS_CHANGE_EVENT(element, CE_PLAYER_DIGS_X) ? CE_PLAYER_DIGS_X : + HAS_CHANGE_EVENT(element, CE_PLAYER_COLLECTS_X) ? CE_PLAYER_COLLECTS_X : + HAS_CHANGE_EVENT(element, CE_PLAYER_DROPS_X) ? CE_PLAYER_DROPS_X : + HAS_CHANGE_EVENT(element, CE_TOUCHING_X) ? CE_TOUCHING_X : + HAS_CHANGE_EVENT(element, CE_HITTING_X) ? CE_HITTING_X : + HAS_CHANGE_EVENT(element, CE_HIT_BY_X) ? CE_HIT_BY_X : + HAS_CHANGE_EVENT(element, CE_SWITCH_OF_X) ? CE_SWITCH_OF_X : + HAS_CHANGE_EVENT(element, CE_CHANGE_OF_X) ? CE_CHANGE_OF_X : + HAS_CHANGE_EVENT(element, CE_EXPLOSION_OF_X) ? CE_EXPLOSION_OF_X : custom_element_change.other_action); } @@ -6361,20 +6392,20 @@ static void CopyCustomElementPropertiesToGame(int element) custom_element_change_events[CE_BY_DIRECT_ACTION]; /* set other element action change event from checkbox and selectbox */ - custom_element_change_events[CE_OTHER_GETS_TOUCHED] = FALSE; - custom_element_change_events[CE_OTHER_GETS_PRESSED] = FALSE; - custom_element_change_events[CE_OTHER_GETS_PUSHED] = FALSE; - custom_element_change_events[CE_OTHER_GETS_ENTERED] = FALSE; - custom_element_change_events[CE_OTHER_GETS_LEFT] = FALSE; - custom_element_change_events[CE_OTHER_GETS_DIGGED] = FALSE; - custom_element_change_events[CE_OTHER_GETS_COLLECTED] = FALSE; - custom_element_change_events[CE_OTHER_GETS_DROPPED] = FALSE; - custom_element_change_events[CE_OTHER_IS_TOUCHING] = FALSE; - custom_element_change_events[CE_OTHER_IS_HITTING] = FALSE; - custom_element_change_events[CE_OTHER_GETS_HIT] = FALSE; - custom_element_change_events[CE_OTHER_IS_SWITCHING] = FALSE; - custom_element_change_events[CE_OTHER_IS_CHANGING] = FALSE; - custom_element_change_events[CE_OTHER_IS_EXPLODING] = FALSE; + custom_element_change_events[CE_PLAYER_TOUCHES_X] = FALSE; + custom_element_change_events[CE_PLAYER_PRESSES_X] = FALSE; + custom_element_change_events[CE_PLAYER_PUSHES_X] = FALSE; + custom_element_change_events[CE_PLAYER_ENTERS_X] = FALSE; + custom_element_change_events[CE_PLAYER_LEAVES_X] = FALSE; + custom_element_change_events[CE_PLAYER_DIGS_X] = FALSE; + custom_element_change_events[CE_PLAYER_COLLECTS_X] = FALSE; + custom_element_change_events[CE_PLAYER_DROPS_X] = FALSE; + custom_element_change_events[CE_TOUCHING_X] = FALSE; + custom_element_change_events[CE_HITTING_X] = FALSE; + custom_element_change_events[CE_HIT_BY_X] = FALSE; + custom_element_change_events[CE_SWITCH_OF_X] = FALSE; + custom_element_change_events[CE_CHANGE_OF_X] = FALSE; + custom_element_change_events[CE_EXPLOSION_OF_X] = FALSE; custom_element_change_events[custom_element_change.other_action] = custom_element_change_events[CE_BY_OTHER_ACTION]; @@ -7279,10 +7310,10 @@ static struct { EL_EM_KEY_3_FILE, &level.score[SC_KEY], TEXT_COLLECTING }, { EL_EM_KEY_4_FILE, &level.score[SC_KEY], TEXT_COLLECTING }, #endif - { EL_EM_KEY_5, &level.score[SC_KEY], TEXT_COLLECTING }, - { EL_EM_KEY_6, &level.score[SC_KEY], TEXT_COLLECTING }, - { EL_EM_KEY_7, &level.score[SC_KEY], TEXT_COLLECTING }, - { EL_EM_KEY_8, &level.score[SC_KEY], TEXT_COLLECTING }, + { EL_EMC_KEY_5, &level.score[SC_KEY], TEXT_COLLECTING }, + { 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_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 }, @@ -7895,6 +7926,7 @@ static void SelectArea(int from_x, int from_y, int to_x, int to_y, #define CB_BRUSH_TO_LEVEL 2 #define CB_DELETE_OLD_CURSOR 3 #define CB_DUMP_BRUSH 4 +#define CB_DUMP_BRUSH_SMALL 5 static void CopyBrushExt(int from_x, int from_y, int to_x, int to_y, int button, int mode) @@ -7906,7 +7938,8 @@ static void CopyBrushExt(int from_x, int from_y, int to_x, int to_y, int new_element = BUTTON_ELEMENT(button); int x, y; - if (mode == CB_DUMP_BRUSH) + if (mode == CB_DUMP_BRUSH || + mode == CB_DUMP_BRUSH_SMALL) { if (!draw_with_brush) { @@ -7953,10 +7986,12 @@ static void CopyBrushExt(int from_x, int from_y, int to_x, int to_y, if (IS_CUSTOM_ELEMENT(element)) element_mapped = EL_CUSTOM_START; - else if (element > EL_ENVELOPE_4) - element_mapped = EL_CHAR_QUESTION; /* change to EL_UNKNOWN ... */ + else if (IS_GROUP_ELEMENT(element)) + element_mapped = EL_GROUP_START; + else if (element >= NUM_FILE_ELEMENTS) + element_mapped = EL_UNKNOWN; - printf("`%03d", element_mapped); + printf("%c%03d", (mode == CB_DUMP_BRUSH ? '`' : 'ΒΈ'), element_mapped); #endif } @@ -8085,6 +8120,11 @@ void DumpBrush() CopyBrushExt(0, 0, 0, 0, 0, CB_DUMP_BRUSH); } +void DumpBrush_Small() +{ + CopyBrushExt(0, 0, 0, 0, 0, CB_DUMP_BRUSH_SMALL); +} + static void FloodFill(int from_x, int from_y, int fill_element) { int i,x,y; @@ -8712,7 +8752,7 @@ static void HandleCounterButtons(struct GadgetInfo *gi) if ((level_changed && pressed) || (!level_changed && released)) return; - if (level_changed && !Request("Level has changed! Discard changes ?", + if (level_changed && !Request("Level has changed ! Discard changes ?", REQ_ASK)) { if (gadget_id == counterbutton_info[counter_id].gadget_id_text) @@ -9728,7 +9768,7 @@ void RequestExitLevelEditor(boolean ask_if_level_has_changed) { if (!ask_if_level_has_changed || !LevelChanged() || - Request("Level has changed! Exit without saving ?", + Request("Level has changed ! Exit without saving ?", REQ_ASK | REQ_STAY_OPEN)) { #if 1