diff --git a/slave variables documentation - Pregmod.txt b/slave variables documentation - Pregmod.txt index c51108d9c802290f6f89dbfa77e664869d615e67..b3648d37fc204c0d9dca9db6b76ac3daf9ef933b 100644 --- a/slave variables documentation - Pregmod.txt +++ b/slave variables documentation - Pregmod.txt @@ -1229,6 +1229,75 @@ is there an inner ear implant device 0 - no 1 - yes +earShape: + +the shape of their outer ears +"none" +"damaged" +"normal" +"pointy" +"elven" +"ushi" + +earT: + +type of kemonomimi ears if any +"neko" +"inu" +"kit" +"tanuki" + +earTColor: + +kemonomimi ear color +accepts hColor strings + +horn: + +horn type if any +"none" +"curved succubus horns" +"backswept horns" +"cow horns" +"one long oni horn" +"two long oni horns" +"small horns" + +hornColor: + +horn color +accepts string + +PTail: + +Does she have a tail interface installed +0: no +1: yes + +tail: + +type of tail installed +"none" +"mod" +"combat" +"sex" + +tailShape: + +the current shape of their modular tail +"none" +"neko" +"inu" +"kit" +"kitsune" +"tanuki" +"ushi" + +tailColor: + +tail color +accepts hColor strings + origHColor: slave's original hair color, defaults to their initial hair color. diff --git a/src/art/artJS.js b/src/art/artJS.js index fb8a7fce5d0208aa9650e3f5fab470af0b117565..c10c8016588836842b43f33a4ff15812afc682ee 100644 --- a/src/art/artJS.js +++ b/src/art/artJS.js @@ -1740,7 +1740,9 @@ window.VectorArt = (function (artSlave) { function VectorArt(artSlave) { /* set constants */ - V = State.variables, T = State.temporary, slave = artSlave; + V = State.variables; + T = State.temporary; + slave = artSlave; /* reset/initialize some variables */ T.artTransformBelly = ""; T.artTransformBoob = ""; @@ -2999,7 +3001,8 @@ window.VectorArt = (function (artSlave) { } function ArtVectorHead() { - let eyebrowFullness = clothing2artSuffix(slave.eyebrowFullness); /* designed for clothing but works for eyebrows too. If other eyebrow styles are added, this may need to be changed. */ + const eyebrowFullness = clothing2artSuffix(slave.eyebrowFullness); /* designed for clothing but works for eyebrows too. If other eyebrow styles are added, this may need to be changed. */ + const hasEyebrows = slave.eyebrowHStyle !== "bald" && slave.eyebrowHStyle !== "shaved"; r += jsInclude("Art_Vector_Head"); /* shiny clothing */ @@ -3029,32 +3032,38 @@ window.VectorArt = (function (artSlave) { r += jsInclude("Art_Vector_Eyes_TypeB"); r += jsInclude("Art_Vector_Mouth_TypeA"); r += jsInclude("Art_Vector_Nose_TypeA"); - r += jsInclude(`Art_Vector_Eyebrow_TypeA_${eyebrowFullness}`); + if (hasEyebrows === true) + r += jsInclude(`Art_Vector_Eyebrow_TypeA_${eyebrowFullness}`); } else if (slave.faceShape === "masculine") { r += jsInclude("Art_Vector_Eyes_TypeD"); r += jsInclude("Art_Vector_Mouth_TypeF"); r += jsInclude("Art_Vector_Nose_TypeF"); - r += jsInclude(`Art_Vector_Eyebrow_TypeE_${eyebrowFullness}`); + if (hasEyebrows === true) + r += jsInclude(`Art_Vector_Eyebrow_TypeE_${eyebrowFullness}`); } else if (slave.faceShape === "androgynous") { r += jsInclude("Art_Vector_Eyes_TypeE"); r += jsInclude("Art_Vector_Mouth_TypeE"); r += jsInclude("Art_Vector_Nose_TypeE"); - r += jsInclude(`Art_Vector_Eyebrow_TypeF_${eyebrowFullness}`); + if (hasEyebrows === true) + r += jsInclude(`Art_Vector_Eyebrow_TypeF_${eyebrowFullness}`); } else if (slave.faceShape === "cute") { r += jsInclude("Art_Vector_Eyes_TypeB"); r += jsInclude("Art_Vector_Mouth_TypeB"); r += jsInclude("Art_Vector_Nose_TypeD"); - r += jsInclude(`Art_Vector_Eyebrow_TypeA_${eyebrowFullness}`); + if (hasEyebrows === true) + r += jsInclude(`Art_Vector_Eyebrow_TypeA_${eyebrowFullness}`); } else if (slave.faceShape === "sensual") { r += jsInclude("Art_Vector_Eyes_TypeC"); r += jsInclude("Art_Vector_Mouth_TypeC"); r += jsInclude("Art_Vector_Nose_TypeC"); - r += jsInclude(`Art_Vector_Eyebrow_TypeC_${eyebrowFullness}`); + if (hasEyebrows === true) + r += jsInclude(`Art_Vector_Eyebrow_TypeC_${eyebrowFullness}`); } else if (slave.faceShape === "exotic") { r += jsInclude("Art_Vector_Eyes_TypeA"); r += jsInclude("Art_Vector_Mouth_TypeC"); r += jsInclude("Art_Vector_Nose_TypeC"); - r += jsInclude(`Art_Vector_Eyebrow_TypeC_${eyebrowFullness}`); + if (hasEyebrows === true) + r += jsInclude(`Art_Vector_Eyebrow_TypeC_${eyebrowFullness}`); } break; case "asian": @@ -3064,35 +3073,40 @@ window.VectorArt = (function (artSlave) { r += jsInclude("Art_Vector_Eyes_TypeA"); r += jsInclude("Art_Vector_Mouth_TypeC"); r += jsInclude("Art_Vector_Nose_TypeC"); - r += jsInclude(`Art_Vector_Eyebrow_TypeD_${eyebrowFullness}`); + if (hasEyebrows === true) + r += jsInclude(`Art_Vector_Eyebrow_TypeD_${eyebrowFullness}`); } else if (slave.faceShape === "masculine") { r += jsInclude("Art_Vector_Eyes_TypeD"); r += jsInclude("Art_Vector_Mouth_TypeD"); r += jsInclude("Art_Vector_Nose_TypeB"); - r += jsInclude(`Art_Vector_Eyebrow_TypeC_${eyebrowFullness}`); + if (hasEyebrows === true) + r += jsInclude(`Art_Vector_Eyebrow_TypeC_${eyebrowFullness}`); } else if (slave.faceShape === "androgynous") { r += jsInclude("Art_Vector_Eyes_TypeE"); r += jsInclude("Art_Vector_Mouth_TypeE"); r += jsInclude("Art_Vector_Nose_TypeA"); - r += jsInclude(`Art_Vector_Eyebrow_TypeC_${eyebrowFullness}`); + if (hasEyebrows === true) + r += jsInclude(`Art_Vector_Eyebrow_TypeC_${eyebrowFullness}`); } else if (slave.faceShape === "cute") { r += jsInclude("Art_Vector_Eyes_TypeC"); r += jsInclude("Art_Vector_Mouth_TypeC"); r += jsInclude("Art_Vector_Nose_TypeC"); - r += jsInclude(`Art_Vector_Eyebrow_TypeF_${eyebrowFullness}`); + if (hasEyebrows === true) + r += jsInclude(`Art_Vector_Eyebrow_TypeF_${eyebrowFullness}`); } else if (slave.faceShape === "sensual") { r += jsInclude("Art_Vector_Eyes_TypeA"); r += jsInclude("Art_Vector_Mouth_TypeA"); r += jsInclude("Art_Vector_Nose_TypeE"); if (slave.eyebrowFullness === "pencil-thin") r += jsInclude("Art_Vector_Eyebrow_TypeC_Pencilthin"); - else + else if (hasEyebrows === true) r += jsInclude(`Art_Vector_Eyebrow_TypeF_${eyebrowFullness}`); } else if (slave.faceShape === "exotic") { r += jsInclude("Art_Vector_Eyes_TypeB"); r += jsInclude("Art_Vector_Mouth_TypeC"); r += jsInclude("Art_Vector_Nose_TypeF"); - r += jsInclude(`Art_Vector_Eyebrow_TypeA_${eyebrowFullness}`); + if (hasEyebrows === true) + r += jsInclude(`Art_Vector_Eyebrow_TypeA_${eyebrowFullness}`); } break; case "amerindian": @@ -3101,32 +3115,38 @@ window.VectorArt = (function (artSlave) { r += jsInclude("Art_Vector_Eyes_TypeB"); r += jsInclude("Art_Vector_Mouth_TypeE"); r += jsInclude("Art_Vector_Nose_TypeD"); - r += jsInclude(`Art_Vector_Eyebrow_TypeB_${eyebrowFullness}`); + if (hasEyebrows === true) + r += jsInclude(`Art_Vector_Eyebrow_TypeB_${eyebrowFullness}`); } else if (slave.faceShape === "masculine") { r += jsInclude("Art_Vector_Eyes_TypeE"); r += jsInclude("Art_Vector_Mouth_TypeD"); r += jsInclude("Art_Vector_Nose_TypeF"); - r += jsInclude(`Art_Vector_Eyebrow_TypeC_${eyebrowFullness}`); + if (hasEyebrows === true) + r += jsInclude(`Art_Vector_Eyebrow_TypeC_${eyebrowFullness}`); } else if (slave.faceShape === "androgynous") { r += jsInclude("Art_Vector_Eyes_TypeA"); r += jsInclude("Art_Vector_Mouth_TypeD"); r += jsInclude("Art_Vector_Nose_TypeB"); - r += jsInclude(`Art_Vector_Eyebrow_TypeD_${eyebrowFullness}`); + if (hasEyebrows === true) + r += jsInclude(`Art_Vector_Eyebrow_TypeD_${eyebrowFullness}`); } else if (slave.faceShape === "cute") { r += jsInclude("Art_Vector_Eyes_TypeF"); r += jsInclude("Art_Vector_Mouth_TypeB"); r += jsInclude("Art_Vector_Nose_TypeB"); - r += jsInclude(`Art_Vector_Eyebrow_TypeF_${eyebrowFullness}`); + if (hasEyebrows === true) + r += jsInclude(`Art_Vector_Eyebrow_TypeF_${eyebrowFullness}`); } else if (slave.faceShape === "sensual") { r += jsInclude("Art_Vector_Eyes_TypeB"); r += jsInclude("Art_Vector_Mouth_TypeE"); r += jsInclude("Art_Vector_Nose_TypeC"); - r += jsInclude(`Art_Vector_Eyebrow_TypeF_${eyebrowFullness}`); + if (hasEyebrows === true) + r += jsInclude(`Art_Vector_Eyebrow_TypeF_${eyebrowFullness}`); } else if (slave.faceShape === "exotic") { r += jsInclude("Art_Vector_Eyes_TypeC"); r += jsInclude("Art_Vector_Mouth_TypeA"); r += jsInclude("Art_Vector_Nose_TypeC"); - r += jsInclude(`Art_Vector_Eyebrow_TypeE_${eyebrowFullness}`); + if (hasEyebrows === true) + r += jsInclude(`Art_Vector_Eyebrow_TypeE_${eyebrowFullness}`); } break; case "black": @@ -3134,35 +3154,40 @@ window.VectorArt = (function (artSlave) { r += jsInclude("Art_Vector_Eyes_TypeD"); r += jsInclude("Art_Vector_Mouth_TypeB"); r += jsInclude("Art_Vector_Nose_TypeF"); - r += jsInclude(`Art_Vector_Eyebrow_TypeF_${eyebrowFullness}`); + if (hasEyebrows === true) + r += jsInclude(`Art_Vector_Eyebrow_TypeF_${eyebrowFullness}`); } else if (slave.faceShape === "masculine") { r += jsInclude("Art_Vector_Eyes_TypeA"); r += jsInclude("Art_Vector_Mouth_TypeD"); r += jsInclude("Art_Vector_Nose_TypeF"); - r += jsInclude(`Art_Vector_Eyebrow_TypeE_${eyebrowFullness}`); + if (hasEyebrows === true) + r += jsInclude(`Art_Vector_Eyebrow_TypeE_${eyebrowFullness}`); } else if (slave.faceShape === "androgynous") { r += jsInclude("Art_Vector_Eyes_TypeF"); r += jsInclude("Art_Vector_Mouth_TypeE"); r += jsInclude("Art_Vector_Nose_TypeB"); - r += jsInclude(`Art_Vector_Eyebrow_TypeE_${eyebrowFullness}`); + if (hasEyebrows === true) + r += jsInclude(`Art_Vector_Eyebrow_TypeE_${eyebrowFullness}`); } else if (slave.faceShape === "cute") { r += jsInclude("Art_Vector_Eyes_TypeC"); r += jsInclude("Art_Vector_Mouth_TypeE"); r += jsInclude("Art_Vector_Nose_TypeD"); if (slave.eyebrowFullness === "natural") r += jsInclude("Art_Vector_Eyebrow_TypeB_Natural"); - else + else if (hasEyebrows === true) r += jsInclude(`Art_Vector_Eyebrow_TypeD_${eyebrowFullness}`); } else if (slave.faceShape === "sensual") { r += jsInclude("Art_Vector_Eyes_TypeC"); r += jsInclude("Art_Vector_Mouth_TypeF"); r += jsInclude("Art_Vector_Nose_TypeA"); - r += jsInclude(`Art_Vector_Eyebrow_TypeC_${eyebrowFullness}`); + if (hasEyebrows === true) + r += jsInclude(`Art_Vector_Eyebrow_TypeC_${eyebrowFullness}`); } else if (slave.faceShape === "exotic") { r += jsInclude("Art_Vector_Eyes_TypeE"); r += jsInclude("Art_Vector_Mouth_TypeE"); r += jsInclude("Art_Vector_Nose_TypeC"); - r += jsInclude(`Art_Vector_Eyebrow_TypeA_${eyebrowFullness}`); + if (hasEyebrows === true) + r += jsInclude(`Art_Vector_Eyebrow_TypeA_${eyebrowFullness}`); } break; case "middle eastern": @@ -3170,32 +3195,38 @@ window.VectorArt = (function (artSlave) { r += jsInclude("Art_Vector_Eyes_TypeB"); r += jsInclude("Art_Vector_Mouth_TypeA"); r += jsInclude("Art_Vector_Nose_TypeA"); - r += jsInclude(`Art_Vector_Eyebrow_TypeA_${eyebrowFullness}`); + if (hasEyebrows === true) + r += jsInclude(`Art_Vector_Eyebrow_TypeA_${eyebrowFullness}`); } else if (slave.faceShape === "masculine") { r += jsInclude("Art_Vector_Eyes_TypeD"); r += jsInclude("Art_Vector_Mouth_TypeF"); r += jsInclude("Art_Vector_Nose_TypeA"); - r += jsInclude(`Art_Vector_Eyebrow_TypeB_${eyebrowFullness}`); + if (hasEyebrows === true) + r += jsInclude(`Art_Vector_Eyebrow_TypeB_${eyebrowFullness}`); } else if (slave.faceShape === "androgynous") { r += jsInclude("Art_Vector_Eyes_TypeF"); r += jsInclude("Art_Vector_Mouth_TypeB"); r += jsInclude("Art_Vector_Nose_TypeF"); - r += jsInclude(`Art_Vector_Eyebrow_TypeF_${eyebrowFullness}`); + if (hasEyebrows === true) + r += jsInclude(`Art_Vector_Eyebrow_TypeF_${eyebrowFullness}`); } else if (slave.faceShape === "cute") { r += jsInclude("Art_Vector_Eyes_TypeB"); r += jsInclude("Art_Vector_Mouth_TypeB"); r += jsInclude("Art_Vector_Nose_TypeC"); - r += jsInclude(`Art_Vector_Eyebrow_TypeA_${eyebrowFullness}`); + if (hasEyebrows === true) + r += jsInclude(`Art_Vector_Eyebrow_TypeA_${eyebrowFullness}`); } else if (slave.faceShape === "sensual") { r += jsInclude("Art_Vector_Eyes_TypeA"); r += jsInclude("Art_Vector_Mouth_TypeD"); r += jsInclude("Art_Vector_Nose_TypeA"); - r += jsInclude(`Art_Vector_Eyebrow_TypeC_${eyebrowFullness}`); + if (hasEyebrows === true) + r += jsInclude(`Art_Vector_Eyebrow_TypeC_${eyebrowFullness}`); } else if (slave.faceShape === "exotic") { r += jsInclude("Art_Vector_Eyes_TypeE"); r += jsInclude("Art_Vector_Mouth_TypeE"); r += jsInclude("Art_Vector_Nose_TypeE"); - r += jsInclude(`Art_Vector_Eyebrow_TypeE_${eyebrowFullness}`); + if (hasEyebrows === true) + r += jsInclude(`Art_Vector_Eyebrow_TypeE_${eyebrowFullness}`); } break; case "semitic": @@ -3203,32 +3234,38 @@ window.VectorArt = (function (artSlave) { r += jsInclude("Art_Vector_Eyes_TypeB"); r += jsInclude("Art_Vector_Mouth_TypeA"); r += jsInclude("Art_Vector_Nose_TypeA"); - r += jsInclude(`Art_Vector_Eyebrow_TypeA_${eyebrowFullness}`); + if (hasEyebrows === true) + r += jsInclude(`Art_Vector_Eyebrow_TypeA_${eyebrowFullness}`); } else if (slave.faceShape === "masculine") { r += jsInclude("Art_Vector_Eyes_TypeD"); r += jsInclude("Art_Vector_Mouth_TypeF"); r += jsInclude("Art_Vector_Nose_TypeA"); - r += jsInclude(`Art_Vector_Eyebrow_TypeB_${eyebrowFullness}`); + if (hasEyebrows === true) + r += jsInclude(`Art_Vector_Eyebrow_TypeB_${eyebrowFullness}`); } else if (slave.faceShape === "androgynous") { r += jsInclude("Art_Vector_Eyes_TypeF"); r += jsInclude("Art_Vector_Mouth_TypeB"); r += jsInclude("Art_Vector_Nose_TypeF"); - r += jsInclude(`Art_Vector_Eyebrow_TypeF_${eyebrowFullness}`); + if (hasEyebrows === true) + r += jsInclude(`Art_Vector_Eyebrow_TypeF_${eyebrowFullness}`); } else if (slave.faceShape === "cute") { r += jsInclude("Art_Vector_Eyes_TypeB"); r += jsInclude("Art_Vector_Mouth_TypeB"); r += jsInclude("Art_Vector_Nose_TypeC"); - r += jsInclude(`Art_Vector_Eyebrow_TypeA_${eyebrowFullness}`); + if (hasEyebrows === true) + r += jsInclude(`Art_Vector_Eyebrow_TypeA_${eyebrowFullness}`); } else if (slave.faceShape === "sensual") { r += jsInclude("Art_Vector_Eyes_TypeA"); r += jsInclude("Art_Vector_Mouth_TypeD"); r += jsInclude("Art_Vector_Nose_TypeA"); - r += jsInclude(`Art_Vector_Eyebrow_TypeC_${eyebrowFullness}`); + if (hasEyebrows === true) + r += jsInclude(`Art_Vector_Eyebrow_TypeC_${eyebrowFullness}`); } else if (slave.faceShape === "exotic") { r += jsInclude("Art_Vector_Eyes_TypeE"); r += jsInclude("Art_Vector_Mouth_TypeE"); r += jsInclude("Art_Vector_Nose_TypeE"); - r += jsInclude(`Art_Vector_Eyebrow_TypeE_${eyebrowFullness}`); + if (hasEyebrows === true) + r += jsInclude(`Art_Vector_Eyebrow_TypeE_${eyebrowFullness}`); } break; case "indo-aryan": @@ -3236,32 +3273,38 @@ window.VectorArt = (function (artSlave) { r += jsInclude("Art_Vector_Eyes_TypeE"); r += jsInclude("Art_Vector_Mouth_TypeA"); r += jsInclude("Art_Vector_Nose_TypeD"); - r += jsInclude(`Art_Vector_Eyebrow_TypeA_${eyebrowFullness}`); + if (hasEyebrows === true) + r += jsInclude(`Art_Vector_Eyebrow_TypeA_${eyebrowFullness}`); } else if (slave.faceShape === "masculine") { r += jsInclude("Art_Vector_Eyes_TypeF"); r += jsInclude("Art_Vector_Mouth_TypeD"); r += jsInclude("Art_Vector_Nose_TypeE"); - r += jsInclude(`Art_Vector_Eyebrow_TypeC_${eyebrowFullness}`); + if (hasEyebrows === true) + r += jsInclude(`Art_Vector_Eyebrow_TypeC_${eyebrowFullness}`); } else if (slave.faceShape === "androgynous") { r += jsInclude("Art_Vector_Eyes_TypeC"); r += jsInclude("Art_Vector_Mouth_TypeB"); r += jsInclude("Art_Vector_Nose_TypeD"); - r += jsInclude(`Art_Vector_Eyebrow_TypeF_${eyebrowFullness}`); + if (hasEyebrows === true) + r += jsInclude(`Art_Vector_Eyebrow_TypeF_${eyebrowFullness}`); } else if (slave.faceShape === "cute") { r += jsInclude("Art_Vector_Eyes_TypeC"); r += jsInclude("Art_Vector_Mouth_TypeD"); r += jsInclude("Art_Vector_Nose_TypeA"); - r += jsInclude(`Art_Vector_Eyebrow_TypeD_${eyebrowFullness}`); + if (hasEyebrows === true) + r += jsInclude(`Art_Vector_Eyebrow_TypeD_${eyebrowFullness}`); } else if (slave.faceShape === "sensual") { r += jsInclude("Art_Vector_Eyes_TypeA"); r += jsInclude("Art_Vector_Mouth_TypeE"); r += jsInclude("Art_Vector_Nose_TypeC"); - r += jsInclude(`Art_Vector_Eyebrow_TypeD_${eyebrowFullness}`); + if (hasEyebrows === true) + r += jsInclude(`Art_Vector_Eyebrow_TypeD_${eyebrowFullness}`); } else if (slave.faceShape === "exotic") { r += jsInclude("Art_Vector_Eyes_TypeA"); r += jsInclude("Art_Vector_Mouth_TypeC"); r += jsInclude("Art_Vector_Nose_TypeC"); - r += jsInclude(`Art_Vector_Eyebrow_TypeC_${eyebrowFullness}`); + if (hasEyebrows === true) + r += jsInclude(`Art_Vector_Eyebrow_TypeC_${eyebrowFullness}`); } break; case "mixed race": @@ -3269,32 +3312,38 @@ window.VectorArt = (function (artSlave) { r += jsInclude("Art_Vector_Eyes_TypeE"); r += jsInclude("Art_Vector_Mouth_TypeA"); r += jsInclude("Art_Vector_Nose_TypeD"); - r += jsInclude(`Art_Vector_Eyebrow_TypeA_${eyebrowFullness}`); + if (hasEyebrows === true) + r += jsInclude(`Art_Vector_Eyebrow_TypeA_${eyebrowFullness}`); } else if (slave.faceShape === "masculine") { r += jsInclude("Art_Vector_Eyes_TypeF"); r += jsInclude("Art_Vector_Mouth_TypeD"); r += jsInclude("Art_Vector_Nose_TypeE"); - r += jsInclude(`Art_Vector_Eyebrow_TypeC_${eyebrowFullness}`); + if (hasEyebrows === true) + r += jsInclude(`Art_Vector_Eyebrow_TypeC_${eyebrowFullness}`); } else if (slave.faceShape === "androgynous") { r += jsInclude("Art_Vector_Eyes_TypeC"); r += jsInclude("Art_Vector_Mouth_TypeB"); r += jsInclude("Art_Vector_Nose_TypeD"); - r += jsInclude(`Art_Vector_Eyebrow_TypeF_${eyebrowFullness}`); + if (hasEyebrows === true) + r += jsInclude(`Art_Vector_Eyebrow_TypeF_${eyebrowFullness}`); } else if (slave.faceShape === "cute") { r += jsInclude("Art_Vector_Eyes_TypeC"); r += jsInclude("Art_Vector_Mouth_TypeD"); r += jsInclude("Art_Vector_Nose_TypeA"); - r += jsInclude(`Art_Vector_Eyebrow_TypeD_${eyebrowFullness}`); + if (hasEyebrows === true) + r += jsInclude(`Art_Vector_Eyebrow_TypeD_${eyebrowFullness}`); } else if (slave.faceShape === "sensual") { r += jsInclude("Art_Vector_Eyes_TypeA"); r += jsInclude("Art_Vector_Mouth_TypeE"); r += jsInclude("Art_Vector_Nose_TypeC"); - r += jsInclude(`Art_Vector_Eyebrow_TypeD_${eyebrowFullness}`); + if (hasEyebrows === true) + r += jsInclude(`Art_Vector_Eyebrow_TypeD_${eyebrowFullness}`); } else if (slave.faceShape === "exotic") { r += jsInclude("Art_Vector_Eyes_TypeA"); r += jsInclude("Art_Vector_Mouth_TypeC"); r += jsInclude("Art_Vector_Nose_TypeC"); - r += jsInclude(`Art_Vector_Eyebrow_TypeC_${eyebrowFullness}`); + if (hasEyebrows === true) + r += jsInclude(`Art_Vector_Eyebrow_TypeC_${eyebrowFullness}`); } break; default: @@ -3302,32 +3351,38 @@ window.VectorArt = (function (artSlave) { r += jsInclude("Art_Vector_Eyes_TypeB"); r += jsInclude("Art_Vector_Mouth_TypeA"); r += jsInclude("Art_Vector_Nose_TypeA"); - r += jsInclude(`Art_Vector_Eyebrow_TypeA_${eyebrowFullness}`); + if (hasEyebrows === true) + r += jsInclude(`Art_Vector_Eyebrow_TypeA_${eyebrowFullness}`); } else if (slave.faceShape === "masculine") { r += jsInclude("Art_Vector_Eyes_TypeD"); r += jsInclude("Art_Vector_Mouth_TypeF"); r += jsInclude("Art_Vector_Nose_TypeF"); - r += jsInclude(`Art_Vector_Eyebrow_TypeE_${eyebrowFullness}`); + if (hasEyebrows === true) + r += jsInclude(`Art_Vector_Eyebrow_TypeE_${eyebrowFullness}`); } else if (slave.faceShape === "androgynous") { r += jsInclude("Art_Vector_Eyes_TypeE"); r += jsInclude("Art_Vector_Mouth_TypeE"); r += jsInclude("Art_Vector_Nose_TypeE"); - r += jsInclude(`Art_Vector_Eyebrow_TypeF_${eyebrowFullness}`); + if (hasEyebrows === true) + r += jsInclude(`Art_Vector_Eyebrow_TypeF_${eyebrowFullness}`); } else if (slave.faceShape === "cute") { r += jsInclude("Art_Vector_Eyes_TypeB"); r += jsInclude("Art_Vector_Mouth_TypeB"); r += jsInclude("Art_Vector_Nose_TypeD"); - r += jsInclude(`Art_Vector_Eyebrow_TypeA_${eyebrowFullness}`); + if (hasEyebrows === true) + r += jsInclude(`Art_Vector_Eyebrow_TypeA_${eyebrowFullness}`); } else if (slave.faceShape === "sensual") { r += jsInclude("Art_Vector_Eyes_TypeC"); r += jsInclude("Art_Vector_Mouth_TypeC"); r += jsInclude("Art_Vector_Nose_TypeC"); - r += jsInclude(`Art_Vector_Eyebrow_TypeC_${eyebrowFullness}`); + if (hasEyebrows === true) + r += jsInclude(`Art_Vector_Eyebrow_TypeC_${eyebrowFullness}`); } else if (slave.faceShape === "exotic") { r += jsInclude("Art_Vector_Eyes_TypeA"); r += jsInclude("Art_Vector_Mouth_TypeC"); r += jsInclude("Art_Vector_Nose_TypeC"); - r += jsInclude(`Art_Vector_Eyebrow_TypeC_${eyebrowFullness}`); + if (hasEyebrows === true) + r += jsInclude(`Art_Vector_Eyebrow_TypeC_${eyebrowFullness}`); } } } diff --git a/src/cheats/mod_editSlaveCheatNew.tw b/src/cheats/mod_editSlaveCheatNew.tw index a4692a3fd827b99e915b717bd56fc282a9cbcfbf..9aaf46d2ee181ed6d1a065c957342aed9ab16a82 100644 --- a/src/cheats/mod_editSlaveCheatNew.tw +++ b/src/cheats/mod_editSlaveCheatNew.tw @@ -1471,6 +1471,37 @@ @@.yellow;none@@ <<checkbox "$tempSlave.earImplant" 0 1>> <</if>> + <br><br> + + ''Ear Shape: @@.yellow;$tempSlave.earShape@@ '' + <br> + <<radiobutton "$tempSlave.earShape" "none">> None + <<radiobutton "$tempSlave.earShape" "damaged">> Damaged + <<radiobutton "$tempSlave.earShape" "normal">> Normal + <<radiobutton "$tempSlave.earShape" "pointy">> Small Elf Ears + <<radiobutton "$tempSlave.earShape" "elven">> Long Elf Ears + <<radiobutton "$tempSlave.earShape" "ushi">> Bovine + <br><br> + + ''Kemonomimi Ear Type: @@.yellow;$tempSlave.earT@@ '' + <br> + <<radiobutton "$tempSlave.earT" "none">> None + <<radiobutton "$tempSlave.earT" "neko">> Cat + <<radiobutton "$tempSlave.earT" "inu">> Dog + <<radiobutton "$tempSlave.earT" "kit">> Fox + <<radiobutton "$tempSlave.earT" "tanuki">> TANUKI + <br><br> + + ''Horn Type: @@.yellow;$tempSlave.horn@@ '' + <br> + <<radiobutton "$tempSlave.horn" "none">> None + <<radiobutton "$tempSlave.horn" "curved succubus horns">> Succubus + <<radiobutton "$tempSlave.horn" "backswept horns">> Backswept + <<radiobutton "$tempSlave.horn" "one long oni horn">> One Oni Horn + <<radiobutton "$tempSlave.horn" "two long oni horns">> Two Oni Horns + <<radiobutton "$tempSlave.horn" "small horns">> Small Horns + <<radiobutton "$tempSlave.horn" "cow horns">> Bovine + <br><br> <</widget>> @@ -2062,6 +2093,32 @@ <<radiobutton "$tempSlave.PLimb" 1>> Basic Interface <<radiobutton "$tempSlave.PLimb" 2>> Advanced Interface + <br><br> + ''Prostetic tail Interface:'' + <<if $tempSlave.PTail == 1>>@@.yellow;Installed@@ + <<else>>@@.yellow;Not Installed@@<</if>> + <br> + <<radiobutton "$tempSlave.PTail" 0>> Not Installed + <<radiobutton "$tempSlave.PTail" 1>> Installed + <br> + ''Tail Currently Installed: @@.yellow;$tempSlave.tail@@ '' + <br> + <<radiobutton "$tempSlave.tail" "none">> None + <<radiobutton "$tempSlave.tail" "mod">> Modular + <<radiobutton "$tempSlave.tail" "combat">> Combat + <<radiobutton "$tempSlave.tail" "sex">> Pleasure + <br> + ''Kemonomimi Tail Shape: @@.yellow;$tempSlave.tailShape@@ '' + <br> + //Set current tail to Modular before changing this// + <<radiobutton "$tempSlave.tailShape" "none">> None + <<radiobutton "$tempSlave.tailShape" "neko">> Cat + <<radiobutton "$tempSlave.tailShape" "inu">> Dog + <<radiobutton "$tempSlave.tailShape" "kit">> Fox + <<radiobutton "$tempSlave.tailShape" "kitsune">> 3 Fox Tails + <<radiobutton "$tempSlave.tailShape" "tanuki">> TANUKI + <<radiobutton "$tempSlave.tailShape" "ushi">> Bovine + <br><br> ''Fuckdoll: (0-100)'' <<if $tempSlave.fuckdoll < 15>>@@.yellow;Not a Fuckdoll@@ diff --git a/src/init/storyInit.tw b/src/init/storyInit.tw index 9070d39d7692339e4440d4359f75272a95b3241d..3f59727291fc7210f1dd276034567cbc69517268 100644 --- a/src/init/storyInit.tw +++ b/src/init/storyInit.tw @@ -1429,6 +1429,10 @@ cyberneticPLimb: 0, ocularImplant: 0, cochlearImplant: 0, electrolarynx: 0, +PTail: 0, +modPTail: 0, +warPTail: 0, +sexPTail: 0, erectileImplant: 0 } >> diff --git a/src/interaction/cyberConfig.tw b/src/interaction/cyberConfig.tw index 7493591e09e16514b43931b19c203ad01a42b3aa..f749e6ee2e585711508580247096e344808a60f3 100644 --- a/src/interaction/cyberConfig.tw +++ b/src/interaction/cyberConfig.tw @@ -140,6 +140,50 @@ <</if>> <</if>> + <<if $activeSlave.PTail == 1>><br><br> + $He has a neural tail interface installed. You can assign and adjust $his tail here. + <<if $activeSlave.tail != "none">><br> + $He currently has a tail attached, if you wish to change it you will first need to detach it.<br> + [[Detach|cyberConfig][$temp = 7,$nextButton = "Continue", $nextLink = "cyberConfig"]] + <<else>><br> + <<if $stockpile.modPTail > 0>>Attach a modular tail designed to look like a:<br> + [[Cat's Tail|cyberConfig][$temp = 8, $activeSlave.tail = "mod", $activeSlave.tailShape = "neko", $activeSlave.tailColor = $activeSlave.hColor, $stockpile.modPTail -= 1]] + | [[Dog's Tail|cyberConfig][$temp = 8, $activeSlave.tail = "mod", $activeSlave.tailShape = "inu", $activeSlave.tailColor = $activeSlave.hColor, $stockpile.modPTail -= 1]] + | [[Fox's Tail|cyberConfig][$temp = 8, $activeSlave.tail = "mod", $activeSlave.tailShape = "kit", $activeSlave.tailColor = $activeSlave.hColor, $stockpile.modPTail -= 1]] + | [[Kitsune's Tail|cyberConfig][$temp = 8, $activeSlave.tail = "mod", $activeSlave.tailShape = "kitsune", $activeSlave.tailColor = $activeSlave.hColor, $stockpile.modPTail -= 1]] + | [[Tanuki's Tail|cyberConfig][$temp = 8, $activeSlave.tail = "mod", $activeSlave.tailShape = "tanuki", $activeSlave.tailColor = $activeSlave.hColor, $stockpile.modPTail -= 1]] + | [[Cow's Tail|cyberConfig][$temp = 8, $activeSlave.tail = "mod", $activeSlave.tailColor = "ushi", $activeSlave.tailColor = $activeSlave.hColor, $stockpile.modPTail -= 1]]<br><</if>> + <<if $stockpile.warPTail > 0>>[[Attach Combat Tail|cyberConfig][$temp = 8, $activeSlave.tail = "combat", $activeSlave.tailColor = "jet black", $stockpile.warPTail -= 1]]<</if>> + <<if $stockpile.sexPTail > 0>>| [[Attach Pleasure Tail|cyberConfig][$temp = 8, $activeSlave.tail = "sex", $activeSlave.tailColor = "pink", $stockpile.sexPTail -= 1]]<</if>> + <</if>> + <<else>> + $He does not have a neural tail interface installed so you can not attach a tail. + <</if>> + <<if $activeSlave.tail == "mod">><br> + $He currently has a modular tail, styled to look like + <<if $activeSlave.tailShape == "neko">> + a long, slender cat tail. + <<elseif $activeSlave.tailShape == "inu">> + a bushy dog tail. + <<elseif $activeSlave.tailShape == "kit">> + a soft, fluffy fox tail. + <<elseif $activeSlave.tailShape == "kitsune">> + three incredibly soft, fluffy fox tails. + <<elseif $activeSlave.tailShape == "tanuki">> + a long, fluffy tanuki tail. + <<elseif $activeSlave.tailShape == "ushi">> + a long cow tail. + <</if>> + <br> + + Modify $his tail's apearance:<br> + [[Cat|cyberConfig][$activeSlave.tailShape = "neko",cashX(forceNeg($modCost), "slaveSurgery", $activeSlave)]] + | [[Dog|cyberConfig][$activeSlave.tailShape = "inu",cashX(forceNeg($modCost), "slaveSurgery", $activeSlave)]] + | [[Fox|cyberConfig][$activeSlave.tailShape = "kit",cashX(forceNeg($modCost), "slaveSurgery", $activeSlave)]] + | [[Kitsune|cyberConfig][$activeSlave.tailShape = "kitsune",cashX(forceNeg($modCost), "slaveSurgery", $activeSlave)]] + | [[Tanuki|cyberConfig][$activeSlave.tailShape = "tanuki",cashX(forceNeg($modCost), "slaveSurgery", $activeSlave)]] + | [[Bovine|cyberConfig][$activeSlave.tailShape = "ushi",cashX(forceNeg($modCost), "slaveSurgery", $activeSlave)]] + <</if>> <<case 1>> <<set $temp = 0, $nextButton = "Continue", $nextLink = "cyberConfig">> <<if $activeSlave.amp == -1>><<set $stockpile.basicPLimb += 1>> @@ -196,5 +240,27 @@ $He tests out the <<if canHear($activeSlave)>>sound<<else>>feeling<</if>> of $his new, normal voice. <<elseif $activeSlave.voice == 3>> $He tests out the <<if canHear($activeSlave)>>sound<<else>>feeling<</if>> of $his new, high voice. + <</if>><br> +<<case 7>> + <<set $temp = 0, $nextButton = "Continue", $nextLink = "cyberConfig">> + <<if $activeSlave.tail == "mod">><<set $stockpile.modPTail += 1>> + <<elseif $activeSlave.tail == "combat">><<set $stockpile.warPTail += 1>> + <<elseif $activeSlave.tail == "sex">><<set $stockpile.sexPTail += 1>> + <</if>> + <<set $activeSlave.tail = "none">><<set $activeSlave.tailShape = "none">><<set $activeSlave.tailColor = "none">> + You send the release signal and the mechanical lock disengages allowing the artificial tail to pop right off.<br> +<<case 8>> + <<set $temp = 0, $nextButton = "Continue", $nextLink = "cyberConfig">> + Attaching $his tail is a simple procedure, you simply push the connector into a socket, right where $his tailbone ends, until the lock engages.<br> + When you are done, $he looks back and + <<if $activeSlave.tailShape == "neko">>sways $his tail side to side enigmatically. + <<elseif $activeSlave.tailShape == "inu">>wags $his tail side to side energeticaly. + <<elseif $activeSlave.tailShape == "kit">>slowly sways $his tail feeling the soft fur brush against $his skin. + <<elseif $activeSlave.tailShape == "kitsune">>slowly sways $his tails luxuriating in the incredibly soft, fluffy fur brushing against $his skin. + <<elseif $activeSlave.tailShape == "tanuki">>admires $his long, thick fluffy tail. + <<elseif $activeSlave.tailShape == "ushi">>swats $himself playfully. + <<elseif $activeSlave.tail == "combat">>experimentally whips the long tail side to side then takes aim at a prepared fruit, lashes out with blinding speed and smiles as it explodes into chunks. + <<elseif $activeSlave.tail == "sex">>accidentally engages the vibrating and lube functions, startling $him and making quite a mess. + <<else>>admires $his new tail. <</if>> <</switch>> \ No newline at end of file diff --git a/src/interaction/researchLab.tw b/src/interaction/researchLab.tw index 1a347af9b8530d193a84acb51af4efae6e520aa5..52e1d52314a22295e9bcc759d726ce015f61b712 100644 --- a/src/interaction/researchLab.tw +++ b/src/interaction/researchLab.tw @@ -253,4 +253,15 @@ [[Erectile implant|Research Lab][$temp = 1, cashX(-95000, "lab"), $researchLab.erectileImplant = 1]] //Costs <<print cashFormat(95000)>>.// <</if>>*/ +<br><br> + //You contact a representative of one of the most popular japanese cybernetics companies and inquire about their products.<br> This is what they have to offer://<br><br> + + __Hardware__<br> + [[Neural Tail Interface|Research Lab][$temp = 1, cashX(-10000, "lab"), $stockpile.interfacePTail += 1]] //Costs <<print cashFormat(10000)>>. Currently have: $stockpile.interfacePTail//<br> + [[Modular Tail|Research Lab][$temp = 1, cashX(-3000, "lab"), $stockpile.modPTail += 1]] //Costs <<print cashFormat(5000)>>. Currently have: $stockpile.modPTail//<br> + [[Combat Tail|Research Lab][$temp = 1, cashX(-15000, "lab"), $stockpile.warPTail += 1]] //Costs <<print cashFormat(15000)>>. Currently have: $stockpile.warPTail//<br> + [[Pleasure Tail|Research Lab][$temp = 1, cashX(-10000, "lab"), $stockpile.sexPTail += 1]] //Costs <<print cashFormat(10000)>>. Currently have: $stockpile.sexPTail//<br> + + <br><br>__Schematics__<br> + They do not currently offer schematics for sale. <</switch>> \ No newline at end of file diff --git a/src/js/SlaveState.js b/src/js/SlaveState.js index 6ef1a9c7f7fec1854373a66c78dfaf9fbc210d7d..717224238844c7c70fed9c4212b55b34b66d807f 100644 --- a/src/js/SlaveState.js +++ b/src/js/SlaveState.js @@ -324,8 +324,33 @@ App.Entity.SlaveState = class SlaveState { /** is there an inner ear implant device * 0: no; 1: yes */ this.earImplant = 0; - /** */ + /**the shape of their outer ears + * "none", "damaged", "normal", "pointy", "elven", "ushi" */ this.earShape = "normal"; + /**type of kemonomimi ears if any + * "neko", "inu", "kit", "tanuki" */ + this.earT = "none"; + /**kemonomimi ear color */ + this.earTColor = "none"; + /**horn type if any + * "none", "curved succubus horns", "backswept horns", "cow horns", "one long oni horn", "two long oni horns", "small horns" */ + this.horn = "none"; + /**horn color */ + this.hornColor = "none"; + /**type of tail installed + * "none", "mod", "combat", "sex"*/ + this.tail = "none"; + /** + * Does she have a tail interface installed + * * 0: no + * * 1: yes + */ + this.PTail = 0; + /**the current shape of their modular tail + * "none", "neko", "inu", "kit", "kitsune", "tanuki", "ushi" */ + this.tailShape = "none"; + /**tail color */ + this.tailColor = "none"; /** slave's original hair color, defaults to their initial hair color. */ this.origHColor = "brown"; /** hair color */ diff --git a/src/js/assayJS.js b/src/js/assayJS.js index 62ea88d163ae3c8e1fb13e00e316f4aafdb3140f..2e62bac72ac747eb1c14f3fe925da89fa096c724 100644 --- a/src/js/assayJS.js +++ b/src/js/assayJS.js @@ -2266,5 +2266,9 @@ window.Deadliness = /** @param {App.Entity.SlaveState} slave */ function Deadlin deadliness -= 1; } + if (slave.tail === "combat") { + deadliness += 2; + } + return Math.max(deadliness, 1); }; diff --git a/src/js/datatypeCleanupJS.js b/src/js/datatypeCleanupJS.js index 5e7917ef37ff16968fcb2869e30c722bd61a7f69..22ccf04dc7bb1081389daedd9a15a3b1c1497a44 100644 --- a/src/js/datatypeCleanupJS.js +++ b/src/js/datatypeCleanupJS.js @@ -39,6 +39,7 @@ window.SlaveDatatypeCleanup = (function SlaveDatatypeCleanup() { slaveHairDatatypeCleanup(slave); slaveBoobsDatatypeCleanup(slave); slaveButtDatatypeCleanup(slave); + slaveNekoDatatypeCleanup(slave); slavePregnancyDatatypeCleanup(slave); slaveBellyDatatypeCleanup(slave); slaveGenitaliaDatatypeCleanup(slave); @@ -198,6 +199,34 @@ window.SlaveDatatypeCleanup = (function SlaveDatatypeCleanup() { slave.analArea = Math.max(+slave.analArea, 0) || 0; } + /** @param {App.Entity.SlaveState} slave */ + function slaveNekoDatatypeCleanup(slave) { + if (typeof slave.earShape !== "string") { + slave.earShape = "normal"; + } + if (typeof slave.earT !== "string") { + slave.earT = "none"; + } + if (typeof slave.earTColor !== "string") { + slave.earTColor = "none"; + } + if (typeof slave.horn !== "string") { + slave.horn = "none"; + } + if (typeof slave.hornColor !== "string") { + slave.hornColor = "none"; + } + if (typeof slave.tail !== "string") { + slave.tail = "none"; + } + if (typeof slave.tailShape !== "string") { + slave.tailShape = "none"; + } + if (typeof slave.tailColor !== "string") { + slave.tailColor = "none"; + } + } + /** @param {App.Entity.SlaveState} slave */ function slavePregnancyDatatypeCleanup(slave) { slave.induce = Math.clamp(+slave.induce, 0, 1) || 0; diff --git a/src/js/generateNewSlaveJS.js b/src/js/generateNewSlaveJS.js index e6c91b9967380cd0f2242293e36bca44deb9c8b6..16bd8542138491eb3444c99b78ce69ff81b8eea6 100644 --- a/src/js/generateNewSlaveJS.js +++ b/src/js/generateNewSlaveJS.js @@ -804,7 +804,22 @@ window.GenerateNewSlave = (function(){ } function generateXYBoobs() { - slave.boobs = jsEither([100, 200, 200, 300, 300, 400, 500]); + + if (slave.physicalAge <= 10) { + slave.boobs = 100; + } else if (slave.physicalAge === 11) { + slave.boobs = jsEither([100, 100, 150]); + } else if (slave.physicalAge === 12) { + slave.boobs = jsEither([100, 100, 150, 150]); + } else if (slave.physicalAge === 13) { + slave.boobs = jsEither([100, 100, 150, 150, 200, 200]); + } else if (slave.physicalAge === 14) { + slave.boobs = jsEither([100, 100, 150, 150, 200, 200, 300]); + } else if (slave.physicalAge === 15) { + slave.boobs = jsEither([100, 100, 150, 150, 200, 200, 300, 300, 350, 350]); + } else { + slave.boobs = jsEither([100, 200, 200, 300, 300, 400, 500]); + } } function generateXXFace() { diff --git a/src/js/slaveCostJS.js b/src/js/slaveCostJS.js index d3ab4af31bc72467daabdc753096c705ecb1fb7f..73efd5db005c69fbdd79f10fd678862c928fbd5b 100644 --- a/src/js/slaveCostJS.js +++ b/src/js/slaveCostJS.js @@ -1461,6 +1461,7 @@ window.FResult = (function() { /** @param {App.Entity.SlaveState} slave */ function calcSexAttributes(slave) { if (slave.clitPiercing > 2) result += 1; + if (slave.tail === "sex") result += 1; if (slave.fetishKnown === 1 && slave.fetishStrength > 60 && slave.fetish !== "none") result += slave.fetishStrength/5; diff --git a/src/js/walkPastJS.js b/src/js/walkPastJS.js index 83afe9a292ab1ebbbb87b1485aec523fac713d53..cd628e23fe631b9d58f5e2264c78b481f2891093 100644 --- a/src/js/walkPastJS.js +++ b/src/js/walkPastJS.js @@ -889,7 +889,11 @@ window.loverSlave = function(activeSlave) { } else { t += `on ${name}'s bedroll `; } - t += `${fuckspot}, having gentle anal sex while spooning. ${name} is enjoying ${partnerName}'s ass, and is doing ${his} best to ensure ${his} ${activeSlaveRel} enjoys being buttfucked. ${He}'s nibbling ${his} ${activeSlaveRel}'s ears and neck, cupping a breast with one hand, and lightly stimulating ${him2} with the other.`; + t += `${fuckspot}, having gentle anal sex while spooning. ${name} is enjoying ${partnerName}'s ass, and is doing ${his} best to ensure ${his} ${activeSlaveRel} enjoys being buttfucked. ${He}'s nibbling ${his} ${activeSlaveRel}'s ` + if (_partnerSlave.earShape !== "none") { + t +=`ears and ` + } + t += `neck, cupping a breast with one hand, and lightly stimulating ${him2} with the other.`; } else if (activeSlave.clit > 2 && canDoAnal(_partnerSlave) && _partnerSlave.anus > 0 && _partnerSlave.amp !== 1 && activeSlave.amp !== 1) { if (_partnerSlave.ID === V.HeadGirl.ID && V.HGSuite === 1) { t += `in bed `; @@ -907,7 +911,11 @@ window.loverSlave = function(activeSlave) { } else { t += `on ${name}'s bedroll `; } - t += `${fuckspot}, spooning while ${name} gently rubs ${his} cock between ${partnerName}'s thighs, pressed tightly together. Since ${partnerName} is a virgin, this is the closest they can come to penetrative intercourse, but ${name} is enjoying ${partnerName}'s body anyway, and is doing ${his} best to ensure ${his} ${activeSlaveRel} enjoys ${himself2}. ${He}'s nibbling ${his} ${activeSlaveRel}'s ears and neck, cupping a breast with one hand, and lightly stimulating ${him2} with the other.`; + t += `${fuckspot}, spooning while ${name} gently rubs ${his} cock between ${partnerName}'s thighs, pressed tightly together. Since ${partnerName} is a virgin, this is the closest they can come to penetrative intercourse, but ${name} is enjoying ${partnerName}'s body anyway, and is doing ${his} best to ensure ${his} ${activeSlaveRel} enjoys ${himself2}. ${He}'s nibbling ${his} ${activeSlaveRel}'s ` + if (_partnerSlave.earShape !== "none") { + t +=`ears and ` + } + t += `neck, cupping a breast with one hand, and lightly stimulating ${him2} with the other.`; } else if (activeSlave.clit > 2 && canDoVaginal(activeSlave) && _partnerSlave.amp !== 1 && activeSlave.amp !== 1) { if (_partnerSlave.ID === V.HeadGirl.ID && V.HGSuite === 1) { t += `in bed `; @@ -940,7 +948,11 @@ window.loverSlave = function(activeSlave) { } else { t += `on ${name}'s bedroll `; } - t += `${fuckspot}, having gentle anal sex while spooning. ${name} is enjoying penetrating ${partnerName}'s ass with a strap-on, and is doing ${his} best to ensure ${his} ${activeSlaveRel} enjoys being buttfucked. ${He}'s nibbling ${his} ${activeSlaveRel}'s ears and neck, cupping a breast with one hand, and lightly stimulating ${him} with the other.`; + t += `${fuckspot}, having gentle anal sex while spooning. ${name} is enjoying penetrating ${partnerName}'s ass with a strap-on, and is doing ${his} best to ensure ${his} ${activeSlaveRel} enjoys being buttfucked. ${He}'s nibbling ${his} ${activeSlaveRel}'s ` + if (_partnerSlave.earShape !== "none") { + t +=`ears and ` + } + t += `neck, cupping a breast with one hand, and lightly stimulating ${him} with the other.`; } else if (_partnerSlave.amp !== 1 && activeSlave.amp !== 1) { if (_partnerSlave.ID === V.HeadGirl.ID && V.HGSuite === 1) { t += `in bed `; @@ -1222,6 +1234,49 @@ window.loverSlave = function(activeSlave) { return t; } +window.relatedSlave = function(activeSlave) { + const V = State.variables; + const pronouns = getPronouns(activeSlave); + const he = pronouns.pronoun, him = pronouns.object, his = pronouns.possessive, hers = pronouns.possessivePronoun, himself = pronouns.objectReflexive, boy = pronouns.noun; + const He = capFirstChar(he), His = capFirstChar(his); + let t = ""; + let _target = ""; + + if (V.partner === "relation") { + if (V.familyTesting === 1) { + _partnerSlave = V.relation; + } else { + _partnerSlave = getSlave(activeSlave.relationTarget); + } + } else { + var activeSlaveRel = relationshipTerm(activeSlave); + _partnerSlave = getSlave(activeSlave.relationshipTarget); + } + + if (_partnerSlave !== undefined) { /* potential problem point */ + // let race2 = (V.seeRace ? _partnerSlave.race : ""); + + t += " His "; + if (V.partner === "relation") { + if (V.familyTesting === 1) { + t += `${V.relationType} `; + } else { + t += `${_partnerSlave.relation} `; + } + } else { + t += `${activeSlaveRel} `; + } + t += `${_partnerSlave.slaveName} `; + + + V.target = "FRival"; /*potentially removed later*/ + } else { + t += ` Expected partner not found!`; + } + + return t; +}; + window.walkPasts = function(slave, _seed) { /* will be moved up once this becomes a single, contained function. */ diff --git a/src/pregmod/huskSlaveSwap.tw b/src/pregmod/huskSlaveSwap.tw index a6e9a33cd46587f08bde9ed24aa6a6f57bb80a42..351261d8df59e227675f60a4f61937151cb886ac 100644 --- a/src/pregmod/huskSlaveSwap.tw +++ b/src/pregmod/huskSlaveSwap.tw @@ -4,6 +4,15 @@ <<set _oldSlave = clone($swappingSlave)>> <<set _m = $slaveIndices[$swappingSlave.ID]>> <<run clearSummaryCache($slaves[_m])>> +<<if $slaves[_m].tail != "none">> + <<if $slaves[_m].tail == "sex">> + <<set $stockpile.sexPTail++>> + <<elseif $slaves[_m].tail == "combat">> + <<set $stockpile.warPTail++>> + <<else>> + <<set $stockpile.modPTail++>> + <</if>> +<</if>> You strap $slaves[_m].slaveName, and the body to which $he will be transferred, into the remote surgery and stand back as it goes to work. <<BodySwap $slaves[_m] $activeSlave>> diff --git a/src/pregmod/organFarmOptions.tw b/src/pregmod/organFarmOptions.tw index 5888ae64fd11ad4362fc76192e2aa61508b2c9f5..01a0050e321f394ce0542c6d27056fe65deb5553 100644 --- a/src/pregmod/organFarmOptions.tw +++ b/src/pregmod/organFarmOptions.tw @@ -19,6 +19,7 @@ horseOvaries: 0, cowOvaries: 0, eyes: 0, + ears: 0, cochleae: 0, voicebox: 0, mpreg: 0, @@ -58,6 +59,8 @@ <<set $slaveOrgans.cowOvaries = 1>> <<elseif $organs[_i].type == "eyes">> <<set $slaveOrgans.eyes = 1>> + <<elseif $organs[_i].type == "ears">> + <<set $slaveOrgans.ears = 1>> <<elseif $organs[_i].type == "cochleae">> <<set $slaveOrgans.cochleae = 1>> <<elseif $organs[_i].type == "voicebox">> @@ -267,6 +270,18 @@ The fabricator is ready to grow an organ for $him. Extract tissue to begin growi <</link>> //Costs <<print cashFormat(10000)>> and is imperfect — eyes will lack natural color// <</if>> <</if>> +<<if $slaveOrgans.ears != 1>> + <<if $activeSlave.earShape != "normal" && $activeSlave.earShape != "pointy">> + <br> + <<link "Normal Ears">> + <<run cashX(-1000, "slaveSurgery", $activeSlave)>> + <<set _newOrgan = {type: "ears", weeksToCompletion: "2", ID: 0}>> + <<set _newOrgan.ID = $activeSlave.ID>> + <<set $organs.push(_newOrgan)>> + <<goto "Remote Surgery">> + <</link>> //Costs <<print cashFormat(1000)>>// + <</if>> +<</if>> <<if $slaveOrgans.cochleae != 1>> <<if $activeSlave.hears <= -2 && $activeSlave.earImplant != 1>> <br> @@ -355,7 +370,7 @@ The fabricator is ready to grow an organ for $him. Extract tissue to begin growi <<switch $organs[_i].type>> <<case "penis" "scrotum" "foreskin" "prostate" "voicebox">> $organs[_i].type is - <<case "testicles" "ovaries" "eyes" "cochleae">> + <<case "testicles" "ovaries" "eyes" "cochleae" "ears">> $organs[_i].type are <<case "pigTesticles">> pig testicles are @@ -1998,6 +2013,74 @@ The fabricator is ready to grow an organ for $him. Extract tissue to begin growi <</if>> <</link>> <</if>> + <<case "ears">> + <<if $activeSlave.earShape == "normal" || $activeSlave.earShape == "pointy">> + <br> + ERROR: this slave has normal ears. + <<link "Discard" "Remote Surgery">> + <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "ears"; })>> + <<if _ofo != -1>> + <<set $completedOrgans.deleteAt(_ofo)>> + <<else>> + @@.red;Organ not found for deletion!@@ + <</if>> + <</link>> + <<elseif $activeSlave.earShape == "none">> + <br> + <<link "Attach" "Surgery Degradation">> + <<run cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave)>> + <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "ears"; })>> + <<if _ofo != -1>> + <<set $completedOrgans.deleteAt(_ofo)>> + <<else>> + @@.red;Organ not found for deletion!@@ + <</if>> + <<set $activeSlave.earShape = "normal">> + <<if $activeSlave.hears == -1>> + <<set $activeSlave.hears = 0>> + <</if>> + <<set $activeSlave.health -= 15>> + <<if $organFarmUpgrade == 2>> + <<set $activeSlave.chem += 20>> + <</if>> + <<set $surgeryType = "earShapeMinor">> + <</link>> + | + <<link "Discard" "Remote Surgery">> + <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "ears"; })>> + <<if _ofo != -1>> + <<set $completedOrgans.deleteAt(_ofo)>> + <<else>> + @@.red;Organ not found for deletion!@@ + <</if>> + <</link>> + <<else>> + <br> + <<link "Remove current ears and attach" "Surgery Degradation">> + <<run cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave)>> + <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "ears"; })>> + <<if _ofo != -1>> + <<set $completedOrgans.deleteAt(_ofo)>> + <<else>> + @@.red;Organ not found for deletion!@@ + <</if>> + <<set $activeSlave.earShape = "normal">> + <<set $activeSlave.health -= 20>> + <<if $organFarmUpgrade == 2>> + <<set $activeSlave.chem += 20>> + <</if>> + <<set $surgeryType = "earShapeMinor">> + <</link>> + | + <<link "Discard" "Remote Surgery">> + <<set _ofo = $completedOrgans.findIndex(function(s) { return $activeSlave.ID == s.ID && s.type == "ears"; })>> + <<if _ofo != -1>> + <<set $completedOrgans.deleteAt(_ofo)>> + <<else>> + @@.red;Organ not found for deletion!@@ + <</if>> + <</link>> + <</if>> <<case "cochleae">> <<if $activeSlave.hears > -2 && $activeSlave.earImplant != 1>> <br> diff --git a/src/pregmod/widgets/bodyswapWidgets.tw b/src/pregmod/widgets/bodyswapWidgets.tw index 612aee850961b571a69370547bd3ee0924e18821..509d0727be931e3d51c975ab68db1b6969b2260f 100644 --- a/src/pregmod/widgets/bodyswapWidgets.tw +++ b/src/pregmod/widgets/bodyswapWidgets.tw @@ -72,6 +72,14 @@ <<set $args[0].earwear = $args[1].earwear>> <<set $args[0].earImplant = $args[1].earImplant>> <<set $args[0].earShape = $args[1].earShape>> +<<set $args[0].earT = $args[1].earT>> +<<set $args[0].earTColor = $args[1].earTColor>> +<<set $args[0].horn = $args[1].horn>> +<<set $args[0].hornColor = $args[1].hornColor>> +<<set $args[0].PTail = $args[1].PTail>> +<<set $args[0].tail = $args[1].tail>> +<<set $args[0].tailShape = $args[1].tailShape>> +<<set $args[0].tailColor = $args[1].tailColor>> <<set $args[0].origHColor = $args[1].origHColor>> <<set $args[0].hColor = $args[1].hColor>> <<set $args[0].hLength = $args[1].hLength>> diff --git a/src/pregmod/widgets/pregmodWidgets.tw b/src/pregmod/widgets/pregmodWidgets.tw index c767be12592376fe84442e92a03ae78fe89ab867..25f73cd2c4750a3ed51fd67d1af6e07976af2de1 100644 --- a/src/pregmod/widgets/pregmodWidgets.tw +++ b/src/pregmod/widgets/pregmodWidgets.tw @@ -19,6 +19,27 @@ <<if ndef $args[0].earShape>> <<set $args[0].earShape = "normal">> <</if>> +<<if ndef $args[0].earT>> + <<set $args[0].earT = "none">> +<</if>> +<<if ndef $args[0].earTColor>> + <<set $args[0].earTColor = "none">> +<</if>> +<<if ndef $args[0].horn>> + <<set $args[0].horn = "none">> +<</if>> +<<if ndef $args[0].hornColor>> + <<set $args[0].hornColor = "none">> +<</if>> +<<if ndef $args[0].tail>> + <<set $args[0].tail = "none">> +<</if>> +<<if ndef $args[0].tailShape>> + <<set $args[0].tailShape = "none">> +<</if>> +<<if ndef $args[0].tailColor>> + <<set $args[0].tailColor = "none">> +<</if>> <<if ndef $args[0].missingEyes>> <<if $args[0].eyes == -3>> <<set $args[0].missingEyes = 3>> diff --git a/src/uncategorized/BackwardsCompatibility.tw b/src/uncategorized/BackwardsCompatibility.tw index dc153cd52a0f4a08b18df00d6a27b573073ef9b0..01ead1cea3f8c290e0e85a464876f9c6283d2a6b 100644 --- a/src/uncategorized/BackwardsCompatibility.tw +++ b/src/uncategorized/BackwardsCompatibility.tw @@ -2062,6 +2062,20 @@ Setting missing global variables: <</if>> <</if>> +/* Neko*/ + <<if ndef $stockpile.interfacePTail>> + <<set $stockpile.interfacePTail = 0>> + <</if>> + <<if ndef $stockpile.modPTail>> + <<set $stockpile.modPTail = 0>> + <</if>> + <<if ndef $stockpile.warPTail>> + <<set $stockpile.warPTail = 0>> + <</if>> + <<if ndef $stockpile.sexPTail>> + <<set $stockpile.sexPTail = 0>> + <</if>> + <<if ndef $trinkets>> <<set $trinkets = []>> diff --git a/src/uncategorized/bodyModification.tw b/src/uncategorized/bodyModification.tw index f1d23864cb8129fc3b51d49d27037e4a5a28115b..f5a749171aa9cf6fe52899e6a4d4c57748ca4fdd 100644 --- a/src/uncategorized/bodyModification.tw +++ b/src/uncategorized/bodyModification.tw @@ -926,7 +926,7 @@ Or design your own: <<textbox "$brandDesign" $brandDesign "Body Modification">> <br> Choose a site for branding: -[[Ears|Body Modification][$brandTarget = "ear"]] +<<if $activeSlave.earShape != "none">>[[Ears|Body Modification][$brandTarget = "ear"]]<</if>> | [[Cheeks|Body Modification][$brandTarget = "cheek"]] | [[Shoulders|Body Modification][$brandTarget = "shoulder"]] | [[Breasts|Body Modification][$brandTarget = "breast"]] diff --git a/src/uncategorized/longSlaveDescription.tw b/src/uncategorized/longSlaveDescription.tw index fab5020f3dc5df6ed1cfddcbcb5385fcffe0dcbb..4ab8977bb769ae3049e6f442d80c909b3427a4cb 100644 --- a/src/uncategorized/longSlaveDescription.tw +++ b/src/uncategorized/longSlaveDescription.tw @@ -2120,6 +2120,7 @@ $He is <</if>> <</if>> +<<hornDescription>> <<faceDescription>> <<mouthDescription>> diff --git a/src/uncategorized/remoteSurgery.tw b/src/uncategorized/remoteSurgery.tw index 72602950b2fd74cb707dfcb17445b3ebbb055972..7820d95647100ab214e6e7f8e21bb4ba9c9bd192 100644 --- a/src/uncategorized/remoteSurgery.tw +++ b/src/uncategorized/remoteSurgery.tw @@ -155,16 +155,88 @@ $His $activeSlave.faceShape face is <</if>> <</if>> +/*Regular Ears*/ <br> -$He has +$He has <<if $activeSlave.earShape == "normal">> normal ears. - [[Elongate ears|Surgery Degradation][$activeSlave.earShape = "elfin", cashX(forceNeg($surgeryCost), "slaveSurgery"), $activeSlave.health -= 10, $surgeryType = "earShape"]] -<<elseif $activeSlave.earShape == "elfin">> - elfin shaped ears. - [[Revert ears|Surgery Degradation][$activeSlave.earShape = "normal", cashX(forceNeg($surgeryCost), "slaveSurgery"), $activeSlave.health -= 10, $surgeryType = "earShape"]] +<<elseif $activeSlave.earShape == "damaged">> + damaged ears. + | [[Repair|Surgery Degradation][$activeSlave.earShape = "normal", $cash -= $surgeryCost, $activeSlave.health -= 10, $surgeryType = "earRestore"]] +<<elseif $activeSlave.earShape == "pointy">> + small elfin ears. +<<elseif $activeSlave.earShape == "elven">> + long elf ears. +<<elseif $activeSlave.earShape == "ushi">> + floppy cow ears. +<<elseif $activeSlave.earShape == "none">> + no ears. +<<else>> + bugged ears. You done goofed. //Report This// +<</if>> +<<if $activeSlave.earShape != "normal" && $activeSlave.earShape != "none">> + [[Restore to normal|Surgery Degradation][$activeSlave.earShape = "normal", $cash -= $surgeryCost, $activeSlave.health -= 10, $surgeryType = "earRestore"]] +<</if>> +<<if $activeSlave.earShape != "normal" && $activeSlave.earShape != "none" && $seeExtreme == 1 && $activeSlave.indentureRestrictions < 1>> | <</if>> +<<if $activeSlave.earShape != "none" && $seeExtreme == 1 && $activeSlave.indentureRestrictions < 1>> + [[Remove them|Surgery Degradation][$activeSlave.earShape = "none", $cash -= $surgeryCost, $activeSlave.health -= 20, $surgeryType = "earGone"]] +<</if>> + +<<if $activeSlave.earShape == "none">> + <<if $activeSlave.hears != -2 && $activeSlave.earImplant != 1>> + <<set $activeSlave.hears = -1>> + <</if>> + <<if $activeSlave.brandLocation == "left ear" || $activeSlave.brandLocation == "right ear" || $activeSlave.brandLocation == "both ear">> + <<set $activeSlave.brand = 0>> + <</if>> +<</if>> + +<<if $activeSlave.earShape != "none">> + <br>Give $him: + <<if $activeSlave.earShape != "pointy">> + [[Small Elfin Ears|Surgery Degradation][$activeSlave.earShape = "pointy", $cash -= $surgeryCost, $activeSlave.health -= 10, $surgeryType = "earMinor"]]<</if>> + <<if $surgeryUpgrade == 1>> + <<if $activeSlave.earShape != "elven">> + | [[Long Elf Ears|Surgery Degradation][$activeSlave.earShape = "elven", $cash -= $surgeryCost, $activeSlave.health -= 10, $surgeryType = "earMajor"]]<</if>> + <<if $activeSlave.earShape != "ushi">> + | [[Bovine Ears|Surgery Degradation][$activeSlave.earShape = "ushi", $cash -= $surgeryCost, $activeSlave.health -= 10, $surgeryType = "earMajor"]]<</if>> + <</if>> <</if>> +/*Top Ears*/ +/* +<br> +$He has +<<if $activeSlave.earT == "none">> + <<if $activeSlave.earShape != "none">>only one set of ears.<<else>>no secondary ears.<</if>> +<<elseif $activeSlave.earT == "neko">> + cat ears. +<<elseif $activeSlave.earT == "inu">> + dog ears. +<<elseif $activeSlave.earT == "kit">> + fox ears. +<<elseif $activeSlave.earT == "tanuki">> + tanuki ears. +<<else>> + You done goofed. //Report This// +<</if>> +<<if $activeSlave.earT != "none" && $seeExtreme == 1 && $activeSlave.indentureRestrictions < 1>> + [[Remove them|Surgery Degradation][$activeSlave.earT = "none", $cash -= $surgeryCost, $activeSlave.health -= 20, $surgeryType = "earGone"]] +<</if>> + +<<if $surgeryUpgrade == 1>><br> + Give $him: + <<if $activeSlave.earT != "neko">> + [[Cat Ears|Surgery Degradation][$activeSlave.earT = "neko", $activeSlave.earTColor = $activeSlave.hColor, $cash -= $surgeryCost, $activeSlave.health -= 10, $surgeryType = "earMajor"]]<</if>> + <<if $activeSlave.earT != "inu">> + | [[Dog Ears|Surgery Degradation][$activeSlave.earT = "inu", $activeSlave.earTColor = $activeSlave.hColor, $cash -= $surgeryCost, $activeSlave.health -= 10, $surgeryType = "earMajor"]]<</if>> + <<if $activeSlave.earT != "kit">> + | [[Fox Ears|Surgery Degradation][$activeSlave.earT = "kit", $activeSlave.earTColor = $activeSlave.hColor, $cash -= $surgeryCost, $activeSlave.health -= 10, $surgeryType = "earMajor"]]<</if>> + <<if $activeSlave.earT != "tanuki">> + | [[Tanuki Ears|Surgery Degradation][$activeSlave.earT = "tanuki", $activeSlave.earTColor = $activeSlave.hColor, $cash -= $surgeryCost, $activeSlave.health -= 10, $surgeryType = "earMajor"]]<</if>> +<</if>> +*/ + <<if $activeSlave.earImplant == 1>> <br> $He has cochlear implants. @@ -175,8 +247,8 @@ $He has <br> $He has working <<if $activeSlave.hears == -1>> - ears, but is hearing impaired. - <<if ($activeSlave.earImplant != 1)>> + inner ears, but is hearing impaired<<if $activeSlave.earShape == "none">>, likely due to missing the outer structure<</if>>. + <<if ($activeSlave.earImplant != 1) && $activeSlave.earShape != "none">> [[Correct hearing|Surgery Degradation][$activeSlave.hears = 0, cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave), $activeSlave.health -= 10, $surgeryType = "earFix"]] <</if>> <<else>> @@ -198,6 +270,25 @@ $He has <</if>> <</if>> +/*Horns*/ +<br> +$He has <<if $activeSlave.horn == "none">>no horns<<else>>$activeSlave.horn<</if>>. +<<if $activeSlave.horn != "none">> + [[Remove them|Surgery Degradation][$activeSlave.horn = "none", $activeSlave.hornColor = "none", $cash -= $surgeryCost, $activeSlave.health -= 10, $surgeryType = "hornGone"]]<</if>><br> + Give $him: +<<if $activeSlave.horn != "curved succubus horns">> + [[Succubus horns|Surgery Degradation][$activeSlave.horn = "curved succubus horns", $activeSlave.hornColor = "jet black", $cash -= $surgeryCost, $activeSlave.health -= 10, $surgeryType = "horn"]]<</if>> +<<if $activeSlave.horn != "backswept horns">> + | [[Backswept horns|Surgery Degradation][$activeSlave.horn = "backswept horns", $activeSlave.hornColor = "jet black", $cash -= $surgeryCost, $activeSlave.health -= 10, $surgeryType = "horn"]]<</if>> +<<if $activeSlave.horn != "cow horns">> + | [[Bovine horns|Surgery Degradation][$activeSlave.horn = "cow horns", $activeSlave.hornColor = "ivory", $cash -= $surgeryCost, $activeSlave.health -= 10, $surgeryType = "horn"]]<</if>> +<<if $activeSlave.horn != "one long oni horn">> + | [[an oni horn|Surgery Degradation][$activeSlave.horn = "one long oni horn", $activeSlave.hornColor = $activeSlave.skin, $cash -= $surgeryCost, $activeSlave.health -= 10, $surgeryType = "horn"]]<</if>> +<<if $activeSlave.horn != "two long oni horns">> + | [[2 oni horns|Surgery Degradation][$activeSlave.horn = "two long oni horns", $activeSlave.hornColor = $activeSlave.skin, $cash -= $surgeryCost, $activeSlave.health -= 10, $surgeryType = "horn"]]<</if>> +<<if $activeSlave.horn != "small horns">> + | [[Small horns|Surgery Degradation][$activeSlave.horn = "small horns", $activeSlave.hornColor = "ivory", $cash -= $surgeryCost, $activeSlave.health -= 10, $surgeryType = "horn"]]<</if>> + <br> $He has <<if $activeSlave.lips <= 10>> @@ -1515,6 +1606,15 @@ Work on $him structurally: <</if>> <</if>> +<br> + <<if $activeSlave.PTail == 1>> + $He has a neural interface allowing attachment of tails. + <<elseif $stockpile.interfacePTail > 0>> + $He lacks a neural interface allowing attachment of tails. + [[Implant interface|Surgery Degradation][$activeSlave.PTail = 1, $activeSlave.tail = "none", $activeSlave.tailColor = "none", cashX(forceNeg($surgeryCost), "slaveSurgery", $activeSlave), $activeSlave.health -= 10, $stockpile.interfacePTail -= 1, $surgeryType = "tailInterface"]] + <<else>> + $He lacks a neural interface allowing attachment of tails and you have none in stock. + <</if>> <<if $organFarmUpgrade >= 1>> /* ORGAN FARM */ <<if $activeSlave.indentureRestrictions < 2>> diff --git a/src/uncategorized/salon.tw b/src/uncategorized/salon.tw index aeda3b784264ee8aa80e6404622a5e307d17952e..86209b1745c5f619505fad239a2daffb08f67f55 100644 --- a/src/uncategorized/salon.tw +++ b/src/uncategorized/salon.tw @@ -87,7 +87,7 @@ <<if $activeSlave.origEye != $activeSlave.eyeColor>> [[Remove lenses|Salon][$activeSlave.eyeColor = $activeSlave.origEye]] or //choose new ones:// <<else>> - //Choose $his cosmetic lenses: + //Choose $his cosmetic lenses:// <</if>> <<else>> <<if $activeSlave.eyeColor == "empty">> @@ -159,9 +159,69 @@ <</if>> /*End eye check */ /* EARS */ +<<if $activeSlave.earT != "none">><br><br> + $His fluffy ears are $activeSlave.earTColor. + <<if $activeSlave.earTColor != $activeSlave.hColor>> + [[Match current hair|Salon][$activeSlave.earTColor = $activeSlave.hColor]] or //choose a new one:// + <<else>> + //Choose a dye color before dyeing $his ears:// + <</if>> + <br> + Colors: + [[Auburn|Salon][$primaryEarColor = "auburn"]] + | [[Black|Salon][$primaryEarColor = "black"]] + | [[Blazing Red|Salon][$primaryEarColor = "blazing red"]] + | [[Blonde|Salon][$primaryEarColor = "blonde"]] + | [[Blue-Violet|Salon][$primaryEarColor = "blue-violet"]] + | [[Blue|Salon][$primaryEarColor = "blue"]] + | [[Brown|Salon][$primaryEarColor = "brown"]] + | [[Burgundy|Salon][$primaryEarColor = "burgundy"]] + | [[Chestnut|Salon][$primaryEarColor = "chestnut"]] + | [[Chocolate|Salon][$primaryEarColor = "chocolate brown"]] + | [[Copper|Salon][$primaryEarColor = "copper"]] + | [[Dark Blue|Salon][$primaryEarColor = "dark blue"]] + | [[Dark Brown|Salon][$primaryEarColor = "dark brown"]] + | [[Dark Orchid|Salon][$primaryEarColor = "dark orchid"]] + | [[Deep Red|Salon][$primaryEarColor = "deep red"]] + | [[Ginger|Salon][$primaryEarColor = "ginger"]] + | [[Golden|Salon][$primaryEarColor = "golden"]] + | [[Green-yellow|Salon][$primaryEarColor = "green-yellow"]] + | [[Green|Salon][$primaryEarColor = "green"]] + | [[Grey|Salon][$primaryEarColor = "grey"]] + | [[Hazel|Salon][$primaryEarColor = "hazel"]] + | [[Jet Black|Salon][$primaryEarColor = "jet black"]] + | [[Neon Blue|Salon][$primaryEarColor = "neon blue"]] + | [[Neon Green|Salon][$primaryEarColor = "neon green"]] + | [[Neon Pink|Salon][$primaryEarColor = "neon pink"]] + | [[Pink|Salon][$primaryEarColor = "pink"]] + | [[Platinum Blonde|Salon][$primaryEarColor = "platinum blonde"]] + | [[Purple|Salon][$primaryEarColor = "purple"]] + | [[Red|Salon][$primaryEarColor = "red"]] + | [[Sea Green|Salon][$primaryEarColor = "sea green"]] + | [[Silver|Salon][$primaryEarColor = "silver"]] + | [[Strawberry-Blonde|Salon][$primaryEarColor = "strawberry-blonde"]] + | [[White|Salon][$primaryEarColor = "white"]] + <br> + Highlights: + [[None|Salon][$secondaryEarColor = ""]] + | [[Black|Salon][$secondaryEarColor = " with black highlights"]] + | [[Blazing Red|Salon][$secondaryEarColor = " with blazing red highlights"]] + | [[Blonde|Salon][$secondaryEarColor = " with blonde highlights"]] + | [[Grey|Salon][$secondaryEarColor = " with grey highlights"]] + | [[Neon Blue|Salon][$secondaryEarColor = " with neon blue highlights"]] + | [[Neon Green|Salon][$secondaryEarColor = " with neon green highlights"]] + | [[Neon Pink|Salon][$secondaryEarColor = " with neon pink highlights"]] + | [[Rainbow|Salon][$secondaryEarColor = " with rainbow highlights"]] + | [[Silver|Salon][$secondaryEarColor = " with silver highlights"]] + | [[White|Salon][$secondaryEarColor = " with white highlights"]] + + <<if $primaryEarColor != 0>> + <br> + [["Dye " + $his + " ears"|Salon][$activeSlave.earTColor = ($primaryEarColor + $secondaryEarColor),cashX(forceNeg($modCost), "slaveMod", $activeSlave), $primaryEarColor = 0, $secondaryEarColor = ""]] $primaryEarColor $secondaryEarColor now? + <</if>> +<</if>> <br><br> - <<if $activeSlave.earImplant == 1>> $He has artificial inner ear implants, <<if $activeSlave.earwear == "none">> @@ -216,6 +276,38 @@ /*End ear check */ +<<if $activeSlave.horn != "none">><br><br> +$His $activeSlave.horn are $activeSlave.hornColor +<br> +Set horn color: + [[Black|Salon][$activeSlave.hornColor = "black",cashX(forceNeg($modCost), "slaveMod", $activeSlave)]] + | [[Blazing Red|Salon][$activeSlave.hornColor = "blazing red",cashX(forceNeg($modCost), "slaveMod", $activeSlave)]] + | [[Blue-Violet|Salon][$activeSlave.hornColor = "blue-violet",cashX(forceNeg($modCost), "slaveMod", $activeSlave)]] + | [[Blue|Salon][$activeSlave.hornColor = "blue",cashX(forceNeg($modCost), "slaveMod", $activeSlave)]] + | [[Brown|Salon][$activeSlave.hornColor = "brown",cashX(forceNeg($modCost), "slaveMod", $activeSlave)]] + | [[Burgundy|Salon][$activeSlave.hornColor = "burgundy",cashX(forceNeg($modCost), "slaveMod", $activeSlave)]] + | [[Copper|Salon][$activeSlave.hornColor = "copper",cashX(forceNeg($modCost), "slaveMod", $activeSlave)]] + | [[Dark Blue|Salon][$activeSlave.hornColor = "dark blue",cashX(forceNeg($modCost), "slaveMod", $activeSlave)]] + | [[Dark Brown|Salon][$activeSlave.hornColor = "dark brown",cashX(forceNeg($modCost), "slaveMod", $activeSlave)]] + | [[Dark Orchid|Salon][$activeSlave.hornColor = "dark orchid",cashX(forceNeg($modCost), "slaveMod", $activeSlave)]] + | [[Deep Red|Salon][$activeSlave.hornColor = "deep red",cashX(forceNeg($modCost), "slaveMod", $activeSlave)]] + | [[Golden|Salon][$activeSlave.hornColor = "golden",cashX(forceNeg($modCost), "slaveMod", $activeSlave)]] + | [[Green-yellow|Salon][$activeSlave.hornColor = "green-yellow",cashX(forceNeg($modCost), "slaveMod", $activeSlave)]] + | [[Green|Salon][$activeSlave.hornColor = "green",cashX(forceNeg($modCost), "slaveMod", $activeSlave)]] + | [[Grey|Salon][$activeSlave.hornColor = "grey",cashX(forceNeg($modCost), "slaveMod", $activeSlave)]] + | [[Jet Black|Salon][$activeSlave.hornColor = "jet black",cashX(forceNeg($modCost), "slaveMod", $activeSlave)]] + | [[Neon Blue|Salon][$activeSlave.hornColor = "neon blue",cashX(forceNeg($modCost), "slaveMod", $activeSlave)]] + | [[Neon Green|Salon][$activeSlave.hornColor = "neon green",cashX(forceNeg($modCost), "slaveMod", $activeSlave)]] + | [[Neon Pink|Salon][$activeSlave.hornColor = "neon pink",cashX(forceNeg($modCost), "slaveMod", $activeSlave)]] + | [[Pink|Salon][$activeSlave.hornColor = "pink",cashX(forceNeg($modCost), "slaveMod", $activeSlave)]] + | [[Ivory|Salon][$activeSlave.hornColor = "ivory",cashX(forceNeg($modCost), "slaveMod", $activeSlave)]] + | [[Purple|Salon][$activeSlave.hornColor = "purple",cashX(forceNeg($modCost), "slaveMod", $activeSlave)]] + | [[Red|Salon][$activeSlave.hornColor = "red",cashX(forceNeg($modCost), "slaveMod", $activeSlave)]] + | [[Sea Green|Salon][$activeSlave.hornColor = "sea green",cashX(forceNeg($modCost), "slaveMod", $activeSlave)]] + | [[Silver|Salon][$activeSlave.hornColor = "silver",cashX(forceNeg($modCost), "slaveMod", $activeSlave)]] + | [[White|Salon][$activeSlave.hornColor = "white",cashX(forceNeg($modCost), "slaveMod", $activeSlave)]] +<</if>> + /* HAIR */ <br><br> @@ -556,6 +648,69 @@ Dye or paint: | [[Red|Salon][$activeSlave.skin = "dyed red",cashX(forceNeg($modCost), "slaveMod", $activeSlave)]] | [[Tiger Stripes|Salon][$activeSlave.skin = "tiger striped",cashX(forceNeg($modCost), "slaveMod", $activeSlave)]] +<<if $activeSlave.tail != "none">><br><br> + $His tail is $activeSlave.tailColor. + <<if $activeSlave.tailColor != $activeSlave.hColor>> + [[Match current hair|Salon][$activeSlave.tailColor = $activeSlave.hColor]] or //choose a new one:// + <<else>> + //Choose a dye color before dyeing $his tail:// + <</if>> + <br> + Colors: + [[Auburn|Salon][$primaryTailColor = "auburn"]] + | [[Black|Salon][$primaryTailColor = "black"]] + | [[Blazing Red|Salon][$primaryTailColor = "blazing red"]] + | [[Blonde|Salon][$primaryTailColor = "blonde"]] + | [[Blue-Violet|Salon][$primaryTailColor = "blue-violet"]] + | [[Blue|Salon][$primaryTailColor = "blue"]] + | [[Brown|Salon][$primaryTailColor = "brown"]] + | [[Burgundy|Salon][$primaryTailColor = "burgundy"]] + | [[Chestnut|Salon][$primaryTailColor = "chestnut"]] + | [[Chocolate|Salon][$primaryTailColor = "chocolate brown"]] + | [[Copper|Salon][$primaryTailColor = "copper"]] + | [[Dark Blue|Salon][$primaryTailColor = "dark blue"]] + | [[Dark Brown|Salon][$primaryTailColor = "dark brown"]] + | [[Dark Orchid|Salon][$primaryTailColor = "dark orchid"]] + | [[Deep Red|Salon][$primaryTailColor = "deep red"]] + | [[Ginger|Salon][$primaryTailColor = "ginger"]] + | [[Golden|Salon][$primaryTailColor = "golden"]] + | [[Green-yellow|Salon][$primaryTailColor = "green-yellow"]] + | [[Green|Salon][$primaryTailColor = "green"]] + | [[Grey|Salon][$primaryTailColor = "grey"]] + | [[Hazel|Salon][$primaryTailColor = "hazel"]] + | [[Jet Black|Salon][$primaryTailColor = "jet black"]] + | [[Neon Blue|Salon][$primaryTailColor = "neon blue"]] + | [[Neon Green|Salon][$primaryTailColor = "neon green"]] + | [[Neon Pink|Salon][$primaryTailColor = "neon pink"]] + | [[Pink|Salon][$primaryTailColor = "pink"]] + | [[Platinum Blonde|Salon][$primaryTailColor = "platinum blonde"]] + | [[Purple|Salon][$primaryTailColor = "purple"]] + | [[Red|Salon][$primaryTailColor = "red"]] + | [[Sea Green|Salon][$primaryTailColor = "sea green"]] + | [[Silver|Salon][$primaryTailColor = "silver"]] + | [[Strawberry-Blonde|Salon][$primaryTailColor = "strawberry-blonde"]] + | [[White|Salon][$primaryTailColor = "white"]] + <br> + + Highlights: + [[None|Salon][$secondaryTailColor = ""]] + | [[Black|Salon][$secondaryTailColor = " with black highlights"]] + | [[Blazing Red|Salon][$secondaryTailColor = " with blazing red highlights"]] + | [[Blonde|Salon][$secondaryTailColor = " with blonde highlights"]] + | [[Grey|Salon][$secondaryTailColor = " with grey highlights"]] + | [[Neon Blue|Salon][$secondaryTailColor = " with neon blue highlights"]] + | [[Neon Green|Salon][$secondaryTailColor = " with neon green highlights"]] + | [[Neon Pink|Salon][$secondaryTailColor = " with neon pink highlights"]] + | [[Rainbow|Salon][$secondaryTailColor = " with rainbow highlights"]] + | [[Silver|Salon][$secondaryTailColor = " with silver highlights"]] + | [[White|Salon][$secondaryTailColor = " with white highlights"]] + + <<if $primaryTailColor != 0>> + <br> + [["Dye " + $his + " tail"|Salon][$activeSlave.tailColor = ($primaryTailColor + $secondaryTailColor),cashX(forceNeg($modCost), "slaveMod", $activeSlave), $primaryTailColor = 0, $secondaryTailColor = ""]] $primaryTailColor $secondaryTailColor now? + <</if>> +<</if>> + /* MARKS */ <<if ($activeSlave.markings == "beauty mark")>> diff --git a/src/uncategorized/slaveInteract.tw b/src/uncategorized/slaveInteract.tw index 59f61088b7b9bce28740fdc648baddb898113b51..01ee3a990bbfa90b6f1cd79db1222ed5fef2d8de 100644 --- a/src/uncategorized/slaveInteract.tw +++ b/src/uncategorized/slaveInteract.tw @@ -58,7 +58,7 @@ <br><br>__Take slave to another room:__ [[Wardrobe|Wardrobe Use][$degradation = 0]] -| [[Auto salon|Salon][$degradation = 0,$primaryHairColor = "",$secondaryHairColor = "",$artificialEyeColor = "",$artificialEyeShape = "",$artificialEyeFill = "",$tattooChoice = "",$piercingLevel = ""]] +| [[Auto salon|Salon][$degradation = 0,$primaryHairColor = "",$secondaryHairColor = "",$primaryEarColor = "",$secondaryEarColor = "",$primaryTailColor = "",$secondaryTailColor = "",$artificialEyeColor = "",$artificialEyeShape = "",$artificialEyeFill = "",$tattooChoice = "",$piercingLevel = ""]] | [[Body mod studio|Body Modification][$degradation = 0, $tattooChoice = undefined]] | [[Remote surgery|Remote Surgery][$degradation = 0]] <<if $cyberMod == 1>>| [[Configure cybernetics|cyberConfig][$temp = 0]]<</if>> diff --git a/src/uncategorized/surgeryDegradation.tw b/src/uncategorized/surgeryDegradation.tw index 13526fa2bfb38160685bcdd3e976a3ee5b793e97..59f1041b6a12010a3845f83291f921ce6ac2d0a7 100644 --- a/src/uncategorized/surgeryDegradation.tw +++ b/src/uncategorized/surgeryDegradation.tw @@ -416,8 +416,80 @@ As the remote surgery's long recovery cycle completes, <</if>> <<set $activeSlave.hears = 0>> -<<case "earShape">> - The ear surgery is @@.red;invasive@@ and $he spends some time in the autosurgery recovering. As soon as the bandages around $his head are removed, $he initially believes nothing has changed, but soon discovers $his ears have been reshaped. +<<case "earMinor">> + <<if $activeSlave.fetish == "mindbroken">> + $He shows little reaction to $his altered ears. The modification surgery is brief, with @@.red;nothing more than minor health effects.@@ + <<elseif ($activeSlave.devotion > 20)>> + <<if canSee($activeSlave)>>$He looks in the mirror and turns $his head side to side admiring $his new ears, <<else>>$He can't see but it's clear from the dull ache in $his ears that they have been modified, <</if>><<if $activeSlave.amp != 1>>they're still a bit sore, but $he reaches up to feel them gently,<</if>> $he turns to you with a smile, tilting $his head at various angles to show them off. $He seems to think $his new ears are @@.hotpink;cute.@@ The modification surgery is brief, with @@.red;nothing more than minor health effects.@@ + <<set $activeSlave.devotion += 4>> + <<elseif ($activeSlave.devotion >= -20)>> + <<if canSee($activeSlave)>>$He eyes $his new ears skeptically.<<else>>$He can't see but it's clear from the dull ache in $his ears that they have been modified.<</if>><<if $activeSlave.amp != 1>>$He's still a bit sore, but $he reaches up to feel them gently.<</if>>$He's come to terms with the fact that $he's a slave, so $he isn't much affected mentally despite the surprise of having $his ears reshaped. The modification surgery is brief, with @@.red;nothing more than minor health effects.@@ $He is @@.gold;sensibly fearful@@ of your total power over $his body. + <<set $activeSlave.trust -= 5>> + <<else>> + <<if canSee($activeSlave)>>$He eyes $his new ears with disdain.<<else>>$He can't see but it's clear from the dull ache in $his ears that they have been modified.<</if>><<if $activeSlave.amp != 1>>$He's still a bit sore, but $he reaches up to feel them gently, as if to confirm it's not some trick.<</if>> For now, @@.mediumorchid;$he seems to view $his altered ears as a cruel imposition.@@ The modification surgery is brief, with @@.red;nothing more than minor health effects.@@ $He is now @@.gold;terribly afraid@@ of your total power over $his body. + <<set $activeSlave.trust -= 10, $activeSlave.devotion -= 5>> + <</if>> + +<<case "earMajor">> + <<if $activeSlave.fetish == "mindbroken">> + $He shows little reaction to $his altered ears. Since the surgery was fairly invasive, @@.red;$his health has been greatly affected.@@ + <<elseif ($activeSlave.devotion > 50)>> + <<if canSee($activeSlave)>>$He looks in the mirror and turns $his head side to side admiring $his new ears and they immediately perk up surprising $him, <<else>>$He can't see but it's clear from the dull ache that $his ears have been extensively modified, <</if>><<if $activeSlave.amp != 1>>they're still a bit sore, but $he reaches up to feel them gently<</if>> $he turns to you with a smile, tilting $his head at various angles to show them off. $His new ears seem to respond to $his emotional state, with time and mild electro-stimulation $he will learn to control $his new ear muscles so $he can move them at will, for now $he seems to think $his new ears are @@.hotpink;cute.@@ Since the surgery was fairly invasive, @@.red;$his health has been greatly affected.@@ + <<set $activeSlave.devotion += 4>> + <<elseif ($activeSlave.devotion >= -20)>> + <<if canSee($activeSlave)>>$He eyes $his new ears disapprovingly, they lay back flat against $his head as if mirroring $his thoughts.<<else>>$He can't see but it's clear from the dull ache that $his ears have been extensively modified.<</if>><<if $activeSlave.amp != 1>>$He's still a bit sore, but $he reaches up to feel them gently.<</if>>$His new ears seem to respond to $his emotional state, with time and mild electro-stimulation $he will learn to control $his new ear muscles so $he can move them at will. $He's come to terms with the fact that $he's a slave, but $he is still somewhat angry that you would go this far. Since the surgery was fairly invasive, @@.red;$his health has been greatly affected.@@ $He is @@.gold;sensibly fearful@@ of your total power over $his body. + <<set $activeSlave.trust -= 5, $activeSlave.devotion -= 5>> + <<else>> + <<if canSee($activeSlave)>>$He eyes $his new ears with disgust, they lay back flat against $his head as if mirroring $his thoughts.<<else>>$He can't see but it's clear from the dull ache that $his ears have been extensively modified.<</if>><<if $activeSlave.amp != 1>>$He's still a bit sore, but $he reaches up to feel them gently.<</if>> $His new ears seem to respond to $his emotional state, with time and mild electro-stimulation $he will learn to control $his new ear muscles so $he can move them at will. For now, @@.mediumorchid;$he seems to view $his altered ears as a cruel imposition.@@ Since the surgery was fairly invasive, @@.red;$his health has been greatly affected.@@ $He is now @@.gold;terribly afraid@@ of your total power over $his body. + <<set $activeSlave.trust -= 10, $activeSlave.devotion -= 10>> + <</if>> + +<<case "earRestore">> + <<if $activeSlave.fetish == "mindbroken">> + $He shows little reaction to $his altered ears. Since the surgery was fairly invasive, @@.red;$his health has been greatly affected.@@ + <<else>>/*Will expand in future*/ + $He is delighted to have $his ears back. Since the surgery was fairly invasive, @@.red;$his health has been greatly affected.@@ + <</if>> + +<<case "earGone">> + <<if $activeSlave.fetish == "mindbroken">> + $He shows little reaction to $his altered ears. Since the surgery was fairly invasive, @@.red;$his health has been greatly affected.@@ + <<elseif ($activeSlave.devotion > 50)>> + She is horrified that you would disfigure her but ultimately accepts it since she is devoted to you. Since the surgery was fairly invasive, @@.red;$his health has been greatly affected.@@ + <<elseif ($activeSlave.devotion >= -20)>> + She is horrified that you would disfigure her, $he's come to terms with the fact that $he's a slave, but $he is still @@.mediumorchid;angry that you would go this far.@@ Since the surgery was fairly invasive, @@.red;$his health has been greatly affected.@@ $He is @@.gold;sensibly fearful@@ of your total power over $his body. + <<set $activeSlave.trust -= 10, $activeSlave.devotion -= 10>> + <<else>> + She is horrified that you would disfigure her and begins to weep openly as soon as $he discovers the loss.@@.mediumorchid;$He seems to consdier the loss as a cruel theft.@@ Since the surgery was fairly invasive, @@.red;$his health has been greatly affected.@@ $He is now @@.gold;terribly afraid@@ of your total power over $his body. + <<set $activeSlave.trust -= 20, $activeSlave.devotion -= 20>> + <</if>> + +<<case "horn">> + <<if $activeSlave.fetish == "mindbroken">> + $He shows little reaction to $his new head ornamentation. As with all invasive surgery @@.red;$his health has been affected.@@ + <<elseif ($activeSlave.devotion > 20)>> + <<if canSee($activeSlave)>>$He looks in the mirror and turns $his head side to side admiring $his new $activeSlave.hornColor $activeSlave.horn, <<else>>$He can't see but it's clear from the dull ache that something has been done to $his head, <</if>><<if $activeSlave.amp != 1>>the base is still a bit sore, but $he reaches up to feel their shape,<</if>> $he turns to you with a smile, tilting $his head at various angles to show them off. $He seems to think $his new horns are @@.hotpink;cute.@@ As with all invasive surgery @@.red;$his health has been affected.@@ + <<set $activeSlave.devotion += 4>> + <<elseif ($activeSlave.devotion >= -20)>> + <<if canSee($activeSlave)>>$He eyes $his new $activeSlave.hornColor $activeSlave.horn disapprovingly<<else>>$He can't see but it's clear from the dull ache that something has been done to $his head, <</if>><<if $activeSlave.amp != 1>>the base is still a bit sore, but $he reaches up to tug on them gently,<</if>>$He's come to terms with the fact that $he's a slave, so $he isn't much affected mentally despite the surprise of having horns attached to $his head. As with all invasive surgery @@.red;$his health has been affected.@@ $He is @@.gold;sensibly fearful@@ of your total power over $his body. + <<set $activeSlave.trust -= 5>> + <<else>> + <<if canSee($activeSlave)>>$He eyes $his new $activeSlave.hornColor $activeSlave.horn with disgust.<<else>>$He can't see but it's clear from the dull ache that something has been done to $his head, and probably not for the better, <</if>><<if $activeSlave.amp != 1>>the base is still a bit sore, but $he reaches up to tug on them, as if to confirm it's not some trick.<</if>> For now, @@.mediumorchid;$he seems to view $his head ornamentation as a cruel imposition.@@ As with all invasive surgery @@.red;$his health has been affected.@@ $He is now @@.gold;terribly afraid@@ of your total power over $his body. + <<set $activeSlave.trust -= 10, $activeSlave.devotion -= 5>> + <</if>> + +<<case "hornGone">> + <<if $activeSlave.fetish == "mindbroken">> + $He shows little reaction to the removal of $his head ornamentation. As with all invasive surgery @@.red;$his health has been affected.@@ + <<elseif ($activeSlave.devotion > 20)>> + $He is a little sad $his head ornaments are gone but since $he is attentive to your will it doesn't have a great impact on $his mental state. As with all invasive surgery @@.red;$his health has been affected.@@ + <<else>> + $He is glad to be rid of the horns but any happiness is tempered by $his general dissatisfaction of being treated as your surgical plaything. As with all invasive surgery @@.red;$his health has been affected.@@ $He is @@.gold;sensibly fearful@@ of your total power over $his body. + <<set $activeSlave.trust -= 5>> + <</if>> + +<<case "tailInterface">> + Implanting a tail socket and interfacing it with $his spinal column is delicate and invasive procedure @@.red;$his health has been greatly affected.@@ <<case "boobs">> <<if ($activeSlave.areolae < 2) && (random(1,100) > 70)>> diff --git a/src/uncategorized/walkPast.tw b/src/uncategorized/walkPast.tw index 0e1c3a087f2d7eac32fff89b562abbb5c77fb60d..42240dcc3d431742ea8a66c0b957878892b52c1d 100644 --- a/src/uncategorized/walkPast.tw +++ b/src/uncategorized/walkPast.tw @@ -3863,4 +3863,4 @@ <</switch>> <</if>> </span> -// +// \ No newline at end of file diff --git a/src/utility/descriptionWidgetsFlesh.tw b/src/utility/descriptionWidgetsFlesh.tw index 5086d6b54435d73b509722540f689d30964e2cc9..9459e4ece63071a00b228c03ce881a32c846b81d 100644 --- a/src/utility/descriptionWidgetsFlesh.tw +++ b/src/utility/descriptionWidgetsFlesh.tw @@ -5321,9 +5321,40 @@ $He's got a <<widget "earDescription">> /* ear shape description here */ -<<if $activeSlave.earShape == "elfin">> - $His $activeSlave.earShape ears are <<print either("elongated, ending in pointed tips that might wiggle when "+$he+"'s particularly pleased with something.", "long and thin, tapering to a point.", " leaf-shaped, and twitch with the slightest touch.")>> +<<if $activeSlave.earShape == "none">> + <<if $activeSlave.earImplant == 1>> + <<if $activeSlave.earT != "none">> + $He has smooth skin where $his ears should be as $his hearing has been cybernetically rerouted to $his secondary ears. + <<else>> + $He has nothing but small, perforated metal disks where $his ears should be. + <</if>> + <<else>> + $He has small unsightly holes on the sides of $his head. /*That can't be sanitary.*/ + <</if>> + <<elseif $activeSlave.earShape == "damaged">> + $His outer ears have been severely damaged. + <<elseif $activeSlave.earShape == "normal">> + $He has perfectly ordinary ears. + <<elseif $activeSlave.earShape == "robot">> + $He has high tech cyber-ears that could be mistaken for headphones. /*not yet implemented*/ + <<elseif $activeSlave.earShape == "pointy">> + $His small, <<print either("pointed", "leaf-shaped", "elfin")>> ears are quite cute and give her an exotic apearance. + <<elseif $activeSlave.earShape == "elven">> + $He has long, thin elven ears that <<print either("tend waggle up and down when $he is exicited", "twitch at the slightest touch", "tend to droop when $he is relaxed or sad")>>. + <<elseif $activeSlave.earShape == "ushi">> + $He has long, floppy cow ears that <<print either("tend waggle up and down when $he is exicited", "twitch at the slightest touch", "tend to droop when $he is relaxed or sad")>>. +<</if>> + +<<if $activeSlave.earT == "neko">> + $He has cute, $activeSlave.earTColor cat ears on $his head, they <<if $activeSlave.earImplant == 1>>perk up at<<if $activeSlave.devotion > 20>>the sound of your voice and<<else>>sudden noises and <</if>><</if>><<print either("twitch at the slightest touch", "tend to droop when $he is relaxed or sad")>> + <<elseif $activeSlave.earT == "inu">> + $He has cute, $activeSlave.earTColor dog ears on $his head, they <<if $activeSlave.earImplant == 1>>perk up at<<if $activeSlave.devotion > 20>>the sound of your voice and<<else>>sudden noises and <</if>><</if>><<print either("twitch at the slightest touch", "tend to droop when $he is relaxed or sad")>> + <<elseif $activeSlave.earT == "kit">> + $He has elegant, $activeSlave.earTColor fox ears on $his head, they <<if $activeSlave.earImplant == 1>>perk up at<<if $activeSlave.devotion > 20>>the sound of your voice and<<else>>sudden noises and <</if>><</if>><<print either("twitch at the slightest touch", "tend to droop when $he is relaxed or sad")>> + <<elseif $activeSlave.earT == "tanuki">> + $He has adorable, $activeSlave.earTColor, round tanuki ears on $his head, they <<if $activeSlave.earImplant == 1>>perk up at<<if $activeSlave.devotion > 20>>the sound of your voice and <<else>>sudden noises and <</if>><</if>><<print either("twitch at the slightest touch", "tend to droop when $he is relaxed or sad")>> <</if>> + <<if $activeSlave.hears < 0>> <<if $activeSlave.hears == -1>> $His hearing is noticeably impaired, @@ -5511,6 +5542,26 @@ $His <</widget>> +<<widget "hornDescription">> +<<if $activeSlave.horn == "curved succubus horns">> + $He has + <<if $activeSlave.face > 40>>majestic $activeSlave.hornColor horns that jut out from the back of $his head and curve forward, looking almost like a crown. + <<elseif $activeSlave.face > 0>>imposing $activeSlave.hornColor horns that jut out from the back of $his head and curve forward nicely. + <<else>>terrifying $activeSlave.hornColor horns that jut out from the back of $his head and curve forward menacingly.<</if>> + <<elseif $activeSlave.horn == "backswept horns">> + <<if $activeSlave.face > 40>>majestic $activeSlave.hornColor horns that jut out the front of $his head and curve backwards, like some royal headdress. + <<elseif $activeSlave.face > 0>>imposing $activeSlave.hornColor horns that jut out the front of $his head and curve backwards nicely. + <<else>>terrifying $activeSlave.hornColor horns that jut out the front of $his head and curve backwards, looking like some twisted helmet.<</if>> + <<elseif $activeSlave.horn == "cow horns">> + $He has two $activeSlave.hornColor cow horns on the sides of her head, they curve sharply upward. + <<elseif $activeSlave.horn == "two long oni horns">> + $He has two long $activeSlave.hornColor horns sticking straight up out of $his forehead<<if $activeSlave.devotion > 20>>$he holds them up proudly<</if>>. + <<elseif $activeSlave.horn == "one long oni horn">> + $He has a long $activeSlave.hornColor horn sticking straight up out of $his forehead<<if $activeSlave.devotion > 20>>$he holds it up proudly<</if>>. + <<elseif $activeSlave.horn == "small horns">> + $He has cute, little $activeSlave.hornColor horns sticking out of $his head. +<</if>> +<</widget>> <<widget "mouthDescription">> @@ -16868,6 +16919,23 @@ $He has <</if>> <</if>> +<<if $activeSlave.tailShape == "neko">> + $He has a long, slender, $activeSlave.tailColor cat tail which tends to sway side to side when $he is focused on a task. + <<elseif $activeSlave.tailShape == "inu">> + $He has a bushy, $activeSlave.tailColor dog tail which tends to wag energetically when $he gets exited. + <<elseif $activeSlave.tailShape == "kit">> + $He has a soft, fluffy, $activeSlave.tailColor fox tail. + <<elseif $activeSlave.tailShape == "kitsune">> + $He has three incredibly soft, fluffy, $activeSlave.tailColor fox tails, they feel heavenly to the touch. + <<elseif $activeSlave.tailShape == "tanuki">> + $He has a long, fluffy, $activeSlave.tailColor tanuki tail with a dark stripe running down the middle. + <<elseif $activeSlave.tailShape == "ushi">> + $He has a long, $activeSlave.tailColor cow tail, it has a small tuft of hair at the end and tends to swat at things absentminedly. + <<elseif $activeSlave.tail == "combat">> + $He has a very long $activeSlave.tailColor metallic tail that can lash out, constrict, and deploy razor sharp spikes on command. + <<elseif $activeSlave.tail == "sex">> + $He has a long, slender, $activeSlave.tailColor tail. While not strong it is very dextrous and has a small fleshy spade-shaped tip that can vibrate and dispense lube on command. +<</if>> <</widget>> <<widget "heightImplantDescription">>