Merge pull request #7 from Futil/1e

1e
This commit is contained in:
Futil
2022-01-09 19:41:40 -07:00
committed by GitHub
12 changed files with 539 additions and 126 deletions
+161 -68
View File
@@ -1,4 +1,5 @@
@import url("https://fonts.googleapis.com/css2?family=Martel:wght@400;800&family=Roboto:wght@300;400;500&display=swap");
@import url('https://fonts.googleapis.com/css2?family=Hind:wght@300;400;500;600;700&display=swap');
@include-when-export url(https://fonts.loli.net/css?family=PT+Serif:400,400italic,700,700italic&subset=latin,cyrillic-ext,cyrillic,latin-ext);
@@ -83,7 +84,7 @@
grid-column: span 2 / span 2;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 2px;
margin: 10px 0;
/* margin: 10px 0; */
padding: 0;
}
.grid-1col {
@@ -92,8 +93,7 @@
}
.widegap {
gap: 30px;
padding: 6px;
gap: 16px;
}
.grid-3col {
@@ -190,6 +190,14 @@
justify-content: space-between;
}
.flex {
display: flex;
justify-content:space-evenly;
align-items: center;
flex: auto;
}
/* Styles limited to mosh sheets */
.mosh .item-form {
font-family: "Roboto", sans-serif;
@@ -234,12 +242,11 @@
display: grid;
grid-template-areas:
'header header header'
'abilities centercol saves '
'abilities b saves';
'abilities centercol saves ';
grid-gap: 10px;
/* background-color: rgb(226, 226, 226); */
padding: 2px;
grid-template-columns: 256px auto 82px;
grid-template-columns: 238px auto 82px;
}
.mosh .abilities {grid-area: abilities;}
@@ -247,7 +254,7 @@
.mosh .stress {grid-area: stress;}
.mosh .health {grid-area: centercol;}
.mosh .healthspread {width:100px;}
.mosh .healthspread {width:96%;}
.mosh .char-header h1.charname {
height: auto;
@@ -282,6 +289,13 @@
height: 100%;
}
.sheet nav.sheet-tabs {
/* border-top: 2px solid black;
border-bottom: 2px solid black; */
background: black;
color: white;
}
.mosh .tox .tox-editor-container {
background: #fff;
}
@@ -290,10 +304,38 @@
padding: 0 8px;
}
.mosh .origin {
width: 0;
height: 0;
}
.mosh .seperatorLine{
border-bottom: 2px solid #111;
height: 0;
width: 100%;
}
.mosh .skill_training_frame{
height: 47px;
background: rgb(230,230,230);
border-radius: 9px;
font-family: "Roboto", sans-serif;
font-size: 11pt;
font-weight: 400;
padding: 8px;
}
.mosh .skill_training_text{
font-family: "Roboto", sans-serif;
font-size: 11pt;
font-weight: 500;
color: grey;
}
.mosh .resource-label {
font-weight: bold;
text-transform: uppercase;
margin-bottom: 3px;
text-align: center;
}
.mosh .faded-label {
@@ -400,6 +442,7 @@
padding-left: 8px;
border-radius: 21px;
text-align: center;
white-space: nowrap;
}
.mosh .items-list .item-controls {
@@ -413,7 +456,7 @@
font-size: medium;
font-weight: bold;
font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
color: #111;
color: white;
text-align: center;
}
@@ -441,37 +484,40 @@
}
.mosh .mainstatmod-input {
margin-top: 13px;
height: 26px;
width: 44px;
padding: 0;
border: 2px solid rgb(129, 129, 129);
border-radius: 0.1em 1em 0.11em;
font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
width: 28px;
/* padding: 0; */
border: 0;
border-radius: 7.7em;
color: rgb(151, 100, 100);
font-size: 0.85rem;
font-weight: bold;
text-align: center;
margin-left: -22px;
z-index: 5;
background: white;
top: 7px;
left: 13px;
position: relative;
background: lightgrey;
}
.mosh .mainstatmod-title {
position: relative;
font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
font-size: 0.7rem;
color: rgb(77, 77, 77);
color: lightgrey;
font-size: 1rem;
line-height: 1;
text-align: center;
font-weight: bold;
text-transform: uppercase;
margin-left: -35px;
margin-left: -38px;
pointer-events: none;
top: 13px;
left: 12px;
}
.mosh .maxhealth-input {
margin: auto;
border: 0px solid #111;
font-size: 1.8rem;
font-size: 1.5rem;
font-weight: bold;
text-align: center;
background: transparent;
@@ -485,50 +531,63 @@
color: rgb(56, 56, 56);
}
.mosh .sizelarge{
font-size: 1.1rem;
.mosh .whiteText{
color: white;
}
.mosh .minmaxwrapper{
grid-column: 1/-1;
display: grid;
grid-template-columns: 1fr 1px 1fr;
align-items: start;
width: 145px;
height: 50px;
padding: 0;
border: 4px solid #111;
border-radius: 1.5em;
background: 0;
.mosh .sizelarge{
font-size: 1.1rem;
}
.mosh .valuewrapper{
grid-column: 1/-1;
display: grid;
width: 145px;
height: 50px;
align-items: start;
height: 40px;
padding: 0;
border: 4px solid #111;
border: 2px solid #111;
border-radius: 1.5em;
background: 0;
margin-top: -15px;
}
.mosh .armorWrapper{
grid-column: 1/-1;
display: grid;
align-items: start;
height: 40px;
padding: 0;
border: 2px solid #111;
border-radius: 0.3em;
background: black;
width: 100%;
}
.mosh .minmaxtopstat{
width: 8.5rem;
grid-template-columns: 1fr 1fr;
grid-template-rows: 0.3fr 1.1fr 0.4fr;
justify-self: center;
display: grid;
justify-items: center;
gap: 3px;
margin-bottom: 7px;
}
.mosh .minmaxwrapper{
grid-column: 1/-1;
display: grid;
grid-template-columns: 1fr 1px 1fr;
align-items: start;
height: 40px;
padding: 0;
border: 2px solid #111;
border-radius: 1.5em;
background: 0;
}
.mosh .minmaxtext{
text-align: left;
grid-column: 1/-1;
/* font-family: "Montserrat", "Arial Black", sans-serif; */
font-size: 1.15rem;
font-size: 1rem;
font-weight: bold;
line-height: 1;
text-align: center;
@@ -542,11 +601,9 @@
}
.mosh .healthmaxtext{
text-align: left;
grid-column: span 1;
font-size: 0.8rem;
/* font-family: "Montserrat", "Arial Black", sans-serif; */
font-weight: bold;
font-size: 0.7rem;
font-weight: 500;
line-height: 1;
text-align: center;
}
@@ -560,6 +617,7 @@
.mosh .mainstatwrapper {
display: flex;
width: 95%;
}
.mosh .mainstat {
@@ -568,7 +626,7 @@
grid-template-columns: 1fr 5em;
align-items: center;
gap: 0;
width: 100%;
width: 98%;
}
.mosh .creature-mainstat {
@@ -583,15 +641,18 @@
border-top-left-radius: 2em;
border-bottom-left-radius: 2em;
background: #111;
padding: 2px 0.5rem;
padding: 5px 0.5rem;
left: 5px;
position: relative;
height: 35px;
}
.mosh .mainstattext {
width: 100%;
padding: 0.5rem;
color: white;
font-family: "Montserrat", "Arial Black", sans-serif;
font-size: 1.1rem;
/* font-family: "Montserrat", "Arial Black", sans-serif; */
font-size: 1.3rem;
font-weight: bold;
text-align: left;
text-transform: uppercase;
@@ -602,31 +663,46 @@
height: 50px;
width: 50px;
padding: 0;
border: 4px solid #111;
border: 2px solid #111;
border-radius: 3em;
font-size: 1.5rem;
font-weight: bold;
text-align: center;
background: white;
z-index: 5;
}
.mosh .textarea-input {
font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
font-family: "Roboto", sans-serif;
margin: -0.15em;
padding: 9px;
padding-top: 2px;
/* padding: 9px; */
border: 2px solid #111;
border-radius: 0.8em;
font-size: 0.8rem;
/* font-weight: bold; */
background: white;
font-size: 11pt;
color: white;
font-weight: 500;
background: black;
resize: none;
min-height: 0;
overflow: hidden;
}
.mosh .textarea-input-grey {
font-family: "Roboto", sans-serif;
border: 0;
border-radius: 0.8em;
font-size: 11pt;
font-weight: 500;
resize: none;
min-height: 0;
overflow: hidden;
text-align: center;
}
.mosh .square-input {
margin: -0.15em;
height: 45px;
height: 42px;
width: 45px;
padding: 0;
border: 4px solid #111;
@@ -638,9 +714,9 @@
}
.mosh .armor-mod {
margin: -8px;
margin: 3px;
height: 24px;
width: 35px;
width: 28px;
/* padding: 0; */
border: 3px solid #111;
background-color: #111;
@@ -650,7 +726,7 @@
text-align: center;
position: relative;
color: white;
top: 8px;
top: -2px;
right: -19px;
}
@@ -667,13 +743,11 @@
}
.mosh .savebackground {
border-radius: 1em;
border-radius: 0.3em;
background: #111;
padding: 0 0.5rem;
padding-bottom: 0.3rem;
padding-top: 0.5rem;
width: 80px;
margin-top: -1px;
padding-top: 0.4rem;
height: 225px;
}
.mosh .header {
@@ -733,9 +807,9 @@
.mosh .ship-stats-grid{
display: grid;
grid-template-columns: 17em 1fr 15em;
grid-template-columns: 17em 1fr 18em;
}
.mosh .whiteline {
border-top: 2px solid white;
@@ -851,6 +925,25 @@
display: inline-flex;
}
.mosh .circle{
color: rgb(22, 22, 22);
background: white;
border-radius: 10px;
/* border: 2px solid black; */
width: 15px;
height: 15px;
}
.mosh .circle-f{ /*Filled circle*/
color: rgb(22, 22, 22);
background: rgb(100, 100, 100);
border-radius: 10px;
/* border: 2px solid black; */
width: 15px;
height: 15px;
}
.mosh .profile {
width: 140px;
height: auto;
+5
View File
@@ -0,0 +1,5 @@
{
"Mosh.ActorName" : "Name",
"Mosh.ActorBackground" : "Background",
"Mosh.ActorPronouns" : "Pronouns"
}
+110 -2
View File
@@ -9,7 +9,7 @@ export class MothershipActorSheet extends ActorSheet {
return mergeObject(super.defaultOptions, {
classes: ["mosh", "sheet", "actor", "character"],
template: "systems/mosh/templates/actor/actor-sheet.html",
width: 742,
width: 700,
height: 800,
tabs: [{ navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "character" }]
});
@@ -22,7 +22,9 @@ export class MothershipActorSheet extends ActorSheet {
const data = super.getData();
data.dtypes = ["String", "Number", "Boolean"];
const superData = data.data.data;
for (let attr of Object.values(data.data.data.attributes)) {
attr.isCheckbox = attr.dtype === "Boolean";
}
@@ -38,8 +40,40 @@ export class MothershipActorSheet extends ActorSheet {
}
data.data.data.settings.useCalm = game.settings.get("mosh", "useCalm");
data.data.data.settings.hideWeight = game.settings.get("mosh", "hideWeight");
data.data.data.settings.firstEdition = game.settings.get("mosh", "firstEdition");
//SKILL XP BUTTONS
superData.xp.html = '';
if(superData.xp.html == ''){
for(let i = 1; i <= 15; i ++){
if(i > superData.xp.value){
if(i % 5){
superData.xp.html += '<div class="circle"></div>';
}
else { //If a special one
let trainLevel = 'Trained';
if(i == 10) trainLevel = 'Expert';
else if(i == 15) trainLevel = 'Master';
superData.xp.html += '<div class="circle" style="background:rgb(200,200,200);"><div class="skill_training_text" style="position: relative; top: 17px; text-align: center; left: -60px;">'+trainLevel+'</div></div>';
}
}
else{
if(i % 5){
superData.xp.html += '<div class="circle-f"></div>';
}
else { //If a special one
let trainLevel = 'Trained';
if(i == 10) trainLevel = 'Expert';
else if(i == 15) trainLevel = 'Master';
superData.xp.html += '<div class="circle-f" style="background:black;"><div class="skill_training_text" style="position: relative; top: 17px; text-align: center; left: -60px; color:black;">'+trainLevel+'</div></div>';
}
}
}
}
//END SKILL XP
return data.data;
}
@@ -57,6 +91,7 @@ export class MothershipActorSheet extends ActorSheet {
const skills = [];
const weapons = [];
const armors = [];
const conditions = [];
let curWeight = 0;
// Iterate through items, allocating to containers
@@ -74,6 +109,27 @@ export class MothershipActorSheet extends ActorSheet {
armors.push(i);
} else if (i.type === 'weapon') {
weapons.push(i);
} else if (i.type === 'condition') {
// We'll handle the pip html here.
if (item.treatment == null) {
item.treatment = {
"value": 0,
"html": ""
};
}
let pipHtml = "";
for (let i = 0; i < 3; i++) {
if (i < item.treatment.value){
pipHtml += '<i class="fas fa-circle"></i>';
}
else{
pipHtml += '<i class="far fa-circle"></i>';
}
}
item.treatment.html = pipHtml;
conditions.push(i);
}
}
@@ -98,6 +154,7 @@ export class MothershipActorSheet extends ActorSheet {
actorData.skills = skills;
actorData.armors = armors;
actorData.weapons = weapons;
actorData.conditions = conditions;
}
@@ -108,6 +165,57 @@ export class MothershipActorSheet extends ActorSheet {
// Everything below here is only needed if the sheet is editable
if (!this.options.editable) return;
html.on('mousedown', '.char-pip-button', ev => {
const data = super.getData();
const div = $(ev.currentTarget);
const targetName = div.data("key");
const attribute = data.data.data[targetName];
let amount = attribute.value;
let max = div.data("max");
let min = div.data("min");
if (event.button == 0) {
if (amount < max) {
attribute.value = Number(amount) + 1;
}
} else if (event.button == 2) {
if (amount > min) {
attribute.value = Number(amount) - 1;
}
}
let updated = {
html: '',
value: attribute.value
}
const updateString = "data."+targetName;
this.actor.update({[updateString] : updated});
});
html.on('mousedown', '.treatment-button', ev => {
const li = ev.currentTarget.closest(".item");
const item = duplicate(this.actor.getEmbeddedDocument("Item", li.dataset.itemId))
let amount = item.data.treatment.value;
if (event.button == 0) {
if (amount < 3) {
item.data.treatment.value = Number(amount) + 1;
}
} else if (event.button == 2) {
if (amount > 0) {
item.data.treatment.value = Number(amount) - 1;
}
}
this.actor.updateEmbeddedDocuments('Item', [item]);
});
// Update Inventory Item
html.find('.item-equip').click(ev => {
const li = ev.currentTarget.closest(".item");
+27 -4
View File
@@ -325,15 +325,18 @@ export class MothershipActor extends Actor {
t.render(true);
}
rollAttribute(attribute, advantage, item = "", rollOver = false) {
async rollAttribute(attribute, advantage, item = "", rollOver = false) {
let attributeName = attribute.label?.charAt(0).toUpperCase() + attribute.label?.toLowerCase().slice(1);
if (!attribute.label && isNaN(attributeName))
attributeName = attribute.charAt(0)?.toUpperCase() + attribute.toLowerCase().slice(1);
let isStress = (attribute.label == "Stress" ? true : false);
// Roll
let diceformular = (isStress ? "2d10" : "1d100");
let firstEdition = game.settings.get("mosh", "firstEdition");
let diceformular = (isStress ? (firstEdition ? "1d20" : "2d10") : "1d100");
// if (advantage != undefined && advantage != NaN && advantage != 0) {
// diceformular = diceformular + "+" + advantage + "d6kh";
// }
@@ -376,6 +379,24 @@ export class MothershipActor extends Actor {
if (r._total == 0 && !isStress || rSplit[0] == rSplit[1] && !isStress)
critical = true;
let panic = false;
let panicText = '';
if(isStress && r._total < attribute.value && firstEdition){
await(async () => {
// const contents = await game.packs.get("Tables").getContent();
// const table= contents.find(i => i.name === `Panic`);
let tableLocation = game.settings.get("mosh", "panicTable");
const documentIndex = game.packs.get(tableLocation).index.getName("Panic");
const doc = await game.packs.get(tableLocation).getDocument(documentIndex._id);
panic = true;
panicText = doc.getResultsForRoll(r._total)[0].data.text;
//then just put your normal table rolling command using `table`
})()
}
//Here's where we handle the result text.
let resultText = "";
@@ -408,7 +429,9 @@ export class MothershipActor extends Actor {
},
isCreature: {
value: this.data.type == "creature" ? true : false
}
},
panic: panic,
panicText : panicText
},
target: attribute.value,
mod: mod,
+44 -21
View File
@@ -1,7 +1,7 @@
export const registerSettings = function () {
game.settings.register('mosh', 'newArmor', {
name: "1e Armor System",
hint: "[COMING SOON] Use the 1st edition Armor system.",
game.settings.register('mosh', 'firstEdition', {
name: "1e Rules",
hint: "Use the 1st edition rules and character sheet.",
default: true,
scope: 'world',
type: Boolean,
@@ -10,28 +10,52 @@ export const registerSettings = function () {
console.log("newArmorandCombat set to " + value)
}
});
game.settings.register('mosh', 'newStress', {
name: "1e Stress System",
hint: "[COMING SOON] Use the 1st edition stress system with the roll under d20 and stress table.",
default: true,
game.settings.register('mosh', 'panicTable', {
name: "Panic Table",
hint: "Where is our panic table located?",
default: "mosh.tables",
scope: 'world',
type: Boolean,
type: String,
config: true,
onChange: value => { // A callback function which triggers when the setting is changed
console.log("newStress set to " + value)
}
});
game.settings.register('mosh', 'newWounds', {
name: "1e Wound System",
hint: "[COMING SOON] Instead of the 0e health system, use the 1e wounds and health system.",
default: true,
scope: 'world',
type: Boolean,
config: true,
onChange: value => { // A callback function which triggers when the setting is changed
console.log("newWounds set to " + value)
console.log("panicTable set to " + value)
}
});
// game.settings.register('mosh', 'newArmor', {
// name: "1e Armor System",
// hint: "Use the 1st edition Armor system.",
// default: true,
// scope: 'world',
// type: Boolean,
// config: true,
// onChange: value => { // A callback function which triggers when the setting is changed
// console.log("newArmorandCombat set to " + value)
// }
// });
// game.settings.register('mosh', 'newStress', {
// name: "1e Stress System",
// hint: "Use the 1st edition stress system with the roll under d20 and stress table.",
// default: true,
// scope: 'world',
// type: Boolean,
// config: true,
// onChange: value => { // A callback function which triggers when the setting is changed
// console.log("newStress set to " + value)
// }
// });
// game.settings.register('mosh', 'newWounds', {
// name: "1e Wound System",
// hint: "[Instead of the 0e health system, use the 1e wounds and health system.",
// default: true,
// scope: 'world',
// type: Boolean,
// config: true,
// onChange: value => { // A callback function which triggers when the setting is changed
// console.log("newWounds set to " + value)
// }
// });
game.settings.register('mosh', 'hideWeight', {
name: "Hide Weight",
hint: "Hide weight in the items list for players and ships?",
@@ -54,5 +78,4 @@ export const registerSettings = function () {
console.log("useCalm set to " + value)
}
});
};
+1
View File
File diff suppressed because one or more lines are too long
+10 -2
View File
@@ -2,7 +2,7 @@
"name": "mosh",
"title": "MoSh - Unofficial Mothership",
"description": "The unofficial Mothership system for FoundryVTT.",
"version": "0.1.7b",
"version": "0.2.0",
"minimumCoreVersion": "0.8.6",
"compatibleCoreVersion": "V9",
"templateVersion": 2,
@@ -10,7 +10,15 @@
"esmodules": ["module/mosh.js"],
"styles": ["css/mosh.css"],
"scripts": [],
"packs": [],
"packs": [
{
"name": "tables",
"label": "Tables",
"system": "mosh",
"path": "packs/tables.db",
"entity": "RollTable"
}
],
"languages": [
{
"lang": "en",
+19 -3
View File
@@ -37,6 +37,9 @@
"rank": {
"value": ""
},
"pronouns": {
"value": ""
},
"credits": {
"value": ""
},
@@ -44,7 +47,9 @@
"value": ""
},
"xp": {
"value": 0
"value": 0,
"html" : 0,
"selectedSkill" : ""
},
"attributes": {
"level": {
@@ -103,7 +108,8 @@
"biography": "",
"description": "This is a description",
"xp": {
"value": 1
"value": 1,
"html": ""
},
"stats": {
"combat": {
@@ -197,7 +203,8 @@
"weapon",
"armor",
"ability",
"module"
"module",
"condition"
],
"templates": {
"base": {
@@ -246,6 +253,15 @@
],
"bonus": 10
},
"condition": {
"templates": [
"base"
],
"treatment" : {
"value" : 0,
"html" : ""
}
},
"ability": {
"templates": [
"base"
+120 -16
View File
@@ -44,16 +44,25 @@
value="{{data.rank.value}}" placeholder="" /></div>
</div>
{{#if data.settings.firstEdition}}
<!-- Pronouns -->
<div class="">
<div class="headerinputtext">Pronouns</div>
<div class="headerinputfield charname"><input name="data.pronouns.value" class="noborder" type="text"
value="{{data.pronouns.value}}" placeholder="" /></div>
</div>
{{else}}
<!-- XP -->
<div class="">
<div class="headerinputtext">XP</div>
<div class="headerinputfield charname"><input name="data.xp.value" class="noborder" type="text"
value="{{data.xp.value}}" placeholder="" /></div>
</div>
{{/if}}
<!-- LEVEL -->
<div class="">
<div class="headerinputtext">LEVEL</div>
<div class="headerinputtext">{{#if data.settings.firstEdition}}High Score{{else}}LEVEL{{/if}}</div>
<div class="headerinputfield charname"><input name="data.attributes.level.value" class="noborder"
type="text" value="{{data.attributes.level.value}}" placeholder="" /></div>
</div>
@@ -61,8 +70,7 @@
</div>
</div>
<div class="health grid grid-1col" style="margin-top: 0;">
<div class="grid">
<div class="health grid grid-2col" style="margin-top: 0; grid-template-rows: 76px 77px 72px;">
<!-- Health -->
<div class="resource healthspread minmaxtopstat">
<label for="data.health.value" class="resource-label minmaxtext">Health</label>
@@ -81,7 +89,13 @@
<!-- Hits -->
<div class="resource healthspread minmaxtopstat">
<label for="data.hits.value" class="resource-label minmaxtext">Hits</label>
<label for="data.hits.value" class="resource-label minmaxtext">
{{#if data.settings.firstEdition}}
Wounds
{{else}}
Hits
{{/if}}
</label>
<div class="minmaxwrapper">
<input class="maxhealth-input darkGreyText" type="text" name="data.hits.value" value="{{data.hits.value}}"
@@ -129,6 +143,8 @@
</div>
{{/if}}
{{#if data.settings.firstEdition}}
{{else}}
<!-- Resolve -->
<div class="resource healthspread minmaxtopstat">
<label for="data.other.stress.value" class="resource-label minmaxtext">Resolve</label>
@@ -138,16 +154,40 @@
data-dtype="Number" />
</div>
</div>
{{/if}}
</div>
{{#if data.settings.firstEdition}}
<!-- Armor -->
<div class="resource healthspread minmaxtopstat" style="grid-column-start: 2; grid-column-end: 3;">
<label for="data.stats.armor.value" class="resource-label minmaxtext">Armor Points</label>
<!-- CLASS -->
<div class="" style="margin-left: 17px; margin-right: 13px;">
<div class="resource-label">STRESS & PANIC</div>
<textarea name="data.stressdesc.value" rows="2" class="textarea-input" type="text"
data-target="data.stressdesc.value" placeholder="">{{data.stressdesc.value}}</textarea>
</div>
<div class="armorWrapper" style=" width: 100%;">
<div class="maxhealth-input whiteText" type="text"
data-dtype="Number" >{{data.stats.armor.mod}}</div>
</div>
</div>
{{/if}}
<!-- CLASS -->
<div class="" style="margin-left: 6px; margin-right: 0px; flex: 0; grid-column-start: 1; grid-column-end: 3;">
{{#if data.settings.firstEdition}}
<div class="resource-label">TRAUMA RESPONSE</div>
{{else}}
<div class="resource-label">STRESS RESPONSE</div>
{{/if}}
{{#if data.settings.firstEdition}}
<textarea name="data.stressdesc.value" rows="2" class="textarea-input" type="text"
data-target="data.stressdesc.value" placeholder="" style="height: 50px;">{{data.stressdesc.value}}</textarea>
{{else}}
<textarea name="data.stressdesc.value" rows="2" class="textarea-input" type="text"
data-target="data.stressdesc.value" placeholder="" style="height: 90px;">{{data.stressdesc.value}}</textarea>
{{/if}}
</div>
<!-- XP -->
<!-- <div class="char-pip-button list-roll flex" data-key="xp" data-label="XP" data-max="8" data-min="0">
{{{data.xp.html}}}
</div> -->
</div>
@@ -172,7 +212,12 @@
</div> -->
<!-- </div> -->
{{#if data.settings.firstEdition}}
<div class="grid grid-1col widegap">
{{else}}
<div class="grid grid-1col widegap" style="gap: 24px">
{{/if}}
<!-- Strength -->
<div class="mainstatwrapper">
<div class="resource mainstat">
@@ -185,7 +230,7 @@
</div>
<input class="mainstatmod-input" type="text" name="data.stats.strength.mod"
value="{{data.stats.strength.mod}}" data-dtype="Number" />
<div class="mainstatmod-title">mod</div>
<div class="mainstatmod-title">+</div>
</div>
<!-- Speed -->
@@ -200,7 +245,7 @@
</div>
<input class="mainstatmod-input" type="text" name="data.stats.speed.mod" value="{{data.stats.speed.mod}}"
data-dtype="Number" />
<div class="mainstatmod-title">mod</div>
<div class="mainstatmod-title">+</div>
</div>
<!-- Intellect -->
@@ -215,7 +260,7 @@
</div>
<input class="mainstatmod-input" type="text" name="data.stats.intellect.mod"
value="{{data.stats.intellect.mod}}" data-dtype="Number" />
<div class="mainstatmod-title">mod</div>
<div class="mainstatmod-title">+</div>
</div>
<!-- Combat -->
@@ -230,12 +275,16 @@
</div>
<input class="mainstatmod-input" type="text" name="data.stats.combat.mod" value="{{data.stats.combat.mod}}"
data-dtype="Number" />
<div class="mainstatmod-title">mod</div>
<div class="mainstatmod-title">+</div>
</div>
</div>
</div>
<!-- SAVES -->
{{#if data.settings.firstEdition}}
<div class="saves grid grid-1col savebackground">
{{else}}
<div class="saves grid grid-1col savebackground" style = "height: 264px;">
{{/if}}
<!-- Sanity -->
<div class="resource flex-group-center">
<span class="ability-mod stat-roll rollable savetext" data-roll="d100" data-label="Sanity" data-key="sanity"
@@ -257,6 +306,8 @@
<input class="square-input" type="text" name="data.stats.body.value" value="{{data.stats.body.value}}"
data-dtype="Number" />
</div>
{{#unless data.settings.firstEdition}}
<!-- Armor -->
<div class="resource flex-group-center">
<span class="ability-mod stat-roll rollable savetext" data-roll="d100" data-key="armor"
@@ -266,11 +317,16 @@
<div class="armor-mod" type="text" name="data.stats.armor.total" value=""
data-dtype="Number" >{{data.stats.armor.total}}</div>
</div>
{{/unless}}
</div>
</div>
</header>
{{!-- Sheet Tab Navigation --}}
<nav class="mosh sheet-tabs tabs" data-group="primary">
<a class="tab-select" data-tab="skills">Skills</a>
@@ -299,7 +355,11 @@
<li class="item flexrow item-header">
<div class="item-image"></div>
<div class="skill-stat">Armor Name</div>
{{#if data.settings.firstEdition}}
<div class="skill-stat" style="flex-grow: 0.5;">Armor Points</div>
{{else}}
<div class="skill-stat" style="flex-grow: 0.5;">Save Bonus</div>
{{/if}}
<div class="skill-stat">Features</div>
<div class="skill-stat" style="flex-grow: 0.5;">Equipped</div>
<div class="item-controls">
@@ -311,7 +371,7 @@
<li class="item flexrow dropitem" data-item-id="{{armor._id}}">
<div class="item-image"><img src="{{armor.img}}" title="{{armor.name}}" width="24" height="24" /></div>
<h4 class="skill-name list-roll description-roll">{{armor.name}}</h4>
<div class="skill-stat" style="flex-grow: 0.5;">{{armor.data.bonus}}%</div>
<div class="skill-stat" style="flex-grow: 0.5;">{{armor.data.bonus}}</div>
<div class="skill-stat">{{armor.data.features}}</div>
<div class="skill-stat item-equip" style="flex-grow: 0.5;"><input type="checkbox" name="armor.data.equipped" data-dtype="Boolean"
{{checked armor.data.equipped}} /></div>
@@ -402,7 +462,51 @@
</li>
{{/each}}
</ol>
{{#if data.settings.firstEdition}}
<!-- XP -->
<div class="minmaxtext" style="line-height: 1.5; text-transform: none; font-weight: 500;">Skill Training</div>
<div class ="skill_training_frame">
<div class="grid grid-2col" style="grid-template-columns: 283px auto;">
<div class="char-pip-button list-roll flex" style="position: relative; top: -7px;" data-key="xp" data-label="XP" data-max="16" data-min="0">
{{{data.xp.html}}}
</div>
<textarea name="data.xp.selectedSkill" rows="2" class="textarea-input-grey" type="text"
data-target="data.xp.selectedSkill" placeholder="" style="height: 32px;">{{data.xp.selectedSkill}}</textarea>
</div>
</div>
</br>
<div class="seperatorLine"></div>
<!-- Conditions -->
<ol class="items-list">
<li class="item flexrow item-header">
<div class="skill-stat">Condition</div>
<div class="skill-stat" style = "flex: 0.2;">Treatment</div>
<div class="item-controls">
<a class="item-control item-create" title="Create Condition" data-type="condition"><i class="fas fa-plus"></i></a>
</div>
</li>
{{#each conditions as |condition id|}}
<li class="item flexrow dropitem" data-item-id="{{condition._id}}">
<div class="skill-name description-roll list-roll" style = "background: #1b0000;">{{condition.data.description}}</div>
<div class="treatment-button list-roll flex" style="position: relative; flex: 0.2;" data-key="condition" data-label="condition" data-max="3" data-min="0">
{{{condition.data.treatment.html}}}
</div>
<div class="item-controls">
<a class="item-control skill-edit" title="Edit Condition"><i class="fas fa-edit"></i></a>
<a class="item-control item-delete" title="Delete Condition"><i class="fas fa-trash"></i></a>
</div>
</li>
{{/each}}
</ol>
{{/if}}
</div>
{{!-- Owned Weapons Tab --}}
<div class="tab items" data-group="primary" data-tab="weapons">
<!-- WEAPONS -->
+9 -10
View File
@@ -43,10 +43,10 @@
</div>
</div>
<div class="ship-stats-grid">
<div class="ship-stats-grid" style="margin-top: 10px;">
<!-- Stats -->
<div class="grid grid-1col widegap">
<div class="grid grid-1col widegap" style="width: 98%;">
<!-- Armor -->
<div class="mainstatwrapper">
<div class="resource mainstat">
@@ -59,7 +59,7 @@
</div>
<input class="mainstatmod-input" type="text" name="data.stats.armor.mod"
value="{{data.stats.armor.mod}}" data-dtype="Number" />
<div class="mainstatmod-title">mod</div>
<div class="mainstatmod-title">+</div>
</div>
<!-- Speed -->
@@ -74,7 +74,7 @@
</div>
<input class="mainstatmod-input" type="text" name="data.stats.speed.mod"
value="{{data.stats.speed.mod}}" data-dtype="Number" />
<div class="mainstatmod-title">mod</div>
<div class="mainstatmod-title">+</div>
</div>
<!-- Intellect -->
@@ -89,7 +89,7 @@
</div>
<input class="mainstatmod-input" type="text" name="data.stats.intellect.mod"
value="{{data.stats.intellect.mod}}" data-dtype="Number" />
<div class="mainstatmod-title">mod</div>
<div class="mainstatmod-title">+</div>
</div>
<!-- Combat -->
@@ -104,14 +104,13 @@
</div>
<input class="mainstatmod-input" type="text" name="data.stats.combat.mod"
value="{{data.stats.combat.mod}}" data-dtype="Number" />
<div class="mainstatmod-title">mod</div>
<div class="mainstatmod-title">+</div>
</div>
</div>
<div style="display: grid;">
<br />
<div class="grid grid-1col">
<!-- Hull -->
<div class="resource healthspread minmaxtopstat flex-center">
<div class="resource healthspread minmaxtopstat flex-center" style="grid-template-rows: 12px 19px;">
<label for="data.supplies.hull.value" class="resource-label minmaxtext">Hull</label>
<div class="faded-label">{{data.supplies.hull.percentage}}</div>
@@ -159,7 +158,7 @@
</div>
</div>
<div class="creature-abilities" style="height: 300px;">
<div class="creature-abilities" style="height: 220px;">
<div class="creature-ability-container creature-ability-title">Notes</div>
<div class="whiteline"></div>
{{#each abilities as |ability id|}}
+7
View File
@@ -104,4 +104,11 @@
<div class="body">{{{item.data.description}}}</div>
</div>
{{/if}}
{{#if data.panic}}
<div class="description">
<div class="header padding" style="color: red;">Panic</div>
<div class="body">{{{data.panicText}}}</div>
<br/>
</div>
{{/if}}
</div>
+26
View File
@@ -0,0 +1,26 @@
<form class="{{cssClass}}" autocomplete="off">
<header class="sheet-header">
<img class="profile-img" src="{{img}}" data-edit="img" title="{{name}}"/>
<div class="header-fields">
<h1 class="charname"><input name="name" type="text" value="{{name}}" placeholder="Name"/></h1>
<div class="resource">
<label class="resource-label">Description</label>
<input type="text" name="data.description" value="{{data.description}}" data-dtype="Text"/>
</div>
</div>
</header>
<!-- {{!-- Sheet Tab Navigation --}}
<nav class="sheet-tabs tabs" data-group="primary">
<a class="item" data-tab="description">Description</a>
</nav>
{{!-- Sheet Body --}}
<section class="sheet-body">
{{!-- Description Tab --}}
<div class="tab" data-group="primary" data-tab="description">
{{editor content=data.description target="data.description" button=true owner=owner editable=true}}
</div>
</section> -->
</form>