This is a character sheet for Beam Saber by Austin Ramsay, a Forged in the Dark game about the pilots of powerful machines in a war with no end in sight.
In rough order, loosely arranged by what will probably happen next:
Join us on the Beam Saber Discord server, submit issues and Pull Requests if you like. Until I get more organized Discord will be the place to make sure no one is duplicating efforts. That said, if it's not listed above, I haven't thought about it, so... :)
Well, that's my pitch. If you'd like to use this in your games on Roll20, for now you'll need a Pro account so that you can use custom character sheets. Copy the raw beamsaber.html
, beamsaber.css
, and translation.json
to their respective sections in the Game Settings page of your campaign, and know that I might break data with updates while the sheet remains very incomplete (but I will try not to).
Once the sheet has reached a point of stability, I plan to submit it for inclusion as a Community Sheet on Roll20 and support it there.
This sheet is built on the foundation of the excellent Blades in the Dark character sheet template. The original details and documentation for the template are below, unaltered.
This is a template for creating a derivative of the character sheet for Blades in the Dark for use on Roll20. If you have any questions, feel free to contact me on Discord @deceptive.duality#6358.
This is the stripped-down version of the sheet containing none of the Blades-specific data. This is probably the best code base to start at when you want to create a sheet for a fresh hack. If you want to have a look at how to structure your data, or if you want to start from Blades in the Dark as a base, look at the master branch instead. If you want to see an example of a complete sheet created from this template, have a look at the A Nocturne branch of this repository.
Switched from command line sass to node-sass. This makes installing the required dependencies a bit more intuitive to install.
Apart from bugfixes, some changes made to the Blades sheet were backported to the templated version. Moreover, this template vas reset to internal version number 1.0, since a new sheet really should not start at 2.7. The following innovations of the Blades sheet were backported:
To work with this sheet template, you need to first install Node.js.
To install all of the Node packages required to compile and work with the sheets, open a command-prompt and run
npm install
This will install all the dependencies defined in package.json
. If you would
prefer to install dependencies manually, you can:
npm install pug node-sass jstransformer jstransformer-babel babel-preset-minify
The sheet uses pug as a HTML preprocessor and sass as a CSS preprocessor. This means that you need to compile the two main source code files (Source/blades.pug
and Source/blades.scss
) into the actual blades.html
and blades.css
files. It also uses Babel (via JSTransformer) to minify the Javascript code, though this is optional (read below on how to disable it if it produces problems). Once the command line interfaces for pug and sass are installed, the sheet is compiled via
node build.js
executed in the root directory of this code.
If you want to change the look of the sheet or the roll template, you should already know how CSS works: in this case, just go ahead and change the sheet.scss
and rolltemplate.scss
to your heart's content. Sass is an extension of CSS, so if you don't know sass, just adding CSS code will work just fine.
For changing the content of the sheet, you will have to make changes to the pug files (for the HTML), the translation.json
file (for changing the actual text on the sheet), or to the data.json
and sheetworkers.js
files.
If you do not feel comfortable working with pug or sass, the Source/uncompressed
folder contains compiled, but human-readable versions of blades.html
and blades.css
. Editing them is more work, however (for example for changing action names). It is highly recommended that you at least start by making changes to the .pug files instead.
If you have made some changes in pug, e.g. action names, and want to transition to doing the rest of the editing in HTML, you can change the pretty
option to true
in the build.js file. This will produce human-readable HTML/CSS for you to edit further.
Sometimes the babel filter does not seem to work and produces errors. You can change enableBabel
to false
in the build.js file to disable it. It will have no impact on the functionality of the sheet, and it will get rid of this error.
The translation.json
file contains all the text in the sheet and the roll template (set up for translation, hence the name). As indicated by the file name, the content is in JSON format, so it follows a "key": "value"
pattern. For almost all text changes, you will have to add or change keys/values here (and you might want to remove superfluous lines, though this is optional).
The base file for the pug code that generates the HTML is Source/blades.pug
. You will find some variables at the top of the file to change what the resulting HTML looks like. When building the sheet, this file pulls in information from the individual parts of the sheet in the Source/pug/
folder (the names should be self-explanatory), as well the data.json
and sheetworkers.js
files. If you want to change a specific part of the sheet, try searching around the indivual .pug
files to find the part you want to change (and if you cannot find it, feel free to ask me).
Any attribute that starts with "data-i18n" references a key in the translation.json variable — look it up there to find out what the specific text is (though it will often be obvious).
This file supplies the database used by the sheet worker scripts. It may look intimidatingly large at first, but most of this file is just the data for the various crews, playbooks, and factions. You will probably only have to change the data at the top of the script, not the code that comes after. Here's a short explanation of the data keys (more details in the "Common changes" section).
This is the source code for the part of the sheet workers that actually executes code. There's a good chance that no changes will be necessary here.
The sheet's CSS is generated from Source/blades.scss
, which is a short file that mostly combines Source/scss/sheet.scss
and Source/scss/rolltemplate.scss
, whose different functions should be self-explanatory.
All of the text visible on the sheet and in roll templates is translated text. Most of the text on the sheet can simply be changed by changing the corresponding value in the translation.json
file. In general, whenever you add new text to the sheet or change existing text, you will have to make changes to the translation.json
.
To effectively change action and/or attribute names, you need to make changes in two places. Everything except the value in the translation file should be strictly lowercase.
"hack": "Hack",
"hack_description": "Interface with machines. Manipulate computer systems, extract data, etc. (whatever your description for Hack is)",
Note that there is no need to have 3 attributes with 4 actions each, even though that is probably the case for most hacks. The code will adapt to whatever info you feed into actionData.
In order to change the non-playbook-specific gear that every character gets, you will need to edit the items
property in the data.json
file. The names of items (such as "a_blade_or_two") and their descriptions (such as "a_blade_or_two_description") are translated, so make sure to also edit the translation.json
file as well. The items are in the same order that they will appear on the sheet. The "numboxes" property controls the number of boxes, and "short": "1"
creates an item that only takes up half a line.
To change the factions, modify the factions property in the data.json
. The faction names (such as "The Circle of Flame") as well the headers (such as "Underworld") are translated, so be sure to change and/or add the corresponding keys in the translation.json
file, e.g. "faction_the_circle_of_flame": "The Circle of Flame",
and "factions1": "Underworld",
. You can play around with the number of faction "categories" in the faction.pug and the factions property - the numbers 1-5 in the faction.pug
correspond to factions1-factions5 in the data.json
.
The game logo is on line 635 of sheet.scss
.
You will have to edit both the data.json
and the translation.json
in order to modify playbooks/crews.
data.json
object. You can use one of the standard playbooks as a template."hacker": "Hacker",
.Some remarks on Step 2:
data.json
."playbook_hacker_friend_0": "Jack",
"playbook_hacker_friend_1": "Sue",
...
"playbook_hacker_friend_4": "AZ-215, a sentient AI",
The names of playbook items and their descriptions are pulled from the translation.json
, so make sure to make the necessary changes there. Same for crew upgrades.
If you (which is very likely) have new special abilities for your playbook or crew, just enter the name into the corresponding array; to add the actual data of the ability, add them to the translation.json, as detailed under "Special abilities".
Everything about a character/crew that's not abilities, friends/contacts, or items/upgrades, is detailed in the "base" property. Here, you change default action dots, xp triggers, gather information questions, the names of claims, et cetera. Take a look at the existing playbooks and crews for details.
In order to add or change special abilities, you need to change the translation.json file (note that adding special abilities will do nothing unless you also add or modify a playbook or crew so that it uses them). In order to do this, you need two new lines in the translation.json file for every new special ability, with keys playbook_ability_NAME
and playbook_ability_NAME_description
(for characters) or crew_ability_NAME
and crew_ability_NAME_description
(for crews). E.g:
"playbook_ability_hedonist": "Hedonist",
"playbook_ability_hedonist_description": "When you indulge your vice, you may adjust the dice outcome by +/-2. An ally who joins you may do the same.",
To modify traumas, change the traumaData property in the data.json
, and add any translations for new traumas to the translation.json
.
The crew upgrades are on line 249+ of the crew.pug. However, their default names and descriptions are actually translated values. To change them:
data.json
so that it reflects the upgrade numbers that exist now.translation.json
.In order, you might make these changes:
+makeupgrade(6, 1, 'racing_car', 'upgrade_racing_car_description')
...
"racing_car": "Racing Car",
"upgrade_racing_car_description": "This is a very fast car.",
The sheet still contains some of the more esoteric parts of the sheet, such as the strictures for vampires. While I do not expect anyone to use them as-is, they remain as a template for how to create custom special sections on the sheet. Some of them are toggled off via global variables in blades.pug
by default.