diff --git a/shared/depricated/snippets_old/classfeature.gen.js b/shared/depricated/snippets_old/classfeature.gen.js new file mode 100644 index 0000000..2ca3abc --- /dev/null +++ b/shared/depricated/snippets_old/classfeature.gen.js @@ -0,0 +1,42 @@ +var _ = require('lodash'); + +module.exports = function(classname){ + + classname = classname || _.sample(['archivist', 'fancyman', 'linguist', 'fletcher', + 'notary', 'berserker-typist', 'fishmongerer', 'manicurist', 'haberdasher', 'concierge']) + + classname = classname.toLowerCase(); + + var hitDie = _.sample([4, 6, 8, 10, 12]); + + var abilityList = ["Strength", "Dexerity", "Constitution", "Wisdom", "Charisma", "Intelligence"]; + var skillList = ["Acrobatics ", "Animal Handling", "Arcana", "Athletics", "Deception", "History", "Insight", "Intimidation", "Investigation", "Medicine", "Nature", "Perception", "Performance", "Persuasion", "Religion", "Sleight of Hand", "Stealth", "Survival"]; + + + return [ + "## Class Features", + "As a " + classname + ", you gain the following class features", + "#### Hit Points", + "___", + "- **Hit Dice:** 1d" + hitDie + " per " + classname + " level", + "- **Hit Points at 1st Level:** " + hitDie + " + your Constitution modifier", + "- **Hit Points at Higher Levels:** 1d" + hitDie + " (or " + (hitDie/2 + 1) + ") + your Constitution modifier per " + classname + " level after 1st", + "", + "#### Proficiencies", + "___", + "- **Armor:** " + (_.sampleSize(["Light armor", "Medium armor", "Heavy armor", "Shields"], _.random(0,3)).join(', ') || "None"), + "- **Weapons:** " + (_.sampleSize(["Squeegee", "Rubber Chicken", "Simple weapons", "Martial weapons"], _.random(0,2)).join(', ') || "None"), + "- **Tools:** " + (_.sampleSize(["Artian's tools", "one musical instrument", "Thieve's tools"], _.random(0,2)).join(', ') || "None"), + "", + "___", + "- **Saving Throws:** " + (_.sampleSize(abilityList, 2).join(', ')), + "- **Skills:** Choose two from " + (_.sampleSize(skillList, _.random(4, 6)).join(', ')), + "", + "#### Equipment", + "You start with the following equipment, in addition to the equipment granted by your background:", + "- *(a)* a martial weapon and a shield or *(b)* two martial weapons", + "- *(a)* five javelins or *(b)* any simple melee weapon", + "- " + (_.sample(["10 lint fluffs", "1 button", "a cherished lost sock"])), + "\n\n\n" + ].join('\n'); +} diff --git a/shared/depricated/snippets_old/classtable.gen.js b/shared/depricated/snippets_old/classtable.gen.js new file mode 100644 index 0000000..649d85b --- /dev/null +++ b/shared/depricated/snippets_old/classtable.gen.js @@ -0,0 +1,114 @@ +var _ = require('lodash'); + +var features = [ + "Astrological Botany", + "Astrological Chemistry", + "Biochemical Sorcery", + "Civil Alchemy", + "Consecrated Biochemistry", + "Demonic Anthropology", + "Divinatory Mineralogy", + "Genetic Banishing", + "Hermetic Geography", + "Immunological Incantations", + "Nuclear Illusionism", + "Ritual Astronomy", + "Seismological Divination", + "Spiritual Biochemistry", + "Statistical Occultism", + "Police Necromancer", + "Sixgun Poisoner", + "Pharmaceutical Gunslinger", + "Infernal Banker", + "Spell Analyst", + "Gunslinger Corruptor", + "Torque Interfacer", + "Exo Interfacer", + "Gunpowder Torturer", + "Orbital Gravedigger", + "Phased Linguist", + "Mathematical Pharmacist", + "Plasma Outlaw", + "Malefic Chemist", + "Police Cultist" +]; + +var classnames = ['Archivist', 'Fancyman', 'Linguist', 'Fletcher', + 'Notary', 'Berserker-Typist', 'Fishmongerer', 'Manicurist', 'Haberdasher', 'Concierge']; + +var levels = ["1st", "2nd", "3rd", "4th", "5th", "6th", "7th", "8th", "9th", "10th", "11th", "12th", "13th", "14th", "15th", "16th", "17th", "18th", "19th", "20th"] + +var profBonus = [2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6]; + +var getFeature = (level)=>{ + var res = [] + if(_.includes([4,6,8,12,14,16,19], level+1)){ + res = ["Ability Score Improvement"] + } + res = _.union(res, _.sampleSize(features, _.sample([0,1,1,1,1,1]))); + if(!res.length) return "─"; + return res.join(', '); +} + +module.exports = { + full : function(){ + var classname = _.sample(classnames) + + var maxes = [4,3,3,3,3,2,2,1,1] + var drawSlots = function(Slots){ + var slots = Number(Slots); + return _.times(9, function(i){ + var max = maxes[i]; + if(slots < 1) return "—"; + var res = _.min([max, slots]); + slots -= res; + return res; + }).join(' | ') + } + + + var cantrips = 3; + var spells = 1; + var slots = 2; + return "
\n##### The " + classname + "\n" + + "| Level | Proficiency Bonus | Features | Cantrips Known | Spells Known | 1st | 2nd | 3rd | 4th | 5th | 6th | 7th | 8th | 9th |\n"+ + "|:---:|:---:|:---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|\n" + + _.map(levels, function(levelName, level){ + var res = [ + levelName, + "+" + profBonus[level], + getFeature(level), + cantrips, + spells, + drawSlots(slots) + ].join(' | '); + + cantrips += _.random(0,1); + spells += _.random(0,1); + slots += _.random(0,2); + + return "| " + res + " |"; + }).join('\n') +'\n
\n\n'; + }, + + half : function(){ + var classname = _.sample(classnames) + + var featureScore = 1 + return "
\n##### The " + classname + "\n" + + "| Level | Proficiency Bonus | Features | " + _.sample(features) + "|\n" + + "|:---:|:---:|:---|:---:|\n" + + _.map(levels, function(levelName, level){ + var res = [ + levelName, + "+" + profBonus[level], + getFeature(level), + "+" + featureScore + ].join(' | '); + + featureScore += _.random(0,1); + + return "| " + res + " |"; + }).join('\n') +'\n
\n\n'; + } +}; \ No newline at end of file diff --git a/shared/depricated/snippets_old/coverpage.gen.js b/shared/depricated/snippets_old/coverpage.gen.js new file mode 100644 index 0000000..d4b69d6 --- /dev/null +++ b/shared/depricated/snippets_old/coverpage.gen.js @@ -0,0 +1,117 @@ +var _ = require('lodash'); + +var titles = [ + "The Burning Gallows", + "The Ring of Nenlast", + "Below the Blind Tavern", + "Below the Hungering River", + "Before Bahamut's Land", + "The Cruel Grave from Within", + "The Strength of Trade Road", + "Through The Raven Queen's Worlds", + "Within the Settlement", + "The Crown from Within", + "The Merchant Within the Battlefield", + "Ioun's Fading Traveler", + "The Legion Ingredient", + "The Explorer Lure", + "Before the Charming Badlands", + "The Living Dead Above the Fearful Cage", + "Vecna's Hidden Sage", + "Bahamut's Demonspawn", + "Across Gruumsh's Elemental Chaos", + "The Blade of Orcus", + "Beyond Revenge", + "Brain of Insanity", + "Breed Battle!, A New Beginning", + "Evil Lake, A New Beginning", + "Invasion of the Gigantic Cat, Part II", + "Kraken War 2020", + "The Body Whisperers", + "The Diabolical Tales of the Ape-Women", + "The Doctor Immortal", + "The Doctor from Heaven", + "The Graveyard", + "Azure Core", + "Core Battle", + "Core of Heaven: The Guardian of Amazement", + "Deadly Amazement III", + "Dry Chaos IX", + "Gate Thunder", + "Guardian: Skies of the Dark Wizard", + "Lute of Eternity", + "Mercury's Planet: Brave Evolution", + "Ruby of Atlantis: The Quake of Peace", + "Sky of Zelda: The Thunder of Force", + "Vyse's Skies", + "White Greatness III", + "Yellow Divinity", + "Zidane's Ghost" +]; + +var subtitles = [ + "In an ominous universe, a botanist opposes terrorism.", + "In a demon-haunted city, in an age of lies and hate, a physicist tries to find an ancient treasure and battles a mob of aliens.", + "In a land of corruption, two cyberneticists and a dungeon delver search for freedom.", + "In an evil empire of horror, two rangers battle the forces of hell.", + "In a lost city, in an age of sorcery, a librarian quests for revenge.", + "In a universe of illusions and danger, three time travellers and an adventurer search for justice.", + "In a forgotten universe of barbarism, in an era of terror and mysticism, a virtual reality programmer and a spy try to find vengance and battle crime.", + "In a universe of demons, in an era of insanity and ghosts, three bodyguards and a bodyguard try to find vengance.", + "In a kingdom of corruption and battle, seven artificial intelligences try to save the last living fertile woman.", + "In a universe of virutal reality and agony, in an age of ghosts and ghosts, a fortune-teller and a wanderer try to avert the apocalypse.", + "In a crime-infested kingdom, three martial artists quest for the truth and oppose evil.", + "In a terrifying universe of lost souls, in an era of lost souls, eight dancers fight evil.", + "In a galaxy of confusion and insanity, three martial artists and a duke battle a mob of psychics.", + "In an amazing kingdom, a wizard and a secretary hope to prevent the destruction of mankind.", + "In a kingdom of deception, a reporter searches for fame.", + "In a hellish empire, a swordswoman and a duke try to find the ultimate weapon and battle a conspiracy.", + "In an evil galaxy of illusion, in a time of technology and misery, seven psychiatrists battle crime.", + "In a dark city of confusion, three swordswomen and a singer battle lawlessness.", + "In an ominous empire, in an age of hate, two philosophers and a student try to find justice and battle a mob of mages intent on stealing the souls of the innocent.", + "In a kingdom of panic, six adventurers oppose lawlessness.", + "In a land of dreams and hopelessness, three hackers and a cyborg search for justice.", + "On a planet of mysticism, three travelers and a fire fighter quest for the ultimate weapon and oppose evil.", + "In a wicked universe, five seers fight lawlessness.", + "In a kingdom of death, in an era of illusion and blood, four colonists search for fame.", + "In an amazing kingdom, in an age of sorcery and lost souls, eight space pirates quest for freedom.", + "In a cursed empire, five inventors oppose terrorism.", + "On a crime-ridden planet of conspiracy, a watchman and an artificial intelligence try to find love and oppose lawlessness.", + "In a forgotten land, a reporter and a spy try to stop the apocalypse.", + "In a forbidden land of prophecy, a scientist and an archivist oppose a cabal of barbarians intent on stealing the souls of the innocent.", + "On an infernal world of illusion, a grave robber and a watchman try to find revenge and combat a syndicate of mages intent on stealing the source of all magic.", + "In a galaxy of dark magic, four fighters seek freedom.", + "In an empire of deception, six tomb-robbers quest for the ultimate weapon and combat an army of raiders.", + "In a kingdom of corruption and lost souls, in an age of panic, eight planetologists oppose evil.", + "In a galaxy of misery and hopelessness, in a time of agony and pain, five planetologists search for vengance.", + "In a universe of technology and insanity, in a time of sorcery, a computer techician quests for hope.", + "On a planet of dark magic and barbarism, in an age of horror and blasphemy, seven librarians search for fame.", + "In an empire of dark magic, in a time of blood and illusions, four monks try to find the ultimate weapon and combat terrorism.", + "In a forgotten empire of dark magic, six kings try to prevent the destruction of mankind.", + "In a galaxy of dark magic and horror, in an age of hopelessness, four marines and an outlaw combat evil.", + "In a mysterious city of illusion, in an age of computerization, a witch-hunter tries to find the ultimate weapon and opposes an evil corporation.", + "In a damned kingdom of technology, a virtual reality programmer and a fighter seek fame.", + "In a hellish kingdom, in an age of blasphemy and blasphemy, an astrologer searches for fame.", + "In a damned world of devils, an alien and a ranger quest for love and oppose a syndicate of demons.", + "In a cursed galaxy, in a time of pain, seven librarians hope to avert the apocalypse.", + "In a crime-infested galaxy, in an era of hopelessness and panic, three champions and a grave robber try to solve the ultimate crime." +]; + + +module.exports = () => { + return ` + +
+ +# ${_.sample(titles)} + +
+
+##### ${_.sample(subtitles)} +
+ +\\page` +} \ No newline at end of file diff --git a/shared/depricated/snippets_old/fullclass.gen.js b/shared/depricated/snippets_old/fullclass.gen.js new file mode 100644 index 0000000..9a2da20 --- /dev/null +++ b/shared/depricated/snippets_old/fullclass.gen.js @@ -0,0 +1,43 @@ +var _ = require('lodash'); + +var ClassFeatureGen = require('./classfeature.gen.js'); + +var ClassTableGen = require('./classtable.gen.js'); + +module.exports = function(){ + + var classname = _.sample(['Archivist', 'Fancyman', 'Linguist', 'Fletcher', + 'Notary', 'Berserker-Typist', 'Fishmongerer', 'Manicurist', 'Haberdasher', 'Concierge']) + + + var image = _.sample(_.map([ + "http://orig01.deviantart.net/4682/f/2007/099/f/c/bard_stick_figure_by_wrpigeek.png", + "http://img07.deviantart.net/a3c9/i/2007/099/3/a/archer_stick_figure_by_wrpigeek.png", + "http://pre04.deviantart.net/d596/th/pre/f/2007/099/5/2/adventurer_stick_figure_by_wrpigeek.png", + "http://img13.deviantart.net/d501/i/2007/099/d/4/black_mage_stick_figure_by_wrpigeek.png", + "http://img09.deviantart.net/5cf3/i/2007/099/d/d/dark_knight_stick_figure_by_wrpigeek.png", + "http://pre01.deviantart.net/7a34/th/pre/f/2007/099/6/3/monk_stick_figure_by_wrpigeek.png", + "http://img11.deviantart.net/5dcc/i/2007/099/d/1/mystic_knight_stick_figure_by_wrpigeek.png", + "http://pre08.deviantart.net/ad45/th/pre/f/2007/099/a/0/thief_stick_figure_by_wrpigeek.png", + ], function(url){ + return "" + })) + + + return [ + image, + "", + "```", + "```", + "
\n\n", + "## " + classname, + "Cool intro stuff will go here", + + "\\page", + ClassTableGen(classname), + ClassFeatureGen(classname), + + + + ].join('\n') + '\n\n\n'; +}; \ No newline at end of file diff --git a/shared/depricated/snippets_old/magic.gen.js b/shared/depricated/snippets_old/magic.gen.js new file mode 100644 index 0000000..82469cd --- /dev/null +++ b/shared/depricated/snippets_old/magic.gen.js @@ -0,0 +1,91 @@ +var _ = require('lodash'); + +var spellNames = [ + "Astral Rite of Acne", + "Create Acne", + "Cursed Ramen Erruption", + "Dark Chant of the Dentists", + "Erruption of Immaturity", + "Flaming Disc of Inconvenience", + "Heal Bad Hygene", + "Heavenly Transfiguration of the Cream Devil", + "Hellish Cage of Mucus", + "Irritate Peanut Butter Fairy", + "Luminous Erruption of Tea", + "Mystic Spell of the Poser", + "Sorcerous Enchantment of the Chimneysweep", + "Steak Sauce Ray", + "Talk to Groupie", + "Astonishing Chant of Chocolate", + "Astounding Pasta Puddle", + "Ball of Annoyance", + "Cage of Yarn", + "Control Noodles Elemental", + "Create Nervousness", + "Cure Baldness", + "Cursed Ritual of Bad Hair", + "Dispell Piles in Dentist", + "Eliminate Florists", + "Illusionary Transfiguration of the Babysitter", + "Necromantic Armor of Salad Dressing", + "Occult Transfiguration of Foot Fetish", + "Protection from Mucus Giant", + "Tinsel Blast", + "Alchemical Evocation of the Goths", + "Call Fangirl", + "Divine Spell of Crossdressing", + "Dominate Ramen Giant", + "Eliminate Vindictiveness in Gym Teacher", + "Extra-Planar Spell of Irritation", + "Induce Whining in Babysitter", + "Invoke Complaining", + "Magical Enchantment of Arrogance", + "Occult Globe of Salad Dressing", + "Overwhelming Enchantment of the Chocolate Fairy", + "Sorcerous Dandruff Globe", + "Spiritual Invocation of the Costumers", + "Ultimate Rite of the Confetti Angel", + "Ultimate Ritual of Mouthwash", +]; + +module.exports = { + + spellList : function(){ + var levels = ['Cantrips (0 Level)', '2nd Level', '3rd Level', '4th Level', '5th Level', '6th Level', '7th Level', '8th Level', '9th Level']; + + var content = _.map(levels, (level)=>{ + var spells = _.map(_.sampleSize(spellNames, _.random(5, 15)), (spell)=>{ + return `- ${spell}`; + }).join('\n'); + return `##### ${level} \n${spells} \n`; + }).join('\n'); + + return `
\n${content}\n
`; + }, + + spell : function(){ + var level = ["1st", "2nd", "3rd", "4th", "5th", "6th", "7th", "8th", "9th"]; + var spellSchools = ["abjuration", "conjuration", "divination", "enchantment", "evocation", "illusion", "necromancy", "transmutation"]; + + + var components = _.sampleSize(["V", "S", "M"], _.random(1,3)).join(', '); + if(components.indexOf("M") !== -1){ + components += " (" + _.sampleSize(['a small doll', 'a crushed button worth at least 1cp', 'discarded gum wrapper'], _.random(1,3)).join(', ') + ")" + } + + return [ + "#### " + _.sample(spellNames), + "*" + _.sample(level) + "-level " + _.sample(spellSchools) + "*", + "___", + "- **Casting Time:** 1 action", + "- **Range:** " + _.sample(["Self", "Touch", "30 feet", "60 feet"]), + "- **Components:** " + components, + "- **Duration:** " + _.sample(["Until dispelled", "1 round", "Instantaneous", "Concentration, up to 10 minutes", "1 hour"]), + "", + "A flame, equivalent in brightness to a torch, springs from from an object that you touch. ", + "The effect look like a regular flame, but it creates no heat and doesn't use oxygen. ", + "A *continual flame* can be covered or hidden but not smothered or quenched.", + "\n\n\n" + ].join('\n'); + } +} \ No newline at end of file diff --git a/shared/depricated/snippets_old/monsterblock.gen.js b/shared/depricated/snippets_old/monsterblock.gen.js new file mode 100644 index 0000000..abbcd6c --- /dev/null +++ b/shared/depricated/snippets_old/monsterblock.gen.js @@ -0,0 +1,196 @@ +var _ = require('lodash'); + +var genList = function(list, max){ + return _.sampleSize(list, _.random(0,max)).join(', ') || "None"; +} + +var getMonsterName = function(){ + return _.sample([ + "All-devouring Baseball Imp", + "All-devouring Gumdrop Wraith", + "Chocolate Hydra", + "Devouring Peacock", + "Economy-sized Colossus of the Lemonade Stand", + "Ghost Pigeon", + "Gibbering Duck", + "Sparklemuffin Peacock Spider", + "Gum Elemental", + "Illiterate Construct of the Candy Store", + "Ineffable Chihuahua", + "Irritating Death Hamster", + "Irritating Gold Mouse", + "Juggernaut Snail", + "Juggernaut of the Sock Drawer", + "Koala of the Cosmos", + "Mad Koala of the West", + "Milk Djinni of the Lemonade Stand", + "Mind Ferret", + "Mystic Salt Spider", + "Necrotic Halitosis Angel", + "Pinstriped Famine Sheep", + "Ritalin Leech", + "Shocker Kangaroo", + "Stellar Tennis Juggernaut", + "Wailing Quail of the Sun", + "Angel Pigeon", + "Anime Sphinx", + "Bored Avalanche Sheep of the Wasteland", + "Devouring Nougat Sphinx of the Sock Drawer", + "Djinni of the Footlocker", + "Ectoplasmic Jazz Devil", + "Flatuent Angel", + "Gelatinous Duck of the Dream-Lands", + "Gelatinous Mouse", + "Golem of the Footlocker", + "Lich Wombat", + "Mechanical Sloth of the Past", + "Milkshake Succubus", + "Puffy Bone Peacock of the East", + "Rainbow Manatee", + "Rune Parrot", + "Sand Cow", + "Sinister Vanilla Dragon", + "Snail of the North", + "Spider of the Sewer", + "Stellar Sawdust Leech", + "Storm Anteater of Hell", + "Stupid Spirit of the Brewery", + "Time Kangaroo", + "Tomb Poodle", + ]); +} + +var getType = function(){ + return _.sample(['Tiny', 'Small', 'Medium', 'Large', 'Gargantuan', 'Stupidly vast']) + " " + _.sample(['beast', 'fiend', 'annoyance', 'guy', 'cutie']) +} + +var getAlignment = function(){ + return _.sample([ + "annoying evil", + "chaotic gossipy", + "chaotic sloppy", + "depressed neutral", + "lawful bogus", + "lawful coy", + "manic-depressive evil", + "narrow-minded neutral", + "neutral annoying", + "neutral ignorant", + "oedpipal neutral", + "silly neutral", + "unoriginal neutral", + "weird neutral", + "wordy evil", + "unaligned" + ]); +}; + +var getStats = function(){ + return '>|' + _.times(6, function(){ + var num = _.random(1,20); + var mod = Math.ceil(num/2 - 5) + return num + " (" + (mod >= 0 ? '+'+mod : mod ) + ")" + }).join('|') + '|'; +} + +var genAbilities = function(){ + return _.sample([ + "> ***Pack Tactics.*** These guys work together. Like super well, you don't even know.", + "> ***False Appearance. *** While the armor reamin motionless, it is indistinguishable from a normal suit of armor.", + ]); +} + +var genAction = function(){ + var name = _.sample([ + "Abdominal Drop", + "Airplane Hammer", + "Atomic Death Throw", + "Bulldog Rake", + "Corkscrew Strike", + "Crossed Splash", + "Crossface Suplex", + "DDT Powerbomb", + "Dual Cobra Wristlock", + "Dual Throw", + "Elbow Hold", + "Gory Body Sweep", + "Heel Jawbreaker", + "Jumping Driver", + "Open Chin Choke", + "Scorpion Flurry", + "Somersault Stump Fists", + "Suffering Wringer", + "Super Hip Submission", + "Super Spin", + "Team Elbow", + "Team Foot", + "Tilt-a-whirl Chin Sleeper", + "Tilt-a-whirl Eye Takedown", + "Turnbuckle Roll" + ]) + + return "> ***" + name + ".*** *Melee Weapon Attack:* +4 to hit, reach 5ft., one target. *Hit* 5 (1d6 + 2) "; +} + + +module.exports = { + + full : function(){ + return [ + "___", + "___", + "> ## " + getMonsterName(), + ">*" + getType() + ", " + getAlignment() + "*", + "> ___", + "> - **Armor Class** " + _.random(10,20), + "> - **Hit Points** " + _.random(1, 150) + "(1d4 + 5)", + "> - **Speed** " + _.random(0,50) + "ft.", + ">___", + ">|STR|DEX|CON|INT|WIS|CHA|", + ">|:---:|:---:|:---:|:---:|:---:|:---:|", + getStats(), + ">___", + "> - **Condition Immunities** " + genList(["groggy", "swagged", "weak-kneed", "buzzed", "groovy", "melancholy", "drunk"], 3), + "> - **Senses** passive Perception " + _.random(3, 20), + "> - **Languages** " + genList(["Common", "Pottymouth", "Gibberish", "Latin", "Jive"], 2), + "> - **Challenge** " + _.random(0, 15) + " (" + _.random(10,10000)+ " XP)", + "> ___", + _.times(_.random(3,6), function(){ + return genAbilities() + }).join('\n>\n'), + "> ### Actions", + _.times(_.random(4,6), function(){ + return genAction() + }).join('\n>\n'), + ].join('\n') + '\n\n\n'; + }, + + half : function(){ + return [ + "___", + "> ## " + getMonsterName(), + ">*" + getType() + ", " + getAlignment() + "*", + "> ___", + "> - **Armor Class** " + _.random(10,20), + "> - **Hit Points** " + _.random(1, 150) + "(1d4 + 5)", + "> - **Speed** " + _.random(0,50) + "ft.", + ">___", + ">|STR|DEX|CON|INT|WIS|CHA|", + ">|:---:|:---:|:---:|:---:|:---:|:---:|", + getStats(), + ">___", + "> - **Condition Immunities** " + genList(["groggy", "swagged", "weak-kneed", "buzzed", "groovy", "melancholy", "drunk"], 3), + "> - **Senses** passive Perception " + _.random(3, 20), + "> - **Languages** " + genList(["Common", "Pottymouth", "Gibberish", "Latin", "Jive"], 2), + "> - **Challenge** " + _.random(0, 15) + " (" + _.random(10,10000)+ " XP)", + "> ___", + _.times(_.random(0,2), function(){ + return genAbilities() + }).join('\n>\n'), + "> ### Actions", + _.times(_.random(1,2), function(){ + return genAction() + }).join('\n>\n'), + ].join('\n') + '\n\n\n'; + } +} diff --git a/shared/depricated/snippets_old/snippets.js b/shared/depricated/snippets_old/snippets.js new file mode 100644 index 0000000..bcb1df9 --- /dev/null +++ b/shared/depricated/snippets_old/snippets.js @@ -0,0 +1,267 @@ +var MagicGen = require('./magic.gen.js'); +var ClassTableGen = require('./classtable.gen.js'); +var MonsterBlockGen = require('./monsterblock.gen.js'); +var ClassFeatureGen = require('./classfeature.gen.js'); +var FullClassGen = require('./fullclass.gen.js'); +var CoverPageGen = require('./coverpage.gen.js'); +var TableOfContentsGen = require('./tableOfContents.gen.js'); + + +module.exports = [ + + { + groupName : 'Editor', + icon : 'fa-pencil', + snippets : [ + { + name : "Column Break", + icon : 'fa-columns', + gen : "```\n```\n\n" + }, + { + name : "New Page", + icon : 'fa-file-text', + gen : "\\page\n\n" + }, + { + name : "Vertical Spacing", + icon : 'fa-arrows-v', + gen : "
\n\n" + }, + { + name : "Wide Block", + icon : 'fa-arrows-h', + gen : "
\nEverything in here will be extra wide. Tables, text, everything! Beware though, CSS columns can behave a bit weird sometimes.\n
\n" + }, + { + name : "Image", + icon : 'fa-image', + gen : [ + "", + "Credit: Kyounghwan Kim" + ].join('\n') + }, + { + name : "Background Image", + icon : 'fa-tree', + gen : [ + "" + ].join('\n') + }, + + { + name : "Page Number", + icon : 'fa-bookmark', + gen : "
1
\n
PART 1 | FANCINESS
\n\n" + }, + + { + name : "Auto-incrementing Page Number", + icon : 'fa-sort-numeric-asc', + gen : "
\n" + }, + + { + name : "Link to page", + icon : 'fa-link', + gen : "[Click here](#p3) to go to page 3\n" + }, + + { + name : "Table of Contents", + icon : 'fa-book', + gen : TableOfContentsGen + }, + + + ] + }, + + + /************************* PHB ********************/ + + { + groupName : 'PHB', + icon : 'fa-book', + snippets : [ + { + name : 'Spell', + icon : 'fa-magic', + gen : MagicGen.spell, + }, + { + name : 'Spell List', + icon : 'fa-list', + gen : MagicGen.spellList, + }, + { + name : 'Class Feature', + icon : 'fa-trophy', + gen : ClassFeatureGen, + }, + { + name : 'Note', + icon : 'fa-sticky-note', + gen : function(){ + return [ + "> ##### Time to Drop Knowledge", + "> Use notes to point out some interesting information. ", + "> ", + "> **Tables and lists** both work within a note." + ].join('\n'); + }, + }, + { + name : 'Descriptive Text Box', + icon : 'fa-sticky-note-o', + gen : function(){ + return [ + "
", + "##### Time to Drop Knowledge", + "Use notes to point out some interesting information. ", + "", + "**Tables and lists** both work within a note.", + "
" + ].join('\n'); + }, + }, + { + name : 'Monster Stat Block', + icon : 'fa-bug', + gen : MonsterBlockGen.half, + }, + { + name : 'Wide Monster Stat Block', + icon : 'fa-paw', + gen : MonsterBlockGen.full, + }, + { + name : 'Cover Page', + icon : 'fa-file-word-o', + gen : CoverPageGen, + }, + ] + }, + + + + /********************* TABLES *********************/ + + { + groupName : 'Tables', + icon : 'fa-table', + snippets : [ + { + name : "Class Table", + icon : 'fa-table', + gen : ClassTableGen.full, + }, + { + name : "Half Class Table", + icon : 'fa-list-alt', + gen : ClassTableGen.half, + }, + { + name : 'Table', + icon : 'fa-th-list', + gen : function(){ + return [ + "##### Cookie Tastiness", + "| Tastiness | Cookie Type |", + "|:----:|:-------------|", + "| -5 | Raisin |", + "| 8th | Chocolate Chip |", + "| 11th | 2 or lower |", + "| 14th | 3 or lower |", + "| 17th | 4 or lower |\n\n", + ].join('\n'); + }, + }, + { + name : 'Wide Table', + icon : 'fa-list', + gen : function(){ + return [ + "
", + "##### Cookie Tastiness", + "| Tastiness | Cookie Type |", + "|:----:|:-------------|", + "| -5 | Raisin |", + "| 8th | Chocolate Chip |", + "| 11th | 2 or lower |", + "| 14th | 3 or lower |", + "| 17th | 4 or lower |", + "
\n\n" + ].join('\n'); + }, + }, + { + name : 'Split Table', + icon : 'fa-th-large', + gen : function(){ + return [ + "
", + "| d10 | Damage Type |", + "|:---:|:------------|", + "| 1 | Acid |", + "| 2 | Cold |", + "| 3 | Fire |", + "| 4 | Force |", + "| 5 | Lightning |", + "", + "```", + "```", + "", + "| d10 | Damage Type |", + "|:---:|:------------|", + "| 6 | Necrotic |", + "| 7 | Poison |", + "| 8 | Psychic |", + "| 9 | Radiant |", + "| 10 | Thunder |", + "
\n\n", + ].join('\n'); + }, + } + ] + }, + + + + + /**************** PRINT *************/ + + { + groupName : 'Print', + icon : 'fa-print', + snippets : [ + { + name : "A4 PageSize", + icon : 'fa-file-o', + gen : ['' + ].join('\n') + }, + { + name : "Ink Friendly", + icon : 'fa-tint', + gen : ['', + '' + ].join('\n') + }, + ] + }, + +] diff --git a/shared/depricated/snippets_old/tableOfContents.gen.js b/shared/depricated/snippets_old/tableOfContents.gen.js new file mode 100644 index 0000000..448b2f4 --- /dev/null +++ b/shared/depricated/snippets_old/tableOfContents.gen.js @@ -0,0 +1,72 @@ +const _ = require('lodash'); + +const getTOC = (pages) => { + const add1 = (title, page)=>{ + res.push({ + title : title, + page : page + 1, + children : [] + }); + } + const add2 = (title, page)=>{ + if(!_.last(res)) add1('', page); + _.last(res).children.push({ + title : title, + page : page + 1, + children : [] + }); + } + const add3 = (title, page)=>{ + if(!_.last(res)) add1('', page); + if(!_.last(_.last(res).children)) add2('', page); + _.last(_.last(res).children).children.push({ + title : title, + page : page + 1, + children : [] + }); + } + + let res = []; + _.each(pages, (page, pageNum)=>{ + const lines = page.split('\n'); + _.each(lines, (line) => { + if(_.startsWith(line, '# ')){ + const title = line.replace('# ', ''); + add1(title, pageNum) + } + if(_.startsWith(line, '## ')){ + const title = line.replace('## ', ''); + add2(title, pageNum); + } + if(_.startsWith(line, '### ')){ + const title = line.replace('### ', ''); + add3(title, pageNum); + } + }) + }); + return res; +} + +module.exports = function(brew){ + const pages = brew.split('\\page'); + const TOC = getTOC(pages); + const markdown = _.reduce(TOC, (r, g1, idx1)=>{ + r.push(`- **[${idx1 + 1} ${g1.title}](#p${g1.page})**`) + if(g1.children.length){ + _.each(g1.children, (g2, idx2) => { + r.push(` - [${idx1 + 1}.${idx2 + 1} ${g2.title}](#p${g2.page})`); + if(g2.children.length){ + _.each(g2.children, (g3, idx3) => { + r.push(` - [${idx1 + 1}.${idx2 + 1}.${idx3 + 1} ${g3.title}](#p${g3.page})`); + }); + } + }); + } + return r; + }, []).join('\n'); + + return `
+##### Table Of Contents +${markdown} +
\n`; +} \ No newline at end of file