Merge branch 'day-19-factory' into day-20-factory

This commit is contained in:
thepaperpilot 2022-12-22 21:15:43 -06:00
commit 71fbb319bc
19 changed files with 1800 additions and 157 deletions

View file

@ -68,6 +68,7 @@
/> />
<div v-if="day >= 4" class="scene-bubble left" style="left: 64%; bottom: 37%"> <div v-if="day >= 4" class="scene-bubble left" style="left: 64%; bottom: 37%">
<img v-if="day >= 17" :src="toys" class="scene-item" /> <img v-if="day >= 17" :src="toys" class="scene-item" />
<img v-if="day >= 18" :src="advFactory" class="scene-item" />
</div> </div>
</div> </div>
</template> </template>
@ -91,6 +92,7 @@ import wrappingPaper from "./symbols/wrappingPaper.png";
import ribbons from "./symbols/ribbons.png"; import ribbons from "./symbols/ribbons.png";
import toys from "./symbols/truck.png"; import toys from "./symbols/truck.png";
import factory from "./symbols/gears.png"; import factory from "./symbols/gears.png";
import advFactory from "./symbols/teddyBear.png";
defineProps<{ defineProps<{
day: number; day: number;

View file

@ -26,7 +26,7 @@ onMounted(() => {
position: absolute; position: absolute;
top: 0; top: 0;
bottom: 0; bottom: 0;
left: 148px; left: 158px;
right: 0; right: 0;
touch-action: none; touch-action: none;
} }

View file

@ -16,7 +16,7 @@ defineProps<{
</script> </script>
<style scoped> <style scoped>
.toy { .toy {
width: 80px; width: 90px;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
margin: 10px !important; margin: 10px !important;

View file

@ -0,0 +1,50 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="50"
height="50"
viewBox="0 0 13.229166 13.229167"
version="1.1"
id="svg5"
sodipodi:docname="advent.svg"
inkscape:version="1.2.1 (9c6d41e4, 2022-07-14)"
inkscape:export-filename="advent/stuffingmaker.svg"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview7"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
showgrid="false"
inkscape:zoom="1.9225905"
inkscape:cx="54.873881"
inkscape:cy="-1.0402631"
inkscape:window-width="1309"
inkscape:window-height="804"
inkscape:window-x="0"
inkscape:window-y="25"
inkscape:window-maximized="0"
inkscape:current-layer="layer1" />
<defs
id="defs2" />
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<path
id="path619-0"
style="fill:#ff0000;fill-opacity:1;stroke:#010000;stroke-width:0.696689;stroke-linecap:round;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
d="M 6.8642348,0.96395118 A 5.6167291,5.6167291 0 0 0 1.2475248,6.5806622 5.6167291,5.6167291 0 0 0 6.8642348,12.197372 5.6167291,5.6167291 0 0 0 12.480946,6.5806622 5.6167291,5.6167291 0 0 0 6.8642348,0.96395118 Z m 2.264577,1.36037902 a 1.9913912,1.9913912 0 0 1 1.9914142,1.991413 1.9913912,1.9913912 0 0 1 -1.9914142,1.991413 1.9913912,1.9913912 0 0 1 -1.991413,-1.991413 1.9913912,1.9913912 0 0 1 1.991413,-1.991413 z m -4.484251,0.04558 a 1.9913912,1.9913912 0 0 1 1.991413,1.991413 1.9913912,1.9913912 0 0 1 -1.991413,1.991073 1.9913912,1.9913912 0 0 1 -1.991414,-1.991073 1.9913912,1.9913912 0 0 1 1.991414,-1.991413 z m 4.484251,4.212447 a 1.9913912,1.9913912 0 0 1 1.9914142,1.991413 1.9913912,1.9913912 0 0 1 -1.9914142,1.9914128 1.9913912,1.9913912 0 0 1 -1.991413,-1.9914128 1.9913912,1.9913912 0 0 1 1.991413,-1.991413 z m -4.439008,0.181317 a 1.9913912,1.9913912 0 0 1 1.991414,1.991073 1.9913912,1.9913912 0 0 1 -1.991414,1.9914128 1.9913912,1.9913912 0 0 1 -1.991413,-1.9914128 1.9913912,1.9913912 0 0 1 1.991413,-1.991073 z" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.6 KiB

View file

@ -0,0 +1,58 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="50"
height="50"
viewBox="0 0 13.229166 13.229167"
version="1.1"
id="svg5"
sodipodi:docname="advent.svg"
inkscape:version="1.2.1 (9c6d41e4, 2022-07-14)"
inkscape:export-filename="advent/button.svg"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview7"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
showgrid="false"
inkscape:zoom="1.9225905"
inkscape:cx="54.873881"
inkscape:cy="-1.0402631"
inkscape:window-width="1309"
inkscape:window-height="804"
inkscape:window-x="0"
inkscape:window-y="25"
inkscape:window-maximized="0"
inkscape:current-layer="layer1" />
<defs
id="defs2" />
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<rect
style="fill:#e6e6e6;fill-opacity:1;stroke:#838390;stroke-width:0.764057;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="rect28545-6"
width="12.46511"
height="12.46511"
x="0.38202921"
y="0.38202849"
rx="1.246511" />
<path
id="path619-0"
style="fill:#ff0000;fill-opacity:1;stroke:#010000;stroke-width:0.696689;stroke-linecap:round;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
d="M 6.8642348,0.96395118 A 5.6167291,5.6167291 0 0 0 1.2475248,6.5806622 5.6167291,5.6167291 0 0 0 6.8642348,12.197372 5.6167291,5.6167291 0 0 0 12.480946,6.5806622 5.6167291,5.6167291 0 0 0 6.8642348,0.96395118 Z m 2.264577,1.36037902 a 1.9913912,1.9913912 0 0 1 1.9914142,1.991413 1.9913912,1.9913912 0 0 1 -1.9914142,1.991413 1.9913912,1.9913912 0 0 1 -1.991413,-1.991413 1.9913912,1.9913912 0 0 1 1.991413,-1.991413 z m -4.484251,0.04558 a 1.9913912,1.9913912 0 0 1 1.991413,1.991413 1.9913912,1.9913912 0 0 1 -1.991413,1.991073 1.9913912,1.9913912 0 0 1 -1.991414,-1.991073 1.9913912,1.9913912 0 0 1 1.991414,-1.991413 z m 4.484251,4.212447 a 1.9913912,1.9913912 0 0 1 1.9914142,1.991413 1.9913912,1.9913912 0 0 1 -1.9914142,1.9914128 1.9913912,1.9913912 0 0 1 -1.991413,-1.9914128 1.9913912,1.9913912 0 0 1 1.991413,-1.991413 z m -4.439008,0.181317 a 1.9913912,1.9913912 0 0 1 1.991414,1.991073 1.9913912,1.9913912 0 0 1 -1.991414,1.9914128 1.9913912,1.9913912 0 0 1 -1.991413,-1.9914128 1.9913912,1.9913912 0 0 1 1.991413,-1.991073 z" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.9 KiB

View file

@ -0,0 +1,300 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="50"
height="50"
viewBox="0 0 13.229166 13.229167"
version="1.1"
id="svg5"
sodipodi:docname="advent.svg"
inkscape:version="1.2.1 (9c6d41e4, 2022-07-14)"
inkscape:export-filename="advent/circuitmaker.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview7"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
showgrid="false"
inkscape:zoom="1.9225905"
inkscape:cx="54.873881"
inkscape:cy="-1.0402631"
inkscape:window-width="1309"
inkscape:window-height="804"
inkscape:window-x="0"
inkscape:window-y="25"
inkscape:window-maximized="0"
inkscape:current-layer="layer1" />
<defs
id="defs2" />
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<g
id="g14758-2"
transform="matrix(0.63507814,0,0,0.63507814,66.697487,21.4137)">
<rect
style="fill:#008100;fill-opacity:1;stroke:#015800;stroke-width:1.05833;stroke-linecap:round;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="rect2937-2"
width="16.927031"
height="16.927031"
x="-103.07599"
y="-31.789791"
rx="0.52916664"
ry="0.52916664" />
<rect
style="fill:#ab8011;fill-opacity:1;stroke:#010000;stroke-width:0;stroke-linecap:round;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="rect9920-7"
width="0.49474049"
height="5.2566171"
x="-94.866463"
y="-30.859426"
rx="0.26458338" />
<rect
style="fill:#ab8011;fill-opacity:1;stroke:#010000;stroke-width:0;stroke-linecap:round;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="rect9920-1-1"
width="0.49474052"
height="4.8237195"
x="-93.938828"
y="-30.333771"
rx="0.26458341" />
<rect
style="fill:#ab8011;fill-opacity:1;stroke:#010000;stroke-width:0;stroke-linecap:round;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="rect9920-1-7-52"
width="0.49474069"
height="3.2776561"
x="-93.196716"
y="-28.694942"
rx="0.2645835" />
<rect
style="fill:#ab8011;fill-opacity:1;stroke:#010000;stroke-width:0;stroke-linecap:round;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="rect9920-1-7-5-1"
width="0.49474069"
height="3.2776561"
x="-96.350685"
y="-28.725863"
rx="0.2645835" />
<rect
style="fill:#ab8011;fill-opacity:1;stroke:#010000;stroke-width:0;stroke-linecap:round;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="rect9920-1-7-7-1"
width="0.49474069"
height="3.2776561"
x="-88.001945"
y="-28.602179"
rx="0.2645835" />
<rect
style="fill:#ab8011;fill-opacity:1;stroke:#010000;stroke-width:0;stroke-linecap:round;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="rect9920-1-7-7-8-0"
width="0.49474034"
height="6.0605702"
x="-87.878258"
y="-22.479765"
rx="0.26458332" />
<rect
style="fill:#ab8011;fill-opacity:1;stroke:#010000;stroke-width:0;stroke-linecap:round;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="rect9920-1-7-7-8-2-1"
width="0.49474058"
height="3.5868685"
x="-93.444092"
y="-20.593569"
rx="0.26458347" />
<rect
style="fill:#ab8011;fill-opacity:1;stroke:#010000;stroke-width:0;stroke-linecap:round;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="rect9920-1-7-7-8-2-6-8"
width="0.49474058"
height="3.5868685"
x="-97.58754"
y="-19.85146"
rx="0.26458347" />
<rect
style="fill:#ab8011;fill-opacity:1;stroke:#010000;stroke-width:0;stroke-linecap:round;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="rect9920-1-7-7-8-2-8-7"
width="0.49474058"
height="3.5868685"
x="-99.87571"
y="-22.943584"
rx="0.26458347" />
<rect
style="fill:#ab8011;fill-opacity:1;stroke:#010000;stroke-width:0;stroke-linecap:round;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="rect9920-1-7-7-8-2-9-6"
width="0.49473983"
height="11.193501"
x="-101.29809"
y="-27.581778"
rx="0.26458308" />
<rect
style="fill:#ab8011;fill-opacity:1;stroke:#010000;stroke-width:0;stroke-linecap:round;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="rect9920-1-7-7-8-2-9-8-0"
width="0.49474058"
height="3.5250261"
x="-100.30862"
y="-27.705462"
rx="0.26458347" />
<rect
style="fill:#ab8011;fill-opacity:1;stroke:#010000;stroke-width:0;stroke-linecap:round;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="rect9920-8-0"
width="0.49472937"
height="3.5251164"
x="-32.42971"
y="91.079651"
rx="0.26457745"
transform="matrix(0.00743825,0.99997234,-0.99990788,0.01357339,0,0)" />
<rect
style="fill:#ab8011;fill-opacity:1;stroke:#010000;stroke-width:0;stroke-linecap:round;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="rect9920-8-4-9"
width="0.49472395"
height="2.7212634"
x="-32.052433"
y="91.080261"
rx="0.26457453"
transform="matrix(0.00574177,0.99998352,-0.99984541,0.01758294,0,0)" />
<rect
style="fill:#ab8011;fill-opacity:1;stroke:#010000;stroke-width:0;stroke-linecap:round;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="rect9920-8-4-2-56"
width="0.49472889"
height="3.4632816"
x="-25.2423"
y="88.508125"
rx="0.26457718"
transform="matrix(0.00730776,0.9999733,-0.99990456,0.01381574,0,0)" />
<rect
style="fill:#ab8011;fill-opacity:1;stroke:#010000;stroke-width:0;stroke-linecap:round;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="rect9920-8-4-2-5-2"
width="0.49472323"
height="2.5975995"
x="-21.788242"
y="97.115021"
rx="0.26457417"
transform="matrix(0.00548077,0.99998498,-0.99983034,0.01842001,0,0)" />
<rect
style="fill:#ab8011;fill-opacity:1;stroke:#010000;stroke-width:0;stroke-linecap:round;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="rect9920-8-4-2-4-8"
width="0.49472889"
height="3.4632816"
x="-25.094913"
y="95.745461"
rx="0.26457718"
transform="matrix(0.00730776,0.9999733,-0.99990456,0.01381574,0,0)" />
<rect
style="fill:#ab8011;fill-opacity:1;stroke:#010000;stroke-width:0;stroke-linecap:round;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="rect9920-8-4-2-0-5"
width="0.49472889"
height="3.4632816"
x="-18.011745"
y="97.838226"
rx="0.26457718"
transform="matrix(0.00730776,0.9999733,-0.99990456,0.01381574,0,0)" />
<rect
style="fill:#ab8011;fill-opacity:1;stroke:#010000;stroke-width:0;stroke-linecap:round;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="rect9920-8-4-8-9"
width="0.49474952"
height="5.5657978"
x="-29.408934"
y="87.229904"
rx="0.26458821"
transform="matrix(0.01174441,0.99993103,-0.99996305,0.00859675,0,0)" />
<rect
style="fill:#ab8011;fill-opacity:1;stroke:#010000;stroke-width:0;stroke-linecap:round;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="rect9920-8-4-8-4-4"
width="0.49473175"
height="3.8343098"
x="-29.974941"
y="95.622993"
rx="0.2645787"
transform="matrix(0.00809075,0.99996727,-0.99992214,0.01247885,0,0)" />
<rect
style="fill:#ab8011;fill-opacity:1;stroke:#010000;stroke-width:0;stroke-linecap:round;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="rect9920-8-4-8-4-5-3"
width="0.49472928"
height="3.5251245"
x="-17.903791"
y="87.074791"
rx="0.26457739"
transform="matrix(0.00743827,0.99997234,-0.99990788,0.01357336,0,0)" />
<circle
style="fill:#ffffff;fill-opacity:1;stroke:#b08200;stroke-width:0.41395;stroke-linecap:round;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="path13928-9"
cx="-102.38033"
cy="-31.137722"
r="0.4595851" />
<circle
style="fill:#ffffff;fill-opacity:1;stroke:#b08200;stroke-width:0.41395;stroke-linecap:round;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="path13928-2-0"
cx="-86.950623"
cy="-31.044958"
r="0.4595851" />
<circle
style="fill:#ffffff;fill-opacity:1;stroke:#b08200;stroke-width:0.41395;stroke-linecap:round;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="path13928-2-2-5"
cx="-86.826935"
cy="-15.522479"
r="0.4595851" />
<circle
style="fill:#ffffff;fill-opacity:1;stroke:#b08200;stroke-width:0.41395;stroke-linecap:round;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="path13928-2-2-6-6"
cx="-102.41125"
cy="-15.584321"
r="0.4595851" />
<rect
style="fill:#000000;fill-opacity:1;stroke:#010000;stroke-width:0.606458;stroke-linecap:round;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="rect7151-6-3"
width="2.4308338"
height="2.6782038"
x="-88.90815"
y="-25.024797"
rx="0.14444345" />
<rect
style="fill:#000000;fill-opacity:1;stroke:#010000;stroke-width:0.484197;stroke-linecap:round;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="rect7151-6-7-6"
width="2.5530944"
height="1.6254561"
x="-91.133766"
y="-30.93005"
rx="0.15170835" />
<rect
style="fill:#000000;fill-opacity:1;stroke:#010000;stroke-width:1.05833;stroke-linecap:round;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="rect7151-3"
width="4.4526634"
height="4.4526634"
x="-96.721748"
y="-25.47913"
rx="0.26458332" />
<rect
style="fill:#000000;fill-opacity:1;stroke:#010000;stroke-width:0.399144;stroke-linecap:round;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="rect7151-6-7-7-0"
width="1.6486663"
height="1.7105087"
x="-101.38032"
y="-29.488354"
rx="0.097965993" />
<rect
style="fill:#000000;fill-opacity:1;stroke:#010000;stroke-width:0.399144;stroke-linecap:round;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="rect7151-6-7-7-7-8"
width="1.6486663"
height="1.7105087"
x="-100.32899"
y="-24.417265"
rx="0.097965993" />
<rect
style="fill:#000000;fill-opacity:1;stroke:#010000;stroke-width:0.669161;stroke-linecap:round;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="rect7151-6-5-4"
width="7.006321"
height="1.1312789"
x="-98.184097"
y="-17.139441"
rx="0.41632515" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 13 KiB

View file

@ -0,0 +1,308 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="50"
height="50"
viewBox="0 0 13.229166 13.229167"
version="1.1"
id="svg5"
sodipodi:docname="advent.svg"
inkscape:version="1.2.1 (9c6d41e4, 2022-07-14)"
inkscape:export-filename="advent/consolemaker.svg"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview7"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
showgrid="false"
inkscape:zoom="1.9225905"
inkscape:cx="54.873881"
inkscape:cy="-1.0402631"
inkscape:window-width="1309"
inkscape:window-height="804"
inkscape:window-x="0"
inkscape:window-y="25"
inkscape:window-maximized="0"
inkscape:current-layer="layer1" />
<defs
id="defs2" />
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<rect
style="fill:#e6e6e6;fill-opacity:1;stroke:#838390;stroke-width:0.764057;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="rect28545-6"
width="12.46511"
height="12.46511"
x="0.38202849"
y="0.38202849"
rx="1.246511" />
<g
id="g14758-2"
transform="matrix(0.63507814,0,0,0.63507814,66.67092,21.438206)">
<rect
style="fill:#008100;fill-opacity:1;stroke:#015800;stroke-width:1.05833;stroke-linecap:round;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="rect2937-2"
width="16.927031"
height="16.927031"
x="-103.07599"
y="-31.789791"
rx="0.52916664"
ry="0.52916664" />
<rect
style="fill:#ab8011;fill-opacity:1;stroke:#010000;stroke-width:0;stroke-linecap:round;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="rect9920-7"
width="0.49474049"
height="5.2566171"
x="-94.866463"
y="-30.859426"
rx="0.26458338" />
<rect
style="fill:#ab8011;fill-opacity:1;stroke:#010000;stroke-width:0;stroke-linecap:round;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="rect9920-1-1"
width="0.49474052"
height="4.8237195"
x="-93.938828"
y="-30.333771"
rx="0.26458341" />
<rect
style="fill:#ab8011;fill-opacity:1;stroke:#010000;stroke-width:0;stroke-linecap:round;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="rect9920-1-7-52"
width="0.49474069"
height="3.2776561"
x="-93.196716"
y="-28.694942"
rx="0.2645835" />
<rect
style="fill:#ab8011;fill-opacity:1;stroke:#010000;stroke-width:0;stroke-linecap:round;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="rect9920-1-7-5-1"
width="0.49474069"
height="3.2776561"
x="-96.350685"
y="-28.725863"
rx="0.2645835" />
<rect
style="fill:#ab8011;fill-opacity:1;stroke:#010000;stroke-width:0;stroke-linecap:round;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="rect9920-1-7-7-1"
width="0.49474069"
height="3.2776561"
x="-88.001945"
y="-28.602179"
rx="0.2645835" />
<rect
style="fill:#ab8011;fill-opacity:1;stroke:#010000;stroke-width:0;stroke-linecap:round;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="rect9920-1-7-7-8-0"
width="0.49474034"
height="6.0605702"
x="-87.878258"
y="-22.479765"
rx="0.26458332" />
<rect
style="fill:#ab8011;fill-opacity:1;stroke:#010000;stroke-width:0;stroke-linecap:round;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="rect9920-1-7-7-8-2-1"
width="0.49474058"
height="3.5868685"
x="-93.444092"
y="-20.593569"
rx="0.26458347" />
<rect
style="fill:#ab8011;fill-opacity:1;stroke:#010000;stroke-width:0;stroke-linecap:round;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="rect9920-1-7-7-8-2-6-8"
width="0.49474058"
height="3.5868685"
x="-97.58754"
y="-19.85146"
rx="0.26458347" />
<rect
style="fill:#ab8011;fill-opacity:1;stroke:#010000;stroke-width:0;stroke-linecap:round;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="rect9920-1-7-7-8-2-8-7"
width="0.49474058"
height="3.5868685"
x="-99.87571"
y="-22.943584"
rx="0.26458347" />
<rect
style="fill:#ab8011;fill-opacity:1;stroke:#010000;stroke-width:0;stroke-linecap:round;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="rect9920-1-7-7-8-2-9-6"
width="0.49473983"
height="11.193501"
x="-101.29809"
y="-27.581778"
rx="0.26458308" />
<rect
style="fill:#ab8011;fill-opacity:1;stroke:#010000;stroke-width:0;stroke-linecap:round;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="rect9920-1-7-7-8-2-9-8-0"
width="0.49474058"
height="3.5250261"
x="-100.30862"
y="-27.705462"
rx="0.26458347" />
<rect
style="fill:#ab8011;fill-opacity:1;stroke:#010000;stroke-width:0;stroke-linecap:round;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="rect9920-8-0"
width="0.49472937"
height="3.5251164"
x="-32.42971"
y="91.079651"
rx="0.26457745"
transform="matrix(0.00743825,0.99997234,-0.99990788,0.01357339,0,0)" />
<rect
style="fill:#ab8011;fill-opacity:1;stroke:#010000;stroke-width:0;stroke-linecap:round;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="rect9920-8-4-9"
width="0.49472395"
height="2.7212634"
x="-32.052433"
y="91.080261"
rx="0.26457453"
transform="matrix(0.00574177,0.99998352,-0.99984541,0.01758294,0,0)" />
<rect
style="fill:#ab8011;fill-opacity:1;stroke:#010000;stroke-width:0;stroke-linecap:round;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="rect9920-8-4-2-56"
width="0.49472889"
height="3.4632816"
x="-25.2423"
y="88.508125"
rx="0.26457718"
transform="matrix(0.00730776,0.9999733,-0.99990456,0.01381574,0,0)" />
<rect
style="fill:#ab8011;fill-opacity:1;stroke:#010000;stroke-width:0;stroke-linecap:round;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="rect9920-8-4-2-5-2"
width="0.49472323"
height="2.5975995"
x="-21.788242"
y="97.115021"
rx="0.26457417"
transform="matrix(0.00548077,0.99998498,-0.99983034,0.01842001,0,0)" />
<rect
style="fill:#ab8011;fill-opacity:1;stroke:#010000;stroke-width:0;stroke-linecap:round;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="rect9920-8-4-2-4-8"
width="0.49472889"
height="3.4632816"
x="-25.094913"
y="95.745461"
rx="0.26457718"
transform="matrix(0.00730776,0.9999733,-0.99990456,0.01381574,0,0)" />
<rect
style="fill:#ab8011;fill-opacity:1;stroke:#010000;stroke-width:0;stroke-linecap:round;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="rect9920-8-4-2-0-5"
width="0.49472889"
height="3.4632816"
x="-18.011745"
y="97.838226"
rx="0.26457718"
transform="matrix(0.00730776,0.9999733,-0.99990456,0.01381574,0,0)" />
<rect
style="fill:#ab8011;fill-opacity:1;stroke:#010000;stroke-width:0;stroke-linecap:round;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="rect9920-8-4-8-9"
width="0.49474952"
height="5.5657978"
x="-29.408934"
y="87.229904"
rx="0.26458821"
transform="matrix(0.01174441,0.99993103,-0.99996305,0.00859675,0,0)" />
<rect
style="fill:#ab8011;fill-opacity:1;stroke:#010000;stroke-width:0;stroke-linecap:round;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="rect9920-8-4-8-4-4"
width="0.49473175"
height="3.8343098"
x="-29.974941"
y="95.622993"
rx="0.2645787"
transform="matrix(0.00809075,0.99996727,-0.99992214,0.01247885,0,0)" />
<rect
style="fill:#ab8011;fill-opacity:1;stroke:#010000;stroke-width:0;stroke-linecap:round;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="rect9920-8-4-8-4-5-3"
width="0.49472928"
height="3.5251245"
x="-17.903791"
y="87.074791"
rx="0.26457739"
transform="matrix(0.00743827,0.99997234,-0.99990788,0.01357336,0,0)" />
<circle
style="fill:#ffffff;fill-opacity:1;stroke:#b08200;stroke-width:0.41395;stroke-linecap:round;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="path13928-9"
cx="-102.38033"
cy="-31.137722"
r="0.4595851" />
<circle
style="fill:#ffffff;fill-opacity:1;stroke:#b08200;stroke-width:0.41395;stroke-linecap:round;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="path13928-2-0"
cx="-86.950623"
cy="-31.044958"
r="0.4595851" />
<circle
style="fill:#ffffff;fill-opacity:1;stroke:#b08200;stroke-width:0.41395;stroke-linecap:round;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="path13928-2-2-5"
cx="-86.826935"
cy="-15.522479"
r="0.4595851" />
<circle
style="fill:#ffffff;fill-opacity:1;stroke:#b08200;stroke-width:0.41395;stroke-linecap:round;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="path13928-2-2-6-6"
cx="-102.41125"
cy="-15.584321"
r="0.4595851" />
<rect
style="fill:#000000;fill-opacity:1;stroke:#010000;stroke-width:0.606458;stroke-linecap:round;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="rect7151-6-3"
width="2.4308338"
height="2.6782038"
x="-88.90815"
y="-25.024797"
rx="0.14444345" />
<rect
style="fill:#000000;fill-opacity:1;stroke:#010000;stroke-width:0.484197;stroke-linecap:round;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="rect7151-6-7-6"
width="2.5530944"
height="1.6254561"
x="-91.133766"
y="-30.93005"
rx="0.15170835" />
<rect
style="fill:#000000;fill-opacity:1;stroke:#010000;stroke-width:1.05833;stroke-linecap:round;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="rect7151-3"
width="4.4526634"
height="4.4526634"
x="-96.721748"
y="-25.47913"
rx="0.26458332" />
<rect
style="fill:#000000;fill-opacity:1;stroke:#010000;stroke-width:0.399144;stroke-linecap:round;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="rect7151-6-7-7-0"
width="1.6486663"
height="1.7105087"
x="-101.38032"
y="-29.488354"
rx="0.097965993" />
<rect
style="fill:#000000;fill-opacity:1;stroke:#010000;stroke-width:0.399144;stroke-linecap:round;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="rect7151-6-7-7-7-8"
width="1.6486663"
height="1.7105087"
x="-100.32899"
y="-24.417265"
rx="0.097965993" />
<rect
style="fill:#000000;fill-opacity:1;stroke:#010000;stroke-width:0.669161;stroke-linecap:round;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="rect7151-6-5-4"
width="7.006321"
height="1.1312789"
x="-98.184097"
y="-17.139441"
rx="0.41632515" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 13 KiB

View file

@ -0,0 +1,110 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="50"
height="50"
viewBox="0 0 13.229166 13.229167"
version="1.1"
id="svg5"
sodipodi:docname="advent.svg"
inkscape:version="1.2.1 (9c6d41e4, 2022-07-14)"
inkscape:export-filename="advent/buttonmaker.svg"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview7"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
showgrid="false"
inkscape:zoom="1.9225905"
inkscape:cx="54.873881"
inkscape:cy="-1.0402631"
inkscape:window-width="1309"
inkscape:window-height="804"
inkscape:window-x="0"
inkscape:window-y="25"
inkscape:window-maximized="0"
inkscape:current-layer="layer1" />
<defs
id="defs2">
<linearGradient
inkscape:collect="always"
id="linearGradient22104">
<stop
style="stop-color:#707372;stop-opacity:1;"
offset="0"
id="stop22100" />
<stop
style="stop-color:#1b1819;stop-opacity:1;"
offset="1"
id="stop22102" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient22104"
id="radialGradient22106-3"
cx="36.744789"
cy="66.12191"
fx="36.744789"
fy="66.12191"
r="2.0348806"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(-4.1611276,5.2592029)" />
</defs>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<g
id="g23031-7"
transform="matrix(0.52986006,0,0,0.52986006,-7.0953885,-32.550915)">
<path
id="path19177-3"
style="fill:#000000;fill-opacity:1;stroke:#b08200;stroke-width:0;stroke-linecap:round;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
d="m 32.41766,67.193831 c -1.234059,5.77e-4 -2.402119,0.557366 -3.179651,1.51567 -0.03735,-0.0033 -0.07544,-0.0057 -0.113689,-0.0057 h -6.150012 c -0.778172,-0.94737 -1.939704,-1.496472 -3.165698,-1.49655 -2.009066,0.0032 -3.719398,1.462739 -4.038513,3.446302 l -0.01757,-0.0031 -0.343796,6.620655 c -0.0737,0.21366 -0.11159,0.438029 -0.112138,0.664042 -2.23e-4,1.133218 0.918337,2.052009 2.051555,2.052071 0.767351,-4.59e-4 1.470305,-0.429089 1.822111,-1.111043 l 0.01033,0.0083 2.621176,-4.008411 c 0.425287,-0.23589 0.80518,-0.545613 1.121895,-0.914673 h 6.200655 c 0.06064,0 0.120527,-0.0046 0.178801,-0.01292 0.221351,0.259733 0.474285,0.490794 0.752926,0.687813 0,0 2.829902,4.248451 2.80603,4.242635 l 0.0067,-0.0047 c 0.333779,0.729841 1.062458,1.198062 1.865002,1.198377 1.133017,-6.2e-5 2.051493,-0.918538 2.051555,-2.051555 -0.002,-0.06393 -0.007,-0.127736 -0.01499,-0.191202 L 36.50989,71.373905 c 0.0018,-0.02772 0.0034,-0.05545 0.0047,-0.0832 -9.2e-5,-2.262621 -1.834286,-4.096815 -4.096907,-4.096908 z"
sodipodi:nodetypes="ccscccccccccccsccccccccccc" />
<circle
style="fill:#ff0000;fill-opacity:1;stroke:#b08200;stroke-width:0;stroke-linecap:round;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="path19753-2"
cx="19.826353"
cy="69.163277"
r="1.1276354" />
<circle
style="fill:#ffff00;fill-opacity:1;stroke:#b08200;stroke-width:0;stroke-linecap:round;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="path19753-5-5"
cx="21.951302"
cy="71.492081"
r="1.1276354" />
<circle
style="fill:#0073ff;fill-opacity:1;stroke:#b08200;stroke-width:0;stroke-linecap:round;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="path19753-5-9-6"
cx="17.450777"
cy="71.380142"
r="1.1276354" />
<circle
style="fill:#00ff00;fill-opacity:1;stroke:#b08200;stroke-width:0;stroke-linecap:round;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="path19753-5-9-0-3"
cx="19.771206"
cy="73.597"
r="1.1276354" />
<circle
style="fill:url(#radialGradient22106-3);fill-opacity:1;stroke:#838283;stroke-width:0.264583;stroke-linecap:round;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="path20051-4"
cx="32.58366"
cy="71.381111"
r="2.0348802" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.9 KiB

View file

@ -0,0 +1,118 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="50"
height="50"
viewBox="0 0 13.229166 13.229167"
version="1.1"
id="svg5"
sodipodi:docname="advent.svg"
inkscape:version="1.2.1 (9c6d41e4, 2022-07-14)"
inkscape:export-filename="advent/console.svg"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview7"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
showgrid="false"
inkscape:zoom="1.9225905"
inkscape:cx="54.873881"
inkscape:cy="-1.0402631"
inkscape:window-width="1309"
inkscape:window-height="804"
inkscape:window-x="0"
inkscape:window-y="25"
inkscape:window-maximized="0"
inkscape:current-layer="layer1" />
<defs
id="defs2">
<linearGradient
inkscape:collect="always"
id="linearGradient22104">
<stop
style="stop-color:#707372;stop-opacity:1;"
offset="0"
id="stop22100" />
<stop
style="stop-color:#1b1819;stop-opacity:1;"
offset="1"
id="stop22102" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient22104"
id="radialGradient22106-3"
cx="36.744789"
cy="66.12191"
fx="36.744789"
fy="66.12191"
r="2.0348806"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(-4.1611276,5.2592029)" />
</defs>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<rect
style="fill:#e6e6e6;fill-opacity:1;stroke:#838390;stroke-width:0.764057;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="rect28545-6"
width="12.46511"
height="12.46511"
x="0.38202849"
y="0.38202849"
rx="1.246511" />
<g
id="g23031-7"
transform="matrix(0.52986006,0,0,0.52986006,-7.0953885,-32.550915)">
<path
id="path19177-3"
style="fill:#000000;fill-opacity:1;stroke:#b08200;stroke-width:0;stroke-linecap:round;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
d="m 32.41766,67.193831 c -1.234059,5.77e-4 -2.402119,0.557366 -3.179651,1.51567 -0.03735,-0.0033 -0.07544,-0.0057 -0.113689,-0.0057 h -6.150012 c -0.778172,-0.94737 -1.939704,-1.496472 -3.165698,-1.49655 -2.009066,0.0032 -3.719398,1.462739 -4.038513,3.446302 l -0.01757,-0.0031 -0.343796,6.620655 c -0.0737,0.21366 -0.11159,0.438029 -0.112138,0.664042 -2.23e-4,1.133218 0.918337,2.052009 2.051555,2.052071 0.767351,-4.59e-4 1.470305,-0.429089 1.822111,-1.111043 l 0.01033,0.0083 2.621176,-4.008411 c 0.425287,-0.23589 0.80518,-0.545613 1.121895,-0.914673 h 6.200655 c 0.06064,0 0.120527,-0.0046 0.178801,-0.01292 0.221351,0.259733 0.474285,0.490794 0.752926,0.687813 0,0 2.829902,4.248451 2.80603,4.242635 l 0.0067,-0.0047 c 0.333779,0.729841 1.062458,1.198062 1.865002,1.198377 1.133017,-6.2e-5 2.051493,-0.918538 2.051555,-2.051555 -0.002,-0.06393 -0.007,-0.127736 -0.01499,-0.191202 L 36.50989,71.373905 c 0.0018,-0.02772 0.0034,-0.05545 0.0047,-0.0832 -9.2e-5,-2.262621 -1.834286,-4.096815 -4.096907,-4.096908 z"
sodipodi:nodetypes="ccscccccccccccsccccccccccc" />
<circle
style="fill:#ff0000;fill-opacity:1;stroke:#b08200;stroke-width:0;stroke-linecap:round;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="path19753-2"
cx="19.826353"
cy="69.163277"
r="1.1276354" />
<circle
style="fill:#ffff00;fill-opacity:1;stroke:#b08200;stroke-width:0;stroke-linecap:round;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="path19753-5-5"
cx="21.951302"
cy="71.492081"
r="1.1276354" />
<circle
style="fill:#0073ff;fill-opacity:1;stroke:#b08200;stroke-width:0;stroke-linecap:round;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="path19753-5-9-6"
cx="17.450777"
cy="71.380142"
r="1.1276354" />
<circle
style="fill:#00ff00;fill-opacity:1;stroke:#b08200;stroke-width:0;stroke-linecap:round;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="path19753-5-9-0-3"
cx="19.771206"
cy="73.597"
r="1.1276354" />
<circle
style="fill:url(#radialGradient22106-3);fill-opacity:1;stroke:#838283;stroke-width:0.264583;stroke-linecap:round;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="path20051-4"
cx="32.58366"
cy="71.381111"
r="2.0348802" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 5.3 KiB

View file

@ -0,0 +1,50 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="50"
height="50"
viewBox="0 0 13.229166 13.229167"
version="1.1"
id="svg5"
sodipodi:docname="advent.svg"
inkscape:version="1.2.1 (9c6d41e4, 2022-07-14)"
inkscape:export-filename="advent/circuit.svg"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview7"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
showgrid="false"
inkscape:zoom="1.9225905"
inkscape:cx="54.873881"
inkscape:cy="-1.0402631"
inkscape:window-width="1309"
inkscape:window-height="804"
inkscape:window-x="0"
inkscape:window-y="25"
inkscape:window-maximized="0"
inkscape:current-layer="layer1" />
<defs
id="defs2" />
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<path
id="path2422-1"
style="fill:#ffffff;fill-opacity:1;stroke:#010000;stroke-width:0.49963;stroke-linecap:round;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
d="M 11.23819,7.659357 A 1.2993707,1.0394967 50.383802 0 0 9.6090941,7.3211204 1.2993707,1.0394967 50.383802 0 0 9.508248,7.4204299 1.5917292,1.7216662 50.383802 0 0 9.1841571,6.1967449 1.5917292,1.7216662 50.383802 0 0 7.1596155,5.8571077 2.7286787,2.0140247 50.383802 0 0 6.7430824,5.1859342 1.2668865,1.3968236 50.383802 0 0 6.9878951,5.0206606 1.2668865,1.3968236 50.383802 0 0 7.256167,3.1540008 1.2668865,1.3968236 50.383802 0 0 5.3722537,3.0688094 1.2668865,1.3968236 50.383802 0 0 5.299635,3.1333528 1.2668865,1.5592448 50.383802 0 0 5.1195192,2.8143678 1.2668865,1.5592448 50.383802 0 0 3.1104437,2.8327797 1.2668865,1.5592448 50.383802 0 0 2.6591664,4.7255103 1.2993707,1.4617921 50.383802 0 0 2.3823963,6.6400583 1.2993707,1.4617921 50.383802 0 0 3.1672733,7.0633409 2.7286787,2.0140247 50.383802 0 0 3.353875,7.3760066 0.90955958,1.8516033 50.383802 0 0 2.7114714,7.8016625 0.90955958,1.8516033 50.383802 0 0 1.865001,9.682966 0.90955958,1.8516033 50.383802 0 0 3.7466469,9.3013268 1.0719808,1.3643393 50.383802 0 0 3.9481913,9.8562469 1.0719808,1.3643393 50.383802 0 0 5.6828185,9.8119692 1.0719808,1.3643393 50.383802 0 0 5.8711165,9.6304535 1.4293078,1.0070123 50.383802 0 0 7.5286331,10.055059 1.4293078,1.0070123 50.383802 0 0 7.7417277,8.9393512 1.5917292,1.7216662 50.383802 0 0 8.8729539,8.5207782 1.5917292,1.7216662 50.383802 0 0 9.2862784,8.0364529 1.2993707,1.0394967 50.383802 0 0 9.6368307,8.9848789 1.2993707,1.0394967 50.383802 0 0 11.266115,9.3229607 1.2993707,1.0394967 50.383802 0 0 11.238191,7.6593561 Z" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 3 KiB

View file

@ -0,0 +1,58 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="50"
height="50"
viewBox="0 0 13.229166 13.229167"
version="1.1"
id="svg5"
sodipodi:docname="advent.svg"
inkscape:version="1.2.1 (9c6d41e4, 2022-07-14)"
inkscape:export-filename="advent/stuffing.svg"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview7"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
showgrid="false"
inkscape:zoom="1.9225905"
inkscape:cx="54.873881"
inkscape:cy="-1.0402631"
inkscape:window-width="1309"
inkscape:window-height="804"
inkscape:window-x="0"
inkscape:window-y="25"
inkscape:window-maximized="0"
inkscape:current-layer="layer1" />
<defs
id="defs2" />
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<rect
style="fill:#e6e6e6;fill-opacity:1;stroke:#838390;stroke-width:0.764057;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="rect28545-6"
width="12.46511"
height="12.46511"
x="0.38202849"
y="0.38202849"
rx="1.246511" />
<path
id="path2422-1"
style="fill:#ffffff;fill-opacity:1;stroke:#010000;stroke-width:0.49963;stroke-linecap:round;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
d="M 11.23819,7.659357 A 1.2993707,1.0394967 50.383802 0 0 9.6090941,7.3211204 1.2993707,1.0394967 50.383802 0 0 9.508248,7.4204299 1.5917292,1.7216662 50.383802 0 0 9.1841571,6.1967449 1.5917292,1.7216662 50.383802 0 0 7.1596155,5.8571077 2.7286787,2.0140247 50.383802 0 0 6.7430824,5.1859342 1.2668865,1.3968236 50.383802 0 0 6.9878951,5.0206606 1.2668865,1.3968236 50.383802 0 0 7.256167,3.1540008 1.2668865,1.3968236 50.383802 0 0 5.3722537,3.0688094 1.2668865,1.3968236 50.383802 0 0 5.299635,3.1333528 1.2668865,1.5592448 50.383802 0 0 5.1195192,2.8143678 1.2668865,1.5592448 50.383802 0 0 3.1104437,2.8327797 1.2668865,1.5592448 50.383802 0 0 2.6591664,4.7255103 1.2993707,1.4617921 50.383802 0 0 2.3823963,6.6400583 1.2993707,1.4617921 50.383802 0 0 3.1672733,7.0633409 2.7286787,2.0140247 50.383802 0 0 3.353875,7.3760066 0.90955958,1.8516033 50.383802 0 0 2.7114714,7.8016625 0.90955958,1.8516033 50.383802 0 0 1.865001,9.682966 0.90955958,1.8516033 50.383802 0 0 3.7466469,9.3013268 1.0719808,1.3643393 50.383802 0 0 3.9481913,9.8562469 1.0719808,1.3643393 50.383802 0 0 5.6828185,9.8119692 1.0719808,1.3643393 50.383802 0 0 5.8711165,9.6304535 1.4293078,1.0070123 50.383802 0 0 7.5286331,10.055059 1.4293078,1.0070123 50.383802 0 0 7.7417277,8.9393512 1.5917292,1.7216662 50.383802 0 0 8.8729539,8.5207782 1.5917292,1.7216662 50.383802 0 0 9.2862784,8.0364529 1.2993707,1.0394967 50.383802 0 0 9.6368307,8.9848789 1.2993707,1.0394967 50.383802 0 0 11.266115,9.3229607 1.2993707,1.0394967 50.383802 0 0 11.238191,7.6593561 Z" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.4 KiB

View file

@ -10,8 +10,8 @@ import Modal from "components/Modal.vue";
import { createCollapsibleModifierSections } from "data/common"; import { createCollapsibleModifierSections } from "data/common";
import { main } from "data/projEntry"; import { main } from "data/projEntry";
import { createBar, GenericBar } from "features/bars/bar"; import { createBar, GenericBar } from "features/bars/bar";
import { createBuyable } from "features/buyable"; import { createBuyable, GenericBuyable } from "features/buyable";
import { jsx } from "features/feature"; import { jsx, showIf } from "features/feature";
import { createHotkey, GenericHotkey } from "features/hotkey"; import { createHotkey, GenericHotkey } from "features/hotkey";
import MainDisplay from "features/resources/MainDisplay.vue"; import MainDisplay from "features/resources/MainDisplay.vue";
import { createResource, Resource } from "features/resources/resource"; import { createResource, Resource } from "features/resources/resource";
@ -20,6 +20,7 @@ import { createTabFamily } from "features/tabs/tabFamily";
import Tooltip from "features/tooltips/Tooltip.vue"; import Tooltip from "features/tooltips/Tooltip.vue";
import { globalBus } from "game/events"; import { globalBus } from "game/events";
import { createLayer } from "game/layers"; import { createLayer } from "game/layers";
import { createUpgrade, GenericUpgrade } from "features/upgrades/upgrade";
import { import {
createAdditiveModifier, createAdditiveModifier,
createMultiplicativeModifier, createMultiplicativeModifier,
@ -29,11 +30,28 @@ import { noPersist, Persistent, persistent, State } from "game/persistence";
import Decimal, { DecimalSource, format, formatWhole } from "util/bignum"; import Decimal, { DecimalSource, format, formatWhole } from "util/bignum";
import { Direction } from "util/common"; import { Direction } from "util/common";
import { ProcessedComputable } from "util/computed"; import { ProcessedComputable } from "util/computed";
import { render, renderRow, VueFeature } from "util/vue"; import { render, renderGrid, renderRow, VueFeature } from "util/vue";
import { computed, ComputedRef, reactive, ref, shallowRef, unref, watchEffect } from "vue"; import { computed, ComputedRef, reactive, ref, shallowRef, unref, watchEffect } from "vue";
import _cloth from "../symbols/cloth.png";
import _dye from "../symbols/dyes.png";
import _metal from "../symbols/metal.png";
import _plastic from "../symbols/plastic.png";
import boxes from "./boxes";
import coal from "./coal"; import coal from "./coal";
import _bear from "./factory-components/bear.svg";
import _bearMaker from "./factory-components/bearmaker.svg";
import _stuffing from "./factory-components/stuffing.svg";
import _console from "./factory-components/console.svg";
import _circuitBoard from "./factory-components/circuit.svg";
import _stuffingMaker from "./factory-components/stuffingmaker.svg";
import _consoleMaker from "./factory-components/consolemaker.svg";
import _circuitBoardMaker from "./factory-components/circuitmaker.svg";
import _block from "./factory-components/block.svg"; import _block from "./factory-components/block.svg";
import _blockMaker from "./factory-components/blockmaker.svg"; import _blockMaker from "./factory-components/blockmaker.svg";
import _bucket from "./factory-components/bucket.svg";
import _bucketMaker from "./factory-components/bucketmaker.svg";
import _bucketShovel from "./factory-components/bucketshovel.svg";
import _bucketShovelMaker from "./factory-components/bucketshovelmaker.svg";
import _clothes from "./factory-components/clothes.svg"; import _clothes from "./factory-components/clothes.svg";
import _clothesMaker from "./factory-components/clothesmaker.svg"; import _clothesMaker from "./factory-components/clothesmaker.svg";
import _conveyor from "./factory-components/conveyor.png"; import _conveyor from "./factory-components/conveyor.png";
@ -45,10 +63,10 @@ import _rotateLeft from "./factory-components/rotateLeft.svg";
import _rotateRight from "./factory-components/rotateRight.svg"; import _rotateRight from "./factory-components/rotateRight.svg";
import _plankMaker from "./factory-components/sawmill.svg"; import _plankMaker from "./factory-components/sawmill.svg";
import _shed from "./factory-components/shed.svg"; import _shed from "./factory-components/shed.svg";
import _metal from "../symbols/metal.png"; import _button from "./factory-components/button.svg";
import _plastic from "../symbols/plastic.png"; import _shovel from "./factory-components/shovel.svg";
import _cloth from "../symbols/cloth.png"; import _shovelMaker from "./factory-components/shovelmaker.svg";
import _dye from "../symbols/dyes.png"; import _buttonMaker from "./factory-components/buttonmaker.svg";
import _thread from "./factory-components/thread.svg"; import _thread from "./factory-components/thread.svg";
import _threadMaker from "./factory-components/threadmaker.svg"; import _threadMaker from "./factory-components/threadmaker.svg";
import _truck from "./factory-components/truck.svg"; import _truck from "./factory-components/truck.svg";
@ -56,16 +74,25 @@ import _truckMaker from "./factory-components/truckmaker.svg";
import _wheel from "./factory-components/wheel.svg"; import _wheel from "./factory-components/wheel.svg";
import _wheelMaker from "./factory-components/wheelmaker.svg"; import _wheelMaker from "./factory-components/wheelmaker.svg";
import Factory from "./Factory.vue"; import Factory from "./Factory.vue";
import oil from "./oil";
import "./styles/factory.css"; import "./styles/factory.css";
import Toy from "./Toy.vue"; import Toy from "./Toy.vue";
import toys from "./toys"; import toys from "./toys";
import trees from "./trees";
import workshop from "./workshop";
import paper from "./paper";
import metal from "./metal";
import dyes from "./dyes";
import plastic from "./plastic";
const id = "factory"; const id = "factory";
// what is the actual day?
const day = 18; const day = 18;
const advancedDay = 19;
const presentsDay = 20;
const toyGoal = 750; const toyGoal = 750;
const advancedToyGoal = 2000;
// 20x20 block size // 20x20 block size
// TODO: unhardcode stuff // TODO: unhardcode stuff
@ -107,11 +134,6 @@ function getDirection(dir: Direction) {
return "v"; return "v";
} }
} }
const factorySize = {
width: 7,
height: 7
};
const blockSize = 50; const blockSize = 50;
const factory = createLayer(id, () => { const factory = createLayer(id, () => {
@ -119,11 +141,25 @@ const factory = createLayer(id, () => {
const name = "The Factory"; const name = "The Factory";
const color = "grey"; const color = "grey";
const bears = createResource<DecimalSource>(0, "teddy bears");
const bucketAndShovels = createResource<DecimalSource>(0, "shovel and pails");
const consoles = createResource<DecimalSource>(0, "consoles");
const energy = createSequentialModifier(() => [ const energy = createSequentialModifier(() => [
createAdditiveModifier(() => ({ createAdditiveModifier(() => ({
addend: () => Decimal.add(1, coal.coal.value).log10(), addend: () => Decimal.add(1, coal.coal.value).log10(),
description: "Coal Energy Production" description: "Coal Energy Production"
})), })),
createMultiplicativeModifier(() => ({
multiplier: Decimal.add(1, coal.coal.value).log10().div(100),
description: "1400% workshop",
enabled: workshop.milestones.extraExpansionMilestone7.earned
})),
createAdditiveModifier(() => ({
addend: () => Decimal.times(oilFuel.amount.value, 10),
description: "Oil Fuel",
enabled: () => Decimal.gt(oilFuel.amount.value, 0)
})),
createMultiplicativeModifier(() => ({ createMultiplicativeModifier(() => ({
multiplier: 1.4, multiplier: 1.4,
description: "2000 toys", description: "2000 toys",
@ -144,6 +180,11 @@ const factory = createLayer(id, () => {
multiplier: elvesEffect, multiplier: elvesEffect,
description: "Trained Elves" description: "Trained Elves"
})), })),
createMultiplicativeModifier(() => ({
multiplier: () => Decimal.div(carryToys.amount.value, 10).add(1),
description: "Carry toys in boxes",
enabled: () => Decimal.gt(carryToys.amount.value, 0)
})),
createMultiplicativeModifier(() => ({ createMultiplicativeModifier(() => ({
multiplier: energyEfficiency, multiplier: energyEfficiency,
description: "Energy Consumption", description: "Energy Consumption",
@ -151,6 +192,14 @@ const factory = createLayer(id, () => {
})) }))
]); ]);
const computedTickRate = computed(() => tickRate.apply(1)); const computedTickRate = computed(() => tickRate.apply(1));
const factorySize = createSequentialModifier(() => [
createAdditiveModifier(() => ({
addend: expandFactory.amount,
description: "Expand Factory",
enabled: () => Decimal.gt(expandFactory.amount.value, 0)
}))
]);
const computedFactorySize = computed(() => new Decimal(factorySize.apply(7)).toNumber());
const energyBar = createBar(() => ({ const energyBar = createBar(() => ({
width: 680, width: 680,
@ -399,6 +448,109 @@ const factory = createLayer(id, () => {
} }
} }
} as FactoryComponentDeclaration, } as FactoryComponentDeclaration,
button: {
imageSrc: _buttonMaker,
key: "shift+4",
name: "Button Maker",
type: "processor",
description: "Turns 1 plastic into 2 buttons every second.",
energyCost: 2,
tick: 1,
inputs: {
plastic: {
amount: 1
}
},
outputs: {
buttons: {
amount: 2
}
},
visible: main.days[advancedDay - 1].opened
} as FactoryComponentDeclaration,
stuffing: {
imageSrc: _stuffingMaker,
key: "shift+5",
name: "Cloth Shredder",
type: "processor",
description: "Turns 1 cloth into 1 stuffing every second.",
energyCost: 2,
tick: 1,
inputs: {
cloth: {
amount: 1
}
},
outputs: {
stuffing: {
amount: 1
}
},
visible: main.days[advancedDay - 1].opened
} as FactoryComponentDeclaration,
shovel: {
imageSrc: _shovelMaker,
key: "shift+6",
name: "Shovel Maker",
type: "processor",
description: "Turns 2 plastic into 1 shovel every second.",
energyCost: 2,
tick: 1,
inputs: {
plastic: {
amount: 2
}
},
outputs: {
shovel: {
amount: 1
}
},
visible: main.days[advancedDay - 1].opened
} as FactoryComponentDeclaration,
bucket: {
imageSrc: _bucketMaker,
key: "shift+7",
name: "Bucket Maker",
type: "processor",
description: "Turns 3 plastic into 1 bucket every second.",
energyCost: 2,
tick: 1,
inputs: {
plastic: {
amount: 3
}
},
outputs: {
shovel: {
amount: 1
}
},
visible: main.days[advancedDay - 1].opened
} as FactoryComponentDeclaration,
circuitBoard: {
imageSrc: _circuitBoardMaker,
key: "shift+8",
name: "Circuit Board Manufacturer",
type: "processor",
description: "Turns 1 metal and 1 plastic into 1 circuit board every second.",
energyCost: 2,
tick: 1,
inputs: {
metal: {
amount: 1
},
plastic: {
amount: 1
}
},
outputs: {
circuitBoard: {
amount: 1
}
},
visible: main.days[advancedDay - 1].opened
} as FactoryComponentDeclaration,
blocks: { blocks: {
imageSrc: _blockMaker, imageSrc: _blockMaker,
key: "ctrl+shift+1", key: "ctrl+shift+1",
@ -467,6 +619,89 @@ const factory = createLayer(id, () => {
resource: toys.trucks resource: toys.trucks
} }
} }
} as FactoryComponentDeclaration,
bear: {
imageSrc: _bearMaker,
key: "ctrl+shift+4",
name: "Teddy Bear Maker",
type: "processor",
description:
"Turns 1 thread, 1 stuffing, 1 dye, and 3 buttons into 1 teddy bear every second.",
energyCost: 20,
tick: 1,
inputs: {
thread: {
amount: 1
},
stuffing: {
amount: 1
},
dye: {
amount: 1
},
buttons: {
amount: 3
}
},
outputs: {
bear: {
amount: 1,
resource: bears
}
},
visible: main.days[advancedDay - 1].opened
} as FactoryComponentDeclaration,
bucketShovel: {
imageSrc: _bucketShovelMaker,
key: "ctrl+shift+5",
name: "Shovel and Pail Maker",
type: "processor",
description: "Turns 1 bucket and 1 shovel into 1 shovel and pail every second.",
energyCost: 20,
tick: 1,
inputs: {
bucket: {
amount: 1
},
shovel: {
amount: 1
}
},
outputs: {
shovelBucket: {
amount: 1,
resource: bucketAndShovels
}
},
visible: main.days[advancedDay - 1].opened
} as FactoryComponentDeclaration,
console: {
imageSrc: _consoleMaker,
key: "ctrl+shift+6",
name: "Game Console Maker",
type: "processor",
description:
"Turns 1 metal, 3 plastic, and 1 circuit board into 1 game console every second.",
energyCost: 20,
tick: 1,
inputs: {
metal: {
amount: 1
},
plastic: {
amount: 3
},
circuitBoard: {
amount: 1
}
},
outputs: {
console: {
amount: 1,
resource: consoles
}
},
visible: main.days[advancedDay - 1].opened
} as FactoryComponentDeclaration } as FactoryComponentDeclaration
} as const; } as const;
const RESOURCES = { const RESOURCES = {
@ -504,6 +739,26 @@ const factory = createLayer(id, () => {
name: "Wheels", name: "Wheels",
imageSrc: _wheel imageSrc: _wheel
}, },
buttons: {
name: "Buttons",
imageSrc: _button
},
stuffing: {
name: "Stuffing",
imageSrc: _stuffing
},
shovel: {
name: "Shovel",
imageSrc: _shovel
},
bucket: {
name: "Bucket",
imageSrc: _bucket
},
circuitBoard: {
name: "Circuit Board",
imageSrc: _circuitBoard
},
// Toys // Toys
block: { block: {
name: "Wooden Blocks", name: "Wooden Blocks",
@ -516,6 +771,18 @@ const factory = createLayer(id, () => {
trucks: { trucks: {
name: "Trucks", name: "Trucks",
imageSrc: _truck imageSrc: _truck
},
bear: {
name: "Teddy Bear",
imageSrc: _bear
},
shovelBucket: {
name: "Shovel and Pail",
imageSrc: _bucketShovel
},
console: {
name: "Game Console",
imageSrc: _console
} }
} as const; } as const;
@ -575,6 +842,7 @@ const factory = createLayer(id, () => {
type: "command" | "conveyor" | "processor"; type: "command" | "conveyor" | "processor";
description: ProcessedComputable<string>; description: ProcessedComputable<string>;
energyCost?: number; energyCost?: number;
visible?: ProcessedComputable<boolean>;
/** amount it consumes */ /** amount it consumes */
inputs?: Stock; inputs?: Stock;
@ -629,9 +897,6 @@ const factory = createLayer(id, () => {
}); });
const isMouseHoverShown = ref(false); const isMouseHoverShown = ref(false);
const isComponentHover = ref(false);
const whatIsHovered = ref<FactoryCompNames | "">("");
const compSelected = ref<FactoryCompNames>("cursor"); const compSelected = ref<FactoryCompNames>("cursor");
const components: Persistent<{ [key: string]: FactoryComponent }> = persistent({}); const components: Persistent<{ [key: string]: FactoryComponent }> = persistent({});
const compInternalData: Record<string, FactoryInternal> = {}; const compInternalData: Record<string, FactoryInternal> = {};
@ -646,7 +911,8 @@ const factory = createLayer(id, () => {
display: { display: {
title: "Train elves to make clothes", title: "Train elves to make clothes",
description: "Use your finished toys to train an elf on factory work" description: "Use your finished toys to train an elf on factory work"
} },
style: "width: 110px"
})); }));
const blocksBuyable = createBuyable(() => ({ const blocksBuyable = createBuyable(() => ({
resource: toys.woodenBlocks, resource: toys.woodenBlocks,
@ -656,7 +922,8 @@ const factory = createLayer(id, () => {
display: { display: {
title: "Train elves to make wooden blocks", title: "Train elves to make wooden blocks",
description: "Use your finished toys to train an elf on factory work" description: "Use your finished toys to train an elf on factory work"
} },
style: "width: 110px"
})); }));
const trucksBuyable = createBuyable(() => ({ const trucksBuyable = createBuyable(() => ({
resource: toys.trucks, resource: toys.trucks,
@ -666,9 +933,53 @@ const factory = createLayer(id, () => {
display: { display: {
title: "Train elves to make toy trucks", title: "Train elves to make toy trucks",
description: "Use your finished toys to train an elf on factory work" description: "Use your finished toys to train an elf on factory work"
} },
style: "width: 110px"
})); }));
const elfBuyables = { clothesBuyable, blocksBuyable, trucksBuyable }; const bearsBuyable = createBuyable(() => ({
resource: bears,
cost() {
return Decimal.pow(2, Decimal.add(this.amount.value, 5));
},
display: {
title: "Train elves to make bears",
description: "Use your finished toys to train an elf on factory work"
},
style: "width: 110px",
visible: () => showIf(main.days[advancedDay - 1].opened.value)
}));
const bucketBuyable = createBuyable(() => ({
resource: bucketAndShovels,
cost() {
return Decimal.pow(2, Decimal.add(this.amount.value, 5));
},
display: {
title: "Train elves to make shovel and pails",
description: "Use your finished toys to train an elf on factory work"
},
style: "width: 110px",
visible: () => showIf(main.days[advancedDay - 1].opened.value)
}));
const consolesBuyable = createBuyable(() => ({
resource: consoles,
cost() {
return Decimal.pow(2, Decimal.add(this.amount.value, 5));
},
display: {
title: "Train elves to make consoles",
description: "Use your finished toys to train an elf on factory work"
},
style: "width: 110px",
visible: () => showIf(main.days[advancedDay - 1].opened.value)
}));
const elfBuyables = {
clothesBuyable,
blocksBuyable,
trucksBuyable,
bearsBuyable,
bucketBuyable,
consolesBuyable
};
const sumElves = computed(() => const sumElves = computed(() =>
Object.values(elfBuyables) Object.values(elfBuyables)
@ -676,10 +987,123 @@ const factory = createLayer(id, () => {
.reduce(Decimal.add, 0) .reduce(Decimal.add, 0)
); );
const trainedElves = createResource<DecimalSource>(sumElves, "trained elves"); const trainedElves = createResource<DecimalSource>(sumElves, "trained elves");
const elvesEffect = computed(() => Decimal.add(trainedElves.value, 1).log10().add(1)); const elvesEffect = computed(() => Decimal.pow(1.05, trainedElves.value));
const expandFactory = createBuyable(() => ({
resource: trees.logs,
cost() {
return Decimal.pow(1e4, this.amount.value).times(1e72);
},
display: {
title: "Expand Factory",
description:
"Use some surplus wood to slightly expand the walls of your factory. Also add +100% to the max workshop size",
effectDisplay: jsx(() => (
<>+{formatWhole(expandFactory.amount.value)} each dimension</>
)),
showAmount: false
},
style: "width: 200px",
visible: () => showIf(main.days[advancedDay - 1].opened.value)
})) as GenericBuyable;
const oilFuel = createBuyable(() => ({
resource: oil.oil,
cost() {
return Decimal.pow(10, this.amount.value).times(1e24);
},
display: {
title: "Oil Fuel",
description: "Use some surplus oil to generate more electricity",
effectDisplay: jsx(() => <>+{formatWhole(Decimal.times(oilFuel.amount.value, 10))}</>),
showAmount: false
},
style: "width: 200px",
visible: () => showIf(main.days[advancedDay - 1].opened.value)
})) as GenericBuyable;
const carryToys = createBuyable(() => ({
resource: boxes.boxes,
cost() {
return Decimal.pow(100, this.amount.value).times(1e80);
},
display: {
title: "Carry toys in boxes",
description: "Use some surplus boxes to speed up the whole factory",
effectDisplay: jsx(() => (
<>x{format(Decimal.div(carryToys.amount.value, 10).add(1))} tick rate</>
)),
showAmount: false
},
style: "width: 200px",
visible: () => showIf(main.days[advancedDay - 1].opened.value)
})) as GenericBuyable;
const factoryBuyables = { expandFactory, oilFuel, carryToys };
const upgrades = [[createUpgrade(() => ({
resource: trees.logs,
cost: () =>Decimal.pow(10, upgradeAmount.value).mul(1e80),
display: {
title: "Sawmill Efficiency",
description: "Metal increases sawmill consumption and production by *log(metal)/10"
},
visible: () => showIf(main.days[advancedDay - 1].opened.value)
})),
createUpgrade(() => ({
resource: paper.paper,
cost: () =>Decimal.pow(10, upgradeAmount.value).mul(1e94),
display: {
title: "News Ticker",
description: "Paper boosts tick speed" // formula: *1+log(x)/100
},
visible: () => showIf(main.days[advancedDay - 1].opened.value)
})),
createUpgrade(() => ({
resource: toys.trucks,
cost: () =>Decimal.pow(10, upgradeAmount.value).mul(1000),
display: {
title: "Haul wood in trucks",
description: "Trucks multiply wood gain"
},
visible: () => showIf(main.days[advancedDay - 1].opened.value)
})),
createUpgrade(() => ({
resource: metal.metal,
cost: () =>Decimal.pow(10, upgradeAmount.value).mul(1e55),
display: {
title: "Diamond-tipped drills",
description: "Drill power ^1.2"
},
visible: () => showIf(main.days[advancedDay - 1].opened.value)
}))],
[createUpgrade(() => ({
resource: toys.woodenBlocks,
cost: () =>Decimal.pow(10, upgradeAmount.value).mul(1000),
display: {
title: "Larger wood pieces",
description: "Wooden block producers produce 3x as much"
},
visible: () => showIf(main.days[advancedDay - 1].opened.value)
})),
createUpgrade(() => ({
resource: dyes.dyes.red.amount,
cost: () =>Decimal.pow(10, upgradeAmount.value).mul(1e17),
display: {
title: "Colorful clothes",
description: "Dye producers produce 4x as much"
},
visible: () => showIf(main.days[advancedDay - 1].opened.value)
})),
createUpgrade(() => ({
resource: plastic.plastic,
cost: () =>Decimal.pow(10, upgradeAmount.value).mul(1e17),
display: {
title: "Improved plastic producers",
description: "Plastic producers produce 4x as much"
},
visible: () => showIf(main.days[advancedDay - 1].opened.value)
}))],
]
// pixi // pixi
const upgradeAmount = computed(() => upgrades.flat().filter(u => u.bought.value).length) as ComputedRef<number>
// load every sprite here so pixi doesn't complain about loading multiple times // load every sprite here so pixi doesn't complain about loading multiple times
const assetsLoading = Promise.all([ const assetsLoading = Promise.all([
Assets.load(Object.values(FACTORY_COMPONENTS).map(x => x.imageSrc)), Assets.load(Object.values(FACTORY_COMPONENTS).map(x => x.imageSrc)),
@ -716,15 +1140,19 @@ const factory = createLayer(id, () => {
app.stage.addChild(spriteContainer); app.stage.addChild(spriteContainer);
const floorGraphics = new Graphics(); const floorGraphics = new Graphics();
spriteContainer.addChild(floorGraphics);
watchEffect(() => {
floorGraphics.clear();
floorGraphics.beginFill(0x70645d); floorGraphics.beginFill(0x70645d);
floorGraphics.drawRect( floorGraphics.drawRect(
(-factorySize.width * blockSize) / 2, (-computedFactorySize.value * blockSize) / 2,
(-factorySize.height * blockSize) / 2, (-computedFactorySize.value * blockSize) / 2,
factorySize.width * blockSize, computedFactorySize.value * blockSize,
factorySize.height * blockSize computedFactorySize.value * blockSize
); );
floorGraphics.endFill(); floorGraphics.endFill();
spriteContainer.addChild(floorGraphics); });
await assetsLoading; await assetsLoading;
@ -966,16 +1394,23 @@ const factory = createLayer(id, () => {
y: number, y: number,
data: Partial<FactoryComponent> & { type: BuildableCompName } data: Partial<FactoryComponent> & { type: BuildableCompName }
) { ) {
if (x < -factorySize.width / 2 || x >= factorySize.width / 2) return; if (x < -computedFactorySize.value / 2 || x >= computedFactorySize.value / 2) return;
if (y < -factorySize.height / 2 || y >= factorySize.height / 2) return; if (y < -computedFactorySize.value / 2 || y >= computedFactorySize.value / 2) return;
const factoryBaseData = FACTORY_COMPONENTS[data.type]; const factoryBaseData = FACTORY_COMPONENTS[data.type];
if (factoryBaseData == undefined) return; if (factoryBaseData == undefined) return;
const sheet = Assets.get(factoryBaseData.imageSrc); const sheet = Assets.get(factoryBaseData.imageSrc);
const sprite = new Sprite(sheet); const sprite = new Sprite(sheet);
watchEffect(() => {
if (computedFactorySize.value % 2 === 0) {
sprite.x = (x + 0.5) * blockSize;
sprite.y = (y + 0.5) * blockSize;
} else {
sprite.x = x * blockSize; sprite.x = x * blockSize;
sprite.y = y * blockSize; sprite.y = y * blockSize;
}
});
sprite.width = blockSize; sprite.width = blockSize;
sprite.height = blockSize; sprite.height = blockSize;
sprite.anchor.x = 0.5; sprite.anchor.x = 0.5;
@ -1135,12 +1570,12 @@ const factory = createLayer(id, () => {
// the maximum you can see currently // the maximum you can see currently
// total size of blocks - current size = amount you should move // total size of blocks - current size = amount you should move
mapOffset.x = Math.min( mapOffset.x = Math.min(
Math.max(mapOffset.x, (-factorySize.width + 1) / 2), Math.max(mapOffset.x, (-computedFactorySize.value + 1) / 2),
(factorySize.width + 1) / 2 (computedFactorySize.value + 1) / 2
); );
mapOffset.y = Math.min( mapOffset.y = Math.min(
Math.max(mapOffset.y, (-factorySize.height + 1) / 2), Math.max(mapOffset.y, (-computedFactorySize.value + 1) / 2),
(factorySize.height + 1) / 2 (computedFactorySize.value + 1) / 2
); );
} }
if (!pointerDown.value && !pointerDrag.value) { if (!pointerDown.value && !pointerDrag.value) {
@ -1221,13 +1656,6 @@ const factory = createLayer(id, () => {
compHovered.value = undefined; compHovered.value = undefined;
} }
function onComponentMouseEnter(name: FactoryCompNames | "") {
whatIsHovered.value = name;
isComponentHover.value = true;
}
function onComponentMouseLeave() {
isComponentHover.value = false;
}
function onCompClick(name: FactoryCompNames) { function onCompClick(name: FactoryCompNames) {
compSelected.value = name; compSelected.value = name;
} }
@ -1279,62 +1707,57 @@ const factory = createLayer(id, () => {
// ------------------------------------------------------------------------------- Tabs // ------------------------------------------------------------------------------- Tabs
const hovered = ref(false);
const componentsList = jsx(() => { const componentsList = jsx(() => {
const componentIndex = Math.floor(
Math.max(Object.keys(FACTORY_COMPONENTS).indexOf(whatIsHovered.value), 0) / 2
);
return ( return (
<div class="comp-container">
<div <div class={{ "comp-container": true, hovered: hovered.value }}>
class={{
"comp-info": true,
active: isComponentHover.value
}}
style={{
top: componentIndex * 70 + 10 + "px"
}}
>
{whatIsHovered.value === "" ? undefined : (
<>
<h3>
{FACTORY_COMPONENTS[whatIsHovered.value].name + " "}
<HotkeyVue hotkey={hotkeys[whatIsHovered.value]} />
</h3>
<br />
{unref(FACTORY_COMPONENTS[whatIsHovered.value].description)}
{FACTORY_COMPONENTS[whatIsHovered.value].energyCost ?? 0 ? (
<>
<br />
Energy Consumption:{" "}
{formatWhole(
FACTORY_COMPONENTS[whatIsHovered.value].energyCost ?? 0
)}
</>
) : null}
</>
)}
</div>
<div class="comp-list"> <div class="comp-list">
<div
class="comp-list-child"
onPointerenter={() => (hovered.value = true)}
onPointerleave={() => (hovered.value = false)}
>
{Object.entries(FACTORY_COMPONENTS).map(value => { {Object.entries(FACTORY_COMPONENTS).map(value => {
const key = value[0] as FactoryCompNames; const key = value[0] as FactoryCompNames;
const item = value[1]; const item = value[1];
return ( return (
<div> <div class="comp">
<img <img
src={item.imageSrc} src={item.imageSrc}
class={{ selected: compSelected.value === key }} class={{ selected: compSelected.value === key }}
onMouseenter={() => onComponentMouseEnter(key)}
onMouseleave={() => onComponentMouseLeave()}
onClick={() => onCompClick(key)} onClick={() => onCompClick(key)}
/> />
{item.extraImage == null ? null : ( {item.extraImage == null ? null : (
<img src={item.extraImage} class="producedItem" /> <img src={item.extraImage} class="producedItem" />
)} )}
<div
class={{
"comp-info": true
}}
>
<h3>
{FACTORY_COMPONENTS[key].name + " "}
<HotkeyVue hotkey={hotkeys[key]} />
</h3>
<br />
{unref(FACTORY_COMPONENTS[key].description)}
{FACTORY_COMPONENTS[key].energyCost ?? 0 ? (
<>
<br />
Energy Consumption:{" "}
{formatWhole(
FACTORY_COMPONENTS[key].energyCost ?? 0
)}
</>
) : null}
</div>
</div> </div>
); );
})} })}
</div> </div>
</div> </div>
</div>
); );
}); });
@ -1443,6 +1866,10 @@ const factory = createLayer(id, () => {
<div> <div>
{main.day.value === day {main.day.value === day
? `Reach ${format(toyGoal)} for each toy to complete the day` ? `Reach ${format(toyGoal)} for each toy to complete the day`
: main.day.value === advancedDay
? `Reach ${format(
advancedToyGoal
)} for each toy to complete the day`
: `${name} Complete!`}{" "} : `${name} Complete!`}{" "}
-{" "} -{" "}
<button <button
@ -1463,6 +1890,21 @@ const factory = createLayer(id, () => {
color="cornflowerblue" color="cornflowerblue"
/> />
<Toy resource={toys.trucks} image={_truck} color="cadetblue" /> <Toy resource={toys.trucks} image={_truck} color="cadetblue" />
{main.days[advancedDay - 1].opened.value ? (
<>
<Toy resource={bears} image={_bear} color="teal" />
<Toy
resource={bucketAndShovels}
image={_bucketShovel}
color="cyan"
/>
<Toy
resource={consoles}
image={_console}
color="dodgerblue"
/>
</>
) : null}
</Row> </Row>
<Spacer /> <Spacer />
<MainDisplay <MainDisplay
@ -1473,6 +1915,10 @@ const factory = createLayer(id, () => {
)}x`} )}x`}
/> />
{renderRow(...Object.values(elfBuyables))} {renderRow(...Object.values(elfBuyables))}
<Spacer />
{renderRow(...Object.values(factoryBuyables))}
<Spacer />
{renderGrid(...upgrades as VueFeature[][])}
</> </>
)) ))
})), })),
@ -1543,6 +1989,11 @@ const factory = createLayer(id, () => {
.add(Decimal.div(toys.woodenBlocks.value, toyGoal).clampMax(1)) .add(Decimal.div(toys.woodenBlocks.value, toyGoal).clampMax(1))
.add(Decimal.div(toys.trucks.value, toyGoal).clampMax(1)) .add(Decimal.div(toys.trucks.value, toyGoal).clampMax(1))
.div(3) .div(3)
: main.day.value === advancedDay
? [toys.clothes, toys.woodenBlocks, toys.trucks, bears, bucketAndShovels, consoles]
.map(r => Decimal.div(r.value, advancedToyGoal).clampMax(1))
.reduce(Decimal.add, Decimal.dZero)
.div(6)
: 1, : 1,
display: jsx(() => display: jsx(() =>
main.day.value === day ? ( main.day.value === day ? (
@ -1554,6 +2005,20 @@ const factory = createLayer(id, () => {
}{" "} }{" "}
/ 3 / 3
</> </>
) : main.day.value === advancedDay ? (
<>
{
[
toys.clothes,
toys.woodenBlocks,
toys.trucks,
bears,
bucketAndShovels,
consoles
].filter(d => Decimal.gte(d.value, advancedToyGoal)).length
}{" "}
/ 6
</>
) : ( ) : (
"" ""
) )
@ -1568,21 +2033,39 @@ const factory = createLayer(id, () => {
Decimal.gte(toys.trucks.value, toyGoal) Decimal.gte(toys.trucks.value, toyGoal)
) { ) {
main.completeDay(); main.completeDay();
} else if (
main.day.value === advancedDay &&
[
toys.clothes,
toys.woodenBlocks,
toys.trucks,
bears,
bucketAndShovels,
consoles
].filter(d => Decimal.gte(d.value, advancedToyGoal)).length >= 6
) {
main.completeDay();
} }
}); });
return { return {
name, name,
day, day,
advancedDay,
color, color,
minWidth: 700, minWidth: 700,
minimizable: true, minimizable: true,
style: { overflow: "hidden" }, style: { overflow: "hidden" },
components, components,
elfBuyables, elfBuyables,
bears,
bucketAndShovels,
consoles,
tabs, tabs,
factoryBuyables,
generalTabCollapsed, generalTabCollapsed,
hotkeys, hotkeys,
upgrades,
display: jsx(() => ( display: jsx(() => (
<> <>
{render(modifiersModal)} {render(modifiersModal)}

View file

@ -57,8 +57,6 @@
border-left: 1px solid var(--foreground); border-left: 1px solid var(--foreground);
} }
.factory-container { .factory-container {
width: auto; width: auto;
top: 113px; top: 113px;
@ -68,6 +66,7 @@
position: absolute; position: absolute;
background-color: var(--raised-background); background-color: var(--raised-background);
overflow: hidden; overflow: hidden;
z-index: 1;
} }
.info-container { .info-container {
@ -99,17 +98,22 @@
top: 0; top: 0;
left: 0; left: 0;
bottom: 0; bottom: 0;
width: 148px; width: 158px;
z-index: -1;
}
.comp-container.hovered {
z-index: 1; z-index: 1;
} }
.comp-info { .comp-info {
position: absolute; position: absolute;
right: 10px; top: 0;
right: -10px;
padding: 5px 10px; padding: 5px 10px;
width: max-content; width: max-content;
max-width: 300px; max-width: 320px;
background: var(--background); background: var(--background);
border-radius: var(--border-radius); border-radius: var(--border-radius);
@ -123,38 +127,69 @@
z-index: -1; z-index: -1;
} }
.comp-info.active { .comp-list .comp:nth-child(2n - 1) .comp-info {
right: -85px;
}
.comp-list .comp:hover .comp-info {
transform: translateX(calc(20px + 100%)); transform: translateX(calc(20px + 100%));
} }
.comp-list { .comp-list {
width: 100%; width: 100%;
height: 100%; height: 100%;
overflow-y: overlay;
overflow-x: hidden;
padding-right: 370px;
direction: rtl;
}
.comp-list-child {
display: flex; display: flex;
border-right: solid 2px var(--locked);
flex-wrap: wrap; flex-wrap: wrap;
justify-content: space-evenly; justify-content: space-evenly;
align-items: flex-start; align-items: flex-start;
align-content: flex-start; align-content: flex-start;
background: var(--raised-background); width: 148px;
direction: ltr;
} }
.comp-list::before {
.comp-list::after {
content: ""; content: "";
display: block;
position: absolute; position: absolute;
top: 140px; border-right: solid 2px var(--locked);
height: 2px; background: var(--raised-background);
left: 10px; top: 0;
right: 10px; bottom: 0;
background-color: var(--foreground); left: 0;
right: 0;
z-index: -1;
} }
.comp-list > div {
.comp-list .comp {
position: relative; position: relative;
width: 50px; width: 50px;
height: 50px; height: 50px;
margin: 10px; margin: 10px;
pointer-events: all;
} }
.comp-list > img.selected:not(.producedItem) {
.comp-list .comp:nth-child(3)::after,
.comp-list .comp:nth-child(4)::after {
content: "";
position: absolute;
top: calc(100% + 10px);
height: 2px;
background-color: var(--foreground);
left: 0;
right: 0;
}
.comp-list .comp:nth-child(3)::after {
right: -50px;
}
.comp-list .comp:nth-child(4)::after {
left: -50px;
}
.comp-list .comp img.selected:not(.producedItem) {
transform: translate(-5px, -5px); transform: translate(-5px, -5px);
filter: drop-shadow(2px 2px 0 var(--foreground)) drop-shadow(5px 5px 5px #0007); filter: drop-shadow(2px 2px 0 var(--foreground)) drop-shadow(5px 5px 5px #0007);
} }

View file

@ -12,7 +12,7 @@ import {
import { main } from "data/projEntry"; import { main } from "data/projEntry";
import { createBuyable, GenericBuyable } from "features/buyable"; import { createBuyable, GenericBuyable } from "features/buyable";
import { jsx, showIf } from "features/feature"; import { jsx, showIf } from "features/feature";
import { createMilestone } from "features/milestones/milestone"; import { createMilestone, GenericMilestone } from "features/milestones/milestone";
import MainDisplay from "features/resources/MainDisplay.vue"; import MainDisplay from "features/resources/MainDisplay.vue";
import { createResource } from "features/resources/resource"; import { createResource } from "features/resources/resource";
import { createUpgrade } from "features/upgrades/upgrade"; import { createUpgrade } from "features/upgrades/upgrade";
@ -25,6 +25,7 @@ import { render, renderGrid, renderRow } from "util/vue";
import { computed, ref } from "vue"; import { computed, ref } from "vue";
import cloth from "./cloth"; import cloth from "./cloth";
import dyes from "./dyes"; import dyes from "./dyes";
import factory from "./factory";
import metal from "./metal"; import metal from "./metal";
import plastic from "./plastic"; import plastic from "./plastic";
import trees from "./trees"; import trees from "./trees";
@ -263,21 +264,39 @@ const layer = createLayer(id, function (this: BaseLayer) {
const milestone5 = createMilestone(() => ({ const milestone5 = createMilestone(() => ({
display: { display: {
requirement: "750 toys", requirement: "750 toys",
effectDisplay: "The wheel crafter now makes 2 wheels instead of 1! Now you should be able to fit everything in the factory." effectDisplay:
"The wheel crafter now makes 2 wheels instead of 1! Now you should be able to fit everything in the factory."
}, },
shouldEarn: () => Decimal.gte(toySum.value, 750), shouldEarn: () => Decimal.gte(toySum.value, 750),
visibility: () => showIf(milestone4.earned.value) visibility: () => showIf(milestone4.earned.value && main.days[factory.day - 1].opened.value)
})); })) as GenericMilestone;
const milestone6 = createMilestone(() => ({ const milestone6 = createMilestone(() => ({
display: { display: {
requirement: "1500 toys", requirement: "1500 toys",
effectDisplay: "Running out of energy? Let's increase the limit! Multiply energy capacity by 1.4" effectDisplay:
"Running out of energy? Let's increase the limit! Multiply energy capacity by 1.4"
}, },
shouldEarn: () => Decimal.gte(toySum.value, 1500), shouldEarn: () => Decimal.gte(toySum.value, 1500),
visibility: () => showIf(milestone5.earned.value) visibility: () => showIf(milestone5.earned.value)
})); }));
const milestones = { milestone1, milestone2, milestone3, milestone4, milestone5, milestone6 }; const milestone7 = createMilestone(() => ({
display: {
requirement: "3000 toys",
effectDisplay: "Multiply log gain by the amount of clothes you have"
},
shouldEarn: () => Decimal.gte(toySum.value, 3000),
visibility: () =>
showIf(milestone6.earned.value && main.days[factory.advancedDay - 1].opened.value)
})) as GenericMilestone;
const milestones = {
milestone1,
milestone2,
milestone3,
milestone4,
milestone5,
milestone6,
milestone7
};
const { collapseMilestones, display: milestonesDisplay } = const { collapseMilestones, display: milestonesDisplay } =
createCollapsibleMilestones(milestones); createCollapsibleMilestones(milestones);

View file

@ -546,6 +546,11 @@ const layer = createLayer(id, function (this: BaseLayer) {
description: "Load logs onto trucks", description: "Load logs onto trucks",
enabled: toys.row1Upgrades[0].bought enabled: toys.row1Upgrades[0].bought
})), })),
createMultiplicativeModifier(() => ({
multiplier: () => Decimal.add(toys.clothes.value, 1).pow(0.75),
description: "3000 Toys",
enabled: toys.milestones.milestone7.earned
})),
createExponentialModifier(() => ({ createExponentialModifier(() => ({
exponent: 1.2, exponent: 1.2,
description: "100% Foundation Completed", description: "100% Foundation Completed",

View file

@ -4,7 +4,8 @@
*/ */
import HotkeyVue from "components/Hotkey.vue"; import HotkeyVue from "components/Hotkey.vue";
import Spacer from "components/layout/Spacer.vue"; import Spacer from "components/layout/Spacer.vue";
import { createCollapsibleMilestones } from "data/common"; import Modal from "components/Modal.vue";
import { createCollapsibleMilestones, createCollapsibleModifierSections } from "data/common";
import { main } from "data/projEntry"; import { main } from "data/projEntry";
import { createBar } from "features/bars/bar"; import { createBar } from "features/bars/bar";
import { createClickable } from "features/clickables/clickable"; import { createClickable } from "features/clickables/clickable";
@ -20,6 +21,7 @@ import { createMilestone } from "features/milestones/milestone";
import { createResource, displayResource } from "features/resources/resource"; import { createResource, displayResource } from "features/resources/resource";
import { BaseLayer, createLayer } from "game/layers"; import { BaseLayer, createLayer } from "game/layers";
import { import {
createAdditiveModifier,
createExponentialModifier, createExponentialModifier,
createMultiplicativeModifier, createMultiplicativeModifier,
createSequentialModifier createSequentialModifier
@ -28,12 +30,13 @@ import { noPersist, persistent } from "game/persistence";
import Decimal, { DecimalSource, formatWhole } from "util/bignum"; import Decimal, { DecimalSource, formatWhole } from "util/bignum";
import { Direction } from "util/common"; import { Direction } from "util/common";
import { render } from "util/vue"; import { render } from "util/vue";
import { computed, unref, watchEffect } from "vue"; import { computed, ref, unref, watchEffect } from "vue";
import elves from "./elves"; import elves from "./elves";
import factory from "./factory";
import management from "./management"; import management from "./management";
import toys from "./toys";
import trees from "./trees"; import trees from "./trees";
import wrappingPaper from "./wrapping-paper"; import wrappingPaper from "./wrapping-paper";
import toys from "./toys";
const id = "workshop"; const id = "workshop";
const day = 2; const day = 2;
@ -44,17 +47,30 @@ const layer = createLayer(id, function (this: BaseLayer) {
const foundationProgress = createResource<DecimalSource>(0, "foundation progress"); const foundationProgress = createResource<DecimalSource>(0, "foundation progress");
const maxFoundation = createSequentialModifier(() => [
createAdditiveModifier(() => ({
addend: 900,
description: "Hope Level 3",
enabled: management.elfTraining.expandersElfTraining.milestones[2].earned
})),
createAdditiveModifier(() => ({
addend: 200,
description: "Build wooden towers",
enabled: toys.row1Upgrades[2].bought
})),
createAdditiveModifier(() => ({
addend: () => Decimal.times(factory.factoryBuyables.expandFactory.amount.value, 100),
description: "Expand Factory",
enabled: () => Decimal.gt(factory.factoryBuyables.expandFactory.amount.value, 0)
}))
]);
const computedMaxFoundation = computed(() => maxFoundation.apply(100));
const foundationConversion = createIndependentConversion(() => ({ const foundationConversion = createIndependentConversion(() => ({
// note: 5423 is a magic number. Don't touch this or it'll self-destruct. // note: 5423 is a magic number. Don't touch this or it'll self-destruct.
scaling: addHardcap( scaling: addHardcap(
addSoftcap(addSoftcap(createPolynomialScaling(250, 1.5), 5423, 1 / 1e10), 1e20, 3e8), addSoftcap(addSoftcap(createPolynomialScaling(250, 1.5), 5423, 1 / 1e10), 1e20, 3e8),
computed(() => computedMaxFoundation
toys.row1Upgrades[2].bought.value
? 1200
: management.elfTraining.expandersElfTraining.milestones[2].earned.value
? 1000
: 100
)
), ),
baseResource: trees.logs, baseResource: trees.logs,
gainResource: noPersist(foundationProgress), gainResource: noPersist(foundationProgress),
@ -104,17 +120,7 @@ const layer = createLayer(id, function (this: BaseLayer) {
</span> </span>
</> </>
)), )),
visibility: () => visibility: () => showIf(Decimal.lt(foundationProgress.value, computedMaxFoundation.value)),
showIf(
Decimal.lt(
foundationProgress.value,
toys.row1Upgrades[2].bought.value
? 1200
: management.elfTraining.expandersElfTraining.milestones[2].earned.value
? 1000
: 100
)
),
canClick: () => { canClick: () => {
if (Decimal.lt(trees.logs.value, foundationConversion.nextAt.value)) { if (Decimal.lt(trees.logs.value, foundationConversion.nextAt.value)) {
return false; return false;
@ -122,14 +128,7 @@ const layer = createLayer(id, function (this: BaseLayer) {
if (main.isMastery.value && main.currentlyMastering.value?.name === "Trees") { if (main.isMastery.value && main.currentlyMastering.value?.name === "Trees") {
return false; return false;
} }
let cap = 100; if (Decimal.gte(foundationProgress.value, computedMaxFoundation.value)) {
if (management.elfTraining.expandersElfTraining.milestones[2].earned.value) {
cap = 1000;
}
if (toys.row1Upgrades[2].bought.value) {
cap = 1200;
}
if (Decimal.gte(foundationProgress.value, cap)) {
return false; return false;
} }
return true; return true;
@ -300,6 +299,16 @@ const layer = createLayer(id, function (this: BaseLayer) {
showIf(extraExpansionMilestone5.earned.value && toys.row1Upgrades[2].bought.value), showIf(extraExpansionMilestone5.earned.value && toys.row1Upgrades[2].bought.value),
showPopups: shouldShowPopups showPopups: shouldShowPopups
})); }));
const extraExpansionMilestone7 = createMilestone(() => ({
display: {
requirement: "1400% Foundation Completed",
effectDisplay: "Coal has a greater effect on energy gain"
},
shouldEarn: () => Decimal.gte(foundationProgress.value, 1400),
visibility: () =>
showIf(extraExpansionMilestone6.earned.value && toys.row1Upgrades[2].bought.value),
showPopups: shouldShowPopups
}));
const milestones = { const milestones = {
logGainMilestone1, logGainMilestone1,
autoCutMilestone1, autoCutMilestone1,
@ -314,7 +323,8 @@ const layer = createLayer(id, function (this: BaseLayer) {
extraExpansionMilestone3, extraExpansionMilestone3,
extraExpansionMilestone4, extraExpansionMilestone4,
extraExpansionMilestone5, extraExpansionMilestone5,
extraExpansionMilestone6 extraExpansionMilestone6,
extraExpansionMilestone7
}; };
const { collapseMilestones, display: milestonesDisplay } = const { collapseMilestones, display: milestonesDisplay } =
createCollapsibleMilestones(milestones); createCollapsibleMilestones(milestones);
@ -337,6 +347,25 @@ const layer = createLayer(id, function (this: BaseLayer) {
) )
})); }));
const [generalTab, generalTabCollapsed] = createCollapsibleModifierSections(() => [
{
title: "Max Foundation",
modifier: maxFoundation,
base: 100
}
]);
const showModifiersModal = ref(false);
const modifiersModal = jsx(() => (
<Modal
modelValue={showModifiersModal.value}
onUpdate:modelValue={(value: boolean) => (showModifiersModal.value = value)}
v-slots={{
header: () => <h2>{name} Modifiers</h2>,
body: generalTab
}}
/>
));
watchEffect(() => { watchEffect(() => {
if (main.day.value === day && Decimal.gte(foundationProgress.value, 100)) { if (main.day.value === day && Decimal.gte(foundationProgress.value, 100)) {
main.completeDay(); main.completeDay();
@ -381,6 +410,7 @@ const layer = createLayer(id, function (this: BaseLayer) {
collapseMilestones, collapseMilestones,
minWidth: 700, minWidth: 700,
buildFoundationHK, buildFoundationHK,
generalTabCollapsed,
display: jsx(() => ( display: jsx(() => (
<> <>
<div> <div>
@ -389,8 +419,21 @@ const layer = createLayer(id, function (this: BaseLayer) {
: main.currentlyMastering.value?.name === name : main.currentlyMastering.value?.name === name
? `Complete the foundation to decorate the day` ? `Complete the foundation to decorate the day`
: `${name} Complete!`} : `${name} Complete!`}
{Decimal.gt(computedMaxFoundation.value, 100) ? (
<>
{" - "}
<button
class="button"
style="display: inline-block;"
onClick={() => (showModifiersModal.value = true)}
>
Check Modifiers
</button>
</>
) : null}
</div> </div>
{render(dayProgress)} {render(dayProgress)}
{render(modifiersModal)}
<Spacer /> <Spacer />
{masteryEffectActive.value ? ( {masteryEffectActive.value ? (
<> <>

View file

@ -52,6 +52,7 @@ import ribbonsSymbol from "./symbols/ribbons.png";
import workshopSymbol from "./symbols/sws.png"; import workshopSymbol from "./symbols/sws.png";
import treeSymbol from "./symbols/tree.png"; import treeSymbol from "./symbols/tree.png";
import toysSymbol from "./symbols/truck.png"; import toysSymbol from "./symbols/truck.png";
import advFactorySymbol from "./symbols/teddyBear.png";
import advManagementSymbol from "./symbols/workshopMansion.png"; import advManagementSymbol from "./symbols/workshopMansion.png";
import wrappingPaperSymbol from "./symbols/wrappingPaper.png"; import wrappingPaperSymbol from "./symbols/wrappingPaper.png";
@ -445,7 +446,7 @@ export const main = createLayer("main", function (this: BaseLayer) {
shouldNotify: false, shouldNotify: false,
layer: "factory", layer: "factory",
symbol: factorySymbol, symbol: factorySymbol,
story: "Alright, so those toys were using incredibly amounts of resources to make. Fortunately, you happen to have access to a group of people with an uncanny knack for making stuff without actually consuming materials - Elves! Let's turn this workshop into a proper factory, and get them producing these toys by themselves.", story: "Alright, so those toys were using incredibly large amounts of resources to make. Fortunately, you happen to have access to a group of people with an uncanny knack for making stuff without actually consuming materials - Elves! Let's turn this workshop into a proper factory, and get them producing these toys with miraculous efficiency!",
completedStory: completedStory:
"That was a bit different than the usual elf training you are used to. But this factory seems very versatile, so you think it's a fair trade-off for needing to set things up a bit more. Good Job!", "That was a bit different than the usual elf training you are used to. But this factory seems very versatile, so you think it's a fair trade-off for needing to set things up a bit more. Good Job!",
masteredStory: "" masteredStory: ""
@ -453,10 +454,11 @@ export const main = createLayer("main", function (this: BaseLayer) {
createDay(() => ({ createDay(() => ({
day: 19, day: 19,
shouldNotify: false, shouldNotify: false,
layer: null, // "toys3" layer: "factory",
symbol: "", symbol: advFactorySymbol,
story: "", story: "Santa pulls you aside and says he thinks 3 unique toys might not be enough. You try to argue that they come in many color variations due to all the dyes you're using, but Santas insists you're going to need more. Well, suppose it's time to expand the factory!",
completedStory: "", completedStory:
"Alright, admittedly 6 unique toys still feels like a bit of a compromise, but Santa seems pleased enough and with Christmas less than a week away, you're more than satisfied. Good Job!",
masteredStory: "" masteredStory: ""
})), })),
createDay(() => ({ createDay(() => ({

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

View file

@ -135,10 +135,12 @@ export default defineComponent({
position: relative; position: relative;
border: solid 4px; border: solid 4px;
border-color: var(--outline); border-color: var(--outline);
overflow-y: auto;
} }
.layer-tab > .tab-family-container:first-child { .layer-tab > .tab-family-container:first-child {
margin: -4px -11px var(--feature-margin) -11px; margin: -4px -11px var(--feature-margin) -11px;
padding-bottom: 50px;
} }
.layer-tab > .tab-family-container:first-child:nth-last-child(3) { .layer-tab > .tab-family-container:first-child:nth-last-child(3) {