diff --git a/client/homebrew/pages/homePage/migrate_gmb.md b/client/homebrew/pages/homePage/migrate_gmb.md new file mode 100644 index 000000000..f90eaff18 --- /dev/null +++ b/client/homebrew/pages/homePage/migrate_gmb.md @@ -0,0 +1,174 @@ +# How to Convert a GMBinder Document to Homebrewery +Here you will find a number of steps to guide you through converting a GMBinder document into a Homebrewery document. + +**This document will evolve as users like yourself inform us of issues with it, or areas of conversion that it does not cover. _Please_ reach out if you have any suggestions for this document.** + +The first thing you'll want to do is switch the editor's rendering engine from `Legacy` to `v3`. This will be the renderer we design features for moving forward. + +### Simple Text Replacements +To make your life a little easier with this section, we recommend using a text editor like [VSCode](https://code.visualstudio.com/) or Notepad. + +The following table describes GMBinder elements and their Homebrewery counterparts. A simple find/replace should get these in working order. + +| GMBinder | Homebrewery | +|:----------------|:---| +| `\pagebreak` | `\page` | +| `======` | `\page` | +| `\pagebreaknum` | `{{pageNumber,auto}}\n\page` | +| `@=====` | `{{pageNumber,auto}}\n\page` | +| `\columnbreak` | `\column` | +| `.phb` | `.page` | + +### Margins and Padding +Any manual margins and padding to push text down the page will likely need to be updated. Something to note is immediately after a column break + +\page + +## Stat Blocks + +{{wide +There are pretty significant differences between stat blocks on GMBinder and Homebrewery. In this section we will describe a list of find/replace commands you can run against your GMB stat block to help make migrating them easier. +}} + +### GMBinder Example: + +``` +___ +> ## Centaur +> *Large Monstrosity, neutral good* +>___ +> - **Armor Class** 12 +> - **Hit Points** 45(6d10 + 12) +> - **Speed** 50ft. +>___ +>|STR|DEX|CON|INT|WIS|CHA| +>|:---:|:---:|:---:|:---:|:---:|:---:| +>|18 (+4)|14 (+2)|14 (+2)|9 (-1)|13 (+1)|11 (+0)| +>___ +> - **Skills** Athletics +6, Perception +3, Survival +3 +> - **Senses** passive Perception 13 +> - **Languages** Elvish, Sylvan +> - **Challenge** 2 (450 XP) +> ___ +> ***Charge.*** If the centaur moves at least 30 feet straight toward a target and then hits it with a pike attack on the same turn, the target takes an extra 10 (3d6) piercing damage. +> +> ***Second Thing*** More details. +> +> ### Actions +> ***Multiattack.*** The centaur makes two attacks: one with its pike and one with its hooves or two with its longbow. +> +> ***Pike.*** *Melee Weapon Attack:* +6 to hit, reach 10 ft., one target. *Hit:* 9 (1d10 + 4) piercing damage. +> +> ***Hooves.*** *Melee Weapon Attack:* +6 to hit, reach 5 ft., one target. *Hit:* 11 (2d6 + 4) bludgeoning damage. +> +> ***Longbow.*** *Ranged Weapon Attack:* +4 to hit, range 150/600 ft., one target. *Hit:* 6 (1d8 + 2) piercing damage. +``` + +\column + +### Homebrewery example: + +``` +{{monster +## Centaur +*Large monstrosity, neutral good* +___ +**Armor Class** :: 12 +**Hit Points** :: 45(6d10 + 12) +**Speed** :: 50ft. +___ +| STR | DEX | CON | INT | WIS | CHA | +|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:| +|18 (+4)|14 (+2)|14 (+2)|9 (-1) |13 (+1)|11 (+0)| +___ +**Skills** :: Athletics +6, Perception +3, Survival +3 +**Senses** :: passive Perception 13 +**Languages** :: Elvish, Sylvan +**Challenge** :: 2 (450 XP) +___ +***Charge.*** If the centaur moves at least 30 feet straight toward a target and then hits it with a pike attack on the same turn, the target takes an extra 10 (3d6) piercing damage. +: +***Second Thing*** More details. + +### Actions +***Multiattack.*** The centaur makes two attacks: one with its pike and one with its hooves or two with its longbow. +: +***Pike.*** *Melee Weapon Attack:* +6 to hit, reach 10 ft., one target. *Hit:* 9 (1d10 + 4) piercing damage. +: +***Hooves.*** *Melee Weapon Attack:* +6 to hit, reach 5 ft., one target. *Hit:* 11 (2d6 + 4) bludgeoning damage. +: +***Longbow.*** *Ranged Weapon Attack:* +4 to hit, range 150/600 ft., one target. *Hit:* 6 (1d8 + 2) piercing damage. +}} +``` + +\page + +{{monster +## Centaur +*Large monstrosity, neutral good* +___ +**Armor Class** :: 12 +**Hit Points** :: 45(6d10 + 12) +**Speed** :: 50ft. +___ +| STR | DEX | CON | INT | WIS | CHA | +|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:| +|18 (+4)|14 (+2)|14 (+2)|9 (-1) |13 (+1)|11 (+0)| +___ +**Skills** :: Athletics +6, Perception +3, Survival +3 +**Senses** :: passive Perception 13 +**Languages** :: Elvish, Sylvan +**Challenge** :: 2 (450 XP) +___ +***Charge.*** If the centaur moves at least 30 feet straight toward a target and then hits it with a pike attack on the same turn, the target takes an extra 10 (3d6) piercing damage. +: +***Second Thing*** More details. + +### Actions +***Multiattack.*** The centaur makes two attacks: one with its pike and one with its hooves or two with its longbow. +: +***Pike.*** *Melee Weapon Attack:* +6 to hit, reach 10 ft., one target. *Hit:* 9 (1d10 + 4) piercing damage. +: +***Hooves.*** *Melee Weapon Attack:* +6 to hit, reach 5 ft., one target. *Hit:* 11 (2d6 + 4) bludgeoning damage. +: +***Longbow.*** *Ranged Weapon Attack:* +4 to hit, range 150/600 ft., one target. *Hit:* 6 (1d8 + 2) piercing damage. +}} + +\column + +**Use these find/replace commands in the order listed for the best result.** + +#### Blockquotes +The key difference is the lack of blockquotes. GMBinder uses the `>` symbol at the start of the line for each line in the stat block, and Homebrewery's v3 renderer does not. Running the following find/replace commands with regex enabled should remove the blockquotes: + +| Find | Replace | +|:------|:--------| +| `^> ` | | +| `^>` | | + +#### Lists +The basic characteristics and advanced characteristics sections are not list elements in Homebrewery. You can remove them by finding `^- ` and replacing it with nothing. + +#### Spacing +In order to have the correct spacing after removing the list elements, you will want to add `\:\:` between the name of each basic/advanced characteristic and its value. i.e: +``` +**Skills** :: Athletics +6 +``` + +: + +Additionally, in the special traits and actions sections, you will want to add a `\:` at the beginning of each line that separates a trait/action from another, as seen below. This can be accomplished with find/replace by replacing `^$` with `\:`. + +``` +### Actions +***Multiattack.*** The centaur makes two attacks: one with its pike and one with its hooves or two with its longbow. +: +***Pike.*** *Melee Weapon Attack:* +6 to hit, reach 10 ft., one target. *Hit:* 9 (1d10 + 4) piercing damage. +``` + +: + +#### Final Notes +Lastly you will want to remove the leading `___` that started the stat block in GMBinder, and replace that with `{{monster` before the stat block, and `}}` after it. If you want a frame around the stat block, you can use `{{monster,frame` instead. + + diff --git a/server.js b/server.js index a3a97cddf..f68c326ae 100644 --- a/server.js +++ b/server.js @@ -103,6 +103,7 @@ app.use(require('./server/admin.api.js')); const HomebrewModel = require('./server/homebrew.model.js').model; const welcomeText = require('fs').readFileSync('./client/homebrew/pages/homePage/welcome_msg.md', 'utf8'); const welcomeTextV3 = require('fs').readFileSync('./client/homebrew/pages/homePage/welcome_msg_v3.md', 'utf8'); +const migrateGMBText = require('fs').readFileSync('./client/homebrew/pages/homePage/migrate_gmb.md', 'utf8'); const changelogText = require('fs').readFileSync('./changelog.md', 'utf8'); const faqText = require('fs').readFileSync('./faq.md', 'utf8'); @@ -133,6 +134,17 @@ app.get('/v3_preview', async (req, res, next)=>{ return next(); }); +//GMBinder Migration Guide +app.get('/migrate-from-gmb', async (req, res, next)=>{ + const brew = { + text : migrateGMBText, + renderer : 'V3' + }; + splitTextAndStyle(brew); + req.brew = brew; + return next(); +}); + //Changelog page app.get('/changelog', async (req, res, next)=>{ const brew = {