GADGET_ID_LEVEL_AUTHOR,
GADGET_ID_LEVELSET_NAME,
GADGET_ID_LEVELSET_AUTHOR,
- GADGET_ID_BD_COLOR_RGB_B,
- GADGET_ID_BD_COLOR_RGB_0,
- GADGET_ID_BD_COLOR_RGB_1,
- GADGET_ID_BD_COLOR_RGB_2,
- GADGET_ID_BD_COLOR_RGB_3,
- GADGET_ID_BD_COLOR_RGB_4,
- GADGET_ID_BD_COLOR_RGB_5,
+ GADGET_ID_BD_COLOR_TEXT_B,
+ GADGET_ID_BD_COLOR_TEXT_0,
+ GADGET_ID_BD_COLOR_TEXT_1,
+ GADGET_ID_BD_COLOR_TEXT_2,
+ GADGET_ID_BD_COLOR_TEXT_3,
+ GADGET_ID_BD_COLOR_TEXT_4,
+ GADGET_ID_BD_COLOR_TEXT_5,
GADGET_ID_ELEMENT_NAME,
// text area identifiers
ED_TEXTINPUT_ID_LEVEL_AUTHOR,
ED_TEXTINPUT_ID_LEVELSET_NAME,
ED_TEXTINPUT_ID_LEVELSET_AUTHOR,
- ED_TEXTINPUT_ID_BD_COLOR_RGB_B,
- ED_TEXTINPUT_ID_BD_COLOR_RGB_0,
- ED_TEXTINPUT_ID_BD_COLOR_RGB_1,
- ED_TEXTINPUT_ID_BD_COLOR_RGB_2,
- ED_TEXTINPUT_ID_BD_COLOR_RGB_3,
- ED_TEXTINPUT_ID_BD_COLOR_RGB_4,
- ED_TEXTINPUT_ID_BD_COLOR_RGB_5,
+ ED_TEXTINPUT_ID_BD_COLOR_TEXT_B,
+ ED_TEXTINPUT_ID_BD_COLOR_TEXT_0,
+ ED_TEXTINPUT_ID_BD_COLOR_TEXT_1,
+ ED_TEXTINPUT_ID_BD_COLOR_TEXT_2,
+ ED_TEXTINPUT_ID_BD_COLOR_TEXT_3,
+ ED_TEXTINPUT_ID_BD_COLOR_TEXT_4,
+ ED_TEXTINPUT_ID_BD_COLOR_TEXT_5,
ED_TEXTINPUT_ID_ELEMENT_NAME,
ED_NUM_TEXTINPUT
#define ED_TEXTINPUT_ID_LEVELSET_FIRST ED_TEXTINPUT_ID_LEVELSET_NAME
#define ED_TEXTINPUT_ID_LEVELSET_LAST ED_TEXTINPUT_ID_LEVELSET_AUTHOR
-#define ED_TEXTINPUT_ID_COLORS_FIRST ED_TEXTINPUT_ID_BD_COLOR_RGB_B
-#define ED_TEXTINPUT_ID_COLORS_LAST ED_TEXTINPUT_ID_BD_COLOR_RGB_5
+#define ED_TEXTINPUT_ID_COLORS_FIRST ED_TEXTINPUT_ID_BD_COLOR_TEXT_B
+#define ED_TEXTINPUT_ID_COLORS_LAST ED_TEXTINPUT_ID_BD_COLOR_TEXT_5
// values for text area gadgets
enum
static int levelset_save_mode = LEVELSET_SAVE_MODE_UPDATE;
#define MAX_BD_COLORS 7
-#define MAX_BD_COLOR_RGB_TEXT_LEN 7
+#define MAX_BD_COLOR_TEXT_LEN 10
static boolean bd_color_type_changed = FALSE;
+static int bd_color_type_default = GD_COLOR_TYPE_RGB;
static int bd_color_c64[MAX_BD_COLORS];
-static char bd_color_rgb[MAX_BD_COLORS][MAX_BD_COLOR_RGB_TEXT_LEN + 1];
+static char bd_color_text[MAX_BD_COLORS][MAX_BD_COLOR_TEXT_LEN + 1];
static int bd_color_default[MAX_BD_COLORS];
static int *bd_color[MAX_BD_COLORS] =
{
// ---------- engine settings: colors ---------------------------------------
{
- ED_TEXTINPUT_ID_BD_COLOR_RGB_B,
+ ED_TEXTINPUT_ID_BD_COLOR_TEXT_B,
ED_ENGINE_SETTINGS_XPOS(0), ED_ENGINE_SETTINGS_YPOS(1),
- GADGET_ID_BD_COLOR_RGB_B,
- MAX_BD_COLOR_RGB_TEXT_LEN,
- bd_color_rgb[0],
- NULL, "Border color: ", NULL, "Enter border color (not used)"
+ GADGET_ID_BD_COLOR_TEXT_B,
+ MAX_BD_COLOR_TEXT_LEN,
+ bd_color_text[0],
+ NULL, "Border color: ", NULL, "Enter border color (not used)"
},
{
- ED_TEXTINPUT_ID_BD_COLOR_RGB_0,
+ ED_TEXTINPUT_ID_BD_COLOR_TEXT_0,
ED_ENGINE_SETTINGS_XPOS(0), ED_ENGINE_SETTINGS_YPOS(2),
- GADGET_ID_BD_COLOR_RGB_0,
- MAX_BD_COLOR_RGB_TEXT_LEN,
- bd_color_rgb[1],
- NULL, "Background color:", NULL, "Enter background color (C64 graphics)"
+ GADGET_ID_BD_COLOR_TEXT_0,
+ MAX_BD_COLOR_TEXT_LEN,
+ bd_color_text[1],
+ NULL, "Background color: ", NULL, "Enter background color (C64 graphics)"
},
{
- ED_TEXTINPUT_ID_BD_COLOR_RGB_1,
+ ED_TEXTINPUT_ID_BD_COLOR_TEXT_1,
ED_ENGINE_SETTINGS_XPOS(0), ED_ENGINE_SETTINGS_YPOS(3),
- GADGET_ID_BD_COLOR_RGB_1,
- MAX_BD_COLOR_RGB_TEXT_LEN,
- bd_color_rgb[2],
- NULL, "Sand color: ", NULL, "Enter sand color (C64 graphics)"
+ GADGET_ID_BD_COLOR_TEXT_1,
+ MAX_BD_COLOR_TEXT_LEN,
+ bd_color_text[2],
+ NULL, "Sand color: ", NULL, "Enter sand color (C64 graphics)"
},
{
- ED_TEXTINPUT_ID_BD_COLOR_RGB_2,
+ ED_TEXTINPUT_ID_BD_COLOR_TEXT_2,
ED_ENGINE_SETTINGS_XPOS(0), ED_ENGINE_SETTINGS_YPOS(4),
- GADGET_ID_BD_COLOR_RGB_2,
- MAX_BD_COLOR_RGB_TEXT_LEN,
- bd_color_rgb[3],
- NULL, "Steel wall color:", NULL, "Enter steel wall color (C64 graphics)"
+ GADGET_ID_BD_COLOR_TEXT_2,
+ MAX_BD_COLOR_TEXT_LEN,
+ bd_color_text[3],
+ NULL, "Steel wall color: ", NULL, "Enter steel wall color (C64 graphics)"
},
{
- ED_TEXTINPUT_ID_BD_COLOR_RGB_3,
+ ED_TEXTINPUT_ID_BD_COLOR_TEXT_3,
ED_ENGINE_SETTINGS_XPOS(0), ED_ENGINE_SETTINGS_YPOS(5),
- GADGET_ID_BD_COLOR_RGB_3,
- MAX_BD_COLOR_RGB_TEXT_LEN,
- bd_color_rgb[4],
- NULL, "Wall color: ", NULL, "Enter wall color (C64 graphics)"
+ GADGET_ID_BD_COLOR_TEXT_3,
+ MAX_BD_COLOR_TEXT_LEN,
+ bd_color_text[4],
+ NULL, "Wall color: ", NULL, "Enter wall color (C64 graphics)"
},
{
- ED_TEXTINPUT_ID_BD_COLOR_RGB_4,
+ ED_TEXTINPUT_ID_BD_COLOR_TEXT_4,
ED_ENGINE_SETTINGS_XPOS(0), ED_ENGINE_SETTINGS_YPOS(6),
- GADGET_ID_BD_COLOR_RGB_4,
- MAX_BD_COLOR_RGB_TEXT_LEN,
- bd_color_rgb[5],
- NULL, "Amoeba color: ", NULL, "Enter amoeba color (C64 graphics)"
+ GADGET_ID_BD_COLOR_TEXT_4,
+ MAX_BD_COLOR_TEXT_LEN,
+ bd_color_text[5],
+ NULL, "Amoeba color: ", NULL, "Enter amoeba color (C64 graphics)"
},
{
- ED_TEXTINPUT_ID_BD_COLOR_RGB_5,
+ ED_TEXTINPUT_ID_BD_COLOR_TEXT_5,
ED_ENGINE_SETTINGS_XPOS(0), ED_ENGINE_SETTINGS_YPOS(7),
- GADGET_ID_BD_COLOR_RGB_5,
- MAX_BD_COLOR_RGB_TEXT_LEN,
- bd_color_rgb[6],
- NULL, "Slime color: ", NULL, "Enter slime color (C64 graphics)"
+ GADGET_ID_BD_COLOR_TEXT_5,
+ MAX_BD_COLOR_TEXT_LEN,
+ bd_color_text[6],
+ NULL, "Slime color: ", NULL, "Enter slime color (C64 graphics)"
},
// ---------- element settings: configure (several elements) ----------------
static struct ValueTextInfo options_bd_color_type[] =
{
- { GD_COLOR_TYPE_C64, "C64 colors" },
{ GD_COLOR_TYPE_RGB, "RGB colors" },
+ { GD_COLOR_TYPE_C64, "C64 colors" },
+ { GD_COLOR_TYPE_C64DTV, "C64DTV colors" },
+ { GD_COLOR_TYPE_ATARI, "Atari colors" },
{ -1, NULL }
};
-1,
options_bd_color_c64_name,
&bd_color_c64[0],
- NULL, "Border color: ", NULL, "Select border color (not used)"
+ NULL, "Border color: ", NULL, "Select border color (not used)"
},
{
ED_SELECTBOX_ID_BD_COLOR_C64_0,
-1,
options_bd_color_c64_name,
&bd_color_c64[1],
- NULL, "Background color:", NULL, "Select background color (C64 graphics)"
+ NULL, "Background color: ", NULL, "Select background color (C64 graphics)"
},
{
ED_SELECTBOX_ID_BD_COLOR_C64_1,
-1,
options_bd_color_c64_name,
&bd_color_c64[2],
- NULL, "Sand color: ", NULL, "Select sand color (C64 graphics)"
+ NULL, "Sand color: ", NULL, "Select sand color (C64 graphics)"
},
{
ED_SELECTBOX_ID_BD_COLOR_C64_2,
-1,
options_bd_color_c64_name,
&bd_color_c64[3],
- NULL, "Steel wall color:", NULL, "Select steel wall color (C64 graphics)"
+ NULL, "Steel wall color: ", NULL, "Select steel wall color (C64 graphics)"
},
{
ED_SELECTBOX_ID_BD_COLOR_C64_3,
-1,
options_bd_color_c64_name,
&bd_color_c64[4],
- NULL, "Wall color: ", NULL, "Select wall color (C64 graphics)"
+ NULL, "Wall color: ", NULL, "Select wall color (C64 graphics)"
},
{
ED_SELECTBOX_ID_BD_COLOR_C64_4,
-1,
options_bd_color_c64_name,
&bd_color_c64[5],
- NULL, "Amoeba color: ", NULL, "Select amoeba color (C64 graphics)"
+ NULL, "Amoeba color: ", NULL, "Select amoeba color (C64 graphics)"
},
{
ED_SELECTBOX_ID_BD_COLOR_C64_5,
-1,
options_bd_color_c64_name,
&bd_color_c64[6],
- NULL, "Slime color: ", NULL, "Select slime color (C64 graphics)"
+ NULL, "Slime color: ", NULL, "Select slime color (C64 graphics)"
},
// ---------- element settings: configure (several elements) ----------------
if (level.game_engine_type == game_engine_type_last)
return;
- if (level.game_engine_type == GAME_ENGINE_TYPE_BD)
- {
- new_element1 = EL_BD_WALL;
- new_element2 = EL_EMPTY;
- new_element3 = EL_BD_SAND;
- }
- else if (level.game_engine_type == GAME_ENGINE_TYPE_SP)
- {
- new_element1 = EL_SP_CHIP_SINGLE;
- new_element2 = EL_EMPTY;
- new_element3 = EL_SP_BASE;
- }
- else if (level.game_engine_type == GAME_ENGINE_TYPE_MM)
- {
- new_element1 = EL_MM_MIRROR_START;
- new_element2 = EL_EMPTY;
- new_element3 = EL_MM_WOODEN_WALL;
- }
- else
- {
- new_element1 = EL_WALL;
- new_element2 = EL_EMPTY;
- new_element3 = EL_SAND;
- }
+ // select drawing elements according to game engine type
+ new_element1 = getDrawingElement(EL_WALL);
+ new_element2 = getDrawingElement(EL_EMPTY);
+ new_element3 = getDrawingElement(EL_SAND);
game_engine_type_last = level.game_engine_type;
}
MapSelectboxGadget(i);
}
-static boolean CheckLevelColorsRGB_BD(void)
+static int GetCommonColorType_BD(void)
{
- boolean rgb_colors = FALSE;
+ int bd_color_type = *bd_color[0] >> 24;
int i;
- // check if any level color is not a C64-style color index
- for (i = 0; i < MAX_BD_COLORS; i++)
- if (!gd_color_is_c64(*bd_color[i]))
- rgb_colors = TRUE;
+ // check if all colors have the same color type
+ for (i = 1; i < MAX_BD_COLORS; i++)
+ if ((*bd_color[i] >> 24) != bd_color_type)
+ return GD_COLOR_TYPE_RGB;
- return rgb_colors;
+ return bd_color_type;
}
void SetDefaultLevelColorType_BD(void)
{
- level.bd_color_type = (CheckLevelColorsRGB_BD() ? GD_COLOR_TYPE_RGB : GD_COLOR_TYPE_C64);
+ bd_color_type_default = GetCommonColorType_BD();
+
+ level.bd_color_type = bd_color_type_default;
}
void SetDefaultLevelColors_BD(void)
{
int i;
- // only set default colors if C64 style palette
- if (level.bd_color_type == GD_COLOR_TYPE_C64)
- for (i = 0; i < MAX_BD_COLORS; i++)
- bd_color_default[i] = *bd_color[i];
+ for (i = 0; i < MAX_BD_COLORS; i++)
+ bd_color_default[i] = *bd_color[i];
}
-static void SetRandomLevelColors_BD(void)
+void SetRandomLevelColors_BD(int bd_color_type)
{
struct LevelInfo_BD *level_bd = level.native_bd_level;
GdCave *cave = level_bd->cave;
// create random cave colors
- gd_cave_set_random_colors(cave, level.bd_color_type);
+ gd_cave_set_random_colors(cave, bd_color_type);
// copy colors to level editor
level.bd_color_b = cave->colorb;
level.bd_color_5 = cave->color5;
}
+static void DrawColorBox_BD(int nr)
+{
+ int id = ED_SELECTBOX_ID_COLORS_FIRST + nr;
+ struct GadgetInfo *gi = level_editor_gadget[selectbox_info[id].gadget_id];
+ int graphic = IMG_EDITOR_CHECKBOX;
+ struct GraphicInfo *gd = &graphic_info[graphic];
+ int offset = ED_GADGET_TEXT_DISTANCE;
+ int x1 = gi->x - offset - gd->width;
+ int y1 = gi->y;
+ int x2 = x1 + offset;
+ int y2 = y1 + offset;
+ int xsize1 = gd->width;
+ int ysize1 = gd->height;
+ int xsize2 = xsize1 - 2 * offset;
+ int ysize2 = ysize1 - 2 * offset;
+ int bd_color_x = *bd_color[nr];
+ int r = gd_color_get_r(bd_color_x);
+ int g = gd_color_get_g(bd_color_x);
+ int b = gd_color_get_b(bd_color_x);
+ Pixel color = SDL_MapRGB(drawto->surface->format, r, g, b);
+
+ BlitBitmap(gd->bitmap, drawto, gd->src_x, gd->src_y, xsize1, ysize1, x1, y1);
+ FillRectangle(drawto, x2, y2, xsize2, ysize2, color);
+}
+
static void DrawEngineConfigColors(void)
{
int i;
if (bd_color_type_changed)
{
- if (level.bd_color_type == GD_COLOR_TYPE_C64 && CheckLevelColorsRGB_BD())
+ if (level.bd_color_type != GD_COLOR_TYPE_RGB && level.bd_color_type != GetCommonColorType_BD())
{
- // color palette switched to C64 colors, but using RGB colors => reset to defaults
- for (i = 0; i < MAX_BD_COLORS; i++)
- *bd_color[i] = bd_color_default[i];
+ // color type switched to non-RGB colors, but using different color type => reset colors
+
+ if (level.bd_color_type == bd_color_type_default)
+ {
+ // color type switched to same color type as default colors => reset to defaults
+ for (i = 0; i < MAX_BD_COLORS; i++)
+ *bd_color[i] = bd_color_default[i];
+ }
+ else
+ {
+ // color type switched to different color type as default colors => use random colors
+ SetRandomLevelColors_BD(level.bd_color_type);
+ }
}
bd_color_type_changed = FALSE;
}
- // copy level colors to either C64-style color index or RGB color value
+ // copy level colors to either C64-style color index or color text
for (i = 0; i < MAX_BD_COLORS; i++)
{
- if (level.bd_color_type == GD_COLOR_TYPE_RGB)
- snprintf(bd_color_rgb[i], sizeof(bd_color_rgb[i]), "#%06x", gd_color_get_rgb(*bd_color[i]));
+ int bd_color_x = (level.bd_color_type == GD_COLOR_TYPE_C64 ? *bd_color[i] & 0x0f :
+ level.bd_color_type == GD_COLOR_TYPE_RGB ? gd_color_get_rgb(*bd_color[i]) :
+ *bd_color[i]);
+
+ if (level.bd_color_type == GD_COLOR_TYPE_C64)
+ bd_color_c64[i] = bd_color_x;
else
- bd_color_c64[i] = *bd_color[i] & 0x0f;
+ snprintf(bd_color_text[i], sizeof(bd_color_text[i]), "%s", gd_color_get_string(bd_color_x));
}
MapSelectboxGadget(ED_SELECTBOX_ID_BD_COLOR_TYPE);
- if (level.bd_color_type == GD_COLOR_TYPE_RGB)
- {
- // draw text input gadgets
- for (i = ED_TEXTINPUT_ID_COLORS_FIRST; i <= ED_TEXTINPUT_ID_COLORS_LAST; i++)
- MapTextInputGadget(i);
- }
- else
+ if (level.bd_color_type == GD_COLOR_TYPE_C64)
{
// draw selectbox gadgets
for (i = ED_SELECTBOX_ID_COLORS_FIRST; i <= ED_SELECTBOX_ID_COLORS_LAST; i++)
MapSelectboxGadget(i);
}
+ else
+ {
+ // draw text input gadgets
+ for (i = ED_TEXTINPUT_ID_COLORS_FIRST; i <= ED_TEXTINPUT_ID_COLORS_LAST; i++)
+ MapTextInputGadget(i);
+ }
+
+ for (i = 0; i < MAX_BD_COLORS; i++)
+ DrawColorBox_BD(i);
MapTextbuttonGadget(ED_TEXTBUTTON_ID_BD_SET_RANDOM_COLORS);
}
stick_element_properties_window = FALSE;
+ // make sure that previous level config edit mode exists for this level
+ if (edit_mode_levelconfig == ED_MODE_LEVELCONFIG_ENGINE &&
+ level.game_engine_type != GAME_ENGINE_TYPE_BD)
+ edit_mode_levelconfig = ED_MODE_LEVELCONFIG_LEVEL;
+
SetAutomaticNumberOfGemsNeeded();
UnmapLevelEditorFieldGadgets();
{
int pos = type_id - ED_TEXTINPUT_ID_COLORS_FIRST;
- *bd_color[pos] = gd_color_get_from_string(bd_color_rgb[pos]);
+ *bd_color[pos] = gd_color_get_from_string(bd_color_text[pos]);
+
+ DrawColorBox_BD(pos);
}
// do not mark level as modified for certain non-level-changing gadgets
{
bd_color_type_changed = TRUE;
- if (level.bd_color_type == GD_COLOR_TYPE_C64 && CheckLevelColorsRGB_BD())
+ if (level.bd_color_type != GD_COLOR_TYPE_RGB && level.bd_color_type != GetCommonColorType_BD())
{
- // color palette switched to C64 colors, but using RGB colors => reset to defaults
- if (!Request("This will reset C64 colors to defaults! Continue?", REQ_ASK))
+ // color type switched to non-RGB colors, but using different color type => reset colors
+ char *message = (level.bd_color_type == bd_color_type_default ?
+ "This will reset colors to defaults! Continue?" :
+ "This will reset colors to random colors! Continue?");
+
+ if (!Request(message, REQ_ASK))
{
// keep current RGB colors
level.bd_color_type = GD_COLOR_TYPE_RGB;
int pos = type_id - ED_SELECTBOX_ID_COLORS_FIRST;
*bd_color[pos] = gd_c64_color(bd_color_c64[pos]);
+
+ DrawColorBox_BD(pos);
}
// do not mark level as modified for certain non-level-changing gadgets
}
else if (type_id == ED_TEXTBUTTON_ID_BD_SET_RANDOM_COLORS)
{
- SetRandomLevelColors_BD();
+ SetRandomLevelColors_BD(level.bd_color_type);
// update BD color palette gadgets after setting random colors
DrawLevelConfigWindow();