X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Feditor.c;h=b5bfa2723c141bc2fc5be647352b69db842fdd77;hb=2382d7155d6c54e7fa9c961473a44deafe8f9a55;hp=5420a477979da1fb48a00079652c81789e85d260;hpb=7682b4160c39233d30c765171ceaea0af561b45c;p=rocksndiamonds.git diff --git a/src/editor.c b/src/editor.c index 5420a477..b5bfa272 100644 --- a/src/editor.c +++ b/src/editor.c @@ -570,6 +570,12 @@ enum GADGET_ID_BD_AMOEBA_2_CONTENT_ENCLOSED, GADGET_ID_BD_AMOEBA_2_CONTENT_EXPLODING, GADGET_ID_BD_AMOEBA_2_CONTENT_LOOKS_LIKE, + GADGET_ID_BD_SLIME_EATS_ELEMENT_1, + GADGET_ID_BD_SLIME_CONVERTS_TO_ELEMENT_1, + GADGET_ID_BD_SLIME_EATS_ELEMENT_2, + GADGET_ID_BD_SLIME_CONVERTS_TO_ELEMENT_2, + GADGET_ID_BD_SLIME_EATS_ELEMENT_3, + GADGET_ID_BD_SLIME_CONVERTS_TO_ELEMENT_3, GADGET_ID_BD_ACID_EATS_ELEMENT, GADGET_ID_BD_ACID_TURNS_TO_ELEMENT, GADGET_ID_BD_BITER_EATS_ELEMENT, @@ -742,6 +748,7 @@ enum GADGET_ID_BD_CONVEYOR_BELTS_ACTIVE, GADGET_ID_BD_CONVEYOR_BELTS_CHANGED, GADGET_ID_BD_WATER_CANNOT_FLOW_DOWN, + GADGET_ID_BD_HAMMER_WALLS_REAPPEAR, GADGET_ID_ENVELOPE_AUTOWRAP, GADGET_ID_ENVELOPE_CENTERED, GADGET_ID_MM_LASER_RED, @@ -1092,6 +1099,7 @@ enum ED_CHECKBUTTON_ID_BD_CONVEYOR_BELTS_ACTIVE, ED_CHECKBUTTON_ID_BD_CONVEYOR_BELTS_CHANGED, ED_CHECKBUTTON_ID_BD_WATER_CANNOT_FLOW_DOWN, + ED_CHECKBUTTON_ID_BD_HAMMER_WALLS_REAPPEAR, ED_CHECKBUTTON_ID_ENVELOPE_AUTOWRAP, ED_CHECKBUTTON_ID_ENVELOPE_CENTERED, ED_CHECKBUTTON_ID_MM_LASER_RED, @@ -1201,6 +1209,12 @@ enum ED_DRAWING_ID_BD_AMOEBA_2_CONTENT_ENCLOSED, ED_DRAWING_ID_BD_AMOEBA_2_CONTENT_EXPLODING, ED_DRAWING_ID_BD_AMOEBA_2_CONTENT_LOOKS_LIKE, + ED_DRAWING_ID_BD_SLIME_EATS_ELEMENT_1, + ED_DRAWING_ID_BD_SLIME_CONVERTS_TO_ELEMENT_1, + ED_DRAWING_ID_BD_SLIME_EATS_ELEMENT_2, + ED_DRAWING_ID_BD_SLIME_CONVERTS_TO_ELEMENT_2, + ED_DRAWING_ID_BD_SLIME_EATS_ELEMENT_3, + ED_DRAWING_ID_BD_SLIME_CONVERTS_TO_ELEMENT_3, ED_DRAWING_ID_BD_ACID_EATS_ELEMENT, ED_DRAWING_ID_BD_ACID_TURNS_TO_ELEMENT, ED_DRAWING_ID_BD_BITER_EATS_ELEMENT, @@ -3830,7 +3844,7 @@ static struct }, { ED_CHECKBUTTON_ID_BD_SLIME_IS_PREDICTABLE, - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(0), + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(1), GADGET_ID_BD_SLIME_IS_PREDICTABLE, GADGET_ID_NONE, &level.bd_slime_is_predictable, NULL, NULL, @@ -3876,6 +3890,14 @@ static struct NULL, NULL, "Does not flow downwards", "Water can only flow up, left and right" }, + { + ED_CHECKBUTTON_ID_BD_HAMMER_WALLS_REAPPEAR, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(1), + GADGET_ID_BD_HAMMER_WALLS_REAPPEAR, GADGET_ID_NONE, + &level.bd_hammer_walls_reappear, + NULL, NULL, + "Hammered walls reappear", "Hammered walls reappear after delay" + }, { ED_CHECKBUTTON_ID_ENVELOPE_AUTOWRAP, ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(1), @@ -4470,6 +4492,54 @@ static struct &level.bd_amoeba_2_content_looks_like, 1, 1, "Use graphic of element:", NULL, NULL, NULL, "BD amoeba 2 looks like this element" }, + { + ED_DRAWING_ID_BD_SLIME_EATS_ELEMENT_1, + ED_AREA_1X1_SETTINGS_XPOS(0), ED_AREA_1X1_SETTINGS_YPOS(5), + ED_AREA_1X1_SETTINGS_XOFF, ED_AREA_1X1_SETTINGS_YOFF, + GADGET_ID_BD_SLIME_EATS_ELEMENT_1, GADGET_ID_NONE, + &level.bd_slime_eats_element_1, 1, 1, + "Can eat:", NULL, NULL, NULL, "Element that can be eaten" + }, + { + ED_DRAWING_ID_BD_SLIME_CONVERTS_TO_ELEMENT_1, + ED_AREA_1X1_SETTINGS_XPOS(0), ED_AREA_1X1_SETTINGS_YPOS(5), + ED_AREA_1X1_SETTINGS_XOFF, ED_AREA_1X1_SETTINGS_YOFF, + GADGET_ID_BD_SLIME_CONVERTS_TO_ELEMENT_1, GADGET_ID_BD_SLIME_EATS_ELEMENT_1, + &level.bd_slime_converts_to_element_1, 1, 1, + " and convert to:", NULL, NULL, NULL, "Eaten element is converted to" + }, + { + ED_DRAWING_ID_BD_SLIME_EATS_ELEMENT_2, + ED_AREA_1X1_SETTINGS_XPOS(0), ED_AREA_1X1_SETTINGS_YPOS(6), + ED_AREA_1X1_SETTINGS_XOFF, ED_AREA_1X1_SETTINGS_YOFF, + GADGET_ID_BD_SLIME_EATS_ELEMENT_2, GADGET_ID_NONE, + &level.bd_slime_eats_element_2, 1, 1, + "Can eat:", NULL, NULL, NULL, "Element that can be eaten" + }, + { + ED_DRAWING_ID_BD_SLIME_CONVERTS_TO_ELEMENT_2, + ED_AREA_1X1_SETTINGS_XPOS(0), ED_AREA_1X1_SETTINGS_YPOS(6), + ED_AREA_1X1_SETTINGS_XOFF, ED_AREA_1X1_SETTINGS_YOFF, + GADGET_ID_BD_SLIME_CONVERTS_TO_ELEMENT_2, GADGET_ID_BD_SLIME_EATS_ELEMENT_2, + &level.bd_slime_converts_to_element_2, 1, 1, + " and convert to:", NULL, NULL, NULL, "Eaten element is converted to" + }, + { + ED_DRAWING_ID_BD_SLIME_EATS_ELEMENT_3, + ED_AREA_1X1_SETTINGS_XPOS(0), ED_AREA_1X1_SETTINGS_YPOS(7), + ED_AREA_1X1_SETTINGS_XOFF, ED_AREA_1X1_SETTINGS_YOFF, + GADGET_ID_BD_SLIME_EATS_ELEMENT_3, GADGET_ID_NONE, + &level.bd_slime_eats_element_3, 1, 1, + "Can eat:", NULL, NULL, NULL, "Element that can be eaten" + }, + { + ED_DRAWING_ID_BD_SLIME_CONVERTS_TO_ELEMENT_3, + ED_AREA_1X1_SETTINGS_XPOS(0), ED_AREA_1X1_SETTINGS_YPOS(7), + ED_AREA_1X1_SETTINGS_XOFF, ED_AREA_1X1_SETTINGS_YOFF, + GADGET_ID_BD_SLIME_CONVERTS_TO_ELEMENT_3, GADGET_ID_BD_SLIME_EATS_ELEMENT_3, + &level.bd_slime_converts_to_element_3, 1, 1, + " and convert to:", NULL, NULL, NULL, "Eaten element is converted to" + }, { ED_DRAWING_ID_BD_ACID_EATS_ELEMENT, ED_AREA_1X1_SETTINGS_XPOS(0), ED_AREA_1X1_SETTINGS_YPOS(1), @@ -11196,37 +11266,41 @@ static void DrawPropertiesInfo(void) PrintInfoText(no_description_text, font1_nr, xpos, ypos - line1_height); } -#define TEXT_COLLECTING "Score for collecting" -#define TEXT_COLLECTING_EXTRA "Score for extra diamonds" -#define TEXT_SMASHING "Score for smashing" -#define TEXT_SLURPING "Score for slurping robot" -#define TEXT_CRACKING "Score for cracking" -#define TEXT_AMOEBA_SPEED "Speed of amoeba growth" -#define TEXT_AMOEBA_THRESHOED "Size for turning to rocks" -#define TEXT_AMOEBA_SLOW_TIME "Slow growth time (seconds)" -#define TEXT_AMOEBA_SLOW_RATE "Slow growth rate (percent)" -#define TEXT_AMOEBA_FAST_RATE "Fast growth rate (percent)" -#define TEXT_DURATION "Duration when activated" -#define TEXT_DELAY_ON "Delay before activating" -#define TEXT_DELAY_OFF "Delay before deactivating" -#define TEXT_DELAY_CHANGING "Delay before changing" -#define TEXT_DELAY_EXPLODING "Delay before exploding" -#define TEXT_DELAY_MOVING "Delay before moving" -#define TEXT_BALL_DELAY "Element generation delay" -#define TEXT_MOVE_SPEED "Speed of android moving" -#define TEXT_CLONE_SPEED "Speed of android cloning" -#define TEXT_GAME_OF_LIFE_1 "Min neighbours to survive" -#define TEXT_GAME_OF_LIFE_2 "Max neighbours to survive" -#define TEXT_GAME_OF_LIFE_3 "Min neighbours to create" -#define TEXT_GAME_OF_LIFE_4 "Max neighbours to create" -#define TEXT_TIME_BONUS "Extra time to solve level" -#define TEXT_TIME_PENALTY "Time penalty if destroyed" -#define TEXT_PERMEABILITY_RATE "slime permeability rate" -#define TEXT_PERMEABILITY_BITS "slime permeability bits" -#define TEXT_RANDOM_SEED "slime random number seed" -#define TEXT_ACID_SPREAD_RATE "Spread rate (percent)" -#define TEXT_BITER_MOVE_DELAY "Move delay (BD frames)" -#define TEXT_REPLICATION_DELAY "Create delay (BD frames)" +#define TEXT_COLLECTING "Score for collecting" +#define TEXT_COLLECTING_EXTRA "Score for extra diamonds" +#define TEXT_SMASHING "Score for smashing" +#define TEXT_SLURPING "Score for slurping robot" +#define TEXT_CRACKING "Score for cracking" +#define TEXT_AMOEBA_SPEED "Speed of amoeba growth" +#define TEXT_AMOEBA_THRESHOED "Size for turning to rocks" +#define TEXT_AMOEBA_SLOW_TIME "Slow growth time (seconds)" +#define TEXT_AMOEBA_SLOW_RATE "Slow growth rate (percent)" +#define TEXT_AMOEBA_FAST_RATE "Fast growth rate (percent)" +#define TEXT_DURATION "Duration when activated" +#define TEXT_DELAY_ON "Delay before activating" +#define TEXT_DELAY_OFF "Delay before deactivating" +#define TEXT_DELAY_CHANGING "Delay before changing" +#define TEXT_DELAY_EXPLODING "Delay before exploding" +#define TEXT_DELAY_MOVING "Delay before moving" +#define TEXT_BALL_DELAY "Element generation delay" +#define TEXT_MOVE_SPEED "Speed of android moving" +#define TEXT_CLONE_SPEED "Speed of android cloning" +#define TEXT_GAME_OF_LIFE_1 "Min neighbours to survive" +#define TEXT_GAME_OF_LIFE_2 "Max neighbours to survive" +#define TEXT_GAME_OF_LIFE_3 "Min neighbours to create" +#define TEXT_GAME_OF_LIFE_4 "Max neighbours to create" +#define TEXT_TIME_BONUS "Extra time to solve level" +#define TEXT_TIME_PENALTY "Time penalty if destroyed" +#define TEXT_PERMEABILITY_RATE "slime permeability rate" +#define TEXT_PERMEABILITY_BITS "slime permeability bits" +#define TEXT_RANDOM_SEED "slime random number seed" +#define TEXT_ACID_SPREAD_RATE "Spread rate (percent)" +#define TEXT_BITER_MOVE_DELAY "Move delay (BD frames)" +#define TEXT_REPLICATION_DELAY "Create delay (BD frames)" +#define TEXT_HAMMER_BREAK_DELAY "Delay for breaking walls" +#define TEXT_HAMMER_REAPPEAR_DELAY "Delay for reappearing walls" +#define TEXT_SKELETONS_NEEDED "Amount needed to use a pot" +#define TEXT_SKELETONS_WORTH "Counts as this many diamonds" static struct { @@ -11363,6 +11437,14 @@ static struct 0, 3 }, { EL_BD_REPLICATOR, &level.bd_replicator_create_delay, TEXT_REPLICATION_DELAY, 0, 100 }, + { EL_BD_PNEUMATIC_HAMMER, &level.bd_hammer_walls_break_delay, TEXT_HAMMER_BREAK_DELAY, + 1, 100 }, + { EL_BD_PNEUMATIC_HAMMER, &level.bd_hammer_walls_reappear_delay, TEXT_HAMMER_REAPPEAR_DELAY, + 1, 200 }, + { EL_BD_SKELETON, &level.bd_num_skeletons_needed_for_pot, TEXT_SKELETONS_NEEDED, + 0, 50 }, + { EL_BD_SKELETON, &level.bd_skeleton_worth_num_diamonds, TEXT_SKELETONS_WORTH, + 0, 10 }, { EL_EXTRA_TIME, &level.extra_time, TEXT_TIME_BONUS }, { EL_TIME_ORB_FULL, &level.time_orb_time, TEXT_TIME_BONUS }, { EL_GAME_OF_LIFE, &level.game_of_life[0], TEXT_GAME_OF_LIFE_1,0,8 }, @@ -11563,6 +11645,10 @@ static void DrawPropertiesConfig(void) (properties_element == EL_BD_AMOEBA_2)) counterbutton_info[counter_id].y = ED_ELEMENT_SETTINGS_YPOS(3 + num_element_counters); + // special case: set position for delay counter for reappearing hammered walls + if (properties_element == EL_BD_PNEUMATIC_HAMMER && num_element_counters > 0) + counterbutton_info[counter_id].y += 1; + counterbutton_info[counter_id].value = elements_with_counter[i].value; counterbutton_info[counter_id].text_right = elements_with_counter[i].text; counterbutton_info[counter_id].min_value = elements_with_counter[i].min_value; @@ -11790,6 +11876,13 @@ static void DrawPropertiesConfig(void) if (properties_element == EL_BD_SLIME) { MapCheckbuttonGadget(ED_CHECKBUTTON_ID_BD_SLIME_IS_PREDICTABLE); + + MapDrawingArea(ED_DRAWING_ID_BD_SLIME_EATS_ELEMENT_1); + MapDrawingArea(ED_DRAWING_ID_BD_SLIME_CONVERTS_TO_ELEMENT_1); + MapDrawingArea(ED_DRAWING_ID_BD_SLIME_EATS_ELEMENT_2); + MapDrawingArea(ED_DRAWING_ID_BD_SLIME_CONVERTS_TO_ELEMENT_2); + MapDrawingArea(ED_DRAWING_ID_BD_SLIME_EATS_ELEMENT_3); + MapDrawingArea(ED_DRAWING_ID_BD_SLIME_CONVERTS_TO_ELEMENT_3); } if (IS_BD_EXPANDABLE_WALL(properties_element)) @@ -11814,6 +11907,11 @@ static void DrawPropertiesConfig(void) MapCheckbuttonGadget(ED_CHECKBUTTON_ID_BD_WATER_CANNOT_FLOW_DOWN); } + if (properties_element == EL_BD_PNEUMATIC_HAMMER) + { + MapCheckbuttonGadget(ED_CHECKBUTTON_ID_BD_HAMMER_WALLS_REAPPEAR); + } + if (properties_element == EL_BD_NUT) { MapDrawingArea(ED_DRAWING_ID_BD_NUT_CONTENT);