Merge branch 'Roll20:master' into master

This commit is contained in:
Joseph G
2021-12-05 15:39:36 -08:00
committed by GitHub
649 changed files with 164125 additions and 53460 deletions
Vendored
BIN
View File
Binary file not shown.
-8
View File
@@ -40,14 +40,6 @@ workflows:
branches:
only:
- master
- update_sheet:
requires:
- get_commit_hash
context: char-sheet-app-staging
filters:
branches:
only:
- master
- update_sheet:
requires:
- get_commit_hash
+27
View File
@@ -0,0 +1,27 @@
name: Charsheets Actions
on:
push:
branches: [ master ]
jobs:
charsheets-actions:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 0
- name: Get changed files
id: changed-files
uses: tj-actions/changed-files@v11.5
with:
since_last_remote_commit: true
separator: '::'
- name: Run sheet actions
uses: nick-invision/private-action-loader@v3
with:
pal-repo-name: Roll20/charsheets-actions
pal-repo-token: ${{ secrets.REPO_ACCESS_TOKEN }}
file-list: ${{ steps.changed-files.outputs.all_modified_files }}
separator: '::'
credentials: ${{ secrets.SERVICE_ACCOUNT_KEY }}
+146
View File
@@ -0,0 +1,146 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
lerna-debug.log*
.pnpm-debug.log*
# Diagnostic reports (https://nodejs.org/api/report.html)
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
# Runtime data
pids
*.pid
*.seed
*.pid.lock
# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov
# Coverage directory used by tools like istanbul
coverage
*.lcov
# nyc test coverage
.nyc_output
# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
.grunt
# Bower dependency directory (https://bower.io/)
bower_components
# node-waf configuration
.lock-wscript
# Compiled binary addons (https://nodejs.org/api/addons.html)
build/Release
# Dependency directories
node_modules/
jspm_packages/
# Snowpack dependency directory (https://snowpack.dev/)
web_modules/
# TypeScript cache
*.tsbuildinfo
# Optional npm cache directory
.npm
# Optional eslint cache
.eslintcache
# Microbundle cache
.rpt2_cache/
.rts2_cache_cjs/
.rts2_cache_es/
.rts2_cache_umd/
# Optional REPL history
.node_repl_history
# Output of 'npm pack'
*.tgz
# Yarn Integrity file
.yarn-integrity
# dotenv environment variables file
.env
.env.test
.env.production
# parcel-bundler cache (https://parceljs.org/)
.cache
.parcel-cache
# Next.js build output
.next
out
# Nuxt.js build / generate output
.nuxt
dist
# Gatsby files
.cache/
# Comment in the public line in if your project uses Gatsby and not Next.js
# https://nextjs.org/blog/next-9-1#public-directory-support
# public
# vuepress build output
.vuepress/dist
# Serverless directories
.serverless/
# FuseBox cache
.fusebox/
# DynamoDB Local files
.dynamodb/
# TernJS port file
.tern-port
# Stores VSCode versions used for testing VSCode extensions
.vscode-test
# yarn v2
.yarn/cache
.yarn/unplugged
.yarn/build-state.yml
.yarn/install-state.gz
.pnp.*
# General
.DS_Store
.AppleDouble
.LSOverride
# Icon must end with two \r
Icon
# Thumbnails
._*
# Files that might appear in the root of a volume
.DocumentRevisions-V100
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
.VolumeIcon.icns
.com.apple.timemachine.donotpresent
# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk
-24
View File
@@ -1,24 +0,0 @@
Monster sheet
- More attacks and damage
- Remove repeating variant section
- Spells for monsters
Player sheet
- Cleanup curreny gems and layout
- Make gems and equipment more responsive
- Make spell imports more generic, to avoid fewer copy-paste errors
Possible NPC sheet
- Follower sheet, collapse spells for Animals/Familiars
- Add top level button to jump directly to the Follower sheet
- More detailed weapons and such for npcs
- Remove repeating NPC sections?
- Structured spell book, which fields for total pages, pages used, and remaining pages.
-- Multiple spell books
-- A roll button for the number of pages needed
-- A roll button for the number of days to write it into the book
- Armor Class repeating section
- Armor Class detailed breakdown
- Armor class Slashing/Piercing/Bludgeoning
File diff suppressed because it is too large Load Diff
Binary file not shown.

Before

Width:  |  Height:  |  Size: 256 KiB

Before

Width:  |  Height:  |  Size: 175 KiB

After

Width:  |  Height:  |  Size: 175 KiB

File diff suppressed because it is too large Load Diff
@@ -47,6 +47,11 @@
.charsheet input.sheet-maxtext {
width: 100px;
}
.charsheet select.sheet-maxtext-min,
.charsheet input.sheet-maxtext-min {
min-width: 100px;
width: 100%
}
.charsheet select.sheet-fill,
.charsheet input.sheet-fill {
width: 112px;
@@ -55,10 +60,20 @@
.charsheet input.sheet-medium {
width: 115px;
}
.charsheet select.sheet-medium-min,
.charsheet input.sheet-medium-min {
min-width: 115px;
width: 100%;
}
.charsheet select.sheet-rogue,
.charsheet input.sheet-rogue {
width: 120px;
}
.charsheet select.sheet-rogue-min,
.charsheet input.sheet-rogue-min {
min-width: 120px;
width: 100%;
}
.charsheet select.sheet-spell-half,
.charsheet input.sheet-spell-half {
width: 125px;
@@ -67,10 +82,20 @@
.charsheet input.sheet-middle {
width: 138px;
}
.charsheet select.sheet-middle-min,
.charsheet input.sheet-middle-min {
min-width: 138px;
width: 100%;
}
.charsheet select.sheet-display,
.charsheet input.sheet-display {
width: 150px;
}
.charsheet select.sheet-display-min,
.charsheet input.sheet-display-min {
min-width: 150px;
width: 100%
}
.charsheet select.sheet-length,
.charsheet input.sheet-length {
width: 170px;
@@ -87,6 +112,10 @@
.charsheet input.sheet-spell {
width: 215px;
}
.charsheet select.sheet-nonweaponprof,
.charsheet input.sheet-nonweaponprof {
width: 260px;
}
.charsheet select.sheet-spell-big,
.charsheet input.sheet-spell-big {
width: 295px;
@@ -101,8 +130,8 @@
width: 2.5em;
}
.charsheet select.sheet-minish,
.charsheet .sheet-body input.sheet-minish,
.charsheet input.sheet-minish {
.charsheet input.sheet-minish,
.charsheet .sheet-body input.sheet-minish {
width: 3em;
}
.charsheet select.sheet-short,
@@ -113,6 +142,11 @@
.charsheet input.sheet-shortish {
width: 4em;
}
.charsheet select.sheet-mediumish,
.charsheet input.sheet-mediumish,
.charsheet input[type="number"].sheet-mediumish {
width: 4.5em;
}
.charsheet select {
display: inline-block;
@@ -131,6 +165,16 @@
min-width: 90%;
}
.charsheet th.sheet-td-dynamic50,
.charsheet td.sheet-td-dynamic50 {
width: 50%;
}
.charsheet th.sheet-td-dynamic100,
.charsheet td.sheet-td-dynamic100 {
width: 100%;
}
.charsheet select.sheet-table-dynamic {
margin: 0;
}
@@ -332,7 +376,8 @@ div[class^="sheet-section"] {
.charsheet input.sheet-tab81:checked ~ div.sheet-section-weapon-standard,
.charsheet input.sheet-tab82:checked ~ div.sheet-section-weapon-player-option,
.charsheet input.sheet-tab83:checked ~ div.sheet-section-weapon-player-option-melee,
.charsheet input.sheet-tab84:checked ~ div.sheet-section-weapon-player-option-ranged {
.charsheet input.sheet-tab84:checked ~ div.sheet-section-weapon-player-option-ranged,
.charsheet input.sheet-tab85:checked ~ div.sheet-section-settings-page {
display: block;
}
@@ -449,7 +494,8 @@ div[class^="sheet-section"] {
.charsheet input.sheet-tab81:checked + span.sheet-tab81,
.charsheet input.sheet-tab82:checked + span.sheet-tab82,
.charsheet input.sheet-tab83:checked + span.sheet-tab83,
.charsheet input.sheet-tab84:checked + span.sheet-tab84 {
.charsheet input.sheet-tab84:checked + span.sheet-tab84,
.charsheet input.sheet-tab85:checked + span.sheet-tab85 {
display: inline-table;
background: #ab8b57;
color: white;
@@ -507,27 +553,36 @@ input.sheet-tab + span::before
padding: 0 0 0 0;
}
h2,h3,h4,h5,h6 {
line-height:1em;
display:inline;
font-family: Arial, sans-serif;
font-size:.8125rem;
color: #000;
.charsheet h1,
.charsheet h2,
.charsheet h3,
.charsheet h4,
.charsheet h5,
.charsheet h6 {
font-weight: 800;
}
/*h2,h3,h4,h5,h6 {*/
/* line-height:1em;*/
/* display:inline;*/
/* font-family: Arial, sans-serif;*/
/* font-size:.8125rem;*/
/* color: #000;*/
/*}*/
h1 {
width: 100%;
background-color: #FFF;
color: #000;
padding:.2em 0 0 0;
min-height: 1em;
margin: 0 0 .5em 0;
font-size:.8125rem;
line-height:1.4em;
display:block;
text-align:center;
}
/*h1 {*/
/* width: 100%;*/
/* background-color: #FFF;*/
/* color: #000;*/
/* padding:.2em 0 0 0;*/
/* min-height: 1em;*/
/* margin: 0 0 .5em 0;*/
/* font-size:.8125rem;*/
/* line-height:1.4em;*/
/* display:block;*/
/* text-align:center;*/
/*}*/
.sheet-small-label1 {
display: inline-block;
@@ -781,7 +836,7 @@ button {
.charsheet,
.charsheet button:hover {
background-image: url("https://www.commentnation.com/backgrounds/images/parchment_paper_seamless_pattern.jpg");
background-image: url("https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/ADnD 2E Revised/img/background-parchment_paper_seamless_pattern.jpg");
}
/*/ Styles for 2ESheet rolltemplates /*/
@@ -791,6 +846,7 @@ button {
.sheet-rolltemplate-2Eattack div.sheet-template-container,
.sheet-rolltemplate-2Espell div.sheet-template-container,
.sheet-rolltemplate-2Echeck div.sheet-template-container,
.sheet-rolltemplate-2Egrenademiss div.sheet-template-container,
.sheet-rolltemplate-2Esave div.sheet-template-container {
border: none;
text-align: left;
@@ -800,6 +856,7 @@ button {
.sheet-rolltemplate-2Eattack th.sheet-template-title1,
.sheet-rolltemplate-2Espell th.sheet-template-title1,
.sheet-rolltemplate-2Echeck th.sheet-template-title1,
.sheet-rolltemplate-2Egrenademiss th.sheet-template-title1,
.sheet-rolltemplate-2Esave th.sheet-template-title1 {
font-size: 12pt;
font-weight: bold;
@@ -816,6 +873,7 @@ button {
.sheet-rolltemplate-2Eattack th.sheet-template-title2,
.sheet-rolltemplate-2Espell th.sheet-template-title2,
.sheet-rolltemplate-2Echeck th.sheet-template-title2,
.sheet-rolltemplate-2Egrenademiss th.sheet-template-title2,
.sheet-rolltemplate-2Esave th.sheet-template-title2 {
font-size: 12pt;
font-weight: bold;
@@ -832,6 +890,7 @@ button {
.sheet-rolltemplate-2Eattack th.sheet-template-subtitle1,
.sheet-rolltemplate-2Espell th.sheet-template-subtitle1,
.sheet-rolltemplate-2Echeck th.sheet-template-subtitle1,
.sheet-rolltemplate-2Egrenademiss th.sheet-template-subtitle1,
.sheet-rolltemplate-2Esave th.sheet-template-subtitle1 {
font-size: 8pt;
font-weight: normal;
@@ -849,6 +908,7 @@ button {
.sheet-rolltemplate-2Eattack th.sheet-template-subtitle2,
.sheet-rolltemplate-2Espell th.sheet-template-subtitle2,
.sheet-rolltemplate-2Echeck th.sheet-template-subtitle2,
.sheet-rolltemplate-2Egrenademiss th.sheet-template-subtitle2,
.sheet-rolltemplate-2Esave th.sheet-template-subtitle2 {
font-size: 8pt;
font-style: italic;
@@ -866,6 +926,7 @@ button {
.sheet-rolltemplate-2Eattack table,
.sheet-rolltemplate-2Espell table,
.sheet-rolltemplate-2Echeck table,
.sheet-rolltemplate-2Egrenademiss table,
.sheet-rolltemplate-2Esave table {
width: 100%;
}
@@ -873,12 +934,14 @@ button {
.sheet-rolltemplate-2Edefault .sheet-template-body tr:nth-child(even),
.sheet-rolltemplate-2Espell .sheet-template-body tr:nth-child(even),
.sheet-rolltemplate-2Echeck .sheet-template-body tr:nth-child(even),
.sheet-rolltemplate-2Egrenademiss .sheet-template-body tr:nth-child(even),
.sheet-rolltemplate-2Esave .sheet-template-body tr:nth-child(even) {
background-color: #e0e0e0;
}
.sheet-rolltemplate-2Edefault .sheet-template-body tr:nth-child(odd),
.sheet-rolltemplate-2Espell .sheet-template-body tr:nth-child(odd),
.sheet-rolltemplate-2Echeck .sheet-template-body tr:nth-child(odd),
.sheet-rolltemplate-2Egrenademiss .sheet-template-body tr:nth-child(odd),
.sheet-rolltemplate-2Esave .sheet-template-body tr:nth-child(odd) {
background-color: #f4f4f4;
}
@@ -887,6 +950,7 @@ button {
.sheet-rolltemplate-2Eattack div.sheet-template-body,
.sheet-rolltemplate-2Espell div.sheet-template-body,
.sheet-rolltemplate-2Echeck div.sheet-template-body,
.sheet-rolltemplate-2Egrenademiss div.sheet-template-body,
.sheet-rolltemplate-2Esave div.sheet-template-body {
border: 1px solid black;
border-bottom-right-radius: 8px;
@@ -900,6 +964,7 @@ button {
.sheet-rolltemplate-2Eattack div.sheet-attack-head,
.sheet-rolltemplate-2Espell div.sheet-spell-head,
.sheet-rolltemplate-2Echeck div.sheet-check-head,
.sheet-rolltemplate-2Egrenademiss div.sheet-grenade-head,
.sheet-rolltemplate-2Esave div.sheet-save-head {
border: 1px solid #000000;
border-top-right-radius: 8px;
@@ -973,7 +1038,7 @@ button {
.sheet-rolltemplate-2Eattack td.sheet-attack-c2 {
position: relative;
background-image: url("http://i.imgur.com/rFM5RnH.png");
background-image: url("https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/ADnD 2E Revised/img/rolltemplate/ac.png");
background-repeat: no-repeat;
background-size: 50px 50px;
background-position: center;
@@ -983,7 +1048,7 @@ button {
.sheet-rolltemplate-2Eattack td.sheet-attack-c3 {
position: relative;
background-image: url("http://i.imgur.com/QFPPKuq.png");
background-image: url("https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/ADnD 2E Revised/img/rolltemplate/crit.png");
background-repeat: no-repeat;
background-size: 50px 50px;
background-position: center;
@@ -1147,60 +1212,13 @@ button {
background: #f26f2e;
}
.sheet-rolltemplate-2Esave td.sheet-save-c1 {
font-size: 9pt;
font-weight: bold;
text-transform: capitalize;
color: #000000;
text-align: center;
font-family: "verdana", sans-serif;
border: none;
padding: 4px;
margin: 0;
}
.sheet-rolltemplate-2Esave td.sheet-save-c2 {
font-size: 10pt;
font-weight: bold;
text-transform: capitalize;
text-align: center;
font-family: "verdana", sans-serif;
border: none;
padding: 4px;
margin: 0;
}
.sheet-rolltemplate-2Esave td.sheet-save-c3 {
background-color: #093a01;
border: none;
font-size: 12pt;
font-weight: bold;
font-style: italic;
font-family: "verdana", sans-serif;
text-align: center;
color: #ffffff;
padding: 4px;
margin: 0;
}
.sheet-rolltemplate-2Esave td.sheet-save-c4 {
background-color: #a01616;
border: none;
font-size: 12pt;
font-weight: bold;
font-style: italic;
font-family: "verdana", sans-serif;
text-align: center;
color: #ffffff;
padding: 4px;
margin: 0;
}
.sheet-rolltemplate-2Echeck div.sheet-check-head {
background: #512E5F;
background: #512E5F;
}
.sheet-rolltemplate-2Echeck td.sheet-check-c1 {
.sheet-rolltemplate-2Esave td.sheet-save-c1,
.sheet-rolltemplate-2Echeck td.sheet-check-c1,
.sheet-rolltemplate-2Egrenademiss td.sheet-grenade-c1 {
font-size: 9pt;
font-weight: bold;
text-transform: capitalize;
@@ -1212,7 +1230,9 @@ button {
margin: 0;
}
.sheet-rolltemplate-2Echeck td.sheet-check-c2 {
.sheet-rolltemplate-2Esave td.sheet-save-c2,
.sheet-rolltemplate-2Echeck td.sheet-check-c2,
.sheet-rolltemplate-2Egrenademiss td.sheet-grenade-c2 {
font-size: 10pt;
font-weight: bold;
text-transform: capitalize;
@@ -1223,7 +1243,9 @@ button {
margin: 0;
}
.sheet-rolltemplate-2Echeck td.sheet-check-c3 {
.sheet-rolltemplate-2Esave td.sheet-save-c3,
.sheet-rolltemplate-2Echeck td.sheet-check-c3,
.sheet-rolltemplate-2Egrenademiss td.sheet-grenade-c3 {
background-color: #093a01;
border: none;
font-size: 12pt;
@@ -1236,7 +1258,9 @@ button {
margin: 0;
}
.sheet-rolltemplate-2Echeck td.sheet-check-c4 {
.sheet-rolltemplate-2Esave td.sheet-save-c4,
.sheet-rolltemplate-2Echeck td.sheet-check-c4,
.sheet-rolltemplate-2Egrenademiss td.sheet-grenade-c4 {
background-color: #a01616;
border: none;
font-size: 12pt;
@@ -1249,6 +1273,42 @@ button {
margin: 0;
}
.sheet-rolltemplate-2Esave td.sheet-save-c5,
.sheet-rolltemplate-2Echeck td.sheet-check-c5,
.sheet-rolltemplate-2Egrenademiss td.sheet-grenade-c5 {
background-color: #001BB5;
border: none;
font-size: 12pt;
font-weight: bold;
font-style: italic;
font-family: "verdana", sans-serif;
text-align: center;
color: #ffffff;
padding: 4px;
margin: 0;
}
/*/ Styles for the 2Egrenade Template /*/
.sheet-rolltemplate-2Egrenademiss div.sheet-grenade-head {
background: #B7A64E;
}
.sheet-rolltemplate-2Egrenademiss .sheet-hit-text {
font-size: 10pt;
}
.sheet-rolltemplate-2Egrenademiss .sheet-miss-text {
font-size: 8pt;
}
/*/ Overwrite inline roll styling /*/
.sheet-rolltemplate-2Egrenademiss .sheet-ignore-inlineroll .inlinerollresult {
background-color: inherit;
border: inherit;
padding: 0;
font-weight: inherit;
font-size: inherit;
}
.sheet-inline {
display: inline-block;
}
@@ -1276,7 +1336,17 @@ table.sheet-default-header-every-third-column td:nth-child(3n+1),
.sheet-centering,
.sheet-centering-padding-2,
.sheet-centering-padding-5 {
.sheet-centering-padding-5,
table.sheet-centering-column1 td:nth-child(1),
table.sheet-centering-column1 th:nth-child(1),
table.sheet-centering-column2 td:nth-child(2),
table.sheet-centering-column2 th:nth-child(2),
table.sheet-centering-column3 td:nth-child(3),
table.sheet-centering-column3 th:nth-child(3),
table.sheet-centering-padding-5-column2 th:nth-child(2),
table.sheet-centering-padding-5-column2 td:nth-child(2),
table.sheet-centering-padding-5-column3 th:nth-child(3),
table.sheet-centering-padding-5-column3 td:nth-child(3) {
text-align: center;
vertical-align: middle;
}
@@ -1299,6 +1369,10 @@ table.sheet-default-header-every-third-column td:nth-child(3n+1),
padding-right: 2px;
}
table.sheet-centering-padding-5-column2 th:nth-child(2),
table.sheet-centering-padding-5-column2 td:nth-child(2),
table.sheet-centering-padding-5-column3 th:nth-child(3),
table.sheet-centering-padding-5-column3 td:nth-child(3),
.sheet-centering-padding-5 {
padding-left: 5px;
padding-right: 5px;
+12
View File
@@ -0,0 +1,12 @@
const pug = require('pug');
const fs = require('fs');
console.log('---- Generating spells datalists ----');
const spellsJs = ['wizardSpells.js', 'priestSpells.js'];
let html = '';
spellsJs.forEach(jsFile => {
console.log(jsFile);
const spells = require(`../javascript/${jsFile}`);
html += pug.renderFile('../pug/spellsDatalists.pug', {pretty: true, data: spells});
});
fs.writeFileSync('../html/spellsDatalists.html', html);
console.log('');
@@ -1,9 +1,9 @@
& 'D:\git\roll20-character-sheets\AD&D 2E Revised\build\sanitizeFiles.ps1'
& 'D:\git\roll20-character-sheets\ADnD 2E Revised\build\sanitizeFiles.ps1'
"---- Combining files ----"
$inputFile = 'D:\git\roll20-character-sheets\AD&D 2E Revised\html\2ESheet-base.html'
$sourceFolder = 'D:\git\roll20-character-sheets\AD&D 2E Revised'
$outputFile = 'D:\git\roll20-character-sheets\AD&D 2E Revised\2ESheet.html'
$inputFile = 'D:\git\roll20-character-sheets\ADnD 2E Revised\html\2ESheet-base.html'
$sourceFolder = 'D:\git\roll20-character-sheets\ADnD 2E Revised'
$outputFile = 'D:\git\roll20-character-sheets\ADnD 2E Revised\2ESheet.html'
$replaceConstant = '#REPLACE{0}#'
@@ -25,12 +25,17 @@ $inserts | ForEach-Object {
}
}
$rawContent = $fileContent -join "`n"
$replaces = $split[2..100];
for ($i=0; $i -lt $replaces.Length; $i++) {
$replace = $replaceConstant -f $i;
$rawContent = $rawContent.Replace($replace, $replaces[$i])
$replaceValues = $split[2..100];
for ($i=0; $i -lt $replaceValues.Length; $i++) {
$replaceKey = $replaceConstant -f $i;
$replaceValue = $replaceValues[$i];
if ($replaceValue.StartsWith("repeating")) {
$replaceValue = $replaceValue.Replace("-", "_") #Allows for repeating section inserts
}
$rawContent = $rawContent.Replace($replaceKey, $replaceValue)
}
$rawContent = $rawContent -replace "\#REPLACE\d+\#", ""
$rawContent = $rawContent -replace "\r?\nmodule\.exports.*;", ""
$regex = "^" + [Regex]::Escape($_.Line) + "$"
$content = $content -replace $regex, $rawContent
@@ -1,5 +1,20 @@
$htmlFolder = 'D:\git\roll20-character-sheets\AD&D 2E Revised\html'
$javascriptFolder = 'D:\git\roll20-character-sheets\AD&D 2E Revised\javascript'
$htmlFolder = 'D:\git\roll20-character-sheets\ADnD 2E Revised\html'
$javascriptFolder = 'D:\git\roll20-character-sheets\ADnD 2E Revised\javascript'
"---- Sanitize Javascript files ----"
Get-ChildItem $javascriptFolder | ForEach-Object {
$_.Name
$content = Get-Content -Raw $_.FullName
$replace = $content -replace [Regex]::Escape("\\"), "\"
$replace = $replace -replace [Regex]::Escape(" \n"), "\n"
if ($replace -cne $content) {
$replace | Set-Content -NoNewline -Path $_.FullName
}
}
""
node buildPug.js
"---- Sanitize HTML files ----"
Get-ChildItem $htmlFolder | ForEach-Object {
@@ -13,16 +28,4 @@ Get-ChildItem $htmlFolder | ForEach-Object {
}
}
""
"---- Sanitize Javascript files ----"
Get-ChildItem $javascriptFolder | ForEach-Object {
$_.Name
$content = Get-Content -Raw $_.FullName
$replace = $content -replace [Regex]::Escape("\\"), "\"
$replace = $replace -replace [Regex]::Escape(" \n"), "\n"
if ($replace -cne $content) {
$replace | Set-Content -NoNewline -Path $_.FullName
}
}
""
+30
View File
@@ -0,0 +1,30 @@
Possible NPC sheet
- Follower sheet, collapse spells for Animals/Familiars
- Add top level button to jump directly to the Follower sheet
- More detailed weapons and such for npcs
- Remove repeating NPC sections?
- Structured spell book, which fields for total pages, pages used, and remaining pages.
-- Multiple spell books
-- A roll button for the number of pages needed
-- A roll button for the number of days to write it into the book
- Armor Class detailed breakdown
- Armor class Slashing/Piercing/Bludgeoning
Follower classes
AD&D 2E Book release order
The Complete Fighter's Handbook December 1989
The Complete Thief's Handbook December 1989
The Complete Priest's Handbook May 1990
The Complete Wizard's Handbook June 1990
Tome of Magic May 1991
The Complete Bard's Handbook March 1992
The Complete Ranger's Handbook December 1993
The Complete Paladin's Handbook May 1994
The Complete Druid's Handbook August 1994
The Complete Book of Necromancers March 1995
Player's Option: Combat & Tactics June 1995
Player's Option: Skills & Powers July 1995
Player's Option: Spells & Magic May 1996
File diff suppressed because it is too large Load Diff
+499
View File
@@ -0,0 +1,499 @@
<!-- Data lists -->
<datalist id="ability-scores">
<option value="@{Strength}"></option>
<option value="@{Dexterity}"></option>
<option value="@{Constitution}"></option>
<option value="@{Intelligence}"></option>
<option value="@{Wisdom}"></option>
<option value="@{Charisma}"></option>
</datalist>
<datalist id="races">
<option value="Dwarf"></option>
<option value="Elf"></option>
<option value="Gnome"></option>
<option value="Half-Elf"></option>
<option value="Halfling"></option>
<option value="Human"></option>
</datalist>
<datalist id="class-groups">
<option value="Warrior"></option>
<option value="Wizard"></option>
<option value="Priest"></option>
<option value="Rogue"></option>
<option value="Psion"></option>
</datalist>
<datalist id="classes">
<option value="Fighter">Warrior</option>
<option value="Paladin">Warrior</option>
<option value="Ranger">Warrior</option>
<option value="Mage">Wizard</option>
<option value="Illusionist">Wizard</option>
<option value="Cleric">Priest</option>
<option value="Druid">Priest</option>
<option value="Thief">Rogue</option>
<option value="Bard">Rogue</option>
</datalist>
<datalist id="player-movement">
<option value="6">Dwarf/Gnome/Halfling</option>
<option value="12">Human/Elf/Half-elf</option>
</datalist>
<datalist id="mount-movement">
<option value="12">Draft Horse/Pony/Mule</option>
<option value="15">Heavy Horse</option>
<option value="18">Medium Horse</option>
<option value="24">Light/Wild/Riding Horse</option>
</datalist>
<datalist id="level-select">
<option value="@{level-class1}"></option>
<option value="@{level-class2}"></option>
<option value="@{level-class3}"></option>
<option value="@{level-class4}"></option>
<option value="@{level-class5}"></option>
</datalist>
<datalist id="rogue-backstab">
<option value="2">Level 1-4</option>
<option value="3">Level 5-8</option>
<option value="4">Level 9-12</option>
<option value="5">Level 13+</option>
</datalist>
<datalist id="rogue-skill-macros">
<option value="30+(30*@{level-class1})">Thief</option>
<option value="5+(15*@{level-class1})">Bard</option>
</datalist>
<datalist id="rogue-armor">
<option value="Padded Armor">Thief/Bard</option>
<option value="Studded Leather">Thief/Bard</option>
<option value="Elven Chain Mail">Thief/Bard</option>
<option value="Ring Mail">Bard</option>
<option value="Hide Armor">Bard</option>
<option value="Brigandine Armor">Bard</option>
<option value="Scale Mail">Bard</option>
<option value="Chain Mail">Bard</option>
<option value="Hide Armor (Thief Disguise)"></option>
<option value="Ring Mail (Thief Disguise)"></option>
<option value="Chain Mail (Thief Disguise)"></option>
<option value="Brigandine (Thief Disguise)"></option>
<option value="Scale Mail (Thief Disguise)"></option>
<option value="Splint Mail (Disguise)"></option>
<option value="Banded Armor (Disguise)"></option>
<option value="Plate Mail (Disguise)"></option>
<option value="Bronze Plate Mail (Disguise)"></option>
<option value="Field Plate (Disguise)"></option>
<option value="Full Plate (Disguise)"></option>
</datalist>
<datalist id="weapprof-macros">
<option value="(4+floor(@{level-class1}/3))">Warrior</option>
<option value="(1+floor(@{level-class1}/6))">Wizard</option>
<option value="(2+floor(@{level-class1}/4))">Priest</option>
<option value="(2+floor(@{level-class1}/4))">Rogue</option>
</datalist>
<datalist id="weapprof-penalty">
<option value="-2">Warrior</option>
<option value="-5">Wizard</option>
<option value="-3">Priest</option>
<option value="-3">Rogue</option>
</datalist>
<datalist id="prof-macros">
<option value="(3+floor(@{level-class1}/3)+@{intlang})">Warrior</option>
<option value="(4+floor(@{level-class1}/3)+@{intlang})">Wizard</option>
<option value="(4+floor(@{level-class1}/3)+@{intlang})">Priest</option>
<option value="(3+floor(@{level-class1}/4)+@{intlang})">Rogue</option>
</datalist>
<datalist id="base-thac0">
<option value="20"></option>
<option value="(21-@{level-class1})">Warrior</option>
<option value="(21-ceil(@{level-class1}/3))">Wizard</option>
<option value="(22-(ceil(@{level-class1}/3)*2))">Priest</option>
<option value="(21-ceil(@{level-class1}/2))">Rogue</option>
<option value="(21-ceil(@{level-class1}/2))">Psionic</option>
</datalist>
<datalist id="weapon-proficiencies">
<option value="Arquebus"></option>
<option value="Battle axe"></option>
<option value="Blowgun"></option>
<option value="Short bow"></option>
<option value="Long bow"></option>
<option value="Composite short bow"></option>
<option value="Composite long bow"></option>
<option value="Club"></option>
<option value="Hand crossbow"></option>
<option value="Light crossbow"></option>
<option value="Heavy crossbow"></option>
<option value="Dagger / Dirk"></option>
<option value="Dart"></option>
<option value="Footman's flail"></option>
<option value="Footman's mace"></option>
<option value="Footman's pick"></option>
<option value="Hand / Throwing axe"></option>
<option value="Harpoon"></option>
<option value="Horseman's flail"></option>
<option value="Horseman's mace"></option>
<option value="Horseman's pick"></option>
<option value="Javelin"></option>
<option value="Knife"></option>
<option value="Heavy horse lance"></option>
<option value="Light horse lance"></option>
<option value="Jousting lance"></option>
<option value="Medium horse lance"></option>
<option value="Mancatcher"></option>
<option value="Morning star"></option>
<option value="Awl pike">Polearm</option>
<option value="Bardiche">Polearm</option>
<option value="Bec de corbin">Polearm</option>
<option value="Bill-guisarme">Polearm</option>
<option value="Fauchard">Polearm</option>
<option value="Fauchard-fork">Polearm</option>
<option value="Glaive">Polearm</option>
<option value="Glaive-guisarme">Polearm</option>
<option value="Guisarme">Polearm</option>
<option value="Guisarme-voulge">Polearm</option>
<option value="Halberd">Polearm</option>
<option value="Hook fauchard">Polearm</option>
<option value="Lucern hammer">Polearm</option>
<option value="Military fork">Polearm</option>
<option value="Partisan">Polearm</option>
<option value="Ranseur">Polearm</option>
<option value="Spetum">Polearm</option>
<option value="Voulge">Polearm</option>
<option value="Quarterstaff"></option>
<option value="Scourge"></option>
<option value="Sickle"></option>
<option value="Sling"></option>
<option value="Spear"></option>
<option value="Staff sling"></option>
<option value="Bastard sword"></option>
<option value="Broad sword"></option>
<option value="Khopesh">Sword</option>
<option value="Long sword"></option>
<option value="Scimitar">Sword</option>
<option value="Short sword"></option>
<option value="Two-handed sword"></option>
<option value="Trident"></option>
<option value="Warhammer"></option>
<option value="Whip"></option>
</datalist>
<datalist id="nonweapon-proficiencies">
<option value="Agriculture"></option>
<option value="Animal Handling"></option>
<option value="Animal Training"></option>
<option value="Artistic Ability"></option>
<option value="Blacksmithing"></option>
<option value="Brewing"></option>
<option value="Carpentry"></option>
<option value="Cobbling"></option>
<option value="Cooking"></option>
<option value="Dancing"></option>
<option value="Direction Sense"></option>
<option value="Etiquette"></option>
<option value="Fire-building"></option>
<option value="Fishing"></option>
<option value="Heraldry"></option>
<option value="Languages, Modern"></option>
<option value="Leatherworking"></option>
<option value="Mining"></option>
<option value="Pottery"></option>
<option value="Riding, Airborne"></option>
<option value="Riding, Land-based"></option>
<option value="Rope Use"></option>
<option value="Seamanship"></option>
<option value="Seamstress/Tailor"></option>
<option value="Singing"></option>
<option value="Stonemasonry"></option>
<option value="Swimming"></option>
<option value="Weather Sense"></option>
<option value="Weaving"></option>
<option value="Ancient History">Priest/Rogue/Wizard</option>
<option value="Animal Lore">Warrior</option>
<option value="Appraising">Rogue</option>
<option value="Armorer">Warrior</option>
<option value="Astrology">Priest/Wizard</option>
<option value="Blind-fighting">Rogue/Warrior</option>
<option value="Bowyer/Fletcher">Warrior</option>
<option value="Charioteering">Warrior</option>
<option value="Disguise">Rogue</option>
<option value="Endurance">Warrior</option>
<option value="Engineering">Priest/Wizard</option>
<option value="Forgery">Rogue</option>
<option value="Gaming">Rogue/Warrior</option>
<option value="Gem Cutting">Rogue/Wizard</option>
<option value="Healing">Priest</option>
<option value="Herbalism">Priest/Wizard</option>
<option value="Hunting">Warrior</option>
<option value="Juggling">Rogue</option>
<option value="Jumping">Rogue</option>
<option value="Languages, Ancient">Priest/Wizard</option>
<option value="Local History">Priest/Rogue</option>
<option value="Mountaineering">Warrior</option>
<option value="Musical Instrument">Priest/Rogue</option>
<option value="Navigation">Priest/Warrior/Wizard</option>
<option value="Reading Lips">Rogue</option>
<option value="Reading/Writing">Priest/Wizard</option>
<option value="Religion">Priest/Wizard</option>
<option value="Running">Warrior</option>
<option value="Set Snares">Rogue/Warrior</option>
<option value="Spellcraft">Priest/Wizard</option>
<option value="Survival">Warrior</option>
<option value="Tightrope Walking">Rogue</option>
<option value="Tracking">Warrior</option>
<option value="Tumbling">Rogue</option>
<option value="Ventriloquism">Rogue</option>
<option value="Weaponsmithing">Warrior</option>
</datalist>
<datalist id="languages">
<option value="Common">Human/Dwarf/Elf/Gnome/Half-Elf/Halfling</option>
<option value="Dwarven">Dwarf/Gnome/Halfling</option>
<option value="Elvish">Elf/Half-Elf/Halfling</option>
<option value="Gnome">Dwarf/Elf/Gnome/Half-Elf/Halfling</option>
<option value="Halfling">Elf/Gnome/Half-Elf/Halfling</option>
<option value="Gnoll">Elf/Half-Elf</option>
<option value="Goblin">Dwarf/Elf/Gnome/Half-Elf/Halfling</option>
<option value="Hobgoblin">Elf/Half-Elf</option>
<option value="Kobold">Dwarf/Gnome</option>
<option value="Orc">Dwarf/Elf//Half-Elf/Halfling</option>
<option value="Common Burrowing mammals">Gnome</option>
<option value="Druidic">Druid</option>
<option value="Centaurs">Druid</option>
<option value="Dryads">Druid</option>
<option value="Fauns">Druid</option>
<option value="Dragons">Druid</option>
<option value="Giants">Druid</option>
<option value="Lizard men">Druid</option>
<option value="Manticores">Druid</option>
<option value="Nixies">Druid</option>
<option value="Pixies">Druid</option>
<option value="Sprites">Druid</option>
<option value="Treants">Druid</option>
</datalist>
<datalist id="melee-weapons">
<option value="Battle axe"></option>
<option value="Club"></option>
<option value="Dagger"></option>
<option value="Dirk"></option>
<option value="Dart"></option>
<option value="Footman's flail"></option>
<option value="Footman's mace"></option>
<option value="Footman's pick"></option>
<option value="Hand axe"></option>
<option value="Harpoon"></option>
<option value="Horseman's flail"></option>
<option value="Horseman's mace"></option>
<option value="Horseman's pick"></option>
<option value="Javelin"></option>
<option value="Knife"></option>
<option value="Heavy horse lance"></option>
<option value="Light horse lance"></option>
<option value="Jousting lance"></option>
<option value="Medium horse lance"></option>
<option value="Mancatcher"></option>
<option value="Morning star"></option>
<option value="Awl pike">Polearm</option>
<option value="Bardiche">Polearm</option>
<option value="Bec de corbin">Polearm</option>
<option value="Bill-guisarme">Polearm</option>
<option value="Fauchard">Polearm</option>
<option value="Fauchard-fork">Polearm</option>
<option value="Glaive">Polearm</option>
<option value="Glaive-guisarme">Polearm</option>
<option value="Guisarme">Polearm</option>
<option value="Guisarme-voulge">Polearm</option>
<option value="Halberd">Polearm</option>
<option value="Hook fauchard">Polearm</option>
<option value="Lucern hammer">Polearm</option>
<option value="Military fork">Polearm</option>
<option value="Partisan">Polearm</option>
<option value="Ranseur">Polearm</option>
<option value="Spetum">Polearm</option>
<option value="Voulge">Polearm</option>
<option value="Quarterstaff"></option>
<option value="Scourge"></option>
<option value="Sickle"></option>
<option value="Spear"></option>
<option value="Bastard sword (One-handed)"></option>
<option value="Bastard sword (Two-handed)"></option>
<option value="Broad sword"></option>
<option value="Khopesh">Sword</option>
<option value="Long sword"></option>
<option value="Scimitar">Sword</option>
<option value="Short sword"></option>
<option value="Two-handed sword"></option>
<option value="Trident"></option>
<option value="Warhammer"></option>
<option value="Whip"></option>
</datalist>
<datalist id="ranged-weapons">
<option value="Arquebus"></option>
<option value="Blowgun (Barbed Dart)"></option>
<option value="Blowgun (Needle)"></option>
<option value="Short bow (Flight arrow)"></option>
<option value="Long bow (Flight arrow)"></option>
<option value="Long bow (Sheaf arrow)"></option>
<option value="Composite short bow (Flight arrow)"></option>
<option value="Composite long bow (Flight arrow)"></option>
<option value="Composite long bow (Sheaf arrow)"></option>
<option value="Club"></option>
<option value="Hand crossbow"></option>
<option value="Light crossbow"></option>
<option value="Heavy crossbow"></option>
<option value="Dagger"></option>
<option value="Dirk"></option>
<option value="Dart"></option>
<option value="Hand axe"></option>
<option value="Harpoon"></option>
<option value="Javelin"></option>
<option value="Knife"></option>
<option value="Sling (Bullet)"></option>
<option value="Sling (Stone)"></option>
<option value="Spear"></option>
<option value="Staff sling (Bullet)"></option>
<option value="Staff sling (Stone)"></option>
<option value="Warhammer"></option>
</datalist>
<datalist id="all-weapons">
<option value="Arquebus"></option>
<option value="Battle axe"></option>
<option value="Blowgun (Barbed Dart)"></option>
<option value="Blowgun (Needle)"></option>
<option value="Short bow (Flight arrow)"></option>
<option value="Long bow (Flight arrow)"></option>
<option value="Long bow (Sheaf arrow)"></option>
<option value="Composite short bow (Flight arrow)"></option>
<option value="Composite long bow (Flight arrow)"></option>
<option value="Composite long bow (Sheaf arrow)"></option>
<option value="Club"></option>
<option value="Hand crossbow"></option>
<option value="Light crossbow"></option>
<option value="Heavy crossbow"></option>
<option value="Dagger"></option>
<option value="Dirk"></option>
<option value="Dart"></option>
<option value="Footman's flail"></option>
<option value="Footman's mace"></option>
<option value="Footman's pick"></option>
<option value="Hand axe"></option>
<option value="Harpoon"></option>
<option value="Horseman's flail"></option>
<option value="Horseman's mace"></option>
<option value="Horseman's pick"></option>
<option value="Javelin"></option>
<option value="Knife"></option>
<option value="Heavy horse lance"></option>
<option value="Light horse lance"></option>
<option value="Jousting lance"></option>
<option value="Medium horse lance"></option>
<option value="Mancatcher"></option>
<option value="Morning star"></option>
<option value="Awl pike">Polearm</option>
<option value="Bardiche">Polearm</option>
<option value="Bec de corbin">Polearm</option>
<option value="Bill-guisarme">Polearm</option>
<option value="Fauchard">Polearm</option>
<option value="Fauchard-fork">Polearm</option>
<option value="Glaive">Polearm</option>
<option value="Glaive-guisarme">Polearm</option>
<option value="Guisarme">Polearm</option>
<option value="Guisarme-voulge">Polearm</option>
<option value="Halberd">Polearm</option>
<option value="Hook fauchard">Polearm</option>
<option value="Lucern hammer">Polearm</option>
<option value="Military fork">Polearm</option>
<option value="Partisan">Polearm</option>
<option value="Ranseur">Polearm</option>
<option value="Spetum">Polearm</option>
<option value="Voulge">Polearm</option>
<option value="Quarterstaff"></option>
<option value="Scourge"></option>
<option value="Sickle"></option>
<option value="Sling (Bullet)"></option>
<option value="Sling (Stone)"></option>
<option value="Spear"></option>
<option value="Staff sling (Bullet)"></option>
<option value="Staff sling (Stone)"></option>
<option value="Bastard sword (One-handed)"></option>
<option value="Bastard sword (Two-handed)"></option>
<option value="Broad sword"></option>
<option value="Khopesh">Sword</option>
<option value="Long sword"></option>
<option value="Scimitar">Sword</option>
<option value="Short sword"></option>
<option value="Two-handed sword"></option>
<option value="Trident"></option>
<option value="Warhammer"></option>
<option value="Whip"></option>
</datalist>
<datalist id="sphere-major">
<option value="Combat, Divination, Healing, Protection">Paladin</option>
<option value="">Ranger</option>
<option value="All, Astral, Charm, Combat, Creation, Divination, Guardian, Healing, Necromantic, Protection, Summoning, Sun">Cleric</option>
<option value="All, Animal, Elemental (Earth, Air, Fire, Water), Healing, Plant, Weather">Druid</option>
</datalist>
<datalist id="sphere-minor">
<option value="">Paladin</option>
<option value="Animal, Plant">Ranger</option>
<option value="Elemental (Earth, Air, Fire, Water)">Cleric</option>
<option value="Divination">Druid</option>
</datalist>
<!-- Monster sheet datalists -->
<datalist id="monster-frequency">
<option value="Very rare (4%)">4% chance</option>
<option value="Rare (11%)">11% chance</option>
<option value="Uncommon (20%)">20% chance</option>
<option value="Common (65%)">65% chance</option>
</datalist>
<datalist id="monster-intelligence">
<option value="0 (Nonintelligent)">Nonintelligent or not ratable</option>
<option value="1 (Animal)">Animal intelligence</option>
<option value="2-4 (Semi)">Semi-intelligent</option>
<option value="5-7 (Low)">Low intelligence</option>
<option value="8-10 (Average)">Average (human) intelligence</option>
<option value="11-12 (Very)">Very intelligent</option>
<option value="13-14 (High)">High intelligence</option>
<option value="15-16 (Exceptional)">Exceptional intelligence</option>
<option value="17-18 (Genius)">Genius</option>
<option value="19-20 (Supra-genius)">Supra-genius</option>
<option value="21+ (Godlike)">Godlike intelligence</option>
</datalist>
<datalist id="monster-size">
<option value="T">Tiny (2' tall or less)</option>
<option value="S">Small (2+' to 4')</option>
<option value="M">Medium (4+' to 7')</option>
<option value="L">Large (7+' to 12')</option>
<option value="H">Huge (12+' to 25')</option>
<option value="G">Gargantuan (25+')</option>
</datalist>
<datalist id="monster-morale">
<option value="2">Unreliable</option>
<option value="3">Unreliable</option>
<option value="4">Unreliable</option>
<option value="5">Unsteady</option>
<option value="6">Unsteady</option>
<option value="7">Unsteady</option>
<option value="8">Average</option>
<option value="9">Average</option>
<option value="10">Average</option>
<option value="11">Steady</option>
<option value="12">Steady</option>
<option value="13">Elite</option>
<option value="14">Elite</option>
<option value="15">Champion</option>
<option value="16">Champion</option>
<option value="17">Fanatic</option>
<option value="18">Fanatic</option>
<option value="19">Fearless</option>
<option value="20">Fearless</option>
</datalist>
<datalist id="monster-level-select">
<option value="@{hitdice}"></option>
</datalist>
+25
View File
@@ -0,0 +1,25 @@
<div class="sheet-col">
<table class="sheet-table-center">
<tr>
<td colspan="4"><input type="text" name="attr_spellname#REPLACE0#" title="@{#REPLACE1#spellname#REPLACE0#}" class="sheet-spell" placeholder="Spell name"></td>
</tr>
<tr>
<td><label>Cast Today: </label></td>
<td><input type="number" name="attr_cast-value#REPLACE0#" title="@{#REPLACE1#cast-value#REPLACE0#}" value="0" class="sheet-short"></td>
<td class="sheet-centering-padding-2"><label>/</label></td>
<td><input type="number" name="attr_cast-max#REPLACE0#" title="@{#REPLACE1#cast-max#REPLACE0#}" class="sheet-short"></td>
</tr>
<tr>
<td><label>Casting Time: </label></td>
<td><input type="text" name="attr_casttime#REPLACE0#" title="@{#REPLACE1#casttime#REPLACE0#}" class="sheet-short"></td>
<td></td>
<td><button type="roll" style="margin: 0;" name="roll_initspell#REPLACE0#" title="%{#REPLACE1#initspell#REPLACE0#}" value="/gmroll [[{([[1d10]]+@{casttime#REPLACE0#}), 1}kh1]] [Initiative (@{spellname#REPLACE0#})]&{tracker}">Initiative</button></td>
</tr>
<tr>
<td colspan="4"><textarea name="attr_cast-macro#REPLACE0#" title="@{#REPLACE1#cast-macro#REPLACE0#}" class="sheet-input-like" placeholder="Insert Spell effects."></textarea></td>
</tr>
<tr>
<td colspan="4"><button type="roll" name="roll_spellcast#REPLACE0#" title="%{#REPLACE1#spellcast#REPLACE0#}" value="@{cast-macro#REPLACE0#}">Roll Spell Effects</button></td>
</tr>
</table>
</div>
+28
View File
@@ -0,0 +1,28 @@
<div class="sheet-col">
<fieldset name="repeating_spells#REPLACE0#" class="repeating_spells#REPLACE0#">
<table class="sheet-table-center">
<tr>
<td colspan="4"><input type="text" name="attr_spellname#REPLACE0#" title="@{repeating_spells#REPLACE0#_$X_spellname#REPLACE0#}" class="sheet-spell" placeholder="Ability name"></td>
</tr>
<tr>
<td><label>Uses Today: </label></td>
<td><input type="number" name="attr_cast-value#REPLACE0#" title="@{repeating_spells#REPLACE0#_$X_cast-value#REPLACE0#}" value="0" class="sheet-short"></td>
<td class="sheet-centering-padding-2"><label>/</label></td>
<td><input type="number" name="attr_cast-max#REPLACE0#" title="@{repeating_spells#REPLACE0#_$X_cast-max#REPLACE0#}" value="0" class="sheet-short"></td>
</tr>
<tr>
<td><label>Initiative: </label></td>
<td><input type="text" name="attr_casttime#REPLACE0#" title="@{repeating_spells#REPLACE0#_$X_casttime#REPLACE0#}" class="sheet-short"></td>
<td></td>
<td><button style="margin: 0;" type="roll" name="roll_initspell#REPLACE0#" title="%{repeating_spells#REPLACE0#_$X_initspell#REPLACE0#}" value="/gmroll [[{([[1d10]]+@{casttime#REPLACE0#}), 1}kh1]] [Initiative (@{spellname#REPLACE0#})]&{tracker}">Initiative</button></td>
</tr>
<tr>
<td colspan="4"><textarea name="attr_cast-macro#REPLACE0#" title="@{repeating_spells#REPLACE0#_$X_cast-macro#REPLACE0#}" class="sheet-input-like" placeholder="Insert Ability effects."></textarea></td>
</tr>
<tr>
<td colspan="4"><button type="roll" name="roll_spellcast#REPLACE0#" title="%{repeating_spells#REPLACE0#_$X_spellcast#REPLACE0#}" value="@{cast-macro#REPLACE0#}">Roll Ability Effects</button></td>
</tr>
</table>
<hr>
</fieldset>
</div>
+779
View File
@@ -0,0 +1,779 @@
<rolltemplate class="sheet-rolltemplate-2Edefault">
<div class="sheet-template-container">
<div class="sheet-default-head">
<table>
<tr>
<th class="sheet-template-title1">{{name}}</th>
</tr>
{{#subtitle}}
<tr>
<th class="sheet-template-subtitle1">{{subtitle}}</th>
</tr>
{{/subtitle}}
</table>
</div>
<div class="sheet-template-body">
<table>
{{#allprops() desc desc1 desc2 name subtitle}}
<tr>
<td class="default-c1">{{key}}</td>
<td class="default-c2">{{value}}</td>
</tr>
{{/allprops() desc desc1 desc2 name subtitle}}
{{#desc}}
<tr>
<td class="default-c3" colspan="2">{{desc}}</td>
</tr>
{{/desc}}
{{#desc1}}
<tr>
<td class="default-c3" colspan="2">{{desc1}}</td>
</tr>
{{/desc1}}
{{#desc2}}
<tr>
<td class="default-c3" colspan="2">{{desc2}}</td>
</tr>
{{/desc2}}
</table>
</div>
</div>
</rolltemplate>
<rolltemplate class="sheet-rolltemplate-2Eattack">
<div class="sheet-template-container">
<div class="sheet-attack-head">
<table>
<tr>
<th class="sheet-template-title1">{{title}}</th>
</tr>
<tr>
<th class="sheet-template-subtitle1">{{subtitle}}</th>
</tr>
</table>
</div>
<div class="sheet-template-body">
<table>
<tr>
<td colspan="3"><span class="weapon-used">{{weapon_used}}</span></td>
</tr>
<tr>
<td class="attack-c1"><b>S/M</b></td>
<td class="attack-c2" rowspan="2">{{ac_hit}}</td>
<td class="attack-c1"><b>L</b></td>
</tr>
{{#crit_s}}{{#crit_l}}
{{#rollWasCrit() ac_hit}}
<tr>
<td class="attack-c3" rowspan="2">{{crit_s}}</td>
<td class="attack-c3" rowspan="2">{{crit_l}}</td>
</tr>
<tr>
<td class="attack-c4"><b>AC Hit</b></td>
</tr>
<tr>
<td colspan="3" class="attack-c5">CRITICAL HIT!{{#crit}}<br><span class='attack-crit'>{{crit}}</span>{{/crit}}</td>
</tr>
{{/rollWasCrit() ac_hit }}
{{#^rollWasCrit() ac_hit}}
<tr>
<td class="attack-c3" rowspan="2">{{dmg_s}}</td>
<td class="attack-c3" rowspan="2">{{dmg_l}}</td>
</tr>
<tr>
<td class="attack-c4"><b>AC Hit</b></td>
</tr>
{{/^rollWasCrit() ac_hit}}
{{/crit_l}}{{/crit_s}}
{{^crit_s}}{{^crit_l}}
<tr>
<td class="attack-c3" rowspan="2">{{dmg_s}}</td>
<td class="attack-c3" rowspan="2">{{dmg_l}}</td>
</tr>
<tr>
<td class="attack-c4"><b>AC Hit</b></td>
</tr>
{{#rollWasCrit() ac_hit}}
<tr>
<td colspan="3" class="attack-c5">CRITICAL HIT!{{#crit}}<br><span class='attack-crit'>{{crit}}</span>{{/crit}}</td>
</tr>
{{/rollWasCrit() ac_hit}}
{{/crit_l}}{{/crit_s}}
{{#rollWasFumble() ac_hit }}
<tr>
<td colspan="3" class="attack-c6">FUMBLE!{{#fumble}}<br><span class='attack-fumble'>{{fumble}}</span>{{/fumble}}</td>
</tr>
{{/rollWasFumble() ac_hit }}
</table>
</div>
</div>
</rolltemplate>
<rolltemplate class="sheet-rolltemplate-2Espell">
<div class="sheet-template-container">
<div class="sheet-spell-head">
<table>
<tr>
<th class="sheet-template-title1">{{title}}</th>
</tr>
<tr>
<th class="sheet-template-subtitle1">{{splevel}} * {{school}}</th>
</tr>
{{#sphere}}
<tr>
<th class="sheet-template-subtitle1">Priest Sphere: {{sphere}}</th>
</tr>
{{/sphere}}
</table>
</div>
<div class="sheet-template-body">
<table>
<tr>
<td class="sheet-spell-c1"><span class="sheet-spell-prop">Range</span><br>{{range}}</td>
<td class="sheet-spell-c1"><span class="sheet-spell-prop">Components</span><br>{{components}}</td>
</tr>
<tr>
<td class="spell-c1"><span class="sheet-spell-prop">Duration</span><br>{{duration}}</td>
<td class="spell-c1"><span class="sheet-spell-prop">Casting Time</span><br>{{time}}</td>
</tr>
<tr>
<td class="sheet-spell-c1"><span class="sheet-spell-prop">Area of Effect</span><br>{{aoe}}</td>
<td class="spell-c1"><span class="sheet-spell-prop">Saving Throw</span><br>{{save}}</td>
</tr>
{{#damage}}
<tr>
<td colspan="2" class="sheet-spell-c1"><span class="sheet-spell-prop">Damage: </span>
{{damage}}
{{#rollGreater() d2t 0}}{{d2}}{{/rollGreater() d2t 0}}
{{#rollGreater() d3t 0}}{{d3}}{{/rollGreater() d3t 0}}
{{#rollGreater() d4t 0}}{{d4}}{{/rollGreater() d4t 0}}
{{#rollGreater() d5t 0}}{{d5}}{{/rollGreater() d5t 0}}
{{#rollGreater() d6t 0}}{{d6}}{{/rollGreater() d6t 0}}
{{#rollGreater() d7t 0}}{{d7}}{{/rollGreater() d7t 0}}
{{#rollGreater() d8t 0}}{{d8}}{{/rollGreater() d8t 0}}
{{#rollGreater() d9t 0}}{{d9}}{{/rollGreater() d9t 0}}
{{#rollGreater() d10t 0}}{{d10}}{{/rollGreater() d10t 0}}
{{#rollGreater() d11t 0}}{{d11}}{{/rollGreater() d11t 0}}
{{#rollGreater() d12t 0}}{{d12}}{{/rollGreater() d12t 0}}
{{damagetype}}
</td>
</tr>
{{/damage}}
{{#healing}}
<tr>
<td colspan="2" class="sheet-spell-c1"><span class="sheet-spell-prop">Healing: </span>{{healing}}</td>
</tr>
{{/healing}}
{{#reference}}
<tr>
<td colspan="2" class="sheet-spell-c1"><span class="sheet-spell-prop">Reference: </span>{{reference}}</td>
</tr>
{{/reference}}
{{#materials}}
<tr>
<td colspan="2" class="sheet-spell-c1"><span class="sheet-spell-prop">Spell Materials: </span>{{materials}}</td>
</tr>
{{/materials}}
{{#effects}}
<tr>
<td colspan="2" class="sheet-spell-c2">
<span class="sheet-spell-prop">Effects:</span>
{{effects}}
{{#c1-1}}
<br>
<br>
<table class="sheet-spell-table sheet-spell-{{style}}">
<tr>
<td colspan="{{cs1-1}}" rowspan="{{rs1-1}}" class="sheet-spell-{{cc1-1}}">{{c1-1}}</td>
{{#c1-2}}
<td colspan="{{cs1-2}}" rowspan="{{rs1-2}}" class="sheet-spell-{{cc1-2}}">{{c1-2}}</td>
{{/c1-2}}
{{#c1-3}}
<td colspan="{{cs1-3}}" rowspan="{{rs1-3}}" class="sheet-spell-{{cc1-3}}">{{c1-3}}</td>
{{/c1-3}}
{{#c1-4}}
<td colspan="{{cs1-4}}" rowspan="{{rs1-4}}" class="sheet-spell-{{cc1-4}}">{{c1-4}}</td>
{{/c1-4}}
{{#c1-5}}
<td colspan="{{cs1-5}}" rowspan="{{rs1-5}}" class="sheet-spell-{{cc1-5}}">{{c1-5}}</td>
{{/c1-5}}
</tr>
<tr>
{{#c2-1}}
<td colspan="{{cs2-1}}" rowspan="{{rs2-1}}" class="sheet-spell-{{cc2-1}}">{{c2-1}}</td>
{{/c2-1}}
{{#c2-2}}
<td colspan="{{cs2-2}}" rowspan="{{rs2-2}}" class="sheet-spell-{{cc2-2}}">{{c2-2}}</td>
{{/c2-2}}
{{#c2-3}}
<td colspan="{{cs2-3}}" rowspan="{{rs2-3}}" class="sheet-spell-{{cc2-3}}">{{c2-3}}</td>
{{/c2-3}}
{{#c2-4}}
<td colspan="{{cs2-4}}" rowspan="{{rs2-4}}" class="sheet-spell-{{cc2-4}}">{{c2-4}}</td>
{{/c2-4}}
{{#c2-5}}
<td colspan="{{cs2-5}}" rowspan="{{rs2-5}}" class="sheet-spell-{{cc2-5}}">{{c2-5}}</td>
{{/c2-5}}
</tr>
{{#c3-1}}
<tr>
<td colspan="{{cs3-1}}" rowspan="{{rs3-1}}" class="sheet-spell-{{cc3-1}}">{{c3-1}}</td>
{{#c3-2}}
<td colspan="{{cs3-2}}" rowspan="{{rs3-2}}" class="sheet-spell-{{cc3-2}}">{{c3-2}}</td>
{{/c3-2}}
{{#c3-3}}
<td colspan="{{cs3-3}}" rowspan="{{rs3-3}}" class="sheet-spell-{{cc3-3}}">{{c3-3}}</td>
{{/c3-3}}
{{#c3-4}}
<td colspan="{{cs3-4}}" rowspan="{{rs3-4}}" class="sheet-spell-{{cc3-4}}">{{c3-4}}</td>
{{/c3-4}}
{{#c3-5}}
<td colspan="{{cs3-5}}" rowspan="{{rs3-5}}" class="sheet-spell-{{cc3-5}}">{{c3-5}}</td>
{{/c3-5}}
</tr>
{{/c3-1}}
{{#c4-1}}
<tr>
<td colspan="{{cs4-1}}" rowspan="{{rs4-1}}" class="sheet-spell-{{cc4-1}}">{{c4-1}}</td>
{{#c4-2}}
<td colspan="{{cs4-2}}" rowspan="{{rs4-2}}" class="sheet-spell-{{cc4-2}}">{{c4-2}}</td>
{{/c4-2}}
{{#c4-3}}
<td colspan="{{cs4-3}}" rowspan="{{rs4-3}}" class="sheet-spell-{{cc4-3}}">{{c4-3}}</td>
{{/c4-3}}
{{#c4-4}}
<td colspan="{{cs4-4}}" rowspan="{{rs4-4}}" class="sheet-spell-{{cc4-4}}">{{c4-4}}</td>
{{/c4-4}}
{{#c4-5}}
<td colspan="{{cs4-5}}" rowspan="{{rs4-5}}" class="sheet-spell-{{cc4-5}}">{{c4-5}}</td>
{{/c4-5}}
</tr>
{{/c4-1}}
{{#c5-1}}
<tr>
<td colspan="{{cs5-1}}" rowspan="{{rs5-1}}" class="sheet-spell-{{cc5-1}}">{{c5-1}}</td>
{{#c5-2}}
<td colspan="{{cs5-2}}" rowspan="{{rs5-2}}" class="sheet-spell-{{cc5-2}}">{{c5-2}}</td>
{{/c5-2}}
{{#c5-3}}
<td colspan="{{cs5-3}}" rowspan="{{rs5-3}}" class="sheet-spell-{{cc5-3}}">{{c5-3}}</td>
{{/c5-3}}
{{#c5-4}}
<td colspan="{{cs5-4}}" rowspan="{{rs5-4}}" class="sheet-spell-{{cc5-4}}">{{c5-4}}</td>
{{/c5-4}}
{{#c5-5}}
<td colspan="{{cs5-5}}" rowspan="{{rs5-5}}" class="sheet-spell-{{cc5-5}}">{{c5-5}}</td>
{{/c5-5}}
</tr>
{{/c5-1}}
{{#c6-1}}
<tr>
<td colspan="{{cs6-1}}" rowspan="{{rs6-1}}" class="sheet-spell-{{cc6-1}}">{{c6-1}}</td>
{{#c6-2}}
<td colspan="{{cs6-2}}" rowspan="{{rs6-2}}" class="sheet-spell-{{cc6-2}}">{{c6-2}}</td>
{{/c6-2}}
{{#c6-3}}
<td colspan="{{cs6-3}}" rowspan="{{rs6-3}}" class="sheet-spell-{{cc6-3}}">{{c6-3}}</td>
{{/c6-3}}
{{#c6-4}}
<td colspan="{{cs6-4}}" rowspan="{{rs6-4}}" class="sheet-spell-{{cc6-4}}">{{c6-4}}</td>
{{/c6-4}}
{{#c6-5}}
<td colspan="{{cs6-5}}" rowspan="{{rs6-5}}" class="sheet-spell-{{cc6-5}}">{{c6-5}}</td>
{{/c6-5}}
</tr>
{{/c6-1}}
{{#c7-1}}
<tr>
<td colspan="{{cs7-1}}" rowspan="{{rs7-1}}" class="sheet-spell-{{cc7-1}}">{{c7-1}}</td>
{{#c7-2}}
<td colspan="{{cs7-2}}" rowspan="{{rs7-2}}" class="sheet-spell-{{cc7-2}}">{{c7-2}}</td>
{{/c7-2}}
{{#c7-3}}
<td colspan="{{cs7-3}}" rowspan="{{rs7-3}}" class="sheet-spell-{{cc7-3}}">{{c7-3}}</td>
{{/c7-3}}
{{#c7-4}}
<td colspan="{{cs7-4}}" rowspan="{{rs7-4}}" class="sheet-spell-{{cc7-4}}">{{c7-4}}</td>
{{/c7-4}}
{{#c7-5}}
<td colspan="{{cs7-5}}" rowspan="{{rs7-5}}" class="sheet-spell-{{cc7-5}}">{{c7-5}}</td>
{{/c7-5}}
</tr>
{{/c7-1}}
{{#c8-1}}
<tr>
<td colspan="{{cs8-1}}" rowspan="{{rs8-1}}" class="sheet-spell-{{cc8-1}}">{{c8-1}}</td>
{{#c8-2}}
<td colspan="{{cs8-2}}" rowspan="{{rs8-2}}" class="sheet-spell-{{cc8-2}}">{{c8-2}}</td>
{{/c8-2}}
{{#c8-3}}
<td colspan="{{cs8-3}}" rowspan="{{rs8-3}}" class="sheet-spell-{{cc8-3}}">{{c8-3}}</td>
{{/c8-3}}
{{#c8-4}}
<td colspan="{{cs8-4}}" rowspan="{{rs8-4}}" class="sheet-spell-{{cc8-4}}">{{c8-4}}</td>
{{/c8-4}}
{{#c8-5}}
<td colspan="{{cs8-5}}" rowspan="{{rs8-5}}" class="sheet-spell-{{cc8-5}}">{{c8-5}}</td>
{{/c8-5}}
</tr>
{{/c8-1}}
{{#c9-1}}
<tr>
<td colspan="{{cs9-1}}" rowspan="{{rs9-1}}" class="sheet-spell-{{cc9-1}}">{{c9-1}}</td>
{{#c9-2}}
<td colspan="{{cs9-2}}" rowspan="{{rs9-2}}" class="sheet-spell-{{cc9-2}}">{{c9-2}}</td>
{{/c9-2}}
{{#c9-3}}
<td colspan="{{cs9-3}}" rowspan="{{rs9-3}}" class="sheet-spell-{{cc9-3}}">{{c9-3}}</td>
{{/c9-3}}
{{#c9-4}}
<td colspan="{{cs9-4}}" rowspan="{{rs9-4}}" class="sheet-spell-{{cc9-4}}">{{c9-4}}</td>
{{/c9-4}}
{{#c9-5}}
<td colspan="{{cs9-5}}" rowspan="{{rs9-5}}" class="sheet-spell-{{cc9-5}}">{{c9-5}}</td>
{{/c9-5}}
</tr>
{{/c9-1}}
{{#c10-1}}
<tr>
<td colspan="{{cs10-1}}" rowspan="{{rs10-1}}" class="sheet-spell-{{cc10-1}}">{{c10-1}}</td>
{{#c10-2}}
<td colspan="{{cs10-2}}" rowspan="{{rs10-2}}" class="sheet-spell-{{cc10-2}}">{{c10-2}}</td>
{{/c10-2}}
{{#c10-3}}
<td colspan="{{cs10-3}}" rowspan="{{rs10-3}}" class="sheet-spell-{{cc10-3}}">{{c10-3}}</td>
{{/c10-3}}
{{#c10-4}}
<td colspan="{{cs10-4}}" rowspan="{{rs10-4}}" class="sheet-spell-{{cc10-4}}">{{c10-4}}</td>
{{/c10-4}}
{{#c10-5}}
<td colspan="{{cs10-5}}" rowspan="{{rs10-5}}" class="sheet-spell-{{cc10-5}}">{{c10-5}}</td>
{{/c10-5}}
</tr>
{{/c10-1}}
{{#c11-1}}
<tr>
<td colspan="{{cs11-1}}" rowspan="{{rs11-1}}" class="sheet-spell-{{cc11-1}}">{{c11-1}}</td>
{{#c11-2}}
<td colspan="{{cs11-2}}" rowspan="{{rs11-2}}" class="sheet-spell-{{cc11-2}}">{{c11-2}}</td>
{{/c11-2}}
{{#c11-3}}
<td colspan="{{cs11-3}}" rowspan="{{rs11-3}}" class="sheet-spell-{{cc11-3}}">{{c11-3}}</td>
{{/c11-3}}
{{#c11-4}}
<td colspan="{{cs11-4}}" rowspan="{{rs11-4}}" class="sheet-spell-{{cc11-4}}">{{c11-4}}</td>
{{/c11-4}}
{{#c11-5}}
<td colspan="{{cs11-5}}" rowspan="{{rs11-5}}" class="sheet-spell-{{cc11-5}}">{{c11-5}}</td>
{{/c11-5}}
</tr>
{{/c11-1}}
{{#c12-1}}
<tr>
<td colspan="{{cs12-1}}" rowspan="{{rs12-1}}" class="sheet-spell-{{cc12-1}}">{{c12-1}}</td>
{{#c12-2}}
<td colspan="{{cs12-2}}" rowspan="{{rs12-2}}" class="sheet-spell-{{cc12-2}}">{{c12-2}}</td>
{{/c12-2}}
{{#c12-3}}
<td colspan="{{cs12-3}}" rowspan="{{rs12-3}}" class="sheet-spell-{{cc12-3}}">{{c12-3}}</td>
{{/c12-3}}
{{#c12-4}}
<td colspan="{{cs12-4}}" rowspan="{{rs12-4}}" class="sheet-spell-{{cc12-4}}">{{c12-4}}</td>
{{/c12-4}}
{{#c12-5}}
<td colspan="{{cs12-5}}" rowspan="{{rs12-5}}" class="sheet-spell-{{cc12-5}}">{{c12-5}}</td>
{{/c12-5}}
</tr>
{{/c12-1}}
{{#c13-1}}
<tr>
<td colspan="{{cs13-1}}" rowspan="{{rs13-1}}" class="sheet-spell-{{cc13-1}}">{{c13-1}}</td>
{{#c13-2}}
<td colspan="{{cs13-2}}" rowspan="{{rs13-2}}" class="sheet-spell-{{cc13-2}}">{{c13-2}}</td>
{{/c13-2}}
{{#c13-3}}
<td colspan="{{cs13-3}}" rowspan="{{rs13-3}}" class="sheet-spell-{{cc13-3}}">{{c13-3}}</td>
{{/c13-3}}
{{#c13-4}}
<td colspan="{{cs13-4}}" rowspan="{{rs13-4}}" class="sheet-spell-{{cc13-4}}">{{c13-4}}</td>
{{/c13-4}}
{{#c13-5}}
<td colspan="{{cs13-5}}" rowspan="{{rs13-5}}" class="sheet-spell-{{cc13-5}}">{{c13-5}}</td>
{{/c13-5}}
</tr>
{{/c13-1}}
{{#c14-1}}
<tr>
<td colspan="{{cs14-1}}" rowspan="{{rs14-1}}" class="sheet-spell-{{cc14-1}}">{{c14-1}}</td>
{{#c14-2}}
<td colspan="{{cs14-2}}" rowspan="{{rs14-2}}" class="sheet-spell-{{cc14-2}}">{{c14-2}}</td>
{{/c14-2}}
{{#c14-3}}
<td colspan="{{cs14-3}}" rowspan="{{rs14-3}}" class="sheet-spell-{{cc14-3}}">{{c14-3}}</td>
{{/c14-3}}
{{#c14-4}}
<td colspan="{{cs14-4}}" rowspan="{{rs14-4}}" class="sheet-spell-{{cc14-4}}">{{c14-4}}</td>
{{/c14-4}}
{{#c14-5}}
<td colspan="{{cs14-5}}" rowspan="{{rs14-5}}" class="sheet-spell-{{cc14-5}}">{{c14-5}}</td>
{{/c14-5}}
</tr>
{{/c14-1}}
{{#c15-1}}
<tr>
<td colspan="{{cs15-1}}" rowspan="{{rs15-1}}" class="sheet-spell-{{cc15-1}}">{{c15-1}}</td>
{{#c15-2}}
<td colspan="{{cs15-2}}" rowspan="{{rs15-2}}" class="sheet-spell-{{cc15-2}}">{{c15-2}}</td>
{{/c15-2}}
{{#c15-3}}
<td colspan="{{cs15-3}}" rowspan="{{rs15-3}}" class="sheet-spell-{{cc15-3}}">{{c15-3}}</td>
{{/c15-3}}
{{#c15-4}}
<td colspan="{{cs15-4}}" rowspan="{{rs15-4}}" class="sheet-spell-{{cc15-4}}">{{c15-4}}</td>
{{/c15-4}}
{{#c15-5}}
<td colspan="{{cs15-5}}" rowspan="{{rs15-5}}" class="sheet-spell-{{cc15-5}}">{{c15-5}}</td>
{{/c15-5}}
</tr>
{{/c15-1}}
{{#c16-1}}
<tr>
<td colspan="{{cs16-1}}" rowspan="{{rs16-1}}" class="sheet-spell-{{cc16-1}}">{{c16-1}}</td>
{{#c16-2}}
<td colspan="{{cs16-2}}" rowspan="{{rs16-2}}" class="sheet-spell-{{cc16-2}}">{{c16-2}}</td>
{{/c16-2}}
{{#c16-3}}
<td colspan="{{cs16-3}}" rowspan="{{rs16-3}}" class="sheet-spell-{{cc16-3}}">{{c16-3}}</td>
{{/c16-3}}
{{#c16-4}}
<td colspan="{{cs16-4}}" rowspan="{{rs16-4}}" class="sheet-spell-{{cc16-4}}">{{c16-4}}</td>
{{/c16-4}}
{{#c16-5}}
<td colspan="{{cs16-5}}" rowspan="{{rs16-5}}" class="sheet-spell-{{cc16-5}}">{{c16-5}}</td>
{{/c16-5}}
</tr>
{{/c16-1}}
{{#c17-1}}
<tr>
<td colspan="{{cs17-1}}" rowspan="{{rs17-1}}" class="sheet-spell-{{cc17-1}}">{{c17-1}}</td>
{{#c17-2}}
<td colspan="{{cs17-2}}" rowspan="{{rs17-2}}" class="sheet-spell-{{cc17-2}}">{{c17-2}}</td>
{{/c17-2}}
{{#c17-3}}
<td colspan="{{cs17-3}}" rowspan="{{rs17-3}}" class="sheet-spell-{{cc17-3}}">{{c17-3}}</td>
{{/c17-3}}
{{#c17-4}}
<td colspan="{{cs17-4}}" rowspan="{{rs17-4}}" class="sheet-spell-{{cc17-4}}">{{c17-4}}</td>
{{/c17-4}}
{{#c17-5}}
<td colspan="{{cs17-5}}" rowspan="{{rs17-5}}" class="sheet-spell-{{cc17-5}}">{{c17-5}}</td>
{{/c17-5}}
</tr>
{{/c17-1}}
{{#c18-1}}
<tr>
<td colspan="{{cs18-1}}" rowspan="{{rs18-1}}" class="sheet-spell-{{cc18-1}}">{{c18-1}}</td>
{{#c18-2}}
<td colspan="{{cs18-2}}" rowspan="{{rs18-2}}" class="sheet-spell-{{cc18-2}}">{{c18-2}}</td>
{{/c18-2}}
{{#c18-3}}
<td colspan="{{cs18-3}}" rowspan="{{rs18-3}}" class="sheet-spell-{{cc18-3}}">{{c18-3}}</td>
{{/c18-3}}
{{#c18-4}}
<td colspan="{{cs18-4}}" rowspan="{{rs18-4}}" class="sheet-spell-{{cc18-4}}">{{c18-4}}</td>
{{/c18-4}}
{{#c18-5}}
<td colspan="{{cs18-5}}" rowspan="{{rs18-5}}" class="sheet-spell-{{cc18-5}}">{{c18-5}}</td>
{{/c18-5}}
</tr>
{{/c18-1}}
{{#c19-1}}
<tr>
<td colspan="{{cs19-1}}" rowspan="{{rs19-1}}" class="sheet-spell-{{cc19-1}}">{{c19-1}}</td>
{{#c19-2}}
<td colspan="{{cs19-2}}" rowspan="{{rs19-2}}" class="sheet-spell-{{cc19-2}}">{{c19-2}}</td>
{{/c19-2}}
{{#c19-3}}
<td colspan="{{cs19-3}}" rowspan="{{rs19-3}}" class="sheet-spell-{{cc19-3}}">{{c19-3}}</td>
{{/c19-3}}
{{#c19-4}}
<td colspan="{{cs19-4}}" rowspan="{{rs19-4}}" class="sheet-spell-{{cc19-4}}">{{c19-4}}</td>
{{/c19-4}}
{{#c19-5}}
<td colspan="{{cs19-5}}" rowspan="{{rs19-5}}" class="sheet-spell-{{cc19-5}}">{{c19-5}}</td>
{{/c19-5}}
</tr>
{{/c19-1}}
{{#c20-1}}
<tr>
<td colspan="{{cs20-1}}" rowspan="{{rs20-1}}" class="sheet-spell-{{cc20-1}}">{{c20-1}}</td>
{{#c20-2}}
<td colspan="{{cs20-2}}" rowspan="{{rs20-2}}" class="sheet-spell-{{cc20-2}}">{{c20-2}}</td>
{{/c20-2}}
{{#c20-3}}
<td colspan="{{cs20-3}}" rowspan="{{rs20-3}}" class="sheet-spell-{{cc20-3}}">{{c20-3}}</td>
{{/c20-3}}
{{#c20-4}}
<td colspan="{{cs20-4}}" rowspan="{{rs20-4}}" class="sheet-spell-{{cc20-4}}">{{c20-4}}</td>
{{/c20-4}}
{{#c20-5}}
<td colspan="{{cs20-5}}" rowspan="{{rs20-5}}" class="sheet-spell-{{cc20-5}}">{{c20-5}}</td>
{{/c20-5}}
</tr>
{{/c20-1}}
</table>
{{/c1-1}}
{{#effects2}}
<br>
{{effects2}}
{{/effects2}}
</td>
</tr>
{{/effects}}
</table>
</div>
</div>
</rolltemplate>
<rolltemplate class="sheet-rolltemplate-2Eprotscroll">
<div class="sheet-template-container">
<div class="sheet-protscroll-head">
<table>
<tr>
<th class="sheet-template-title1">{{title}}</th>
</tr>
</table>
</div>
<div class="sheet-template-body">
<table>
<tr>
<td class="spell-c1"><span class="sheet-spell-prop">Reading Time</span><br/>{{time}}</td>
<td class="spell-c1"><span class="sheet-spell-prop">Duration</span><br/>{{duration}}</td>
</tr>
{{#reference}}
<tr>
<td colspan="2" class="sheet-spell-c1"><span class="sheet-spell-prop">Reference:</span> {{reference}}</td>
</tr>
{{/reference}}
{{#effects}}
<tr>
<td colspan="2" class="sheet-spell-c2"><span class="sheet-spell-prop">Effects:</span> {{effects}}</td>
</tr>
{{/effects}}
</table>
</div>
</div>
</rolltemplate>
<rolltemplate class="sheet-rolltemplate-2Esave">
<div class="sheet-template-container">
<div class="save-head">
<table>
<tr>
<th class="sheet-template-title1">Save vs. {{savevs}}</th>
</tr>
<tr>
<th class="sheet-template-subtitle1">for {{character}}</th>
</tr>
</table>
</div>
<div class="sheet-template-body">
<table>
<tr>
<td class="save-c1">Saving Throw Roll:</td>
<td class="save-c2">{{saveroll}}</td>
</tr>
<tr>
<td class="save-c1">Saving Throw Target:</td>
<td class="save-c2">{{savetarget}}</td>
</tr>
{{#rollTotal() saveroll savetarget}}
<tr>
<td class="save-c3" colspan="2">Success!</td>
</tr>
{{/rollTotal() saveroll savetarget}}
{{#rollGreater() saveroll savetarget}}
<tr>
<td class="save-c3" colspan="2">Success!</td>
</tr>
{{/rollGreater() saveroll savetarget}}
{{#rollLess() saveroll savetarget}}
<tr>
<td class="save-c4" colspan="2">Failed!</td>
</tr>
{{/rollLess() saveroll savetarget}}
</table>
</div>
</div>
</rolltemplate>
<rolltemplate class="sheet-rolltemplate-2Echeck">
<div class="sheet-template-container">
<div class="sheet-check-head">
<table>
<tr>
<th class="sheet-template-title1">Check vs. {{checkvs}}</th>
</tr>
<tr>
<th class="sheet-template-subtitle1">for {{character}}</th>
</tr>
</table>
</div>
<div class="sheet-template-body">
<table>
<tr>
<td class="sheet-check-c1">Check Roll:</td>
<td class="sheet-check-c2">{{checkroll}}</td>
</tr>
<tr>
<td class="sheet-check-c1">Check Target:</td>
<td class="sheet-check-c2">{{checktarget}}</td>
</tr>
{{#rollTotal() checkroll checktarget}}
<tr>
<td class="sheet-check-c3" colspan="2">Success!</td>
</tr>
{{/rollTotal() checkroll checktarget}}
{{#rollLess() checkroll checktarget}}
<tr>
<td class="sheet-check-c3" colspan="2">Success!</td>
</tr>
{{/rollLess() checkroll checktarget}}
{{#rollGreater() checkroll checktarget}}
<tr>
<td class="sheet-check-c4" colspan="2">Failed!</td>
</tr>
{{/rollGreater() checkroll checktarget}}
</table>
</div>
</div>
</rolltemplate>
<rolltemplate class="sheet-rolltemplate-2Einversecheck">
<div class="sheet-template-container">
<div class="sheet-check-head">
<table>
<tr>
<th class="sheet-template-title1">Check vs. {{checkvs}}</th>
</tr>
<tr>
<th class="sheet-template-subtitle1">for {{character}}</th>
</tr>
</table>
</div>
<div class="sheet-template-body">
<table>
<tr>
<td class="sheet-check-c1">Check Roll:</td>
<td class="sheet-check-c2">{{checkroll}}</td>
</tr>
<tr>
<td class="sheet-check-c1">Check Target:</td>
<td class="sheet-check-c2">{{checktarget}}</td>
</tr>
{{#rollTotal() checkroll checktarget}}
<tr>
<td class="sheet-check-c3" colspan="2">Fail!</td>
</tr>
{{/rollTotal() checkroll checktarget}}
{{#rollLess() checkroll checktarget}}
<tr>
<td class="sheet-check-c3" colspan="2">Fail!</td>
</tr>
{{/rollLess() checkroll checktarget}}
{{#rollGreater() checkroll checktarget}}
<tr>
<td class="sheet-check-c4" colspan="2">Success!</td>
</tr>
{{/rollGreater() checkroll checktarget}}
</table>
</div>
</div>
</rolltemplate>
<rolltemplate class="sheet-rolltemplate-2Egrenademiss">
<div class="sheet-template-container">
<div class="sheet-grenade-head">
<table>
<tr>
<th class="sheet-template-title1">Grenadelike miss for {{name}}</th>
</tr>
<tr>
<th>
{{#rollTotal() direction 1}}
<img src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/ADnD 2E Revised/img/rolltemplate/scatter-diagram-1.png" style="width: 100%;" alt="scatter diagram"/>
{{/rollTotal() direction 1}}
{{#rollTotal() direction 2}}
<img src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/ADnD 2E Revised/img/rolltemplate/scatter-diagram-2.png" style="width: 100%;" alt="scatter diagram"/>
{{/rollTotal() direction 2}}
{{#rollTotal() direction 3}}
<img src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/ADnD 2E Revised/img/rolltemplate/scatter-diagram-3.png" style="width: 100%;" alt="scatter diagram"/>
{{/rollTotal() direction 3}}
{{#rollTotal() direction 4}}
<img src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/ADnD 2E Revised/img/rolltemplate/scatter-diagram-4.png" style="width: 100%;" alt="scatter diagram"/>
{{/rollTotal() direction 4}}
{{#rollTotal() direction 5}}
<img src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/ADnD 2E Revised/img/rolltemplate/scatter-diagram-5.png" style="width: 100%;" alt="scatter diagram"/>
{{/rollTotal() direction 5}}
{{#rollTotal() direction 6}}
<img src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/ADnD 2E Revised/img/rolltemplate/scatter-diagram-6.png" style="width: 100%;" alt="scatter diagram"/>
{{/rollTotal() direction 6}}
{{#rollTotal() direction 7}}
<img src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/ADnD 2E Revised/img/rolltemplate/scatter-diagram-7.png" style="width: 100%;" alt="scatter diagram"/>
{{/rollTotal() direction 7}}
{{#rollTotal() direction 8}}
<img src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/ADnD 2E Revised/img/rolltemplate/scatter-diagram-8.png" style="width: 100%;" alt="scatter diagram"/>
{{/rollTotal() direction 8}}
{{#rollTotal() direction 9}}
<img src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/ADnD 2E Revised/img/rolltemplate/scatter-diagram-9.png" style="width: 100%;" alt="scatter diagram"/>
{{/rollTotal() direction 9}}
{{#rollTotal() direction 10}}
<img src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/ADnD 2E Revised/img/rolltemplate/scatter-diagram-10.png" style="width: 100%;" alt="scatter diagram"/>
{{/rollTotal() direction 10}}
{{#^rollBetween() direction 1 10}}
<img src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/ADnD 2E Revised/img/rolltemplate/scatter-diagram.png" style="width: 100%;" alt="scatter diagram"/>
{{/^rollBetween() direction 1 10}}
</th>
</tr>
</table>
</div>
<div class="sheet-template-body">
<table>
<tr>
<td class="sheet-grenade-c1">Direction:</td>
<td class="sheet-grenade-c2">{{direction}}</td>
</tr>
<tr>
<td class="sheet-grenade-c1">Distance ({{distancename}}):</td>
<td class="sheet-grenade-c2">{{distance}} feet</td>
</tr>
<tr>
<td class="sheet-grenade-c1 sheet-ignore-inlineroll">Direct hit:<br>({{aoe}} feet diameter)</td>
{{#^rollBetween() computed::hit 0 0}}
<td class="sheet-grenade-c3 sheet-ignore-inlineroll">Hit!<br><span class="sheet-hit-text">{{hitdmg}}</span></td>
{{/^rollBetween() computed::hit 0 0}}
{{#rollBetween() computed::hit 0 0}}
<td class="sheet-grenade-c4 sheet-ignore-inlineroll">Miss!<br><span class="sheet-miss-text">{{hitdmg}}</span></td>
{{/rollBetween() computed::hit 0 0}}
</tr>
<tr>
<td class="sheet-grenade-c1 sheet-ignore-inlineroll">Splash hit:<br>({{aoesplash}} feet diameter)</td>
<!-- Direct hit is true -->
{{#^rollBetween() computed::hit 0 0}}
<td class="sheet-grenade-c5 sheet-ignore-inlineroll sheet-hit-text">Info<br><span class="sheet-miss-text">{{splashdmg}}</span></td>
{{/^rollBetween() computed::hit 0 0}}
<!-- Direct hit is false -->
{{#rollBetween() computed::hit 0 0}}
{{#^rollBetween() computed::splash 0 0}}
<td class="sheet-grenade-c3 sheet-ignore-inlineroll">Hit!<br><span class="sheet-hit-text">{{splashdmg}}</span></td>
{{/^rollBetween() computed::splash 0 0}}
{{#rollBetween() computed::splash 0 0}}
<td class="sheet-grenade-c4 sheet-ignore-inlineroll">Miss!<br><span class="sheet-miss-text">{{splashdmg}}</span></td>
{{/rollBetween() computed::splash 0 0}}
{{/rollBetween() computed::hit 0 0}}
</tr>
</table>
</div>
</div>
</rolltemplate>
+34
View File
@@ -0,0 +1,34 @@
<div class="sheet-col">
<fieldset name="repeating_spells#REPLACE0#" class="repeating_spells#REPLACE0#">
<table class="sheet-table-center">
<tr>
<td colspan="4"><input type="text" name="attr_spellname#REPLACE0#" title="@{repeating_spells#REPLACE0#_$X_spellname#REPLACE0#}" class="sheet-spell" placeholder="Spell name"></td>
</tr>
<tr>
<td><label>Cast Today: </label></td>
<td><input type="number" name="attr_cast-value#REPLACE0#" title="@{repeating_spells#REPLACE0#_$X_cast-value#REPLACE0#}" value="0" class="sheet-short"></td>
<td class="sheet-centering-padding-2"><label>/</label></td>
<td><input type="number" name="attr_cast-max#REPLACE0#" title="@{repeating_spells#REPLACE0#_$X_cast-max#REPLACE0#}" value="0" class="sheet-short"></td>
</tr>
<tr>
<td><label>SP / #REPLACE1# Used: </label></td>
<td><input type="number" name="attr_spell-points#REPLACE3##REPLACE0#" title="@{repeating_spells#REPLACE0#_$X_spell-points#REPLACE3##REPLACE0#}" class="sheet-short" value="0"></td>
<td class="sheet-centering-padding-2"><label>/</label></td>
<td><input type="number" name="attr_#REPLACE2##REPLACE0#" title="@{repeating_spells#REPLACE0#_$X_#REPLACE2##REPLACE0#}" class="sheet-short" value="0"></td>
</tr>
<tr>
<td><label>Casting Time: </label></td>
<td><input type="text" name="attr_casttime#REPLACE0#" title="@{repeating_spells#REPLACE0#_$X_casttime#REPLACE0#}" class="sheet-short"></td>
<td></td>
<td><button type="roll" style="margin: 0;" name="roll_initspell#REPLACE0#" title="%{repeating_spells#REPLACE0#_$X_initspell#REPLACE0#}" value="/gmroll [[{([[1d10]]+@{casttime#REPLACE0#}), 1}kh1]] [Initiative (@{spellname#REPLACE0#})]&{tracker}">Initiative</button></td>
</tr>
<tr>
<td colspan="4"><textarea name="attr_cast-macro#REPLACE0#" title="@{repeating_spells#REPLACE0#_$X_cast-macro#REPLACE0#}" class="sheet-input-like" placeholder="Insert Spell effects."></textarea></td>
</tr>
<tr>
<td colspan="4"><button type="roll" name="roll_spellcast#REPLACE0#" title="%{repeating_spells#REPLACE0#_$X_spellcast#REPLACE0#}" value="@{cast-macro#REPLACE0#}">Roll Spell Effects</button></td>
</tr>
</table>
<hr>
</fieldset>
</div>
File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 6.9 KiB

After

Width:  |  Height:  |  Size: 6.9 KiB

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 256 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 254 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 254 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 254 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 255 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 255 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 255 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 255 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 254 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 254 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 256 KiB

Before

Width:  |  Height:  |  Size: 180 KiB

After

Width:  |  Height:  |  Size: 180 KiB

@@ -1,118 +1,118 @@
/* ---- Attributes tables start ---- */
const strengthTable = {};
strengthTable['strengthhit'] = ['Error','-5','-3','-3','-2','-2','-1','-1','0','0','0','0','0','0','0','0','0','+1','+1','+3','+3','+4','+4','+5','+6','+7'];
strengthTable['strengthhit']['18[01-50]'] = '+1';
strengthTable['strengthhit']['18[51-75]'] = '+2';
strengthTable['strengthhit']['18[76-90]'] = '+2';
strengthTable['strengthhit']['18[91-99]'] = '+2';
strengthTable['strengthhit']['18[00]'] = '+3';
strengthTable['strengthdmg'] = ['Error','-4','-2','-1','-1','-1','0','0','0','0','0','0','0','0','0','0','+1','+1','+2','+7','+8','+9','+10','+11','+12','+14'];
strengthTable['strengthdmg']['18[01-50]'] = '+3';
strengthTable['strengthdmg']['18[51-75]'] = '+3';
strengthTable['strengthdmg']['18[76-90]'] = '+4';
strengthTable['strengthdmg']['18[91-99]'] = '+5';
strengthTable['strengthdmg']['18[00]'] = '+6';
strengthTable['carryweight'] = ['Error','1','1','5','10','10','20','20','35','35','40','40','45','45','55','55','70','85','110','485','535','635','785','935','1235','1535'];
strengthTable['carryweight']['18[01-50]'] = '135';
strengthTable['carryweight']['18[51-75]'] = '160';
strengthTable['carryweight']['18[76-90]'] = '185';
strengthTable['carryweight']['18[91-99]'] = '235';
strengthTable['carryweight']['18[00]'] = '335';
strengthTable['maxpress'] = ['Error','3','5','10','25','25','55','55','90','90','115','115','140','140','170','170','195','220','255','640','700','810','970','1130','1440','1750'];
strengthTable['maxpress']['18[01-50]'] = '280';
strengthTable['maxpress']['18[51-75]'] = '305';
strengthTable['maxpress']['18[76-90]'] = '330';
strengthTable['maxpress']['18[91-99]'] = '380';
strengthTable['maxpress']['18[00]'] = '480';
strengthTable['opendoor'] = ['Error','1','1','2','3','3','4','4','5','5','6','6','7','7','8','8','9','10','11','16(8)','17(10)','17(12)','18(14)','18(16)','19(17)','19(18)'];
strengthTable['opendoor']['18[01-50]'] = '12';
strengthTable['opendoor']['18[51-75]'] = '13';
strengthTable['opendoor']['18[76-90]'] = '14';
strengthTable['opendoor']['18[91-99]'] = '15(3)';
strengthTable['opendoor']['18[00]'] = '16(6)';
strengthTable['bendbar'] = ['Error','0','0','0','0','0','0','0','1','1','2','2','4','4','7','7','10','13','16','50','60','70','80','90','95','99'];
strengthTable['bendbar']['18[01-50]'] = '20';
strengthTable['bendbar']['18[51-75]'] = '25';
strengthTable['bendbar']['18[76-90]'] = '30';
strengthTable['bendbar']['18[91-99]'] = '35';
strengthTable['bendbar']['18[00]'] = '40';
strengthTable['strnotes'] = ['INVALID STRENGTH','','','','','','','','','','','','','','','','','','','Hill Giant','Stone Giant','Frost Giant','Fire Giant','Cloud Giant','Storm Giant','Titan Giant'];
strengthTable['strnotes']['18[01-50]'] = '';
strengthTable['strnotes']['18[51-75]'] = '';
strengthTable['strnotes']['18[76-90]'] = '';
strengthTable['strnotes']['18[91-99]'] = '';
strengthTable['strnotes']['18[00]'] = '';
strengthTable['str2notes'] = ['INVALID STRENGTH','','','','','','','','','','','','','','','','','','','(8) Locked, barred, or magical door. Only one attempt','(10) Locked, barred, or magical door. Only one attempt','(12) Locked, barred, or magical door. Only one attempt','(14) Locked, barred, or magical door. Only one attempt','(16) Locked, barred, or magical door. Only one attempt','(17) Locked, barred, or magical door. Only one attempt','(18) Locked, barred, or magical door. Only one attempt'];
strengthTable['str2notes']['18[01-50]'] = '';
strengthTable['str2notes']['18[51-75]'] = '';
strengthTable['str2notes']['18[76-90]'] = '';
strengthTable['str2notes']['18[91-99]'] = '(3) Locked, barred, or magical door. Only one attempt';
strengthTable['str2notes']['18[00]'] = '(6) Locked, barred, or magical door. Only one attempt';
const dexterityTable = {};
dexterityTable['dexreact'] = ['Error','-6','-4','-3','-2','-1','0','0','0','0','0','0','0','0','0','0','+1','+2','+2','+3','+3','+4','+4','+4','+5','+5'];
dexterityTable['dexmissile'] = ['Error','-6','-4','-3','-2','-1','0','0','0','0','0','0','0','0','0','0','+1','+2','+2','+3','+3','+4','+4','+4','+5','+5'];
dexterityTable['dexdefense'] = ['Error','+5','+5','+4','+3','+2','+1','0','0','0','0','0','0','0','0','-1','-2','-3','-4','-4','-4','-5','-5','-5','-6','-6'];
dexterityTable['dex-pickpocket'] = ['0','0','0','0','0','0','0','0','0','-15','-10','-5','0','0','0','0','0','+5','+10','+15','+20','+25','+30','+30','+30','+30'];
dexterityTable['dex-openlocks'] = ['0','0','0','0','0','0','0','0','0','-10','-5','0','0','0','0','0','+5','+10','+15','+20','+25','+30','+35','+35','+35','+35'];
dexterityTable['dex-findtraps'] = ['0','0','0','0','0','0','0','0','0','-10','-10','-5','0','0','0','0','0','0','+5','+10','+15','+20','+25','+25','+25','+25'];
dexterityTable['dex-movesilently'] = ['0','0','0','0','0','0','0','0','0','-20','-15','-10','-5','0','0','0','0','+5','+10','+15','+20','+25','+30','+30','+30','+30'];
dexterityTable['dex-hideinshadows'] = ['0','0','0','0','0','0','0','0','0','-10','-5','0','0','0','0','0','0','+5','+10','+15','+20','+25','+30','+30','+30','+30'];
dexterityTable['dex-climbwalls'] = ['0','0','0','0','0','0','0','0','0','-10','-10','-5','0','0','0','0','0','0','+5','+10','+15','+20','+25','+25','+25','+25'];
dexterityTable['dex-tunneling'] = ['0','0','0','0','0','0','0','0','0','-10','-5','-0','0','0','0','0','0','0','+5','+10','+15','+20','+30','+30','+30','+30'];
dexterityTable['dex-escapebonds'] = ['0','0','0','0','0','0','0','0','0','-15','-10','-5','0','0','0','0','0','+5','+10','+15','+20','+25','+30','+30','+30','+30'];
dexterityTable['aim-pickpocket'] = ['0','0','0','-30','-25','-25','-20','-20','-15','-15','-10','-5','0','0','0','0','0','+5','+10','+15','+20','+20','+25','+25','+30','+30'];
dexterityTable['aim-openlocks'] = ['0','0','0','-30','-25','-20','-20','-15','-15','-10','-5','0','0','0','0','0','+5','+10','+15','+20','+20','+25','+25','+30','+30','+35'];
dexterityTable['balance-movesilently'] = ['0','0','0','-30','-30','-30','-25','-25','-20','-20','-15','-10','-5','0','0','0','0','+5','+10','+15','+15','+20','+20','+25','+25','+30'];
dexterityTable['balance-climbwalls'] = ['0','0','0','-30','-25','-20','-20','-15','-15','-10','-5','0','0','0','0','0','0','+5','+10','+15','+20','+20','+25','+25','+30','+30'];
dexterityTable['dexnotes'] = ['INVALID DEXTERITY','','','','','','','','','','','','','','','','','','','','','','','','','',''];
const constitutionTable = {};
constitutionTable['conadj'] = ['Error','-3','-2','-2','-1','-1','-1','0','0','0','0','0','0','0','0','+1','+2','+2(+3)','+2(+4)','+2(+5)','+2(+5)','+2(+6)','+2(+6)','+2(+6)','+2(+7)','+2(+7)'];
constitutionTable['conshock'] = ['Error','25','30','35','40','45','50','55','60','65','70','75','80','85','88','90','95','97','99','99','99','99','99','99','99','100'];
constitutionTable['conres'] = ['Error','30','35','40','45','50','55','60','65','70','75','80','85','90','92','94','96','98','100','100','100','100','100','100','100','100'];
constitutionTable['conpoisonsave'] = ['Error','-2','-1','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','+1','+1','+2','+2','+3','+3','+4'];
constitutionTable['conregen'] = ['Error','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','1/6','1/5','1/4','1/3','1/2','1/1'];
constitutionTable['connotes'] = ['INVALID CONSTITUTION','','','','','','','','','','','','','','','','','','','','1 hp/6 turns - not acid/fire','1 hp/5 turns - not acid/fire','1 hp/4 turns - not acid/fire','1 hp/3 turns - not acid/fire','1 hp/2 turns - not acid/fire','1 hp/turn - not acid/fire'];
constitutionTable['con2notes'] = ['INVALID CONSTITUTION','','','','','','','','','','','','','','','','','(+3) Warriors only','(+4) Warriors only','(+5) Warriors only','(+5) Warriors only','(+6) Warriors only','(+6) Warriors only','(+6) Warriors only','(+7) Warriors only','(+7) Warriors only'];
const intelligenceTable = {};
intelligenceTable['intlang'] = ['Error','0','1','1','1','1','1','1','1','2','2','2','3','3','4','4','5','6','7','8','9','10','11','12','15','20'];
intelligenceTable['intlvl'] = ['Error','—','—','—','—','—','—','—','—','4th','5th','5th','6th','6th','7th','7th','8th','8th','9th','9th','9th','9th','9th','9th','9th','9th'];
intelligenceTable['intchance'] = ['Error','0','0','0','0','0','0','0','0','35','40','45','50','55','60','65','70','75','85','95','96','97','98','99','100','100'];
intelligenceTable['intmax'] = ['Error','—','—','—','—','—','—','—','—','6','7','7','7','9','9','11','11','14','18','All','All','All','All','All','All','All'];
intelligenceTable['intimm1st'] = ['Error','','','','','','','','','','','','','','','','','','','1st-level','1st-level','1st-level','1st-level','1st-level','1st-level','1st-level'];
intelligenceTable['intimm2nd'] = ['Error','','','','','','','','','','','','','','','','','','','','2nd-level','2nd-level','2nd-level','2nd-level','2nd-level','2nd-level'];
intelligenceTable['intimm3rd'] = ['Error','','','','','','','','','','','','','','','','','','','','','3rd-level','3rd-level','3rd-level','3rd-level','3rd-level'];
intelligenceTable['intimm4th'] = ['Error','','','','','','','','','','','','','','','','','','','','','','4th-level','4th-level','4th-level','4th-level'];
intelligenceTable['intimm5th'] = ['Error','','','','','','','','','','','','','','','','','','','','','','','5th-level','5th-level','5th-level'];
intelligenceTable['intimm6th'] = ['Error','','','','','','','','','','','','','','','','','','','','','','','','6th-level','6th-level'];
intelligenceTable['intimm7th'] = ['Error','','','','','','','','','','','','','','','','','','','','','','','','','7th-level'];
intelligenceTable['intnotes'] = ['INVALID INTELLIGENCE','Communicate by Grunts & Gestures','','','','','','','','','','','','','','','','','','','','','','','','',''];
const wisdomTable = {};
wisdomTable['wisdef'] = ['Error','-6','-4','-3','-2','-1','-1','-1','0','0','0','0','0','0','0','+1','+2','+3','+4','+4','+4','+4','+4','+4','+4','+4'];
wisdomTable['wisbonus'] = ['Error','—','—','—','—','—','—','—','—','0','0','0','0','1st','1st','2nd','2nd','3rd','4th','1st,3rd','2nd,4th','3rd,5th','4th,5th','1st,6th','5th,6th','6th,7th'];
wisdomTable['wisbonus-prime'] = ['Error','','','','','','','','','','','','','1st','2x1st','2x1st, 2nd','2x1st, 2x2nd','2x1st, 2x2nd, 3rd','2x1st, 2x2nd, 3rd, 4th','3x1st, 2x2nd, 2x3rd, 4th','3x1st, 3x2nd, 2x3rd, 2x4th','3x1st, 3x2nd, 3x3rd, 2x4th','3x1st, 3x2nd, 3x3rd, 3x4th','4x1st, 3x2nd, 3x3rd, 3x4th','4x1st, 3x2nd, 3x3rd, 3x4th','4x1st, 3x2nd, 3x3rd, 3x4th'];
wisdomTable['wisbonus-extra'] = ['Error','','','','','','','','','','','','','','','','','','','','','5th','2x5th','2x5th, 6th','3x5th, 2x6th','3x5th, 3x6th, 7th'];
wisdomTable['wisfail'] = ['Error','80','60','50','45','40','35','30','25','20','15','10','5','0','0','0','0','0','0','0','0','0','0','0','0','0'];
wisdomTable['wisimmune'] = ['Error','','','','','','','','','','','','','','','','','','','cause fear, charm person, command, friends, hypnotism','forget, hold person, ray of enfeeblement, scare','fear','charm monster, confusion, emotion, fumble, suggestion','chaos, feeblemind, hold monster, magic jar, quest','geas, mass suggestion, rod of rulership','antipathy/sympathy, death spell, mass charm'];
wisdomTable['wisnotes'] = ['INVALID WISDOM','','','','','','','','','','','','','','','','','','','','','','','','','',''];
const charismaTable = {};
charismaTable['chamax'] = ['Error','0','1','1','1','2','2','3','3','4','4','4','5','5','6','7','8','10','15','20','25','30','35','40','45','50'];
charismaTable['chaloy'] = ['Error','-8','-7','-6','-5','-4','-3','-2','-1','0','0','0','0','0','+1','+3','+4','+6','+8','+10','+12','+14','+16','+18','+20','+20'];
charismaTable['chareact'] = ['Error','-7','-6','-5','-4','-3','-2','-1','0','0','0','0','0','+1','+2','+3','+5','+6','+7','+8','+9','+10','+11','+12','+13','+14'];
charismaTable['chanotes'] = ['INVALID CHARISMA','','','','','','','','','','','','','','','','','','','','','','','','','',''];
/* ---- Attributes tables start ---- */
const strengthTable = {};
strengthTable['strengthhit'] = ['Error','-5','-3','-3','-2','-2','-1','-1','0','0','0','0','0','0','0','0','0','+1','+1','+3','+3','+4','+4','+5','+6','+7'];
strengthTable['strengthhit']['18[01-50]'] = '+1';
strengthTable['strengthhit']['18[51-75]'] = '+2';
strengthTable['strengthhit']['18[76-90]'] = '+2';
strengthTable['strengthhit']['18[91-99]'] = '+2';
strengthTable['strengthhit']['18[00]'] = '+3';
strengthTable['strengthdmg'] = ['Error','-4','-2','-1','-1','-1','0','0','0','0','0','0','0','0','0','0','+1','+1','+2','+7','+8','+9','+10','+11','+12','+14'];
strengthTable['strengthdmg']['18[01-50]'] = '+3';
strengthTable['strengthdmg']['18[51-75]'] = '+3';
strengthTable['strengthdmg']['18[76-90]'] = '+4';
strengthTable['strengthdmg']['18[91-99]'] = '+5';
strengthTable['strengthdmg']['18[00]'] = '+6';
strengthTable['carryweight'] = ['Error','1','1','5','10','10','20','20','35','35','40','40','45','45','55','55','70','85','110','485','535','635','785','935','1235','1535'];
strengthTable['carryweight']['18[01-50]'] = '135';
strengthTable['carryweight']['18[51-75]'] = '160';
strengthTable['carryweight']['18[76-90]'] = '185';
strengthTable['carryweight']['18[91-99]'] = '235';
strengthTable['carryweight']['18[00]'] = '335';
strengthTable['maxpress'] = ['Error','3','5','10','25','25','55','55','90','90','115','115','140','140','170','170','195','220','255','640','700','810','970','1130','1440','1750'];
strengthTable['maxpress']['18[01-50]'] = '280';
strengthTable['maxpress']['18[51-75]'] = '305';
strengthTable['maxpress']['18[76-90]'] = '330';
strengthTable['maxpress']['18[91-99]'] = '380';
strengthTable['maxpress']['18[00]'] = '480';
strengthTable['opendoor'] = ['Error','1','1','2','3','3','4','4','5','5','6','6','7','7','8','8','9','10','11','16(8)','17(10)','17(12)','18(14)','18(16)','19(17)','19(18)'];
strengthTable['opendoor']['18[01-50]'] = '12';
strengthTable['opendoor']['18[51-75]'] = '13';
strengthTable['opendoor']['18[76-90]'] = '14';
strengthTable['opendoor']['18[91-99]'] = '15(3)';
strengthTable['opendoor']['18[00]'] = '16(6)';
strengthTable['bendbar'] = ['Error','0','0','0','0','0','0','0','1','1','2','2','4','4','7','7','10','13','16','50','60','70','80','90','95','99'];
strengthTable['bendbar']['18[01-50]'] = '20';
strengthTable['bendbar']['18[51-75]'] = '25';
strengthTable['bendbar']['18[76-90]'] = '30';
strengthTable['bendbar']['18[91-99]'] = '35';
strengthTable['bendbar']['18[00]'] = '40';
strengthTable['strnotes'] = ['INVALID STRENGTH','','','','','','','','','','','','','','','','','','','Hill Giant','Stone Giant','Frost Giant','Fire Giant','Cloud Giant','Storm Giant','Titan Giant'];
strengthTable['strnotes']['18[01-50]'] = '';
strengthTable['strnotes']['18[51-75]'] = '';
strengthTable['strnotes']['18[76-90]'] = '';
strengthTable['strnotes']['18[91-99]'] = '';
strengthTable['strnotes']['18[00]'] = '';
strengthTable['str2notes'] = ['INVALID STRENGTH','','','','','','','','','','','','','','','','','','','(8) Locked, barred, or magical door. Only one attempt','(10) Locked, barred, or magical door. Only one attempt','(12) Locked, barred, or magical door. Only one attempt','(14) Locked, barred, or magical door. Only one attempt','(16) Locked, barred, or magical door. Only one attempt','(17) Locked, barred, or magical door. Only one attempt','(18) Locked, barred, or magical door. Only one attempt'];
strengthTable['str2notes']['18[01-50]'] = '';
strengthTable['str2notes']['18[51-75]'] = '';
strengthTable['str2notes']['18[76-90]'] = '';
strengthTable['str2notes']['18[91-99]'] = '(3) Locked, barred, or magical door. Only one attempt';
strengthTable['str2notes']['18[00]'] = '(6) Locked, barred, or magical door. Only one attempt';
const dexterityTable = {};
dexterityTable['dexreact'] = ['Error','-6','-4','-3','-2','-1','0','0','0','0','0','0','0','0','0','0','+1','+2','+2','+3','+3','+4','+4','+4','+5','+5'];
dexterityTable['dexmissile'] = ['Error','-6','-4','-3','-2','-1','0','0','0','0','0','0','0','0','0','0','+1','+2','+2','+3','+3','+4','+4','+4','+5','+5'];
dexterityTable['dexdefense'] = ['Error','+5','+5','+4','+3','+2','+1','0','0','0','0','0','0','0','0','-1','-2','-3','-4','-4','-4','-5','-5','-5','-6','-6'];
dexterityTable['dex-pickpocket'] = ['0','0','0','0','0','0','0','0','0','-15','-10','-5','0','0','0','0','0','+5','+10','+15','+20','+25','+30','+30','+30','+30'];
dexterityTable['dex-openlocks'] = ['0','0','0','0','0','0','0','0','0','-10','-5','0','0','0','0','0','+5','+10','+15','+20','+25','+30','+35','+35','+35','+35'];
dexterityTable['dex-findtraps'] = ['0','0','0','0','0','0','0','0','0','-10','-10','-5','0','0','0','0','0','0','+5','+10','+15','+20','+25','+25','+25','+25'];
dexterityTable['dex-movesilently'] = ['0','0','0','0','0','0','0','0','0','-20','-15','-10','-5','0','0','0','0','+5','+10','+15','+20','+25','+30','+30','+30','+30'];
dexterityTable['dex-hideinshadows'] = ['0','0','0','0','0','0','0','0','0','-10','-5','0','0','0','0','0','0','+5','+10','+15','+20','+25','+30','+30','+30','+30'];
dexterityTable['dex-climbwalls'] = ['0','0','0','0','0','0','0','0','0','-10','-10','-5','0','0','0','0','0','0','+5','+10','+15','+20','+25','+25','+25','+25'];
dexterityTable['dex-tunneling'] = ['0','0','0','0','0','0','0','0','0','-10','-5','-0','0','0','0','0','0','0','+5','+10','+15','+20','+30','+30','+30','+30'];
dexterityTable['dex-escapebonds'] = ['0','0','0','0','0','0','0','0','0','-15','-10','-5','0','0','0','0','0','+5','+10','+15','+20','+25','+30','+30','+30','+30'];
dexterityTable['aim-pickpocket'] = ['0','0','0','-30','-25','-25','-20','-20','-15','-15','-10','-5','0','0','0','0','0','+5','+10','+15','+20','+20','+25','+25','+30','+30'];
dexterityTable['aim-openlocks'] = ['0','0','0','-30','-25','-20','-20','-15','-15','-10','-5','0','0','0','0','0','+5','+10','+15','+20','+20','+25','+25','+30','+30','+35'];
dexterityTable['balance-movesilently'] = ['0','0','0','-30','-30','-30','-25','-25','-20','-20','-15','-10','-5','0','0','0','0','+5','+10','+15','+15','+20','+20','+25','+25','+30'];
dexterityTable['balance-climbwalls'] = ['0','0','0','-30','-25','-20','-20','-15','-15','-10','-5','0','0','0','0','0','0','+5','+10','+15','+20','+20','+25','+25','+30','+30'];
dexterityTable['dexnotes'] = ['INVALID DEXTERITY','','','','','','','','','','','','','','','','','','','','','','','','','',''];
const constitutionTable = {};
constitutionTable['conadj'] = ['Error','-3','-2','-2','-1','-1','-1','0','0','0','0','0','0','0','0','+1','+2','+2(+3)','+2(+4)','+2(+5)','+2(+5)','+2(+6)','+2(+6)','+2(+6)','+2(+7)','+2(+7)'];
constitutionTable['conshock'] = ['Error','25','30','35','40','45','50','55','60','65','70','75','80','85','88','90','95','97','99','99','99','99','99','99','99','100'];
constitutionTable['conres'] = ['Error','30','35','40','45','50','55','60','65','70','75','80','85','90','92','94','96','98','100','100','100','100','100','100','100','100'];
constitutionTable['conpoisonsave'] = ['Error','-2','-1','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','+1','+1','+2','+2','+3','+3','+4'];
constitutionTable['conregen'] = ['Error','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','1/6','1/5','1/4','1/3','1/2','1/1'];
constitutionTable['connotes'] = ['INVALID CONSTITUTION','','','','','','','','','','','','','','','','','','','','1 hp/6 turns - not acid/fire','1 hp/5 turns - not acid/fire','1 hp/4 turns - not acid/fire','1 hp/3 turns - not acid/fire','1 hp/2 turns - not acid/fire','1 hp/turn - not acid/fire'];
constitutionTable['con2notes'] = ['INVALID CONSTITUTION','','','','','','','','','','','','','','','','','(+3) Warriors only','(+4) Warriors only','(+5) Warriors only','(+5) Warriors only','(+6) Warriors only','(+6) Warriors only','(+6) Warriors only','(+7) Warriors only','(+7) Warriors only'];
const intelligenceTable = {};
intelligenceTable['intlang'] = ['Error','0','1','1','1','1','1','1','1','2','2','2','3','3','4','4','5','6','7','8','9','10','11','12','15','20'];
intelligenceTable['intlvl'] = ['Error','—','—','—','—','—','—','—','—','4th','5th','5th','6th','6th','7th','7th','8th','8th','9th','9th','9th','9th','9th','9th','9th','9th'];
intelligenceTable['intchance'] = ['Error','0','0','0','0','0','0','0','0','35','40','45','50','55','60','65','70','75','85','95','96','97','98','99','100','100'];
intelligenceTable['intmax'] = ['Error','—','—','—','—','—','—','—','—','6','7','7','7','9','9','11','11','14','18','All','All','All','All','All','All','All'];
intelligenceTable['intimm1st'] = ['Error','','','','','','','','','','','','','','','','','','','1st-level','1st-level','1st-level','1st-level','1st-level','1st-level','1st-level'];
intelligenceTable['intimm2nd'] = ['Error','','','','','','','','','','','','','','','','','','','','2nd-level','2nd-level','2nd-level','2nd-level','2nd-level','2nd-level'];
intelligenceTable['intimm3rd'] = ['Error','','','','','','','','','','','','','','','','','','','','','3rd-level','3rd-level','3rd-level','3rd-level','3rd-level'];
intelligenceTable['intimm4th'] = ['Error','','','','','','','','','','','','','','','','','','','','','','4th-level','4th-level','4th-level','4th-level'];
intelligenceTable['intimm5th'] = ['Error','','','','','','','','','','','','','','','','','','','','','','','5th-level','5th-level','5th-level'];
intelligenceTable['intimm6th'] = ['Error','','','','','','','','','','','','','','','','','','','','','','','','6th-level','6th-level'];
intelligenceTable['intimm7th'] = ['Error','','','','','','','','','','','','','','','','','','','','','','','','','7th-level'];
intelligenceTable['intnotes'] = ['INVALID INTELLIGENCE','Communicate by Grunts & Gestures','','','','','','','','','','','','','','','','','','','','','','','','',''];
const wisdomTable = {};
wisdomTable['wisdef'] = ['Error','-6','-4','-3','-2','-1','-1','-1','0','0','0','0','0','0','0','+1','+2','+3','+4','+4','+4','+4','+4','+4','+4','+4'];
wisdomTable['wisbonus'] = ['Error','—','—','—','—','—','—','—','—','0','0','0','0','1st','1st','2nd','2nd','3rd','4th','1st,3rd','2nd,4th','3rd,5th','4th,5th','1st,6th','5th,6th','6th,7th'];
wisdomTable['wisbonus-prime'] = ['Error','','','','','','','','','','','','','1st','2x1st','2x1st, 2nd','2x1st, 2x2nd','2x1st, 2x2nd, 3rd','2x1st, 2x2nd, 3rd, 4th','3x1st, 2x2nd, 2x3rd, 4th','3x1st, 3x2nd, 2x3rd, 2x4th','3x1st, 3x2nd, 3x3rd, 2x4th','3x1st, 3x2nd, 3x3rd, 3x4th','4x1st, 3x2nd, 3x3rd, 3x4th','4x1st, 3x2nd, 3x3rd, 3x4th','4x1st, 3x2nd, 3x3rd, 3x4th'];
wisdomTable['wisbonus-extra'] = ['Error','','','','','','','','','','','','','','','','','','','','','5th','2x5th','2x5th, 6th','3x5th, 2x6th','3x5th, 3x6th, 7th'];
wisdomTable['wisfail'] = ['Error','80','60','50','45','40','35','30','25','20','15','10','5','0','0','0','0','0','0','0','0','0','0','0','0','0'];
wisdomTable['wisimmune'] = ['Error','','','','','','','','','','','','','','','','','','','cause fear, charm person, command, friends, hypnotism','forget, hold person, ray of enfeeblement, scare','fear','charm monster, confusion, emotion, fumble, suggestion','chaos, feeblemind, hold monster, magic jar, quest','geas, mass suggestion, rod of rulership','antipathy/sympathy, death spell, mass charm'];
wisdomTable['wisnotes'] = ['INVALID WISDOM','','','','','','','','','','','','','','','','','','','','','','','','','',''];
const charismaTable = {};
charismaTable['chamax'] = ['Error','0','1','1','1','2','2','3','3','4','4','4','5','5','6','7','8','10','15','20','25','30','35','40','45','50'];
charismaTable['chaloy'] = ['Error','-8','-7','-6','-5','-4','-3','-2','-1','0','0','0','0','0','+1','+3','+4','+6','+8','+10','+12','+14','+16','+18','+20','+20'];
charismaTable['chareact'] = ['Error','-7','-6','-5','-4','-3','-2','-1','0','0','0','0','0','+1','+2','+3','+5','+6','+7','+8','+9','+10','+11','+12','+13','+14'];
charismaTable['chanotes'] = ['INVALID CHARISMA','','','','','','','','','','','','','','','','','','','','','','','','','',''];
/* ---- Attributes tables end ---- */
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -1,152 +1,257 @@
// --- Version change start --- //
const sheetName = 'AD&D 2E Revised';
const sheetVersion = '4.2.0';
on('sheet:opened', function(){
getAttrs(['character_sheet'],function(attrs){
let cs=(attrs.character_sheet||'').match(/(.*)\s+v(.*)/) || [];
let sheet_name=cs[1] || '';
let sheet_version=cs[2] || '0.0.0';
// do something with sheet_name and sheet_version, if you might be converting
if(sheet_name !== sheetName || sheet_version !== sheetVersion) {
console.log(`Updating character sheet from ${sheet_version} to ${sheetVersion}`);
setAttrs({
character_sheet: `${sheetName} v${sheetVersion}`,
version: `v${sheetVersion}`,
announcement: 1
},{silent:true});
//#region Migrations
let oldSheetVersion = new SheetVersion(sheet_version);
// Starting with the oldest version, just in case some field has been moved from A -> B, B -> C
if (oldSheetVersion.isBelowMigrate(3, 3, 0))
migrate3_3_0();
if (oldSheetVersion.isBelowMigrate(3, 3, 2))
migrate3_3_2();
if (oldSheetVersion.isBelowMigrate(3, 4, 0))
migrate3_4_0();
//#endregion
}
});
});
// --- Version change end --- //
//#region Helpers
function SheetVersion(sheetVersionString) {
let splitVersions = sheetVersionString.match(/(\d+)\.(\d+)\.(\d+)/) || [];
this.major = parseInt(splitVersions[1]) || 0;
this.minor = parseInt(splitVersions[2]) || 0;
this.bug = parseInt(splitVersions[3]) || 0;
this.isBelowMigrate = function (migrateMajor, migrateMinor, migrateBug) {
if (this.major < migrateMajor)
return true;
if (this.major > migrateMajor)
return false;
if (this.minor < migrateMinor)
return true;
if (this.minor > migrateMinor)
return false;
return this.bug < migrateBug;
}
}
function moveStaticToRepeating(section, fieldsToMove) {
getAttrs(fieldsToMove, function (values) {
if (values[fieldsToMove[0]]) {
console.log(`${fieldsToMove[0]} has a value. Moving static to repeating`);
let newrowid = generateRowID();
let newValue = {};
for (const [field, value] of Object.entries(values)) {
newValue[`repeating_${section}_${newrowid}_${field}`] = value;
newValue[field] = '';
}
setAttrs(newValue);
}
});
}
//#endregion
//#region version 3.4.0
function migrate3_4_0() {
console.log('Migrating to v3.4.0');
getAttrs(['nonprof-penalty'], function(values) {
let nonprof = Math.abs(parseInt(values['nonprof-penalty']) || 0) * -1;
let famil = Math.floor(nonprof / 2)
setAttrs({
['nonprof-penalty']: nonprof,
['famil-penalty']: famil
});
});
}
//#endregion
//#region version 3.3.2
function migrate3_3_2() {
console.log('Migrating to v3.3.2');
moveStaticToRepeating('weaponprofs', ['weapprofname', 'weapprofnum', 'expert', 'specialist', 'mastery', 'high-mastery', 'grand-mastery', 'chosen-weapon']);
moveStaticToRepeating('profs', ['profname', 'profslots', 'profstatnum', 'profmod']);
moveStaticToRepeating('langs', ['langname', 'lang-rw']);
moveStaticToRepeating('gear', ['geardesc', 'gearweight', 'gearqty', 'gearloc']);
moveStaticToRepeating('gear-stored', ['gear-stored-desc', 'gear-stored-weight', 'gear-stored-qty', 'gear-stored-loc', 'on-mount']);
moveStaticToRepeating('magicres', ['magresname', 'magrestar', 'magresmod', 'magresnotes']);
//ranged weapons
moveStaticToRepeating('weapons2', ['weaponname2', 'strbonus2', 'dexbonus2', 'prof-level2', 'range-mod-attack', 'attacknum2', 'attackadj2', 'ThAC02', 'crit-thresh2', 'range2', 'size2', 'weaptype-slash2', 'weaptype-pierce2', 'weaptype-blunt2', 'weapspeed2']);
moveStaticToRepeating('ammo', ['ammoname', 'strbonus3', 'dexbonus3', 'specialist-damage2', 'mastery-damage2', 'damadj2', 'damsm2', 'daml2', 'knockdown2', 'ammoremain']);
//melee damage weapons
moveStaticToRepeating('weapons', ['weaponname', 'strbonus', 'dexbonus', 'prof-level', 'attacknum', 'attackadj', 'ThAC0', 'crit-thresh', 'range', 'size', 'weaptype-slash', 'weaptype-pierce', 'weaptype-blunt', 'weapspeed']);
moveStaticToRepeating('weapons-damage', ['weaponname1', 'strbonus1', 'dexbonus1', 'specialist-damage', 'mastery-damage', 'damadj', 'damsm', 'daml', 'knockdown1']);
}
//#endregion
//#region version 3.3.0
function migrate3_3_0() {
console.log('Migrating to v3.3.0');
getAttrs(['spell-points', 'spell-points-priest'], function(values) {
let sp = parseInt(values['spell-points']) || 0;
let psp = parseInt(values['spell-points-priest']) || 0;
let newValue = {};
if (sp > 0) {
console.log(`Old spell points: ${sp}`);
newValue['spell-points-lvl'] = sp;
newValue['spell-points'] = '';
}
if (psp > 0) {
console.log(`Old spell points priest: ${psp}`);
newValue['spell-points-priest-lvl'] = psp;
newValue['spell-points-priest'] = '';
}
setAttrs(newValue);
});
TAS.repeating('spells')
.fields('spell-points', 'spell-points1', 'arc', 'arc1')
.each(function (r) {
console.log('Updating repeating spells-points and arc');
r['spell-points'] = (r.I['spell-points1']);
r['spell-points1'] = '';
r['arc'] = (r.I['arc1']);
r['arc1'] = '';
})
.execute();
}
// --- Version change start --- //
const sheetName = 'AD&D 2E Revised';
const sheetVersion = '4.4.0';
on('sheet:opened', function(){
getAttrs(['character_sheet'],function(attrs){
let cs=(attrs.character_sheet||'').match(/(.*)\s+v(.*)/) || [];
let sheet_name=cs[1] || '';
let sheet_version=cs[2] || '0.0.0';
// do something with sheet_name and sheet_version, if you might be converting
if(sheet_name !== sheetName || sheet_version !== sheetVersion) {
console.log(`Updating character sheet from ${sheet_version} to ${sheetVersion}`);
setAttrs({
character_sheet: `${sheetName} v${sheetVersion}`,
version: `v${sheetVersion}`,
announcement: 1
},{silent:true});
//#region Migrations
let oldSheetVersion = new SheetVersion(sheet_version);
// Starting with the oldest version, just in case some field has been moved from A -> B, B -> C
if (oldSheetVersion.isBelowMigrate(3, 3, 0))
migrate3_3_0();
if (oldSheetVersion.isBelowMigrate(3, 3, 2))
migrate3_3_2();
if (oldSheetVersion.isBelowMigrate(3, 4, 0))
migrate3_4_0();
if (oldSheetVersion.isBelowMigrate(4, 3, 0))
migrate4_3_0();
//#endregion
}
});
});
// --- Version change end --- //
//#region Helpers
function SheetVersion(sheetVersionString) {
let splitVersions = sheetVersionString.match(/(\d+)\.(\d+)\.(\d+)/) || [];
this.major = parseInt(splitVersions[1]) || 0;
this.minor = parseInt(splitVersions[2]) || 0;
this.bug = parseInt(splitVersions[3]) || 0;
this.isBelowMigrate = function (migrateMajor, migrateMinor, migrateBug) {
if (this.major < migrateMajor)
return true;
if (this.major > migrateMajor)
return false;
if (this.minor < migrateMinor)
return true;
if (this.minor > migrateMinor)
return false;
return this.bug < migrateBug;
}
}
function moveStaticToRepeating(section, fieldsToMove) {
getAttrs(fieldsToMove, function (values) {
if (values[fieldsToMove[0]]) {
console.log(`${fieldsToMove[0]} has a value. Moving static to repeating`);
let newrowid = generateRowID();
let newValue = {};
for (const [field, value] of Object.entries(values)) {
newValue[`repeating_${section}_${newrowid}_${field}`] = value;
newValue[field] = '';
}
setAttrs(newValue);
}
});
}
//#endregion
//#region version 4.3.0
let oldCurrencySections = [['2', 'Dragonlance'], ['3', 'Dark Sun'], ['4', 'Ravenloft'], ['5', 'Maztica'], ['6', 'BirthRight']];
let fieldArray = ['gemdesc', 'gemvalue', 'gemqty', 'gemsizecut'];
function migrate4_3_0() {
console.log('Migrating to v4.3.0');
migrateGems();
migrateOtherValuables();
}
function migrateGems() {
moveStaticToRepeating('gem', fieldArray) // Move Standard static gem
oldCurrencySections.forEach(section => {
let index = section[0];
let name = section[1];
let oldGemFields = fieldArray.map(s => `${s}${index}`);
let sectionName = `gem${index}`;
let gemdesc = `gemdesc${index}`;
let gemsizecut = `gemsizecut${index}`;
let gemvalue = `gemvalue${index}`;
let gemqty = `gemqty${index}`;
TAS.repeating(sectionName)
.attrs(oldGemFields)
.fields(oldGemFields)
.reduce(function (memo, row) {
if ((row.hasOwnProperty(gemdesc) && row.S[gemdesc]) ||
(row.hasOwnProperty(gemsizecut) && row.S[gemsizecut]) ||
(row.hasOwnProperty(gemvalue) && row.F[gemvalue]) ||
(row.hasOwnProperty(gemqty) && row.F[gemqty])) {
console.log(`Moving repeating gem: '${row[gemdesc]}'`)
memo.push(oldGemFields.map(field => row[field] || ''));
removeRepeatingRow(`repeating_${sectionName}_${row.id}`);
}
return memo;
}, [], function (memo, rowSet, attrSet) {
let newValue = {};
if ((attrSet.hasOwnProperty(gemdesc) && attrSet.S[gemdesc]) ||
(attrSet.hasOwnProperty(gemsizecut) && attrSet.S[gemsizecut]) ||
(attrSet.hasOwnProperty(gemvalue) && attrSet.F[gemvalue]) ||
(attrSet.hasOwnProperty(gemqty) && attrSet.F[gemqty])) {
console.log(`Moving static gem: '${attrSet[gemdesc]}'`)
memo.splice(0, 0, oldGemFields.map(field => attrSet[field]));
newValue[gemdesc] = '';
newValue[gemvalue] = '';
newValue[gemqty] = '';
newValue[gemsizecut] = '';
}
if (memo.length > 0) {
memo.splice(0, 0, [`--${name}--`, '', '', '---------']);
}
memo.forEach(gem => {
let newrowid = generateRowID();
newValue[`repeating_gem_${newrowid}_gemdesc`] = gem[0];
newValue[`repeating_gem_${newrowid}_gemvalue`] = gem[1];
newValue[`repeating_gem_${newrowid}_gemqty`] = gem[2];
newValue[`repeating_gem_${newrowid}_gemsizecut`] = gem[3];
})
setAttrs(newValue);
})
.execute();
})
}
function migrateOtherValuables() {
let newValue = {};
let allCurrencySections = [['']].concat(oldCurrencySections);
let valuablesFields = allCurrencySections.map(s => `otherval${s[0]}`);
let gpFields = allCurrencySections.map(s => `othervalue${s[0]}`);
getAttrs(gpFields.concat(valuablesFields), function(values) {
let total = 0;
let valuablesString = '';
gpFields.forEach(field => {
total += parseInt(values[field]) || 0;
newValue[field] = '';
});
newValue['othervalue'] = total;
valuablesFields.forEach(field => {
let oldValue = values[field] || '';
if (oldValue) {
if (valuablesString) {
valuablesString += '\n\n';
}
if (field === 'otherval') { // Standard case, no name needed
valuablesString += oldValue;
} else {
let index = field.slice(-1);
let array = oldCurrencySections.find(arr => arr[0] === index);
valuablesString += `--- ${array[1]} ---\n${oldValue}`;
newValue[field] = '';
}
}
});
newValue['otherval'] = valuablesString;
setAttrs(newValue);
});
}
//#endregion
//#region version 3.4.0
function migrate3_4_0() {
console.log('Migrating to v3.4.0');
getAttrs(['nonprof-penalty'], function(values) {
let nonprof = Math.abs(parseInt(values['nonprof-penalty']) || 0) * -1;
let famil = Math.floor(nonprof / 2)
setAttrs({
['nonprof-penalty']: nonprof,
['famil-penalty']: famil
});
});
}
//#endregion
//#region version 3.3.2
function migrate3_3_2() {
console.log('Migrating to v3.3.2');
moveStaticToRepeating('weaponprofs', ['weapprofname', 'weapprofnum', 'expert', 'specialist', 'mastery', 'high-mastery', 'grand-mastery', 'chosen-weapon']);
moveStaticToRepeating('profs', ['profname', 'profslots', 'profstatnum', 'profmod']);
moveStaticToRepeating('langs', ['langname', 'lang-rw']);
moveStaticToRepeating('gear', ['geardesc', 'gearweight', 'gearqty', 'gearloc']);
moveStaticToRepeating('gear-stored', ['gear-stored-desc', 'gear-stored-weight', 'gear-stored-qty', 'gear-stored-loc', 'on-mount']);
moveStaticToRepeating('magicres', ['magresname', 'magrestar', 'magresmod', 'magresnotes']);
//ranged weapons
moveStaticToRepeating('weapons2', ['weaponname2', 'strbonus2', 'dexbonus2', 'prof-level2', 'range-mod-attack', 'attacknum2', 'attackadj2', 'ThAC02', 'crit-thresh2', 'range2', 'size2', 'weaptype-slash2', 'weaptype-pierce2', 'weaptype-blunt2', 'weapspeed2']);
moveStaticToRepeating('ammo', ['ammoname', 'strbonus3', 'dexbonus3', 'specialist-damage2', 'mastery-damage2', 'damadj2', 'damsm2', 'daml2', 'knockdown2', 'ammoremain']);
//melee damage weapons
moveStaticToRepeating('weapons', ['weaponname', 'strbonus', 'dexbonus', 'prof-level', 'attacknum', 'attackadj', 'ThAC0', 'crit-thresh', 'range', 'size', 'weaptype-slash', 'weaptype-pierce', 'weaptype-blunt', 'weapspeed']);
moveStaticToRepeating('weapons-damage', ['weaponname1', 'strbonus1', 'dexbonus1', 'specialist-damage', 'mastery-damage', 'damadj', 'damsm', 'daml', 'knockdown1']);
}
//#endregion
//#region version 3.3.0
function migrate3_3_0() {
console.log('Migrating to v3.3.0');
getAttrs(['spell-points', 'spell-points-priest'], function(values) {
let sp = parseInt(values['spell-points']) || 0;
let psp = parseInt(values['spell-points-priest']) || 0;
let newValue = {};
if (sp > 0) {
console.log(`Old spell points: ${sp}`);
newValue['spell-points-lvl'] = sp;
newValue['spell-points'] = '';
}
if (psp > 0) {
console.log(`Old spell points priest: ${psp}`);
newValue['spell-points-priest-lvl'] = psp;
newValue['spell-points-priest'] = '';
}
setAttrs(newValue);
});
TAS.repeating('spells')
.fields('spell-points', 'spell-points1', 'arc', 'arc1')
.each(function (r) {
console.log('Updating repeating spells-points and arc');
r['spell-points'] = (r.I['spell-points1']);
r['spell-points1'] = '';
r['arc'] = (r.I['arc1']);
r['arc1'] = '';
})
.execute();
}
//#endregion
@@ -114,7 +114,7 @@ weapons['club'] = {
'size': 'M',
'type': 'B',
'speed': 4,
'small-medium': ' 1d6',
'small-medium': '1d6',
'large': '1d3',
'knockdown': 'd8'
};
File diff suppressed because it is too large Load Diff
+325
View File
@@ -0,0 +1,325 @@
{
"requires": true,
"lockfileVersion": 1,
"dependencies": {
"@babel/helper-validator-identifier": {
"version": "7.15.7",
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz",
"integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w=="
},
"@babel/parser": {
"version": "7.16.4",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.4.tgz",
"integrity": "sha512-6V0qdPUaiVHH3RtZeLIsc+6pDhbYzHR8ogA8w+f+Wc77DuXto19g2QUwveINoS34Uw+W8/hQDGJCx+i4n7xcng=="
},
"@babel/types": {
"version": "7.16.0",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.0.tgz",
"integrity": "sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg==",
"requires": {
"@babel/helper-validator-identifier": "^7.15.7",
"to-fast-properties": "^2.0.0"
}
},
"acorn": {
"version": "7.4.1",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
"integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A=="
},
"asap": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
"integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY="
},
"assert-never": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/assert-never/-/assert-never-1.2.1.tgz",
"integrity": "sha512-TaTivMB6pYI1kXwrFlEhLeGfOqoDNdTxjCdwRfFFkEA30Eu+k48W34nlok2EYWJfFFzqaEmichdNM7th6M5HNw=="
},
"babel-walk": {
"version": "3.0.0-canary-5",
"resolved": "https://registry.npmjs.org/babel-walk/-/babel-walk-3.0.0-canary-5.tgz",
"integrity": "sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==",
"requires": {
"@babel/types": "^7.9.6"
}
},
"call-bind": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
"integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
"requires": {
"function-bind": "^1.1.1",
"get-intrinsic": "^1.0.2"
}
},
"character-parser": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz",
"integrity": "sha1-x84o821LzZdE5f/CxfzeHHMmH8A=",
"requires": {
"is-regex": "^1.0.3"
}
},
"constantinople": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/constantinople/-/constantinople-4.0.1.tgz",
"integrity": "sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==",
"requires": {
"@babel/parser": "^7.6.0",
"@babel/types": "^7.6.1"
}
},
"doctypes": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz",
"integrity": "sha1-6oCxBqh1OHdOijpKWv4pPeSJ4Kk="
},
"function-bind": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
},
"get-intrinsic": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz",
"integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==",
"requires": {
"function-bind": "^1.1.1",
"has": "^1.0.3",
"has-symbols": "^1.0.1"
}
},
"has": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
"integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
"requires": {
"function-bind": "^1.1.1"
}
},
"has-symbols": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz",
"integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw=="
},
"has-tostringtag": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz",
"integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==",
"requires": {
"has-symbols": "^1.0.2"
}
},
"is-core-module": {
"version": "2.8.0",
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz",
"integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==",
"requires": {
"has": "^1.0.3"
}
},
"is-expression": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/is-expression/-/is-expression-4.0.0.tgz",
"integrity": "sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==",
"requires": {
"acorn": "^7.1.1",
"object-assign": "^4.1.1"
}
},
"is-promise": {
"version": "2.2.2",
"resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz",
"integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ=="
},
"is-regex": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
"integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
"requires": {
"call-bind": "^1.0.2",
"has-tostringtag": "^1.0.0"
}
},
"js-stringify": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz",
"integrity": "sha1-Fzb939lyTyijaCrcYjCufk6Weds="
},
"jstransformer": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz",
"integrity": "sha1-7Yvwkh4vPx7U1cGkT2hwntJHIsM=",
"requires": {
"is-promise": "^2.0.0",
"promise": "^7.0.1"
}
},
"object-assign": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
"integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
},
"path-parse": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
"integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
},
"promise": {
"version": "7.3.1",
"resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz",
"integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==",
"requires": {
"asap": "~2.0.3"
}
},
"pug": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/pug/-/pug-3.0.2.tgz",
"integrity": "sha512-bp0I/hiK1D1vChHh6EfDxtndHji55XP/ZJKwsRqrz6lRia6ZC2OZbdAymlxdVFwd1L70ebrVJw4/eZ79skrIaw==",
"requires": {
"pug-code-gen": "^3.0.2",
"pug-filters": "^4.0.0",
"pug-lexer": "^5.0.1",
"pug-linker": "^4.0.0",
"pug-load": "^3.0.0",
"pug-parser": "^6.0.0",
"pug-runtime": "^3.0.1",
"pug-strip-comments": "^2.0.0"
}
},
"pug-attrs": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-3.0.0.tgz",
"integrity": "sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==",
"requires": {
"constantinople": "^4.0.1",
"js-stringify": "^1.0.2",
"pug-runtime": "^3.0.0"
}
},
"pug-code-gen": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-3.0.2.tgz",
"integrity": "sha512-nJMhW16MbiGRiyR4miDTQMRWDgKplnHyeLvioEJYbk1RsPI3FuA3saEP8uwnTb2nTJEKBU90NFVWJBk4OU5qyg==",
"requires": {
"constantinople": "^4.0.1",
"doctypes": "^1.1.0",
"js-stringify": "^1.0.2",
"pug-attrs": "^3.0.0",
"pug-error": "^2.0.0",
"pug-runtime": "^3.0.0",
"void-elements": "^3.1.0",
"with": "^7.0.0"
}
},
"pug-error": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.0.0.tgz",
"integrity": "sha512-sjiUsi9M4RAGHktC1drQfCr5C5eriu24Lfbt4s+7SykztEOwVZtbFk1RRq0tzLxcMxMYTBR+zMQaG07J/btayQ=="
},
"pug-filters": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-4.0.0.tgz",
"integrity": "sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==",
"requires": {
"constantinople": "^4.0.1",
"jstransformer": "1.0.0",
"pug-error": "^2.0.0",
"pug-walk": "^2.0.0",
"resolve": "^1.15.1"
}
},
"pug-lexer": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-5.0.1.tgz",
"integrity": "sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==",
"requires": {
"character-parser": "^2.2.0",
"is-expression": "^4.0.0",
"pug-error": "^2.0.0"
}
},
"pug-linker": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-4.0.0.tgz",
"integrity": "sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==",
"requires": {
"pug-error": "^2.0.0",
"pug-walk": "^2.0.0"
}
},
"pug-load": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/pug-load/-/pug-load-3.0.0.tgz",
"integrity": "sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==",
"requires": {
"object-assign": "^4.1.1",
"pug-walk": "^2.0.0"
}
},
"pug-parser": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-6.0.0.tgz",
"integrity": "sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==",
"requires": {
"pug-error": "^2.0.0",
"token-stream": "1.0.0"
}
},
"pug-runtime": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-3.0.1.tgz",
"integrity": "sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg=="
},
"pug-strip-comments": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-2.0.0.tgz",
"integrity": "sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==",
"requires": {
"pug-error": "^2.0.0"
}
},
"pug-walk": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-2.0.0.tgz",
"integrity": "sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ=="
},
"resolve": {
"version": "1.20.0",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz",
"integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==",
"requires": {
"is-core-module": "^2.2.0",
"path-parse": "^1.0.6"
}
},
"to-fast-properties": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
"integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4="
},
"token-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz",
"integrity": "sha1-zCAOqyYT9BZtJ/+a/HylbUnfbrQ="
},
"void-elements": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz",
"integrity": "sha1-YU9/v42AHwu18GYfWy9XhXUOTwk="
},
"with": {
"version": "7.0.2",
"resolved": "https://registry.npmjs.org/with/-/with-7.0.2.tgz",
"integrity": "sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==",
"requires": {
"@babel/parser": "^7.9.6",
"@babel/types": "^7.9.6",
"assert-never": "^1.2.1",
"babel-walk": "3.0.0-canary-5"
}
}
}
}
+19
View File
@@ -0,0 +1,19 @@
each levelObject, level in data
datalist(id=`${level}-spells`)
each spell, spellName in levelObject
- let book = ''
- let displayLevel = ''
if (spell.book !== 'PHB')
- book = spell.book
if level.endsWith('monster')
case spell.level
when '1': - displayLevel = `${spell.level}st level`
when '2': - displayLevel = `${spell.level}nd level`
when '3': - displayLevel = `${spell.level}rd level`
default: - displayLevel = `${spell.level}th level`
if (book)
- displayLevel += `, ${book}`
option(value!=spellName)= displayLevel
else
option(value!=spellName)= book
@@ -7,6 +7,26 @@
"instructions": "#Message from current Author Peter B.(2020)\rThe sheet has been updated with more options for players to choose between rule sets such as the standard rule set from the Player's Handbook and the additional material from the Player's Option.\rTo follow current development or for any future development request please write a post on https://app.roll20.net/forum/post/9311682/official-ad-and-d-2e-revised-update-thread.\rThe full change log is always available at https://wiki.roll20.net/ADnD_2nd_Edition_Character_sheet#Changelog\r\r#Message from Original Author Seth (2017)\rThis sheet supports Advanced Dungeons and Dragons 2nd Edition Revised for both Player Characters and Monsters. This sheet has full integration for macro support within many fields of the sheet. Many fields are now auto-calculating fields. Please update these trackers by changing a quantity value and then changing it back.",
"legacy": false,
"useroptions": [
{
"displayname": "*** General settings ***"
},
{
"displayname": "In addition to the Player's Handbook, the following books can be added for more spells, weapons, and equipment"
},
{
"attribute": "book-tcwhb",
"displayname": "The Complete Wizard's Handbook",
"type": "checkbox",
"value": "The Complete Wizard's Handbook",
"checked": false,
"description": "Allows spells from The Complete Wizard's Handbook to autofill"
},
{
"displayname": " "
},
{
"displayname": "*** Monster Sheet ***"
},
{
"attribute": "wtype",
"displayname": "Should Monster attacks be public to players or private (Only send to the GM)?",
@@ -15,8 +35,8 @@
"Public|@{character_name}",
"To GM|/w gm @{character_name}"
],
"default": "",
"description": "By default all monster attacks are public. These attacks include the static buttons ThAC0, Attack 1-3, Special attack. It also include the repeating buttons Hit, Damage, Special damage, and Spell. To GM rolls will send the mentioned buttons only to yourself and the GM. Thus is a GM clicks the button, only the GM can see it."
"default": "@{character_name}",
"description": "By default all monster attacks are public. These attacks include the static buttons ThAC0, Attack 1-3, Special attack. It also include the repeating buttons Hit, Dam S/M, Dam L, Special damage, and Spell. To GM rolls will send the mentioned buttons only to yourself and the GM. Thus is a GM clicks the button, only the GM can see it."
}
]
}
+2 -2
View File
@@ -243,8 +243,8 @@
"lower-class": "Basse classe",
"middle-class": "Classe moyenne",
"upper-class": "Classe favorisée",
"main-roll-button-title": "This is the roll-builder. You can click it, answer four questions, and then it will roll the dice for you.",
"damage": "Damage",
"main-roll-button-title": "C'est le constructeur de jets. Vous pouvez cliquer dessus, répondre à quatre questions, puis il lancera les dés pour vous.",
"damage": "Dégâts",
"total": "Total",
"target_number": "Target Number",
"stunt_points": "Stunt Points",
+29
View File
@@ -0,0 +1,29 @@
# ARC: Doom Tabletop RPG Roll20 Character Sheet
- [ARC](https://arc-rpg.com) by momatoes
## Prerequisites
- [Nodejs](https://nodejs.org/en/) installed
- [git](https://git-scm.com/) installed
## References
- [gulp](https://gulpjs.com/)
- [pugjs](https://pugjs.org/api/getting-started.html)
- [sass](https://sass-lang.com/)
- [Building Character Sheets](https://wiki.roll20.net/Building_Character_Sheets)
## Setup
- clone this repository
- clone roll20-character-sheets
- copy all files into the roll20-character-sheets directory (aside from the `.git/` files), under a folder of the sheet name
- Run the following commands from either the terminal or command line:
```bash
# Go to the source for your sheet
$ cd /<path_to>/roll20-character-sheets/ARC/source
# Install all of the npm packages
$ npm install
# Run the build process
$ npm run gulp:watch
```
This will create 2 files ARC.html and ARC.css. The watch command allows for any saved changes to automatically build the html and css from the pug and stylus files.
+2268
View File
File diff suppressed because it is too large Load Diff
+2707
View File
File diff suppressed because it is too large Load Diff
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 292 KiB

+1
View File
@@ -0,0 +1 @@
<svg height="512pt" viewBox="0 0 512 512" width="512pt" xmlns="http://www.w3.org/2000/svg"><path d="m453.332031 0h-394.664062c-32.363281 0-58.667969 26.304688-58.667969 58.667969v394.664062c0 32.363281 26.304688 58.667969 58.667969 58.667969h394.664062c32.363281 0 58.667969-26.304688 58.667969-58.667969v-394.664062c0-32.363281-26.304688-58.667969-58.667969-58.667969zm-85.332031 277.332031h-90.667969v90.667969c0 11.777344-9.535156 21.332031-21.332031 21.332031s-21.332031-9.554687-21.332031-21.332031v-90.667969h-90.667969c-11.796875 0-21.332031-9.554687-21.332031-21.332031s9.535156-21.332031 21.332031-21.332031h90.667969v-90.667969c0-11.777344 9.535156-21.332031 21.332031-21.332031s21.332031 9.554687 21.332031 21.332031v90.667969h90.667969c11.796875 0 21.332031 9.554687 21.332031 21.332031s-9.535156 21.332031-21.332031 21.332031zm0 0"/></svg>

After

Width:  |  Height:  |  Size: 852 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 126 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 148 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 147 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 345 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

+1
View File
@@ -0,0 +1 @@
<svg id="bold" enable-background="new 0 0 24 24" height="512" viewBox="0 0 24 24" width="512" xmlns="http://www.w3.org/2000/svg"><path d="m23.525 5.054c-.705-.778-1.724-1.243-2.525-1.516v-1.538c0-.552-.448-1-1-1h-4c-1.634 0-3.087.788-4 2.003-.913-1.215-2.366-2.003-4-2.003h-4c-.552 0-1 .448-1 1v1.538c-.801.273-1.82.738-2.526 1.517-.306.338-.474.797-.474 1.291l.002 10.471c.001 5.737.001 5.737.477 6.03.359.221.815.195 1.146-.065 3.021-2.385 6.144-2.367 9.827.053.165.11.357.165.548.165s.383-.055.549-.165c3.683-2.42 6.805-2.437 9.827-.053.331.262.787.287 1.146.065.475-.293.475-.293.477-6.03l.001-10.471c0-.494-.168-.953-.475-1.292zm-7.525-2.054h3v12.89c-2.374-.1-4.333.811-6 2.769v-12.659c0-1.654 1.346-3 3-3zm-11 0h3c1.654 0 3 1.346 3 3v12.659c-1.584-1.859-3.429-2.777-5.641-2.777-.119 0-.238.002-.359.008zm-2.997 17.135c-.001-2.931-.002-8.628-.003-11.821l-.043-1.917c.228-.252.598-.493 1.043-.704v11.307c0 .294.129.573.354.763.225.189.522.273.811.223 1.503-.251 3.189-.188 4.874 1.487-2.462-.761-4.816-.551-7.036.662zm19.997-11.821c0 3.193-.001 8.89-.002 11.821-2.22-1.213-4.574-1.421-7.035-.661 1.686-1.675 3.372-1.738 4.874-1.487.288.049.586-.034.811-.223.223-.191.352-.47.352-.764v-11.309c.441.207.8.436 1 .655z"/></svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

+1
View File
@@ -0,0 +1 @@
<svg height="365.696pt" viewBox="0 0 365.696 365.696" width="365.696pt" xmlns="http://www.w3.org/2000/svg"><path d="m243.1875 182.859375 113.132812-113.132813c12.5-12.5 12.5-32.765624 0-45.246093l-15.082031-15.082031c-12.503906-12.503907-32.769531-12.503907-45.25 0l-113.128906 113.128906-113.132813-113.152344c-12.5-12.5-32.765624-12.5-45.246093 0l-15.105469 15.082031c-12.5 12.503907-12.5 32.769531 0 45.25l113.152344 113.152344-113.128906 113.128906c-12.503907 12.503907-12.503907 32.769531 0 45.25l15.082031 15.082031c12.5 12.5 32.765625 12.5 45.246093 0l113.132813-113.132812 113.128906 113.132812c12.503907 12.5 32.769531 12.5 45.25 0l15.082031-15.082031c12.5-12.503906 12.5-32.769531 0-45.25zm0 0"/></svg>

After

Width:  |  Height:  |  Size: 712 B

+1
View File
@@ -0,0 +1 @@
<svg enable-background="new 0 0 24 24" height="512" viewBox="0 0 24 24" width="512" xmlns="http://www.w3.org/2000/svg"><path d="m21.25 4h-12.88c-.761 0-1.494.319-2.012.876l-6.157 6.613c-.269.288-.269.734 0 1.022l6.157 6.612c.518.558 1.251.877 2.012.877h12.88c1.517 0 2.75-1.233 2.75-2.75v-10.5c0-1.517-1.233-2.75-2.75-2.75zm-1.768 10.819c.376.405.353 1.038-.052 1.414-.192.179-.437.267-.681.267-.269 0-.536-.107-.732-.319l-2.517-2.712-2.518 2.711c-.196.212-.464.319-.732.319-.244 0-.488-.088-.681-.267-.404-.376-.428-1.009-.052-1.414l2.619-2.818-2.618-2.819c-.376-.405-.353-1.038.052-1.414.403-.376 1.038-.354 1.413.052l2.518 2.711 2.518-2.711c.374-.406 1.009-.428 1.413-.052s.428 1.009.052 1.414l-2.62 2.819z"/></svg>

After

Width:  |  Height:  |  Size: 718 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

+1
View File
@@ -0,0 +1 @@
<svg id="bold" enable-background="new 0 0 24 24" height="512" viewBox="0 0 24 24" width="512" xmlns="http://www.w3.org/2000/svg"><path d="m12 16c-.205 0-.401-.084-.542-.232l-5.25-5.5c-.455-.476-.117-1.268.542-1.268h2.75v-5.75c0-.689.561-1.25 1.25-1.25h2.5c.689 0 1.25.561 1.25 1.25v5.75h2.75c.659 0 .997.792.542 1.268l-5.25 5.5c-.141.148-.337.232-.542.232z"/><path d="m22.25 22h-20.5c-.965 0-1.75-.785-1.75-1.75v-.5c0-.965.785-1.75 1.75-1.75h20.5c.965 0 1.75.785 1.75 1.75v.5c0 .965-.785 1.75-1.75 1.75z"/></svg>

After

Width:  |  Height:  |  Size: 512 B

+1
View File
@@ -0,0 +1 @@
<svg height="512pt" viewBox="0 0 512 512" width="512pt" xmlns="http://www.w3.org/2000/svg"><path d="m304 0h-266.667969c-20.585937 0-37.332031 16.746094-37.332031 37.332031v53.335938c0 20.585937 16.746094 37.332031 37.332031 37.332031h266.667969c20.585938 0 37.332031-16.746094 37.332031-37.332031v-53.335938c0-20.585937-16.746093-37.332031-37.332031-37.332031zm0 0"/><path d="m304 192h-266.667969c-20.585937 0-37.332031 16.746094-37.332031 37.332031v53.335938c0 20.585937 16.746094 37.332031 37.332031 37.332031h266.667969c20.585938 0 37.332031-16.746094 37.332031-37.332031v-53.335938c0-20.585937-16.746093-37.332031-37.332031-37.332031zm0 0"/><path d="m304 384h-266.667969c-20.585937 0-37.332031 16.746094-37.332031 37.332031v53.335938c0 20.585937 16.746094 37.332031 37.332031 37.332031h266.667969c20.585938 0 37.332031-16.746094 37.332031-37.332031v-53.335938c0-20.585937-16.746093-37.332031-37.332031-37.332031zm0 0"/><path d="m506.902344 244.265625-74.667969-69.332031c-3.027344-2.796875-6.933594-4.265625-10.902344-4.265625-2.175781 0-4.328125.445312-6.398437 1.320312-5.824219 2.5625-9.601563 8.320313-9.601563 14.679688v138.664062c0 6.359375 3.777344 12.117188 9.601563 14.679688 5.824218 2.515625 12.628906 1.386719 17.300781-2.945313l74.667969-69.332031c3.242187-3.03125 5.097656-7.277344 5.097656-11.734375s-1.855469-8.683594-5.097656-11.734375zm0 0"/></svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

+1
View File
@@ -0,0 +1 @@
<svg id="bold" enable-background="new 0 0 24 24" height="512" viewBox="0 0 24 24" width="512" xmlns="http://www.w3.org/2000/svg"><g><path d="m23 22h-13c-.552 0-1-.448-1-1s.448-1 1-1h13c.552 0 1 .448 1 1s-.448 1-1 1z"/></g><g><path d="m20.268 4.146-1.414-1.414c-.756-.756-2.073-.755-2.828 0l-2.068 2.068 4.242 4.242 2.068-2.068c.378-.377.586-.879.586-1.414 0-.534-.208-1.036-.586-1.414z"/><path d="m12.543 6.215-10.306 10.306c-.066.065-.112.148-.133.239l-1.09 4.625c-.04.168.011.346.133.468.094.095.222.147.353.147.038 0 .077-.004.115-.013l4.625-1.09c.09-.021.173-.067.239-.133l10.306-10.306z"/></g></svg>

After

Width:  |  Height:  |  Size: 604 B

+1
View File
@@ -0,0 +1 @@
<svg id="bold" enable-background="new 0 0 24 24" height="512" viewBox="0 0 24 24" width="512" xmlns="http://www.w3.org/2000/svg"><circle cx="12" cy="12" r="3"/><circle cx="3" cy="12" r="3"/><circle cx="21" cy="12" r="3"/></svg>

After

Width:  |  Height:  |  Size: 227 B

+50
View File
@@ -0,0 +1,50 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
<g>
<g>
<path d="M352,288.994v127.008H64v-288h96v-64H32c-17.664,0-32,14.336-32,32v352c0,17.696,14.336,32,32,32h352
c17.696,0,32-14.304,32-32V288.994H352z"/>
</g>
</g>
<g>
<g>
<path d="M505.6,131.202l-128-96c-4.8-3.648-11.328-4.224-16.736-1.504c-5.44,2.72-8.864,8.256-8.864,14.304v48h-48
c-97.056,0-176,78.944-176,176c0,7.424,5.12,13.888,12.32,15.584c1.216,0.288,2.464,0.416,3.68,0.416
c5.952,0,11.552-3.328,14.304-8.832l3.776-7.52c24.544-49.12,73.888-79.648,128.8-79.648H352v48
c0,6.048,3.424,11.584,8.832,14.304c5.408,2.72,11.936,2.144,16.768-1.504l128-96c4.032-3.008,6.4-7.776,6.4-12.8
S509.632,134.21,505.6,131.202z"/>
</g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

+1
View File
@@ -0,0 +1 @@
<svg height="512pt" viewBox="0 0 512 512" width="512pt" xmlns="http://www.w3.org/2000/svg"><path d="m256 0c-141.164062 0-256 114.835938-256 256s114.835938 256 256 256 256-114.835938 256-256-114.835938-256-256-256zm0 405.332031c-11.777344 0-21.332031-9.554687-21.332031-21.332031s9.554687-21.332031 21.332031-21.332031 21.332031 9.554687 21.332031 21.332031-9.554687 21.332031-21.332031 21.332031zm33.769531-135.636719c-7.550781 3.476563-12.4375 11.09375-12.4375 19.394532v9.578125c0 11.773437-9.535156 21.332031-21.332031 21.332031s-21.332031-9.558594-21.332031-21.332031v-9.578125c0-24.898438 14.632812-47.722656 37.226562-58.15625 21.738281-10.003906 37.4375-36.566406 37.4375-49.601563 0-29.394531-23.914062-53.332031-53.332031-53.332031s-53.332031 23.9375-53.332031 53.332031c0 11.777344-9.539063 21.335938-21.335938 21.335938s-21.332031-9.558594-21.332031-21.335938c0-52.925781 43.070312-96 96-96s96 43.074219 96 96c0 28.824219-25.003906 71.191407-62.230469 88.363281zm0 0"/></svg>

After

Width:  |  Height:  |  Size: 986 B

+46
View File
@@ -0,0 +1,46 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
<g>
<g>
<path d="M394.667,214.421v-75.755C394.667,62.208,332.459,0,256,0S117.333,62.208,117.333,138.667v75.755
c-24.32,4.949-42.667,26.496-42.667,52.245v192C74.667,488.064,98.581,512,128,512h256c29.419,0,53.333-23.936,53.333-53.333v-192
C437.333,240.917,418.987,219.371,394.667,214.421z M279.659,378.24l8.235,57.579c0.448,3.072-0.469,6.165-2.496,8.491
c-2.027,2.325-4.971,3.691-8.064,3.691h-42.667c-3.093,0-6.037-1.344-8.064-3.669s-2.944-5.44-2.496-8.491l8.235-57.579
c-17.835-8.917-29.675-27.328-29.675-47.595c0-29.397,23.915-53.333,53.333-53.333s53.333,23.936,53.333,53.333
C309.333,350.933,297.493,369.344,279.659,378.24z M330.667,213.333H181.333v-74.667C181.333,97.493,214.827,64,256,64
s74.667,33.493,74.667,74.667V213.333z"/>
</g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

+1
View File
@@ -0,0 +1 @@
<svg height="384pt" viewBox="0 -21 384 384" width="384pt" xmlns="http://www.w3.org/2000/svg"><path d="m362.667969 0h-341.335938c-11.753906 0-21.332031 9.578125-21.332031 21.332031v42.667969c0 11.753906 9.578125 21.332031 21.332031 21.332031h341.335938c11.753906 0 21.332031-9.578125 21.332031-21.332031v-42.667969c0-11.753906-9.578125-21.332031-21.332031-21.332031zm0 0"/><path d="m362.667969 128h-341.335938c-11.753906 0-21.332031 9.578125-21.332031 21.332031v42.667969c0 11.753906 9.578125 21.332031 21.332031 21.332031h341.335938c11.753906 0 21.332031-9.578125 21.332031-21.332031v-42.667969c0-11.753906-9.578125-21.332031-21.332031-21.332031zm0 0"/><path d="m362.667969 256h-341.335938c-11.753906 0-21.332031 9.578125-21.332031 21.332031v42.667969c0 11.753906 9.578125 21.332031 21.332031 21.332031h341.335938c11.753906 0 21.332031-9.578125 21.332031-21.332031v-42.667969c0-11.753906-9.578125-21.332031-21.332031-21.332031zm0 0"/></svg>

After

Width:  |  Height:  |  Size: 940 B

+47
View File
@@ -0,0 +1,47 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 512.016 512.016" style="enable-background:new 0 0 512.016 512.016;" xml:space="preserve">
<g>
<g>
<path d="M507.336,244.68l-96-96c-4.576-4.576-11.456-5.952-17.44-3.456c-5.984,2.496-9.888,8.32-9.888,14.784v48h-80v-80h48
c6.464,0,12.32-3.904,14.784-9.888s1.088-12.864-3.456-17.44l-96-96c-6.24-6.24-16.384-6.24-22.624,0l-96,96
c-4.576,4.608-5.952,11.456-3.488,17.44s8.32,9.888,14.784,9.888h48v80h-80v-48c0-6.464-3.904-12.32-9.888-14.784
s-12.832-1.088-17.44,3.456l-96,96c-6.24,6.24-6.24,16.384,0,22.624l96,96c4.576,4.576,11.456,5.952,17.44,3.456
c5.984-2.432,9.888-8.288,9.888-14.752v-48h80v80h-48c-6.464,0-12.32,3.904-14.784,9.888c-2.496,5.984-1.12,12.864,3.456,17.44
l96,96c6.24,6.24,16.384,6.24,22.624,0l96-96c4.576-4.576,5.952-11.456,3.456-17.44c-2.496-5.984-8.288-9.888-14.752-9.888h-48
v-80h80v48c0,6.464,3.904,12.32,9.888,14.784c5.984,2.496,12.864,1.12,17.44-3.456l96-96
C513.576,261.064,513.576,250.952,507.336,244.68z"/>
</g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

+1
View File
@@ -0,0 +1 @@
<svg height="512pt" viewBox="0 0 512 512" width="512pt" xmlns="http://www.w3.org/2000/svg"><path d="m486.996094 64.382812-39.378906-39.378906c-16-16.023437-37.695313-25.003906-60.332032-25.003906h-328.617187c-32.40625 0-58.667969 26.261719-58.667969 58.667969v394.664062c0 32.40625 26.261719 58.667969 58.667969 58.667969h394.664062c32.40625 0 58.667969-26.261719 58.667969-58.667969v-328.617187c0-22.636719-8.980469-44.332032-25.003906-60.332032zm-401.664063 68.949219v-53.332031c0-8.832031 7.167969-16 16-16h224c8.832031 0 16 7.167969 16 16v53.332031c0 8.832031-7.167969 16-16 16h-224c-8.832031 0-16-7.167969-16-16zm170.667969 293.335938c-53.011719 0-96-42.988281-96-96 0-53.015625 42.988281-96 96-96s96 42.984375 96 96c0 53.011719-42.988281 96-96 96zm0 0"/></svg>

After

Width:  |  Height:  |  Size: 766 B

+50
View File
@@ -0,0 +1,50 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
<g>
<g>
<path d="M496.659,312.107l-47.061-36.8c0.597-5.675,1.109-12.309,1.109-19.328c0-7.019-0.491-13.653-1.109-19.328l47.104-36.821
c8.747-6.912,11.136-19.179,5.568-29.397L453.331,85.76c-5.227-9.557-16.683-14.464-28.309-10.176l-55.531,22.293
c-10.645-7.68-21.803-14.165-33.344-19.349l-8.448-58.901C326.312,8.448,316.584,0,305.086,0h-98.133
c-11.499,0-21.205,8.448-22.571,19.456l-8.469,59.115c-11.179,5.035-22.165,11.435-33.28,19.349l-55.68-22.357
C76.52,71.531,64.04,76.053,58.856,85.568L9.854,170.347c-5.781,9.771-3.392,22.464,5.547,29.547l47.061,36.8
c-0.747,7.189-1.109,13.44-1.109,19.307s0.363,12.117,1.109,19.328l-47.104,36.821c-8.747,6.933-11.115,19.2-5.547,29.397
l48.939,84.672c5.227,9.536,16.576,14.485,28.309,10.176l55.531-22.293c10.624,7.659,21.781,14.144,33.323,19.349l8.448,58.88
C185.747,503.552,195.454,512,206.974,512h98.133c11.499,0,21.227-8.448,22.592-19.456l8.469-59.093
c11.179-5.056,22.144-11.435,33.28-19.371l55.68,22.357c2.688,1.045,5.483,1.579,8.363,1.579c8.277,0,15.893-4.523,19.733-11.563
l49.152-85.12C507.838,331.349,505.448,319.083,496.659,312.107z M256.019,341.333c-47.061,0-85.333-38.272-85.333-85.333
s38.272-85.333,85.333-85.333s85.333,38.272,85.333,85.333S303.08,341.333,256.019,341.333z"/>
</g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

+6
View File
@@ -0,0 +1,6 @@
<svg version="1.2" baseProfile="tiny-ps" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 880 128" width="880" height="128">
<style>
tspan { white-space:pre }
</style>
<path fill="#ffffff" aria-label="careful" d="M81.84 72.19L85.04 72.19Q85.04 92.67 76.08 103.68Q67.25 114.56 51.25 114.56Q30 114.56 19.76 101.76Q9.52 88.96 9.52 64.9Q9.52 40.19 19.38 26.88Q29.36 13.44 50.48 13.44Q61.23 13.44 68.53 19.07Q75.82 24.7 79.28 35.2L79.28 16L82.48 16L82.48 58.11L79.28 58.11Q79.28 38.27 72.11 27.65Q65.07 16.9 50.61 16.9Q37.3 16.9 32.3 27.9Q27.44 38.91 27.44 65.02Q27.44 89.6 32.56 100.22Q37.68 110.85 51.25 110.85Q65.33 110.85 73.52 101.38Q81.84 91.9 81.84 72.19ZM178.61 44.54L178.61 96.77Q178.61 103.04 179.89 106.37Q181.3 109.7 183.73 109.7Q187.57 109.7 188.72 106.75Q190 103.81 190 96.51L190 87.04L193.2 87.04L193.2 96.77Q193.2 107.01 190.38 110.85Q187.7 114.56 179.25 114.56Q170.42 114.56 166.32 109.95Q162.22 105.34 162.22 96.51L162.22 91.26Q160.43 95.74 157.36 100.1Q154.29 104.32 150.45 107.52Q146.61 110.72 142.13 112.64Q137.78 114.56 133.17 114.56Q121.14 114.56 115.76 108.03Q110.38 101.38 110.38 92.03Q110.38 85.89 113.46 81.15Q116.53 76.42 121.14 72.7Q125.87 68.86 131.63 65.79Q137.52 62.72 142.9 59.9Q146.61 57.98 150.06 56.19Q153.65 54.27 156.34 52.22Q159.02 50.18 160.56 47.74Q162.22 45.31 162.22 42.24L162.22 41.98Q162.22 28.54 159.28 22.78Q156.34 16.9 147.5 16.9Q141.49 16.9 135.86 19.58Q130.35 22.27 126.13 27.52Q121.9 32.64 119.34 40.45Q116.78 48.26 116.78 58.37L116.78 61.18L113.58 61.18L113.58 16L116.78 16L116.78 37.76Q120.75 26.24 128.94 19.84Q137.26 13.44 147.76 13.44Q163.76 13.44 171.18 22.02Q178.61 30.46 178.61 44.54ZM128.3 86.14Q128.3 96.64 129.84 103.17Q131.5 109.57 137.01 109.57Q141.74 109.57 146.35 106.5Q150.96 103.42 154.42 98.82Q157.87 94.21 160.05 88.7Q162.22 83.07 162.22 77.95L162.22 50.43Q159.79 53.76 155.31 56.58Q150.96 59.39 144.05 62.98Q135.98 67.2 132.14 71.94Q128.3 76.54 128.3 86.14ZM245.81 108.8L264.11 108.8L264.11 112L214.32 112L214.32 108.8L229.42 108.8L229.42 19.2L214.32 19.2L214.32 16L244.53 16L244.53 30.72Q246.7 21.12 251.06 17.28Q255.41 13.44 261.68 13.44Q266.93 13.44 270.64 15.87Q274.35 18.3 276.4 24.19L276.4 16L279.6 16L279.6 56.06L276.4 56.06L276.4 52.35Q276.4 41.73 275.5 34.94Q274.61 28.03 272.82 24.19Q271.02 20.22 268.21 18.69Q265.39 17.15 261.68 17.15Q252.59 17.15 249.14 26.62Q245.81 36.1 245.81 56.83L245.81 108.8ZM374.96 75.9L378.42 75.9Q378.42 94.59 369.07 104.58Q359.86 114.56 343.34 114.56Q321.46 114.56 310.83 101.76Q300.34 88.96 300.34 64.9Q300.34 40.19 309.94 26.88Q319.66 13.44 338.86 13.44Q358.96 13.44 368.69 27.39Q378.54 41.34 378.42 67.07L318.26 67.07Q318.38 90.5 323.76 100.74Q329.26 110.85 343.34 110.85Q358.06 110.85 366.51 102.27Q374.96 93.7 374.96 75.9ZM338.99 16.9Q327.6 16.9 322.99 27.65Q318.38 38.27 318.26 63.62L360.5 63.62Q360.37 38.4 355.63 27.65Q350.9 16.9 338.99 16.9ZM456.5 112L399.02 112L399.02 108.8L411.7 108.8L411.7 87.81L398.9 87.81L398.9 84.61L411.7 84.61L411.7 55.3Q411.7 34.3 419.63 23.94Q427.7 13.44 443.82 13.44Q454.06 13.44 459.82 19.71Q465.58 25.86 465.58 36.99Q465.58 47.23 460.08 52.61Q454.58 57.98 447.79 61.95Q441.01 65.92 434.99 70.53Q428.98 75.01 428.08 83.58L428.08 84.61L456.5 84.61L456.5 87.81L428.08 87.81L428.08 108.8L456.5 108.8L456.5 112ZM462 36.99Q462 26.62 456.75 21.76Q451.63 16.9 444.08 16.9Q434.99 16.9 431.54 25.34Q428.08 33.79 428.08 55.3L428.08 74.75Q431.02 68.74 436.66 65.02Q442.42 61.31 447.92 57.86Q453.55 54.27 457.78 49.66Q462 45.06 462 36.99ZM496.82 75.78L496.82 19.2L483.5 19.2L483.5 16L560.43 16L560.43 96.77Q560.43 103.42 561.84 106.62Q563.25 109.7 566.06 109.7Q569.14 109.7 570.16 106.75Q571.18 103.81 571.18 96.51L571.18 87.04L574.38 87.04L574.38 96.77Q574.38 107.01 571.7 110.85Q569.14 114.56 561.2 114.56Q553.39 114.56 549.3 110.59Q545.33 106.62 545.33 94.34L545.33 94.21Q543.02 104.96 537.52 109.82Q532.02 114.56 524.34 114.56Q517.3 114.56 512.05 112.77Q506.93 110.85 503.47 106.5Q500.14 102.02 498.48 94.59Q496.82 87.04 496.82 75.78ZM513.2 19.2L513.2 70.53Q513.2 82.56 513.71 90.37Q514.35 98.05 515.89 102.53Q517.42 106.88 519.98 108.67Q522.54 110.34 526.38 110.34Q536.24 110.34 540.08 100.99Q544.05 91.65 544.05 71.17L544.05 19.2L513.2 19.2ZM625.07 108.8L643.63 108.8L643.38 112L595.12 112L595.12 108.8L608.69 108.8L608.69 47.62Q608.69 29.31 614.83 21.38Q621.1 13.44 634.42 13.44Q640.82 13.44 644.14 17.92Q647.6 22.4 647.6 29.82Q647.6 38.91 644.14 46.21Q640.82 53.5 636.59 61.31Q632.5 69.12 628.91 78.85Q625.46 88.45 625.07 102.4L625.07 108.8ZM625.07 47.62L625.07 82.3Q627.5 72.7 630.7 65.92Q634.03 59.01 636.98 53.38Q639.92 47.62 641.97 42.11Q644.14 36.61 644.14 29.82Q644.14 23.3 641.33 20.1Q638.64 16.9 634.29 16.9Q631.47 16.9 629.68 18.3Q627.89 19.58 626.86 23.04Q625.84 26.37 625.46 32.38Q625.07 38.4 625.07 47.62Z" />
</svg>

After

Width:  |  Height:  |  Size: 4.7 KiB

+6
View File
@@ -0,0 +1,6 @@
<svg version="1.2" baseProfile="tiny-ps" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 880 128" width="880" height="128">
<style>
tspan { white-space:pre }
</style>
<path fill="#ffffff" aria-label="concerted" d="M81.84 72.19L85.04 72.19Q85.04 92.67 76.08 103.68Q67.25 114.56 51.25 114.56Q30 114.56 19.76 101.76Q9.52 88.96 9.52 64.9Q9.52 40.19 19.38 26.88Q29.36 13.44 50.48 13.44Q61.23 13.44 68.53 19.07Q75.82 24.7 79.28 35.2L79.28 16L82.48 16L82.48 58.11L79.28 58.11Q79.28 38.27 72.11 27.65Q65.07 16.9 50.61 16.9Q37.3 16.9 32.3 27.9Q27.44 38.91 27.44 65.02Q27.44 89.6 32.56 100.22Q37.68 110.85 51.25 110.85Q65.33 110.85 73.52 101.38Q81.84 91.9 81.84 72.19ZM149.55 13.44Q170.29 13.44 180.78 26.88Q191.28 40.19 191.28 64.9Q191.28 88.83 180.53 101.76Q169.78 114.56 149.55 114.56Q129.33 114.56 118.7 101.76Q108.08 88.83 108.08 64.9Q108.08 40.19 118.58 26.88Q129.07 13.44 149.55 13.44ZM149.55 16.64Q136.24 16.64 131.12 27.78Q126 38.91 126 65.02Q126 89.73 131.25 100.61Q136.5 111.36 149.55 111.36Q162.61 111.36 167.98 100.61Q173.36 89.73 173.36 65.02Q173.36 38.91 168.11 27.78Q162.86 16.64 149.55 16.64ZM244.02 108.8L254.64 108.8L254.64 112L214.32 112L214.32 108.8L227.63 108.8L227.63 19.2L214.32 19.2L214.32 16L242.74 16L242.74 33.79Q245.04 23.04 250.54 18.3Q256.05 13.44 263.73 13.44Q270.77 13.44 275.89 15.36Q281.14 17.15 284.46 21.63Q287.92 25.98 289.58 33.54Q291.25 40.96 291.25 52.22L291.25 108.8L304.56 108.8L304.56 112L263.6 112L263.6 108.8L274.86 108.8L274.86 57.47Q274.86 45.44 274.22 37.76Q273.71 29.95 272.18 25.6Q270.64 21.12 268.08 19.46Q265.52 17.66 261.68 17.66Q251.82 17.66 247.86 27.01Q244.02 36.35 244.02 56.83L244.02 108.8ZM399.28 72.19L402.48 72.19Q402.48 92.67 393.52 103.68Q384.69 114.56 368.69 114.56Q347.44 114.56 337.2 101.76Q326.96 88.96 326.96 64.9Q326.96 40.19 336.82 26.88Q346.8 13.44 367.92 13.44Q378.67 13.44 385.97 19.07Q393.26 24.7 396.72 35.2L396.72 16L399.92 16L399.92 58.11L396.72 58.11Q396.72 38.27 389.55 27.65Q382.51 16.9 368.05 16.9Q354.74 16.9 349.74 27.9Q344.88 38.91 344.88 65.02Q344.88 89.6 350 100.22Q355.12 110.85 368.69 110.85Q382.77 110.85 390.96 101.38Q399.28 91.9 399.28 72.19ZM500.14 75.9L503.6 75.9Q503.6 94.59 494.26 104.58Q485.04 114.56 468.53 114.56Q446.64 114.56 436.02 101.76Q425.52 88.96 425.52 64.9Q425.52 40.19 435.12 26.88Q444.85 13.44 464.05 13.44Q484.14 13.44 493.87 27.39Q503.73 41.34 503.6 67.07L443.44 67.07Q443.57 90.5 448.94 100.74Q454.45 110.85 468.53 110.85Q483.25 110.85 491.7 102.27Q500.14 93.7 500.14 75.9ZM464.18 16.9Q452.78 16.9 448.18 27.65Q443.57 38.27 443.44 63.62L485.68 63.62Q485.55 38.4 480.82 27.65Q476.08 16.9 464.18 16.9ZM558.13 108.8L576.43 108.8L576.43 112L526.64 112L526.64 108.8L541.74 108.8L541.74 19.2L526.64 19.2L526.64 16L556.85 16L556.85 30.72Q559.02 21.12 563.38 17.28Q567.73 13.44 574 13.44Q579.25 13.44 582.96 15.87Q586.67 18.3 588.72 24.19L588.72 16L591.92 16L591.92 56.06L588.72 56.06L588.72 52.35Q588.72 41.73 587.82 34.94Q586.93 28.03 585.14 24.19Q583.34 20.22 580.53 18.69Q577.71 17.15 574 17.15Q564.91 17.15 561.46 26.62Q558.13 36.1 558.13 56.83L558.13 108.8ZM622.38 83.07L622.38 36.48L606.26 36.48L606.26 33.02L616.11 33.02L635.44 13.44L638.64 13.44L638.64 33.02L666.8 33.02L666.8 36.48L638.64 36.48L638.64 83.07Q638.64 97.79 640.94 103.81Q643.25 109.82 649.39 109.82Q651.57 109.82 653.87 108.67Q656.18 107.52 657.97 105.09Q659.89 102.66 661.04 98.69Q662.19 94.72 662.19 89.09L665.52 89.09Q665.52 96 663.86 100.99Q662.32 105.86 659.63 108.93Q656.94 111.87 653.36 113.28Q649.9 114.56 646.06 114.56Q634.03 114.56 628.14 106.62Q622.38 98.56 622.38 83.07ZM759.98 75.9L763.44 75.9Q763.44 94.59 754.1 104.58Q744.88 114.56 728.37 114.56Q706.48 114.56 695.86 101.76Q685.36 88.96 685.36 64.9Q685.36 40.19 694.96 26.88Q704.69 13.44 723.89 13.44Q743.98 13.44 753.71 27.39Q763.57 41.34 763.44 67.07L703.28 67.07Q703.41 90.5 708.78 100.74Q714.29 110.85 728.37 110.85Q743.09 110.85 751.54 102.27Q759.98 93.7 759.98 75.9ZM724.02 16.9Q712.62 16.9 708.02 27.65Q703.41 38.27 703.28 63.62L745.52 63.62Q745.39 38.4 740.66 27.65Q735.92 16.9 724.02 16.9ZM842.03 19.2L793.26 19.2L793.26 16L871.09 16L871.09 19.2L858.42 19.2L858.42 99.46Q858.42 105.73 859.44 107.78Q860.46 109.7 862.64 109.7Q865.46 109.7 866.35 106.75Q867.38 103.81 867.38 96.64L867.38 87.17L870.58 87.17L870.58 96.9Q870.58 107.01 868.27 110.85Q866.1 114.56 859.18 114.56Q851.25 114.56 846.77 112Q842.29 109.31 842.29 100.61Q839.6 107.78 834.61 111.23Q829.74 114.56 823.34 114.56Q805.81 114.56 796.85 103.04Q788.02 91.52 788.02 70.27Q788.02 49.02 796.85 37.63Q805.81 26.11 823.34 26.11Q828.21 26.11 831.54 27.52Q834.86 28.8 837.04 30.72Q839.22 32.51 840.37 34.69Q841.52 36.74 842.03 38.14L842.03 19.2ZM823.22 111.1Q828.98 111.1 832.56 108.8Q836.27 106.5 838.32 102.53Q840.5 98.43 841.26 92.93Q842.03 87.42 842.03 81.02L842.03 53.5Q842.03 39.42 836.53 34.56Q831.02 29.57 823.09 29.57Q817.84 29.57 814.38 31.23Q811.06 32.9 809.14 37.38Q807.34 41.73 806.58 49.66Q805.94 57.6 805.94 69.89Q805.94 81.92 806.7 89.86Q807.6 97.79 809.52 102.53Q811.57 107.26 814.9 109.18Q818.22 111.1 823.22 111.1Z" />
</svg>

After

Width:  |  Height:  |  Size: 4.9 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 5.2 KiB

+46
View File
@@ -0,0 +1,46 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
<g>
<g>
<path d="M384,213.333H181.333v-74.667C181.333,97.493,214.827,64,256,64s74.667,33.493,74.667,74.667v42.667
c0,5.888,4.779,10.667,10.667,10.667H384c5.888,0,10.667-4.779,10.667-10.667v-42.667C394.667,62.208,332.459,0,256,0
S117.333,62.208,117.333,138.667v75.755c-24.32,4.949-42.667,26.517-42.667,52.245v192C74.667,488.064,98.581,512,128,512h256
c29.419,0,53.333-23.936,53.333-53.333v-192C437.333,237.269,413.419,213.333,384,213.333z M279.659,378.24l8.235,57.579
c0.448,3.072-0.469,6.165-2.496,8.491c-2.027,2.325-4.971,3.691-8.064,3.691h-42.667c-3.093,0-6.037-1.344-8.064-3.669
s-2.944-5.44-2.496-8.491l8.235-57.579c-17.835-8.917-29.675-27.328-29.675-47.595c0-29.397,23.915-53.333,53.333-53.333
s53.333,23.936,53.333,53.333C309.333,350.933,297.493,369.344,279.659,378.24z"/>
</g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

+9
View File
@@ -0,0 +1,9 @@
{
"html": "arc.html",
"css": "arc.css",
"authors": "Morgdalaine",
"roll20userid": "61327",
"preview": "arc.png",
"patreon": "https://www.patreon.com/morgdalaine",
"instructions": "Don't forget to install the Doomsday Clock API!"
}
+27
View File
@@ -0,0 +1,27 @@
const gulp = require("gulp");
const pug = require("gulp-pug");
const sass = require('gulp-sass')(require('sass'));
gulp.task("scss", () => {
return gulp.src("./scss/arc.scss")
.pipe(sass({
outputStyle: "expanded"
}).on("error", sass.logError))
.pipe(gulp.dest("../"))
})
gulp.task("html", function () {
return gulp.src("./pug/arc.pug")
.pipe(pug({
pretty: true,
locals: require("../translation.json")
}))
.pipe(gulp.dest("../"))
})
gulp.task("watch", gulp.series(["scss", "html"], () => {
gulp.watch("./scss/**/*.scss", gulp.series(["scss"]))
gulp.watch(["./pug/**/*.pug","./js/**/*.js"], gulp.series(["html"]))
}))
gulp.task("build", gulp.series(["scss", "html"]))
+125
View File
@@ -0,0 +1,125 @@
on("sheet:opened", () => {
getAttrs(["sheet_type"], (updateAttrs) => {
if (!updateAttrs.sheet_type) {
updateAttrs.sheet_type = "character";
}
setAttrs(updateAttrs);
});
});
// NOTE: The API sets export_show to "on";
// it does not trigger the event handler
on("sheet:opened change:export", (eventInfo) => {
getAttrs(["export"], (val) => {
const updateAttrs = {};
updateAttrs.export_show = val.export ? "on" : "0";
setAttrs(updateAttrs);
});
});
[1, 2, 3].forEach((l) => {
on(`change:repeating_bonds:level_${l}`, (eventInfo) => {
if (eventInfo.sourceType == "player") {
let updateAttrs = {};
let changed = parseInt(eventInfo.sourceAttribute.slice(-1));
// fill major bonds below
for (let f = changed - 1; f > 0; f--) {
updateAttrs[`repeating_bonds_level_${f}`] = 4;
}
// clear major bonds above
for (let c = changed + 1; c <= 3; c++) {
updateAttrs[`repeating_bonds_level_${c}`] = 0;
}
setAttrs(updateAttrs);
}
});
});
GLOBAL__HEALTH.forEach(s => on(`change:${s} change:${s}_max`, eventInfo =>
currentMax(s, eventInfo)));
const currentMax = (attr, eventInfo) => {
if (eventInfo.sourceType == "player") {
let updateAttrs = {};
let attr_max = `${attr}_max`;
getAttrs([attr, attr_max], val => {
const current = parseInt(val[attr]) || 0;
const maximum = parseInt(val[attr_max]) || 0;
const newCurr = (current > maximum)
? maximum
: Math.max(0, current);
updateAttrs[attr] = newCurr;
updateAttrs[attr_max] = Math.max(0, maximum);
setAttrs(updateAttrs);
});
}
};
on("change:repeating_inventory:name", (eventInfo) => {
const id = eventInfo.sourceAttribute.split("_")[2];
const updateAttrs = {};
const name = eventInfo.newValue.trim();
let translation = getTranslationByKey(name)
if (translation) {
updateAttrs[`repeating_inventory_${id}_name`] = translation;
const searchInputs = _.difference(GLOBAL__INVENTORY_INPUTS, ["name"]);
_.each(searchInputs, (key) => {
const attr = `repeating_inventory_${id}_${key}`;
const i18n = `${name}_${key}`;
// check if property exists in global
if (GLOBAL__INVENTORY[name][key]) {
updateAttrs[attr] = GLOBAL__INVENTORY[name][key];
}
// check if translation exists
else if (getTranslationByKey(i18n)) {
updateAttrs[attr] = getTranslationByKey(i18n);
}
});
log(updateAttrs)
setAttrs(updateAttrs, { silent: true });
}
});
on("clicked:repeating_inventory:item-expand-toggle", (eventInfo) => {
const id = eventInfo.sourceAttribute.split("_")[2];
getAttrs([`repeating_inventory_${id}_item_expand`], (val) => {
setAttrs({
[`repeating_inventory_${id}_item_expand`]: val[`repeating_inventory_${id}_item_expand`] === "0" ? "on" : "0"
});
});
});
GLOBAL__SKILLS.forEach((skill) => {
on(`clicked:${skill}`, initiateSkillRoll);
});
on("sheet:opened", () => {
getAttrs(["version"], (updateAttrs) => {
// Logic to determine what updates need to be done
if (!updateAttrs.version) {
// set sheet version if it doesn't exist
updateAttrs.version = "1.0";
}
setAttrs(updateAttrs);
});
});
on("sheet:opened", () => {
var updateAttrs = {}
for (i = 0; i < GLOBAL__HEALTH.length; i++) {
var key = `${GLOBAL__HEALTH[i]}`;
var translation = `${key}_i18n`;
updateAttrs[translation] = getTranslationByKey(key);
}
setAttrs(updateAttrs);
});
+418
View File
@@ -0,0 +1,418 @@
const GLOBAL__HEALTH = [ "blood", "guts" ];
const GLOBAL__APPROACHES = [ "creative", "careful", "concerted" ];
const GLOBAL__SKILLS = [
"academic", "culture", "observe", "tactics",
"charisma", "guile", "impose", "insight",
"acrobatics", "coordination", "physique", "weaponry",
"artistry", "survival", "tinker", "trade",
"arcana", "focus"
];
const GLOBAL__DIFFICULTIES = [ "tn_modifier+0", "tn_modifier-1", "tn_modifier-2", "tn_modifier-3", "tn_modifier+1", "tn_modifier+2", "tn_modifier+3" ];
const GLOBAL__APPROACH_QUERY = `[[?{Approach|${GLOBAL__APPROACHES.map((app, i) => `${getTranslationByKey(app)}, ${i}`).join("|")}}]]`;
const GLOBAL__DIFFICULTY_QUERY = `[[?{Modifiers|${GLOBAL__DIFFICULTIES.map((dif, i) => `${getTranslationByKey(dif)}, ${i}`).join("|")}}]]`;
const GLOBAL__DIFFICULTY_EFFECTS = {
"tn_modifier+0": +0,
"tn_modifier-1": -1,
"tn_modifier-2": -2,
"tn_modifier-3": -3,
"tn_modifier+1": +1,
"tn_modifier+2": +2,
"tn_modifier+3": +3,
};
const GLOBAL__INVENTORY_INPUTS = [
"name",
"type",
"description",
"first_boon",
"second_boon",
"complexity",
"base_effect",
"enhanced",
"ritual"
];
const GLOBAL__INVENTORY = {
combat_scowling_face: {
type: "damage_and_defense",
complexity: 0,
},
combat_pitchfork: {
type: "damage_and_defense",
complexity: 0,
},
combat_memories_of_hardship: {
type: "damage_and_defense",
complexity: 0,
},
combat_iron_briefs: {
type: "damage_and_defense",
complexity: 0,
},
combat_booming_voice: {
type: "damage_and_defense",
complexity: 0,
},
combat_well_rounded_education: {
type: "damage_and_defense",
complexity: 0,
},
combat_darts: {
type: "damage_and_defense",
complexity: 0,
},
combat_dagger: {
type: "damage_and_defense",
complexity: 0,
},
combat_self_esteem: {
type: "damage_and_defense",
complexity: 0,
},
combat_studden_leather_armor: {
type: "damage_and_defense",
complexity: 0,
},
combat_devastating_vocabulary: {
type: "damage_and_defense",
complexity: 0,
},
combat_critical_thinking: {
type: "damage_and_defense",
complexity: 0,
},
combat_sturdy_sword: {
type: "damage_and_defense",
complexity: 0,
},
combat_crossbow: {
type: "damage_and_defense",
complexity: 0,
},
combat_plate_armor: {
type: "damage_and_defense",
complexity: 0,
},
combat_love_letter: {
type: "damage_and_defense",
complexity: 0,
},
combat_cunning_wit: {
type: "damage_and_defense",
complexity: 0,
},
combat_flaming_sword: {
type: "damage_and_defense",
complexity: 0,
},
supplies_rations: {
type: "supplies_and_sundries",
complexity: 0,
},
supplies_artisans_tools: {
type: "supplies_and_sundries",
complexity: 0,
},
supplies_crowbar_and_lantern: {
type: "supplies_and_sundries",
complexity: 0,
},
supplies_rope_and_carpet: {
type: "supplies_and_sundries",
complexity: 0,
},
supplies_bedroll: {
type: "supplies_and_sundries",
complexity: 0,
},
supplies_backpack: {
type: "supplies_and_sundries",
complexity: 0,
},
supplies_thieves_tools: {
type: "supplies_and_sundries",
complexity: 0,
},
supplies_fine_clothes: {
type: "supplies_and_sundries",
complexity: 0,
},
supplies_traps: {
type: "supplies_and_sundries",
complexity: 0,
},
supplies_tent: {
type: "supplies_and_sundries",
complexity: 0,
},
supplies_fishing_pole: {
type: "supplies_and_sundries",
complexity: 0,
},
supplies_live_hen: {
type: "supplies_and_sundries",
complexity: 0,
},
supplies_board_games: {
type: "supplies_and_sundries",
complexity: 0,
},
supplies_alchemists_tools: {
type: "supplies_and_sundries",
complexity: 0,
},
supplies_encyclopeida: {
type: "supplies_and_sundries",
complexity: 0,
},
supplies_spyglass: {
type: "supplies_and_sundries",
complexity: 0,
},
supplies_coded_letters: {
type: "supplies_and_sundries",
complexity: 0,
},
supplies_horse: {
type: "supplies_and_sundries",
complexity: 0,
},
oddities_seashell_horn: {
type: "oddities_and_valuables",
complexity: 0,
},
oddities_dead_donkey: {
type: "oddities_and_valuables",
complexity: 0,
},
oddities_ancient_ring: {
type: "oddities_and_valuables",
complexity: 0,
},
oddities_songbird: {
type: "oddities_and_valuables",
complexity: 0,
},
oddities_human_teeth: {
type: "oddities_and_valuables",
complexity: 0,
},
oddities_hat: {
type: "oddities_and_valuables",
complexity: 0,
},
oddities_monkey_head: {
type: "oddities_and_valuables",
complexity: 0,
},
oddities_heavy_crown: {
type: "oddities_and_valuables",
complexity: 0,
},
oddities_giant_serpent_scales: {
type: "oddities_and_valuables",
complexity: 0,
},
oddities_silk_dress: {
type: "oddities_and_valuables",
complexity: 0,
},
oddities_tyrant_pants: {
type: "oddities_and_valuables",
complexity: 0,
},
oddities_shadow_mirror: {
type: "oddities_and_valuables",
complexity: 0,
},
oddities_darkvision_glasses: {
type: "oddities_and_valuables",
complexity: 0,
},
oddities_divine_blood: {
type: "oddities_and_valuables",
complexity: 0,
},
oddities_seeds: {
type: "oddities_and_valuables",
complexity: 0,
},
oddities_potion_brawn: {
type: "oddities_and_valuables",
complexity: 0,
},
oddities_troll_flesh: {
type: "oddities_and_valuables",
complexity: 0,
},
oddities_telepathic_yak: {
type: "oddities_and_valuables",
complexity: 0,
},
spells_trinket: {
type: "spells_and_techniques",
complexity: 0,
},
spells_trick_of_the_light: {
type: "spells_and_techniques",
complexity: 0,
},
spells_soundshift: {
type: "spells_and_techniques",
complexity: 0,
},
spells_lifebringer: {
type: "spells_and_techniques",
complexity: 0,
},
spells_whisper: {
type: "spells_and_techniques",
complexity: 0,
},
spells_bind_weapon: {
type: "spells_and_techniques",
complexity: 0,
},
spells_unmask_the_self: {
type: "spells_and_techniques",
complexity: 0,
},
spells_secret_door: {
type: "spells_and_techniques",
complexity: 0,
},
spells_burn_the_past: {
type: "spells_and_techniques",
complexity: 0,
},
spells_master_of_elements: {
type: "spells_and_techniques",
complexity: 0,
},
spells_little_escapologist: {
type: "spells_and_techniques",
complexity: 0,
},
spells_pierce_the_veil: {
type: "spells_and_techniques",
complexity: 0,
},
spells_manic_hands: {
type: "spells_and_techniques",
complexity: 0,
},
spells_shadowbind: {
type: "spells_and_techniques",
complexity: 0,
},
spells_compel: {
type: "spells_and_techniques",
complexity: 0,
},
spells_windstep: {
type: "spells_and_techniques",
complexity: 0,
},
spells_blackout: {
type: "spells_and_techniques",
complexity: 0,
},
spells_spirit_pact: {
type: "spells_and_techniques",
complexity: 0,
},
spells_from_dust_to_dust: {
type: "spells_and_techniques",
complexity: 0,
},
spells_true_miracle: {
type: "spells_and_techniques",
complexity: 0,
},
techniques_only_ones_who_know: {
type: "spells_and_techniques",
complexity: 0,
},
techniques_uncanny_alarm: {
type: "spells_and_techniques",
complexity: 0,
},
techniques_weave_through_water: {
type: "spells_and_techniques",
complexity: 0,
},
techniques_memory_seed: {
type: "spells_and_techniques",
complexity: 0,
},
techniques_flowmotion: {
type: "spells_and_techniques",
complexity: 0,
},
techniques_saving_grace: {
type: "spells_and_techniques",
complexity: 0,
},
techniques_inspiration: {
type: "spells_and_techniques",
complexity: 0,
},
techniques_bind_magic: {
type: "spells_and_techniques",
complexity: 0,
},
techniques_stonewall: {
type: "spells_and_techniques",
complexity: 0,
},
techniques_heartpiercer: {
type: "spells_and_techniques",
complexity: 0,
},
techniques_deadly_focus: {
type: "spells_and_techniques",
complexity: 0,
},
techniques_redo: {
type: "spells_and_techniques",
complexity: 0,
},
techniques_turn_the_tide: {
type: "spells_and_techniques",
complexity: 0,
},
techniques_dispel: {
type: "spells_and_techniques",
complexity: 0,
},
techniques_interdiction: {
type: "spells_and_techniques",
complexity: 0,
},
techniques_fluorescent_transcendence: {
type: "spells_and_techniques",
complexity: 0,
},
techniques_netherwave: {
type: "spells_and_techniques",
complexity: 0,
},
techniques_become_one: {
type: "spells_and_techniques",
complexity: 0,
},
techniques_defy_the_fates: {
type: "spells_and_techniques",
complexity: 0,
},
techniques_doompause: {
type: "spells_and_techniques",
complexity: 0,
},
};
+81
View File
@@ -0,0 +1,81 @@
// thank you Scott C!
const initiateSkillRoll = async function (event) {
let skill = event.triggerName.replace(/clicked:/, "");
// figure out which approach to use -- so ask
let approachRoll = await startRoll(`!&template:default} {{query=${GLOBAL__APPROACH_QUERY}}}`);
// note that values for the query options above line up with their indexes in GLOBAL__APPROACHES
// also, this is an API message: it won't be visible to any user
// because it's so generic, it shouldn't trigger any API scripts
// finish approachRoll immediately vecause we aren't going to computee
// any values from it -- it's just a dummy roll
finishRoll(approachRoll.rollId);
// same song for difficulty
let difficultyRoll = await startRoll(`!&template:default} {{query=${GLOBAL__DIFFICULTY_QUERY}}}`);
finishRoll(difficultyRoll.rollId);
// parse the results
let approachValue = approachRoll.results.query.result;
let approach = GLOBAL__APPROACHES[approachValue];
let difficultyValue = difficultyRoll.results.query.result;
let difficulty = GLOBAL__DIFFICULTIES[difficultyValue];
let i18nApproach = getTranslationByKey(approach);
let i18nSkill = getTranslationByKey(skill);
let i18nDifficulty = getTranslationByKey("difficulty");
let i18nModifier = getTranslationByKey("modifier");
let finalTemplate = [
`&{template:skills}`,
`{{character_name=@{character_name}}}`,
`{{verb=^{tests}}}`,
`{{type=skill-test}}`,
`{{skill=${skill}}}`,
`{{roll=[[1d6]]}}`,
`{{flawless=[[1d6]]}}`,
`{{flawless=[[1d6]]}}`,
`{{TN=[[@{${skill}}[${i18nSkill}] + @{${approach}}[${i18nApproach}] +`,
`${GLOBAL__DIFFICULTY_EFFECTS[difficulty]}[${i18nModifier}]]]}}`,
`{{title=${approach}}}`,
`{{difficulty=${difficulty}}}`
].join("");
// now that we have all the helprmation, make the roll
let finalRoll = await startRoll(finalTemplate);
finishRoll(finalRoll.rollId);
};
// Functions added for code to make sense, not needed for getting regular and repeating sections.
// converts a value to a number, it's default value, or 0.
const value = function(val, def) {
return (+val||def||0);
};
// ===== PARAMETERS ==========
// destinations : the name of the attribute that stores the total quantity
// can be a single attribute, or an array: ["total_cost", "total_weight"]
// If more than one, the matching fields must be in the same order.
//
// section : name of repeating fieldset, without the repeating_
//
// fields : the name of the attribute field to be summed
// destination and fields both can be a single attribute: "weight"
// or an array of attributes: ["weight","number","equipped"]
const repeatingSum = (destinations, section, fields) => {
if (!Array.isArray(destinations)) destinations = [destinations.replace(/\s/g, "").split(",")];
if (!Array.isArray(fields)) fields = [fields.replace(/\s/g, "").split(",")];
getSectionIDs(`repeating_${section}`, idArray => {
const attrArray = idArray.reduce((m, id) => [...m, ...(fields.map(field => `repeating_${section}_${id}_${field}`))], []);
getAttrs([...attrArray], v => {
const getValue = (section, id, field) => v[`repeating_${section}_${id}_${field}`] === "on" ? 1 : parseFloat(v[`repeating_${section}_${id}_${field}`]) || 0;
const commonMultipliers = (fields.length <= destinations.length) ? [] : fields.splice(destinations.length, fields.length - destinations.length);
const output = {};
destinations.forEach((destination, index) => {
output[destination] = idArray.reduce((total, id) => total + getValue(section, id, fields[index]) * commonMultipliers.reduce((subtotal, mult) => subtotal * getValue(section, id, mult), 1), 0);
});
setAttrs(output);
});
});
};
+8822
View File
File diff suppressed because it is too large Load Diff
+37
View File
@@ -0,0 +1,37 @@
{
"name": "arc",
"version": "1.0.0",
"description": "Roll20 character sheet for ARC: Doom Tabletop RPG",
"main": "arc.html",
"scripts": {
"build": "gulp build",
"watch": "gulp watch"
},
"author": "Morgdalaine",
"funding": [
{
"type": "patreon",
"url": "https://www.patreon.com/morgdalaine"
},
{
"type": "ko-fi",
"url": "https://ko-fi.com/morgdalaine"
}
],
"repository": {
"type": "git",
"url": "https://github.com/morgdalaine/",
"directory": "ARC"
},
"keywords": [
"Roll20"
],
"license": "MIT",
"devDependencies": {
"gulp": "4.0.2",
"gulp-pug": "5.0.0",
"gulp-sass": "5.0.0",
"pug": "3.0.2",
"sass": "1.37.0"
}
}
BIN
View File
Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More