diff --git a/src/art/webgl/contents.txt b/src/art/webgl/contents.txt index 0653f90fda9706580bfdfe2ea843ee97e8d23110..d2ce42bcb7a37ef9173872b6939757ba4b6a5b8b 100644 --- a/src/art/webgl/contents.txt +++ b/src/art/webgl/contents.txt @@ -105,71 +105,71 @@ poses ///////////////// MATERIALS ///////////////// general - eye color - hColor - makeup - fingernails + eye color + hColor + makeup + fingernails skin color - pure white (Ceridwen) - ivory (Ceridwen) - white (Ceridwen) - extremely pale (Celinette) - very pale (Celinette) - pale (Kimmy) - extremely fair (Kimmy) - very fair (Saffron) - fair (Saffron) - light (FemaleBase) - light olive (FemaleBase) - tan (Reagan) - olive (Kathy) - bronze (Mylou) - dark olive (Adaline) - dark (Daphne) - light beige (Minami) - beige (Tara) - dark beige (Topmodel) - light brown (Topmodel) - brown (Angelica) - dark brown (Angelica) - black (DarkSkin) - ebony (DarkSkin) - pure black (DarkSkin) + pure white (Ceridwen) + ivory (Ceridwen) + white (Ceridwen) + extremely pale (Celinette) + very pale (Celinette) + pale (Kimmy) + extremely fair (Kimmy) + very fair (Saffron) + fair (Saffron) + light (FemaleBase) + light olive (FemaleBase) + tan (Reagan) + olive (Kathy) + bronze (Mylou) + dark olive (Adaline) + dark (Daphne) + light beige (Minami) + beige (Tara) + dark beige (Topmodel) + light brown (Topmodel) + brown (Angelica) + dark brown (Angelica) + black (DarkSkin) + ebony (DarkSkin) + pure black (DarkSkin) dick color - pure white (WhiteFuta) - ivory (WhiteFuta) - white (WhiteFuta) - extremely pale (WhiteFuta) - very pale (WhiteFuta) - pale (WhiteFuta) - extremely fair (WhiteFuta) - very fair (LightFuta) - fair (LightFuta) - light (LightFuta) - light olive (LightFuta) - tan (MidFuta) - olive (MidFuta) - bronze (MidFuta) - dark olive (MidFuta) - dark (MidFuta) - light beige (MidFuta) - beige (MidFuta) - dark beige (DarkFuta) - light brown (DarkFuta) - brown (DarkFuta) - dark brown (DarkFuta) - black (DarkFuta) - ebony (DarkFuta) - pure black (DarkFuta) + pure white (WhiteFuta) + ivory (WhiteFuta) + white (WhiteFuta) + extremely pale (WhiteFuta) + very pale (WhiteFuta) + pale (WhiteFuta) + extremely fair (WhiteFuta) + very fair (LightFuta) + fair (LightFuta) + light (LightFuta) + light olive (LightFuta) + tan (MidFuta) + olive (MidFuta) + bronze (MidFuta) + dark olive (MidFuta) + dark (MidFuta) + light beige (MidFuta) + beige (MidFuta) + dark beige (DarkFuta) + light brown (DarkFuta) + brown (DarkFuta) + dark brown (DarkFuta) + black (DarkFuta) + ebony (DarkFuta) + pure black (DarkFuta) ///////////////// MESH ///////////////// General - genesis8 - vagina - dick + genesis8 + vagina + dick Hairstyle Neat (Samira) diff --git a/src/art/webgl/engine.js b/src/art/webgl/engine.js index 600932de4fda9d133a1b5cb58f14c469b961f4b5..57f7dff2e0c3b8ccd65790b4eb6296e749ee2bf4 100644 --- a/src/art/webgl/engine.js +++ b/src/art/webgl/engine.js @@ -3,8 +3,8 @@ App.Art.Engine = class { getVsSourceGeometry() { return `#version 300 es - uniform mat4 matModelViewProjection; - uniform mat4 matModelView; + uniform mat4 matModelViewProjection; + uniform mat4 matModelView; uniform mat4 matNormal; uniform mat4 matModelViewProjectionShadow; @@ -180,7 +180,7 @@ App.Art.Engine = class { float result = 0.0; float counts = 0.0; - for (float x = -blur; x <= blur; x++) + for (float x = -blur; x <= blur; x++) { for (float y = -blur; y <= blur; y++) { @@ -282,7 +282,7 @@ App.Art.Engine = class { getFsSourceForwardPass(dl, pl) { return `#version 300 es precision highp float; - + uniform float lightInt[${dl}]; uniform vec3 lightAmb[${dl}]; uniform vec3 lightColor[${dl}]; @@ -341,10 +341,10 @@ App.Art.Engine = class { uniform bool sSSS; uniform bool overlay; - - uniform vec3 cameraPos; - uniform sampler2D textSampler[10]; + uniform vec3 cameraPos; + + uniform sampler2D textSampler[10]; in vec2 textureCoord; in vec3 normal; @@ -441,8 +441,8 @@ App.Art.Engine = class { if (!gl_FrontFacing) new_normal = -normal; - vec3 map_Ka = vec3(0.0,0.0,0.0); - vec3 map_Ks = vec3(0.0,0.0,0.0); + vec3 map_Ka = vec3(0.0,0.0,0.0); + vec3 map_Ks = vec3(0.0,0.0,0.0); vec3 map_Ke = vec3(0.0,0.0,0.0); float map_d = 1.0; float ao = 1.0; @@ -456,7 +456,7 @@ App.Art.Engine = class { coord = vec2(coord.x * cos(angle) - coord.y * sin(angle), coord.x * sin(angle) + coord.y * cos(angle)); coord = coord / scale; coord = coord + vec2(0.5, 0.5); - + if (sAlpha) map_d = d * texture(textSampler[1], coord).r; @@ -469,12 +469,12 @@ App.Art.Engine = class { } if (sNormal) { - vec3 map_Kn = texture(textSampler[5], coord).rgb *2.0-1.0; - if (map_Kn != vec3(-1.0,-1.0,-1.0)) { + vec3 map_Kn = texture(textSampler[5], coord).rgb *2.0-1.0; + if (map_Kn != vec3(-1.0,-1.0,-1.0)) { mat3 TBN = createTBNMatrix(pos, textureCoord, new_normal); new_normal = normalize(TBN * map_Kn); } - } + } if (sSSAO) ao = texture(textSampler[0], vec2(gl_FragCoord.x, gl_FragCoord.y) / resolution).r; @@ -483,17 +483,17 @@ App.Art.Engine = class { iao = texture(textSampler[9], vec2(gl_FragCoord.x, gl_FragCoord.y) / resolution).r; if (sAlbedo) - map_Ka = Ka * texture(textSampler[2], coord).rgb; + map_Ka = Ka * texture(textSampler[2], coord).rgb; map_Ka += 0.0001; - if (sSpecular) { - map_Ks = Ks * texture(textSampler[3], coord).rgb; + if (sSpecular) { + map_Ks = Ks * texture(textSampler[3], coord).rgb; roughness = r * texture(textSampler[6], coord).r; metallic = m * texture(textSampler[7], coord).r; } if (sEmission) - map_Ke = Ke * texture(textSampler[4], coord).rgb; + map_Ke = Ke * texture(textSampler[4], coord).rgb; if (sShadows) { vec3 projCoords = shadowMap.xyz/shadowMap.w * 0.5 + 0.5; @@ -505,14 +505,14 @@ App.Art.Engine = class { { for(int y = -1; y <= 1; ++y) { - float pcfDepth = texture(textSampler[8], projCoords.xy + vec2(x, y) * texelSize).r; + float pcfDepth = texture(textSampler[8], projCoords.xy + vec2(x, y) * texelSize).r; shadow += currentDepth - bias < pcfDepth ? 0.0 : 1.0; - } + } } shadow /= 9.0; shadow = 1.0 - min(shadow * shadowIntensity, 1.0); } - + // material parameters vec3 albedo = pow(map_Ka, vec3(2.2)); ao = pow(ao, ssaoInt); @@ -524,7 +524,7 @@ App.Art.Engine = class { // reflectance equation vec3 Lo = vec3(0.0); vec3 Le = map_Ke; - for (int i = 0; i < ${dl}; i++) { + for (int i = 0; i < ${dl}; i++) { if (lightInt[i] <= 0.0) continue; @@ -534,18 +534,18 @@ App.Art.Engine = class { vec3 radiance = lightColor[i] * lightInt[i]; // cook-torrance brdf - float NDF = distributionGGX(N, H, roughness); - float G = geometrySmith(N, V, L, roughness); + float NDF = distributionGGX(N, H, roughness); + float G = geometrySmith(N, V, L, roughness); vec3 F = fresnelSchlickRoughness(max(dot(H, V), 0.0), F0, roughness); - + vec3 numerator = NDF * G * F; float denominator = 4.0 * max(dot(N, V), 0.0) * max(dot(N, L), 0.0) + 0.00001; vec3 specular = numerator / denominator; // kS is equal to Fresnel vec3 kD = vec3(1.0) - F; - kD *= 1.0 - min(metallic, 0.9999); - + kD *= 1.0 - min(metallic, 0.9999); + // add to outgoing radiance Lo float NdotL = max(dot(N, L), 0.0); if (map_d >= 0.85 || overlay) { @@ -583,10 +583,10 @@ App.Art.Engine = class { vec3 radiance = pointLightColor[i] * pointLightInt[i]; // cook-torrance brdf - float NDF = distributionGGX(N, H, roughness); - float G = geometrySmith(N, V, L, roughness); + float NDF = distributionGGX(N, H, roughness); + float G = geometrySmith(N, V, L, roughness); vec3 F = fresnelSchlickRoughness(max(dot(H, V), 0.0), F0, roughness); - + vec3 numerator = NDF * G * F; float denominator = 4.0 * max(dot(N, V), 0.0) * max(dot(N, L), 0.0) + 0.00001; vec3 specular = numerator / denominator; @@ -594,7 +594,7 @@ App.Art.Engine = class { // kS is equal to Fresnel vec3 kD = vec3(1.0) - F; kD *= 1.0 - min(metallic, 0.9999); - + // add to outgoing radiance Lo float NdotL = max(dot(N, L), 0.0); if (map_d >= 0.85 || overlay) { @@ -620,16 +620,16 @@ App.Art.Engine = class { } else { Lo += La; } - } + } vec3 c = (Lo + Le); if (sReinhard) { - float l_old = 0.2126*c.r+0.7152*c.g+0.0722*c.b; - float numerator = l_old * (1.0 + (l_old / (whiteM*whiteM))); - float l_new = numerator / (1.0 + l_old); - c = c * (l_new / l_old); + float l_old = 0.2126*c.r+0.7152*c.g+0.0722*c.b; + float numerator = l_old * (1.0 + (l_old / (whiteM*whiteM))); + float l_new = numerator / (1.0 + l_old); + c = c * (l_new / l_old); } if (sUchimura) { @@ -637,10 +637,10 @@ App.Art.Engine = class { } if (sGamma) - c = pow(c, vec3(1.0/gammaY)); - - if (sNormals) - c = new_normal*0.5+0.5; + c = pow(c, vec3(1.0/gammaY)); + + if (sNormals) + c = new_normal*0.5+0.5; if (sAO) c = vec3(ao); @@ -1742,7 +1742,7 @@ App.Art.Engine = class { let f = i.toString(); if (parent === '') { - tree.roots.push(f); + tree.roots.push(f); continue; } diff --git a/src/events/RE/reNickname.js b/src/events/RE/reNickname.js index 63adb21caa0a9db31a2858a58d642ed98ee86cdb..e87c92ad5786f57f46f845c9a6197a0fc3447a20 100644 --- a/src/events/RE/reNickname.js +++ b/src/events/RE/reNickname.js @@ -9,7 +9,7 @@ App.Events.RENickname = class RENickname extends App.Events.BaseEvent { return [[ // one actor (s) => (V.week - s.weekAcquired) >= 4, // owned for at least four weeks (s) => s.assignment !== Job.ARCADE, // not immured in the arcade - (s) => s.fuckdoll === 0, // not in a fuckdoll suit + (s) => s.fuckdoll === 0, // not in a Fuckdoll suit (s) => !s.slaveName.toLowerCase().includes("'"), // doesn't have a nickname yet (s) => this.getQualifiedNicknames(s).size > 0 // qualifies for at least one nickname category ]]; diff --git a/src/events/nonRandom/pAidResult.js b/src/events/nonRandom/pAidResult.js index 1753645d214ec5af3a6e2489833c00cf9fa59e09..7882f1e68ce43da45bc76975ffed1ae716fe9df0 100644 --- a/src/events/nonRandom/pAidResult.js +++ b/src/events/nonRandom/pAidResult.js @@ -456,11 +456,11 @@ App.Events.pAidResult = class pAidResult extends App.Events.BaseEvent { const {he2, his2, him2, girl2} = getPronouns(missLoli).appendSuffix("2"); r.push(`In any case, you've enslaved a fine group. The women will clean up nicely and are already accustomed to being raped and abused, so they should bear the transition to slave life reasonably well. The leader is a little older than the rest and clearly has been pregnant several times given the sag to ${his} breasts and the stretch marks coating ${his} swollen belly; it's clear ${he} has a rape baby growing inside ${him}. The next two are younger, but no better off; one is hugely pregnant and the other shows signs of a recent birth. The last, however, is the most eye-catching;`); if (V.minimumSlaveAge < 8 && V.fertilityAge < 8) { - r.push(`${he2} is just a little ${girl2} and a massively pregnant one at that. The leader was right to worry about ${his2} well-being, there is no way ${he2} would survive giving birth.`); + r.push(`${he2} is just a little ${girl2} and a massively pregnant one at that. The leader was right to worry about ${his2} well-being; there is no way ${he2} would survive giving birth.`); } else if (V.fertilityAge < 18 && V.minimumSlaveAge < 18) { - r.push(`${he2} is in no way prepared to be as pregnant as ${he2} is. The leader was right to worry about ${his2} well-being, birth is going to be a struggle for ${him2}.`); + r.push(`${he2} is in no way prepared to be as pregnant as ${he2} is. The leader was right to worry about ${his2} well-being; birth is going to be a struggle for ${him2}.`); } else { - r.push(`${his2} stomach has already dropped and ${he2} clearly has no experience with pregnancy. The leader was right to worry about ${his2} well-being, ${his2} body is ill-suited for childbirth.`); + r.push(`${his2} stomach has already dropped and ${he2} clearly has no experience with pregnancy. The leader was right to worry about ${his2} well-being; ${his2} body is ill-suited for childbirth.`); } } else { r.push(`In any case, you've enslaved a fine group. The women seem to have banded together when they were left to fend for themselves in their suburban neighborhood. They're older than many slaves, but they seem to have had rich husbands; they're conventionally pretty, and have lived soft lives that have left them healthy.`); diff --git a/src/events/scheduled/seRaiding.js b/src/events/scheduled/seRaiding.js index e94dcba6b7a683799aeeb0f07c27be649ddf785f..34aae3e09ffab79f05258ff5367d752f8dc26ee5 100644 --- a/src/events/scheduled/seRaiding.js +++ b/src/events/scheduled/seRaiding.js @@ -465,7 +465,7 @@ App.Events.SERaiding = class SERaiding extends App.Events.BaseEvent { slave.skill.anal = 0; slave.skill.oral = 0; slave.skill.whoring = 0; - slave.skill.combat =70; + slave.skill.combat = 70; slave.intelligence = random(20, 60); slave.intelligenceImplant = 15; slave.hStyle = either("buzzcut", "bun", "shaved", "neat"); diff --git a/src/gui/Encyclopedia/encyclopedia.js b/src/gui/Encyclopedia/encyclopedia.js index 9f8ff835e0d6d7f71cb4d2e5ed98be8b9106e7c4..f46c242bea316ddc81671d534d32c9f8ecb3128f 100644 --- a/src/gui/Encyclopedia/encyclopedia.js +++ b/src/gui/Encyclopedia/encyclopedia.js @@ -9,9 +9,9 @@ App.Encyclopedia.ui = function() { if (!["How to Play", "Table of Contents", "Credits"].includes(V.encyclopedia)) { // special pages where we don't show related links if (![ - "Being in Charge", "Body", "Fetishes", "Mods/Pregmod", "Inflation", - "Leadership Positions", "Loli Mode", "Lore", "Obtaining Slaves", "Paraphilias", - "Playing Free Cities", "Skills", "Slave Assignments", "Slave Modification", "Slaves", + "Being in Charge", "Body", "Fetishes", "Mods/Pregmod", "Inflation", + "Leadership Positions", "Loli Mode", "Lore", "Obtaining Slaves", "Paraphilias", + "Playing Free Cities", "Skills", "Slave Assignments", "Slave Modification", "Slaves", "Terrain Types", "The X-Series Arcology" ].includes(V.encyclopedia)) { // pages asking the player to click a link for more information have no section heading App.UI.DOM.appendNewElement("h3", f, "Related Links", ["center"]); diff --git a/src/gui/Encyclopedia/encyclopediaFutureSocities.js b/src/gui/Encyclopedia/encyclopediaFutureSocities.js index 400cd32701ac2a23cee4de66cc268686a179fd45..b9e55545697844d5660acc6a198aee618f45fe1b 100644 --- a/src/gui/Encyclopedia/encyclopediaFutureSocities.js +++ b/src/gui/Encyclopedia/encyclopediaFutureSocities.js @@ -7,7 +7,7 @@ App.Encyclopedia.addArticle("Future Societies", function() { ], "div", ["note"]); App.Events.addNode(t, [ - "Not since antiquity have single persons held as much practical power over the direction of society as Free Cities arcology owners now have.", + "Not since antiquity have single persons held as much practical power over the direction of society as Free Cities arcology owners now have.", "Naturally, different Free Cities notables are going different ways with their great power.", "Many are building new societies as different from each other as they are from the old world." ], "div", ["note"]); @@ -28,7 +28,7 @@ App.Events.addNode(t, [ ], "p"); App.Events.addNode(t, [ - "All societies approve of specific things, usually slaves with specific characteristics; some societies also have dislikes.", + "All societies approve of specific things, usually slaves with specific characteristics; some societies also have dislikes.", "All societies are advanced by the things they approve of and slowed by the things they disapprove of, and all societies give and take", App.Encyclopedia.link("reputation", "Arcologies and Reputation", "green"), "when approving and disapproving.", "All societies unlock unique events, arcology upgrades, and slave behaviors; some even unlock special clothing." ], "p"); @@ -358,7 +358,7 @@ App.Encyclopedia.addArticle("Eugenics Focus", function() { App.Events.addNode(t, ["Is mutually exclusive with", App.UI.DOM.combineNodes(App.Encyclopedia.link("Repopulation Focus", "Repopulationism"), ".")]); App.Events.addNode(t, ["It is made up of four to five social classes: Slaves, low class citizens, chosen slaves, elite citizens, and the Societal Elite: a group of individuals with vast connections and wealth attracted by the promises of a society built around them. Low class citizens are encouraged to face testing and join the ranks of the elite, though the cost of failing the test is sterilization; a detail that is not revealed until after the test is complete."], "div", ["indent"]); App.Events.addNode(t, [ - "Eugenics is a difficult Future Society and not recommended for beginners.", + "Eugenics is a difficult Future Society and not recommended for beginners.", "For a more complete guide to playing with a Eugenics arcology, see the", App.UI.DOM.combineNodes(App.Encyclopedia.link("Guide to Eugenics"), ".") ], "p", ["note", "yellow"]); return t; @@ -505,7 +505,7 @@ App.Encyclopedia.addArticle("Hedonistic Decadence Research", function() { "Advanced Hedonistic Decadence societies can purchase plans for specialized slave food.", "Said food is shaped to resemble actual food and flavored accordingly, however, its texture can only be described as gooey or gummy.", "A plus if that is how the food should be, but a shocker otherwise, given how tantalizing that steak looks after nothing but liquid slave food for so long.", - "Since the food is essentially compacted liquid slave food, it is highly addictive thanks to the, typically, low presence of aphrodisiacs and can easily lead to excessive", App.Encyclopedia.link("weight gain", "Weight"), "as slaves are driven to gorge themselves on it.", + "Since the food is essentially compacted liquid slave food, it is highly addictive thanks to the, typically, low presence of aphrodisiacs and can easily lead to excessive", App.Encyclopedia.link("weight gain", "Weight"), "as slaves are driven to gorge themselves on it.", "They'll be happy, at least, as they steadily outgrow their clothes.", "Alterations to the recipe exist to prevent", App.Encyclopedia.link("weight gain", "Weight"), "for Slimness Enthusiast societies and to cause gastric distress in Degradationist societies." ], "div"); @@ -517,7 +517,7 @@ App.Encyclopedia.addCategory("FutureSocities", function() { const vanilla = []; const modded = []; const research = []; - + vanilla.push(App.Encyclopedia.link("Ethnic Supremacy")); vanilla.push(App.Encyclopedia.link("Ethnic Subjugationism")); vanilla.push(App.Encyclopedia.link("Gender Radicalism")); @@ -539,7 +539,7 @@ App.Encyclopedia.addCategory("FutureSocities", function() { vanilla.push(App.Encyclopedia.link("Edo Revivalism")); vanilla.push(App.Encyclopedia.link("Arabian Revivalism")); vanilla.push(App.Encyclopedia.link("Chinese Revivalism")); - + modded.push(App.Encyclopedia.link("Repopulationism")); modded.push(App.Encyclopedia.link("Eugenics Focus")); modded.push(App.Encyclopedia.link("Slave Professionalism")); @@ -549,7 +549,7 @@ App.Encyclopedia.addCategory("FutureSocities", function() { modded.push(App.Encyclopedia.link("Hedonistic Decadence")); modded.push(App.Encyclopedia.link("Aztec Revivalism")); modded.push(App.Encyclopedia.link("Neo-Imperialism")); - + research.push(App.Encyclopedia.link("Gender Radicalism Research")); research.push(App.Encyclopedia.link("Slave Professionalism Research")); research.push(App.Encyclopedia.link("Transformation Fetishism Research")); @@ -557,7 +557,7 @@ App.Encyclopedia.addCategory("FutureSocities", function() { research.push(App.Encyclopedia.link("Slimness Enthusiast Research")); research.push(App.Encyclopedia.link("Youth Preferentialism Research")); research.push(App.Encyclopedia.link("Hedonistic Decadence Research")); - + if (V.encyclopedia !== "Future Societies") { App.Events.addNode(t, ["Future Societies"], "div"); } diff --git a/src/gui/Encyclopedia/encyclopediaMods.js b/src/gui/Encyclopedia/encyclopediaMods.js index 9b29336d23742207f994eb9be55b65033f53efd2..eeb918e939e7ce337c6b6b1c0645e7602e70043b 100644 --- a/src/gui/Encyclopedia/encyclopediaMods.js +++ b/src/gui/Encyclopedia/encyclopediaMods.js @@ -283,7 +283,7 @@ App.Encyclopedia.addArticle("The Incubation Facility", function() { const r = new SpacedTextAccumulator(f); r.push("A facility used to rapidly age children kept within its aging tanks using a combination of growth hormones, accelerants, stem cells and other chemicals; slaves that come out of it are rarely healthy. The Incubator requires a massive amount of electricity to run, though once powered contains a battery backup that can last at least a day. It can be upgraded to combat malnutrition and thinness caused by a body growing far beyond any natural rate. Hormones can also be added to encourage puberty and even sex organ development. Growth control systems include cost saving overrides, though enabling them may result in bloated, sex crazed slaves barely capable of moving."); r.toNode("div"); - + App.Events.addNode(f, ["Please click", App.Encyclopedia.link("here", "Facilities Overview"), "for an overview of other facilities."], "p"); return f; }, "Mods"); diff --git a/src/gui/Encyclopedia/encyclopediaSlaveLeaders.js b/src/gui/Encyclopedia/encyclopediaSlaveLeaders.js index 121af433a42d4e229b298d5219e2140f14223f75..71e8088a12dd9371069991a34918b0d7851006a8 100644 --- a/src/gui/Encyclopedia/encyclopediaSlaveLeaders.js +++ b/src/gui/Encyclopedia/encyclopediaSlaveLeaders.js @@ -12,23 +12,23 @@ App.Encyclopedia.addArticle("Career Experience", function() { const trust = (text = "trust") => link(text, "Trust", "mediumaquamarine"); /** @type {[string, HTMLElement, string, string?][]} */ const careerData = [ - ["Grateful", trust(), "grateful"], - ["Menial", devotion(), "menial"], - ["Servant", link("keeping your estate", "Servitude"), "servant"], - ["Entertainment", link("public service", "Public Service"), "entertainment", "If a slave has a lot of entertainment experience, she can qualify for this bonus without career experience."], - ["Sex work", link("whoring"), "entertainment", "If a slave is very sexually experienced, she can qualify for this bonus without career experience."], - ["Leadership", link("Head Girl"), "HG"], - ["Procuring", link("Madam"), "madam"], - ["Musical", link("DJ"), "DJ"], - ["Defensive", link("Bodyguard"), "bodyguard"], - ["Convincing", link("Recruiter"), "recruiter"], - ["Security", link("Wardeness"), "wardeness"], - ["Medical", link("Nurse"), "nurse"], - ["Counseling", link("Attendant"), "attendant"], - ["Nannying", link("Matron"), "matron"], - ["Accounting", link("Stewardess"), "stewardess"], - ["Husbandry", link("Milkmaid"), "milkmaid"], - ["Farming", link("Farmer"), "farmer"], + ["Grateful", trust(), "grateful"], + ["Menial", devotion(), "menial"], + ["Servant", link("keeping your estate", "Servitude"), "servant"], + ["Entertainment", link("public service", "Public Service"), "entertainment", "If a slave has a lot of entertainment experience, she can qualify for this bonus without career experience."], + ["Sex work", link("whoring"), "entertainment", "If a slave is very sexually experienced, she can qualify for this bonus without career experience."], + ["Leadership", link("Head Girl"), "HG"], + ["Procuring", link("Madam"), "madam"], + ["Musical", link("DJ"), "DJ"], + ["Defensive", link("Bodyguard"), "bodyguard"], + ["Convincing", link("Recruiter"), "recruiter"], + ["Security", link("Wardeness"), "wardeness"], + ["Medical", link("Nurse"), "nurse"], + ["Counseling", link("Attendant"), "attendant"], + ["Nannying", link("Matron"), "matron"], + ["Accounting", link("Stewardess"), "stewardess"], + ["Husbandry", link("Milkmaid"), "milkmaid"], + ["Farming", link("Farmer"), "farmer"], ["Teaching", link("Schoolteacher"), "schoolteacher"], ]; const t = new DocumentFragment(); diff --git a/src/pregmod/eliteBreedingExam.js b/src/pregmod/eliteBreedingExam.js index 5e4ff6f2e4550dd790f431ef30e36089d6e1a749..6c00773e2f19d75303e7bef8d9c04d9a52283c75 100644 --- a/src/pregmod/eliteBreedingExam.js +++ b/src/pregmod/eliteBreedingExam.js @@ -14,7 +14,7 @@ App.Interact.eliteBreedingExam = function(slave = null) { `Failures will be sterilized. Please make sure your slave fits the following criteria before submitting them for testing. We shall not be held responsible for time wasted.`, ); if (!slave) { - r.push(`The slave must not be inside a fuckdoll suit, infertile or already pregnant.`); + r.push(`The slave must not be inside a Fuckdoll suit, infertile, or already pregnant.`); } else { r.push(`${slave.slaveName} is up for review:`); }