Add Enemy sheet

This commit is contained in:
2025-05-25 17:41:32 +02:00
parent ff180ddd2e
commit 973daae15a
46 changed files with 1014 additions and 1828 deletions

View File

@@ -15,13 +15,17 @@
--font-title: "SupernaturalKnight"; --font-title: "SupernaturalKnight";
--logo-standard: url("../assets/ui/pentagram_logo.webp"); --logo-standard: url("../assets/ui/pentagram_logo.webp");
--title-color: #f0443c; --title-color: #f0443c;
--background-box: ##e0dcdc; --background-box: #e0dcdc;
--color-success: #0f7a0f; --color-success: #0f7a0f;
--color-failure: darkred; --color-failure: darkred;
--color-warning: darkorange; --color-warning: darkorange;
--color-critical-success: #1527cc; --color-critical-success: #1527cc;
--color-critical-failure: #8d20e7; --color-critical-failure: #8d20e7;
} }
body {
--color-light-1: rgba(182, 178, 178, 0.6);
--color-warm-1: #f0443c;
}
#logo { #logo {
content: var(--logo-standard); content: var(--logo-standard);
width: 100px; width: 100px;
@@ -82,7 +86,7 @@ i.fvtt-hellborn {
font-family: var(--font-secondary); font-family: var(--font-secondary);
font-size: calc(var(--font-size-standard) * 1); font-size: calc(var(--font-size-standard) * 1);
} }
.fvtt-hellborn .creature-sheet-common label { .fvtt-hellborn .enemy-sheet-common label {
font-family: var(--font-secondary); font-family: var(--font-secondary);
font-size: calc(var(--font-size-standard) * 1); font-size: calc(var(--font-size-standard) * 1);
} }
@@ -322,6 +326,9 @@ i.fvtt-hellborn {
min-width: 4rem; min-width: 4rem;
max-width: 4rem; max-width: 4rem;
} }
.fvtt-hellborn .tab.character-status .main-div .counters .spaced-left {
margin-left: 0.8rem;
}
.fvtt-hellborn .tab.character-status .main-div .counters input { .fvtt-hellborn .tab.character-status .main-div .counters input {
min-width: 2.5rem; min-width: 2.5rem;
max-width: 2.5rem; max-width: 2.5rem;
@@ -490,10 +497,6 @@ i.fvtt-hellborn {
display: flex; display: flex;
flex-direction: row; flex-direction: row;
} }
.fvtt-hellborn .tab.character-equipment .main-div .limboes .limboes-layout {
display: flex;
flex-direction: column;
}
.fvtt-hellborn .tab.character-equipment .main-div .limboes .limboes-line { .fvtt-hellborn .tab.character-equipment .main-div .limboes .limboes-line {
display: flex; display: flex;
flex-direction: row; flex-direction: row;
@@ -504,13 +507,18 @@ i.fvtt-hellborn {
align-items: center; align-items: center;
gap: 4px; gap: 4px;
margin-left: 4px; margin-left: 4px;
min-width: 14rem; min-width: 6rem;
max-width: 14rem; max-width: 6rem;
}
.fvtt-hellborn .tab.character-equipment .main-div .limboes .ammo-quantity {
text-align: left;
max-width: 3rem;
min-width: 3rem;
} }
.fvtt-hellborn .tab.character-equipment .main-div .limboes input { .fvtt-hellborn .tab.character-equipment .main-div .limboes input {
text-align: left; text-align: left;
min-width: 6rem; min-width: 8rem;
max-width: 6rem; max-width: 8rem;
} }
.fvtt-hellborn .tab.character-equipment .main-div .weapons { .fvtt-hellborn .tab.character-equipment .main-div .weapons {
display: grid; display: grid;
@@ -972,7 +980,7 @@ i.fvtt-hellborn {
.fvtt-hellborn .tab.vehicle-equipment prose-mirror.active { .fvtt-hellborn .tab.vehicle-equipment prose-mirror.active {
min-height: 150px; min-height: 150px;
} }
.fvtt-hellborn .creature-content { .fvtt-hellborn .enemy-content {
font-family: var(--font-primary); font-family: var(--font-primary);
font-size: calc(var(--font-size-standard) * 1); font-size: calc(var(--font-size-standard) * 1);
color: var(--color-dark-1); color: var(--color-dark-1);
@@ -981,19 +989,19 @@ i.fvtt-hellborn {
background-size: 100% 100%; background-size: 100% 100%;
overflow: scroll; overflow: scroll;
} }
.fvtt-hellborn .creature-content input:disabled, .fvtt-hellborn .enemy-content input:disabled,
.fvtt-hellborn .creature-content select:disabled { .fvtt-hellborn .enemy-content select:disabled {
background-color: rgba(0, 0, 0, 0.2); background-color: rgba(0, 0, 0, 0.2);
border-color: transparent; border-color: transparent;
color: var(--color-dark-3); color: var(--color-dark-3);
} }
.fvtt-hellborn .creature-content input, .fvtt-hellborn .enemy-content input,
.fvtt-hellborn .creature-content select { .fvtt-hellborn .enemy-content select {
background-color: rgba(0, 0, 0, 0.1); background-color: rgba(0, 0, 0, 0.1);
border-color: var(--color-dark-6); border-color: var(--color-dark-6);
color: var(--color-dark-2); color: var(--color-dark-2);
} }
.fvtt-hellborn .creature-content input[name="name"] { .fvtt-hellborn .enemy-content input[name="name"] {
height: 40px; height: 40px;
margin-right: 10px; margin-right: 10px;
font-family: var(--font-title); font-family: var(--font-title);
@@ -1002,669 +1010,373 @@ i.fvtt-hellborn {
border: none; border: none;
margin-top: 4px; margin-top: 4px;
} }
.fvtt-hellborn .creature-content fieldset { .fvtt-hellborn .enemy-content fieldset {
margin-bottom: 4px; margin-bottom: 4px;
border-radius: 4px; border-radius: 4px;
} }
.fvtt-hellborn .creature-content .form-fields input, .fvtt-hellborn .enemy-content .form-fields input,
.fvtt-hellborn .creature-content .form-fields select { .fvtt-hellborn .enemy-content .form-fields select {
text-align: center; text-align: center;
font-size: calc(var(--font-size-standard) * 1); font-size: calc(var(--font-size-standard) * 1);
} }
.fvtt-hellborn .creature-content .form-fields select { .fvtt-hellborn .enemy-content .form-fields select {
font-family: var(--font-secondary); font-family: var(--font-secondary);
font-size: calc(var(--font-size-standard) * 1); font-size: calc(var(--font-size-standard) * 1);
} }
.fvtt-hellborn .creature-content legend { .fvtt-hellborn .enemy-content legend {
font-family: var(--font-secondary); font-family: var(--font-secondary);
font-size: calc(var(--font-size-standard) * 1.2); font-size: calc(var(--font-size-standard) * 1.2);
font-weight: bold; font-weight: bold;
letter-spacing: 1px; letter-spacing: 1px;
} }
.fvtt-hellborn .creature-content label { .fvtt-hellborn .enemy-content label {
font-family: var(--font-secondary); font-family: var(--font-secondary);
font-size: calc(var(--font-size-standard) * 1); font-size: calc(var(--font-size-standard) * 1);
} }
.fvtt-hellborn .sheet-tabs { .fvtt-hellborn .sheet-tabs {
background-color: var(--color-light-1); background-color: var(--color-light-1);
} }
.fvtt-hellborn .creature-main { .fvtt-hellborn .enemy-main {
background-color: var(--color-light-1); /*background-color: var(--color-light-1);*/
display: flex; display: flex;
} }
.fvtt-hellborn .creature-main .creature-pc { .fvtt-hellborn .enemy-main .enemy-pc {
display: flex; display: flex;
gap: 4px; gap: 4px;
flex: 1; flex: 1;
} }
.fvtt-hellborn .creature-main .creature-pc .creature-left { .fvtt-hellborn .enemy-main .enemy-pc .enemy-left {
min-width: 180px; min-width: 180px;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
} }
.fvtt-hellborn .creature-main .creature-pc .creature-left .creature-left-image { .fvtt-hellborn .enemy-main .enemy-pc .enemy-left .enemy-left-image {
display: flex; display: flex;
justify-content: center; justify-content: center;
align-items: center; align-items: center;
padding-bottom: 8px; padding-bottom: 8px;
} }
.fvtt-hellborn .creature-main .creature-pc .creature-left .creature-left-image .creature-img { .fvtt-hellborn .enemy-main .enemy-pc .enemy-left .enemy-left-image .enemy-img {
height: 140px; height: 140px;
width: auto; width: auto;
border: none; border: none;
} }
.fvtt-hellborn .creature-main .creature-pc .creature-left .creature-hp { .fvtt-hellborn .enemy-main .enemy-pc .enemy-left .enemy-hp {
gap: 2px; gap: 2px;
align-items: center; align-items: center;
} }
.fvtt-hellborn .creature-main .creature-pc .creature-left .creature-hp input { .fvtt-hellborn .enemy-main .enemy-pc .enemy-left .enemy-hp input {
flex: none; flex: none;
width: 2.5rem; width: 2.5rem;
margin-left: 2px; margin-left: 2px;
margin-right: 4px; margin-right: 4px;
} }
.fvtt-hellborn .creature-main .creature-pc .creature-left .creature-hp .hp-separator { .fvtt-hellborn .enemy-main .enemy-pc .enemy-left .enemy-hp .hp-separator {
font-size: calc(var(--font-size-standard) * 1.2); font-size: calc(var(--font-size-standard) * 1.2);
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
} }
.fvtt-hellborn .creature-main .creature-pc .creature-left .creature-dv .form-fields, .fvtt-hellborn .enemy-main .enemy-pc .enemy-left .enemy-dv .form-fields,
.fvtt-hellborn .creature-main .creature-pc .creature-left .creature-dmax .form-fields { .fvtt-hellborn .enemy-main .enemy-pc .enemy-left .enemy-dmax .form-fields {
flex: none; flex: none;
} }
.fvtt-hellborn .creature-main .creature-pc .creature-left .creature-dmax-edit input { .fvtt-hellborn .enemy-main .enemy-pc .enemy-right {
display: flex;
width: 60px;
font-size: calc(var(--font-size-standard) * 1.4);
align-items: center;
justify-content: center;
padding: 0 5px 0 5px;
text-align: center;
}
.fvtt-hellborn .creature-main .creature-pc .creature-right {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
gap: 5px; gap: 5px;
} }
.fvtt-hellborn .creature-main .creature-pc .creature-right .creature-spec label { .fvtt-hellborn .enemy-main .enemy-pc .enemy-right .enemy-definition .form-group {
max-width: 8rem; display: flex;
align-items: center;
margin-bottom: 4px;
} }
.fvtt-hellborn .creature-main .creature-pc .creature-right .creature-spec select { .fvtt-hellborn .enemy-main .enemy-pc .enemy-right .enemy-definition .splitted {
max-width: 10rem; display: flex;
flex-direction: row;
gap: 4px;
} }
.fvtt-hellborn .creature-main .creature-pc .creature-right .creature-spec input { .fvtt-hellborn .enemy-main .enemy-pc .enemy-right .enemy-definition label {
max-width: 6rem; max-width: 5rem;
min-width: 5rem;
} }
.fvtt-hellborn .creature-main .creature-pc .creature-right .creature-spec .dice-2d6 { .fvtt-hellborn .enemy-main .enemy-pc .enemy-right .enemy-definition input {
max-width: 1.5rem; text-align: left;
min-width: 18rem;
max-width: 18rem;
margin-bottom: auto;
} }
.fvtt-hellborn .creature-main .creature-pc .creature-right .creature-spec .rollable:hover, .fvtt-hellborn .enemy-main .enemy-pc .enemy-right .enemy-definition .trait {
.fvtt-hellborn .creature-main .creature-pc .creature-right .creature-spec .rollable:focus { min-width: 7rem;
text-shadow: 0 0 8px var(--color-shadow-primary); max-width: 7rem;
cursor: pointer; margin-right: 1rem;
margin-bottom: auto;
} }
.fvtt-hellborn .creature-main .creature-pc .creature-right .creature-name { .fvtt-hellborn .enemy-main .enemy-pc .enemy-right .enemy-name {
display: flex; display: flex;
} }
.fvtt-hellborn .creature-main .creature-pc .creature-right .creature-name input { .fvtt-hellborn .enemy-main .enemy-pc .enemy-right .enemy-name input {
font-family: var(--font-title); font-family: var(--font-title);
font-size: var(--font-size-title); font-size: var(--font-size-title);
width: 400px; width: 400px;
} }
.fvtt-hellborn .creature-main .creature-pc .creature-right label { .fvtt-hellborn .enemy-main .enemy-pc .enemy-right label {
min-width: 120px; min-width: 120px;
} }
.fvtt-hellborn .creature-main .creature-pc-play { .fvtt-hellborn .enemy-main .enemy-pc-play {
min-width: 500px; min-width: 500px;
} }
.fvtt-hellborn .creature-main .creature-pc-edit { .fvtt-hellborn .enemy-main .enemy-pc-edit {
min-width: 500px; min-width: 500px;
} }
.fvtt-hellborn .creature-main .creature-skills { .fvtt-hellborn .enemy-main .enemy-stats {
background-color: var(--color-light-1); /*background-color: var(--color-light-1);*/
display: flex; display: flex;
flex-direction: column; flex-direction: column;
gap: 5px; gap: 5px;
flex: 1; flex: 1;
} }
.fvtt-hellborn .creature-main .creature-skills .creature-skill { .fvtt-hellborn .enemy-main .enemy-stats .enemy-stat {
display: flex; display: flex;
align-items: center; align-items: center;
} }
.fvtt-hellborn .creature-main .creature-skills .creature-skill .icon-skill { .fvtt-hellborn .enemy-main .enemy-stats .enemy-stat .icon-stat {
width: 24px; width: 24px;
height: 24px; height: 24px;
margin-right: 4px; margin-right: 4px;
} }
.fvtt-hellborn .creature-main .creature-skills .creature-skill .rollable:hover, .fvtt-hellborn .enemy-main .enemy-stats .enemy-stat .rollable:hover,
.fvtt-hellborn .creature-main .creature-skills .creature-skill .rollable:focus { .fvtt-hellborn .enemy-main .enemy-stats .enemy-stat .rollable:focus {
text-shadow: 0 0 8px var(--color-shadow-primary); text-shadow: 0 0 8px var(--color-shadow-primary);
cursor: pointer; cursor: pointer;
} }
.fvtt-hellborn .creature-main .creature-skills .creature-skill .rollable { .fvtt-hellborn .enemy-main .enemy-stats .enemy-stat .rollable {
min-width: 4.5rem; min-width: 3.5rem;
max-width: 4.5rem; max-width: 3.5rem;
} }
.fvtt-hellborn .creature-main .creature-skills .creature-skill .char-text { .fvtt-hellborn .enemy-main .enemy-stats .enemy-stat input {
margin-left: 0.5rem; min-width: 2.5rem;
max-width: 2.5rem;
} }
.fvtt-hellborn .creature-main .creature-skills .creature-skill .d100 { .fvtt-hellborn .enemy-main .enemy-stats-play {
flex: 0; min-width: 120px;
max-width: 0.6rem;
} }
.fvtt-hellborn .creature-main .creature-skills .creature-skill .form-group { .fvtt-hellborn .enemy-main .enemy-stats-edit {
flex: 0; min-width: 120px;
padding-left: 5px;
} }
.fvtt-hellborn .creature-main .creature-skills .creature-skill .form-group .form-fields { .fvtt-hellborn .tab.enemy-traits .main-div {
font-size: 1.1rem; /*background-color: var(--color-light-1);*/
flex: none;
width: 40px;
}
.fvtt-hellborn .creature-main .creature-skill-play {
min-width: 225px;
}
.fvtt-hellborn .creature-main .creature-skill-edit {
min-width: 225px;
}
.fvtt-hellborn .creature-biography {
background-color: var(--color-light-1);
}
.fvtt-hellborn .creature-biography prose-mirror.inactive {
min-height: 40px;
}
.fvtt-hellborn .creature-biography prose-mirror.active {
min-height: 150px;
}
.fvtt-hellborn .creature-biography .field-label {
margin-left: 8px;
}
.fvtt-hellborn .creature-biography .rank {
display: grid;
grid-template-columns: repeat(5, 1fr);
gap: 8px;
}
.fvtt-hellborn .creature-biography .rank label {
min-width: 6rem;
}
.fvtt-hellborn .creature-biography .rank input {
max-width: 4rem;
}
.fvtt-hellborn .creature-biography .biodata {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 8px;
}
.fvtt-hellborn .creature-biography .biodata label {
min-width: 12rem;
}
.fvtt-hellborn .creature-biography .resources {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 8px;
}
.fvtt-hellborn .creature-biography .resources label {
min-width: 8rem;
}
.fvtt-hellborn .creature-biography .features,
.fvtt-hellborn .creature-biography .biodata {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 8px;
}
.fvtt-hellborn .creature-biography .features label,
.fvtt-hellborn .creature-biography .biodata label {
min-width: 3rem;
}
.fvtt-hellborn .creature-biography .features .feature,
.fvtt-hellborn .creature-biography .biodata .feature {
display: flex;
align-items: center;
gap: 4px;
min-width: 18rem;
max-width: 18rem;
}
.fvtt-hellborn .tab.creature-skills {
background-color: var(--color-light-1);
display: grid; display: grid;
grid-template-columns: 1fr; grid-template-columns: 1fr;
} }
.fvtt-hellborn .tab.creature-skills legend a { .fvtt-hellborn .tab.enemy-traits .main-div legend a {
font-size: calc(var(--font-size-standard) * 1.4); font-size: calc(var(--font-size-standard) * 1.4);
padding-left: 5px; padding-left: 5px;
} }
.fvtt-hellborn .tab.creature-skills .skills { .fvtt-hellborn .tab.enemy-traits .main-div .mortality {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 4px;
}
.fvtt-hellborn .tab.creature-skills .skills .skill {
display: flex; display: flex;
align-items: center; align-items: center;
gap: 4px; gap: 4px;
margin-left: 4px; margin-left: 4px;
min-width: 12.3rem;
max-width: 12.3rem;
}
.fvtt-hellborn .tab.creature-skills .skills .skill .rollable:hover,
.fvtt-hellborn .tab.creature-skills .skills .skill .rollable:focus {
text-shadow: 0 0 8px var(--color-shadow-primary);
cursor: pointer;
}
.fvtt-hellborn .tab.creature-skills .skills .skill .controls {
font-size: 0.7rem;
min-width: 1.8rem;
max-width: 1.8rem;
}
.fvtt-hellborn .tab.creature-skills .skills .skill .score {
min-width: 1.2rem;
max-width: 1.2rem;
}
.fvtt-hellborn .tab.creature-skills .skills .skill .name {
min-width: 10rem;
max-width: 10rem;
}
.fvtt-hellborn .tab.creature-skills .skills .skill .item-img {
width: 24px;
height: 24px;
margin: 4px 0 0 0;
}
.fvtt-hellborn .tab.creature-status {
background-color: var(--color-light-1);
display: grid;
grid-template-columns: 1fr;
}
.fvtt-hellborn .tab.creature-status legend a {
font-size: calc(var(--font-size-standard) * 1.4);
padding-left: 5px;
}
.fvtt-hellborn .tab.creature-status .bonds {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 4px;
}
.fvtt-hellborn .tab.creature-status .bonds .bond {
display: flex;
align-items: center;
gap: 4px;
min-width: 18rem;
max-width: 18rem;
}
.fvtt-hellborn .tab.creature-status .bonds .bond .controls {
font-size: 0.7rem;
min-width: 1.8rem;
max-width: 1.8rem;
}
.fvtt-hellborn .tab.creature-status .bonds .bond .name {
min-width: 12rem; min-width: 12rem;
max-width: 12rem; max-width: 12rem;
} }
.fvtt-hellborn .tab.creature-status .bonds .bond .type { .fvtt-hellborn .tab.enemy-traits .main-div .mortality label {
min-width: 6rem;
max-width: 6rem;
}
.fvtt-hellborn .tab.creature-status .bonds .bond .level {
min-width: 2rem;
max-width: 2rem;
}
.fvtt-hellborn .tab.creature-status .bonds .bond .item-img {
width: 24px;
height: 24px;
margin: 4px 0 0 0;
}
.fvtt-hellborn .tab.creature-status .motivations {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 4px;
}
.fvtt-hellborn .tab.creature-status .motivations .motivation {
display: flex;
align-items: center;
gap: 4px;
min-width: 14rem;
max-width: 14rem;
}
.fvtt-hellborn .tab.creature-status .motivations .motivation .controls {
font-size: 0.7rem;
min-width: 1.8rem;
max-width: 1.8rem;
}
.fvtt-hellborn .tab.creature-status .motivations .motivation .name {
min-width: 12rem;
max-width: 12rem;
}
.fvtt-hellborn .tab.creature-status .motivations .motivation .item-img {
width: 24px;
height: 24px;
margin: 4px 0 0 0;
}
.fvtt-hellborn .tab.creature-status .mentaldisorders {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 4px;
}
.fvtt-hellborn .tab.creature-status .mentaldisorders .mentaldisorder {
display: flex;
align-items: center;
gap: 4px;
min-width: 18rem;
max-width: 18rem;
}
.fvtt-hellborn .tab.creature-status .mentaldisorders .mentaldisorder .controls {
font-size: 0.7rem;
min-width: 1.8rem;
max-width: 1.8rem;
}
.fvtt-hellborn .tab.creature-status .mentaldisorders .mentaldisorder .name {
min-width: 14rem;
max-width: 14rem;
}
.fvtt-hellborn .tab.creature-status .mentaldisorders .mentaldisorder .cured {
min-width: 5rem; min-width: 5rem;
max-width: 5rem; max-width: 5rem;
} }
.fvtt-hellborn .tab.creature-status .mentaldisorders .mentaldisorder .item-img { .fvtt-hellborn .tab.enemy-traits .main-div .counters {
width: 24px;
height: 24px;
margin: 4px 0 0 0;
}
.fvtt-hellborn .tab.creature-status .injuries {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 4px;
}
.fvtt-hellborn .tab.creature-status .injuries .injury {
display: flex; display: flex;
direction: column;
align-items: center; align-items: center;
gap: 4px; gap: 4px;
min-width: 16rem; margin-left: 4px;
max-width: 16rem;
} }
.fvtt-hellborn .tab.creature-status .injuries .injury .controls { .fvtt-hellborn .tab.enemy-traits .main-div .counters .characteristics-label {
font-size: 0.7rem; color: grey;
min-width: 1.8rem; font-size: small;
max-width: 1.8rem;
} }
.fvtt-hellborn .tab.creature-status .injuries .injury .name { .fvtt-hellborn .tab.enemy-traits .main-div .counters label {
min-width: 14rem; min-width: 4rem;
max-width: 14rem;
}
.fvtt-hellborn .tab.creature-status .injuries .injury .item-img {
width: 24px;
height: 24px;
margin: 4px 0 0 0;
}
.fvtt-hellborn .tab.creature-traits {
background-color: var(--color-light-1);
display: grid;
grid-template-columns: 1fr;
}
.fvtt-hellborn .tab.creature-traits legend a {
font-size: calc(var(--font-size-standard) * 1.4);
padding-left: 5px;
}
.fvtt-hellborn .tab.creature-traits .traits {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 4px;
}
.fvtt-hellborn .tab.creature-traits .traits .trait {
display: flex;
align-items: center;
gap: 4px;
min-width: 13rem;
max-width: 13rem;
}
.fvtt-hellborn .tab.creature-traits .traits .trait .rollable:hover,
.fvtt-hellborn .tab.creature-traits .traits .trait .rollable:focus {
text-shadow: 0 0 8px var(--color-shadow-primary);
cursor: pointer;
}
.fvtt-hellborn .tab.creature-traits .traits .trait .controls {
font-size: 0.7rem;
min-width: 1.8rem;
max-width: 1.8rem;
}
.fvtt-hellborn .tab.creature-traits .traits .trait .damage {
min-width: 6rem;
max-width: 6rem;
}
.fvtt-hellborn .tab.creature-traits .traits .trait .name {
min-width: 10rem;
max-width: 10rem;
}
.fvtt-hellborn .tab.creature-traits .traits .trait .item-img {
width: 24px;
height: 24px;
margin: 4px 0 0 0;
}
.fvtt-hellborn .tab.creature-traits .abilities {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 4px;
}
.fvtt-hellborn .tab.creature-traits .abilities .ability {
display: flex;
align-items: center;
gap: 4px;
min-width: 13rem;
max-width: 13rem;
}
.fvtt-hellborn .tab.creature-traits .abilities .ability .rollable:hover,
.fvtt-hellborn .tab.creature-traits .abilities .ability .rollable:focus {
text-shadow: 0 0 8px var(--color-shadow-primary);
cursor: pointer;
}
.fvtt-hellborn .tab.creature-traits .abilities .ability .controls {
font-size: 0.7rem;
min-width: 1.8rem;
max-width: 1.8rem;
}
.fvtt-hellborn .tab.creature-traits .abilities .ability .damage {
min-width: 6rem;
max-width: 6rem;
}
.fvtt-hellborn .tab.creature-traits .abilities .ability .name {
min-width: 10rem;
max-width: 10rem;
}
.fvtt-hellborn .tab.creature-traits .abilities .ability .item-img {
width: 24px;
height: 24px;
margin: 4px 0 0 0;
}
.fvtt-hellborn .tab.creature-traits .psionics {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 4px;
}
.fvtt-hellborn .tab.creature-traits .psionics .psionic {
display: flex;
align-items: center;
gap: 4px;
min-width: 13rem;
max-width: 13rem;
}
.fvtt-hellborn .tab.creature-traits .psionics .psionic .rollable:hover,
.fvtt-hellborn .tab.creature-traits .psionics .psionic .rollable:focus {
text-shadow: 0 0 8px var(--color-shadow-primary);
cursor: pointer;
}
.fvtt-hellborn .tab.creature-traits .psionics .psionic .controls {
font-size: 0.7rem;
min-width: 1.8rem;
max-width: 1.8rem;
}
.fvtt-hellborn .tab.creature-traits .psionics .psionic .damage {
min-width: 6rem;
max-width: 6rem;
}
.fvtt-hellborn .tab.creature-traits .psionics .psionic .name {
min-width: 10rem;
max-width: 10rem;
}
.fvtt-hellborn .tab.creature-traits .psionics .psionic .item-img {
width: 24px;
height: 24px;
margin: 4px 0 0 0;
}
.fvtt-hellborn .tab.creature-equipment {
background-color: var(--color-light-1);
display: grid;
grid-template-columns: 1fr;
}
.fvtt-hellborn .tab.creature-equipment legend a {
font-size: calc(var(--font-size-standard) * 1.4);
padding-left: 5px;
}
.fvtt-hellborn .tab.creature-equipment .encumbrance {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 4px;
}
.fvtt-hellborn .tab.creature-equipment .encumbrance input {
max-width: 4rem; max-width: 4rem;
} }
.fvtt-hellborn .tab.creature-equipment .encumbrance .encumbered { .fvtt-hellborn .tab.enemy-traits .main-div .counters .spaced-left {
color: red; margin-left: 0.8rem;
font-weight: bold;
} }
.fvtt-hellborn .tab.creature-equipment .implants { .fvtt-hellborn .tab.enemy-traits .main-div .counters input {
min-width: 2.5rem;
max-width: 2.5rem;
}
.fvtt-hellborn .tab.enemy-traits .main-div .traits {
display: grid; display: grid;
grid-template-columns: repeat(2, 1fr); grid-template-columns: repeat(1, 1fr);
gap: 4px; gap: 4px;
} }
.fvtt-hellborn .tab.creature-equipment .implants .implant { .fvtt-hellborn .tab.enemy-traits .main-div .traits .trait {
display: flex; display: flex;
align-items: center; align-items: center;
gap: 4px; gap: 4px;
min-width: 13rem; margin-left: 4px;
max-width: 13rem; min-width: 20rem;
max-width: 20rem;
} }
.fvtt-hellborn .tab.creature-equipment .implants .implant .rollable:hover, .fvtt-hellborn .tab.enemy-traits .main-div .traits .trait .rollable:hover,
.fvtt-hellborn .tab.creature-equipment .implants .implant .rollable:focus { .fvtt-hellborn .tab.enemy-traits .main-div .traits .trait .rollable:focus {
text-shadow: 0 0 8px var(--color-shadow-primary); text-shadow: 0 0 8px var(--color-shadow-primary);
cursor: pointer; cursor: pointer;
} }
.fvtt-hellborn .tab.creature-equipment .implants .implant .controls { .fvtt-hellborn .tab.enemy-traits .main-div .traits .trait .controls {
font-size: 0.7rem; font-size: 0.7rem;
min-width: 1.8rem; min-width: 1.8rem;
max-width: 1.8rem; max-width: 1.8rem;
} }
.fvtt-hellborn .tab.creature-equipment .implants .implant .damage { .fvtt-hellborn .tab.enemy-traits .main-div .traits .trait .flavor {
min-width: 6rem; min-width: 24rem;
max-width: 6rem; max-width: 24rem;
} }
.fvtt-hellborn .tab.creature-equipment .implants .implant .name { .fvtt-hellborn .tab.enemy-traits .main-div .traits .trait .role {
min-width: 5rem;
max-width: 5rem;
}
.fvtt-hellborn .tab.enemy-traits .main-div .traits .trait .level {
min-width: 4rem;
max-width: 4rem;
}
.fvtt-hellborn .tab.enemy-traits .main-div .traits .trait .name {
min-width: 10rem; min-width: 10rem;
max-width: 10rem; max-width: 10rem;
} }
.fvtt-hellborn .tab.creature-equipment .implants .implant .item-img { .fvtt-hellborn .tab.enemy-traits .main-div .traits .trait .item-img {
width: 24px; width: 24px;
height: 24px; height: 24px;
margin: 4px 0 0 0; margin: 4px 0 0 0;
} }
.fvtt-hellborn .tab.creature-equipment .weapons { .fvtt-hellborn .tab.enemy-traits .main-div .weapons {
display: grid; display: grid;
grid-template-columns: repeat(2, 1fr); grid-template-columns: repeat(1, 1fr);
gap: 4px; gap: 4px;
} }
.fvtt-hellborn .tab.creature-equipment .weapons .weapon { .fvtt-hellborn .tab.enemy-traits .main-div .weapons .weapon {
display: flex; display: flex;
align-items: center; align-items: center;
gap: 4px; gap: 4px;
min-width: 13rem; min-width: 13rem;
max-width: 13rem; max-width: 13rem;
} }
.fvtt-hellborn .tab.creature-equipment .weapons .weapon .rollable:hover, .fvtt-hellborn .tab.enemy-traits .main-div .weapons .weapon .rollable:hover,
.fvtt-hellborn .tab.creature-equipment .weapons .weapon .rollable:focus { .fvtt-hellborn .tab.enemy-traits .main-div .weapons .weapon .rollable:focus {
text-shadow: 0 0 8px var(--color-shadow-primary); text-shadow: 0 0 8px var(--color-shadow-primary);
cursor: pointer; cursor: pointer;
} }
.fvtt-hellborn .tab.creature-equipment .weapons .weapon .controls { .fvtt-hellborn .tab.enemy-traits .main-div .weapons .weapon .controls {
font-size: 0.7rem; font-size: 0.7rem;
min-width: 1.8rem; min-width: 1.8rem;
max-width: 1.8rem; max-width: 1.8rem;
} }
.fvtt-hellborn .tab.creature-equipment .weapons .weapon .damage { .fvtt-hellborn .tab.enemy-traits .main-div .weapons .weapon .properties {
min-width: 21rem;
max-width: 21rem;
}
.fvtt-hellborn .tab.enemy-traits .main-div .weapons .weapon .type {
min-width: 4rem;
max-width: 4rem;
}
.fvtt-hellborn .tab.enemy-traits .main-div .weapons .weapon .damage {
min-width: 6rem; min-width: 6rem;
max-width: 6rem; max-width: 6rem;
} }
.fvtt-hellborn .tab.creature-equipment .weapons .weapon .name { .fvtt-hellborn .tab.enemy-traits .main-div .weapons .weapon .name {
min-width: 10rem; min-width: 12rem;
max-width: 10rem; max-width: 12rem;
} }
.fvtt-hellborn .tab.creature-equipment .weapons .weapon .item-img { .fvtt-hellborn .tab.enemy-traits .main-div .weapons .weapon .item-img {
width: 24px; width: 24px;
height: 24px; height: 24px;
margin: 4px 0 0 0; margin: 4px 0 0 0;
} }
.fvtt-hellborn .tab.creature-equipment .armors { .fvtt-hellborn .tab.enemy-biography .main-div {
/*background-color: var(--color-light-1);*/
display: grid; display: grid;
grid-template-columns: repeat(2, 1fr); grid-template-columns: 1fr;
gap: 4px;
} }
.fvtt-hellborn .tab.creature-equipment .armors .armor { .fvtt-hellborn .tab.enemy-biography .main-div legend a {
font-size: calc(var(--font-size-standard) * 1.4);
padding-left: 5px;
}
.fvtt-hellborn .tab.enemy-biography .main-div .splitted-text {
display: flex; display: flex;
align-items: center; flex-direction: row;
gap: 4px; gap: 4px;
min-width: 13rem;
max-width: 13rem;
} }
.fvtt-hellborn .tab.creature-equipment .armors .armor .controls { .fvtt-hellborn .tab.enemy-biography .main-div .splitted-text fieldset {
font-size: 0.7rem; width: 100%;
min-width: 1.8rem;
max-width: 1.8rem;
} }
.fvtt-hellborn .tab.creature-equipment .armors .armor .protection { .fvtt-hellborn .tab.enemy-biography .main-div .deals {
min-width: 6rem;
max-width: 6rem;
}
.fvtt-hellborn .tab.creature-equipment .armors .armor .name {
min-width: 10rem;
max-width: 10rem;
}
.fvtt-hellborn .tab.creature-equipment .armors .armor .item-img {
width: 24px;
height: 24px;
margin: 4px 0 0 0;
}
.fvtt-hellborn .tab.creature-equipment .equipments {
display: grid; display: grid;
grid-template-columns: repeat(3, 1fr); grid-template-columns: repeat(3, 1fr);
gap: 4px; gap: 4px;
} }
.fvtt-hellborn .tab.creature-equipment .equipments .equipment { .fvtt-hellborn .tab.enemy-biography .main-div .deals .deal {
display: flex; display: flex;
align-items: center; align-items: center;
gap: 4px; gap: 4px;
min-width: 13rem; margin-left: 4px;
max-width: 13rem; min-width: 12rem;
max-width: 12rem;
} }
.fvtt-hellborn .tab.creature-equipment .equipments .equipment .rollable:hover, .fvtt-hellborn .tab.enemy-biography .main-div .deals .deal .rollable:hover,
.fvtt-hellborn .tab.creature-equipment .equipments .equipment .rollable:focus { .fvtt-hellborn .tab.enemy-biography .main-div .deals .deal .rollable:focus {
text-shadow: 0 0 8px var(--color-shadow-primary); text-shadow: 0 0 8px var(--color-shadow-primary);
cursor: pointer; cursor: pointer;
} }
.fvtt-hellborn .tab.creature-equipment .equipments .equipment .controls { .fvtt-hellborn .tab.enemy-biography .main-div .deals .deal .controls {
font-size: 0.7rem; font-size: 0.7rem;
min-width: 1.8rem; min-width: 1.8rem;
max-width: 1.8rem; max-width: 1.8rem;
} }
.fvtt-hellborn .tab.creature-equipment .equipments .equipment .name { .fvtt-hellborn .tab.enemy-biography .main-div .deals .deal .name {
min-width: 10rem; min-width: 10rem;
max-width: 10rem; max-width: 10rem;
} }
.fvtt-hellborn .tab.creature-equipment .equipments .equipment .item-img { .fvtt-hellborn .tab.enemy-biography .main-div .deals .deal .item-img {
width: 24px; width: 24px;
height: 24px; height: 24px;
margin: 4px 0 0 0; margin: 4px 0 0 0;
} }
.fvtt-hellborn .tab.creature-equipment prose-mirror.inactive { .fvtt-hellborn .tab.enemy-biography .main-div .biodata {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 4px;
}
.fvtt-hellborn .tab.enemy-biography .main-div .biodata .experience {
display: flex;
flex-direction: row;
align-items: center;
gap: 4px;
margin-left: 4px;
}
.fvtt-hellborn .tab.enemy-biography .main-div .biodata .form-group {
display: flex;
flex-direction: row;
align-items: center;
gap: 4px;
margin-left: 4px;
min-width: 14rem;
max-width: 14rem;
}
.fvtt-hellborn .tab.enemy-biography .main-div .biodata .form-group label {
min-width: 6rem;
max-width: 6rem;
}
.fvtt-hellborn .tab.enemy-biography .main-div .biodata input {
text-align: left;
min-width: 8rem;
max-width: 8rem;
}
.fvtt-hellborn .tab.enemy-biography .main-div prose-mirror.inactive {
min-height: 40px; min-height: 40px;
} }
.fvtt-hellborn .tab.creature-equipment prose-mirror.active { .fvtt-hellborn .tab.enemy-biography .main-div prose-mirror.active {
min-height: 150px; min-height: 150px;
} }
.fvtt-hellborn .weapon-content { .fvtt-hellborn .weapon-content {
@@ -2557,6 +2269,18 @@ i.fvtt-hellborn {
font-size: calc(var(--font-size-standard) * 2); font-size: calc(var(--font-size-standard) * 2);
color: var(--color-dark-1); color: var(--color-dark-1);
} }
.item-to-chat ul {
list-style-type: none;
padding: 0;
margin: 0;
justify-content: center;
align-items: center;
}
.item-to-chat ul li {
margin: 0 10px;
font-family: var(--font-primary);
font-size: calc(var(--font-size-standard) * 1);
}
.dice-roll { .dice-roll {
flex-direction: column; flex-direction: column;
} }

View File

@@ -33,8 +33,7 @@ Hooks.once("init", function () {
CONFIG.Actor.documentClass = documents.HellbornActor CONFIG.Actor.documentClass = documents.HellbornActor
CONFIG.Actor.dataModels = { CONFIG.Actor.dataModels = {
character: models.HellbornCharacter, character: models.HellbornCharacter,
vehicle: models.HellbornVehicle, enemy: models.HellbornEnemy,
creature: models.HellbornCreature
} }
CONFIG.Item.documentClass = documents.HellbornItem CONFIG.Item.documentClass = documents.HellbornItem
@@ -53,8 +52,7 @@ Hooks.once("init", function () {
// Register sheet application classes // Register sheet application classes
foundry.documents.collections.Actors.unregisterSheet("core", foundry.appv1.sheets.ActorSheet) foundry.documents.collections.Actors.unregisterSheet("core", foundry.appv1.sheets.ActorSheet)
foundry.documents.collections.Actors.registerSheet("fvtt-hellborn", applications.HellbornCharacterSheet , { types: ["character"], makeDefault: true }) foundry.documents.collections.Actors.registerSheet("fvtt-hellborn", applications.HellbornCharacterSheet , { types: ["character"], makeDefault: true })
foundry.documents.collections.Actors.registerSheet("fvtt-hellborn", applications.HellbornVehicleSheet, { types: ["vehicle"], makeDefault: true }) foundry.documents.collections.Actors.registerSheet("fvtt-hellborn", applications.HellbornEnemySheet, { types: ["enemy"], makeDefault: true })
foundry.documents.collections.Actors.registerSheet("fvtt-hellborn", applications.HellbornCreatureSheet, { types: ["creature"], makeDefault: true })
foundry.documents.collections.Items.unregisterSheet("core", foundry.appv1.sheets.ItemSheet) foundry.documents.collections.Items.unregisterSheet("core", foundry.appv1.sheets.ItemSheet)
foundry.documents.collections.Items.registerSheet("fvtt-hellborn", applications.HellbornWeaponSheet, { types: ["weapon"], makeDefault: true }) foundry.documents.collections.Items.registerSheet("fvtt-hellborn", applications.HellbornWeaponSheet, { types: ["weapon"], makeDefault: true })

View File

@@ -19,6 +19,19 @@
} }
} }
}, },
"Enemy": {
"FIELDS": {
"description": {
"label": "Description"
},
"notes": {
"label": "Notes"
},
"flavorText": {
"label": "Flavor Text"
}
}
},
"Character": { "Character": {
"FIELDS": { "FIELDS": {
"mortality": { "mortality": {
@@ -641,8 +654,7 @@
"TYPES": { "TYPES": {
"Actor": { "Actor": {
"character": "Character", "character": "Character",
"creature": "Creature", "enemy": "Enemy"
"vehicle": "Vehicle"
}, },
"Item": { "Item": {
"armor": "Armor", "armor": "Armor",
@@ -651,7 +663,7 @@
"malefica": "Malefica", "malefica": "Malefica",
"perk": "Perk", "perk": "Perk",
"ritual": "Ritual", "ritual": "Ritual",
"species-trait": "Species Trait", "species-trait": "Trait",
"tarot": "Tarot", "tarot": "Tarot",
"weapon": "Weapon" "weapon": "Weapon"
} }

View File

@@ -1,8 +1,7 @@
export { default as HellbornWeaponSheet } from "./sheets/weapon-sheet.mjs" export { default as HellbornWeaponSheet } from "./sheets/weapon-sheet.mjs"
export { default as HellbornVehicleSheet } from "./sheets/vehicle-sheet.mjs"
export { default as HellbornCharacterSheet } from "./sheets/character-sheet.mjs" export { default as HellbornCharacterSheet } from "./sheets/character-sheet.mjs"
export { default as HellbornEquipmentSheet } from "./sheets/equipment-sheet.mjs" export { default as HellbornEquipmentSheet } from "./sheets/equipment-sheet.mjs"
export { default as HellbornCreatureSheet } from "./sheets/creature-sheet.mjs" export { default as HellbornEnemySheet } from "./sheets/enemy-sheet.mjs"
export { default as HellbornRitualSheet } from "./sheets/ritual-sheet.mjs" export { default as HellbornRitualSheet } from "./sheets/ritual-sheet.mjs"
export { default as HellbornItemSheet } from "./sheets/base-item-sheet.mjs" export { default as HellbornItemSheet } from "./sheets/base-item-sheet.mjs"
export { default as HellbornSpeciesTraitSheet } from "./sheets/species-trait-sheet.mjs" export { default as HellbornSpeciesTraitSheet } from "./sheets/species-trait-sheet.mjs"

View File

@@ -34,6 +34,7 @@ export default class HellbornActorSheet extends HandlebarsApplicationMixin(found
edit: HellbornActorSheet.#onItemEdit, edit: HellbornActorSheet.#onItemEdit,
delete: HellbornActorSheet.#onItemDelete, delete: HellbornActorSheet.#onItemDelete,
updateCheckboxArray: HellbornActorSheet.#onUpdateCheckboxArray, updateCheckboxArray: HellbornActorSheet.#onUpdateCheckboxArray,
toChat: HellbornActorSheet.#toChat,
}, },
} }
@@ -138,7 +139,7 @@ export default class HellbornActorSheet extends HandlebarsApplicationMixin(found
* @param {DragEvent} event The originating DragEvent * @param {DragEvent} event The originating DragEvent
* @protected * @protected
*/ */
_onDragOver(event) {} _onDragOver(event) { }
async _onDropItem(item) { async _onDropItem(item) {
console.log("Dropped item", item) console.log("Dropped item", item)
@@ -193,9 +194,31 @@ export default class HellbornActorSheet extends HandlebarsApplicationMixin(found
let dataPath = `system.mortality.${arrayName}` let dataPath = `system.mortality.${arrayName}`
let tab = foundry.utils.duplicate(this.document.system.mortality[arrayName]) let tab = foundry.utils.duplicate(this.document.system.mortality[arrayName])
tab[arrayIdx] = target.checked tab[arrayIdx] = target.checked
this.actor.update( { [dataPath]: tab } ) this.actor.update({ [dataPath]: tab })
// Dump }
console.log("Array name", arrayName, arrayIdx, target.checked, dataPath)
static async #toChat(event, target) {
const itemUuid = target.getAttribute("data-item-uuid")
const item = fromUuidSync(itemUuid)
if (!item) return
let content = ""
if (item.type === "perk") {
content = await foundry.applications.handlebars.renderTemplate("systems/fvtt-hellborn/templates/chat-perk.hbs", item.toObject())
}
if (item.type === "malefica") {
content = await foundry.applications.handlebars.renderTemplate("systems/fvtt-hellborn/templates/chat-malefica.hbs", item.toObject())
}
if (item.type === "ritual") {
content = await foundry.applications.handlebars.renderTemplate("systems/fvtt-hellborn/templates/chat-ritual.hbs", item.toObject())
}
const chatData = {
user: game.user.id,
speaker: ChatMessage.getSpeaker({ actor: this.actor }),
content: content,
type: CONST.CHAT_MESSAGE_TYPES.OTHER,
}
ChatMessage.create(chatData, { renderSheet: false })
} }
/** /**

View File

@@ -124,7 +124,6 @@ export default class HellbornCharacterSheet extends HellbornActorSheet {
context.enrichedNotes = await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.notes, { async: true }) context.enrichedNotes = await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.notes, { async: true })
break break
} }
console.log("context", context)
return context return context
} }

View File

@@ -22,7 +22,7 @@ export default class HellbornDealSheet extends HellbornItemSheet {
/** @override */ /** @override */
async _prepareContext() { async _prepareContext() {
const context = await super._prepareContext() const context = await super._prepareContext()
context.enrichedDescription = await TextEditor.enrichHTML(this.document.system.description, { async: true }) context.enrichedDescription = await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.description, { async: true })
return context return context
} }
} }

View File

@@ -1,35 +1,34 @@
import HellbornActorSheet from "./base-actor-sheet.mjs" import HellbornActorSheet from "./base-actor-sheet.mjs"
export default class HellbornCreatureSheet extends HellbornActorSheet { export default class HellbornEnemySheet extends HellbornActorSheet {
/** @override */ /** @override */
static DEFAULT_OPTIONS = { static DEFAULT_OPTIONS = {
classes: ["creature"], classes: ["enemy"],
position: { position: {
width: 860, width: 860,
height: 620, height: 620,
}, },
window: { window: {
contentClasses: ["creature-content"], contentClasses: ["enemy-content"],
}, },
actions: { actions: {
createTrait: HellbornCreatureSheet.#onCreateTrait, createTrait: HellbornEnemySheet.#onCreateTrait,
createAbility: HellbornCreatureSheet.#onCreateAbility
}, },
} }
/** @override */ /** @override */
static PARTS = { static PARTS = {
main: { main: {
template: "systems/fvtt-hellborn/templates/creature-main.hbs", template: "systems/fvtt-hellborn/templates/enemy-main.hbs",
}, },
tabs: { tabs: {
template: "templates/generic/tab-navigation.hbs", template: "templates/generic/tab-navigation.hbs",
}, },
traits: { traits: {
template: "systems/fvtt-hellborn/templates/creature-sheet-trait.hbs", template: "systems/fvtt-hellborn/templates/enemy-trait.hbs",
}, },
biography: { biography: {
template: "systems/fvtt-hellborn/templates/creature-biography.hbs", template: "systems/fvtt-hellborn/templates/enemy-biography.hbs",
}, },
} }
@@ -59,9 +58,6 @@ export default class HellbornCreatureSheet extends HellbornActorSheet {
const context = await super._prepareContext() const context = await super._prepareContext()
context.tabs = this.#getTabs() context.tabs = this.#getTabs()
context.enrichedDescription = await TextEditor.enrichHTML(this.document.system.description, { async: true })
context.enrichedNotes = await TextEditor.enrichHTML(this.document.system.notes, { async: true })
return context return context
} }
@@ -73,15 +69,15 @@ export default class HellbornCreatureSheet extends HellbornActorSheet {
break break
case "traits": case "traits":
context.tab = context.tabs.traits context.tab = context.tabs.traits
context.abilities = doc.itemTypes["creature-ability"] context.traits = doc.itemTypes["species-trait"]
context.abilities.sort((a, b) => a.name.localeCompare(b.name))
context.traits = doc.itemTypes["creature-trait"]
context.traits.sort((a, b) => a.name.localeCompare(b.name)) context.traits.sort((a, b) => a.name.localeCompare(b.name))
context.weapons = doc.itemTypes.weapon
context.weapons.sort((a, b) => a.name.localeCompare(b.name))
break break
case "biography": case "biography":
context.tab = context.tabs.biography context.tab = context.tabs.biography
context.enrichedDescription = await TextEditor.enrichHTML(doc.system.description, { async: true }) context.enrichedDescription = await foundry.applications.ux.TextEditor.implementation.enrichHTML(doc.system.description, { async: true })
context.enrichedNotes = await TextEditor.enrichHTML(doc.system.notes, { async: true }) context.enrichedNotes = await foundry.applications.ux.TextEditor.implementation.enrichHTML(doc.system.notes, { async: true })
break break
} }
return context return context
@@ -93,11 +89,7 @@ export default class HellbornCreatureSheet extends HellbornActorSheet {
* @param {HTMLElement} target The current target of the event listener. * @param {HTMLElement} target The current target of the event listener.
*/ */
static #onCreateTrait(event, target) { static #onCreateTrait(event, target) {
this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("HELLBORN.Label.newTrait"), type: "creature-trait" }]) this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("HELLBORN.Label.newTrait"), type: "trait" }])
}
static #onCreateAbility(event, target) {
this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("HELLBORN.Label.newAbility"), type: "creature-ability" }])
} }
/** /**
@@ -117,27 +109,21 @@ export default class HellbornCreatureSheet extends HellbornActorSheet {
async _onRoll(event, target) { async _onRoll(event, target) {
const rollType = $(event.currentTarget).data("roll-type") const rollType = $(event.currentTarget).data("roll-type")
let item let item
let formula
let roll
switch (rollType) { switch (rollType) {
case "skill": case "stat":
let skillId = $(event.currentTarget).data("skill-id"); {
item = this.actor.system.skills[skillId]; let statId = $(event.currentTarget).data("stat-id");
await this.document.system.roll(rollType, item) item = this.actor.system.stats[statId];
await this.document.system.roll(rollType, item)
}
break break
case "creature-damage": case "weapon":
formula = this.actor.system.damage case "damage":
// Rolll the damage {
roll = new Roll(formula) let li = $(event.currentTarget).parents(".item");
await roll.evaluate() item = this.actor.items.get(li.data("item-id"));
roll.toMessage( { flavor: `${this.actor.name} : Damage roll` }) await this.document.system.roll(rollType, item)
break }
case "creature-number":
formula = this.actor.system.numberAppearing
// Rolll the damage
roll = new Roll(formula)
await roll.evaluate()
roll.toMessage({flavor: `${this.actor.name} : Number Appearing roll`})
break break
default: default:
throw new Error(`Unknown roll type ${rollType}`) throw new Error(`Unknown roll type ${rollType}`)

View File

@@ -22,7 +22,7 @@ export default class HellbornEquipmentSheet extends HellbornItemSheet {
/** @override */ /** @override */
async _prepareContext() { async _prepareContext() {
const context = await super._prepareContext() const context = await super._prepareContext()
context.enrichedDescription = await TextEditor.enrichHTML(this.document.system.description, { async: true }) context.enrichedDescription = await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.description, { async: true })
return context return context
} }
} }

View File

@@ -22,7 +22,7 @@ export default class HellbornMaleficaSheet extends HellbornItemSheet {
/** @override */ /** @override */
async _prepareContext() { async _prepareContext() {
const context = await super._prepareContext() const context = await super._prepareContext()
context.enrichedDescription = await TextEditor.enrichHTML(this.document.system.description, { async: true }) context.enrichedDescription = await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.description, { async: true })
return context return context
} }
} }

View File

@@ -22,7 +22,7 @@ export default class HellbornPerkSheet extends HellbornItemSheet {
/** @override */ /** @override */
async _prepareContext() { async _prepareContext() {
const context = await super._prepareContext() const context = await super._prepareContext()
context.enrichedDescription = await TextEditor.enrichHTML(this.document.system.description, { async: true }) context.enrichedDescription = await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.description, { async: true })
return context return context
} }
} }

View File

@@ -22,6 +22,8 @@ export default class HellbornRitualSheet extends HellbornItemSheet {
/** @override */ /** @override */
async _prepareContext() { async _prepareContext() {
const context = await super._prepareContext() const context = await super._prepareContext()
context.enrichedDescription = await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.description, { async: true })
return context return context
} }
} }

View File

@@ -22,7 +22,7 @@ export default class HellbornSpeciesTraitSheet extends HellbornItemSheet {
/** @override */ /** @override */
async _prepareContext() { async _prepareContext() {
const context = await super._prepareContext() const context = await super._prepareContext()
context.enrichedDescription = await TextEditor.enrichHTML(this.document.system.description, { async: true }) context.enrichedDescription = await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.description, { async: true })
return context return context
} }
} }

View File

@@ -1,134 +0,0 @@
import HellbornActorSheet from "./base-actor-sheet.mjs"
export default class HellbornVehicleSheet extends HellbornActorSheet {
/** @override */
static DEFAULT_OPTIONS = {
classes: ["vehicle"],
position: {
width: 680,
height: 540,
},
window: {
contentClasses: ["vehicle-content"],
},
actions: {
createEquipment: HellbornVehicleSheet.#onCreateEquipment,
createWeapon: HellbornVehicleSheet.#onCreateWeapon,
},
}
/** @override */
static PARTS = {
main: {
template: "systems/fvtt-hellborn/templates/vehicle-main.hbs",
},
tabs: {
template: "templates/generic/tab-navigation.hbs",
},
equipment: {
template: "systems/fvtt-hellborn/templates/vehicle-equipment.hbs",
},
description: {
template: "systems/fvtt-hellborn/templates/vehicle-description.hbs",
},
}
/** @override */
tabGroups = {
sheet: "equipment",
}
/**
* Prepare an array of form header tabs.
* @returns {Record<string, Partial<ApplicationTab>>}
*/
#getTabs() {
const tabs = {
equipment: { id: "equipment", group: "sheet", icon: "fa-solid fa-shapes", label: "HELLBORN.Label.equipment" },
description: { id: "description", group: "sheet", icon: "fa-solid fa-book", label: "HELLBORN.Label.description" },
}
for (const v of Object.values(tabs)) {
v.active = this.tabGroups[v.group] === v.id
v.cssClass = v.active ? "active" : ""
}
return tabs
}
/** @override */
async _prepareContext() {
const context = await super._prepareContext()
context.tabs = this.#getTabs()
context.enrichedDescription = await TextEditor.enrichHTML(this.document.system.description, { async: true })
context.enrichedNotes = await TextEditor.enrichHTML(this.document.system.notes, { async: true })
return context
}
_generateTooltip(type, target) {
}
/** @override */
async _preparePartContext(partId, context) {
const doc = this.document
switch (partId) {
case "main":
break
case "equipment":
context.tab = context.tabs.equipment
context.weapons = doc.itemTypes.weapon
context.weapons.sort((a, b) => a.name.localeCompare(b.name))
context.equipments = doc.itemTypes.equipment
context.equipments.sort((a, b) => a.name.localeCompare(b.name))
break
case "description":
context.tab = context.tabs.description
context.enrichedDescription = await TextEditor.enrichHTML(doc.system.description, { async: true })
context.enrichedNotes = await TextEditor.enrichHTML(doc.system.notes, { async: true })
break
}
return context
}
/**
* Creates a new attack item directly from the sheet and embeds it into the document.
* @param {Event} event The initiating click event.
* @param {HTMLElement} target The current target of the event listener.
*/
static #onCreateEquipment(event, target) {
this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("HELLBORN.Label.newEquipment"), type: "equipment" }])
}
static #onCreateWeapon(event, target) {
this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("HELLBORN.Label.newWeapon"), type: "weapon" }])
}
async _onRoll(event, target) {
const rollType = $(event.currentTarget).data("roll-type")
let item
let li
switch (rollType) {
case "damage":
li = $(event.currentTarget).parents(".item");
item = this.actor.items.get(li.data("item-id"));
break
default:
throw new Error(`Unknown roll type ${rollType}`)
}
await this.document.system.roll(rollType, item)
}
async _onDrop(event) {
if (!this.isEditable || !this.isEditMode) return
const data = TextEditor.getDragEventData(event)
// Handle different data types
switch (data.type) {
case "Item":
const item = await fromUuid(data.uuid)
return super._onDropItem(item)
}
}
}

View File

@@ -18,4 +18,10 @@ export default class HellbornWeaponSheet extends HellbornItemSheet {
template: "systems/fvtt-hellborn/templates/weapon.hbs", template: "systems/fvtt-hellborn/templates/weapon.hbs",
}, },
} }
async _prepareContext() {
const context = await super._prepareContext()
context.enrichedDescription = await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.description, { async: true })
return context
}
} }

View File

@@ -92,7 +92,7 @@ export const WEAPON_TYPES = {
export const AMMO_TYPES = { export const AMMO_TYPES = {
"blessed": { id: "blessed", label: "Blessed" }, "blessed": { id: "blessed", label: "Blessed" },
"hollow-points": { id: "hollow-points", label: "Hollow Points" }, "hollow-points": { id: "hollow-points", label: "Hollow" },
"incendiary": { id: "incendiary", label: "Incendiary" }, "incendiary": { id: "incendiary", label: "Incendiary" },
"poisoned": { id: "poisoned", label: "Poisoned" }, "poisoned": { id: "poisoned", label: "Poisoned" },
"rubber": { id: "rubber", label: "Rubber" }, "rubber": { id: "rubber", label: "Rubber" },

View File

@@ -1,5 +1,4 @@
export { default as HellbornCreature } from "./creature.mjs" export { default as HellbornEnemy } from "./enemy.mjs"
export { default as HellbornVehicle } from "./vehicle.mjs"
export { default as HellbornCharacter } from "./character.mjs" export { default as HellbornCharacter } from "./character.mjs"
export { default as HellbornEquipment } from "./equipment.mjs" export { default as HellbornEquipment } from "./equipment.mjs"
export { default as HellbornRitual } from "./ritual.mjs" export { default as HellbornRitual } from "./ritual.mjs"

View File

@@ -58,9 +58,17 @@ export default class HellbornActor extends foundry.abstract.TypeDataModel {
schema.limboes = new fields.StringField({ required: true, nullable: false, initial: "" }) schema.limboes = new fields.StringField({ required: true, nullable: false, initial: "" })
schema.ammo = new fields.StringField({ required: true, nullable: false, initial: "" }) schema.ammo = new fields.StringField({ required: true, nullable: false, initial: "" })
schema.ammoList = new fields.SchemaField(
Object.values(SYSTEM.AMMO_TYPES).reduce((obj, stat) => { const ammoField = (label) => {
obj[stat.id] = new fields.StringField({ required: true, nullable: false, initial: "" }) const schema = {
label: new fields.StringField({ required: true, initial: label }),
value: new fields.StringField({ required: true, initial: "" }),
}
return new fields.SchemaField(schema, { label })
}
schema.ammoArray = new fields.SchemaField(
Object.values(SYSTEM.AMMO_TYPES).reduce((obj, ammo) => {
obj[ammo.id] = ammoField(ammo.label)
return obj return obj
}, {}), }, {}),
) )

View File

@@ -1,56 +0,0 @@
import { SYSTEM } from "../config/system.mjs"
import HellbornRoll from "../documents/roll.mjs"
export default class HellbornCreature extends foundry.abstract.TypeDataModel {
static defineSchema() {
const fields = foundry.data.fields
const requiredInteger = { required: true, nullable: false, integer: true }
const schema = {}
schema.terrain = new fields.StringField({ required: true, nullable: false, initial: "cave", choices: SYSTEM.CREATURE_TERRAIN_TYPES })
schema.niche = new fields.StringField({ required: true, nullable: false, initial: "prey", choices: SYSTEM.CREATURE_NICHES })
schema.size = new fields.StringField({ required: true, nullable: false, initial: "small", choices: SYSTEM.CREATURE_SIZES })
schema.numberAppearing = new fields.StringField({ required: true, initial: "1d6" })
schema.health = new fields.SchemaField({
staminaValue: new fields.NumberField({ ...requiredInteger, initial: 1, min: 0 }),
staminaMax: new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 }),
})
schema.damage = new fields.StringField({ required: true, initial: "1d6" })
schema.description = new fields.HTMLField({ required: true, textSearch: true })
schema.notes = new fields.HTMLField({ required: true, textSearch: true })
return schema
}
/** @override */
static LOCALIZATION_PREFIXES = ["HELLBORN.Creature"]
isEncumbered() {
return false
}
async roll(rollType, rollItem) {
let opponentTarget
const hasTarget = opponentTarget !== undefined
let roll = await HellbornRoll.prompt({
rollType,
rollItem,
actorId: this.parent.id,
actorName: this.parent.name,
actorImage: this.parent.img,
traits: this.parent.items.filter(i => i.type === "creature-trait" && i.system.isAdvantage),
abilities: this.parent.items.filter(i => i.type === "creature-ability" && i.system.isAdvantage),
isEncumbered: this.isEncumbered(),
hasTarget,
target: opponentTarget
})
if (!roll) return null
await roll.toMessage({}, { rollMode: roll.options.rollMode })
}
}

80
module/models/enemy.mjs Normal file
View File

@@ -0,0 +1,80 @@
import { SYSTEM } from "../config/system.mjs"
import HellbornRoll from "../documents/roll.mjs"
export default class HellbornEnemy extends foundry.abstract.TypeDataModel {
static defineSchema() {
const fields = foundry.data.fields
const requiredInteger = { required: true, nullable: false, integer: true }
const schema = {}
const statField = (label) => {
const schema = {
label: new fields.StringField({ required: true, initial: label }),
value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
}
return new fields.SchemaField(schema, { label })
}
schema.stats = new fields.SchemaField(
Object.values(SYSTEM.STATS).reduce((obj, stat) => {
obj[stat.id] = statField(stat.label)
return obj
}, {}),
)
schema.flavorText = new fields.StringField({ required: true, initial: "", textSearch: true })
schema.trauma = new fields.SchemaField({
current: new fields.NumberField({ ...requiredInteger, initial: 1, min: 0 }),
max: new fields.NumberField({ ...requiredInteger, initial: 1, min: 0 }),
})
schema.darkness = new fields.SchemaField({
current: new fields.NumberField({ ...requiredInteger, initial: 1, min: 0 }),
max: new fields.NumberField({ ...requiredInteger, initial: 1, min: 0 }),
value: new fields.NumberField({ ...requiredInteger, initial: 1, min: 0 }),
})
schema.defense = new fields.SchemaField({
base: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
bonus: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
resistance: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
})
schema.movement = new fields.SchemaField({
base: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
reduce: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
})
schema.description = new fields.HTMLField({ required: true, textSearch: true })
schema.notes = new fields.HTMLField({ required: true, textSearch: true })
return schema
}
/** @override */
static LOCALIZATION_PREFIXES = ["HELLBORN.Enemy"]
async roll(rollType, rollItem) {
let opponentTarget
const hasTarget = opponentTarget !== undefined
let roll = await HellbornRoll.prompt({
rollType,
rollItem,
actorId: this.parent.id,
actorName: this.parent.name,
actorImage: this.parent.img,
traits: this.parent.items.filter(i => i.type === "trait"),
hasTarget,
target: opponentTarget
})
if (!roll) return null
await roll.toMessage({}, { rollMode: roll.options.rollMode })
}
}

View File

@@ -1,55 +0,0 @@
import { SYSTEM } from "../config/system.mjs"
import HellbornRoll from "../documents/roll.mjs"
export default class HellbornVehicle extends foundry.abstract.TypeDataModel {
static defineSchema() {
const fields = foundry.data.fields
const requiredInteger = { required: true, nullable: false, integer: true }
const schema = {}
schema.agility = new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 })
schema.armor = new fields.StringField({ required: true, initial: "" })
schema.cargo = new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 })
schema.crew = new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 })
schema.force = new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 })
schema.range = new fields.StringField({ required: true, initial: "1d6" })
schema.speed = new fields.StringField({ required: true, initial: "1d6" })
schema.techAge = new fields.StringField({ required: true, initial: "1d6" })
schema.tonnage = new fields.NumberField({ required: true, initial: 1, min: 0 })
schema.damages = new fields.StringField({ required: true, initial: "" })
schema.cost = new fields.NumberField({ required: true, initial: 0, min: 0 })
schema.description = new fields.HTMLField({ required: true, textSearch: true })
schema.notes = new fields.HTMLField({ required: true, textSearch: true })
return schema
}
/** @override */
static LOCALIZATION_PREFIXES = ["HELLBORN.Vehicle"]
isEncumbered() {
return false
}
async roll(rollType, rollItem) {
let opponentTarget
const hasTarget = opponentTarget !== undefined
let roll = await HellbornRoll.prompt({
rollType,
rollItem,
actorId: this.parent.id,
actorName: this.parent.name,
actorImage: this.parent.img,
isEncumbered: this.isEncumbered(),
hasTarget,
target: opponentTarget
})
if (!roll) return null
await roll.toMessage({}, { rollMode: roll.options.rollMode })
}
}

View File

@@ -191,6 +191,9 @@
min-width: 4rem; min-width: 4rem;
max-width: 4rem; max-width: 4rem;
} }
.spaced-left{
margin-left: 0.8rem;
}
input { input {
min-width: 2.5rem; min-width: 2.5rem;
max-width: 2.5rem; max-width: 2.5rem;
@@ -368,10 +371,6 @@
.limboes { .limboes {
display: flex; display: flex;
flex-direction: row; flex-direction: row;
.limboes-layout {
display: flex;
flex-direction: column;
}
.limboes-line { .limboes-line {
display: flex; display: flex;
flex-direction: row; flex-direction: row;
@@ -382,13 +381,18 @@
align-items: center; align-items: center;
gap: 4px; gap: 4px;
margin-left: 4px; margin-left: 4px;
min-width: 14rem; min-width: 6rem;
max-width: 14rem; max-width: 6rem;
}
.ammo-quantity {
text-align: left;
max-width: 3rem;
min-width: 3rem;
} }
input { input {
text-align: left; text-align: left;
min-width: 6rem; min-width: 8rem;
max-width: 6rem; max-width: 8rem;
} }
} }

View File

@@ -1,700 +0,0 @@
.creature-content {
.sheet-common();
.creature-sheet-common();
overflow: scroll;
}
.sheet-tabs {
background-color: var(--color-light-1);
}
.creature-main {
background-color: var(--color-light-1);
display: flex;
.creature-pc {
display: flex;
gap: 4px;
flex: 1;
.creature-left {
min-width: 180px;
display: flex;
flex-direction: column;
.creature-left-image {
display: flex;
justify-content: center;
align-items: center;
padding-bottom: 8px;
.creature-img {
height: 140px;
width: auto;
border: none;
}
}
.creature-hp {
gap: 2px;
align-items: center;
input {
flex: none;
width: 2.5rem;
margin-left: 2px;
margin-right: 4px;
}
.hp-separator {
font-size: calc(var(--font-size-standard) * 1.2);
display: flex;
align-items: center;
justify-content: center;
}
}
.creature-dv,
.creature-dmax {
.form-fields {
flex: none;
}
}
.creature-dmax-edit {
input {
display: flex;
width: 60px;
font-size: calc(var(--font-size-standard) * 1.4);
align-items: center;
justify-content: center;
padding: 0 5px 0 5px;
text-align: center;
}
}
}
.creature-right {
display: flex;
flex-direction: column;
gap: 5px;
.creature-spec {
label {
max-width: 8rem;
}
select {
max-width: 10rem;
}
input {
max-width: 6rem;
}
.dice-2d6 {
max-width: 1.5rem;
}
.rollable:hover,
.rollable:focus {
text-shadow: 0 0 8px var(--color-shadow-primary);
cursor: pointer;
}
.rollable {
}
}
.creature-name {
display: flex;
input {
font-family: var(--font-title);
font-size: var(--font-size-title);
width: 400px;
}
}
label {
min-width: 120px;
}
}
}
.creature-pc-play {
min-width: 500px;
}
.creature-pc-edit {
min-width: 500px;
}
.creature-skills {
background-color: var(--color-light-1);
display: flex;
flex-direction: column;
gap: 5px;
flex: 1;
.creature-skill {
display: flex;
align-items: center;
.icon-skill {
width: 24px;
height: 24px;
margin-right: 4px;
}
.rollable:hover,
.rollable:focus {
text-shadow: 0 0 8px var(--color-shadow-primary);
cursor: pointer;
}
.rollable {
min-width: 4.5rem;
max-width: 4.5rem;
}
.char-text {
margin-left: 0.5rem;
}
.d100 {
flex: 0;
max-width: 0.6rem;
}
.form-group {
flex: 0;
padding-left: 5px;
.form-fields {
font-size: 1.1rem;
flex: none;
width: 40px;
}
}
}
}
.creature-skill-play {
min-width: 225px;
}
.creature-skill-edit {
min-width: 225px;
}
}
.creature-biography {
background-color: var(--color-light-1);
prose-mirror.inactive {
min-height: 40px;
}
prose-mirror.active {
min-height: 150px;
}
.field-label {
margin-left: 8px;
}
.rank {
display: grid;
grid-template-columns: repeat(5, 1fr);
gap: 8px;
label {
min-width: 6rem;
}
input {
max-width: 4rem;
}
}
.biodata {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 8px;
label {
min-width: 12rem;
}
}
.resources {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 8px;
label {
min-width: 8rem;
}
}
.features,
.biodata {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 8px;
label {
min-width: 3rem;
}
.feature {
display: flex;
align-items: center;
gap: 4px;
min-width: 18rem;
max-width: 18rem;
}
}
}
.tab.creature-skills {
background-color: var(--color-light-1);
display: grid;
grid-template-columns: 1fr;
legend {
a {
font-size: calc(var(--font-size-standard) * 1.4);
padding-left: 5px;
}
}
.skills {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 4px;
.skill {
display: flex;
align-items: center;
gap: 4px;
margin-left: 4px;
min-width: 12.3rem;
max-width: 12.3rem;
.rollable:hover,
.rollable:focus {
text-shadow: 0 0 8px var(--color-shadow-primary);
cursor: pointer;
}
.controls {
font-size: 0.7rem;
min-width: 1.8rem;
max-width: 1.8rem;
}
.score {
min-width: 1.2rem;
max-width: 1.2rem;
}
.name {
min-width: 10rem;
max-width: 10rem;
}
.item-img {
width: 24px;
height: 24px;
margin: 4px 0 0 0;
}
}
}
}
.tab.creature-status {
background-color: var(--color-light-1);
display: grid;
grid-template-columns: 1fr;
legend {
a {
font-size: calc(var(--font-size-standard) * 1.4);
padding-left: 5px;
}
}
.bonds {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 4px;
.bond {
display: flex;
align-items: center;
gap: 4px;
min-width: 18rem;
max-width: 18rem;
.controls {
font-size: 0.7rem;
min-width: 1.8rem;
max-width: 1.8rem;
}
.name {
min-width: 12rem;
max-width: 12rem;
}
.type {
min-width: 6rem;
max-width: 6rem;
}
.level {
min-width: 2rem;
max-width: 2rem;
}
.item-img {
width: 24px;
height: 24px;
margin: 4px 0 0 0;
}
}
}
.motivations {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 4px;
.motivation {
display: flex;
align-items: center;
gap: 4px;
min-width: 14rem;
max-width: 14rem;
.controls {
font-size: 0.7rem;
min-width: 1.8rem;
max-width: 1.8rem;
}
.name {
min-width: 12rem;
max-width: 12rem;
}
.item-img {
width: 24px;
height: 24px;
margin: 4px 0 0 0;
}
}
}
.mentaldisorders {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 4px;
.mentaldisorder {
display: flex;
align-items: center;
gap: 4px;
min-width: 18rem;
max-width: 18rem;
.controls {
font-size: 0.7rem;
min-width: 1.8rem;
max-width: 1.8rem;
}
.name {
min-width: 14rem;
max-width: 14rem;
}
.cured {
min-width: 5rem;
max-width: 5rem;
}
.item-img {
width: 24px;
height: 24px;
margin: 4px 0 0 0;
}
}
}
.injuries {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 4px;
.injury {
display: flex;
align-items: center;
gap: 4px;
min-width: 16rem;
max-width: 16rem;
.controls {
font-size: 0.7rem;
min-width: 1.8rem;
max-width: 1.8rem;
}
.name {
min-width: 14rem;
max-width: 14rem;
}
.item-img {
width: 24px;
height: 24px;
margin: 4px 0 0 0;
}
}
}
}
.tab.creature-traits {
background-color: var(--color-light-1);
display: grid;
grid-template-columns: 1fr;
legend {
a {
font-size: calc(var(--font-size-standard) * 1.4);
padding-left: 5px;
}
}
.traits {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 4px;
.trait {
display: flex;
align-items: center;
gap: 4px;
min-width: 13rem;
max-width: 13rem;
.rollable:hover,
.rollable:focus {
text-shadow: 0 0 8px var(--color-shadow-primary);
cursor: pointer;
}
.controls {
font-size: 0.7rem;
min-width: 1.8rem;
max-width: 1.8rem;
}
.damage {
min-width: 6rem;
max-width: 6rem;
}
.name {
min-width: 10rem;
max-width: 10rem;
}
.item-img {
width: 24px;
height: 24px;
margin: 4px 0 0 0;
}
}
}
.abilities {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 4px;
.ability {
display: flex;
align-items: center;
gap: 4px;
min-width: 13rem;
max-width: 13rem;
.rollable:hover,
.rollable:focus {
text-shadow: 0 0 8px var(--color-shadow-primary);
cursor: pointer;
}
.controls {
font-size: 0.7rem;
min-width: 1.8rem;
max-width: 1.8rem;
}
.damage {
min-width: 6rem;
max-width: 6rem;
}
.name {
min-width: 10rem;
max-width: 10rem;
}
.item-img {
width: 24px;
height: 24px;
margin: 4px 0 0 0;
}
}
}
.psionics {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 4px;
.psionic {
display: flex;
align-items: center;
gap: 4px;
min-width: 13rem;
max-width: 13rem;
.rollable:hover,
.rollable:focus {
text-shadow: 0 0 8px var(--color-shadow-primary);
cursor: pointer;
}
.controls {
font-size: 0.7rem;
min-width: 1.8rem;
max-width: 1.8rem;
}
.damage {
min-width: 6rem;
max-width: 6rem;
}
.name {
min-width: 10rem;
max-width: 10rem;
}
.item-img {
width: 24px;
height: 24px;
margin: 4px 0 0 0;
}
}
}
}
.tab.creature-equipment {
background-color: var(--color-light-1);
display: grid;
grid-template-columns: 1fr;
legend {
a {
font-size: calc(var(--font-size-standard) * 1.4);
padding-left: 5px;
}
}
.encumbrance {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 4px;
input {
max-width: 4rem;
}
.encumbered {
color: red;
font-weight: bold;
}
}
.implants {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 4px;
.implant {
display: flex;
align-items: center;
gap: 4px;
min-width: 13rem;
max-width: 13rem;
.rollable:hover,
.rollable:focus {
text-shadow: 0 0 8px var(--color-shadow-primary);
cursor: pointer;
}
.controls {
font-size: 0.7rem;
min-width: 1.8rem;
max-width: 1.8rem;
}
.damage {
min-width: 6rem;
max-width: 6rem;
}
.name {
min-width: 10rem;
max-width: 10rem;
}
.item-img {
width: 24px;
height: 24px;
margin: 4px 0 0 0;
}
}
}
.weapons {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 4px;
.weapon {
display: flex;
align-items: center;
gap: 4px;
min-width: 13rem;
max-width: 13rem;
.rollable:hover,
.rollable:focus {
text-shadow: 0 0 8px var(--color-shadow-primary);
cursor: pointer;
}
.controls {
font-size: 0.7rem;
min-width: 1.8rem;
max-width: 1.8rem;
}
.damage {
min-width: 6rem;
max-width: 6rem;
}
.name {
min-width: 10rem;
max-width: 10rem;
}
.item-img {
width: 24px;
height: 24px;
margin: 4px 0 0 0;
}
}
}
.armors {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 4px;
.armor {
display: flex;
align-items: center;
gap: 4px;
min-width: 13rem;
max-width: 13rem;
.controls {
font-size: 0.7rem;
min-width: 1.8rem;
max-width: 1.8rem;
}
.protection {
min-width: 6rem;
max-width: 6rem;
}
.name {
min-width: 10rem;
max-width: 10rem;
}
.item-img {
width: 24px;
height: 24px;
margin: 4px 0 0 0;
}
}
}
.equipments {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 4px;
.equipment {
display: flex;
align-items: center;
gap: 4px;
min-width: 13rem;
max-width: 13rem;
.rollable:hover,
.rollable:focus {
text-shadow: 0 0 8px var(--color-shadow-primary);
cursor: pointer;
}
.controls {
font-size: 0.7rem;
min-width: 1.8rem;
max-width: 1.8rem;
}
.name {
min-width: 10rem;
max-width: 10rem;
}
.item-img {
width: 24px;
height: 24px;
margin: 4px 0 0 0;
}
}
}
prose-mirror.inactive {
min-height: 40px;
}
prose-mirror.active {
min-height: 150px;
}
}

379
styles/enemy.less Normal file
View File

@@ -0,0 +1,379 @@
.enemy-content {
.sheet-common();
.enemy-sheet-common();
overflow: scroll;
}
.sheet-tabs {
background-color: var(--color-light-1);
}
.enemy-main {
/*background-color: var(--color-light-1);*/
display: flex;
.enemy-pc {
display: flex;
gap: 4px;
flex: 1;
.enemy-left {
min-width: 180px;
display: flex;
flex-direction: column;
.enemy-left-image {
display: flex;
justify-content: center;
align-items: center;
padding-bottom: 8px;
.enemy-img {
height: 140px;
width: auto;
border: none;
}
}
.enemy-hp {
gap: 2px;
align-items: center;
input {
flex: none;
width: 2.5rem;
margin-left: 2px;
margin-right: 4px;
}
.hp-separator {
font-size: calc(var(--font-size-standard) * 1.2);
display: flex;
align-items: center;
justify-content: center;
}
}
.enemy-dv,
.enemy-dmax {
.form-fields {
flex: none;
}
}
}
.enemy-right {
display: flex;
flex-direction: column;
gap: 5px;
.enemy-definition {
.form-group {
display: flex;
align-items: center;
margin-bottom: 4px;
}
.splitted {
display: flex;
flex-direction: row;
gap: 4px;
}
label {
max-width: 5rem;
min-width: 5rem;
}
input {
text-align: left;
min-width: 18rem;
max-width: 18rem;
margin-bottom: auto;
}
.trait {
min-width: 7rem;
max-width: 7rem;
margin-right: 1rem;
margin-bottom: auto;
}
}
.enemy-name {
display: flex;
input {
font-family: var(--font-title);
font-size: var(--font-size-title);
width: 400px;
}
}
label {
min-width: 120px;
}
}
}
.enemy-pc-play {
min-width: 500px;
}
.enemy-pc-edit {
min-width: 500px;
}
.enemy-stats {
/*background-color: var(--color-light-1);*/
display: flex;
flex-direction: column;
gap: 5px;
flex: 1;
.enemy-stat {
display: flex;
align-items: center;
.icon-stat {
width: 24px;
height: 24px;
margin-right: 4px;
}
.rollable:hover,
.rollable:focus {
text-shadow: 0 0 8px var(--color-shadow-primary);
cursor: pointer;
}
.rollable {
min-width: 3.5rem;
max-width: 3.5rem;
}
input {
min-width: 2.5rem;
max-width: 2.5rem;
}
}
}
.enemy-stats-play {
min-width: 120px;
}
.enemy-stats-edit {
min-width: 120px;
}
}
.tab.enemy-traits .main-div {
/*background-color: var(--color-light-1);*/
display: grid;
grid-template-columns: 1fr;
legend {
a {
font-size: calc(var(--font-size-standard) * 1.4);
padding-left: 5px;
}
}
.mortality {
display: flex;
align-items: center;
gap: 4px;
margin-left: 4px;
min-width: 12rem;
max-width: 12rem;
label {
min-width: 5rem;
max-width: 5rem;
}
}
.counters {
display: flex;
direction: column;
align-items: center;
gap: 4px;
margin-left: 4px;
.characteristics-label{
color: grey;
font-size:small;
}
label {
min-width: 4rem;
max-width: 4rem;
}
.spaced-left{
margin-left: 0.8rem;
}
input {
min-width: 2.5rem;
max-width: 2.5rem;
}
}
.traits {
display: grid;
grid-template-columns: repeat(1, 1fr);
gap: 4px;
.trait {
display: flex;
align-items: center;
gap: 4px;
margin-left: 4px;
min-width: 20rem;
max-width: 20rem;
.rollable:hover,
.rollable:focus {
text-shadow: 0 0 8px var(--color-shadow-primary);
cursor: pointer;
}
.controls {
font-size: 0.7rem;
min-width: 1.8rem;
max-width: 1.8rem;
}
.flavor {
min-width: 24rem;
max-width: 24rem;
}
.role {
min-width: 5rem;
max-width: 5rem;
}
.level {
min-width: 4rem;
max-width: 4rem;
}
.name {
min-width: 10rem;
max-width: 10rem;
}
.item-img {
width: 24px;
height: 24px;
margin: 4px 0 0 0;
}
}
}
.weapons {
display: grid;
grid-template-columns: repeat(1, 1fr);
gap: 4px;
.weapon {
display: flex;
align-items: center;
gap: 4px;
min-width: 13rem;
max-width: 13rem;
.rollable:hover,
.rollable:focus {
text-shadow: 0 0 8px var(--color-shadow-primary);
cursor: pointer;
}
.controls {
font-size: 0.7rem;
min-width: 1.8rem;
max-width: 1.8rem;
}
.properties {
min-width: 21rem;
max-width: 21rem;
}
.type {
min-width: 4rem;
max-width: 4rem;
}
.damage {
min-width: 6rem;
max-width: 6rem;
}
.name {
min-width: 12rem;
max-width: 12rem;
}
.item-img {
width: 24px;
height: 24px;
margin: 4px 0 0 0;
}
}
}
}
.tab.enemy-biography .main-div {
/*background-color: var(--color-light-1);*/
display: grid;
grid-template-columns: 1fr;
legend {
a {
font-size: calc(var(--font-size-standard) * 1.4);
padding-left: 5px;
}
}
.splitted-text {
display: flex;
flex-direction: row;
gap: 4px;
fieldset {
width: 100%;
}
}
.deals {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 4px;
.deal {
display: flex;
align-items: center;
gap: 4px;
margin-left: 4px;
min-width: 12rem;
max-width: 12rem;
.rollable:hover,
.rollable:focus {
text-shadow: 0 0 8px var(--color-shadow-primary);
cursor: pointer;
}
.controls {
font-size: 0.7rem;
min-width: 1.8rem;
max-width: 1.8rem;
}
.name {
min-width: 10rem;
max-width: 10rem;
}
.item-img {
width: 24px;
height: 24px;
margin: 4px 0 0 0;
}
}
}
.biodata {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 4px;
.experience {
display: flex;
flex-direction: row;
align-items: center;
gap: 4px;
margin-left: 4px;
}
.form-group {
label {
min-width: 6rem;
max-width: 6rem;
}
display: flex;
flex-direction: row;
align-items: center;
gap: 4px;
margin-left: 4px;
min-width: 14rem;
max-width: 14rem;
}
input {
text-align: left;
min-width: 8rem;
max-width: 8rem;
}
}
prose-mirror.inactive {
min-height: 40px;
}
prose-mirror.active {
min-height: 150px;
}
}

View File

@@ -5,7 +5,7 @@
@import "mixins.less"; @import "mixins.less";
@import "character.less"; @import "character.less";
@import "vehicle.less"; @import "vehicle.less";
@import "creature.less"; @import "enemy.less";
@import "weapon.less"; @import "weapon.less";
@import "equipment.less"; @import "equipment.less";
@import "armor.less"; @import "armor.less";

View File

@@ -7,7 +7,7 @@
--font-title: "SupernaturalKnight"; --font-title: "SupernaturalKnight";
--logo-standard: url("../assets/ui/pentagram_logo.webp"); --logo-standard: url("../assets/ui/pentagram_logo.webp");
--title-color: #f0443c; --title-color: #f0443c;
--background-box: ##e0dcdc; --background-box: #e0dcdc;
--color-success: rgb(15, 122, 15); --color-success: rgb(15, 122, 15);
--color-failure: darkred; --color-failure: darkred;
--color-warning: darkorange; --color-warning: darkorange;
@@ -15,6 +15,10 @@
--color-critical-failure: rgb(141, 32, 231); --color-critical-failure: rgb(141, 32, 231);
} }
body {
--color-light-1: rgba(182, 178, 178, 0.6);
--color-warm-1:#f0443c;
}
#logo { #logo {
content: var(--logo-standard); content: var(--logo-standard);

View File

@@ -69,7 +69,7 @@
} }
} }
.creature-sheet-common { .enemy-sheet-common {
label { label {
font-family: var(--font-secondary); font-family: var(--font-secondary);
font-size: calc(var(--font-size-standard) * 1.0); font-size: calc(var(--font-size-standard) * 1.0);

View File

@@ -54,6 +54,21 @@
color: var(--color-dark-1); color: var(--color-dark-1);
} }
.item-to-chat {
ul {
list-style-type: none;
padding: 0;
margin: 0;
justify-content: center;
align-items: center;
li {
margin: 0 10px;
font-family: var(--font-primary);
font-size: calc(var(--font-size-standard) * 1);
}
}
}
&.dice-roll { &.dice-roll {
flex-direction: column; flex-direction: column;
@@ -71,7 +86,7 @@
border: 0px; border: 0px;
} }
.intro-chat { .intro-chat {
color:var(--color-dark-1); color: var(--color-dark-1);
border-radius: 20px; border-radius: 20px;
display: flex; display: flex;
flex-direction: row; flex-direction: row;
@@ -92,10 +107,10 @@
li { li {
margin: 0 10px; margin: 0 10px;
font-family: var(--font-primary); font-family: var(--font-primary);
font-size: calc(var(--font-size-standard) * 1.0); font-size: calc(var(--font-size-standard) * 1);
} }
.nudge-roll { .nudge-roll {
font-size: calc(var(--font-size-standard) * 1.0); font-size: calc(var(--font-size-standard) * 1);
margin-left: 4rem; margin-left: 4rem;
display: none; display: none;
} }

View File

@@ -34,8 +34,7 @@
"documentTypes": { "documentTypes": {
"Actor": { "Actor": {
"character": { "htmlFields": ["backstory", "notes", "appearance", "scars", "likes", "dislikes", "fears", "vices", "goals", "ammbitions", "values", "bonds"] }, "character": { "htmlFields": ["backstory", "notes", "appearance", "scars", "likes", "dislikes", "fears", "vices", "goals", "ammbitions", "values", "bonds"] },
"monster": { "htmlFields": ["description", "notes"] }, "enemy": { "htmlFields": ["description", "notes"] }
"vehicle": { "htmlFields": ["description", "notes"] }
}, },
"Item": { "Item": {
"perk": { "htmlFields": ["description"] }, "perk": { "htmlFields": ["description"] },

View File

@@ -4,11 +4,14 @@
<fieldset class="biodata"> <fieldset class="biodata">
<legend>{{localize "HELLBORN.Label.experience"}}</legend> <legend>{{localize "HELLBORN.Label.experience"}}</legend>
<div class="experience"> <div class="experience">
{{formField systemFields.experience.fields.current value=system.experience.current type="number" rootId=partId {{formField systemFields.experience.fields.current value=system.experience.current type="number" rootId=partId
disabled=isPlayMode}} disabled=isPlayMode}}
</div>
<div class="experience">
{{formField systemFields.experience.fields.total value=system.experience.total type="number" rootId=partId {{formField systemFields.experience.fields.total value=system.experience.total type="number" rootId=partId
disabled=isPlayMode}} disabled=isPlayMode}}
</div>
<div class="experience">
{{formField systemFields.experience.fields.training value=system.experience.training type="number" rootId=partId {{formField systemFields.experience.fields.training value=system.experience.training type="number" rootId=partId
disabled=isPlayMode}} disabled=isPlayMode}}
</div> </div>

View File

@@ -87,20 +87,24 @@
<fieldset class="limboes"> <fieldset class="limboes">
<legend>Limboes and Ammo</legend> <legend>Limboes and Ammo</legend>
<div class="limboes-layout">
<div class="limboes-line"> <div class="limboes-line">
{{formField systemFields.limboes value=system.limboes rootId=partId disabled=isPlayMode}}
{{formField systemFields.ammo value=system.ammo rootId=partId disabled=isPlayMode}}
</div>
<div class="limboes-line">
{{#each system.ammoList as |ammo key|}}
<div class="ammo-item"> <div class="ammo-item">
<span class="ammo-name">{{upperFirst key}}</span> <input type="text" class="limboes-name" value="{{system.limboes}}" name="system.limboes"/>
<input type="number" class="ammo-quantity" value="{{ammo}}" min="0" name="system.ammoList.{{key}}" /> <span class="limboes-quantity">Limboes</span>
</div>
<div class="ammo-item">
<input type="text" class="ammo" value="{{system.ammo}}" name="system.ammo"/>
<span class="limboes-quantity">Ammo</span>
</div>
{{#each system.ammoArray as |ammo key|}}
<div class="ammo-item">
<input type="number" class="ammo-quantity" value="{{ammo.value}}" min="0" name="system.ammoList.{{key}}.value" />
<span class="ammo-name">{{upperFirst ammo.label}}</span>
</div> </div>
{{/each}} {{/each}}
</div> </div>
</div>
</fieldset> </fieldset>
</div> </div>

View File

@@ -12,8 +12,8 @@
<img class="item-img" src="{{item.img}}" data-tooltip="{{item.name}}" /> <img class="item-img" src="{{item.img}}" data-tooltip="{{item.name}}" />
<!--<img src="systems/fvtt-cthulhu-eternal/assets/ui/d100.svg" class="d100" />--> <!--<img src="systems/fvtt-cthulhu-eternal/assets/ui/d100.svg" class="d100" />-->
<div class="name" data-roll-type="malefica" data-tooltip="{{{item.system.description}}}"> <div class="name" data-action="toChat" data-item-uuid="{{item.uuid}}" data-roll-type="malefica" data-tooltip="{{{item.system.description}}}">
{{item.name}} <a>{{item.name}}</a>
</div> </div>
<span class="domain" data-tooltip="Domain">{{upperFirst item.system.domain}}</span> <span class="domain" data-tooltip="Domain">{{upperFirst item.system.domain}}</span>
<span class="level" data-tooltip="Level">{{getRomanLevel item.system.level}}</span> <span class="level" data-tooltip="Level">{{getRomanLevel item.system.level}}</span>
@@ -40,8 +40,8 @@
<img class="item-img" src="{{item.img}}" data-tooltip="{{item.name}}" /> <img class="item-img" src="{{item.img}}" data-tooltip="{{item.name}}" />
<!--<img src="systems/fvtt-cthulhu-eternal/assets/ui/d100.svg" class="d100" />--> <!--<img src="systems/fvtt-cthulhu-eternal/assets/ui/d100.svg" class="d100" />-->
<div class="name" data-roll-type="weapon" data-tooltip="{{{item.system.description}}}"> <div class="name" data-action="toChat" data-item-uuid="{{item.uuid}}" data-roll-type="weapon" data-tooltip="{{{item.system.description}}}">
{{item.name}} <a>{{item.name}}</a>
</div> </div>
<span class="ingredients" data-tooltip="Ingredients">{{upperFirst item.system.ingredients}}</span> <span class="ingredients" data-tooltip="Ingredients">{{upperFirst item.system.ingredients}}</span>
<span class="difficulty" data-tooltip="Difficulty">{{upperFirst item.system.difficulty}}</span> <span class="difficulty" data-tooltip="Difficulty">{{upperFirst item.system.difficulty}}</span>

View File

@@ -9,14 +9,14 @@
<label>Trauma : </label>{{formInput systemFields.trauma.fields.current value=system.trauma.current}} / <label>Trauma : </label>{{formInput systemFields.trauma.fields.current value=system.trauma.current}} /
{{formInput systemFields.trauma.fields.max value=system.trauma.max}} {{formInput systemFields.trauma.fields.max value=system.trauma.max}}
<label> Darkness : </label>{{formInput systemFields.darkness.fields.current value=system.darkness.current}} / <label class="spaced-left"> Darkness : </label>{{formInput systemFields.darkness.fields.current value=system.darkness.current}} /
{{formInput systemFields.darkness.fields.max value=system.darkness.max}} {{formInput systemFields.darkness.fields.max value=system.darkness.max}}
{{formInput systemFields.darkness.fields.value value=system.darkness.value}} {{formInput systemFields.darkness.fields.value value=system.darkness.value}}
<label> Defense : </label>{{formInput systemFields.defense.fields.base value=system.defense.base}} <label class="spaced-left"> Defense : </label>{{formInput systemFields.defense.fields.base value=system.defense.base}}
{{formInput systemFields.defense.fields.bonus value=system.defense.bonus }} {{formInput systemFields.defense.fields.bonus value=system.defense.bonus }}
{{formInput systemFields.defense.fields.total value=system.defense.total}} {{formInput systemFields.defense.fields.total value=system.defense.total}}
{{formInput systemFields.defense.fields.resistance value=system.defense.resistance}} {{formInput systemFields.defense.fields.resistance value=system.defense.resistance}}
<label> Movement : </label>{{formInput systemFields.movement.fields.base value=system.movement.base}} <label class="spaced-left"> Movement : </label>{{formInput systemFields.movement.fields.base value=system.movement.base}}
{{formInput systemFields.movement.fields.reduce value=system.defense.reduce }} {{formInput systemFields.movement.fields.reduce value=system.defense.reduce }}
</div> </div>
@@ -42,8 +42,8 @@
<img class="item-img" src="{{item.img}}" data-tooltip="{{item.name}}" /> <img class="item-img" src="{{item.img}}" data-tooltip="{{item.name}}" />
<!-- <img src="systems/fvtt-cthulhu-eternal/assets/ui/d100.svg" class="d100" />--> <!-- <img src="systems/fvtt-cthulhu-eternal/assets/ui/d100.svg" class="d100" />-->
<div class="name" data-roll-type="perk" data-tooltip="{{{item.system.description}}}"> <div class="name" data-roll-type="perk" data-action="toChat" data-item-uuid="{{item.uuid}}" data-tooltip="{{{item.system.description}}}">
{{item.name}} <a>{{item.name}}</a>
</div> </div>
<span class="flavor" data-tooltip="Flavor text">{{upperFirst item.system.flavorText}}</span> <span class="flavor" data-tooltip="Flavor text">{{upperFirst item.system.flavorText}}</span>
<span class="role" data-tooltip="Role">{{upperFirst item.system.role}}</span> <span class="role" data-tooltip="Role">{{upperFirst item.system.role}}</span>

View File

@@ -0,0 +1,14 @@
<div class="item-to-chat">
<div class="intro-chat">
<ul>
<li><strong>Malefica : {{name}}</strong></li>
<li>Domain : {{system.domain}}</li>
<li>Level : {{system.level}}</li>
<li>Time : {{system.time}}</li>
<li>Range : {{system.range}}</li>
<li>Target : {{system.target}}</li>
<li>{{{system.description}}}</li>
</ul>
</div>
</div>

View File

@@ -1,8 +1,8 @@
{{!log 'chat-message' this}}
<div class="{{cssClass}}"> <div class="{{cssClass}}">
<div class="intro-chat"> <div class="intro-chat">
<div class="intro-img"> <div class="intro-img">
<img src="{{actingCharImg}}" data-tooltip="{{actingCharName}}" /> <img src="{{actingCharImg}}" data-tooltip="{{actingCharName}}" />
{{actorName}}
</div> </div>
<div class="intro-right"> <div class="intro-right">
<ul> <ul>

12
templates/chat-perk.hbs Normal file
View File

@@ -0,0 +1,12 @@
<div class="item-to-chat">
<div class="intro-chat">
<ul>
<li><strong>Perk : {{name}}</strong></li>
<li>{{system.flavorText}}</li>
<li>Role : {{system.role}}</li>
<li>Level : {{system.level}}</li>
<li>{{{system.description}}}</li>
</ul>
</div>
</div>

14
templates/chat-ritual.hbs Normal file
View File

@@ -0,0 +1,14 @@
<div class="item-to-chat">
<div class="intro-chat">
<ul>
<li><strong>Ritual : {{name}}</strong></li>
<li>Difficulty : {{system.difficulty}}</li>
<li>Threshold : {{system.threshold}}</li>
<li>Limit : {{system.limit}}</li>
<li>Ingredients : {{system.ingredients}}</li>
<li>N. Attempts : {{system.nbAttempts}}</li>
<li>{{{system.description}}}</li>
</ul>
</div>
</div>

View File

@@ -1,17 +0,0 @@
<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>
<fieldset>
{{formField systemFields.isAdvantage value=system.isAdvantage}}
</fieldset>
<fieldset>
<legend>{{localize "HELLBORN.Label.description"}}</legend>
{{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description"
toggled=true}}
</fieldset>
</section>

View File

@@ -1,103 +0,0 @@
<section class="creature-main creature-main-{{ifThen isPlayMode 'play' 'edit'}}">
{{!log "creature-main" this}}
<fieldset>
<legend>{{localize "HELLBORN.Label.creature"}}</legend>
<div class="creature-pc creature-pc-{{ifThen isPlayMode 'play' 'edit'}}">
<div class="creature-left">
<div class="creature-left-image">
<img class="creature-img" src="{{actor.img}}" data-edit="img" data-action="editImage"
data-tooltip="{{actor.name}}" />
</div>
<fieldset class="creature-hp">
<legend>{{localize "HELLBORN.Label.Stamina"}}</legend>
<div class="flexrow">
Curr. {{formField systemFields.health.fields.staminaValue value=system.health.staminaValue}}
Max {{formField systemFields.health.fields.staminaMax value=system.health.staminaMax rootId=partId}}
</div>
</fieldset>
</div>
<div class="creature-right">
<div class="creature-name">
{{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}}
<a class="control" data-action="toggleSheet" data-tooltip="HELLBORN.ToggleSheet" data-tooltip-direction="UP">
<i class="fa-solid fa-user-{{ifThen isPlayMode 'lock' 'pen'}}"></i>
</a>
</div>
<fieldset class="creature-spec">
<legend>{{localize "HELLBORN.Label.Details"}}</legend>
{{formField systemFields.terrain value=system.terrain rootId=partId disabled=isPlayMode localize=true}}
{{formField systemFields.niche value=system.niche rootId=partId disabled=isPlayMode localize=true}}
{{formField systemFields.size value=system.size rootId=partId disabled=isPlayMode localize=true}}
<div class="flexrow rollable" data-roll-type="creature-number">
<i class="fa-regular fa-dice dice-2d6"></i>
{{formField systemFields.numberAppearing value=system.numberAppearing rootId=partId disabled=isPlayMode
localize=true}}
</div>
<div class="flexrow rollable" data-roll-type="creature-damage">
<i class="fa-regular fa-dice dice-2d6"></i>
{{formField systemFields.damage value=system.damage rootId=partId disabled=isPlayMode localize=true}}
</div>
</fieldset>
</div>
</div>
</fieldset>
<fieldset class="creature-skills creature-skills-{{ifThen isPlayMode 'play' 'edit'}}">
<legend>{{localize "HELLBORN.Label.skills"}}</legend>
<div class="creature-skill">
<img src="systems/fvtt-ftl-nomad/assets/icons/icon_combat.svg" class="icon-skill" />
<label class="rollable" data-roll-type="skill" data-skill-id="combat">{{localize
"HELLBORN.Label.combat"}}</label>
{{formInput systemFields.skills.fields.combat.fields.value value=system.skills.combat.value rootId=partId
disabled=isPlayMode type="number" }}
</div>
<div class="creature-skill">
<img src="systems/fvtt-ftl-nomad/assets/icons/icon_knowledge.svg" class="icon-skill" />
<label class="rollable" data-roll-type="skill" data-skill-id="knowledge">{{localize
"HELLBORN.Label.knowledge"}}</label>
{{formInput systemFields.skills.fields.knowledge.fields.value value=system.skills.knowledge.value
rootId=partId disabled=isPlayMode type="number"}}
</div>
<div class="creature-skill">
<img src="systems/fvtt-ftl-nomad/assets/icons/icon_social.svg" class="icon-skill" />
<label class="rollable" data-roll-type="skill" data-skill-id="social">{{localize
"HELLBORN.Label.social"}}</label>
{{formInput systemFields.skills.fields.social.fields.value value=system.skills.social.value
rootId=partId disabled=isPlayMode type="number"}}
</div>
<div class="creature-skill">
<img src="systems/fvtt-ftl-nomad/assets/icons/icon_physical.svg" class="icon-skill" />
<label class="rollable" data-roll-type="skill" data-skill-id="physical">{{localize
"HELLBORN.Label.physical"}}</label>
{{formInput systemFields.skills.fields.physical.fields.value value=system.skills.physical.value
rootId=partId disabled=isPlayMode type="number"}}
</div>
<div class="creature-skill">
<img src="systems/fvtt-ftl-nomad/assets/icons/icon_stealth.svg" class="icon-skill" />
<label class="rollable" data-roll-type="skill" data-skill-id="stealth">{{localize
"HELLBORN.Label.stealth"}}</label>
{{formInput systemFields.skills.fields.stealth.fields.value value=system.skills.stealth.value
rootId=partId disabled=isPlayMode type="number"}}
</div>
<div class="creature-skill">
<img src="systems/fvtt-ftl-nomad/assets/icons/icon_vehicles.svg" class="icon-skill" />
<label class="rollable" data-roll-type="skill" data-skill-id="vehicles">{{localize
"HELLBORN.Label.vehicles"}}</label>
{{formInput systemFields.skills.fields.vehicles.fields.value value=system.skills.vehicles.value
rootId=partId disabled=isPlayMode type="number"}}
</div>
<div class="creature-skill">
<img src="systems/fvtt-ftl-nomad/assets/icons/icon_technology.svg" class="icon-skill" />
<label class="rollable" data-roll-type="skill" data-skill-id="technology">{{localize
"HELLBORN.Label.technology"}}</label>
{{formInput systemFields.skills.fields.technology.fields.value value=system.skills.technology.value
rootId=partId disabled=isPlayMode type="number"}}
</div>
</fieldset>
</section>

View File

@@ -1,50 +0,0 @@
<section class="tab creature-{{tab.id}} {{tab.cssClass}}" data-tab="{{tab.id}}" data-group="{{tab.group}}">
<fieldset>
<legend>{{localize "HELLBORN.Label.traits"}}{{#if isEditMode}}
<a class="action" data-tooltip="{{localize "HELLBORN.Tooltip.addTrait"}}" data-tooltip-direction="UP"><i
class="fas fa-plus" data-action="createTrait"></i></a>{{/if}}
</legend>
<div class="traits">
{{#each traits as |item|}}
<div class="trait item" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}" data-drag="true">
<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 'HELLBORN.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 'HELLBORN.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>{{localize "HELLBORN.Label.abilities"}}{{#if isEditMode}}
<a class="action" data-tooltip="{{localize "HELLBORN.Tooltip.addAbility"}}" data-tooltip-direction="UP"><i
class="fas fa-plus" data-action="createAbility"></i></a>{{/if}}
</legend>
<div class="abilities">
{{#each abilities as |item|}}
{{!log 'armor' this}}
<div class="ability" 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 'HELLBORN.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 'HELLBORN.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>

57
templates/enemy-main.hbs Normal file
View File

@@ -0,0 +1,57 @@
<section class="enemy-main enemy-main-{{ifThen isPlayMode 'play' 'edit'}}">
<fieldset>
<legend>{{localize "HELLBORN.Label.character"}}</legend>
<div class="enemy-pc enemy-pc-{{ifThen isPlayMode 'play' 'edit'}}">
<div class="enemy-left">
<div class="enemy-left-image">
<img class="enemy-img" src="{{actor.img}}" data-edit="img" data-action="editImage"
data-tooltip="{{actor.name}}" />
</div>
</div>
<div class="enemy-right">
<div class="enemy-name">
{{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}}
<a class="control" data-action="toggleSheet" data-tooltip="HELLBORN.ToggleSheet" data-tooltip-direction="UP">
<i class="fa-solid fa-user-{{ifThen isPlayMode 'lock' 'pen'}}"></i>
</a>
</div>
<fieldset class="enemy-definition">
{{formField systemFields.flavorText value=system.flavorText rootId=partId disabled=isPlayMode}}
</fieldset>
</div>
</div>
</fieldset>
<fieldset class="enemy-stats enemy-stats-{{ifThen isPlayMode 'play' 'edit'}}">
<legend>{{localize "HELLBORN.Label.stats"}}</legend>
<div class="enemy-stat">
<label class="rollable" data-roll-type="stat" data-stat-id="flesh"><i class="fa-regular fa-dice"></i>{{localize
"HELLBORN.Label.flesh"}}</label>
{{formInput systemFields.stats.fields.flesh.fields.value value=system.stats.flesh.value rootId=partId disabled=isPlayMode type="number" }}
</div>
<div class="enemy-stat">
<label class="rollable" data-roll-type="stat" data-stat-id="skin"><i class="fa-regular fa-dice"></i>{{localize
"HELLBORN.Label.skin"}}</label>
{{formInput systemFields.stats.fields.skin.fields.value value=system.stats.skin.value rootId=partId disabled=isPlayMode type="number" }}
</div>
<div class="enemy-stat">
<label class="rollable" data-roll-type="stat" data-stat-id="heart"><i class="fa-regular fa-dice"></i>{{localize
"HELLBORN.Label.heart"}}</label>
{{formInput systemFields.stats.fields.heart.fields.value value=system.stats.heart.value rootId=partId disabled=isPlayMode type="number" }}
</div>
<div class="enemy-stat">
<label class="rollable" data-roll-type="stat" data-stat-id="mind"><i class="fa-regular fa-dice"></i>{{localize
"HELLBORN.Label.mind"}}</label>
{{formInput systemFields.stats.fields.mind.fields.value value=system.stats.mind.value rootId=partId disabled=isPlayMode type="number" }}
</div>
<div class="enemy-stat">
<label class="rollable" data-roll-type="stat" data-stat-id="soul"><i class="fa-regular fa-dice"></i>{{localize
"HELLBORN.Label.soul"}}</label>
{{formInput systemFields.stats.fields.soul.fields.value value=system.stats.soul.value rootId=partId disabled=isPlayMode type="number" }}
</div>
</fieldset>
</section>

87
templates/enemy-trait.hbs Normal file
View File

@@ -0,0 +1,87 @@
<section class="tab enemy-{{tab.id}} {{tab.cssClass}}" data-tab="{{tab.id}}" data-group="{{tab.group}}">
<div class="main-div">
<fieldset>
<legend>{{localize "HELLBORN.Label.characteristics"}}</legend>
<div class="counters">
<div class="flexcol">
<div>
<label>Trauma : </label>{{formInput systemFields.trauma.fields.current value=system.trauma.current}}
<label class="spaced-left"> Darkness : </label>
{{formInput systemFields.darkness.fields.value value=system.darkness.value}}
<label class="spaced-left"> Defense : </label>{{formInput systemFields.defense.fields.base value=system.defense.base}}
<label class="spaced-left"> Movement : </label>{{formInput systemFields.movement.fields.base value=system.movement.base}}
</div>
<div class="flexrow characteristics-label">
<label>&nbsp;</label><span>Curr.</span>
<label>&nbsp;</label><span>Curr.</span>
<label>&nbsp;</label><span>Base</span>
<label>&nbsp;</label><span>Base</span>
</div>
</div>
</div>
</fieldset>
<fieldset>
<legend>{{localize "HELLBORN.Label.traits"}}{{#if isEditMode}}
<a class="action" data-tooltip="{{localize " HELLBORN.Tooltip.addPerk"}}" data-tooltip-direction="UP"><i
class="fas fa-plus" data-action="createPerk"></i></a>{{/if}}
</legend>
<div class="traits">
{{#each traits as |item|}}
<div class="trait item" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}" data-drag="true">
<img class="item-img" src="{{item.img}}" data-tooltip="{{item.name}}" />
<!-- <img src="systems/fvtt-cthulhu-eternal/assets/ui/d100.svg" class="d100" />-->
<div class="name" data-roll-type="trait" data-action="toChat" data-item-uuid="{{item.uuid}}" data-tooltip="{{{item.system.description}}}">
<a>{{item.name}}</a>
</div>
<div class="controls">
<a data-tooltip="{{localize 'HELLBORN.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 'HELLBORN.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>{{localize "HELLBORN.Label.weapons"}}{{#if isEditMode}}
<a class="action" data-tooltip="{{localize " HELLBORN.Tooltip.addWeapon"}}" data-tooltip-direction="UP"><i
class="fas fa-plus" data-action="createWeapon"></i></a>{{/if}}
</legend>
<div class="weapons">
{{#each weapons as |item|}}
<div class="weapon item" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}" data-drag="true">
<img class="item-img" src="{{item.img}}" data-tooltip="{{item.name}}" />
<i class="fa-regular fa-dice"></i>
<div class="name rollable" data-roll-type="weapon" data-tooltip="{{{item.system.description}}}">
{{item.name}}
</div>
<span class="type" data-tooltip="Type">{{upperFirst item.system.weaponType}}</span>
<span class="properties" data-tooltip="Properties">{{upperFirst item.system.properties}}</span>
<a class="damage rollable" data-tooltip="Damage" data-item-id="{{item.id}}" data-action="roll"
data-roll-type="damage" data-roll-value="{{item.system.damage}}">
<i class="fa-regular fa-dice"></i>
{{item.system.damage}}</a>
<div class="controls">
<a data-tooltip="{{localize 'HELLBORN.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 'HELLBORN.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>
</div>
</section>

View File

@@ -1,19 +0,0 @@
<section class="tab vehicle-{{tab.id}} {{tab.cssClass}}" data-tab="{{tab.id}}" data-group="{{tab.group}}">
<fieldset>
<legend>{{localize "HELLBORN.Label.damages"}}</legend>
<textarea class="form-control" rows="5" name="system.damages"
data-tooltip="{{localize "HELLBORN.Tooltip.damages"}}">{{system.damages}}</textarea>
</fieldset>
<fieldset>
<legend>{{localize "HELLBORN.Label.description"}}</legend>
{{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}}
</fieldset>
<fieldset>
<legend>{{localize "HELLBORN.Label.notes"}}</legend>
{{formInput systemFields.notes enriched=enrichedNotes value=system.notes name="system.notes" toggled=true}}
</fieldset>
</section>

View File

@@ -1,54 +0,0 @@
<section class="tab vehicle-{{tab.id}} {{tab.cssClass}}" data-tab="{{tab.id}}" data-group="{{tab.group}}">
<fieldset>
<legend>{{localize "HELLBORN.Label.weapons"}}{{#if isEditMode}}
<a class="action" data-tooltip="{{localize "HELLBORN.Tooltip.addWeapon"}}" data-tooltip-direction="UP"><i
class="fas fa-plus" data-action="createWeapon"></i></a>{{/if}}
</legend>
<div class="weapons">
{{#each weapons as |item|}}
{{!log 'weapon' this}}
<div class="weapon item" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}" data-drag="true">
<img class="item-img" src="{{item.img}}" data-tooltip="{{item.name}}" />
<div class="name rollable" data-roll-type="weapon" data-tooltip="{{{item.system.description}}}">
{{item.name}}
</div>
<a class="damage rollable" data-item-id="{{item.id}}" data-action="roll" data-roll-type="damage"
data-roll-value="{{item.system.damage}}">{{localize "HELLBORN.Label.damageShort"}} :
{{item.system.damage}}</a>
<div class="controls">
<a data-tooltip="{{localize 'HELLBORN.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 'HELLBORN.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>{{localize "HELLBORN.Label.equipment"}}{{#if isEditMode}}
<a class="action" data-tooltip="{{localize "HELLBORN.Tooltip.addEquipment"}}" data-tooltip-direction="UP"><i
class="fas fa-plus" data-action="createEquipment"></i></a>{{/if}}
</legend>
<div class="equipments">
{{#each equipments as |item|}}
{{!log 'armor' this}}
<div class="equipment" 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 'HELLBORN.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 'HELLBORN.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

@@ -1,54 +0,0 @@
<section class="vehicle-main vehicle-main-{{ifThen isPlayMode 'play' 'edit'}}">
<fieldset>
<legend>{{localize "HELLBORN.Label.vehicle"}}</legend>
<div class="vehicle-pc vehicle-pc-{{ifThen isPlayMode 'play' 'edit'}}">
<div class="vehicle-left">
<div class="vehicle-left-image">
<img class="vehicle-img" src="{{actor.img}}" data-edit="img" data-action="editImage"
data-tooltip="{{actor.name}}" />
</div>
<fieldset>
<legend>{{localize "HELLBORN.Label.Agility"}}</legend>
<div class="flexrow">
{{formField systemFields.agility value=system.agility localize=true}}
</div>
</fieldset>
</div>
<div class="vehicle-right">
<div class="vehicle-name">
{{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}}
<a class="control" data-action="toggleSheet" data-tooltip="HELLBORN.ToggleSheet"
data-tooltip-direction="UP">
<i class="fa-solid fa-user-{{ifThen isPlayMode 'lock' 'pen'}}"></i>
</a>
</div>
<fieldset class="capacity ">
<legend>{{localize "HELLBORN.Label.capacity"}}</legend>
<div class="flexrow">
{{formField systemFields.armor value=system.armor localize=true}}
{{formField systemFields.force value=system.force localize=true}}
</div>
<div class="flexrow">
{{formField systemFields.range value=system.range localize=true}}
{{formField systemFields.speed value=system.speed localize=true}}
</div>
</fieldset>
<fieldset class="cargo">
<legend>{{localize "HELLBORN.Label.cargo"}}</legend>
<div class="flexrow">
{{formField systemFields.crew value=system.crew localize=true}}
{{formField systemFields.cargo value=system.cargo localize=true}}
{{formField systemFields.tonnage value=system.tonnage localize=true}}
</div>
</fieldset>
</div>
</div>
</fieldset>
</section>