Fading Suns 4th Edition: Pax Alexius - 1.0.0 (#6297)

* project initialization

* first draft

* fixed firefox layout issue

* some progress done

* some more progress made

* additional progress

* circumvented Firefox focuss issue on notes textareas

* more progress

* only one section left

* first draft completed!

* fixed repeating action rolls

* After first feedback from testers

* translation improvement

* minor layout fix + french translation improvement

* first release

* added missing preview image
This commit is contained in:
admiralnlson
2020-04-27 11:50:17 -04:00
committed by GitHub
parent 8d70db29d5
commit 5f6e042daf
14 changed files with 7444 additions and 0 deletions
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 144 KiB

@@ -0,0 +1,21 @@
# Release notes
## 1.0.0
- First publicly available version of the sheet
# TODO list
- Add sheet preview image
- temporary bonus/malus for skills and characteristics
- auto-fail / prevents rolls of |R|equired skills (Alchemy, Interface, Pilot) if skill value is 0. Have to be sure no perk/capability exists to allow a roll anyway. If not sure, warn only.
- check if Occult characteristic
# Nice-to-have
- replace unstylable selects with custom-made absolute-positioned list of action buttons for characteristic/skill selections
- for Roll20 pro users:
- API for VP & WP management
- leverage this API from within the sheet
Freetext Buff/Debuff mod
@@ -0,0 +1,908 @@
{
"version": "7",
"about": "This is a Prepros (https://prepros.io) configuration file. You can commit this file to a git repo to backup and sync project configurations.",
"config": {
"proxy": {
"enable": false,
"target": "",
"useLocalAssets": false
},
"reload": {
"enable": false,
"delay": 0,
"animate": true,
"afterUpload": false
},
"sync": {
"enable": false,
"mouse": true,
"keyboard": true,
"form": true,
"scroll": true
},
"watcher": {
"enable": true,
"maxFiles": 2000,
"usePolling": false,
"pollingInterval": 500,
"extensions": [
".html",
".htm",
".php"
],
"ignore": {
"patterns": [
".*",
"wp-admin",
"wp-includes",
"node_modules",
"Prepros Export",
"bower_components"
],
"exceptions": []
}
},
"exporter": {
"ignore": {
"patterns": [
".*",
"desktop.ini",
"prepros.cfg",
"node_modules",
"Prepros Export",
"prepros.config",
"prepros-6.config",
"*-original.jpg",
"*-original.jpeg",
"*-original.png",
"*-original.svg",
"*.scss",
"*.sass",
"*.less",
"*.pug",
"*.jade",
"*.styl",
"*.haml",
"*.slim",
"*.coffee",
"*.kit",
"*.turf",
"*.ts"
],
"exceptions": []
}
},
"uploader": {
"remotePath": "",
"timeout": 20000,
"autoUpload": false,
"connectionType": "ftp",
"history": []
},
"packages": {
"createPackageLock": true
},
"tasks": {
"autoprefixer": {
"cascade": true,
"add": true,
"remove": true,
"supports": true,
"flexbox": true,
"grid": "false",
"browsers": [
"> 2%",
"not dead"
],
"sourceMap": false
},
"babel": {
"sourceMap": false,
"presets": {
"@babel/preset-env": {
"enable": true,
"options": {
"targets": [
"> 2%",
"not dead"
],
"preserveImports": false
}
},
"@babel/preset-react": true,
"@babel/preset-flow": false
},
"plugins": {
"@babel/plugin-proposal-class-properties": false,
"@babel/plugin-proposal-decorators": {
"enable": false,
"options": {
"decoratorsBeforeExport": true
}
},
"@babel/plugin-proposal-export-namespace-from": false,
"@babel/plugin-proposal-function-sent": false,
"@babel/plugin-proposal-nullish-coalescing-operator": false,
"@babel/plugin-proposal-numeric-separator": false,
"@babel/plugin-proposal-optional-chaining": false,
"@babel/plugin-proposal-private-methods": false,
"@babel/plugin-proposal-throw-expressions": false
},
"customPresets": [],
"customPlugins": []
},
"bundle-js": {
"sourceMap": false,
"exclude": [
"node_modules",
"bower_components"
],
"devMode": true,
"globals": [],
"externals": [],
"babel": {
"enable": true,
"options": {
"sourceMap": false,
"presets": {
"@babel/preset-env": {
"enable": true,
"options": {
"targets": [
"> 2%",
"not dead"
],
"preserveImports": false
}
},
"@babel/preset-react": true,
"@babel/preset-flow": false
},
"plugins": {
"@babel/plugin-proposal-class-properties": false,
"@babel/plugin-proposal-decorators": {
"enable": false,
"options": {
"decoratorsBeforeExport": true
}
},
"@babel/plugin-proposal-export-namespace-from": false,
"@babel/plugin-proposal-function-sent": false,
"@babel/plugin-proposal-nullish-coalescing-operator": false,
"@babel/plugin-proposal-numeric-separator": false,
"@babel/plugin-proposal-optional-chaining": false,
"@babel/plugin-proposal-private-methods": false,
"@babel/plugin-proposal-throw-expressions": false
},
"customPresets": [],
"customPlugins": []
}
},
"css": {
"enable": true
},
"fonts": {
"enable": true
}
},
"coffeescript": {
"header": false,
"bare": false,
"sourceMap": false
},
"command": {
"command": "",
"rootDir": ""
},
"concat-js": {
"sourceMap": false,
"rootDir": ""
},
"copy": {
"sourceMap": false
},
"dart-sass": {
"indentType": "space",
"indentWidth": 4,
"linefeed": "lf",
"sourceMap": false
},
"haml": {
"doubleQuoteAttributes": true
},
"jpg": {
"quality": 90
},
"less": {
"javascriptEnabled": false,
"strictImports": false,
"insecure": false,
"math": "always",
"strictUnits": false,
"dumpLineNumbers": false,
"sourceMap": false
},
"markdown": {
"githubFlavored": true,
"wrapWithHtml": false
},
"minify-css": {
"sourceMap": false
},
"minify-html": {
"caseSensitive": false,
"collapseBooleanAttributes": true,
"collapseInlineTagWhitespace": false,
"collapseWhitespace": true,
"conservativeCollapse": false,
"decodeEntities": false,
"html5": true,
"includeAutoGeneratedTags": true,
"keepClosingSlash": false,
"minifyCSS": true,
"minifyJS": true,
"preserveLineBreaks": false,
"preventAttributesEscaping": false,
"processConditionalComments": false,
"removeAttributeQuotes": false,
"removeComments": true,
"removeEmptyAttributes": false,
"removeEmptyElement": false,
"removeOptionalTags": false,
"removeRedundantAttributes": false,
"removeScriptTypeAttributes": false,
"removeStyleLinkTypeAttributes": false,
"removeTagWhitespace": false,
"sortAttributes": false,
"sortClassName": false,
"useShortDoctype": true
},
"minify-js": {
"parse": {
"bare_returns": false
},
"compress": {
"arrows": true,
"arguments": false,
"booleans": true,
"booleans_as_integers": false,
"collapse_vars": true,
"comparisons": true,
"computed_props": true,
"conditionals": true,
"dead_code": true,
"directives": true,
"drop_console": false,
"drop_debugger": true,
"evaluate": true,
"expression": false,
"global_defs": [],
"hoist_funs": false,
"hoist_props": true,
"hoist_vars": false,
"if_return": true,
"inline": 3,
"join_vars": true,
"keep_fargs": true,
"keep_infinity": false,
"loops": true,
"negate_iife": true,
"properties": true,
"pure_funcs": [],
"pure_getters": false,
"reduce_vars": true,
"sequences": true,
"side_effects": true,
"switches": true,
"top_retain": [],
"typeofs": true,
"unsafe": false,
"unsafe_arrows": false,
"unsafe_comps": false,
"unsafe_Function": false,
"unsafe_math": false,
"unsafe_proto": false,
"unsafe_regexp": false,
"unsafe_undefined": false,
"unused": true
},
"mangle": {
"eval": false,
"reserved": []
},
"output": {
"ascii_only": false,
"braces": false,
"comments": "none",
"inline_script": true,
"keep_numbers": false,
"keep_quoted_props": false,
"preamble": null,
"quote_keys": false,
"quote_style": 0,
"semicolons": true,
"shebang": true,
"webkit": false,
"wrap_iife": false,
"wrap_func_args": true
},
"sourceMap": false,
"toplevel": false,
"ie8": false,
"keep_classnames": false,
"keep_fnames": false,
"safari10": false
},
"node-sass": {
"indentType": "space",
"indentWidth": 2,
"linefeed": "lf",
"outputStyle": "expanded",
"precision": 10,
"sourceMap": false,
"sourceComments": false
},
"png": {
"quality": 90
},
"pug": {
"pretty": true
},
"slim": {
"indent": "space",
"indentSize": 2,
"pretty": true
},
"stylus": {
"useNib": true,
"sourceMap": false,
"linenos": false
},
"svg": {
"cleanupAttrs": true,
"removeDoctype": true,
"removeXMLProcInst": true,
"removeComments": true,
"removeMetadata": true,
"removeTitle": true,
"removeDesc": true,
"removeUselessDefs": true,
"removeEditorsNSData": true,
"removeEmptyAttrs": true,
"removeHiddenElems": true,
"removeEmptyText": true,
"removeEmptyContainers": true,
"removeViewBox": false,
"cleanupEnableBackground": true,
"convertStyleToAttrs": true,
"convertColors": true,
"convertPathData": true,
"convertTransform": true,
"removeUnknownsAndDefaults": true,
"removeNonInheritableGroupAttrs": true,
"removeUselessStrokeAndFill": true,
"removeUnusedNS": true,
"cleanupIDs": true,
"cleanupNumericValues": true,
"moveElemsAttrsToGroup": true,
"moveGroupAttrsToElems": true,
"collapseGroups": true,
"removeRasterImages": false,
"mergePaths": true,
"convertShapeToPath": true,
"sortAttrs": true,
"removeDimensions": true
},
"turf": {
"rootDir": ""
},
"typescript": {
"allowJs": false,
"allowSyntheticDefaultImports": true,
"allowUmdGlobalAccess": false,
"allowUnreachableCode": false,
"allowUnusedLabels": false,
"alwaysStrict": false,
"charset": "utf8",
"checkJs": false,
"declaration": false,
"disableSizeLimit": false,
"downlevelIteration": false,
"emitBOM": false,
"emitDecoratorMetadata": false,
"experimentalDecorators": false,
"forceConsistentCasingInFileNames": false,
"importHelpers": false,
"jsx": "React",
"keyofStringsOnly": false,
"lib": [],
"maxNodeModuleJsDepth": 0,
"module": "ES2015",
"moduleResolution": "NodeJs",
"newLine": "LineFeed",
"noFallthroughCasesInSwitch": false,
"noImplicitAny": false,
"noImplicitReturns": false,
"noImplicitThis": false,
"noStrictGenericChecks": false,
"noUnusedLocals": false,
"noUnusedParameters": false,
"noImplicitUseStrict": false,
"noLib": false,
"noResolve": false,
"preserveConstEnums": false,
"jsxFactory": "React.createElement",
"removeComments": false,
"skipLibCheck": false,
"sourceMap": false,
"strict": false,
"strictFunctionTypes": false,
"strictBindCallApply": false,
"strictNullChecks": false,
"strictPropertyInitialization": false,
"suppressExcessPropertyErrors": false,
"suppressImplicitAnyIndexErrors": false,
"target": "ES3",
"resolveJsonModule": false,
"esModuleInterop": false,
"useDefineForClassFields": false
},
"custom-p8o8uczp3f": {
"command": "more +1 < {{input}} > ./temp.css && move /Y ./temp.css {{output}}"
}
},
"fileTypes": {
"sass": {
"extensions": [
".scss",
".sass"
],
"autoCompile": true,
"sourceMap": false,
"tasks": [
{
"task": "dart-sass",
"enable": true
},
{
"task": "autoprefixer",
"enable": true
},
{
"task": "minify-css",
"enable": false
},
{
"task": "custom-p8o8uczp3f",
"enable": true
}
],
"output": {
"extension": ".css",
"type": "REPLACE_SEGMENTS",
"segments": [
{
"segment": "scss",
"replaceWith": "css"
},
{
"segment": "sass",
"replaceWith": "css"
}
]
}
},
"less": {
"extensions": [
".less"
],
"autoCompile": true,
"sourceMap": false,
"tasks": [
{
"task": "less",
"enable": true
},
{
"task": "autoprefixer",
"enable": true
},
{
"task": "minify-css",
"enable": false
}
],
"output": {
"extension": ".css",
"type": "REPLACE_SEGMENTS",
"segments": [
{
"segment": "less",
"replaceWith": "css"
}
]
}
},
"pug": {
"extensions": [
".pug",
".jade"
],
"autoCompile": true,
"tasks": [
{
"task": "pug",
"enable": true
},
{
"task": "minify-html",
"enable": false
}
],
"output": {
"extension": ".html",
"type": "REPLACE_SEGMENTS",
"segments": [
{
"segment": "pug",
"replaceWith": "html"
}
]
}
},
"css": {
"extensions": [
".css"
],
"autoCompile": false,
"sourceMap": false,
"tasks": [
{
"task": "copy",
"enable": true
},
{
"task": "autoprefixer",
"enable": true
},
{
"task": "minify-css",
"enable": true
}
],
"output": {
"extension": ".css",
"type": "SOURCE_RELATIVE",
"relativePath": "",
"suffix": "-dist",
"alwaysSuffix": false
}
},
"javascript": {
"extensions": [
".js",
".jsx"
],
"autoCompile": false,
"sourceMap": false,
"tasks": [
{
"task": "copy",
"enable": true
},
{
"task": "concat-js",
"enable": false
},
{
"task": "babel",
"enable": false
},
{
"task": "bundle-js",
"enable": false
},
{
"task": "minify-js",
"enable": true
}
],
"output": {
"extension": ".js",
"type": "SOURCE_RELATIVE",
"relativePath": "",
"suffix": "-dist",
"alwaysSuffix": false
}
},
"stylus": {
"extensions": [
".styl"
],
"autoCompile": true,
"sourceMap": false,
"tasks": [
{
"task": "stylus",
"enable": true
},
{
"task": "autoprefixer",
"enable": true
},
{
"task": "minify-css",
"enable": false
}
],
"output": {
"extension": ".css",
"type": "REPLACE_SEGMENTS",
"segments": [
{
"segment": "stylus",
"replaceWith": "css"
},
{
"segment": "styl",
"replaceWith": "css"
}
]
}
},
"markdown": {
"extensions": [
".md",
".markdown",
".mkd"
],
"autoCompile": false,
"tasks": [
{
"task": "markdown",
"enable": true
},
{
"task": "minify-html",
"enable": false
}
],
"output": {
"extension": ".html",
"type": "REPLACE_SEGMENTS",
"segments": [
{
"segment": "markdown",
"replaceWith": "html"
}
]
}
},
"haml": {
"extensions": [
".haml"
],
"autoCompile": true,
"tasks": [
{
"task": "haml",
"enable": true
},
{
"task": "minify-html",
"enable": false
}
],
"output": {
"extension": ".html",
"type": "REPLACE_SEGMENTS",
"segments": [
{
"segment": "haml",
"replaceWith": "html"
}
]
}
},
"slim": {
"extensions": [
".slim"
],
"autoCompile": true,
"tasks": [
{
"task": "slim",
"enable": true
},
{
"task": "minify-html",
"enable": false
}
],
"output": {
"extension": ".html",
"type": "REPLACE_SEGMENTS",
"segments": [
{
"segment": "slim",
"replaceWith": "html"
}
]
}
},
"coffeescript": {
"extensions": [
".coffee"
],
"autoCompile": true,
"sourceMap": false,
"tasks": [
{
"task": "coffeescript",
"enable": true
},
{
"task": "babel",
"enable": false
},
{
"task": "bundle-js",
"enable": false
},
{
"task": "minify-js",
"enable": false
}
],
"output": {
"extension": ".js",
"type": "REPLACE_SEGMENTS",
"segments": [
{
"segment": "coffee-script",
"replaceWith": "js"
},
{
"segment": "coffeescript",
"replaceWith": "js"
},
{
"segment": "coffee",
"replaceWith": "js"
}
]
}
},
"turf": {
"extensions": [
".turf",
".kit"
],
"autoCompile": true,
"tasks": [
{
"task": "turf",
"enable": true
},
{
"task": "minify-html",
"enable": false
}
],
"output": {
"extension": ".html",
"type": "REPLACE_SEGMENTS",
"segments": [
{
"segment": "turf",
"replaceWith": "html"
}
]
}
},
"typescript": {
"extensions": [
".ts",
".tsx"
],
"autoCompile": true,
"sourceMap": false,
"tasks": [
{
"task": "typescript",
"enable": true
},
{
"task": "babel",
"enable": false
},
{
"task": "bundle-js",
"enable": false
},
{
"task": "minify-js",
"enable": false
}
],
"output": {
"extension": ".js",
"type": "REPLACE_SEGMENTS",
"segments": [
{
"segment": "typescript",
"replaceWith": "js"
},
{
"segment": "ts",
"replaceWith": "js"
}
]
}
},
"jpg": {
"extensions": [
".jpg",
".jpeg"
],
"tasks": [
{
"task": "jpg",
"enable": true
}
],
"output": {
"extension": ".jpg",
"type": "SOURCE_RELATIVE",
"relativePath": ""
}
},
"png": {
"extensions": [
".png"
],
"tasks": [
{
"task": "png",
"enable": true
}
],
"output": {
"extension": ".png",
"type": "SOURCE_RELATIVE",
"relativePath": ""
}
},
"svg": {
"extensions": [
".svg"
],
"tasks": [
{
"task": "svg",
"enable": true
}
],
"output": {
"extension": ".svg",
"type": "SOURCE_RELATIVE",
"relativePath": ""
}
}
},
"files": [
{
"file": "src/Fading_Suns_4th_Edition_Pax_Alexius.pug",
"config": {
"customOutput": "Fading_Suns_4th_Edition_Pax_Alexius.html"
}
},
{
"file": "src/Fading_Suns_4th_Edition_Pax_Alexius.scss",
"config": {
"customOutput": "Fading_Suns_4th_Edition_Pax_Alexius.css"
}
}
]
}
}
@@ -0,0 +1,8 @@
{
"html": "Fading_Suns_4th_Edition_Pax_Alexius.html",
"css": "Fading_Suns_4th_Edition_Pax_Alexius.css",
"authors": "admiralnlson",
"roll20userid": "2324543",
"preview": "Fading_Suns_4th_Edition_Pax_Alexius.preview-en.jpg",
"instructions": "This character sheet is for **Fading Suns, Pax Alexius (a.k.a. 4th Edition) by Ulisses Spiele**.\nPlease go to [the dedicated wiki page](https://wiki.roll20.net/Fading_Suns_Pax_Alexius) for instructions on how to use the sheet.\nYou may also wish to check out the [project's README file](https://github.com/Roll20/roll20-character-sheets/blob/master/Fading%20Suns%20Pax%20Alexius/README.md), which contains release notes and planned evolutions.\n\nIssues, Ideas & Questions can be sent to the [admiralnlson](https://app.roll20.net/users/2324543), original author and current maintainer of this character sheet."
}
@@ -0,0 +1,405 @@
mixin label(i18n)
label(data-i18n=i18n )&attributes(attributes)
mixin numeric_input(attr_name, default_value, min_value=false)
input(name=`attr_${attr_name}` type='number' title=`\${${attr_name}}` + (default_value!==false ? `. Default: ${default_value}.` : '') value=default_value min=min_value)&attributes(attributes)
mixin text_input(attr_name)
input(name=`attr_${attr_name}` type='text' title=`\${${attr_name}}`)&attributes(attributes)
-
const characteristics = [
{ category: 'body', list: [ 'strength', 'dexterity', 'endurance' ] },
{ category: 'mind', list: [ 'wits', 'perception', 'will' ] },
{ category: 'spirit', list: [ 'presence', 'intuition', 'faith' ] }
];
mixin characteristic(name)
button.fs-d20(type='roll' name=`roll_${name}` value=`&{template:fs-GoalRoll} {{characterName=@{character_name}}} {{characteristicName-i18n=^{${name}}}} {{bonus_penalty=[[?{@{goal_bonus_penalty_rollquery_i18n}}]]}} {{goal=[[@{${name}}+[[?{@{goal_bonus_penalty_rollquery_i18n}}]]]]}} {{roll=[[1d20cs[[{@{${name}}+[[?{@{goal_bonus_penalty_rollquery_i18n}}]],19}kl1]]cf20]]}}`)
label.fs-characteristic-label
span(data-i18n=`${name}`)
+numeric_input(name, 3)
-
const skills = [
{ name: 'academia', default: 3 },
{ name: 'alchemy', default: 0 },
{ name: 'animalia', default: 3 },
{ name: 'arts', default: 3 },
{ name: 'charm', default: 3 },
{ name: 'crafts', default: 3 },
{ name: 'disguise', default: 3 },
{ name: 'drive', default: 3 },
{ name: 'empathy', default: 3 },
{ name: 'fight', default: 3 },
{ name: 'focus', default: 3 },
{ name: 'impress', default: 3 },
{ name: 'interface', default: 0 },
{ name: 'intrusion', default: 3 },
{ name: 'knavery', default: 3 },
{ name: 'melee', default: 3 },
{ name: 'observe', default: 3 },
{ name: 'perform', default: 3 },
{ name: 'pilot', default: 0 },
{ name: 'remedy', default: 3 },
{ name: 'shoot', default: 3 },
{ name: 'sleight_of_hand', default: 3 },
{ name: 'sneak', default: 3 },
{ name: 'survival', default: 3 },
{ name: 'tech_redemption', default: 3 },
{ name: 'vigor', default: 3 }
];
mixin skill(name, value)
.fs-skill
.fs-skill-normal
button.fs-d20(type='roll' name='roll_disabledbutton' value='' disabled='')
.fs-skill-roll-characteristic-choice
label
span(data-i18n=`${name}`) #{name}
| +
each charac_cat in characteristics
each characteristicName in charac_cat.list
div
div
button.fs-d20(type='roll' name=`roll_${characteristicName}_${name}` value=`&{template:fs-GoalRoll} {{characterName=@{character_name}}} {{characteristicName-i18n=^{${characteristicName}}}} {{skillName-i18n=^{${name}}}} {{bonus_penalty=[[?{@{goal_bonus_penalty_rollquery_i18n}}]]}} {{goal=[[@{${characteristicName}}+@{${name}}+[[?{@{goal_bonus_penalty_rollquery_i18n}}]]]]}} {{roll=[[1d20cs[[{@{${characteristicName}}+@{${name}}+[[?{@{goal_bonus_penalty_rollquery_i18n}}]],19}kl1]]cf20]]}}`)
label(data-i18n=`${characteristicName}`) #{characteristicName}
label.fs-skill-label
span(data-i18n=`${name}`) #{name}
+numeric_input(name, value)
// CHARACTER SHEET LAYOUT - START
.fs-sheet
input(type='hidden' name='attr_goal_bonus_penalty_rollquery_i18n' value='')
.fs-sheet-container
input(type='hidden' name='attr_sheet_version' value='latest')
.fs-baseinfo
.fs-sheet-section
label.fs-uppercase-header(data-i18n='name')
.fs-name-grid
+text_input('character_name')(class ='fs-name')
label.fs-planet(data-i18n='planet')
+text_input('planet')(class ='fs-planet')
.fs-sheet-section
label.fs-uppercase-header(data-i18n='rank')
.fs-rank-grid
+text_input('rank')(class ='fs-rank')
label.fs-birthdate(data-i18n='birthdate')
+text_input('birthdate')(class ='fs-birthdate')
.fs-sheet-section
label.fs-uppercase-header(data-i18n='species')
.fs-species-grid
+text_input('species')(class ='fs-species')
label.fs-size(data-i18n='size')
+text_input('size')(class ='fs-size')
label.fs-speed(data-i18n='speed')
+text_input('speed')(class ='fs-speed')
.fs-lifepath
.fs-sheet-section
label.fs-uppercase-header(data-i18n='class')
.fs-class-grid
+text_input('class_1')(class ='fs-class1')
+text_input('class_2')(class ='fs-class2')
label.fs-level(data-i18n='level') Level
+numeric_input('level', 1, 1)(class='fs-level')
.fs-sheet-section
label.fs-uppercase-header(data-i18n='faction')
.fs-faction-grid
+text_input('faction')(class ='fs-faction')
label.fs-blessing(data-i18n='blessing')
+text_input('blessing')(class ='fs-blessing')
label.fs-curse(data-i18n='curse') Curse
+text_input('curse')(class ='fs-curse')
.fs-sheet-section
label.fs-uppercase-header(data-i18n='calling')
.fs-calling-grid
+text_input('calling_1')
+text_input('calling_2')
+text_input('calling_3')
.fs-traits
.fs-sheet-section.fs-skills-header
label.fs-uppercase-header(data-i18n='skills')
.fs-skill-col.fs-skills-1
- for (let i = 0; i < skills.length / 2; ++i)
+skill(skills[i].name, skills[i].default)
.fs-skill-col.fs-skills-2
- for (let i = skills.length / 2; i < skills.length; ++i)
+skill(skills[i].name, skills[i].default)
.fs-characteristics
each charac_cat in characteristics
.fs-sheet-section
label.fs-uppercase-header(data-i18n=charac_cat.category)
.fs-characteristic-cat-grid
each charac_name in charac_cat.list
+characteristic(charac_name)
.fs-sheet-section
label.fs-uppercase-header(data-i18n='occult')
.fs-occult
div
+label('psi')(class='fs-occult-left')
+numeric_input('psi', false, 0)
+numeric_input('urge', false, 0)
+label('urge')(class='fs-occult-right')
div
+label('theurgy')(class='fs-occult-left')
+numeric_input('theurgy', false, 0)
+numeric_input('hubris', false, 0)
+label('hubris')(class='fs-occult-right')
div
+text_input('occult_3_name')(class='fs-occult-left')
+numeric_input('occult_3', false, 0)
+numeric_input('occult_3_opposite', false, 0)
+text_input('occult_3_opposite_name')(class='fs-occult-right')
.fs-defenses
.fs-sheet-section
label.fs-uppercase-header(data-i18n='resistances')
.fs-resistances-grid
each charac_cat in characteristics
label(data-i18n=charac_cat.category)
+numeric_input(`${charac_cat.category}_resistance`, 0, 0)
+text_input(`${charac_cat.category}_resistance_modifier`)(data-i18n-placeholder='resistance_modifier')
.fs-sheet-section
.fs-armor-and-e-shield-grid
.fs-armor-and-e-shield-grid-row
label.fs-uppercase-header(data-i18n='armor')
+text_input('armor_name')
.fs-armor-and-e-shield-grid-row.fs-armor-vs
+numeric_input('armor_vs_blaster', false, 0)(data-i18n-placeholder='blaster_s')
+numeric_input('armor_vs_flame', false, 0)(data-i18n-placeholder='flame_s')
+numeric_input('armor_vs_hard', false, 0)(data-i18n-placeholder='hard_s')
+numeric_input('armor_vs_laser', false, 0)(data-i18n-placeholder='laser_s')
+numeric_input('armor_vs_shock', false, 0)(data-i18n-placeholder='shock_s')
+numeric_input('armor_vs_slam', false, 0)(data-i18n-placeholder='slam_s')
+numeric_input('armor_vs_sonic', false, 0)(data-i18n-placeholder='sonic_s')
.fs-armor-and-e-shield-grid-row
label.fs-uppercase-header(data-i18n='e_shield')
+text_input('shield_name')
.fs-armor-and-e-shield-grid-row.fs-e-shield-props
label(data-i18n='e_shield_thresholds')
+numeric_input('shield_thresholds_min')
label /
+numeric_input('shield_thresholds_max')
label(data-i18n='e_shield_hits')
+numeric_input('shield_hits')
.fs-sheet-section
.fs-vita-and-revivals-grid
label.fs-vitality-header.fs-uppercase-header(data-i18n='vitality')
label.fs-vitality-rating(data-i18n='rating')
+numeric_input('vitality_rating', 0, 0)(class='fs-vitality-rating')
label.fs-vitality-current(data-i18n='current')
+numeric_input('vitality_current', 0, 0)(class='fs-vitality-current')
label.fs-revivals-header.fs-uppercase-header(data-i18n='revivals')
label.fs-revivals-rating(data-i18n='rating')
+numeric_input('revivals_rating', 0, 0)(class='fs-revivals-rating')
label.fs-revivals-number(data-i18n='number')
+numeric_input('revivals_number', 0, 0)(class='fs-revivals-number')
.fs-actions-vp-bank-and-surge
.fs-sheet-section
label.fs-uppercase-header(data-i18n='actions')
.fs-actions
.fs-table
label.fs-table-head
label.fs-table-head(data-i18n='action')
label.fs-table-head(data-i18n='characteristic')
label.fs-table-head(data-i18n='skill')
label.fs-table-head(data-i18n='goal_bonus_penalty')
fieldset.repeating_actions
.fs-table
input(type='hidden' name='attr_action_characteristic_value')
input(type='hidden' name='attr_action_skill_value')
button.fs-20(type='roll' name='roll_action_roll' value='&{template:fs-GoalRoll} {{title=@{action_name}}} {{characterName=@{character_name}}} {{characteristicName-i18n=^{@{action_characteristic}}}} {{skillName-i18n=^{@{action_skill}}}} {{bonus_penalty=[[@{action_goal_bonus_penalty}+[[?{@{goal_bonus_penalty_rollquery_i18n}}]]]]}} {{goal=[[@{action_characteristic_value}+@{action_skill_value}+@{action_goal_bonus_penalty}+[[?{@{goal_bonus_penalty_rollquery_i18n}}]]]]}} {{roll=[[1d20cs[[{@{action_characteristic_value}+@{action_skill_value}+@{action_goal_bonus_penalty}+[[?{@{goal_bonus_penalty_rollquery_i18n}}]],19}kl1]]cf20]]}}')
input.fs-table-cell(type='text' name='attr_action_name')
select.fs-table-cell(name='attr_action_characteristic')
option(value='' selected)
each charac_cat in characteristics
optgroup(data-i18n-label=charac_cat.category)
each charac_name in charac_cat.list
option(value=charac_name data-i18n=charac_name)
select.fs-table-cell(name='attr_action_skill')
option(value='' selected)
each sk in skills
option(value=sk.name data-i18n=sk.name)
input.fs-table-cell(type='number' name='attr_action_goal_bonus_penalty' value=0)
.fs-notes
.fs-auto-expand-textarea
span(name='attr_action_impact_notes')
textarea(name='attr_action_impact_notes' data-i18n-placeholder='impact_notes' spellcheck='false')
.fs-sheet-section-frame
label.fs-uppercase-header(data-i18n='vp_bank')
.fs-vp-and-surge-grids
label(data-i18n='vp_bank_capacity')
+numeric_input('vp_bank_capacity', 0, 0)
label(data-i18n='current_vp')
+numeric_input('current_vp', 0, 0)
label(data-i18n='current_wp')
+numeric_input('current_wp', 0, 0)
label.fs-uppercase-header(data-i18n='surge')
.fs-vp-and-surge-grids
label(data-i18n='surge_rating')
+numeric_input('surge_rating', 0, 0)
label(data-i18n='surge_number')
+numeric_input('surge_number', 0, 0)
.fs-perks-capabilities-and-birthrights
.fs-sheet-section
label.fs-uppercase-header(data-i18n='perks')
.fs-perks
fieldset.repeating_perks
.fs-table
input.fs-table-cell(type='text' name='attr_perk_name' data-i18n-placeholder='perk_name')
.fs-notes
.fs-auto-expand-textarea
span(name='attr_perk_notes')
textarea(name='attr_perk_notes' data-i18n-placeholder='perk_notes' spellcheck='false')
div
.fs-sheet-section
label.fs-uppercase-header(data-i18n='capabilities')
.fs-perks
fieldset.repeating_capabilities
.fs-table
input.fs-table-cell(type='text' name='attr_capability_name' data-i18n-placeholder='capability_name')
.fs-notes
.fs-auto-expand-textarea
span(name='attr_capability_notes')
textarea(name='attr_capability_notes' data-i18n-placeholder='capability_notes' spellcheck='false')
.fs-sheet-section
label.fs-uppercase-header(data-i18n='birthrights')
.fs-perks
fieldset.repeating_birthrights
.fs-table
input.fs-table-cell(type='text' name='attr_birthright_name' data-i18n-placeholder='birthright_name')
.fs-notes
.fs-auto-expand-textarea
span(name='attr_birthright_notes')
textarea(name='attr_birthright_notes' data-i18n-placeholder='birthright_notes' spellcheck='false')
.fs-possessions
.fs-sheet-section
.fs-possessions-header
label.fs-uppercase-header(data-i18n='possessions')
label(data-i18n='techgnosis')
+numeric_input('techgnosis', 0, 0)
.fs-carried-equipment
each index in [1, 2]
div
.fs-table
label.fs-table-head(data-i18n='carried_equipment')
label.fs-table-head(data-i18n='tech_level_s')
label.fs-table-head(data-i18n='equipment_size')
fieldset(class=`repeating_carriedequipment${index}`)
.fs-table
input.fs-table-cell(type='text' name=`attr_carriedequipment${index}_name`)
input.fs-table-cell(type='number' name=`attr_carriedequipment${index}_tech_level`)
input.fs-table-cell(type='text' name=`attr_carriedequipment${index}_size`)
.fs-notes
.fs-auto-expand-textarea
span(name=`attr_carriedequipment${index}_notes`)
textarea(name=`attr_carriedequipment${index}_notes` data-i18n-placeholder='notes' spellcheck='false')
.fs-carried-weapons
div
.fs-table
label.fs-table-head(data-i18n='carried_weapons')
label.fs-table-head(data-i18n='tech_level_s')
label.fs-table-head(data-i18n='goal_bonus_penalty')
label.fs-table-head(data-i18n='damage_s')
label.fs-table-head(data-i18n='strength_s')
label.fs-table-head(data-i18n='range_s')
label.fs-table-head(data-i18n='rate_of_fire_s')
label.fs-table-head(data-i18n='ammunition_s')
label.fs-table-head(data-i18n='weapon_features')
fieldset(class='repeating_weapons')
.fs-table
input.fs-table-cell(type='text' name='attr_weapon_name')
input.fs-table-cell(type='number' name='attr_weapon_tl')
input.fs-table-cell(type='text' name='attr_weapon_goal')
input.fs-table-cell(type='text' name='attr_weapon_dmg')
input.fs-table-cell(type='number' name='attr_weapon_str')
input.fs-table-cell(type='text' name='attr_weapon_rng')
input.fs-table-cell(type='number' name='attr_weapon_rof')
input.fs-table-cell(type='number' name='attr_weapon_ammo')
input.fs-table-cell(type='text' name='attr_weapon_features')
.fs-notes
.fs-auto-expand-textarea
span(name=`attr_weapon_notes`)
textarea(name=`attr_weapon_notes` data-i18n-placeholder='notes' spellcheck='false')
.fs-owned
each index in [1, 2]
div
.fs-table
label.fs-table-head(data-i18n='owned')
label.fs-table-head(data-i18n='location')
fieldset(class=`repeating_owned${index}`)
.fs-table
input.fs-table-cell(type='text' name=`attr_owned${index}_name`)
input.fs-table-cell(type='text' name=`attr_owned${index}_location`)
.fs-notes
.fs-auto-expand-textarea
span(name=`attr_owned${index}_notes`)
textarea(name=`attr_owned${index}_notes` data-i18n-placeholder='notes' spellcheck='false')
.fs-money
.fs-sheet-section
.fs-money-header
label.fs-uppercase-header(data-i18n='money')
+label('cash')
+text_input('cash')
.fs-assets
each index in [1, 2]
div
.fs-table
label.fs-table-head(data-i18n='asset')
label.fs-table-head(data-i18n='income')
fieldset(class=`repeating_assets${index}`)
.fs-table
input.fs-table-cell(type='text' name=`attr_asset${index}_name`)
input.fs-table-cell(type='text' name=`attr_asset${index}_income`)
.fs-notes
.fs-auto-expand-textarea
span(name=`attr_asset${index}_notes`)
textarea(name=`attr_asset${index}_notes` data-i18n-placeholder='notes' spellcheck='false')
.fs-sheet-section
label.fs-uppercase-header(data-i18n='last_notes')
.fs-w100.fs-relative.fs-supertall-textarea
.fs-auto-expand-textarea
span(name='attr_last_notes')
textarea(title='@{last_notes}' type='text' name='attr_last_notes' data-i18n-placeholder='notes' placeholder='Notes' spellcheck='false')
.fs-footer
// CHARACTER SHEET LAYOUT - END
// ROLL TEMPLATES - START
include roll-templates.html
// ROLL TEMPLATES - END
// SHEET WORKERS - START
include sheet-workers.html
// SHEET WORKERS - END
// FIN.
@@ -0,0 +1,888 @@
{
"version": "7",
"about": "This is a Prepros (https://prepros.io) configuration file. You can commit this file to a git repo to backup and sync project configurations.",
"config": {
"proxy": {
"enable": false,
"target": "",
"useLocalAssets": false
},
"reload": {
"enable": true,
"delay": 0,
"animate": true,
"afterUpload": false
},
"sync": {
"enable": false,
"mouse": true,
"keyboard": true,
"form": true,
"scroll": true
},
"watcher": {
"enable": true,
"maxFiles": 2000,
"usePolling": false,
"pollingInterval": 500,
"extensions": [
".html",
".htm",
".php"
],
"ignore": {
"patterns": [
".*",
"wp-admin",
"wp-includes",
"node_modules",
"Prepros Export",
"bower_components"
],
"exceptions": []
}
},
"exporter": {
"ignore": {
"patterns": [
".*",
"desktop.ini",
"prepros.cfg",
"node_modules",
"Prepros Export",
"prepros.config",
"prepros-6.config",
"*-original.jpg",
"*-original.jpeg",
"*-original.png",
"*-original.svg",
"*.scss",
"*.sass",
"*.less",
"*.pug",
"*.jade",
"*.styl",
"*.haml",
"*.slim",
"*.coffee",
"*.kit",
"*.turf",
"*.ts"
],
"exceptions": []
}
},
"uploader": {
"remotePath": "",
"timeout": 20000,
"autoUpload": false,
"connectionType": "ftp",
"history": []
},
"packages": {
"createPackageLock": true
},
"tasks": {
"autoprefixer": {
"cascade": true,
"add": true,
"remove": true,
"supports": true,
"flexbox": true,
"grid": "autoplace",
"browsers": [
"> 2%",
"not dead"
],
"sourceMap": false
},
"babel": {
"sourceMap": false,
"presets": {
"@babel/preset-env": {
"enable": true,
"options": {
"targets": [
"> 2%",
"not dead"
],
"preserveImports": false
}
},
"@babel/preset-react": true,
"@babel/preset-flow": false
},
"plugins": {
"@babel/plugin-proposal-class-properties": false,
"@babel/plugin-proposal-decorators": {
"enable": false,
"options": {
"decoratorsBeforeExport": true
}
},
"@babel/plugin-proposal-export-namespace-from": false,
"@babel/plugin-proposal-function-sent": false,
"@babel/plugin-proposal-nullish-coalescing-operator": false,
"@babel/plugin-proposal-numeric-separator": false,
"@babel/plugin-proposal-optional-chaining": false,
"@babel/plugin-proposal-private-methods": false,
"@babel/plugin-proposal-throw-expressions": false
},
"customPresets": [],
"customPlugins": []
},
"bundle-js": {
"sourceMap": false,
"exclude": [
"node_modules",
"bower_components"
],
"devMode": true,
"globals": [],
"externals": [],
"babel": {
"enable": true,
"options": {
"sourceMap": false,
"presets": {
"@babel/preset-env": {
"enable": true,
"options": {
"targets": [
"> 2%",
"not dead"
],
"preserveImports": false
}
},
"@babel/preset-react": true,
"@babel/preset-flow": false
},
"plugins": {
"@babel/plugin-proposal-class-properties": false,
"@babel/plugin-proposal-decorators": {
"enable": false,
"options": {
"decoratorsBeforeExport": true
}
},
"@babel/plugin-proposal-export-namespace-from": false,
"@babel/plugin-proposal-function-sent": false,
"@babel/plugin-proposal-nullish-coalescing-operator": false,
"@babel/plugin-proposal-numeric-separator": false,
"@babel/plugin-proposal-optional-chaining": false,
"@babel/plugin-proposal-private-methods": false,
"@babel/plugin-proposal-throw-expressions": false
},
"customPresets": [],
"customPlugins": []
}
},
"css": {
"enable": true
},
"fonts": {
"enable": true
}
},
"coffeescript": {
"header": false,
"bare": false,
"sourceMap": false
},
"command": {
"command": "",
"rootDir": ""
},
"concat-js": {
"sourceMap": false,
"rootDir": ""
},
"copy": {
"sourceMap": false
},
"dart-sass": {
"indentType": "space",
"indentWidth": 2,
"linefeed": "lf",
"sourceMap": false
},
"haml": {
"doubleQuoteAttributes": true
},
"jpg": {
"quality": 90
},
"less": {
"javascriptEnabled": false,
"strictImports": false,
"insecure": false,
"math": "always",
"strictUnits": false,
"dumpLineNumbers": false,
"sourceMap": false
},
"markdown": {
"githubFlavored": true,
"wrapWithHtml": false
},
"minify-css": {
"sourceMap": false
},
"minify-html": {
"caseSensitive": false,
"collapseBooleanAttributes": true,
"collapseInlineTagWhitespace": false,
"collapseWhitespace": true,
"conservativeCollapse": false,
"decodeEntities": false,
"html5": true,
"includeAutoGeneratedTags": true,
"keepClosingSlash": false,
"minifyCSS": true,
"minifyJS": true,
"preserveLineBreaks": false,
"preventAttributesEscaping": false,
"processConditionalComments": false,
"removeAttributeQuotes": false,
"removeComments": true,
"removeEmptyAttributes": false,
"removeEmptyElement": false,
"removeOptionalTags": false,
"removeRedundantAttributes": false,
"removeScriptTypeAttributes": false,
"removeStyleLinkTypeAttributes": false,
"removeTagWhitespace": false,
"sortAttributes": false,
"sortClassName": false,
"useShortDoctype": true
},
"minify-js": {
"parse": {
"bare_returns": false
},
"compress": {
"arrows": true,
"arguments": false,
"booleans": true,
"booleans_as_integers": false,
"collapse_vars": true,
"comparisons": true,
"computed_props": true,
"conditionals": true,
"dead_code": true,
"directives": true,
"drop_console": false,
"drop_debugger": true,
"evaluate": true,
"expression": false,
"global_defs": [],
"hoist_funs": false,
"hoist_props": true,
"hoist_vars": false,
"if_return": true,
"inline": 3,
"join_vars": true,
"keep_fargs": true,
"keep_infinity": false,
"loops": true,
"negate_iife": true,
"properties": true,
"pure_funcs": [],
"pure_getters": false,
"reduce_vars": true,
"sequences": true,
"side_effects": true,
"switches": true,
"top_retain": [],
"typeofs": true,
"unsafe": false,
"unsafe_arrows": false,
"unsafe_comps": false,
"unsafe_Function": false,
"unsafe_math": false,
"unsafe_proto": false,
"unsafe_regexp": false,
"unsafe_undefined": false,
"unused": true
},
"mangle": {
"eval": false,
"reserved": []
},
"output": {
"ascii_only": false,
"braces": false,
"comments": "none",
"inline_script": true,
"keep_numbers": false,
"keep_quoted_props": false,
"preamble": null,
"quote_keys": false,
"quote_style": 0,
"semicolons": true,
"shebang": true,
"webkit": false,
"wrap_iife": false,
"wrap_func_args": true
},
"sourceMap": false,
"toplevel": false,
"ie8": false,
"keep_classnames": false,
"keep_fnames": false,
"safari10": false
},
"node-sass": {
"indentType": "space",
"indentWidth": 2,
"linefeed": "lf",
"outputStyle": "expanded",
"precision": 10,
"sourceMap": false,
"sourceComments": false
},
"png": {
"quality": 90
},
"pug": {
"pretty": true
},
"slim": {
"indent": "space",
"indentSize": 2,
"pretty": true
},
"stylus": {
"useNib": true,
"sourceMap": false,
"linenos": false
},
"svg": {
"cleanupAttrs": true,
"removeDoctype": true,
"removeXMLProcInst": true,
"removeComments": true,
"removeMetadata": true,
"removeTitle": true,
"removeDesc": true,
"removeUselessDefs": true,
"removeEditorsNSData": true,
"removeEmptyAttrs": true,
"removeHiddenElems": true,
"removeEmptyText": true,
"removeEmptyContainers": true,
"removeViewBox": false,
"cleanupEnableBackground": true,
"convertStyleToAttrs": true,
"convertColors": true,
"convertPathData": true,
"convertTransform": true,
"removeUnknownsAndDefaults": true,
"removeNonInheritableGroupAttrs": true,
"removeUselessStrokeAndFill": true,
"removeUnusedNS": true,
"cleanupIDs": true,
"cleanupNumericValues": true,
"moveElemsAttrsToGroup": true,
"moveGroupAttrsToElems": true,
"collapseGroups": true,
"removeRasterImages": false,
"mergePaths": true,
"convertShapeToPath": true,
"sortAttrs": true,
"removeDimensions": true
},
"turf": {
"rootDir": ""
},
"typescript": {
"allowJs": false,
"allowSyntheticDefaultImports": true,
"allowUmdGlobalAccess": false,
"allowUnreachableCode": false,
"allowUnusedLabels": false,
"alwaysStrict": false,
"charset": "utf8",
"checkJs": false,
"declaration": false,
"disableSizeLimit": false,
"downlevelIteration": false,
"emitBOM": false,
"emitDecoratorMetadata": false,
"experimentalDecorators": false,
"forceConsistentCasingInFileNames": false,
"importHelpers": false,
"jsx": "React",
"keyofStringsOnly": false,
"lib": [],
"maxNodeModuleJsDepth": 0,
"module": "ES2015",
"moduleResolution": "NodeJs",
"newLine": "LineFeed",
"noFallthroughCasesInSwitch": false,
"noImplicitAny": false,
"noImplicitReturns": false,
"noImplicitThis": false,
"noStrictGenericChecks": false,
"noUnusedLocals": false,
"noUnusedParameters": false,
"noImplicitUseStrict": false,
"noLib": false,
"noResolve": false,
"preserveConstEnums": false,
"jsxFactory": "React.createElement",
"removeComments": false,
"skipLibCheck": false,
"sourceMap": false,
"strict": false,
"strictFunctionTypes": false,
"strictBindCallApply": false,
"strictNullChecks": false,
"strictPropertyInitialization": false,
"suppressExcessPropertyErrors": false,
"suppressImplicitAnyIndexErrors": false,
"target": "ES3",
"resolveJsonModule": false,
"esModuleInterop": false,
"useDefineForClassFields": false
}
},
"fileTypes": {
"sass": {
"extensions": [
".scss",
".sass"
],
"autoCompile": true,
"sourceMap": false,
"tasks": [
{
"task": "dart-sass",
"enable": true
},
{
"task": "autoprefixer",
"enable": true
},
{
"task": "minify-css",
"enable": false
}
],
"output": {
"extension": ".css",
"type": "REPLACE_SEGMENTS",
"segments": [
{
"segment": "scss",
"replaceWith": "css"
},
{
"segment": "sass",
"replaceWith": "css"
}
]
}
},
"less": {
"extensions": [
".less"
],
"autoCompile": true,
"sourceMap": false,
"tasks": [
{
"task": "less",
"enable": true
},
{
"task": "autoprefixer",
"enable": true
},
{
"task": "minify-css",
"enable": false
}
],
"output": {
"extension": ".css",
"type": "REPLACE_SEGMENTS",
"segments": [
{
"segment": "less",
"replaceWith": "css"
}
]
}
},
"pug": {
"extensions": [
".pug",
".jade"
],
"autoCompile": true,
"tasks": [
{
"task": "pug",
"enable": true
},
{
"task": "minify-html",
"enable": false
}
],
"output": {
"extension": ".html",
"type": "REPLACE_SEGMENTS",
"segments": [
{
"segment": "pug",
"replaceWith": "html"
}
]
}
},
"css": {
"extensions": [
".css"
],
"autoCompile": false,
"sourceMap": false,
"tasks": [
{
"task": "copy",
"enable": true
},
{
"task": "autoprefixer",
"enable": true
},
{
"task": "minify-css",
"enable": true
}
],
"output": {
"extension": ".css",
"type": "SOURCE_RELATIVE",
"relativePath": "",
"suffix": "-dist",
"alwaysSuffix": false
}
},
"javascript": {
"extensions": [
".js",
".jsx"
],
"autoCompile": false,
"sourceMap": false,
"tasks": [
{
"task": "copy",
"enable": true
},
{
"task": "concat-js",
"enable": false
},
{
"task": "babel",
"enable": false
},
{
"task": "bundle-js",
"enable": false
},
{
"task": "minify-js",
"enable": true
}
],
"output": {
"extension": ".js",
"type": "SOURCE_RELATIVE",
"relativePath": "",
"suffix": "-dist",
"alwaysSuffix": false
}
},
"stylus": {
"extensions": [
".styl"
],
"autoCompile": true,
"sourceMap": false,
"tasks": [
{
"task": "stylus",
"enable": true
},
{
"task": "autoprefixer",
"enable": true
},
{
"task": "minify-css",
"enable": false
}
],
"output": {
"extension": ".css",
"type": "REPLACE_SEGMENTS",
"segments": [
{
"segment": "stylus",
"replaceWith": "css"
},
{
"segment": "styl",
"replaceWith": "css"
}
]
}
},
"markdown": {
"extensions": [
".md",
".markdown",
".mkd"
],
"autoCompile": false,
"tasks": [
{
"task": "markdown",
"enable": true
},
{
"task": "minify-html",
"enable": false
}
],
"output": {
"extension": ".html",
"type": "REPLACE_SEGMENTS",
"segments": [
{
"segment": "markdown",
"replaceWith": "html"
}
]
}
},
"haml": {
"extensions": [
".haml"
],
"autoCompile": true,
"tasks": [
{
"task": "haml",
"enable": true
},
{
"task": "minify-html",
"enable": false
}
],
"output": {
"extension": ".html",
"type": "REPLACE_SEGMENTS",
"segments": [
{
"segment": "haml",
"replaceWith": "html"
}
]
}
},
"slim": {
"extensions": [
".slim"
],
"autoCompile": true,
"tasks": [
{
"task": "slim",
"enable": true
},
{
"task": "minify-html",
"enable": false
}
],
"output": {
"extension": ".html",
"type": "REPLACE_SEGMENTS",
"segments": [
{
"segment": "slim",
"replaceWith": "html"
}
]
}
},
"coffeescript": {
"extensions": [
".coffee"
],
"autoCompile": true,
"sourceMap": false,
"tasks": [
{
"task": "coffeescript",
"enable": true
},
{
"task": "babel",
"enable": false
},
{
"task": "bundle-js",
"enable": false
},
{
"task": "minify-js",
"enable": false
}
],
"output": {
"extension": ".js",
"type": "REPLACE_SEGMENTS",
"segments": [
{
"segment": "coffee-script",
"replaceWith": "js"
},
{
"segment": "coffeescript",
"replaceWith": "js"
},
{
"segment": "coffee",
"replaceWith": "js"
}
]
}
},
"turf": {
"extensions": [
".turf",
".kit"
],
"autoCompile": true,
"tasks": [
{
"task": "turf",
"enable": true
},
{
"task": "minify-html",
"enable": false
}
],
"output": {
"extension": ".html",
"type": "REPLACE_SEGMENTS",
"segments": [
{
"segment": "turf",
"replaceWith": "html"
}
]
}
},
"typescript": {
"extensions": [
".ts",
".tsx"
],
"autoCompile": true,
"sourceMap": false,
"tasks": [
{
"task": "typescript",
"enable": true
},
{
"task": "babel",
"enable": false
},
{
"task": "bundle-js",
"enable": false
},
{
"task": "minify-js",
"enable": false
}
],
"output": {
"extension": ".js",
"type": "REPLACE_SEGMENTS",
"segments": [
{
"segment": "typescript",
"replaceWith": "js"
},
{
"segment": "ts",
"replaceWith": "js"
}
]
}
},
"jpg": {
"extensions": [
".jpg",
".jpeg"
],
"tasks": [
{
"task": "jpg",
"enable": true
}
],
"output": {
"extension": ".jpg",
"type": "SOURCE_RELATIVE",
"relativePath": ""
}
},
"png": {
"extensions": [
".png"
],
"tasks": [
{
"task": "png",
"enable": true
}
],
"output": {
"extension": ".png",
"type": "SOURCE_RELATIVE",
"relativePath": ""
}
},
"svg": {
"extensions": [
".svg"
],
"tasks": [
{
"task": "svg",
"enable": true
}
],
"output": {
"extension": ".svg",
"type": "SOURCE_RELATIVE",
"relativePath": ""
}
}
},
"files": []
}
}
@@ -0,0 +1,61 @@
<div style="display:none">
<rolltemplate class="sheet-rolltemplate-fs-GoalRoll">
<div class="fs-container">
<label class="fs-charactername">{{characterName}}</label>
{{#skillName-i18n}}
{{#rollGreater() bonus_penalty 0}}
<div class="fs-header"><h1>{{characteristicName-i18n}} + {{skillName-i18n}} +{{bonus_penalty}} ({{goal}})</h1></div>
{{/rollGreater() bonus_penalty 0}}
{{#rollTotal() bonus_penalty 0}}
<div class="fs-header"><h1>{{characteristicName-i18n}} + {{skillName-i18n}} ({{goal}})</h1></div>
{{/rollTotal() bonus_penalty 0}}
{{#^rollGreater() bonus_penalty -1}}
<div class="fs-header"><h1>{{characteristicName-i18n}} + {{skillName-i18n}} {{bonus_penalty}} ({{goal}})</h1></div>
{{/^rollGreater() bonus_penalty -1}}
{{/skillName-i18n}}
{{^skillName-i18n}}
{{#rollGreater() bonus_penalty 0}}
<div class="fs-header"><h1>{{characteristicName-i18n}} +{{bonus_penalty}} ({{goal}})</h1></div>
{{/rollGreater() bonus_penalty 0}}
{{#rollTotal() bonus_penalty 0}}
<div class="fs-header"><h1>{{characteristicName-i18n}} ({{goal}})</h1></div>
{{/rollTotal() bonus_penalty 0}}
{{#^rollGreater() bonus_penalty -1}}
<div class="fs-header"><h1>{{characteristicName-i18n}} {{bonus_penalty}} ({{goal}})</h1></div>
{{/^rollGreater() bonus_penalty -1}}
{{/skillName-i18n}}
{{#title}}<div class="fs-header"><h1>[ {{title}} ]</h1></div>{{/title}}
<div class="fs-arrow-container"><div class="fs-arrow-right"></div></div>
{{#^rollGreater() roll goal}}
{{#^rollGreater() roll 19}} <!-- rolled [1, min(19, goal)] -->
{{#rollWasCrit() roll}} <!-- crit -->
<span class="fs-critsuccess">{{roll}} <span data-i18n="victory_points">VP</span>. <span data-i18n="critical_success">Critical success!</span></span>
{{/rollWasCrit() roll}}
{{#^rollWasCrit() roll}} <!-- not a crit -->
<span class="fs-success">{{roll}} <span data-i18n="victory_points">VP</span>. <span data-i18n="success">Success!</span></span>
{{/^rollWasCrit() roll}}
{{/^rollGreater() roll 19}}
{{/^rollGreater() roll goal}}
{{#rollGreater() roll goal}}
{{#rollTotal() roll 1}} <!-- very special case of an automatic success when goal < 1 and the roll is 1 -->
<span class="fs-success">{{roll}} <span data-i18n="victory_points">VP</span>. <span data-i18n="success">Success!</span></span>
{{/rollTotal() roll 1}}
{{#^rollTotal() roll 1}}
{{#^rollGreater() roll 19}} <!-- rolled ]goal, 19], 1 excluded -->
<span class="fs-failure">{{roll}}. <span data-i18n="failure">Failure!</span></span>
{{/^rollGreater() roll 19}}
{{/^rollTotal() roll 1}}
{{/rollGreater() roll goal}}
{{#rollTotal() roll 20}} <!-- rolled a 20 -->
<span class="fs-critfailure">{{roll}}. <span data-i18n="critical_failure">Critical failure!</span></span>
{{/rollTotal() roll 20}}
</div>
</rolltemplate>
</div>
@@ -0,0 +1,106 @@
<script type="text/worker">
const characteristics = {
body: [ 'strength', 'dexterity', 'endurance' ],
mind: [ 'wits', 'perception', 'will' ],
spirit: [ 'presence', 'intuition', 'faith' ]
};
const all_characteristics = [].concat(Object.values(characteristics).flat());
const all_skills = [
'academia',
'alchemy',
'animalia',
'arts',
'charm',
'crafts',
'disguise',
'drive',
'empathy',
'fight',
'focus',
'impress',
'interface',
'intrusion',
'knavery',
'melee',
'observe',
'perform',
'pilot',
'remedy',
'shoot',
'sleight_of_hand',
'sneak',
'survival',
'tech_redemption',
'vigor'
];
const repeating_rolls = [
{ "section": "actions", "prefix": "action" }
];
const updateGoalNumber = (section, prefix) => {
getSectionIDs(`repeating_${section}`, idArray => {
const characteristicArray = idArray.map(id => `repeating_${section}_${id}_${prefix}_characteristic`);
const characteristicValueArray = idArray.map(id => `repeating_${section}_${id}_${prefix}_characteristic_value`);
const skillArray = idArray.map(id => `repeating_${section}_${id}_${prefix}_skill`);
const skillValueArray = idArray.map(id => `repeating_${section}_${id}_${prefix}_skill_value`);
getAttrs( [].concat(characteristicArray, skillArray), vNames => {
getAttrs( vNames, vValues => {
let setAttrsObj = {};
for (let i = 0; i < idArray.length; ++i) {
setAttrsObj[characteristicValueArray[i]] = (parseInt(vValues[vNames[characteristicArray[i]]]) || 0);
setAttrsObj[skillValueArray[i]] = (parseInt(vValues[vNames[skillArray[i]]]) || 0);
}
setAttrs(setAttrsObj);
});
});
});
};
[].concat(all_characteristics, all_skills).forEach( trait => {
on(`change:${trait}`, eventInfo => {
repeating_rolls.forEach( special_skill => {
updateGoalNumber(special_skill.section, special_skill.prefix);
});
});
});
repeating_rolls.forEach( repeating => {
on(`change:repeating_${repeating.section}`, eventInfo => {
updateGoalNumber(repeating.section, repeating.prefix);
});
});
on("sheet:opened", function() {
// sheet versioning
getAttrs( [ 'sheet_version' ], values => {
if (values.sheet_version !== "latest") {
// insert version updates here
}
const latest_version = "1.0.0";
if (values.sheet_version != latest_version) {
setAttrs({ sheet_version: latest_version });
}
});
// translate roll queries
{
let setAttrsObj = {};
// Goal rolls
let goal_bonus_penalty = getTranslationByKey('goal_bonus_penalty');
setAttrsObj['goal_bonus_penalty_rollquery_i18n'] = `${goal_bonus_penalty}|0`;
setAttrs(setAttrsObj);
}
});
</script>
@@ -0,0 +1,132 @@
{
"name": "Name",
"planet": "Planet",
"rank": "Rank",
"birthdate": "Birthdate",
"species": "Species",
"size": "Size",
"speed": "Speed",
"class": "Class",
"level": "Level",
"faction": "Faction",
"blessing": "Blessing",
"curse": "Curse",
"calling": "Calling",
"traits": "Traits",
"skills": "Skills",
"academia": "Academia",
"alchemy": "Alchemy",
"animalia": "Animalia",
"arts": "Arts",
"charm": "Charm",
"crafts": "Crafts",
"disguise": "Disguise",
"drive": "Drive",
"empathy": "Empathy",
"fight": "Fight",
"focus": "Focus",
"impress": "Impress",
"interface": "Interface",
"intrusion": "Intrusion",
"knavery": "Knavery",
"melee": "Melee",
"observe": "Observe",
"perform": "Perform",
"pilot": "Pilot",
"remedy": "Remedy",
"shoot": "Shoot",
"sleight_of_hand": "Sleight of Hand",
"sneak": "Sneak",
"survival": "Survival",
"tech_redemption": "Tech Redemption",
"vigor": "Vigor",
"body": "Body",
"strength": "Strength",
"dexterity": "Dexterity",
"endurance": "Endurance",
"mind": "Mind",
"wits": "Wits",
"perception": "Perception",
"will": "Will",
"spirit": "Spirit",
"presence": "Presence",
"intuition": "Intuition",
"faith": "Faith",
"occult": "Occult",
"psi": "Psi",
"urge": "Urge",
"theurgy": "Theurgy",
"hubris": "Hubris",
"resistances": "Resistances",
"resistance_modifier": "Mod.",
"armor": "Armor",
"blaster_s": "Blstr.",
"flame_s": "Flm.",
"hard_s": "Hrd.",
"laser_s": "Lsr.",
"shock_s": "Shk.",
"slam_s": "Slm.",
"sonic_s": "Son.",
"e_shield": "E-Shield",
"e_shield_thresholds": "Thresholds",
"e_shield_hits": "Hits",
"vitality": "Vitality",
"rating": "Rating",
"current": "Current",
"revivals": "Revivals",
"number": "Number",
"actions": "Actions",
"action": "Maneuver/Attack",
"characteristic": "Characteristic",
"skill": "Skill",
"goal_bonus_penalty": "Goal +/-",
"goal": "Goal",
"impact_notes": "Impact / Notes",
"vp_bank": "VP Bank",
"vp_bank_capacity": "Capacity",
"current_vp": "Current VP",
"current_wp": "Current WP",
"surge": "Surge",
"surge_rating": "Rating",
"surge_number": "Number",
"perks": "Perks",
"perk_name": "Perk",
"perk_notes": "Description / Notes",
"capabilities": "Capabilities",
"capability_name": "Capability",
"capability_notes": "Description / Notes",
"birthrights": "Birthrights",
"birthright_name": "Birthright",
"birthright_notes": "Description",
"possessions": "Possessions",
"techgnosis": "Techgnosis",
"carried_equipment": "Carried Equipment",
"tech_level_s": "TL",
"equipment_size": "Size",
"carried_weapons": "Carried Weapons",
"damage_s": "Dmg.",
"strength_s": "Str.",
"range_s": "Rng.",
"rate_of_fire_s": "RoF",
"ammunition_s": "Ammo",
"weapon_features": "Features",
"owned": "Owned",
"location": "Location",
"money": "Money",
"cash": "Cash",
"asset": "Asset",
"income": "Income",
"last_notes": "Last Notes",
"additional_vp": "additional VP",
"victory_points": "VP",
"the_end": "Fin.",
"failure": "Failure!",
"critical_failure_q": "Critical failure?",
"critical_failure": "Critical failure!",
"noncritical_failure": "Non-critical failure",
"critical_success": "Critical success!",
"success": "Success!",
"roll_again": "Reroll",
"confirm": "Confirm",
"notes": "Notes"
}
@@ -0,0 +1,126 @@
{
"name": "Name",
"planet": "Planet",
"rank": "Rank",
"birthdate": "Birthdate",
"species": "Species",
"size": "Size",
"speed": "Speed",
"class": "Class",
"level": "Level",
"faction": "Faction",
"blessing": "Blessing",
"curse": "Curse",
"calling": "Calling",
"traits": "Traits",
"skills": "Skills",
"academia": "Academia",
"alchemy": "Alchemy",
"animalia": "Animalia",
"arts": "Arts",
"charm": "Charm",
"crafts": "Crafts",
"disguise": "Disguise",
"drive": "Drive",
"empathy": "Empathy",
"fight": "Fight",
"focus": "Focus",
"impress": "Impress",
"interface": "Interface",
"intrusion": "Intrusion",
"knavery": "Knavery",
"melee": "Melee",
"observe": "Observe",
"perform": "Perform",
"pilot": "Pilot",
"remedy": "Remedy",
"shoot": "Shoot",
"sleight_of_hand": "Sleight of Hand",
"sneak": "Sneak",
"survival": "Survival",
"tech_redemption": "Tech Redemption",
"vigor": "Vigor",
"body": "Body",
"strength": "Strength",
"dexterity": "Dexterity",
"endurance": "Endurance",
"mind": "Mind",
"wits": "Wits",
"perception": "Perception",
"will": "Will",
"spirit": "Spirit",
"presence": "Presence",
"intuition": "Intuition",
"faith": "Faith",
"occult": "Occult",
"psi": "Psi",
"urge": "Urge",
"theurgy": "Theurgy",
"hubris": "Hubris",
"resistances": "Resistances",
"resistance_modifier": "Mod.",
"armor": "Armor",
"blaster_s": "Blstr.",
"flame_s": "Flm.",
"hard_s": "Hrd.",
"laser_s": "Lsr.",
"shock_s": "Shk.",
"slam_s": "Slm.",
"sonic_s": "Son.",
"e_shield": "E-Shield",
"e_shield_thresholds": "Thresholds",
"e_shield_hits": "Hits",
"vitality": "Vitality",
"rating": "Rating",
"current": "Current",
"revivals": "Revivals",
"number": "Number",
"actions": "Actions",
"action": "Maneuver/Attack",
"characteristic": "Characteristic",
"skill": "Skill",
"goal_bonus_penalty": "Goal +/-",
"goal": "Goal",
"impact_notes": "Impact / Notes",
"vp_bank": "VP Bank",
"vp_bank_capacity": "Capacity",
"current_vp": "Current VP",
"current_wp": "Current WP",
"surge": "Surge",
"surge_rating": "Rating",
"surge_number": "Number",
"perks": "Perks",
"perk_name": "Perk",
"perk_notes": "Description / Notes",
"capabilities": "Capabilities",
"capability_name": "Capability",
"capability_notes": "Description / Notes",
"birthrights": "Birthrights",
"birthright_name": "Birthright",
"birthright_notes": "Description",
"possessions": "Possessions",
"techgnosis": "Techgnosis",
"carried_equipment": "Carried Equipment",
"tech_level_s": "TL",
"equipment_size": "Size",
"carried_weapons": "Carried Weapons",
"damage_s": "Dmg.",
"strength_s": "Str.",
"range_s": "Rng.",
"rate_of_fire_s": "RoF",
"ammunition_s": "Ammo",
"weapon_features": "Features",
"owned": "Owned",
"location": "Location",
"money": "Money",
"cash": "Cash",
"asset": "Asset",
"income": "Income",
"last_notes": "Last Notes",
"victory_points": "VP",
"failure": "Failure!",
"critical_failure": "Critical failure!",
"critical_success": "Critical success!",
"success": "Success!",
"notes": "Notes"
}
@@ -0,0 +1,126 @@
{
"name": "Nom",
"planet": "Planète",
"rank": "Rang",
"birthdate": "Né le",
"species": "Espèce",
"size": "Taille",
"speed": "Vitesse",
"class": "Classe",
"level": "Niveau",
"faction": "Faction",
"blessing": "Qualité",
"curse": "Défaut",
"calling": "Vocation",
"traits": "Traits",
"skills": "Compétences",
"academia": "Érudition",
"alchemy": "Alchimie",
"animalia": "Animaux",
"arts": "Arts",
"charm": "Charme",
"crafts": "Artisanat",
"disguise": "Déguisement",
"drive": "Conduite",
"empathy": "Empathie",
"fight": "Combat à mains nues",
"focus": "Focus",
"impress": "Impression",
"interface": "Interface",
"intrusion": "Intrusion",
"knavery": "Baratin",
"melee": "Mêlee",
"observe": "Observation",
"perform": "Performance",
"pilot": "Pilotage",
"remedy": "Remède",
"shoot": "Tir",
"sleight_of_hand": "Prestidigitation",
"sneak": "Discrétion",
"survival": "Survie",
"tech_redemption": "Rédemption Tech",
"vigor": "Vigueur",
"body": "Corps",
"strength": "Force",
"dexterity": "Dextérité",
"endurance": "Endurance",
"mind": "Intellect",
"wits": "Intelligence",
"perception": "Perception",
"will": "Volonté",
"spirit": "Esprit",
"presence": "Présence",
"intuition": "Intuition",
"faith": "Foi",
"occult": "Occulte",
"psi": "Psi",
"urge": "Pulsion",
"theurgy": "Théurgie",
"hubris": "Hubris",
"resistances": "Résistances",
"resistance_modifier": "Mod.",
"armor": "Armure",
"blaster_s": "Blstr.",
"flame_s": "Feu",
"hard_s": "Dure",
"laser_s": "Lsr.",
"shock_s": "Choc",
"slam_s": "Imp.",
"sonic_s": "Son.",
"e_shield": "E-Bouclier",
"e_shield_thresholds": "Seuils",
"e_shield_hits": "Charges",
"vitality": "Vitalité",
"rating": "Score",
"current": "Actuelle",
"revivals": "Rétablissement",
"number": "Nombre",
"actions": "Actions",
"action": "Manœuvre/Attaque",
"characteristic": "Caractéristique",
"skill": "Compétence",
"goal_bonus_penalty": "Seuil +/-",
"goal": "Seuil",
"impact_notes": "Impact / Notes",
"vp_bank": "Banque de PV",
"vp_bank_capacity": "Capacité",
"current_vp": "PV actuels",
"current_wp": "PA actuels",
"surge": "Surpassement",
"surge_rating": "Score",
"surge_number": "Nombre",
"perks": "Avantages",
"perk_name": "Avantage",
"perk_notes": "Description / Notes",
"capabilities": "Aptitudes",
"capability_name": "Aptitude",
"capability_notes": "Description / Notes",
"birthrights": "Héritages",
"birthright_name": "Héritage",
"birthright_notes": "Description",
"possessions": "Possessions",
"techgnosis": "Techgnose",
"carried_equipment": "Équipement porté",
"tech_level_s": "NT",
"equipment_size": "Taille",
"carried_weapons": "Armes portées",
"damage_s": "Dgt.",
"strength_s": "For.",
"range_s": "Por.",
"rate_of_fire_s": "CdT",
"ammunition_s": "Mun.",
"weapon_features": "Propriétés",
"owned": "Distantes",
"location": "Localisation",
"money": "Argent",
"cash": "Sur soi",
"asset": "Investissement",
"income": "Revenus",
"last_notes": "Notes",
"victory_points": "PV",
"failure": "Échec!",
"critical_failure": "Échec critique!",
"critical_success": "Succès critique!",
"success": "Success!",
"notes": "Notes"
}