diff --git a/assets/lf_logo_01.webp b/assets/lf_logo_01.webp new file mode 100644 index 0000000..7af0210 Binary files /dev/null and b/assets/lf_logo_01.webp differ diff --git a/assets/lf_logo_small_01.webp b/assets/lf_logo_small_01.webp new file mode 100644 index 0000000..d90b1a5 Binary files /dev/null and b/assets/lf_logo_small_01.webp differ diff --git a/css/fvtt-lethal-fantasy.css b/css/fvtt-lethal-fantasy.css index 2298806..7893e3b 100644 --- a/css/fvtt-lethal-fantasy.css +++ b/css/fvtt-lethal-fantasy.css @@ -1,5 +1,5 @@ :root { - --font-size-standard: 0.8125rem; + --font-size-standard: 1rem; --background-image-base: url("../assets/parchment.jpg"); --font-secondary: "Amiri", serif; --logo-standard: url("../assets/lethal-fantasy-logo.webp"); @@ -31,7 +31,7 @@ i.lethalfantasy { } .application.dialog.lethalfantasy { font-family: var(--font-primary); - font-size: calc(var(--font-size-standard) * 1.2); + font-size: calc(var(--font-size-standard) * 1); background-image: var(--background-image-base); } .application.dialog.lethalfantasy button:hover { @@ -53,16 +53,28 @@ i.lethalfantasy { } .lethalfantasy .character-sheet-common label { font-family: var(--font-secondary); - font-size: calc(var(--font-size-standard) * 1.4); + font-size: calc(var(--font-size-standard) * 1.2); } .lethalfantasy .item-sheet-common .form-fields { padding-top: 5px; } .lethalfantasy .item-sheet-common label { font-family: var(--font-secondary); - font-size: calc(var(--font-size-standard) * 1.6); + font-size: calc(var(--font-size-standard) * 1); flex: 50%; } +.lethalfantasy .item-sheet-common .align-top { + align-self: flex-start; + padding: 0.1rem; + margin-right: 0.2rem; + /*border-color: black; + border-width: 1px; + border-style: solid; + border-radius: 2%;*/ +} +.lethalfantasy .item-sheet-common .shift-right { + margin-left: 2rem; +} .lethalfantasy .character-content { font-family: var(--font-primary); font-size: calc(var(--font-size-standard) * 1); @@ -88,32 +100,32 @@ i.lethalfantasy { height: 50px; margin-right: 10px; font-family: var(--font-secondary); - font-size: calc(var(--font-size-standard) * 2); + font-size: calc(var(--font-size-standard) * 1); font-weight: bold; border: none; } .lethalfantasy .character-content fieldset { - margin-bottom: 10px; + margin-bottom: 5px; border-radius: 5px; } .lethalfantasy .character-content .form-fields input, .lethalfantasy .character-content .form-fields select { text-align: center; - font-size: calc(var(--font-size-standard) * 1.4); + font-size: calc(var(--font-size-standard) * 1); } .lethalfantasy .character-content .form-fields select { font-family: var(--font-secondary); - font-size: calc(var(--font-size-standard) * 1.4); + font-size: calc(var(--font-size-standard) * 1); } .lethalfantasy .character-content legend { font-family: var(--font-secondary); - font-size: calc(var(--font-size-standard) * 1.6); + font-size: calc(var(--font-size-standard) * 1.2); font-weight: bold; letter-spacing: 1px; } .lethalfantasy .character-content label { font-family: var(--font-secondary); - font-size: calc(var(--font-size-standard) * 1.4); + font-size: calc(var(--font-size-standard) * 1.2); } .lethalfantasy .character-main { display: flex; @@ -433,26 +445,26 @@ i.lethalfantasy { height: 50px; margin-right: 10px; font-family: var(--font-secondary); - font-size: calc(var(--font-size-standard) * 2); + font-size: calc(var(--font-size-standard) * 1); font-weight: bold; border: none; } .lethalfantasy .opponent-content fieldset { - margin-bottom: 10px; + margin-bottom: 5px; border-radius: 5px; } .lethalfantasy .opponent-content .form-fields input, .lethalfantasy .opponent-content .form-fields select { text-align: center; - font-size: calc(var(--font-size-standard) * 1.4); + font-size: calc(var(--font-size-standard) * 1); } .lethalfantasy .opponent-content .form-fields select { font-family: var(--font-secondary); - font-size: calc(var(--font-size-standard) * 1.4); + font-size: calc(var(--font-size-standard) * 1); } .lethalfantasy .opponent-content legend { font-family: var(--font-secondary); - font-size: calc(var(--font-size-standard) * 1.6); + font-size: calc(var(--font-size-standard) * 1.2); font-weight: bold; letter-spacing: 1px; } @@ -547,26 +559,26 @@ i.lethalfantasy { height: 50px; margin-right: 10px; font-family: var(--font-secondary); - font-size: calc(var(--font-size-standard) * 2); + font-size: calc(var(--font-size-standard) * 1); font-weight: bold; border: none; } .lethalfantasy .skill-content fieldset { - margin-bottom: 10px; + margin-bottom: 5px; border-radius: 5px; } .lethalfantasy .skill-content .form-fields input, .lethalfantasy .skill-content .form-fields select { text-align: center; - font-size: calc(var(--font-size-standard) * 1.4); + font-size: calc(var(--font-size-standard) * 1); } .lethalfantasy .skill-content .form-fields select { font-family: var(--font-secondary); - font-size: calc(var(--font-size-standard) * 1.4); + font-size: calc(var(--font-size-standard) * 1); } .lethalfantasy .skill-content legend { font-family: var(--font-secondary); - font-size: calc(var(--font-size-standard) * 1.6); + font-size: calc(var(--font-size-standard) * 1.2); font-weight: bold; letter-spacing: 1px; } @@ -575,9 +587,21 @@ i.lethalfantasy { } .lethalfantasy .skill-content label { font-family: var(--font-secondary); - font-size: calc(var(--font-size-standard) * 1.6); + font-size: calc(var(--font-size-standard) * 1); flex: 50%; } +.lethalfantasy .skill-content .align-top { + align-self: flex-start; + padding: 0.1rem; + margin-right: 0.2rem; + /*border-color: black; + border-width: 1px; + border-style: solid; + border-radius: 2%;*/ +} +.lethalfantasy .skill-content .shift-right { + margin-left: 2rem; +} .lethalfantasy .skill-content .header { display: flex; } @@ -596,7 +620,7 @@ i.lethalfantasy { .lethalfantasy .skill-content input[type="checkbox"]:checked::after { color: rgba(0, 0, 0, 0.1); } -.lethalfantasy .gifts-content { +.lethalfantasy .gift-content { font-family: var(--font-primary); font-size: calc(var(--font-size-standard) * 1); color: var(--color-dark-1); @@ -604,131 +628,82 @@ i.lethalfantasy { background-repeat: no-repeat; background-size: 100% 100%; } -.lethalfantasy .gifts-content input:disabled, -.lethalfantasy .gifts-content select:disabled { +.lethalfantasy .gift-content input:disabled, +.lethalfantasy .gift-content select:disabled { background-color: rgba(0, 0, 0, 0.2); border-color: transparent; color: var(--color-dark-3); } -.lethalfantasy .gifts-content input, -.lethalfantasy .gifts-content select { +.lethalfantasy .gift-content input, +.lethalfantasy .gift-content select { background-color: rgba(0, 0, 0, 0.1); border-color: var(--color-dark-6); color: var(--color-dark-2); } -.lethalfantasy .gifts-content input[name="name"] { +.lethalfantasy .gift-content input[name="name"] { height: 50px; margin-right: 10px; font-family: var(--font-secondary); - font-size: calc(var(--font-size-standard) * 2); + font-size: calc(var(--font-size-standard) * 1); font-weight: bold; border: none; } -.lethalfantasy .gifts-content fieldset { - margin-bottom: 10px; +.lethalfantasy .gift-content fieldset { + margin-bottom: 5px; border-radius: 5px; } -.lethalfantasy .gifts-content .form-fields input, -.lethalfantasy .gifts-content .form-fields select { +.lethalfantasy .gift-content .form-fields input, +.lethalfantasy .gift-content .form-fields select { text-align: center; - font-size: calc(var(--font-size-standard) * 1.4); + font-size: calc(var(--font-size-standard) * 1); } -.lethalfantasy .gifts-content .form-fields select { +.lethalfantasy .gift-content .form-fields select { font-family: var(--font-secondary); - font-size: calc(var(--font-size-standard) * 1.4); + font-size: calc(var(--font-size-standard) * 1); } -.lethalfantasy .gifts-content legend { +.lethalfantasy .gift-content legend { font-family: var(--font-secondary); - font-size: calc(var(--font-size-standard) * 1.6); + font-size: calc(var(--font-size-standard) * 1.2); font-weight: bold; letter-spacing: 1px; } -.lethalfantasy .gifts-content .form-fields { +.lethalfantasy .gift-content .form-fields { padding-top: 5px; } -.lethalfantasy .gifts-content label { +.lethalfantasy .gift-content label { font-family: var(--font-secondary); - font-size: calc(var(--font-size-standard) * 1.6); + font-size: calc(var(--font-size-standard) * 1); flex: 50%; } -.lethalfantasy .gifts-content .path-name { +.lethalfantasy .gift-content .align-top { + align-self: flex-start; + padding: 0.1rem; + margin-right: 0.2rem; + /*border-color: black; + border-width: 1px; + border-style: solid; + border-radius: 2%;*/ +} +.lethalfantasy .gift-content .shift-right { + margin-left: 2rem; +} +.lethalfantasy .gift-content .header { display: flex; - justify-content: space-between; } -.lethalfantasy .gifts-content .path-name .control { - margin: 5px; -} -.lethalfantasy .gifts-content .path-name img { +.lethalfantasy .gift-content .header img { width: 50px; height: 50px; } -.lethalfantasy .gifts-content .path-main { - display: grid; - grid-template-columns: 2fr 2fr 1fr; - /* Optionnel : supprimer le margin-right sur la dernière colonne si vous avez besoin d'un espacement précis */ +.lethalfantasy .gift-content input[type="checkbox"] { + font-size: var(--font-size-14); + width: 20px; + padding-top: 0; } -.lethalfantasy .gifts-content .path-main .profil { - display: grid; - grid-template-columns: repeat(2, 1fr); +.lethalfantasy .gift-content input[type="checkbox"]:checked { + background-color: rgba(0, 0, 0, 0.1); } -.lethalfantasy .gifts-content .path-main .profil-gauche, -.lethalfantasy .gifts-content .path-main .profil-droite { - flex: 1; - /* Chaque colonne prend la moitié de l'espace disponible */ - padding: 10px; - /* Espacement intérieur */ -} -.lethalfantasy .gifts-content .path-main .profil-gauche { - margin-right: 10px; - /* Espace entre les deux colonnes */ -} -.lethalfantasy .gifts-content .path-main .profil-droite { - margin-right: 0; -} -.lethalfantasy .gifts-content .path-main .biens prose-mirror { - height: 100%; -} -.lethalfantasy .gifts-content .path-main .langues prose-mirror { - height: 100%; -} -.lethalfantasy .gifts-content .path-main .description { - grid-column: span 3; -} -.lethalfantasy .gifts-content .path-main .description prose-mirror.inactive { - min-height: 40px; -} -.lethalfantasy .gifts-content .path-main .description prose-mirror.active { - min-height: 150px; -} -.lethalfantasy .gifts-content .path-talents { - display: grid; - grid-template-columns: repeat(5, 1fr); - gap: 10px; -} -.lethalfantasy .gifts-content .path-talents .talent { - background-color: #f0f0f0; - padding: 5px; - border-radius: 5px; -} -.lethalfantasy .gifts-content .path-talents .talent .header { - display: flex; - justify-content: space-between; -} -.lethalfantasy .gifts-content .path-talents .talent .header .name { - font-family: var(--font-secondary); - font-size: calc(var(--font-size-standard) * 1.5); - padding-left: 20px; -} -.lethalfantasy .gifts-content .path-talents .talent .header .controls { - font-size: calc(var(--font-size-standard) * 0.8); -} -.lethalfantasy .gifts-content .path-talents .talent .progression { - display: flex; - justify-content: space-between; - padding-top: 10px; -} -.lethalfantasy .gifts-content .path-talents .talent .description { - font-size: calc(var(--font-size-standard) * 1); +.lethalfantasy .gift-content input[type="checkbox"]:checked::after { + color: rgba(0, 0, 0, 0.1); } .lethalfantasy .weapon-content { font-family: var(--font-primary); @@ -754,26 +729,26 @@ i.lethalfantasy { height: 50px; margin-right: 10px; font-family: var(--font-secondary); - font-size: calc(var(--font-size-standard) * 2); + font-size: calc(var(--font-size-standard) * 1); font-weight: bold; border: none; } .lethalfantasy .weapon-content fieldset { - margin-bottom: 10px; + margin-bottom: 5px; border-radius: 5px; } .lethalfantasy .weapon-content .form-fields input, .lethalfantasy .weapon-content .form-fields select { text-align: center; - font-size: calc(var(--font-size-standard) * 1.4); + font-size: calc(var(--font-size-standard) * 1); } .lethalfantasy .weapon-content .form-fields select { font-family: var(--font-secondary); - font-size: calc(var(--font-size-standard) * 1.4); + font-size: calc(var(--font-size-standard) * 1); } .lethalfantasy .weapon-content legend { font-family: var(--font-secondary); - font-size: calc(var(--font-size-standard) * 1.6); + font-size: calc(var(--font-size-standard) * 1.2); font-weight: bold; letter-spacing: 1px; } @@ -782,9 +757,21 @@ i.lethalfantasy { } .lethalfantasy .weapon-content label { font-family: var(--font-secondary); - font-size: calc(var(--font-size-standard) * 1.6); + font-size: calc(var(--font-size-standard) * 1); flex: 50%; } +.lethalfantasy .weapon-content .align-top { + align-self: flex-start; + padding: 0.1rem; + margin-right: 0.2rem; + /*border-color: black; + border-width: 1px; + border-style: solid; + border-radius: 2%;*/ +} +.lethalfantasy .weapon-content .shift-right { + margin-left: 2rem; +} .lethalfantasy .weapon-content .header { display: flex; } @@ -819,26 +806,26 @@ i.lethalfantasy { height: 50px; margin-right: 10px; font-family: var(--font-secondary); - font-size: calc(var(--font-size-standard) * 2); + font-size: calc(var(--font-size-standard) * 1); font-weight: bold; border: none; } .lethalfantasy .armor-content fieldset { - margin-bottom: 10px; + margin-bottom: 5px; border-radius: 5px; } .lethalfantasy .armor-content .form-fields input, .lethalfantasy .armor-content .form-fields select { text-align: center; - font-size: calc(var(--font-size-standard) * 1.4); + font-size: calc(var(--font-size-standard) * 1); } .lethalfantasy .armor-content .form-fields select { font-family: var(--font-secondary); - font-size: calc(var(--font-size-standard) * 1.4); + font-size: calc(var(--font-size-standard) * 1); } .lethalfantasy .armor-content legend { font-family: var(--font-secondary); - font-size: calc(var(--font-size-standard) * 1.6); + font-size: calc(var(--font-size-standard) * 1.2); font-weight: bold; letter-spacing: 1px; } @@ -847,9 +834,21 @@ i.lethalfantasy { } .lethalfantasy .armor-content label { font-family: var(--font-secondary); - font-size: calc(var(--font-size-standard) * 1.6); + font-size: calc(var(--font-size-standard) * 1); flex: 50%; } +.lethalfantasy .armor-content .align-top { + align-self: flex-start; + padding: 0.1rem; + margin-right: 0.2rem; + /*border-color: black; + border-width: 1px; + border-style: solid; + border-radius: 2%;*/ +} +.lethalfantasy .armor-content .shift-right { + margin-left: 2rem; +} .lethalfantasy .armor-content .header { display: flex; } @@ -884,26 +883,26 @@ i.lethalfantasy { height: 50px; margin-right: 10px; font-family: var(--font-secondary); - font-size: calc(var(--font-size-standard) * 2); + font-size: calc(var(--font-size-standard) * 1); font-weight: bold; border: none; } .lethalfantasy .spell-content fieldset { - margin-bottom: 10px; + margin-bottom: 5px; border-radius: 5px; } .lethalfantasy .spell-content .form-fields input, .lethalfantasy .spell-content .form-fields select { text-align: center; - font-size: calc(var(--font-size-standard) * 1.4); + font-size: calc(var(--font-size-standard) * 1); } .lethalfantasy .spell-content .form-fields select { font-family: var(--font-secondary); - font-size: calc(var(--font-size-standard) * 1.4); + font-size: calc(var(--font-size-standard) * 1); } .lethalfantasy .spell-content legend { font-family: var(--font-secondary); - font-size: calc(var(--font-size-standard) * 1.6); + font-size: calc(var(--font-size-standard) * 1.2); font-weight: bold; letter-spacing: 1px; } @@ -912,9 +911,21 @@ i.lethalfantasy { } .lethalfantasy .spell-content label { font-family: var(--font-secondary); - font-size: calc(var(--font-size-standard) * 1.6); + font-size: calc(var(--font-size-standard) * 1); flex: 50%; } +.lethalfantasy .spell-content .align-top { + align-self: flex-start; + padding: 0.1rem; + margin-right: 0.2rem; + /*border-color: black; + border-width: 1px; + border-style: solid; + border-radius: 2%;*/ +} +.lethalfantasy .spell-content .shift-right { + margin-left: 2rem; +} .lethalfantasy .spell-content .header { display: flex; } @@ -925,10 +936,6 @@ i.lethalfantasy { .lethalfantasy .spell-content label { flex: 10%; } -.lethalfantasy .spell-content input[name="system.consequenceA"], -.lethalfantasy .spell-content input[name="system.consequenceB"] { - font-size: calc(var(--font-size-standard) * 1.2); -} .lethalfantasy .vulnerability-content { font-family: var(--font-primary); font-size: calc(var(--font-size-standard) * 1); @@ -953,26 +960,26 @@ i.lethalfantasy { height: 50px; margin-right: 10px; font-family: var(--font-secondary); - font-size: calc(var(--font-size-standard) * 2); + font-size: calc(var(--font-size-standard) * 1); font-weight: bold; border: none; } .lethalfantasy .vulnerability-content fieldset { - margin-bottom: 10px; + margin-bottom: 5px; border-radius: 5px; } .lethalfantasy .vulnerability-content .form-fields input, .lethalfantasy .vulnerability-content .form-fields select { text-align: center; - font-size: calc(var(--font-size-standard) * 1.4); + font-size: calc(var(--font-size-standard) * 1); } .lethalfantasy .vulnerability-content .form-fields select { font-family: var(--font-secondary); - font-size: calc(var(--font-size-standard) * 1.4); + font-size: calc(var(--font-size-standard) * 1); } .lethalfantasy .vulnerability-content legend { font-family: var(--font-secondary); - font-size: calc(var(--font-size-standard) * 1.6); + font-size: calc(var(--font-size-standard) * 1.2); font-weight: bold; letter-spacing: 1px; } @@ -981,9 +988,21 @@ i.lethalfantasy { } .lethalfantasy .vulnerability-content label { font-family: var(--font-secondary); - font-size: calc(var(--font-size-standard) * 1.6); + font-size: calc(var(--font-size-standard) * 1); flex: 50%; } +.lethalfantasy .vulnerability-content .align-top { + align-self: flex-start; + padding: 0.1rem; + margin-right: 0.2rem; + /*border-color: black; + border-width: 1px; + border-style: solid; + border-radius: 2%;*/ +} +.lethalfantasy .vulnerability-content .shift-right { + margin-left: 2rem; +} .lethalfantasy .vulnerability-content .header { display: flex; } @@ -1026,26 +1045,26 @@ i.lethalfantasy { height: 50px; margin-right: 10px; font-family: var(--font-secondary); - font-size: calc(var(--font-size-standard) * 2); + font-size: calc(var(--font-size-standard) * 1); font-weight: bold; border: none; } .lethalfantasy .save-content fieldset { - margin-bottom: 10px; + margin-bottom: 5px; border-radius: 5px; } .lethalfantasy .save-content .form-fields input, .lethalfantasy .save-content .form-fields select { text-align: center; - font-size: calc(var(--font-size-standard) * 1.4); + font-size: calc(var(--font-size-standard) * 1); } .lethalfantasy .save-content .form-fields select { font-family: var(--font-secondary); - font-size: calc(var(--font-size-standard) * 1.4); + font-size: calc(var(--font-size-standard) * 1); } .lethalfantasy .save-content legend { font-family: var(--font-secondary); - font-size: calc(var(--font-size-standard) * 1.6); + font-size: calc(var(--font-size-standard) * 1.2); font-weight: bold; letter-spacing: 1px; } @@ -1054,9 +1073,21 @@ i.lethalfantasy { } .lethalfantasy .save-content label { font-family: var(--font-secondary); - font-size: calc(var(--font-size-standard) * 1.6); + font-size: calc(var(--font-size-standard) * 1); flex: 50%; } +.lethalfantasy .save-content .align-top { + align-self: flex-start; + padding: 0.1rem; + margin-right: 0.2rem; + /*border-color: black; + border-width: 1px; + border-style: solid; + border-radius: 2%;*/ +} +.lethalfantasy .save-content .shift-right { + margin-left: 2rem; +} .lethalfantasy .save-content .header { display: flex; } @@ -1105,6 +1136,160 @@ i.lethalfantasy { font-family: var(--font-secondary); font-size: calc(var(--font-size-standard) * 1.2); } +.lethalfantasy .equipment-content { + font-family: var(--font-primary); + font-size: calc(var(--font-size-standard) * 1); + color: var(--color-dark-1); + background-image: var(--background-image-base); + background-repeat: no-repeat; + background-size: 100% 100%; +} +.lethalfantasy .equipment-content input:disabled, +.lethalfantasy .equipment-content select:disabled { + background-color: rgba(0, 0, 0, 0.2); + border-color: transparent; + color: var(--color-dark-3); +} +.lethalfantasy .equipment-content input, +.lethalfantasy .equipment-content select { + background-color: rgba(0, 0, 0, 0.1); + border-color: var(--color-dark-6); + color: var(--color-dark-2); +} +.lethalfantasy .equipment-content input[name="name"] { + height: 50px; + margin-right: 10px; + font-family: var(--font-secondary); + font-size: calc(var(--font-size-standard) * 1); + font-weight: bold; + border: none; +} +.lethalfantasy .equipment-content fieldset { + margin-bottom: 5px; + border-radius: 5px; +} +.lethalfantasy .equipment-content .form-fields input, +.lethalfantasy .equipment-content .form-fields select { + text-align: center; + font-size: calc(var(--font-size-standard) * 1); +} +.lethalfantasy .equipment-content .form-fields select { + font-family: var(--font-secondary); + font-size: calc(var(--font-size-standard) * 1); +} +.lethalfantasy .equipment-content legend { + font-family: var(--font-secondary); + font-size: calc(var(--font-size-standard) * 1.2); + font-weight: bold; + letter-spacing: 1px; +} +.lethalfantasy .equipment-content .form-fields { + padding-top: 5px; +} +.lethalfantasy .equipment-content label { + font-family: var(--font-secondary); + font-size: calc(var(--font-size-standard) * 1); + flex: 50%; +} +.lethalfantasy .equipment-content .align-top { + align-self: flex-start; + padding: 0.1rem; + margin-right: 0.2rem; + /*border-color: black; + border-width: 1px; + border-style: solid; + border-radius: 2%;*/ +} +.lethalfantasy .equipment-content .shift-right { + margin-left: 2rem; +} +.lethalfantasy .equipment-content .header { + display: flex; +} +.lethalfantasy .equipment-content .header img { + width: 50px; + height: 50px; +} +.lethalfantasy .equipment-content label { + flex: 10%; +} +.lethalfantasy .shield-content { + font-family: var(--font-primary); + font-size: calc(var(--font-size-standard) * 1); + color: var(--color-dark-1); + background-image: var(--background-image-base); + background-repeat: no-repeat; + background-size: 100% 100%; +} +.lethalfantasy .shield-content input:disabled, +.lethalfantasy .shield-content select:disabled { + background-color: rgba(0, 0, 0, 0.2); + border-color: transparent; + color: var(--color-dark-3); +} +.lethalfantasy .shield-content input, +.lethalfantasy .shield-content select { + background-color: rgba(0, 0, 0, 0.1); + border-color: var(--color-dark-6); + color: var(--color-dark-2); +} +.lethalfantasy .shield-content input[name="name"] { + height: 50px; + margin-right: 10px; + font-family: var(--font-secondary); + font-size: calc(var(--font-size-standard) * 1); + font-weight: bold; + border: none; +} +.lethalfantasy .shield-content fieldset { + margin-bottom: 5px; + border-radius: 5px; +} +.lethalfantasy .shield-content .form-fields input, +.lethalfantasy .shield-content .form-fields select { + text-align: center; + font-size: calc(var(--font-size-standard) * 1); +} +.lethalfantasy .shield-content .form-fields select { + font-family: var(--font-secondary); + font-size: calc(var(--font-size-standard) * 1); +} +.lethalfantasy .shield-content legend { + font-family: var(--font-secondary); + font-size: calc(var(--font-size-standard) * 1.2); + font-weight: bold; + letter-spacing: 1px; +} +.lethalfantasy .shield-content .form-fields { + padding-top: 5px; +} +.lethalfantasy .shield-content label { + font-family: var(--font-secondary); + font-size: calc(var(--font-size-standard) * 1); + flex: 50%; +} +.lethalfantasy .shield-content .align-top { + align-self: flex-start; + padding: 0.1rem; + margin-right: 0.2rem; + /*border-color: black; + border-width: 1px; + border-style: solid; + border-radius: 2%;*/ +} +.lethalfantasy .shield-content .shift-right { + margin-left: 2rem; +} +.lethalfantasy .shield-content .header { + display: flex; +} +.lethalfantasy .shield-content .header img { + width: 50px; + height: 50px; +} +.lethalfantasy .shield-content label { + flex: 10%; +} .application.dialog.lethalfantasy { color: var(--color-dark-1); } diff --git a/lang/en.json b/lang/en.json index dbf0796..6e489a5 100644 --- a/lang/en.json +++ b/lang/en.json @@ -12,7 +12,8 @@ "gift": "Gift", "vulnerability": "Vulnerability", "save": "Save", - "equipment": "Equipment" + "equipment": "Equipment" , + "shield": "Shield" } }, @@ -47,7 +48,26 @@ } }, "Skill": { + "Category": { + "layperson": "Layperson", + "professional": "Professional", + "weapon": "Weapon", + "armor": "Armor", + "resist": "Resist" + }, "FIELDS": { + "category": { + "label": "Category" + }, + "bonus" :{ + "label": "Bonus" + }, + "base": { + "label": "Base" + }, + "cost": { + "label": "Cost" + }, "description": { "label": "Description" } @@ -55,6 +75,12 @@ }, "Equipment": { "FIELDS": { + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + }, "description": { "label": "Description" } @@ -62,46 +88,239 @@ }, "Gift": { "FIELDS": { + "cost": { + "label": "Cost" + }, "description": { "label": "Description" } } }, "Weapon": { + "WeaponType": { + "melee": "Melee", + "ranged": "Ranged" + }, "FIELDS": { - "category": { - "label": "Category" + "weaponType": { + "label": "Type" + }, + "damageType": { + "typeP": { + "label": "Piercing" + }, + "typeB": { + "label": "Bashing" + }, + "typeS": { + "label": "Slashing" + } + }, + "damage": { + "damageS": { + "label": "Small" + }, + "damageM": { + "label": "Medium" + } + }, + "hands": { + "label": "Hands" + }, + "defenseMax": { + "label": "Defense max" + }, + "secondsToAttack": { + "label": "Seconds to attack" + }, + "speed": { + "simpleAim": { + "label": "Simple aim" + }, + "carefulAim": { + "label": "Careful aim" + }, + "focusedAim": { + "label": "Focused aim" + } + }, + "defense": { + "label": "Defense" + }, + "range": { + "pointBlank": { + "label": "Point blank" + }, + "short": { + "label": "Short" + }, + "medium": { + "label": "Medium" + }, + "long": { + "label": "Long" + }, + "extreme": { + "label": "Extreme" + }, + "outOfSkill": { + "label": "Out of skill" + } + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" } } }, "Armor": { - "FIELDS": { - "category": { - "label": "Category" - } - }, "Category": { - "sommaire": "Armures sommaires", - "legere": "Armures légères", - "guerre": "Armures de guerre" + "light": "Light", + "medium": "Medium", + "heavy": "Heavy" + }, + "FIELDS": { + "armortype": { + "label": "Category" + }, + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } + } + }, + "Shield": { + "FIELDS": { + "defense": { + "label": "Defense" + }, + "movementreduction": { + "label": "Movement reduction" + }, + "hp": { + "label": "HP" + }, + "standing": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "crouching": { + "min":{ + "label": "Min" + }, + "max":{ + "label": "Max" + } + }, + "destruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "autodestruction": { + "bashing": { + "label": "Bashing" + }, + "slashing": { + "label": "Slashing" + }, + "piercing": { + "label": "Piercing" + } + }, + "damagereduction": { + "label": "Damage reduction" + }, + "load": { + "label": "Load" + }, + "cost": { + "label": "Cost" + }, + "money": { + "label": "Money unit" + } } }, "Spell": { "FIELDS": { "description": { "label": "Description" + }, + "components": { + "verbal": { + "label": "Verbal" + }, + "somatic": { + "label": "Somatic" + }, + "material": { + "label": "Material" + } + }, + "level": { + "label": "Level" + }, + "cost" : { + "label": "Cost" + }, + "castingTime": { + "label": "Casting time" + }, + "range": { + "label": "Range" + }, + "duration": { + "label": "Duration" + }, + "areaAffected": { + "label": "Area affected" + }, + "savingThrow": { + "label": "Saving throw" + }, + "extraAetherPoints": { + "label": "Extra aether points" } - }, - "Range": { - "na": "-", - "contact": "Contact", - "proche": "Proche", - "loin": "Loin", - "distant": "Distant" } }, - "Vulneravility": { + "Vulnerability": { "FIELDS": { + "cost": { + "label": "Cost" + }, "description": { "label": "Description" } @@ -109,14 +328,24 @@ }, "Save": { "FIELDS": { + "value": { + "label": "Value" + }, "description": { "label": "Description" } } }, + "Money": { + "Tinbits": "Tin Bits", + "Coppers": "Copper", + "Silvers": "Silver", + "Golds": "Gold", + "Platinums": "Platinum" + }, "Label": { "description": "Description", - "biens": "Biens", + "total": "Total", "langues": "Langues", "profil": "Profil", "details": "Détails", diff --git a/lethal-fantasy.mjs b/lethal-fantasy.mjs index e652496..24f1b71 100644 --- a/lethal-fantasy.mjs +++ b/lethal-fantasy.mjs @@ -44,9 +44,11 @@ Hooks.once("init", function () { gift: models.LethalFantasyGift, weapon: models.LethalFantasyWeapon, armor: models.LethalFantasyArmor, + shield: models.LethalFantasyShield, spell: models.LethalFantasySpell, save: models.LethalFantasySave, - vulnerability: models.LethalFantasyVulnerability + vulnerability: models.LethalFantasyVulnerability, + equipment: models.LethalFantasyEquipment } // Register sheet application classes @@ -62,6 +64,8 @@ Hooks.once("init", function () { Items.registerSheet("lethalFantasy", applications.LethalFantasyWeaponSheet, { types: ["weapon"], makeDefault: true }) Items.registerSheet("lethalFantasy", applications.LethalFantasySpellSheet, { types: ["spell"], makeDefault: true }) 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 }) // Other Document Configuration CONFIG.ChatMessage.documentClass = documents.LethalFantasyChatMessage @@ -69,26 +73,6 @@ Hooks.once("init", function () { // Dice system configuration CONFIG.Dice.rolls.push(documents.LethalFantasyRoll) - // Register system settings - game.settings.register("lethalFantasy", "displayOpponentMalus", { - name: "TENEBRIS.Setting.displayOpponentMalus", - hint: "TENEBRIS.Setting.displayOpponentMalusHint", - scope: "world", - config: true, - type: Boolean, - default: true, - }) - - game.settings.register("lethalFantasy", "fortune", { - name: "TENEBRIS.Setting.fortune", - hint: "TENEBRIS.Setting.fortuneHint", - scope: "world", - config: true, - type: Number, - default: 0, - requiresReload: true, - }) - game.settings.register("lethalFantasy", "worldKey", { name: "Unique world key", scope: "world", @@ -100,9 +84,6 @@ Hooks.once("init", function () { // Activate socket handler game.socket.on(`system.${SYSTEM.id}`, handleSocketEvent) - // Pre-localize configuration objects - // TODO : encore d'actualité ? - // preLocalizeConfig() initControlButtons() @@ -121,7 +102,7 @@ Hooks.once("init", function () { applications.LethalFantasyManager.askRollForAll(type, target, title, avantage) }) - console.info("CTHULHU TENEBRIS | System Initialized") + console.info("LETHAL FANTASY | System Initialized") }) /** @@ -146,7 +127,7 @@ Hooks.once("ready", function () { console.info("LETHAL FANTASY | Ready") game.system.applicationManager = new applications.LethalFantasyManager() if (game.user.isGM) { - game.system.applicationManager.render(true) + //game.system.applicationManager.render(true) } if (!SYSTEM.DEV_MODE) { diff --git a/module/applications/_module.mjs b/module/applications/_module.mjs index 1b9d4c1..f04e2b4 100644 --- a/module/applications/_module.mjs +++ b/module/applications/_module.mjs @@ -8,4 +8,5 @@ export { default as LethalFantasySaveSheet } from "./sheets/save-sheet.mjs" 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 LethalFantasyManager } from "./manager.mjs" diff --git a/module/applications/sheets/character-sheet.mjs b/module/applications/sheets/character-sheet.mjs index 35b99da..000fac3 100644 --- a/module/applications/sheets/character-sheet.mjs +++ b/module/applications/sheets/character-sheet.mjs @@ -13,8 +13,6 @@ export default class LethalFantasyCharacterSheet extends LethalFantasyActorSheet contentClasses: ["character-content"], }, actions: { - deleteVoieMajeure: LethalFantasyCharacterSheet.#onDeleteVoieMajeure, - deleteVoieMineure: LethalFantasyCharacterSheet.#onDeleteVoieMineure, createEquipment: LethalFantasyCharacterSheet.#onCreateEquipment, }, } @@ -25,7 +23,7 @@ export default class LethalFantasyCharacterSheet extends LethalFantasyActorSheet template: "systems/fvtt-lethal-fantasy/templates/character-main.hbs", }, tabs: { - template: "templates/generic/tab-navigation.hbs", + template: "systems/fvtt-lethal-fantasy/templates/generic/tab-navigation.hbs", }, items: { template: "systems/fvtt-lethal-fantasy/templates/character-items.hbs", @@ -46,8 +44,8 @@ export default class LethalFantasyCharacterSheet extends LethalFantasyActorSheet */ #getTabs() { const tabs = { - items: { id: "items", group: "sheet", icon: "fa-solid fa-shapes", label: "TENEBRIS.Character.Label.details" }, - biography: { id: "biography", group: "sheet", icon: "fa-solid fa-book", label: "TENEBRIS.Character.Label.biography" }, + 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" }, } for (const v of Object.values(tabs)) { v.active = this.tabGroups[v.group] === v.id @@ -62,105 +60,17 @@ export default class LethalFantasyCharacterSheet extends LethalFantasyActorSheet context.tabs = this.#getTabs() context.tooltipsCaracteristiques = { - rob: this._generateTooltip("save", "rob"), - dex: this._generateTooltip("save", "dex"), - int: this._generateTooltip("save", "int"), - per: this._generateTooltip("save", "per"), - vol: this._generateTooltip("save", "vol"), - dmax: this._generateTooltip("other", "dmax"), } context.tooltipsRessources = { - san: this._generateTooltip("resource", "san"), - oeil: this._generateTooltip("resource", "oeil"), - verbe: this._generateTooltip("resource", "verbe"), - bourse: this._generateTooltip("resource", "bourse"), - magie: this._generateTooltip("resource", "magie"), } context.rollType = { - saveRob: { - action: "roll", - rollType: "save", - rollTarget: "rob", - tooltip: this._generateTooltip("save", "rob"), - }, - saveDex: { - action: "roll", - rollType: "save", - rollTarget: "dex", - tooltip: this._generateTooltip("save", "dex"), - }, - saveInt: { - action: "roll", - rollType: "save", - rollTarget: "int", - tooltip: this._generateTooltip("save", "int"), - }, - savePer: { - action: "roll", - rollType: "save", - rollTarget: "per", - tooltip: this._generateTooltip("save", "per"), - drag: true, - }, - saveVol: { - action: "roll", - rollType: "save", - rollTarget: "vol", - tooltip: this._generateTooltip("save", "vol"), - drag: true, - }, - resourceSan: { - action: "roll", - rollType: "resource", - rollTarget: "san", - tooltip: this._generateTooltip("resource", "san"), - drag: true, - }, - resourceOeil: { - action: "roll", - rollType: "resource", - rollTarget: "oeil", - tooltip: this._generateTooltip("resource", "oeil"), - drag: true, - }, - resourceVerbe: { - action: "roll", - rollType: "resource", - rollTarget: "verbe", - tooltip: this._generateTooltip("resource", "verbe"), - drag: true, - }, - resourceBourse: { - action: "roll", - rollType: "resource", - rollTarget: "bourse", - tooltip: this._generateTooltip("resource", "bourse"), - drag: true, - }, - resourceMagie: { - action: "roll", - rollType: "resource", - rollTarget: "magie", - tooltip: this._generateTooltip("resource", "magie"), - drag: true, - }, } return context } _generateTooltip(type, target) { - if (type === ROLL_TYPE.SAVE) { - const progres = this.document.system.caracteristiques[target].progression.progres - ? game.i18n.localize("TENEBRIS.Label.hasProgressed") - : game.i18n.localize("TENEBRIS.Label.noProgress") - return `${game.i18n.localize("TENEBRIS.Label.experience")} : ${this.document.system.caracteristiques[target].progression.experience}
${progres}` - } else if (type === ROLL_TYPE.RESOURCE) { - return `${game.i18n.localize("TENEBRIS.Label.maximum")} : ${this.document.system.ressources[target].max}
${game.i18n.localize("TENEBRIS.Label.experience")} : ${this.document.system.ressources[target].experience}` - } else if (type === "other") { - return `${game.i18n.localize("TENEBRIS.Label.experience")} : ${this.document.system.dmax.experience}` - } } /** @override */ @@ -172,9 +82,6 @@ export default class LethalFantasyCharacterSheet extends LethalFantasyActorSheet break case "items": context.tab = context.tabs.items - const talents = await this._prepareTalents() - context.talents = talents - context.talentsAppris = talents.filter((talent) => talent.appris) context.weapons = doc.itemTypes.weapon context.armors = doc.itemTypes.armor context.spells = doc.itemTypes.spell @@ -183,40 +90,12 @@ export default class LethalFantasyCharacterSheet extends LethalFantasyActorSheet case "biography": context.tab = context.tabs.biography context.enrichedDescription = await TextEditor.enrichHTML(doc.system.description, { async: true }) - context.enrichedLangues = await TextEditor.enrichHTML(doc.system.langues, { async: true }) context.enrichedNotes = await TextEditor.enrichHTML(doc.system.notes, { async: true }) break } return context } - /** - * Prepares the talents for the character sheet. - * - * @returns {Array} An array of talents with their properties. - */ - async _prepareTalents() { - const talents = await Promise.all( - this.document.itemTypes.talent.map(async (talent) => { - const pathName = await talent.system.getPathName() - return { - id: talent.id, - uuid: talent.uuid, - name: talent.name, - img: talent.img, - path: `Obtenu par ${pathName}`, - description: talent.system.improvedDescription, - progression: talent.system.progression, - niveau: talent.system.niveau, - appris: talent.system.appris, - details: talent.system.details, - } - }), - ) - talents.sort((a, b) => b.appris - a.appris || a.name.localeCompare(b.name, game.i18n.lang)) - return talents - } - // #region Drag-and-Drop Workflow /** @@ -244,43 +123,6 @@ export default class LethalFantasyCharacterSheet extends LethalFantasyActorSheet await this.document.addPath(item) } - // #endregion - - // #region Actions - - /** - * Suppression de la voie majeure - * @param {Event} event The initiating click event. - * @param {HTMLElement} target The current target of the event listener. - */ - static async #onDeleteVoieMajeure(event, target) { - const proceed = await foundry.applications.api.DialogV2.confirm({ - content: game.i18n.localize("TENEBRIS.Dialog.suppressionTalents"), - rejectClose: false, - modal: true, - }) - if (!proceed) return - const path = this.document.items.get(this.document.system.voies.majeure.id) - if (!path) return - await this.document.deletePath(path, true) - } - - /** - * Suppression de la voie mineure - * @param {Event} event The initiating click event. - * @param {HTMLElement} target The current target of the event listener. - */ - static async #onDeleteVoieMineure(event, target) { - const proceed = await foundry.applications.api.DialogV2.confirm({ - content: game.i18n.localize("TENEBRIS.Dialog.suppressionTalents"), - rejectClose: false, - modal: true, - }) - if (!proceed) return - const path = this.document.items.get(this.document.system.voies.mineure.id) - if (!path) return - await this.document.deletePath(path, false) - } /** * Creates a new attack item directly from the sheet and embeds it into the document. @@ -290,11 +132,11 @@ export default class LethalFantasyCharacterSheet extends LethalFantasyActorSheet static #onCreateEquipment(event, target) { // Création d'une armure if (event.shiftKey) { - this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("TENEBRIS.Label.newArmor"), type: "armor" }]) + this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("LETHALFANTASY.Label.newArmor"), type: "armor" }]) } // Création d'une arme else { - this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("TENEBRIS.Label.newWeapon"), type: "weapon" }]) + this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("LETHALFANTASY.Label.newWeapon"), type: "weapon" }]) } } diff --git a/module/applications/sheets/gift-sheet.mjs b/module/applications/sheets/gift-sheet.mjs index fc75c40..e37b986 100644 --- a/module/applications/sheets/gift-sheet.mjs +++ b/module/applications/sheets/gift-sheet.mjs @@ -22,7 +22,7 @@ export default class LethalFantasyGiftSheet extends LethalFantasyItemSheet { /** @override */ async _prepareContext() { const context = await super._prepareContext() - context.enrichedDescription = await TextEditor.enrichHTML(this.document.system.improvedDescription, { async: true }) + context.enrichedDescription = await TextEditor.enrichHTML(this.document.system.description, { async: true }) return context } } diff --git a/module/applications/sheets/shield-sheet.mjs b/module/applications/sheets/shield-sheet.mjs new file mode 100644 index 0000000..46e876e --- /dev/null +++ b/module/applications/sheets/shield-sheet.mjs @@ -0,0 +1,27 @@ +import LethalFantasyItemSheet from "./base-item-sheet.mjs" + +export default class LethalFantasyShieldSheet extends LethalFantasyItemSheet { + /** @override */ + static DEFAULT_OPTIONS = { + classes: ["shield"], + position: { + width: 620, + }, + window: { + contentClasses: ["shield-content"], + }, + } + + /** @override */ + static PARTS = { + main: { + template: "systems/fvtt-lethal-fantasy/templates/shield.hbs", + }, + } + + /** @override */ + async _prepareContext() { + const context = await super._prepareContext() + return context + } +} diff --git a/module/applications/sheets/weapon-sheet.mjs b/module/applications/sheets/weapon-sheet.mjs index a696ea7..2c5d0f5 100644 --- a/module/applications/sheets/weapon-sheet.mjs +++ b/module/applications/sheets/weapon-sheet.mjs @@ -5,7 +5,7 @@ export default class LethalFantasyWeaponSheet extends LethalFantasyItemSheet { static DEFAULT_OPTIONS = { classes: ["weapon"], position: { - width: 400, + width: 620, }, window: { contentClasses: ["weapon-content"], diff --git a/module/config/armor.mjs b/module/config/armor.mjs index 157d572..b2ea2b5 100644 --- a/module/config/armor.mjs +++ b/module/config/armor.mjs @@ -1,5 +1,5 @@ -export const CATEGORY = Object.freeze({ - sommaire: { id: "sommaire", label: "LETHALFANTASY.Armor.Category.sommaire" }, - legere: { id: "legere", label: "LETHALFANTASY.Armor.Category.legere" }, - guerre: { id: "guerre", label: "LETHALFANTASY.Armor.Category.guerre" }, +export const TYPE = Object.freeze({ + light: { id: "light", label: "LETHALFANTASY.Armor.Category.light" }, + medium: { id: "medium", label: "LETHALFANTASY.Armor.Category.medium" }, + heavy: { id: "medium", label: "LETHALFANTASY.Armor.Category.heavy" } }) diff --git a/module/config/equipment.mjs b/module/config/equipment.mjs new file mode 100644 index 0000000..c1e0146 --- /dev/null +++ b/module/config/equipment.mjs @@ -0,0 +1,51 @@ +export const CATEGORY = Object.freeze({ + essentialkit: { + id: "essentialkit", + label: "LETHALFANTASY.EquipmentCategories.EssentialKit", + }, + classkit: { + id: "classkit", + label: "LETHALFANTASY.EquipmentCategories.ClassKit", + }, + clothing: { + id: "clothing", + label: "LETHALFANTASY.EquipmentCategories.Clothing", + }, + music: { + id: "music", + label: "LETHALFANTASY.EquipmentCategories.Music", + }, + sleeping: { + id: "sleeping", + label: "LETHALFANTASY.EquipmentCategories.Sleeping", + }, + landtransport: { + id: "landtransport", + label: "LETHALFANTASY.EquipmentCategories.LandTransport", + }, + watertransport: { + id: "watertransport", + label: "LETHALFANTASY.EquipmentCategories.WaterTransport", + }, + mount: { + id: "mount", + label: "LETHALFANTASY.EquipmentCategories.Mount", + }, + light: { + id: "light", + label: "LETHALFANTASY.EquipmentCategories.Light", + }, + loadbearing: { + id: "loadbearing", + label: "LETHALFANTASY.EquipmentCategories.LoadBearing", + }, + misc: { + id: "misc", + label: "LETHALFANTASY.EquipmentCategories.Misc", + }, + fooddrink: { + id: "fooddrink", + label: "LETHALFANTASY.EquipmentCategories.FoodDrink", + }, + +}) diff --git a/module/config/system.mjs b/module/config/system.mjs index 3bc87c0..3f75f4f 100644 --- a/module/config/system.mjs +++ b/module/config/system.mjs @@ -3,6 +3,7 @@ import * as WEAPON from "./weapon.mjs" import * as ARMOR from "./armor.mjs" import * as SPELL from "./spell.mjs" import * as SKILL from "./skill.mjs" +import * as EQUIPMENT from "./equipment.mjs" export const SYSTEM_ID = "fvtt-lethal-fantasy" export const DEV_MODE = false @@ -81,8 +82,10 @@ export const SYSTEM = { SKILL_CATEGORY: SKILL.CATEGORY, WEAPON_CATEGORY: WEAPON.CATEGORY, WEAPON_DAMAGE: WEAPON.DAMAGE, - ARMOR_CATEGORY: ARMOR.CATEGORY, + ARMOR_TYPE: ARMOR.TYPE, + EQUIPMENT_CATEGORY: EQUIPMENT.CATEGORY, SPELL_RANGE: SPELL.RANGE, + WEAPON_TYPE: WEAPON.WEAPON_TYPE, MONEY, ASCII, ROLL_TYPE, diff --git a/module/config/weapon.mjs b/module/config/weapon.mjs index d36e37f..4265c88 100644 --- a/module/config/weapon.mjs +++ b/module/config/weapon.mjs @@ -21,6 +21,11 @@ export const CATEGORY = Object.freeze({ }, }) +export const WEAPON_TYPE = { + "melee": "LETHALFANTASY.Weapon.WeaponType.melee", + "ranged": "LETHALFANTASY.Weapon.WeaponType.ranged" +} + export const DAMAGE = Object.freeze({ UN: "1", D4: "d4", diff --git a/module/models/_module.mjs b/module/models/_module.mjs index a831a91..f6af99a 100644 --- a/module/models/_module.mjs +++ b/module/models/_module.mjs @@ -4,6 +4,8 @@ export { default as LethalFantasyWeapon } from "./weapon.mjs" export { default as LethalFantasySpell } from "./spell.mjs" export { default as LethalFantasySkill } from "./skill.mjs" export { default as LethalFantasyArmor } from "./armor.mjs" +export { default as LethalFantasyShield } from "./shield.mjs" 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" diff --git a/module/models/armor.mjs b/module/models/armor.mjs index 4e58dea..00445c4 100644 --- a/module/models/armor.mjs +++ b/module/models/armor.mjs @@ -3,13 +3,17 @@ export default class LethalFantasyArmor extends foundry.abstract.TypeDataModel { static defineSchema() { const fields = foundry.data.fields const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } schema.description = new fields.HTMLField({ required: true, textSearch: true }) - schema.category = new fields.StringField({ required: true, initial: "melee", choices: SYSTEM.ARMOR_CATEGORY }) - schema.protection = new fields.StringField({ - required: true, - initial: "" - }) + schema.armortype = new fields.StringField({ required: true, initial: "light", choices: SYSTEM.ARMOR_TYPE }) + schema.defense = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: -50 }) + schema.movementreduction = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.hp = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.damagereduction = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + + schema.load = new fields.StringField({ required: true, initial: "L" }) + schema.cost = new fields.NumberField({ required: true, initial: 0, min: 0 }) schema.money = new fields.StringField({ required: true, initial: "tinbit", choices: SYSTEM.MONEY }) diff --git a/module/models/equipment.mjs b/module/models/equipment.mjs index 4367335..90aff59 100644 --- a/module/models/equipment.mjs +++ b/module/models/equipment.mjs @@ -7,11 +7,12 @@ export default class LethalFantasyEquipment extends foundry.abstract.TypeDataMod const requiredInteger = { required: true, nullable: false, integer: true } schema.description = new fields.HTMLField({ required: true, textSearch: true }) - schema.category = new fields.StringField({ required: true, initial: "melee", choices: SYSTEM.WEAPON_CATEGORY }) - schema.damages = new fields.StringField({ - required: true, - initial: "" - }) + schema.category = new fields.StringField({ required: true, initial: "tinbit", choices: SYSTEM.EQUIPMENT_CATEGORIES }) + + schema.load = new fields.StringField({ required: true, initial: "L" }) + schema.hi = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.medium = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.lo = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) schema.cost = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) schema.money = new fields.StringField({ required: true, initial: "tinbit", choices: SYSTEM.MONEY }) @@ -21,7 +22,4 @@ export default class LethalFantasyEquipment extends foundry.abstract.TypeDataMod /** @override */ static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Equipment"] - get weaponCategory() { - return game.i18n.localize(CATEGORY[this.category].label) - } } diff --git a/module/models/shield.mjs b/module/models/shield.mjs new file mode 100644 index 0000000..c6f68bb --- /dev/null +++ b/module/models/shield.mjs @@ -0,0 +1,41 @@ +import { SYSTEM } from "../config/system.mjs" +export default class LethalFantasyShield extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields + const schema = {} + const requiredInteger = { required: true, nullable: false, integer: true } + + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + schema.defense = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: -50 }) + schema.movementreduction = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.standing = new fields.SchemaField({ + min: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + max: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + schema.crouching = new fields.SchemaField({ + min: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + max: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + schema.destruction = new fields.SchemaField({ + bashing: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + slashing: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + piercing: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + schema.autodestruction = new fields.SchemaField({ + bashing: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + slashing: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + piercing: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + schema.load = new fields.StringField({ required: true, initial: "L" }) + schema.cost = new fields.NumberField({ required: true, initial: 0, min: 0 }) + schema.money = new fields.StringField({ required: true, initial: "tinbit", choices: SYSTEM.MONEY }) + + return schema + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["LETHALFANTASY.Shield"] + +} diff --git a/module/models/skill.mjs b/module/models/skill.mjs index 8a30feb..8bb2c3c 100644 --- a/module/models/skill.mjs +++ b/module/models/skill.mjs @@ -21,4 +21,47 @@ export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { get skillCategory() { return game.i18n.localize(CATEGORY[this.category].label) } + + prepareDerivedData() { + super.prepareDerivedData(); + this.skillTotal = this.computeBase(); + } + + computeBase() { + let actor = this.parent?.actor; + if (!actor) { + return `${this.base } + ${ String(this.bonus)}`; + } + + // Split the base value per stat : WIS,DEX,STR,INT,CHA (example) + const base = this.base; + let baseSplit = base.split(","); + let baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + // Select the max stat value from the parent actor + let maxStat = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + if (statValue > maxStat) { + maxStat = statValue; + } + } + return maxStat; + } else { + // Split with + calculate the total + baseSplit = base.split("+"); + baseSplitLength = baseSplit.length; + if ( baseSplitLength > 0) { + let total = 0; + for (let i = 0; i < baseSplitLength; i++) { + const stat = baseSplit[i]; + const statValue = actor.system.characteristics[stat.toLowerCase()]?.value || 0; + total += statValue; + } + return total + } + } + return `${this.base } + ${ String(this.bonus)}`; + } } diff --git a/module/models/spell.mjs b/module/models/spell.mjs index bdd82e0..b7fd5aa 100644 --- a/module/models/spell.mjs +++ b/module/models/spell.mjs @@ -18,6 +18,19 @@ export default class LethalFantasySpell extends foundry.abstract.TypeDataModel { max: 20, }) + schema.cost = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.components = new fields.SchemaField({ + verbal: new fields.BooleanField(), + somatic: new fields.BooleanField(), + material: new fields.BooleanField(), + }) + schema.castingTime = new fields.StringField({ required: true, initial: "" }) + schema.range = 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: "" }) + schema.extraAetherPoints = new fields.StringField({ required: true, initial: "" }) + return schema } diff --git a/module/models/weapon.mjs b/module/models/weapon.mjs index d06ff75..ed4d8db 100644 --- a/module/models/weapon.mjs +++ b/module/models/weapon.mjs @@ -7,11 +7,38 @@ export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { const requiredInteger = { required: true, nullable: false, integer: true } schema.description = new fields.HTMLField({ required: true, textSearch: true }) - schema.category = new fields.StringField({ required: true, initial: "melee", choices: SYSTEM.WEAPON_CATEGORY }) - schema.damages = new fields.StringField({ - required: true, - initial: "" + schema.weaponType = new fields.StringField({ required: true, initial: "melee", choices: SYSTEM.WEAPON_TYPE }) + schema.damageType = new fields.SchemaField({ + typeP: new fields.BooleanField(), + typeB: new fields.BooleanField(), + typeS: new fields.BooleanField() }) + schema.damage = new fields.SchemaField({ + damageS: new fields.StringField({required: true, initial: ""}), + damageM: new fields.StringField({required: true, initial: ""}) + }) + schema.hands = new fields.StringField({ required: true, initial: "1", choices: ["1", "2"] }) + + schema.defenseMax = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.secondsToAttack = new fields.StringField({required: true, initial: ""}) + + schema.speed = new fields.SchemaField({ + simpleAim: new fields.StringField({required: true, initial: ""}), + carefulAim: new fields.StringField({required: true, initial: ""}), + focusedAim: new fields.StringField({required: true, initial: ""}) + }) + + schema.defense = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + schema.range = 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 }), + long: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + extreme: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }), + outOfSkill: new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) + }) + + schema.load = new fields.StringField({ required: true, initial: "L" }) schema.cost = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) schema.money = new fields.StringField({ required: true, initial: "tinbit", choices: SYSTEM.MONEY }) diff --git a/styles/equipment.less b/styles/equipment.less new file mode 100644 index 0000000..a2db33b --- /dev/null +++ b/styles/equipment.less @@ -0,0 +1,16 @@ +.equipment-content { + .sheet-common(); + .item-sheet-common(); + + .header { + display: flex; + img { + width: 50px; + height: 50px; + } + } + + label { + flex: 10%; + } +} diff --git a/styles/fvtt-lethal-fantasy.less b/styles/fvtt-lethal-fantasy.less index 0bb175e..5f3a54d 100644 --- a/styles/fvtt-lethal-fantasy.less +++ b/styles/fvtt-lethal-fantasy.less @@ -12,6 +12,8 @@ @import "vulnerability.less"; @import "save.less"; @import "chat.less"; + @import "equipment.less"; + @import "shield.less"; } @import "roll.less"; diff --git a/styles/gift.less b/styles/gift.less index 017a782..c40ad31 100644 --- a/styles/gift.less +++ b/styles/gift.less @@ -1,94 +1,26 @@ -.gifts-content { +.gift-content { .sheet-common(); .item-sheet-common(); - .path-name { + .header { display: flex; - justify-content: space-between; - .control { - margin: 5px; - } img { width: 50px; height: 50px; } } - .path-main { - display: grid; - grid-template-columns: 2fr 2fr 1fr; - - .profil { - display: grid; - grid-template-columns: repeat(2, 1fr); - } - - .profil-gauche, - .profil-droite { - flex: 1; /* Chaque colonne prend la moitié de l'espace disponible */ - padding: 10px; /* Espacement intérieur */ - } - - .profil-gauche { - margin-right: 10px; /* Espace entre les deux colonnes */ - } - - /* Optionnel : supprimer le margin-right sur la dernière colonne si vous avez besoin d'un espacement précis */ - .profil-droite { - margin-right: 0; - } - - .biens { - prose-mirror { - height: 100%; - } - } - - .langues { - prose-mirror { - height: 100%; - } - } - - .description { - prose-mirror.inactive { - min-height: 40px; - } - prose-mirror.active { - min-height: 150px; - } - grid-column: span 3; - } + input[type="checkbox"] { + font-size: var(--font-size-14); + width: 20px; + padding-top: 0; } - .path-talents { - display: grid; - grid-template-columns: repeat(5, 1fr); - gap: 10px; - .talent { - background-color: #f0f0f0; - padding: 5px; - border-radius: 5px; - .header { - display: flex; - justify-content: space-between; - .name { - font-family: var(--font-secondary); - font-size: calc(var(--font-size-standard) * 1.5); - padding-left: 20px; - } - .controls { - font-size: calc(var(--font-size-standard) * 0.8); - } - } - .progression { - display: flex; - justify-content: space-between; - padding-top: 10px; - } - .description { - font-size: calc(var(--font-size-standard) * 1); - } - } + input[type="checkbox"]:checked { + background-color: rgba(0, 0, 0, 0.1); + } + + input[type="checkbox"]:checked::after { + color: rgba(0, 0, 0, 0.1); } } diff --git a/styles/global.less b/styles/global.less index 319f486..6fc97d2 100644 --- a/styles/global.less +++ b/styles/global.less @@ -1,5 +1,5 @@ :root { - --font-size-standard: 0.8125rem; + --font-size-standard: 1.0rem; --background-image-base: url("../assets/parchment.jpg"); --font-secondary: "Amiri", serif; --logo-standard: url("../assets/lethal-fantasy-logo.webp"); @@ -35,7 +35,7 @@ i.lethalfantasy { .application.dialog.lethalfantasy { font-family: var(--font-primary); - font-size: calc(var(--font-size-standard) * 1.2); + font-size: calc(var(--font-size-standard) * 1.0); background-image: var(--background-image-base); button:hover { background: var(--color-dark-6); diff --git a/styles/mixins.less b/styles/mixins.less index 01ec173..c9d4ed1 100644 --- a/styles/mixins.less +++ b/styles/mixins.less @@ -24,13 +24,13 @@ height: 50px; margin-right: 10px; font-family: var(--font-secondary); - font-size: calc(var(--font-size-standard) * 2); + font-size: calc(var(--font-size-standard) * 1); font-weight: bold; border: none; } fieldset { - margin-bottom: 10px; + margin-bottom: 5px; border-radius: 5px; } @@ -38,17 +38,17 @@ input, select { text-align: center; - font-size: calc(var(--font-size-standard) * 1.4); + font-size: calc(var(--font-size-standard) * 1.0); } select { font-family: var(--font-secondary); - font-size: calc(var(--font-size-standard) * 1.4); + font-size: calc(var(--font-size-standard) * 1.0); } } legend { font-family: var(--font-secondary); - font-size: calc(var(--font-size-standard) * 1.6); + font-size: calc(var(--font-size-standard) * 1.2); font-weight: bold; letter-spacing: 1px; } @@ -57,7 +57,7 @@ .character-sheet-common { label { font-family: var(--font-secondary); - font-size: calc(var(--font-size-standard) * 1.4); + font-size: calc(var(--font-size-standard) * 1.2); } } @@ -68,7 +68,21 @@ label { font-family: var(--font-secondary); - font-size: calc(var(--font-size-standard) * 1.6); + font-size: calc(var(--font-size-standard) * 1.0); flex: 50%; } + + .align-top { + align-self: flex-start; + padding: 0.1rem; + margin-right: 0.2rem; + /*border-color: black; + border-width: 1px; + border-style: solid; + border-radius: 2%;*/ + } + + .shift-right { + margin-left: 2rem; + } } diff --git a/styles/shield.less b/styles/shield.less new file mode 100644 index 0000000..a04deaf --- /dev/null +++ b/styles/shield.less @@ -0,0 +1,16 @@ +.shield-content { + .sheet-common(); + .item-sheet-common(); + + .header { + display: flex; + img { + width: 50px; + height: 50px; + } + } + + label { + flex: 10%; + } +} diff --git a/styles/spell.less b/styles/spell.less index a80c4cb..55deea9 100644 --- a/styles/spell.less +++ b/styles/spell.less @@ -14,8 +14,5 @@ flex: 10%; } - input[name="system.consequenceA"], input[name="system.consequenceB"] { - font-size: calc(var(--font-size-standard) * 1.2); - } } \ No newline at end of file diff --git a/system.json b/system.json index dfd3d86..bd8b516 100644 --- a/system.json +++ b/system.json @@ -38,7 +38,9 @@ "save": { "htmlFields": ["description"] }, "weapon": { "htmlFields": ["description"] }, "armor": { "htmlFields": ["description"] }, - "spell": { "htmlFields": ["description"] } + "shield": { "htmlFields": ["description"] }, + "spell": { "htmlFields": ["description"] }, + "equipment": { "htmlFields": ["description"] } } }, "grid": { diff --git a/templates/armor.hbs b/templates/armor.hbs index f56f95d..7ab06b3 100644 --- a/templates/armor.hbs +++ b/templates/armor.hbs @@ -4,14 +4,21 @@ {{formInput fields.name value=source.name}} - {{formField systemFields.category value=system.category localize=true}} - {{formField systemFields.valeur value=system.valeur}} - {{formField systemFields.malus value=system.malus}} + {{formField systemFields.armortype value=system.armortype localize=true}} + {{formField systemFields.defense value=system.defense}} + {{formField systemFields.movementreduction value=system.movementreduction}} + {{formField systemFields.hp value=system.hp}} + {{formField systemFields.damagereduction value=system.damagereduction}} + {{formField systemFields.load value=system.load}} + + {{formField systemFields.cost value=system.cost}} + {{formField systemFields.money value=system.money localize=true}} +
- {{localize "TENEBRIS.Label.description"}} + {{localize "LETHALFANTASY.Label.description"}} {{formInput systemFields.description - enriched=enrichedDescription + enriched=description value=system.description name="system.description" toggled="false" diff --git a/templates/equipment.hbs b/templates/equipment.hbs new file mode 100644 index 0000000..7569353 --- /dev/null +++ b/templates/equipment.hbs @@ -0,0 +1,14 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ {{formField systemFields.cost value=system.cost}} + {{formField systemFields.money value=system.money localize=true}} + +
+ {{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/gift.hbs b/templates/gift.hbs index ad8e816..05d11bb 100644 --- a/templates/gift.hbs +++ b/templates/gift.hbs @@ -3,14 +3,10 @@ {{formInput fields.name value=source.name}} - {{formField systemFields.appris value=system.appris}} - {{formField systemFields.progression value=system.progression}} - {{#if canProgress}} - {{formField systemFields.niveau value=system.niveau }} - {{/if}}wwww + {{formField systemFields.cost value=system.cost}}
- {{localize "TENEBRIS.Label.description"}} + {{localize "LETHALFANTASY.Label.description"}} {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}}
diff --git a/templates/save.hbs b/templates/save.hbs new file mode 100644 index 0000000..3163aa7 --- /dev/null +++ b/templates/save.hbs @@ -0,0 +1,13 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ {{formField systemFields.value value=system.value}} + +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} +
+ +
\ No newline at end of file diff --git a/templates/shield.hbs b/templates/shield.hbs new file mode 100644 index 0000000..c1062a3 --- /dev/null +++ b/templates/shield.hbs @@ -0,0 +1,59 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ +
+
+ {{formField systemFields.defense value=system.defense}} + {{formField systemFields.movementreduction value=system.movementreduction}} + + +
+ {{formField systemFields.standing.fields.min value=system.standing.min}} + {{formField systemFields.standing.fields.max value=system.standing.min}} +
+ + +
+ {{formField systemFields.crouching.fields.min value=system.crouching.min}} + {{formField systemFields.crouching.fields.max value=system.crouching.min}} +
+
+ +
+ +
+ {{formField systemFields.destruction.fields.bashing value=system.destruction.bashing}} + {{formField systemFields.destruction.fields.slashing value=system.destruction.slashing}} + {{formField systemFields.destruction.fields.piercing value=system.destruction.piercing}} +
+ + +
+ {{formField systemFields.autodestruction.fields.bashing value=system.autodestruction.bashing}} + {{formField systemFields.autodestruction.fields.slashing value=system.autodestruction.slashing}} + {{formField systemFields.autodestruction.fields.piercing value=system.autodestruction.piercing}} +
+ + {{formField systemFields.load value=system.load}} + + {{formField systemFields.cost value=system.cost}} + {{formField systemFields.money value=system.money localize=true}} + +
+
+ + +
+ {{localize "LETHALFANTASY.Label.description"}} + {{formInput + systemFields.description + enriched=description + value=system.description + name="system.description" + toggled="false" + }} +
+
\ No newline at end of file diff --git a/templates/skill.hbs b/templates/skill.hbs index f6cc02f..fa9ba8e 100644 --- a/templates/skill.hbs +++ b/templates/skill.hbs @@ -3,7 +3,15 @@ {{formInput fields.name value=source.name}} + {{formField systemFields.category value=system.category localize=true}} + {{formField systemFields.base value=system.base}} {{formField systemFields.bonus value=system.bonus}} + {{formField systemFields.cost value=system.cost}} + +
+ {{localize "LETHALFANTASY.Label.total"}} + {{system.skillTotal}} +
{{localize "LETHALFANTASY.Label.description"}} diff --git a/templates/spell.hbs b/templates/spell.hbs index 54d001f..3292be6 100644 --- a/templates/spell.hbs +++ b/templates/spell.hbs @@ -4,16 +4,26 @@ {{formInput fields.name value=source.name}} - {{formField systemFields.preparation value=system.preparation}} - {{formField systemFields.cible value=system.cible}} - {{formField systemFields.portee value=system.portee localize=true}} - {{formField systemFields.duree value=system.duree}} - {{formField systemFields.consequenceA value=system.consequenceA}} - {{formField systemFields.consequenceB value=system.consequenceB}} + {{formField systemFields.level value=system.level}} + {{formField systemFields.cost value=system.cost}} + + +
+ {{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.castingTime value=system.castingTime}} + {{formField systemFields.range value=system.range}} + {{formField systemFields.areaAffected value=system.areaAffected}} + {{formField systemFields.duration value=system.duration}} + {{formField systemFields.savingThrow value=system.savingThrow}} + {{formField systemFields.extraAetherPoints value=system.extraAetherPoints}}
- {{localize "TENEBRIS.Label.description"}} - {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} + {{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/vulnerability.hbs b/templates/vulnerability.hbs index 639b862..5a5ef93 100644 --- a/templates/vulnerability.hbs +++ b/templates/vulnerability.hbs @@ -3,15 +3,11 @@ {{formInput fields.name value=source.name}} - {{formField systemFields.appris value=system.appris}} - {{formField systemFields.progression value=system.progression}} - {{#if canProgress}} - {{formField systemFields.niveau value=system.niveau }} - {{/if}} + {{formField systemFields.cost value=system.cost}}
- {{localize "TENEBRIS.Label.description"}} - {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} + {{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/weapon.hbs b/templates/weapon.hbs index 88fc736..ef188e2 100644 --- a/templates/weapon.hbs +++ b/templates/weapon.hbs @@ -2,18 +2,73 @@
{{formInput fields.name value=source.name}} -
+ + +
+
+ + {{formField systemFields.weaponType value=system.weaponType 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.damage.fields.damageS value=system.standing.damageS}} + {{formField systemFields.damage.fields.damageM value=system.standing.damageM}} +
+ + {{formField systemFields.hands value=system.hands localize=true}} + + {{#if (eq system.weaponType "melee")}} + {{formField systemFields.defenseMax value=system.defenseMax}} + {{formField systemFields.secondsToAttack value=system.secondsToAttack}} + {{/if}} + + {{#if (eq system.weaponType "ranged")}} + +
+ {{formField systemFields.speed.fields.simpleAim value=system.speed.simpleAim}} + {{formField systemFields.speed.fields.carefulAim value=system.speed.carefulAim}} + {{formField systemFields.speed.fields.focusedAim value=system.speed.focusedAim}} +
+ {{/if}} +
+
+ {{#if (eq system.weaponType "ranged")}} + + {{formField systemFields.defense value=system.defense}} + + +
+ {{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}} +
+ {{/if}} + + {{formField systemFields.load value=system.load}} + + {{formField systemFields.cost value=system.cost}} + {{formField systemFields.money value=system.money localize=true}} +
+
- {{formField systemFields.categorie value=system.categorie localize=true}} - {{formField systemFields.degats value=system.degats}}
- {{localize "TENEBRIS.Label.description"}} + {{localize "LETHALFANTASY.Label.description"}} {{formInput - systemFields.description - enriched=enrichedDescription - value=system.description - name="system.description" - toggled=true + systemFields.description + enriched=description + value=system.description + name="system.description" + toggled=true }}
\ No newline at end of file