Various items fixes and enhancements

This commit is contained in:
LeRatierBretonnien 2024-12-09 16:02:40 +01:00
parent 9775ec9fa1
commit 1de2927d93
51 changed files with 2102 additions and 574 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 187 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 190 KiB

BIN
assets/icons/icon_gift.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 147 KiB

BIN
assets/icons/icon_save.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 106 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 117 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 135 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 236 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

BIN
assets/ui/lf_logo_02.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 647 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

View File

@ -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 {

View File

@ -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 <br> {save}",
@ -415,11 +477,9 @@
"displayArmor": "{targetName} a une armure de {targetArmor}. <br>Dégâts réels : {realDamage}"
},
"Tooltip": {
"learnedTalents": "Les talents appris sont en gras",
"saveIntroTextTooltip": "Caractéristique : {value} <br> Aide : {aide} <br> Gêne : {gene} <br> 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é",

View File

@ -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 ")
}
}
}
}

View File

@ -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"

View File

@ -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)
}
}

View File

@ -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",
},
}
}

View File

@ -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"

File diff suppressed because it is too large Load Diff

View File

@ -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,

View File

@ -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"
}

View File

@ -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);
}
}

View File

@ -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"

View File

@ -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.

View File

@ -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

38
module/models/miracle.mjs Normal file
View File

@ -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"]
}

View File

@ -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)}`;
}
}

View File

@ -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: "" })

View File

@ -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)
}
}

View File

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

View File

@ -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);

View File

@ -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");
}

View File

@ -14,6 +14,7 @@
@import "chat.less";
@import "equipment.less";
@import "shield.less";
@import "miracle.less";
}
@import "roll.less";

View File

@ -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 {

17
styles/miracle.less Normal file
View File

@ -0,0 +1,17 @@
.miracle-content {
.sheet-common();
.item-sheet-common();
.header {
display: flex;
img {
width: 50px;
height: 50px;
}
}
label {
flex: 10%;
}
}

View File

@ -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/"
]
}
}
}

View File

@ -1,14 +1,10 @@
<section class="tab character-{{tab.id}} {{tab.cssClass}}" data-tab="{{tab.id}}" data-group="{{tab.group}}">
<fieldset>
<legend>{{localize "TENEBRIS.Character.Label.description"}}</legend>
<legend>{{localize "LETHALFANTASY.Label.description"}}</legend>
{{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}}
</fieldset>
<fieldset>
<legend>{{localize "TENEBRIS.Character.Label.langues"}}</legend>
{{formInput systemFields.langues enriched=enrichedLangues value=system.langues name="system.langues" toggled=true}}
</fieldset>
<fieldset>
<legend>{{localize "TENEBRIS.Character.Label.notes"}}</legend>
<legend>{{localize "LETHALFANTASY.Label.notes"}}</legend>
{{formInput systemFields.notes enriched=enrichedNotes value=system.notes name="system.notes" toggled=true}}
</fieldset>
</section>

View File

@ -1,103 +0,0 @@
<section class="tab character-{{tab.id}} {{tab.cssClass}}" data-tab="{{tab.id}}" data-group="{{tab.group}}">
<fieldset>
<legend data-tooltip="{{localize "TENEBRIS.Tooltip.learnedTalents"}}" data-tooltip-direction="UP">{{localize "TENEBRIS.Label.talents"}}</legend>
<div class="talents">
{{#if @root.isEditMode}}
{{#each talents as |item|}}
{{!log "path-talent" this}}
<div class="talent {{#if item.appris}}appris{{/if}}" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}">
<img class="item-img" src="{{item.img}}" data-tooltip="{{item.name}}" />
<div class="name" data-tooltip="{{{item.description}}}<br><br>{{item.path}}" data-tooltip-direction="UP">{{item.name}}
{{#if item.progression}}<span data-tooltip="{{localize 'TENEBRIS.Label.progressionPossible'}}"> (P)</span>{{/if}}
{{#if (and item.progression (gt item.niveau 1))}}{{localize 'TENEBRIS.Label.level'}} {{item.niveau}}{{/if}}
</div>
<div class="controls">
<a data-tooltip="{{localize 'TENEBRIS.Edit'}}" data-action="edit" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}"><i class="fas fa-edit"></i></a>
<a data-tooltip="{{localize 'TENEBRIS.Delete'}}" data-action="delete" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}"><i class="fas fa-trash"></i></a>
</div>
</div>
{{/each}}
{{else}}
{{#each talentsAppris as |item|}}
{{!log "path-talent appris" this}}
<div class="talent" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}" data-tooltip="{{{item.description}}}<br><br>{{item.path}}">
{{#if (ne item.img "icons/svg/item-bag.svg")}}
<img class="item-img" src="{{item.img}}" data-tooltip="{{item.name}}" />
{{/if}}
{{item.name}} {{item.details}}
</div>
{{/each}}
{{/if}}
</div>
</fieldset>
<fieldset>
<legend>{{localize "TENEBRIS.Label.equipement"}}{{#if isEditMode}}<a class="action" data-tooltip="{{localize "TENEBRIS.Tooltip.addEquipment"}}" data-tooltip-direction="UP"><i class="fas fa-plus" data-action="createEquipment"></i></a>{{/if}}</legend>
<div class="weapons">
{{#each weapons as |item|}}
{{!log 'weapon' this}}
<div class="weapon" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}" data-drag="true" data-drag-type="damage">
{{#if (ne item.img "icons/svg/item-bag.svg")}}
<img class="item-img" src="{{item.img}}" data-tooltip="{{item.name}}" />
{{/if}}
<div class="name" data-tooltip="{{{item.system.description}}}">
{{item.name}}
</div>
<a {{#if (ne item.system.degats "1")}}class="rollable" data-item-id="{{item.id}}" data-action="roll" data-roll-type="damage" data-roll-value="{{item.system.degats}}"{{/if}}>{{localize "TENEBRIS.Label.degats"}} : {{item.system.degats}}</a>
{{#if @root.isEditMode}}
<div class="controls">
<a data-tooltip="{{localize 'TENEBRIS.Edit'}}" data-action="edit" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}"><i class="fas fa-edit"></i></a>
<a data-tooltip="{{localize 'TENEBRIS.Delete'}}" data-action="delete" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}"><i class="fas fa-trash"></i></a>
</div>
{{/if}}
</div>
{{/each}}
</div>
<div class="armors">
{{#each armors as |item|}}
{{!log 'armor' this}}
<div class="armor" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}">
<img class="item-img" src="{{item.img}}" data-tooltip="{{item.name}}" />
<div class="name" data-tooltip="{{{item.system.description}}}">
{{item.name}}
</div>
{{localize "TENEBRIS.Label.armor"}} : {{item.system.valeur}} {{localize "TENEBRIS.Label.malus"}} : {{item.system.malus}}
{{#if @root.isEditMode}}
<div class="controls">
<a data-tooltip="{{localize 'TENEBRIS.Edit'}}" data-action="edit" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}"><i class="fas fa-edit"></i></a>
<a data-tooltip="{{localize 'TENEBRIS.Delete'}}" data-action="delete" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}"><i class="fas fa-trash"></i></a>
</div>
{{/if}}
</div>
{{/each}}
</div>
</fieldset>
<fieldset>
<legend>{{localize "TENEBRIS.Label.biens"}}</legend>
{{formInput systemFields.biens enriched=enrichedBiens value=system.biens name="system.biens" toggled=true }}
</fieldset>
{{#if (or isEditMode (and isPlayMode hasSpells))}}
<fieldset>
<legend>{{localize "TENEBRIS.Label.spells"}}{{#if isEditMode}}<a class="action" data-tooltip="{{localize "TENEBRIS.Tooltip.addSpell"}}" data-tooltip-direction="UP"><i class="fas fa-plus" data-action="createSpell"></i></a>{{/if}}</legend>
<div class="spells">
{{#each spells as |item|}}
{{!log 'weapon' this}}
<div class="spell" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}" data-drag="true" data-drag-type="spell">
<div class="name" data-tooltip="{{{item.system.description}}}">
{{item.name}}
</div>
{{#if @root.isEditMode}}
<div class="controls">
<a data-tooltip="{{localize 'TENEBRIS.Edit'}}" data-action="edit" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}"><i class="fas fa-edit"></i></a>
<a data-tooltip="{{localize 'TENEBRIS.Delete'}}" data-action="delete" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}"><i class="fas fa-trash"></i></a>
</div>
{{/if}}
</div>
{{/each}}
</div>
</fieldset>
{{/if}}
</section>

View File

@ -2,185 +2,108 @@
{{!log "character-main" this}}
<fieldset>
<legend>{{localize "TENEBRIS.Character.Label.personnage"}}</legend>
<div class="character-personnage character-personnage-{{ifThen isPlayMode 'play' 'edit'}}">
<div class="character-gauche">
<div class="character-gauche-image">
<img class="character-img" src="{{actor.img}}" data-edit="img" data-action="editImage" data-tooltip="{{actor.name}}" />
</div>
<div class="character-dv">
{{formField systemFields.dv value=system.dv rootId=partId disabled=isPlayMode classes="character-dv"}}
<legend>{{localize "LETHALFANTASY.Label.pc"}}</legend>
<div class="character-pc character-pc-{{ifThen isPlayMode 'play' 'edit'}}">
<div class="character-left">
<div class="character-left-image">
<img class="character-img" src="{{actor.img}}" data-edit="img" data-action="editImage"
data-tooltip="{{actor.name}}" />
</div>
<div class="flexrow character-hp">
{{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}}
&nbsp;/&nbsp;
{{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}}
</div>
<div class="character-dmax" data-tooltip="{{tooltipsCaracteristiques.dmax}}">
{{formField systemFields.dmax.fields.valeur value=system.dmax.valeur rootId=partId disabled=isPlayMode classes="character-dmax"}}
{{#if isEditMode}}
<div class="character-dmax-edit">
<div data-tooltip="{{localize "TENEBRIS.Label.experienceDetail" detail='Dégâts max'}}">{{formInput systemFields.dmax.fields.experience value=system.dmax.experience}}</div>
</div>
{{/if}}
</div>
</div>
<div class="character-droite">
<div class="character-name">
{{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}}
<a class="control" data-action="toggleSheet" data-tooltip="TENEBRIS.ToggleSheet" data-tooltip-direction="UP">
<i class="fa-solid fa-user-{{ifThen isPlayMode 'lock' 'pen'}}"></i>
</a>
<div class="character-right">
<div class="character-name">
{{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}}
<a class="control" data-action="toggleSheet" data-tooltip="LETHALFANTASY.ToggleSheet"
data-tooltip-direction="UP">
<i class="fa-solid fa-user-{{ifThen isPlayMode 'lock' 'pen'}}"></i>
</a>
</div>
<div class="character-infos">
{{#if isEditMode}}
<div class="character-voie-majeure">
{{formField systemFields.voies.fields.majeure.fields.nom value=system.voies.majeure.nom rootId=partId disabled=true}}
{{#if system.hasVoieMajeure}}
<div class="controls">
<a class="control" data-action="edit" data-item-id="{{actor.system.voies.majeure.id}}" data-tooltip="{{localize 'TENEBRIS.Edit'}}"><i class="fas fa-edit"></i></a>
{{#if (not system.hasVoieMineure)}}
<a class="control" data-action="deleteVoieMajeure" data-tooltip="{{localize 'TENEBRIS.Delete'}}"><i class="fas fa-trash"></i></a>
{{/if}}
</div>
{{/if}}
</div>
<div class="character-voie-mineure">
{{formField systemFields.voies.fields.mineure.fields.nom value=system.voies.mineure.nom rootId=partId disabled=true}}
{{#if system.hasVoieMineure}}
<div class="controls">
<a class="control" data-action="edit" data-item-id="{{actor.system.voies.majeure.id}}" data-tooltip="{{localize 'TENEBRIS.Edit'}}"><i class="fas fa-edit"></i></a>
<a class="control" data-action="deleteVoieMineure" data-tooltip="{{localize 'TENEBRIS.Delete'}}"><i class="fas fa-trash"></i></a>
</div>
{{/if}}
</div>
{{else}}
<div class="character-voie-majeure">
{{formField systemFields.voies.fields.majeure.fields.nom value=system.voies.majeure.nom rootId=partId disabled=true}}
</div>
{{#if system.hasVoieMineure}}
<div class="character-voie-mineure">
{{formField systemFields.voies.fields.mineure.fields.nom value=system.voies.mineure.nom rootId=partId disabled=true}}
</div>
{{/if}}
{{/if}}
<div class="character-commanditaire">
{{formField systemFields.commanditaire value=system.commanditaire rootId=partId disabled=isPlayMode classes="character-commanditaire"}}
</div>
<div class="character-pv">
<div class="character-pv-value">
{{formField systemFields.pv.fields.value value=system.pv.value}}
</div>
<div class="pv-separator">/</div>
<div class="character-pv-max">
{{formInput systemFields.pv.fields.max value=system.pv.max rootId=partId disabled=isPlayMode}}
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</fieldset>
<fieldset class="character-caracteristiques character-caracteristiques-{{ifThen isPlayMode 'play' 'edit'}}">
<legend>{{localize "TENEBRIS.Character.Label.caracteristiques"}}</legend>
<div class="character-caracteristique" data-drag="true" data-drag-type="save">
<i class="fa fa-question-circle" aria-hidden="true" data-tooltip="{{tooltipsCaracteristiques.rob}}" style="font-size: small;"></i>
{{formField systemFields.caracteristiques.fields.rob.fields.valeur value=system.caracteristiques.rob.valeur rootId=partId disabled=isPlayMode classes="rollable" dataset=rollType.saveRob}}
{{#if isEditMode}}
<div class="experience">
<div data-tooltip="{{localize "TENEBRIS.Label.experience"}}">{{formInput systemFields.caracteristiques.fields.rob.fields.progression.fields.experience value=system.caracteristiques.rob.progression.experience}}</div>
<div class="experience-progress" data-tooltip="{{localize "TENEBRIS.Label.progress"}}">{{formInput systemFields.caracteristiques.fields.rob.fields.progression.fields.progres value=system.caracteristiques.rob.progression.progres}}</div>
</div>
{{/if}}
<fieldset class="character-characteristics character-characteristics-{{ifThen isPlayMode 'play' 'edit'}}">
<legend>{{localize "LETHALFANTASY.Label.characteristics"}}</legend>
<div class="character-characteristic" data-drag="true">
{{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 }}
</div>
<div class="character-caracteristique" data-drag="true" data-drag-type="save">
<i class="fa fa-question-circle" aria-hidden="true" data-tooltip="{{tooltipsCaracteristiques.dex}}" style="font-size: small;"></i>
{{formField systemFields.caracteristiques.fields.dex.fields.valeur value=system.caracteristiques.dex.valeur rootId=partId disabled=isPlayMode classes="rollable" dataset=rollType.saveDex}}
{{#if isEditMode}}
<div class="experience">
<div data-tooltip="{{localize "TENEBRIS.Label.experience"}}">{{formInput systemFields.caracteristiques.fields.dex.fields.progression.fields.experience value=system.caracteristiques.dex.progression.experience}}</div>
<div class="experience-progress" data-tooltip="{{localize "TENEBRIS.Label.progress"}}">{{formInput systemFields.caracteristiques.fields.dex.fields.progression.fields.progres value=system.caracteristiques.dex.progression.progres}}</div>
</div>
{{/if}}
<div class="character-characteristic" data-drag="true">
{{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 }}
</div>
<div class="character-caracteristique" data-drag="true" data-drag-type="save">
<i class="fa fa-question-circle" aria-hidden="true" data-tooltip="{{tooltipsCaracteristiques.int}}" style="font-size: small;"></i>
{{formField systemFields.caracteristiques.fields.int.fields.valeur value=system.caracteristiques.int.valeur rootId=partId disabled=isPlayMode classes="rollable" dataset=rollType.saveInt}}
{{#if isEditMode}}
<div class="experience">
<div data-tooltip="{{localize "TENEBRIS.Label.experience"}}">{{formInput systemFields.caracteristiques.fields.int.fields.progression.fields.experience value=system.caracteristiques.int.progression.experience}}</div>
<div class="experience-progress" data-tooltip="{{localize "TENEBRIS.Label.progress"}}">{{formInput systemFields.caracteristiques.fields.int.fields.progression.fields.progres value=system.caracteristiques.int.progression.progres}}</div>
</div>
{{/if}}
<div class="character-characteristic" data-drag="true">
{{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 }}
</div>
<div class="character-caracteristique" data-drag="true" data-drag-type="save">
<i class="fa fa-question-circle" aria-hidden="true" data-tooltip="{{tooltipsCaracteristiques.per}}" style="font-size: small;"></i>
{{formField systemFields.caracteristiques.fields.per.fields.valeur value=system.caracteristiques.per.valeur rootId=partId disabled=isPlayMode classes="rollable" dataset=rollType.savePer}}
{{#if isEditMode}}
<div class="experience">
<div data-tooltip="{{localize "TENEBRIS.Label.experience"}}">{{formInput systemFields.caracteristiques.fields.per.fields.progression.fields.experience value=system.caracteristiques.per.progression.experience}}</div>
<div class="experience-progress" data-tooltip="{{localize "TENEBRIS.Label.progress"}}">{{formInput systemFields.caracteristiques.fields.per.fields.progression.fields.progres value=system.caracteristiques.per.progression.progres}}</div>
</div>
{{/if}}
<div class="character-characteristic" data-drag="true">
{{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 }}
</div>
<div class="character-caracteristique" data-drag="true" data-drag-type="save">
<i class="fa fa-question-circle" aria-hidden="true" data-tooltip="{{tooltipsCaracteristiques.vol}}" style="font-size: small;"></i>
{{formField systemFields.caracteristiques.fields.vol.fields.valeur value=system.caracteristiques.vol.valeur rootId=partId disabled=isPlayMode classes="rollable" dataset=rollType.saveVol}}
{{#if isEditMode}}
<div class="experience">
<div data-tooltip="{{localize "TENEBRIS.Label.experience"}}">{{formInput systemFields.caracteristiques.fields.vol.fields.progression.fields.experience value=system.caracteristiques.vol.progression.experience}}</div>
<div class="experience-progress" data-tooltip="{{localize "TENEBRIS.Label.progress"}}">{{formInput systemFields.caracteristiques.fields.vol.fields.progression.fields.progres value=system.caracteristiques.vol.progression.progres}}</div>
</div>
{{/if}}
<div class="character-characteristic" data-drag="true">
{{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 }}
</div>
<div class="character-characteristic" data-drag="true">
{{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 }}
</div>
<div class="character-characteristic" data-drag="true">
{{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 }}
</div>
<div class="character-characteristic" data-drag="true">
{{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 }}
</div>
</fieldset>
<fieldset class="character-ressources character-ressources-{{ifThen isPlayMode 'play' 'edit'}}">
<legend>{{localize "TENEBRIS.Character.Label.ressources"}}</legend>
<div class="character-ressource" data-drag="true" data-drag-type="resource">
<i class="fa fa-question-circle" aria-hidden="true" data-tooltip="{{tooltipsRessources.san}}" style="font-size: small;"></i>
{{formField systemFields.ressources.fields.san.fields.valeur value=system.ressources.san.valeur rootId=partId disabled=isPlayMode classes="rollable" dataset=rollType.resourceSan}}
{{#if isEditMode}}
<div class="character-ressource-edit">
{{formInput systemFields.ressources.fields.san.fields.max value=system.ressources.san.max}}
<div data-tooltip="{{localize "TENEBRIS.Label.experience"}}">{{formInput systemFields.ressources.fields.san.fields.experience value=system.ressources.san.experience}}</div>
</div>
{{/if}}
<fieldset class="character-resources character-resources-{{ifThen isPlayMode 'play' 'edit'}}">
<legend>{{localize "LETHALFANTASY.Label.resources"}}</legend>
<div class="character-resource" data-drag="true" data-drag-type="resource">
</div>
<div class="character-ressource" data-drag="true" data-drag-type="resource">
<i class="fa fa-question-circle" aria-hidden="true" data-tooltip="{{tooltipsRessources.oeil}}" style="font-size: small;"></i>
{{formField systemFields.ressources.fields.oeil.fields.valeur value=system.ressources.oeil.valeur rootId=partId disabled=isPlayMode classes="rollable" dataset=rollType.resourceOeil}}
{{#if isEditMode}}
<div class="character-ressource-edit">
{{formInput systemFields.ressources.fields.oeil.fields.max value=system.ressources.oeil.max}}
<div data-tooltip="{{localize "TENEBRIS.Label.experience"}}">{{formInput systemFields.ressources.fields.oeil.fields.experience value=system.ressources.oeil.experience}}</div>
</div>
{{/if}}
<div class="character-resource" data-drag="true" data-drag-type="resource">
</div>
<div class="character-ressource" data-drag="true" data-drag-type="resource">
<i class="fa fa-question-circle" aria-hidden="true" data-tooltip="{{tooltipsRessources.verbe}}" style="font-size: small;"></i>
{{formField systemFields.ressources.fields.verbe.fields.valeur value=system.ressources.verbe.valeur rootId=partId disabled=isPlayMode classes="rollable" dataset=rollType.resourceVerbe}}
{{#if isEditMode}}
<div class="character-ressource-edit">
{{formInput systemFields.ressources.fields.verbe.fields.max value=system.ressources.verbe.max}}
<div data-tooltip="{{localize "TENEBRIS.Label.experience"}}">{{formInput systemFields.ressources.fields.verbe.fields.experience value=system.ressources.verbe.experience}}</div>
</div>
{{/if}}
</div>
<div class="character-ressource" data-drag="true" data-drag-type="resource">
<i class="fa fa-question-circle" aria-hidden="true" data-tooltip="{{tooltipsRessources.bourse}}" style="font-size: small;"></i>
{{formField systemFields.ressources.fields.bourse.fields.valeur value=system.ressources.bourse.valeur rootId=partId disabled=isPlayMode classes="rollable" dataset=rollType.resourceBourse}}
{{#if isEditMode}}
<div class="character-ressource-edit">
{{formInput systemFields.ressources.fields.bourse.fields.max value=system.ressources.bourse.max}}
<div data-tooltip="{{localize "TENEBRIS.Label.experience"}}">{{formInput systemFields.ressources.fields.bourse.fields.experience value=system.ressources.bourse.experience}}</div>
</div>
{{/if}}
</div>
<div class="character-ressource" data-drag="true" data-drag-type="resource">
<i class="fa fa-question-circle" aria-hidden="true" data-tooltip="{{tooltipsRessources.magie}}" style="font-size: small;"></i>
{{formField systemFields.ressources.fields.magie.fields.valeur value=system.ressources.magie.valeur rootId=partId disabled=isPlayMode classes="rollable" dataset=rollType.resourceMagie}}
{{#if isEditMode}}
<div class="character-ressource-edit">
{{formInput systemFields.ressources.fields.magie.fields.max value=system.ressources.magie.max}}
<div data-tooltip="{{localize "TENEBRIS.Label.experience"}}">{{formInput systemFields.ressources.fields.magie.fields.experience value=system.ressources.magie.experience}}</div>
</div>
{{/if}}
<div class="character-resource" data-drag="true" data-drag-type="resource">
</div>
</fieldset>

View File

@ -0,0 +1,66 @@
<section class="tab character-{{tab.id}} {{tab.cssClass}}" data-tab="{{tab.id}}" data-group="{{tab.group}}">
<fieldset>
<legend data-tooltip="{{localize " LETHALFANTASY.Tooltip.skills"}}" data-tooltip-direction="UP">{{localize
"LETHALFANTASY.Label.skills"}}</legend>
<div class="skills">
{{#each skills as |item|}}
<div class="skill " data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}">
<img class="item-img" src="{{item.img}}" data-tooltip="{{item.name}}" />
<div class="name" data-tooltip="{{{item.description}}}<br><br>{{item.path}}" data-tooltip-direction="UP">
{{item.name}} +{{item.system.skillTotal}}
</div>
<div class="controls">
<a data-tooltip="{{localize 'LETHALFANTASY.Edit'}}" data-action="edit" data-item-id="{{item.id}}"
data-item-uuid="{{item.uuid}}"><i class="fas fa-edit"></i></a>
<a data-tooltip="{{localize 'LETHALFANTASY.Delete'}}" data-action="delete" data-item-id="{{item.id}}"
data-item-uuid="{{item.uuid}}"><i class="fas fa-trash"></i></a>
</div>
</div>
{{/each}}
</div>
</fieldset>
<fieldset>
<legend data-tooltip="{{localize " LETHALFANTASY.Tooltip.gifts"}}" data-tooltip-direction="UP">{{localize
"LETHALFANTASY.Label.gifts"}}</legend>
<div class="gifts">
{{#each gifts as |item|}}
<div class="gift " data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}">
<img class="item-img" src="{{item.img}}" data-tooltip="{{item.name}}" />
<div class="name" data-tooltip="{{{item.description}}}<br><br>{{item.path}}" data-tooltip-direction="UP">
{{item.name}}
</div>
<div class="controls">
<a data-tooltip="{{localize 'LETHALFANTASY.Edit'}}" data-action="edit" data-item-id="{{item.id}}"
data-item-uuid="{{item.uuid}}"><i class="fas fa-edit"></i></a>
<a data-tooltip="{{localize 'LETHALFANTASY.Delete'}}" data-action="delete" data-item-id="{{item.id}}"
data-item-uuid="{{item.uuid}}"><i class="fas fa-trash"></i></a>
</div>
</div>
{{/each}}
</div>
</fieldset>
<fieldset>
<legend data-tooltip="{{localize " LETHALFANTASY.Tooltip.vulnerabilities"}}" data-tooltip-direction="UP">{{localize
"LETHALFANTASY.Label.vulnerabilities"}}</legend>
<div class="vulnerabilities">
{{#each gifts as |item|}}
<div class="vulnerability " data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}">
<img class="item-img" src="{{item.img}}" data-tooltip="{{item.name}}" />
<div class="name" data-tooltip="{{{item.description}}}<br><br>{{item.path}}" data-tooltip-direction="UP">
{{item.name}}
</div>
<div class="controls">
<a data-tooltip="{{localize 'LETHALFANTASY.Edit'}}" data-action="edit" data-item-id="{{item.id}}"
data-item-uuid="{{item.uuid}}"><i class="fas fa-edit"></i></a>
<a data-tooltip="{{localize 'LETHALFANTASY.Delete'}}" data-action="delete" data-item-id="{{item.id}}"
data-item-uuid="{{item.uuid}}"><i class="fas fa-trash"></i></a>
</div>
</div>
{{/each}}
</div>
</fieldset>
</section>

View File

@ -0,0 +1,26 @@
<section class="tab character-{{tab.id}} {{tab.cssClass}}" data-tab="{{tab.id}}" data-group="{{tab.group}}">
<fieldset>
<legend>{{localize "LETHALFANTASY.Label.spells"}}{{#if isEditMode}}<a class="action" data-tooltip="{{localize "
LETHALFANTASY.Tooltip.addSpell"}}" data-tooltip-direction="UP"><i class="fas fa-plus"
data-action="createSpell"></i></a>{{/if}}</legend>
<div class="spells">
{{#each spells as |item|}}
{{!log 'weapon' this}}
<div class="spell" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}" data-drag="true"
data-drag-type="spell">
<div class="name" data-tooltip="{{{item.system.description}}}">
{{item.name}}
</div>
<div class="controls">
<a data-tooltip="{{localize 'LETHALFANTASY.Edit'}}" data-action="edit" data-item-id="{{item.id}}"
data-item-uuid="{{item.uuid}}"><i class="fas fa-edit"></i></a>
<a data-tooltip="{{localize 'LETHALFANTASY.Delete'}}" data-action="delete" data-item-id="{{item.id}}"
data-item-uuid="{{item.uuid}}"><i class="fas fa-trash"></i></a>
</div>
</div>
{{/each}}
</div>
</fieldset>
</section>

View File

@ -0,0 +1,48 @@
<section class="tab character-{{tab.id}} {{tab.cssClass}}" data-tab="{{tab.id}}" data-group="{{tab.group}}">
<fieldset>
<legend>{{localize "LETHALFANTASY.Label.equipment"}}{{#if isEditMode}}<a class="action" data-tooltip="{{localize "
LETHALFANTASY.Tooltip.addEquipment"}}" data-tooltip-direction="UP"><i class="fas fa-plus"
data-action="createEquipment"></i></a>{{/if}}</legend>
<div class="weapons">
{{#each weapons as |item|}}
{{!log 'weapon' this}}
<div class="weapon" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}" data-drag="true"
data-drag-type="damage">
{{#if (ne item.img "icons/svg/item-bag.svg")}}
<img class="item-img" src="{{item.img}}" data-tooltip="{{item.name}}" />
{{/if}}
<div class="name" data-tooltip="{{{item.system.description}}}">
{{item.name}}
</div>
<div class="controls">
<a data-tooltip="{{localize 'LETHALFANTASY.Edit'}}" data-action="edit" data-item-id="{{item.id}}"
data-item-uuid="{{item.uuid}}"><i class="fas fa-edit"></i></a>
<a data-tooltip="{{localize 'LETHALFANTASY.Delete'}}" data-action="delete" data-item-id="{{item.id}}"
data-item-uuid="{{item.uuid}}"><i class="fas fa-trash"></i></a>
</div>
</div>
{{/each}}
</div>
<div class="armors">
{{#each armors as |item|}}
{{!log 'armor' this}}
<div class="armor" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}">
<img class="item-img" src="{{item.img}}" data-tooltip="{{item.name}}" />
<div class="name" data-tooltip="{{{item.system.description}}}">
{{item.name}}
</div>
<div class="controls">
<a data-tooltip="{{localize 'LETHALFANTASY.Edit'}}" data-action="edit" data-item-id="{{item.id}}"
data-item-uuid="{{item.uuid}}"><i class="fas fa-edit"></i></a>
<a data-tooltip="{{localize 'LETHALFANTASY.Delete'}}" data-action="delete" data-item-id="{{item.id}}"
data-item-uuid="{{item.uuid}}"><i class="fas fa-trash"></i></a>
</div>
</div>
{{/each}}
</div>
</fieldset>
</section>

29
templates/miracle.hbs Normal file
View File

@ -0,0 +1,29 @@
<section>
<div class="header">
<img class="item-img" src="{{item.img}}" data-edit="img" data-action="editImage" data-tooltip="{{item.name}}" />
{{formInput fields.name value=source.name}}
</div>
{{formField systemFields.level value=system.level}}
<label>Components</label>
<div class="shift-right">
{{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}}
</div>
{{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}}
<fieldset>
<legend>{{localize "LETHALFANTASY.Label.description"}}</legend>
{{formInput systemFields.description enriched=description value=system.description name="system.description" toggled=true}}
</fieldset>
</section>

View File

@ -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}}
<span class="flexrow">
<span><strong>Available Bonus : {{system.availableBonus}}</strong></span>
</span>
{{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}}
<div class="total flexrow">
<legend>{{localize "LETHALFANTASY.Label.total"}}</legend>
{{system.skillTotal}}

View File

@ -15,7 +15,7 @@
</div>
{{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}}

View File

@ -8,18 +8,19 @@
<div class="align-top">
{{formField systemFields.weaponType value=system.weaponType localize=true}}
{{formField systemFields.weaponClass value=system.weaponClass localize=true}}
<label>Damage Type</label>
<div class="shift-right">
{{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}}
</div>
<label>Damage</label>
<div class="shift-right">
{{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}}
</div>
{{formField systemFields.hands value=system.hands localize=true}}
@ -45,12 +46,12 @@
<label>Range</label>
<div class="shift-right">
{{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}}
</div>
{{/if}}