@@ -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": 20 000,  
		
	
		
			
			  "Parking Garage": 5 000,  
		
	
		
			
			  "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);