Configuring Systems#
NPC supports custom game systems in addition to its built-in systems. Custom systems can be defined within your user settings directory, or within a campaign’s settings directory. See File Locations for how to find these.
System Files#
System files are written in yaml and found within the systems/
directory inside a settings directory. The name of the file must match the name of the file’s primary key.
For example, a custom system definition for Savage Worlds in a campaign would be found in .npc/systems/savage_worlds.yaml
.
Caution
Systems are defined in their own files for portability and maintanability. Technically, they can also be defined in a subkey within npc.systems
in settings.yaml
, but this is generally a bad idea. Doing so prevents inheritence and ties the system to that specific settings file. Still, it can sometimes be useful for prototyping.
System Format#
Each system file must begin with a single top-level key. This key is the System Key and is used by NPC to look up the system. Within this key, there are a few required and optional properties:
- name:
required The full name of the game system
- desc:
required A single line of text that gives an overview of the game system
- doc:
A multiline block of text describing the details of the game system
- extends:
The key of a different system. When present, the configuration for that system will be imported into the current system before being altered by the current configuration.
- links:
Labelled URLs that are relevant to this system, like its SRD and homepage
- tags:
Configuring Tags for how to format these.
Tag objects unique to this game system. See- metatags:
Tags which set one or more other tags when found. They do not appear as separate tags in the parsed character data, but may be used as shorthand to set multiple tags at once.
You are also free to add additional data. This data will not be used by NPC, but may be useful for other custom tools or just to keep track of certain bits of data.
Here is one example of a truly minimal game system, in bikes.yaml
:
bikes:
name: Kids on Bikes
desc: Rules-light, storytelling system set in a small town with big mysteries.
Adding Links#
Links are simple URLs that can take the user to relevant documentation, licensing, or other information for the game system. They’re defined as a list of objects with these properties:
- label:
Text to display that identify the purpose of this URL
- url:
The URL to go to
Here’s an example of Kids on Bikes with a link added:
bikes:
name: Kids on Bikes
desc: Rules-light, storytelling system set in a small town with big mysteries.
links:
- label: Homepage
url: https://www.huntersentertainment.com/kidsonbikesrpg
Configuring Character Types#
Character types are closely tied to their systems, as the types available often relate directly to the assumptions of the game system.
Type Files#
Each type is defined in its own yaml file. For types defined in the user settings, the file is located within types/system_key/
, where system_key
matches the System Key of the game system the character type is for.
Types defined within a campaign’s settings are in types/
, as the system is assumed from the campaign’s settings.yaml
.
Type Format#
Each character type file must begin with a single top-level key. This key is the Type Key and is used by NPC to look up the character type. Within this key, there are a few required and optional properties:
- name:
required The full name of this character type
- desc:
required A single line of text describing the gist of the character type’s purpose
- doc:
A multiline block of text describing the details and nuances of the character type
- tags:
Configuring Tags for how to format these.
Tag objects unique to this character type. See
Here is an example of a simple character type for the FATE system, which could be in the user settings in types/fate/supporting.yaml
:
supporting:
name: Supporting
desc: A supporting character
doc: >
Usually the face of a location or group, or someone else who plays an
important role in the story or the players' lives.
Type Templates#
Custom type templates can be used along with custom character types to change the file body for new characters using that type. They’re found in the same directory as the type definition file and share its name. The file extension for a sheet template must be either .npc
, or the name of the System Key.
The contents of the template are added to a new character file after all of its tags. For this reason, the template should start with a header like --Notes--
.