diff --git a/Outbreak/outbreak.css b/Outbreak/outbreak.css new file mode 100644 index 0000000000..255574e414 --- /dev/null +++ b/Outbreak/outbreak.css @@ -0,0 +1,554 @@ +* { + box-sizing: border-box; } + +.charsheet { + background-color: #f9e0a8; + padding: 1%; + min-width: 850px; + font-family: "Courier New", Courier, monospace; } + +button { + text-overflow: ellipsis; } + button:before { + display: none; } + button:focus > h3, button:hover > h3, button:active > h3 { + color: #bbb; + text-shadow: 1px 1px 2px #000, 0 0 25px #bbb, 0 0 5px #bbb; } + button[type='roll'], button[type='action'] { + background: #bbb; + border-bottom: 0.01em solid #666; + border-bottom-right-radius: 0.01em; + border-color: #b3b3b3; + border-radius: 0.25em; + border-right: 0.02em solid #333333; + border-style: outset; + margin: 0.2em !important; + padding: 0.1em !important; } + button[type='action'] { + background: #bbb; } + button[type='action']:focus, button[type='action']:hover, button[type='action']:active { + background-color: #00b300; + color: #bbb; } + button[type='roll'] { + background: #bbb; } + button[type='roll']:focus, button[type='roll']:hover, button[type='roll']:active { + background-color: #00b300; + color: #000; } + +h2 { + font-size: 1em; } + +label { + margin: 0px; + padding: 0px; } + +input[type="number"], input[type="text"] { + padding: 1px 2px; + width: 100% !important; } +input[disabled='true'] { + background-color: #77be7924; + cursor: not-allowed; } + +select { + margin: 0px; + padding: 0px; } + +textarea { + font-size: 1.1em; + font-weight: normal; + height: 50px; + line-height: 1.5em; + min-height: 50px; + overflow-wrap: break-word; + overflow: scroll; + padding: 2px; + resize: vertical; + text-align: left; + vertical-align: top; + white-space: pre-line; } + +select { + width: 100%; } + +.sheet-bold { + font-weight: bold; } + +.sheet-dicefontd10 { + font-family: 'dicefontd10'; } + +div.sheet-grid { + display: inline-grid; + grid-column-gap: 2%; + align-content: center; } + +div.sheet-navigation { + grid-template-columns: 1fr 1fr 1fr; } + div.sheet-navigation input { + cursor: pointer; + height: 20px; + opacity: 0; + width: 100% !important; + z-index: 2; } + div.sheet-navigation input + span { + background: #c7c3b0; + border-radius: 4px; + color: #000; + cursor: pointer; + display: inline-block; + font-size: 0.8em; + font-weight: bold; + height: 20px; + text-align: center; + width: 100px; + margin-left: 2%; + padding: 2% 1%; } + div.sheet-navigation input:checked + span { + background-color: #dcdcdc; + border-bottom-color: #fff; } + div.sheet-navigation input:nth-of-type(1), div.sheet-navigation span:nth-of-type(1) { + grid-area: 1 / 1 / 1 / 1; } + div.sheet-navigation input:nth-of-type(2), div.sheet-navigation span:nth-of-type(2) { + grid-area: 1 / 2 / 1 / 2; } + div.sheet-navigation input:nth-of-type(3), div.sheet-navigation span:nth-of-type(3) { + grid-area: 1 / 3 / 1 / 3; } + +.sheet-small-font { + font-size: 0.5em; } + +.sheet-center { + text-align: center; } + +div.sheet-container { + display: inline-block; + background-color: #e6e6e6; + width: 100%; } + div.sheet-container div { + width: 100%; } + div.sheet-container .sheet-green-header { + background-repeat: no-repeat; + background-position: center top; + background-image: url("https://raw.githubusercontent.com/clevett/roll20-character-sheets/outbreakv1/Outbreak/src/img/greenheader.png"); } + div.sheet-container .sheet-yellow-header { + background-repeat: no-repeat; + background-position: center top; + background-image: url("https://raw.githubusercontent.com/clevett/roll20-character-sheets/outbreakv1/Outbreak/src/img/yellowheader.png"); } + div.sheet-container div.sheet-main { + margin: 1%; + width: 98%; } + div.sheet-container div.sheet-main div.sheet-column { + display: inline-block; + vertical-align: top; } + div.sheet-container div.sheet-main div.sheet-column:nth-of-type(1) { + width: 59%; } + div.sheet-container div.sheet-main div.sheet-column:nth-of-type(2) { + width: 40%; } + div.sheet-container div.sheet-main div.sheet-column div.sheet-playerinfo { + grid-template-columns: 20% 1fr; } + div.sheet-container div.sheet-main div.sheet-column div.sheet-playerinfo h2 { + font-weight: bolder; } + div.sheet-container div.sheet-main div.sheet-column div.sheet-playerinfo h2:after { + content: ':'; } + div.sheet-container div.sheet-main div.sheet-column div.sheet-playerinfo input { + border: 0px; + border-bottom: 0.15em solid #000; + border-radius: 0px; } + div.sheet-container div.sheet-main div.sheet-column div.sheet-spewbox { + grid-row-gap: 2%; } + div.sheet-container div.sheet-main div.sheet-column div.sheet-spewbox h1 { + text-align: center; } + div.sheet-container div.sheet-main div.sheet-column div.sheet-spewbox h2 { + text-align: center; } + div.sheet-container div.sheet-main div.sheet-column div.sheet-spewbox div.sheet-dicetypes { + grid-template-columns: 1fr 1fr 1fr 1fr; + text-align: center; } + div.sheet-container div.sheet-main div.sheet-column div.sheet-spewbox div.sheet-dicetypes img { + height: 30px; + width: 30px; + margin-left: 33%; } + div.sheet-container div.sheet-main div.sheet-column div.sheet-spewbox div.sheet-dicetypes div.sheet-attributes div.sheet-grid { + grid-template-columns: 1fr 1fr; + grid-column-gap: 2%; } + div.sheet-container div.sheet-main div.sheet-column div.sheet-spewbox div.sheet-dicetypes div.sheet-attributes div.sheet-grid input { + border: 0.15em solid #bbb; + font-size: 1em; + font-weight: bold; + text-align: center; } + div.sheet-container div.sheet-main div.sheet-column div.sheet-spewbox div.sheet-dicetypes div.sheet-attributes div.sheet-grid input[name*='bonus'] { + border-color: #00b300; } + div.sheet-container div.sheet-main div.sheet-column div.sheet-spewbox div.sheet-points { + grid-template-columns: 4fr 1fr 4fr 1fr 4fr 1fr; + text-align: center; } + div.sheet-container div.sheet-main div.sheet-column div.sheet-spewbox div.sheet-points h3 { + font-size: 0.8em; } + div.sheet-container div.sheet-main div.sheet-column div.sheet-spewbox div.sheet-points input { + text-align: center; } + div.sheet-container div.sheet-main div.sheet-column div.sheet-spewbox div.sheet-skills { + grid-template-columns: 49% 49%; } + div.sheet-container div.sheet-main div.sheet-column div.sheet-spewbox div.sheet-skills h1, div.sheet-container div.sheet-main div.sheet-column div.sheet-spewbox div.sheet-skills h2 { + grid-column: 1 / 3; } + div.sheet-container div.sheet-main div.sheet-column div.sheet-spewbox div.sheet-skills h2[data-i18n='Basic Skills'] { + line-height: inherit; } + div.sheet-container div.sheet-main div.sheet-column div.sheet-spewbox div.sheet-skills button { + font-size: 0.8em; } + div.sheet-container div.sheet-main div.sheet-column div.sheet-spewbox div.sheet-skills button > span { + font-weight: bold; } + div.sheet-container div.sheet-main div.sheet-column div.sheet-spewbox div.sheet-skills label { + border: 0.15em solid #000; } + div.sheet-container div.sheet-main div.sheet-column div.sheet-spewbox div.sheet-skills option[value*='strength'] { + background-image: url(https://raw.githubusercontent.com/clevett/roll20-character-sheets/outbreakv1/Outbreak/src/img/OU_Attributes_Strength_40x40.png); } + div.sheet-container div.sheet-main div.sheet-column div.sheet-spewbox div.sheet-skills option[value*='perception'] { + background-image: url(https://raw.githubusercontent.com/clevett/roll20-character-sheets/outbreakv1/Outbreak/src/img/OU_Attributes_Perception_40x40.png); } + div.sheet-container div.sheet-main div.sheet-column div.sheet-spewbox div.sheet-skills option[value*='empathy'] { + background-image: url(https://raw.githubusercontent.com/clevett/roll20-character-sheets/outbreakv1/Outbreak/src/img/OU_Attributes_Empathy_40x40.png); } + div.sheet-container div.sheet-main div.sheet-column div.sheet-spewbox div.sheet-skills option[value*='willpower'] { + background-image: url(https://raw.githubusercontent.com/clevett/roll20-character-sheets/outbreakv1/Outbreak/src/img/OU_Attributes_Willpower_40x40.png); } + div.sheet-container div.sheet-main div.sheet-column div.sheet-spewbox div.sheet-skills select { + font-size: 0.8em; + width: 100%; } + div.sheet-container div.sheet-main div.sheet-column div.sheet-spewbox div.sheet-skills div.sheet-skill-column button { + height: 2em; + text-align: left; } + div.sheet-container div.sheet-main div.sheet-column div.sheet-spewbox div.sheet-skills div.sheet-skill-column div.sheet-header { + grid-template-columns: 1fr 15% 15%; } + div.sheet-container div.sheet-main div.sheet-column div.sheet-spewbox div.sheet-skills div.sheet-skill-column div.sheet-header h3 { + font-size: 0.8em; + text-align: center; } + div.sheet-container div.sheet-main div.sheet-column div.sheet-spewbox div.sheet-skills div.sheet-skill-column div.sheet-header h3:nth-of-type(1) { + grid-area: 1 / 2 / 1 / 2; } + div.sheet-container div.sheet-main div.sheet-column div.sheet-spewbox div.sheet-skills div.sheet-skill-column div.sheet-header h3:nth-of-type(2) { + grid-area: 1 / 3 / 1 / 3; } + div.sheet-container div.sheet-main div.sheet-column div.sheet-spewbox div.sheet-skills div.sheet-skill-column div.sheet-skill { + grid-template-columns: 1fr 15% 15%; + display: inline-grid; + grid-column-gap: 1%; } + div.sheet-container div.sheet-main div.sheet-column div.sheet-spewbox div.sheet-skills div.sheet-skill-column div.sheet-skill label { + background-color: #fff; } + div.sheet-container div.sheet-main div.sheet-column div.sheet-spewbox div.sheet-skills div.sheet-skill-column div.sheet-skill input { + border: none; } + div.sheet-container div.sheet-main div.sheet-column div.sheet-spewbox div.sheet-skills div.sheet-repeating-container { + grid-column: 1 / 3; + margin-top: 2%; } + div.sheet-container div.sheet-main div.sheet-column div.sheet-spewbox div.sheet-skills div.sheet-repeating-container div.repitem { + margin-bottom: 2%; } + div.sheet-container div.sheet-main div.sheet-column div.sheet-spewbox div.sheet-skills div.sheet-repeating-container div.repitem label > span { + display: inline-block; + width: 100%; + height: 100%; + text-align: center; + background-color: #77be7924; + font-weight: normal; + padding-top: 10%; } + +div.sheet-dice-box { + grid-template-columns: 1fr 1fr 1fr 1fr; + grid-row-gap: 2%; } + div.sheet-dice-box button { + grid-area: 1 / 1 / 1 / 5; } + div.sheet-dice-box img { + left: 10px; + margin-left: -5%; + position: relative; + top: 0px; + z-index: +1; } + div.sheet-dice-box select { + width: 65%; } + div.sheet-dice-box span[data-i18n='d5!'] { + margin-right: -10%; } + +div.sheet-box { + box-sizing: border-box; + border: 10px solid transparent; + -webkit-border-image: url(https://raw.githubusercontent.com/clevett/roll20-character-sheets/outbreakv1/Outbreak/src/img/background.png) 18 18 repeat; + box-shadow: 3px 5px 2px #888888; + float: left; } + +div.sheet-dicelabel { + grid-auto-rows: min-content; + display: flex; + align-content: center; + justify-content: space-evenly; + height: 30px; } + div.sheet-dicelabel .info { + font-size: 1.5em; + font-family: "Pictos"; } + +div.sheet-health h1, div.sheet-health h2 { + text-align: center; } +div.sheet-health div.sheet-header { + grid-template-columns: 1em 2fr 1fr; + text-align: center; } + div.sheet-health div.sheet-header h2[data-i18n='Injuries'] { + grid-column: 2; } + div.sheet-health div.sheet-header h2[data-i18n='Damage Threshold'] { + grid-column: 3; + line-height: inherit; } +div.sheet-health div.sheet-body { + grid-template-columns: 1em 2fr 1fr; } + div.sheet-health div.sheet-body h3 { + font-size: 0.8em; + line-height: inherit; + text-align: center; } + div.sheet-health div.sheet-body h3[data-i18n='Health Points'] { + text-orientation: mixed; + transform: rotate(180deg); + writing-mode: vertical-rl; } + div.sheet-health div.sheet-body div.sheet-injuries { + grid-template-columns: 15px 1fr; + grid-column-gap: 0.5%; } + div.sheet-health div.sheet-body div.sheet-injuries input[type='checkbox'] { + height: 15px; + width: 15px; } + div.sheet-health div.sheet-body div.sheet-injuries input[type='text'] { + margin-bottom: 2%; } + div.sheet-health div.sheet-body div.sheet-damage-threshold h3[data-i18n='Sb + Wb'] { + grid-area: 1 / 1 / 1 / 3; } + div.sheet-health div.sheet-body div.sheet-damage-threshold h3[data-i18n='Bonus'] { + grid-column: 1 / 4 / 1 / 4; } + div.sheet-health div.sheet-body div.sheet-damage-threshold input { + text-align: center; } +div.sheet-health div.sheet-viral h2[data-i18n='Symptoms'] { + text-align: left; } +div.sheet-health div.sheet-viral input[type="checkbox"] { + -webkit-appearance: initial; + appearance: initial; + background: none; + border: 1px solid black; + height: 19px; + margin-right: -8px; + position: relative; + width: 19px; } + div.sheet-health div.sheet-viral input[type="checkbox"]:checked { + background: #ccff33; + content: url(https://raw.githubusercontent.com/clevett/roll20-character-sheets/outbreakv1/Outbreak/src/img/virus.png); + border: none; } + div.sheet-health div.sheet-viral input[type="checkbox"]:checked:after { + -moz-transform: translate(-50%, -50%); + -ms-transform: translate(-50%, -50%); + -webkit-transform: translate(-50%, -50%); + left: 50%; + position: absolute; + top: 50%; + transform: translate(-50%, -50%); } +div.sheet-health div.sheet-viral div.sheet-virus-checkboxes { + display: inline; + margin-left: 15%; } +div.sheet-health div.sheet-pysche { + grid-template-columns: 4fr 3fr 1fr 2fr 1fr 3fr; } + div.sheet-health div.sheet-pysche h1 { + grid-area: 1 / 1 / 1 / 7; } + div.sheet-health div.sheet-pysche h2[data-i18n='Wb + Eb'] { + grid-area: 2 / 2 / 2 / 2; } + div.sheet-health div.sheet-pysche h2[data-i18n='Bonus'] { + grid-area: 2 / 4 / 2 / 4; } + div.sheet-health div.sheet-pysche h2[data-i18n='Total'] { + grid-area: 2 / 6 / 2 / 6; } + div.sheet-health div.sheet-pysche h2[data-i18n='Coping Mechanisms'] { + grid-area: 4 / 1 / 4 / 7; + text-align: left; } + div.sheet-health div.sheet-pysche h2[data-i18n='Morale'] { + grid-area: 3 / 1 / 3 / 1; + line-height: inherit; } + div.sheet-health div.sheet-pysche input[type='number'] { + grid-row: 3; + text-align: center; } + div.sheet-health div.sheet-pysche span { + grid-row: 3; + margin-top: 40%; + text-align: center; } + div.sheet-health div.sheet-pysche textarea { + grid-area: 5 / 1 / 5 / 7; } + +div.sheet-training-value h1 { + grid-column: 1 / 2; + font-size: 1.8em; + text-align: center; } +div.sheet-training-value div.sheet-red-kits { + grid-template-columns: 1fr 1fr; } + div.sheet-training-value div.sheet-red-kits img { + margin-left: 25%; + margin-right: -5%; } +div.sheet-training-value div.sheet-green-kits { + grid-template-columns: 1fr 1fr 1fr; } + div.sheet-training-value div.sheet-green-kits h2 { + font-size: 0.8em; } + div.sheet-training-value div.sheet-green-kits img { + margin-left: 20%; + margin-right: -5%; } +div.sheet-training-value div.sheet-kits { + margin-bottom: 5%; } + div.sheet-training-value div.sheet-kits h2 { + text-align: center; + line-height: inherit; } + div.sheet-training-value div.sheet-kits input { + height: 2.3em; + text-align: center; + width: 3em !important; } + +div.sheet-repeating-container { + grid-template-columns: 4fr 2fr 2fr 10% 10% 1fr; } + div.sheet-repeating-container h3 { + font-size: 0.8em; + text-align: center; } + div.sheet-repeating-container button.sheet-dicefontd10 { + font-weight: bold; + text-align: center; } + div.sheet-repeating-container .repcontainer { + grid-column: 1 / 7; } + div.sheet-repeating-container .repcontainer .repitem { + display: inline-grid; + grid-template-columns: 4fr 2fr 2fr 10% 10% 1fr; + grid-column-gap: 1%; } + +div.sheet-equipment textarea { + min-height: 100px; } + +div.sheet-tab { + display: none; } + +input[name='attr_tab'][value='main'] ~ div.sheet-main { + display: inline-block; } + +input[name='attr_tab'][value='equipment'] ~ div.sheet-equipment { + display: inline-block; } + +input[name='attr_tab'][value='log'] ~ div.sheet-log { + display: inline-block; } + +.sheet-rolltemplate-ou table { + width: 189px; + height: 186px; + padding: 2px; + background-color: #e6e6e6; + background-size: 189px 186px; + background-repeat: no-repeat; + font-family: "Courier New", Courier, monospace; + font-weight: bold; + border-spacing: 0; } + +.sheet-rolltemplate-ou-small table { + background-color: #e6e6e6; + width: 189px; + height: 186px; + padding: 4px; + background-size: 189px 186px; + background-repeat: no-repeat; + font-family: "Courier New", Courier, monospace; + font-weight: bold; + border-spacing: 0; } + +.sheet-rolltemplate-ou th { + color: #145a32; + padding: 10px 2px 2px 20px; + line-height: 1.2em; + font-size: 1.2em; + text-align: left; } + +.sheet-rolltemplate-ou td, +.sheet-rolltemplate-ou-small td { + padding-left: 10px; + font-size: 1.0em; + vertical-align: top; } + +.sheet-rolltemplate-ou .sheet-resultr { + font-size: 1.5em; + font-family: 'Pictos'; + text-align: center; + color: #C0392B; + /*color: rgb(20, 90, 50);*/ + padding-bottom: 15px; } + +.sheet-rolltemplate-ou .sheet-resultg { + font-size: 1.5em; + font-family: 'Pictos'; + text-align: center; + color: #28B463; + /*color: rgb(20, 90, 50);*/ + padding-bottom: 15px; } + +.sheet-rolltemplate-ou .inlinerollresult { + background-color: transparent; + color: #000000; + border: none; } + +.sheet-rolltemplate-ou .inlinerollresult.fullcrit { + background-color: #28B463; + color: #ffffff; + border: none; } + +.sheet-rolltemplate-ou .inlinerollresult.fullfail { + background-color: #C0392B; + color: #ffffff; + border: none; } + +.sheet-rolltemplate-ou .sheet-res .inlinerollresult.fullcrit, +.sheet-rolltemplate-ou .sheet-res .inlinerollresult.fullfail { + background-color: transparent; + color: black; + border: black; } + +.sheet-rolltemplate-ou-small .sheet-diff .inlinerollresult, +.sheet-rolltemplate-ou .sheet-diff .inlinerollresult { + background-color: #000000; + color: #ffffff; + padding-bottom: 0px; + padding-top: 0px; + border: none; } + +.sheet-rolltemplate-ou-small .sheet-speed .inlinerollresult, +.sheet-rolltemplate-ou .sheet-speed .inlinerollresult { + background-color: #104ac9; + color: #ffffff; + padding-bottom: 0px; + padding-top: 0px; + border: none; } + +.sheet-rolltemplate-ou-small .sheet-damage .inlinerollresult, +.sheet-rolltemplate-ou .sheet-damage .inlinerollresult { + background-color: #ce3c2d; + color: #ffffff; + padding-bottom: 0px; + padding-top: 0px; + border: none; } + +.sheet-rolltemplate-ou-small .sheet-deplete .inlinerollresult, +.sheet-rolltemplate-ou .sheet-deplete .inlinerollresult { + background-color: #ffffff; + color: #000000; + padding-bottom: 0px; + padding-top: 0px; + border: none; } + +.sheet-rolltemplate-ou-small .sheet-speed-five .inlinerollresult.fullcrit, +.sheet-rolltemplate-ou .sheet-speed-five .inlinerollresult.fullcrit { + background: url("https://raw.githubusercontent.com/clevett/roll20-character-sheets/outbreakv1/Outbreak/src/img/HuntersIcon_speed_16pxW_x16pxH.jpg") bottom; + background-size: 19px 19px; + background-repeat: no-repeat; + z-index: +1; + font-size: 1.2em; + color: transparent; } + +.sheet-rolltemplate-ou-small .sheet-damage-five .inlinerollresult.fullcrit, +.sheet-rolltemplate-ou .sheet-damage-five .inlinerollresult.fullcrit { + background: url("https://raw.githubusercontent.com/clevett/roll20-character-sheets/outbreakv1/Outbreak/src/img/HuntersIcon_damage_16pxW_x16pxH.jpg") bottom; + background-size: 19px 19px; + background-repeat: no-repeat; + z-index: +1; + font-size: 1.2em; + color: transparent; } + +.sheet-rolltemplate-ou-small .sheet-deplete-five .inlinerollresult.fullcrit, +.sheet-rolltemplate-ou .sheet-deplete-five .inlinerollresult.fullcrit { + background: url("https://raw.githubusercontent.com/clevett/roll20-character-sheets/outbreakv1/Outbreak/src/img/HuntersIcon_depletion_16pxW_x16pxH.jpg") bottom; + background-size: 19px 19px; + background-repeat: no-repeat; + z-index: +1; + font-size: 1.2em; + color: transparent; } + +input[type=number]::-webkit-outer-spin-button, +input[type=number]::-webkit-inner-spin-button { + -webkit-appearance: none; + margin: 0; } + +input[type=number] { + -moz-appearance: textfield; } diff --git a/Outbreak/outbreak.html b/Outbreak/outbreak.html new file mode 100644 index 0000000000..4969d4afd8 --- /dev/null +++ b/Outbreak/outbreak.html @@ -0,0 +1,988 @@ + + +
+ +
+
+
+

Name

+ +

Player

+ +

Campaign

+ +
+
+

S.P.E.W Attributes

+
+
Strength +

Strength

+
+ + + +
+
+
Perception +

Perception

+
+ + + +
+
+
Empathy +

Empathy

+
+ + + +
+
+
Willpower +

Willpower

+
+ + + +
+
+
+

Character Resources

+
+

Survival Points:

+ +

Gestalt Level:

+ +

Competance Points:

+ +
+
+

Skills

+

Basic Skills

+
+
+

+

+
+
+ + + + + + +
+
+ + + + + + +
+
+ + + + + + +
+
+ + + + + + +
+
+ + + + + + +
+
+ + + + + + +
+
+ + + + + + +
+
+ + + + + + +
+
+
+
+

+

+
+
+ + + + + + +
+
+ + + + + + +
+
+ + + + + + +
+
+ + + + + + +
+
+ + + + + + +
+
+ + + + + + +
+
+ + + + + + +
+
+

Trained Skills

+
+
+ + + + + + +
+
+ + + + + + +
+
+ + + + + + +
+
+ + + + + + +
+
+ + + + + + +
+
+ + + + + + +
+
+ + + + + + +
+
+ + + + + + +
+
+
+
+ + + + + + +
+
+ + + + + + +
+
+ + + + + + +
+
+ + + + + + +
+
+ + + + + + +
+
+ + + + + + +
+
+ + + + + + +
+
+ + + + + + +
+
+ + + + + + +
+
+

Expert Skills

+
+
+ + + + + + +
+
+ + + + + + +
+
+ + + + + + +
+
+ + + + + + +
+
+
+
+ + + + + + +
+
+ + + + + + +
+
+ + + + + + +
+
+ + + + + + +
+
+
+

Specalizations

+

Attr

+

Bonus

+

Adv

+

Skill

+

Roll

+
+ + + + + + + + +
+
+
+
+
+

Equipment

+ +
+
+
+ +
+ +
difficulty dice + +
+
speed dice + +
+
damage dice + +
+
depletion dice + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+
+

Vitality

+
+

Injuries

+

Damage Threshold

+
+
+

+
+ + + + + + + + + + +
+
+
+

Sb + Wb

+ +
+
+

Bonus

+ +
+
+

Total

+ +
+
+
+
+
+

Viral

+
+ + + + + + + + + + +
+

Symptoms

+ +
+
+

Psyche

+

Wb + Eb

+

Bonus

+

Total

+

Morale

+ + + = + +

Coping Mechanisms

+ +
+
+
+

Training Value Bonus

+
+
+

Archery Gear

+ +
+
+

Long Gun

+ +
+
+

Bludgeoning

+ +
+
+

Pistol

+ +
+
+

Piercing

+ +
+
+

Throwing

+ +
+
+

Slashing

+ +
+
+

Martial Arts

+ +
+
+
+
+

Athletic Gear

+ +
+
+

First Aid Kits

+ +
+
+

Swimming/Diving

+ +
+
+

Climbing Gear

+ +
+
+

Medical Gear

+ +
+
+

Tools

+ +
+
+

Command App

+ +
+
+

Recon Gear

+ +
+
+

Value

+ +
+
+

Firefighting

+ +
+
+

Survival Kit

+ +
+
+

Vehicles

+ +
+
+
+
+
+
+ + + + + + + {{#rollBetween() result dos1 Target1}}{{/rollBetween() result dos1 Target1}} + {{#rollBetween() result dos2b dos2a}}{{/rollBetween() result dos2b dos2a}} + {{#rollBetween() result dos3b dos3a}}{{/rollBetween() result dos3b dos3a}} + {{#rollBetween() result dos4b dos4a}}{{/rollBetween() result dos4b dos4a}} + {{#rollLess() result dos4b}}{{/rollLess() result dos4b}} + {{#rollBetween() result Target2 dof1}}{{/rollBetween() result Target2 dof1}} + {{#rollBetween() result dof2a dof2b}}{{/rollBetween() result dof2a dof2b}} + {{#rollBetween() result dof3a dof3b}}{{/rollBetween() result dof3a dof3b}} + {{#rollBetween() result dof4a dof4b}}{{/rollBetween() result dof4a dof4b}} + {{#rollGreater() result dof4b}}{{/rollGreater() result dof4b}} + + + + + {{#rollGreater() Spd1 0}} + + {{#rollTotal() DieSpd 6}} + + {{/rollTotal() DieSpd 6}} + {{#rollTotal() DieSpd 5}} + + {{/rollTotal() DieSpd 5}} + + {{/rollGreater() Spd1 0}} + {{#rollGreater() Dmg 0}} + + {{#rollTotal() DieDmg 6}} + + {{/rollTotal() DieDmg 6}} + {{#rollTotal() DieDmg 5}} + + {{/rollTotal() DieDmg 5}} + + {{/rollGreater() Dmg 0}} + {{#rollGreater() Deplet 0}} + + {{#rollTotal() DieDep 6}} + + {{/rollTotal() DieDep 6}} + {{#rollTotal() DieDep 5}} + + {{/rollTotal() DieDep 5}} + + {{/rollGreater() Deplet 0}} + +
{{name}} rolls
+ {{#roll_name}}{{roll_name}}{{/roll_name}} {{#skill}}{{skill}}({{Target1}}%){{/skill}} +
{{result}}+++++++++++++++---------------
Speed:{{Spd1}}Speed:{{Spd1}}
Damage:{{Dmg}}Damage:{{Dmg}}
Depletion:{{Deplet}}Depletion:{{Deplet}}
Roll dice for all: + Speed Die + Damage Die + Depletion Die +
+
+ + + + {{#rollGreater() Diff 0}} + + + + {{/rollGreater() Diff 0}} + {{#rollGreater() Spd1 0}} + + {{#rollTotal() DieSpd 6}} + + {{/rollTotal() DieSpd 6}} + {{#rollTotal() DieSpd 5}} + + {{/rollTotal() DieSpd 5}} + + {{/rollGreater() Spd1 0}} + {{#rollGreater() Dmg 0}} + + {{#rollTotal() DieDmg 6}} + + {{/rollTotal() DieDmg 6}} + {{#rollTotal() DieDmg 5}} + + {{/rollTotal() DieDmg 5}} + + {{/rollGreater() Dmg 0}} + {{#rollGreater() Deplet 0}} + + {{#rollTotal() DieDep 6}} + + {{/rollTotal() DieDep 6}} + {{#rollTotal() DieDep 5}} + + {{/rollTotal() DieDep 5}} + + {{/rollGreater() Deplet 0}} + + +
Difficulty:{{Diff}}
Speed:{{Spd1}} Speed:{{Spd1}}
Damage:{{Dmg}} Damage:{{Dmg}}
Depletion:{{Deplet}}Depletion:{{Deplet}}
Reroll: + Speed Die + Damage Die + Depletion Die
+
+ \ No newline at end of file diff --git a/Outbreak/outbreak.pug b/Outbreak/outbreak.pug new file mode 100644 index 0000000000..2b1404a12f --- /dev/null +++ b/Outbreak/outbreak.pug @@ -0,0 +1,211 @@ + +//- VERSION +//- ============================= +input(name='attr_version' type='hidden' value='1') + +//- MIXINS +include src/pug/_mixins.pug + +.container + input(name='attr_tab' type='hidden' value='main') + .main.tab + .column + .grid.playerinfo.box + each val in ['Name', 'Player', 'Campaign'] + -const name = val.toLowerCase(); + h2(data-i18n=`${val}`) #{val} + input(name=`attr_character_${name}` placeholder=val title=`@{character_${name}}` type='text' value='') + + .spewbox.box + h1.green-header(data-i18n='S.P.E.W Attributes') S.P.E.W Attributes + .grid.dicetypes + each val in ['Strength', 'Perception', 'Empathy', 'Willpower'] + -const name = val.toLowerCase(); + .grid.attributes + img(alt=`${val}` src=`https://raw.githubusercontent.com/clevett/roll20-character-sheets/outbreakv1/Outbreak/src/img/OU_Attributes_${val}_40x40.png`) + h3(data-i18n=val) #{val} + .grid + input(name=`attr_${name}` type='hidden' value=`[[(@{${name}_bonus}*10)+@{${name}_base}]]`) + label + input(name=`attr_${name}_bonus` title=`@{${name}_bonus}` type='text' value='0') + label + input(name=`attr_${name}_base` title=`@{${name}_base}` type='text' value=`0`) + + h2(data-i18n='Character Resources') Character Resources + .grid.points + each val in ['Survival', 'Gestalt', 'Competance'] + -const name = val === 'Gestalt' ? `${val.toLowerCase()}_level` : `${val.toLowerCase()}_points` ; + if val === 'Gestalt' + h3.yellow-header(data-i18n=`${val} Level:`) #{val} Level: + else + h3.green-header(data-i18n=`${val} Points:`) #{val} Points: + label + input.points(name=`attr_${name}` title=`@{${name}}` value='0' type='text') + + .grid.skills + h1.yellow-header(data-i18n='Skills') Skills + h2(data-i18n='Basic Skills') Basic Skills + .skill-column + .grid.header + h3(data-i18n='Adv') + h3(data-i18n='Tot') + each val, key in {'Balance':['perception', 'willpower'], 'Brawl': ['strength', 'perception'], 'Climb':['strength','willpower'], 'Composure':['willpower', 'empathy'], 'Dodge':['perception', 'strength'], 'Endurance':['strength', 'willpower'], 'Expression':['empathy','perception'], 'Grapple':['strength', 'willpower']} + +skillList(key, val[0], val[1]) + .skill-column + .grid.header + h3(data-i18n='Adv') + h3(data-i18n='Tot') + each val, key in {'Hold':['willpower','perception'], 'Jump/Leap':['strength','perception'], 'Lift/Pull':['strenght','willpower'], 'Resist Pain':['willpower','strength'], 'Search':['perception','willpower'], 'Spot/Listen':['perception','willpower'], 'Stealth':['perception','willpower']} + +skillList(key, val[0], val[1]) + + h2(data-i18n='Trained Skills') Trained Skills + .skill-column + each val,key in {'Bow':['perception', 'strenght'], 'Calm Other':['empathy', 'willpower'], 'Persuade':['empathy', 'willpower'], 'Barter':['empathy', 'willpower'], 'Command':['empathy', 'willpower'], 'Detect Motives':['empathy', 'willpower'], 'Intimidate':['empathy', 'willpower'], 'Digital Systems':['perception', 'willpower']} + +skillList(key, val[0], val[1]) + .skill-column + each val,key in {'Pistol':['perception', 'willpower'], 'Long Gun':['perception', 'willpower'], 'First Aid':['perception', 'willpower'], 'Blunt':['strength', 'willpower'], 'Pierce':['strength', 'willpower'], 'Slash':['strength', 'willpower'], 'Navigation':['perception', 'willpower'], 'Swim':['strength', 'willpower'], 'Throw':['perception', 'strength']} + +skillList(key, val[0], val[1]) + + h2(data-i18n='Expert Skills') Expert Skills + .skill-column + each val, key in {'Adv Medicine':['perception', 'willpower'], 'Construct Engineer':['perception', 'willpower'], 'Martial Arts':['strength', 'perception'], 'Pilot':['perception', 'willpower']} + +expertSkillList(key, val[0], val[1]) + .skill-column + each val, key in {'Ride': ['empathy', 'willpower'], 'Science':['perception', 'willpower'], 'Survival':['perception', 'willpower'], 'Toughness':['strength', 'willpower']} + +expertSkillList(key, val[0], val[1]) + .grid.repeating-container + each val in ['Specalizations', 'Attr', 'Bonus', 'Adv', 'Skill', 'Roll',] + h3(data-i18n=val) #{val} + fieldset(class='repeating_skills') + input(name=`attr_button_base` type='hidden' value=`[[(?{Gear Or Kit| None, 0 | Archery, @{archery_gear}+@{attribute_bonus}|Athletic Gear, @{athletic_gear}+@{attribute_bonus}|Bludgeon, @{bludgeoning}+@{attribute_bonus}|Climbing Gear, @{climbing_gear}+@{attribute_bonus}|Command Apparatus, @{command_app}+@{attribute_bonus}|Firefighting, @{firefighting}+@{attribute_bonus}|First Aid Kit, @{first_aid_kits}+@{attribute_bonus}|Long Gun, @{long_gun}+@{attribute_bonus}|Martial Arts, @{martial_arts}+@{attribute_bonus}|Medical Gear, @{medical_gear}+@{attribute_bonus}|Piercing, @{piercing}+@{attribute_bonus}|Pistol, @{pistol}+@{attribute_bonus}|Recon Gear, @{recon_gear}+@{attribute_bonus}|Slashing, @{slashing}+@{attribute_bonus}|Survival Kit, @{survival_kit}+@{attribute_bonus}|Swimming/Diving, @{swimming_diving}+@{attribute_bonus}|Throwing, @{throwing}+@{attribute_bonus}|Tools, @{tools}+@{attribute_bonus}|Value, @{value}+@{attribute_bonus}|Vehicles, @{vehicles}+@{attribute_bonus}})*?{Multiplier|1|2|3|4|5}]]`) + + input(name=`attr_total` type='hidden' value=`(@{skill} [Skill]+@{button_base} [Kit])`) + input(name=`attr_skill_name` type='text' value=``) + + select(name='attr_attribute_base' value='@{perception_bonus}') + option(value='@{strength_bonus}') strength + option(value='@{perception_bonus}' selected) perception + option(value='@{empathy_bonus}') empathy + option(value='@{willpower_bonus}') willpower + + select(name='attr_attribute_bonus' value='@{willpower_bonus}') + option(value='@{strength_bonus}') strength + option(value='@{perception_bonus}') perception + option(value='@{empathy_bonus}') empathy + option(value='@{willpower_bonus}' selected) willpower + + label + input.center(name=`attr_advancement` type='number' value='0') + label + input.center(name=`attr_skill` type='hidden' value=`0`) + span(name=`attr_skill`) + + button.dicefontd10(name=`roll_name` type='roll' value!=`&{template:ou} {{name=@{character_name}}} {{roll_name=@{skill_name}}} {{attr=@{skill}}} {{Target1=[[@{total}]]}} {{Target2=[[@{total}+1]]}} {{skill=VS.}} {{Diff=@{difficulty_dice}}} {{Spd1=@{speed_dice}}} {{Dmg=@{damage_dice}}} {{Deplet=@{depletion_dice}}} {{DieDif=@{difficulty_die}}} {{DieSpd=@{speed_die}}} {{DieDmg=@{damage_die}}} {{DieDep=@{depletion_die}}} {{result=[[1d100+@{difficulty_dice} [Diff]]]}} {{dos1=[[@{total}-19]]}} {{dos2a=[[@{total}-20]]}} {{dos2b=[[@{total}-29]]}} {{dos3a=[[@{total}-30]]}} {{dos3b=[[@{total}-39]]}} {{dos4a=[[@{total}-40]]}} {{dos4b=[[@{total}-49]]}} {{dof1=[[@{total}+19]]}} {{dof2a=[[@{total}+20]]}} {{dof2b=[[@{total}+29]]}} {{dof3a=[[@{total}+30]]}} {{dof3b=[[@{total}+39]]}} {{dof4a=[[@{total}+40]]}} {{dof4b=[[@{total}+49]]}}`) t + + .equipment.grid.box + h1.green-header.center(data-i18n='Equipment') Equipment + textarea(data-i18n-placeholder='Equipment' name='attr_equipment' placeholder='Equipment' value='') + + .column + .grid.box.logo + img(alt='Outbreak Character Sheet', src='https://raw.githubusercontent.com/clevett/roll20-character-sheets/outbreakv1/Outbreak/src/img/OU_Logo_340pxWx90pxH.png') + + .grid.box.dice-box + button(data-i18n='Dice Pool' name='roll_Pool' type='roll' value='&{template:ou-small} {{Diff=@{difficulty_dice}}} {{Spd1=@{speed_dice}}} {{Dmg=@{damage_dice}}} {{Deplet=@{depletion_dice}}} {{DieDif=@{difficulty_die}}} {{DieSpd=@{speed_die}}} {{DieDmg=@{damage_die}}} {{DieDep=@{depletion_die}}}') + + .die + img(alt='difficulty dice' src='https://raw.githubusercontent.com/clevett/roll20-character-sheets/outbreakv1/Outbreak/src/img/HuntersIcon_difficulty_16pxW_x16pxH.jpg' title='Difficult Dice') + select(name='attr_difficulty_dice') + - let n = 0; + while n < 6 + option(data-i18n=n value=`[[${n}d6!p]]`) #{n} + - n++ + + each val in ['speed', 'damage', 'depletion'] + .die + img(alt=`${val} dice` src=`https://raw.githubusercontent.com/clevett/roll20-character-sheets/outbreakv1/Outbreak/src/img/HuntersIcon_${val}_16pxW_x16pxH.jpg`) + +diceSelect(`${val}`) + + each val in ['difficulty', 'speed', 'damage', 'depletion'] + .die + +dieRadios(val) + + .grid.box.health + .grid.vitality + h1.green-header(data-i18n='Vitality') Vitality + .grid.header + h2(data-i18n='Injuries') Injuries + h2(data-i18n='Damage Threshold') Damage Threshold + .grid.body + h3(data-i18n='Health Points') + .grid.injuries + - let i = 0; + while i < 5 + - i++ + input(name=`attr_injury_${i}` type='checkbox') + input(name=`attr_injury_${i}_details` type='text' value='') + .grid.damage-threshold + .row + h3(data-i18n='Sb + Wb') Sb + Wb + input(name='attr_damage_treshold_base' type='number' value='(@{strength_bonus}+@{willpower_bonus})' disabled='true') + .row + h3(data-i18n='Bonus') Bonus + input(name='attr_damage_threshold_bonus' type='number' value='0') + .row + h3(data-i18n='Total') Total + input(name='attr_damage_threshold' type='number' value='(@{strength_bonus}+@{willpower_bonus}+@{damage_threshold_bonus})' disabled='true') + + .grid.viral + h1.yellow-header(data-i18n='Viral') Viral + .virus-checkboxes + - let v = 0; + while v < 10 + - v++ + input(name=`attr_viral_${v}` value=v type='checkbox') + span + h2(data-i18n='Symptoms') Symptoms + textarea(name='attr_symptoms') + + .grid.pysche + h1.yellow-header(data-i18n='Psyche') Psyche + h2(data-i18n='Wb + Eb') Wb + Eb + h2(data-i18n='Bonus') Bonus + h2(data-i18n='Total') Total + + h2(data-i18n='Morale') Morale + input(name='attr_morale_base' type='number' value='(@{willpower_bonus}+@{empathy_bonus})' disabled='true') + span + + input(name='attr_morale_bonus' type='number' value='0') + span = + input(name='attr_morale' type='number' value='(@{morale_base}+@{morale_bonus})' disabled='true') + + h2(data-i18n='Coping Mechanisms') Coping Mechanisms + textarea(name='attr_coping_mechanisms') + + .grid.box.training-value + h1.green-header(data-i18n='Training Value Bonus') Training Value Bonus + + .grid.red-kits + each val in ['Archery Gear', 'Long Gun', 'Bludgeoning', 'Pistol', 'Piercing', 'Throwing', 'Slashing', 'Martial Arts'] + -const name = val.replace(' ', '_').toLowerCase(); + .kits + h2(data-i18n=`${val}`) #{val} + img(alt='' src=`https://raw.githubusercontent.com/clevett/roll20-character-sheets/outbreakv1/Outbreak/src/img/KitIcons_${val.replace(' ', '')}_30x30.png`) + input(name=`attr_${name}` type='number' value='') + + .grid.green-kits + each val in ['Athletic Gear', 'First Aid Kits', 'Swimming/Diving', 'Climbing Gear', 'Medical Gear', 'Tools', 'Command App', 'Recon Gear', 'Value', 'Firefighting', 'Survival Kit', 'Vehicles'] + -const name = val.replace(/ /g, '_').replace('/', '_').toLowerCase(); + .kits + h2(data-i18n=`${val}`) #{val} + img(alt='' src=`https://raw.githubusercontent.com/clevett/roll20-character-sheets/outbreakv1/Outbreak/src/img/KitIcons_${val.replace(/ /g, '').replace('/', '')}_30x30.png`) + input(name=`attr_${name}` type='number' value='') + + +//- ROLL TEMPLATE +include src/pug/rolltemplate.html + + +//- SCRIPTS +script(type='text/worker') + include src/js/scripts.js diff --git a/Outbreak/outbreak.scss b/Outbreak/outbreak.scss new file mode 100644 index 0000000000..bec670b434 --- /dev/null +++ b/Outbreak/outbreak.scss @@ -0,0 +1,583 @@ +// COLORS +//============================= + $gray: #bbb; + $white: #fff; + $green: #00b300; + $black: #000; + +// GLOBALS +//============================= +@import "src/scss/_global"; + +.sheet-bold { + font-weight: bold; +} + +.sheet-dicefontd10 { + font-family: 'dicefontd10'; +} + +div.sheet-grid { + display: inline-grid; + grid-column-gap: 2%; + align-content: center; +} + +div.sheet-navigation { + grid-template-columns: 1fr 1fr 1fr; + + input { + cursor: pointer; + height: 20px; + opacity: 0; + width: 100% !important; + z-index: 2; + + & + span { + background: #c7c3b0; + border-radius: 4px; + color: #000; + cursor: pointer; + display: inline-block; + font-size: 0.8em; + font-weight: bold; + height: 20px; + text-align: center; + width: 100px; + margin-left: 2%; + padding: 2% 1%; + } + + &:checked + span { + background-color: #dcdcdc; + border-bottom-color: $white; + } + } + + input, span { + @for $i from 1 to 4 { + &:nth-of-type(#{$i}) { + grid-area: 1 / #{$i} / 1 / #{$i}; + } + } + } +} + +.sheet-small-font { + font-size: 0.5em; +} + +.sheet-center { + text-align: center; +} + +div.sheet-container { + display: inline-block; + background-color: #e6e6e6; + width: 100%; + + div { + width: 100%; + } + + .sheet-green-header { + background-repeat: no-repeat; + background-position: center top; + background-image: url("https://raw.githubusercontent.com/clevett/roll20-character-sheets/outbreakv1/Outbreak/src/img/greenheader.png"); + } + + .sheet-yellow-header { + background-repeat: no-repeat; + background-position: center top; + background-image: url("https://raw.githubusercontent.com/clevett/roll20-character-sheets/outbreakv1/Outbreak/src/img/yellowheader.png"); + } + + div.sheet-main { + margin: 1%; + width: 98%; + + div.sheet-column { + display: inline-block; + vertical-align: top; + + &:nth-of-type(1) { + width: 59%; + } + + &:nth-of-type(2) { + width: 40%; + } + + div.sheet-playerinfo { + grid-template-columns: 20% 1fr; + + h2 { + font-weight: bolder; + + &:after { + content: ':'; + } + } + + input { + border: 0px; + border-bottom: 0.15em solid $black; + border-radius: 0px; + } + } + + div.sheet-spewbox { + grid-row-gap: 2%; + + h1 { + text-align: center; + } + + h2 { + text-align: center; + } + + div.sheet-dicetypes { + grid-template-columns: 1fr 1fr 1fr 1fr; + text-align: center; + + img { + height: 30px; + width: 30px; + margin-left: 33%; + } + + div.sheet-attributes { + div.sheet-grid { + grid-template-columns: 1fr 1fr; + grid-column-gap: 2%; + + input { + border: 0.15em solid $gray; + font-size: 1em; + font-weight: bold; + text-align: center; + + &[name*='bonus'] { + border-color: $green; + } + } + } + } + } + + div.sheet-points { + grid-template-columns: 4fr 1fr 4fr 1fr 4fr 1fr; + text-align: center; + + h3 { + font-size: 0.8em; + } + + input { + text-align: center; + } + } + + div.sheet-skills { + grid-template-columns: 49% 49%; + + h1, h2 { + grid-column: 1 / 3; + } + + h2[data-i18n='Basic Skills'] { + line-height: inherit; + } + + button { + font-size: 0.8em; + + & > span { + font-weight: bold; + } + } + + label { + border: 0.15em solid $black; + } + + option { + &[value*='strength'] { + background-image: url(https://raw.githubusercontent.com/clevett/roll20-character-sheets/outbreakv1/Outbreak/src/img/OU_Attributes_Strength_40x40.png); + } + + &[value*='perception'] { + background-image: url(https://raw.githubusercontent.com/clevett/roll20-character-sheets/outbreakv1/Outbreak/src/img/OU_Attributes_Perception_40x40.png); + } + + &[value*='empathy'] { + background-image: url(https://raw.githubusercontent.com/clevett/roll20-character-sheets/outbreakv1/Outbreak/src/img/OU_Attributes_Empathy_40x40.png); + } + + &[value*='willpower'] { + background-image: url(https://raw.githubusercontent.com/clevett/roll20-character-sheets/outbreakv1/Outbreak/src/img/OU_Attributes_Willpower_40x40.png); + } + } + + select { + font-size: 0.8em; + width: 100%; + } + + div.sheet-skill-column { + button { + height: 2em; + text-align: left; + } + + div.sheet-header { + grid-template-columns: 1fr 15% 15%; + + h3 { + font-size: 0.8em; + text-align: center; + + &:nth-of-type(1) { grid-area: 1 / 2 / 1 / 2; } + &:nth-of-type(2) { grid-area: 1 / 3 / 1 / 3; } + } + } + + div.sheet-skill { + grid-template-columns: 1fr 15% 15%; + display: inline-grid; + grid-column-gap: 1%; + + label { + background-color: $white; + } + + input { + border: none; + } + } + } + + div.sheet-repeating-container { + grid-column: 1 / 3; + margin-top: 2%; + + div.repitem { + margin-bottom: 2%; + + label > span { + display: inline-block; + width: 100%; + height: 100%; + text-align: center; + background-color: #77be7924; + font-weight: normal; + padding-top: 10%; + } + } + } + } + } + } + } +} + +div.sheet-dice-box { + grid-template-columns: 1fr 1fr 1fr 1fr; + grid-row-gap: 2%; + + button { + grid-area: 1 / 1 / 1 / 5; + } + + img { + left: 10px; + margin-left: -5%; + position: relative; + top: 0px; + z-index: +1; + } + + select { + width: 65%; + } + + span[data-i18n='d5!'] { + margin-right: -10%; + } +} + + div.sheet-box { + box-sizing: border-box; + border: 10px solid transparent; + -webkit-border-image: url(https://raw.githubusercontent.com/clevett/roll20-character-sheets/outbreakv1/Outbreak/src/img/background.png) 18 18 repeat; + box-shadow: 3px 5px 2px #888888; + float: left; + } + + div.sheet-dicelabel { + grid-auto-rows: min-content; + + display: flex; + align-content: center; + justify-content: space-evenly; + height: 30px; + .info { + font-size: 1.5em; + font-family: "Pictos"; + } + } + +div.sheet-health { + h1, h2 { + text-align: center; + } + + div.sheet-header { + grid-template-columns: 1em 2fr 1fr; + text-align: center; + + h2[data-i18n='Injuries'] { + grid-column: 2; + } + + h2[data-i18n='Damage Threshold'] { + grid-column: 3; + line-height: inherit; + } + } + + div.sheet-body { + grid-template-columns: 1em 2fr 1fr; + + h3 { + font-size: 0.8em; + line-height: inherit; + text-align: center; + + &[data-i18n='Health Points'] { + text-orientation: mixed; + transform: rotate(180deg); + writing-mode: vertical-rl; + } + } + + div.sheet-injuries { + grid-template-columns: 15px 1fr; + grid-column-gap: 0.5%; + + input[type='checkbox'] { + height: 15px; + width: 15px; + } + + input[type='text'] { + margin-bottom: 2%; + } + } + + div.sheet-damage-threshold { + h3[data-i18n='Sb + Wb'] { + grid-area: 1 / 1 / 1 / 3; + } + + h3[data-i18n='Bonus'] { + grid-column: 1 / 4 / 1 / 4; + } + + input { + text-align: center; + } + } + } + + div.sheet-viral { + h2[data-i18n='Symptoms'] { + text-align: left; + } + + input[type="checkbox"] { + -webkit-appearance: initial; + appearance: initial; + background: none; + border: 1px solid black; + height: 19px; + margin-right: -8px; + position: relative; + width: 19px; + + &:checked { + background: #ccff33; + content: url(https://raw.githubusercontent.com/clevett/roll20-character-sheets/outbreakv1/Outbreak/src/img/virus.png); + border: none; + + &:after { + -moz-transform: translate(-50%,-50%); + -ms-transform: translate(-50%,-50%); + -webkit-transform: translate(-50%,-50%); + left: 50%; + position: absolute; + top: 50%; + transform: translate(-50%,-50%); + } + } + } + + div.sheet-virus-checkboxes { + display: inline; + margin-left: 15%; + } + } + + div.sheet-pysche { + grid-template-columns: 4fr 3fr 1fr 2fr 1fr 3fr; + + h1 { + grid-area: 1 / 1 / 1 / 7; + } + + h2 { + &[data-i18n='Wb + Eb'] { + grid-area: 2 / 2 / 2 / 2; + } + + &[data-i18n='Bonus'] { + grid-area: 2 / 4 / 2 / 4; + } + + &[data-i18n='Total'] { + grid-area: 2 / 6 / 2 / 6; + } + + &[data-i18n='Coping Mechanisms'] { + grid-area: 4 / 1 / 4 / 7; + text-align: left; + } + } + + h2[data-i18n='Morale'] { + grid-area: 3 / 1 / 3 / 1; + line-height: inherit; + } + + input[type='number'] { + grid-row: 3; + text-align: center; + } + + span { + grid-row: 3; + margin-top: 40%; + text-align: center; + } + + textarea { + grid-area: 5 / 1 / 5 / 7; + } + } +} + +div.sheet-training-value { + + h1 { + grid-column: 1 / 2; + font-size: 1.8em; + text-align: center; + } + + div.sheet-red-kits { + grid-template-columns: 1fr 1fr; + + img { + margin-left: 25%; + margin-right: -5%; + } + } + + div.sheet-green-kits { + grid-template-columns: 1fr 1fr 1fr; + + h2 { + font-size: 0.8em; + } + + img { + margin-left: 20%; + margin-right: -5%; + } + } + + div.sheet-kits { + margin-bottom: 5%; + + h2 { + text-align: center; + line-height: inherit; + } + + input { + height: 2.3em; + text-align: center; + width: 3em !important; + } + } +} + +div.sheet-repeating-container { + grid-template-columns: 4fr 2fr 2fr 10% 10% 1fr; + + h3 { + font-size: 0.8em; + text-align: center; + } + + button.sheet-dicefontd10 { + font-weight: bold; + text-align: center; + } + + .repcontainer { + grid-column: 1 / 7; + + .repitem { + display: inline-grid; + grid-template-columns: 4fr 2fr 2fr 10% 10% 1fr; + grid-column-gap: 1%; + } + } +} + +div.sheet-equipment { + textarea { + min-height: 100px; + } +} + + +// HIDDEN SECTIONS +//============================= +div.sheet-tab { + display: none; +} + +@each $value in 'main', 'equipment', 'log' { + input[name='attr_tab'][value='#{$value}'] ~ div.sheet-#{$value} { + display: inline-block; + } +} + + +// ROLL TEMPLATE +//============================= +@import "src/scss/_rolltemplate"; + + + + +input[type=number]::-webkit-outer-spin-button, +input[type=number]::-webkit-inner-spin-button { + -webkit-appearance: none; + margin: 0;} + +input[type=number] { + -moz-appearance:textfield;} diff --git a/Outbreak/preview.png b/Outbreak/preview.png new file mode 100644 index 0000000000..7522ab5a89 Binary files /dev/null and b/Outbreak/preview.png differ diff --git a/Outbreak/sheet.json b/Outbreak/sheet.json new file mode 100644 index 0000000000..9652a2d3a7 --- /dev/null +++ b/Outbreak/sheet.json @@ -0,0 +1,8 @@ +{ + "html": "outbreak.html", + "css": "outbreak.css", + "authors": "Emerald Productions, LLC", + "roll20userid": "557736", + "preview": "preview.png", + "instructions": "Outbreak by Hunters Entertainment" +} diff --git a/Outbreak/src/img/HuntersIcon_damage_16pxW_x16pxH.jpg b/Outbreak/src/img/HuntersIcon_damage_16pxW_x16pxH.jpg new file mode 100644 index 0000000000..f82931ed9b Binary files /dev/null and b/Outbreak/src/img/HuntersIcon_damage_16pxW_x16pxH.jpg differ diff --git a/Outbreak/src/img/HuntersIcon_depletion_16pxW_x16pxH.jpg b/Outbreak/src/img/HuntersIcon_depletion_16pxW_x16pxH.jpg new file mode 100644 index 0000000000..d6bc691807 Binary files /dev/null and b/Outbreak/src/img/HuntersIcon_depletion_16pxW_x16pxH.jpg differ diff --git a/Outbreak/src/img/HuntersIcon_difficulty_16pxW_x16pxH.jpg b/Outbreak/src/img/HuntersIcon_difficulty_16pxW_x16pxH.jpg new file mode 100644 index 0000000000..d9d5a32872 Binary files /dev/null and b/Outbreak/src/img/HuntersIcon_difficulty_16pxW_x16pxH.jpg differ diff --git a/Outbreak/src/img/HuntersIcon_speed_16pxW_x16pxH.jpg b/Outbreak/src/img/HuntersIcon_speed_16pxW_x16pxH.jpg new file mode 100644 index 0000000000..601b83ac3a Binary files /dev/null and b/Outbreak/src/img/HuntersIcon_speed_16pxW_x16pxH.jpg differ diff --git a/Outbreak/src/img/KitIcons_ArcheryGear_30x30.png b/Outbreak/src/img/KitIcons_ArcheryGear_30x30.png new file mode 100644 index 0000000000..b925611787 Binary files /dev/null and b/Outbreak/src/img/KitIcons_ArcheryGear_30x30.png differ diff --git a/Outbreak/src/img/KitIcons_AthleticGear_30x30.png b/Outbreak/src/img/KitIcons_AthleticGear_30x30.png new file mode 100644 index 0000000000..3df5f0f9c1 Binary files /dev/null and b/Outbreak/src/img/KitIcons_AthleticGear_30x30.png differ diff --git a/Outbreak/src/img/KitIcons_Bludgeoning_30x30.png b/Outbreak/src/img/KitIcons_Bludgeoning_30x30.png new file mode 100644 index 0000000000..503d0ee75c Binary files /dev/null and b/Outbreak/src/img/KitIcons_Bludgeoning_30x30.png differ diff --git a/Outbreak/src/img/KitIcons_ClimbingGear_30x30.png b/Outbreak/src/img/KitIcons_ClimbingGear_30x30.png new file mode 100644 index 0000000000..81dbe585cc Binary files /dev/null and b/Outbreak/src/img/KitIcons_ClimbingGear_30x30.png differ diff --git a/Outbreak/src/img/KitIcons_CommandApp_30x30.png b/Outbreak/src/img/KitIcons_CommandApp_30x30.png new file mode 100644 index 0000000000..df5409b430 Binary files /dev/null and b/Outbreak/src/img/KitIcons_CommandApp_30x30.png differ diff --git a/Outbreak/src/img/KitIcons_Firefighting_30x30.png b/Outbreak/src/img/KitIcons_Firefighting_30x30.png new file mode 100644 index 0000000000..2f191ab19b Binary files /dev/null and b/Outbreak/src/img/KitIcons_Firefighting_30x30.png differ diff --git a/Outbreak/src/img/KitIcons_FirstAidKits_30x30.png b/Outbreak/src/img/KitIcons_FirstAidKits_30x30.png new file mode 100644 index 0000000000..1a744241fd Binary files /dev/null and b/Outbreak/src/img/KitIcons_FirstAidKits_30x30.png differ diff --git a/Outbreak/src/img/KitIcons_LongGun_30x30.png b/Outbreak/src/img/KitIcons_LongGun_30x30.png new file mode 100644 index 0000000000..89a31ab8d0 Binary files /dev/null and b/Outbreak/src/img/KitIcons_LongGun_30x30.png differ diff --git a/Outbreak/src/img/KitIcons_MartialArts_30x30.png b/Outbreak/src/img/KitIcons_MartialArts_30x30.png new file mode 100644 index 0000000000..661148b0f6 Binary files /dev/null and b/Outbreak/src/img/KitIcons_MartialArts_30x30.png differ diff --git a/Outbreak/src/img/KitIcons_MedicalGear_30x30.png b/Outbreak/src/img/KitIcons_MedicalGear_30x30.png new file mode 100644 index 0000000000..784598ace1 Binary files /dev/null and b/Outbreak/src/img/KitIcons_MedicalGear_30x30.png differ diff --git a/Outbreak/src/img/KitIcons_Piercing_30x30.png b/Outbreak/src/img/KitIcons_Piercing_30x30.png new file mode 100644 index 0000000000..272cc2c646 Binary files /dev/null and b/Outbreak/src/img/KitIcons_Piercing_30x30.png differ diff --git a/Outbreak/src/img/KitIcons_Pistol_30x30.png b/Outbreak/src/img/KitIcons_Pistol_30x30.png new file mode 100644 index 0000000000..82e5a14612 Binary files /dev/null and b/Outbreak/src/img/KitIcons_Pistol_30x30.png differ diff --git a/Outbreak/src/img/KitIcons_ReconGear_30x30.png b/Outbreak/src/img/KitIcons_ReconGear_30x30.png new file mode 100644 index 0000000000..f5292b8c2e Binary files /dev/null and b/Outbreak/src/img/KitIcons_ReconGear_30x30.png differ diff --git a/Outbreak/src/img/KitIcons_Slashing_30x30.png b/Outbreak/src/img/KitIcons_Slashing_30x30.png new file mode 100644 index 0000000000..52ff6077a8 Binary files /dev/null and b/Outbreak/src/img/KitIcons_Slashing_30x30.png differ diff --git a/Outbreak/src/img/KitIcons_SurvivalKit_30x30.png b/Outbreak/src/img/KitIcons_SurvivalKit_30x30.png new file mode 100644 index 0000000000..f639407566 Binary files /dev/null and b/Outbreak/src/img/KitIcons_SurvivalKit_30x30.png differ diff --git a/Outbreak/src/img/KitIcons_SwimmingDiving_30x30.png b/Outbreak/src/img/KitIcons_SwimmingDiving_30x30.png new file mode 100644 index 0000000000..1fcbbb895f Binary files /dev/null and b/Outbreak/src/img/KitIcons_SwimmingDiving_30x30.png differ diff --git a/Outbreak/src/img/KitIcons_Throwing_30x30.png b/Outbreak/src/img/KitIcons_Throwing_30x30.png new file mode 100644 index 0000000000..890d15f3ee Binary files /dev/null and b/Outbreak/src/img/KitIcons_Throwing_30x30.png differ diff --git a/Outbreak/src/img/KitIcons_Tools_30x30.png b/Outbreak/src/img/KitIcons_Tools_30x30.png new file mode 100644 index 0000000000..ae589c456d Binary files /dev/null and b/Outbreak/src/img/KitIcons_Tools_30x30.png differ diff --git a/Outbreak/src/img/KitIcons_Value_30x30.png b/Outbreak/src/img/KitIcons_Value_30x30.png new file mode 100644 index 0000000000..5d7660e1d8 Binary files /dev/null and b/Outbreak/src/img/KitIcons_Value_30x30.png differ diff --git a/Outbreak/src/img/KitIcons_Vehicles_30x30.png b/Outbreak/src/img/KitIcons_Vehicles_30x30.png new file mode 100644 index 0000000000..12a9de66ef Binary files /dev/null and b/Outbreak/src/img/KitIcons_Vehicles_30x30.png differ diff --git a/Outbreak/src/img/OU_Attributes_Empathy_40x40.png b/Outbreak/src/img/OU_Attributes_Empathy_40x40.png new file mode 100644 index 0000000000..1759fda615 Binary files /dev/null and b/Outbreak/src/img/OU_Attributes_Empathy_40x40.png differ diff --git a/Outbreak/src/img/OU_Attributes_Perception_40x40.png b/Outbreak/src/img/OU_Attributes_Perception_40x40.png new file mode 100644 index 0000000000..2c7e806433 Binary files /dev/null and b/Outbreak/src/img/OU_Attributes_Perception_40x40.png differ diff --git a/Outbreak/src/img/OU_Attributes_Strength_40x40.png b/Outbreak/src/img/OU_Attributes_Strength_40x40.png new file mode 100644 index 0000000000..fa8305df07 Binary files /dev/null and b/Outbreak/src/img/OU_Attributes_Strength_40x40.png differ diff --git a/Outbreak/src/img/OU_Attributes_Willpower_40x40.png b/Outbreak/src/img/OU_Attributes_Willpower_40x40.png new file mode 100644 index 0000000000..fccc5963ad Binary files /dev/null and b/Outbreak/src/img/OU_Attributes_Willpower_40x40.png differ diff --git a/Outbreak/src/img/OU_Logo_340pxWx90pxH.png b/Outbreak/src/img/OU_Logo_340pxWx90pxH.png new file mode 100644 index 0000000000..d145983dec Binary files /dev/null and b/Outbreak/src/img/OU_Logo_340pxWx90pxH.png differ diff --git a/Outbreak/src/img/background.png b/Outbreak/src/img/background.png new file mode 100644 index 0000000000..07df9bfbe0 Binary files /dev/null and b/Outbreak/src/img/background.png differ diff --git a/Outbreak/src/img/greenheader.png b/Outbreak/src/img/greenheader.png new file mode 100644 index 0000000000..65015ea02a Binary files /dev/null and b/Outbreak/src/img/greenheader.png differ diff --git a/Outbreak/src/img/logo.png b/Outbreak/src/img/logo.png new file mode 100644 index 0000000000..5b591429d8 Binary files /dev/null and b/Outbreak/src/img/logo.png differ diff --git a/Outbreak/src/img/virus.png b/Outbreak/src/img/virus.png new file mode 100644 index 0000000000..b3bd0edbbf Binary files /dev/null and b/Outbreak/src/img/virus.png differ diff --git a/Outbreak/src/img/yellowheader.png b/Outbreak/src/img/yellowheader.png new file mode 100644 index 0000000000..afbfbc8da2 Binary files /dev/null and b/Outbreak/src/img/yellowheader.png differ diff --git a/Outbreak/src/js/scripts.js b/Outbreak/src/js/scripts.js new file mode 100644 index 0000000000..13adab3614 --- /dev/null +++ b/Outbreak/src/js/scripts.js @@ -0,0 +1,33 @@ +['Strength', 'Perception', 'Empathy', 'Willpower'].forEach((attribute) => { + on(`change:${attribute}_base change:${attribute}_bonus`, (eventInfo) => { + getAttrs([`${attribute}_base`, `${attribute}_bonus`], (v) => { + const base = parseInt(v[`${attribute}_base`]) || 0; + const bonus = parseInt(v[`${attribute}_bonus`]) || 0; + const total = Math.floor((bonus*10)+base); + + console.log([`${attribute} : ${total}`]); + + setAttrs({ + [`${attribute}`]: total + }); + }); + }); +}); + + +on("change:repeating_skills", (eventInfo) => { + getAttrs(['repeating_skills_attribute_base', 'repeating_skills_attribute_bonus'], (v) => { + const baseAttr = v.repeating_skills_attribute_base.slice(2, -1); + const bonusAttr = v.repeating_skills_attribute_bonus.slice(2, -1); + + getAttrs([`${baseAttr}`, `${bonusAttr}`, 'repeating_skills_advancement'], (v) => { + let base = parseInt(v[`${baseAttr}`]) || 0; + let bonus = parseInt(v[`${bonusAttr}`]) || 0; + const adv = parseInt(v.repeating_skills_advancement) || 0; + + setAttrs({ + "repeating_skills_skill": Math.floor((base+bonus)+adv) + }, {silent:true}); + }); + }); +}); \ No newline at end of file diff --git a/Outbreak/src/pug/_mixins.pug b/Outbreak/src/pug/_mixins.pug new file mode 100644 index 0000000000..ac6f5ad7e3 --- /dev/null +++ b/Outbreak/src/pug/_mixins.pug @@ -0,0 +1,58 @@ + +//- DICE SELECT +mixin diceSelect(selectedDefault) + - const diceTypes = ['d4', 'd6', 'd8', 'd10', 'd12', 'd20']; + optgroup(label='Dice') Dice + each val in diceTypes + - const selectedDie = val === selectedDefault ? selected : ''; + option(value=val selectedDie)=val + +mixin diceSelect(type) + select(name=`attr_${type}_dice`) + option(data-i18n='0' value='[[0d6]]') + option(data-i18n='1' value='[[1d6]]') + option(data-i18n='2' value='[[1d6]] [[1d6]]') + option(data-i18n='3' value='[[1d6]] [[1d6]] [[1d6]]') + option(data-i18n='4' value='[[1d6]] [[1d6]] [[1d6]] [[1d6]]') + option(data-i18n='5' value='[[1d6]] [[1d6]] [[1d6]] [[1d6]] [[1d6]]') + + +mixin dieRadios(type) + input(name=`attr_${type}_die` type='radio' value='[[5d1]]' checked) + span.bold(data-i18n='d5!') + input(name=`attr_${type}_die` type='radio' value='[[6d1]]') + span.bold(data-i18n='d6') + +//- SKILL BUILDERS +mixin skillList(skill, primaryAttribute, secondaryAttribute) + .skill + -const name = skill.toLowerCase().replace('/', '_').replace(' ', '_'); + input(name=`attr_${name}_button_base` type='hidden' value=`[[(?{Gear Or Kit| None, 0 | Archery, @{archery_gear}+@{${primaryAttribute}_bonus}|Athletic Gear, @{athletic_gear}+@{${primaryAttribute}_bonus}|Bludgeon, @{bludgeoning}+@{${primaryAttribute}_bonus}|Climbing Gear, @{climbing_gear}+@{${primaryAttribute}_bonus}|Command Apparatus, @{command_app}+@{${primaryAttribute}_bonus}|Firefighting, @{firefighting}+@{${primaryAttribute}_bonus}|First Aid Kit, @{first_aid_kits}+@{${primaryAttribute}_bonus}|Long Gun, @{long_gun}+@{${primaryAttribute}_bonus}|Martial Arts, @{martial_arts}+@{${primaryAttribute}_bonus}|Medical Gear, @{medical_gear}+@{${primaryAttribute}_bonus}|Piercing, @{piercing}+@{${primaryAttribute}_bonus}|Pistol, @{pistol}+@{${primaryAttribute}_bonus}|Recon Gear, @{recon_gear}+@{${primaryAttribute}_bonus}|Slashing, @{slashing}+@{${primaryAttribute}_bonus}|Survival Kit, @{survival_kit}+@{${primaryAttribute}_bonus}|Swimming/Diving, @{swimming_diving}+@{${primaryAttribute}_bonus}|Throwing, @{throwing}+@{${primaryAttribute}_bonus}|Tools, @{tools}+@{${primaryAttribute}_bonus}|Value, @{value}+@{${primaryAttribute}_bonus}|Vehicles, @{vehicles}+@{${primaryAttribute}_bonus}})*?{Multiplier|1|2|3|4|5}]]`) + + input(name=`attr_${name}_attributes` type='hidden' value=`(@{${primaryAttribute}}+@{${secondaryAttribute}_bonus})`) + + input(name=`attr_${name}_total` type='hidden' value=`(@{${name}} [Skill]+@{${name}_button_base} [Kit])`) + + button(name=`roll_${skill}` type='roll' value!=`&{template:ou} {{name=@{character_name}}} {{roll_name=^{${skill}}}} {{attr=${skill}}} {{Target1=[[@{${name}_total}]]}} {{Target2=[[@{${name}_total}+1]]}} {{skill=VS.}} {{Diff=@{difficulty_dice}}} {{Spd1=@{speed_dice}}} {{Dmg=@{damage_dice}}} {{Deplet=@{depletion_dice}}} {{DieDif=@{difficulty_die}}} {{DieSpd=@{speed_die}}} {{DieDmg=@{damage_die}}} {{DieDep=@{depletion_die}}} {{result=[[1d100+@{difficulty_dice} [Diff]]]}} {{dos1=[[@{${name}_total}-19]]}} {{dos2a=[[@{${name}_total}-20]]}} {{dos2b=[[@{${name}_total}-29]]}} {{dos3a=[[@{${name}_total}-30]]}} {{dos3b=[[@{${name}_total}-39]]}} {{dos4a=[[@{${name}_total}-40]]}} {{dos4b=[[@{${name}_total}-49]]}} {{dof1=[[@{${name}_total}+19]]}} {{dof2a=[[@{${name}_total}+20]]}} {{dof2b=[[@{${name}_total}+29]]}} {{dof3a=[[@{${name}_total}+30]]}} {{dof3b=[[@{${name}_total}+39]]}} {{dof4a=[[@{${name}_total}+40]]}} {{dof4b=[[@{${name}_total}+49]]}}`) + span(data-i18n=`${skill}`) #{skill} + label + input.center(name=`attr_${name}_advancement` title=`attr_${name}_advancement` type='number' value='0') + label + input.center(name=`attr_${name}` title=`attr_${name}` type='number' value=`[[@{${name}_attributes}+@{${name}_advancement}]]` disabled='true') + +//- SKILL BUILDERS +mixin expertSkillList(skill, primaryAttribute, secondaryAttribute) + .skill + -const name = skill.toLowerCase().replace('/', '_').replace(' ', '_'); + input(name=`attr_${name}_button_base` type='hidden' value=`[[(?{Gear Or Kit| None, 0 | Archery, @{archery_gear}+@{${primaryAttribute}_bonus}|Athletic Gear, @{athletic_gear}+@{${primaryAttribute}_bonus}|Bludgeon, @{bludgeoning}+@{${primaryAttribute}_bonus}|Climbing Gear, @{climbing_gear}+@{${primaryAttribute}_bonus}|Command Apparatus, @{command_app}+@{${primaryAttribute}_bonus}|Firefighting, @{firefighting}+@{${primaryAttribute}_bonus}|First Aid Kit, @{first_aid_kits}+@{${primaryAttribute}_bonus}|Long Gun, @{long_gun}+@{${primaryAttribute}_bonus}|Martial Arts, @{martial_arts}+@{${primaryAttribute}_bonus}|Medical Gear, @{medical_gear}+@{${primaryAttribute}_bonus}|Piercing, @{piercing}+@{${primaryAttribute}_bonus}|Pistol, @{pistol}+@{${primaryAttribute}_bonus}|Recon Gear, @{recon_gear}+@{${primaryAttribute}_bonus}|Slashing, @{slashing}+@{${primaryAttribute}_bonus}|Survival Kit, @{survival_kit}+@{${primaryAttribute}_bonus}|Swimming/Diving, @{swimming_diving}+@{${primaryAttribute}_bonus}|Throwing, @{throwing}+@{${primaryAttribute}_bonus}|Tools, @{tools}+@{${primaryAttribute}_bonus}|Value, @{value}+@{${primaryAttribute}_bonus}|Vehicles, @{vehicles}+@{${primaryAttribute}_bonus}})*?{Multiplier|1|2|3|4|5}]]`) + + input(name=`attr_${name}_attributes` type='hidden' value=`(@{${primaryAttribute}_bonus}+@{${secondaryAttribute}_bonus})`) + + input(name=`attr_${name}_total` type='hidden' value=`(@{${name}} [Skill]+@{${name}_button_base} [Kit])`) + + button(name=`roll_${skill}` type='roll' value!=`&{template:ou} {{name=@{character_name}}} {{roll_name=^{${skill}}}} {{attr=${skill}}} {{Target1=[[@{${name}_total}]]}} {{Target2=[[@{${name}_total}+1]]}} {{skill=VS.}} {{Diff=@{difficulty_dice}}} {{Spd1=@{speed_dice}}} {{Dmg=@{damage_dice}}} {{Deplet=@{depletion_dice}}} {{DieDif=@{difficulty_die}}} {{DieSpd=@{speed_die}}} {{DieDmg=@{damage_die}}} {{DieDep=@{depletion_die}}} {{result=[[1d100+@{difficulty_dice} [Diff]]]}} {{dos1=[[@{${name}_total}-19]]}} {{dos2a=[[@{${name}_total}-20]]}} {{dos2b=[[@{${name}_total}-29]]}} {{dos3a=[[@{${name}_total}-30]]}} {{dos3b=[[@{${name}_total}-39]]}} {{dos4a=[[@{${name}_total}-40]]}} {{dos4b=[[@{${name}_total}-49]]}} {{dof1=[[@{${name}_total}+19]]}} {{dof2a=[[@{${name}_total}+20]]}} {{dof2b=[[@{${name}_total}+29]]}} {{dof3a=[[@{${name}_total}+30]]}} {{dof3b=[[@{${name}_total}+39]]}} {{dof4a=[[@{${name}_total}+40]]}} {{dof4b=[[@{${name}_total}+49]]}}`) + span(data-i18n=`${skill}`) #{skill} + label + input.center(name=`attr_${name}_advancement` title=`attr_${name}_advancement` type='number' value='0') + label + input.center(name=`attr_${name}` title=`attr_${name}` type='number' value=`[[@{${name}_attributes}+@{${name}_advancement}]]` disabled='true') \ No newline at end of file diff --git a/Outbreak/src/pug/rolltemplate.html b/Outbreak/src/pug/rolltemplate.html new file mode 100644 index 0000000000..d8ffac5242 --- /dev/null +++ b/Outbreak/src/pug/rolltemplate.html @@ -0,0 +1,112 @@ + + + + + + + + {{#rollBetween() result dos1 Target1}}{{/rollBetween() result dos1 Target1}} + {{#rollBetween() result dos2b dos2a}}{{/rollBetween() result dos2b dos2a}} + {{#rollBetween() result dos3b dos3a}}{{/rollBetween() result dos3b dos3a}} + {{#rollBetween() result dos4b dos4a}}{{/rollBetween() result dos4b dos4a}} + {{#rollLess() result dos4b}}{{/rollLess() result dos4b}} + {{#rollBetween() result Target2 dof1}}{{/rollBetween() result Target2 dof1}} + {{#rollBetween() result dof2a dof2b}}{{/rollBetween() result dof2a dof2b}} + {{#rollBetween() result dof3a dof3b}}{{/rollBetween() result dof3a dof3b}} + {{#rollBetween() result dof4a dof4b}}{{/rollBetween() result dof4a dof4b}} + {{#rollGreater() result dof4b}}{{/rollGreater() result dof4b}} + + + + + {{#rollGreater() Spd1 0}} + + {{#rollTotal() DieSpd 6}} + + {{/rollTotal() DieSpd 6}} + {{#rollTotal() DieSpd 5}} + + {{/rollTotal() DieSpd 5}} + + {{/rollGreater() Spd1 0}} + {{#rollGreater() Dmg 0}} + + {{#rollTotal() DieDmg 6}} + + {{/rollTotal() DieDmg 6}} + {{#rollTotal() DieDmg 5}} + + {{/rollTotal() DieDmg 5}} + + {{/rollGreater() Dmg 0}} + {{#rollGreater() Deplet 0}} + + {{#rollTotal() DieDep 6}} + + {{/rollTotal() DieDep 6}} + {{#rollTotal() DieDep 5}} + + {{/rollTotal() DieDep 5}} + + {{/rollGreater() Deplet 0}} + +
{{name}} rolls
+ {{#roll_name}}{{roll_name}}{{/roll_name}} {{#skill}}{{skill}}({{Target1}}%){{/skill}} +
{{result}}+++++++++++++++---------------
Speed:{{Spd1}}Speed:{{Spd1}}
Damage:{{Dmg}}Damage:{{Dmg}}
Depletion:{{Deplet}}Depletion:{{Deplet}}
Roll dice for all: + Speed Die + Damage Die + Depletion Die +
+
+ + + + {{#rollGreater() Diff 0}} + + + + {{/rollGreater() Diff 0}} + {{#rollGreater() Spd1 0}} + + {{#rollTotal() DieSpd 6}} + + {{/rollTotal() DieSpd 6}} + {{#rollTotal() DieSpd 5}} + + {{/rollTotal() DieSpd 5}} + + {{/rollGreater() Spd1 0}} + {{#rollGreater() Dmg 0}} + + {{#rollTotal() DieDmg 6}} + + {{/rollTotal() DieDmg 6}} + {{#rollTotal() DieDmg 5}} + + {{/rollTotal() DieDmg 5}} + + {{/rollGreater() Dmg 0}} + {{#rollGreater() Deplet 0}} + + {{#rollTotal() DieDep 6}} + + {{/rollTotal() DieDep 6}} + {{#rollTotal() DieDep 5}} + + {{/rollTotal() DieDep 5}} + + {{/rollGreater() Deplet 0}} + + +
Difficulty:{{Diff}}
Speed:{{Spd1}} Speed:{{Spd1}}
Damage:{{Dmg}} Damage:{{Dmg}}
Depletion:{{Deplet}}Depletion:{{Deplet}}
Reroll: + Speed Die + Damage Die + Depletion Die
+
\ No newline at end of file diff --git a/Outbreak/src/scss/_global.scss b/Outbreak/src/scss/_global.scss new file mode 100644 index 0000000000..fc4f16a07a --- /dev/null +++ b/Outbreak/src/scss/_global.scss @@ -0,0 +1,104 @@ +* { + box-sizing: border-box; +} + +.charsheet { + background-color: #f9e0a8; + padding: 1%; + min-width: 850px; + font-family: "Courier New", Courier, monospace; +} + +button { + text-overflow: ellipsis; + + &:before { + display: none; + } + + &:focus > h3, + &:hover > h3, + &:active > h3 { + color: $gray; + text-shadow: 1px 1px 2px $black, 0 0 25px $gray, 0 0 5px $gray; + } + + &[type='roll'], + &[type='action'] { + background: $gray; + border: { + bottom : 0.01em solid #666; + bottom-right-radius: 0.01em; + color : hsl(0, 0%, 70%); + radius : 0.25em; + right : 0.02em solid hsl(0, 0%, 20%); + style : outset; + } + margin: 0.2em !important; + padding: 0.1em !important; + } + + &[type='action'] { + background: $gray; + + &:focus, &:hover, &:active { + background-color: $green; + color: $gray; + } + } + + &[type='roll'] { + background: $gray; + + &:focus, &:hover, &:active { + background-color: $green; + color: $black; + } + } +} + +h2 { + font-size: 1em; +} + +label { + margin: 0px; + padding: 0px; +} + +input { + &[type="number"], + &[type="text"] { + padding: 1px 2px; + width: 100% !important; + } + + &[disabled='true'] { + background-color: #77be7924; + cursor: not-allowed; + } +} + +select { + margin: 0px; + padding: 0px; +} + +textarea { + font-size: 1.1em; + font-weight: normal; + height: 50px; + line-height: 1.5em; + min-height: 50px; + overflow-wrap: break-word; + overflow: scroll; + padding: 2px; + resize: vertical; + text-align: left; + vertical-align: top; + white-space: pre-line; +} + +select { + width: 100%; +} \ No newline at end of file diff --git a/Outbreak/src/scss/_rolltemplate.scss b/Outbreak/src/scss/_rolltemplate.scss new file mode 100644 index 0000000000..f1824ae10f --- /dev/null +++ b/Outbreak/src/scss/_rolltemplate.scss @@ -0,0 +1,131 @@ +.sheet-rolltemplate-ou table { + width: 189px; + height: 186px; + padding: 2px; + background-color: #e6e6e6; + background-size: 189px 186px; + background-repeat: no-repeat; + font-family: "Courier New", Courier, monospace; + font-weight: bold; + border-spacing: 0; +} +.sheet-rolltemplate-ou-small table { + background-color: #e6e6e6; + width: 189px; + height: 186px; + padding: 4px; + background-size: 189px 186px; + background-repeat: no-repeat; + font-family: "Courier New", Courier, monospace; + font-weight: bold; + border-spacing: 0; +} +.sheet-rolltemplate-ou th { + color: rgb(20, 90, 50); + padding: 10px 2px 2px 20px; + line-height: 1.2em; + font-size: 1.2em; + text-align: left; +} +.sheet-rolltemplate-ou td, +.sheet-rolltemplate-ou-small td { + padding-left: 10px; + font-size: 1.0em; + vertical-align: top; +} +.sheet-rolltemplate-ou .sheet-resultr { + font-size: 1.5em; + font-family: 'Pictos'; + text-align: center; + color: #C0392B; + /*color: rgb(20, 90, 50);*/ + padding-bottom: 15px; +} +.sheet-rolltemplate-ou .sheet-resultg { + font-size: 1.5em; + font-family: 'Pictos'; + text-align: center; + color: #28B463; + /*color: rgb(20, 90, 50);*/ + padding-bottom: 15px; +} +.sheet-rolltemplate-ou .inlinerollresult { + background-color: transparent; + color: #000000; + border: none; +} +.sheet-rolltemplate-ou .inlinerollresult.fullcrit { + background-color: #28B463; + color: #ffffff; + border: none; +} +.sheet-rolltemplate-ou .inlinerollresult.fullfail { + background-color: #C0392B; + color: #ffffff; + border: none; +} +.sheet-rolltemplate-ou .sheet-res .inlinerollresult.fullcrit, +.sheet-rolltemplate-ou .sheet-res .inlinerollresult.fullfail { + background-color: transparent; + color: black; + border: black; +} +.sheet-rolltemplate-ou-small .sheet-diff .inlinerollresult, +.sheet-rolltemplate-ou .sheet-diff .inlinerollresult { + background-color: #000000; + color: #ffffff; + padding-bottom: 0px; + padding-top: 0px; + border: none; +} +.sheet-rolltemplate-ou-small .sheet-speed .inlinerollresult, +.sheet-rolltemplate-ou .sheet-speed .inlinerollresult { + background-color: #104ac9; + color: #ffffff; + padding-bottom: 0px; + padding-top: 0px; + border: none; +} +.sheet-rolltemplate-ou-small .sheet-damage .inlinerollresult, +.sheet-rolltemplate-ou .sheet-damage .inlinerollresult { + background-color: #ce3c2d; + color: #ffffff; + padding-bottom: 0px; + padding-top: 0px; + border: none; +} +.sheet-rolltemplate-ou-small .sheet-deplete .inlinerollresult, +.sheet-rolltemplate-ou .sheet-deplete .inlinerollresult { + background-color: #ffffff; + color: #000000; + padding-bottom: 0px; + padding-top: 0px; + border: none; +} +.sheet-rolltemplate-ou-small .sheet-speed-five .inlinerollresult.fullcrit, +.sheet-rolltemplate-ou .sheet-speed-five .inlinerollresult.fullcrit { + background: url('https://raw.githubusercontent.com/clevett/roll20-character-sheets/outbreakv1/Outbreak/src/img/HuntersIcon_speed_16pxW_x16pxH.jpg') bottom; + background-size: 19px 19px; + background-repeat: no-repeat; + z-index: +1; + font-size: 1.2em; + color: transparent; +} +.sheet-rolltemplate-ou-small .sheet-damage-five .inlinerollresult.fullcrit, +.sheet-rolltemplate-ou .sheet-damage-five .inlinerollresult.fullcrit { + background: url('https://raw.githubusercontent.com/clevett/roll20-character-sheets/outbreakv1/Outbreak/src/img/HuntersIcon_damage_16pxW_x16pxH.jpg') bottom; + background-size: 19px 19px; + background-repeat: no-repeat; + z-index: +1; + font-size: 1.2em; + color: transparent; +} +.sheet-rolltemplate-ou-small .sheet-deplete-five .inlinerollresult.fullcrit, +.sheet-rolltemplate-ou .sheet-deplete-five .inlinerollresult.fullcrit { + background: url('https://raw.githubusercontent.com/clevett/roll20-character-sheets/outbreakv1/Outbreak/src/img/HuntersIcon_depletion_16pxW_x16pxH.jpg') bottom; + background-size: 19px 19px; + background-repeat: no-repeat; + z-index: +1; + font-size: 1.2em; + color: transparent; +} \ No newline at end of file diff --git a/Outbreak/translation.json b/Outbreak/translation.json new file mode 100644 index 0000000000..12fa9b6eea --- /dev/null +++ b/Outbreak/translation.json @@ -0,0 +1,115 @@ +{ + "Main": "Main" + ,"0":"0" + ,"1":"1" + ,"1st":"1st" + ,"2":"2" + ,"2nd":"2nd" + ,"3":"3" + ,"3rd":"3rd" + ,"4":"4" + ,"4th":"4th" + ,"5":"5" + ,"5th":"5th" + ,"Adv Medicine":"Adv Medicine" + ,"Adv":"Adv" + ,"Adv":"Adv" + ,"Archery Gear":"Archery Gear" + ,"Athletic Gear":"Athletic Gear" + ,"Attr":"Attr" + ,"Balance":"Balance" + ,"Barter":"Barter" + ,"Basic Skills":"Basic Skills" + ,"Bludgeoning":"Bludgeoning" + ,"Blunt":"Blunt" + ,"Bonus":"Bonus" + ,"Bow":"Bow" + ,"Brawl":"Brawl" + ,"Calm Other":"Calm Other" + ,"Campaign":"Campaign" + ,"Character Resources":"Character Resources" + ,"Climb":"Climb" + ,"Climbing Gear":"Climbing Gear" + ,"Command App":"Command App" + ,"Command":"Command" + ,"Competance Points:": "Competance Points:" + ,"Composure":"Composure" + ,"Construct Engineer":"Construct Engineer" + ,"Coping Mechanisms":"Coping Mechanisms" + ,"Damage Threshold":"Damage Threshold" + ,"Detect Motives":"Detect Motives" + ,"Dice Pool":"Dice Pool" + ,"Digital Systems":"Digital Systems" + ,"Dodge":"Dodge" + ,"Empathy":"Empathy" + ,"Endurance":"Endurance" + ,"Equipment": "Equipment" + ,"Equipment":"Equipment" + ,"Expert Skills":"Expert Skills" + ,"Expression":"Expression" + ,"Firefighting":"Firefighting" + ,"First Aid Kits":"First Aid Kits" + ,"First Aid":"First Aid" + ,"Gestalt Level:":"Gestalt Level:" + ,"Grapple":"Grapple" + ,"Health Points":"Health Points" + ,"Hold":"Hold" + ,"Injuries":"Injuries" + ,"Intimidate":"Intimidate" + ,"Jump/Leap":"Jump/Leap" + ,"Lift/Pull":"Lift/Pull" + ,"Log": "Log" + ,"Long Gun":"Long Gun" + ,"Martial Art":"Martial Art" + ,"Martial Arts":"Martial Arts" + ,"Medical Gear":"Medical Gear" + ,"Morale":"Morale" + ,"Name":"Name" + ,"Navigation":"Navigation" + ,"Perception":"Perception" + ,"Persuade":"Persuade" + ,"Pierce":"Pierce" + ,"Piercing":"Piercing" + ,"Pilot":"Pilot" + ,"Pistol":"Pistol" + ,"Player":"Player" + ,"Psyche":"Psyche" + ,"Recon Gear":"Recon Gear" + ,"Resist Pain":"Resist Pain" + ,"Ride":"Ride" + ,"Roll":"Roll" + ,"S.P.E.W Attributes":"S.P.E.W Attributes" + ,"Sb + Wb":"Sb + Wb" + ,"Science":"Science" + ,"Search":"Search" + ,"Skill":"Skill" + ,"Skills": "Skills" + ,"Slash":"Slash" + ,"Slashing":"Slashing" + ,"Specalizations":"Specalizations" + ,"Spot/Listen":"Spot/Listen" + ,"Stealth":"Stealth" + ,"Strength":"Strength" + ,"Survival Kit":"Survival Kit" + ,"Survival Points:":"Survival Points:" + ,"Survival":"Survival" + ,"Swim":"Swim" + ,"Swimming/Diving":"Swimming/Diving" + ,"Symptoms":"Symptoms" + ,"Throw":"Throw" + ,"Throwing":"Throwing" + ,"Tools":"Tools" + ,"Tot":"Tot" + ,"Total":"Total" + ,"Toughness":"Toughness" + ,"Trained Skills": "Trained Skills" + ,"Training Value Bonus":"Training Value Bonus" + ,"Value":"Value" + ,"Vehicles":"Vehicles" + ,"Viral":"Viral" + ,"Vitality":"Vitality" + ,"Wb + Eb":"Wb + Eb" + ,"Willpower":"Willpower" + ,"d5!":"d5!" + ,"d6":"d6" +} \ No newline at end of file