Merge pull request #11496 from DBFBlackbull/ADnD_2E_Revised-slim-spells

[ADnD_2E_Revised] Slim Spells
This commit is contained in:
Nic Bradley
2023-02-20 09:16:18 -08:00
committed by GitHub
35 changed files with 7471 additions and 6639 deletions
+5649 -3793
View File
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+7 -2
View File
@@ -4,7 +4,7 @@ const path = require('path');
const sourceFolder = path.join(__dirname, '..');
const jsFolder = path.join(sourceFolder, 'javascript');
const pugFolder = path.join(sourceFolder, 'pug');
const htmlFolder = path.join(sourceFolder, 'html', 'components');
const htmlFolder = path.join(sourceFolder, 'html');
const miscFolder = path.join(sourceFolder, 'misc');
const booksPriority = [
{book: 'PHB', print: 'First Printing May 2013'},
@@ -65,6 +65,11 @@ spellsJs.forEach(jsFile => {
}
});
let spellTemplate = pug.renderFile(path.join(pugFolder, 'spellTemplate.pug'), {pretty: true, isPriest: false});
fs.writeFileSync(path.join(htmlFolder, 'shared', 'wizard-spell-template.html'), spellTemplate);
spellTemplate = pug.renderFile(path.join(pugFolder, 'spellTemplate.pug'), {pretty: true, isPriest: true});
fs.writeFileSync(path.join(htmlFolder, 'shared', 'priest-spell-template.html'), spellTemplate);
const wizardSpells = require(path.join(jsFolder, 'wizardSpells.js'));
const priestSpells = require(path.join(jsFolder, 'priestSpells.js'));
html += pug.renderFile(path.join(pugFolder, 'spellScrollsDatalists.pug'), {pretty: true, wizardSpells, priestSpells});
@@ -96,5 +101,5 @@ simpleDatalists.forEach(simpleDatalist => {
html += pug.renderFile(path.join(pugFolder, 'simpleDatalists.pug'), {pretty: true, data: data, id:simpleDatalist[1]})
});
fs.writeFileSync(path.join(htmlFolder, 'dynamicDatalists.html'), html);
fs.writeFileSync(path.join(htmlFolder, 'components', 'dynamicDatalists.html'), html);
console.log('');
+164 -535
View File
@@ -1,10 +1,3 @@
input,
button,
select,
textarea {
background-color: white;
}
.charsheet input {
display: inline-block;
width: 165px;
@@ -52,12 +45,10 @@ textarea {
.charsheet input.sheet-madtext {
width: 79px;
}
.charsheet select.sheet-spell-select,
.charsheet select.sheet-attr,
.charsheet input.sheet-attr {
width: 80px;
}
.charsheet select.sheet-spell-select-min,
.charsheet select.sheet-attr-min,
.charsheet input.sheet-attr-min {
min-width: 80px;
@@ -155,10 +146,6 @@ textarea {
.charsheet input.sheet-nonweaponprof {
width: 260px;
}
.charsheet select.sheet-spell-big,
.charsheet input.sheet-spell-big {
width: 295px;
}
.charsheet select.sheet-long,
.charsheet input.sheet-long {
width: 400px;
@@ -201,10 +188,24 @@ textarea {
box-sizing: border-box;
}
.charsheet select.sheet-table-dynamic {
margin: 0;
}
.charsheet input.sheet-table-dynamic90 {
min-width: 90%;
}
.charsheet th.sheet-td-dynamic20,
.charsheet td.sheet-td-dynamic20 {
width: 20%;
}
.charsheet th.sheet-td-dynamic25,
.charsheet td.sheet-td-dynamic25 {
width: 25%;
}
.charsheet th.sheet-td-dynamic30,
.charsheet td.sheet-td-dynamic30 {
width: 30%;
@@ -215,6 +216,11 @@ textarea {
width: 50%;
}
.charsheet th.sheet-td-dynamic60,
.charsheet td.sheet-td-dynamic60 {
width: 60%;
}
.charsheet th.sheet-td-dynamic70,
.charsheet td.sheet-td-dynamic70 {
width: 70%;
@@ -225,36 +231,6 @@ textarea {
width: 100%;
}
.charsheet select.sheet-table-dynamic {
margin: 0;
}
.charsheet input[type="number"].sheet-tiny {
width: 23px;
}
input[type="number"].sheet-tiny::-webkit-inner-spin-button {
-webkit-appearance: none;
}
input[type="number"].sheet-nobut::-webkit-inner-spin-button {
-webkit-appearance: none;
}
input.sheet-arrow
{
float: left;
}
input.sheet-arrow:checked ~ div.sheet-body
{
display: none;
}
.charsheet input[type="checkbox"].left {
float: left;
margin: 5px 0;
width: 2px;
}
input.sheet-tab:not(:first-child)::before
{
border-left: none;
@@ -316,106 +292,103 @@ textarea.sheet-input-like {
content: "✓";
}
div[class^="sheet-section"] {
.charsheet input.sheet-tab1:checked ~ .sheet-section-character-page,
.charsheet input.sheet-tab2:checked ~ .sheet-section-monster-page,
.charsheet input.sheet-tab3:checked ~ .sheet-section-character-info,
.charsheet input.sheet-tab4:checked ~ .sheet-section-attributes,
.charsheet input.sheet-tab5:checked ~ .sheet-section-weapons,
.charsheet input.sheet-tab6:checked ~ .sheet-section-rogue,
.charsheet input.sheet-tab7:checked ~ .sheet-section-proficiencies,
.charsheet input.sheet-tab8:checked ~ .sheet-section-spells,
.charsheet input.sheet-tab9:checked ~ .sheet-section-psionics,
.charsheet input.sheet-tab10:checked ~ .sheet-section-equipment,
.charsheet input.sheet-tab11:checked ~ .sheet-section-currency,
.charsheet input.sheet-tab12:checked ~ .sheet-section-followers,
.charsheet input.sheet-tab14:checked ~ .sheet-section-ravenloft-saves,
.charsheet input.sheet-tab15:checked ~ .sheet-section-movement-standard,
.charsheet input.sheet-tab16:checked ~ .sheet-section-movement-advanced,
.charsheet input.sheet-tab17:checked ~ .sheet-section-attributes-standard,
.charsheet input.sheet-tab18:checked ~ .sheet-section-attributes-player-option,
.charsheet input.sheet-tab19:checked ~ .sheet-section-wizard-spells,
.charsheet input.sheet-tab20:checked ~ .sheet-section-priest-spells,
.charsheet input.sheet-tab21:checked ~ .sheet-section-wizard-level-one,
.charsheet input.sheet-tab22:checked ~ .sheet-section-wizard-level-two,
.charsheet input.sheet-tab23:checked ~ .sheet-section-wizard-level-three,
.charsheet input.sheet-tab24:checked ~ .sheet-section-wizard-level-four,
.charsheet input.sheet-tab25:checked ~ .sheet-section-wizard-level-five,
.charsheet input.sheet-tab26:checked ~ .sheet-section-wizard-level-six,
.charsheet input.sheet-tab27:checked ~ .sheet-section-wizard-level-seven,
.charsheet input.sheet-tab28:checked ~ .sheet-section-wizard-level-eight,
.charsheet input.sheet-tab29:checked ~ .sheet-section-wizard-level-nine,
.charsheet input.sheet-tab30:checked ~ .sheet-section-wizard-level-ten,
.charsheet input.sheet-tab31:checked ~ .sheet-section-priest-level-one,
.charsheet input.sheet-tab32:checked ~ .sheet-section-priest-level-two,
.charsheet input.sheet-tab33:checked ~ .sheet-section-priest-level-three,
.charsheet input.sheet-tab34:checked ~ .sheet-section-priest-level-four,
.charsheet input.sheet-tab35:checked ~ .sheet-section-priest-level-five,
.charsheet input.sheet-tab36:checked ~ .sheet-section-priest-level-six,
.charsheet input.sheet-tab37:checked ~ .sheet-section-priest-level-seven,
.charsheet input.sheet-tab31:checked ~ div .sheet-section-priest-level-one,
.charsheet input.sheet-tab32:checked ~ div .sheet-section-priest-level-two,
.charsheet input.sheet-tab33:checked ~ div .sheet-section-priest-level-three,
.charsheet input.sheet-tab34:checked ~ div .sheet-section-priest-level-four,
.charsheet input.sheet-tab35:checked ~ div .sheet-section-priest-level-five,
.charsheet input.sheet-tab36:checked ~ div .sheet-section-priest-level-six,
.charsheet input.sheet-tab37:checked ~ div .sheet-section-priest-level-seven,
.charsheet input.sheet-tab38:checked ~ .sheet-section-priest-quest,
.charsheet input.sheet-tab39:checked ~ .sheet-section-rogue-standard,
.charsheet input.sheet-tab40:checked ~ .sheet-section-psionic-standard,
.charsheet input.sheet-tab41:checked ~ .sheet-section-psionic-advanced,
.charsheet input.sheet-tab42:checked ~ .sheet-section-currency-standard,
.charsheet input.sheet-tab43:checked ~ .sheet-section-currency-dragonlance,
.charsheet input.sheet-tab44:checked ~ .sheet-section-currency-dark-sun,
.charsheet input.sheet-tab45:checked ~ .sheet-section-currency-ravenloft,
.charsheet input.sheet-tab46:checked ~ .sheet-section-follower-warrior,
.charsheet input.sheet-tab47:checked ~ .sheet-section-follower-wizard,
.charsheet input.sheet-tab48:checked ~ .sheet-section-follower-priest,
.charsheet input.sheet-tab49:checked ~ .sheet-section-follower-rogue,
.charsheet input.sheet-tab50:checked ~ .sheet-section-follower-psion,
.charsheet input.sheet-tab51:checked ~ .sheet-section-follower-animals,
.charsheet input.sheet-tab52:checked ~ .sheet-section-priest-turn,
.charsheet input.sheet-tab53:checked ~ .sheet-section-journal,
.charsheet input.sheet-tab54:checked ~ .sheet-section-wizard-level-eleven,
.charsheet input.sheet-tab55:checked ~ .sheet-section-wizard-level-twelve,
.charsheet input.sheet-tab56:checked ~ .sheet-section-wizard-level-thirteen,
.charsheet input.sheet-tab57:checked ~ .sheet-section-wizard-level-fourteen,
.charsheet input.sheet-tab58:checked ~ .sheet-section-wizard-level-fifteen,
.charsheet input.sheet-tab59:checked ~ .sheet-section-currency-maztica,
.charsheet input.sheet-tab60:checked ~ .sheet-section-rogue-spds,
.charsheet input.sheet-tab61:checked ~ .sheet-section-rogue-standard-hench,
.charsheet input.sheet-tab62:checked ~ .sheet-section-rogue-spds-hench,
.charsheet input.sheet-tab63:checked ~ .sheet-section-rogue-standard-repeat,
.charsheet input.sheet-tab64:checked ~ .sheet-section-rogue-spds-repeat,
.charsheet input.sheet-tab65:checked ~ .sheet-section-psionics-standard-hench,
.charsheet input.sheet-tab66:checked ~ .sheet-section-psionics-advanced-hench,
.charsheet input.sheet-tab67:checked ~ .sheet-section-psionics-standard-repeat,
.charsheet input.sheet-tab68:checked ~ .sheet-section-psionics-advanced-repeat,
.charsheet input.sheet-tab69:checked ~ .sheet-section-granted-powers,
.charsheet input.sheet-tab70:checked ~ .sheet-section-weapon-standard-melee,
.charsheet input.sheet-tab71:checked ~ .sheet-section-weapon-standard-ranged,
.charsheet input.sheet-tab72:checked ~ .sheet-section-movement-mount,
.charsheet input.sheet-tab73:checked ~ .sheet-section-character-info-details,
.charsheet input.sheet-tab74:checked ~ .sheet-section-character-info-tracker,
.charsheet input.sheet-tab75:checked ~ .sheet-section-currency-birthright,
.charsheet input.sheet-tab76:checked ~ .sheet-section-birthright,
.charsheet input.sheet-tab77:checked ~ .sheet-section-movement-barbarian,
.charsheet input.sheet-tab79:checked ~ .sheet-section-movement-swimming,
.charsheet input.sheet-tab80:checked ~ .sheet-section-movement-flying,
.charsheet input.sheet-tab81:checked ~ .sheet-section-weapon-standard,
.charsheet input.sheet-tab82:checked ~ .sheet-section-weapon-player-option,
.charsheet input.sheet-tab83:checked ~ .sheet-section-weapon-player-option-melee,
.charsheet input.sheet-tab84:checked ~ .sheet-section-weapon-player-option-ranged,
.charsheet input.sheet-tab85:checked ~ .sheet-section-settings-page {
display: block;
}
.charsheet input.sheet-tab1:checked ~ div.sheet-section-character-page,
.charsheet input.sheet-tab2:checked ~ div.sheet-section-monster-page,
.charsheet input.sheet-tab3:checked ~ div.sheet-section-character-info,
.charsheet input.sheet-tab4:checked ~ div.sheet-section-attributes,
.charsheet input.sheet-tab5:checked ~ div.sheet-section-weapons,
.charsheet input.sheet-tab6:checked ~ div.sheet-section-rogue,
.charsheet input.sheet-tab7:checked ~ div.sheet-section-proficiencies,
.charsheet input.sheet-tab8:checked ~ div.sheet-section-spells,
.charsheet input.sheet-tab9:checked ~ div.sheet-section-psionics,
.charsheet input.sheet-tab10:checked ~ div.sheet-section-equipment,
.charsheet input.sheet-tab11:checked ~ div.sheet-section-currency,
.charsheet input.sheet-tab12:checked ~ div.sheet-section-followers,
.charsheet input.sheet-tab13:checked ~ div.sheet-section-standard-saves,
.charsheet input.sheet-tab14:checked ~ div.sheet-section-ravenloft-saves,
.charsheet input.sheet-tab15:checked ~ div.sheet-section-movement-standard,
.charsheet input.sheet-tab16:checked ~ div.sheet-section-movement-advanced,
.charsheet input.sheet-tab17:checked ~ div.sheet-section-attributes-standard,
.charsheet input.sheet-tab18:checked ~ div.sheet-section-attributes-player-option,
.charsheet input.sheet-tab19:checked ~ div.sheet-section-wizard-spells,
.charsheet input.sheet-tab20:checked ~ div.sheet-section-priest-spells,
.charsheet input.sheet-tab21:checked ~ div.sheet-section-wizard-level-one,
.charsheet input.sheet-tab22:checked ~ div.sheet-section-wizard-level-two,
.charsheet input.sheet-tab23:checked ~ div.sheet-section-wizard-level-three,
.charsheet input.sheet-tab24:checked ~ div.sheet-section-wizard-level-four,
.charsheet input.sheet-tab25:checked ~ div.sheet-section-wizard-level-five,
.charsheet input.sheet-tab26:checked ~ div.sheet-section-wizard-level-six,
.charsheet input.sheet-tab27:checked ~ div.sheet-section-wizard-level-seven,
.charsheet input.sheet-tab28:checked ~ div.sheet-section-wizard-level-eight,
.charsheet input.sheet-tab29:checked ~ div.sheet-section-wizard-level-nine,
.charsheet input.sheet-tab30:checked ~ div.sheet-section-wizard-level-ten,
.charsheet input.sheet-tab31:checked ~ div.sheet-section-priest-level-one,
.charsheet input.sheet-tab32:checked ~ div.sheet-section-priest-level-two,
.charsheet input.sheet-tab33:checked ~ div.sheet-section-priest-level-three,
.charsheet input.sheet-tab34:checked ~ div.sheet-section-priest-level-four,
.charsheet input.sheet-tab35:checked ~ div.sheet-section-priest-level-five,
.charsheet input.sheet-tab36:checked ~ div.sheet-section-priest-level-six,
.charsheet input.sheet-tab37:checked ~ div.sheet-section-priest-level-seven,
.charsheet input.sheet-tab38:checked ~ div.sheet-section-priest-quest,
.charsheet input.sheet-tab39:checked ~ div.sheet-section-rogue-standard,
.charsheet input.sheet-tab40:checked ~ div.sheet-section-psionic-standard,
.charsheet input.sheet-tab41:checked ~ div.sheet-section-psionic-advanced,
.charsheet input.sheet-tab42:checked ~ div.sheet-section-currency-standard,
.charsheet input.sheet-tab43:checked ~ div.sheet-section-currency-dragonlance,
.charsheet input.sheet-tab44:checked ~ div.sheet-section-currency-dark-sun,
.charsheet input.sheet-tab45:checked ~ div.sheet-section-currency-ravenloft,
.charsheet input.sheet-tab46:checked ~ div.sheet-section-follower-warrior,
.charsheet input.sheet-tab47:checked ~ div.sheet-section-follower-wizard,
.charsheet input.sheet-tab48:checked ~ div.sheet-section-follower-priest,
.charsheet input.sheet-tab49:checked ~ div.sheet-section-follower-rogue,
.charsheet input.sheet-tab50:checked ~ div.sheet-section-follower-psion,
.charsheet input.sheet-tab51:checked ~ div.sheet-section-follower-animals,
.charsheet input.sheet-tab52:checked ~ div.sheet-section-priest-turn,
.charsheet input.sheet-tab53:checked ~ div.sheet-section-journal,
.charsheet input.sheet-tab54:checked ~ div.sheet-section-wizard-level-eleven,
.charsheet input.sheet-tab55:checked ~ div.sheet-section-wizard-level-twelve,
.charsheet input.sheet-tab56:checked ~ div.sheet-section-wizard-level-thirteen,
.charsheet input.sheet-tab57:checked ~ div.sheet-section-wizard-level-fourteen,
.charsheet input.sheet-tab58:checked ~ div.sheet-section-wizard-level-fifteen,
.charsheet input.sheet-tab59:checked ~ div.sheet-section-currency-maztica,
.charsheet input.sheet-tab60:checked ~ div.sheet-section-rogue-spds,
.charsheet input.sheet-tab61:checked ~ div.sheet-section-rogue-standard-hench,
.charsheet input.sheet-tab62:checked ~ div.sheet-section-rogue-spds-hench,
.charsheet input.sheet-tab63:checked ~ div.sheet-section-rogue-standard-repeat,
.charsheet input.sheet-tab64:checked ~ div.sheet-section-rogue-spds-repeat,
.charsheet input.sheet-tab65:checked ~ div.sheet-section-psionics-standard-hench,
.charsheet input.sheet-tab66:checked ~ div.sheet-section-psionics-advanced-hench,
.charsheet input.sheet-tab67:checked ~ div.sheet-section-psionics-standard-repeat,
.charsheet input.sheet-tab68:checked ~ div.sheet-section-psionics-advanced-repeat,
.charsheet input.sheet-tab69:checked ~ div.sheet-section-granted-powers,
.charsheet input.sheet-tab70:checked ~ div.sheet-section-weapon-standard-melee,
.charsheet input.sheet-tab71:checked ~ div.sheet-section-weapon-standard-ranged,
.charsheet input.sheet-tab72:checked ~ div.sheet-section-movement-mount,
.charsheet input.sheet-tab73:checked ~ div.sheet-section-character-info-details,
.charsheet input.sheet-tab74:checked ~ div.sheet-section-character-info-tracker,
.charsheet input.sheet-tab75:checked ~ div.sheet-section-currency-birthright,
.charsheet input.sheet-tab76:checked ~ div.sheet-section-birthright,
.charsheet input.sheet-tab77:checked ~ div.sheet-section-movement-barbarian,
.charsheet input.sheet-tab78:checked ~ div.sheet-section-attributes-dream,
.charsheet input.sheet-tab79:checked ~ div.sheet-section-movement-swimming,
.charsheet input.sheet-tab80:checked ~ div.sheet-section-movement-flying,
.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-tab85:checked ~ div.sheet-section-settings-page {
display: block;
}
.charsheet input.sheet-tab99:checked ~ div[class^="sheet-section"] {
display: block;
}
.charsheet input.sheet-tab {
width: 120px;
height: inherit;
cursor: pointer;
cursor: pointer;
position: relative;
opacity: 0;
z-index: 9999;
@@ -423,16 +396,16 @@ div[class^="sheet-section"] {
.charsheet span.sheet-tab {
text-align: center;
display: inline-block;
font-size: 14px;
background: #800a0a;
display: inline-block;
font-size: 14px;
background: #800a0a;
color: white;
font-weight: bold;
border-radius: 4px;
width: 120px;
height: inherit;
cursor: pointer;
cursor: pointer;
position: relative;
}
@@ -549,7 +522,6 @@ div[class^="sheet-section"] {
cursor: pointer;
z-index: 1;
}
input.sheet-tab + span::before,
input.sheet-tab + span::before
{
margin-right: 4px;
@@ -580,11 +552,6 @@ input.sheet-tab + span::before
padding: 0 0 0 0;
}
/* Dark Mode override */
.sheet-darkmode .charsheet label {
color: #333;
}
.charsheet h1,
.charsheet h2,
.charsheet h3,
@@ -594,285 +561,11 @@ input.sheet-tab + span::before
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;*/
/*}*/
.sheet-small-label1 {
display: inline-block;
padding: .5em .07em 0 .07em;
margin: .75rem .4em 1.125rem .4em;
height: 1.85em;
width: 72px;
vertical-align: middle;
text-align:center;
font-size: .85em;
font-style: italic;
font-weight: bold;
/*firefox has to be squeezed */
-moz-margin-start:-2px;
-moz-margin-end:-2px;
}
.sheet-small-label1 span {
padding: .5em .07em 0 .07em;
text-align:center;
font-size: .85em;
font-style: italic;
font-weight: bold;
float:left; /* floats but 100% wide. */
/*firefox has to be squeezed */
-moz-margin-start:-2px;
-moz-margin-end:-2px;
}
.sheet-small-label1 input::-moz-focus-inner {
padding: 0;
}
.sheet-small-label1 select {
margin-top:-2px;
width: 72px;
border: .5px;
}
.sheet-small-label2 {
display: inline-block;
padding: .5em .07em 0 .07em;
margin: .75rem .4em 1.125rem .4em;
height: 1.85em;
width: 63px;
vertical-align: middle;
text-align:center;
font-size: .85em;
font-style: italic;
font-weight: bold;
/*firefox has to be squeezed */
-moz-margin-start:-2px;
-moz-margin-end:-2px;
}
.sheet-small-label2 span {
padding: .5em .07em 0 .07em;
text-align:center;
font-size: .85em;
font-style: italic;
font-weight: bold;
float:left; /* floats but 100% wide. */
/*firefox has to be squeezed */
-moz-margin-start:-2px;
-moz-margin-end:-2px;
}
.sheet-small-label2 input::-moz-focus-inner {
padding: 0;
}
.sheet-small-label2 select {
margin-top:-2px;
width: 63px;
border: .5px;
}
.sheet-small-label3 {
display: inline-block;
padding: .5em .07em 0 .07em;
margin: .75rem .4em 1.125rem .4em;
height: 1.85em;
width: 85px;
vertical-align: middle;
text-align:center;
font-size: .85em;
font-style: italic;
font-weight: bold;
/*firefox has to be squeezed */
-moz-margin-start:-2px;
-moz-margin-end:-2px;
}
.sheet-small-label3 span {
padding: .5em .07em 0 .07em;
text-align:center;
font-size: .85em;
font-style: italic;
font-weight: bold;
float:left; /* floats but 100% wide. */
/*firefox has to be squeezed */
-moz-margin-start:-2px;
-moz-margin-end:-2px;
}
.sheet-small-label3 input::-moz-focus-inner {
padding: 0;
}
.sheet-small-label3 select {
margin-top:-2px;
width: 85px;
border: .5px;
}
.sheet-small-label4 {
display: inline-block;
padding: .5em .07em 0 .07em;
margin: .75rem .4em 1.125rem .4em;
height: 1.85em;
width: 67px;
vertical-align: middle;
text-align:center;
font-size: .85em;
font-style: italic;
font-weight: bold;
/*firefox has to be squeezed */
-moz-margin-start:-2px;
-moz-margin-end:-2px;
}
.sheet-small-label4 span {
padding: .5em .07em 0 .07em;
text-align:center;
font-size: .85em;
font-style: italic;
font-weight: bold;
float:left; /* floats but 100% wide. */
/*firefox has to be squeezed */
-moz-margin-start:-2px;
-moz-margin-end:-2px;
}
.sheet-small-label4 input::-moz-focus-inner {
padding: 0;
}
.sheet-small-label4 select {
margin-top:-2px;
width: 67px;
border: .5px;
}
.sheet-small-label5 {
display: inline-block;
padding: .5em .07em 0 .07em;
margin: .75rem .4em 1.125rem .4em;
height: 1.85em;
width: 105px;
vertical-align: middle;
text-align:center;
font-size: .85em;
font-style: italic;
font-weight: bold;
/*firefox has to be squeezed */
-moz-margin-start:-2px;
-moz-margin-end:-2px;
}
.sheet-small-label5 span {
padding: .5em .07em 0 .07em;
text-align:center;
font-size: .85em;
font-style: italic;
font-weight: bold;
float:left; /* floats but 100% wide. */
/*firefox has to be squeezed */
-moz-margin-start:-2px;
-moz-margin-end:-2px;
}
.sheet-small-label5 input::-moz-focus-inner {
padding: 0;
}
.sheet-small-label5 select {
margin-top:-2px;
width: 105px;
border: .5px;
}
.sheet-small-label6 {
display: inline-block;
padding: .5em .07em 0 .07em;
margin: .75rem .4em 1.125rem .4em;
height: 1.85em;
width: 75px;
vertical-align: middle;
text-align:center;
font-size: .85em;
font-style: italic;
font-weight: bold;
/*firefox has to be squeezed */
-moz-margin-start:-2px;
-moz-margin-end:-2px;
}
.sheet-small-label6 span {
padding: .5em .07em 0 .07em;
text-align:center;
font-size: .85em;
font-style: italic;
font-weight: bold;
float:left; /* floats but 100% wide. */
/*firefox has to be squeezed */
-moz-margin-start:-2px;
-moz-margin-end:-2px;
}
.sheet-small-label6 input::-moz-focus-inner {
padding: 0;
}
.sheet-small-label6 select {
margin-top:-2px;
width: 75px;
border: .5px;
}
.sheet-small-label7 {
display: inline-block;
padding: .5em .07em 0 .07em;
margin: .75rem .4em 1.125rem .4em;
height: 1.85em;
width: 125px;
vertical-align: middle;
text-align:center;
font-size: .85em;
font-style: italic;
font-weight: bold;
/*firefox has to be squeezed */
-moz-margin-start:-2px;
-moz-margin-end:-2px;
}
.sheet-small-label7 span {
padding: .5em .07em 0 .07em;
text-align:center;
font-size: .85em;
font-style: italic;
font-weight: bold;
float:left; /* floats but 100% wide. */
/*firefox has to be squeezed */
-moz-margin-start:-2px;
-moz-margin-end:-2px;
}
.sheet-small-label7 input::-moz-focus-inner {
padding: 0;
}
.sheet-small-label7 select {
margin-top:-2px;
width: 125px;
border: .5px;
}
button {
background-color: #7C0303;
}
.charsheet,
.charsheet button:hover {
background-image: url("https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/ADnD_2E_Revised/img/background-parchment_paper_seamless_pattern.jpg");
}
insert_rolltemplates.css
.sheet-inline,
.sheet-inline-5 {
display: inline-block;
@@ -890,7 +583,9 @@ table.sheet-default-header-every-third-row tr:nth-child(3n+1),
table.sheet-default-header-first-column td:first-child,
table.sheet-default-header-first-column th:first-child,
table.sheet-default-header-even-column td:nth-child(even),
table.sheet-default-header-even-column th:nth-child(even),
table.sheet-default-header-odd-column td:nth-child(odd),
table.sheet-default-header-odd-column th:nth-child(odd),
table.sheet-default-header-every-third-column td:nth-child(3n+1),
.sheet-default-header {
background-color: #7C0303;
@@ -965,6 +660,22 @@ table.sheet-padding-right-column2 td:nth-child(2) {
padding-right: 5px;
}
.sheet-table-nowrap th,
.sheet-table-nowrap td,
.sheet-table-nowrap-column1 th:nth-child(1),
.sheet-table-nowrap-column1 td:nth-child(1),
.sheet-table-nowrap-column2 th:nth-child(2),
.sheet-table-nowrap-column2 td:nth-child(2) {
white-space: nowrap;
}
.sheet-table-full-width-column1 th:nth-child(1),
.sheet-table-full-width-column1 td:nth-child(1),
.sheet-table-full-width-column2 th:nth-child(2),
.sheet-table-full-width-column2 td:nth-child(2) {
width: 100%;
}
.sheet-table-white {
color: #FFF;
font-family: Arial, sans-serif;
@@ -999,10 +710,26 @@ table.sheet-padding-right-column2 td:nth-child(2) {
flex-direction: column;
}
.sheet-flex-wrap .repcontainer {
.sheet-spell-line {
display: flex;
flex-wrap: wrap;
justify-content: space-around;
align-items: flex-end;
justify-content: space-between;
column-gap: 5px;
}
.sheet-spell-fold {
display: flex;
justify-content: space-between;
column-gap: 10px;
padding-top: 5px;
padding-bottom: 5px;
padding-left: 15px;
}
.charsheet .sheet-spell-effect {
height: unset;
resize: vertical;
margin-bottom: 0;
}
.charsheet label input[type="radio"],
@@ -1027,6 +754,7 @@ th {
padding-left: inherit;
}
/* Show hide styling */
.sheet-collapse {
visibility: collapse;
}
@@ -1034,20 +762,22 @@ th {
.sheet-hidden {
display: none;
}
.sheet-hidden.sheet-show {
.sheet-hidden.sheet-show,
input.sheet-show-worn-equipment:checked ~ .sheet-hidden,
input.sheet-show-spell-slots:checked ~ .sheet-tab-content .sheet-spell-slots.sheet-hidden,
input.sheet-show-spell-points:checked ~ .sheet-tab-content .sheet-spell-points.sheet-hidden,
input.sheet-show-spell-arcs-winds:checked ~ .sheet-tab-content .sheet-spell-arcs-winds.sheet-hidden,
input.sheet-show-spell-spheres-pri:checked ~ .sheet-spell-sphere-pri.sheet-hidden {
display: revert;
}
.btn.sheet-hidden {
padding-top: 2px;
padding-left: 8px;
padding-right: 8px;
}
div.repcontainer:not(.editmode) div.repitem td button[type="action"],
div.repcontainer:not(.editmode) div.repitem th button[type="action"] {
position: relative;
}
div.repcontainer div.repitem:first-child td.sheet-show-first,
div.repcontainer div.repitem:first-child tr.sheet-show-first,
div.repcontainer div.repitem:first-child th.sheet-show-first,
@@ -1055,66 +785,6 @@ div.repcontainer div.repitem:first-child thead.sheet-show-first {
visibility: visible;
}
.sheet-show-spell-hack {
position: relative;
top: -11px;
}
.sheet-spell-effect {
width: 100%;
position: relative;
top: -5px;
}
input.sheet-show-spell-details:checked ~ .sheet-spell-effect {
top: 0;
}
table.sheet-spell-details {
visibility: collapse;
}
input.sheet-show-spell-details:checked ~ table.sheet-spell-details {
visibility: visible;
margin-top: -5px;
}
div.sheet-spell-details {
display: none;
}
input.sheet-show-spell-details:checked ~ div.sheet-spell-details {
display: flex;
}
.sheet-underline {
text-decoration: underline;
font-weight: bolder;
}
/* Overwrite Roll20 base styling */
details > summary:first-of-type {
display: list-item;
}
/* Show hide styling */
.sheet-worn-equipment,
.sheet-spell-points-wiz,
.sheet-spell-points-pri,
.sheet-spell-sphere-pri,
.sheet-announcement,
.sheet-toast {
display: none;
}
input.sheet-show-worn-equipment:checked ~ .sheet-worn-equipment,
input.sheet-show-spell-points-wiz:checked ~ .sheet-spell-points-wiz,
input.sheet-show-spell-points-pri:checked ~ .sheet-spell-points-pri,
input.sheet-show-spell-spheres-pri:checked ~ .sheet-spell-sphere-pri,
input.sheet-show-announcement:checked ~ .sheet-announcement,
input.sheet-show-toast:checked ~ .sheet-toast
{
display: block;
}
.sheet-action-button,
.sheet-action-button-roll {
height: 19px;
@@ -1128,49 +798,8 @@ input.sheet-show-toast:checked ~ .sheet-toast
content: "t";
}
/* Announcement styling start */
div.sheet-announcement {
width: 95%;
margin: 5px;
border: 3px solid #ff0000;
border-radius: 8px;
padding: 8px;
background: #ababab;
box-sizing: border-box;
}
.sheet-selectable {
font-style: italic;
font-weight: bold;
color: #181E72;
-webkit-user-select: all; /* Chrome all / Safari all */
-moz-user-select: all; /* Firefox all */
-ms-user-select: all; /* IE 10+ */
user-select: all; /* Likely future */
}
img.expandable {
transition:transform 0.25s ease;
}
img.expandable:hover {
-webkit-transform:scale(3); /* or some other value */
transform:scale(3);
}
/* Announcement styling end */
/* Firefox styling */
@supports (-moz-appearance:none) {
.charsheet .sheet-chrome {
display: none;
}
}
/* Not Firefox styling */
@supports not (-moz-appearance:none) {
.charsheet .sheet-firefox {
display: none;
}
}
insert_announcements.css
insert_toast.css
insert_browser-support.css
insert_rolltemplates.css
insert_roll20-overrides.css
+34
View File
@@ -0,0 +1,34 @@
/*#region Announcement styling start */
input.sheet-show-announcement:checked ~ .sheet-hidden {
display: revert;
}
div.sheet-announcement {
width: 95%;
margin: 5px;
border: 3px solid #ff0000;
border-radius: 8px;
padding: 8px;
background: #ababab;
box-sizing: border-box;
}
.sheet-selectable {
font-style: italic;
font-weight: bold;
color: #181E72;
-webkit-user-select: all; /* Chrome all / Safari all */
-moz-user-select: all; /* Firefox all */
-ms-user-select: all; /* IE 10+ */
user-select: all; /* Likely future */
}
img.expandable {
transition:transform 0.25s ease;
}
img.expandable:hover {
-webkit-transform:scale(3); /* or some other value */
transform:scale(3);
}
/*#endregion Announcement styling end */
+21
View File
@@ -0,0 +1,21 @@
/* Firefox styling */
@supports (-moz-appearance:none) {
.charsheet .sheet-chrome {
display: none;
}
input[type="number"] {
-moz-appearance: textfield;
}
input[type="number"]:hover,
input[type="number"]:focus {
-moz-appearance: revert;
}
}
/* Not Firefox styling */
@supports not (-moz-appearance:none) {
.charsheet .sheet-firefox {
display: none;
}
}
+23
View File
@@ -0,0 +1,23 @@
/* Overwrite Roll20 base styling */
details > summary:first-of-type {
display: list-item;
}
/* Fix action buttons in repeating tables */
div.repcontainer:not(.editmode) div.repitem td button[type="action"],
div.repcontainer:not(.editmode) div.repitem th button[type="action"] {
position: relative;
}
/* Dark Mode override */
.sheet-darkmode .charsheet label {
color: #333;
}
/* Fix background color so active fields can be differentiated from read-only and disabled fields */
input,
button,
select,
textarea {
background-color: white;
}
+3
View File
@@ -1,4 +1,7 @@
/*#region Toast styling*/
input.sheet-show-toast:checked + .sheet-hidden {
display: revert;
}
.sheet-toast {
position: fixed;
right: 30px;
+2 -18
View File
@@ -1,20 +1,4 @@
Possible NPC sheet
- Follower sheet
- 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
AD&D 2E Book release order
The Complete Fighter's Handbook 1989 December
The Complete Thief's Handbook 1989 December
The Complete Priest's Handbook 1990 May
@@ -271,4 +255,4 @@ http://www.wizards.com/dnd/DnDDMGErrata.asp
http://www.wizards.com/dnd/DnDPlayersOptionSkillsPowersErrata.asp
http://www.wizards.com/dnd/DnDPlayersOptionSkillsPowers2ndErrata.asp
http://www.wizards.com/dnd/DnDPlayersOptionSkillsPowers3rdErrata.asp
http://www.wizards.com/dnd/DnDPlayersOptionCombatTacticsErrata.asp
http://www.wizards.com/dnd/DnDPlayersOptionCombatTacticsErrata.asp
+6 -1
View File
@@ -12,9 +12,14 @@ insert_changelog.html
<br>
<br>
<!--Placed here so styling can affect both character and monster sheet-->
<input type="radio" name="attr_spell-tracking-system" class="sheet-show-spell-slots" value="spell-slots" checked/>
<input type="radio" name="attr_spell-tracking-system" class="sheet-show-spell-points" value="spell-points"/>
<input type="radio" name="attr_spell-tracking-system" class="sheet-show-spell-arcs-winds" value="spell-arcs-winds"/>
insert_character-tab.html
insert_monster-tab.html
insert_sheet-settings.html
insert_sheet-settings-tab.html
insert_toast.html
+16 -6
View File
@@ -1,17 +1,27 @@
<div aria-label="Announces changes to sheet">
<input type="checkbox" class="sheet-show-announcement" value="1" title="Show Announcements" name="attr_announcement"/><span></span><b style="color:red;" title="Show Announcements">Announcements</b>
<div class="sheet-announcement">
<div class="sheet-announcement sheet-hidden">
<h2 style="color: black;">Changes in <span name="attr_version"></span></h2>
<div class="sheet-announce-items">
<ul style="font-style:italic">
<li>Fixed autofill for simple magic weapons where the bonus is inserted in a spot without a whitespace. Here are some examples that have been fixed:
<li>Completely redesigned the new spell section, so each spell can be on a single line, showing Name, Range, and Area of Effect
<ul>
<li>"Short bow, Flight Arrow" -> "Short bow +1, Flight Arrow"</li>
<li>"Bastard sword, One-handed" -> "Bastard sword +2, One-handed"</li>
<li>"Katana, One-handed (samurai long sword)" -> "Katana +1, One-handed (samurai long sword)"</li>
<li>"Sling, Bullet" -> "Sling +1, Bullet"</li>
<li>Single line spells can be folded out to show additional information of the spells</li>
<li>Removed the "Roll Spell Effect" button as it caused more confusion than it helped</li>
</ul>
</li>
<li>Added Spell tracking selection to the Sheet Settings Tab. Choices are: Spell Slots, Spell Points, Arcs / Winds</li>
<li>Redesigned the Spells tab to only show the spell tracking system that selected on the Sheet Settings Tab</li>
<li>High Wisdom now triggers a popup asking if you are a priest. Bonus spells are only added if you are a priest</li>
<li>High Wisdom now autofill bonus Winds for Priests for the Arcs/Winds spell tracking system, based on the same popup as stated above. If the PO: S&P sub ability scores are used, base Wisdom is still used for determining bonus winds</li>
<li>Added support for automatic Spell Points for Wizards with high Intelligence. This is a toggle as the bonus is optional.</li>
<li>Added support for automatic Spell Points for Priests with high Wisdom. This is a toggle as only priests gets this bonus, and not Paladins and Rangers. The Priest caster level is used to determine how many spell points should be given</li>
<li>Fixed bonus spells from high Intuition from PO: Skills & Powers. Willpower was incorrectly used</li>
<li>Regeneration from high Constitution now clarifies that it is per turn(s)</li>
<li>Only show up and down arrows on numeric input fields in Firefox on hover or focus</li>
<li>Styled Monster tab to have dynamically sized fields, and larger fields for Hit Dice, HP, and Max HP</li>
<li>Updated saving throws to tell how much the check was made or missed by</li>
<li>2Espell - Sensory signature and Knockdown switched places to make them appear in the same order as in the PO: Spells & Magic book</li>
</ul>
<hr>
<p>
@@ -0,0 +1 @@
<td><button type="action" name="act_show" class="btn sheet-hidden sheet-fold sheet-show">▼</button><button type="action" name="act_hide" class="btn sheet-hidden sheet-fold">▲</button></td>
@@ -138,49 +138,49 @@
<td class="sheet-spell-c1" colspan="3"><span class="sheet-spell-prop">Saving Throw</span><br>{{save}}</td>
</tr>
{{#subtlety}}
{{#sensory}}
{{#knockdown}}
<tr>
<td class="sheet-spell-c1" colspan="3"><span class="sheet-spell-prop">Casting Subtlety</span><br>{{subtlety}}</td>
<td class="sheet-spell-c1" colspan="3"><span class="sheet-spell-prop">Sensory Signature</span><br>{{sensory}}</td>
<td class="sheet-spell-c1" colspan="3"><span class="sheet-spell-prop">Knockdown</span><br>{{knockdown}}</td>
</tr>
{{/sensory}}
{{/knockdown}}
{{/subtlety}}
{{#subtlety}}
{{^sensory}}
{{^knockdown}}
<tr>
<td class="sheet-spell-c1" colspan="6"><span class="sheet-spell-prop">Casting Subtlety</span><br>{{subtlety}}</td>
</tr>
{{/sensory}}
{{/knockdown}}
{{/subtlety}}
{{^subtlety}}
{{#sensory}}
<tr>
<td class="sheet-spell-c1" colspan="6"><span class="sheet-spell-prop">Sensory Signature</span><br>{{sensory}}</td>
</tr>
{{/sensory}}
{{/subtlety}}
{{#knockdown}}
{{#crit}}
<tr>
<td class="sheet-spell-c1" colspan="3"><span class="sheet-spell-prop">Knockdown</span><br>{{knockdown}}</td>
<td class="sheet-spell-c1" colspan="3"><span class="sheet-spell-prop">Critical Strikes</span><br>{{crit}}</td>
</tr>
{{/crit}}
{{/knockdown}}
{{#knockdown}}
{{^crit}}
<tr>
<td class="sheet-spell-c1" colspan="6"><span class="sheet-spell-prop">Knockdown</span><br>{{knockdown}}</td>
</tr>
{{/crit}}
{{/knockdown}}
{{^knockdown}}
{{/subtlety}}
{{#sensory}}
{{#crit}}
<tr>
<td class="sheet-spell-c1" colspan="3"><span class="sheet-spell-prop">Sensory Signature</span><br>{{sensory}}</td>
<td class="sheet-spell-c1" colspan="3"><span class="sheet-spell-prop">Critical Strikes</span><br>{{crit}}</td>
</tr>
{{/crit}}
{{/sensory}}
{{#sensory}}
{{^crit}}
<tr>
<td class="sheet-spell-c1" colspan="6"><span class="sheet-spell-prop">Sensory Signature</span><br>{{sensory}}</td>
</tr>
{{/crit}}
{{/sensory}}
{{^sensory}}
{{#crit}}
<tr>
<td class="sheet-spell-c1" colspan="6"><span class="sheet-spell-prop">Critical Strikes</span><br>{{crit}}</td>
</tr>
{{/crit}}
{{/knockdown}}
{{/sensory}}
{{#damage}}
<tr>
<td colspan="6" class="sheet-spell-c1"><span class="sheet-spell-prop">Damage: </span>
@@ -1,92 +1,161 @@
<div class="sheet-flex-wrap">
<fieldset name="repeating_spells-#REPLACE0#" class="repeating_spells-#REPLACE0#">
<div>
<table>
<tr>
<td class="sheet-default-header">Spell name:</td>
<td>
<input type="text" name="attr_spell-name" title="@{repeating_spells-#REPLACE0#_$X_spell-name}" class="sheet-spell-big sheet-chrome" placeholder="Spell name" list="#REPLACE0#-spells">
<input type="text" name="attr_spell-name" title="@{repeating_spells-#REPLACE0#_$X_spell-name}" class="sheet-spell-big sheet-firefox" placeholder="Spell name" list="#REPLACE0#-spells-ff">
</td>
<td class="sheet-default-header">Casting time:</td>
<td><input type="text" name="attr_spell-cast-time" title="@{repeating_spells-#REPLACE0#_$X_spell-cast-time}" class="sheet-short" placeholder="Cast time"></td>
<td><button type="roll" name="roll_spell-init" title="@{repeating_spells-#REPLACE0#_$X_spell-init}" value="/gmroll [[{([[1d10]]+@{spell-cast-time}-(@{misc-mod})), 1}kh1]] [Initiative (@{spell-name})]&{tracker}">Initiative</button></td>
</tr>
</table>
<table class="sheet-default-header-first-column sheet-inline-5">
<tr>
<td>Cast / Memorized:</td>
<td><input type="number" name="attr_spell-cast-value" title="@{repeating_spells-#REPLACE0#_$X_spell-cast-value}" value="0" class="sheet-short"><b> / </b><input type="number" name="attr_spell-memorized" title="@{repeating_spells-#REPLACE0#_$X_spell-memorized}" value="0" class="sheet-short"></td>
</tr>
</table>
<table class="sheet-default-header-first-column sheet-inline-5">
<tr>
<td>Spell Points / Wind Used:</td>
<td><input type="number" name="attr_spell-points" title="@{repeating_spells-#REPLACE0#_$X_spell-points}" class="sheet-short" value="0"><b> / </b><input type="number" name="attr_spell-wind" title="@{repeating_spells-#REPLACE0#_$X_spell-wind}" class="sheet-short" value="0"></td>
</tr>
</table>
<input type="checkbox" class="sheet-show-spell-details sheet-show-spell-hack" title="Show spell details"/><span class="sheet-show-spell-hack"></span><label class="sheet-show-spell-hack">Show spell details</label>
<table class="sheet-default-header-odd-column sheet-spell-details">
<tr>
<td>Sphere:</td>
<td>
<input type="text" name="attr_spell-sphere" title="@{repeating_spells-#REPLACE0#_$X_spell-sphere}" class="sheet-spell-half" placeholder="Sphere">
<input style="display:none;" type="text" name="attr_spell-level" title="@{repeating_spells-#REPLACE0#_$X_spell-level}" class="sheet-spell-half" placeholder="Spell level">
</td>
<td>School:</td>
<td><input type="text" name="attr_spell-school" title="@{repeating_spells-#REPLACE0#_$X_spell-school}" class="sheet-spell-half" placeholder="School"></td>
<td>Components:</td>
<td><input type="text" name="attr_spell-components" title="@{repeating_spells-#REPLACE0#_$X_spell-components}" class="sheet-spell-half" placeholder="Components"></td>
</tr>
<tr>
<td>Range:</td>
<td><input type="text" name="attr_spell-range" title="@{repeating_spells-#REPLACE0#_$X_spell-range}" class="sheet-spell-half" placeholder="Range"></td>
<td>Area of Effect:</td>
<td><input type="text" name="attr_spell-aoe" title="@{repeating_spells-#REPLACE0#_$X_spell-aoe}" class="sheet-spell-half" placeholder="Area of Effect"></td>
<td>Duration:</td>
<td><input type="text" name="attr_spell-duration" title="@{repeating_spells-#REPLACE0#_$X_spell-duration}" class="sheet-spell-half" placeholder="Duration"></td>
</tr>
<tr>
<td>Damage:</td>
<td><textarea type="text" name="attr_spell-damage" title="@{repeating_spells-#REPLACE0#_$X_spell-damage}" class="sheet-spell-half sheet-input-like" placeholder="[[Damage]]"></textarea></td>
<td>Damage type:</td>
<td><input type="text" name="attr_spell-damage-type" title="@{repeating_spells-#REPLACE0#_$X_spell-damage-type}" class="sheet-spell-half" placeholder="Damage type" list="spell-damage-type"></td>
<td>Saving throw:</td>
<td><input type="text" name="attr_spell-saving-throw" title="@{repeating_spells-#REPLACE0#_$X_spell-saving-throw}" class="sheet-spell-half" placeholder="Saving Throw"></td>
</tr>
<tr>
<td>Healing:</td>
<td><textarea type="text" name="attr_spell-healing" title="@{repeating_spells-#REPLACE0#_$X_spell-healing}" class="sheet-spell-half sheet-input-like" placeholder="[[Healing]]"></textarea></td>
<td>Materials:</td>
<td><textarea type="text" name="attr_spell-materials" title="@{repeating_spells-#REPLACE0#_$X_spell-materials}" class="sheet-spell-half sheet-input-like" placeholder="Materials"></textarea></td>
<td>Book reference:</td>
<td><input type="text" name="attr_spell-reference" title="@{repeating_spells-#REPLACE0#_$X_spell-reference}" class="sheet-spell-half" placeholder="Book Reference"></td>
</tr>
<tr>
<td>Subtlety:</td>
<td><input type="text" name="attr_spell-subtlety" title="@{repeating_spells-#REPLACE0#_$X_spell-subtlety}" class="sheet-spell-half" placeholder="Subtlety"></td>
<td>Sensory:</td>
<td><input type="text" name="attr_spell-sensory" title="@{repeating_spells-#REPLACE0#_$X_spell-sensory}" class="sheet-spell-half" placeholder="Sensory"></td>
<td>Knockdown:</td>
<td><input type="text" name="attr_spell-knockdown" title="@{repeating_spells-#REPLACE0#_$X_spell-knockdown}" class="sheet-spell-half" placeholder="[[d6]]"></td>
</tr>
<tr>
<td>Critical:</td>
<td><input type="text" name="attr_spell-crit-size" title="@{repeating_spells-#REPLACE0#_$X_spell-crit-size}" class="sheet-spell-half" placeholder="Large (1d3 hits)" list="spell-crit-size"></td>
<td colspan="2" style="background: transparent"><button type="action" name="act_spell-crit2" class="btn sheet-action-button" title="%{repeating_spells-#REPLACE0#_$X_spell-crit2}">Critical Effect</button></td>
</tr>
</table>
<table class="sheet-spell-effect">
<tr>
<td style="width: 100%"><textarea name="attr_spell-effect" title="@{repeating_spells-#REPLACE0#_$X_spell-effect}" placeholder="Insert Spell effects." style="margin: 0; height: 60px"></textarea></td>
<td>
<button type="roll" name="roll_spell-cast" title="%{repeating_spells-#REPLACE0#_$X_spell-cast}" value="#REPLACE1#@{spell-effect}" style="margin-bottom: 5px">Roll Spell Effects</button>
<br>
<button type="roll" name="roll_spell-template" title="%{repeating_spells-#REPLACE0#_$X_spell-template}" value="#REPLACE1#&{template:2Espell}{{title=@{spell-name}}}{{splevel=@{spell-level}}}{{school=@{spell-school}}}{{sphere=@{spell-sphere}}}{{components=@{spell-components}}}{{time=@{spell-cast-time}}}{{range=@{spell-range}}}{{duration=@{spell-duration}}}{{aoe=@{spell-aoe}}}{{save=@{spell-saving-throw}}}{{subtlety=@{spell-subtlety}}}{{sensory=@{spell-sensory}}}{{knockdown=@{spell-knockdown}}}{{crit=@{spell-crit-size}}}{{damage=@{spell-damage}}}{{damagetype=@{spell-damage-type}}}{{healing=@{spell-healing}}}{{reference=@{spell-reference}}}{{materials=@{spell-materials}}}{{checkroll=[[1d100]]%}}{{checktarget=#REPLACE2#}}{{fail=The spell is expended with absolutely no effect whatsoever.}}{{effects=@{spell-effect}}}">Roll Template</button>
</td>
</tr>
</table>
<hr>
</div>
</fieldset>
</div>
<fieldset class="repeating_spells-#REPLACE0#" name="repeating_spells-#REPLACE0#">
<div class="sheet-spell-line">
<table class="sheet-default-header-first-row sheet-inline" style="flex-grow: 1">
<tr class="sheet-collapse sheet-show-first">
<th>Spell name</th>
<th>Range</th>
<th>Area of Effect</th>
<th colspan="2">Casting time</th>
<th colspan="2">Macro</th>
</tr>
<tr>
<td class="sheet-td-dynamic50">
<input class="sheet-table-dynamic sheet-chrome" type="text" name="attr_spell-name" title="@{repeating_spells-#REPLACE0#_$X_spell-name}" placeholder="Spell name" list="#REPLACE0#-spells"/>
<input class="sheet-table-dynamic sheet-firefox" type="text" name="attr_spell-name" title="@{repeating_spells-#REPLACE0#_$X_spell-name}" placeholder="Spell name" list="#REPLACE0#-spells-ff"/>
</td>
<td class="sheet-td-dynamic25">
<input class="sheet-table-dynamic" type="text" name="attr_spell-range" title="@{repeating_spells-#REPLACE0#_$X_spell-range}" placeholder="Range"/>
</td>
<td class="sheet-td-dynamic25">
<input class="sheet-table-dynamic" type="text" name="attr_spell-aoe" title="@{repeating_spells-#REPLACE0#_$X_spell-aoe}" placeholder="Area of Effect"/>
</td>
<td>
<input class="sheet-short" type="text" name="attr_spell-cast-time" title="@{repeating_spells-#REPLACE0#_$X_spell-cast-time}" placeholder="Cast time"/>
</td>
<td>
<button type="roll" name="roll_spell-init" title="@{repeating_spells-#REPLACE0#_$X_spell-init}" value="/gmroll [[{[[1d10]]+(@{spell-cast-time})-(@{misc-mod}), 1}kh1]] [Initiative (@{spell-name})]&{tracker}">Initiative</button>
</td>
<td>
<button type="roll" name="roll_spell-template" title="%{repeating_spells-#REPLACE0#_$X_spell-template}" value="#REPLACE1#&{template:2Espell}{{title=@{spell-name}}}{{splevel=@{spell-level}}}{{school=@{spell-school}}}{{sphere=@{spell-sphere}}}{{components=@{spell-components}}}{{time=@{spell-cast-time}}}{{range=@{spell-range}}}{{duration=@{spell-duration}}}{{aoe=@{spell-aoe}}}{{save=@{spell-saving-throw}}}{{subtlety=@{spell-subtlety}}}{{sensory=@{spell-sensory}}}{{knockdown=@{spell-knockdown}}}{{crit=@{spell-crit-size}}}{{damage=@{spell-damage}}}{{damagetype=@{spell-damage-type}}}{{healing=@{spell-healing}}}{{reference=@{spell-reference}}}{{materials=@{spell-materials}}}{{checkroll=[[1d100]]%}}{{checktarget=#REPLACE2#}}{{fail=The spell is expended with absolutely no effect whatsoever.}}{{effects=@{spell-effect}}}">T</button>
</td>insert_fold-button.html
</tr>
</table>
<table class="sheet-default-header-first-row sheet-spell-slots sheet-hidden">
<tr class="sheet-collapse sheet-show-first">
<td>Cast</td>
<td></td>
<td>Memorized</td>
</tr>
<tr>
<td>
<input class="sheet-short" type="number" name="attr_spell-cast-value" title="@{repeating_spells-#REPLACE0#_$X_spell-cast-value}" value="0"/>
</td>
<td class="sheet-centering-padding-5">/</td>
<td>
<input class="sheet-table-dynamic" type="number" name="attr_spell-memorized" title="@{repeating_spells-#REPLACE0#_$X_spell-memorized}" value="0"/>
</td>
</tr>
</table>
<table class="sheet-default-header-first-row sheet-spell-points sheet-hidden">
<tr class="sheet-collapse sheet-show-first">
<td>Spell Points Used</td>
</tr>
<tr>
<td>
<input class="sheet-table-dynamic" type="number" name="attr_spell-points" title="@{repeating_spells-#REPLACE0#_$X_spell-points}" value="0"/>
</td>
</tr>
</table>
<table class="sheet-default-header-first-row sheet-spell-arcs-winds sheet-hidden">
<tr class="sheet-collapse sheet-show-first">
<td>Winds Used</td>
</tr>
<tr>
<td>
<input class="sheet-table-dynamic" type="number" name="attr_spell-wind" title="@{repeating_spells-#REPLACE0#_$X_spell-wind}" value="0"/>
</td>
</tr>
</table>
</div>
<div class="sheet-hidden sheet-fold">
<div class="sheet-spell-fold">
<table class="sheet-default-header-odd-column" style="align-self: flex-start">
<tr>
<th>Level:</th>
<td colspan="3">
<input class="sheet-table-dynamic" type="text" name="attr_spell-level" title="@{repeating_spells-#REPLACE0#_$X_spell-level}" placeholder="Spell level"/>
</td>
</tr>
<tr>
<th>School:</th>
<td>
<input class="sheet-spell-half" type="text" name="attr_spell-school" title="@{repeating_spells-#REPLACE0#_$X_spell-school}" placeholder="School"/>
</td>
<th>Sphere:</th>
<td>
<input class="sheet-spell-half" type="text" name="attr_spell-sphere" title="@{repeating_spells-#REPLACE0#_$X_spell-sphere}" placeholder="Sphere"/>
</td>
</tr>
<tr>
<th>Duration:</th>
<td>
<input class="sheet-spell-half" type="text" name="attr_spell-duration" title="@{repeating_spells-#REPLACE0#_$X_spell-duration}" placeholder="Duration"/>
</td>
<th>Components:</th>
<td>
<input class="sheet-spell-half" type="text" name="attr_spell-components" title="@{repeating_spells-#REPLACE0#_$X_spell-components}" placeholder="Components"/>
</td>
</tr>
<tr>
<th>Subtlety:</th>
<td>
<input class="sheet-spell-half" type="text" name="attr_spell-subtlety" title="@{repeating_spells-#REPLACE0#_$X_spell-subtlety}" placeholder="Subtlety"/>
</td>
<th style="white-space: nowrap">Saving Throw:</th>
<td>
<input class="sheet-spell-half" type="text" name="attr_spell-saving-throw" title="@{repeating_spells-#REPLACE0#_$X_spell-saving-throw}" placeholder="Saving Throw"/>
</td>
</tr>
<tr>
<th>Sensory:</th>
<td>
<input class="sheet-spell-half" type="text" name="attr_spell-sensory" title="@{repeating_spells-#REPLACE0#_$X_spell-sensory}" placeholder="Sensory"/>
</td>
<th>Knockdown:</th>
<td>
<input class="sheet-spell-half" type="text" name="attr_spell-knockdown" title="@{repeating_spells-#REPLACE0#_$X_spell-knockdown}" placeholder="[[d6]]"/>
</td>
</tr>
<tr>
<th>Critical:</th>
<td>
<input class="sheet-spell-half" type="text" name="attr_spell-crit-size" title="@{repeating_spells-#REPLACE0#_$X_spell-crit-size}" placeholder="Large (1d3 hits)" list="spell-crit-size"/>
</td>
<td colspan="2" style="background-color: transparent;">
<button class="btn sheet-action-button" type="action" name="act_spell-crit2" title="%{repeating_spells-#REPLACE0#_$X_spell-crit2}">Critical Effect</button>
</td>
</tr>
<tr>
<th>Damage:</th>
<td>
<textarea class="sheet-spell-half sheet-input-like" name="attr_spell-damage" title="@{repeating_spells-#REPLACE0#_$X_spell-damage}" placeholder="[[Damage]]"></textarea>
</td>
<th>Damage Type:</th>
<td>
<input class="sheet-spell-half" type="text" name="attr_spell-damage-type" title="@{repeating_spells-#REPLACE0#_$X_spell-damage-type}" placeholder="Damage type" list="spell-damage-type"/>
</td>
</tr>
<tr>
<th>Healing:</th>
<td colspan="3">
<textarea class="sheet-table-dynamic sheet-input-like" name="attr_spell-healing" title="@{repeating_spells-#REPLACE0#_$X_spell-healing}" placeholder="[[Healing]]"></textarea>
</td>
</tr>
<tr>
<th>Reference:</th>
<td colspan="3">
<input class="sheet-table-dynamic" type="text" name="attr_spell-reference" title="@{repeating_spells-#REPLACE0#_$X_spell-reference}" placeholder="Book Reference"/>
</td>
</tr>
<tr>
<th>Materials:</th>
<td colspan="3">
<textarea class="sheet-table-dynamic sheet-input-like" name="attr_spell-materials" title="@{repeating_spells-#REPLACE0#_$X_spell-materials}" placeholder="Materials"></textarea>
</td>
</tr>
</table>
<textarea class="sheet-spell-effect" name="attr_spell-effect" title="@{repeating_spells-#REPLACE0#_$X_spell-effect}" placeholder="Insert Spell effects."></textarea>
</div>
</div>
</fieldset>
+10 -10
View File
@@ -1,15 +1,15 @@
<table class="sheet-centering" style="width: 100%;">
<tr>
<td><button type="roll" name="roll_#REPLACE0#parsave" title="%{#REPLACE2##REPLACE0#parsave}" value="/w gm &{template:2Esave} {{savevs=Paralyzation}} {{character=#REPLACE1#}} {{saveroll=[[1d20+(@{misc-mod})]]}} {{savetarget=[[@{#REPLACE0#partar}]]}} {{color=orange}}"><br>Para<br>Save</button></td>
<td><button type="roll" name="roll_#REPLACE0#parsave" title="%{#REPLACE2##REPLACE0#poisave}" value="/w gm &{template:2Esave} {{savevs=Poison}} {{character=#REPLACE1#}} {{saveroll=[[1d20+(@{misc-mod})]]}} {{savetarget=[[@{#REPLACE0#poitar}]]}} {{color=orange}}"><br>Pois<br>Save</button></td>
<td><button type="roll" name="roll_#REPLACE0#deasave" title="%{#REPLACE2##REPLACE0#deasave}" value="/w gm &{template:2Esave} {{savevs=Death}} {{character=#REPLACE1#}} {{saveroll=[[1d20+(@{misc-mod})]]}} {{savetarget=[[@{#REPLACE0#deatar}]]}} {{color=orange}}"><br>Death<br>Save</button></td>
<td><button type="roll" name="roll_#REPLACE0#rodsave" title="%{#REPLACE2##REPLACE0#rodsave}" value="/w gm &{template:2Esave} {{savevs=Rod}} {{character=#REPLACE1#}} {{saveroll=[[1d20+(@{misc-mod})]]}} {{savetarget=[[@{#REPLACE0#rodtar}]]}} {{color=orange}}"><br>Rod<br>Save</button></td>
<td><button type="roll" name="roll_#REPLACE0#stasave" title="%{#REPLACE2##REPLACE0#stasave}" value="/w gm &{template:2Esave} {{savevs=Staff}} {{character=#REPLACE1#}} {{saveroll=[[1d20+(@{misc-mod})]]}} {{savetarget=[[@{#REPLACE0#statar}]]}} {{color=orange}}"><br>Staff<br>Save</button></td>
<td><button type="roll" name="roll_#REPLACE0#wansave" title="%{#REPLACE2##REPLACE0#wansave}" value="/w gm &{template:2Esave} {{savevs=Wand}} {{character=#REPLACE1#}} {{saveroll=[[1d20+(@{misc-mod})]]}} {{savetarget=[[@{#REPLACE0#wantar}]]}} {{color=orange}}"><br>Wand<br>Save</button></td>
<td><button type="roll" name="roll_#REPLACE0#petsave" title="%{#REPLACE2##REPLACE0#petsave}" value="/w gm &{template:2Esave} {{savevs=Petrification}} {{character=#REPLACE1#}} {{saveroll=[[1d20+(@{misc-mod})]]}} {{savetarget=[[@{#REPLACE0#pettar}]]}} {{color=orange}}"><br>Pet<br>Save</button></td>
<td><button type="roll" name="roll_#REPLACE0#polsave" title="%{#REPLACE2##REPLACE0#polsave}" value="/w gm &{template:2Esave} {{savevs=Polymorph}} {{character=#REPLACE1#}} {{saveroll=[[1d20+(@{misc-mod})]]}} {{savetarget=[[@{#REPLACE0#poltar}]]}} {{color=orange}}"><br>Poly<br>Save</button></td>
<td><button type="roll" name="roll_#REPLACE0#bresave" title="%{#REPLACE2##REPLACE0#bresave}" value="/w gm &{template:2Esave} {{savevs=Breath}} {{character=#REPLACE1#}} {{saveroll=[[1d20+(@{misc-mod})]]}} {{savetarget=[[@{#REPLACE0#bretar}]]}} {{color=orange}}"><br>Breath<br>Save</button></td>
<td><button type="roll" name="roll_#REPLACE0#spesave" title="%{#REPLACE2##REPLACE0#spesave}" value="/w gm &{template:2Esave} {{savevs=Spell}} {{character=#REPLACE1#}} {{saveroll=[[1d20+(@{misc-mod})]]}} {{savetarget=[[@{#REPLACE0#spetar}]]}} {{color=orange}}"><br>Spell<br>Save</button></td>
<td><button type="roll" name="roll_#REPLACE0#parsave" title="%{#REPLACE2##REPLACE0#parsave}" value="/w gm &{template:2Esave} {{savevs=Paralyzation}} {{character=#REPLACE1#}} {{success= You made your check by [[ abs([[1d20+(@{misc-mod})]] - [[@{#REPLACE0#partar}]]) ]]}} {{fail=You missed your check by $[[2]]}} {{saveroll=$[[0]]}} {{savetarget=$[[1]]}}"><br>Para<br>Save</button></td>
<td><button type="roll" name="roll_#REPLACE0#parsave" title="%{#REPLACE2##REPLACE0#poisave}" value="/w gm &{template:2Esave} {{savevs=Poison}} {{character=#REPLACE1#}} {{success= You made your check by [[ abs([[1d20+(@{misc-mod})]] - [[@{#REPLACE0#poitar}]]) ]]}} {{fail=You missed your check by $[[2]]}} {{saveroll=$[[0]]}} {{savetarget=$[[1]]}}"><br>Poison<br>Save</button></td>
<td><button type="roll" name="roll_#REPLACE0#deasave" title="%{#REPLACE2##REPLACE0#deasave}" value="/w gm &{template:2Esave} {{savevs=Death}} {{character=#REPLACE1#}} {{success= You made your check by [[ abs([[1d20+(@{misc-mod})]] - [[@{#REPLACE0#deatar}]]) ]]}} {{fail=You missed your check by $[[2]]}} {{saveroll=$[[0]]}} {{savetarget=$[[1]]}}"><br>Death<br>Save</button></td>
<td><button type="roll" name="roll_#REPLACE0#rodsave" title="%{#REPLACE2##REPLACE0#rodsave}" value="/w gm &{template:2Esave} {{savevs=Rod}} {{character=#REPLACE1#}} {{success= You made your check by [[ abs([[1d20+(@{misc-mod})]] - [[@{#REPLACE0#rodtar}]]) ]]}} {{fail=You missed your check by $[[2]]}} {{saveroll=$[[0]]}} {{savetarget=$[[1]]}}"><br>Rod<br>Save</button></td>
<td><button type="roll" name="roll_#REPLACE0#stasave" title="%{#REPLACE2##REPLACE0#stasave}" value="/w gm &{template:2Esave} {{savevs=Staff}} {{character=#REPLACE1#}} {{success= You made your check by [[ abs([[1d20+(@{misc-mod})]] - [[@{#REPLACE0#statar}]]) ]]}} {{fail=You missed your check by $[[2]]}} {{saveroll=$[[0]]}} {{savetarget=$[[1]]}}"><br>Staff<br>Save</button></td>
<td><button type="roll" name="roll_#REPLACE0#wansave" title="%{#REPLACE2##REPLACE0#wansave}" value="/w gm &{template:2Esave} {{savevs=Wand}} {{character=#REPLACE1#}} {{success= You made your check by [[ abs([[1d20+(@{misc-mod})]] - [[@{#REPLACE0#wantar}]]) ]]}} {{fail=You missed your check by $[[2]]}} {{saveroll=$[[0]]}} {{savetarget=$[[1]]}}"><br>Wand<br>Save</button></td>
<td><button type="roll" name="roll_#REPLACE0#petsave" title="%{#REPLACE2##REPLACE0#petsave}" value="/w gm &{template:2Esave} {{savevs=Petrification}} {{character=#REPLACE1#}} {{success= You made your check by [[ abs([[1d20+(@{misc-mod})]] - [[@{#REPLACE0#pettar}]]) ]]}} {{fail=You missed your check by $[[2]]}} {{saveroll=$[[0]]}} {{savetarget=$[[1]]}}"><br>Petri<br>Save</button></td>
<td><button type="roll" name="roll_#REPLACE0#polsave" title="%{#REPLACE2##REPLACE0#polsave}" value="/w gm &{template:2Esave} {{savevs=Polymorph}} {{character=#REPLACE1#}} {{success= You made your check by [[ abs([[1d20+(@{misc-mod})]] - [[@{#REPLACE0#poltar}]]) ]]}} {{fail=You missed your check by $[[2]]}} {{saveroll=$[[0]]}} {{savetarget=$[[1]]}}"><br>Poly<br>Save</button></td>
<td><button type="roll" name="roll_#REPLACE0#bresave" title="%{#REPLACE2##REPLACE0#bresave}" value="/w gm &{template:2Esave} {{savevs=Breath}} {{character=#REPLACE1#}} {{success= You made your check by [[ abs([[1d20+(@{misc-mod})]] - [[@{#REPLACE0#bretar}]]) ]]}} {{fail=You missed your check by $[[2]]}} {{saveroll=$[[0]]}} {{savetarget=$[[1]]}}"><br>Breath<br>Save</button></td>
<td><button type="roll" name="roll_#REPLACE0#spesave" title="%{#REPLACE2##REPLACE0#spesave}" value="/w gm &{template:2Esave} {{savevs=Spell}} {{character=#REPLACE1#}} {{success= You made your check by [[ abs([[1d20+(@{misc-mod})]] - [[@{#REPLACE0#spetar}]]) ]]}} {{fail=You missed your check by $[[2]]}} {{saveroll=$[[0]]}} {{savetarget=$[[1]]}}"><br>Spell<br>Save</button></td>
</tr>
<tr>
<td><input type="text" name="attr_#REPLACE0#partar" title="@{#REPLACE2##REPLACE0#partar}" class="sheet-small"></td>
@@ -1,89 +1,161 @@
<div class="sheet-flex-wrap">
<fieldset name="repeating_spells-#REPLACE0#" class="repeating_spells-#REPLACE0#">
<div>
<table>
<tr>
<td class="sheet-default-header">Spell name:</td>
<td>
<input type="text" name="attr_spell-name" title="@{repeating_spells-#REPLACE0#_$X_spell-name}" class="sheet-spell-big sheet-chrome" placeholder="Spell name" list="#REPLACE0#-spells">
<input type="text" name="attr_spell-name" title="@{repeating_spells-#REPLACE0#_$X_spell-name}" class="sheet-spell-big sheet-firefox" placeholder="Spell name" list="#REPLACE0#-spells-ff">
</td>
<td class="sheet-default-header">Casting time:</td>
<td><input type="text" name="attr_spell-cast-time" title="@{repeating_spells-#REPLACE0#_$X_spell-cast-time}" class="sheet-short" placeholder="Cast time"></td>
<td><button type="roll" name="roll_spell-init" title="@{repeating_spells-#REPLACE0#_$X_spell-init}" value="/gmroll [[{([[1d10]]+@{spell-cast-time}-(@{misc-mod})), 1}kh1]] [Initiative (@{spell-name})]&{tracker}">Initiative</button></td>
</tr>
</table>
<table class="sheet-default-header-first-column sheet-inline-5">
<tr>
<td>Cast / Memorized:</td>
<td><input type="number" name="attr_spell-cast-value" title="@{repeating_spells-#REPLACE0#_$X_spell-cast-value}" value="0" class="sheet-short"><b> / </b><input type="number" name="attr_spell-memorized" title="@{repeating_spells-#REPLACE0#_$X_spell-memorized}" value="0" class="sheet-short"></td>
</tr>
</table>
<table class="sheet-default-header-first-column sheet-inline-5">
<tr>
<td>Spell Points / Arc Used:</td>
<td><input type="number" name="attr_spell-points" title="@{repeating_spells-#REPLACE0#_$X_spell-points}" class="sheet-short" value="0"><b> / </b><input type="number" name="attr_spell-arc" title="@{repeating_spells-#REPLACE0#_$X_spell-arc}" class="sheet-short" value="0"></td>
</tr>
</table>
<input type="checkbox" class="sheet-show-spell-details sheet-show-spell-hack" title="Show spell details"/><span class="sheet-show-spell-hack"></span><label class="sheet-show-spell-hack">Show spell details</label>
<table class="sheet-default-header-odd-column sheet-spell-details">
<tr>
<td>Level:</td>
<td><input type="text" name="attr_spell-level" title="@{repeating_spells-#REPLACE0#_$X_spell-level}" class="sheet-spell-half" placeholder="Spell level"></td>
<td>School:</td>
<td><input type="text" name="attr_spell-school" title="@{repeating_spells-#REPLACE0#_$X_spell-school}" class="sheet-spell-half" placeholder="School"></td>
<td>Components:</td>
<td><input type="text" name="attr_spell-components" title="@{repeating_spells-#REPLACE0#_$X_spell-components}" class="sheet-spell-half" placeholder="Components"></td>
</tr>
<tr>
<td>Range:</td>
<td><input type="text" name="attr_spell-range" title="@{repeating_spells-#REPLACE0#_$X_spell-range}" class="sheet-spell-half" placeholder="Range"></td>
<td>Area of Effect:</td>
<td><input type="text" name="attr_spell-aoe" title="@{repeating_spells-#REPLACE0#_$X_spell-aoe}" class="sheet-spell-half" placeholder="Area of Effect"></td>
<td>Duration:</td>
<td><input type="text" name="attr_spell-duration" title="@{repeating_spells-#REPLACE0#_$X_spell-duration}" class="sheet-spell-half" placeholder="Duration"></td>
</tr>
<tr>
<td>Damage:</td>
<td><textarea type="text" name="attr_spell-damage" title="@{repeating_spells-#REPLACE0#_$X_spell-damage}" class="sheet-spell-half sheet-input-like" placeholder="[[Damage]]"></textarea></td>
<td>Damage type:</td>
<td><input type="text" name="attr_spell-damage-type" title="@{repeating_spells-#REPLACE0#_$X_spell-damage-type}" class="sheet-spell-half" placeholder="Damage type" list="spell-damage-type"></td>
<td>Saving throw:</td>
<td><input type="text" name="attr_spell-saving-throw" title="@{repeating_spells-#REPLACE0#_$X_spell-saving-throw}" class="sheet-spell-half" placeholder="Saving Throw"></td>
</tr>
<tr>
<td>Healing:</td>
<td><textarea type="text" name="attr_spell-healing" title="@{repeating_spells-#REPLACE0#_$X_spell-healing}" class="sheet-spell-half sheet-input-like" placeholder="[[Healing]]"></textarea></td>
<td>Materials:</td>
<td><textarea type="text" name="attr_spell-materials" title="@{repeating_spells-#REPLACE0#_$X_spell-materials}" class="sheet-spell-half sheet-input-like" placeholder="Materials"></textarea></td>
<td>Book reference:</td>
<td><input type="text" name="attr_spell-reference" title="@{repeating_spells-#REPLACE0#_$X_spell-reference}" class="sheet-spell-half" placeholder="Book Reference"></td>
</tr>
<tr>
<td>Subtlety:</td>
<td><input type="text" name="attr_spell-subtlety" title="@{repeating_spells-#REPLACE0#_$X_spell-subtlety}" class="sheet-spell-half" placeholder="Subtlety"></td>
<td>Sensory:</td>
<td><input type="text" name="attr_spell-sensory" title="@{repeating_spells-#REPLACE0#_$X_spell-sensory}" class="sheet-spell-half" placeholder="Sensory"></td>
<td>Knockdown:</td>
<td><input type="text" name="attr_spell-knockdown" title="@{repeating_spells-#REPLACE0#_$X_spell-knockdown}" class="sheet-spell-half" placeholder="[[d6]]"></td>
</tr>
<tr>
<td>Critical:</td>
<td><input type="text" name="attr_spell-crit-size" title="@{repeating_spells-#REPLACE0#_$X_spell-crit-size}" class="sheet-spell-half" placeholder="Large (1d3 hits)" list="spell-crit-size"></td>
<td colspan="2" style="background: transparent"><button type="action" name="act_spell-crit2" class="btn sheet-action-button" title="%{repeating_spells-#REPLACE0#_$X_spell-crit2}">Critical Effect</button></td>
</tr>
</table>
<table class="sheet-spell-effect">
<tr>
<td style="width: 100%"><textarea name="attr_spell-effect" title="@{repeating_spells-#REPLACE0#_$X_spell-effect}" placeholder="Insert Spell effects." style="margin: 0; height: 60px"></textarea></td>
<td>
<button type="roll" name="roll_spell-cast" title="%{repeating_spells-#REPLACE0#_$X_spell-cast}" value="#REPLACE1#@{spell-effect}" style="margin-bottom: 5px">Roll Spell Effects</button>
<br>
<button type="roll" name="roll_spell-template" title="%{repeating_spells-#REPLACE0#_$X_spell-template}" value="#REPLACE1#&{template:2Espell}{{title=@{spell-name}}}{{splevel=@{spell-level}}}{{school=@{spell-school}}}{{components=@{spell-components}}}{{time=@{spell-cast-time}}}{{range=@{spell-range}}}{{duration=@{spell-duration}}}{{aoe=@{spell-aoe}}}{{save=@{spell-saving-throw}}}{{subtlety=@{spell-subtlety}}}{{sensory=@{spell-sensory}}}{{knockdown=@{spell-knockdown}}}{{crit=@{spell-crit-size}}}{{damage=@{spell-damage}}}{{damagetype=@{spell-damage-type}}}{{healing=@{spell-healing}}}{{reference=@{spell-reference}}}{{materials=@{spell-materials}}}{{effects=@{spell-effect}}}">Roll Template</button>
</td>
</tr>
</table>
<hr>
</div>
</fieldset>
</div>
<fieldset class="repeating_spells-#REPLACE0#" name="repeating_spells-#REPLACE0#">
<div class="sheet-spell-line">
<table class="sheet-default-header-first-row sheet-inline" style="flex-grow: 1">
<tr class="sheet-collapse sheet-show-first">
<th>Spell name</th>
<th>Range</th>
<th>Area of Effect</th>
<th colspan="2">Casting time</th>
<th colspan="2">Macro</th>
</tr>
<tr>
<td class="sheet-td-dynamic50">
<input class="sheet-table-dynamic sheet-chrome" type="text" name="attr_spell-name" title="@{repeating_spells-#REPLACE0#_$X_spell-name}" placeholder="Spell name" list="#REPLACE0#-spells"/>
<input class="sheet-table-dynamic sheet-firefox" type="text" name="attr_spell-name" title="@{repeating_spells-#REPLACE0#_$X_spell-name}" placeholder="Spell name" list="#REPLACE0#-spells-ff"/>
</td>
<td class="sheet-td-dynamic25">
<input class="sheet-table-dynamic" type="text" name="attr_spell-range" title="@{repeating_spells-#REPLACE0#_$X_spell-range}" placeholder="Range"/>
</td>
<td class="sheet-td-dynamic25">
<input class="sheet-table-dynamic" type="text" name="attr_spell-aoe" title="@{repeating_spells-#REPLACE0#_$X_spell-aoe}" placeholder="Area of Effect"/>
</td>
<td>
<input class="sheet-short" type="text" name="attr_spell-cast-time" title="@{repeating_spells-#REPLACE0#_$X_spell-cast-time}" placeholder="Cast time"/>
</td>
<td>
<button type="roll" name="roll_spell-init" title="@{repeating_spells-#REPLACE0#_$X_spell-init}" value="/gmroll [[{[[1d10]]+(@{spell-cast-time})-(@{misc-mod}), 1}kh1]] [Initiative (@{spell-name})]&{tracker}">Initiative</button>
</td>
<td>
<button type="roll" name="roll_spell-template" title="%{repeating_spells-#REPLACE0#_$X_spell-template}" value="#REPLACE1#&{template:2Espell}{{title=@{spell-name}}}{{splevel=@{spell-level}}}{{school=@{spell-school}}}{{sphere=@{spell-sphere}}}{{components=@{spell-components}}}{{time=@{spell-cast-time}}}{{range=@{spell-range}}}{{duration=@{spell-duration}}}{{aoe=@{spell-aoe}}}{{save=@{spell-saving-throw}}}{{subtlety=@{spell-subtlety}}}{{sensory=@{spell-sensory}}}{{knockdown=@{spell-knockdown}}}{{crit=@{spell-crit-size}}}{{damage=@{spell-damage}}}{{damagetype=@{spell-damage-type}}}{{healing=@{spell-healing}}}{{reference=@{spell-reference}}}{{materials=@{spell-materials}}}{{effects=@{spell-effect}}}">T</button>
</td>insert_fold-button.html
</tr>
</table>
<table class="sheet-default-header-first-row sheet-spell-slots sheet-hidden">
<tr class="sheet-collapse sheet-show-first">
<td>Cast</td>
<td></td>
<td>Memorized</td>
</tr>
<tr>
<td>
<input class="sheet-short" type="number" name="attr_spell-cast-value" title="@{repeating_spells-#REPLACE0#_$X_spell-cast-value}" value="0"/>
</td>
<td class="sheet-centering-padding-5">/</td>
<td>
<input class="sheet-table-dynamic" type="number" name="attr_spell-memorized" title="@{repeating_spells-#REPLACE0#_$X_spell-memorized}" value="0"/>
</td>
</tr>
</table>
<table class="sheet-default-header-first-row sheet-spell-points sheet-hidden">
<tr class="sheet-collapse sheet-show-first">
<td>Spell Points Used</td>
</tr>
<tr>
<td>
<input class="sheet-table-dynamic" type="number" name="attr_spell-points" title="@{repeating_spells-#REPLACE0#_$X_spell-points}" value="0"/>
</td>
</tr>
</table>
<table class="sheet-default-header-first-row sheet-spell-arcs-winds sheet-hidden">
<tr class="sheet-collapse sheet-show-first">
<td>Arcs Used</td>
</tr>
<tr>
<td>
<input class="sheet-table-dynamic" type="number" name="attr_spell-arc" title="@{repeating_spells-#REPLACE0#_$X_spell-arc}" value="0"/>
</td>
</tr>
</table>
</div>
<div class="sheet-hidden sheet-fold">
<div class="sheet-spell-fold">
<table class="sheet-default-header-odd-column" style="align-self: flex-start">
<tr>
<th>Level:</th>
<td colspan="3">
<input class="sheet-table-dynamic" type="text" name="attr_spell-level" title="@{repeating_spells-#REPLACE0#_$X_spell-level}" placeholder="Spell level"/>
</td>
</tr>
<tr>
<th>School:</th>
<td>
<input class="sheet-spell-half" type="text" name="attr_spell-school" title="@{repeating_spells-#REPLACE0#_$X_spell-school}" placeholder="School"/>
</td>
<th>Sphere:</th>
<td>
<input class="sheet-spell-half" type="text" name="attr_spell-sphere" title="@{repeating_spells-#REPLACE0#_$X_spell-sphere}" placeholder="Sphere"/>
</td>
</tr>
<tr>
<th>Duration:</th>
<td>
<input class="sheet-spell-half" type="text" name="attr_spell-duration" title="@{repeating_spells-#REPLACE0#_$X_spell-duration}" placeholder="Duration"/>
</td>
<th>Components:</th>
<td>
<input class="sheet-spell-half" type="text" name="attr_spell-components" title="@{repeating_spells-#REPLACE0#_$X_spell-components}" placeholder="Components"/>
</td>
</tr>
<tr>
<th>Subtlety:</th>
<td>
<input class="sheet-spell-half" type="text" name="attr_spell-subtlety" title="@{repeating_spells-#REPLACE0#_$X_spell-subtlety}" placeholder="Subtlety"/>
</td>
<th style="white-space: nowrap">Saving Throw:</th>
<td>
<input class="sheet-spell-half" type="text" name="attr_spell-saving-throw" title="@{repeating_spells-#REPLACE0#_$X_spell-saving-throw}" placeholder="Saving Throw"/>
</td>
</tr>
<tr>
<th>Sensory:</th>
<td>
<input class="sheet-spell-half" type="text" name="attr_spell-sensory" title="@{repeating_spells-#REPLACE0#_$X_spell-sensory}" placeholder="Sensory"/>
</td>
<th>Knockdown:</th>
<td>
<input class="sheet-spell-half" type="text" name="attr_spell-knockdown" title="@{repeating_spells-#REPLACE0#_$X_spell-knockdown}" placeholder="[[d6]]"/>
</td>
</tr>
<tr>
<th>Critical:</th>
<td>
<input class="sheet-spell-half" type="text" name="attr_spell-crit-size" title="@{repeating_spells-#REPLACE0#_$X_spell-crit-size}" placeholder="Large (1d3 hits)" list="spell-crit-size"/>
</td>
<td colspan="2" style="background-color: transparent;">
<button class="btn sheet-action-button" type="action" name="act_spell-crit2" title="%{repeating_spells-#REPLACE0#_$X_spell-crit2}">Critical Effect</button>
</td>
</tr>
<tr>
<th>Damage:</th>
<td>
<textarea class="sheet-spell-half sheet-input-like" name="attr_spell-damage" title="@{repeating_spells-#REPLACE0#_$X_spell-damage}" placeholder="[[Damage]]"></textarea>
</td>
<th>Damage Type:</th>
<td>
<input class="sheet-spell-half" type="text" name="attr_spell-damage-type" title="@{repeating_spells-#REPLACE0#_$X_spell-damage-type}" placeholder="Damage type" list="spell-damage-type"/>
</td>
</tr>
<tr>
<th>Healing:</th>
<td colspan="3">
<textarea class="sheet-table-dynamic sheet-input-like" name="attr_spell-healing" title="@{repeating_spells-#REPLACE0#_$X_spell-healing}" placeholder="[[Healing]]"></textarea>
</td>
</tr>
<tr>
<th>Reference:</th>
<td colspan="3">
<input class="sheet-table-dynamic" type="text" name="attr_spell-reference" title="@{repeating_spells-#REPLACE0#_$X_spell-reference}" placeholder="Book Reference"/>
</td>
</tr>
<tr>
<th>Materials:</th>
<td colspan="3">
<textarea class="sheet-table-dynamic sheet-input-like" name="attr_spell-materials" title="@{repeating_spells-#REPLACE0#_$X_spell-materials}" placeholder="Materials"></textarea>
</td>
</tr>
</table>
<textarea class="sheet-spell-effect" name="attr_spell-effect" title="@{repeating_spells-#REPLACE0#_$X_spell-effect}" placeholder="Insert Spell effects."></textarea>
</div>
</div>
</fieldset>
@@ -1 +1 @@
<td><button type="roll" name="roll_#REPLACE0#-check" title="%{#REPLACE0#-check}" value="&{template:2Echeck} {{checkvs=#REPLACE0# Check}} {{character=@{character_name}}} {{success=You made your check by [[ abs([[@{#REPLACE0#}]] - [[1d20cs1cf20-(@{misc-mod})]]) ]]}} {{fail=You missed your check by $[[2]]}} {{checktarget=[[@{#REPLACE0#}]]}} {{checkroll=$[[1]]}} {{color=blue}}">#REPLACE0#</button></td>
<td><button type="roll" name="roll_#REPLACE0#-check" title="%{#REPLACE0#-check}" value="&{template:2Echeck} {{checkvs=#REPLACE0# Check}} {{character=@{character_name}}} {{success=You made your check by [[ abs([[@{#REPLACE0#}]] - [[1d20cs1cf20-(@{misc-mod})]]) ]]}} {{fail=You missed your check by $[[2]]}} {{checktarget=$[[0]]}} {{checkroll=$[[1]]}} {{color=blue}}">#REPLACE0#</button></td>
@@ -497,7 +497,7 @@
<td><input type="text" name="attr_partar" title="@{partar}" class="sheet-short" placeholder="Target"/></td>
<td><input type="text" name="attr_parmod" title="@{parmod}" class="sheet-table-dynamic" value="0"/></td>
<td><input type="text" name="attr_parnotes" title="@{parnotes}" placeholder="Situational Modifiers"/>
<button type="roll" name="roll_parsave" title="%{parsave}" value="/w gm &{template:2Esave} {{savevs=Paralyzation}} {{character=@{character_name}}} {{saveroll=[[1d20+(@{parmod})+(@{misc-mod})]]}} {{savetarget=[[@{partar}]]}}"></button>
insert_saving-throw-button.html_(par,Paralyzation)
</td>
</tr>
<tr>
@@ -505,7 +505,7 @@
<td><input type="text" name="attr_poitar" title="@{poitar}" class="sheet-short" placeholder="Target"/></td>
<td><input type="text" name="attr_poimod" title="@{poimod}" class="sheet-table-dynamic" value="0"/></td>
<td><input type="text" name="attr_poinotes" title="@{poinotes}" placeholder="Situational Modifiers"/>
<button type="roll" name="roll_poisave" title="%{poisave}" value="/w gm &{template:2Esave} {{savevs=Poison}} {{character=@{character_name}}} {{saveroll=[[1d20+(@{poimod})+(@{misc-mod})]]}} {{savetarget=[[@{poitar}]]}}"></button>
insert_saving-throw-button.html_(poi,Poison)
</td>
</tr>
<tr>
@@ -513,7 +513,7 @@
<td><input type="text" name="attr_deatar" title="@{deatar}" class="sheet-short" placeholder="Target"/></td>
<td><input type="text" name="attr_deamod" title="@{deamod}" class="sheet-table-dynamic" value="0"/></td>
<td><input type="text" name="attr_deanotes" title="@{deanotes}" placeholder="Situational Modifiers"/>
<button type="roll" name="roll_deasave" title="%{deasave}" value="/w gm &{template:2Esave} {{savevs=Death}} {{character=@{character_name}}} {{saveroll=[[1d20+(@{deamod})+(@{misc-mod})]]}} {{savetarget=[[@{deatar}]]}}"></button>
insert_saving-throw-button.html_(dea,Death)
</td>
</tr>
<tr>
@@ -521,7 +521,7 @@
<td><input type="text" name="attr_rodtar" title="@{rodtar}" class="sheet-short" placeholder="Target"/></td>
<td><input type="text" name="attr_rodmod" title="@{rodmod}" class="sheet-table-dynamic" value="0"/></td>
<td><input type="text" name="attr_rodnotes" title="@{rodnotes}" placeholder="Situational Modifiers"/>
<button type="roll" name="roll_rodsave" title="%{rodsave}" value="/w gm &{template:2Esave} {{savevs=Rod}} {{character=@{character_name}}} {{saveroll=[[1d20+(@{rodmod})+(@{misc-mod})]]}} {{savetarget=[[@{rodtar}]]}}"></button>
insert_saving-throw-button.html_(rod,Rod)
</td>
</tr>
<tr>
@@ -529,7 +529,7 @@
<td><input type="text" name="attr_statar" title="@{statar}" class="sheet-short" placeholder="Target"/></td>
<td><input type="text" name="attr_stamod" title="@{stamod}" class="sheet-table-dynamic" value="0"/></td>
<td><input type="text" name="attr_stanotes" title="@{stanotes}" placeholder="Situational Modifiers"/>
<button type="roll" name="roll_stasave" title="%{stasave}" value="/w gm &{template:2Esave} {{savevs=Staff}} {{character=@{character_name}}} {{saveroll=[[1d20+(@{stamod})+(@{misc-mod})]]}} {{savetarget=[[@{statar}]]}}"></button>
insert_saving-throw-button.html_(sta,Staff)
</td>
</tr>
<tr>
@@ -537,7 +537,7 @@
<td><input type="text" name="attr_wantar" title="@{wantar}" class="sheet-short" placeholder="Target"/></td>
<td><input type="text" name="attr_wanmod" title="@{wanmod}" class="sheet-table-dynamic" value="0"/></td>
<td><input type="text" name="attr_wannotes" title="@{wannotes}" placeholder="Situational Modifiers"/>
<button type="roll" name="roll_wansave" title="%{wansave}" value="/w gm &{template:2Esave} {{savevs=Wand}} {{character=@{character_name}}} {{saveroll=[[1d20+(@{wanmod})+(@{misc-mod})]]}} {{savetarget=[[@{wantar}]]}}"></button>
insert_saving-throw-button.html_(wan,Wand)
</td>
</tr>
<tr>
@@ -545,7 +545,7 @@
<td><input type="text" name="attr_pettar" title="@{pettar}" class="sheet-short" placeholder="Target"/></td>
<td><input type="text" name="attr_petmod" title="@{petmod}" class="sheet-table-dynamic" value="0"/></td>
<td><input type="text" name="attr_petnotes" title="@{petnotes}" placeholder="Situational Modifiers"/>
<button type="roll" name="roll_petsave" title="%{petsave}" value="/w gm &{template:2Esave} {{savevs=Petrification}} {{character=@{character_name}}} {{saveroll=[[1d20+(@{petmod})+(@{misc-mod})]]}} {{savetarget=[[@{pettar}]]}}"></button>
insert_saving-throw-button.html_(pet,Petrification)
</td>
</tr>
<tr>
@@ -553,7 +553,7 @@
<td><input type="text" name="attr_poltar" title="@{poltar}" class="sheet-short" placeholder="Target"/></td>
<td><input type="text" name="attr_polmod" title="@{polmod}" class="sheet-table-dynamic" value="0"/></td>
<td><input type="text" name="attr_polnotes" title="@{polnotes}" placeholder="Situational Modifiers"/>
<button type="roll" name="roll_polsave" title="%{polsave}" value="/w gm &{template:2Esave} {{savevs=Polymorph}} {{character=@{character_name}}} {{saveroll=[[1d20+(@{polmod})+(@{misc-mod})]]}} {{savetarget=[[@{poltar}]]}}"></button>
insert_saving-throw-button.html_(pol,Polymorph)
</td>
</tr>
<tr>
@@ -561,7 +561,7 @@
<td><input type="text" name="attr_breathtar" title="@{breathtar}" class="sheet-short" placeholder="Target"/></td>
<td><input type="text" name="attr_breathmod" title="@{breathmod}" class="sheet-table-dynamic" value="0"/></td>
<td><input type="text" name="attr_breathnotes" title="@{breathnotes}" placeholder="Situational Modifiers"/>
<button type="roll" name="roll_breathsave" title="%{breathsave}" value="/w gm &{template:2Esave} {{savevs=Breath}} {{character=@{character_name}}} {{saveroll=[[1d20+(@{breathmod})+(@{misc-mod})]]}} {{savetarget=[[@{breathtar}]]}}"></button>
insert_saving-throw-button.html_(breath,Breath)
</td>
</tr>
<tr>
@@ -569,7 +569,7 @@
<td><input type="text" name="attr_sptar" title="@{sptar}" class="sheet-short" placeholder="Target"/></td>
<td><input type="text" name="attr_spmod" title="@{spmod}" class="sheet-table-dynamic" value="0"/></td>
<td><input type="text" name="attr_spnotes" title="@{spnotes}" placeholder="Situational Modifiers"/>
<button type="roll" name="roll_spsave" title="%{spsave}" value="/w gm &{template:2Esave} {{savevs=Spell}} {{character=@{character_name}}} {{saveroll=[[1d20+(@{spmod})+(@{misc-mod})]]}} {{savetarget=[[@{sptar}]]}}"></button>
insert_saving-throw-button.html_(sp,Spell)
</td>
</tr>
</table>
@@ -586,7 +586,7 @@
<td><input type="text" name="attr_ftar" title="@{ftar}" class="sheet-short" placeholder="Target"/></td>
<td><input type="text" name="attr_fmod" title="@{fmod}" class="sheet-table-dynamic" value="0"/></td>
<td><input type="text" name="attr_fnotes" title="@{fnotes}" placeholder="Situational Modifiers"/>
<button type="roll" name="roll_fsave" title="%{fsave}" value="/w gm &{template:2Esave} {{savevs=Fear}} {{character=@{character_name}}} {{saveroll=[[1d20+(@{fmod})+(@{misc-mod})]]}} {{savetarget=[[@{ftar}]]}}"></button>
insert_saving-throw-button.html_(f,Fear)
</td>
</tr>
<tr>
@@ -594,7 +594,7 @@
<td><input type="text" name="attr_horrtar" title="@{horrtar}" class="sheet-short" placeholder="Target"/></td>
<td><input type="text" name="attr_horrmod" title="@{horrmod}" class="sheet-table-dynamic" value="0"/></td>
<td><input type="text" name="attr_horrnotes" title="@{horrnotes}" placeholder="Situational Modifiers"/>
<button type="roll" name="roll_horrsave" title="%{horrsave}" value="/w gm &{template:2Esave} {{savevs=Horror}} {{character=@{character_name}}} {{saveroll=[[1d20+(@{horrmod})+(@{misc-mod})]]}} {{savetarget=[[@{horrtar}]]}}"></button>
insert_saving-throw-button.html_(horr,Horror)
</td>
</tr>
<tr>
@@ -602,7 +602,7 @@
<td><input type="text" name="attr_madtar" title="@{madtar}" class="sheet-short" placeholder="Target"/></td>
<td><input type="text" name="attr_madmod" title="@{madmod}" class="sheet-table-dynamic" value="0"/></td>
<td><input type="text" name="attr_madnotes" title="@{madnotes}" placeholder="Situational Modifiers"/>
<button type="roll" name="roll_madsave" title="%{madsave}" value="/w gm &{template:2Esave} {{savevs=Madness}} {{character=@{character_name}}} {{saveroll=[[1d20+(@{madmod})+(@{misc-mod})]]}} {{savetarget=[[@{madtar}]]}}"></button>
insert_saving-throw-button.html_(mad,Madness)
</td>
</tr>
</table>
@@ -0,0 +1 @@
<button type="roll" name="roll_#REPLACE0#save" title="%{#REPLACE0#save}" value="/w gm &{template:2Esave} {{savevs=#REPLACE1#}} {{character=@{character_name}}} {{success= You made your check by [[ abs([[1d20+(@{#REPLACE0#mod})+(@{misc-mod})]] - [[@{#REPLACE0#tar}]]) ]]}} {{fail=You missed your check by $[[2]]}} {{saveroll=$[[0]]}} {{savetarget=$[[1]]}}"></button>
@@ -3,7 +3,7 @@
<br>
<div class="sheet-body">
<label>Worn Equipment</label><input type="checkbox" class="sheet-show-worn-equipment" name="attr_show-worn-equipment" title="@{show-worn-equipment}" value="1" checked/><span></span>
<div class="sheet-worn-equipment">
<div class="sheet-hidden">
<table class="sheet-default-header-first-column">
<tr class="sheet-default-header">
<td style="min-width:90px">Slot</td>
@@ -451,14 +451,14 @@
<td><input type="text" name="attr_scroll-speed" title="@{repeating_scrolls_$X_scroll-speed}" class="sheet-small" value="3"></td>
<td><button type="roll" name="attr_scroll-initiative" title="%{repeating_scrolls_$X_scroll-initiative}" value="/gmroll [[{([[1d10]]+[[@{scroll-speed}-(@{misc-mod})]]), 1}kh1]] [Initiative (@{scroll})]&{tracker}">Initiative</button></td>
<td><button type="roll" name="attr_scroll-roll" title="%{repeating_scrolls_$X_scroll-roll}" value="@{scroll-macro}">T</button></td>
<td><button type="action" name="act_show" class="btn sheet-hidden sheet-show">▼</button><button type="action" name="act_hide" class="btn sheet-hidden">▲</button></td>
insert_fold-button.html
</tr>
<tr class="sheet-hidden">
<tr class="sheet-hidden sheet-fold">
<td class="sheet-default-header">Spell failure:</td>
<td><input type="number" name="attr_scroll-failure" title="@{repeating_scrolls_$X_scroll-failure}" class="sheet-minish" value="0"></td>
<td style="font-weight: bold">%</td>
</tr>
<tr class="sheet-hidden">
<tr class="sheet-hidden sheet-fold">
<td colspan="7"><textarea type="text" name="attr_scroll-macro" title="@{repeating_scrolls_$X_scroll-macro}" class="sheet-table-dynamic" placeholder="Enter Macro text."></textarea></td>
</tr>
</table>
@@ -32,11 +32,11 @@
<td><input type="text" name="attr_PSP-cost#REPLACE7#" title="@{repeating_#REPLACE1#_$X_PSP-cost#REPLACE7#}" placeholder="#" class="sheet-minish"/></td>
<td><input type="text" name="attr_PSP-cost-maintenance" title="@{repeating_#REPLACE1#_$X_PSP-cost-maintenance}" placeholder="#" class="sheet-minish"/></td>
<td><button type="roll" name="roll_#REPLACE6#" title="%{repeating_#REPLACE1#_$X_#REPLACE6#}" value="@{action-macro}">T</button></td>
<td><button type="action" name="act_show" class="btn sheet-hidden sheet-show">▼</button><button type="action" name="act_hide" class="btn sheet-hidden">▲</button></td>
insert_fold-button.html
</tr>
<tr class="sheet-hidden">
<tr class="sheet-hidden sheet-fold">
<td colspan="100">
<textarea type="text" name="attr_#REPLACE5#" title="@{repeating_#REPLACE1#_$X_#REPLACE5#}" class="sheet-table-dynamic sheet-hidden" placeholder="Macro"></textarea>
<textarea type="text" name="attr_#REPLACE5#" title="@{repeating_#REPLACE1#_$X_#REPLACE5#}" class="sheet-table-dynamic" placeholder="Macro"></textarea>
</td>
</tr>
</table>
@@ -1,6 +0,0 @@
<input type="checkbox" class="sheet-show-spell-spheres-pri" style="display: none" name="attr_show-spell-sphere-pri" title="@{show-spell-sphere-pri}"/>
<div class="sheet-spell-sphere-pri">
<button type="action" name="act_add-spells-#REPLACE0#" title="%{add-spells-#REPLACE0#}" class="btn">Add #REPLACE1#-level spells</button>
<br>
<br>
</div>
@@ -1,4 +1,4 @@
<div class="sheet-inline" style="vertical-align: top;">
<div class="sheet-inline sheet-spell-slots sheet-hidden" style="vertical-align: top;">
<button type="action" name="act_reset-spent-slots-#REPLACE0#" title="%{reset-spent-slots-#REPLACE0#}" class="btn">Reset Spell Slots</button>
<select name="attr_spell-slot-reset-sections" title="@{spell-slot-reset-sections}" class="sheet-rogue">
<option value="level">Current level #REPLACE1#</option>
@@ -0,0 +1,37 @@
<div class="sheet-spell-slots sheet-hidden">
<table class="sheet-default-header-first-row sheet-default-header-first-column sheet-inline-5">
<tr>
<th></th>
<th title="Spell slots gained from levels">Level</th>
<th title="Spell slots gained from Wisdom" class="sheet-padding-right">Wisdom</th>
<th title="Spell slots gained from other sources">Misc.</th>
<th title="Total number of spell slots">Total</th>
</tr>
<tr>
<td>Spell Slots</td>
<td><input type="text" name="attr_spell-priest-#REPLACE0#-castable" title="@{spell-priest-#REPLACE0#-castable}" class="sheet-short" value="0"></td>
<td><input type="text" name="attr_spell-priest-#REPLACE0#-wisdom" title="@{spell-priest-#REPLACE0#-wisdom}" class="sheet-table-dynamic" value="0"/></td>
<td><input type="text" name="attr_spell-priest-#REPLACE0#-misc" title="@{spell-priest-#REPLACE0#-misc}" class="sheet-short" value="0"></td>
<td><input type="text" name="attr_spell-priest-#REPLACE0#-total" title="@{spell-priest-#REPLACE0#-total}" class="sheet-short" value="0" readonly></td>
</tr>
</table>
<table class="sheet-default-header-thead sheet-inline-5">
<thead>
<tr>
<th colspan="3" class="sheet-centering">Available to</th>
</tr>
<tr>
<th>Memorize</th>
<th class="sheet-centering-padding-5">|</th>
<th>Cast</th>
</tr>
</thead>
<tr>
<td><input type="text" name="attr_spell-priest-#REPLACE0#-selected" title="@{spell-priest-#REPLACE0#-selected}" value="0" class="sheet-table-dynamic" readonly></td>
<td class="sheet-centering">|</td>
<td><input type="text" name="attr_spell-priest-#REPLACE0#-remaining" title="@{spell-priest-#REPLACE0#-remaining}" value="0" class="sheet-short" readonly></td>
</tr>
</table>
<input style="display: none;" name="attr_spell-priest-#REPLACE0#-cast-max-sum" class="sheet-short" value="0">
<input style="display: none;" name="attr_spell-priest-#REPLACE0#-cast-value-sum" class="sheet-short" value="0">
</div>
@@ -0,0 +1,41 @@
<div class="sheet-spell-slots sheet-hidden">
<table class="sheet-default-header-first-row sheet-default-header-first-column sheet-inline-5">
<tr>
<th></th>
<th title="Spell slots gained from levels">Level</th>
<th title="+1 spell slot from being a specialist" class="sheet-padding-right">Specialist</th>
<th title="Spell slots gained from other sources">Misc.</th>
<th title="Total number of spell slots">Total</th>
<th class="sheet-centering-padding-5">/</th>
<th title="Maximum number of spell slots allowed by Intelligence">Max</th>
</tr>
<tr>
<td>Spell Slots</td>
<td><input type="text" name="attr_spell-#REPLACE0#-castable" title="@{spell-#REPLACE0#-castable}" class="sheet-short" value="0"></td>
<td class="sheet-centering"><label><input type="checkbox" name="attr_spell-#REPLACE0#-specialist" title="@{spell-#REPLACE0#-specialist}" value="1"/><span></span></label></td>
<td><input type="text" name="attr_spell-#REPLACE0#-misc" title="@{spell-#REPLACE0#-misc}" class="sheet-short" value="0"></td>
<td><input type="text" name="attr_spell-#REPLACE0#-total" title="@{spell-#REPLACE0#-total}" class="sheet-short" value="0" readonly></td>
<td class="sheet-centering">/</td>
<td><input type="text" name="attr_intmax" title="@{intmax}" class="sheet-short" value="0" readonly></td>
</tr>
</table>
<table class="sheet-default-header-thead sheet-inline-5">
<thead>
<tr>
<th colspan="3" class="sheet-centering">Available to</th>
</tr>
<tr>
<th>Memorize</th>
<th class="sheet-centering-padding-5">|</th>
<th>Cast</th>
</tr>
</thead>
<tr>
<td><input type="text" name="attr_spell-#REPLACE0#-selected" title="@{spell-#REPLACE0#-selected}" value="0" class="sheet-table-dynamic" readonly></td>
<td class="sheet-centering">|</td>
<td><input type="text" name="attr_spell-#REPLACE0#-remaining" title="@{spell-#REPLACE0#-remaining}" value="0" class="sheet-short" readonly></td>
</tr>
</table>
<input style="display: none;" name="attr_spell-#REPLACE0#-cast-max-sum" class="sheet-short" value="0">
<input style="display: none;" name="attr_spell-#REPLACE0#-cast-value-sum" class="sheet-short" value="0">
</div>
@@ -11,45 +11,7 @@
<input type="radio" name="attr_tab7" class="sheet-tab sheet-tab37" value="7"/><span class="sheet-tab sheet-tab37">Level 7</span>&nbsp;
<input type="radio" name="attr_tab7" class="sheet-tab sheet-tab38" value="8"/><span class="sheet-tab sheet-tab38">Quest</span><br><br>
<input type="checkbox" class="sheet-show-spell-points-pri" value="1" title="Show spell points and Wind"/><span></span><b title="Show Spells points and Wind">Spell Points & Wind - Player's Option: Spells & Magic</b>
<div class="sheet-spell-points-pri">
<table class="sheet-default-header-first-row sheet-default-header-first-column">
<tr>
<td></td>
<td>Level</td>
<td class="sheet-padding-right">Wisdom</td>
<td>Total</td>
<td class="sheet-centering-padding-5">|</td>
<td>Remaining</td>
</tr>
<tr>
<td>Spell Points</td>
<td><input type="number" name="attr_spell-points-priest-lvl" title="@{spell-points-priest-lvl}" class="sheet-short" value="0"></td>
<td><input type="number" name="attr_spell-points-priest-wis" title="@{spell-points-priest-wis}" class="sheet-table-dynamic" value="0"></td>
<td><input type="text" name="attr_spell-points-priest-total" title="@{spell-points-priest-total}" class="sheet-short" value="0" readonly></td>
<td class="sheet-centering">|</td>
<td><input type="text" name="attr_spell-points-priest-remaining" title="@{spell-points-priest-remaining}" class="sheet-table-dynamic" value="0" readonly></td>
</tr>
</table>
<input style="display: none;" type="text" name="attr_spell-points-priest-sum" class="sheet-short" value="0">
<br>
<table class="sheet-default-header-first-row sheet-default-header-first-column">
<tr>
<td></td>
<td>Total</td>
<td>Remaining</td>
</tr>
<tr>
<td>Wind</td>
<td><input type="number" name="attr_total-wind" title="@{total-wind}" class="sheet-short" value="0"></td>
<td><input type="text" name="attr_total-wind-remaining" title="@{total-wind-remaining}" class="sheet-table-dynamic" value="0" readonly></td>
</tr>
</table>
<input style="display: none;" type="text" name="attr_total-wind-sum" class="sheet-short" value="0">
</div>
<hr>
<table class="sheet-default-header-first-row sheet-inline-5">
<table class="sheet-default-header-first-row">
<tr>
<td>Priest caster level</td>
</tr>
@@ -57,62 +19,78 @@
<td><input type="text" name="attr_level-priest" title="@{level-priest}" class="sheet-display" placeholder="Select level" list="level-select"></td>
</tr>
</table>
insert_spell-slots-reset-button.html_(pri,(Not Quest))
<br><br>
<b>Show Spheres of Influence:</b> <input type="checkbox" class="sheet-show-spell-spheres-pri" name="attr_show-spell-sphere-pri" title="@{show-spell-sphere-pri}"/><span></span>
<div class="sheet-spell-sphere-pri">
<b>Major:</b>
<input type="text" name="attr_sphere-major" title="@{sphere-major}" style="max-width: 720px; width: calc(100% - 45px)" class="sheet-chrome" placeholder="Select or write your major spheres, ie: All, Healing, Protect, ..." list="sphere-major">
<input type="text" name="attr_sphere-major" title="@{sphere-major}" style="max-width: 720px; width: calc(100% - 45px)" class="sheet-firefox" placeholder="Select or write your major spheres, ie: All, Healing, Protect, ..." list="sphere-major-ff">
<br>
<b>Minor:</b>
<input type="text" name="attr_sphere-minor" title="@{sphere-minor}" style="max-width: 720px; width: calc(100% - 45px)" class="sheet-chrome" placeholder="Select or write your minor spheres, ie: All, Healing, Protect, ..." list="sphere-minor">
<input type="text" name="attr_sphere-minor" title="@{sphere-minor}" style="max-width: 720px; width: calc(100% - 45px)" class="sheet-firefox" placeholder="Select or write your minor spheres, ie: All, Healing, Protect, ..." list="sphere-minor-ff">
<br>
<br>
<div>
<b>Show Spheres of Influence:</b> <input type="checkbox" class="sheet-show-spell-spheres-pri" name="attr_show-spell-sphere-pri" title="@{show-spell-sphere-pri}"/><span></span>
<div class="sheet-spell-sphere-pri sheet-hidden">
<b>Major:</b>
<input type="text" name="attr_sphere-major" title="@{sphere-major}" style="max-width: 720px; width: calc(100% - 45px)" class="sheet-chrome" placeholder="Select or write your major spheres, ie: All, Healing, Protect, ..." list="sphere-major">
<input type="text" name="attr_sphere-major" title="@{sphere-major}" style="max-width: 720px; width: calc(100% - 45px)" class="sheet-firefox" placeholder="Select or write your major spheres, ie: All, Healing, Protect, ..." list="sphere-major-ff">
<br>
<b>Minor:</b>
<input type="text" name="attr_sphere-minor" title="@{sphere-minor}" style="max-width: 720px; width: calc(100% - 45px)" class="sheet-chrome" placeholder="Select or write your minor spheres, ie: All, Healing, Protect, ..." list="sphere-minor">
<input type="text" name="attr_sphere-minor" title="@{sphere-minor}" style="max-width: 720px; width: calc(100% - 45px)" class="sheet-firefox" placeholder="Select or write your minor spheres, ie: All, Healing, Protect, ..." list="sphere-minor-ff">
<button type="action" name="act_add-spells-pri1" title="%{add-spells-pri1}" class="btn sheet-hidden sheet-section-priest-level-one">Add 1st-level spells</button>
<button type="action" name="act_add-spells-pri2" title="%{add-spells-pri2}" class="btn sheet-hidden sheet-section-priest-level-two">Add 2nd-level spells</button>
<button type="action" name="act_add-spells-pri3" title="%{add-spells-pri3}" class="btn sheet-hidden sheet-section-priest-level-three">Add 3rd-level spells</button>
<button type="action" name="act_add-spells-pri4" title="%{add-spells-pri4}" class="btn sheet-hidden sheet-section-priest-level-four">Add 4th-level spells</button>
<button type="action" name="act_add-spells-pri5" title="%{add-spells-pri5}" class="btn sheet-hidden sheet-section-priest-level-five">Add 5th-level spells</button>
<button type="action" name="act_add-spells-pri6" title="%{add-spells-pri6}" class="btn sheet-hidden sheet-section-priest-level-six">Add 6th-level spells</button>
<button type="action" name="act_add-spells-pri7" title="%{add-spells-pri7}" class="btn sheet-hidden sheet-section-priest-level-seven">Add 7th-level spells</button>
</div>
</div>
<br>
<div class="sheet-spell-points sheet-hidden">
<table class="sheet-default-header-first-row sheet-default-header-first-column sheet-spell-points sheet-hidden">
<tr>
<td></td>
<td>Level</td>
<td class="sheet-padding-right" colspan="2">Wisdom</td>
<td>Total</td>
<td class="sheet-centering-padding-5">|</td>
<td>Remaining</td>
</tr>
<tr>
<td>Spell Points</td>
<td><input type="number" name="attr_spell-points-priest-lvl" title="@{spell-points-priest-lvl}" class="sheet-mediumish" value="0"></td>
<td><input type="number" name="attr_spell-points-priest-wis" title="@{spell-points-priest-wis}" class="sheet-table-dynamic" value="0"></td>
<td><label><input type="checkbox" name="attr_spell-points-priest-wis-enabled" title="@{spell-points-priest-wis-enabled}" value="1"/><span></span></label></td>
<td><input type="text" name="attr_spell-points-priest-total" title="@{spell-points-priest-total}" class="sheet-short" value="0" readonly></td>
<td class="sheet-centering">|</td>
<td><input type="text" name="attr_spell-points-priest-remaining" title="@{spell-points-priest-remaining}" class="sheet-table-dynamic" value="0" readonly></td>
</tr>
</table>
<details>
<summary>Bonus spell points from high Wisdom to Priests</summary>
Priests with high Wisdom scores gain a special bonus spell points to reflect their piety and devotion. (This is a standard rule in this spell point system, unlike the optional bonus spell point rule for wizards with high Intelligence scores.) Player's Option: Spells & Powers, p. 92
</details>
</div>
<table class="sheet-default-header-first-row sheet-default-header-first-column sheet-spell-arcs-winds sheet-hidden">
<tr>
<td></td>
<td>Level</td>
<td>Wisdom</td>
<td>Total</td>
<td class="sheet-centering-padding-5">|</td>
<td>Remaining</td>
</tr>
<tr>
<td>Winds</td>
<td><input type="number" name="attr_level-wind" title="@{level-wind}" class="sheet-mediumish" value="0"></td>
<td><input type="number" name="attr_wisdom-wind" title="@{wisdom-wind}" class="sheet-mediumish" value="0"></td>
<td><input type="text" name="attr_total-wind" title="@{total-wind}" class="sheet-mediumish" value="0" readonly></td>
<td class="sheet-centering-padding-5">|</td>
<td><input type="text" name="attr_total-wind-remaining" title="@{total-wind-remaining}" class="sheet-table-dynamic" value="0" readonly></td>
</tr>
</table>
insert_spell-slots-reset-button.html_(pri,(Not Quest))
<div class="sheet-tab-content sheet-section-priest-level-one">
insert_priest-sphere-button.html_(pri1,1st)
<table class="sheet-default-header-first-row sheet-default-header-first-column sheet-inline-5">
<tr>
<th></th>
<th title="Spell slots gained from levels">Level</th>
<th title="Spell slots gained from Wisdom" class="sheet-padding-right">Wisdom</th>
<th title="Spell slots gained from other sources">Misc.</th>
<th title="Total number of spell slots">Total</th>
</tr>
<tr>
<td>Spell Slots</td>
<td><input type="text" name="attr_spell-priest-level1-castable" title="@{spell-priest-level1-castable}" class="sheet-short" value="0"></td>
<td><input type="text" name="attr_spell-priest-level1-wisdom" title="@{spell-priest-level1-wisdom}" class="sheet-table-dynamic" value="0"/></td>
<td><input type="text" name="attr_spell-priest-level1-misc" title="@{spell-priest-level1-misc}" class="sheet-short" value="0"></td>
<td><input type="text" name="attr_spell-priest-level1-total" title="@{spell-priest-level1-total}" class="sheet-short" value="0" readonly></td>
</tr>
</table>
<table class="sheet-default-header-thead sheet-inline-5">
<thead>
<tr>
<th colspan="3" class="sheet-centering">Available to</th>
</tr>
<tr>
<th>Memorize</th>
<th class="sheet-centering-padding-5">|</th>
<th>Cast</th>
</tr>
</thead>
<tr>
<td><input type="text" name="attr_spell-priest-level1-selected" title="@{spell-priest-level1-selected}" value="0" class="sheet-table-dynamic" readonly></td>
<td class="sheet-centering">|</td>
<td><input type="text" name="attr_spell-priest-level1-remaining" title="@{spell-priest-level1-remaining}" value="0" class="sheet-short" readonly></td>
</tr>
</table>
<input style="display: none;" name="attr_spell-priest-level1-cast-max-sum" class="sheet-short" value="0">
<input style="display: none;" name="attr_spell-priest-level1-cast-value-sum" class="sheet-short" value="0">
<br><br>
insert_spell-slots-tracking-priest.html_(level1)
<br>
<div class="sheet-body">
<h4>Spells Memorized and Spell Book</h4>
<br>
<h4>Spells Memorized</h4>
insert_priest-spell-template.html_(pri1,,[[@{wisfail}]]%)
<div class="sheet-3colrow">
@@ -127,47 +105,9 @@
</div>
<div class="sheet-tab-content sheet-section-priest-level-two">
insert_priest-sphere-button.html_(pri2,2nd)
<table class="sheet-default-header-first-row sheet-default-header-first-column sheet-inline-5">
<tr>
<th></th>
<th title="Spell slots gained from levels">Level</th>
<th title="Spell slots gained from Wisdom" class="sheet-padding-right">Wisdom</th>
<th title="Spell slots gained from other sources">Misc.</th>
<th title="Total number of spell slots">Total</th>
</tr>
<tr>
<td>Spell Slots</td>
<td><input type="text" name="attr_spell-priest-level2-castable" title="@{spell-priest-level2-castable}" class="sheet-short" value="0"></td>
<td><input type="text" name="attr_spell-priest-level2-wisdom" title="@{spell-priest-level2-wisdom}" class="sheet-table-dynamic" value="0"/></td>
<td><input type="text" name="attr_spell-priest-level2-misc" title="@{spell-priest-level2-misc}" class="sheet-short" value="0"></td>
<td><input type="text" name="attr_spell-priest-level2-total" title="@{spell-priest-level2-total}" class="sheet-short" value="0" readonly></td>
</tr>
</table>
<table class="sheet-default-header-thead sheet-inline-5">
<thead>
<tr>
<th colspan="3" class="sheet-centering">Available to</th>
</tr>
<tr>
<th>Memorize</th>
<th class="sheet-centering-padding-5">|</th>
<th>Cast</th>
</tr>
</thead>
<tr>
<td><input type="text" name="attr_spell-priest-level2-selected" title="@{spell-priest-level2-selected}" value="0" class="sheet-table-dynamic" readonly></td>
<td class="sheet-centering">|</td>
<td><input type="text" name="attr_spell-priest-level2-remaining" title="@{spell-priest-level2-remaining}" value="0" class="sheet-short" readonly></td>
</tr>
</table>
<input style="display: none;" name="attr_spell-priest-level2-cast-max-sum" class="sheet-short" value="0">
<input style="display: none;" name="attr_spell-priest-level2-cast-value-sum" class="sheet-short" value="0">
<br><br>
insert_spell-slots-tracking-priest.html_(level2)
<br>
<div class="sheet-body">
<h4>Spells Memorized and Spell Book</h4>
<br>
<h4>Spells Memorized</h4>
insert_priest-spell-template.html_(pri2,,[[@{wisfail}]]%)
<div class="sheet-3colrow">
@@ -182,47 +122,9 @@
</div>
<div class="sheet-tab-content sheet-section-priest-level-three">
insert_priest-sphere-button.html_(pri3,3rd)
<table class="sheet-default-header-first-row sheet-default-header-first-column sheet-inline-5">
<tr>
<th></th>
<th title="Spell slots gained from levels">Level</th>
<th title="Spell slots gained from Wisdom" class="sheet-padding-right">Wisdom</th>
<th title="Spell slots gained from other sources">Misc.</th>
<th title="Total number of spell slots">Total</th>
</tr>
<tr>
<td>Spell Slots</td>
<td><input type="text" name="attr_spell-priest-level3-castable" title="@{spell-priest-level3-castable}" class="sheet-short" value="0"></td>
<td><input type="text" name="attr_spell-priest-level3-wisdom" title="@{spell-priest-level3-wisdom}" class="sheet-table-dynamic" value="0"/></td>
<td><input type="text" name="attr_spell-priest-level3-misc" title="@{spell-priest-level3-misc}" class="sheet-short" value="0"></td>
<td><input type="text" name="attr_spell-priest-level3-total" title="@{spell-priest-level3-total}" class="sheet-short" value="0" readonly></td>
</tr>
</table>
<table class="sheet-default-header-thead sheet-inline-5">
<thead>
<tr>
<th colspan="3" class="sheet-centering">Available to</th>
</tr>
<tr>
<th>Memorize</th>
<th class="sheet-centering-padding-5">|</th>
<th>Cast</th>
</tr>
</thead>
<tr>
<td><input type="text" name="attr_spell-priest-level3-selected" title="@{spell-priest-level3-selected}" value="0" class="sheet-table-dynamic" readonly></td>
<td class="sheet-centering">|</td>
<td><input type="text" name="attr_spell-priest-level3-remaining" title="@{spell-priest-level3-remaining}" value="0" class="sheet-short" readonly></td>
</tr>
</table>
<input style="display: none;" name="attr_spell-priest-level3-cast-max-sum" class="sheet-short" value="0">
<input style="display: none;" name="attr_spell-priest-level3-cast-value-sum" class="sheet-short" value="0">
<br><br>
insert_spell-slots-tracking-priest.html_(level3)
<br>
<div class="sheet-body">
<h4>Spells Memorized and Spell Book</h4>
<br>
<h4>Spells Memorized</h4>
insert_priest-spell-template.html_(pri3,,[[@{wisfail}]]%)
<div class="sheet-3colrow">
@@ -237,47 +139,9 @@
</div>
<div class="sheet-tab-content sheet-section-priest-level-four">
insert_priest-sphere-button.html_(pri4,4th)
<table class="sheet-default-header-first-row sheet-default-header-first-column sheet-inline-5">
<tr>
<th></th>
<th title="Spell slots gained from levels">Level</th>
<th title="Spell slots gained from Wisdom" class="sheet-padding-right">Wisdom</th>
<th title="Spell slots gained from other sources">Misc.</th>
<th title="Total number of spell slots">Total</th>
</tr>
<tr>
<td>Spell Slots</td>
<td><input type="text" name="attr_spell-priest-level4-castable" title="@{spell-priest-level4-castable}" class="sheet-short" value="0"></td>
<td><input type="text" name="attr_spell-priest-level4-wisdom" title="@{spell-priest-level4-wisdom}" class="sheet-table-dynamic" value="0"/></td>
<td><input type="text" name="attr_spell-priest-level4-misc" title="@{spell-priest-level4-misc}" class="sheet-short" value="0"></td>
<td><input type="text" name="attr_spell-priest-level4-total" title="@{spell-priest-level4-total}" class="sheet-short" value="0" readonly></td>
</tr>
</table>
<table class="sheet-default-header-thead sheet-inline-5">
<thead>
<tr>
<th colspan="3" class="sheet-centering">Available to</th>
</tr>
<tr>
<th>Memorize</th>
<th class="sheet-centering-padding-5">|</th>
<th>Cast</th>
</tr>
</thead>
<tr>
<td><input type="text" name="attr_spell-priest-level4-selected" title="@{spell-priest-level4-selected}" value="0" class="sheet-table-dynamic" readonly></td>
<td class="sheet-centering">|</td>
<td><input type="text" name="attr_spell-priest-level4-remaining" title="@{spell-priest-level4-remaining}" value="0" class="sheet-short" readonly></td>
</tr>
</table>
<input style="display: none;" name="attr_spell-priest-level4-cast-max-sum" class="sheet-short" value="0">
<input style="display: none;" name="attr_spell-priest-level4-cast-value-sum" class="sheet-short" value="0">
<br><br>
insert_spell-slots-tracking-priest.html_(level4)
<br>
<div class="sheet-body">
<h4>Spells Memorized and Spell Book</h4>
<br>
<h4>Spells Memorized</h4>
insert_priest-spell-template.html_(pri4,,[[@{wisfail}]]%)
<div class="sheet-3colrow">
@@ -292,47 +156,9 @@
</div>
<div class="sheet-tab-content sheet-section-priest-level-five">
insert_priest-sphere-button.html_(pri5,5th)
<table class="sheet-default-header-first-row sheet-default-header-first-column sheet-inline-5">
<tr>
<th></th>
<th title="Spell slots gained from levels">Level</th>
<th title="Spell slots gained from Wisdom" class="sheet-padding-right">Wisdom</th>
<th title="Spell slots gained from other sources">Misc.</th>
<th title="Total number of spell slots">Total</th>
</tr>
<tr>
<td>Spell Slots</td>
<td><input type="text" name="attr_spell-priest-level5-castable" title="@{spell-priest-level5-castable}" class="sheet-short" value="0"></td>
<td><input type="text" name="attr_spell-priest-level5-wisdom" title="@{spell-priest-level5-wisdom}" class="sheet-table-dynamic" value="0"/></td>
<td><input type="text" name="attr_spell-priest-level5-misc" title="@{spell-priest-level5-misc}" class="sheet-short" value="0"></td>
<td><input type="text" name="attr_spell-priest-level5-total" title="@{spell-priest-level5-total}" class="sheet-short" value="0" readonly></td>
</tr>
</table>
<table class="sheet-default-header-thead sheet-inline-5">
<thead>
<tr>
<th colspan="3" class="sheet-centering">Available to</th>
</tr>
<tr>
<th>Memorize</th>
<th class="sheet-centering-padding-5">|</th>
<th>Cast</th>
</tr>
</thead>
<tr>
<td><input type="text" name="attr_spell-priest-level5-selected" title="@{spell-priest-level5-selected}" value="0" class="sheet-table-dynamic" readonly></td>
<td class="sheet-centering">|</td>
<td><input type="text" name="attr_spell-priest-level5-remaining" title="@{spell-priest-level5-remaining}" value="0" class="sheet-short" readonly></td>
</tr>
</table>
<input style="display: none;" name="attr_spell-priest-level5-cast-max-sum" class="sheet-short" value="0">
<input style="display: none;" name="attr_spell-priest-level5-cast-value-sum" class="sheet-short" value="0">
<br><br>
insert_spell-slots-tracking-priest.html_(level5)
<br>
<div class="sheet-body">
<h4>Spells Memorized and Spell Book</h4>
<br>
<h4>Spells Memorized</h4>
insert_priest-spell-template.html_(pri5,,[[@{wisfail}]]%)
<div class="sheet-3colrow">
@@ -347,47 +173,9 @@
</div>
<div class="sheet-tab-content sheet-section-priest-level-six">
insert_priest-sphere-button.html_(pri6,6th)
<table class="sheet-default-header-first-row sheet-default-header-first-column sheet-inline-5">
<tr>
<th></th>
<th title="Spell slots gained from levels">Level</th>
<th title="Spell slots gained from Wisdom" class="sheet-padding-right">Wisdom</th>
<th title="Spell slots gained from other sources">Misc.</th>
<th title="Total number of spell slots">Total</th>
</tr>
<tr>
<td>Spell Slots</td>
<td><input type="text" name="attr_spell-priest-level6-castable" title="@{spell-priest-level6-castable}" class="sheet-short" value="0"></td>
<td><input type="text" name="attr_spell-priest-level6-wisdom" title="@{spell-priest-level6-wisdom}" class="sheet-table-dynamic" value="0"/></td>
<td><input type="text" name="attr_spell-priest-level6-misc" title="@{spell-priest-level6-misc}" class="sheet-short" value="0"></td>
<td><input type="text" name="attr_spell-priest-level6-total" title="@{spell-priest-level6-total}" class="sheet-short" value="0" readonly></td>
</tr>
</table>
<table class="sheet-default-header-thead sheet-inline-5">
<thead>
<tr>
<th colspan="3" class="sheet-centering">Available to</th>
</tr>
<tr>
<th>Memorize</th>
<th class="sheet-centering-padding-5">|</th>
<th>Cast</th>
</tr>
</thead>
<tr>
<td><input type="text" name="attr_spell-priest-level6-selected" title="@{spell-priest-level6-selected}" value="0" class="sheet-table-dynamic" readonly></td>
<td class="sheet-centering">|</td>
<td><input type="text" name="attr_spell-priest-level6-remaining" title="@{spell-priest-level6-remaining}" value="0" class="sheet-short" readonly></td>
</tr>
</table>
<input style="display: none;" name="attr_spell-priest-level6-cast-max-sum" class="sheet-short" value="0">
<input style="display: none;" name="attr_spell-priest-level6-cast-value-sum" class="sheet-short" value="0">
<br><br>
insert_spell-slots-tracking-priest.html_(level6)
<br>
<div class="sheet-body">
<h4>Spells Memorized and Spell Book</h4>
<br>
<h4>Spells Memorized</h4>
insert_priest-spell-template.html_(pri6,,[[@{wisfail}]]%)
<div class="sheet-3colrow">
@@ -402,47 +190,9 @@
</div>
<div class="sheet-tab-content sheet-section-priest-level-seven">
insert_priest-sphere-button.html_(pri7,7th)
<table class="sheet-default-header-first-row sheet-default-header-first-column sheet-inline-5">
<tr>
<th></th>
<th title="Spell slots gained from levels">Level</th>
<th title="Spell slots gained from Wisdom" class="sheet-padding-right">Wisdom</th>
<th title="Spell slots gained from other sources">Misc.</th>
<th title="Total number of spell slots">Total</th>
</tr>
<tr>
<td>Spell Slots</td>
<td><input type="text" name="attr_spell-priest-level7-castable" title="@{spell-priest-level7-castable}" class="sheet-short" value="0"></td>
<td><input type="text" name="attr_spell-priest-level7-wisdom" title="@{spell-priest-level7-wisdom}" class="sheet-table-dynamic" value="0"/></td>
<td><input type="text" name="attr_spell-priest-level7-misc" title="@{spell-priest-level7-misc}" class="sheet-short" value="0"></td>
<td><input type="text" name="attr_spell-priest-level7-total" title="@{spell-priest-level7-total}" class="sheet-short" value="0" readonly></td>
</tr>
</table>
<table class="sheet-default-header-thead sheet-inline-5">
<thead>
<tr>
<th colspan="3" class="sheet-centering">Available to</th>
</tr>
<tr>
<th>Memorize</th>
<th class="sheet-centering-padding-5">|</th>
<th>Cast</th>
</tr>
</thead>
<tr>
<td><input type="text" name="attr_spell-priest-level7-selected" title="@{spell-priest-level7-selected}" value="0" class="sheet-table-dynamic" readonly></td>
<td class="sheet-centering">|</td>
<td><input type="text" name="attr_spell-priest-level7-remaining" title="@{spell-priest-level7-remaining}" value="0" class="sheet-short" readonly></td>
</tr>
</table>
<input style="display: none;" name="attr_spell-priest-level7-cast-max-sum" class="sheet-short" value="0">
<input style="display: none;" name="attr_spell-priest-level7-cast-value-sum" class="sheet-short" value="0">
<br><br>
insert_spell-slots-tracking-priest.html_(level7)
<br>
<div class="sheet-body">
<h4>Spells Memorized and Spell Book</h4>
<br>
<h4>Spells Memorized</h4>
insert_priest-spell-template.html_(pri7,,[[@{wisfail}]]%)
<div class="sheet-3colrow">
@@ -457,46 +207,9 @@
</div>
<div class="sheet-tab-content sheet-section-priest-quest">
<table class="sheet-default-header-first-row sheet-default-header-first-column sheet-inline-5">
<tr>
<th></th>
<th title="Spell slots gained from levels">Level</th>
<th title="Spell slots gained from Wisdom" class="sheet-padding-right">Wisdom</th>
<th title="Spell slots gained from other sources">Misc.</th>
<th title="Total number of spell slots">Total</th>
</tr>
<tr>
<td>Spell Slots</td>
<td><input type="text" name="attr_spell-priest-levelq-castable" title="@{spell-priest-levelq-castable}" class="sheet-short" value="0"></td>
<td><input type="text" name="attr_spell-priest-levelq-wisdom" title="@{spell-priest-levelq-wisdom}" class="sheet-table-dynamic" value="0"/></td>
<td><input type="text" name="attr_spell-priest-levelq-misc" title="@{spell-priest-levelq-misc}" class="sheet-short" value="0"></td>
<td><input type="text" name="attr_spell-priest-levelq-total" title="@{spell-priest-levelq-total}" class="sheet-short" value="0" readonly></td>
</tr>
</table>
<table class="sheet-default-header-thead sheet-inline-5">
<thead>
<tr>
<th colspan="3" class="sheet-centering">Available to</th>
</tr>
<tr>
<th>Memorize</th>
<th class="sheet-centering-padding-5">|</th>
<th>Cast</th>
</tr>
</thead>
<tr>
<td><input type="text" name="attr_spell-priest-levelq-selected" title="@{spell-priest-levelq-selected}" value="0" class="sheet-table-dynamic" readonly></td>
<td class="sheet-centering">|</td>
<td><input type="text" name="attr_spell-priest-levelq-remaining" title="@{spell-priest-levelq-remaining}" value="0" class="sheet-short" readonly></td>
</tr>
</table>
<input style="display: none;" name="attr_spell-priest-levelq-cast-max-sum" class="sheet-short" value="0">
<input style="display: none;" name="attr_spell-priest-levelq-cast-value-sum" class="sheet-short" value="0">
<br><br>
insert_spell-slots-tracking-priest.html_(levelq)
<br>
<div class="sheet-body">
<h4>Spells Memorized and Spell Book</h4>
<br>
<h4>Spells Memorized</h4>
insert_priest-spell-template.html_(priq,,[[@{wisfail}]]%)
<div class="sheet-3colrow">
@@ -19,46 +19,7 @@
<input type="radio" name="attr_tab6" class="sheet-tab sheet-tab58" value="15"/><span class="sheet-tab sheet-tab58">Level 15</span>
<br><br>
<input type="checkbox" class="sheet-show-spell-points-wiz" value="1" title="Show Spell points and Arc"/><span></span><b title="Show Spells points and Arc">Spell Points & Arc - Player's Option: Spells & Magic</b>
<div class="sheet-spell-points-wiz">
<table class="sheet-default-header-first-row sheet-default-header-first-column">
<tr>
<td></td>
<td>Level</td>
<td class="sheet-padding-right">Specialist</td>
<td class="sheet-padding-right">Intelligence</td>
<td>Total</td>
<td class="sheet-centering-padding-5">|</td>
<td>Remaining</td>
</tr>
<tr>
<td>Spell Points</td>
<td><input type="number" name="attr_spell-points-lvl" title="@{spell-points-lvl}" class="sheet-short" value="0"></td>
<td><input type="number" name="attr_spell-points-spc" title="@{spell-points-spc}" class="sheet-table-dynamic" value="0"></td>
<td><input type="number" name="attr_spell-points-int" title="@{spell-points-int}" class="sheet-table-dynamic" value="0"></td>
<td><input type="text" name="attr_spell-points-total" title="@{spell-points-total}" class="sheet-short" value="0" readonly></td>
<td class="sheet-centering">|</td>
<td><input type="text" name="attr_spell-points-remaining" title="@{spell-points-remaining}" class="sheet-table-dynamic" value="0" readonly></td>
</tr>
</table>
<input style="display: none;" name="attr_spell-points-sum" value="0">
<br>
<table class="sheet-default-header-first-row sheet-default-header-first-column">
<tr>
<td></td>
<td>Total</td>
<td>Remaining</td>
</tr>
<tr>
<td>Arc</td>
<td><input type="number" name="attr_total-arc" title="@{total-arc}" class="sheet-short" value="0"></td>
<td><input type="text" name="attr_total-arc-remaining" title="@{total-arc-remaining}" value="0" class="sheet-table-dynamic" readonly></td>
</tr>
</table>
<input style="display: none;" name="attr_total-arc-sum" value="0">
</div>
<hr>
<table class="sheet-default-header-first-row sheet-inline-5">
<table class="sheet-default-header-first-row">
<tr>
<td>Wizard caster level</td>
</tr>
@@ -66,53 +27,55 @@
<td><input type="text" name="attr_level-wizard" title="@{level-wizard}" class="sheet-display" placeholder="Select level" list="level-select"></td>
</tr>
</table>
<br>
<div class="sheet-spell-points sheet-hidden">
<table class="sheet-default-header-first-row sheet-default-header-first-column">
<tr>
<td></td>
<td>Level</td>
<td class="sheet-padding-right">Specialist</td>
<td class="sheet-padding-right" colspan="2">Intelligence</td>
<td>Total</td>
<td class="sheet-centering-padding-5">|</td>
<td>Remaining</td>
</tr>
<tr>
<td>Spell Points</td>
<td><input type="number" name="attr_spell-points-lvl" title="@{spell-points-lvl}" class="sheet-mediumish" value="0"></td>
<td><input type="number" name="attr_spell-points-spc" title="@{spell-points-spc}" class="sheet-table-dynamic" value="0"></td>
<td><input type="number" name="attr_spell-points-int" title="@{spell-points-int}" class="sheet-table-dynamic" value="0"></td>
<td><label><input type="checkbox" name="attr_spell-points-int-enabled" title="@{spell-points-int-enabled}" value="1" checked/><span></span></label></td>
<td><input type="text" name="attr_spell-points-total" title="@{spell-points-total}" class="sheet-short" value="0" readonly></td>
<td class="sheet-centering">|</td>
<td><input type="text" name="attr_spell-points-remaining" title="@{spell-points-remaining}" class="sheet-table-dynamic" value="0" readonly></td>
</tr>
</table>
<details>
<summary>Bonus spell points from high Intelligence to Wizards</summary>
Under this optional rule, wizard characters gain a number of bonus spell points, based on their Intelligence score. Player's Options: Spells & Powers, p. 79
</details>
</div>
<table class="sheet-default-header-first-row sheet-default-header-first-column sheet-spell-arcs-winds sheet-hidden">
<tr>
<td></td>
<td>Total</td>
<td class="sheet-centering-padding-5">|</td>
<td>Remaining</td>
</tr>
<tr>
<td>Arcs</td>
<td><input type="number" name="attr_total-arc" title="@{total-arc}" class="sheet-mediumish" value="0"></td>
<td class="sheet-centering">|</td>
<td><input type="text" name="attr_total-arc-remaining" title="@{total-arc-remaining}" value="0" class="sheet-table-dynamic" readonly></td>
</tr>
</table>
insert_spell-slots-reset-button.html_(wiz)
<div class="sheet-tab-content sheet-section-wizard-level-one">
<table class="sheet-default-header-first-row sheet-default-header-first-column sheet-inline-5">
<tr>
<th></th>
<th title="Spell slots gained from levels">Level</th>
<th title="+1 spell slot from being a specialist" class="sheet-padding-right">Specialist</th>
<th title="Spell slots gained from other sources">Misc.</th>
<th title="Total number of spell slots">Total</th>
<th>/</th>
<th title="Maximum number of spell slots allowed by Intelligence">Max</th>
</tr>
<tr>
<td>Spell Slots</td>
<td><input type="text" name="attr_spell-level1-castable" title="@{spell-level1-castable}" class="sheet-short" value="0"></td>
<td class="sheet-centering"><label><input type="checkbox" name="attr_spell-level1-specialist" title="@{spell-level1-specialist}" value="1"/><span></span></label></td>
<td><input type="text" name="attr_spell-level1-misc" title="@{spell-level1-misc}" class="sheet-short" value="0"></td>
<td><input type="text" name="attr_spell-level1-total" title="@{spell-level1-total}" class="sheet-short" value="0" readonly></td>
<td>/</td>
<td><input type="text" name="attr_intmax" title="@{intmax}" class="sheet-short" value="0" readonly></td>
</tr>
</table>
<table class="sheet-default-header-thead sheet-inline-5">
<thead>
<tr>
<th colspan="3" class="sheet-centering">Available to</th>
</tr>
<tr>
<th>Memorize</th>
<th class="sheet-centering-padding-5">|</th>
<th>Cast</th>
</tr>
</thead>
<tr>
<td><input type="text" name="attr_spell-level1-selected" title="@{spell-level1-selected}" value="0" class="sheet-table-dynamic" readonly></td>
<td class="sheet-centering">|</td>
<td><input type="text" name="attr_spell-level1-remaining" title="@{spell-level1-remaining}" value="0" class="sheet-short" readonly></td>
</tr>
</table>
<input style="display: none;" name="attr_spell-level1-cast-max-sum" class="sheet-short" value="0">
<input style="display: none;" name="attr_spell-level1-cast-value-sum" class="sheet-short" value="0">
<br><br>
insert_spell-slots-tracking-wizard.html_(level1)
<br>
<div class="sheet-body">
<h4>Spells Memorized and Spell Book</h4>
<br>
<h4>Spells Memorized</h4>
insert_wizard-spell-template.html_(wiz1)
<div class="sheet-3colrow">
@@ -127,50 +90,9 @@
</div>
<div class="sheet-tab-content sheet-section-wizard-level-two">
<table class="sheet-default-header-first-row sheet-default-header-first-column sheet-inline-5">
<tr>
<th></th>
<th title="Spell slots gained from levels">Level</th>
<th title="+1 spell slot from being a specialist" class="sheet-padding-right">Specialist</th>
<th title="Spell slots gained from other sources">Misc.</th>
<th title="Total number of spell slots">Total</th>
<th>/</th>
<th title="Maximum number of spell slots allowed by Intelligence">Max</th>
</tr>
<tr>
<td>Spell Slots</td>
<td><input type="text" name="attr_spell-level2-castable" title="@{spell-level2-castable}" class="sheet-short" value="0"></td>
<td class="sheet-centering"><label><input type="checkbox" name="attr_spell-level2-specialist" title="@{spell-level2-specialist}" value="1"/><span></span></label></td>
<td><input type="text" name="attr_spell-level2-misc" title="@{spell-level2-misc}" class="sheet-short" value="0"></td>
<td><input type="text" name="attr_spell-level2-total" title="@{spell-level2-total}" class="sheet-short" value="0" readonly></td>
<td>/</td>
<td><input type="text" name="attr_intmax" title="@{intmax}" class="sheet-short" value="0" readonly></td>
</tr>
</table>
<table class="sheet-default-header-thead sheet-inline-5">
<thead>
<tr>
<th colspan="3" class="sheet-centering">Available to</th>
</tr>
<tr>
<th>Memorize</th>
<th class="sheet-centering-padding-5">|</th>
<th>Cast</th>
</tr>
</thead>
<tr>
<td><input type="text" name="attr_spell-level2-selected" title="@{spell-level2-selected}" value="0" class="sheet-table-dynamic" readonly></td>
<td class="sheet-centering">|</td>
<td><input type="text" name="attr_spell-level2-remaining" title="@{spell-level2-remaining}" value="0" class="sheet-short" readonly></td>
</tr>
</table>
<input style="display: none;" name="attr_spell-level2-cast-max-sum" class="sheet-short" value="0">
<input style="display: none;" name="attr_spell-level2-cast-value-sum" class="sheet-short" value="0">
<br><br>
insert_spell-slots-tracking-wizard.html_(level2)
<br>
<div class="sheet-body">
<h4>Spells Memorized and Spell Book</h4>
<br>
<h4>Spells Memorized</h4>
insert_wizard-spell-template.html_(wiz2)
<div class="sheet-3colrow">
@@ -185,50 +107,9 @@
</div>
<div class="sheet-tab-content sheet-section-wizard-level-three">
<table class="sheet-default-header-first-row sheet-default-header-first-column sheet-inline-5">
<tr>
<th></th>
<th title="Spell slots gained from levels">Level</th>
<th title="+1 spell slot from being a specialist" class="sheet-padding-right">Specialist</th>
<th title="Spell slots gained from other sources">Misc.</th>
<th title="Total number of spell slots">Total</th>
<th>/</th>
<th title="Maximum number of spell slots allowed by Intelligence">Max</th>
</tr>
<tr>
<td>Spell Slots</td>
<td><input type="text" name="attr_spell-level3-castable" title="@{spell-level3-castable}" class="sheet-short" value="0"></td>
<td class="sheet-centering"><label><input type="checkbox" name="attr_spell-level3-specialist" title="@{spell-level3-specialist}" value="1"/><span></span></label></td>
<td><input type="text" name="attr_spell-level3-misc" title="@{spell-level3-misc}" class="sheet-short" value="0"></td>
<td><input type="text" name="attr_spell-level3-total" title="@{spell-level3-total}" class="sheet-short" value="0" readonly></td>
<td>/</td>
<td><input type="text" name="attr_intmax" title="@{intmax}" class="sheet-short" value="0" readonly></td>
</tr>
</table>
<table class="sheet-default-header-thead sheet-inline-5">
<thead>
<tr>
<th colspan="3" class="sheet-centering">Available to</th>
</tr>
<tr>
<th>Memorize</th>
<th class="sheet-centering-padding-5">|</th>
<th>Cast</th>
</tr>
</thead>
<tr>
<td><input type="text" name="attr_spell-level3-selected" title="@{spell-level3-selected}" value="0" class="sheet-table-dynamic" readonly></td>
<td class="sheet-centering">|</td>
<td><input type="text" name="attr_spell-level3-remaining" title="@{spell-level3-remaining}" value="0" class="sheet-short" readonly></td>
</tr>
</table>
<input style="display: none;" name="attr_spell-level3-cast-max-sum" class="sheet-short" value="0">
<input style="display: none;" name="attr_spell-level3-cast-value-sum" class="sheet-short" value="0">
<br><br>
insert_spell-slots-tracking-wizard.html_(level3)
<br>
<div class="sheet-body">
<h4>Spells Memorized and Spell Book</h4>
<br>
<h4>Spells Memorized</h4>
insert_wizard-spell-template.html_(wiz3)
<div class="sheet-3colrow">
@@ -243,50 +124,9 @@
</div>
<div class="sheet-tab-content sheet-section-wizard-level-four">
<table class="sheet-default-header-first-row sheet-default-header-first-column sheet-inline-5">
<tr>
<th></th>
<th title="Spell slots gained from levels">Level</th>
<th title="+1 spell slot from being a specialist" class="sheet-padding-right">Specialist</th>
<th title="Spell slots gained from other sources">Misc.</th>
<th title="Total number of spell slots">Total</th>
<th>/</th>
<th title="Maximum number of spell slots allowed by Intelligence">Max</th>
</tr>
<tr>
<td>Spell Slots</td>
<td><input type="text" name="attr_spell-level4-castable" title="@{spell-level4-castable}" class="sheet-short" value="0"></td>
<td class="sheet-centering"><label><input type="checkbox" name="attr_spell-level4-specialist" title="@{spell-level4-specialist}" value="1"/><span></span></label></td>
<td><input type="text" name="attr_spell-level4-misc" title="@{spell-level4-misc}" class="sheet-short" value="0"></td>
<td><input type="text" name="attr_spell-level4-total" title="@{spell-level4-total}" class="sheet-short" value="0" readonly></td>
<td>/</td>
<td><input type="text" name="attr_intmax" title="@{intmax}" class="sheet-short" value="0" readonly></td>
</tr>
</table>
<table class="sheet-default-header-thead sheet-inline-5">
<thead>
<tr>
<th colspan="3" class="sheet-centering">Available to</th>
</tr>
<tr>
<th>Memorize</th>
<th class="sheet-centering-padding-5">|</th>
<th>Cast</th>
</tr>
</thead>
<tr>
<td><input type="text" name="attr_spell-level4-selected" title="@{spell-level4-selected}" value="0" class="sheet-table-dynamic" readonly></td>
<td class="sheet-centering">|</td>
<td><input type="text" name="attr_spell-level4-remaining" title="@{spell-level4-remaining}" value="0" class="sheet-short" readonly></td>
</tr>
</table>
<input style="display: none;" name="attr_spell-level4-cast-max-sum" class="sheet-short" value="0">
<input style="display: none;" name="attr_spell-level4-cast-value-sum" class="sheet-short" value="0">
<br><br>
insert_spell-slots-tracking-wizard.html_(level4)
<br>
<div class="sheet-body">
<h4>Spells Memorized and Spell Book</h4>
<br>
<h4>Spells Memorized</h4>
insert_wizard-spell-template.html_(wiz4)
<div class="sheet-3colrow">
@@ -301,50 +141,9 @@
</div>
<div class="sheet-tab-content sheet-section-wizard-level-five">
<table class="sheet-default-header-first-row sheet-default-header-first-column sheet-inline-5">
<tr>
<th></th>
<th title="Spell slots gained from levels">Level</th>
<th title="+1 spell slot from being a specialist" class="sheet-padding-right">Specialist</th>
<th title="Spell slots gained from other sources">Misc.</th>
<th title="Total number of spell slots">Total</th>
<th>/</th>
<th title="Maximum number of spell slots allowed by Intelligence">Max</th>
</tr>
<tr>
<td>Spell Slots</td>
<td><input type="text" name="attr_spell-level5-castable" title="@{spell-level5-castable}" class="sheet-short" value="0"></td>
<td class="sheet-centering"><label><input type="checkbox" name="attr_spell-level5-specialist" title="@{spell-level5-specialist}" value="1"/><span></span></label></td>
<td><input type="text" name="attr_spell-level5-misc" title="@{spell-level5-misc}" class="sheet-short" value="0"></td>
<td><input type="text" name="attr_spell-level5-total" title="@{spell-level5-total}" class="sheet-short" value="0" readonly></td>
<td>/</td>
<td><input type="text" name="attr_intmax" title="@{intmax}" class="sheet-short" value="0" readonly></td>
</tr>
</table>
<table class="sheet-default-header-thead sheet-inline-5">
<thead>
<tr>
<th colspan="3" class="sheet-centering">Available to</th>
</tr>
<tr>
<th>Memorize</th>
<th class="sheet-centering-padding-5">|</th>
<th>Cast</th>
</tr>
</thead>
<tr>
<td><input type="text" name="attr_spell-level5-selected" title="@{spell-level5-selected}" value="0" class="sheet-table-dynamic" readonly></td>
<td class="sheet-centering">|</td>
<td><input type="text" name="attr_spell-level5-remaining" title="@{spell-level5-remaining}" value="0" class="sheet-short" readonly></td>
</tr>
</table>
<input style="display: none;" name="attr_spell-level5-cast-max-sum" class="sheet-short" value="0">
<input style="display: none;" name="attr_spell-level5-cast-value-sum" class="sheet-short" value="0">
<br><br>
insert_spell-slots-tracking-wizard.html_(level5)
<br>
<div class="sheet-body">
<h4>Spells Memorized and Spell Book</h4>
<br>
<h4>Spells Memorized</h4>
insert_wizard-spell-template.html_(wiz5)
<div class="sheet-3colrow">
@@ -359,51 +158,9 @@
</div>
<div class="sheet-tab-content sheet-section-wizard-level-six">
<table class="sheet-default-header-first-row sheet-default-header-first-column sheet-inline-5">
<tr>
<th></th>
<th title="Spell slots gained from levels">Level</th>
<th title="+1 spell slot from being a specialist" class="sheet-padding-right">Specialist</th>
<th title="Spell slots gained from other sources">Misc.</th>
<th title="Total number of spell slots">Total</th>
<th>/</th>
<th title="Maximum number of spell slots allowed by Intelligence">Max</th>
</tr>
<tr>
<td>Spell Slots</td>
<td><input type="text" name="attr_spell-level6-castable" title="@{spell-level6-castable}" class="sheet-short" value="0"></td>
<td class="sheet-centering"><label><input type="checkbox" name="attr_spell-level6-specialist" title="@{spell-level6-specialist}" value="1"/><span></span></label></td>
<td><input type="text" name="attr_spell-level6-misc" title="@{spell-level6-misc}" class="sheet-short" value="0"></td>
<td><input type="text" name="attr_spell-level6-total" title="@{spell-level6-total}" class="sheet-short" value="0" readonly></td>
<td>/</td>
<td><input type="text" name="attr_intmax" title="@{intmax}" class="sheet-short" value="0" readonly></td>
</tr>
</table>
<table class="sheet-default-header-thead sheet-inline-5">
<thead>
<tr>
<th colspan="3" class="sheet-centering">Available to</th>
</tr>
<tr>
<th>Memorize</th>
<th class="sheet-centering-padding-5">|</th>
<th>Cast</th>
</tr>
</thead>
<tr>
<td><input type="text" name="attr_spell-level6-selected" title="@{spell-level6-selected}" value="0" class="sheet-table-dynamic" readonly></td>
<td class="sheet-centering">|</td>
<td><input type="text" name="attr_spell-level6-remaining" title="@{spell-level6-remaining}" value="0" class="sheet-short" readonly></td>
</tr>
</table>
<input style="display: none;" name="attr_spell-level6-cast-max-sum" class="sheet-short" value="0">
<input style="display: none;" name="attr_spell-level6-cast-value-sum" class="sheet-short" value="0">
<br><br>
insert_spell-slots-tracking-wizard.html_(level6)
<br>
<div class="sheet-body">
<h4>Spells Memorized and Spell Book</h4>
<br>
<h4>Spells Memorized</h4>
insert_wizard-spell-template.html_(wiz6)
<div class="sheet-3colrow">
@@ -418,50 +175,9 @@
</div>
<div class="sheet-tab-content sheet-section-wizard-level-seven">
<table class="sheet-default-header-first-row sheet-default-header-first-column sheet-inline-5">
<tr>
<th></th>
<th title="Spell slots gained from levels">Level</th>
<th title="+1 spell slot from being a specialist" class="sheet-padding-right">Specialist</th>
<th title="Spell slots gained from other sources">Misc.</th>
<th title="Total number of spell slots">Total</th>
<th>/</th>
<th title="Maximum number of spell slots allowed by Intelligence">Max</th>
</tr>
<tr>
<td>Spell Slots</td>
<td><input type="text" name="attr_spell-level7-castable" title="@{spell-level7-castable}" class="sheet-short" value="0"></td>
<td class="sheet-centering"><label><input type="checkbox" name="attr_spell-level7-specialist" title="@{spell-level7-specialist}" value="1"/><span></span></label></td>
<td><input type="text" name="attr_spell-level7-misc" title="@{spell-level7-misc}" class="sheet-short" value="0"></td>
<td><input type="text" name="attr_spell-level7-total" title="@{spell-level7-total}" class="sheet-short" value="0" readonly></td>
<td>/</td>
<td><input type="text" name="attr_intmax" title="@{intmax}" class="sheet-short" value="0" readonly></td>
</tr>
</table>
<table class="sheet-default-header-thead sheet-inline-5">
<thead>
<tr>
<th colspan="3" class="sheet-centering">Available to</th>
</tr>
<tr>
<th>Memorize</th>
<th class="sheet-centering-padding-5">|</th>
<th>Cast</th>
</tr>
</thead>
<tr>
<td><input type="text" name="attr_spell-level7-selected" title="@{spell-level7-selected}" value="0" class="sheet-table-dynamic" readonly></td>
<td class="sheet-centering">|</td>
<td><input type="text" name="attr_spell-level7-remaining" title="@{spell-level7-remaining}" value="0" class="sheet-short" readonly></td>
</tr>
</table>
<input style="display: none;" name="attr_spell-level7-cast-max-sum" class="sheet-short" value="0">
<input style="display: none;" name="attr_spell-level7-cast-value-sum" class="sheet-short" value="0">
<br><br>
insert_spell-slots-tracking-wizard.html_(level7)
<br>
<div class="sheet-body">
<h4>Spells Memorized and Spell Book</h4>
<br>
<h4>Spells Memorized</h4>
insert_wizard-spell-template.html_(wiz7)
<div class="sheet-3colrow">
@@ -476,50 +192,9 @@
</div>
<div class="sheet-tab-content sheet-section-wizard-level-eight">
<table class="sheet-default-header-first-row sheet-default-header-first-column sheet-inline-5">
<tr>
<th></th>
<th title="Spell slots gained from levels">Level</th>
<th title="+1 spell slot from being a specialist" class="sheet-padding-right">Specialist</th>
<th title="Spell slots gained from other sources">Misc.</th>
<th title="Total number of spell slots">Total</th>
<th>/</th>
<th title="Maximum number of spell slots allowed by Intelligence">Max</th>
</tr>
<tr>
<td>Spell Slots</td>
<td><input type="text" name="attr_spell-level8-castable" title="@{spell-level8-castable}" class="sheet-short" value="0"></td>
<td class="sheet-centering"><label><input type="checkbox" name="attr_spell-level8-specialist" title="@{spell-level8-specialist}" value="1"/><span></span></label></td>
<td><input type="text" name="attr_spell-level8-misc" title="@{spell-level8-misc}" class="sheet-short" value="0"></td>
<td><input type="text" name="attr_spell-level8-total" title="@{spell-level8-total}" class="sheet-short" value="0" readonly></td>
<td>/</td>
<td><input type="text" name="attr_intmax" title="@{intmax}" class="sheet-short" value="0" readonly></td>
</tr>
</table>
<table class="sheet-default-header-thead sheet-inline-5">
<thead>
<tr>
<th colspan="3" class="sheet-centering">Available to</th>
</tr>
<tr>
<th>Memorize</th>
<th class="sheet-centering-padding-5">|</th>
<th>Cast</th>
</tr>
</thead>
<tr>
<td><input type="text" name="attr_spell-level8-selected" title="@{spell-level8-selected}" value="0" class="sheet-table-dynamic" readonly></td>
<td class="sheet-centering">|</td>
<td><input type="text" name="attr_spell-level8-remaining" title="@{spell-level8-remaining}" value="0" class="sheet-short" readonly></td>
</tr>
</table>
<input style="display: none;" name="attr_spell-level8-cast-max-sum" class="sheet-short" value="0">
<input style="display: none;" name="attr_spell-level8-cast-value-sum" class="sheet-short" value="0">
<br><br>
insert_spell-slots-tracking-wizard.html_(level8)
<br>
<div class="sheet-body">
<h4>Spells Memorized and Spell Book</h4>
<br>
<h4>Spells Memorized</h4>
insert_wizard-spell-template.html_(wiz8)
<div class="sheet-3colrow">
@@ -534,50 +209,9 @@
</div>
<div class="sheet-tab-content sheet-section-wizard-level-nine">
<table class="sheet-default-header-first-row sheet-default-header-first-column sheet-inline-5">
<tr>
<th></th>
<th title="Spell slots gained from levels">Level</th>
<th title="+1 spell slot from being a specialist" class="sheet-padding-right">Specialist</th>
<th title="Spell slots gained from other sources">Misc.</th>
<th title="Total number of spell slots">Total</th>
<th>/</th>
<th title="Maximum number of spell slots allowed by Intelligence">Max</th>
</tr>
<tr>
<td>Spell Slots</td>
<td><input type="text" name="attr_spell-level9-castable" title="@{spell-level9-castable}" class="sheet-short" value="0"></td>
<td class="sheet-centering"><label><input type="checkbox" name="attr_spell-level9-specialist" title="@{spell-level9-specialist}" value="1"/><span></span></label></td>
<td><input type="text" name="attr_spell-level9-misc" title="@{spell-level9-misc}" class="sheet-short" value="0"></td>
<td><input type="text" name="attr_spell-level9-total" title="@{spell-level9-total}" class="sheet-short" value="0" readonly></td>
<td>/</td>
<td><input type="text" name="attr_intmax" title="@{intmax}" class="sheet-short" value="0" readonly></td>
</tr>
</table>
<table class="sheet-default-header-thead sheet-inline-5">
<thead>
<tr>
<th colspan="3" class="sheet-centering">Available to</th>
</tr>
<tr>
<th>Memorize</th>
<th class="sheet-centering-padding-5">|</th>
<th>Cast</th>
</tr>
</thead>
<tr>
<td><input type="text" name="attr_spell-level9-selected" title="@{spell-level9-selected}" value="0" class="sheet-table-dynamic" readonly></td>
<td class="sheet-centering">|</td>
<td><input type="text" name="attr_spell-level9-remaining" title="@{spell-level9-remaining}" value="0" class="sheet-short" readonly></td>
</tr>
</table>
<input style="display: none;" name="attr_spell-level9-cast-max-sum" class="sheet-short" value="0">
<input style="display: none;" name="attr_spell-level9-cast-value-sum" class="sheet-short" value="0">
<br><br>
insert_spell-slots-tracking-wizard.html_(level9)
<br>
<div class="sheet-body">
<h4>Spells Memorized and Spell Book</h4>
<br>
<h4>Spells Memorized</h4>
insert_wizard-spell-template.html_(wiz9)
<div class="sheet-3colrow">
@@ -592,50 +226,9 @@
</div>
<div class="sheet-tab-content sheet-section-wizard-level-ten">
<table class="sheet-default-header-first-row sheet-default-header-first-column sheet-inline-5">
<tr>
<th></th>
<th title="Spell slots gained from levels">Level</th>
<th title="+1 spell slot from being a specialist" class="sheet-padding-right">Specialist</th>
<th title="Spell slots gained from other sources">Misc.</th>
<th title="Total number of spell slots">Total</th>
<th>/</th>
<th title="Maximum number of spell slots allowed by Intelligence">Max</th>
</tr>
<tr>
<td>Spell Slots</td>
<td><input type="text" name="attr_spell-level10-castable" title="@{spell-level10-castable}" class="sheet-short" value="0"></td>
<td class="sheet-centering"><label><input type="checkbox" name="attr_spell-level10-specialist" title="@{spell-level10-specialist}" value="1"/><span></span></label></td>
<td><input type="text" name="attr_spell-level10-misc" title="@{spell-level10-misc}" class="sheet-short" value="0"></td>
<td><input type="text" name="attr_spell-level10-total" title="@{spell-level10-total}" class="sheet-short" value="0" readonly></td>
<td>/</td>
<td><input type="text" name="attr_intmax" title="@{intmax}" class="sheet-short" value="0" readonly></td>
</tr>
</table>
<table class="sheet-default-header-thead sheet-inline-5">
<thead>
<tr>
<th colspan="3" class="sheet-centering">Available to</th>
</tr>
<tr>
<th>Memorize</th>
<th class="sheet-centering-padding-5">|</th>
<th>Cast</th>
</tr>
</thead>
<tr>
<td><input type="text" name="attr_spell-level10-selected" title="@{spell-level10-selected}" value="0" class="sheet-table-dynamic" readonly></td>
<td class="sheet-centering">|</td>
<td><input type="text" name="attr_spell-level10-remaining" title="@{spell-level10-remaining}" value="0" class="sheet-short" readonly></td>
</tr>
</table>
<input style="display: none;" name="attr_spell-level10-cast-max-sum" class="sheet-short" value="0">
<input style="display: none;" name="attr_spell-level10-cast-value-sum" class="sheet-short" value="0">
<br><br>
insert_spell-slots-tracking-wizard.html_(level10)
<br>
<div class="sheet-body">
<h4>Spells Memorized and Spell Book</h4>
<br>
<h4>Spells Memorized</h4>
insert_wizard-spell-template.html_(wiz10)
<div class="sheet-3colrow">
@@ -650,50 +243,9 @@
</div>
<div class="sheet-tab-content sheet-section-wizard-level-eleven">
<table class="sheet-default-header-first-row sheet-default-header-first-column sheet-inline-5">
<tr>
<th></th>
<th title="Spell slots gained from levels">Level</th>
<th title="+1 spell slot from being a specialist" class="sheet-padding-right">Specialist</th>
<th title="Spell slots gained from other sources">Misc.</th>
<th title="Total number of spell slots">Total</th>
<th>/</th>
<th title="Maximum number of spell slots allowed by Intelligence">Max</th>
</tr>
<tr>
<td>Spell Slots</td>
<td><input type="text" name="attr_spell-level11-castable" title="@{spell-level11-castable}" class="sheet-short" value="0"></td>
<td class="sheet-centering"><label><input type="checkbox" name="attr_spell-level11-specialist" title="@{spell-level11-specialist}" value="1"/><span></span></label></td>
<td><input type="text" name="attr_spell-level11-misc" title="@{spell-level11-misc}" class="sheet-short" value="0"></td>
<td><input type="text" name="attr_spell-level11-total" title="@{spell-level11-total}" class="sheet-short" value="0" readonly></td>
<td>/</td>
<td><input type="text" name="attr_intmax" title="@{intmax}" class="sheet-short" value="0" readonly></td>
</tr>
</table>
<table class="sheet-default-header-thead sheet-inline-5">
<thead>
<tr>
<th colspan="3" class="sheet-centering">Available to</th>
</tr>
<tr>
<th>Memorize</th>
<th class="sheet-centering-padding-5">|</th>
<th>Cast</th>
</tr>
</thead>
<tr>
<td><input type="text" name="attr_spell-level11-selected" title="@{spell-level11-selected}" value="0" class="sheet-table-dynamic" readonly></td>
<td class="sheet-centering">|</td>
<td><input type="text" name="attr_spell-level11-remaining" title="@{spell-level11-remaining}" value="0" class="sheet-short" readonly></td>
</tr>
</table>
<input style="display: none;" name="attr_spell-level11-cast-max-sum" class="sheet-short" value="0">
<input style="display: none;" name="attr_spell-level11-cast-value-sum" class="sheet-short" value="0">
<br><br>
insert_spell-slots-tracking-wizard.html_(level11)
<br>
<div class="sheet-body">
<h4>Spells Memorized and Spell Book</h4>
<br>
<h4>Spells Memorized</h4>
insert_wizard-spell-template.html_(wiz11)
<div class="sheet-3colrow">
@@ -708,50 +260,9 @@
</div>
<div class="sheet-tab-content sheet-section-wizard-level-twelve">
<table class="sheet-default-header-first-row sheet-default-header-first-column sheet-inline-5">
<tr>
<th></th>
<th title="Spell slots gained from levels">Level</th>
<th title="+1 spell slot from being a specialist" class="sheet-padding-right">Specialist</th>
<th title="Spell slots gained from other sources">Misc.</th>
<th title="Total number of spell slots">Total</th>
<th>/</th>
<th title="Maximum number of spell slots allowed by Intelligence">Max</th>
</tr>
<tr>
<td>Spell Slots</td>
<td><input type="text" name="attr_spell-level12-castable" title="@{spell-level12-castable}" class="sheet-short" value="0"></td>
<td class="sheet-centering"><label><input type="checkbox" name="attr_spell-level12-specialist" title="@{spell-level12-specialist}" value="1"/><span></span></label></td>
<td><input type="text" name="attr_spell-level12-misc" title="@{spell-level12-misc}" class="sheet-short" value="0"></td>
<td><input type="text" name="attr_spell-level12-total" title="@{spell-level12-total}" class="sheet-short" value="0" readonly></td>
<td>/</td>
<td><input type="text" name="attr_intmax" title="@{intmax}" class="sheet-short" value="0" readonly></td>
</tr>
</table>
<table class="sheet-default-header-thead sheet-inline-5">
<thead>
<tr>
<th colspan="3" class="sheet-centering">Available to</th>
</tr>
<tr>
<th>Memorize</th>
<th class="sheet-centering-padding-5">|</th>
<th>Cast</th>
</tr>
</thead>
<tr>
<td><input type="text" name="attr_spell-level12-selected" title="@{spell-level12-selected}" value="0" class="sheet-table-dynamic" readonly></td>
<td class="sheet-centering">|</td>
<td><input type="text" name="attr_spell-level12-remaining" title="@{spell-level12-remaining}" value="0" class="sheet-short" readonly></td>
</tr>
</table>
<input style="display: none;" name="attr_spell-level12-cast-max-sum" class="sheet-short" value="0">
<input style="display: none;" name="attr_spell-level12-cast-value-sum" class="sheet-short" value="0">
<br><br>
insert_spell-slots-tracking-wizard.html_(level12)
<br>
<div class="sheet-body">
<h4>Spells Memorized and Spell Book</h4>
<br>
<h4>Spells Memorized</h4>
insert_wizard-spell-template.html_(wiz12)
<div class="sheet-3colrow">
@@ -766,50 +277,9 @@
</div>
<div class="sheet-tab-content sheet-section-wizard-level-thirteen">
<table class="sheet-default-header-first-row sheet-default-header-first-column sheet-inline-5">
<tr>
<th></th>
<th title="Spell slots gained from levels">Level</th>
<th title="+1 spell slot from being a specialist" class="sheet-padding-right">Specialist</th>
<th title="Spell slots gained from other sources">Misc.</th>
<th title="Total number of spell slots">Total</th>
<th>/</th>
<th title="Maximum number of spell slots allowed by Intelligence">Max</th>
</tr>
<tr>
<td>Spell Slots</td>
<td><input type="text" name="attr_spell-level13-castable" title="@{spell-level13-castable}" class="sheet-short" value="0"></td>
<td class="sheet-centering"><label><input type="checkbox" name="attr_spell-level13-specialist" title="@{spell-level13-specialist}" value="1"/><span></span></label></td>
<td><input type="text" name="attr_spell-level13-misc" title="@{spell-level13-misc}" class="sheet-short" value="0"></td>
<td><input type="text" name="attr_spell-level13-total" title="@{spell-level13-total}" class="sheet-short" value="0" readonly></td>
<td>/</td>
<td><input type="text" name="attr_intmax" title="@{intmax}" class="sheet-short" value="0" readonly></td>
</tr>
</table>
<table class="sheet-default-header-thead sheet-inline-5">
<thead>
<tr>
<th colspan="3" class="sheet-centering">Available to</th>
</tr>
<tr>
<th>Memorize</th>
<th class="sheet-centering-padding-5">|</th>
<th>Cast</th>
</tr>
</thead>
<tr>
<td><input type="text" name="attr_spell-level13-selected" title="@{spell-level13-selected}" value="0" class="sheet-table-dynamic" readonly></td>
<td class="sheet-centering">|</td>
<td><input type="text" name="attr_spell-level13-remaining" title="@{spell-level13-remaining}" value="0" class="sheet-short" readonly></td>
</tr>
</table>
<input style="display: none;" name="attr_spell-level13-cast-max-sum" class="sheet-short" value="0">
<input style="display: none;" name="attr_spell-level13-cast-value-sum" class="sheet-short" value="0">
<br><br>
insert_spell-slots-tracking-wizard.html_(level13)
<br>
<div class="sheet-body">
<h4>Spells Memorized and Spell Book</h4>
<br>
<h4>Spells Memorized</h4>
insert_wizard-spell-template.html_(wiz13)
<div class="sheet-3colrow">
@@ -824,50 +294,9 @@
</div>
<div class="sheet-tab-content sheet-section-wizard-level-fourteen">
<table class="sheet-default-header-first-row sheet-default-header-first-column sheet-inline-5">
<tr>
<th></th>
<th title="Spell slots gained from levels">Level</th>
<th title="+1 spell slot from being a specialist" class="sheet-padding-right">Specialist</th>
<th title="Spell slots gained from other sources">Misc.</th>
<th title="Total number of spell slots">Total</th>
<th>/</th>
<th title="Maximum number of spell slots allowed by Intelligence">Max</th>
</tr>
<tr>
<td>Spell Slots</td>
<td><input type="text" name="attr_spell-level14-castable" title="@{spell-level14-castable}" class="sheet-short" value="0"></td>
<td class="sheet-centering"><label><input type="checkbox" name="attr_spell-level14-specialist" title="@{spell-level14-specialist}" value="1"/><span></span></label></td>
<td><input type="text" name="attr_spell-level14-misc" title="@{spell-level14-misc}" class="sheet-short" value="0"></td>
<td><input type="text" name="attr_spell-level14-total" title="@{spell-level14-total}" class="sheet-short" value="0" readonly></td>
<td>/</td>
<td><input type="text" name="attr_intmax" title="@{intmax}" class="sheet-short" value="0" readonly></td>
</tr>
</table>
<table class="sheet-default-header-thead sheet-inline-5">
<thead>
<tr>
<th colspan="3" class="sheet-centering">Available to</th>
</tr>
<tr>
<th>Memorize</th>
<th class="sheet-centering-padding-5">|</th>
<th>Cast</th>
</tr>
</thead>
<tr>
<td><input type="text" name="attr_spell-level14-selected" title="@{spell-level14-selected}" value="0" class="sheet-table-dynamic" readonly></td>
<td class="sheet-centering">|</td>
<td><input type="text" name="attr_spell-level14-remaining" title="@{spell-level14-remaining}" value="0" class="sheet-short" readonly></td>
</tr>
</table>
<input style="display: none;" name="attr_spell-level14-cast-max-sum" class="sheet-short" value="0">
<input style="display: none;" name="attr_spell-level14-cast-value-sum" class="sheet-short" value="0">
<br><br>
insert_spell-slots-tracking-wizard.html_(level14)
<br>
<div class="sheet-body">
<h4>Spells Memorized and Spell Book</h4>
<br>
<h4>Spells Memorized</h4>
insert_wizard-spell-template.html_(wiz14)
<div class="sheet-3colrow">
@@ -882,50 +311,9 @@
</div>
<div class="sheet-tab-content sheet-section-wizard-level-fifteen">
<table class="sheet-default-header-first-row sheet-default-header-first-column sheet-inline-5">
<tr>
<th></th>
<th title="Spell slots gained from levels">Level</th>
<th title="+1 spell slot from being a specialist" class="sheet-padding-right">Specialist</th>
<th title="Spell slots gained from other sources">Misc.</th>
<th title="Total number of spell slots">Total</th>
<th>/</th>
<th title="Maximum number of spell slots allowed by Intelligence">Max</th>
</tr>
<tr>
<td>Spell Slots</td>
<td><input type="text" name="attr_spell-level15-castable" title="@{spell-level15-castable}" class="sheet-short" value="0"></td>
<td class="sheet-centering"><label><input type="checkbox" name="attr_spell-level15-specialist" title="@{spell-level15-specialist}" value="1"/><span></span></label></td>
<td><input type="text" name="attr_spell-level15-misc" title="@{spell-level15-misc}" class="sheet-short" value="0"></td>
<td><input type="text" name="attr_spell-level15-total" title="@{spell-level15-total}" class="sheet-short" value="0" readonly></td>
<td>/</td>
<td><input type="text" name="attr_intmax" title="@{intmax}" class="sheet-short" value="0" readonly></td>
</tr>
</table>
<table class="sheet-default-header-thead sheet-inline-5">
<thead>
<tr>
<th colspan="3" class="sheet-centering">Available to</th>
</tr>
<tr>
<th>Memorize</th>
<th class="sheet-centering-padding-5">|</th>
<th>Cast</th>
</tr>
</thead>
<tr>
<td><input type="text" name="attr_spell-level15-selected" title="@{spell-level15-selected}" value="0" class="sheet-table-dynamic" readonly></td>
<td class="sheet-centering">|</td>
<td><input type="text" name="attr_spell-level15-remaining" title="@{spell-level15-remaining}" value="0" class="sheet-short" readonly></td>
</tr>
</table>
<input style="display: none;" name="attr_spell-level15-cast-max-sum" class="sheet-short" value="0">
<input style="display: none;" name="attr_spell-level15-cast-value-sum" class="sheet-short" value="0">
<br><br>
insert_spell-slots-tracking-wizard.html_(level15)
<br>
<div class="sheet-body">
<h4>Spells Memorized and Spell Book</h4>
<br>
<h4>Spells Memorized</h4>
insert_wizard-spell-template.html_(wiz15)
<div class="sheet-3colrow">
+66 -56
View File
@@ -4,134 +4,144 @@
<div class="sheet-body">
<div class='sheet-3colrow'>
<div class='sheet-col'>
<table>
<table class="sheet-table-nowrap sheet-table-full-width-column2">
<tr>
<td><label>Name:</label></td>
<td><input type="text" name="attr_character_name" title="@{character_name}"></td>
<th>Name:</th>
<td><input type="text" name="attr_character_name" title="@{character_name}" class="sheet-table-dynamic"></td>
</tr>
<tr>
<td><label>Climate/Terrain:</label></td>
<td><input type="text" name="attr_climateterrain" title="@{climateterrain}"></td>
<th>Climate/Terrain:</th>
<td><input type="text" name="attr_climateterrain" title="@{climateterrain}" class="sheet-table-dynamic"></td>
</tr>
<tr>
<td><label>Frequency:</label></td>
<td><input type="text" name="attr_frequency" title="@{frequency}" list="monster-frequency"></td>
<th>Frequency:</th>
<td><input type="text" name="attr_frequency" title="@{frequency}" class="sheet-table-dynamic" list="monster-frequency"></td>
</tr>
<tr>
<td><label>Organization:</label></td>
<td><input type="text" name="attr_organization" title="@{organization}"></td>
<th>Organization:</th>
<td><input type="text" name="attr_organization" title="@{organization}" class="sheet-table-dynamic"></td>
</tr>
<tr>
<td><label>Activity Cycle:</label></td>
<td><input type="text" name="attr_cycle" title="@{cycle}"></td>
<th>Activity Cycle:</th>
<td><input type="text" name="attr_cycle" title="@{cycle}" class="sheet-table-dynamic"></td>
</tr>
<tr>
<td><label>Diet:</label></td>
<td><input type="text" name="attr_diet" title="@{diet}"></td>
<th>Diet:</th>
<td><input type="text" name="attr_diet" title="@{diet}" class="sheet-table-dynamic"></td>
</tr>
<tr>
<td><label>Intelligence:</label></td>
<td><input type="text" name="attr_monsterintelligence" title="@{monsterintelligence}" list="monster-intelligence"></td>
<th>Intelligence:</th>
<td><input type="text" name="attr_monsterintelligence" title="@{monsterintelligence}" class="sheet-table-dynamic" list="monster-intelligence"></td>
</tr>
<tr>
<td><label>Treasure:</label></td>
<td><input type="text" name="attr_treasure" title="@{treasure}"></td>
<th>Treasure:</th>
<td><input type="text" name="attr_treasure" title="@{treasure}" class="sheet-table-dynamic"></td>
</tr>
<tr>
<td><label>Alignment:</label></td>
<td><input type="text" name="attr_monsteralignment" title="@{monsteralignment}"></td>
<th>Alignment:</th>
<td><input type="text" name="attr_monsteralignment" title="@{monsteralignment}" class="sheet-table-dynamic"></td>
</tr>
</table>
</div>
<div class='sheet-col'>
<table>
<table class="sheet-table-nowrap sheet-table-full-width-column2">
<tr>
<td><button type="roll" name="roll_surprisemon" title="@{surprisemon}" style="margin: 0 0 0 -4px" value="/w gm &{template:2Einversecheck} {{checkvs=Surprise Check}} {{character=@{character_name}}} {{checkroll=[[1d10+(@{misc-mod})]]}} {{checktarget=[[3]]}} {{color=brown}}">Surprise</button></td>
<th><button type="roll" name="roll_surprisemon" title="@{surprisemon}" style="margin: 0 0 0 -4px" value="/w gm &{template:2Einversecheck} {{checkvs=Surprise Check}} {{character=@{character_name}}} {{checkroll=[[1d10+(@{misc-mod})]]}} {{checktarget=[[3]]}} {{color=brown}}">Surprise</button></th>
<td><button type="roll" name="roll_monmorale" title="@{monmorale}" style="margin: 0" value="/w gm &{template:2Echeck} {{checkvs=Morale Check}} {{character=@{character_name}}} {{checkroll=[[2d10-(@{misc-mod})]]}} {{checktarget=[[@{monstermorale}]]}} {{color=brown}}">Morale</button></td>
</tr>
<tr>
<td><label>No. Appearing:</label></td>
<th>No. Appearing:</th>
<td><input type="text" name="attr_appearing" title="@{appearing}" class="sheet-short"></td>
</tr>
<tr>
<td><label>Armor Class:</label></td>
<th>Armor Class:</th>
<td><input type="text" name="attr_monsterarmor" title="@{monsterarmor}" class="sheet-short"></td>
</tr>
<tr>
<td><label>Movement:</label></td>
<td><input type="text" name="attr_movement" title="@{movement}"></td>
<th>Movement:</th>
<td><input type="text" name="attr_movement" title="@{movement}" class="sheet-table-dynamic"></td>
</tr>
<tr>
<td><label>Hit Dice:</label></td>
<th>Hit Dice:</th>
<td>
<input type="number" name="attr_hitdice" title="@{hitdice}" class="sheet-minish">&plusmn;<input type="number" name="attr_monsterhpextra" title="@{monsterhpextra}" class="sheet-minish" value="0">
|
<input type="number" name="attr_monsterhitdice-reroll" title="@{monsterhitdice-reroll}" class="sheet-minish" value="0">
<button type="roll" name="roll_monsterhitpoints" title="%{monsterhitpoints}" value="/gmroll [@{character_name} Hit Points] (@{hitdice}d8r<@{monsterhitdice-reroll}) + (@{monsterhpextra})"></button>
<table>
<tr>
<td class="sheet-td-dynamic70"><input type="number" name="attr_hitdice" title="@{hitdice}" class="sheet-table-dynamic"></td>
<td style="width: 0;">&plusmn;</td>
<td class="sheet-td-dynamic30"><input type="number" name="attr_monsterhpextra" title="@{monsterhpextra}" class="sheet-table-dynamic" value="0"></td>
<td class="sheet-centering-padding-2">|</td>
<td><input type="number" name="attr_monsterhitdice-reroll" title="@{monsterhitdice-reroll}" class="sheet-minish" value="0" min="0" max="7"></td>
<td><button type="roll" name="roll_monsterhitpoints" title="%{monsterhitpoints}" value="/gmroll [@{character_name} Hit Points] (@{hitdice}d8r<@{monsterhitdice-reroll}) + (@{monsterhpextra})"></button></td>
</tr>
</table>
</td>
</tr>
<tr>
<td><label>Hit Points:</label></td>
<th>Hit Points:</th>
<td>
<input type="number" name="attr_HP" title="@{HP}" class="sheet-short" placeholder="Current">
/
<input type="number" name="attr_HP_max" title="@{HP|max}" class="sheet-short" placeholder="Max">
<table>
<tr>
<td class="sheet-td-dynamic50"><input type="number" name="attr_HP" title="@{HP}" class="sheet-table-dynamic" placeholder="Current"></td>
<td class="sheet-centering-padding-5" style="width: 0;">/</td>
<td class="sheet-td-dynamic50"><input type="number" name="attr_HP_max" title="@{HP|max}" class="sheet-table-dynamic" placeholder="Max"></td>
</tr>
</table>
</td>
</tr>
<tr>
<td><label>THAC0:</label></td>
<th>THAC0:</th>
<td><input type="text" name="attr_monsterthac0" title="@{monsterthac0}" class="sheet-short"></td>
</tr>
<tr>
<td><label># of Attacks:</label></td>
<td><input type="text" name="attr_monsteratknum" title="@{monsteratknum}" class="sheet-small"></td>
<th># of Attacks:</th>
<td><input type="text" name="attr_monsteratknum" title="@{monsteratknum}" class="sheet-short"></td>
</tr>
<tr>
<td><label>Attack 1:</label></td>
<td><input type="text" name="attr_monsterdmg" title="@{monsterdmg}"></td>
<th>Attack 1:</th>
<td><input type="text" name="attr_monsterdmg" title="@{monsterdmg}" class="sheet-table-dynamic"></td>
</tr>
</table>
</div>
<div class='sheet-col'>
<table>
<table class="sheet-table-nowrap sheet-table-full-width-column2">
<tr>
<td></td>
<td><input class="sheet-collapse"></td>
<th></th>
<td><input class="sheet-collapse sheet-table-dynamic"></td>
</tr>
<tr>
<td><label>Attack 2:</label></td>
<td><input type="text" name="attr_monsterdmg2" title="@{monsterdmg2}"></td>
<th>Attack 2:</th>
<td><input type="text" name="attr_monsterdmg2" title="@{monsterdmg2}" class="sheet-table-dynamic"></td>
</tr>
<tr>
<td><label>Attack 3:</label></td>
<td><input type="text" name="attr_monsterdmg3" title="@{monsterdmg3}"></td>
<th>Attack 3:</th>
<td><input type="text" name="attr_monsterdmg3" title="@{monsterdmg3}" class="sheet-table-dynamic"></td>
</tr>
<tr>
<td><label>Special Atk:</label></td>
<td><input type="text" name="attr_monsterspecattacks" title="@{monsterspecattacks}"></td>
<th>Special Atk:</th>
<td><input type="text" name="attr_monsterspecattacks" title="@{monsterspecattacks}" class="sheet-table-dynamic"></td>
</tr>
<tr>
<td><label>Special Def:</label></td>
<td><input type="text" name="attr_monsterspecdefenses" title="@{monsterspecdefenses}"></td>
<th>Special Def:</th>
<td><input type="text" name="attr_monsterspecdefenses" title="@{monsterspecdefenses}" class="sheet-table-dynamic"></td>
</tr>
<tr>
<td><label>Magic Res:</label></td>
<th>Magic Res:</th>
<td>
<input type="text" name="attr_monstermagicresist" title="@{monstermagicresist}" class="sheet-short"><label>%</label>
<button type="roll" name="roll_monstermagicresist" title="%{monstermagicresist}" value="/w gm &{template:2Echeck} {{checkvs=Save with Magic Resistance}} {{character=@{character_name}}} {{checkroll=[[1d100cs1cf100-(@{misc-mod})]]%}} {{checktarget=[[@{monstermagicresist}]]%}} {{color=orange}}">Roll</button>
</td>
</tr>
<tr>
<td><label>Size:</label></td>
<th>Size:</th>
<td><input type="text" name="attr_monstersize" title="@{monstersize}" class="sheet-short" list="monster-size"></td>
</tr>
<tr>
<td><label>Morale:</label></td>
<td><input type="text" name="attr_monstermorale" title="@{monstermorale}" list="monster-morale"></td>
<th>Morale:</th>
<td><input type="text" name="attr_monstermorale" title="@{monstermorale}" class="sheet-table-dynamic" list="monster-morale"></td>
</tr>
<tr>
<td><label>XP Value:</label></td>
<td><input type="text" name="attr_monsterxp" title="@{monsterxp}"></td>
<th>XP Value:</th>
<td><input type="text" name="attr_monsterxp" title="@{monsterxp}" class="sheet-table-dynamic"></td>
</tr>
</table>
</div>
@@ -1,6 +1,6 @@
<div class="sheet-tab-content sheet-section-settings-page">
<h3>General</h3>
<h4>Select books to include autofil information from:</h4>
<h4>Select books to include autofill information from:</h4>
<table class="sheet-default-header-first-row sheet-padding-right-column1 sheet-centering-padding-5-column3 sheet-centering-padding-5-column4 sheet-background-gray-pair3">
<tr>
<th>Book</th>
@@ -175,6 +175,24 @@
</tr>
</table>
<br>
<h4>Spell tracking system</h4>
AD&D 2E have different systems for tracking spells, three have been implemented:
<ul>
<li><strong>Spell Slots:</strong> The default system described in the <em>Player's Handbook</em></li>
<li><strong>Spell Points:</strong> Introduced in <em>Player's Option: Spells & Magic</em></li>
<li><strong>Arcs, Songs, Winds:</strong> Introduced in <em>Forgotten Realms, Netheril: Empire of Magic</em></li>
</ul>
<label>System for Spell Tracking</label>
<select name="attr_spell-tracking-system">
<option value="spell-slots">Spell Slots</option>
<option value="spell-points">Spell Points</option>
<option value="spell-arcs-winds">Arcs, Songs, Winds</option>
</select>
<br>
<br>
<h4>Miscellaneous modifier popup on rolls</h4>
<p>By default all rolls creates a popup asking for a 'Miscellaneous modifier' to capture when the DM says: 'Make an X-roll with +2'.
If your DM rarely asks for this, if you find the popup annoying, or if you would rather add any bonuses after the roll is made, this popup can be turned off</p>
<label>Should rolls ask for a Miscellaneous modifier?</label>
<select name="attr_misc-mod" title="@{misc-mod}">
<option value="?{Misc. modifier?|0}">Popup on rolls</option>
+1 -1
View File
@@ -1,6 +1,6 @@
<hr>
<input type="checkbox" name="attr_toast" class="sheet-show-toast" value="1">
<div class="sheet-toast">
<div class="sheet-toast sheet-hidden">
<button class="sheet-hide-toast" type="action" name="act_hide-toast">X</button>
<input type="radio" name="attr_toast-content" class="sheet-toast-success" value="1">
<input type="radio" name="attr_toast-content" class="sheet-toast-info" value="2">
+4 -4
View File
@@ -83,8 +83,8 @@ constitutionTable['conadj'] = ['Error','-3','-2','-2','-1','-1','-1','0','0','0'
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['conregen'] = ['Error','Nil','Nil','Nil','Nil','Nil','Nil','Nil','Nil','Nil','Nil','Nil','Nil','Nil','Nil','Nil','Nil','Nil','Nil','Nil','1/6 turns','1/5 turns','1/4 turns','1/3 turns','1/2 turns','1/1 turn'];
constitutionTable['connotes'] = ['INVALID CONSTITUTION','','','','','','','','','','','','','','','','','','','','Fire and acid damage cannot be regenerated, PHB p. 21','Fire and acid damage cannot be regenerated, PHB p. 21','Fire and acid damage cannot be regenerated, PHB p. 21','Fire and acid damage cannot be regenerated, PHB p. 21','Fire and acid damage cannot be regenerated, PHB p. 21','Fire and acid damage cannot be regenerated, PHB p. 21'];
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 = {};
@@ -100,15 +100,15 @@ intelligenceTable['intimm5th'] = ['Error','','','','','','','','','','','','',''
intelligenceTable['intimm6th'] = ['Error','','','','','','','','','','','','','','','','','','','','','','','','6th-level','6th-level'];
intelligenceTable['intimm7th'] = ['Error','','','','','','','','','','','','','','','','','','','','','','','','','7th-level'];
intelligenceTable['intnotes'] = ['INVALID INTELLIGENCE','Communicate by Grunts & Gestures','','','','','','','','','','','','','','','','','','','','','','','','',''];
intelligenceTable['spell-points-int'] = [0,0,0,0,0,0,0,0,0,2,2,2,3,3,4,4,5,6,7,8,9,9,9,9,9,9];
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','','','','','','','','','','','','','','','','','','','','','','','','','',''];
wisdomTable['wisdom-wind'] = [0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,2,2,3,4,5,6,7,8,9,10,11,12];
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'];
+236 -140
View File
@@ -67,45 +67,42 @@ const capitalizeFirst = function (s) {
}
const displaySize = function(size) {
if (typeof size !== 'string')
if (typeof size !== 'string' || size.length === 0)
return '';
size = size.toLowerCase();
switch (size) {
case 't':
case 'tiny': return 'Tiny';
case 's':
case 'small': return 'Small';
case 'm':
case 'medium': return 'Medium';
case 'l':
case 'large': return 'Large';
case 'h':
case 'huge': return 'Huge';
case 'g':
case 'gargantuan': return 'Gargantuan';
let sizeLetter = size.charAt(0).toLowerCase();
switch (sizeLetter) {
case 't': return 'Tiny';
case 's': return 'Small';
case 'm': return 'Medium';
case 'l': return 'Large';
case 'h': return 'Huge';
case 'g': return 'Gargantuan';
default: return capitalizeFirst(size);
}
}
const sizeToInt = function(size) {
size = displaySize(size);
switch (size) {
case 'Tiny': return 0;
case 'Small': return 1;
case 'Medium': return 2;
case 'Large': return 3;
case 'Huge': return 4;
case 'Gargantuan': return 5;
if (typeof size !== 'string' || size.length === 0)
return '';
let sizeLetter = size.charAt(0).toLowerCase();
switch (sizeLetter) {
case 't': return 0;
case 's': return 1;
case 'm': return 2;
case 'l': return 3;
case 'h': return 4;
case 'g': return 5;
}
}
const displayWeaponType = function (type) {
if (typeof type !== 'string')
if (typeof type !== 'string' || type.length === 0)
return '';
type = type.toLowerCase();
switch (type) {
let typeLetter = type.toLowerCase();
switch (typeLetter) {
case 's': return 'Slashing';
case 'p': return 'Piercing';
case 'b': return 'Bludgeoning';
@@ -430,7 +427,7 @@ on('clicked:hide-toast', function(eventInfo) {
//#region Ability Scores logic
// Ability Score Parser function
const EXCEPTIONAL_STRENGHT_REGEX = /18[\[(]([0-9]{1,3})[\])]/; // Ie. 18[65], 18(65)
const EXCEPTIONAL_STRENGTH_REGEX = /18[\[(]([0-9]{1,3})[\])]/; // Ie. 18[65], 18(65)
function getLookupValue(abilityScoreString, defaultValue, isStrength = false) {
if (abilityScoreString === '') {
return defaultValue;
@@ -442,7 +439,7 @@ function getLookupValue(abilityScoreString, defaultValue, isStrength = false) {
}
if (isStrength) {
let exceptionalMatch = abilityScoreString.match(EXCEPTIONAL_STRENGHT_REGEX);
let exceptionalMatch = abilityScoreString.match(EXCEPTIONAL_STRENGTH_REGEX);
if (exceptionalMatch !== null) {
let exceptionalStrNumber = parseInt(exceptionalMatch[1]);
if (1 <= exceptionalStrNumber && exceptionalStrNumber <= 50) {
@@ -667,20 +664,28 @@ on('change:intelligence change:reason change:knowledge', function() {
});
// Set sub-attributes based on Wisdom, Intuition, and Willpower
function parseWisBonus(abilityScore) {
if (abilityScore < 13) {
return {
'1st': 0,
'2nd': 0,
'3rd': 0,
'4th': 0,
'5th': 0,
'6th': 0,
'7th': 0,
'wisbonus': wisdomTable['wisbonus'][abilityScore],
'wisbonus-prime': wisdomTable['wisbonus'][abilityScore],
'wisbonus-extra': wisdomTable['wisbonus'][abilityScore],
};
async function parseWisBonus(abilityScore, wisdom) {
let bonus = {
'1st': 0,
'2nd': 0,
'3rd': 0,
'4th': 0,
'5th': 0,
'6th': 0,
'7th': 0,
'wind': 0,
'wisbonus': '—',
'wisbonus-prime': '—',
'wisbonus-extra': '—',
};
if (abilityScore < 13 && wisdom < 13) {
await keepContextRoll();
return bonus;
}
let answer = await extractQueryResult('?{Priests get bonus spells from high Wisdom (but not Paladins and Rangers). Do you play a priest?|My character is a priest,true|My character is a different class,false}');
if (answer !== 'true') {
return bonus;
}
// Combine all spell levels into one string
@@ -690,7 +695,7 @@ function parseWisBonus(abilityScore) {
}
// Count instances of each spell level
let bonus = {
bonus = {
'1st': (bonusString.match(/1st/g) || []).length,
'2nd': (bonusString.match(/2nd/g) || []).length,
'3rd': (bonusString.match(/3rd/g) || []).length,
@@ -698,18 +703,28 @@ function parseWisBonus(abilityScore) {
'5th': (bonusString.match(/5th/g) || []).length,
'6th': (bonusString.match(/6th/g) || []).length,
'7th': (bonusString.match(/7th/g) || []).length,
'wind': wisdomTable['wisdom-wind'][wisdom],
};
// Generate bonus prime and bonus extra strings
bonus['wisbonus-prime'] = wisdomTable['wisbonus-prime'][abilityScore];
bonus['wisbonus-extra'] = wisdomTable['wisbonus-extra'][abilityScore];
function format(bonus, key) {
if (bonus[key] === 0) {
return '';
}
if (bonus[key] === 1) {
return key
}
return `${bonus[key]}x${key}`;
}
bonus['wisbonus-prime'] = [format(bonus, '1st'), format(bonus, '2nd'), format(bonus, '3rd'), format(bonus, '4th')].filter(Boolean).join(', ');
bonus['wisbonus-extra'] = [format(bonus, '5th'), format(bonus, '6th'), format(bonus, '7th')].filter(Boolean).join(', ');
bonus['wisbonus'] = [bonus['wisbonus-prime'], bonus['wisbonus-extra']].filter(Boolean).join(', ');
return bonus;
}
on('change:wisdom change:intuition change:willpower', function() {
getAttrs(['wisdom','intuition','willpower'], function(values) {
getAttrs(['wisdom','intuition','willpower'], async function (values) {
let wisdomRaw = values.wisdom.replace(/\s+/g, '');
let intuitionRaw = values.intuition.replace(/\s+/g, '');
let willpowerRaw = values.willpower.replace(/\s+/g, '');
@@ -721,7 +736,7 @@ on('change:wisdom change:intuition change:willpower', function() {
let bonusSpells;
if (wisdom === 0) {
bonusSpells = parseWisBonus(0);
bonusSpells = await parseWisBonus(0, 0);
assignAttributes(0, 0, 0, bonusSpells, wisdomTable['wisimmune'][0], wisdomTable['wisimmune'][0], wisdomTable['wisnotes'][0], wisdomTable['wisnotes'][0]);
return;
}
@@ -749,34 +764,35 @@ on('change:wisdom change:intuition change:willpower', function() {
for (let i = willpower; i > 18; i--) {
wisImmuneArray.push(wisdomTable['wisimmune'][i]);
}
let slicePoint = Math.round(wisImmuneArray.length/2);
let slicePoint = Math.round(wisImmuneArray.length / 2);
wisimm1 = wisImmuneArray.slice(0, slicePoint).filter(Boolean).join(', ');
wisimm2 = wisImmuneArray.slice(slicePoint).filter(Boolean).join(', ');
}
bonusSpells = parseWisBonus(willpower);
bonusSpells = await parseWisBonus(intuition, wisdom);
assignAttributes(wisdom, intuition, willpower, bonusSpells, wisimm1, wisimm2, wisnotes, wis2notes);
function assignAttributes(wisdom, intuition, willpower, bonusSpells, wisimm1, wisimm2, wisnotes, wis2notes) {
setAttrs({
wisdef: wisdomTable['wisdef'][willpower],
wisbonus: bonusSpells['wisbonus'],
'wisbonus-prime': bonusSpells['wisbonus-prime'],
'wisbonus-extra': bonusSpells['wisbonus-extra'],
wisfail: wisdomTable['wisfail'][intuition],
wisimm: wisimm1,
wisimm1: wisimm1,
wisimm2: wisimm2,
wisnotes: wisnotes,
wis2notes: wis2notes,
'spell-priest-level1-wisdom': bonusSpells['1st'],
'spell-priest-level2-wisdom': bonusSpells['2nd'],
'spell-priest-level3-wisdom': bonusSpells['3rd'],
'spell-priest-level4-wisdom': bonusSpells['4th'],
'spell-priest-level5-wisdom': bonusSpells['5th'],
'spell-priest-level6-wisdom': bonusSpells['6th'],
'spell-priest-level7-wisdom': bonusSpells['7th'],
});
let newValue = {};
newValue['wisdef'] = wisdomTable['wisdef'][willpower];
newValue['wisbonus'] = bonusSpells['wisbonus'];
newValue['wisbonus-prime'] = bonusSpells['wisbonus-prime'];
newValue['wisbonus-extra'] = bonusSpells['wisbonus-extra'];
newValue['wisfail'] = wisdomTable['wisfail'][intuition];
newValue['wisimm'] = wisimm1;
newValue['wisimm1'] = wisimm1;
newValue['wisimm2'] = wisimm2;
newValue['wisnotes'] = wisnotes;
newValue['wis2notes'] = wis2notes;
newValue['spell-priest-level1-wisdom'] = bonusSpells['1st'];
newValue['spell-priest-level2-wisdom'] = bonusSpells['2nd'];
newValue['spell-priest-level3-wisdom'] = bonusSpells['3rd'];
newValue['spell-priest-level4-wisdom'] = bonusSpells['4th'];
newValue['spell-priest-level5-wisdom'] = bonusSpells['5th'];
newValue['spell-priest-level6-wisdom'] = bonusSpells['6th'];
newValue['spell-priest-level7-wisdom'] = bonusSpells['7th'];
newValue['wisdom-wind'] = bonusSpells['wind'];
setAttrs(newValue);
}
});
});
@@ -934,10 +950,10 @@ function setupRepeatingSpellSumming(sections, oldField, newField, resultFieldNam
}
function setupCalculateRemaining(totalField, sumField, remainingField) {
on(`change:${totalField} change:${sumField}`, function () {
on(`change:${totalField} change:${sumField}`, function (eventInfo) {
getAttrs([totalField, sumField], function (values) {
let intTotal = parseInt(values[totalField]);
let intSum = parseInt(values[sumField]);
let intTotal = parseInt(values[totalField]) || 0;
let intSum = parseInt(values[sumField]) || 0;
console.log(`Setting ${remainingField} with value from ${totalField}: ${intTotal} and ${sumField}: ${intSum}`);
@@ -959,9 +975,9 @@ const PRIEST_SPHERES = [
'Chaos','Law','Numbers','Thought','Time','Travelers','War','Wards'
];
const primarySphereRegex = new RegExp(PRIEST_SPHERES.join('|'), 'gi');
const noElementalRegex = new RegExp(PRIEST_SPHERES.filter(s => s !== ELEMENTAL).join('|'), 'gi');
const elementalRegex = /Earth|Air|Fire|Water/gi
const PRIMARY_SPHERE_REGEX = new RegExp(PRIEST_SPHERES.join('|'), 'gi');
const NO_ELEMENTAL_REGEX = new RegExp(PRIEST_SPHERES.filter(s => s !== ELEMENTAL).join('|'), 'gi');
const ELEMENTAL_REGEX = /Earth|Air|Fire|Water/gi
function parseSpheres(spheresStrings, regex) {
let spheres = new Set();
@@ -995,7 +1011,7 @@ function isSpellAvailable(spellName, spell, availableSpheres, elementalSpheres,
let spheres = getSpellSpheres(spell, optionalSpheres);
let primarySpellSpheres = spheres.match(noElementalRegex) || [];
let primarySpellSpheres = spheres.match(NO_ELEMENTAL_REGEX) || [];
let isAvailable = primarySpellSpheres.some(sphere => availableSpheres.has(sphere));
if (isAvailable)
return true;
@@ -1007,7 +1023,7 @@ function isSpellAvailable(spellName, spell, availableSpheres, elementalSpheres,
return false;
if (spheres.includes(`${ELEMENTAL} (`))
return spheres.match(elementalRegex).some((element) => elementalSpheres.has(element))
return spheres.match(ELEMENTAL_REGEX).some((element) => elementalSpheres.has(element))
// The player and the spell has the elemental sphere (without any sub elements)
// Currently only 'Commune With Nature' in the revised Player's Handbook (1995) has this property
@@ -1032,8 +1048,8 @@ function setupAddPriestSpell(postfix) {
knownSpells.add(row.S[field]);
return knownSpells;
}, new Set(), function (knownSpells,_,attrSet){
let primarySpheres = parseSpheres(sphereFields.map(aField => attrSet.S[aField]), primarySphereRegex);
let elementalSpheres = parseSpheres(sphereFields.map(aField => attrSet.S[aField]), elementalRegex);
let primarySpheres = parseSpheres(sphereFields.map(aField => attrSet.S[aField]), PRIMARY_SPHERE_REGEX);
let elementalSpheres = parseSpheres(sphereFields.map(aField => attrSet.S[aField]), ELEMENTAL_REGEX);
if (primarySpheres.size < 1) {
showToast(WARNING, 'No spheres found', `No valid spheres found. Please write or select some spheres`);
@@ -1164,7 +1180,7 @@ function setupSpellSlotsReset(buttonName, tab, spellLevels, allSections) {
//#endregion
//#region Wizard and Priest spells and Powers setup
function setupAutoFillSpellInfo(section, spellsTable, levelFunc, optionalRulesFields) {
function setupAutoFillSpellInfo(section, spellsTable, optionalRulesFields) {
if (!spellsTable[section])
return;
@@ -1183,7 +1199,7 @@ function setupAutoFillSpellInfo(section, spellsTable, levelFunc, optionalRulesFi
let spellInfo = {
[`repeating_spells-${section}_spell-cast-time`] : spell['cast-time'],
[`repeating_spells-${section}_spell-level`] : levelFunc(spell['level'], className),
[`repeating_spells-${section}_spell-level`] : displaySpellLevel(spell['level'], className),
[`repeating_spells-${section}_spell-school`] : getSpellSchools(spell, books),
[`repeating_spells-${section}_spell-components`] : spell['components'],
[`repeating_spells-${section}_spell-range`] : spell['range'],
@@ -1208,8 +1224,7 @@ function setupAutoFillSpellInfo(section, spellsTable, levelFunc, optionalRulesFi
spellInfo[`repeating_spells-${section}_spell-sphere`] = getSpellSpheres(spell, sphereRules);
}
if (!books[levelField].trim()) {
let classLevel = capitalizeFirst(levelField.replace('level-', ''));
let toast = getToastObject(INFO, `Set ${classLevel} caster level`, 'Almost every spell requires a caster level to calculate its effect. Without it most spells will fail and show and error in the chat');
let toast = getToastObject(INFO, `Set ${className} caster level`, 'Almost every spell requires a caster level to calculate its effect. Without it most spells will fail and show and error in the chat');
Object.assign(spellInfo, toast);
}
@@ -1218,8 +1233,7 @@ function setupAutoFillSpellInfo(section, spellsTable, levelFunc, optionalRulesFi
});
}
let wizardSpellLevelsSections = [
const WIZARD_SPELL_LEVELS_SECTIONS = [
{level: '1', sections: ['', '2', '3', 'wiz1']},
{level: '2', sections: ['4', '5', '6', 'wiz2']},
{level: '3', sections: ['7', '8', '9', 'wiz3']},
@@ -1237,7 +1251,7 @@ let wizardSpellLevelsSections = [
{level: '15', sections: ['64', '65', '66', 'wiz15']},
];
let priestSpellLevelsSections = [
const PRIEST_SPELL_LEVELS_SECTIONS = [
{level: '1', sections: ['28', '29', '30', 'pri1']},
{level: '2', sections: ['31', '32', '33', 'pri2']},
{level: '3', sections: ['34', '35', '36', 'pri3']},
@@ -1255,7 +1269,7 @@ const displaySpellLevel = function(level, className) {
}
// --- Start setup Spell Slots --- //
wizardSpellLevelsSections.forEach(spellLevel => {
WIZARD_SPELL_LEVELS_SECTIONS.forEach(spellLevel => {
let prefix = `spell-level${spellLevel.level}`;
setupStaticCalculateTotal(`${prefix}-total`, [`${prefix}-castable`, `${prefix}-specialist`, `${prefix}-misc`]);
setupRepeatingSpellSumming(spellLevel.sections, 'cast-value', 'spell-cast-value', `${prefix}-cast-value-sum`);
@@ -1266,14 +1280,14 @@ wizardSpellLevelsSections.forEach(spellLevel => {
// Auto set spell info function
let lastSection = spellLevel.sections[spellLevel.sections.length - 1];
if (isNewSpellSection(lastSection)) {
setupAutoFillSpellInfo(lastSection, wizardSpells, displaySpellLevel, SCHOOL_FIELDS);
setupAutoFillSpellInfo(lastSection, wizardSpells, SCHOOL_FIELDS);
setupSpellCrit(lastSection);
}
});
setupAutoFillSpellInfo('wizmonster', wizardSpells, displaySpellLevel, SCHOOL_FIELDS);
setupAutoFillSpellInfo('wizmonster', wizardSpells, SCHOOL_FIELDS);
setupSpellCrit('wizmonster');
priestSpellLevelsSections.forEach(spellLevel => {
PRIEST_SPELL_LEVELS_SECTIONS.forEach(spellLevel => {
let prefix = `spell-priest-level${spellLevel.level}`;
setupStaticCalculateTotal(`${prefix}-total`, [`${prefix}-castable`, `${prefix}-wisdom`, `${prefix}-misc`]);
setupRepeatingSpellSumming(spellLevel.sections, 'cast-value', 'spell-cast-value', `${prefix}-cast-value-sum`);
@@ -1284,43 +1298,125 @@ priestSpellLevelsSections.forEach(spellLevel => {
// Auto set spell info function
let lastSection = spellLevel.sections[spellLevel.sections.length - 1];
if (isNewSpellSection(lastSection)) {
setupAutoFillSpellInfo(lastSection, priestSpells, displaySpellLevel, SPHERE_FIELDS);
setupAutoFillSpellInfo(lastSection, priestSpells, SPHERE_FIELDS);
setupSpellCrit(lastSection);
if (lastSection !== 'priq') {
setupAddPriestSpell(lastSection);
}
}
});
setupAutoFillSpellInfo('primonster', priestSpells, displaySpellLevel, SPHERE_FIELDS);
setupAutoFillSpellInfo('primonster', priestSpells, SPHERE_FIELDS);
setupSpellCrit('primonster');
// --- End setup Spell Slots --- //
// --- Start setup Spell Points, Arc, and Wind --- //
let wizardSpellPoints = 'spell-points';
let arc = 'total-arc';
let allWizardSpellSections = wizardSpellLevelsSections.flatMap(sl => sl.sections);
setupStaticCalculateTotal(`${wizardSpellPoints}-total`, [`${wizardSpellPoints}-lvl`, `${wizardSpellPoints}-spc`, `${wizardSpellPoints}-int`]);
setupRepeatingSpellSumming(allWizardSpellSections, wizardSpellPoints, 'spell-points', `${wizardSpellPoints}-sum`, true);
setupRepeatingSpellSumming(allWizardSpellSections, 'arc', 'spell-arc', `${arc}-sum`, true);
setupCalculateRemaining(`${wizardSpellPoints}-total`, `${wizardSpellPoints}-sum`, `${wizardSpellPoints}-remaining`);
setupCalculateRemaining(arc, `${arc}-sum`, `${arc}-remaining`);
const WIZARD_SPELL_POINTS = 'spell-points';
const TOTAL_ARC = 'total-arc';
const ALL_WIZARD_SPELL_SECTIONS = WIZARD_SPELL_LEVELS_SECTIONS.flatMap(sl => sl.sections);
setupStaticCalculateTotal(`${WIZARD_SPELL_POINTS}-total`, [`${WIZARD_SPELL_POINTS}-lvl`, `${WIZARD_SPELL_POINTS}-spc`, `${WIZARD_SPELL_POINTS}-int`]);
setupRepeatingSpellSumming(ALL_WIZARD_SPELL_SECTIONS, WIZARD_SPELL_POINTS, 'spell-points', `${WIZARD_SPELL_POINTS}-sum`, true);
setupRepeatingSpellSumming(ALL_WIZARD_SPELL_SECTIONS, 'arc', 'spell-arc', `${TOTAL_ARC}-sum`, true);
setupCalculateRemaining(`${WIZARD_SPELL_POINTS}-total`, `${WIZARD_SPELL_POINTS}-sum`, `${WIZARD_SPELL_POINTS}-remaining`);
setupCalculateRemaining(TOTAL_ARC, `${TOTAL_ARC}-sum`, `${TOTAL_ARC}-remaining`);
on('change:spell-points-int-enabled change:intelligence', function (eventInfo) {
getAttrs(['spell-points-int-enabled', 'intelligence'], function (values) {
let newValue = {'spell-points-int': 0}
if (values['spell-points-int-enabled'] !== '1') {
return setAttrs(newValue);
}
let intelligence = getLookupValue(values['intelligence'], 0);
newValue['spell-points-int'] = intelligenceTable['spell-points-int'][intelligence];
setAttrs(newValue);
});
});
let priestSpellPoints = 'spell-points-priest';
let wind = 'total-wind';
let allPriestSpellSections = priestSpellLevelsSections.flatMap(sl => sl.sections);
setupStaticCalculateTotal(`${priestSpellPoints}-total`, [`${priestSpellPoints}-lvl`, `${priestSpellPoints}-wis`]);
setupRepeatingSpellSumming(allPriestSpellSections, priestSpellPoints, 'spell-points', `${priestSpellPoints}-sum`, true);
setupRepeatingSpellSumming(allPriestSpellSections, 'wind', 'spell-wind', `${wind}-sum`, true);
setupCalculateRemaining(`${priestSpellPoints}-total`, `${priestSpellPoints}-sum`, `${priestSpellPoints}-remaining`);
setupCalculateRemaining(wind, `${wind}-sum`, `${wind}-remaining`);
const PRIEST_SPELL_POINTS = 'spell-points-priest';
const TOTAL_WIND = 'total-wind';
const ALL_PRIEST_SPELL_SECTIONS = PRIEST_SPELL_LEVELS_SECTIONS.flatMap(sl => sl.sections);
setupStaticCalculateTotal(`${PRIEST_SPELL_POINTS}-total`, [`${PRIEST_SPELL_POINTS}-lvl`, `${PRIEST_SPELL_POINTS}-wis`]);
setupStaticCalculateTotal(TOTAL_WIND, ['level-wind', 'wisdom-wind']);
setupRepeatingSpellSumming(ALL_PRIEST_SPELL_SECTIONS, PRIEST_SPELL_POINTS, 'spell-points', `${PRIEST_SPELL_POINTS}-sum`, true);
setupRepeatingSpellSumming(ALL_PRIEST_SPELL_SECTIONS, 'wind', 'spell-wind', `${TOTAL_WIND}-sum`, true);
setupCalculateRemaining(`${PRIEST_SPELL_POINTS}-total`, `${PRIEST_SPELL_POINTS}-sum`, `${PRIEST_SPELL_POINTS}-remaining`);
setupCalculateRemaining(TOTAL_WIND, `${TOTAL_WIND}-sum`, `${TOTAL_WIND}-remaining`);
let PRIEST_SPELL_POINTS_WIS = 'spell-points-priest-wis';
on('change:spell-points-priest-wis-enabled change:wisdom change:level-priest', function (eventInfo) {
getAttrs(['spell-points-priest-wis-enabled', 'wisdom', 'level-priest'], async function (values) {
await keepContextRoll();
let newValue = {};
newValue[PRIEST_SPELL_POINTS_WIS] = 0;
if (values['spell-points-priest-wis-enabled'] !== '1') {
return setAttrs(newValue);
}
let wisdom = getLookupValue(values['wisdom'], 0);
if (wisdom < 13) {
return setAttrs(newValue);
}
if (wisdom === 13) {
newValue[PRIEST_SPELL_POINTS_WIS] = 4;
return setAttrs(newValue);
}
if (wisdom === 14) {
newValue[PRIEST_SPELL_POINTS_WIS] = 8;
return setAttrs(newValue);
}
let level = 1;
if (values['level-priest'] === '') {
return showToast(INFO, 'Set Priest caster level', 'The Priest\'s level is needed to calculate bonus Spell Points from high Wisdom.');
} else {
level = await extractRollResult(values['level-priest']);
}
if (isNaN(level) || level < 0) {
level = 1;
}
let spellPoints = 0;
if (wisdom === 15) {
spellPoints = level < 3 ? 8 : 15;
} else if (wisdom === 16) {
spellPoints = level < 3 ? 8 : 20;
} else if (wisdom === 17) {
if (1 <= level && level <= 2) {
spellPoints = 8;
} else if (3 <= level && level <= 4) {
spellPoints = 20;
} else {
spellPoints = 30;
}
} else if (wisdom === 18) {
if (1 <= level && level <= 2) {
spellPoints = 8;
} else if (3 <= level && level <= 4) {
spellPoints = 20;
} else if (5 <= level && level <= 6) {
spellPoints = 30;
} else {
spellPoints = 45;
}
} else if (wisdom >= 19) {
if (1 <= level && level <= 2) {
spellPoints = 12;
} else if (3 <= level && level <= 4) {
spellPoints = 25;
} else if (5 <= level && level <= 6) {
spellPoints = 45;
} else {
spellPoints = 60;
}
}
newValue[PRIEST_SPELL_POINTS_WIS] = spellPoints;
setAttrs(newValue);
});
});
// --- End setup Spell Points, Arc, and Wind --- //
// --- Start setup reset buttons --- //
//tab6 = wizard levels
//tab7 = priest levels
setupSpellSlotsReset('reset-spent-slots-wiz', 'tab6', wizardSpellLevelsSections, allWizardSpellSections);
let allPriestSectionsExceptQuest = priestSpellLevelsSections.slice(0, -1).flatMap(sl => sl.sections);
setupSpellSlotsReset('reset-spent-slots-pri', 'tab7', priestSpellLevelsSections, allPriestSectionsExceptQuest);
setupSpellSlotsReset('reset-spent-slots-wiz', 'tab6', WIZARD_SPELL_LEVELS_SECTIONS, ALL_WIZARD_SPELL_SECTIONS);
let allPriestSectionsExceptQuest = PRIEST_SPELL_LEVELS_SECTIONS.slice(0, -1).flatMap(sl => sl.sections);
setupSpellSlotsReset('reset-spent-slots-pri', 'tab7', PRIEST_SPELL_LEVELS_SECTIONS, allPriestSectionsExceptQuest);
// --- End setup reset buttons --- //
// --- Start setup Granted Powers --- //
@@ -1386,19 +1482,14 @@ on('change:repeating_customrogue:crl remove:repeating_customrogue', function(){
//#endregion
//#region Weapons tab logic and autofil
//Used in version.js
const updateNonprofPenalty = function () {
getAttrs(['nonprof-penalty'], function(values) {
let nonprof = Math.abs(parseInt(values['nonprof-penalty'])) * -1;
let famil = Math.floor(nonprof / 2)
setAttrs({
['nonprof-penalty']: nonprof,
['famil-penalty']: famil
},{silent:true});
});
}
on('change:nonprof-penalty', function (eventInfo){
updateNonprofPenalty();
let nonprofRaw = parseInt(eventInfo.newValue) || 0;
let nonprof = Math.abs(nonprofRaw) * -1;
let famil = Math.floor(nonprof / 2)
setAttrs({
['nonprof-penalty']: nonprof,
['famil-penalty']: famil
},{silent:true});
});
on('change:thac0-base-calc', function(eventInfo) {
@@ -1429,7 +1520,7 @@ async function selectVersion(foundObjects, values, comparer, objectName) {
return;
}
let isPlayersOption = values[PLAYERS_OPTION_FIELD] === '2';
let isPlayersOption = values[WEAPONS_PLAYERS_OPTION_FIELD] === '2';
let isAllEqual = activeObjects.every(o => comparer(o, activeObjects[0], isPlayersOption));
if (isAllEqual) {
await keepContextRoll();
@@ -1469,13 +1560,13 @@ function combineBooks(activeObjects, comparer, isPlayersOptions) {
}
//#region Weapons autofill
const PLAYERS_OPTION_FIELD = 'tab81';
const WEAPONS_PLAYERS_OPTION_FIELD = 'tab81';
function setWeaponWithBonus(weaponName, setWeaponFunc, comparer, thac0Field, category) {
if (!weaponName)
return;
weaponName = weaponName.toLowerCase();
let fields = [...BOOK_FIELDS, PLAYERS_OPTION_FIELD, thac0Field].filter(Boolean);
let fields = [...BOOK_FIELDS, WEAPONS_PLAYERS_OPTION_FIELD, thac0Field].filter(Boolean);
getAttrs(fields, async function (values) {
let bonus = 0;
let baseWeapons = WEAPONS_TABLE[weaponName]
@@ -1553,13 +1644,13 @@ on('change:repeating_weapons:weaponname', function(eventInfo) {
//melee damage autofill
on('change:repeating_weapons-damage:weaponname1', function(eventInfo) {
let comparer = function (weapon1, weapon2, isPlayersOption) {
let fisk = ['small-medium','large'];
let compareFields = ['small-medium','large'];
if (isPlayersOption) {
fisk.push('size');
fisk.push('type');
fisk.push('knockdown');
compareFields.push('size');
compareFields.push('type');
compareFields.push('knockdown');
}
return fisk.every(f => weapon1[f] === weapon2[f])
return compareFields.every(f => weapon1[f] === weapon2[f])
}
let rowId = parseSourceAttribute(eventInfo).rowId;
let setWeaponFunc = function (weapon) {
@@ -1663,7 +1754,7 @@ function setupFollowerWeaponsAutoFill(repeating, sections) {
});
}
const followerWeapons = [
const FOLLOWER_WEAPONS = [
{repeating: '', sections: ['', '001', '002']},
{repeating: 'hench', sections: ['003', '004', '005']},
{repeating: '', sections: ['006', '007', '008']},
@@ -1678,7 +1769,7 @@ const followerWeapons = [
{repeating: 'hench6', sections: ['033', '034', '035']},
];
followerWeapons.forEach(fw => {
FOLLOWER_WEAPONS.forEach(fw => {
setupFollowerWeaponsAutoFill(fw.repeating, fw.sections);
});
@@ -2307,11 +2398,10 @@ function weaponPoCritTemplate(prefix, fields, nameFunc, baseDamageFunc, damageAd
//#region Proficiencies
//Weapon proficiency slots
const updateWeaponProfsRemaining = () => repeatingCalculateRemaining('weaponprofs', ['weapprofnum'], 'weapprof-slots-total-calc', 'weapprof-slots-remain');
on('change:repeating_weaponprofs:weapprofnum remove:repeating_weaponprofs change:weapprof-slots-total-calc', function(eventInfo) {
if (doEarlyReturn(eventInfo, ['weapprofnum']))
return;
updateWeaponProfsRemaining();
repeatingCalculateRemaining('weaponprofs', ['weapprofnum'], 'weapprof-slots-total-calc', 'weapprof-slots-remain');
});
//Weapon proficiency autofill
on('change:repeating_weaponprofs:weapprofname', function(eventInfo) {
@@ -2638,12 +2728,14 @@ const setPsionicDisciplineVisibility = function(newValue) {
elements.removeClass('sheet-show');
}
}
on('change:tab8 sheet:opened', function (eventInfo) {
const PSIONIC_SKILLS_AND_POWERS_FIELD = 'tab8';
on(`change:${PSIONIC_SKILLS_AND_POWERS_FIELD} sheet:opened`, function (eventInfo) {
if (eventInfo.newValue)
return setPsionicDisciplineVisibility(eventInfo.newValue);
getAttrs(['tab8'], function (values) {
setPsionicDisciplineVisibility(values['tab8']);
getAttrs([PSIONIC_SKILLS_AND_POWERS_FIELD], function (values) {
setPsionicDisciplineVisibility(values[PSIONIC_SKILLS_AND_POWERS_FIELD]);
})
});
@@ -2881,14 +2973,18 @@ PSIONIC_CORE_SECTIONS.forEach(({section, name, macro, number, cost_number, disci
//#endregion
// Show / Hide buttons for various repeating sections
const REPEATING_SECTIONS = [
const FOLDABLE_REPEATING_SECTIONS = [
...WIZARD_SPELL_LEVELS_SECTIONS.map(e => e.sections[e.sections.length-1]).map(e => `spells-${e}`),
'spells-wizmonster',
...PRIEST_SPELL_LEVELS_SECTIONS.map(e => e.sections[e.sections.length-1]).map(e => `spells-${e}`),
'spells-primonster',
...PSIONIC_CORE_SECTIONS.map(e => e.section),
'scrolls',
];
REPEATING_SECTIONS.forEach(section => {
FOLDABLE_REPEATING_SECTIONS.forEach(section => {
on(`clicked:repeating_${section}:show clicked:repeating_${section}:hide`, function (eventInfo) {
let parse = parseSourceAttribute(eventInfo);
$20(`div[data-reprowid=${parse.rowId}] .sheet-hidden`).toggleClass('sheet-show');
$20(`div[data-reprowid=${parse.rowId}] .sheet-hidden.sheet-fold`).toggleClass('sheet-show');
});
});
+1 -11
View File
@@ -1,7 +1,7 @@
// --- Version change start --- //
const SHEET_NAME = 'AD&D 2E Revised';
const SHEET_VERSION = '4.14.2';
const SHEET_VERSION = '4.15.0';
on('sheet:opened', function(){
getAttrs(['character_sheet'],function(attrs){
@@ -28,9 +28,6 @@ on('sheet:opened', function(){
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();
}
@@ -187,13 +184,6 @@ function migrateOtherValuables() {
}
//#endregion
//#region version 3.4.0
function migrate3_4_0() {
console.log('Migrating to v3.4.0');
updateNonprofPenalty();
}
//#endregion
//#region version 3.3.2
function migrate3_3_2() {
console.log('Migrating to v3.3.2');
+113
View File
@@ -0,0 +1,113 @@
- let failureCheck = ''
- let arcWind = 'Arc'
if isPriest
- failureCheck = '{{checkroll=[[1d100]]%}}{{checktarget=#REPLACE2#}}{{fail=The spell is expended with absolutely no effect whatsoever.}}'
- arcWind = 'Wind'
fieldset(name="repeating_spells-#REPLACE0#" class="repeating_spells-#REPLACE0#")
div(class="sheet-spell-line")
table(class="sheet-default-header-first-row sheet-inline" style="flex-grow: 1")
tr(class="sheet-collapse sheet-show-first")
th Spell name
th Range
th Area of Effect
th(colspan="2") Casting time
th(colspan="2") Macro
tr
td(class="sheet-td-dynamic50")
input(type="text" name="attr_spell-name" title="@{repeating_spells-#REPLACE0#_$X_spell-name}" class="sheet-table-dynamic sheet-chrome" placeholder="Spell name" list="#REPLACE0#-spells")
input(type="text" name="attr_spell-name" title="@{repeating_spells-#REPLACE0#_$X_spell-name}" class="sheet-table-dynamic sheet-firefox" placeholder="Spell name" list="#REPLACE0#-spells-ff")
td(class="sheet-td-dynamic25")
input(type="text" name="attr_spell-range" title="@{repeating_spells-#REPLACE0#_$X_spell-range}" class="sheet-table-dynamic" placeholder="Range")
td(class="sheet-td-dynamic25")
input(type="text" name="attr_spell-aoe" title="@{repeating_spells-#REPLACE0#_$X_spell-aoe}" class="sheet-table-dynamic" placeholder="Area of Effect")
td
input(type="text" name="attr_spell-cast-time" title="@{repeating_spells-#REPLACE0#_$X_spell-cast-time}" class="sheet-short" placeholder="Cast time")
td
button(type="roll" name="roll_spell-init" title="@{repeating_spells-#REPLACE0#_$X_spell-init}" value!="/gmroll [[{[[1d10]]+(@{spell-cast-time})-(@{misc-mod}), 1}kh1]] [Initiative (@{spell-name})]&{tracker}") Initiative
td
button(type="roll" name="roll_spell-template" title="%{repeating_spells-#REPLACE0#_$X_spell-template}" value!="#REPLACE1#&{template:2Espell}{{title=@{spell-name}}}{{splevel=@{spell-level}}}{{school=@{spell-school}}}{{sphere=@{spell-sphere}}}{{components=@{spell-components}}}{{time=@{spell-cast-time}}}{{range=@{spell-range}}}{{duration=@{spell-duration}}}{{aoe=@{spell-aoe}}}{{save=@{spell-saving-throw}}}{{subtlety=@{spell-subtlety}}}{{sensory=@{spell-sensory}}}{{knockdown=@{spell-knockdown}}}{{crit=@{spell-crit-size}}}{{damage=@{spell-damage}}}{{damagetype=@{spell-damage-type}}}{{healing=@{spell-healing}}}{{reference=@{spell-reference}}}{{materials=@{spell-materials}}}"+failureCheck+"{{effects=@{spell-effect}}}") T
| insert_fold-button.html
table(class="sheet-default-header-first-row sheet-spell-slots sheet-hidden")
tr(class="sheet-collapse sheet-show-first")
td Cast
td
td Memorized
tr
td
input(type="number" name="attr_spell-cast-value" title="@{repeating_spells-#REPLACE0#_$X_spell-cast-value}" class="sheet-short" value="0")
td(class="sheet-centering-padding-5") /
td
input(type="number" name="attr_spell-memorized" title="@{repeating_spells-#REPLACE0#_$X_spell-memorized}" class="sheet-table-dynamic" value="0")
table(class="sheet-default-header-first-row sheet-spell-points sheet-hidden")
tr(class="sheet-collapse sheet-show-first")
td Spell Points Used
tr
td
input(type="number" name="attr_spell-points" title="@{repeating_spells-#REPLACE0#_$X_spell-points}" class="sheet-table-dynamic" value="0")
table(class="sheet-default-header-first-row sheet-spell-arcs-winds sheet-hidden")
tr(class="sheet-collapse sheet-show-first")
td #{arcWind}s Used
tr
td
input(type="number" name="attr_spell-"+arcWind.toLowerCase() title="@{repeating_spells-#REPLACE0#_$X_spell-"+arcWind.toLowerCase()+"}" class="sheet-table-dynamic" value="0")
div(class="sheet-hidden sheet-fold")
div(class="sheet-spell-fold")
table(class="sheet-default-header-odd-column" style="align-self: flex-start")
tr
th Level:
td(colspan="3")
input(type="text" name="attr_spell-level" title="@{repeating_spells-#REPLACE0#_$X_spell-level}" class="sheet-table-dynamic" placeholder="Spell level")
tr
th School:
td
input(type="text" name="attr_spell-school" title="@{repeating_spells-#REPLACE0#_$X_spell-school}" class="sheet-spell-half" placeholder="School")
th Sphere:
td
input(type="text" name="attr_spell-sphere" title="@{repeating_spells-#REPLACE0#_$X_spell-sphere}" class="sheet-spell-half" placeholder="Sphere")
tr
th Duration:
td
input(type="text" name="attr_spell-duration" title="@{repeating_spells-#REPLACE0#_$X_spell-duration}" class="sheet-spell-half" placeholder="Duration")
th Components:
td
input(type="text" name="attr_spell-components" title="@{repeating_spells-#REPLACE0#_$X_spell-components}" class="sheet-spell-half" placeholder="Components")
tr
th Subtlety:
td
input(type="text" name="attr_spell-subtlety" title="@{repeating_spells-#REPLACE0#_$X_spell-subtlety}" class="sheet-spell-half" placeholder="Subtlety")
th(style="white-space: nowrap") Saving Throw:
td
input(type="text" name="attr_spell-saving-throw" title="@{repeating_spells-#REPLACE0#_$X_spell-saving-throw}" class="sheet-spell-half" placeholder="Saving Throw")
tr
th Sensory:
td
input(type="text" name="attr_spell-sensory" title="@{repeating_spells-#REPLACE0#_$X_spell-sensory}" class="sheet-spell-half" placeholder="Sensory")
th Knockdown:
td
input(type="text" name="attr_spell-knockdown" title="@{repeating_spells-#REPLACE0#_$X_spell-knockdown}" class="sheet-spell-half" placeholder="[[d6]]")
tr
th Critical:
td
input(type="text" name="attr_spell-crit-size" title="@{repeating_spells-#REPLACE0#_$X_spell-crit-size}" class="sheet-spell-half" placeholder="Large (1d3 hits)" list="spell-crit-size")
td(colspan="2" style="background-color: transparent;")
button(type="action" name="act_spell-crit2" class="btn sheet-action-button" title="%{repeating_spells-#REPLACE0#_$X_spell-crit2}") Critical Effect
tr
th Damage:
td
textarea(name="attr_spell-damage" title="@{repeating_spells-#REPLACE0#_$X_spell-damage}" class="sheet-spell-half sheet-input-like" placeholder="[[Damage]]")
th Damage Type:
td
input(type="text" name="attr_spell-damage-type" title="@{repeating_spells-#REPLACE0#_$X_spell-damage-type}" class="sheet-spell-half" placeholder="Damage type" list="spell-damage-type")
tr
th Healing:
td(colspan="3")
textarea(name="attr_spell-healing" title="@{repeating_spells-#REPLACE0#_$X_spell-healing}" class="sheet-table-dynamic sheet-input-like" placeholder="[[Healing]]")
tr
th Reference:
td(colspan="3")
input(type="text" name="attr_spell-reference" title="@{repeating_spells-#REPLACE0#_$X_spell-reference}" class="sheet-table-dynamic" placeholder="Book Reference")
tr
th Materials:
td(colspan="3")
textarea(name="attr_spell-materials" title="@{repeating_spells-#REPLACE0#_$X_spell-materials}" class="sheet-table-dynamic sheet-input-like" placeholder="Materials")
textarea(name="attr_spell-effect" title="@{repeating_spells-#REPLACE0#_$X_spell-effect}" placeholder="Insert Spell effects." class="sheet-spell-effect")
+13 -1
View File
@@ -216,9 +216,21 @@
{
"displayname": " "
},
{
"attribute": "spell-tracking-system",
"displayname": "System for Spell Tracking",
"type": "select",
"options": [
"Spell Slots|spell-slots",
"Spell Points|spell-points",
"Arcs, Songs, Winds|spell-arcs-winds"
],
"default": "spell-slots",
"description": "AD&D 2E have different systems for tracking spells, three have been implemented: Spell Slots: The default system described in the Player's Handbook. Spell Points: Introduced in Player's Option: Spells & Magic. Arcs, Songs, Winds: Introduced in Forgotten Realms, Netheril: Empire of Magic"
},
{
"attribute": "misc-mod",
"displayname": "Miscellaneous modifier on Rolls",
"displayname": "Miscellaneous modifier popup on rolls",
"type": "select",
"options": [
"Popup on rolls|?{Misc. modifier?|0}",