diff --git a/src/art/vector/layers/Art_Vector_Cat_Ear_Back.svg b/src/art/vector/layers/Art_Vector_Cat_Ear_Back.svg index 299009f5ccd71c891795891a116a98b754a94b87..f2824e6a276cd10acc8d95727ed16e31f3ae50c8 100644 --- a/src/art/vector/layers/Art_Vector_Cat_Ear_Back.svg +++ b/src/art/vector/layers/Art_Vector_Cat_Ear_Back.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 560 1000"><path style="display:inline;fill-opacity:1;fill:#20202c;stroke-width:1.09067011" d="m 248.73736,68.964871 c 0,0 1.69861,-0.804687 4.08156,-0.299212 2.38295,0.505475 23.75731,3.393902 29.82301,5.415802 6.06569,2.021898 7.14885,3.466112 7.14885,3.466112 L 263.21726,106.7929 c -3.84107,-5.31888 -4.93514,-8.768348 -7.63681,-17.615026 -1.84138,-6.029593 -1.55793,-8.849384 -2.81153,-12.285769 -0.74632,-2.04581 -1.39753,-4.595174 -4.03156,-7.927234 z" id="path2"/><path d="m 248.73736,68.964871 c 0,0 1.69861,-0.804687 4.08156,-0.299212 2.38295,0.505475 23.75731,3.393902 29.82301,5.415802 6.06569,2.021898 7.14885,3.466112 7.14885,3.466112 l -9.45442,10.405004 c -8.89399,-4.0001 -15.68619,-8.81104 -20.05716,-12.416027 -2.33857,-1.928752 -6.80539,-4.786815 -11.54184,-6.571679 z" style="display:inline;fill-opacity:1;fill:#333344;stroke-width:1.09067011" id="path4"/><path style="fill-opacity:1;fill:#fefefe;stroke-width:1.09067011" d="m 251.82217,72.78348 c 0,0 4.58923,1.460454 7.26102,0.648083 l 19.57572,12.076963 c 0,0 -14.32239,6.372867 -17.57187,14.965934 0,0 -0.28885,-1.805263 0.1083,-3.538319 l -0.93872,3.141169 c 0,0 -0.32495,-2.166325 0.18052,-3.82717 0,0 -1.08316,-0.758212 -2.45516,1.444213 0,0 0.32494,-3.646639 1.84136,-5.307486 -1.84137,0.180528 -4.44095,2.166322 -4.44095,2.166322 0,0 -0.14441,-7.040542 4.76591,-9.062442 -4.11601,0.216633 -6.93223,3.791062 -6.93223,3.791062 0,0 -0.36105,-6.82391 3.75496,-8.015386 -2.99675,0.938738 -4.29654,3.71885 -4.29654,3.71885 0,0 -0.54157,-3.827166 0.93874,-6.246224 -0.686,-0.216632 -1.73305,0.613791 -1.73305,0.613791 0,0 0.79431,-2.419059 3.32169,-3.285586 -2.5839,-0.566619 -3.3797,-3.283774 -3.3797,-3.283774 z" id="path6"/></svg> \ No newline at end of file +<svg viewBox="0 0 560 1000"><path style="display:inline;fill-opacity:1;fill:#20202c;stroke-width:1.09067011" d="m 248.73736,68.964871 c 0,0 1.69861,-0.804687 4.08156,-0.299212 2.38295,0.505475 23.75731,3.393902 29.82301,5.415802 6.06569,2.021898 7.14885,3.466112 7.14885,3.466112 L 263.21726,106.7929 c -3.84107,-5.31888 -4.93514,-8.768348 -7.63681,-17.615026 -1.84138,-6.029593 -1.55793,-8.849384 -2.81153,-12.285769 -0.74632,-2.04581 -1.39753,-4.595174 -4.03156,-7.927234 z" id="path2"/><path d="m 248.73736,68.964871 c 0,0 1.69861,-0.804687 4.08156,-0.299212 2.38295,0.505475 23.75731,3.393902 29.82301,5.415802 6.06569,2.021898 7.14885,3.466112 7.14885,3.466112 l -9.45442,10.405004 c -8.89399,-4.0001 -15.68619,-8.81104 -20.05716,-12.416027 -2.33857,-1.928752 -6.80539,-4.786815 -11.54184,-6.571679 z" style="display:inline;fill-opacity:1;fill:#333344;stroke-width:1.09067011" id="path4"/><path style="fill-opacity:1;fill:#fefefe;stroke-width:1.09067011" d="m 251.82217,72.78348 c 0,0 4.58923,1.460454 7.26102,0.648083 l 19.57572,12.076963 c 0,0 -14.32239,6.372867 -17.57187,14.965934 0,0 -0.28885,-1.805263 0.1083,-3.538319 l -0.93872,3.141169 c 0,0 -0.32495,-2.166325 0.18052,-3.82717 0,0 -1.08316,-0.758212 -2.45516,1.444213 0,0 0.32494,-3.646639 1.84136,-5.307486 -1.84137,0.180528 -4.44095,2.166322 -4.44095,2.166322 0,0 -0.14441,-7.040542 4.76591,-9.062442 -4.11601,0.216633 -6.93223,3.791062 -6.93223,3.791062 0,0 -0.36105,-6.82391 3.75496,-8.015386 -2.99675,0.938738 -4.29654,3.71885 -4.29654,3.71885 0,0 -0.54157,-3.827166 0.93874,-6.246224 -0.686,-0.216632 -1.73305,0.613791 -1.73305,0.613791 0,0 0.79431,-2.419059 3.32169,-3.285586 -2.5839,-0.566619 -3.3797,-3.283774 -3.3797,-3.283774 z" id="path6"/></svg> diff --git a/src/art/vector/layers/Art_Vector_Cat_Ear_Fore.svg b/src/art/vector/layers/Art_Vector_Cat_Ear_Fore.svg index 6a21697266326c532aa14d96326ec4c76d7f8478..1ab856e1586fb48eff7ad04f80c4b2d0c4b60517 100644 --- a/src/art/vector/layers/Art_Vector_Cat_Ear_Fore.svg +++ b/src/art/vector/layers/Art_Vector_Cat_Ear_Fore.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 560 1000"><g style="display:inline" transform="translate(0,3e-6)" id="g8-9"><path style="display:inline;fill-opacity:1;fill:#20202c;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-width:1px;stroke:none" d="m 308.1475,77.54163 c 0,0 12.76065,-8.72344 26.22373,-9.571872 11.01415,-0.694103 19.3005,-2.094451 19.3005,-2.094451 -1.1752,8.016637 -7.95821,31.134787 -22.41696,46.848853 0,0 1.03532,-26.317653 -23.10727,-35.18253 z" id="path2-5"/><path d="m 353.67173,65.875307 c -1.1752,8.016637 -7.95821,31.134787 -22.41696,46.848853 0,0 0.0174,-0.44206 -0.005,-1.23089 -0.1085,-3.84062 -1.15748,-15.901417 -9.73296,-25.185131 7.53822,-11.504443 19.52704,-16.919867 32.15481,-20.432832 z" style="display:inline;fill-opacity:1;fill:#333344;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-width:1px;stroke:none" id="path4-7"/><path style="display:inline;fill-opacity:1;fill:#fefefe;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-width:1px;stroke:none" d="m 329.49165,100.71363 c -1.35994,-4.601307 -3.757,-9.839308 -7.97484,-14.405491 4.85489,-7.409284 11.55582,-12.292945 19.08455,-15.769361 0,0 5.17674,-0.18227 8.51755,1.867294 -0.16223,0.07853 -2.7722,0.606429 -4.0879,1.030675 2.49749,0.129635 3.54594,1.366431 3.54594,1.366431 0,0 -0.91465,0.05439 -2.3119,0.89546 2.85074,0.89458 4.63218,5.458641 4.63218,5.458641 0,0 -2.19492,-0.350727 -4.86496,0.149253 2.06512,0.935863 3.25191,4.890565 3.25191,4.890565 0,0 -2.18348,-0.526951 -6.00364,-0.793573 4.30345,1.520613 4.48699,6.023984 4.48699,6.023984 0,0 -3.83009,-2.647995 -4.31294,-3.165587 1.78858,2.77439 1.68141,5.83086 1.68141,5.83086 0,0 -1.28005,-1.529562 -3.01908,-2.13864 0.54376,1.109778 0.54477,3.262668 0.54477,3.262668 0,0 -2.12647,-1.184307 -2.69251,-1.999674 0.45817,3.293475 -0.44441,8.565455 -0.44441,8.565455 0,0 -2.3265,-3.196931 -3.16399,-5.032441 0.25185,3.018194 -0.90576,5.929071 -0.90576,5.929071 0,0 -0.0958,-4.496089 -0.9266,-5.750878 0.28951,3.866948 -0.68272,5.889828 -1.896,8.463388 0,0 -1.77802,-2.46182 -3.14077,-4.6781 z" id="path6-3"/></g></svg> \ No newline at end of file +<svg viewBox="0 0 560 1000"><g data-transform="art" style="display:inline" transform="translate(0,3e-6)" id="g8-9"><path style="display:inline;fill-opacity:1;fill:#20202c;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-width:1px;stroke:none" d="m 308.1475,77.54163 c 0,0 12.76065,-8.72344 26.22373,-9.571872 11.01415,-0.694103 19.3005,-2.094451 19.3005,-2.094451 -1.1752,8.016637 -7.95821,31.134787 -22.41696,46.848853 0,0 1.03532,-26.317653 -23.10727,-35.18253 z" id="path2-5"/><path d="m 353.67173,65.875307 c -1.1752,8.016637 -7.95821,31.134787 -22.41696,46.848853 0,0 0.0174,-0.44206 -0.005,-1.23089 -0.1085,-3.84062 -1.15748,-15.901417 -9.73296,-25.185131 7.53822,-11.504443 19.52704,-16.919867 32.15481,-20.432832 z" style="display:inline;fill-opacity:1;fill:#333344;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-width:1px;stroke:none" id="path4-7"/><path style="display:inline;fill-opacity:1;fill:#fefefe;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-width:1px;stroke:none" d="m 329.49165,100.71363 c -1.35994,-4.601307 -3.757,-9.839308 -7.97484,-14.405491 4.85489,-7.409284 11.55582,-12.292945 19.08455,-15.769361 0,0 5.17674,-0.18227 8.51755,1.867294 -0.16223,0.07853 -2.7722,0.606429 -4.0879,1.030675 2.49749,0.129635 3.54594,1.366431 3.54594,1.366431 0,0 -0.91465,0.05439 -2.3119,0.89546 2.85074,0.89458 4.63218,5.458641 4.63218,5.458641 0,0 -2.19492,-0.350727 -4.86496,0.149253 2.06512,0.935863 3.25191,4.890565 3.25191,4.890565 0,0 -2.18348,-0.526951 -6.00364,-0.793573 4.30345,1.520613 4.48699,6.023984 4.48699,6.023984 0,0 -3.83009,-2.647995 -4.31294,-3.165587 1.78858,2.77439 1.68141,5.83086 1.68141,5.83086 0,0 -1.28005,-1.529562 -3.01908,-2.13864 0.54376,1.109778 0.54477,3.262668 0.54477,3.262668 0,0 -2.12647,-1.184307 -2.69251,-1.999674 0.45817,3.293475 -0.44441,8.565455 -0.44441,8.565455 0,0 -2.3265,-3.196931 -3.16399,-5.032441 0.25185,3.018194 -0.90576,5.929071 -0.90576,5.929071 0,0 -0.0958,-4.496089 -0.9266,-5.750878 0.28951,3.866948 -0.68272,5.889828 -1.896,8.463388 0,0 -1.77802,-2.46182 -3.14077,-4.6781 z" id="path6-3"/></g></svg> diff --git a/src/art/vector/layers/Art_Vector_Cat_Tail.svg b/src/art/vector/layers/Art_Vector_Cat_Tail.svg index e318584f62809e53333ed0ce9afaebe4c00346a9..da902f86a589841a3aba9622eb5fe5178b543b8a 100644 --- a/src/art/vector/layers/Art_Vector_Cat_Tail.svg +++ b/src/art/vector/layers/Art_Vector_Cat_Tail.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 560 1000"><path d="m 342.15888,477.17932 c 0,0 113.6156,70.85179 139.77284,-28.74333 25.05714,-95.4064 -57.66395,-93.79968 -48.14882,-165.08654 3.40586,-25.5165 38.15951,-39.43051 38.15951,-39.43051" style="display:inline;fill-opacity:1;fill:none;opacity:1;stroke-dasharray:none;stroke-dashoffset:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:16;stroke:#20202c;vector-effect:none" id="path2502"/><path style="display:inline;fill-opacity:1;fill:none;opacity:1;stroke-dasharray:none;stroke-dashoffset:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:16;stroke:#fefefe;vector-effect:none" d="m 442.29877,265.01668 c 11.34263,-13.77073 29.64364,-21.09774 29.64364,-21.09774" id="path2504-9"/></svg> \ No newline at end of file +<svg viewBox="0 0 560 1000"><path d="m 342.15888,477.17932 c 0,0 113.6156,70.85179 139.77284,-28.74333 25.05714,-95.4064 -57.66395,-93.79968 -48.14882,-165.08654 3.40586,-25.5165 38.15951,-39.43051 38.15951,-39.43051" style="display:inline;fill-opacity:1;fill:none;opacity:1;stroke-dasharray:none;stroke-dashoffset:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:16;stroke:#20202c;vector-effect:none" id="path2502"/><path style="display:inline;fill-opacity:1;fill:none;opacity:1;stroke-dasharray:none;stroke-dashoffset:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:16;stroke:#fefefe;vector-effect:none" d="m 442.29877,265.01668 c 11.34263,-13.77073 29.64364,-21.09774 29.64364,-21.09774" id="path2504-9"/></svg> diff --git a/src/art/vector/layers/Art_Vector_Cow_Ear_Back.svg b/src/art/vector/layers/Art_Vector_Cow_Ear_Back.svg index 7bb466b29d5f20cee36cbc6a821e25cfacd2b65c..27af8762fa4d00897ced83b059c3dad4c9994820 100644 --- a/src/art/vector/layers/Art_Vector_Cow_Ear_Back.svg +++ b/src/art/vector/layers/Art_Vector_Cow_Ear_Back.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 560 1000" class="ad1" fill="#ffd5d5"><path d="M268.97 88.19c3.57 1.86 2.25 4.2 10.8 1.75l-3.88 16.12c-11.15-.78-4.86 6.7-19.13 5.86-14.26-.84-19.85-9.81-21.72-17.47 7.4-9.24 23.72-11.42 33.93-6.26z" fill="#87553a"/><path d="M255.22 99.84l3.57-.18s-.23 4.14 2.5 4.53l.55 7.45-8.2.53-.3-7.17s2.4.3 1.88-5.16z" fill="#f1ab2b"/></svg> \ No newline at end of file +<svg viewBox="0 0 560 1000"><path d="M268.97 88.19c3.57 1.86 2.25 4.2 10.8 1.75l-3.88 16.12c-11.15-.78-4.86 6.7-19.13 5.86-14.26-.84-19.85-9.81-21.72-17.47 7.4-9.24 23.72-11.42 33.93-6.26z" fill="#87553a"/><path d="M255.22 99.84l3.57-.18s-.23 4.14 2.5 4.53l.55 7.45-8.2.53-.3-7.17s2.4.3 1.88-5.16z" fill="#f1ab2b"/></svg> diff --git a/src/art/vector/layers/Art_Vector_Cow_Ear_Fore.svg b/src/art/vector/layers/Art_Vector_Cow_Ear_Fore.svg index 64d0d46c7b2bd0eb2dda2432355d1581451e4688..b15a49ac861ab184d708457f03863240b6b7159f 100644 --- a/src/art/vector/layers/Art_Vector_Cow_Ear_Fore.svg +++ b/src/art/vector/layers/Art_Vector_Cow_Ear_Fore.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 560 1000" class="ad1" fill="#ffd5d5"><path d="M341.29 87.85c-4.02 2.48-4.66 5.24-10.49.95 3.7 6.63 5.61 18.01 4.8 23.83 10.25-5.13 5.33 4.15 21.96 1.98 16.62-2.18 22.4-13.14 23.95-22.26-9.43-10.2-28.7-11.38-40.22-4.5z" fill="#87553a"/><path d="M354.75 101.34l3.78.9s-1.5 4.25 1.23 5.48l-1.68 7.94-8.71-1.94 1.85-7.57s2.42 1.06 3.53-4.8z" fill="#f1ab2b"/></svg> \ No newline at end of file +<svg viewBox="0 0 560 1000"><path d="M341.29 87.85c-4.02 2.48-4.66 5.24-10.49.95 3.7 6.63 5.61 18.01 4.8 23.83 10.25-5.13 5.33 4.15 21.96 1.98 16.62-2.18 22.4-13.14 23.95-22.26-9.43-10.2-28.7-11.38-40.22-4.5z" fill="#87553a"/><path d="M354.75 101.34l3.78.9s-1.5 4.25 1.23 5.48l-1.68 7.94-8.71-1.94 1.85-7.57s2.42 1.06 3.53-4.8z" fill="#f1ab2b"/></svg> diff --git a/src/art/vector/layers/Art_Vector_Cow_Tail.svg b/src/art/vector/layers/Art_Vector_Cow_Tail.svg index 59f45e8b2545c4389dde4a8a6fef6dcade7dbc45..3723e6f4681bb606e49d688bbe1fe84373e4e9c6 100644 --- a/src/art/vector/layers/Art_Vector_Cow_Tail.svg +++ b/src/art/vector/layers/Art_Vector_Cow_Tail.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 560 1000" class="ad1" fill="#ffd5d5"><path d="M421.12 602.38l.5 1.96c.47 3.84 4.3 13.82-4.74 15.06.55-2.29 2.45-6 2.21-7.57 0 0-.5 3.82-3.16 5.93-.72.57-1.16 2.13-.56 3.9-1.43-.52-2.62-3.79-1.53-5.34 1.03-1.46 2.62-3.16 2.3-4.99-.14 1.55-1.5 3.76-3.36 5.07-1.53 1.08-2.64 1.86-5.08 1.88 3.7-2.34 3.72-4.93 4.95-6.58a5.18 5.18 0 001.05-3.32l-1.46-4.45z" fill="#e7d0bf"/><path d="M412.19 561.3c-.88 17.5 3.89 38 3.89 38" fill="none" stroke="#ebebeb" stroke-width="5"/><path d="M321.75 480.5s89.19-57.34 90.44 80.8" fill="none" stroke="#704a2f" stroke-width="5" stroke-linecap="round"/><path d="M416.6 589.3l-4.88-.16c1.33 8.83-6.77 22.18-6.77 22.18s4.67-3.52 5.94-8.88c-.34 2.04-.79 5.73.16 7.44 1.33 2.41 2.9 4.37 2.9 4.37s-1.1-4.14-1.1-7c0-2.86 0 3.23 1.33 4.66-.78-4.74.16-4.51.16-4.51s1.17 1.43 1.01 4.29c1.1-3.84 0-5.42 0-5.42s2.36 2.4 2.2 5.72c.22-1.32.27-2.3.25-3.08.24.9.56 1.84 1 2.33 1.02 1.13.63 3.46.63 3.46s1.8-3.61.7-5.8c-1.1-2.18 0-3.8 0-3.8-.07 3.24 1.58 1.76 1.34 3.5-.2 1.4 1.13 1.58 1.88 2.94-.98-3.46 1.49-3.61-.04-6.81l-.5-1.06c.69.7 1.56 1.58 1.95 2.3.5.94 1.3 5.68 1.3 5.68s.1-1.47-.32-4.78c-.42-3.21-1.62-3.02-4.13-6.9.73-1.74.46-3.08-3.18-7.1-.93-1-1.84-3.57-1.84-3.57z" fill="#ebebeb"/></svg> \ No newline at end of file +<svg viewBox="0 0 560 1000"><path d="M421.12 602.38l.5 1.96c.47 3.84 4.3 13.82-4.74 15.06.55-2.29 2.45-6 2.21-7.57 0 0-.5 3.82-3.16 5.93-.72.57-1.16 2.13-.56 3.9-1.43-.52-2.62-3.79-1.53-5.34 1.03-1.46 2.62-3.16 2.3-4.99-.14 1.55-1.5 3.76-3.36 5.07-1.53 1.08-2.64 1.86-5.08 1.88 3.7-2.34 3.72-4.93 4.95-6.58a5.18 5.18 0 001.05-3.32l-1.46-4.45z" fill="#e7d0bf"/><path d="M412.19 561.3c-.88 17.5 3.89 38 3.89 38" fill="none" stroke="#ebebeb" stroke-width="5"/><path d="M321.75 480.5s89.19-57.34 90.44 80.8" fill="none" stroke="#704a2f" stroke-width="5" stroke-linecap="round"/><path d="M416.6 589.3l-4.88-.16c1.33 8.83-6.77 22.18-6.77 22.18s4.67-3.52 5.94-8.88c-.34 2.04-.79 5.73.16 7.44 1.33 2.41 2.9 4.37 2.9 4.37s-1.1-4.14-1.1-7c0-2.86 0 3.23 1.33 4.66-.78-4.74.16-4.51.16-4.51s1.17 1.43 1.01 4.29c1.1-3.84 0-5.42 0-5.42s2.36 2.4 2.2 5.72c.22-1.32.27-2.3.25-3.08.24.9.56 1.84 1 2.33 1.02 1.13.63 3.46.63 3.46s1.8-3.61.7-5.8c-1.1-2.18 0-3.8 0-3.8-.07 3.24 1.58 1.76 1.34 3.5-.2 1.4 1.13 1.58 1.88 2.94-.98-3.46 1.49-3.61-.04-6.81l-.5-1.06c.69.7 1.56 1.58 1.95 2.3.5.94 1.3 5.68 1.3 5.68s.1-1.47-.32-4.78c-.42-3.21-1.62-3.02-4.13-6.9.73-1.74.46-3.08-3.18-7.1-.93-1-1.84-3.57-1.84-3.57z" fill="#ebebeb"/></svg> diff --git a/src/art/vector/layers/Art_Vector_Fox_Ear_Back.svg b/src/art/vector/layers/Art_Vector_Fox_Ear_Back.svg index 3b23f24d77a52b746ba7b1d5aef98202541688b0..70a2d64a751850468298e73295123d0ef3536ff8 100644 --- a/src/art/vector/layers/Art_Vector_Fox_Ear_Back.svg +++ b/src/art/vector/layers/Art_Vector_Fox_Ear_Back.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 560 1000" class="ad1"><path d="M260 53c-.7 0-1.3.4-1.4 1.8 0 .3.2.6.5.9l-.1 3.6c.3.7-.3 2 1.3 1.8 2.5 1 .4 3.8 1.9 5.2l-.6 3.7c1.5.7 1.2 2.2 1.7 3.4-.7.2-.7 1-1 1.6l1.2 1.3c1 1.2 1.1 2.9 2.6 3.8.5.5.6 1.2.7 2l-.1.5V84c-1 1.1-1 2.5-1.2 3.8 1.6-.3 1.9 1 2.4 2 0 1.3-2 1-1.9 2.4v.6l-.2.2c0 .1 0 .2.3.3h.6l1.3-.8v.5l1.2-.9.6.7 1.8-1.7V92l2-1.3c.4-.4 1-.8.8-1.5 1.2 0 2.1-.8 3-1.5.3-.6 1-1 .6-1.8.5-.1.9-.5 1.2-.8l.8-.8.3-.1.1-.1c.3-.2.7-.2 1-.3 1-.3 2-.6 2.5-1.6v-.6c.5-.2 1-.5 1.1-1.1.6-.1 1-.6 1.3-1l.8-.5h.6c.5 0 .8-.3 1-.7.3-.6.3-1.2.2-1.8l-.6-1.2-.8-1.3c-.4-.7-.7-1.4-1.3-2-.4-.3-.8-.7-1.4-.7l-1.2-.8-2.4-2.5-1.2-.6c-.8-.3-1-1.6-2.2-1.3-.3-1.4-1.6-2-2.3-3.1l-1.3-.1-.6-.6c0-1.3-1.4-1.6-2-2.5-.4 0-.8-.7-1.3-.2-.3-1.5-1.9-1.8-2.6-2.9-1.7-.3-2.7-2-4.2-2.6-1-.9-1-.8-1.3-.7h-.6c-.5-.3-1-.5-1.5-.5z" fill="#863b3b"/></svg> \ No newline at end of file +<svg viewBox="0 0 560 1000"><path d="M260 53c-.7 0-1.3.4-1.4 1.8 0 .3.2.6.5.9l-.1 3.6c.3.7-.3 2 1.3 1.8 2.5 1 .4 3.8 1.9 5.2l-.6 3.7c1.5.7 1.2 2.2 1.7 3.4-.7.2-.7 1-1 1.6l1.2 1.3c1 1.2 1.1 2.9 2.6 3.8.5.5.6 1.2.7 2l-.1.5V84c-1 1.1-1 2.5-1.2 3.8 1.6-.3 1.9 1 2.4 2 0 1.3-2 1-1.9 2.4v.6l-.2.2c0 .1 0 .2.3.3h.6l1.3-.8v.5l1.2-.9.6.7 1.8-1.7V92l2-1.3c.4-.4 1-.8.8-1.5 1.2 0 2.1-.8 3-1.5.3-.6 1-1 .6-1.8.5-.1.9-.5 1.2-.8l.8-.8.3-.1.1-.1c.3-.2.7-.2 1-.3 1-.3 2-.6 2.5-1.6v-.6c.5-.2 1-.5 1.1-1.1.6-.1 1-.6 1.3-1l.8-.5h.6c.5 0 .8-.3 1-.7.3-.6.3-1.2.2-1.8l-.6-1.2-.8-1.3c-.4-.7-.7-1.4-1.3-2-.4-.3-.8-.7-1.4-.7l-1.2-.8-2.4-2.5-1.2-.6c-.8-.3-1-1.6-2.2-1.3-.3-1.4-1.6-2-2.3-3.1l-1.3-.1-.6-.6c0-1.3-1.4-1.6-2-2.5-.4 0-.8-.7-1.3-.2-.3-1.5-1.9-1.8-2.6-2.9-1.7-.3-2.7-2-4.2-2.6-1-.9-1-.8-1.3-.7h-.6c-.5-.3-1-.5-1.5-.5z" fill="#863b3b"/></svg> diff --git a/src/art/vector/layers/Art_Vector_Fox_Ear_Fore.svg b/src/art/vector/layers/Art_Vector_Fox_Ear_Fore.svg index d69e3a3eb653f95ec47b482cb4a0e8dfb5603fa1..29e309fa80a7f1521e6f9ba94f4934f05f41a294 100644 --- a/src/art/vector/layers/Art_Vector_Fox_Ear_Fore.svg +++ b/src/art/vector/layers/Art_Vector_Fox_Ear_Fore.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 560 1000" class="ad1"><path d="M340 52.9c-.2 0-.5.3-.7.5-.5 0-1 0-1.3.6 0 0-.7 0-1 .3-.4.2-.8 1.2-.8 1.2-2 1.2-2.2 1.9-2 2.4-1.2 0-1.8 1-2.5 1.8-1-.1-1.9 1.8-2.5 2.6-.6-.5-4.5 1.6-3.3 2.8l-.5.4c-.5 0-1.2-.6-1.2-.6-.8.6-.9 1.3-.6 2.1 0 .3.2.5.4.7-1 1.2-2.8 1.6-3.1 3.4l-.7.7c-.6.7-1.7.9-2.4 1.6-.4.5-.4 1-.3 1.7-.4 2.3-.2 2.7 1.8 2.4l-.2.6v.1c-.4.6-.3 1.2 0 1.8.7 1.3 1.5 2.4 3.2 2.1h.2l.1.1.1.1c-1.2 1-1.1 2-.4 3 .8 1.2 1.1 2.4 1.4 3.7 1.2 1.5 2.2 3.1 4 4 3.2 2.1 3.5 9.1 12 10.2-.3-.8-1-1.4-.9-2l.7.6c.8.2 1.4 0 2-.5l.8-.4c.5-.3.6-.9.8-1.3l.7-.7v-1.2h.6c-.5-1-.3-3.3-.7-4.4 1.5-.5 1.2-2.6 2.6-3.1.9-.6.5-3.4.5-5.1l-.2-6v-.9s.1.4.4.5l.4-4.4c1.2-2.8 1.3-5.7 1.3-8.7 0-.7-.2-1.2-.2-1.2l-.2 1-.2-5.4-.5-.3c0-2.4-.8-5-2.6-6.2 0 0 .1-.3-.7-.7-.7-.3-4 0-4.3 0z" fill="#863b3b"/><path d="M340.4 68.9c-1.2-.2-2.1 1.3-3.4.6l-.3-.2-3 1.9-.7 2.5c.7 1.3.3 2-1.2 2v1.1c.6.5.6 1.2.5 2-1 1-.6 2.3-.7 3.4-.2 2-1 3.5-3 4.1 1.5 2.4 4.6 3.5 5.7 6.4l.7 1.8c1.3-1.5 1.9-3 1.1-5.1-.6-1.6.1-3 1.8-3.9.6 0 1.3-.3 1.7 0l.2-1.6c-1.1 0-1.2-.9-1.1-2-.4-.7-.4-1.3.6-1.3.5.3.8.8 1.2 1l.6-.3h-.2c-1-1.3-.8-2.8-.5-4 .6-2.8.5-5.6 0-8.4z"/></svg> \ No newline at end of file +<svg viewBox="0 0 560 1000"><path d="M340 52.9c-.2 0-.5.3-.7.5-.5 0-1 0-1.3.6 0 0-.7 0-1 .3-.4.2-.8 1.2-.8 1.2-2 1.2-2.2 1.9-2 2.4-1.2 0-1.8 1-2.5 1.8-1-.1-1.9 1.8-2.5 2.6-.6-.5-4.5 1.6-3.3 2.8l-.5.4c-.5 0-1.2-.6-1.2-.6-.8.6-.9 1.3-.6 2.1 0 .3.2.5.4.7-1 1.2-2.8 1.6-3.1 3.4l-.7.7c-.6.7-1.7.9-2.4 1.6-.4.5-.4 1-.3 1.7-.4 2.3-.2 2.7 1.8 2.4l-.2.6v.1c-.4.6-.3 1.2 0 1.8.7 1.3 1.5 2.4 3.2 2.1h.2l.1.1.1.1c-1.2 1-1.1 2-.4 3 .8 1.2 1.1 2.4 1.4 3.7 1.2 1.5 2.2 3.1 4 4 3.2 2.1 3.5 9.1 12 10.2-.3-.8-1-1.4-.9-2l.7.6c.8.2 1.4 0 2-.5l.8-.4c.5-.3.6-.9.8-1.3l.7-.7v-1.2h.6c-.5-1-.3-3.3-.7-4.4 1.5-.5 1.2-2.6 2.6-3.1.9-.6.5-3.4.5-5.1l-.2-6v-.9s.1.4.4.5l.4-4.4c1.2-2.8 1.3-5.7 1.3-8.7 0-.7-.2-1.2-.2-1.2l-.2 1-.2-5.4-.5-.3c0-2.4-.8-5-2.6-6.2 0 0 .1-.3-.7-.7-.7-.3-4 0-4.3 0z" fill="#863b3b"/><path d="M340.4 68.9c-1.2-.2-2.1 1.3-3.4.6l-.3-.2-3 1.9-.7 2.5c.7 1.3.3 2-1.2 2v1.1c.6.5.6 1.2.5 2-1 1-.6 2.3-.7 3.4-.2 2-1 3.5-3 4.1 1.5 2.4 4.6 3.5 5.7 6.4l.7 1.8c1.3-1.5 1.9-3 1.1-5.1-.6-1.6.1-3 1.8-3.9.6 0 1.3-.3 1.7 0l.2-1.6c-1.1 0-1.2-.9-1.1-2-.4-.7-.4-1.3.6-1.3.5.3.8.8 1.2 1l.6-.3h-.2c-1-1.3-.8-2.8-.5-4 .6-2.8.5-5.6 0-8.4z"/></svg> diff --git a/src/art/vector/layers/Art_Vector_Fox_Tail.svg b/src/art/vector/layers/Art_Vector_Fox_Tail.svg index 829b5ca5f8a5d447e842dc9caa50b6df3bc21c45..5784a7136298f1c6092150cbe919e17ed7509dd4 100644 --- a/src/art/vector/layers/Art_Vector_Fox_Tail.svg +++ b/src/art/vector/layers/Art_Vector_Fox_Tail.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 560 1000" class="ad1"><path d="M331.1 473.6c-3.7.8-4.6 2.4-2.6 5.2 2.5 1.7 4.1 4.1 6.2 6.1a32 32 0 017.1 9.2l.7 1c1.1 1.1 2.3 2.5 3.7 3.1v.2c2.2 8.5 8 17 9 24.8.7 2.6 1 5.4 2.5 7.7h1v.3c-1.6 1.7-.8 4.1-1.6 6 0 3.2-1.2 6.7.6 10l.4.3c-.7.8-.4 1.6 0 2.6l-1.3 2.3c0 2.3-.5 4.6-.5 7-.2 1.4-.4 2.7 0 4v.5c0 2.5.5 5 1 7.3-1 1.8.6 3.7-.4 5.7 2.5 4 1.2 8.7 2.5 13.1l8.5 31.8h.2a21.4 21.4 0 00.8 7.2c3.6 10.8 2.8 23 8.2 33.5 1.7 8.2 4.6 16.3 8.2 24l1.9 1.6a9.9 9.9 0 001.6 5c1.3 2.3 4.4 3.2 6.9 3.4 1 .8 2.3.8 2.6 4.1.4 3.3 3.3 4.6 7 7.7.6.4.4.7.4 1.2.2 5.2 3.3 8.4 7.6 10.7 1.5 2.6 4.2 4.9 6 4.9 1.7 2.1 4.3 2.1 6.3 3.1.5 3.3 1.6 2.8 2.1 3.8 1.2 2.3 4.3 3.3 6.6 4.7.3 2.8 3.3 2.2 4.6 3.8 2.5 1.3 4.6 3.3 7.7 2.5h.4c1.6 2.1 3.9 2.1 6.5 1.1v.5c.7 1.3 2 1.7 3.3 1.7 1 1.6 2.5 2 4.3 1.5 19.2-.9 37.8-22.7 36.6-40 .7-2.4-1.6-4-2-6l-1.6-2.3-1 .1-4.8-3.3c0-1.1 0-2.3-.6-3.2-1.5-1.5-1.2-4.3-3.5-5-.1-1.6-2-2.6-3.4-3.3-.3-1.4-1.5-2.8-.7-4.2l-.1-1.3c-2.3-2-4.6-6.6-5.5-7.1-1-1-2.4-1.8-.6-3 1.6-1.1-5.6-8.7-8.6-11 1.9-.1-.6-3.8-.6-5.2l-.7-1.7-1.8-1.6c-.8-1-.6-2.6-2.1-3.1l-1-1.5-.6-.8c-.5-1.5-.2-3.3-2-4.1-1.3-1.4 0-2.7 0-3.8-3.1-2.2-1.2-6.1-3.3-8.6l-.3-.8c-1.7-1.6-2-4.1-2.5-6.2l-.8-3c-.3-1.1-.2-2.3-.3-3.3 0-1.3-.4-2.6 0-3.8.3-1.3.3-2.4-.2-3.6v-.1c.3-.9.2-1.8 0-2.8l-1.7-5.6-1.3-6-1-.7c.4-5.3-3-10.6-3.6-15a9.4 9.4 0 00-2.8-5.6c-.6-7.2-10.8-34.5-15.6-34.5v-.5a8.2 8.2 0 00-.8-1.8c-3.3-5.6-7.5-10.5-10.2-16.4-.6-1.6-2.1-3.3-3.8-4.4a29 29 0 01-6.9-7.6c-10.3-13.5-12.6-8.9-15-13.5-3.4-4-11-8.2-12.6-8.5-3.7-.7-3-2.8-4.4-3.5-2.6-1.1-5-2.4-7.9-2.8-4.9-2-10.3-.6-15-2.4-5.3-.3-11-1.7-15.5-1.7z" fill="#863b3b"/><path d="M494 699.5l-.9.1c-1.1 2.2-3.4-.5-5 1.7 3.2 2 8 4 2.2 8.5 0 1.3-.5 1.7-1.6.7-1-.9-1.7-2.5-3.5-2.2l.7 2.7c0 .8-.5.3-.8.3-3.7 0-3.3 2.8-3.8 5 0 0-.3 0-.5-.2-4 2.2-4 2.2-2.6 4.4 1.3 2.4-.5 4-1.2 6l.2.9c-1.8.3-3.3.6-1.7 3.1 1.3 2.3-1.1 1-1.6 1.6v.5c-1.3.7-2.5-2-4-.5-.6 1-.3 1.9 0 2.8l-1 .4a5 5 0 002.9 3l2 1.2c.7 3.8-1.6 2.2-3.2 1.8l-2.1-1.3c-2.2 1-2.8 4.6-5.6 3.6-2.3-.6-3.1.7-4.3 1.9l-2 .6c1 1.7 2.7 2.1 4.5 1.7.3 3.9 4 1.4 5.6 3.2 1 .5 1.8.7 2.4.4.4.6 1.2.8 1.8 1 1.2 0 2.3-1.2 3.3-.9 0 1.2.7 2 1.7 2.8.8 1.2 4.4 2.7 5.5 1.3 1.7.5 3.2-.1 4.2-1.6.4 2.8 3.6 2.8 3.7 1.6 1 .7 2.2.5 3.3.4 1-.2 1.7-.7 2.2-1.5.4.8 1.6 0 1.8-.3 1 1.3 2.1 1.1 3 1.3l.6-.2.8.8c2.1.9 4.1 0 6-.6v.1c1.7 2.7 9.4.4 11.4-1 1-.8 2-1.8 2.1-3l1.2-.2c.7.6 1.6 1 2.3 1 4.1 0 6 .6 7.4-2.2 1.1-.3 1-.8.5-1.5.5-.1.8-.6 1-1.1 0-.7-.5-1.3-.2-2.1 1.2 0 2.3-.4 1.3-2.2-.6-1.6-3.3-2-4.4-3.3-1.8-1.6-2.2-4.6-3.8-6.4-1.3-1.3-3.3-1-4.6-2.1-1.8-1.5-2.1-7.2-5.3-6.6l-.3.2c0-1 0-2.2-.5-3.3-1.1-.3-2-.2-2.6.8-1-.1-3 1.5-2.1-1.5 0-1-.4-1.6-.9-2.4l-1.3-1.7c-1.6-.8-1.6-2.6-2-4-2 .4-4 1-4.4-1.7 1.5-1.5-3-3.5-4-3.5.6-2.4-1.7-4-2-6l-1.7-2.3z" fill="#eaeaea"/></svg> \ No newline at end of file +<svg viewBox="0 0 560 1000"><path d="M331.1 473.6c-3.7.8-4.6 2.4-2.6 5.2 2.5 1.7 4.1 4.1 6.2 6.1a32 32 0 017.1 9.2l.7 1c1.1 1.1 2.3 2.5 3.7 3.1v.2c2.2 8.5 8 17 9 24.8.7 2.6 1 5.4 2.5 7.7h1v.3c-1.6 1.7-.8 4.1-1.6 6 0 3.2-1.2 6.7.6 10l.4.3c-.7.8-.4 1.6 0 2.6l-1.3 2.3c0 2.3-.5 4.6-.5 7-.2 1.4-.4 2.7 0 4v.5c0 2.5.5 5 1 7.3-1 1.8.6 3.7-.4 5.7 2.5 4 1.2 8.7 2.5 13.1l8.5 31.8h.2a21.4 21.4 0 00.8 7.2c3.6 10.8 2.8 23 8.2 33.5 1.7 8.2 4.6 16.3 8.2 24l1.9 1.6a9.9 9.9 0 001.6 5c1.3 2.3 4.4 3.2 6.9 3.4 1 .8 2.3.8 2.6 4.1.4 3.3 3.3 4.6 7 7.7.6.4.4.7.4 1.2.2 5.2 3.3 8.4 7.6 10.7 1.5 2.6 4.2 4.9 6 4.9 1.7 2.1 4.3 2.1 6.3 3.1.5 3.3 1.6 2.8 2.1 3.8 1.2 2.3 4.3 3.3 6.6 4.7.3 2.8 3.3 2.2 4.6 3.8 2.5 1.3 4.6 3.3 7.7 2.5h.4c1.6 2.1 3.9 2.1 6.5 1.1v.5c.7 1.3 2 1.7 3.3 1.7 1 1.6 2.5 2 4.3 1.5 19.2-.9 37.8-22.7 36.6-40 .7-2.4-1.6-4-2-6l-1.6-2.3-1 .1-4.8-3.3c0-1.1 0-2.3-.6-3.2-1.5-1.5-1.2-4.3-3.5-5-.1-1.6-2-2.6-3.4-3.3-.3-1.4-1.5-2.8-.7-4.2l-.1-1.3c-2.3-2-4.6-6.6-5.5-7.1-1-1-2.4-1.8-.6-3 1.6-1.1-5.6-8.7-8.6-11 1.9-.1-.6-3.8-.6-5.2l-.7-1.7-1.8-1.6c-.8-1-.6-2.6-2.1-3.1l-1-1.5-.6-.8c-.5-1.5-.2-3.3-2-4.1-1.3-1.4 0-2.7 0-3.8-3.1-2.2-1.2-6.1-3.3-8.6l-.3-.8c-1.7-1.6-2-4.1-2.5-6.2l-.8-3c-.3-1.1-.2-2.3-.3-3.3 0-1.3-.4-2.6 0-3.8.3-1.3.3-2.4-.2-3.6v-.1c.3-.9.2-1.8 0-2.8l-1.7-5.6-1.3-6-1-.7c.4-5.3-3-10.6-3.6-15a9.4 9.4 0 00-2.8-5.6c-.6-7.2-10.8-34.5-15.6-34.5v-.5a8.2 8.2 0 00-.8-1.8c-3.3-5.6-7.5-10.5-10.2-16.4-.6-1.6-2.1-3.3-3.8-4.4a29 29 0 01-6.9-7.6c-10.3-13.5-12.6-8.9-15-13.5-3.4-4-11-8.2-12.6-8.5-3.7-.7-3-2.8-4.4-3.5-2.6-1.1-5-2.4-7.9-2.8-4.9-2-10.3-.6-15-2.4-5.3-.3-11-1.7-15.5-1.7z" fill="#863b3b"/><path d="M494 699.5l-.9.1c-1.1 2.2-3.4-.5-5 1.7 3.2 2 8 4 2.2 8.5 0 1.3-.5 1.7-1.6.7-1-.9-1.7-2.5-3.5-2.2l.7 2.7c0 .8-.5.3-.8.3-3.7 0-3.3 2.8-3.8 5 0 0-.3 0-.5-.2-4 2.2-4 2.2-2.6 4.4 1.3 2.4-.5 4-1.2 6l.2.9c-1.8.3-3.3.6-1.7 3.1 1.3 2.3-1.1 1-1.6 1.6v.5c-1.3.7-2.5-2-4-.5-.6 1-.3 1.9 0 2.8l-1 .4a5 5 0 002.9 3l2 1.2c.7 3.8-1.6 2.2-3.2 1.8l-2.1-1.3c-2.2 1-2.8 4.6-5.6 3.6-2.3-.6-3.1.7-4.3 1.9l-2 .6c1 1.7 2.7 2.1 4.5 1.7.3 3.9 4 1.4 5.6 3.2 1 .5 1.8.7 2.4.4.4.6 1.2.8 1.8 1 1.2 0 2.3-1.2 3.3-.9 0 1.2.7 2 1.7 2.8.8 1.2 4.4 2.7 5.5 1.3 1.7.5 3.2-.1 4.2-1.6.4 2.8 3.6 2.8 3.7 1.6 1 .7 2.2.5 3.3.4 1-.2 1.7-.7 2.2-1.5.4.8 1.6 0 1.8-.3 1 1.3 2.1 1.1 3 1.3l.6-.2.8.8c2.1.9 4.1 0 6-.6v.1c1.7 2.7 9.4.4 11.4-1 1-.8 2-1.8 2.1-3l1.2-.2c.7.6 1.6 1 2.3 1 4.1 0 6 .6 7.4-2.2 1.1-.3 1-.8.5-1.5.5-.1.8-.6 1-1.1 0-.7-.5-1.3-.2-2.1 1.2 0 2.3-.4 1.3-2.2-.6-1.6-3.3-2-4.4-3.3-1.8-1.6-2.2-4.6-3.8-6.4-1.3-1.3-3.3-1-4.6-2.1-1.8-1.5-2.1-7.2-5.3-6.6l-.3.2c0-1 0-2.2-.5-3.3-1.1-.3-2-.2-2.6.8-1-.1-3 1.5-2.1-1.5 0-1-.4-1.6-.9-2.4l-1.3-1.7c-1.6-.8-1.6-2.6-2-4-2 .4-4 1-4.4-1.7 1.5-1.5-3-3.5-4-3.5.6-2.4-1.7-4-2-6l-1.7-2.3z" fill="#eaeaea"/></svg> diff --git a/src/events/intro/pcAppearance.js b/src/events/intro/pcAppearance.js index 99dbf31f93e48b6d899fa8428abc7462a18d28f9..8eedb327acdc323eb60c5d9ba4ce27e493eae0d2 100644 --- a/src/events/intro/pcAppearance.js +++ b/src/events/intro/pcAppearance.js @@ -2,7 +2,7 @@ App.UI.Player = {}; App.UI.Player.appearance = function(options) { options.addOption("Your nationality is", "nationality", V.PC).showTextBox() - .addValueList(Object.keys(App.Data.SlaveSummary.short.nationality)) + .addValueList(App.Data.misc.baseNationalities) .addComment("For best result capitalize it.").pulldown(); options.addOption("Your race is", "race", V.PC).showTextBox() diff --git a/src/facilities/salon/salonPassage.js b/src/facilities/salon/salonPassage.js index b78f34aecd986a313a2b0b7ad571d04d2ef83311..20b0aab88504918ea0b801d8e069723acbcce54c 100644 --- a/src/facilities/salon/salonPassage.js +++ b/src/facilities/salon/salonPassage.js @@ -276,24 +276,22 @@ App.UI.salon = function(slave, cheat = false) { function skin() { const el = new DocumentFragment(); let r; + let option; App.UI.DOM.appendNewElement("h3", el, "Skin"); const options = new App.UI.OptionsGroup(); let comment = []; if (cheat) { - options.addOption(`${His} natural skin color is`, "origSkin", slave).showTextBox() - .addValueList([["Pure White", "pure white"], ["Ivory", "ivory"], ["White", "white"], ["Extremely Pale", "extremely pale"], - ["Very Pale", "very pale"], ["Pale", "pale"], ["Extremely Fair", "extremely fair"], ["Very Fair", "very fair"], - ["Fair", "fair"], ["Light", "light"], ["Light Olive", "light olive"], ["Tan", "tan"], ["Olive", "olive"], ["Bronze", "bronze"], - ["Dark Olive", "dark olive"], ["Dark", "dark"], ["Light Beige", "light beige"], ["Beige", "beige"], - ["Dark Beige", "dark beige"], ["Light Brown", "light brown"], ["Brown", "brown"], ["Dark Brown", "dark brown"], - ["Black", "black"], ["Ebony", "ebony"], ["Pure Black", "pure black"]]).pulldown(); + option = options.addOption(`${His} natural skin color is`, "origSkin", slave).showTextBox().pulldown(); + for (const skin of App.Medicine.Modification.naturalSkins) { + option.addValue(capFirstChar(skin), skin, () => slave.skin = slave.origSkin); + } } - let option = options.addOption(`${His} skin is ${slave.skin}.`, "skin", slave); + option = options.addOption(`${His} skin is ${slave.skin}.`, "skin", slave); if (App.Medicine.Modification.dyedSkins.includes(slave.skin)) { option.addValue("Remove coloring", slave.origSkin, billMod); - } else if (((slave.skin === "sun tanned") || (slave.skin === "spray tanned"))) { + } else if ((slave.skin === "sun tanned") || (slave.skin === "spray tanned")) { option.addValue("Remove tanning", slave.origSkin, billMod); } diff --git a/src/gui/css/options.css b/src/gui/css/options.css index 7ce9fb2705cc625456d3c1fb5e887d9fd6954241..d1d13a5cda81a249638223a767af91562035cbf8 100644 --- a/src/gui/css/options.css +++ b/src/gui/css/options.css @@ -4,12 +4,6 @@ div.options-group { align-items: center; } -@media only screen and (min-width: 1600px) { - div.options-group.double { - grid-template-columns: max-content auto max-content auto; - } -} - /* left side */ div.options-group div.description { margin-right: 10px; @@ -77,18 +71,64 @@ div.options-group button.neutral:hover { div.options-group input { border: 2px solid var(--button-border-color); min-width: unset; /* remove SC styling */ - width: 140px; + width: 12em; + /* move back so that the outline of a potential select overlaps in front */ + position:relative; + z-index: 0; +} + +.options-group input:hover, .options-group input:focus { + /* show highlighted border in front of neighbours */ + z-index: 1 } div.options-group input.number { - width: 50px; + width: 4em; +} + +div.options-group input.full-width { + width: 100%; +} + +/* custom row */ +.options-group .custom-row { + grid-column-start: span 2; + width: 70vw +} + +.options-group select { + border: none; /* outline instead of border */ + /* left & right outline overlap each other so we don't have a double border */ + outline: solid 2px var(--button-border-color); + margin-left: 2px; + min-width: 12em; + /* move in front of a potential textbox, so the outline overlaps the border of the textbox */ + position: relative; + z-index: 1; +} + +.options-group select:hover { + outline: solid 2px #eee; +} + +/* double column */ +@media only screen and (min-width: 1600px) { + .options-group.double { + grid-template-columns: max-content auto max-content auto; + } + + .options-group.double .custom-row { + width: 35vw + } } +/* other */ .subHeading { width: 85%; text-align: center; margin-top: 1.5em; } + .scLink { width: 85%; text-align: center; @@ -104,8 +144,3 @@ table.invisible { border-spacing: 5px; margin:1em auto; } - -/* custom row */ -.options-group .custom-row { - grid-column-start: span 2; -} diff --git a/src/gui/options/descriptionOptions.js b/src/gui/options/descriptionOptions.js new file mode 100644 index 0000000000000000000000000000000000000000..6b4e0da08707ff4981c98a0cf8784a82d6660807 --- /dev/null +++ b/src/gui/options/descriptionOptions.js @@ -0,0 +1,70 @@ +App.UI.descriptionOptions = function() { + const f = document.createDocumentFragment(); + App.UI.DOM.appendNewElement("h1", f, "Description Options"); + + App.UI.DOM.appendNewElement("p", f, + "These options will affect both the long form description of each slave and the miniscenes available from the main menu.", + "scene-intro"); + + const options = new App.UI.OptionsGroup(); + + options.addOption("", "surnameOrder") + .addValue("Allow nationality name order", 0).customDescription("Order names ''based on country of origin''.") + .addValue("Force name surname", 1).customDescription("Names will always be ''Name Surname''.") + .addValue("Force surname name", 2).customDescription("Names will always be ''Surname Name''."); + + options.addOption("", "seeRace") + .addValue("Disable most mentions of race", 0).off() + .customDescription("Ethnicity will ''almost never'' be mentioned.") + .addValue("Enable mentions of race", 1).on().customDescription("Ethnicity will ''occasionally'' be mentioned."); + + options.addOption("", "seeNationality") + .addValue("Disable most mentions of nationality", 0).off() + .customDescription("Nationality will ''almost never'' be mentioned.") + .addValue("Enable mentions of nationality", 1).on() + .customDescription("Nationality will ''occasionally'' be mentioned."); + + options.addOption("The effects of implants are", "showImplantEffects") + .addValue("Shown", 1).on().addValue("Hidden", 0).off(); + + options.addOption("Clothing is mostly", "showClothing") + .addValue("Shown", 1).on().addValue("Hidden", 0).off(); + + options.addOption("Detailed slave age information is", "showAgeDetail") + .addValue("Shown", 1).on().addValue("Hidden", 0).off(); + + options.addOption("Approximate height is", "showHeightCMs") + .addValue("Shown", 1).on().addValue("Hidden", 0).off(); + + options.addOption("Cosmetic body mods are", "showBodyMods") + .addValue("Shown", 1).on().addValue("Hidden", 0).off(); + + options.addOption("Sexual histories are", "showSexualHistory") + .addValue("Shown", 1).on().addValue("Hidden", 0).off(); + + options.addOption("Attractiveness and Sexual scores are", "showScores") + .addValue("Shown", 1).on().addValue("Hidden", 0).off(); + + options.addOption("Volume, in CCs, of breasts is", "showBoobCCs") + .addValue("Shown", 1).on().addValue("Hidden", 0).off(); + + options.addOption("Height and length units are in", "showInches") + .addValueList([["Metric", 0], ["Both", 1], ["Imperial", 2]]); + + if (V.seeDicks > 0) { + options.addOption("Approximate sizes of dicks and balls are", "showDickCMs") + .addValue("Shown", 1).on().addValue("Hidden", 0).off(); + } + + options.addOption("Numbers are displayed as", "showNumbers") + .addValueList([["Integers", 2], ["Both", 1], ["Words", 0]]); + + if (V.showNumbers === 1) { + options.addOption("Only numbers up to $showNumbersMax are displayed as words", "showNumbersMax") + .addValue("Default (20)", 20).showTextBox(); + } + + App.UI.DOM.appendNewElement("p", f, options.render()); + + return f; +}; diff --git a/src/gui/options/descriptionOptions.tw b/src/gui/options/descriptionOptions.tw index b4b0c1a7075d5b046b65e1b92fdaf8ac4a4ede47..5ac19a8fb4a8d1706591ea51f229b194ec813c73 100644 --- a/src/gui/options/descriptionOptions.tw +++ b/src/gui/options/descriptionOptions.tw @@ -10,65 +10,4 @@ <</if>> <<set $nextLink = $storedLink>> -<h1>Description Options</h1> - -//These options will affect both the long form description of each slave and the miniscenes available from the main menu.// - -<<set _options = new App.UI.OptionsGroup()>> - -<<run _options.addOption("", "surnameOrder") -.addValue("Allow nationality name order", 0).customDescription("Order names ''based on country of origin''.") -.addValue("Force name surname", 1).customDescription("Names will always be ''Name Surname''.") -.addValue("Force surname name", 2).customDescription("Names will always be ''Surname Name''.")>> - -<<run _options.addOption("", "seeRace") -.addValue("Disable most mentions of race", 0).off().customDescription("Ethnicity will ''almost never'' be mentioned.") -.addValue("Enable mentions of race", 1).on().customDescription("Ethnicity will ''occasionally'' be mentioned.")>> - -<<run _options.addOption("", "seeNationality") -.addValue("Disable most mentions of nationality", 0).off().customDescription("Nationality will ''almost never'' be mentioned.") -.addValue("Enable mentions of nationality", 1).on().customDescription("Nationality will ''occasionally'' be mentioned.")>> - -<<run _options.addOption("The effects of implants are", "showImplantEffects") -.addValue("Shown", 1).on().addValue("Hidden", 0).off()>> - -<<run _options.addOption("Clothing is mostly", "showClothing") -.addValue("Shown", 1).on().addValue("Hidden", 0).off()>> - -<<run _options.addOption("Detailed slave age information is", "showAgeDetail") -.addValue("Shown", 1).on().addValue("Hidden", 0).off()>> - -<<run _options.addOption("Approximate height is", "showHeightCMs") -.addValue("Shown", 1).on().addValue("Hidden", 0).off()>> - -<<run _options.addOption("Cosmetic body mods are", "showBodyMods") -.addValue("Shown", 1).on().addValue("Hidden", 0).off()>> - -<<run _options.addOption("Sexual histories are", "showSexualHistory") -.addValue("Shown", 1).on().addValue("Hidden", 0).off()>> - -<<run _options.addOption("Attractiveness and Sexual scores are", "showScores") -.addValue("Shown", 1).on().addValue("Hidden", 0).off()>> - -<<run _options.addOption("Volume, in CCs, of breasts is", "showBoobCCs") -.addValue("Shown", 1).on().addValue("Hidden", 0).off()>> - -<<run _options.addOption("Height and length units are in", "showInches") -.addValueList([["Metric", 0], ["Both", 1], ["Imperial", 2]])>> - - -<<if $seeDicks > 0>> <br> - <<run _options.addOption("Approximate sizes of dicks and balls are", "showDickCMs") - .addValue("Shown", 1).on().addValue("Hidden", 0).off()>> -<</if>> - - -<<run _options.addOption("Numbers are displayed as", "showNumbers") -.addValueList([["Integers", 2], ["Both", 1], ["Words", 0]])>> - -<<if $showNumbers === 1>> - <<run _options.addOption("Only numbers up to $showNumbersMax are displayed as words", "showNumbersMax") - .addValue("Default (20)", 20).showTextBox()>> -<</if>> - -<<includeDOM _options.render()>> +<<includeDOM App.UI.descriptionOptions()>> diff --git a/src/gui/options/options.js b/src/gui/options/options.js index 12967cf2e552c9559016fb40caf4366002e479df..a6ffd81760751d90cabb3ebeff05929bc7c4e08f 100644 --- a/src/gui/options/options.js +++ b/src/gui/options/options.js @@ -2,9 +2,8 @@ App.UI.OptionsGroup = (function() { class Row { /** * @param {HTMLDivElement} container - * @param {boolean} doubleColumn */ - render(container, doubleColumn) {} // jshint ignore:line + render(container) {} // jshint ignore:line } /** @@ -90,14 +89,13 @@ App.UI.OptionsGroup = (function() { } /** - * @param {string} [unit] + * @param {Object} [params] + * @param {string} [params.unit] + * @param {boolean} [params.large=false] * @returns {Option} */ - showTextBox(unit) { - this.textbox = true; - if (unit) { - this.unit = unit; - } + showTextBox({unit, large = false} = {}) { + this.textbox = {unit: unit, large: large}; return this; } @@ -274,7 +272,6 @@ App.UI.OptionsGroup = (function() { } else { let matchFound = false; let select = document.createElement("select"); - select.classList.add("rajs-list"); for (const value of this.valuePairs) { let el = document.createElement("option"); @@ -314,11 +311,15 @@ App.UI.OptionsGroup = (function() { if (isNumber) { textbox.classList.add("number"); } + if (this.textbox.large) { + textbox.classList.add("full-width"); + } buttonGroup.append(textbox); - if (this.unit) { - buttonGroup.append(" ", this.unit); + if (this.textbox.unit) { + buttonGroup.append(" ", this.textbox.unit); } } + if (this.comment) { const comment = document.createElement("span"); comment.classList.add("comment"); @@ -378,16 +379,10 @@ App.UI.OptionsGroup = (function() { /** * @param {HTMLDivElement} container - * @param {boolean}doubleColumn */ - render(container, doubleColumn) { + render(container) { /** @type {HTMLDivElement} */ const div = App.UI.DOM.makeElement("div", this.element, "custom-row"); - let factor = 0.7; - if (doubleColumn) { - factor *= 0.5; - } - div.style.width = `${Math.round(window.innerWidth * factor)}px`; container.append(div); } } diff --git a/src/npc/descriptions/descriptionWidgets.js b/src/npc/descriptions/descriptionWidgets.js index ee287553a7c6622338eaec17783d83d11a55ad3a..fc40a143f5189de6e64078d7de6291a5de458fb3 100644 --- a/src/npc/descriptions/descriptionWidgets.js +++ b/src/npc/descriptions/descriptionWidgets.js @@ -1502,7 +1502,7 @@ App.Desc.geneticQuirkAssessment = function(slave) { if (slave.geneticQuirks.uterineHypersensitivity === 2) { r.push(`${He} possesses a rare genetic trait that causes uterine hypersensitivity;`); if (slave.ovaries === 1 || slave.mpreg === 1) { - r.push(`pregnancy and birth will extremely pleasurable to ${him}.`); + r.push(`pregnancy and birth will be extremely pleasurable for ${him}.`); } else { r.push(`it has little effect on those unable to bear children.`); } diff --git a/src/npc/startingGirls/startingGirls.js b/src/npc/startingGirls/startingGirls.js index 8a03b57faeb3de2c96e13845758dcdf4de0288b3..10c209d4dca62a800339ec28c6379b4630d5bce6 100644 --- a/src/npc/startingGirls/startingGirls.js +++ b/src/npc/startingGirls/startingGirls.js @@ -247,73 +247,6 @@ App.StartingGirls.uncommittedFamilyTree = function(slave) { renderFamilyTree(tSlaves, slave.ID); }; -App.StartingGirls.career = function(slave) { - let el = new DocumentFragment(); - let text; - let pullDown; - - if (V.AgePenalty === 1) { - if (slave.actualAge < 16) { - text = "Very young careers: "; - pullDown = render(App.Utils.alphabetizeIterable(App.Data.Careers.General.veryYoung)); - } else if (slave.actualAge <= 24) { - text = "Young careers: "; - pullDown = render(App.Utils.alphabetizeIterable(App.Data.Careers.General.young)); - } else if (slave.intelligenceImplant >= 15) { - text = "Educated careers: "; - pullDown = render(App.Utils.alphabetizeIterable(App.Data.Careers.General.educated)); - } else { - text = "Uneducated careers: "; - pullDown = render(App.Utils.alphabetizeIterable(App.Data.Careers.General.uneducated)); - } - } else { - if (slave.actualAge < 16) { - text = "Very young careers: "; - pullDown = render(App.Utils.alphabetizeIterable(App.Data.Careers.General.veryYoung)); - } else if (slave.intelligenceImplant >= 15) { - text = "Educated careers: "; - pullDown = render(App.Utils.alphabetizeIterable(App.Data.Careers.General.educated)); - } else if (slave.actualAge <= 24) { - text = "Young careers: "; - pullDown = render(App.Utils.alphabetizeIterable(App.Data.Careers.General.young)); - } else { - text = "Uneducated careers: "; - pullDown = render(App.Utils.alphabetizeIterable(App.Data.Careers.General.uneducated)); - } - } - function render(options) { - let select = document.createElement("select"); - select.classList.add("rajs-list"); - - for (const opt of options) { - let el = document.createElement("option"); - el.textContent = capFirstChar(opt); - el.value = opt; - if (slave.career === opt) { - el.selected = true; - } - select.appendChild(el); - } - select.onchange = () => { - slave.career = select.options[select.selectedIndex].value; - jQuery("#career-textbox").empty().append( - App.UI.DOM.makeTextBox( - slave.career, - v => { - slave.career = v; - }, - false, - ) - ); - }; - - return select; - } - el.append(text); - el.append(pullDown); - return el; -}; - App.StartingGirls.applyPlayerOrigin = function(slave) { switch (V.PC.career) { case "wealth": @@ -683,3 +616,736 @@ App.StartingGirls.applyPlayerOrigin = function(slave) { } } }; + +App.StartingGirls.physical = function(slave) { + const el = new DocumentFragment(); + const {he} = getPronouns(slave); + const options = new App.UI.OptionsGroup(); + let option; + + options.addOption("Condition", "condition", slave.health) + .addValueList([["Unhealthy", -40], ["Healthy", 0], ["Very healthy", 40], ["Extremely healthy", 80]]); + + options.addOption(`Height: ${heightToEitherUnit(slave.height)}`, "height", slave).showTextBox({unit: "cm"}) + .addRange(145, 150, "<", "Petite") + .addRange(155, 160, "<", "Short") + .addRange(165, 170, "<", "Average") + .addRange(180, 185, "<", "Tall") + .addRange(190, 185, ">=", "Very tall"); + option = options.addOption(`Average height for a ${slave.actualAge} year old """is ${heightToEitherUnit(Math.round(Height.mean(slave)))}"""`) + .customButton( + "Make average", + () => resyncSlaveHight(slave), + "" + ); + if (V.cheatMode === 1) { + option.customButton( + "Make dwarf", + () => slave.height = Height.random(slave, {limitMult: [-4, -1], spread: 0.15}), + "" + ) + .customButton( + "Make giant", + () => slave.height = Height.random(slave, {limitMult: [3, 10], spread: 0.15}), + "" + ); + } + + options.addOption("Weight", "weight", slave) + .addRange(-100, -95, "<", "Emaciated") + .addRange(-50, -30, "<", "Skinny") + .addRange(-20, -10, "<", "Thin") + .addRange(0, 10, "<", "Average") + .addRange(20, 30, "<", "Plush") + .addRange(50, 95, "<", "Chubby") + .addRange(100, 130, "<", "Fat") + .addRange(140, 160, "<", "Obese") + .addRange(180, 190, "<", "Super obese") + .addRange(200, 190, ">=", "Dangerously obese"); + + options.addOption("Muscles", "muscles", slave) + .addRange(-100, -96, "<", "Frail") + .addRange(-66, -51, "<", "Very weak") + .addRange(-41, -6, "<", "Weak") + .addRange(0, 5, "<", "Normal") + .addRange(20, 30, "<", "Toned") + .addRange(40, 50, "<", "Well built") + .addRange(65, 95, "<", "Quite muscular") + .addRange(100, 95, ">=", "Ripped"); + + options.addOption("Waist", "waist", slave) + .addRange(-100, -95, "<", " Absurd") + .addRange(-55, -40, "<", "Hourglass") + .addRange(-25, -15, "<", "Feminine") + .addRange(0, 10, "<", "Average") + .addRange(15, 40, "<", "Unattractive") + .addRange(55, 95, "<", "Ugly") + .addRange(100, 10, ">=", "Masculine"); + + option = options.addOption("Facial appearance", "faceShape", slave) + .addValue("Normal", "normal"); + if (V.seeDicks !== 0) { + option.addValue("Masculine", "masculine"); + } + option.addValueList([["Androgynous", "androgynous"], ["Cute", "cute"], ["Sensual", "sensual"], ["Exotic", "exotic"]]); + + options.addOption("Facial attractiveness", "face", slave) + .addRange(-100, -95, "<", "Very ugly") + .addRange(-55, -40, "<", "Ugly") + .addRange(-15, -10, "<", "Unattractive") + .addRange(0, 10, "<", "Average") + .addRange(15, 40, "<", "Attractive") + .addRange(55, 95, "<", "Beautiful") + .addRange(100, 95, ">=", "Very beautiful"); + + option = options.addOption("Lips", "lips", slave) + .addRange(5, 10, "<", "Thin") + .addRange(15, 20, "<", "Normal") + .addRange(25, 40, "<", "Pretty") + .addRange(55, 70, "<", "Plush"); + if (V.seeExtreme === 1) { + option.addRange(85, 95, "<", "Huge") + .addRange(100, 95, ">=", "Facepussy"); + } else { + option.addRange(85, 70, ">=", "Huge"); + } + + options.addOption("Voice", "voice", slave) + .addValueList([["Mute", 0], ["Deep", 1], ["Normal", 2], ["High", 3]]); + + if (slave.voice !== 0) { + options.addOption(V.language, "accent", slave) + .addValueList([ + ["Unaccented", 0], + [`Pretty ${aNational(slave.nationality)} accent`, 1], + [`Thick ${aNational(slave.nationality)} accent`, 2], + ["Not fluent", 3] + ]); + } + + option = options.addOption("Teeth", "teeth", slave) + .addValueList([ + ["Crooked", "crooked"], + ["Gapped", "gapped"], + ["Braces", "straightening braces"] + ]); + if (slave.physicalAge >= 12) { + if (slave.teeth === "baby" || slave.teeth === "mixed") { + slave.teeth = "normal"; + } + option.addValue("Straight", "normal"); + } else if (slave.physicalAge >= 6) { + if (slave.teeth === "baby" || slave.teeth === "normal" || slave.teeth === "") { + slave.teeth = "mixed"; + } + option.addValue("Mixed adult & child", "mixed"); + } else { + if (slave.teeth === "mixed" || slave.teeth === "normal" || slave.teeth === "") { + slave.teeth = "mixed"; + } + option.addValue("Baby", "baby"); + } + + options.addOption("Breasts", "boobs", slave).showTextBox({unit: "CCs"}) + .addRange(200, 200, "<=", "Flat (AA-cup)") + .addRange(300, 300, "<=", "Small (A-cup)") + .addRange(400, 400, "<=", "Medium (B-cup)") + .addRange(500, 500, "<=", "Healthy (C-cup)") + .addRange(800, 800, "<=", "Large (DD-cup)") + .addRange(1200, 1200, "<=", "Very Large (G-cup)") + .addRange(2050, 2050, "<=", "Huge (K-cup)") + .addRange(3950, 3950, "<=", "Massive (Q-cup)") + .addRange(6000, 6000, "<=", "Monstrous") + .addRange(8000, 6000, ">", "Science Experiment"); + + options.addOption("Natural shape", "boobShape", slave) + .addValueList([ + ["Normal", "normal"], + ["Perky", "perky"], + ["Torpedo-shaped", "torpedo-shaped"], + ["Wide-set", "wide-set"], + ["Downward-facing", "downward-facing"], + ["Saggy", "saggy"] + ]); + + options.addOption("Lactation", "lactation", slave) + .addValue("Artificial", 2, () => slave.lactationDuration = 2) + .addValue("Natural", 1, () => slave.lactationDuration = 2) + .addValue("None", 0); + + options.addOption("Nipples", "nipples", slave) + .addValueList([["Tiny", "tiny"], ["Cute", "cute"], ["Puffy", "puffy"], ["Partially Inverted", "partially inverted"], ["Inverted", "inverted"], ["Huge", "huge"]]); + + options.addOption("Areolae", "areolae", slave) + .addValueList([["Normal", 0], ["Large", 1], ["Wide", 2], ["Huge", 3], ["Massive", 4]]); + + options.addOption("Shoulders", "shoulders", slave) + .addValueList([["Very narrow", -2], ["Narrow", -1], ["Feminine", 0], ["Broad", 1], ["Very broad", 2]]); + + options.addOption("Hips", "hips", slave) + .addValueList([["Very narrow", -2], ["Narrow", -1], ["Normal", 0], ["Broad", 1], ["Very broad", 2]]); + + options.addOption("Butt", "butt", slave) + .addValueList([["Flat", 0], ["Small", 1], ["Plump", 2], ["Big", 3], ["Huge", 4], ["Enormous", 5], ["Gigantic", 6], ["Massive", 7]]); + + options.addOption("Anus", "anus", slave) + .addValueList([["Virgin", 0], ["Normal", 1], ["Veteran", 2], ["Gaping", 3]]); + + if (slave.anus > 0) { + let comment; + if (slave.analArea <= slave.anus) { + comment = "Recently stretched to current size."; + } else if (slave.analArea - slave.anus === 1) { + comment = "Used to current size."; + } else { + comment = "Very broad."; + } + options.addOption("External anus appearance", "anus", slave) + .addValueList([ + ["Recently stretched", slave.analArea = slave.anus], + ["Used to current size", slave.analArea = slave.anus+1], + ["Very broad", slave.analArea = slave.anus+2], + ]).addComment(comment); + } + + options.addOption("Vagina", "vagina", slave) + .addValue("No vagina", -1, () => { + slave.preg = 0; + WombFlush(slave); + slave.belly = 0; + slave.bellyPreg = 0; + slave.pubertyXX = 0; + slave.pubertyAgeXX = V.fertilityAge; + slave.ovaries= 0; + }) + .addValue("Virgin", 0, () => { + slave.preg = -1; + slave.belly = 0; + slave.bellyPreg = 0; + slave.ovaries = 1; + }) + .addValue("Normal", 1, () => { + slave.preg = -1; + slave.belly = 0; + slave.bellyPreg = 0; + slave.ovaries = 1; + }) + .addValue("Veteran", 2, () => { + slave.preg = -1; + slave.belly = 0; + slave.bellyPreg = 0; + slave.ovaries = 1; + }) + .addValue("Gaping", 3, () => { + slave.preg = -1; + slave.belly = 0; + slave.bellyPreg = 0; + slave.ovaries = 1; + }); + + if (slave.vagina > -1) { + if (slave.dick === 0) { + options.addOption("Clit", "clit", slave) + .addValueList([["Normal", 0], ["Large", 1], ["Huge", 2]]); + } + + options.addOption("Labia", "labia", slave) + .addValueList([["Normal", 0], ["Large", 1], ["Huge", 2], ["Huge Dangling", 3]]); + + options.addOption("Vaginal wetness", "vaginaLube", slave) + .addValueList([["Dry", 0], ["Normal", 1], ["Excessive", 2]]); + + if (V.seePreg !== 0) { + /* This is only shown if slave has vagina */ + options.addOption("Puberty", "pubertyXX", slave) + .addValue("Prepubescent", 0, () => { + slave.pubertyAgeXX = V.fertilityAge; + slave.belly = 0; + slave.bellyPreg = 0; + WombFlush(slave); + }).addValue("Postpubescent", 1); + + options.addOption("Age of puberty", "pubertyAgeXX", slave).showTextBox(); + + if (slave.pubertyXX === 1) { + option = options.addOption("Pregnancy", "preg", slave); + if (V.seeHyperPreg === 1 && V.cheatMode === 1) { + option.addValue("Bursting at the seams", 43, () => { + slave.pregType = 150; + slave.pregWeek = 43; + slave.pregKnown = 1; + slave.belly = 2700000; + slave.bellyPreg = 2700000; + slave.pubertyXX = 1; + }); + if (slave.preg === 43) { + option.addComment("Extreme hyper pregnancy!"); + } + } + option.addValue("Completely Filled", 42, () => { + slave.pregType = 8; + slave.pregWeek = 42; + slave.pregKnown = 1; + slave.belly = 120000; + slave.bellyPreg = 120000; + slave.pubertyXX = 1; + }).addValue("Ready to drop", 40, () => { + slave.pregType = 1; + slave.pregWeek = 40; + slave.pregKnown = 1; + slave.belly = 15000; + slave.bellyPreg = 15000; + slave.pubertyXX = 1; + }).addValue("Advanced", 34, () => { + slave.pregType = 1; + slave.pregWeek = 34; + slave.pregKnown = 1; + slave.belly = 10000; + slave.bellyPreg = 10000; + slave.pubertyXX = 1; + }).addValue("Showing", 27, () => { + slave.pregType = 1; + slave.pregWeek = 27; + slave.pregKnown = 1; + slave.belly = 5000; + slave.bellyPreg = 5000; + slave.pubertyXX = 1; + }).addValue("Early", 12, () => { + slave.pregType = 1; + slave.pregWeek = 12; + slave.pregKnown = 1; + slave.belly = 100; + slave.bellyPreg = 100; + slave.pubertyXX = 1; + }).addValue("None", 0, () => { + slave.pregType = 0; + slave.belly = 0; + slave.bellyPreg = 0; + slave.pregSource = 0; + slave.pregWeek = 0; + slave.pregKnown = 0; + }).addValue("Contraceptives", -1, () => { + slave.pregType = 0; + slave.belly = 0; + slave.bellyPreg = 0; + slave.pregSource = 0; + slave.pregWeek = 0; + slave.pregKnown = 0; + }).addValue("Barren", -2, () => { + slave.pregType = 0; + slave.belly = 0; + slave.bellyPreg = 0; + slave.pregSource = 0; + slave.pregWeek = 0; + slave.pregKnown = 0; + }); + options.addOption("Births", "birthsTotal", slave.counter).showTextBox().addComment(`How many times ${he} has already given birth, not necessarily while owned by you.`); + } + + if (V.PC.dick > 0 && slave.preg > 0) { + options.addOption("Father of child", "pregSource", slave) + .addValueList([["My child", -1], ["Not me", 0]]); + } + } + } + + if (V.seeDicks !== 0 || V.makeDicks === 1) { + options.addOption("Penis", "dick", slave) + .addValue("None", 0, () => { + slave.balls = 0; + slave.pubertyXY = 0; + slave.pubertyAgeXY = V.potencyAge; + }) + .addValue("Tiny", 1, () => slave.clit = 0) + .addValue("Small", 2, () => slave.clit = 0) + .addValue("Normal", 3, () => slave.clit = 0) + .addValue("Large", 4, () => slave.clit = 0) + .addValue("Massive", 5, () => slave.clit = 0); + + if (slave.dick > 0) { + option = options.addOption("Foreskin", "foreskin", slave); + if (V.seeCircumcision === 1) { + option.addValue("Circumcised", 0); + } else if (slave.foreskin === 0) { + slave.foreskin = 3; + } + option.addValueList([["Tiny", 1], ["Small", 2], ["Normal", 3], ["Large", 4], ["Massive", 5]]); + } + + options.addOption("Testicles", "balls", slave) + .addValue("None", 0, () => { + slave.pubertyXY = 0; + slave.pubertyAgeXY = V.potencyAge; + slave.scrotum = 0; + }).addValueList([["Vestigial", 1], ["Small", 2], ["Normal", 3], ["Large", 4], ["Massive", 5]]); + + options.addOption("Age of Male Puberty", "pubertyAgeXY", slave).showTextBox(); + + if (slave.balls > 0) { + options.addOption("Ballsack", "scrotum", slave) + .addValueList([["None", 0], ["Tiny", 1], ["Small", 2], ["Normal", 3], ["Large", 4], ["Massive", 5]]); + + options.addOption("Male Puberty", "pubertyXY", slave) + .addValue("Prepubescent", 0, () => slave.pubertyAgeXY = V.potencyAge) + .addValue("Postpubescent", 1); + } + } + + options.addOption("Prostate", "prostate", slave) + .addValueList([ + ["No prostate", 0], + ["Has a prostate", 1] + ]); + + const optionLeft = options.addOption("Left eye", "vision", slave.eye.left); + const optionRight = options.addOption("Right eye", "vision", slave.eye.right); + optionLeft.addValueList([["Normal", 2], ["Nearsighted", 1]]); + optionRight.addValueList([["Normal", 2], ["Nearsighted", 1]]); + if (V.seeExtreme === 1) { + optionLeft.addValue("Blind", 0); + optionRight.addValue("Blind", 0); + } else { + if (slave.eye.left.vision === 0) { + slave.eye.left.vision = 2; + } + if (slave.eye.right.vision === 0) { + slave.eye.right.vision = 2; + } + } + option = options.addOption("Natural eye color", "origColor", slave.eye); + for (const color of App.Medicine.Modification.eyeColor.map(color => color.value)) { + option.addValue(capFirstChar(color), color); + } + option.pulldown(); + + option = options.addOption("Hearing", "hears", slave); + option.addValueList([["Normal", 0], ["Hard of hearing", -1]]); + if (V.seeExtreme === 1) { + option.addValue("Deaf", -2); + } else if (slave.hears === 0) { + slave.hears = 2; + } + + if (V.seeExtreme === 1) { + options.addOption("Smell ability", "smells", slave) + .addValueList([["Normal", 0], ["None", -1]]); + + options.addOption("Taste ability", "tastes", slave) + .addValueList([["Normal", 0], ["None", -1]]); + + State.temporary.LA = hasLeftArm(slave); + options.addOption("Left arm", "LA", State.temporary) + .addValue("Healthy", true, () => slave.arm.left = new App.Entity.LimbState()) + .addValue("Amputated", false, () => slave.arm.left = null); + + State.temporary.RA = hasRightArm(slave); + options.addOption("Right arm", "RA", State.temporary) + .addValue("Healthy", true, () => slave.arm.right = new App.Entity.LimbState()) + .addValue("Amputated", false, () => slave.arm.right = null); + + State.temporary.LL = hasLeftLeg(slave); + options.addOption("Left leg", "LL", State.temporary) + .addValue("Healthy", true, () => slave.leg.left = new App.Entity.LimbState()) + .addValue("Amputated", false, () => slave.leg.left = null); + + State.temporary.RL = hasRightLeg(slave); + options.addOption("Right leg", "RL", State.temporary) + .addValue("Healthy", true, () => slave.leg.right = new App.Entity.LimbState()) + .addValue("Amputated", false, () => slave.leg.right = null); + } + + el.append(options.render()); + return el; +}; + +App.StartingGirls.profile = function(slave) { + const el = new DocumentFragment(); + let options = new App.UI.OptionsGroup(); + let r; + let option; + const {His} = getPronouns(slave); + + options.addOption("Birth name", "birthName", slave).showTextBox(); + options.addOption("Slave name", "slaveName", slave).showTextBox(); + options.addOption("Birth surname", "birthSurname", slave).showTextBox(); + options.addOption("Slave surname", "slaveSurname", slave).showTextBox(); + + option = options.addOption("Career", "career", slave).showTextBox(); + let careers; + let text; + if (V.AgePenalty === 1) { + if (slave.actualAge < 16) { + text = "Very young careers"; + careers = App.Data.Careers.General.veryYoung; + } else if (slave.actualAge <= 24) { + text = "Young careers"; + careers = App.Utils.alphabetizeIterable(App.Data.Careers.General.young); + } else if (slave.intelligenceImplant >= 15) { + text = "Educated careers"; + careers = App.Utils.alphabetizeIterable(App.Data.Careers.General.educated); + } else { + text = "Uneducated careers"; + careers = App.Utils.alphabetizeIterable(App.Data.Careers.General.uneducated); + } + } else { + if (slave.actualAge < 16) { + text = "Very young careers"; + careers = App.Utils.alphabetizeIterable(App.Data.Careers.General.veryYoung); + } else if (slave.intelligenceImplant >= 15) { + text = "Educated careers"; + careers = App.Utils.alphabetizeIterable(App.Data.Careers.General.educated); + } else if (slave.actualAge <= 24) { + text = "Young careers"; + careers = App.Utils.alphabetizeIterable(App.Data.Careers.General.young); + } else { + text = "Uneducated careers"; + careers = App.Utils.alphabetizeIterable(App.Data.Careers.General.uneducated); + } + } + for (const career of careers) { + option.addValue(capFirstChar(career), career); + } + option.addComment(text).pulldown(); + + options.addOption("Legal status", "indenture", slave) + .addValue("Slave", -1, () => slave.indentureRestrictions = 0) + .addRange(52, 0, ">=", "Indentured Servant"); + if (slave.indenture > -1) { + options.addOption("Remaining weeks", "indenture", slave).showTextBox(); + + options.addOption("Indenture restrictions", "indentureRestrictions", slave) + .addValueList([["None", 0], ["Protective", 1], ["Restrictive", 2]]); + } + + options.addOption("Age", "actualAge", slave).showTextBox() + .customButton("Resync characteristics to age", () => resyncSlaveToAge(slave), "") + .customButton("Resync only height to age", () => slave.height = Height.random(slave), "") + .addComment("It is recommended to resync if you change age significantly"); + + options.addOption("Birth week", "birthWeek", slave).showTextBox(); + + options.addOption("Genes", "genes", slave) + .addValue("XX (Female)", "XX", () => { + slave.dick = 0; + slave.balls = 0; + slave.clit = 0; + slave.pubertyXY = 0; + slave.pubertyAgeXY = V.potencyAge; + slave.pubertyXX = (slave.pubertyAgeXX < slave.actualAge ? 1 : 0); + slave.vagina = Math.max(0, slave.vagina); + slave.boobs = Math.max(500, slave.boobs); + slave.balls = 0; + slave.scrotum = 0; + slave.prostate = 0; + slave.shoulders = either(-2, -1, 0); + slave.hips = either(-2, -1, 0); + }).addValue("XY (Male)", "XY", () => { + slave.dick = 3; + slave.vagina = -1; + WombFlush(slave); + slave.belly = 0; + slave.bellyPreg = 0; + slave.pubertyXY = (slave.pubertyAgeXY < slave.actualAge ? 1 : 0); + slave.pubertyXX = 0; + slave.pubertyAgeXX = V.fertilityAge; + slave.ovaries = 0; + slave.boobs = 0; + slave.balls = 3; + slave.scrotum = 3; + slave.prostate = 1; + slave.shoulders = either(0, 1, 2); + slave.hips = either(0, 1, 2); + }); + + option = options.addOption("Prestige", "prestige", slave) + .addValueList([["None", 0], ["Locally known", 1], ["Regionally famous", 2], ["World renowned", 3]]); + if (slave.prestige > 0) { + r = []; + r.push("Starting slaves incur an extreme cost penalty for prestige. This slave's"); + if (slave.actualAge >= 25) { + if (slave.actualAge > 35) { + r.push(" advanced"); + } + r.push(" age decreases the penalty."); + } else { + r.push(" young age requires paying the full penalty."); + } + option.addComment(`<span class=warning>${r.join(" ")}</span>`); + } + + options.addOption(`${His} nationality is`, "nationality", slave).showTextBox() + .addValueList(App.Data.misc.baseNationalities) + .pulldown(); + + + if (V.seeRace === 1) { + options.addOption(`${His} ethnicity is`, "race", slave).showTextBox().pulldown() + .addValueList([["White", "white"], ["Asian", "asian"], ["Latina", "latina"], ["Middle Eastern", "middle eastern"], + ["Black", "black"], ["Semitic", "semitic"], ["Southern European", "southern european"], ["Indo-Aryan", "indo-aryan"], + ["Amerindian", "amerindian"], ["Pacific Islander", "pacific islander"], ["Malay", "malay"], ["Mixed Race", "mixed race"]]); + } + + el.append(options.render()); + App.UI.DOM.appendNewElement("h3", el, "Optional customizations"); + options = new App.UI.OptionsGroup(); + + options.addOption("Origin story", "origin", slave).showTextBox({large: true}).addComment("Use complete, capitalized and punctuated sentences."); + + options.addOption("Origin override", "originOverride", V) + .addValue("Enable", 1).on() + .addValue("Disable", 0).off() + .addComment("Prevent Starting Girls from overwriting custom origin and tattoo with its defaults."); + + if (slave.prestige) { + options.addOption("Prestige description", "prestigeDesc", V).showTextBox().addComment("Use complete, capitalized and punctuated sentences."); + } + options.addOption("Description", "desc", slave.custom).showTextBox().addComment("Use complete, capitalized and punctuated sentences."); + options.addOption("Label", "label", slave.custom).showTextBox().addComment("Use a short phrase"); + + + el.append(options.render()); + return el; +}; + +App.StartingGirls.mental = function(slave) { + const el = new DocumentFragment(); + const options = new App.UI.OptionsGroup(); + let option; + let r; + + options.addOption("Intelligence", "intelligence", slave) + .addValueList([["Moronic", -100], ["Very stupid", -60], ["Stupid", -30], ["Average", 0], ["Smart", 30], ["Very smart", 60], ["Brilliant", 100]]); + + options.addOption("Education", "intelligenceImplant", slave) + .addValueList([["Uneducated", 0], ["Educated", 15], ["Well educated", 30]]); + + option = options.addOption("Devotion", "devotion", slave).showTextBox() + .addRange(-100, -95, "<", "Utterly hateful") + .addRange(-70, -50, "<", "Hateful") + .addRange(-35, -20, "<", "Resistant") + .addRange(0, 20, "<", "Ambivalent") + .addRange(35, 50, "<", "Accepting") + .addRange(70, 95, "<", "Devoted") + .addRange(100, 95, ">=", "Worshipful"); + if (slave.devotion > 20) { + r = []; + r.push("Starting slaves incur"); + if (slave.devotion > 50) { + r.push("severe cost penalty at very high"); + } else { + r.push("an additional cost penalty at high"); + } + r.push("levels of devotion. This slave's"); + if (slave.actualAge >= 25) { + if (slave.actualAge > 35) { + r.push("advanced"); + } + r.push("age decreases the penalty."); + } else { + r.push("young age requires paying the full penalty."); + } + option.addComment(`<span class=warning>${r.join(" ")}</span>`); + } + + options.addOption("Trust", "trust", slave).showTextBox() + .addRange(-100, -95, "<", "Abjectly terrified") + .addRange(-70, -50, "<", "Terrified") + .addRange(-35, -20, "<", "Frightened") + .addRange(0, 20, "<", "Fearful") + .addRange(35, 50, "<", "Careful") + .addRange(70, 95, "<", "Trusting") + .addRange(100, 95, ">=", "Absolute trust"); + + + + if (slave.fetishKnown === 0) { + options.addOption("Fetish", "fetishKnown", slave) + .addValueList([["Unknown", 0], ["Known", 1]]); + } else { + option = options.addOption("Fetish", "fetish", slave) + .addValue("Unknown", "", () => { + slave.fetish = either("boobs", "buttslut", "cumslut", "dom", "humiliation", "masochist", "pregnancy", "sadist", + "submissive", "none", "none", "none", "none", "none", "none", "none", "none", "none", "none"); + slave.fetishKnown = 0; + }).addValueList([["None", "none"], ["Sub", "submissive"], ["Dom", "dom"], ["Cumslut", "cumslut"], ["Humiliation", "humiliation"], + ["Buttslut", "buttslut"], ["Breasts", "boobs"], ["Pregnancy", "pregnancy"], ["Sadism", "sadist"], ["Masochism", "masochist"]]); + if (V.seeExtreme === 1) { + option.addValue("Mindbroken", "mindbroken", () => { + slave.fetishStrength = 10; + slave.sexualFlaw = "none"; + slave.sexualQuirk = "none"; + slave.behavioralFlaw = "none"; + slave.behavioralQuirk = "none"; + }); + } + + if (slave.fetish !== "none" && slave.fetish !== "mindbroken") { + options.addOption("Fetish strength", "fetishStrength", slave) + .addRange(15, 30, "<=", "Very Low") + .addRange(45, 60, "<=", "Low") + .addRange(75, 85, "<=", "Normal") + .addRange(90, 95, "<=", "High") + .addRange(100, 95, ">", "Extremely High"); + } + } + + options.addOption("Sexuality", "attrKnown", slave) + .addValue("Known", 1, () => { + slave.attrXX = random(0, 100); + slave.attrXY = random(0, 100); + slave.energy = random(1, 90); + }).on() + .addValue("Unknown", 0).off(); + if (slave.attrKnown === 1) { + options.addOption("Attraction to men", "attrXY", slave) + .addRange(0, 5, "<=", "Disgusted").off() + .addRange(10, 15, "<=", "Turned off").off() + .addRange(25, 35, "<=", "Not attracted").off() + .addRange(50, 65, "<=", "Indifferent").neutral() + .addRange(75, 85, "<=", "Attracted").on() + .addRange(90, 95, "<=", "Aroused").on() + .addRange(100, 95, ">", "Passionate").on(); + options.addOption("Attraction to women", "attrXX", slave) + .addRange(0, 5, "<=", "Disgusted").off() + .addRange(10, 15, "<=", "Turned off").off() + .addRange(25, 35, "<=", "Not attracted").off() + .addRange(50, 65, "<=", "Indifferent").neutral() + .addRange(75, 85, "<=", "Attracted").on() + .addRange(90, 95, "<=", "Aroused").on() + .addRange(100, 95, ">", "Passionate").on(); + + options.addOption("Sex drive", "energy", slave) + .addRange(5, 10, "<=", "Frigid").off() + .addRange(25, 40, "<=", "Poor").off() + .addRange(45, 60, "<=", "Average").neutral() + .addRange(65, 80, "<=", "Powerful").on() + .addRange(85, 99, "<=", "Sex addict").on() + .addRange(100, 99, ">", "Nympho").on(); + } + + if (slave.fetish !== "mindbroken") { + options.addOption("Behavioral Flaw", "behavioralFlaw", slave) + .addValueList([["None", "none"], ["Arrogant", "arrogant"], ["Bitchy", "bitchy"], ["Odd", "odd"], ["Hates Men", "hates men"], + ["Hates Women", "hates women"], ["Anorexic", "anorexic"], ["Gluttonous", "gluttonous"], ["Devout", "devout"], + ["Liberated", "liberated"]]); + + options.addOption("Behavioral Quirk", "behavioralQuirk", slave) + .addValueList([["None", "none"], ["Confident", "confident"], ["Cutting", "cutting"], ["Funny", "funny"], + ["Adores Men", "adores men"], ["Adores Women", "adores women"], ["Insecure", "insecure"], ["Fitness", "fitness"], + ["Sinful", "sinful"], ["Advocate", "advocate"]]); + + options.addOption("Sexual Flaw", "sexualFlaw", slave) + .addValueList([["None", "none"], ["Hates Oral", "hates oral"], ["Hates Anal", "hates anal"], + ["Hates Penetration", "hates penetration"], ["Repressed", "repressed"], ["Shamefast", "shamefast"], ["Apathetic", "apathetic"], + ["Crude", "crude"], ["Judgemental", "judgemental"], ["Sexually idealistic", "idealistic"]]); + + options.addOption("Sexual Quirk", "sexualQuirk", slave) + .addValueList([["None", "none"], ["Oral", "gagfuck queen"], ["Anal", "painal queen"], ["Penetration", "strugglefuck queen"], + ["Perverted", "perverted"], ["Tease", "tease"], ["Caring", "caring"], ["Unflinching", "unflinching"], ["Size queen", "size queen"], + ["Romantic", "romantic"]]); + } + + el.append(options.render()); + + return el; +}; diff --git a/src/npc/startingGirls/startingGirls.tw b/src/npc/startingGirls/startingGirls.tw index eb8a930e046c3575c14da7388c7e367ae4a7892d..6dc4e30a17bbc6c267dfbcebb163fd38ab8faefa 100644 --- a/src/npc/startingGirls/startingGirls.tw +++ b/src/npc/startingGirls/startingGirls.tw @@ -200,14 +200,13 @@ <h2>You are customizing this slave:</h2> <<includeDOM App.Desc.longSlave(V.activeSlave, {market: "generic"})>> <div class="tab-bar"> - <button class="tab-links" onclick="App.UI.tabBar.openTab(event, 'Overview')" id="tab Overview">Overview</button> + <button class="tab-links" onclick="App.UI.tabBar.openTab(event, 'profile')" id="tab profile">Profile</button> <button class="tab-links" onclick="App.UI.tabBar.openTab(event, 'Physical')" id="tab Physical">Physical</button> <button class="tab-links" onclick="App.UI.tabBar.openTab(event, 'Mental')" id="tab Mental">Mental</button> <button class="tab-links" onclick="App.UI.tabBar.openTab(event, 'Skills')" id="tab Skills">Skills</button> <button class="tab-links" onclick="App.UI.tabBar.openTab(event, 'Family', App.StartingGirls.uncommittedFamilyTree(V.activeSlave))" id="tab Family">Family</button> <button class="tab-links" onclick="App.UI.tabBar.openTab(event, 'body-mods')" id="tab body-mods">Body Mods</button> <button class="tab-links" onclick="App.UI.tabBar.openTab(event, 'salon')" id="tab salon">Salon</button> - <button class="tab-links" onclick="App.UI.tabBar.openTab(event, 'Customization')" id="tab Customization">Customization</button> <<if $cash >= _slaveCost>> <button class="tab-links" onclick="App.UI.tabBar.openTab(event, 'assignRemove')" id="tab assignRemove">Finalize</button> <<else>> @@ -217,627 +216,21 @@ <<run App.Utils.setLocalPronouns($activeSlave)>> -<div id="Overview" class="tab-content"> +<div id="profile" class="tab-content"> <div class="content"> - - <<set _options = new App.UI.OptionsGroup()>> - - <<set _option = _options.addOption("Devotion", "devotion", $activeSlave).showTextBox() - .addRange(-100, -95, "<", "Utterly hateful") - .addRange(-70, -50, "<", "Hateful") - .addRange(-35, -20, "<", "Resistant") - .addRange(0, 20, "<", "Ambivalent") - .addRange(35, 50, "<", "Accepting") - .addRange(70, 95, "<", "Devoted") - .addRange(100, 95, ">=", "Worshipful")>> - <<if $activeSlave.devotion > 20>> - <<set _comment = "Starting slaves incur">> - <<if $activeSlave.devotion > 50>> - <<run _comment += " severe cost penalty at very high">> - <<else>> - <<run _comment += " an additional cost penalty at high">> - <</if>> - <<run _comment += " levels of devotion. This slave's">> - <<if $activeSlave.actualAge >= 25>> - <<if $activeSlave.actualAge > 35>>advanced <</if>> - <<run _comment += " age decreases the penalty.">> - <<else>> - <<run _comment += " young age requires paying the full penalty.">> - <</if>> - <<run _option.addComment(`<span class=warning>${_comment}</span>`)>> - <</if>> - - <<run _options.addOption("Trust", "trust", $activeSlave).showTextBox() - .addRange(-100, -95, "<", "Abjectly terrified") - .addRange(-70, -50, "<", "Terrified") - .addRange(-35, -20, "<", "Frightened") - .addRange(0, 20, "<", "Fearful") - .addRange(35, 50, "<", "Careful") - .addRange(70, 95, "<", "Trusting") - .addRange(100, 95, ">=", "Absolute trust")>> - - <<run _options.addOption("Legal status", "indenture", $activeSlave) - .addValue("Slave", -1, () => V.activeSlave.indentureRestrictions = 0) - .addRange(52, 0, ">=", "Indentured Servant")>> - <<if $activeSlave.indenture > -1>> - <<run _options.addOption("Remaining weeks", "indenture", $activeSlave).showTextBox()>> - - <<run _options.addOption("Indenture restrictions", "indentureRestrictions", $activeSlave) - .addValueList([["None", 0], ["Protective", 1], ["Restrictive", 2]])>> - <</if>> - - <<run _options.addOption("Age", "actualAge", $activeSlave).showTextBox() - .customButton("Resync characteristics to age", () => resyncSlaveToAge(V.activeSlave)) - .customButton("Resync only height to age", () => V.activeSlave.height = Height.random(V.activeSlave)) - .addComment("It is recommended to resync if you change age significantly")>> - - <<run _options.addOption("Birth week", "birthWeek", $activeSlave).showTextBox()>> - - <<run _options.addOption("Genes", "genes", $activeSlave) - .addValue("XX (Female)", "XX", () => { - V.activeSlave.dick = 0; - V.activeSlave.balls = 0; - V.activeSlave.clit = 0; - V.activeSlave.pubertyXY = 0; - V.activeSlave.pubertyAgeXY = V.potencyAge; - V.activeSlave.pubertyXX = (V.activeSlave.pubertyAgeXX < V.activeSlave.actualAge ? 1 : 0); - V.activeSlave.vagina = Math.max(0, V.activeSlave.vagina); - V.activeSlave.boobs = Math.max(500, V.activeSlave.boobs); - V.activeSlave.balls = 0; - V.activeSlave.scrotum = 0; - V.activeSlave.prostate = 0; - V.activeSlave.shoulders = either(-2,-1,0); - V.activeSlave.hips = either(-2,-1,0); - }).addValue("XY (Male)", "XY", () => { - V.activeSlave.dick = 3; - V.activeSlave.vagina = -1; - WombFlush(V.activeSlave); - V.activeSlave.belly = 0; - V.activeSlave.bellyPreg = 0; - V.activeSlave.pubertyXY = (V.activeSlave.pubertyAgeXY < V.activeSlave.actualAge ? 1 : 0); - V.activeSlave.pubertyXX = 0; - V.activeSlave.pubertyAgeXX = V.fertilityAge; - V.activeSlave.ovaries = 0; - V.activeSlave.boobs = 0; - V.activeSlave.balls = 3; - V.activeSlave.scrotum = 3; - V.activeSlave.prostate = 1; - V.activeSlave.shoulders = either(0,1,2); - V.activeSlave.hips = either(0,1,2); - })>> - - <<run _options.addOption("Condition", "condition", $activeSlave.health) - .addValueList([["Unhealthy", -40], ["Healthy", 0], ["Very healthy", 40], ["Extremely healthy", 80]])>> - - <<set _option = _options.addOption("Prestige", "prestige", $activeSlave) - .addValueList([["None", 0], ["Locally known", 1], ["Regionally famous", 2], ["World renowned", 3]])>> - <<if $activeSlave.prestige > 0>> - <<set _comment = "Starting slaves incur an extreme cost penalty for prestige. This slave's">> - <<if $activeSlave.actualAge >= 25>> - <<if $activeSlave.actualAge > 35>> - <<set _comment += " advanced">> - <</if>> - <<set _comment += " age decreases the penalty.">> - <<else>> - <<set _comment += " young age requires paying the full penalty.">> - <</if>> - <<run _option.addComment(`<span class=warning>${_comment}</span>`)>> - <</if>> - - <<run _options.addOption("$His nationality is", "nationality", $activeSlave).showTextBox() - .addValueList(Object.keys(App.Data.SlaveSummary.short.nationality)) - .pulldown() - >> - - <<if $seeRace == 1>> - <<run _options.addOption("$His ethnicity is", "race", $activeSlave).showTextBox() - .addValueList([["White", "white"], ["Asian", "asian"], ["Latina", "latina"], ["Middle Eastern", "middle eastern"], - ["Black", "black"], ["Semitic", "semitic"], ["Southern European", "southern european"], ["Indo-Aryan", "indo-aryan"], - ["Amerindian", "amerindian"], ["Pacific Islander", "pacific islander"], ["Malay", "malay"], ["Mixed Race", "mixed race"]])>> - <</if>> - - <<run _options.addOption("Intelligence", "intelligence", $activeSlave) - .addValueList([["Moronic", -100], ["Very stupid", -60], ["Stupid", -30], ["Average", 0], ["Smart", 30], ["Very smart", 60], ["Brilliant", 100]])>> - - <<run _options.addOption("Education", "intelligenceImplant", $activeSlave) - .addValueList([["Uneducated", 0], ["Educated", 15], ["Well educated", 30]])>> - - <<includeDOM _options.render()>> + <<includeDOM App.StartingGirls.profile($activeSlave)>> </div> </div> <div id="Physical" class="tab-content"> <div class="content"> - - <<set _options = new App.UI.OptionsGroup()>> - - <<run _options.addOption(`Height: ${heightToEitherUnit($activeSlave.height)}`, "height", $activeSlave).showTextBox("cm") - .addRange(145, 150, "<", "Petite") - .addRange(155, 160, "<", "Short") - .addRange(165, 170, "<", "Average") - .addRange(180, 185, "<", "Tall") - .addRange(190, 185, ">=", "Very tall")>> - <<set _option = _options.addOption(`Average height for a ${$activeSlave.actualAge} year old """is ${heightToEitherUnit(Math.round(Height.mean(V.activeSlave)))}"""`) - .customButton("Make average", () => resyncSlaveHight($activeSlave))>> - <<if $cheatMode === 1>> - <<run _option.customButton("Make dwarf", () => V.activeSlave.height = Height.random(V.activeSlave, {limitMult: [-4, -1], spread: 0.15})) - .customButton("Make giant", () => V.activeSlave.height = Height.random(V.activeSlave, {limitMult: [3, 10], spread: 0.15}))>> - <</if>> - - <<run _options.addOption("Weight", "weight", $activeSlave) - .addRange(-100, -95, "<", "Emaciated") - .addRange(-50, -30, "<", "Skinny") - .addRange(-20, -10, "<", "Thin") - .addRange(0, 10, "<", "Average") - .addRange(20, 30, "<", "Plush") - .addRange(50, 95, "<", "Chubby") - .addRange(100, 130, "<", "Fat") - .addRange(140, 160, "<", "Obese") - .addRange(180, 190, "<", "Super obese") - .addRange(200, 190, ">=", "Dangerously obese")>> - - <<run _options.addOption("Muscles", "muscles", $activeSlave) - .addRange(-100, -96, "<", "Frail") - .addRange(-66, -51, "<", "Very weak") - .addRange(-41, -6, "<", "Weak") - .addRange(0, 5, "<", "Normal") - .addRange(20, 30, "<", "Toned") - .addRange(40, 50, "<", "Well built") - .addRange(65, 95, "<", "Quite muscular") - .addRange(100, 95, ">=", "Ripped")>> - - <<run _options.addOption("Waist", "waist", $activeSlave) - .addRange(-100, -95, "<", " Absurd") - .addRange(-55, -40, "<", "Hourglass") - .addRange(-25, -15, "<", "Feminine") - .addRange(0, 10, "<", "Average") - .addRange(15, 40, "<", "Unattractive") - .addRange(55, 95, "<", "Ugly") - .addRange(100, 10, ">=", "Masculine")>> - - <<set _option = _options.addOption("Facial appearance", "faceShape", $activeSlave) - .addValue("Normal", "normal")>> - <<if $seeDicks !== 0>> - <<run _option.addValue("Masculine", "masculine")>> - <</if>> - <<run _option.addValueList([["Androgynous", "androgynous"], ["Cute", "cute"], ["Sensual", "sensual"], ["Exotic", "exotic"]])>> - - <<run _options.addOption("Facial attractiveness", "face", $activeSlave) - .addRange(-100, -95, "<", "Very ugly") - .addRange(-55, -40, "<", "Ugly") - .addRange(-15, -10, "<", "Unattractive") - .addRange(0, 10, "<", "Average") - .addRange(15, 40, "<", "Attractive") - .addRange(55, 95, "<", "Beautiful") - .addRange(100, 95, ">=", "Very beautiful")>> - - <<set _option = _options.addOption("Lips", "lips", $activeSlave) - .addRange(5, 10, "<", "Thin") - .addRange(15, 20, "<", "Normal") - .addRange(25, 40, "<", "Pretty") - .addRange(55, 70, "<", "Plush")>> - <<if $seeExtreme == 1>> - <<run _option.addRange(85, 95, "<", "Huge") - .addRange(100, 95, ">=", "Facepussy")>> - <<else>> - <<run _option.addRange(85, 70, ">=", "Huge")>> - <</if>> - - <<run _options.addOption("Voice", "voice", $activeSlave) - .addValueList([["Mute", 0], ["Deep", 1], ["Normal", 2], ["High", 3]])>> - - <<if $activeSlave.voice !== 0>> - <<run _options.addOption("$language", "accent", $activeSlave) - .addValueList([["Unaccented", 0], [`Pretty ${aNational($activeSlave.nationality)} accent`, 1], - [`Thick ${aNational($activeSlave.nationality)} accent`, 2], ["Not fluent", 3]])>> - <</if>> - - <<set _option = _options.addOption("Teeth", "teeth", $activeSlave) - .addValueList([["Crooked", "crooked"], ["Gapped", "gapped"], ["Braces", "straightening braces"]])>> - <<if $activeSlave.physicalAge >= 12>> - <<if $activeSlave.teeth == "baby" || $activeSlave.teeth == "mixed">> - <<set $activeSlave.teeth = "normal">> - <</if>> - <<run _option.addValue("Straight", "normal")>> - <<elseif $activeSlave.physicalAge >= 6>> - <<if $activeSlave.teeth == "baby" || $activeSlave.teeth == "normal" || $activeSlave.teeth == "">> - <<set $activeSlave.teeth = "mixed">> - <</if>> - <<run _option.addValue("Mixed adult & child", "mixed")>> - <<else>> - <<if $activeSlave.teeth == "mixed" || $activeSlave.teeth == "normal" || $activeSlave.teeth == "">> - <<set $activeSlave.teeth = "mixed">> - <</if>> - <<run _option.addValue("Baby", "baby")>> - <</if>> - - <<run _options.addOption("Breasts", "boobs", $activeSlave).showTextBox("CCs") - .addRange(200, 200, "<=", "Flat (AA-cup)") - .addRange(300, 300, "<=", "Small (A-cup)") - .addRange(400, 400, "<=", "Medium (B-cup)") - .addRange(500, 500, "<=", "Healthy (C-cup)") - .addRange(800, 800, "<=", "Large (DD-cup)") - .addRange(1200, 1200, "<=", "Very Large (G-cup)") - .addRange(2050, 2050, "<=", "Huge (K-cup)") - .addRange(3950, 3950, "<=", "Massive (Q-cup)") - .addRange(6000, 6000, "<=", "Monstrous") - .addRange(8000, 6000, ">", "Science Experiment")>> - - <<run _options.addOption("Natural shape", "boobShape", $activeSlave) - .addValueList([ - ["Normal", "normal"], - ["Perky", "perky"], - ["Torpedo-shaped", "torpedo-shaped"], - ["Wide-set", "wide-set"], - ["Downward-facing", "downward-facing"], - ["Saggy", "saggy"] - ])>> - - <<run _options.addOption("Lactation", "lactation", $activeSlave) - .addValue("Artificial", 2, () => V.activeSlave.lactationDuration = 2) - .addValue("Natural", 1, () => V.activeSlave.lactationDuration = 2) - .addValue("None", 0)>> - - <<run _options.addOption("Nipples", "nipples", $activeSlave) - .addValueList([["Tiny", "tiny"], ["Cute", "cute"], ["Puffy", "puffy"], ["Partially Inverted", "partially inverted"], ["Inverted", "inverted"], ["Huge", "huge"]])>> - - <<run _options.addOption("Areolae", "areolae", $activeSlave) - .addValueList([["Normal", 0], ["Large", 1], ["Wide", 2], ["Huge", 3], ["Massive", 4]])>> - - <<run _options.addOption("Shoulders", "shoulders", $activeSlave) - .addValueList([["Very narrow", -2], ["Narrow", -1], ["Feminine", 0], ["Broad", 1], ["Very broad", 2]])>> - - <<run _options.addOption("Hips", "hips", $activeSlave) - .addValueList([["Very narrow", -2], ["Narrow", -1], ["Normal", 0], ["Broad", 1], ["Very broad", 2]])>> - - <<run _options.addOption("Butt", "butt", $activeSlave) - .addValueList([["Flat", 0], ["Small", 1], ["Plump", 2], ["Big", 3], ["Huge", 4], ["Enormous", 5], ["Gigantic", 6], ["Massive", 7]])>> - - <<run _options.addOption("Anus", "anus", $activeSlave) - .addValueList([["Virgin", 0], ["Normal", 1], ["Veteran", 2], ["Gaping", 3]])>> - - <<if $activeSlave.anus > 0>> - <<if $activeSlave.analArea <= $activeSlave.anus>> - <<set _comment = "Recently stretched to current size.">>" - <<elseif $activeSlave.analArea - $activeSlave.anus == 1>> - <<set _comment = "Used to current size."">> - <<else>> - <<set _comment = "Very broad."">> - <</if>> - <<run _options.addOption("External anus appearance", "anus", $activeSlave) - .addValueList([ - ["Recently stretched", $activeSlave.analArea = $activeSlave.anus], - ["Used to current size", $activeSlave.analArea = $activeSlave.anus+1], - ["Very broad", $activeSlave.analArea = $activeSlave.anus+2], - ]).addComment(_comment)>> - <</if>> - - <<run _options.addOption("Vagina", "vagina", $activeSlave) - .addValue("No vagina", -1, () => { - V.activeSlave.preg = 0; - WombFlush(V.activeSlave); - V.activeSlave.belly = 0; - V.activeSlave.bellyPreg = 0; - V.activeSlave.pubertyXX = 0; - V.activeSlave.pubertyAgeXX = V.fertilityAge; - V.activeSlave.ovaries = 0; - }).addValue("Virgin", 0, () => { - V.activeSlave.preg = -1; - V.activeSlave.belly = 0; - V.activeSlave.bellyPreg = 0; - V.activeSlave.ovaries = 1 - }).addValue("Normal", 1, () => { - V.activeSlave.preg = -1; - V.activeSlave.belly = 0; - V.activeSlave.bellyPreg = 0; - V.activeSlave.ovaries = 1 - }).addValue("Veteran", 2, () => { - V.activeSlave.preg = -1; - V.activeSlave.belly = 0; - V.activeSlave.bellyPreg = 0; - V.activeSlave.ovaries = 1 - }).addValue("Gaping", 3, () => { - V.activeSlave.preg = -1; - V.activeSlave.belly = 0; - V.activeSlave.bellyPreg = 0; - V.activeSlave.ovaries = 1 - })>> - - <<if $activeSlave.vagina > -1>> - <<if $activeSlave.dick === 0>> - <<run _options.addOption("Clit", "clit", $activeSlave) - .addValueList([["Normal", 0], ["Large", 1], ["Huge", 2]])>> - <</if>> - - <<run _options.addOption("Labia", "labia", $activeSlave) - .addValueList([["Normal", 0], ["Large", 1], ["Huge", 2], ["Huge Dangling", 3]])>> - - <<run _options.addOption("Vaginal wetness", "vaginaLube", $activeSlave) - .addValueList([["Dry", 0], ["Normal", 1], ["Excessive", 2]])>> - - <<if $seePreg !== 0>> - /* This is only shown if slave has vagina */ - <<run _options.addOption("Puberty", "pubertyXX", $activeSlave) - .addValue("Prepubescent", 0, () => { - V.activeSlave.pubertyAgeXX = V.fertilityAge; - V.activeSlave.belly = 0; - V.activeSlave.bellyPreg = 0; - WombFlush(V.activeSlave) - }).addValue("Postpubescent", 1)>> - - <<run _options.addOption("Age of puberty", "pubertyAgeXX", $activeSlave).showTextBox()>> - - <<if $activeSlave.pubertyXX === 1>> - <<set _option = _options.addOption("Pregnancy", "preg", $activeSlave)>> - <<if $seeHyperPreg === 1 && $cheatMode === 1>> - <<run _option.addValue("Bursting at the seams", 43, () => { - V.activeSlave.pregType = 150; - V.activeSlave.pregWeek = 43; - V.activeSlave.pregKnown = 1; - V.activeSlave.belly = 2700000; - V.activeSlave.bellyPreg = 2700000; - V.activeSlave.pubertyXX = 1; - })>> - <<if $activeSlave.preg === 43>> - <<run _option.addComment("Extreme hyper pregnancy!")>> - <</if>> - <</if>> - <<run _option.addValue("Completely Filled", 42, () => { - V.activeSlave.pregType = 8; - V.activeSlave.pregWeek = 42; - V.activeSlave.pregKnown = 1; - V.activeSlave.belly = 120000; - V.activeSlave.bellyPreg = 120000; - V.activeSlave.pubertyXX = 1; - }).addValue("Ready to drop", 40, () => { - V.activeSlave.pregType = 1; - V.activeSlave.pregWeek = 40; - V.activeSlave.pregKnown = 1; - V.activeSlave.belly = 15000; - V.activeSlave.bellyPreg = 15000; - V.activeSlave.pubertyXX = 1; - }).addValue("Advanced", 34, () => { - V.activeSlave.pregType = 1; - V.activeSlave.pregWeek = 34; - V.activeSlave.pregKnown = 1; - V.activeSlave.belly = 10000; - V.activeSlave.bellyPreg = 10000; - V.activeSlave.pubertyXX = 1; - }).addValue("Showing", 27, () => { - V.activeSlave.pregType = 1; - V.activeSlave.pregWeek = 27; - V.activeSlave.pregKnown = 1; - V.activeSlave.belly = 5000; - V.activeSlave.bellyPreg = 5000; - V.activeSlave.pubertyXX = 1; - }).addValue("Early", 12, () => { - V.activeSlave.pregType = 1; - V.activeSlave.pregWeek = 12; - V.activeSlave.pregKnown = 1; - V.activeSlave.belly = 100; - V.activeSlave.bellyPreg = 100; - V.activeSlave.pubertyXX = 1; - }).addValue("None", 0, () => { - V.activeSlave.pregType = 0; - V.activeSlave.belly = 0; - V.activeSlave.bellyPreg = 0; - V.activeSlave.pregSource = 0; - V.activeSlave.pregWeek = 0; - V.activeSlave.pregKnown = 0; - }).addValue("Contraceptives", -1, () => { - V.activeSlave.pregType = 0; - V.activeSlave.belly = 0; - V.activeSlave.bellyPreg = 0; - V.activeSlave.pregSource = 0; - V.activeSlave.pregWeek = 0; - V.activeSlave.pregKnown = 0; - }).addValue("Barren", -2, () => { - V.activeSlave.pregType = 0; - V.activeSlave.belly = 0; - V.activeSlave.bellyPreg = 0; - V.activeSlave.pregSource = 0; - V.activeSlave.pregWeek = 0; - V.activeSlave.pregKnown = 0; - })>> - <</if>> - - <<if $PC.dick > 0 && $activeSlave.preg > 0>> - <<run _options.addOption("Father of child", "pregSource", $activeSlave) - .addValueList([["My child", -1], ["Not me", 0]])>> - <</if>> - <</if>> - <</if>> - - <<if $seeDicks !== 0 || $makeDicks === 1>> - <<run _options.addOption("Penis", "dick", $activeSlave) - .addValue("None", 0, () => { - V.activeSlave.balls = 0; - V.activeSlave.pubertyXY = 0; - V.activeSlave.pubertyAgeXY = V.potencyAge; - }).addValue("Tiny", 1, () => {V.activeSlave.clit = 0}) - .addValue("Small", 2, () => {V.activeSlave.clit = 0}) - .addValue("Normal", 3, () => {V.activeSlave.clit = 0}) - .addValue("Large", 4, () => {V.activeSlave.clit = 0}) - .addValue("Massive", 5, () => {V.activeSlave.clit = 0})>> - - <<if $activeSlave.dick > 0>> - <<set _option = _options.addOption("Foreskin", "foreskin", $activeSlave)>> - <<if $seeCircumcision === 1>> - <<run _option.addValue("Circumcised", 0)>> - <<elseif $activeSlave.foreskin === 0>> - <<set $activeSlave.foreskin = 3>> - <</if>> - <<run _option.addValueList([["Tiny", 1], ["Small", 2], ["Normal", 3], ["Large", 4], ["Massive", 5]])>> - <</if>> - - <<run _options.addOption("Testicles", "balls", $activeSlave) - .addValue("None", 0, () => { - V.activeSlave.pubertyXY = 0; - V.activeSlave.pubertyAgeXY = V.potencyAge; - V.activeSlave.scrotum = 0; - }).addValueList([["Vestigial", 1], ["Small", 2], ["Normal", 3], ["Large", 4], ["Massive", 5]])>> - - <<run _options.addOption("Age of Male Puberty", "pubertyAgeXY", $activeSlave).showTextBox()>> - - <<if $activeSlave.balls > 0>> - <<run _options.addOption("Ballsack", "scrotum", $activeSlave) - .addValueList([["None", 0], ["Tiny", 1], ["Small", 2], ["Normal", 3], ["Large", 4], ["Massive", 5]])>> - - <<run _options.addOption("Male Puberty", "pubertyXY", $activeSlave) - .addValue("Prepubescent", 0, () => {V.activeSlave.pubertyAgeXY = V.potencyAge}) - .addValue("Postpubescent", 1)>> - <</if>> - <</if>> - - <<run _options.addOption("Prostate", "prostate", $activeSlave) - .addValueList([["No prostate", 0], ["Has a prostate", 1]])>> - - <<set _optionLeft = _options.addOption("Left eye", "vision", $activeSlave.eye.left)>> - <<set _optionRight = _options.addOption("Right eye", "vision", $activeSlave.eye.right)>> - <<run _optionLeft.addValueList([["Normal", 2], ["Nearsighted", 1]]), _optionRight.addValueList([["Normal", 2], ["Nearsighted", 1]])>> - <<if $seeExtreme === 1>> - <<run _optionLeft.addValue("Blind", 0), _optionRight.addValue("Blind", 0)>> - <<else>> - <<if $activeSlave.eye.left.vision === 0>> - <<set $activeSlave.eye.left.vision = 2>> - <</if>> - <<if $activeSlave.eye.right.vision === 0>> - <<set $activeSlave.eye.right.vision = 2>> - <</if>> - <</if>> - - <<set _option = _options.addOption("Hearing", "hears", $activeSlave)>> - <<run _option.addValueList([["Normal", 0], ["Hard of hearing", -1]])>> - <<if $seeExtreme == 1>> - <<run _option.addValue("Deaf", -2)>> - <<elseif $activeSlave.hears === 0>> - <<set $activeSlave.hears = 2>> - <</if>> - - - <<if $seeExtreme == 1>> - <<run _options.addOption("Smell ability", "smells", $activeSlave) - .addValueList([["Normal", 0], ["None", -1]])>> - - <<run _options.addOption("Taste ability", "tastes", $activeSlave) - .addValueList([["Normal", 0], ["None", -1]])>> - - <<set _LA = hasLeftArm($activeSlave)>> - <<run _options.addOption("Left arm", "LA", State.temporary) - .addValue("Healthy", true, () => V.activeSlave.arm.left = new App.Entity.LimbState()) - .addValue("Amputated", false, () => V.activeSlave.arm.left = null)>> - - <<set _RA = hasRightArm($activeSlave)>> - <<run _options.addOption("Right arm", "RA", State.temporary) - .addValue("Healthy", true, () => V.activeSlave.arm.right = new App.Entity.LimbState()) - .addValue("Amputated", false, () => V.activeSlave.arm.right = null)>> - - <<set _LL = hasLeftLeg($activeSlave)>> - <<run _options.addOption("Left leg", "LL", State.temporary) - .addValue("Healthy", true, () => V.activeSlave.leg.left = new App.Entity.LimbState()) - .addValue("Amputated", false, () => V.activeSlave.leg.left = null)>> - - <<set _RL = hasRightLeg($activeSlave)>> - <<run _options.addOption("Right leg", "RL", State.temporary) - .addValue("Healthy", true, () => V.activeSlave.leg.right = new App.Entity.LimbState()) - .addValue("Amputated", false, () => V.activeSlave.leg.right = null)>> - <</if>> - - <<includeDOM _options.render()>> + <<includeDOM App.StartingGirls.physical($activeSlave)>> </div> </div> <div id="Mental" class="tab-content"> <div class="content"> - - <<set _options = new App.UI.OptionsGroup()>> - <<if $activeSlave.fetishKnown === 0>> - <<run _options.addOption("Fetish", "fetishKnown", $activeSlave) - .addValueList([["Unknown", 0], ["Known", 1]])>> - <<else>> - <<set _option = _options.addOption("Fetish", "fetish", $activeSlave) - .addValue("Unknown", "", () => { - V.activeSlave.fetish = either("boobs", "buttslut", "cumslut", "dom", "humiliation", "masochist", "pregnancy", "sadist", - "submissive", "none", "none", "none", "none", "none", "none", "none", "none", "none", "none"); - V.activeSlave.fetishKnown = 0 - }).addValueList([["None", "none"], ["Sub", "submissive"], ["Dom", "dom"], ["Cumslut", "cumslut"], ["Humiliation", "humiliation"], - ["Buttslut", "buttslut"], ["Breasts", "boobs"], ["Pregnancy", "pregnancy"], ["Sadism", "sadist"], ["Masochism", "masochist"]])>> - <<if $seeExtreme === 1>> - <<run _option.addValue("Mindbroken", "mindbroken", () => { - V.activeSlave.fetishStrength = 10; - V.activeSlave.sexualFlaw = "none"; - V.activeSlave.sexualQuirk = "none"; - V.activeSlave.behavioralFlaw = "none"; - V.activeSlave.behavioralQuirk = "none"; - })>> - <</if>> - - <<if $activeSlave.fetish !== "none" && $activeSlave.fetish !== "mindbroken">> - <<run _options.addOption("Fetish strength", "fetishStrength", $activeSlave) - .addRange(15, 30, "<=", "Very Low") - .addRange(45, 60, "<=", "Low") - .addRange(75, 85, "<=", "Normal") - .addRange(90, 95, "<=", "High") - .addRange(100, 95, ">", "Extremely High")>> - <</if>> - <</if>> - - <<run _options.addOption("Sexuality", "attrKnown", $activeSlave) - .addValue("Unknown", 0).addValue("Known", 1, () => { - V.activeSlave.attrXX = random(0, 100); - V.activeSlave.attrXY = random(0, 100); - V.activeSlave.energy = random(1, 90); - })>> - <<if $activeSlave.attrKnown === 1>> - <<run _options.addOption("Attraction to men", "attrXY", $activeSlave) - .addRange(0, 5, "<=", "Disgusted").off() - .addRange(10, 15, "<=", "Turned off").off() - .addRange(25, 35, "<=", "Not attracted").off() - .addRange(50, 65, "<=", "Indifferent").neutral() - .addRange(75, 85, "<=", "Attracted").on() - .addRange(90, 95, "<=", "Aroused").on() - .addRange(100, 95, ">", "Passionate").on()>> - <<run _options.addOption("Attraction to women", "attrXX", $activeSlave) - .addRange(0, 5, "<=", "Disgusted").off() - .addRange(10, 15, "<=", "Turned off").off() - .addRange(25, 35, "<=", "Not attracted").off() - .addRange(50, 65, "<=", "Indifferent").neutral() - .addRange(75, 85, "<=", "Attracted").on() - .addRange(90, 95, "<=", "Aroused").on() - .addRange(100, 95, ">", "Passionate").on()>> - - <<run _options.addOption("Sex drive", "energy", $activeSlave) - .addRange(5, 10, "<=", "Frigid").off() - .addRange(25, 40, "<=", "Poor").off() - .addRange(45, 60, "<=", "Average").neutral() - .addRange(65, 80, "<=", "Powerful").on() - .addRange(85, 99, "<=", "Sex addict").on() - .addRange(100, 99, ">", "Nympho").on()>> - <</if>> - - <<if $activeSlave.fetish !== "mindbroken">> - <<run _options.addOption("Behavioral Flaw", "behavioralFlaw", $activeSlave) - .addValueList([["None", "none"], ["Arrogant", "arrogant"], ["Bitchy", "bitchy"], ["Odd", "odd"], ["Hates Men", "hates men"], - ["Hates Women", "hates women"], ["Anorexic", "anorexic"], ["Gluttonous", "gluttonous"], ["Devout", "devout"], - ["Liberated", "liberated"]])>> - - <<run _options.addOption("Behavioral Quirk", "behavioralQuirk", $activeSlave) - .addValueList([["None", "none"], ["Confident", "confident"], ["Cutting", "cutting"], ["Funny", "funny"], - ["Adores Men", "adores men"], ["Adores Women", "adores women"], ["Insecure", "insecure"], ["Fitness", "fitness"], - ["Sinful", "sinful"], ["Advocate", "advocate"]])>> - - <<run _options.addOption("Sexual Flaw", "sexualFlaw", $activeSlave) - .addValueList([["None", "none"], ["Hates Oral", "hates oral"], ["Hates Anal", "hates anal"], - ["Hates Penetration", "hates penetration"], ["Repressed", "repressed"], ["Shamefast", "shamefast"], ["Apathetic", "apathetic"], - ["Crude", "crude"], ["Judgemental", "judgemental"], ["Sexually idealistic", "idealistic"]])>> - - <<run _options.addOption("Sexual Quirk", "sexualQuirk", $activeSlave) - .addValueList([["None", "none"], ["Oral", "gagfuck queen"], ["Anal", "painal queen"], ["Penetration", "strugglefuck queen"], - ["Perverted", "perverted"], ["Tease", "tease"], ["Caring", "caring"], ["Unflinching", "unflinching"], ["Size queen", "size queen"], - ["Romantic", "romantic"]])>> - <</if>> - - <<includeDOM _options.render()>> + <<includeDOM App.StartingGirls.mental($activeSlave)>> </div> </div> @@ -931,44 +324,6 @@ </div> </div> -<div id="Customization" class="tab-content"> - <div class="content"> - - ''Birth name:'' <<textbox "$activeSlave.birthName" $activeSlave.birthName "Starting Girls">> - | ''Slave name:'' <<textbox "$activeSlave.slaveName" $activeSlave.slaveName "Starting Girls">> - <br>''Birth surname:'' <<textbox "$activeSlave.birthSurname" $activeSlave.birthSurname "Starting Girls">> - | ''Slave surname:'' <<textbox "$activeSlave.slaveSurname" $activeSlave.slaveSurname "Starting Girls">> - <br>''Career:'' <span id="career-textbox"><<textbox "$activeSlave.career" $activeSlave.career "Starting Girls">></span> - <span id="careers"></span> - <script>jQuery('#careers').empty().append(App.StartingGirls.career(V.activeSlave));</script> - <br>''Eye color:'' <<textbox "$activeSlave.eye.origColor" $activeSlave.eye.origColor "Starting Girls">> - <<if def $pupil_temp>> - <<set $activeSlave.eye.left.pupil = $pupil_temp, $activeSlave.eye.right.pupil = $pupil_temp, delete $pupil_temp>> - <</if>> - <br>''Pupil shape:'' <<textbox "$pupil_temp" $activeSlave.eye.left.pupil "Starting Girls">> - <<if def $sclerae_temp>> - <<set $activeSlave.eye.left.sclera = $sclerae_temp, $activeSlave.eye.right.sclera = $sclerae_temp, delete $sclerae_temp>> - <</if>> - <br>''Sclera color:'' <<textbox "$sclerae_temp" $activeSlave.eye.left.sclera "Starting Girls">> - <br>Custom origin story: <<textbox "$activeSlave.origin" $activeSlave.origin "Starting Girls">> //Use complete, capitalized and punctuated sentences.// - <br>Origin override: - <<if $originOverride == 1>> - @@.green;Enabled@@ [[Disable|Starting Girls][$originOverride = 0]] //Disabling will allow Starting Girls to overwrite origins and tattoos with its defaults.// - <<else>> - @@.red;Disabled@@ [[Enable|Starting Girls][$originOverride = 1]] //Enabling will keep your custom origin and tattoo from being overwritten by Starting Girls.// - <</if>> - <<if $activeSlave.prestige>> - <br>Reason for prestigiousness: <<textbox "$activeSlave.prestigeDesc" $activeSlave.prestigeDesc>> //Use complete, capitalized and punctuated sentences.// - <</if>> - <br>Custom description: <<textbox "$activeSlave.custom.desc" $activeSlave.custom.desc "Starting Girls">> //Use complete, capitalized and punctuated sentences.// - <br>Custom label: <<textbox "$activeSlave.custom.label" $activeSlave.custom.label "Starting Girls">> //Use a short phrase.// - - <br><br> - ''Births:'' <<textbox "$activeSlave.counter.birthsTotal" $activeSlave.counter.birthsTotal "Starting Girls">> //How many times $he has already given birth, not necessarily while owned by you.// - - </div> -</div> - <div id="assignRemove" class="tab-content"> <div class="content"> diff --git a/src/uncategorized/cellblock.tw b/src/uncategorized/cellblock.tw index c8735ddd82a94eb262982cba29d46967f42d5abf..beb66b4c19905612ab1a1c5893c55c4d94071b1c 100644 --- a/src/uncategorized/cellblock.tw +++ b/src/uncategorized/cellblock.tw @@ -88,7 +88,7 @@ <div> <<set _Tmult0 = Math.trunc($cellblock*1000*$upgradeMultiplierArcology)>> _cellblockNameCaps has room for $cellblock slaves to be kept in close confinement. - There <<if _CL == 1>>is<<else>>are<</if>> currently _CL slaves<<if _CL != 1>>s<</if>> kept in close confinement in $cellblockName. + There <<if _CL == 1>>is<<else>>are<</if>> currently _CL slave<<if _CL != 1>>s<</if>> kept in close confinement in $cellblockName. <div class="choices"> [[Expand the cellblock|Cellblock][cashX(forceNeg(_Tmult0), "capEx"), $cellblock += 5, $PC.skill.engineering += .1]] <span class="note">