Initial system development

This commit is contained in:
sladecraven 2021-01-18 22:05:02 +01:00
parent ca29af6b61
commit e78b2ac67d
15 changed files with 481 additions and 363 deletions

BIN
fonts/garamond.ttf Normal file

Binary file not shown.

BIN
fonts/neuropol.ttf Normal file

Binary file not shown.

59
img/icons/filter.svg Normal file
View File

@ -0,0 +1,59 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="12.5243mm"
height="11.2895mm"
viewBox="0 0 71 64"
version="1.1"
id="svg3"
sodipodi:docname="filter.svg"
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)">
<metadata
id="metadata9">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs7" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1818"
inkscape:window-height="1345"
id="namedview5"
showgrid="false"
inkscape:zoom="13.039316"
inkscape:cx="23.667968"
inkscape:cy="21.334489"
inkscape:window-x="460"
inkscape:window-y="29"
inkscape:window-maximized="1"
inkscape:current-layer="svg3"
inkscape:document-rotation="0" />
<path
id="Sélection"
fill="none"
stroke="black"
stroke-width="1"
d="M 0,0 C 0,0 71,0 71,0 71,3.03 71.33,7.3 69.98,10 67.09,15.77 46.75,31.08 43.6,36 40.85,40.31 42,56.23 42,62 42,62 29,61 29,61 29,55.3 30.14,40.33 27.4,36 27.4,36 8,16 8,16 5.59,13.59 1.77,10.18 0.6,7 -0.12,5.05 0.01,2.1 0,0 Z m 52,15 c 0,0 -12,1 -12,1 0,0 -18,0 -18,0 1.31,4.38 11.04,15.49 16,13.84 C 42.71,28.26 50.6,19.77 52,15 Z"
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1" />
</svg>

After

Width:  |  Height:  |  Size: 2.0 KiB

60
img/icons/locked.svg Normal file
View File

@ -0,0 +1,60 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="24"
height="24"
viewBox="0 0 74.999964 74.999964"
version="1.1"
id="svg3"
sodipodi:docname="locked.svg"
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)">
<metadata
id="metadata9">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs7" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="3840"
inkscape:window-height="2066"
id="namedview5"
showgrid="false"
inkscape:zoom="11.84917"
inkscape:cx="66.242132"
inkscape:cy="3.3681778"
inkscape:window-x="-11"
inkscape:window-y="-11"
inkscape:window-maximized="1"
inkscape:current-layer="svg3"
inkscape:document-rotation="0"
units="px" />
<path
id="Sélection #1"
fill="none"
stroke="#000000"
stroke-width="0.43031"
d="m 17.920882,31.968974 c -0.275398,-1.686814 -0.02152,-6.407314 0.253883,-8.175887 1.613662,-10.314528 8.033886,-24.37275369 20.400992,-23.77462269 11.489274,0.5551 17.423247,13.45579069 19.041212,23.34431269 0.309823,1.919182 0.619646,6.773077 0.322733,8.606197 0,0 4.303099,0 4.303099,0 0,0 0,43.030993 0,43.030993 0,0 -49.485638,0 -49.485638,0 0,0 0,-43.030993 0,-43.030993 0,0 5.163719,0 5.163719,0 z m 36.146031,0 c 0,-7.517513 -1.080078,-14.703688 -5.38748,-21.085184 C 46.23097,7.2562774 43.124132,4.5453244 38.575757,4.4334444 26.699204,4.1451364 21.810883,19.614778 21.793671,29.387115 c 0,0 0,2.581859 0,2.581859 0,0 32.273242,0 32.273242,0 z"
style="fill:#000000;fill-opacity:1;stroke:#1a1a1a;stroke-opacity:1;opacity:1" />
</svg>

After

Width:  |  Height:  |  Size: 2.3 KiB

63
img/icons/no-filter.svg Normal file
View File

@ -0,0 +1,63 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="12.5243mm"
height="11.2895mm"
viewBox="0 0 71 64"
version="1.1"
id="svg3"
sodipodi:docname="no-filter.svg"
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)">
<metadata
id="metadata9">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs7" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1818"
inkscape:window-height="1345"
id="namedview5"
showgrid="false"
inkscape:zoom="23.294527"
inkscape:cx="23.667968"
inkscape:cy="14.465922"
inkscape:window-x="630"
inkscape:window-y="276"
inkscape:window-maximized="1"
inkscape:current-layer="svg3"
inkscape:document-rotation="0" />
<path
id="Sélection"
fill="none"
stroke="black"
stroke-width="1"
d="M 0.00,0.00 C 0.00,0.00 71.00,0.00 71.00,0.00 71.00,3.03 71.33,7.30 69.98,10.00 67.09,15.77 46.75,31.08 43.60,36.00 40.85,40.31 42.00,56.23 42.00,62.00 42.00,62.00 29.00,61.00 29.00,61.00 29.00,55.30 30.14,40.33 27.40,36.00 27.40,36.00 8.00,16.00 8.00,16.00 5.59,13.59 1.77,10.18 0.60,7.00 -0.12,5.05 0.01,2.10 0.00,0.00 Z M 52.00,15.00 C 52.00,15.00 40.00,16.00 40.00,16.00 40.00,16.00 22.00,16.00 22.00,16.00 23.31,20.38 33.04,31.49 38.00,29.84 42.71,28.26 50.60,19.77 52.00,15.00 Z"
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1" />
<path
style="fill:#6c0000;stroke:#6c0000;stroke-width:1.49992px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.5;fill-opacity:1"
d="M 47.004186,-2.0604574 10.753012,51.897773 14.551981,55.052848 56.920138,-6.3101511 52.090941,-8.4993871 Z"
id="path834" />
</svg>

After

Width:  |  Height:  |  Size: 2.6 KiB

64
img/icons/unlocked.svg Normal file
View File

@ -0,0 +1,64 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="26.240078"
height="24.137722"
viewBox="0 0 82.000206 75.430344"
version="1.1"
id="svg3"
sodipodi:docname="unlocked.svg"
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)">
<metadata
id="metadata9">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs7" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1818"
inkscape:window-height="1345"
id="namedview5"
showgrid="false"
inkscape:zoom="9.407583"
inkscape:cx="32.22484"
inkscape:cy="24.325892"
inkscape:window-x="630"
inkscape:window-y="276"
inkscape:window-maximized="1"
inkscape:current-layer="svg3"
inkscape:document-rotation="0"
units="px"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0" />
<path
id="Sélection #1"
fill="none"
stroke="#000000"
stroke-width="0.430321"
d="m 41.525985,32.183078 c -0.757365,-3.180073 0.619662,-10.938762 1.600794,-14.200596 1.097319,-3.636213 2.990736,-7.836147 5.422046,-10.7580268 1.36842,-1.639523 3.63191,-3.85998 5.45647,-4.957299 2.39689,-1.44587897 5.38332,-2.17312097 8.1761,-2.03541897 9.56174,0.460444 15.50017,9.83713977 17.88845,18.18106577 1.04138,3.636213 1.32539,5.723271 1.4717,9.467064 0.0645,0.933797 0.50347,2.891758 0,3.614697 -0.667,0.890765 -2.86164,0.688514 -3.86859,0.688514 0,-7.620987 -1.35551,-15.23767 -5.99007,-21.516054 -2.30652,-3.1198278 -5.46077,-5.8308508 -9.50149,-6.0072828 -4.9573,-0.21516 -8.35253,2.543198 -11.09798,6.4376038 -4.39788,6.239655 -5.684541,13.615359 -5.684541,21.085733 0,0 4.303211,0 4.303211,0 0,0 0,43.032105 0,43.032105 0,0 -49.4869245,0 -49.4869245,0 0,0 0,-43.032105 0,-43.032105 0,0 41.3108245,0 41.3108245,0 z"
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:0.5" />
</svg>

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

View File

@ -5,6 +5,16 @@
"SHEET.TabGears": "Gears",
"SHEET.TabDescription": "Description",
"SCORES.Edge": "Edge",
"SCORES.Wealth": "Wealth",
"SCORES.Lifestyle": "Lifestyle",
"SCORES.Defense": "Defense",
"SCORES.DR": "DR",
"SCORES.Totalwounds": "Totalwounds",
"SCORES.Shock": "Shock",
"SCORES.Wounds": "Wounds",
"SCORES.Encumbrance": "Encumbrance",
"STATS.physical": "physical",
"STATS.mental": "mental",
"STATS.strength": "Strength",

View File

@ -16,14 +16,17 @@ export class SoSActorSheet extends ActorSheet {
width: 640,
//height: 720,
tabs: [{ navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "stats" }],
dragDrop: [{ dragSelector: ".item-list .item", dropSelector: null }]
dragDrop: [{ dragSelector: ".item-list .item", dropSelector: null }],
editStatSkill: false
});
}
/* -------------------------------------------- */
getData() {
let data = super.getData();
data.data.edgecard = this.actor.getEdgesCard();
data.data.editStatSkill = this.options.editStatSkill;
console.log("stats", data);
//data.stats = duplicate(this.actor.stats);
//data.scores = duplicate(this.actor.scores);
@ -58,6 +61,21 @@ export class SoSActorSheet extends ActorSheet {
const li = $(ev.currentTarget).parents(".item");
RdDUtility.confirmerSuppression(this, li);
});
html.find('.stat-label a').click((event) => {
let statName = event.currentTarget.attributes.name.value;
this.actor.rollStat(statName);
});
html.find('.edge-draw').click((event) => {
this.actor.drawEdge();
this.render(true);
});
html.find('.lock-unlock-sheet').click((event) => {
this.options.editStatSkill = !this.options.editStatSkill;
this.render(true);
});
}
/* -------------------------------------------- */

View File

@ -1,3 +1,4 @@
import { SoSCardDeck } from "./sos-card-deck.js";
import { SoSUtility } from "./sos-utility.js";
@ -36,18 +37,95 @@ export class SoSActor extends Actor {
}
/* -------------------------------------------- */
prepareData() {
async prepareData() {
super.prepareData();
const actorData = this.data;
if ( !this.cardDeck ) {
this.cardDeck = new SoSCardDeck();
this.cardDeck.initCardDeck( this );
}
this.controlScores();
}
/* -------------------------------------------- */
getEdgesCard( ) {
let edgesCard = duplicate(this.cardDeck.data.cardEdge);
for (let edge of edgesCard) {
edge.path = `systems/foundryvtt-shadows-over-sol/img/cards/${edge.cardName}.webp`
}
return edgesCard;
}
/* -------------------------------------------- */
drawEdge( ) {
this.cardDeck.drawEdge();
}
/* -------------------------------------------- */
/**
* Prepare Character type specific data
*/
async _prepareCharacterData(actorData) {
// Initialize empty items
getDefense( ) {
return this.data.data.scores.defense;
}
/* -------------------------------------------- */
computeDefense() {
return { value: Math.ceil((this.data.data.stats.speed.value + this.data.data.stats.perception.value + this.data.data.stats.dexterity.value) / 2),
critical: this.data.data.stats.speed.value + this.data.data.stats.perception.value + this.data.data.stats.dexterity.value
}
}
/* -------------------------------------------- */
getEdge( ) {
return this.data.data.scores.edge.value;
}
/* -------------------------------------------- */
getEncumbrance( ) {
return this.data.data.scores.encumbrance.value;
}
/* -------------------------------------------- */
computeEdge( ) {
return Math.ceil( (this.data.data.stats.intelligence.value + this.data.data.stats.charisma.value) / 2);
}
/* -------------------------------------------- */
getShock( ) {
return this.data.data.scores.shock.value;
}
computeShock() {
return Math.ceil( this.data.data.stats.endurance.value + this.data.data.stats.determination.value + this.data.data.scores.dr.value);
}
/* -------------------------------------------- */
getWound( ) {
return this.data.data.scores.wound.value;
}
computeWound() {
return Math.ceil( (this.data.data.stats.strength.value + this.data.data.stats.endurance.value) / 2);
}
/* -------------------------------------------- */
async controlScores() {
// Defense check
let defenseData = this.getDefense();
let newDefenseData = this.computeDefense();
if ( defenseData.value != newDefenseData.value || defenseData.critical != newDefenseData.critical) {
await this.update( {'data.scores.defense': newDefenseData});
}
// Edge check
if ( this.getEdge() != this.computeEdge() ) {
await this.update( {'data.scores.edge.value': this.computeEdge()});
}
// Encumbrance
if ( this.getEncumbrance() != this.data.data.stats.strength.value ) {
await this.update( {'data.scores.encumbrance.value': this.data.data.stats.strength.value });
}
// Shock
if ( this.getShock() != this.computeShock() ) {
await this.update( {'data.scores.shock.value': this.computeShock() });
}
// Wounds
if ( this.getWound() != this.computeWound() ) {
await this.update( {'data.scores.wound.value': this.computeWound() });
}
}
/* -------------------------------------------- */
rollStat( statKey ) {
console.log("STAT", this);
let result = this.cardDeck.doFlipStat( duplicate(this.data.data.stat[statKey]) );
}
}

View File

@ -4,45 +4,66 @@ const NB_POKER_CARD = 54;
const IDX2CARDFAMILY = ['c', 'd', 'h', 's'];
/* -------------------------------------------- */
export class SoSCardDeck extends Application {
export class SoSCardDeck {
/* -------------------------------------------- */
static async create(data, options) {
data.deck = [];
data.discard = [];
data.cardState = [];
return super.create(data, options);
initCardDeck(actor) {
this.data = {};
this.data.deck = [];
this.data.discard = [];
this.data.cardState = [];
this.data.cardEdge = [];
this.data.actor = actor;
this.shuffleDeck();
}
/* -------------------------------------------- */
shuffleDeck() {
this.cleanCardList();
// Randomize deck
while (data.deck.length != NB_POKER_CARD) {
while (this.data.deck.length != NB_POKER_CARD) {
let idx = new Roll("1d54").roll().total;
if (!this.data.cardState[idx - 1]) {
if (idx == 53) { // Red Joker
data.deck.push = { cardName: 'jr' }
this.data.deck.push( { cardName: 'jr' } );
} else if (idx == 54) { // Black Joker
data.deck.push = { cardName: 'jb' }
this.data.deck.push({ cardName: 'jb' });
} else {
let familyIdx = idx % 4;
let cardName = IDX2CARDFAMILY[familyIdx] + String((idx % 13) + 1);
data.deck.push = { cardName: cardName }
let cardIdx = String( (idx % 13) + 1);
cardIdx = (cardIdx.length < 2) ? "0"+cardIdx: cardIdx;
let cardName = IDX2CARDFAMILY[familyIdx] + cardIdx;
this.data.deck.push( { cardName: cardName } );
}
this.data.cardState[idx - 1] = true;
}
}
}
}
/* -------------------------------------------- */
drawEdge() {
this.data.cardEdge.push( this.data.deck.pop() );
this.data.cardEdge.push( this.data.deck.pop() );
console.log("DRAW EDGE", this.data.cardEdge);
}
/* -------------------------------------------- */
cleanCardList() {
data.discard = []; // Reinit discard pile
data.deck = [];
this.data.discard = []; // Reinit discard pile
this.data.deck = [];
for (let i = 0; i < NB_POKER_CARD; i++) {
data.cardState[i] = false;
this.data.cardState[i] = false;
}
}
/* -------------------------------------------- */
doFlipStat( statData ) {
let card = this.data.deck.pop();
this.data.discard.push( card );
console.log("CARD IS : ", card, this.data.deck.length );
}
}

View File

@ -1,53 +1,37 @@
/* ==================== (A) Fonts ==================== */
@font-face {
font-family: "GoudyAcc";
src: url('../fonts/goudyacc.ttf') format("truetype");
font-family: "Garamond";
src: url('../fonts/garamond.ttf') format("truetype");
}
@font-face {
font-family: "MedievalSharp";
src: url('../fonts/MedievalSharp.ttf') format("truetype");
}
@font-face {
font-family: "GrenzeGotisch";
src: url('../fonts/GrenzeGotisch-Regular.ttf') format("truetype");
}
@font-face {
font-family: "Fondamento";
src: url('../fonts/Fondamento.ttf') format("truetype");
}
@font-face {
font-family: "CaslonAntique";
src: url('../fonts/CaslonAntique.ttf') format("truetype");
}
@font-face {
font-family: "heures Draconiques";
src: url('../fonts/heures_draconiques.ttf') format("truetype");
font-family: "Neuropol";
src: url('../fonts/neuropol.ttf') format("truetype");
}
:root {
/* =================== 1. ACTOR SHEET FONT STYLES =========== */
--window-header-title-font-family: CaslonAntique;
--window-header-title-font-family: Neuropol;
--window-header-title-font-size: 1.5rem;
--window-header-title-font-weight: normal;
--window-header-title-color: #f5f5f5;
--major-button-font-family: CaslonAntique;
--major-button-font-family: Garamond;
--major-button-font-size: 1.25rem;
--major-button-font-weight: normal;
--major-button-color: #dadada;
--tab-header-font-family: CaslonAntique;
--tab-header-font-family: Garamond;
--tab-header-font-size: 1.2rem;
--tab-header-font-weight: 700;
--tab-header-color: #403f3e;
--tab-header-color-active: #4a0404;
--actor-input-font-family: CaslonAntique;
--actor-input-font-family: Garamond;
--actor-input-font-size: 1.2rem;
--actor-input-font-weight: 500;
--actor-input-color: black;
--actor-label-font-family: CaslonAntique;
--actor-label-font-family: Garamond;
--actor-label-font-size: 1.2rem;
--actor-label-font-weight: 700;
--actor-label-color: #464331c4;
@ -65,17 +49,17 @@
/*@import url("https://fonts.googleapis.com/css2?family=Martel:wght@400;800&family=Roboto:wght@300;400;500&display=swap");*/
/* Global styles & Font */
.window-app {
font-family: CaslonAntique;
font-family: Garamond;
text-align: justify;
font-size: 16px;
letter-spacing: 1px;
}
/* Fonts */
.sheet header.sheet-header h1 input, .window-app .window-header, #actors .directory-list, #navigation #scene-list .scene.nav-item {font-family: "GoudyAcc"} /* For title, sidebar character and scene */
.sheet nav.sheet-tabs {font-family: "CaslonAntique";} /* For nav and title */
.window-app input, .foundryvtt-reve-de-dragon .item-form, .sheet header.sheet-header .flex-group-center.flex-compteurs, .sheet header.sheet-header .flex-group-center.flex-fatigue, select, button, .item-checkbox, #sidebar, #players, #navigation #nav-toggle {
font-family: "CaslonAntique"; /* For sheet parts */
.sheet header.sheet-header h1 input, .window-app .window-header, #actors .directory-list, #navigation #scene-list .scene.nav-item {font-family: "Neuropol"} /* For title, sidebar character and scene */
.sheet nav.sheet-tabs {font-family: "Garamond";} /* For nav and title */
.window-app input, .foundryvtt-shadows-over-sol .item-form, .sheet header.sheet-header .flex-group-center.flex-compteurs, .sheet header.sheet-header .flex-group-center.flex-fatigue, select, button, .item-checkbox, #sidebar, #players, #navigation #nav-toggle {
font-family: "Garamond"; /* For sheet parts */
}
.window-header{
@ -209,7 +193,7 @@ table {border: 1px solid #7a7971;}
/* Styles limited to foundryvtt-reve-de-dragon sheets */
.foundryvtt-reve-de-dragon .sheet-header {
.foundryvtt-shadows-over-sol .sheet-header {
-webkit-box-flex: 0;
-ms-flex: 0 0 210px;
flex: 0 0 210px;
@ -229,7 +213,7 @@ table {border: 1px solid #7a7971;}
margin-bottom: 10px;
}
.foundryvtt-reve-de-dragon .sheet-header .profile-img {
.foundryvtt-shadows-over-sol .sheet-header .profile-img {
-webkit-box-flex: 0;
-ms-flex: 0 0 128px;
flex: 0 0 128px;
@ -240,6 +224,12 @@ table {border: 1px solid #7a7971;}
object-position: 50% 0;
}
.card-img {
height: 128px;
width: 90px;
margin-right: 10px;
}
.button-img {
vertical-align: baseline;
width: 8%;
@ -263,34 +253,34 @@ table {border: 1px solid #7a7971;}
vertical-align: bottom;
}
.foundryvtt-reve-de-dragon .sheet-header .header-fields {
.foundryvtt-shadows-over-sol .sheet-header .header-fields {
-webkit-box-flex: 1;
-ms-flex: 1;
flex: 1;
}
.foundryvtt-reve-de-dragon .sheet-header h1.charname {
.foundryvtt-shadows-over-sol .sheet-header h1.charname {
height: 50px;
padding: 0px;
margin: 5px 0;
border-bottom: 0;
}
.foundryvtt-reve-de-dragon .sheet-header h1.charname input {
.foundryvtt-shadows-over-sol .sheet-header h1.charname input {
width: 100%;
height: 100%;
margin: 0;
}
.foundryvtt-reve-de-dragon .sheet-tabs {
.foundryvtt-shadows-over-sol .sheet-tabs {
-webkit-box-flex: 0;
-ms-flex: 0;
flex: 0;
}
.foundryvtt-reve-de-dragon .sheet-body,
.foundryvtt-reve-de-dragon .sheet-body .tab,
.foundryvtt-reve-de-dragon .sheet-body .tab .editor {
.foundryvtt-shadows-over-sol .sheet-body,
.foundryvtt-shadows-over-sol .sheet-body .tab,
.foundryvtt-shadows-over-sol .sheet-body .tab .editor {
height: 100%;
}
@ -312,69 +302,69 @@ table {border: 1px solid #7a7971;}
padding: 0 3px;
}
.foundryvtt-reve-de-dragon .tox .tox-editor-container {
.foundryvtt-shadows-over-sol .tox .tox-editor-container {
background: #fff;
}
.foundryvtt-reve-de-dragon .tox .tox-edit-area {
.foundryvtt-shadows-over-sol .tox .tox-edit-area {
padding: 0 8px;
}
.foundryvtt-reve-de-dragon .resource-label {
.foundryvtt-shadows-over-sol .resource-label {
font-weight: bold;
text-transform: uppercase;
}
.foundryvtt-reve-de-dragon .tabs {
.foundryvtt-shadows-over-sol .tabs {
height: 40px;
border-top: 1px solid #AAA;
border-bottom: 1px solid #AAA;
}
.foundryvtt-reve-de-dragon .tabs .item {
.foundryvtt-shadows-over-sol .tabs .item {
line-height: 40px;
font-weight: bold;
}
.foundryvtt-reve-de-dragon .tabs .item.active {
.foundryvtt-shadows-over-sol .tabs .item.active {
text-decoration: underline;
text-shadow: none;
}
.foundryvtt-reve-de-dragon .items-list {
.foundryvtt-shadows-over-sol .items-list {
list-style: none;
margin: 7px 0;
padding: 0;
overflow-y: auto;
}
.foundryvtt-reve-de-dragon .items-list .item-header {
.foundryvtt-shadows-over-sol .items-list .item-header {
font-weight: bold;
}
.foundryvtt-reve-de-dragon .items-list .item {
.foundryvtt-shadows-over-sol .items-list .item {
height: 30px;
line-height: 24px;
padding: 3px 0;
border-bottom: 1px solid #BBB;
}
.foundryvtt-reve-de-dragon .items-list .item .item-image {
.foundryvtt-shadows-over-sol .items-list .item .item-image {
-webkit-box-flex: 0;
-ms-flex: 0 0 24px;
flex: 0 0 24px;
margin-right: 5px;
}
.foundryvtt-reve-de-dragon .items-list .item img {
.foundryvtt-shadows-over-sol .items-list .item img {
display: block;
}
.foundryvtt-reve-de-dragon .items-list .item-name {
.foundryvtt-shadows-over-sol .items-list .item-name {
margin: 0;
}
.foundryvtt-reve-de-dragon .items-list .item-controls {
.foundryvtt-shadows-over-sol .items-list .item-controls {
-webkit-box-flex: 0;
-ms-flex: 0 0 86px;
flex: 0 0 86px;
@ -746,7 +736,7 @@ ul, li {
.tokenhudext {
display: flex;
flex: 0 !important;
font-family: CaslonPro;
font-family: Neuropol;
font-weight: 600;
}
.tokenhudext.left {
@ -984,279 +974,6 @@ ul, li {
border-image-outset: 0px;
}
/*--------------------------------------------------------------------------*/
/* CALENDAR STUFF */
#calendar-time-container{
position: absolute;
display: block;
}
#calendar{
min-width: 150px;
grid-row: 1;
grid-column: 1;
width: fit-content;
height: 84px;
margin: 0;
padding: 0;
border: 1px solid #000;
border-radius: 3%;
background: rgba(0, 0, 0, 0.5);
font-family: "GoudyAcc";
z-index: 100;
}
#calendar-hdr{
display: grid;
font-size: 1rem;
margin: 3px;
padding: 4px;
height: 25px;
width: fit-content;
min-width: 200px;
border-bottom: 1px solid #111;
color: #CCC;
float: left;
}
.calendar-date-rdd {
font-family: "GoudyAcc";
color: #CCC;
font-weight: bold;
font-size: 1.10rem;
opacity: 90;
}
#calendar--move-handle {
font-family: "GoudyAcc";
font-size: 13px;
line-height: 1;
text-align: center;
padding: 0;
margin: 0;
border: none;
flex: 1;
}
#calendar-date{
grid-row: 1;
grid-column: 2;
float: left;
text-align: center;
padding-top: 0px;
padding-bottom: 0px;
margin-bottom: 5px;
color: #CCC;
cursor: pointer;
}
#calendar-date,
#calendar-date-num {
transition: 0.2s;
}
#calendar-date-num {
grid-row: 1;
grid-column: 2;
float: left;
text-align: center;
padding-top: 0px;
padding-bottom: 0px;
margin-bottom: 5px;
color: #CCC;
opacity: 0;
cursor: pointer;
}
#calendar-heure-img{
width: 24px;
height: 24px;
flex-grow: 0;
border-width: 0;
opacity: 90;
color: #CCC;
}
#calendar-hdr:hover #calendar-date {
opacity: 0;
}
#calendar-hdr:hover #calendar-date-num{
opacity: 1;
}
.calendar-container{
padding-top: 3px;
padding-bottom: 20px;
}
.calendar-btn-container-left{
width: 20%;
display: grid;
float: left;
margin: 2px;
grid-row-gap: 3px;
color: rgba(0, 0, 0, 0.5);
}
.calendar-btn-container-right{
width: 20%;
display: grid;
float: right;
margin: 2px;
grid-row-gap: 3px;
}
#astrologie-btn-edit,
#calendar-btn-edit{
grid-row: 1;
grid-column: 1;
margin: auto;
color: rgba(0, 0, 0, 0.5);
}
#astrologie-btn-edit:hover,
#calendar-btn-edit:hover {
color: #FFF;
border: 0px solid #000;
cursor: pointer;
}
#calendar-btn-1min{
grid-row: 1;
grid-column: 1;
margin: auto;
color: rgba(0, 0, 0, 0.7);
}
#calendar-btn-5min{
grid-row: 1;
grid-column: 2;
margin: auto;
color: rgba(0, 0, 0, 0.7);
}
#calendar-btn-10min{
grid-row: 2;
grid-column: 1;
margin-left: 10px;
color: rgba(0, 0, 0, 0.7);
}
#calendar-btn-20min{
grid-row: 2;
grid-column: 2;
margin-left: 10px;
color: rgba(0, 0, 0, 0.7);
}
#calendar-btn-lyre{
grid-row: 1;
grid-column: 1;
height: fit-content;
text-align: center;
vertical-align: center;
color: rgba(0, 0, 0, 0.7);
}
#calendar-btn-vaisseau{
grid-row: 1;
grid-column: 2;
height: fit-content;
text-align: center;
vertical-align: center;
color: rgba(0, 0, 0, 0.7);
}
#calendar-btn-30min{
grid-row: 2;
grid-column: 1;
height: fit-content;
text-align: center;
vertical-align: center;
color: rgba(0, 0, 0, 0.7);
}
#calendar-btn-1heure{
grid-row: 2;
grid-column: 2;
height: fit-content;
text-align: center;
vertical-align: center;
color: rgba(0, 0, 0, 0.7);
}
#calendar-btn-container-left:hover{
color: #FFF;
border: 0px solid #000;
cursor: pointer;
}
#calendar-btn-1min:hover {
color: #FFF;
border: 0px solid #000;
cursor: pointer;
}
#calendar-btn-5min:hover {
color: #FFF;
border: 0px solid #000;
cursor: pointer;
}
#calendar-btn-10min:hover {
color: #FFF;
border: 0px solid #000;
cursor: pointer;
}
#calendar-btn-20min:hover {
color: #FFF;
border: 0px solid #000;
cursor: pointer;
}
#calendar-btn-30min:hover {
color: #FFF;
border: 0px solid #000;
cursor: pointer;
}
#calendar-btn-1heure:hover {
color: #FFF;
border: 0px solid #000;
cursor: pointer;
}
#calendar-btn-vaisseau:hover {
color: #FFF;
border: 0px solid #000;
cursor: pointer;
}
#calendar-btn-lyre:hover{
color: #FFF;
border: 0px solid #000;
cursor: pointer;
}
.calendar-weekday-time{
display: grid;
float: left;
width: 55%;
padding-top: 0px;
padding-bottom: 0px;
margin: auto;
color: #CCC;
}
#calendar-weekday{
grid-column: 1;
grid-row: 1;
text-align: center;
margin: auto;
border-bottom: 1px solid #111;
}
.calendar-time{
grid-column: 1;
grid-row: 2;
font-size: 1.10rem;
text-align: center;
margin: auto;
cursor: pointer;
display: inline-flex;
}
.calendar-nombre-astral{
grid-column: 2;
grid-row: 2;
font-size: 1.10rem;
text-align: right;
margin: auto;
cursor: pointer;
display: inline-flex;
}
.calendar-time-disp{
position: relative;
bottom: 6px;
}
/* Tooltip container */
.tooltip {
@ -1328,7 +1045,7 @@ display: inline-flex;
display: inline-block;
cursor: pointer;
color: #ffffff;
font-family: CaslonPro;
font-family: Neuropol;
font-size: 14px;
padding: 4px 12px 0px 12px;
text-decoration: none;
@ -1349,7 +1066,7 @@ display: inline-flex;
/*************************************************************/
#pause
{
font-family: CaslonAntique;
font-family: Neuropol;
font-size: 2rem;
}
#pause > h3
@ -1357,7 +1074,7 @@ display: inline-flex;
color: #CCC
}
#pause > img {
content: url(img/rdd_pause.png);
content: url(../img/logos/sos_logo_small.webp);
height: 256px;
width: 256px;
top: -75px;
@ -1365,7 +1082,7 @@ display: inline-flex;
}
#logo {
content : url(img/logo.png);
width: 80px;
height: 68px;
content : url(../img/logos/sos_logo_small.webp);
width: 70px;
height: 60px;
}

View File

@ -2,11 +2,11 @@
"name": "foundryvtt-shadows-over-sol",
"title": "Shadows over Sol",
"description": "Shadows over Sol for FoundryVTT",
"version": "0.0.4",
"version": "0.0.5",
"manifestPlusVersion": "1.0.0",
"minimumCoreVersion": "0.7.5",
"compatibleCoreVersion": "0.7.9",
"templateVersion": 4,
"templateVersion": 5,
"author": "LeRatierBretonnien",
"esmodules": [ "module/sos-main.js" ],
"styles": ["styles/simple.css"],

View File

@ -73,31 +73,40 @@
},
"scores": {
"edge": {
"label": "SCORES.Edge",
"value": 0
},
"wealth": {
"label": "SCORES.Wealth",
"value": 0
},
"lifestyle": {
"label": "SCORES.Lifestyle",
"value": 0
},
"defense": {
"value1": 0,
"value2": 0
"label": "SCORES.Defense",
"value": 0,
"critical": 0
},
"dr": {
"label": "SCORES.DR",
"value": 0
},
"shock": {
"label": "SCORES.Shock",
"value": 0
},
"totalwounds": {
"label": "SCORES.Totalwounds",
"value": 0
},
"wound": {
"label": "SCORES.Wounds",
"value": 0
},
"encumbrance": {
"label": "SCORES.Encumbrance",
"value": 0
}
}

View File

@ -41,8 +41,8 @@
{{else}}
<li class="stat flexrow list-item" data-attribute="{{key}}">
{{/if}}
<a name={{key}}>{{localize stat.label}}</a></span>
<select class="stat-value flexrow" type="text" name="data.stats.{{key}}.value" value="{{stat.value}}" data-dtype="Number">
<span class="stat-label flexrow tooltip tooltip-nobottom" name="data.stat.{{key}}.label"><a name={{key}}>{{localize stat.label}}</a></span>
<select class="stat-value flexrow" type="text" name="data.stats.{{key}}.value" value="{{stat.value}}" data-dtype="Number" {{#unless @root.data.editStatSkill}}disabled{{/unless}}>
{{#select stat.value}}
{{>"systems/foundryvtt-shadows-over-sol/templates/stat-option-list.html"}}
{{/select}}
@ -52,7 +52,26 @@
{{/each}}
</ul>
</div>
<div class="flex-group-left flexcol">
<ul class="stat-list alternate-list">
{{#each data.scores as |score key|}}
<li class="stat flexrow list-item" data-attribute="{{key}}">
<span class="stat-label flexrow tooltip tooltip-nobottom" name="data.scores.{{key}}.label"><a name={{key}}>{{localize score.label}}</a></span>
<input class="stat-value flexrow" type="text" name="data.scores.{{key}}.xp" value="{{score.value}}" data-dtype="Number" {{#unless @root.data.editStatSkill}}disabled{{/unless}} />
</li>
{{/each}}
</ul>
</div>
</div>
<div>
<span class="edge-name">Edge cards</span><a class="edge-draw">Draw edge cards</a>
{{#each data.edgecard as |card key|}}
<img class="card-img" src="{{card.path}}" data-edit="img" title="{{card.cardName}}" />
{{/each}}
</span>
</div>
</div>
{{!-- Skills Tab --}}