Clonk2u working branchtags/v1.0.0
| @@ -622,11 +622,13 @@ options = [ | |||
| [ | |||
| { | |||
| "name": "Sandbox", | |||
| "value": "0" | |||
| "value": "0", | |||
| "tooltip": "Grow how you want, when you want.", | |||
| }, | |||
| { | |||
| "name": "Stompvival", | |||
| "value": "1" | |||
| "value": "1", | |||
| "tooltip": "Actions earn you growth points, which are used to grow bigger.", | |||
| } | |||
| ] | |||
| } | |||
| @@ -674,12 +676,14 @@ options = [ | |||
| { | |||
| "name": "Human prey", | |||
| "id": "victimsHuman", | |||
| "type": "checkbox" | |||
| "type": "checkbox", | |||
| "tooltip": "When checked, your prey is humans. By default your prey is a wide array of anthros." | |||
| }, | |||
| { | |||
| "name": "Military", | |||
| "id": "victimsMilitary", | |||
| "type": "checkbox" | |||
| "type": "checkbox", | |||
| "tooltip": "When checked, you can prey on military units like soldiers, tanks, helicopeter, up to destroying entire armies." | |||
| }, | |||
| { | |||
| "name": "Macros", | |||
| @@ -1696,6 +1700,7 @@ options = [ | |||
| "type": "checkbox", | |||
| "buttons": ["magic_shrink"], | |||
| "default": true, | |||
| "tooltip": "Allows you to shrink a wide area(relative to your size) into a smaller area, allowing you to devour prey much bigger than you are." | |||
| }, | |||
| { | |||
| "name": "Fast digestion", | |||
| @@ -1703,6 +1708,7 @@ options = [ | |||
| "type": "checkbox", | |||
| "buttons": ["magic_fast_digestion"], | |||
| "default": true, | |||
| "tooltip": "Fast Digestion allows you to speed up your digestion for a short duration." | |||
| }, | |||
| ] | |||
| }, | |||
| @@ -1829,7 +1829,7 @@ function getOnePrey(biome, area, sameSize = true) | |||
| else | |||
| return new Container(); | |||
| } | |||
| //set weights(how often a thing is encountered) | |||
| function getWeights(region, area) { | |||
| let weights = {}; | |||
| @@ -1856,6 +1856,7 @@ function getWeights(region, area) { | |||
| "House": 0.1, | |||
| "Car": 0.07, | |||
| "Bus": 0.02, | |||
| "Business": 0.075, | |||
| "Parking Garage": 0.003, | |||
| "Small Skyscraper": 0.05, | |||
| "Town": 0.00001, | |||
| @@ -1873,12 +1874,33 @@ function getWeights(region, area) { | |||
| } | |||
| if (macro.victimsMilitary) { | |||
| weights["Soldier"] = 0.01; | |||
| weights["Tank"] = 0.0005; | |||
| weights["Artillery"] = 0.0001; | |||
| weights["Helicopter"] = 0.00005; | |||
| if (macro.height < 500){ | |||
| weights["Soldier"] = 0.08; | |||
| weights["Tank"] = 0.07; | |||
| weights["Artillery"] = 0.06; | |||
| weights["Helicopter"] = 0.05, | |||
| weights["Squad"]= .04; | |||
| weights["Platoon"]= .4, | |||
| weights["Company"]= .5, | |||
| weights["Battalion"]= .6, | |||
| weights["Brigade"]= .7; | |||
| } else if (macro.height < 5000){ | |||
| weights["Tank"] = 0.0002; | |||
| weights["Artillery"] = 0.001; | |||
| weights["Squad"]= .0001; | |||
| weights["Platoon"]= .005, | |||
| weights["Company"]= .01, | |||
| weights["Battalion"]= .02, | |||
| weights["Brigade"]= .03; | |||
| weights["Division"]= .02, | |||
| weights["Tank Division"]= .01, | |||
| weights["Army"]= .01; | |||
| } else { | |||
| weights["Division"]= .02, | |||
| weights["Tank Division"]= .01, | |||
| weights["Army"]= .01; | |||
| } | |||
| } | |||
| if (macro.victimsMicros) { | |||
| weights["Micro"] = 1; | |||
| } | |||
| @@ -951,7 +951,7 @@ function defaultScat(container, macro, verbose, flat) { | |||
| } else if (container.count == 0) { | |||
| return "You squat down and let out a $MASS log of shit."; | |||
| } else if (isSadistic(macro)) { | |||
| let line = "You squat down, letting out a grunt as your rancid bowels force out a $MASS, $LENGTH-long heap of shit. The fatally-pungent scat buries " + container.describe(verbose) + ", ending " + numberRough(sum,"of") + " lives and entombing them in your shit."; | |||
| let line = "You squat down, letting out a grunt as your rancid bowels force out a $MASS, $LENGTH-long heap of shit. The fatally-pungent scat buries " + container.describe(verbose) + ", ending " + numberRough(sum,"of") + (sum > 1 ? " lives" : " life") + " and entombing them in your shit."; | |||
| if (macro.scatStorage.victims.count > 0) { | |||
| line += " Embedded in the vomit-inducing heap are the mangled, crushed remains of " + listSum(macro.scatStorage.victims.sum()) + ", " + numberRough(get_living_prey(macro.scatStorage.victims.sum()), "of") + " living creatures converted to noxious scat by your disgusting depths."; | |||
| } | |||
| @@ -2100,6 +2100,17 @@ rules["anal-vore"].push({ | |||
| } | |||
| }); | |||
| rules["anal-vore"].push({ | |||
| "test": function(container, macro) { | |||
| return hasExactly(container, "Business", 1) && | |||
| hasOnly(container, ["Business"]); | |||
| }, "desc": function(container, macro, verbose, flat) { | |||
| return "You set your weighty rump down on " + container.describe() + " and feel it penerate your hole. Once your weight has settled you clench your sphincter, seperating the building from its foundations with a <i>crCraCHH</i> \ | |||
| and pulling it off the groud and inside of your ass. You feel the immense pressure of your anal cavity slowly crushing the building, bringing newfound pleasure with every shift and temour within the structure."; | |||
| } | |||
| }); | |||
| rules["anal-vore"].push({ | |||
| "test": function(container, macro) { | |||
| return hasExactly(container, "Train", 1) && | |||
| @@ -2118,3 +2129,408 @@ rules["anal-vore"].push({ | |||
| return "Your enormous hands guide a planet towards your cheeks - pressing it firmly into your pucker with a dull, muffled <i>shlph</i>...and " + container.describe(verbose) + " sinks into your bowels, sealed away from the universe..."; | |||
| } | |||
| }); | |||
| //Ball Smother | |||
| //Balls weigh 1,000kg or less | |||
| rules["ball-smother"].push({ | |||
| "test": function(container, macro) { | |||
| return macro.ballMass <= 1000 && | |||
| isNonFatal(macro); | |||
| }, "desc": function(container, macro, verbose, flat) { | |||
| return "Your giant balls impact the ground with a <i>thud</i> pinning " + container.describe(verbose) + " between your weighty orbs."; | |||
| } | |||
| }); | |||
| rules["ball-smother"].push({ | |||
| "test": function(container, macro) { | |||
| return macro.ballMass <= 1000 && | |||
| isFatal(macro); | |||
| }, "desc": function(container, macro, verbose, flat) { | |||
| return "Your " + mass(macro.ballMass, unit, true) + " balls impact the ground with a <i>thud</i> crushing " + container.describe(verbose) + "."; | |||
| } | |||
| }); | |||
| rules["ball-smother"].push({ | |||
| "test": function(container, macro) { | |||
| return macro.ballMass <= 1000 && | |||
| isGory(macro); | |||
| }, "desc": function(container, macro, verbose, flat) { | |||
| return "Your " + mass(macro.ballMass, unit, true) + " balls impact the ground with a <i>thud</i> trapping " + container.describe(verbose) + " and grinding them into the pavement. They briefly struggle to escape before succumbing to the weight bearing down on them."; | |||
| } | |||
| }); | |||
| rules["ball-smother"].push({ | |||
| "test": function(container, macro) { | |||
| return macro.ballMass <= 1000 && | |||
| isSadistic(macro); | |||
| }, "desc": function(container, macro, verbose, flat) { | |||
| return "Your " + mass(macro.ballMass, unit, true) + " balls impact the ground with a <i>thud</i> trapping " + container.describe(verbose) + " and grinding them into the pavement. They briefly struggle to escape before being crushed into a gory mess that leaves a slick of blood on your swinging sack."; | |||
| } | |||
| }); | |||
| //Balls weigh 50,000kg or less | |||
| rules["ball-smother"].push({ | |||
| "test": function(container, macro) { | |||
| return macro.ballMass <= 50000 && | |||
| macro.ballMass > 1000 && | |||
| isNonFatal(macro); | |||
| }, "desc": function(container, macro, verbose, flat) { | |||
| return "Your " + length(macro.ballDiameter, unit, true) + " wide balls impact the ground with a <i>thump</i>. They spread over " + container.describe(verbose) + " and settle into the ground."; | |||
| } | |||
| }); | |||
| rules["ball-smother"].push({ | |||
| "test": function(container, macro) { | |||
| return macro.ballMass <= 50000 && | |||
| macro.ballMass > 1000 && | |||
| isFatal(macro); | |||
| }, "desc": function(container, macro, verbose, flat) { | |||
| return "Your " + length(macro.ballDiameter, unit, true) + " wide balls swing down and into " + container.describe(verbose) + " destroying everything in their path and leaving a gouge in the ground."; | |||
| } | |||
| }); | |||
| rules["ball-smother"].push({ | |||
| "test": function(container, macro) { | |||
| return macro.ballMass <= 50000 && | |||
| macro.ballMass > 1000 && | |||
| isGory(macro); | |||
| }, "desc": function(container, macro, verbose, flat) { | |||
| return "Your " + length(macro.ballDiameter, unit, true) + " wide balls swing down and into " + container.describe(verbose) + " with the force of a wrecking ball. The momentum of the swing destroying everything in their path and leaving a trail of destruction."; | |||
| } | |||
| }); | |||
| rules["ball-smother"].push({ | |||
| "test": function(container, macro) { | |||
| return macro.ballMass <= 50000 && | |||
| macro.ballMass > 1000 && | |||
| isSadistic(macro); | |||
| }, "desc": function(container, macro, verbose, flat) { | |||
| return "Your " + length(macro.ballDiameter, unit, true) + " wide balls swing down and into " + container.describe(verbose) + " with the force of a wrecking ball. The momentum of your mighty sack destroying everything in its path and leaving a trail of destruction. Your balls swing back through the remains of your prey, the massive weight converting everything remaining into unidentifiable detritus."; | |||
| } | |||
| }); | |||
| //Balls weigh 5,000,000kg or less | |||
| rules["ball-smother"].push({ | |||
| "test": function(container, macro) { | |||
| return macro.ballMass <= 5000000 && | |||
| macro.ballMass > 50000 && | |||
| isNonFatal(macro); | |||
| }, "desc": function(container, macro, verbose, flat) { | |||
| return "Your " + length(macro.ballDiameter, unit, true) + " wide balls cast a shadow over " + container.describe(verbose) + " for a few seconds before coming to rest. You feel your sack shift as it settles into the landscape"; | |||
| } | |||
| }); | |||
| rules["ball-smother"].push({ | |||
| "test": function(container, macro) { | |||
| return macro.ballMass <= 5000000 && | |||
| macro.ballMass > 50000 && | |||
| isFatal(macro); | |||
| }, "desc": function(container, macro, verbose, flat) { | |||
| return "Your " + length(macro.ballDiameter, unit, true) + " wide balls cast a shadow over " + container.describe(verbose) + " for a few seconds before slamming into the earth with the weight of " + mass(macro.ballMass, unit, false) + " each. You feel your sack shift as it slowly pulverizes everything unfortunate enough to be trapped beneath it. When you heave your weighty orbs off the ground, only rubble remains."; | |||
| } | |||
| }); | |||
| rules["ball-smother"].push({ | |||
| "test": function(container, macro) { | |||
| return macro.ballMass <= 5000000 && | |||
| macro.ballMass > 50000 && | |||
| isGory(macro); | |||
| }, "desc": function(container, macro, verbose, flat) { | |||
| return "Your " + length(macro.ballDiameter, unit, true) + " wide balls cast a shadow over " + container.describe(verbose) + " for a few seconds before slamming into the earth with the weight of " + mass(macro.ballMass, unit, false) + " each. You feel your sack shift and settle as it slowly pulverizes everything unfortunate enough to be trapped beneath it. After you heave your weighty orbs off the ground all that remains of your victims is gore streaked rubble and twisted steel."; | |||
| } | |||
| }); | |||
| rules["ball-smother"].push({ | |||
| "test": function(container, macro) { | |||
| return macro.ballMass <= 5000000 && | |||
| macro.ballMass > 50000 && | |||
| isSadistic(macro); | |||
| }, "desc": function(container, macro, verbose, flat) { | |||
| return "Your " + length(macro.ballDiameter, unit, true) + " wide balls cast a shadow over " + container.describe(verbose) + " for a few seconds before slamming into the earth with the weight of " + mass(macro.ballMass, unit, false) + " each. You feel your sack shift and settle as it slowly pulverizes everything unfortunate enough to be trapped beneath it. After you heave your weighty orbs off the ground you see that those that were trapped beneath your cum factories are nothing but crumpled bodies lying amist the rubble."; | |||
| } | |||
| }); | |||
| //Balls Weigh 1e9 kg or less | |||
| rules["ball-smother"].push({ | |||
| "test": function(container, macro) { | |||
| return macro.ballMass <= 1e9 && | |||
| macro.ballMass > 5000000 && | |||
| isNonFatal(macro); | |||
| }, "desc": function(container, macro, verbose, flat) { | |||
| return "Your " + length(macro.ballDiameter, unit, true) + " thick balls briefly eclipse the sun before coming to rest on " + container.describe(verbose) + " with the weight of " + mass(macro.ballMass, unit, false) + " each. You feel your sack shift as it spreads over the terrain and forms two noticable indents."; | |||
| } | |||
| }); | |||
| rules["ball-smother"].push({ | |||
| "test": function(container, macro) { | |||
| return macro.ballMass <= 1e9 && | |||
| macro.ballMass > 5000000 && | |||
| isFatal(macro); | |||
| }, "desc": function(container, macro, verbose, flat) { | |||
| return "Your " + length(macro.ballDiameter, unit, true) + " thick balls briefly eclipse the sun before crushing " + container.describe(verbose) + " with the weight of " + mass(macro.ballMass, unit, false) + " each. You feel your sack shift as it slowly pulverizes everything unfortunate enough to be trapped beneath it. When you finally heave your mighty manhood off the ground, you notice 2 massive divots in the terrain; testimony of your immense power."; | |||
| } | |||
| }); | |||
| rules["ball-smother"].push({ | |||
| "test": function(container, macro) { | |||
| return macro.ballMass <= 1e9 && | |||
| macro.ballMass > 5000000 && | |||
| isGory(macro); | |||
| }, "desc": function(container, macro, verbose, flat) { | |||
| return "Your " + length(macro.ballDiameter, unit, true) + " thick balls briefly eclipse the sun before pulverizing " + container.describe(verbose) + " with the weight of " + mass(macro.ballMass, unit, false) + " each. You feel your sack shift and settle as it slowly pulverizes everything unfortunate enough to be trapped beneath it. When you finally heave your mighty manhood off the ground, you notice 2 massive divots filled with rubble and gore in the terrain; testimony of your immense power."; | |||
| } | |||
| }); | |||
| rules["ball-smother"].push({ | |||
| "test": function(container, macro) { | |||
| return macro.ballMass <= 1e9 && | |||
| macro.ballMass > 5000000 && | |||
| isSadistic(macro); | |||
| }, "desc": function(container, macro, verbose, flat) { | |||
| return "Your " + length(macro.ballDiameter, unit, true) + " thick balls briefly eclipse the sun before pulverizing " + container.describe(verbose) + " with the weight of " + mass(macro.ballMass, unit, false) + " each. You feel your sack move and shudder as it's immense bulk flattens everything unfortunate enough to be trapped beneath it. When you finally heave your mighty manhood off the ground, you notice 2 massive divots filled with rubble and gore in the terrain; a fitting grave for those lesser than you."; | |||
| } | |||
| }); | |||
| //Balls Weigh 1e12 kg or less | |||
| rules["ball-smother"].push({ | |||
| "test": function(container, macro) { | |||
| return macro.ballMass <= 1e12 && | |||
| macro.ballMass > 1e9 && | |||
| isNonFatal(macro); | |||
| }, "desc": function(container, macro, verbose, flat) { | |||
| return "Your " + length(macro.ballDiameter, unit, true) + " diameter balls blot out the sky before coming to rest on " + container.describe(verbose) + " with the weight of " + mass(macro.ballMass, unit, false) + " each. You feel your sack push the ground aside to form two massive craters."; | |||
| } | |||
| }); | |||
| rules["ball-smother"].push({ | |||
| "test": function(container, macro) { | |||
| return macro.ballMass <= 1e12 && | |||
| macro.ballMass > 1e9 && | |||
| isFatal(macro); | |||
| }, "desc": function(container, macro, verbose, flat) { | |||
| return "Your " + mass(macro.ballMass, unit, true) + ", " + length(macro.ballDiameter, unit, true) + " diameter balls blot out the sky as they approach your target. The unstoppable force of your gigantic testicles <i>CRASHES</i> through " + container.describe(verbose) + " with little \ | |||
| resistance, pancaking them into the ground. The violent impact generates a shockwave that bowls over surrounding trees and buildings. As you you heave your sack off the ground, two massive craters have formed at the impact site."; | |||
| } | |||
| }); | |||
| rules["ball-smother"].push({ | |||
| "test": function(container, macro) { | |||
| return macro.ballMass <= 1e12 && | |||
| macro.ballMass > 1e9 && | |||
| isGory(macro); | |||
| }, "desc": function(container, macro, verbose, flat) { | |||
| return "Your " + mass(macro.ballMass, unit, true) + ", " + length(macro.ballDiameter, unit, true) + " diameter balls blot out the sky as they approach your target. The unstoppable force of your gigantic testicles <i>CRASHES</i> through " + container.describe(verbose) + " with little \ | |||
| resistance, pancaking them into the ground. The violent impact generates a shockwave that bowls over surrounding trees and buildings. As you heave your sack off the ground, two massive craters have formed at the impact site. A pool of blood and musk is rapidly forming at the bottom of each crater, with peices of debris floating in them."; | |||
| } | |||
| }); | |||
| rules["ball-smother"].push({ | |||
| "test": function(container, macro) { | |||
| return macro.ballMass <= 1e12 && | |||
| macro.ballMass > 1e9 && | |||
| isSadistic(macro); | |||
| }, "desc": function(container, macro, verbose, flat) { | |||
| return "Your " + mass(macro.ballMass, unit, true) + ", " + length(macro.ballDiameter, unit, true) + " diameter balls blot out the sky as they approach your target. The unstoppable force of your gigantic testicles <i>CRASHES</i> through " + container.describe(verbose) + " with little \ | |||
| resistance, pancaking them into the ground. The violent impact generates a shockwave that bowls over surrounding trees and buildings. As you heave your sack off the ground, two massive craters have formed at the impact site. A pool of blood and musk is rapidly forming at the bottom of each crater, with bones and peices of debris floating in them."; | |||
| } | |||
| }); | |||
| //Balls Weigh 1e15 kg or less | |||
| rules["ball-smother"].push({ | |||
| "test": function(container, macro) { | |||
| return macro.ballMass <= 1e15 && | |||
| macro.ballMass > 1e12 && | |||
| isNonFatal(macro); | |||
| }, "desc": function(container, macro, verbose, flat) { | |||
| return "Your " + length(macro.ballDiameter, unit, true) + " wide balls cast darkness over " + container.describe(verbose) + " before settling into the terrain with the weight of " + mass(macro.ballMass, unit, false) + " each. You feel your gigantic orbs shovel out a spot for themselves with their mass alone."; | |||
| } | |||
| }); | |||
| rules["ball-smother"].push({ | |||
| "test": function(container, macro) { | |||
| return macro.ballMass <= 1e15 && | |||
| macro.ballMass > 1e12 && | |||
| isFatal(macro); | |||
| }, "desc": function(container, macro, verbose, flat) { | |||
| return "Your " + mass(macro.ballMass, unit, true) + ", " + length(macro.ballDiameter, unit, true) + " wide balls cast darkness over the land as they swing low and right through " + container.describe(verbose) + " like a hot knife through butter. \ | |||
| You shudder as you feel the force of the impact travel through the entirety of your testicles. The shockwave travels for " + length(macro.ballDiameter, unit, true) + " destroying all in its path. As the initial impact subsides you feel your \ | |||
| enormous balls shift away from each other as they furrow into the landscape."; | |||
| } | |||
| }); | |||
| rules["ball-smother"].push({ | |||
| "test": function(container, macro) { | |||
| return macro.ballMass <= 1e15 && | |||
| macro.ballMass > 1e12 && | |||
| isGory(macro); | |||
| }, "desc": function(container, macro, verbose, flat) { | |||
| return "Your " + mass(macro.ballMass, unit, true) + ", " + length(macro.ballDiameter, unit, true) + " wide balls cast darkness over the land as they swing low and right through " + container.describe(verbose) + " like a hot knife through butter. \ | |||
| You shudder as you feel the force of the impact travel through the entirety of your testicles. The shockwave travels for " + length(macro.ballDiameter, unit, false) + " tossing people into the air and drestroying all in its path. As the \ | |||
| initial impact subsides you feel your enormous balls shift away from each other as they furrow into the landscape and over the people that attempted to flee."; | |||
| } | |||
| }); | |||
| rules["ball-smother"].push({ | |||
| "test": function(container, macro) { | |||
| return macro.ballMass <= 1e15 && | |||
| macro.ballMass > 1e12 && | |||
| isSadistic(macro); | |||
| }, "desc": function(container, macro, verbose, flat) { | |||
| return "Your " + mass(macro.ballMass, unit, true) + ", " + length(macro.ballDiameter, unit, true) + " wide balls cast darkness over the land as they swing low and right through " + container.describe(verbose) + " like a hot knife through butter. \ | |||
| You shudder as you feel the force of the impact travel through the entirety of your testicles. The shockwave travels for " + length(macro.ballDiameter, unit, false) + " tossing people into the air and drestroying all in its path. As the \ | |||
| initial impact subsides you feel your enormous balls shift away from each other as they furrow into the landscape and over the people that attempted to flee. The ground is stained red with blood and gore."; | |||
| } | |||
| }); | |||
| //cause night to fall over | |||
| //Balls Weigh 1e20 kg or less | |||
| rules["ball-smother"].push({ | |||
| "test": function(container, macro) { | |||
| return macro.ballMass <= 1e20 && | |||
| macro.ballMass > 1e15 && | |||
| isNonFatal(macro); | |||
| }, "desc": function(container, macro, verbose, flat) { | |||
| return "Your " + length(macro.ballDiameter, unit, true) + " thick balls cause night to fall before they come to rest on" + container.describe(verbose) + " . Each titanic testicle weighing " + mass(macro.ballMass, unit, false) + " . The craters left by each orb will scar the planet until its destruction."; | |||
| } | |||
| }); | |||
| rules["ball-smother"].push({ | |||
| "test": function(container, macro) { | |||
| return macro.ballMass <= 1e20 && | |||
| macro.ballMass > 1e15 && | |||
| isFatal(macro); | |||
| }, "desc": function(container, macro, verbose, flat) { | |||
| return "Your " + mass(macro.ballMass, unit, true) + ", " + length(macro.ballDiameter, unit, true) + " thick balls cause night to fall over the land. As they contact earth, they obliterate " + container.describe(verbose) + " with a dull <i>booOOOOooOOM</i>. \ | |||
| The immesive forces involved cause your cum factories to bounce up into the air before coming down on the same spot. The second impact drives your titanic balls deep into the ground while throwing shrapnel in every direction. The craters left by your gonads will scar the planet until its destruction."; | |||
| } | |||
| }); | |||
| rules["ball-smother"].push({ | |||
| "test": function(container, macro) { | |||
| return macro.ballMass <= 1e20 && | |||
| macro.ballMass > 1e15 && | |||
| isGory(macro); | |||
| }, "desc": function(container, macro, verbose, flat) { | |||
| return "Your " + mass(macro.ballMass, unit, true) + ", " + length(macro.ballDiameter, unit, true) + " thick balls cause night to fall over the land. As they contact earth, they obliterate " + container.describe(verbose) + " with a dull <i>booOOOOooOOM</i>. \ | |||
| The immesive forces involved cause your cum factories to bounce up into the air before coming down on the same spot. The second impact drives your titanic balls deep into the ground while throwing shrapnel in every direction. The craters left by your gonads quickly fill with various fluids, leaving two lakes forever on the planet."; | |||
| } | |||
| }); | |||
| rules["ball-smother"].push({ | |||
| "test": function(container, macro) { | |||
| return macro.ballMass <= 1e20 && | |||
| macro.ballMass > 1e15 && | |||
| isSadistic(macro); | |||
| }, "desc": function(container, macro, verbose, flat) { | |||
| return "Your " + mass(macro.ballMass, unit, true) + ", " + length(macro.ballDiameter, unit, true) + " thick balls cause night to fall over the land. As they contact earth, they obliterate " + container.describe(verbose) + " with a dull <i>booOOOOooOOM</i>. \ | |||
| The immesive forces involved cause your cum factories to bounce up into the air before coming down on the same spot. The second impact drives your titanic balls deep into the ground while throwing rubble, bodies, and shrapnel in every direction. The craters left by your gonads quickly fill with various fluids, leaving two lakes forever on the planet."; | |||
| } | |||
| }); | |||
| //Balls Weigh 1e24 kg or less | |||
| rules["ball-smother"].push({ | |||
| "test": function(container, macro) { | |||
| return macro.ballMass <= 1e24 && | |||
| macro.ballMass > 1e20 && | |||
| isNonFatal(macro); | |||
| }, "desc": function(container, macro, verbose, flat) { | |||
| return "The Gravatational pull of your " + length(macro.ballDiameter, unit, true) + " across balls cause night to fall before they come to rest on" + container.describe(verbose) + " . Each monstrous testicle weighing " + mass(macro.ballMass, unit, f) + " . The impact of your manhood creating mountains and shaking earth"; | |||
| } | |||
| }); | |||
| rules["ball-smother"].push({ | |||
| "test": function(container, macro) { | |||
| return macro.ballMass <= 1e24 && | |||
| macro.ballMass > 1e20 && | |||
| isFatal(macro); | |||
| }, "desc": function(container, macro, verbose, flat) { | |||
| return "Your " + mass(macro.ballMass, unit, true) + ", " + length(macro.ballDiameter, unit, true) + " across balls cause night to fall over the land. As they slam into the earth, they obliterate " + container.describe(verbose) + " with a thunderous <i>BOOOOOOM</i>. \ | |||
| You feel the Earth twang and vibrate with the impact. The crater kicks up enough dust to throw off the seasons. Large fissures spread away from your privates in all directions, while the aftershocks of the impact alter and destroy the geology of the surrounding area."; | |||
| } | |||
| }); | |||
| rules["ball-smother"].push({ | |||
| "test": function(container, macro) { | |||
| return macro.ballMass <= 1e24 && | |||
| macro.ballMass > 1e20 && | |||
| isGory(macro); | |||
| }, "desc": function(container, macro, verbose, flat) { | |||
| return "Your " + mass(macro.ballMass, unit, true) + ", " + length(macro.ballDiameter, unit, true) + " across balls cause night to fall over the land. As they slam into the earth, they obliterate " + container.describe(verbose) + " with a thunderous <i>BOOOOOOM</i>. \ | |||
| You feel the Earth twang and vibrate with the impact. The crater kicks up enough dust to throw off the seasons. Those that survived the blast are deafened as windows shatter around them and buildings shake on the verge of collapse. Large fissures spread away from your privates in all directions, while the aftershocks of the impact alter and destroy the geology of the surrounding area."; | |||
| } | |||
| }); | |||
| rules["ball-smother"].push({ | |||
| "test": function(container, macro) { | |||
| return macro.ballMass <= 1e24 && | |||
| macro.ballMass > 1e20 && | |||
| isSadistic(macro); | |||
| }, "desc": function(container, macro, verbose, flat) { | |||
| return "Your " + mass(macro.ballMass, unit, true) + ", " + length(macro.ballDiameter, unit, true) + " across balls cause night to fall over the land. As they slam into the earth, they obliterate " + container.describe(verbose) + " with a thunderous <i>BOOOOOOM</i>. \ | |||
| You feel the Earth twang and vibrate with the impact. The crater kicks up enough dust to throw off the seasons. Those that survived the blast are deafened as windows shatter around them and buildings shake on the verge of collapse. Large fissures spread away from your privates in all directions, while the aftershocks of the impact alter and destroy the geology of the surrounding area. \ | |||
| You smell the tang of copper in the air, and know that the next rainfall with be red with the blood of those you have slaughtered."; | |||
| } | |||
| }); | |||
| //Balls Weigh more than 1e24 kg | |||
| rules["ball-smother"].push({ | |||
| "test": function(container, macro) { | |||
| return macro.ballMass > 1e24 && | |||
| isNonFatal(macro); | |||
| }, "desc": function(container, macro, verbose, flat) { | |||
| return "The gravitational pull of your " + mass(macro.ballMass, unit, true) + " balls draw " + container.describe(verbose) + " into your sack, smushing them firmly against your " + length(macro.ballDiameter, unit, true) + " wide balls. "; | |||
| } | |||
| }); | |||
| rules["ball-smother"].push({ | |||
| "test": function(container, macro) { | |||
| return macro.ballMass > 1e24 && | |||
| isFatal(macro); | |||
| }, "desc": function(container, macro, verbose, flat) { | |||
| return "The gravitational pull of your " + mass(macro.ballMass, unit, true) + " balls draw " + container.describe(verbose) + " into your sack, crushing " + (container.count == 1 ? "it" : "them") + " firmly against your " + length(macro.ballDiameter, unit, true) + " wide balls. The gravity each of your orbs tearing " + (container.count == 1 ? "it" : "them") + " asunder, spreading the debris across \ | |||
| your sack, flattening and grinding until nothing remains but your colossal manhood."; | |||
| } | |||
| }); | |||
| rules["ball-smother"].push({ | |||
| "test": function(container, macro) { | |||
| return macro.ballMass > 1e24 && | |||
| isGory(macro); | |||
| }, "desc": function(container, macro, verbose, flat) { | |||
| return "The gravitational pull of your " + mass(macro.ballMass, unit, true) + " balls draw " + container.describe(verbose) + " into your sack, obliterating " + (container.count == 1 ? "it" : "them") + " with your " + length(macro.ballDiameter, unit, true) + " wide balls. The gravity each of your orbs tearing " + (container.count == 1 ? "it" : "them") + " asunder. The many fragments of the collision \ | |||
| expand outward before being pulled back against your groin. The debris spread across your sack, flattening and grinding until nothing remains but your colossal manhood."; | |||
| } | |||
| }); | |||
| rules["ball-smother"].push({ | |||
| "test": function(container, macro) { | |||
| return macro.ballMass > 1e24 && | |||
| isSadistic(macro); | |||
| }, "desc": function(container, macro, verbose, flat) { | |||
| return "The gravitational pull of your " + mass(macro.ballMass, unit, true) + " balls draw " + container.describe(verbose) + " into your sack, decimating " + (container.count == 1 ? "it" : "them") + " with your " + length(macro.ballDiameter, unit, true) + " wide balls. The gravity each of your orbs ripping and tearing " + (container.count == 1 ? "it" : "them") + " asunder. The many fragments of the collision \ | |||
| expand outward before being pulled back against your groin. The debris spread across your sack, flattening and grinding until nothing remains but your colossal manhood."; | |||
| } | |||
| }); | |||
| @@ -11,6 +11,7 @@ var things = | |||
| "Bus": Bus, | |||
| "Tram": Tram, | |||
| "House": House, | |||
| "Business": Business, | |||
| "Barn": Barn, | |||
| "Small Skyscraper": SmallSkyscraper, | |||
| "Large Skyscraper": LargeSkyscraper, | |||
| @@ -33,6 +34,14 @@ var things = | |||
| "Helicopter": Helicopter, | |||
| "Micro": Micro, | |||
| "Macro": Macro, | |||
| "Squad": Squad, | |||
| "Platoon": Platoon, | |||
| "Company": Company, | |||
| "Battalion": Battalion, | |||
| "Brigade": Brigade, | |||
| "Division": Division, | |||
| "Tank Division": TankDivision, | |||
| "Army": Army, | |||
| }; | |||
| var areas = | |||
| @@ -45,6 +54,7 @@ var areas = | |||
| "Bus": 12, | |||
| "Tram": 20, | |||
| "House": 150, | |||
| "Business": 400, | |||
| "Barn": 300, | |||
| "Small Skyscraper": 1000, | |||
| "Large Skyscraper": 2000, | |||
| @@ -67,6 +77,14 @@ var areas = | |||
| "Helicopter": 8, | |||
| "Micro": 0.05, | |||
| "Macro": 100, | |||
| "Squad": 20, | |||
| "Platoon": 100, | |||
| "Company": 500, | |||
| "Battalion": 3000, | |||
| "Brigade": 20000, | |||
| "Division": 80000, | |||
| "Tank Division": 100000, | |||
| "Army": 750000, | |||
| }; | |||
| var masses = | |||
| @@ -79,6 +97,7 @@ var masses = | |||
| "Bus": 5000, | |||
| "Tram": 10000, | |||
| "House": 10000, | |||
| "Business": 50000, | |||
| "Barn": 5000, | |||
| "Small Skyscraper": 10000000, | |||
| "Large Skyscraper": 80000000, | |||
| @@ -101,6 +120,14 @@ var masses = | |||
| "Helicopter": 1500, | |||
| "Micro": 0.01, | |||
| "Macro": 80000, | |||
| "Squad": 1, | |||
| "Platoon": 100, | |||
| "Company": 500, | |||
| "Battalion": 1000, | |||
| "Brigade": 1500, | |||
| "Division": 2000, | |||
| "Tank Division": 3000, | |||
| "Army": 5000, | |||
| }; | |||
| var clusters = | |||
| @@ -113,6 +140,7 @@ var clusters = | |||
| "Bus": 1, | |||
| "Tram": 1, | |||
| "House": 5, | |||
| "Business": 5, | |||
| "Barn": 1, | |||
| "Small Skyscraper": 2, | |||
| "Large Skyscraper": 1, | |||
| @@ -135,6 +163,14 @@ var clusters = | |||
| "Helicopter": 0, | |||
| "Micro": 10, | |||
| "Macro": 0, | |||
| "Squad": 20, | |||
| "Platoon": 2, | |||
| "Company": 2, | |||
| "Battalion": 2, | |||
| "Brigade": 2, | |||
| "Division": 3, | |||
| "Tank Division": 1, | |||
| "Army": 2, | |||
| }; | |||
| var cluster_chances = | |||
| @@ -147,6 +183,7 @@ var cluster_chances = | |||
| "Bus": 0.25, | |||
| "Tram": 0.2, | |||
| "House": 0.5, | |||
| "Business": .05, | |||
| "Barn": 0.1, | |||
| "Small Skyscraper": 0.25, | |||
| "Large Skyscraper": 0.25, | |||
| @@ -169,6 +206,14 @@ var cluster_chances = | |||
| "Helicopter": 0, | |||
| "Micro": 10, | |||
| "Macro": 0, | |||
| "Squad": .05, | |||
| "Platoon": .05, | |||
| "Company": .1, | |||
| "Battalion": .1, | |||
| "Brigade": .1, | |||
| "Division": .1, | |||
| "Tank Division": 0.15, | |||
| "Army": .1, | |||
| }; | |||
| var contents = | |||
| @@ -183,13 +228,14 @@ var contents = | |||
| "Train": [["Person",1,4,"engine"],["Train Car",2,10]], | |||
| "Train Car": [["Person",10,40]], | |||
| "House": [["Person",0,8],["Empty Car",0,2]], | |||
| "Business": [["Person",0,30],["Car",0,20]], | |||
| "Barn": [["Person",0,2],["Cow",30,70]], | |||
| "Small Skyscraper": [["Person",150,750],["Empty Car",10,50]], | |||
| "Large Skyscraper": [["Person",500,1500],["Empty Car",20,100]], | |||
| "Parking Garage": [["Person",10,200],["Empty Car",100,300],["Car",5,30]], | |||
| "Town": [["Person",10000,100000],["House",5000,50000],["Empty Car",200,800],["Car",500,80000],["Bus",5,25],["Train",5,25]], | |||
| "City": [["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]], | |||
| "Continent": [["Person",1000000,15000000],["House",2500,10000],["Car",25000,375000],["Train",50,500],["Town",500,1000],["City",50,250]], | |||
| "Town": [["Person",10000,100000],["House",5000,50000],["Empty Car",200,800],["Car",500,80000],["Bus",5,25],["Train",5,25],["Business",500,5000]], | |||
| "City": [["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": [["Person",1000000,15000000],["House",2500,10000],["Car",25000,375000],["Train",50,500],["Town",500,1000],["City",50,250],["Business",250,1000]], | |||
| "Planet": [["Continent",4,9]], | |||
| "Star": [], | |||
| "Solar System": [["Star",1,1],["Planet",5,15]], | |||
| @@ -202,7 +248,24 @@ var contents = | |||
| "Artillery": [["Soldier",4,6]], | |||
| "Helicopter": [["Soldier",4,16]], | |||
| "Micro": [[]], | |||
| "Macro": [[]] | |||
| "Macro": [[]], | |||
| //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]], | |||
| "Squad": [["Soldier",6,9]], | |||
| "Platoon": [["Soldier",16,44]], | |||
| "Company": [["Soldier",60,200]], | |||
| "Battalion": [["Soldier",300,1000]], | |||
| "Brigade": [["Soldier",1500,3200]], | |||
| "Division": [["Soldier",10000,16000]], | |||
| "Tank Division": [["Soldier",8000,1200],["Tank",250,500]], | |||
| "Army": [["Soldier",40000,75000]], | |||
| }; | |||
| // replace all instances of from with to | |||
| @@ -632,7 +695,7 @@ function Person(count = 1) { | |||
| this.contents = initContents(this.name,this.count); | |||
| this.describeOne = function (verbose=true) { | |||
| var body = random_desc(["skinny","fat","tall","short","stocky","spindly"], (verbose ? 0.6 : 0)); | |||
| 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 species = ""; | |||
| species = random_desc(["wolf","cat","dog","squirrel","horse","hyena","fox","jackal","crux","sergal"]); | |||
| @@ -667,7 +730,7 @@ function Human(count = 1) { | |||
| this.contents = initContents(this.name,this.count); | |||
| this.describeOne = function (verbose=true) { | |||
| var body = random_desc(["skinny","fat","tall","short","stocky","spindly"], (verbose ? 0.6 : 0)); | |||
| var body = random_desc(["skinny","fat","tall","short","stocky","spindly","muscular","fit","tanned"], (verbose ? 0.6 : 0)); | |||
| var sex = random_desc(["man", "woman"], 1); | |||
| return "a " + merge_desc([body,sex]); | |||
| }; | |||
| @@ -733,7 +796,7 @@ function EmptyCar(count = 1) { | |||
| this.describeOne = function(verbose=true) { | |||
| var color = random_desc(["black","black","gray","gray","blue","red","tan","white","white"]); | |||
| var adjective = random_desc(["rusty","brand-new"],0.3); | |||
| var adjective = random_desc(["rusty","brand-new","luxury","beat-up","dented","restored","classic"],0.3); | |||
| var type = random_desc(["SUV","coupe","sedan","truck","van","convertible"]); | |||
| return "a parked " + merge_desc([adjective,color,type]); | |||
| }; | |||
| @@ -765,7 +828,7 @@ function Car(count = 1) { | |||
| this.describeOne = function(verbose=true) { | |||
| var color = random_desc(["black","black","gray","gray","blue","red","tan","white","white"], (verbose ? 1 : 0)); | |||
| var adjective = random_desc(["rusty","brand-new"], (verbose ? 0.3 : 0)); | |||
| var adjective = random_desc(["rusty","brand-new","luxury","beat-up","dented","restored","classic"], (verbose ? 0.3 : 0)); | |||
| var type = random_desc(["SUV","coupe","sedan","truck","van","convertible"]); | |||
| return "a " + merge_desc([adjective,color,type]); | |||
| }; | |||
| @@ -796,9 +859,9 @@ function Bus(count = 1) { | |||
| this.contents = initContents(this.name,this.count); | |||
| this.describeOne = function(verbose=true) { | |||
| var adjective = random_desc(["rusty","brand-new"], (verbose ? 0.3 : 0)); | |||
| var adjective = random_desc(["rusty","brand-new","aging","modern"], (verbose ? 0.3 : 0)); | |||
| var color = random_desc(["black","tan","gray"], (verbose ? 1 : 0)); | |||
| var type = random_desc(["bus","double-decker bus","articulating bus"]); | |||
| var type = random_desc(["bus","school bus","double-decker bus","articulating bus","open-top bus","sleeper bus","intercity bus"]); | |||
| return "a " + merge_desc([adjective,color,type]); | |||
| }; | |||
| @@ -828,7 +891,7 @@ function Tram(count = 1) { | |||
| this.contents = initContents(this.name,this.count); | |||
| this.describeOne = function(verbose=true) { | |||
| var adjective = random_desc(["rusty","weathered"], (verbose ? 0.3 : 0)); | |||
| var adjective = random_desc(["rusty","weathered","well-maintained",], (verbose ? 0.3 : 0)); | |||
| var color = random_desc(["blue","brown","gray"], (verbose ? 1 : 0)); | |||
| var type = random_desc(["tram"]); | |||
| return "a " + merge_desc([adjective,color,type]); | |||
| @@ -863,7 +926,7 @@ function Train(count = 1) { | |||
| this.contents = initContents(this.name,this.count); | |||
| this.describeOne = function(verbose=true) { | |||
| var adjective = random_desc(["rusty","brand-new"], (verbose ? 0.3 : 0)); | |||
| var adjective = random_desc(["rusty","brand-new","steam","freshly-painted"], (verbose ? 0.3 : 0)); | |||
| var color = random_desc(["black","tan","gray"], (verbose ? 1 : 0)); | |||
| var type = random_desc(["train","passenger train","freight train"]); | |||
| return "a " + merge_desc([adjective,color,type]); | |||
| @@ -900,8 +963,8 @@ function TrainCar(count = 1) { | |||
| this.contents = initContents(this.name,this.count); | |||
| this.describeOne = function(verbose=true) { | |||
| var adjective = random_desc(["rusty","brand-new"], (verbose ? 0.3 : 0)); | |||
| var color = random_desc(["black","tan","gray"], (verbose ? 1 : 0)); | |||
| var adjective = random_desc(["rusty","brand-new","vintage","graffitied","well-maintained"], (verbose ? 0.3 : 0)); | |||
| var color = random_desc(["black","tan","gray","yellow","steel","wooden"], (verbose ? 1 : 0)); | |||
| var type = random_desc(["train car","passenger train car","freight train car"]); | |||
| return "a " + merge_desc([adjective,color,type]); | |||
| }; | |||
| @@ -922,9 +985,9 @@ function House(count = 1) { | |||
| this.contents = initContents(this.name,this.count); | |||
| this.describeOne = function(verbose=true) { | |||
| var size = random_desc(["little","two-story","large"], (verbose ? 0.5 : 0)); | |||
| var color = random_desc(["blue","white","gray","tan","green"], (verbose ? 0.5 : 0)); | |||
| var name = random_desc(["house","house","house","house","house","trailer"], 1); | |||
| var size = random_desc(["little","two-story","large","well-built","run-down","cheap",], (verbose ? 0.5 : 0)); | |||
| var color = random_desc(["blue","white","gray","tan","green","wooden","brick"], (verbose ? 0.5 : 0)); | |||
| var name = random_desc(["house","home","house","house","house","trailer"], 1); | |||
| return "a " + merge_desc([size,color,name]); | |||
| }; | |||
| @@ -944,6 +1007,36 @@ function House(count = 1) { | |||
| } | |||
| }; | |||
| } | |||
| //might split this into a general business and resutrant categories | |||
| function Business(count = 1) { | |||
| this.name = "Business"; | |||
| copy_defaults(this,new DefaultEntity()); | |||
| this.count = count; | |||
| this.contents = initContents(this.name,this.count); | |||
| this.describeOne = function(verbose=true) { | |||
| var size = random_desc(["little","two-story","large","well-built","run-down","cheap","aging","corner"], (verbose ? 0.5 : 0)); | |||
| var color = random_desc(["blue","white","gray","tan","green","brick","concrete"], (verbose ? 0.5 : 0)); | |||
| var name = random_desc(["mall","resturant","bank","clinic","shop","post office","tire shop","chain resturant","grocery store","barber shop","pizza resturant","hardware store","movie theather","gas station"], 1); | |||
| return "a " + merge_desc([size,color,name]); | |||
| }; | |||
| this.describe = function(verbose = true) { | |||
| if (verbose) { | |||
| if (this.count <= 3) { | |||
| var 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,verbose); | |||
| } else { | |||
| return this.count + " local business with " + describe_all(this.contents,verbose) + "inside"; | |||
| } | |||
| } else { | |||
| return (this.count > 1 ? this.count + " buildings" : "a local business"); | |||
| } | |||
| }; | |||
| } | |||
| function Barn(count = 1) { | |||
| this.name = "Barn"; | |||
| @@ -952,8 +1045,8 @@ function Barn(count = 1) { | |||
| this.contents = initContents(this.name,this.count); | |||
| this.describeOne = function(verbose=true) { | |||
| var size = random_desc(["little","big","large"], (verbose ? 0.5 : 0)); | |||
| var color = random_desc(["blue","white","gray","tan","green"], (verbose ? 0.5 : 0)); | |||
| var size = random_desc(["little","big","large","weathered","rotted","new"], (verbose ? 0.5 : 0)); | |||
| var color = random_desc(["blue","white","gray","tan","green","red"], (verbose ? 0.5 : 0)); | |||
| var name = random_desc(["barn","barn","barn","barn","barn","farmhouse"], 1); | |||
| return "a " + merge_desc([size,color,name]); | |||
| }; | |||
| @@ -983,7 +1076,7 @@ function SmallSkyscraper(count = 1) { | |||
| this.describeOne = function(verbose=true) { | |||
| var color = random_desc(["blue","white","gray","tan","green"], (verbose ? 0.5 : 0)); | |||
| var name = random_desc(["skyscraper","office tower","office building"], 1); | |||
| var name = random_desc(["skyscraper","office tower","office building","high rise"], 1); | |||
| return "a " + merge_desc([color,name]); | |||
| }; | |||
| @@ -1012,7 +1105,7 @@ function LargeSkyscraper(count = 1) { | |||
| this.contents = initContents(this.name,this.count); | |||
| this.describeOne = function(verbose=true) { | |||
| var color = random_desc(["blue","white","gray","tan","green"], (verbose ? 0.5 : 0)); | |||
| var color = random_desc(["blue","white","gray","tan","green","glass"], (verbose ? 0.5 : 0)); | |||
| var name = random_desc(["skyscraper","office tower","office building"], 1); | |||
| return "a " + merge_desc(["towering",color,name]); | |||
| }; | |||
| @@ -1291,3 +1384,155 @@ function Macro(count = 1) { | |||
| return (this.count == 1 ? "a smaller macro" : this.count + " smaller macros"); | |||
| }; | |||
| } | |||
| function Squad(count = 1) { | |||
| this.name = "Squad"; | |||
| copy_defaults(this,new DefaultEntity()); | |||
| this.count = count; | |||
| this.contents = initContents(this.name,this.count); | |||
| this.describeOne = function(verbose=true) { | |||
| return "a squad"; | |||
| }; | |||
| 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"); | |||
| } | |||
| }; | |||
| } | |||
| function Platoon(count = 1) { | |||
| this.name = "Platoon"; | |||
| copy_defaults(this,new DefaultEntity()); | |||
| this.count = count; | |||
| this.contents = initContents(this.name,this.count); | |||
| this.describeOne = function(verbose=true) { | |||
| return "a military platoon"; | |||
| }; | |||
| 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"); | |||
| } | |||
| }; | |||
| } | |||
| function Company(count = 1) { | |||
| this.name = "Company"; | |||
| copy_defaults(this,new DefaultEntity()); | |||
| this.count = count; | |||
| this.contents = initContents(this.name,this.count); | |||
| this.describeOne = function(verbose=true) { | |||
| return "a company of soldiers"; | |||
| }; | |||
| 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"); | |||
| } | |||
| }; | |||
| } | |||
| function Battalion(count = 1) { | |||
| this.name = "Battalion"; | |||
| copy_defaults(this,new DefaultEntity()); | |||
| this.count = count; | |||
| this.contents = initContents(this.name,this.count); | |||
| this.describeOne = function(verbose=true) { | |||
| return "a battalion"; | |||
| }; | |||
| 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"); | |||
| } | |||
| }; | |||
| } | |||
| function Brigade(count = 1) { | |||
| this.name = "Brigade"; | |||
| copy_defaults(this,new DefaultEntity()); | |||
| this.count = count; | |||
| this.contents = initContents(this.name,this.count); | |||
| this.describeOne = function(verbose=true) { | |||
| return "a brigade"; | |||
| }; | |||
| 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"); | |||
| } | |||
| }; | |||
| } | |||
| function Division(count = 1) { | |||
| this.name = "Division"; | |||
| copy_defaults(this,new DefaultEntity()); | |||
| this.count = count; | |||
| this.contents = initContents(this.name,this.count); | |||
| this.describeOne = function(verbose=true) { | |||
| return "a division"; | |||
| }; | |||
| 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"); | |||
| } | |||
| }; | |||
| } | |||
| function TankDivision(count = 1) { | |||
| this.name = "Tank Division"; | |||
| copy_defaults(this,new DefaultEntity()); | |||
| this.count = count; | |||
| this.contents = initContents(this.name,this.count); | |||
| this.describeOne = function(verbose=true) { | |||
| return "a tank division"; | |||
| }; | |||
| 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"); | |||
| } | |||
| }; | |||
| } | |||
| function Army(count = 1) { | |||
| this.name = "Army"; | |||
| copy_defaults(this,new DefaultEntity()); | |||
| this.count = count; | |||
| this.contents = initContents(this.name,this.count); | |||
| this.describeOne = function(verbose=true) { | |||
| return "an army"; | |||
| }; | |||
| 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"); | |||
| } | |||
| }; | |||
| } | |||
| @@ -1,14 +1,14 @@ | |||
| .light { | |||
| color: #000; | |||
| background: #eee; | |||
| background: #dbdbdb; | |||
| font-family: Arial; | |||
| } | |||
| .dark { | |||
| color: #eee; | |||
| font-family: Arial; | |||
| background: #111; | |||
| font-family: Arial; | |||
| } | |||
| #character-presets { | |||
| @@ -23,25 +23,32 @@ | |||
| body.dark input { | |||
| color: #eee; | |||
| background: #444; | |||
| background-color: rgba(0, 0, 0, 0.3); | |||
| } | |||
| body.dark select { | |||
| color: #eee; | |||
| background: #444; | |||
| background-color: rgba(0, 0, 0, 0.3); | |||
| } | |||
| body.light button { | |||
| color: #000; | |||
| background: #ddd; | |||
| border-width: 1px; | |||
| border-color: #000; | |||
| background-color: rgba(255, 255, 255, 0.3); | |||
| } | |||
| body.dark button { | |||
| color: #eee; | |||
| background: #111; | |||
| border-width: 1px; | |||
| background-color: rgba(0, 0, 0, 0.4); | |||
| } | |||
| body.dark div { | |||
| background: #111; | |||
| background-color: transparent; | |||
| } | |||
| .game-area { | |||
| @@ -94,37 +101,37 @@ body.dark div { | |||
| body.light #react-log { | |||
| color: #000; | |||
| background-color: #e7e7e7; | |||
| background-color: rgba(240, 240, 255, 0.3); | |||
| } | |||
| body.light #react-log div { | |||
| background-color: #e7e7e7; | |||
| background-color: transparent; | |||
| } | |||
| body.dark #react-log { | |||
| color: #eee; | |||
| background-color: #151515; | |||
| background-color: rgba(0, 0, 0, 0.4); | |||
| } | |||
| body.dark #react-log div { | |||
| background-color: #151515; | |||
| background-color: transparent; | |||
| } | |||
| body.light #react-log { | |||
| body.light #log { | |||
| color: #000; | |||
| background-color: #e7e7e7; | |||
| background-color: rgba(240, 240, 255, 0.3); | |||
| } | |||
| body.light #log div { | |||
| background-color: #e7e7e7; | |||
| background-color: transparent; | |||
| } | |||
| body.dark #log { | |||
| color: #eee; | |||
| background-color: #151515; | |||
| background-color: rgba(0, 0, 0, 0.4); | |||
| } | |||
| body.dark #log div { | |||
| background-color: #151515; | |||
| background-color: transparent; | |||
| } | |||
| .stat-header-self { | |||
| @@ -218,6 +225,7 @@ progress { | |||
| #action-panel { | |||
| display: none; | |||
| } | |||
| .option-button { | |||
| @@ -253,10 +261,12 @@ progress { | |||
| body.light .action-button-disabled { | |||
| color: #777 !important; | |||
| background-color: rgba(150, 0, 0, 0.25); | |||
| } | |||
| body.dark .action-button-disabled { | |||
| color: #aaa !important; | |||
| background-color: rgba(150, 0, 0, 0.25); | |||
| } | |||
| #victim-table { | |||
| @@ -308,15 +318,19 @@ input[type="checkbox"]:checked ~ .reveal-if-active { | |||
| body.light .custom-category { | |||
| background: #ddd; | |||
| background-color: rgba(255, 255, 255, 0.4); | |||
| } | |||
| body.dark .custom-category { | |||
| background: #222; | |||
| background-color: rgba(0, 0, 0, 0.4); | |||
| } | |||
| body.dark .custom-category div { | |||
| background: #222; | |||
| background-color: transparent; | |||
| } | |||
| .custom-header-static { | |||
| user-select: none; | |||
| font-size: 250%; | |||
| @@ -348,12 +362,19 @@ body.dark .custom-header-static { | |||
| body.light .custom-header { | |||
| color: #aaa; | |||
| background: #ddd; | |||
| background-color: rgba(255, 255, 255, 0.3); | |||
| border-width: 1px; | |||
| padding-left: 10px; | |||
| padding-right: 10px; | |||
| border-color: #000; | |||
| } | |||
| body.dark .custom-header { | |||
| color: #555; | |||
| background: #222; | |||
| background-color: rgba(0, 0, 0, 0.3); | |||
| padding: 5px; | |||
| padding-left: 10px; | |||
| padding-right: 10px; | |||
| } | |||
| body.light input[type="checkbox"]:checked+ | |||
| @@ -361,7 +382,7 @@ body.light input[type="checkbox"]:checked+ | |||
| color: #000; | |||
| border-style: solid; | |||
| margin: 10px; | |||
| background: #bbb; | |||
| background-color: rgba(230, 230, 230, 0.3); | |||
| } | |||
| body.dark input[type="checkbox"]:checked+ | |||
| @@ -369,7 +390,7 @@ body.dark input[type="checkbox"]:checked+ | |||
| color: #fff; | |||
| border-style: solid; | |||
| margin: 10px; | |||
| background: #444; | |||
| background-color: rgba(0, 0, 0, 0.3); | |||
| } | |||
| .custom-header-checkbox { | |||
| @@ -462,7 +483,7 @@ body.light a { | |||
| } | |||
| body.light a:visited { | |||
| color: #0000AA; | |||
| color: #0000ff; | |||
| } | |||
| body.light a:hover { | |||
| @@ -200,37 +200,37 @@ function customaryMass(kg, singular=false) { | |||
| function approxMass(kg, singular=false) { | |||
| if (kg < 4500) { | |||
| let mass = round(kg/1000,2); | |||
| return (singular || mass == 1 ? "a car" : mass + " cars"); | |||
| return mass + (singular || mass == 1 ? "car" : " cars"); | |||
| } else if (kg < 54431) { | |||
| let mass = round(kg/6000,2); | |||
| return (singular || mass == 1 ? "an elephant" : mass + " elephants"); | |||
| //this unit almos never gets used and is mostly redundant, perhaps remove it if units are cleaned up | |||
| return mass + (singular || mass == 1 ? " elephant" : " elephants"); | |||
| //this unit almost never gets used and is mostly redundant, perhaps remove it if units are cleaned up | |||
| } else if (kg < 10000000) { | |||
| let mass = round(kg/54431.1,2); | |||
| return (singular || mass == 1 ? "a tank" : mass + " tanks"); | |||
| return mass + (singular || mass == 1 ? " tank" : " tanks"); | |||
| } else if (kg < 5.2e10) { | |||
| let mass = round(kg/9.7e7,2); | |||
| return (singular || mass == 1 ? "an aircraft carrier" : mass + " aircraft carriers"); | |||
| return mass + (singular || mass == 1 ? " aircraft carrier" : " aircraft carriers"); | |||
| } else if (kg < 1.5e13) { | |||
| let mass = round(kg/5.2e10,2); | |||
| return (singular || mass == 1 ? "the Great Wall of China" : mass + " Great Wall Of Chinas"); | |||
| return mass + (singular || mass == 1 ? " Great Wall of China" : " Great Wall Of Chinas"); | |||
| } else if (kg < 5e21) { | |||
| let mass = round(kg/1.5373768e15,3); | |||
| return (singular || mass == 1 ? "New York City" : mass + " New York Cities"); | |||
| return mass + (singular || mass == 1 ? " New York City" : mass + " New York Cities"); | |||
| //this figure includes a lot of underlying bedrock, just the city itself is 1.13587210581190e11 but I needed a good figure to fit in this spot | |||
| } else if (kg < 6e23) { | |||
| let mass = round(kg/4.6121304e20,3); | |||
| return (singular || mass == 1 ? "Australia" : mass + " Australias"); | |||
| //this is a napkin math number based on the land area of Australia, 25km of height and rough desnity or rock | |||
| return mass +(singular || mass == 1 ? " Australia" : mass + " Australias"); | |||
| //this is a napkin math number based on the land area of Australia, 25km of height and rough density of rock | |||
| } else if (kg < 2e27) { | |||
| let mass = round(kg/5.972e24,4); | |||
| return (singular || mass == 1 ? "the Earth" : mass + " Earths"); | |||
| return mass + (singular || mass == 1 ? " Earth" : mass + " Earths"); | |||
| } else if (kg < 1.4e39) { | |||
| let mass = round(kg/1.989e30,4); | |||
| return (singular || mass == 1 ? "the Sun" : mass + " Suns"); | |||
| return mass + (singular || mass == 1 ? " Sun" : mass + " Suns"); | |||
| } else { | |||
| let mass = round(kg/1.3923e42,4); | |||
| return (singular || mass == 1 ? "the Milky Way" : mass + " Milky Ways"); | |||
| return mass + (singular || mass == 1 ? " Milky Way" : mass + " Milky Ways"); | |||
| } | |||
| } | |||
| @@ -267,9 +267,9 @@ function customaryLength(m, singular=false) { | |||
| } | |||
| function approxLength(m, singular=false) { | |||
| if (m < 30) { | |||
| let length = round(m/1.905,1); | |||
| return length + (singular || length == 1 ? " bed" : " beds"); | |||
| if (m < 25) { | |||
| let length = round(m/1.9,1); | |||
| return length + (singular || length == 1 ? " person" : " people"); | |||
| } else if (m < 350) { | |||
| let length = round(m/49,1); | |||
| return length + (singular || length == 1 ? " football field" : " football fields"); | |||
| @@ -281,10 +281,10 @@ function approxLength(m, singular=false) { | |||
| return length + (singular || length == 1 ? " Panama Canal" : " Panama Canals"); | |||
| } else if (m < 3474574*2) { | |||
| let length = round(m/3474574,1); | |||
| return length + (singular || length == 1 ? " moon" : " moons"); | |||
| return length + (singular || length == 1 ? " Moon" : " moons"); | |||
| } else if (m < 12.742e6*130) { | |||
| let length = round(m/12.742e6,2); | |||
| return length + (singular || length == 1 ? " earth" : " earths"); | |||
| return length + (singular || length == 1 ? " Earth" : " earths"); | |||
| } else if (m < 149.6e12) { | |||
| let length = round(m/149.6e9,3); | |||
| return length + (singular || length == 1 ? " AU" : " AUs"); | |||
| @@ -373,30 +373,30 @@ function customaryVolume(m3, singular=false) { | |||
| function approxVolume(m3, singular=false) { | |||
| if (m3 < 2/10000) { | |||
| let volume = round(m3*4e5,0); | |||
| return (singular || volume == 1 ? "a shot" : volume + " shots"); | |||
| return volume + (singular || volume == 1 ? " shot" : " shots"); | |||
| } else if (m3 < .1) { | |||
| let volume = round(m3*2254,1); | |||
| return (singular || volume == 1 ? "a glass" : volume + " glasses"); | |||
| return volume + (singular || volume == 1 ? " glass" : " glasses"); | |||
| } else if (m3 < 100) { | |||
| let volume = round(m3*2.64,1); | |||
| return(singular || volume == 1 ? "a bathtub" : volume + " bathtubs"); | |||
| return volume + (singular || volume == 1 ? " bathtub" : " bathtubs"); | |||
| } else if (m3 < 1e5) { | |||
| let volume = round(m3/1000,2); | |||
| return (singular || volume == 1 ? "an Olympic swimming pool" : volume + " Olympic swimming pools"); | |||
| return volume + (singular || volume == 1 ? " Olympic swimming pool" : " Olympic swimming pools"); | |||
| } else if (m3 < 1e9) { | |||
| let volume = round(m3/3.2e5,2); | |||
| return (singular || volume == 1 ? "an oil tanker" : volume + " oil tankers"); | |||
| return volume + (singular || volume == 1 ? " oil tanker" : " oil tankers"); | |||
| } else if (m3 < 1e15) { | |||
| let volume = round(m3/1.8919e10,3); | |||
| return (singular || volume == 1 ? "a Great Salt Lake" : volume + " Great Salt Lakes"); | |||
| return volume + (singular || volume == 1 ? " Great Salt Lake" : " Great Salt Lakes"); | |||
| } else if (m3 < 1e20){ | |||
| let volume = round(m3/3.547e17, 3); | |||
| return (singular || volume == 1 ? "an ocean" : volume + " oceans"); | |||
| return volume + (singular || volume == 1 ? " ocean" : " oceans"); | |||
| } else if (m3 < 1e25){ | |||
| let volume = round(m3/1e21, 3); | |||
| return (singular || volume == 1 ? "Earth's volume" : volume + " Earths"); | |||
| return volume + (singular || volume == 1 ? " Earth" : " Earths"); | |||
| } else { | |||
| let volume = round(m3/1.4e27, 3); | |||
| return (singular || volume == 1 ? "Sun's volume" : volume + " Suns"); | |||
| return volume + (singular || volume == 1 ? " Sun" : " Suns"); | |||
| } | |||
| } | |||