Reboot The Future new sheet

This commit is contained in:
SavageSpiel
2023-04-23 19:07:12 +01:00
parent d0e7c4cfb3
commit 879ac0ee2f
4 changed files with 1222 additions and 0 deletions
+596
View File
@@ -0,0 +1,596 @@
/* Set the min-width so that when the window is resized the look will stay consistant */
.charsheet {
background-image: linear-gradient(135deg, #293749, white, #293749);
background-size: cover;
width:825px;
min-width:825px;
max-width:825px;
min-height:400px;
margin:0;
font-family: Consolas, monospace;
}
/* Universal styling applied to all elements of these types */
.charsheet h1 {
font-size: 4em;
margin-bottom: 10px;
margin-top:5px;
text-align: center;
color:#EE0009;
text-shadow: 0px 0px 8px #FFF;
}
.charsheet h2 {
font-size: 2em;
margin-bottom: 10px;
text-align: center;
width:100%;
background: #293749;
color:white;
}
.charsheet h3 {
margin-bottom: 10px;
text-align: center;
text-shadow: 0px 0px 5px #FFF;
}
.charsheet input, .charsheet textarea, .charsheet select {
background-color:#ced7e3;
border-radius:0;
border:1px solid black;
}
.charsheet button {
border-radius:0;
border:1px solid black;
/*background-color: #eff2f6;*/
background-image: linear-gradient(top, #ffffff, #ced7e3);
background-image: -webkit-linear-gradient(top, #ffffff, #ced7e3);
}
.charsheet button:hover {
border-radius:0;
border:1px solid black;
background-color: #adbdd1;
}
.charsheet p {
font-family: Consolas, monospace;
}
/* LAYOUT */
.charsheet .sheet-character {
display: grid;
grid-template-columns: 133px 133px 133px 133px 133px 133px;
grid-template-rows: auto;
gap: 5px;
grid-template-areas:
"basic basic basic drive drive drive"
"attributes attributes avatar avatar experience experience"
"physical physical mental mental social social"
"explain explain explain explain explain explain"
"unspent unspent cap cap totalskill totalskill"
"traits traits traits other other other"
}
/* BASIC INFO */
.charsheet .sheet-character label {
color:#333;
}
.sheet-basicinfo-left {
grid-area: basic;
}
.sheet-basicinfo-right {
grid-area: drive;
}
.charsheet .sheet-character .basicinfo label {
display: inline-block;
width: 90px;
color:white;
vertical-align:top;
margin-top:3px;
}
.basicinfo input {
display: inline-block;
width: 290px;
}
.basicinfo select {
display: inline-block;
width: 290px;
}
.basicinfo textarea {
display: inline-block;
width: 280px;
height:70px;
}
.charsheet input[type=checkbox], .charsheet input[type=radio]{
opacity: 0;
margin-right: -1.5em;
margin-left:7px;
height: 1em;
width: 1em;
}
.charsheet input[type=checkbox] + span:before, .charsheet input[type=radio] + span:before{
content:"✖";
padding:0 0.2em;
border: 1px solid black;
height: 1em;
width: 2em;
color: #00000000;
font-size: 1.2em;
background: #ced7e3;
border-radius: 50%;
}
.charsheet input[type=checkbox]:checked + span:before, .charsheet input[type=radio]:checked + span:before{
color: #293749;
}
/* ATTRIBUTES */
.sheet-attributes {
grid-area:attributes;
}
.sheet-attributes button[type=roll].sheet-2d6-dice::before {
font-family: 'dicefontd6';
content: 'ff ';
}
.sheet-attributes button[type=roll].sheet-d6-dice::before {
font-family: 'dicefontd6';
content: 'f ';
}
.sheet-attributes h4 {
display: inline-block;
text-align: left;
}
.sheet-attributes h4.sheet-first {
margin-left: 160px;
margin-right: 15px;
}
.sheet-attributes input {
display: inline-block;
}
.sheet-attributes label {
display: inline-block;
width: 150px;
}
.sheet-attributes label.sheet-driveused {
display: inline-block;
width: 202px;
}
.sheet-attributes label.sheet-damagebonus {
display: inline-block;
width: 203px;
}
/* AVATAR */
.sheet-avatar {
grid-area:avatar;
}
.sheet-avatar input {
display: inline-block;
width: 150px;
}
.sheet-avatar label {
display: inline-block;
width: 100px;
}
.sheet-avatar span {
display: inline-block;
font-weight: bold;
font-size: 1.2em;
}
.sheet-avatar button[type=roll].sheet-d6-dice::before {
font-family: 'dicefontd6';
content: 'f ';
}
/* Experience */
.sheet-experience {
grid-area:experience;
}
.sheet-experience input {
display: inline-block;
}
.sheet-experience label {
display: inline-block;
width: 203px;
}
/* SKILLS */
.sheet-physical {
grid-area: physical;
}
.sheet-mental {
grid-area: mental;
}
.sheet-social {
grid-area: social;
}
.sheet-skills label {
margin-left:167px;
margin-bottom:0;
margin-top:-5px;
font-weight: bold;
font-size:1em;
max-width: 105px;
}
.sheet-skills input {
display: inline-block;
width: 105px;
border:1px solid black;
border-bottom:0;
}
.sheet-skills input[type="number"]{
text-align: center;
width: 36px !important;
border-right:0;
}
.charsheet .sheet-skills button[type=roll].sheet-skill-button {
width:120px;
margin:0;
height:22px;
text-align:left;
border:1px solid black;
border-bottom:0;
border-right:0;
border-radius:0;
}
.sheet-skills button[type=roll].sheet-skill-button::before {
content: '';
}
p.sheet-skill-explain {
grid-area:explain;
margin-top:10px;
}
.sheet-unspent {
grid-area: unspent;
margin-bottom:10px;
}
.sheet-cap {
grid-area: cap;
margin-bottom:10px;
}
.sheet-totalskill {
grid-area: totalskill;
margin-bottom:10px;
}
.sheet-skillpoints label {
display: inline-block;
width: 180px;
}
.sheet-skillpoints input {
display: inline-block;
}
img {
max-height: 100px;
}
textarea {
resize: vertical;
}
/* TRAITS */
.sheet-traits {
grid-area:traits;
}
.sheet-traits input {
display: inline-block;
width: 362px;
font-weight:bold;
}
.sheet-traits input + input[type=number] {
border-left:0;
}
.sheet-traits textarea {
height:100px;
width:398px;
border-top:0;
}
/* OTHER STUFF */
.sheet-other {
grid-area: other;
display: flex;
flex-direction: column;
}
.sheet-other textarea {
width:400px;
}
/* COMBAT */
.sheet-equipment .itemrow {
margin-bottom:5px;
}
.sheet-equipment label {
display: inline-block;
width: 200px;
}
.sheet-equipment input {
display: inline-block;
width: 120px;
border-right:0;
}
.sheet-equipment select {
display: inline-block;
width: 60px;
vertical-align:middle;
border-right:0;
margin-bottom:0;
}
.charsheet .sheet-equipment button[type="roll"] {
margin-right:0;
}
.sheet-equipment button[type=roll].sheet-2d6-dice::before {
font-family: 'dicefontd6';
content: 'ff ';
}
.sheet-equipment button[type=roll].sheet-d6-dice::before {
font-family: 'dicefontd6';
content: 'f ';
}
.sheet-equipment input.gearitem {
display: inline-block;
width: 100%;
border-right:1px solid black;
}
/* GANG AREA */
.sheet-gang textarea {
height:110px;
width:720px;
}
.charsheet .sheet-gang label {
color:#333;
}
.sheet-gang-relationships h3 {
padding-right:14px;
}
.charsheet .repcontainer[data-groupname="repeating_assets"] > .repitem {
display: inline-block;
margin-right:10px;
}
.charsheet .repcontainer[data-groupname="repeating_assets"] > .repitem input{
width:360px;
}
.charsheet .repcontainer[data-groupname="repeating_assets"] > .repitem textarea{
width:350px;
display:block;
}
.sheet-gang-relationships h3.sheet-factionname, .sheet-gang-relationships h3.sheet-factionmodifiers, .sheet-gang-relationships textarea {
display:inline-block;
width:40%;
}
.sheet-gang-relationships h3.sheet-factiontotal {
display:inline-block;
}
.sheet-gang-relationships input {
display:inline-block;
vertical-align:top !important;
}
.sheet-gang-relationships textarea {
height:60px;
}
/* DOMAIN AREA */
/* LAYOUT */
.charsheet .sheet-domain {
display: grid;
grid-template-columns: 133px 133px 133px 133px 133px 133px;
grid-template-rows: auto;
gap: 5px;
grid-template-areas:
"header header header header header header"
"game game game safety safety safety"
"system system system system2 system2 system2"
}
.sheet-domain .header {
grid-area:header;
}
.charsheet .sheet-domain label {
color:#333;
}
.sheet-domain .gamedetails {
grid-area:game;
}
.sheet-domain .safety {
grid-area:safety;
}
.sheet-domain .systemdetails {
grid-area:system;
}
.sheet-domain .othersystemdetails {
grid-area:system2;
}
.sheet-domain label {
display: inline-block;
vertical-align:top;
margin-top:3px;
}
.sheet-domain input {
display: inline-block;
width: 290px;
}
.sheet-domain textarea {
width:391px;
}
.sheet-domain textarea.small {
height:54px;
}
.sheet-domain textarea.large {
height:234px;
}
.sheet-domain h3 {
text-align:left;
}
.charsheet .sheet-mods label {
color:#333;
}
/* TABS */
/*Configure the tab buttons*/
.charsheet .sheet-character,
.charsheet .sheet-gang ,
.charsheet .sheet-domain ,
.charsheet .sheet-mods {
display: none;
}
/* show the selected tab */
.charsheet .sheet-tabstoggle[value="character"] ~ div.sheet-character,
.charsheet .sheet-tabstoggle[value="gang"] ~ div.sheet-gang ,
.charsheet .sheet-tabstoggle[value="domain"] ~ div.sheet-domain ,
.charsheet .sheet-tabstoggle[value="mods"] ~ div.sheet-mods {
display: grid;
}
/* ROLL TEMPLATE */
.sheet-rolltemplate-future {
margin-left: -37px;
}
.withoutavatars .sheet-rolltemplate-future {
margin-left: -7px;
}
.sheet-rolltemplate-future .sheet-container {
border: 1px solid;
border-color: #293749;
}
/* Header formatting - title and subtitle */
.sheet-rolltemplate-future .sheet-header {
background-color: #293749;
text-align: left;
color: white;
padding: 5px;
}
.sheet-rolltemplate-future .sheet-title {
font-size:1.1em;
}
.sheet-rolltemplate-future .sheet-subtitle {
font-size:.9em;
}
/* Allprops part */
.sheet-rolltemplate-future .sheet-content {
display: grid;
background: #FFF;
/* Header formatting - modify the column layout below */
grid-template-columns: auto auto;
/* Line height to match default roll template */
line-height:1.4em;
}
.sheet-rolltemplate-future .sheet-content > div {
padding: 5px;
}
/* Left column */
.sheet-rolltemplate-future .sheet-content .sheet-key {
font-weight: bold;
padding-right: 10px;
text-align: right;
}
/* Empty rule, use this if you want to change the right column
.sheet-rolltemplate-future .sheet-value {
}
*/
/* Make even-numbered rows grey */
.sheet-rolltemplate-future .sheet-content :nth-child(4n+3),
.sheet-rolltemplate-future .sheet-content :nth-child(4n) {
background:#EEE;
}
/* Desc field */
.sheet-rolltemplate-future .sheet-desc {
grid-column: span 2;
padding: 5px;
text-align: center;
}
/* set the inline roll result so it doesn't look awful in dark mode */
.sheet-rolltemplate-future .sheet-container .inlinerollresult {
background-color:#ced7e3;
border: 1px solid #333;
color:black;
}
+617
View File
@@ -0,0 +1,617 @@
<input type="hidden" class="sheet-tabstoggle" name="attr_sheetTab" value="character" />
<div>
<button type="action" name="act_character" >Character</button>
<button type="action" name="act_gang" >Gang</button>
<button type="action" name="act_domain" >Domain</button>
<button type="action" name="act_mods" >Mods</button>
</div>
<h1>Reboot The Future</h1>
<h3>Cyberpunk Roleplaying in the 23rd Century</h3>
<div class="sheet-character">
<div class="sheet-basicinfo-left basicinfo">
<div class="inforow"><label>Full Name:</label><input type="text" name="attr_character_name" /></div>
<div class="inforow"><label>Origin:</label><input type="text" name="attr_origin" /></div>
<div class="inforow"><label>Concept:</label><input type="text" name="attr_concept" /></div>
<div class="inforow"><label>Drive:</label><input type="text" name="attr_drive" /></div>
</div>
<div class="sheet-basicinfo-right basicinfo">
<div class="inforow"><label>Handle:</label><input type="text" name="attr_character_handle" /></div>
<div class="inforow"><label>Flashbacks:</label><input type="checkbox" name="attr_flashback1"></input><span></span>&nbsp;&nbsp;<input type="checkbox" name="attr_flashback2"></input><span></span>&nbsp;&nbsp;<input type="checkbox" name="attr_flashback3"></input><span></span></div>
<div class="inforow"><label>Style:</label><input type="text" name="attr_style" /></div>
<div class="inforow"><label>Focus:</label><select name="attr_focus">
<option value="Commerce">Commerce</option>
<option value="Determined">Determined</option>
<option value="Hacker">Hacker</option>
<option value="Tough">Tough</option>
</select></div>
</div>
<div class="sheet-attributes">
<h2>Attributes</h2>
<h4 class="sheet-first">Current</h4><h4>Max</h4><br />
<label>Endurance</label><input type="number" name="attr_endurance" />/<input type="number" name="attr_endurance_max" /><br />
<label>Will</label><input type="number" name="attr_will" />/<input type="number" name="attr_will_max" /><br />
<label class="sheet-driveused">Drive used this game?</label><input type="checkbox" name="attr_driveused"></input><span></span><button class="sheet-skill-button sheet-d6-dice" type='roll' name='roll_drive' value='&{template:future} {{title=@{character_name}}} {{Will points recovered=[[1d6]]}}'></button><br />
<label class="sheet-damagebonus">Melee damage bonus</label><input type="number" name="attr_meleebonus" /><br />
<label class="sheet-damagebonus">Shoot damage bonus</label><input type="number" name="attr_shootbonus" />
<label class="sheet-damagebonus">Initiative bonus</label><input type="number" name="attr_initiativebonus" />
<button class="sheet-2d6-dice" type='roll' name='roll_initiative' value='&{template:future} {{title=@{character_name}}} {{Initiative=[[2d6 + @{awareness} + @{initiativebonus} + ?{Modifier|0}]]}}'>Roll Initiative</button>
</div>
<div class="sheet-avatar">
<h2>Avatar</h2>
<div class="inforow"><label>Name:</label><input type="text" name="attr_avatar_name" /></div>
<div class="inforow"><label>Style:</label><input type="text" name="attr_avatar_style" /></div>
<div class="inforow"><label style="width:204px;">System Integrity:</label><input type="number" name="attr_avatar_systemintegrity" /></div>
<div class="inforow"><label style="width:126px;">Damage:</label><button class="sheet-d6-dice" type='roll' name='roll_avatar_damage' value='&{template:future} {{title=@{character_name}}} {{Avatar Damage=[[1d6 + @{avatar_damage} + ?{Modifier|0}]]}}'></button><span>1d6 +&nbsp;</span><input type="number" name="attr_avatar_damage" /></div>
<div class="inforow"><label style="width:126px;">Protection:</label><button class="sheet-d6-dice" type='roll' name='roll_avatar_protection' value='&{template:future} {{title=@{character_name}}} {{Avatar Protection=[[1d6 + @{avatar_protection} + ?{Modifier|0}]]}}'></button><span>1d6 +&nbsp;</span><input type="number" name="attr_avatar_protection" /></div>
</div>
<div class="sheet-experience">
<h2>Experience</h2>
<label>Experience</label><input type="number" name="attr_experience" />
<br />
<br />
<label>Total advancements</label><input type="number" name="attr_totaladvancements" /><br />
<label>Unspent advancements</label><input type="number" name="attr_advancements" /><br />
<p class="sheet-skill-explain">Spend 1 advancement to buy a trait point, increase your skill cap, or buy a gang asset.</p>
<label>Additional gang assets</label><input type="number" name="attr_gangassets" />
<label>Added trait points</label><input type="number" name="attr_addtraitpoints" />
<label>Increased skill cap</label><input type="number" name="attr_addskillcap" />
</div>
<div class="sheet-skills sheet-physical">
<h2>Physical Skills</h2>
<label>Specialities</label>
<button class="sheet-skill-button" type='roll' name='roll_athletics' value='&{template:future} {{title=@{character_name}}} {{Athletics=[[2d6 + @{athletics} + ?{Modifier|0}]]}}'>Athletics</button><input type="number" name='attr_athletics' min="0"></input><input type="text" name='attr_athleticsspec'></input>
<br />
<button class="sheet-skill-button" type='roll' name='roll_awareness' value='&{template:future} {{title=@{character_name}}} {{Awareness=[[2d6 + @{awareness} + ?{Modifier|0}]]}}'>Awareness</button><input type="number" name='attr_awareness' min="0"></input><input type="text" name='attr_awarenessspec'></input>
<br />
<button class="sheet-skill-button" type='roll' name='roll_melee' value='&{template:future} {{title=@{character_name}}} {{Melee=[[2d6 + @{melee} + ?{Modifier|0}]]}}'>Melee</button><input type="number" name='attr_melee' min="0"></input><input type="text" name='attr_meleespec'></input>
<br />
<button class="sheet-skill-button" type='roll' name='roll_shoot' value='&{template:future} {{title=@{character_name}}} {{Shoot=[[2d6 + @{shoot} + ?{Modifier|0}]]}}'>Shoot</button><input type="number" name='attr_shoot' min="0"></input><input type="text" name='attr_shootspec'></input>
<br />
<button class="sheet-skill-button" type='roll' name='roll_stealth' value='&{template:future} {{title=@{character_name}}} {{Stealth=[[2d6 + @{stealth} + ?{Modifier|0}]]}}'>Stealth</button><input type="number" name='attr_stealth' min="0"></input><input type="text" name='attr_stealthspec'></input>
<br />
<button class="sheet-skill-button" type='roll' name='roll_survival' value='&{template:future} {{title=@{character_name}}} {{Survival=[[2d6 + @{survival} + ?{Modifier|0}]]}}'>Survival</button><input type="number" name='attr_survival' min="0"></input><input type="text" name='attr_survivalspec'></input>
<br />
<button class="sheet-skill-button" style="border-bottom:1px solid black;" type='roll' name='roll_vehicles' value='&{template:future} {{title=@{character_name}}} {{Vehicles=[[2d6 + @{vehicles} + ?{Modifier|0}]]}}'>Vehicles</button><input type="number" name='attr_vehicles' min="0" style="border-bottom:1px solid black;"></input><input type="text" name='attr_vehiclesspec' style="border-bottom:1px solid black;"></input>
</div>
<div class="sheet-skills sheet-mental">
<h2>Mental Skills</h2>
<label>Specialities</label>
<button class="sheet-skill-button" type='roll' name='roll_art' value='&{template:future} {{title=@{character_name}}} {{Art=[[2d6 + @{art} + ?{Modifier|0}]]}}'>Art</button><input type="number" name='attr_art' min="0"></input><input type="text" name='attr_artspec'></input>
<br />
<button class="sheet-skill-button" type='roll' name='roll_business' value='&{template:future} {{title=@{character_name}}} {{Business=[[2d6 + @{business} + ?{Modifier|0}]]}}'>Business</button><input type="number" name='attr_business' min="0"></input><input type="text" name='attr_businessspec'></input>
<br />
<button class="sheet-skill-button" type='roll' name='roll_corporatelaw' value='&{template:future} {{title=@{character_name}}} {{Corporate Law=[[2d6 + @{corporatelaw} + ?{Modifier|0}]]}}'>Corporate Law</button><input type="number" name='attr_corporatelaw' min="0"></input><input type="text" name='attr_corporatelawspec'></input>
<br />
<button class="sheet-skill-button" type='roll' name='roll_education' value='&{template:future} {{title=@{character_name}}} {{Education=[[2d6 + @{education} + ?{Modifier|0}]]}}'>Education</button><input type="number" name='attr_education' min="0"></input><input type="text" name='attr_educationspec'></input>
<br />
<button class="sheet-skill-button" type='roll' name='roll_interface' value='&{template:future} {{title=@{character_name}}} {{Interface=[[2d6 + @{interfaceX} + ?{Modifier|0}]]}}'>Interface</button><input type="number" name='attr_interfaceX' min="0"></input><input type="text" name='attr_interfacespec'></input>
<br />
<button class="sheet-skill-button" type='roll' name='roll_medicine' value='&{template:future} {{title=@{character_name}}} {{Medicine=[[2d6 + @{medicine} + ?{Modifier|0}]]}}'>Medicine</button><input type="number" name='attr_medicine' min="0"></input><input type="text" name='attr_medicinespec'></input>
<br />
<button class="sheet-skill-button" type='roll' name='roll_remotes' value='&{template:future} {{title=@{character_name}}} {{Remotes=[[2d6 + @{remotes} + ?{Modifier|0}]]}}'>Remotes</button><input type="number" name='attr_remotes' min="0"></input><input type="text" name='attr_remotesspec'></input>
<br />
<button class="sheet-skill-button" type='roll' name='roll_testattack' value='&{template:future} {{title=@{character_name}}} {{Science=[[2d6 + @{science} + ?{Modifier|0}]]}}'>Science</button><input type="number" name='attr_science' min="0"></input><input type="text" name='attr_sciencespec'></input>
<br />
<button class="sheet-skill-button" style="border-bottom:1px solid black;" type='roll' name='roll_testattack' value='&{template:future} {{title=@{character_name}}} {{Technology=[[2d6 + @{technology} + ?{Modifier|0}]]}}'>Technology</button><input type="number" name='attr_technology' min="0" style="border-bottom:1px solid black;"></input><input type="text" name='attr_technologyspec' style="border-bottom:1px solid black;"></input>
</div>
<div class="sheet-skills sheet-social">
<h2>Social Skills</h2>
<label>Specialities</label>
<button class="sheet-skill-button" type='roll' name='roll_charm' value='&{template:future} {{title=@{character_name}}} {{Charm=[[2d6 + @{charm} + ?{Modifier|0}]]}}'>Charm</button><input type="number" name='attr_charm' min="0"></input><input type="text" name='attr_charmspec'></input>
<br />
<button class="sheet-skill-button" type='roll' name='roll_conviction' value='&{template:future} {{title=@{character_name}}} {{Conviction=[[2d6 + @{conviction} + ?{Modifier|0}]]}}'>Conviction</button><input type="number" name='attr_conviction' min="0"></input><input type="text" name='attr_convictionspec'></input>
<br />
<button class="sheet-skill-button" type='roll' name='roll_empathy' value='&{template:future} {{title=@{character_name}}} {{Empathy=[[2d6 + @{empathy} + ?{Modifier|0}]]}}'>Empathy</button><input type="number" name='attr_empathy' min="0"></input><input type="text" name='attr_empathyspec'></input>
<br />
<button class="sheet-skill-button" type='roll' name='roll_highsociety' value='&{template:future} {{title=@{character_name}}} {{High Society=[[2d6 + @{highsociety} + ?{Modifier|0}]]}}'>High Society</button><input type="number" name='attr_highsociety' min="0"></input><input type="text" name='attr_highsocietyspec'></input>
<br />
<button class="sheet-skill-button" type='roll' name='roll_rhetoric' value='&{template:future} {{title=@{character_name}}} {{Rhetoric=[[2d6 + @{rhetoric} + ?{Modifier|0}]]}}'>Rhetoric</button><input type="number" name='attr_rhetoric' min="0"></input><input type="text" name='attr_rhetoricspec'></input>
<br />
<button class="sheet-skill-button" type='roll' name='roll_streetwise' value='&{template:future} {{title=@{character_name}}} {{Streetwise=[[2d6 + @{streetwise} + ?{Modifier|0}]]}}'>Streetwise</button><input type="number" name='attr_streetwise' min="0"></input><input type="text" name='attr_streetwisespec'></input>
<br />
<button class="sheet-skill-button" style="border-bottom:1px solid black;" type='roll' name='roll_taunt' value='&{template:future} {{title=@{character_name}}} {{Taunt=[[2d6 + @{taunt} + ?{Modifier|0}]]}}'>Taunt</button><input type="number" name='attr_taunt' min="0" style="border-bottom:1px solid black;"></input><input type="text" name='attr_tauntspec' style="border-bottom:1px solid black;"></input>
</div>
<p class="sheet-skill-explain">Start with 17 Skill points. If you have a skill at 3 or higher you may spend 1 point for a Speciality.</p>
<div class="sheet-skillpoints sheet-unspent">
<label>Unspent skill points </label><input type="number" name='attr_skillpoints'></input>
</div>
<div class="sheet-skillpoints sheet-cap">
<label>Skill cap </label><input type="number" name='attr_skillcap'></input>
</div>
<div class="sheet-skillpoints sheet-totalskill">
<label>Total skill points </label><input type="number" name='attr_totalskillpoints'></input>
</div>
<div class="sheet-traits">
<h2>Traits</h2>
<fieldset class="repeating_traits">
<input type="text" name="attr_traitname" /><input type="number" name="attr_traitcost" min="0" />
<textarea name="attr_traitdescription" />
</fieldset>
<h2 style="margin-top:20px;">Limitations</h2>
<fieldset class="repeating_limitations">
<input type="text" name="attr_limitationname" /><input type="number" name="attr_limitationcost" min="0" />
<textarea name="attr_limitationdescription" />
</fieldset>
<p class="sheet-skill-explain">Start with 5 Trait points. You can gain extra trait points from Limitations.</p>
<div class="sheet-skillpoints">
<div class="sheet-col">
<label>Unspent trait points </label><input type="number" name='attr_traitpoints'></input>
</div>
</div>
</div>
<!-- Attributes and combat -->
<div class="sheet-other">
<div class="sheet-equipment">
<h2>Equipment</h2>
<label>Weapons</label>
<div class="inforow"><div style="display:inline-block;width:120px;">Weapon</div><div style="display:inline-block;width:120px;">Traits</div><div style="display:inline-block;width:50px;">Damage</div><div style="display:inline-block;width:60px;">Type</div><div style="display:inline-block;width:30px;">1d6</div><div style="display:inline-block;width:25px;">2d6</div></div>
<div class="itemrow"><input type="text" disabled="true" value="Unarmed" /><input type="text" disabled="true" value="" /><input type="number" value="0" disabled="true" /><select disabled="true" style="border-right:1px solid black;">
<option value="@{meleebonus}">Melee</option>
</select><button class="sheet-d6-dice" type='roll' name='roll_unarmed' value='&{template:future} {{title=@{character_name}}} {{Weapon=Unarmed}} {{Damage=[[1d6 + @{meleebonus} + ?{Modifier|0}]]}}'></button><button class="sheet-2d6-dice" type='roll' name='roll_unarmed' value='&{template:future} {{title=@{character_name}}} {{Weapon=Unarmed}} {{Damage=[[2d6 + @{meleebonus} + ?{Modifier|0}]]}}'></button></div>
<fieldset class="repeating_weapons">
<div class="itemrow"><input type="text" name="attr_weaponname" /><input type="text" name="attr_weapontraits" /><input type="number" name="attr_weapondamagebonus" /><select name="attr_weapontype" style="border-right:1px solid black;">
<option value="@{meleebonus}">Melee</option>
<option value="@{shootbonus}">Shoot</option>
<option value="0">Other</option>
</select><button class="sheet-d6-dice" type='roll' name='roll_weapon' value='&{template:future} {{title=@{character_name}}} {{Weapon=@{weaponname}}} {{Damage=[[1d6 + @{weapondamagebonus} + @{weapontype} + ?{Modifier|0}]]}}'></button><button class="sheet-2d6-dice" type='roll' name='roll_weapon' value='&{template:future} {{title=@{character_name}}} {{Weapon=@{weaponname}}} {{Damage=[[2d6 + @{weapondamagebonus} + @{weapontype} + ?{Modifier|0}]]}}'></button></div>
</fieldset>
<hr />
<label>Armour</label>
<div class="inforow"><div style="display:inline-block;width:200px;">Armour</div><div style="display:inline-block;width:109px;">Traits</div><div style="display:inline-block;width:78px;">Protection</div><div style="display:inline-block;width:20px;">1d6</div></div>
<fieldset class="repeating_armour">
<div class="itemrow" style="margin-bottom:5px;"><input type="text" name="attr_armourname" style="width:200px;" /><input type="text" name="attr_weapontraits" /><input type="number" name="attr_armourbonus" style="border-right:1px solid black;" />
<button class="sheet-d6-dice" type='roll' name='roll_weapon' value='&{template:future} {{title=@{character_name}}} {{Weapon=@{weaponname}}} {{Damage=[[1d6 + @{weapondamagebonus} + @{weapontype} + ?{Modifier|0}]]}}' style="margin-left: 14px;"></button></div>
</fieldset>
<hr />
<label>Gear</label><br />
<fieldset class="repeating_gear">
<input type="text" name="attr_gear" class="gearitem" />
</fieldset>
</div>
<h2 style="margin-top:10px;">Circles</h2>
<textarea class="attr_circles" />
<h2>Contacts</h2>
<textarea class="attr_contacts" />
</div>
</div>
<!-- GANG SHEET -->
<div class="sheet-gang">
<h2>Gang Record</h2>
<label>Name:</label><textarea name="attr_gang_name" /><br />
<label>Concept:</label><textarea name="attr_gang_concept" /><br />
<label>Goal:</label><textarea name="attr_gang_goal" /><br />
<label>Base:</label><textarea name="attr_gang_base" /><br />
<label>Gang Assets:</label>
<fieldset class="repeating_assets">
<div class="sheet-gang-asset">
<input type="text" name="attr_assetname" />
<textarea name="attr_assetdescription" />
</div>
</fieldset>
<label>Hooks:</label><textarea name="attr_gang_hooks" />
</div>
<!-- END GANG SHEET -->
<!-- DOMAIN SHEET -->
<div class="sheet-domain">
<div class="header"><h2>Domain Record</h2></div>
<div class="gamedetails">
<h2>Game Details</h2>
<h3>Name of Game</h3><textarea name="attr_game_name" class="small" /><br />
<h3>Type of Game</h3>
<label style="width:50px;">Closed</label><input type="radio" name="attr_game_type" value="Closed"><span></span>
<label style="width:30px;">Open</label><input type="radio" name="attr_game_type" value="Open"><span></span><br />
<h3>Power Level:</h3>
<label style="width:50px;">Street</label><input type="radio" name="attr_game_power" value="Street"><span></span>
<label style="width:120px;">Troubleshooter</label><input type="radio" name="attr_game_power" value="Troubleshooter"><span></span>
<label style="width:45px;">Elite</label><input type="radio" name="attr_game_power" value="Elite"><span></span><br />
</div>
<div class="safety">
<h2>Safety Discussion</h2>
<h3>Rating</h3>
<label style="width:20px;">PG</label><input type="radio" name="attr_rating" value="PG"><span></span>
<label style="width:20px;">15</label><input type="radio" name="attr_rating" value="15"><span></span>
<label style="width:20px;">18</label><input type="radio" name="attr_rating" value="18"><span></span>
<label style="width:12px;">R</label><input type="radio" name="attr_rating" value="R"><span></span><br />
<h3>Off Limit Topics</h3><textarea name="attr_off_limit" />
</div>
<div class="systemdetails">
<h2>System Details</h2>
<h3>Home World</h3><textarea name="attr_homeworld" class="small" /><br />
<h3>Type of World</h3>
<label style="width:40px;">First</label><input type="radio" name="attr_world_type" value="First"><span></span>
<label style="width:50px;">Second</label><input type="radio" name="attr_world_type" value="Second"><span></span>
<label style="width:40px;">Third</label><input type="radio" name="attr_world_type" value="Third"><span></span><br />
<h3>Planetary Story Concept</h3><textarea name="attr_story_concept" class="small" /><br />
<h3>Details</h3><textarea name="attr_system_details" class="large" /><br />
</div>
<div class="othersystemdetails" style="margin-top:46px;">
<h3>Other System Objects</h3><textarea name="attr_system_objects" class="large" /><br />
<h3>Non-Player Characters</h3><textarea name="attr_system_npcs" class="large" /><br />
</div>
</div>
<!-- END DOMAIN SHEET -->
<!-- MODS SHEET -->
<div class="sheet-mods">
<h2>Modifications</h2>
<p>Need to make some tweaks? Modify things here.</p>
<label>Modify skill points:</label><input type="number" name="attr_extraskills" /><br />
<label>Modify endurance:</label><input type="number" name="attr_extraendurance" /><br />
<label>Modify will:</label><input type="number" name="attr_extrawill" /><br />
</div>
<!-- END MODS SHEET -->
<!-- ROLL TEMPLATE -->
<rolltemplate class="sheet-rolltemplate-future">
<div class="sheet-container">
<div class="sheet-header">
{{#title}}<div class="sheet-title">{{title}}</div>{{/title}}
{{#subtitle}}<div class="sheet-subtitle">{{subtitle}}</div>{{/subtitle}}
</div>
<div class="sheet-content">
{{#allprops() title subtitle desc color}}
<div class="sheet-key">{{key}}</div>
<div class="sheet-value">{{value}}</div>
{{/allprops() title subtitle desc color}}
{{#desc}}<div class="sheet-desc">{{desc}}</div>{{/desc}}
</div>
</div>
</rolltemplate>
<script type="text/worker">
// Deal with the tabs
const buttonlist = ["character","gang","domain","mods"];
buttonlist.forEach(button => {
on(`clicked:${button}`, function() {
setAttrs({
sheetTab: button
});
});
});
// Initialise skills and other numbered attributes
on("change:athletics change:awareness change:melee change:shoot change:stealth change:survival change:vehicles change:art change:business change:education change:lore change:medicine change:science change:technology change:charm change:conviction change:empathy change:highsociety change:rhetoric change:streetwise change:taunt sheet:opened", function() {
getAttrs(["athletics","awareness","melee","shoot","stealth","survival","vehicles","art","business","corporatelaw","education","interfaceX","medicine","remotes","science","technology","charm","conviction","empathy","highsociety","rhetoric","streetwise","taunt","skillcap","meleebonus","shootbonus","initiativebonus","totaltraitpoints","gangassets"], function(values) {
let athletics = parseInt(values.athletics)||0;
let awareness = parseInt(values.awareness)||0;
let melee = parseInt(values.melee)||0;
let shoot = parseInt(values.shoot)||0;
let stealth = parseInt(values.stealth)||0;
let survival = parseInt(values.survival)||0;
let vehicles = parseInt(values.vehicles)||0;
let art = parseInt(values.art)||0;
let business = parseInt(values.business)||0;
let corporatelaw = parseInt(values.corporatelaw)||0;
let education = parseInt(values.education)||0;
let interfaceX = parseInt(values.interfaceX)||0;
let medicine = parseInt(values.medicine)||0;
let remotes = parseInt(values.remotes)||0;
let science = parseInt(values.science)||0;
let technology = parseInt(values.technology)||0;
let charm = parseInt(values.charm)||0;
let conviction = parseInt(values.conviction)||0;
let empathy = parseInt(values.empathy)||0;
let highsociety = parseInt(values.highsociety)||0;
let rhetoric = parseInt(values.rhetoric)||0;
let streetwise = parseInt(values.streetwise)||0;
let taunt = parseInt(values.taunt)||0;
let skillcap = parseInt(values.skillcap)||4;
let meleebonus = parseInt(values.meleebonus)||0;
let shootbonus = parseInt(values.shootbonus)||0;
let initiativebonus = parseInt(values.initiativebonus)||0;
let addtraitpoints = parseInt(values.addtraitpoints)||0;
let gangassets = parseInt(values.gangassets)||0;
setAttrs({
"athletics": Math.min(athletics, skillcap),
"awareness": Math.min(awareness, skillcap),
"melee": Math.min(melee, skillcap),
"shoot": Math.min(shoot, skillcap),
"stealth": Math.min(stealth, skillcap),
"survival": Math.min(survival, skillcap),
"vehicles": Math.min(vehicles, skillcap),
"art": Math.min(art, skillcap),
"business": Math.min(business, skillcap),
"corporatelaw": Math.min(corporatelaw, skillcap),
"education": Math.min(education, skillcap),
"interfaceX": Math.min(interfaceX, skillcap),
"medicine": Math.min(medicine, skillcap),
"remotes": Math.min(remotes, skillcap),
"science": Math.min(science, skillcap),
"technology": Math.min(technology, skillcap),
"charm": Math.min(charm, skillcap),
"conviction": Math.min(conviction, skillcap),
"empathy": Math.min(empathy, skillcap),
"highsociety": Math.min(highsociety, skillcap),
"rhetoric": Math.min(rhetoric, skillcap),
"streetwise": Math.min(streetwise, skillcap),
"taunt": Math.min(taunt, skillcap),
"skillcap": skillcap,
"meleebonus": meleebonus,
"shootbonus": shootbonus,
"initiativebonus": initiativebonus,
"addtraitpoints": addtraitpoints,
"gangassets": gangassets
});
});
});
// Set endurance maximum
on("change:athletics change:extraendurance change:focus sheet:opened", function() {
getAttrs(["athletics","focus","extraendurance"], function(values) {
let athletics = parseInt(values.athletics)||0;
let extraendurance = parseInt(values.extraendurance)||0;
let focus = values.focus;
let endurance = athletics + 8 + extraendurance;
if (focus === "Tough")
{
endurance = athletics + 12 + extraendurance;
}
setAttrs({
"endurance_max": endurance
});
});
});
// Set will maximum
on("change:conviction change:extrawill change:focus sheet:opened", function() {
getAttrs(["conviction","focus","extrawill"], function(values) {
let conviction = parseInt(values.conviction)||0;
let extrawill = parseInt(values.extrawill)||0;
let focus = values.focus;
let will = conviction + 8 + extrawill;
if (focus === "Determined")
{
will = conviction + 10 + extrawill;
}
setAttrs({
"will_max": will
});
});
});
// Set total skill points and advancements
on("change:experience change:extraskills sheet:opened", function() {
getAttrs(["experience", "extraskills"], function(values) {
let experience = parseInt(values.experience)||0;
let extraskills = parseInt(values.extraskills)||0;
let totalskillpoints = Math.floor(experience/5) + 17 + extraskills;
let totaladvancements = Math.floor(experience/15);
setAttrs({
"totalskillpoints": totalskillpoints,
"totaladvancements": totaladvancements
});
});
});
// Set unspent skill points
on("change:athletics change:awareness change:melee change:shoot change:stealth change:survival change:vehicles change:art change:business change:education change:lore change:medicine change:science change:technology change:charm change:conviction change:empathy change:highsociety change:rhetoric change:streetwise change:taunt change:athleticsspec change:awarenessspec change:meleespec change:shootspec change:stealthspec change:survivalspec change:vehiclesspec change:artspec change:businessspec change:educationspec change:lorespec change:medicinespec change:sciencespec change:technologyspec change:charmspec change:convictionspec change:empathyspec change:highsocietyspec change:rhetoricspec change:streetwisespec change:tauntspec change:totalskillpoints sheet:opened", function() {
getAttrs(["athletics","awareness","melee","shoot","stealth","survival","vehicles","art","business","education","lore","medicine","science","technology","charm","conviction","empathy","highsociety","rhetoric","streetwise","taunt","athleticsspec","awarenessspec","meleespec","shootspec","stealthspec","survivalspec","vehiclesspec","artspec","businessspec","educationspec","lorespec","medicinespec","sciencespec","technologyspec","charmspec","convictionspec","empathyspec","highsocietyspec","rhetoricspec","streetwisespec","tauntspec","totalskillpoints"], function(values) {
let athletics = parseInt(values.athletics)||0;
let awareness = parseInt(values.awareness)||0;
let melee = parseInt(values.melee)||0;
let shoot = parseInt(values.shoot)||0;
let stealth = parseInt(values.stealth)||0;
let survival = parseInt(values.survival)||0;
let vehicles = parseInt(values.vehicles)||0;
let art = parseInt(values.art)||0;
let business = parseInt(values.business)||0;
let education = parseInt(values.education)||0;
let lore = parseInt(values.lore)||0;
let medicine = parseInt(values.medicine)||0;
let science = parseInt(values.science)||0;
let technology = parseInt(values.technology)||0;
let charm = parseInt(values.charm)||0;
let conviction = parseInt(values.conviction)||0;
let empathy = parseInt(values.empathy)||0;
let highsociety = parseInt(values.highsociety)||0;
let rhetoric = parseInt(values.rhetoric)||0;
let streetwise = parseInt(values.streetwise)||0;
let taunt = parseInt(values.taunt)||0;
let athleticsspec = CountSpecialities(values.athleticsspec);
let awarenessspec = CountSpecialities(values.awarenessspec);
let meleespec = CountSpecialities(values.meleespec);
let shootspec = CountSpecialities(values.shootspec);
let stealthspec = CountSpecialities(values.stealthspec);
let survivalspec = CountSpecialities(values.survivalspec);
let vehiclesspec = CountSpecialities(values.vehiclesspec);
let artspec = CountSpecialities(values.artspec);
let businessspec = CountSpecialities(values.businessspec);
let educationspec = CountSpecialities(values.educationspec);
let lorespec = CountSpecialities(values.lorespec);
let medicinespec = CountSpecialities(values.medicinespec);
let sciencespec = CountSpecialities(values.sciencespec);
let technologyspec = CountSpecialities(values.technologyspec);
let charmspec = CountSpecialities(values.charmspec);
let convictionspec = CountSpecialities(values.convictionspec);
let empathyspec = CountSpecialities(values.empathyspec);
let highsocietyspec = CountSpecialities(values.highsocietyspec);
let rhetoricspec = CountSpecialities(values.rhetoricspec);
let streetwisespec = CountSpecialities(values.streetwisespec);
let tauntspec = CountSpecialities(values.tauntspec);
console.log(stealthspec);
let totalskillpoints = parseInt(values.totalskillpoints)||0;
let skillpoints = athletics
+ awareness
+ melee
+ shoot
+ stealth
+ survival
+ vehicles
+ art
+ business
+ education
+ lore
+ medicine
+ science
+ technology
+ charm
+ conviction
+ empathy
+ highsociety
+ rhetoric
+ streetwise
+ taunt
+ athleticsspec
+ awarenessspec
+ meleespec
+ shootspec
+ stealthspec
+ survivalspec
+ vehiclesspec
+ artspec
+ businessspec
+ educationspec
+ lorespec
+ medicinespec
+ sciencespec
+ technologyspec
+ charmspec
+ convictionspec
+ empathyspec
+ highsocietyspec
+ rhetoricspec
+ streetwisespec
+ tauntspec;
setAttrs({
"skillpoints": totalskillpoints - skillpoints
});
});
});
// Set trait points
on('sheet:opened remove:repeating_traits change:repeating_traits:traitcost change:addtraitpoints change:repeating_limitations:limitationcost remove:repeating_limitations', function() {
getSectionIDs('traits', function(idarray) {
// first get the attribute names for all rows in put in one array
const fieldnames = [];
idarray.forEach(id => fieldnames.push(`repeating_traits_${id}_traitcost`));
getAttrs(fieldnames, values => {
let totaltraitcost = 0;
// now loop through the rows again
idarray.forEach(id => {
let row = 'repeating_traits_' + id;
let traitcost = parseInt(values[`${row}_traitcost`])||0;
totaltraitcost += traitcost;
});
// Repeat for limitations
getSectionIDs('limitations', function(idarray) {
const fieldnames = [];
idarray.forEach(id => fieldnames.push(`repeating_limitations_${id}_limitationcost`));
getAttrs(fieldnames, values => {
let totallimitationcost = 0;
// now loop through the rows again
idarray.forEach(id => {
let row = 'repeating_limitations_' + id;
let limitationcost = parseInt(values[`${row}_limitationcost`])||0;
totallimitationcost += limitationcost;
});
totaltraitcost -= totallimitationcost;
// Get the number of trait points.
getAttrs(["addtraitpoints"], function(values) {
let totaltraitpoints = parseInt(values.addtraitpoints) + 5||5;
setAttrs({
"traitpoints": totaltraitpoints - totaltraitcost
});
});
});
});
});
});
});
// Set unspent advancements
on('sheet:opened change:addtraitpoints change:addskillcap change:gangassets change:totaladvancements', function() {
getAttrs(["addtraitpoints","addskillcap","gangassets","totaladvancements"], function(values) {
let additionaltraitpoints = parseInt(values.addtraitpoints)||0;
let additionalskillcap = parseInt(values.addskillcap)||0;
let gangassets = parseInt(values.gangassets)||0;
let totaladvancements = parseInt(values.totaladvancements)||0;
setAttrs({
"advancements": totaladvancements - additionaltraitpoints - additionalskillcap - gangassets
});
});
});
// Set skill cap
on('sheet:opened change:addskillcap', function() {
getAttrs(["skillcap","addskillcap"], function(values) {
let addskillcap = parseInt(values.addskillcap)||0;
setAttrs({
"skillcap": 4 + addskillcap
});
});
});
function CountSpecialities(attribute){
return attribute == null ? 0 : attribute.trim().length > 0 ? attribute.split(",").length : 0;
}
</script>
Binary file not shown.

After

Width:  |  Height:  |  Size: 198 KiB

+9
View File
@@ -0,0 +1,9 @@
{
"html": "rebootthefuture.html",
"css": "rebootthefuture.css",
"authors": "Sue Savage",
"roll20userid": "5009227",
"preview": "rebootthefuturepreview.png",
"instructions": "A character sheet for Reboot The Future.",
"legacy": false
}