diff --git a/game.js b/game.js index eccff85..17205b5 100644 --- a/game.js +++ b/game.js @@ -39,6 +39,7 @@ function initVictims() "Tram": 0, "Motorcycle": 0, "House": 0, + "Small Skyscraper": 0, "Train": 0, "Train Car": 0, "Parking Garage": 0, @@ -57,7 +58,7 @@ var bowels = [] function getOnePrey(area) { - var potential = ["Person", "Car", "Bus", "Tram", "House", "Train", "Parking Garage"]; + var potential = ["Person", "Car", "Bus", "Tram", "House", "Train", "Parking Garage", "Small Skyscraper"]; var potAreas = [] @@ -88,7 +89,7 @@ function getPrey(region, area) function suburbPrey(area) { - return fill_area2(area, {"Person": 0.5, "House": 0.5, "Car": 0.2, "Tram": 0.1, "Bus": 0.1}); + return fill_area2(area, {"Person": 0.5, "House": 0.5, "Car": 0.2, "Tram": 0.1, "Bus": 0.1, "Small Skyscraper": 0.05, "Parking Garage": 0.02, "Train": 0.05}); } function updateVictims(type,prey) @@ -143,9 +144,9 @@ function stomp() function anal_vore() { - var prey = getOnePrey(scale*scale); + var prey = getOnePrey(0.25*scale*scale); var crushed = getPrey("suburb",3*scale*scale); - var line1 = prey.anal_vore() + " " + summarize(prey.sum(), false); + var line1 = prey.anal_vore(baseHeight*scale) + " " + summarize(prey.sum(), false); var line2 = crushed.buttcrush() + " " + summarize(crushed.sum(), false) var preyMass = prey.sum_property("mass"); diff --git a/recursive-desc.js b/recursive-desc.js index 0f9336f..0930e80 100644 --- a/recursive-desc.js +++ b/recursive-desc.js @@ -74,3 +74,13 @@ function personStomp(person) { return ""; } + +function skyscraperAnalVore(skyscraper,height = 10) { + if (height < 5000) { + return "You ease yourself down over the skyscraper, spreading your ass wide as you take it to the ground - then, with a powerful clench, snap it from its base. " + describe_all(skyscraper.contents) + " are sealed away in your ass."; + } else { + return "You stuff the skyscraper up your ass with ease. Bad luck for " + describe_all(skyscraper.contents) + " inside."; + } + + return ""; +} diff --git a/recursive-macro.js b/recursive-macro.js index bece3a4..45f79f9 100644 --- a/recursive-macro.js +++ b/recursive-macro.js @@ -9,6 +9,7 @@ var things = "Tram": Tram, "Motorcycle": Motorcycle, "House": House, + "Small Skyscraper": SmallSkyscraper, "Train": Train, "Train Car": TrainCar, "Parking Garage": ParkingGarage, @@ -24,12 +25,29 @@ var areas = "Tram": 20, "Motorcycle": 2, "House": 1000, + "Small Skyscraper": 10000, "Train": 500, "TrainCar": 500, - "Parking Garage": 20000, + "Parking Garage": 5000, "Overpass": 10000, }; +var masses = +{ + "Container": 0, + "Person": 80, + "Car": 1000, + "Bus": 5000, + "Tram": 10000, + "Motorcycle": 200, + "House": 10000, + "Small Skyscraper": 100000, + "Train": 5000, + "Train Car": 5000, + "Parking Garage": 100000, + "Overpass": 100000, +}; + // general logic: each step fills in a fraction of the remaining space function fill_area2(area, weights = {"Person": 0.1, "Car": 0.05, "House": 0.1}) @@ -127,21 +145,6 @@ function fill_area(area, weights = {"Person": 0.1}) return new Person(); } -var masses = -{ - "Container": 0, - "Person": 80, - "Car": 1000, - "Bus": 5000, - "Tram": 10000, - "Motorcycle": 200, - "House": 10000, - "Train": 5000, - "Train Car": 5000, - "Parking Garage": 100000, - "Overpass": 100000, -}; - // describes everything in the container function describe_all(contents,verbose=true) { @@ -223,23 +226,23 @@ function distribution(min, max, samples) { /* default actions */ function defaultStomp(thing) { - return function () { return "You crush " + thing.describe() + " underfoot."}; + return function (height=10) { return "You crush " + thing.describe() + " underfoot."}; } function defaultKick(thing) { - return function() { return "You punt " + thing.describe() + ", destroying " + (thing.count > 1 ? "them" : "it") + "."; } + return function(height=10) { return "You punt " + thing.describe() + ", destroying " + (thing.count > 1 ? "them" : "it") + "."; } } function defaultEat(thing) { - return function() { return "You scoop up " + thing.describe() + " and swallow " + (thing.count > 1 ? "them" : "it") + " whole."; } + return function(height=10) { return "You scoop up " + thing.describe() + " and swallow " + (thing.count > 1 ? "them" : "it") + " whole."; } } function defaultAnalVore(thing) { - return function() { return "You sit yourself down on " + thing.describe() + ". " + (thing.count > 1 ? "They slide" : "It slides") + " inside with ease."; } + return function(height=10) { return "You sit yourself down on " + thing.describe() + ". " + (thing.count > 1 ? "They slide" : "It slides") + " inside with ease."; } } function defaultButtcrush(thing) { - return function() { return "Your heavy ass obliterates " + thing.describe() + ". "; } + return function(height=10) { return "Your heavy ass obliterates " + thing.describe() + ". "; } } function defaultArea(thing) { @@ -649,9 +652,6 @@ function House(count = 1) { this.count = count; this.contents = {}; - - - var amount = distribution(0,8,count); this.contents.person = new Person(amount); amount = distribution(0,2,count); @@ -677,14 +677,49 @@ function House(count = 1) { } } -function ParkingGarage(count = 1) { - this.name = "Parking Garage"; +function SmallSkyscraper(count = 1) { + this.name = "Small Skyscraper"; copy_defaults(this,new DefaultEntity()); this.count = count; this.contents = {}; + var amount = distribution(50,500,1); + this.contents.person = new Person(amount); + amount = distribution(10,50,count); + this.contents.emptycar = new EmptyCar(amount); + + this.describeOne = function(verbose=true) { + color = random_desc(["blue","white","gray","tan","green"], (verbose ? 0.5 : 0)); + name = random_desc(["skyscraper","office tower","office building"], 1); + return "a " + merge_desc([color,name]); + } + + this.describe = function(verbose = true) { + if (this.count <= 3) { + list = []; + for (var i = 0; i < this.count; i++) { + list.push(this.describeOne(this.count < 2)); + } + return merge_things(list) + " with " + describe_all(this.contents,false) + " inside"; + } else { + return this.count + " small skyscrapers with " + describe_all(this.contents,false) + " inside"; + } + } + this.anal_vore = function(height=10) { + var line = skyscraperAnalVore(this,height); + if (line == "") + return defaultAnalVore(this)(); + else + return line; + }; +} +function ParkingGarage(count = 1) { + this.name = "Parking Garage"; + copy_defaults(this,new DefaultEntity()); + this.count = count; + this.contents = {}; var amount = distribution(10,200,count); this.contents.person = new Person(amount); @@ -716,9 +751,6 @@ function Overpass(count = 1) { this.count = count; this.contents = {}; - - - var amount = distribution(0,20,count); this.contents.person = new Person(amount); amount = distribution(25,100,count);