X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Feditor.c;h=7c453d92dd8f8090959ce9e4f4e85fe5fba48336;hb=6467d24a3a0f19645cd5ea89b4ca18a95021d657;hp=28d086354f5e5e4860dd9e87d8a7847ef027195d;hpb=66ee990434a0509486d3d2ba69181094d97f35b5;p=rocksndiamonds.git diff --git a/src/editor.c b/src/editor.c index 28d08635..7c453d92 100644 --- a/src/editor.c +++ b/src/editor.c @@ -48,6 +48,9 @@ #define RANDOM_USE_PERCENTAGE 0 #define RANDOM_USE_NUM_OBJECTS 1 +/* values for elements with content */ +#define MAX_ELEMCONT 8 + /* values for the control window */ #define ED_CTRL_BUTTONS_GFX_YPOS 236 #define ED_CTRL_BUTTONS_ALT_GFX_YPOS 142 @@ -68,12 +71,14 @@ #define ED_NUM_CTRL2_BUTTONS (ED_CTRL2_BUTTONS_HORIZ * ED_CTRL2_BUTTONS_VERT) #define ED_NUM_CTRL_BUTTONS (ED_NUM_CTRL1_BUTTONS + ED_NUM_CTRL2_BUTTONS) +/* values for properties window */ +#define ED_PROPERTIES_XPOS (TILEX - MINI_TILEX/2) /* values for counter gadgets */ #define ED_COUNT_VALUE_XOFFSET 5 #define ED_COUNT_VALUE_YOFFSET 3 -#define ED_COUNT_SCORE_XPOS (TILEX) +#define ED_COUNT_SCORE_XPOS ED_PROPERTIES_XPOS #define ED_COUNT_SCORE_YPOS (14 * MINI_TILEY) -#define ED_COUNT_ELEMCONT_XPOS (TILEX) +#define ED_COUNT_ELEMCONT_XPOS ED_PROPERTIES_XPOS #define ED_COUNT_ELEMCONT_YPOS (17 * MINI_TILEY) /* values for element content drawing areas */ @@ -114,8 +119,9 @@ #define ED_CTRL_ID_DRAWING_LEVEL 26 #define ED_CTRL_ID_ELEMCONT_0 27 #define ED_CTRL_ID_ELEMCONT_7 34 +#define ED_CTRL_ID_AMOEBA_CONTENT 35 -#define ED_NUM_GADGETS 35 +#define ED_NUM_GADGETS 36 /* values for counter gadgets */ #define ED_COUNTER_SCORE 0 @@ -137,7 +143,7 @@ static struct /* forward declaration for internal use */ static void DrawDrawingWindow(); -static void DrawPropertiesWindow(int); +static void DrawPropertiesWindow(); static void CopyLevelToUndoBuffer(); static void HandleDrawingAreas(struct GadgetInfo *); static void HandleCounterButtons(struct GadgetInfo *); @@ -147,8 +153,9 @@ static struct GadgetInfo *level_editor_gadget[ED_NUM_GADGETS]; static boolean level_editor_gadgets_created = FALSE; static int drawing_function = ED_CTRL_ID_SINGLE_ITEMS; +static int properties_element = 0; -static short ElementContent[8][3][3]; +static short ElementContent[MAX_ELEMCONT][3][3]; static short OrigBackup[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; static short UndoBuffer[NUM_UNDO_STEPS][MAX_LEV_FIELDX][MAX_LEV_FIELDY]; static int undo_buffer_position = 0; @@ -173,7 +180,8 @@ static int new_element1 = EL_MAUERWERK; static int new_element2 = EL_LEERRAUM; static int new_element3 = EL_ERDREICH; -int element_shift; +int element_shift = 0; + int editor_element[] = { EL_CHAR_A + ('B' - 'A'), @@ -197,7 +205,7 @@ int editor_element[] = EL_BETON, EL_FELSBODEN, - EL_SIEB2_LEER, + EL_SIEB2_INAKTIV, EL_AUSGANG_ZU, EL_AUSGANG_AUF, @@ -244,7 +252,7 @@ int editor_element[] = EL_BETON, EL_MAUERWERK, EL_FELSBODEN, - EL_SIEB_LEER, + EL_SIEB_INAKTIV, EL_EDELSTEIN, EL_DIAMANT, @@ -356,6 +364,11 @@ int editor_element[] = EL_MAUER_Y, EL_MAUER_XY, + EL_SPEED_PILL, + EL_LEERRAUM, + EL_LEERRAUM, + EL_LEERRAUM, + EL_CHAR_A + ('S' - 'A'), EL_CHAR_A + ('O' - 'A'), EL_CHAR_A + ('K' - 'A'), @@ -371,6 +384,71 @@ int editor_element[] = EL_SOKOBAN_FELD_VOLL, EL_BETON, + EL_LEERRAUM, + EL_LEERRAUM, + EL_LEERRAUM, + EL_LEERRAUM, + + EL_CHAR('S'), + EL_CHAR('U'), + EL_CHAR('P'), + EL_CHAR('A'), + + EL_CHAR('P'), + EL_CHAR('L'), + EL_CHAR('E'), + EL_CHAR('X'), + + EL_SP_EMPTY, + EL_SP_ZONK, + EL_SP_BASE, + EL_SP_MURPHY, + + EL_SP_INFOTRON, + EL_SP_CHIP_SINGLE, + EL_SP_HARD_GRAY, + EL_SP_EXIT, + + EL_SP_DISK_ORANGE, + EL_SP_PORT1_RIGHT, + EL_SP_PORT1_DOWN, + EL_SP_PORT1_LEFT, + + EL_SP_PORT1_UP, + EL_SP_PORT2_RIGHT, + EL_SP_PORT2_DOWN, + EL_SP_PORT2_LEFT, + + EL_SP_PORT2_UP, + EL_SP_SNIKSNAK, + EL_SP_DISK_YELLOW, + EL_SP_TERMINAL, + + EL_SP_DISK_RED, + EL_SP_PORT_Y, + EL_SP_PORT_X, + EL_SP_PORT_XY, + + EL_SP_ELECTRON, + EL_SP_BUG, + EL_SP_CHIP_LEFT, + EL_SP_CHIP_RIGHT, + + EL_SP_HARD_BASE1, + EL_SP_HARD_GREEN, + EL_SP_HARD_BLUE, + EL_SP_HARD_RED, + + EL_SP_HARD_YELLOW, + EL_SP_HARD_BASE2, + EL_SP_HARD_BASE3, + EL_SP_HARD_BASE4, + + EL_SP_HARD_BASE5, + EL_SP_HARD_BASE6, + EL_SP_CHIP_UPPER, + EL_SP_CHIP_LOWER, + /* EL_CHAR_A + ('D' - 'A'), EL_CHAR_A + ('Y' - 'A'), @@ -465,7 +543,8 @@ int editor_element[] = EL_CHAR_OE, EL_CHAR_UE, - EL_CHAR_COPY + EL_CHAR_COPY, + EL_LEERRAUM }; int elements_in_list = sizeof(editor_element)/sizeof(int); @@ -647,13 +726,15 @@ static void CreateDrawingAreas() { struct GadgetInfo *gi; unsigned long event_mask; - int id = ED_CTRL_ID_DRAWING_LEVEL; + int id; int i; event_mask = GD_EVENT_PRESSED | GD_EVENT_RELEASED | GD_EVENT_MOVING | GD_EVENT_OFF_BORDERS; + /* one for the level drawing area ... */ + id = ED_CTRL_ID_DRAWING_LEVEL; gi = CreateGadget(GDI_CUSTOM_ID, id, GDI_X, SX, GDI_Y, SY, @@ -670,12 +751,13 @@ static void CreateDrawingAreas() level_editor_gadget[id] = gi; - for (i=0; i<8; i++) + /* ... up to eight areas for element content ... */ + for (i=0; icustom_id; boolean inside_drawing_area = !gi->event.off_borders; boolean button_press_event; boolean button_release_event; - boolean draw_level = (gi->custom_id == ED_CTRL_ID_DRAWING_LEVEL); + boolean draw_level = (id == ED_CTRL_ID_DRAWING_LEVEL); int new_element; int button = gi->event.button; int sx = gi->event.x, sy = gi->event.y; @@ -2404,6 +2553,12 @@ static void HandleDrawingAreas(struct GadgetInfo *gi) gi->x + sx * MINI_TILEX, gi->y + sy * MINI_TILEY, el2gfx(new_element)); + + if (id == ED_CTRL_ID_AMOEBA_CONTENT) + level.amoebe_inhalt = new_element; + else if (id >= ED_CTRL_ID_ELEMCONT_0 && id <= ED_CTRL_ID_ELEMCONT_7) + level.mampfer_inhalt[id - ED_CTRL_ID_ELEMCONT_0][sx][sy] = + new_element; } break; @@ -2516,8 +2671,8 @@ static void HandleCounterButtons(struct GadgetInfo *gi) *gadget_areas_value += (id == ED_CTRL_ID_ELEMCONT_DOWN ? -step : step); if (*gadget_areas_value < 1) *gadget_areas_value = 1; - else if (*gadget_areas_value > 8) - *gadget_areas_value = 8; + else if (*gadget_areas_value > MAX_ELEMCONT) + *gadget_areas_value = MAX_ELEMCONT; DrawCounterValueField(ED_COUNTER_ELEMCONT, *gadget_areas_value); DrawElementContentAreas(); @@ -2629,7 +2784,8 @@ static void HandleControlButtons(struct GadgetInfo *gi) break; case ED_CTRL_ID_PROPERTIES: - DrawPropertiesWindow(new_element); + properties_element = new_element; + DrawPropertiesWindow(); edit_mode = ED_MODE_PROPERTIES; break; @@ -2662,8 +2818,7 @@ static void HandleControlButtons(struct GadgetInfo *gi) } else { - AdjustLevelScrollPosition(); - DrawMiniLevel(level_xpos, level_ypos); + DrawDrawingWindow(); edit_mode = ED_MODE_DRAWING; } break; @@ -2689,7 +2844,7 @@ static void HandleControlButtons(struct GadgetInfo *gi) if (Feld[x][y] != Ur[x][y]) level_changed = TRUE; - if (!level_changed) + if (0 && !level_changed) { Request("Level has not changed !", REQ_CONFIRM); break;