/* values for the setting windows */
#define ED_SETTINGS_XPOS (MINI_TILEX + 8)
-#define ED_SETTINGS2_XPOS MINI_TILEX
+#define ED_SETTINGS_XPOS2 (3 * MINI_TILEX + 8)
#define ED_SETTINGS_YPOS MINI_TILEY
+#define ED_SETTINGS2_XPOS MINI_TILEX
#define ED_SETTINGS2_YPOS (ED_SETTINGS_YPOS + 12 * TILEY - 2)
/* values for counter gadgets */
-#define ED_COUNT_ELEM_SCORE_XPOS ED_SETTINGS_XPOS
-#define ED_COUNT_ELEM_SCORE_YPOS (14 * MINI_TILEY)
-#define ED_COUNT_ELEM_CONTENT_XPOS ED_SETTINGS_XPOS
-#define ED_COUNT_ELEM_CONTENT_YPOS (19 * MINI_TILEY)
+#define ED_COUNT_ELEMENT_SCORE_XPOS ED_SETTINGS_XPOS
+#define ED_COUNT_ELEMENT_SCORE_YPOS (11 * MINI_TILEY)
+#define ED_COUNT_ELEMENT_CONTENT_XPOS ED_SETTINGS_XPOS
+#define ED_COUNT_ELEMENT_CONTENT_YPOS (19 * MINI_TILEY)
+
+#define ED_COUNT_CHANGE_DELAY_XPOS (ED_SETTINGS_XPOS2 + 9 * MINI_TILEX)
#define ED_COUNTER_YSTART (ED_SETTINGS_YPOS + 2 * TILEY)
#define ED_COUNTER_YDISTANCE (3 * MINI_TILEY)
#define ED_AREA_ELEM_CONTENT_XPOS ( 2 * MINI_TILEX)
#define ED_AREA_ELEM_CONTENT_YPOS (22 * MINI_TILEY)
-#define ED_AREA_ELEM_CONTENT2_XPOS ( 2 * MINI_TILEX)
-#define ED_AREA_ELEM_CONTENT2_YPOS (28 * MINI_TILEY)
+#define ED_AREA_ELEM_CONTENT2_XPOS (20 * MINI_TILEX)
+#define ED_AREA_ELEM_CONTENT2_YPOS ED_COUNTER_YPOS2(4)
/* values for random placement background drawing area */
#define ED_AREA_RANDOM_BACKGROUND_XPOS (29 * MINI_TILEX)
/* counter button identifiers */
#define GADGET_ID_COUNTER_FIRST (GADGET_ID_TOOLBOX_FIRST + 22)
-#define GADGET_ID_ELEM_SCORE_DOWN (GADGET_ID_COUNTER_FIRST + 0)
-#define GADGET_ID_ELEM_SCORE_TEXT (GADGET_ID_COUNTER_FIRST + 1)
-#define GADGET_ID_ELEM_SCORE_UP (GADGET_ID_COUNTER_FIRST + 2)
-#define GADGET_ID_ELEM_CONTENT_DOWN (GADGET_ID_COUNTER_FIRST + 3)
-#define GADGET_ID_ELEM_CONTENT_TEXT (GADGET_ID_COUNTER_FIRST + 4)
-#define GADGET_ID_ELEM_CONTENT_UP (GADGET_ID_COUNTER_FIRST + 5)
-#define GADGET_ID_LEVEL_XSIZE_DOWN (GADGET_ID_COUNTER_FIRST + 6)
-#define GADGET_ID_LEVEL_XSIZE_TEXT (GADGET_ID_COUNTER_FIRST + 7)
-#define GADGET_ID_LEVEL_XSIZE_UP (GADGET_ID_COUNTER_FIRST + 8)
-#define GADGET_ID_LEVEL_YSIZE_DOWN (GADGET_ID_COUNTER_FIRST + 9)
-#define GADGET_ID_LEVEL_YSIZE_TEXT (GADGET_ID_COUNTER_FIRST + 10)
-#define GADGET_ID_LEVEL_YSIZE_UP (GADGET_ID_COUNTER_FIRST + 11)
-#define GADGET_ID_LEVEL_RANDOM_DOWN (GADGET_ID_COUNTER_FIRST + 12)
-#define GADGET_ID_LEVEL_RANDOM_TEXT (GADGET_ID_COUNTER_FIRST + 13)
-#define GADGET_ID_LEVEL_RANDOM_UP (GADGET_ID_COUNTER_FIRST + 14)
-#define GADGET_ID_LEVEL_COLLECT_DOWN (GADGET_ID_COUNTER_FIRST + 15)
-#define GADGET_ID_LEVEL_COLLECT_TEXT (GADGET_ID_COUNTER_FIRST + 16)
-#define GADGET_ID_LEVEL_COLLECT_UP (GADGET_ID_COUNTER_FIRST + 17)
-#define GADGET_ID_LEVEL_TIMELIMIT_DOWN (GADGET_ID_COUNTER_FIRST + 18)
-#define GADGET_ID_LEVEL_TIMELIMIT_TEXT (GADGET_ID_COUNTER_FIRST + 19)
-#define GADGET_ID_LEVEL_TIMELIMIT_UP (GADGET_ID_COUNTER_FIRST + 20)
-#define GADGET_ID_LEVEL_TIMESCORE_DOWN (GADGET_ID_COUNTER_FIRST + 21)
-#define GADGET_ID_LEVEL_TIMESCORE_TEXT (GADGET_ID_COUNTER_FIRST + 22)
-#define GADGET_ID_LEVEL_TIMESCORE_UP (GADGET_ID_COUNTER_FIRST + 23)
-#define GADGET_ID_SELECT_LEVEL_DOWN (GADGET_ID_COUNTER_FIRST + 24)
-#define GADGET_ID_SELECT_LEVEL_TEXT (GADGET_ID_COUNTER_FIRST + 25)
-#define GADGET_ID_SELECT_LEVEL_UP (GADGET_ID_COUNTER_FIRST + 26)
+#define GADGET_ID_SELECT_LEVEL_DOWN (GADGET_ID_COUNTER_FIRST + 0)
+#define GADGET_ID_SELECT_LEVEL_TEXT (GADGET_ID_COUNTER_FIRST + 1)
+#define GADGET_ID_SELECT_LEVEL_UP (GADGET_ID_COUNTER_FIRST + 2)
+#define GADGET_ID_LEVEL_XSIZE_DOWN (GADGET_ID_COUNTER_FIRST + 3)
+#define GADGET_ID_LEVEL_XSIZE_TEXT (GADGET_ID_COUNTER_FIRST + 4)
+#define GADGET_ID_LEVEL_XSIZE_UP (GADGET_ID_COUNTER_FIRST + 5)
+#define GADGET_ID_LEVEL_YSIZE_DOWN (GADGET_ID_COUNTER_FIRST + 6)
+#define GADGET_ID_LEVEL_YSIZE_TEXT (GADGET_ID_COUNTER_FIRST + 7)
+#define GADGET_ID_LEVEL_YSIZE_UP (GADGET_ID_COUNTER_FIRST + 8)
+#define GADGET_ID_LEVEL_RANDOM_DOWN (GADGET_ID_COUNTER_FIRST + 9)
+#define GADGET_ID_LEVEL_RANDOM_TEXT (GADGET_ID_COUNTER_FIRST + 10)
+#define GADGET_ID_LEVEL_RANDOM_UP (GADGET_ID_COUNTER_FIRST + 11)
+#define GADGET_ID_LEVEL_COLLECT_DOWN (GADGET_ID_COUNTER_FIRST + 12)
+#define GADGET_ID_LEVEL_COLLECT_TEXT (GADGET_ID_COUNTER_FIRST + 13)
+#define GADGET_ID_LEVEL_COLLECT_UP (GADGET_ID_COUNTER_FIRST + 14)
+#define GADGET_ID_LEVEL_TIMELIMIT_DOWN (GADGET_ID_COUNTER_FIRST + 15)
+#define GADGET_ID_LEVEL_TIMELIMIT_TEXT (GADGET_ID_COUNTER_FIRST + 16)
+#define GADGET_ID_LEVEL_TIMELIMIT_UP (GADGET_ID_COUNTER_FIRST + 17)
+#define GADGET_ID_LEVEL_TIMESCORE_DOWN (GADGET_ID_COUNTER_FIRST + 18)
+#define GADGET_ID_LEVEL_TIMESCORE_TEXT (GADGET_ID_COUNTER_FIRST + 19)
+#define GADGET_ID_LEVEL_TIMESCORE_UP (GADGET_ID_COUNTER_FIRST + 20)
+#define GADGET_ID_ELEMENT_SCORE_DOWN (GADGET_ID_COUNTER_FIRST + 21)
+#define GADGET_ID_ELEMENT_SCORE_TEXT (GADGET_ID_COUNTER_FIRST + 22)
+#define GADGET_ID_ELEMENT_SCORE_UP (GADGET_ID_COUNTER_FIRST + 23)
+#define GADGET_ID_ELEMENT_CONTENT_DOWN (GADGET_ID_COUNTER_FIRST + 24)
+#define GADGET_ID_ELEMENT_CONTENT_TEXT (GADGET_ID_COUNTER_FIRST + 25)
+#define GADGET_ID_ELEMENT_CONTENT_UP (GADGET_ID_COUNTER_FIRST + 26)
+#define GADGET_ID_CHANGE_DELAY_FIX_DOWN (GADGET_ID_COUNTER_FIRST + 27)
+#define GADGET_ID_CHANGE_DELAY_FIX_TEXT (GADGET_ID_COUNTER_FIRST + 28)
+#define GADGET_ID_CHANGE_DELAY_FIX_UP (GADGET_ID_COUNTER_FIRST + 29)
+#define GADGET_ID_CHANGE_DELAY_RND_DOWN (GADGET_ID_COUNTER_FIRST + 30)
+#define GADGET_ID_CHANGE_DELAY_RND_TEXT (GADGET_ID_COUNTER_FIRST + 31)
+#define GADGET_ID_CHANGE_DELAY_RND_UP (GADGET_ID_COUNTER_FIRST + 32)
/* drawing area identifiers */
-#define GADGET_ID_DRAWING_AREA_FIRST (GADGET_ID_COUNTER_FIRST + 27)
+#define GADGET_ID_DRAWING_AREA_FIRST (GADGET_ID_COUNTER_FIRST + 33)
#define GADGET_ID_DRAWING_LEVEL (GADGET_ID_DRAWING_AREA_FIRST + 0)
-#define GADGET_ID_ELEM_CONTENT_0 (GADGET_ID_DRAWING_AREA_FIRST + 1)
-#define GADGET_ID_ELEM_CONTENT_1 (GADGET_ID_DRAWING_AREA_FIRST + 2)
-#define GADGET_ID_ELEM_CONTENT_2 (GADGET_ID_DRAWING_AREA_FIRST + 3)
-#define GADGET_ID_ELEM_CONTENT_3 (GADGET_ID_DRAWING_AREA_FIRST + 4)
-#define GADGET_ID_ELEM_CONTENT_4 (GADGET_ID_DRAWING_AREA_FIRST + 5)
-#define GADGET_ID_ELEM_CONTENT_5 (GADGET_ID_DRAWING_AREA_FIRST + 6)
-#define GADGET_ID_ELEM_CONTENT_6 (GADGET_ID_DRAWING_AREA_FIRST + 7)
-#define GADGET_ID_ELEM_CONTENT_7 (GADGET_ID_DRAWING_AREA_FIRST + 8)
+#define GADGET_ID_ELEMENT_CONTENT_0 (GADGET_ID_DRAWING_AREA_FIRST + 1)
+#define GADGET_ID_ELEMENT_CONTENT_1 (GADGET_ID_DRAWING_AREA_FIRST + 2)
+#define GADGET_ID_ELEMENT_CONTENT_2 (GADGET_ID_DRAWING_AREA_FIRST + 3)
+#define GADGET_ID_ELEMENT_CONTENT_3 (GADGET_ID_DRAWING_AREA_FIRST + 4)
+#define GADGET_ID_ELEMENT_CONTENT_4 (GADGET_ID_DRAWING_AREA_FIRST + 5)
+#define GADGET_ID_ELEMENT_CONTENT_5 (GADGET_ID_DRAWING_AREA_FIRST + 6)
+#define GADGET_ID_ELEMENT_CONTENT_6 (GADGET_ID_DRAWING_AREA_FIRST + 7)
+#define GADGET_ID_ELEMENT_CONTENT_7 (GADGET_ID_DRAWING_AREA_FIRST + 8)
#define GADGET_ID_AMOEBA_CONTENT (GADGET_ID_DRAWING_AREA_FIRST + 9)
#define GADGET_ID_CUSTOM_CHANGED (GADGET_ID_DRAWING_AREA_FIRST + 10)
#define GADGET_ID_RANDOM_BACKGROUND (GADGET_ID_DRAWING_AREA_FIRST + 11)
/* textbutton identifiers */
#define GADGET_ID_TEXTBUTTON_FIRST (GADGET_ID_SELECTBOX_FIRST + 1)
-#define GADGET_ID_PROPERTIES_MAIN (GADGET_ID_TEXTBUTTON_FIRST + 0)
-#define GADGET_ID_PROPERTIES_INFO (GADGET_ID_TEXTBUTTON_FIRST + 1)
+#define GADGET_ID_PROPERTIES_INFO (GADGET_ID_TEXTBUTTON_FIRST + 0)
+#define GADGET_ID_PROPERTIES_CONFIG (GADGET_ID_TEXTBUTTON_FIRST + 1)
#define GADGET_ID_PROPERTIES_ADVANCED (GADGET_ID_TEXTBUTTON_FIRST + 2)
/* gadgets for scrolling of drawing area */
#define GADGET_ID_STICK_ELEMENT (GADGET_ID_CHECKBUTTON_FIRST + 5)
#define GADGET_ID_EM_SLIPPERY_GEMS (GADGET_ID_CHECKBUTTON_FIRST + 6)
#define GADGET_ID_CUSTOM_INDESTRUCTIBLE (GADGET_ID_CHECKBUTTON_FIRST + 7)
-#define GADGET_ID_CUSTOM_CAN_FALL (GADGET_ID_CHECKBUTTON_FIRST + 8)
-#define GADGET_ID_CUSTOM_CAN_SMASH (GADGET_ID_CHECKBUTTON_FIRST + 9)
+#define GADGET_ID_CUSTOM_DIGGABLE (GADGET_ID_CHECKBUTTON_FIRST + 8)
+#define GADGET_ID_CUSTOM_COLLECTIBLE (GADGET_ID_CHECKBUTTON_FIRST + 9)
#define GADGET_ID_CUSTOM_PUSHABLE (GADGET_ID_CHECKBUTTON_FIRST + 10)
-#define GADGET_ID_CUSTOM_SLIPPERY (GADGET_ID_CHECKBUTTON_FIRST + 11)
+#define GADGET_ID_CUSTOM_CAN_FALL (GADGET_ID_CHECKBUTTON_FIRST + 11)
+#define GADGET_ID_CUSTOM_CAN_SMASH (GADGET_ID_CHECKBUTTON_FIRST + 12)
+#define GADGET_ID_CUSTOM_CAN_MOVE (GADGET_ID_CHECKBUTTON_FIRST + 13)
+#define GADGET_ID_CUSTOM_SLIPPERY (GADGET_ID_CHECKBUTTON_FIRST + 14)
+#define GADGET_ID_CUSTOM_WALKABLE_OVER (GADGET_ID_CHECKBUTTON_FIRST + 15)
+#define GADGET_ID_CUSTOM_WALKABLE_INSIDE (GADGET_ID_CHECKBUTTON_FIRST+ 16)
+#define GADGET_ID_CUSTOM_WALKABLE_UNDER (GADGET_ID_CHECKBUTTON_FIRST + 17)
+#define GADGET_ID_CUSTOM_CHANGEABLE (GADGET_ID_CHECKBUTTON_FIRST + 18)
+#define GADGET_ID_CHANGE_DELAY_FIXED (GADGET_ID_CHECKBUTTON_FIRST + 19)
+#define GADGET_ID_CHANGE_DELAY_RANDOM (GADGET_ID_CHECKBUTTON_FIRST + 20)
/* gadgets for buttons in element list */
-#define GADGET_ID_ELEMENTLIST_FIRST (GADGET_ID_CHECKBUTTON_FIRST + 12)
+#define GADGET_ID_ELEMENTLIST_FIRST (GADGET_ID_CHECKBUTTON_FIRST + 21)
#define GADGET_ID_ELEMENTLIST_LAST (GADGET_ID_ELEMENTLIST_FIRST + \
ED_NUM_ELEMENTLIST_BUTTONS - 1)
#define RADIO_NR_RANDOM_ELEMENTS 2
/* values for counter gadgets */
-#define ED_COUNTER_ID_ELEM_SCORE 0
-#define ED_COUNTER_ID_ELEM_CONTENT 1
-#define ED_COUNTER_ID_LEVEL_XSIZE 2
-#define ED_COUNTER_ID_LEVEL_YSIZE 3
-#define ED_COUNTER_ID_LEVEL_COLLECT 4
-#define ED_COUNTER_ID_LEVEL_TIMELIMIT 5
-#define ED_COUNTER_ID_LEVEL_TIMESCORE 6
-#define ED_COUNTER_ID_LEVEL_RANDOM 7
-#define ED_COUNTER_ID_SELECT_LEVEL 8
-
-#define ED_NUM_COUNTERBUTTONS 9
+#define ED_COUNTER_ID_SELECT_LEVEL 0
+#define ED_COUNTER_ID_LEVEL_XSIZE 1
+#define ED_COUNTER_ID_LEVEL_YSIZE 2
+#define ED_COUNTER_ID_LEVEL_COLLECT 3
+#define ED_COUNTER_ID_LEVEL_TIMELIMIT 4
+#define ED_COUNTER_ID_LEVEL_TIMESCORE 5
+#define ED_COUNTER_ID_LEVEL_RANDOM 6
+#define ED_COUNTER_ID_ELEMENT_SCORE 7
+#define ED_COUNTER_ID_ELEMENT_CONTENT 8
+#define ED_COUNTER_ID_CHANGE_DELAY_FIX 9
+#define ED_COUNTER_ID_CHANGE_DELAY_RND 10
+
+#define ED_NUM_COUNTERBUTTONS 11
#define ED_COUNTER_ID_LEVEL_FIRST ED_COUNTER_ID_LEVEL_XSIZE
#define ED_COUNTER_ID_LEVEL_LAST ED_COUNTER_ID_LEVEL_RANDOM
+#define ED_COUNTER_ID_CHANGE_FIRST ED_COUNTER_ID_CHANGE_DELAY_FIX
+#define ED_COUNTER_ID_CHANGE_LAST ED_COUNTER_ID_CHANGE_DELAY_RND
+
/* values for scrollbutton gadgets */
#define ED_SCROLLBUTTON_ID_AREA_UP 0
#define ED_SCROLLBUTTON_ID_AREA_DOWN 1
#define ED_NUM_SELECTBOX 1
/* values for textbutton gadgets */
-#define ED_TEXTBUTTON_ID_PROPERTIES_MAIN 0
-#define ED_TEXTBUTTON_ID_PROPERTIES_INFO 1
+#define ED_TEXTBUTTON_ID_PROPERTIES_INFO 0
+#define ED_TEXTBUTTON_ID_PROPERTIES_CONFIG 1
#define ED_TEXTBUTTON_ID_PROPERTIES_ADVANCED 2
#define ED_NUM_TEXTBUTTON 3
#define ED_CHECKBUTTON_ID_STICK_ELEMENT 3
#define ED_CHECKBUTTON_ID_EM_SLIPPERY_GEMS 4
#define ED_CHECKBUTTON_ID_CUSTOM_INDESTRUCTIBLE 5
-#define ED_CHECKBUTTON_ID_CUSTOM_CAN_FALL 6
-#define ED_CHECKBUTTON_ID_CUSTOM_CAN_SMASH 7
+#define ED_CHECKBUTTON_ID_CUSTOM_DIGGABLE 6
+#define ED_CHECKBUTTON_ID_CUSTOM_COLLECTIBLE 7
#define ED_CHECKBUTTON_ID_CUSTOM_PUSHABLE 8
-#define ED_CHECKBUTTON_ID_CUSTOM_SLIPPERY 9
-
-#define ED_NUM_CHECKBUTTONS 10
+#define ED_CHECKBUTTON_ID_CUSTOM_CAN_FALL 9
+#define ED_CHECKBUTTON_ID_CUSTOM_CAN_SMASH 10
+#define ED_CHECKBUTTON_ID_CUSTOM_CAN_MOVE 11
+#define ED_CHECKBUTTON_ID_CUSTOM_SLIPPERY 12
+#define ED_CHECKBUTTON_ID_CUSTOM_WALKABLE_OVER 13
+#define ED_CHECKBUTTON_ID_CUSTOM_WALKABLE_INSIDE 14
+#define ED_CHECKBUTTON_ID_CUSTOM_WALKABLE_UNDER 15
+#define ED_CHECKBUTTON_ID_CUSTOM_CHANGEABLE 16
+#define ED_CHECKBUTTON_ID_CHANGE_DELAY_FIXED 17
+#define ED_CHECKBUTTON_ID_CHANGE_DELAY_RANDOM 18
+
+#define ED_NUM_CHECKBUTTONS 19
#define ED_CHECKBUTTON_ID_LEVEL_FIRST ED_CHECKBUTTON_ID_DOUBLE_SPEED
#define ED_CHECKBUTTON_ID_LEVEL_LAST ED_CHECKBUTTON_ID_RANDOM_RESTRICTED
#define ED_CHECKBUTTON_ID_CUSTOM_FIRST ED_CHECKBUTTON_ID_CUSTOM_INDESTRUCTIBLE
-#define ED_CHECKBUTTON_ID_CUSTOM_LAST ED_CHECKBUTTON_ID_CUSTOM_SLIPPERY
+#define ED_CHECKBUTTON_ID_CUSTOM_LAST ED_CHECKBUTTON_ID_CUSTOM_WALKABLE_UNDER
+
+#define ED_CHECKBUTTON_ID_CHANGE_FIRST ED_CHECKBUTTON_ID_CUSTOM_CHANGEABLE
+#define ED_CHECKBUTTON_ID_CHANGE_LAST ED_CHECKBUTTON_ID_CHANGE_DELAY_RANDOM
/* values for radiobutton gadgets */
#define ED_RADIOBUTTON_ID_PERCENTAGE 0
#define ED_MODE_PROPERTIES 2
/* sub-screens in the element properties section */
-#define ED_MODE_PROPERTIES_MAIN ED_TEXTBUTTON_ID_PROPERTIES_MAIN
#define ED_MODE_PROPERTIES_INFO ED_TEXTBUTTON_ID_PROPERTIES_INFO
+#define ED_MODE_PROPERTIES_CONFIG ED_TEXTBUTTON_ID_PROPERTIES_CONFIG
#define ED_MODE_PROPERTIES_ADVANCED ED_TEXTBUTTON_ID_PROPERTIES_ADVANCED
/* how many steps can be cancelled */
static int random_placement_background_element = EL_SAND;
static boolean random_placement_background_restricted = FALSE;
static boolean stick_element_properties_window = FALSE;
-
-static struct
-{
- boolean indestructible;
- boolean can_fall;
- boolean can_smash;
- boolean pushable;
- boolean slippery;
-} custom_element_properties[NUM_CUSTOM_ELEMENTS];
+static boolean custom_element_properties[NUM_ELEMENT_PROPERTIES];
+static boolean custom_element_changes[42];
+static int custom_element_change_delay[2];
static struct
{
} counterbutton_info[ED_NUM_COUNTERBUTTONS] =
{
{
- ED_COUNT_ELEM_SCORE_XPOS, ED_COUNT_ELEM_SCORE_YPOS,
- MIN_SCORE, MAX_SCORE,
- GADGET_ID_ELEM_SCORE_DOWN, GADGET_ID_ELEM_SCORE_UP,
- GADGET_ID_ELEM_SCORE_TEXT,
- NULL, /* will be set when used */
- "element score", NULL
- },
- {
- ED_COUNT_ELEM_CONTENT_XPOS, ED_COUNT_ELEM_CONTENT_YPOS,
- MIN_ELEMENT_CONTENTS, MAX_ELEMENT_CONTENTS,
- GADGET_ID_ELEM_CONTENT_DOWN, GADGET_ID_ELEM_CONTENT_UP,
- GADGET_ID_ELEM_CONTENT_TEXT,
- &level.num_yam_contents,
- "element content", NULL
+ DX + 5 - SX, DY + 3 - SY,
+ 1, 100,
+ GADGET_ID_SELECT_LEVEL_DOWN, GADGET_ID_SELECT_LEVEL_UP,
+ GADGET_ID_SELECT_LEVEL_TEXT,
+ &level_nr,
+ NULL, NULL
},
{
ED_SETTINGS_XPOS, ED_COUNTER_YPOS(2),
0, 255,
GADGET_ID_LEVEL_TIMESCORE_DOWN, GADGET_ID_LEVEL_TIMESCORE_UP,
GADGET_ID_LEVEL_TIMESCORE_TEXT,
- &level.score[SC_ZEITBONUS],
+ &level.score[SC_TIME_BONUS],
"score for each 10 seconds left", NULL
},
{
"random element placement", "in"
},
{
- DX + 5 - SX, DY + 3 - SY,
- 1, 100,
- GADGET_ID_SELECT_LEVEL_DOWN, GADGET_ID_SELECT_LEVEL_UP,
- GADGET_ID_SELECT_LEVEL_TEXT,
- &level_nr,
- NULL, NULL
+ ED_COUNT_ELEMENT_SCORE_XPOS, ED_COUNT_ELEMENT_SCORE_YPOS,
+ MIN_SCORE, MAX_SCORE,
+ GADGET_ID_ELEMENT_SCORE_DOWN, GADGET_ID_ELEMENT_SCORE_UP,
+ GADGET_ID_ELEMENT_SCORE_TEXT,
+ NULL, /* will be set when used */
+ "element score", NULL
+ },
+ {
+ ED_COUNT_ELEMENT_CONTENT_XPOS, ED_COUNT_ELEMENT_CONTENT_YPOS,
+ MIN_ELEMENT_CONTENTS, MAX_ELEMENT_CONTENTS,
+ GADGET_ID_ELEMENT_CONTENT_DOWN, GADGET_ID_ELEMENT_CONTENT_UP,
+ GADGET_ID_ELEMENT_CONTENT_TEXT,
+ &level.num_yam_contents,
+ "element content", NULL
+ },
+ {
+ ED_COUNT_CHANGE_DELAY_XPOS, ED_COUNTER_YPOS2(5),
+ 0, 999,
+ GADGET_ID_CHANGE_DELAY_FIX_DOWN, GADGET_ID_CHANGE_DELAY_FIX_UP,
+ GADGET_ID_CHANGE_DELAY_FIX_TEXT,
+ &custom_element_change_delay[0],
+ NULL, "frames (fixed)"
+ },
+ {
+ ED_COUNT_CHANGE_DELAY_XPOS, ED_COUNTER_YPOS2(6),
+ 0, 999,
+ GADGET_ID_CHANGE_DELAY_RND_DOWN, GADGET_ID_CHANGE_DELAY_RND_UP,
+ GADGET_ID_CHANGE_DELAY_RND_TEXT,
+ &custom_element_change_delay[1],
+ NULL, "frames (random)"
}
};
} selectbox_info[ED_NUM_SELECTBOX] =
{
{
- ED_SETTINGS_XPOS, ED_COUNTER_YPOS(3),
+ ED_SETTINGS_XPOS, ED_COUNTER_YPOS(8),
GADGET_ID_CUSTOM_CHANGE_CAUSE,
17,
options_change_cause, &index_change_cause,
{
{
ED_SETTINGS_XPOS, ED_COUNTER_YPOS(1),
- GADGET_ID_PROPERTIES_MAIN,
- 11, "Properties",
- "Edit element properties"
+ GADGET_ID_PROPERTIES_INFO,
+ 11, "Information",
+ "Show information about element"
},
{
ED_SETTINGS_XPOS + 166, ED_COUNTER_YPOS(1),
- GADGET_ID_PROPERTIES_INFO,
- 11, "Description",
- "Show element description"
+ GADGET_ID_PROPERTIES_CONFIG,
+ 11, "Configure",
+ "Configure element properties"
},
{
ED_SETTINGS_XPOS + 332, ED_COUNTER_YPOS(1),
GADGET_ID_PROPERTIES_ADVANCED,
11, "Advanced",
- "Advanced element features"
+ "Advanced element configuration"
},
};
"slip down from certain flat walls","use EM style slipping behaviour"
},
{
- ED_SETTINGS_XPOS, ED_COUNTER_YPOS2(10),
+ ED_SETTINGS_XPOS, ED_COUNTER_YPOS2(5),
GADGET_ID_CUSTOM_INDESTRUCTIBLE,
- &custom_element_properties[0].indestructible,
+ &custom_element_properties[EP_INDESTRUCTIBLE],
"indestructible", "element cannot be destroyed"
},
{
- ED_SETTINGS_XPOS, ED_COUNTER_YPOS2(11),
+ ED_SETTINGS_XPOS, ED_COUNTER_YPOS2(6),
+ GADGET_ID_CUSTOM_DIGGABLE,
+ &custom_element_properties[EP_DIGGABLE],
+ "diggable", "element can be digged away"
+ },
+ {
+ ED_SETTINGS_XPOS, ED_COUNTER_YPOS2(7),
+ GADGET_ID_CUSTOM_COLLECTIBLE,
+ &custom_element_properties[EP_COLLECTIBLE],
+ "collectible", "element can be collected"
+ },
+ {
+ ED_SETTINGS_XPOS, ED_COUNTER_YPOS2(8),
+ GADGET_ID_CUSTOM_PUSHABLE,
+ &custom_element_properties[EP_PUSHABLE],
+ "pushable", "element can be pushed"
+ },
+ {
+ ED_SETTINGS_XPOS, ED_COUNTER_YPOS2(9),
GADGET_ID_CUSTOM_CAN_FALL,
- &custom_element_properties[0].can_fall,
+ &custom_element_properties[EP_CAN_FALL],
"can fall", "element can fall down"
},
{
- ED_SETTINGS_XPOS, ED_COUNTER_YPOS2(12),
+ ED_SETTINGS_XPOS, ED_COUNTER_YPOS2(10),
GADGET_ID_CUSTOM_CAN_SMASH,
- &custom_element_properties[0].can_smash,
+ &custom_element_properties[EP_CAN_SMASH],
"can smash", "element can smash other elements"
},
{
- ED_SETTINGS_XPOS, ED_COUNTER_YPOS2(13),
- GADGET_ID_CUSTOM_PUSHABLE,
- &custom_element_properties[0].pushable,
- "pushable", "element can be pushed"
+ ED_SETTINGS_XPOS, ED_COUNTER_YPOS2(11),
+ GADGET_ID_CUSTOM_CAN_MOVE,
+ &custom_element_properties[EP_CAN_MOVE],
+ "can move", "element can move in some direction"
},
{
- ED_SETTINGS_XPOS, ED_COUNTER_YPOS2(14),
+ ED_SETTINGS_XPOS, ED_COUNTER_YPOS2(12),
GADGET_ID_CUSTOM_SLIPPERY,
- &custom_element_properties[0].slippery,
+ &custom_element_properties[EP_SLIPPERY],
"slippery", "other elements can fall down from it"
+ },
+ {
+ ED_SETTINGS_XPOS, ED_COUNTER_YPOS2(13),
+ GADGET_ID_CUSTOM_WALKABLE_OVER,
+ &custom_element_properties[EP_WALKABLE_OVER],
+ "player can walk over", "player can walk over this element"
+ },
+ {
+ ED_SETTINGS_XPOS, ED_COUNTER_YPOS2(14),
+ GADGET_ID_CUSTOM_WALKABLE_INSIDE,
+ &custom_element_properties[EP_WALKABLE_INSIDE],
+ "player can walk inside", "player can walk inside this element"
+ },
+ {
+ ED_SETTINGS_XPOS, ED_COUNTER_YPOS2(15),
+ GADGET_ID_CUSTOM_WALKABLE_UNDER,
+ &custom_element_properties[EP_WALKABLE_UNDER],
+ "player can walk under", "player can walk under this element"
+ },
+ {
+ ED_SETTINGS_XPOS, ED_COUNTER_YPOS2(4),
+ GADGET_ID_CUSTOM_CHANGEABLE,
+ &custom_element_properties[EP_CHANGEABLE],
+ "element changes to after:", "element can change to other element"
+ },
+ {
+ ED_SETTINGS_XPOS2, ED_COUNTER_YPOS2(5),
+ GADGET_ID_CHANGE_DELAY_FIXED,
+ &custom_element_changes[0],
+ "delay of", "element changes after fixed delay"
+ },
+ {
+ ED_SETTINGS_XPOS2, ED_COUNTER_YPOS2(6),
+ GADGET_ID_CHANGE_DELAY_RANDOM,
+ &custom_element_changes[1],
+ "delay of", "element changes after random delay"
}
};
int gx = SX + ED_AREA_ELEM_CONTENT_XPOS + 5 * (i % 4) * MINI_TILEX;
int gy = SX + ED_AREA_ELEM_CONTENT_YPOS + 6 * (i / 4) * MINI_TILEY;
- id = GADGET_ID_ELEM_CONTENT_0 + i;
+ id = GADGET_ID_ELEMENT_CONTENT_0 + i;
gi = CreateGadget(GDI_CUSTOM_ID, id,
GDI_CUSTOM_TYPE_ID, i,
GDI_X, gx,
int old_game_status = game_status;
/* setting 'game_status' is needed to get the right fonts for the editor */
- game_status = LEVELED;
+ game_status = GAME_MODE_EDITOR;
ReinitializeElementList();
dst[x][y] = src[x][y];
}
-static void CopyCustomElementPropertiesToEditor()
+static void CopyCustomElementPropertiesToEditor(int element)
{
int i;
- for (i=0; i < NUM_CUSTOM_ELEMENTS; i++)
- {
- int element = EL_CUSTOM_START + i;
- int properties = Properties1[element];
-
- custom_element_properties[i].indestructible =
- ((properties & EP_BIT_INDESTRUCTIBLE) != 0 ? TRUE : FALSE);
-
- custom_element_properties[i].can_fall =
- ((properties & EP_BIT_CAN_FALL) != 0 ? TRUE : FALSE);
-
- custom_element_properties[i].can_smash =
- ((properties & EP_BIT_CAN_SMASH) != 0 ? TRUE : FALSE);
-
- custom_element_properties[i].pushable =
- ((properties & EP_BIT_PUSHABLE) != 0 ? TRUE : FALSE);
-
- custom_element_properties[i].slippery =
- ((properties & EP_BIT_SLIPPERY) != 0 ? TRUE : FALSE);
- }
+ for (i=0; i < NUM_ELEMENT_PROPERTIES; i++)
+ custom_element_properties[i] = HAS_PROPERTY(element, i);
}
-static void CopyCustomElementPropertiesToGame()
+static void CopyCustomElementPropertiesToGame(int element)
{
int i;
- for (i=0; i < NUM_CUSTOM_ELEMENTS; i++)
- {
- int element = EL_CUSTOM_START + i;
-
- Properties1[element] = EP_BITMASK_DEFAULT;
-
- if (custom_element_properties[i].indestructible)
- Properties1[element] |= EP_BIT_INDESTRUCTIBLE;
- else
- Properties1[element] &= ~EP_BIT_INDESTRUCTIBLE;
-
- if (custom_element_properties[i].can_fall)
- Properties1[element] |= EP_BIT_CAN_FALL;
- else
- Properties1[element] &= ~EP_BIT_CAN_FALL;
-
- if (custom_element_properties[i].can_smash)
- Properties1[element] |= EP_BIT_CAN_SMASH;
- else
- Properties1[element] &= ~EP_BIT_CAN_SMASH;
-
- if (custom_element_properties[i].pushable)
- Properties1[element] |= EP_BIT_PUSHABLE;
- else
- Properties1[element] &= ~EP_BIT_PUSHABLE;
-
- if (custom_element_properties[i].slippery)
- Properties1[element] |= EP_BIT_SLIPPERY;
- else
- Properties1[element] &= ~EP_BIT_SLIPPERY;
- }
+ for (i=0; i < NUM_ELEMENT_PROPERTIES; i++)
+ SET_PROPERTY(element, i, custom_element_properties[i]);
}
void DrawLevelEd()
else
{
edit_mode = ED_MODE_DRAWING;
- edit_mode_properties = ED_MODE_PROPERTIES_MAIN;
+ edit_mode_properties = ED_MODE_PROPERTIES_INFO;
ResetUndoBuffer();
DrawRandomPlacementBackgroundArea();
}
-static void DrawPropertiesTabulatorGadgets()
-{
- struct GadgetInfo *gd_gi = level_editor_gadget[GADGET_ID_PROPERTIES_MAIN];
- struct GadgetDesign *gd = &gd_gi->alt_design[GD_BUTTON_UNPRESSED];
- int gd_x = gd->x + gd_gi->border.width / 2;
- int gd_y = gd->y + gd_gi->height - 1;
- Pixel line_color = GetPixel(gd->bitmap, gd_x, gd_y);
- int id_first = ED_TEXTBUTTON_ID_PROPERTIES_MAIN;
- int id_last = ED_TEXTBUTTON_ID_PROPERTIES_INFO;
- int i;
-
- /* draw additional "advanced" tabulator for custom elements */
- if (IS_CUSTOM_ELEMENT(properties_element))
- id_last = ED_TEXTBUTTON_ID_PROPERTIES_ADVANCED;
-
- for (i=id_first; i <= id_last; i++)
- {
- int gadget_id = textbutton_info[i].gadget_id;
- struct GadgetInfo *gi = level_editor_gadget[gadget_id];
- boolean active = (i != edit_mode_properties);
- Pixel color = (active ? BLACK_PIXEL : line_color);
-
- /* draw solid or black line below tabulator button */
- FillRectangle(drawto, gi->x, gi->y + gi->height, gi->width, 1, color);
-
- ModifyGadget(gi, GDI_ACTIVE, active, GDI_END);
- MapTextbuttonGadget(i);
- }
-
- /* draw little border line below tabulator buttons */
- FillRectangle(drawto, gd_gi->x, gd_gi->y + gd_gi->height + 1,
- 3 * gd_gi->width + 2 * ED_GADGET_DISTANCE, ED_GADGET_DISTANCE,
- line_color);
-
-#if 0
- SX + ED_SETTINGS_XPOS,
- SY + ED_COUNTER_YPOS(1) + ED_TEXTBUTTON_YSIZE + 1,
- SXSIZE - 2 * ED_SETTINGS_XPOS, 2, line_color);
-#endif
-}
-
static void DrawAmoebaContentArea()
{
int area_x = ED_AREA_ELEM_CONTENT_XPOS / MINI_TILEX;
static void DrawCustomChangedArea()
{
- int area_x = ED_AREA_ELEM_CONTENT2_XPOS / MINI_TILEX;
- int area_y = ED_AREA_ELEM_CONTENT2_YPOS / MINI_TILEY;
- int area_sx = SX + ED_AREA_ELEM_CONTENT2_XPOS;
- int area_sy = SY + ED_AREA_ELEM_CONTENT2_YPOS;
- int i = properties_element - EL_CUSTOM_START;
+#if 0
+ int xoffset_right2 = ED_CHECKBUTTON_XSIZE + 2 * ED_GADGET_DISTANCE;
+ int yoffset_right2 = ED_BORDER_SIZE;
+ int i = ED_CHECKBUTTON_ID_CUSTOM_CHANGEABLE;
+ int text_len = strlen(checkbutton_info[i].text);
+ int text_width = text_len * getFontWidth(FONT_TEXT_1);
+ int xpos = checkbutton_info[i].x + 2 * xoffset_right2 + text_width;
+ int ypos = checkbutton_info[i].y + yoffset_right2;
+#else
+ int xpos = ED_AREA_ELEM_CONTENT2_XPOS;
+ int ypos = ED_AREA_ELEM_CONTENT2_YPOS;
+#endif
+ int area_x = xpos / MINI_TILEX;
+ int area_y = ypos / MINI_TILEY;
+ int area_sx = SX + xpos;
+ int area_sy = SY + ypos;
+ int element = properties_element - EL_CUSTOM_START;
if (!IS_CUSTOM_ELEMENT(properties_element))
{
return;
}
- ElementContent[0][0][0] = level.custom_element_successor[i];
+ ElementContent[0][0][0] = level.custom_element_successor[element];
DrawElementBorder(area_sx, area_sy, MINI_TILEX, MINI_TILEY);
DrawMiniElement(area_x, area_y, ElementContent[0][0][0]);
+#if 0
DrawText(area_sx + TILEX, area_sy + 1, "Element after change", FONT_TEXT_1);
+#endif
MapDrawingArea(GADGET_ID_CUSTOM_CHANGED);
}
static void DrawElementContentAreas()
{
- int counter_id = ED_COUNTER_ID_ELEM_CONTENT;
+ int counter_id = ED_COUNTER_ID_ELEMENT_CONTENT;
int area_x = ED_AREA_ELEM_CONTENT_XPOS / MINI_TILEX;
int area_y = ED_AREA_ELEM_CONTENT_YPOS / MINI_TILEY;
int area_sx = SX + ED_AREA_ELEM_CONTENT_XPOS;
ElementContent[i][x][y] = level.yam_content[i][x][y];
for (i=0; i<MAX_ELEMENT_CONTENTS; i++)
- UnmapDrawingArea(GADGET_ID_ELEM_CONTENT_0 + i);
+ UnmapDrawingArea(GADGET_ID_ELEMENT_CONTENT_0 + i);
/* display counter to choose number of element content areas */
x = counterbutton_info[counter_id].x + xoffset_right;
}
for (i=0; i<level.num_yam_contents; i++)
- MapDrawingArea(GADGET_ID_ELEM_CONTENT_0 + i);
+ MapDrawingArea(GADGET_ID_ELEMENT_CONTENT_0 + i);
}
#define TEXT_COLLECTING "Score for collecting"
#define TEXT_SPEED "Speed of amoeba growth"
#define TEXT_DURATION "Duration when activated"
-static void DrawPropertiesMain()
+static struct
{
- int counter_id = ED_COUNTER_ID_ELEM_SCORE;
- int num_elements_in_level;
- float percentage;
+ int element;
+ int *value;
+ char *text;
+} elements_with_counter[] =
+{
+ { EL_EMERALD, &level.score[SC_EMERALD], TEXT_COLLECTING },
+ { EL_BD_DIAMOND, &level.score[SC_EMERALD], TEXT_COLLECTING },
+ { EL_EMERALD_YELLOW, &level.score[SC_EMERALD], TEXT_COLLECTING },
+ { EL_EMERALD_RED, &level.score[SC_EMERALD], TEXT_COLLECTING },
+ { EL_EMERALD_PURPLE, &level.score[SC_EMERALD], TEXT_COLLECTING },
+ { EL_DIAMOND, &level.score[SC_DIAMOND], TEXT_COLLECTING },
+ { EL_BUG_RIGHT, &level.score[SC_BUG], TEXT_SMASHING },
+ { EL_BUG_UP, &level.score[SC_BUG], TEXT_SMASHING },
+ { EL_BUG_LEFT, &level.score[SC_BUG], TEXT_SMASHING },
+ { EL_BUG_DOWN, &level.score[SC_BUG], TEXT_SMASHING },
+ { EL_BD_BUTTERFLY_RIGHT,&level.score[SC_BUG], TEXT_SMASHING },
+ { EL_BD_BUTTERFLY_UP, &level.score[SC_BUG], TEXT_SMASHING },
+ { EL_BD_BUTTERFLY_LEFT, &level.score[SC_BUG], TEXT_SMASHING },
+ { EL_BD_BUTTERFLY_DOWN, &level.score[SC_BUG], TEXT_SMASHING },
+ { EL_SPACESHIP_RIGHT, &level.score[SC_SPACESHIP], TEXT_SMASHING },
+ { EL_SPACESHIP_UP, &level.score[SC_SPACESHIP], TEXT_SMASHING },
+ { EL_SPACESHIP_LEFT, &level.score[SC_SPACESHIP], TEXT_SMASHING },
+ { EL_SPACESHIP_DOWN, &level.score[SC_SPACESHIP], TEXT_SMASHING },
+ { EL_BD_FIREFLY_RIGHT,&level.score[SC_SPACESHIP], TEXT_SMASHING },
+ { EL_BD_FIREFLY_UP, &level.score[SC_SPACESHIP], TEXT_SMASHING },
+ { EL_BD_FIREFLY_LEFT, &level.score[SC_SPACESHIP], TEXT_SMASHING },
+ { EL_BD_FIREFLY_DOWN, &level.score[SC_SPACESHIP], TEXT_SMASHING },
+ { EL_YAMYAM, &level.score[SC_YAMYAM], TEXT_SMASHING },
+ { EL_DARK_YAMYAM, &level.score[SC_YAMYAM], TEXT_SMASHING },
+ { EL_ROBOT, &level.score[SC_ROBOT], TEXT_SMASHING },
+ { EL_PACMAN_RIGHT, &level.score[SC_PACMAN], TEXT_SMASHING },
+ { EL_PACMAN_UP, &level.score[SC_PACMAN], TEXT_SMASHING },
+ { EL_PACMAN_LEFT, &level.score[SC_PACMAN], TEXT_SMASHING },
+ { EL_PACMAN_DOWN, &level.score[SC_PACMAN], TEXT_SMASHING },
+ { EL_NUT, &level.score[SC_NUT], TEXT_CRACKING },
+ { EL_DYNAMITE, &level.score[SC_DYNAMITE], TEXT_COLLECTING },
+ { EL_KEY_1, &level.score[SC_KEY], TEXT_COLLECTING },
+ { EL_KEY_2, &level.score[SC_KEY], TEXT_COLLECTING },
+ { EL_KEY_3, &level.score[SC_KEY], TEXT_COLLECTING },
+ { EL_KEY_4, &level.score[SC_KEY], TEXT_COLLECTING },
+ { EL_EM_KEY_1_FILE, &level.score[SC_KEY], TEXT_COLLECTING },
+ { EL_EM_KEY_2_FILE, &level.score[SC_KEY], TEXT_COLLECTING },
+ { EL_EM_KEY_3_FILE, &level.score[SC_KEY], TEXT_COLLECTING },
+ { EL_EM_KEY_4_FILE, &level.score[SC_KEY], TEXT_COLLECTING },
+ { EL_AMOEBA_WET, &level.amoeba_speed, TEXT_SPEED },
+ { EL_AMOEBA_DRY, &level.amoeba_speed, TEXT_SPEED },
+ { EL_AMOEBA_FULL, &level.amoeba_speed, TEXT_SPEED },
+ { EL_BD_AMOEBA, &level.amoeba_speed, TEXT_SPEED },
+ { EL_MAGIC_WALL, &level.time_magic_wall, TEXT_DURATION },
+ { EL_ROBOT_WHEEL, &level.time_wheel, TEXT_DURATION },
+ { -1, NULL, NULL }
+};
+
+static boolean checkPropertiesConfig()
+{
+ int i;
+
+ if (IS_GEM(properties_element) ||
+ IS_CUSTOM_ELEMENT(properties_element) ||
+ HAS_CONTENT(properties_element))
+ return TRUE;
+ else
+ for (i=0; elements_with_counter[i].element != -1; i++)
+ if (elements_with_counter[i].element == properties_element)
+ return TRUE;
+
+ return FALSE;
+}
+
+static void DrawPropertiesConfig()
+{
+ boolean element_has_score = FALSE;
+ char *element_score_text = NULL;
+ static int temporary_dummy_score = 0;
+ int counter_id = ED_COUNTER_ID_ELEMENT_SCORE;
int xoffset_right = getCounterGadgetWidth();
int yoffset_right = ED_BORDER_SIZE;
int xoffset_right2 = ED_CHECKBUTTON_XSIZE + 2 * ED_GADGET_DISTANCE;
int yoffset_right2 = ED_BORDER_SIZE;
int i, x, y;
- static struct
- {
- int element;
- int *value;
- char *text;
- } elements_with_counter[] =
- {
- { EL_EMERALD, &level.score[SC_EDELSTEIN], TEXT_COLLECTING },
- { EL_BD_DIAMOND, &level.score[SC_EDELSTEIN], TEXT_COLLECTING },
- { EL_EMERALD_YELLOW,&level.score[SC_EDELSTEIN], TEXT_COLLECTING },
- { EL_EMERALD_RED, &level.score[SC_EDELSTEIN], TEXT_COLLECTING },
- { EL_EMERALD_PURPLE,&level.score[SC_EDELSTEIN], TEXT_COLLECTING },
- { EL_DIAMOND, &level.score[SC_DIAMANT], TEXT_COLLECTING },
- { EL_BUG_RIGHT, &level.score[SC_KAEFER], TEXT_SMASHING },
- { EL_BUG_UP, &level.score[SC_KAEFER], TEXT_SMASHING },
- { EL_BUG_LEFT, &level.score[SC_KAEFER], TEXT_SMASHING },
- { EL_BUG_DOWN, &level.score[SC_KAEFER], TEXT_SMASHING },
- { EL_BD_BUTTERFLY_RIGHT,&level.score[SC_KAEFER], TEXT_SMASHING },
- { EL_BD_BUTTERFLY_UP, &level.score[SC_KAEFER], TEXT_SMASHING },
- { EL_BD_BUTTERFLY_LEFT, &level.score[SC_KAEFER], TEXT_SMASHING },
- { EL_BD_BUTTERFLY_DOWN, &level.score[SC_KAEFER], TEXT_SMASHING },
- { EL_SPACESHIP_RIGHT,&level.score[SC_FLIEGER], TEXT_SMASHING },
- { EL_SPACESHIP_UP, &level.score[SC_FLIEGER], TEXT_SMASHING },
- { EL_SPACESHIP_LEFT, &level.score[SC_FLIEGER], TEXT_SMASHING },
- { EL_SPACESHIP_DOWN, &level.score[SC_FLIEGER], TEXT_SMASHING },
- { EL_BD_FIREFLY_RIGHT,&level.score[SC_FLIEGER], TEXT_SMASHING },
- { EL_BD_FIREFLY_UP, &level.score[SC_FLIEGER], TEXT_SMASHING },
- { EL_BD_FIREFLY_LEFT, &level.score[SC_FLIEGER], TEXT_SMASHING },
- { EL_BD_FIREFLY_DOWN, &level.score[SC_FLIEGER], TEXT_SMASHING },
- { EL_YAMYAM, &level.score[SC_MAMPFER], TEXT_SMASHING },
- { EL_DARK_YAMYAM, &level.score[SC_MAMPFER], TEXT_SMASHING },
- { EL_ROBOT, &level.score[SC_ROBOT], TEXT_SMASHING },
- { EL_PACMAN_RIGHT, &level.score[SC_PACMAN], TEXT_SMASHING },
- { EL_PACMAN_UP, &level.score[SC_PACMAN], TEXT_SMASHING },
- { EL_PACMAN_LEFT, &level.score[SC_PACMAN], TEXT_SMASHING },
- { EL_PACMAN_DOWN, &level.score[SC_PACMAN], TEXT_SMASHING },
- { EL_NUT, &level.score[SC_KOKOSNUSS], TEXT_CRACKING },
- { EL_DYNAMITE, &level.score[SC_DYNAMIT], TEXT_COLLECTING },
- { EL_KEY_1, &level.score[SC_SCHLUESSEL], TEXT_COLLECTING },
- { EL_KEY_2, &level.score[SC_SCHLUESSEL], TEXT_COLLECTING },
- { EL_KEY_3, &level.score[SC_SCHLUESSEL], TEXT_COLLECTING },
- { EL_KEY_4, &level.score[SC_SCHLUESSEL], TEXT_COLLECTING },
- { EL_EM_KEY_1_FILE, &level.score[SC_SCHLUESSEL], TEXT_COLLECTING },
- { EL_EM_KEY_2_FILE, &level.score[SC_SCHLUESSEL], TEXT_COLLECTING },
- { EL_EM_KEY_3_FILE, &level.score[SC_SCHLUESSEL], TEXT_COLLECTING },
- { EL_EM_KEY_4_FILE, &level.score[SC_SCHLUESSEL], TEXT_COLLECTING },
- { EL_AMOEBA_WET, &level.amoeba_speed, TEXT_SPEED },
- { EL_AMOEBA_DRY, &level.amoeba_speed, TEXT_SPEED },
- { EL_AMOEBA_FULL, &level.amoeba_speed, TEXT_SPEED },
- { EL_BD_AMOEBA, &level.amoeba_speed, TEXT_SPEED },
- { EL_MAGIC_WALL, &level.time_magic_wall, TEXT_DURATION },
- { EL_ROBOT_WHEEL, &level.time_wheel, TEXT_DURATION },
- { -1, NULL, NULL }
- };
-
- num_elements_in_level = 0;
- for (y=0; y<lev_fieldy; y++)
- for (x=0; x<lev_fieldx; x++)
- if (Feld[x][y] == properties_element)
- num_elements_in_level++;
- percentage = num_elements_in_level * 100.0 / (lev_fieldx * lev_fieldy);
-
- DrawTextF(ED_SETTINGS_XPOS, 5 * TILEY, FONT_TEXT_1, "In this level:");
- DrawTextF(ED_SETTINGS_XPOS + 15 * getFontWidth(FONT_TEXT_1), 5 * TILEY,
- FONT_TEXT_2, "%d (%.2f%%)", num_elements_in_level,
- percentage);
/* check if there are elements where a score can be chosen for */
for (i=0; elements_with_counter[i].element != -1; i++)
{
if (elements_with_counter[i].element == properties_element)
{
+#if 1
+ counterbutton_info[counter_id].value = elements_with_counter[i].value;
+ element_score_text = elements_with_counter[i].text;
+ element_has_score = TRUE;
+#else
int x = counterbutton_info[counter_id].x + xoffset_right;
int y = counterbutton_info[counter_id].y + yoffset_right;
ModifyEditorCounter(counter_id, *counterbutton_info[counter_id].value);
MapCounterButtons(counter_id);
+#endif
break;
}
}
- if (HAS_CONTENT(properties_element) ||
- IS_CUSTOM_ELEMENT(properties_element))
+ if (IS_CUSTOM_ELEMENT(properties_element))
+ {
+ counterbutton_info[counter_id].value = &temporary_dummy_score;
+ element_score_text = "Score for certain actions";
+ element_has_score = TRUE;
+ }
+
+ if (element_has_score)
+ {
+ int x = counterbutton_info[counter_id].x + xoffset_right;
+ int y = counterbutton_info[counter_id].y + yoffset_right;
+
+ DrawTextF(x, y, FONT_TEXT_1, element_score_text);
+
+ ModifyEditorCounter(counter_id, *counterbutton_info[counter_id].value);
+ MapCounterButtons(counter_id);
+ }
+
+ if (HAS_CONTENT(properties_element))
{
/* draw stickybutton gadget */
i = ED_CHECKBUTTON_ID_STICK_ELEMENT;
else
DrawElementContentAreas();
}
- else if (IS_CUSTOM_ELEMENT(properties_element))
- DrawCustomChangedArea();
}
if (IS_GEM(properties_element))
if (IS_CUSTOM_ELEMENT(properties_element))
{
- int nr = properties_element - EL_CUSTOM_START;
-
- CopyCustomElementPropertiesToEditor();
-
- /* draw checkbutton gadget */
- i = ED_CHECKBUTTON_ID_CUSTOM_INDESTRUCTIBLE;
- x = checkbutton_info[i].x + xoffset_right2;
- y = checkbutton_info[i].y + yoffset_right2;
-
- checkbutton_info[i].value = &custom_element_properties[nr].indestructible;
-
- DrawTextF(x, y, FONT_TEXT_1, checkbutton_info[i].text);
- ModifyGadget(level_editor_gadget[checkbutton_info[i].gadget_id],
- GDI_CHECKED, *checkbutton_info[i].value, GDI_END);
- MapCheckbuttonGadget(i);
-
- /* draw checkbutton gadget */
- i = ED_CHECKBUTTON_ID_CUSTOM_CAN_FALL;
- x = checkbutton_info[i].x + xoffset_right2;
- y = checkbutton_info[i].y + yoffset_right2;
-
- checkbutton_info[i].value = &custom_element_properties[nr].can_fall;
-
- DrawTextF(x, y, FONT_TEXT_1, checkbutton_info[i].text);
- ModifyGadget(level_editor_gadget[checkbutton_info[i].gadget_id],
- GDI_CHECKED, *checkbutton_info[i].value, GDI_END);
- MapCheckbuttonGadget(i);
-
- /* draw checkbutton gadget */
- i = ED_CHECKBUTTON_ID_CUSTOM_CAN_SMASH;
- x = checkbutton_info[i].x + xoffset_right2;
- y = checkbutton_info[i].y + yoffset_right2;
-
- checkbutton_info[i].value = &custom_element_properties[nr].can_smash;
+ CopyCustomElementPropertiesToEditor(properties_element);
- DrawTextF(x, y, FONT_TEXT_1, checkbutton_info[i].text);
- ModifyGadget(level_editor_gadget[checkbutton_info[i].gadget_id],
- GDI_CHECKED, *checkbutton_info[i].value, GDI_END);
- MapCheckbuttonGadget(i);
-
- /* draw checkbutton gadget */
- i = ED_CHECKBUTTON_ID_CUSTOM_PUSHABLE;
- x = checkbutton_info[i].x + xoffset_right2;
- y = checkbutton_info[i].y + yoffset_right2;
-
- checkbutton_info[i].value = &custom_element_properties[nr].pushable;
-
- DrawTextF(x, y, FONT_TEXT_1, checkbutton_info[i].text);
- ModifyGadget(level_editor_gadget[checkbutton_info[i].gadget_id],
- GDI_CHECKED, *checkbutton_info[i].value, GDI_END);
- MapCheckbuttonGadget(i);
-
- /* draw checkbutton gadget */
- i = ED_CHECKBUTTON_ID_CUSTOM_SLIPPERY;
- x = checkbutton_info[i].x + xoffset_right2;
- y = checkbutton_info[i].y + yoffset_right2;
-
- checkbutton_info[i].value = &custom_element_properties[nr].slippery;
-
- DrawTextF(x, y, FONT_TEXT_1, checkbutton_info[i].text);
- ModifyGadget(level_editor_gadget[checkbutton_info[i].gadget_id],
- GDI_CHECKED, *checkbutton_info[i].value, GDI_END);
- MapCheckbuttonGadget(i);
-
- /* draw selectbox gadget */
- i = ED_SELECTBOX_ID_CUSTOM_CHANGE_CAUSE;
- x = selectbox_info[i].x + xoffset_right2;
- y = selectbox_info[i].y + yoffset_right2;
-
- selectbox_info[i].index = &index_change_cause;
+ /* draw checkbutton gadgets */
+ for (i = ED_CHECKBUTTON_ID_CUSTOM_FIRST;
+ i <= ED_CHECKBUTTON_ID_CUSTOM_LAST; i++)
+ {
+ x = checkbutton_info[i].x + xoffset_right2;
+ y = checkbutton_info[i].y + yoffset_right2;
- DrawTextF(x, y, FONT_TEXT_1, selectbox_info[i].text);
- ModifyGadget(level_editor_gadget[selectbox_info[i].gadget_id],
- GDI_SELECTBOX_INDEX, *selectbox_info[i].index, GDI_END);
- MapSelectboxGadget(i);
+ DrawTextF(x, y, FONT_TEXT_1, checkbutton_info[i].text);
+ ModifyGadget(level_editor_gadget[checkbutton_info[i].gadget_id],
+ GDI_CHECKED, *checkbutton_info[i].value, GDI_END);
+ MapCheckbuttonGadget(i);
+ }
}
}
return NULL;
}
-static int PrintElementDescriptionFromFile(char *filename)
+static boolean PrintInfoText(char *text, int font_nr, int screen_line)
{
- int font_nr = FONT_TEXT_2;
- int font_width = getFontWidth(font_nr);
int font_height = getFontHeight(font_nr);
int pad_x = ED_SETTINGS_XPOS;
int pad_y = 5 * TILEY;
int sx = SX + pad_x;
int sy = SY + pad_y;
- int max_chars_per_line = (SXSIZE - 2 * pad_x) / font_width;
int max_lines_per_screen = (SYSIZE - pad_y) / font_height - 1;
- int screen_line_nr = 0;
+
+ if (screen_line >= max_lines_per_screen)
+ return FALSE;
+
+ DrawText(sx, sy + screen_line * font_height, text, font_nr);
+
+ return TRUE;
+}
+
+static int PrintElementDescriptionFromFile(char *filename, int screen_line)
+{
+ int font_nr = FONT_TEXT_2;
+ int font_width = getFontWidth(font_nr);
+ int pad_x = ED_SETTINGS_XPOS;
+ int max_chars_per_line = (SXSIZE - 2 * pad_x) / font_width;
char line[MAX_LINE_LEN];
char buffer[max_chars_per_line + 1];
int buffer_len;
+ int lines_printed = 0;
FILE *file;
if (filename == NULL)
if (print_buffer)
{
- DrawText(sx, sy + screen_line_nr * font_height, buffer, FONT_TEXT_2);
+ if (!PrintInfoText(buffer, font_nr, screen_line + lines_printed))
+ return lines_printed;
last_line_was_empty = (buffer_len == 0);
+ lines_printed++;
buffer[0] = '\0';
buffer_len = 0;
print_buffer = FALSE;
-
- if (++screen_line_nr >= max_lines_per_screen)
- return screen_line_nr; /* currently too much text gets cut */
}
}
}
+ fclose(file);
+
if (buffer_len > 0)
+ if (PrintInfoText(buffer, font_nr, screen_line + lines_printed))
+ lines_printed++;
+
+ return lines_printed;
+}
+
+static void DrawPropertiesTabulatorGadgets()
+{
+ struct GadgetInfo *gd_gi = level_editor_gadget[GADGET_ID_PROPERTIES_INFO];
+ struct GadgetDesign *gd = &gd_gi->alt_design[GD_BUTTON_UNPRESSED];
+ int gd_x = gd->x + gd_gi->border.width / 2;
+ int gd_y = gd->y + gd_gi->height - 1;
+ Pixel tab_color = GetPixel(gd->bitmap, gd_x, gd_y);
+ int id_first = ED_TEXTBUTTON_ID_PROPERTIES_INFO;
+ int id_last = ED_TEXTBUTTON_ID_PROPERTIES_INFO;
+ int i;
+
+ /* draw additional "configure" tabulator for configurable elements */
+ if (checkPropertiesConfig())
+ id_last = ED_TEXTBUTTON_ID_PROPERTIES_CONFIG;
+
+ /* draw additional "advanced" tabulator for custom elements */
+ if (IS_CUSTOM_ELEMENT(properties_element))
+ id_last = ED_TEXTBUTTON_ID_PROPERTIES_ADVANCED;
+
+ for (i=id_first; i <= id_last; i++)
{
- DrawText(sx, sy + screen_line_nr * font_height, buffer, FONT_TEXT_2);
- screen_line_nr++;
- }
+ int gadget_id = textbutton_info[i].gadget_id;
+ struct GadgetInfo *gi = level_editor_gadget[gadget_id];
+ boolean active = (i != edit_mode_properties);
- fclose(file);
+ /* draw background line below tabulator button */
+ ClearRectangleOnBackground(drawto, gi->x, gi->y + gi->height, gi->width,1);
+
+ /* draw solid line below inactive tabulator buttons */
+ if (!active && tab_color != BLACK_PIXEL) /* black => transparent */
+ FillRectangle(drawto, gi->x, gi->y + gi->height, gi->width,1, tab_color);
- return screen_line_nr;
+ ModifyGadget(gi, GDI_ACTIVE, active, GDI_END);
+ MapTextbuttonGadget(i);
+ }
+
+ /* draw little border line below tabulator buttons */
+ if (tab_color != BLACK_PIXEL) /* black => transparent */
+ FillRectangle(drawto, gd_gi->x, gd_gi->y + gd_gi->height + 1,
+ 3 * gd_gi->width + 2 * ED_GADGET_DISTANCE,
+ ED_GADGET_DISTANCE, tab_color);
}
static void DrawPropertiesInfo()
{
+ static struct
+ {
+ int value;
+ char *text;
+ }
+ properties[] =
+ {
+ /* configurable properties */
+ { EP_INDESTRUCTIBLE, "- undestructible" },
+ { EP_DIGGABLE, "- diggable" },
+ { EP_COLLECTIBLE, "- collectible" },
+ { EP_PUSHABLE, "- pushable" },
+ { EP_CAN_FALL, "- can fall" },
+ { EP_CAN_SMASH, "- can smash other objects" },
+ { EP_CAN_MOVE, "- can move" },
+ { EP_SLIPPERY, "- slippery for falling objects" },
+ { EP_EM_SLIPPERY_WALL, "- slippery for some gems (EM style)" },
+ { EP_WALKABLE_OVER, "- player can walk over it" },
+ { EP_WALKABLE_INSIDE, "- player can walk inside it" },
+ { EP_WALKABLE_UNDER, "- player can walk under it" },
+ { EP_PASSABLE_OVER, "- player can pass over it" },
+ { EP_PASSABLE_INSIDE, "- player can pass through it" },
+ { EP_PASSABLE_UNDER, "- player can pass under it" },
+
+ /* pre-defined properties */
+ { EP_CAN_PASS_MAGIC_WALL, "- can pass magic walls" },
+ { EP_DONT_TOUCH, "- deadly when touched" },
+ { EP_ENEMY, "- can kill the player" },
+ { EP_DONT_GO_TO, "- deadly when walked to" },
+ { EP_CAN_EXPLODE, "- can explode" },
+ { EP_HAS_CONTENT, "- can contain other elements" },
+
+ { -1, NULL }
+ };
char *filename = getElementDescriptionFilename(properties_element);
+ char *percentage_text = "In this level:";
+ char *properties_text = "Standard properties:";
+ float percentage;
+ int num_elements_in_level;
+ int num_standard_properties = 0;
+ int font1_nr = FONT_TEXT_1;
+ int font2_nr = FONT_TEXT_2;
+ int font1_width = getFontWidth(font1_nr);
+ int font2_height = getFontHeight(font2_nr);
+ int pad_x = ED_SETTINGS_XPOS;
+ int pad_y = 5 * TILEY;
+ int screen_line = 2;
+ int i, x, y;
+
+ num_elements_in_level = 0;
+ for (y=0; y<lev_fieldy; y++)
+ for (x=0; x<lev_fieldx; x++)
+ if (Feld[x][y] == properties_element)
+ num_elements_in_level++;
+ percentage = num_elements_in_level * 100.0 / (lev_fieldx * lev_fieldy);
- if (PrintElementDescriptionFromFile(filename) == 0)
- DrawText(SX + ED_SETTINGS_XPOS, SY + 5 * TILEY,
- "No description available.", FONT_TEXT_1);
+ DrawTextF(pad_x, pad_y, font1_nr, percentage_text);
+ DrawTextF(pad_x + strlen(percentage_text) * font1_width, pad_y,
+ font2_nr, "%d (%.2f%%)", num_elements_in_level, percentage);
+
+ for (i=0; properties[i].value != -1; i++)
+ if (HAS_PROPERTY(properties_element, properties[i].value))
+ num_standard_properties++;
+
+#if 1
+ if (num_standard_properties > 0)
+ {
+ DrawTextF(pad_x, pad_y + screen_line * font2_height, font1_nr,
+ properties_text);
+ screen_line++;
+
+ for (i=0; properties[i].value != -1; i++)
+ {
+ if (!HAS_PROPERTY(properties_element, properties[i].value))
+ continue;
+
+ DrawTextF(pad_x, pad_y + screen_line * font2_height, font2_nr,
+ properties[i].text);
+ screen_line++;
+ }
+
+ screen_line++;
+ }
+#endif
+
+ PrintInfoText("Description:", FONT_TEXT_1, screen_line);
+ if (PrintElementDescriptionFromFile(filename, screen_line + 1) == 0)
+ PrintInfoText("No description available.", FONT_TEXT_1, screen_line);
}
static void DrawPropertiesAdvanced()
{
- DrawText(SX + ED_SETTINGS_XPOS, SY + 5 * TILEY, "Coming soon!", FONT_TEXT_1);
+ char infotext[MAX_OUTPUT_LINESIZE + 1];
+ int max_infotext_len = getMaxInfoTextLength();
+ int xoffset_above = 0;
+ int yoffset_above = -(MINI_TILEX + ED_GADGET_DISTANCE);
+ int xoffset_right = getCounterGadgetWidth();
+ int yoffset_right = ED_BORDER_SIZE;
+ int xoffset_right2 = ED_CHECKBUTTON_XSIZE + 2 * ED_GADGET_DISTANCE;
+ int yoffset_right2 = ED_BORDER_SIZE;
+ int i, x, y;
+
+ /* draw stickybutton gadget */
+ i = ED_CHECKBUTTON_ID_STICK_ELEMENT;
+ x = checkbutton_info[i].x + xoffset_right2;
+ y = checkbutton_info[i].y + yoffset_right2;
+
+ DrawTextF(x, y, FONT_TEXT_1, checkbutton_info[i].text);
+ ModifyGadget(level_editor_gadget[checkbutton_info[i].gadget_id],
+ GDI_CHECKED, *checkbutton_info[i].value, GDI_END);
+ MapCheckbuttonGadget(i);
+
+ /* draw counter gadgets */
+ for (i=ED_COUNTER_ID_CHANGE_FIRST; i<=ED_COUNTER_ID_CHANGE_LAST; i++)
+ {
+ if (counterbutton_info[i].infotext_above)
+ {
+ x = counterbutton_info[i].x + xoffset_above;
+ y = counterbutton_info[i].y + yoffset_above;
+
+ sprintf(infotext, "%s:", counterbutton_info[i].infotext_above);
+ infotext[max_infotext_len] = '\0';
+ DrawTextF(x, y, FONT_TEXT_1, infotext);
+ }
+
+ if (counterbutton_info[i].infotext_right)
+ {
+ x = counterbutton_info[i].x + xoffset_right;
+ y = counterbutton_info[i].y + yoffset_right;
+
+ sprintf(infotext, "%s", counterbutton_info[i].infotext_right);
+ infotext[max_infotext_len] = '\0';
+ DrawTextF(x, y, FONT_TEXT_1, infotext);
+ }
+
+ ModifyEditorCounter(i, *counterbutton_info[i].value);
+ MapCounterButtons(i);
+ }
+
+ /* draw checkbutton gadgets */
+ for (i = ED_CHECKBUTTON_ID_CHANGE_FIRST;
+ i <= ED_CHECKBUTTON_ID_CHANGE_LAST; i++)
+ {
+ x = checkbutton_info[i].x + xoffset_right2;
+ y = checkbutton_info[i].y + yoffset_right2;
+
+ DrawTextF(x, y, FONT_TEXT_1, checkbutton_info[i].text);
+ ModifyGadget(level_editor_gadget[checkbutton_info[i].gadget_id],
+ GDI_CHECKED, *checkbutton_info[i].value, GDI_END);
+ MapCheckbuttonGadget(i);
+ }
+
+ DrawCustomChangedArea();
+
+ /* draw selectbox gadget */
+ i = ED_SELECTBOX_ID_CUSTOM_CHANGE_CAUSE;
+ x = selectbox_info[i].x + xoffset_right2;
+ y = selectbox_info[i].y + yoffset_right2;
+
+ selectbox_info[i].index = &index_change_cause;
+
+ DrawTextF(x, y, FONT_TEXT_1, selectbox_info[i].text);
+ ModifyGadget(level_editor_gadget[selectbox_info[i].gadget_id],
+ GDI_SELECTBOX_INDEX, *selectbox_info[i].index, GDI_END);
+ MapSelectboxGadget(i);
}
static void DrawPropertiesWindow()
/* make sure that previous properties edit mode exists for this element */
if (edit_mode_properties == ED_MODE_PROPERTIES_ADVANCED &&
!IS_CUSTOM_ELEMENT(properties_element))
- edit_mode_properties = ED_MODE_PROPERTIES_MAIN;
+ edit_mode_properties = ED_MODE_PROPERTIES_CONFIG;
+
+ if (edit_mode_properties == ED_MODE_PROPERTIES_CONFIG &&
+ !checkPropertiesConfig())
+ edit_mode_properties = ED_MODE_PROPERTIES_INFO;
UnmapLevelEditorWindowGadgets();
DrawGraphicAnimationExt(drawto,
SX + xstart * MINI_TILEX,
SY + ystart * MINI_TILEY + MINI_TILEY / 2,
- el2edimg(properties_element), -1, NO_MASKING);
+ el2img(properties_element), -1, NO_MASKING);
FrameCounter = 0; /* restart animation frame counter */
DrawPropertiesTabulatorGadgets();
- if (edit_mode_properties == ED_MODE_PROPERTIES_MAIN)
- DrawPropertiesMain();
- else if (edit_mode_properties == ED_MODE_PROPERTIES_INFO)
+ if (edit_mode_properties == ED_MODE_PROPERTIES_INFO)
DrawPropertiesInfo();
+ else if (edit_mode_properties == ED_MODE_PROPERTIES_CONFIG)
+ DrawPropertiesConfig();
else /* edit_mode_properties == ED_MODE_PROPERTIES_ADVANCED */
DrawPropertiesAdvanced();
}
}
else if (id == GADGET_ID_RANDOM_BACKGROUND)
random_placement_background_element = new_element;
- else if (id >= GADGET_ID_ELEM_CONTENT_0 &&
- id <= GADGET_ID_ELEM_CONTENT_7)
- level.yam_content[id - GADGET_ID_ELEM_CONTENT_0][sx][sy] =
+ else if (id >= GADGET_ID_ELEMENT_CONTENT_0 &&
+ id <= GADGET_ID_ELEMENT_CONTENT_7)
+ level.yam_content[id - GADGET_ID_ELEMENT_CONTENT_0][sx][sy] =
new_element;
}
break;
switch (counter_id)
{
- case ED_COUNTER_ID_ELEM_CONTENT:
+ case ED_COUNTER_ID_ELEMENT_CONTENT:
DrawElementContentAreas();
break;
static void HandleTextbuttonGadgets(struct GadgetInfo *gi)
{
- if (gi->custom_type_id >= ED_TEXTBUTTON_ID_PROPERTIES_MAIN &&
+ if (gi->custom_type_id >= ED_TEXTBUTTON_ID_PROPERTIES_INFO &&
gi->custom_type_id <= ED_TEXTBUTTON_ID_PROPERTIES_ADVANCED)
{
edit_mode_properties = gi->custom_type_id;
if (type_id >= ED_CHECKBUTTON_ID_CUSTOM_FIRST &&
type_id <= ED_CHECKBUTTON_ID_CUSTOM_LAST)
- CopyCustomElementPropertiesToGame();
+ CopyCustomElementPropertiesToGame(properties_element);
}
static void HandleControlButtons(struct GadgetInfo *gi)
case GADGET_ID_FLOOD_FILL:
case GADGET_ID_GRAB_BRUSH:
case GADGET_ID_PICK_ELEMENT:
- last_drawing_function = drawing_function;
+ if (drawing_function != GADGET_ID_PICK_ELEMENT)
+ last_drawing_function = drawing_function;
drawing_function = id;
draw_with_brush = FALSE;
break;
TapeStartRecording();
level_editor_test_game = TRUE;
- game_status = PLAYING;
+ game_status = GAME_MODE_PLAYING;
InitGame();
}
DrawGraphicAnimationExt(drawto,
SX + xpos * TILEX,
SY + ypos * TILEY + MINI_TILEY / 2,
- el2edimg(properties_element), -1, NO_MASKING);
+ el2img(properties_element), -1, NO_MASKING);
MarkTileDirty(xpos, ypos);
MarkTileDirty(xpos, ypos + 1);
char shortcut[MAX_OUTPUT_LINESIZE + 1];
int max_infotext_len = getMaxInfoTextLength();
- if (game_status != LEVELED)
+ if (game_status != GAME_MODE_EDITOR)
return;
ClearEditorGadgetInfoText();
"Amoeba content");
else if (id == GADGET_ID_CUSTOM_CHANGED)
DrawTextF(INFOTEXT_XPOS - SX, INFOTEXT_YPOS - SY, FONT_TEXT_2,
- "Next element after change");
+ "New element after change");
else if (id == GADGET_ID_RANDOM_BACKGROUND)
DrawTextF(INFOTEXT_XPOS - SX, INFOTEXT_YPOS - SY, FONT_TEXT_2,
"Random placement background");
else
DrawTextF(INFOTEXT_XPOS - SX, INFOTEXT_YPOS - SY, FONT_TEXT_2,
"Content area %d position: %d, %d",
- id - GADGET_ID_ELEM_CONTENT_0 + 1, sx, sy);
+ id - GADGET_ID_ELEMENT_CONTENT_0 + 1, sx, sy);
}
void RequestExitLevelEditor(boolean ask_if_level_has_changed)
/*
CloseDoor(DOOR_CLOSE_ALL);
*/
- game_status = MAINMENU;
+ game_status = GAME_MODE_MAIN;
DrawMainMenu();
}
else