From 51985708e0c3558a9fc1ea9a53ecf668818c594c Mon Sep 17 00:00:00 2001 From: Fen Dweller Date: Tue, 14 Jan 2020 13:15:13 -0500 Subject: [PATCH] Format all of the source files --- darkmode.js | 2 +- features.js | 3718 ++++++++++++++++++++++---------------------- game.js | 2091 ++++++++++++------------- recursive-desc.js | 2124 ++++++++++++------------- recursive-macro.js | 1001 ++++++------ sounds.js | 34 +- units.js | 370 ++--- 7 files changed, 4635 insertions(+), 4705 deletions(-) diff --git a/darkmode.js b/darkmode.js index 361f03e..9c3eddc 100644 --- a/darkmode.js +++ b/darkmode.js @@ -10,7 +10,7 @@ function toggleDarkMode(e) { function setDarkMode(darkMode) { dark = darkMode; - window.localStorage.setItem("dark-mode",dark); + window.localStorage.setItem("dark-mode", dark); if (dark) { document.querySelector("body").classList.remove("light"); document.querySelector("body").classList.add("dark"); diff --git a/features.js b/features.js index e1aaf8a..b3b0ab6 100644 --- a/features.js +++ b/features.js @@ -19,525 +19,525 @@ const groupInfo = { } const panels = { - "body": { - "name": "Body", - "buttons": [ - { - "name": "Eat", - "target": "feed" - }, - { - "name": "Crop Swallow", - "target": "crop_swallow" - }, - { - "name": "Digest", - "target": "digest_stomach" - }, - { - "name": "Chew", - "target": "chew" - }, - { - "name": "Grab", - "target": "hand_crush" - }, - { - "name": "Drool", - "target": "drool" - }, - { - "name": "Vomit", - "target": "vomit" - }, - { - "name": "Sit", - "target": "sit" - }, - { - "name": "Grind ass", - "target": "ass_grind" - }, - { - "name": "Anal Vore", - "target": "anal_vore" - }, - { - "name": "Digest Bowels", - "target": "digest_anal" - }, - { - "name": "Grind hips", - "target": "grind" - } - ] - }, - "paws": { + "body": { + "name": "Body", + "buttons": [ + { + "name": "Eat", + "target": "feed" + }, + { + "name": "Crop Swallow", + "target": "crop_swallow" + }, + { + "name": "Digest", + "target": "digest_stomach" + }, + { + "name": "Chew", + "target": "chew" + }, + { + "name": "Grab", + "target": "hand_crush" + }, + { + "name": "Drool", + "target": "drool" + }, + { + "name": "Vomit", + "target": "vomit" + }, + { + "name": "Sit", + "target": "sit" + }, + { + "name": "Grind ass", + "target": "ass_grind" + }, + { + "name": "Anal Vore", + "target": "anal_vore" + }, + { + "name": "Digest Bowels", + "target": "digest_anal" + }, + { + "name": "Grind hips", + "target": "grind" + } + ] + }, + "paws": { + "name": "Paws", + "buttons": [ + { + "name": "Stomp", + "target": "stomp" + }, + { + "name": "Grab", + "target": "foot_crush" + }, + { + "name": "Flex Toes", + "target": "flex_toes" + }, + { + "name": "Absorb", + "target": "paw_vore" + }, + { + "name": "Digest", + "target": "digest_paws" + } + ] + }, + "tails": { + "name": "Tails", + "buttons": [ + { + "name": "Tail Slap", + "target": "tail_slap" + }, + { + "name": "Tail Vore", + "target": "tail_vore_only" + }, + { + "name": "Tail Vore (1)", + "target": "tail_vore_one" + }, + { + "name": "Tail Vore (some)", + "target": "tail_vore_some" + }, + { + "name": "Tail Vore (all!)", + "target": "tail_vore_all" + }, + { + "name": "Digest", + "target": "digest_tail" + } + ] + }, + "breasts": { + "name": "Breasts", + "buttons": [ + { + "name": "Stuff Cleavage", + "target": "cleavage_stuff" + }, + { + "name": "Squeeze Cleavage", + "target": "breast_toy" + }, + { + "name": "Crush Cleavage", + "target": "cleavage_crush" + }, + { + "name": "Drop Cleavage", + "target": "cleavage_drop" + }, + { + "name": "Absorb Cleavage", + "target": "cleavage_absorb" + }, + { + "name": "Breast Crush", + "target": "breast_crush" + }, + { + "name": "Breast Vore", + "target": "breast_vore" + }, + { + "name": "Digest", + "target": "digest_breast" + }, + { + "name": "Milk Breasts", + "target": "breast_milk" + } + ] + }, + "vagina": { + "name": "Slit", + "buttons": [ + { + "name": "Unbirth", + "target": "unbirth" + }, + { + "name": "Digest", + "target": "digest_unbirth" + }, + { + "name": "Finger Slit", + "target": "slit_toy" + } + ] + }, + "dick": { + "name": "Cock", + "buttons": [ + { + "name": "Cockslap", + "target": "cockslap" + }, + { + "name": "Cock Vore", + "target": "cock_vore" + }, + { + "name": "Digest", + "target": "digest_cock" + }, + { + "name": "Ball Smother", + "target": "ball_smother" + }, + { + "name": "Stuff Sheath", + "target": "sheath_stuff" + }, + { + "name": "Squeeze Sheath", + "target": "sheath_toy" + }, + { + "name": "Clench Sheath", + "target": "sheath_clench" + }, + { + "name": "Absorb Sheath", + "target": "sheath_absorb" + }, + { + "name": "Stuff Foreskin", + "target": "foreskin_stuff" + }, + { + "name": "Squeeze Foreskin", + "target": "foreskin_toy" + }, + { + "name": "Clench Foreskin", + "target": "foreskin_clench" + }, + { + "name": "Absorb Foreskin", + "target": "foreskin_absorb" + } + ] + }, + "souls": { + "name": "Souls", + "buttons": [ + { + "name": "Soul Vore", + "target": "soul_vore" + }, + { + "name": "Digest", + "target": "digest_soul" + }, + { "name": "Paws", - "buttons": [ - { - "name": "Stomp", - "target": "stomp" - }, - { - "name": "Grab", - "target": "foot_crush" - }, - { - "name": "Flex Toes", - "target": "flex_toes" - }, - { - "name": "Absorb", - "target": "paw_vore" - }, - { - "name": "Digest", - "target": "digest_paws" - } - ] - }, - "tails": { - "name": "Tails", - "buttons": [ - { - "name": "Tail Slap", - "target": "tail_slap" - }, - { - "name": "Tail Vore", - "target": "tail_vore_only" - }, - { - "name": "Tail Vore (1)", - "target": "tail_vore_one" - }, - { - "name": "Tail Vore (some)", - "target": "tail_vore_some" - }, - { - "name": "Tail Vore (all!)", - "target": "tail_vore_all" - }, - { - "name": "Digest", - "target": "digest_tail" - } - ] - }, - "breasts": { - "name": "Breasts", - "buttons": [ - { - "name": "Stuff Cleavage", - "target": "cleavage_stuff" - }, - { - "name": "Squeeze Cleavage", - "target": "breast_toy" - }, - { - "name": "Crush Cleavage", - "target": "cleavage_crush" - }, - { - "name": "Drop Cleavage", - "target": "cleavage_drop" - }, - { - "name": "Absorb Cleavage", - "target": "cleavage_absorb" - }, - { - "name": "Breast Crush", - "target": "breast_crush" - }, - { - "name": "Breast Vore", - "target": "breast_vore" - }, - { - "name": "Digest", - "target": "digest_breast" - }, - { - "name": "Milk Breasts", - "target": "breast_milk" - } - ] - }, - "vagina": { - "name": "Slit", - "buttons": [ - { - "name": "Unbirth", - "target": "unbirth" - }, - { - "name": "Digest", - "target": "digest_unbirth" - }, - { - "name": "Finger Slit", - "target": "slit_toy" - } - ] - }, - "dick": { - "name": "Cock", - "buttons": [ - { - "name": "Cockslap", - "target": "cockslap" - }, - { - "name": "Cock Vore", - "target": "cock_vore" - }, - { - "name": "Digest", - "target": "digest_cock" - }, - { - "name": "Ball Smother", - "target": "ball_smother" - }, - { - "name": "Stuff Sheath", - "target": "sheath_stuff" - }, - { - "name": "Squeeze Sheath", - "target": "sheath_toy" - }, - { - "name": "Clench Sheath", - "target": "sheath_clench" - }, - { - "name": "Absorb Sheath", - "target": "sheath_absorb" - }, - { - "name": "Stuff Foreskin", - "target": "foreskin_stuff" - }, - { - "name": "Squeeze Foreskin", - "target": "foreskin_toy" - }, - { - "name": "Clench Foreskin", - "target": "foreskin_clench" - }, - { - "name": "Absorb Foreskin", - "target": "foreskin_absorb" - } - ] - }, - "souls": { - "name": "Souls", - "buttons": [ - { - "name": "Soul Vore", - "target": "soul_vore" - }, - { - "name": "Digest", - "target": "digest_soul" - }, - { - "name": "Paws", - "target": "soul_absorb_paw" - } - ] - }, - "shoes": { - "name": "Footwear", - "buttons": [ - { - "name": "Put On Shoes", - "target": "wear_shoes" - }, - { - "name": "Take Off Shoes", - "target": "remove_shoes" - }, - { - "name": "Put On Socks", - "target": "wear_socks" - }, - { - "name": "Take Off Socks", - "target": "remove_socks" - }, - { - "name": "Stuff Shoes", - "target": "stuff_shoes" - }, - { - "name": "Stuff Socks", - "target": "stuff_socks" - }, - { - "name": "Dump Shoes", - "target": "dump_shoes" - }, - { - "name": "Dump Socks", - "target": "dump_socks" - } - ] - }, - "waste": { - "name": "Waste", - "buttons": [ - { - "name": "Belch", - "target": "belch" - }, - { - "name": "Fart", - "target": "fart" - }, - { - "name": "Piss", - "target": "piss" - }, - { - "name": "Bladder Vore", - "target": "bladder_vore" - }, - { - "name": "Digest", - "target": "digest_bladder" - }, - { - "name": "Scat", - "target": "scat" - } - ] - }, - "goo": { - "name": "Goo", - "buttons": [ - { - "name": "Solidify", - "target": "solidify" - }, - { - "name": "Melt", - "target": "melt" - }, - { - "name": "Flood", - "target": "flood" - }, - { - "name": "Push to Stomach", - "target": "goo_stomach_push" - }, - { - "name": "Pull from Stomach", - "target": "goo_stomach_pull" - }, - { - "name": "Push to Bowels", - "target": "goo_bowels_push" - }, - { - "name": "Pull from Bowels", - "target": "goo_bowels_pull" - }, - { - "name": "Push to Womb", - "target": "goo_womb_push" - }, - { - "name": "Pull from Womb", - "target": "goo_womb_pull" - }, - { - "name": "Push to Balls", - "target": "goo_balls_push" - }, - { - "name": "Pull from Balls", - "target": "goo_balls_pull" - }, - { - "name": "Push to Breasts", - "target": "goo_breasts_push" - }, - { - "name": "Pull from Breasts", - "target": "goo_breasts_pull" - }, - { - "name": "Push to Tails", - "target": "goo_tail_push" - }, - { - "name": "Pull from Tails", - "target": "goo_tail_pull" - }, - { - "name": "Push to Paws", - "target": "goo_paws_push" - }, - { - "name": "Pull from Paws", - "target": "goo_paws_pull" - }, - { - "name": "Digest", - "target": "digest_goo" - } - ] - }, - "misc": { - "name": "Misc", - "buttons": [ - { - "name": "Stuff Pouch", - "target": "pouch_stuff" - }, - { - "name": "Rub Pouch", - "target": "pouch_rub" - }, - { - "name": "Eat From Pouch", - "target": "pouch_eat" - }, - { - "name": "Absorb Pouch", - "target": "pouch_absorb" - }, - { - "name": "Flap Wings", - "target": "wings_flap" - }, - { - "name": "Wing Vore", - "target": "wings_vore" - }, - { - "name": "Digest Wings", - "target": "digest_wings" - } - ] - }, - "breath": { - "name": "Breath", - "buttons": [ - { - "name": "Line Shape", - "target": "breath_line" - }, - { - "name": "Cone Shape", - "target": "breath_cone" - }, - { - "name": "Fire", - "target": "breath_fire" - }, - { - "name": "Ice", - "target": "breath_ice" - }, - { - "name": "Electric", - "target": "breath_electric" - }, - { - "name": "Smoke", - "target": "breath_smoke" - }, - { - "name": "Radiation", - "target": "breath_radiation" - }, - { - "name": "Foul", - "target": "breath_foul" - } - ] - }, - "magic": { - "name": "Magic", - "buttons": [ - { - "name": "Shrink", - "target": "magic_shrink" - }, - { - "name": "Fast Digestion", - "target": "magic_fast_digestion" - }, - { - "name": "Pause Digestion", - "target": "magic_pause_digestion" - }, - { - "name": "Arousal", - "target": "magic_arousal" - }, - { - "name": "Summon Cum", - "target": "magic_fill_sexual" - } - ] - }, - "options": { - "name": "Options", - "type": "options", - "buttons": [ - { - "name": "Arousal On", - "target": "toggle_arousal", - "default": true - }, - { - "name": "Status: Standing", - "target": "toggle_auto", - "default": true - }, - { - "name": "Numbers: Words", - "target": "toggle_numbers", - "default": true - }, - { - "name": "Units: Metric", - "target": "toggle_units", - "default": true - }, - { - "name": "Verbose Text", - "target": "toggle_verbose", - "default": true - }, - { - "name": "Toggle Dark Mode", - "target": "toggleDarkMode", - "default": true - }, - { - "name": "Text Stays", - "target": "toggleTextFade", - "default": true - }, - { - "name": "Debug Log", - "target": "debugLog", - "default": true - } - ] - } + "target": "soul_absorb_paw" + } + ] + }, + "shoes": { + "name": "Footwear", + "buttons": [ + { + "name": "Put On Shoes", + "target": "wear_shoes" + }, + { + "name": "Take Off Shoes", + "target": "remove_shoes" + }, + { + "name": "Put On Socks", + "target": "wear_socks" + }, + { + "name": "Take Off Socks", + "target": "remove_socks" + }, + { + "name": "Stuff Shoes", + "target": "stuff_shoes" + }, + { + "name": "Stuff Socks", + "target": "stuff_socks" + }, + { + "name": "Dump Shoes", + "target": "dump_shoes" + }, + { + "name": "Dump Socks", + "target": "dump_socks" + } + ] + }, + "waste": { + "name": "Waste", + "buttons": [ + { + "name": "Belch", + "target": "belch" + }, + { + "name": "Fart", + "target": "fart" + }, + { + "name": "Piss", + "target": "piss" + }, + { + "name": "Bladder Vore", + "target": "bladder_vore" + }, + { + "name": "Digest", + "target": "digest_bladder" + }, + { + "name": "Scat", + "target": "scat" + } + ] + }, + "goo": { + "name": "Goo", + "buttons": [ + { + "name": "Solidify", + "target": "solidify" + }, + { + "name": "Melt", + "target": "melt" + }, + { + "name": "Flood", + "target": "flood" + }, + { + "name": "Push to Stomach", + "target": "goo_stomach_push" + }, + { + "name": "Pull from Stomach", + "target": "goo_stomach_pull" + }, + { + "name": "Push to Bowels", + "target": "goo_bowels_push" + }, + { + "name": "Pull from Bowels", + "target": "goo_bowels_pull" + }, + { + "name": "Push to Womb", + "target": "goo_womb_push" + }, + { + "name": "Pull from Womb", + "target": "goo_womb_pull" + }, + { + "name": "Push to Balls", + "target": "goo_balls_push" + }, + { + "name": "Pull from Balls", + "target": "goo_balls_pull" + }, + { + "name": "Push to Breasts", + "target": "goo_breasts_push" + }, + { + "name": "Pull from Breasts", + "target": "goo_breasts_pull" + }, + { + "name": "Push to Tails", + "target": "goo_tail_push" + }, + { + "name": "Pull from Tails", + "target": "goo_tail_pull" + }, + { + "name": "Push to Paws", + "target": "goo_paws_push" + }, + { + "name": "Pull from Paws", + "target": "goo_paws_pull" + }, + { + "name": "Digest", + "target": "digest_goo" + } + ] + }, + "misc": { + "name": "Misc", + "buttons": [ + { + "name": "Stuff Pouch", + "target": "pouch_stuff" + }, + { + "name": "Rub Pouch", + "target": "pouch_rub" + }, + { + "name": "Eat From Pouch", + "target": "pouch_eat" + }, + { + "name": "Absorb Pouch", + "target": "pouch_absorb" + }, + { + "name": "Flap Wings", + "target": "wings_flap" + }, + { + "name": "Wing Vore", + "target": "wings_vore" + }, + { + "name": "Digest Wings", + "target": "digest_wings" + } + ] + }, + "breath": { + "name": "Breath", + "buttons": [ + { + "name": "Line Shape", + "target": "breath_line" + }, + { + "name": "Cone Shape", + "target": "breath_cone" + }, + { + "name": "Fire", + "target": "breath_fire" + }, + { + "name": "Ice", + "target": "breath_ice" + }, + { + "name": "Electric", + "target": "breath_electric" + }, + { + "name": "Smoke", + "target": "breath_smoke" + }, + { + "name": "Radiation", + "target": "breath_radiation" + }, + { + "name": "Foul", + "target": "breath_foul" + } + ] + }, + "magic": { + "name": "Magic", + "buttons": [ + { + "name": "Shrink", + "target": "magic_shrink" + }, + { + "name": "Fast Digestion", + "target": "magic_fast_digestion" + }, + { + "name": "Pause Digestion", + "target": "magic_pause_digestion" + }, + { + "name": "Arousal", + "target": "magic_arousal" + }, + { + "name": "Summon Cum", + "target": "magic_fill_sexual" + } + ] + }, + "options": { + "name": "Options", + "type": "options", + "buttons": [ + { + "name": "Arousal On", + "target": "toggle_arousal", + "default": true + }, + { + "name": "Status: Standing", + "target": "toggle_auto", + "default": true + }, + { + "name": "Numbers: Words", + "target": "toggle_numbers", + "default": true + }, + { + "name": "Units: Metric", + "target": "toggle_units", + "default": true + }, + { + "name": "Verbose Text", + "target": "toggle_verbose", + "default": true + }, + { + "name": "Toggle Dark Mode", + "target": "toggleDarkMode", + "default": true + }, + { + "name": "Text Stays", + "target": "toggleTextFade", + "default": true + }, + { + "name": "Debug Log", + "target": "debugLog", + "default": true + } + ] + } } @@ -628,270 +628,270 @@ options = [ "optional": false, "group": "main", "entries": - [ - { - "name": "Bio", - "id": "bio", - "type": "text", - "default": "Big stompy monster, innit" - } - ] + [ + { + "name": "Bio", + "id": "bio", + "type": "text", + "default": "Big stompy monster, innit" + } + ] }, { "name": "Body Details", "optional": false, "group": "main", "entries": - [ - { - "name": "Species", - "id": "species", - "type": "text", - "default": "crux" - }, - { - "name": "Foot type", - "id": "footType", - "type": "select", - "default": "paw", - "choices": - [ - { - "name": "Paws", - "value": "paw" - }, - { - "name": "Hooves", - "value": "hoof" - }, - { - "name": "Feet", - "value": "foot", - }, - { - "name": "Avian", - "value": "avian" - } - ] - }, - { - "name": "Mouth type", - "id": "jawType", - "type": "select", - "default": "jaw", - "choices": - [ - { - "name": "Jaws", - "value": "jaw" - }, - { - "name": "Beak", - "value": "beak" - } - ] - } - ] + [ + { + "name": "Species", + "id": "species", + "type": "text", + "default": "crux" + }, + { + "name": "Foot type", + "id": "footType", + "type": "select", + "default": "paw", + "choices": + [ + { + "name": "Paws", + "value": "paw" + }, + { + "name": "Hooves", + "value": "hoof" + }, + { + "name": "Feet", + "value": "foot", + }, + { + "name": "Avian", + "value": "avian" + } + ] + }, + { + "name": "Mouth type", + "id": "jawType", + "type": "select", + "default": "jaw", + "choices": + [ + { + "name": "Jaws", + "value": "jaw" + }, + { + "name": "Beak", + "value": "beak" + } + ] + } + ] }, { "name": "Gameplay", "optional": false, "group": "main", "entries": - [ - { - "type": "radio", - "id": "difficulty", - "default": "0", - "choices": - [ - { - "name": "Sandbox", - "value": "0", - "tooltip": "Grow how you want, when you want.", - }, - { - "name": "Stompvival", - "value": "1", - "tooltip": "Actions earn you growth points, which are used to grow bigger.", - } - ] - }, - { - "name": "Automatic Growth", - "id": "automaticGrowthEnabled", - "type": "subcategory", - "entries": - [ - { - "name": "Help", - "id": "", - "type": "label", - "tooltip": "When checked, you will automaically grow by ingesting/absorbing mass." - }, - { - "name": "Prey growth factor", - "id": "basePreyGrowthFactor", - "type": "float", - "default": "80", - "unit": "percentage", - "tooltip": "How much of what you eat gets automatically added to your body. Setting this to 0% disables it. To add half of your prey mass to your own, set to 50%." - }, - { - "name": "Scale growth with size", - "id": "growthScaleWithSize", - "type": "checkbox", - "tooltip": "If you're ten times bigger than normal, you gain ten times as much mass when digesting prey" - } - ] - }, - { - "name": "Biomes", - "id": "biomes", - "type": "subcategory", - "entries": - [ - { - "name": "Walk to other locations", - "id": "changingBiomes", - "type": "checkbox", - "tooltip": "When checked, walking will sometimes change your location." - }, - { - "name":"Default Biome", - "type": "select", - "id": "defaultBiome", - "default": "City", - "tooltip": "Where you start, if you have \"Walk to other locations\" disabled, you will be stuck here.", - "choices": - [ - { - "name": "City", - "value": "City", - "tooltip": "The normal city enviroment you are used to.", - }, - { - "name": "Downtown", - "value": "Downtown", - "tooltip": "A dense city center.", - }, - { - "name": "Suburb", - "value": "Suburb", - "tooltip": "The perfect place to start a family, or eat one.", - }, - { - "name": "Rural", - "value": "Rural", - "tooltip": "Is that a cow?", - } + [ + { + "type": "radio", + "id": "difficulty", + "default": "0", + "choices": + [ + { + "name": "Sandbox", + "value": "0", + "tooltip": "Grow how you want, when you want.", + }, + { + "name": "Stompvival", + "value": "1", + "tooltip": "Actions earn you growth points, which are used to grow bigger.", + } + ] + }, + { + "name": "Automatic Growth", + "id": "automaticGrowthEnabled", + "type": "subcategory", + "entries": + [ + { + "name": "Help", + "id": "", + "type": "label", + "tooltip": "When checked, you will automaically grow by ingesting/absorbing mass." + }, + { + "name": "Prey growth factor", + "id": "basePreyGrowthFactor", + "type": "float", + "default": "80", + "unit": "percentage", + "tooltip": "How much of what you eat gets automatically added to your body. Setting this to 0% disables it. To add half of your prey mass to your own, set to 50%." + }, + { + "name": "Scale growth with size", + "id": "growthScaleWithSize", + "type": "checkbox", + "tooltip": "If you're ten times bigger than normal, you gain ten times as much mass when digesting prey" + } + ] + }, + { + "name": "Biomes", + "id": "biomes", + "type": "subcategory", + "entries": + [ + { + "name": "Walk to other locations", + "id": "changingBiomes", + "type": "checkbox", + "tooltip": "When checked, walking will sometimes change your location." + }, + { + "name": "Default Biome", + "type": "select", + "id": "defaultBiome", + "default": "City", + "tooltip": "Where you start, if you have \"Walk to other locations\" disabled, you will be stuck here.", + "choices": + [ + { + "name": "City", + "value": "City", + "tooltip": "The normal city enviroment you are used to.", + }, + { + "name": "Downtown", + "value": "Downtown", + "tooltip": "A dense city center.", + }, + { + "name": "Suburb", + "value": "Suburb", + "tooltip": "The perfect place to start a family, or eat one.", + }, + { + "name": "Rural", + "value": "Rural", + "tooltip": "Is that a cow?", + } + ] + }, + { + "name": "Enabled biomes:", + "id": "", + "type": "label", + }, + { + "name": "City", + "id": "cityEnabled", + "type": "checkbox", + "default": true, + "tooltip": "The normal city enviroment you are used to.", + }, + { + "name": "Downtown", + "id": "downtownEnabled", + "type": "checkbox", + "default": true, + "tooltip": "A dense city center.", + }, + { + "name": "Suburb", + "id": "suburbEnabled", + "type": "checkbox", + "default": true, + "tooltip": "The perfect place to start a family, or eat one.", + }, + { + "name": "Rural", + "id": "ruralEnabled", + "type": "checkbox", + "default": true, + "tooltip": "Is that a cow?", + } ] - }, - { - "name": "Enabled biomes:", - "id": "", - "type": "label", - }, - { - "name": "City", - "id": "cityEnabled", - "type": "checkbox", - "default": true, - "tooltip": "The normal city enviroment you are used to.", - }, - { - "name": "Downtown", - "id": "downtownEnabled", - "type": "checkbox", - "default": true, - "tooltip": "A dense city center.", - }, - { - "name": "Suburb", - "id": "suburbEnabled", - "type": "checkbox", - "default": true, - "tooltip": "The perfect place to start a family, or eat one.", - }, - { - "name": "Rural", - "id": "ruralEnabled", - "type": "checkbox", - "default": true, - "tooltip": "Is that a cow?", - } - ] - }, - ] + }, + ] }, { "name": "Brutality", "optional": false, "group": "main", "entries": - [ - { - "type": "radio", - "id": "brutality", - "default": "1", - "choices": - [ - { - "name": "Non-fatal", - "value": "0", - "tooltip": "All actions are explicitly safe." - }, - { - "name": "Fatal", - "value": "1", - "warning": "Fatal actions are enabled", - "tooltip": "Actions can have fatal consequences, but don't go into detail." - }, - { - "name": "Gory", - "value": "2", - "warning": "Gory actions are enabled", - "tooltip": "Descriptions are violent, but not excessively so." - }, - { - "name": "Sadistic", - "value": "3", - "warning": "Brutal actions are enabled", - "tooltip": "Cronch." - }, - ] - } - ] + [ + { + "type": "radio", + "id": "brutality", + "default": "1", + "choices": + [ + { + "name": "Non-fatal", + "value": "0", + "tooltip": "All actions are explicitly safe." + }, + { + "name": "Fatal", + "value": "1", + "warning": "Fatal actions are enabled", + "tooltip": "Actions can have fatal consequences, but don't go into detail." + }, + { + "name": "Gory", + "value": "2", + "warning": "Gory actions are enabled", + "tooltip": "Descriptions are violent, but not excessively so." + }, + { + "name": "Sadistic", + "value": "3", + "warning": "Brutal actions are enabled", + "tooltip": "Cronch." + }, + ] + } + ] }, { "name": "Victims", "optional": false, "group": "main", "entries": - [ - { - "name": "Human prey", - "id": "victimsHuman", - "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", - "tooltip": "When checked, you can prey on military units like soldiers, tanks, helicopeter, up to destroying entire armies." - }, - { - "name": "Macros", - "id": "victimsMacros", - "type": "checkbox" - }, - { - "name": "Micros", - "id": "victimsMicros", - "type": "checkbox" - } - ] + [ + { + "name": "Human prey", + "id": "victimsHuman", + "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", + "tooltip": "When checked, you can prey on military units like soldiers, tanks, helicopeter, up to destroying entire armies." + }, + { + "name": "Macros", + "id": "victimsMacros", + "type": "checkbox" + }, + { + "name": "Micros", + "id": "victimsMicros", + "type": "checkbox" + } + ] }, { "name": "Oral Vore", @@ -902,42 +902,42 @@ options = [ "feed", "chew" ], "entries": - [ - { - "name": "Automatic Digestion", - "id": "oralDigestAuto", - "type": "subcategory", - "default": true, - "entries": - [ - { - "name": "Digestion time", - "id": "oralDigestTime", - "type": "float", - "default": "15" - } - ] - }, - { - "name": "Manual digestion", - "id": "oralDigestManual", - "type": "checkbox", - "buttons": ["digest_stomach"] - }, - { - "name": "Same-size vore", - "id": "sameSizeOralVore", - "type": "checkbox", - "default": true - }, - { - "name": "Vomiting", - "id": "vomitEnabled", - "type": "checkbox", - "warning": "Vomiting is enabled", - "buttons": ["vomit"] - } - ] + [ + { + "name": "Automatic Digestion", + "id": "oralDigestAuto", + "type": "subcategory", + "default": true, + "entries": + [ + { + "name": "Digestion time", + "id": "oralDigestTime", + "type": "float", + "default": "15" + } + ] + }, + { + "name": "Manual digestion", + "id": "oralDigestManual", + "type": "checkbox", + "buttons": ["digest_stomach"] + }, + { + "name": "Same-size vore", + "id": "sameSizeOralVore", + "type": "checkbox", + "default": true + }, + { + "name": "Vomiting", + "id": "vomitEnabled", + "type": "checkbox", + "warning": "Vomiting is enabled", + "buttons": ["vomit"] + } + ] }, { "name": "Anal Vore", @@ -946,55 +946,55 @@ options = [ "group": "alt-vore", "buttons": ["anal_vore"], "entries": - [ - { - "name": "Anus diameter", - "id": "baseAnalVoreDiameter", - "type": "float", - "default": "0.1", - "unit": "length" - }, - { - "name": "Automatic Digestion", - "id": "analDigestAuto", - "type": "subcategory", - "default": true, - "entries": - [ - { - "name": "Digestion time", - "id": "analDigestTime", - "type": "float", - "default": "15" - } - ] - }, - { - "name": "Anal autogrowth factor", - "id": "assGrowthFactor", - "type": "float", - "default": "1", - "unit": "percentage", - "tooltip": "How much this part grows during part specific digestion. This is relative to overall growth, 100%:all mass goes to this part 20%:20% part growth-80% overall growth." - }, - { - "name": "Manual digestion", - "id": "analDigestManual", - "type": "checkbox", - "buttons": ["digest_anal"] - }, - { - "name": "Same-size vore", - "id": "sameSizeAnalVore", - "type": "checkbox", - "default": true - }, - { - "name": "Anal vore goes to stomach", - "id": "analVoreToStomach", - "type": "checkbox" - } - ] + [ + { + "name": "Anus diameter", + "id": "baseAnalVoreDiameter", + "type": "float", + "default": "0.1", + "unit": "length" + }, + { + "name": "Automatic Digestion", + "id": "analDigestAuto", + "type": "subcategory", + "default": true, + "entries": + [ + { + "name": "Digestion time", + "id": "analDigestTime", + "type": "float", + "default": "15" + } + ] + }, + { + "name": "Anal autogrowth factor", + "id": "assGrowthFactor", + "type": "float", + "default": "1", + "unit": "percentage", + "tooltip": "How much this part grows during part specific digestion. This is relative to overall growth, 100%:all mass goes to this part 20%:20% part growth-80% overall growth." + }, + { + "name": "Manual digestion", + "id": "analDigestManual", + "type": "checkbox", + "buttons": ["digest_anal"] + }, + { + "name": "Same-size vore", + "id": "sameSizeAnalVore", + "type": "checkbox", + "default": true + }, + { + "name": "Anal vore goes to stomach", + "id": "analVoreToStomach", + "type": "checkbox" + } + ] }, { "name": "Footwear", @@ -1003,76 +1003,76 @@ options = [ "optional": true, "panels": ["shoes"], "entries": - [ - { - "name": "Socks", - "id": "footSockEnabled", - "type": "subcategory", - "buttons": ["remove_socks", "wear_socks", "stuff_socks", "dump_socks"], - "entries": - [ - { - "name": "Sock type", - "id": "footSock", - "type": "select", - "default": "sock", - "choices": + [ + { + "name": "Socks", + "id": "footSockEnabled", + "type": "subcategory", + "buttons": ["remove_socks", "wear_socks", "stuff_socks", "dump_socks"], + "entries": [ { - "name": "Socks", - "value": "sock" - }, - { - "name": "Stockings", - "value": "stocking" + "name": "Sock type", + "id": "footSock", + "type": "select", + "default": "sock", + "choices": + [ + { + "name": "Socks", + "value": "sock" + }, + { + "name": "Stockings", + "value": "stocking" + } + ] } ] - } - ] - }, - { - "name": "Shoes", - "id": "footShoeEnabled", - "type": "subcategory", - "buttons": ["remove_shoes", "wear_shoes", "stuff_shoes", "dump_shoes"], - "entries": - [ - { - "name": "Shoe type", - "id": "footShoe", - "type": "select", - "default": "shoe", - "choices": + }, + { + "name": "Shoes", + "id": "footShoeEnabled", + "type": "subcategory", + "buttons": ["remove_shoes", "wear_shoes", "stuff_shoes", "dump_shoes"], + "entries": [ { - "name": "Shoes", - "value": "shoe" - }, - { - "name": "Boots", - "value": "boot" - }, - { - "name": "Trainers", - "value": "trainer" - }, - { - "name": "Sandals", - "value": "sandal" - }, - { - "name": "High Heels", - "value": "heel", - }, - { - "name": "Crocs", - "value": "croc" + "name": "Shoe type", + "id": "footShoe", + "type": "select", + "default": "shoe", + "choices": + [ + { + "name": "Shoes", + "value": "shoe" + }, + { + "name": "Boots", + "value": "boot" + }, + { + "name": "Trainers", + "value": "trainer" + }, + { + "name": "Sandals", + "value": "sandal" + }, + { + "name": "High Heels", + "value": "heel", + }, + { + "name": "Crocs", + "value": "croc" + } + ] } ] - } - ] - } - ] + } + ] }, { "name": "Arousal", @@ -1081,28 +1081,28 @@ options = [ "optional": true, "warning": "Arousal is enabled", "entries": - [ - { - "name": "Help", - "id": "", - "type": "label", - "tooltip": "Most actions increase arousal, as does digestion and being overfilled.\nEdging occurs when you're near orgasm, and increases the total volume of the orgasm." - }, - { - "name": "Arousal multiplier", - "id": "arousalFactor", - "type": "float", - "default": "1", - "tooltip": "How quickly arousal and orgasm builds." - }, - { - "name": "Edge multiplier", - "id": "edgeFactor", - "type": "float", - "default": "1", - "tooltip": "How quickly edge builds up." - } - ] + [ + { + "name": "Help", + "id": "", + "type": "label", + "tooltip": "Most actions increase arousal, as does digestion and being overfilled.\nEdging occurs when you're near orgasm, and increases the total volume of the orgasm." + }, + { + "name": "Arousal multiplier", + "id": "arousalFactor", + "type": "float", + "default": "1", + "tooltip": "How quickly arousal and orgasm builds." + }, + { + "name": "Edge multiplier", + "id": "edgeFactor", + "type": "float", + "default": "1", + "tooltip": "How quickly edge builds up." + } + ] }, { "name": "Tail", @@ -1113,88 +1113,88 @@ options = [ "panels": ["tails"], "buttons": ["tail_slap"], "entries": - [ - { - "name": "Number of tails", - "id": "tailCount", - "type": "int", - "default": "1" - }, - { - "name": "Tail description", - "id": "tailType", - "type": "text", - "default": "fluffy" - }, - { - "name": "Tail length", - "id": "baseTailLength", - "type": "float", - "default": "1", - "unit": "length" - }, - { - "name": "Tail diameter", - "id": "baseTailDiameter", - "type": "float", - "default": "0.3", - "unit": "length" - }, - { - "name": "Tail Vore", - "id": "tailMaw", - "type": "subcategory", - "entries": - [ - { - "name": "Tail stretchiness", - "id": "tailStretchiness", - "type": "float", - "default": "3" - }, - { - "name": "Tail autogrowth factor", - "id": "tailGrowthFactor", - "type": "float", - "default": "1", - "unit": "percentage", - "tooltip": "How much this part grows during part specific digestion. This is relative to overall growth, 100%:all mass goes to this part 20%:20% part growth-80% overall growth." - }, - { - "name": "Automatic Digestion", - "id": "tailDigestAuto", - "type": "subcategory", - "default": true, - "entries": + [ + { + "name": "Number of tails", + "id": "tailCount", + "type": "int", + "default": "1" + }, + { + "name": "Tail description", + "id": "tailType", + "type": "text", + "default": "fluffy" + }, + { + "name": "Tail length", + "id": "baseTailLength", + "type": "float", + "default": "1", + "unit": "length" + }, + { + "name": "Tail diameter", + "id": "baseTailDiameter", + "type": "float", + "default": "0.3", + "unit": "length" + }, + { + "name": "Tail Vore", + "id": "tailMaw", + "type": "subcategory", + "entries": [ { - "name": "Digestion time", - "id": "tailDigestTime", + "name": "Tail stretchiness", + "id": "tailStretchiness", "type": "float", - "default": "15" + "default": "3" + }, + { + "name": "Tail autogrowth factor", + "id": "tailGrowthFactor", + "type": "float", + "default": "1", + "unit": "percentage", + "tooltip": "How much this part grows during part specific digestion. This is relative to overall growth, 100%:all mass goes to this part 20%:20% part growth-80% overall growth." + }, + { + "name": "Automatic Digestion", + "id": "tailDigestAuto", + "type": "subcategory", + "default": true, + "entries": + [ + { + "name": "Digestion time", + "id": "tailDigestTime", + "type": "float", + "default": "15" + } + ] + }, + { + "name": "Manual digestion", + "id": "tailDigestManual", + "type": "checkbox", + "buttons": ["digest_tail"] + }, + { + "name": "Same-size vore", + "id": "sameSizeTailVore", + "type": "checkbox", + "default": true + }, + { + "name": "Tail vore goes to stomach", + "id": "tailVoreToStomach", + "type": "checkbox" } ] - }, - { - "name": "Manual digestion", - "id": "tailDigestManual", - "type": "checkbox", - "buttons": ["digest_tail"] - }, - { - "name": "Same-size vore", - "id": "sameSizeTailVore", - "type": "checkbox", - "default": true - }, - { - "name": "Tail vore goes to stomach", - "id": "tailVoreToStomach", - "type": "checkbox" - } - ] - } - ] + } + ] }, { "name": "Pouch", @@ -1204,14 +1204,14 @@ options = [ "panels": ["misc"], "buttons": ["pouch_stuff", "pouch_rub"], "entries": - [ - { - "name": "Absorption", - "id": "pouchAbsorption", - "type": "checkbox", - "buttons": ["pouch_absorb"] - } - ] + [ + { + "name": "Absorption", + "id": "pouchAbsorption", + "type": "checkbox", + "buttons": ["pouch_absorb"] + } + ] }, { "name": "Male Genitals", @@ -1223,171 +1223,171 @@ options = [ "panels": ["dick"], "buttons": ["cockslap", "ball_smother"], "entries": - [ - { - "name": "Cock length", - "id": "baseDickLength", - "type": "float", - "default": "0.3", - "unit": "length" - }, - { - "name": "Cock diameter", - "id": "baseDickDiameter", - "type": "float", - "default": "0.08", - "unit": "length" - }, - { - "name": "Cock description", - "id": "dickType", - "type": "text", - "default": "canine" - }, - { - "name": "Ball diameter", - "id": "baseBallDiameter", - "type": "float", - "default": "0.05", - "unit": "length" - }, - { - "name": "Orgasm size", - "id": "baseCumVolume", - "type": "float", - "default": "0.1", - "unit": "volume" - }, - { - "name": "Passive cum production", - "id": "baseCumProduction", - "type": "float", - "default": "1", - "unit": "percentage", - "tooltip": "How much you fill up every second" - }, - { - "name": "Cum storage factor", - "id": "cumStorageScale", - "type": "float", - "default": "1" - }, - { - "name": "Cock autogrowth factor", - "id": "cockGrowthFactor", - "type": "float", - "default": "1", - "unit": "percentage", - "tooltip": "How much this part grows during part specific digestion. This is relative to overall growth, 100%:all mass goes to this part 20%:20% part growth-80% overall growth." - }, - { - "name": "Balls autogrowth factor", - "id": "ballGrowthFactor", - "type": "float", - "default": "1", - "unit": "percentage", - "tooltip": "How much this part grows during part specific digestion. This is relative to overall growth, 100%:all mass goes to this part 20%:20% part growth-80% overall growth." - }, - { - "name": "Cock Vore", - "id": "cockVoreEnabled", - "type": "subcategory", - "buttons": ["cock_vore"], - "entries": - [ - { - "name": "Cock stretchiness", - "id": "dickStretchiness", - "type": "float", - "default": "5" - }, - { - "name": "Cum digestion factor", - "id": "baseCumDigestFactor", - "type": "float", - "default": "1" - }, - { - "name": "Automatic Digestion", - "id": "cockDigestAuto", - "type": "subcategory", - "default": true, - "entries": + [ + { + "name": "Cock length", + "id": "baseDickLength", + "type": "float", + "default": "0.3", + "unit": "length" + }, + { + "name": "Cock diameter", + "id": "baseDickDiameter", + "type": "float", + "default": "0.08", + "unit": "length" + }, + { + "name": "Cock description", + "id": "dickType", + "type": "text", + "default": "canine" + }, + { + "name": "Ball diameter", + "id": "baseBallDiameter", + "type": "float", + "default": "0.05", + "unit": "length" + }, + { + "name": "Orgasm size", + "id": "baseCumVolume", + "type": "float", + "default": "0.1", + "unit": "volume" + }, + { + "name": "Passive cum production", + "id": "baseCumProduction", + "type": "float", + "default": "1", + "unit": "percentage", + "tooltip": "How much you fill up every second" + }, + { + "name": "Cum storage factor", + "id": "cumStorageScale", + "type": "float", + "default": "1" + }, + { + "name": "Cock autogrowth factor", + "id": "cockGrowthFactor", + "type": "float", + "default": "1", + "unit": "percentage", + "tooltip": "How much this part grows during part specific digestion. This is relative to overall growth, 100%:all mass goes to this part 20%:20% part growth-80% overall growth." + }, + { + "name": "Balls autogrowth factor", + "id": "ballGrowthFactor", + "type": "float", + "default": "1", + "unit": "percentage", + "tooltip": "How much this part grows during part specific digestion. This is relative to overall growth, 100%:all mass goes to this part 20%:20% part growth-80% overall growth." + }, + { + "name": "Cock Vore", + "id": "cockVoreEnabled", + "type": "subcategory", + "buttons": ["cock_vore"], + "entries": [ { - "name": "Digestion time", - "id": "cockDigestTime", + "name": "Cock stretchiness", + "id": "dickStretchiness", "type": "float", - "default": "15" + "default": "5" + }, + { + "name": "Cum digestion factor", + "id": "baseCumDigestFactor", + "type": "float", + "default": "1" + }, + { + "name": "Automatic Digestion", + "id": "cockDigestAuto", + "type": "subcategory", + "default": true, + "entries": + [ + { + "name": "Digestion time", + "id": "cockDigestTime", + "type": "float", + "default": "15" + } + ] + }, + { + "name": "Manual digestion", + "id": "cockDigestManual", + "type": "checkbox", + "buttons": ["digest_cock"] + }, + { + "name": "Same-size vore", + "id": "sameSizeCockVore", + "type": "checkbox", + "default": true + }, + { + "name": "Scale cum with size", + "id": "cumScaleWithSize", + "type": "checkbox", + "tooltip": "If you're ten times bigger than normal, you produce ten times as much cum when digesting prey" } ] - }, - { - "name": "Manual digestion", - "id": "cockDigestManual", - "type": "checkbox", - "buttons": ["digest_cock"] - }, - { - "name": "Same-size vore", - "id": "sameSizeCockVore", - "type": "checkbox", - "default": true - }, - { - "name": "Scale cum with size", - "id": "cumScaleWithSize", - "type": "checkbox", - "tooltip": "If you're ten times bigger than normal, you produce ten times as much cum when digesting prey" - } - ] - }, - { - "name": "Sheath", - "id": "hasSheath", - "type": "subcategory", - "buttons": ["sheath_stuff", "sheath_toy", "sheath_clench"], - "entries": - [ - { - "name": "Absorption", - "id": "sheathAbsorptionEnabled", - "type": "checkbox", - "buttons": ["sheath_absorb"] - } - ] - }, - { - "name": "Foreskin", - "id": "hasForeskin", - "type": "subcategory", - "buttons": ["foreskin_stuff", "foreskin_toy", "foreskin_clench"], - "entries": - [ - { - "name": "Absorption", - "id": "foreskinAbsorptionEnabled", - "type": "checkbox", - "buttons": ["foreskin_absorb"] - } - ] - }, - { - "name": "Musk", - "id": "maleMuskEnabled", - "type": "subcategory", - "parts": ["musk"], - "entries": - [ - { - "name": "Musk factor", - "id": "baseMaleMuskArea", - "type": "float", - "default": "0.5" - } - ] - } - ] + }, + { + "name": "Sheath", + "id": "hasSheath", + "type": "subcategory", + "buttons": ["sheath_stuff", "sheath_toy", "sheath_clench"], + "entries": + [ + { + "name": "Absorption", + "id": "sheathAbsorptionEnabled", + "type": "checkbox", + "buttons": ["sheath_absorb"] + } + ] + }, + { + "name": "Foreskin", + "id": "hasForeskin", + "type": "subcategory", + "buttons": ["foreskin_stuff", "foreskin_toy", "foreskin_clench"], + "entries": + [ + { + "name": "Absorption", + "id": "foreskinAbsorptionEnabled", + "type": "checkbox", + "buttons": ["foreskin_absorb"] + } + ] + }, + { + "name": "Musk", + "id": "maleMuskEnabled", + "type": "subcategory", + "parts": ["musk"], + "entries": + [ + { + "name": "Musk factor", + "id": "baseMaleMuskArea", + "type": "float", + "default": "0.5" + } + ] + } + ] }, { "name": "Female Genitals", @@ -1399,134 +1399,134 @@ options = [ "panels": ["vagina"], "buttons": ["slit_toy"], "entries": - [ - { - "name": "Slit length", - "id": "baseVaginaLength", - "type": "float", - "default": "0.1", - "unit": "length" - }, - { - "name": "Slit width", - "id": "baseVaginaWidth", - "type": "float", - "default": "0.05", - "unit": "length" - }, - { - "name": "Womb volume", - "id": "baseWombVolume", - "type": "float", - "default": "0.1", - "unit": "volume" - }, - { - "name": "Orgasm size", - "id": "baseFemcumVolume", - "type": "float", - "default": "0.1", - }, - { - "name": "Passive femcum production", - "id": "baseFemcumProduction", - "type": "float", - "default": "1", - "unit": "percentage", - "tooltip": "How much you fill up every second" - }, - { - "name": "Femcum storage factor", - "id": "femcumStorageScale", - "type": "float", - "default": "1" - }, - { - "name": "Unbirth", - "id": "unbirthEnabled", - "type": "subcategory", - "buttons": ["unbirth"], - "entries": - [ - { - "name": "Slit stretchiness", - "id": "vaginaStretchiness", - "type": "float", - "default": "5" - }, - { - "name": "Femcum digestion factor", - "id": "baseFemcumDigestFactor", - "type": "float", - "default": "1" - }, - { - "name": "Vagina autogrowth factor", - "id": "vaginaGrowthFactor", - "type": "float", - "default": "1", - "unit": "percentage", - "tooltip": "How much this part grows during part specific digestion. This is relative to overall growth, 100%:all mass goes to this part 20%:20% part growth-80% overall growth." - }, - { - "name": "Womb autogrowth factor", - "id": "wombGrowthFactor", - "type": "float", - "default": "1", - "unit": "percentage", - "tooltip": "How much this part grows during part specific digestion. This is relative to overall growth, 100%:all mass goes to this part 20%:20% part growth-80% overall growth." - }, - { - "name": "Automatic Digestion", - "id": "unbirthDigestAuto", - "type": "subcategory", - "default": true, - "entries": + [ + { + "name": "Slit length", + "id": "baseVaginaLength", + "type": "float", + "default": "0.1", + "unit": "length" + }, + { + "name": "Slit width", + "id": "baseVaginaWidth", + "type": "float", + "default": "0.05", + "unit": "length" + }, + { + "name": "Womb volume", + "id": "baseWombVolume", + "type": "float", + "default": "0.1", + "unit": "volume" + }, + { + "name": "Orgasm size", + "id": "baseFemcumVolume", + "type": "float", + "default": "0.1", + }, + { + "name": "Passive femcum production", + "id": "baseFemcumProduction", + "type": "float", + "default": "1", + "unit": "percentage", + "tooltip": "How much you fill up every second" + }, + { + "name": "Femcum storage factor", + "id": "femcumStorageScale", + "type": "float", + "default": "1" + }, + { + "name": "Unbirth", + "id": "unbirthEnabled", + "type": "subcategory", + "buttons": ["unbirth"], + "entries": + [ + { + "name": "Slit stretchiness", + "id": "vaginaStretchiness", + "type": "float", + "default": "5" + }, + { + "name": "Femcum digestion factor", + "id": "baseFemcumDigestFactor", + "type": "float", + "default": "1" + }, + { + "name": "Vagina autogrowth factor", + "id": "vaginaGrowthFactor", + "type": "float", + "default": "1", + "unit": "percentage", + "tooltip": "How much this part grows during part specific digestion. This is relative to overall growth, 100%:all mass goes to this part 20%:20% part growth-80% overall growth." + }, + { + "name": "Womb autogrowth factor", + "id": "wombGrowthFactor", + "type": "float", + "default": "1", + "unit": "percentage", + "tooltip": "How much this part grows during part specific digestion. This is relative to overall growth, 100%:all mass goes to this part 20%:20% part growth-80% overall growth." + }, + { + "name": "Automatic Digestion", + "id": "unbirthDigestAuto", + "type": "subcategory", + "default": true, + "entries": + [ + { + "name": "Digestion time", + "id": "unbirthDigestTime", + "type": "float", + "default": "15" + } + ] + }, + { + "name": "Manual digestion", + "id": "unbirthDigestManual", + "type": "checkbox", + "buttons": ["digest_unbirth"] + }, + { + "name": "Same-size vore", + "id": "sameSizeUnbirth", + "type": "checkbox", + "default": true + }, + { + "name": "Scale femcum with size", + "id": "femcumScaleWithSize", + "type": "checkbox", + "tooltip": "If you're ten times bigger than normal, you produce ten times as much femcum when digesting prey" + } + ] + }, + { + "name": "Musk", + "id": "femaleMuskEnabled", + "type": "subcategory", + "parts": ["musk"], + "entries": [ { - "name": "Digestion time", - "id": "unbirthDigestTime", + "name": "Musk factor", + "id": "baseFemaleMuskArea", "type": "float", - "default": "15" + "default": "0.5" } ] - }, - { - "name": "Manual digestion", - "id": "unbirthDigestManual", - "type": "checkbox", - "buttons": ["digest_unbirth"] - }, - { - "name": "Same-size vore", - "id": "sameSizeUnbirth", - "type": "checkbox", - "default": true - }, - { - "name": "Scale femcum with size", - "id": "femcumScaleWithSize", - "type": "checkbox", - "tooltip": "If you're ten times bigger than normal, you produce ten times as much femcum when digesting prey" - } - ] - }, - { - "name": "Musk", - "id": "femaleMuskEnabled", - "type": "subcategory", - "parts": ["musk"], - "entries": - [ - { - "name": "Musk factor", - "id": "baseFemaleMuskArea", - "type": "float", - "default": "0.5" - } - ] - } - ] + } + ] }, { "name": "Sexual Magic", @@ -1535,24 +1535,24 @@ options = [ "optional": true, "panels": ["magic"], "entries": - [ - { - "name": "Arousal", - "id": "magicArousal", - "type": "checkbox", - "buttons": ["magic_arousal"], - "default": true, - "tooltip": "Rapidly arouses the caster" - }, - { - "name": "Summon cum", - "id": "magicFillSexual", - "type": "checkbox", - "buttons": ["magic_fill_sexual"], - "default": true, - "tooltip": "Prepares the caster for quite the gush!" - } - ] + [ + { + "name": "Arousal", + "id": "magicArousal", + "type": "checkbox", + "buttons": ["magic_arousal"], + "default": true, + "tooltip": "Rapidly arouses the caster" + }, + { + "name": "Summon cum", + "id": "magicFillSexual", + "type": "checkbox", + "buttons": ["magic_fill_sexual"], + "default": true, + "tooltip": "Prepares the caster for quite the gush!" + } + ] }, { "name": "Breasts", @@ -1563,107 +1563,107 @@ options = [ "parts": ["breasts"], "buttons": ["breast_crush", "breast_toy", "cleavage_stuff", "cleavage_crush", "cleavage_drop", "cleavage_absorb"], "entries": - [ - { - "name": "Breast diameter", - "id": "baseBreastDiameter", - "type": "float", - "default": "0.1", - "unit": "length" - }, - { - "name": "Lactation", - "id": "lactationEnabled", - "type": "subcategory", - "stats": ["milk"], - "buttons": ["breast_milk"], - "warning": "Lactation is enabled", - "entries": - [ - { - "name": "Lactation scale", - "id": "lactationFactor", - "type": "float", - "default": "0.25" - }, - { - "name": "Passive milk production", - "id": "baseLactationProduction", - "type": "float", - "default": "0.1", - "unit": "percentage", - "tooltip": "How much you fill up every second" - }, - { - "name": "Milk storage scale", - "id": "milkStorageScale", - "type": "float", - "default": "1" - } - ] - }, - { - "name": "Breast Vore", - "id": "breastVore", - "type": "subcategory", - "buttons": ["breast_vore", "digest_breast"], - "entries": - [ - { - "name": "Breast stretchiness", - "id": "breastStretchiness", - "type": "float", - "default": "3" - }, - { - "name": "Milk digestion scale", - "id": "baseMilkDigestFactor", - "type": "float", - "default": "1" - }, - { - "name": "Breast autogrowth factor", - "id": "breastGrowthFactor", - "type": "float", - "default": "1", - "unit": "percentage", - "tooltip": "How much this part grows during part specific digestion. This is relative to overall growth, 100%:all mass goes to this part 20%:20% part growth-80% overall growth." - }, - { - "name": "Automatic Digestion", - "id": "breastDigestAuto", - "type": "subcategory", - "default": true, - "entries": + [ + { + "name": "Breast diameter", + "id": "baseBreastDiameter", + "type": "float", + "default": "0.1", + "unit": "length" + }, + { + "name": "Lactation", + "id": "lactationEnabled", + "type": "subcategory", + "stats": ["milk"], + "buttons": ["breast_milk"], + "warning": "Lactation is enabled", + "entries": [ { - "name": "Digestion time", - "id": "breastDigestTime", + "name": "Lactation scale", + "id": "lactationFactor", "type": "float", - "default": "15" + "default": "0.25" + }, + { + "name": "Passive milk production", + "id": "baseLactationProduction", + "type": "float", + "default": "0.1", + "unit": "percentage", + "tooltip": "How much you fill up every second" + }, + { + "name": "Milk storage scale", + "id": "milkStorageScale", + "type": "float", + "default": "1" } ] - }, - { - "name": "Manual digestion", - "id": "breastDigestManual", - "type": "checkbox" - }, - { - "name": "Same-size vore", - "id": "sameSizeBreastVore", - "type": "checkbox", - "default": true - }, - { - "name": "Scale milk with size", - "id": "milkScaleWithSize", - "type": "checkbox", - "tooltip": "If you're ten times bigger than normal, you produce ten times as much milk when digesting prey" - } - ] - } - ] + }, + { + "name": "Breast Vore", + "id": "breastVore", + "type": "subcategory", + "buttons": ["breast_vore", "digest_breast"], + "entries": + [ + { + "name": "Breast stretchiness", + "id": "breastStretchiness", + "type": "float", + "default": "3" + }, + { + "name": "Milk digestion scale", + "id": "baseMilkDigestFactor", + "type": "float", + "default": "1" + }, + { + "name": "Breast autogrowth factor", + "id": "breastGrowthFactor", + "type": "float", + "default": "1", + "unit": "percentage", + "tooltip": "How much this part grows during part specific digestion. This is relative to overall growth, 100%:all mass goes to this part 20%:20% part growth-80% overall growth." + }, + { + "name": "Automatic Digestion", + "id": "breastDigestAuto", + "type": "subcategory", + "default": true, + "entries": + [ + { + "name": "Digestion time", + "id": "breastDigestTime", + "type": "float", + "default": "15" + } + ] + }, + { + "name": "Manual digestion", + "id": "breastDigestManual", + "type": "checkbox" + }, + { + "name": "Same-size vore", + "id": "sameSizeBreastVore", + "type": "checkbox", + "default": true + }, + { + "name": "Scale milk with size", + "id": "milkScaleWithSize", + "type": "checkbox", + "tooltip": "If you're ten times bigger than normal, you produce ten times as much milk when digesting prey" + } + ] + } + ] }, { "name": "Stench", @@ -1673,32 +1673,32 @@ options = [ "warning": "Stench is enabled", "parts": ["stench"], "entries": - [ - { - "name": "Paw stench scale", - "id": "basePawStenchArea", - "type": "float", - "default": "1" - }, - { - "name": "Ass stench scale", - "id": "baseAssStenchArea", - "type": "float", - "default": "1.5" - }, - { - "name": "Piss stench scale", - "id": "basePissStenchArea", - "type": "float", - "default": "0.75" - }, - { - "name": "Scat stench scale", - "id": "baseScatStenchArea", - "type": "float", - "default": "3" - }, - ] + [ + { + "name": "Paw stench scale", + "id": "basePawStenchArea", + "type": "float", + "default": "1" + }, + { + "name": "Ass stench scale", + "id": "baseAssStenchArea", + "type": "float", + "default": "1.5" + }, + { + "name": "Piss stench scale", + "id": "basePissStenchArea", + "type": "float", + "default": "0.75" + }, + { + "name": "Scat stench scale", + "id": "baseScatStenchArea", + "type": "float", + "default": "3" + }, + ] }, { "name": "Gas", @@ -1709,46 +1709,46 @@ options = [ "panels": ["waste"], "warning": "Gas is enabled", "entries": - [ - { - "name": "Belching", - "id": "belchEnabled", - "type": "checkbox", - "buttons": ["belch"] - }, - { - "name": "Farting", - "id": "fartEnabled", - "type": "checkbox", - "buttons": ["fart"] - }, - { - "name": "Passive gas production", - "id": "baseGasProduction", - "type": "float", - "default": "1", - "unit": "percentage", - "tooltip": "How much you fill up every second" - }, - { - "name": "Gas storage scale", - "id": "gasStorageScale", - "type": "float", - "default": "1" - }, - { - "name": "Gas digestion factor", - "id": "baseGasDigestFactor", - "type": "float", - "default": "1" - }, - { - "name": "Scale gas with size", - "id": "gasScaleWithSize", - "type": "checkbox", - "tooltip": "If you're ten times bigger than normal, you produce ten times as much gas when digesting prey" - } - ] + [ + { + "name": "Belching", + "id": "belchEnabled", + "type": "checkbox", + "buttons": ["belch"] + }, + { + "name": "Farting", + "id": "fartEnabled", + "type": "checkbox", + "buttons": ["fart"] + }, + { + "name": "Passive gas production", + "id": "baseGasProduction", + "type": "float", + "default": "1", + "unit": "percentage", + "tooltip": "How much you fill up every second" + }, + { + "name": "Gas storage scale", + "id": "gasStorageScale", + "type": "float", + "default": "1" + }, + { + "name": "Gas digestion factor", + "id": "baseGasDigestFactor", + "type": "float", + "default": "1" + }, + { + "name": "Scale gas with size", + "id": "gasScaleWithSize", + "type": "checkbox", + "tooltip": "If you're ten times bigger than normal, you produce ten times as much gas when digesting prey" + } + ] }, { "name": "Soul Vore", @@ -1759,58 +1759,58 @@ options = [ "buttons": ["soul_vore", "soul_absorb_paw"], "warning": "Soul vore enabled", "entries": - [ - { - "name": "Souls autogrowth factor", - "id": "soulGrowthFactor", - "type": "float", - "default": "25", - "unit": "percentage", - "tooltip": "How much you grow when absorbing souls. [1]-you will gain equal mass to the souls you absorb. [.01]- you will grow by 1% of the mass of the souls you absorb. This does not stack with Prey growth factor" - }, - { - "name": "Automatic Digestion", - "id": "soulDigestAuto", - "type": "subcategory", - "default": true, - "entries": - [ - { - "name": "Digestion time", - "id": "soulDigestTime", - "type": "float", - "default": "15" - } - ] - }, - { - "name": "Manual digestion", - "id": "soulDigestManual", - "type": "checkbox", - "buttons": ["digest_soul"] - }, - { - "name":"Soul vore type", - "type": "select", - "id": "soulVoreType", - "default": "body", - "choices": - [ - { - "name": "Released", - "value": "release", - }, - { - "name": "Trapped", - "value": "body", - }, - { - "name": "Digested", - "value": "oblivion", - }, - ] - }, - ] + [ + { + "name": "Souls autogrowth factor", + "id": "soulGrowthFactor", + "type": "float", + "default": "25", + "unit": "percentage", + "tooltip": "How much you grow when absorbing souls. [1]-you will gain equal mass to the souls you absorb. [.01]- you will grow by 1% of the mass of the souls you absorb. This does not stack with Prey growth factor" + }, + { + "name": "Automatic Digestion", + "id": "soulDigestAuto", + "type": "subcategory", + "default": true, + "entries": + [ + { + "name": "Digestion time", + "id": "soulDigestTime", + "type": "float", + "default": "15" + } + ] + }, + { + "name": "Manual digestion", + "id": "soulDigestManual", + "type": "checkbox", + "buttons": ["digest_soul"] + }, + { + "name": "Soul vore type", + "type": "select", + "id": "soulVoreType", + "default": "body", + "choices": + [ + { + "name": "Released", + "value": "release", + }, + { + "name": "Trapped", + "value": "body", + }, + { + "name": "Digested", + "value": "oblivion", + }, + ] + }, + ] }, { "name": "Piss", @@ -1822,83 +1822,83 @@ options = [ "buttons": ["piss"], "warning": "Watersports enabled", "entries": - [ - { - "name": "Passive piss production", - "id": "basePissProduction", - "type": "float", - "default": "1", - "unit": "percentage", - "tooltip": "How much you fill up every second" - }, - { - "name": "Piss storage scale", - "id": "pissStorageScale", - "type": "float", - "default": "1" - }, - { - "name": "Bladder Vore", - "id": "bladderVore", - "type": "subcategory", - "buttons": ["bladder_vore"], - "entries": - [ - { - "name": "Urethra diameter", - "id": "baseUrethraDiameter", - "type": "float", - "default": "0.03", - "unit": "length" - }, - { - "name": "Urethra stretchiness", - "id": "urethraStretchiness", - "type": "float", - "default": "5" - }, - { - "name": "Piss digestion scale", - "id": "basePissDigestFactor", - "type": "float", - "default": "1" - }, - { - "name": "Automatic Digestion", - "id": "bladderDigestAuto", - "type": "subcategory", - "default": true, - "entries": + [ + { + "name": "Passive piss production", + "id": "basePissProduction", + "type": "float", + "default": "1", + "unit": "percentage", + "tooltip": "How much you fill up every second" + }, + { + "name": "Piss storage scale", + "id": "pissStorageScale", + "type": "float", + "default": "1" + }, + { + "name": "Bladder Vore", + "id": "bladderVore", + "type": "subcategory", + "buttons": ["bladder_vore"], + "entries": [ { - "name": "Digestion time", - "id": "bladderDigestTime", + "name": "Urethra diameter", + "id": "baseUrethraDiameter", "type": "float", - "default": "15" + "default": "0.03", + "unit": "length" + }, + { + "name": "Urethra stretchiness", + "id": "urethraStretchiness", + "type": "float", + "default": "5" + }, + { + "name": "Piss digestion scale", + "id": "basePissDigestFactor", + "type": "float", + "default": "1" + }, + { + "name": "Automatic Digestion", + "id": "bladderDigestAuto", + "type": "subcategory", + "default": true, + "entries": + [ + { + "name": "Digestion time", + "id": "bladderDigestTime", + "type": "float", + "default": "15" + } + ] + }, + { + "name": "Manual digestion", + "id": "bladderDigestManual", + "type": "checkbox", + "buttons": ["digest_bladder"], + }, + { + "name": "Same-size vore", + "id": "sameSizeBladderVore", + "type": "checkbox", + "default": true + }, + { + "name": "Scale piss with size", + "id": "pissScaleWithSize", + "type": "checkbox", + "tooltip": "If you're ten times bigger than normal, you produce ten times as much piss when digesting prey" } ] - }, - { - "name": "Manual digestion", - "id": "bladderDigestManual", - "type": "checkbox", - "buttons": ["digest_bladder"], - }, - { - "name": "Same-size vore", - "id": "sameSizeBladderVore", - "type": "checkbox", - "default": true - }, - { - "name": "Scale piss with size", - "id": "pissScaleWithSize", - "type": "checkbox", - "tooltip": "If you're ten times bigger than normal, you produce ten times as much piss when digesting prey" - } - ] - } - ] + } + ] }, { "name": "Scat", @@ -1910,34 +1910,34 @@ options = [ "buttons": ["scat"], "warning": "Scat is enabled", "entries": - [ - { - "name": "Scat digestion scale", - "id": "baseScatDigestFactor", - "type": "float", - "default": "1" - }, - { - "name": "Passive scat production", - "id": "baseScatProduction", - "type": "float", - "default": "0.1", - "unit": "percentage", - "tooltip": "How much you fill up every second" - }, - { - "name": "Scat storage scale", - "id": "scatStorageScale", - "type": "float", - "default": "1" - }, - { - "name": "Scale scat with size", - "id": "scatScaleWithSize", - "type": "checkbox", - "tooltip": "If you're ten times bigger than normal, you produce ten times as much scat when digesting prey" - } - ] + [ + { + "name": "Scat digestion scale", + "id": "baseScatDigestFactor", + "type": "float", + "default": "1" + }, + { + "name": "Passive scat production", + "id": "baseScatProduction", + "type": "float", + "default": "0.1", + "unit": "percentage", + "tooltip": "How much you fill up every second" + }, + { + "name": "Scat storage scale", + "id": "scatStorageScale", + "type": "float", + "default": "1" + }, + { + "name": "Scale scat with size", + "id": "scatScaleWithSize", + "type": "checkbox", + "tooltip": "If you're ten times bigger than normal, you produce ten times as much scat when digesting prey" + } + ] }, { "name": "Goo", @@ -1947,44 +1947,44 @@ options = [ "panels": ["goo"], "buttons": ["melt"], "entries": - [ - { - "name": "Digestion", - "id": "gooDigestion", - "type": "subcategory", - "entries": - [ - { - "name": "Goo autogrowth factor", - "id": "gooGrowthFactor", - "type": "float", - "default": "80", - "unit": "percentage", - "tooltip": "How much you grow when absorbing people via goo. [1]-you will gain equal mass to the souls you absorb. [.01]- you will grow by 1% of the mass of the souls you absorb. This does not stack with Prey growth factor" - }, - { - "name": "Automatic Digestion", - "id": "gooDigestAuto", - "type": "subcategory", - "default": true, - "entries": + [ + { + "name": "Digestion", + "id": "gooDigestion", + "type": "subcategory", + "entries": [ { - "name": "Digestion time", - "id": "gooDigestTime", + "name": "Goo autogrowth factor", + "id": "gooGrowthFactor", "type": "float", - "default": "15" + "default": "80", + "unit": "percentage", + "tooltip": "How much you grow when absorbing people via goo. [1]-you will gain equal mass to the souls you absorb. [.01]- you will grow by 1% of the mass of the souls you absorb. This does not stack with Prey growth factor" + }, + { + "name": "Automatic Digestion", + "id": "gooDigestAuto", + "type": "subcategory", + "default": true, + "entries": + [ + { + "name": "Digestion time", + "id": "gooDigestTime", + "type": "float", + "default": "15" + } + ] + }, + { + "name": "Manual digestion", + "id": "gooDigestManual", + "type": "checkbox" } ] - }, - { - "name": "Manual digestion", - "id": "gooDigestManual", - "type": "checkbox" - } - ] - } - ] + } + ] }, { "name": "Paw Vore", @@ -1993,43 +1993,43 @@ options = [ "optional": true, "buttons": ["paw_vore"], "entries": - [ - { - "name": "Paw autogrowth factor", - "id": "pawGrowthFactor", - "type": "float", - "default": "1", - "unit": "percentage", - "tooltip": "How much this part grows during part specific digestion. This is relative to overall growth, 100%:all mass goes to this part 20%:20% part growth-80% overall growth." - }, - { - "name": "Automatic Digestion", - "id": "pawDigestAuto", - "type": "subcategory", - "default": true, - "entries": - [ - { - "name": "Digestion time", - "id": "pawDigestTime", - "type": "float", - "default": "15" - } - ] - }, - { - "name": "Manual digestion", - "id": "pawDigestManual", - "type": "checkbox", - "buttons": ["digest_paws"] - }, - { - "name": "Same-size vore", - "id": "sameSizePawVore", - "type": "checkbox", - "default": true - } - ] + [ + { + "name": "Paw autogrowth factor", + "id": "pawGrowthFactor", + "type": "float", + "default": "1", + "unit": "percentage", + "tooltip": "How much this part grows during part specific digestion. This is relative to overall growth, 100%:all mass goes to this part 20%:20% part growth-80% overall growth." + }, + { + "name": "Automatic Digestion", + "id": "pawDigestAuto", + "type": "subcategory", + "default": true, + "entries": + [ + { + "name": "Digestion time", + "id": "pawDigestTime", + "type": "float", + "default": "15" + } + ] + }, + { + "name": "Manual digestion", + "id": "pawDigestManual", + "type": "checkbox", + "buttons": ["digest_paws"] + }, + { + "name": "Same-size vore", + "id": "sameSizePawVore", + "type": "checkbox", + "default": true + } + ] }, { "name": "Crop", @@ -2038,23 +2038,23 @@ options = [ "optional": true, "buttons": ["crop_swallow"], "entries": - [ - { - "name": "Automatic Transfer", - "id": "cropTransferAuto", - "type": "subcategory", - "default": true, - "entries": - [ - { - "name": "Digestion time", - "id": "cropTransferTime", - "type": "float", - "default": "10" - } - ] - }, - ] + [ + { + "name": "Automatic Transfer", + "id": "cropTransferAuto", + "type": "subcategory", + "default": true, + "entries": + [ + { + "name": "Digestion time", + "id": "cropTransferTime", + "type": "float", + "default": "10" + } + ] + }, + ] }, { "name": "Breath", @@ -2064,51 +2064,51 @@ options = [ "panels": ["breath"], "buttons": ["breath_line", "breath_cone"], "entries": - [ - { - "name": "Breath area", - "id": "baseBreathArea", - "type": "float", - "default": "10", - "unit": "area" - }, - { - "name": "Fire", - "id": "breathFire", - "type": "checkbox", - "buttons": ["breath_fire"] - }, - { - "name": "Ice", - "id": "breathIce", - "type": "checkbox", - "buttons": ["breath_ice"] - }, - { - "name": "Electric", - "id": "breathElectric", - "type": "checkbox", - "buttons": ["breath_electric"] - }, - { - "name": "Smoke", - "id": "breathSmoke", - "type": "checkbox", - "buttons": ["breath_smoke"] - }, - { - "name": "Radiation", - "id": "breathRadiation", - "type": "checkbox", - "buttons": ["breath_radiation"] - }, - { - "name": "Foul", - "id": "breathFoul", - "type": "checkbox", - "buttons": ["breath_foul"] - }, - ] + [ + { + "name": "Breath area", + "id": "baseBreathArea", + "type": "float", + "default": "10", + "unit": "area" + }, + { + "name": "Fire", + "id": "breathFire", + "type": "checkbox", + "buttons": ["breath_fire"] + }, + { + "name": "Ice", + "id": "breathIce", + "type": "checkbox", + "buttons": ["breath_ice"] + }, + { + "name": "Electric", + "id": "breathElectric", + "type": "checkbox", + "buttons": ["breath_electric"] + }, + { + "name": "Smoke", + "id": "breathSmoke", + "type": "checkbox", + "buttons": ["breath_smoke"] + }, + { + "name": "Radiation", + "id": "breathRadiation", + "type": "checkbox", + "buttons": ["breath_radiation"] + }, + { + "name": "Foul", + "id": "breathFoul", + "type": "checkbox", + "buttons": ["breath_foul"] + }, + ] }, { "name": "Drool", @@ -2117,15 +2117,15 @@ options = [ "optional": true, "buttons": ["drool"], "entries": - [ - { - "name": "Drool volume", - "id": "droolBaseVolume", - "type": "float", - "default": "0.01", - "unit": "volume" - } - ] + [ + { + "name": "Drool volume", + "id": "droolBaseVolume", + "type": "float", + "default": "0.01", + "unit": "volume" + } + ] }, { "name": "Magic", @@ -2134,32 +2134,32 @@ options = [ "optional": true, "panels": ["magic"], "entries": - [ - { - "name": "Shrinking magic", - "id": "magicShrink", - "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", - "id": "magicFastDigestion", - "type": "checkbox", - "buttons": ["magic_fast_digestion"], - "default": true, - "tooltip": "Fast Digestion allows you to speed up your digestion for a short duration." - }, - { - "name": "Pause digestion", - "id": "magicPauseDigestion", - "type": "checkbox", - "buttons": ["magic_pause_digestion"], - "default": true, - "tooltip": "Pause Digestion allows you to halt digestion until you cast it again." - } - ] + [ + { + "name": "Shrinking magic", + "id": "magicShrink", + "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", + "id": "magicFastDigestion", + "type": "checkbox", + "buttons": ["magic_fast_digestion"], + "default": true, + "tooltip": "Fast Digestion allows you to speed up your digestion for a short duration." + }, + { + "name": "Pause digestion", + "id": "magicPauseDigestion", + "type": "checkbox", + "buttons": ["magic_pause_digestion"], + "default": true, + "tooltip": "Pause Digestion allows you to halt digestion until you cast it again." + } + ] }, { "name": "Wings", @@ -2170,76 +2170,76 @@ options = [ "parts": ["wings"], "buttons": ["wings_flap"], "entries": - [ - { - "name": "Wing width", - "id": "baseWingWidth", - "type": "float", - "default": "1", - "unit": "length" - }, - { - "name": "Wing length", - "id": "baseWingLength", - "type": "float", - "default": "1", - "unit": "length" - }, - { - "name": "Wing description", - "id": "wingDesc", - "type": "text", - "default": "feathery" - }, - { - "name": "Wing Vore", - "id": "wingVoreEnabled", - "type": "subcategory", - "buttons": ["wings_vore"], - "entries": - [ - { - "name": "Wing autogrowth factor", - "id": "wingGrowthFactor", - "type": "float", - "default": "1", - "unit": "percentage", - "tooltip": "How much this part grows during part specific digestion. This is relative to overall growth, 100%:all mass goes to this part 20%:20% part growth-80% overall growth." - }, - { - "name": "Automatic Digestion", - "id": "wingDigestAuto", - "type": "subcategory", - "default": true, - "entries": + [ + { + "name": "Wing width", + "id": "baseWingWidth", + "type": "float", + "default": "1", + "unit": "length" + }, + { + "name": "Wing length", + "id": "baseWingLength", + "type": "float", + "default": "1", + "unit": "length" + }, + { + "name": "Wing description", + "id": "wingDesc", + "type": "text", + "default": "feathery" + }, + { + "name": "Wing Vore", + "id": "wingVoreEnabled", + "type": "subcategory", + "buttons": ["wings_vore"], + "entries": [ { - "name": "Digestion time", - "id": "wingDigestTime", + "name": "Wing autogrowth factor", + "id": "wingGrowthFactor", "type": "float", - "default": "15" + "default": "1", + "unit": "percentage", + "tooltip": "How much this part grows during part specific digestion. This is relative to overall growth, 100%:all mass goes to this part 20%:20% part growth-80% overall growth." + }, + { + "name": "Automatic Digestion", + "id": "wingDigestAuto", + "type": "subcategory", + "default": true, + "entries": + [ + { + "name": "Digestion time", + "id": "wingDigestTime", + "type": "float", + "default": "15" + } + ] + }, + { + "name": "Manual digestion", + "id": "wingDigestManual", + "type": "checkbox", + "buttons": ["digest_wings"] + }, + { + "name": "Same-size vore", + "id": "sameSizeWingVore", + "type": "checkbox", + "default": true + }, + { + "name": "Wing vore goes to stomach", + "id": "wingVoreToStomach", + "type": "checkbox" } ] - }, - { - "name": "Manual digestion", - "id": "wingDigestManual", - "type": "checkbox", - "buttons": ["digest_wings"] - }, - { - "name": "Same-size vore", - "id": "sameSizeWingVore", - "type": "checkbox", - "default": true - }, - { - "name": "Wing vore goes to stomach", - "id": "wingVoreToStomach", - "type": "checkbox" - } - ] - } - ] + } + ] } ]; diff --git a/game.js b/game.js index 7427b62..5064410 100644 --- a/game.js +++ b/game.js @@ -7,7 +7,7 @@ let version = "v1.1.2"; let errored = false; -window.onerror = function(msg, source, lineno, colno, error) { //opens a popup if the game encounters an error +window.onerror = function (msg, source, lineno, colno, error) { //opens a popup if the game encounters an error if (!errored) { errored = true; @@ -22,10 +22,11 @@ let started = false; const fillPeriod = 1000 / 60; const strollingEnum = { - Standing: 0, - Strolling: 1, - Jogging: 2, - Running: 3}; + Standing: 0, + Strolling: 1, + Jogging: 2, + Running: 3 +}; let strolling = strollingEnum.Standing; @@ -102,14 +103,14 @@ let macro = //macro controls every customizable part of the players body "ballDensity": 1000, "breastDensity": 1000, "assDensity": 1000, //this is only used for automatic growth function - "wombDensity":1000, //this is only used for automatic growth function - "pawDensity":1000, //this is only used for automatic growth function + "wombDensity": 1000, //this is only used for automatic growth function + "pawDensity": 1000, //this is only used for automatic growth function "breathStyle": "cone", - "scaling": function(value, scale, factor) { return value * Math.pow(scale,factor); }, + "scaling": function (value, scale, factor) { return value * Math.pow(scale, factor); }, get height() { return this.scaling(this.baseHeight, this.scale, 1); }, - get mass () { return this.scaling(this.baseMass, this.scale, 3); }, + get mass() { return this.scaling(this.baseMass, this.scale, 3); }, get pawLength() { return this.scaling(this.basePawLength * this.pawScale, this.scale, 1); }, get pawWidth() { return this.scaling(this.basePawWidth * this.pawScale, this.scale, 1); }, get pawArea() { return this.pawLength * this.pawWidth; }, @@ -123,10 +124,10 @@ let macro = //macro controls every customizable part of the players body get wingWidth() { return this.scaling(this.baseWingWidth, this.scale * this.wingScale, 1); }, get wingArea() { return this.wingLength * this.wingWidth; }, - "footOnlyDesc": function(plural=false,capital=false) { + "footOnlyDesc": function (plural = false, capital = false) { let result = ""; - switch(this.footType) { + switch (this.footType) { case "paw": result = plural ? "paws" : "paw"; break; @@ -139,19 +140,19 @@ let macro = //macro controls every customizable part of the players body case "avian": result = plural ? "avian feet" : "avian foot"; break; - } + } return capital ? result.charAt(0).toUpperCase() + result.slice(1) : result; }, - "footDesc": function(plural=false,capital=false,possessive=false) { + "footDesc": function (plural = false, capital = false, possessive = false) { let result = ""; if (!this.footWear) { - return this.footOnlyDesc(plural,capital); + return this.footOnlyDesc(plural, capital); } if (!this.footSockWorn && !this.footShoeWorn) { - return this.footOnlyDesc(plural,capital); + return this.footOnlyDesc(plural, capital); } else if (this.footShoeWorn) { - switch(this.footShoe) { + switch (this.footShoe) { case "shoe": result = plural ? "shoes" : "shoe"; break; @@ -172,9 +173,9 @@ let macro = //macro controls every customizable part of the players body break; } } else if (this.footSockWorn) { - switch(this.footSock) { + switch (this.footSock) { case "sock": - result = "socked " + this.footOnlyDesc(plural,false); + result = "socked " + this.footOnlyDesc(plural, false); break; case "stocking": result = "stocking-wrapped " + this.footOnlyDesc(plural, false); @@ -182,31 +183,31 @@ let macro = //macro controls every customizable part of the players body } } - if(possessive) { + if (possessive) { result = " your " + result; } return capital ? result.charAt(0).toUpperCase() + result.slice(1) : result; }, - "toeNoShoeDesc": function(plural=false,capital=false) { + "toeNoShoeDesc": function (plural = false, capital = false) { let result = ""; if (!this.footSockWorn) { - return this.toeOnlyDesc(plural,capital); + return this.toeOnlyDesc(plural, capital); } else if (this.footSockWorn) { - switch(this.footSock) { + switch (this.footSock) { case "sock": - result = "socked " + this.toeOnlyDesc(plural,false); + result = "socked " + this.toeOnlyDesc(plural, false); } } return capital ? result.charAt(0).toUpperCase() + result.slice(1) : result; }, - "toeOnlyDesc": function(plural=false,capital=false) { + "toeOnlyDesc": function (plural = false, capital = false) { let result = ""; - switch(this.footType) { + switch (this.footType) { case "paw": result = plural ? "toes" : "toe"; break; @@ -219,19 +220,19 @@ let macro = //macro controls every customizable part of the players body case "avian": result = plural ? "talons" : "talon"; break; - } + } return capital ? result.charAt(0).toUpperCase() + result.slice(1) : result; }, - "toeDesc": function(plural=false,capital=false,possessive=false) { + "toeDesc": function (plural = false, capital = false, possessive = false) { let result = ""; if (!this.footWear) { - return this.toeOnlyDesc(plural,capital); + return this.toeOnlyDesc(plural, capital); } if (!this.footSockWorn && !this.footShoeWorn) { - return this.toeOnlyDesc(plural,capital); + return this.toeOnlyDesc(plural, capital); } else if (this.footShoeWorn) { - switch(this.footShoe) { + switch (this.footShoe) { case "shoe": result = plural ? "treads" : "tread"; break; @@ -252,9 +253,9 @@ let macro = //macro controls every customizable part of the players body break; } } else if (this.footSockWorn) { - switch(this.footSock) { + switch (this.footSock) { case "sock": - result = "socked " + this.toeOnlyDesc(plural,false); + result = "socked " + this.toeOnlyDesc(plural, false); break; case "stocking": result = "stocking-wrapped " + this.footOnlyDesc(plural, false); @@ -262,36 +263,36 @@ let macro = //macro controls every customizable part of the players body } } - if(possessive) { + if (possessive) { result = "your " + result; } return capital ? result.charAt(0).toUpperCase() + result.slice(1) : result; }, - "soleNoShoeDesc": function(plural=false,capital=false) { + "soleNoShoeDesc": function (plural = false, capital = false) { let result = ""; if (!this.footSockWorn) { - return this.soleOnlyDesc(plural,capital); + return this.soleOnlyDesc(plural, capital); } else if (this.footSockWorn) { - switch(this.footSock) { + switch (this.footSock) { case "sock": - result = "socked " + this.soleOnlyDesc(plural,false); + result = "socked " + this.soleOnlyDesc(plural, false); } } return capital ? result.charAt(0).toUpperCase() + result.slice(1) : result; }, - "soleOnlyDesc": function(plural=false,capital=false) { + "soleOnlyDesc": function (plural = false, capital = false) { let result = ""; - switch(this.footType) { + switch (this.footType) { case "paw": result = plural ? "pads" : "pads"; break; case "hoof": - result = plural ? pickString("frogs","soles"):pickString("frog","sole"); + result = plural ? pickString("frogs", "soles") : pickString("frog", "sole"); break; case "foot": result = plural ? "soles" : "sole"; @@ -299,19 +300,19 @@ let macro = //macro controls every customizable part of the players body case "avian": result = plural ? "pads" : "pads"; break; - } + } return capital ? result.charAt(0).toUpperCase() + result.slice(1) : result; }, - "soleDesc": function(plural=false,capital=false,possessive=false) { + "soleDesc": function (plural = false, capital = false, possessive = false) { let result = ""; if (!this.footWear) { - return this.soleOnlyDesc(plural,capital); + return this.soleOnlyDesc(plural, capital); } if (!this.footSockWorn && !this.footShoeWorn) { - return this.soleOnlyDesc(plural,capital); + return this.soleOnlyDesc(plural, capital); } else if (this.footShoeWorn) { - switch(this.footShoe) { + switch (this.footShoe) { case "shoe": result = plural ? "heels" : "heel"; break; @@ -332,9 +333,9 @@ let macro = //macro controls every customizable part of the players body break; } } else if (this.footSockWorn) { - switch(this.footSock) { + switch (this.footSock) { case "sock": - result = "socked " + this.soleOnlyDesc(plural,false); + result = "socked " + this.soleOnlyDesc(plural, false); break; case "stocking": result = "stocking-wrapped " + this.soleOnlyDesc(plural, false); @@ -342,15 +343,15 @@ let macro = //macro controls every customizable part of the players body } } - if(possessive) { + if (possessive) { result = "your " + result; } return capital ? result.charAt(0).toUpperCase() + result.slice(1) : result; }, - "shoeDesc": function(plural,capital) { + "shoeDesc": function (plural, capital) { let result = ""; - switch(this.footShoe) { + switch (this.footShoe) { case "shoe": result = plural ? "shoes" : "shoe"; break; @@ -373,9 +374,9 @@ let macro = //macro controls every customizable part of the players body return capital ? result.charAt(0).toUpperCase() + result.slice(1) : result; }, - "sockDesc": function(plural,capital) { + "sockDesc": function (plural, capital) { let result = ""; - switch(this.footSock) { + switch (this.footSock) { case "sock": result = plural ? "socks" : "sock"; break; @@ -386,9 +387,9 @@ let macro = //macro controls every customizable part of the players body return capital ? result.charAt(0).toUpperCase() + result.slice(1) : result; }, - "jawDesc": function(plural=false,capital=false) { + "jawDesc": function (plural = false, capital = false) { let result = ""; - switch(this.jawType) { + switch (this.jawType) { case "jaw": result = plural ? "jaws" : "jaw"; break; @@ -399,10 +400,10 @@ let macro = //macro controls every customizable part of the players body return capital ? result.charAt(0).toUpperCase() + result.slice(1) : result; }, - "biteDesc": function(plural=false,capital=false) { + "biteDesc": function (plural = false, capital = false) { let result = ""; - switch(this.jawType) { + switch (this.jawType) { case "jaw": result = plural ? "crushes" : "crush"; break; @@ -412,10 +413,10 @@ let macro = //macro controls every customizable part of the players body } return capital ? result.charAt(0).toUpperCase() + result.slice(1) : result; }, - "teethDesc": function(plural=false,capital=false) { + "teethDesc": function (plural = false, capital = false) { let result = ""; - switch(this.jawType) { + switch (this.jawType) { case "jaw": result = plural ? "fangs" : "fang"; break; @@ -428,9 +429,9 @@ let macro = //macro controls every customizable part of the players body get preyGrowthFactor() { if (macro.growthScaleWithSize) { - return this.basePreyGrowthFactor * Math.pow(this.scale, 1); + return this.basePreyGrowthFactor * Math.pow(this.scale, 1); //this breaks once you get to the size of a planet - } else { + } else { return this.basePreyGrowthFactor; } }, @@ -444,10 +445,10 @@ let macro = //macro controls every customizable part of the players body return this.scaling(this.tailStretchiness * this.baseTailDiameter * this.tailScale, this.scale, 1); }, get tailGirth() { - return Math.pow(this.tailDiameter/2,2) * Math.PI; + return Math.pow(this.tailDiameter / 2, 2) * Math.PI; }, get tailStretchGirth() { - return Math.pow(this.tailStretchDiameter/2,2) * Math.PI; + return Math.pow(this.tailStretchDiameter / 2, 2) * Math.PI; }, get tailArea() { return this.tailLength * this.tailDiameter; @@ -465,7 +466,7 @@ let macro = //macro controls every customizable part of the players body return (this.tailCount > 1 ? "tails" : "tail"); }, get arousalDickFactor() { - //this scales the size of the dick based on arousal, and is not directly related to arousalFactor(multiplier on arousal you gain from actions) + //this scales the size of the dick based on arousal, and is not directly related to arousalFactor(multiplier on arousal you gain from actions) let factor = 1; if (!this.arousalEnabled || this.arousal < 25) { factor = 0.5; @@ -481,7 +482,7 @@ let macro = //macro controls every customizable part of the players body return this.scaling(this.baseDickDiameter * this.dickScale * this.arousalDickFactor, this.scale, 1); }, get dickGirth() { - return Math.pow((this.dickDiameter/ 2),2) * Math.PI; + return Math.pow((this.dickDiameter / 2), 2) * Math.PI; }, get dickStretchGirth() { return this.dickGirth * this.dickStretchiness * this.dickStretchiness; @@ -490,7 +491,7 @@ let macro = //macro controls every customizable part of the players body return this.dickLength * this.dickDiameter * Math.PI / 2; }, get dickVolume() { - return this.dickLength * Math.pow(this.dickDiameter/2,2) * Math.PI; + return this.dickLength * Math.pow(this.dickDiameter / 2, 2) * Math.PI; }, get dickMass() { return this.dickVolume * this.dickDensity; @@ -498,10 +499,10 @@ let macro = //macro controls every customizable part of the players body get ballDiameter() { return this.scaling(this.baseBallDiameter * this.ballScale, this.scale, 1); }, - get ballArea() { return 2 * Math.PI * Math.pow(this.ballDiameter/2, 2); }, + get ballArea() { return 2 * Math.PI * Math.pow(this.ballDiameter / 2, 2); }, get ballVolume() { let radius = this.ballDiameter / 2; - return 4/3 * Math.PI * Math.pow(radius,3); + return 4 / 3 * Math.PI * Math.pow(radius, 3); }, get ballMass() { let volume = this.ballVolume; @@ -536,14 +537,14 @@ let macro = //macro controls every customizable part of the players body get breastDiameter() { return this.scaling(this.baseBreastDiameter * this.breastScale, this.scale, 1); }, get breastStretchDiameter() { return this.scaling(this.breastStretchiness * this.baseBreastDiameter * this.breastScale, this.scale, 1); }, get breastArea() { - return 2 * Math.PI * Math.pow(this.breastDiameter/2,2); + return 2 * Math.PI * Math.pow(this.breastDiameter / 2, 2); }, get breastStretchArea() { - return 2 * Math.PI * Math.pow(this.breastStretchDiameter/2,2); + return 2 * Math.PI * Math.pow(this.breastStretchDiameter / 2, 2); }, get breastVolume() { let radius = this.breastDiameter / 2; - return 4/3 * Math.PI * Math.pow(radius,3); + return 4 / 3 * Math.PI * Math.pow(radius, 3); }, get breastMass() { let volume = this.breastVolume; @@ -551,16 +552,16 @@ let macro = //macro controls every customizable part of the players body }, get droolVolume() { - return this.scaling(this.droolBaseVolume / 1000 , this.scale, 3); + return this.scaling(this.droolBaseVolume / 1000, this.scale, 3); }, - "digest": function(owner, organ, time=15, auto=true) { + "digest": function (owner, organ, time = 15, auto = true) { // we now have an explicit no-auto-digest flag, but // some saves will wind up a time of 0 anyway, so I'll // just leave this here to keep that from breaking things if (auto && time != 0) { - setTimeout(function() { owner.digest(owner, organ, time); }, time * 1000 / organ.stages / macro.fastDigestFactor); + setTimeout(function () { owner.digest(owner, organ, time); }, time * 1000 / organ.stages / macro.fastDigestFactor); } if (macro.pauseDigest) { @@ -589,22 +590,22 @@ let macro = //macro controls every customizable part of the players body "stomach": { "name": "stomach", - "setup": function(owner) { + "setup": function (owner) { this.owner = owner; for (let i = 0; i < this.stages; i++) this.contents.push(new Container()); owner.digest(owner, this, owner.oralDigestTime, owner.oralDigestAuto); }, - "feed": function(prey) { - this.feedFunc(prey,this,this.owner); + "feed": function (prey) { + this.feedFunc(prey, this, this.owner); }, - "feedFunc": function(prey,self,owner) { + "feedFunc": function (prey, self, owner) { this.contents[0] = this.contents[0].merge(prey); }, - "describeDigestion": function(container) { - return describe("stomach",container,this.owner,verbose, flat); + "describeDigestion": function (container) { + return describe("stomach", container, this.owner, verbose, flat); }, - "fill": function(owner,container) { + "fill": function (owner, container) { if (owner.gasEnabled) owner.gasStorage.amount += container.sum_property("mass") * owner.gasDigestFactor / 1e4; if (owner.scatEnabled) { @@ -614,7 +615,7 @@ let macro = //macro controls every customizable part of the players body }, get description() { let prey = new Container(); - this.contents.forEach(function(x) { + this.contents.forEach(function (x) { prey = prey.merge(x); }); @@ -625,7 +626,7 @@ let macro = //macro controls every customizable part of the players body if (prey.count == 0) { return "Your belly is flat, growling and gurgling for want of prey."; } else { - if (macro.brutality > 0) { + if (macro.brutality > 0) { return "Your belly churns and bubbles as it works to melt " + prey.describeSimple(verbose || flat) + " down to chyme."; } else { return "Your belly sloshes with the weight of " + prey.describeSimple(verbose || flat) + " trapped within."; @@ -637,26 +638,26 @@ let macro = //macro controls every customizable part of the players body }, "tail": { - "name" : "tail", - "setup": function(owner) { + "name": "tail", + "setup": function (owner) { this.owner = owner; for (let i = 0; i < this.stages; i++) this.contents.push(new Container()); owner.digest(owner, this, owner.tailDigestTime, owner.tailDigestAuto); }, - "feed": function(prey) { - this.feedFunc(prey,this,this.owner); + "feed": function (prey) { + this.feedFunc(prey, this, this.owner); }, - "feedFunc": function(prey,self,owner) { + "feedFunc": function (prey, self, owner) { this.contents[0] = this.contents[0].merge(prey); }, - "describeMove" : function(container) { - return describe("tail-to-stomach",container,this.owner,verbose, flat); + "describeMove": function (container) { + return describe("tail-to-stomach", container, this.owner, verbose, flat); }, - "describeDigestion" : function(container) { - return describe("tail",container,this.owner,verbose, flat); + "describeDigestion": function (container) { + return describe("tail", container, this.owner, verbose, flat); }, - "fill": function(owner,container) { + "fill": function (owner, container) { if (owner.gasEnabled) owner.gasStorage.amount += container.sum_property("mass") * owner.gasDigestFactor / 1e3; if (owner.scatEnabled) { @@ -666,7 +667,7 @@ let macro = //macro controls every customizable part of the players body }, get description() { let prey = new Container(); - this.contents.forEach(function(x) { + this.contents.forEach(function (x) { prey = prey.merge(x); }); @@ -680,38 +681,38 @@ let macro = //macro controls every customizable part of the players body if (this.owner.tailVoreToStomach) { return "Your " + this.owner.tailDesc + " " + (this.owner.tailCount > 1 ? "clench and squeeze around " : "clenches and squeezes around ") + prey.describeSimple(verbose || flat) + ", working them deeper and deeper inside."; } - else if (macro.brutality > 0) { - return "Your " + this.owner.tailDesc + " " + (this.owner.tailCount > 1 ? "groans" : "groan") + " ominously as " + (this.owner.tailCount > 1 ? "they gurgle" : "it gurgles" ) + " around " + prey.describeSimple(verbose || flat) + ", slowly absorbing them into your musky depths."; + else if (macro.brutality > 0) { + return "Your " + this.owner.tailDesc + " " + (this.owner.tailCount > 1 ? "groans" : "groan") + " ominously as " + (this.owner.tailCount > 1 ? "they gurgle" : "it gurgles") + " around " + prey.describeSimple(verbose || flat) + ", slowly absorbing them into your musky depths."; } else { return "Your " + this.owner.tailDesc + " " + (this.owner.tailCount > 1 ? "bulge" : "bulges") + " with " + prey.describeSimple(verbose || flat) + "."; } } }, - "contents" : [], + "contents": [], "stages": 3 }, "bowels": { - "name" : "bowels", - "setup": function(owner) { + "name": "bowels", + "setup": function (owner) { this.owner = owner; for (let i = 0; i < this.stages; i++) this.contents.push(new Container()); owner.digest(owner, this, owner.analDigestTime, owner.analDigestAuto); }, - "feed": function(prey) { - this.feedFunc(prey,this,this.owner); + "feed": function (prey) { + this.feedFunc(prey, this, this.owner); }, - "feedFunc": function(prey,self,owner) { + "feedFunc": function (prey, self, owner) { this.contents[0] = this.contents[0].merge(prey); }, - "describeMove" : function(container) { - return describe("bowels-to-stomach",container,this.owner,verbose, flat); + "describeMove": function (container) { + return describe("bowels-to-stomach", container, this.owner, verbose, flat); }, - "describeDigestion" : function(container) { - return describe("bowels",container,this.owner,verbose, flat); + "describeDigestion": function (container) { + return describe("bowels", container, this.owner, verbose, flat); }, - "fill": function(owner,container) { + "fill": function (owner, container) { if (owner.gasEnabled) owner.gasStorage.amount += container.sum_property("mass") * owner.gasDigestFactor / 1e3; if (owner.scatEnabled) { @@ -721,7 +722,7 @@ let macro = //macro controls every customizable part of the players body }, get description() { let prey = new Container(); - this.contents.forEach(function(x) { + this.contents.forEach(function (x) { prey = prey.merge(x); }); @@ -732,14 +733,14 @@ let macro = //macro controls every customizable part of the players body if (prey.count == 0) { return "Your bowels are empty."; } else { - if (macro.brutality > 0) { + if (macro.brutality > 0) { return "Your bowels groan ominously as they clench around " + prey.describeSimple(verbose || flat) + ", slowly absorbing them into your musky depths."; } else { return "Your bowels bulge with " + prey.describeSimple(verbose || flat) + "."; } } }, - "contents" : [], + "contents": [], "stages": 3 }, @@ -752,30 +753,30 @@ let macro = //macro controls every customizable part of the players body }, "womb": { - "name" : "womb", - "setup": function(owner) { + "name": "womb", + "setup": function (owner) { this.owner = owner; for (let i = 0; i < this.stages; i++) this.contents.push(new Container()); owner.digest(owner, this, owner.unbirthDigestTime, owner.unbirthDigestAuto); }, - "feed": function(prey) { - this.feedFunc(prey,this,this.owner); + "feed": function (prey) { + this.feedFunc(prey, this, this.owner); }, - "feedFunc": function(prey,self,owner) { + "feedFunc": function (prey, self, owner) { this.contents[0] = this.contents[0].merge(prey); }, - "describeDigestion": function(container, vol) { - return describe("womb",container,this.owner,verbose, flat).replace("$VOLUME",volume(vol,unit,false)); + "describeDigestion": function (container, vol) { + return describe("womb", container, this.owner, verbose, flat).replace("$VOLUME", volume(vol, unit, false)); }, - "fill": function(owner,container) { + "fill": function (owner, container) { let amount = container.sum_property("mass") * owner.femcumDigestFactor / 1e3; owner.femcumStorage.amount += amount; return amount; }, get description() { let prey = new Container(); - this.contents.forEach(function(x) { + this.contents.forEach(function (x) { prey = prey.merge(x); }); @@ -786,14 +787,14 @@ let macro = //macro controls every customizable part of the players body if (prey.count == 0) { return "Your lower belly is flat."; } else { - if (macro.brutality > 0) { + if (macro.brutality > 0) { return "Your womb tingles as its rhythmically grinds down on " + prey.describeSimple(verbose || flat) + ", turning them soft and wet as they start to dissolve into femcum."; } else { return "Your womb clenches around " + prey.describeSimple(verbose || flat) + "."; } } }, - "contents" : [], + "contents": [], "stages": 3 }, @@ -806,30 +807,30 @@ let macro = //macro controls every customizable part of the players body }, "balls": { - "name" : "balls", - "setup": function(owner) { + "name": "balls", + "setup": function (owner) { this.owner = owner; for (let i = 0; i < this.stages; i++) this.contents.push(new Container()); owner.digest(owner, this, owner.cockDigestTime, owner.cockDigestAuto); }, - "feed": function(prey) { - this.feedFunc(prey,this,this.owner); + "feed": function (prey) { + this.feedFunc(prey, this, this.owner); }, - "feedFunc": function(prey,self,owner) { + "feedFunc": function (prey, self, owner) { this.contents[0] = this.contents[0].merge(prey); }, - "describeDigestion": function(container, vol) { - return describe("balls",container,this.owner,verbose, flat).replace("$VOLUME",volume(vol,unit,false)); + "describeDigestion": function (container, vol) { + return describe("balls", container, this.owner, verbose, flat).replace("$VOLUME", volume(vol, unit, false)); }, - "fill": function(owner,container) { + "fill": function (owner, container) { let amount = container.sum_property("mass") * owner.cumDigestFactor / 1e3; owner.cumStorage.amount += amount; return amount; }, get description() { let prey = new Container(); - this.contents.forEach(function(x) { + this.contents.forEach(function (x) { prey = prey.merge(x); }); @@ -840,14 +841,14 @@ let macro = //macro controls every customizable part of the players body if (prey.count == 0) { return "Your balls are smooth."; } else { - if (macro.brutality > 0) { + if (macro.brutality > 0) { return "Your balls slosh and bulge as they work to convert " + prey.describeSimple(verbose || flat) + " into hot cum."; } else { return "Your balls slosh about, loaded down with " + prey.describeSimple(verbose || flat) + "."; } } }, - "contents" : [], + "contents": [], "stages": 3 }, @@ -860,23 +861,23 @@ let macro = //macro controls every customizable part of the players body }, "breasts": { - "name" : "breasts", - "setup": function(owner) { + "name": "breasts", + "setup": function (owner) { this.owner = owner; for (let i = 0; i < this.stages; i++) this.contents.push(new Container()); owner.digest(owner, this, owner.breastDigestTime, owner.breastDigestAuto); }, - "feed": function(prey) { - this.feedFunc(prey,this,this.owner); + "feed": function (prey) { + this.feedFunc(prey, this, this.owner); }, - "feedFunc": function(prey,self,owner) { + "feedFunc": function (prey, self, owner) { this.contents[0] = this.contents[0].merge(prey); }, - "describeDigestion": function(container, vol) { - return describe("breasts",container,this.owner,verbose, flat).replace("$VOLUME",volume(vol,unit,false)); + "describeDigestion": function (container, vol) { + return describe("breasts", container, this.owner, verbose, flat).replace("$VOLUME", volume(vol, unit, false)); }, - "fill": function(owner,container) { + "fill": function (owner, container) { if (macro.lactationEnabled) { let amount = container.sum_property("mass") * owner.milkDigestFactor / 1e3; owner.milkStorage.amount += amount; @@ -885,7 +886,7 @@ let macro = //macro controls every customizable part of the players body }, get description() { let prey = new Container(); - this.contents.forEach(function(x) { + this.contents.forEach(function (x) { prey = prey.merge(x); }); @@ -896,14 +897,14 @@ let macro = //macro controls every customizable part of the players body if (prey.count == 0) { return "Your breasts are smooth."; } else { - if (macro.brutality > 0) { + if (macro.brutality > 0) { return "Your breasts slosh from side to side, " + prey.describeSimple(verbose || flat) + " slowly digesting into creamy milk."; } else { return "Your breasts bulge with " + prey.describeSimple(verbose || flat) + "."; } } }, - "contents" : [], + "contents": [], "stages": 3 }, get pissDigestFactor() { @@ -915,30 +916,30 @@ let macro = //macro controls every customizable part of the players body }, "bladder": { - "name" : "bladder", - "setup": function(owner) { + "name": "bladder", + "setup": function (owner) { this.owner = owner; for (let i = 0; i < this.stages; i++) this.contents.push(new Container()); owner.digest(owner, this, owner.bladderDigestTime, owner.bladderDigestAuto); }, - "feed": function(prey) { - this.feedFunc(prey,this,this.owner); + "feed": function (prey) { + this.feedFunc(prey, this, this.owner); }, - "feedFunc": function(prey,self,owner) { + "feedFunc": function (prey, self, owner) { this.contents[0] = this.contents[0].merge(prey); }, - "describeDigestion": function(container, vol) { - return describe("bladder",container,this.owner,verbose, flat).replace("$VOLUME",volume(vol,unit,false)); + "describeDigestion": function (container, vol) { + return describe("bladder", container, this.owner, verbose, flat).replace("$VOLUME", volume(vol, unit, false)); }, - "fill": function(owner,container) { + "fill": function (owner, container) { let amount = container.sum_property("mass") * owner.pissDigestFactor / 1e3; owner.pissStorage.amount += amount; return amount; }, get description() { let prey = new Container(); - this.contents.forEach(function(x) { + this.contents.forEach(function (x) { prey = prey.merge(x); }); @@ -949,41 +950,41 @@ let macro = //macro controls every customizable part of the players body if (prey.count == 0) { return "Your bladder has nobody in it."; } else { - if (macro.brutality > 0) { + if (macro.brutality > 0) { return "Your bladder bulges, " + prey.describeSimple(verbose || flat) + " dissolving in your acrid piss."; } else { return "Your bladder bulges with " + prey.describeSimple(verbose || flat) + "."; } } }, - "contents" : [], + "contents": [], "stages": 3 }, "souls": { - "name" : "souls", - "setup": function(owner) { + "name": "souls", + "setup": function (owner) { this.owner = owner; for (let i = 0; i < this.stages; i++) this.contents.push(new Container()); owner.digest(owner, this, owner.soulDigestTime, owner.soulDigestAuto); }, - "feed": function(prey) { - this.feedFunc(prey,this,this.owner); + "feed": function (prey) { + this.feedFunc(prey, this, this.owner); }, - "feedFunc": function(prey,self,owner) { + "feedFunc": function (prey, self, owner) { if (get_living_prey(prey.sum()) > 0) this.contents[0] = this.contents[0].merge(prey); }, - "describeDigestion": function(container) { - return describe("soul-digest",container,this.owner,verbose, flat); + "describeDigestion": function (container) { + return describe("soul-digest", container, this.owner, verbose, flat); }, - "fill": function(owner,container) { - add_victim_people("soul-digest",container); + "fill": function (owner, container) { + add_victim_people("soul-digest", container); }, get description() { let prey = new Container(); - this.contents.forEach(function(x) { + this.contents.forEach(function (x) { prey = prey.merge(x); }); @@ -992,20 +993,20 @@ let macro = //macro controls every customizable part of the players body if (souls == 0) { return "Your depths hold no souls."; } else { - if (macro.brutality > 0) { + if (macro.brutality > 0) { return "Your depths bubble and boil with energy, slowly digesting " + (souls > 1 ? souls + " souls." : "a lonely soul"); } else { return "You feel " + (souls > 1 ? souls + " souls " : "a soul ") + "trapped in your depths."; } } }, - "contents" : [], + "contents": [], "stages": 3 }, "goo": { - "name" : "goo", - "setup": function(owner) { + "name": "goo", + "setup": function (owner) { this.owner = owner; for (let i = 0; i < this.stages; i++) @@ -1016,22 +1017,22 @@ let macro = //macro controls every customizable part of the players body } }, - "feed": function(prey) { - this.feedFunc(prey,this,this.owner); + "feed": function (prey) { + this.feedFunc(prey, this, this.owner); }, - "feedFunc": function(prey,self,owner) { + "feedFunc": function (prey, self, owner) { this.contents[0] = this.contents[0].merge(prey); }, - "describeDigestion": function(container) { + "describeDigestion": function (container) { add_victim_people("goo", container); - return describe("goo-digest",container,this.owner,verbose, flat); + return describe("goo-digest", container, this.owner, verbose, flat); }, - "fill": function(owner,container) { + "fill": function (owner, container) { }, get description() { let prey = new Container(); - this.contents.forEach(function(x) { + this.contents.forEach(function (x) { prey = prey.merge(x); }); @@ -1042,42 +1043,42 @@ let macro = //macro controls every customizable part of the players body if (prey.count == 0) { return "You contain no prey."; } else { - if (macro.gooDigestion) { + if (macro.gooDigestion) { return "Your gooey body contains " + prey.describeSimple(verbose || flat) + ", gradually absorbing them into your bulk."; } else { return "Your gooey body contains " + prey.describeSimple(verbose || flat) + "."; } } }, - "contents" : [], + "contents": [], "stages": 3 }, get breathArea() { return this.scaling(this.baseBreathArea, this.scale, 2); }, "pawsVore": { - "name" : "paws", - "setup": function(owner) { + "name": "paws", + "setup": function (owner) { this.owner = owner; for (let i = 0; i < this.stages; i++) this.contents.push(new Container()); owner.digest(owner, this, owner.pawDigestTime, owner.pawDigestAuto); }, - "feed": function(prey) { - this.feedFunc(prey,this,this.owner); + "feed": function (prey) { + this.feedFunc(prey, this, this.owner); }, - "feedFunc": function(prey,self,owner) { + "feedFunc": function (prey, self, owner) { this.contents[0] = this.contents[0].merge(prey); }, - "describeDigestion" : function(container) { - return describe("paws",container,this.owner,verbose, flat); + "describeDigestion": function (container) { + return describe("paws", container, this.owner, verbose, flat); }, - "fill": function(owner,container) { + "fill": function (owner, container) { }, get description() { let prey = new Container(); - this.contents.forEach(function(x) { + this.contents.forEach(function (x) { prey = prey.merge(x); }); @@ -1091,36 +1092,36 @@ let macro = //macro controls every customizable part of the players body return "Your " + this.owner.footOnlyDesc(true) + " have enveloped " + prey.describeSimple(verbose || flat); } }, - "contents" : [], + "contents": [], "stages": 3 }, "crop": { - "name" : "crop", - "setup": function(owner) { + "name": "crop", + "setup": function (owner) { this.owner = owner; for (let i = 0; i < this.stages; i++) this.contents.push(new Container()); owner.digest(owner, this, owner.cropTransferTime, owner.cropTransferAuto); }, - "feed": function(prey) { - this.feedFunc(prey,this,this.owner); + "feed": function (prey) { + this.feedFunc(prey, this, this.owner); }, - "feedFunc": function(prey,self,owner) { + "feedFunc": function (prey, self, owner) { this.contents[0] = this.contents[0].merge(prey); }, - "describeDigestion" : function(container) { - return describe("crop-transfer",container,this.owner,verbose, flat); + "describeDigestion": function (container) { + return describe("crop-transfer", container, this.owner, verbose, flat); }, - "describeMove" : function(container) { - return describe("crop-transfer",container,this.owner,verbose, flat); + "describeMove": function (container) { + return describe("crop-transfer", container, this.owner, verbose, flat); }, - "fill": function(owner,container) { + "fill": function (owner, container) { }, get description() { let prey = new Container(); - this.contents.forEach(function(x) { + this.contents.forEach(function (x) { prey = prey.merge(x); }); @@ -1134,36 +1135,36 @@ let macro = //macro controls every customizable part of the players body return "Your crop bulges with " + prey.describeSimple(verbose || flat) + "."; } }, - "contents" : [], + "contents": [], "stages": 3 }, "wings": { - "name" : "wings", - "setup": function(owner) { + "name": "wings", + "setup": function (owner) { this.owner = owner; for (let i = 0; i < this.stages; i++) this.contents.push(new Container()); owner.digest(owner, this, owner.wingDigestTime, owner.wingDigestAuto); }, - "feed": function(prey) { - this.feedFunc(prey,this,this.owner); + "feed": function (prey) { + this.feedFunc(prey, this, this.owner); }, - "feedFunc": function(prey,self,owner) { + "feedFunc": function (prey, self, owner) { this.contents[0] = this.contents[0].merge(prey); }, - "describeMove" : function(container) { - return describe("wings-to-stomach",container,this.owner,verbose, flat); + "describeMove": function (container) { + return describe("wings-to-stomach", container, this.owner, verbose, flat); }, - "describeDigestion" : function(container) { - return describe("wings",container,this.owner,verbose, flat); + "describeDigestion": function (container) { + return describe("wings", container, this.owner, verbose, flat); }, - "fill": function(owner,container) { + "fill": function (owner, container) { // no-op }, get description() { let prey = new Container(); - this.contents.forEach(function(x) { + this.contents.forEach(function (x) { prey = prey.merge(x); }); @@ -1174,14 +1175,14 @@ let macro = //macro controls every customizable part of the players body if (prey.count == 0) { return "Your don't have anyone trapped in your " + macro.wingDesc + " wings."; } else { - if (macro.brutality > 0) { + if (macro.brutality > 0) { return "Your " + macro.wingDesc + " wings bulge as they squeeze in on " + prey.describeSimple(verbose || flat) + ", slowly breaking them down."; } else { return "Your " + macro.wingDesc + " wings bulge with " + prey.describeSimple(verbose || flat) + "."; } } }, - "contents" : [], + "contents": [], "stages": 3 }, @@ -1202,7 +1203,7 @@ let macro = //macro controls every customizable part of the players body else return "Your pouch contains " + this.container.describeSimple(verbose || flat); }, - "add": function(victims) { + "add": function (victims) { this.container = this.container.merge(victims); } }, @@ -1216,7 +1217,7 @@ let macro = //macro controls every customizable part of the players body else return "Your sheath contains " + this.container.describeSimple(verbose || flat); }, - "add": function(victims) { + "add": function (victims) { this.container = this.container.merge(victims); } }, @@ -1230,7 +1231,7 @@ let macro = //macro controls every customizable part of the players body else return "Your foreskin bulges with " + this.container.describeSimple(verbose || flat); }, - "add": function(victims) { + "add": function (victims) { this.container = this.container.merge(victims); } }, @@ -1244,7 +1245,7 @@ let macro = //macro controls every customizable part of the players body else return "Your cleavage contains " + this.container.describeSimple(verbose || flat); }, - "add": function(victims) { + "add": function (victims) { this.container = this.container.merge(victims); } }, @@ -1261,7 +1262,7 @@ let macro = //macro controls every customizable part of the players body else return "Your " + macro.shoeDesc(true) + " contain " + this.container.describeSimple(verbose || flat); }, - "add": function(victims) { + "add": function (victims) { this.container = this.container.merge(victims); } }, @@ -1275,7 +1276,7 @@ let macro = //macro controls every customizable part of the players body else return "Your " + macro.sockDesc(true) + " contain " + this.container.describeSimple(verbose || flat); }, - "add": function(victims) { + "add": function (victims) { this.container = this.container.merge(victims); } }, @@ -1289,12 +1290,12 @@ let macro = //macro controls every customizable part of the players body else return "You have " + this.container.describeSimple(verbose || flat) + " wedged between your " + this.owner.toeDesc(true); }, - "add": function(victims) { + "add": function (victims) { this.container = this.container.merge(victims); } }, - "init": function() { + "init": function () { this.stomach.setup(this); this.bowels.setup(this); this.tail.setup(this); @@ -1347,25 +1348,25 @@ let macro = //macro controls every customizable part of the players body this.fillScat(this); }, - "fillCum": function(self) { + "fillCum": function (self) { self.cumStorage.amount += self.cumStorage.limit * self.baseCumProduction * fillPeriod / 1000; if (self.cumStorage.amount > self.cumStorage.limit) self.arouse(1 * (self.cumStorage.amount / self.cumStorage.limit - 1)); setTimeout(function () { self.fillCum(self); }, fillPeriod); }, - "fillFemcum": function(self) { + "fillFemcum": function (self) { self.femcumStorage.amount += self.femcumStorage.limit * self.baseFemcumProduction * fillPeriod / 1000; if (self.femcumStorage.amount > self.femcumStorage.limit) self.arouse(1 * (self.femcumStorage.amount / self.femcumStorage.limit - 1)); setTimeout(function () { self.fillFemcum(self); }, fillPeriod); }, - "fillBreasts": function(self) { + "fillBreasts": function (self) { self.milkStorage.amount += self.milkStorage.limit * self.baseLactationProduction * fillPeriod / 1000; if (self.milkStorage.amount > self.milkStorage.limit) { - breast_milk(self.milkStorage.amount - self.milkStorage.limit/2); + breast_milk(self.milkStorage.amount - self.milkStorage.limit / 2); } if (self.milkStorage.amount > self.milkStorage.limit) { @@ -1374,13 +1375,13 @@ let macro = //macro controls every customizable part of the players body setTimeout(function () { self.fillBreasts(self); }, fillPeriod); }, - "fillGas": function(self) { + "fillGas": function (self) { self.gasStorage.amount += self.gasStorage.limit * self.baseGasProduction * fillPeriod / 1000; let ratio = self.gasStorage.amount / self.gasStorage.limit; - if (ratio > 1 && Math.random()*100 < ratio || ratio > 2) { - let amount = self.gasStorage.amount - self.gasStorage.limit*3/4; + if (ratio > 1 && Math.random() * 100 < ratio || ratio > 2) { + let amount = self.gasStorage.amount - self.gasStorage.limit * 3 / 4; if (self.belchEnabled && self.fartEnabled) { if (Math.random() < 0.5) belch(amount, false); @@ -1406,7 +1407,7 @@ let macro = //macro controls every customizable part of the players body return (this.urethraStretchDiameter * this.urethraStretchDiameter / 4) * Math.PI; }, - "fillPiss": function(self) { + "fillPiss": function (self) { self.pissStorage.amount += self.pissStorage.limit * self.basePissProduction * fillPeriod / 1000; if (self.pissStorage.amount > self.pissStorage.limit * 2) @@ -1414,7 +1415,7 @@ let macro = //macro controls every customizable part of the players body setTimeout(function () { self.fillPiss(self); }, fillPeriod); }, - "fillScat": function(self) { + "fillScat": function (self) { self.scatStorage.amount += self.scatStorage.limit * self.baseScatProduction * fillPeriod / 1000; if (self.scatStorage.amount > self.scatStorage.limit * 2) @@ -1446,14 +1447,14 @@ let macro = //macro controls every customizable part of the players body "gasStorage": { "amount": 0, get limit() { - return Math.pow(this.owner.scale,3) / 1000 * this.owner.gasStorageScale; + return Math.pow(this.owner.scale, 3) / 1000 * this.owner.gasStorageScale; } }, "pissStorage": { "amount": 0, get limit() { - return Math.pow(this.owner.scale,3) / 5000 * this.owner.pissStorageScale; + return Math.pow(this.owner.scale, 3) / 5000 * this.owner.pissStorageScale; } }, @@ -1461,7 +1462,7 @@ let macro = //macro controls every customizable part of the players body "amount": 0, "victims": new Container(), get limit() { - return Math.pow(this.owner.scale,3) / 1000 * this.owner.scatStorageScale; + return Math.pow(this.owner.scale, 3) / 1000 * this.owner.scatStorageScale; } }, @@ -1481,7 +1482,7 @@ let macro = //macro controls every customizable part of the players body } }, - "arouse": function(amount) { + "arouse": function (amount) { if (!this.arousalEnabled) return; @@ -1498,7 +1499,7 @@ let macro = //macro controls every customizable part of the players body if (!this.orgasm) { this.orgasm = true; - update(["You shudder as ecstasy races up your spine",newline], false); + update(["You shudder as ecstasy races up your spine", newline], false); if (this.maleParts) { this.maleOrgasm(this); if (this.sheath.container.count > 0) @@ -1516,7 +1517,7 @@ let macro = //macro controls every customizable part of the players body } }, - "quench": function(amount) { + "quench": function (amount) { if (!this.arousalEnabled) return; @@ -1535,17 +1536,17 @@ let macro = //macro controls every customizable part of the players body } }, - "quenchExcess": function(self) { + "quenchExcess": function (self) { if (self.arousalEnabled) { if (self.arousal > 100 && !self.orgasm) { - self.arousal = Math.max(100,self.arousal-1); + self.arousal = Math.max(100, self.arousal - 1); self.edge += Math.sqrt((self.arousal - 100)) / 500 * macro.edgeFactor; - self.edge = Math.min(1,self.edge); + self.edge = Math.min(1, self.edge); if (self.maleParts) - self.maleSpurt += ((self.arousal-100)/100 + Math.random()) / 25 * (self.edge); + self.maleSpurt += ((self.arousal - 100) / 100 + Math.random()) / 25 * (self.edge); if (self.femaleParts) - self.femaleSpurt += ((self.arousal-100)/100 + Math.random()) / 25 * (self.edge); + self.femaleSpurt += ((self.arousal - 100) / 100 + Math.random()) / 25 * (self.edge); if (self.maleSpurt > 1) { male_spurt(macro.cumVolume * (0.1 + Math.random() / 10), false); @@ -1559,13 +1560,13 @@ let macro = //macro controls every customizable part of the players body self.quench(1); } else if (self.afterglow) { self.quench(0.5); - self.edge = Math.max(0,self.edge - 0.01); + self.edge = Math.max(0, self.edge - 0.01); } } - setTimeout(function() { self.quenchExcess(self); }, 200); + setTimeout(function () { self.quenchExcess(self); }, 200); }, - "maleOrgasm": function(self, times=0) { + "maleOrgasm": function (self, times = 0) { if (!this.arousalEnabled) return; @@ -1578,11 +1579,11 @@ let macro = //macro controls every customizable part of the players body } this.cumStorage.amount -= spurt; male_orgasm(spurt, false); - setTimeout(function() { self.maleOrgasm(self); }, 5000); + setTimeout(function () { self.maleOrgasm(self); }, 5000); } }, - "femaleOrgasm": function(self) { + "femaleOrgasm": function (self) { if (!this.arousalEnabled) return; @@ -1596,21 +1597,21 @@ let macro = //macro controls every customizable part of the players body this.femcumStorage.amount -= spurt; female_orgasm(spurt, false); - setTimeout(function() { self.femaleOrgasm(self); }, 5000); + setTimeout(function () { self.femaleOrgasm(self); }, 5000); } }, - "nullOrgasm": function(self) { + "nullOrgasm": function (self) { if (!this.arousalEnabled) return; if (this.orgasm) { - setTimeout(function() { self.nullOrgasm(self); }, 2000); + setTimeout(function () { self.nullOrgasm(self); }, 2000); } }, get totalMass() { - let base = Math.pow(this.scale,3) * this.baseMass; + let base = Math.pow(this.scale, 3) * this.baseMass; if (this.hasTail) { base += this.tailMass * this.tailCount; @@ -1761,7 +1762,7 @@ let macro = //macro controls every customizable part of the players body } else if (this.arousal < 150) { state = "erect, throbbing"; } else if (this.arousal < 200) { - state = "erect, throbbing, pre-soaked"; + state = "erect, throbbing, pre-soaked"; } } @@ -1797,96 +1798,102 @@ let macro = //macro controls every customizable part of the players body // const biomeEnum = { - City: { - enabled: "cityEnabled", - biomeSize: [1000,5000], //[min,max] Note: this is the distance you will walk until getting to the end of the biome - biomeWeights: { //Weights determine if and how often you run into something while inside of a biome - "House": 0.1, - "Car": 0.07, - "Bus": 0.02, - "Business": 0.075, - "Parking Garage": 0.003, - "Small Skyscraper": 0.05, - "City": 0.00005 - }}, - Downtown: { - enabled: "downtownEnabled", - biomeSize: [1000,5000], //[min,max] Note: this is the distance you will walk until getting to the end of the biome - biomeWeights: { //Weights determine if and how often you run into something while inside of a biome - "Car": 0.1, - "Bus": 0.05, - "Tram": 0.03, - "Business": 0.075, - "Parking Garage": 0.003, - "Small Skyscraper": 0.06, - "City": 0.00005 - }}, - Rural: { - enabled: "ruralEnabled", - biomeSize: [4000,8000], //[min,max] Note: this is the distance you will walk until getting to the end of the biome - biomeWeights: { //Weights determine if and how often you run into something while inside of a biome - "Cow": 0.005, - "House": 0.1, - "Barn": 0.08, - "Car": 0.1, - "Train": 0.002, - "Business": 0.075, - "Ranch": 0.01, - "Airstrip": 0.002, - "Airport": 0.002, - "Town": 0.00001 - }}, - Suburb: { - enabled: "suburbEnabled", - biomeSize: [2000,7000], //[min,max] Note: this is the distance you will walk until getting to the end of the biome - biomeWeights: { //Weights determine if and how often you run into something while inside of a biome - "House": 0.1, - "Car": 0.07, - "Bus": 0.01, - "Town": 0.00001 - }}}; + City: { + enabled: "cityEnabled", + biomeSize: [1000, 5000], //[min,max] Note: this is the distance you will walk until getting to the end of the biome + biomeWeights: { //Weights determine if and how often you run into something while inside of a biome + "House": 0.1, + "Car": 0.07, + "Bus": 0.02, + "Business": 0.075, + "Parking Garage": 0.003, + "Small Skyscraper": 0.05, + "City": 0.00005 + } + }, + Downtown: { + enabled: "downtownEnabled", + biomeSize: [1000, 5000], //[min,max] Note: this is the distance you will walk until getting to the end of the biome + biomeWeights: { //Weights determine if and how often you run into something while inside of a biome + "Car": 0.1, + "Bus": 0.05, + "Tram": 0.03, + "Business": 0.075, + "Parking Garage": 0.003, + "Small Skyscraper": 0.06, + "City": 0.00005 + } + }, + Rural: { + enabled: "ruralEnabled", + biomeSize: [4000, 8000], //[min,max] Note: this is the distance you will walk until getting to the end of the biome + biomeWeights: { //Weights determine if and how often you run into something while inside of a biome + "Cow": 0.005, + "House": 0.1, + "Barn": 0.08, + "Car": 0.1, + "Train": 0.002, + "Business": 0.075, + "Ranch": 0.01, + "Airstrip": 0.002, + "Airport": 0.002, + "Town": 0.00001 + } + }, + Suburb: { + enabled: "suburbEnabled", + biomeSize: [2000, 7000], //[min,max] Note: this is the distance you will walk until getting to the end of the biome + biomeWeights: { //Weights determine if and how often you run into something while inside of a biome + "House": 0.1, + "Car": 0.07, + "Bus": 0.01, + "Town": 0.00001 + } + } +}; let biome = biomeEnum.City; //starting biome(this will be overwritten by player selection as soon as game starts) let biomeSize = 3000; // size of starting biome(this will be overwritten by player selection as soon as game starts) let position = 0; //declares variable and starts player at 0 as they have not taken a step yet -function updateBiome(forceNew=false, specifyBiome)//handles stepping between biomes -{ - if(macro.height > 1e12 || macro.changingBiomes==false){ //stops function from running once it stops being relevant - return - } - let strideSize = macro.height*.4; //adjust step size based on height - position += strideSize; //adds distance from step into total disance traveled through biome - - if (position > biomeSize || forceNew==true){ //if player steps out of biome, generates a new one - position=0; - let oldBiome = biome; - let biomeTemp = biome; //defines biomeTemp for latrer use, what it is set to does not matter - if (specifyBiome == undefined){ - biomeTemp = pickString(biomeEnum.City,biomeEnum.Suburb,biomeEnum.Rural,biomeEnum.Downtown); //if a biome is not force into this function, it picks a random biome - }else{ //otherwise it sets the new biome to the selected one - biomeTemp = specifyBiome;} - if (macro[(biomeTemp.enabled)] == false){ //checks that the biome selected is actually enabled and if it is not, reruns the function - updateBiome(true); //side effect of this order is that if the user selects an invalid biome - return; - } - biome = biomeTemp //if biome passes all checks to allow creation, sets it as biome player is in - generateBiome(); //assigns a size to new biome - - if (oldBiome !== biome){//only alerts player if the biome type actually changed - look(true); - } - } -} - -function generateBiome(){ //creates the biome in accordance with its specific settings(only controls size now but needs to be a seperate function due to way game starts) - let offset = biome.biomeSize[0] //Math.random generates a random value from 0-1. biome.biomeSize denotes min and max size for each type of biome - let multiplier = (biome.biomeSize[1]-offset) //if Math.random generated 0, we need the min value, so min value becomes offset. if it is 1, we need - biomeSize = ((Math.random()*multiplier)+offset); // max value so we multiply 1 by the (maxvalue - minvalue)+minvalue to cap out at max value. +function updateBiome(forceNew = false, specifyBiome)//handles stepping between biomes +{ + if (macro.height > 1e12 || macro.changingBiomes == false) { //stops function from running once it stops being relevant + return + } + let strideSize = macro.height * .4; //adjust step size based on height + position += strideSize; //adds distance from step into total disance traveled through biome + + if (position > biomeSize || forceNew == true) { //if player steps out of biome, generates a new one + position = 0; + let oldBiome = biome; + let biomeTemp = biome; //defines biomeTemp for latrer use, what it is set to does not matter + if (specifyBiome == undefined) { + biomeTemp = pickString(biomeEnum.City, biomeEnum.Suburb, biomeEnum.Rural, biomeEnum.Downtown); //if a biome is not force into this function, it picks a random biome + } else { //otherwise it sets the new biome to the selected one + biomeTemp = specifyBiome; + } + if (macro[(biomeTemp.enabled)] == false) { //checks that the biome selected is actually enabled and if it is not, reruns the function + updateBiome(true); //side effect of this order is that if the user selects an invalid biome + return; } + biome = biomeTemp //if biome passes all checks to allow creation, sets it as biome player is in + generateBiome(); //assigns a size to new biome + + if (oldBiome !== biome) {//only alerts player if the biome type actually changed + look(true); + } + } +} -function look(onlyBiome=false) //onlyBiome means don't include player description when looking at surroundings +function generateBiome() { //creates the biome in accordance with its specific settings(only controls size now but needs to be a seperate function due to way game starts) + let offset = biome.biomeSize[0] //Math.random generates a random value from 0-1. biome.biomeSize denotes min and max size for each type of biome + let multiplier = (biome.biomeSize[1] - offset) //if Math.random generated 0, we need the min value, so min value becomes offset. if it is 1, we need + biomeSize = ((Math.random() * multiplier) + offset); // max value so we multiply 1 by the (maxvalue - minvalue)+minvalue to cap out at max value. +} + +function look(onlyBiome = false) //onlyBiome means don't include player description when looking at surroundings { let playerDesc = macro.description; @@ -1897,72 +1904,71 @@ function look(onlyBiome=false) //onlyBiome means don't include player descriptio else if (macro.height > 1e6) areaDesc = "You're " + (strolling ? "strolling" : "standing") + "...on pretty much everything at once."; else - switch(biome) { + switch (biome) { case biomeEnum.Rural: areaDesc = "You're " + (strolling ? "strolling" : "standing") + " amongst rural farmhouses and expansive ranches. Cattle are milling about at your feet."; break; case biomeEnum.Suburb: areaDesc = "You're " + (strolling ? "striding" : "standing") + " through the winding roads of a suburb."; break; case biomeEnum.City: if (macro.height < 6) { areaDesc = "You are " + (strolling ? "strolling" : "standing") + " in the street of a city. Several " + (macro.victimsHuman ? "humans" : "people") + " have noticed your intimidating presence and are beginning to run."; break; } else if (macro.height < 24) { - areaDesc = "Your broad frame fills the street of the city you are terrorizing. Your presence has caused a pileup of vehicles trying to escape."; break; - } else if (macro.height < 100){ + areaDesc = "Your broad frame fills the street of the city you are terrorizing. Your presence has caused a pileup of vehicles trying to escape."; break; + } else if (macro.height < 100) { areaDesc = "You are too large for the city streets you are " + (strolling ? "strolling through." : "standing in.") + " Your hulking frame scrapes against building after building, leaving a clear indicator of your path. Gridlock is starting to set in, with people honking and trying to drive away on the sidewalks."; break; - } else if (macro.height < 500){ + } else if (macro.height < 500) { areaDesc = "You are " + (strolling ? "strolling through" : "looming over") + " a bustling city. Your mammoth frame is on par with the few nearby skyscrapers. You forge your own path, leaving a swath of demolished buildings. Panic has fully gripped the city; the streets are filled with vehicles, all immobile."; break; - } else if (macro.height < 2500){ - areaDesc = "You are " + (strolling ? "strolling over" : "looming over") + " a city in the midst of chaos. Your colossal bulk blots out the sky, and makes the couple of remaining skyscrapers look small in comparison. You can clearly see the imprints of your " + macro.footDesc(true) + ". Traffic is gridlocked as far as you can see." ; break; + } else if (macro.height < 2500) { + areaDesc = "You are " + (strolling ? "strolling over" : "looming over") + " a city in the midst of chaos. Your colossal bulk blots out the sky, and makes the couple of remaining skyscrapers look small in comparison. You can clearly see the imprints of your " + macro.footDesc(true) + ". Traffic is gridlocked as far as you can see."; break; } else { areaDesc = "You're terrorizing the streets of a city. Heavy traffic, worsened by your rampage, is everywhere."; break; } - case biomeEnum.Downtown: + case biomeEnum.Downtown: if (macro.height < 6) { areaDesc = "You are " + (strolling ? "strolling" : "standing") + " in packed downtown streets. Several " + (macro.victimsHuman ? "humans" : "people") + " have noticed your intimidating presence and are beginning to run."; break; } else if (macro.height < 24) { - areaDesc = "Your broad frame fills the street of the city center. Your presence has caused a pileup of vehicles trying to escape."; break; - } else if (macro.height < 100){ + areaDesc = "Your broad frame fills the street of the city center. Your presence has caused a pileup of vehicles trying to escape."; break; + } else if (macro.height < 100) { areaDesc = "You are too large for the city streets you are " + (strolling ? "strolling through." : "standing in.") + " Your hulking frame scrapes against building after building, leaving a clear indicator of your path. Gridlock is starting to set in, with people honking and trying to drive away on the sidewalks."; break; - } else if (macro.height < 500){ + } else if (macro.height < 500) { areaDesc = "You are " + (strolling ? "strolling through" : "looming over") + " a bustling city. Your mammoth frame is on par with the glittering skyscrapers that surround you. You forge your own path, leaving a swath of demolished buildings. Panic has fully gripped the city; the streets are filled with vehicles, all immobile."; break; - } else if (macro.height < 2500){ - areaDesc = "You are " + (strolling ? "strolling over" : "looming over") + " a city in the midst of chaos. Your colossal bulk blots out the sky, and makes the remaining skyscrapers look small in comparison. You can clearly see the imprints of your " + macro.footDesc(true) + ". Traffic is gridlocked as far as you can see, and farther." ; break; + } else if (macro.height < 2500) { + areaDesc = "You are " + (strolling ? "strolling over" : "looming over") + " a city in the midst of chaos. Your colossal bulk blots out the sky, and makes the remaining skyscrapers look small in comparison. You can clearly see the imprints of your " + macro.footDesc(true) + ". Traffic is gridlocked as far as you can see, and farther."; break; } else { areaDesc = "You're lurking amongst the skyscrapers of downtown. The streets are packed, and the buildings are practically begging you to knock them over."; break; } } - if (onlyBiome == true){ - update([areaDesc,newline]); - } else { - let desc = playerDesc.concat([newline,areaDesc,newline]); - update(desc); + if (onlyBiome == true) { + update([areaDesc, newline]); + } else { + let desc = playerDesc.concat([newline, areaDesc, newline]); + update(desc); } } -function toggle_auto(e) -{ - switch(strolling) { //Changes how fast player is moving, if player is running, sets player back to standing +function toggle_auto(e) { + switch (strolling) { //Changes how fast player is moving, if player is running, sets player back to standing case strollingEnum.Standing: - strolling = strollingEnum.Strolling; - e.target.innerText = "Status: Strolling"; - update(["You start walking.",newline]); - break; + strolling = strollingEnum.Strolling; + e.target.innerText = "Status: Strolling"; + update(["You start walking.", newline]); + break; case strollingEnum.Strolling: - strolling = strollingEnum.Jogging; - e.target.innerText = "Status: Jogging"; - update(["You start jogging.",newline]); - break; + strolling = strollingEnum.Jogging; + e.target.innerText = "Status: Jogging"; + update(["You start jogging.", newline]); + break; case strollingEnum.Jogging: - strolling = strollingEnum.Running; - e.target.innerText = "Status: Running"; - update(["You start running.",newline]); - break; + strolling = strollingEnum.Running; + e.target.innerText = "Status: Running"; + update(["You start running.", newline]); + break; case strollingEnum.Running: - strolling = strollingEnum.Standing; - e.target.innerText = "Status: Standing"; - update(["You stop running..",newline]); - break; - } + strolling = strollingEnum.Standing; + e.target.innerText = "Status: Standing"; + update(["You stop running..", newline]); + break; + } // strolling = !strolling; // e.target.innerText = "Status: " + (strolling ? "Strolling" : "Standing"); //if (strolling) @@ -1972,9 +1978,8 @@ function toggle_auto(e) //this is the old code where strolling is defined as true and false(strolling is now referencing an Enum) should probably be ripped out if this ever makes it onto the main Repo } -function toggle_units(e) -{ - switch(unit) { +function toggle_units(e) { + switch (unit) { case "metric": unit = "SI"; break; case "SI": unit = "customary"; break; case "customary": unit = "US"; break; @@ -1987,9 +1992,8 @@ function toggle_units(e) update(); } -function toggle_units_options(e) -{ - switch(unit) { +function toggle_units_options(e) { + switch (unit) { case "metric": unit = "SI"; break; case "SI": unit = "customary"; break; case "customary": unit = "US"; break; @@ -2002,9 +2006,9 @@ function toggle_units_options(e) } function toggle_numbers(e) { - switch(numbers) { - case "full": numbers="prefix"; break; - case "prefix": numbers="words"; break; + switch (numbers) { + case "full": numbers = "prefix"; break; + case "prefix": numbers = "words"; break; case "words": numbers = "scientific"; break; case "scientific": numbers = "full"; break; } @@ -2014,9 +2018,8 @@ function toggle_numbers(e) { update(); } -function toggle_verbose(e) -{ - switch(text_verbosity) { +function toggle_verbose(e) { + switch (text_verbosity) { case "verbose": text_verbosity = "concise"; e.target.innerText = "Concise Text"; @@ -2038,8 +2041,7 @@ function toggle_verbose(e) } } -function toggle_arousal(e) -{ +function toggle_arousal(e) { macro.arousalEnabled = !macro.arousalEnabled; e.target.innerText = (macro.arousalEnabled ? "Arousal On" : "Arousal Off"); @@ -2060,14 +2062,13 @@ function toggle_arousal(e) macro.orgasm = false; macro.afterglow = false; - enable_victim("cum-flood","Flooded by cum"); - enable_victim("femcum-flood","Flooded by femcum"); + enable_victim("cum-flood", "Flooded by cum"); + enable_victim("femcum-flood", "Flooded by femcum"); } // lists out total people -function summarize(sum, fatal = true) -{ +function summarize(sum, fatal = true) { let word; let count = get_living_prey(sum); if (fatal && macro.brutality > 0) @@ -2080,8 +2081,7 @@ function summarize(sum, fatal = true) return "(" + count + " " + word + ")"; } -function getOnePrey(biome, area, sameSize = true) -{ +function getOnePrey(biome, area, sameSize = true) { if (macro.shrunkPrey != null) { return getPrey(biome, area, sameSize); } @@ -2098,14 +2098,14 @@ function getOnePrey(biome, area, sameSize = true) let potAreas = []; potential.forEach(function (x) { - potAreas.push([x,things[x].area]); + potAreas.push([x, things[x].area]); }); - potAreas = potAreas.sort(function (x,y) { + potAreas = potAreas.sort(function (x, y) { return y[1] - x[1]; }); - for (let i=0; i 0 ? 20 : 10)); } -function cleavage_drop() -{ +function cleavage_drop() { let prey = macro.cleavage.container; macro.cleavage.container = new Container(); let line = describe("cleavage-drop", prey, macro, verbose, flat); @@ -2820,16 +2804,15 @@ function cleavage_drop() let preyMass = prey.sum_property("mass"); - let sound = getSound("drop",preyMass); + let sound = getSound("drop", preyMass); - add_victim_people("cleavage-drop",prey); - update([sound,line,linesummary,newline]); + add_victim_people("cleavage-drop", prey); + update([sound, line, linesummary, newline]); macro.arouse((preyMass > 0 ? 15 : 5)); } -function cleavage_absorb() -{ +function cleavage_absorb() { let prey = macro.cleavage.container; macro.cleavage.container = new Container(); let line = describe("cleavage-absorb", prey, macro, verbose, flat); @@ -2839,20 +2822,19 @@ function cleavage_absorb() let preyMass = prey.sum_property("mass"); - let sound = getSound("insert",preyMass); + let sound = getSound("insert", preyMass); - add_victim_people("cleavage-absorb",prey); - update([sound,line,linesummary,newline]); + add_victim_people("cleavage-absorb", prey); + update([sound, line, linesummary, newline]); macro.arouse((preyMass > 0 ? 15 : 5)); - if (preyMass > 0){ + if (preyMass > 0) { grow_automatic(preyMass, "breasts"); } } -function breast_toy() -{ +function breast_toy() { let prey = macro.cleavage.container; let line = describe("breast-toy", prey, macro, verbose, flat); let linesummary = summarize(prey.sum(), false); @@ -2861,14 +2843,13 @@ function breast_toy() let preyMass = prey.sum_property("mass"); - let sound = getSound("insert",preyMass); + let sound = getSound("insert", preyMass); - update([sound,line,linesummary,newline]); + update([sound, line, linesummary, newline]); macro.arouse(15); } -function breast_crush() -{ +function breast_crush() { let area = macro.breastArea; let prey = getPrey(biome, area, macro.sameSizeStomp); let line = describe("breast-crush", prey, macro, verbose, flat); @@ -2878,11 +2859,11 @@ function breast_crush() let preyMass = prey.sum_property("mass"); - let sound = getSound("crush",preyMass); + let sound = getSound("crush", preyMass); - add_victim_people("breast-crush",prey); + add_victim_people("breast-crush", prey); - update([sound,line,linesummary,newline]); + update([sound, line, linesummary, newline]); if (macro.lactationEnabled && macro.milkStorage.amount / macro.milkStorage.limit > 0.5) { let amount = Math.min(macro.lactationVolume, (macro.milkStorage.amount / macro.milkStorage.limit - 0.5) * macro.milkStorage.limit); @@ -2892,10 +2873,9 @@ function breast_crush() macro.arouse(10); } -function breast_vore() -{ +function breast_vore() { // todo nipple areas? - let area = macro.breastStretchArea/4; + let area = macro.breastStretchArea / 4; let prey = getPrey(biome, area, macro.sameSizeBreastVore); let line = describe("breast-vore", prey, macro, verbose, flat); let linesummary = summarize(prey.sum(), false); @@ -2904,12 +2884,12 @@ function breast_vore() let preyMass = prey.sum_property("mass"); - let sound = getSound("insert",preyMass); + let sound = getSound("insert", preyMass); - add_victim_people("breast-vore",prey); + add_victim_people("breast-vore", prey); macro.breasts.feed(prey); - update([sound,line,linesummary,newline]); + update([sound, line, linesummary, newline]); if (macro.lactationEnabled && macro.milkStorage.amount / macro.milkStorage.limit > 0.5) { let amount = Math.min(macro.lactationVolume, (macro.milkStorage.amount / macro.milkStorage.limit - 0.5) * macro.milkStorage.limit); @@ -2919,34 +2899,32 @@ function breast_vore() macro.arouse(10); } -function breast_milk(vol, active=true) -{ +function breast_milk(vol, active = true) { if (vol == undefined) { vol = Math.min(macro.lactationVolume, macro.milkStorage.amount); } macro.milkStorage.amount -= vol; - let area = Math.pow(vol, 2/3); + let area = Math.pow(vol, 2 / 3); let prey = getPrey(biome, area); - let line = describe("breast-milk", prey, macro, verbose, flat).replace("$VOLUME",volume(vol,unit,false)); + let line = describe("breast-milk", prey, macro, verbose, flat).replace("$VOLUME", volume(vol, unit, false)); let linesummary = summarize(prey.sum(), true); let people = get_living_prey(prey.sum()); let preyMass = prey.sum_property("mass"); - let sound = getSound("liquid",preyMass); + let sound = getSound("liquid", preyMass); - add_victim_people("milk-flood",prey); - update([sound,line,linesummary,newline], active); + add_victim_people("milk-flood", prey); + update([sound, line, linesummary, newline], active); macro.arouse(20); } -function unbirth() -{ +function unbirth() { let area = macro.vaginaStretchArea; let prey = getPrey(biome, area, macro.sameSizeUnbirth); let line = describe("unbirth", prey, macro, verbose, flat); @@ -2956,17 +2934,16 @@ function unbirth() let preyMass = prey.sum_property("mass"); - let sound = getSound("insert",preyMass); + let sound = getSound("insert", preyMass); macro.womb.feed(prey); - add_victim_people("unbirth",prey); - update([sound,line,linesummary,newline]); + add_victim_people("unbirth", prey); + update([sound, line, linesummary, newline]); macro.arouse(20); } -function slit_toy() -{ +function slit_toy() { let prey = macro.womb.contents[0].merge(macro.womb.contents[1]); let line = describe("slit-toy", prey, macro, verbose, flat); let linesummary = summarize(prey.sum(), false); @@ -2975,14 +2952,13 @@ function slit_toy() let preyMass = prey.sum_property("mass"); - let sound = getSound("insert",preyMass); + let sound = getSound("insert", preyMass); - update([sound,line,linesummary,newline]); + update([sound, line, linesummary, newline]); macro.arouse(15); } -function sheath_stuff() -{ +function sheath_stuff() { let area = Math.min(macro.handArea, macro.dickArea); let prey = getPrey(biome, area); let line = describe("sheath-stuff", prey, macro, verbose, flat); @@ -2992,16 +2968,15 @@ function sheath_stuff() let preyMass = prey.sum_property("mass"); - let sound = getSound("insert",preyMass); + let sound = getSound("insert", preyMass); macro.sheath.add(prey); - update([sound,line,linesummary,newline]); + update([sound, line, linesummary, newline]); macro.arouse(15); } -function sheath_toy() -{ +function sheath_toy() { let prey = macro.sheath.container; let line = describe("sheath-toy", prey, macro, verbose, flat); let linesummary = summarize(prey.sum(), false); @@ -3010,14 +2985,13 @@ function sheath_toy() let preyMass = prey.sum_property("mass"); - let sound = getSound("insert",preyMass); + let sound = getSound("insert", preyMass); - update([sound,line,linesummary,newline]); + update([sound, line, linesummary, newline]); macro.arouse(15); } -function sheath_clench() -{ +function sheath_clench() { let prey = macro.sheath.container; macro.sheath.container = new Container(); let line = describe("sheath-clench", prey, macro, verbose, flat); @@ -3027,15 +3001,14 @@ function sheath_clench() let preyMass = prey.sum_property("mass"); - let sound = getSound("crush",preyMass); + let sound = getSound("crush", preyMass); - add_victim_people("sheath-crush",prey); - update([sound,line,linesummary,newline]); + add_victim_people("sheath-crush", prey); + update([sound, line, linesummary, newline]); macro.arouse(45); } -function sheath_crush() -{ +function sheath_crush() { let prey = macro.sheath.container; macro.sheath.container = new Container(); let line = describe("sheath-crush", prey, macro, verbose, flat); @@ -3045,15 +3018,14 @@ function sheath_crush() let preyMass = prey.sum_property("mass"); - let sound = getSound("crush",preyMass); + let sound = getSound("crush", preyMass); - add_victim_people("sheath-crush",prey); - update([sound,line,linesummary,newline]); + add_victim_people("sheath-crush", prey); + update([sound, line, linesummary, newline]); macro.arouse(45); } -function sheath_absorb() -{ +function sheath_absorb() { let prey = macro.sheath.container; macro.sheath.container = new Container(); let line = describe("sheath-absorb", prey, macro, verbose, flat); @@ -3063,20 +3035,19 @@ function sheath_absorb() let preyMass = prey.sum_property("mass"); - let sound = getSound("insert",preyMass); + let sound = getSound("insert", preyMass); - add_victim_people("sheath-absorb",prey); - update([sound,line,linesummary,newline]); + add_victim_people("sheath-absorb", prey); + update([sound, line, linesummary, newline]); - if (preyMass > 0){ + if (preyMass > 0) { grow_automatic(preyMass, "cock"); } macro.arouse(45); } -function foreskin_stuff() -{ +function foreskin_stuff() { let area = Math.min(macro.handArea, macro.dickArea); let prey = getPrey(biome, area); let line = describe("foreskin-stuff", prey, macro, verbose, flat); @@ -3086,16 +3057,15 @@ function foreskin_stuff() let preyMass = prey.sum_property("mass"); - let sound = getSound("insert",preyMass); + let sound = getSound("insert", preyMass); macro.foreskin.add(prey); - update([sound,line,linesummary,newline]); + update([sound, line, linesummary, newline]); macro.arouse(15); } -function foreskin_toy() -{ +function foreskin_toy() { let prey = macro.foreskin.container; let line = describe("foreskin-toy", prey, macro, verbose, flat); let linesummary = summarize(prey.sum(), false); @@ -3104,14 +3074,13 @@ function foreskin_toy() let preyMass = prey.sum_property("mass"); - let sound = getSound("insert",preyMass); + let sound = getSound("insert", preyMass); - update([sound,line,linesummary,newline]); + update([sound, line, linesummary, newline]); macro.arouse(15); } -function foreskin_clench() -{ +function foreskin_clench() { let prey = macro.foreskin.container; macro.foreskin.container = new Container(); let line = describe("foreskin-clench", prey, macro, verbose, flat); @@ -3121,15 +3090,14 @@ function foreskin_clench() let preyMass = prey.sum_property("mass"); - let sound = getSound("crush",preyMass); + let sound = getSound("crush", preyMass); - add_victim_people("foreskin-crush",prey); - update([sound,line,linesummary,newline]); + add_victim_people("foreskin-crush", prey); + update([sound, line, linesummary, newline]); macro.arouse(45); } -function foreskin_crush() -{ +function foreskin_crush() { let prey = macro.foreskin.container; macro.foreskin.container = new Container(); let line = describe("foreskin-crush", prey, macro, verbose, flat); @@ -3139,15 +3107,14 @@ function foreskin_crush() let preyMass = prey.sum_property("mass"); - let sound = getSound("crush",preyMass); + let sound = getSound("crush", preyMass); - add_victim_people("foreskin-crush",prey); - update([sound,line,linesummary,newline]); + add_victim_people("foreskin-crush", prey); + update([sound, line, linesummary, newline]); macro.arouse(45); } -function foreskin_absorb() -{ +function foreskin_absorb() { let prey = macro.foreskin.container; macro.foreskin.container = new Container(); let line = describe("foreskin-absorb", prey, macro, verbose, flat); @@ -3157,20 +3124,19 @@ function foreskin_absorb() let preyMass = prey.sum_property("mass"); - let sound = getSound("insert",preyMass); + let sound = getSound("insert", preyMass); - add_victim_people("foreskin-absorb",prey); - update([sound,line,linesummary,newline]); + add_victim_people("foreskin-absorb", prey); + update([sound, line, linesummary, newline]); - if (preyMass > 0){ + if (preyMass > 0) { grow_automatic(preyMass, "cock"); } - + macro.arouse(45); } -function cockslap(active=true) -{ +function cockslap(active = true) { let area = macro.dickArea; let prey = getPrey(biome, area); let line = describe("cockslap", prey, macro, verbose, flat); @@ -3180,10 +3146,10 @@ function cockslap(active=true) let preyMass = prey.sum_property("mass"); - let sound = getSound("crush",preyMass); + let sound = getSound("crush", preyMass); - add_victim_people("cock-slap",prey); - update([sound,line,linesummary,newline]); + add_victim_people("cock-slap", prey); + update([sound, line, linesummary, newline]); macro.arouse(15); @@ -3192,8 +3158,7 @@ function cockslap(active=true) } } -function cock_vore(active=true) -{ +function cock_vore(active = true) { let area = macro.dickStretchGirth; let prey = getPrey(biome, area, macro.sameSizeCockVore); let line = describe("cock-vore", prey, macro, verbose, flat); @@ -3203,12 +3168,12 @@ function cock_vore(active=true) let preyMass = prey.sum_property("mass"); - let sound = getSound("insert",preyMass); + let sound = getSound("insert", preyMass); macro.balls.feed(prey); - add_victim_people("cock-vore",prey); - update([sound,line,linesummary,newline]); + add_victim_people("cock-vore", prey); + update([sound, line, linesummary, newline]); macro.arouse(20); @@ -3217,8 +3182,7 @@ function cock_vore(active=true) } } -function ball_smother(active=true) -{ +function ball_smother(active = true) { let area = macro.ballArea * 2; let prey = getPrey(biome, area); let line = describe("ball-smother", prey, macro, verbose, flat); @@ -3228,10 +3192,10 @@ function ball_smother(active=true) let preyMass = prey.sum_property("mass"); - let sound = getSound("crush",preyMass); + let sound = getSound("crush", preyMass); - add_victim_people("ball-smother",prey); - update([sound,line,linesummary,newline]); + add_victim_people("ball-smother", prey); + update([sound, line, linesummary, newline]); macro.arouse(10); @@ -3240,7 +3204,7 @@ function ball_smother(active=true) } } -function male_musk(area, active=true) { +function male_musk(area, active = true) { let prey = getPrey(biome, area); let line = describe("male-musk", prey, macro, verbose, flat); let linesummary = summarize(prey.sum(), true); @@ -3252,35 +3216,34 @@ function male_musk(area, active=true) { let preyMass = prey.sum_property("mass"); - add_victim_people("male-musk",prey); + add_victim_people("male-musk", prey); - update([line,linesummary,newline], active); + update([line, linesummary, newline], active); } -function male_spurt(vol, active=true) -{ - let area = Math.pow(vol, 2/3); +function male_spurt(vol, active = true) { + let area = Math.pow(vol, 2 / 3); let prey = getPrey(biome, area); - let line = describe("male-spurt", prey, macro, verbose, flat, vol).replace("$VOLUME",volume(vol,unit,true)); + let line = describe("male-spurt", prey, macro, verbose, flat, vol).replace("$VOLUME", volume(vol, unit, true)); let linesummary = summarize(prey.sum(), true); let people = get_living_prey(prey.sum()); let preyMass = prey.sum_property("mass"); - let sound = getSound("drip",preyMass); + let sound = getSound("drip", preyMass); - add_victim_people("cum-flood",prey); + add_victim_people("cum-flood", prey); - update([sound,line,linesummary,newline], active); + update([sound, line, linesummary, newline], active); if (macro.maleMuskEnabled) { male_spurt_musk(area * macro.baseMaleMuskArea * macro.muskScale, active); } } -function male_spurt_musk(area, active=true) { +function male_spurt_musk(area, active = true) { let prey = getPrey(biome, area); let line = describe("male-spurt-musk", prey, macro, verbose, flat); let linesummary = summarize(prey.sum(), true); @@ -3292,37 +3255,36 @@ function male_spurt_musk(area, active=true) { let preyMass = prey.sum_property("mass"); - add_victim_people("male-spurt-musk",prey); + add_victim_people("male-spurt-musk", prey); - update([line,linesummary,newline], active); + update([line, linesummary, newline], active); macro.arouse(5); } -function male_orgasm(vol, active=true) -{ - let area = Math.pow(vol, 2/3); +function male_orgasm(vol, active = true) { + let area = Math.pow(vol, 2 / 3); let prey = getPrey(biome, area); - let line = describe("male-orgasm", prey, macro, verbose, flat, vol).replace("$VOLUME",volume(vol,unit,true)); + let line = describe("male-orgasm", prey, macro, verbose, flat, vol).replace("$VOLUME", volume(vol, unit, true)); let linesummary = summarize(prey.sum(), true); let people = get_living_prey(prey.sum()); let preyMass = prey.sum_property("mass"); - let sound = getSound("liquid",preyMass); + let sound = getSound("liquid", preyMass); - add_victim_people("cum-flood",prey); + add_victim_people("cum-flood", prey); - update([sound,line,linesummary,newline], active); + update([sound, line, linesummary, newline], active); if (macro.maleMuskEnabled) { male_orgasm_musk(area * macro.baseMaleMuskArea * macro.muskScale, active); } } -function male_orgasm_musk(area, active=true) { +function male_orgasm_musk(area, active = true) { let prey = getPrey(biome, area); let line = describe("male-orgasm-musk", prey, macro, verbose, flat); let linesummary = summarize(prey.sum(), true); @@ -3334,14 +3296,14 @@ function male_orgasm_musk(area, active=true) { let preyMass = prey.sum_property("mass"); - add_victim_people("male-orgasm-musk",prey); + add_victim_people("male-orgasm-musk", prey); - update([line,linesummary,newline], active); + update([line, linesummary, newline], active); macro.arouse(5); } -function female_musk(area, active=true) { +function female_musk(area, active = true) { let prey = getPrey(biome, area); let line = describe("female-musk", prey, macro, verbose, flat); let linesummary = summarize(prey.sum(), true); @@ -3353,37 +3315,36 @@ function female_musk(area, active=true) { let preyMass = prey.sum_property("mass"); - add_victim_people("female-musk",prey); + add_victim_people("female-musk", prey); - update([line,linesummary,newline], active); + update([line, linesummary, newline], active); macro.arouse(5); } -function female_spurt(vol, active=true) -{ - let area = Math.pow(vol, 2/3); +function female_spurt(vol, active = true) { + let area = Math.pow(vol, 2 / 3); let prey = getPrey(biome, area); - let line = describe("female-spurt", prey, macro, verbose, flat).replace("$VOLUME",volume(vol,unit,false)); + let line = describe("female-spurt", prey, macro, verbose, flat).replace("$VOLUME", volume(vol, unit, false)); let linesummary = summarize(prey.sum(), true); let people = get_living_prey(prey.sum()); let preyMass = prey.sum_property("mass"); - let sound = getSound("drip",preyMass); + let sound = getSound("drip", preyMass); - add_victim_people("femcum-flood",prey); + add_victim_people("femcum-flood", prey); - update([sound,line,linesummary,newline], active); + update([sound, line, linesummary, newline], active); if (macro.femaleMuskEnabled) { female_spurt_musk(area * macro.baseFemaleMuskArea * macro.muskScale, active); } } -function female_spurt_musk(area, active=true) { +function female_spurt_musk(area, active = true) { let prey = getPrey(biome, area); let line = describe("female-spurt-musk", prey, macro, verbose, flat); let linesummary = summarize(prey.sum(), true); @@ -3395,37 +3356,36 @@ function female_spurt_musk(area, active=true) { let preyMass = prey.sum_property("mass"); - add_victim_people("female-spurt-musk",prey); + add_victim_people("female-spurt-musk", prey); - update([line,linesummary,newline], active); + update([line, linesummary, newline], active); macro.arouse(5); } -function female_orgasm(vol, active=true) -{ - let area = Math.pow(vol, 2/3); +function female_orgasm(vol, active = true) { + let area = Math.pow(vol, 2 / 3); let prey = getPrey(biome, area); - let line = describe("female-orgasm", prey, macro, verbose, flat).replace("$VOLUME",volume(vol,unit,false)); + let line = describe("female-orgasm", prey, macro, verbose, flat).replace("$VOLUME", volume(vol, unit, false)); let linesummary = summarize(prey.sum(), true); let people = get_living_prey(prey.sum()); let preyMass = prey.sum_property("mass"); - let sound = getSound("liquid",preyMass); + let sound = getSound("liquid", preyMass); - add_victim_people("femcum-flood",prey); + add_victim_people("femcum-flood", prey); - update([sound,line,linesummary,newline], active); + update([sound, line, linesummary, newline], active); if (macro.femaleMuskEnabled) { female_orgasm_musk(area * macro.baseFemaleMuskArea * macro.muskScale, active); } } -function female_orgasm_musk(area, active=true) { +function female_orgasm_musk(area, active = true) { let prey = getPrey(biome, area); let line = describe("female-orgasm-musk", prey, macro, verbose, flat); let linesummary = summarize(prey.sum(), true); @@ -3437,15 +3397,14 @@ function female_orgasm_musk(area, active=true) { let preyMass = prey.sum_property("mass"); - add_victim_people("female-orgasm-musk",prey); + add_victim_people("female-orgasm-musk", prey); - update([line,linesummary,newline], active); + update([line, linesummary, newline], active); macro.arouse(5); } -function tail_slap() -{ +function tail_slap() { let area = macro.tailArea * macro.tailCount; let prey = getPrey(biome, area); let line = describe("tail-slap", prey, macro, verbose, flat); @@ -3455,42 +3414,37 @@ function tail_slap() let preyMass = prey.sum_property("mass"); - let sound = getSound("crush",preyMass); + let sound = getSound("crush", preyMass); - add_victim_people("tail-slap",prey); + add_victim_people("tail-slap", prey); - update([sound,line,linesummary,newline]); + update([sound, line, linesummary, newline]); macro.arouse(5); } -function tail_vore_only() -{ +function tail_vore_only() { tail_vore(1); } -function tail_vore_one() -{ +function tail_vore_one() { tail_vore(1); } -function tail_vore_some() -{ +function tail_vore_some() { tail_vore(Math.floor(Math.random() * macro.tailCount) + 1); } -function tail_vore_all() -{ +function tail_vore_all() { tail_vore(macro.tailCount); } -function tail_vore(count) -{ +function tail_vore(count) { let lines = []; let totalPrey = new Container(); if (count <= 3) { - for (let i=0; i 0) { - preyMassBody = ((1 - macro.tailGrowthFactor) * macro.preyGrowthFactor * preyMass); //if growth factor is greater than 1, this function will behave oddly - grow_tail((macro.tailGrowthFactor * macro.preyGrowthFactor * preyMass), false); + if (part === "tail" && macro.tailGrowthFactor > 0) { + preyMassBody = ((1 - macro.tailGrowthFactor) * macro.preyGrowthFactor * preyMass); //if growth factor is greater than 1, this function will behave oddly + grow_tail((macro.tailGrowthFactor * macro.preyGrowthFactor * preyMass), false); } else if (part === "cock" && macro.cockGrowthFactor > 0) { - preyMassBody = ((1 - macro.cockGrowthFactor) * macro.preyGrowthFactor * preyMass); //if growth factor is greater than 1, this function will behave oddly - grow_dick((macro.cockGrowthFactor * macro.preyGrowthFactor * preyMass), false); + preyMassBody = ((1 - macro.cockGrowthFactor) * macro.preyGrowthFactor * preyMass); //if growth factor is greater than 1, this function will behave oddly + grow_dick((macro.cockGrowthFactor * macro.preyGrowthFactor * preyMass), false); } else if (part === "balls" && macro.ballGrowthFactor > 0) { - preyMassBody = (1 - macro.ballGrowthFactor) * macro.preyGrowthFactor * preyMass; //if growth factor is greater than 1, this function will behave oddly - grow_balls((macro.ballGrowthFactor * macro.preyGrowthFactor * preyMass), false); + preyMassBody = (1 - macro.ballGrowthFactor) * macro.preyGrowthFactor * preyMass; //if growth factor is greater than 1, this function will behave oddly + grow_balls((macro.ballGrowthFactor * macro.preyGrowthFactor * preyMass), false); - } else if (part === "bowels" && macro.assGrowthFactor > 0) { - preyMassBody = (1 - macro.assGrowthFactor) * macro.preyGrowthFactor * preyMass; //if growth factor is greater than 1, this function will behave oddly - grow_ass((macro.assGrowthFactor * macro.preyGrowthFactor * preyMass), false); + } else if (part === "bowels" && macro.assGrowthFactor > 0) { + preyMassBody = (1 - macro.assGrowthFactor) * macro.preyGrowthFactor * preyMass; //if growth factor is greater than 1, this function will behave oddly + grow_ass((macro.assGrowthFactor * macro.preyGrowthFactor * preyMass), false); } else if (part === "breasts" && macro.breastGrowthFactor > 0) { - let preyMassBody = (1 - macro.breastGrowthFactor) * macro.preyGrowthFactor * preyMass; //if growth factor is greater than 1, this function will behave oddly - grow_breasts((macro.breastGrowthFactor * macro.preyGrowthFactor * preyMass), false); + let preyMassBody = (1 - macro.breastGrowthFactor) * macro.preyGrowthFactor * preyMass; //if growth factor is greater than 1, this function will behave oddly + grow_breasts((macro.breastGrowthFactor * macro.preyGrowthFactor * preyMass), false); } else if (part === "womb") { - if (macro.wombGrowthFactor > 0){ - preyMassBody = ((1 - macro.wombGrowthFactor) * macro.preyGrowthFactor * preyMass); //if growth factor is greater than 1, this function will behave oddly - grow_womb((macro.wombGrowthFactor * macro.preyGrowthFactor * preyMass), false); - - } if (macro.vaginaGrowthFactor > 0){ - preyMassBody = ((1 - macro.vaginaGrowthFactor) * macro.preyGrowthFactor * preyMassBody); //if growth factor is greater than 1, this function will behave oddly - grow_vagina((macro.vaginaGrowthFactor * macro.preyGrowthFactor * preyMass), false); - } + if (macro.wombGrowthFactor > 0) { + preyMassBody = ((1 - macro.wombGrowthFactor) * macro.preyGrowthFactor * preyMass); //if growth factor is greater than 1, this function will behave oddly + grow_womb((macro.wombGrowthFactor * macro.preyGrowthFactor * preyMass), false); + + } if (macro.vaginaGrowthFactor > 0) { + preyMassBody = ((1 - macro.vaginaGrowthFactor) * macro.preyGrowthFactor * preyMassBody); //if growth factor is greater than 1, this function will behave oddly + grow_vagina((macro.vaginaGrowthFactor * macro.preyGrowthFactor * preyMass), false); + } } else if (part === "paws" && macro.pawGrowthFactor > 0) { - preyMassBody = ((1 - macro.pawGrowthFactor) * macro.preyGrowthFactor * preyMassBody); // if growth factor is greater than 1, this function will behave oddly - grow_paws((macro.pawGrowthFactor * macro.preyGrowthFactor * preyMass), false); + preyMassBody = ((1 - macro.pawGrowthFactor) * macro.preyGrowthFactor * preyMassBody); // if growth factor is greater than 1, this function will behave oddly + grow_paws((macro.pawGrowthFactor * macro.preyGrowthFactor * preyMass), false); } else if (part === "souls" && macro.soulGrowthFactor > 0) { - preyMassBody = 0; //keeps body growth from running - grow((preyMass * macro.soulGrowthFactor), false); + preyMassBody = 0; //keeps body growth from running + grow((preyMass * macro.soulGrowthFactor), false); } else if (part === "goo" && macro.gooGrowthFactor > 0) { - preyMassBody = 0; //keeps body growth from running - grow((preyMass * macro.gooGrowthFactor), false); + preyMassBody = 0; //keeps body growth from running + grow((preyMass * macro.gooGrowthFactor), false); - //Body, runs after organ specific growth so organ specific growth factor kicks in. Doesn't run after goo or soul related growth - } if (preyMassBody > 0){ - grow(preyMassBody, false); + //Body, runs after organ specific growth so organ specific growth factor kicks in. Doesn't run after goo or soul related growth + } if (preyMassBody > 0) { + grow(preyMassBody, false); } - } + } } - //Manual Growth +//Manual Growth function grow_part_pick(id) { document.querySelector(".growth-part-active").classList.remove("growth-part-active"); document.querySelector("#" + id).classList.add("growth-part-active"); @@ -4686,7 +4619,7 @@ function grow_pick(times) { const select = document.querySelector("#growth-part-select"); const chosenPart = select.value; if (macro.difficulty > 0 && macro.growthPoints < (times - 1) * 10) { - update(["You need " + times*10 + " growth points to grow that much.",newline]); + update(["You need " + times * 10 + " growth points to grow that much.", newline]); } else { if (macro.difficulty > 0) { macro.growthPoints -= (times - 1) * 10; @@ -4711,226 +4644,226 @@ function grow_pick(times) { } } -function grow(factor=1, simpleCalc=true){ +function grow(factor = 1, simpleCalc = true) { let oldHeight = macro.height; let oldMass = macro.mass; - if (simpleCalc == true){ + if (simpleCalc == true) { macro.scale *= factor; -} else { - macro.scale = Math.pow(((macro.mass + factor) / macro.baseMass), 1/3); - } + } else { + macro.scale = Math.pow(((macro.mass + factor) / macro.baseMass), 1 / 3); + } let heightDelta = macro.height - oldHeight; let massDelta = macro.mass - oldMass; - update([pickString("Power surges through you","Your body surges upward","Your muscles fight for space","Energy flows into you","You feel your body expand","Your surroundings appear to shink","Your muscles tense","You almost lose your balance","A warm sensation fills you","You feel \ - a buzz of power") + " as you grow " + length(heightDelta, unit) + " taller and gain " + mass(massDelta, unit) + " of mass.",newline]); + update([pickString("Power surges through you", "Your body surges upward", "Your muscles fight for space", "Energy flows into you", "You feel your body expand", "Your surroundings appear to shink", "Your muscles tense", "You almost lose your balance", "A warm sensation fills you", "You feel \ + a buzz of power") + " as you grow " + length(heightDelta, unit) + " taller and gain " + mass(massDelta, unit) + " of mass.", newline]); } -function grow_paws(factor, simpleCalc=true){ +function grow_paws(factor, simpleCalc = true) { let oldArea = macro.pawArea; - if (simpleCalc == true){ + if (simpleCalc == true) { macro.pawScale *= factor; -} else { - let volumeChangerPart = (((Math.pow(macro.pawWidth, 2) * macro.pawLength * macro.pawDensity) + factor) / (3 *macro.pawDensity)); + } else { + let volumeChangerPart = (((Math.pow(macro.pawWidth, 2) * macro.pawLength * macro.pawDensity) + factor) / (3 * macro.pawDensity)); //mass = volume*density. Since we know what we want our mass to be, we can figure out how much volume the final paw should have - let scaleChangerPart = ((3 * volumeChangerPart)/(Math.pow(macro.basePawWidth, 2) * macro.basePawLength)); - macro.pawScale = (Math.pow(scaleChangerPart, 1/3)/macro.scale); + let scaleChangerPart = ((3 * volumeChangerPart) / (Math.pow(macro.basePawWidth, 2) * macro.basePawLength)); + macro.pawScale = (Math.pow(scaleChangerPart, 1 / 3) / macro.scale); // volume = 1/3 basewidth^2 * baselength *scale^3 *pawscale^3 - } + } let areaDelta = macro.pawArea - oldArea; - update([(pickString("Power surges through you","Energy flows into you","You feel your " + macro.footDesc(true) + " expand","Your muscles tense","A warm sensation fills you","You feel a buzz of power")) + " as your \ - " + macro.footOnlyDesc(true) + pickString(" grow,"," push the ground apart,"," sink deeper into the soil,") + " gaining " + area(areaDelta, unit, false) + " of area.",newline]); + update([(pickString("Power surges through you", "Energy flows into you", "You feel your " + macro.footDesc(true) + " expand", "Your muscles tense", "A warm sensation fills you", "You feel a buzz of power")) + " as your \ + " + macro.footOnlyDesc(true) + pickString(" grow,", " push the ground apart,", " sink deeper into the soil,") + " gaining " + area(areaDelta, unit, false) + " of area.", newline]); } -function grow_tail(factor, simpleCalc=true) { +function grow_tail(factor, simpleCalc = true) { let oldLength = macro.tailLength; let oldMass = macro.tailMass; - if (simpleCalc == true){ + if (simpleCalc == true) { macro.tailScale *= factor; -} else { - let volumeChangerPart = (macro.tailMass + (factor/macro.tailCount)) / macro.tailDensity; - let scaleChangerPart = (volumeChangerPart/((Math.pow(macro.baseTailDiameter/2, 2)) * Math.PI * macro.baseTailLength * (Math.pow(macro.scale, 3)))); - macro.tailScale = Math.pow(scaleChangerPart, 1/3); + } else { + let volumeChangerPart = (macro.tailMass + (factor / macro.tailCount)) / macro.tailDensity; + let scaleChangerPart = (volumeChangerPart / ((Math.pow(macro.baseTailDiameter / 2, 2)) * Math.PI * macro.baseTailLength * (Math.pow(macro.scale, 3)))); + macro.tailScale = Math.pow(scaleChangerPart, 1 / 3); // (tailVolume/((macro.baseTailDiameter/2)^2 * Math.PI * macro.baseTailLength * macro.scale^3)) = macro.tailScale^3 - } + } let lengthDelta = macro.tailLength - oldLength; let massDelta = macro.tailMass - oldMass; - update([pickString("Power surges through you","Energy flows into you","You feel your tail twitch","Your muscles tense","Your balance shifts","A warm sensation fills you","You feel a buzz of power") + " as your " + macro.tailType + " tail grows " + length(lengthDelta, unit, false) + " longer and gains " + mass(massDelta, unit, false) + " of mass.",newline]); + update([pickString("Power surges through you", "Energy flows into you", "You feel your tail twitch", "Your muscles tense", "Your balance shifts", "A warm sensation fills you", "You feel a buzz of power") + " as your " + macro.tailType + " tail grows " + length(lengthDelta, unit, false) + " longer and gains " + mass(massDelta, unit, false) + " of mass.", newline]); } -function grow_dick(factor, simpleCalc=true) { +function grow_dick(factor, simpleCalc = true) { let oldLength = macro.dickLength; let oldMass = macro.dickMass; - if (simpleCalc == true){ + if (simpleCalc == true) { macro.dickScale *= factor; -} else { + } else { let volumeChangerPart = ((macro.dickMass + factor) / macro.dickDensity); - let scaleChangerPart = (volumeChangerPart /( Math.pow(macro.baseDickDiameter/2, 2) *Math.PI * Math.pow(macro.scale, 3) * macro.baseDickLength * Math.pow(macro.arousalDickFactor, 3))); - macro.dickScale = Math.pow(scaleChangerPart, 1/3); + let scaleChangerPart = (volumeChangerPart / (Math.pow(macro.baseDickDiameter / 2, 2) * Math.PI * Math.pow(macro.scale, 3) * macro.baseDickLength * Math.pow(macro.arousalDickFactor, 3))); + macro.dickScale = Math.pow(scaleChangerPart, 1 / 3); // dickScale^3 = volume/ pi * baseDickRadius^2 * macro.scale^3 * baseDickLength * arousalDickFactor^3 - } + } let lengthDelta = macro.dickLength - oldLength; let massDelta = macro.dickMass - oldMass; - update([pickString("Power surges through you","Energy flows into you","You feel your cock throb","Your muscles tense","You feel your loins buzz with energy","A warm sensation fills you","You feel a buzz of power") + " as your " + macro.dickType + " cock grows " + length(lengthDelta, unit, false) + " longer and gains " + mass(massDelta, unit, false) + " of mass.",newline]); + update([pickString("Power surges through you", "Energy flows into you", "You feel your cock throb", "Your muscles tense", "You feel your loins buzz with energy", "A warm sensation fills you", "You feel a buzz of power") + " as your " + macro.dickType + " cock grows " + length(lengthDelta, unit, false) + " longer and gains " + mass(massDelta, unit, false) + " of mass.", newline]); } -function grow_balls(factor, simpleCalc=true) { +function grow_balls(factor, simpleCalc = true) { let oldDiameter = macro.ballDiameter; let oldMass = macro.ballMass; - if (simpleCalc == true){ + if (simpleCalc == true) { macro.ballScale *= factor; -} else { + } else { let volumeChangerPart = (macro.ballMass + factor) / macro.ballDensity; - let scaleChangerPart = Math.pow((6 * volumeChangerPart/ Math.PI), 1/3) - macro.ballScale = scaleChangerPart/(macro.baseBallDiameter * macro.scale); + let scaleChangerPart = Math.pow((6 * volumeChangerPart / Math.PI), 1 / 3) + macro.ballScale = scaleChangerPart / (macro.baseBallDiameter * macro.scale); // (6 * volume / pi)^1/3 = base ball diam * scale *ballScale - } + } let diameterDelta = macro.ballDiameter - oldDiameter; let massDelta = macro.ballMass - oldMass; - update([pickString("Power surges through you","Energy flows into you","You feel an unfamiliar weight in your sack","You sack pushes your thighs further apart","Your muscles tense","You feel your loins buzz with energy","You feel a buzz of power","A warm sensation fills you") + " as your balls swell by " + length(diameterDelta, unit, false) + ", gaining " + mass(massDelta, unit, false) + " of mass apiece.",newline]); + update([pickString("Power surges through you", "Energy flows into you", "You feel an unfamiliar weight in your sack", "You sack pushes your thighs further apart", "Your muscles tense", "You feel your loins buzz with energy", "You feel a buzz of power", "A warm sensation fills you") + " as your balls swell by " + length(diameterDelta, unit, false) + ", gaining " + mass(massDelta, unit, false) + " of mass apiece.", newline]); } -function grow_breasts(factor, simpleCalc=true) { +function grow_breasts(factor, simpleCalc = true) { let oldDiameter = macro.breastDiameter; let oldMass = macro.breastMass; - if (simpleCalc == true){ + if (simpleCalc == true) { macro.breastScale *= factor; -} else { + } else { let volumeChangerPart = (factor + macro.breastMass) / macro.breastDensity; - let scaleChangerPart = Math.pow((6 * volumeChangerPart/ Math.PI), 1/3) - macro.breastScale = scaleChangerPart/(macro.baseBreastDiameter * macro.scale); + let scaleChangerPart = Math.pow((6 * volumeChangerPart / Math.PI), 1 / 3) + macro.breastScale = scaleChangerPart / (macro.baseBreastDiameter * macro.scale); // (6 * volume / pi)^1/3 = base ball diam * scale * ballScale - } + } let diameterDelta = macro.breastDiameter - oldDiameter; let massDelta = macro.breastMass - oldMass; - update([pickString("Power surges through you","Energy flows into you","You feel an unfamilliar weight on your chest","Your balance shifts","Your muscles tense","You feel a buzz of power","A warm sensation fills you") + " as your breasts swell by " + length(diameterDelta, unit, false) + ", gaining " + mass(massDelta, unit, false) + " of mass apiece.",newline]); + update([pickString("Power surges through you", "Energy flows into you", "You feel an unfamilliar weight on your chest", "Your balance shifts", "Your muscles tense", "You feel a buzz of power", "A warm sensation fills you") + " as your breasts swell by " + length(diameterDelta, unit, false) + ", gaining " + mass(massDelta, unit, false) + " of mass apiece.", newline]); } -function grow_vagina(factor, simpleCalc=true) { +function grow_vagina(factor, simpleCalc = true) { let oldLength = macro.vaginaLength; - if (simpleCalc == true){ + if (simpleCalc == true) { macro.vaginaScale *= factor; -} else { + } else { let volumeChangerPart = ((macro.vaginaVolume * macro.wombDensity) + factor) / macro.wombDensity; - let scaleChangerPart = (volumeChangerPart/(Math.pow(macro.baseVaginaWidth, 2) * macro.baseVaginaLength)); - macro.vaginaScale = (Math.pow(scaleChangerPart, 1/3)/macro.scale); + let scaleChangerPart = (volumeChangerPart / (Math.pow(macro.baseVaginaWidth, 2) * macro.baseVaginaLength)); + macro.vaginaScale = (Math.pow(scaleChangerPart, 1 / 3) / macro.scale); //vaginaVolume = baseVaginaWidth^2 * baseVaginaLength * (vaginaScale * macro.scale)^3 - } + } let lengthDelta = macro.vaginaLength - oldLength; - update([pickString("Power surges through you","Energy flows into you","You feel your loins buzz with energy","Your muscles tense","You feel a buzz of power","A warm sensation fills you") + " as your moist slit expands by " + length(lengthDelta, unit, false) + ".",newline]); + update([pickString("Power surges through you", "Energy flows into you", "You feel your loins buzz with energy", "Your muscles tense", "You feel a buzz of power", "A warm sensation fills you") + " as your moist slit expands by " + length(lengthDelta, unit, false) + ".", newline]); } -function grow_womb(factor, simpleCalc=true) { +function grow_womb(factor, simpleCalc = true) { let oldVolume = macro.wombVolume; - if (simpleCalc == true){ + if (simpleCalc == true) { macro.wombScale *= factor; -} else { + } else { let volumeChangerPart = ((macro.wombVolume * macro.wombDensity) + factor) / macro.wombDensity; - let scaleChangerPart = (volumeChangerPart/macro.baseWombVolume); - macro.wombScale = (Math.pow(scaleChangerPart, 1/3)/macro.scale); + let scaleChangerPart = (volumeChangerPart / macro.baseWombVolume); + macro.wombScale = (Math.pow(scaleChangerPart, 1 / 3) / macro.scale); //wombVolume = baseWombVolume * (wombScale * macro.scale)^3 - } + } let volumeDelta = macro.wombVolume - oldVolume; - update([pickString("Power surges through you","Energy flows into you","You feel your loins buzz with energy","You feel your muscles tense","You feel a buzz of power","A warm sensation fills you") + " as your womb grows larger, gaining " + volume(volumeDelta, unit, false) + " of capacity.",newline]); + update([pickString("Power surges through you", "Energy flows into you", "You feel your loins buzz with energy", "You feel your muscles tense", "You feel a buzz of power", "A warm sensation fills you") + " as your womb grows larger, gaining " + volume(volumeDelta, unit, false) + " of capacity.", newline]); } -function grow_ass(factor, simpleCalc=true) { +function grow_ass(factor, simpleCalc = true) { - let oldDiameter = Math.pow(macro.assArea,1/2); + let oldDiameter = Math.pow(macro.assArea, 1 / 2); - if (simpleCalc == true){ + if (simpleCalc == true) { macro.assScale *= factor; -} else { - macro.assScale = (macro.assScale + (factor/macro.mass)); //this is a hack, but the commented out block below doesn't work + } else { + macro.assScale = (macro.assScale + (factor / macro.mass)); //this is a hack, but the commented out block below doesn't work //This Code is broken and I dont know why: - //let radiusPart = Math.pow((macro.assArea/(4 * Math.PI)), 1/2); - //let volumeChangerPart = (preyMassPart + (((4 * Math.PI)/3) * Math.pow(radiusPart, 3) * macro.assDensity) / macro.assDensity); + //let radiusPart = Math.pow((macro.assArea/(4 * Math.PI)), 1/2); + //let volumeChangerPart = (preyMassPart + (((4 * Math.PI)/3) * Math.pow(radiusPart, 3) * macro.assDensity) / macro.assDensity); //volume=(mass1+mass2)/density. Mass2 is calcualted from volume*density this is modeling the ass as a sphere(2 hemispheres) - //let scaleChangerPart = ((Math.pow(((3/(4 * Math.PI)) * volumeChangerPart), 2/3) * 4 * Math.PI) / (macro.baseAssArea * Math.pow(macro.scale, 2))); - //macro.assScale = scaleChangerPart; + //let scaleChangerPart = ((Math.pow(((3/(4 * Math.PI)) * volumeChangerPart), 2/3) * 4 * Math.PI) / (macro.baseAssArea * Math.pow(macro.scale, 2))); + //macro.assScale = scaleChangerPart; //V=4/3((baseassArea*scale^2*AssScale)/4pi)^3/2 - } + } - let diameterDelta = Math.pow(macro.assArea,1/2) - oldDiameter; + let diameterDelta = Math.pow(macro.assArea, 1 / 2) - oldDiameter; - update([pickString("Power surges through you","Energy flows into you","You feel your rear fill with power","You feel your rear plump out","You feel your rear expand","Your muscles tense","Your balance shifts","You feel a buzz of power","A warm sensation fills you") + " as your ass swells by " + length(diameterDelta, unit, false) + ".",newline]); + update([pickString("Power surges through you", "Energy flows into you", "You feel your rear fill with power", "You feel your rear plump out", "You feel your rear expand", "Your muscles tense", "Your balance shifts", "You feel a buzz of power", "A warm sensation fills you") + " as your ass swells by " + length(diameterDelta, unit, false) + ".", newline]); } -function grow_wings(factor, simpleCalc=true){ +function grow_wings(factor, simpleCalc = true) { let oldLength = macro.wingLength; - if (simpleCalc == true){ + if (simpleCalc == true) { macro.wingScale *= factor; -} else { - macro.wingScale = (macro.wingScale + (factor/macro.mass)) - } + } else { + macro.wingScale = (macro.wingScale + (factor / macro.mass)) + } let lengthDelta = macro.wingLength - oldLength; - update([pickString("Power surges through you","Energy flows into you","Your back muscles fight for space","Your muscles tense","A crackeling fills the air","Your balance shifts","You feel a buzz of power","A warm sensation fills you") + " as your " + macro.wingDesc + " wings grow, gaining " + length(2 * lengthDelta, unit, false) + " of wingspan.",newline]); + update([pickString("Power surges through you", "Energy flows into you", "Your back muscles fight for space", "Your muscles tense", "A crackeling fills the air", "Your balance shifts", "You feel a buzz of power", "A warm sensation fills you") + " as your " + macro.wingDesc + " wings grow, gaining " + length(2 * lengthDelta, unit, false) + " of wingspan.", newline]); } -function grow_musk(factor, simpleCalc=true){ +function grow_musk(factor, simpleCalc = true) { let oldScale = macro.muskScale; - if (simpleCalc == true){ + if (simpleCalc == true) { macro.muskScale *= factor; -} else { - macro.muskScale = (macro.muskScale + (factor/Math.pow(macro.mass, 1/3))) - } + } else { + macro.muskScale = (macro.muskScale + (factor / Math.pow(macro.mass, 1 / 3))) + } let scaleDelta = macro.muskScale - oldScale; - update([pickString("Power surges through you","Energy flows into you","A crackeling fills the air","Your balance shifts","You feel a buzz of power","A warm sensation fills you") + " as your musk thickens, growing more potent.",newline]); + update([pickString("Power surges through you", "Energy flows into you", "A crackeling fills the air", "Your balance shifts", "You feel a buzz of power", "A warm sensation fills you") + " as your musk thickens, growing more potent.", newline]); } -function grow_stench(factor, simpleCalc=true){ +function grow_stench(factor, simpleCalc = true) { let oldScale = macro.muskScale; - if (simpleCalc == true){ + if (simpleCalc == true) { macro.stenchScale *= factor; -} else { - macro.stenchScale = (macro.stenchScale + (factor/Math.pow(macro.mass, 1/3))) - } + } else { + macro.stenchScale = (macro.stenchScale + (factor / Math.pow(macro.mass, 1 / 3))) + } let scaleDelta = macro.stenchScale - oldScale; - update([pickString("Power surges through you","Energy flows into you","A crackeling fills the air","Your balance shifts","You feel a buzz of power","A warm sensation fills you") + " as your stench thickens, growing more potent.",newline]); + update([pickString("Power surges through you", "Energy flows into you", "A crackeling fills the air", "Your balance shifts", "You feel a buzz of power", "A warm sensation fills you") + " as your stench thickens, growing more potent.", newline]); } function resetSettings() { @@ -4955,14 +4888,12 @@ function grabFormData(form, warnings, panels, buttons, stats, parts) { let parent = form.parentElement; - while(true) { - if (parent.id == "custom-species") - { + while (true) { + if (parent.id == "custom-species") { break; } - if (parent.classList.contains("reveal-if-active")) - { + if (parent.classList.contains("reveal-if-active")) { let sib = parent.previousSibling.previousSibling; if (!sib.checked) { @@ -4981,7 +4912,7 @@ function grabFormData(form, warnings, panels, buttons, stats, parts) { if (form.hasAttribute("data-buttons")) { let text = form.getAttribute("data-buttons"); - text.split(",").forEach(function(token) { + text.split(",").forEach(function (token) { buttons.push(token); }) } @@ -4989,7 +4920,7 @@ function grabFormData(form, warnings, panels, buttons, stats, parts) { if (form.hasAttribute("data-panels")) { let text = form.getAttribute("data-panels"); - text.split(",").forEach(function(token) { + text.split(",").forEach(function (token) { panels.push(token); }) } @@ -4997,7 +4928,7 @@ function grabFormData(form, warnings, panels, buttons, stats, parts) { if (form.hasAttribute("data-stats")) { let text = form.getAttribute("data-stats"); - text.split(",").forEach(function(token) { + text.split(",").forEach(function (token) { stats.push(token); }) } @@ -5005,7 +4936,7 @@ function grabFormData(form, warnings, panels, buttons, stats, parts) { if (form.hasAttribute("data-parts")) { let text = form.getAttribute("data-parts"); - text.split(",").forEach(function(token) { + text.split(",").forEach(function (token) { parts.push(token); }) } @@ -5014,7 +4945,7 @@ function grabFormData(form, warnings, panels, buttons, stats, parts) { // if diff is true, only record settings that are // different from the defaults! -function generateSettings(diff=false) { +function generateSettings(diff = false) { let form = document.forms.namedItem("custom-species-form"); let settings = {}; @@ -5024,7 +4955,7 @@ function generateSettings(diff=false) { let stats = []; let parts = []; - for (let i=0; i 0) { - button.addEventListener("click", function() { cooldown_start(name); window[name](); }); + button.addEventListener("click", function () { cooldown_start(name); window[name](); }); } else { - button.addEventListener("click", function() { window[name](); }); + button.addEventListener("click", function () { window[name](); }); } }); @@ -5552,17 +5483,17 @@ function registerActions() { function registerOptions() { let buttons = document.querySelectorAll("[id^='button-option']"); - buttons.forEach( function(button) { + buttons.forEach(function (button) { let name = button.id; - name = name.replace(/button-option-/,""); - button.addEventListener("click", function(e) { window[name](e); }); + name = name.replace(/button-option-/, ""); + button.addEventListener("click", function (e) { window[name](e); }); }); } function updateAllPreviews() { - document.querySelectorAll(".preview").forEach(function(prev) { - let name = prev.id.replace("Preview",""); + document.querySelectorAll(".preview").forEach(function (prev) { + let name = prev.id.replace("Preview", ""); updatePreview(name); }); } @@ -5615,16 +5546,16 @@ function debugLog() { console.log("Your character settings:"); console.log(JSON.stringify(generateSettings()["settings"])); console.log("Current macro state:"); - console.log(JSON.stringify( macro, function( key, value) { - if( key == 'owner') { return "owner";} - else {return value;} + console.log(JSON.stringify(macro, function (key, value) { + if (key == 'owner') { return "owner"; } + else { return value; } })); alert("Debug info has been logged to console. Press F12, click \"Console\", and copy all the text"); } -window.addEventListener('load', function(event) { +window.addEventListener('load', function (event) { - (function() { + (function () { let storage = window.localStorage; if (storage.getItem("dark-mode") != null) { @@ -5650,7 +5581,7 @@ window.addEventListener('load', function(event) { updateCustomCharacters(); - document.querySelectorAll(".version").forEach(function(x) { + document.querySelectorAll(".version").forEach(function (x) { x.innerText = "Version: " + version; }); @@ -5659,25 +5590,25 @@ window.addEventListener('load', function(event) { document.querySelector("#save-version").setAttribute("placeholder", migrations.length); - document.querySelectorAll("input[type='number']").forEach(function(x) { - x.addEventListener("input", function() { updatePreview(x.id); }); + document.querySelectorAll("input[type='number']").forEach(function (x) { + x.addEventListener("input", function () { updatePreview(x.id); }); }); updateAllPreviews(); document.querySelector("#scale").addEventListener("input", updateAllPreviews); - presets.sort(function(x,y) { + presets.sort(function (x, y) { let xp = x.priority === undefined ? 0 : x.priority; let yp = y.priority === undefined ? 0 : y.priority; - + if (xp != yp) { return yp - xp; } else { return x.name.localeCompare(y.name); } - - } ); + + }); let category_list = document.getElementById("character-preset-categories"); @@ -5692,14 +5623,14 @@ window.addEventListener('load', function(event) { let list = document.getElementById("character-presets"); - for (let i=0; i < presets.length; i++) { + for (let i = 0; i < presets.length; i++) { let opt = document.createElement("option"); opt.innerHTML = presets[i]["name"]; opt.dataset.category = presets[i].category || "default"; opt.value = i; list.appendChild(opt); } - + updatePresets(); register_buttons(); update_visible_groups(); @@ -5751,23 +5682,23 @@ function update_visible_groups() { function register_buttons() { document.querySelectorAll(".action-part-button").forEach(function (element) { - element.addEventListener("click",actionTab); + element.addEventListener("click", actionTab); }); - document.getElementById("button-look").addEventListener("click",look); - document.getElementById("button-stats").addEventListener("click",showStats); + document.getElementById("button-look").addEventListener("click", look); + document.getElementById("button-stats").addEventListener("click", showStats); - document.getElementById("button-dark-mode-options").addEventListener("click",toggleDarkMode); + document.getElementById("button-dark-mode-options").addEventListener("click", toggleDarkMode); document.querySelectorAll(".growth-part").forEach(function (button) { - button.addEventListener("select", function() { grow_part_pick(button.id); }); + button.addEventListener("select", function () { grow_part_pick(button.id); }); }); - document.getElementById("button-growth-1.1").addEventListener("click",function() { grow_pick(11); }); - document.getElementById("button-growth-1.5").addEventListener("click",function() { grow_pick(15); }); - document.getElementById("button-growth-2").addEventListener("click",function() { grow_pick(20); }); - document.getElementById("button-growth-5").addEventListener("click",function() { grow_pick(50); }); - document.getElementById("button-growth-20").addEventListener("click",function() { grow_pick(200); }); - document.getElementById("button-growth-100").addEventListener("click",function() { grow_pick(1000); }); + document.getElementById("button-growth-1.1").addEventListener("click", function () { grow_pick(11); }); + document.getElementById("button-growth-1.5").addEventListener("click", function () { grow_pick(15); }); + document.getElementById("button-growth-2").addEventListener("click", function () { grow_pick(20); }); + document.getElementById("button-growth-5").addEventListener("click", function () { grow_pick(50); }); + document.getElementById("button-growth-20").addEventListener("click", function () { grow_pick(200); }); + document.getElementById("button-growth-100").addEventListener("click", function () { grow_pick(1000); }); document.getElementById("button-load-preset").addEventListener("click", loadPreset); @@ -5783,9 +5714,9 @@ function register_buttons() { // note to self - the anonymous function is so that // loadSettings doesn't receive the mouseEvent! - document.getElementById("button-load-custom").addEventListener("click", function() { loadSettings(); }); - document.getElementById("button-save-custom").addEventListener("click", function() { saveSettings(); }); - document.getElementById("button-delete-custom").addEventListener("click", function() { deleteSettings(); }); + document.getElementById("button-load-custom").addEventListener("click", function () { loadSettings(); }); + document.getElementById("button-save-custom").addEventListener("click", function () { saveSettings(); }); + document.getElementById("button-delete-custom").addEventListener("click", function () { deleteSettings(); }); document.getElementById("button-start").addEventListener("click", startGame); } function render_text_option(li, option) { @@ -5860,7 +5791,7 @@ function render_int_option(li, option) { //sets up style for "radio" in features.js function render_radio_option(options_div, option) { - option.choices.forEach(function(choice) { + option.choices.forEach(function (choice) { let li = document.createElement("li"); let input = document.createElement("input"); @@ -5933,7 +5864,7 @@ function render_select_option(li, option) { select.setAttribute("id", option.id); select.setAttribute("name", option.id); - option.choices.forEach(function(choice) { + option.choices.forEach(function (choice) { let sub_option = document.createElement("option"); sub_option.innerText = choice.name; sub_option.setAttribute("value", choice.value); @@ -5985,7 +5916,7 @@ function render_subcategory_option(li, option) { sub_ul.appendChild(sub_label); sub_ul.appendChild(sub_div_inner); - option.entries.forEach(function(option) { + option.entries.forEach(function (option) { let li = document.createElement("li"); render_option(sub_div_inner, li, option); @@ -6093,7 +6024,7 @@ function render_category(root, category) { options_div.classList.add("reveal-if-active"); } - category.entries.forEach(function(option) { + category.entries.forEach(function (option) { let li = document.createElement("li"); render_option(options_div, li, option); @@ -6119,7 +6050,7 @@ function construct_options() { label.setAttribute("for", "group-toggle-" + group); label.innerText = groupInfo[group].name; label.classList.add("group-toggle"); - + input.addEventListener("input", update_visible_groups); label.classList.add("solo"); @@ -6131,14 +6062,14 @@ function construct_options() { let root = document.getElementById("character-flex-outer"); - options.forEach(function(category) { + options.forEach(function (category) { render_category(root, category); }); - groups.forEach(group => { + groups.forEach(group => { let div = document.createElement("div"); div.classList.add("group-banner"); - + div.classList.add("sheet-group-" + group); div.innerText = groupInfo[group].name; @@ -6177,7 +6108,7 @@ function construct_panels() { root.appendChild(panelList); - Object.entries(panels).forEach(function([name, contents]) { + Object.entries(panels).forEach(function ([name, contents]) { let buttons = document.createElement("div"); buttons.classList.add("action-tab"); buttons.id = "actions-" + name; @@ -6189,7 +6120,7 @@ function construct_panels() { panelList.appendChild(panel_button); - contents.buttons.forEach(function(action) { + contents.buttons.forEach(function (action) { let button = document.createElement("button"); button.classList.add("action-button"); if (contents.type == "options") { diff --git a/recursive-desc.js b/recursive-desc.js index 63a2b77..f555757 100644 --- a/recursive-desc.js +++ b/recursive-desc.js @@ -26,7 +26,7 @@ function capitalize(string) { function getDefault(name) { let tokens = name.split("-"); - for (let i=0; i 1 ? "are" : "is"), @@ -296,10 +296,10 @@ function defaultStomp(container, macro, verbose, flat) { pickString("under", "beneath"), "your", (macro.stenchEnabled ? pickString(...synonyms.putrid) : pickString("heavy", "weighty", "powerful")), - macro.footDesc(false,false,true) + "." + macro.footDesc(false, false, true) + "." ], [ "A swift stroke of your", - macro.footDesc(false,false,true), + macro.footDesc(false, false, true), pickString("crushes", "smashes", "flattens"), container.describe(verbose) ]).filter(Boolean).join(" "); @@ -355,17 +355,17 @@ function defaultAnalVore(container, macro, verbose, flat) { return "You're pretty sure you just sat on a rock."; else return pickString([ - "You sit yourself down on", - container.describe(false) + ". ", - (container.count > 1 ? "They slide" : "It slides"), - "inside with ease." - ], [ - "You grab", - container.describe(false) + ",", - "shoving", - (container.count > 1 ? "your victims" : "your victim"), - "right up your rear with a muffled shlrkh." - ] + "You sit yourself down on", + container.describe(false) + ". ", + (container.count > 1 ? "They slide" : "It slides"), + "inside with ease." + ], [ + "You grab", + container.describe(false) + ",", + "shoving", + (container.count > 1 ? "your victims" : "your victim"), + "right up your rear with a muffled shlrkh." + ] ).join(" "); } @@ -396,7 +396,7 @@ function defaultTailSlap(container, macro, verbose, flat) { return "Your " + (macro.tailCount > 1 ? "tails swing" : "tail swings") + " to and fro"; else if (isFatal(macro)) return "Your " + macro.describeTail + (macro.tailCount > 1 ? " tails swing" : " tail swings") + " into " + container.describe(verbose) + ", smashing everything in " + - (macro.tailCount > 1 ? "their" : "its") + " path."; + (macro.tailCount > 1 ? "their" : "its") + " path."; else return "Your " + macro.describeTail + (macro.tailCount > 1 ? " tails slap" : " tail slaps") + " against " + container.describe(verbose) + ", bowling them over."; } @@ -406,10 +406,10 @@ function defaultTailVore(container, macro, verbose, flat) { return "Your drooling tail lashes about, but can't seem to chow down on anyone..."; else if (isFatal(macro)) return "Your tail lunges, maw agape, at " + container.describe(verbose) + - ". It scarfs down everything in seconds, gulping forcefully to drag your prey into your sloppy confines."; + ". It scarfs down everything in seconds, gulping forcefully to drag your prey into your sloppy confines."; else return "Your tail lunges, maw agape, at " + container.describe(verbose) + - ". It scarfs down everything in a second, gulping forcefully and pulling your prey inside."; + ". It scarfs down everything in a second, gulping forcefully and pulling your prey inside."; } function defaultTailsVore(container, macro, verbose, flat) { @@ -417,10 +417,10 @@ function defaultTailsVore(container, macro, verbose, flat) { return "Your drooling tails swing to and fro"; else if (isFatal(macro)) return "Your $COUNT tails lunge, maws agape, at " + container.describe(verbose) + - ". They scarf down everything in seconds, gulping forcefully to drag your prey into your sloppy confines."; + ". They scarf down everything in seconds, gulping forcefully to drag your prey into your sloppy confines."; else return "Your $COUNT tails lunge, maws agape, at " + container.describe(verbose) + - ". They scarf down your prey, gulping forcefully and pulling them deep inside."; + ". They scarf down your prey, gulping forcefully and pulling them deep inside."; } function defaultCleavageStuff(container, macro, verbose, flat) { @@ -478,7 +478,7 @@ function defaultBreastCrush(container, macro, verbose, flat) { function defaultBreastVore(container, macro, verbose, flat) { let prey = new Container(); - macro.breasts.contents.forEach(function(x) { + macro.breasts.contents.forEach(function (x) { prey = prey.merge(x); }); @@ -547,7 +547,7 @@ function defaultUnbirth(container, macro, verbose, flat) { "of ecstasy up your spine." ]).filter(Boolean).join(" "); } - + } function defaultSheathStuff(container, macro, verbose, flat) { @@ -823,7 +823,7 @@ function defaultSoulAbsorbPaw(container, macro, verbose, flat) { function defaultPawStench(container, macro, verbose, flat) { let sum = get_living_prey(container.sum()); if (isSadistic(macro)) - return "Horrific miasma flows from your " + macro.footDesc(true)+ ", the corrosive fumes reducing " + (sum > 1 ? sum + " people" : "a person") + " to charred flesh as they wash over " + container.describeSimple(flat) + "."; + return "Horrific miasma flows from your " + macro.footDesc(true) + ", the corrosive fumes reducing " + (sum > 1 ? sum + " people" : "a person") + " to charred flesh as they wash over " + container.describeSimple(flat) + "."; if (isFatal(macro)) return "Vile fumes waft from your " + macro.footDesc(true) + " , choking the life from " + (sum > 1 ? sum + " people." : "a person."); else @@ -843,7 +843,7 @@ function defaultAssStench(container, macro, verbose, flat) { function defaultPissStench(container, macro, verbose, flat) { let sum = get_living_prey(container.sum()); if (isSadistic(macro)) - return "Waves of corrosive fumes waft from your piss, the toxic cloud liquefying the flesh of " + (sum > 1 ? numberRough(sum,"of") + " people" : "a person") + " as it dissolves " + container.describeSimple(flat) + "."; + return "Waves of corrosive fumes waft from your piss, the toxic cloud liquefying the flesh of " + (sum > 1 ? numberRough(sum, "of") + " people" : "a person") + " as it dissolves " + container.describeSimple(flat) + "."; if (isFatal(macro)) return "Vile fumes waft from your piss, choking the life from " + (sum > 1 ? sum + " people." : "a person."); else @@ -853,7 +853,7 @@ function defaultPissStench(container, macro, verbose, flat) { function defaultScatStench(container, macro, verbose, flat) { let sum = get_living_prey(container.sum()); if (isSadistic(macro)) - return "A rancid miasma spews from your shit - a thick, choking avalanche of toxic vapors that reduce " + (sum > 1 ? numberRough(sum,"of") + " people" : "a person") + " to nothing but bones as it melts " + container.describeSimple(flat) + "."; + return "A rancid miasma spews from your shit - a thick, choking avalanche of toxic vapors that reduce " + (sum > 1 ? numberRough(sum, "of") + " people" : "a person") + " to nothing but bones as it melts " + container.describeSimple(flat) + "."; if (isFatal(macro)) return "Vile fumes waft from your scat, choking the life from " + (sum > 1 ? sum + " people." : "a person."); else @@ -863,7 +863,7 @@ function defaultScatStench(container, macro, verbose, flat) { function defaultMaleMusk(container, macro, verbose, flat) { let sum = get_living_prey(container.sum()); if (isSadistic(macro)) - return "Waves of corrosive musk waft from your shaft, the bitter cloud liquefying the flesh of " + (sum > 1 ? numberRough(sum,"of") + " people" : "a person") + " as it dissolves " + container.describeSimple(flat) + "."; + return "Waves of corrosive musk waft from your shaft, the bitter cloud liquefying the flesh of " + (sum > 1 ? numberRough(sum, "of") + " people" : "a person") + " as it dissolves " + container.describeSimple(flat) + "."; if (isFatal(macro)) return "Powerful musk wafts from your shaft, choking the life from " + (sum > 1 ? sum + " people." : "a person."); else @@ -873,7 +873,7 @@ function defaultMaleMusk(container, macro, verbose, flat) { function defaultFemaleMusk(container, macro, verbose, flat) { let sum = get_living_prey(container.sum()); if (isSadistic(macro)) - return "Waves of corrosive musk waft from your slit, the bitter cloud liquefying the flesh of " + (sum > 1 ? numberRough(sum,"of") + " people" : "a person") + " as it dissolves " + container.describeSimple(flat) + "."; + return "Waves of corrosive musk waft from your slit, the bitter cloud liquefying the flesh of " + (sum > 1 ? numberRough(sum, "of") + " people" : "a person") + " as it dissolves " + container.describeSimple(flat) + "."; if (isFatal(macro)) return "Powerful musk wafts from your slit, choking the life from " + (sum > 1 ? sum + " people." : "a person."); else @@ -883,7 +883,7 @@ function defaultFemaleMusk(container, macro, verbose, flat) { function defaultMaleSpurtMusk(container, macro, verbose, flat) { let sum = get_living_prey(container.sum()); if (isSadistic(macro)) - return "Waves of corrosive musk waft from your precum, the bitter cloud liquefying the flesh of " + (sum > 1 ? numberRough(sum,"of") + " people" : "a person") + " as it dissolves " + container.describeSimple(flat) + "."; + return "Waves of corrosive musk waft from your precum, the bitter cloud liquefying the flesh of " + (sum > 1 ? numberRough(sum, "of") + " people" : "a person") + " as it dissolves " + container.describeSimple(flat) + "."; if (isFatal(macro)) return "Powerful musk wafts from your precum, choking the life from " + (sum > 1 ? sum + " people." : "a person."); else @@ -893,7 +893,7 @@ function defaultMaleSpurtMusk(container, macro, verbose, flat) { function defaultFemaleSpurtMusk(container, macro, verbose, flat) { let sum = get_living_prey(container.sum()); if (isSadistic(macro)) - return "Waves of corrosive musk waft from your precum, the bitter cloud liquefying the flesh of " + (sum > 1 ? numberRough(sum,"of") + " people" : "a person") + " as it dissolves " + container.describeSimple(flat) + "."; + return "Waves of corrosive musk waft from your precum, the bitter cloud liquefying the flesh of " + (sum > 1 ? numberRough(sum, "of") + " people" : "a person") + " as it dissolves " + container.describeSimple(flat) + "."; if (isFatal(macro)) return "Powerful musk wafts from your precum, choking the life from " + (sum > 1 ? sum + " people." : "a person."); else @@ -903,7 +903,7 @@ function defaultFemaleSpurtMusk(container, macro, verbose, flat) { function defaultMaleOrgasmMusk(container, macro, verbose, flat) { let sum = get_living_prey(container.sum()); if (isSadistic(macro)) - return "Waves of corrosive musk waft from your cum, the bitter cloud liquefying the flesh of " + (sum > 1 ? numberRough(sum,"of") + " people" : "a person") + " as it dissolves " + container.describeSimple(flat) + "."; + return "Waves of corrosive musk waft from your cum, the bitter cloud liquefying the flesh of " + (sum > 1 ? numberRough(sum, "of") + " people" : "a person") + " as it dissolves " + container.describeSimple(flat) + "."; if (isFatal(macro)) return "Powerful musk wafts from your cum, choking the life from " + (sum > 1 ? sum + " people." : "a person."); else @@ -913,7 +913,7 @@ function defaultMaleOrgasmMusk(container, macro, verbose, flat) { function defaultFemaleOrgasmMusk(container, macro, verbose, flat) { let sum = get_living_prey(container.sum()); if (isSadistic(macro)) - return "Waves of corrosive musk waft from your cum, the bitter cloud liquefying the flesh of " + (sum > 1 ? numberRough(sum,"of") + " people" : "a person") + " as it dissolves " + container.describeSimple(flat) + "."; + return "Waves of corrosive musk waft from your cum, the bitter cloud liquefying the flesh of " + (sum > 1 ? numberRough(sum, "of") + " people" : "a person") + " as it dissolves " + container.describeSimple(flat) + "."; if (isFatal(macro)) return "Powerful musk wafts from your cum, choking the life from " + (sum > 1 ? sum + " people." : "a person."); else @@ -1054,7 +1054,7 @@ function defaultBladder(container, macro, verbose, flat) { function defaultSoulDigest(container, macro, verbose, flat) { let sum = get_living_prey(container.sum()); - switch(macro.soulVoreType) { + switch (macro.soulVoreType) { case "release": return (sum > 1 ? sum + " souls escape" : "A soul escapes") + " your depths."; case "body": @@ -1082,33 +1082,33 @@ function defaultWingsToStomach(container, macro, verbose, flat) { function defaultWearShoe(container, macro, verbose, flat) { if (container.count == 0) { - return "You slip on your " + macro.shoeDesc(true,false) + "."; + return "You slip on your " + macro.shoeDesc(true, false) + "."; } else { - return "You slip on your " + macro.shoeDesc(true,false) + ", " + macro.toeDesc(true) + " wriggling against " + container.describeSimple(flat) + " trapped within!"; + return "You slip on your " + macro.shoeDesc(true, false) + ", " + macro.toeDesc(true) + " wriggling against " + container.describeSimple(flat) + " trapped within!"; } } function defaultRemoveShoe(container, macro, verbose, flat) { if (container.count == 0) { - return "You pull off your " + macro.shoeDesc(true,false) + "."; + return "You pull off your " + macro.shoeDesc(true, false) + "."; } else { - return "You pull off your " + macro.shoeDesc(true,false) + ", " + macro.toeDesc(true) + " rubbing against " + container.describeSimple(flat) + " on the way out."; + return "You pull off your " + macro.shoeDesc(true, false) + ", " + macro.toeDesc(true) + " rubbing against " + container.describeSimple(flat) + " on the way out."; } } function defaultWearSock(container, macro, verbose, flat) { if (container.count == 0) { - return "You slip on your " + macro.sockDesc(true,false) + "."; + return "You slip on your " + macro.sockDesc(true, false) + "."; } else { - return "You slip on your " + macro.sockDesc(true,false) + ", " + macro.toeDesc(true) + " grinding against " + container.describeSimple(flat) + " trapped in the cotton tube!"; + return "You slip on your " + macro.sockDesc(true, false) + ", " + macro.toeDesc(true) + " grinding against " + container.describeSimple(flat) + " trapped in the cotton tube!"; } } function defaultRemoveSock(container, macro, verbose, flat) { if (container.count == 0) { - return "You pull off your " + macro.sockDesc(true,false) + ". Cool air washes over your " + macro.toeOnlyDesc(true); + return "You pull off your " + macro.sockDesc(true, false) + ". Cool air washes over your " + macro.toeOnlyDesc(true); } else { - return "You pull off your " + macro.sockDesc(true,false) + ", leaving " + container.describeSimple(flat) + " trapped at the bottom."; + return "You pull off your " + macro.sockDesc(true, false) + ", leaving " + container.describeSimple(flat) + " trapped at the bottom."; } } @@ -1205,7 +1205,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") + (sum > 1 ? " lives" : " life") + " 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."; } @@ -1360,10 +1360,10 @@ function defaultBreathFire(container, macro, verbose, flat) { } if (isFatal(macro)) { - if (macro.breathStyle == "line") { - return "A withering spear of fire gouts from your maw, spearing through " + container.describe(verbose) + " and incinerating it in a torrid display of power."; - } else if (macro.breathStyle == "cone") { - return "You exhale a broad cone of powerful fire, burning " + container.describe(verbose) + " to a crisp in an inescapable tide of flames."; + if (macro.breathStyle == "line") { + return "A withering spear of fire gouts from your maw, spearing through " + container.describe(verbose) + " and incinerating it in a torrid display of power."; + } else if (macro.breathStyle == "cone") { + return "You exhale a broad cone of powerful fire, burning " + container.describe(verbose) + " to a crisp in an inescapable tide of flames."; } } @@ -1375,10 +1375,10 @@ function defaultBreathIce(container, macro, verbose, flat) { } if (isFatal(macro)) { - if (macro.breathStyle == "line") { - return "You heave a lance of frigid cold from your gullet, freezing " + container.describe(verbose) + " to the core."; - } else if (macro.breathStyle == "cone") { - return "A blizzard erupts from your maw, flash-freezing " + container.describe(verbose) + ". " + (container.count > 1 ? "They" : "It") + " shatters a heartbeat later, reduced to dust by your power."; + if (macro.breathStyle == "line") { + return "You heave a lance of frigid cold from your gullet, freezing " + container.describe(verbose) + " to the core."; + } else if (macro.breathStyle == "cone") { + return "A blizzard erupts from your maw, flash-freezing " + container.describe(verbose) + ". " + (container.count > 1 ? "They" : "It") + " shatters a heartbeat later, reduced to dust by your power."; } } @@ -1391,10 +1391,10 @@ function defaultBreathElectric(container, macro, verbose, flat) { } if (isFatal(macro)) { - if (macro.breathStyle == "line") { - return "A blinding lance of lightning blasts from your spread " + macro.jawDesc(true) + ", cooking " + container.describe(verbose) + " from the inside out."; - } else if (macro.breathStyle == "cone") { - return "You exhale a brilliant, forking spray of lightning. The flickering bolts arc through " + container.describe(verbose) + ", cooking everything to a crisp."; + if (macro.breathStyle == "line") { + return "A blinding lance of lightning blasts from your spread " + macro.jawDesc(true) + ", cooking " + container.describe(verbose) + " from the inside out."; + } else if (macro.breathStyle == "cone") { + return "You exhale a brilliant, forking spray of lightning. The flickering bolts arc through " + container.describe(verbose) + ", cooking everything to a crisp."; } } @@ -1407,10 +1407,10 @@ function defaultBreathSmoke(container, macro, verbose, flat) { } if (isFatal(macro)) { - if (macro.breathStyle == "line") { - return "You part your " + macro.jawDesc(true) + " a touch and blow, casting a thin gout of smoke that envelops " + container.describe(verbose) + ". Your prey is snuffed out like a candle."; - } else if (macro.breathStyle == "cone") { - return "You open wide and exhale. A rolling storm of smoke pours forth, smothering " + container.describe(verbose) + " in a pyroclastic flow."; + if (macro.breathStyle == "line") { + return "You part your " + macro.jawDesc(true) + " a touch and blow, casting a thin gout of smoke that envelops " + container.describe(verbose) + ". Your prey is snuffed out like a candle."; + } else if (macro.breathStyle == "cone") { + return "You open wide and exhale. A rolling storm of smoke pours forth, smothering " + container.describe(verbose) + " in a pyroclastic flow."; } } @@ -1423,10 +1423,10 @@ function defaultBreathRadiation(container, macro, verbose, flat) { } if (isFatal(macro)) { - if (macro.breathStyle == "line") { - return "Your depths pour out a narrow beam of crackling green energy, striking " + container.describe(verbose) + " and frying it to a crisp, turning your prey to dust in the wind."; - } else if (macro.breathStyle == "cone") { - return "You part your " + macro.jawDesc(true) + ", roaring as a massive tide of radiation spews forth. It rolls over " + container.describe(verbose) + ", evaporating " + (container.count > 1 ? "them" : "it") + " in seconds."; + if (macro.breathStyle == "line") { + return "Your depths pour out a narrow beam of crackling green energy, striking " + container.describe(verbose) + " and frying it to a crisp, turning your prey to dust in the wind."; + } else if (macro.breathStyle == "cone") { + return "You part your " + macro.jawDesc(true) + ", roaring as a massive tide of radiation spews forth. It rolls over " + container.describe(verbose) + ", evaporating " + (container.count > 1 ? "them" : "it") + " in seconds."; } } @@ -1439,10 +1439,10 @@ function defaultBreathFoul(container, macro, verbose, flat) { } if (isFatal(macro)) { - if (macro.breathStyle == "line") { - return "You blow a narrow stream of breath, withering " + container.describe(verbose) + " in a focused torrent of foul, humid fumes."; - } else if (macro.breathStyle == "cone") { - return "You yawn wide and sigh, snuffing out " + container.describe(verbose) + " under a tide of hot, humid breath."; + if (macro.breathStyle == "line") { + return "You blow a narrow stream of breath, withering " + container.describe(verbose) + " in a focused torrent of foul, humid fumes."; + } else if (macro.breathStyle == "cone") { + return "You yawn wide and sigh, snuffing out " + container.describe(verbose) + " under a tide of hot, humid breath."; } } @@ -1924,7 +1924,7 @@ function defaultVictimPouchAbsorb(macro) { } function defaultVictimSoulDigest(macro) { - switch(macro.soulVoreType) { + switch (macro.soulVoreType) { case "release": return "souls freed from your depths"; case "body": @@ -1935,7 +1935,7 @@ function defaultVictimSoulDigest(macro) { } function defaultVictimSoulPaw(macro) { - switch(macro.soulVoreType) { + switch (macro.soulVoreType) { case "release": return "souls briefly trapped in your paws"; case "body": @@ -2175,63 +2175,63 @@ function defaultVictimWingsVore(macro) { // EATING rules["eat"].push({ - "test": function(container, macro) { + "test": function (container, macro) { return hasNothing(container); }, - "desc": function(container, macro, verbose, flat) { + "desc": function (container, macro, verbose, flat) { return "You scoop up...nothing. Oh well."; } }); rules["eat"].push({ - "test": function(container, macro) { + "test": function (container, macro) { return hasOnly(container, ["Person"]) && - hasLessThan(container, "Person", 6) && - macro.height >= 10; + hasLessThan(container, "Person", 6) && + macro.height >= 10; }, - "desc": function(container, macro, verbose, flat) { + "desc": function (container, macro, verbose, flat) { return "You pluck up " + container.describe() + " and stuff them into your mouth, swallowing lightly to drag them down to your bubbling guts."; } }); rules["eat"].push({ - "test": function(container, macro) { + "test": function (container, macro) { return hasOnly(container, ["Person"]) && - hasExactly(container, "Person", 1) && - macro.height < 10; + hasExactly(container, "Person", 1) && + macro.height < 10; }, - "desc": function(container, macro, verbose, flat) { + "desc": function (container, macro, verbose, flat) { return "You grasp " + container.describe() + " and greedily wolf them down, swallowing forcefully to cram them into your bulging stomach. A crass belch escapes your lips as they curl up in your slimy gut."; } }); rules["eat"].push({ - "test": function(container, macro) { + "test": function (container, macro) { return hasExactly(container, "Car", 1); }, - "desc": function(container, macro, verbose, flat) { + "desc": function (container, macro, verbose, flat) { return "You crush " + container.describe(verbose) + " with your tight throat, washing it down with its former passengers." } }); rules["eat"].push({ - "test": function(container, macro) { + "test": function (container, macro) { return hasExactly(container, "Macro", 1) && - nothingLarger(container, "Macro"); + nothingLarger(container, "Macro"); }, - "desc": function(container, macro, verbose, flat) { + "desc": function (container, macro, verbose, flat) { return "You spot a smaller macro " + pickString("staring up at you in awe", "terrorizing the area", "running from you", "that is unaware of your presence") + " and decide it will make a suitable meal. You grab them and stuff them into your " + macro.jawDesc(true) + ". As you slurp\ - them down, you feel them " + pickString("catch in your throat for a brief moment before being swallowed.", "grab at your tounge for purchase before going down your throat.","briefly struggle, then go limp.","pound on the inside of your throat."); + them down, you feel them " + pickString("catch in your throat for a brief moment before being swallowed.", "grab at your tounge for purchase before going down your throat.", "briefly struggle, then go limp.", "pound on the inside of your throat."); } }); rules["eat"].push({ - "test": function(container, macro) { + "test": function (container, macro) { return hasExactly(container, "Small Skyscraper", 1) && - nothingLarger(container, "Small Skyscraper") && - macro.height < 500; + nothingLarger(container, "Small Skyscraper") && + macro.height < 500; }, - "desc": function(container, macro, verbose, flat) { + "desc": function (container, macro, verbose, flat) { return "You drop onto your hands and knees, " + macro.jawDesc(true) + " opening wide to envelop the skyscraper. It glides into your throat as your snout touches the ground,\ and you suckle on it for a long moment before twisting your head to snap it loose. The entire building, along with " + describe_all(container.contents["Small Skyscraper"].contents, verbose) + "\ within, plunge into your roiling guts. You wash it down with some delicious treats you slurped up along with it - " + describe_all(container.contents, verbose, ["Small Skyscraper"]) + "."; @@ -2239,12 +2239,12 @@ rules["eat"].push({ }); rules["eat"].push({ - "test": function(container, macro) { + "test": function (container, macro) { return hasExactly(container, "Small Skyscraper", 2) && - nothingLarger(container, "Small Skyscraper") && - macro.height < 750; + nothingLarger(container, "Small Skyscraper") && + macro.height < 750; }, - "desc": function(container, macro, verbose, flat) { + "desc": function (container, macro, verbose, flat) { return "You drop onto your hands and knees, " + macro.jawDesc(true) + " opening wide to envelop the skyscraper. It glides into your throat as your snout touches the ground,\ and you suckle on it for a long moment before twisting your head to snap it loose. Without missing a beat, you rise back up, sloppy tongue slathering over the side \ of the remaining tower, sucking on its tip and roughly shoving it into your maw. It breaks from its foundation, vanishing past your lips as you use two fingers to shove it \ @@ -2283,24 +2283,24 @@ rules["eat"].push({ // CHEWING rules["chew"].push({ - "test": function(container, macro) { + "test": function (container, macro) { return hasOnly(container, ["Person"]) && - hasExactly(container, "Person", 1) && - isGory(macro) && - macro.height < 5; - }, "desc": function(container, macro, verbose, flat) { + hasExactly(container, "Person", 1) && + isGory(macro) && + macro.height < 5; + }, "desc": function (container, macro, verbose, flat) { return "You tackle " + container.describe(verbose) + " and dig into your meal, powerful " + macro.jawDesc(true) + " ripping them to shreds in seconds. You wolf down great mouthfuls \ of meat, consuming them in a terrifying frenzy that ends with naught but bones lying on the ground."; } }); rules["chew"].push({ - "test": function(container, macro) { + "test": function (container, macro) { return hasOnly(container, ["Person"]) && - hasExactly(container, "Person", 1) && - isGory(macro) && - macro.height >= 5; - }, "desc": function(container, macro, verbose, flat) { + hasExactly(container, "Person", 1) && + isGory(macro) && + macro.height >= 5; + }, "desc": function (container, macro, verbose, flat) { return "You snatch up " + container.describe(verbose) + ", then stuff their lower body into the guillotine that is your ravenous maw - slicing off their legs with \ a single disgusting crunch, then finishing them off with another ravenous bite that obliterates their torso. Their bleeding head falls from your lips, only to be \ caught between two fingers and popped back in to be crunched between molars and swallowed."; @@ -2308,11 +2308,11 @@ rules["chew"].push({ }); rules["chew"].push({ - "test": function(container, macro) { + "test": function (container, macro) { return hasExactly(container, "Car", 1); }, - "desc": function(container, macro, verbose, flat) { - return "You lean down and open your " + macro.jawDesc(true) + " wide, catching " + container.describe(verbose) + ". Holding onto the car with only your " + macro.teethDesc(true) + ", you tilt your head back, opening wider \ + "desc": function (container, macro, verbose, flat) { + return "You lean down and open your " + macro.jawDesc(true) + " wide, catching " + container.describe(verbose) + ". Holding onto the car with only your " + macro.teethDesc(true) + ", you tilt your head back, opening wider \ to let the vehicle fall further your mouth, Once the car settles, you start slowly closing your jaw, feeling glass shatter, metal grind, and tires burst as those trapped inside try to escape. Every time your chew you feel your \ " + macro.teethDesc(true) + " " + macro.biteDesc(false) + " the vehicle into a smaller and smaller lump. After you are satisfied, you tilt your head back and swallow the debries in a single fluid gulp."; } @@ -2332,126 +2332,126 @@ rules["chew"].push({ // STOMPING rules["stomp"].push({ - "test": function(container, macro) { + "test": function (container, macro) { return hasOnly(container, ["Person"]) && - hasExactly(container, "Person", 1) && - isFatal(macro); - }, "desc": function(container, macro, verbose, flat) { + hasExactly(container, "Person", 1) && + isFatal(macro); + }, "desc": function (container, macro, verbose, flat) { return "Your heavy " + macro.footDesc() + " slams down on " + container.describe(verbose) + ", smashing the poor thing like an insect."; } }); rules["stomp"].push({ - "test": function(container, macro) { + "test": function (container, macro) { return hasOnly(container, ["Person"]) && - hasExactly(container, "Person", 1) && - isGory(macro); - }, "desc": function(container, macro, verbose, flat) { + hasExactly(container, "Person", 1) && + isGory(macro); + }, "desc": function (container, macro, verbose, flat) { return "Your " + macro.footDesc() + " thumps " + container.describe(verbose) + ", shoving your victim to the ground and cracking them open like an egg."; } }); rules["stomp"].push({ - "test": function(container, macro) { + "test": function (container, macro) { return hasOnly(container, ["Person"]) && - hasExactly(container, "Person", 1) && - isGory(macro); - }, "desc": function(container, macro, verbose, flat) { + hasExactly(container, "Person", 1) && + isGory(macro); + }, "desc": function (container, macro, verbose, flat) { return "Your shadow falls over " + container.describe(verbose) + ", and your " + macro.footDesc() + " follows, crushing their soft body and reducing them to a heap of broken gore."; } }); rules["stomp"].push({ - "test": function(container, macro) { - return hasNothingElse(container, ["Person","Cow","Car"]) && + "test": function (container, macro) { + return hasNothingElse(container, ["Person", "Cow", "Car"]) && isNonFatal(macro); - }, "desc": function(container, macro, verbose, flat) { + }, "desc": function (container, macro, verbose, flat) { return "Your " + macro.footDesc() + " smooshes over " + container.describe(verbose) + ". They stick to your " + macro.toeDesc(true) + ", carried along for the ride as you take another few steps before finally\ falling off."; } }); rules["stomp"].push({ - "test": function(container, macro) { + "test": function (container, macro) { return hasOnly(container, ["Person"]) && - hasExactly(container, "Person", 1) && - isFatal(macro); - }, "desc": function(container, macro, verbose, flat) { + hasExactly(container, "Person", 1) && + isFatal(macro); + }, "desc": function (container, macro, verbose, flat) { return "Your heavy " + macro.footDesc() + " slams down on " + container.describe(verbose) + ", smashing the poor thing like an insect."; } }); rules["stomp"].push({ - "test": function(container, macro) { + "test": function (container, macro) { return hasOnly(container, ["Bus"]) && - hasExactly(container, "Bus", 1) && - isFatal(macro); - }, "desc": function(container, macro, verbose, flat) { + hasExactly(container, "Bus", 1) && + isFatal(macro); + }, "desc": function (container, macro, verbose, flat) { return "Your heavy " + macro.footDesc() + " slams down on " + container.describe(verbose) + ", smashing the poor thing like an insect."; } }); rules["stomp"].push({ - "test": function(container, macro) { - return hasOnly(container, ["Person","Car", "Bus"]) && - hasExactly(container, "Bus", 1) && - hasLessThan(container, "Car", 10); - }, "desc": function(container, macro, verbose, flat) { + "test": function (container, macro) { + return hasOnly(container, ["Person", "Car", "Bus"]) && + hasExactly(container, "Bus", 1) && + hasLessThan(container, "Car", 10); + }, "desc": function (container, macro, verbose, flat) { return "You punt a " + container.contents["Bus"].describe(verbose) + ", sending it tumbling down the road into a " + describe_all(container.contents, verbose, flat, ["Bus"]); } }); rules["stomp"].push({ - "test": function(container, macro) { + "test": function (container, macro) { return hasExactly(container, "Parking Garage", 1) && - nothingLarger(container, "Parking Garage"); - }, "desc": function(container, macro, verbose, flat) { - return (pickString("You bring your " + macro.footDesc() + " down on ", "You kick your " + macro.footDesc() + " through ")) + container.describe(verbose) +", collapsing the structure and setting off car alarms. As the alarms blare, you reposition your " + macro.footDesc() + - " over the structure, and slam it down; silencing the alarms, and completely demolishing the building."; + nothingLarger(container, "Parking Garage"); + }, "desc": function (container, macro, verbose, flat) { + return (pickString("You bring your " + macro.footDesc() + " down on ", "You kick your " + macro.footDesc() + " through ")) + container.describe(verbose) + ", collapsing the structure and setting off car alarms. As the alarms blare, you reposition your " + macro.footDesc() + + " over the structure, and slam it down; silencing the alarms, and completely demolishing the building."; } }); //paw area between 5 and 50 rules["stomp"].push({ - "test": function(container, macro) { + "test": function (container, macro) { return macro.pawArea <= 50 && - macro.pawArea > 5 && - isNonFatal(macro); - }, "desc": function(container, macro, verbose, flat) { + macro.pawArea > 5 && + isNonFatal(macro); + }, "desc": function (container, macro, verbose, flat) { return "You bring your " + length(macro.pawWidth, unit, true) + " wide " + macro.footDesc() + " down on " + container.describe(verbose) + ". As your " + macro.footDesc() + " makes contact with the ground, you feel a shock travel up your powerful leg, and see the ground deform beneath it."; } }); rules["stomp"].push({ - "test": function(container, macro) { + "test": function (container, macro) { return macro.pawArea <= 50 && - macro.pawArea > 5 && - isFatal(macro); - }, "desc": function(container, macro, verbose, flat) { + macro.pawArea > 5 && + isFatal(macro); + }, "desc": function (container, macro, verbose, flat) { return "You bring your " + length(macro.pawWidth, unit, true) + " wide " + macro.footDesc() + " down on " + container.describe(verbose) + ". As your " + macro.footDesc() + " makes contact with the ground, you feel a shock travel up your powerful leg, and see the ground deform beneath it. \ Your " + macro.footDesc() + "print is filled with rubble and those unluckly enough to be in your path."; } }); rules["stomp"].push({ - "test": function(container, macro) { + "test": function (container, macro) { return macro.pawArea <= 50 && - macro.pawArea > 5 && - isGory(macro); - }, "desc": function(container, macro, verbose, flat) { + macro.pawArea > 5 && + isGory(macro); + }, "desc": function (container, macro, verbose, flat) { return "You bring your " + length(macro.pawWidth, unit, true) + " wide " + macro.footDesc() + " down on " + container.describe(verbose) + ". As your " + macro.footDesc() + " makes contact with the ground, you feel a shock travel up your powerful leg, and see the ground deform beneath it. \ Your " + macro.footDesc() + "print is filled with rubble and the mangled corpses of those unluckly enough to be in your path."; } }); rules["stomp"].push({ - "test": function(container, macro) { + "test": function (container, macro) { return macro.pawArea <= 50 && - macro.pawArea > 5 && - isSadistic(macro); - }, "desc": function(container, macro, verbose, flat) { + macro.pawArea > 5 && + isSadistic(macro); + }, "desc": function (container, macro, verbose, flat) { return "You slowly bring your " + length(macro.pawWidth, unit, true) + " wide " + macro.footDesc() + " down on " + container.describe(verbose) + ". As your " + macro.footDesc() + " makes contact with your prey, you feel those beneath you struggle to overcome \ the weight bearing down on them, before being completely crushed. You shift a little more of your weight on your outstretched " + macro.footDesc() + " and see blood spray from between your " + macro.toeDesc(true) + ". Lifting your " + macro.footDesc() + " off the \ ground to examine your " + macro.footDesc() + "print, you see that it is filled with blood, debris, and the mangled corpses of those unluckly enough to be in your path."; @@ -2461,13 +2461,13 @@ rules["stomp"].push({ //Stomping Macro rules["stomp"].push({ - "test": function(container, macro) { + "test": function (container, macro) { return hasExactly(container, "Macro", 1) && - nothingLarger(container, "Macro") && - isNonFatal(macro); + nothingLarger(container, "Macro") && + isNonFatal(macro); }, - "desc": function(container, macro, verbose, flat) { - return "You spot a smaller macro " + pickString("staring up at you in awe", "terrorizing the area", "running from you", "that is unaware of your presence") + pickString(" and decide to show it real power"," and decide it will will be suitable prey."," and decide to show it what being a macro really means.") + " \ + "desc": function (container, macro, verbose, flat) { + return "You spot a smaller macro " + pickString("staring up at you in awe", "terrorizing the area", "running from you", "that is unaware of your presence") + pickString(" and decide to show it real power", " and decide it will will be suitable prey.", " and decide to show it what being a macro really means.") + " \ You slam your " + length(macro.pawWidth, unit, true) + " wide " + macro.footDesc() + " into it's comparatively tiny frame, which sends it into the side of a nearby building. As it attempts to pick itself up, you place your massive " + macro.footDesc() + " on its back, and slam the \ smaller macro back into the dirt."; } @@ -2475,39 +2475,39 @@ rules["stomp"].push({ rules["stomp"].push({ - "test": function(container, macro) { + "test": function (container, macro) { return hasExactly(container, "Macro", 1) && - nothingLarger(container, "Macro") && - isFatal(macro); + nothingLarger(container, "Macro") && + isFatal(macro); }, - "desc": function(container, macro, verbose, flat) { - return "You spot a smaller macro " + pickString("staring up at you in awe", "terrorizing the area", "running from you", "that is unaware of your presence") + pickString(" and decide to show it real power"," and decide it will will be suitable prey."," and decide to show it what being a macro really means.") + "\ + "desc": function (container, macro, verbose, flat) { + return "You spot a smaller macro " + pickString("staring up at you in awe", "terrorizing the area", "running from you", "that is unaware of your presence") + pickString(" and decide to show it real power", " and decide it will will be suitable prey.", " and decide to show it what being a macro really means.") + "\ You slam your " + length(macro.pawWidth, unit, true) + " wide " + macro.footDesc() + " into it's comparatively tiny frame, which sends it into the side of a nearby building. As it attempts to pick itself up, you place your massive " + macro.footDesc() + " on its back, and slam the \ smaller macro into the dirt where it perishes."; } }); rules["stomp"].push({ - "test": function(container, macro) { + "test": function (container, macro) { return hasExactly(container, "Macro", 1) && - nothingLarger(container, "Macro") && - isGory(macro); + nothingLarger(container, "Macro") && + isGory(macro); }, - "desc": function(container, macro, verbose, flat) { - return "You spot a smaller macro " + pickString("staring up at you in awe", "terrorizing the area", "running from you", "that is unaware of your presence") + pickString(" and decide to show it real power"," and decide it will will be suitable prey."," and decide to show it what being a macro really means.") + " \ + "desc": function (container, macro, verbose, flat) { + return "You spot a smaller macro " + pickString("staring up at you in awe", "terrorizing the area", "running from you", "that is unaware of your presence") + pickString(" and decide to show it real power", " and decide it will will be suitable prey.", " and decide to show it what being a macro really means.") + " \ You slam your " + length(macro.pawWidth, unit, true) + " wide " + macro.footDesc() + " into it's comparatively tiny frame; cracking bones and dashing it against the side of a nearby building. As it attempts to pick itself up, you place your massive " + macro.footDesc() + " on its \ back, and slam the smaller macro into the dirt. Shifting your weight forward, you feel it struggle beneath your " + macro.toeDesc(true) + " and watch as blood soaks into the ground."; } }); rules["stomp"].push({ - "test": function(container, macro) { + "test": function (container, macro) { return hasExactly(container, "Macro", 1) && - nothingLarger(container, "Macro") && - isSadistic(macro); + nothingLarger(container, "Macro") && + isSadistic(macro); }, - "desc": function(container, macro, verbose, flat) { - return "You spot a smaller macro " + pickString("staring up at you in awe", "terrorizing the area", "running from you", "that is unaware of your presence") + pickString(" and decide to show it real power"," and decide it will will be suitable prey."," and decide to show it what being a macro really means.") + " \ + "desc": function (container, macro, verbose, flat) { + return "You spot a smaller macro " + pickString("staring up at you in awe", "terrorizing the area", "running from you", "that is unaware of your presence") + pickString(" and decide to show it real power", " and decide it will will be suitable prey.", " and decide to show it what being a macro really means.") + " \ You slam your " + length(macro.pawWidth, unit, true) + " wide " + macro.footDesc() + " into it's comparatively tiny frame; cracking bones and dashing it against the side of a nearby building. As it attempts to drag itself away, you place your massive " + macro.footDesc() + " \ on its back, and slam the smaller macro into the dirt. Shifting your weight forward, you feel it struggle beneath your " + macro.toeDesc(true) + " and watch as blood soaks into the ground. You hold your stance as you feel it's struggles weaken and fade away. Just as it seems it \ can struggle no more, you place your entire weight of " + mass(macro.mass, unit) + " on it, and pop it's " + mass(80000, unit, true) + " body like a grape."; @@ -2517,44 +2517,44 @@ rules["stomp"].push({ //paw area over 1000 rules["stomp"].push({ - "test": function(container, macro) { + "test": function (container, macro) { return macro.pawArea <= 1000 && - macro.pawArea > 50 && - isNonFatal(macro); - }, "desc": function(container, macro, verbose, flat) { + macro.pawArea > 50 && + isNonFatal(macro); + }, "desc": function (container, macro, verbose, flat) { return "You bring your " + length(macro.pawWidth, unit, true) + " wide " + macro.footDesc() + " " + macro.footDesc() + " down on " + container.describe(verbose) + ". As your " + macro.footDesc() + " impacts its target, you feel its weight sink into the ground. After you lift \ your " + macro.soleDesc() + ", you notice it has left a deep, clear indent in the ground."; } }); rules["stomp"].push({ - "test": function(container, macro) { + "test": function (container, macro) { return macro.pawArea <= 1000 && - macro.pawArea > 50 && - isFatal(macro); - }, "desc": function(container, macro, verbose, flat) { + macro.pawArea > 50 && + isFatal(macro); + }, "desc": function (container, macro, verbose, flat) { return "You bring your " + length(macro.pawWidth, unit, true) + " wide " + macro.footDesc() + " " + macro.footDesc() + " down on " + container.describe(verbose) + ". As your " + macro.footDesc() + " impacts its target, you feel its weight sink into the ground. After you lift \ your " + macro.soleDesc() + ", a deep indent full of rubble is revealed."; } }); rules["stomp"].push({ - "test": function(container, macro) { + "test": function (container, macro) { return macro.pawArea <= 1000 && - macro.pawArea > 50 && - isGory(macro); - }, "desc": function(container, macro, verbose, flat) { + macro.pawArea > 50 && + isGory(macro); + }, "desc": function (container, macro, verbose, flat) { return "You bring your " + length(macro.pawWidth, unit, true) + " wide " + macro.footDesc() + " down on " + container.describe(verbose) + ". As your " + macro.footDesc() + " impacts its target, you feel its weight sink through buildings and into the \ ground. After you lift your " + macro.soleDesc() + ", a deep indent full of rubble and mangled corpses is revealed."; } }); rules["stomp"].push({ - "test": function(container, macro) { + "test": function (container, macro) { return macro.pawArea <= 1000 && - macro.pawArea > 50 && - isSadistic(macro); - }, "desc": function(container, macro, verbose, flat) { + macro.pawArea > 50 && + isSadistic(macro); + }, "desc": function (container, macro, verbose, flat) { return "You bring your " + length(macro.pawWidth, unit, true) + " wide " + macro.footDesc() + " " + macro.footDesc() + " down on " + container.describe(verbose) + ". As your " + macro.footDesc() + " impacts its target, you feel its weight sink through buildings and into the \ ground. After you lift your " + macro.soleDesc() + ", a deep indent full of blood-smeared rubble is revealed. Bone fragments and rebar stick out of the mess, tangled into a mold of your " + macro.footDesc() + "."; } @@ -2563,46 +2563,46 @@ rules["stomp"].push({ //paw area less than 1e7 rules["stomp"].push({ - "test": function(container, macro) { + "test": function (container, macro) { return macro.pawArea <= 1e7 && - macro.pawArea > 1000 && - isNonFatal(macro); - }, "desc": function(container, macro, verbose, flat) { + macro.pawArea > 1000 && + isNonFatal(macro); + }, "desc": function (container, macro, verbose, flat) { return "You lift your your colossal " + macro.footDesc() + " up and over " + container.describe(verbose) + ". With a sudden swiftness, you SLAM it down. Your " + macro.footDesc() + " shakes the ground and releases an audible BOOOOM.\ - Once you have lifted your " + macro.footDesc() + ", you notice it has left a " + length(macro.pawLength, unit, true) + " by "+ length(macro.pawWidth, unit, true) + " crater in the ground."; + Once you have lifted your " + macro.footDesc() + ", you notice it has left a " + length(macro.pawLength, unit, true) + " by " + length(macro.pawWidth, unit, true) + " crater in the ground."; } }); rules["stomp"].push({ - "test": function(container, macro) { + "test": function (container, macro) { return macro.pawArea <= 1e7 && - macro.pawArea > 1000 && - isFatal(macro); - }, "desc": function(container, macro, verbose, flat) { + macro.pawArea > 1000 && + isFatal(macro); + }, "desc": function (container, macro, verbose, flat) { return "You lift your your colossal " + macro.footDesc() + " up and over " + container.describe(verbose) + ". With a sudden swiftness, you SLAM it down. Your " + macro.footDesc() + " shakes the ground and releases an audible BOOOOM.\ - With a back and forth twist, you drive your " + macro.toeDesc() + " deep into the soil. Once you have lifted your " + macro.footDesc() + ", you notice it has left a " + length(macro.pawLength, unit, true) + " by "+ length(macro.pawWidth, unit, true) + " \ + With a back and forth twist, you drive your " + macro.toeDesc() + " deep into the soil. Once you have lifted your " + macro.footDesc() + ", you notice it has left a " + length(macro.pawLength, unit, true) + " by " + length(macro.pawWidth, unit, true) + " \ rubble-lined crater in the ground."; } }); rules["stomp"].push({ - "test": function(container, macro) { + "test": function (container, macro) { return macro.pawArea <= 1e7 && - macro.pawArea > 1000 && - isGory(macro); - }, "desc": function(container, macro, verbose, flat) { + macro.pawArea > 1000 && + isGory(macro); + }, "desc": function (container, macro, verbose, flat) { return "You lift your your colossal " + macro.footDesc() + " up and over " + container.describe(verbose) + ". With a sudden swiftness, you SLAM it down. Your " + macro.footDesc() + " shakes the ground and releases an audible BOOOOM.\ - With a back and forth twist, you drive your " + macro.toeDesc() + " deep into the soil. Once you have lifted your " + macro.footDesc() + ", you notice it has left a " + length(macro.pawLength, unit, true) + " by "+ length(macro.pawWidth, unit, true) + " \ + With a back and forth twist, you drive your " + macro.toeDesc() + " deep into the soil. Once you have lifted your " + macro.footDesc() + ", you notice it has left a " + length(macro.pawLength, unit, true) + " by " + length(macro.pawWidth, unit, true) + " \ rubble-lined crater in the ground. At the center of the crater, a pond of blood and liquified prey is filling, fed by the crater and your dripping " + macro.soleDesc() + "."; } }); rules["stomp"].push({ - "test": function(container, macro) { + "test": function (container, macro) { return macro.pawArea <= 1e7 && - macro.pawArea > 1000 && - isSadistic(macro); - }, "desc": function(container, macro, verbose, flat) { + macro.pawArea > 1000 && + isSadistic(macro); + }, "desc": function (container, macro, verbose, flat) { return "You lift your your colossal " + macro.footDesc() + " up and over " + container.describe(verbose) + ". With a sudden swiftness, you SLAM it down. Your " + macro.footDesc() + " shakes the ground and releases an audible BOOOOM.\ With a back and forth twist, your " + macro.toeDesc(true) + " knock over and pulverize buildings, driving them deep into the soil. Once you have lifted your " + macro.footDesc() + ", you notice it has left a " + length(macro.pawLength, unit, true) + " \ by "+ length(macro.pawWidth, unit, true) + " rubble-lined crater in the ground. At the center of the crater, a pond of blood and liquified prey is filling, fed by the crater and your dripping " + macro.soleDesc() + "."; @@ -2612,53 +2612,53 @@ rules["stomp"].push({ //paw area less than 1e11 rules["stomp"].push({ - "test": function(container, macro) { - return macro.pawArea <= 1e11 && - macro.pawArea > 1e7 && - !hasAtleast(container, "Planet", 1) && //this is to prevent these interactions from running on planets that have been shrunk - isNonFatal(macro); - }, "desc": function(container, macro, verbose, flat) { - return "Your massive " + macro.footDesc() + " casts a shadow over the landscape. You lazily bring it down on "+ container.describe(verbose) + ". You feel it make contact, and cloud of dust spreads around the area. As the dust settles, you can see the clear outline of \ - your " + macro.toeDesc(true) + " preserved in newly formed hills and valleys. Surrounding your " + macro.footDesc() + "print is a jagged mound of cracked stone; forming the wall of the " + length((Math.pow(macro.pawArea/Math.PI, .5)* 2.5), unit, true) + " wide \ + "test": function (container, macro) { + return macro.pawArea <= 1e11 && + macro.pawArea > 1e7 && + !hasAtleast(container, "Planet", 1) && //this is to prevent these interactions from running on planets that have been shrunk + isNonFatal(macro); + }, "desc": function (container, macro, verbose, flat) { + return "Your massive " + macro.footDesc() + " casts a shadow over the landscape. You lazily bring it down on " + container.describe(verbose) + ". You feel it make contact, and cloud of dust spreads around the area. As the dust settles, you can see the clear outline of \ + your " + macro.toeDesc(true) + " preserved in newly formed hills and valleys. Surrounding your " + macro.footDesc() + "print is a jagged mound of cracked stone; forming the wall of the " + length((Math.pow(macro.pawArea / Math.PI, .5) * 2.5), unit, true) + " wide \ dust-filled crater you created."; } }); rules["stomp"].push({ - "test": function(container, macro) { - return macro.pawArea <= 1e11 && - macro.pawArea > 1e7 && - !hasAtleast(container, "Planet", 1) && - isFatal(macro); - }, "desc": function(container, macro, verbose, flat) { - return "Your massive " + macro.footDesc() + " casts a shadow over the landscape. You lazily bring it down on "+ container.describe(verbose) + ". You feel it make contact, and cloud of dust spreads around the area. As the dust settles, you can see the clear outline of your " + macro.toeDesc(true) + " preserved \ - in newly formed hills and valleys. Surrounding your " + macro.footDesc() + "print is a jagged mound of cracked stone and twisted steel; forming the wall of the " + length((Math.pow(macro.pawArea/Math.PI, .5)* 2.5), unit, true) + " wide debris-filled crater you created."; + "test": function (container, macro) { + return macro.pawArea <= 1e11 && + macro.pawArea > 1e7 && + !hasAtleast(container, "Planet", 1) && + isFatal(macro); + }, "desc": function (container, macro, verbose, flat) { + return "Your massive " + macro.footDesc() + " casts a shadow over the landscape. You lazily bring it down on " + container.describe(verbose) + ". You feel it make contact, and cloud of dust spreads around the area. As the dust settles, you can see the clear outline of your " + macro.toeDesc(true) + " preserved \ + in newly formed hills and valleys. Surrounding your " + macro.footDesc() + "print is a jagged mound of cracked stone and twisted steel; forming the wall of the " + length((Math.pow(macro.pawArea / Math.PI, .5) * 2.5), unit, true) + " wide debris-filled crater you created."; } }); rules["stomp"].push({ - "test": function(container, macro) { - return macro.pawArea <= 1e11 && - macro.pawArea > 1e7 && - !hasAtleast(container, "Planet", 1) && - isGory(macro); - }, "desc": function(container, macro, verbose, flat) { - return "Your massive " + macro.footDesc() + " casts a shadow over the landscape. You lazily bring it down on "+ container.describe(verbose) + ". You feel it make contact, and cloud of dust spreads around the area. As the dust settles, you can see the clear outline of your " + macro.toeDesc(true) + " preserved \ - in debris-strewn hills and valleys. Surrounding your " + macro.footDesc() + "print is a jagged mound of cracked stone and twisted steel; forming the wall of the " + length((Math.pow(macro.pawArea/Math.PI, .5)* 2.5), unit, true) + " wide gore-filled crater you created. \ + "test": function (container, macro) { + return macro.pawArea <= 1e11 && + macro.pawArea > 1e7 && + !hasAtleast(container, "Planet", 1) && + isGory(macro); + }, "desc": function (container, macro, verbose, flat) { + return "Your massive " + macro.footDesc() + " casts a shadow over the landscape. You lazily bring it down on " + container.describe(verbose) + ". You feel it make contact, and cloud of dust spreads around the area. As the dust settles, you can see the clear outline of your " + macro.toeDesc(true) + " preserved \ + in debris-strewn hills and valleys. Surrounding your " + macro.footDesc() + "print is a jagged mound of cracked stone and twisted steel; forming the wall of the " + length((Math.pow(macro.pawArea / Math.PI, .5) * 2.5), unit, true) + " wide gore-filled crater you created. \ The basin of the crater lined with with a smooth steel, glass, and bone aggregate. Steam rises from the mix as it cools and hardens"; } }); rules["stomp"].push({ - "test": function(container, macro) { - return macro.pawArea <= 1e11 && - macro.pawArea > 1e7 && - !hasAtleast(container, "Planet", 1) && - isSadistic(macro); - }, "desc": function(container, macro, verbose, flat) { - return "Your massive " + macro.footDesc() + " casts a shadow over the landscape. You lazily bring it down on "+ container.describe(verbose) + ". As you lower your leg, you feel it catch the tops of the taller skyscrapers first, collapsing them with no effort. As they fall, you \ + "test": function (container, macro) { + return macro.pawArea <= 1e11 && + macro.pawArea > 1e7 && + !hasAtleast(container, "Planet", 1) && + isSadistic(macro); + }, "desc": function (container, macro, verbose, flat) { + return "Your massive " + macro.footDesc() + " casts a shadow over the landscape. You lazily bring it down on " + container.describe(verbose) + ". As you lower your leg, you feel it catch the tops of the taller skyscrapers first, collapsing them with no effort. As they fall, you \ crush more and more buildings until you feel your " + macro.footDesc() + " smash into the ground. You settle into the landscape and cloud of dust spreads around the area. As the dust settles, you can see the clear outline of your " + macro.toeDesc(true) + " preserved in debris-strewn \ - hills and valleys. Surrounding your " + macro.footDesc() + "print is a jagged mound of cracked stone and twisted steel; forming the wall of the " + length((Math.pow(macro.pawArea/Math.PI, .5)* 2.5), unit, true) + " wide gore-filled crater you created. The basin of the crater \ + hills and valleys. Surrounding your " + macro.footDesc() + "print is a jagged mound of cracked stone and twisted steel; forming the wall of the " + length((Math.pow(macro.pawArea / Math.PI, .5) * 2.5), unit, true) + " wide gore-filled crater you created. The basin of the crater \ lined with with a smooth steel, glass, and bone aggregate. Steam rises from the mix as it cools and hardens"; } }); @@ -2666,64 +2666,64 @@ rules["stomp"].push({ //paw area less than 2e14 rules["stomp"].push({ - "test": function(container, macro) { + "test": function (container, macro) { return (macro.pawArea < 2e14 || - hasAtleast(container, "Continent", 1)) && - macro.pawArea > 1e11 && - !hasAtleast(container, "Planet", 1) && - isNonFatal(macro); - }, "desc": function(container, macro, verbose, flat) { - return "Your massive " + macro.footDesc() + " turns day to night as you bring it down on "+ container.describe(verbose) + ". You feel it sink deep into the ground and watch as a visible shockwave extends outwards, knocking over everything in its path. Your " + macro.footDesc() + "\ - continues sinking into the bedrock until only your enoumous calf is above where the ground was moments before. Two distict, concentric craters have formed below you. The inner one is a " + length(macro.pawLength, unit, true) + " by "+ length(macro.pawWidth, unit, true) + " image \ - of your "+ macro.footDesc() + " surrounded by irregular mountains that barely peek over the rim of the outer " + length((Math.pow(macro.pawArea/Math.PI, .5)* 2.5), unit, true) + " across crater. Once you remove your " + macro.footDesc() + " from its molded print, you notice that \ + hasAtleast(container, "Continent", 1)) && + macro.pawArea > 1e11 && + !hasAtleast(container, "Planet", 1) && + isNonFatal(macro); + }, "desc": function (container, macro, verbose, flat) { + return "Your massive " + macro.footDesc() + " turns day to night as you bring it down on " + container.describe(verbose) + ". You feel it sink deep into the ground and watch as a visible shockwave extends outwards, knocking over everything in its path. Your " + macro.footDesc() + "\ + continues sinking into the bedrock until only your enoumous calf is above where the ground was moments before. Two distict, concentric craters have formed below you. The inner one is a " + length(macro.pawLength, unit, true) + " by " + length(macro.pawWidth, unit, true) + " image \ + of your "+ macro.footDesc() + " surrounded by irregular mountains that barely peek over the rim of the outer " + length((Math.pow(macro.pawArea / Math.PI, .5) * 2.5), unit, true) + " across crater. Once you remove your " + macro.footDesc() + " from its molded print, you notice that \ the bottom of the smaller crater is filled with deep ravines."; } }); rules["stomp"].push({ - "test": function(container, macro) { + "test": function (container, macro) { return (macro.pawArea < 2e14 || - hasAtleast(container, "Continent", 1)) && - macro.pawArea > 1e11 && - !hasAtleast(container, "Planet", 1) && - isFatal(macro); - }, "desc": function(container, macro, verbose, flat) { - return "Your massive " + macro.footDesc() + " turns day to night as you bring it down on "+ container.describe(verbose) + ". You feel it sink deep into the ground and watch as a visible shockwave extends outwards, knocking over everything in its path. Your " + macro.footDesc() + "\ - continues sinking into the bedrock until only your enoumous blood-soaked calf is above where the ground was moments before. Two distict, concentric craters have formed below you. The inner one is a " + length(macro.pawLength, unit, true) + " by "+ length(macro.pawWidth, unit, true) + " image \ - of your "+ macro.footDesc() + " surrounded by irregular mountains of of broken concrete and steel that barely peek over the rim of the outer " + length((Math.pow(macro.pawArea/Math.PI, .5)* 3), unit, true) + " across crater. Once you remove your " + macro.footDesc() + " from its \ + hasAtleast(container, "Continent", 1)) && + macro.pawArea > 1e11 && + !hasAtleast(container, "Planet", 1) && + isFatal(macro); + }, "desc": function (container, macro, verbose, flat) { + return "Your massive " + macro.footDesc() + " turns day to night as you bring it down on " + container.describe(verbose) + ". You feel it sink deep into the ground and watch as a visible shockwave extends outwards, knocking over everything in its path. Your " + macro.footDesc() + "\ + continues sinking into the bedrock until only your enoumous blood-soaked calf is above where the ground was moments before. Two distict, concentric craters have formed below you. The inner one is a " + length(macro.pawLength, unit, true) + " by " + length(macro.pawWidth, unit, true) + " image \ + of your "+ macro.footDesc() + " surrounded by irregular mountains of of broken concrete and steel that barely peek over the rim of the outer " + length((Math.pow(macro.pawArea / Math.PI, .5) * 3), unit, true) + " across crater. Once you remove your " + macro.footDesc() + " from its \ molded print, you notice that the bottom of the smaller crater is filled with ravines that reach all the way to the mantle. With time, a supervolcano will form here."; } }); rules["stomp"].push({ - "test": function(container, macro) { + "test": function (container, macro) { return (macro.pawArea < 2e14 || - hasAtleast(container, "Continent", 1)) && - macro.pawArea > 1e11 && - !hasAtleast(container, "Planet", 1) && - isGory(macro); - }, "desc": function(container, macro, verbose, flat) { - return "Your massive " + macro.footDesc() + " turns day to night as you bring it down on "+ container.describe(verbose) + ". You feel it sink deep into the ground and watch as a visible shockwave extends outwards, knocking over everything in its path. The shrapnel riding behind the \ + hasAtleast(container, "Continent", 1)) && + macro.pawArea > 1e11 && + !hasAtleast(container, "Planet", 1) && + isGory(macro); + }, "desc": function (container, macro, verbose, flat) { + return "Your massive " + macro.footDesc() + " turns day to night as you bring it down on " + container.describe(verbose) + ". You feel it sink deep into the ground and watch as a visible shockwave extends outwards, knocking over everything in its path. The shrapnel riding behind the \ shocwave rips thorugh the area, painting it in red. Your " + macro.footDesc() + " continues sinking into the bedrock until only your enoumous blood-soaked calf is above where the ground was moments before. Two distict, concentric craters have formed below you. The inner one is a \ - " + length(macro.pawLength, unit, true) + " by "+ length(macro.pawWidth, unit, true) + " image of your "+ macro.footDesc() + " surrounded by irregular mountains composed of broken concrete and steel that barely peek over the rim of the outer \ - " + length((Math.pow(macro.pawArea/Math.PI, .5)* 2.5), unit, true) + " across crater. Once you remove your " + macro.footDesc() + " from its molded print, you notice that the bottom of the smaller crater is filled with ravines that reach all the way to the mantle. The lava \ + " + length(macro.pawLength, unit, true) + " by " + length(macro.pawWidth, unit, true) + " image of your " + macro.footDesc() + " surrounded by irregular mountains composed of broken concrete and steel that barely peek over the rim of the outer \ + " + length((Math.pow(macro.pawArea / Math.PI, .5) * 2.5), unit, true) + " across crater. Once you remove your " + macro.footDesc() + " from its molded print, you notice that the bottom of the smaller crater is filled with ravines that reach all the way to the mantle. The lava \ seeping upwards begins melting the steel, glass, concrete, and bone fragments that surround it."; } }); rules["stomp"].push({ - "test": function(container, macro) { + "test": function (container, macro) { return (macro.pawArea < 2e14 || - hasAtleast(container, "Continent", 1)) && - macro.pawArea > 1e11 && - !hasAtleast(container, "Planet", 1) && - isSadistic(macro); - }, "desc": function(container, macro, verbose, flat) { - return "Your massive " + macro.footDesc() + " turns day to night as you bring it down on "+ container.describe(verbose) + ". You feel it sink deep into the ground and watch as a visible shockwave extends outwards, knocking over everything in its path. The shrapnel riding behind the \ + hasAtleast(container, "Continent", 1)) && + macro.pawArea > 1e11 && + !hasAtleast(container, "Planet", 1) && + isSadistic(macro); + }, "desc": function (container, macro, verbose, flat) { + return "Your massive " + macro.footDesc() + " turns day to night as you bring it down on " + container.describe(verbose) + ". You feel it sink deep into the ground and watch as a visible shockwave extends outwards, knocking over everything in its path. The shrapnel riding behind the \ shockave rips thorugh the area, painting it in red. Your " + macro.footDesc() + "continues sinking into the bedrock until only your enoumous blood-soaked calf is above where the ground was moments before. Two distict, concentric craters have formed below you. The inner one is a \ - " + length(macro.pawLength, unit, true) + " by "+ length(macro.pawWidth, unit, true) + " image of your "+ macro.footDesc() + " surrounded by irregular mountains of of broken concrete and steel that barely peek over the rim of the outer \ - " + length((Math.pow(macro.pawArea/Math.PI, .5)* 2.5), unit, true) + " across crater. Once you remove your " + macro.footDesc() + " from its molded print, you notice that the bottom of the smaller crater is filled with ravines that reach all the way to the mantle. The lava \ - seeping upwards begins melting the steel, glass, concrete, and bone fragments that surround it. The simple act of slamming your " + macro.footDesc() + " down has created a " + (1e7 <= (Math.pow(macro.pawArea/Math.PI, .5)* 4) ? "planet-wide":length((Math.pow(macro.pawArea/Math.PI, .5)* 4), unit, true) + " wide") + " \ + " + length(macro.pawLength, unit, true) + " by " + length(macro.pawWidth, unit, true) + " image of your " + macro.footDesc() + " surrounded by irregular mountains of of broken concrete and steel that barely peek over the rim of the outer \ + " + length((Math.pow(macro.pawArea / Math.PI, .5) * 2.5), unit, true) + " across crater. Once you remove your " + macro.footDesc() + " from its molded print, you notice that the bottom of the smaller crater is filled with ravines that reach all the way to the mantle. The lava \ + seeping upwards begins melting the steel, glass, concrete, and bone fragments that surround it. The simple act of slamming your " + macro.footDesc() + " down has created a " + (1e7 <= (Math.pow(macro.pawArea / Math.PI, .5) * 4) ? "planet-wide" : length((Math.pow(macro.pawArea / Math.PI, .5) * 4), unit, true) + " wide") + " \ wasteland."; } }); @@ -2731,12 +2731,12 @@ rules["stomp"].push({ // stomping a planet rules["stomp"].push({ - "test": function(container, macro) { + "test": function (container, macro) { return hasExactly(container, "Planet", 1) && - hasOnly(container, ["Planet"]) && - isFatal(macro); - }, "desc": function(container, macro, verbose, flat) { - return "You place your two unbelievably large " + macro.footDesc(true) + " around "+ container.describe(verbose) + " and begin to squeeze it between your " + length(macro.pawWidth, unit, true) + " wide " + macro.toeDesc(true) + ". As you apply pressure, the captive globe \ + hasOnly(container, ["Planet"]) && + isFatal(macro); + }, "desc": function (container, macro, verbose, flat) { + return "You place your two unbelievably large " + macro.footDesc(true) + " around " + container.describe(verbose) + " and begin to squeeze it between your " + length(macro.pawWidth, unit, true) + " wide " + macro.toeDesc(true) + ". As you apply pressure, the captive globe \ begins to bulge outward at the middle, and firmly press against its prison. Continuing to crush it, you feel the continents deform and magma begin to flow over the surface, fighting with and evaporating the oceans. As the last of the water drys up, the atmosphere thins and \ spreads over your form, cooling the lava against the hard vacuum of space. Left with a crushed rocky orb between your " + macro.footDesc() + ", you start slowly increasing the pressure on the planet, and feel as it goes from a rough sphere to a rapidly crumbling pancake. The \ remaining rock grinds away to dust as you massage your mighty " + macro.soleDesc(true) + " against each other."; @@ -2744,12 +2744,12 @@ rules["stomp"].push({ }); rules["stomp"].push({ - "test": function(container, macro) { + "test": function (container, macro) { return hasExactly(container, "Planet", 1) && - hasOnly(container, ["Planet"]) && - isGory(macro); - }, "desc": function(container, macro, verbose, flat) { - return "You place your two unbelievably large " + macro.footDesc(true) + " around "+ container.describe(verbose) + ". As your " + macro.soleDesc(true) + " spread across the surface of the planet, the civilization beneath breaks apart and lubricates the land.\ + hasOnly(container, ["Planet"]) && + isGory(macro); + }, "desc": function (container, macro, verbose, flat) { + return "You place your two unbelievably large " + macro.footDesc(true) + " around " + container.describe(verbose) + ". As your " + macro.soleDesc(true) + " spread across the surface of the planet, the civilization beneath breaks apart and lubricates the land.\ You shift your " + macro.footDesc() + " for better grip and begin to squeeze the planet between your " + length(macro.pawWidth, unit, true) + " wide " + macro.toeDesc(true) + ". As you apply pressure, the captive globe begins to bulge outward at the middle, \ and press up against its prison. Continuing to crush it, you feel the continents deform and magma begin to flow over the surface. The surface warms beneath you, as the dwindling oceans fill with cooling stone. As the last of the water drys up, the atmosphere thins \ and spreads over your form, cooling the remaining lava against the hard vacuum of space. Left with a crushed rocky orb between your " + macro.footDesc() + ", you start slowly increasing the pressure on the planet, and feel as it goes from a rough sphere to a rapidly \ @@ -2758,12 +2758,12 @@ rules["stomp"].push({ }); rules["stomp"].push({ - "test": function(container, macro) { + "test": function (container, macro) { return hasExactly(container, "Planet", 1) && - hasOnly(container, ["Planet"]) && - isSadistic(macro); - }, "desc": function(container, macro, verbose, flat) { - return "You place your two unbelievably large " + macro.footDesc(true) + " around "+ container.describe(verbose) + ". As your " + macro.soleDesc(true) + " spread across the surface of the planet, the civilization beneath breaks apart and lubricates the land.\ + hasOnly(container, ["Planet"]) && + isSadistic(macro); + }, "desc": function (container, macro, verbose, flat) { + return "You place your two unbelievably large " + macro.footDesc(true) + " around " + container.describe(verbose) + ". As your " + macro.soleDesc(true) + " spread across the surface of the planet, the civilization beneath breaks apart and lubricates the land.\ You shift your " + macro.footDesc() + " for better grip and begin to squeeze the planet between your " + length(macro.pawWidth, unit, true) + " wide " + macro.toeDesc(true) + ". As you apply pressure, the captive globe begins to bulge outward at the middle, \ and press up against its prison. Continuing to crush it, you feel the continents deform and magma begin to flow over the surface. The planet burns and dies below you, as the dwindling oceans fill with cooling stone. As the last of the water drys up, the atmosphere thins \ and spreads over your form, cooling the remaining lava against the hard vacuum of space. Left with a crushed rocky orb between your " + macro.footDesc() + ", you start slowly increasing the pressure on the planet, and feel as it goes from a rough sphere to a rapidly \ @@ -2772,11 +2772,11 @@ rules["stomp"].push({ }); rules["stomp"].push({ - "test": function(container, macro) { - return (hasAtleast(container, "Star", 1) || - hasAtleast(container, "Solar System", 1)) && - isFatal(macro); - }, "desc": function(container, macro, verbose, flat) { + "test": function (container, macro) { + return (hasAtleast(container, "Star", 1) || + hasAtleast(container, "Solar System", 1)) && + isFatal(macro); + }, "desc": function (container, macro, verbose, flat) { return "You place your two " + length(macro.pawLength, unit, true) + " long " + macro.footDesc(true) + " around " + container.describe(verbose) + " and begin to squeeze " + (container.count > 1 ? "them" : "it") + " between your " + length(macro.pawWidth, unit, true) + " wide \ " + macro.toeDesc(true) + ". The crushing gravity your " + macro.footDesc(true) + " generate is enough to vaporize your prey before your " + macro.toeDesc(true) + " even touch each other. As they come together, the energy crushes the remaining dust with enough pressure to form \ new elements. Eventually nothing remains but the bottom of your " + macro.footDesc(true) + "."; @@ -2786,31 +2786,31 @@ rules["stomp"].push({ // ANAL VORE rules["anal-vore"].push({ - "test": function(container, macro) { + "test": function (container, macro) { return hasExactly(container, "Person", 1) && - hasOnly(container, ["Person"]); - }, "desc": function(container, macro, verbose, flat) { - let adjective = ["musky","winding","churning"][Math.floor(Math.random()*3)]; + hasOnly(container, ["Person"]); + }, "desc": function (container, macro, verbose, flat) { + let adjective = ["musky", "winding", "churning"][Math.floor(Math.random() * 3)]; return "Your weighty rump slams against the ground. A shock of pleasure runs up your spine as a " + container.describe(verbose) + " slides up your ass," + - (macro.maleParts ? " grinding against your prostate" : "") + ". A powerful clench drags them deeper into your bowels, sealing them away in your " + adjective + " depths."; + (macro.maleParts ? " grinding against your prostate" : "") + ". A powerful clench drags them deeper into your bowels, sealing them away in your " + adjective + " depths."; } }); rules["anal-vore"].push({ - "test": function(container, macro) { + "test": function (container, macro) { return hasExactly(container, "Car", 1) && - hasOnly(container, ["Car"]); - }, "desc": function(container, macro, verbose, flat) { + hasOnly(container, ["Car"]); + }, "desc": function (container, macro, verbose, flat) { return "You ram " + container.describe(verbose) + " up your ass, biting your lip as it" + (macro.maleParts ? " rubs along your prostate" : " slides into velvety depths") + ".\ You moan and clench hard, yanking it in with a wet shlrrp and abruplty silencing its blaring horn."; } }); rules["anal-vore"].push({ - "test": function(container, macro) { + "test": function (container, macro) { return hasExactly(container, "Bus", 1) && - hasOnly(container, ["Bus"]); - }, "desc": function(container, macro, verbose, flat) { + hasOnly(container, ["Bus"]); + }, "desc": function (container, macro, verbose, flat) { return "A speeding bus slams on its brakes as you abruptly sit - but it's too late to stop. A gasp flies from your lips as it penetrates your greedy ass, sinking halfway in and coming to a halt. \ You grunt and squeeze, causing its frame to creak and groan. Two fingers to the back are enough to get it moving again, and it slowly works inside. You shiver and moan, taking it in all the way. \ Your ass claims " + container.describe(verbose) + "."; @@ -2818,10 +2818,10 @@ rules["anal-vore"].push({ }); rules["anal-vore"].push({ - "test": function(container, macro) { + "test": function (container, macro) { return hasExactly(container, "Business", 1) && - hasOnly(container, ["Business"]); - }, "desc": function(container, macro, verbose, flat) { + 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 crCraCHH \ 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 tremour within the structure."; } @@ -2829,20 +2829,20 @@ rules["anal-vore"].push({ rules["anal-vore"].push({ - "test": function(container, macro) { + "test": function (container, macro) { return hasExactly(container, "Train", 1) && - hasOnly(container, ["Train"]); - }, "desc": function(container, macro, verbose, flat) { + hasOnly(container, ["Train"]); + }, "desc": function (container, macro, verbose, flat) { var cars = container.contents["Train"].contents["Train Car"].count; return "Your massive fingers wrap around a train, yanking it from the rails with a tremendous screech of metal-on-metal. You squat down low, eyes rolling back in anticipation as you thrust the locomotive towards your massive ass - and then it hits home. A moan of pleasure shakes the earth, your ravenous pucker spread around the engine and sucking it in with a squelch. Powerful muscles squeeze and grab...and " + container.describe(verbose) + " swiftly vanishes into your bowels, every one of the " + cars + " cars a fresh shock of pleasure as they glide into your musky depths."; } }); rules["anal-vore"].push({ - "test": function(container, macro) { + "test": function (container, macro) { return hasExactly(container, "Planet", 1) && - hasOnly(container, ["Planet"]); - }, "desc": function(container, macro, verbose, flat) { + hasOnly(container, ["Planet"]); + }, "desc": function (container, macro, verbose, flat) { return "Your enormous hands guide a planet towards your cheeks - pressing it firmly into your pucker with a dull, muffled shlph...and " + container.describe(verbose) + " sinks into your bowels, sealed away from the universe..."; } }); @@ -2850,170 +2850,170 @@ rules["anal-vore"].push({ //Cock Vore rules["cock-vore"].push({ - "test": function(container, macro) { - return macro.dickMass <= 1000 && - container.count > 0; + "test": function (container, macro) { + return macro.dickMass <= 1000 && + container.count > 0; - }, "desc": function(container, macro, verbose, flat) { + }, "desc": function (container, macro, verbose, flat) { return "You snatch " + container.describe(verbose) + " from the ground and shove them inside your " + macro.describeDick + ". With a sluurp you pull them deep into your shaft. You watch as the bulge in your manhood \ - gets pulled closer to your body by powerful clenches, until it vanishes into your " + pickString("throbbing","churning","eager","awaiting","heavy") + " balls."; + gets pulled closer to your body by powerful clenches, until it vanishes into your " + pickString("throbbing", "churning", "eager", "awaiting", "heavy") + " balls."; } }); rules["cock-vore"].push({ - "test": function(container, macro) { - return macro.dickMass <= 50000 && - macro.dickMass > 1000 && - container.count > 0; + "test": function (container, macro) { + return macro.dickMass <= 50000 && + macro.dickMass > 1000 && + container.count > 0; - }, "desc": function(container, macro, verbose, flat) { + }, "desc": function (container, macro, verbose, flat) { return "You pluck " + container.describe(verbose) + " from the ground and shove them against the head of your " + length(macro.dickDiameter, unit, true) + " wide " + macro.describeDick + ". They struggle to escape your grasp, while your cockslit \ - opens and devours them with a sluuurP. You watch as the squirming bulge in your manhood travels down your shaft until it vanishes into your " + pickString("throbbing","churning","eager","awaiting","heavy") + " balls."; + opens and devours them with a sluuurP. You watch as the squirming bulge in your manhood travels down your shaft until it vanishes into your " + pickString("throbbing", "churning", "eager", "awaiting", "heavy") + " balls."; } }); rules["cock-vore"].push({ - "test": function(container, macro) { - return macro.dickMass <= 5000000 && - macro.dickMass > 50000 && - container.count > 0; + "test": function (container, macro) { + return macro.dickMass <= 5000000 && + macro.dickMass > 50000 && + container.count > 0; - }, "desc": function(container, macro, verbose, flat) { + }, "desc": function (container, macro, verbose, flat) { return "Your gigantic fingers reach down and grab " + container.describe(verbose) + ". Holding them in your iron grip, you raise them to your awaitng " + macro.describeDick + ". As they struggle to escape, your cockslit opens wide and envelops your prey. Once it has swallowed everything, it clamps down and pulls those unfortunate enough to be in your shaft deep inside,\ - packing down its meal with muffled snAps and CRRUnCHes. Enventually your prey reaches the base of your cock, and everything left gets shoved into your " + pickString("throbbing","churning","eager","awaiting","heavy") + " balls with a final mighty clench."; + packing down its meal with muffled snAps and CRRUnCHes. Enventually your prey reaches the base of your cock, and everything left gets shoved into your " + pickString("throbbing", "churning", "eager", "awaiting", "heavy") + " balls with a final mighty clench."; } }); rules["cock-vore"].push({ - "test": function(container, macro) { - return macro.dickMass <= 1e9 && - macro.dickMass > 5000000 && - container.count > 0; + "test": function (container, macro) { + return macro.dickMass <= 1e9 && + macro.dickMass > 5000000 && + container.count > 0; - }, "desc": function(container, macro, verbose, flat) { + }, "desc": function (container, macro, verbose, flat) { return "You lay the " + length(macro.dickDiameter, unit, true) + " wide tip of your cock on the ground and thrust forward, filling your cock with " + container.describe(verbose) + ". The tip of your member bulges with its cargo. As you slowly clench to drag your prey into your bulging dick, the sensation of them rubbing against the inside of your cock causes you to release a glob of precum that lubricates your stretched passage. \ After several more powerful clenches, you feel the bulge pass the halfway mark of your " + macro.describeDick + ". The speed of the bulge picks up, as the entirety of your captive prey has been thoughly lubricated. You feel them slide through your utethra, and shudder with anticipation as they approach your \ - " + pickString("throbbing","churning","eager","awaiting","heavy","mammoth") + " balls. Finally your meal reaches your body, and drops into your cum factories."; + " + pickString("throbbing", "churning", "eager", "awaiting", "heavy", "mammoth") + " balls. Finally your meal reaches your body, and drops into your cum factories."; } }); rules["cock-vore"].push({ - "test": function(container, macro) { - return macro.dickMass <= 1e14 && - macro.dickMass > 1e9 && - container.count > 0; + "test": function (container, macro) { + return macro.dickMass <= 1e14 && + macro.dickMass > 1e9 && + container.count > 0; - }, "desc": function(container, macro, verbose, flat) { + }, "desc": function (container, macro, verbose, flat) { return "You lay the " + length(macro.dickDiameter, unit, true) + " wide tip of your cock on the ground and grind it along the earth, ripping up the terrain and giving all in your path nowhere to go; except into your " + macro.describeDick + ". The colossal tip of your member bulges with " + container.describe(verbose) + ". As you slowly clench your mighty rod, you feel your prey shift and slide along the inside of your cum channel. \ After a few more moments of pure pleasure, you feel the bulge pass the halfway mark of your tool. The speed of the bulge picks up, as the entirety of your captive prey has been compacted and lubricated by their journey. With every pull, a shudder of ecstasy goes up your spine, until those inside your cock finally reach their ultimate destination, \ - your " + pickString("throbbing","churning","eager","awaiting","heavy", "mammoth") + " balls."; + your " + pickString("throbbing", "churning", "eager", "awaiting", "heavy", "mammoth") + " balls."; } }); rules["cock-vore"].push({ - "test": function(container, macro) { - return macro.dickMass <= 1e19 && - macro.dickMass > 1e14 && - container.count > 0; - - }, "desc": function(container, macro, verbose, flat) { - return "You lay your " + length(macro.dickDiameter, unit, true) + " across member on the terrain and begin using your mammoth dick muscles to create a mighty wind, pulling in the surrounding landscape, ripping up the terrain and pulling it within your " + macro.describeDick + ". The colossal slit at the tip of your staff opens wide as buildings, trees, and everything else gets sucked inside.\ - You feel the prey sliding down your cock rub against your utethra as they pass through. You can even see some of the larger buildings as small, quick moving bulges within your manhood. After several minutes of sucking, your " + pickString("throbbing","churning","eager","awaiting","heavy", "mammoth") + " balls are filled by " + container.describe(verbose) + ". As you shift you cock off the ground, you \ + "test": function (container, macro) { + return macro.dickMass <= 1e19 && + macro.dickMass > 1e14 && + container.count > 0; + + }, "desc": function (container, macro, verbose, flat) { + return "You lay your " + length(macro.dickDiameter, unit, true) + " across member on the terrain and begin using your mammoth dick muscles to create a mighty wind, pulling in the surrounding landscape, ripping up the terrain and pulling it within your " + macro.describeDick + ". The colossal slit at the tip of your staff opens wide as buildings, trees, and everything else gets sucked inside.\ + You feel the prey sliding down your cock rub against your utethra as they pass through. You can even see some of the larger buildings as small, quick moving bulges within your manhood. After several minutes of sucking, your " + pickString("throbbing", "churning", "eager", "awaiting", "heavy", "mammoth") + " balls are filled by " + container.describe(verbose) + ". As you shift you cock off the ground, you \ the satisfying weight of your prey bounce and jiggle within your sack."; } }); rules["cock-vore"].push({ - "test": function(container, macro) { - return (macro.dickMass <= 1e23 || - nothingLarger(container, "Continent")) && - macro.dickMass > 1e19 && - container.count > 0; + "test": function (container, macro) { + return (macro.dickMass <= 1e23 || + nothingLarger(container, "Continent")) && + macro.dickMass > 1e19 && + container.count > 0; - }, "desc": function(container, macro, verbose, flat) { - return "You lay your " + length(macro.dickDiameter, unit, true) + " across member on the planet and begin using your enourmous dick muscles to vacuum in the surrounding landscape, ripping up huge chunks of the terrain and pulling them inside your " + macro.describeDick + ". The ginormous gaping slit at the tip of your colossal dick opens wide as cities, rivers, lakes, and mountains vanish into your depths. \ - A steady stream of unbroken friction rubs against the inside of your mammoth tool, almost causing you to black out from pleasure. As your " + pickString("throbbing","churning","eager","awaiting","heavy", "mammoth") + " balls fill, you start slowing down your enormous contractions, until you have " + container.describe(verbose) + " captive within your stretched sack."; + }, "desc": function (container, macro, verbose, flat) { + return "You lay your " + length(macro.dickDiameter, unit, true) + " across member on the planet and begin using your enourmous dick muscles to vacuum in the surrounding landscape, ripping up huge chunks of the terrain and pulling them inside your " + macro.describeDick + ". The ginormous gaping slit at the tip of your colossal dick opens wide as cities, rivers, lakes, and mountains vanish into your depths. \ + A steady stream of unbroken friction rubs against the inside of your mammoth tool, almost causing you to black out from pleasure. As your " + pickString("throbbing", "churning", "eager", "awaiting", "heavy", "mammoth") + " balls fill, you start slowing down your enormous contractions, until you have " + container.describe(verbose) + " captive within your stretched sack."; } }); rules["cock-vore"].push({ - "test": function(container, macro) { + "test": function (container, macro) { return hasExactly(container, "Planet", 1) && - hasOnly(container, ["Planet"]) && - macro.dickGirth <= 2.5e14; + hasOnly(container, ["Planet"]) && + macro.dickGirth <= 2.5e14; - }, "desc": function(container, macro, verbose, flat) { - return "You shove your " + length(macro.dickDiameter, unit, true) + " wide throbbing cockhead against the planet as your greedy slit stretches wide. The globe shudders and begins to slowly enter your stretched hole. As you get closer and closer to covering an entire hemisphere with \ + }, "desc": function (container, macro, verbose, flat) { + return "You shove your " + length(macro.dickDiameter, unit, true) + " wide throbbing cockhead against the planet as your greedy slit stretches wide. The globe shudders and begins to slowly enter your stretched hole. As you get closer and closer to covering an entire hemisphere with \ your " + macro.describeDick + ", you feel the pressure rise. Shoving the planet inside your cock takes more and more effort, until with a final shove, you feel your tip of your dick pass the center of the sphere, and hold it snug. You stop to squeeze your shaft, and feel how far it has been stretched outward.\ You begin flexing your cock to bring the world fully inside your enourmous prick, and after a few more gulps, light ceases to fall on Earth. You help your cock along with its planetary feast by grabbing it and slowly pulling down the shaft, lodging the planet deeper, and deeper, and deeper within you.\ - After what seems like a lifetime of pleasure, the world finally reaches the base of your thick cock, and squeezes down into your " + pickString("throbbing","churning","eager","awaiting","heavy", "mammoth") + " balls. You reach down and touch your sack, feeling it digest " + container.describe(verbose) + "."; + After what seems like a lifetime of pleasure, the world finally reaches the base of your thick cock, and squeezes down into your " + pickString("throbbing", "churning", "eager", "awaiting", "heavy", "mammoth") + " balls. You reach down and touch your sack, feeling it digest " + container.describe(verbose) + "."; } }); rules["cock-vore"].push({ - "test": function(container, macro) { + "test": function (container, macro) { return hasExactly(container, "Planet", 1) && - hasOnly(container, ["Planet"]) && - macro.dickGirth > 2.5e14; + hasOnly(container, ["Planet"]) && + macro.dickGirth > 2.5e14; - }, "desc": function(container, macro, verbose, flat) { - return "You shove your " + length(macro.dickDiameter, unit, true) + " wide throbbing cockhead against the planet as your greedy slit stretches wide to envelop it. You feel it slowly enter your gaping hole and after a few massive clences of your " + macro.describeDick + ", light ceases to fall on Earth. \ - You run your fingers down you shaft, feeling the bulge, and massaging it along. The slurping of your cock pulls it toward your abdomen until it eventually runs out of length, and is squeezed down into your " + pickString("throbbing","churning","eager","awaiting","heavy", "mammoth") + " balls. You reach down and touch your sack, feeling it digest " + container.describe(verbose) + "."; + }, "desc": function (container, macro, verbose, flat) { + return "You shove your " + length(macro.dickDiameter, unit, true) + " wide throbbing cockhead against the planet as your greedy slit stretches wide to envelop it. You feel it slowly enter your gaping hole and after a few massive clences of your " + macro.describeDick + ", light ceases to fall on Earth. \ + You run your fingers down you shaft, feeling the bulge, and massaging it along. The slurping of your cock pulls it toward your abdomen until it eventually runs out of length, and is squeezed down into your " + pickString("throbbing", "churning", "eager", "awaiting", "heavy", "mammoth") + " balls. You reach down and touch your sack, feeling it digest " + container.describe(verbose) + "."; } }); rules["cock-vore"].push({ - "test": function(container, macro) { - return hasAtleast(container, "Star", 1) || - hasAtleast(container, "Solar System", 1) + "test": function (container, macro) { + return hasAtleast(container, "Star", 1) || + hasAtleast(container, "Solar System", 1) - }, "desc": function(container, macro, verbose, flat) { - return "You open your cumslit wide and let gravity fill your " + length(macro.dickDiameter, unit, true) + " wide throbbing cockhead with " + container.describe(verbose) + ". The tip of your cock closes and begins clenching to pull your prey deeper. \ - You run your fingers down your " + macro.describeDick + ", feeling it work its meal deeper within your shaft, and massaging it ensure everything inside continues towards your " + pickString("throbbing","churning","eager","awaiting","heavy", "mammoth") + " balls. \ + }, "desc": function (container, macro, verbose, flat) { + return "You open your cumslit wide and let gravity fill your " + length(macro.dickDiameter, unit, true) + " wide throbbing cockhead with " + container.describe(verbose) + ". The tip of your cock closes and begins clenching to pull your prey deeper. \ + You run your fingers down your " + macro.describeDick + ", feeling it work its meal deeper within your shaft, and massaging it ensure everything inside continues towards your " + pickString("throbbing", "churning", "eager", "awaiting", "heavy", "mammoth") + " balls. \ As your cock finishes its work, you feel the passage to your balls stretch wide, fill, and them empty as your balls fill, and begin the process of digestion."; } }); //Ball Smother - //Balls weigh 1,000kg or less +//Balls weigh 1,000kg or less rules["ball-smother"].push({ - "test": function(container, macro) { - return macro.ballMass <= 1000 && - container.count > 0 && - isNonFatal(macro); + "test": function (container, macro) { + return macro.ballMass <= 1000 && + container.count > 0 && + isNonFatal(macro); - }, "desc": function(container, macro, verbose, flat) { + }, "desc": function (container, macro, verbose, flat) { return "Your giant balls impact the ground with a thud, pinning " + container.describe(verbose) + " between your weighty orbs."; } }); rules["ball-smother"].push({ - "test": function(container, macro) { - return macro.ballMass <= 1000 && - container.count > 0 && - isFatal(macro); + "test": function (container, macro) { + return macro.ballMass <= 1000 && + container.count > 0 && + isFatal(macro); - }, "desc": function(container, macro, verbose, flat) { + }, "desc": function (container, macro, verbose, flat) { return "Your " + mass(macro.ballMass, unit, true) + " balls impact the ground with a thud, crushing " + container.describe(verbose) + "."; } }); rules["ball-smother"].push({ - "test": function(container, macro) { - return macro.ballMass <= 1000 && - container.count > 0 && - isGory(macro); + "test": function (container, macro) { + return macro.ballMass <= 1000 && + container.count > 0 && + isGory(macro); - }, "desc": function(container, macro, verbose, flat) { + }, "desc": function (container, macro, verbose, flat) { return "Your " + mass(macro.ballMass, unit, true) + " balls impact the ground with a thud 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 && - container.count > 0 && - isSadistic(macro); + "test": function (container, macro) { + return macro.ballMass <= 1000 && + container.count > 0 && + isSadistic(macro); - }, "desc": function(container, macro, verbose, flat) { + }, "desc": function (container, macro, verbose, flat) { return "Your " + mass(macro.ballMass, unit, true) + " balls impact the ground with a thud 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."; } }); @@ -3021,46 +3021,46 @@ rules["ball-smother"].push({ //Balls weigh 50,000kg or less rules["ball-smother"].push({ - "test": function(container, macro) { - return macro.ballMass <= 50000 && - macro.ballMass > 1000 && - container.count > 0 && - isNonFatal(macro); + "test": function (container, macro) { + return macro.ballMass <= 50000 && + macro.ballMass > 1000 && + container.count > 0 && + isNonFatal(macro); - }, "desc": function(container, macro, verbose, flat) { + }, "desc": function (container, macro, verbose, flat) { return "Your " + length(macro.ballDiameter, unit, true) + " wide balls impact the ground with a thump. 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 && - container.count > 0 && - isFatal(macro); + "test": function (container, macro) { + return macro.ballMass <= 50000 && + macro.ballMass > 1000 && + container.count > 0 && + isFatal(macro); - }, "desc": function(container, macro, verbose, flat) { + }, "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 && - container.count > 0 && - isGory(macro); + "test": function (container, macro) { + return macro.ballMass <= 50000 && + macro.ballMass > 1000 && + container.count > 0 && + isGory(macro); - }, "desc": function(container, macro, verbose, flat) { + }, "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 && - container.count > 0 && - isSadistic(macro); + "test": function (container, macro) { + return macro.ballMass <= 50000 && + macro.ballMass > 1000 && + container.count > 0 && + isSadistic(macro); - }, "desc": function(container, macro, verbose, flat) { + }, "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."; } }); @@ -3068,46 +3068,46 @@ rules["ball-smother"].push({ //Balls weigh 5,000,000kg or less rules["ball-smother"].push({ - "test": function(container, macro) { - return macro.ballMass <= 5000000 && - macro.ballMass > 50000 && - container.count > 0 && - isNonFatal(macro); + "test": function (container, macro) { + return macro.ballMass <= 5000000 && + macro.ballMass > 50000 && + container.count > 0 && + isNonFatal(macro); - }, "desc": function(container, macro, verbose, flat) { + }, "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 && - container.count > 0 && - isFatal(macro); + "test": function (container, macro) { + return macro.ballMass <= 5000000 && + macro.ballMass > 50000 && + container.count > 0 && + isFatal(macro); - }, "desc": function(container, macro, verbose, flat) { + }, "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 && - container.count > 0 && - isGory(macro); + "test": function (container, macro) { + return macro.ballMass <= 5000000 && + macro.ballMass > 50000 && + container.count > 0 && + isGory(macro); - }, "desc": function(container, macro, verbose, flat) { + }, "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 && - container.count > 0 && - isSadistic(macro); + "test": function (container, macro) { + return macro.ballMass <= 5000000 && + macro.ballMass > 50000 && + container.count > 0 && + isSadistic(macro); - }, "desc": function(container, macro, verbose, flat) { + }, "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."; } }); @@ -3115,46 +3115,46 @@ rules["ball-smother"].push({ //Balls Weigh 1e9 kg or less rules["ball-smother"].push({ - "test": function(container, macro) { - return macro.ballMass <= 1e9 && - macro.ballMass > 5000000 && - container.count > 0 && - isNonFatal(macro); + "test": function (container, macro) { + return macro.ballMass <= 1e9 && + macro.ballMass > 5000000 && + container.count > 0 && + isNonFatal(macro); - }, "desc": function(container, macro, verbose, flat) { + }, "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 && - container.count > 0 && - isFatal(macro); + "test": function (container, macro) { + return macro.ballMass <= 1e9 && + macro.ballMass > 5000000 && + container.count > 0 && + isFatal(macro); - }, "desc": function(container, macro, verbose, flat) { + }, "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 && - container.count > 0 && - isGory(macro); + "test": function (container, macro) { + return macro.ballMass <= 1e9 && + macro.ballMass > 5000000 && + container.count > 0 && + isGory(macro); - }, "desc": function(container, macro, verbose, flat) { + }, "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 && - container.count > 0 && - isSadistic(macro); + "test": function (container, macro) { + return macro.ballMass <= 1e9 && + macro.ballMass > 5000000 && + container.count > 0 && + isSadistic(macro); - }, "desc": function(container, macro, verbose, flat) { + }, "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."; } }); @@ -3162,48 +3162,48 @@ rules["ball-smother"].push({ //Balls Weigh 1e12 kg or less rules["ball-smother"].push({ - "test": function(container, macro) { - return macro.ballMass <= 1e12 && - macro.ballMass > 1e9 && - container.count > 0 && - isNonFatal(macro); + "test": function (container, macro) { + return macro.ballMass <= 1e12 && + macro.ballMass > 1e9 && + container.count > 0 && + isNonFatal(macro); - }, "desc": function(container, macro, verbose, flat) { + }, "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 && - container.count > 0 && - isFatal(macro); + "test": function (container, macro) { + return macro.ballMass <= 1e12 && + macro.ballMass > 1e9 && + container.count > 0 && + isFatal(macro); - }, "desc": function(container, macro, verbose, flat) { + }, "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 CRASHES 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 && - container.count > 0 && - isGory(macro); + "test": function (container, macro) { + return macro.ballMass <= 1e12 && + macro.ballMass > 1e9 && + container.count > 0 && + isGory(macro); - }, "desc": function(container, macro, verbose, flat) { + }, "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 CRASHES 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 && - container.count > 0 && - isSadistic(macro); + "test": function (container, macro) { + return macro.ballMass <= 1e12 && + macro.ballMass > 1e9 && + container.count > 0 && + isSadistic(macro); - }, "desc": function(container, macro, verbose, flat) { + }, "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 CRASHES 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."; } @@ -3212,50 +3212,50 @@ resistance, pancaking them into the ground. The violent impact generates a shock //Balls Weigh 1e15 kg or less rules["ball-smother"].push({ - "test": function(container, macro) { - return macro.ballMass <= 1e15 && - macro.ballMass > 1e12 && - container.count > 0 && - isNonFatal(macro); + "test": function (container, macro) { + return macro.ballMass <= 1e15 && + macro.ballMass > 1e12 && + container.count > 0 && + isNonFatal(macro); - }, "desc": function(container, macro, verbose, flat) { + }, "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 && - container.count > 0 && - isFatal(macro); + "test": function (container, macro) { + return macro.ballMass <= 1e15 && + macro.ballMass > 1e12 && + container.count > 0 && + isFatal(macro); - }, "desc": function(container, macro, verbose, flat) { + }, "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 && - container.count > 0 && - isGory(macro); + "test": function (container, macro) { + return macro.ballMass <= 1e15 && + macro.ballMass > 1e12 && + container.count > 0 && + isGory(macro); - }, "desc": function(container, macro, verbose, flat) { + }, "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 && - container.count > 0 && - isSadistic(macro); + "test": function (container, macro) { + return macro.ballMass <= 1e15 && + macro.ballMass > 1e12 && + container.count > 0 && + isSadistic(macro); - }, "desc": function(container, macro, verbose, flat) { + }, "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."; @@ -3265,48 +3265,48 @@ initial impact subsides you feel your enormous balls shift away from each other //Balls Weigh 1e20 kg or less rules["ball-smother"].push({ - "test": function(container, macro) { - return macro.ballMass <= 1e20 && - macro.ballMass > 1e15 && - container.count > 0 && - isNonFatal(macro); + "test": function (container, macro) { + return macro.ballMass <= 1e20 && + macro.ballMass > 1e15 && + container.count > 0 && + isNonFatal(macro); - }, "desc": function(container, macro, verbose, flat) { + }, "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 && - container.count > 0 && - isFatal(macro); + "test": function (container, macro) { + return macro.ballMass <= 1e20 && + macro.ballMass > 1e15 && + container.count > 0 && + isFatal(macro); - }, "desc": function(container, macro, verbose, flat) { + }, "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 booOOOOooOOM. \ 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 && - container.count > 0 && - isGory(macro); + "test": function (container, macro) { + return macro.ballMass <= 1e20 && + macro.ballMass > 1e15 && + container.count > 0 && + isGory(macro); - }, "desc": function(container, macro, verbose, flat) { + }, "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 booOOOOooOOM. \ 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 && - container.count > 0 && - isSadistic(macro); + "test": function (container, macro) { + return macro.ballMass <= 1e20 && + macro.ballMass > 1e15 && + container.count > 0 && + isSadistic(macro); - }, "desc": function(container, macro, verbose, flat) { + }, "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 booOOOOooOOM. \ 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."; } @@ -3315,49 +3315,49 @@ rules["ball-smother"].push({ //Balls Weigh 1e24 kg or less rules["ball-smother"].push({ - "test": function(container, macro) { - return macro.ballMass <= 1e24 && - macro.ballMass > 1e20 && - container.count > 0 && - isNonFatal(macro); + "test": function (container, macro) { + return macro.ballMass <= 1e24 && + macro.ballMass > 1e20 && + container.count > 0 && + isNonFatal(macro); - }, "desc": function(container, macro, verbose, flat) { + }, "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, false) + " . 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 && - container.count > 0 && - isFatal(macro); + "test": function (container, macro) { + return macro.ballMass <= 1e24 && + macro.ballMass > 1e20 && + container.count > 0 && + isFatal(macro); - }, "desc": function(container, macro, verbose, flat) { + }, "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 BOOOOOOM. \ 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 && - container.count > 0 && - isGory(macro); + "test": function (container, macro) { + return macro.ballMass <= 1e24 && + macro.ballMass > 1e20 && + container.count > 0 && + isGory(macro); - }, "desc": function(container, macro, verbose, flat) { + }, "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 BOOOOOOM. \ 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 && - container.count > 0 && - isSadistic(macro); + "test": function (container, macro) { + return macro.ballMass <= 1e24 && + macro.ballMass > 1e20 && + container.count > 0 && + isSadistic(macro); - }, "desc": function(container, macro, verbose, flat) { + }, "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 BOOOOOOM. \ 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."; @@ -3369,33 +3369,33 @@ rules["ball-smother"].push({ //Balls Weigh more than 1e24 kg rules["ball-smother"].push({ - "test": function(container, macro) { - return macro.ballMass > 1e24 && - container.count > 0 && - isNonFatal(macro); + "test": function (container, macro) { + return macro.ballMass > 1e24 && + container.count > 0 && + isNonFatal(macro); - }, "desc": function(container, macro, verbose, flat) { + }, "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 && - container.count > 0 && - isFatal(macro); + "test": function (container, macro) { + return macro.ballMass > 1e24 && + container.count > 0 && + isFatal(macro); - }, "desc": function(container, macro, verbose, flat) { + }, "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 && - container.count > 0 && - isGory(macro); + "test": function (container, macro) { + return macro.ballMass > 1e24 && + container.count > 0 && + isGory(macro); - }, "desc": function(container, macro, verbose, flat) { + }, "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."; @@ -3403,12 +3403,12 @@ rules["ball-smother"].push({ }); rules["ball-smother"].push({ - "test": function(container, macro) { - return macro.ballMass > 1e24 && - container.count > 0 && - isSadistic(macro); + "test": function (container, macro) { + return macro.ballMass > 1e24 && + container.count > 0 && + isSadistic(macro); - }, "desc": function(container, macro, verbose, flat) { + }, "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."; @@ -3418,46 +3418,46 @@ rules["ball-smother"].push({ //male orgasm rules["male-orgasm"].push({ - "test": function(container, macro, spurtVolume) { - return hasOnly(container, ["Person"]) && - hasExactly(container, "Person", 1) && - isNonFatal(macro); + "test": function (container, macro, spurtVolume) { + return hasOnly(container, ["Person"]) && + hasExactly(container, "Person", 1) && + isNonFatal(macro); - }, "desc": function(container, macro, spurtVolume) { - return "You're cumming! Your " + macro.describeDick + " erupts, hosing down " + container.describe(verbose) + " with $VOLUME of your seed."; + }, "desc": function (container, macro, spurtVolume) { + return "You're cumming! Your " + macro.describeDick + " erupts, hosing down " + container.describe(verbose) + " with $VOLUME of your seed."; } }); rules["male-orgasm"].push({ - "test": function(container, macro, spurtVolume) { - return hasOnly(container, ["Person"]) && - hasExactly(container, "Person", 1) && - isFatal(macro); + "test": function (container, macro, spurtVolume) { + return hasOnly(container, ["Person"]) && + hasExactly(container, "Person", 1) && + isFatal(macro); - }, "desc": function(container, macro, spurtVolume) { - return "You're cumming! Your " + macro.describeDick + " erupts, shoving " + container.describe(verbose) + " them into a wall and drowning them in a $VOLUME-torrent of cum."; + }, "desc": function (container, macro, spurtVolume) { + return "You're cumming! Your " + macro.describeDick + " erupts, shoving " + container.describe(verbose) + " them into a wall and drowning them in a $VOLUME-torrent of cum."; } }); rules["male-orgasm"].push({ - "test": function(container, macro, spurtVolume) { - return hasOnly(container, ["Person"]) && - hasExactly(container, "Person", 1) && - isGory(macro); + "test": function (container, macro, spurtVolume) { + return hasOnly(container, ["Person"]) && + hasExactly(container, "Person", 1) && + isGory(macro); - }, "desc": function(container, macro, spurtVolume) { - return "You're cumming! Your " + macro.describeDick + " erupts, shoving " + container.describe(verbose) + " them into a wall; pinning them in place and suffocating them in a $VOLUME-torrent of cum."; + }, "desc": function (container, macro, spurtVolume) { + return "You're cumming! Your " + macro.describeDick + " erupts, shoving " + container.describe(verbose) + " them into a wall; pinning them in place and suffocating them in a $VOLUME-torrent of cum."; } }); rules["male-orgasm"].push({ - "test": function(container, macro, spurtVolume) { - return hasOnly(container, ["Person"]) && - hasExactly(container, "Person", 1) && - isSadistic(macro); + "test": function (container, macro, spurtVolume) { + return hasOnly(container, ["Person"]) && + hasExactly(container, "Person", 1) && + isSadistic(macro); - }, "desc": function(container, macro, spurtVolume) { - return "You're cumming! Your " + macro.describeDick + " erupts, shoving " + container.describe(verbose) + " them into a wall; pinning them in place with a $VOLUME-torrent of cum. As they gasp for breath, your cum fills their lungs and stomach. \ + }, "desc": function (container, macro, spurtVolume) { + return "You're cumming! Your " + macro.describeDick + " erupts, shoving " + container.describe(verbose) + " them into a wall; pinning them in place with a $VOLUME-torrent of cum. As they gasp for breath, your cum fills their lungs and stomach. \ Their form falls lifeless on the ground once your cumshot has ended."; } }); @@ -3465,47 +3465,47 @@ Their form falls lifeless on the ground once your cumshot has ended."; //more than 5 and less than 50 rules["male-orgasm"].push({ - "test": function(container, macro, spurtVolume) { - return spurtVolume <= 50 && - spurtVolume > 5 && - isNonFatal(macro); + "test": function (container, macro, spurtVolume) { + return spurtVolume <= 50 && + spurtVolume > 5 && + isNonFatal(macro); - }, "desc": function(container, macro, spurtVolume) { - return "You're cumming! Your " + macro.describeDick + " convulses as it sprays $VOLUMEs of cum over " + container.describe(verbose) + "."; + }, "desc": function (container, macro, spurtVolume) { + return "You're cumming! Your " + macro.describeDick + " convulses as it sprays $VOLUMEs of cum over " + container.describe(verbose) + "."; } }); rules["male-orgasm"].push({ - "test": function(container, macro, spurtVolume) { - return spurtVolume <= 50 && - spurtVolume > 5 && - isFatal(macro); + "test": function (container, macro, spurtVolume) { + return spurtVolume <= 50 && + spurtVolume > 5 && + isFatal(macro); - }, "desc": function(container, macro, spurtVolume) { - return "You're cumming! Your " + macro.describeDick + " convulses as it sprays $VOLUMEs of cum over " + container.describe(verbose) + ", shoving your prey against a nearby building. As your stream tapers off, you see that none of your prey could withstand the pressure of your cumshot."; + }, "desc": function (container, macro, spurtVolume) { + return "You're cumming! Your " + macro.describeDick + " convulses as it sprays $VOLUMEs of cum over " + container.describe(verbose) + ", shoving your prey against a nearby building. As your stream tapers off, you see that none of your prey could withstand the pressure of your cumshot."; } }); rules["male-orgasm"].push({ - "test": function(container, macro, spurtVolume) { - return spurtVolume <= 50 && - spurtVolume > 5 && - isGory(macro); + "test": function (container, macro, spurtVolume) { + return spurtVolume <= 50 && + spurtVolume > 5 && + isGory(macro); - }, "desc": function(container, macro, spurtVolume) { - return "You're cumming! Your " + macro.describeDick + " convulses as it sprays $VOLUMEs of cum over " + container.describe(verbose) + ", shoving your prey against a nearby building. As your stream tapers off, you see that none of your prey could withstand the pressure of your \ + }, "desc": function (container, macro, spurtVolume) { + return "You're cumming! Your " + macro.describeDick + " convulses as it sprays $VOLUMEs of cum over " + container.describe(verbose) + ", shoving your prey against a nearby building. As your stream tapers off, you see that none of your prey could withstand the pressure of your \ cumshot. The rubble and hardening cum covering the wall holds your victims in place against the structure."; } }); rules["male-orgasm"].push({ - "test": function(container, macro, spurtVolume) { - return spurtVolume <= 50 && - spurtVolume > 5 && - isSadistic(macro); + "test": function (container, macro, spurtVolume) { + return spurtVolume <= 50 && + spurtVolume > 5 && + isSadistic(macro); - }, "desc": function(container, macro, spurtVolume) { - return "You're cumming! Your " + macro.describeDick + " convulses as it sprays $VOLUMEs of cum over " + container.describe(verbose) + ", crushing your prey against a nearby building. As your stream tapers off, you see that none of your prey could withstand the pressure of your \ + }, "desc": function (container, macro, spurtVolume) { + return "You're cumming! Your " + macro.describeDick + " convulses as it sprays $VOLUMEs of cum over " + container.describe(verbose) + ", crushing your prey against a nearby building. As your stream tapers off, you see that none of your prey could withstand the pressure of your \ cumshot. The rubble and red-dyed cum covering the wall holds your victims in place against the structure."; } }); @@ -3513,47 +3513,47 @@ rules["male-orgasm"].push({ //less than 5e2 rules["male-orgasm"].push({ - "test": function(container, macro, spurtVolume) { - return spurtVolume <= 500 && - spurtVolume > 50 && - isNonFatal(macro); + "test": function (container, macro, spurtVolume) { + return spurtVolume <= 500 && + spurtVolume > 50 && + isNonFatal(macro); - }, "desc": function(container, macro, spurtVolume) { - return "You're cumming! Your " + macro.describeDick + " twitches wildy as it sprays $VOLUMEs of cum into the air. A powerful white stream of musky fluid smashes into " + container.describe(verbose) + "."; + }, "desc": function (container, macro, spurtVolume) { + return "You're cumming! Your " + macro.describeDick + " twitches wildy as it sprays $VOLUMEs of cum into the air. A powerful white stream of musky fluid smashes into " + container.describe(verbose) + "."; } }); rules["male-orgasm"].push({ - "test": function(container, macro, spurtVolume) { - return spurtVolume <= 500 && - spurtVolume > 50 && - isFatal(macro); + "test": function (container, macro, spurtVolume) { + return spurtVolume <= 500 && + spurtVolume > 50 && + isFatal(macro); - }, "desc": function(container, macro, spurtVolume) { - return "You're cumming! Your " + macro.describeDick + " twitches wildy as it sprays $VOLUMEs of cum into the air. A powerful white stream of musky fluid smashes into " + container.describe(verbose) + ", crushing and downing them at the same time."; + }, "desc": function (container, macro, spurtVolume) { + return "You're cumming! Your " + macro.describeDick + " twitches wildy as it sprays $VOLUMEs of cum into the air. A powerful white stream of musky fluid smashes into " + container.describe(verbose) + ", crushing and downing them at the same time."; } }); rules["male-orgasm"].push({ - "test": function(container, macro, spurtVolume) { - return spurtVolume <= 500 && - spurtVolume > 50 && - isGory(macro); + "test": function (container, macro, spurtVolume) { + return spurtVolume <= 500 && + spurtVolume > 50 && + isGory(macro); - }, "desc": function(container, macro, spurtVolume) { - return "You're cumming! Your " + macro.describeDick + " twitches wildy as it sprays $VOLUMEs of cum into the air. A powerful white stream of musky fluid smashes into " + container.describe(verbose) + ", compacting and mangling everything in its path. As your cumshot ends, \ + }, "desc": function (container, macro, spurtVolume) { + return "You're cumming! Your " + macro.describeDick + " twitches wildy as it sprays $VOLUMEs of cum into the air. A powerful white stream of musky fluid smashes into " + container.describe(verbose) + ", compacting and mangling everything in its path. As your cumshot ends, \ a thick stream of pink frothing fluids pours into nearby sewer drains, filling and clogging them."; } }); rules["male-orgasm"].push({ - "test": function(container, macro, spurtVolume) { - return spurtVolume <= 500 && - spurtVolume > 50 && - isSadistic(macro); + "test": function (container, macro, spurtVolume) { + return spurtVolume <= 500 && + spurtVolume > 50 && + isSadistic(macro); - }, "desc": function(container, macro, spurtVolume) { - return "You're cumming! Your " + macro.describeDick + " twitches wildy as it sprays $VOLUME of cum into the air. A powerful white stream of musky fluid smashes into " + container.describe(verbose) + ", compacting and mangling everything in its path. The sheer pressure propelling \ + }, "desc": function (container, macro, spurtVolume) { + return "You're cumming! Your " + macro.describeDick + " twitches wildy as it sprays $VOLUME of cum into the air. A powerful white stream of musky fluid smashes into " + container.describe(verbose) + ", compacting and mangling everything in its path. The sheer pressure propelling \ your cum severs limbs and crumples steel. As your cumshot ends, a thick stream of pink frothing fluids pours into nearby sewer drains, filling and clogging them."; } }); @@ -3561,48 +3561,48 @@ rules["male-orgasm"].push({ //less than 5e3 rules["male-orgasm"].push({ - "test": function(container, macro, spurtVolume) { - return spurtVolume <= 5000 && - spurtVolume > 500 && - isNonFatal(macro); + "test": function (container, macro, spurtVolume) { + return spurtVolume <= 5000 && + spurtVolume > 500 && + isNonFatal(macro); - }, "desc": function(container, macro, spurtVolume) { - return "You're cumming! Your " + macro.ballDiameter + " balls bounce and your " + macro.describeDick + "begins to twitch uncontrollably. Moments later a $VOLUME shower of jism is lobbed into the air. The rain of cum flows into the street and carries away " + container.describe(verbose) + "."; + }, "desc": function (container, macro, spurtVolume) { + return "You're cumming! Your " + macro.ballDiameter + " balls bounce and your " + macro.describeDick + "begins to twitch uncontrollably. Moments later a $VOLUME shower of jism is lobbed into the air. The rain of cum flows into the street and carries away " + container.describe(verbose) + "."; } }); rules["male-orgasm"].push({ - "test": function(container, macro, spurtVolume) { - return spurtVolume <= 5000 && - spurtVolume > 500 && - isFatal(macro); + "test": function (container, macro, spurtVolume) { + return spurtVolume <= 5000 && + spurtVolume > 500 && + isFatal(macro); - }, "desc": function(container, macro, spurtVolume) { - return "You're cumming! Your " + length(macro.ballDiameter, unit, true) + " wide balls bounce and your " + macro.describeDick + " begins to twitch uncontrollably. Moments later a $VOLUME shower of jism is lobbed into the air. The rain of cum flows into the street and carries away " + container.describe(verbose) + ".\ + }, "desc": function (container, macro, spurtVolume) { + return "You're cumming! Your " + length(macro.ballDiameter, unit, true) + " wide balls bounce and your " + macro.describeDick + " begins to twitch uncontrollably. Moments later a $VOLUME shower of jism is lobbed into the air. The rain of cum flows into the street and carries away " + container.describe(verbose) + ".\ Limbs and rubble float away on the jizz, vanishing into the storm drains and down the street."; } }); rules["male-orgasm"].push({ - "test": function(container, macro, spurtVolume) { - return spurtVolume <= 5000 && - spurtVolume > 500 && - isGory(macro); + "test": function (container, macro, spurtVolume) { + return spurtVolume <= 5000 && + spurtVolume > 500 && + isGory(macro); - }, "desc": function(container, macro, spurtVolume) { - return "You're cumming! Your " + length(macro.ballDiameter, unit, true) + " wide balls bounce and your " + macro.describeDick + " begins to twitch uncontrollably. Moments later a $VOLUME shower of jism is lobbed into the air. The rain of cum flows into the street and carries away " + container.describe(verbose) + ".\ + }, "desc": function (container, macro, spurtVolume) { + return "You're cumming! Your " + length(macro.ballDiameter, unit, true) + " wide balls bounce and your " + macro.describeDick + " begins to twitch uncontrollably. Moments later a $VOLUME shower of jism is lobbed into the air. The rain of cum flows into the street and carries away " + container.describe(verbose) + ".\ The torrent of jizz seeps away; leaving behind rubble and corpses."; } }); rules["male-orgasm"].push({ - "test": function(container, macro, spurtVolume) { - return spurtVolume <= 5000 && - spurtVolume > 500 && - isGory(macro); + "test": function (container, macro, spurtVolume) { + return spurtVolume <= 5000 && + spurtVolume > 500 && + isGory(macro); - }, "desc": function(container, macro, spurtVolume) { - return "You're cumming! Your " + length(macro.ballDiameter, unit, true) + " wide balls bounce and your " + macro.describeDick + " begins to twitch uncontrollably. Moments later a $VOLUME shower of jism is lobbed into the air. The rain of cum flows into the street and carries away " + container.describe(verbose) + ".\ + }, "desc": function (container, macro, spurtVolume) { + return "You're cumming! Your " + length(macro.ballDiameter, unit, true) + " wide balls bounce and your " + macro.describeDick + " begins to twitch uncontrollably. Moments later a $VOLUME shower of jism is lobbed into the air. The rain of cum flows into the street and carries away " + container.describe(verbose) + ".\ The torrent of jizz and blood seeps away; leaving behind rubble and corpses."; } }); @@ -3610,48 +3610,48 @@ rules["male-orgasm"].push({ //less than 1e6 rules["male-orgasm"].push({ - "test": function(container, macro, spurtVolume) { - return spurtVolume <= 1e6 && - spurtVolume > 5000 && - isNonFatal(macro); + "test": function (container, macro, spurtVolume) { + return spurtVolume <= 1e6 && + spurtVolume > 5000 && + isNonFatal(macro); - }, "desc": function(container, macro, spurtVolume) { - return "You're cumming! Your " + length(macro.ballDiameter, unit, true) + " wide balls clench while your " + macro.describeDick + " bobs and spurts thick ropes of semen. $VOLUMEs of your splooge flood the area, enveloping " + container.describe(verbose) + "."; + }, "desc": function (container, macro, spurtVolume) { + return "You're cumming! Your " + length(macro.ballDiameter, unit, true) + " wide balls clench while your " + macro.describeDick + " bobs and spurts thick ropes of semen. $VOLUMEs of your splooge flood the area, enveloping " + container.describe(verbose) + "."; } }); rules["male-orgasm"].push({ - "test": function(container, macro, spurtVolume) { - return spurtVolume <= 1e6 && - spurtVolume > 5000 && - isFatal(macro); + "test": function (container, macro, spurtVolume) { + return spurtVolume <= 1e6 && + spurtVolume > 5000 && + isFatal(macro); - }, "desc": function(container, macro, spurtVolume) { - return "You're cumming! Your " + length(macro.ballDiameter, unit, true) + " wide balls clench while your " + macro.describeDick + " bobs and spurts thick ropes of semen. $VOLUMEs of your splooge flood the area, enveloping " + container.describe(verbose) + " in a suffocating \ + }, "desc": function (container, macro, spurtVolume) { + return "You're cumming! Your " + length(macro.ballDiameter, unit, true) + " wide balls clench while your " + macro.describeDick + " bobs and spurts thick ropes of semen. $VOLUMEs of your splooge flood the area, enveloping " + container.describe(verbose) + " in a suffocating \ wave of jizz."; } }); rules["male-orgasm"].push({ - "test": function(container, macro, spurtVolume) { - return spurtVolume <= 1e6 && - spurtVolume > 5000 && - isGory(macro); + "test": function (container, macro, spurtVolume) { + return spurtVolume <= 1e6 && + spurtVolume > 5000 && + isGory(macro); - }, "desc": function(container, macro, spurtVolume) { - return "You're cumming! Your " + length(macro.ballDiameter, unit, true) + " wide balls clench while your " + macro.describeDick + " bobs and spurts thick ropes of semen. $VOLUMEs of your splooge flood the area, enveloping " + container.describe(verbose) + " in a suffocating \ + }, "desc": function (container, macro, spurtVolume) { + return "You're cumming! Your " + length(macro.ballDiameter, unit, true) + " wide balls clench while your " + macro.describeDick + " bobs and spurts thick ropes of semen. $VOLUMEs of your splooge flood the area, enveloping " + container.describe(verbose) + " in a suffocating \ wave of jizz. The debris filled river of cum rages down the street, revealing more twisted steel and corpses with every building it brushes past."; } }); rules["male-orgasm"].push({ - "test": function(container, macro, spurtVolume) { - return spurtVolume <= 1e6 && - spurtVolume > 5000 && - isSadistic(macro); + "test": function (container, macro, spurtVolume) { + return spurtVolume <= 1e6 && + spurtVolume > 5000 && + isSadistic(macro); - }, "desc": function(container, macro, spurtVolume) { - return "You're cumming! Your " + length(macro.ballDiameter, unit, true) + " wide balls clench while your " + macro.describeDick + " bobs and spurts thick ropes of semen. $VOLUMEs of your splooge flood the area, enveloping " + container.describe(verbose) + " in a suffocating \ + }, "desc": function (container, macro, spurtVolume) { + return "You're cumming! Your " + length(macro.ballDiameter, unit, true) + " wide balls clench while your " + macro.describeDick + " bobs and spurts thick ropes of semen. $VOLUMEs of your splooge flood the area, enveloping " + container.describe(verbose) + " in a suffocating \ wave of jizz. The debris filled river of cum and gore rages down the street, revealing more twisted steel and corpses with every building it brushes past."; } }); @@ -3659,47 +3659,47 @@ rules["male-orgasm"].push({ //less than 1e9 rules["male-orgasm"].push({ - "test": function(container, macro, spurtVolume) { - return spurtVolume <= 1e9 && - spurtVolume > 1e6 && - isNonFatal(macro); + "test": function (container, macro, spurtVolume) { + return spurtVolume <= 1e9 && + spurtVolume > 1e6 && + isNonFatal(macro); - }, "desc": function(container, macro, spurtVolume) { - return "You're cumming! Your " + macro.describeDick + " swells while your cumslit spews a massive unbroken river of semen. The twitching of your gargantuan cock sends your load in all directions. The mighty spurt of cum covers " + container.describe(verbose) + "."; + }, "desc": function (container, macro, spurtVolume) { + return "You're cumming! Your " + macro.describeDick + " swells while your cumslit spews a massive unbroken river of semen. The twitching of your gargantuan cock sends your load in all directions. The mighty spurt of cum covers " + container.describe(verbose) + "."; } }); rules["male-orgasm"].push({ - "test": function(container, macro, spurtVolume) { - return spurtVolume <= 1e9 && - spurtVolume > 1e6 && - isFatal(macro); + "test": function (container, macro, spurtVolume) { + return spurtVolume <= 1e9 && + spurtVolume > 1e6 && + isFatal(macro); - }, "desc": function(container, macro, spurtVolume) { - return "You're cumming! Your " + macro.describeDick + " swells while your cumslit spews a massive unbroken river of semen. The twitching of your gargantuan cock sends your load in all directions. The mighty spurt of cum smashes apart " + container.describe(verbose) + "."; + }, "desc": function (container, macro, spurtVolume) { + return "You're cumming! Your " + macro.describeDick + " swells while your cumslit spews a massive unbroken river of semen. The twitching of your gargantuan cock sends your load in all directions. The mighty spurt of cum smashes apart " + container.describe(verbose) + "."; } }); rules["male-orgasm"].push({ - "test": function(container, macro, spurtVolume) { - return spurtVolume <= 1e9 && - spurtVolume > 1e6 && - isGory(macro); + "test": function (container, macro, spurtVolume) { + return spurtVolume <= 1e9 && + spurtVolume > 1e6 && + isGory(macro); - }, "desc": function(container, macro, spurtVolume) { - return "You're cumming! Your " + macro.describeDick + " swells while your cumslit spews a massive unbroken river of semen. The twitching of your gargantuan cock sends your load in all directions. The mighty spurt of cum smashes apart " + container.describe(verbose) + " as \ + }, "desc": function (container, macro, spurtVolume) { + return "You're cumming! Your " + macro.describeDick + " swells while your cumslit spews a massive unbroken river of semen. The twitching of your gargantuan cock sends your load in all directions. The mighty spurt of cum smashes apart " + container.describe(verbose) + " as \ it flies through air. Those caught in its path are smashed to pieces and dragged away by the intense current. The sheer volume of fluid overwelmes the sewers; you see cum spew from manholes and strom drains for several blocks."; } }); rules["male-orgasm"].push({ - "test": function(container, macro, spurtVolume) { - return spurtVolume <= 1e9 && - spurtVolume > 1e6 && - isSadistic(macro); + "test": function (container, macro, spurtVolume) { + return spurtVolume <= 1e9 && + spurtVolume > 1e6 && + isSadistic(macro); - }, "desc": function(container, macro, spurtVolume) { - return "You're cumming! Your " + macro.describeDick + " swells while your cumslit spews a massive unbroken river of semen. The twitching of your gargantuan cock sends your load in all directions. The mighty spurt of cum smashes apart " + container.describe(verbose) + " as \ + }, "desc": function (container, macro, spurtVolume) { + return "You're cumming! Your " + macro.describeDick + " swells while your cumslit spews a massive unbroken river of semen. The twitching of your gargantuan cock sends your load in all directions. The mighty spurt of cum smashes apart " + container.describe(verbose) + " as \ it flies through air. Those caught in its path are smashed to pieces and dragged away by the intense current. The sheer volume of fluid overwelmes the sewers; you see cum, gore, glass, and steel spew from manholes and strom drains for several blocks."; } }); @@ -3707,49 +3707,49 @@ rules["male-orgasm"].push({ //less than 1e12 rules["male-orgasm"].push({ - "test": function(container, macro, spurtVolume) { - return spurtVolume <= 1e12 && - spurtVolume > 1e9 && - isNonFatal(macro); + "test": function (container, macro, spurtVolume) { + return spurtVolume <= 1e12 && + spurtVolume > 1e9 && + isNonFatal(macro); - }, "desc": function(container, macro, spurtVolume) { - return "You're cumming! Your " + macro.describeDick + " throbs as it fires $VOLUMEs of jizz into the sky. An enoumous sea of cum crashes out of the sky and onto " + container.describe(verbose) + "."; + }, "desc": function (container, macro, spurtVolume) { + return "You're cumming! Your " + macro.describeDick + " throbs as it fires $VOLUMEs of jizz into the sky. An enoumous sea of cum crashes out of the sky and onto " + container.describe(verbose) + "."; } }); rules["male-orgasm"].push({ - "test": function(container, macro, spurtVolume) { - return spurtVolume <= 1e12 && - spurtVolume > 1e9 && - isFatal(macro); + "test": function (container, macro, spurtVolume) { + return spurtVolume <= 1e12 && + spurtVolume > 1e9 && + isFatal(macro); - }, "desc": function(container, macro, spurtVolume) { - return "You're cumming! Your " + macro.describeDick + " throbs as it fires $VOLUMEs of jizz into the sky. An enoumous sea of cum crashes out of the sky and splashes over " + container.describe(verbose) + " with more ferocity than the flood from a broken dam. \ + }, "desc": function (container, macro, spurtVolume) { + return "You're cumming! Your " + macro.describeDick + " throbs as it fires $VOLUMEs of jizz into the sky. An enoumous sea of cum crashes out of the sky and splashes over " + container.describe(verbose) + " with more ferocity than the flood from a broken dam. \ After the massive barrage lands, its viscously sloshes down the natural contours of the land, dragging trees and buildings deep into a nearby valley. The sheer volume of dirt and detritus that it picks up darkens the fluid into an opaque tide of frothing brown."; } }); rules["male-orgasm"].push({ - "test": function(container, macro, spurtVolume) { - return spurtVolume <= 1e12 && - spurtVolume > 1e9 && - isGory(macro); + "test": function (container, macro, spurtVolume) { + return spurtVolume <= 1e12 && + spurtVolume > 1e9 && + isGory(macro); - }, "desc": function(container, macro, spurtVolume) { - return "You're cumming! Your " + macro.describeDick + " throbs as it fires $VOLUMEs of jizz into the sky. An enoumous sea of cum crashes out of the sky and splashes over " + container.describe(verbose) + " with more ferocity than the flood from a broken dam. \ + }, "desc": function (container, macro, spurtVolume) { + return "You're cumming! Your " + macro.describeDick + " throbs as it fires $VOLUMEs of jizz into the sky. An enoumous sea of cum crashes out of the sky and splashes over " + container.describe(verbose) + " with more ferocity than the flood from a broken dam. \ After the massive barrage lands, its viscously sloshes down the natural contours of the land, dragging trees, people, animals, and buildings deep into a nearby valley. The sheer volume of dirt and detritus that it picks up darkens the fluid into an opaque tide of \ frothing brown. You watch as the sticky mess flows away from you, leaving only the foundations of buildings and rocks in its bed."; } }); rules["male-orgasm"].push({ - "test": function(container, macro, spurtVolume) { - return spurtVolume <= 1e12 && - spurtVolume > 1e9 && - isGory(macro); + "test": function (container, macro, spurtVolume) { + return spurtVolume <= 1e12 && + spurtVolume > 1e9 && + isGory(macro); - }, "desc": function(container, macro, spurtVolume) { - return "You're cumming! Your " + macro.describeDick + " throbs as it fires $VOLUMEs of jizz into the sky. An enoumous sea of cum crashes out of the sky and splashes over " + container.describe(verbose) + " with more ferocity than the flood from a broken dam. \ + }, "desc": function (container, macro, spurtVolume) { + return "You're cumming! Your " + macro.describeDick + " throbs as it fires $VOLUMEs of jizz into the sky. An enoumous sea of cum crashes out of the sky and splashes over " + container.describe(verbose) + " with more ferocity than the flood from a broken dam. \ After the massive barrage lands, its viscously sloshes down the natural contours of the land, dragging trees, people, animals, and buildings deep into a nearby valley. The sheer volume of dirt and detritus that it picks up darkens the fluid into an opaque tide of \ frothing brown. You watch as the sticky mess flows away from you, leaving only the foundations of buildings and rocks in its bed. The retreating semen also reveals the mangeled and drowned corpses of your victims."; } @@ -3758,47 +3758,47 @@ rules["male-orgasm"].push({ //less than 1e16 rules["male-orgasm"].push({ - "test": function(container, macro, spurtVolume) { - return spurtVolume <= 1e16 && - spurtVolume > 1e12 && - isNonFatal(macro); + "test": function (container, macro, spurtVolume) { + return spurtVolume <= 1e16 && + spurtVolume > 1e12 && + isNonFatal(macro); - }, "desc": function(container, macro, spurtVolume) { - return "You're cumming! Your " + macro.describeDick + " jerks upawrds as it spews $VOLUMEs of semen in a wide arc that clips a nearby cloud. A white tsunami envelopes " + container.describe(verbose) + "."; + }, "desc": function (container, macro, spurtVolume) { + return "You're cumming! Your " + macro.describeDick + " jerks upawrds as it spews $VOLUMEs of semen in a wide arc that clips a nearby cloud. A white tsunami envelopes " + container.describe(verbose) + "."; } }); rules["male-orgasm"].push({ - "test": function(container, macro, spurtVolume) { - return spurtVolume <= 1e16 && - spurtVolume > 1e12 && - isFatal(macro); + "test": function (container, macro, spurtVolume) { + return spurtVolume <= 1e16 && + spurtVolume > 1e12 && + isFatal(macro); - }, "desc": function(container, macro, spurtVolume) { - return "You're cumming! Your " + macro.describeDick + " jerks upawrds as it spews $VOLUMEs of semen in a wide arc that clips a nearby cloud. A white tsunami wipes out " + container.describe(verbose) + "."; + }, "desc": function (container, macro, spurtVolume) { + return "You're cumming! Your " + macro.describeDick + " jerks upawrds as it spews $VOLUMEs of semen in a wide arc that clips a nearby cloud. A white tsunami wipes out " + container.describe(verbose) + "."; } }); rules["male-orgasm"].push({ - "test": function(container, macro, spurtVolume) { - return spurtVolume <= 1e16 && - spurtVolume > 1e12 && - isGory(macro); + "test": function (container, macro, spurtVolume) { + return spurtVolume <= 1e16 && + spurtVolume > 1e12 && + isGory(macro); - }, "desc": function(container, macro, spurtVolume) { - return "You're cumming! Your " + macro.describeDick + " jerks upawrds as it spews $VOLUMEs of semen in a wide arc that clips a nearby cloud. A white tsunami wipes out " + container.describe(verbose) + ". As the mighty wave crashes through city grids, it \ + }, "desc": function (container, macro, spurtVolume) { + return "You're cumming! Your " + macro.describeDick + " jerks upawrds as it spews $VOLUMEs of semen in a wide arc that clips a nearby cloud. A white tsunami wipes out " + container.describe(verbose) + ". As the mighty wave crashes through city grids, it \ moves with surprising speed, catching up to and destroying fleeing vehicles."; } }); rules["male-orgasm"].push({ - "test": function(container, macro, spurtVolume) { - return spurtVolume <= 1e16 && - spurtVolume > 1e12 && - isSadistic(macro); + "test": function (container, macro, spurtVolume) { + return spurtVolume <= 1e16 && + spurtVolume > 1e12 && + isSadistic(macro); - }, "desc": function(container, macro, spurtVolume) { - return "You're cumming! Your " + macro.describeDick + " jerks upawrds as it spews $VOLUMEs of semen in a wide arc that anniliates a flock of birds. A white tsunami wipes out " + container.describe(verbose) + ". As the mighty wave crashes through city grids, it \ + }, "desc": function (container, macro, spurtVolume) { + return "You're cumming! Your " + macro.describeDick + " jerks upawrds as it spews $VOLUMEs of semen in a wide arc that anniliates a flock of birds. A white tsunami wipes out " + container.describe(verbose) + ". As the mighty wave crashes through city grids, it \ moves with surprising speed, catching up to and destroying fleeing vehicles. Your cum smashes dams, bridges, and erodes the land as it travels, cutting a deep channel the local rivers begin flowing into."; } }); @@ -3806,51 +3806,51 @@ rules["male-orgasm"].push({ //less than 5e19 rules["male-orgasm"].push({ - "test": function(container, macro, spurtVolume) { - return spurtVolume <= 5e19 && - spurtVolume > 1e16 && - !hasAtleast(container, "Planet", 1) && - isNonFatal(macro); + "test": function (container, macro, spurtVolume) { + return spurtVolume <= 5e19 && + spurtVolume > 1e16 && + !hasAtleast(container, "Planet", 1) && + isNonFatal(macro); - }, "desc": function(container, macro, spurtVolume) { - return "You're cumming! Your " + macro.describeDick + " launches $VOLUMEs of frothing load into the atmosphere. As the ocean of cum lands, it washes over " + container.describe(verbose) + "."; + }, "desc": function (container, macro, spurtVolume) { + return "You're cumming! Your " + macro.describeDick + " launches $VOLUMEs of frothing load into the atmosphere. As the ocean of cum lands, it washes over " + container.describe(verbose) + "."; } }); rules["male-orgasm"].push({ - "test": function(container, macro, spurtVolume) { - return spurtVolume <= 5e19 && - spurtVolume > 1e16 && - !hasAtleast(container, "Planet", 1) && - isFatal(macro); + "test": function (container, macro, spurtVolume) { + return spurtVolume <= 5e19 && + spurtVolume > 1e16 && + !hasAtleast(container, "Planet", 1) && + isFatal(macro); - }, "desc": function(container, macro, spurtVolume) { - return "You're cumming! Your " + macro.describeDick + " launches $VOLUMEs of frothing load into the atmosphere. As the ocean of cum roars across the planet, it smashes through " + container.describe(verbose) + "."; + }, "desc": function (container, macro, spurtVolume) { + return "You're cumming! Your " + macro.describeDick + " launches $VOLUMEs of frothing load into the atmosphere. As the ocean of cum roars across the planet, it smashes through " + container.describe(verbose) + "."; } }); rules["male-orgasm"].push({ - "test": function(container, macro, spurtVolume) { - return spurtVolume <= 1e19 && - spurtVolume > 1e16 && - !!hasAtleast(container,"Planet", 1) && - isGory(macro); - - }, "desc": function(container, macro, spurtVolume) { - return "You're cumming! Your " + macro.describeDick + " launches $VOLUMEs of frothing load into the atmosphere. As the ocean of cum roars across the planet, it smashes through " + container.describe(verbose) + ". Everything your semen rolls across \ + "test": function (container, macro, spurtVolume) { + return spurtVolume <= 1e19 && + spurtVolume > 1e16 && + !!hasAtleast(container, "Planet", 1) && + isGory(macro); + + }, "desc": function (container, macro, spurtVolume) { + return "You're cumming! Your " + macro.describeDick + " launches $VOLUMEs of frothing load into the atmosphere. As the ocean of cum roars across the planet, it smashes through " + container.describe(verbose) + ". Everything your semen rolls across \ is basted to smithereens as it carves a deep chasm. The destroyed buildings and people it swept along are deposited at the sides of the chasm, forming an unstable wall of gore and rubble."; } }); rules["male-orgasm"].push({ - "test": function(container, macro, spurtVolume) { - return spurtVolume <= 5e19 && - spurtVolume > 1e16 && - !hasAtleast(container,"Planet", 1) && - isSadistic(macro); - - }, "desc": function(container, macro, spurtVolume) { - return "You're cumming! Your " + macro.describeDick + " launches $VOLUMEs of frothing load into the atmosphere. As the ocean of cum roars across the planet, it smashes through " + container.describe(verbose) + ". Everything your semen rolls across \ + "test": function (container, macro, spurtVolume) { + return spurtVolume <= 5e19 && + spurtVolume > 1e16 && + !hasAtleast(container, "Planet", 1) && + isSadistic(macro); + + }, "desc": function (container, macro, spurtVolume) { + return "You're cumming! Your " + macro.describeDick + " launches $VOLUMEs of frothing load into the atmosphere. As the ocean of cum roars across the planet, it smashes through " + container.describe(verbose) + ". Everything your semen rolls across \ is basted to smithereens as it carves a deep gore lined chasm that extends from where it landed to the ocean. As it hits the ocean the resulting wave reverses the tide, dashes ships, and turns the water into an inhabitable murky soup. The destroyed \ buildings and people it swept along are deposited at the bottom of the bay."; } @@ -3859,52 +3859,52 @@ rules["male-orgasm"].push({ //less than 1e25 rules["male-orgasm"].push({ - "test": function(container, macro, spurtVolume) { - return spurtVolume <= 1e25 && - spurtVolume > 5e19 && - !hasAtleast(container,"Planet", 1) && - isNonFatal(macro); + "test": function (container, macro, spurtVolume) { + return spurtVolume <= 1e25 && + spurtVolume > 5e19 && + !hasAtleast(container, "Planet", 1) && + isNonFatal(macro); - }, "desc": function(container, macro, spurtVolume) { - return "You're cumming! You open your " + macro.jawDesc(true) + " wide; letting out an earth-shattering roar while $VOLUMEs of cum explode out of your " + macro.describeDick + ". The colossal load sprays down on" + container.describe(verbose) + "."; + }, "desc": function (container, macro, spurtVolume) { + return "You're cumming! You open your " + macro.jawDesc(true) + " wide; letting out an earth-shattering roar while $VOLUMEs of cum explode out of your " + macro.describeDick + ". The colossal load sprays down on" + container.describe(verbose) + "."; } }); rules["male-orgasm"].push({ - "test": function(container, macro, spurtVolume) { - return spurtVolume <= 1e25 && - spurtVolume > 5e19 && - !hasAtleast(container,"Planet", 1) && - isFatal(macro); - - }, "desc": function(container, macro, spurtVolume) { - return "You're cumming! You open your " + macro.jawDesc(true) + " wide; letting out an earth-shattering roar while $VOLUMEs of cum explode out of your " + macro.describeDick + ". The colossal load punches through " + container.describe(verbose) + " without \ + "test": function (container, macro, spurtVolume) { + return spurtVolume <= 1e25 && + spurtVolume > 5e19 && + !hasAtleast(container, "Planet", 1) && + isFatal(macro); + + }, "desc": function (container, macro, spurtVolume) { + return "You're cumming! You open your " + macro.jawDesc(true) + " wide; letting out an earth-shattering roar while $VOLUMEs of cum explode out of your " + macro.describeDick + ". The colossal load punches through " + container.describe(verbose) + " without \ even slowing down. Runing out of land to wash over, it sloshes to an ocean, sending huge waves of cum and seawater hundereds of feet into the sky."; } }); rules["male-orgasm"].push({ - "test": function(container, macro, spurtVolume) { - return spurtVolume <= 1e25 && - spurtVolume > 5e19 && - !hasAtleast(container,"Planet", 1) && - isGory(macro); - - }, "desc": function(container, macro, spurtVolume) { - return "You're cumming! You open your " + macro.jawDesc(true) + " wide; letting out an earth-shattering roar while $VOLUMEs of cum explode out of your " + macro.describeDick + ". The colossal load punches through " + container.describe(verbose) + " without \ + "test": function (container, macro, spurtVolume) { + return spurtVolume <= 1e25 && + spurtVolume > 5e19 && + !hasAtleast(container, "Planet", 1) && + isGory(macro); + + }, "desc": function (container, macro, spurtVolume) { + return "You're cumming! You open your " + macro.jawDesc(true) + " wide; letting out an earth-shattering roar while $VOLUMEs of cum explode out of your " + macro.describeDick + ". The colossal load punches through " + container.describe(verbose) + " without \ even slowing down. Runing out of land to wash over, it sloshes to an ocean, sending huge waves of cum and seawater hundereds of feet into the sky. As the thick goopy mix settles down, the increased volume causes tsunamis and floods over the entire globe."; } }); rules["male-orgasm"].push({ - "test": function(container, macro, spurtVolume) { - return spurtVolume <= 1e25 && - spurtVolume > 5e19 && - !hasAtleast(container,"Planet", 1) && - isSadistic(macro); - - }, "desc": function(container, macro, spurtVolume) { - return "You're cumming! You open your " + macro.jawDesc(true) + " wide; letting out an earth-shattering roar while $VOLUMEs of cum explode out of your " + macro.describeDick + ". The colossal load punches through " + container.describe(verbose) + " without \ + "test": function (container, macro, spurtVolume) { + return spurtVolume <= 1e25 && + spurtVolume > 5e19 && + !hasAtleast(container, "Planet", 1) && + isSadistic(macro); + + }, "desc": function (container, macro, spurtVolume) { + return "You're cumming! You open your " + macro.jawDesc(true) + " wide; letting out an earth-shattering roar while $VOLUMEs of cum explode out of your " + macro.describeDick + ". The colossal load punches through " + container.describe(verbose) + " without \ even slowing down. Runing out of land to wash over, it sloshes to an ocean, sending huge waves of cum and seawater hundereds of feet into the sky. Every ship sailing on that ocean is overwhelmed by the force and capsizes. As the thick goopy mix \ settles down, the increased volume causes tsunamis and floods over the entire globe. The sticky white surface is coveved by dead marine life; schools of bloated tuna, giant squid, sharks, and whales."; } @@ -3913,48 +3913,48 @@ rules["male-orgasm"].push({ //cum envelops planet rules["male-orgasm"].push({ - "test": function(container, macro, spurtVolume) { - return hasExactly(container, "Planet", 1) && - hasOnly(container, ["Planet"]) && - isNonFatal(macro); + "test": function (container, macro, spurtVolume) { + return hasExactly(container, "Planet", 1) && + hasOnly(container, ["Planet"]) && + isNonFatal(macro); - }, "desc": function(container, macro, spurtVolume) { - return "You're cumming! Your reach down and aim your " + macro.describeDick + " at a nearby planet. $VOLUMEs of semen are flung into space, where they contact and completly cover " + container.describe(verbose) + "."; + }, "desc": function (container, macro, spurtVolume) { + return "You're cumming! Your reach down and aim your " + macro.describeDick + " at a nearby planet. $VOLUMEs of semen are flung into space, where they contact and completly cover " + container.describe(verbose) + "."; } }); rules["male-orgasm"].push({ - "test": function(container, macro, spurtVolume) { - return hasExactly(container, "Planet", 1) && - hasOnly(container, ["Planet"]) && - isFatal(macro); + "test": function (container, macro, spurtVolume) { + return hasExactly(container, "Planet", 1) && + hasOnly(container, ["Planet"]) && + isFatal(macro); - }, "desc": function(container, macro, spurtVolume) { - return "You're cumming! Your reach down and aim your " + macro.describeDick + " at a nearby planet. $VOLUMEs of semen wash over " + container.describe(verbose) + ". The once green globe is now a sloshing white ocean of sticky cum."; + }, "desc": function (container, macro, spurtVolume) { + return "You're cumming! Your reach down and aim your " + macro.describeDick + " at a nearby planet. $VOLUMEs of semen wash over " + container.describe(verbose) + ". The once green globe is now a sloshing white ocean of sticky cum."; } }); rules["male-orgasm"].push({ - "test": function(container, macro, spurtVolume) { - return hasExactly(container, "Planet", 1) && - hasOnly(container, ["Planet"]) && - isGory(macro); + "test": function (container, macro, spurtVolume) { + return hasExactly(container, "Planet", 1) && + hasOnly(container, ["Planet"]) && + isGory(macro); - }, "desc": function(container, macro, spurtVolume) { - return "You're cumming! Your reach down and aim your " + macro.describeDick + " at a nearby planet. $VOLUMEs of semen wash over " + container.describe(verbose) + ". When your seed splashes over the surface, it instantly crushes and \ + }, "desc": function (container, macro, spurtVolume) { + return "You're cumming! Your reach down and aim your " + macro.describeDick + " at a nearby planet. $VOLUMEs of semen wash over " + container.describe(verbose) + ". When your seed splashes over the surface, it instantly crushes and \ wipes away an entire civilization. The once green globe is now a sloshing white ocean of sticky cum."; } }); rules["male-orgasm"].push({ - "test": function(container, macro, spurtVolume) { - return hasExactly(container, "Planet", 1) && - hasOnly(container, ["Planet"]) && - isSadistic(macro); - - }, "desc": function(container, macro, spurtVolume) { - return "You're cumming! Your reach down and aim your " + macro.describeDick + " at a nearby planet. $VOLUMEs of semen wash over " + container.describe(verbose) + ". Your seed crashes into the center of the globe and creads outward, \ - slowly enveloping the world. As it spreads through the oceans and continents in a " + length((Math.pow(spurtVolume, 1/3)*.5), unit, true) + " high wave, it instantly crushes and wipes away an entire civilization. The once green globe \ + "test": function (container, macro, spurtVolume) { + return hasExactly(container, "Planet", 1) && + hasOnly(container, ["Planet"]) && + isSadistic(macro); + + }, "desc": function (container, macro, spurtVolume) { + return "You're cumming! Your reach down and aim your " + macro.describeDick + " at a nearby planet. $VOLUMEs of semen wash over " + container.describe(verbose) + ". Your seed crashes into the center of the globe and creads outward, \ + slowly enveloping the world. As it spreads through the oceans and continents in a " + length((Math.pow(spurtVolume, 1 / 3) * .5), unit, true) + " high wave, it instantly crushes and wipes away an entire civilization. The once green globe \ is now a sloshing white ocean of sticky cum."; } }); @@ -3962,24 +3962,24 @@ rules["male-orgasm"].push({ //cum larger than planet rules["male-orgasm"].push({ - "test": function(container, macro, spurtVolume) { - return (hasAtleast(container, "Star", 1) || - hasAtleast(container, "Solar System", 1)) && - isNonFatal(macro); + "test": function (container, macro, spurtVolume) { + return (hasAtleast(container, "Star", 1) || + hasAtleast(container, "Solar System", 1)) && + isNonFatal(macro); - }, "desc": function(container, macro, spurtVolume) { - return "You're cumming! Your " + macro.describeDick + " expells a $VOLUME cumshot into deep space. As it floats away, the gravity it generates pulls " + container.describe(verbose) + " inside of the sticky fluid."; + }, "desc": function (container, macro, spurtVolume) { + return "You're cumming! Your " + macro.describeDick + " expells a $VOLUME cumshot into deep space. As it floats away, the gravity it generates pulls " + container.describe(verbose) + " inside of the sticky fluid."; } }); rules["male-orgasm"].push({ - "test": function(container, macro, spurtVolume) { - return (hasAtleast(container, "Star", 1) || - hasAtleast(container, "Solar System", 1)) && - isFatal(macro); + "test": function (container, macro, spurtVolume) { + return (hasAtleast(container, "Star", 1) || + hasAtleast(container, "Solar System", 1)) && + isFatal(macro); - }, "desc": function(container, macro, spurtVolume) { - return "You're cumming! Your " + macro.describeDick + " expells a $VOLUME cumshot into deep space. As it floats away, the gravity it generates traps " + container.describe(verbose) + " inside of the sticky fluid forever."; + }, "desc": function (container, macro, spurtVolume) { + return "You're cumming! Your " + macro.describeDick + " expells a $VOLUME cumshot into deep space. As it floats away, the gravity it generates traps " + container.describe(verbose) + " inside of the sticky fluid forever."; } }); @@ -3987,46 +3987,46 @@ rules["male-orgasm"].push({ //contains a person rules["male-spurt"].push({ - "test": function(container, macro, spurtVolume) { - return hasOnly(container, ["Person"]) && - hasExactly(container, "Person", 1) && - isNonFatal(macro); + "test": function (container, macro, spurtVolume) { + return hasOnly(container, ["Person"]) && + hasExactly(container, "Person", 1) && + isNonFatal(macro); - }, "desc": function(container, macro, spurtVolume) { - return "$VOLUMEs of precum sprays from your " + macro.describeDick + ". The musky stream covers " + container.describe(verbose) + "."; + }, "desc": function (container, macro, spurtVolume) { + return "$VOLUMEs of precum sprays from your " + macro.describeDick + ". The musky stream covers " + container.describe(verbose) + "."; } }); rules["male-spurt"].push({ - "test": function(container, macro, spurtVolume) { - return hasOnly(container, ["Person"]) && - hasExactly(container, "Person", 1) && - isFatal(macro); + "test": function (container, macro, spurtVolume) { + return hasOnly(container, ["Person"]) && + hasExactly(container, "Person", 1) && + isFatal(macro); - }, "desc": function(container, macro, spurtVolume) { - return "$VOLUMEs of precum leaks from your " + macro.describeDick + ". The musky stream covers " + container.describe(verbose) + ", drowing them."; + }, "desc": function (container, macro, spurtVolume) { + return "$VOLUMEs of precum leaks from your " + macro.describeDick + ". The musky stream covers " + container.describe(verbose) + ", drowing them."; } }); rules["male-spurt"].push({ - "test": function(container, macro, spurtVolume) { - return hasOnly(container, ["Person"]) && - hasExactly(container, "Person", 1) && - isGory(macro); + "test": function (container, macro, spurtVolume) { + return hasOnly(container, ["Person"]) && + hasExactly(container, "Person", 1) && + isGory(macro); - }, "desc": function(container, macro, spurtVolume) { - return "$VOLUMEs of precum leaks from your " + macro.describeDick + ". The musky stream falls over the shoulders of " + container.describe(verbose) + ", knocking them unconsious. They fall face down in the puddle and slowly drown in your pre."; + }, "desc": function (container, macro, spurtVolume) { + return "$VOLUMEs of precum leaks from your " + macro.describeDick + ". The musky stream falls over the shoulders of " + container.describe(verbose) + ", knocking them unconsious. They fall face down in the puddle and slowly drown in your pre."; } }); rules["male-spurt"].push({ - "test": function(container, macro, spurtVolume) { - return hasOnly(container, ["Person"]) && - hasExactly(container, "Person", 1) && - isSadistic(macro); + "test": function (container, macro, spurtVolume) { + return hasOnly(container, ["Person"]) && + hasExactly(container, "Person", 1) && + isSadistic(macro); - }, "desc": function(container, macro, spurtVolume) { - return "You grab " + container.describe(verbose) + " and hold their face against your " + length(macro.dickDiameter,unit, true) + " wide cockhead. $VOLUMEs of precum leaks from your " + macro.describeDick + " and down their streched throat. The musky \ + }, "desc": function (container, macro, spurtVolume) { + return "You grab " + container.describe(verbose) + " and hold their face against your " + length(macro.dickDiameter, unit, true) + " wide cockhead. $VOLUMEs of precum leaks from your " + macro.describeDick + " and down their streched throat. The musky \ discarge fills their lungs and stomach, until your precum runs out of room and begins to leak out of your victim's nose and eyeballs. You drop your toy, watching them fall to the ground and try to cough up the suffocating fluid. Pre pours from their \ mouth, while they slump over and die."; } @@ -4035,95 +4035,95 @@ rules["male-spurt"].push({ //more than 5 and less than 50 rules["male-spurt"].push({ - "test": function(container, macro, spurtVolume) { - return spurtVolume <= 50 && - spurtVolume > 5 && - isNonFatal(macro); + "test": function (container, macro, spurtVolume) { + return spurtVolume <= 50 && + spurtVolume > 5 && + isNonFatal(macro); - }, "desc": function(container, macro, spurtVolume) { - return "Your " + length(macro.dickDiameter, unit, true) + " wide cockhead throbs, releasing $VOLUMEs of pre. The pungent glob spashes over " + container.describe(verbose) + "."; + }, "desc": function (container, macro, spurtVolume) { + return "Your " + length(macro.dickDiameter, unit, true) + " wide cockhead throbs, releasing $VOLUMEs of pre. The pungent glob spashes over " + container.describe(verbose) + "."; } }); rules["male-spurt"].push({ - "test": function(container, macro, spurtVolume) { - return spurtVolume <= 50 && - spurtVolume > 5 && - isFatal(macro); + "test": function (container, macro, spurtVolume) { + return spurtVolume <= 50 && + spurtVolume > 5 && + isFatal(macro); - }, "desc": function(container, macro, spurtVolume) { - return "Your " + length(macro.dickDiameter, unit, true) + " wide cockhead throbs, releasing $VOLUMEs of pre. The pungent glob spashes onto the street; crushing " + container.describe(verbose) + "."; + }, "desc": function (container, macro, spurtVolume) { + return "Your " + length(macro.dickDiameter, unit, true) + " wide cockhead throbs, releasing $VOLUMEs of pre. The pungent glob spashes onto the street; crushing " + container.describe(verbose) + "."; } }); rules["male-spurt"].push({ - "test": function(container, macro, spurtVolume) { - return spurtVolume <= 50 && - spurtVolume > 5 && - isGory(macro); + "test": function (container, macro, spurtVolume) { + return spurtVolume <= 50 && + spurtVolume > 5 && + isGory(macro); - }, "desc": function(container, macro, spurtVolume) { - return "Your " + length(macro.dickDiameter, unit, true) + " wide cockhead throbs, releasing $VOLUMEs of pre. The pungent glob spashes onto the street; crushing " + container.describe(verbose) + ". The bloodstained pool of precum washes down the street and \ + }, "desc": function (container, macro, spurtVolume) { + return "Your " + length(macro.dickDiameter, unit, true) + " wide cockhead throbs, releasing $VOLUMEs of pre. The pungent glob spashes onto the street; crushing " + container.describe(verbose) + ". The bloodstained pool of precum washes down the street and \ pours into a nearby stromdrain."; } }); rules["male-spurt"].push({ - "test": function(container, macro, spurtVolume) { - return spurtVolume <= 50 && - spurtVolume > 5 && - isSadistic(macro); + "test": function (container, macro, spurtVolume) { + return spurtVolume <= 50 && + spurtVolume > 5 && + isSadistic(macro); - }, "desc": function(container, macro, spurtVolume) { - return "Your " + length(macro.dickDiameter, unit, true) + " wide cockhead throbs, releasing $VOLUMEs of pre. The pungent glob spashes onto the street; crushing " + container.describe(verbose) + ". The bloodstained pool of precum washes broken glass and \ - " + pickString("intestines","gore","organs") + " down the street and into a nearby stormdrain."; + }, "desc": function (container, macro, spurtVolume) { + return "Your " + length(macro.dickDiameter, unit, true) + " wide cockhead throbs, releasing $VOLUMEs of pre. The pungent glob spashes onto the street; crushing " + container.describe(verbose) + ". The bloodstained pool of precum washes broken glass and \ + " + pickString("intestines", "gore", "organs") + " down the street and into a nearby stormdrain."; } }); //less than 5e2 rules["male-spurt"].push({ - "test": function(container, macro, spurtVolume) { - return spurtVolume <= 5e2 && - spurtVolume > 50 && - isNonFatal(macro); + "test": function (container, macro, spurtVolume) { + return spurtVolume <= 5e2 && + spurtVolume > 50 && + isNonFatal(macro); - }, "desc": function(container, macro, spurtVolume) { - return "$VOLUMEs of precum flow out of your urethra, soaking " + container.describe(verbose) + " and filling the air with your musk."; + }, "desc": function (container, macro, spurtVolume) { + return "$VOLUMEs of precum flow out of your urethra, soaking " + container.describe(verbose) + " and filling the air with your musk."; } }); rules["male-spurt"].push({ - "test": function(container, macro, spurtVolume) { - return spurtVolume <= 5e2 && - spurtVolume > 50 && - isFatal(macro); + "test": function (container, macro, spurtVolume) { + return spurtVolume <= 5e2 && + spurtVolume > 50 && + isFatal(macro); - }, "desc": function(container, macro, spurtVolume) { - return "$VOLUMEs of precum flow out of your urethra, trapping " + container.describe(verbose) + " within a pond of your pre-ejaculate."; + }, "desc": function (container, macro, spurtVolume) { + return "$VOLUMEs of precum flow out of your urethra, trapping " + container.describe(verbose) + " within a pond of your pre-ejaculate."; } }); rules["male-spurt"].push({ - "test": function(container, macro, spurtVolume) { - return spurtVolume <= 5e2 && - spurtVolume > 50 && - isGory(macro); + "test": function (container, macro, spurtVolume) { + return spurtVolume <= 5e2 && + spurtVolume > 50 && + isGory(macro); - }, "desc": function(container, macro, spurtVolume) { - return "$VOLUMEs of precum flow out of your urethra, trapping " + container.describe(verbose) + " within a pond of your pre-ejaculate. Those unlucky enough to be in the way are crushed by the sudden swell of the fluid. Their floating \ + }, "desc": function (container, macro, spurtVolume) { + return "$VOLUMEs of precum flow out of your urethra, trapping " + container.describe(verbose) + " within a pond of your pre-ejaculate. Those unlucky enough to be in the way are crushed by the sudden swell of the fluid. Their floating \ corpses dye the fluid a dark red."; } }); rules["male-spurt"].push({ - "test": function(container, macro, spurtVolume) { - return spurtVolume <= 5e2 && - spurtVolume > 50 && - isSadistic(macro); + "test": function (container, macro, spurtVolume) { + return spurtVolume <= 5e2 && + spurtVolume > 50 && + isSadistic(macro); - }, "desc": function(container, macro, spurtVolume) { - return "$VOLUMEs of precum flow out of your urethra, trapping " + container.describe(verbose) + " within a pond of your pre-ejaculate. Those unlucky enough to be in the way are crushed by the sudden swell of the fluid. Their floating \ + }, "desc": function (container, macro, spurtVolume) { + return "$VOLUMEs of precum flow out of your urethra, trapping " + container.describe(verbose) + " within a pond of your pre-ejaculate. Those unlucky enough to be in the way are crushed by the sudden swell of the fluid. Their floating \ corpses slowly break apart; dyeing the fluid a dark red."; } }); @@ -4131,46 +4131,46 @@ rules["male-spurt"].push({ //less than 1e4 rules["male-spurt"].push({ - "test": function(container, macro, spurtVolume) { - return spurtVolume <= 1e4 && - spurtVolume > 5e2 && - isNonFatal(macro); + "test": function (container, macro, spurtVolume) { + return spurtVolume <= 1e4 && + spurtVolume > 5e2 && + isNonFatal(macro); - }, "desc": function(container, macro, spurtVolume) { - return "Your " + macro.describeDick + " spews $VOLUMEs of precum, dousing " + container.describe(verbose) + " with your emmisions."; + }, "desc": function (container, macro, spurtVolume) { + return "Your " + macro.describeDick + " spews $VOLUMEs of precum, dousing " + container.describe(verbose) + " with your emmisions."; } }); rules["male-spurt"].push({ - "test": function(container, macro, spurtVolume) { - return spurtVolume <= 1e4 && - spurtVolume > 5e2 && - isFatal(macro); + "test": function (container, macro, spurtVolume) { + return spurtVolume <= 1e4 && + spurtVolume > 5e2 && + isFatal(macro); - }, "desc": function(container, macro, spurtVolume) { - return "Your " + macro.describeDick + " spews $VOLUMEs of precum, smothering " + container.describe(verbose) + " with your emmisions."; + }, "desc": function (container, macro, spurtVolume) { + return "Your " + macro.describeDick + " spews $VOLUMEs of precum, smothering " + container.describe(verbose) + " with your emmisions."; } }); rules["male-spurt"].push({ - "test": function(container, macro, spurtVolume) { - return spurtVolume <= 1e4 && - spurtVolume > 5e2 && - isGory(macro); + "test": function (container, macro, spurtVolume) { + return spurtVolume <= 1e4 && + spurtVolume > 5e2 && + isGory(macro); - }, "desc": function(container, macro, spurtVolume) { - return "Your " + macro.describeDick + " spews $VOLUMEs of precum, smothering " + container.describe(verbose) + " with your emmisions. The slick fluid doesn't instanstly kill your prey; they attmept to crawl out of it while gasping and choking."; + }, "desc": function (container, macro, spurtVolume) { + return "Your " + macro.describeDick + " spews $VOLUMEs of precum, smothering " + container.describe(verbose) + " with your emmisions. The slick fluid doesn't instanstly kill your prey; they attmept to crawl out of it while gasping and choking."; } }); rules["male-spurt"].push({ - "test": function(container, macro, spurtVolume) { - return spurtVolume <= 1e4 && - spurtVolume > 5e2 && - isSadistic(macro); + "test": function (container, macro, spurtVolume) { + return spurtVolume <= 1e4 && + spurtVolume > 5e2 && + isSadistic(macro); - }, "desc": function(container, macro, spurtVolume) { - return "Your " + macro.describeDick + " spews $VOLUMEs of precum, smothering " + container.describe(verbose) + " with your emmisions. The slick fluid ozzes over your prey, soaking and shoving them into the mud. \ + }, "desc": function (container, macro, spurtVolume) { + return "Your " + macro.describeDick + " spews $VOLUMEs of precum, smothering " + container.describe(verbose) + " with your emmisions. The slick fluid ozzes over your prey, soaking and shoving them into the mud. \ You watch as they gasp and choke inside their liquid prison; unsucessefully attempting to crawl out."; } }); @@ -4178,48 +4178,48 @@ rules["male-spurt"].push({ //less than 1e6 rules["male-spurt"].push({ - "test": function(container, macro, spurtVolume) { - return spurtVolume <= 1e6 && - spurtVolume > 1e4 && - isNonFatal(macro); + "test": function (container, macro, spurtVolume) { + return spurtVolume <= 1e6 && + spurtVolume > 1e4 && + isNonFatal(macro); - }, "desc": function(container, macro, spurtVolume) { - return "Your " + length(macro.dickDiameter, unit, true) + " wide cockhead bulges as it pushes out $VOLUMEs of precum, tossing the clear fluid over " + container.describe() + "."; + }, "desc": function (container, macro, spurtVolume) { + return "Your " + length(macro.dickDiameter, unit, true) + " wide cockhead bulges as it pushes out $VOLUMEs of precum, tossing the clear fluid over " + container.describe() + "."; } }); rules["male-spurt"].push({ - "test": function(container, macro, spurtVolume) { - return spurtVolume <= 1e6 && - spurtVolume > 1e4 && - isFatal(macro); + "test": function (container, macro, spurtVolume) { + return spurtVolume <= 1e6 && + spurtVolume > 1e4 && + isFatal(macro); - }, "desc": function(container, macro, spurtVolume) { - return "Your " + length(macro.dickDiameter, unit, true) + " wide cockhead bulges as it pushes out $VOLUMEs of precum, tossing the clear fluid over " + container.describe() + ". The speed and sheer mass of the falling \ + }, "desc": function (container, macro, spurtVolume) { + return "Your " + length(macro.dickDiameter, unit, true) + " wide cockhead bulges as it pushes out $VOLUMEs of precum, tossing the clear fluid over " + container.describe() + ". The speed and sheer mass of the falling \ pre ensures that the area where it lands is obliterated."; } }); rules["male-spurt"].push({ - "test": function(container, macro, spurtVolume) { - return spurtVolume <= 1e6 && - spurtVolume > 1e4 && - isGory(macro); + "test": function (container, macro, spurtVolume) { + return spurtVolume <= 1e6 && + spurtVolume > 1e4 && + isGory(macro); - }, "desc": function(container, macro, spurtVolume) { - return "Your " + length(macro.dickDiameter, unit, true) + " wide cockhead bulges as it pushes out $VOLUMEs of precum, tossing the clear fluid over " + container.describe() + ". The speed and sheer mass of the falling \ + }, "desc": function (container, macro, spurtVolume) { + return "Your " + length(macro.dickDiameter, unit, true) + " wide cockhead bulges as it pushes out $VOLUMEs of precum, tossing the clear fluid over " + container.describe() + ". The speed and sheer mass of the falling \ pre ensures that the area where it lands is converted to a musky mudpit filled with rubble and corpses."; } }); rules["male-spurt"].push({ - "test": function(container, macro, spurtVolume) { - return spurtVolume <= 1e6 && - spurtVolume > 1e4 && - isSadistic(macro); + "test": function (container, macro, spurtVolume) { + return spurtVolume <= 1e6 && + spurtVolume > 1e4 && + isSadistic(macro); - }, "desc": function(container, macro, spurtVolume) { - return "Your " + length(macro.dickDiameter, unit, true) + " wide cockhead bulges as it pushes out $VOLUMEs of precum, tossing the clear fluid over " + container.describe() + ". The speed and sheer mass of the falling \ + }, "desc": function (container, macro, spurtVolume) { + return "Your " + length(macro.dickDiameter, unit, true) + " wide cockhead bulges as it pushes out $VOLUMEs of precum, tossing the clear fluid over " + container.describe() + ". The speed and sheer mass of the falling \ pre ensures that the area where it lands is converted to a musky mudpit filled with rubble and corpses. A mix of pre-ejaculate, blood, and nuggest of flesh flow away from the area; a grisly warning that shows what happens to those in your way."; } }); @@ -4229,48 +4229,48 @@ rules["male-spurt"].push({ //less than 1e12 rules["male-spurt"].push({ - "test": function(container, macro, spurtVolume) { - return spurtVolume <= 1e9 && - spurtVolume > 1e6 && - isNonFatal(macro); + "test": function (container, macro, spurtVolume) { + return spurtVolume <= 1e9 && + spurtVolume > 1e6 && + isNonFatal(macro); - }, "desc": function(container, macro, spurtVolume) { - return "$VOLUMEs of pre rages out of your cavernous urethra, slicking your " + macro.describeDick + " and raining on " + container.describe() + "."; + }, "desc": function (container, macro, spurtVolume) { + return "$VOLUMEs of pre rages out of your cavernous urethra, slicking your " + macro.describeDick + " and raining on " + container.describe() + "."; } }); rules["male-spurt"].push({ - "test": function(container, macro, spurtVolume) { - return spurtVolume <= 1e9 && - spurtVolume > 1e6 && - isFatal(macro); + "test": function (container, macro, spurtVolume) { + return spurtVolume <= 1e9 && + spurtVolume > 1e6 && + isFatal(macro); - }, "desc": function(container, macro, spurtVolume) { - return "$VOLUMEs of pre sloshes out of your gaping cockslit, slicking your " + macro.describeDick + " and flooding out " + container.describe() + ". Each massive drop of your fluid creates a crater and resulting lake when they land,\ + }, "desc": function (container, macro, spurtVolume) { + return "$VOLUMEs of pre sloshes out of your gaping cockslit, slicking your " + macro.describeDick + " and flooding out " + container.describe() + ". Each massive drop of your fluid creates a crater and resulting lake when they land,\ saturating the area with the proof of your passion."; } }); rules["male-spurt"].push({ - "test": function(container, macro, spurtVolume) { - return spurtVolume <= 1e9 && - spurtVolume > 1e6 && - isGory(macro); + "test": function (container, macro, spurtVolume) { + return spurtVolume <= 1e9 && + spurtVolume > 1e6 && + isGory(macro); - }, "desc": function(container, macro, spurtVolume) { - return "$VOLUMEs of pre sloshes out of your gaping cockslit, slicking your " + macro.describeDick + " and flooding out " + container.describe() + ". Each massive drop of your fluid crushes buildings, creating a crater and resulting lake \ + }, "desc": function (container, macro, spurtVolume) { + return "$VOLUMEs of pre sloshes out of your gaping cockslit, slicking your " + macro.describeDick + " and flooding out " + container.describe() + ". Each massive drop of your fluid crushes buildings, creating a crater and resulting lake \ when they land, saturating the rubble with the signs of your passion."; } }); rules["male-spurt"].push({ - "test": function(container, macro, spurtVolume) { - return spurtVolume <= 1e9 && - spurtVolume > 1e6 && - isSadistic(macro); + "test": function (container, macro, spurtVolume) { + return spurtVolume <= 1e9 && + spurtVolume > 1e6 && + isSadistic(macro); - }, "desc": function(container, macro, spurtVolume) { - return "$VOLUMEs of pre sloshes out of your gaping cockslit, slicking your " + macro.describeDick + " and flooding out " + container.describe() + ". Each massive drop of your fluid crushes buildings and creats a crater when they land, \ + }, "desc": function (container, macro, spurtVolume) { + return "$VOLUMEs of pre sloshes out of your gaping cockslit, slicking your " + macro.describeDick + " and flooding out " + container.describe() + ". Each massive drop of your fluid crushes buildings and creats a crater when they land, \ saturating the rubble with a lake of your passion. Those that narrowly escaped the initial splash flail about helplessly in the slick mud until they eventually tire out and suffocate."; } }); @@ -4278,48 +4278,48 @@ rules["male-spurt"].push({ //less than 1e12 rules["male-spurt"].push({ - "test": function(container, macro, spurtVolume) { - return spurtVolume <= 1e12 && - spurtVolume > 1e9 && - isNonFatal(macro); + "test": function (container, macro, spurtVolume) { + return spurtVolume <= 1e12 && + spurtVolume > 1e9 && + isNonFatal(macro); - }, "desc": function(container, macro, spurtVolume) { - return "$VOLUMEs of pre sloshes out of your gaping cockslit, lubricating your " + macro.describeDick + " and splashing over " + container.describe() + "."; + }, "desc": function (container, macro, spurtVolume) { + return "$VOLUMEs of pre sloshes out of your gaping cockslit, lubricating your " + macro.describeDick + " and splashing over " + container.describe() + "."; } }); rules["male-spurt"].push({ - "test": function(container, macro, spurtVolume) { - return spurtVolume <= 1e12 && - spurtVolume > 1e9 && - isFatal(macro); + "test": function (container, macro, spurtVolume) { + return spurtVolume <= 1e12 && + spurtVolume > 1e9 && + isFatal(macro); - }, "desc": function(container, macro, spurtVolume) { - return "$VOLUMEs of pre sloshes out of your gaping cockslit, lubricating your " + macro.describeDick + " and engulfing " - + container.describe() + ". Waves of your pre carve out new canyons and " + pickString("overwhelm a dam in the distance.","swell the rivers into a frothy tide.","form a lake of lust"); + }, "desc": function (container, macro, spurtVolume) { + return "$VOLUMEs of pre sloshes out of your gaping cockslit, lubricating your " + macro.describeDick + " and engulfing " + + container.describe() + ". Waves of your pre carve out new canyons and " + pickString("overwhelm a dam in the distance.", "swell the rivers into a frothy tide.", "form a lake of lust"); } }); rules["male-spurt"].push({ - "test": function(container, macro, spurtVolume) { - return spurtVolume <= 1e12 && - spurtVolume > 1e9 && - isGory(macro); + "test": function (container, macro, spurtVolume) { + return spurtVolume <= 1e12 && + spurtVolume > 1e9 && + isGory(macro); - }, "desc": function(container, macro, spurtVolume) { - return "$VOLUMEs of pre sloshes out of your gaping cockslit, lubricating your " + macro.describeDick + " and engulfing " - + container.describe() + ". Waves of your pre carve out new canyons and " + pickString("overwhelm a dam, flooding a town with a soup of mud, pre, bodies, and rubble.","swell the rivers into a frothy tide that smashes boats and buildings apart.","turn a farming valley into a lake of of gore and lust"); + }, "desc": function (container, macro, spurtVolume) { + return "$VOLUMEs of pre sloshes out of your gaping cockslit, lubricating your " + macro.describeDick + " and engulfing " + + container.describe() + ". Waves of your pre carve out new canyons and " + pickString("overwhelm a dam, flooding a town with a soup of mud, pre, bodies, and rubble.", "swell the rivers into a frothy tide that smashes boats and buildings apart.", "turn a farming valley into a lake of of gore and lust"); } }); rules["male-spurt"].push({ - "test": function(container, macro, spurtVolume) { - return spurtVolume <= 1e12 && - spurtVolume > 1e9 && - isSadistic(macro); + "test": function (container, macro, spurtVolume) { + return spurtVolume <= 1e12 && + spurtVolume > 1e9 && + isSadistic(macro); - }, "desc": function(container, macro, spurtVolume) { - return "$VOLUMEs of pre sloshes out of your gaping cockslit, lubricating your " + macro.describeDick + " and engulfing " + }, "desc": function (container, macro, spurtVolume) { + return "$VOLUMEs of pre sloshes out of your gaping cockslit, lubricating your " + macro.describeDick + " and engulfing " + container.describe() + ". As your fluid flows across the land, small splashes of red along its edge mark bodies being pulverized."; } }); diff --git a/recursive-macro.js b/recursive-macro.js index 7aff03f..dbb1f48 100644 --- a/recursive-macro.js +++ b/recursive-macro.js @@ -10,9 +10,9 @@ var things = cluster_chances: 0, contents: [], descriptor: ["", ""] - }, + }, -//Creatures + //Creatures "Person": { "Person": Person, mass: 80, @@ -21,7 +21,7 @@ var things = cluster_chances: .8, contents: [], descriptor: ["a person", "people"] - }, + }, "Human": { "Human": Human, mass: 80, @@ -30,7 +30,7 @@ var things = cluster_chances: .8, contents: [], descriptor: ["a person", "people"] - }, + }, "Cow": { "Cow": Cow, mass: 300, @@ -39,7 +39,7 @@ var things = cluster_chances: .5, contents: [], descriptor: ["a cow", "cattle"] - }, + }, "Micro": { "Micro": Micro, mass: .01, @@ -48,17 +48,17 @@ var things = cluster_chances: 1, contents: [], descriptor: ["a micro", "micros"] - }, + }, "Macro": { - "Macro": Macro, + "Macro": Macro, mass: 8e4, area: 100, clusters: 0, cluster_chances: 0, contents: [], descriptor: ["a smaller macro", "smaller macros"] - }, -//Vehicles + }, + //Vehicles "Empty Car": { "Empty Car": EmptyCar, mass: 1000, @@ -67,61 +67,61 @@ var things = cluster_chances: .3, contents: [], descriptor: ["a parked car", "parked cars"] - }, + }, "Car": { "Car": Car, mass: 1000, area: 4, clusters: 4, cluster_chances: .5, - contents: [["Person",1,4]], + contents: [["Person", 1, 4]], descriptor: ["a car", "cars"] - }, + }, "Bus": { "Bus": Bus, mass: 5000, area: 12, clusters: 1, cluster_chances: .25, - contents: [["Person",2,30]], + contents: [["Person", 2, 30]], descriptor: ["a bus", "busses"] - }, + }, "Tram": { "Tram": Tram, mass: 1e4, area: 20, clusters: 1, cluster_chances: .2, - contents: [["Person",10,50]], + contents: [["Person", 10, 50]], descriptor: ["a tram", "trams"] - }, + }, "Train": { "Train": Train, mass: 5e4, area: 40, clusters: 2, cluster_chances: .1, - contents: [["Person",1,4,"engine"],["Train Car",2,10]], + contents: [["Person", 1, 4, "engine"], ["Train Car", 2, 10]], descriptor: ["a train", "trains"] - }, + }, "Train Car": { "Train Car": TrainCar, mass: 7500, area: 20, clusters: 1, cluster_chances: .05, - contents: [["Person",10,40]], + contents: [["Person", 10, 40]], descriptor: ["a train car", "train cars"] - }, + }, "Helicopter": { "Helicopter": Helicopter, mass: 1500, area: 12, clusters: 0, cluster_chances: 0, - contents: [["Person",4,16]], + contents: [["Person", 4, 16]], descriptor: ["a helicopter", "helicopters"] - }, + }, "Empty Helicopter": { "Empty Helicopter": EmptyHelicopter, mass: 1500, @@ -130,7 +130,7 @@ var things = cluster_chances: 0.05, contents: [], descriptor: ["a parked helicopter", "parked helicopters"] - }, + }, "Plane": { "Plane": Plane, mass: 6500, @@ -139,25 +139,25 @@ var things = cluster_chances: .05, contents: [], descriptor: ["a small plane", "small planes"] - }, + }, "Empty Plane": { "Empty Plane": EmptyPlane, mass: 6500, area: 50, clusters: 1, cluster_chances: .05, - contents: [["Person",2,9]], + contents: [["Person", 2, 9]], descriptor: ["a parked plane", "parked aircraft"] - }, + }, "Airliner": { "Airliner": Airliner, mass: 6500, area: 1250, clusters: 1, cluster_chances: .05, - contents: [["Person",5,300]], + contents: [["Person", 5, 300]], descriptor: ["an airliner", "airliners"] - }, + }, "Empty Airliner": { "Empty Airliner": EmptyAirliner, mass: 6500, @@ -166,154 +166,154 @@ var things = cluster_chances: .05, contents: [], descriptor: ["a parked airliner", "parked airliners"] - }, -//Buildings + }, + //Buildings "House": { "House": House, mass: 1e4, area: 150, clusters: 5, cluster_chances: .5, - contents: [["Person",0,8],["Empty Car",0,2]], + contents: [["Person", 0, 8], ["Empty Car", 0, 2]], descriptor: ["house", "houses"] - }, + }, "Business": { "Business": Business, mass: 5e4, area: 400, clusters: 5, cluster_chances: .25, - contents: [["Person",0,30],["Car",0,5],["Empty Car",0,20]], + contents: [["Person", 0, 30], ["Car", 0, 5], ["Empty Car", 0, 20]], descriptor: ["a local business", "buildings"] - }, + }, "Barn": { "Barn": Barn, mass: 5e3, area: 300, clusters: 1, cluster_chances: .1, - contents: [["Person",0,2],["Cow",30,70]], + contents: [["Person", 0, 2], ["Cow", 30, 70]], descriptor: ["a barn", "barns"] - }, + }, "Small Hangar": { "Small Hangar": SmallHangar, mass: 5e5, area: 2500, clusters: 1, cluster_chances: .1, - contents: [["Person",0,3],["Plane",0,1],["Empty Plane",2,6]], + contents: [["Person", 0, 3], ["Plane", 0, 1], ["Empty Plane", 2, 6]], descriptor: ["a small hangar", "small hangars"] - }, + }, "Helicopter Hangar": { "Helicopter Hangar": HelicopterHangar, mass: 5e5, area: 2000, clusters: 1, cluster_chances: .1, - contents: [["Person",0,3],["Helicopter",0,1],["Helicopter",2,6]], + contents: [["Person", 0, 3], ["Helicopter", 0, 1], ["Helicopter", 2, 6]], descriptor: ["a helicopter hangar", "helicopter hangar"] - }, + }, "Large Hangar": { "Large Hangar": LargeHangar, mass: 5e6, area: 8000, clusters: 1, cluster_chances: .1, - contents: [["Person",0,5],["Airliner",0,1],["Empty Airliner",1,2]], + contents: [["Person", 0, 5], ["Airliner", 0, 1], ["Empty Airliner", 1, 2]], descriptor: ["an aircraft hangar", "hangars"] - }, + }, "Small Skyscraper": { "Small Skyscraper": SmallSkyscraper, mass: 1e7, area: 1000, clusters: 2, cluster_chances: .25, - contents: [["Person",150,750],["Empty Car",10,50]], + contents: [["Person", 150, 750], ["Empty Car", 10, 50]], descriptor: ["a small skyscraper", "small skyscrapers"] - }, + }, "Large Skyscraper": { "Large Skyscraper": LargeSkyscraper, mass: 8e7, area: 2000, clusters: 1, cluster_chances: .25, - contents: [["Person",500,1500],["Empty Car",20,100]], + contents: [["Person", 500, 1500], ["Empty Car", 20, 100]], descriptor: ["a large skyscraper", "large skyscrapers"] - }, + }, "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]], + contents: [["Person", 10, 200], ["Empty Car", 100, 300], ["Car", 5, 30]], descriptor: ["a parking garage", "parking garages"] - }, -//Places + }, + //Places "Ranch": { "Ranch": Ranch, mass: 2e7, area: 4e4, clusters: 0, cluster_chances: 0, - contents: [["Person",10,50],["House",1,3],["Barn",1,2]], + contents: [["Person", 10, 50], ["House", 1, 3], ["Barn", 1, 2]], descriptor: ["a ranch", "ranchs"] - }, + }, "Airstrip": { "Airstrip": Airstrip, mass: 2e7, area: 9e5, clusters: 0, cluster_chances: 0, - contents: [["Person",10,50],["Small Hangar",1,3],["Plane",0,2],["Helicopter",0,1],["Helicopter Hangar",0,1],["Car",0,5],["Empty Car",0,20]], + contents: [["Person", 10, 50], ["Small Hangar", 1, 3], ["Plane", 0, 2], ["Helicopter", 0, 1], ["Helicopter Hangar", 0, 1], ["Car", 0, 5], ["Empty Car", 0, 20]], descriptor: ["an airstrip", "airstrips"] - }, + }, "Airport": { "Airport": Airport, mass: 1.5e8, area: 6e6, clusters: 0, cluster_chances: 0, - contents: [["Person",1500,4000],["Small Hangar",4,12],["Plane",2,5],["Helicopter",1,3],["Helicopter Hangar",2,6],["Airliner",1,3],["Large Hangar",2,6],["Car",20,75],["Empty Car",400,1000]], + contents: [["Person", 1500, 4000], ["Small Hangar", 4, 12], ["Plane", 2, 5], ["Helicopter", 1, 3], ["Helicopter Hangar", 2, 6], ["Airliner", 1, 3], ["Large Hangar", 2, 6], ["Car", 20, 75], ["Empty Car", 400, 1000]], descriptor: ["an airport", "airports"] - }, + }, "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]], + 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, 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]], + 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, 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]], + 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"] - }, -//Celestial Bodies + }, + //Celestial Bodies "Planet": { "Planet": Planet, mass: 5.972e24, area: 2.5e14, clusters: 0, cluster_chances: 1, - contents: [["Continent",4,9]], + contents: [["Continent", 4, 9]], descriptor: ["a planet", "planets"] - }, + }, "Star": { "Star": Star, mass: 1e40, @@ -322,53 +322,53 @@ var things = cluster_chances: 1, contents: [], descriptor: ["a star", "stars"] - }, + }, "Solar System": { "Solar System": SolarSystem, mass: 1, area: 3e21, clusters: 1, cluster_chances: 1, - contents: [["Star",1,1],["Planet",5,15]], + contents: [["Star", 1, 1], ["Planet", 5, 15]], descriptor: ["a solar system", "solar systems"] - }, + }, "Galaxy": { "Galaxy": Galaxy, mass: 1, area: 2e45, clusters: 1, cluster_chances: 1, - contents: [["Star",1e9,500e9],["Solar System",1e8,500e8]], + contents: [["Star", 1e9, 500e9], ["Solar System", 1e8, 500e8]], descriptor: ["a galaxy", "galaxies"] - }, + }, "Cluster": { "Cluster": Cluster, mass: 1, area: 2e49, clusters: 1, cluster_chances: 1, - contents: [["Galaxy",200,5000]], + contents: [["Galaxy", 200, 5000]], descriptor: ["a cluster", "clusters"] - }, + }, "Universe": { "Universe": Universe, mass: 1, area: 7e53, clusters: 1, cluster_chances: 1, - contents: [["Cluster",1.5e9,2.5e9]], + contents: [["Cluster", 1.5e9, 2.5e9]], descriptor: ["a universe", "universes"] - }, + }, "Multiverse": { "Multiverse": Multiverse, mass: 1, area: 5e56, clusters: 1, cluster_chances: 1, - contents: [["Universe",100,1000]], + contents: [["Universe", 100, 1000]], descriptor: ["a multiverse", "multiverses"] - }, -//Military + }, + //Military "Soldier": { "Soldier": Soldier, mass: 80, @@ -376,124 +376,124 @@ var things = clusters: 2, cluster_chances: .2, contents: [], - descriptor: ["a soldier","soldiers"] - }, + descriptor: ["a soldier", "soldiers"] + }, "Tank": { "Tank": Tank, mass: 5000, area: 20, clusters: 2, cluster_chances: .25, - contents: [["Soldier",3,5]], + contents: [["Soldier", 3, 5]], descriptor: ["a tank", "tanks"] - }, + }, "Artillery": { "Artillery": Artillery, mass: 7000, area: 25, clusters: 3, cluster_chances: .5, - contents: [["Soldier",4,6]], + contents: [["Soldier", 4, 6]], descriptor: ["an artillery tank", "artillery tanks"] - }, + }, "Military Helicopter": { "Military Helicopter": MilitaryHelicopter, mass: 1500, area: 12, clusters: 0, cluster_chances: 0, - contents: [["Soldier",4,16]], + contents: [["Soldier", 4, 16]], descriptor: ["a helicopter", "helicopters"] - }, + }, "Squad": { "Squad": Squad, mass: 1, area: 30, clusters: 20, cluster_chances: .05, - contents: [["Soldier",6,9]], + contents: [["Soldier", 6, 9]], descriptor: ["a squad", "squads"] - }, + }, "Platoon": { "Platoon": Platoon, mass: 100, area: 150, clusters: 2, cluster_chances: .1, - contents: [["Soldier",16,44]], + contents: [["Soldier", 16, 44]], descriptor: ["a military platoon", "platoons"] - }, + }, "Company": { "Company": Company, mass: 500, area: 600, clusters: 2, cluster_chances: .1, - contents: [["Soldier",60,200]], + contents: [["Soldier", 60, 200]], descriptor: ["a company of soldiers", "companies"] - }, + }, "Battalion": { "Battalion": Battalion, mass: 1000, area: 3500, clusters: 2, cluster_chances: .1, - contents: [["Soldier",300,1000]], + contents: [["Soldier", 300, 1000]], descriptor: ["a battalion", "battalions"] - }, + }, "Brigade": { "Brigade": Brigade, mass: 1500, area: 2e4, clusters: 2, cluster_chances: .1, - contents: [["Soldier",1500,3200]], + contents: [["Soldier", 1500, 3200]], descriptor: ["a brigade", "brigades"] - }, + }, "Division": { "Division": Division, mass: 2000, area: 8e4, clusters: 3, cluster_chances: .1, - contents: [["Soldier",10000,16000]], + contents: [["Soldier", 10000, 16000]], descriptor: ["a division", "divisions"] - }, + }, "Tank Division": { "Tank Division": TankDivision, mass: 3000, area: 1e5, clusters: 1, cluster_chances: .15, - contents: [["Soldier",8000,1200],["Tank",250,500]], + contents: [["Soldier", 8000, 1200], ["Tank", 250, 500]], descriptor: ["a tank division", "tank divisions"] - }, + }, "Army": { "Army": Army, mass: 5000, area: 1e6, clusters: 2, cluster_chances: .1, - contents: [["Soldier",40000,75000]], + contents: [["Soldier", 40000, 75000]], descriptor: ["an army", "armies"] - }, + }, }; - //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]], +//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]], // replace all instances of from with to -function contents_substitute(from,to) { +function contents_substitute(from, to) { for (let key in contents) { if (contents.hasOwnProperty(key)) { let type = contents[key]; - for (let i=0; i 0) { // if a custom label is supplied, use it! if (type[i].length == 4) //if has optional name @@ -559,22 +559,21 @@ function get_living_prey(sum) { // general logic: each step fills in a fraction of the remaining space -function fill_area(area, weights, variance=0.15) -{ +function fill_area(area, weights, variance = 0.15) { area = area + Math.random() * variance * 2 * area - variance * area; var result = []; var candidates = []; for (var key in weights) { if (weights.hasOwnProperty(key)) { - candidates.push({"name": key, "area": things[key].area, "weight": weights[key]}); + candidates.push({ "name": key, "area": things[key].area, "weight": weights[key] }); } } - candidates = candidates.sort(function (x,y) { + candidates = candidates.sort(function (x, y) { return x.area - y.area; }); - while(candidates.length > 0) { + while (candidates.length > 0) { var candidate = candidates.pop(); if (candidate.area > area) @@ -593,7 +592,7 @@ function fill_area(area, weights, variance=0.15) // if we have nothing at all, it's even better! while (loopvar < limit) { - + if (loopvar == 0 && result.length == 0) { ++count; } @@ -611,7 +610,7 @@ function fill_area(area, weights, variance=0.15) // if we're doing more than the limit, then we just add on the rest, with some variance if (limit < max) { - const base = (max-limit) * candidate.weight; + const base = (max - limit) * candidate.weight; count += Math.round(base - base / 10 + base * Math.random() / 5); } @@ -633,7 +632,7 @@ function fill_area(area, weights, variance=0.15) function distribution(min, max, samples) { var result = 0; - var limit = Math.min(100,samples); + var limit = Math.min(100, samples); if (limit < samples) { let dist = 0; @@ -653,7 +652,7 @@ function distribution(min, max, samples) { } function defaultMultiply(thing) { - return function(amount) { + return function (amount) { thing.count *= amount; for (var key in thing.contents) { if (thing.contents.hasOwnProperty(key)) { @@ -673,13 +672,13 @@ function defaultMass(thing) { } function defaultDescribeOne(thing) { - return function(verbose){ //verbose doesn't matter for this case, becasue it handles things with no extra text to use when being verbose - return things[thing.name].descriptor[0]; + return function (verbose) { //verbose doesn't matter for this case, becasue it handles things with no extra text to use when being verbose + return things[thing.name].descriptor[0]; } } function defaultMerge(thing) { //this merges all objects into one containers - return function(container) { + return function (container) { var newCount = this.count + container.count; var newThing = new things[thing.name][thing.name](newCount); newThing.contents = {}; @@ -722,7 +721,7 @@ function flatten(thing) { let list = []; - Object.entries(dict).forEach(function([key, val]) { + Object.entries(dict).forEach(function ([key, val]) { let obj = new things[key][key](val); obj.contents = []; @@ -730,8 +729,8 @@ function flatten(thing) { list.push(obj); }); - list.sort(function(x,y) { - if (y.area != x.area){ + list.sort(function (x, y) { + if (y.area != x.area) { return y.area - x.area; } else { return x.name.localeCompare(y.name); @@ -742,7 +741,7 @@ function flatten(thing) { } function defaultSum(thing) { - return function() { + return function () { var counts = {}; if (thing.name != "Container") @@ -765,7 +764,7 @@ function defaultSum(thing) { } function defaultSumProperty(thing) { - return function(prop) { + return function (prop) { var total = 0; total += thing[prop] * thing.count; @@ -781,9 +780,9 @@ function defaultSumProperty(thing) { } function defaultAddContent(thing) { - return function(name, min, max, count) { + return function (name, min, max, count) { if (min == max) { - let object = new things[name](min*count); + let object = new things[name](min * count); thing.contents[object.name] = object; } else { let object = new things[name](distribution(min, max, count)); @@ -806,7 +805,7 @@ function DefaultEntity() { // god I love reinventing the wheel -function copy_defaults(self,proto) { //loads the values defined in things into the fuction that calls it +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); @@ -816,7 +815,7 @@ 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) { +function merge_things(list, semicolons = false) { if (list.length == 0) { return ""; } else if (list.length == 1) { @@ -826,11 +825,11 @@ function merge_things(list,semicolons=false) { } else { var result = ""; - list.slice(0,list.length-1).forEach(function(term) { + list.slice(0, list.length - 1).forEach(function (term) { result += term + ", "; }); - result += "and " + list[list.length-1]; + result += "and " + list[list.length - 1]; return result; } @@ -841,7 +840,7 @@ function merge_things(list,semicolons=false) { function merge_desc(list) { var result = ""; - list.forEach(function(term) { + list.forEach(function (term) { if (term != "") result += term + " "; }); @@ -853,21 +852,21 @@ function merge_desc(list) { 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 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;} + 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 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;} + 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 "; + 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; @@ -875,17 +874,17 @@ function merge_desc(list) { // 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)); - } +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); + } + return merge_things(things); } -function random_desc(list, odds=1) { //strings together an array into a series of words +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 @@ -893,7 +892,7 @@ function random_desc(list, odds=1) { //strings together an array into a series o } function defaultDescribeSimple(thing) { - return function(flat) { + return function (flat) { if (flat) { return flatten(thing).describe(false) } else { @@ -902,37 +901,37 @@ function defaultDescribeSimple(thing) { } } -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; - case "generic vehicle": - groupLessThan3 = true; - descriptorEnd = pickString(" inside"," inside"," inside", " inside"," riding inside", " trapped inside", " sitting inside"); - break; - - } if (verbose) { - if (parent.count = 1 ) { //singular parent (specifying single to catch cases where groupLessThan3 = true, otherwise it would output "1 towns" instead of "a town" - if (things[parent.name].contents.length > 0){ - return (things[parent.name].descriptor[0] + descriptorConjunction + describe_all(parent.contents,false) + descriptorEnd); +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; + case "generic vehicle": + groupLessThan3 = true; + descriptorEnd = pickString(" inside", " inside", " inside", " inside", " riding inside", " trapped inside", " sitting inside"); + break; + + } if (verbose) { + if (parent.count = 1) { //singular parent (specifying single to catch cases where groupLessThan3 = true, otherwise it would output "1 towns" instead of "a town" + if (things[parent.name].contents.length > 0) { + return (things[parent.name].descriptor[0] + descriptorConjunction + describe_all(parent.contents, false) + descriptorEnd); } else { return parent.describeOne(verbose); } @@ -942,14 +941,14 @@ function defaultDescribe(verbose=true, parent, descAs){ 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) + descriptorConjunction + describe_all(parent.contents,false) + descriptorEnd); + if (things[parent.name].contents.length > 0) { + return (merge_things(list) + descriptorConjunction + describe_all(parent.contents, false) + descriptorEnd); } else { return merge_things(list); } } 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] + descriptorConjunction + describe_all(parent.contents,false) + descriptorEnd); + if (things[parent.name].contents.length > 0) { + return (parent.count + " " + things[parent.name].descriptor[1] + descriptorConjunction + describe_all(parent.contents, false) + descriptorEnd); } else { return (parent.count + " " + things[parent.name].descriptor[1]); } @@ -963,7 +962,7 @@ function defaultDescribe(verbose=true, parent, descAs){ function Container(contents = []) { this.name = "Container"; - copy_defaults(this,new DefaultEntity()); + copy_defaults(this, new DefaultEntity()); if (Number.isInteger(contents)) this.count = contents; @@ -972,7 +971,7 @@ function Container(contents = []) { this.contents = {}; - for (var i=0; i < contents.length; i++) { + for (var i = 0; i < contents.length; i++) { this.contents[contents[i].name] = contents[i]; } @@ -982,8 +981,8 @@ function Container(contents = []) { } } - this.describe = function(verbose = true) { - return describe_all(this.contents,verbose); + this.describe = function (verbose = true) { + return describe_all(this.contents, verbose); }; return this; @@ -992,21 +991,21 @@ function Container(contents = []) { function Person(count = 1) { this.name = "Person"; - copy_defaults(this,new DefaultEntity()); + copy_defaults(this, new DefaultEntity()); - this.mass = ((Math.random() -.5)*20)+this.mass; + this.mass = ((Math.random() - .5) * 20) + this.mass; this.count = count; - this.contents = initContents(this.name,this.count); + this.contents = initContents(this.name, this.count); - this.describeOne = function (verbose=true) { - var body = random_desc(["skinny","fat","tall","short","stocky","spindly","muscular","fit","multi-colored"], (verbose ? 0.6 : 0)); + 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 ? 0.75 : 0)); var species = ""; - species = random_desc(["wolf","cat","dog","squirrel","horse","hyena","fox","jackal","crux","sergal","coyote","rabbit","lizard","avian"]); - return merge_desc([body,sex,species]); + species = random_desc(["wolf", "cat", "dog", "squirrel", "horse", "hyena", "fox", "jackal", "crux", "sergal", "coyote", "rabbit", "lizard", "avian"]); + return merge_desc([body, sex, species]); }; - this.describe = function(verbose=true) { + this.describe = function (verbose = true) { return defaultDescribe(verbose, this); } @@ -1016,19 +1015,19 @@ function Person(count = 1) { function Human(count = 1) { this.name = "Person"; - copy_defaults(this,new DefaultEntity()); + copy_defaults(this, new DefaultEntity()); - this.mass = ((Math.random() -.5)*20)+this.mass; + this.mass = ((Math.random() - .5) * 20) + this.mass; this.count = count; - this.contents = initContents(this.name,this.count); + this.contents = initContents(this.name, this.count); - this.describeOne = function (verbose=true) { - var body = random_desc(["skinny","fat","tall","short","stocky","spindly","muscular","fit","tanned"], (verbose ? 0.6 : 0)); + this.describeOne = function (verbose = true) { + 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 merge_desc([body,sex]); + return merge_desc([body, sex]); }; - this.describe = function(verbose=true) { + this.describe = function (verbose = true) { return defaultDescribe(verbose, this); } @@ -1038,18 +1037,18 @@ function Human(count = 1) { function Cow(count = 1) { this.name = "Cow"; - copy_defaults(this,new DefaultEntity()); + copy_defaults(this, new DefaultEntity()); this.count = count; - this.contents = initContents(this.name,this.count); + this.contents = initContents(this.name, this.count); - this.describeOne = function (verbose=true) { - var body = random_desc(["skinny","fat","tall","short","stocky","spindly","brown"], (verbose ? 0.6 : 0)); - var sex = random_desc(["bull","steer","cow","cow","cow","heifer"], (verbose ? 1 : 0)); - return merge_desc([body,sex]); + this.describeOne = function (verbose = true) { + var body = random_desc(["skinny", "fat", "tall", "short", "stocky", "spindly", "brown"], (verbose ? 0.6 : 0)); + var sex = random_desc(["bull", "steer", "cow", "cow", "cow", "heifer"], (verbose ? 1 : 0)); + return merge_desc([body, sex]); }; - this.describe = function(verbose=true) { + this.describe = function (verbose = true) { return defaultDescribe(verbose, this); } @@ -1059,18 +1058,18 @@ function Cow(count = 1) { function EmptyCar(count = 1) { this.name = "Empty Car"; - copy_defaults(this,new DefaultEntity()); + copy_defaults(this, new DefaultEntity()); this.count = count; - this.contents = initContents(this.name,this.count); + this.contents = initContents(this.name, this.count); - 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","luxury","beat-up","dented","restored","classic"],0.3); - var type = random_desc(["SUV","coupe","sedan","truck","van","convertible"]); - return merge_desc(["parked",adjective,color,type]); + 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", "luxury", "beat-up", "dented", "restored", "classic"], 0.3); + var type = random_desc(["SUV", "coupe", "sedan", "truck", "van", "convertible"]); + return merge_desc(["parked", adjective, color, type]); }; - this.describe = function(verbose=true) { + this.describe = function (verbose = true) { return defaultDescribe(verbose, this, "vehicle"); } } @@ -1078,18 +1077,18 @@ function EmptyCar(count = 1) { function Car(count = 1) { this.name = "Car"; - copy_defaults(this,new DefaultEntity()); + copy_defaults(this, new DefaultEntity()); this.count = count; - this.contents = initContents(this.name,this.count); + this.contents = initContents(this.name, this.count); - 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","luxury","beat-up","dented","restored","classic"], (verbose ? 0.3 : 0)); - var type = random_desc(["SUV","coupe","sedan","truck","van","convertible"]); - return merge_desc([adjective,color,type]); + 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", "luxury", "beat-up", "dented", "restored", "classic"], (verbose ? 0.3 : 0)); + var type = random_desc(["SUV", "coupe", "sedan", "truck", "van", "convertible"]); + return merge_desc([adjective, color, type]); }; - this.describe = function(verbose=true) { + this.describe = function (verbose = true) { return defaultDescribe(verbose, this, "vehicle"); } } @@ -1097,18 +1096,18 @@ function Car(count = 1) { function Bus(count = 1) { this.name = "Bus"; - copy_defaults(this,new DefaultEntity()); + copy_defaults(this, new DefaultEntity()); this.count = count; - this.contents = initContents(this.name,this.count); + this.contents = initContents(this.name, this.count); - this.describeOne = function(verbose=true) { - 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","open-top bus","sleeper bus","intercity bus"]); - return merge_desc([adjective,color,type]); + this.describeOne = function (verbose = true) { + 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", "open-top bus", "sleeper bus", "intercity bus"]); + return merge_desc([adjective, color, type]); }; - this.describe = function(verbose=true) { + this.describe = function (verbose = true) { return defaultDescribe(verbose, this, "vehicle"); } } @@ -1116,22 +1115,22 @@ function Bus(count = 1) { function Tram(count = 1) { this.name = "Tram"; - copy_defaults(this,new DefaultEntity()); + copy_defaults(this, new DefaultEntity()); this.count = count; - this.contents = initContents(this.name,this.count); + this.contents = initContents(this.name, this.count); - this.describeOne = function(verbose=true) { - var adjective = random_desc(["rusty","weathered","well-maintained",], (verbose ? 0.3 : 0)); - var color = random_desc(["blue","brown","gray"], (verbose ? 1 : 0)); + this.describeOne = function (verbose = true) { + 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 merge_desc([adjective,color,type]); + return merge_desc([adjective, color, type]); }; - this.describe = function(verbose=true) { + this.describe = function (verbose = true) { return defaultDescribe(verbose, this, "vehicle"); } - this.anal_vore = function() { + this.anal_vore = function () { return "You slide " + this.describe() + " up your tight ass"; }; } @@ -1139,17 +1138,17 @@ function Tram(count = 1) { function EmptyHelicopter(count = 1) { this.name = "Empty Helicopter"; - copy_defaults(this,new DefaultEntity()); + copy_defaults(this, new DefaultEntity()); this.count = count; - this.contents = initContents(this.name,this.count); + this.contents = initContents(this.name, this.count); - this.describeOne = function(verbose=true) { - var color = random_desc(["blue","white","white","red","black","gold","yellow"], (verbose ? 0.6 : 0)); - var type = random_desc(["bubble coptor","helicopter","helicopter","news chopper","police helicopter","chopper"]); - return merge_desc([adjective,color,type]); + this.describeOne = function (verbose = true) { + var color = random_desc(["blue", "white", "white", "red", "black", "gold", "yellow"], (verbose ? 0.6 : 0)); + var type = random_desc(["bubble coptor", "helicopter", "helicopter", "news chopper", "police helicopter", "chopper"]); + return merge_desc([adjective, color, type]); }; - this.describe = function(verbose=true) { + this.describe = function (verbose = true) { return defaultDescribe(verbose, this, "vehicle"); } } @@ -1157,17 +1156,17 @@ function EmptyHelicopter(count = 1) { function Helicopter(count = 1) { this.name = "Helicopter"; - copy_defaults(this,new DefaultEntity()); + copy_defaults(this, new DefaultEntity()); this.count = count; - this.contents = initContents(this.name,this.count); + this.contents = initContents(this.name, this.count); - this.describeOne = function(verbose=true) { - var color = random_desc(["blue","white","white","red","black","gold","yellow"], (verbose ? 0.6 : 0)); - var type = random_desc(["bubble coptor","helicopter","helicopter","news chopper","police helicopter","chopper"]); - return merge_desc([adjective,color,type]); + this.describeOne = function (verbose = true) { + var color = random_desc(["blue", "white", "white", "red", "black", "gold", "yellow"], (verbose ? 0.6 : 0)); + var type = random_desc(["bubble coptor", "helicopter", "helicopter", "news chopper", "police helicopter", "chopper"]); + return merge_desc([adjective, color, type]); }; - this.describe = function(verbose=true) { + this.describe = function (verbose = true) { return defaultDescribe(verbose, this, "vehicle"); } } @@ -1175,18 +1174,18 @@ function Helicopter(count = 1) { function EmptyPlane(count = 1) { this.name = "Empty Plane"; - copy_defaults(this,new DefaultEntity()); + copy_defaults(this, new DefaultEntity()); this.count = count; - this.contents = initContents(this.name,this.count); + this.contents = initContents(this.name, this.count); - this.describeOne = function(verbose=true) { - var adjective = random_desc(["brand-new","aging","modern"], (verbose ? 0.2 : 0)); - var color = random_desc(["blue","white","white","blue and white","red and white","black","gold"], (verbose ? 0.9 : 0)); - var type = random_desc(["luxury jet","business jet","single-engine plane","light aircraft"]); - return merge_desc([adjective,color,type]); + this.describeOne = function (verbose = true) { + var adjective = random_desc(["brand-new", "aging", "modern"], (verbose ? 0.2 : 0)); + var color = random_desc(["blue", "white", "white", "blue and white", "red and white", "black", "gold"], (verbose ? 0.9 : 0)); + var type = random_desc(["luxury jet", "business jet", "single-engine plane", "light aircraft"]); + return merge_desc([adjective, color, type]); }; - this.describe = function(verbose=true) { + this.describe = function (verbose = true) { return defaultDescribe(verbose, this, "vehicle"); } } @@ -1194,18 +1193,18 @@ function EmptyPlane(count = 1) { function Plane(count = 1) { this.name = "Plane"; - copy_defaults(this,new DefaultEntity()); + copy_defaults(this, new DefaultEntity()); this.count = count; - this.contents = initContents(this.name,this.count); + this.contents = initContents(this.name, this.count); - this.describeOne = function(verbose=true) { - var adjective = random_desc(["brand-new","aging","modern"], (verbose ? 0.2 : 0)); - var color = random_desc(["blue","white","white","blue and white","red and white","black","gold"], (verbose ? 0.9 : 0)); - var type = random_desc(["luxury jet","business jet","single-engine plane","light aircraft"]); - return merge_desc([adjective,color,type]); + this.describeOne = function (verbose = true) { + var adjective = random_desc(["brand-new", "aging", "modern"], (verbose ? 0.2 : 0)); + var color = random_desc(["blue", "white", "white", "blue and white", "red and white", "black", "gold"], (verbose ? 0.9 : 0)); + var type = random_desc(["luxury jet", "business jet", "single-engine plane", "light aircraft"]); + return merge_desc([adjective, color, type]); }; - this.describe = function(verbose=true) { + this.describe = function (verbose = true) { return defaultDescribe(verbose, this, "vehicle"); } } @@ -1213,18 +1212,18 @@ function Plane(count = 1) { function EmptyAirliner(count = 1) { this.name = "Empty Airliner"; - copy_defaults(this,new DefaultEntity()); + copy_defaults(this, new DefaultEntity()); this.count = count; - this.contents = initContents(this.name,this.count); + this.contents = initContents(this.name, this.count); - this.describeOne = function(verbose=true) { - var adjective = random_desc(["brand-new","aging","modern"], (verbose ? 0.2 : 0)); - var color = random_desc(["blue","white","white","blue and white"], (verbose ? 0.9 : 0)); - var type = random_desc(["airliner","twin-engine jet","trijet","four engine jet","double-decker airliner","widebody airliner","passenger jet","airliner"]); - return merge_desc([adjective,color,type]); + this.describeOne = function (verbose = true) { + var adjective = random_desc(["brand-new", "aging", "modern"], (verbose ? 0.2 : 0)); + var color = random_desc(["blue", "white", "white", "blue and white"], (verbose ? 0.9 : 0)); + var type = random_desc(["airliner", "twin-engine jet", "trijet", "four engine jet", "double-decker airliner", "widebody airliner", "passenger jet", "airliner"]); + return merge_desc([adjective, color, type]); }; - this.describe = function(verbose=true) { + this.describe = function (verbose = true) { return defaultDescribe(verbose, this, "vehicle"); } } @@ -1232,46 +1231,46 @@ function EmptyAirliner(count = 1) { function Airliner(count = 1) { this.name = "Airliner"; - copy_defaults(this,new DefaultEntity()); + copy_defaults(this, new DefaultEntity()); this.count = count; - this.contents = initContents(this.name,this.count); + this.contents = initContents(this.name, this.count); - this.describeOne = function(verbose=true) { - var adjective = random_desc(["brand-new","aging","modern"], (verbose ? 0.2 : 0)); - var color = random_desc(["blue","white","white","blue and white"], (verbose ? 0.9 : 0)); - var type = random_desc(["airliner","twin-engine jet","trijet","four engine jet","double-decker airliner","widebody airliner","passenger jet","airliner"]); - return merge_desc([adjective,color,type]); + this.describeOne = function (verbose = true) { + var adjective = random_desc(["brand-new", "aging", "modern"], (verbose ? 0.2 : 0)); + var color = random_desc(["blue", "white", "white", "blue and white"], (verbose ? 0.9 : 0)); + var type = random_desc(["airliner", "twin-engine jet", "trijet", "four engine jet", "double-decker airliner", "widebody airliner", "passenger jet", "airliner"]); + return merge_desc([adjective, color, type]); }; - this.describe = function(verbose=true) { + this.describe = function (verbose = true) { return defaultDescribe(verbose, this, "vehicle"); } } function Train(count = 1) { this.name = "Train"; - copy_defaults(this,new DefaultEntity()); + copy_defaults(this, new DefaultEntity()); this.count = count; - this.contents = initContents(this.name,this.count); + this.contents = initContents(this.name, this.count); - this.describeOne = function(verbose=true) { - 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 merge_desc([adjective,color,type]); + this.describeOne = function (verbose = true) { + 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 merge_desc([adjective, color, type]); }; - this.describe = function(verbose = true) { + this.describe = function (verbose = true) { if (verbose) { if (this.count == 1) { var list = []; for (var i = 0; i < this.count; i++) { list.push(this.describeOne(verbose)); } - return merge_things(list) + " with " + this.contents["engine"].describe(false) + " in the engine and " + this.contents["Train Car"].describe() + " attached"; + return merge_things(list) + " with " + this.contents["engine"].describe(false) + " in the engine and " + this.contents["Train Car"].describe() + " attached"; } else { - return this.count + " trains with " + this.contents["engine"].describe(false) + " in the engine and " + this.contents["Train Car"].describe() + " attached"; + return this.count + " trains with " + this.contents["engine"].describe(false) + " in the engine and " + this.contents["Train Car"].describe() + " attached"; } } else { return (this.count > 1 ? this.count + " trains" : "a train"); @@ -1279,7 +1278,7 @@ function Train(count = 1) { }; - this.anal_vore = function() { + this.anal_vore = function () { var cars = (this.contents["Train Car"].count == 1 ? this.contents["Train Car"].describe() + " follows it inside" : this.contents["Train Car"].describe() + " are pulled slowly inside"); return "You snatch up " + this.describeOne() + " and stuff it into your pucker, moaning as " + cars; }; @@ -1287,189 +1286,189 @@ function Train(count = 1) { function TrainCar(count = 1) { this.name = "Train Car"; - copy_defaults(this,new DefaultEntity()); + copy_defaults(this, new DefaultEntity()); this.count = count; - this.contents = initContents(this.name,this.count); + this.contents = initContents(this.name, this.count); - this.describeOne = function(verbose=true) { - 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 merge_desc([adjective,color,type]); + this.describeOne = function (verbose = true) { + 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 merge_desc([adjective, color, type]); }; - this.describe = function(verbose=true) { + this.describe = function (verbose = true) { return defaultDescribe(verbose, this, "vehicle"); } } function House(count = 1) { this.name = "House"; - copy_defaults(this,new DefaultEntity()); + copy_defaults(this, new DefaultEntity()); this.count = count; - this.contents = initContents(this.name,this.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",], (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","duplex","house","house","trailer"], 1); - return merge_desc([size,color,name]); + this.describeOne = function (verbose = true) { + 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", "duplex", "house", "house", "trailer"], 1); + return merge_desc([size, color, name]); }; - this.describe = function(verbose=true) { + this.describe = function (verbose = true) { return defaultDescribe(verbose, this); } } //might split this into a general business and resutrant categories function Business(count = 1) { this.name = "Business"; - copy_defaults(this,new DefaultEntity()); + copy_defaults(this, new DefaultEntity()); this.count = count; - this.contents = initContents(this.name,this.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 merge_desc([size,color,name]); + 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 merge_desc([size, color, name]); }; - this.describe = function(verbose=true) { + this.describe = function (verbose = true) { return defaultDescribe(verbose, this); } } function Barn(count = 1) { this.name = "Barn"; - copy_defaults(this,new DefaultEntity()); + copy_defaults(this, new DefaultEntity()); this.count = count; - this.contents = initContents(this.name,this.count); + this.contents = initContents(this.name, this.count); - this.describeOne = function(verbose=true) { - 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 merge_desc([size,color,name]); + this.describeOne = function (verbose = true) { + 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 merge_desc([size, color, name]); }; - this.describe = function(verbose=true) { + this.describe = function (verbose = true) { return defaultDescribe(verbose, this); } } function SmallHangar(count = 1) { this.name = "Small Hangar"; - copy_defaults(this,new DefaultEntity()); + copy_defaults(this, new DefaultEntity()); this.count = count; - this.contents = initContents(this.name,this.count); + this.contents = initContents(this.name, this.count); - this.describeOne = function(verbose=true) { - var size = random_desc(["weathered","aging","new"], (verbose ? 0.5 : 0)); - var color = random_desc(["blue","white","gray","tan","green"], (verbose ? 0.5 : 0)); - var name = random_desc(["hangar","hangar","hangar","aircraft hangar"], 1); - return merge_desc([size,color,name]); + this.describeOne = function (verbose = true) { + var size = random_desc(["weathered", "aging", "new"], (verbose ? 0.5 : 0)); + var color = random_desc(["blue", "white", "gray", "tan", "green"], (verbose ? 0.5 : 0)); + var name = random_desc(["hangar", "hangar", "hangar", "aircraft hangar"], 1); + return merge_desc([size, color, name]); }; - this.describe = function(verbose=true) { + this.describe = function (verbose = true) { return defaultDescribe(verbose, this); } } function HelicopterHangar(count = 1) { this.name = "Helicopter Hangar"; - copy_defaults(this,new DefaultEntity()); + copy_defaults(this, new DefaultEntity()); this.count = count; - this.contents = initContents(this.name,this.count); + this.contents = initContents(this.name, this.count); - this.describeOne = function(verbose=true) { - var size = random_desc(["weathered","aging","new"], (verbose ? 0.5 : 0)); - var color = random_desc(["blue","white","gray","tan","green"], (verbose ? 0.5 : 0)); - var name = random_desc(["hangar","hangar","hangar","helicopter hangar"], 1); - return merge_desc([size,color,name]); + this.describeOne = function (verbose = true) { + var size = random_desc(["weathered", "aging", "new"], (verbose ? 0.5 : 0)); + var color = random_desc(["blue", "white", "gray", "tan", "green"], (verbose ? 0.5 : 0)); + var name = random_desc(["hangar", "hangar", "hangar", "helicopter hangar"], 1); + return merge_desc([size, color, name]); }; - this.describe = function(verbose=true) { + this.describe = function (verbose = true) { return defaultDescribe(verbose, this); } } function LargeHangar(count = 1) { this.name = "Large Hangar"; - copy_defaults(this,new DefaultEntity()); + copy_defaults(this, new DefaultEntity()); this.count = count; - this.contents = initContents(this.name,this.count); + this.contents = initContents(this.name, this.count); - this.describeOne = function(verbose=true) { - var size = random_desc(["weathered","aging","new"], (verbose ? 0.5 : 0)); - var color = random_desc(["blue","white","gray","tan","green"], (verbose ? 0.5 : 0)); - var name = random_desc(["hangar","hangar","hangar","large hangar","spacious hangar"], 1); - return merge_desc([size,color,name]); + this.describeOne = function (verbose = true) { + var size = random_desc(["weathered", "aging", "new"], (verbose ? 0.5 : 0)); + var color = random_desc(["blue", "white", "gray", "tan", "green"], (verbose ? 0.5 : 0)); + var name = random_desc(["hangar", "hangar", "hangar", "large hangar", "spacious hangar"], 1); + return merge_desc([size, color, name]); }; - this.describe = function(verbose=true) { + this.describe = function (verbose = true) { return defaultDescribe(verbose, this); } } function SmallSkyscraper(count = 1) { this.name = "Small Skyscraper"; - copy_defaults(this,new DefaultEntity()); + copy_defaults(this, new DefaultEntity()); this.count = count; - this.contents = initContents(this.name,this.count); + 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 name = random_desc(["skyscraper","office tower","office building","high rise"], 1); - return merge_desc([color,name]); + 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", "high rise"], 1); + return merge_desc([color, name]); }; - this.describe = function(verbose=true) { + this.describe = function (verbose = true) { return defaultDescribe(verbose, this); } } function LargeSkyscraper(count = 1) { this.name = "Large Skyscraper"; - copy_defaults(this,new DefaultEntity()); + copy_defaults(this, new DefaultEntity()); this.count = count; - this.contents = initContents(this.name,this.count); + this.contents = initContents(this.name, this.count); - this.describeOne = function(verbose=true) { - 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 merge_desc(["towering",color,name]); + this.describeOne = function (verbose = true) { + 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 merge_desc(["towering", color, name]); }; - this.describe = function(verbose=true) { + this.describe = function (verbose = true) { return defaultDescribe(verbose, this); } } function ParkingGarage(count = 1) { this.name = "Parking Garage"; - copy_defaults(this,new DefaultEntity()); + copy_defaults(this, new DefaultEntity()); this.count = count; - this.contents = initContents(this.name,this.count); + this.contents = initContents(this.name, this.count); - this.describe = function(verbose=true) { + this.describe = function (verbose = true) { return defaultDescribe(verbose, this); } } function Ranch(count = 1) { this.name = "Ranch"; - copy_defaults(this,new DefaultEntity()); + copy_defaults(this, new DefaultEntity()); this.count = count; - this.contents = initContents(this.name,this.count); + this.contents = initContents(this.name, this.count); - this.describeOne = function(verbose=true) { - var size = random_desc(["little","large","prosperous","run-down"], (verbose ? 0.5 : 0)); - var name = random_desc(["ranch","farm","ranch","dairy farm","cattle farm","ranch","farm"], 1); - return merge_desc([size,name]); + this.describeOne = function (verbose = true) { + var size = random_desc(["little", "large", "prosperous", "run-down"], (verbose ? 0.5 : 0)); + var name = random_desc(["ranch", "farm", "ranch", "dairy farm", "cattle farm", "ranch", "farm"], 1); + return merge_desc([size, name]); }; - this.describe = function(verbose=true) { + this.describe = function (verbose = true) { return defaultDescribe(verbose, this); } } @@ -1477,11 +1476,11 @@ function Ranch(count = 1) { function Airstrip(count = 1) { this.name = "Airstrip"; - copy_defaults(this,new DefaultEntity()); + copy_defaults(this, new DefaultEntity()); this.count = count; - this.contents = initContents(this.name,this.count); + this.contents = initContents(this.name, this.count); - this.describe = function(verbose=true) { + this.describe = function (verbose = true) { return defaultDescribe(verbose, this, "community"); } } @@ -1489,11 +1488,11 @@ function Airstrip(count = 1) { function Airport(count = 1) { this.name = "Airport"; - copy_defaults(this,new DefaultEntity()); + copy_defaults(this, new DefaultEntity()); this.count = count; - this.contents = initContents(this.name,this.count); + this.contents = initContents(this.name, this.count); - this.describe = function(verbose=true) { + this.describe = function (verbose = true) { return defaultDescribe(verbose, this, "community"); } } @@ -1501,11 +1500,11 @@ function Airport(count = 1) { function Town(count = 1) { this.name = "Town"; - copy_defaults(this,new DefaultEntity()); + copy_defaults(this, new DefaultEntity()); this.count = count; - this.contents = initContents(this.name,this.count); + this.contents = initContents(this.name, this.count); - this.describe = function(verbose=true) { + this.describe = function (verbose = true) { return defaultDescribe(verbose, this, "community"); } } @@ -1513,11 +1512,11 @@ function Town(count = 1) { function City(count = 1) { this.name = "City"; - copy_defaults(this,new DefaultEntity()); + copy_defaults(this, new DefaultEntity()); this.count = count; - this.contents = initContents(this.name,this.count); + this.contents = initContents(this.name, this.count); - this.describe = function(verbose=true) { + this.describe = function (verbose = true) { return defaultDescribe(verbose, this, "community"); } } @@ -1525,11 +1524,11 @@ function City(count = 1) { function Continent(count = 1) { this.name = "Continent"; - copy_defaults(this,new DefaultEntity()); + copy_defaults(this, new DefaultEntity()); this.count = count; - this.contents = initContents(this.name,this.count); + this.contents = initContents(this.name, this.count); - this.describe = function(verbose=true) { + this.describe = function (verbose = true) { return defaultDescribe(verbose, this, "community"); } } @@ -1537,11 +1536,11 @@ function Continent(count = 1) { function Planet(count = 1) { this.name = "Planet"; - copy_defaults(this,new DefaultEntity()); + copy_defaults(this, new DefaultEntity()); this.count = count; - this.contents = initContents(this.name,this.count); + this.contents = initContents(this.name, this.count); - this.describe = function(verbose=true) { + this.describe = function (verbose = true) { return defaultDescribe(verbose, this, "community"); } } @@ -1549,11 +1548,11 @@ function Planet(count = 1) { function Star(count = 1) { this.name = "Star"; - copy_defaults(this,new DefaultEntity()); + copy_defaults(this, new DefaultEntity()); this.count = count; - this.contents = initContents(this.name,this.count); + this.contents = initContents(this.name, this.count); - this.describe = function(verbose = true) { + this.describe = function (verbose = true) { return (this.count == 1 ? "a star" : this.count + " stars"); }; } @@ -1561,11 +1560,11 @@ function Star(count = 1) { function SolarSystem(count = 1) { this.name = "Solar System"; - copy_defaults(this,new DefaultEntity()); + copy_defaults(this, new DefaultEntity()); this.count = count; - this.contents = initContents(this.name,this.count); + this.contents = initContents(this.name, this.count); - this.describe = function(verbose=true) { + this.describe = function (verbose = true) { return defaultDescribe(verbose, this, "celestial"); } } @@ -1573,11 +1572,11 @@ function SolarSystem(count = 1) { function Galaxy(count = 1) { this.name = "Galaxy"; - copy_defaults(this,new DefaultEntity()); + copy_defaults(this, new DefaultEntity()); this.count = count; - this.contents = initContents(this.name,this.count); + this.contents = initContents(this.name, this.count); - this.describe = function(verbose=true) { + this.describe = function (verbose = true) { return defaultDescribe(verbose, this, "celestial"); } } @@ -1585,11 +1584,11 @@ function Galaxy(count = 1) { function Cluster(count = 1) { this.name = "Cluster"; - copy_defaults(this,new DefaultEntity()); + copy_defaults(this, new DefaultEntity()); this.count = count; - this.contents = initContents(this.name,this.count); + this.contents = initContents(this.name, this.count); - this.describe = function(verbose=true) { + this.describe = function (verbose = true) { return defaultDescribe(verbose, this, "celestial"); } } @@ -1597,11 +1596,11 @@ function Cluster(count = 1) { function Universe(count = 1) { this.name = "Universe"; - copy_defaults(this,new DefaultEntity()); + copy_defaults(this, new DefaultEntity()); this.count = count; - this.contents = initContents(this.name,this.count); + this.contents = initContents(this.name, this.count); - this.describe = function(verbose=true) { + this.describe = function (verbose = true) { return defaultDescribe(verbose, this, "celestial"); } } @@ -1609,11 +1608,11 @@ function Universe(count = 1) { function Multiverse(count = 1) { this.name = "Multiverse"; - copy_defaults(this,new DefaultEntity()); + copy_defaults(this, new DefaultEntity()); this.count = count; - this.contents = initContents(this.name,this.count); + this.contents = initContents(this.name, this.count); - this.describe = function(verbose=true) { + this.describe = function (verbose = true) { return defaultDescribe(verbose, this, "celestial"); } } @@ -1621,11 +1620,11 @@ function Multiverse(count = 1) { function Soldier(count = 1) { this.name = "Soldier"; - copy_defaults(this,new DefaultEntity()); + copy_defaults(this, new DefaultEntity()); this.count = count; - this.contents = initContents(this.name,this.count); + this.contents = initContents(this.name, this.count); - this.describe = function(verbose=true) { + this.describe = function (verbose = true) { return defaultDescribe(verbose, this, "military"); } } @@ -1633,11 +1632,11 @@ function Soldier(count = 1) { function Tank(count = 1) { this.name = "Tank"; - copy_defaults(this,new DefaultEntity()); + copy_defaults(this, new DefaultEntity()); this.count = count; - this.contents = initContents(this.name,this.count); + this.contents = initContents(this.name, this.count); - this.describe = function(verbose=true) { + this.describe = function (verbose = true) { return defaultDescribe(verbose, this, "generic vehicle"); } } @@ -1645,11 +1644,11 @@ function Tank(count = 1) { function Artillery(count = 1) { this.name = "Artillery"; - copy_defaults(this,new DefaultEntity()); + copy_defaults(this, new DefaultEntity()); this.count = count; - this.contents = initContents(this.name,this.count); + this.contents = initContents(this.name, this.count); - this.describe = function(verbose=true) { + this.describe = function (verbose = true) { return defaultDescribe(verbose, this, "generic vehicle"); } } @@ -1657,11 +1656,11 @@ function Artillery(count = 1) { function MilitaryHelicopter(count = 1) { this.name = "Military Helicopter"; - copy_defaults(this,new DefaultEntity()); + copy_defaults(this, new DefaultEntity()); this.count = count; - this.contents = initContents(this.name,this.count); + this.contents = initContents(this.name, this.count); - this.describe = function(verbose=true) { + this.describe = function (verbose = true) { return defaultDescribe(verbose, this, "generic vehicle"); } } @@ -1669,11 +1668,11 @@ function MilitaryHelicopter(count = 1) { function Micro(count = 1) { this.name = "Micro"; - copy_defaults(this,new DefaultEntity()); + copy_defaults(this, new DefaultEntity()); this.count = count; - this.contents = initContents(this.name,this.count); + this.contents = initContents(this.name, this.count); - this.describe = function(verbose=true) { + this.describe = function (verbose = true) { return defaultDescribe(verbose, this); } } @@ -1681,102 +1680,102 @@ function Micro(count = 1) { function Macro(count = 1) { this.name = "Macro"; - copy_defaults(this,new DefaultEntity()); + copy_defaults(this, new DefaultEntity()); this.count = count; - this.contents = initContents(this.name,this.count); + this.contents = initContents(this.name, this.count); - this.describe = function(verbose=true) { + this.describe = function (verbose = true) { return defaultDescribe(verbose, this); } } function Squad(count = 1) { - this.name = "Squad"; - copy_defaults(this,new DefaultEntity()); - this.count = count; - this.contents = initContents(this.name,this.count); + this.name = "Squad"; + copy_defaults(this, new DefaultEntity()); + this.count = count; + this.contents = initContents(this.name, this.count); - this.describe = function(verbose=true) { - return defaultDescribe(verbose, this, "military"); - } + this.describe = function (verbose = true) { + return defaultDescribe(verbose, this, "military"); } +} function Platoon(count = 1) { - this.name = "Platoon"; - copy_defaults(this,new DefaultEntity()); - this.count = count; - this.contents = initContents(this.name,this.count); + this.name = "Platoon"; + copy_defaults(this, new DefaultEntity()); + this.count = count; + this.contents = initContents(this.name, this.count); - this.describe = function(verbose=true) { - return defaultDescribe(verbose, this, "military"); - } + this.describe = function (verbose = true) { + return defaultDescribe(verbose, this, "military"); } +} function Company(count = 1) { - this.name = "Company"; - copy_defaults(this,new DefaultEntity()); - this.count = count; - this.contents = initContents(this.name,this.count); + this.name = "Company"; + copy_defaults(this, new DefaultEntity()); + this.count = count; + this.contents = initContents(this.name, this.count); - this.describe = function(verbose=true) { - return defaultDescribe(verbose, this, "military"); - } + this.describe = function (verbose = true) { + return defaultDescribe(verbose, this, "military"); } +} function Battalion(count = 1) { - this.name = "Battalion"; - copy_defaults(this,new DefaultEntity()); - this.count = count; - this.contents = initContents(this.name,this.count); + this.name = "Battalion"; + copy_defaults(this, new DefaultEntity()); + this.count = count; + this.contents = initContents(this.name, this.count); - this.describe = function(verbose=true) { - return defaultDescribe(verbose, this, "military"); - } + this.describe = function (verbose = true) { + return defaultDescribe(verbose, this, "military"); } +} function Brigade(count = 1) { - this.name = "Brigade"; - copy_defaults(this,new DefaultEntity()); - this.count = count; - this.contents = initContents(this.name,this.count); + this.name = "Brigade"; + copy_defaults(this, new DefaultEntity()); + this.count = count; + this.contents = initContents(this.name, this.count); - this.describe = function(verbose=true) { - return defaultDescribe(verbose, this, "military"); - } + this.describe = function (verbose = true) { + return defaultDescribe(verbose, this, "military"); } +} function Division(count = 1) { - this.name = "Division"; - copy_defaults(this,new DefaultEntity()); - this.count = count; - this.contents = initContents(this.name,this.count); + this.name = "Division"; + copy_defaults(this, new DefaultEntity()); + this.count = count; + this.contents = initContents(this.name, this.count); - this.describe = function(verbose=true) { - return defaultDescribe(verbose, this, "military"); - } + this.describe = function (verbose = true) { + return defaultDescribe(verbose, this, "military"); } +} function TankDivision(count = 1) { - this.name = "Tank Division"; - copy_defaults(this,new DefaultEntity()); - this.count = count; - this.contents = initContents(this.name,this.count); + this.name = "Tank Division"; + copy_defaults(this, new DefaultEntity()); + this.count = count; + this.contents = initContents(this.name, this.count); - this.describe = function(verbose=true) { - return defaultDescribe(verbose, this, "military"); - } + this.describe = function (verbose = true) { + return defaultDescribe(verbose, this, "military"); } +} function Army(count = 1) { - this.name = "Army"; - copy_defaults(this,new DefaultEntity()); - this.count = count; - this.contents = initContents(this.name,this.count); + this.name = "Army"; + copy_defaults(this, new DefaultEntity()); + this.count = count; + this.contents = initContents(this.name, this.count); - this.describe = function(verbose=true) { - return defaultDescribe(verbose, this, "military"); - } + this.describe = function (verbose = true) { + return defaultDescribe(verbose, this, "military"); } +} @@ -1790,4 +1789,4 @@ function Army(count = 1) { //biome magic also set it so that you can't roll your existing biome //chemical factory //grand army - //armada \ No newline at end of file + //armada diff --git a/sounds.js b/sounds.js index 73cb6f5..00bc142 100644 --- a/sounds.js +++ b/sounds.js @@ -2,37 +2,37 @@ let last_used = {}; let sounds = { "crush": [["Thump.", "Thoomp."], ["Crunch."], ["Crrruunch."], ["CRUNCH!"], ["CRRRUNNCH!"], ["SKRRRRUNCH!"], ["SKRRRRRRRSMASH!"]], - "swallow": [["Ulp.", "Glp.", "Slurp."], ["Glrph.", "Glurk."], ["Gluuuurrkph!", "Glurp - GLK."],["GLRP!", "GULP!", "GLUK!"],["GLRRRRPKH!", "GLUUUURK!"],["GLUUUUURRPKH!", "GLOOOORPH-GLK!"]], + "swallow": [["Ulp.", "Glp.", "Slurp."], ["Glrph.", "Glurk."], ["Gluuuurrkph!", "Glurp - GLK."], ["GLRP!", "GULP!", "GLUK!"], ["GLRRRRPKH!", "GLUUUURK!"], ["GLUUUUURRPKH!", "GLOOOORPH-GLK!"]], "drip": - [["Drip."],["Dribble"],["Drip-sploosh"],["Dribble-SPLOOSH!"],["SPLOOOOOSH!!"]], - "liquid": [["Sploosh."],["Gush!"],["SPLOOSH!"],["SPLOOSH!"],["SPLOOOOOOSH!"]], - "insert": [["Slp.", "Shlk."],["Shlp.", "Shlrp."],["Shlllp."],["SHLP!", "SQUELCH!"],["SHLLLLRP!"]], - "drop": [["Thump."],["Thump!"],["Splat."],["Splat!"],["SPLAT!"]], - "belch": [["Burp.", "Urp."],["Urph.", "Burph."],["Urrrrrph."],["UuuuuuuRRRRRPPHHHhhhh."],["UUUURRRRPHH!"],["BUUUURRRRRRRRPPPHHH!"]], + [["Drip."], ["Dribble"], ["Drip-sploosh"], ["Dribble-SPLOOSH!"], ["SPLOOOOOSH!!"]], + "liquid": [["Sploosh."], ["Gush!"], ["SPLOOSH!"], ["SPLOOSH!"], ["SPLOOOOOOSH!"]], + "insert": [["Slp.", "Shlk."], ["Shlp.", "Shlrp."], ["Shlllp."], ["SHLP!", "SQUELCH!"], ["SHLLLLRP!"]], + "drop": [["Thump."], ["Thump!"], ["Splat."], ["Splat!"], ["SPLAT!"]], + "belch": [["Burp.", "Urp."], ["Urph.", "Burph."], ["Urrrrrph."], ["UuuuuuuRRRRRPPHHHhhhh."], ["UUUURRRRPHH!"], ["BUUUURRRRRRRRPPPHHH!"]], "fart": - [["Pft."],["Pffft."],["Pfffffbt."],["Frrrrrrrt."],["FRRRRRRRRPBBT!"]], + [["Pft."], ["Pffft."], ["Pfffffbt."], ["Frrrrrrrt."], ["FRRRRRRRRPBBT!"]], "scat": - [["Clench."],["Squeeeeeze."],["Squeeeeeeeeeeeze."],["Sqlllllch."],["SQLLLLLLCH!"]], + [["Clench."], ["Squeeeeeze."], ["Squeeeeeeeeeeeze."], ["Sqlllllch."], ["SQLLLLLLCH!"]], "digest": - [["Grrgle."],["Grrrrgle"],["Grrrrlglorp."],["GrrrrGLRRRLPH!"],["GRRRRRLGPRLHK!"]], + [["Grrgle."], ["Grrrrgle"], ["Grrrrlglorp."], ["GrrrrGLRRRLPH!"], ["GRRRRRLGPRLHK!"]], "goo": - [["Splat."], ["Squish."], ["Squish!"], ["SQLCH!"], ["SQLLLLRCH!"], ["SQQQQUEEEEELLCH!"]], + [["Splat."], ["Squish."], ["Squish!"], ["SQLCH!"], ["SQLLLLRCH!"], ["SQQQQUEEEEELLCH!"]], "vomit": - [["Hurk."], ["Hurrk."], ["Bleugh."], ["Bleugh!"], ["Bleeeugh!"], ["BLEEEUGHK!"]], + [["Hurk."], ["Hurrk."], ["Bleugh."], ["Bleugh!"], ["Bleeeugh!"], ["BLEEEUGHK!"]], "breath": - [["Woosh."],["Fwoosh."],["FWOOSH."],["FWOOSH!"],["FWOOOOOOSH!"]], + [["Woosh."], ["Fwoosh."], ["FWOOSH."], ["FWOOSH!"], ["FWOOOOOOSH!"]], "chew": - [["Snap.", "Crack."],["Crunch."],["Crack!"],["CRUNCH!"],["CRRRUNCH!"]], + [["Snap.", "Crack."], ["Crunch."], ["Crack!"], ["CRUNCH!"], ["CRRRUNCH!"]], "magic": - [["Zap."],["Zap!"],["Fwoosh!"]] + [["Zap."], ["Zap!"], ["Fwoosh!"]] }; function pickByMass(name, mass) { let list = sounds[name]; - let index = Math.floor(Math.log10(mass/100)/2); + let index = Math.floor(Math.log10(mass / 100) / 2); index = Math.max(index, 0); - choice = index < list.length ? list[index] : list[list.length-1]; + choice = index < list.length ? list[index] : list[list.length - 1]; let subindex = Math.floor(Math.random() * Math.floor(choice.length)); @@ -47,5 +47,5 @@ function pickByMass(name, mass) { } function getSound(name, mass) { - return "" + pickByMass(name,mass) + ""; + return "" + pickByMass(name, mass) + ""; } diff --git a/units.js b/units.js index 1bfe3e1..3330bf8 100644 --- a/units.js +++ b/units.js @@ -1,10 +1,10 @@ 'use strict'; -function round(number,precision=3) { - return Math.round(number*Math.pow(10,precision)) / Math.pow(10,precision); +function round(number, precision = 3) { + return Math.round(number * Math.pow(10, precision)) / Math.pow(10, precision); } -function numberRough(value,suffix="") { +function numberRough(value, suffix = "") { if (value == 1) { return "a single"; } else if (value < 5) { @@ -15,7 +15,7 @@ function numberRough(value,suffix="") { return "a dozen"; } else { var scale = Math.floor(Math.log10(value)); - switch(scale) { + switch (scale) { case 1: return "dozens " + suffix; case 2: return "hundreds " + suffix; default: @@ -26,9 +26,9 @@ function numberRough(value,suffix="") { else if (scale % 3 == 2) prefix = "hundreds of "; - let order = Math.floor(scale/3); + let order = Math.floor(scale / 3); - switch(order) { + switch (order) { case 1: return prefix + "thousands " + suffix; case 2: return prefix + "millions " + suffix; case 3: return prefix + "billions " + suffix; @@ -45,12 +45,12 @@ function fixedIfDecimal(num, fixed) { if (fixed === undefined) return num.toString(); else; - return num.toFixed(fixed); + return num.toFixed(fixed); } -function number(value, type="full", fixed) { +function number(value, type = "full", fixed) { var val = parseFloat(value); - switch(type) { + switch (type) { case "full": if (Math.log(value) / Math.log(10) < 10) { return fixedIfDecimal(val, fixed); @@ -67,7 +67,7 @@ function number_words(value) { if (scale < 0) { return fixedIfDecimal(value, fixed); } - switch(scale) { + switch (scale) { case 0: return value.toString(); case 1: return Math.round(value / 1e3).toString() + " thousand"; case 2: return Math.round(value / 1e6).toString() + " million"; @@ -99,7 +99,7 @@ function number_words_repeated(value, fixed) { var scale = Math.floor(Math.log(value) / Math.log(1000)); if (scale < 0) return fixedIfDecimal(value, fixed); - switch(scale) { + switch (scale) { case 0: return fixedIfDecimal(value, fixed); case 1: return Math.round(value / 1e3).toString() + " thousand"; case 2: return Math.round(value / 1e6).toString() + " million"; @@ -120,7 +120,7 @@ function number_prefix(value, fixed) { var scale = Math.floor(Math.log(value) / Math.log(1000)); if (scale < 0) return fixedIfDecimal(value, fixed); - switch(scale) { + switch (scale) { case 0: return fixedIfDecimal(value, fixed); case 1: return Math.round(value / 1e3).toString() + "K"; case 2: return Math.round(value / 1e6).toString() + "M"; @@ -133,8 +133,8 @@ function number_prefix(value, fixed) { } } -function mass(kg, type="metric", singular=false) { - switch(type) { +function mass(kg, type = "metric", singular = false) { + switch (type) { case "metric": return metricMass(kg, singular); case "SI": return metricSymMass(kg, singular); case "customary": return customaryMass(kg, singular); @@ -143,8 +143,8 @@ function mass(kg, type="metric", singular=false) { } } -function length(m, type="metric", singular=false) { - switch(type) { +function length(m, type = "metric", singular = false) { + switch (type) { case "metric": return metricLength(m, singular); case "SI": return metricSymLength(m, singular); case "customary": return customaryLength(m, singular); @@ -153,8 +153,8 @@ function length(m, type="metric", singular=false) { } } -function area(m2, type="metric", singular=false) { - switch(type) { +function area(m2, type = "metric", singular = false) { + switch (type) { case "metric": return metricArea(m2, singular); case "SI": return metricSymArea(m2, singular); case "customary": return customaryArea(m2, singular); @@ -163,8 +163,8 @@ function area(m2, type="metric", singular=false) { } } -function volume(m3, type="metric", singular=false) { - switch(type) { +function volume(m3, type = "metric", singular = false) { + switch (type) { case "metric": return metricVolume(m3, singular); case "SI": return metricSymVolume(m3, singular); case "customary": return customaryVolume(m3, singular); @@ -173,442 +173,442 @@ function volume(m3, type="metric", singular=false) { } } -function metricMass(kg, singular=false) { - if (kg < 1/1000) { - let mass = round(kg * 1e6,0); +function metricMass(kg, singular = false) { + if (kg < 1 / 1000) { + let mass = round(kg * 1e6, 0); return mass + (singular || mass == 1 ? " milligram" : " milligrams"); } else if (kg < 1) { - let mass = round(kg * 1000,0); + let mass = round(kg * 1000, 0); return mass + (singular || mass == 1 ? " gram" : " grams"); } else if (kg < 5000) { - let mass = round(kg,0); + let mass = round(kg, 0); return mass + (singular || mass == 1 ? " kilogram" : " kilograms"); } else if (kg < 5000000) { - let mass = round(kg / 1000,1); + let mass = round(kg / 1000, 1); return mass + (singular || mass == 1 ? " metric ton" : " metric tons"); } else if (kg < 5000000000) { - let mass = round(kg / 1000000,1); + let mass = round(kg / 1000000, 1); return mass + (singular || mass == 1 ? " kiloton" : " kilotons"); } else if (kg < 5000000000000) { - let mass = round(kg / 1000000000,1); + let mass = round(kg / 1000000000, 1); return mass + (singular || mass == 1 ? " megaton" : " megatons"); } else { - let mass = round(kg / 1000000000000,1); + let mass = round(kg / 1000000000000, 1); return mass + (singular || mass == 1 ? " gigaton" : " gigatons"); } } -function metricSymMass(kg, singular=false) { - if (kg < 1/1000) { - let mass = round(kg * 1e6,0); +function metricSymMass(kg, singular = false) { + if (kg < 1 / 1000) { + let mass = round(kg * 1e6, 0); return mass + " mg"; } else if (kg < 1) { - let mass = round(kg * 1000,0); + let mass = round(kg * 1000, 0); return mass + " g"; } else if (kg < 5000) { - let mass = round(kg,0); + let mass = round(kg, 0); return mass + " kg"; } else if (kg < 5000000) { - let mass = round(kg / 1000,1); + let mass = round(kg / 1000, 1); return mass + " t"; } else if (kg < 5000000000) { - let mass = round(kg / 1000000,1); + let mass = round(kg / 1000000, 1); return mass + " kt"; } else if (kg < 5000000000000) { - let mass = round(kg / 1000000000,1); + let mass = round(kg / 1000000000, 1); return mass + " mt"; } else { - let mass = round(kg / 1000000000000,1); + let mass = round(kg / 1000000000000, 1); return mass + " gt"; } } -function customaryMass(kg, singular=false) { +function customaryMass(kg, singular = false) { let lbs = kg * 2.2; if (lbs < 1) { - let mass = round(lbs * 16,0); + let mass = round(lbs * 16, 0); return mass + (singular || mass == 1 ? " ounce" : " ounces"); } else if (lbs < 2000) { - let mass = round(lbs,0); + let mass = round(lbs, 0); return mass + (singular || mass == 1 ? " pound" : " pounds"); } else { - let mass = round(lbs / 2000,1); + let mass = round(lbs / 2000, 1); return mass + (singular || mass == 1 ? " ton" : " tons"); } } -function customarySymMass(kg, singular=false) { +function customarySymMass(kg, singular = false) { let lbs = kg * 2.2; if (lbs < 1) { - let mass = round(lbs * 16,0); + let mass = round(lbs * 16, 0); return mass + " oz"; } else if (lbs < 2000) { - let mass = round(lbs,0); + let mass = round(lbs, 0); return mass + (singular || mass == 1 ? " lb" : " lbs"); } else { - let mass = round(lbs / 2000,1); + let mass = round(lbs / 2000, 1); return mass + (singular || mass == 1 ? " ton" : " tons"); } } -function approxMass(kg, singular=false) { +function approxMass(kg, singular = false) { if (kg < 4500) { - let mass = round(kg/1000,2); + let mass = round(kg / 1000, 2); return mass + (singular || mass == 1 ? "car" : " cars"); } else if (kg < 54431) { - let mass = round(kg/6000,2); + let mass = round(kg / 6000, 2); 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); + let mass = round(kg / 54431.1, 2); return mass + (singular || mass == 1 ? " tank" : " tanks"); } else if (kg < 5.2e10) { - let mass = round(kg/9.7e7,2); + let mass = round(kg / 9.7e7, 2); return mass + (singular || mass == 1 ? " aircraft carrier" : " aircraft carriers"); } else if (kg < 1.5e13) { - let mass = round(kg/5.2e10,2); - return mass + (singular || mass == 1 ? " Great Wall of China" : " Great Wall Of Chinas"); + let mass = round(kg / 5.2e10, 2); + return mass + (singular || mass == 1 ? " Great Wall of China" : " Great Wall Of Chinas"); } else if (kg < 5e21) { - let mass = round(kg/1.5e15,2); + let mass = round(kg / 1.5e15, 2); return mass + (singular || mass == 1 ? " New York City" : " 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.6e20,2); + let mass = round(kg / 4.6e20, 2); return mass + (singular || mass == 1 ? " Australia" : " 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/6e24,2); - return mass + (singular || mass == 1 ? " Earth" :" Earths"); -} else if (kg < 1.4e39) { - let mass = round(kg/2e30,2); - return mass + (singular || mass == 1 ? " Sun" :" Suns"); + } else if (kg < 2e27) { + let mass = round(kg / 6e24, 2); + return mass + (singular || mass == 1 ? " Earth" : " Earths"); + } else if (kg < 1.4e39) { + let mass = round(kg / 2e30, 2); + return mass + (singular || mass == 1 ? " Sun" : " Suns"); } else { - let mass = round(kg/1.4e42,2); - return mass + (singular || mass == 1 ? " Milky Way" :" Milky Ways"); + let mass = round(kg / 1.4e42, 2); + return mass + (singular || mass == 1 ? " Milky Way" : " Milky Ways"); } } -function metricLength(m, singular=false) { - if (m < 1/100) { - let length = round(m * 1000,2); +function metricLength(m, singular = false) { + if (m < 1 / 100) { + let length = round(m * 1000, 2); return length + (singular || length == 1 ? " millimeter" : " millimeters"); } else if (m < 1) { - let length = round(m * 100,0); + let length = round(m * 100, 0); return length + (singular || length == 1 ? " centimeter" : " centimeters"); } else if (m < 500) { - let length = round(m,2); + let length = round(m, 2); return length + (singular || length == 1 ? " meter" : " meters"); } else if (m < 1e12) { - let length = round(m / 1000,1); + let length = round(m / 1000, 1); return length + (singular || length == 1 ? " kilometer" : " kilometers"); } else if (m < 1e15) { - let length = round(m / 1e6,1); + let length = round(m / 1e6, 1); return length + (singular || length == 1 ? " megameter" : " megameters"); } else if (m < 1e18) { - let length = round(m / 1e9,1); + let length = round(m / 1e9, 1); return length + (singular || length == 1 ? " gigameter" : " gigameters"); } else { - let length = round(m / 1e12,1); + let length = round(m / 1e12, 1); return length + (singular || length == 1 ? " terameter" : " terameters"); } } -function metricSymLength(m, singular=false) { - if (m < 1/100) { - let length = round(m * 1000,2); +function metricSymLength(m, singular = false) { + if (m < 1 / 100) { + let length = round(m * 1000, 2); return length + " mm"; } else if (m < 1) { - let length = round(m * 100,0); + let length = round(m * 100, 0); return length + " cm"; } else if (m < 500) { - let length = round(m,2); + let length = round(m, 2); return length + " m"; } else { - let length = round(m / 1000,1); + let length = round(m / 1000, 1); return length + " km"; } } -function customaryLength(m, singular=false) { +function customaryLength(m, singular = false) { let ft = m * 3.28084; if (ft < 1) { - let length = round(ft * 12,0); + let length = round(ft * 12, 0); return length + (singular || length == 1 ? " inch" : " inches"); } else if (ft < 5280) { - let end = customaryLength((ft - Math.floor(ft))/3.28084, singular); + let end = customaryLength((ft - Math.floor(ft)) / 3.28084, singular); let length = Math.floor(ft); return length + (singular || length == 1 ? " foot" : " feet") + " " + end; } else { - let length = round(ft/5280,1); + let length = round(ft / 5280, 1); return length + (singular || length == 1 ? " mile" : " miles"); } } -function customarySymLength(m, singular=false) { +function customarySymLength(m, singular = false) { let ft = m * 3.28084; if (ft < 1) { - let length = round(ft * 12,0); + let length = round(ft * 12, 0); return length + "\""; } else if (ft < 5280) { - let end = customarySymLength((ft - Math.floor(ft))/3.28084, singular); + let end = customarySymLength((ft - Math.floor(ft)) / 3.28084, singular); let length = Math.floor(ft); return length + "'" + " " + end; } else { - let length = round(ft/5280,1); + let length = round(ft / 5280, 1); return length + " mi"; } } -function approxLength(m, singular=false) { +function approxLength(m, singular = false) { if (m < 25) { - let length = round(m/1.9,1); + let length = round(m / 1.9, 1); return length + (singular || length == 1 ? " person" : " people"); } else if (m < 350) { - let length = round(m/49,1); + let length = round(m / 49, 1); return length + (singular || length == 1 ? " football field" : " football fields"); } else if (m < 20000) { - let length = round(m/449,1); + let length = round(m / 449, 1); return length + (singular || length == 1 ? " Empire State Building" : " Empire State Buildings"); } else if (m < 2000000) { - let length = round(m/80467.2,1); + let length = round(m / 80467.2, 1); return length + (singular || length == 1 ? " Panama Canal" : " Panama Canals"); - } else if (m < 3474574*2) { - let length = round(m/3474574,1); + } else if (m < 3474574 * 2) { + let length = round(m / 3474574, 1); return length + (singular || length == 1 ? " Moon" : " moons"); - } else if (m < 12.742e6*130) { - let length = round(m/12.742e6,2); + } else if (m < 12.742e6 * 130) { + let length = round(m / 12.742e6, 2); return length + (singular || length == 1 ? " Earth" : " earths"); } else if (m < 149.6e12) { - let length = round(m/149.6e9,3); + let length = round(m / 149.6e9, 3); return length + (singular || length == 1 ? " AU" : " AUs"); } else if (m < 9.4607e22) { - let length = round(m/9.4607e15,3); + let length = round(m / 9.4607e15, 3); return length + (singular || length == 1 ? " light year" : " light years"); } else if (m < 3e19) { - let length = round(m/3.0856776e16,3); + let length = round(m / 3.0856776e16, 3); return length + (singular || length == 1 ? " parsec" : " parsecs"); } else if (m < 3e22) { - let length = round(m/3.0856776e19,3); + let length = round(m / 3.0856776e19, 3); return length + (singular || length == 1 ? " kiloparsec" : " kiloparsecs"); } else if (m < 3e25) { - let length = round(m/3.0856776e22,3); + let length = round(m / 3.0856776e22, 3); return length + (singular || length == 1 ? " megaparsec" : " megaparsecs"); } else if (m < 3e28) { - let length = round(m/3.0856776e25,3); + let length = round(m / 3.0856776e25, 3); return length + (singular || length == 1 ? " gigaparsec" : " gigaparsecss"); } else { - let length = round(m/3.0856776e28,3); + let length = round(m / 3.0856776e28, 3); return length + (singular || length == 1 ? " teraparsec" : " teraparsecs"); } } -function metricArea(m2, singular=false) { - if (m2 < 1/10) { - let area = round(m2 * 10000,2); +function metricArea(m2, singular = false) { + if (m2 < 1 / 10) { + let area = round(m2 * 10000, 2); return area + (singular || area == 1 ? " square centimeter" : " square centimeters"); } else if (m2 < 100000) { - let area = round(m2,2); + let area = round(m2, 2); return area + (singular || area == 1 ? " square meter" : " square meters"); } else { - let area = round(m2 / 1e6,2); + let area = round(m2 / 1e6, 2); return area + (singular || area == 1 ? " kilometer" : " square kilometers"); } } -function metricSymArea(m2, singular=false) { - if (m2 < 1/10) { - let area = round(m2 * 10000,2); +function metricSymArea(m2, singular = false) { + if (m2 < 1 / 10) { + let area = round(m2 * 10000, 2); return area + " cm" + "2".sup(); } else if (m2 < 100000) { - let area = round(m2,2); + let area = round(m2, 2); return area + " m" + "2".sup(); } else { - let area = round(m2 / 1e6,2); + let area = round(m2 / 1e6, 2); return area + " km" + "2".sup(); } } -function customaryArea(m2, singular=false) { +function customaryArea(m2, singular = false) { let ft2 = m2 * 3.28084 * 3.28084; if (ft2 < 1) { - let area = round(ft2 * 144,0); + let area = round(ft2 * 144, 0); return area + (singular || area == 1 ? " square inch" : " square inches"); } else if (ft2 < 5280 * 5280 / 10) { - let area = round(ft2,1); + let area = round(ft2, 1); return area + (singular || area == 1 ? " square foot" : " square feet"); } else { - let area = round(ft2 / 5280 / 5280,1); + let area = round(ft2 / 5280 / 5280, 1); return area + (singular || area == 1 ? " square mile" : " square miles"); } } -function customarySymArea(m2, singular=false) { - if (m2 < 1/10) { - let area = round(m2 * 10000,2); +function customarySymArea(m2, singular = false) { + if (m2 < 1 / 10) { + let area = round(m2 * 10000, 2); return area + " in" + "2".sup(); } else if (m2 < 100000) { - let area = round(m2,2); + let area = round(m2, 2); return area + " ft" + "2".sup(); } else { - let area = round(m2 / 1e6,2); + let area = round(m2 / 1e6, 2); return area + " mi" + "2".sup(); } } -function approxArea(m2, singular=false) { +function approxArea(m2, singular = false) { if (m2 < 20000) { - let area = round(m2/5341.85,1); + let area = round(m2 / 5341.85, 1); return area + (singular || area == 1 ? " football field" : " football fields"); } else if (m2 < 9.36e+15) { - let area = round(m2/10117.1,1); + let area = round(m2 / 10117.1, 1); return area + (singular || area == 1 ? " block" : " blocks"); } else if (m2 < 3.7920361e+13) { - let area = round(m2/9.36e+8,1); + let area = round(m2 / 9.36e+8, 1); return area + (singular || area == 1 ? " city" : " cities"); } else if (m2 < 9.4800902e+18) { - let area = round(m2/9.4800902e+12,1); + let area = round(m2 / 9.4800902e+12, 1); return area + (singular || area == 1 ? " moon" : " moons"); } else if (m2 < 2.8118957330513e+42) { - let area = round(m2/6.4900004e+28,1); + let area = round(m2 / 6.4900004e+28, 1); return area + (singular || area == 1 ? " solar system" : " solar systems"); } else { - let area = round(m2/2.8118957330513e+42,1); + let area = round(m2 / 2.8118957330513e+42, 1); return area + (singular || area == 1 ? " milky way" : " milky ways"); } } -function metricVolume(m3, singular=false) { - if (m3 < 1/1000) { - let volume = round(m3*1e6, 0); +function metricVolume(m3, singular = false) { + if (m3 < 1 / 1000) { + let volume = round(m3 * 1e6, 0); return volume + (singular || volume == 1 ? " milliliter" : " milliliters"); } else if (m3 < 1) { - let volume = round(m3*1000, 1); + let volume = round(m3 * 1000, 1); return volume + (singular || volume == 1 ? " liter" : " liters"); } else if (m3 < 1000000) { let volume = round(m3, 0); return volume + (singular || volume == 1 ? " cubic meter" : " cubic meters"); - } else if (m3 < 1e12){ - let volume = round(m3/1e9, 3); + } else if (m3 < 1e12) { + let volume = round(m3 / 1e9, 3); return volume + (singular || volume == 1 ? " cubic kilometer" : " cubic kilometers"); } else { - let volume = round(m3/1e9, 0); + let volume = round(m3 / 1e9, 0); return volume + (singular || volume == 1 ? " cubic kilometer" : " cubic kilometers"); } } -function metricSymVolume(m3, singular=false) { - if (m3 < 1/1000) { - let volume = round(m3*1e6, 0); +function metricSymVolume(m3, singular = false) { + if (m3 < 1 / 1000) { + let volume = round(m3 * 1e6, 0); return volume + " mL"; } else if (m3 < 1) { - let volume = round(m3*1000, 1); + let volume = round(m3 * 1000, 1); return volume + " L"; } else if (m3 < 1000000) { let volume = round(m3, 0); return volume + " m" + "³"; - } else if (m3 < 1e12){ - let volume = round(m3/1e9, 3); + } else if (m3 < 1e12) { + let volume = round(m3 / 1e9, 3); return volume + " km" + "³"; } else { - let volume = round(m3/1e9, 0); + let volume = round(m3 / 1e9, 0); return volume + " km" + "³"; } } -function customaryVolume(m3, singular=false) { +function customaryVolume(m3, singular = false) { let gallons = m3 * 264.172; - if (gallons < 1/16) { - let volume = round(gallons*128,0); + if (gallons < 1 / 16) { + let volume = round(gallons * 128, 0); return volume + (singular || volume == 1 ? " fluid ounce" : " fluid ounces"); - } else if (gallons < 1/4) { - let volume = round(gallons*16,1); + } else if (gallons < 1 / 4) { + let volume = round(gallons * 16, 1); return volume + (singular || volume == 1 ? " cup" : " cups"); - } else if (gallons < 1/2) { - let volume = round(gallons*8,1); + } else if (gallons < 1 / 2) { + let volume = round(gallons * 8, 1); return volume + (singular || volume == 1 ? " pint" : " pints"); } else if (gallons < 1) { - let volume = round(gallons*4,1); + let volume = round(gallons * 4, 1); return volume + (singular || volume == 1 ? " quart" : " quarts"); } else if (gallons < 100) { - let volume = round(gallons,1); + let volume = round(gallons, 1); return volume + (singular || volume == 1 ? " gallon" : " gallons"); } else { - let volume = round(gallons,0); + let volume = round(gallons, 0); return volume + (singular || volume == 1 ? " gallon" : " gallons"); } } -function customarySymVolume(m3, singular=false) { +function customarySymVolume(m3, singular = false) { let gallons = m3 * 264.172; - if (gallons < 1/16) { - let volume = round(gallons*128,0); + if (gallons < 1 / 16) { + let volume = round(gallons * 128, 0); return volume + " fl oz"; - } else if (gallons < 1/4) { - let volume = round(gallons*16,1); + } else if (gallons < 1 / 4) { + let volume = round(gallons * 16, 1); return volume + (singular || volume == 1 ? " cp" : " cps"); - } else if (gallons < 1/2) { - let volume = round(gallons*8,1); + } else if (gallons < 1 / 2) { + let volume = round(gallons * 8, 1); return volume + " pt"; } else if (gallons < 1) { - let volume = round(gallons*4,1); + let volume = round(gallons * 4, 1); return volume + " qt"; } else if (gallons < 100) { - let volume = round(gallons,1); + let volume = round(gallons, 1); return volume + " g"; } else { - let volume = round(gallons,0); + let volume = round(gallons, 0); return volume + " g"; } } -function approxVolume(m3, singular=false) { - if (m3 < 2/10000) { - let volume = round(m3*4e5,0); +function approxVolume(m3, singular = false) { + if (m3 < 2 / 10000) { + let volume = round(m3 * 4e5, 0); return volume + (singular || volume == 1 ? " shot" : " shots"); } else if (m3 < .1) { - let volume = round(m3*2254,1); + let volume = round(m3 * 2254, 1); return volume + (singular || volume == 1 ? " glass" : " glasses"); } else if (m3 < 100) { - let volume = round(m3*2.64,1); + let volume = round(m3 * 2.64, 1); return volume + (singular || volume == 1 ? " bathtub" : " bathtubs"); } else if (m3 < 1e5) { - let volume = round(m3/1000,2); - return volume + (singular || volume == 1 ? " Olympic swimming pool" : " Olympic swimming pools"); + let volume = round(m3 / 1000, 2); + return volume + (singular || volume == 1 ? " Olympic swimming pool" : " Olympic swimming pools"); } else if (m3 < 1e9) { - let volume = round(m3/3.2e5,2); + let volume = round(m3 / 3.2e5, 2); return volume + (singular || volume == 1 ? " oil tanker" : " oil tankers"); } else if (m3 < 1e15) { - let volume = round(m3/1.8919e10,3); + let volume = round(m3 / 1.8919e10, 3); return volume + (singular || volume == 1 ? " Great Salt Lake" : " Great Salt Lakes"); - } else if (m3 < 1e20){ - let volume = round(m3/3.547e17, 3); - return volume + (singular || volume == 1 ? " ocean" : " oceans"); - } else if (m3 < 1e25){ - let volume = round(m3/1e21, 3); + } else if (m3 < 1e20) { + let volume = round(m3 / 3.547e17, 3); + return volume + (singular || volume == 1 ? " ocean" : " oceans"); + } else if (m3 < 1e25) { + let volume = round(m3 / 1e21, 3); return volume + (singular || volume == 1 ? " Earth" : " Earths"); } else { - let volume = round(m3/1.4e27, 3); - return volume + (singular || volume == 1 ? " Sun" : " Suns"); + let volume = round(m3 / 1.4e27, 3); + return volume + (singular || volume == 1 ? " Sun" : " Suns"); } } -function makeSphere(input=0, diameter=false) { +function makeSphere(input = 0, diameter = false) { if (diameter = true) { - input = input/2; + input = input / 2; } - return (4/3)*Math.PI*(Math.pow(input, 3)); + return (4 / 3) * Math.PI * (Math.pow(input, 3)); } -function breakSphere(input=0, diameter=false) { - let output = math.pow((3*input)/(4*Math.PI), 1/3) - if (diameter=true) { - output = output*2; +function breakSphere(input = 0, diameter = false) { + let output = math.pow((3 * input) / (4 * Math.PI), 1 / 3) + if (diameter = true) { + output = output * 2; } return output; }