diff options
author | Tor Andersson <tor@ccxvii.net> | 2024-08-23 20:24:39 +0200 |
---|---|---|
committer | Tor Andersson <tor@ccxvii.net> | 2024-08-24 01:19:42 +0200 |
commit | faaf7a743c52fa8f02b925d8f4574c28fa2fdd4f (patch) | |
tree | 218c98c52c87f17d2219812b48bba300bb84f24d /tools/genpieces.mjs | |
parent | fbaf46e83219a478df15e9cce4991d426eb773cd (diff) | |
download | vijayanagara-faaf7a743c52fa8f02b925d8f4574c28fa2fdd4f.tar.gz |
Pieces.
Diffstat (limited to 'tools/genpieces.mjs')
-rw-r--r-- | tools/genpieces.mjs | 307 |
1 files changed, 307 insertions, 0 deletions
diff --git a/tools/genpieces.mjs b/tools/genpieces.mjs new file mode 100644 index 0000000..d6a74c2 --- /dev/null +++ b/tools/genpieces.mjs @@ -0,0 +1,307 @@ +// Cylinder spaces on map are 48x48 + +// SIZES in millimeters +// cylinders = 14.5 x 10 +// discs = 14.5 x 4 +// cubes = 9 x 9 +// octagons = 10 x 10 + +// SIZES in 75dpi pixels +// cylinder = 43 x 29.5 +// disc = 43 x 12 +// cube = 26.6 x 26.6 +// octagon = 29.5 x 29.5 + +// SIZES in 72dpi pixels +// cylinder = 41 x 28 +// disc = 41 x 11 +// cube = 25 x 25 +// octagon = 28 x 28 + +// isometric scale = 2 / 3 +// vertical scale = 2 / 3 + +// octagon badge = 23x15 / 25x17 + +import fs from "node:fs" +import { formatHex, parseHex, convertRgbToOklab } from 'culori' + +const moon = "M11.278 2.384c-3.919.61-6.767 3.088-6.767 5.89 0 1.156.339 2.119 1.09 3.068 1.655 2.085 5.235 3.387 8.478 3.068 2.613-.252 4.737-1.135 6.1-2.543.751-.77.78-.85.169-.458-.649.405-1.833.83-2.735.982-.818.133-2.322.127-3.14-.013a10 10 0 0 1-2.358-.79C9.972 10.472 8.938 8.4 9.633 6.574c.452-1.208 1.767-2.37 3.328-2.942 1.118-.418 1.88-.544 3.157-.537.62 0 1.25.04 1.391.08.198.059.245.059.198.006-.104-.12-1.523-.571-2.293-.724-1.025-.206-3.046-.246-4.136-.073" + +const sun = "m13.14 1.92-.386.271.084.552c.132.863.085 1.135-.225 1.494-.376.431-.536.411-.527-.053 0-.2.038-.472.076-.598.056-.186.028-.279-.15-.458-.34-.352-.424-.332-.414.106.01.425-.339 1.03-.611 1.07-.085.012-.245-.08-.376-.22-.122-.126-.573-.405-1.006-.604-.723-.346-1.052-.611-1.052-.844 0-.053-.066-.132-.141-.179-.113-.066-.15-.053-.235.1-.198.358-.122.597.31.936.695.564.893.823.968 1.262.047.352.037.411-.103.451a.7.7 0 0 1-.188.027c-.16-.14-.517-.604-.517-.67 0-.16-.574-.506-.903-.552-.404-.053-.517.013-.244.146.113.053.31.226.432.379.245.312.404.943.245 1.009-.057.02-.339-.02-.63-.1-.395-.106-.724-.14-1.288-.126-.874.007-1.203-.06-1.635-.358-.263-.18-.3-.193-.3-.073 0 .212.403.697.657.796.132.047.48.14.77.193.659.133 1.063.319 1.458.684.526.485.225.551-.658.146a5 5 0 0 0-.8-.312c-.234-.04-.704.08-.873.22-.085.072-.057.092.197.092.451 0 .893.18 1.26.511.404.372.423.472.084.518-.573.08-.95.193-1.513.452-.526.232-.667.266-1.222.279-.733.02-.808.106-.3.352.272.126.413.152.798.126.263-.02.658-.08.884-.14.507-.132 1.109-.132 1.541-.006.404.12.498.206.348.332-.085.073-.33.1-.893.1-.818 0-.912.033-1.175.391-.103.146-.103.153.057.107.592-.166 1.945-.034 2.077.205.028.054-.085.173-.263.273-.18.106-.442.391-.63.684-.433.657-.808.976-1.26 1.075-.413.087-.376.147.15.246.48.093.978-.086 1.364-.485.357-.358.79-.624 1.118-.677a5 5 0 0 0 .517-.106c.207-.06.291-.053.404.026.16.113.16.107-.808.605-.301.159-.433.279-.48.445-.103.351.029.458.273.212.32-.312 1.363-.598 1.682-.458.085.04.085.1.029.219-.123.226-.113.77.018 1.228.123.425.01.79-.329 1.096-.169.16-.169.16.076.16.31 0 .676-.173.836-.392.066-.093.15-.379.188-.631.075-.531.385-1.003.799-1.222.32-.166.573-.193.573-.053 0 .053-.15.299-.329.551-.282.392-.32.485-.235.677.179.439.47.512.47.113 0-.332.79-1.109 1.025-1.01.047.02.16.187.235.36.094.179.357.464.62.677.63.491.883.863.818 1.202-.057.319.009.325.29.026.236-.265.283-.79.076-.996-.066-.073-.216-.325-.329-.558-.178-.365-.188-.464-.103-.77.056-.192.16-.398.225-.465.123-.113.132-.113.264.04.084.087.169.299.206.472.085.498.282.77.658.896.423.14.508.086.245-.166a1 1 0 0 1-.254-.471c-.057-.293.122-.804.272-.804.057 0 .263.086.48.193s.714.265 1.1.345c.76.153 1.268.379 1.428.63.225.34.47.127.348-.291-.085-.286-.245-.405-1.053-.79-.564-.266-.696-.372-.921-.718-.526-.783-.291-.883.601-.239.658.472.893.551 1.326.432.225-.06.188-.113-.226-.292a1.37 1.37 0 0 1-.62-.518c-.33-.498-.282-.545.554-.545.414 0 .846-.04 1.034-.1.442-.126 1.466-.126 1.701 0a.9.9 0 0 0 .31.1c.179 0-.056-.305-.394-.531-.226-.153-.348-.166-1.25-.2-.987-.033-1.015-.04-1.57-.298-.31-.146-.564-.312-.564-.365 0-.14.602-.166 1.034-.04.47.14.874.133 1.25-.027.46-.199.395-.319-.141-.285-.367.026-.545-.007-.968-.166-.649-.246-.686-.366-.207-.538.207-.073.602-.319.874-.545.574-.458 1.137-.724 1.57-.724.46 0 .432-.106-.085-.265-.564-.166-.742-.146-1.363.153-.77.371-1.024.444-1.625.444-.677 0-.856-.04-.856-.205 0-.147.17-.213.8-.32.582-.105 1.042-.344 1.108-.584q.099-.39-.254-.172c-.31.199-.686.285-1.193.285-.583 0-.649-.086-.376-.53.103-.18.197-.42.197-.532 0-.425.282-.93.677-1.209.423-.299.366-.405-.179-.318-.47.08-.733.285-1.174.91-.207.305-.499.61-.63.677-.339.166-.855.338-1.015.338-.141 0-.17-.305-.028-.365.206-.093.874-.79.874-.923 0-.193-.132-.505-.217-.505-.037 0-.112.113-.169.253-.112.265-.441.511-.93.717-.385.153-.46.1-.583-.405a2.2 2.2 0 0 0-.329-.717c-.32-.425-.385-.81-.216-1.163.188-.385.047-.411-.423-.086" + +const moon_big = "M19.85 4.207C12.952 5.285 7.94 9.657 7.94 14.602c0 2.039.595 3.738 1.919 5.414 2.91 3.68 9.213 5.976 14.92 5.414 4.598-.446 8.337-2.004 10.735-4.489 1.324-1.359 1.373-1.5.298-.808-1.141.715-3.226 1.465-4.814 1.734-1.439.235-4.085.223-5.524-.023-1.24-.223-3.044-.832-4.152-1.395-3.772-1.969-5.591-5.625-4.367-8.847.794-2.133 3.11-4.184 5.856-5.192 1.968-.738 3.308-.96 5.557-.95 1.092 0 2.2.071 2.449.142.347.105.43.105.347.011-.182-.21-2.68-1.008-4.036-1.277-1.803-.363-5.36-.434-7.278-.129" + +const sun_big = "m23.125 3.387-.678.48.148.973c.232 1.523.15 2.004-.397 2.637-.661.761-.942.726-.926-.094 0-.352.066-.832.133-1.055.099-.328.05-.492-.265-.808-.596-.622-.745-.586-.728.187.017.75-.595 1.816-1.075 1.887-.149.023-.43-.14-.662-.387-.215-.223-1.009-.715-1.77-1.066-1.273-.61-1.852-1.078-1.852-1.489 0-.093-.116-.234-.248-.316-.199-.117-.265-.094-.414.176-.347.633-.215 1.054.546 1.652 1.224.996 1.571 1.453 1.704 2.227.082.62.066.726-.182.797-.166.035-.315.058-.331.046-.281-.246-.91-1.066-.91-1.183 0-.281-1.009-.89-1.588-.973-.711-.094-.91.024-.43.258.198.094.546.398.76.668.431.55.712 1.664.431 1.781-.1.035-.596-.035-1.108-.176-.695-.187-1.274-.246-2.266-.222-1.539.011-2.118-.106-2.879-.633-.463-.316-.529-.34-.529-.129 0 .375.711 1.23 1.158 1.406a11 11 0 0 0 1.356.34c1.158.234 1.87.563 2.564 1.207.927.856.397.973-1.158.258-.562-.27-1.19-.504-1.406-.55-.413-.071-1.24.14-1.538.386-.149.129-.1.164.347.164.794 0 1.572.316 2.217.902.711.657.744.832.149.914-1.01.141-1.67.34-2.663.797-.927.41-1.175.469-2.15.492-1.291.036-1.423.188-.53.621.48.223.728.27 1.406.223.463-.035 1.158-.14 1.555-.246.893-.234 1.952-.234 2.713-.012.71.211.876.364.612.586-.15.13-.58.176-1.572.176-1.439 0-1.604.059-2.067.691-.182.258-.182.27.099.188 1.042-.293 3.424-.059 3.655.363.05.094-.148.305-.463.48-.314.188-.777.692-1.108 1.208-.76 1.16-1.423 1.722-2.217 1.898-.727.153-.661.258.265.434.844.164 1.72-.153 2.399-.856.628-.633 1.39-1.101 1.968-1.195a8 8 0 0 0 .91-.187c.364-.106.513-.094.711.046.281.2.281.188-1.423 1.067-.529.281-.76.492-.843.785-.182.621.05.809.48.375.562-.55 2.398-1.055 2.96-.809.15.07.15.176.05.387-.215.398-.198 1.36.033 2.168.215.75.017 1.395-.579 1.934-.297.28-.297.28.133.28.545 0 1.19-.304 1.472-.69.116-.165.264-.669.33-1.114.133-.937.679-1.77 1.407-2.156.562-.293 1.009-.34 1.009-.094 0 .094-.265.528-.58.973-.496.691-.562.855-.413 1.195.314.774.827.902.827.2 0-.587 1.39-1.958 1.803-1.782.083.035.281.328.414.633.165.316.628.82 1.091 1.195 1.109.867 1.555 1.524 1.44 2.121-.1.563.016.575.512.047.414-.469.497-1.394.133-1.758-.116-.128-.38-.574-.58-.984-.314-.645-.33-.82-.181-1.36.099-.34.281-.702.397-.82.215-.199.231-.199.463.07.149.153.298.528.364.833.149.879.496 1.36 1.158 1.582.744.246.893.152.43-.293a1.8 1.8 0 0 1-.447-.832c-.099-.516.215-1.418.48-1.418.1 0 .463.152.844.34.38.187 1.257.468 1.935.609 1.34.27 2.233.668 2.514 1.113.397.598.827.223.612-.515-.149-.504-.43-.715-1.852-1.395-.993-.469-1.225-.656-1.622-1.266-.926-1.382-.512-1.558 1.06-.421 1.157.832 1.57.972 2.331.761.397-.105.331-.199-.397-.515-.48-.211-.794-.48-1.091-.914-.58-.88-.497-.961.976-.961.727 0 1.488-.07 1.82-.176.777-.223 2.58-.223 2.993 0 .182.094.43.176.546.176.314 0-.1-.54-.695-.938-.397-.27-.612-.293-2.2-.351-1.737-.059-1.786-.07-2.762-.528-.546-.258-.993-.55-.993-.644 0-.246 1.06-.293 1.82-.07.827.246 1.538.234 2.2-.047.81-.352.695-.563-.248-.504-.645.047-.96-.012-1.704-.293-1.141-.434-1.207-.645-.364-.95.364-.128 1.059-.562 1.539-.96 1.009-.81 2.001-1.278 2.762-1.278.81 0 .76-.187-.149-.469-.992-.293-1.307-.257-2.398.27-1.357.656-1.803.785-2.862.785-1.191 0-1.505-.07-1.505-.363 0-.258.297-.375 1.406-.563 1.025-.187 1.836-.609 1.952-1.03.115-.458-.034-.563-.447-.306-.546.352-1.208.504-2.1.504-1.026 0-1.142-.152-.662-.937.182-.317.347-.738.347-.938 0-.75.496-1.64 1.19-2.133.745-.527.646-.714-.313-.562-.827.14-1.29.504-2.068 1.605-.364.54-.877 1.079-1.108 1.196-.596.293-1.506.597-1.787.597-.248 0-.298-.539-.05-.644.364-.164 1.539-1.395 1.539-1.629 0-.34-.232-.89-.38-.89-.067 0-.199.199-.298.445-.199.468-.778.902-1.638 1.265-.678.27-.81.176-1.025-.715a3.8 3.8 0 0 0-.58-1.265c-.562-.75-.678-1.43-.38-2.05.331-.68.083-.727-.744-.153" + +const qasbah = +"M19.292 5.925c-1.81.5-2.995 1.137-3.875 2.125l-.44.487-.17-.737-.169-.738-.795-.037-.812-.038v1.225c0 .675-.119 3.838-.254 7.038s-.254 6-.254 6.213v.412h6.092v-2.437c0-2.775.085-3.013 1.32-3.838 1.371-.925 1.727-.913 3.063.025 1.304.925 1.371 1.1 1.371 3.875v2.375h5.974l-.101-1.6c-.068-.875-.187-4.15-.288-7.275-.102-3.125-.22-5.763-.254-5.85-.05-.088-.355-.15-.745-.15-.727 0-.744.025-.964.9-.051.262-.17.475-.254.475-.085 0-.152-.05-.152-.113 0-.2-1.574-1.412-2.251-1.725-1.185-.55-2.403-.787-3.994-.775-.795 0-1.726.075-2.048.163" + +const fort = +"M13.335 7.637c-.575.35-.643.45-.643.988 0 .975-.152 1.35-.524 1.288-.186-.038-.356.012-.39.1-.05.1-.236 1.612-.423 3.362-.203 1.75-.473 4.138-.609 5.313-.135 1.162-.254 2.162-.254 2.212 0 .063 1.71.1 3.808.1h3.808v-1.987c0-2.463.05-2.538 2.301-3.538.271-.125.61-.288.745-.363.203-.112.406-.075.88.15.355.163.981.463 1.404.65 1.219.563 1.337.838 1.405 3.125L24.911 21h7.412v-.288c0-.275-.118-1.387-.846-7.587-.186-1.613-.339-3.013-.339-3.1 0-.075-.186-.15-.406-.15-.372 0-.406-.05-.507-.988-.119-.975-.136-.987-.779-1.312-.812-.4-.863-.4-1.675-.025-.491.237-.677.412-.762.75-.101.375-.186.45-.524.45-.305 0-.44-.088-.525-.313-.118-.337-1.066-.812-1.625-.812-.49 0-1.489.587-1.489.887 0 .175-.118.238-.423.238-.355 0-.423.062-.423.375 0 .337-.05.375-.49.375-.424 0-.508-.05-.56-.35-.033-.188-.168-.35-.304-.35-.135-.013-.355-.025-.457-.038-.118 0-.22-.137-.22-.3 0-.312-.964-.837-1.54-.837-.49 0-1.506.575-1.506.862 0 .3-.118.363-.592.288-.339-.038-.423-.125-.423-.413 0-.275-.153-.45-.711-.737-.863-.463-1.083-.463-1.862.012" + +const temple = +"M20.274 4.762c-1.05.463-1.422 1.388-.914 2.263.118.187.05.225-.39.225h-.524v1.625h-1.184v2.25h-1.354v3.125h-1.185v3.625H13.37v4.75h16.077v-4.75h-1.354V14.25h-1.184v-3.125h-1.185v-2.25H24.37v-.812c0-.788-.017-.813-.44-.813-.355 0-.423-.05-.321-.225.88-1.6-1.371-3.125-3.334-2.262" + +function make_piece_colors(base) { + let rgb = parseHex(base) + let sh1 = convertRgbToOklab(rgb); sh1.l *= 0.9; + let sh2 = convertRgbToOklab(rgb); sh2.l *= 0.8; + let sh3 = convertRgbToOklab(rgb); sh3.l *= 0.7; + let sh4 = convertRgbToOklab(rgb); sh4.l *= 0.4; + return [ base, formatHex(sh1), formatHex(sh2), formatHex(sh3), formatHex(sh4) ] +} + +const color_ds = make_piece_colors("#43454b") +const color_ds_troop = make_piece_colors("#707176") +const color_bk = make_piece_colors("#30b58b") +const color_ve = make_piece_colors("#ffbf32") +const color_mongol = make_piece_colors("#da2c1c") + +function print_cylinder(output, icon_path, icon_fill, c) { + let svg = [] + svg.push('<svg xmlns="http://www.w3.org/2000/svg" width="44" height="48">') + + if (0) { + svg.push(`<linearGradient id="g">`) + svg.push(`<stop offset="0%" stop-color="${c[1]}"/>`) + svg.push(`<stop offset="50%" stop-color="${c[2]}"/>`) + svg.push(`<stop offset="100%" stop-color="${c[3]}"/>`) + svg.push('</linearGradient>') + svg.push(`<path fill="url(#g)" stroke="${c[4]}" d="M1.5 15 v 18 a 20.5 13.5 0 0 0 20.5 13.5 a 20.5 13.5 0 0 0 20.5 -13.5 v -18"/>`) + } else { + svg.push(`<path fill="${c[2]}" stroke="${c[4]}" d="M1.5 15 v 18 a 20.5 13.5 0 0 0 20.5 13.5 a 20.5 13.5 0 0 0 20.5 -13.5 v -18"/>`) + } + + svg.push(`<ellipse fill="${c[0]}" stroke="${c[4]}" cx="22" cy="15" rx="20.5" ry="13.5"/>`) + svg.push(`<path fill="${icon_fill}" d="${icon_path}"/>`) + + svg.push('</svg>') + fs.writeFileSync(output, svg.join("\n") + "\n") +} + +function print_disc(output, icon_path, icon_fill, c) { + let svg = [] + svg.push('<svg xmlns="http://www.w3.org/2000/svg" width="44" height="38">') + + if (0) { + svg.push(`<linearGradient id="g">`) + svg.push(`<stop offset="0%" stop-color="${c[1]}"/>`) + svg.push(`<stop offset="50%" stop-color="${c[2]}"/>`) + svg.push(`<stop offset="100%" stop-color="${c[3]}"/>`) + svg.push('</linearGradient>') + svg.push(`<path fill="url(#g)" stroke="${c[4]}" d="M1.5 15 v 8 a 20.5 13.5 0 0 0 20.5 13.5 20.5 13.5 0 0 0 20.5 -13.5 v -8"/>`) + } else { + svg.push(`<path fill="${c[1]}" stroke="${c[4]}" d="M1.5 15 v 8 a 20.5 13.5 0 0 0 20.5 13.5 20.5 13.5 0 0 0 20.5 -13.5 v -8"/>`) + } + + svg.push(`<ellipse fill="${c[0]}" stroke="${c[4]}" cx="22" cy="15" rx="20.5" ry="13.5"/>`) + svg.push(`<path fill="${icon_fill}" d="${icon_path}"/>`) + + svg.push('</svg>') + fs.writeFileSync(output, svg.join("\n") + "\n") +} + +function print_octagon(output, badge_path, badge_fill, c) { + let svg = [] + + // a + b + b = 30 + // a + 2 * a / sqrt(2) = 30 + // 1 + 2 / sqrt(2) = 30 / a + // 2.4142 = 30 / a + // 2.4142 * a = 30 + // a = 30 / 2.4142 + // = 12.4 + + let w = 24 + let a = w / (1 + 2 / Math.sqrt(2)) + let b = a / Math.sqrt(2) + let xo = 0 + let yo = 0 + let ys = 2/3 + let h = Math.round(w * 0.8) + + let v = [ + [ xo + (b + 0), (0) * ys + yo ], + [ xo + (b + a), (0) * ys + yo ], + [ xo + (b + a + b), (b) * ys + yo ], + [ xo + (b + a + b), (b + a) * ys + yo ], + [ xo + (b + a), (b + a + b) * ys + yo ], + [ xo + (b), (b + a + b) * ys + yo ], + [ xo + (0), (b + a) * ys + yo ], + [ xo + (0), (b) * ys + yo ], + ] + + for (let xy of v) { + xy[0] = Math.round(xy[0]) + 0.5 + xy[1] = Math.round(xy[1]) + 0.5 + } + + let v2 = [ + [ v[3][0], v[3][1] ], + [ v[3][0], v[3][1] + h ], + [ v[4][0], v[4][1] + h ], + [ v[5][0], v[5][1] + h ], + [ v[6][0], v[6][1] + h ], + [ v[6][0], v[6][1] ], + ] + + let v3 = [ + [ v[4][0], v[4][1] ], + [ v[4][0], v[4][1] + h ], + ] + + let v4 = [ + [ v[5][0], v[5][1] ], + [ v[5][0], v[5][1] + h ], + ] + + let f1 = [ + [ v[3][0], v[3][1] ], + [ v[3][0], v[3][1] + h ], + [ v[4][0], v[4][1] + h ], + [ v[4][0], v[4][1] ], + ] + + let f2 = [ + [ v[4][0], v[4][1] ], + [ v[4][0], v[4][1] + h ], + [ v[5][0], v[5][1] + h ], + [ v[5][0], v[5][1] ], + ] + + let f3 = [ + [ v[5][0], v[5][1] ], + [ v[5][0], v[5][1] + h ], + [ v[6][0], v[6][1] + h ], + [ v[6][0], v[6][1] ], + ] + + let p1 = v.map(([x,y])=>x + " " + y).join(" ") + let p2 = v2.map(([x,y])=>x + " " + y).join(" ") + let p3 = v3.map(([x,y])=>x + " " + y).join(" ") + let p4 = v4.map(([x,y])=>x + " " + y).join(" ") + + svg.push('<svg xmlns="http://www.w3.org/2000/svg" width="25" height="36">') + + svg.push(`<path fill="${c[0]}" d="M${v}"/>`) + if (badge_path) + svg.push(`<path fill="${badge_fill}" d="${badge_path}"/>`) + svg.push(`<path fill="${c[3]}" d="M${f1}"/>`) + svg.push(`<path fill="${c[2]}" d="M${f2}"/>`) + svg.push(`<path fill="${c[1]}" d="M${f3}"/>`) + svg.push(`<path fill="none" stroke-linecap="round" stroke-linejoin="round" stroke="${c[4]}" d="M${p1}z M${p2} M${p3} M${p4}"/>`) + + svg.push('</svg>') + fs.writeFileSync(output, svg.join("\n") + "\n") +} + +function print_cube(output, c) { + let svg = [] + + let xo = 0 + let yo = 0 + let ys = 2/3 + + let w = 20 + let d = Math.sqrt(w * w + w * w) + let h = Math.round(w * 0.8) + + let v = [ + [ xo + (d/2), yo + (0) * ys ], + [ xo + (d), yo + (d/2) * ys ], + [ xo + (d/2), yo + (d) * ys ], + [ xo + (0), yo + (d/2) * ys ], + ] + + for (let xy of v) { + xy[0] = Math.round(xy[0]) + 0.5 + xy[1] = Math.round(xy[1]) + 0.5 + } + + let v2 = [ + [ v[1][0], v[1][1] ], + [ v[1][0], v[1][1] + h ], + [ v[2][0], v[2][1] + h ], + [ v[3][0], v[3][1] + h ], + [ v[3][0], v[3][1] ], + ] + + let v3 = [ + [ v[2][0], v[2][1] ], + [ v[2][0], v[2][1] + h ], + ] + + let f1 = [ + [ v[1][0], v[1][1] ], + [ v[1][0], v[1][1] + h ], + [ v[2][0], v[2][1] + h ], + [ v[2][0], v[2][1] ], + ] + + let f2 = [ + [ v[2][0], v[2][1] ], + [ v[2][0], v[2][1] + h ], + [ v[3][0], v[3][1] + h ], + [ v[3][0], v[3][1] ], + ] + + svg.push('<svg xmlns="http://www.w3.org/2000/svg" width="29" height="36">') + + svg.push(`<path fill="${c[0]}" d="M${v}"/>`) + svg.push(`<path fill="${c[3]}" d="M${f1}"/>`) + svg.push(`<path fill="${c[1]}" d="M${f2}"/>`) + + svg.push(`<path fill="none" stroke-linecap="round" stroke-linejoin="round" stroke="${c[4]}" d="M${v}z M${v2} M${v3}"/>`) + + svg.push('</svg>') + fs.writeFileSync(output, svg.join("\n") + "\n") +} + +print_cylinder("pieces/ds_cylinder.svg", moon_big, "#fafae6", color_ds) +print_cylinder("pieces/bk_cylinder.svg", moon_big, "#6dd4d6", color_bk) +print_cylinder("pieces/ve_cylinder.svg", sun_big, "#ff5f1e", color_ve) + +print_disc("pieces/ds_disk.svg", qasbah, "#fafae6", color_ds) +print_disc("pieces/bk_disk.svg", fort, "#6dd4d6", color_bk) +print_disc("pieces/ve_disk.svg", temple, "#ff5f1e", color_ve) + +print_octagon("pieces/ds_governor.svg", moon, "#ffffff", color_ds) +print_octagon("pieces/bk_amir.svg", null, null, color_bk) +print_octagon("pieces/bk_amir_rebel.svg", moon, "#68d3dc", color_bk) +print_octagon("pieces/ve_raja.svg", null, null, color_ve) +print_octagon("pieces/ve_raja_rebel.svg", sun, "#ff5c1e", color_ve) + +print_cube("pieces/ds_troop.svg", color_ds) +print_cube("pieces/mongol_invader.svg", color_mongol) + +let css = [ "/* TOKEN BORDER COLORS */" ] + +function border(sel, base) { + let rgb = parseHex(base) + // let hic = convertRgbToOklab(rgb); hic.l = Math.min(1,hic.l+0.1) + // let loc = convertRgbToOklab(rgb); loc.l = Math.max(0,loc.l-0.1) + // let shc = convertRgbToOklab(rgb); shc.l = Math.max(0,shc.l-0.4) + let hic = convertRgbToOklab(rgb); hic.l = Math.min(1,hic.l*1.2) + let loc = convertRgbToOklab(rgb); loc.l = Math.max(0,loc.l*0.8) + let shc = convertRgbToOklab(rgb); shc.l = Math.max(0,shc.l*0.4) + let sh = formatHex(shc) + let hi = formatHex(hic) + let lo = formatHex(loc) + css.push(`${sel} { background-color: ${base}; border-color: ${hi} ${lo} ${lo} ${hi}; box-shadow: 0 0 0 1px ${sh}, 0px 1px 4px #0008; }`) +} + +border(".token.tributary", "#2a2c26") +border(".token.ds_ctl", "#433e1d") +border(".token.bk_ctl", "#15908a") +border(".token.ve_ctl", "#fc7b0d") +border("#token_ds_vp", "#2a2c26") +border("#token_bk_vp", "#15908a") +border("#token_ve_vp", "#fc7b0d") +border("#token_bk_influence", "#02766f") +border("#token_ve_influence", "#fdbb47") +border("#token_mongol_cavalry", "#58291f") +border(".token.cavalry.charge", "#6c4a2f") +border(".token.cavalry.screen", "#363d29") + +console.log(css.join("\n")) |