GADGET_ID_USE_TIME_ORB_BUG,
GADGET_ID_USE_LIFE_BUGS,
GADGET_ID_RANDOM_BALL_CONTENT,
- GADGET_ID_INITIAL_BALL_STATE,
+ GADGET_ID_INITIAL_BALL_ACTIVE,
GADGET_ID_GROW_INTO_DIGGABLE,
GADGET_ID_SB_FIELDS_NEEDED,
GADGET_ID_SB_OBJECTS_NEEDED,
ED_CHECKBUTTON_ID_USE_TIME_ORB_BUG,
ED_CHECKBUTTON_ID_USE_LIFE_BUGS,
ED_CHECKBUTTON_ID_RANDOM_BALL_CONTENT,
- ED_CHECKBUTTON_ID_INITIAL_BALL_STATE,
+ ED_CHECKBUTTON_ID_INITIAL_BALL_ACTIVE,
ED_CHECKBUTTON_ID_GROW_INTO_DIGGABLE,
ED_CHECKBUTTON_ID_SB_FIELDS_NEEDED,
ED_CHECKBUTTON_ID_SB_OBJECTS_NEEDED,
#endif
{ CE_VALUE_GETS_ZERO, "CE value gets 0" },
{ CE_SCORE_GETS_ZERO, "CE score gets 0" },
+ { CE_UNDEFINED, " " },
+ { CE_HEADLINE_SPECIAL_EVENTS, "[mouse events]" },
+ { CE_CLICKED_BY_MOUSE, "clicked by mouse" },
+ { CE_PRESSED_BY_MOUSE, "pressed by mouse" },
{ -1, NULL }
};
{ CE_SCORE_CHANGES_OF_X, "CE score changes of" },
{ CE_VALUE_GETS_ZERO_OF_X, "CE value gets 0 of" },
{ CE_SCORE_GETS_ZERO_OF_X, "CE score gets 0 of" },
+ { CE_UNDEFINED, " " },
+ { CE_HEADLINE_SPECIAL_EVENTS, "[mouse events]" },
+ { CE_MOUSE_CLICKED_ON_X, "mouse clicked on" },
+ { CE_MOUSE_PRESSED_ON_X, "mouse pressed on" },
{ -1, NULL }
};
{ CA_SET_LEVEL_SCORE, "set score" },
{ CA_SET_LEVEL_GEMS, "set gems" },
{ CA_SET_LEVEL_WIND, "set wind dir." },
- { CA_SET_LEVEL_RANDOM_SEED, "set rand. seed" },
+ { CA_SET_LEVEL_RANDOM_SEED, "set random seed" },
{ CA_UNDEFINED, " " },
{ CA_HEADLINE_PLAYER_ACTIONS, "[player]" },
{ CA_MOVE_PLAYER, "move player" },
+ { CA_MOVE_PLAYER_NEW, "move player new" },
{ CA_EXIT_PLAYER, "exit player" },
{ CA_KILL_PLAYER, "kill player" },
{ CA_SET_PLAYER_KEYS, "set keys" },
{ CA_EXIT_PLAYER, 0, options_action_arg_player, },
{ CA_KILL_PLAYER, 0, options_action_arg_player, },
{ CA_MOVE_PLAYER, 0, options_action_arg_direction, },
+ { CA_MOVE_PLAYER_NEW, 0, options_action_arg_direction, },
{ CA_RESTART_LEVEL, 0, options_action_arg_none, },
{ CA_SHOW_ENVELOPE, 0, options_action_arg_envelope, },
{ CA_SET_LEVEL_TIME, 3, options_action_arg_number, },
{
ED_ELEMENT_SETTINGS_XPOS(1), ED_ELEMENT_SETTINGS_YPOS(13),
GADGET_ID_ACTION_TYPE, GADGET_ID_NONE,
- -1,
+ 15,
options_action_type,
&custom_element_change.action_type,
NULL, NULL, NULL, "action on specified condition"
},
{
ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(1),
- GADGET_ID_INITIAL_BALL_STATE, GADGET_ID_NONE,
- &level.ball_state_initial,
+ GADGET_ID_INITIAL_BALL_ACTIVE, GADGET_ID_NONE,
+ &level.ball_active_initial,
NULL, NULL,
"magic ball initially activated", "activate magic ball after level start"
},
int gadget_id_align;
int *value;
int area_xsize, area_ysize;
- char *text_left, *text_right, *text_below, *infotext;
+ char *text_left, *text_right, *text_above, *text_below, *infotext;
} drawingarea_info[ED_NUM_DRAWING_AREAS] =
{
// ---------- level playfield content ---------------------------------------
GADGET_ID_DRAWING_LEVEL, GADGET_ID_NONE,
NULL,
-1, -1, // these values are not constant, but can change at runtime
- NULL, NULL, NULL, NULL
+ NULL, NULL, NULL, NULL, NULL
},
// ---------- yam yam content -----------------------------------------------
ED_AREA_YAMYAM_CONTENT_XOFF(0), ED_AREA_YAMYAM_CONTENT_YOFF(0),
GADGET_ID_YAMYAM_CONTENT_0, GADGET_ID_NONE,
&level.yamyam_content[0].e[0][0], 3, 3,
- NULL, NULL, "1", NULL
+ NULL, NULL, NULL, "1", NULL
},
{
ED_AREA_YAMYAM_CONTENT_XPOS, ED_AREA_YAMYAM_CONTENT_YPOS,
ED_AREA_YAMYAM_CONTENT_XOFF(1), ED_AREA_YAMYAM_CONTENT_YOFF(1),
GADGET_ID_YAMYAM_CONTENT_1, GADGET_ID_NONE,
&level.yamyam_content[1].e[0][0], 3, 3,
- NULL, NULL, "2", NULL
+ NULL, NULL, NULL, "2", NULL
},
{
ED_AREA_YAMYAM_CONTENT_XPOS, ED_AREA_YAMYAM_CONTENT_YPOS,
ED_AREA_YAMYAM_CONTENT_XOFF(2), ED_AREA_YAMYAM_CONTENT_YOFF(2),
GADGET_ID_YAMYAM_CONTENT_2, GADGET_ID_NONE,
&level.yamyam_content[2].e[0][0], 3, 3,
- NULL, NULL, "3", NULL
+ NULL, NULL, NULL, "3", NULL
},
{
ED_AREA_YAMYAM_CONTENT_XPOS, ED_AREA_YAMYAM_CONTENT_YPOS,
ED_AREA_YAMYAM_CONTENT_XOFF(3), ED_AREA_YAMYAM_CONTENT_YOFF(3),
GADGET_ID_YAMYAM_CONTENT_3, GADGET_ID_NONE,
&level.yamyam_content[3].e[0][0], 3, 3,
- NULL, NULL, "4", NULL
+ NULL, NULL, NULL, "4", NULL
},
{
ED_AREA_YAMYAM_CONTENT_XPOS, ED_AREA_YAMYAM_CONTENT_YPOS,
ED_AREA_YAMYAM_CONTENT_XOFF(4), ED_AREA_YAMYAM_CONTENT_YOFF(4),
GADGET_ID_YAMYAM_CONTENT_4, GADGET_ID_NONE,
&level.yamyam_content[4].e[0][0], 3, 3,
- NULL, NULL, "5", NULL
+ NULL, NULL, NULL, "5", NULL
},
{
ED_AREA_YAMYAM_CONTENT_XPOS, ED_AREA_YAMYAM_CONTENT_YPOS,
ED_AREA_YAMYAM_CONTENT_XOFF(5), ED_AREA_YAMYAM_CONTENT_YOFF(5),
GADGET_ID_YAMYAM_CONTENT_5, GADGET_ID_NONE,
&level.yamyam_content[5].e[0][0], 3, 3,
- NULL, NULL, "6", NULL
+ NULL, NULL, NULL, "6", NULL
},
{
ED_AREA_YAMYAM_CONTENT_XPOS, ED_AREA_YAMYAM_CONTENT_YPOS,
ED_AREA_YAMYAM_CONTENT_XOFF(6), ED_AREA_YAMYAM_CONTENT_YOFF(6),
GADGET_ID_YAMYAM_CONTENT_6, GADGET_ID_NONE,
&level.yamyam_content[6].e[0][0], 3, 3,
- NULL, NULL, "7", NULL
+ NULL, NULL, NULL, "7", NULL
},
{
ED_AREA_YAMYAM_CONTENT_XPOS, ED_AREA_YAMYAM_CONTENT_YPOS,
ED_AREA_YAMYAM_CONTENT_XOFF(7), ED_AREA_YAMYAM_CONTENT_YOFF(7),
GADGET_ID_YAMYAM_CONTENT_7, GADGET_ID_NONE,
&level.yamyam_content[7].e[0][0], 3, 3,
- NULL, NULL, "8", NULL
+ NULL, NULL, NULL, "8", NULL
},
// ---------- magic ball content --------------------------------------------
ED_AREA_MAGIC_BALL_CONTENT_XOFF(0), ED_AREA_MAGIC_BALL_CONTENT_YOFF(0),
GADGET_ID_MAGIC_BALL_CONTENT_0, GADGET_ID_NONE,
&level.ball_content[0].e[0][0], 3, 3,
- NULL, NULL, "1", NULL
+ NULL, NULL, NULL, "1", NULL
},
{
ED_AREA_MAGIC_BALL_CONTENT_XPOS, ED_AREA_MAGIC_BALL_CONTENT_YPOS,
ED_AREA_MAGIC_BALL_CONTENT_XOFF(1), ED_AREA_MAGIC_BALL_CONTENT_YOFF(1),
GADGET_ID_MAGIC_BALL_CONTENT_1, GADGET_ID_NONE,
&level.ball_content[1].e[0][0], 3, 3,
- NULL, NULL, "2", NULL
+ NULL, NULL, NULL, "2", NULL
},
{
ED_AREA_MAGIC_BALL_CONTENT_XPOS, ED_AREA_MAGIC_BALL_CONTENT_YPOS,
ED_AREA_MAGIC_BALL_CONTENT_XOFF(2), ED_AREA_MAGIC_BALL_CONTENT_YOFF(2),
GADGET_ID_MAGIC_BALL_CONTENT_2, GADGET_ID_NONE,
&level.ball_content[2].e[0][0], 3, 3,
- NULL, NULL, "3", NULL
+ NULL, NULL, NULL, "3", NULL
},
{
ED_AREA_MAGIC_BALL_CONTENT_XPOS, ED_AREA_MAGIC_BALL_CONTENT_YPOS,
ED_AREA_MAGIC_BALL_CONTENT_XOFF(3), ED_AREA_MAGIC_BALL_CONTENT_YOFF(3),
GADGET_ID_MAGIC_BALL_CONTENT_3, GADGET_ID_NONE,
&level.ball_content[3].e[0][0], 3, 3,
- NULL, NULL, "4", NULL
+ NULL, NULL, NULL, "4", NULL
},
{
ED_AREA_MAGIC_BALL_CONTENT_XPOS, ED_AREA_MAGIC_BALL_CONTENT_YPOS,
ED_AREA_MAGIC_BALL_CONTENT_XOFF(4), ED_AREA_MAGIC_BALL_CONTENT_YOFF(4),
GADGET_ID_MAGIC_BALL_CONTENT_4, GADGET_ID_NONE,
&level.ball_content[4].e[0][0], 3, 3,
- NULL, NULL, "5", NULL
+ NULL, NULL, NULL, "5", NULL
},
{
ED_AREA_MAGIC_BALL_CONTENT_XPOS, ED_AREA_MAGIC_BALL_CONTENT_YPOS,
ED_AREA_MAGIC_BALL_CONTENT_XOFF(5), ED_AREA_MAGIC_BALL_CONTENT_YOFF(5),
GADGET_ID_MAGIC_BALL_CONTENT_5, GADGET_ID_NONE,
&level.ball_content[5].e[0][0], 3, 3,
- NULL, NULL, "6", NULL
+ NULL, NULL, NULL, "6", NULL
},
{
ED_AREA_MAGIC_BALL_CONTENT_XPOS, ED_AREA_MAGIC_BALL_CONTENT_YPOS,
ED_AREA_MAGIC_BALL_CONTENT_XOFF(6), ED_AREA_MAGIC_BALL_CONTENT_YOFF(6),
GADGET_ID_MAGIC_BALL_CONTENT_6, GADGET_ID_NONE,
&level.ball_content[6].e[0][0], 3, 3,
- NULL, NULL, "7", NULL
+ NULL, NULL, NULL, "7", NULL
},
{
ED_AREA_MAGIC_BALL_CONTENT_XPOS, ED_AREA_MAGIC_BALL_CONTENT_YPOS,
ED_AREA_MAGIC_BALL_CONTENT_XOFF(7), ED_AREA_MAGIC_BALL_CONTENT_YOFF(7),
GADGET_ID_MAGIC_BALL_CONTENT_7, GADGET_ID_NONE,
&level.ball_content[7].e[0][0], 3, 3,
- NULL, NULL, "8", NULL
+ NULL, NULL, NULL, "8", NULL
},
// ---------- android content -----------------------------------------------
{
- ED_AREA_1X1_SETTINGS_XPOS(0), ED_AREA_1X1_SETTINGS_YPOS(5),
+ ED_AREA_1X1_SETTINGS_XPOS(0), ED_AREA_1X1_SETTINGS_YPOS(6),
ED_AREA_1X1_SETTINGS_XOFF, ED_AREA_1X1_SETTINGS_YOFF,
GADGET_ID_ANDROID_CONTENT, GADGET_ID_NONE,
&level.android_clone_element[0], MAX_ANDROID_ELEMENTS, 1,
- "elements:", NULL, NULL, "elements android can clone"
+ NULL, NULL, "elements:", NULL, "elements android can clone"
},
// ---------- amoeba content ------------------------------------------------
ED_AREA_1X1_SETTINGS_XOFF, ED_AREA_1X1_SETTINGS_YOFF,
GADGET_ID_AMOEBA_CONTENT, GADGET_ID_NONE,
&level.amoeba_content, 1, 1,
- "content:", NULL, NULL, "amoeba content"
+ "content:", NULL, NULL, NULL, "amoeba content"
},
// ---------- level start element -------------------------------------------
0, ED_AREA_1X1_SETTINGS_YOFF,
GADGET_ID_START_ELEMENT, GADGET_ID_USE_START_ELEMENT,
&level.start_element[0], 1, 1,
- NULL, NULL, NULL, "level start element"
+ NULL, NULL, NULL, NULL, "level start element"
},
// ---------- player artwork element ----------------------------------------
0, ED_AREA_1X1_SETTINGS_YOFF,
GADGET_ID_ARTWORK_ELEMENT, GADGET_ID_USE_ARTWORK_ELEMENT,
&level.artwork_element[0], 1, 1,
- NULL, NULL, NULL, "element for player artwork"
+ NULL, NULL, NULL, NULL, "element for player artwork"
},
// ---------- player explosion element --------------------------------------
0, ED_AREA_1X1_SETTINGS_YOFF,
GADGET_ID_EXPLOSION_ELEMENT, GADGET_ID_USE_EXPLOSION_ELEMENT,
&level.explosion_element[0], 1, 1,
- NULL, NULL, NULL, "element for player explosion"
+ NULL, NULL, NULL, NULL, "element for player explosion"
},
// ---------- player initial inventory --------------------------------------
0, ED_AREA_1X1_SETTINGS_YOFF,
GADGET_ID_INVENTORY_CONTENT, GADGET_ID_USE_INITIAL_INVENTORY,
&level.initial_inventory_content[0][0], MAX_INITIAL_INVENTORY_SIZE, 1,
- NULL, NULL, NULL, "content for initial inventory"
+ NULL, NULL, NULL, NULL, "content for initial inventory"
},
// ---------- element settings: configure 1 (custom elements) ---------------
0, ED_AREA_1X1_SETTINGS_YOFF,
GADGET_ID_CUSTOM_GRAPHIC, GADGET_ID_CUSTOM_USE_GRAPHIC,
&custom_element.gfx_element_initial,1, 1,
- NULL, NULL, NULL, "custom graphic element"
+ NULL, NULL, NULL, NULL, "custom graphic element"
},
// ---------- element settings: configure 2 (custom elements) ---------------
0, ED_AREA_3X3_SETTINGS_YOFF,
GADGET_ID_CUSTOM_CONTENT, GADGET_ID_NONE, // align three rows
&custom_element.content.e[0][0], 3, 3,
- "content:", NULL, NULL, NULL
+ "content:", NULL, NULL, NULL, NULL
},
// ---------- custom enter and leave element (when moving) ------------------
ED_AREA_1X1_SETTINGS_XOFF, ED_AREA_1X1_SETTINGS_YOFF,
GADGET_ID_CUSTOM_MOVE_ENTER, GADGET_ID_NONE,
&custom_element.move_enter_element, 1, 1,
- "can dig:", " ", NULL, "element that can be digged/collected"
+ "can dig:", " ", NULL, NULL, "element that can be digged/collected"
},
{
-1, ED_AREA_1X1_SETTINGS_YPOS(3),
0, ED_AREA_1X1_SETTINGS_YOFF,
GADGET_ID_CUSTOM_MOVE_LEAVE, GADGET_ID_CUSTOM_MOVE_LEAVE_TYPE,
&custom_element.move_leave_element, 1, 1,
- NULL, NULL, NULL, "element that will be left behind"
+ NULL, NULL, NULL, NULL, "element that will be left behind"
},
// ---------- element settings: advanced (custom elements) ------------------
0, ED_AREA_1X1_SETTINGS_YOFF,
GADGET_ID_CUSTOM_CHANGE_TARGET, GADGET_ID_CUSTOM_CAN_CHANGE,
&custom_element_change.target_element, 1, 1,
- NULL, "after/when:", NULL, "new target element after change"
+ NULL, "after/when:", NULL, NULL, "new target element after change"
},
// ---------- custom change content (extended change target) ----------------
0, ED_AREA_3X3_SETTINGS_YOFF,
GADGET_ID_CUSTOM_CHANGE_CONTENT, GADGET_ID_NONE, // align three rows
&custom_element_change.target_content.e[0][0], 3, 3,
- NULL, NULL, NULL, "new extended elements after change"
+ NULL, NULL, NULL, NULL, "new extended elements after change"
},
// ---------- custom change trigger (element causing change) ----------------
0, ED_AREA_1X1_SETTINGS_YOFF,
GADGET_ID_CUSTOM_CHANGE_TRIGGER, GADGET_ID_CHANGE_OTHER_ACTION,
&custom_element_change.initial_trigger_element, 1, 1,
- NULL, NULL, NULL, "other element triggering change"
+ NULL, NULL, NULL, NULL, "other element triggering change"
},
// ---------- custom change action (element used for action) ----------------
0, ED_AREA_1X1_SETTINGS_YOFF,
GADGET_ID_CUSTOM_CHANGE_ACTION, GADGET_ID_ACTION_ARG,
&custom_element_change.action_element, 1, 1,
- NULL, NULL, NULL, "element used as action parameter"
+ NULL, NULL, NULL, NULL, "element used as action parameter"
},
// ---------- group element content -----------------------------------------
ED_AREA_1X1_SETTINGS_XOFF, ED_AREA_1X1_SETTINGS_YOFF,
GADGET_ID_GROUP_CONTENT, GADGET_ID_NONE,
&group_element_info.element[0], MAX_ELEMENTS_IN_GROUP, 1,
- "content:", NULL, NULL, NULL
+ "content:", NULL, NULL, NULL, NULL
},
// ---------- random background (for random painting) -----------------------
0, ED_AREA_1X1_LSETTINGS_YOFF,
GADGET_ID_RANDOM_BACKGROUND, GADGET_ID_RANDOM_RESTRICTED,
&random_placement_background_element, 1, 1,
- NULL, NULL, NULL, "random placement background"
+ NULL, NULL, NULL, NULL, "random placement background"
},
};
int xoffset_below = getTextWidth(drawingarea_info[id].text_below, font_nr);
int x_left = gi->x - xoffset_left;
int x_right = gi->x + gi->width + ED_DRAWINGAREA_TEXT_DISTANCE;
+ int x_above = gi->x - ED_DRAWINGAREA_BORDER_SIZE;
int x_below = gi->x + (gi->width - xoffset_below) / 2;
int y_side = gi->y + (gi->height - font_height) / 2;
+ int y_above = gi->y - font_height - ED_DRAWINGAREA_TEXT_DISTANCE;
int y_below = gi->y + gi->height + ED_DRAWINGAREA_TEXT_DISTANCE;
if (drawingarea_info[id].text_left)
if (drawingarea_info[id].text_right)
DrawText(x_right, y_side, drawingarea_info[id].text_right, font_nr);
+ if (drawingarea_info[id].text_above)
+ DrawText(x_above, y_above, drawingarea_info[id].text_above, font_nr);
+
if (drawingarea_info[id].text_below)
DrawText(x_below, y_below, drawingarea_info[id].text_below, font_nr);
leveldir_current =
getTreeInfoFromIdentifier(leveldir_first, getLoginName());
+ // this may happen if "setup.internal.create_user_levelset" is FALSE
+ // or if file "levelinfo.conf" is missing in personal user level set
+ if (leveldir_current == NULL)
+ {
+ Request("Cannot find personal level set?!", REQ_CONFIRM);
+
+ leveldir_current = leveldir_former;
+
+ return FALSE;
+ }
+
// find unused level number
for (new_level_nr = leveldir_current->first_level; ; new_level_nr++)
{
HAS_CHANGE_EVENT(element, CE_SCORE_CHANGES) ? CE_SCORE_CHANGES :
HAS_CHANGE_EVENT(element, CE_VALUE_GETS_ZERO) ? CE_VALUE_GETS_ZERO :
HAS_CHANGE_EVENT(element, CE_SCORE_GETS_ZERO) ? CE_SCORE_GETS_ZERO :
+ HAS_CHANGE_EVENT(element, CE_CLICKED_BY_MOUSE) ? CE_CLICKED_BY_MOUSE :
+ HAS_CHANGE_EVENT(element, CE_PRESSED_BY_MOUSE) ? CE_PRESSED_BY_MOUSE :
custom_element_change.direct_action);
// set "change by other element action" selectbox help value
HAS_CHANGE_EVENT(element, CE_SCORE_CHANGES_OF_X) ? CE_SCORE_CHANGES_OF_X :
HAS_CHANGE_EVENT(element, CE_VALUE_GETS_ZERO_OF_X) ? CE_VALUE_GETS_ZERO_OF_X :
HAS_CHANGE_EVENT(element, CE_SCORE_GETS_ZERO_OF_X) ? CE_SCORE_GETS_ZERO_OF_X :
+ HAS_CHANGE_EVENT(element, CE_MOUSE_CLICKED_ON_X) ? CE_MOUSE_CLICKED_ON_X :
+ HAS_CHANGE_EVENT(element, CE_MOUSE_PRESSED_ON_X) ? CE_MOUSE_PRESSED_ON_X :
custom_element_change.other_action);
}
custom_element_change_events[CE_SCORE_CHANGES] = FALSE;
custom_element_change_events[CE_VALUE_GETS_ZERO] = FALSE;
custom_element_change_events[CE_SCORE_GETS_ZERO] = FALSE;
+ custom_element_change_events[CE_CLICKED_BY_MOUSE] = FALSE;
+ custom_element_change_events[CE_PRESSED_BY_MOUSE] = FALSE;
custom_element_change_events[custom_element_change.direct_action] =
custom_element_change_events[CE_BY_DIRECT_ACTION];
custom_element_change_events[CE_SCORE_CHANGES_OF_X] = FALSE;
custom_element_change_events[CE_VALUE_GETS_ZERO_OF_X] = FALSE;
custom_element_change_events[CE_SCORE_GETS_ZERO_OF_X] = FALSE;
+ custom_element_change_events[CE_MOUSE_CLICKED_ON_X] = FALSE;
+ custom_element_change_events[CE_MOUSE_PRESSED_ON_X] = FALSE;
custom_element_change_events[custom_element_change.other_action] =
custom_element_change_events[CE_BY_OTHER_ACTION];
DrawMagicBallContentAreas();
MapCheckbuttonGadget(ED_CHECKBUTTON_ID_RANDOM_BALL_CONTENT);
- MapCheckbuttonGadget(ED_CHECKBUTTON_ID_INITIAL_BALL_STATE);
+ MapCheckbuttonGadget(ED_CHECKBUTTON_ID_INITIAL_BALL_ACTIVE);
}
else if (properties_element == EL_EMC_ANDROID)
DrawAndroidElementArea(properties_element);