From 7c887a157a96bc39deb91eeff59dcad147a7ea3f Mon Sep 17 00:00:00 2001 From: Fen Dweller Date: Wed, 30 May 2018 21:52:15 -0400 Subject: [PATCH] Stench for piss and scat --- game.js | 66 ++++++++++++++++++++++++++++++++++++++++++++--- recursive-desc.js | 24 +++++++++++++++-- units.js | 47 +++++++++++++++++++-------------- 3 files changed, 112 insertions(+), 25 deletions(-) diff --git a/game.js b/game.js index afa465d..b251e5f 100644 --- a/game.js +++ b/game.js @@ -1656,7 +1656,7 @@ function digest_all(organ) { if (prey.count == 0) { return; } - + do_digestion(organ.owner, organ, prey); } @@ -1825,7 +1825,7 @@ function stomp() stomp_wedge(); - if (macro.stenchEnabled) { + if (macro.stenchEnabled && macro.basePawStenchArea > 0) { paw_stench(); } } @@ -2035,7 +2035,7 @@ function sit() macro.arouse(5); - if (macro.stenchEnabled) { + if (macro.stenchEnabled && macro.baseAssStenchArea > 0) { ass_stench(); } } @@ -2062,7 +2062,7 @@ function sit_goo() macro.arouse(15); - if (macro.stenchEnabled) { + if (macro.stenchEnabled && macro.baseAssStenchArea > 0) { ass_stench(); } } @@ -3013,6 +3013,31 @@ function piss(vol) { update([sound,line,linesummary,newline]); macro.arouse(20); + + if (macro.stenchEnabled && macro.basePissStenchArea > 0) { + piss_stench(area); + } +} + +function piss_stench(area) { + let prey = getPrey(biome, area); + let line = describe("piss-stench", prey, macro, verbose); + let linesummary = summarize(prey.sum(), true); + + let people = get_living_prey(prey.sum()); + + if (get_living_prey(prey.sum()) == 0) + return; + + let preyMass = prey.sum_property("mass"); + + macro.addGrowthPoints(preyMass); + + add_victim_people("piss-stench",prey); + + update([line,linesummary,newline]); + + macro.arouse(5); } function bladder_vore() { @@ -3061,6 +3086,31 @@ function scat(vol) { macro.scatStorage.amount -= vol; macro.arouse(50); + + if (macro.stenchEnabled && macro.baseScatStenchArea > 0) { + scat_stench(area); + } +} + +function scat_stench(area) { + let prey = getPrey(biome, area); + let line = describe("scat-stench", prey, macro, verbose); + let linesummary = summarize(prey.sum(), true); + + let people = get_living_prey(prey.sum()); + + if (get_living_prey(prey.sum()) == 0) + return; + + let preyMass = prey.sum_property("mass"); + + macro.addGrowthPoints(preyMass); + + add_victim_people("scat-stench",prey); + + update([line,linesummary,newline]); + + macro.arouse(5); } function setButton(button, state) { @@ -3823,6 +3873,10 @@ function startGame(e) { enable_button("digest_bladder"); } } + + if (macro.stenchEnabled) { + enable_victim("piss-stench","Smothered in piss stench"); + } } if (macro.scatEnabled) { @@ -3834,6 +3888,10 @@ function startGame(e) { enable_stat("scat"); enable_victim("scat","Shat on"); + + if (macro.stenchEnabled) { + enable_victim("scat-stench","Smothered in scat stench"); + } } if (macro.gooEnabled) { diff --git a/recursive-desc.js b/recursive-desc.js index f364793..b0516dd 100644 --- a/recursive-desc.js +++ b/recursive-desc.js @@ -530,7 +530,7 @@ function defaultPawStench(container, macro, verbose) { if (isFatal(macro)) return "Vile fumes waft from your " + macro.footDesc(true) + " , choking the life from " + (sum > 1 ? sum + " people." : "a person."); else - return "Your stinky " + macro.footDesc(true) + " overwhelm" + (sum > 1 ? sum + " people" : "a person") + " with your scent!"; + return "Your stinky " + macro.footDesc(true) + " overwhelms " + (sum > 1 ? sum + " people" : "a person") + " with your scent!"; } function defaultAssStench(container, macro, verbose) { @@ -540,7 +540,27 @@ function defaultAssStench(container, macro, verbose) { if (isFatal(macro)) return "Vile miasma from your bitter ass snuffs out " + (sum > 1 ? sum + " people" : "a person") + ", suffocating them in your stench."; else - return "Your stinky ass sicens " + (sum > 1 ? sum + " people" : "a person") + " with your scent!"; + return "Your stinky butt sickens " + (sum > 1 ? sum + " people" : "a person") + " with your scent!"; +} + +function defaultPissStench(container, macro, verbose) { + let sum = get_living_prey(container.sum()); + if (isSadistic(macro)) + return "Waves of corrosive fumes waft from your piss, the toxic cloud liquefying the flesh of " + (sum > 1 ? numberRough(sum,"of") + " people" : "a person") + " as it dissolves " + container.describe(false) + "."; + if (isFatal(macro)) + return "Vile fumes waft from your piss, choking the life from " + (sum > 1 ? sum + " people." : "a person."); + else + return "Your stinky piss overwhelms " + (sum > 1 ? sum + " people" : "a person") + " with your scent!"; +} + +function defaultScatStench(container, macro, verbose) { + let sum = get_living_prey(container.sum()); + if (isSadistic(macro)) + return "A rancid miasma spews from your shit - a thick, choking avalanche of toxic vapors that reduce " + (sum > 1 ? numberRough(sum,"of") + " people" : "a person") + " to nothing but bones as it melts " + container.describe(false) + "."; + if (isFatal(macro)) + return "Vile fumes waft from your scat, choking the life from " + (sum > 1 ? sum + " people." : "a person."); + else + return "Your stinky scat overwhelms " + (sum > 1 ? sum + " people" : "a person") + " with your scent!"; } function defaultBelch(container, macro, verbose) { diff --git a/units.js b/units.js index cf0e454..46afcd3 100644 --- a/units.js +++ b/units.js @@ -5,28 +5,37 @@ function round(number,precision=3) { } function numberRough(value,suffix="") { - var scale = Math.floor(Math.log10(value)); - switch(scale) { - case 0: return "a single"; - case 1: return "dozens " + suffix; - case 2: return "hundreds " + suffix; - default: - let prefix = ""; + if (value == 1) { + return "a single"; + } else if (value < 5) { + return "a few"; + } else if (value < 12) { + return "a handful " + suffix; + } else if (value == 12) { + return "a dozen"; + } else { + var scale = Math.floor(Math.log10(value)); + switch(scale) { + case 1: return "dozens " + suffix; + case 2: return "hundreds " + suffix; + default: + let prefix = ""; - if (scale % 3 == 1) - prefix = "tens of "; - else if (scale % 3 == 2) - prefix = "hundreds of "; + if (scale % 3 == 1) + prefix = "tens of "; + else if (scale % 3 == 2) + prefix = "hundreds of "; - let order = Math.floor(scale/3); + let order = Math.floor(scale/3); - switch(order) { - case 1: return prefix + "thousands " + suffix; - case 2: return prefix + "millions " + suffix; - case 3: return prefix + "billions " + suffix; - case 4: return prefix + "trillions " + suffix; - default: return "uncountably many"; - } + switch(order) { + case 1: return prefix + "thousands " + suffix; + case 2: return prefix + "millions " + suffix; + case 3: return prefix + "billions " + suffix; + case 4: return prefix + "trillions " + suffix; + default: return "uncountably many"; + } + } } } function number(value, type="full", precision=3) {