diff --git a/src/npc/interaction/fSuckDick.js b/src/npc/interaction/fSuckDick.js index cf96c17f227623ca0b21680dfcda8a5efca8f024..b0bbb3b885c1f2f82b0b7f081834cbc1035203fb 100644 --- a/src/npc/interaction/fSuckDick.js +++ b/src/npc/interaction/fSuckDick.js @@ -74,6 +74,26 @@ App.Interact.fSuckDick = function(slave) { dickAdj = "hypertrophied"; } + let lips; + let lipsLong = "thin lips"; + if (V.PC.lips <= 10) { + lips = "thin "; + } else if (V.PC.lips <= 20) { + lips = "attractive "; + } else if (V.PC.lips <= 40) { + lips = "full "; + } else if (V.PC.lips <= 70) { + lips = "plump "; + } else if (V.PC.lips <= 95) { + lips = "huge cartoon "; + } else { + lips = "puffy pussy-like "; + } + if (V.PC.lips > 10) { + lipsLong = lips + (V.PC.lipsImplant > 0 ? "fake lips" : "natural lips"); + } + lips += "lips"; + let r = []; if (canWalk(slave) || (canMove(slave) && slave.rules.mobility === "permissive")) { @@ -91,16 +111,11 @@ App.Interact.fSuckDick = function(slave) { r.push(`You have ${slave.slaveName} brought into your office and placed on the floor.`); } - r.push(`After ${he} is situated, you go over to`); - if (slave.clothes !== "no clothing") { - r.push(`${him} and begin to peel off ${his} clothing, to which ${he}`); - if (slave.devotion > 50) { - r.push(`gives you a soft smile.`); - } else { - r.push(`gives you an angry glare.`); - } + r.push(`After ${he} is situated, you go over to ${him} and admire ${his} naked body, licking your ${lipsLong}. ${He}`); + if (slave.devotion > 50) { + r.push(`gives you a soft smile.`); } else { - r.push(`${him}.`); + r.push(`gives you an angry glare.`); } if (hasAnyLegs(slave)) { @@ -112,7 +127,7 @@ App.Interact.fSuckDick = function(slave) { } else { r.push(`You kneel`); } - r.push(`in front of ${his} crotch and take the shaft of ${his} ${dickAdj} dick`); + r.push(`in front of ${his} crotch, take the shaft of ${his} ${dickAdj} dick`); if (slave.dick > 6) { r.push(`with both hands`); } else if (slave.dick >2) { @@ -175,17 +190,17 @@ App.Interact.fSuckDick = function(slave) { } else if (disobedience(slave) === 0) { r.push(`${He} nods.`); } else { - r.push(`${He} smiles.`) + r.push(`${He} smiles slyly.`) } r.push(`You go down on ${him} again, this time`); if (slave.foreskin > 0) { - r.push(`pursing your lips, taking the tip of ${his} member with them and sliding ${his} foreskin back, while playing with your tongue on the glans.`); + r.push(`pursing your ${lips}, taking the tip of ${his} member with them and sliding ${his} foreskin back, while playing with your tongue on the glans.`); } else { - r.push(`encircling the tip of ${his} member with your lips and letting the glans slide slowly into your mouth, while playing with your tongue.`); + r.push(`encircling the tip of ${his} member with your ${lips} and letting the glans slide slowly into your mouth, while playing with your tongue.`); } - r.push(`Once the glans is inside your mouth, you start to bob your head up and down, every time a little further, until`); + r.push(`Once the glans is inside your mouth, you start to slowly bob your head up and down, every time a little further, until`); if (slave.dick > 7) { r.push(`all ${his} gigantic cockhead occupies your whole buccal cavity.`); } else if (slave.dick > 5) { @@ -204,7 +219,7 @@ App.Interact.fSuckDick = function(slave) { if (slave.dick > 2) { r.push(`while holding ${his} dick with your left hand, with the other`); } - r.push(`you put two fingers ${his} anus to reach ${his} prostate and massage it.`); + r.push(`you put two fingers in ${his} anus to reach ${his} prostate and massage it.`); } else if (canDoVaginal(slave)) { // Slaves with non-virgin vagina and no chastity belt if (slave.dick > 2) { r.push(`while holding ${his} dick with your left hand, with the other`); @@ -214,8 +229,8 @@ App.Interact.fSuckDick = function(slave) { } else { r.push(`you rudely fistfuck ${his} loose vagina.`); } - } else if (slave.balls > 0) { // Slaves with balls - if (slave.dick > 2) { + } else if (slave.balls > 0) { // Slaves with balls outside the abdomen + if (slave.dick > 2 && slave.scrotum > 0) { r.push(`while holding ${his} dick with your left hand, with the other`); } r.push(`you fondle ${his} ${nutte}.`); @@ -225,7 +240,7 @@ App.Interact.fSuckDick = function(slave) { App.Events.addParagraph(node, r); r = []; - r.push(`After the first impression, you burst out laughing, while ${he} remains on the ground, ${slave.fetish === Fetish.MINDBROKEN ? "trembling with fear" : "letting out the rest of the pee"}. It is clear that it is not ${his} fault, ${he} has tried to fulfill your wishes in the best way that ${he} could, but you have not chosen with good judgment the right slave to give ${him} a blowjob. In any case, what happened cannot be left without an adequate punishment.`); + r.push(`After the first impression, you burst out laughing, while ${he} remains on the ground, ${slave.fetish === Fetish.MINDBROKEN ? "letting out the rest of the pee" : "trembling with fear"}. It is clear that it is not ${his} fault, ${he} has tried to fulfill your wishes in the best way that ${he} could, but you have not chosen with good judgment the right slave to give ${him} a blowjob. In any case, what happened cannot be left without an adequate punishment.`); if (canWalk(V.PC)) { r.push(`You stand up in front of ${him},`); } else { @@ -259,7 +274,7 @@ App.Interact.fSuckDick = function(slave) { r.push(rumors()) App.Events.addParagraph(node, r); - V.PC.degeneracy += 2; + V.PC.degeneracy += 3; } return node; @@ -286,7 +301,7 @@ App.Interact.fSuckDick = function(slave) { if (isHorny(V.PC)) { r.push(`All of this excites you to the point that you feel like you're about to have your own orgasm, without any physical stimulation, other than having a cock in your mouth.`); } - r.push(`You lift your head until only the${slave.dick > 4 ? " tip of the" : ""} glans is covered by your lips, using your tongue to play with the frenulum, and`); + r.push(`You lift your head until only the${slave.dick > 4 ? "top half of the" : ""} glans is surrounded by your ${lips}, using your tongue to play with ${slave.foreskin === 0 ? "the tip" : "the frenulum"}, and`); if (slave.dick > 6) { r.push(`your hands`); } else if (slave.dick >2) { @@ -347,12 +362,15 @@ App.Interact.fSuckDick = function(slave) { return node; } else if ((disobedience(slave) > 0 || (slave.fetish === Fetish.DOM && slave.devotion < 40 && slave.trust > -30)) && hasAnyArms(slave)) { // Disobedient slaves try to force the player to swallow, dominant slaves have a plus - r.push(`You feel a throbbing at the base of the dick, and ${amount <= 100 ? "liquid splatters in the back of your mouth" : "a thick spurt fills your mouth"}. You feel ${hasBothArms(slave) ? "the slave's hands" : "a hand"} on your head pushing it down.`); + r.push(`You feel a throbbing at the base of the dick, and ${amount <= 100 ? "liquid splatters in the back of your mouth" : "a thick spurt fills your mouth"}. You feel ${hasBothArms(slave) ? "the slave's hands" : "a hand"} on your head pushing you down.`); if (canTalk(slave)) { - r.push(`<span class="orangered">${Spoken(slave, "Yeah, now, I cum! Take it all!")}</span>`); + r.push(`<span class="orangered">${Spoken(slave, "Yeah, now, I cum! All for you!")}</span>`); } else { r.push(`The slave makes a grunt of pleasure, and you understand that <span class="orangered">${he} is determined to unload all ${his} semen in your mouth</span>.`); } + App.Events.addParagraph(node, r); + r = []; + if (isHorny(V.PC)) { // Horny player can't resist the disobedient slave r.push(`A new throbbing of ${his} cock, with the consequent seminal discharge in your oral cavity, takes you beyond your limits and an intense, extremely pleasurable and endless orgasm takes control of your mind. You have no strength or desire to resist, and you simply let yourself be carried away by your pleasure and let the hands of the slave guide your head.`); r.push(swallow()); @@ -360,7 +378,7 @@ App.Interact.fSuckDick = function(slave) { r.push(`You slam ${his} hand${hasBothArms(slave) ? "s" : ""} with yours, releasing ${his} grip on your head, and you manage to tear your mouth away from ${his} cock.`); if (canWalk(V.PC)) { if (slave.balls > 0 && slave.scrotum > 0) { - r.push(`You stand up and kick ${him} hard in the ${nutte}.`); + r.push(`You stand up and kick ${him} hard in ${his} ${nutte}.`); } else if (slave.vagina >= 0) { r.push(`You pinch and twist ${his} labia furiously.`); } else { @@ -368,11 +386,11 @@ App.Interact.fSuckDick = function(slave) { } } else { if (slave.balls > 0 && slave.scrotum > 0) { - r.push(`You move away a bit and give ${him} two strong punches in the ${nutte}.`); + r.push(`You move away a bit and give ${him} two strong punches in ${his} ${nutte}.`); } else if (slave.vagina >= 0) { r.push(`You pinch and twist ${his} labia furiously.`); } else { - r.push(`You punch ${him} so hard in the anus that your fist gets stuck inside.`); + r.push(`You punch ${him} so hard in the anus that half your fist gets stuck inside.`); } } r.push(`Despite ${his} pained face, ${his} orgasm doesn't stop.`); @@ -431,7 +449,7 @@ App.Interact.fSuckDick = function(slave) { return node; } else if (slave.skill.oral < 30 || (slave.skill.oral < 70 && jsRandom(1,100) > 70)) { //Player decides to give an oral lesson to the slave - r.push(`You've looked through your archives and realized that ${slave.slaveName} can improve on ${his} oral skills, so you decide you're going to give ${him} a master class in pleasing a penis all the way. You take ${his} hands and place them on your head, making it clear that you want ${him} to take the reins, while you concentrate on using your lips and tongue to teach ${him}. At the same time you caress ${his} body until you take ${him} to the limit. You know your slaves well and you know ${he}'s about to erupt in your mouth.`); + r.push(`You've looked through your archives and realized that ${slave.slaveName} can improve on ${his} oral skills, so you decide you're going to give ${him} a master class in pleasing a penis all the way. You take ${his} hands and place them on your head, making it clear that you want ${him} to take the reins, while you concentrate on using your ${lipsLong} and tongue to teach ${him}. At the same time you caress ${his} body until you take ${him} to the limit. You know your slaves well and you are aware ${he}'s about to erupt in your mouth.`); r.push(swallow()); App.Events.addParagraph(node, r); @@ -507,7 +525,7 @@ App.Interact.fSuckDick = function(slave) { slave.trust += 5; } else if (V.week - slave.weekAcquired > 30 && slave.devotion > 90 && isHorny(V.PC)) { // Senior devoted slaves can be rewarded by a horny player - r.push(`This devoted slave has been serving you for quite some time. Horny as you are, you decide to reward ${him} by letting ${him} go all the way. When ${he} tells you that ${he} is about to cum, instead of taking your mouth away, you take ${his} hand with yours, guiding it to the top of your head, letting ${him} know that you want ${him} to take the initiative and set the right pace. The slave understands it and, with heavy breathing, ${he} prepares to fulfill your wish with great pleasure.`); + r.push(`This devoted slave has been serving you for quite some time. Horny as you are, you decide to reward ${him} by letting ${him} go all the way. When ${he} tells you that ${he} is about to cum, instead of taking your mouth away, you take ${his} hand with yours, guiding it to the top of your head, letting ${him} know that you want ${him} to take the initiative and set the right pace. The slave understands it and, breathing heavily, ${he} prepares to fulfill your wish with great pleasure.`); r.push(swallow()); App.Events.addParagraph(node, r); @@ -530,7 +548,7 @@ App.Interact.fSuckDick = function(slave) { slave.trust += 2; } else { // Default - r.push(`You continue to suck ${him}, stroking ${his} body with one hand, making sure the blowjob is memorable. At one point you feel ${his} member stiffen and ${he} lets you know that ${his} orgasm is imminent. You take one last firm suck before slowly letting the glans out of your mouth and taking the base of ${his} ${dickAdj} member ${slave.dick > 2 ? "with your hand" : "with your forefinger and thumb"}, sealing your lips to the shaft, just in time to feel the first contraction.`); + r.push(`You continue to suck ${him}, stroking ${his} body with one hand, making sure the blowjob is memorable. At one point you feel ${his} member stiffen and ${he} lets you know that ${his} orgasm is imminent. You take one last firm suck before slowly letting the glans out of your mouth and taking the base of ${his} ${dickAdj} member ${slave.dick > 2 ? "with your hand" : "with your forefinger and thumb"}, toying the shaft with your ${lipsLong}, just in time to feel the first contraction.`); r.push(cumFinal()); if (isHorny(V.PC)) { @@ -568,9 +586,6 @@ App.Interact.fSuckDick = function(slave) { slave.trust += 2; slave.devotion += 5; } - - return node; - } return node; @@ -584,11 +599,11 @@ App.Interact.fSuckDick = function(slave) { if (slave.dick > 7) { text.push(`as ${he} forces your head down, trying to put more of ${his} ${dickAdj} cock inside you, but the apple-sized cockhead can't go any deeper. ${His} urethral opening is wedged in the back of your throat, discharging ${his} cum directly into your guts.`); } else if (slave.dick > 4) { - text.push(`while ${he} pushes your head down and ${his} hips up, and with the help of your abundant saliva, despite the thickness of ${his} cock, ${he} manages to put it through your throat and lodge it in your esophagus. Your distended lips encircle the wide base of the phallus and your nose is flattened against ${his} pubis. You sense how ${his} ${dickAdj} cock throbs as it unloads ${his} cum in your stomach.`); + text.push(`while ${he} pushes your head down and ${his} hips up, and with the help of your abundant saliva, despite the thickness of ${his} cock, ${he} manages to put it through your throat and lodge it in your esophagus. Your distended ${lipsLong} encircle the wide base of the phallus and your nose is flattened against ${his} pubis. You sense how ${his} ${dickAdj} cock throbs as it unloads ${his} cum in your stomach.`); } else if (slave.dick > 2) { - text.push(`while ${he} pushes your head down and ${his} hips up, and with the help of your abundant saliva, ${he} manages to lodge ${his} ${dickAdj} cock in your throat. Your lips encircle the base of the phallus and your nose flattens against ${his} pubis, as you feel ${his} cock throbbing, forcing ${his} cum down your throat.`) + text.push(`while ${he} pushes your head down and ${his} hips up, and with the help of your abundant saliva, ${he} manages to lodge ${his} ${dickAdj} cock in your throat. Your ${lipsLong} encircle the base of the phallus and your nose flattens against ${his} pubis, as you feel ${his} cock throbbing, forcing ${his} cum down your throat.`) } else { - text.push(`as ${he} pushes your head down and ${his} hips up, making sure all of ${his} ${dickAdj} cock is inside your mouth. Your lips encircle the base of ${his} phallus and your nose flattens against ${his} pubis as you feel ${his} cock throb, releasing ${his} semen onto your tongue at the back of your mouth.`); + text.push(`as ${he} pushes your head down and ${his} hips up, making sure all of ${his} ${dickAdj} cock is inside your mouth. Your ${lipsLong} encircle the base of ${his} phallus and your nose flattens against ${his} pubis as you feel ${his} cock throb, releasing ${his} semen onto your tongue at the back of your mouth.`); } if (amount + (V.PC.bellyPreg > 1500 ? 100 : 0) > 150) { text.push(`${His} cumshot is so voluminous that your stomach can't take it anymore and you slap your hand on ${his} hips to let ${him} know. ${He} understands and lets go of your head, so you can release ${his} member from your ${slave.dick > 2 ? "throat" : "mouth"}.`);