Blades in the Dark v1.5
This commit is contained in:
@@ -4,6 +4,10 @@ This is a character sheet for Blades in the Dark for use on Roll20.
|
||||
|
||||
## Changelog
|
||||
|
||||
### 1.5
|
||||
* All items are now repeating
|
||||
* Optional description field added for all items (via settings menu)
|
||||
|
||||
### 1.4
|
||||
* Changes for items; made playbook items a repeating section, and added options for non-playbook-items.
|
||||
* Entering a playbook or crew name will now automatically generate abilities and friends/contacts
|
||||
|
||||
@@ -589,6 +589,7 @@
|
||||
</div>
|
||||
<!-- Items -->
|
||||
<div class="sheet-itemholder sheet-col100 sheet-items">
|
||||
<input type="checkbox" name="attr_setting_show_itemdesc" class="sheet-hidden"/>
|
||||
<!-- Playbook items -->
|
||||
<div class="sheet-playbookitems sheet-col100 sheet-small-repcontrol">
|
||||
<fieldset class="repeating_playbookitem">
|
||||
@@ -596,9 +597,9 @@
|
||||
<div class="sheet-item">
|
||||
<span>How much load?</span>
|
||||
<div class="sheet-numboxes-chooser">
|
||||
<input type="number" name="attr_numboxes" min="0" max="3"/>
|
||||
<input type="checkbox" name="attr_bold"/>
|
||||
<span>bold</span>
|
||||
<input type="number" name="attr_numboxes" min="0" max="3"/>
|
||||
<input type="checkbox" name="attr_boxes_chosen"/>
|
||||
<span>OK</span>
|
||||
</div>
|
||||
@@ -611,13 +612,16 @@
|
||||
<input type="checkbox" name="attr_numboxes" class="sheet-hidden" value="3"/>
|
||||
<input type="checkbox" name="attr_check_1" class="sheet-checkbox sheet-squarebox"/>
|
||||
<span></span>
|
||||
<span class="sheet-floatingbar"></span>
|
||||
<input type="checkbox" name="attr_check_2" class="sheet-checkbox sheet-squarebox"/>
|
||||
<span></span>
|
||||
<span class="sheet-floatingbar"></span>
|
||||
<input type="checkbox" name="attr_check_3" class="sheet-checkbox sheet-squarebox"/>
|
||||
<span></span>
|
||||
<span class="sheet-floatingbar sheet-boxesgeq2"></span>
|
||||
<input type="checkbox" name="attr_check_2" class="sheet-checkbox sheet-squarebox sheet-boxesgeq2"/>
|
||||
<span class="sheet-boxesgeq2"></span>
|
||||
<span class="sheet-floatingbar sheet-boxesgeq3 sheet-boxesgeq2"></span>
|
||||
<input type="checkbox" name="attr_check_3" class="sheet-checkbox sheet-squarebox sheet-boxesgeq3 sheet-boxesgeq2"/>
|
||||
<span class="sheet-boxesgeq3 sheet-boxesgeq2"></span>
|
||||
<input type="text" placeholder="Something Else?" name="attr_name"/>
|
||||
<input type="checkbox" name="attr_expand" class="sheet-expand"/>
|
||||
<span></span>
|
||||
<textarea name="attr_description" placeholder="Description"></textarea>
|
||||
</div>
|
||||
</fieldset>
|
||||
<input type="checkbox" class="sheet-hidden sheet-hidediv" name="attr_setting_show_frame"/>
|
||||
@@ -653,110 +657,16 @@
|
||||
</div>
|
||||
<!-- Regular items -->
|
||||
<div class="sheet-regularitems sheet-white-repcontrol sheet-col100">
|
||||
<div class="sheet-item">
|
||||
<input type="checkbox" name="attr_item_10_check" class="sheet-checkbox sheet-squarebox"/>
|
||||
<span></span>
|
||||
<input type="text" value="A Blade or Two" name="attr_item_10_desc"/>
|
||||
</div>
|
||||
<div class="sheet-item">
|
||||
<input type="checkbox" name="attr_item_11_check" class="sheet-checkbox sheet-squarebox"/>
|
||||
<span></span>
|
||||
<input type="text" value="Throwing Knives" name="attr_item_11_desc"/>
|
||||
</div>
|
||||
<div class="sheet-item sheet-itemshort">
|
||||
<input type="checkbox" name="attr_item_12_check" class="sheet-checkbox sheet-squarebox"/>
|
||||
<span></span>
|
||||
<input type="text" value="A Pistol" name="attr_item_12_desc"/>
|
||||
</div>
|
||||
<div class="sheet-item sheet-itemshort">
|
||||
<input type="checkbox" name="attr_item_13_check" class="sheet-checkbox sheet-squarebox"/>
|
||||
<span></span>
|
||||
<input type="text" value="A 2nd Pistol" name="attr_item_13_desc"/>
|
||||
</div>
|
||||
<div class="sheet-item sheet-item2box">
|
||||
<input type="checkbox" name="attr_item_14_check" class="sheet-checkbox sheet-squarebox"/>
|
||||
<span></span>
|
||||
<span class="sheet-floatingbar"></span>
|
||||
<input type="checkbox" name="attr_item_14_check_b" class="sheet-checkbox sheet-squarebox"/>
|
||||
<span></span>
|
||||
<input type="text" value="A Large Weapon" name="attr_item_14_desc"/>
|
||||
</div>
|
||||
<div class="sheet-item">
|
||||
<input type="checkbox" name="attr_item_15_check" class="sheet-checkbox sheet-squarebox"/>
|
||||
<span></span>
|
||||
<input type="text" value="An Unusual Weapon" name="attr_item_15_desc"/>
|
||||
</div>
|
||||
<div class="sheet-item sheet-itemshort sheet-item2box">
|
||||
<input type="checkbox" name="attr_item_16_check" class="sheet-checkbox sheet-squarebox"/>
|
||||
<span></span>
|
||||
<span class="sheet-floatingbar"></span>
|
||||
<input type="checkbox" name="attr_item_16_check_b" class="sheet-checkbox sheet-squarebox"/>
|
||||
<span></span>
|
||||
<input type="text" value="Armor" name="attr_item_16_desc"/>
|
||||
</div>
|
||||
<div class="sheet-item sheet-itemshort sheet-item3box">
|
||||
<input type="checkbox" name="attr_item_16_check_c" class="sheet-checkbox sheet-squarebox"/>
|
||||
<span></span>
|
||||
<span class="sheet-floatingbar"></span>
|
||||
<input type="checkbox" name="attr_item_16_check_d" class="sheet-checkbox sheet-squarebox"/>
|
||||
<span></span>
|
||||
<span class="sheet-floatingbar"></span>
|
||||
<input type="checkbox" name="attr_item_16_check_e" class="sheet-checkbox sheet-squarebox"/>
|
||||
<span></span>
|
||||
<input type="text" value="+Heavy" name="attr_item_16_desc_b"/>
|
||||
</div>
|
||||
<div class="sheet-item">
|
||||
<input type="checkbox" name="attr_item_17_check" class="sheet-checkbox sheet-squarebox"/>
|
||||
<span></span>
|
||||
<input type="text" value="Burglary Gear" name="attr_item_17_desc"/>
|
||||
</div>
|
||||
<div class="sheet-item sheet-item2box">
|
||||
<input type="checkbox" name="attr_item_18_check" class="sheet-checkbox sheet-squarebox"/>
|
||||
<span></span>
|
||||
<span class="sheet-floatingbar"></span>
|
||||
<input type="checkbox" name="attr_item_18_check_b" class="sheet-checkbox sheet-squarebox"/>
|
||||
<span></span>
|
||||
<input type="text" value="Climbing Gear" name="attr_item_18_desc"/>
|
||||
</div>
|
||||
<div class="sheet-item">
|
||||
<input type="checkbox" name="attr_item_19_check" class="sheet-checkbox sheet-squarebox"/>
|
||||
<span></span>
|
||||
<input type="text" value="Arcane Implements" name="attr_item_19_desc"/>
|
||||
</div>
|
||||
<div class="sheet-item">
|
||||
<input type="checkbox" name="attr_item_20_check" class="sheet-checkbox sheet-squarebox"/>
|
||||
<span></span>
|
||||
<input type="text" value="Documents" name="attr_item_20_desc"/>
|
||||
</div>
|
||||
<div class="sheet-item">
|
||||
<input type="checkbox" name="attr_item_21_check" class="sheet-checkbox sheet-squarebox"/>
|
||||
<span></span>
|
||||
<input type="text" value="Subterfuge Supplies" name="attr_item_21_desc"/>
|
||||
</div>
|
||||
<div class="sheet-item sheet-item2box">
|
||||
<input type="checkbox" name="attr_item_22_check" class="sheet-checkbox sheet-squarebox"/>
|
||||
<span></span>
|
||||
<span class="sheet-floatingbar"></span>
|
||||
<input type="checkbox" name="attr_item_22_check_b" class="sheet-checkbox sheet-squarebox"/>
|
||||
<span></span>
|
||||
<input type="text" value="Demolition Tools" name="attr_item_22_desc"/>
|
||||
</div>
|
||||
<div class="sheet-item">
|
||||
<input type="checkbox" name="attr_item_23_check" class="sheet-checkbox sheet-squarebox"/>
|
||||
<span></span>
|
||||
<input type="text" value="Tinkering Tools" name="attr_item_23_desc"/>
|
||||
</div>
|
||||
<div class="sheet-item">
|
||||
<input type="checkbox" name="attr_item_24_check" class="sheet-checkbox sheet-squarebox"/>
|
||||
<span></span>
|
||||
<input type="text" value="Lantern" name="attr_item_24_desc"/>
|
||||
</div>
|
||||
<fieldset class="repeating_item">
|
||||
<input type="checkbox" name="attr_short" class="sheet-hidden"/>
|
||||
<input type="checkbox" name="attr_expand" class="sheet-hidden"/>
|
||||
<input type="checkbox" name="attr_boxes_chosen" class="sheet-hidden"/>
|
||||
<div class="sheet-item">
|
||||
<span>How much load?</span>
|
||||
<div class="sheet-numboxes-chooser">
|
||||
<input type="number" name="attr_numboxes" min="0" max="3"/>
|
||||
<input type="checkbox" name="attr_short"/>
|
||||
<span>short</span>
|
||||
<input type="checkbox" name="attr_boxes_chosen"/>
|
||||
<span>OK</span>
|
||||
</div>
|
||||
@@ -768,13 +678,16 @@
|
||||
<input type="checkbox" name="attr_numboxes" class="sheet-hidden" value="3"/>
|
||||
<input type="checkbox" name="attr_check_1" class="sheet-checkbox sheet-squarebox"/>
|
||||
<span></span>
|
||||
<span class="sheet-floatingbar"></span>
|
||||
<input type="checkbox" name="attr_check_2" class="sheet-checkbox sheet-squarebox"/>
|
||||
<span></span>
|
||||
<span class="sheet-floatingbar"></span>
|
||||
<input type="checkbox" name="attr_check_3" class="sheet-checkbox sheet-squarebox"/>
|
||||
<span></span>
|
||||
<span class="sheet-floatingbar sheet-boxesgeq2"></span>
|
||||
<input type="checkbox" name="attr_check_2" class="sheet-checkbox sheet-squarebox sheet-boxesgeq2"/>
|
||||
<span class="sheet-boxesgeq2"></span>
|
||||
<span class="sheet-floatingbar sheet-boxesgeq3 sheet-boxesgeq2"></span>
|
||||
<input type="checkbox" name="attr_check_3" class="sheet-checkbox sheet-squarebox sheet-boxesgeq3 sheet-boxesgeq2"/>
|
||||
<span class="sheet-boxesgeq3 sheet-boxesgeq2"></span>
|
||||
<input type="text" placeholder="Something Else?" name="attr_name"/>
|
||||
<input type="checkbox" name="attr_expand" class="sheet-expand"/>
|
||||
<span></span>
|
||||
<textarea name="attr_description" placeholder="Description"></textarea>
|
||||
</div>
|
||||
</fieldset>
|
||||
</div>
|
||||
|
||||
@@ -163,9 +163,10 @@ label {
|
||||
margin: 0;
|
||||
}
|
||||
div {
|
||||
cursor: default;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
input[type="text"] {
|
||||
input[type=text] {
|
||||
font-family: Georgia, Times, "Times New Roman", serif;
|
||||
border: none;
|
||||
background: none;
|
||||
@@ -183,7 +184,10 @@ textarea {
|
||||
background: transparent;
|
||||
color: black;
|
||||
}
|
||||
li, li input[type="text"] {
|
||||
li {
|
||||
cursor: default;
|
||||
}
|
||||
li, li input[type=text] {
|
||||
font-family: Georgia, Times, "Times New Roman", serif;
|
||||
position: relative;
|
||||
color: #404040;
|
||||
@@ -203,15 +207,16 @@ ul {
|
||||
span {
|
||||
font-family: Georgia, Times, "Times New Roman", serif;
|
||||
color: black;
|
||||
cursor: default;
|
||||
}
|
||||
input[type="checkbox"], input[type="radio"] {
|
||||
input[type=checkbox], input[type=radio] {
|
||||
opacity: 0;
|
||||
z-index: 1;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
position: absolute;
|
||||
}
|
||||
input[type="checkbox"] + span, input[type="radio"] + span {
|
||||
input[type=checkbox] + span, input[type=radio] + span {
|
||||
cursor: pointer;
|
||||
}
|
||||
input[type=number] {
|
||||
@@ -358,7 +363,7 @@ span.sheet-inherit, input.sheet-inherit {
|
||||
margin: 5px 0 0 1.5%;
|
||||
}
|
||||
/* FONT STYLES */
|
||||
.sheet-label, input[type="text"].sheet-label, textarea.sheet-label {
|
||||
.sheet-label, input[type=text].sheet-label, textarea.sheet-label {
|
||||
text-transform: uppercase;
|
||||
font-family: "Hoefler Text", Georgia, "Baskerville Old Face", Garamond, "Times New Roman", serif;
|
||||
}
|
||||
@@ -441,6 +446,12 @@ span.sheet-inherit, input.sheet-inherit {
|
||||
width: 100%;
|
||||
line-height: normal;
|
||||
}
|
||||
.sheet-type-character .sheet-regularitems .repitem .sheet-item {
|
||||
width: 187px;
|
||||
}
|
||||
.sheet-type-character .sheet-regularitems .repitem input[name="attr_short"]:checked ~ input[name="attr_expand"]:not(:checked) ~ .sheet-repeating-item {
|
||||
width: 93.5px;
|
||||
}
|
||||
.sheet-item.sheet-itemshort {
|
||||
width: 50%;
|
||||
}
|
||||
@@ -448,14 +459,14 @@ span.sheet-inherit, input.sheet-inherit {
|
||||
background-color: #d6d8d9;
|
||||
}
|
||||
.sheet-item input[type=text] {
|
||||
width: calc(100% - 21px);
|
||||
width: calc(100% - 20px);
|
||||
height: 16px;
|
||||
margin-left: 5px;
|
||||
margin: 0 1px 0 4px;
|
||||
padding: 3px 0;
|
||||
font-size: 83%;
|
||||
}
|
||||
.sheet-item textarea {
|
||||
width: calc(100% - 21px);
|
||||
.sheet-type-crew .sheet-item textarea {
|
||||
width: calc(100% - 20px);
|
||||
resize: none;
|
||||
color: inherit;
|
||||
position: relative;
|
||||
@@ -469,22 +480,20 @@ span.sheet-inherit, input.sheet-inherit {
|
||||
height: 36px;
|
||||
}
|
||||
.sheet-item.sheet-item2box input[type=text],
|
||||
.sheet-repeating-item input[type="checkbox"][value="2"]:checked ~ input[type=text] {
|
||||
width: calc(100% - 37px);
|
||||
.sheet-repeating-item input[type=checkbox][value="2"]:checked ~ input[type=text] {
|
||||
width: calc(100% - 35px);
|
||||
}
|
||||
.sheet-item.sheet-item3box input[type=text],
|
||||
.sheet-repeating-item input[type="checkbox"][value="3"]:checked ~ input[type=text] {
|
||||
width: calc(100% - 53px);
|
||||
.sheet-repeating-item input[type=checkbox][value="3"]:checked ~ input[type=text] {
|
||||
width: calc(100% - 50px);
|
||||
}
|
||||
.sheet-item.sheet-item4box input[type=text] {
|
||||
width: calc(100% - 69px);
|
||||
width: calc(100% - 65px);
|
||||
}
|
||||
.sheet-item.sheet-itembold input[type=text],
|
||||
.sheet-repeating-item input[type="checkbox"][name="attr_bold"]:checked ~ input[type=text] {
|
||||
.sheet-repeating-item input[type=checkbox][name="attr_bold"]:checked ~ input[type=text] {
|
||||
font-weight: 800;
|
||||
}
|
||||
.sheet-item.sheet-itemitalic input[type=text],
|
||||
.sheet-repeating-item input[type="checkbox"][value="0"]:checked ~ input[type=text] {
|
||||
.sheet-repeating-item input[type=checkbox][value="0"]:checked ~ input[type=text] {
|
||||
font-style: italic;
|
||||
}
|
||||
.sheet-item span.sheet-label {
|
||||
@@ -510,19 +519,9 @@ span.sheet-inherit, input.sheet-inherit {
|
||||
border-top: 2px solid #838587;
|
||||
}
|
||||
/* Repeating items*/
|
||||
.sheet-repeating-item input[type=checkbox][value="0"]:checked ~ input.sheet-checkbox[name="attr_check_2"],
|
||||
.sheet-repeating-item input[type=checkbox][value="0"]:checked ~ input.sheet-checkbox[name="attr_check_2"] + span,
|
||||
.sheet-repeating-item input[type=checkbox][value="0"]:checked ~ input.sheet-checkbox[name="attr_check_3"],
|
||||
.sheet-repeating-item input[type=checkbox][value="0"]:checked ~ input.sheet-checkbox[name="attr_check_3"] +span,
|
||||
.sheet-repeating-item input[type=checkbox][value="0"]:checked ~ span.sheet-floatingbar,
|
||||
.sheet-repeating-item input[type=checkbox][value="1"]:checked ~ input.sheet-checkbox[name="attr_check_2"],
|
||||
.sheet-repeating-item input[type=checkbox][value="1"]:checked ~ input.sheet-checkbox[name="attr_check_2"] + span,
|
||||
.sheet-repeating-item input[type=checkbox][value="1"]:checked ~ input.sheet-checkbox[name="attr_check_3"],
|
||||
.sheet-repeating-item input[type=checkbox][value="1"]:checked ~ input.sheet-checkbox[name="attr_check_3"] + span,
|
||||
.sheet-repeating-item input[type=checkbox][value="1"]:checked ~ span.sheet-floatingbar,
|
||||
.sheet-repeating-item input[type=checkbox][value="2"]:checked ~ input.sheet-checkbox[name="attr_check_3"],
|
||||
.sheet-repeating-item input[type=checkbox][value="2"]:checked ~ input.sheet-checkbox[name="attr_check_3"] + span,
|
||||
.sheet-repeating-item input[type=checkbox][value="2"]:checked ~ span.sheet-floatingbar ~ span.sheet-floatingbar {
|
||||
.sheet-repeating-item input[type=checkbox][value="0"]:checked ~ .sheet-boxesgeq2,
|
||||
.sheet-repeating-item input[type=checkbox][value="1"]:checked ~ .sheet-boxesgeq2,
|
||||
.sheet-repeating-item input[type=checkbox][value="2"]:checked ~ .sheet-boxesgeq3 {
|
||||
display: none;
|
||||
}
|
||||
.sheet-itemholder .repitem input[name="attr_boxes_chosen"]:checked + div,
|
||||
@@ -534,29 +533,60 @@ span.sheet-inherit, input.sheet-inherit {
|
||||
float: right;
|
||||
}
|
||||
.sheet-item input[type=number] {
|
||||
margin: 0 8px 0 0px;
|
||||
margin-right: 5px;
|
||||
height: 18px;
|
||||
padding: 0;
|
||||
text-align: right;
|
||||
width: 2.5em;
|
||||
}
|
||||
.sheet-playbookitems .sheet-item input[type=number] {
|
||||
background-color: transparent;
|
||||
}
|
||||
.sheet-numboxes-chooser input {
|
||||
width: 20px;
|
||||
height: 18px;
|
||||
}
|
||||
.sheet-numboxes-chooser input[name="attr_bold"]:checked + span {
|
||||
.sheet-numboxes-chooser input:checked + span,
|
||||
.sheet-numboxes-chooser input:checked + span {
|
||||
font-weight: 800;
|
||||
}
|
||||
.sheet-numboxes-chooser input[name="attr_bold"] + span {
|
||||
.sheet-numboxes-chooser input + span:not(:last-child) {
|
||||
margin-right: 5px;
|
||||
}
|
||||
.sheet-numboxes-chooser input + span {
|
||||
border: 1px solid #AAA;
|
||||
padding: 2px;
|
||||
}
|
||||
.sheet-type-character .sheet-regularitems .repitem {
|
||||
display: inline-block;
|
||||
}
|
||||
.sheet-itemholder input[name="attr_setting_show_itemdesc"]:not(:checked) ~ div input.sheet-expand,
|
||||
.sheet-itemholder input[name="attr_setting_show_itemdesc"]:not(:checked) ~ div input.sheet-expand + span,
|
||||
.sheet-itemholder input[name="attr_setting_show_itemdesc"]:not(:checked) ~ div textarea {
|
||||
display: none;
|
||||
}
|
||||
.sheet-type-character .sheet-itemholder input.sheet-expand {
|
||||
width: 9px;
|
||||
margin-top: 4px;
|
||||
margin-left: -7px;
|
||||
height: 9px;
|
||||
}
|
||||
.sheet-type-character .sheet-itemholder input.sheet-expand + span::before {
|
||||
content: "◀";
|
||||
}
|
||||
.sheet-type-character .sheet-itemholder .sheet-playbookitems textarea {
|
||||
border-top: 1px solid darkgrey;
|
||||
}
|
||||
.sheet-type-character .sheet-itemholder textarea {
|
||||
display: none;
|
||||
border-top: 1px solid lightgray;
|
||||
border-radius: 0;
|
||||
resize: vertical;
|
||||
line-height: 125%;
|
||||
font-size: 83%;
|
||||
height: 40px;
|
||||
}
|
||||
.sheet-type-character .sheet-itemholder input[name="attr_setting_show_itemdesc"]:checked ~ div input.sheet-expand:checked ~ textarea {
|
||||
display: block;
|
||||
}
|
||||
/* LOGO */
|
||||
.sheet-bladeslogo {
|
||||
height: 63px;
|
||||
@@ -696,7 +726,7 @@ span.sheet-inherit, input.sheet-inherit {
|
||||
height: inherit;
|
||||
float: left;
|
||||
}
|
||||
.sheet-playbook-title input[type="text"] {
|
||||
.sheet-playbook-title input[type=text] {
|
||||
letter-spacing: -2px;
|
||||
font-size: 274%;
|
||||
font-weight: 800;
|
||||
@@ -714,7 +744,7 @@ span.sheet-inherit, input.sheet-inherit {
|
||||
line-height: 145%;
|
||||
}
|
||||
/* HEADER */
|
||||
.sheet-header input[type="text"] {
|
||||
.sheet-header input[type=text] {
|
||||
width: 100%;
|
||||
border-bottom: 1px solid black;
|
||||
border-radius: 0;
|
||||
@@ -723,7 +753,7 @@ span.sheet-inherit, input.sheet-inherit {
|
||||
margin: 3px 0 0;
|
||||
color: #c43c35;
|
||||
}
|
||||
.sheet-header .sheet-col55 input[type="text"] {
|
||||
.sheet-header .sheet-col55 input[type=text] {
|
||||
width: 95%
|
||||
}
|
||||
.sheet-header label {
|
||||
@@ -897,14 +927,14 @@ input[value="12"]:checked ~ .sheet-12clock,
|
||||
input.sheet-text-input {
|
||||
height: 11px;
|
||||
}
|
||||
input.sheet-text-input[type="checkbox"] {
|
||||
input.sheet-text-input[type=checkbox] {
|
||||
width: 52px;
|
||||
margin-top: 1px;
|
||||
}
|
||||
input.sheet-text-input[type="radio"] {
|
||||
input.sheet-text-input[type=radio] {
|
||||
width: 20px;
|
||||
}
|
||||
input.sheet-text-input.sheet-longoption[type="radio"] {
|
||||
input.sheet-text-input.sheet-longoption[type=radio] {
|
||||
width: 64px;
|
||||
}
|
||||
input.sheet-text-input + span {
|
||||
@@ -975,22 +1005,22 @@ input.sheet-xptooth + span {
|
||||
input.sheet-xptooth:checked ~ input.sheet-xptooth + span {
|
||||
background-image: url(https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/Blades%20in%20the%20Dark/Assets/teeth/xptooth-white.png);
|
||||
}
|
||||
input.sheet-stresstooth[type="radio"] + span,
|
||||
input.sheet-stresstooth[type="checkbox"]:checked + span,
|
||||
input.sheet-stresstooth[type=radio] + span,
|
||||
input.sheet-stresstooth[type=checkbox]:checked + span,
|
||||
input.sheet-holdtooth:checked + span {
|
||||
/* red tooth */
|
||||
background-image: url(https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/Blades%20in%20the%20Dark/Assets/teeth/stresstooth-red.png);
|
||||
}
|
||||
input.sheet-stresstooth[type="checkbox"] + span,
|
||||
input.sheet-stresstooth:checked ~ input.sheet-stresstooth[type="radio"] + span,
|
||||
input.sheet-stresstooth[type=checkbox] + span,
|
||||
input.sheet-stresstooth:checked ~ input.sheet-stresstooth[type=radio] + span,
|
||||
input.sheet-holdtooth + span {
|
||||
/* white tooth */
|
||||
background-image: url(https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/Blades%20in%20the%20Dark/Assets/teeth/stresstooth-white.png);
|
||||
}
|
||||
input.sheet-regulartooth[type="radio"] + span {
|
||||
input.sheet-regulartooth[type=radio] + span {
|
||||
background-image: url(https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/Blades%20in%20the%20Dark/Assets/teeth/shorttooth-red.png);
|
||||
}
|
||||
input.sheet-regulartooth:checked ~ input.sheet-regulartooth[type="radio"] + span {
|
||||
input.sheet-regulartooth:checked ~ input.sheet-regulartooth[type=radio] + span {
|
||||
background-image: url(https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/Blades%20in%20the%20Dark/Assets/teeth/shorttooth-grey.png);
|
||||
}
|
||||
input.sheet-zero {
|
||||
@@ -1005,22 +1035,22 @@ input.sheet-zero + span {
|
||||
vertical-align: top;
|
||||
background-image: url(https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/Blades%20in%20the%20Dark/Assets/teeth/zero.png);
|
||||
}
|
||||
input.sheet-zero[type="radio"]:checked + span {
|
||||
input.sheet-zero[type=radio]:checked + span {
|
||||
display: none;
|
||||
}
|
||||
/* TURF RADIOS */
|
||||
.sheet-turfbox input[type="radio"] {
|
||||
.sheet-turfbox input[type=radio] {
|
||||
display: block;
|
||||
float: right;
|
||||
position: initial;
|
||||
width: 11px;
|
||||
}
|
||||
input[type="checkbox"].sheet-turf1:checked ~ input[type="radio"].sheet-turf1 + span,
|
||||
input[type="checkbox"].sheet-turf2:checked ~ input[type="radio"].sheet-turf2 + span,
|
||||
input[type="checkbox"].sheet-turf3:checked ~ input[type="radio"].sheet-turf3 + span,
|
||||
input[type="checkbox"].sheet-turf4:checked ~ input[type="radio"].sheet-turf4 + span,
|
||||
input[type="checkbox"].sheet-turf5:checked ~ input[type="radio"].sheet-turf5 + span,
|
||||
input[type="checkbox"].sheet-turf6:checked ~ input[type="radio"].sheet-turf6 + span {
|
||||
input[type=checkbox].sheet-turf1:checked ~ input[type=radio].sheet-turf1 + span,
|
||||
input[type=checkbox].sheet-turf2:checked ~ input[type=radio].sheet-turf2 + span,
|
||||
input[type=checkbox].sheet-turf3:checked ~ input[type=radio].sheet-turf3 + span,
|
||||
input[type=checkbox].sheet-turf4:checked ~ input[type=radio].sheet-turf4 + span,
|
||||
input[type=checkbox].sheet-turf5:checked ~ input[type=radio].sheet-turf5 + span,
|
||||
input[type=checkbox].sheet-turf6:checked ~ input[type=radio].sheet-turf6 + span {
|
||||
/* black tooth*/
|
||||
background-image: url(https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/Blades%20in%20the%20Dark/Assets/teeth/stresstooth-black.png);
|
||||
}
|
||||
@@ -1092,7 +1122,7 @@ textarea.sheet-abilitydesc {
|
||||
.sheet-harmrow > div:nth-child(2) > div:nth-child(2) {
|
||||
border-left: 1px solid #d6d8d9;
|
||||
}
|
||||
.sheet-harmrow input[type="text"] {
|
||||
.sheet-harmrow input[type=text] {
|
||||
font-size: 92%;
|
||||
padding: 15px 6px 6px;
|
||||
color: #c43c35;
|
||||
@@ -1237,7 +1267,7 @@ input.sheet-radiobox.sheet-last + span {
|
||||
margin-bottom: 2px;
|
||||
}
|
||||
/* HUNTING GROUNDS */
|
||||
.sheet-hunting-grounds input[type="text"] {
|
||||
.sheet-hunting-grounds input[type=text] {
|
||||
font-weight: 800;
|
||||
line-height: 22px;
|
||||
}
|
||||
@@ -1488,21 +1518,21 @@ textarea.sheet-notes {
|
||||
width: 7px;
|
||||
height: 7px;
|
||||
}
|
||||
input.sheet-loadbox[type="checkbox"] {
|
||||
input.sheet-loadbox[type=checkbox] {
|
||||
width: 12px;
|
||||
height: 12px;
|
||||
}
|
||||
input.sheet-loadbox[type="checkbox"] + span {
|
||||
input.sheet-loadbox[type=checkbox] + span {
|
||||
display: inline-block;
|
||||
border: 1px solid black;
|
||||
width: 8px;
|
||||
height: 8px;
|
||||
background-color: white;
|
||||
}
|
||||
input.sheet-loadbox[type="checkbox"]:checked + span {
|
||||
input.sheet-loadbox[type=checkbox]:checked + span {
|
||||
background-color: red;
|
||||
}
|
||||
input.sheet-loadbox[type="checkbox"]:hover + span {
|
||||
input.sheet-loadbox[type=checkbox]:hover + span {
|
||||
filter: alpha(opacity=70);
|
||||
opacity: 0.7;
|
||||
}
|
||||
|
||||
@@ -715,6 +715,7 @@ var crewData = {
|
||||
},
|
||||
ghost: {
|
||||
abilities: [{
|
||||
check: 'on',
|
||||
name: 'Ghost Form',
|
||||
description: 'You are now a concentration of electroplasmic vapor which resembles your living body and clothes. You may weakly interact with the physical world and vice versa. You\'re vulnerable to arcane powers and electroplasmic effects. You move about by floating and may fly swiftly without tiring. You may slowly flow through small openings as a vapor. You chill the area around you and are terrifying for the living to behold. You are affected by spiritbane charms (take 2 drain to overcome the repulsion). Whenever you would take stress, take drain instead. When you would take trauma, take gloom instead.'
|
||||
},
|
||||
@@ -838,6 +839,7 @@ var crewData = {
|
||||
},
|
||||
hull: {
|
||||
abilities: [{
|
||||
check: 'on',
|
||||
name: 'Automaton',
|
||||
description: 'You are a spirit animating a clockwork body. You have human-like strength and senses, by default. Your hull has natural armor (this doesn\'t count for your load). Your former human feelings, interests, and connections are only dim memories. You now exist to fulfill your functions. Choose three. You may be rebuilt if damaged or destroyed. If your soul vessel is shattered, you are freed from servitude and become a Ghost. Whenever you would take stress, take drain instead.'
|
||||
},
|
||||
@@ -975,7 +977,7 @@ var crewData = {
|
||||
lurk: {
|
||||
abilities: [{
|
||||
name: 'Infiltrator',
|
||||
description: 'You are not a ected by quality or Tier when you bypass security measures.'
|
||||
description: 'You are not affected by quality or Tier when you bypass security measures.'
|
||||
},
|
||||
{
|
||||
name: 'Ambush',
|
||||
@@ -1308,13 +1310,14 @@ var crewData = {
|
||||
numboxes: '0'
|
||||
},
|
||||
{
|
||||
name: 'Spiritbane charm',
|
||||
name: 'Demonbane charm',
|
||||
numboxes: '0'
|
||||
}
|
||||
]
|
||||
},
|
||||
vampire: {
|
||||
abilities: [{
|
||||
check: 'on',
|
||||
name: 'Undead',
|
||||
description: 'You are a spirit which animates an undead body. Your trauma is maxed out. Choose four trauma conditions which reflect your vampiric nature. Arcane attacks are potent against you. If you suffer fatal harm or trauma, your undead spirit is overwhelmed. You take level 3 harm: "Incapacitated" until you feed enough to recover. If you suffer arcane harm while in this state, you are destroyed utterly. Your XP tracks are longer (you now advance more slowly). You have more stress boxes.'
|
||||
},
|
||||
@@ -1715,6 +1718,75 @@ var crewData = {
|
||||
'sway'
|
||||
]
|
||||
},
|
||||
itemData = [{
|
||||
name: 'A Blade or Two',
|
||||
numboxes: '1'
|
||||
},
|
||||
{
|
||||
name: 'Throwing Knives',
|
||||
numboxes: '1'
|
||||
},
|
||||
{
|
||||
name: 'A Pistol',
|
||||
numboxes: '1',
|
||||
short: 'on'
|
||||
},
|
||||
{
|
||||
name: 'A 2nd Pistol',
|
||||
numboxes: '1',
|
||||
short: 'on'
|
||||
},
|
||||
{
|
||||
name: 'A Large Weapon',
|
||||
numboxes: '2'
|
||||
},
|
||||
{
|
||||
name: 'An Unusual Weapon',
|
||||
numboxes: '1'
|
||||
},
|
||||
{
|
||||
name: 'Armor',
|
||||
numboxes: '2',
|
||||
short: 'on'
|
||||
},
|
||||
{
|
||||
name: '+Heavy',
|
||||
numboxes: '3',
|
||||
short: 'on'
|
||||
},
|
||||
{
|
||||
name: 'Burglary Gear',
|
||||
numboxes: '1'
|
||||
},
|
||||
{
|
||||
name: 'Climbing Gear',
|
||||
numboxes: '2'
|
||||
},
|
||||
{
|
||||
name: 'Arcane Implements',
|
||||
numboxes: '1'
|
||||
},
|
||||
{
|
||||
name: 'Documents',
|
||||
numboxes: '1'
|
||||
},
|
||||
{
|
||||
name: 'Subterfuge Supplies',
|
||||
numboxes: '1'
|
||||
},
|
||||
{
|
||||
name: 'Demolition Tools',
|
||||
numboxes: '2'
|
||||
},
|
||||
{
|
||||
name: 'Tinkering Tools',
|
||||
numboxes: '1'
|
||||
},
|
||||
{
|
||||
name: 'Lantern',
|
||||
numboxes: '1'
|
||||
}
|
||||
],
|
||||
spiritPlaybooks = ['ghost', 'hull', 'vampire'];
|
||||
/* NECESSARY DATA TRANSFORMATION */
|
||||
Object.keys(playbookData).forEach(playbook => {
|
||||
@@ -1730,6 +1802,9 @@ Object.keys(crewData).forEach(crew => {
|
||||
name: n
|
||||
}));
|
||||
});
|
||||
itemData.forEach(item => {
|
||||
item.boxes_chosen = 'on';
|
||||
});
|
||||
/* UTILITY FUNCTIONS */
|
||||
var setDiceFromTotal = (name, numDice, upToFive, value) => {
|
||||
'use strict';
|
||||
@@ -1998,17 +2073,13 @@ actionsFlat.forEach(handleFourBoxesFill);
|
||||
/* Crew Tier */
|
||||
handleFourBoxesFill('crew_tier');
|
||||
/* Items/Upgrades */
|
||||
var itemChecks = [
|
||||
'item_14_check',
|
||||
'item_16_check',
|
||||
'item_18_check',
|
||||
'item_22_check',
|
||||
var legacyChecks = [
|
||||
'upgrade_1_check',
|
||||
'upgrade_24_check',
|
||||
'bandolier1_check',
|
||||
'bandolier2_check'
|
||||
];
|
||||
itemChecks.forEach(name => {
|
||||
legacyChecks.forEach(name => {
|
||||
'use strict';
|
||||
on(['', '_b', '_c', '_d', '_e'].map(x => `change:${name}${x}`).join(' '), event => {
|
||||
getAttrs([event.sourceAttribute], v => {
|
||||
@@ -2043,6 +2114,31 @@ itemChecks.forEach(name => {
|
||||
});
|
||||
});
|
||||
});
|
||||
['item', 'playbookitem'].forEach(sectionName => {
|
||||
on([1, 2, 3].map(x => `change:repeating_${sectionName}:check_${x}`).join(' '), event => {
|
||||
getAttrs([event.sourceAttribute], v => {
|
||||
let rName = event.sourceAttribute.slice(0, -1),
|
||||
setting = {};
|
||||
if (v[event.sourceAttribute] === 'on') {
|
||||
switch (event.sourceAttribute.slice(-1)) {
|
||||
case '3':
|
||||
setting[`${rName}2`] = 'on';
|
||||
case '2':
|
||||
setting[`${rName}1`] = 'on';
|
||||
};
|
||||
};
|
||||
if (v[event.sourceAttribute] === '0') {
|
||||
switch (event.sourceAttribute.slice(-1)) {
|
||||
case '1':
|
||||
setting[`${rName}2`] = '0';
|
||||
case '2':
|
||||
setting[`${rName}3`] = '0';
|
||||
};
|
||||
};
|
||||
setAttrs(setting);
|
||||
});
|
||||
});
|
||||
});
|
||||
/* INITIALISATION AND UPGRADES */
|
||||
on('sheet:opened', () => {
|
||||
'use strict';
|
||||
@@ -2062,13 +2158,14 @@ on('sheet:opened', () => {
|
||||
});
|
||||
/* Setup and upgrades */
|
||||
getAttrs(['version'], v => {
|
||||
// Setup initial rows in repeating sections
|
||||
// Setup initial rows in repeating sections and generate standard items
|
||||
if (!v.version) {
|
||||
let setting = initialRows.reduce((memo, sectionName) => {
|
||||
memo[`repeating_${sectionName}_${generateRowID()}_dummy`] = 1;
|
||||
return memo;
|
||||
}, {});
|
||||
setAttrs(setting);
|
||||
fillRepeatingSectionFromData('item', itemData);
|
||||
};
|
||||
// Upgrade to 0.7: Convert legacy faction repeating section to text
|
||||
if (v.version && v.version.split('.')[0] === '0' && parseInt(v.version.split('.')[1]) < 7) {
|
||||
@@ -2142,26 +2239,26 @@ on('sheet:opened', () => {
|
||||
'item_1_check_b'
|
||||
];
|
||||
getAttrs(allAttrs, v => {
|
||||
let itemData = [];
|
||||
let items = [];
|
||||
if (v['item_0_desc']) {
|
||||
itemData.push({
|
||||
items.push({
|
||||
check_1: v['item_0_check'] || '0',
|
||||
name: v['item_0_desc'],
|
||||
numboxes: '1'
|
||||
});
|
||||
itemData.push({
|
||||
items.push({
|
||||
check_1: v['item_0_check_b'] || '0',
|
||||
name: v['item_0_desc'],
|
||||
numboxes: '1'
|
||||
});
|
||||
itemData.push({
|
||||
items.push({
|
||||
check_1: v['item_0_check_c'] || '0',
|
||||
name: v['item_0_desc'],
|
||||
numboxes: '1'
|
||||
});
|
||||
}
|
||||
if (v['item_1_desc']) {
|
||||
itemData.push({
|
||||
items.push({
|
||||
bold: 'on',
|
||||
check_1: v['item_1_check'] || '0',
|
||||
check_2: v['item_1_check_b'] || '0',
|
||||
@@ -2171,7 +2268,7 @@ on('sheet:opened', () => {
|
||||
}
|
||||
['2', '3', '5', '6'].forEach(index => {
|
||||
if (v[`item_${index}_desc`]) {
|
||||
itemData.push({
|
||||
items.push({
|
||||
bold: (['2', '3'].includes(index) ? 'on' : '0'),
|
||||
check_1: v[`item_${index}_check`] || '0',
|
||||
name: v[`item_${index}_desc`],
|
||||
@@ -2181,7 +2278,7 @@ on('sheet:opened', () => {
|
||||
});
|
||||
['4', '7', '8', '9'].forEach(index => {
|
||||
if (v[`item_${index}_desc`]) {
|
||||
itemData.push({
|
||||
items.push({
|
||||
bold: ((index === '4') ? 'on' : '0'),
|
||||
check_1: v[`item_${index}_check`] || '0',
|
||||
name: v[`item_${index}_desc`],
|
||||
@@ -2189,10 +2286,10 @@ on('sheet:opened', () => {
|
||||
});
|
||||
}
|
||||
});
|
||||
itemData.forEach(obj => {
|
||||
items.forEach(obj => {
|
||||
obj['boxes_chosen'] = 'on';
|
||||
});
|
||||
fillRepeatingSectionFromData('playbookitem', itemData);
|
||||
fillRepeatingSectionFromData('playbookitem', items);
|
||||
});
|
||||
getSectionIDs('repeating_item', idArray => {
|
||||
let allAttrs = [
|
||||
@@ -2213,10 +2310,121 @@ on('sheet:opened', () => {
|
||||
});
|
||||
});
|
||||
};
|
||||
// Upgrade to 1.5: Convert items
|
||||
if (v.version && (parseInt(v.version.split('.')[0]) < 1 || (parseInt(v.version.split('.')[0]) === 1 && parseInt(v.version.split('.')[1]) < 5))) {
|
||||
let indices = [...Array(25).keys()].slice(10),
|
||||
allAttrs = [
|
||||
...indices.map(n => `item_${n}_check`),
|
||||
...indices.map(n => `item_${n}_desc`),
|
||||
'item_14_check_b',
|
||||
'item_16_check_b',
|
||||
'item_16_check_c',
|
||||
'item_16_check_d',
|
||||
'item_16_check_e',
|
||||
'item_18_check_b',
|
||||
'item_22_check_b'
|
||||
];
|
||||
getAttrs(allAttrs, v => {
|
||||
let items = [{
|
||||
check_1: (v['item_10_check'] || '0'),
|
||||
name: (v['item_10_desc'] || 'A Blade or Two'),
|
||||
numboxes: '1'
|
||||
},
|
||||
{
|
||||
check_1: (v['item_11_check'] || '0'),
|
||||
name: (v['item_11_desc'] || 'Throwing Knives'),
|
||||
numboxes: '1'
|
||||
},
|
||||
{
|
||||
check_1: (v['item_12_check'] || '0'),
|
||||
name: (v['item_12_desc'] || 'A Pistol'),
|
||||
numboxes: '1',
|
||||
short: 'on'
|
||||
},
|
||||
{
|
||||
check_1: (v['item_13_check'] || '0'),
|
||||
name: (v['item_13_desc'] || 'A 2nd Pistol'),
|
||||
numboxes: '1',
|
||||
short: 'on'
|
||||
},
|
||||
{
|
||||
check_1: (v['item_14_check'] || '0'),
|
||||
check_2: (v['item_14_check_b'] || '0'),
|
||||
name: (v['item_14_desc'] || 'A Large Weapon'),
|
||||
numboxes: '2'
|
||||
},
|
||||
{
|
||||
check_1: (v['item_15_check'] || '0'),
|
||||
name: (v['item_15_desc'] || 'An Unusual Weapon'),
|
||||
numboxes: '1'
|
||||
},
|
||||
{
|
||||
check_1: (v['item_16_check'] || '0'),
|
||||
check_2: (v['item_16_check_b'] || '0'),
|
||||
name: (v['item_16_desc'] || 'Armor'),
|
||||
numboxes: '2',
|
||||
short: 'on'
|
||||
},
|
||||
{
|
||||
check_1: (v['item_16_check_c'] || '0'),
|
||||
check_2: (v['item_16_check_d'] || '0'),
|
||||
check_3: (v['item_16_check_e'] || '0'),
|
||||
name: (v['item_16_desc_b'] || '+Heavy'),
|
||||
numboxes: '3',
|
||||
short: 'on'
|
||||
},
|
||||
{
|
||||
check_1: (v['item_17_check'] || '0'),
|
||||
name: (v['item_17_desc'] || 'Burglary Gear'),
|
||||
numboxes: '1'
|
||||
},
|
||||
{
|
||||
check_1: (v['item_18_check'] || '0'),
|
||||
name: (v['item_18_desc'] || 'Climbing Gear'),
|
||||
numboxes: '2'
|
||||
},
|
||||
{
|
||||
check_1: (v['item_19_check'] || '0'),
|
||||
name: (v['item_19_desc'] || 'Arcane Implements'),
|
||||
numboxes: '1'
|
||||
},
|
||||
{
|
||||
check_1: (v['item_20_check'] || '0'),
|
||||
name: (v['item_20_desc'] || 'Documents'),
|
||||
numboxes: '1'
|
||||
},
|
||||
{
|
||||
check_1: (v['item_21_check'] || '0'),
|
||||
name: (v['item_21_desc'] || 'Subterfuge Supplies'),
|
||||
numboxes: '1'
|
||||
},
|
||||
{
|
||||
check_1: (v['item_22_check'] || '0'),
|
||||
check_2: (v['item_22_check_b'] || '0'),
|
||||
name: (v['item_22_desc'] || 'Demolition Tools'),
|
||||
numboxes: '2'
|
||||
},
|
||||
{
|
||||
check_1: (v['item_23_check'] || '0'),
|
||||
name: (v['item_23_desc'] || 'Tinkering Tools'),
|
||||
numboxes: '1'
|
||||
},
|
||||
{
|
||||
check_1: (v['item_24_check'] || '0'),
|
||||
name: (v['item_24_desc'] || 'Lantern'),
|
||||
numboxes: '1'
|
||||
}
|
||||
];
|
||||
items.forEach(obj => {
|
||||
obj['boxes_chosen'] = 'on';
|
||||
});
|
||||
fillRepeatingSectionFromData('item', items);
|
||||
});
|
||||
};
|
||||
// Set version number
|
||||
setAttrs({
|
||||
version: '1.4',
|
||||
character_sheet: 'Blades in the Dark v1.4'
|
||||
version: '1.5',
|
||||
character_sheet: 'Blades in the Dark v1.5'
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -84,12 +84,17 @@
|
||||
<span></span>
|
||||
<span>Show frame section (for hulls)</span>
|
||||
</div>
|
||||
<div class="sheet-col50">
|
||||
<input type="checkbox" name="attr_setting_show_itemdesc" class="sheet-checkbox sheet-squarebox"/>
|
||||
<span></span>
|
||||
<span>Show description field for items</span>
|
||||
</div>
|
||||
<div class="sheet-col50">
|
||||
<input type="checkbox" name="attr_setting_show_deity" class="sheet-checkbox sheet-squarebox"/>
|
||||
<span></span>
|
||||
<span>Show deity fields for crew</span>
|
||||
</div>
|
||||
<div class="sheet-col100">
|
||||
<div class="sheet-col50">
|
||||
<input type="checkbox" name="attr_setting_show_origin" class="sheet-checkbox sheet-squarebox"/>
|
||||
<span></span>
|
||||
<span>Show origin field for crew</span>
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user