X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Feditor.c;h=e25ece3686be4a78e2e9b1d2b70cde66c87c686b;hb=652f2eebd3bac1458da0010bef1b1208c19649c7;hp=1fb196e4456dca06bbf6000fded528b698736083;hpb=b180608242f0190c6c8b31772e4dcfce2e9af47c;p=rocksndiamonds.git diff --git a/src/editor.c b/src/editor.c index 1fb196e4..e25ece36 100644 --- a/src/editor.c +++ b/src/editor.c @@ -156,13 +156,13 @@ /* yamyam content */ #define ED_AREA_YAMYAM_CONTENT_XPOS(n) (2 * MINI_TILEX + \ 5 * ((n) % 4) * MINI_TILEX) -#define ED_AREA_YAMYAM_CONTENT_YPOS(n) (17 * MINI_TILEY + \ +#define ED_AREA_YAMYAM_CONTENT_YPOS(n) (11 * ED_SETTINGS_YOFFSET + \ 6 * ((n) / 4) * MINI_TILEY) /* magic ball content */ #define ED_AREA_MAGIC_BALL_CONTENT_XPOS(n) (2 * MINI_TILEX + \ 5 * ((n) % 4) * MINI_TILEX) -#define ED_AREA_MAGIC_BALL_CONTENT_YPOS(n) (17 * MINI_TILEY + \ +#define ED_AREA_MAGIC_BALL_CONTENT_YPOS(n) (12 * ED_SETTINGS_YOFFSET + \ 6 * ((n) / 4) * MINI_TILEY) /* values for scrolling gadgets for drawing area */ @@ -277,7 +277,7 @@ #define ED_TEXTBUTTON_XSIZE ED_WIN_COUNT_XSIZE #define ED_TEXTBUTTON_YSIZE ED_WIN_COUNT_YSIZE -/* values for ClearEditorGadgetInfoText() and HandleGadgetInfoText() */ +/* values for ClearEditorGadgetInfoText() and HandleEditorGadgetInfoText() */ #define INFOTEXT_XPOS SX #define INFOTEXT_YPOS (SY + SYSIZE - MINI_TILEX + 2) #define INFOTEXT_XSIZE SXSIZE @@ -363,63 +363,66 @@ #define GADGET_ID_YAMYAM_CONTENT_DOWN (GADGET_ID_COUNTER_FIRST + 33) #define GADGET_ID_YAMYAM_CONTENT_TEXT (GADGET_ID_COUNTER_FIRST + 34) #define GADGET_ID_YAMYAM_CONTENT_UP (GADGET_ID_COUNTER_FIRST + 35) -#define GADGET_ID_ENVELOPE_XSIZE_DOWN (GADGET_ID_COUNTER_FIRST + 36) -#define GADGET_ID_ENVELOPE_XSIZE_TEXT (GADGET_ID_COUNTER_FIRST + 37) -#define GADGET_ID_ENVELOPE_XSIZE_UP (GADGET_ID_COUNTER_FIRST + 38) -#define GADGET_ID_ENVELOPE_YSIZE_DOWN (GADGET_ID_COUNTER_FIRST + 39) -#define GADGET_ID_ENVELOPE_YSIZE_TEXT (GADGET_ID_COUNTER_FIRST + 40) -#define GADGET_ID_ENVELOPE_YSIZE_UP (GADGET_ID_COUNTER_FIRST + 41) -#define GADGET_ID_CUSTOM_SCORE_DOWN (GADGET_ID_COUNTER_FIRST + 42) -#define GADGET_ID_CUSTOM_SCORE_TEXT (GADGET_ID_COUNTER_FIRST + 43) -#define GADGET_ID_CUSTOM_SCORE_UP (GADGET_ID_COUNTER_FIRST + 44) -#define GADGET_ID_CUSTOM_GEMCOUNT_DOWN (GADGET_ID_COUNTER_FIRST + 45) -#define GADGET_ID_CUSTOM_GEMCOUNT_TEXT (GADGET_ID_COUNTER_FIRST + 46) -#define GADGET_ID_CUSTOM_GEMCOUNT_UP (GADGET_ID_COUNTER_FIRST + 47) -#define GADGET_ID_CUSTOM_VALUE_FIX_DOWN (GADGET_ID_COUNTER_FIRST + 48) -#define GADGET_ID_CUSTOM_VALUE_FIX_TEXT (GADGET_ID_COUNTER_FIRST + 49) -#define GADGET_ID_CUSTOM_VALUE_FIX_UP (GADGET_ID_COUNTER_FIRST + 50) -#define GADGET_ID_CUSTOM_VALUE_RND_DOWN (GADGET_ID_COUNTER_FIRST + 51) -#define GADGET_ID_CUSTOM_VALUE_RND_TEXT (GADGET_ID_COUNTER_FIRST + 52) -#define GADGET_ID_CUSTOM_VALUE_RND_UP (GADGET_ID_COUNTER_FIRST + 53) -#define GADGET_ID_PUSH_DELAY_FIX_DOWN (GADGET_ID_COUNTER_FIRST + 54) -#define GADGET_ID_PUSH_DELAY_FIX_TEXT (GADGET_ID_COUNTER_FIRST + 55) -#define GADGET_ID_PUSH_DELAY_FIX_UP (GADGET_ID_COUNTER_FIRST + 56) -#define GADGET_ID_PUSH_DELAY_RND_DOWN (GADGET_ID_COUNTER_FIRST + 57) -#define GADGET_ID_PUSH_DELAY_RND_TEXT (GADGET_ID_COUNTER_FIRST + 58) -#define GADGET_ID_PUSH_DELAY_RND_UP (GADGET_ID_COUNTER_FIRST + 59) -#define GADGET_ID_DROP_DELAY_FIX_DOWN (GADGET_ID_COUNTER_FIRST + 60) -#define GADGET_ID_DROP_DELAY_FIX_TEXT (GADGET_ID_COUNTER_FIRST + 61) -#define GADGET_ID_DROP_DELAY_FIX_UP (GADGET_ID_COUNTER_FIRST + 62) -#define GADGET_ID_DROP_DELAY_RND_DOWN (GADGET_ID_COUNTER_FIRST + 63) -#define GADGET_ID_DROP_DELAY_RND_TEXT (GADGET_ID_COUNTER_FIRST + 64) -#define GADGET_ID_DROP_DELAY_RND_UP (GADGET_ID_COUNTER_FIRST + 65) -#define GADGET_ID_MOVE_DELAY_FIX_DOWN (GADGET_ID_COUNTER_FIRST + 66) -#define GADGET_ID_MOVE_DELAY_FIX_TEXT (GADGET_ID_COUNTER_FIRST + 67) -#define GADGET_ID_MOVE_DELAY_FIX_UP (GADGET_ID_COUNTER_FIRST + 68) -#define GADGET_ID_MOVE_DELAY_RND_DOWN (GADGET_ID_COUNTER_FIRST + 69) -#define GADGET_ID_MOVE_DELAY_RND_TEXT (GADGET_ID_COUNTER_FIRST + 70) -#define GADGET_ID_MOVE_DELAY_RND_UP (GADGET_ID_COUNTER_FIRST + 71) -#define GADGET_ID_EXPLOSION_DELAY_DOWN (GADGET_ID_COUNTER_FIRST + 72) -#define GADGET_ID_EXPLOSION_DELAY_TEXT (GADGET_ID_COUNTER_FIRST + 73) -#define GADGET_ID_EXPLOSION_DELAY_UP (GADGET_ID_COUNTER_FIRST + 74) -#define GADGET_ID_IGNITION_DELAY_DOWN (GADGET_ID_COUNTER_FIRST + 75) -#define GADGET_ID_IGNITION_DELAY_TEXT (GADGET_ID_COUNTER_FIRST + 76) -#define GADGET_ID_IGNITION_DELAY_UP (GADGET_ID_COUNTER_FIRST + 77) -#define GADGET_ID_CHANGE_DELAY_FIX_DOWN (GADGET_ID_COUNTER_FIRST + 78) -#define GADGET_ID_CHANGE_DELAY_FIX_TEXT (GADGET_ID_COUNTER_FIRST + 79) -#define GADGET_ID_CHANGE_DELAY_FIX_UP (GADGET_ID_COUNTER_FIRST + 80) -#define GADGET_ID_CHANGE_DELAY_RND_DOWN (GADGET_ID_COUNTER_FIRST + 81) -#define GADGET_ID_CHANGE_DELAY_RND_TEXT (GADGET_ID_COUNTER_FIRST + 82) -#define GADGET_ID_CHANGE_DELAY_RND_UP (GADGET_ID_COUNTER_FIRST + 83) -#define GADGET_ID_CHANGE_CONT_RND_DOWN (GADGET_ID_COUNTER_FIRST + 84) -#define GADGET_ID_CHANGE_CONT_RND_TEXT (GADGET_ID_COUNTER_FIRST + 85) -#define GADGET_ID_CHANGE_CONT_RND_UP (GADGET_ID_COUNTER_FIRST + 86) -#define GADGET_ID_GROUP_CONTENT_DOWN (GADGET_ID_COUNTER_FIRST + 87) -#define GADGET_ID_GROUP_CONTENT_TEXT (GADGET_ID_COUNTER_FIRST + 88) -#define GADGET_ID_GROUP_CONTENT_UP (GADGET_ID_COUNTER_FIRST + 89) +#define GADGET_ID_BALL_CONTENT_DOWN (GADGET_ID_COUNTER_FIRST + 36) +#define GADGET_ID_BALL_CONTENT_TEXT (GADGET_ID_COUNTER_FIRST + 37) +#define GADGET_ID_BALL_CONTENT_UP (GADGET_ID_COUNTER_FIRST + 38) +#define GADGET_ID_ENVELOPE_XSIZE_DOWN (GADGET_ID_COUNTER_FIRST + 39) +#define GADGET_ID_ENVELOPE_XSIZE_TEXT (GADGET_ID_COUNTER_FIRST + 40) +#define GADGET_ID_ENVELOPE_XSIZE_UP (GADGET_ID_COUNTER_FIRST + 41) +#define GADGET_ID_ENVELOPE_YSIZE_DOWN (GADGET_ID_COUNTER_FIRST + 42) +#define GADGET_ID_ENVELOPE_YSIZE_TEXT (GADGET_ID_COUNTER_FIRST + 43) +#define GADGET_ID_ENVELOPE_YSIZE_UP (GADGET_ID_COUNTER_FIRST + 44) +#define GADGET_ID_CUSTOM_SCORE_DOWN (GADGET_ID_COUNTER_FIRST + 45) +#define GADGET_ID_CUSTOM_SCORE_TEXT (GADGET_ID_COUNTER_FIRST + 46) +#define GADGET_ID_CUSTOM_SCORE_UP (GADGET_ID_COUNTER_FIRST + 47) +#define GADGET_ID_CUSTOM_GEMCOUNT_DOWN (GADGET_ID_COUNTER_FIRST + 48) +#define GADGET_ID_CUSTOM_GEMCOUNT_TEXT (GADGET_ID_COUNTER_FIRST + 49) +#define GADGET_ID_CUSTOM_GEMCOUNT_UP (GADGET_ID_COUNTER_FIRST + 50) +#define GADGET_ID_CUSTOM_VALUE_FIX_DOWN (GADGET_ID_COUNTER_FIRST + 51) +#define GADGET_ID_CUSTOM_VALUE_FIX_TEXT (GADGET_ID_COUNTER_FIRST + 52) +#define GADGET_ID_CUSTOM_VALUE_FIX_UP (GADGET_ID_COUNTER_FIRST + 53) +#define GADGET_ID_CUSTOM_VALUE_RND_DOWN (GADGET_ID_COUNTER_FIRST + 54) +#define GADGET_ID_CUSTOM_VALUE_RND_TEXT (GADGET_ID_COUNTER_FIRST + 55) +#define GADGET_ID_CUSTOM_VALUE_RND_UP (GADGET_ID_COUNTER_FIRST + 56) +#define GADGET_ID_PUSH_DELAY_FIX_DOWN (GADGET_ID_COUNTER_FIRST + 57) +#define GADGET_ID_PUSH_DELAY_FIX_TEXT (GADGET_ID_COUNTER_FIRST + 58) +#define GADGET_ID_PUSH_DELAY_FIX_UP (GADGET_ID_COUNTER_FIRST + 59) +#define GADGET_ID_PUSH_DELAY_RND_DOWN (GADGET_ID_COUNTER_FIRST + 60) +#define GADGET_ID_PUSH_DELAY_RND_TEXT (GADGET_ID_COUNTER_FIRST + 61) +#define GADGET_ID_PUSH_DELAY_RND_UP (GADGET_ID_COUNTER_FIRST + 62) +#define GADGET_ID_DROP_DELAY_FIX_DOWN (GADGET_ID_COUNTER_FIRST + 63) +#define GADGET_ID_DROP_DELAY_FIX_TEXT (GADGET_ID_COUNTER_FIRST + 64) +#define GADGET_ID_DROP_DELAY_FIX_UP (GADGET_ID_COUNTER_FIRST + 65) +#define GADGET_ID_DROP_DELAY_RND_DOWN (GADGET_ID_COUNTER_FIRST + 66) +#define GADGET_ID_DROP_DELAY_RND_TEXT (GADGET_ID_COUNTER_FIRST + 67) +#define GADGET_ID_DROP_DELAY_RND_UP (GADGET_ID_COUNTER_FIRST + 68) +#define GADGET_ID_MOVE_DELAY_FIX_DOWN (GADGET_ID_COUNTER_FIRST + 69) +#define GADGET_ID_MOVE_DELAY_FIX_TEXT (GADGET_ID_COUNTER_FIRST + 70) +#define GADGET_ID_MOVE_DELAY_FIX_UP (GADGET_ID_COUNTER_FIRST + 71) +#define GADGET_ID_MOVE_DELAY_RND_DOWN (GADGET_ID_COUNTER_FIRST + 72) +#define GADGET_ID_MOVE_DELAY_RND_TEXT (GADGET_ID_COUNTER_FIRST + 73) +#define GADGET_ID_MOVE_DELAY_RND_UP (GADGET_ID_COUNTER_FIRST + 74) +#define GADGET_ID_EXPLOSION_DELAY_DOWN (GADGET_ID_COUNTER_FIRST + 75) +#define GADGET_ID_EXPLOSION_DELAY_TEXT (GADGET_ID_COUNTER_FIRST + 76) +#define GADGET_ID_EXPLOSION_DELAY_UP (GADGET_ID_COUNTER_FIRST + 77) +#define GADGET_ID_IGNITION_DELAY_DOWN (GADGET_ID_COUNTER_FIRST + 78) +#define GADGET_ID_IGNITION_DELAY_TEXT (GADGET_ID_COUNTER_FIRST + 79) +#define GADGET_ID_IGNITION_DELAY_UP (GADGET_ID_COUNTER_FIRST + 80) +#define GADGET_ID_CHANGE_DELAY_FIX_DOWN (GADGET_ID_COUNTER_FIRST + 81) +#define GADGET_ID_CHANGE_DELAY_FIX_TEXT (GADGET_ID_COUNTER_FIRST + 82) +#define GADGET_ID_CHANGE_DELAY_FIX_UP (GADGET_ID_COUNTER_FIRST + 83) +#define GADGET_ID_CHANGE_DELAY_RND_DOWN (GADGET_ID_COUNTER_FIRST + 84) +#define GADGET_ID_CHANGE_DELAY_RND_TEXT (GADGET_ID_COUNTER_FIRST + 85) +#define GADGET_ID_CHANGE_DELAY_RND_UP (GADGET_ID_COUNTER_FIRST + 86) +#define GADGET_ID_CHANGE_CONT_RND_DOWN (GADGET_ID_COUNTER_FIRST + 87) +#define GADGET_ID_CHANGE_CONT_RND_TEXT (GADGET_ID_COUNTER_FIRST + 88) +#define GADGET_ID_CHANGE_CONT_RND_UP (GADGET_ID_COUNTER_FIRST + 89) +#define GADGET_ID_GROUP_CONTENT_DOWN (GADGET_ID_COUNTER_FIRST + 90) +#define GADGET_ID_GROUP_CONTENT_TEXT (GADGET_ID_COUNTER_FIRST + 91) +#define GADGET_ID_GROUP_CONTENT_UP (GADGET_ID_COUNTER_FIRST + 92) /* drawing area identifiers */ -#define GADGET_ID_DRAWING_AREA_FIRST (GADGET_ID_COUNTER_FIRST + 90) +#define GADGET_ID_DRAWING_AREA_FIRST (GADGET_ID_COUNTER_FIRST + 93) #define GADGET_ID_DRAWING_LEVEL (GADGET_ID_DRAWING_AREA_FIRST + 0) #define GADGET_ID_YAMYAM_CONTENT_0 (GADGET_ID_DRAWING_AREA_FIRST + 1) @@ -542,45 +545,47 @@ #define GADGET_ID_EM_SLIPPERY_GEMS (GADGET_ID_CHECKBUTTON_FIRST + 5) #define GADGET_ID_USE_SPRING_BUG (GADGET_ID_CHECKBUTTON_FIRST + 6) #define GADGET_ID_USE_TIME_ORB_BUG (GADGET_ID_CHECKBUTTON_FIRST + 7) -#define GADGET_ID_GROW_INTO_DIGGABLE (GADGET_ID_CHECKBUTTON_FIRST + 8) -#define GADGET_ID_DOUBLE_SPEED (GADGET_ID_CHECKBUTTON_FIRST + 9) -#define GADGET_ID_BLOCK_SNAP_FIELD (GADGET_ID_CHECKBUTTON_FIRST + 10) -#define GADGET_ID_BLOCK_LAST_FIELD (GADGET_ID_CHECKBUTTON_FIRST + 11) -#define GADGET_ID_SP_BLOCK_LAST_FIELD (GADGET_ID_CHECKBUTTON_FIRST + 12) -#define GADGET_ID_INSTANT_RELOCATION (GADGET_ID_CHECKBUTTON_FIRST + 13) -#define GADGET_ID_USE_START_ELEMENT (GADGET_ID_CHECKBUTTON_FIRST + 14) -#define GADGET_ID_CAN_PASS_TO_WALKABLE (GADGET_ID_CHECKBUTTON_FIRST + 15) -#define GADGET_ID_CAN_FALL_INTO_ACID (GADGET_ID_CHECKBUTTON_FIRST + 16) -#define GADGET_ID_CAN_MOVE_INTO_ACID (GADGET_ID_CHECKBUTTON_FIRST + 17) -#define GADGET_ID_DONT_COLLIDE_WITH (GADGET_ID_CHECKBUTTON_FIRST + 18) -#define GADGET_ID_CUSTOM_INDESTRUCTIBLE (GADGET_ID_CHECKBUTTON_FIRST + 19) -#define GADGET_ID_CUSTOM_CAN_EXPLODE (GADGET_ID_CHECKBUTTON_FIRST + 20) -#define GADGET_ID_CUSTOM_EXPLODE_FIRE (GADGET_ID_CHECKBUTTON_FIRST + 21) -#define GADGET_ID_CUSTOM_EXPLODE_SMASH (GADGET_ID_CHECKBUTTON_FIRST + 22) -#define GADGET_ID_CUSTOM_EXPLODE_IMPACT (GADGET_ID_CHECKBUTTON_FIRST + 23) -#define GADGET_ID_CUSTOM_WALK_TO_OBJECT (GADGET_ID_CHECKBUTTON_FIRST + 24) -#define GADGET_ID_CUSTOM_DEADLY (GADGET_ID_CHECKBUTTON_FIRST + 25) -#define GADGET_ID_CUSTOM_CAN_MOVE (GADGET_ID_CHECKBUTTON_FIRST + 26) -#define GADGET_ID_CUSTOM_CAN_FALL (GADGET_ID_CHECKBUTTON_FIRST + 27) -#define GADGET_ID_CUSTOM_CAN_SMASH (GADGET_ID_CHECKBUTTON_FIRST + 28) -#define GADGET_ID_CUSTOM_SLIPPERY (GADGET_ID_CHECKBUTTON_FIRST + 29) -#define GADGET_ID_CUSTOM_ACCESSIBLE (GADGET_ID_CHECKBUTTON_FIRST + 30) -#define GADGET_ID_CUSTOM_GRAV_REACHABLE (GADGET_ID_CHECKBUTTON_FIRST + 31) -#define GADGET_ID_CUSTOM_USE_LAST_VALUE (GADGET_ID_CHECKBUTTON_FIRST + 32) -#define GADGET_ID_CUSTOM_USE_GRAPHIC (GADGET_ID_CHECKBUTTON_FIRST + 33) -#define GADGET_ID_CUSTOM_USE_TEMPLATE (GADGET_ID_CHECKBUTTON_FIRST + 34) -#define GADGET_ID_CUSTOM_CAN_CHANGE (GADGET_ID_CHECKBUTTON_FIRST + 35) -#define GADGET_ID_CHANGE_USE_CONTENT (GADGET_ID_CHECKBUTTON_FIRST + 36) -#define GADGET_ID_CHANGE_USE_EXPLOSION (GADGET_ID_CHECKBUTTON_FIRST + 37) -#define GADGET_ID_CHANGE_ONLY_COMPLETE (GADGET_ID_CHECKBUTTON_FIRST + 38) -#define GADGET_ID_CHANGE_USE_RANDOM (GADGET_ID_CHECKBUTTON_FIRST + 39) -#define GADGET_ID_CHANGE_HAS_ACTION (GADGET_ID_CHECKBUTTON_FIRST + 40) -#define GADGET_ID_CHANGE_DELAY (GADGET_ID_CHECKBUTTON_FIRST + 41) -#define GADGET_ID_CHANGE_BY_DIRECT_ACT (GADGET_ID_CHECKBUTTON_FIRST + 42) -#define GADGET_ID_CHANGE_BY_OTHER_ACT (GADGET_ID_CHECKBUTTON_FIRST + 43) +#define GADGET_ID_RANDOM_BALL_CONTENT (GADGET_ID_CHECKBUTTON_FIRST + 8) +#define GADGET_ID_INITIAL_BALL_STATE (GADGET_ID_CHECKBUTTON_FIRST + 9) +#define GADGET_ID_GROW_INTO_DIGGABLE (GADGET_ID_CHECKBUTTON_FIRST + 10) +#define GADGET_ID_DOUBLE_SPEED (GADGET_ID_CHECKBUTTON_FIRST + 11) +#define GADGET_ID_BLOCK_SNAP_FIELD (GADGET_ID_CHECKBUTTON_FIRST + 12) +#define GADGET_ID_BLOCK_LAST_FIELD (GADGET_ID_CHECKBUTTON_FIRST + 13) +#define GADGET_ID_SP_BLOCK_LAST_FIELD (GADGET_ID_CHECKBUTTON_FIRST + 14) +#define GADGET_ID_INSTANT_RELOCATION (GADGET_ID_CHECKBUTTON_FIRST + 15) +#define GADGET_ID_USE_START_ELEMENT (GADGET_ID_CHECKBUTTON_FIRST + 16) +#define GADGET_ID_CAN_PASS_TO_WALKABLE (GADGET_ID_CHECKBUTTON_FIRST + 17) +#define GADGET_ID_CAN_FALL_INTO_ACID (GADGET_ID_CHECKBUTTON_FIRST + 18) +#define GADGET_ID_CAN_MOVE_INTO_ACID (GADGET_ID_CHECKBUTTON_FIRST + 19) +#define GADGET_ID_DONT_COLLIDE_WITH (GADGET_ID_CHECKBUTTON_FIRST + 20) +#define GADGET_ID_CUSTOM_INDESTRUCTIBLE (GADGET_ID_CHECKBUTTON_FIRST + 21) +#define GADGET_ID_CUSTOM_CAN_EXPLODE (GADGET_ID_CHECKBUTTON_FIRST + 22) +#define GADGET_ID_CUSTOM_EXPLODE_FIRE (GADGET_ID_CHECKBUTTON_FIRST + 23) +#define GADGET_ID_CUSTOM_EXPLODE_SMASH (GADGET_ID_CHECKBUTTON_FIRST + 24) +#define GADGET_ID_CUSTOM_EXPLODE_IMPACT (GADGET_ID_CHECKBUTTON_FIRST + 25) +#define GADGET_ID_CUSTOM_WALK_TO_OBJECT (GADGET_ID_CHECKBUTTON_FIRST + 26) +#define GADGET_ID_CUSTOM_DEADLY (GADGET_ID_CHECKBUTTON_FIRST + 27) +#define GADGET_ID_CUSTOM_CAN_MOVE (GADGET_ID_CHECKBUTTON_FIRST + 28) +#define GADGET_ID_CUSTOM_CAN_FALL (GADGET_ID_CHECKBUTTON_FIRST + 29) +#define GADGET_ID_CUSTOM_CAN_SMASH (GADGET_ID_CHECKBUTTON_FIRST + 30) +#define GADGET_ID_CUSTOM_SLIPPERY (GADGET_ID_CHECKBUTTON_FIRST + 31) +#define GADGET_ID_CUSTOM_ACCESSIBLE (GADGET_ID_CHECKBUTTON_FIRST + 32) +#define GADGET_ID_CUSTOM_GRAV_REACHABLE (GADGET_ID_CHECKBUTTON_FIRST + 33) +#define GADGET_ID_CUSTOM_USE_LAST_VALUE (GADGET_ID_CHECKBUTTON_FIRST + 34) +#define GADGET_ID_CUSTOM_USE_GRAPHIC (GADGET_ID_CHECKBUTTON_FIRST + 35) +#define GADGET_ID_CUSTOM_USE_TEMPLATE (GADGET_ID_CHECKBUTTON_FIRST + 36) +#define GADGET_ID_CUSTOM_CAN_CHANGE (GADGET_ID_CHECKBUTTON_FIRST + 37) +#define GADGET_ID_CHANGE_USE_CONTENT (GADGET_ID_CHECKBUTTON_FIRST + 38) +#define GADGET_ID_CHANGE_USE_EXPLOSION (GADGET_ID_CHECKBUTTON_FIRST + 39) +#define GADGET_ID_CHANGE_ONLY_COMPLETE (GADGET_ID_CHECKBUTTON_FIRST + 40) +#define GADGET_ID_CHANGE_USE_RANDOM (GADGET_ID_CHECKBUTTON_FIRST + 41) +#define GADGET_ID_CHANGE_HAS_ACTION (GADGET_ID_CHECKBUTTON_FIRST + 42) +#define GADGET_ID_CHANGE_DELAY (GADGET_ID_CHECKBUTTON_FIRST + 43) +#define GADGET_ID_CHANGE_BY_DIRECT_ACT (GADGET_ID_CHECKBUTTON_FIRST + 44) +#define GADGET_ID_CHANGE_BY_OTHER_ACT (GADGET_ID_CHECKBUTTON_FIRST + 45) /* gadgets for buttons in element list */ -#define GADGET_ID_ELEMENTLIST_FIRST (GADGET_ID_CHECKBUTTON_FIRST + 44) +#define GADGET_ID_ELEMENTLIST_FIRST (GADGET_ID_CHECKBUTTON_FIRST + 46) #define GADGET_ID_ELEMENTLIST_LAST (GADGET_ID_ELEMENTLIST_FIRST + \ ED_NUM_ELEMENTLIST_BUTTONS - 1) @@ -604,26 +609,27 @@ #define ED_COUNTER_ID_ELEMENT_VALUE3 9 #define ED_COUNTER_ID_ELEMENT_VALUE4 10 #define ED_COUNTER_ID_YAMYAM_CONTENT 11 -#define ED_COUNTER_ID_ENVELOPE_XSIZE 12 -#define ED_COUNTER_ID_ENVELOPE_YSIZE 13 -#define ED_COUNTER_ID_CUSTOM_SCORE 14 -#define ED_COUNTER_ID_CUSTOM_GEMCOUNT 15 -#define ED_COUNTER_ID_CUSTOM_VALUE_FIX 16 -#define ED_COUNTER_ID_CUSTOM_VALUE_RND 17 -#define ED_COUNTER_ID_PUSH_DELAY_FIX 18 -#define ED_COUNTER_ID_PUSH_DELAY_RND 19 -#define ED_COUNTER_ID_DROP_DELAY_FIX 20 -#define ED_COUNTER_ID_DROP_DELAY_RND 21 -#define ED_COUNTER_ID_MOVE_DELAY_FIX 22 -#define ED_COUNTER_ID_MOVE_DELAY_RND 23 -#define ED_COUNTER_ID_EXPLOSION_DELAY 24 -#define ED_COUNTER_ID_IGNITION_DELAY 25 -#define ED_COUNTER_ID_GROUP_CONTENT 26 -#define ED_COUNTER_ID_CHANGE_DELAY_FIX 27 -#define ED_COUNTER_ID_CHANGE_DELAY_RND 28 -#define ED_COUNTER_ID_CHANGE_CONT_RND 29 - -#define ED_NUM_COUNTERBUTTONS 30 +#define ED_COUNTER_ID_BALL_CONTENT 12 +#define ED_COUNTER_ID_ENVELOPE_XSIZE 13 +#define ED_COUNTER_ID_ENVELOPE_YSIZE 14 +#define ED_COUNTER_ID_CUSTOM_SCORE 15 +#define ED_COUNTER_ID_CUSTOM_GEMCOUNT 16 +#define ED_COUNTER_ID_CUSTOM_VALUE_FIX 17 +#define ED_COUNTER_ID_CUSTOM_VALUE_RND 18 +#define ED_COUNTER_ID_PUSH_DELAY_FIX 19 +#define ED_COUNTER_ID_PUSH_DELAY_RND 20 +#define ED_COUNTER_ID_DROP_DELAY_FIX 21 +#define ED_COUNTER_ID_DROP_DELAY_RND 22 +#define ED_COUNTER_ID_MOVE_DELAY_FIX 23 +#define ED_COUNTER_ID_MOVE_DELAY_RND 24 +#define ED_COUNTER_ID_EXPLOSION_DELAY 25 +#define ED_COUNTER_ID_IGNITION_DELAY 26 +#define ED_COUNTER_ID_GROUP_CONTENT 27 +#define ED_COUNTER_ID_CHANGE_DELAY_FIX 28 +#define ED_COUNTER_ID_CHANGE_DELAY_RND 29 +#define ED_COUNTER_ID_CHANGE_CONT_RND 30 + +#define ED_NUM_COUNTERBUTTONS 31 #define ED_COUNTER_ID_LEVEL_FIRST ED_COUNTER_ID_LEVEL_XSIZE #define ED_COUNTER_ID_LEVEL_LAST ED_COUNTER_ID_LEVEL_RANDOM @@ -760,44 +766,46 @@ #define ED_CHECKBUTTON_ID_EM_SLIPPERY_GEMS 3 #define ED_CHECKBUTTON_ID_USE_SPRING_BUG 4 #define ED_CHECKBUTTON_ID_USE_TIME_ORB_BUG 5 -#define ED_CHECKBUTTON_ID_GROW_INTO_DIGGABLE 6 -#define ED_CHECKBUTTON_ID_DOUBLE_SPEED 7 -#define ED_CHECKBUTTON_ID_BLOCK_SNAP_FIELD 8 -#define ED_CHECKBUTTON_ID_BLOCK_LAST_FIELD 9 -#define ED_CHECKBUTTON_ID_SP_BLOCK_LAST_FIELD 10 -#define ED_CHECKBUTTON_ID_INSTANT_RELOCATION 11 -#define ED_CHECKBUTTON_ID_USE_START_ELEMENT 12 -#define ED_CHECKBUTTON_ID_CAN_PASS_TO_WALKABLE 13 -#define ED_CHECKBUTTON_ID_CAN_FALL_INTO_ACID 14 -#define ED_CHECKBUTTON_ID_CAN_MOVE_INTO_ACID 15 -#define ED_CHECKBUTTON_ID_DONT_COLLIDE_WITH 16 -#define ED_CHECKBUTTON_ID_CUSTOM_USE_GRAPHIC 17 -#define ED_CHECKBUTTON_ID_CUSTOM_USE_TEMPLATE 18 -#define ED_CHECKBUTTON_ID_CUSTOM_ACCESSIBLE 19 -#define ED_CHECKBUTTON_ID_CUSTOM_GRAV_REACHABLE 20 -#define ED_CHECKBUTTON_ID_CUSTOM_USE_LAST_VALUE 21 -#define ED_CHECKBUTTON_ID_CUSTOM_WALK_TO_OBJECT 22 -#define ED_CHECKBUTTON_ID_CUSTOM_INDESTRUCTIBLE 23 -#define ED_CHECKBUTTON_ID_CUSTOM_CAN_MOVE 24 -#define ED_CHECKBUTTON_ID_CUSTOM_CAN_FALL 25 -#define ED_CHECKBUTTON_ID_CUSTOM_CAN_SMASH 26 -#define ED_CHECKBUTTON_ID_CUSTOM_SLIPPERY 27 -#define ED_CHECKBUTTON_ID_CUSTOM_DEADLY 28 -#define ED_CHECKBUTTON_ID_CUSTOM_CAN_EXPLODE 29 -#define ED_CHECKBUTTON_ID_CUSTOM_EXPLODE_FIRE 30 -#define ED_CHECKBUTTON_ID_CUSTOM_EXPLODE_SMASH 31 -#define ED_CHECKBUTTON_ID_CUSTOM_EXPLODE_IMPACT 32 -#define ED_CHECKBUTTON_ID_CUSTOM_CAN_CHANGE 33 -#define ED_CHECKBUTTON_ID_CHANGE_DELAY 34 -#define ED_CHECKBUTTON_ID_CHANGE_BY_DIRECT_ACT 35 -#define ED_CHECKBUTTON_ID_CHANGE_BY_OTHER_ACT 36 -#define ED_CHECKBUTTON_ID_CHANGE_USE_EXPLOSION 37 -#define ED_CHECKBUTTON_ID_CHANGE_USE_CONTENT 38 -#define ED_CHECKBUTTON_ID_CHANGE_ONLY_COMPLETE 39 -#define ED_CHECKBUTTON_ID_CHANGE_USE_RANDOM 40 -#define ED_CHECKBUTTON_ID_CHANGE_HAS_ACTION 41 - -#define ED_NUM_CHECKBUTTONS 42 +#define ED_CHECKBUTTON_ID_RANDOM_BALL_CONTENT 6 +#define ED_CHECKBUTTON_ID_INITIAL_BALL_STATE 7 +#define ED_CHECKBUTTON_ID_GROW_INTO_DIGGABLE 8 +#define ED_CHECKBUTTON_ID_DOUBLE_SPEED 9 +#define ED_CHECKBUTTON_ID_BLOCK_SNAP_FIELD 10 +#define ED_CHECKBUTTON_ID_BLOCK_LAST_FIELD 11 +#define ED_CHECKBUTTON_ID_SP_BLOCK_LAST_FIELD 12 +#define ED_CHECKBUTTON_ID_INSTANT_RELOCATION 13 +#define ED_CHECKBUTTON_ID_USE_START_ELEMENT 14 +#define ED_CHECKBUTTON_ID_CAN_PASS_TO_WALKABLE 15 +#define ED_CHECKBUTTON_ID_CAN_FALL_INTO_ACID 16 +#define ED_CHECKBUTTON_ID_CAN_MOVE_INTO_ACID 17 +#define ED_CHECKBUTTON_ID_DONT_COLLIDE_WITH 18 +#define ED_CHECKBUTTON_ID_CUSTOM_USE_GRAPHIC 19 +#define ED_CHECKBUTTON_ID_CUSTOM_USE_TEMPLATE 20 +#define ED_CHECKBUTTON_ID_CUSTOM_ACCESSIBLE 21 +#define ED_CHECKBUTTON_ID_CUSTOM_GRAV_REACHABLE 22 +#define ED_CHECKBUTTON_ID_CUSTOM_USE_LAST_VALUE 23 +#define ED_CHECKBUTTON_ID_CUSTOM_WALK_TO_OBJECT 24 +#define ED_CHECKBUTTON_ID_CUSTOM_INDESTRUCTIBLE 25 +#define ED_CHECKBUTTON_ID_CUSTOM_CAN_MOVE 26 +#define ED_CHECKBUTTON_ID_CUSTOM_CAN_FALL 27 +#define ED_CHECKBUTTON_ID_CUSTOM_CAN_SMASH 28 +#define ED_CHECKBUTTON_ID_CUSTOM_SLIPPERY 29 +#define ED_CHECKBUTTON_ID_CUSTOM_DEADLY 30 +#define ED_CHECKBUTTON_ID_CUSTOM_CAN_EXPLODE 31 +#define ED_CHECKBUTTON_ID_CUSTOM_EXPLODE_FIRE 32 +#define ED_CHECKBUTTON_ID_CUSTOM_EXPLODE_SMASH 33 +#define ED_CHECKBUTTON_ID_CUSTOM_EXPLODE_IMPACT 34 +#define ED_CHECKBUTTON_ID_CUSTOM_CAN_CHANGE 35 +#define ED_CHECKBUTTON_ID_CHANGE_DELAY 36 +#define ED_CHECKBUTTON_ID_CHANGE_BY_DIRECT_ACT 37 +#define ED_CHECKBUTTON_ID_CHANGE_BY_OTHER_ACT 38 +#define ED_CHECKBUTTON_ID_CHANGE_USE_EXPLOSION 39 +#define ED_CHECKBUTTON_ID_CHANGE_USE_CONTENT 40 +#define ED_CHECKBUTTON_ID_CHANGE_ONLY_COMPLETE 41 +#define ED_CHECKBUTTON_ID_CHANGE_USE_RANDOM 42 +#define ED_CHECKBUTTON_ID_CHANGE_HAS_ACTION 43 + +#define ED_NUM_CHECKBUTTONS 44 #define ED_CHECKBUTTON_ID_LEVEL_FIRST ED_CHECKBUTTON_ID_INITIAL_GRAVITY #define ED_CHECKBUTTON_ID_LEVEL_LAST ED_CHECKBUTTON_ID_RANDOM_RESTRICTED @@ -1076,6 +1084,14 @@ static struct &level.num_yamyam_contents, NULL, NULL, "number of content areas" }, + { + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(4), + MIN_ELEMENT_CONTENTS, MAX_ELEMENT_CONTENTS, + GADGET_ID_BALL_CONTENT_DOWN, GADGET_ID_BALL_CONTENT_UP, + GADGET_ID_BALL_CONTENT_TEXT, GADGET_ID_NONE, + &level.num_ball_contents, + NULL, NULL, "number of content areas" + }, { ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(0), MIN_ENVELOPE_XSIZE, MAX_ENVELOPE_XSIZE, @@ -2388,6 +2404,20 @@ static struct NULL, "use time orb bug", "use odd time orb behaviour" }, + { + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(2), + GADGET_ID_RANDOM_BALL_CONTENT, GADGET_ID_NONE, + &level.ball_random, + NULL, + "create single random element", "only create one element from content" + }, + { + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(1), + GADGET_ID_INITIAL_BALL_STATE, GADGET_ID_NONE, + &level.ball_state_initial, + NULL, + "magic ball initially activated", "activate magic ball after level start" + }, { ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(0), GADGET_ID_GROW_INTO_DIGGABLE, GADGET_ID_NONE, @@ -2907,6 +2937,7 @@ static void HandleRadiobuttons(struct GadgetInfo *); static void HandleCheckbuttons(struct GadgetInfo *); static void HandleControlButtons(struct GadgetInfo *); static void HandleDrawingAreaInfo(struct GadgetInfo *); +static void PrintEditorGadgetInfoText(struct GadgetInfo *); static struct GadgetInfo *level_editor_gadget[NUM_EDITOR_GADGETS]; static int right_gadget_border[NUM_EDITOR_GADGETS]; @@ -2928,6 +2959,12 @@ static int element_shift = 0; static int editor_hl_boulderdash[] = { + EL_INTERNAL_CASCADE_BD_ACTIVE, + EL_CHAR('B'), + EL_CHAR('D'), + EL_EMPTY, + +#if 0 EL_CHAR('B'), EL_CHAR('O'), EL_CHAR('U'), @@ -2942,6 +2979,7 @@ static int editor_hl_boulderdash[] = EL_CHAR('A'), EL_CHAR('S'), EL_CHAR('H'), +#endif }; static int editor_el_boulderdash[] = @@ -2978,6 +3016,12 @@ static int num_editor_el_boulderdash = SIZEOF_ARRAY_INT(editor_el_boulderdash); static int editor_hl_emerald_mine[] = { + EL_INTERNAL_CASCADE_EM_ACTIVE, + EL_CHAR('E'), + EL_CHAR('M'), + EL_EMPTY, + +#if 0 EL_CHAR('E'), EL_CHAR('M'), EL_CHAR('E'), @@ -2992,6 +3036,7 @@ static int editor_hl_emerald_mine[] = EL_CHAR('I'), EL_CHAR('N'), EL_CHAR('E'), +#endif }; static int editor_el_emerald_mine[] = @@ -3078,6 +3123,12 @@ static int num_editor_el_emerald_mine=SIZEOF_ARRAY_INT(editor_el_emerald_mine); static int editor_hl_emerald_mine_club[] = { + EL_INTERNAL_CASCADE_EMC_ACTIVE, + EL_CHAR('E'), + EL_CHAR('M'), + EL_CHAR('C'), + +#if 0 EL_CHAR('E'), EL_CHAR('M'), EL_CHAR('E'), @@ -3097,6 +3148,7 @@ static int editor_hl_emerald_mine_club[] = EL_CHAR('L'), EL_CHAR('U'), EL_CHAR('B'), +#endif }; static int editor_el_emerald_mine_club[] = @@ -3191,7 +3243,13 @@ static int editor_el_emerald_mine_club[] = #if RELEASE_3_1_2 EL_EMPTY, #else + +#if 0 EL_EMC_DRIPPER, +#else + EL_EMPTY, +#endif + #endif EL_EMC_FAKE_GRASS, EL_EMPTY, @@ -3204,10 +3262,17 @@ static int num_editor_el_emerald_mine_club=SIZEOF_ARRAY_INT(editor_el_emerald_mi static int editor_hl_more[] = { + EL_INTERNAL_CASCADE_RND_ACTIVE, + EL_CHAR('R'), + EL_CHAR('N'), + EL_CHAR('D'), + +#if 0 EL_CHAR('M'), EL_CHAR('O'), EL_CHAR('R'), EL_CHAR('E'), +#endif }; static int editor_el_more[] = @@ -3299,6 +3364,12 @@ static int num_editor_el_more = SIZEOF_ARRAY_INT(editor_el_more); static int editor_hl_sokoban[] = { + EL_INTERNAL_CASCADE_SB_ACTIVE, + EL_CHAR('S'), + EL_CHAR('B'), + EL_EMPTY, + +#if 0 EL_CHAR('S'), EL_CHAR('O'), EL_CHAR('K'), @@ -3308,6 +3379,7 @@ static int editor_hl_sokoban[] = EL_CHAR('B'), EL_CHAR('A'), EL_CHAR('N'), +#endif }; static int editor_el_sokoban[] = @@ -3324,6 +3396,12 @@ static int num_editor_el_sokoban = SIZEOF_ARRAY_INT(editor_el_sokoban); static int editor_hl_supaplex[] = { + EL_INTERNAL_CASCADE_SP_ACTIVE, + EL_CHAR('S'), + EL_CHAR('P'), + EL_EMPTY, + +#if 0 EL_CHAR('S'), EL_CHAR('U'), EL_CHAR('P'), @@ -3333,6 +3411,7 @@ static int editor_hl_supaplex[] = EL_CHAR('L'), EL_CHAR('E'), EL_CHAR('X'), +#endif }; static int editor_el_supaplex[] = @@ -3398,6 +3477,12 @@ static int num_editor_el_supaplex = SIZEOF_ARRAY_INT(editor_el_supaplex); static int editor_hl_diamond_caves[] = { + EL_INTERNAL_CASCADE_DC_ACTIVE, + EL_CHAR('D'), + EL_CHAR('C'), + EL_CHAR('2'), + +#if 0 EL_CHAR('D'), EL_CHAR('I'), EL_CHAR('A'), @@ -3417,6 +3502,7 @@ static int editor_hl_diamond_caves[] = EL_CHAR(' '), EL_CHAR('I'), EL_CHAR('I'), +#endif }; static int editor_el_diamond_caves[] = @@ -3493,6 +3579,12 @@ static int num_editor_el_diamond_caves = SIZEOF_ARRAY_INT(editor_el_diamond_cave static int editor_hl_dx_boulderdash[] = { + EL_INTERNAL_CASCADE_DX_ACTIVE, + EL_CHAR('D'), + EL_CHAR('X'), + EL_EMPTY, + +#if 0 EL_CHAR('D'), EL_CHAR('X'), EL_CHAR('-'), @@ -3512,6 +3604,7 @@ static int editor_hl_dx_boulderdash[] = EL_CHAR('A'), EL_CHAR('S'), EL_CHAR('H'), +#endif }; static int editor_el_dx_boulderdash[] = @@ -3543,10 +3636,17 @@ static int num_editor_el_dx_boulderdash = SIZEOF_ARRAY_INT(editor_el_dx_boulderd static int editor_hl_chars[] = { + EL_INTERNAL_CASCADE_TEXT_ACTIVE, + EL_CHAR('T'), + EL_CHAR('X'), + EL_CHAR('T'), + +#if 0 EL_CHAR('T'), EL_CHAR('E'), EL_CHAR('X'), EL_CHAR('T'), +#endif }; static int editor_el_chars[] = @@ -3648,6 +3748,12 @@ static int num_editor_el_chars = SIZEOF_ARRAY_INT(editor_el_chars); static int editor_hl_custom[] = { + EL_INTERNAL_CASCADE_CE_ACTIVE, + EL_CHAR('C'), + EL_CHAR('E'), + EL_EMPTY, + +#if 0 EL_CHAR('C'), EL_CHAR('U'), EL_CHAR('S'), @@ -3667,6 +3773,7 @@ static int editor_hl_custom[] = EL_CHAR('N'), EL_CHAR('T'), EL_CHAR('S'), +#endif }; static int editor_el_custom[] = @@ -3829,19 +3936,8 @@ static int editor_el_custom[] = EL_CUSTOM_START + 124, EL_CUSTOM_START + 125, EL_CUSTOM_START + 126, - EL_CUSTOM_START + 127 -}; -static int *editor_hl_custom_ptr = editor_hl_custom; -static int *editor_el_custom_ptr = editor_el_custom; -static int num_editor_hl_custom = SIZEOF_ARRAY_INT(editor_hl_custom); -static int num_editor_el_custom = SIZEOF_ARRAY_INT(editor_el_custom); + EL_CUSTOM_START + 127, -static int editor_hl_custom_more[] = -{ -}; - -static int editor_el_custom_more[] = -{ EL_CUSTOM_START + 128, EL_CUSTOM_START + 129, EL_CUSTOM_START + 130, @@ -4000,31 +4096,26 @@ static int editor_el_custom_more[] = EL_CUSTOM_START + 252, EL_CUSTOM_START + 253, EL_CUSTOM_START + 254, - EL_CUSTOM_START + 255 -}; -static int *editor_hl_custom_more_ptr = editor_hl_custom_more; -static int *editor_el_custom_more_ptr = editor_el_custom_more; -static int num_editor_hl_custom_more = SIZEOF_ARRAY_INT(editor_hl_custom_more); -static int num_editor_el_custom_more = SIZEOF_ARRAY_INT(editor_el_custom_more); - -static int editor_hl_custom_special[] = -{ -}; + EL_CUSTOM_START + 255, -static int editor_el_custom_special[] = -{ EL_TRIGGER_ELEMENT, EL_TRIGGER_PLAYER, EL_EMPTY, EL_EMPTY }; -static int *editor_hl_custom_special_ptr = editor_hl_custom_special; -static int *editor_el_custom_special_ptr = editor_el_custom_special; -static int num_editor_hl_custom_special = SIZEOF_ARRAY_INT(editor_hl_custom_special); -static int num_editor_el_custom_special = SIZEOF_ARRAY_INT(editor_el_custom_special); +static int *editor_hl_custom_ptr = editor_hl_custom; +static int *editor_el_custom_ptr = editor_el_custom; +static int num_editor_hl_custom = SIZEOF_ARRAY_INT(editor_hl_custom); +static int num_editor_el_custom = SIZEOF_ARRAY_INT(editor_el_custom); static int editor_hl_group[] = { + EL_INTERNAL_CASCADE_GE_ACTIVE, + EL_CHAR('G'), + EL_CHAR('E'), + EL_EMPTY, + +#if 0 EL_CHAR('G'), EL_CHAR('R'), EL_CHAR('O'), @@ -4044,6 +4135,7 @@ static int editor_hl_group[] = EL_CHAR('N'), EL_CHAR('T'), EL_CHAR('S'), +#endif }; static int editor_el_group[] = @@ -4066,19 +4158,8 @@ static int editor_el_group[] = EL_GROUP_START + 12, EL_GROUP_START + 13, EL_GROUP_START + 14, - EL_GROUP_START + 15 -}; -static int *editor_hl_group_ptr = editor_hl_group; -static int *editor_el_group_ptr = editor_el_group; -static int num_editor_hl_group = SIZEOF_ARRAY_INT(editor_hl_group); -static int num_editor_el_group = SIZEOF_ARRAY_INT(editor_el_group); + EL_GROUP_START + 15, -static int editor_hl_group_more[] = -{ -}; - -static int editor_el_group_more[] = -{ EL_GROUP_START + 16, EL_GROUP_START + 17, EL_GROUP_START + 18, @@ -4099,13 +4180,19 @@ static int editor_el_group_more[] = EL_GROUP_START + 30, EL_GROUP_START + 31 }; -static int *editor_hl_group_more_ptr = editor_hl_group_more; -static int *editor_el_group_more_ptr = editor_el_group_more; -static int num_editor_hl_group_more = SIZEOF_ARRAY_INT(editor_hl_group_more); -static int num_editor_el_group_more = SIZEOF_ARRAY_INT(editor_el_group_more); +static int *editor_hl_group_ptr = editor_hl_group; +static int *editor_el_group_ptr = editor_el_group; +static int num_editor_hl_group = SIZEOF_ARRAY_INT(editor_hl_group); +static int num_editor_el_group = SIZEOF_ARRAY_INT(editor_el_group); static int editor_hl_user_defined[] = { + EL_INTERNAL_CASCADE_USER_ACTIVE, + EL_CHAR('M'), + EL_CHAR('Y'), + EL_EMPTY, + +#if 0 EL_CHAR('U'), EL_CHAR('S'), EL_CHAR('E'), @@ -4120,6 +4207,7 @@ static int editor_hl_user_defined[] = EL_CHAR('N'), EL_CHAR('E'), EL_CHAR('D'), +#endif }; static int *editor_hl_user_defined_ptr = editor_hl_user_defined; @@ -4127,6 +4215,19 @@ static int *editor_el_user_defined_ptr = NULL; static int num_editor_hl_user_defined=SIZEOF_ARRAY_INT(editor_hl_user_defined); static int num_editor_el_user_defined = 0; +static int editor_hl_dynamic[] = +{ + EL_INTERNAL_CASCADE_DYNAMIC_ACTIVE, + EL_CHAR('D'), + EL_CHAR('Y'), + EL_CHAR('N'), +}; + +static int *editor_hl_dynamic_ptr = editor_hl_dynamic; +static int *editor_el_dynamic_ptr = NULL; +static int num_editor_hl_dynamic = SIZEOF_ARRAY_INT(editor_hl_dynamic); +static int num_editor_el_dynamic = 0; + static int editor_hl_empty[] = { }; static int editor_el_empty[ED_NUM_ELEMENTLIST_BUTTONS]; @@ -4204,31 +4305,21 @@ editor_elements_info[] = &editor_hl_custom_ptr, &num_editor_hl_custom, &editor_el_custom_ptr, &num_editor_el_custom }, - { - &setup.editor.el_custom_more, - &editor_hl_custom_more_ptr, &num_editor_hl_custom_more, - &editor_el_custom_more_ptr, &num_editor_el_custom_more - }, - { - &setup.editor.el_custom, - &editor_hl_custom_special_ptr, &num_editor_hl_custom_special, - &editor_el_custom_special_ptr, &num_editor_el_custom_special - }, { &setup.editor.el_custom, &editor_hl_group_ptr, &num_editor_hl_group, &editor_el_group_ptr, &num_editor_el_group }, - { - &setup.editor.el_custom_more, - &editor_hl_group_more_ptr, &num_editor_hl_group_more, - &editor_el_group_more_ptr, &num_editor_el_group_more - }, { &setup.editor.el_user_defined, &editor_hl_user_defined_ptr, &num_editor_hl_user_defined, &editor_el_user_defined_ptr, &num_editor_el_user_defined }, + { + &setup.editor.el_dynamic, + &editor_hl_dynamic_ptr, &num_editor_hl_dynamic, + &editor_el_dynamic_ptr, &num_editor_el_dynamic, + }, { &use_el_empty, &editor_hl_empty_ptr, &num_editor_hl_empty, @@ -4278,7 +4369,11 @@ static char *getElementInfoText(int element) { char *info_text = NULL; +#if 1 + if (element < MAX_NUM_ELEMENTS) +#else if (element < NUM_FILE_ELEMENTS) +#endif { if (strlen(element_info[element].description) > 0) info_text = element_info[element].description; @@ -4294,6 +4389,53 @@ static char *getElementInfoText(int element) return info_text; } +static void InitDynamicEditorElementList(int **elements, int *num_elements) +{ + boolean element_found[NUM_FILE_ELEMENTS]; + int i, x, y; + + /* initialize list of used elements to "not used" */ + for (i = 0; i < NUM_FILE_ELEMENTS; i++) + element_found[i] = FALSE; + + /* find all elements used in current level */ + for (y = 0; y < lev_fieldy; y++) + for (x = 0; x < lev_fieldx; x++) + if (Feld[x][y] < NUM_FILE_ELEMENTS) /* should always be true */ + element_found[Feld[x][y]] = TRUE; + + *num_elements = 0; + + /* count number of elements used in current level */ + for (i = 0; i < NUM_FILE_ELEMENTS; i++) + if (element_found[i]) + (*num_elements)++; + + /* add space for up to 3 more elements for padding that may be needed */ + *num_elements += 3; + + /* free memory for old list of elements, if needed */ + checked_free(*elements); + + /* allocate memory for new list of elements */ + *elements = checked_malloc(*num_elements * sizeof(int)); + + *num_elements = 0; + + /* add all elements used in current level (non-custom/group elements) */ + for (i = 0; i < NUM_FILE_ELEMENTS; i++) + if (element_found[i] && !(IS_CUSTOM_ELEMENT(i) || IS_GROUP_ELEMENT(i))) + (*elements)[(*num_elements)++] = i; + + /* add all elements used in current level (custom/group elements) */ + for (i = 0; i < NUM_FILE_ELEMENTS; i++) + if (element_found[i] && (IS_CUSTOM_ELEMENT(i) || IS_GROUP_ELEMENT(i))) + (*elements)[(*num_elements)++] = i; + + while (*num_elements % 4) /* pad with empty elements, if needed */ + (*elements)[(*num_elements)++] = EL_EMPTY; +} + static void ReinitializeElementList() { int pos = 0; @@ -4305,6 +4447,10 @@ static void ReinitializeElementList() LoadUserDefinedEditorElementList(&editor_el_user_defined_ptr, &num_editor_el_user_defined); + /* initialize dynamic level element list for each invocation of editor */ + InitDynamicEditorElementList(&editor_el_dynamic_ptr, + &num_editor_el_dynamic); + /* initialize list of empty elements (used for padding, if needed) */ for (i = 0; i < ED_NUM_ELEMENTLIST_BUTTONS; i++) editor_el_empty[i] = EL_EMPTY; @@ -4330,11 +4476,26 @@ static void ReinitializeElementList() /* determine size of element list */ for (i = 0; editor_elements_info[i].setup_value != NULL; i++) { + boolean found_inactive_cascade = FALSE; + if (*editor_elements_info[i].setup_value) { if (setup.editor.el_headlines) + { num_editor_elements += *editor_elements_info[i].headline_list_size; + for (j = 0; j < *editor_elements_info[i].headline_list_size; j++) + { + int element = (*editor_elements_info[i].headline_list)[j]; + + if (IS_EDITOR_CASCADE_INACTIVE(element)) + found_inactive_cascade = TRUE; + } + } + + if (found_inactive_cascade) + continue; + num_editor_elements += *editor_elements_info[i].element_list_size; } } @@ -4353,11 +4514,25 @@ static void ReinitializeElementList() /* fill element list */ for (i = 0; editor_elements_info[i].setup_value != NULL; i++) { + boolean found_inactive_cascade = FALSE; + if (*editor_elements_info[i].setup_value) { if (setup.editor.el_headlines) + { for (j = 0; j < *editor_elements_info[i].headline_list_size; j++) - editor_elements[pos++] = (*editor_elements_info[i].headline_list)[j]; + { + int element = (*editor_elements_info[i].headline_list)[j]; + + editor_elements[pos++] = element; + + if (IS_EDITOR_CASCADE_INACTIVE(element)) + found_inactive_cascade = TRUE; + } + } + + if (found_inactive_cascade) + continue; for (j = 0; j < *editor_elements_info[i].element_list_size; j++) editor_elements[pos++] = (*editor_elements_info[i].element_list)[j]; @@ -5925,11 +6100,12 @@ static boolean LevelContainsPlayer() return TRUE; /* !!! CURRENTLY DEACTIVATED !!! */ - for (y = 0; y < lev_fieldy; y++) - for (x = 0; x < lev_fieldx; x++) - if (Feld[x][y] == EL_PLAYER_1 || - Feld[x][y] == EL_SP_MURPHY) - player_found = TRUE; + for (y = 0; y < lev_fieldy; y++) for (x = 0; x < lev_fieldx; x++) + { + if (Feld[x][y] == EL_PLAYER_1 || + Feld[x][y] == EL_SP_MURPHY) + player_found = TRUE; + } return player_found; } @@ -6521,6 +6697,7 @@ void DrawLevelEd() redraw_mask |= REDRAW_ALL; + ReinitializeElementList(); /* update dynamic level element list */ ReinitializeElementListButtons(); /* custom element may look different */ UnmapTapeButtons(); @@ -6639,6 +6816,25 @@ static void AdjustEditorScrollbar(int id) GDI_SCROLLBAR_ITEM_POSITION, item_position, GDI_END); } +static void AdjustElementListScrollbar() +{ + struct GadgetInfo *gi = level_editor_gadget[GADGET_ID_SCROLL_LIST_VERTICAL]; + int items_max, items_visible, item_position; + + if (element_shift < 0) + element_shift = 0; + if (element_shift > num_editor_elements - ED_NUM_ELEMENTLIST_BUTTONS) + element_shift = num_editor_elements - ED_NUM_ELEMENTLIST_BUTTONS; + + items_max = num_editor_elements / ED_ELEMENTLIST_BUTTONS_HORIZ; + items_visible = ED_ELEMENTLIST_BUTTONS_VERT; + item_position = element_shift / ED_ELEMENTLIST_BUTTONS_HORIZ; + + ModifyGadget(gi, GDI_SCROLLBAR_ITEMS_MAX, items_max, + GDI_SCROLLBAR_ITEMS_VISIBLE, items_visible, + GDI_SCROLLBAR_ITEM_POSITION, item_position, GDI_END); +} + static void ModifyEditorCounterValue(int counter_id, int new_value) { int *counter_value = counterbutton_info[counter_id].value; @@ -6788,10 +6984,15 @@ static void DrawLevelInfoWindow() ClearWindow(); UnmapLevelEditorWindowGadgets(); +#if 0 + DrawTextSCentered(ED_SETTINGS1_YPOS, FONT_TITLE_1, "Level Settings"); + DrawTextSCentered(ED_SETTINGS2_YPOS, FONT_TITLE_1, "Editor Settings"); +#else DrawText(SX + ED_SETTINGS2_XPOS, SY + ED_SETTINGS1_YPOS, "Level Settings", FONT_TITLE_1); DrawText(SX + ED_SETTINGS2_XPOS, SY + ED_SETTINGS2_YPOS, "Editor Settings", FONT_TITLE_1); +#endif /* draw counter gadgets */ for (i = ED_COUNTER_ID_LEVEL_FIRST; i <= ED_COUNTER_ID_LEVEL_LAST; i++) @@ -6890,8 +7091,30 @@ static void DrawMagicBallContentAreas() int y = SY + ED_AREA_MAGIC_BALL_CONTENT_YPOS(0) + ED_BORDER_AREA_YSIZE; int i; + /* display counter to choose number of element content areas */ + MapCounterButtons(ED_COUNTER_ID_BALL_CONTENT); + for (i = 0; i < MAX_ELEMENT_CONTENTS; i++) - MapDrawingArea(ED_DRAWING_ID_MAGIC_BALL_CONTENT_0 + i); + { + int id = ED_DRAWING_ID_MAGIC_BALL_CONTENT_0 + i; + + if (i < level.num_ball_contents) + { + MapDrawingArea(id); + } + else + { + int font_height = getFontHeight(FONT_TEXT_1); + + UnmapDrawingArea(id); + + /* delete content areas in case of reducing number of them */ + DrawBackground(SX + drawingarea_info[id].x - MINI_TILEX / 2, + SY + drawingarea_info[id].y - MINI_TILEY / 2, + 4 * MINI_TILEX, + 4 * MINI_TILEY + ED_GADGET_TEXT_DISTANCE + font_height); + } + } DrawText(x, y + 0 * MINI_TILEY, "generated", FONT_TEXT_1); DrawText(x, y + 1 * MINI_TILEY, "when", FONT_TEXT_1); @@ -7341,6 +7564,7 @@ static void DrawPropertiesConfig() (CAN_GROW(properties_element) ? 1 : 0) + (COULD_MOVE_INTO_ACID(properties_element) ? 1 : 0) + (MAYBE_DONT_COLLIDE_WITH(properties_element) ? 1 : 0)+ + (properties_element == EL_EMC_MAGIC_BALL ? 2 : 0) + num_element_counters); counterbutton_info[counter_id].value = elements_with_counter[i].value; @@ -7376,10 +7600,14 @@ static void DrawPropertiesConfig() MapDrawingArea(ED_DRAWING_ID_AMOEBA_CONTENT); else if (properties_element == EL_YAMYAM) DrawYamYamContentAreas(); - } + else if (properties_element == EL_EMC_MAGIC_BALL) + { + DrawMagicBallContentAreas(); - if (properties_element == EL_EMC_MAGIC_BALL) - DrawMagicBallContentAreas(); + MapCheckbuttonGadget(ED_CHECKBUTTON_ID_RANDOM_BALL_CONTENT); + MapCheckbuttonGadget(ED_CHECKBUTTON_ID_INITIAL_BALL_STATE); + } + } if (ELEM_IS_PLAYER(properties_element)) { @@ -7671,8 +7899,12 @@ static void DrawPropertiesWindow() SetMainBackgroundImage(IMG_BACKGROUND_EDITOR); ClearWindow(); +#if 0 + DrawTextSCentered(ED_SETTINGS1_YPOS, FONT_TITLE_1, "Element Settings"); +#else DrawText(SX + ED_SETTINGS2_XPOS, SY + ED_SETTINGS1_YPOS, "Element Settings", FONT_TITLE_1); +#endif DrawElementBorder(SX + xstart * MINI_TILEX, SY + ystart * MINI_TILEY + MINI_TILEY / 2, @@ -8676,6 +8908,10 @@ static void HandleCounterButtons(struct GadgetInfo *gi) DrawYamYamContentAreas(); break; + case ED_COUNTER_ID_BALL_CONTENT: + DrawMagicBallContentAreas(); + break; + case ED_COUNTER_ID_GROUP_CONTENT: DrawGroupElementArea(properties_element); CopyGroupElementPropertiesToGame(properties_element); @@ -9262,6 +9498,34 @@ static void HandleControlButtons(struct GadgetInfo *gi) int element_position = id - GADGET_ID_ELEMENTLIST_FIRST; int new_element = editor_elements[element_position + element_shift]; + if (IS_EDITOR_CASCADE(new_element)) + { + int i; + + for (i = 0; editor_elements_info[i].setup_value != NULL; i++) + { + int *cascade_element = *editor_elements_info[i].headline_list; + + if (*cascade_element == new_element) + { + *cascade_element = EL_CASCADE_TOGGLE(*cascade_element); + + ReinitializeElementList(); +#if 0 + ReinitializeElementListButtons(); +#endif + ModifyEditorElementList(); + AdjustElementListScrollbar(); + + PrintEditorGadgetInfoText(level_editor_gadget[id]); + + break; + } + } + + break; + } + if (last_custom_copy_mode != -1) { if (CopyCustomElement(properties_element, new_element, @@ -9415,25 +9679,66 @@ void ClearEditorGadgetInfoText() DrawBackground(INFOTEXT_XPOS, INFOTEXT_YPOS, INFOTEXT_XSIZE, INFOTEXT_YSIZE); } +void PrintEditorGadgetInfoText(struct GadgetInfo *gi) +{ + char infotext[MAX_OUTPUT_LINESIZE + 1]; + char shortcut[MAX_OUTPUT_LINESIZE + 1]; + int max_infotext_len = getMaxInfoTextLength(); + + if (gi == NULL || gi->info_text == NULL) + return; + + strncpy(infotext, gi->info_text, max_infotext_len); + infotext[max_infotext_len] = '\0'; + + if (gi->custom_id < ED_NUM_CTRL_BUTTONS) + { + int key = control_info[gi->custom_id].shortcut; + + if (key) + { + if (gi->custom_id == GADGET_ID_SINGLE_ITEMS) /* special case 1 */ + sprintf(shortcut, " ('.' or '%c')", key); + else if (gi->custom_id == GADGET_ID_PICK_ELEMENT) /* special case 2 */ + sprintf(shortcut, " ('%c' or 'Ctrl')", key); + else if (gi->custom_id == GADGET_ID_TEST) /* special case 3 */ + sprintf(shortcut, " ('Enter' or 'Shift-%c')", key); + else /* normal case */ + sprintf(shortcut, " ('%s%c')", + (key >= 'A' && key <= 'Z' ? "Shift-" : ""), key); + + if (strlen(infotext) + strlen(shortcut) <= max_infotext_len) + strcat(infotext, shortcut); + } + } + + DrawText(INFOTEXT_XPOS, INFOTEXT_YPOS, infotext, FONT_TEXT_2); +} + void HandleEditorGadgetInfoText(void *ptr) { struct GadgetInfo *gi = (struct GadgetInfo *)ptr; +#if 0 char infotext[MAX_OUTPUT_LINESIZE + 1]; char shortcut[MAX_OUTPUT_LINESIZE + 1]; int max_infotext_len = getMaxInfoTextLength(); +#endif if (game_status != GAME_MODE_EDITOR) return; ClearEditorGadgetInfoText(); - if (gi->event.type == GD_EVENT_INFO_LEAVING) + if (gi == NULL || gi->event.type == GD_EVENT_INFO_LEAVING) return; /* misuse this function to delete brush cursor, if needed */ if (edit_mode == ED_MODE_DRAWING && draw_with_brush) DeleteBrushFromCursor(); +#if 1 + PrintEditorGadgetInfoText(gi); +#else if (gi == NULL || gi->info_text == NULL) return; @@ -9462,6 +9767,7 @@ void HandleEditorGadgetInfoText(void *ptr) } DrawText(INFOTEXT_XPOS, INFOTEXT_YPOS, infotext, FONT_TEXT_2); +#endif } static void HandleDrawingAreaInfo(struct GadgetInfo *gi)