From dc4429f3e1dcfc1e45a506481daf974f3bea0b71 Mon Sep 17 00:00:00 2001 From: LeRatierBretonnien Date: Mon, 10 Jun 2024 14:30:12 +0200 Subject: [PATCH] Various automations fixes --- lang/en.json | 19 +- modules/dark-stars-actor-sheet.js | 39 +- modules/dark-stars-actor.js | 111 +- modules/dark-stars-combat.js | 2 +- modules/dark-stars-config.js | 66 + modules/dark-stars-item-sheet.js | 6 +- modules/dark-stars-npc-sheet.js | 25 +- modules/dark-stars-roll-dialog.js | 12 +- modules/dark-stars-utility.js | 117 +- packs/aldebaran/{000166.log => 000186.log} | 0 packs/aldebaran/CURRENT | 2 +- packs/aldebaran/LOG | 14 +- packs/aldebaran/LOG.old | 14 +- .../{MANIFEST-000164 => MANIFEST-000184} | Bin 177 -> 177 bytes .../000179.log | 0 packs/beyondtheblacksea/CURRENT | 2 +- packs/beyondtheblacksea/LOG | 14 +- packs/beyondtheblacksea/LOG.old | 14 +- .../{MANIFEST-000157 => MANIFEST-000177} | Bin 177 -> 177 bytes .../000159.log => conditions/000232.log} | 0 packs/conditions/CURRENT | 2 +- packs/conditions/LOG | 14 +- packs/conditions/LOG.old | 14 +- packs/conditions/MANIFEST-000210 | Bin 69 -> 0 bytes packs/conditions/MANIFEST-000230 | Bin 0 -> 69 bytes .../000212.log => currency/000232.log} | 0 packs/currency/CURRENT | 2 +- packs/currency/LOG | 14 +- packs/currency/LOG.old | 14 +- packs/currency/MANIFEST-000210 | Bin 69 -> 0 bytes packs/currency/MANIFEST-000230 | Bin 0 -> 69 bytes .../000212.log => darkstars-sf/000044.log} | 0 packs/darkstars-sf/CURRENT | 2 +- packs/darkstars-sf/LOG | 16 +- packs/darkstars-sf/LOG.old | 16 +- packs/darkstars-sf/MANIFEST-000022 | Bin 139 -> 0 bytes packs/darkstars-sf/MANIFEST-000042 | Bin 0 -> 139 bytes .../000024.log => nightborough/000199.log} | 0 packs/nightborough/CURRENT | 2 +- packs/nightborough/LOG | 14 +- packs/nightborough/LOG.old | 14 +- .../{MANIFEST-000177 => MANIFEST-000197} | Bin 178 -> 178 bytes packs/sprawl/{000016.log => 000036.log} | 0 packs/sprawl/CURRENT | 2 +- packs/sprawl/LOG | 16 +- packs/sprawl/LOG.old | 16 +- packs/sprawl/MANIFEST-000014 | Bin 139 -> 0 bytes packs/sprawl/MANIFEST-000034 | Bin 0 -> 139 bytes styles/simple.css | 3013 +++++++++-------- system.json | 17 +- template.json | 7 + templates/actors/actor-sheet.hbs | 77 +- templates/actors/npc-sheet.hbs | 18 +- templates/apps/roll-dialog-generic.hbs | 102 +- templates/chat/chat-attack-defense-result.hbs | 75 - templates/chat/chat-attribute-result.hbs | 30 + templates/chat/chat-generic-result.hbs | 31 +- templates/chat/chat-opposed-fail.hbs | 11 - templates/chat/chat-opposition-result.hbs | 19 + templates/chat/chat-request-defense.hbs | 46 - templates/items/item-armor-sheet.hbs | 6 +- templates/items/item-cumulativetask-sheet.hbs | 33 + templates/items/item-cyber-sheet.hbs | 6 +- templates/items/item-genetic-sheet.hbs | 6 +- templates/items/item-job-sheet.hbs | 6 +- templates/items/item-perk-sheet.hbs | 6 +- templates/items/item-skill-sheet.hbs | 6 +- templates/items/item-spell-sheet.hbs | 6 +- templates/items/item-weapon-sheet.hbs | 24 +- .../partials/partial-actor-ability-block.hbs | 12 +- .../partials/partial-options-abilities.hbs | 7 - templates/partials/partial-options-level.hbs | 14 - templates/partials/partial-options-range.hbs | 15 - templates/partials/partial-roll-select.hbs | 4 - 74 files changed, 2260 insertions(+), 1952 deletions(-) rename packs/aldebaran/{000166.log => 000186.log} (100%) rename packs/aldebaran/{MANIFEST-000164 => MANIFEST-000184} (72%) rename packs/{nightborough => beyondtheblacksea}/000179.log (100%) rename packs/beyondtheblacksea/{MANIFEST-000157 => MANIFEST-000177} (72%) rename packs/{beyondtheblacksea/000159.log => conditions/000232.log} (100%) delete mode 100644 packs/conditions/MANIFEST-000210 create mode 100644 packs/conditions/MANIFEST-000230 rename packs/{conditions/000212.log => currency/000232.log} (100%) delete mode 100644 packs/currency/MANIFEST-000210 create mode 100644 packs/currency/MANIFEST-000230 rename packs/{currency/000212.log => darkstars-sf/000044.log} (100%) delete mode 100644 packs/darkstars-sf/MANIFEST-000022 create mode 100644 packs/darkstars-sf/MANIFEST-000042 rename packs/{darkstars-sf/000024.log => nightborough/000199.log} (100%) rename packs/nightborough/{MANIFEST-000177 => MANIFEST-000197} (71%) rename packs/sprawl/{000016.log => 000036.log} (100%) delete mode 100644 packs/sprawl/MANIFEST-000014 create mode 100644 packs/sprawl/MANIFEST-000034 delete mode 100644 templates/chat/chat-attack-defense-result.hbs create mode 100644 templates/chat/chat-attribute-result.hbs delete mode 100644 templates/chat/chat-opposed-fail.hbs create mode 100644 templates/chat/chat-opposition-result.hbs delete mode 100644 templates/chat/chat-request-defense.hbs create mode 100644 templates/items/item-cumulativetask-sheet.hbs delete mode 100644 templates/partials/partial-options-abilities.hbs delete mode 100644 templates/partials/partial-options-level.hbs delete mode 100644 templates/partials/partial-options-range.hbs delete mode 100644 templates/partials/partial-roll-select.hbs diff --git a/lang/en.json b/lang/en.json index 077404a..a5d79eb 100644 --- a/lang/en.json +++ b/lang/en.json @@ -1,3 +1,20 @@ { - + "TYPES": { + "Actor": { + "character": "Character" + }, + "Item": { + "armor": "Armor", + "weapon": "Weapon", + "equipment": "Equipment", + "skill": "Skill", + "perk": "Perk", + "ability": "Ability", + "cumulativetask": "Cumulative Task", + "genetic": "Genetic", + "money": "Money", + "cyber": "Cyber", + "ammo": "Ammo" + } + } } \ No newline at end of file diff --git a/modules/dark-stars-actor-sheet.js b/modules/dark-stars-actor-sheet.js index 8e68264..bcb292f 100644 --- a/modules/dark-stars-actor-sheet.js +++ b/modules/dark-stars-actor-sheet.js @@ -11,7 +11,7 @@ export class DarkStarsActorSheet extends ActorSheet { /** @override */ static get defaultOptions() { - return mergeObject(super.defaultOptions, { + return foundry.utils.mergeObject(super.defaultOptions, { classes: ["fvtt-dark-stars", "sheet", "actor"], template: "systems/fvtt-dark-stars/templates/actors/actor-sheet.hbs", width: 960, @@ -25,7 +25,7 @@ export class DarkStarsActorSheet extends ActorSheet { /* -------------------------------------------- */ async getData() { const objectData = this.object.system - let actorData = duplicate(objectData) + let actorData = foundry.utils.duplicate(objectData) let formData = { title: this.title, @@ -39,21 +39,23 @@ export class DarkStarsActorSheet extends ActorSheet { limited: this.object.limited, skills: this.actor.getSkills( ), perks: this.actor.getPerks( ), - weapons: this.actor.checkAndPrepareEquipments( duplicate(this.actor.getWeapons()) ), - ammos: this.actor.checkAndPrepareEquipments( duplicate(this.actor.getAmmos()) ), - spells: this.actor.checkAndPrepareEquipments( duplicate(this.actor.getSpells()) ), - powers: this.actor.checkAndPrepareEquipments( duplicate(this.actor.getPowers()) ), - armors: this.actor.checkAndPrepareEquipments( duplicate(this.actor.getArmors())), - shields: this.actor.checkAndPrepareEquipments( duplicate(this.actor.getShields())), - equipments: this.actor.checkAndPrepareEquipments(duplicate(this.actor.getEquipmentsOnly()) ), - equippedWeapons: this.actor.checkAndPrepareEquipments(duplicate(this.actor.getEquippedWeapons()) ), - cybers: this.actor.checkAndPrepareEquipments(duplicate(this.actor.getCybers()) ), - genetics: this.actor.checkAndPrepareEquipments(duplicate(this.actor.getGenetics()) ), + weapons: this.actor.checkAndPrepareEquipments( foundry.utils.duplicate(this.actor.getWeapons()) ), + ammos: this.actor.checkAndPrepareEquipments( foundry.utils.duplicate(this.actor.getAmmos()) ), + spells: this.actor.checkAndPrepareEquipments( foundry.utils.duplicate(this.actor.getSpells()) ), + powers: this.actor.checkAndPrepareEquipments( foundry.utils.duplicate(this.actor.getPowers()) ), + armors: this.actor.checkAndPrepareEquipments( foundry.utils.duplicate(this.actor.getArmors())), + shields: this.actor.checkAndPrepareEquipments( foundry.utils.duplicate(this.actor.getShields())), + equipments: this.actor.checkAndPrepareEquipments(foundry.utils.duplicate(this.actor.getEquipmentsOnly()) ), + equippedWeapons: this.actor.checkAndPrepareEquipments(foundry.utils.duplicate(this.actor.getEquippedWeapons()) ), + cybers: this.actor.checkAndPrepareEquipments(foundry.utils.duplicate(this.actor.getCybers()) ), + genetics: this.actor.checkAndPrepareEquipments(foundry.utils.duplicate(this.actor.getGenetics()) ), equippedArmor: this.actor.getEquippedArmor(), equippedShield: this.actor.getEquippedShield(), - subActors: duplicate(this.actor.getSubActors()), + subActors: foundry.utils.duplicate(this.actor.getSubActors()), encCapacity: this.actor.getEncumbranceCapacity(), conditions: this.actor.getConditions(), + tasks: this.actor.getCumulativeTasks(), + config: game.system.darkstars.config, description: await TextEditor.enrichHTML(this.object.system.biodata.description, {async: true}), notes: await TextEditor.enrichHTML(this.object.system.biodata.notes, {async: true}), containersTree: this.actor.containersTree, @@ -145,7 +147,16 @@ export class DarkStarsActorSheet extends ActorSheet { const skillId = li.data("item-id") this.actor.rollSkill(skillId) }); - + html.find('.roll-attribute').click((event) => { + const attrKey = $(event.currentTarget).data("attr-key") + this.actor.rollAttribute(attrKey) + }) + html.find('.start-cumulative-task').click((event) => { + const li = $(event.currentTarget).parents(".item") + const skillId = li.data("item-id") + this.actor.rollSkill(skillId, true) + }) + html.find('.roll-weapon').click((event) => { const li = $(event.currentTarget).parents(".item"); const skillId = li.data("item-id") diff --git a/modules/dark-stars-actor.js b/modules/dark-stars-actor.js index 8019bfa..ed5b2cc 100644 --- a/modules/dark-stars-actor.js +++ b/modules/dark-stars-actor.js @@ -43,8 +43,6 @@ export class DarkStarsActor extends Actor { } if (data.type == 'character') { - const skills = await DarkStarsUtility.loadCompendium("fvtt-dark-stars.skills"); - data.items = skills.map(i => i.toObject()) } if (data.type == 'npc') { } @@ -120,54 +118,59 @@ export class DarkStarsActor extends Actor { } getEquippedWeapons() { - let comp = duplicate(this.items.filter(item => item.type == 'weapon' && item.system.equipped) || []); + let comp = foundry.utils.duplicate(this.items.filter(item => item.type == 'weapon' && item.system.equipped) || []); DarkStarsUtility.sortArrayObjectsByName(comp) return comp; } /* -------------------------------------------- */ getArmors() { - let comp = duplicate(this.items.filter(item => item.type == 'armor') || []); + let comp = foundry.utils.duplicate(this.items.filter(item => item.type == 'armor') || []); DarkStarsUtility.sortArrayObjectsByName(comp) return comp; } getSpells() { - let comp = duplicate(this.items.filter(item => item.type == 'spell') || []); + let comp = foundry.utils.duplicate(this.items.filter(item => item.type == 'spell') || []); DarkStarsUtility.sortArrayObjectsByName(comp) return comp; } getPowers() { - let comp = duplicate(this.items.filter(item => item.type == 'psychic') || []); + let comp = foundry.utils.duplicate(this.items.filter(item => item.type == 'psychic') || []); DarkStarsUtility.sortArrayObjectsByName(comp) return comp; } + getCumulativeTasks() { + let comp = foundry.utils.duplicate(this.items.filter(item => item.type == 'cumulativetask') || []); + DarkStarsUtility.sortArrayObjectsByName(comp) + return comp; + } getEquippedArmor() { let comp = this.items.find(item => item.type == 'armor' && item.system.equipped) if (comp) { - return duplicate(comp) + return foundry.utils.duplicate(comp) } return undefined } /* -------------------------------------------- */ getCybers() { - let comp = duplicate(this.items.filter(item => item.type == 'cyber') || []); + let comp = foundry.utils.duplicate(this.items.filter(item => item.type == 'cyber') || []); DarkStarsUtility.sortArrayObjectsByName(comp) return comp; } getGenetics() { - let comp = duplicate(this.items.filter(item => item.type == 'genetic') || []); + let comp = foundry.utils.duplicate(this.items.filter(item => item.type == 'genetic') || []); DarkStarsUtility.sortArrayObjectsByName(comp) return comp; } /* -------------------------------------------- */ getShields() { - let comp = duplicate(this.items.filter(item => item.type == 'shield') || []); + let comp = foundry.utils.duplicate(this.items.filter(item => item.type == 'shield') || []); DarkStarsUtility.sortArrayObjectsByName(comp) return comp; } getEquippedShield() { let comp = this.items.find(item => item.type == 'shield' && item.system.equipped) if (comp) { - return duplicate(comp) + return foundry.utils.duplicate(comp) } return undefined } @@ -177,7 +180,7 @@ export class DarkStarsActor extends Actor { if (item.type == "weapon" && item.system.needammo) { let ammo = this.items.find(ammo => ammo.type == "ammo" && item.system.ammoid == ammo.id) if (ammo) { - item.ammo = duplicate(ammo) + item.ammo = foundry.utils.duplicate(ammo) } } } @@ -192,29 +195,34 @@ export class DarkStarsActor extends Actor { /* -------------------------------------------- */ getConditions() { - let comp = duplicate(this.items.filter(item => item.type == 'condition') || []); + let comp = foundry.utils.duplicate(this.items.filter(item => item.type == 'condition') || []); DarkStarsUtility.sortArrayObjectsByName(comp) return comp; } /* -------------------------------------------- */ getWeapons() { - let comp = duplicate(this.items.filter(item => item.type == 'weapon') || []); + let comp = foundry.utils.duplicate(this.items.filter(item => item.type == 'weapon') || []); DarkStarsUtility.sortArrayObjectsByName(comp) return comp; } /* -------------------------------------------- */ getAmmos() { - let comp = duplicate(this.items.filter(item => item.type == 'ammo') || []); + let comp = foundry.utils.duplicate(this.items.filter(item => item.type == 'ammo') || []); DarkStarsUtility.sortArrayObjectsByName(comp) return comp; } /* -------------------------------------------- */ - getItemById(id) { - let item = this.items.find(item => item.id == id); - if (item) { - item = duplicate(item) + getItemById(id, duplicate = true) { + let item = this.items.find(it => it.id == id) + if (item && duplicate) { + item = foundry.utils.duplicate(item) } - return item; + return item + } + /* -------------------------------------------- */ + getItem(id) { + let item = this.items.get(id) + return item } /* -------------------------------------------- */ setWeaponAmmo(weaponId, ammoId) { @@ -233,14 +241,14 @@ export class DarkStarsActor extends Actor { /* -------------------------------------------- */ updateSkill(skill) { - skill.derivated = duplicate(this.system.derivated[skill.system.base]) + skill.derivated = foundry.utils.duplicate(this.system.derivated[skill.system.base]) skill.total = skill.system.value + skill.derivated.value + skill.system.bonus } /* -------------------------------------------- */ getSkills() { this.computeDerivated() - let comp = duplicate(this.items.filter(item => item.type == 'skill') || []) + let comp = foundry.utils.duplicate(this.items.filter(item => item.type == 'skill') || []) for (let skill of comp) { this.updateSkill(skill) } @@ -250,7 +258,7 @@ export class DarkStarsActor extends Actor { /* -------------------------------------------- */ getPerks() { - let comp = duplicate(this.items.filter(item => item.type == 'perk') || []) + let comp = foundry.utils.duplicate(this.items.filter(item => item.type == 'perk') || []) DarkStarsUtility.sortArrayObjectsByName(comp) return comp } @@ -295,7 +303,7 @@ export class DarkStarsActor extends Actor { } /* ------------------------------------------- */ getEquipmentsOnly() { - return duplicate(this.items.filter(item => item.type == "equipment") || []) + return foundry.utils.duplicate(this.items.filter(item => item.type == "equipment") || []) } /* ------------------------------------------- */ @@ -321,7 +329,7 @@ export class DarkStarsActor extends Actor { /* ------------------------------------------- */ async buildContainerTree() { - let equipments = duplicate(this.items.filter(item => item.type == "equipment") || []) + let equipments = foundry.utils.duplicate(this.items.filter(item => item.type == "equipment") || []) for (let equip1 of equipments) { if (equip1.system.iscontainer) { equip1.system.contents = [] @@ -375,7 +383,7 @@ export class DarkStarsActor extends Actor { async incDecHP(formula) { let dmgRoll = new Roll(formula + "[dark-starsorange]").roll({ async: false }) await DarkStarsUtility.showDiceSoNice(dmgRoll, game.settings.get("core", "rollMode")) - let hp = duplicate(this.system.secondary.hp) + let hp = foundry.utils.duplicate(this.system.secondary.hp) hp.value = Number(hp.value) + Number(dmgRoll.total) this.update({ 'system.secondary.hp': hp }) return Number(dmgRoll.total) @@ -429,9 +437,10 @@ export class DarkStarsActor extends Actor { return this.items.find(i => i.type == "perk" && i.name.toLowerCase() === "last word") } /* -------------------------------------------- */ - getInitiativeScore() { + async getInitiativeScore() { let initFormula = (this.system.derivated.si.value + this.system.derivated.si.bonus) + "d6" - let initRoll = new Roll(initFormula).roll({ async: false }) + let initRoll = await new Roll(initFormula).roll() + await DarkStarsUtility.showDiceSoNice(initRoll, game.settings.get("core", "rollMode")) return initRoll.total } @@ -439,13 +448,13 @@ export class DarkStarsActor extends Actor { getSubActors() { let subActors = []; for (let id of this.system.subactors) { - subActors.push(duplicate(game.actors.get(id))) + subActors.push(foundry.utils.duplicate(game.actors.get(id))) } return subActors; } /* -------------------------------------------- */ async addSubActor(subActorId) { - let subActors = duplicate(this.system.subactors); + let subActors = foundry.utils.duplicate(this.system.subactors); subActors.push(subActorId); await this.update({ 'system.subactors': subActors }); } @@ -464,7 +473,7 @@ export class DarkStarsActor extends Actor { getOneSkill(skillId) { let skill = this.items.find(item => item.type == 'skill' && item.id == skillId) if (skill) { - skill = duplicate(skill); + skill = foundry.utils.duplicate(skill); } return skill; } @@ -560,7 +569,7 @@ export class DarkStarsActor extends Actor { /* -------------------------------------------- */ modifyRerolls( value) { - let rerolls = duplicate(this.system.various.rerolls) + let rerolls = foundry.utils.duplicate(this.system.various.rerolls) rerolls.value += value this.update({ 'system.various.rerolls': rerolls }) } @@ -576,7 +585,9 @@ export class DarkStarsActor extends Actor { let rollData = DarkStarsUtility.getBasicRollData() rollData.alias = this.name rollData.actorImg = this.img - rollData.actorId = this.id + console.log("Prepare common roll data for actor", this) + rollData.tokenId = this.token?.id + rollData.actorId = this.id rollData.img = this.img rollData.armors = this.getArmors() rollData.conditions = this.getConditions() @@ -616,24 +627,23 @@ export class DarkStarsActor extends Actor { } /* -------------------------------------------- */ - rollAbility(abilityKey) { - let rollData = this.getCommonRollData(abilityKey) - rollData.mode = "ability" - if (rollData.target) { - ui.notifications.warn("You are targetting a token with a skill : please use a Weapon instead.") - return - } - DarkStarsUtility.rollDarkStars(rollData) + rollAttribute(attrKey) { + let rollData = this.getCommonRollData() + rollData.attr = foundry.utils.duplicate(this.system.attributes[attrKey]) + rollData.mode = "attribute" + rollData.title = "Attribute " + rollData.attr.label + this.startRoll(rollData) } /* -------------------------------------------- */ - rollSkill(skillId) { + async rollSkill(skillId, isCumulative = false, taskId = undefined) { let skill = this.items.get(skillId) if (skill) { - skill = duplicate(skill) + skill = foundry.utils.duplicate(skill) this.updateSkill(skill) let rollData = this.getCommonRollData() rollData.mode = "skill" + rollData.isCumulative = isCumulative rollData.title = "Skill " + skill.name rollData.skill = skill rollData.img = skill.img @@ -641,6 +651,17 @@ export class DarkStarsActor extends Actor { ui.notifications.warn("You are targetting a token with a skill : please use a Weapon instead.") return } + if (isCumulative) { + rollData.title = "Cumulative Task " + skill.name + if (!taskId) { + let cumulativeTask = await this.createEmbeddedDocuments("Item", [{name: "Cumulative task " + skill.name, type: "cumulativetask", + 'system.skill': skill.name}]) + //console.log("Task", cumulativeTask) + rollData.taskId = cumulativeTask[0].id + }else { + rollData.taskId = cumulativeTask[0].id + } + } this.startRoll(rollData) } } @@ -649,10 +670,10 @@ export class DarkStarsActor extends Actor { rollWeapon(weaponId) { let weapon = this.items.get(weaponId) if (weapon) { - weapon = duplicate(weapon) + weapon = foundry.utils.duplicate(weapon) let skill = this.items.find(item => item.name.toLowerCase() == weapon.system.skill.toLowerCase()) if (skill) { - skill = duplicate(skill) + skill = foundry.utils.duplicate(skill) this.updateSkill(skill) let rollData = this.getCommonRollData() rollData.mode = "weapon" diff --git a/modules/dark-stars-combat.js b/modules/dark-stars-combat.js index dd521d5..b237cf8 100644 --- a/modules/dark-stars-combat.js +++ b/modules/dark-stars-combat.js @@ -21,7 +21,7 @@ export class DarkStarsCombat extends Combat { for (let cId of ids) { const c = this.combatants.get(cId); let id = c._id || c.id; - let initScore = c.actor ? c.actor.getInitiativeScore(this.id, id) : -1; + let initScore = c.actor ? await c.actor.getInitiativeScore(this.id, id) : -1; await this.updateEmbeddedDocuments("Combatant", [{ _id: id, initiative: initScore }]); setTimeout(() => this.processOtherTurns(c, initScore), 400) } diff --git a/modules/dark-stars-config.js b/modules/dark-stars-config.js index c8cf150..629eaef 100644 --- a/modules/dark-stars-config.js +++ b/modules/dark-stars-config.js @@ -1,6 +1,72 @@ export const DARKSTARS_CONFIG = { + sizeOptions: { + "1": "Tiny", + "2": "Small", + "3": "Medium", + "4": "Large", + "5": "Huge", + "6": "Gargantuan" + }, + classNPC: { + "none": "None", + "chaplain": "Chaplain", + "magus": "Magus", + "martial": "Martial", + "skalawag": "Skalawag", + "warden": "Warden" + }, + synergyBonus: { + "0": "0", + "5": "+5%", + "+6": "+6%", + "+7": "+7%", + "+8": "+8%", + "+9": "+9%", + "+10": "+10%" + }, + attributeModifier: [ + {value: "0", label: "None"}, + {value: "-1", label: "Difficult (-1)"}, + {value: "-3", label: "Hard (-3)"}, + {value: "-6", label: "Very Hard (-6)"}, + {value: "-9", label: "Impossible (-9)"} + ], + weaponAiming: { + "none": "None", + " arm": "Arm (-50)", + "head": "Head (-50)", + "torso": "Torso(-30)", + "leg": "Leg (-30)", + "hand": "Hand/Weapon (-70)" + }, + rollModifiers: [ + { "value": "-80", "label": "-80%" }, + { "value": "-70", "label": "-70%" }, + { "value": "-60", "label": "-60%" }, + { "value": "-50", "label": "-50%" }, + { "value": "-40", "label": "-40%" }, + { "value": "-30", "label": "-30%" }, + { "value": "-20", "label": "-20%" }, + { "value": "-10", "label": "-10%" }, + { "value": "0", "label": "0%" }, + { "value": "+10", "label": "+10%" }, + { "value": "+20", "label": "+20%" }, + { "value": "+30", "label": "+30%" }, + { "value": "+40", "label": "+40%" } + ], + abilityValues: { + "0": "0", + "1": "1", + "2": "2", + "3": "3", + "4": "4", + "5": "5", + "6": "6", + "7": "7", + "8": "8" + }, basebonus : { "csb": "CSB", "ssb": "SSB", diff --git a/modules/dark-stars-item-sheet.js b/modules/dark-stars-item-sheet.js index 3e9f126..c2e91e3 100644 --- a/modules/dark-stars-item-sheet.js +++ b/modules/dark-stars-item-sheet.js @@ -9,7 +9,7 @@ export class DarkStarsItemSheet extends ItemSheet { /** @override */ static get defaultOptions() { - return mergeObject(super.defaultOptions, { + return foundry.utils.mergeObject(super.defaultOptions, { classes: ["fvtt-dark-stars", "sheet", "item"], template: "systems/fvtt-dark-stars/templates/items/item-sheet.hbs", dragDrop: [{ dragSelector: null, dropSelector: null }], @@ -49,7 +49,7 @@ export class DarkStarsItemSheet extends ItemSheet { /* -------------------------------------------- */ async getData() { - let objectData = duplicate(this.object.system) + let objectData = foundry.utils.duplicate(this.object.system) let formData = { title: this.title, @@ -87,7 +87,7 @@ export class DarkStarsItemSheet extends ItemSheet { /* -------------------------------------------- */ postItem() { - let chatData = duplicate(DarkStarsUtility.data(this.item)); + let chatData = foundry.utils.duplicate(DarkStarsUtility.data(this.item)); if (this.actor) { chatData.actor = { id: this.actor.id }; } diff --git a/modules/dark-stars-npc-sheet.js b/modules/dark-stars-npc-sheet.js index d810013..f616957 100644 --- a/modules/dark-stars-npc-sheet.js +++ b/modules/dark-stars-npc-sheet.js @@ -11,7 +11,7 @@ export class DarkStarsNPCSheet extends ActorSheet { /** @override */ static get defaultOptions() { - return mergeObject(super.defaultOptions, { + return foundry.utils.mergeObject(super.defaultOptions, { classes: ["dark-stars-rpg", "sheet", "actor"], template: "systems/fvtt-dark-stars/templates/npc-sheet.hbs", width: 640, @@ -25,7 +25,7 @@ export class DarkStarsNPCSheet extends ActorSheet { /* -------------------------------------------- */ async getData() { const objectData = this.object.system - let actorData = duplicate(objectData) + let actorData = foundry.utils.duplicate(objectData) let formData = { title: this.title, @@ -38,21 +38,22 @@ export class DarkStarsNPCSheet extends ActorSheet { data: actorData, limited: this.object.limited, skills: this.actor.getSkills( ), - weapons: this.actor.checkAndPrepareEquipments( duplicate(this.actor.getWeapons()) ), - armors: this.actor.checkAndPrepareEquipments( duplicate(this.actor.getArmors())), - shields: this.actor.checkAndPrepareEquipments( duplicate(this.actor.getShields())), - spells: this.actor.checkAndPrepareEquipments( duplicate(this.actor.getLore())), - equipments: this.actor.checkAndPrepareEquipments(duplicate(this.actor.getEquipmentsOnly()) ), - equippedWeapons: this.actor.checkAndPrepareEquipments(duplicate(this.actor.getEquippedWeapons()) ), + weapons: this.actor.checkAndPrepareEquipments( foundry.utils.duplicate(this.actor.getWeapons()) ), + armors: this.actor.checkAndPrepareEquipments( foundry.utils.duplicate(this.actor.getArmors())), + shields: this.actor.checkAndPrepareEquipments( foundry.utils.duplicate(this.actor.getShields())), + spells: this.actor.checkAndPrepareEquipments( foundry.utils.duplicate(this.actor.getLore())), + equipments: this.actor.checkAndPrepareEquipments(foundry.utils.duplicate(this.actor.getEquipmentsOnly()) ), + equippedWeapons: this.actor.checkAndPrepareEquipments(foundry.utils.duplicate(this.actor.getEquippedWeapons()) ), equippedArmor: this.actor.getEquippedArmor(), equippedShield: this.actor.getEquippedShield(), - feats: duplicate(this.actor.getFeats()), - subActors: duplicate(this.actor.getSubActors()), - race: duplicate(this.actor.getRace()), - moneys: duplicate(this.actor.getMoneys()), + feats: foundry.utils.duplicate(this.actor.getFeats()), + subActors: foundry.utils.duplicate(this.actor.getSubActors()), + race: foundry.utils.duplicate(this.actor.getRace()), + moneys: foundry.utils.duplicate(this.actor.getMoneys()), encCapacity: this.actor.getEncumbranceCapacity(), saveRolls: this.actor.getSaveRoll(), conditions: this.actor.getConditions(), + config: game.system.darkstars.config, containersTree: this.actor.containersTree, encCurrent: this.actor.encCurrent, options: this.options, diff --git a/modules/dark-stars-roll-dialog.js b/modules/dark-stars-roll-dialog.js index 79f091f..3e97735 100644 --- a/modules/dark-stars-roll-dialog.js +++ b/modules/dark-stars-roll-dialog.js @@ -67,8 +67,14 @@ export class DarkStarsRollDialog extends Dialog { html.find('#weapon-aiming').change((event) => { this.rollData.weaponAiming = String(event.currentTarget.value) }) - - - + html.find('#synergy-bonus').change((event) => { + this.rollData.synergyBonus = Number(event.currentTarget.value) + }) + html.find('#extra-time').change((event) => { + this.rollData.extraTime = event.currentTarget.checked + }) + html.find('#attribute-modifier').change((event) => { + this.rollData.attributeModifier = Number(event.currentTarget.value) + }) } } \ No newline at end of file diff --git a/modules/dark-stars-utility.js b/modules/dark-stars-utility.js index 37fc5ff..181c16f 100644 --- a/modules/dark-stars-utility.js +++ b/modules/dark-stars-utility.js @@ -11,9 +11,7 @@ export class DarkStarsUtility { /* -------------------------------------------- */ static async init() { Hooks.on('renderChatLog', (log, html, data) => DarkStarsUtility.chatListeners(html)); - /*Hooks.on("dropCanvasData", (canvas, data) => { - DarkStarsUtility.dropItemOnToken(canvas, data) - });*/ + Hooks.on('renderChatMessage', (message, html, data) => DarkStarsUtility.chatMessageHandler(message, html, data)) DarkStarsCommands.init(); @@ -43,13 +41,28 @@ export class DarkStarsUtility { return __locationNames[key] }) - - this.gameSettings() - } /*-------------------------------------------- */ - static gameSettings() { + static async processOpposed(rollData) { + if (this.currentOpposition) { + let opposed = { + winner: this.currentOpposition, + looser: rollData, + isOpposed : true + } + if (rollData.degrees > this.currentOpposition.degrees ) { + opposed.winner = rollData + opposed.looser = this.currentOpposition + } + let msg = await this.createChatWithRollMode(rollData.alias, { + content: await renderTemplate(`systems/fvtt-dark-stars/templates/chat/chat-opposition-result.hbs`, opposed) + }) + await msg.setFlag("world", "darkstars-roll-data", opposed) + } else { + this.currentOpposition = rollData + ui.notifications.info("Opposed rolls started with " + rollData.alias ); + } } /*-------------------------------------------- */ @@ -60,13 +73,13 @@ export class DarkStarsUtility { /*-------------------------------------------- */ static getSkills() { - return duplicate(this.skills) + return foundry.utils.duplicate(this.skills) } /* -------------------------------------------- */ static async ready() { const skills = await DarkStarsUtility.loadCompendium("fvtt-dark-stars.sprawl"); - this.skills = skills.filter(i=> i.type =="skill").map(i => i.toObject() ); + this.skills = skills.filter(i => i.type == "skill").map(i => i.toObject()); } /* -------------------------------------------- */ @@ -96,6 +109,13 @@ export class DarkStarsUtility { rollData.roll = undefined this.rollDarkStars(rollData) }) + html.on("click", '.chat-roll-opposed', event => { + let messageId = this.findChatMessageId(event.currentTarget) + let message = game.messages.get(messageId) + let rollData = message.getFlag("world", "darkstars-roll-data") + this.processOpposed(rollData) + }) + } /* -------------------------------------------- */ @@ -103,10 +123,8 @@ export class DarkStarsUtility { const templatePaths = [ 'systems/fvtt-dark-stars/templates/partials/editor-notes-gm.hbs', - 'systems/fvtt-dark-stars/templates/partials/partial-roll-select.hbs', 'systems/fvtt-dark-stars/templates/partials/partial-actor-ability-block.hbs', 'systems/fvtt-dark-stars/templates/partials/partial-actor-status.hbs', - 'systems/fvtt-dark-stars/templates/partials/partial-options-abilities.hbs', 'systems/fvtt-dark-stars/templates/partials/partial-item-nav.hbs', 'systems/fvtt-dark-stars/templates/partials/partial-item-description.hbs', 'systems/fvtt-dark-stars/templates/partials/partial-actor-equipment.hbs' @@ -275,12 +293,41 @@ export class DarkStarsUtility { static async rollDarkStars(rollData) { let actor = game.actors.get(rollData.actorId) + if (rollData.tokenId) { + actor = game.canvas.tokens.get(rollData.tokenId).actor + } + + // Specific attribute + if (rollData.attr) { + rollData.isSuccess = false + rollData.isFailure = false + rollData.targetNumber = Math.max( rollData.attr.value + rollData.attributeModifier, 0) + let myRoll = await new Roll("1d10").roll() + await this.showDiceSoNice(myRoll, game.settings.get("core", "rollMode")) + if (myRoll.total <= rollData.targetNumber) { + rollData.isSuccess = true + rollData.isFailure = false + } + rollData.roll = foundry.utils.duplicate(myRoll) + rollData.diceResult = myRoll.total + let msg = await this.createChatWithRollMode(rollData.alias, { + content: await renderTemplate(`systems/fvtt-dark-stars/templates/chat/chat-attribute-result.hbs`, rollData) + }) + msg.setFlag("world", "darkstars-roll-data", rollData) + return + } // ability/save/size => 0 rollData.percentValue = 0 if (rollData.skill) { rollData.percentValue = rollData.skill.total } + if (rollData.synergyBonus) { + rollData.percentValue += rollData.synergyBonus + } + if (rollData.extraTime) { + rollData.percentValue += 30 + } rollData.percentValue += rollData.bonusMalus rollData.diceFormula = "1d100" @@ -293,20 +340,21 @@ export class DarkStarsUtility { rollData.locationMalus = this.getAimingMalus(rollData.weaponAiming) rollData.percentValue += rollData.locationMalus } + rollData.percentValue = Math.max(rollData.percentValue, 0) + // Performs roll - console.log("Roll formula", rollData.diceFormula) let myRoll = rollData.roll if (!myRoll) { // New rolls only of no rerolls - myRoll = new Roll(rollData.diceFormula).roll({ async: false }) + myRoll = await new Roll(rollData.diceFormula).roll() await this.showDiceSoNice(myRoll, game.settings.get("core", "rollMode")) } - rollData.roll = duplicate(myRoll) + rollData.roll = foundry.utils.duplicate(myRoll) rollData.diceResult = myRoll.total rollData.isCriticalSuccess = rollData.diceResult <= rollData.skill.derivated.value rollData.isCriticalFailure = rollData.diceResult == 100 rollData.isSuccess = rollData.diceResult == 1 || rollData.diceResult <= rollData.percentValue rollData.isFailure = rollData.diceResult == 100 || rollData.diceResult > rollData.percentValue - rollData.degrees = Math.floor(rollData.percentValue / 10) - Math.floor(rollData.diceResult / 10) + rollData.degrees = Math.floor((rollData.percentValue - rollData.diceResult) / 10) rollData.damageMultiplier = rollData.isCriticalSuccess ? 2 : 1 if (rollData.reroll) { @@ -322,7 +370,21 @@ export class DarkStarsUtility { // Compute rollData.locationMultiplier = this.locationMultiplier(rollData.weaponAiming) } - + + // Task management + if (rollData.taskId) { + let task = actor.getItem(rollData.taskId) + console.log(" Task", task, rollData.taskId) + if (task) { + let newCumulated = rollData.degrees + task.system.cumulated + let nbrolls = task.system.nbrolls + 1 + task.update({ 'system.cumulated': newCumulated, 'system.nbrolls': nbrolls }) + rollData.taskName = task.name + rollData.taskCumulated = newCumulated + rollData.taskNbrolls = nbrolls + } + } + let msg = await this.createChatWithRollMode(rollData.alias, { content: await renderTemplate(`systems/fvtt-dark-stars/templates/chat/chat-generic-result.hbs`, rollData) }) @@ -350,6 +412,19 @@ export class DarkStarsUtility { static getUsers(filter) { return game.users.filter(filter).map(user => user.id); } + /* -------------------------------------------- */ + static async chatMessageHandler(message, html, data) { + const chatCard = html.find('.gm-actions') + if (chatCard.length > 0) { + // If the user is the message author or the actor owner, proceed + const actor = game.actors.get(data.message.speaker.actor) + if (actor?.isOwner) return + else if (game.user.isGM || data.author.id === game.user.id) return + const divButtons = chatCard.find('.gm-actions') + divButtons.hide() + } + } + /* -------------------------------------------- */ static getWhisperRecipients(rollMode, name) { switch (rollMode) { @@ -367,7 +442,7 @@ export class DarkStarsUtility { /* -------------------------------------------- */ static blindMessageToGM(chatOptions) { - let chatGM = duplicate(chatOptions); + let chatGM = foundry.utils.duplicate(chatOptions); chatGM.whisper = this.getUsers(user => user.isGM); chatGM.content = "Blinde message of " + game.user.name + "
" + chatOptions.content; console.log("blindMessageToGM", chatGM); @@ -428,11 +503,15 @@ export class DarkStarsUtility { /* -------------------------------------------- */ static getBasicRollData() { let rollData = { - rollId: randomID(16), + rollId: foundry.utils.randomID(16), rollMode: game.settings.get("core", "rollMode"), bonusMalus: 0, isAboveEffectiveRange: false, - weaponAiming: "none" + weaponAiming: "none", + synergyBonus: 0, + extraTime: false, + attributeModifier: 0, + config: game.system.darkstars.config, } DarkStarsUtility.updateWithTarget(rollData) return rollData diff --git a/packs/aldebaran/000166.log b/packs/aldebaran/000186.log similarity index 100% rename from packs/aldebaran/000166.log rename to packs/aldebaran/000186.log diff --git a/packs/aldebaran/CURRENT b/packs/aldebaran/CURRENT index be35511..cce82a3 100644 --- a/packs/aldebaran/CURRENT +++ b/packs/aldebaran/CURRENT @@ -1 +1 @@ -MANIFEST-000164 +MANIFEST-000184 diff --git a/packs/aldebaran/LOG b/packs/aldebaran/LOG index 4697a5e..ed56bca 100644 --- a/packs/aldebaran/LOG +++ b/packs/aldebaran/LOG @@ -1,7 +1,7 @@ -2024/02/26-14:13:38.988782 7f13374006c0 Recovering log #162 -2024/02/26-14:13:38.999307 7f13374006c0 Delete type=3 #160 -2024/02/26-14:13:38.999433 7f13374006c0 Delete type=0 #162 -2024/02/26-14:20:24.273426 7f132fe006c0 Level-0 table #167: started -2024/02/26-14:20:24.273466 7f132fe006c0 Level-0 table #167: 0 bytes OK -2024/02/26-14:20:24.280039 7f132fe006c0 Delete type=0 #165 -2024/02/26-14:20:24.287744 7f132fe006c0 Manual compaction at level-0 from '!folders!MA6uFJMVebGeayIk' @ 72057594037927935 : 1 .. '!items!zhjdppKgrON7wJn7' @ 0 : 0; will stop at (end) +2024/06/09-22:14:13.855616 7f04234006c0 Recovering log #182 +2024/06/09-22:14:13.912791 7f04234006c0 Delete type=3 #180 +2024/06/09-22:14:13.912941 7f04234006c0 Delete type=0 #182 +2024/06/10-09:41:28.708545 7f041be006c0 Level-0 table #187: started +2024/06/10-09:41:28.708577 7f041be006c0 Level-0 table #187: 0 bytes OK +2024/06/10-09:41:28.715216 7f041be006c0 Delete type=0 #185 +2024/06/10-09:41:28.728576 7f041be006c0 Manual compaction at level-0 from '!folders!MA6uFJMVebGeayIk' @ 72057594037927935 : 1 .. '!items!zhjdppKgrON7wJn7' @ 0 : 0; will stop at (end) diff --git a/packs/aldebaran/LOG.old b/packs/aldebaran/LOG.old index bb85b7d..c03e415 100644 --- a/packs/aldebaran/LOG.old +++ b/packs/aldebaran/LOG.old @@ -1,7 +1,7 @@ -2024/02/25-13:25:19.760043 7f0428e006c0 Recovering log #158 -2024/02/25-13:25:19.770300 7f0428e006c0 Delete type=3 #156 -2024/02/25-13:25:19.770349 7f0428e006c0 Delete type=0 #158 -2024/02/25-15:40:12.540906 7f0421a006c0 Level-0 table #163: started -2024/02/25-15:40:12.541352 7f0421a006c0 Level-0 table #163: 0 bytes OK -2024/02/25-15:40:12.547853 7f0421a006c0 Delete type=0 #161 -2024/02/25-15:40:12.555529 7f0421a006c0 Manual compaction at level-0 from '!folders!MA6uFJMVebGeayIk' @ 72057594037927935 : 1 .. '!items!zhjdppKgrON7wJn7' @ 0 : 0; will stop at (end) +2024/06/09-15:12:48.633006 7f0422a006c0 Recovering log #178 +2024/06/09-15:12:48.642816 7f0422a006c0 Delete type=3 #176 +2024/06/09-15:12:48.642870 7f0422a006c0 Delete type=0 #178 +2024/06/09-22:14:10.275844 7f041be006c0 Level-0 table #183: started +2024/06/09-22:14:10.275910 7f041be006c0 Level-0 table #183: 0 bytes OK +2024/06/09-22:14:10.305783 7f041be006c0 Delete type=0 #181 +2024/06/09-22:14:10.338771 7f041be006c0 Manual compaction at level-0 from '!folders!MA6uFJMVebGeayIk' @ 72057594037927935 : 1 .. '!items!zhjdppKgrON7wJn7' @ 0 : 0; will stop at (end) diff --git a/packs/aldebaran/MANIFEST-000164 b/packs/aldebaran/MANIFEST-000184 similarity index 72% rename from packs/aldebaran/MANIFEST-000164 rename to packs/aldebaran/MANIFEST-000184 index 2fc3dc06374e8dae3e5bd11444f87fe359178bba..f04d172ee01997ac962a61055b961320e170b155 100644 GIT binary patch delta 43 tcmdnUxRG%}ugVmas^#1aj7&QjIT@IDF|u4_GoLc|DoA7(NMsL41OOEj3zGl< delta 43 tcmdnUxRG%}ugb&~d+u>FFfuJ=jG!EoV~IevrsAkjM&<2mmpK3^xD( diff --git a/packs/nightborough/000179.log b/packs/beyondtheblacksea/000179.log similarity index 100% rename from packs/nightborough/000179.log rename to packs/beyondtheblacksea/000179.log diff --git a/packs/beyondtheblacksea/CURRENT b/packs/beyondtheblacksea/CURRENT index 5df89bd..0e27482 100644 --- a/packs/beyondtheblacksea/CURRENT +++ b/packs/beyondtheblacksea/CURRENT @@ -1 +1 @@ -MANIFEST-000157 +MANIFEST-000177 diff --git a/packs/beyondtheblacksea/LOG b/packs/beyondtheblacksea/LOG index 8e43e23..9c42b87 100644 --- a/packs/beyondtheblacksea/LOG +++ b/packs/beyondtheblacksea/LOG @@ -1,7 +1,7 @@ -2024/02/26-14:13:39.006215 7f133ce006c0 Recovering log #155 -2024/02/26-14:13:39.017058 7f133ce006c0 Delete type=3 #153 -2024/02/26-14:13:39.017184 7f133ce006c0 Delete type=0 #155 -2024/02/26-14:20:24.266061 7f132fe006c0 Level-0 table #160: started -2024/02/26-14:20:24.266133 7f132fe006c0 Level-0 table #160: 0 bytes OK -2024/02/26-14:20:24.273275 7f132fe006c0 Delete type=0 #158 -2024/02/26-14:20:24.287729 7f132fe006c0 Manual compaction at level-0 from '!folders!47aGmBuk1mHtbFFU' @ 72057594037927935 : 1 .. '!items!zwMpjsE84sk26eej' @ 0 : 0; will stop at (end) +2024/06/09-22:14:13.916877 7f04220006c0 Recovering log #175 +2024/06/09-22:14:13.976920 7f04220006c0 Delete type=3 #173 +2024/06/09-22:14:13.977065 7f04220006c0 Delete type=0 #175 +2024/06/10-09:41:28.721432 7f041be006c0 Level-0 table #180: started +2024/06/10-09:41:28.721455 7f041be006c0 Level-0 table #180: 0 bytes OK +2024/06/10-09:41:28.728421 7f041be006c0 Delete type=0 #178 +2024/06/10-09:41:28.728621 7f041be006c0 Manual compaction at level-0 from '!folders!47aGmBuk1mHtbFFU' @ 72057594037927935 : 1 .. '!items!zwMpjsE84sk26eej' @ 0 : 0; will stop at (end) diff --git a/packs/beyondtheblacksea/LOG.old b/packs/beyondtheblacksea/LOG.old index 5c3e822..f346ab1 100644 --- a/packs/beyondtheblacksea/LOG.old +++ b/packs/beyondtheblacksea/LOG.old @@ -1,7 +1,7 @@ -2024/02/25-13:25:19.773014 7f04234006c0 Recovering log #151 -2024/02/25-13:25:19.782933 7f04234006c0 Delete type=3 #149 -2024/02/25-13:25:19.782991 7f04234006c0 Delete type=0 #151 -2024/02/25-15:40:12.548028 7f0421a006c0 Level-0 table #156: started -2024/02/25-15:40:12.548061 7f0421a006c0 Level-0 table #156: 0 bytes OK -2024/02/25-15:40:12.555343 7f0421a006c0 Delete type=0 #154 -2024/02/25-15:40:12.555542 7f0421a006c0 Manual compaction at level-0 from '!folders!47aGmBuk1mHtbFFU' @ 72057594037927935 : 1 .. '!items!zwMpjsE84sk26eej' @ 0 : 0; will stop at (end) +2024/06/09-15:12:48.646030 7f04220006c0 Recovering log #171 +2024/06/09-15:12:48.657289 7f04220006c0 Delete type=3 #169 +2024/06/09-15:12:48.657351 7f04220006c0 Delete type=0 #171 +2024/06/09-22:14:10.305922 7f041be006c0 Level-0 table #176: started +2024/06/09-22:14:10.305944 7f041be006c0 Level-0 table #176: 0 bytes OK +2024/06/09-22:14:10.338591 7f041be006c0 Delete type=0 #174 +2024/06/09-22:14:10.376968 7f041be006c0 Manual compaction at level-0 from '!folders!47aGmBuk1mHtbFFU' @ 72057594037927935 : 1 .. '!items!zwMpjsE84sk26eej' @ 0 : 0; will stop at (end) diff --git a/packs/beyondtheblacksea/MANIFEST-000157 b/packs/beyondtheblacksea/MANIFEST-000177 similarity index 72% rename from packs/beyondtheblacksea/MANIFEST-000157 rename to packs/beyondtheblacksea/MANIFEST-000177 index 9c683854c0d9f6e14dbf069729f7c49b0c7e90e3..77cf6697b393955ad4cb1f1d975fc33ef5b4fd86 100644 GIT binary patch delta 43 tcmdnUxRG%}uZsK3XV1797@0OPaxyS)W@K3__>`$e7$mY8B(fDG0stY%3sC?7 delta 43 tcmdnUxRG%}ugYisNqO81j7;+wIT@JeGqS7|tde$m2@;tP5?Kfm0RReL3ZVc1 diff --git a/packs/beyondtheblacksea/000159.log b/packs/conditions/000232.log similarity index 100% rename from packs/beyondtheblacksea/000159.log rename to packs/conditions/000232.log diff --git a/packs/conditions/CURRENT b/packs/conditions/CURRENT index af31d42..7a8f695 100644 --- a/packs/conditions/CURRENT +++ b/packs/conditions/CURRENT @@ -1 +1 @@ -MANIFEST-000210 +MANIFEST-000230 diff --git a/packs/conditions/LOG b/packs/conditions/LOG index ede38ec..1d739dc 100644 --- a/packs/conditions/LOG +++ b/packs/conditions/LOG @@ -1,7 +1,7 @@ -2024/02/26-14:13:38.913763 7f13374006c0 Recovering log #208 -2024/02/26-14:13:38.925039 7f13374006c0 Delete type=3 #206 -2024/02/26-14:13:38.925223 7f13374006c0 Delete type=0 #208 -2024/02/26-14:20:24.237608 7f132fe006c0 Level-0 table #213: started -2024/02/26-14:20:24.237681 7f132fe006c0 Level-0 table #213: 0 bytes OK -2024/02/26-14:20:24.244690 7f132fe006c0 Delete type=0 #211 -2024/02/26-14:20:24.259041 7f132fe006c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end) +2024/06/09-22:14:13.629087 7f04234006c0 Recovering log #228 +2024/06/09-22:14:13.682604 7f04234006c0 Delete type=3 #226 +2024/06/09-22:14:13.682717 7f04234006c0 Delete type=0 #228 +2024/06/10-09:41:28.681612 7f041be006c0 Level-0 table #233: started +2024/06/10-09:41:28.681700 7f041be006c0 Level-0 table #233: 0 bytes OK +2024/06/10-09:41:28.688115 7f041be006c0 Delete type=0 #231 +2024/06/10-09:41:28.708370 7f041be006c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end) diff --git a/packs/conditions/LOG.old b/packs/conditions/LOG.old index 17e2746..6b0dcbf 100644 --- a/packs/conditions/LOG.old +++ b/packs/conditions/LOG.old @@ -1,7 +1,7 @@ -2024/02/25-13:25:19.703338 7f0428e006c0 Recovering log #204 -2024/02/25-13:25:19.713635 7f0428e006c0 Delete type=3 #202 -2024/02/25-13:25:19.713706 7f0428e006c0 Delete type=0 #204 -2024/02/25-15:40:12.512691 7f0421a006c0 Level-0 table #209: started -2024/02/25-15:40:12.512744 7f0421a006c0 Level-0 table #209: 0 bytes OK -2024/02/25-15:40:12.519870 7f0421a006c0 Delete type=0 #207 -2024/02/25-15:40:12.526721 7f0421a006c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end) +2024/06/09-15:12:48.575130 7f0422a006c0 Recovering log #224 +2024/06/09-15:12:48.586449 7f0422a006c0 Delete type=3 #222 +2024/06/09-15:12:48.586519 7f0422a006c0 Delete type=0 #224 +2024/06/09-22:14:10.136453 7f041be006c0 Level-0 table #229: started +2024/06/09-22:14:10.136510 7f041be006c0 Level-0 table #229: 0 bytes OK +2024/06/09-22:14:10.178843 7f041be006c0 Delete type=0 #227 +2024/06/09-22:14:10.237058 7f041be006c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end) diff --git a/packs/conditions/MANIFEST-000210 b/packs/conditions/MANIFEST-000210 deleted file mode 100644 index 333b86902401f8b7402e2f1b5193f0b4bbf2a906..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 69 zcmWIhx#Ncn10$nUPHI_dPD+xVQ)NkNd1i5{bAE0?Vo_pAeo-QS{0%M!MyAV*oD9rY U7+DzN_UBFn30wgQTmuRK08lLy`2YX_ diff --git a/packs/conditions/MANIFEST-000230 b/packs/conditions/MANIFEST-000230 new file mode 100644 index 0000000000000000000000000000000000000000..fdea4d947ed4b6930421c55dd9b74e3bb4c28b78 GIT binary patch literal 69 zcmWIhx#Ncn10$nUPHI_dPD+xVQ)NkNd1i5{bAE0?Vo_pAev!qRLpQh>7@3|kaxyT# UU}RxP&{??(B=77@3|kaxyT# UU}RxP&{??(B=7(fOdii&CZIVq_{ z#fmQxX}RaIqVW)#He50Q7j ey{iY6QY diff --git a/packs/darkstars-sf/MANIFEST-000042 b/packs/darkstars-sf/MANIFEST-000042 new file mode 100644 index 0000000000000000000000000000000000000000..68e1f90d8edffe037f7605b6466000cd27b94c4d GIT binary patch literal 139 zcmbQVdy7&E10$nUPHI_dPD+xVQ)NkNd1i5{bAE0?Vo_pAei1tp>(fOdii&CZIVq_{ z#fmQxX}RaIqVW)#He50QVk fn2CXtfssj@lYv=>cElz7CMD2jl|)3QH!> literal 0 HcmV?d00001 diff --git a/packs/darkstars-sf/000024.log b/packs/nightborough/000199.log similarity index 100% rename from packs/darkstars-sf/000024.log rename to packs/nightborough/000199.log diff --git a/packs/nightborough/CURRENT b/packs/nightborough/CURRENT index 0e27482..edcd2de 100644 --- a/packs/nightborough/CURRENT +++ b/packs/nightborough/CURRENT @@ -1 +1 @@ -MANIFEST-000177 +MANIFEST-000197 diff --git a/packs/nightborough/LOG b/packs/nightborough/LOG index 395c06a..50ef0a4 100644 --- a/packs/nightborough/LOG +++ b/packs/nightborough/LOG @@ -1,7 +1,7 @@ -2024/02/26-14:13:39.028984 7f13374006c0 Recovering log #175 -2024/02/26-14:13:39.040662 7f13374006c0 Delete type=3 #173 -2024/02/26-14:13:39.040750 7f13374006c0 Delete type=0 #175 -2024/02/26-14:20:24.280431 7f132fe006c0 Level-0 table #180: started -2024/02/26-14:20:24.280468 7f132fe006c0 Level-0 table #180: 0 bytes OK -2024/02/26-14:20:24.287553 7f132fe006c0 Delete type=0 #178 -2024/02/26-14:20:24.287767 7f132fe006c0 Manual compaction at level-0 from '!folders!2iZtDz80npHPIwkS' @ 72057594037927935 : 1 .. '!items!zyFR9C1jBTeFzbxg' @ 0 : 0; will stop at (end) +2024/06/09-22:14:13.982525 7f04234006c0 Recovering log #195 +2024/06/09-22:14:14.045462 7f04234006c0 Delete type=3 #193 +2024/06/09-22:14:14.045536 7f04234006c0 Delete type=0 #195 +2024/06/10-09:41:28.715334 7f041be006c0 Level-0 table #200: started +2024/06/10-09:41:28.715357 7f041be006c0 Level-0 table #200: 0 bytes OK +2024/06/10-09:41:28.721312 7f041be006c0 Delete type=0 #198 +2024/06/10-09:41:28.728591 7f041be006c0 Manual compaction at level-0 from '!folders!2iZtDz80npHPIwkS' @ 72057594037927935 : 1 .. '!items!zyFR9C1jBTeFzbxg' @ 0 : 0; will stop at (end) diff --git a/packs/nightborough/LOG.old b/packs/nightborough/LOG.old index 1b24fb0..f78e9ea 100644 --- a/packs/nightborough/LOG.old +++ b/packs/nightborough/LOG.old @@ -1,7 +1,7 @@ -2024/02/25-13:25:19.786914 7f0428e006c0 Recovering log #171 -2024/02/25-13:25:19.797512 7f0428e006c0 Delete type=3 #169 -2024/02/25-13:25:19.797578 7f0428e006c0 Delete type=0 #171 -2024/02/25-15:40:12.555728 7f0421a006c0 Level-0 table #176: started -2024/02/25-15:40:12.555778 7f0421a006c0 Level-0 table #176: 0 bytes OK -2024/02/25-15:40:12.562473 7f0421a006c0 Delete type=0 #174 -2024/02/25-15:40:12.562645 7f0421a006c0 Manual compaction at level-0 from '!folders!2iZtDz80npHPIwkS' @ 72057594037927935 : 1 .. '!items!zyFR9C1jBTeFzbxg' @ 0 : 0; will stop at (end) +2024/06/09-15:12:48.661428 7f0422a006c0 Recovering log #191 +2024/06/09-15:12:48.671794 7f0422a006c0 Delete type=3 #189 +2024/06/09-15:12:48.671874 7f0422a006c0 Delete type=0 #191 +2024/06/09-22:14:10.338805 7f041be006c0 Level-0 table #196: started +2024/06/09-22:14:10.338838 7f041be006c0 Level-0 table #196: 0 bytes OK +2024/06/09-22:14:10.376746 7f041be006c0 Delete type=0 #194 +2024/06/09-22:14:10.376994 7f041be006c0 Manual compaction at level-0 from '!folders!2iZtDz80npHPIwkS' @ 72057594037927935 : 1 .. '!items!zyFR9C1jBTeFzbxg' @ 0 : 0; will stop at (end) diff --git a/packs/nightborough/MANIFEST-000177 b/packs/nightborough/MANIFEST-000197 similarity index 71% rename from packs/nightborough/MANIFEST-000177 rename to packs/nightborough/MANIFEST-000197 index 1b9c26ded11d5f0c128d3f0759df4505a436b2ac..76242f275c9e838e472587cb3f471277678137c6 100644 GIT binary patch delta 43 tcmdnQxQTH>pGtD>rZe0Oj7-NEIT@IbGqP+F{J%nS4M^lTNaQ3)1OO`|3`PI| delta 43 tcmdnQxQTH>pUOK<*-&l<`RppXa8tPRLSXEVJWM&k^=)wq= ful?=J&&j~Z1SFURSbnleGtRsV;tK%zLO?zM5B(;N diff --git a/packs/sprawl/MANIFEST-000034 b/packs/sprawl/MANIFEST-000034 new file mode 100644 index 0000000000000000000000000000000000000000..2dff9c20dbc09de8ba2f55c98e85ba540e7a76b9 GIT binary patch literal 139 zcmey!Zo55&fss)vC$%g!CnZVGsj?)sJhM2}IX|}`u_&=5zlfcQ_4YeSMa8uIoRrj} zVnu_9tYojsKwsyu$WSvw!xF|{Obj3(ub5eqnp><`RppXa8tPRLSXEVJWM&k^=)wq= hXE&Us!pXqMq|C{{titk>O?&%-LJ%J)$gBqB0{{R@CTjoy literal 0 HcmV?d00001 diff --git a/styles/simple.css b/styles/simple.css index de4de39..629f0c5 100644 --- a/styles/simple.css +++ b/styles/simple.css @@ -1,7 +1,7 @@ /* ==================== (A) Fonts ==================== */ :root { - /* =================== 1. ACTOR SHEET FONT STYLES =========== */ + /* =================== 1. ACTOR SHEET FONT STYLES =========== */ --window-header-title-font-size: 1.3rem; --window-header-title-font-weight: normal; --window-header-title-color: #f5f5f5; @@ -23,7 +23,7 @@ --actor-label-font-weight: 700; --actor-label-color: #464331c4; - /* =================== 2. DEBUGGING HIGHLIGHTERS ============ */ + /* =================== 2. DEBUGGING HIGHLIGHTERS ============ */ --debug-background-color-red: #ff000054; --debug-background-color-blue: #1d00ff54; --debug-background-color-green: #54ff0054; @@ -33,1247 +33,1376 @@ --debug-box-shadow-green: inset 0 0 2px green; } -/*@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 { - text-align: justify; - font-size: 16px; - letter-spacing: 1px; - color: rgba(228, 240, 240, 0.75); - background: rgba(66, 66, 64, 0.95); - -} - -/* Fonts */ -.sheet header.sheet-header h1 input, .window-app .window-header, #actors .directory-list, #navigation #scene-list .scene.nav-item { - font-size: 1.0rem; - color: rgba(228, 240, 240, 0.75); - background: rgba(66, 66, 64, 0.95); -} /* For title, sidebar character and scene */ -.sheet nav.sheet-tabs { - font-size: 0.8rem; - color: rgba(228, 240, 240, 0.75); - background: rgba(66, 66, 64, 0.95); -} /* For nav and title */ -.window-app input, .fvtt-dark-stars .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-size: 0.8rem; - color: rgba(228, 240, 240, 0.75); - background: rgba(66, 66, 64, 0.95); -} - -.window-header{ - background: rgba(0,0,0,0.75); -} -.dialog .window-content { - color: #ccdbe6; -} -.dialog-content, .dialog-buttons, .form-fields { - color: #ccdbe6; -} -.window-app.sheet .window-content { - margin: 0; - padding: 0; - color: #ccdbe6; -} -.strong-text{ - font-weight: bold; -} - -.tabs .item.active, .blessures-list li ul li:first-child:hover, a:hover { - text-shadow: 1px 0px 0px #ff6600; -} -select { - background: rgba(228, 240, 240, 0.75); - color: rgba(66, 66, 64, 0.95); -} -select option { - background: rgba(228, 240, 240, 0.75); - color: rgba(66, 66, 64, 0.95); -} - -.rollable:hover, .rollable:focus { - color: #000; - text-shadow: 0 0 10px red; - cursor: pointer; -} -input:disabled { - color:#1c2058; -} -select:disabled { - color:#1c2058; -} -table {border: 1px solid #7a7971;} - -.grid, .grid-2col { - display: grid; - grid-column: span 2 / span 2; - grid-template-columns: repeat(2, minmax(0, 1fr)); - gap: 10px; - margin: 10px 0; - padding: 0; -} - -.grid-3col { - grid-column: span 3 / span 3; - grid-template-columns: repeat(3, minmax(0, 1fr)); -} - -.grid-4col { - grid-column: span 4 / span 4; - grid-template-columns: repeat(4, minmax(0, 1fr)); -} - -.grid-5col { - grid-column: span 5 / span 5; - grid-template-columns: repeat(5, minmax(0, 1fr)); -} - -.grid-6col { - grid-column: span 5 / span 5; - grid-template-columns: repeat(5, minmax(0, 1fr)); -} - -.grid-7col { - grid-column: span 7 / span 7; - grid-template-columns: repeat(7, minmax(0, 1fr)); -} - -.grid-8col { - grid-column: span 8 / span 8; - grid-template-columns: repeat(8, minmax(0, 1fr)); -} - -.grid-9col { - grid-column: span 9 / span 9; - grid-template-columns: repeat(9, minmax(0, 1fr)); -} - -.grid-10col { - grid-column: span 10 / span 10; - grid-template-columns: repeat(10, minmax(0, 1fr)); -} - -.grid-11col { - grid-column: span 11 / span 11; - grid-template-columns: repeat(11, minmax(0, 1fr)); -} - -.grid-12col { - grid-column: span 12 / span 12; - grid-template-columns: repeat(12, minmax(0, 1fr)); -} - -.flex-group-center, -.flex-group-left, -.flex-group-right { - -webkit-box-pack: center; - -ms-flex-pack: center; - justify-content: center; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - text-align: center; - padding: 5px; -} - -.flex-group-left { - -webkit-box-pack: start; - -ms-flex-pack: start; - justify-content: flex-start; - text-align: left; -} - -.flex-group-right { - -webkit-box-pack: end; - -ms-flex-pack: end; - justify-content: flex-end; - text-align: right; -} - -.flex-center { - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - -webkit-box-pack: center; - -ms-flex-pack: center; - justify-content: center; - text-align: center; -} - -.table-create-actor { - font-size: 0.8rem; -} - -.flex-between { - -webkit-box-pack: justify; - -ms-flex-pack: justify; - justify-content: space-between; -} - -.flex-shrink { - flex: 'flex-shrink' ; -} - -/* Styles limited to foundryvtt-vadentis sheets */ - -.fvtt-dark-stars .sheet-header { - -webkit-box-flex: 0; - -ms-flex: 0 0 210px; - flex: 0 0 210px; - overflow: hidden; - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - -ms-flex-direction: row; - flex-direction: row; - -ms-flex-wrap: wrap; - flex-wrap: wrap; - -webkit-box-pack: start; - -ms-flex-pack: start; - justify-content: flex-start; - margin-bottom: 10px; -} - -.fvtt-dark-stars .sheet-header .profile-img { - -webkit-box-flex: 0; - -ms-flex: 0 0 96px; - flex: 0 0 96px; - width: 96px; - height: auto; - max-height:96px; - margin-top: 0px; - margin-right: 10px; - object-fit: cover; - border-width: 0px; - object-position: 50% 0; -} - -.button-img { - vertical-align: baseline; - width: 8%; - height: 8%; - max-height: 48px; - border-width: 0; - border: 1px solid rgba(0, 0, 0, 0); -} -.button-img:hover { - color: rgba(255, 255, 128, 0.7); - border: 1px solid rgba(255, 128, 0, 0.8); - cursor: pointer; -} - -.button-effect-img { - vertical-align: baseline; - width: 16px; - max-height: 16px; - height: 16; - border-width: 0; -} - -.small-button-container { - height: 16px; - width: 16px; - border: 0; - vertical-align: bottom; -} - -.fvtt-dark-stars .sheet-header .header-fields { - -webkit-box-flex: 1; - -ms-flex: 1; - flex: 1; -} - -.fvtt-dark-stars .sheet-header h1.charname { - height: 50px; - padding: 0px; - margin: 5px 0; - border-bottom: 0; -} - -.fvtt-dark-stars .sheet-header h1.charname input { - width: 100%; - height: 100%; - margin: 0; -} - -.fvtt-dark-stars .sheet-tabs { - -webkit-box-flex: 0; - -ms-flex: 0; - flex: 0; -} - -.fvtt-dark-stars .sheet-body, -.fvtt-dark-stars .sheet-body .tab, -.fvtt-dark-stars .sheet-body .tab .editor { - height: 100%; - font-size: 0.8rem; -} - -.editor { - border: 2; - height: 300px; - padding: 0 3px; -} - -.medium-editor { - border: 2; - height: 240px; - padding: 0 3px; -} - -.small-editor { - border: 2; - height: 120px; - padding: 0 3px; -} - -.fvtt-dark-stars .tox .tox-editor-container { - background: #fff; -} - -.fvtt-dark-stars .tox .tox-edit-area { - padding: 0 8px; -} - -.fvtt-dark-stars .resource-label { - font-weight: bold; - text-transform: uppercase; -} - -.fvtt-dark-stars .tabs { - height: 40px; - border-top: 1px solid #AAA; - border-bottom: 1px solid #AAA; - color: #000000; -} - -.fvtt-dark-stars .tabs .item { - line-height: 40px; - font-weight: bold; -} - -.fvtt-dark-stars .tabs .item.active { - text-decoration: underline; - text-shadow: none; -} - -.fvtt-dark-stars .items-list { - list-style: none; - margin: 1px 0; - padding: 0; - overflow-y: auto; -} - -.fvtt-dark-stars .items-list .item-header { - font-weight: bold; -} - -.fvtt-dark-stars .items-list .item { - height: 30px; - line-height: 24px; - padding: 1px 0; - border-bottom: 1px solid #BBB; -} - -.fvtt-dark-stars .items-list .item .item-image { - -webkit-box-flex: 0; - -ms-flex: 0 0 24px; - flex: 0 0 24px; - margin-right: 5px; -} - -.fvtt-dark-stars .items-list .item img { - display: block; -} - -.fvtt-dark-stars .items-list .item-name { - margin: 0; -} - -.fvtt-dark-stars .items-list .item-controls { - -webkit-box-flex: 0; - -ms-flex: 0 0 86px; - flex: 0 0 86px; - text-align: right; -} - - -/* ======================================== */ -/* Sheet */ -.window-app.sheet .window-content .sheet-header{ - background: url("../images/ui/pc_sheet_bg.webp") -} -/* background: #011d33 url("../images/ui/fond1.webp") repeat left top;*/ -/*color: rgba(168, 139, 139, 0.5);*/ - -.window-app.sheet .window-content .sheet-header input[type="text"], .window-app.sheet .window-content .sheet-header input[type="number"], .window-app.sheet .window-content .sheet-header input[type="password"], .window-app.sheet .window-content .sheet-header input[type="date"], .window-app.sheet .window-content .sheet-header input[type="time"] { - color: rgba(228, 240, 240, 0.75); - background: rgba(66, 66, 64, 0.95); - border: 1 none; - margin-bottom: 0.25rem; - margin-left: 2px; -} - -.window-app.sheet .window-content .sheet-body input[type="text"], .window-app.sheet .window-content .sheet-body input[type="number"], .window-app.sheet .window-content .sheet-body input[type="password"], .window-app.sheet .window-content .sheet-body input[type="date"], .window-app.sheet .window-content .sheet-body input[type="time"] { - color: rgba(228, 240, 240, 0.75); - background: rgba(66, 66, 64, 0.95); - border: 1 none; - margin-bottom: 0.25rem; - margin-left: 2px; -} - -.window-app.sheet .window-content .sheet-body select, .window-app.sheet .window-content .sheet-header select { - color: rgba(228, 240, 240, 0.75); - background: rgba(66, 66, 64, 0.95); - border: 1 none; - margin-bottom: 0.25rem; - margin-left: 2px; -} - -.window-app .window-content, .window-app.sheet .window-content .sheet-body{ - font-size: 0.8rem; - background: url("../images/ui/pc_sheet_bg.webp") repeat left top; - color: rgba(228, 240, 240, 0.75); - background: rgba(66, 66, 64, 0.95); -} - -/* background: rgba(245,245,240,0.6) url("../images/ui/sheet_background.webp") left top;*/ - -section.sheet-body{padding: 0.25rem 0.5rem;} - -.sheet header.sheet-header .profile-img { - object-fit: cover; - object-position: 50% 0; - margin: 0.5rem 0 0.5rem 0.5rem; - padding: 0; -} - -.sheet nav.sheet-tabs { - font-size: 0.70rem; - font-weight: bold; - height: 3rem; - flex: 0 0 3rem; - margin: 0; - padding: 0 0 0 0.25rem; - text-align: center; - text-transform: uppercase; - line-height: 1.5rem; - border-top: 0 none; - border-bottom: 0 none; - background-color:black; - color:beige; -} - -/* background: rgb(245,245,240) url("../images/ui/fond4.webp") repeat left top;*/ - -nav.sheet-tabs .item { - position: relative; - padding: 0 0.25rem; -} - -nav.sheet-tabs .item:after { - content: ""; - position: absolute; - top: 0; - right: 0; - height: 2rem; - width: 1px; - border-right: 1px dashed rgba(52, 52, 52, 0.25); -} - -.sheet .tab[data-tab] { - padding: 0; -} - -section.sheet-body:after { - content: ""; - display: block; - clear: both; -} - -.sheet header.sheet-header .flex-compteurs {text-align: right;} -.sheet header.sheet-header .resource-content {width: 2rem;} - -.select-diff { - display: inline-block; - text-align: left; - width: 50px; -} - -.window-app.sheet .window-content .tooltip:hover .tooltiptext { - top: 2rem; - left: 2rem; - margin: 0; - padding: 0.25rem; -} - -.window-app.sheet .window-content .carac-value, .window-app.sheet .window-content .competence-xp { - margin: 0.05rem; - flex-basis: 3rem; - text-align: center; -} - -/* ======================================== */ -/* Global UI elements */ - -/* ======================================== */ - -h1, h2, h3, h4 { - font-weight: bold; -} - -ul, ol { + ::-webkit-scrollbar-thumb { + outline: none; + border-radius: 3px; + background: #999 !important; + border: 1px solid #333 !important; + border-color: #333 !important; + } + + ::-webkit-scrollbar-track { + box-shadow: 0 0 3px #756e08 inset !important; + border-radius: 3px; + } + + * { + scrollbar-width: thin !important; + scrollbar-color: #756e08 #ccc !important; + } + + /*@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 { + text-align: justify; + font-size: 16px; + letter-spacing: 1px; + color: rgba(228, 240, 240, 0.75); + background: rgba(66, 66, 64, 0.95); + + } + + /* Fonts */ + .sheet header.sheet-header h1 input, + .window-app .window-header, + #actors .directory-list, + #navigation #scene-list .scene.nav-item { + font-size: 1.0rem; + color: rgba(228, 240, 240, 0.75); + background: rgba(66, 66, 64, 0.95); + } + + /* For title, sidebar character and scene */ + .sheet nav.sheet-tabs { + font-size: 0.8rem; + color: rgba(228, 240, 240, 0.75); + background: rgba(66, 66, 64, 0.95); + } + + /* For nav and title */ + .window-app input, + .fvtt-dark-stars .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-size: 0.8rem; + color: rgba(228, 240, 240, 0.75); + background: rgba(66, 66, 64, 0.95); + } + + .window-header { + background: rgba(0, 0, 0, 0.75); + } + + .dialog .window-content { + color: #ccdbe6; + } + + .dialog-content, + .dialog-buttons, + .form-fields { + color: #ccdbe6; + } + + .window-app.sheet .window-content { margin: 0; padding: 0; -} -ul, li { - list-style-type: none; -} + color: #ccdbe6; + } -.sheet li { - margin: 0.010rem; - padding: 0.25rem; -} -.header-fields li { - margin: 0; - padding: 0; -} + .strong-text { + font-weight: bold; + } -.alterne-list > .list-item:hover { - background: rgba(100, 100, 50, 0.25); -} -.alterne-list > .list-item:nth-child(even) { - background: rgba(80, 60, 0, 0.10); -} -.alterne-list > .list-item:nth-child(odd) { - background: rgb(160, 130, 100, 0.05); -} + .tabs .item.active, + .blessures-list li ul li:first-child:hover, + a:hover { + text-shadow: 1px 0px 0px #ff6600; + } -.specialisation-label { - font-size: 0.8rem; -} + select { + background: rgba(228, 240, 240, 0.75); + color: rgba(66, 66, 64, 0.95); + } -.carac-label, -.attr-label { - font-weight: bold; -} + select option { + background: rgba(228, 240, 240, 0.75); + color: rgba(66, 66, 64, 0.95); + } -.list-item { - margin: 0.125rem; - box-shadow: inset 0px 0px 1px #00000096; - border-radius: 0.25rem; - padding: 0.125rem; - flex: 1 1 5rem; - display: flex !important; -} -.list-item-shadow { - background:rgba(87, 60, 32, 0.35); - /*flex-grow: 0;*/ - flex-wrap: nowrap; - justify-content: flex-start; -} -.list-item-shadow2 { - background:rgba(87, 60, 32, 0.25); - flex-grow: 0; - flex-wrap: nowrap; - justify-content: flex-start; -} -.item-display-show { - display: block; -} -.item-display-hide { - display: none; -} -.conteneur-type { - background: rgb(200, 10, 100, 0.25); -} -.item-quantite { - margin-left: 0.5rem; -} -.list-item-margin1 { - margin-left: 1rem; -} -.list-item-margin2 { - margin-left: 2rem; -} -.list-item-margin3 { - margin-left: 3rem; -} -.list-item-margin4 { - margin-left: 4rem; -} + .rollable:hover, + .rollable:focus { + color: #000; + text-shadow: 0 0 10px red; + cursor: pointer; + } -.sheet-competence-img { - width: 24px; - max-width: 24px; - height: 24px; - max-height: 24px; - flex-grow: 0; - margin-right: 0.25rem; -} -.competence-column { - flex-direction: column; - align-content: flex-start; - justify-content: flex-start; - flex-grow: 0; - flex-basis: 1; -} -.competence-header { - align-content: flex-start; - justify-content: flex-start; - font-weight: bold; - flex-grow: 0; -} -.secondaire-label, -.arme-label, -.generic-label, -.competence-label, -.devotion-label, -.sort-label, -.technique-label, -.ability-label, -.arme-label, -.armure-label, -.equipement-label, -.description-label { - flex-grow: 2; - margin-left: 4px; -} -.status-header-label { - margin-left: 2px; -} -.roll-dialog-label { - margin: 4px 0; - min-width: 96px; -} -.short-label { - flex-grow: 1; -} -.keyword-label { - font-size: 0.85rem; -} + input:disabled { + color: #1c2058; + } -.item-sheet-label { - flex-grow: 1; -} + select:disabled { + color: #1c2058; + } -.item-text-long-line { - flex-grow: 3; -} + table { + border: 1px solid #7a7971; + } -.score-label { - flex-grow: 2; - align-content: center; -} + .grid, + .grid-2col { + display: grid; + grid-column: span 2 / span 2; + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 10px; + margin: 10px 0; + padding: 0; + } -.attribut-value, -.carac-value { - flex-grow: 0; - flex-basis: 64px; - margin-right: 4px; - margin-left: 4px; -} -.sante-value, -.competence-value { - flex-grow: 0; - flex-basis: 2rem; - margin-right: 0.25rem; - margin-left: 0.25rem; -} -.description-value { - flex-grow: 0; - flex-basis: 4rem; - margin-right: 0.25rem; - margin-left: 0.25rem; -} -.competence-xp { - flex-grow: 0; - flex-basis: 2rem; - margin-right: 0.25rem; - margin-left: 0.25rem; -} -.blessures-title { - font-weight: bold; -} -.alchimie-title { - font-weight: bold; -} -.blessure-data { - flex-direction: row; - align-content: flex-start; - justify-content: flex-start; -} -.blessures-soins { - flex-grow: 0; - flex-basis: 32px; - margin-right: 4px; - margin-left: 4px; -} -.blessures-loc { - flex-grow: 0; - flex-basis: 96px; - margin-right: 4px; - margin-left: 4px; -} -.pointsreve-value { - flex-grow: 0; - flex-basis: 64px; - margin-right: 4px; - margin-left: 4px; -} + .grid-3col { + grid-column: span 3 / span 3; + grid-template-columns: repeat(3, minmax(0, 1fr)); + } -.input-sante-header, -.stress-style { - flex-grow: 0; - flex-basis: 64px; - margin-right: 4px; - margin-left: 4px; -} + .grid-4col { + grid-column: span 4 / span 4; + grid-template-columns: repeat(4, minmax(0, 1fr)); + } -.small-label { - margin-top: 5px; -} + .grid-5col { + grid-column: span 5 / span 5; + grid-template-columns: repeat(5, minmax(0, 1fr)); + } -.padd-right { - margin-right: 8px; -} -.padd-left { - margin-left: 8px; -} + .grid-6col { + grid-column: span 5 / span 5; + grid-template-columns: repeat(5, minmax(0, 1fr)); + } -.stack-left { - align-items:center; - flex-shrink: 1; - flex-grow: 0; -} -.npc-ability-label { - flex-grow: 2; -} + .grid-7col { + grid-column: span 7 / span 7; + grid-template-columns: repeat(7, minmax(0, 1fr)); + } -.packed-left { - white-space: nowrap; - flex-grow: 0; -} + .grid-8col { + grid-column: span 8 / span 8; + grid-template-columns: repeat(8, minmax(0, 1fr)); + } -.input-numeric-short { - width: 40px; - max-width: 40px; - flex-grow: 0; - flex-shrink: 0; - flex-basis: 40px; - margin-right: 0.25rem; - margin-left: 0.25rem; -} + .grid-9col { + grid-column: span 9 / span 9; + grid-template-columns: repeat(9, minmax(0, 1fr)); + } -.abilities-table { - align-content: flex-start; -} + .grid-10col { + grid-column: span 10 / span 10; + grid-template-columns: repeat(10, minmax(0, 1fr)); + } -/* ======================================== */ -.tokenhudext { - display: flex; - flex: 0 !important; - font-weight: 600; -} -.tokenhudext.left { - justify-content: flex-start; - flex-direction: column; - position: absolute; - top: 2.75rem; - right: 4rem; -} -.tokenhudext.right { - justify-content: flex-start; - flex-direction: column; - position: absolute; - top: 2.75rem; - left: 4rem; -} -.control-icon.tokenhudicon { - width: fit-content; - height: fit-content; - min-width: 6rem; - flex-basis: auto; - padding: 0; - line-height: 1rem; - margin: 0.25rem; -} -.control-icon.tokenhudicon.right { - margin-left: 8px; -} -#token-hud .status-effects.active{ - z-index: 2; -} -/* ======================================== */ -.item-checkbox { - height: 25px; - border: 1px solid #736953a6; - border-left: none; - font-weight: 500; - font-size: 1rem; - color: black; - padding-top: 5px; - margin-right: 0px; - width: 45px; - position: relative; - left: 0px; - text-align: center; -} + .grid-11col { + grid-column: span 11 / span 11; + grid-template-columns: repeat(11, minmax(0, 1fr)); + } + + .grid-12col { + grid-column: span 12 / span 12; + grid-template-columns: repeat(12, minmax(0, 1fr)); + } + + .flex-group-center, + .flex-group-left, + .flex-group-right { + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + text-align: center; + padding: 5px; + } + + .flex-group-left { + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; + text-align: left; + } + + .flex-group-right { + -webkit-box-pack: end; + -ms-flex-pack: end; + justify-content: flex-end; + text-align: right; + } + + .flex-center { + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + text-align: center; + } + + .table-create-actor { + font-size: 0.8rem; + } + + .flex-between { + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + } + + .flex-shrink { + flex: 'flex-shrink'; + } + + /* Styles limited to foundryvtt-vadentis sheets */ + + .fvtt-dark-stars .sheet-header { + -webkit-box-flex: 0; + -ms-flex: 0 0 210px; + flex: 0 0 210px; + overflow: hidden; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-direction: row; + flex-direction: row; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; + margin-bottom: 10px; + } + + .fvtt-dark-stars .sheet-header .profile-img { + -webkit-box-flex: 0; + -ms-flex: 0 0 96px; + flex: 0 0 96px; + width: 96px; + height: auto; + max-height: 96px; + margin-top: 0px; + margin-right: 10px; + object-fit: cover; + border-width: 0px; + object-position: 50% 0; + } + + .button-img { + vertical-align: baseline; + width: 8%; + height: 8%; + max-height: 48px; + border-width: 0; + border: 1px solid rgba(0, 0, 0, 0); + } + + .button-img:hover { + color: rgba(255, 255, 128, 0.7); + border: 1px solid rgba(255, 128, 0, 0.8); + cursor: pointer; + } + + .button-effect-img { + vertical-align: baseline; + width: 16px; + max-height: 16px; + height: 16; + border-width: 0; + } + + .small-button-container { + height: 16px; + width: 16px; + border: 0; + vertical-align: bottom; + } + + .fvtt-dark-stars .sheet-header .header-fields { + -webkit-box-flex: 1; + -ms-flex: 1; + flex: 1; + } + + .fvtt-dark-stars .sheet-header h1.charname { + height: 50px; + padding: 0px; + margin: 5px 0; + border-bottom: 0; + } + + .fvtt-dark-stars .sheet-header h1.charname input { + width: 100%; + height: 100%; + margin: 0; + } + + .fvtt-dark-stars .sheet-tabs { + -webkit-box-flex: 0; + -ms-flex: 0; + flex: 0; + } + + .fvtt-dark-stars .sheet-body, + .fvtt-dark-stars .sheet-body .tab, + .fvtt-dark-stars .sheet-body .tab .editor { + height: 100%; + font-size: 0.8rem; + } + + .editor { + border: 2; + height: 300px; + padding: 0 3px; + } + + .medium-editor { + border: 2; + height: 240px; + padding: 0 3px; + } + + .small-editor { + border: 2; + height: 120px; + padding: 0 3px; + } + + .fvtt-dark-stars .tox .tox-editor-container { + background: #fff; + } + + .fvtt-dark-stars .tox .tox-edit-area { + padding: 0 8px; + } + + .fvtt-dark-stars .resource-label { + font-weight: bold; + text-transform: uppercase; + } + + .fvtt-dark-stars .tabs { + height: 40px; + border-top: 1px solid #AAA; + border-bottom: 1px solid #AAA; + color: #000000; + } + + .fvtt-dark-stars .tabs .item { + line-height: 40px; + font-weight: bold; + } + + .fvtt-dark-stars .tabs .item.active { + text-decoration: underline; + text-shadow: none; + } + + .fvtt-dark-stars .items-list { + list-style: none; + margin: 1px 0; + padding: 0; + overflow-y: auto; + } + + .fvtt-dark-stars .items-list .item-header { + font-weight: bold; + } + + .fvtt-dark-stars .items-list .item { + height: 30px; + line-height: 24px; + padding: 1px 0; + border-bottom: 1px solid #BBB; + } + + .fvtt-dark-stars .items-list .item .item-image { + -webkit-box-flex: 0; + -ms-flex: 0 0 24px; + flex: 0 0 24px; + margin-right: 5px; + } + + .fvtt-dark-stars .items-list .item img { + display: block; + } + + .fvtt-dark-stars .items-list .item-name { + margin: 0; + } + + .fvtt-dark-stars .items-list .item-controls { + -webkit-box-flex: 0; + -ms-flex: 0 0 86px; + flex: 0 0 86px; + text-align: right; + } -.flex-actions-bar { - flex-grow: 2; -} + /* ======================================== */ + /* Sheet */ + .window-app.sheet .window-content .sheet-header { + background: url("../images/ui/pc_sheet_bg.webp") + } -/* ======================================== */ -/* Sidebar CSS */ -#sidebar { - font-size: 1rem; - background-position: 100%; - color: rgba(220,220,220,0.75); -} + /* background: #011d33 url("../images/ui/fond1.webp") repeat left top;*/ + /*color: rgba(168, 139, 139, 0.5);*/ -/* background: rgb(105,85,65) url("../images/ui/texture_feuille_perso_onglets.webp") no-repeat right bottom;*/ + .window-app.sheet .window-content .sheet-header input[type="text"], + .window-app.sheet .window-content .sheet-header input[type="number"], + .window-app.sheet .window-content .sheet-header input[type="password"], + .window-app.sheet .window-content .sheet-header input[type="date"], + .window-app.sheet .window-content .sheet-header input[type="time"] { + color: rgba(228, 240, 240, 0.75); + background: rgba(66, 66, 64, 0.95); + border: 1 none; + margin-bottom: 0.25rem; + margin-left: 2px; + } -#sidebar.collapsed { - height: 470px !important; -} + .window-app.sheet .window-content .sheet-body input[type="text"], + .window-app.sheet .window-content .sheet-body input[type="number"], + .window-app.sheet .window-content .sheet-body input[type="password"], + .window-app.sheet .window-content .sheet-body input[type="date"], + .window-app.sheet .window-content .sheet-body input[type="time"] { + color: rgba(228, 240, 240, 0.75); + background: rgba(66, 66, 64, 0.95); + border: 1 none; + margin-bottom: 0.25rem; + margin-left: 2px; + } -#sidebar-tabs > .collapsed, #chat-controls .chat-control-icon { - color: rgba(220,220,220,0.75); - text-shadow: 1px 1px 0 rgba(0,0,0,0.75); -} + .window-app.sheet .window-content .sheet-body select, + .window-app.sheet .window-content .sheet-header select { + color: rgba(228, 240, 240, 0.75); + background: rgba(66, 66, 64, 0.95); + border: 1 none; + margin-bottom: 0.25rem; + margin-left: 2px; + } -.sidebar-tab .directory-list .entity { - border-top: 1px dashed rgba(0,0,0,0.25); + .window-app .window-content, + .window-app.sheet .window-content .sheet-body { + font-size: 0.8rem; + background: url("../images/ui/pc_sheet_bg.webp") repeat left top; + color: rgba(228, 240, 240, 0.75); + background: rgba(66, 66, 64, 0.95); + } + + /* background: rgba(245,245,240,0.6) url("../images/ui/sheet_background.webp") left top;*/ + + section.sheet-body { + padding: 0.25rem 0.5rem; + } + + .sheet header.sheet-header .profile-img { + object-fit: cover; + object-position: 50% 0; + margin: 0.5rem 0 0.5rem 0.5rem; + padding: 0; + } + + .sheet nav.sheet-tabs { + font-size: 0.70rem; + font-weight: bold; + height: 3rem; + flex: 0 0 3rem; + margin: 0; + padding: 0 0 0 0.25rem; + text-align: center; + text-transform: uppercase; + line-height: 1.5rem; + border-top: 0 none; border-bottom: 0 none; - padding: 0.25rem 0; -} + background-color: black; + color: beige; + } -.sidebar-tab .directory-list .entity:hover { - background: rgba(0,0,0,0.05); - cursor: pointer; -} -.chat-message-header { - background: rgba(220,220,210,0.5); - font-size: 1.1rem; - height: 48px; - text-align: center; - vertical-align: middle; - display: flex; - align-items: center; -} + /* background: rgb(245,245,240) url("../images/ui/fond4.webp") repeat left top;*/ -.chat-message .message-header .flavor-text, .chat-message .message-header .whisper-to { - font-size: 0.9rem; -} -.chat-actor-name { - padding: 4px; -} + nav.sheet-tabs .item { + position: relative; + padding: 0 0.25rem; + } -.chat-img { - width: 64px; - height: 64px; -} + nav.sheet-tabs .item:after { + content: ""; + position: absolute; + top: 0; + right: 0; + height: 2rem; + width: 1px; + border-right: 1px dashed rgba(52, 52, 52, 0.25); + } -.roll-dialog-header { - height: 52px; -} + .sheet .tab[data-tab] { + padding: 0; + } -.actor-icon { - float: left; - width: 48px; - height: 48px; - padding: 2px 6px 2px 2px; -} + section.sheet-body:after { + content: ""; + display: block; + clear: both; + } -.padding-dice { - padding-top: .2rem; - padding-bottom: .2rem; -} + .sheet header.sheet-header .flex-compteurs { + text-align: right; + } -.dice-image { - box-sizing: border-box; - border: none; - border-radius: 0; - max-width: 100%; -} + .sheet header.sheet-header .resource-content { + width: 2rem; + } -.dice-image-reroll { - background-color:rgba(115, 224, 115, 0.25); - border-color: #011d33; - box-sizing: border-box; - border: 1px; - border-radius: 0%; - max-width: 100%; -} + .select-diff { + display: inline-block; + text-align: left; + width: 50px; + } -.chat-dice { - width: 15%; - height: 15%; - font-size: 15px; - padding: 10px; - padding-bottom: 20px; - padding-top: .2rem; - padding-bottom: .2rem; -} + .window-app.sheet .window-content .tooltip:hover .tooltiptext { + top: 2rem; + left: 2rem; + margin: 0; + padding: 0.25rem; + } -.div-river-full { - height: 5rem; - align-items: flex-start; -} + .window-app.sheet .window-content .carac-value, + .window-app.sheet .window-content .competence-xp { + margin: 0.05rem; + flex-basis: 3rem; + text-align: center; + } -.div-river { - align-content: center; - margin-left: 8px; - align-content:space-around; - justify-content: space-around; -} + /* ======================================== */ + /* Global UI elements */ -.div-center { - align-self: center; -} + /* ======================================== */ -.chat-message { - background: rgba(220,220,210,0.5); - font-size: 0.9rem; -} + h1, + h2, + h3, + h4 { + font-weight: bold; + } -.chat-message.whisper { - background: rgba(220,220,210,0.75); - border: 2px solid #545469; -} + ul, + ol { + margin: 0; + padding: 0; + } -.chat-message .chat-icon { - border: 0; - padding: 2px 6px 2px 2px; - float: left; - width: 64px; - height: 64px; -} + ul, + li { + list-style-type: none; + } -.ability-icon { - border: 0; - padding: 2px 2px 2px 2px; - max-width:32px; - max-height:32px; - width: auto; - height: auto; -} -.small-ability-icon { - border: 0; - padding: 2px 2px 2px 2px; - max-width:16px; - max-height:16px; - width: auto; - height: auto; -} -.combat-icon { - border: 0; - padding: 2px 2px 2px 2px; - max-width:24px; - max-height:24px; - width: auto; - height: auto; -} + .sheet li { + margin: 0.010rem; + padding: 0.25rem; + } -#sidebar-tabs { - flex: 0 0 32px; - box-sizing: border-box; - margin: 0 0 5px; - border-bottom: 1px solid rgba(0,0,0,0); - box-shadow: inset 0 0 2rem rgba(0,0,0,0.5); -} + .header-fields li { + margin: 0; + padding: 0; + } -#sidebar-tabs > .item.active { - border: 1px solid rgba(114,98,72,1); - background: rgba(30, 25, 20, 0.75); - box-shadow: 0 0 6px inset rgba(114,98,72,1); -} + .alterne-list>.list-item:hover { + background: rgba(100, 100, 50, 0.25); + } -#sidebar #sidebar-tabs i{ - display: inline-block; - background-position:center; - background-size:cover; - text-shadow: 1px 1px 0 rgba(0,0,0,0.75); + .alterne-list>.list-item:nth-child(even) { + background: rgba(80, 60, 0, 0.10); + } -} + .alterne-list>.list-item:nth-child(odd) { + background: rgb(160, 130, 100, 0.05); + } -/*--------------------------------------------------------------------------*/ -/* Control, Tool, hotbar & navigation */ + .specialisation-label { + font-size: 0.8rem; + } -#controls .scene-control, #controls .control-tool { - box-shadow: 0 0 3px #000; - margin: 0 0 8px; - border-radius: 0; - background: rgba(30, 25, 20, 1); - background-origin: padding-box; - border-image: url(img/ui/footer-button.png) 10 repeat; - border-image-width: 4px; - border-image-outset: 0px; -} + .carac-label, + .attr-label { + font-weight: bold; + } -#controls .scene-control.active, #controls .control-tool.active, #controls .scene-control:hover, #controls .control-tool:hover { - background: rgba(72, 46, 28, 1); - background-origin: padding-box; - border-image: url(img/ui/footer-button.png) 10 repeat; - border-image-width: 4px; - border-image-outset: 0px; - box-shadow: 0 0 3px #ff6400; -} + .list-item { + margin: 0.125rem; + box-shadow: inset 0px 0px 1px #00000096; + border-radius: 0.25rem; + padding: 0.125rem; + flex: 1 1 5rem; + display: flex !important; + } -#hotbar #action-bar #macro-list { - border: 1px solid rgba(72, 46, 28, 1); - box-shadow: 2px 2px 5px #000000; -} + .list-item-shadow { + background: rgba(87, 60, 32, 0.35); + /*flex-grow: 0;*/ + flex-wrap: nowrap; + justify-content: flex-start; + } -#hotbar #action-bar .macro { - border-image: url(img/ui/bg_control.jpg) 21 repeat; - border-image-slice: 6 6 6 6 fill; - border-image-width: 6px 6px 6px 6px; - border-image-outset: 0px 0px 0px 0px; - border-radius: 0px; -} + .list-item-shadow2 { + background: rgba(87, 60, 32, 0.25); + flex-grow: 0; + flex-wrap: nowrap; + justify-content: flex-start; + } -#hotbar .bar-controls { - background: rgba(30, 25, 20, 1); - border: 1px solid rgba(72, 46, 28, 1); -} + .item-display-show { + display: block; + } -#players { - border-image: url(img/ui/footer-button.png) 10 repeat; - border-image-width: 4px; - border-image-outset: 0px; - background: rgba(30, 25, 20, 1); -} + .item-display-hide { + display: none; + } -#navigation #scene-list .scene.nav-item.active { - background: rgba(72, 46, 28, 1); -} + .conteneur-type { + background: rgb(200, 10, 100, 0.25); + } -#navigation #scene-list .scene.nav-item { - background: rgba(30, 25, 20, 1); - background-origin: padding-box; - border-image: url(img/ui/footer-button.png) 10 repeat; - border-image-width: 4px; - border-image-outset: 0px; -} + .item-quantite { + margin-left: 0.5rem; + } -#navigation #scene-list .scene.view, #navigation #scene-list .scene.context { - background: rgba(72, 46, 28, 1); - background-origin: padding-box; - border-image: url(img/ui/footer-button.png) 10 repeat; - border-image-width: 4px; - border-image-outset: 0px; - box-shadow: 0 0 3px #ff6400; -} + .list-item-margin1 { + margin-left: 1rem; + } -#navigation #nav-toggle { - background: rgba(30, 25, 20, 1); - background-origin: padding-box; - border-image: url(img/ui/footer-button.png) 10 repeat; - border-image-width: 4px; - border-image-outset: 0px; -} + .list-item-margin2 { + margin-left: 2rem; + } -/* Tooltip container */ -.tooltip { - position: relative; - display: inline-block; - /*border-bottom: 1px dotted black; /* If you want dots under the hoverable text */ -} + .list-item-margin3 { + margin-left: 3rem; + } -/* Tooltip text */ -.tooltip .tooltiptext { - text-align: left; - background: rgba(231, 229, 226, 0.9); - width: 150px; - padding: 3px 0; - font-size: 0.9rem; + .list-item-margin4 { + margin-left: 4rem; + } - /* Position the tooltip text */ - top: 1px; - position: absolute; - z-index: 1; - - /* Fade in tooltip */ - visibility: hidden; - opacity: 0; - transition: opacity 0.3s; -} + .sheet-competence-img { + width: 24px; + max-width: 24px; + height: 24px; + max-height: 24px; + flex-grow: 0; + margin-right: 0.25rem; + } -.tooltip .ttt-fatigue{ - width: 360px; - - background: rgba(30, 25, 20, 0.9); - border-image: url(img/ui/bg_control.jpg) 21 repeat; - border-image-slice: 6 6 6 6 fill; - border-image-width: 6px 6px 6px 6px; - border-image-outset: 0px 0px 0px 0px; - border-radius: 0px; + .competence-column { + flex-direction: column; + align-content: flex-start; + justify-content: flex-start; + flex-grow: 0; + flex-basis: 1; + } - font-size: 0.8rem; - padding: 3px 0; -} + .competence-header { + align-content: flex-start; + justify-content: flex-start; + font-weight: bold; + flex-grow: 0; + } -.tooltip .ttt-ajustements { - width: 150px; - background: rgba(220,220,210,0.95); - border-radius: 6px; - font-size: 0.9rem; - padding: 3px 0; -} + .secondaire-label, + .arme-label, + .generic-label, + .competence-label, + .devotion-label, + .sort-label, + .technique-label, + .ability-label, + .arme-label, + .armure-label, + .equipement-label, + .description-label { + flex-grow: 2; + margin-left: 4px; + } -.tooltip-nobottom { - border-bottom: unset; /* If you want dots under the hoverable text */ -} -.tooltip .ttt-xp { - width: 250px; - background: rgba(220,220,210,0.95); - border-radius: 6px; - font-size: 0.9rem; - padding: 3px 0; -} + .status-header-label { + margin-left: 2px; + } -/* Show the tooltip text when you mouse over the tooltip container */ -.tooltip:hover .tooltiptext { - visibility: visible; - opacity: 1; -} + .roll-dialog-label { + margin: 4px 0; + min-width: 96px; + } -.chat-card-button { - box-shadow: inset 0px 1px 0px 0px #a6827e; - background: linear-gradient(to bottom, #21374afc 5%, #152833ab 100%); - background-color: #7d5d3b00; - border-radius: 3px; - border: 2px ridge #846109; - display: inline-block; - cursor: pointer; - color: #ffffff; - font-size: 0.8rem; - padding: 4px 12px 0px 12px; - text-decoration: none; - text-shadow: 0px 1px 0px #4d3534; - position: relative; - margin:2px; -} + .short-label { + flex-grow: 1; + } -.chat-card-button:hover { - background: linear-gradient(to bottom, #800000 5%, #3e0101 100%); - background-color: red; -} -.chat-card-button:active { - position:relative; - top:1px; -} + .keyword-label { + font-size: 0.85rem; + } -.plus-minus-button { - box-shadow: inset 0px 1px 0px 0px #a6827e; - background: linear-gradient(to bottom, #21374afc 5%, #152833ab 100%); - background-color: #7d5d3b00; - border-radius: 2px; - border: 1px ridge #846109; - display: inline-block; - cursor: pointer; - color: #ffffff; - margin: 2px 2px 2px 2px; - padding: 2px 2px 2px 2px; - text-decoration: none; - text-shadow: 0px 1px 0px #4d3534; - position: relative; - margin:0px; -} + .item-sheet-label { + flex-grow: 1; + } -.river-button:hover, -.plus-minus-button:hover, -.chat-card-button:hover { - background: linear-gradient(to bottom, #800000 5%, #3e0101 100%); - background-color: red; -} + .item-text-long-line { + flex-grow: 3; + } -.plus-minus-button:active, -.chat-card-button:active { - position:relative; - top:1px; -} + .score-label { + flex-grow: 2; + align-content: center; + } -.plus-minus { - font-size: 0.9rem; - font-weight: bold; -} + .attribut-value, + .carac-value { + flex-grow: 0; + flex-basis: 64px; + margin-right: 4px; + margin-left: 4px; + } -.ul-level1 { - padding-left: 2rem; -} + .sante-value, + .competence-value { + flex-grow: 0; + flex-basis: 2rem; + margin-right: 0.25rem; + margin-left: 0.25rem; + } -.drop-equipment-effect, -.drop-power-effect, -.drop-perk-effect, -.drop-ability-effect, -.drop-effect-specaffected, -.drop-effect-spec, -.drop-ability-weapon, -.drop-ability-armor, -.drop-race-perk, -.drop-spec-perk, -.drop-ability-power, -.drop-ability-spec, -.drop-spec-power, -.drop-specialability, -.drop-abilities, -.drop-optionnal-abilities, -.drop-virtue-vice-effect, -.drop-virtue-vice, -.drop-vice-virtue, -.drop-specialperk1, -.drop-perk2, -.drop-spec1 , -.drop-spec2 { - background: linear-gradient(to bottom, #6c95b9fc 5%, #105177ab 100%); - background-color: #7d5d3b00; - border-radius: 3px; - border: 2px ridge #846109; -} + .description-value { + flex-grow: 0; + flex-basis: 4rem; + margin-right: 0.25rem; + margin-left: 0.25rem; + } -/*************************************************************/ -#pause -{ - font-size: 2rem; -} -#pause > h3 -{ - color: #CCC -} -#pause > img { - content: url(../images/ui/crucible_pause_logo.jpg); - height: 160px; - width: 160px; - top: -80px; - left: calc(50% - 132px); -} + .competence-xp { + flex-grow: 0; + flex-basis: 2rem; + margin-right: 0.25rem; + margin-left: 0.25rem; + } -#logo { - content : url(../images/ui/crucible_game_logo.png); - width: 100px; - height: 60px; -} + .blessures-title { + font-weight: bold; + } -.dice-cell { - padding-left: 12px; - padding-right: 12px; - width: 60px; - text-align: center; -} + .alchimie-title { + font-weight: bold; + } -.dice-formula, -.dice-total { - height: 54px; - position:relative; -} + .blessure-data { + flex-direction: row; + align-content: flex-start; + justify-content: flex-start; + } -/* =================== 1. ACTOR SHEET FONT STYLES =========== *//* + .blessures-soins { + flex-grow: 0; + flex-basis: 32px; + margin-right: 4px; + margin-left: 4px; + } + + .blessures-loc { + flex-grow: 0; + flex-basis: 96px; + margin-right: 4px; + margin-left: 4px; + } + + .pointsreve-value { + flex-grow: 0; + flex-basis: 64px; + margin-right: 4px; + margin-left: 4px; + } + + .input-sante-header, + .stress-style { + flex-grow: 0; + flex-basis: 64px; + margin-right: 4px; + margin-left: 4px; + } + + .small-label { + margin-top: 5px; + } + + .padd-right { + margin-right: 8px; + } + + .padd-left { + margin-left: 8px; + } + + .stack-left { + align-items: center; + flex-shrink: 1; + flex-grow: 0; + } + + .npc-ability-label { + flex-grow: 2; + } + + .packed-left { + white-space: nowrap; + flex-grow: 0; + } + + .input-numeric-short { + width: 40px; + max-width: 40px; + flex-grow: 0; + flex-shrink: 0; + flex-basis: 40px; + margin-right: 0.25rem; + margin-left: 0.25rem; + } + + .abilities-table { + align-content: flex-start; + } + + /* ======================================== */ + .tokenhudext { + display: flex; + flex: 0 !important; + font-weight: 600; + } + + .tokenhudext.left { + justify-content: flex-start; + flex-direction: column; + position: absolute; + top: 2.75rem; + right: 4rem; + } + + .tokenhudext.right { + justify-content: flex-start; + flex-direction: column; + position: absolute; + top: 2.75rem; + left: 4rem; + } + + .control-icon.tokenhudicon { + width: fit-content; + height: fit-content; + min-width: 6rem; + flex-basis: auto; + padding: 0; + line-height: 1rem; + margin: 0.25rem; + } + + .control-icon.tokenhudicon.right { + margin-left: 8px; + } + + #token-hud .status-effects.active { + z-index: 2; + } + + /* ======================================== */ + .item-checkbox { + height: 25px; + border: 1px solid #736953a6; + border-left: none; + font-weight: 500; + font-size: 1rem; + color: black; + padding-top: 5px; + margin-right: 0px; + width: 45px; + position: relative; + left: 0px; + text-align: center; + } + + + .flex-actions-bar { + flex-grow: 2; + } + + /* ======================================== */ + /* Sidebar CSS */ + #sidebar { + font-size: 1rem; + background-position: 100%; + color: rgba(220, 220, 220, 0.75); + } + + /* background: rgb(105,85,65) url("../images/ui/texture_feuille_perso_onglets.webp") no-repeat right bottom;*/ + + #sidebar.collapsed { + height: 470px !important; + } + + #sidebar-tabs>.collapsed, + #chat-controls .chat-control-icon { + color: rgba(220, 220, 220, 0.75); + text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.75); + } + + .sidebar-tab .directory-list .entity { + border-top: 1px dashed rgba(0, 0, 0, 0.25); + border-bottom: 0 none; + padding: 0.25rem 0; + } + + .sidebar-tab .directory-list .entity:hover { + background: rgba(0, 0, 0, 0.05); + cursor: pointer; + } + + .chat-message-header { + background: rgba(220, 220, 210, 0.5); + font-size: 1.1rem; + height: 48px; + text-align: center; + vertical-align: middle; + display: flex; + align-items: center; + } + + .chat-message .message-header .flavor-text, + .chat-message .message-header .whisper-to { + font-size: 0.9rem; + } + + .chat-actor-name { + padding: 4px; + } + + .chat-img { + width: 64px; + height: 64px; + } + + .roll-dialog-header { + height: 52px; + } + + .actor-icon { + float: left; + width: 48px; + height: 48px; + padding: 2px 6px 2px 2px; + } + + .padding-dice { + padding-top: .2rem; + padding-bottom: .2rem; + } + + .dice-image { + box-sizing: border-box; + border: none; + border-radius: 0; + max-width: 100%; + } + + .dice-image-reroll { + background-color: rgba(115, 224, 115, 0.25); + border-color: #011d33; + box-sizing: border-box; + border: 1px; + border-radius: 0%; + max-width: 100%; + } + + .chat-dice { + width: 15%; + height: 15%; + font-size: 15px; + padding: 10px; + padding-bottom: 20px; + padding-top: .2rem; + padding-bottom: .2rem; + } + + .div-river-full { + height: 5rem; + align-items: flex-start; + } + + .div-river { + align-content: center; + margin-left: 8px; + align-content: space-around; + justify-content: space-around; + } + + .div-center { + align-self: center; + } + + .chat-message { + background: rgba(220, 220, 210, 0.5); + font-size: 0.9rem; + } + + .chat-message.whisper { + background: rgba(220, 220, 210, 0.75); + border: 2px solid #545469; + } + + .chat-message .chat-icon { + border: 0; + padding: 2px 6px 2px 2px; + float: left; + width: 64px; + height: 64px; + } + + .ability-icon { + border: 0; + padding: 2px 2px 2px 2px; + max-width: 32px; + max-height: 32px; + width: auto; + height: auto; + } + + .small-ability-icon { + border: 0; + padding: 2px 2px 2px 2px; + max-width: 16px; + max-height: 16px; + width: auto; + height: auto; + } + + .combat-icon { + border: 0; + padding: 2px 2px 2px 2px; + max-width: 24px; + max-height: 24px; + width: auto; + height: auto; + } + + #sidebar-tabs { + flex: 0 0 32px; + box-sizing: border-box; + margin: 0 0 5px; + border-bottom: 1px solid rgba(0, 0, 0, 0); + box-shadow: inset 0 0 2rem rgba(0, 0, 0, 0.5); + } + + #sidebar-tabs>.item.active { + border: 1px solid rgba(114, 98, 72, 1); + background: rgba(30, 25, 20, 0.75); + box-shadow: 0 0 6px inset rgba(114, 98, 72, 1); + } + + #sidebar #sidebar-tabs i { + display: inline-block; + background-position: center; + background-size: cover; + text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.75); + + } + + /*--------------------------------------------------------------------------*/ + /* Control, Tool, hotbar & navigation */ + + #controls .scene-control, + #controls .control-tool { + box-shadow: 0 0 3px #000; + margin: 0 0 8px; + border-radius: 0; + background: rgba(30, 25, 20, 1); + background-origin: padding-box; + border-image: url(img/ui/footer-button.png) 10 repeat; + border-image-width: 4px; + border-image-outset: 0px; + } + + #controls .scene-control.active, + #controls .control-tool.active, + #controls .scene-control:hover, + #controls .control-tool:hover { + background: rgba(72, 46, 28, 1); + background-origin: padding-box; + border-image: url(img/ui/footer-button.png) 10 repeat; + border-image-width: 4px; + border-image-outset: 0px; + box-shadow: 0 0 3px #ff6400; + } + + #hotbar #action-bar #macro-list { + border: 1px solid rgba(72, 46, 28, 1); + box-shadow: 2px 2px 5px #000000; + } + + #hotbar #action-bar .macro { + border-image: url(img/ui/bg_control.jpg) 21 repeat; + border-image-slice: 6 6 6 6 fill; + border-image-width: 6px 6px 6px 6px; + border-image-outset: 0px 0px 0px 0px; + border-radius: 0px; + } + + #hotbar .bar-controls { + background: rgba(30, 25, 20, 1); + border: 1px solid rgba(72, 46, 28, 1); + } + + #players { + border-image: url(img/ui/footer-button.png) 10 repeat; + border-image-width: 4px; + border-image-outset: 0px; + background: rgba(30, 25, 20, 1); + } + + #navigation #scene-list .scene.nav-item.active { + background: rgba(72, 46, 28, 1); + } + + #navigation #scene-list .scene.nav-item { + background: rgba(30, 25, 20, 1); + background-origin: padding-box; + border-image: url(img/ui/footer-button.png) 10 repeat; + border-image-width: 4px; + border-image-outset: 0px; + } + + #navigation #scene-list .scene.view, + #navigation #scene-list .scene.context { + background: rgba(72, 46, 28, 1); + background-origin: padding-box; + border-image: url(img/ui/footer-button.png) 10 repeat; + border-image-width: 4px; + border-image-outset: 0px; + box-shadow: 0 0 3px #ff6400; + } + + #navigation #nav-toggle { + background: rgba(30, 25, 20, 1); + background-origin: padding-box; + border-image: url(img/ui/footer-button.png) 10 repeat; + border-image-width: 4px; + border-image-outset: 0px; + } + + /* Tooltip container */ + .tooltip { + position: relative; + display: inline-block; + /*border-bottom: 1px dotted black; /* If you want dots under the hoverable text */ + } + + /* Tooltip text */ + .tooltip .tooltiptext { + text-align: left; + background: rgba(231, 229, 226, 0.9); + width: 150px; + padding: 3px 0; + font-size: 0.9rem; + + /* Position the tooltip text */ + top: 1px; + position: absolute; + z-index: 1; + + /* Fade in tooltip */ + visibility: hidden; + opacity: 0; + transition: opacity 0.3s; + } + + .tooltip .ttt-fatigue { + width: 360px; + + background: rgba(30, 25, 20, 0.9); + border-image: url(img/ui/bg_control.jpg) 21 repeat; + border-image-slice: 6 6 6 6 fill; + border-image-width: 6px 6px 6px 6px; + border-image-outset: 0px 0px 0px 0px; + border-radius: 0px; + + font-size: 0.8rem; + padding: 3px 0; + } + + .tooltip .ttt-ajustements { + width: 150px; + background: rgba(220, 220, 210, 0.95); + border-radius: 6px; + font-size: 0.9rem; + padding: 3px 0; + } + + .tooltip-nobottom { + border-bottom: unset; + /* If you want dots under the hoverable text */ + } + + .tooltip .ttt-xp { + width: 250px; + background: rgba(220, 220, 210, 0.95); + border-radius: 6px; + font-size: 0.9rem; + padding: 3px 0; + } + + /* Show the tooltip text when you mouse over the tooltip container */ + .tooltip:hover .tooltiptext { + visibility: visible; + opacity: 1; + } + + .chat-card-button { + box-shadow: inset 0px 1px 0px 0px #a6827e; + background: linear-gradient(to bottom, #21374afc 5%, #152833ab 100%); + background-color: #7d5d3b00; + border-radius: 3px; + border: 2px ridge #846109; + display: inline-block; + cursor: pointer; + color: #ffffff; + font-size: 0.8rem; + padding: 4px 12px 0px 12px; + text-decoration: none; + text-shadow: 0px 1px 0px #4d3534; + position: relative; + margin: 2px; + } + + .chat-card-button:hover { + background: linear-gradient(to bottom, #800000 5%, #3e0101 100%); + background-color: red; + } + + .chat-card-button:active { + position: relative; + top: 1px; + } + + .plus-minus-button { + box-shadow: inset 0px 1px 0px 0px #a6827e; + background: linear-gradient(to bottom, #21374afc 5%, #152833ab 100%); + background-color: #7d5d3b00; + border-radius: 2px; + border: 1px ridge #846109; + display: inline-block; + cursor: pointer; + color: #ffffff; + margin: 2px 2px 2px 2px; + padding: 2px 2px 2px 2px; + text-decoration: none; + text-shadow: 0px 1px 0px #4d3534; + position: relative; + margin: 0px; + } + + .river-button:hover, + .plus-minus-button:hover, + .chat-card-button:hover { + background: linear-gradient(to bottom, #800000 5%, #3e0101 100%); + background-color: red; + } + + .plus-minus-button:active, + .chat-card-button:active { + position: relative; + top: 1px; + } + + .plus-minus { + font-size: 0.9rem; + font-weight: bold; + } + + .ul-level1 { + padding-left: 2rem; + } + + .drop-equipment-effect, + .drop-power-effect, + .drop-perk-effect, + .drop-ability-effect, + .drop-effect-specaffected, + .drop-effect-spec, + .drop-ability-weapon, + .drop-ability-armor, + .drop-race-perk, + .drop-spec-perk, + .drop-ability-power, + .drop-ability-spec, + .drop-spec-power, + .drop-specialability, + .drop-abilities, + .drop-optionnal-abilities, + .drop-virtue-vice-effect, + .drop-virtue-vice, + .drop-vice-virtue, + .drop-specialperk1, + .drop-perk2, + .drop-spec1, + .drop-spec2 { + background: linear-gradient(to bottom, #6c95b9fc 5%, #105177ab 100%); + background-color: #7d5d3b00; + border-radius: 3px; + border: 2px ridge #846109; + } + + /*************************************************************/ + #pause { + font-size: 2rem; + } + + #pause>h3 { + color: #CCC + } + + #pause>img { + content: url(../images/ui/crucible_pause_logo.jpg); + height: 160px; + width: 160px; + top: -80px; + left: calc(50% - 132px); + } + + #logo { + content: url(../images/ui/crucible_game_logo.png); + width: 100px; + height: 60px; + } + + .dice-cell { + padding-left: 12px; + padding-right: 12px; + width: 60px; + text-align: center; + } + + .dice-formula, + .dice-total { + height: 54px; + position: relative; + } + + /* =================== 1. ACTOR SHEET FONT STYLES =========== */ + /* Agility AGI: #02a41d Also Used for Ranged Damage Mind MND: #a100fe Social SOC: #fd7100 @@ -1284,252 +1413,312 @@ Defence DEF: #88826a Also used in the Defence on Combat Tab Stealth STL: #505050 Perception PER: #f9c801 Also Used for Ranged Damage Focus FOC: #ff0084 -*/ -.color-class-black { - background-color: black; - background: black; -} -.color-class-agi, -.color-class-range { - background-color: #02a41d; - background: #02a41d; -} -.color-class-pool { - background-color:#c5c3c3; -} -.color-class-mnd { - background-color: #a100fe; -} -.color-class-soc { - background-color: #fd7100; -} -.color-class-str, -.color-class-meleedmg { - background-color: #5f3d00; -} -.color-class-phy, -.color-class-dmgres { - background-color: #990304; -} -.color-class-mr { - background-color: #050505; -} -.color-class-com, -.color-class-melee { - background-color: #0136ff; -} -.color-class-def, -.color-class-defence { - background-color: #88826a; -} -.color-class-stl { - background-color: #505050; -} -.color-class-per, -.color-class-ranged { - background-color: #f9c801; -} -.color-class-foc { - background-color: #ff0084; -} -.status-small-label { - font-size: 0.65rem; -} -.combat-button { - min-height: 26px; - max-height: 26px; - margin-top: 4px; -} -.no-grow { - flex-grow: 1; - max-width: 32px; -} -.status-col-name { - max-width: 72px; -} -.status-block { - max-width: 216px; -} -.momentum-block { - max-width: 128px; - justify-content: flex-start; -} -.ability-item { - flex-grow: 1; - justify-content: flex-start; - margin: 2px; -} -.ability-block { - min-width: 160px; -} -.ability-margin { - margin-left: 4px; - margin-top: 5px; -} -.combat-margin { - margin-left: 4px; - margin-top: 3px; -} -.item-ability-roll { - max-height: 42px; - min-height: 36px; -} -.item-ability-roll select, .item-ability-roll input { - margin-top: 4px; - margin-right: 2px; -} -.table-momentum { - background: none; - border: 0; -} -.img-no-border { - max-width: 48px; - max-height: 48px; - border: 0; -} -.items-title-bg { - margin-top: 6px; - background: black; - color: white; -} -.items-title-text { - margin-left: 4px; -} -.lock-icon { - width:16px; - height: 16px; -} -.item-sheet-img { - width: 64px; - height: auto; -} -.item-name-img { - flex-grow:1; - max-width: 2rem; - min-width: 2rem; -} -.item-name-label-header { - flex-grow:2; - max-width: 12rem; - min-width: 12rem; -} -.item-name-label-header-long { - flex-grow:2; - margin-top: 4px; - max-width: 14rem; - min-width: 14rem; -} -.item-name-label-header-long2 { - flex-grow:2; - margin-top: 4px; - max-width: 24rem; - min-width: 24rem; -} -.item-name-label { - flex-grow:2; - margin-top: 4px; - max-width: 10rem; - min-width: 10rem; -} -.item-name-label-long { - flex-grow:2; - margin-top: 4px; - max-width: 12rem; - min-width: 12rem; -} -.item-name-label-long2 { - flex-grow:2; - margin-top: 4px; - max-width: 22rem; - min-width: 22rem; -} -.item-name-label-level2 { - flex-grow:2; - max-width: 9rem; - min-width: 9rem; -} -.item-field-label-short { - flex-grow:1; - margin-top: 4px; - max-width: 4rem; - min-width: 4rem; -} -.item-field-label-medium { - flex-grow:1; - margin-top: 4px; - max-width: 6rem; - min-width: 6rem; -} -.item-field-label-long { - flex-grow:1; - margin-top: 4px; - max-width: 8rem; - min-width: 8rem; -} -.item-field-label-vlong { - flex-grow:1; - margin-top: 4px; - max-width: 14rem; - min-width: 14rem; -} -.item-field-label-vlong2 { - flex-grow:1; - margin-top: 4px; - max-width: 22rem; - min-width: 22rem; -} -.item-control-end { - align-self: flex-end; -} -.alternate-list { - margin-top: 4px; - flex-wrap: nowrap; -} -.item-filler { - flex-grow: 6; - flex-shrink: 7; -} -.item-controls-fixed { - min-width:2rem; - max-width: 2rem; -} -.margin-left-4 { - margin-left: 4px; -} -.dice-pool-stack { - flex: 1 1 5rem; - display: flex !important; - flex-grow: 0; - justify-content: flex-start; -} -.dice-pool-label { - margin-left: 4px; -} -.dice-pool-div { - border-left: 4px; - border-radius: 2px; - margin-bottom: 1rem; - background-color: #403f3e40; -} -.stat-column-size { - max-width: 12rem; - min-width: 12rem; - margin-right: 4px; -} -.derivated-column-size { - max-width: 14rem; - min-width: 14rem; - margin-right: 4px; -} -.hplocation-column { - margin-left: 4px; -} -.dice-pool-image { - border: 0; - margin-left: 4px; - min-width: 48px; - min-height: 48px; - max-width: 48px; - max-height: 48px; - flex-grow: 0; -} \ No newline at end of file +*/ + .color-class-black { + background-color: black; + background: black; + } + + .color-class-agi, + .color-class-range { + background-color: #02a41d; + background: #02a41d; + } + + .color-class-pool { + background-color: #c5c3c3; + } + + .color-class-mnd { + background-color: #a100fe; + } + + .color-class-soc { + background-color: #fd7100; + } + + .color-class-str, + .color-class-meleedmg { + background-color: #5f3d00; + } + + .color-class-phy, + .color-class-dmgres { + background-color: #990304; + } + + .color-class-mr { + background-color: #050505; + } + + .color-class-com, + .color-class-melee { + background-color: #0136ff; + } + + .color-class-def, + .color-class-defence { + background-color: #88826a; + } + + .color-class-stl { + background-color: #505050; + } + + .color-class-per, + .color-class-ranged { + background-color: #f9c801; + } + + .color-class-foc { + background-color: #ff0084; + } + + .status-small-label { + font-size: 0.65rem; + } + + .combat-button { + min-height: 26px; + max-height: 26px; + margin-top: 4px; + } + + .no-grow { + flex-grow: 1; + max-width: 32px; + } + + .status-col-name { + max-width: 72px; + } + + .status-block { + max-width: 216px; + } + + .momentum-block { + max-width: 128px; + justify-content: flex-start; + } + + .ability-item { + flex-grow: 1; + justify-content: flex-start; + margin: 2px; + } + + .ability-block { + min-width: 160px; + } + + .ability-margin { + margin-left: 4px; + margin-top: 5px; + } + + .combat-margin { + margin-left: 4px; + margin-top: 3px; + } + + .item-ability-roll { + max-height: 42px; + min-height: 36px; + } + + .item-ability-roll select, + .item-ability-roll input { + margin-top: 4px; + margin-right: 2px; + } + + .roll-opposed-icon:hover { + color: darkgreen; + } + + .table-momentum { + background: none; + border: 0; + } + + .img-no-border { + max-width: 48px; + max-height: 48px; + border: 0; + } + + .items-title-bg { + margin-top: 6px; + background: black; + color: white; + } + + .items-title-text { + margin-left: 4px; + } + + .lock-icon { + width: 16px; + height: 16px; + } + + .item-sheet-img { + width: 64px; + height: auto; + } + + .item-name-img { + flex-grow: 1; + max-width: 2rem; + min-width: 2rem; + } + + .item-name-label-header { + flex-grow: 2; + max-width: 12rem; + min-width: 12rem; + } + + .item-name-label-header-long { + flex-grow: 2; + margin-top: 4px; + max-width: 14rem; + min-width: 14rem; + } + + .item-name-label-header-long2 { + flex-grow: 2; + margin-top: 4px; + max-width: 24rem; + min-width: 24rem; + } + + .item-name-label { + flex-grow: 2; + margin-top: 4px; + max-width: 10rem; + min-width: 10rem; + } + + .item-name-label-long { + flex-grow: 2; + margin-top: 4px; + max-width: 12rem; + min-width: 12rem; + } + + .item-name-label-long2 { + flex-grow: 2; + margin-top: 4px; + max-width: 22rem; + min-width: 22rem; + } + + .item-name-label-level2 { + flex-grow: 2; + max-width: 9rem; + min-width: 9rem; + } + + .item-field-label-short { + flex-grow: 1; + margin-top: 4px; + max-width: 4rem; + min-width: 4rem; + } + + .item-field-label-medium { + flex-grow: 1; + margin-top: 4px; + max-width: 6rem; + min-width: 6rem; + } + + .item-field-label-long { + flex-grow: 1; + margin-top: 4px; + max-width: 8rem; + min-width: 8rem; + } + + .item-field-label-vlong { + flex-grow: 1; + margin-top: 4px; + max-width: 14rem; + min-width: 14rem; + } + + .item-field-label-vlong2 { + flex-grow: 1; + margin-top: 4px; + max-width: 22rem; + min-width: 22rem; + } + + .item-control-end { + align-self: flex-end; + } + + .alternate-list { + margin-top: 4px; + flex-wrap: nowrap; + } + + .item-filler { + flex-grow: 6; + flex-shrink: 7; + } + + .item-controls-fixed { + min-width: 2rem; + max-width: 2rem; + } + + .margin-left-4 { + margin-left: 4px; + } + + .dice-pool-stack { + flex: 1 1 5rem; + display: flex !important; + flex-grow: 0; + justify-content: flex-start; + } + + .dice-pool-label { + margin-left: 4px; + } + + .dice-pool-div { + border-left: 4px; + border-radius: 2px; + margin-bottom: 1rem; + background-color: #403f3e40; + } + + .stat-column-size { + max-width: 12rem; + min-width: 12rem; + margin-right: 4px; + } + + .derivated-column-size { + max-width: 14rem; + min-width: 14rem; + margin-right: 4px; + } + + .hplocation-column { + margin-left: 4px; + } + + .dice-pool-image { + border: 0; + margin-left: 4px; + min-width: 48px; + min-height: 48px; + max-width: 48px; + max-height: 48px; + flex-grow: 0; + } \ No newline at end of file diff --git a/system.json b/system.json index fac5ac8..e008a47 100644 --- a/system.json +++ b/system.json @@ -101,5 +101,20 @@ "download": "https://www.uberwald.me/gitea/uberwald/fvtt-dark-stars/archive/fvtt-dark-stars-v11.0.21.zip", "url": "https://www.uberwald.me/gitea/uberwald/", "background": "images/ui/dark_stars_welcome_page.webp", - "id": "fvtt-dark-stars" + "id": "fvtt-dark-stars", + "flags": { + "hotReload": { + "extensions": [ + "css", + "hbs", + "json" + ], + "paths": [ + "styles/", + "lang/", + "assets/", + "templates/" + ] + } + } } \ No newline at end of file diff --git a/template.json b/template.json index cdbc2f1..3974dce 100644 --- a/template.json +++ b/template.json @@ -278,6 +278,7 @@ "Item": { "types": [ "skill", + "cumulativetask", "perk", "ability", "armor", @@ -305,6 +306,12 @@ "signs": 0, "cherisheditems": 0 }, + "cumulativetask": { + "cumulated": 0, + "nbrolls": 0, + "skill": "", + "description": "" + }, "psychic": { "level": 0, "egocost": 0, diff --git a/templates/actors/actor-sheet.hbs b/templates/actors/actor-sheet.hbs index ae24ab3..f33cef5 100644 --- a/templates/actors/actor-sheet.hbs +++ b/templates/actors/actor-sheet.hbs @@ -32,7 +32,10 @@
    {{#each system.attributes as |attr key|}}
  • - + + + + {{/each}}
  • @@ -99,21 +102,24 @@

    - + - + - + + + + @@ -123,11 +129,47 @@ {{skill.name}} - {{skill.system.value}} + {{skill.system.value}} {{skill.derivated.label}} ({{skill.derivated.value}}) - {{skill.system.bonus}} + {{skill.system.bonus}} {{skill.total}}% + +
    + +
    + + {{/each}} +
+ +
    +
  • + +

    +
    + + + + + + + + + + + + +
  • + {{#each tasks as |task key|}} +
  • + + + {{task.name}} + {{task.system.skill}} + {{task.system.nbrolls}} + {{task.system.cumulated}} +
     
    +
    @@ -270,12 +312,8 @@ {{#if weapon.system.needammo}} {{#if weapon.ammo}} @@ -440,12 +478,8 @@ {{#if weapon.system.needammo}} {{#if weapon.ammo}} @@ -712,14 +746,7 @@
  • diff --git a/templates/actors/npc-sheet.hbs b/templates/actors/npc-sheet.hbs index 208c497..4cbfc75 100644 --- a/templates/actors/npc-sheet.hbs +++ b/templates/actors/npc-sheet.hbs @@ -23,14 +23,7 @@

    Class

  • @@ -365,14 +358,7 @@
  • diff --git a/templates/apps/roll-dialog-generic.hbs b/templates/apps/roll-dialog-generic.hbs index 0e93fbb..8022d18 100644 --- a/templates/apps/roll-dialog-generic.hbs +++ b/templates/apps/roll-dialog-generic.hbs @@ -7,58 +7,62 @@
    - + + {{#if attr}} +
    + Attribute : + {{attr.label}} ( {{attr.value}} ) +
    +
    + Modifier : + +
    + {{/if}} + {{#if skill}} -
    - Skill : - {{skill.name}} ( {{skill.total}}% ) -
    +
    + Skill : + {{skill.name}} ( {{skill.total}}% ) +
    + + {{#if weapon}} +
    + Weapon : + {{weapon.name}} +
    +
    + Above effective range ({{weapon.system.effectiverange}}, -30%) : + +
    +
    + Aiming : + +
    + {{else}} +
    + Synergy Bonus : + +
    +
    + Extra time (+30%): + +
    + {{/if}} + +
    + Bonus/Malus : + +
    {{/if}} - {{#if weapon}} -
    - Weapon : - {{weapon.name}} -
    -
    - Above effective range ({{weapon.system.effectiverange}}, -30%) : - -
    -
    - Aiming : - -
    - {{/if}} - -
    - Bonus/Malus : - -
    \ No newline at end of file diff --git a/templates/chat/chat-attack-defense-result.hbs b/templates/chat/chat-attack-defense-result.hbs deleted file mode 100644 index 4367f4b..0000000 --- a/templates/chat/chat-attack-defense-result.hbs +++ /dev/null @@ -1,75 +0,0 @@ -
    - {{#if actorImg}} - {{alias}} - {{/if}} -

    {{alias}}

    -
    - -
    - - {{#if img}} -
    - {{name}} -
    - {{/if}} - -
    -
    - -
    -
      -
    • Fight result !
    • - {{#if successDetails.fumbleDetails}} -
    • Fumble ! : {{successDetails.fumbleDetails.data.text}}
    • - {{/if}} - - - {{#if armorResult}} -
    • Armor initial result : {{armorResult.rawArmor}}
    • - {{#each armorResult.messages as |message idx|}} -
    • {{message}}
    • - {{/each}} - {{/if}} - - {{#if successDetails.hack_vs_shields}} -
    • Hack weapon : check shield !
    • - {{/if}} - - {{#if successDetails.entangle}} -
    • Entangle weapon : attacker can entangle !
    • - {{/if}} - - {{#if successDetails.knockback}} -
    • Knockback weapon : check knockback !
    • - {{/if}} - - {{#if successDetails.hack_armors}} -
    • Hack weapon : check armor damage !
    • - {{/if}} - - {{#if successDetails.penetrating_impale}} -
    • Penetrating weapon : apply the Impale condition !
    • - {{/if}} - - {{#if (or successDetails.critical_1 successDetails.critical_2)}} -
    • Critical {{#if successDetails.critical_1}} 1 {{else}} 2 {{/if}} : {{successDetails.criticalText}}
    • - {{/if}} - - {{#if successDetails.attackerHPLossValue}} -
    • Attacker has lost HP : {{successDetails.attackerHPLossValue}} HP
    • - {{/if}} - - {{#if successDetails.defenderHPLossValue}} -
    • Defender has lost HP : {{successDetails.defenderHPLossValue}} HP
    • - {{/if}} - -
    • Success details : {{successDetails.result}}
    • - -
    • Final successes {{sumSuccess}}
    • - - - -
    -
    - - diff --git a/templates/chat/chat-attribute-result.hbs b/templates/chat/chat-attribute-result.hbs new file mode 100644 index 0000000..a427450 --- /dev/null +++ b/templates/chat/chat-attribute-result.hbs @@ -0,0 +1,30 @@ +
    + {{#if actorImg}} + {{alias}} + {{/if}} +

    {{alias}}

    +
    + +
    + +
    +
    + +
    +
      + +
    • Attribute : {{attr.label}} ({{attr.value}})
    • +
    • Modifier : {{attributeModifier}}
    • +
    • Target : {{targetNumber}}
    • +
    • Result : {{diceResult}}
    • + + {{#if isSuccess}} +
    • Success !
    • + {{else}} +
    • Failure ...
    • + {{/if}} + +
    +
    + + diff --git a/templates/chat/chat-generic-result.hbs b/templates/chat/chat-generic-result.hbs index b99a14f..bce8a4c 100644 --- a/templates/chat/chat-generic-result.hbs +++ b/templates/chat/chat-generic-result.hbs @@ -18,7 +18,7 @@
      - + {{#if skill}}
    • Skill : {{skill.name}} ({{skill.total}}%)
    • {{/if}} @@ -30,18 +30,41 @@ {{/if}}
    • Bonus/Malus: {{bonusMalus}}%
    • + + {{#if extraTime}} +
    • Extra time: +30%, time x 2
    • + {{/if}} + + {{#if synergyBonus}} +
    • Synergy Bonus: +{{synergyBonus}}%
    • + {{/if}} +
    • Target Number: {{percentValue}}%
    • Result: {{diceResult}}
    • -
    • Degrees: {{degrees}}
    • +
    • + Degrees: {{degrees}} + + + + + + +
    • + {{#if taskId}} +
    • Task : {{taskName}}
    • +
    • Nb rolls : {{taskNbrolls}}
    • +
    • Cumulated : {{taskCumulated}}
    • + {{/if}} + {{#if isCriticalSuccess}} -
    • Critical Success !
    • +
    • Special Success !
    • {{else}} {{#if isSuccess}}
    • Success !
    • {{else}} {{#if isCriticalFailure}} -
    • Critical Failure !
    • +
    • Mishap !
    • {{else}}
    • Failure ...
    • {{/if}} diff --git a/templates/chat/chat-opposed-fail.hbs b/templates/chat/chat-opposed-fail.hbs deleted file mode 100644 index 4e71d14..0000000 --- a/templates/chat/chat-opposed-fail.hbs +++ /dev/null @@ -1,11 +0,0 @@ -
      - {{alias}} -

      {{defenderName}}

      -
      - -
      -
      - {{defenderName}} wins the opposition against {{attackerName}} ! -
      - -
    diff --git a/templates/chat/chat-opposition-result.hbs b/templates/chat/chat-opposition-result.hbs new file mode 100644 index 0000000..ce8b7da --- /dev/null +++ b/templates/chat/chat-opposition-result.hbs @@ -0,0 +1,19 @@ +
    + + {{winner.alias}} + + + + + + + {{looser.alias}} + +
    + +
    +
    + +
    + + \ No newline at end of file diff --git a/templates/chat/chat-request-defense.hbs b/templates/chat/chat-request-defense.hbs deleted file mode 100644 index f5bda4d..0000000 --- a/templates/chat/chat-request-defense.hbs +++ /dev/null @@ -1,46 +0,0 @@ -
    - {{#if actorImg}} - {{alias}} - {{/if}} -

    {{alias}}

    -
    - -
    - -{{#if img}} -
    - {{name}} -
    -{{/if}} - -
    -
    - -
    - - {{#if isRangedAttack}} -
    {{defender.name}} is under Ranged attack. He must roll a Target Roll to defend himself.
    - {{else}} -
    {{defender.name}} is under Melee attack. He must roll a Defense Roll to defend himself.
    - {{/if}} - -
      - {{#if isRangedAttack}} -
    • - -
    • - {{else}} -
    • - {{#each defenderWeapons as |weapon idx|}} - - {{/each}} -
    • - {{/if}} -
    - - -
- - - \ No newline at end of file diff --git a/templates/items/item-armor-sheet.hbs b/templates/items/item-armor-sheet.hbs index 5db22be..9df3856 100644 --- a/templates/items/item-armor-sheet.hbs +++ b/templates/items/item-armor-sheet.hbs @@ -47,11 +47,7 @@
  • diff --git a/templates/items/item-cumulativetask-sheet.hbs b/templates/items/item-cumulativetask-sheet.hbs new file mode 100644 index 0000000..33c05e5 --- /dev/null +++ b/templates/items/item-cumulativetask-sheet.hbs @@ -0,0 +1,33 @@ +
    +
    + +
    +

    +
    +
    + + {{> systems/fvtt-dark-stars/templates/partials/partial-item-nav.hbs}} + + {{!-- Sheet Body --}} +
    + + {{> systems/fvtt-dark-stars/templates/partials/partial-item-description.hbs}} + +
    +
      +
    • + + +
    • +
    • + + +
    • +
    • + + +
    • +
    +
    +
    +
    diff --git a/templates/items/item-cyber-sheet.hbs b/templates/items/item-cyber-sheet.hbs index bb365b0..48ba3f0 100644 --- a/templates/items/item-cyber-sheet.hbs +++ b/templates/items/item-cyber-sheet.hbs @@ -19,11 +19,7 @@
  • diff --git a/templates/items/item-genetic-sheet.hbs b/templates/items/item-genetic-sheet.hbs index fdb947d..6d8d5c8 100644 --- a/templates/items/item-genetic-sheet.hbs +++ b/templates/items/item-genetic-sheet.hbs @@ -19,11 +19,7 @@
  • diff --git a/templates/items/item-job-sheet.hbs b/templates/items/item-job-sheet.hbs index df58e01..d80b17d 100644 --- a/templates/items/item-job-sheet.hbs +++ b/templates/items/item-job-sheet.hbs @@ -17,11 +17,7 @@
  • diff --git a/templates/items/item-perk-sheet.hbs b/templates/items/item-perk-sheet.hbs index df58e01..d80b17d 100644 --- a/templates/items/item-perk-sheet.hbs +++ b/templates/items/item-perk-sheet.hbs @@ -17,11 +17,7 @@
  • diff --git a/templates/items/item-skill-sheet.hbs b/templates/items/item-skill-sheet.hbs index 086b1ab..1360e03 100644 --- a/templates/items/item-skill-sheet.hbs +++ b/templates/items/item-skill-sheet.hbs @@ -17,11 +17,7 @@
    • diff --git a/templates/items/item-spell-sheet.hbs b/templates/items/item-spell-sheet.hbs index ad4b7eb..d048d6a 100644 --- a/templates/items/item-spell-sheet.hbs +++ b/templates/items/item-spell-sheet.hbs @@ -19,11 +19,7 @@
    • diff --git a/templates/items/item-weapon-sheet.hbs b/templates/items/item-weapon-sheet.hbs index 0dc6319..a5d0d40 100644 --- a/templates/items/item-weapon-sheet.hbs +++ b/templates/items/item-weapon-sheet.hbs @@ -21,21 +21,13 @@
    • @@ -91,21 +83,13 @@
    • diff --git a/templates/partials/partial-actor-ability-block.hbs b/templates/partials/partial-actor-ability-block.hbs index 3e05740..ce3267e 100644 --- a/templates/partials/partial-actor-ability-block.hbs +++ b/templates/partials/partial-actor-ability-block.hbs @@ -4,16 +4,6 @@ \ No newline at end of file diff --git a/templates/partials/partial-options-abilities.hbs b/templates/partials/partial-options-abilities.hbs deleted file mode 100644 index 0efa008..0000000 --- a/templates/partials/partial-options-abilities.hbs +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/templates/partials/partial-options-level.hbs b/templates/partials/partial-options-level.hbs deleted file mode 100644 index 0fb86c0..0000000 --- a/templates/partials/partial-options-level.hbs +++ /dev/null @@ -1,14 +0,0 @@ -{{#if notapplicable}} - -{{/if}} - - - - - - - - - - - diff --git a/templates/partials/partial-options-range.hbs b/templates/partials/partial-options-range.hbs deleted file mode 100644 index e08a1e5..0000000 --- a/templates/partials/partial-options-range.hbs +++ /dev/null @@ -1,15 +0,0 @@ -{{#if notapplicable}} - -{{/if}} - - - - - - - - - - - - diff --git a/templates/partials/partial-roll-select.hbs b/templates/partials/partial-roll-select.hbs deleted file mode 100644 index 7c9e85f..0000000 --- a/templates/partials/partial-roll-select.hbs +++ /dev/null @@ -1,4 +0,0 @@ - -
        -
      -