Merge pull request #8186 from wesbaker/ose-1.9.0

[Old-School Essentials by Necrotic Gnome] - 1.9.0
This commit is contained in:
Miguel Peres
2021-02-01 11:38:01 -03:00
committed by GitHub
5 changed files with 205 additions and 51 deletions
+14
View File
@@ -2,6 +2,20 @@
[GitHub Project Status board](https://github.com/wesbaker/roll20-character-sheets/projects/1)
## 1.9.0
### Added
- Add modifiers to attribute scores
- Add roll button for NPC Reaction
- Add spells tab
- Add default sheet setting for default character type
### Changed
- Change rolltemplates to show character name
- Change button hover color to orange for better contrast
## 1.8.0
### Changed
+26 -10
View File
@@ -90,8 +90,8 @@ input[type="number"] {
.sheet-roll button[type="roll"]:hover,
.sheet-roll button[type="action"]:hover {
color: #990000;
border-color: #990000;
color: #ff6600;
border-color: #ff6600;
border: 1px 1px 1px 1px;
}
@@ -322,12 +322,9 @@ input[name="attr_armorClassType"][value="aac"] ~ .sheet-matrix {
.sheet-rolltemplate-skill h3 {
color: white;
background-color: #333;
display: inline-block;
vertical-align: middle;
line-height: 2.2rem;
padding: 0.75rem;
text-align: center;
line-height: 3em;
height: 3em;
width: 100%;
}
.sheet-rolltemplate-simple span,
@@ -595,17 +592,27 @@ input[name="attr_spellRollType"][value="describe"]
width: 3.5rem;
}
/* Ability Scores */
.sheet-scores input[type="number"] {
max-width: 3.5rem;
}
/* Spells per Level */
.sheet-split-value > input[type="number"]:first-of-type,
.sheet-spells-per-level > label > input[type="number"]:first-of-type {
border-right: 0 none;
}
.sheet-split-value > input[type="number"]:last-of-type,
.sheet-spells-per-level > label > input[type="number"]:last-of-type {
border-left: 0 none;
}
.sheet-split-value .sheet-divider,
.sheet-spells-per-level .sheet-divider {
align-items: center;
background: white;
border-color: #ccc;
border-style: solid;
@@ -613,14 +620,17 @@ input[name="attr_spellRollType"][value="describe"]
box-sizing: border-box;
color: #aaa;
cursor: text;
display: inline-block;
height: 3.5rem;
display: inline-flex;
justify-content: center;
line-height: 3.5rem;
margin: 0;
text-align: center;
width: auto;
}
.sheet-spells-per-level .sheet-divider {
height: 3.5rem;
}
.sheet-memorized::after {
content: "e";
font-family: pictos;
@@ -658,6 +668,8 @@ input.sheet-expand:checked ~ input.sheet-weapon-description {
/* Tabs */
.sheet-character,
/* .charsheet is needed since .sheet-spells is used elsewhere */
.charsheet .sheet-spells,
.sheet-retainers,
.sheet-monster,
.sheet-notes,
@@ -666,6 +678,7 @@ input.sheet-expand:checked ~ input.sheet-weapon-description {
}
input[name="attr_sheetTab"][value="character"] ~ div.sheet-character,
input[name="attr_sheetTab"][value="spells"] ~ div.sheet-spells,
input[name="attr_sheetTab"][value="retainers"] ~ div.sheet-retainers,
input[name="attr_sheetTab"][value="monster"] ~ div.sheet-monster,
input[name="attr_sheetTab"][value="notes"] ~ div.sheet-notes,
@@ -692,6 +705,9 @@ input[name="attr_sheetTab"][value="settings"] ~ div.sheet-settings {
input[name="attr_sheetTab"][value="character"]
~ .sheet-button-select
button[name="act_character"],
input[name="attr_sheetTab"][value="spells"]
~ .sheet-button-select
button[name="act_spells"],
input[name="attr_sheetTab"][value="retainers"]
~ .sheet-button-select
button[name="act_retainers"],
+147 -40
View File
@@ -14,6 +14,7 @@
<button type="action" name="act_character" data-i18n="character">
Character
</button>
<button type="action" name="act_spells" data-i18n="spells">Spells</button>
<button type="action" name="act_retainers" data-i18n="retainers">Retainers</button>
<button type="action" name="act_monster" data-i18n="monster">Monster</button>
<button type="action" name="act_notes" data-i18n="notes">Notes</button>
@@ -121,53 +122,65 @@
<div>
<h1 data-i18n="ability-scores">Ability Scores</h1>
<div class="scores roll flex">
<label class="inline-flex inline-flex-wide-label">
<label class="inline-flex inline-flex-wide-label split-value">
<button type="roll" name="attr_rollSTR"
value="&{template:less} {{roll=^{strength}}} {{result=[[ [[1d20]]<@{str}+@{optionalModQuery} ]]}} {{check=[[@{str}+@{optionalModQuery}]]}}"
value="&{template:less} {{roll=@{character_name} rolls ^{strength}}} {{result=[[ [[1d20]]<@{str}+@{optionalModQuery} ]]}} {{check=[[@{str}+@{optionalModQuery}]]}}"
data-i18n="strength-abbr">
STR
</button>
<input type="number" name="attr_str" value="10" />
<label class="divider" for="ability-strength-modifier">/</label>
<input type="number" min="0" id="ability-strength-modifier" name="attr_BonusSTR" value="0" />
</label>
<label class="inline-flex inline-flex-wide-label">
<label class="inline-flex inline-flex-wide-label split-value">
<button type="roll" name="attr_rollINT"
value="&{template:less} {{roll=^{intelligence}}} {{result=[[ [[1d20]]<@{int}+@{optionalModQuery} ]]}} {{check=[[@{int}+@{optionalModQuery}]]}}"
value="&{template:less} {{roll=@{character_name} rolls ^{intelligence}}} {{result=[[ [[1d20]]<@{int}+@{optionalModQuery} ]]}} {{check=[[@{int}+@{optionalModQuery}]]}}"
data-i18n="intelligence-abbr">
INT
</button>
<input type="number" name="attr_int" value="10" />
<label class="divider" for="ability-intelligence-modifier">/</label>
<input type="number" min="0" id="ability-intelligence-modifier" name="attr_intMod" value="0" />
</label>
<label class="inline-flex inline-flex-wide-label">
<label class="inline-flex inline-flex-wide-label split-value">
<button type="roll" name="attr_rollWIS"
value="&{template:less} {{roll=^{wisdom}}} {{result=[[ [[1d20]]<@{wis}+@{optionalModQuery} ]]}} {{check=[[@{wis}+@{optionalModQuery}]]}}"
value="&{template:less} {{roll=@{character_name} rolls ^{wisdom}}} {{result=[[ [[1d20]]<@{wis}+@{optionalModQuery} ]]}} {{check=[[@{wis}+@{optionalModQuery}]]}}"
data-i18n="wisdom-abbr">
WIS
</button>
<input type="number" name="attr_wis" value="10" />
<label class="divider" for="ability-wisdom-modifier">/</label>
<input type="number" min="0" id="ability-wisdom-modifier" name="attr_wisMod" value="0" />
</label>
<label class="inline-flex inline-flex-wide-label">
<label class="inline-flex inline-flex-wide-label split-value">
<button type="roll" name="attr_rollDEX"
value="&{template:less} {{roll=^{dexterity}}} {{result=[[ [[1d20]]<@{dex}+@{optionalModQuery} ]]}} {{check=[[@{dex}+@{optionalModQuery}]]}}"
value="&{template:less} {{roll=@{character_name} rolls ^{dexterity}}} {{result=[[ [[1d20]]<@{dex}+@{optionalModQuery} ]]}} {{check=[[@{dex}+@{optionalModQuery}]]}}"
data-i18n="dexterity-abbr">
DEX
</button>
<input type="number" name="attr_dex" value="10" />
<label class="divider" for="ability-dexterity-modifier">/</label>
<input type="number" min="0" id="ability-dexterity-modifier" name="attr_BonusDEX" value="0" />
</label>
<label class="inline-flex inline-flex-wide-label">
<label class="inline-flex inline-flex-wide-label split-value">
<button type="roll" name="attr_rollCON"
value="&{template:less} {{roll=^{constitution}}} {{result=[[ [[1d20]]<@{con}+@{optionalModQuery} ]]}} {{check=[[@{con}+@{optionalModQuery}]]}}"
value="&{template:less} {{roll=@{character_name} rolls ^{constitution}}} {{result=[[ [[1d20]]<@{con}+@{optionalModQuery} ]]}} {{check=[[@{con}+@{optionalModQuery}]]}}"
data-i18n="constitution-abbr">
CON
</button>
<input type="number" name="attr_con" value="10" />
<label class="divider" for="ability-constitution-modifier">/</label>
<input type="number" min="0" id="ability-constitution-modifier" name="attr_HPConMod" value="0" />
</label>
<label class="inline-flex inline-flex-wide-label">
<label class="inline-flex inline-flex-wide-label split-value">
<button type="roll" name="attr_rollCHA"
value="&{template:less} {{roll=^{charisma}}} {{result=[[ [[1d20]]<@{cha}+@{optionalModQuery} ]]}} {{check=[[@{cha}+@{optionalModQuery}]]}}"
value="&{template:less} {{roll=@{character_name} rolls ^{charisma}}} {{result=[[ [[1d20]]<@{cha}+@{optionalModQuery} ]]}} {{check=[[@{cha}+@{optionalModQuery}]]}}"
data-i18n="charisma-abbr">
CHA
</button>
<input type="number" name="attr_cha" value="10" />
<label class="divider" for="ability-charisma-modifier">/</label>
<input type="number" min="0" id="ability-charisma-modifier" name="attr_chaMod" value="0" />
</label>
</div>
</div>
@@ -177,7 +190,7 @@
<div class="exploration roll flex">
<label class="inline-flex inline-flex-wide-label">
<button type="roll" name="attr_rollListenDoor"
value="&{template:less} {{roll=^{listen-at-door-full}}} {{result=[[ [[1d6]]<@{ListenDoor}+@{optionalModQuery} ]]}} {{check=[[@{ListenDoor}+@{optionalModQuery}]]}}"
value="&{template:less} {{roll=@{character_name} checks ^{listen-at-door-full}}} {{result=[[ [[1d6]]<@{ListenDoor}+@{optionalModQuery} ]]}} {{check=[[@{ListenDoor}+@{optionalModQuery}]]}}"
data-i18n="listen-at-door">
Listen at door
</button>
@@ -185,7 +198,7 @@
</label>
<label class="inline-flex inline-flex-wide-label">
<button type="roll" name="attr_rollOpenDoor"
value="&{template:less} {{roll=^{open-stuck-door-full}}} {{result=[[ [[1d6]]<@{OpenDoor}+@{optionalModQuery} ]]}} {{check=[[@{OpenDoor}+@{optionalModQuery}]]}}"
value="&{template:less} {{roll=@{character_name} checks ^{open-stuck-door-full}}} {{result=[[ [[1d6]]<@{OpenDoor}+@{optionalModQuery} ]]}} {{check=[[@{OpenDoor}+@{optionalModQuery}]]}}"
data-i18n="open-stuck-door">
Open stuck door
</button>
@@ -193,7 +206,7 @@
</label>
<label class="inline-flex inline-flex-wide-label">
<button type="roll" name="attr_rollFindSecretDoor"
value="&{template:less} {{roll=^{find-secret-door-full}}} {{result=[[ [[1d6]]<@{FindSecretDoor}+@{optionalModQuery} ]]}} {{check=[[@{FindSecretDoor}+@{optionalModQuery}]]}}"
value="&{template:less} {{roll=@{character_name} checks ^{find-secret-door-full}}} {{result=[[ [[1d6]]<@{FindSecretDoor}+@{optionalModQuery} ]]}} {{check=[[@{FindSecretDoor}+@{optionalModQuery}]]}}"
data-i18n="find-secret-door">
Find secret door
</button>
@@ -201,7 +214,7 @@
</label>
<label class="inline-flex inline-flex-wide-label">
<button type="roll" name="attr_rollFindRoomTrap"
value="&{template:less} {{roll=^{find-room-trap-full}}} {{result=[[ [[1d6]]<@{FindRoomTrap}+@{optionalModQuery} ]]}} {{check=[[@{FindRoomTrap}+@{optionalModQuery}]]}}"
value="&{template:less} {{roll=@{character_name} checks ^{find-room-trap-full}}} {{result=[[ [[1d6]]<@{FindRoomTrap}+@{optionalModQuery} ]]}} {{check=[[@{FindRoomTrap}+@{optionalModQuery}]]}}"
data-i18n="find-room-trap">
Find room trap
</button>
@@ -215,7 +228,7 @@
<div class="saving roll flex">
<label class="inline-flex inline-flex-wide-label">
<button type="roll" name="attr_rollSaveD"
value="&{template:greater} {{roll=^{death-poison-full}}} {{result=[[ [[1d20]]+@{wisdomSaveQuery}>+@{modQuery}@{saveD} ]]}} {{check=[[@{saveD}]]}}"
value="&{template:greater} {{roll=@{character_name} rolls save against ^{death-poison-full}}} {{result=[[ [[1d20]]+@{wisdomSaveQuery}>+@{modQuery}@{saveD} ]]}} {{check=[[@{saveD}]]}}"
data-i18n="death-poison">
Death, Poison
</button>
@@ -223,7 +236,7 @@
</label>
<label class="inline-flex inline-flex-wide-label">
<button type="roll" name="attr_rollSaveW"
value="&{template:greater} {{roll=^{magic-wands-full}}} {{result=[[ [[1d20]]+@{wisdomSaveQuery}+@{modQuery}>@{saveW} ]]}} {{check=[[@{saveW}]]}}"
value="&{template:greater} {{roll=@{character_name} rolls save against ^{magic-wands-full}}} {{result=[[ [[1d20]]+@{wisdomSaveQuery}+@{modQuery}>@{saveW} ]]}} {{check=[[@{saveW}]]}}"
data-i18n="magic-wands">
Magic wands
</button>
@@ -231,7 +244,7 @@
</label>
<label class="inline-flex inline-flex-wide-label">
<button type="roll" name="attr_rollSaveP"
value="&{template:greater} {{roll=^{paralysis-petrification-full}}} {{result=[[ [[1d20]]+@{wisdomSaveQuery}+@{modQuery}>@{saveP} ]]}} {{check=[[@{saveP}]]}}"
value="&{template:greater} {{roll=@{character_name} rolls save against ^{paralysis-petrification-full}}} {{result=[[ [[1d20]]+@{wisdomSaveQuery}+@{modQuery}>@{saveP} ]]}} {{check=[[@{saveP}]]}}"
data-i18n="paralysis-petrification">
Paralysis, Petrification
</button>
@@ -239,7 +252,7 @@
</label>
<label class="inline-flex inline-flex-wide-label">
<button type="roll" name="attr_rollSaveB"
value="&{template:greater} {{roll=^{breath-attacks-full}}} {{result=[[ [[1d20]]+@{wisdomSaveQuery}+@{modQuery}>@{saveB} ]]}} {{check=[[@{saveB}]]}}"
value="&{template:greater} {{roll=@{character_name} rolls save against ^{breath-attacks-full}}} {{result=[[ [[1d20]]+@{wisdomSaveQuery}+@{modQuery}>@{saveB} ]]}} {{check=[[@{saveB}]]}}"
data-i18n="breath-attacks">
Breath attacks
</button>
@@ -247,7 +260,7 @@
</label>
<label class="inline-flex inline-flex-wide-label">
<button type="roll" name="attr_rollSaveS"
value="&{template:greater} {{roll=^{spells-rods-staves-full}}} {{result=[[ [[1d20]]+@{wisdomSaveQuery}+@{modQuery}>@{saveS} ]]}} {{check=[[@{saveS}]]}}"
value="&{template:greater} {{roll=@{character_name} rolls save against ^{spells-rods-staves-full}}} {{result=[[ [[1d20]]+@{wisdomSaveQuery}+@{modQuery}>@{saveS} ]]}} {{check=[[@{saveS}]]}}"
data-i18n="spells-rods-staves">
Spells, Rods, Staves
</button>
@@ -273,7 +286,7 @@
<fieldset class="repeating_abilities">
<div class="abilities-grid">
<button type="roll" name="abilityRoll"
value="&{template:skill} {{name=@{}}} {{symbol=[[@{abilityDirection}]]}} {{roll=@{abilityName}}} {{result=[[@{abilityRoll}]]}} {{check=[[0+@{abilityThreshold}]]}} {{description=@{abilityDescription}}}"></button>
value="&{template:skill} {{name=@{}}} {{symbol=[[@{abilityDirection}]]}} {{roll=@{character_name} rolls @{abilityName}}} {{result=[[@{abilityRoll}]]}} {{check=[[0+@{abilityThreshold}]]}} {{description=@{abilityDescription}}}"></button>
<input type="text" name="attr_abilityName" placeholder="Name" data-i18n="name" />
<input type="text" class="half-input" name="attr_abilityRoll" value="2d6" />
<select name="attr_abilityDirection" class="half-input">
@@ -376,7 +389,8 @@
<label class="inline-flex">
<input type="hidden" name="attr_individualInitiative" value="disabled" />
<button type="roll" name="attr_rollInit"
value="&{template:simple} {{roll=Initiative}} {{result=[[1d6 &{tracker}]]}}" data-i18n="initiative-init">
value="&{template:simple} {{roll=Player's Initiative}} {{result=[[1d6 &{tracker}]]}}"
data-i18n="initiative-init">
Init.
</button>
<button type="roll" name="attr_rollInitIndividual"
@@ -461,10 +475,10 @@
<div>
<!-- AAC Attack -->
<button type="roll" name="aacAttackRoll" class="attack-roll attack-roll-aac"
value="&{template:simple} {{roll=Attack with @{weaponName}}} {{attack=[[1d20+@{weaponAttributeBonus}+@{weaponAttackBonus}+@{bab}+@{optionalModQuery}]]}} {{damage=[[@{weaponDamageDie}+@{weaponDamageBonus}+@{weaponAttributeBonusDamage}]]}} {{description=@{weaponDescription}}}"></button>
value="&{template:simple} {{roll=@{character_name} attacks with @{weaponName}}} {{attack=[[1d20+@{weaponAttributeBonus}+@{weaponAttackBonus}+@{bab}+@{optionalModQuery}]]}} {{damage=[[@{weaponDamageDie}+@{weaponDamageBonus}+@{weaponAttributeBonusDamage}]]}} {{description=@{weaponDescription}}}"></button>
<!-- DAC Attack (no BAB added) -->
<button type="roll" name="dacAttackRoll" class="attack-roll attack-roll-dac"
value="&{template:simple} {{roll=Attack with @{weaponName}}} {{attack=[[1d20+@{weaponAttributeBonus}+@{weaponAttackBonus}+@{optionalModQuery}]]}} {{damage=[[@{weaponDamageDie}+@{weaponDamageBonus}+@{weaponAttributeBonusDamage}]]}} {{description=@{weaponDescription}}} {{attackMatrix9=@{attackMatrix9}}} {{attackMatrix8=@{attackMatrix8}}} {{attackMatrix7=@{attackMatrix7}}} {{attackMatrix6=@{attackMatrix6}}} {{attackMatrix5=@{attackMatrix5}}} {{attackMatrix4=@{attackMatrix4}}} {{attackMatrix3=@{attackMatrix3}}} {{attackMatrix2=@{attackMatrix2}}} {{attackMatrix1=@{attackMatrix1}}} {{attackMatrix0=@{attackMatrix0}}}"></button>
value="&{template:simple} {{roll=@{character_name} attacks with @{weaponName}}} {{attack=[[1d20+@{weaponAttributeBonus}+@{weaponAttackBonus}+@{optionalModQuery}]]}} {{damage=[[@{weaponDamageDie}+@{weaponDamageBonus}+@{weaponAttributeBonusDamage}]]}} {{description=@{weaponDescription}}} {{attackMatrix9=@{attackMatrix9}}} {{attackMatrix8=@{attackMatrix8}}} {{attackMatrix7=@{attackMatrix7}}} {{attackMatrix6=@{attackMatrix6}}} {{attackMatrix5=@{attackMatrix5}}} {{attackMatrix4=@{attackMatrix4}}} {{attackMatrix3=@{attackMatrix3}}} {{attackMatrix2=@{attackMatrix2}}} {{attackMatrix1=@{attackMatrix1}}} {{attackMatrix0=@{attackMatrix0}}}"></button>
</div>
<input type="text" name="attr_weaponName" placeholder="Weapon Name" />
<select name="attr_attackType">
@@ -548,9 +562,9 @@
<div>
<input type="hidden" name="attr_spellRollType" value="describe" />
<button type="roll" name="spellCast" class="roll"
value="&{template:simple} {{roll=Casts @{spellName}}} {{duration=@{spellDuration}}} {{range=@{spellRange}}} {{description=@{spellDescription}}} {{effect=[[@{spellEffect}]]}}"></button>
value="&{template:simple} {{roll=@{character_name} casts @{spellName}}} {{duration=@{spellDuration}}} {{range=@{spellRange}}} {{description=@{spellDescription}}} {{effect=[[@{spellEffect}]]}}"></button>
<button type="roll" name="spellDescribe" class="roll-describe"
value="&{template:simple} {{roll=Casts @{spellName}}} {{duration=@{spellDuration}}} {{range=@{spellRange}}} {{description=@{spellDescription}}}"></button>
value="&{template:simple} {{roll=@{character_name} casts @{spellName}}} {{duration=@{spellDuration}}} {{range=@{spellRange}}} {{description=@{spellDescription}}}"></button>
</div>
<input type="number" min="0" name="attr_spellMemorized" checked data-i18n-title="memorized" title="Memorized"
value="0" />
@@ -643,12 +657,99 @@
</div>
</div>
<div class="sheet-spells sheet-repeat">
<h1>Spells</h1>
<div class="flex grid-spacing spells-per-level">
<label class="inline-flex">
<span>1</span>
<input type="number" min="0" name="attr_spellsLevel1Available" title="Spells Available"
data-i18n-title="spells-available" value="0" />
<label class="divider" for="spells-level-1-total">/</label>
<input type="number" min="0" id="spells-level-1-total" name="attr_spellsLevel1Total" title="Spells Total"
data-i18n-title="spells-total" value="0" />
</label>
<label class="inline-flex">
<span>2</span>
<input type="number" min="0" name="attr_spellsLevel2Available" title="Spells Available"
data-i18n-title="spells-available" value="0" />
<label class="divider" for="spells-level-2-total">/</label>
<input type="number" min="0" id="spells-level-2-total" name="attr_spellsLevel2Total" title="Spells Total"
data-i18n-title="spells-total" value="0" />
</label>
<label class="inline-flex">
<span>3</span>
<input type="number" min="0" name="attr_spellsLevel3Available" title="Spells Available"
data-i18n-title="spells-available" value="0" />
<label class="divider" for="spells-level-3-total">/</label>
<input type="number" min="0" id="spells-level-3-total" name="attr_spellsLevel3Total" title="Spells Total"
data-i18n-title="spells-total" value="0" />
</label>
<label class="inline-flex">
<span>4</span>
<input type="number" min="0" name="attr_spellsLevel4Available" title="Spells Available"
data-i18n-title="spells-available" value="0" />
<label class="divider" for="spells-level-4-total">/</label>
<input type="number" min="0" id="spells-level-4-total" name="attr_spellsLevel4Total" title="Spells Total"
data-i18n-title="spells-total" value="0" />
</label>
<label class="inline-flex">
<span>5</span>
<input type="number" min="0" name="attr_spellsLevel5Available" title="Spells Available"
data-i18n-title="spells-available" value="0" />
<label class="divider" for="spells-level-5-total">/</label>
<input type="number" min="0" id="spells-level-5-total" name="attr_spellsLevel5Total" title="Spells Total"
data-i18n-title="spells-total" value="0" />
</label>
<label class="inline-flex">
<span>6</span>
<input type="number" min="0" name="attr_spellsLevel6Available" title="Spells Available"
data-i18n-title="spells-available" value="0" />
<label class="divider" for="spells-level-6-total">/</label>
<input type="number" min="0" id="spells-level-6-total" name="attr_spellsLevel6Total" title="Spells Total"
data-i18n-title="spells-total" value="0" />
</label>
</div>
<div class="spells-grid">
<span></span>
<span data-i18n-title="memorized" title="Memorized" class="memorized"></span>
<span data-i18n="name">Name</span>
<span data-i18n="level-abbr">LVL</span>
<span data-i18n="duration">Duration</span>
<span data-i18n="range">Range</span>
<span data-i18n="description">Description</span>
<span data-i18n="effect-roll">Effect Roll</span>
</div>
<fieldset class="repeating_spells">
<div class="spells-grid">
<div>
<input type="hidden" name="attr_spellRollType" value="describe" />
<button type="roll" name="spellCast" class="roll"
value="&{template:simple} {{roll=@{character_name} casts @{spellName}}} {{duration=@{spellDuration}}} {{range=@{spellRange}}} {{description=@{spellDescription}}} {{effect=[[@{spellEffect}]]}}"></button>
<button type="roll" name="spellDescribe" class="roll-describe"
value="&{template:simple} {{roll=@{character_name} casts @{spellName}}} {{duration=@{spellDuration}}} {{range=@{spellRange}}} {{description=@{spellDescription}}}"></button>
</div>
<input type="number" min="0" name="attr_spellMemorized" checked data-i18n-title="memorized" title="Memorized"
value="0" />
<input type="text" name="attr_spellName" placeholder="Spell Name"
data-i18n-placeholder="spell-name-placeholder" />
<input type="number" min="1" name="attr_spellLevel" value="1" />
<input type="text" name="attr_spellDuration" />
<input type="text" name="attr_spellRange" />
<input type="text" name="attr_spellDescription" placeholder="Description" data-i18n-placeholder="description" />
<input type="text" class="half-input" name="attr_spellEffect" />
</div>
</fieldset>
</div>
<div class="sheet-retainers">
<div>
<h1 data-i18n="retainer-modifiers">Retainer Modifiers</h1>
<div class="flex">
<div class="flex roll">
<label class="inline-flex inline-flex-wide-label">
<span data-i18n="npc-reaction">NPC Reaction</span>
<button type="roll" name="attr_rollNPCReaction"
value="&{template:simple} {{roll=@{character_name} rolls for NPC Reaction}} {{result=[[2d6+@{chaMod}]]}}"
data-i18n="npc-reaction">NPC
Reaction</button>
<input type="number" readOnly name="attr_chaMod" value="0" />
</label>
<label class="inline-flex inline-flex-wide-label">
@@ -792,7 +893,8 @@
<label class="inline-flex initiative">
<input type="hidden" name="attr_individualInitiative" value="disabled" />
<button type="roll" name="attr_rollInit"
value="&{template:simple} {{roll=Initiative}} {{result=[[1d6 &{tracker}]]}}" data-i18n="initiative-init">
value="&{template:simple} {{roll=Enemy Initiative}} {{result=[[1d6 &{tracker}]]}}"
data-i18n="initiative-init">
Init.
</button>
<button type="roll" name="attr_rollInitIndividual"
@@ -905,10 +1007,10 @@
<div class="weapons-grid">
<!-- AAC Attack -->
<button type="roll" name="aacAttackRoll" class="attack-roll attack-roll-aac"
value="&{template:simple} {{roll=Attack with @{weaponName}}} {{attack=[[1d20+@{monsterBAB}+@{optionalModQuery}]]}} {{damage=[[@{weaponDamageDie}]]}} {{description=@{weaponDescription}}}"></button>
value="&{template:simple} {{roll=@{character_name} attacks with @{weaponName}}} {{attack=[[1d20+@{monsterBAB}+@{optionalModQuery}]]}} {{damage=[[@{weaponDamageDie}]]}} {{description=@{weaponDescription}}}"></button>
<!-- DAC Attack (no BAB added) -->
<button type="roll" name="dacAttackRoll" class="attack-roll attack-roll-dac"
value="&{template:simple} {{roll=Attack with @{weaponName}}} {{attack=[[1d20+@{optionalModQuery}]]}} {{damage=[[@{weaponDamageDie}]]}} {{description=@{weaponDescription}}} {{attackMatrix9=@{monsterAttackMatrix9}}} {{attackMatrix8=@{monsterAttackMatrix8}}} {{attackMatrix7=@{monsterAttackMatrix7}}} {{attackMatrix6=@{monsterAttackMatrix6}}} {{attackMatrix5=@{monsterAttackMatrix5}}} {{attackMatrix4=@{monsterAttackMatrix4}}} {{attackMatrix3=@{monsterAttackMatrix3}}} {{attackMatrix2=@{monsterAttackMatrix2}}} {{attackMatrix1=@{monsterAttackMatrix1}}} {{attackMatrix0=@{monsterAttackMatrix0}}}"></button>
value="&{template:simple} {{roll=@{character_name} attacks with @{weaponName}}} {{attack=[[1d20+@{optionalModQuery}]]}} {{damage=[[@{weaponDamageDie}]]}} {{description=@{weaponDescription}}} {{attackMatrix9=@{monsterAttackMatrix9}}} {{attackMatrix8=@{monsterAttackMatrix8}}} {{attackMatrix7=@{monsterAttackMatrix7}}} {{attackMatrix6=@{monsterAttackMatrix6}}} {{attackMatrix5=@{monsterAttackMatrix5}}} {{attackMatrix4=@{monsterAttackMatrix4}}} {{attackMatrix3=@{monsterAttackMatrix3}}} {{attackMatrix2=@{monsterAttackMatrix2}}} {{attackMatrix1=@{monsterAttackMatrix1}}} {{attackMatrix0=@{monsterAttackMatrix0}}}"></button>
<input type="number" min="0" name="attr_weaponAttacks" value="1" />
<input type="text" name="attr_weaponName" placeholder="Weapon" data-i18n-placeholder="weapon" />
<input type="text" name="attr_weaponDamageDie" value="1d6" class="input-as-number" />
@@ -950,9 +1052,9 @@
<div>
<input type="hidden" name="attr_spellRollType" value="describe" />
<button type="roll" name="spellCast" class="roll"
value="&{template:simple} {{roll=Casts @{spellName}}} {{duration=@{spellDuration}}} {{range=@{spellRange}}} {{description=@{spellDescription}}} {{effect=[[@{spellEffect}]]}}"></button>
value="&{template:simple} {{roll=@{character_name} casts @{spellName}}} {{duration=@{spellDuration}}} {{range=@{spellRange}}} {{description=@{spellDescription}}} {{effect=[[@{spellEffect}]]}}"></button>
<button type="roll" name="spellDescribe" class="roll-describe"
value="&{template:simple} {{roll=Casts @{spellName}}} {{duration=@{spellDuration}}} {{range=@{spellRange}}} {{description=@{spellDescription}}}"></button>
value="&{template:simple} {{roll=@{character_name} casts @{spellName}}} {{duration=@{spellDuration}}} {{range=@{spellRange}}} {{description=@{spellDescription}}}"></button>
</div>
<input type="text" name="attr_spellName" placeholder="Magic Missile"
data-i18n-placeholder="spell-name-placeholder" />
@@ -972,7 +1074,7 @@
<div class="saving roll flex">
<label class="inline-flex inline-flex-wide-label">
<button type="roll" name="attr_rollSaveD"
value="&{template:greater} {{roll=^{death-poison-full}}} {{result=[[ [[1d20]]>@{saveD}+@{modQuery} ]]}} {{check=[[@{saveD}+@{modQuery}]]}}"
value="&{template:greater} {{roll=@{character_name} rolls save against ^{death-poison-full}}} {{result=[[ [[1d20]]>@{saveD}+@{modQuery} ]]}} {{check=[[@{saveD}+@{modQuery}]]}}"
data-i18n="death-poison">
Death, Poison
</button>
@@ -981,7 +1083,7 @@
<label class="inline-flex inline-flex-wide-label">
<button type="roll" name="attr_rollSaveW"
value="&{template:greater} {{roll=^{magic-wands-full}}} {{result=[[ [[1d20]]>@{saveW}+@{modQuery} ]]}} {{check=[[@{saveW}+@{modQuery}]]}}"
value="&{template:greater} {{roll=@{character_name} rolls save against ^{magic-wands-full}}} {{result=[[ [[1d20]]>@{saveW}+@{modQuery} ]]}} {{check=[[@{saveW}+@{modQuery}]]}}"
data-i18n="magic-wands">
Magic wands
</button>
@@ -990,7 +1092,7 @@
<label class="inline-flex inline-flex-wide-label">
<button type="roll" name="attr_rollSaveP"
value="&{template:greater} {{roll=^{paralysis-petrification-full}}} {{result=[[ [[1d20]]>@{saveP}+@{modQuery} ]]}} {{check=[[@{saveP}+@{modQuery}]]}}"
value="&{template:greater} {{roll=@{character_name} rolls save against ^{paralysis-petrification-full}}} {{result=[[ [[1d20]]>@{saveP}+@{modQuery} ]]}} {{check=[[@{saveP}+@{modQuery}]]}}"
data-i18n="paralysis-petrification">
Paralysis, Petrification
</button>
@@ -999,7 +1101,7 @@
<label class="inline-flex inline-flex-wide-label">
<button type="roll" name="attr_rollSaveB"
value="&{template:greater} {{roll=^{breath-attacks-full}}} {{result=[[ [[1d20]]>@{saveB}+@{modQuery} ]]}} {{check=[[@{saveB}+@{modQuery}]]}}"
value="&{template:greater} {{roll=@{character_name} rolls save against ^{breath-attacks-full}}} {{result=[[ [[1d20]]>@{saveB}+@{modQuery} ]]}} {{check=[[@{saveB}+@{modQuery}]]}}"
data-i18n="breath-attacks">
Breath attacks
</button>
@@ -1007,7 +1109,7 @@
</label>
<label class="inline-flex inline-flex-wide-label">
<button type="roll" name="attr_rollSaveS"
value="&{template:greater} {{roll=^{spells-rods-staves-full}}} {{result=[[ [[1d20]]>@{saveS}+@{modQuery} ]]}} {{check=[[@{saveS}+@{modQuery}]]}}"
value="&{template:greater} {{roll=@{character_name} rolls save against ^{spells-rods-staves-full}}} {{result=[[ [[1d20]]>@{saveS}+@{modQuery} ]]}} {{check=[[@{saveS}+@{modQuery}]]}}"
data-i18n="spells-rods-staves">
Spells, Rods, Staves
</button>
@@ -1397,7 +1499,7 @@
});
// Tabs
const buttonlist = ["character", "retainers", "monster", "notes", "settings"];
const buttonlist = ["character", "spells", "retainers", "monster", "notes", "settings"];
buttonlist.forEach((button) => {
on(`clicked:${button}`, function (event) {
setAttrs({ sheetTab: button });
@@ -1452,6 +1554,11 @@
setAttrs({ HPConMod: getModifiers(values.con) });
});
});
on("sheet:opened change:int", function () {
getAttrs(["int"], function (values) {
setAttrs({ intMod: getModifiers(values.int) });
});
});
on("sheet:opened change:wis", function () {
getAttrs(["wis"], function (values) {
const wisMod = getModifiers(values.wis);
+14
View File
@@ -21,6 +21,20 @@
"descending-armor-class"
]
},
{
"attribute": "sheetTab",
"displayname": "Default Character Type",
"displaytranslationkey": "default-character-type",
"type": "select",
"options": [
"Player Character|character",
"Non-player Character|monster"
],
"optiontranslationkeys": [
"player-character",
"non-player-character"
]
},
{
"attribute": "situationalBonusEnabled",
"displayname": "Situational Bonus Enabled?",
+4 -1
View File
@@ -178,5 +178,8 @@
"loyalty": "Loyalty",
"wisdom-save-apply": "Does the Wisdom modifier apply? (i.e. versus magical effects that aren't breath weapons)",
"yes": "Yes",
"no": "No"
"no": "No",
"default-character-type": "Default Character Type",
"player-character": "Player Character",
"non-player-character": "Non-player Character"
}