diff --git a/recursive-macro.js b/recursive-macro.js index 983abee..aa2c14b 100644 --- a/recursive-macro.js +++ b/recursive-macro.js @@ -45,7 +45,7 @@ var things = area: .05, clusters: 50, cluster_chances: 1, - contents: [[]], + contents: [], descriptor: ["a micro", "micros"] }, "Macro": { @@ -54,7 +54,7 @@ var things = area: 100, clusters: 0, cluster_chances: 0, - contents: [[]], + contents: [], descriptor: ["a smaller macro", "smaller macros"] }, //Vehicles @@ -64,7 +64,7 @@ var things = area: 4, clusters: 2, cluster_chances: .3, - contents: [[]], + contents: [], descriptor: ["a parked car", "parked cars"] }, "Car": { @@ -109,6 +109,8 @@ var things = clusters: 1, cluster_chances: .05, contents: [["Person",10,40]], + descriptor: ["a train car", "train cars"] + }, "Business Jet": { "Business Jet": BusinessJet, mass: 6500, @@ -180,6 +182,7 @@ var things = clusters: 1, cluster_chances: .1, contents: [["Person",10,200],["Empty Car",100,300],["Car",5,30]], + descriptor: ["a parking garage", "parking garages"] }, //Places "Town": { @@ -189,6 +192,7 @@ var things = 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]], + descriptor: ["a town", "towns"] }, "City": { "City": City, @@ -197,6 +201,7 @@ var things = 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]], + descriptor: ["a city", "cities"] }, "Continent": { "Continent": Continent, @@ -205,6 +210,7 @@ var things = 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]], + descriptor: ["a continent", "continents"] }, "Planet": { "Planet": Planet, @@ -213,6 +219,7 @@ var things = clusters: 0, cluster_chances: 1, contents: [["Continent",4,9]], + descriptor: ["a planet", "planets"] }, "Star": { "Star": Star, @@ -229,6 +236,7 @@ var things = clusters: 1, cluster_chances: 1, contents: [["Star",1,1],["Planet",5,15]], + descriptor: ["a solar system", "solar systems"] }, "Galaxy": { "Galaxy": Galaxy, @@ -237,6 +245,7 @@ var things = clusters: 1, cluster_chances: 1, contents: [["Star",1e9,500e9],["Solar System",1e8,500e8]], + descriptor: ["a galaxy", "galaxies"] }, "Cluster": { "Cluster": Cluster, @@ -245,6 +254,7 @@ var things = clusters: 1, cluster_chances: 1, contents: [["Galaxy",200,5000]], + descriptor: ["a cluster", "clusters"] }, "Universe": { "Universe": Universe, @@ -253,6 +263,7 @@ var things = clusters: 1, cluster_chances: 1, contents: [["Cluster",1.5e9,2.5e9]], + descriptor: ["a universe", "universes"] }, "Multiverse": { "Multiverse": Multiverse, @@ -261,6 +272,7 @@ var things = clusters: 1, cluster_chances: 1, contents: [["Universe",100,1000]], + descriptor: ["a multiverse", "multiverses"] }, //Military "Soldier": { @@ -270,6 +282,7 @@ var things = clusters: 2, cluster_chances: .2, contents: [], + descriptor: ["a soldier","soldiers"] }, "Tank": { "Tank": Tank, @@ -278,6 +291,7 @@ var things = clusters: 2, cluster_chances: .25, contents: [["Soldier",3,5]], + descriptor: ["a tank", "tanks"] }, "Artillery": { "Artillery": Artillery, @@ -286,6 +300,7 @@ var things = clusters: 3, cluster_chances: .5, contents: [["Soldier",4,6]], + descriptor: ["an artillery tank", "artillery tanks"] }, "Helicopter": { "Helicopter": Helicopter, @@ -294,6 +309,7 @@ var things = clusters: 0, cluster_chances: 0, contents: [["Soldier",4,16]], + descriptor: ["a helicoptor", "helicoptors"] }, "Squad": { "Squad": Squad, @@ -302,6 +318,7 @@ var things = clusters: 20, cluster_chances: .05, contents: [["Soldier",6,9]], + descriptor: ["a squad", "squads"] }, "Platoon": { "Platoon": Platoon, @@ -310,6 +327,7 @@ var things = clusters: 2, cluster_chances: .1, contents: [["Soldier",16,44]], + descriptor: ["a military platoon", "platoons"] }, "Company": { "Company": Company, @@ -318,6 +336,7 @@ var things = clusters: 2, cluster_chances: .1, contents: [["Soldier",60,200]], + descriptor: ["a company of soldiers", "companies"] }, "Battalion": { "Battalion": Battalion, @@ -326,6 +345,7 @@ var things = clusters: 2, cluster_chances: .1, contents: [["Soldier",300,1000]], + descriptor: ["a battalion", "battalions"] }, "Brigade": { "Brigade": Brigade, @@ -334,6 +354,7 @@ var things = clusters: 2, cluster_chances: .1, contents: [["Soldier",1500,3200]], + descriptor: ["a brigade", "brigades"] }, "Division": { "Division": Division, @@ -342,6 +363,7 @@ var things = clusters: 3, cluster_chances: .1, contents: [["Soldier",10000,16000]], + descriptor: ["a division", "divisions"] }, "Tank Division": { "Tank Division": TankDivision, @@ -350,6 +372,7 @@ var things = clusters: 1, cluster_chances: .15, contents: [["Soldier",8000,1200],["Tank",250,500]], + descriptor: ["a tank division", "tank divisions"] }, "Army": { "Army": Army, @@ -358,6 +381,7 @@ var things = clusters: 2, cluster_chances: .1, contents: [["Soldier",40000,75000]], + descriptor: ["an army", "armies"] }, }; //Alterante Army Structuring, may be used later @@ -505,81 +529,6 @@ function fill_area(area, weights, variance=0.15) return new Container(result); } -// describes everything in the container - -function describe_all(contents,verbose=true,except=[]) { - var things = []; - for (var key in contents) { - if (contents.hasOwnProperty(key) && !except.includes(key)) { - things.push(contents[key].describe(verbose)); - } - } - return merge_things(things); -} - -function random_desc(list, odds=1) { - if (Math.random() < odds) - return list[Math.floor(Math.random() * list.length)]; - else - return ""; -} - -// combine strings into a list with proper grammar - -function merge_things(list,semicolons=false) { - if (list.length == 0) { - return ""; - } else if (list.length == 1) { - return list[0]; - } else if (list.length == 2) { - return list[0] + " and " + list[1]; - } else { - var result = ""; - - list.slice(0,list.length-1).forEach(function(term) { - result += term + ", "; - }); - - result += "and " + list[list.length-1]; - - return result; - } -} - -// combine the adjectives for something into a single string - -function merge_desc(list) { - var result = ""; - - list.forEach(function(term) { - if (term != "") - result += term + " "; - }); - - // knock off the last space - if (result.length > 0) { - result = result.substring(0, result.length - 1); - } - let article = "a " - //a/an overwriting terms - let forcedTerms = ["honor","heir"]; //words that need to start with an but don't start with a,e,i,o,u - let force = false; - for (let i of forcedTerms){ - if (i === result.substring(0, i.length)){force = true;} - } - - let exceptionTerms = ["uniform","unique"]; //words that need to start with a and start with a,e,i,o,u - let exception = false; - for (let i of exceptionTerms){ - if (i === result.substring(0, i.length)){exception = true;} - } - //check if the string should start with an - if ((force == true) || (exception == false && ((result.charAt(0) == "a")||(result.charAt(0) == "e")||(result.charAt(0) == "i")||(result.charAt(0) == "o")||(result.charAt(0) == "u")))){ - article = "an "; - } - result = article + result; - return result; -} // maybe make this something that approximates a // normal distribution; doing this 15,000,000 times is bad... @@ -765,6 +714,84 @@ function copy_defaults(self,proto) { //loads the values defined in things into t } } +// combine strings into a list with proper grammar + +function merge_things(list,semicolons=false) { + if (list.length == 0) { + return ""; + } else if (list.length == 1) { + return list[0]; + } else if (list.length == 2) { + return list[0] + " and " + list[1]; + } else { + var result = ""; + + list.slice(0,list.length-1).forEach(function(term) { + result += term + ", "; + }); + + result += "and " + list[list.length-1]; + + return result; + } +} + +// combine the adjectives for something into a single string + +function merge_desc(list) { + var result = ""; + + list.forEach(function(term) { + if (term != "") + result += term + " "; + }); + + // knock off the last space + if (result.length > 0) { + result = result.substring(0, result.length - 1); + } + + let article = "a " + //a/an overwriting terms + let forcedTerms = ["honor","heir"]; //words that need to start with an but don't start with a,e,i,o,u + let force = false; + for (let i of forcedTerms){ + if (i === result.substring(0, i.length)){force = true;} + } + + let exceptionTerms = ["uniform","unique"]; //words that need to start with a and start with a,e,i,o,u + let exception = false; + for (let i of exceptionTerms){ + if (i === result.substring(0, i.length)){exception = true;} + } + + //check if the string should start with an + if ((force == true) || (exception == false && ((result.charAt(0) == "a")||(result.charAt(0) == "e")||(result.charAt(0) == "i")||(result.charAt(0) == "o")||(result.charAt(0) == "u")))){ + article = "an "; + } + result = article + result; + return result; +} + +// describes everything in the container + +function describe_all(contents,verbose=true,except=[]) { + var things = []; + for (var key in contents) { + if (contents.hasOwnProperty(key) && !except.includes(key)) { + things.push(contents[key].describe(verbose)); + } + } + return merge_things(things); +} + +function random_desc(list, odds=1) { //strings together an array into a series of words + if (Math.random() < odds) + return list[Math.floor(Math.random() * list.length)]; + else + return ""; +} + function defaultDescribeSimple(thing) { return function(flat) { if (flat) { @@ -775,27 +802,49 @@ function defaultDescribeSimple(thing) { } } -function defaultDescribe(verbose=true, parent){ - if (verbose) { - if (parent.count <= 3) { +function defaultDescribe(verbose=true, parent, descAs){ + let descriptorEnd = " inside"; + let descriptorConjunction = " with "; + let groupLessThan3 = false; + switch(descAs) { + case "vehicle": + descriptorEnd = pickString(" inside"," inside"," inside", " inside"," riding inside", " trapped inside", " sitting inside"); + break; + case "community": + groupLessThan3 = true; + descriptorEnd = " in " + (parent.count == 1 ? "it" : "them"); + break; + case "celestial": + groupLessThan3 = true; + descriptorConjunction = pickString(" made up of "," consisting of "," containing "); + descriptorEnd = ""; + break; + case "military": + groupLessThan3 = true; + descriptorConjunction = pickString(" of "," of "," made up of "," comprised of "," containing "); + descriptorEnd = ""; + break; + + } if (verbose) { + if (parent.count <= 3 && groupLessThan3 == false) { var list = []; for (var i = 0; i < parent.count; i++) { list.push(parent.describeOne(parent.count <= 2)); } if (things[parent.name].contents.length > 0){ - return merge_things(list) + " with " + describe_all(parent.contents,verbose) + " inside"; + return (merge_things(list) + descriptorConjunction + describe_all(parent.contents,false) + descriptorEnd); } else { - return merge_things(list); + return (merge_things(list)); } - } else { + } else {//if there are more than 3 of the object if (things[parent.name].contents.length > 0){ - return parent.count + " " + things[parent.name].descriptor[1] +" with " + describe_all(parent.contents,verbose) + " inside"; + return (parent.count + " " + things[parent.name].descriptor[1] + descriptorConjunction + describe_all(parent.contents,false) + descriptorEnd); } else { - return parent.count + " " + things[parent.name].descriptor[1]; + return (parent.count + " " + things[parent.name].descriptor[0]); } } } else {//not verbose - return (parent.count > 1 ? parent.count + " " + things[parent.name].descriptor[1] : things[parent.name].descriptor[0]); + return (parent.count > 1 ? (parent.count + " " + things[parent.name].descriptor[1]) : things[parent.name].descriptor[0]); } } @@ -897,7 +946,7 @@ function Cow(count = 1) { } function EmptyCar(count = 1) { - this.name = "Car"; + this.name = "Empty Car"; copy_defaults(this,new DefaultEntity()); this.count = count; @@ -930,7 +979,7 @@ function Car(count = 1) { }; this.describe = function(verbose=true) { - return defaultDescribe(verbose, this); + return defaultDescribe(verbose, this, "vehicle"); } } @@ -949,7 +998,7 @@ function Bus(count = 1) { }; this.describe = function(verbose=true) { - return defaultDescribe(verbose, this); + return defaultDescribe(verbose, this, "vehicle"); } } @@ -968,7 +1017,7 @@ function Tram(count = 1) { }; this.describe = function(verbose=true) { - return defaultDescribe(verbose, this); + return defaultDescribe(verbose, this, "vehicle"); } this.anal_vore = function() { @@ -1065,13 +1114,9 @@ function TrainCar(count = 1) { return merge_desc([adjective,color,type]); }; - this.describe = function(verbose = true) { - if (verbose) { - return (this.count > 1 ? this.count + " train cars" : "a train car") + " with " + describe_all(this.contents) + " inside"; - } else { - return (this.count > 1 ? this.count + " train cars" : "a train car"); - } - }; + this.describe = function(verbose=true) { + return defaultDescribe(verbose, this, "vehicle"); + } } function House(count = 1) { @@ -1169,13 +1214,14 @@ function ParkingGarage(count = 1) { this.contents = initContents(this.name,this.count); this.describeOne = function(verbose=true) { - return "a parking garage"; + return things[this.name].descriptor[0]; }; this.describe = function(verbose=true) { return defaultDescribe(verbose, this); } } + function Town(count = 1) { this.name = "Town"; @@ -1183,13 +1229,13 @@ function Town(count = 1) { this.count = count; this.contents = initContents(this.name,this.count); - this.describe = function(verbose = true) { - if (verbose) { - return (this.count == 1 ? "a town" : this.count + " towns") + " with " + describe_all(this.contents, verbose) + " in " + (this.count == 1 ? "it" : "them"); - } else { - return (this.count == 1 ? "a town" : this.count + " towns"); - } + this.describeOne = function(verbose=true) { + return things[this.name].descriptor[0]; }; + + this.describe = function(verbose=true) { + return defaultDescribe(verbose, this, "community"); + } } function City(count = 1) { @@ -1199,13 +1245,13 @@ function City(count = 1) { this.count = count; this.contents = initContents(this.name,this.count); - this.describe = function(verbose = true) { - if (verbose) { - return (this.count == 1 ? "a city" : this.count + " cities") + " with " + describe_all(this.contents, verbose) + " in " + (this.count == 1 ? "it" : "them"); - } else { - return (this.count == 1 ? "a city" : this.count + " cities"); - } + this.describeOne = function(verbose=true) { + return things[this.name].descriptor[0]; }; + + this.describe = function(verbose=true) { + return defaultDescribe(verbose, this, "community"); + } } function Continent(count = 1) { @@ -1215,13 +1261,13 @@ function Continent(count = 1) { this.count = count; this.contents = initContents(this.name,this.count); - this.describe = function(verbose = true) { - if (verbose) { - return (this.count == 1 ? "a continent" : this.count + " continents") + " with " + describe_all(this.contents, verbose) + " on " + (this.count == 1 ? "it" : "them"); - } else { - return (this.count == 1 ? "a continent" : this.count + " continents"); - } + this.describeOne = function(verbose=true) { + return things[this.name].descriptor[0]; }; + + this.describe = function(verbose=true) { + return defaultDescribe(verbose, this, "community"); + } } function Planet(count = 1) { @@ -1231,13 +1277,13 @@ function Planet(count = 1) { this.count = count; this.contents = initContents(this.name,this.count); - this.describe = function(verbose = true) { - if (verbose) { - return (this.count == 1 ? "a planet" : this.count + " planets") + " with " + describe_all(this.contents, verbose) + " on " + (this.count == 1 ? "it" : "them"); - } else { - return (this.count == 1 ? "a planet" : this.count + " planets"); - } + this.describeOne = function(verbose=true) { + return things[this.name].descriptor[0]; }; + + this.describe = function(verbose=true) { + return defaultDescribe(verbose, this, "community"); + } } function Star(count = 1) { @@ -1259,13 +1305,13 @@ function SolarSystem(count = 1) { this.count = count; this.contents = initContents(this.name,this.count); - this.describe = function(verbose = true) { - if (verbose) { - return (this.count == 1 ? "a solar system" : this.count + " solar systems") + " made up of " + describe_all(this.contents, verbose); - } else { - return (this.count == 1 ? "a solar system" : this.count + " solar systems"); - } + this.describeOne = function(verbose=true) { + return things[this.name].descriptor[0]; }; + + this.describe = function(verbose=true) { + return defaultDescribe(verbose, this, "celestial"); + } } function Galaxy(count = 1) { @@ -1275,13 +1321,13 @@ function Galaxy(count = 1) { this.count = count; this.contents = initContents(this.name,this.count); - this.describe = function(verbose = true) { - if (verbose) { - return (this.count == 1 ? "a galaxy" : this.count + " galaxies") + " made up of " + describe_all(this.contents, verbose); - } else { - return (this.count == 1 ? "a galaxy" : this.count + " galaxies"); - } + this.describeOne = function(verbose=true) { + return things[this.name].descriptor[0]; }; + + this.describe = function(verbose=true) { + return defaultDescribe(verbose, this, "celestial"); + } } function Cluster(count = 1) { @@ -1291,13 +1337,13 @@ function Cluster(count = 1) { this.count = count; this.contents = initContents(this.name,this.count); - this.describe = function(verbose = true) { - if (verbose) { - return (this.count == 1 ? "a cluster" : this.count + " clusters") + " made up of " + describe_all(this.contents, verbose); - } else { - return (this.count == 1 ? "a cluster" : this.count + " clusters"); - } + this.describeOne = function(verbose=true) { + return things[this.name].descriptor[0]; }; + + this.describe = function(verbose=true) { + return defaultDescribe(verbose, this, "celestial"); + } } function Universe(count = 1) { @@ -1307,13 +1353,13 @@ function Universe(count = 1) { this.count = count; this.contents = initContents(this.name,this.count); - this.describe = function(verbose = true) { - if (verbose) { - return (this.count == 1 ? "a universe" : this.count + " universes") + " made up of " + describe_all(this.contents, verbose); - } else { - return (this.count == 1 ? "a universe" : this.count + " universes"); - } + this.describeOne = function(verbose=true) { + return things[this.name].descriptor[0]; }; + + this.describe = function(verbose=true) { + return defaultDescribe(verbose, this, "celestial"); + } } function Multiverse(count = 1) { @@ -1323,13 +1369,13 @@ function Multiverse(count = 1) { this.count = count; this.contents = initContents(this.name,this.count); - this.describe = function(verbose = true) { - if (verbose) { - return (this.count == 1 ? "a multiverse" : this.count + " multiverses") + " made up of " + describe_all(this.contents, verbose); - } else { - return (this.count == 1 ? "a multiverse" : this.count + " multiverses"); - } + this.describeOne = function(verbose=true) { + return things[this.name].descriptor[0]; }; + + this.describe = function(verbose=true) { + return defaultDescribe(verbose, this, "celestial"); + } } function Soldier(count = 1) { @@ -1339,9 +1385,13 @@ function Soldier(count = 1) { this.count = count; this.contents = initContents(this.name,this.count); - this.describe = function(verbose = true) { - return (this.count == 1 ? "a soldier" : this.count + " soldiers"); + this.describeOne = function(verbose=true) { + return things[this.name].descriptor[0]; }; + + this.describe = function(verbose=true) { + return defaultDescribe(verbose, this); + } } function Tank(count = 1) { @@ -1351,13 +1401,13 @@ function Tank(count = 1) { this.count = count; this.contents = initContents(this.name,this.count); - this.describe = function(verbose = true) { - if (verbose) { - return (this.count == 1 ? "a tank" : this.count + " tanks") + " with " + describe_all(this.contents, verbose) + " trapped inside"; - } else { - return (this.count == 1 ? "a tank" : this.count + " tanks"); - } + this.describeOne = function(verbose=true) { + return things[this.name].descriptor[0]; }; + + this.describe = function(verbose=true) { + return defaultDescribe(verbose, this, "vehicle"); + } } function Artillery(count = 1) { @@ -1367,13 +1417,13 @@ function Artillery(count = 1) { this.count = count; this.contents = initContents(this.name,this.count); - this.describe = function(verbose = true) { - if (verbose) { - return (this.count == 1 ? "an artillery unit" : this.count + " artillery units") + " with " + describe_all(this.contents, verbose) + " trapped inside"; - } else { - return (this.count == 1 ? "an artillery unit" : this.count + " artillery units"); - } + this.describeOne = function(verbose=true) { + return things[this.name].descriptor[0]; }; + + this.describe = function(verbose=true) { + return defaultDescribe(verbose, this, "vehicle"); + } } function Helicopter(count = 1) { @@ -1383,13 +1433,13 @@ function Helicopter(count = 1) { this.count = count; this.contents = initContents(this.name,this.count); - this.describe = function(verbose = true) { - if (verbose) { - return (this.count == 1 ? "a helicopter" : this.count + " helicopters") + " with " + describe_all(this.contents, verbose) + " riding inside"; - } else { - return (this.count == 1 ? "a helicopter" : this.count + " helicopters"); - } - }; + this.describeOne = function(verbose=true) { + return things[this.name].descriptor[0]; + }; + + this.describe = function(verbose=true) { + return defaultDescribe(verbose, this, "vehicle"); + } } function Micro(count = 1) { @@ -1399,6 +1449,10 @@ function Micro(count = 1) { this.count = count; this.contents = initContents(this.name,this.count); + this.describeOne = function(verbose=true) { + return things[this.name].descriptor[0]; + }; + this.describe = function(verbose=true) { return defaultDescribe(verbose, this); } @@ -1411,6 +1465,10 @@ function Macro(count = 1) { this.count = count; this.contents = initContents(this.name,this.count); + this.describeOne = function(verbose=true) { + return things[this.name].descriptor[0]; + }; + this.describe = function(verbose=true) { return defaultDescribe(verbose, this); } @@ -1423,16 +1481,12 @@ function Squad(count = 1) { this.contents = initContents(this.name,this.count); this.describeOne = function(verbose=true) { - return "a squad"; + return things[this.name].descriptor[0]; }; - this.describe = function(verbose = true) { - if (verbose) { - return (this.count == 1 ? "a squad" : this.count + " squads") + " made up of " + describe_all(this.contents, verbose); - } else { - return (this.count == 1 ? "a squad" : this.count + " squads"); - } - }; + this.describe = function(verbose=true) { + return defaultDescribe(verbose, this, "military"); + } } function Platoon(count = 1) { @@ -1442,16 +1496,12 @@ function Platoon(count = 1) { this.contents = initContents(this.name,this.count); this.describeOne = function(verbose=true) { - return "a military platoon"; + return things[this.name].descriptor[0]; }; - this.describe = function(verbose = true) { - if (verbose) { - return (this.count == 1 ? "a platoon" : this.count + " platoons") + " consisting of " + describe_all(this.contents, verbose); - } else { - return (this.count == 1 ? "a platoon" : this.count + " platoons"); - } - }; + this.describe = function(verbose=true) { + return defaultDescribe(verbose, this, "military"); + } } function Company(count = 1) { @@ -1461,16 +1511,12 @@ function Company(count = 1) { this.contents = initContents(this.name,this.count); this.describeOne = function(verbose=true) { - return "a company of soldiers"; + return things[this.name].descriptor[0]; }; - this.describe = function(verbose = true) { - if (verbose) { - return (this.count == 1 ? "a company" : this.count + " companies") + " of " + describe_all(this.contents, verbose); - } else { - return (this.count == 1 ? "a company" : this.count + " companies"); - } - }; + this.describe = function(verbose=true) { + return defaultDescribe(verbose, this, "military"); + } } function Battalion(count = 1) { @@ -1480,16 +1526,12 @@ function Battalion(count = 1) { this.contents = initContents(this.name,this.count); this.describeOne = function(verbose=true) { - return "a battalion"; + return things[this.name].descriptor[0]; }; - this.describe = function(verbose = true) { - if (verbose) { - return (this.count == 1 ? "a battalion" : this.count + " battalions") + " containing " + describe_all(this.contents, verbose); - } else { - return (this.count == 1 ? "a battalion" : this.count + " battalions"); - } - }; + this.describe = function(verbose=true) { + return defaultDescribe(verbose, this, "military"); + } } function Brigade(count = 1) { @@ -1499,16 +1541,12 @@ function Brigade(count = 1) { this.contents = initContents(this.name,this.count); this.describeOne = function(verbose=true) { - return "a brigade"; + return things[this.name].descriptor[0]; }; - this.describe = function(verbose = true) { - if (verbose) { - return (this.count == 1 ? "a brigade" : this.count + " brigades") + " made up of " + describe_all(this.contents, verbose); - } else { - return (this.count == 1 ? "a brigade" : this.count + " brigades"); - } - }; + this.describe = function(verbose=true) { + return defaultDescribe(verbose, this, "military"); + } } function Division(count = 1) { @@ -1518,16 +1556,12 @@ function Division(count = 1) { this.contents = initContents(this.name,this.count); this.describeOne = function(verbose=true) { - return "a division"; + return things[this.name].descriptor[0]; }; - this.describe = function(verbose = true) { - if (verbose) { - return (this.count == 1 ? "a division" : this.count + " divisions") + " of " + describe_all(this.contents, verbose); - } else { - return (this.count == 1 ? "a division" : this.count + " divisions"); - } - }; + this.describe = function(verbose=true) { + return defaultDescribe(verbose, this, "military"); + } } function TankDivision(count = 1) { @@ -1537,16 +1571,12 @@ function TankDivision(count = 1) { this.contents = initContents(this.name,this.count); this.describeOne = function(verbose=true) { - return "a tank division"; + return things[this.name].descriptor[0]; }; - this.describe = function(verbose = true) { - if (verbose) { - return (this.count == 1 ? "a tank division" : this.count + " tank divisions") + " of " + describe_all(this.contents, verbose); - } else { - return (this.count == 1 ? "a tank division" : this.count + " tank divisions"); - } - }; + this.describe = function(verbose=true) { + return defaultDescribe(verbose, this, "military"); + } } function Army(count = 1) { @@ -1556,16 +1586,12 @@ function Army(count = 1) { this.contents = initContents(this.name,this.count); this.describeOne = function(verbose=true) { - return "an army"; + return things[this.name].descriptor[0]; }; - this.describe = function(verbose = true) { - if (verbose) { - return (this.count == 1 ? "an army" : this.count + " armies") + " made up of " + describe_all(this.contents, verbose); - } else { - return (this.count == 1 ? "an army" : this.count + " armies"); - } - }; + this.describe = function(verbose=true) { + return defaultDescribe(verbose, this, "military"); + } } @@ -1575,6 +1601,7 @@ function Army(count = 1) { //farms //racetracks //more building types + //cranes and other construction equipment //nebula //chemical factory //grand army