@@ -1,150 +1,460 @@  
		
	
		
			
			 
		
	
		
			
			/*  
		
	
		
			
			 
		
	
		
			
			function defaultSumDST(thing) {  
		
	
		
			
			  return function() {  
		
	
		
			
			    var counts = {};  
		
	
		
			
			 
		
	
		
			
			    if (thing.name != "Container") //if a container is detected, sets counts   
		
	
		
			
			      counts[thing.name] = thing.count;   
		
	
		
			
			 
		
	
		
			
			    for (var key in thing.contents) {  
		
	
		
			
			      if (thing.contents.hasOwnProperty(key)) {  
		
	
		
			
			        var subcount = thing.contents[key].sum();  
		
	
		
			
			        for (var subkey in subcount) {  
		
	
		
			
			          if (!counts.hasOwnProperty(subkey)) {  
		
	
		
			
			            counts[subkey] = 0;  
		
	
		
			
			          }  
		
	
		
			
			          counts[subkey] += subcount[subkey];  
		
	
		
			
			        }  
		
	
		
			
			      }  
		
	
		
			
			    }  
		
	
		
			
			 
		
	
		
			
			    return counts;  
		
	
		
			
			  };  
		
	
		
			
			}  
		
	
		
			
			 
		
	
		
			
			function defaultSumProperty(thing) {  
		
	
		
			
			  return function(prop) {  
		
	
		
			
			    var total = 0;  
		
	
		
			
			 
		
	
		
			
			    total += thing[prop] * thing.count;  
		
	
		
			
			 
		
	
		
			
			    for (var key in thing.contents) {  
		
	
		
			
			      if (thing.contents.hasOwnProperty(key)) {  
		
	
		
			
			        total += thing.contents[key].sum_property(prop);  
		
	
		
			
			      }  
		
	
		
			
			    }  
		
	
		
			
			 
		
	
		
			
			    return total;  
		
	
		
			
			  };  
		
	
		
			
			}  
		
	
		
			
			 
		
	
		
			
			function defaultArea(thing) {  
		
	
		
			
			  return areas[thing.name];  
		
	
		
			
			}  
		
	
		
			
			 
		
	
		
			
			function DefaultDestructable() {  
		
	
		
			
			  this.name = this.defaults.name;  
		
	
		
			
			  this.area = this.defaults.area;  
		
	
		
			
			  this.mass = this.defaults.mass;  
		
	
		
			
			  this.sum = defaultSumDST;  
		
	
		
			
			  this.sum_property = defaultSumProperty;  
		
	
		
			
			  this.merge = defaultMerge;  
		
	
		
			
			  this.multiply = defaultMultiply;  
		
	
		
			
			  this.describeSimple = defaultDescribeSimple;  
		
	
		
			
			 
		
	
		
			
			  return this;  
		
	
		
			
			}  
		
	
		
			
			 
		
	
		
			
			function copy_defaultsDST(self,proto) {  
		
	
		
			
			  for (var key in proto) {  
		
	
		
			
			    if (proto.hasOwnProperty(key)) {  
		
	
		
			
			      self[key] = proto[key](self);  
		
	
		
			
			    }  
		
	
		
			
			  }  
		
	
		
			
			}  
		
	
		
			
			 
		
	
		
			
			  personVar = {  
		
	
		
			
			    name: "Person",  
		
	
		
			
			    area: 0.33,  
		
	
		
			
			    mass: 80,  
		
	
		
			
			    clusters: 5,  
		
	
		
			
			    cluster_chances: .8,  
		
	
		
			
			    contents: [],  
		
	
		
			
			    body: [["skinny", -10,0],["fat", 15,.05],["tall", 7, 0],["short",-7,0],["stocky",5,.02],["spindly",-5,-.02],["muscular",7,0],["fit",0,0],["multi-colored",0,0]],//["bodytype", mass modifier, area modifier]  
		
	
		
			
			    sex: [["male",2,.02],["female",2,.02]],//["sex", mass modifier, area modifier]  
		
	
		
			
			    species: [["wolf",80,.35],["cat",70,.3],["dog",75,.31],["squirrel",68,.29],["horse",90,.4],["hyena",78,.32],["fox",72,.3],["jackal",74,.32],["crux",90,.33],["sergal",77,.34]],//["species", mass modifier, area modifier]  
		
	
		
			
			    singular: "person",  
		
	
		
			
			    plural: "people"  
		
	
		
			
			    }  
		
	
		
			
			function PersonDST(count = 1) {  
		
	
		
			
			  this.defaults = personVar;  
		
	
		
			
			 
		
	
		
			
			  copy_defaultsDST(this,new DefaultDestructable());  
		
	
		
			
			 
		
	
		
			
			  this.count = count;  
		
	
		
			
			  this.contents = initContents(this.name,this.count);  
		
	
		
			
			 
		
	
		
			
			  this.describeOne = function (verbose=true) {  
		
	
		
			
			    var body = random_desc(this.properties.body, (verbose ? 0.6 : 0));  
		
	
		
			
			    var sex = random_desc(this.properties.sex, (verbose ? 1 : 0));  
		
	
		
			
			    var species = random_desc(this.properties.species);  
		
	
		
			
			    return "a " + merge_desc([body,sex,species]);  
		
	
		
			
			  };  
		
	
		
			
			 
		
	
		
			
			  this.describe = function(verbose=true) {  
		
	
		
			
			    if (verbose) {  
		
	
		
			
			      if (count <= 3) {  
		
	
		
			
			        var list = [];  
		
	
		
			
			        for (var i = 0; i < count; i++) {  
		
	
		
			
			          list.push(this.describeOne(this.count <= 2));  
		
	
		
			
			        }  
		
	
		
			
			        return merge_things(list);  
		
	
		
			
			      } else {  
		
	
		
			
			        return this.count + " people";  
		
	
		
			
			      }  
		
	
		
			
			    } else {  
		
	
		
			
			      return (this.count > 1 ? this.count + " people" : "a person");  
		
	
		
			
			    }  
		
	
		
			
			  };  
		
	
		
			
			 
		
	
		
			
			  return this;  
		
	
		
			
			}  
		
	
		
			
			*/  
		
	
		
			
			 
		
	
		
			
			 
		
	
		
			
			'use strict';  
		
	
		
			
			 
		
	
		
			
			var things =  
		
	
		
			
			{  
		
	
		
			
			  "Container": Container,  
		
	
		
			
			  "Container": {  
		
	
		
			
			    "Container": Container,  
		
	
		
			
			    mass: 0,  
		
	
		
			
			    area: 0,  
		
	
		
			
			    clusters: 0,  
		
	
		
			
			    cluster_chances: 0,  
		
	
		
			
			    contents: [],  
		
	
		
			
			    },  
		
	
		
			
			 
		
	
		
			
			//Creatures  
		
	
		
			
			  "Person": Person,  
		
	
		
			
			  "Human": Human,  
		
	
		
			
			  "Cow": Cow,  
		
	
		
			
			  "Micro": Micro,  
		
	
		
			
			  "Macro": Macro,  
		
	
		
			
			  "Person": {  
		
	
		
			
			    "Person": Person,  
		
	
		
			
			    mass: 80,  
		
	
		
			
			    area: .33,  
		
	
		
			
			    clusters: 5,  
		
	
		
			
			    cluster_chances: .8,  
		
	
		
			
			    contents: [],  
		
	
		
			
			    },  
		
	
		
			
			  "Human": {  
		
	
		
			
			    "Human": Human,  
		
	
		
			
			    mass: 80,  
		
	
		
			
			    area: .33,  
		
	
		
			
			    clusters: 5,  
		
	
		
			
			    cluster_chances: .8,  
		
	
		
			
			    contents: [],  
		
	
		
			
			    },  
		
	
		
			
			  "Cow": {  
		
	
		
			
			    "Cow": Cow,  
		
	
		
			
			    mass: 300,  
		
	
		
			
			    area: 2,  
		
	
		
			
			    clusters: 15,  
		
	
		
			
			    cluster_chances: .5,  
		
	
		
			
			    contents: [],  
		
	
		
			
			    },  
		
	
		
			
			  "Micro": {  
		
	
		
			
			    "Micro": Micro,  
		
	
		
			
			    mass: .01,  
		
	
		
			
			    area: .05,  
		
	
		
			
			    clusters: 50,  
		
	
		
			
			    cluster_chances: 1,  
		
	
		
			
			    contents: [[]],  
		
	
		
			
			    },  
		
	
		
			
			  "Macro": {  
		
	
		
			
			   "Macro": Macro,  
		
	
		
			
			    mass: 8e4,  
		
	
		
			
			    area: 100,  
		
	
		
			
			    clusters: 0,  
		
	
		
			
			    cluster_chances: 0,  
		
	
		
			
			    contents: [[]],  
		
	
		
			
			    },  
		
	
		
			
			//Vehicles  
		
	
		
			
			  "Empty Car": EmptyCar,  
		
	
		
			
			  "Car": Car,  
		
	
		
			
			  "Bus": Bus,  
		
	
		
			
			  "Tram": Tram,  
		
	
		
			
			  "Train": Train,  
		
	
		
			
			  "Train Car": TrainCar,  
		
	
		
			
			  "Empty Car": {  
		
	
		
			
			    "Empty Car": EmptyCar,  
		
	
		
			
			    mass: 1000,  
		
	
		
			
			    area: 4,  
		
	
		
			
			    clusters: 2,  
		
	
		
			
			    cluster_chances: .3,  
		
	
		
			
			    contents: [[]],  
		
	
		
			
			    },  
		
	
		
			
			  "Car": {  
		
	
		
			
			    "Car": Car,  
		
	
		
			
			    mass: 1000,  
		
	
		
			
			    area: 4,  
		
	
		
			
			    clusters: 4,  
		
	
		
			
			    cluster_chances: .5,  
		
	
		
			
			    contents: [["Person",1,4]],  
		
	
		
			
			    },  
		
	
		
			
			  "Bus": {  
		
	
		
			
			    "Bus": Bus,  
		
	
		
			
			    mass: 5000,  
		
	
		
			
			    area: 12,  
		
	
		
			
			    clusters: 1,  
		
	
		
			
			    cluster_chances: .25,  
		
	
		
			
			    contents: [["Person",2,30]],  
		
	
		
			
			    },  
		
	
		
			
			  "Tram": {  
		
	
		
			
			    "Tram": Tram,  
		
	
		
			
			    mass: 1e4,  
		
	
		
			
			    area: 20,  
		
	
		
			
			    clusters: 1,  
		
	
		
			
			    cluster_chances: .2,  
		
	
		
			
			    contents: [["Person",10,50]],  
		
	
		
			
			    },  
		
	
		
			
			  "Train": {  
		
	
		
			
			    "Train": Train,  
		
	
		
			
			    mass: 5e4,  
		
	
		
			
			    area: 40,  
		
	
		
			
			    clusters: 2,  
		
	
		
			
			    cluster_chances: .1,  
		
	
		
			
			    contents: [["Person",1,4,"engine"],["Train Car",2,10]],  
		
	
		
			
			    },  
		
	
		
			
			  "Train Car": {  
		
	
		
			
			    "Train Car": TrainCar,  
		
	
		
			
			    mass: 7500,  
		
	
		
			
			    area: 20,  
		
	
		
			
			    clusters: 1,  
		
	
		
			
			    cluster_chances: .05,  
		
	
		
			
			    contents: [["Person",10,40]],  
		
	
		
			
			    },  
		
	
		
			
			//Buildings  
		
	
		
			
			  "House": House,  
		
	
		
			
			  "Business": Business,  
		
	
		
			
			  "Barn": Barn,  
		
	
		
			
			  "Small Skyscraper": SmallSkyscraper,  
		
	
		
			
			  "Large Skyscraper": LargeSkyscraper,  
		
	
		
			
			  "Parking Garage": ParkingGarage,  
		
	
		
			
			  "House": {  
		
	
		
			
			    "House": House,  
		
	
		
			
			    mass: 1e4,  
		
	
		
			
			    area: 150,  
		
	
		
			
			    clusters: 5,  
		
	
		
			
			    cluster_chances: .5,  
		
	
		
			
			    contents: [["Person",0,8],["Empty Car",0,2]],  
		
	
		
			
			    },  
		
	
		
			
			  "Business": {  
		
	
		
			
			    "Business": Business,  
		
	
		
			
			    mass: 5e4,  
		
	
		
			
			    area: 400,  
		
	
		
			
			    clusters: 5,  
		
	
		
			
			    cluster_chances: .25,  
		
	
		
			
			    contents: [["Person",0,30],["Car",0,5],["Empty Car",0,20]],  
		
	
		
			
			    },  
		
	
		
			
			  "Barn": {  
		
	
		
			
			    "Barn": Barn,  
		
	
		
			
			    mass: 5e3,  
		
	
		
			
			    area: 300,  
		
	
		
			
			    clusters: 1,  
		
	
		
			
			    cluster_chances: .1,  
		
	
		
			
			    contents: [["Person",0,2],["Cow",30,70]],  
		
	
		
			
			    },  
		
	
		
			
			  "Small Skyscraper": {  
		
	
		
			
			    "Small Skyscraper": SmallSkyscraper,  
		
	
		
			
			    mass: 1e7,  
		
	
		
			
			    area: 1000,  
		
	
		
			
			    clusters: 2,  
		
	
		
			
			    cluster_chances: .25,  
		
	
		
			
			    contents: [["Person",150,750],["Empty Car",10,50]],  
		
	
		
			
			    },  
		
	
		
			
			  "Large Skyscraper": {  
		
	
		
			
			    "Large Skyscraper": LargeSkyscraper,  
		
	
		
			
			    mass: 8e7,  
		
	
		
			
			    area: 2000,  
		
	
		
			
			    clusters: 1,  
		
	
		
			
			    cluster_chances: .25,  
		
	
		
			
			    contents: [["Person",500,1500],["Empty Car",20,100]],  
		
	
		
			
			    },  
		
	
		
			
			  "Parking Garage": {  
		
	
		
			
			    "Parking Garage": ParkingGarage,  
		
	
		
			
			    mass: 1e7,  
		
	
		
			
			    area: 750,  
		
	
		
			
			    clusters: 1,  
		
	
		
			
			    cluster_chances: .1,  
		
	
		
			
			    contents: [["Person",10,200],["Empty Car",100,300],["Car",5,30]],  
		
	
		
			
			    },  
		
	
		
			
			//Places  
		
	
		
			
			  "Town": Town,  
		
	
		
			
			  "City": City,  
		
	
		
			
			  "Continent": Continent,  
		
	
		
			
			  "Planet": Planet,  
		
	
		
			
			  "Star": Star,  
		
	
		
			
			  "Solar System": SolarSystem,  
		
	
		
			
			  "Galaxy": Galaxy,  
		
	
		
			
			  "Cluster": Cluster,  
		
	
		
			
			  "Universe": Universe,  
		
	
		
			
			  "Multiverse": Multiverse,  
		
	
		
			
			  "Town": {  
		
	
		
			
			    "Town": Town,  
		
	
		
			
			    mass: 1,  
		
	
		
			
			    area: 1e7,  
		
	
		
			
			    clusters: 5,  
		
	
		
			
			    cluster_chances: .1,  
		
	
		
			
			    contents: [["Person",10000,100000],["House",5000,50000],["Empty Car",200,800],["Car",500,80000],["Bus",5,25],["Train",5,25],["Business",500,5000]],  
		
	
		
			
			    },  
		
	
		
			
			  "City": {  
		
	
		
			
			    "City": City,  
		
	
		
			
			    mass: 1,  
		
	
		
			
			    area: 1e9,  
		
	
		
			
			    clusters: 0,  
		
	
		
			
			    cluster_chances: .2,  
		
	
		
			
			    contents: [["Person",100000,1500000],["House",20000,200000],["Empty Car",10000,100000],["Car",7500,125000],["Bus",200,400],["Train",10,50],["Tram",25,100],["Small Skyscraper",50,300],["Large Skyscraper",10,75],["Parking Garage",5,10],["Business",2000,10000]],  
		
	
		
			
			    },  
		
	
		
			
			  "Continent": {  
		
	
		
			
			    "Continent": Continent,  
		
	
		
			
			    mass: 1e21,  
		
	
		
			
			    area: 1.5e13,  
		
	
		
			
			    clusters: 5,  
		
	
		
			
			    cluster_chances: .5,  
		
	
		
			
			    contents: [["Person",1000000,15000000],["House",2500,10000],["Car",25000,375000],["Train",50,500],["Town",500,1000],["City",50,250],["Business",250,1000]],  
		
	
		
			
			    },  
		
	
		
			
			  "Planet": {  
		
	
		
			
			    "Planet": Planet,  
		
	
		
			
			    mass: 5.972e24,  
		
	
		
			
			    area: 2.5e14,  
		
	
		
			
			    clusters: 0,  
		
	
		
			
			    cluster_chances: 1,  
		
	
		
			
			    contents: [["Continent",4,9]],  
		
	
		
			
			    },  
		
	
		
			
			  "Star": {  
		
	
		
			
			    "Star": Star,  
		
	
		
			
			    mass: 1e40,  
		
	
		
			
			    area: 3e18,  
		
	
		
			
			    clusters: 1,  
		
	
		
			
			    cluster_chances: 1,  
		
	
		
			
			    contents: [],  
		
	
		
			
			    },  
		
	
		
			
			  "Solar System": {  
		
	
		
			
			    "Solar System": SolarSystem,  
		
	
		
			
			    mass: 1,  
		
	
		
			
			    area: 3e21,  
		
	
		
			
			    clusters: 1,  
		
	
		
			
			    cluster_chances: 1,  
		
	
		
			
			    contents: [["Star",1,1],["Planet",5,15]],  
		
	
		
			
			    },  
		
	
		
			
			  "Galaxy": {  
		
	
		
			
			    "Galaxy": Galaxy,  
		
	
		
			
			    mass: 1,  
		
	
		
			
			    area: 2e45,  
		
	
		
			
			    clusters: 1,  
		
	
		
			
			    cluster_chances: 1,  
		
	
		
			
			    contents: [["Star",1e9,500e9],["Solar System",1e8,500e8]],  
		
	
		
			
			    },  
		
	
		
			
			  "Cluster": {  
		
	
		
			
			    "Cluster": Cluster,  
		
	
		
			
			    mass: 1,  
		
	
		
			
			    area: 2e49,  
		
	
		
			
			    clusters: 1,  
		
	
		
			
			    cluster_chances: 1,  
		
	
		
			
			    contents: [["Galaxy",200,5000]],  
		
	
		
			
			    },  
		
	
		
			
			  "Universe": {  
		
	
		
			
			    "Universe": Universe,  
		
	
		
			
			    mass: 1,  
		
	
		
			
			    area: 7e53,  
		
	
		
			
			    clusters: 1,  
		
	
		
			
			    cluster_chances: 1,  
		
	
		
			
			    contents: [["Cluster",1.5e9,2.5e9]],  
		
	
		
			
			    },  
		
	
		
			
			  "Multiverse": {  
		
	
		
			
			    "Multiverse": Multiverse,  
		
	
		
			
			    mass: 1,  
		
	
		
			
			    area: 5e56,  
		
	
		
			
			    clusters: 1,  
		
	
		
			
			    cluster_chances: 1,  
		
	
		
			
			    contents: [["Universe",100,1000]],  
		
	
		
			
			    },  
		
	
		
			
			//Military  
		
	
		
			
			  "Soldier": Soldier,  
		
	
		
			
			  "Tank": Tank,  
		
	
		
			
			  "Artillery": Artillery,  
		
	
		
			
			  "Helicopter": Helicopter,  
		
	
		
			
			  "Squad": Squad,  
		
	
		
			
			  "Platoon": Platoon,  
		
	
		
			
			  "Company": Company,  
		
	
		
			
			  "Battalion": Battalion,  
		
	
		
			
			  "Brigade": Brigade,  
		
	
		
			
			  "Division": Division,  
		
	
		
			
			  "Tank Division": TankDivision,  
		
	
		
			
			  "Army": Army,  
		
	
		
			
			};  
		
	
		
			
			 
		
	
		
			
			var areas =  
		
	
		
			
			{  
		
	
		
			
			  "Container": 0,  
		
	
		
			
			//Creatures  
		
	
		
			
			  "Person": 0.33,  
		
	
		
			
			  "Human": 0.33,  
		
	
		
			
			  "Cow": 2,  
		
	
		
			
			  "Micro": 0.05,  
		
	
		
			
			  "Macro": 100,  
		
	
		
			
			//Vehicles  
		
	
		
			
			  "Car": 4,  
		
	
		
			
			  "Bus": 12,  
		
	
		
			
			  "Tram": 20,  
		
	
		
			
			  "Train": 40,  
		
	
		
			
			  "Train Car": 20,  
		
	
		
			
			//Buildings  
		
	
		
			
			  "House": 150,  
		
	
		
			
			  "Business": 400,  
		
	
		
			
			  "Barn": 300,  
		
	
		
			
			  "Small Skyscraper": 1000,  
		
	
		
			
			  "Large Skyscraper": 2000,  
		
	
		
			
			  "Parking Garage": 750,  
		
	
		
			
			//Places  
		
	
		
			
			  "Town": 1e7,  
		
	
		
			
			  "City": 1e9,  
		
	
		
			
			  "Continent": 1.5e13,  
		
	
		
			
			  "Planet": 2.5e14,  
		
	
		
			
			  "Star": 3e18,  
		
	
		
			
			  "Solar System": 3e21,  
		
	
		
			
			  "Galaxy": 2e45,  
		
	
		
			
			  "Cluster": 2e49,  
		
	
		
			
			  "Universe": 7e53,  
		
	
		
			
			  "Multiverse": 5e56,  
		
	
		
			
			//Military  
		
	
		
			
			  "Soldier": 1,  
		
	
		
			
			  "Tank": 10,  
		
	
		
			
			  "Artillery": 12,  
		
	
		
			
			  "Helicopter": 8,  
		
	
		
			
			  "Squad": 20,  
		
	
		
			
			  "Platoon": 100,  
		
	
		
			
			  "Company": 500,  
		
	
		
			
			  "Battalion": 3000,  
		
	
		
			
			  "Brigade": 20000,  
		
	
		
			
			  "Division": 80000,  
		
	
		
			
			  "Tank Division": 100000,  
		
	
		
			
			  "Army": 750000,  
		
	
		
			
			  "Soldier": {  
		
	
		
			
			    "Soldier": Soldier,  
		
	
		
			
			    mass: 80,  
		
	
		
			
			    area: 1,  
		
	
		
			
			    clusters: 2,  
		
	
		
			
			    cluster_chances: .2,  
		
	
		
			
			    contents: [],  
		
	
		
			
			    },  
		
	
		
			
			  "Tank": {  
		
	
		
			
			    "Tank": Tank,  
		
	
		
			
			    mass: 5000,  
		
	
		
			
			    area: 20,  
		
	
		
			
			    clusters: 2,  
		
	
		
			
			    cluster_chances: .25,  
		
	
		
			
			    contents: [["Soldier",3,5]],  
		
	
		
			
			    },  
		
	
		
			
			  "Artillery": {  
		
	
		
			
			    "Artillery": Artillery,  
		
	
		
			
			    mass: 7000,  
		
	
		
			
			    area: 25,  
		
	
		
			
			    clusters: 3,  
		
	
		
			
			    cluster_chances: .5,  
		
	
		
			
			    contents: [["Soldier",4,6]],  
		
	
		
			
			    },  
		
	
		
			
			  "Helicopter": {  
		
	
		
			
			    "Helicopter": Helicopter,  
		
	
		
			
			    mass: 1500,  
		
	
		
			
			    area: 12,  
		
	
		
			
			    clusters: 0,  
		
	
		
			
			    cluster_chances: 0,  
		
	
		
			
			    contents: [["Soldier",4,16]],  
		
	
		
			
			    },  
		
	
		
			
			  "Squad": {  
		
	
		
			
			    "Squad": Squad,  
		
	
		
			
			    mass: 1,  
		
	
		
			
			    area: 30,  
		
	
		
			
			    clusters: 20,  
		
	
		
			
			    cluster_chances: .05,  
		
	
		
			
			    contents: [["Soldier",6,9]],  
		
	
		
			
			    },  
		
	
		
			
			  "Platoon": {  
		
	
		
			
			    "Platoon": Platoon,  
		
	
		
			
			    mass: 100,  
		
	
		
			
			    area: 150,  
		
	
		
			
			    clusters: 2,  
		
	
		
			
			    cluster_chances: .1,  
		
	
		
			
			    contents: [["Soldier",16,44]],  
		
	
		
			
			    },  
		
	
		
			
			  "Company": {  
		
	
		
			
			    "Company": Company,  
		
	
		
			
			    mass: 500,  
		
	
		
			
			    area: 600,  
		
	
		
			
			    clusters: 2,  
		
	
		
			
			    cluster_chances: .1,  
		
	
		
			
			    contents: [["Soldier",60,200]],  
		
	
		
			
			    },  
		
	
		
			
			  "Battalion": {  
		
	
		
			
			    "Battalion": Battalion,  
		
	
		
			
			    mass: 1000,  
		
	
		
			
			    area: 3500,  
		
	
		
			
			    clusters: 2,  
		
	
		
			
			    cluster_chances: .1,  
		
	
		
			
			    contents: [["Soldier",300,1000]],  
		
	
		
			
			    },  
		
	
		
			
			  "Brigade": {  
		
	
		
			
			    "Brigade": Brigade,  
		
	
		
			
			    mass: 1500,  
		
	
		
			
			    area: 2e4,  
		
	
		
			
			    clusters: 2,  
		
	
		
			
			    cluster_chances: .1,  
		
	
		
			
			    contents: [["Soldier",1500,3200]],  
		
	
		
			
			    },  
		
	
		
			
			  "Division": {  
		
	
		
			
			    "Division": Division,  
		
	
		
			
			    mass: 2000,  
		
	
		
			
			    area: 8e4,  
		
	
		
			
			    clusters: 3,  
		
	
		
			
			    cluster_chances: .1,  
		
	
		
			
			    contents: [["Soldier",10000,16000]],  
		
	
		
			
			    },  
		
	
		
			
			  "Tank Division": {  
		
	
		
			
			    "Tank Division": TankDivision,  
		
	
		
			
			    mass: 3000,  
		
	
		
			
			    area: 1e5,  
		
	
		
			
			    clusters: 1,  
		
	
		
			
			    cluster_chances: .15,  
		
	
		
			
			    contents: [["Soldier",8000,1200],["Tank",250,500]],  
		
	
		
			
			    },  
		
	
		
			
			  "Army": {  
		
	
		
			
			    "Army": Army,  
		
	
		
			
			    mass: 5000,  
		
	
		
			
			    area: 1e6,  
		
	
		
			
			    clusters: 2,  
		
	
		
			
			    cluster_chances: .1,  
		
	
		
			
			    contents: [["Soldier",40000,75000]],  
		
	
		
			
			    },  
		
	
		
			
			};  
		
	
		
			
			  //Alterante Army Structuring, may be used later  
		
	
		
			
			  //"Squad": [["Soldier",6,9]],  
		
	
		
			
			  // "Platoon": [["Squad",3,4]],  
		
	
		
			
			  //"Company": [["Platoon",3,5],["Squad",0,2]],  
		
	
		
			
			  //"Battalion": [["Company",4,6]],  
		
	
		
			
			  //"Brigade": [["Battalion",2,5],["Company",0,3]],  
		
	
		
			
			  //"Division": [["Brigade",2,4]],  
		
	
		
			
			  //"Tank Division": [["Brigade",2,4],["Tank",250,500]],  
		
	
		
			
			  //"Army": [["Division",3,8],["Tank Division",1,5]],  
		
	
		
			
			 
		
	
		
			
			var masses =  
		
	
		
			
			{  
		
	
		
			
			  "Container": 0,  
		
	
		
			
			//Creatures  
		
	
		
			
			  "Person": 80,  
		
	
		
			
			  "Human": 80,  
		
	
		
			
			  "Cow": 300,  
		
	
		
			
			  "Micro": 0.01,  
		
	
		
			
			  "Macro": 80000,  
		
	
		
			
			//Vehicles  
		
	
		
			
			  "Car": 1000,  
		
	
		
			
			  "Bus": 5000,  
		
	
		
			
			  "Tram": 10000,  
		
	
		
			
			  "Train": 50000,  
		
	
		
			
			  "Train Car": 7500,  
		
	
		
			
			//Buildings  
		
	
		
			
			  "House": 10000,  
		
	
		
			
			  "Business": 50000,  
		
	
		
			
			  "Barn": 5000,  
		
	
		
			
			  "Small Skyscraper": 10000000,  
		
	
		
			
			  "Large Skyscraper": 80000000,  
		
	
		
			
			  "Parking Garage": 10000000,  
		
	
		
			
			//Places  
		
	
		
			
			  "Town": 1,  
		
	
		
			
			  "City": 1,  
		
	
		
			
			  "Continent": 1e21,  
		
	
		
			
			  "Planet": 5.972e24,  
		
	
		
			
			  "Star": 1e40,  
		
	
		
			
			  "Solar System": 1,  
		
	
		
			
			  "Galaxy": 1,  
		
	
		
			
			  "Cluster": 1,  
		
	
		
			
			  "Universe": 1,  
		
	
		
			
			  "Multiverse": 1,  
		
	
		
			
			//Military  
		
	
		
			
			  "Soldier": 80,  
		
	
		
			
			  "Tank": 5000,  
		
	
		
			
			  "Artillery": 7000,  
		
	
		
			
			  "Helicopter": 1500,  
		
	
		
			
			  "Squad": 1,  
		
	
		
			
			  "Platoon": 100,  
		
	
		
			
			  "Company": 500,  
		
	
		
			
			  "Battalion": 1000,  
		
	
		
			
			  "Brigade": 1500,  
		
	
		
			
			  "Division": 2000,  
		
	
		
			
			  "Tank Division": 3000,  
		
	
		
			
			  "Army": 5000,  
		
	
		
			
			};  
		
	
		
			
			 
		
	
		
			
			var clusters =  
		
	
		
			
			{  
		
	
	
		
			
				
				
					 
			
			@@ -337,18 +647,18 @@ function contents_insert(parent,thing,min,max,label) {  
		
	
		
			
			    owner.push([thing,min,max,label]);  
		
	
		
			
			}  
		
	
		
			
			 
		
	
		
			
			function initContents(name,count) {  
		
	
		
			
			function initContents(name,count) { //builds the contents for each destrucable(thing) when called   
		
	
		
			
			  let result = {};  
		
	
		
			
			  let type = contents[name] ;  
		
	
		
			
			  let type = things[name].contents ;  
		
	
		
			
			 
		
	
		
			
			  for (let i=0; i<type.length; i++) {  
		
	
		
			
			    let amount = distribution(type[i][1],type[i][2],count);  
		
	
		
			
			    let amount = distribution(type[i][1],type[i][2],count); //arrays of contents look like ["thing name",min,max,"optional name"] so those values have to pulled out   
		
	
		
			
			    if (amount > 0) {  
		
	
		
			
			      // if a custom label is supplied, use it!  
		
	
		
			
			      if (type[i].length == 4)  
		
	
		
			
			        result[type[i][3]] = new things[type[i][0]](amount);  
		
	
		
			
			      if (type[i].length == 4) //if has optional name   
		
	
		
			
			        result[type[i][3]] = new things[type[i][0]][type[i][0]] (amount); //creates a "thing name" under the key of "optional name"   
		
	
		
			
			      else  
		
	
		
			
			        result[type[i][0]] = new things[type[i][0]](amount);  
		
	
		
			
			        result[type[i][0]] = new things[type[i][0]][type[i][0]] (amount);  
		
	
		
			
			    }  
		
	
		
			
			  }  
		
	
		
			
			 
		
	
	
		
			
				
				
					 
			
			@@ -377,7 +687,7 @@ function fill_area(area, weights, variance=0.15)  
		
	
		
			
			  var candidates = [];  
		
	
		
			
			  for (var key in weights) {  
		
	
		
			
			    if (weights.hasOwnProperty(key)) {  
		
	
		
			
			      candidates.push({"name": key, "area": areas[key] , "weight": weights[key]});  
		
	
		
			
			      candidates.push({"name": key, "area": things[key].area , "weight": weights[key]});  
		
	
		
			
			    }  
		
	
		
			
			  }  
		
	
		
			
			 
		
	
	
		
			
				
				
					 
			
			@@ -430,7 +740,7 @@ function fill_area(area, weights, variance=0.15)  
		
	
		
			
			    area -= count * candidate.area;  
		
	
		
			
			 
		
	
		
			
			    if (count > 0)  
		
	
		
			
			      result.push(new things[candidate.name](count));  
		
	
		
			
			      result.push(new things[candidate.name][candidate.name] (count));  
		
	
		
			
			  }  
		
	
		
			
			 
		
	
		
			
			  return new Container(result);  
		
	
	
		
			
				
				
					 
			
			@@ -535,18 +845,17 @@ function defaultMultiply(thing) {  
		
	
		
			
			}  
		
	
		
			
			 
		
	
		
			
			function defaultArea(thing) {  
		
	
		
			
			  return areas[thing.name] ;  
		
	
		
			
			  return things[thing.name].area ;  
		
	
		
			
			}  
		
	
		
			
			 
		
	
		
			
			function defaultMass(thing) {  
		
	
		
			
			  return masses[thing.name] ;  
		
	
		
			
			  return things[thing.name].mass ;  
		
	
		
			
			}  
		
	
		
			
			 
		
	
		
			
			function defaultMerge(thing) {  
		
	
		
			
			function defaultMerge(thing) { //this merges all objects into one containers   
		
	
		
			
			  return function(container) {  
		
	
		
			
			    var newCount = this.count + container.count;  
		
	
		
			
			 
		
	
		
			
			    var newThing = new things[thing.name](newCount);  
		
	
		
			
			    var newThing = new things[thing.name][thing.name](newCount);  
		
	
		
			
			    newThing.contents = {};  
		
	
		
			
			 
		
	
		
			
			    for (var key in this.contents) {  
		
	
	
		
			
				
				
					 
			
			@@ -573,7 +882,7 @@ function listSum(sum) {  
		
	
		
			
			  let result = [];  
		
	
		
			
			  for (let key in sum) {  
		
	
		
			
			    if (sum.hasOwnProperty(key)) {  
		
	
		
			
			      result.push(new things[key](sum[key]).describe(false));  
		
	
		
			
			      result.push(new things[key][key] (sum[key]).describe(false));  
		
	
		
			
			    }  
		
	
		
			
			  }  
		
	
		
			
			 
		
	
	
		
			
				
				
				
				
					 
			
			@@ -588,7 +897,7 @@ function flatten(thing) {  
		
	
		
			
			  let list = [];  
		
	
		
			
			 
		
	
		
			
			  Object.entries(dict).forEach(function([key, val]) {  
		
	
		
			
			    let obj = new things[key](val);  
		
	
		
			
			    let obj = new things[key][key] (val);  
		
	
		
			
			 
		
	
		
			
			    obj.contents = [];  
		
	
		
			
			 
		
	
	
		
			
				
				
					 
			
			@@ -680,8 +989,8 @@ function DefaultEntity() {  
		
	
		
			
			 
		
	
		
			
			// god I love reinventing the wheel  
		
	
		
			
			 
		
	
		
			
			function copy_defaults(self,proto) {  
		
	
		
			
			  for (var key in proto) {  
		
	
		
			
			function copy_defaults(self,proto) { //loads the values defined in things into the fuction that calls it   
		
	
		
			
			  for (var key in proto) { //proto will always be a new DefaultEntity, self is the parent function   
		
	
		
			
			    if (proto.hasOwnProperty(key)) {  
		
	
		
			
			      self[key] = proto[key](self);  
		
	
		
			
			    }  
		
	
	
		
			
				
				
					 
			
			@@ -727,9 +1036,9 @@ function Person(count = 1) {  
		
	
		
			
			 
		
	
		
			
			  this.describeOne = function (verbose=true) {  
		
	
		
			
			    var body = random_desc(["skinny","fat","tall","short","stocky","spindly","muscular","fit","multi-colored"], (verbose ? 0.6 : 0));  
		
	
		
			
			    var sex = random_desc(["male", "female"], (verbose ? 1  : 0));  
		
	
		
			
			    var sex = random_desc(["male", "female"], (verbose ? 0.75  : 0));  
		
	
		
			
			    var species = "";  
		
	
		
			
			    species = random_desc(["wolf","cat","dog","squirrel","horse","hyena","fox","jackal","crux","sergal"]);  
		
	
		
			
			    species = random_desc(["wolf","cat","dog","squirrel","horse","hyena","fox","jackal","crux","sergal","coyote","rabbit","lizard","avian" ]);  
		
	
		
			
			    return "a " + merge_desc([body,sex,species]);  
		
	
		
			
			  };  
		
	
		
			
			 
		
	
	
		
			
				
				
					 
			
			@@ -1567,3 +1876,15 @@ function Army(count = 1) {  
		
	
		
			
			      }  
		
	
		
			
			    };  
		
	
		
			
			  }  
		
	
		
			
			 
		
	
		
			
			 
		
	
		
			
			 
		
	
		
			
			  //todo  
		
	
		
			
			  //redo everything  
		
	
		
			
			  //airports  
		
	
		
			
			  //farms  
		
	
		
			
			  //racetracks  
		
	
		
			
			  //more building types  
		
	
		
			
			  //nebula  
		
	
		
			
			  //grand army  
		
	
		
			
			  //armada