Merge pull request #8909 from Anduh/GODSEND-Agenda

[New Sheet] GODSEND Agenda
This commit is contained in:
Miguel Peres
2021-05-17 16:31:59 -03:00
committed by GitHub
14 changed files with 1483 additions and 0 deletions
+4
View File
@@ -0,0 +1,4 @@
# About
Character sheet for GODSEND Agenda, on behalf of the publisher Khepera Publishing.
Created with PUGjs and SASS by [Andreas J.](https:wiki.roll20.net/Anduh).
Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

+375
View File
@@ -0,0 +1,375 @@
@import url("https://fonts.googleapis.com/css?family=Zilla+Slab|Anton|Noto+Sans+TC|Bebas+Neue&display=swap");
.charsheet {
/* ---------- Colors ---------- */
/* --------- Text ------------- */
/* --------- Inputs ------------- */
/* -----Hides up/down buttons on numberfields that don't need them ---*/
/* highlights empty fields with Light grayish red */
/* higlight selected input */
/* ------- Buttons ---------- */
/* text buttons with dice icon removed */
/*------------------------------------*\
#SECTIONS
\*------------------------------------*/
/* page selection */
/* --------------- Universal Section ------------------- */
/* Core layout of each page */
/*------------------------------------*\
#PAGE LAYOUT/ PAGE BUTTONS
\*------------------------------------*/
/* -------------- page buttons ------------- */
/* show the selected page */
}
.charsheet * {
font-family: "Noto Sans TC";
--mythic-dark-red: #4a0004;
--mythic-light-red: #ac3f2b;
--mythic-red: #a83521;
}
.charsheet .version {
color: black;
font-weight: bold;
float: right;
margin: -31px 13px;
}
.charsheet .capital,
.charsheet :not(textarea) {
font-family: "Bebas Neue";
}
.charsheet label,
.charsheet .label,
.charsheet span {
color: var(--mythic-dark-red);
}
.charsheet h1, .charsheet h2, .charsheet h3 {
text-align: center;
}
.charsheet span.bold {
font-weight: 800;
font-size: medium;
}
.charsheet div.border-label label {
border-style: solid;
max-width: 80%;
border-radius: 13px;
}
.charsheet .small-font {
font-size: xx-small;
height: 18px;
}
.charsheet input[type=text],
.charsheet input[type=number] {
background-color: transparent;
border-style: none none solid none;
border-color: var(--mythic-light-red);
border-radius: 0px;
}
.charsheet input[type=number] {
border: 1px solid var(--mythic-light-red);
text-align: center;
}
.charsheet input[type=number].bubble {
border: 2px solid var(--mythic-light-red);
border-radius: 13px;
}
.charsheet input[type=checkbox].checkbox {
border: solid var(--mythic-light-red);
border-radius: 0px;
}
.charsheet input[type=number].ref {
border-style: none none solid none;
border-color: black;
border-radius: 0px;
}
.charsheet input[type=number].ref::-webkit-inner-spin-button,
.charsheet input[type=number].ref::-webkit-outer-spin-button,
.charsheet input[type=number].txtfield::-webkit-inner-spin-button,
.charsheet input[type=number].txtfield::-webkit-outer-spin-button {
-webkit-appearance: none;
margin: 0;
}
.charsheet input[type=number].ref,
.charsheet input[type=number].txtfield {
-moz-appearance: textfield;
}
.charsheet textarea {
width: 90%;
height: 85%;
background-color: transparent;
}
.charsheet textarea:placeholder-shown,
.charsheet input[type=text]:placeholder-shown,
.charsheet input[type=number]:placeholder-shown {
background-color: #EAC9D1;
}
.charsheet textarea:focus,
.charsheet input[type=text]:focus,
.charsheet input[type=number]:focus {
background-color: #ccc;
}
.charsheet button[type=roll].txt-btn:before,
.charsheet button[type=roll].skills:before {
content: " ";
}
.charsheet button[type=roll].d6-dice::before {
/*new die changes die roller to d6*/
font-family: "dicefontd6", arial;
content: "F ";
color: white;
}
.charsheet button[type=roll].sendtext::before {
/*new die changes die roller to d6*/
font-family: "Pictos";
content: "w ";
color: black;
}
.charsheet button[type=roll].txt-btn {
height: 22px;
border: 2px solid black;
background-color: transparent;
margin-left: 5px;
font-weight: bold;
padding: 2px 5px 4px 5px;
text-shadow: none;
}
.charsheet button[type=roll].txt-btn:hover {
background-color: #d9d9d9;
border-radius: 10px;
text-shadow: none;
}
.charsheet button[type=roll].red {
background-color: #a83521;
background-position: 0 -30px;
color: white;
}
.charsheet button[type=roll].red:hover {
background-color: #a83521;
background-position: 0 -30px;
color: white;
font-size: 1.7em;
}
.charsheet div.tab-buttons {
display: flex;
gap: 30px;
border: 2px black;
border-style: none none solid none;
}
.charsheet div.tab-buttons button {
font-size: 1.5em;
}
.charsheet div.tab-buttons select {
width: 90px;
}
.charsheet .border {
border-style: solid;
border-radius: 13px;
}
.charsheet :is(div.section section) hr {
display: block;
margin-top: 0.5em;
margin-bottom: 0.5em;
margin-left: auto;
margin-right: auto;
border-style: solid;
border-width: 2px;
border-color: black;
}
.charsheet .section,
.charsheet section {
display: flex;
padding: 5px;
border: none;
background: white;
opacity: 0.9;
min-height: 90%;
max-width: 750px;
}
.charsheet .flex-row {
display: flex;
flex-flow: row wrap;
}
.charsheet .flex-col {
display: flex;
flex-flow: column;
}
.charsheet .flex-center {
place-items: center;
}
.charsheet .gap {
gap: 10px;
}
.charsheet .columnflex {
display: flex;
flex-direction: column;
}
.charsheet .rowflex {
display: flex;
flex-direction: row;
}
.charsheet .wrap {
flex-wrap: wrap;
}
.charsheet .nowrap {
flex-wrap: nowrap;
}
.charsheet .center {
align-items: center;
}
.charsheet .middle {
justify-content: center;
}
.charsheet .spaced {
justify-content: space-evenly;
}
.charsheet label.title {
text-transform: capitalize;
max-width: 150px;
text-align: center;
font-size: 25px;
}
.charsheet div.halfsection {
max-width: 400px;
}
.charsheet main.character {
display: grid;
grid-gap: 4px;
grid-template-columns: 3fr 1fr;
grid-template-rows: 70px 40px 140px auto;
grid-template-areas: "common common" "points points" "attrs attrs" "skills notes";
width: 800px;
height: 1300px;
position: relative;
/* Section specific */
}
.charsheet main.character section.common {
grid-area: common;
}
.charsheet main.character section.points {
grid-area: points;
}
.charsheet main.character section.disadv {
grid-area: disadv;
}
.charsheet main.character section.skills {
grid-area: skills;
}
.charsheet main.character section.notes {
grid-area: notes;
}
.charsheet main.character section.notes input {
background-color: #ccc;
}
.charsheet main.notes {
display: grid;
width: 750px;
position: relative;
}
.charsheet main.settings {
display: grid;
width: 750px;
position: relative;
}
.charsheet main.character,
.charsheet main.notes,
.charsheet main.settings {
display: none;
}
.charsheet input.tabstoggle[value=character] ~ main.character,
.charsheet input.tabstoggle[value=notes] ~ main.notes,
.charsheet input.tabstoggle[value=settings] ~ main.settings {
display: grid;
}
/*------------------------------------*\
#ROLL TEMPLATES
\*------------------------------------*/
/* Smaller margins - remove these if you want the huge default left margin */
.withoutavatars .sheet-rolltemplate-rolls {
margin-left: -7px;
}
.sheet-rolltemplate-rolls {
margin-left: -37px;
font-family: "Yanone Kaffeesatz";
/* Header formatting - title and subtitle */
/* alt template colors */
/* Allprops part */
/* Make even-numbered rows grey */
/* Description field */
}
.sheet-rolltemplate-rolls .sheet-container {
border: 3px solid black;
border-radius: 3px;
}
.sheet-rolltemplate-rolls .sheet-header {
background-color: var(--header-bg-color, #a83521);
color: var(--header-text-color, #FFF);
text-align: left;
text-transform: capitalize;
padding: 5px;
border-bottom: 2px solid black;
}
.sheet-rolltemplate-rolls .sheet-title {
font-size: 1.4em;
font-weight: bold;
}
.sheet-rolltemplate-rolls .sheet-subtitle {
font-size: 1em;
}
.sheet-rolltemplate-rolls .sheet-container {
--header-bg-color: #a83521;
--header-text-color: #FFF;
}
.sheet-rolltemplate-rolls .sheet-container.sheet-color-green {
--header-bg-color: #008000;
}
.sheet-rolltemplate-rolls .sheet-container.sheet-color-blue {
--header-bg-color: #0000e0;
}
.sheet-rolltemplate-rolls .sheet-container.sheet-color-gold {
--header-bg-color: #ffdd1f;
--header-text-color: #000;
}
.sheet-rolltemplate-rolls .sheet-container.sheet-color-purple {
--header-bg-color: #c200c2;
}
.sheet-rolltemplate-rolls .sheet-container.sheet-color-black {
--header-bg-color: #000;
}
.sheet-rolltemplate-rolls .sheet-container.sheet-color-white {
--header-bg-color: #FFF;
--header-text-color: #000;
}
.sheet-rolltemplate-rolls .sheet-content {
display: grid;
background: #FFF;
grid-template-columns: auto auto;
line-height: 1.4em;
}
.sheet-rolltemplate-rolls .sheet-content > div {
padding: 5px;
}
.sheet-rolltemplate-rolls .sheet-content .sheet-key {
font-weight: bold;
padding-right: 10px;
text-align: right;
}
.sheet-rolltemplate-rolls .sheet-content :nth-child(4n+3),
.sheet-rolltemplate-rolls .sheet-content :nth-child(4n) {
background: #EEE;
}
.sheet-rolltemplate-rolls .sheet-desc, .sheet-rolltemplate-rolls .sheet-crit, .sheet-rolltemplate-rolls .sheet-fail {
grid-column: span 2;
padding: 5px;
text-align: center;
}
.sheet-rolltemplate-rolls .sheet-crit, .sheet-rolltemplate-rolls .sheet-fail {
font-weight: bold;
font-size: 1.3em;
}
.sheet-rolltemplate-rolls .sheet-crit {
color: green;
}
.sheet-rolltemplate-rolls .sheet-fail {
color: red;
}
+222
View File
@@ -0,0 +1,222 @@
<!-- main sheet code-->
<div class="tab-buttons spaced center">
<!--_ button(type="action" name=`act_${tab}`) tab-->
<h1>GODSEND AGENDA</h1>
<div><span>Page selection</span>
<select name="attr_sheetTab">
<option value="character">character</option>
<option value="notes">notes</option>
<option value="settings">settings</option>
</select>
</div>
<div class="version"><span>Sheet Version: </span><span name="attr_version"></span></div>
</div>
<input class="tabstoggle" type="hidden" name="attr_sheetTab" value="character"/>
<main class="character">
<section class="common">
<div class="columnflex nowrap">
<label>Name</label>
<input name="attr_character_name" title="@{character_name}" type="text"/>
</div>
<div class="columnflex nowrap">
<label>Species</label>
<input name="attr_species" title="@{species}" type="text"/>
</div>
<div class="columnflex nowrap">
<label>Archetype</label>
<input name="attr_archetype" title="@{archetype}" type="text"/>
</div>
<div class="columnflex nowrap">
<label>Renown</label>
<input name="attr_renown" title="@{renown}" type="number"/>
</div>
</section>
<section class="points rowflex nowrap spaced">
<div class="rowflex nowrap"><span>Body Points</span>
<input class="txtfield" name="attr_body_points" type="number" value=""/><span>/</span>
<input class="txtfield" name="attr_body_points_max" type="number" value=""/>
</div>
<div class="rowflex nowrap"><span>Mind Points</span>
<input class="txtfield" name="attr_mind_points" type="number" value=""/><span>/</span>
<input class="txtfield" name="attr_mind_points_max" type="number" value=""/>
</div>
<div class="rowflex nowrap"><span>Hero Points</span>
<input class="txtfield" name="attr_hero_points" title="@{hero_points}" type="number" value=""/><span>/</span>
<input class="txtfield" name="attr_hero_points_max" title="@{hero_points_max}" type="number" value=""/>
</div>
<div class="rowflex nowrap"><span>Wealth Rating</span>
<input class="txtfield" name="attr_wealth" title="@{wealth}" type="number" value=""/>
</div>
<div class="rowflex nowrap"><span>XP</span>
<input class="txtfield" name="attr_xp" title="@{xp}" type="number" value=""/>
<input class="txtfield" name="attr_xp_max" title="@{xp_max}" type="number" value=""/>
</div>
</section>
<section class="attrs columnflex nowrap">
<h2>Attributes</h2>
<div class="rowflex nowrap middle spaced">
<div>
<button name="roll_con" value="@{whisper}&{template:rolls} {{title=con }} {{subtitle=@{character_name} }} {{result= [[@{dice}+@{con}[con]@{modquery}]]}}" type="roll">con</button>
<input name="attr_con" type="number" title="@{con}" value=""/>
</div>
<div>
<button name="roll_dex" value="@{whisper}&{template:rolls} {{title=dex }} {{subtitle=@{character_name} }} {{result= [[@{dice}+@{dex}[dex]@{modquery}]]}}" type="roll">dex</button>
<input name="attr_dex" type="number" title="@{dex}" value=""/>
</div>
<div>
<button name="roll_spd" value="@{whisper}&{template:rolls} {{title=spd }} {{subtitle=@{character_name} }} {{result= [[@{dice}+@{spd}[spd]@{modquery}]]}}" type="roll">spd</button>
<input name="attr_spd" type="number" title="@{spd}" value=""/>
</div>
<div>
<button name="roll_str" value="@{whisper}&{template:rolls} {{title=str }} {{subtitle=@{character_name} }} {{result= [[@{dice}+@{str}[str]@{modquery}]]}}" type="roll">str</button>
<input name="attr_str" type="number" title="@{str}" value=""/>
</div>
<div>
<button name="roll_cr" value="@{whisper}&{template:rolls} {{title=cr }} {{subtitle=@{character_name} }} {{result= [[@{dice}+@{cr}[cr]@{modquery}]]}}" type="roll">cr</button>
<input name="attr_cr" type="number" title="@{cr}" value=""/>
</div>
</div>
<div class="rowflex nowrap middle spaced">
<div>
<button name="roll_sha" value="@{whisper}&{template:rolls} {{title=sha }} {{subtitle=@{character_name} }} {{result= [[@{dice}+@{sha}[sha]@{modquery}]]}}" type="roll">sha</button>
<input name="attr_sha" type="number" title="@{sha}" value=""/>
</div>
<div>
<button name="roll_int" value="@{whisper}&{template:rolls} {{title=int }} {{subtitle=@{character_name} }} {{result= [[@{dice}+@{int}[int]@{modquery}]]}}" type="roll">int</button>
<input name="attr_int" type="number" title="@{int}" value=""/>
</div>
<div>
<button name="roll_per" value="@{whisper}&{template:rolls} {{title=per }} {{subtitle=@{character_name} }} {{result= [[@{dice}+@{per}[per]@{modquery}]]}}" type="roll">per</button>
<input name="attr_per" type="number" title="@{per}" value=""/>
</div>
<div>
<button name="roll_wil" value="@{whisper}&{template:rolls} {{title=wil }} {{subtitle=@{character_name} }} {{result= [[@{dice}+@{wil}[wil]@{modquery}]]}}" type="roll">wil</button>
<input name="attr_wil" type="number" title="@{wil}" value=""/>
</div>
<div>
<button name="roll_mr" value="@{whisper}&{template:rolls} {{title=mr }} {{subtitle=@{character_name} }} {{result= [[@{dice}+@{mr}[mr]@{modquery}]]}}" type="roll">mr</button>
<input name="attr_mr" type="number" title="@{mr}" value=""/>
</div>
</div>
</section>
<section class="skills columnflex nowrap">
<h2>Skills</h2>
<fieldset class="repeating_skills">
<input name="attr_name" title="@{name}" type="text"/>
<input name="attr_level" title="@{level}" type="number"/>
<select name="attr_attribute">
<option value="[[@{con}]]">con</option>
<option value="[[@{dex}]]">dex</option>
<option value="[[@{spd}]]">spd</option>
<option value="[[@{str}]]">str</option>
<option value="[[@{cr}]]">cr</option>
<option value="[[@{sha}]]">sha</option>
<option value="[[@{int}]]">int</option>
<option value="[[@{per}]]">per</option>
<option value="[[@{wil}]]">wil</option>
<option value="[[@{mr}]]">mr</option>
<option value="[[@{none}]]">none</option>
</select>
<button name="roll_roll" value="@{whisper}&{template:rolls} {{title=@{name} }} {{subtitle=@{character_name} }} {{result= [[@{dice}+@{level}[skill level]+@{attribute}[attribute]@{modquery}]]}}" type="roll"><span name="attr_name"></span></button>
</fieldset>
</section>
<section class="notes columnflex nowrap">
<h2>Disadvantages</h2>
<div><span>personal
<input name="attr_personal" title="@{personal}" type="text"/>
<input name="attr_personaldice" title="@{personaldice}" type="number" value=""/></span></div>
<div><span>internal
<input name="attr_internal" title="@{internal}" type="text"/>
<input name="attr_internaldice" title="@{internaldice}" type="number" value=""/></span></div>
<div><span>external
<input name="attr_external" title="@{external}" type="text"/>
<input name="attr_externaldice" title="@{externaldice}" type="number" value=""/></span></div>
<h2>Notes</h2>
<textarea name="attr_notes"></textarea>
</section>
</main>
<main class="notes">
<h1>Notes</h1>
<section>
<h3>archetype_description</h3>
<textarea name="attr_archetype_description"></textarea>
</section>
<section>
<h3>powers</h3>
<textarea name="attr_powers"></textarea>
</section>
<section>
<h3>weapons</h3>
<textarea name="attr_weapons"></textarea>
</section>
<section>
<h3>equipment</h3>
<textarea name="attr_equipment"></textarea>
</section>
</main>
<main class="settings">
<h1>Settings</h1>
<div class="section columnflex nowrap"><span>Ask for Roll Modifiers?</span>
<select name="attr_modquery" title="@{modquery}">
<option value="+(?{Roll Modifier|0}[Modifiers])">Yes</option>
<option value=" ">No</option>
</select>
</div>
<div class="section rowflex nowrap gap"><span title="@{whisper}">Whisper rolls to GM?</span>
<input name="attr_whisper" title="@{whisper}" type="checkbox" value="/w gm"/>
</div>
<div class="section rowflex nowrap gap"><span>Dice type</span>
<select name="attr_dice" title="@{dice}">
<option value="2d10cf0cs0" selected="selected">2d10 (GODSEND Agenda)</option>
<option value="1d20">d20 (Talislanta, Hellas, Atlantis)</option>
</select>
</div>
</main>
<!--hidden inputs & datalists-->
<!--sheet version-->
<input type="hidden" name="attr_version" value="1.0.0"/>
<input type="hidden" name="attr_none" value="0"/>
<!--roll templates-->
<rolltemplate class="sheet-rolltemplate-rolls">
<div class="sheet-container sheet-color-{{color}}">
<div class="sheet-header">
{{#title}}<div class="sheet-title">{{title}}</div>{{/title}}
<!-- {{#name}}<div class="sheet-name">{{name}}</div>{{/name}} -->
{{#subtitle}}<div class="sheet-subtitle">{{subtitle}}</div>{{/subtitle}}
</div>
<div class="sheet-content">
{{#allprops() title subtitle desc color baseroll}}
<div class="sheet-key">{{key}}</div>
<div class="sheet-value">{{value}}</div>
{{/allprops() title subtitle desc color baseroll}}
{{#rollTotal() baseroll 2}}
<div class="sheet-fail">^{critical-fumble}</div>
{{/rollTotal() baseroll 2}}
{{#rollTotal() baseroll 12}}
<div class="sheet-crit">Critical Success!</div>
{{/rollTotal() baseroll 12}}
{{#desc}}<div class="sheet-desc">{{desc}}</div>{{/desc}}
</div>
</div>
</rolltemplate>
<!--sheetworkers-->
<script type="sheet/worker">
const int = score => parseInt(score, 10) || 0;
// tabs
const buttonlist = ["character", "notes", "settings"];
buttonlist.forEach(button => {
on(`clicked:${button}`, function() {
console.log(button + " was pressed");
setAttrs({
sheetTab: button
});
});
});
</script>
+40
View File
@@ -0,0 +1,40 @@
{
"html": "sheet.html",
"css": "sheet.css",
"authors": "Andreas J.",
"roll20userid": "1223200",
"preview": "preview.png",
"instructions": "This is the character sheet for'GODSEND Agenda', by Khepera Publishing.\n\n* [GODSEND-Agenda-3-Beta-Test](https://www.drivethrurpg.com/product/305357/GODSEND-Agenda-3-Beta-Test?affiliate_id=135577) on DriveThuRPG",
"legacy": false,
"useroptions": [
{
"attribute": "whisper",
"displayname": "Whisper rolls to GM?",
"description": "When checked, the rolls made from the sheet are only visible to the player and the GM.",
"type": "checkbox",
"value": "/w gm"
},
{
"attribute": "modquery",
"displayname": "Ask for Roll Modifiers?",
"type": "select",
"options": [
"No| ",
"Yes|+(?{Roll Modifier|0}[Modifiers])"
],
"default": "+(?{Roll Modifier|0}[Modifiers])",
"description": "If active, sheet will as for dice modifiers before every roll."
},
{
"attribute": "dice",
"displayname": "Base dice for rolls",
"type": "select",
"options": [
"2d10 (GODSEND)|2d10cf0cs0",
"1d20 (Talislanta, Hellas, Atlantis)|1d20"
],
"default": "2d10cf0cs0",
"description": "Choose what dice is used of the rolls from the sheet. GODSEND Agenda uses '2d10', while some other variations like Talislanta, Hellas & Atlantis use a 'd20'."
}
]
}
+13
View File
@@ -0,0 +1,13 @@
// main sheet code
include src/pug/core.pug
//hidden inputs & datalists
include src/pug/data.pug
//roll templates
include src/pug/rolltemplate.html
//sheetworkers
script(type="sheet/worker")
include src/js/sheetworker.js
+3
View File
@@ -0,0 +1,3 @@
@use 'src/scss/_core.scss';
@use 'src/scss/_rolltemplate.scss';
+16
View File
@@ -0,0 +1,16 @@
const int = score => parseInt(score, 10) || 0;
// tabs
const buttonlist = ["character", "notes", "settings"];
buttonlist.forEach(button => {
on(`clicked:${button}`, function() {
console.log(button + " was pressed");
setAttrs({
sheetTab: button
});
});
});
+196
View File
@@ -0,0 +1,196 @@
<div class="tab-buttons middle center">
<!-- <input type="hidden" class="npctoggle" name="attr_npc" value="0"> -->
<button type="action" name="act_character" >Character</button>
<!-- <button class="npc" type="action" name="act_npc" >NPC</button> -->
<button type="action" name="act_notes" >Notes</button>
<button type="action" name="act_settings" >Settings</button>
</div>
<span class="version">Sheet Version: <span name="attr_version"></span> </span>
<input type="hidden" class="tabstoggle" name="attr_sheetTab" value="character">
<main class="character">
<section class="common">
<div class="columnflex nowrap">
<label>Name</label>
<input name="attr_character_name" title="@{character_name}" type="text">
</div>
<div class="columnflex nowrap">
<label>Species</label>
<input name="attr_species" title="@{species}" type="text">
</div>
<div class="columnflex nowrap">
<label>Archetype</label>
<input name="attr_archetype" title="@{archetype}" type="text">
</div>
<div class="columnflex nowrap">
<label>Renown</label>
<input name="attr_renown" title="@{renown}" type="text">
</div>
</section>
<section class="points rowflex nowrap spaced">
<div class="rowflex nowrap">
<span>Body Points</span><input name="attr_body_points" type="number" value="" class="txtfield">/<input name="attr_body_points_max" type="number" value="" class="txtfield">
</div>
<div class="rowflex nowrap">
<span>Mind Points</span><input name="attr_mind_points" type="number" value="" class="txtfield">/<input name="attr_mind_points_max" type="number" value="" class="txtfield">
</div>
<div class="rowflex nowrap">
<span>Hero Points</span><input name="attr_hero_points" title="@{hero_points}" type="number" value="" class="txtfield">/<input name="attr_hero_points_max" title="@{hero_points_max}" type="number" value="" class="txtfield">
</div>
<div class="rowflex nowrap">
<span>Wealth Rating</span><input name="attr_wealth" title="@{wealth}" type="text" value="" class="txtfield">
</div>
</section>
<section class="attrs columnflex nowrap">
<h2>Attributes</h2>
<div class="rowflex nowrap">
<div>
<span>con</span>
<input name="attr_con" type="number" value="">
<button name="roll_con" value="" type="roll">con</button>
</div>
<div>
<span>dex</span>
<input name="attr_dex" type="number" value="">
<button name="roll_dex" value="" type="roll">dex</button>
</div>
<div>
<span>spd</span>
<input name="attr_spd" type="number" value="">
<button name="roll_spd" value="" type="roll">spd</button>
</div>
<div>
<span>str</span>
<input name="attr_str" type="number" value="">
<button name="roll_str" value="" type="roll">str</button>
</div>
<div>
<span>cr</span>
<input name="attr_cr" type="number" value="">
<button name="roll_cr" value="" type="roll">cr</button>
</div>
</div>
<div class="rowflex nowrap">
<div>
<span>cha</span>
<input name="attr_cha" type="number" value="">
<button name="roll_cha" value="" type="roll">sha</button>
</div>
<div>
<span>int</span>
<input name="attr_int" type="number" value="">
<button name="roll_int" value="" type="roll">int</button>
</div>
<div>
<span>per</span>
<input name="attr_per" type="number" value="">
<button name="roll_per" value="" type="roll">per</button>
</div>
<div>
<span>wil</span>
<input name="attr_wil" type="number" value="">
<button name="roll_wil" value="" type="roll">wil</button>
</div>
<div>
<span>mr</span>
<input name="attr_mr" type="number" value="">
<button name="roll_mr" value="" type="roll">mr</button>
</div>
<div>
</section>
<!--
<section class="disadv">
</section>
-->
<section class="skills columnflex nowrap">
<h2>Skills</h2>
<fieldset class="repeating_skills">
<input name="attr_name" title="@{name}" type="text">
<input name="attr_rank" title="@{rank}" type="number">
<input name="attr_attribute" title="@{attribute}" type="number">
<button name="roll_roll" value="&{template:rolls} {{title=@{name} }} {{subtitle=@{character_name} }} {{result= [[@{dice}+@{rank}+@{attribute}[attribute]@{modquery}]]}}" type="roll" ></button>
</fieldset>
</section>
<section class="notes columnflex nowrap">
<h2>Disadvantages</h2>
<div>
<span>personal <input name="attr_personal" title="@{personal}" type="text"><input name="attr_personaldice" title="@{personaldice}" type="number" value=""></span>
</div>
<div>
<span>internal <input name="attr_internal" title="@{internal}" type="text"><input name="attr_internaldice" title="@{internaldice}" type="number" value=""></span>
</div>
<div>
<span>external <input name="attr_external" title="@{external}" type="text"><input name="attr_externaldice" title="@{externaldice}" type="number" value=""></span>
</div>
<h2>Notes</h2>
<textarea name="attr_notes"></textarea>
</section>
</main>
<!--
<main class="npc gap">
<h1>NPC</h1>
</main>
-->
<main class="notes">
<h1>Notes</h1>
<section>
<h3>powers</h3>
<textarea name="attr_powers"></textarea>
</section>
<section>
<h3>weapons</h3>
<textarea name="attr_weapons"></textarea>
</section>
<section>
<h3>equipment</h3>
<textarea name="attr_equipment"></textarea>
</section>
</main>
<main class="settings">
<h1>Settings</h1>
<div class="section columnflex nowrap">
<span title="@{show_name}">Ask for Roll Modifiers?</span>
<select name="attr_modquery" title="@{modquery}" title="@{modquery}">
<option value="+?{Roll Modifier|0}">Yes</option>
<option value=" ">No</option>
</select>
</div>
<div class="section rowflex nowrap gap">
<span title="@{whisper}">Whisper rolls to GM?</span>
<input name="attr_whisper" title="@{whisper}" type="checkbox" value="/w gm">
</div>
<div class="section rowflex nowrap gap">
<span>Dice type</span>
<input name="attr_dice" title="@{dice}" type="text" value="1d20">
</div>
</main>
+126
View File
@@ -0,0 +1,126 @@
//- PUG variables/lists
- var attrs1 = ["con", "dex", "spd", "str", "cr"];
- var attrs2 = ["sha", "int", "per", "wil", "mr"];
- var attrsall = ["con", "dex", "spd", "str", "cr", "sha", "int", "per", "wil", "mr", "none"];
- var pages = ["character", "notes", "settings"];
//- Mixins
mixin attrsrolls(name)
div
button(name=`roll_${name}` value!=`@{whisper}&{template:rolls} {{title=${name} }} {{subtitle=@{character_name} }} {{result= [[@{dice}+@{${name}}[${name}]@{modquery}]]}}` type="roll")= name
input(name=`attr_${name}` type="number" title=`@{${name}}` value="")
mixin attrselect
select(name="attr_attribute")
each name in attrsall
option(value=`[[@{${name}}]]`)= name
//- end of mixins
//- sheet code
.tab-buttons.spaced.center
//- <input type="hidden" class="npctoggle" name="attr_npc" value="0">
//- each tab in pages
//_ button(type="action" name=`act_${tab}`) tab
//- <button class="npc" type="action" name="act_npc" >NPC</button>
h1 GODSEND AGENDA
div
span Page selection
select(name="attr_sheetTab")
each tab in pages
option(value=`${tab}`)= tab
.version
span Sheet Version:
span(name="attr_version")
input.tabstoggle(type="hidden" name="attr_sheetTab" value="character")
main.character
section.common
.columnflex.nowrap
label Name
input(name="attr_character_name" title="@{character_name}" type="text")
.columnflex.nowrap
label Species
input(name="attr_species" title="@{species}" type="text")
.columnflex.nowrap
label Archetype
input(name="attr_archetype" title="@{archetype}" type="text")
.columnflex.nowrap
label Renown
input(name="attr_renown" title="@{renown}" type="number")
section.points.rowflex.nowrap.spaced
.rowflex.nowrap
span Body Points
input.txtfield(name="attr_body_points" type="number" value="")
span /
input.txtfield(name="attr_body_points_max" type="number" value="")
.rowflex.nowrap
span Mind Points
input.txtfield(name="attr_mind_points" type="number" value="")
span /
input.txtfield(name="attr_mind_points_max" type="number" value="")
.rowflex.nowrap
span Hero Points
input.txtfield(name="attr_hero_points" title="@{hero_points}" type="number" value="")
span /
input.txtfield(name="attr_hero_points_max" title="@{hero_points_max}" type="number" value="")
.rowflex.nowrap
span Wealth Rating
input.txtfield(name="attr_wealth" title="@{wealth}" type="number" value="")
.rowflex.nowrap
span XP
input.txtfield(name="attr_xp" title="@{xp}" type="number" value="")
input.txtfield(name="attr_xp_max" title="@{xp_max}" type="number" value="")
section.attrs.columnflex.nowrap
h2 Attributes
.rowflex.nowrap.middle.spaced
each name in attrs1
+attrsrolls(name)
.rowflex.nowrap.middle.spaced
each name in attrs2
+attrsrolls(name)
section.skills.columnflex.nowrap
h2 Skills
fieldset.repeating_skills
input(name="attr_name" title="@{name}" type="text")
input(name="attr_level" title="@{level}" type="number")
+attrselect
button(name="roll_roll" value!="@{whisper}&{template:rolls} {{title=@{name} }} {{subtitle=@{character_name} }} {{result= [[@{dice}+@{level}[skill level]+@{attribute}[attribute]@{modquery}]]}}" type="roll")
span(name="attr_name")
section.notes.columnflex.nowrap
h2 Disadvantages
div
span
| personal
input(name="attr_personal" title="@{personal}" type="text")
input(name="attr_personaldice" title="@{personaldice}" type="number" value="")
div
span
| internal
input(name="attr_internal" title="@{internal}" type="text")
input(name="attr_internaldice" title="@{internaldice}" type="number" value="")
div
span
| external
input(name="attr_external" title="@{external}" type="text")
input(name="attr_externaldice" title="@{externaldice}" type="number" value="")
h2 Notes
textarea(name="attr_notes")
main.notes
h1 Notes
each option in ["archetype_description", "powers","weapons","equipment"]
section
h3= option
textarea(name=`attr_${option}`)
main.settings
h1 Settings
.section.columnflex.nowrap
span Ask for Roll Modifiers?
select(name="attr_modquery" title="@{modquery}")
option(value="+(?{Roll Modifier|0}[Modifiers])") Yes
option(value=" ") No
.section.rowflex.nowrap.gap
span(title="@{whisper}") Whisper rolls to GM?
input(name="attr_whisper" title="@{whisper}" type="checkbox" value="/w gm")
.section.rowflex.nowrap.gap
span Dice type
select(name="attr_dice" title="@{dice}")
option(value="2d10cf0cs0" selected)= '2d10 (GODSEND Agenda)'
option(value="1d20")= 'd20 (Talislanta, Hellas, Atlantis)'
+11
View File
@@ -0,0 +1,11 @@
//sheet version
input(type="hidden" name="attr_version" value="1.0.0")
input(type="hidden" name="attr_none" value="0")
//- - var = ["lore", "crafting", "dwarf", "halfling"];
//- datalist#skillsgodsend
//- each item in
//- option(value=`${item}`)
+23
View File
@@ -0,0 +1,23 @@
<rolltemplate class="sheet-rolltemplate-rolls">
<div class="sheet-container sheet-color-{{color}}">
<div class="sheet-header">
{{#title}}<div class="sheet-title">{{title}}</div>{{/title}}
<!-- {{#name}}<div class="sheet-name">{{name}}</div>{{/name}} -->
{{#subtitle}}<div class="sheet-subtitle">{{subtitle}}</div>{{/subtitle}}
</div>
<div class="sheet-content">
{{#allprops() title subtitle desc color baseroll}}
<div class="sheet-key">{{key}}</div>
<div class="sheet-value">{{value}}</div>
{{/allprops() title subtitle desc color baseroll}}
{{#rollTotal() baseroll 2}}
<div class="sheet-fail">^{critical-fumble}</div>
{{/rollTotal() baseroll 2}}
{{#rollTotal() baseroll 12}}
<div class="sheet-crit">Critical Success!</div>
{{/rollTotal() baseroll 12}}
{{#desc}}<div class="sheet-desc">{{desc}}</div>{{/desc}}
</div>
</div>
</rolltemplate>
+351
View File
@@ -0,0 +1,351 @@
@import url('https://fonts.googleapis.com/css?family=Zilla+Slab|Anton|Noto+Sans+TC|Bebas+Neue&display=swap');
.charsheet {
* {
font-family: "Noto Sans TC";
--mythic-dark-red: #4a0004;
--mythic-light-red: #ac3f2b;
--mythic-red: #a83521;
}
.version{
color: black;
font-weight: bold;
float: right;
margin: -31px 13px;
}
.capital,
:not(textarea){
font-family: "Bebas Neue";
}
/* ---------- Colors ---------- */
label,
.label,
span {
color: var(--mythic-dark-red);
}
/* --------- Text ------------- */
h1, h2, h3{
text-align: center;
}
span.bold{
font-weight: 800;
font-size: medium;
}
div.border-label label {
border-style: solid;
max-width: 80%;
border-radius: 13px;
}
.small-font{
font-size: xx-small;
height:18px;
}
/* --------- Inputs ------------- */
input[type="text"],
input[type="number"]{
background-color: transparent;
border-style: none none solid none;
border-color: var(--mythic-light-red);
border-radius: 0px;
}
input[type="number"]{
border: 1px solid var(--mythic-light-red);
text-align: center;
}
input[type="number"].bubble {
border: 2px solid var(--mythic-light-red);
border-radius: 13px;
}
input[type="checkbox"].checkbox {
border: solid var(--mythic-light-red);
border-radius: 0px;
}
/* -----Hides up/down buttons on numberfields that don't need them ---*/
input[type="number"].ref {
border-style: none none solid none;
border-color: black;
border-radius: 0px;
}
input[type=number].ref::-webkit-inner-spin-button,
input[type=number].ref::-webkit-outer-spin-button,
input[type=number].txtfield::-webkit-inner-spin-button,
input[type=number].txtfield::-webkit-outer-spin-button {
-webkit-appearance: none;
margin: 0;
}
input[type=number].ref,
input[type=number].txtfield {
-moz-appearance: textfield;
}
textarea {
width: 90%;
height: 85%;
background-color: transparent;
}
/* highlights empty fields with Light grayish red */
textarea:placeholder-shown,
input[type="text"]:placeholder-shown,
input[type="number"]:placeholder-shown{
background-color: #EAC9D1;
}
/* higlight selected input */
textarea:focus,
input[type="text"]:focus,
input[type="number"]:focus{
background-color: #ccc;
}
/* ------- Buttons ---------- */
/* text buttons with dice icon removed */
button[type="roll"].txt-btn:before,
button[type="roll"].skills:before{
content: ' ';
}
button[type=roll].d6-dice::before { /*new die changes die roller to d6*/
font-family: 'dicefontd6',arial;
content: 'F ';
color: white;
}
button[type=roll].sendtext::before { /*new die changes die roller to d6*/
font-family: 'Pictos';
content: 'w ';
color: black;
}
button[type="roll"].txt-btn{
height: 22px;
border: 2px solid black;
background-color: transparent;
margin-left: 5px;
font-weight: bold;
padding: 2px 5px 4px 5px;
text-shadow: none;
}
button[type="roll"].txt-btn:hover{
background-color: #d9d9d9;
border-radius: 10px;
text-shadow: none;
}
button[type="roll"].red{
background-color: #a83521;
background-position: 0 -30px;
color: white;
}
button[type="roll"].red:hover{
background-color: #a83521;
background-position: 0 -30px;
color: white;
font-size: 1.7em;
}
/*------------------------------------*\
#SECTIONS
\*------------------------------------*/
/* page selection */
div.tab-buttons{
display: flex;
gap: 30px;
border: 2px black;
border-style: none none solid none;
button{
font-size: 1.5em;
}
select{
width: 90px;
}
}
/* --------------- Universal Section ------------------- */
.border{
border-style: solid;
border-radius: 13px;
}
:is(div.section section) hr{
display: block;
margin-top: 0.5em;
margin-bottom: 0.5em;
margin-left: auto;
margin-right: auto;
border-style: solid;
border-width: 2px;
border-color: black;
}
.section,
section {
display: flex;
padding: 5px;
border: none;
background: white;
opacity: 0.9;
min-height: 90%;
max-width: 750px;
}
.flex-row {
display: flex;
flex-flow: row wrap;
}
.flex-col{
display: flex;
flex-flow: column;
}
.flex-center {
place-items: center;
}
.gap{
gap: 10px;
}
.columnflex {
display: flex;
flex-direction: column;
}
.rowflex {
display: flex;
flex-direction: row;
}
.wrap {
flex-wrap: wrap;
}
.nowrap {
flex-wrap: nowrap;
}
.center {
align-items: center;
}
.middle {
justify-content: center;
}
.spaced {
justify-content: space-evenly;
}
label.title{
text-transform: capitalize;
max-width: 150px;
text-align: center;
font-size: 25px;
}
div.halfsection{
max-width: 400px;
}
/* Core layout of each page */
main.character {
display: grid;
grid-gap: 4px;
grid-template-columns: 3fr 1fr;
grid-template-rows: 70px 40px 140px auto;
grid-template-areas:"common common"
"points points"
"attrs attrs"
"skills notes";
width: 800px;
height: 1300px;
position: relative;
/* Section specific */
section.common{
grid-area: common;
}
section.points{
grid-area: points;
}
section.disadv{
grid-area: disadv;
}
section.skills{
grid-area: skills;
}
section.notes{
grid-area: notes;
input {
background-color: #ccc;
}
}
}
main.notes {
display: grid;
width: 750px;
position: relative;
}
main.settings {
display: grid;
width: 750px;
position: relative;
}
/*------------------------------------*\
#PAGE LAYOUT/ PAGE BUTTONS
\*------------------------------------*/
/* -------------- page buttons ------------- */
main.character,
main.notes,
main.settings {
display: none;
}
/* show the selected page */
input.tabstoggle[value="character"] ~ main.character,
input.tabstoggle[value="notes"] ~ main.notes,
input.tabstoggle[value="settings"] ~ main.settings {
display: grid;
}
}
+103
View File
@@ -0,0 +1,103 @@
/*------------------------------------*\
#ROLL TEMPLATES
\*------------------------------------*/
/* Smaller margins - remove these if you want the huge default left margin */
.withoutavatars .sheet-rolltemplate-rolls {
margin-left: -7px;
}
.sheet-rolltemplate-rolls {
margin-left: -37px;
font-family: "Yanone Kaffeesatz";
.sheet-container {
border: 3px solid black;
border-radius: 3px;
}
/* Header formatting - title and subtitle */
.sheet-header {
background-color: var(--header-bg-color, #a83521);
color: var(--header-text-color, #FFF);
text-align: left;
text-transform: capitalize;
padding: 5px;
border-bottom: 2px solid black;
}
.sheet-title {
font-size: 1.4em;
font-weight: bold;
}
.sheet-subtitle {
font-size: 1em;
}
.sheet-container {
--header-bg-color: #a83521;
--header-text-color: #FFF;
}
/* alt template colors */
.sheet-container.sheet-color-green {
--header-bg-color: #008000;
}
.sheet-container.sheet-color-blue {
--header-bg-color: #0000e0;
}
.sheet-container.sheet-color-gold {
--header-bg-color: #ffdd1f;
--header-text-color: #000;
}
.sheet-container.sheet-color-purple {
--header-bg-color: #c200c2;
}
.sheet-container.sheet-color-black {
--header-bg-color: #000;
}
.sheet-container.sheet-color-white {
--header-bg-color: #FFF;
--header-text-color: #000;
}
/* Allprops part */
.sheet-content {
display: grid;
background: #FFF;
grid-template-columns: auto auto;
line-height:1.4em;
}
.sheet-content > div {
padding: 5px;
}
.sheet-content .sheet-key {
font-weight: bold;
padding-right: 10px;
text-align: right;
}
/* Make even-numbered rows grey */
.sheet-content :nth-child(4n+3),
.sheet-content :nth-child(4n) {
background:#EEE;
}
/* Description field */
.sheet-desc, .sheet-crit, .sheet-fail {
grid-column: span 2;
padding: 5px;
text-align: center;
}
.sheet-crit, .sheet-fail{
font-weight: bold;
font-size: 1.3em;
}
.sheet-crit {
color: green;
}
.sheet-fail {
color: red;
}
}