From 3dcfc30fb6667723a3f2df3933eb1488aefa7727 Mon Sep 17 00:00:00 2001 From: LeRatierBretonnien Date: Thu, 9 Jan 2025 20:21:02 +0100 Subject: [PATCH] Various enhancements + fixes --- css/fvtt-lethal-fantasy.css | 61 +- lang/en.json | 1040 +++++++++-------- .../applications/sheets/character-sheet.mjs | 21 +- module/documents/roll.mjs | 6 + module/models/character.mjs | 11 + module/models/miracle.mjs | 4 +- module/models/spell.mjs | 1 + packs/lf-equipment/{000088.log => 000092.log} | 0 packs/lf-equipment/CURRENT | 2 +- packs/lf-equipment/LOG | 2 +- packs/lf-equipment/LOG.old | 2 +- packs/lf-equipment/MANIFEST-000086 | 3 - packs/lf-equipment/MANIFEST-000090 | 3 + packs/{lf-skills => lf-gifts}/000088.log | 0 packs/lf-gifts/CURRENT | 2 +- packs/lf-gifts/LOG | 2 +- packs/lf-gifts/LOG.old | 2 +- packs/lf-gifts/MANIFEST-000082 | 3 - packs/lf-gifts/MANIFEST-000086 | 3 + .../000084.log => lf-skills/000092.log} | 0 packs/lf-skills/CURRENT | 2 +- packs/lf-skills/LOG | 2 +- packs/lf-skills/LOG.old | 2 +- packs/lf-skills/MANIFEST-000086 | 3 - packs/lf-skills/MANIFEST-000090 | 3 + .../{000084.log => 000088.log} | 0 packs/lf-vulnerabilities/CURRENT | 2 +- packs/lf-vulnerabilities/LOG | 2 +- packs/lf-vulnerabilities/LOG.old | 2 +- packs/lf-vulnerabilities/MANIFEST-000082 | 3 - packs/lf-vulnerabilities/MANIFEST-000086 | 3 + styles/character.less | 35 +- templates/character-biography.hbs | 14 + templates/character-miracles.hbs | 28 + templates/character-spells.hbs | 25 - templates/character-weapons.hbs | 35 +- templates/miracle.hbs | 4 + templates/spell.hbs | 2 + 38 files changed, 732 insertions(+), 603 deletions(-) rename packs/lf-equipment/{000088.log => 000092.log} (100%) delete mode 100644 packs/lf-equipment/MANIFEST-000086 create mode 100644 packs/lf-equipment/MANIFEST-000090 rename packs/{lf-skills => lf-gifts}/000088.log (100%) delete mode 100644 packs/lf-gifts/MANIFEST-000082 create mode 100644 packs/lf-gifts/MANIFEST-000086 rename packs/{lf-gifts/000084.log => lf-skills/000092.log} (100%) delete mode 100644 packs/lf-skills/MANIFEST-000086 create mode 100644 packs/lf-skills/MANIFEST-000090 rename packs/lf-vulnerabilities/{000084.log => 000088.log} (100%) delete mode 100644 packs/lf-vulnerabilities/MANIFEST-000082 create mode 100644 packs/lf-vulnerabilities/MANIFEST-000086 create mode 100644 templates/character-miracles.hbs diff --git a/css/fvtt-lethal-fantasy.css b/css/fvtt-lethal-fantasy.css index e342338..3d0a975 100644 --- a/css/fvtt-lethal-fantasy.css +++ b/css/fvtt-lethal-fantasy.css @@ -490,6 +490,16 @@ i.lethalfantasy { font-size: calc(var(--font-size-standard) * 1.4); padding-left: 5px; } +.lethalfantasy .tab.character-weapons .combat-details { + display: grid; + grid-template-columns: repeat(2, 1fr); + gap: 10px; +} +.lethalfantasy .tab.character-weapons .combat-details .combat-detail { + display: flex; + align-items: center; + gap: 10px; +} .lethalfantasy .tab.character-weapons .weapons { display: grid; grid-template-columns: repeat(2, 1fr); @@ -576,32 +586,43 @@ i.lethalfantasy { .lethalfantasy .tab.character-spells .spells .spell .name { min-width: 12rem; } -.lethalfantasy .tab.character-spells .miracles { - display: grid; - grid-template-columns: repeat(3, 1fr); - gap: 10px; -} -.lethalfantasy .tab.character-spells .miracles .miracle { - display: flex; - align-items: center; - gap: 10px; -} -.lethalfantasy .tab.character-spells .miracles .miracle .item-img { - width: 32px; - height: 32px; -} -.lethalfantasy .tab.character-spells .miracles .miracle .name { - min-width: 12rem; -} -.lethalfantasy .tab.character-spells .appris { - font-weight: bold; -} .lethalfantasy .tab.character-spells prose-mirror.inactive { min-height: 40px; } .lethalfantasy .tab.character-spells prose-mirror.active { min-height: 150px; } +.lethalfantasy .tab.character-miracles { + display: grid; + grid-template-columns: 1fr; +} +.lethalfantasy .tab.character-miracles legend a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; +} +.lethalfantasy .tab.character-miracles .miracles { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; +} +.lethalfantasy .tab.character-miracles .miracles .miracle { + display: flex; + align-items: center; + gap: 10px; +} +.lethalfantasy .tab.character-miracles .miracles .miracle .item-img { + width: 32px; + height: 32px; +} +.lethalfantasy .tab.character-miracles .miracles .miracle .name { + min-width: 12rem; +} +.lethalfantasy .tab.character-miracles prose-mirror.inactive { + min-height: 40px; +} +.lethalfantasy .tab.character-miracles prose-mirror.active { + min-height: 150px; +} .lethalfantasy .opponent-content { font-family: var(--font-primary); font-size: calc(var(--font-size-standard) * 1); diff --git a/lang/en.json b/lang/en.json index efe6793..6ad4b62 100644 --- a/lang/en.json +++ b/lang/en.json @@ -1,70 +1,79 @@ { - "TYPES": { - "Actor": { - "character": "Character", - "opponent": "NPC" - }, - "Item": { - "skill": "Skill", - "weapon": "Weapon", - "armor": "Armor", - "spell": "Spell", - "gift": "Gift", - "vulnerability": "Vulnerability", - "save": "Save", - "equipment": "Equipment" , - "shield": "Shield", - "miracle": "Miracle" - } - }, - "LETHALFANTASY": { - "Miracle": { + "Armor": { + "Category": { + "heavy": "Heavy", + "light": "Light", + "medium": "Medium" + }, "FIELDS": { - "description": { - "label": "Description" + "armorType": { + "label": "Category" }, - "components": { - "verbal": { - "label": "Verbal" - }, - "somatic": { - "label": "Somatic" - }, - "material": { - "label": "Material" - }, - "catalyst": { - "label": "Catalyst" - }, - "religious": { - "label": "Religious" - } + "cost": { + "label": "Cost" }, - "level": { - "label": "Level" + "damageReduction": { + "label": "Damage reduction" }, - "prayerTime": { - "label": "Prayer time" - }, - "miracleRange": { - "label": "Range" + "defense": { + "label": "Defense" }, - "duration": { - "label": "Duration" + "encLoad": { + "label": "Load" }, - "areaAffected": { - "label": "Area affected" + "equipped": { + "label": "Equipped?" }, - "savingThrow": { - "label": "Saving throw" + "hp": { + "label": "HP" + }, + "isHelmet": { + "label": "Is Helmet?" + }, + "maximumMovement": { + "label": "Maximum movement" + }, + "money": { + "label": "Money unit" } } }, "Character": { "FIELDS": { - "str": { - "label": "Strength" + "app": { + "label": "Appearance" + }, + "challenges": { + "agility": { + "label": "Agility" + }, + "dying": { + "label": "Dying" + }, + "str": { + "label": "Strength" + } + }, + "developmentPoints": { + "label": "Development points", + "total": { + "label": "Total" + }, + "remaining": { + "label": "Remaining" + } + }, + "char": { + "label": "Charisma" + }, + "combat": { + "armorHitPoints": { + "label": "Armor hit points" + } + }, + "con": { + "label": "Constitution" }, "dex": { "label": "Dexterity" @@ -72,116 +81,57 @@ "int": { "label": "Intelligence" }, - "wis": { - "label": "Wisdom" + "perception": { + "bonus": { + "label": "Bonus" + }, + "value": { + "label": "Perception" + } }, - "con": { - "label": "Constitution" + "saves": { + "contagion": { + "label": "Contagion" + }, + "dodge": { + "label": "Dodge" + }, + "pain": { + "label": "Pain" + }, + "poison": { + "label": "Poison" + }, + "toughness": { + "label": "Toughness" + }, + "will": { + "label": "Will" + } }, - "char": { - "label": "Charisma" - }, - "app": { - "label": "Appearance" - } - }, - "perception": { - "value": { - "label": "Perception" - }, - "bonus": { - "label": "Bonus" - } - }, - "saves": { - "will": { - "label": "Will" - }, - "dodge": { - "label": "Dodge" - }, - "toughness": { - "label": "Toughness" - }, - "contagion": { - "label": "Contagion" - }, - "poison": { - "label": "Poison" - }, - "pain": { - "label": "Pain" - } - }, - "challenges": { "str": { "label": "Strength" }, - "agility": { - "label": "Agility" - }, - "dying": { - "label": "Dying" + "wis": { + "label": "Wisdom" } } }, - "Opponent": { + "Delete": "Delete", + "Edit": "Edit", + "Equipment": { "FIELDS": { - } - }, - "Skill": { - "Category": { - "layperson": "Layperson", - "professional": "Professional", - "weapon": "Weapon", - "armor": "Armor", - "resist": "Resist" - }, - "FIELDS": { - "category": { - "label": "Category" - }, - "weaponClass": { - "label": "Class" - }, - "weaponBonus": { - "attack": { - "label": "Attack Bonus" - }, - "damage": { - "label": "Damage Bonus" - }, - "defense": { - "label": "Defense Bonus" - } - }, - "bonus" :{ - "label": "Bonus" - }, - "base": { - "label": "Base" - }, "cost": { "label": "Cost" }, "description": { "label": "Description" - } - } - }, - "Equipment": { - "FIELDS": { + }, "encLoad": { "label": "Load" }, - "cost": { - "label": "Cost" - }, "money": { "label": "Money unit" - }, - "description": { - "label": "Description" } } }, @@ -195,392 +145,174 @@ } } }, - "Weapon": { - "WeaponType": { - "melee": "Melee", - "ranged": "Ranged" + "Label": { + "combatDetails": "Combat details", + "Challenges": "Challenges", + "HP": "HP", + "Movement": "Movement", + "Saves": "Saves", + "app": "APP", + "armor": "Armor", + "armors": "Armors", + "baseModifier": "Base modifier", + "biodata": "Biodata", + "biography": "Biography", + "bonus": "Bonus", + "cha": "CHA", + "challenge": "Challenge", + "challenges": { + "agility": "Agility", + "dying": "Dying", + "strength": "Strength" }, - "WeaponClass": { - "longblade": "Long blade", - "shortblade": "Short blade", - "mediumblade": "Medium blade", - "axe": "Axe", - "hammer": "Hammer", - "polearm": "Polearm", - "thrown": "Thrown", - "bow": "Bow", - "flail": "Flail", - "sling": "Sling", - "unarmed": "Unarmed", - "mace": "Mace" + "characteristic": "Characteristic", + "characteristics": "Characteristics", + "con": "CON", + "damage": "Damage", + "description": "Description", + "details": "Details", + "dex": "DEX", + "equipment": "Equipment", + "experience": "Experience", + "gifts": "Gifts", + "grit": "Grit", + "gritEarned": "Grit earned", + "int": "INT", + "jet": "Roll", + "level": "Level", + "luc": "LUC", + "luck": "Luck", + "luckEarned": "Luck earned", + "malus": "Malus", + "maximum": "Maximum", + "miracles": "Miracles", + "movement": { + "jog": "Jog", + "run": "Run", + "sprint": "Sprint", + "walk": "Walk" }, - "FIELDS": { - "combatProgressionDice": { - "label": "Combat progression dice" - }, - "equipped": { - "label": "Equipped" - }, - "weaponType": { - "label": "Type" - }, - "damageType": { - "typeP": { - "label": "Piercing" - }, - "typeB": { - "label": "Bashing" - }, - "typeS": { - "label": "Slashing" - } - }, - "damage": { - "damageS": { - "label": "Small" - }, - "damageM": { - "label": "Medium" - } - }, - "hands": { - "label": "Hands" - }, - "defenseMax": { - "label": "Defense max" - }, - "secondsToAttack": { - "label": "Seconds to attack" - }, - "speed": { - "simpleAim": { - "label": "Simple aim" - }, - "carefulAim": { - "label": "Careful aim" - }, - "focusedAim": { - "label": "Focused aim" - } - }, - "defense": { - "label": "Defense" - }, - "weaponRange": { - "pointBlank": { - "label": "Point blank" - }, - "short": { - "label": "Short" - }, - "medium": { - "label": "Medium" - }, - "long": { - "label": "Long" - }, - "extreme": { - "label": "Extreme" - }, - "outOfSkill": { - "label": "Out of skill" - } - }, - "encLoad": { - "label": "Load" - }, - "cost": { - "label": "Cost" - }, - "money": { - "label": "Money unit" - } - } - }, - "Armor": { - "Category": { - "light": "Light", - "medium": "Medium", - "heavy": "Heavy" + "newArmor": "New armor", + "newWeapon": "New weapon", + "notes": "Notes", + "pc": "PC", + "perception": "Perception", + "rangeDefenseDialog": "Range defense dialog", + "rangeDefenseRoll": "Range defense roll", + "rangedAttackDefense": "Ranged attack defense", + "resource": "Resource", + "resources": "Resources", + "save": "Save", + "saves": { + "contagion": "Contagion", + "dodge": "Dodge", + "pain": "Pain", + "poison": "Poison", + "toughness": "Toughness", + "will": "Will" }, - "FIELDS": { - "equipped": { - "label": "Equipped?" - }, - "isHelmet": { - "label": "Is Helmet?" - }, - "armorType": { - "label": "Category" - }, - "defense": { - "label": "Defense" - }, - "maximumMovement": { - "label": "Maximum movement" - }, - "hp": { - "label": "HP" - }, - "damageReduction": { - "label": "Damage reduction" - }, - "encLoad": { - "label": "Load" - }, - "cost": { - "label": "Cost" - }, - "money": { - "label": "Money unit" - } - } + "skill": "Skill", + "skillBonus": "Skill bonus", + "skills": "Skills", + "spells": "Spells", + "str": "STR", + "titleChallenge": "Challenge", + "titleSave": "Save", + "titleSkill": "Skill", + "total": "Total", + "vulnerabilities": "Vulnerabilities", + "weapon": "Weapon", + "weapon-attack": "Weapon attack", + "weapon-damage": "Weapon damage", + "weapon-defense": "Weapon defense", + "weapons": "Weapons", + "wis": "WIS" }, - "Shield": { + "Miracle": { "FIELDS": { - "hascover": { - "label": "Provides cover" - }, - "equipped": { - "label": "Equipped" - }, - "defense": { - "label": "Defense" - }, - "movementreduction": { - "label": "Movement reduction" - }, - "hp": { - "label": "HP" - }, - "standing": { - "min":{ - "label": "Min" - }, - "max":{ - "label": "Max" - } - }, - "crouching": { - "min":{ - "label": "Min" - }, - "max":{ - "label": "Max" - } - }, - "destruction": { - "bashing": { - "label": "Bashing" - }, - "slashing": { - "label": "Slashing" - }, - "piercing": { - "label": "Piercing" - } - }, - "autodestruction": { - "bashing": { - "label": "Bashing" - }, - "slashing": { - "label": "Slashing" - }, - "piercing": { - "label": "Piercing" - } - }, - "damagereduction": { - "label": "Damage reduction" - }, - "encLoad": { - "label": "Load" - }, - "cost": { - "label": "Cost" - }, - "money": { - "label": "Money unit" - } - } - }, - "Spell": { - "FIELDS": { - "description": { - "label": "Description" - }, - "components": { - "verbal": { - "label": "Verbal" - }, - "somatic": { - "label": "Somatic" - }, - "material": { - "label": "Material" - } - }, - "level": { - "label": "Level" - }, - "cost" : { - "label": "Cost" - }, - "castingTime": { - "label": "Casting time" - }, - "spellRange": { - "label": "Range" - }, - "duration": { - "label": "Duration" + "materialComponent": { + "label": "Material component" + }, + "catalyst": { + "label": "Catalyst" }, "areaAffected": { "label": "Area affected" }, + "components": { + "catalyst": { + "label": "Catalyst" + }, + "material": { + "label": "Material" + }, + "religious": { + "label": "Religious" + }, + "somatic": { + "label": "Somatic" + }, + "verbal": { + "label": "Verbal" + } + }, + "description": { + "label": "Description" + }, + "duration": { + "label": "Duration" + }, + "level": { + "label": "Level" + }, + "miracleRange": { + "label": "Range" + }, + "prayerTime": { + "label": "Prayer time" + }, "savingThrow": { "label": "Saving throw" - }, - "extraAetherPoints": { - "label": "Extra aether points" - } - } - }, - "Vulnerability": { - "FIELDS": { - "cost": { - "label": "Cost" - }, - "gainedPoints": { - "label": "Gained points" - }, - "description": { - "label": "Description" - } - } - }, - "Save": { - "FIELDS": { - "value": { - "label": "Value" - }, - "description": { - "label": "Description" } } }, "Money": { - "Tinbits": "Tin Bits", "Coppers": "Copper", - "Silvers": "Silver", "Golds": "Gold", - "Platinums": "Platinum" + "Platinums": "Platinum", + "Silvers": "Silver", + "Tinbits": "Tin Bits" }, - "Label": { - "rangeDefenseDialog": "Range defense dialog", - "rangeDefenseRoll": "Range defense roll", - "rangedAttackDefense": "Ranged attack defense", - "miracles": "Miracles", - "biodata": "Biodata", - "titleChallenge": "Challenge", - "titleSave": "Save", - "titleSkill": "Skill", - "skill" : "Skill", - "Movement": "Movement", - "weapon-attack": "Weapon attack", - "weapon-damage": "Weapon damage", - "weapon-defense": "Weapon defense", - "baseModifier": "Base modifier", - "weapon": "Weapon", - "skillBonus": "Skill bonus", - "movement": { - "walk": "Walk", - "run": "Run", - "sprint": "Sprint", - "jog": "Jog" - }, - "perception": "Perception", - "bonus": "Bonus", - "Saves": "Saves", - "grit": "Grit", - "gritEarned": "Grit earned", - "luck": "Luck", - "luckEarned": "Luck earned", - "saves": { - "will": "Will", - "dodge": "Dodge", - "toughness": "Toughness", - "contagion": "Contagion", - "poison": "Poison", - "pain": "Pain" - }, - "Challenges": "Challenges", - "challenges": { - "strength": "Strength", - "agility": "Agility", - "dying": "Dying" - }, - "HP": "HP", - "characteristics": "Characteristics", - "characteristic": "Characteristic", - "description": "Description", - "notes": "Notes", - "total": "Total", - "details": "Details", - "skills": "Skills", - "equipment": "Equipment", - "weapons": "Weapons", - "spells" : "Spells", - "level": "Level", - "damage": "Damage", - "resource": "Resource", - "resources": "Resources", - "save": "Save", - "newArmor": "New armor", - "newWeapon": "New weapon", - "armor": "Armor", - "malus": "Malus", - "jet": "Roll", - "experience": "Experience", - "maximum": "Maximum", - "pc": "PC", - "biography": "Biography", - "gifts": "Gifts", - "vulnerabilities": "Vulnerabilities", - "str": "STR", - "wis": "WIS", - "int": "INT", - "con": "CON", - "dex": "DEX", - "luc": "LUC", - "app": "APP", - "cha": "CHA", - "challenge": "Challenge", - "armors": "Armors" + "Notifications": { + "rollFromWeapon": "Roll from an equipped weapon", + "rollTypeNotFound": "Roll type not found", + "skillNotFound": "Skill not found" }, - "Edit": "Edit", - "Delete": "Delete", - "ToggleSheet": "Toggle mode", - "Warning": { + "Opponent": { + "FIELDS": {} }, "Roll": { - "save": "Save roll {save}", - "modifierBonusMalus": "Modifier bonus/malus", + "attack": "Jet d'attaque
{item}", "changeDice": "Change dice", "damage": "Jet de dégâts
{item}", - "attack": "Jet d'attaque
{item}", - "roll": "Roll", - "normal": "Normal", - "success": "Success", "failure": "Failure", "modifier": "Modifier", + "modifierBonusMalus": "Modifier bonus/malus", + "normal": "Normal", + "roll": "Roll", + "save": "Save roll {save}", + "success": "Success", "visibility": "Visibility" }, - "Tooltip": { - "skill": "Skills list", - "addEquipment": "New equipment", - "addSpell": "New spells" + "Save": { + "FIELDS": { + "description": { + "label": "Description" + }, + "value": { + "label": "Value" + } + } }, "Setting": { "displayOpponentMalus": "Afficher le malus d'adversité", @@ -588,10 +320,302 @@ "fortune": "Roue de Fortune", "fortuneHint": "Valeur de la roue de Fortune. Nombre de joueurs + 1 en début de partie." }, - "Notifications": { - "rollFromWeapon": "Roll from an equipped weapon", - "skillNotFound": "Skill not found", - "rollTypeNotFound": "Roll type not found" + "Shield": { + "FIELDS": { + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "piercing": { + "label": "Piercing" + }, + "slashing": { + "label": "Slashing" + } + }, + "cost": { + "label": "Cost" + }, + "crouching": { + "max": { + "label": "Max" + }, + "min": { + "label": "Min" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "defense": { + "label": "Defense" + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "piercing": { + "label": "Piercing" + }, + "slashing": { + "label": "Slashing" + } + }, + "encLoad": { + "label": "Load" + }, + "equipped": { + "label": "Equipped" + }, + "hascover": { + "label": "Provides cover" + }, + "hp": { + "label": "HP" + }, + "money": { + "label": "Money unit" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "standing": { + "max": { + "label": "Max" + }, + "min": { + "label": "Min" + } + } + } + }, + "Skill": { + "Category": { + "armor": "Armor", + "layperson": "Layperson", + "professional": "Professional", + "resist": "Resist", + "weapon": "Weapon" + }, + "FIELDS": { + "base": { + "label": "Base" + }, + "bonus": { + "label": "Bonus" + }, + "category": { + "label": "Category" + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, + "weaponClass": { + "label": "Class" + } + } + }, + "Spell": { + "FIELDS": { + "areaAffected": { + "label": "Area affected" + }, + "castingTime": { + "label": "Casting time" + }, + "components": { + "material": { + "label": "Material" + }, + "somatic": { + "label": "Somatic" + }, + "verbal": { + "label": "Verbal" + } + }, + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + }, + "duration": { + "label": "Duration" + }, + "extraAetherPoints": { + "label": "Extra aether points" + }, + "level": { + "label": "Level" + }, + "savingThrow": { + "label": "Saving throw" + }, + "spellRange": { + "label": "Range" + }, + "materialComponent": { + "label": "Material component" + }, + "catalyst": { + "label": "Catalyst" + } + } + }, + "ToggleSheet": "Toggle mode", + "Tooltip": { + "addEquipment": "New equipment", + "addSpell": "New spells", + "skill": "Skills list" + }, + "Vulnerability": { + "FIELDS": { + "cost": { + "label": "Cost" + }, + "description": { + "label": "Description" + }, + "gainedPoints": { + "label": "Gained points" + } + } + }, + "Warning": {}, + "Weapon": { + "FIELDS": { + "combatProgressionDice": { + "label": "Combat progression dice" + }, + "cost": { + "label": "Cost" + }, + "damage": { + "damageM": { + "label": "Medium" + }, + "damageS": { + "label": "Small" + } + }, + "damageType": { + "typeB": { + "label": "Bashing" + }, + "typeP": { + "label": "Piercing" + }, + "typeS": { + "label": "Slashing" + } + }, + "defense": { + "label": "Defense" + }, + "defenseMax": { + "label": "Defense max" + }, + "encLoad": { + "label": "Load" + }, + "equipped": { + "label": "Equipped" + }, + "hands": { + "label": "Hands" + }, + "money": { + "label": "Money unit" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + }, + "simpleAim": { + "label": "Simple aim" + } + }, + "weaponRange": { + "extreme": { + "label": "Extreme" + }, + "long": { + "label": "Long" + }, + "medium": { + "label": "Medium" + }, + "outOfSkill": { + "label": "Out of skill" + }, + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + } + }, + "weaponType": { + "label": "Type" + } + }, + "WeaponClass": { + "axe": "Axe", + "bow": "Bow", + "flail": "Flail", + "hammer": "Hammer", + "longblade": "Long blade", + "mace": "Mace", + "mediumblade": "Medium blade", + "polearm": "Polearm", + "shortblade": "Short blade", + "sling": "Sling", + "thrown": "Thrown", + "unarmed": "Unarmed" + }, + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + } + } + }, + "TYPES": { + "Actor": { + "character": "Character", + "opponent": "NPC" + }, + "Item": { + "armor": "Armor", + "equipment": "Equipment", + "gift": "Gift", + "miracle": "Miracle", + "save": "Save", + "shield": "Shield", + "skill": "Skill", + "spell": "Spell", + "vulnerability": "Vulnerability", + "weapon": "Weapon" } } -} +} \ No newline at end of file diff --git a/module/applications/sheets/character-sheet.mjs b/module/applications/sheets/character-sheet.mjs index 35b5c47..5a392a2 100644 --- a/module/applications/sheets/character-sheet.mjs +++ b/module/applications/sheets/character-sheet.mjs @@ -35,6 +35,9 @@ export default class LethalFantasyCharacterSheet extends LethalFantasyActorSheet spells: { template: "systems/fvtt-lethal-fantasy/templates/character-spells.hbs", }, + miracles: { + template: "systems/fvtt-lethal-fantasy/templates/character-miracles.hbs", + }, biography: { template: "systems/fvtt-lethal-fantasy/templates/character-biography.hbs", }, @@ -58,7 +61,9 @@ export default class LethalFantasyCharacterSheet extends LethalFantasyActorSheet if (this.actor.system.biodata.magicUser) { tabs.spells = { id: "spells", group: "sheet", icon: "fa-sharp-duotone fa-solid fa-wand-magic-sparkles", label: "LETHALFANTASY.Label.spells" } } - + if (this.actor.system.biodata.clericUser) { + tabs.miracles = { id: "miracles", group: "sheet", icon: "fa-sharp-duotone fa-solid fa-hands-praying", label: "LETHALFANTASY.Label.miracles" } + } for (const v of Object.values(tabs)) { v.active = this.tabGroups[v.group] === v.id v.cssClass = v.active ? "active" : "" @@ -71,14 +76,6 @@ export default class LethalFantasyCharacterSheet extends LethalFantasyActorSheet const context = await super._prepareContext() context.tabs = this.#getTabs() - context.tooltipsCaracteristiques = { - } - - context.tooltipsRessources = { - } - - context.rollType = { - } return context } @@ -100,9 +97,13 @@ export default class LethalFantasyCharacterSheet extends LethalFantasyActorSheet case "spells": context.tab = context.tabs.spells context.spells = doc.itemTypes.spell - context.miracles = doc.itemTypes.miracle context.hasSpells = context.spells.length > 0 break + case "miracles": + context.tab = context.tabs.miracles + context.miracles = doc.itemTypes.miracle + context.hasMiracles = context.miracles.length > 0 + break case "weapons": context.tab = context.tabs.weapons context.weapons = doc.itemTypes.weapon diff --git a/module/documents/roll.mjs b/module/documents/roll.mjs index a6cc02e..9bdc6d0 100644 --- a/module/documents/roll.mjs +++ b/module/documents/roll.mjs @@ -282,6 +282,7 @@ export default class LethalFantasyRoll extends Roll { titleFormula = `${dice}E` } + // Specific pain case if (options.rollType === "save" && options.rollTarget.rollKey === "pain") { baseFormula = options.rollTarget.rollDice titleFormula = `${dice}` @@ -289,6 +290,11 @@ export default class LethalFantasyRoll extends Roll { fullModifier = 0 } + // Specific pain/poison/contagion case + if (options.rollType === "save" && options.rollTarget.rollKey.includes(["pain", "poison", "contagion"])) { + hasD30 = false + } + maxValue = Number(baseFormula.match(/\d+$/)[0]) // Update the max value agains const rollData = { diff --git a/module/models/character.mjs b/module/models/character.mjs index d14bee4..6ba5c82 100644 --- a/module/models/character.mjs +++ b/module/models/character.mjs @@ -55,11 +55,20 @@ export default class LethalFantasyCharacter extends foundry.abstract.TypeDataMod obj[save.id] = challengeField(save.label) return obj }, {}), + + ) + const woundFieldSchema = { + value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + duration: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + description: new fields.StringField({ initial: "", required: false, nullable: true }), + } schema.hp = new fields.SchemaField({ value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + painDamage: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + wounds: new fields.ArrayField(new fields.SchemaField(woundFieldSchema ) ), }) schema.perception = new fields.SchemaField({ @@ -92,6 +101,7 @@ export default class LethalFantasyCharacter extends foundry.abstract.TypeDataMod eyes: new fields.StringField({ required: true, nullable: false, initial: "" }), hair: new fields.StringField({ required: true, nullable: false, initial: "" }), magicUser: new fields.BooleanField({ initial: false }), + clericUser: new fields.BooleanField({ initial: false }), }) schema.modifiers = new fields.SchemaField({ @@ -114,6 +124,7 @@ export default class LethalFantasyCharacter extends foundry.abstract.TypeDataMod attackModifier: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), defenseModifier: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), damageModifier: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + armorHitPoints: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), }) const moneyField = (label) => { diff --git a/module/models/miracle.mjs b/module/models/miracle.mjs index 48628f4..cdad9e2 100644 --- a/module/models/miracle.mjs +++ b/module/models/miracle.mjs @@ -29,7 +29,9 @@ export default class LethalFantasyMiracle extends foundry.abstract.TypeDataModel schema.areaAffected = new fields.StringField({ required: true, initial: "" }) schema.duration = new fields.StringField({ required: true, initial: "" }) schema.savingThrow = new fields.StringField({ required: true, initial: "" }) - + schema.materialComponent = new fields.StringField({ required: true, initial: "" }) + schema.catalyst = new fields.StringField({ required: true, initial: "" }) + return schema } diff --git a/module/models/spell.mjs b/module/models/spell.mjs index 3cdde8e..968fd4f 100644 --- a/module/models/spell.mjs +++ b/module/models/spell.mjs @@ -30,6 +30,7 @@ export default class LethalFantasySpell extends foundry.abstract.TypeDataModel { schema.duration = new fields.StringField({ required: true, initial: "" }) schema.savingThrow = new fields.StringField({ required: true, initial: "" }) schema.extraAetherPoints = new fields.StringField({ required: true, initial: "" }) + schema.materialComponent = new fields.StringField({ required: true, initial: "" }) return schema } diff --git a/packs/lf-equipment/000088.log b/packs/lf-equipment/000092.log similarity index 100% rename from packs/lf-equipment/000088.log rename to packs/lf-equipment/000092.log diff --git a/packs/lf-equipment/CURRENT b/packs/lf-equipment/CURRENT index 5d70c22..be7fcb9 100644 --- a/packs/lf-equipment/CURRENT +++ b/packs/lf-equipment/CURRENT @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5bcb6c65ef32bb3ff4622a903d2bdc28facbf3cee5dfea01a6d1447068522534 +oid sha256:399b92689ad892a634be061571af04f3fb02b7800bc733da245057b2d8f7618e size 16 diff --git a/packs/lf-equipment/LOG b/packs/lf-equipment/LOG index 5df0d17..05d9e83 100644 --- a/packs/lf-equipment/LOG +++ b/packs/lf-equipment/LOG @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6bfdb8a3fcba5a8fe75e94d16836512d8eca7dce4c03507fdf282c5aaecc5f4b +oid sha256:7af86670cb255b145083cea9efa8b613fb055dd56097d7ace301ac3334bb4d1f size 736 diff --git a/packs/lf-equipment/LOG.old b/packs/lf-equipment/LOG.old index b58316c..5df0d17 100644 --- a/packs/lf-equipment/LOG.old +++ b/packs/lf-equipment/LOG.old @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9980dccdbf09ce54290dc77e11ed5b9ddf57630c073d6a1ead154df1e503c3bd +oid sha256:6bfdb8a3fcba5a8fe75e94d16836512d8eca7dce4c03507fdf282c5aaecc5f4b size 736 diff --git a/packs/lf-equipment/MANIFEST-000086 b/packs/lf-equipment/MANIFEST-000086 deleted file mode 100644 index 94da508..0000000 --- a/packs/lf-equipment/MANIFEST-000086 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:5b4ebcd2282af2daec8815c11fb38bd02690476bdcd07ac1070068c8b88ab91f -size 137 diff --git a/packs/lf-equipment/MANIFEST-000090 b/packs/lf-equipment/MANIFEST-000090 new file mode 100644 index 0000000..60db105 --- /dev/null +++ b/packs/lf-equipment/MANIFEST-000090 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2434144725a142d07460c37a0aee19be30a95cbb3bcd3162d742d661dd76ff60 +size 137 diff --git a/packs/lf-skills/000088.log b/packs/lf-gifts/000088.log similarity index 100% rename from packs/lf-skills/000088.log rename to packs/lf-gifts/000088.log diff --git a/packs/lf-gifts/CURRENT b/packs/lf-gifts/CURRENT index 50e566e..5d70c22 100644 --- a/packs/lf-gifts/CURRENT +++ b/packs/lf-gifts/CURRENT @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6e94d01a544f0d82551f19e973a5ac9feb5f9d9984cb5eea8eb4dca0fc55610b +oid sha256:5bcb6c65ef32bb3ff4622a903d2bdc28facbf3cee5dfea01a6d1447068522534 size 16 diff --git a/packs/lf-gifts/LOG b/packs/lf-gifts/LOG index 6baff87..8f1f80b 100644 --- a/packs/lf-gifts/LOG +++ b/packs/lf-gifts/LOG @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:403f60ba629d213f7604feb0844af8bc4baba5122241677b1e22e1f15520069b +oid sha256:60b1804e20bd446e3881c46e7d1c0933ce4773117b9c2cdcaf14cc3b93d22cd5 size 732 diff --git a/packs/lf-gifts/LOG.old b/packs/lf-gifts/LOG.old index aac65c6..6baff87 100644 --- a/packs/lf-gifts/LOG.old +++ b/packs/lf-gifts/LOG.old @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:70547da069cef8cdd801fb36c4a38a95a73c70151e9523561db76b0daa188314 +oid sha256:403f60ba629d213f7604feb0844af8bc4baba5122241677b1e22e1f15520069b size 732 diff --git a/packs/lf-gifts/MANIFEST-000082 b/packs/lf-gifts/MANIFEST-000082 deleted file mode 100644 index 8e1e8aa..0000000 --- a/packs/lf-gifts/MANIFEST-000082 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:166a7dca59e54052457c96e1d2022faf8e0a6ec5c2d5b11e31cc5bdeeadc573f -size 137 diff --git a/packs/lf-gifts/MANIFEST-000086 b/packs/lf-gifts/MANIFEST-000086 new file mode 100644 index 0000000..8afb5e1 --- /dev/null +++ b/packs/lf-gifts/MANIFEST-000086 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a29b74f46c312965fd894528238a626375dae3adf227647f66829bde93a1ce6b +size 137 diff --git a/packs/lf-gifts/000084.log b/packs/lf-skills/000092.log similarity index 100% rename from packs/lf-gifts/000084.log rename to packs/lf-skills/000092.log diff --git a/packs/lf-skills/CURRENT b/packs/lf-skills/CURRENT index 5d70c22..be7fcb9 100644 --- a/packs/lf-skills/CURRENT +++ b/packs/lf-skills/CURRENT @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5bcb6c65ef32bb3ff4622a903d2bdc28facbf3cee5dfea01a6d1447068522534 +oid sha256:399b92689ad892a634be061571af04f3fb02b7800bc733da245057b2d8f7618e size 16 diff --git a/packs/lf-skills/LOG b/packs/lf-skills/LOG index bb0c14a..c714579 100644 --- a/packs/lf-skills/LOG +++ b/packs/lf-skills/LOG @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c183c8597513768e39e8b0d44dcab932b47ef6292e06b542568ea42f512c5ac7 +oid sha256:e3c95594ce6310a6e44db93a3e5d481c838fb36d3ca4708ed02a42edecbdb35d size 736 diff --git a/packs/lf-skills/LOG.old b/packs/lf-skills/LOG.old index 8385a96..bb0c14a 100644 --- a/packs/lf-skills/LOG.old +++ b/packs/lf-skills/LOG.old @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a95a671147e9d9742163a237d44628d28ec3200a83eb65830d27954428dde8a8 +oid sha256:c183c8597513768e39e8b0d44dcab932b47ef6292e06b542568ea42f512c5ac7 size 736 diff --git a/packs/lf-skills/MANIFEST-000086 b/packs/lf-skills/MANIFEST-000086 deleted file mode 100644 index 8b682f2..0000000 --- a/packs/lf-skills/MANIFEST-000086 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:09f7b32da8aaf4ff2104511a508a76146af4930fc4611b4085cd23a24e0a6365 -size 137 diff --git a/packs/lf-skills/MANIFEST-000090 b/packs/lf-skills/MANIFEST-000090 new file mode 100644 index 0000000..b54a8e8 --- /dev/null +++ b/packs/lf-skills/MANIFEST-000090 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fb17893ed317b7cbab35c828ebeb63bacb01b4ca3043dc8acb023850c6a15bf5 +size 137 diff --git a/packs/lf-vulnerabilities/000084.log b/packs/lf-vulnerabilities/000088.log similarity index 100% rename from packs/lf-vulnerabilities/000084.log rename to packs/lf-vulnerabilities/000088.log diff --git a/packs/lf-vulnerabilities/CURRENT b/packs/lf-vulnerabilities/CURRENT index 50e566e..5d70c22 100644 --- a/packs/lf-vulnerabilities/CURRENT +++ b/packs/lf-vulnerabilities/CURRENT @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6e94d01a544f0d82551f19e973a5ac9feb5f9d9984cb5eea8eb4dca0fc55610b +oid sha256:5bcb6c65ef32bb3ff4622a903d2bdc28facbf3cee5dfea01a6d1447068522534 size 16 diff --git a/packs/lf-vulnerabilities/LOG b/packs/lf-vulnerabilities/LOG index c4765f9..c704b2e 100644 --- a/packs/lf-vulnerabilities/LOG +++ b/packs/lf-vulnerabilities/LOG @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0fb77e9729834bbc7197fd3118a0dd5f75ed007ada32f416bdc6fdcc422d0e74 +oid sha256:5d53f4a6abdd800731eb91ea36d6ac517dc5c0d8745ed50d4b54b4844ae62c70 size 732 diff --git a/packs/lf-vulnerabilities/LOG.old b/packs/lf-vulnerabilities/LOG.old index 36fda00..c4765f9 100644 --- a/packs/lf-vulnerabilities/LOG.old +++ b/packs/lf-vulnerabilities/LOG.old @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:08949d829db0f0db347d5ebdec2173a15a32072cd34b9bc831d8b1175fc2a3d4 +oid sha256:0fb77e9729834bbc7197fd3118a0dd5f75ed007ada32f416bdc6fdcc422d0e74 size 732 diff --git a/packs/lf-vulnerabilities/MANIFEST-000082 b/packs/lf-vulnerabilities/MANIFEST-000082 deleted file mode 100644 index 0dba9e6..0000000 --- a/packs/lf-vulnerabilities/MANIFEST-000082 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:98e946e5fb55da2654a6ccf64919d5a7bca90a4c0ac511c394b16339c1991921 -size 137 diff --git a/packs/lf-vulnerabilities/MANIFEST-000086 b/packs/lf-vulnerabilities/MANIFEST-000086 new file mode 100644 index 0000000..4ae6e33 --- /dev/null +++ b/packs/lf-vulnerabilities/MANIFEST-000086 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c00eb69899dbb89652365831bcdfc135c160cd1ef9abd83eccc5c10c7e71d13c +size 137 diff --git a/styles/character.less b/styles/character.less index 7eefb1f..62b8380 100644 --- a/styles/character.less +++ b/styles/character.less @@ -396,7 +396,18 @@ padding-left: 5px; } } - + + .combat-details { + display: grid; + grid-template-columns: repeat(2, 1fr); + gap: 10px; + .combat-detail { + display: flex; + align-items: center; + gap: 10px; + } + } + .weapons { display: grid; grid-template-columns: repeat(2, 1fr); @@ -488,6 +499,25 @@ } } + + prose-mirror.inactive { + min-height: 40px; + } + prose-mirror.active { + min-height: 150px; + } +} + +.tab.character-miracles { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + .miracles { display: grid; grid-template-columns: repeat(3, 1fr); @@ -506,9 +536,6 @@ } } - .appris { - font-weight: bold; - } prose-mirror.inactive { min-height: 40px; } diff --git a/templates/character-biography.hbs b/templates/character-biography.hbs index 8064246..cd16088 100644 --- a/templates/character-biography.hbs +++ b/templates/character-biography.hbs @@ -35,10 +35,22 @@ Hair {{formInput systemFields.biodata.fields.hair value=system.biodata.hair }} +
+ Dev. Points (Total) + {{formInput systemFields.developmentPoints.fields.total value=system.developmentPoints.total }} +
+
+ Dev. Points (Rem.) + {{formInput systemFields.developmentPoints.fields.remaining value=system.developmentPoints.remaining }} +
Magic User {{formInput systemFields.biodata.fields.magicUser value=system.biodata.magicUser }}
+
+ Cleric User + {{formInput systemFields.biodata.fields.clericUser value=system.biodata.clericUser }} +
Save bonus (1/5levels) {{formInput systemFields.modifiers.fields.saveModifier value=system.modifiers.saveModifier disabled=true}} @@ -49,6 +61,8 @@ Spell bonus (1/5levels) {{formInput systemFields.modifiers.fields.levelSpellModifier value=system.modifiers.levelSpellModifier disabled=true}}
+ {{/if}} + {{#if system.biodata.clericUser}}
Miracle bonus (1/5levels) {{formInput systemFields.modifiers.fields.levelMiracleModifier value=system.modifiers.levelMiracleModifier disabled=true}} diff --git a/templates/character-miracles.hbs b/templates/character-miracles.hbs new file mode 100644 index 0000000..43556e9 --- /dev/null +++ b/templates/character-miracles.hbs @@ -0,0 +1,28 @@ +
+ +
+ {{localize "LETHALFANTASY.Label.miracles"}}{{#if isEditMode}}{{/if}} +
+ {{#each miracles as |item|}} +
+ + +
+ + +
+
+ {{/each}} +
+
+ +
\ No newline at end of file diff --git a/templates/character-spells.hbs b/templates/character-spells.hbs index 14b786b..0cf9e75 100644 --- a/templates/character-spells.hbs +++ b/templates/character-spells.hbs @@ -25,29 +25,4 @@
-
- {{localize "LETHALFANTASY.Label.miracles"}}{{#if isEditMode}}{{/if}} -
- {{#each miracles as |item|}} -
- - -
- - -
-
- {{/each}} -
-
- \ No newline at end of file diff --git a/templates/character-weapons.hbs b/templates/character-weapons.hbs index 4fece6d..258d0b2 100644 --- a/templates/character-weapons.hbs +++ b/templates/character-weapons.hbs @@ -1,6 +1,15 @@
- +
+ {{localize "LETHALFANTASY.Label.combatDetails"}} +
+
+ + {{formField systemFields.combat.fields.armorHitPoints value=system.combat.armorHitPoints localize=true}} +
+
+
{{localize "LETHALFANTASY.Label.weapons"}} @@ -12,24 +21,28 @@ {{/if}}
- {{item.name}} + {{item.name}}
diff --git a/templates/miracle.hbs b/templates/miracle.hbs index e2b5261..690e227 100644 --- a/templates/miracle.hbs +++ b/templates/miracle.hbs @@ -20,6 +20,10 @@ {{formField systemFields.areaAffected value=system.areaAffected}} {{formField systemFields.duration value=system.duration}} {{formField systemFields.savingThrow value=system.savingThrow}} + + {{formField systemFields.materialComponent value=system.materialComponent}} + {{formField systemFields.catalyst value=system.catalyst}} +
{{localize "LETHALFANTASY.Label.description"}} diff --git a/templates/spell.hbs b/templates/spell.hbs index fa4bf8e..5d82704 100644 --- a/templates/spell.hbs +++ b/templates/spell.hbs @@ -21,6 +21,8 @@ {{formField systemFields.savingThrow value=system.savingThrow}} {{formField systemFields.extraAetherPoints value=system.extraAetherPoints}} + {{formField systemFields.materialComponent value=system.materialComponent}} +
{{localize "LETHALFANTASY.Label.description"}} {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}}