diff --git a/client/homebrew/editor/snippets/magic.gen.js b/client/homebrew/editor/snippets/magic.gen.js
new file mode 100644
index 0000000..82469cd
--- /dev/null
+++ b/client/homebrew/editor/snippets/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/client/homebrew/editor/snippets/snippets.js b/client/homebrew/editor/snippets/snippets.js
index 74e267a..c303a6d 100644
--- a/client/homebrew/editor/snippets/snippets.js
+++ b/client/homebrew/editor/snippets/snippets.js
@@ -1,175 +1,178 @@
-var SpellGen = require('./spell.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');
-
-
-
-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 : "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\n\n"
- },
-
-
- ]
- },
-
-
- /************************* PHB ********************/
-
- {
- groupName : 'PHB',
- icon : 'fa-book',
- snippets : [
- {
- name : 'Spell',
- icon : 'fa-magic',
- gen : SpellGen,
- },
- {
- 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 : 'Monster Stat Block',
- icon : 'fa-bug',
- gen : MonsterBlockGen.half,
- },
- {
- name : 'Wide Monster Stat Block',
- icon : 'fa-paw',
- gen : MonsterBlockGen.full,
- }
- ]
- },
-
-
-
- /********************* 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');
- },
- }
- ]
- },
-
-
-
-
- /**************** 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')
- },
- ]
- },
-
-]
-
-
+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');
+
+
+
+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 : "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\n\n"
+ },
+
+
+ ]
+ },
+
+
+ /************************* 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 : 'Monster Stat Block',
+ icon : 'fa-bug',
+ gen : MonsterBlockGen.half,
+ },
+ {
+ name : 'Wide Monster Stat Block',
+ icon : 'fa-paw',
+ gen : MonsterBlockGen.full,
+ }
+ ]
+ },
+
+
+
+ /********************* 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');
+ },
+ }
+ ]
+ },
+
+
+
+
+ /**************** 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')
+ },
+ ]
+ },
+
+]