diff --git a/devTools/types/FC/human.d.ts b/devTools/types/FC/human.d.ts index b7fdcf8e73f9e11ae975c6761a44f4350c5a167d..fe3d6fccb4ae98573d3c13627bc43b0f30f23a9a 100644 --- a/devTools/types/FC/human.d.ts +++ b/devTools/types/FC/human.d.ts @@ -257,8 +257,8 @@ declare global { "breast redistributors" | "butt redistributors" | "sag-B-gone" | "growth stimulants" | "stimulants"; type EarWear = WithNone<"hearing aids" | "muffling ear plugs" | "deafening ear plugs">; - type EarShape = WithNone<"damaged" | "normal" | "pointy" | "elven" | "ushi" | "robot">; - type EarTypeKemonomimi = WithNone<"normal" | "neko" | "inu" | "kit" | "tanuki" | "usagi">; + type EarShape = WithNone<"damaged" | "normal" | "pointy" | "elven" | "cow" | "robot" | "orcish" | "sheep" | "deer" | "gazelle" | "bird" | "dragon">; + type EarTypeKemonomimi = WithNone<"normal" | "cat" | "leopard" | "tiger" | "dog" | "wolf" | "jackal" | "fox" | "tanuki" | "raccoon" | "rabbit" | "squirrel"| "horse">; type EyebrowStyle = "bald" | "curved" | "elongated" | "high-arched" | "natural" | "rounded" | "shaved" | "shortened" | "slanted inwards" | "slanted outwards" | "straight"; type EyebrowThickness = "pencil-thin" | "thin" | "threaded" | "natural" | "tapered" | "thick" | "bushy"; @@ -283,7 +283,7 @@ declare global { type InflationLiquid = WithNone<"water" | "cum" | "milk" | "food" | "aphrodisiac" | "curative" | "tightener" | "urine" | "stimulant">; type TailType = WithNone<"mod" | "combat" | "sex">; type Markings = WithNone<"beauty mark" | "birthmark" | "freckles" | "heavily freckled">; - type TailShape = WithNone<"neko" | "inu" | "kit" | "kitsune" | "tanuki" | "ushi" | "usagi" | "risu" | "uma">; + type TailShape = WithNone<"cat" | "leopard" | "tiger" | "dog" | "jaguar" | "lion" | "wolf" | "jackal" | "fox" | "kitsune" | "tanuki" | "raccoon" | "rabbit" | "squirrel" | "horse" | "bird" | "phoenix" | "peacock" | "raven" | "swan" | "sheep" | "cow" | "gazelle" | "deer" | "succubus" | "dragon" >; type ToyHole = "all her holes" | "mouth" | "boobs" | "pussy" | "ass" | "dick"; type OvaryImplantType = 0 | "fertility" | "sympathy" | "asexual"; type NippleShape = "huge" | "puffy" | "inverted" | "tiny" | "cute" | "partially inverted" | "fuckable" | "flat"; diff --git a/js/003-data/dictionary.js b/js/003-data/dictionary.js new file mode 100644 index 0000000000000000000000000000000000000000..7ab039156b9b329f9827be8c5e46d86183100afb --- /dev/null +++ b/js/003-data/dictionary.js @@ -0,0 +1,23 @@ +App.Data.dictionary = { + "cat": { + Japanese: "neko" + }, + "dog": { + Japanese: "inu" + }, + "fox": { + Japanese: "kit" + }, + "cow": { + Japanese: "ushi" + }, + "rabbit": { + Japanese: "usagi" + }, + "squirrel": { + Japanese: "risu" + }, + "horse": { + Japanese: "uma" + }, +}; diff --git a/js/003-data/slaveProstheticsData.js b/js/003-data/slaveProstheticsData.js index 80b89c1a22a502648eaed8ba15b60c75a3faf90c..da6ed9f59d761a89e0737907f8ed1d8ce6f0d3ca 100644 --- a/js/003-data/slaveProstheticsData.js +++ b/js/003-data/slaveProstheticsData.js @@ -149,15 +149,32 @@ App.Data.prosthetics = { * @type {Map<FC.TailShape, {animal: string, desc: string}>} */ App.Data.modTails = new Map([ - ["neko", {animal: "Cat", desc: "a long, slender cat tail"}], - ["inu", {animal: "Dog", desc: "a bushy dog tail"}], - ["kit", {animal: "Fox", desc: "a soft, fluffy fox tail"}], - ["kitsune", {animal: "Kitsune", desc: "three incredibly soft, fluffy fox tails"}], + ["cat", {animal: "Cat", desc: "a long, slender cat tail"}], + ["leopard", {animal: "Leopard", desc: "a long, fluffy leopard tail"}], + ["tiger", {animal: "Tiger", desc: "a long, fluffy tiger tail"}], + ["jaguar", {animal: "Jaguar", desc: "a long, fluffy jaguar tail"}], + ["lion", {animal: "Lion", desc: "a long, slender lion tail"}], + ["dog", {animal: "Dog", desc: "a bushy dog tail"}], + ["wolf", {animal: "Wolf", desc: "a long and fluffy wolf tail"}], + ["jackal", {animal: "Jackal", desc: "a bushy jackal tail"}], + ["fox", {animal: "Fox", desc: "a soft, fluffy fox tail"}], + ["kitsune", {animal: "Kitsune", desc: "nine incredibly soft, fluffy fox tails"}], ["tanuki", {animal: "Tanuki", desc: "a long, fluffy tanuki tail"}], - ["ushi", {animal: "Cow", desc: "a long cow tail"}], - ["usagi", {animal: "Rabbit", desc: "a short rabbit tail"}], - ["risu", {animal: "Squirrel", desc: "a large squirrel tail"}], - ["uma", {animal: "Horse", desc: "a long horse tail"}] + ["raccoon", {animal: "Raccoon", desc: "a long, fluffy raccoon tail"}], + ["rabbit", {animal: "Rabbit", desc: "a short rabbit tail"}], + ["squirrel", {animal: "Squirrel", desc: "a large squirrel tail"}], + ["horse", {animal: "Horse", desc: "a long horse tail"}], + ["bird", {animal: "Bird", desc: "a bundle of tail feathers"}], + ["phoenix", {animal: "Phoenix", desc: "a magnificent bundle of luminescent tail feathers"}], + ["peacock", {animal: "Peacock", desc: "a gorgeous bundle of peacock tail feathers"}], + ["raven", {animal: "Raven", desc: "a bundle of crow tail feathers"}], + ["swan", {animal: "Swan", desc: "a small bundle of short swan tail feathers"}], + ["sheep", {animal: "Sheep", desc: "a short, woolly sheep's tail"}], + ["cow", {animal: "Cow", desc: "a long cow tail"}], + ["gazelle", {animal: "Gazelle", desc: "a short, silky gazelle tail"}], + ["deer", {animal: "Deer", desc: "a short deer tail"}], + ["succubus", {animal: "Succubus", desc: "a long, slender succubus tail"}], + ["dragon", {animal: "Dragon", desc: "a long, thick dragon tail"}] ]); /** diff --git a/js/medicine/surgery/ears/earMajor.js b/js/medicine/surgery/ears/earMajor.js index b4bfe5dcefac98d9149ab04c75295cc22045dd15..600a306762597df262f51ae8783b00b42bb72076 100644 --- a/js/medicine/surgery/ears/earMajor.js +++ b/js/medicine/surgery/ears/earMajor.js @@ -77,17 +77,15 @@ App.Medicine.Surgery.Procedures.EarMajorReshape = class extends App.Medicine.Sur App.Medicine.Surgery.Procedures.TopEarReshape = class extends App.Medicine.Surgery.Procedure { /** * @param {App.Entity.SlaveState} slave - * @param {string} shapeName * @param {FC.EarTypeKemonomimi} newShape */ - constructor(slave, shapeName, newShape) { + constructor(slave, newShape) { super(slave); - this.shapeName = shapeName; - this.targetShape = newShape; + this.newShape = newShape; } get name() { - return `Reshape into ${this.shapeName} ears`; + return `Reshape into ${this.newShape} ears`; } get healthCost() { @@ -95,7 +93,7 @@ App.Medicine.Surgery.Procedures.TopEarReshape = class extends App.Medicine.Surge } apply(cheat) { - this._slave.earT = this.targetShape; + this._slave.earT = this.newShape; return this._assemble(new App.Medicine.Surgery.Reactions.EarMajor()); } }; diff --git a/src/002-config/fc-version.js b/src/002-config/fc-version.js index 2d224c4f0d002ddaf93a01cb8c4577db6abf50c6..4e33ea4c9dbc5ec7f461dd0ddd8bfe5f87b5d7b3 100644 --- a/src/002-config/fc-version.js +++ b/src/002-config/fc-version.js @@ -2,5 +2,5 @@ App.Version = { base: "0.10.7.1", // The vanilla version the mod is based off of, this should never be changed. pmod: "4.0.0-alpha.8", commitHash: null, - release: 1140 // When getting close to 2000, please remove the check located within the onLoad() function defined at line five of src/js/eventHandlers.js. + release: 1141 // When getting close to 2000, please remove the check located within the onLoad() function defined at line five of src/js/eventHandlers.js. }; diff --git a/src/Mods/Catmod/events/CMREFS/refsTotallyLegitCatgirls.js b/src/Mods/Catmod/events/CMREFS/refsTotallyLegitCatgirls.js index a981b6c91b82f25746b3d9192eda7e668cdf2914..d505ca800d872d8a3e7f7f6a45ec0120cfdcda61 100644 --- a/src/Mods/Catmod/events/CMREFS/refsTotallyLegitCatgirls.js +++ b/src/Mods/Catmod/events/CMREFS/refsTotallyLegitCatgirls.js @@ -8,7 +8,7 @@ App.Events.refsTotallyLegitCatgirls = class refsTotallyLegitCatgirls extends App execute(node) { const slave = GenerateNewSlave("XX", {minAge: 16, maxAge: 24}); slave.origin = "You purchased $him from a reputable street merchant selling you completely legitimate catgirls."; - slave.tailShape = "neko"; + slave.tailShape = "cat"; slave.tailColor = slave.hColor; slave.collar = "uncomfortable leather"; slave.clothes = "kitty lingerie"; diff --git a/src/Mods/Catmod/events/nonRandom/projectNComplete.js b/src/Mods/Catmod/events/nonRandom/projectNComplete.js index f8047469b776c712062ce17964868b3882d268ff..c695bdc02fbdeb1cc8483fc40cec141e40b119df 100644 --- a/src/Mods/Catmod/events/nonRandom/projectNComplete.js +++ b/src/Mods/Catmod/events/nonRandom/projectNComplete.js @@ -32,10 +32,10 @@ App.Events.SEProjectNComplete = class SEProjectNComplete extends App.Events.Base slave.trust = 30; slave.boobs = 300; slave.earShape = "none"; - slave.earT = "neko"; + slave.earT = "cat"; slave.earTColor = slave.hColor; slave.earImplant = 1; - slave.tailShape = "neko"; + slave.tailShape = "cat"; slave.tailColor = slave.hColor; slave.eye.left.pupil = "catlike"; slave.eye.right.pupil = "catlike"; diff --git a/src/Mods/Catmod/events/reRecruit/punkFemcat.js b/src/Mods/Catmod/events/reRecruit/punkFemcat.js index 2a12b1cc7bf086af27e14fca9e968fb841f33b75..ae701669bd0167977aad83810addf22af32bbd71 100644 --- a/src/Mods/Catmod/events/reRecruit/punkFemcat.js +++ b/src/Mods/Catmod/events/reRecruit/punkFemcat.js @@ -78,10 +78,10 @@ App.Events.recPunkFemcat = class recPunkFemcat extends App.Events.BaseEvent { slave.devotion = random(-55, -40); slave.trust = random(-20, 10); slave.earShape = "none"; - slave.earT = "neko"; + slave.earT = "cat"; slave.earTColor = slave.hColor; slave.earImplant = 1; - slave.tailShape = "neko"; + slave.tailShape = "cat"; slave.tailColor = slave.hColor; slave.eye.left.pupil = "catlike"; slave.eye.right.pupil = "catlike"; diff --git a/src/Mods/Catmod/events/reRecruit/punkSissycat.js b/src/Mods/Catmod/events/reRecruit/punkSissycat.js index be2f278af0e8c720150abe01e95b468f2c8a0b4a..23dbc235c0d0d729db9b6679ee9e7f84f69d4f3f 100644 --- a/src/Mods/Catmod/events/reRecruit/punkSissycat.js +++ b/src/Mods/Catmod/events/reRecruit/punkSissycat.js @@ -78,10 +78,10 @@ App.Events.recPunkSissycat = class recPunkSissycat extends App.Events.BaseEvent slave.devotion = random(-55, -40); slave.trust = random(-20, 10); slave.earShape = "none"; - slave.earT = "neko"; + slave.earT = "cat"; slave.earTColor = slave.hColor; slave.earImplant = 1; - slave.tailShape = "neko"; + slave.tailShape = "cat"; slave.tailColor = slave.hColor; slave.eye.left.pupil = "catlike"; slave.eye.right.pupil = "catlike"; diff --git a/src/Mods/Catmod/events/reRecruit/runawayCat.js b/src/Mods/Catmod/events/reRecruit/runawayCat.js index 1526605e6eac5f34d4b15fe467901d630740cd85..9b887667d5271742192cd624232f37f19cb7bb37 100644 --- a/src/Mods/Catmod/events/reRecruit/runawayCat.js +++ b/src/Mods/Catmod/events/reRecruit/runawayCat.js @@ -81,10 +81,10 @@ App.Events.recRunawayCat = class recRunawayCat extends App.Events.BaseEvent { slave.devotion = random(-25, -10); slave.trust = random(-25, -10); slave.earShape = "none"; - slave.earT = "neko"; + slave.earT = "cat"; slave.earTColor = slave.hColor; slave.earImplant = 1; - slave.tailShape = "neko"; + slave.tailShape = "cat"; slave.tailColor = slave.hColor; slave.eye.left.pupil = "catlike"; slave.eye.right.pupil = "catlike"; diff --git a/src/Mods/Catmod/events/scheduled/vatcatboy.js b/src/Mods/Catmod/events/scheduled/vatcatboy.js index b9fde211ffb82f82d94532c1cd902dd722035460..8f68775b6a28ed1b0b4c14a2c548ee4d1c9f14e3 100644 --- a/src/Mods/Catmod/events/scheduled/vatcatboy.js +++ b/src/Mods/Catmod/events/scheduled/vatcatboy.js @@ -23,10 +23,10 @@ App.Events.SEVatCatBoy = class SEVatCatBoy extends App.Events.BaseEvent { slave.devotion = 20; slave.trust = 30; slave.earShape = "none"; - slave.earT = "neko"; + slave.earT = "cat"; slave.earTColor = slave.hColor; slave.earImplant = 1; - slave.tailShape = "neko"; + slave.tailShape = "cat"; slave.tailColor = slave.hColor; slave.eye.left.pupil = "catlike"; slave.eye.right.pupil = "catlike"; diff --git a/src/Mods/Catmod/events/scheduled/vatcatgirl.js b/src/Mods/Catmod/events/scheduled/vatcatgirl.js index 48d6e2e281a3790f565e6e9e220585a28a762179..97127918aeccc8550f9dd198e6a45e91f5376fd6 100644 --- a/src/Mods/Catmod/events/scheduled/vatcatgirl.js +++ b/src/Mods/Catmod/events/scheduled/vatcatgirl.js @@ -23,10 +23,10 @@ App.Events.SEVatCatGirl = class SEVatCatGirl extends App.Events.BaseEvent { slave.trust = 30; slave.earShape = "none"; slave.teeth = "fangs"; - slave.earT = "neko"; + slave.earT = "cat"; slave.earTColor = slave.hColor; slave.earImplant = 1; - slave.tailShape = "neko"; + slave.tailShape = "cat"; slave.tailColor = slave.hColor; slave.eye.left.pupil = "catlike"; slave.eye.right.pupil = "catlike"; diff --git a/src/art/vector/VectorArtJS.js b/src/art/vector/VectorArtJS.js index 507ed00a944e734503190c94e0e5c5bbe7b50e32..972d206f27b63d1c798f8ae116fa7d52212b5dda 100644 --- a/src/art/vector/VectorArtJS.js +++ b/src/art/vector/VectorArtJS.js @@ -2042,10 +2042,10 @@ App.Art.vectorArtElement = (function() { break; } switch (slave.earT) { - case "neko": + case "cat": svgQueue.add("Art_Vector_Cat_Ear_Back"); break; - case "kit": + case "fox": svgQueue.add("Art_Vector_Fox_Ear_Back"); break; } diff --git a/src/data/backwardsCompatibility/updateSlaveObject.js b/src/data/backwardsCompatibility/updateSlaveObject.js index 468e070aafe771687413089cda7e443890742383..a970e9b4f597f281e5069e2fb645fbb3ecb19a23 100644 --- a/src/data/backwardsCompatibility/updateSlaveObject.js +++ b/src/data/backwardsCompatibility/updateSlaveObject.js @@ -1020,14 +1020,39 @@ App.Update.Slave = function(slave, genepool = false) { } else { WombInit(slave); } - if (V.releaseID < 1036) { - for (let pmw = 0; pmw < slave.womb.length; pmw++) { - if (slave.womb[pmw].genetics.mother !== slave.womb[pmw].motherID || slave.womb[pmw].genetics.father !== slave.womb[pmw].fatherID) { - slave.womb[pmw].genetics = generateGenetics(slave, slave.womb[pmw].fatherID, pmw); + if (V.releaseID <= 1141) { + const animalMap = new Map([ + ["neko", "cat"], + ["inu", "dog"], + ["kit", "fox"], + ["ushi", "cow"], + ["usagi", "rabbit"], + ["risu", "squirrel"], + ["uma", "horse"], + ]); + const tail = animalMap.get(slave.tailShape); + if (tail) { + slave.tailShape = tail; + } + const earShape = animalMap.get(slave.earShape); + if (earShape) { + slave.earShape = earShape; + } + const earT = animalMap.get(slave.earT); + if (earT) { + slave.earT = earT; + } + + if (V.releaseID < 1036) { + for (let pmw = 0; pmw < slave.womb.length; pmw++) { + if (slave.womb[pmw].genetics.mother !== slave.womb[pmw].motherID || slave.womb[pmw].genetics.father !== slave.womb[pmw].fatherID) { + slave.womb[pmw].genetics = generateGenetics(slave, slave.womb[pmw].fatherID, pmw); + } } } } + if (!jsDef(slave.inbreedingCoeff)) { slave.inbreedingCoeff = ibc.coeff(slave); slave.womb.forEach(f => { diff --git a/src/facilities/nursery/utils/nurseryUtils.js b/src/facilities/nursery/utils/nurseryUtils.js index 616f13542dd39c5faecb42931acff435d3d1157c..249c1cf68b187eb24a13c1ad782d6117596658f8 100644 --- a/src/facilities/nursery/utils/nurseryUtils.js +++ b/src/facilities/nursery/utils/nurseryUtils.js @@ -178,7 +178,7 @@ App.Facilities.Nursery.infantToChild = function infantToChild(child) { if (child.race === "catgirl") { child.earImplant = 1; child.earShape = "none"; - child.earT = "neko"; + child.earT = "cat"; child.earTColor = child.hColor; } child.earPiercing = 0; @@ -344,7 +344,7 @@ App.Facilities.Nursery.infantToChild = function infantToChild(child) { child.tailShape = "none"; } else { child.tailColor = child.hColor; - child.tailShape = "neko"; + child.tailShape = "cat"; } child.tastes = 0; child.teeth = "baby"; diff --git a/src/facilities/surgery/surgeryPassageFaceAndHair.js b/src/facilities/surgery/surgeryPassageFaceAndHair.js index 5e1c69ab709dea8c2cf4d29cd79b2e29f481b748..94a72735b55ed9d95fd7fa373081f5f07e6747ee 100644 --- a/src/facilities/surgery/surgeryPassageFaceAndHair.js +++ b/src/facilities/surgery/surgeryPassageFaceAndHair.js @@ -397,16 +397,16 @@ App.UI.surgeryPassageHairAndFace = function(slave, refreshParent, cheat = false) } else { r.push(`a pair of ears grafted to the top of ${his} head.`); } - } else if (slave.earT === "neko") { - r.push(`a pair of cat ears adorning ${his} head.`); - } else if (slave.earT === "inu") { - r.push(`a pair of dog ears adorning ${his} head.`); - } else if (slave.earT === "kit") { - r.push(`a pair of fox ears adorning ${his} head.`); + } else if (slave.earT === "cat") { + r.push(`a pair of ${App.Utils.translate("cat")} ears adorning ${his} head.`); + } else if (slave.earT === "dog") { + r.push(`a pair of ${App.Utils.translate("dog")} ears adorning ${his} head.`); + } else if (slave.earT === "fox") { + r.push(`a pair of ${App.Utils.translate("fox")} ears adorning ${his} head.`); } else if (slave.earT === "tanuki") { r.push(`a pair of tanuki ears adorning ${his} head.`); - } else if (slave.earT === "usagi") { - r.push(`a pair of rabbit ears adorning ${his} head.`); + } else if (slave.earT === "rabbit") { + r.push(`a pair of ${App.Utils.translate("rabbit")} ears adorning ${his} head.`); } else { r.push(`You done goofed.`); r.push(`<span class="note">Report This</span>`); @@ -420,29 +420,29 @@ App.UI.surgeryPassageHairAndFace = function(slave, refreshParent, cheat = false) new App.Medicine.Surgery.Procedures.RemoveTopEars(slave), refresh, cheat)); } - if (slave.earT !== "neko") { + if (slave.earT !== "cat") { linkArray.push(App.Medicine.Surgery.makeLink( - new App.Medicine.Surgery.Procedures.TopEarReshape(slave, "cat", "neko"), + new App.Medicine.Surgery.Procedures.TopEarReshape(slave, "cat"), refresh, cheat)); } - if (slave.earT !== "inu") { + if (slave.earT !== "dog") { linkArray.push(App.Medicine.Surgery.makeLink( - new App.Medicine.Surgery.Procedures.TopEarReshape(slave, "dog", "inu"), + new App.Medicine.Surgery.Procedures.TopEarReshape(slave, "dog"), refresh, cheat)); } - if (slave.earT !== "kit") { + if (slave.earT !== "fox") { linkArray.push(App.Medicine.Surgery.makeLink( - new App.Medicine.Surgery.Procedures.TopEarReshape(slave, "fox", "kit"), + new App.Medicine.Surgery.Procedures.TopEarReshape(slave, "fox"), refresh, cheat)); } if (slave.earT !== "tanuki") { linkArray.push(App.Medicine.Surgery.makeLink( - new App.Medicine.Surgery.Procedures.TopEarReshape(slave, "tanuki", "tanuki"), + new App.Medicine.Surgery.Procedures.TopEarReshape(slave, "tanuki"), refresh, cheat)); } - if (slave.earT !== "usagi") { + if (slave.earT !== "rabbit") { linkArray.push(App.Medicine.Surgery.makeLink( - new App.Medicine.Surgery.Procedures.TopEarReshape(slave, "rabbit", "usagi"), + new App.Medicine.Surgery.Procedures.TopEarReshape(slave, "rabbit"), refresh, cheat)); } if (slave.earTColor === "hairless") { diff --git a/src/interaction/prostheticConfig.js b/src/interaction/prostheticConfig.js index 2515fba7e7edf4564e865f8663918f590caaa307..f30399b22fab2778a4ec79ec1d64fe4b85bed78d 100644 --- a/src/interaction/prostheticConfig.js +++ b/src/interaction/prostheticConfig.js @@ -561,23 +561,23 @@ App.UI.prostheticsConfigPassage = function() { V.nextLink = "Prosthetics Configuration"; App.UI.DOM.appendNewElement("div", node, `Attaching ${his} tail is a simple procedure, you simply push the connector into a socket, right where ${his} tailbone ends, until the lock engages.`); r.push(`When you are done, ${he} looks back and`); - if (slave.tailShape === "neko") { + if (slave.tailShape === "cat") { r.push(`sways ${his} tail side to side enigmatically.`); - } else if (slave.tailShape === "inu") { + } else if (slave.tailShape === "dog") { r.push(`wags ${his} tail side to side energetically.`); - } else if (slave.tailShape === "kit") { + } else if (slave.tailShape === "fox") { r.push(`slowly sways ${his} tail feeling the soft fur brush against ${his} skin.`); } else if (slave.tailShape === "kitsune") { r.push(`slowly sways ${his} tails luxuriating in the incredibly soft, fluffy fur brushing against ${his} skin.`); } else if (slave.tailShape === "tanuki") { r.push(`admires ${his} long, thick fluffy tail.`); - } else if (slave.tailShape === "ushi") { + } else if (slave.tailShape === "cow") { r.push(`swats ${himself} playfully.`); - } else if (slave.tailShape === "usagi") { + } else if (slave.tailShape === "rabbit") { r.push(`wiggles ${his} little tail a bit.`); - } else if (slave.tailShape === "risu") { + } else if (slave.tailShape === "squirrel") { r.push(`admires ${his} the size of ${his} fluffy tail.`); - } else if (slave.tailShape === "uma") { + } else if (slave.tailShape === "horse") { r.push(`sways ${his} tail back and forth.`); } else if (slave.tail === "combat") { r.push(`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.`); diff --git a/src/js/SlaveState.js b/src/js/SlaveState.js index 49427dc95f0210cbe70ba6b88113e90c16db3901..82683585a5636ad5b3e6b1ce9b8a6d4d6ac360ce 100644 --- a/src/js/SlaveState.js +++ b/src/js/SlaveState.js @@ -729,7 +729,7 @@ App.Entity.SlaveState = class SlaveState { * @type {FC.EarShape} */ this.earShape = "normal"; /** type of kemonomimi ears if any - * "neko", "inu", "kit", "tanuki", "usagi" + * "cat", "dog", "fox", "tanuki", "cow" * @type {FC.EarTypeKemonomimi}*/ this.earT = "none"; /** kemonomimi ear color @@ -759,7 +759,7 @@ App.Entity.SlaveState = class SlaveState { */ this.PTail = 0; /** the current shape of their modular tail - * "none", "neko", "inu", "kit", "kitsune", "tanuki", "ushi", "usagi", "risu", "uma" + * "none", "cat", "dog", "fox", "kitsune", "tanuki", "cow", "rabbit", "squirrel", "horse" * @type {FC.TailShape} */ this.tailShape = "none"; /** tail color */ diff --git a/src/js/utilsMisc.js b/src/js/utilsMisc.js index 0163e91779ada368b3fd2c2266e13afe92324029..785c43193716c604a335a3edbca188d13b828ce5 100644 --- a/src/js/utilsMisc.js +++ b/src/js/utilsMisc.js @@ -169,3 +169,13 @@ globalThis.asSlave = function(human) { } return /** @type {App.Entity.SlaveState} */(human); }; + +/** + * @param {string} englishWord + * @returns {string} + */ +App.Utils.translate = function(englishWord) { + return App.Data.dictionary[englishWord] && App.Data.dictionary[englishWord].hasOwnProperty(V.language) + ? App.Data.dictionary[englishWord][V.language] + : englishWord; +}; diff --git a/src/npc/descriptions/butt/butt.js b/src/npc/descriptions/butt/butt.js index a2d34410c752eaf8fa965f8f876a69ed9c1efe6a..837a26cb1e7879c6655dac712b86b6e3b5f27a10 100644 --- a/src/npc/descriptions/butt/butt.js +++ b/src/npc/descriptions/butt/butt.js @@ -1270,24 +1270,24 @@ App.Desc.butt = function(slave, {market, eventDescription} = {}) { } } - if (slave.tailShape === "neko") { - r.push(`${He} has a long, slender, ${slave.tailColor} cat tail which tends to sway side to side when ${he} is focused on a task.`); - } else if (slave.tailShape === "inu") { - r.push(`${He} has a bushy, ${slave.tailColor} dog tail which tends to wag energetically when ${he} gets exited.`); - } else if (slave.tailShape === "kit") { - r.push(`${He} has a soft, fluffy, ${slave.tailColor} fox tail.`); + if (slave.tailShape === "cat") { + r.push(`${He} has a long, slender, ${slave.tailColor} ${App.Utils.translate("cat")} tail which tends to sway side to side when ${he} is focused on a task.`); + } else if (slave.tailShape === "dog") { + r.push(`${He} has a bushy, ${slave.tailColor} ${App.Utils.translate("dog")} tail which tends to wag energetically when ${he} gets exited.`); + } else if (slave.tailShape === "fox") { + r.push(`${He} has a soft, fluffy, ${slave.tailColor} ${App.Utils.translate("fox")} tail.`); } else if (slave.tailShape === "kitsune") { r.push(`${He} has three incredibly soft, fluffy, ${slave.tailColor} fox tails; they feel heavenly to the touch.`); } else if (slave.tailShape === "tanuki") { r.push(`${He} has a long, fluffy, ${slave.tailColor} tanuki tail with a dark stripe running down the middle.`); - } else if (slave.tailShape === "ushi") { - r.push(`${He} has a long, ${slave.tailColor} cow tail; it has a small tuft of hair at the end and tends to swat at things absentmindedly.`); - } else if (slave.tailShape === "usagi") { - r.push(`${He} has a short and fluffy ${slave.tailColor} rabbit tail.`); - } else if (slave.tailShape === "risu") { - r.push(`${He} has a big and bushy ${slave.tailColor} squirrel tail.`); - } else if (slave.tailShape === "uma") { - r.push(`${He} has a long horse tail consisting of consisting of ${slave.tailColor} hair.`); + } else if (slave.tailShape === "cow") { + r.push(`${He} has a long, ${slave.tailColor} ${App.Utils.translate("cow")} tail; it has a small tuft of hair at the end and tends to swat at things absentmindedly.`); + } else if (slave.tailShape === "rabbit") { + r.push(`${He} has a short and fluffy ${slave.tailColor} ${App.Utils.translate("rabbit")} tail.`); + } else if (slave.tailShape === "squirrel") { + r.push(`${He} has a big and bushy ${slave.tailColor} ${App.Utils.translate("squirrel")} tail.`); + } else if (slave.tailShape === "horse") { + r.push(`${He} has a long ${App.Utils.translate("horse")} tail consisting of consisting of ${slave.tailColor} hair.`); } else if (slave.tail === "combat") { r.push(`${He} has a very long ${slave.tailColor} metallic tail that can lash out, constrict, and deploy razor sharp spikes on command.`); } else if (slave.tail === "sex") { diff --git a/src/npc/descriptions/ears.js b/src/npc/descriptions/ears.js index d0a1d0a3096aba94291624706288ff83d0e69162..6a0cbb48b44147019d164ae6ec6b97fc1613ae96 100644 --- a/src/npc/descriptions/ears.js +++ b/src/npc/descriptions/ears.js @@ -38,12 +38,12 @@ App.Desc.ears = function(slave) { r.push(`${His} small, ${either("elfin", "leaf-shaped", "pointed")} ears are quite cute and give ${him} an exotic appearance.`); } else if (slave.earShape === "elven") { r.push(`${He} has long, thin elven ears that ${either(`tend to droop when ${he} is relaxed or sad`, `tend to waggle up and down when ${he} is excited`, `twitch at the slightest touch`)}.`); - } else if (slave.earShape === "ushi") { + } else if (slave.earShape === "cow") { r.push(`${He} has long, floppy cow ears.`); // that ${either(`tend to droop when ${he} is relaxed or sad`, `tend waggle up and down when ${he} is excited`, `twitch at the slightest touch`)}. These don't make sense for the most part. } - if (slave.earT === "neko") { - r.push(`${He} has cute, ${slave.earTColor} cat ears on ${his} head; they`); + if (slave.earT === "cat") { + r.push(`${He} has cute, ${slave.earTColor} ${App.Utils.translate("cat")} ears on ${his} head; they`); if (slave.earImplant === 1) { r.push(`perk up at`); if (slave.devotion > 20) { @@ -53,8 +53,8 @@ App.Desc.ears = function(slave) { } } r.push(`${either(`tend to droop when ${he} is relaxed or sad`, `twitch at the slightest touch`)}.`); - } else if (slave.earT === "inu") { - r.push(`${He} has cute, ${slave.earTColor} dog ears on ${his} head; they`); + } else if (slave.earT === "dog") { + r.push(`${He} has cute, ${slave.earTColor} ${App.Utils.translate("dog")} ears on ${his} head; they`); if (slave.earImplant === 1) { r.push(`perk up at`); if (slave.devotion > 50) { @@ -64,8 +64,8 @@ App.Desc.ears = function(slave) { } } r.push(`${either(`tend to droop when ${he} is relaxed or sad`, `twitch at the slightest touch`)}.`); - } else if (slave.earT === "kit") { - r.push(`${He} has elegant, ${slave.earTColor} fox ears on ${his} head; they`); + } else if (slave.earT === "fox") { + r.push(`${He} has elegant, ${slave.earTColor} ${App.Utils.translate("fox")} ears on ${his} head; they`); if (slave.earImplant === 1) { r.push(`perk up at`); if (slave.devotion > 50) { @@ -86,8 +86,8 @@ App.Desc.ears = function(slave) { } } r.push(`${either(`tend to droop when ${he} is relaxed or sad`, `twitch at the slightest touch`)}.`); - } else if (slave.earT === "usagi") { - r.push(`${He} has long, ${slave.earTColor}, fluffy rabbit ears on ${his} head; they`); + } else if (slave.earT === "rabbit") { + r.push(`${He} has long, ${slave.earTColor}, fluffy ${App.Utils.translate("rabbit")} ears on ${his} head; they`); if (slave.earImplant === 1) { r.push(`perk up at`); if (slave.devotion > 50) { diff --git a/src/npc/generate/generateGenetics.js b/src/npc/generate/generateGenetics.js index 5479ccf07f51610dc39d18abf8fd06bddf6a7032..d4d9417c87ee3760c4a05327b97f2a1d794c4140 100644 --- a/src/npc/generate/generateGenetics.js +++ b/src/npc/generate/generateGenetics.js @@ -1084,9 +1084,9 @@ globalThis.generateChild = function(mother, ovum, incubator = false) { } else { child.earImplant = 1; child.earShape = "none"; - child.earT = "neko"; + child.earT = "cat"; child.earTColor = child.hColor; - child.tailShape = "neko"; + child.tailShape = "cat"; child.tailColor = child.hColor; } if (genes.faceShape !== undefined) { @@ -1153,9 +1153,9 @@ globalThis.generateChild = function(mother, ovum, incubator = false) { } else { child.earImplant = 1; child.earShape = "none"; - child.earT = "neko"; + child.earT = "cat"; child.earTColor = child.hColor; - child.tailShape = "neko"; + child.tailShape = "cat"; child.tailColor = child.hColor; } child.spermY = genes.spermY; diff --git a/src/npc/generate/generateNewSlaveJS.js b/src/npc/generate/generateNewSlaveJS.js index 1d57f5dd45f5c97d8dd32fc963f0438a36479a94..9a3c477f74ac669a608036124b06e0da6aca005e 100644 --- a/src/npc/generate/generateNewSlaveJS.js +++ b/src/npc/generate/generateNewSlaveJS.js @@ -1559,9 +1559,9 @@ globalThis.GenerateNewSlave = (function() { slave.faceShape = "feline"; eyeColor(["light grey", "blue", "blue", "brown", "brown", "brown", "green"]); // nonfunctional // - slave.earT = "neko"; + slave.earT = "cat"; slave.earImplant = 1; - slave.tailShape = "neko"; + slave.tailShape = "cat"; slave.tailColor = slave.hColor; slave.eye.right.pupil = "catlike"; slave.eye.left.pupil = "catlike"; diff --git a/src/npc/startingGirls/startingGirls.js b/src/npc/startingGirls/startingGirls.js index de37d45c7e061af9fa63143be5e5f2a6362f8a4d..389d06e49d30dc0b9de0211c29e31217505ae903 100644 --- a/src/npc/startingGirls/startingGirls.js +++ b/src/npc/startingGirls/startingGirls.js @@ -826,15 +826,15 @@ App.StartingGirls.physical = function(slave, cheat = false) { options.addOption("Tail shape", "tailShape", slave) .addValueList([ ["None", "none"], - ["Cat", "neko"], - ["Dog", "inu"], - ["Fox", "kit"], + ["Cat", "cat"], + ["Dog", "dog"], + ["Fox", "fox"], ["3 Tailed fox", "kitsune"], ["Tanuki", "tanuki"], - ["Bovine", "ushi"], - ["Rabbit", "usagi"], - ["Squirrel", "risu"], - ["Horse", "uma"], + ["Bovine", "cow"], + ["Rabbit", "rabbit"], + ["Squirrel", "squirrel"], + ["Horse", "horse"], ]); } } diff --git a/src/player/js/PlayerState.js b/src/player/js/PlayerState.js index aad6102cbb8c1368de648799396ed559ca5bc7e0..3720a7b32fcd50aa1f151e3184cff83c745906aa 100644 --- a/src/player/js/PlayerState.js +++ b/src/player/js/PlayerState.js @@ -428,7 +428,7 @@ App.Entity.PlayerState = class PlayerState { * "none", "damaged", "normal", "pointy", "elven", "ushi" */ this.earShape = "normal"; /** type of kemonomimi ears if any - * "neko", "inu", "kit", "tanuki", "usagi" */ + * "cat", "dog", "fox", "tanuki", "cow" */ this.earT = "none"; /** kemonomimi ear color * "hairless" */ @@ -454,7 +454,7 @@ App.Entity.PlayerState = class PlayerState { */ this.PTail = 0; /** the current shape of your modular tail - * "none", "neko", "inu", "kit", "kitsune", "tanuki", "ushi", "usagi", "risu", "uma" */ + * "none", "cat", "dog", "fox", "kitsune", "tanuki", "cow", "rabbit", "squirrel", "horse" this.tailShape = "none"; /** tail color */ this.tailColor = "none";