Homebrew: Optional Features

From 5etools Community Wiki
Revision as of 13:15, 3 February 2021 by GoR (talk | contribs) (Change featureType from string to array in the skeleton)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

framless
v1.1.0

Building Optional Features

As with any Homebrew item, make sure you have reviewed the _Meta section. If your file doesn't have it, it won't work.

Basic skeleton

To start, copy the following code block and fill the empty "" values.

Optional Features code block
"optionalfeature": [
    {
        "name": "",
        "source": "",
        "page": 0,
        "featureType": [
            ""
        ],
        "entries": [
            ""
        ]
    }
]
  • "name" — the name of the feat.
  • "source" — make sure it is the same as the "json" key in the _meta.
  • "page" — page of the document the hazard appears at (leave at 0 if not applicable).
  • "featureType" — the type of optional feature. To see all the different options, see the table at the bottom of this section. To have several types, add strings separated by comma.
  • "entries" — consists of text strings ("") separated by commas.
Optional Feature types
Type Meaning
"ED" Elemental Discipline
"EI" Eldritch Invocation
"MM" Metamagic
"MV" Maneuver
"MV:B" Maneuver, Battle Master
"OTH" Other
"FS:F" Fighting Style, Fighter
"FS:B" Fighting Style, Bard
"FS:R" Fighting Style, Ranger
"FS:P" Fighting Style, Paladin
"MV:C2-UA" Maneuver, Cavalier V2 (UA)
"AS:V1-UA" Arcane Shot, V1 (UA)
"AS:V2-UA" Arcane Shot, V2 (UA)
"AS" Arcane Shot
"PB" Pact Boon
"AI" Artificer Infusion
"SHP:H" Ship Upgrade, Hull
"SHP:M" Ship Upgrade, Movement
"SHP:W" Ship Upgrade, Weapon
"SHP:F" Ship Upgrade, Figurehead
"SHP:O" Ship Upgrade, Miscellaneous
"IWM:W" Infernal War Machine Variant, Weapon
"IWM:A" Infernal War Machine Upgrade, Armor
"IWM:G" Infernal War Machine Upgrade, Gadget
"OR" Onomancy Resonant
"RN" Rune Knight Rune
"AF" Alchemical Formula
PLEASE NOTE: additional optionalFeatureTypes can be defined in the _Meta. See its page for info on how to.

More options

Make sure you are adding these blocks in the same level as the "name", "source", etc.

Prerequisite

Some options will have a prerequisite, something that the player needs to fulfill if they want to be able to pick it, such as being a member of a certain race or having a high ability score. This is a very flexible category, so it is divided in several blocks.

Level

The simplest way to restrict by level is by Player Character level.

"prerequisite": [
    {
        "level": 10
    }
]

It is also possible to restrict by class/subclass level

"prerequisite": [
    {
        "level": {
            "level": 5,
            "class":{
                "name": "Fighter",
                "source":"PHB",
                "visible": true
            }
        }
    }
]
  • "visible" — Governs whether or not the class name is visible in the list display/prerequisite line. Not recommended for features which implicitly carry a class restriction, such as Eldritch Invocations.
  • To restrict by subclass, simply change "class" for "subclass" while using the same structure. Note that the subclass short name is to be used, and that you need to have both class and subclass prerequisites for the latter to show.

Race

"prerequisite": [
    {
        "race": [
            {
                "name": "Elf",
                "subrace": "drow",
                "displayEntry": "Tel-quessir"
            }
        ]
    }
]
  • "name" — the name of the race
  • "subrace" — optional, name of the subrace
  • "displayEntry" — optional long-form name to be used in the rendered entity.

Ability

Write the first 3 letters of the ability, followed by the minimum score.

"prerequisite": [
    {
        "ability": [
            {
                "dex": 13
            }
        ]
    }
]

Spellcasting

The ability to cast at least one spell

"prerequisite": [
    {
        "spellcasting": true
    }
]

Pact

Warlock pacts, like "Chain", "Tome", "Blade" or "Talisman".

"prerequisite": [
    {
        "pact": "Chain"
    }
]

Patron

Warlock patrons.

"prerequisite": [
    {
        "patron": "The Archfey"
    }
]

Spell

The knowledge of a spell.

"prerequisite": [
    {
        "spell": [
            "eldritch blast"
        ]
    }
]
  • If the spell's source is not PHB, add it to the name followed by a | e.g. "Absorb Elements|XGE".
  • If the name of the spell contains #c at the end, it will render as "Eldritch Blast cantrip".

Feature

Sometimes a feature is an advanced version of a previous one.

"prerequisite": [
    {
        "feature": [
            "Alert"
        ]
    }
]

Item

Mostly used for Artificer infusions.

"prerequisite": [
    {
        "item": [
            "A suit of armor or a shield"
        ]
    }
]

Psionics

The ability to cast psionic powers.

"prerequisite": [
    {
        "psionics": true
    }
]

Proficiency

Proficiency with different categories of weapons or armor.

"prerequisite": [
    {
        "proficiency": [
            {
                "weapon": "martial"
            },
            {
                "armor": "heavy"
            }
        ]
    }
]
  • For weapons, choose between "simple", "martial" or the name of the weapon.
  • For armor, choose between "light", "medium", "heavy" or the name of the armor.

Other

A free text prerequisite. Will render as "Special" in the table, with the text in the entry.

"prerequisite": [
    {
        "other": "Two eyes"
    }
]

To have a specific test in the table, use this format:

"prerequisite": [
    {
        "otherSummary": {
            "entry": "The full description",
            "entrySummary": "Short desc."
        }
    }
]
  • "entrySummary" — used in short/list displays.

Previous version

If your homebrew feature is a modification of an existing one, you can point to the original one. This will automatically render a link at the end of the text entry.

"previousVersion": {
    "name": "Aspect of the Moon",
    "source": "UAWarlockAndWizard"
}

Reference Tag

How to link to entries within the strings

{@optfeature <optional_feature_name> |<json_source>|<optional_text_information>}
Example:
{@optfeature Aspect of the Moon|xge}
{@optfeature Aspect of the Moon|xge|and optional link text added with another pipe}


Field List Sources

If you do not include the required fields (denoted with bold text) the JSON may pass JSONLint but will fail upon stitch.

Field Name Data Type Description Required
name String The optional feature's title True
prerequisite Object False
entries Array of Strings action description True
previousVersion Object False
source String json (_meta's json value) True
page Integer page number within source False
featureType Object True
otherSources Object descript False
srd Boolean If the entry is in the SRD False





🗄️ Reference Files:
🛢️ Requirements Specs (Schemata)
[[ |🧾 Blank Template]]
📖 Sample JSON
💾 Functional Example
📚 Repository of Other Examples

Homebrew Support


Known Issues
Looks like its perfect... (Did we miss anything?)


FAQ
Nothing's here (Do you have any suggestions?)
Best Practices
None as yet (Do you have any suggestions?)



Related Features



Did that answer your question(s)?

If not please check the under Support; Troubleshooting or the Known Issues page for further guidance, or go to the Discord community and leave a comment in the issues channel.

If you enjoy the project, please follow this link to see how you can contribute and help make it even better.

Do you have time to take a Survey?