diff --git a/colors.cpp b/colors.cpp index 8c5ecda5..1dc89683 100644 --- a/colors.cpp +++ b/colors.cpp @@ -273,5 +273,38 @@ EX int weakfirecolor(int phase) { return gradient(0xFF8000, 0xFF0000, -1, sintick(500, phase/1000./M_PI), 1); } +/* HTML color names */ + +EX vector> color_names = { +{"aliceblue", 0xf0f8ff}, {"antiquewhite", 0xfaebd7}, {"aqua", 0x00ffff}, {"aquamarine", 0x7fffd4}, {"azure", 0xf0ffff}, +{"beige", 0xf5f5dc}, {"bisque", 0xffe4c4}, {"black", 0x000000}, {"blanchedalmond", 0xffebcd}, {"blue", 0x0000ff}, {"blueviolet", 0x8a2be2}, {"brown", 0xa52a2a}, {"burlywood", 0xdeb887}, +{"cadetblue", 0x5f9ea0}, {"chartreuse", 0x7fff00}, {"chocolate", 0xd2691e}, {"coral", 0xff7f50}, {"cornflowerblue", 0x6495ed}, {"cornsilk", 0xfff8dc}, {"crimson", 0xdc143c}, {"cyan", 0x00ffff}, +{"darkblue", 0x00008b}, {"darkcyan", 0x008b8b}, {"darkgoldenrod", 0xb8860b}, {"darkgray", 0xa9a9a9}, {"darkgreen", 0x006400}, {"darkkhaki", 0xbdb76b}, {"darkmagenta", 0x8b008b}, {"darkolivegreen", 0x556b2f}, +{"darkorange", 0xff8c00}, {"darkorchid", 0x9932cc}, {"darkred", 0x8b0000}, {"darksalmon", 0xe9967a}, {"darkseagreen", 0x8fbc8f}, {"darkslateblue", 0x483d8b}, {"darkslategray", 0x2f4f4f}, {"darkturquoise", 0x00ced1}, +{"darkviolet", 0x9400d3}, {"deeppink", 0xff1493}, {"deepskyblue", 0x00bfff}, {"dimgray", 0x696969}, {"dodgerblue", 0x1e90ff}, +{"firebrick", 0xb22222}, {"floralwhite", 0xfffaf0}, {"forestgreen", 0x228b22}, {"fuchsia", 0xff00ff}, +{"gainsboro", 0xdcdcdc}, {"ghostwhite", 0xf8f8ff}, {"gold", 0xffd700}, {"goldenrod", 0xdaa520}, {"gray", 0x808080}, {"green", 0x008000}, {"greenyellow", 0xadff2f}, +{"honeydew", 0xf0fff0}, {"hotpink", 0xff69b4}, +{"indianred ", 0xcd5c5c}, {"indigo", 0x4b0082}, {"ivory", 0xfffff0}, {"khaki", 0xf0e68c}, +{"lavender", 0xe6e6fa}, {"lavenderblush", 0xfff0f5}, {"lawngreen", 0x7cfc00}, {"lemonchiffon", 0xfffacd}, {"lightblue", 0xadd8e6}, {"lightcoral", 0xf08080}, {"lightcyan", 0xe0ffff}, {"lightgoldenrodyellow", 0xfafad2}, +{"lightgrey", 0xd3d3d3}, {"lightgreen", 0x90ee90}, {"lightpink", 0xffb6c1}, {"lightsalmon", 0xffa07a}, {"lightseagreen", 0x20b2aa}, {"lightskyblue", 0x87cefa}, {"lightslategray", 0x778899}, {"lightsteelblue", 0xb0c4de}, +{"lightyellow", 0xffffe0}, {"lime", 0x00ff00}, {"limegreen", 0x32cd32}, {"linen", 0xfaf0e6}, +{"magenta", 0xff00ff}, {"maroon", 0x800000}, {"mediumaquamarine", 0x66cdaa}, {"mediumblue", 0x0000cd}, {"mediumorchid", 0xba55d3}, {"mediumpurple", 0x9370d8}, {"mediumseagreen", 0x3cb371}, {"mediumslateblue", 0x7b68ee}, +{"mediumspringgreen", 0x00fa9a}, {"mediumturquoise", 0x48d1cc}, {"mediumvioletred", 0xc71585}, {"midnightblue", 0x191970}, {"mintcream", 0xf5fffa}, {"mistyrose", 0xffe4e1}, {"moccasin", 0xffe4b5}, +{"navajowhite", 0xffdead}, {"navy", 0x000080}, +{"oldlace", 0xfdf5e6}, {"olive", 0x808000}, {"olivedrab", 0x6b8e23}, {"orange", 0xffa500}, {"orangered", 0xff4500}, {"orchid", 0xda70d6}, +{"palegoldenrod", 0xeee8aa}, {"palegreen", 0x98fb98}, {"paleturquoise", 0xafeeee}, {"palevioletred", 0xd87093}, {"papayawhip", 0xffefd5}, {"peachpuff", 0xffdab9}, {"peru", 0xcd853f}, {"pink", 0xffc0cb}, {"plum", 0xdda0dd}, {"powderblue", 0xb0e0e6}, {"purple", 0x800080}, +{"rebeccapurple", 0x663399}, {"red", 0xff0000}, {"rosybrown", 0xbc8f8f}, {"royalblue", 0x4169e1}, +{"saddlebrown", 0x8b4513}, {"salmon", 0xfa8072}, {"sandybrown", 0xf4a460}, {"seagreen", 0x2e8b57}, {"seashell", 0xfff5ee}, {"sienna", 0xa0522d}, {"silver", 0xc0c0c0}, {"skyblue", 0x87ceeb}, {"slateblue", 0x6a5acd}, {"slategray", 0x708090}, {"snow", 0xfffafa}, {"springgreen", 0x00ff7f}, {"steelblue", 0x4682b4}, +{"tan", 0xd2b48c}, {"teal", 0x008080}, {"thistle", 0xd8bfd8}, {"tomato", 0xff6347}, {"turquoise", 0x40e0d0}, +{"violet", 0xee82ee}, +{"wheat", 0xf5deb3}, {"white", 0xffffff}, {"whitesmoke", 0xf5f5f5}, +{"yellow", 0xffff00}, {"yellowgreen", 0x9acd32} +}; + +EX pair* find_color_by_name(const string& s) { + for(auto& c: color_names) if(c.first == s) return &c; + return nullptr; + } } diff --git a/commandline.cpp b/commandline.cpp index c7e71400..7f26e645 100644 --- a/commandline.cpp +++ b/commandline.cpp @@ -102,6 +102,14 @@ EX namespace arg { } } EX bool argis(const string& s) { if(args()[0] == '-' && args()[1] == '-') return args().substr(1) == s; return args() == s; } + + EX color_t argcolor(int bits) { + string s = args(); + auto p = find_color_by_name(s); + if(p && bits == 24) return p->second; + if(p && bits == 32) return (p->second << 8) | 0xFF; + return strtoll(argcs(), NULL, 16); + } EX void shift_arg_formula(ld& x, const reaction_t& r IS(reaction_t())) { shift(); ld old = x; x = argf(); diff --git a/config.cpp b/config.cpp index 10b510de..9ed7edb6 100644 --- a/config.cpp +++ b/config.cpp @@ -2951,38 +2951,38 @@ EX int read_color_args() { using namespace arg; if(argis("-back")) { - PHASEFROM(2); shift(); backcolor = arghex(); + PHASEFROM(2); shift(); backcolor = argcolor(24); } else if(argis("-fillmodel")) { - PHASEFROM(2); shift(); modelcolor = arghex(); + PHASEFROM(2); shift(); modelcolor = argcolor(32); } else if(argis("-ring")) { - PHASEFROM(2); shift(); ringcolor = arghex(); + PHASEFROM(2); shift(); ringcolor = argcolor(32); } else if(argis("-ringw")) { PHASEFROM(2); shift_arg_formula(vid.multiplier_ring); } else if(argis("-stdgrid")) { - PHASEFROM(2); shift(); stdgridcolor = arghex(); + PHASEFROM(2); shift(); stdgridcolor = argcolor(32); } else if(argis("-gridw")) { PHASEFROM(2); shift_arg_formula(vid.multiplier_grid); } else if(argis("-period")) { - PHASEFROM(2); shift(); periodcolor = arghex(); + PHASEFROM(2); shift(); periodcolor = argcolor(32); } else if(argis("-crosshair")) { - PHASEFROM(2); shift(); crosshair_color = arghex(); + PHASEFROM(2); shift(); crosshair_color = argcolor(32); shift_arg_formula(crosshair_size); } else if(argis("-borders")) { - PHASEFROM(2); shift(); bordcolor = arghex(); + PHASEFROM(2); shift(); bordcolor = argcolor(24); } else if(argis("-fore")) { - PHASEFROM(2); shift(); forecolor = arghex(); + PHASEFROM(2); shift(); forecolor = argcolor(24); } else if(argis("-dialog")) { - PHASEFROM(2); shift(); dialog::dialogcolor = arghex(); + PHASEFROM(2); shift(); dialog::dialogcolor = argcolor(24); } else if(argis("-d:color")) launch_dialog(show_color_dialog); diff --git a/crystal.cpp b/crystal.cpp index 663e49c7..f01ba068 100644 --- a/crystal.cpp +++ b/crystal.cpp @@ -1406,7 +1406,7 @@ int readArgs() { launch_dialog(show); else if(argis("-cvcol")) { shift(); int d = argi(); - shift(); coordcolors[d] = arghex(); + shift(); coordcolors[d] = argcolor(24); } else return 1; return 0; diff --git a/expansion.cpp b/expansion.cpp index 4df4f057..953b8522 100644 --- a/expansion.cpp +++ b/expansion.cpp @@ -934,7 +934,7 @@ int expansion_readArgs() { else if(argis("-expansion-labelcolor")) { dist_label_colored = false; - shift(); dist_label_color = arghex(); + shift(); dist_label_color = argcolor(24); } else if(argis("-expansion-off")) { diff --git a/pattern2.cpp b/pattern2.cpp index 3927f84f..4e3e7e88 100644 --- a/pattern2.cpp +++ b/pattern2.cpp @@ -3072,7 +3072,7 @@ int read_pattern_args() { shift(); for(auto& lp: linepatterns::patterns) if(appears(lp->lpname, ss)) - lp->color = arghex(); + lp->color = argcolor(32); } else if(argis("-fat-edges")) { @@ -3102,10 +3102,10 @@ int read_pattern_args() { if(c == 't') ct = &nestcolors; else if(c == 'd') ct = &distcolors; else if(c == 'm') ct = &minecolors; - else if(c == 'E') { shift(); int d = argi(); shift(); expcolors[d] = arghex(); return 0; } + else if(c == 'E') { shift(); int d = argi(); shift(); expcolors[d] = argcolor(24); return 0; } else if(c == 'P') { shift(); int d = argi(); shift(); - color_t h = arghex(); + color_t h = argcolor(32); if(d >= 0 && d < 7) ((color_t*)(&vid.cs.skincolor)) [d] = h; return 0; @@ -3115,7 +3115,7 @@ int read_pattern_args() { } int d = argi(); ct->allocate(d+1); - shift(); (*ct)[d] = arghex(); + shift(); (*ct)[d] = argcolor(24); } else if(argis("-canvas")) { PHASEFROM(2); @@ -3124,7 +3124,7 @@ int read_pattern_args() { shift(); if(args() == "i") canvas_default_wall = waInvisibleFloor; else if(args().size() == 1) patterns::whichCanvas = args()[0]; - else patterns::canvasback = arghex(); + else patterns::canvasback = argcolor(24); stop_game_and_switch_mode(rg::nothing); } else if(argis("-canvas-random")) { diff --git a/raycaster.cpp b/raycaster.cpp index 3e0114f5..dc141505 100644 --- a/raycaster.cpp +++ b/raycaster.cpp @@ -2904,7 +2904,7 @@ int readArgs() { shift_arg_formula(hard_limit); } else if(argis("-ray-out")) { - PHASEFROM(2); shift(); color_out_of_range = arghex(); + PHASEFROM(2); shift(); color_out_of_range = argcolor(32); } else if(argis("-ray-comp")) { PHASEFROM(2); @@ -2947,7 +2947,7 @@ int readArgs() { else if(argis("-ray-cursor")) { start_game(); volumetric::enable(); - shift(); volumetric::vmap[centerover] = arghex(); + shift(); volumetric::vmap[centerover] = argcolor(32); } else return 1; return 0; diff --git a/screenshot.cpp b/screenshot.cpp index 00f0759d..6d124989 100644 --- a/screenshot.cpp +++ b/screenshot.cpp @@ -1762,7 +1762,7 @@ int readArgs() { rotation_center_View = View; shift_arg_formula(circle_spins); shift_arg_formula(circle_radius); - shift(); circle_display_color = arghex(); + shift(); circle_display_color = argcolor(24); } else if(argis("-animmove")) { ma = maTranslation;