diff --git a/assets/fonts/baskerville-bold.ttf b/assets/fonts/baskerville-bold.ttf new file mode 100644 index 0000000..f444f26 Binary files /dev/null and b/assets/fonts/baskerville-bold.ttf differ diff --git a/assets/fonts/times-new-roman-regular.ttf b/assets/fonts/times-new-roman-regular.ttf new file mode 100644 index 0000000..51261a0 Binary files /dev/null and b/assets/fonts/times-new-roman-regular.ttf differ diff --git a/assets/icons/icon_armor.webp b/assets/icons/icon_armor.webp new file mode 100644 index 0000000..0e9e7fb Binary files /dev/null and b/assets/icons/icon_armor.webp differ diff --git a/assets/icons/icon_equipment.webp b/assets/icons/icon_equipment.webp new file mode 100644 index 0000000..b8a4249 Binary files /dev/null and b/assets/icons/icon_equipment.webp differ diff --git a/assets/icons/icon_gift.webp b/assets/icons/icon_gift.webp new file mode 100644 index 0000000..70927d4 Binary files /dev/null and b/assets/icons/icon_gift.webp differ diff --git a/assets/icons/icon_miracle.webp b/assets/icons/icon_miracle.webp new file mode 100644 index 0000000..fd0697d Binary files /dev/null and b/assets/icons/icon_miracle.webp differ diff --git a/assets/icons/icon_save.webp b/assets/icons/icon_save.webp new file mode 100644 index 0000000..f45d70f Binary files /dev/null and b/assets/icons/icon_save.webp differ diff --git a/assets/icons/icon_saving.webp b/assets/icons/icon_saving.webp new file mode 100644 index 0000000..68df14e Binary files /dev/null and b/assets/icons/icon_saving.webp differ diff --git a/assets/icons/icon_shield.webp b/assets/icons/icon_shield.webp new file mode 100644 index 0000000..df0bfe9 Binary files /dev/null and b/assets/icons/icon_shield.webp differ diff --git a/assets/icons/icon_skill.webp b/assets/icons/icon_skill.webp new file mode 100644 index 0000000..2211197 Binary files /dev/null and b/assets/icons/icon_skill.webp differ diff --git a/assets/icons/icon_spell.webp b/assets/icons/icon_spell.webp new file mode 100644 index 0000000..e9538c7 Binary files /dev/null and b/assets/icons/icon_spell.webp differ diff --git a/assets/icons/icon_vulnerability.webp b/assets/icons/icon_vulnerability.webp new file mode 100644 index 0000000..a103e09 Binary files /dev/null and b/assets/icons/icon_vulnerability.webp differ diff --git a/assets/icons/icon_weapon.webp b/assets/icons/icon_weapon.webp new file mode 100644 index 0000000..d929a97 Binary files /dev/null and b/assets/icons/icon_weapon.webp differ diff --git a/assets/ui/lethal_fantasy_background.webp b/assets/ui/lethal_fantasy_background.webp new file mode 100644 index 0000000..c0388da Binary files /dev/null and b/assets/ui/lethal_fantasy_background.webp differ diff --git a/assets/ui/lf_logo_02.webp b/assets/ui/lf_logo_02.webp new file mode 100644 index 0000000..624065d Binary files /dev/null and b/assets/ui/lf_logo_02.webp differ diff --git a/assets/ui/lf_logo_small_02.webp b/assets/ui/lf_logo_small_02.webp new file mode 100644 index 0000000..134402b Binary files /dev/null and b/assets/ui/lf_logo_small_02.webp differ diff --git a/css/fvtt-lethal-fantasy.css b/css/fvtt-lethal-fantasy.css index 7893e3b..4eebc41 100644 --- a/css/fvtt-lethal-fantasy.css +++ b/css/fvtt-lethal-fantasy.css @@ -1,8 +1,9 @@ :root { + --font-primary: "TimesNewRoman", serif; --font-size-standard: 1rem; - --background-image-base: url("../assets/parchment.jpg"); - --font-secondary: "Amiri", serif; - --logo-standard: url("../assets/lethal-fantasy-logo.webp"); + --background-image-base: url("../assets/ui/lethal_fantasy_background.webp"); + --font-secondary: "BaskervilleBold", serif; + --logo-standard: url("../assets/ui/lf_logo_small_02.webp"); } #logo { content: var(--logo-standard); @@ -130,32 +131,28 @@ i.lethalfantasy { .lethalfantasy .character-main { display: flex; } -.lethalfantasy .character-main .character-personnage { +.lethalfantasy .character-main .character-pc { display: flex; gap: 10px; flex: 1; } -.lethalfantasy .character-main .character-personnage .character-gauche { +.lethalfantasy .character-main .character-pc .character-left { min-width: 180px; display: flex; flex-direction: column; } -.lethalfantasy .character-main .character-personnage .character-gauche .character-gauche-image { +.lethalfantasy .character-main .character-pc .character-left .character-left-image { display: flex; justify-content: center; align-items: center; padding-bottom: 20px; } -.lethalfantasy .character-main .character-personnage .character-gauche .character-gauche-image .character-img { +.lethalfantasy .character-main .character-pc .character-left .character-left-image .character-img { height: 140px; width: auto; border: none; } -.lethalfantasy .character-main .character-personnage .character-gauche .character-dv .form-fields, -.lethalfantasy .character-main .character-personnage .character-gauche .character-dmax .form-fields { - flex: none; -} -.lethalfantasy .character-main .character-personnage .character-gauche .character-dmax-edit input { +.lethalfantasy .character-main .character-pc .character-left .character-hp-edit input { display: flex; width: 60px; font-size: calc(var(--font-size-standard) * 1.4); @@ -164,55 +161,37 @@ i.lethalfantasy { padding: 0 5px 0 5px; text-align: center; } -.lethalfantasy .character-main .character-personnage .character-droite { +.lethalfantasy .character-main .character-pc .character-right { display: flex; flex-direction: column; gap: 5px; } -.lethalfantasy .character-main .character-personnage .character-droite .character-name { +.lethalfantasy .character-main .character-pc .character-right .character-name { display: flex; } -.lethalfantasy .character-main .character-personnage .character-droite .character-name input { +.lethalfantasy .character-main .character-pc .character-right .character-name input { width: 400px; } -.lethalfantasy .character-main .character-personnage .character-droite .character-infos { +.lethalfantasy .character-main .character-pc .character-right .character-infos { display: flex; flex-direction: column; gap: 10px; } -.lethalfantasy .character-main .character-personnage .character-droite .character-infos label { +.lethalfantasy .character-main .character-pc .character-right .character-infos label { min-width: 120px; } -.lethalfantasy .character-main .character-personnage .character-droite .character-infos .character-voie-majeure, -.lethalfantasy .character-main .character-personnage .character-droite .character-infos .character-voie-mineure { - display: flex; -} -.lethalfantasy .character-main .character-personnage .character-droite .character-infos .character-voie-majeure input, -.lethalfantasy .character-main .character-personnage .character-droite .character-infos .character-voie-mineure input { - width: 280px; -} -.lethalfantasy .character-main .character-personnage .character-droite .character-infos .character-voie-majeure .controls, -.lethalfantasy .character-main .character-personnage .character-droite .character-infos .character-voie-mineure .controls { - padding-left: 5px; -} -.lethalfantasy .character-main .character-personnage .character-droite .character-infos .character-commanditaire { - display: flex; -} -.lethalfantasy .character-main .character-personnage .character-droite .character-infos .character-commanditaire input { - width: 280px; -} -.lethalfantasy .character-main .character-personnage .character-droite .character-infos .character-pv { +.lethalfantasy .character-main .character-pc .character-right .character-infos .character-hp { display: flex; gap: 2px; align-items: center; } -.lethalfantasy .character-main .character-personnage .character-droite .character-infos .character-pv .character-pv-value .form-fields input { +.lethalfantasy .character-main .character-pc .character-right .character-infos .character-hp .character-hp-value .form-fields input { flex: none; width: 50px; margin-left: 10px; font-size: calc(var(--font-size-standard) * 1.4); } -.lethalfantasy .character-main .character-personnage .character-droite .character-infos .character-pv .character-pv-max { +.lethalfantasy .character-main .character-pc .character-right .character-infos .character-hp .character-hp-max { clear: both; display: flex; flex-direction: row; @@ -220,53 +199,53 @@ i.lethalfantasy { margin: 3px 0; align-items: center; } -.lethalfantasy .character-main .character-personnage .character-droite .character-infos .character-pv .character-pv-max input { +.lethalfantasy .character-main .character-pc .character-right .character-infos .character-hp .character-hp-max input { width: 50px; text-align: center; font-size: calc(var(--font-size-standard) * 1.4); } -.lethalfantasy .character-main .character-personnage .character-droite .character-infos .character-pv .pv-separator { +.lethalfantasy .character-main .character-pc .character-right .character-infos .character-hp .hp-separator { font-size: calc(var(--font-size-standard) * 1.2); display: flex; align-items: center; justify-content: center; } -.lethalfantasy .character-main .character-personnage-play { +.lethalfantasy .character-main .character-pc-play { min-width: 500px; } -.lethalfantasy .character-main .character-personnage-edit { +.lethalfantasy .character-main .character-pc-edit { min-width: 650px; } -.lethalfantasy .character-main .character-caracteristiques { +.lethalfantasy .character-main .character-characteristics { display: flex; flex-direction: column; gap: 5px; flex: 1; } -.lethalfantasy .character-main .character-caracteristiques .character-caracteristique { +.lethalfantasy .character-main .character-characteristics .character-characteristic { display: flex; align-items: center; } -.lethalfantasy .character-main .character-caracteristiques .character-caracteristique .rollable:hover, -.lethalfantasy .character-main .character-caracteristiques .character-caracteristique .rollable:focus { +.lethalfantasy .character-main .character-characteristics .character-characteristic .rollable:hover, +.lethalfantasy .character-main .character-characteristics .character-characteristic .rollable:focus { text-shadow: 0 0 8px var(--color-shadow-primary); cursor: pointer; } -.lethalfantasy .character-main .character-caracteristiques .character-caracteristique .form-group { +.lethalfantasy .character-main .character-characteristics .character-characteristic .form-group { flex: 1; padding-left: 5px; } -.lethalfantasy .character-main .character-caracteristiques .character-caracteristique .form-group .form-fields { +.lethalfantasy .character-main .character-characteristics .character-characteristic .form-group .form-fields { flex: none; width: 70px; } -.lethalfantasy .character-main .character-caracteristiques .character-caracteristique .experience { +.lethalfantasy .character-main .character-characteristics .character-characteristic .experience { display: flex; align-items: center; gap: 10px; margin-left: 10px; } -.lethalfantasy .character-main .character-caracteristiques .character-caracteristique .experience input { +.lethalfantasy .character-main .character-characteristics .character-characteristic .experience input { display: flex; width: 70px; font-size: calc(var(--font-size-standard) * 1.4); @@ -274,54 +253,54 @@ i.lethalfantasy { justify-content: center; padding: 0 5px 0 5px; } -.lethalfantasy .character-main .character-caracteristiques .character-caracteristique .experience input[type="number"] { +.lethalfantasy .character-main .character-characteristics .character-characteristic .experience input[type="number"] { text-align: center; } -.lethalfantasy .character-main .character-caracteristiques .character-caracteristique .experience input[type="checkbox"] { +.lethalfantasy .character-main .character-characteristics .character-characteristic .experience input[type="checkbox"] { width: 20px; } -.lethalfantasy .character-main .character-caracteristiques .character-caracteristique .experience input[type="checkbox"]:checked { +.lethalfantasy .character-main .character-characteristics .character-characteristic .experience input[type="checkbox"]:checked { background-color: rgba(0, 0, 0, 0.1); } -.lethalfantasy .character-main .character-caracteristiques .character-caracteristique .experience input[type="checkbox"]:checked::after { +.lethalfantasy .character-main .character-characteristics .character-characteristic .experience input[type="checkbox"]:checked::after { color: rgba(0, 0, 0, 0.1); } -.lethalfantasy .character-main .character-caracteristiques-play { +.lethalfantasy .character-main .character-characteristics-play { min-width: 225px; } -.lethalfantasy .character-main .character-caracteristiques-edit { +.lethalfantasy .character-main .character-characteristic-edit { min-width: 400px; } -.lethalfantasy .character-main .character-ressources { +.lethalfantasy .character-main .character-resources { display: flex; flex-direction: column; gap: 5px; flex: 1; } -.lethalfantasy .character-main .character-ressources .character-ressource { +.lethalfantasy .character-main .character-resources .character-resource { display: flex; align-items: center; } -.lethalfantasy .character-main .character-ressources .character-ressource .rollable:hover, -.lethalfantasy .character-main .character-ressources .character-ressource .rollable:focus { +.lethalfantasy .character-main .character-resources .character-resource .rollable:hover, +.lethalfantasy .character-main .character-resources .character-resource .rollable:focus { text-shadow: 0 0 8px var(--color-shadow-primary); cursor: pointer; } -.lethalfantasy .character-main .character-ressources .character-ressource .form-group { +.lethalfantasy .character-main .character-resources .character-resource .form-group { flex: 1; padding-left: 5px; } -.lethalfantasy .character-main .character-ressources .character-ressource .form-group .form-fields { +.lethalfantasy .character-main .character-resources .character-resource .form-group .form-fields { flex: none; width: 70px; } -.lethalfantasy .character-main .character-ressources .character-ressource .character-ressource-edit { +.lethalfantasy .character-main .character-resources .character-resource .character-resource-edit { display: flex; align-items: center; gap: 10px; margin-left: 10px; } -.lethalfantasy .character-main .character-ressources .character-ressource .character-ressource-edit input { +.lethalfantasy .character-main .character-resources .character-resource .character-resource-edit input { display: flex; width: 70px; font-size: calc(var(--font-size-standard) * 1.4); @@ -329,19 +308,19 @@ i.lethalfantasy { justify-content: center; padding: 0 5px 0 5px; } -.lethalfantasy .character-main .character-ressources .character-ressource .character-ressource-edit input[type="number"] { +.lethalfantasy .character-main .character-resources .character-resource .character-resource-edit input[type="number"] { text-align: center; } -.lethalfantasy .character-main .character-ressources .character-ressource .character-ressource-edit select { +.lethalfantasy .character-main .character-resources .character-resource .character-resource-edit select { font-family: var(--font-secondary); font-size: calc(var(--font-size-standard) * 1.5); text-align: center; width: 75px; } -.lethalfantasy .character-main .character-ressources-play { +.lethalfantasy .character-main .character-resources-play { min-width: 235px; } -.lethalfantasy .character-main .character-ressources-edit { +.lethalfantasy .character-main .character-resources-edit { min-width: 400px; } .lethalfantasy .character-biography prose-mirror.inactive { @@ -350,74 +329,118 @@ i.lethalfantasy { .lethalfantasy .character-biography prose-mirror.active { min-height: 150px; } -.lethalfantasy .tab.character-items { +.lethalfantasy .tab.character-skills { display: grid; grid-template-columns: 1fr; } -.lethalfantasy .tab.character-items legend a { +.lethalfantasy .tab.character-skills legend a { font-size: calc(var(--font-size-standard) * 1.4); padding-left: 5px; } -.lethalfantasy .tab.character-items .talents { +.lethalfantasy .tab.character-skills .skills { display: grid; grid-template-columns: repeat(5, 1fr); gap: 10px; } -.lethalfantasy .tab.character-items .talents .talent { +.lethalfantasy .tab.character-skills .skills .skill { display: flex; align-items: center; gap: 10px; } -.lethalfantasy .tab.character-items .talents .talent .item-img { +.lethalfantasy .tab.character-skills .skills .skill .item-img { width: 50px; height: 50px; } -.lethalfantasy .tab.character-items .weapons { +.lethalfantasy .tab.character-skills .gifts { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; +} +.lethalfantasy .tab.character-skills .gifts .gift { + display: flex; + align-items: center; + gap: 10px; +} +.lethalfantasy .tab.character-skills .gifts .gift .item-img { + width: 50px; + height: 50px; +} +.lethalfantasy .tab.character-skills .vulnerabilities { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; +} +.lethalfantasy .tab.character-skills .vulnerabilities .vulnerability { + display: flex; + align-items: center; + gap: 10px; +} +.lethalfantasy .tab.character-skills .vulnerabilities .vulnerability .item-img { + width: 50px; + height: 50px; +} +.lethalfantasy .tab.character-weapons { + display: grid; + grid-template-columns: 1fr; +} +.lethalfantasy .tab.character-weapons legend a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; +} +.lethalfantasy .tab.character-weapons .weapons { display: grid; grid-template-columns: repeat(4, 1fr); gap: 10px; } -.lethalfantasy .tab.character-items .weapons .weapon { +.lethalfantasy .tab.character-weapons .weapons .weapon { display: flex; align-items: center; gap: 10px; } -.lethalfantasy .tab.character-items .weapons .weapon .item-img { +.lethalfantasy .tab.character-weapons .weapons .weapon .item-img { width: 50px; height: 50px; margin: 5px 0 0 0; } -.lethalfantasy .tab.character-items .armors { +.lethalfantasy .tab.character-weapons .armors { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; } -.lethalfantasy .tab.character-items .armors .armor { +.lethalfantasy .tab.character-weapons .armors .armor { display: flex; align-items: center; gap: 10px; } -.lethalfantasy .tab.character-items .armors .armor .item-img { +.lethalfantasy .tab.character-weapons .armors .armor .item-img { width: 50px; height: 50px; margin: 5px 0 0 0; } -.lethalfantasy .tab.character-items .spells { +.lethalfantasy .tab.character-spells { + display: grid; + grid-template-columns: 1fr; +} +.lethalfantasy .tab.character-spells legend a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; +} +.lethalfantasy .tab.character-spells .spells { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; } -.lethalfantasy .tab.character-items .spells .spell { +.lethalfantasy .tab.character-spells .spells .spell { display: flex; gap: 10px; } -.lethalfantasy .tab.character-items .appris { +.lethalfantasy .tab.character-spells .appris { font-weight: bold; } -.lethalfantasy .tab.character-items prose-mirror.inactive { +.lethalfantasy .tab.character-spells prose-mirror.inactive { min-height: 40px; } -.lethalfantasy .tab.character-items prose-mirror.active { +.lethalfantasy .tab.character-spells prose-mirror.active { min-height: 150px; } .lethalfantasy .opponent-content { diff --git a/lang/en.json b/lang/en.json index 6e489a5..c061d72 100644 --- a/lang/en.json +++ b/lang/en.json @@ -13,11 +13,54 @@ "vulnerability": "Vulnerability", "save": "Save", "equipment": "Equipment" , - "shield": "Shield" + "shield": "Shield", + "miracle": "Miracle" } }, "LETHALFANTASY": { + "Miracle": { + "FIELDS": { + "description": { + "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + }, + "catalyst": { + "label": "Catalyst" + }, + "religious": { + "label": "Religious" + } + }, + "level": { + "label": "Level" + }, + "prayerTime": { + "label": "Prayer time" + }, + "miracleRange": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + } + } + }, "Character": { "FIELDS": { "str": { @@ -59,6 +102,20 @@ "category": { "label": "Category" }, + "weaponClass": { + "label": "Class" + }, + "weaponBonus": { + "attack": { + "label": "Attack Bonus" + }, + "damage": { + "label": "Damage Bonus" + }, + "defense": { + "label": "Defense Bonus" + } + }, "bonus" :{ "label": "Bonus" }, @@ -101,6 +158,20 @@ "melee": "Melee", "ranged": "Ranged" }, + "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" + }, "FIELDS": { "weaponType": { "label": "Type" @@ -147,7 +218,7 @@ "defense": { "label": "Defense" }, - "range": { + "weaponRange": { "pointBlank": { "label": "Point blank" }, @@ -299,7 +370,7 @@ "castingTime": { "label": "Casting time" }, - "range": { + "spellRange": { "label": "Range" }, "duration": { @@ -344,54 +415,45 @@ "Platinums": "Platinum" }, "Label": { + "characteristics": "Characteristics", + "characteristic": "Characteristic", "description": "Description", + "notes": "Notes", "total": "Total", - "langues": "Langues", - "profil": "Profil", - "details": "Détails", - "talents": "Talents", - "progressionPossible": "Progression possible", - "equipement": "Equipement", - "spells" : "Sortilèges", - "level": "Niveau", - "degats": "Dégâts", - "ressource": "Ressource", - "sauvegarde": "Sauvegarde", - "newArmor": "Nouvelle armure", - "newWeapon": "Nouvelle arme", - "armor": "Armure", + "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": "Jet de ", - "progress": "Progression", - "hasProgressed": "A progressé dans la caractéristique", - "noProgress": "N'a pas progressé dans la caractéristique", - "experience": "Expérience", - "experienceDetail": "Expérience {detail}", - "maximum": "Maximum" + "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" }, - "Edit": "Editer", - "Delete": "Supprimer", - "ToggleSheet": "Changer de mode", + "Edit": "Edit", + "Delete": "Delete", + "ToggleSheet": "Toggle mode", "Warning": { - "dejaDeuxVoies": "Vous avez déjà choisi deux voies", - "dejaVoieMajeure": "Vous avez déjà choisi cette voie comme voie majeure", - "voieMajeureAjoutee": "Voie majeure ajoutée", - "voieMineureAjoutee": "Voie mineure ajoutée", - "voieMajeureSupprimee": "Voie majeure supprimée", - "voieMineureSupprimee": "Voie mineure supprimée", - "plusDeRessource": "Vous n'avez plus de ressource {ressource}" - }, - "Dialog": { - "ajoutVoieMajeure": "Ajouter une voie majeure va automatiquement remplacer les caractéristiques, les ressources, les langues et les biens. Continuer ?", - "ajoutVoieMajeureTitre": "Ajout d'une voie majeure", - "ajoutVoieMineureTitre": "Ajout d'une voie mineure", - "suppressionTalents": "Supprimer cette voie va supprimer les talents associés. Continuer ?", - "talentDansVoie": "Ce talent est présent dans la voie {path}. Voulez-vous vraiment le supprimer ?", - "titleSave": "Jet de sauvegarde", - "titleResource": "Jet de ressource", - "titleDamage": "Jet de dégâts", - "titleAttack": "Jet d'attaque", - "titleStandard": "Jet standard" }, "Roll": { "save": "Jet de sauvegarde
{save}", @@ -415,11 +477,9 @@ "displayArmor": "{targetName} a une armure de {targetArmor}.
Dégâts réels : {realDamage}" }, "Tooltip": { - "learnedTalents": "Les talents appris sont en gras", - "saveIntroTextTooltip": "Caractéristique : {value}
Aide : {aide}
Gêne : {gene}
Modificateur : {modificateur}", - "addAttack": "Ajouter une attaque", - "addEquipment": "Ajouter une arme, Shift + Click pour ajouter une armure", - "addSpell": "Ajouter un sortilège" + "skill": "Skills list", + "addEquipment": "New equipment", + "addSpell": "New spells" }, "Setting": { "displayOpponentMalus": "Afficher le malus d'adversité", diff --git a/lethal-fantasy.mjs b/lethal-fantasy.mjs index 24f1b71..37f201e 100644 --- a/lethal-fantasy.mjs +++ b/lethal-fantasy.mjs @@ -48,7 +48,8 @@ Hooks.once("init", function () { spell: models.LethalFantasySpell, save: models.LethalFantasySave, vulnerability: models.LethalFantasyVulnerability, - equipment: models.LethalFantasyEquipment + equipment: models.LethalFantasyEquipment, + miracle: models.LethalFantasyMiracle } // Register sheet application classes @@ -66,6 +67,7 @@ Hooks.once("init", function () { Items.registerSheet("lethalFantasy", applications.LethalFantasyArmorSheet, { types: ["armor"], makeDefault: true }) Items.registerSheet("lethalFantasy", applications.LethalFantasyShieldSheet, { types: ["shield"], makeDefault: true }) Items.registerSheet("lethalFantasy", applications.LethalFantasyEquipmentSheet, { types: ["equipment"], makeDefault: true }) + Items.registerSheet("lethalFantasy", applications.LethalFantasyMiracleSheet, { types: ["miracle"], makeDefault: true }) // Other Document Configuration CONFIG.ChatMessage.documentClass = documents.LethalFantasyChatMessage @@ -193,8 +195,12 @@ Hooks.on("hotbarDrop", (bar, data, slot) => { * Register world usage statistics * @param {string} registerKey */ -function registerWorldCount(registerKey) { +async function registerWorldCount(registerKey) { if (game.user.isGM) { - ClassCounter.registerUsageCount(game.system.id, {}) + try { + ClassCounter.registerUsageCount(game.system.id, {}) + } catch { + console.log("No usage log ") + } } -} +} \ No newline at end of file diff --git a/module/applications/_module.mjs b/module/applications/_module.mjs index f04e2b4..2a93a30 100644 --- a/module/applications/_module.mjs +++ b/module/applications/_module.mjs @@ -9,4 +9,6 @@ export { default as LethalFantasyArmorSheet } from "./sheets/armor-sheet.mjs" export { default as LethalFantasySpellSheet } from "./sheets/spell-sheet.mjs" export { default as LethalFantasyEquipmentSheet } from "./sheets/equipment-sheet.mjs" export { default as LethalFantasyShieldSheet } from "./sheets/shield-sheet.mjs" +export { default as LethalFantasyMiracleSheet } from "./sheets/miracle-sheet.mjs" export { default as LethalFantasyManager } from "./manager.mjs" + diff --git a/module/applications/sheets/character-sheet.mjs b/module/applications/sheets/character-sheet.mjs index 000fac3..4ad4676 100644 --- a/module/applications/sheets/character-sheet.mjs +++ b/module/applications/sheets/character-sheet.mjs @@ -23,10 +23,16 @@ export default class LethalFantasyCharacterSheet extends LethalFantasyActorSheet template: "systems/fvtt-lethal-fantasy/templates/character-main.hbs", }, tabs: { - template: "systems/fvtt-lethal-fantasy/templates/generic/tab-navigation.hbs", + template: "templates/generic/tab-navigation.hbs", }, - items: { - template: "systems/fvtt-lethal-fantasy/templates/character-items.hbs", + skills: { + template: "systems/fvtt-lethal-fantasy/templates/character-skills.hbs", + }, + weapons: { + template: "systems/fvtt-lethal-fantasy/templates/character-weapons.hbs", + }, + spells: { + template: "systems/fvtt-lethal-fantasy/templates/character-spells.hbs", }, biography: { template: "systems/fvtt-lethal-fantasy/templates/character-biography.hbs", @@ -35,7 +41,7 @@ export default class LethalFantasyCharacterSheet extends LethalFantasyActorSheet /** @override */ tabGroups = { - sheet: "items", + sheet: "skills", } /** @@ -44,8 +50,10 @@ export default class LethalFantasyCharacterSheet extends LethalFantasyActorSheet */ #getTabs() { const tabs = { - items: { id: "items", group: "sheet", icon: "fa-solid fa-shapes", label: "LETHALFANTASY.Character.Label.details" }, - biography: { id: "biography", group: "sheet", icon: "fa-solid fa-book", label: "LETHALFANTASY.Character.Label.biography" }, + skills: { id: "skills", group: "sheet", icon: "fa-solid fa-shapes", label: "LETHALFANTASY.Label.skills" }, + weapons: { id: "weapons", group: "sheet", icon: "fa-solid fa-swords", label: "LETHALFANTASY.Label.weapons" }, + spells: { id: "spells", group: "sheet", icon: "fa-sharp-duotone fa-solid fa-wand-magic-sparkles", label: "LETHALFANTASY.Label.spells" }, + biography: { id: "biography", group: "sheet", icon: "fa-solid fa-book", label: "LETHALFANTASY.Label.biography" }, } for (const v of Object.values(tabs)) { v.active = this.tabGroups[v.group] === v.id @@ -78,15 +86,24 @@ export default class LethalFantasyCharacterSheet extends LethalFantasyActorSheet const doc = this.document switch (partId) { case "main": - context.enrichedBiens = await TextEditor.enrichHTML(doc.system.biens, { async: true }) break - case "items": - context.tab = context.tabs.items - context.weapons = doc.itemTypes.weapon - context.armors = doc.itemTypes.armor + case "skills": + context.tab = context.tabs.skills + context.skills = doc.itemTypes.skill + context.gifts = doc.itemTypes.gifts + context.vulnerabilities = doc.itemTypes.vulnerability + break + case "spells": + context.tab = context.tabs.spells context.spells = doc.itemTypes.spell context.hasSpells = context.spells.length > 0 break + case "weapons": + context.tab = context.tabs.weapons + context.weapons = doc.itemTypes.weapon + context.armors = doc.itemTypes.armor + context.equipments = doc.itemTypes.equipment + break case "biography": context.tab = context.tabs.biography context.enrichedDescription = await TextEditor.enrichHTML(doc.system.description, { async: true }) @@ -111,11 +128,7 @@ export default class LethalFantasyCharacterSheet extends LethalFantasyActorSheet switch (data.type) { case "Item": const item = await fromUuid(data.uuid) - if (!["path", "weapon", "armor", "spell"].includes(item.type)) return - if (item.type === "path") return this.#onDropPathItem(item) - if (item.type === "weapon") return super._onDropItem(item) - if (item.type === "armor") return this._onDropItem(item) - if (item.type === "spell") return this._onDropItem(item) + return this._onDropItem(item) } } diff --git a/module/applications/sheets/miracle-sheet.mjs b/module/applications/sheets/miracle-sheet.mjs new file mode 100644 index 0000000..d3816ce --- /dev/null +++ b/module/applications/sheets/miracle-sheet.mjs @@ -0,0 +1,21 @@ +import LethalFantasyItemSheet from "./base-item-sheet.mjs" + +export default class LethalFantasyMiracleSheet extends LethalFantasyItemSheet { + /** @override */ + static DEFAULT_OPTIONS = { + classes: ["miracle"], + position: { + width: 450, + }, + window: { + contentClasses: ["miracle-content"], + }, + } + + /** @override */ + static PARTS = { + main: { + template: "systems/fvtt-lethal-fantasy/templates/miracle.hbs", + }, + } +} diff --git a/module/config/character.mjs b/module/config/character.mjs index 7830dc3..dfb3b4b 100644 --- a/module/config/character.mjs +++ b/module/config/character.mjs @@ -1,7 +1,7 @@ export const CHARACTERISTICS = Object.freeze({ str: { id: "str", - label: "LETHALFANTASY.Character.str.label" + label: "LETHALFANTASY.Label.str" }, int: { id: "int", @@ -23,6 +23,10 @@ export const CHARACTERISTICS = Object.freeze({ id: "cha", label: "LETHALFANTASY.Character.cha.label" }, + luc: { + id: "luc", + label: "LETHALFANTASY.Character.luc.label" + }, app: { id: "app", label: "LETHALFANTASY.Character.app.label" diff --git a/module/config/characteristic-tables.mjs b/module/config/characteristic-tables.mjs new file mode 100644 index 0000000..ffd77e7 --- /dev/null +++ b/module/config/characteristic-tables.mjs @@ -0,0 +1,1293 @@ + + +export const MAJOR = ["str", "int", "wis", "dex", "con", "cha"] + +export const TABLES = { + "str": [ + { + "value": 1, + "damage_modifier": -7, + "attack_modifier": -4, + "challenge": -9, + "aether_points": -20, + "hp": -3, + "encumbered": 1, + "lift": 3, + "push_drag": 6 + }, + { + "value": 2, + "damage_modifier": -6, + "attack_modifier": -4, + "challenge": -8, + "aether_points": -20, + "hp": -2, + "encumbered": 1, + "lift": 4, + "push_drag": 8 + }, + { + "value": 3, + "damage_modifier": -5, + "attack_modifier": -3, + "challenge": -7, + "aether_points": -20, + "hp": -1, + "encumbered": 1, + "lift": 5, + "push_drag": 10 + }, + { + "value": 4, + "damage_modifier": -4, + "attack_modifier": -3, + "challenge": -6, + "aether_points": -20, + "hp": -1, + "encumbered": 2, + "lift": 6, + "push_drag": 12 + }, + { + "value": 5, + "damage_modifier": -3, + "attack_modifier": -2, + "challenge": -5, + "aether_points": -20, + "hp": 0, + "encumbered": 2, + "lift": 7, + "push_drag": 14 + }, + { + "value": 6, + "damage_modifier": -2, + "attack_modifier": -1, + "challenge": -4, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 8, + "push_drag": 16 + }, + { + "value": 7, + "damage_modifier": -2, + "attack_modifier": 0, + "challenge": -3, + "aether_points": -10, + "hp": 0, + "encumbered": 3, + "lift": 9, + "push_drag": 18 + }, + { + "value": 8, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -2, + "aether_points": 0, + "hp": 0, + "encumbered": 4, + "lift": 11, + "push_drag": 22 + }, + { + "value": 9, + "damage_modifier": -1, + "attack_modifier": 0, + "challenge": -1, + "aether_points": 0, + "hp": 0, + "encumbered": 5, + "lift": 12, + "push_drag": 24 + }, + { + "value": 10, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 6, + "lift": 13, + "push_drag": 26 + }, + { + "value": 11, + "damage_modifier": 0, + "attack_modifier": 0, + "challenge": 0, + "aether_points": 0, + "hp": 0, + "encumbered": 7, + "lift": 15, + "push_drag": 30 + }, + { + "value": 12, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 1, + "aether_points": 0, + "hp": 0, + "encumbered": 8, + "lift": 17, + "push_drag": 34 + }, + { + "value": 13, + "damage_modifier": 1, + "attack_modifier": 0, + "challenge": 2, + "aether_points": 0, + "hp": 0, + "encumbered": 9, + "lift": 20, + "push_drag": 40 + }, + { + "value": 14, + "damage_modifier": 2, + "attack_modifier": 1, + "challenge": 3, + "aether_points": 0, + "hp": 1, + "encumbered": 10, + "lift": 22, + "push_drag": 44 + }, + { + "value": 15, + "damage_modifier": 3, + "attack_modifier": 1, + "challenge": 4, + "aether_points": 0, + "hp": 2, + "encumbered": 11, + "lift": 24, + "push_drag": 48 + }, + { + "value": 16, + "damage_modifier": 4, + "attack_modifier": 2, + "challenge": 5, + "aether_points": 0, + "hp": 3, + "encumbered": 12, + "lift": 26, + "push_drag": 52 + }, + { + "value": 17, + "damage_modifier": 5, + "attack_modifier": 2, + "challenge": 6, + "aether_points": 10, + "hp": 4, + "encumbered": 13, + "lift": 28, + "push_drag": 56 + }, + { + "value": 18, + "damage_modifier": 6, + "attack_modifier": 3, + "challenge": 7, + "aether_points": 20, + "hp": 5, + "encumbered": 14, + "lift": 30, + "push_drag": 60 + }, + { + "value": 19, + "damage_modifier": 7, + "attack_modifier": 3, + "challenge": 8, + "aether_points": 20, + "hp": 6, + "encumbered": 15, + "lift": 31, + "push_drag": 62 + }, + { + "value": 20, + "damage_modifier": 8, + "attack_modifier": 4, + "challenge": 9, + "aether_points": 30, + "hp": 7, + "encumbered": 15, + "lift": 32, + "push_drag": 64 + }, + { + "value": 21, + "damage_modifier": 9, + "attack_modifier": 4, + "challenge": 10, + "aether_points": 30, + "hp": 8, + "encumbered": 16, + "lift": 33, + "push_drag": 66 + }, + { + "value": 22, + "damage_modifier": 10, + "attack_modifier": 5, + "challenge": 11, + "aether_points": 40, + "hp": 9, + "encumbered": 16, + "lift": 34, + "push_drag": 68 + }, + { + "value": 23, + "damage_modifier": 12, + "attack_modifier": 5, + "challenge": 12, + "aether_points": 40, + "hp": 10, + "encumbered": 17, + "lift": 35, + "push_drag": 70 + }, + { + "value": 24, + "damage_modifier": 14, + "attack_modifier": 5, + "challenge": 13, + "aether_points": 50, + "hp": 11, + "encumbered": 18, + "lift": 36, + "push_drag": 72 + }, + { + "value": 25, + "damage_modifier": 16, + "attack_modifier": 6, + "challenge": 14, + "aether_points": 60, + "hp": 12, + "encumbered": 19, + "lift": 38, + "push_drag": 76 + } +], +"wis": [ + { + "value": 1, + "attack": -5, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 2, + "attack": -4, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0, + "arkane_casting_mod": -4 + }, + { + "value": 3, + "attack": -3, + "defense": -3, + "development_points": 0, + "aether": -50, + "spell_cognition": 0.01, + "arkane_casting_mod": -3 + }, + { + "value": 4, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.05, + "arkane_casting_mod": -3 + }, + { + "value": 5, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -45, + "spell_cognition": 0.1, + "arkane_casting_mod": -2 + }, + { + "value": 6, + "attack": -2, + "defense": -2, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.15, + "arkane_casting_mod": -2 + }, + { + "value": 7, + "attack": -1, + "defense": -1, + "development_points": 0, + "aether": -40, + "spell_cognition": 0.2, + "arkane_casting_mod": -1 + }, + { + "value": 8, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.25, + "arkane_casting_mod": -1 + }, + { + "value": 9, + "attack": -1, + "defense": 0, + "development_points": 0, + "aether": -30, + "spell_cognition": 0.3, + "arkane_casting_mod": 0 + }, + { + "value": 10, + "attack": 0, + "defense": 0, + "development_points": 0, + "aether": -20, + "spell_cognition": 0.35, + "arkane_casting_mod": 0 + }, + { + "value": 11, + "attack": 0, + "defense": 0, + "development_points": 1, + "aether": -10, + "spell_cognition": 0.45, + "arkane_casting_mod": 0 + }, + { + "value": 12, + "attack": 1, + "defense": 0, + "development_points": 2, + "aether": 0, + "spell_cognition": 0.5, + "arkane_casting_mod": 1 + }, + { + "value": 13, + "attack": 1, + "defense": 0, + "development_points": 3, + "aether": 0, + "spell_cognition": 0.6, + "arkane_casting_mod": 1 + }, + { + "value": 14, + "attack": 1, + "defense": 1, + "development_points": 4, + "aether": 10, + "spell_cognition": 0.65, + "arkane_casting_mod": 2 + }, + { + "value": 15, + "attack": 2, + "defense": 1, + "development_points": 5, + "aether": 20, + "spell_cognition": 0.75, + "arkane_casting_mod": 2 + }, + { + "value": 16, + "attack": 2, + "defense": 1, + "development_points": 7, + "aether": 30, + "spell_cognition": 0.8, + "arkane_casting_mod": 3 + }, + { + "value": 17, + "attack": 2, + "defense": 1, + "development_points": 9, + "aether": 40, + "spell_cognition": 0.85, + "arkane_casting_mod": 3 + }, + { + "value": 18, + "attack": 3, + "defense": 2, + "development_points": 11, + "aether": 50, + "spell_cognition": 0.9, + "arkane_casting_mod": 4 + }, + { + "value": 19, + "attack": 3, + "defense": 2, + "development_points": 13, + "aether": 60, + "spell_cognition": 0.92, + "arkane_casting_mod": 5 + }, + { + "value": 20, + "attack": 3, + "defense": 2, + "development_points": 15, + "aether": 70, + "spell_cognition": 0.94, + "arkane_casting_mod": 6 + }, + { + "value": 21, + "attack": 4, + "defense": 2, + "development_points": 18, + "aether": 80, + "spell_cognition": 0.95, + "arkane_casting_mod": 7 + }, + { + "value": 22, + "attack": 4, + "defense": 3, + "development_points": 21, + "aether": 90, + "spell_cognition": 0.96, + "arkane_casting_mod": 7 + }, + { + "value": 23, + "attack": 4, + "defense": 3, + "development_points": 24, + "aether": 100, + "spell_cognition": 0.97, + "arkane_casting_mod": 8 + }, + { + "value": 24, + "attack": 5, + "defense": 3, + "development_points": 27, + "aether": 110, + "spell_cognition": 0.98, + "arkane_casting_mod": 8 + }, + { + "value": 25, + "attack": 5, + "defense": 4, + "development_points": 30, + "aether": 125, + "spell_cognition": 0.99, + "arkane_casting_mod": 9 + } +], +"con": [ + { + "value": 1, + + "hp ": 1, + "aether_points": -50, + "pain_save": 1, + "toughness_save": -5, + "stabilization_dice": "D6", + "base_pain_tolerance": 20 + }, + { + "value": 2, + + "hp ": 2, + "aether_points": -40, + "pain_save": 2, + "toughness_saave": -4, + "stabilization_dice": "D6", + "base_pain_tolerance": 21 + }, + { + "value": 3, + + "hp ": 3, + "aether_points": -35, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 22 + }, + { + "value": 4, + + "hp ": 4, + "aether_points": -30, + "pain_save": 2, + "toughness_save": -3, + "stabilization_dice": "D6", + "base_pain_tolerance": 23 + }, + { + "value": 5, + + "hp ": 5, + "aether_points": -25, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 24 + }, + { + "value": 6, + + "hp ": 6, + "aether_points": -20, + "pain_save": 3, + "toughness_save": -2, + "stabilization_dice": "D6", + "base_pain_tolerance": 26 + }, + { + "value": 7, + + "hp ": 7, + "aether_points": -15, + "pain_save": 3, + "toughness_save": -1, + "stabilization_dice": "D6", + "base_pain_tolerance": 28 + }, + { + "value": 8, + + "hp ": 8, + "aether_points": -10, + "pain_save": 4, + "toughness_save": -1, + "stabilization_dice": "D8", + "base_pain_tolerance": 29 + }, + { + "value": 9, + + "hp ": 9, + "aether_points": -5, + "pain_save": 4, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 10, + + "hp ": 10, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 30 + }, + { + "value": 11, + + "hp ": 11, + "aether_points": 0, + "pain_save": 5, + "toughness_save": 0, + "stabilization_dice": "D8", + "base_pain_tolerance": 31 + }, + { + "value": 12, + + "hp ": 12, + "aether_points": 5, + "pain_save": 6, + "toughness_save": 0, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 13, + + "hp ": 13, + "aether_points": 10, + "pain_save": 7, + "toughness_save": 1, + "stabilization_dice": "D10", + "base_pain_tolerance": 31 + }, + { + "value": 14, + + "hp ": 14, + "aether_points": 20, + "pain_save": 7, + "toughness_save": 2, + "stabilization_dice": "D10", + "base_pain_tolerance": 32 + }, + { + "value": 15, + + "hp ": 15, + "aether_points": 30, + "pain_save": 8, + "toughness_save": 3, + "stabilization_dice": "D12", + "base_pain_tolerance": 32 + }, + { + "value": 16, + + "hp ": 16, + "aether_points": 40, + "pain_save": 8, + "toughness_save": 4, + "stabilization_dice": "D12", + "base_pain_tolerance": 33 + }, + { + "value": 17, + + "hp ": 17, + "aether_points": 50, + "pain_save": 9, + "toughness_save": 5, + "stabilization_dice": "D12", + "base_pain_tolerance": 34 + }, + { + "value": 18, + + "hp ": 18, + "aether_points": 60, + "pain_save": 9, + "toughness_save": 6, + "stabilization_dice": "D12", + "base_pain_tolerance": 35 + }, + { + "value": 19, + + "hp ": 19, + "aether_points": 70, + "pain_save": 10, + "toughness_save": 7, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 20, + + "hp ": 20, + "aether_points": 80, + "pain_save": 10, + "toughness_save": 8, + "stabilization_dice": "D12", + "base_pain_tolerance": 36 + }, + { + "value": 21, + + "hp ": 21, + "aether_points": 90, + "pain_save": 11, + "toughness_save": 9, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 22, + + "hp ": 22, + "aether_points": 100, + "pain_save": 11, + "toughness_save": 10, + "stabilization_dice": "D20", + "base_pain_tolerance": 37 + }, + { + "value": 23, + + "hp ": 23, + "aether_points": 110, + "pain_save": 12, + "toughness_save": 11, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 24, + + "hp ": 24, + "aether_points": 120, + "pain_save": 12, + "toughness_save": 12, + "stabilization_dice": "D20", + "base_pain_tolerance": 38 + }, + { + "value": 25, + "hp ": 25, + "aether_points": 130, + "pain_save": 13, + "toughness_save": 13, + "stabilization_dice": "D20", + "base_pain_tolerance": 40 + } +], +"cha":[ + { + "value": 1, + "grit": -5, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 2, + "grit": -4, + "turning_casting": -4, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 3, + "grit": -4, + "turning_casting": -3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 4, + "grit": -3, + "turning_casting": 3, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 5, + "grit": -3, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 6, + "grit": -2, + "turning_casting": -2, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 7, + "grit": -2, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 8, + "grit": -1, + "turning_casting": -1, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 9, + "grit": -1, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 10, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 11, + "grit": 0, + "turning_casting": 0, + "development_points ": 0, + "divine_miracle_bonus": 0 + }, + { + "value": 12, + "grit": 0, + "turning_casting": 1, + "development_points ": 1, + "divine_miracle_bonus": 1 + }, + { + "value": 13, + "grit": 1, + "turning_casting": 1, + "development_points ": 2, + "divine_miracle_bonus": 1 + }, + { + "value": 14, + "grit": 2, + "turning_casting": 2, + "development_points ": 4, + "divine_miracle_bonus": 2 + }, + { + "value": 15, + "grit": 4, + "turning_casting": 2, + "development_points ": 6, + "divine_miracle_bonus": 2 + }, + { + "value": 16, + "grit": 6, + "turning_casting": 3, + "development_points ": 7, + "divine_miracle_bonus": 3 + }, + { + "value": 17, + "grit": 8, + "turning_casting": 3, + "development_points ": 8, + "divine_miracle_bonus": 3 + }, + { + "value": 18, + "grit": 10, + "turning_casting": 4, + "development_points ": 9, + "divine_miracle_bonus": 4 + }, + { + "value": 19, + "grit": 11, + "turning_casting": 5, + "development_points ": 10, + "divine_miracle_bonus": 5 + }, + { + "value": 20, + "grit": 12, + "turning_casting": 6, + "development_points ": 11, + "divine_miracle_bonus": 5 + }, + { + "value": 21, + "grit": 13, + "turning_casting": 7, + "development_points ": 12, + "divine_miracle_bonus": 5 + }, + { + "value": 22, + "grit": 14, + "turning_casting": 7, + "development_points ": 13, + "divine_miracle_bonus": 6 + }, + { + "value": 23, + "grit": 15, + "turning_casting": 8, + "development_points ": 14, + "divine_miracle_bonus": 6 + }, + { + "value": 24, + "grit": 16, + "turning_casting": 8, + "development_points ": 15, + "divine_miracle_bonus": 6 + }, + { + "value": 25, + "grit": 18, + "turning_casting": 9, + "development_points ": 16, + "divine_miracle_bonus": 7 + } +], +"luc": [ + { + "value": 1, + "per_level ": 0 + }, + { + "value": 2, + "per_level ": 0 + }, + { + "value": 3, + "per_level ": 1 + }, + { + "value": 4, + "per_level ": 2 + }, + { + "value": 5, + "per_level ": 3 + }, + { + "value": 6, + "per_level ": 4 + }, + { + "value": 7, + "per_level ": 5 + }, + { + "value": 8, + "per_level ": 6 + }, + { + "value": 9, + "per_level ": 7 + }, + { + "value": 10, + "per_level ": 8 + }, + { + "value": 11, + "per_level ": 9 + }, + { + "value": 12, + "per_level ": 10 + }, + { + "value": 13, + "per_level ": 11 + }, + { + "value": 14, + "per_level ": 12 + }, + { + "value": 15, + "per_level ": 13 + }, + { + "value": 16, + "per_level ": 14 + }, + { + "value": 17, + "per_level ": 15 + }, + { + "value": 18, + "per_level ": 16 + }, + { + "value": 19, + "per_level ": 18 + }, + { + "value": 20, + "per_level ": 20 + }, + { + "value": 21, + "per_level ": 22 + }, + { + "value": 22, + "per_level ": 24 + }, + { + "value": 23, + "per_level ": 26 + }, + { + "value": 24, + "per_level ": 28 + }, + { + "value": 25, + "per_level ": 30 + } +], +"wis": [ + { + "value": 1, + "defense": -5, + "init_cap": "-", + "development_points ": 0, + "attack ": -5, + "willpower_save": -5, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 2, + "defense": -4, + "init_cap": "-", + "development_points ": 0, + "attack ": -4, + "willpower_save": -4, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 3, + "defense": -3, + "init_cap": "-", + "development_points ": 0, + "attack ": -3, + "willpower_save": -3, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 4, + "defense": -3, + "init_cap": "-", + "development_points ": 0, + "attack ": -2, + "willpower_save": -3, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 5, + "defense": -2, + "init_cap": "-", + "development_points ": 0, + "attack ": 1, + "willpower_save": -2, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 6, + "defense": -2, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -2, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 7, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -1, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 8, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": -1, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 9, + "defense": -1, + "init_cap": "-", + "development_points ": 0, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 10, + "defense": 0, + "init_cap": 18, + "development_points ": 0, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 11, + "defense": 0, + "init_cap": 16, + "development_points ": 1, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 0, + "": "" + }, + { + "value": 12, + "defense": 1, + "init_cap": 14, + "development_points ": 2, + "attack ": 0, + "willpower_save": 0, + "divine_miracle_bonus ": 1, + "": "" + }, + { + "value": 13, + "defense": 1, + "init_cap": 12, + "development_points ": 3, + "attack ": 0, + "willpower_save": 1, + "divine_miracle_bonus ": 1, + "": "" + }, + { + "value": 14, + "defense": 1, + "init_cap": 10, + "development_points ": 4, + "attack ": 1, + "willpower_save": 2, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 15, + "defense": 2, + "init_cap": 8, + "development_points ": 5, + "attack ": 1, + "willpower_save": 3, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 16, + "defense": 2, + "init_cap": 7, + "development_points ": 7, + "attack ": 1, + "willpower_save": 4, + "divine_miracle_bonus ": 2, + "": "" + }, + { + "value": 17, + "defense": 2, + "init_cap": 6, + "development_points ": 9, + "attack ": 1, + "willpower_save": 5, + "divine_miracle_bonus ": 3, + "": "" + }, + { + "value": 18, + "defense": 3, + "init_cap": 5, + "development_points ": 11, + "attack ": 2, + "willpower_save": 6, + "divine_miracle_bonus ": 4, + "": "" + }, + { + "value": 19, + "defense": 3, + "init_cap": 4, + "development_points ": 13, + "attack ": 2, + "willpower_save": 7, + "divine_miracle_bonus ": 5, + "": "" + }, + { + "value": 20, + "defense": 3, + "init_cap": 4, + "development_points ": 15, + "attack ": 2, + "willpower_save": 8, + "divine_miracle_bonus ": 6, + "": "" + }, + { + "value": 21, + "defense": 4, + "init_cap": 3, + "development_points ": 18, + "attack ": 2, + "willpower_save": 9, + "divine_miracle_bonus ": 7, + "": "" + }, + { + "value": 22, + "defense": 4, + "init_cap": 3, + "development_points ": 21, + "attack ": 2, + "willpower_save": 10, + "divine_miracle_bonus ": 8, + "": "" + }, + { + "value": 23, + "defense": 4, + "init_cap": 2, + "development_points ": 24, + "attack ": 3, + "willpower_save": 11, + "divine_miracle_bonus ": 9, + "": "" + }, + { + "value": 24, + "defense": 4, + "init_cap": 2, + "development_points ": 27, + "attack ": 3, + "willpower_save": 12, + "divine_miracle_bonus ": 10, + "": "" + }, + { + "value": 25, + "defense": 5, + "init_cap": 1, + "development_points ": 30, + "attack ": 4, + "willpower_save": 13, + "divine_miracle_bonus ": 12, + "": "" + } +] + +} \ No newline at end of file diff --git a/module/config/system.mjs b/module/config/system.mjs index 3f75f4f..573dac8 100644 --- a/module/config/system.mjs +++ b/module/config/system.mjs @@ -4,20 +4,11 @@ import * as ARMOR from "./armor.mjs" import * as SPELL from "./spell.mjs" import * as SKILL from "./skill.mjs" import * as EQUIPMENT from "./equipment.mjs" +import * as CHARACTERISTICS from "./characteristic-tables.mjs" export const SYSTEM_ID = "fvtt-lethal-fantasy" export const DEV_MODE = false -export const DICE_VALUE = Object.freeze({ - D4: "d4", - D6: "d6", - D8: "d8", - D10: "d10", - D12: "d12", -}) - -export const DICE_VALUES = ["0", "d4", "d6", "d8", "d10", "d12"] - export const ROLL_TYPE = Object.freeze({ SAVE: "save", RESOURCE: "resource", @@ -77,15 +68,15 @@ export const ASCII = ` export const SYSTEM = { id: SYSTEM_ID, CHARACTERISTICS: CHARACTER.CHARACTERISTICS, - RESOURCES: CHARACTER.RESOURCES, + CHARACTERISTICS_TABLES: CHARACTERISTICS.TABLES, + CHARACTERISTICS_MAJOR: CHARACTERISTICS.MAJOR, SAVES: CHARACTER.SAVES, SKILL_CATEGORY: SKILL.CATEGORY, - WEAPON_CATEGORY: WEAPON.CATEGORY, - WEAPON_DAMAGE: WEAPON.DAMAGE, ARMOR_TYPE: ARMOR.TYPE, EQUIPMENT_CATEGORY: EQUIPMENT.CATEGORY, SPELL_RANGE: SPELL.RANGE, WEAPON_TYPE: WEAPON.WEAPON_TYPE, + WEAPON_CLASS: WEAPON.WEAPON_CLASS, MONEY, ASCII, ROLL_TYPE, diff --git a/module/config/weapon.mjs b/module/config/weapon.mjs index 4265c88..553588a 100644 --- a/module/config/weapon.mjs +++ b/module/config/weapon.mjs @@ -1,35 +1,20 @@ -export const CATEGORY = Object.freeze({ - mains: { - id: "mains", - label: "LETHALFANTASY.Weapon.Category.main", - }, - improvisee: { - id: "improvisee", - label: "LETHALFANTASY.Weapon.Category.improvisee", - }, - courte: { - id: "courte", - label: "LETHALFANTASY.Weapon.Category.courte", - }, - longue: { - id: "longue", - label: "LETHALFANTASY.Weapon.Category.longue", - }, - lourde: { - id: "lourde", - label: "LETHALFANTASY.Weapon.Category.lourde", - }, -}) export const WEAPON_TYPE = { "melee": "LETHALFANTASY.Weapon.WeaponType.melee", "ranged": "LETHALFANTASY.Weapon.WeaponType.ranged" } -export const DAMAGE = Object.freeze({ - UN: "1", - D4: "d4", - D6: "d6", - D8: "d8", - D10: "d10", -}) +export const WEAPON_CLASS = { + "longblade": "LETHALFANTASY.Weapon.WeaponClass.longblade", + "shortblade": "LETHALFANTASY.Weapon.WeaponClass.shortblade", + "mediumblade": "LETHALFANTASY.Weapon.WeaponClass.mediumblade", + "axe": "LETHALFANTASY.Weapon.WeaponClass.axe", + "hammer": "LETHALFANTASY.Weapon.WeaponClass.hammer", + "mace": "LETHALFANTASY.Weapon.WeaponClass.mace", + "flail": "LETHALFANTASY.Weapon.WeaponClass.flail", + "bow": "LETHALFANTASY.Weapon.WeaponClass.bow", + "sling": "LETHALFANTASY.Weapon.WeaponClass.sling", + "thrown": "LETHALFANTASY.Weapon.WeaponClass.thrown", + "polearm": "LETHALFANTASY.Weapon.WeaponClass.polearm", + "unarmed" : "LETHALFANTASY.Weapon.WeaponClass.unarmed" +} \ No newline at end of file diff --git a/module/documents/item.mjs b/module/documents/item.mjs index d74f76e..3b4a582 100644 --- a/module/documents/item.mjs +++ b/module/documents/item.mjs @@ -1 +1,19 @@ -export default class LethalFantasyItem extends Item {} +export const defaultItemImg = { + weapon: "systems/fvtt-lethal-fantasy/assets/icons/icon_weapon.webp", + armor: "systems/fvtt-lethal-fantasy/assets/icons/icon_armor.webp", + equipment: "systems/fvtt-lethal-fantasy/assets/icons/icon_equipment.webp", + skill: "systems/fvtt-lethal-fantasy/assets/icons/icon_skill.webp", + gift: "systems/fvtt-lethal-fantasy/assets/icons/icon_gift.webp", + invulnerability: "systems/fvtt-lethal-fantasy/assets/icons/icon_invulnerability.webp", + shield: "systems/fvtt-lethal-fantasy/assets/icons/icon_shield.webp", + spell: "systems/fvtt-lethal-fantasy/assets/icons/icon_spell.webp" +} + +export default class LethalFantasyItem extends Item { + constructor(data, context) { + if (!data.img) { + data.img = defaultItemImg[data.type]; + } + super(data, context); + } +} diff --git a/module/models/_module.mjs b/module/models/_module.mjs index f6af99a..fe0f8c3 100644 --- a/module/models/_module.mjs +++ b/module/models/_module.mjs @@ -9,3 +9,4 @@ export { default as LethalFantasyGift } from "./gift.mjs" export { default as LethalFantasyVulnerability } from "./vulnerability.mjs" export { default as LethalFantasySave } from "./save.mjs" export { default as LethalFantasyEquipment } from "./equipment.mjs" +export { default as LethalFantasyMiracle } from "./miracle.mjs" diff --git a/module/models/character.mjs b/module/models/character.mjs index a48c577..dfc9b71 100644 --- a/module/models/character.mjs +++ b/module/models/character.mjs @@ -52,6 +52,7 @@ export default class LethalFantasyCharacter extends foundry.abstract.TypeDataMod bonus: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) }) schema.grit = new fields.SchemaField({ + starting: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), earned: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) }) @@ -87,6 +88,17 @@ export default class LethalFantasyCharacter extends foundry.abstract.TypeDataMod /** @override */ static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Character"] + prepareDerivedData() { + super.prepareDerivedData(); + let grit = 0 + for (let c in this.characteristics) { + if (SYSTEM.CHARACTERISTICS_MAJOR[c.id]) { + grit += this.characteristics[c].value + } + } + this.grit.starting = Math.round(grit / 6) + } + /** * Rolls a dice for a character. * @param {("save"|"resource|damage")} rollType The type of the roll. diff --git a/module/models/equipment.mjs b/module/models/equipment.mjs index 90aff59..c68dd3c 100644 --- a/module/models/equipment.mjs +++ b/module/models/equipment.mjs @@ -1,5 +1,5 @@ import { SYSTEM } from "../config/system.mjs" -import { CATEGORY } from "../config/weapon.mjs" + export default class LethalFantasyEquipment extends foundry.abstract.TypeDataModel { static defineSchema() { const fields = foundry.data.fields diff --git a/module/models/miracle.mjs b/module/models/miracle.mjs new file mode 100644 index 0000000..48628f4 --- /dev/null +++ b/module/models/miracle.mjs @@ -0,0 +1,38 @@ +import { SYSTEM } from "../config/system.mjs" +export default class LethalFantasyMiracle extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const requiredInteger = { required: true, nullable: false, integer: true } + const schema = {} + + schema.description = new fields.HTMLField({ + required: false, + blank: true, + initial: "", + textSearch: true, + }) + schema.level = new fields.NumberField({ + ...requiredInteger, + initial: 1, + min: 1, + max: 20, + }) + schema.components = new fields.SchemaField({ + verbal: new fields.BooleanField(), + somatic: new fields.BooleanField(), + material: new fields.BooleanField(), + catalyst: new fields.BooleanField(), + religious: new fields.BooleanField() + }) + schema.prayerTime = new fields.StringField({ required: true, initial: "" }) + schema.miracleRange = new fields.StringField({ required: true, initial: "" }) + schema.areaAffected = new fields.StringField({ required: true, initial: "" }) + schema.duration = new fields.StringField({ required: true, initial: "" }) + schema.savingThrow = new fields.StringField({ required: true, initial: "" }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Miracle"] +} diff --git a/module/models/skill.mjs b/module/models/skill.mjs index 8bb2c3c..fdab141 100644 --- a/module/models/skill.mjs +++ b/module/models/skill.mjs @@ -12,6 +12,13 @@ export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) schema.cost = new fields.NumberField({ ...requiredInteger,required: true, initial: 0, min: 0 }) + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.weaponBonus = new fields.SchemaField({ + attack: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + defense: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + damage: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + return schema } @@ -21,10 +28,30 @@ export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { get skillCategory() { return game.i18n.localize(CATEGORY[this.category].label) } + + validate(options) { + let isError = super.validate(options) + console.log(this) + let bonus = this._source.weaponBonus.attack + this._source.weaponBonus.defense + this._source.weaponBonus.damage + console.log(bonus, this._source.skillTotal) + if ( bonus > Math.floor(this._source.skillTotal / 10) ) { + ui.notifications.error(game.i18n.localize("LETHALFANTASY.Skill.error.weaponBonus")) + isError = true + } + return isError + } prepareDerivedData() { super.prepareDerivedData(); this.skillTotal = this.computeBase(); + if( this.category === "weapon" ) { + this.totalBonus = this.weaponBonus.attack + this.weaponBonus.defense + this.weaponBonus.damage; + if ( Number(this.skillTotal) ) { + this.availableBonus = Math.max( Math.floor(this.skillTotal / 10) - 1, 0 ) + } else { + this.availableBonus = "N/A" + } + } } computeBase() { @@ -47,7 +74,7 @@ export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { maxStat = statValue; } } - return maxStat; + return maxStat + this.bonus } else { // Split with + calculate the total baseSplit = base.split("+"); @@ -59,9 +86,9 @@ export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; total += statValue; } - return total + return total + this.bonus } } - return `${this.base } + ${ String(this.bonus)}`; + return `${this.base} + ${String(this.bonus)}`; } } diff --git a/module/models/spell.mjs b/module/models/spell.mjs index b7fd5aa..3cdde8e 100644 --- a/module/models/spell.mjs +++ b/module/models/spell.mjs @@ -25,7 +25,7 @@ export default class LethalFantasySpell extends foundry.abstract.TypeDataModel { material: new fields.BooleanField(), }) schema.castingTime = new fields.StringField({ required: true, initial: "" }) - schema.range = new fields.StringField({ required: true, initial: "" }) + schema.spellRange = new fields.StringField({ required: true, initial: "" }) schema.areaAffected = new fields.StringField({ required: true, initial: "" }) schema.duration = new fields.StringField({ required: true, initial: "" }) schema.savingThrow = new fields.StringField({ required: true, initial: "" }) diff --git a/module/models/weapon.mjs b/module/models/weapon.mjs index ed4d8db..20753fa 100644 --- a/module/models/weapon.mjs +++ b/module/models/weapon.mjs @@ -1,5 +1,5 @@ import { SYSTEM } from "../config/system.mjs" -import { CATEGORY } from "../config/weapon.mjs" + export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { static defineSchema() { const fields = foundry.data.fields @@ -8,6 +8,8 @@ export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { schema.description = new fields.HTMLField({ required: true, textSearch: true }) schema.weaponType = new fields.StringField({ required: true, initial: "melee", choices: SYSTEM.WEAPON_TYPE }) + schema.weaponClass = new fields.StringField({ required: true, initial: "shortblade", choices: SYSTEM.WEAPON_CLASS }) + schema.damageType = new fields.SchemaField({ typeP: new fields.BooleanField(), typeB: new fields.BooleanField(), @@ -29,7 +31,7 @@ export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { }) schema.defense = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) - schema.range = new fields.SchemaField({ + schema.weaponRange = new fields.SchemaField({ pointBlank: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), short: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), medium: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), @@ -49,6 +51,6 @@ export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Weapon"] get weaponCategory() { - return game.i18n.localize(CATEGORY[this.category].label) + return game.i18n.localize(CATEGORY[this.weaponType].label) } } diff --git a/module/utils.mjs b/module/utils.mjs index 22dab28..1f38535 100644 --- a/module/utils.mjs +++ b/module/utils.mjs @@ -1,23 +1,13 @@ -import { DICE_VALUES } from "./config/system.mjs" export default class LethalFantasyUtils { // Return the maximum damage limited by the maximum damage of the character static maxDamage(damage, damageMax) { - const damageIndex = DICE_VALUES.indexOf(damage) - const damageMaxIndex = DICE_VALUES.indexOf(damageMax) - - // If damage exceeds damageMax, return damageMax - if (damageIndex > damageMaxIndex) { - return damageMax - } - // Otherwise, return damage (as it is less than or equal to damageMax) - return damage + return 0 } // Used when a ressource is lost to find the next lower dice static findLowerDice(dice) { - let index = DICE_VALUES.indexOf(dice) - return DICE_VALUES[index - 1] + return 0 } } diff --git a/styles/character.less b/styles/character.less index 99e4864..c16d357 100644 --- a/styles/character.less +++ b/styles/character.less @@ -7,17 +7,17 @@ .character-main { display: flex; - .character-personnage { + .character-pc { display: flex; gap: 10px; flex: 1; - .character-gauche { + .character-left { min-width: 180px; display: flex; flex-direction: column; - .character-gauche-image { + .character-left-image { display: flex; justify-content: center; align-items: center; @@ -29,13 +29,7 @@ } } - .character-dv, - .character-dmax { - .form-fields { - flex: none; - } - } - .character-dmax-edit { + .character-hp-edit { input { display: flex; width: 60px; @@ -48,7 +42,7 @@ } } - .character-droite { + .character-right { display: flex; flex-direction: column; gap: 5px; @@ -68,30 +62,11 @@ label { min-width: 120px; } - - .character-voie-majeure, - .character-voie-mineure { - display: flex; - input { - width: 280px; - } - .controls { - padding-left: 5px; - } - } - - .character-commanditaire { - display: flex; - input { - width: 280px; - } - } - - .character-pv { + .character-hp { display: flex; gap: 2px; align-items: center; - .character-pv-value { + .character-hp-value { .form-fields input { flex: none; width: 50px; @@ -99,7 +74,7 @@ font-size: calc(var(--font-size-standard) * 1.4); } } - .character-pv-max { + .character-hp-max { clear: both; display: flex; flex-direction: row; @@ -112,7 +87,7 @@ font-size: calc(var(--font-size-standard) * 1.4); } } - .pv-separator { + .hp-separator { font-size: calc(var(--font-size-standard) * 1.2); display: flex; align-items: center; @@ -123,21 +98,21 @@ } } - .character-personnage-play { + .character-pc-play { min-width: 500px; } - .character-personnage-edit { + .character-pc-edit { min-width: 650px; } - .character-caracteristiques { + .character-characteristics { display: flex; flex-direction: column; gap: 5px; flex: 1; - .character-caracteristique { + .character-characteristic { display: flex; align-items: center; .rollable:hover, @@ -182,21 +157,21 @@ } } - .character-caracteristiques-play { + .character-characteristics-play { min-width: 225px; } - .character-caracteristiques-edit { + .character-characteristic-edit { min-width: 400px; } - .character-ressources { + .character-resources { display: flex; flex-direction: column; gap: 5px; flex: 1; - .character-ressource { + .character-resource { display: flex; align-items: center; .rollable:hover, @@ -213,7 +188,7 @@ width: 70px; } } - .character-ressource-edit { + .character-resource-edit { display: flex; align-items: center; gap: 10px; @@ -239,11 +214,11 @@ } } - .character-ressources-play { + .character-resources-play { min-width: 235px; } - .character-ressources-edit { + .character-resources-edit { min-width: 400px; } } @@ -257,7 +232,7 @@ } } -.tab.character-items { +.tab.character-skills { display: grid; grid-template-columns: 1fr; legend { @@ -266,11 +241,11 @@ padding-left: 5px; } } - .talents { + .skills { display: grid; grid-template-columns: repeat(5, 1fr); gap: 10px; - .talent { + .skill { display: flex; align-items: center; gap: 10px; @@ -280,6 +255,45 @@ } } } + .gifts { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .gift { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } + .vulnerabilities { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 10px; + .vulnerability { + display: flex; + align-items: center; + gap: 10px; + .item-img { + width: 50px; + height: 50px; + } + } + } +} +.tab.character-weapons { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + .weapons { display: grid; grid-template-columns: repeat(4, 1fr); @@ -310,6 +324,18 @@ } } } +} + +.tab.character-spells { + display: grid; + grid-template-columns: 1fr; + legend { + a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; + } + } + .spells { display: grid; grid-template-columns: repeat(3, 1fr); diff --git a/styles/fonts.less b/styles/fonts.less index f107ab0..9508159 100644 --- a/styles/fonts.less +++ b/styles/fonts.less @@ -1,24 +1,10 @@ @font-face { - font-family: "Cat Franken"; - src: url("../fonts/catfranken-deutsch.ttf") format("truetype"); + font-family: "TimesNewRoman"; + src: url("../assets/fonts/times-new-roman-regular.ttf") format("truetype"); } @font-face { - font-family: "Caslon"; - src: url("../fonts/caslonpro-regular.otf") format("truetype"); + font-family: "BaskervilleBold"; + src: url("../fonts/baskerville-bold.ttf") format("truetype"); } -@font-face { - font-family: "Caslon Bold"; - src: url("../fonts/caslonpro-bold.otf") format("truetype"); -} - -@font-face { - font-family: "Caslon Bold Italic"; - src: url("../fonts/caslonpro-bolditalic.otf") format("truetype"); -} - -@font-face { - font-family: "Caslon Italic"; - src: url("../fonts/caslonpro-italic.otf") format("truetype"); -} diff --git a/styles/fvtt-lethal-fantasy.less b/styles/fvtt-lethal-fantasy.less index 5f3a54d..ce3890d 100644 --- a/styles/fvtt-lethal-fantasy.less +++ b/styles/fvtt-lethal-fantasy.less @@ -14,6 +14,7 @@ @import "chat.less"; @import "equipment.less"; @import "shield.less"; + @import "miracle.less"; } @import "roll.less"; diff --git a/styles/global.less b/styles/global.less index 6fc97d2..fd48912 100644 --- a/styles/global.less +++ b/styles/global.less @@ -1,8 +1,9 @@ :root { + --font-primary: "TimesNewRoman", serif; --font-size-standard: 1.0rem; - --background-image-base: url("../assets/parchment.jpg"); - --font-secondary: "Amiri", serif; - --logo-standard: url("../assets/lethal-fantasy-logo.webp"); + --background-image-base: url("../assets/ui/lethal_fantasy_background.webp"); + --font-secondary: "BaskervilleBold", serif; + --logo-standard: url("../assets/ui/lf_logo_small_02.webp"); } #logo { diff --git a/styles/miracle.less b/styles/miracle.less new file mode 100644 index 0000000..e8376fd --- /dev/null +++ b/styles/miracle.less @@ -0,0 +1,17 @@ +.miracle-content { + .sheet-common(); + .item-sheet-common(); + + .header { + display: flex; + img { + width: 50px; + height: 50px; + } + } + + label { + flex: 10%; + } + +} diff --git a/system.json b/system.json index bd8b516..9d1a10b 100644 --- a/system.json +++ b/system.json @@ -51,5 +51,20 @@ "socket": true, "background": "systems/fvtt-lethal-fantasy/assets/background.webp", "packs": [ - ] + ], + "flags": { + "hotReload": { + "extensions": [ + "css", + "hbs", + "json" + ], + "paths": [ + "css/", + "lang/", + "assets/", + "templates/" + ] + } + } } diff --git a/templates/character-biography.hbs b/templates/character-biography.hbs index 42fc382..e8e9b44 100644 --- a/templates/character-biography.hbs +++ b/templates/character-biography.hbs @@ -1,14 +1,10 @@
- {{localize "TENEBRIS.Character.Label.description"}} + {{localize "LETHALFANTASY.Label.description"}} {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}}
- {{localize "TENEBRIS.Character.Label.langues"}} - {{formInput systemFields.langues enriched=enrichedLangues value=system.langues name="system.langues" toggled=true}} -
-
- {{localize "TENEBRIS.Character.Label.notes"}} + {{localize "LETHALFANTASY.Label.notes"}} {{formInput systemFields.notes enriched=enrichedNotes value=system.notes name="system.notes" toggled=true}}
\ No newline at end of file diff --git a/templates/character-items.hbs b/templates/character-items.hbs deleted file mode 100644 index e9c0ecc..0000000 --- a/templates/character-items.hbs +++ /dev/null @@ -1,103 +0,0 @@ -
- -
- {{localize "TENEBRIS.Label.talents"}} -
- {{#if @root.isEditMode}} - {{#each talents as |item|}} - {{!log "path-talent" this}} -
- -
{{item.name}} - {{#if item.progression}} (P){{/if}} - {{#if (and item.progression (gt item.niveau 1))}}{{localize 'TENEBRIS.Label.level'}} {{item.niveau}}{{/if}} -
-
- - -
-
- {{/each}} - {{else}} - {{#each talentsAppris as |item|}} - {{!log "path-talent appris" this}} -
- {{#if (ne item.img "icons/svg/item-bag.svg")}} - - {{/if}} - {{item.name}} {{item.details}} -
- {{/each}} - {{/if}} -
-
- -
- {{localize "TENEBRIS.Label.equipement"}}{{#if isEditMode}}{{/if}} -
- {{#each weapons as |item|}} - {{!log 'weapon' this}} -
- {{#if (ne item.img "icons/svg/item-bag.svg")}} - - {{/if}} -
- {{item.name}} -
- {{localize "TENEBRIS.Label.degats"}} : {{item.system.degats}} - {{#if @root.isEditMode}} -
- - -
- {{/if}} -
- {{/each}} -
-
- {{#each armors as |item|}} - {{!log 'armor' this}} -
- -
- {{item.name}} -
- {{localize "TENEBRIS.Label.armor"}} : {{item.system.valeur}} {{localize "TENEBRIS.Label.malus"}} : {{item.system.malus}} - {{#if @root.isEditMode}} -
- - -
- {{/if}} -
- {{/each}} -
-
- -
- {{localize "TENEBRIS.Label.biens"}} - {{formInput systemFields.biens enriched=enrichedBiens value=system.biens name="system.biens" toggled=true }} -
- - {{#if (or isEditMode (and isPlayMode hasSpells))}} -
- {{localize "TENEBRIS.Label.spells"}}{{#if isEditMode}}{{/if}} -
- {{#each spells as |item|}} - {{!log 'weapon' this}} -
-
- {{item.name}} -
- {{#if @root.isEditMode}} -
- - -
- {{/if}} -
- {{/each}} -
-
- {{/if}} -
\ No newline at end of file diff --git a/templates/character-main.hbs b/templates/character-main.hbs index 7d4f6a3..d687544 100644 --- a/templates/character-main.hbs +++ b/templates/character-main.hbs @@ -2,185 +2,108 @@ {{!log "character-main" this}}
- {{localize "TENEBRIS.Character.Label.personnage"}} -
-
-
- -
-
- {{formField systemFields.dv value=system.dv rootId=partId disabled=isPlayMode classes="character-dv"}} + {{localize "LETHALFANTASY.Label.pc"}} +
+
+
+ +
+
+ {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} +  /  + {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}}
-
- {{formField systemFields.dmax.fields.valeur value=system.dmax.valeur rootId=partId disabled=isPlayMode classes="character-dmax"}} - {{#if isEditMode}} -
-
{{formInput systemFields.dmax.fields.experience value=system.dmax.experience}}
-
- {{/if}} -
-
-
- {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} - - - +
+
+ {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} + + +
- {{#if isEditMode}} -
- {{formField systemFields.voies.fields.majeure.fields.nom value=system.voies.majeure.nom rootId=partId disabled=true}} - {{#if system.hasVoieMajeure}} -
- - {{#if (not system.hasVoieMineure)}} - - {{/if}} -
- {{/if}} -
-
- {{formField systemFields.voies.fields.mineure.fields.nom value=system.voies.mineure.nom rootId=partId disabled=true}} - {{#if system.hasVoieMineure}} -
- - -
- {{/if}} -
- {{else}} -
- {{formField systemFields.voies.fields.majeure.fields.nom value=system.voies.majeure.nom rootId=partId disabled=true}} -
- {{#if system.hasVoieMineure}} -
- {{formField systemFields.voies.fields.mineure.fields.nom value=system.voies.mineure.nom rootId=partId disabled=true}} -
- {{/if}} - {{/if}} -
- {{formField systemFields.commanditaire value=system.commanditaire rootId=partId disabled=isPlayMode classes="character-commanditaire"}} -
-
-
- {{formField systemFields.pv.fields.value value=system.pv.value}} -
-
/
-
- {{formInput systemFields.pv.fields.max value=system.pv.max rootId=partId disabled=isPlayMode}} -
-
-
-
+
+
-
- {{localize "TENEBRIS.Character.Label.caracteristiques"}} -
- - {{formField systemFields.caracteristiques.fields.rob.fields.valeur value=system.caracteristiques.rob.valeur rootId=partId disabled=isPlayMode classes="rollable" dataset=rollType.saveRob}} - {{#if isEditMode}} -
-
{{formInput systemFields.caracteristiques.fields.rob.fields.progression.fields.experience value=system.caracteristiques.rob.progression.experience}}
-
{{formInput systemFields.caracteristiques.fields.rob.fields.progression.fields.progres value=system.caracteristiques.rob.progression.progres}}
-
- {{/if}} +
+ {{localize "LETHALFANTASY.Label.characteristics"}} +
+ {{localize "LETHALFANTASY.Label.str"}} + {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value + disabled=isPlayMode classes="rollable" data-char-id="str" }} + + {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent + disabled=isPlayMode }}
-
- - {{formField systemFields.caracteristiques.fields.dex.fields.valeur value=system.caracteristiques.dex.valeur rootId=partId disabled=isPlayMode classes="rollable" dataset=rollType.saveDex}} - {{#if isEditMode}} -
-
{{formInput systemFields.caracteristiques.fields.dex.fields.progression.fields.experience value=system.caracteristiques.dex.progression.experience}}
-
{{formInput systemFields.caracteristiques.fields.dex.fields.progression.fields.progres value=system.caracteristiques.dex.progression.progres}}
-
- {{/if}} +
+ {{localize "LETHALFANTASY.Label.int"}} + {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value + disabled=isPlayMode classes="rollable" data-char-id="int" }} + + {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent + disabled=isPlayMode }}
-
- - {{formField systemFields.caracteristiques.fields.int.fields.valeur value=system.caracteristiques.int.valeur rootId=partId disabled=isPlayMode classes="rollable" dataset=rollType.saveInt}} - {{#if isEditMode}} -
-
{{formInput systemFields.caracteristiques.fields.int.fields.progression.fields.experience value=system.caracteristiques.int.progression.experience}}
-
{{formInput systemFields.caracteristiques.fields.int.fields.progression.fields.progres value=system.caracteristiques.int.progression.progres}}
-
- {{/if}} +
+ {{localize "LETHALFANTASY.Label.wis"}} + {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent + disabled=isPlayMode }}
-
- - {{formField systemFields.caracteristiques.fields.per.fields.valeur value=system.caracteristiques.per.valeur rootId=partId disabled=isPlayMode classes="rollable" dataset=rollType.savePer}} - {{#if isEditMode}} -
-
{{formInput systemFields.caracteristiques.fields.per.fields.progression.fields.experience value=system.caracteristiques.per.progression.experience}}
-
{{formInput systemFields.caracteristiques.fields.per.fields.progression.fields.progres value=system.caracteristiques.per.progression.progres}}
-
- {{/if}} +
+ {{localize "LETHALFANTASY.Label.dex"}} + {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value + disabled=isPlayMode classes="rollable" data-char-id="wis" }} + + {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent + disabled=isPlayMode }}
-
- - {{formField systemFields.caracteristiques.fields.vol.fields.valeur value=system.caracteristiques.vol.valeur rootId=partId disabled=isPlayMode classes="rollable" dataset=rollType.saveVol}} - {{#if isEditMode}} -
-
{{formInput systemFields.caracteristiques.fields.vol.fields.progression.fields.experience value=system.caracteristiques.vol.progression.experience}}
-
{{formInput systemFields.caracteristiques.fields.vol.fields.progression.fields.progres value=system.caracteristiques.vol.progression.progres}}
-
- {{/if}} +
+ {{localize "LETHALFANTASY.Label.con"}} + {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value + disabled=isPlayMode classes="rollable" data-char-id="con" }} + + {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.cha"}} + {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value + disabled=isPlayMode classes="rollable" data-char-id="cha" }} + + {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.luc"}} + {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value + disabled=isPlayMode classes="rollable" data-char-id="luc" }} + + {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent + disabled=isPlayMode }} +
+
+ {{localize "LETHALFANTASY.Label.app"}} + {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value + disabled=isPlayMode classes="rollable" data-char-id="app" }} + + {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent + disabled=isPlayMode }}
-
- {{localize "TENEBRIS.Character.Label.ressources"}} -
- - {{formField systemFields.ressources.fields.san.fields.valeur value=system.ressources.san.valeur rootId=partId disabled=isPlayMode classes="rollable" dataset=rollType.resourceSan}} - {{#if isEditMode}} -
- {{formInput systemFields.ressources.fields.san.fields.max value=system.ressources.san.max}} -
{{formInput systemFields.ressources.fields.san.fields.experience value=system.ressources.san.experience}}
-
- {{/if}} +
+ {{localize "LETHALFANTASY.Label.resources"}} +
-
- - {{formField systemFields.ressources.fields.oeil.fields.valeur value=system.ressources.oeil.valeur rootId=partId disabled=isPlayMode classes="rollable" dataset=rollType.resourceOeil}} - {{#if isEditMode}} -
- {{formInput systemFields.ressources.fields.oeil.fields.max value=system.ressources.oeil.max}} -
{{formInput systemFields.ressources.fields.oeil.fields.experience value=system.ressources.oeil.experience}}
-
- {{/if}} +
-
- - {{formField systemFields.ressources.fields.verbe.fields.valeur value=system.ressources.verbe.valeur rootId=partId disabled=isPlayMode classes="rollable" dataset=rollType.resourceVerbe}} - {{#if isEditMode}} -
- {{formInput systemFields.ressources.fields.verbe.fields.max value=system.ressources.verbe.max}} -
{{formInput systemFields.ressources.fields.verbe.fields.experience value=system.ressources.verbe.experience}}
-
- {{/if}} -
-
- - {{formField systemFields.ressources.fields.bourse.fields.valeur value=system.ressources.bourse.valeur rootId=partId disabled=isPlayMode classes="rollable" dataset=rollType.resourceBourse}} - {{#if isEditMode}} -
- {{formInput systemFields.ressources.fields.bourse.fields.max value=system.ressources.bourse.max}} -
{{formInput systemFields.ressources.fields.bourse.fields.experience value=system.ressources.bourse.experience}}
-
- {{/if}} -
-
- - {{formField systemFields.ressources.fields.magie.fields.valeur value=system.ressources.magie.valeur rootId=partId disabled=isPlayMode classes="rollable" dataset=rollType.resourceMagie}} - {{#if isEditMode}} -
- {{formInput systemFields.ressources.fields.magie.fields.max value=system.ressources.magie.max}} -
{{formInput systemFields.ressources.fields.magie.fields.experience value=system.ressources.magie.experience}}
-
- {{/if}} +
diff --git a/templates/character-skills.hbs b/templates/character-skills.hbs new file mode 100644 index 0000000..bc50048 --- /dev/null +++ b/templates/character-skills.hbs @@ -0,0 +1,66 @@ +
+ +
+ {{localize + "LETHALFANTASY.Label.skills"}} +
+ {{#each skills as |item|}} +
+ +
+ {{item.name}} +{{item.system.skillTotal}} +
+
+ + +
+
+ {{/each}} +
+
+ +
+ {{localize + "LETHALFANTASY.Label.gifts"}} +
+ {{#each gifts as |item|}} +
+ +
+ {{item.name}} +
+
+ + +
+
+ {{/each}} +
+
+ +
+ {{localize + "LETHALFANTASY.Label.vulnerabilities"}} +
+ {{#each gifts as |item|}} +
+ +
+ {{item.name}} +
+
+ + +
+
+ {{/each}} +
+
+ +
\ No newline at end of file diff --git a/templates/character-spells.hbs b/templates/character-spells.hbs new file mode 100644 index 0000000..0f47d3f --- /dev/null +++ b/templates/character-spells.hbs @@ -0,0 +1,26 @@ +
+ +
+ {{localize "LETHALFANTASY.Label.spells"}}{{#if isEditMode}}{{/if}} +
+ {{#each spells as |item|}} + {{!log 'weapon' this}} +
+
+ {{item.name}} +
+
+ + +
+
+ {{/each}} +
+
+ +
\ No newline at end of file diff --git a/templates/character-weapons.hbs b/templates/character-weapons.hbs new file mode 100644 index 0000000..b97609b --- /dev/null +++ b/templates/character-weapons.hbs @@ -0,0 +1,48 @@ +
+ +
+ {{localize "LETHALFANTASY.Label.equipment"}}{{#if isEditMode}}{{/if}} +
+ {{#each weapons as |item|}} + {{!log 'weapon' this}} +
+ {{#if (ne item.img "icons/svg/item-bag.svg")}} + + {{/if}} +
+ {{item.name}} +
+
+ + +
+
+ {{/each}} +
+ +
+ {{#each armors as |item|}} + {{!log 'armor' this}} +
+ +
+ {{item.name}} +
+
+ + +
+
+ {{/each}} +
+
+ + +
\ No newline at end of file diff --git a/templates/miracle.hbs b/templates/miracle.hbs new file mode 100644 index 0000000..3b00d6d --- /dev/null +++ b/templates/miracle.hbs @@ -0,0 +1,29 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ + {{formField systemFields.level value=system.level}} + + +
+ {{formField systemFields.components.fields.verbal value=system.components.verbal}} + {{formField systemFields.components.fields.somatic value=system.components.somatic}} + {{formField systemFields.components.fields.material value=system.components.material}} + {{formField systemFields.components.fields.catalyst value=system.components.catalyst}} + {{formField systemFields.components.fields.religious value=system.components.religious}} +
+ + {{formField systemFields.prayerTime value=system.castingTime}} + {{formField systemFields.miracleRange value=system.spellRange}} + {{formField systemFields.areaAffected value=system.areaAffected}} + {{formField systemFields.duration value=system.duration}} + {{formField systemFields.savingThrow value=system.savingThrow}} + +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput systemFields.description enriched=description value=system.description name="system.description" toggled=true}} +
+ +
\ No newline at end of file diff --git a/templates/skill.hbs b/templates/skill.hbs index fa9ba8e..0630e9c 100644 --- a/templates/skill.hbs +++ b/templates/skill.hbs @@ -8,6 +8,16 @@ {{formField systemFields.bonus value=system.bonus}} {{formField systemFields.cost value=system.cost}} + {{#if (eq system.category "weapon")}} + {{formField systemFields.weaponClass value=system.weaponClass localize=true}} + + Available Bonus : {{system.availableBonus}} + + {{formField systemFields.weaponBonus.fields.attack value=system.weaponBonus.attack}} + {{formField systemFields.weaponBonus.fields.defense value=system.weaponBonus.defense}} + {{formField systemFields.weaponBonus.fields.damage value=system.weaponBonus.damage}} + {{/if}} +
{{localize "LETHALFANTASY.Label.total"}} {{system.skillTotal}} diff --git a/templates/spell.hbs b/templates/spell.hbs index 3292be6..c54149e 100644 --- a/templates/spell.hbs +++ b/templates/spell.hbs @@ -15,7 +15,7 @@
{{formField systemFields.castingTime value=system.castingTime}} - {{formField systemFields.range value=system.range}} + {{formField systemFields.spellRange value=system.spellRange}} {{formField systemFields.areaAffected value=system.areaAffected}} {{formField systemFields.duration value=system.duration}} {{formField systemFields.savingThrow value=system.savingThrow}} diff --git a/templates/weapon.hbs b/templates/weapon.hbs index ef188e2..984b1c5 100644 --- a/templates/weapon.hbs +++ b/templates/weapon.hbs @@ -8,18 +8,19 @@
{{formField systemFields.weaponType value=system.weaponType localize=true}} - + {{formField systemFields.weaponClass value=system.weaponClass localize=true}} +
- {{formField systemFields.damageType.fields.typeP value=system.standing.typeP}} - {{formField systemFields.damageType.fields.typeB value=system.standing.typeB}} - {{formField systemFields.damageType.fields.typeS value=system.standing.typeS}} + {{formField systemFields.damageType.fields.typeP value=system.damageType.typeP}} + {{formField systemFields.damageType.fields.typeB value=system.damageType.typeB}} + {{formField systemFields.damageType.fields.typeS value=system.damageType.typeS}}
- {{formField systemFields.damage.fields.damageS value=system.standing.damageS}} - {{formField systemFields.damage.fields.damageM value=system.standing.damageM}} + {{formField systemFields.damage.fields.damageS value=system.damage.damageS}} + {{formField systemFields.damage.fields.damageM value=system.damage.damageM}}
{{formField systemFields.hands value=system.hands localize=true}} @@ -45,12 +46,12 @@
- {{formField systemFields.range.fields.pointBlank value=system.range.pointBlank}} - {{formField systemFields.range.fields.short value=system.range.short}} - {{formField systemFields.range.fields.medium value=system.range.medium}} - {{formField systemFields.range.fields.long value=system.range.long}} - {{formField systemFields.range.fields.extreme value=system.range.extreme}} - {{formField systemFields.range.fields.outOfSkill value=system.range.outOfSkill}} + {{formField systemFields.weaponRange.fields.pointBlank value=system.weaponRange.pointBlank}} + {{formField systemFields.weaponRange.fields.short value=system.weaponRange.short}} + {{formField systemFields.weaponRange.fields.medium value=system.weaponRange.medium}} + {{formField systemFields.weaponRange.fields.long value=system.weaponRange.long}} + {{formField systemFields.weaponRange.fields.extreme value=system.weaponRange.extreme}} + {{formField systemFields.weaponRange.fields.outOfSkill value=system.weaponRange.outOfSkill}}
{{/if}}