Просмотр исходного кода

More work on sheaths/cleavage. Added absorption, more lines, pouch options

tags/v0.7.0
Fen Dweller 8 лет назад
Родитель
Сommit
9002894735
3 измененных файлов: 165 добавлений и 20 удалений
  1. +103
    -5
      game.js
  2. +51
    -15
      recursive-desc.js
  3. +11
    -0
      stroll.html

+ 103
- 5
game.js Просмотреть файл

@@ -554,7 +554,7 @@ var macro =
result.push(line); result.push(line);


if (this.hasTail) { if (this.hasTail) {
line = "Your " + macro.describeTail + (macro.tailCount > 1 ? " tails sway as you walk," : "sways as you walk.");
line = "Your " + macro.describeTail + (macro.tailCount > 1 ? " tails sway as you walk. " : " tail sways as you walk. ");
if (this.tailMaw) { if (this.tailMaw) {
line += (macro.tailCount > 1 ? "Their maws are drooling" : "Its maw is drooling"); line += (macro.tailCount > 1 ? "Their maws are drooling" : "Its maw is drooling");
} }
@@ -577,19 +577,33 @@ var macro =
} }
} }
if (this.maleParts) { if (this.maleParts) {
if (this.hasSheath && this.arousal < 75) {
line = "Your " + this.describeDick + " cock is hidden away in your bulging sheath, with two " + mass(macro.ballMass, unit, true) + ", " + length(macro.ballDiameter, unit, true) + "-wide balls hanging beneath.";
}
line = "Your " + this.describeDick + " cock hangs from your hips, with two " + mass(macro.ballMass, unit, true) + ", " + length(macro.ballDiameter, unit, true) + "-wide balls hanging beneath."; line = "Your " + this.describeDick + " cock hangs from your hips, with two " + mass(macro.ballMass, unit, true) + ", " + length(macro.ballDiameter, unit, true) + "-wide balls hanging beneath.";
result.push(line); result.push(line);
} }
if (this.femaleParts) {


if (this.femaleParts) {
line = "Your glistening " + this.describeVagina + " slit peeks out from between your legs." line = "Your glistening " + this.describeVagina + " slit peeks out from between your legs."
result.push(line); result.push(line);
} }

if (this.hasBreasts) { if (this.hasBreasts) {
line = "You have two " + length(macro.breastDiameter, unit, true) + "-wide breasts that weigh " + mass(macro.breastMass, unit) + " apiece.";
line = "You have two " + length(this.breastDiameter, unit, true) + "-wide breasts that weigh " + mass(macro.breastMass, unit) + " apiece.";

if (this.cleavage.container.count > 0)
line += " Between them are " + this.cleavage.container.describe(false) + ".";
result.push(line); result.push(line);
} }


if (this.hasPouch) {
if (this.pouch.container.count == 0)
result.push("Your belly pouch is flat and empty.");
else
result.push("Your belly pouch is bulging, holding " + this.pouch.container.describe(false) + ".");
}

return result; return result;
}, },


@@ -1174,6 +1188,7 @@ function cleavage_stuff()
function cleavage_crush() function cleavage_crush()
{ {
var prey = macro.cleavage.container; var prey = macro.cleavage.container;
macro.cleavage.container = new Container();
var line = describe("cleavage-crush", prey, macro, verbose); var line = describe("cleavage-crush", prey, macro, verbose);
var linesummary = summarize(prey.sum(), true); var linesummary = summarize(prey.sum(), true);


@@ -1238,6 +1253,41 @@ function cleavage_drop()
update([sound,line,linesummary,newline]); update([sound,line,linesummary,newline]);
} }


function cleavage_absorb()
{
var prey = macro.cleavage.container;
macro.cleavage.container = new Container();
var line = describe("cleavage-absorb", prey, macro, verbose);
var linesummary = summarize(prey.sum(), true);

var people = get_living_prey(prey.sum());

var sound = "Thump";

if (people < 3) {
sound = "Shlp.";
} else if (people < 10) {
sound = "Slurp.";
} else if (people < 50) {
sound = "Shlrrrrp!";
} else if (people < 500) {
sound = "SHLRP!";
} else if (people < 5000) {
sound = "SHLLLLURP!!";
} else {
sound = "Oh the humanity!";
}

var preyMass = prey.sum_property("mass");

macro.addGrowthPoints(preyMass);

macro.arouse((preyMass > 0 ? 15 : 5));

updateVictims("cleavageabsorbed",prey);
update([sound,line,linesummary,newline]);
}

function breast_crush() function breast_crush()
{ {
var area = macro.breastArea; var area = macro.breastArea;
@@ -1489,6 +1539,37 @@ function sheath_crush()
update([sound,line,linesummary,newline]); update([sound,line,linesummary,newline]);
} }


function sheath_absorb()
{
var prey = macro.sheath.container;
macro.sheath.container = new Container();
var line = describe("sheath-absorb", prey, macro, verbose)
var linesummary = summarize(prey.sum(), true);

var people = get_living_prey(prey.sum());

var sound = "";

if (people < 3) {
sound = "Shlp.";
} else if (people < 10) {
sound = "Squelch.";
} else if (people < 50) {
sound = "Shlurrp.";
} else if (people < 500) {
sound = "SHLRP!";
} else if (people < 5000) {
sound = "SQLCH!!";
} else {
sound = "Oh the humanity!";
}

macro.arouse(45);

update([sound,line,linesummary,newline]);
}


function cockslap() function cockslap()
{ {
var area = macro.dickArea; var area = macro.dickArea;
@@ -2210,7 +2291,13 @@ function startGame(e) {
} }


if (macro.maleParts) { if (macro.maleParts) {
victimTypes = victimTypes.concat(["cock","balls","sheath"]);
victimTypes = victimTypes.concat(["cock","balls"]);
if (macro.hasSheath) {
victimTypes.push("sheath");
} else {
document.getElementById("button-sheath_stuff").style.display = 'none';
document.getElementById("button-sheath_squeeze").style.display = 'none';
}
} else { } else {
document.getElementById("action-part-dick").style.display = 'none'; document.getElementById("action-part-dick").style.display = 'none';
document.getElementById("button-cockslap").style.display = 'none'; document.getElementById("button-cockslap").style.display = 'none';
@@ -2220,6 +2307,9 @@ function startGame(e) {
document.getElementById("cumPercent").style.display = 'none'; document.getElementById("cumPercent").style.display = 'none';
document.querySelector("#part-balls+label").style.display = 'none'; document.querySelector("#part-balls+label").style.display = 'none';
document.querySelector("#part-dick+label").style.display = 'none'; document.querySelector("#part-dick+label").style.display = 'none';
document.getElementById("button-sheath_stuff").style.display = 'none';
document.getElementById("button-sheath_squeeze").style.display = 'none';
document.getElementById("button-sheath_absorb").style.display = 'none';
} }


if (macro.femaleParts) { if (macro.femaleParts) {
@@ -2233,7 +2323,7 @@ function startGame(e) {
} }


if (macro.hasBreasts) { if (macro.hasBreasts) {
victimTypes = victimTypes.concat(["breasts","cleavage","cleavagecrushed","cleavagedropped"]);
victimTypes = victimTypes.concat(["breasts","cleavage","cleavagecrushed","cleavagedropped","cleavageabsorbed"]);
if (macro.lactationEnabled) { if (macro.lactationEnabled) {
victimTypes = victimTypes.concat(["flooded"]); victimTypes = victimTypes.concat(["flooded"]);
} else { } else {
@@ -2248,6 +2338,10 @@ function startGame(e) {
} }
} else { } else {
document.getElementById("action-part-breasts").style.display = 'none'; document.getElementById("action-part-breasts").style.display = 'none';
document.getElementById("button-cleavage_stuff").style.display = 'none';
document.getElementById("button-cleavage_crush").style.display = 'none';
document.getElementById("button-cleavage_drop").style.display = 'none';
document.getElementById("button-cleavage_absorb").style.display = 'none';
document.getElementById("button-breast_vore").style.display = 'none'; document.getElementById("button-breast_vore").style.display = 'none';
document.getElementById("button-breast_milk").style.display = 'none'; document.getElementById("button-breast_milk").style.display = 'none';
document.getElementById("milk").style.display = 'none'; document.getElementById("milk").style.display = 'none';
@@ -2355,12 +2449,14 @@ window.addEventListener('load', function(event) {
victims["cleavage"] = initVictims(); victims["cleavage"] = initVictims();
victims["cleavagecrushed"] = initVictims(); victims["cleavagecrushed"] = initVictims();
victims["cleavagedropped"] = initVictims(); victims["cleavagedropped"] = initVictims();
victims["cleavageabsorbed"] = initVictims();
victims["breasts"] = initVictims(); victims["breasts"] = initVictims();
victims["breastvored"] = initVictims(); victims["breastvored"] = initVictims();
victims["flooded"] = initVictims(); victims["flooded"] = initVictims();
victims["womb"] = initVictims(); victims["womb"] = initVictims();
victims["sheath"] = initVictims(); victims["sheath"] = initVictims();
victims["sheathcrushed"] = initVictims(); victims["sheathcrushed"] = initVictims();
victims["sheathabsorbed"] = initVictims();
victims["cock"] = initVictims(); victims["cock"] = initVictims();
victims["balls"] = initVictims(); victims["balls"] = initVictims();
victims["smothered"] = initVictims(); victims["smothered"] = initVictims();
@@ -2382,12 +2478,14 @@ window.addEventListener('load', function(event) {
document.getElementById("button-cleavage_stuff").addEventListener("click",cleavage_stuff); document.getElementById("button-cleavage_stuff").addEventListener("click",cleavage_stuff);
document.getElementById("button-cleavage_crush").addEventListener("click",cleavage_crush); document.getElementById("button-cleavage_crush").addEventListener("click",cleavage_crush);
document.getElementById("button-cleavage_drop").addEventListener("click",cleavage_drop); document.getElementById("button-cleavage_drop").addEventListener("click",cleavage_drop);
document.getElementById("button-cleavage_absorb").addEventListener("click",cleavage_absorb);
document.getElementById("button-breast_crush").addEventListener("click",breast_crush); document.getElementById("button-breast_crush").addEventListener("click",breast_crush);
document.getElementById("button-breast_vore").addEventListener("click",breast_vore); document.getElementById("button-breast_vore").addEventListener("click",breast_vore);
document.getElementById("button-breast_milk").addEventListener("click",milk_breasts); document.getElementById("button-breast_milk").addEventListener("click",milk_breasts);
document.getElementById("button-unbirth").addEventListener("click",unbirth); document.getElementById("button-unbirth").addEventListener("click",unbirth);
document.getElementById("button-sheath_stuff").addEventListener("click",sheath_stuff); document.getElementById("button-sheath_stuff").addEventListener("click",sheath_stuff);
document.getElementById("button-sheath_squeeze").addEventListener("click",sheath_squeeze); document.getElementById("button-sheath_squeeze").addEventListener("click",sheath_squeeze);
document.getElementById("button-sheath_absorb").addEventListener("click",sheath_absorb);
document.getElementById("button-cockslap").addEventListener("click",cockslap); document.getElementById("button-cockslap").addEventListener("click",cockslap);
document.getElementById("button-cock_vore").addEventListener("click",cock_vore); document.getElementById("button-cock_vore").addEventListener("click",cock_vore);
document.getElementById("button-ball_smother").addEventListener("click",ball_smother); document.getElementById("button-ball_smother").addEventListener("click",ball_smother);


+ 51
- 15
recursive-desc.js Просмотреть файл

@@ -11,6 +11,7 @@ rules["ass-crush"] = [];
rules["cleavage-stuff"] = []; rules["cleavage-stuff"] = [];
rules["cleavage-crush"] = []; rules["cleavage-crush"] = [];
rules["cleavage-drop"] = []; rules["cleavage-drop"] = [];
rules["cleavage-absorb"] = [];
rules["breast-crush"] = []; rules["breast-crush"] = [];
rules["breast-vore"] = []; rules["breast-vore"] = [];
rules["breast-milk"] = []; rules["breast-milk"] = [];
@@ -18,6 +19,7 @@ rules["unbirth"] = [];
rules["sheath-stuff"] = []; rules["sheath-stuff"] = [];
rules["sheath-squeeze"] = []; rules["sheath-squeeze"] = [];
rules["sheath-crush"] = []; rules["sheath-crush"] = [];
rules["sheath-absorb"] = [];
rules["cock-vore"] = []; rules["cock-vore"] = [];
rules["cockslap"] = []; rules["cockslap"] = [];
rules["ball-smother"] = []; rules["ball-smother"] = [];
@@ -133,6 +135,7 @@ function describeDefault(action, container, macro, verbose=true) {
case "cleavage-stuff": return defaultCleavageStuff(container, macro, verbose); case "cleavage-stuff": return defaultCleavageStuff(container, macro, verbose);
case "cleavage-crush": return defaultCleavageCrush(container, macro, verbose); case "cleavage-crush": return defaultCleavageCrush(container, macro, verbose);
case "cleavage-drop": return defaultCleavageDrop(container, macro, verbose); case "cleavage-drop": return defaultCleavageDrop(container, macro, verbose);
case "cleavage-absorb": return defaultCleavageAbsorb(container, macro, verbose);
case "breast-crush": return defaultBreastCrush(container, macro, verbose); case "breast-crush": return defaultBreastCrush(container, macro, verbose);
case "breast-vore": return defaultBreastVore(container, macro, verbose); case "breast-vore": return defaultBreastVore(container, macro, verbose);
case "breast-milk": return defaultBreastMilk(container, macro, verbose); case "breast-milk": return defaultBreastMilk(container, macro, verbose);
@@ -140,6 +143,7 @@ function describeDefault(action, container, macro, verbose=true) {
case "sheath-stuff": return defaultSheathStuff(container, macro, verbose); case "sheath-stuff": return defaultSheathStuff(container, macro, verbose);
case "sheath-squeeze": return defaultSheathSqueeze(container, macro, verbose); case "sheath-squeeze": return defaultSheathSqueeze(container, macro, verbose);
case "sheath-crush": return defaultSheathCrush(container, macro, verbose); case "sheath-crush": return defaultSheathCrush(container, macro, verbose);
case "sheath-absorb": return defaultSheathAbsorb(container, macro, verbose);
case "cock-vore": return defaultCockVore(container, macro, verbose); case "cock-vore": return defaultCockVore(container, macro, verbose);
case "cockslap": return defaultCockslap(container, macro, verbose); case "cockslap": return defaultCockslap(container, macro, verbose);
case "ball-smother": return defaultBallSmother(container, macro, verbose); case "ball-smother": return defaultBallSmother(container, macro, verbose);
@@ -214,19 +218,30 @@ function defaultCleavageStuff(container, macro, verbose) {
} }


function defaultCleavageCrush(container, macro, verbose) { function defaultCleavageCrush(container, macro, verbose) {
if (isGory(macro))
return "You grasp your breasts and forcefully shove them together, crushing the life from " + container.describe(verbose) + ".";
if (container.count == 0)
return "You grasp your breasts and forcefully squeeze them together.";
else if (isGory(macro))
return "You grasp your breasts and forcefully shove them together, crushing the life from " + container.describe(false) + ".";
else if (isFatal(macro)) else if (isFatal(macro))
return "You grasp your breasts and forcefully shove them together, crushing " + container.describe(verbose) + ".";
return "You grasp your breasts and forcefully shove them together, crushing " + container.describe(false) + ".";
else else
return "You grasp your breasts and squish them together, smooshing " + container.describe(verbose) + ".";
return "You grasp your breasts and squish them together, smooshing " + container.describe(false) + ".";
}

function defaultCleavageAbsorb(container, macro, verbose) {
if (container.count == 0)
return defaultCleavageCrush(container, macro, verbose);
else
return "Your squeeze your breasts together, swiftly absorbing " + container.describe(false) + " into your chest.";
} }


function defaultCleavageDrop(container, macro, verbose) { function defaultCleavageDrop(container, macro, verbose) {
if (container.count == 0)
return "You pull your breasts apart and give them a shake.";
if (isFatal(macro)) if (isFatal(macro))
return "You pull your breasts apart far enough for the " + container.describe(verbose) + " trapped within to fall out, tumbling to the ground and smashing to bits.";
return "You pull your breasts apart far enough for the " + container.describe(false) + " trapped within to fall out, tumbling to the ground and smashing to bits.";
else else
return "You pull your breasts apart far enough for the " + container.describe(verbose) + " trapped within to fall out.";
return "You pull your breasts apart far enough for the " + container.describe(false) + " trapped within to fall out.";
} }


function defaultBreastCrush(container, macro, verbose) { function defaultBreastCrush(container, macro, verbose) {
@@ -257,16 +272,30 @@ function defaultSheathStuff(container, macro, verbose) {
} }


function defaultSheathSqueeze(container, macro, verbose) { function defaultSheathSqueeze(container, macro, verbose) {
if (macro.orgasm) {
return "You stroke your spurting cock, then reach down to give your sheath a firm <i>squeeze</i>. Anything within has been ground away to nothingness by the force of your orgasm.";
} else if (macro.arousal < 25) {
return "You grip your soft sheath and give it a squeeze, feeling " + container.describe(false) + " within rub against your " + macro.describeDick + " cock.";
} else if (macro.arousal < 75) {
return "You grip your swelling sheath and squeeze, feeling " + container.describe(false) + " within grind against your " + macro.describeDick + " cock.";
} else if (macro.arousal < 150) {
return "You run your fingers down your " + macro.describeDick + " shaft and grip your sheath, squeezing it to feel " + container.describe(false) + " being smothered against the musky walls by your throbbing cock.";
if (container.count > 0) {
if (macro.orgasm) {
return "You stroke your spurting cock, then reach down to give your sheath a firm <i>squeeze</i>. Anything within has been ground away to nothingness by the force of your orgasm.";
} else if (macro.arousal < 25) {
return "You grip your soft sheath and give it a squeeze, feeling " + container.describe(false) + " within rub against your " + macro.describeDick + " cock.";
} else if (macro.arousal < 75) {
return "You grip your swelling sheath and squeeze, feeling " + container.describe(false) + " within grind against your " + macro.describeDick + " cock.";
} else if (macro.arousal < 150) {
return "You run your fingers down your " + macro.describeDick + " shaft and grip your sheath, squeezing it to feel " + container.describe(false) + " being smothered against the musky walls by your throbbing cock.";
} else {
return "Trembling with your impending orgasm, your fingers play over your sheath, feeling " + container.describe(false) + " within rub against your " + macro.describeDick + " cock.";
}
} else { } else {
return "Trembling with your impending orgasm, your fingers play over your sheath, feeling " + container.describe(false) + " within rub against your " + macro.describeDick + " cock.";
if (macro.orgasm) {
return "You stroke your spurting cock, then reach down to give your sheath a firm <i>squeeze</i>. Anything within has been ground away to nothingness by the force of your orgasm.";
} else if (macro.arousal < 25) {
return "You grip your soft sheath and give it a squeeze.";
} else if (macro.arousal < 75) {
return "You grip your swelling sheath and squeeze.";
} else if (macro.arousal < 150) {
return "You run your fingers down your " + macro.describeDick + " shaft and grip your sheath, squeezing it gently.";
} else {
return "Trembling with your impending orgasm, your fingers play over your sheath.";
}
} }
} }


@@ -279,6 +308,13 @@ function defaultSheathCrush(container, macro, verbose) {
return "Your orgasm causes your " + macro.describeDick + " cock to swell, squeezing " + container.describe(false) + " out from your sheath."; return "Your orgasm causes your " + macro.describeDick + " cock to swell, squeezing " + container.describe(false) + " out from your sheath.";
} }


function defaultSheathAbsorb(container, macro, verbose) {
if (container.count > 0)
return "You grip your sheath and give it a firm <i>squeeze</i>, abruptly absorbing " + container.describe(false) + " into your musky body.";
else
return defaultSheathSqueeze(container, macro, verbose);
}

function defaultCockVore(container, macro, verbose) { function defaultCockVore(container, macro, verbose) {
return "You stuff " + container.describe(verbose) + " into your throbbing shaft, forcing them down to your heavy balls."; return "You stuff " + container.describe(verbose) + " into your throbbing shaft, forcing them down to your heavy balls.";
} }


+ 11
- 0
stroll.html Просмотреть файл

@@ -104,6 +104,7 @@
<button class=action-button id=button-cleavage_stuff>Stuff Cleavage</button> <button class=action-button id=button-cleavage_stuff>Stuff Cleavage</button>
<button class=action-button id=button-cleavage_crush>Crush Cleavage</button> <button class=action-button id=button-cleavage_crush>Crush Cleavage</button>
<button class=action-button id=button-cleavage_drop>Drop Cleavage</button> <button class=action-button id=button-cleavage_drop>Drop Cleavage</button>
<button class=action-button id=button-cleavage_absorb>Absorb Cleavage</button>
<button class=action-button id=button-breast_crush>Breast Crush</button> <button class=action-button id=button-breast_crush>Breast Crush</button>
<button class=action-button id=button-breast_vore>Breast Vore</button> <button class=action-button id=button-breast_vore>Breast Vore</button>
<button class=action-button id=button-breast_milk>Milk Breasts</button> <button class=action-button id=button-breast_milk>Milk Breasts</button>
@@ -114,6 +115,7 @@
<div class=action-tab id=actions-dick> <div class=action-tab id=actions-dick>
<button class=action-button id=button-sheath_stuff>Stuff Sheath</button> <button class=action-button id=button-sheath_stuff>Stuff Sheath</button>
<button class=action-button id=button-sheath_squeeze>Squeeze Sheath</button> <button class=action-button id=button-sheath_squeeze>Squeeze Sheath</button>
<button class=action-button id=button-sheath_absorb>Absorb Sheath</button>
<button class=action-button id=button-cockslap>Cockslap</button> <button class=action-button id=button-cockslap>Cockslap</button>
<button class=action-button id=button-cock_vore>Cock Vore</button> <button class=action-button id=button-cock_vore>Cock Vore</button>
<button class=action-button id=button-ball_smother>Ball Smother</button> <button class=action-button id=button-ball_smother>Ball Smother</button>
@@ -242,10 +244,19 @@
</div> </div>
</div> </div>
<br> <br>
<li>
<label for="hasPouch">Pouch</label>
<input type="checkbox" name="hasPouch" checked=true /><br>
</li>
<br>
<div> <div>
Male genitals:<br> Male genitals:<br>
<input type="checkbox" checked=true name="maleParts"/><br> <input type="checkbox" checked=true name="maleParts"/><br>
<div class=reveal-if-active> <div class=reveal-if-active>
<li>
<label for="hasSheath">Sheath</label>
<input type="checkbox" name="hasSheath" checked=true /><br>
</li>
<li> <li>
<label for="dickType">Cock type</label> <label for="dickType">Cock type</label>
<input type="text" name="dickType" placeholder="canine"/><br> <input type="text" name="dickType" placeholder="canine"/><br>


Загрузка…
Отмена
Сохранить