Browse Source

Separated breasts and genitals. Added lactation. Updated layout.

tags/v0.7.0
Fen Dweller 7 years ago
parent
commit
9954195aec
4 changed files with 150 additions and 15 deletions
  1. +95
    -6
      game.js
  2. +9
    -0
      recursive-desc.js
  3. +32
    -8
      stroll.html
  4. +14
    -1
      style.css

+ 95
- 6
game.js View File

@@ -134,6 +134,15 @@ var macro =
return this.vaginaArea * this.baseFemcumRatio * this.femcumScale * (1 + this.edge) + Math.max(0,this.femcumStorage.amount - this.femcumStorage.limit);
},

hasBreasts: true,
lactationEnabled: true,
lactationScale: 1,
lactationFactor: 0.25,

get lactationVolume() {
return this.milkStorage.limit * this.lactationFactor;
},

"baseBreastDiameter": 0.1,
"breastScale": 1,
"breastDensity": 1000,
@@ -270,10 +279,14 @@ var macro =
this.balls.owner = this;
this.cumStorage.owner = this;
this.femcumStorage.owner = this;
this.milkStorage.owner = this;

if (this.maleParts)
this.fillCum(this)
this.fillCum(this);
if (this.femaleParts)
this.fillFemcum(this)
this.fillFemcum(this);
if (this.hasBreasts)
this.fillBreasts(this);
if (this.maleParts || this.femaleParts) {
this.quenchExcess(this);
}
@@ -298,6 +311,14 @@ var macro =
update();
},

"fillBreasts": function(self) {
self.milkStorage.amount += self.lactationScale * self.milkStorage.limit / 1200;
if (self.milkStorage.amount > self.milkStorage.limit)
self.milkStorage.amount = self.milkStorage.limit;
setTimeout(function () { self.fillBreasts(self) }, 100);
update();
},

"cumStorage": {
"amount": 0,
get limit() {
@@ -311,6 +332,14 @@ var macro =
return this.owner.vaginaVolume;
}
},

"milkStorage": {
"amount": 0,
get limit() {
return this.owner.breastVolume * 2;
}
},

"orgasm": false,
"afterglow": false,

@@ -461,6 +490,8 @@ var macro =

line = "Your glistening " + this.describeVagina + " slit peeks out from between your legs."
result.push(line);
}
if (this.hasBreasts) {
line = "You have two " + length(macro.breastDiameter, unit, true) + "-wide breasts that weigh " + mass(macro.breastMass, unit) + " apiece.";
result.push(line);
}
@@ -996,6 +1027,50 @@ function breast_crush()

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

if (macro.lactationEnabled && macro.milkStorage.amount / macro.milkStorage.limit > 0.5) {
var amount = Math.min(macro.lactationVolume, (macro.milkStorage.amount / macro.milkStorage.limit - 0.5) * macro.milkStorage.limit);
milk_breasts(null, amount);
}
}

function milk_breasts(e,vol)
{
if (vol == undefined) {
var vol = Math.min(macro.lactationVolume, macro.milkStorage.amount);
}

macro.milkStorage.amount -= vol;

var area = Math.pow(vol, 2/3);

var prey = getPrey(biome, area);
var line = describe("breast-milk", prey, macro, verbose).replace("$VOLUME",volume(vol,unit,false))
var linesummary = summarize(prey.sum(), true);

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

var sound = "Dribble.";

if (people < 3) {
sound = "Dribble.";
} else if (people < 10) {
sound = "Splash.";
} else if (people < 50) {
sound = "Splash!";
} else if (people < 500) {
sound = "SPLOOSH!";
} else if (people < 5000) {
sound = "SPLOOOOOOOOOOSH!!";
} else {
sound = "Oh the humanity!";
}
var preyMass = prey.sum_property("mass");

macro.addGrowthPoints(preyMass);

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

function unbirth()
@@ -1370,7 +1445,8 @@ function update(lines = [])
document.getElementById("cumPercent").innerHTML = Math.round(macro.cumStorage.amount / macro.cumStorage.limit * 100) + "%";
document.getElementById("femcum").innerHTML = "Femcum: " + transformNumbers(volume(macro.femcumStorage.amount,unit,false));
document.getElementById("femcumPercent").innerHTML = Math.round(macro.femcumStorage.amount / macro.femcumStorage.limit * 100) + "%";

document.getElementById("milk").innerHTML = "Milk: " + transformNumbers(volume(macro.milkStorage.amount,unit,false));
document.getElementById("milkPercent").innerHTML = Math.round(macro.milkStorage.amount / macro.milkStorage.limit * 100) + "%";

for (var type in victims) {
if (victims.hasOwnProperty(type)) {
@@ -1687,15 +1763,26 @@ function startGame(e) {
}

if (macro.femaleParts) {
victimTypes = victimTypes.concat(["breasts"],["womb"]);
victimTypes = victimTypes.concat(["womb"]);
} else {
document.getElementById("button-breast_crush").style.display = 'none';
document.getElementById("button-unbirth").style.display = 'none';
document.getElementById("femcum").style.display = 'none';
document.querySelector("#part-breasts+label").style.display = 'none';
document.querySelector("#part-vagina+label").style.display = 'none';
}

if (macro.hasBreasts) {
victimTypes = victimTypes.concat(["breasts"]);
if (macro.lactationEnabled) {
victimTypes = victimTypes.concat(["flooded"]);
} else {
document.getElementById("button-breast_milk").style.display = 'none';
}
} else {
document.getElementById("button-breast_milk").style.display = 'none';
document.getElementById("button-breast_crush").style.display = 'none';
document.querySelector("#part-breasts+label").style.display = 'none';
}

if (macro.maleParts || macro.femaleParts) {
victimTypes.push("splooged");
}
@@ -1765,6 +1852,7 @@ window.addEventListener('load', function(event) {
victims["digested"] = initVictims();
victims["stomach"] = initVictims();
victims["breasts"] = initVictims();
victims["flooded"] = initVictims();
victims["womb"] = initVictims();
victims["cock"] = initVictims();
victims["balls"] = initVictims();
@@ -1779,6 +1867,7 @@ window.addEventListener('load', function(event) {
document.getElementById("button-tail_slap").addEventListener("click",tail_slap);
document.getElementById("button-tail_vore").addEventListener("click",tail_vore);
document.getElementById("button-breast_crush").addEventListener("click",breast_crush);
document.getElementById("button-breast_milk").addEventListener("click",milk_breasts);
document.getElementById("button-unbirth").addEventListener("click",unbirth);
document.getElementById("button-cockslap").addEventListener("click",cockslap);
document.getElementById("button-cock_vore").addEventListener("click",cock_vore);


+ 9
- 0
recursive-desc.js View File

@@ -8,6 +8,7 @@ rules["tail-slap"] = [];
rules["tail-vore"] = [];
rules["ass-crush"] = [];
rules["breast-crush"] = [];
rules["breast-milk"] = [];
rules["unbirth"] = [];
rules["cock-vore"] = [];
rules["cockslap"] = [];
@@ -118,6 +119,7 @@ function describeDefault(action, container, macro, verbose=true) {
case "tail-slap": return defaultTailSlap(container, macro, verbose);
case "tail-vore": return defaultTailVore(container, macro, verbose);
case "breast-crush": return defaultBreastCrush(container, macro, verbose);
case "breast-milk": return defaultBreastMilk(container, macro, verbose);
case "unbirth": return defaultUnbirth(container, macro, verbose);
case "cock-vore": return defaultCockVore(container, macro, verbose);
case "cockslap": return defaultCockslap(container, macro, verbose);
@@ -186,6 +188,13 @@ function defaultBreastCrush(container, macro, verbose) {
return "You smoosh " + container.describe(verbose) + " with your breasts.";
}

function defaultBreastMilk(container, macro, verbose) {
if (isFatal(macro))
return "You squeeze your breasts, coaxing out $VOLUME of warm, creamy milk that floods " + container.describe(verbose) + " in an unstoppable wave of white.";
else
return "You squeeze your breasts, coaxing out $VOLUME of warm, creamy milk that floods " + container.describe(verbose) + ".";
}

function defaultUnbirth(container, macro, verbose) {
return "You gasp as you slide " + container.describe(verbose) + " up your slit. ";
}


+ 32
- 8
stroll.html View File

@@ -23,6 +23,8 @@
<div class=stat-line id=cumPercent></div>
<div class=stat-line id=femcum></div>
<div class=stat-line id=femcumPercent></div>
<div class=stat-line id=milk></div>
<div class=stat-line id=milkPercent></div>
</div>
<div class=stat-header-self>Growth</div>
<table id=grow-panel>
@@ -60,7 +62,7 @@
</div>
<div id=log-area>
<div id=log>
<div>Welcome to Stroll 0.4.2</div>
<div>Welcome to Stroll 0.4.3</div>
<div><b>This game features 18+ content</b></div>
<div><a href="https://chemicalcrux.org/stroll">Changelog</a></div>
<div>It's a nice day for a walk</div>
@@ -76,6 +78,7 @@
<button class=action-button id=button-tail_vore>Tail Vore</button>
<button class=action-button id=button-grind>Grind</button>
<button class=action-button id=button-breast_crush>Breast Crush</button>
<button class=action-button id=button-breast_milk>Milk Breasts</button>
<button class=action-button id=button-unbirth>Unbirth</button>
<button class=action-button id=button-cockslap>Cockslap</button>
<button class=action-button id=button-cock_vore>Cock Vore</button>
@@ -91,7 +94,7 @@


<div class=option-container id=option-panel>
<p>Welcome to Stroll 0.4.2</p>
<p>Welcome to Stroll 0.4.3</p>
<p><b>This game features 18+ content</b></p>
<a href="https://chemicalcrux.org/stroll">Changelog</a>
<br>
@@ -192,8 +195,8 @@
<input type="number" name="baseTailDiameter" placeholder="0.3"/><br>
</li>
<li>
<label for="baseDickDiameter">Tail maw(s)</label>
<input type="checkbox" name="tailMaw"/><br>
<label for="tailMaw">Tail maw(s)</label>
<input type="checkbox" checked=true name="tailMaw"/><br>
</div>
</div>
<br>
@@ -228,6 +231,31 @@
</div>
</div>
<br>
<div>
Breasts:<br>
<input type="checkbox" checked=true name="hasBreasts"/><br>
<div class=reveal-if-active>
<li>
<label for="baseBreastDiameter">Breast diameter</label>
<input type="number" name="baseBreastDiameter" placeholder="0.1"/><br>
</li>
<ul class=flex-outer>
Lactation:
<input type="checkbox" checked=true name="lactationEnabled"/><br>
<div class=reveal-if-active>
<li>
<label for="lactationFactor" class="has-tooltip" title="scales how much milk is released with each squeeze">Lactation ratio</label>
<input type="number" name="lactationFactor" placeholder="0.25"/><br>
</li>
<li>
<label for="lactationScale">Milk production factor</label>
<input type="number" name="lactationScale" placeholder="1"/><br>
</li>
</div>
</ul>
</div>
</div>
<br>
<div>
Female genitals:<br>
<input type="checkbox" checked=true name="femaleParts"/><br>
@@ -240,10 +268,6 @@
<label for="baseVaginaWidth">Slit width</label>
<input type="number" name="baseVaginaWidth" placeholder="0.05"/><br>
</li>
<li>
<label for="baseBreastDiameter">Breast diameter</label>
<input type="number" name="baseBreastDiameter" placeholder="0.1"/><br>
</li>
<li>
<label for="baseFemcumRatio" class="has-tooltip" title="scales how much femcum is released with each shot">Orgasm femcum ratio</label>
<input type="number" name="baseFemcumRatio" placeholder="1"/><br>


+ 14
- 1
style.css View File

@@ -91,7 +91,7 @@ body {
.action-button {
font-size: 24px;
width: 120px;
height: 75px;
height: 60px;
}

#victim-table {
@@ -109,6 +109,12 @@ body {
overflow: hidden;
}

.reveal-if-active-2 {
opacity: 0;
max-height: 0;
overflow: hidden;
}

input[type="radio"]:checked ~ .reveal-if-active,
input[type="checkbox"]:checked ~ .reveal-if-active {
opacity: 1;
@@ -116,6 +122,13 @@ input[type="checkbox"]:checked ~ .reveal-if-active {
overflow: visible;
}

input.sub[type="radio"]:checked ~ .reveal-if-active-2,
input.sub[type="checkbox"]:checked ~ .reveal-if-active-2 {
opacity: 1;
max-height: 200px; /* little bit of a magic number :( */
overflow: visible;
}

.flex-outer li,
.flex-inner {
display: flex;


Loading…
Cancel
Save