소스 검색

Added soul vore, tweaked cities/towns

tags/v0.7.0
Fen Dweller 7 년 전
부모
커밋
646e948bb6
5개의 변경된 파일207개의 추가작업 그리고 60개의 파일을 삭제
  1. +153
    -31
      game.js
  2. +20
    -1
      recursive-desc.js
  3. +21
    -25
      recursive-macro.js
  4. +12
    -2
      stroll.html
  5. +1
    -1
      style.css

+ 153
- 31
game.js 파일 보기

@@ -202,6 +202,9 @@ let macro =
--count;
}

if (container.count == 0)
return;

let digested = container.sum();

for (let key in victims[organ.name]) {
@@ -213,13 +216,26 @@ let macro =

let line = organ.describeDigestion(container);
organ.fill(this,container);
let summary = summarize(container.sum());
let lethal = macro.brutality != 0 && (!macro.soulVoreEnabled || organ.name === "souls");
let summary = summarize(container.sum(),lethal);

if (organ.contents.length > 0) {
setTimeout(function() { owner.digest(owner,organ); }, 15000);
}

update([line,summary,newline]);
if (macro.soulVoreEnabled && organ.name != "souls") {
owner.souls.feed(container);
let soulCount = container.sum()["Person"];
let soulLine = "";
if (soulCount > 0)
soulLine = "Their " + (soulCount == 1 ? "soul is" : "souls are") + " trapped in your depths!";
else
soulLine = "No souls, though...";
update([line,summary,soulLine,newline]);
} else {
update([line,summary,newline]);
}

},

"stomach": {
@@ -309,7 +325,7 @@ let macro =
},
"feedFunc": function(prey,self,owner) {
if (self.contents.length == 0)
setTimeout(function() { owner.digest(owner,self); }, 1500);
setTimeout(function() { owner.digest(owner,self); }, 15000);
this.contents.push(prey);
},
"describeDigestion": function(container) {
@@ -324,6 +340,28 @@ let macro =
"maxDigest" : 1
},

soulVoreEnabled: true,

"souls": {
"name" : "souls",
"feed": function(prey) {
this.feedFunc(prey,this,this.owner);
},
"feedFunc": function(prey,self,owner) {
if (self.contents.length == 0)
setTimeout(function() { owner.digest(owner,self); }, 15000);
this.contents.push(prey);
},
"describeDigestion": function(container) {
return describe("soul-digest",container,this.owner,verbose);
},
"fill": function(owner,container) {
//no-op
},
"contents" : [],
"maxDigest" : 5
},

// holding spots

hasPouch: true,
@@ -377,6 +415,7 @@ let macro =
this.womb.owner = this;
this.balls.owner = this;
this.breasts.owner = this;
this.souls.owner = this;
this.cumStorage.owner = this;
this.femcumStorage.owner = this;
this.milkStorage.owner = this;
@@ -899,9 +938,9 @@ function getPrey(region, area)
}
else if (macro.height > 1e6) {
weights = {
"Town": 0.1,
"City": 0.05,
"Continent": 0.005,
"Town": 0.00001,
"City": 0.00005,
"Continent": 0.0005,
"Planet": 0.0001
};
}
@@ -1980,6 +2019,78 @@ function pouch_eat()
update([sound,line,linesummary,newline]);
}

function soul_vore()
{
let area = macro.height * macro.height;
let prey = getPrey(biome,area);

let line = describe("soul-vore", prey, macro, verbose);
let linesummary = summarize(prey.sum(), false);

let people = get_living_prey(prey.sum());
let sound = "";
if (people == 0) {
sound = "";
} else if (people < 3) {
sound = "Ulp.";
} else if (people < 10) {
sound = "Gulp.";
} else if (people < 50) {
sound = "Glrrp.";
} else if (people < 500) {
sound = "Glrrrpkh!";
} else if (people < 5000) {
sound = "GLRRKPKH!";
} else {
sound = "Oh the humanity!";
}

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

macro.addGrowthPoints(preyMass);

macro.souls.feed(prey);

macro.arouse(15);

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

function soul_absorb_paw()
{
let prey = getPrey(biome,macro.pawArea);

let line = describe("soul-absorb-paw", prey, macro, verbose);
let linesummary = summarize(prey.sum(), true);

let people = get_living_prey(prey.sum());
let sound = "";

if (people < 3) {
sound = "Thump!";
} else if (people < 10) {
sound = "Squish!";
} else if (people < 50) {
sound = "Crunch!";
} else if (people < 500) {
sound = "CRUNCH!";
} else if (people < 5000) {
sound = "CRRUUUNCH!!";
} else {
sound = "Oh the humanity!";
}

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

macro.addGrowthPoints(preyMass);

macro.arouse(25);

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

function transformNumbers(line)
{
return line.toString().replace(/[0-9]+(\.[0-9]+)?(e\+[0-9]+)?/g, function(text) { return number(text, numbers); });
@@ -2297,12 +2408,12 @@ function startGame(e) {
if (macro.tailMaw) {
victimTypes = victimTypes.concat(["tailmaw'd"]);
} else {
document.getElementById("button-tail_vore").style.display = 'none';
document.getElementById("button-action-tail_vore").style.display = 'none';
}
} else {
document.getElementById("action-part-tails").style.display = 'none';
document.getElementById("button-tail_slap").style.display = 'none';
document.getElementById("button-tail_vore").style.display = 'none';
document.getElementById("button-action-tail_slap").style.display = 'none';
document.getElementById("button-action-tail_vore").style.display = 'none';
}

if (macro.maleParts) {
@@ -2310,28 +2421,28 @@ function startGame(e) {
if (macro.hasSheath) {
victimTypes.push("sheath");
} else {
document.getElementById("button-sheath_stuff").style.display = 'none';
document.getElementById("button-sheath_squeeze").style.display = 'none';
document.getElementById("button-action-sheath_stuff").style.display = 'none';
document.getElementById("button-action-sheath_squeeze").style.display = 'none';
}
} else {
document.getElementById("action-part-dick").style.display = 'none';
document.getElementById("button-cockslap").style.display = 'none';
document.getElementById("button-cock_vore").style.display = 'none';
document.getElementById("button-ball_smother").style.display = 'none';
document.getElementById("button-action-cockslap").style.display = 'none';
document.getElementById("button-action-cock_vore").style.display = 'none';
document.getElementById("button-action-ball_smother").style.display = 'none';
document.getElementById("cum").style.display = 'none';
document.getElementById("cumPercent").style.display = 'none';
document.querySelector("#part-balls+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';
document.getElementById("button-action-sheath_stuff").style.display = 'none';
document.getElementById("button-action-sheath_squeeze").style.display = 'none';
document.getElementById("button-action-sheath_absorb").style.display = 'none';
}

if (macro.femaleParts) {
victimTypes = victimTypes.concat(["womb"]);
} else {
document.getElementById("action-part-vagina").style.display = 'none';
document.getElementById("button-unbirth").style.display = 'none';
document.getElementById("button-action-unbirth").style.display = 'none';
document.getElementById("femcum").style.display = 'none';
document.getElementById("femcumPercent").style.display = 'none';
document.querySelector("#part-vagina+label").style.display = 'none';
@@ -2342,26 +2453,26 @@ function startGame(e) {
if (macro.lactationEnabled) {
victimTypes = victimTypes.concat(["flooded"]);
} else {
document.getElementById("button-breast_milk").style.display = 'none';
document.getElementById("button-action-breast_milk").style.display = 'none';
document.getElementById("milk").style.display = 'none';
document.getElementById("milkPercent").style.display = 'none';
}
if (macro.breastVore) {
victimTypes = victimTypes.concat(["breastvored"]);
} else {
document.getElementById("button-breast_vore").style.display = 'none';
document.getElementById("button-action-breast_vore").style.display = 'none';
}
} else {
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_milk").style.display = 'none';
document.getElementById("button-action-cleavage_stuff").style.display = 'none';
document.getElementById("button-action-cleavage_crush").style.display = 'none';
document.getElementById("button-action-cleavage_drop").style.display = 'none';
document.getElementById("button-action-cleavage_absorb").style.display = 'none';
document.getElementById("button-action-breast_vore").style.display = 'none';
document.getElementById("button-action-breast_milk").style.display = 'none';
document.getElementById("milk").style.display = 'none';
document.getElementById("milkPercent").style.display = 'none';
document.getElementById("button-breast_crush").style.display = 'none';
document.getElementById("button-action-breast_crush").style.display = 'none';
document.querySelector("#part-breasts+label").style.display = 'none';
}

@@ -2373,12 +2484,21 @@ function startGame(e) {
victimTypes.push("pouched");
} else {
document.getElementById("action-part-misc").style.display = 'none';
document.getElementById("button-pouch_stuff").style.display = 'none';
document.getElementById("button-pouch_eat").style.display = 'none';
document.getElementById("button-action-pouch_stuff").style.display = 'none';
document.getElementById("button-action-pouch_eat").style.display = 'none';
}

if (macro.soulVoreEnabled) {
victimTypes.push("soulvore");
victimTypes.push("soulpaws");
} else {
document.getElementById("action-part-souls").style.display = 'none';
document.getElementById("button-action-soul_vore").style.display = 'none';
document.getElementById("button-action-soul_absorb_paw").style.display = 'none';
}

if (macro.brutality < 1) {
document.getElementById("button-chew").style.display = 'none';
document.getElementById("button-action-chew").style.display = 'none';
}
let table = document.getElementById("victim-table");

@@ -2496,6 +2616,8 @@ window.addEventListener('load', function(event) {
victims["splooged"] = initVictims();
victims["ground"] = initVictims();
victims["pouched"] = initVictims();
victims["soulvore"] = initVictims();
victims["soulpaw"] = initVictims();

document.querySelectorAll(".action-part-button").forEach(function (element) {
element.addEventListener("click",actionTab);
@@ -2503,7 +2625,7 @@ window.addEventListener('load', function(event) {

registerActions();

document.getElementById("button-look").addEventListener("look",look);
document.getElementById("button-look").addEventListener("click",look);
document.getElementById("button-stroll").addEventListener("click",toggle_auto);
document.getElementById("button-location").addEventListener("click",change_location);
document.getElementById("button-numbers").addEventListener("click",toggle_numbers);


+ 20
- 1
recursive-desc.js 파일 보기

@@ -20,7 +20,7 @@ var actions = ["eat","chew","stomp","kick","anal-vore","ass-crush","tail-slap","
"cleavage-stuff","cleavage-crush","cleavage-drop","cleavage-absorb","breast-crush",
"breast-vore","breast-milk","unbirth","sheath-stuff","sheath-squeeze","sheath-crush",
"sheath-absorb","cock-vore","cockslap","ball-smother","male-spurt","male-orgasm","female-spurt",
"female-orgasm","grind","pouch-stuff","pouch-eat","stomach","womb","balls","bowels","breasts"];
"female-orgasm","grind","pouch-stuff","soul-vore","soul-absorb-paw","pouch-eat","stomach","womb","balls","bowels","breasts","soul-digest"];

for (let i=0; i<actions.length; i++) {
rules[actions[i]] = [];
@@ -333,6 +333,15 @@ function defaultPouchEat(container, macro, verbose) {
return "You snatch " + container.describe(verbose) + " from your pouch and shove " + (container.count > 1 ? "them" : "it") + " down your gullet!";
}

function defaultSoulVore(container, macro, verbose) {
return "You open your jaws and inhale, ripping the souls from " + container.describe(verbose) + " and dragging them down deep inside.";
}

function defaultSoulAbsorbPaw(container, macro, verbose) {
let sum = container.sum()["Person"];
return "Your paw slams down on " + container.describe(verbose) + ", smashing them to pieces and absorbing " + sum + (sum == 1 ? " soul" : " souls") + " into your pads.";
}

function defaultStomach(container, macro, verbose) {
if (isFatal(macro))
return "Your stomach gurgles as it digests " + container.describe(false);
@@ -368,6 +377,16 @@ function defaultBreasts(container, macro, verbose) {
return "Your breasts slosh as they absorb " + container.describe(false);
}

function defaultSoulDigest(container, macro, verbose) {
let sum = container.sum()["Person"];
if (isGory(macro))
return "Your depths churn as they annihilate " + (sum == 1 ? "a soul" : sum + " souls") + " forever.";
else if (isFatal(macro))
return "Your depths churn as they claim " + (sum == 1 ? "a soul" : sum + " souls");
else
return "Your depths absorb " + (sum == 1 ? "a soul" : sum + " souls");
}

// EATING

rules["eat"].push({


+ 21
- 25
recursive-macro.js 파일 보기

@@ -850,21 +850,17 @@ function Town(count = 1) {
this.count = count;
this.contents = {};

this.addContent("Person",1000,15000,count);

this.addContent("House",500,10000,count);
this.addContent("Person",500,1000,count);

this.addContent("Empty Car",250,3750,count);
this.addContent("House",200,400,count);

this.addContent("Car",250,3750,count);
this.addContent("Empty Car",200,800,count);

this.addContent("Bus",50,150,count);
this.addContent("Car",200,500,count);

this.addContent("Train",5,10,count);
this.addContent("Bus",10,50,count);

this.addContent("Small Skyscraper",2,10,count);

this.addContent("Parking Garage",1,5,count);
this.addContent("Train",5,25,count);

this.describe = function(verbose = true) {
if (verbose) {
@@ -882,25 +878,25 @@ function City(count = 1) {
this.count = count;
this.contents = {};

this.addContent("Person",10000,150000,count);
this.addContent("Person",1000,15000,count);

this.addContent("House",5000,100000,count);
this.addContent("House",500,1000,count);

this.addContent("Empty Car",2500,37500,count);
this.addContent("Empty Car",2500,3750,count);

this.addContent("Car",2500,37500,count);
this.addContent("Car",500,1000,count);

this.addContent("Bus",150,500,count);
this.addContent("Bus",50,100,count);

this.addContent("Train",50,100,count);
this.addContent("Train",10,50,count);

this.addContent("Tram",100,300,count);
this.addContent("Tram",5,25,count);

this.addContent("Small Skyscraper",20,100,count);
this.addContent("Small Skyscraper",10,50,count);

this.addContent("Large Skyscraper",10,50,count);
this.addContent("Large Skyscraper",5,20,count);

this.addContent("Parking Garage",10,50,count);
this.addContent("Parking Garage",5,10,count);

this.describe = function(verbose = true) {
if (verbose) {
@@ -920,15 +916,15 @@ function Continent(count = 1) {

this.addContent("Person",100000,1500000,count);

this.addContent("House",5000,100000,count);
this.addContent("House",500,10000,count);

this.addContent("Car",25000,375000,count);
this.addContent("Car",2500,37500,count);

this.addContent("Train",500,1000,count);
this.addContent("Train",50,100,count);

this.addContent("Town",2000,5000,count);
this.addContent("Town",100,250,count);

this.addContent("City",200,500,count);
this.addContent("City",25,75,count);

this.describe = function(verbose = true) {
if (verbose) {


+ 12
- 2
stroll.html 파일 보기

@@ -73,7 +73,7 @@
</div>
<div id="log-area">
<div id="log">
<div>Welcome to Stroll 0.5.2</div>
<div>Welcome to Stroll 0.5.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>
@@ -87,6 +87,7 @@
<button class="action-part-button" id="action-part-vagina">Slit</button>
<button class="action-part-button" id="action-part-breasts">Breasts</button>
<button class="action-part-button" id="action-part-tails">Tails</button>
<button class="action-part-button" id="action-part-souls">Souls</button>
<button class="action-part-button" id="action-part-misc">Misc</button>
</div>

@@ -121,6 +122,10 @@
<button class="action-button" id="button-action-cock_vore">Cock Vore</button>
<button class="action-button" id="button-action-ball_smother">Ball Smother</button>
</div>
<div class="action-tab" id="actions-souls">
<button class="action-button" id="button-action-soul_vore">Soul Vore</button>
<button class="action-button" id="button-action-soul_absorb_paw">Paws</button>
</div>
<div class="action-tab" id="actions-misc">
<button class="action-button" id="button-action-pouch_stuff">Stuff Pouch</button>
<button class="action-button" id="button-action-pouch_eat">Eat From Pouch</button>
@@ -129,7 +134,7 @@


<div class="option-container" id="option-panel">
<p>Welcome to Stroll 0.5.2</p>
<p>Welcome to Stroll 0.5.3</p>
<p><b>This game features 18+ content</b></p>
<a href="https://chemicalcrux.org/stroll">Changelog</a>
<br>
@@ -204,6 +209,11 @@
<label for="brutality-3">Sadistic (not implemented)</label>
</li>
</ul>
<br>
<li>
<label for="soulVoreEnabled">Soul vore</label>
<input type="checkbox" checked="true" name="soulVoreEnabled"/><br>
</li>
<div>
Arousal:<br>
<input type="checkbox" checked="true" name="arousalEnabled"/><br>


+ 1
- 1
style.css 파일 보기

@@ -103,7 +103,7 @@ body.dark #log {
}

.action-part-container {
max-height: 300px;
max-height: 400px;
display: flex;
flex-wrap: wrap;
}


불러오는 중...
취소
저장