FANDOM





A general overview of ....

The Steps

  • Find the project (a book/supplement you wish to see inside of 5eTools).
  • Check the repository listing to confirm its not being done, or has been done.
  • Post a comment here or here or in Discord under #Brew-Conversions on what project you've chosen (and if you'll want or need help/tutoring)
  • Get an editor like : Sublime Text or Notepad ++
  • Open a new file within the editor and save it as as <Author's name>; <Project name>.JSON
Examples:
"Player's Handbook" by WotC would be
`WotC; Player's Handbook.JSON`
"How to DM" by Sly Fox would be
`Sly Fox; How to DM.JSON`
  • Break down the project into logical parts. Does it contain: Races, Classes, Items, Traps, Feats, Monsters, Magical Items; etc. (See a Full Section list below the JSON file will be organized by these parts.
  • Separate those sections into simple text blocks where possible.
  • Create your Meta heading for the file
  • Using the Render Demo for formatting reference, and Sample file format create each section from its logical parts.
  • Use JSONlit or another JSON validation application to verify basic structure issue. (Missing or extra commas, brackets, quotes and the like)
  • Fix the JSON until it is deemed valid.
  • Go to the Render Demo and check your project
  • Go to the Manage Homebrew page
    • Choose Upload File
    • Navigate to your project's File
    • Does the File show up under installed homebrew?
      • No : There is a JSON validation error. See Troubleshooting your JSON validation
      • Yes: Congrats move on
    • Open the section(s) your project has included.
    • If an alert message appears notifying you that the Corruption has been detected and the homebrew removed, you have a formating issue with the data and datatyping within the JSON for 5eTools' specific requirements in its schema.
    • If no error occurs navigate to your entries and double check their appearance, content and graphics (if any).
  • Go to the Discord Server and post in the #Brew-Conversion channel or, if using Git, issue a push request for the completed file.


General Formating

Structure Formatting

For a functional view of what each of these elements do, and how to play with them - see Renderer Demo . "<string>"
Within the quotation mark you can input text content, within the strings the following commands modify the presentation of the text.

List      {
"type": "list",
"items": [
    ...
]
} Quote

{
"type": "quote",
"entries": [
"Look, don't quote me on this, but"
],
"by": "Anon",
"from": "Archive of Lost Chats"
},


Parsable Tags inside Strings

For a functional view of what each of these elements do, and how to play with them - see Renderer Demo . "<string>"
Within the quotation marks, you generally have the ability to include whatever text you'd like to do so. can input text content, within the strings the following tags modify the presentation of the text, triggering events, or f


\" 
produces a quotation mark within a string's content without closing the string.
{@bold <string>}  or {@b <string>}  
Makes the content that follows until the next closed braces bold.

 

{@italic <string>}  or {@i <string>}
Makes the content that follows until the next closed braces in italics.


{@strike <string>}  or {@s <string>}
Makes the content that follows until the next closed braces in strike-through.

 

{@note <string>}
Makes the content that follows until the next closed braces italic and in a light gray color.
{@dice <formula>}
Followed by a simple maths roller formula - ie. 2d6+8-1d4; makes that formula a clickable event that opens the roller application and generates the result of the dice formula.
{@dice <formula> | <string>}
When you use the | character followed by a string, the dice roll is hidden behind text.
{@hit <value> }
This assumes the dice formula of 1d20 + <vaule> provided. 
Upon clicking the text it generates a single roll in the roller.
If you Shift-Click generates a roll with advantage

 

{@damage <formula>}
This assumes the dice formula of 1d20 + <vaule> provided. 
Click generates a single roll.
If you Shift-Click generates a roll with advantage.
{@d20 <value>}
This assumes the dice formula of 1d20 + <vaule> being rolled with disadvantage. 
Click generates a single roll.
If you Shift-Click generates a roll with advantage.
{@scaledice <formula>; |<range>|<>}
scaling damage dice
{@chance <value>} or {@chance <value>|<display string>} or {@chance <value>|<display string>|<Roller display text>}
This is similar to a dice result, but the response is boolean success/failure result upon click 
Value is the percentage less 100% - ie a value of 20 would mean 1-79 is a failure; and 80-100 is a success.
  • {@chance <value>} displays as <value> percent; 
  • {@chance <value>|<display string>} displays as <display string> 
  • {@chance <value>|<display string>|<Roller display text>} displays as <display string> and the roller includes the Roller  display text.
{@recharge <value>}
Rolls a d6 in the roller, and if of the <value> or above the roller responds with Success!
{@skill <skill name>}
Links to skills

 

{@action <>}
Brings up a popup for the action.

 

{@sense <name>}
Bring up a popup on mouse over to define the nature of the sense. (its not case sensitive)

Darkvision Blindsight Tremorsense Truesight (etc)

{@homebrew <string>}
 
{@homebrew <string>|<modifcation description>}
 


{@homebrew | <retraction description>}


{@filter 
This tag is more complicated. It's a way to link to a specifically defined search filter.

Adventure

 

Background

 

Book

 

Boon

 

Class

 

Condition

 

Deity

 

Disease

 

Feat

 

Fluff

 

Hazzard

 

Item

 

Monster

 

Object

 

OptionsFeature

 

Psionic

 

Reward

 

Ship

 

Spells

 

Subclass

 

Table

 

Trap

 

VariantRules

 

Tools

Editors (Sublime Text or Notepad ++)

  Rendering Demo (https://5e.tools/demo.html)

A location for formating lookup



Badooga's Reddit to Markdown (https://github.com/badooga/Programs/blob/master/Dungeons%20and%20Dragons/reddit_to_markdown.py)

For Taking content from Reddit and coverting it into Markdown (helpful for the Stat block converter)

 

Schema

Link

{
	"$schema": "http://json-schema.org/draft-06/schema#",

	"title": "Entry",
	"id": "/Entry",
	"description": "A recursively renderable object.",
	"type": ["string", "integer", "object"],
	"version": "1.2.2",

	"definitions" : {
		"entry": {
			"properties": {
				"name": {
					"type": "string"
				},
				"type": {
					"type": "string"
				},
				"source": {
					"type": "string"
				},
				"data": {
					"type": "object"
				}
			},
			"required": [
				"type"
			]
		},

		"entrySection": {
			"allOf" : [
				{"$ref" : "#/definitions/entry"},
				{
					"properties": {
						"type": {"const": "section"},
						"name": {
							"type": "string"
						},
						"alias": {
							"type": "array",
							"items": {
								"type": "string"
							}
						},
						"entries": {
							"type": "array",
							"items": {
								"$ref": "/Entry"
							}
						},
						"data": {
							"type": "object"
						}
					},
					"required": ["entries"],
					"additionalProperties": false
				}
			]
		},
		"entryEntries": {
			"allOf" : [
				{"$ref" : "#/definitions/entry"},
				{
					"properties": {
						"type": {"const": "entries"},
						"name": {
							"type": "string"
						},
						"alias": {
							"type": "array",
							"items": {
								"type": "string"
							}
						},
						"entries": {
							"type": "array",
							"items": {
								"$ref": "/Entry"
							}
						},
						"data": {
							"type": "object"
						}
					},
					"required": ["entries"],
					"additionalProperties": false
				}
			]
		},
		"entryHomebrew": {
			"allOf" : [
				{"$ref" : "#/definitions/entry"},
				{
					"properties": {
						"type": {"const": "homebrew"},
						"name": {
							"type": "string"
						},
						"entries": {
							"type": "array",
							"items": {
								"$ref": "/Entry"
							}
						},
						"movedTo": {
							"$ref": "/Entry"
						},
						"oldEntries": {
							"type": "array",
							"items": {
								"$ref": "/Entry"
							}
						},
						"data": {
							"type": "object"
						}
					},
					"additionalProperties": false
				}
			]
		},
		"entryQuote": {
			"allOf" : [
				{"$ref" : "#/definitions/entry"},
				{
					"properties": {
						"type": {"const": "quote"},
						"entries": {
							"type": "array",
							"items": {
								"$ref": "/Entry"
							}
						},
						"by": {
							"type": "string"
						},
						"from": {
							"type": "string"
						}
					},
					"required": ["entries"],
					"additionalProperties": false
				}
			]
		},
		"entryInlineEntries": {
			"allOf" : [
				{"$ref" : "#/definitions/entry"},
				{
					"properties": {
						"type": {"const": "inline"},
						"entries": {
							"type": "array",
							"items": {
								"$ref": "/Entry"
							}
						}
					},
					"required": ["entries"],
					"additionalProperties": false
				}
			]
		},
		"entryEntriesInlineEntries": {
			"allOf" : [
				{"$ref" : "#/definitions/entry"},
				{
					"properties": {
						"type": {"const": "inlineBlock"},
						"entries": {
							"type": "array",
							"items": {
								"$ref": "/Entry"
							}
						}
					},
					"required": ["entries"],
					"additionalProperties": false
				}
			]
		},
		"entryOptions": {
			"allOf" : [
				{"$ref" : "#/definitions/entry"},
				{
					"properties": {
						"type": {"const": "options"},
						"name": {
							"type": "string"
						},
						"entries": {
							"type": "array",
							"items": {
								"$ref": "/Entry"
							}
						}
					},
					"required": ["entries"],
					"additionalProperties": false
				}
			]
		},
		"entryTable": {
			"allOf" : [
				{"$ref" : "#/definitions/entry"},
				{
					"properties": {
						"type": {"const": "table"},
						"caption": {"type" : "string"},
						"style": {"type" : "string"},
						"colLabels": {
							"type": "array",
							"items": {"type" : "string"}
						},
						"colStyles": {
							"type": "array",
							"items": {"type" : "string"}
						},
						"rowLabels": {
							"type": "array",
							"items": {"type": "string"}
						},
						"rowStyles": {
							"type": "array",
							"items": {"type" : "string"}
						},
						"rows": {
							"type": "array",
							"items": {
								"oneOf" : [
									{
										"type": "array",
										"items": {
											"$ref": "/Entry"
										}
									},
									{
										"$ref": "#/definitions/entryTableRow"
									}
								]
							}
						},
						"footnotes": {
							"type": "array",
							"items": {
								"$ref": "/Entry"
							}
						}
					},
					"required": ["rows"],
					"additionalProperties": false
				}
			]
		},
		"entryTableRow": {
			"allOf" : [
				{"$ref" : "#/definitions/entry"},
				{
					"properties": {
						"type": {
							"const": "row"
						},
						"style": {
							"type": "string"
						},
						"row": {
							"type": "array",
							"items": {
								"$ref": "/Entry"
							}
						}
					},
					"required": [
						"row"
					],
					"additionalProperties": false
				}
			]
		},
		"entryTableCell": {
			"allOf" : [
				{"$ref" : "#/definitions/entry"},
				{
					"properties": {
						"type": {
							"const": "cell"
						},
						"width": {
							"type": "integer"
						},
						"roll": {
							"type": "object",
							"properties": {
								"oneOf": [
									{
										"min": {
											"type": "integer"
										},
										"max": {
											"type": "integer"
										}
									},
									{
										"exact": {
											"type": "integer"
										}
									}
								],
								"entry": {
									"$ref": "/Entry"
								},
								"pad": {
									"type": "boolean"
								}
							}
						},
						"entry": {
							"$ref": "/Entry"
						}
					},
					"additionalProperties": false
				}
			]
		},
		"entryList": {
			"allOf" : [
				{"$ref" : "#/definitions/entry"},
				{
					"properties": {
						"type": {"const": "list"},
						"style": {
							"type": "string"
						},
						"name": {
							"type": "string"
						},
						"items": {
							"type": "array",
							"items": {
								"$ref": "/Entry"
							}
						}
					},
					"required": ["items"],
					"additionalProperties": false
				}
			]
		},
		"entryBonus": {
			"allOf" : [
				{"$ref" : "#/definitions/entry"},
				{
					"properties": {
						"type": {"const": "bonus"},
						"value": {
							"type": "integer"
						}
					},
					"required": ["value"],
					"additionalProperties": false
				}
			]
		},
		"entryBonusSpeed": {
			"allOf" : [
				{"$ref" : "#/definitions/entry"},
				{
					"properties": {
						"type": {"const": "bonusSpeed"},
						"value": {
							"type": "integer"
						}
					},
					"required": ["value"],
					"additionalProperties": false
				}
			]
		},
		"entryDice": {
			"allOf" : [
				{"$ref" : "#/definitions/entry"},
				{
					"properties": {
						"type": {"const": "dice"},
						"toRoll": {
							"type": "array",
							"items": {
								"type": "object",
								"properties": {
									"number": {
										"type": "integer"
									},
									"faces": {
										"type": "integer"
									},
									"modifier": {
										"description": "(Warning: unused)",
										"type": "integer"
									},
									"hideModifier": {
										"description": "(Warning: unused)",
										"type": "boolean"
									}
								},
								"required": ["number", "faces"]
							}
						},
                        "rollable": {
                            "type": "boolean"
                        }
					},
					"additionalProperties": false
				}
			]
		},
		"entryAbilityDc": {
			"allOf" : [
				{"$ref" : "#/definitions/entry"},
				{
					"properties": {
						"type": {"const": "abilityDc"},
						"name": {
							"type": "string"
						},
						"attributes": {
							"type": "array",
							"items": {
								"type": "string",
								"enum": ["str", "dex", "con", "int", "wis", "cha"]
							}
						}
					},
					"required": ["name", "attributes"],
					"additionalProperties": false
				}
			]
		},
		"entryAbilityAttackMod": {
			"allOf" : [
				{"$ref" : "#/definitions/entry"},
				{
					"properties": {
						"type": {"const": "abilityAttackMod"},
						"name": {
							"type": "string"
						},
						"attributes": {
							"type": "array",
							"items": {
								"type": "string",
								"enum": ["str", "dex", "con", "int", "wis", "cha"]
							}
						}
					},
					"required": ["name", "attributes"],
					"additionalProperties": false
				}
			]
		},
		"abilityGeneric": {
			"allOf" : [
				{"$ref" : "#/definitions/entry"},
				{
					"properties": {
						"type": {"const": "abilityGeneric"},
						"name": {
							"type": "string"
						},
						"text": {
							"type": "string"
						},
						"attributes": {
							"type": "array",
							"items": {
								"type": "string",
								"enum": ["str", "dex", "con", "int", "wis", "cha"]
							}
						}
					},
					"required": ["text"],
					"additionalProperties": false
				}
			]
		},
		"entryLink": {
			"allOf" : [
				{"$ref" : "#/definitions/entry"},
				{
					"properties": {
						"type": {"const": "link"},
						"text": {
							"type": "string"
						},
						"href": {
							"oneOf": [
								{
									"properties": {
										"type": {"const": "internal"},
										"path": {
											"type": "string"
										},
										"hash": {
											"type": "string"
										},
										"hashPreEncoded": {
											"type": "boolean"
										},
										"subhashes": {
											"type": "array",
											"items": {
												"type": "object",
												"properties": {
													"key": {
														"type": "string"
													},
													"oneOf": [
														{
															"properties": {
																"value": {
																	"type": "string"
																}
															},
															"required": ["value"],
															"additionalProperties": false
														},
														{
															"properties": {
																"values": {
																	"type": "array",
																	"items": {
																		"type": "string"
																	}
																}
															},
															"required": ["values"],
															"additionalProperties": false
														}
													]
												},
												"required": ["key"],
												"additionalProperties": false
											}
										},
										"hover": {
											"type": "object",
											"properties": {
												"page": {
													"type": "string"
												},
												"source": {
													"type": "string"
												}
											},
											"additionalProperties": false,
											"required": ["page", "source"]
										}
									},
									"required": ["path"],
									"additionalProperties": false
								},
								{
									"properties": {
										"type": {"const": "external"},
										"url": {
											"type": "string"
										}
									},
									"required": ["url"],
									"additionalProperties": false
								}
							]
						}
					},
					"required": ["text", "href"],
					"additionalProperties": false
				}
			]
		},
		"entryOptFeature": {
			"description": "For e.g. Eldritch Invocations which require prerequisite text",
			"allOf" : [
				{"$ref" : "#/definitions/entry"},
				{
					"properties": {
						"name": {
							"type": "string"
						},
						"type": {"const": "optfeature"},
						"prerequisite": {
							"type": "string"
						}
					},
					"required": ["name"]
				}
			]
		},
		"entryPatron": {
			"allOf" : [
				{"$ref" : "#/definitions/entry"},
				{
					"properties": {
						"name": {
							"type": "string"
						},
						"type": {"const": "patron"}
					},
					"required": ["name"]
				}
			]
		},
		"entryInset": {
			"allOf" : [
				{"$ref" : "#/definitions/entry"},
				{
					"properties": {
						"type": {"const": "inset"},
						"name": {
							"type": "string"
						},
						"entries": {
							"type": "array",
							"items": {
								"$ref": "/Entry"
							}
						},
						"data": {
							"type": "object"
						}
					},
					"required": ["entries"],
					"additionalProperties": false
				}
			]
		},
		"entryInsetReadaloud": {
			"allOf" : [
				{"$ref" : "#/definitions/entry"},
				{
					"properties": {
						"type": {"const": "insetReadaloud"},
						"entries": {
							"type": "array",
							"items": {
								"$ref": "/Entry"
							}
						}
					},
					"required": ["entries"]
				}
			]
		},
		"entryVariant": {
			"allOf" : [
				{"$ref" : "#/definitions/entry"},
				{
					"properties": {
						"type": {"const": "variant"},
						"name": {
							"type": "string"
						},
						"entries": {
							"type": "array",
							"items": {
								"$ref": "/Entry"
							}
						},
						"variantSource": {
							"type": "object",
							"properties": {
								"source": {
									"type": "string"
								},
								"page": {
									"type": "integer"
								}
							},
							"required": ["source", "page"],
							"additionalProperties": false
						}
					},
					"required": ["name", "entries"]
				}
			]
		},
		"entryVariantSub": {
			"allOf" : [
				{"$ref" : "#/definitions/entry"},
				{
					"properties": {
						"type": {"const": "variantSub"},
						"name": {
							"type": "string"
						},
						"entries": {
							"type": "array",
							"items": {
								"$ref": "/Entry"
							}
						}
					},
					"required": ["name", "entries"],
					"additionalProperties": false
				}
			]
		},
		"entryItem": {
			"allOf" : [
				{"$ref" : "#/definitions/entry"},
				{
					"oneOf": [
						{
							"properties": {
								"type": {"const": "item"},
								"name": {
									"type": "string"
								},
								"entry": {
									"$ref": "/Entry"
								}
							},
							"required": ["name", "entry"],
							"additionalProperties": false
						},
						{
							"properties": {
								"type": {"const": "item"},
								"name": {
									"type": "string"
								},
								"entries": {
									"type": "array",
									"items": {
										"$ref": "/Entry"
									}
								}
							},
							"required": ["name", "entries"],
							"additionalProperties": false
						}
					]
				}
			]
		},
		"entryItemSub": {
			"allOf" : [
				{"$ref" : "#/definitions/entry"},
				{
					"properties": {
						"type": {"const": "itemSub"},
						"name": {
							"type": "string"
						},
						"entry": {
							"$ref": "/Entry"
						}
					},
					"required": ["name", "entry"],
					"additionalProperties": false
				}
			]
		},
		"entryItemSpell": {
			"allOf" : [
				{"$ref" : "#/definitions/entry"},
				{
					"properties": {
						"type": {"const": "itemSpell"},
						"name": {
							"type": "string"
						},
						"entry": {
							"$ref": "/Entry"
						}
					},
					"required": ["name", "entry"],
					"additionalProperties": false
				}
			]
		},
		"entryImage": {
			"allOf" : [
				{"$ref" : "#/definitions/entry"},
				{
					"properties": {
						"type": {"const": "image"},
						"href": {
							"oneOf": [
								{
									"properties": {
										"type": {"const": "internal"},
										"path": {
											"type": "string"
										}
									},
									"required": ["path"],
									"additionalProperties": false
								},
								{
									"properties": {
										"type": {"const": "external"},
										"url": {
											"type": "string"
										}
									},
									"required": ["url"],
									"additionalProperties": false
								}
							]
						},
						"title": {
							"type": "string"
						},
						"imageType": {
							"type": "string",
							"enum": [
								"map"
							]
						}
					},
					"required": ["href"],
					"additionalProperties": false
				}
			]
		},
		"entryGallery": {
			"allOf" : [
				{"$ref" : "#/definitions/entry"},
				{
					"properties": {
						"type": {"const": "gallery"},
						"images": {
							"type": "array",
							"items": {
								"$ref": "#/definitions/entryImage"
							}
						}
					},
					"required": ["images"],
					"additionalProperties": false
				}
			]
		},
		"entryActions": {
			"allOf" : [
				{
					"properties": {
						"type": {"const": "actions"},
						"name": {
							"type": "string"
						},
						"entries": {
							"type": "array",
							"items": {
								"$ref": "/Entry"
							}
						}
					},
					"required": ["type", "name", "entries"],
					"additionalProperties": false
				}
			]
		},
		"entryAttack": {
			"allOf" : [
				{"$ref" : "#/definitions/entry"},
				{
					"properties": {
						"type": {"const": "attack"},
						"attackType": {
							"type": "string",
							"enum": ["MW", "RW"]
						},
						"attackEntries": {
							"type": "array",
							"items": {
								"$ref": "/Entry"
							}
						},
						"hitEntries": {
							"type": "array",
							"items": {
								"$ref": "/Entry"
							}
						}
					},
					"required": [
						"type",
						"attackType",
						"attackEntries",
						"hitEntries"
					],
					"additionalProperties": false
				}
			]
		},
		"entryDataCreature": {
			"properties": {
				"type": {"const": "dataCreature"},
				"dataCreature": {
					"$ref" : "/Bestiary#/definitions/creature"
				}
			},
			"required": [
				"type",
				"dataCreature"
			]
		}
	},

	"anyOf": [
		{"$ref": "#/definitions/entrySection"},
		{"$ref": "#/definitions/entryEntries"},
		{"$ref": "#/definitions/entryHomebrew"},
		{"$ref": "#/definitions/entryQuote"},
		{"$ref": "#/definitions/entryInlineEntries"},
		{"$ref": "#/definitions/entryEntriesInlineEntries"},
		{"$ref": "#/definitions/entryOptions"},
		{"$ref": "#/definitions/entryTable"},
		{"$ref": "#/definitions/entryTableRow"},
		{"$ref": "#/definitions/entryTableCell"},
		{"$ref": "#/definitions/entryList"},
		{"$ref": "#/definitions/entryBonus"},
		{"$ref": "#/definitions/entryBonusSpeed"},
		{"$ref": "#/definitions/entryDice"},
		{"$ref": "#/definitions/entryAbilityDc"},
		{"$ref": "#/definitions/entryAbilityAttackMod"},
		{"$ref": "#/definitions/abilityGeneric"},
		{"$ref": "#/definitions/entryLink"},
		{"$ref": "#/definitions/entryOptFeature"},
		{"$ref": "#/definitions/entryPatron"},
		{"$ref": "#/definitions/entryInset"},
		{"$ref": "#/definitions/entryInsetReadaloud"},
		{"$ref": "#/definitions/entryVariant"},
		{"$ref": "#/definitions/entryVariantSub"},
		{"$ref": "#/definitions/entryItem"},
		{"$ref": "#/definitions/entryItemSub"},
		{"$ref": "#/definitions/entryItemSpell"},
		{"$ref": "#/definitions/entryImage"},
		{"$ref": "#/definitions/entryGallery"},
		{"$ref": "#/definitions/entryActions"},
		{"$ref": "#/definitions/entryAttack"},
		{"$ref": "#/definitions/entryAttack"},
		{"$ref": "#/definitions/entryDataCreature"},
		{"type": "string"},
		{"type": "integer"}
	]
}