X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Feditor.c;h=8f921bc60137ace0fedb008facc034830120926b;hb=cb97a0d81529dc81696e5df8e17083b30dfe633e;hp=cc05c9d24f91bdd4cad9c9274344761d25fef4ca;hpb=ba68c676a24c697907748c2653d77752363170fe;p=rocksndiamonds.git diff --git a/src/editor.c b/src/editor.c index cc05c9d2..8f921bc6 100644 --- a/src/editor.c +++ b/src/editor.c @@ -159,7 +159,7 @@ ED_GADGET_DISTANCE) /* extended custom change target */ #define ED_AREA_ELEM_CONTENT6_XPOS (29 * MINI_TILEX) -#define ED_AREA_ELEM_CONTENT6_YPOS (ED_SETTINGS_YPOS(9) + \ +#define ED_AREA_ELEM_CONTENT6_YPOS (ED_SETTINGS_YPOS(10) + \ ED_GADGET_DISTANCE - MINI_TILEY) /* group element content */ #define ED_AREA_GROUP_CONTENT_XPOS ED_SETTINGS_XPOS(0) @@ -455,13 +455,15 @@ #define GADGET_ID_CHANGE_TIME_UNITS (GADGET_ID_SELECTBOX_FIRST + 13) #define GADGET_ID_CHANGE_DIRECT_ACTION (GADGET_ID_SELECTBOX_FIRST + 14) #define GADGET_ID_CHANGE_OTHER_ACTION (GADGET_ID_SELECTBOX_FIRST + 15) -#define GADGET_ID_CHANGE_SIDES (GADGET_ID_SELECTBOX_FIRST + 16) -#define GADGET_ID_CHANGE_POWER (GADGET_ID_SELECTBOX_FIRST + 17) -#define GADGET_ID_SELECT_CHANGE_PAGE (GADGET_ID_SELECTBOX_FIRST + 18) -#define GADGET_ID_GROUP_CHOICE_MODE (GADGET_ID_SELECTBOX_FIRST + 19) +#define GADGET_ID_CHANGE_SIDE (GADGET_ID_SELECTBOX_FIRST + 16) +#define GADGET_ID_CHANGE_PLAYER (GADGET_ID_SELECTBOX_FIRST + 17) +#define GADGET_ID_CHANGE_PAGE (GADGET_ID_SELECTBOX_FIRST + 18) +#define GADGET_ID_CHANGE_POWER (GADGET_ID_SELECTBOX_FIRST + 19) +#define GADGET_ID_SELECT_CHANGE_PAGE (GADGET_ID_SELECTBOX_FIRST + 20) +#define GADGET_ID_GROUP_CHOICE_MODE (GADGET_ID_SELECTBOX_FIRST + 21) /* textbutton identifiers */ -#define GADGET_ID_TEXTBUTTON_FIRST (GADGET_ID_SELECTBOX_FIRST + 20) +#define GADGET_ID_TEXTBUTTON_FIRST (GADGET_ID_SELECTBOX_FIRST + 22) #define GADGET_ID_PROPERTIES_INFO (GADGET_ID_TEXTBUTTON_FIRST + 0) #define GADGET_ID_PROPERTIES_CONFIG (GADGET_ID_TEXTBUTTON_FIRST + 1) @@ -641,12 +643,14 @@ #define ED_SELECTBOX_ID_CHANGE_TIME_UNITS 13 #define ED_SELECTBOX_ID_CHANGE_DIRECT_ACTION 14 #define ED_SELECTBOX_ID_CHANGE_OTHER_ACTION 15 -#define ED_SELECTBOX_ID_CHANGE_SIDES 16 -#define ED_SELECTBOX_ID_CHANGE_POWER 17 -#define ED_SELECTBOX_ID_SELECT_CHANGE_PAGE 18 -#define ED_SELECTBOX_ID_GROUP_CHOICE_MODE 19 +#define ED_SELECTBOX_ID_CHANGE_SIDE 16 +#define ED_SELECTBOX_ID_CHANGE_PLAYER 17 +#define ED_SELECTBOX_ID_CHANGE_PAGE 18 +#define ED_SELECTBOX_ID_CHANGE_POWER 19 +#define ED_SELECTBOX_ID_SELECT_CHANGE_PAGE 20 +#define ED_SELECTBOX_ID_GROUP_CHOICE_MODE 21 -#define ED_NUM_SELECTBOX 20 +#define ED_NUM_SELECTBOX 22 #define ED_SELECTBOX_ID_CUSTOM1_FIRST ED_SELECTBOX_ID_CUSTOM_ACCESS_TYPE #define ED_SELECTBOX_ID_CUSTOM1_LAST ED_SELECTBOX_ID_CUSTOM_SLIPPERY_TYPE @@ -913,7 +917,7 @@ static struct }, { ED_SETTINGS_XPOS(0), ED_COUNTER_YPOS(4), - 0, 999, + 0, 9999, GADGET_ID_LEVEL_TIMELIMIT_DOWN, GADGET_ID_LEVEL_TIMELIMIT_UP, GADGET_ID_LEVEL_TIMELIMIT_TEXT, GADGET_ID_NONE, &level.time, @@ -1071,7 +1075,7 @@ static struct NULL, "+random", NULL }, { - ED_SETTINGS_XPOS(3), ED_SETTINGS_YPOS(11), + ED_SETTINGS_XPOS(3), ED_SETTINGS_YPOS(12), 0, 100, GADGET_ID_CHANGE_CONT_RND_DOWN, GADGET_ID_CHANGE_CONT_RND_UP, GADGET_ID_CHANGE_CONT_RND_TEXT, GADGET_ID_NONE, @@ -1134,6 +1138,7 @@ static struct ValueTextInfo options_access_type[] = { { EP_WALKABLE, "walkable" }, { EP_PASSABLE, "passable" }, + { -1, NULL } }; @@ -1142,6 +1147,7 @@ static struct ValueTextInfo options_access_layer[] = { EP_ACCESSIBLE_OVER, "over" }, { EP_ACCESSIBLE_INSIDE, "inside" }, { EP_ACCESSIBLE_UNDER, "under" }, + { -1, NULL } }; @@ -1149,6 +1155,7 @@ static struct ValueTextInfo options_access_protected[] = { { 0, "unprotected" }, { 1, "protected" }, + { -1, NULL } }; @@ -1169,6 +1176,7 @@ static struct ValueTextInfo options_access_direction[] = { MV_VERTICAL | MV_LEFT, "vertical + left" }, { MV_VERTICAL | MV_RIGHT, "vertical + right" }, { MV_ALL_DIRECTIONS, "all directions" }, + { -1, NULL } }; @@ -1178,6 +1186,7 @@ static struct ValueTextInfo options_walk_to_action[] = { EP_COLLECTIBLE_ONLY, "collectible" }, { EP_DROPPABLE, "collectible & droppable" }, { EP_PUSHABLE, "pushable" }, + { -1, NULL } }; @@ -1203,6 +1212,7 @@ static struct ValueTextInfo options_move_pattern[] = { MV_WHEN_DROPPED, "when dropped" }, { MV_MAZE_RUNNER, "maze runner style" }, { MV_MAZE_HUNTER, "maze hunter style" }, + { -1, NULL } }; @@ -1215,6 +1225,7 @@ static struct ValueTextInfo options_move_direction[] = { MV_START_DOWN, "down" }, { MV_START_RANDOM, "random" }, { MV_START_PREVIOUS, "previous" }, + { -1, NULL } }; @@ -1225,6 +1236,7 @@ static struct ValueTextInfo options_move_stepsize[] = { 4, "normal" }, { 8, "fast" }, { 16, "very fast" }, + { -1, NULL } }; @@ -1232,6 +1244,7 @@ static struct ValueTextInfo options_move_leave_type[] = { { LEAVE_TYPE_UNLIMITED, "leave behind" }, { LEAVE_TYPE_LIMITED, "change it to" }, + { -1, NULL } }; @@ -1242,6 +1255,7 @@ static struct ValueTextInfo options_smash_targets[] = { EP_CAN_SMASH_ENEMIES, "enemies" }, #endif { EP_CAN_SMASH_EVERYTHING, "everything" }, + { -1, NULL } }; @@ -1252,6 +1266,7 @@ static struct ValueTextInfo options_slippery_type[] = { SLIPPERY_ANY_RIGHT_LEFT, "right, left" }, { SLIPPERY_ONLY_LEFT, "only left" }, { SLIPPERY_ONLY_RIGHT, "only right" }, + { -1, NULL } }; @@ -1260,6 +1275,7 @@ static struct ValueTextInfo options_deadliness[] = { EP_DONT_RUN_INTO, "running into" }, { EP_DONT_COLLIDE_WITH, "colliding with" }, { EP_DONT_TOUCH, "touching" }, + { -1, NULL } }; @@ -1269,6 +1285,7 @@ static struct ValueTextInfo options_consistency[] = { EP_CAN_EXPLODE_DYNA, "can explode 3+3" }, { EP_CAN_EXPLODE_1X1, "can explode 1x1" }, { EP_INDESTRUCTIBLE, "indestructible" }, + { -1, NULL } }; @@ -1276,6 +1293,7 @@ static struct ValueTextInfo options_time_units[] = { { 1, "frames" }, { FRAMES_PER_SECOND, "seconds" }, + { -1, NULL } }; @@ -1296,6 +1314,7 @@ static struct ValueTextInfo options_change_direct_action[] = #endif { CE_IMPACT, "impact (on something)" }, { CE_SMASHED, "smashed (from above)" }, + { -1, NULL } }; @@ -1315,20 +1334,72 @@ static struct ValueTextInfo options_change_other_action[] = { CE_OTHER_GETS_HIT, "hit by ..." }, #endif { CE_OTHER_IS_SWITCHING, "switch of ..." }, - { CE_OTHER_IS_CHANGING, "change of" }, + { CE_OTHER_IS_CHANGING, "change by page of" }, { CE_OTHER_IS_EXPLODING, "explosion of" }, + + { -1, NULL } +}; + +static struct ValueTextInfo options_change_trigger_side[] = +{ + { CH_SIDE_LEFT, "left" }, + { CH_SIDE_RIGHT, "right" }, + { CH_SIDE_TOP, "top" }, + { CH_SIDE_BOTTOM, "bottom" }, + { CH_SIDE_LEFT_RIGHT, "left/right" }, + { CH_SIDE_TOP_BOTTOM, "top/bottom" }, + { CH_SIDE_ANY, "any" }, + { -1, NULL } }; -static struct ValueTextInfo options_change_sides[] = +static struct ValueTextInfo options_change_trigger_player[] = { - { CH_SIDE_LEFT, "left side" }, - { CH_SIDE_RIGHT, "right side" }, - { CH_SIDE_TOP, "top side" }, - { CH_SIDE_BOTTOM, "bottom side" }, - { CH_SIDE_LEFT_RIGHT, "left/right side" }, - { CH_SIDE_TOP_BOTTOM, "top/bottom side" }, - { CH_SIDE_ANY, "any side" }, + { CH_PLAYER_1, "1" }, + { CH_PLAYER_2, "2" }, + { CH_PLAYER_3, "3" }, + { CH_PLAYER_4, "4" }, + { CH_PLAYER_ANY, "any" }, + + { -1, NULL } +}; + +static struct ValueTextInfo options_change_trigger_page[] = +{ + { (1 << 0), "1" }, + { (1 << 1), "2" }, + { (1 << 2), "3" }, + { (1 << 3), "4" }, + { (1 << 4), "5" }, + { (1 << 5), "6" }, + { (1 << 6), "7" }, + { (1 << 7), "8" }, + { (1 << 8), "9" }, + { (1 << 9), "10" }, + { (1 << 10), "11" }, + { (1 << 11), "12" }, + { (1 << 12), "13" }, + { (1 << 13), "14" }, + { (1 << 14), "15" }, + { (1 << 15), "16" }, + { (1 << 16), "17" }, + { (1 << 17), "18" }, + { (1 << 18), "19" }, + { (1 << 19), "20" }, + { (1 << 20), "21" }, + { (1 << 21), "22" }, + { (1 << 22), "23" }, + { (1 << 23), "24" }, + { (1 << 24), "25" }, + { (1 << 25), "26" }, + { (1 << 26), "27" }, + { (1 << 27), "28" }, + { (1 << 28), "29" }, + { (1 << 29), "30" }, + { (1 << 30), "31" }, + { (1 << 31), "32" }, + { CH_PAGE_ANY, "any" }, + { -1, NULL } }; @@ -1337,6 +1408,7 @@ static struct ValueTextInfo options_change_power[] = { CP_NON_DESTRUCTIVE, "empty" }, { CP_HALF_DESTRUCTIVE, "diggable" }, { CP_FULL_DESTRUCTIVE, "destructible" }, + { -1, NULL } }; @@ -1353,6 +1425,7 @@ static struct ValueTextInfo options_group_choice_mode[] = { ANIM_LINEAR, "linear" }, { ANIM_PINGPONG, "pingpong" }, { ANIM_PINGPONG2, "pingpong 2" }, + { -1, NULL } }; @@ -1505,14 +1578,30 @@ static struct }, { ED_SETTINGS_XPOS(2), ED_SETTINGS_YPOS(6), - GADGET_ID_CHANGE_SIDES, GADGET_ID_NONE, + GADGET_ID_CHANGE_SIDE, GADGET_ID_NONE, + -1, + options_change_trigger_side, + &custom_element_change.trigger_side, + "... at", "side", "element side that causes change" + }, + { + ED_SETTINGS_XPOS(2), ED_SETTINGS_YPOS(7), + GADGET_ID_CHANGE_PLAYER, GADGET_ID_NONE, -1, - options_change_sides, - &custom_element_change.sides, - "... at", NULL, "element side that causes change" + options_change_trigger_player, + &custom_element_change.trigger_player, + "player:", " ", "player that causes change" }, { - ED_SETTINGS_XPOS(2), ED_SETTINGS_YPOS(9), + ED_SETTINGS_XPOS(2), ED_SETTINGS_YPOS(7), + GADGET_ID_CHANGE_PAGE, GADGET_ID_CHANGE_PLAYER, + -1, + options_change_trigger_page, + &custom_element_change.trigger_page, + "page:", NULL, "change page that causes change" + }, + { + ED_SETTINGS_XPOS(2), ED_SETTINGS_YPOS(10), GADGET_ID_CHANGE_POWER, GADGET_ID_NONE, -1, options_change_power, @@ -1520,7 +1609,7 @@ static struct "replace when", NULL, "which elements can be replaced" }, { - ED_SETTINGS_XPOS(1), ED_SETTINGS_YPOS(13), + ED_SETTINGS_XPOS(1), ED_SETTINGS_YPOS(14), GADGET_ID_SELECT_CHANGE_PAGE, GADGET_ID_NONE, 3, options_change_page, @@ -1608,13 +1697,13 @@ static struct " ", "As Template", "Save current settings as new template" }, { - -1, ED_SETTINGS_YPOS(13), + -1, ED_SETTINGS_YPOS(14), GADGET_ID_ADD_CHANGE_PAGE, GADGET_ID_NEXT_CHANGE_PAGE, -1, "New", " ", NULL, "Add new change page" }, { - -1, ED_SETTINGS_YPOS(13), + -1, ED_SETTINGS_YPOS(14), GADGET_ID_DEL_CHANGE_PAGE, GADGET_ID_ADD_CHANGE_PAGE, -1, "Delete", NULL, NULL, "Delete current change page" @@ -1633,14 +1722,14 @@ static struct { { ED_BUTTON_MINUS_XPOS, ED_BUTTON_COUNT_YPOS, - ED_SETTINGS_XPOS(0), ED_SETTINGS_YPOS(13), + ED_SETTINGS_XPOS(0), ED_SETTINGS_YPOS(14), ED_BUTTON_COUNT_XSIZE, ED_BUTTON_COUNT_YSIZE, GADGET_ID_PREV_CHANGE_PAGE, GADGET_ID_NONE, NULL, NULL, "select previous change page" }, { ED_BUTTON_PLUS_XPOS, ED_BUTTON_COUNT_YPOS, - -1, ED_SETTINGS_YPOS(13), + -1, ED_SETTINGS_YPOS(14), ED_BUTTON_COUNT_XSIZE, ED_BUTTON_COUNT_YSIZE, GADGET_ID_NEXT_CHANGE_PAGE, GADGET_ID_SELECT_CHANGE_PAGE, NULL, "change page", "select next change page" @@ -1804,7 +1893,7 @@ static struct "slip down from certain flat walls","use EM style slipping behaviour" }, { - ED_SETTINGS_XPOS(0), ED_SETTINGS_YPOS(0), + ED_SETTINGS_XPOS(0), ED_SETTINGS_YPOS(1), GADGET_ID_USE_SPRING_BUG, GADGET_ID_NONE, &level.use_spring_bug, NULL, @@ -1943,25 +2032,25 @@ static struct NULL, NULL, "element changes by other element" }, { - ED_SETTINGS_XPOS(1), ED_SETTINGS_YPOS(7), + ED_SETTINGS_XPOS(1), ED_SETTINGS_YPOS(8), GADGET_ID_CHANGE_USE_EXPLOSION, GADGET_ID_NONE, &custom_element_change.explode, NULL, "explode instead of change", "element explodes instead of change" }, { - ED_SETTINGS_XPOS(1), ED_SETTINGS_YPOS(8), + ED_SETTINGS_XPOS(1), ED_SETTINGS_YPOS(9), GADGET_ID_CHANGE_USE_CONTENT, GADGET_ID_NONE, &custom_element_change.use_content, NULL, "use extended change target:","element changes to more elements" }, { - ED_SETTINGS_XPOS(2), ED_SETTINGS_YPOS(10), + ED_SETTINGS_XPOS(2), ED_SETTINGS_YPOS(11), GADGET_ID_CHANGE_ONLY_COMPLETE, GADGET_ID_NONE, &custom_element_change.only_complete, NULL, "replace all or nothing", "only replace when all can be changed" }, { - ED_SETTINGS_XPOS(2), ED_SETTINGS_YPOS(11), + ED_SETTINGS_XPOS(2), ED_SETTINGS_YPOS(12), GADGET_ID_CHANGE_USE_RANDOM, GADGET_ID_NONE, &custom_element_change.use_random_change, NULL, NULL, "use percentage for random replace" @@ -3378,6 +3467,8 @@ editor_elements_info[] = } }; +#if 0 + static struct { short element; @@ -3577,6 +3668,8 @@ forum_sketch_element_strings[] = { -1, NULL } }; +#endif + /* ----------------------------------------------------------------------------- @@ -4241,7 +4334,7 @@ static void CreateCounterButtons() GDI_NUMBER_VALUE, 0, GDI_NUMBER_MIN, counterbutton_info[i].min_value, GDI_NUMBER_MAX, counterbutton_info[i].max_value, - GDI_TEXT_SIZE, 3, + GDI_TEXT_SIZE, 3, /* minimal counter text size */ GDI_TEXT_FONT, font_type, GDI_TEXT_FONT_ACTIVE, font_type_active, GDI_DESIGN_UNPRESSED, gd_bitmap, gd_x, gd_y, @@ -5407,7 +5500,7 @@ static void copy_custom_element_settings(int element_from, int element_to) change_to->can_change = change_from->can_change; - change_to->sides = change_from->sides; + change_to->trigger_side = change_from->trigger_side; } #endif @@ -5843,6 +5936,7 @@ static void CopyClassicElementPropertiesToGame(int element) if (COULD_MOVE_INTO_ACID(element)) setMoveIntoAcidProperty(&level, element, custom_element_properties[EP_CAN_MOVE_INTO_ACID]); + #else if (COULD_MOVE_INTO_ACID(element)) @@ -7277,6 +7371,8 @@ static void CopyBrushExt(int from_x, int from_y, int to_x, int to_y, { int element = brush_buffer[x][y]; int element_mapped = element; + +#if 0 char *element_string = "?"; int k; @@ -7302,6 +7398,16 @@ static void CopyBrushExt(int from_x, int from_y, int to_x, int to_y, } printf("`%s", element_string); + +#else + + 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 ... */ + + printf("`%03d", element_mapped); +#endif } printf("\n");