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 }}
+