diff --git a/assets/icons/deal.webp b/assets/icons/deal.webp new file mode 100644 index 0000000..2902ab4 Binary files /dev/null and b/assets/icons/deal.webp differ diff --git a/assets/icons/tarot.webp b/assets/icons/tarot.webp new file mode 100644 index 0000000..4c8078f Binary files /dev/null and b/assets/icons/tarot.webp differ diff --git a/assets/ui/sheet_background_01.webp b/assets/ui/sheet_background_01.webp new file mode 100644 index 0000000..6cc0daa Binary files /dev/null and b/assets/ui/sheet_background_01.webp differ diff --git a/css/fvtt-hellborn.css b/css/fvtt-hellborn.css index 6990823..9d7bfdc 100644 --- a/css/fvtt-hellborn.css +++ b/css/fvtt-hellborn.css @@ -9,7 +9,7 @@ :root { --font-size-standard: 0.9rem; --font-size-result: 1.4rem; - --background-image-base: linear-gradient(rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0.8)), url("../assets/ui/ftl_nomad_background_01.webp"); + --background-image-base: linear-gradient(rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0.8)), url("../assets/ui/sheet_background_01.webp"); --font-primary: "MinionProRegular"; --font-secondary: "MinionProRegular"; --font-title: "SupernaturalKnight"; @@ -22,26 +22,23 @@ --color-critical-success: #1527cc; --color-critical-failure: #8d20e7; } -.d100 { - width: 18px; - height: 18px; - color: black; - border-width: 0px; -} #logo { content: var(--logo-standard); width: 100px; height: 50px; margin-left: 15px; } +nav.tabs [data-tab] { + color: var(--title-color); +} #pause > img { content: var(--logo-standard); - height: 192px; + height: 256px; width: 256px; top: -45px; left: calc(50% - 96px); } -i.fvtt-ftl-nomad { +i.fvtt-hellborn { width: 36px; height: 36px; background-image: var(--logo-standard); @@ -53,15 +50,15 @@ i.fvtt-ftl-nomad { filter: grayscale(1); transition: 0.3s; } -.application.dialog.fvtt-ftl-nomad { +.application.dialog.fvtt-hellborn { font-family: var(--font-primary); font-size: calc(var(--font-size-standard) * 1); background-image: var(--background-image-base); } -.application.dialog.fvtt-ftl-nomad button:hover { +.application.dialog.fvtt-hellborn button:hover { background: var(--color-dark-6); } -.application.dialog.fvtt-ftl-nomad .legend { +.application.dialog.fvtt-hellborn .legend { font-family: var(--font-primary); } .chat-message, @@ -169,17 +166,6 @@ i.fvtt-ftl-nomad { min-width: 180px; display: flex; flex-direction: column; - /*.character-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; - } - }*/ } .fvtt-hellborn .character-main .character-pc .character-left .character-left-image { display: flex; @@ -217,16 +203,18 @@ i.fvtt-ftl-nomad { flex-direction: column; gap: 5px; } -.fvtt-hellborn .character-main .character-pc .character-right .character-spec label { - max-width: 6rem; +.fvtt-hellborn .character-main .character-pc .character-right .character-definition .form-group { + display: flex; + align-items: center; + margin-bottom: 4px; } -.fvtt-hellborn .character-main .character-pc .character-right .character-spec .hero-armor { - display: grid; - grid-template-columns: repeat(2, 1fr); - gap: 4px; +.fvtt-hellborn .character-main .character-pc .character-right .character-definition label { + max-width: 4rem; } -.fvtt-hellborn .character-main .character-pc .character-right .character-spec .hero-armor input { - max-width: 3rem; +.fvtt-hellborn .character-main .character-pc .character-right .character-definition input { + min-width: 16rem; + max-width: 16rem; + margin-bottom: auto; } .fvtt-hellborn .character-main .character-pc .character-right .character-name { display: flex; @@ -245,125 +233,89 @@ i.fvtt-ftl-nomad { .fvtt-hellborn .character-main .character-pc-edit { min-width: 500px; } -.fvtt-hellborn .character-main .character-skills { +.fvtt-hellborn .character-main .character-stats { background-color: var(--color-light-1); display: flex; flex-direction: column; gap: 5px; flex: 1; } -.fvtt-hellborn .character-main .character-skills .character-skill { +.fvtt-hellborn .character-main .character-stats .character-stat { display: flex; align-items: center; } -.fvtt-hellborn .character-main .character-skills .character-skill .icon-skill { +.fvtt-hellborn .character-main .character-stats .character-stat .icon-stat { width: 24px; height: 24px; margin-right: 4px; } -.fvtt-hellborn .character-main .character-skills .character-skill .rollable:hover, -.fvtt-hellborn .character-main .character-skills .character-skill .rollable:focus { +.fvtt-hellborn .character-main .character-stats .character-stat .rollable:hover, +.fvtt-hellborn .character-main .character-stats .character-stat .rollable:focus { text-shadow: 0 0 8px var(--color-shadow-primary); cursor: pointer; } -.fvtt-hellborn .character-main .character-skills .character-skill .rollable { - min-width: 4.5rem; - max-width: 4.5rem; +.fvtt-hellborn .character-main .character-stats .character-stat .rollable { + min-width: 3.5rem; + max-width: 3.5rem; } -.fvtt-hellborn .character-main .character-skills .character-skill .char-text { - margin-left: 0.5rem; +.fvtt-hellborn .character-main .character-stats .character-stat input { + min-width: 2.5rem; + max-width: 2.5rem; } -.fvtt-hellborn .character-main .character-skills .character-skill .d100 { - flex: 0; - max-width: 0.6rem; +.fvtt-hellborn .character-main .character-stats-play { + min-width: 120px; } -.fvtt-hellborn .character-main .character-skills .character-skill .form-group { - flex: 0; - padding-left: 5px; +.fvtt-hellborn .character-main .character-stats-edit { + min-width: 120px; } -.fvtt-hellborn .character-main .character-skills .character-skill .form-group .form-fields { - font-size: 1.1rem; - flex: none; - width: 40px; -} -.fvtt-hellborn .character-main .character-skill-play { - min-width: 225px; -} -.fvtt-hellborn .character-main .character-skill-edit { - min-width: 225px; -} -.fvtt-hellborn .character-biography { - background-color: var(--color-light-1); -} -.fvtt-hellborn .character-biography prose-mirror.inactive { - min-height: 40px; -} -.fvtt-hellborn .character-biography prose-mirror.active { - min-height: 150px; -} -.fvtt-hellborn .character-biography .field-label { - margin-left: 8px; -} -.fvtt-hellborn .character-biography .rank { - display: grid; - grid-template-columns: repeat(5, 1fr); - gap: 8px; -} -.fvtt-hellborn .character-biography .rank label { - min-width: 6rem; -} -.fvtt-hellborn .character-biography .rank input { - max-width: 4rem; -} -.fvtt-hellborn .character-biography .biodata { - display: grid; - grid-template-columns: repeat(2, 1fr); - gap: 8px; -} -.fvtt-hellborn .character-biography .biodata label { - min-width: 12rem; -} -.fvtt-hellborn .character-biography .resources { - display: grid; - grid-template-columns: repeat(3, 1fr); - gap: 8px; -} -.fvtt-hellborn .character-biography .resources label { - min-width: 8rem; -} -.fvtt-hellborn .character-biography .features, -.fvtt-hellborn .character-biography .biodata { - display: grid; - grid-template-columns: repeat(2, 1fr); - gap: 8px; -} -.fvtt-hellborn .character-biography .features label, -.fvtt-hellborn .character-biography .biodata label { - min-width: 3rem; -} -.fvtt-hellborn .character-biography .features .feature, -.fvtt-hellborn .character-biography .biodata .feature { - display: flex; - align-items: center; - gap: 4px; - min-width: 18rem; - max-width: 18rem; -} -.fvtt-hellborn .tab.character-skills { +.fvtt-hellborn .tab.character-status .main-div { background-color: var(--color-light-1); display: grid; grid-template-columns: 1fr; } -.fvtt-hellborn .tab.character-skills legend a { +.fvtt-hellborn .tab.character-status .main-div legend a { font-size: calc(var(--font-size-standard) * 1.4); padding-left: 5px; } -.fvtt-hellborn .tab.character-skills .skills { +.fvtt-hellborn .tab.character-status .main-div .counters { + display: flex; + direction: column; + align-items: center; + gap: 4px; + margin-left: 4px; +} +.fvtt-hellborn .tab.character-status .main-div .counters input { + min-width: 2.5rem; + max-width: 2.5rem; +} +.fvtt-hellborn .tab.character-status .main-div .ailments { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 4px; +} +.fvtt-hellborn .tab.character-status .main-div .ailments .ailment { + display: flex; + align-items: center; + gap: 4px; + margin-left: 4px; + min-width: 8rem; + max-width: 8rem; +} +.fvtt-hellborn .tab.character-status .main-div .ailments .ailment label { + min-width: 5rem; + max-width: 5rem; +} +.fvtt-hellborn .tab.character-status .main-div .ailments .ailment .item-img { + width: 24px; + height: 24px; + margin: 4px 0 0 0; +} +.fvtt-hellborn .tab.character-status .main-div .perks { display: grid; grid-template-columns: repeat(3, 1fr); gap: 4px; } -.fvtt-hellborn .tab.character-skills .skills .skill { +.fvtt-hellborn .tab.character-status .main-div .perks .perk { display: flex; align-items: center; gap: 4px; @@ -371,424 +323,222 @@ i.fvtt-ftl-nomad { min-width: 12.3rem; max-width: 12.3rem; } -.fvtt-hellborn .tab.character-skills .skills .skill .rollable:hover, -.fvtt-hellborn .tab.character-skills .skills .skill .rollable:focus { +.fvtt-hellborn .tab.character-status .main-div .perks .perk .rollable:hover, +.fvtt-hellborn .tab.character-status .main-div .perks .perk .rollable:focus { text-shadow: 0 0 8px var(--color-shadow-primary); cursor: pointer; } -.fvtt-hellborn .tab.character-skills .skills .skill .controls { +.fvtt-hellborn .tab.character-status .main-div .perks .perk .controls { font-size: 0.7rem; min-width: 1.8rem; max-width: 1.8rem; } -.fvtt-hellborn .tab.character-skills .skills .skill .score { +.fvtt-hellborn .tab.character-status .main-div .perks .perk .score { min-width: 1.2rem; max-width: 1.2rem; } -.fvtt-hellborn .tab.character-skills .skills .skill .name { +.fvtt-hellborn .tab.character-status .main-div .perks .perk .name { min-width: 10rem; max-width: 10rem; } -.fvtt-hellborn .tab.character-skills .skills .skill .item-img { +.fvtt-hellborn .tab.character-status .main-div .perks .perk .item-img { width: 24px; height: 24px; margin: 4px 0 0 0; } -.fvtt-hellborn .tab.character-status { +.fvtt-hellborn .tab.character-maleficas .main-div { background-color: var(--color-light-1); display: grid; grid-template-columns: 1fr; } -.fvtt-hellborn .tab.character-status legend a { +.fvtt-hellborn .tab.character-maleficas .main-div legend a { font-size: calc(var(--font-size-standard) * 1.4); padding-left: 5px; } -.fvtt-hellborn .tab.character-status .bonds { +.fvtt-hellborn .tab.character-maleficas .main-div .maleficas { display: grid; grid-template-columns: repeat(2, 1fr); gap: 4px; } -.fvtt-hellborn .tab.character-status .bonds .bond { +.fvtt-hellborn .tab.character-maleficas .main-div .maleficas .malefica { display: flex; align-items: center; gap: 4px; min-width: 18rem; max-width: 18rem; } -.fvtt-hellborn .tab.character-status .bonds .bond .controls { +.fvtt-hellborn .tab.character-maleficas .main-div .maleficas .malefica .controls { font-size: 0.7rem; min-width: 1.8rem; max-width: 1.8rem; } -.fvtt-hellborn .tab.character-status .bonds .bond .name { +.fvtt-hellborn .tab.character-maleficas .main-div .maleficas .malefica .name { min-width: 12rem; max-width: 12rem; } -.fvtt-hellborn .tab.character-status .bonds .bond .type { +.fvtt-hellborn .tab.character-maleficas .main-div .maleficas .malefica .type { min-width: 6rem; max-width: 6rem; } -.fvtt-hellborn .tab.character-status .bonds .bond .level { +.fvtt-hellborn .tab.character-maleficas .main-div .maleficas .malefica .level { min-width: 2rem; max-width: 2rem; } -.fvtt-hellborn .tab.character-status .bonds .bond .item-img { +.fvtt-hellborn .tab.character-maleficas .main-div .maleficas .malefica .item-img { width: 24px; height: 24px; margin: 4px 0 0 0; } -.fvtt-hellborn .tab.character-status .motivations { +.fvtt-hellborn .tab.character-maleficas .main-div .rituals { display: grid; grid-template-columns: repeat(2, 1fr); gap: 4px; } -.fvtt-hellborn .tab.character-status .motivations .motivation { +.fvtt-hellborn .tab.character-maleficas .main-div .rituals .ritual { display: flex; align-items: center; gap: 4px; min-width: 14rem; max-width: 14rem; } -.fvtt-hellborn .tab.character-status .motivations .motivation .controls { +.fvtt-hellborn .tab.character-maleficas .main-div .rituals .ritual .controls { font-size: 0.7rem; min-width: 1.8rem; max-width: 1.8rem; } -.fvtt-hellborn .tab.character-status .motivations .motivation .name { +.fvtt-hellborn .tab.character-maleficas .main-div .rituals .ritual .name { min-width: 12rem; max-width: 12rem; } -.fvtt-hellborn .tab.character-status .motivations .motivation .item-img { +.fvtt-hellborn .tab.character-maleficas .main-div .rituals .ritual .item-img { width: 24px; height: 24px; margin: 4px 0 0 0; } -.fvtt-hellborn .tab.character-status .mentaldisorders { - display: grid; - grid-template-columns: repeat(2, 1fr); - gap: 4px; -} -.fvtt-hellborn .tab.character-status .mentaldisorders .mentaldisorder { - display: flex; - align-items: center; - gap: 4px; - min-width: 18rem; - max-width: 18rem; -} -.fvtt-hellborn .tab.character-status .mentaldisorders .mentaldisorder .controls { - font-size: 0.7rem; - min-width: 1.8rem; - max-width: 1.8rem; -} -.fvtt-hellborn .tab.character-status .mentaldisorders .mentaldisorder .name { - min-width: 14rem; - max-width: 14rem; -} -.fvtt-hellborn .tab.character-status .mentaldisorders .mentaldisorder .cured { - min-width: 5rem; - max-width: 5rem; -} -.fvtt-hellborn .tab.character-status .mentaldisorders .mentaldisorder .item-img { - width: 24px; - height: 24px; - margin: 4px 0 0 0; -} -.fvtt-hellborn .tab.character-status .injuries { - display: grid; - grid-template-columns: repeat(2, 1fr); - gap: 4px; -} -.fvtt-hellborn .tab.character-status .injuries .injury { - display: flex; - align-items: center; - gap: 4px; - min-width: 16rem; - max-width: 16rem; -} -.fvtt-hellborn .tab.character-status .injuries .injury .controls { - font-size: 0.7rem; - min-width: 1.8rem; - max-width: 1.8rem; -} -.fvtt-hellborn .tab.character-status .injuries .injury .name { - min-width: 14rem; - max-width: 14rem; -} -.fvtt-hellborn .tab.character-status .injuries .injury .item-img { - width: 24px; - height: 24px; - margin: 4px 0 0 0; -} -.fvtt-hellborn .tab.character-talents { +.fvtt-hellborn .tab.character-equipment .main-div { background-color: var(--color-light-1); display: grid; grid-template-columns: 1fr; } -.fvtt-hellborn .tab.character-talents legend a { +.fvtt-hellborn .tab.character-equipment .main-div legend a { font-size: calc(var(--font-size-standard) * 1.4); padding-left: 5px; } -.fvtt-hellborn .tab.character-talents .talents { +.fvtt-hellborn .tab.character-equipment .main-div .weapons { display: grid; grid-template-columns: repeat(2, 1fr); gap: 4px; } -.fvtt-hellborn .tab.character-talents .talents .talent { +.fvtt-hellborn .tab.character-equipment .main-div .weapons .weapon { display: flex; align-items: center; gap: 4px; min-width: 13rem; max-width: 13rem; } -.fvtt-hellborn .tab.character-talents .talents .talent .rollable:hover, -.fvtt-hellborn .tab.character-talents .talents .talent .rollable:focus { +.fvtt-hellborn .tab.character-equipment .main-div .weapons .weapon .rollable:hover, +.fvtt-hellborn .tab.character-equipment .main-div .weapons .weapon .rollable:focus { text-shadow: 0 0 8px var(--color-shadow-primary); cursor: pointer; } -.fvtt-hellborn .tab.character-talents .talents .talent .controls { +.fvtt-hellborn .tab.character-equipment .main-div .weapons .weapon .controls { font-size: 0.7rem; min-width: 1.8rem; max-width: 1.8rem; } -.fvtt-hellborn .tab.character-talents .talents .talent .damage { +.fvtt-hellborn .tab.character-equipment .main-div .weapons .weapon .damage { min-width: 6rem; max-width: 6rem; } -.fvtt-hellborn .tab.character-talents .talents .talent .name { +.fvtt-hellborn .tab.character-equipment .main-div .weapons .weapon .name { min-width: 10rem; max-width: 10rem; } -.fvtt-hellborn .tab.character-talents .talents .talent .item-img { +.fvtt-hellborn .tab.character-equipment .main-div .weapons .weapon .item-img { width: 24px; height: 24px; margin: 4px 0 0 0; } -.fvtt-hellborn .tab.character-talents .languages { +.fvtt-hellborn .tab.character-equipment .main-div .armors { display: grid; grid-template-columns: repeat(2, 1fr); gap: 4px; } -.fvtt-hellborn .tab.character-talents .languages .language { +.fvtt-hellborn .tab.character-equipment .main-div .armors .armor { display: flex; align-items: center; gap: 4px; min-width: 13rem; max-width: 13rem; } -.fvtt-hellborn .tab.character-talents .languages .language .rollable:hover, -.fvtt-hellborn .tab.character-talents .languages .language .rollable:focus { - text-shadow: 0 0 8px var(--color-shadow-primary); - cursor: pointer; -} -.fvtt-hellborn .tab.character-talents .languages .language .controls { +.fvtt-hellborn .tab.character-equipment .main-div .armors .armor .controls { font-size: 0.7rem; min-width: 1.8rem; max-width: 1.8rem; } -.fvtt-hellborn .tab.character-talents .languages .language .damage { +.fvtt-hellborn .tab.character-equipment .main-div .armors .armor .protection { min-width: 6rem; max-width: 6rem; } -.fvtt-hellborn .tab.character-talents .languages .language .name { +.fvtt-hellborn .tab.character-equipment .main-div .armors .armor .name { min-width: 10rem; max-width: 10rem; } -.fvtt-hellborn .tab.character-talents .languages .language .item-img { +.fvtt-hellborn .tab.character-equipment .main-div .armors .armor .item-img { width: 24px; height: 24px; margin: 4px 0 0 0; } -.fvtt-hellborn .tab.character-talents .psionics { - display: grid; - grid-template-columns: repeat(2, 1fr); - gap: 4px; -} -.fvtt-hellborn .tab.character-talents .psionics .psionic { - display: flex; - align-items: center; - gap: 4px; - min-width: 13rem; - max-width: 13rem; -} -.fvtt-hellborn .tab.character-talents .psionics .psionic .rollable:hover, -.fvtt-hellborn .tab.character-talents .psionics .psionic .rollable:focus { - text-shadow: 0 0 8px var(--color-shadow-primary); - cursor: pointer; -} -.fvtt-hellborn .tab.character-talents .psionics .psionic .controls { - font-size: 0.7rem; - min-width: 1.8rem; - max-width: 1.8rem; -} -.fvtt-hellborn .tab.character-talents .psionics .psionic .damage { - min-width: 6rem; - max-width: 6rem; -} -.fvtt-hellborn .tab.character-talents .psionics .psionic .name { - min-width: 10rem; - max-width: 10rem; -} -.fvtt-hellborn .tab.character-talents .psionics .psionic .item-img { - width: 24px; - height: 24px; - margin: 4px 0 0 0; -} -.fvtt-hellborn .tab.character-equipment { - background-color: var(--color-light-1); - display: grid; - grid-template-columns: 1fr; -} -.fvtt-hellborn .tab.character-equipment legend a { - font-size: calc(var(--font-size-standard) * 1.4); - padding-left: 5px; -} -.fvtt-hellborn .tab.character-equipment .encumbrance { - display: grid; - grid-template-columns: repeat(4, 1fr); - gap: 4px; -} -.fvtt-hellborn .tab.character-equipment .encumbrance input { - max-width: 4rem; -} -.fvtt-hellborn .tab.character-equipment .encumbrance .encumbered { - color: red; - font-weight: bold; -} -.fvtt-hellborn .tab.character-equipment .implants { - display: grid; - grid-template-columns: repeat(2, 1fr); - gap: 4px; -} -.fvtt-hellborn .tab.character-equipment .implants .implant { - display: flex; - align-items: center; - gap: 4px; - min-width: 13rem; - max-width: 13rem; -} -.fvtt-hellborn .tab.character-equipment .implants .implant .rollable:hover, -.fvtt-hellborn .tab.character-equipment .implants .implant .rollable:focus { - text-shadow: 0 0 8px var(--color-shadow-primary); - cursor: pointer; -} -.fvtt-hellborn .tab.character-equipment .implants .implant .controls { - font-size: 0.7rem; - min-width: 1.8rem; - max-width: 1.8rem; -} -.fvtt-hellborn .tab.character-equipment .implants .implant .damage { - min-width: 6rem; - max-width: 6rem; -} -.fvtt-hellborn .tab.character-equipment .implants .implant .name { - min-width: 10rem; - max-width: 10rem; -} -.fvtt-hellborn .tab.character-equipment .implants .implant .item-img { - width: 24px; - height: 24px; - margin: 4px 0 0 0; -} -.fvtt-hellborn .tab.character-equipment .weapons { - display: grid; - grid-template-columns: repeat(2, 1fr); - gap: 4px; -} -.fvtt-hellborn .tab.character-equipment .weapons .weapon { - display: flex; - align-items: center; - gap: 4px; - min-width: 13rem; - max-width: 13rem; -} -.fvtt-hellborn .tab.character-equipment .weapons .weapon .rollable:hover, -.fvtt-hellborn .tab.character-equipment .weapons .weapon .rollable:focus { - text-shadow: 0 0 8px var(--color-shadow-primary); - cursor: pointer; -} -.fvtt-hellborn .tab.character-equipment .weapons .weapon .controls { - font-size: 0.7rem; - min-width: 1.8rem; - max-width: 1.8rem; -} -.fvtt-hellborn .tab.character-equipment .weapons .weapon .damage { - min-width: 6rem; - max-width: 6rem; -} -.fvtt-hellborn .tab.character-equipment .weapons .weapon .name { - min-width: 10rem; - max-width: 10rem; -} -.fvtt-hellborn .tab.character-equipment .weapons .weapon .item-img { - width: 24px; - height: 24px; - margin: 4px 0 0 0; -} -.fvtt-hellborn .tab.character-equipment .armors { - display: grid; - grid-template-columns: repeat(2, 1fr); - gap: 4px; -} -.fvtt-hellborn .tab.character-equipment .armors .armor { - display: flex; - align-items: center; - gap: 4px; - min-width: 13rem; - max-width: 13rem; -} -.fvtt-hellborn .tab.character-equipment .armors .armor .controls { - font-size: 0.7rem; - min-width: 1.8rem; - max-width: 1.8rem; -} -.fvtt-hellborn .tab.character-equipment .armors .armor .protection { - min-width: 6rem; - max-width: 6rem; -} -.fvtt-hellborn .tab.character-equipment .armors .armor .name { - min-width: 10rem; - max-width: 10rem; -} -.fvtt-hellborn .tab.character-equipment .armors .armor .item-img { - width: 24px; - height: 24px; - margin: 4px 0 0 0; -} -.fvtt-hellborn .tab.character-equipment .equipments { +.fvtt-hellborn .tab.character-equipment .main-div .equipments { display: grid; grid-template-columns: repeat(3, 1fr); gap: 4px; } -.fvtt-hellborn .tab.character-equipment .equipments .equipment { +.fvtt-hellborn .tab.character-equipment .main-div .equipments .equipment { display: flex; align-items: center; gap: 4px; min-width: 13rem; max-width: 13rem; } -.fvtt-hellborn .tab.character-equipment .equipments .equipment .rollable:hover, -.fvtt-hellborn .tab.character-equipment .equipments .equipment .rollable:focus { +.fvtt-hellborn .tab.character-equipment .main-div .equipments .equipment .rollable:hover, +.fvtt-hellborn .tab.character-equipment .main-div .equipments .equipment .rollable:focus { text-shadow: 0 0 8px var(--color-shadow-primary); cursor: pointer; } -.fvtt-hellborn .tab.character-equipment .equipments .equipment .controls { +.fvtt-hellborn .tab.character-equipment .main-div .equipments .equipment .controls { font-size: 0.7rem; min-width: 1.8rem; max-width: 1.8rem; } -.fvtt-hellborn .tab.character-equipment .equipments .equipment .name { +.fvtt-hellborn .tab.character-equipment .main-div .equipments .equipment .name { min-width: 10rem; max-width: 10rem; } -.fvtt-hellborn .tab.character-equipment .equipments .equipment .item-img { +.fvtt-hellborn .tab.character-equipment .main-div .equipments .equipment .item-img { width: 24px; height: 24px; margin: 4px 0 0 0; } -.fvtt-hellborn .tab.character-equipment prose-mirror.inactive { +.fvtt-hellborn .tab.character-equipment .main-div prose-mirror.inactive { min-height: 40px; } -.fvtt-hellborn .tab.character-equipment prose-mirror.active { +.fvtt-hellborn .tab.character-equipment .main-div prose-mirror.active { + min-height: 150px; +} +.fvtt-hellborn .tab.character-biography .main-div { + background-color: var(--color-light-1); + display: grid; + grid-template-columns: 1fr; +} +.fvtt-hellborn .tab.character-biography .main-div legend a { + font-size: calc(var(--font-size-standard) * 1.4); + padding-left: 5px; +} +.fvtt-hellborn .tab.character-biography .main-div prose-mirror.inactive { + min-height: 40px; +} +.fvtt-hellborn .tab.character-biography .main-div prose-mirror.active { min-height: 150px; } .fvtt-hellborn .vehicle-content { @@ -2021,6 +1771,198 @@ i.fvtt-ftl-nomad { .fvtt-hellborn .armor-content label { flex: 10%; } +.fvtt-hellborn .deal-content { + font-family: var(--font-primary); + font-size: calc(var(--font-size-standard) * 1); + color: var(--color-dark-1); + background-image: var(--background-image-base); + background-repeat: no-repeat; + background-size: 100% 100%; +} +.fvtt-hellborn .deal-content input:disabled, +.fvtt-hellborn .deal-content select:disabled { + background-color: rgba(0, 0, 0, 0.2); + border-color: transparent; + color: var(--color-dark-3); +} +.fvtt-hellborn .deal-content input, +.fvtt-hellborn .deal-content select { + background-color: rgba(0, 0, 0, 0.1); + border-color: var(--color-dark-6); + color: var(--color-dark-2); +} +.fvtt-hellborn .deal-content input[name="name"] { + height: 40px; + margin-right: 10px; + font-family: var(--font-title); + font-size: calc(var(--font-size-standard) * 1.2); + font-weight: bold; + border: none; + margin-top: 4px; +} +.fvtt-hellborn .deal-content fieldset { + margin-bottom: 4px; + border-radius: 4px; +} +.fvtt-hellborn .deal-content .form-fields input, +.fvtt-hellborn .deal-content .form-fields select { + text-align: center; + font-size: calc(var(--font-size-standard) * 1); +} +.fvtt-hellborn .deal-content .form-fields select { + font-family: var(--font-secondary); + font-size: calc(var(--font-size-standard) * 1); +} +.fvtt-hellborn .deal-content legend { + font-family: var(--font-secondary); + font-size: calc(var(--font-size-standard) * 1.2); + font-weight: bold; + letter-spacing: 1px; +} +.fvtt-hellborn .deal-content .form-fields { + padding-top: 4px; +} +.fvtt-hellborn .deal-content label { + font-family: var(--font-secondary); + font-size: calc(var(--font-size-standard) * 1); + flex: 50%; +} +.fvtt-hellborn .deal-content .align-top { + align-self: flex-start; + padding: 0.1rem; + margin-right: 0.2rem; +} +.fvtt-hellborn .deal-content .shift-right { + margin-left: 2rem; +} +.fvtt-hellborn .deal-content fieldset { + margin-top: 8px; + background-color: var(--color-light-1); +} +.fvtt-hellborn .deal-content fieldset .form-group { + display: flex; + align-items: center; +} +.fvtt-hellborn .deal-content fieldset .form-group.long-input input { + min-width: 24rem; + max-width: 24rem; + text-align: left; +} +.fvtt-hellborn .deal-content fieldset .form-group input { + min-width: 12rem; + max-width: 12rem; +} +.fvtt-hellborn .deal-content fieldset .form-group select { + min-width: 12rem; + max-width: 12rem; +} +.fvtt-hellborn .deal-content .header { + background-color: var(--color-light-1); + display: flex; +} +.fvtt-hellborn .deal-content .header img { + width: 50px; + height: 50px; +} +.fvtt-hellborn .deal-content label { + flex: 10%; +} +.fvtt-hellborn .tarot-content { + font-family: var(--font-primary); + font-size: calc(var(--font-size-standard) * 1); + color: var(--color-dark-1); + background-image: var(--background-image-base); + background-repeat: no-repeat; + background-size: 100% 100%; +} +.fvtt-hellborn .tarot-content input:disabled, +.fvtt-hellborn .tarot-content select:disabled { + background-color: rgba(0, 0, 0, 0.2); + border-color: transparent; + color: var(--color-dark-3); +} +.fvtt-hellborn .tarot-content input, +.fvtt-hellborn .tarot-content select { + background-color: rgba(0, 0, 0, 0.1); + border-color: var(--color-dark-6); + color: var(--color-dark-2); +} +.fvtt-hellborn .tarot-content input[name="name"] { + height: 40px; + margin-right: 10px; + font-family: var(--font-title); + font-size: calc(var(--font-size-standard) * 1.2); + font-weight: bold; + border: none; + margin-top: 4px; +} +.fvtt-hellborn .tarot-content fieldset { + margin-bottom: 4px; + border-radius: 4px; +} +.fvtt-hellborn .tarot-content .form-fields input, +.fvtt-hellborn .tarot-content .form-fields select { + text-align: center; + font-size: calc(var(--font-size-standard) * 1); +} +.fvtt-hellborn .tarot-content .form-fields select { + font-family: var(--font-secondary); + font-size: calc(var(--font-size-standard) * 1); +} +.fvtt-hellborn .tarot-content legend { + font-family: var(--font-secondary); + font-size: calc(var(--font-size-standard) * 1.2); + font-weight: bold; + letter-spacing: 1px; +} +.fvtt-hellborn .tarot-content .form-fields { + padding-top: 4px; +} +.fvtt-hellborn .tarot-content label { + font-family: var(--font-secondary); + font-size: calc(var(--font-size-standard) * 1); + flex: 50%; +} +.fvtt-hellborn .tarot-content .align-top { + align-self: flex-start; + padding: 0.1rem; + margin-right: 0.2rem; +} +.fvtt-hellborn .tarot-content .shift-right { + margin-left: 2rem; +} +.fvtt-hellborn .tarot-content fieldset { + margin-top: 8px; + background-color: var(--color-light-1); +} +.fvtt-hellborn .tarot-content fieldset .form-group { + display: flex; + align-items: center; +} +.fvtt-hellborn .tarot-content fieldset .form-group.long-input input { + min-width: 24rem; + max-width: 24rem; + text-align: left; +} +.fvtt-hellborn .tarot-content fieldset .form-group input { + min-width: 12rem; + max-width: 12rem; +} +.fvtt-hellborn .tarot-content fieldset .form-group select { + min-width: 12rem; + max-width: 12rem; +} +.fvtt-hellborn .tarot-content .header { + background-color: var(--color-light-1); + display: flex; +} +.fvtt-hellborn .tarot-content .header img { + width: 50px; + height: 50px; +} +.fvtt-hellborn .tarot-content label { + flex: 10%; +} .fvtt-hellborn .ritual-content { font-family: var(--font-primary); font-size: calc(var(--font-size-standard) * 1); @@ -2376,6 +2318,23 @@ i.fvtt-ftl-nomad { margin-top: 8px; background-color: var(--color-light-1); } +.fvtt-hellborn .species-trait-content fieldset .form-group { + display: flex; + align-items: center; +} +.fvtt-hellborn .species-trait-content fieldset .form-group.long-input input { + min-width: 24rem; + max-width: 24rem; + text-align: left; +} +.fvtt-hellborn .species-trait-content fieldset .form-group input { + min-width: 12rem; + max-width: 12rem; +} +.fvtt-hellborn .species-trait-content fieldset .form-group select { + min-width: 12rem; + max-width: 12rem; +} .fvtt-hellborn .species-trait-content .header { background-color: var(--color-light-1); display: flex; diff --git a/fvtt-hellborn.mjs b/fvtt-hellborn.mjs index 5a1c797..161281c 100644 --- a/fvtt-hellborn.mjs +++ b/fvtt-hellborn.mjs @@ -45,6 +45,8 @@ Hooks.once("init", function () { malefica: models.HellbornMalefica, equipment: models.HellbornEquipment, armor: models.HellbornArmor, + deal: models.HellbornDeal, + tarot: models.HellbornTarot, "species-trait": models.HellbornSpeciesTrait } @@ -62,6 +64,8 @@ Hooks.once("init", function () { foundry.documents.collections.Items.registerSheet("fvtt-hellborn", applications.HellbornMaleficaSheet, { types: ["malefica"], makeDefault: true }) foundry.documents.collections.Items.registerSheet("fvtt-hellborn", applications.HellbornSpeciesTraitSheet, { types: ["species-trait"], makeDefault: true }) foundry.documents.collections.Items.registerSheet("fvtt-hellborn", applications.HellbornArmorSheet, { types: ["armor"], makeDefault: true }) + foundry.documents.collections.Items.registerSheet("fvtt-hellborn", applications.HellbornTarotSheet, { types: ["tarot"], makeDefault: true }) + foundry.documents.collections.Items.registerSheet("fvtt-hellborn", applications.HellbornDealSheet, { types: ["deal"], makeDefault: true }) // Other Document Configuration CONFIG.ChatMessage.documentClass = documents.HellbornChatMessage diff --git a/lang/en.json b/lang/en.json index 78cf050..ef3e469 100644 --- a/lang/en.json +++ b/lang/en.json @@ -7,8 +7,11 @@ "label": "Protection" } }, - "heroPoints": { - "label": "Hero Points" + "pronouns": { + "label": "Pronouns" + }, + "trait": { + "label": "Trait" }, "credits": { "label": "Credits" @@ -289,6 +292,29 @@ } } }, + "Tarot": { + "FIELDS": { + "description": { + "label": "Description" + }, + "bonus": { + "label": "Bonus" + }, + "orientation": { + "label": "Orientation" + } + } + }, + "Deal": { + "FIELDS": { + "description": { + "label": "Description" + }, + "promisor": { + "label": "Promisor" + } + } + }, "Ritual": { "FIELDS": { "cost": { @@ -315,6 +341,23 @@ } }, "Label": { + "trauma": "Trauma", + "stats": "Stats", + "appearance": "Appearance", + "flesh": "Flesh", + "skin": "Skin", + "heart": "Heart", + "mind": "Mind", + "soul": "Soul", + "Counters": "Counters", + "perks": "Perks", + "maleficas": "Maleficas", + "rituals": "Rituals", + "speciesTraits": "Species Traits", + "species": "Species", + "ailments": "Ailments", + "positiveEffect": "Positive Effect", + "negativeEffect": "Negative Effect", "damages": "Damages", "modifications": "Modifications", "abilities": "Abilities", @@ -568,11 +611,9 @@ "malefica": "Malefica", "perk": "Perk", "weapon": "Weapon", - "armor": "Armor" - - - - + "armor": "Armor", + "tarot": "Tarot", + "deal": "Deal" } } } \ No newline at end of file diff --git a/module/applications/_module.mjs b/module/applications/_module.mjs index 8bd1717..cec277c 100644 --- a/module/applications/_module.mjs +++ b/module/applications/_module.mjs @@ -9,3 +9,5 @@ export { default as HellbornSpeciesTraitSheet } from "./sheets/species-trait-she export { default as HellbornPerkSheet } from "./sheets/perk-sheet.mjs" export { default as HellbornMaleficaSheet } from "./sheets/malefica-sheet.mjs" export { default as HellbornArmorSheet } from "./sheets/armor-sheet.mjs" +export { default as HellbornTarotSheet } from "./sheets/tarot-sheet.mjs" +export { default as HellbornDealSheet } from "./sheets/deal-sheet.mjs" diff --git a/module/applications/sheets/base-actor-sheet.mjs b/module/applications/sheets/base-actor-sheet.mjs index 7099edc..9ebfcd3 100644 --- a/module/applications/sheets/base-actor-sheet.mjs +++ b/module/applications/sheets/base-actor-sheet.mjs @@ -66,8 +66,7 @@ export default class HellbornActorSheet extends HandlebarsApplicationMixin(found actor: this.document, system: this.document.system, source: this.document.toObject(), - isEncumbered: this.document.system.isEncumbered(), - enrichedDescription: await TextEditor.enrichHTML(this.document.system.description, { async: true }), + enrichedBackstory: await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.backstory, { async: true }), isEditMode: this.isEditMode, isPlayMode: this.isPlayMode, isEditable: this.isEditable, @@ -99,7 +98,7 @@ export default class HellbornActorSheet extends HandlebarsApplicationMixin(found dragover: this._onDragOver.bind(this), drop: this._onDrop.bind(this), } - return new DragDrop(d) + return new foundry.applications.ux.DragDrop.implementation(d) }) } diff --git a/module/applications/sheets/character-sheet.mjs b/module/applications/sheets/character-sheet.mjs index 3083ee4..0ae8e75 100644 --- a/module/applications/sheets/character-sheet.mjs +++ b/module/applications/sheets/character-sheet.mjs @@ -15,11 +15,9 @@ export default class HellbornCharacterSheet extends HellbornActorSheet { createEquipment: HellbornCharacterSheet.#onCreateEquipment, createArmor: HellbornCharacterSheet.#onCreateArmor, createWeapon: HellbornCharacterSheet.#onCreateWeapon, - createTalent: HellbornCharacterSheet.#onCreateTalent, - createImplant: HellbornCharacterSheet.#onCreateImplant, - createPsionic: HellbornCharacterSheet.#onCreatePsionic, - createLanguage: HellbornCharacterSheet.#onCreateLanguage - + createDeal: HellbornCharacterSheet.#onCreateDeal, + createMalefica: HellbornCharacterSheet.#onCreateMalefica, + createRitual: HellbornCharacterSheet.#onCreateRitual, }, } @@ -31,8 +29,11 @@ export default class HellbornCharacterSheet extends HellbornActorSheet { tabs: { template: "templates/generic/tab-navigation.hbs", }, - talents: { - template: "systems/fvtt-hellborn/templates/character-talents.hbs", + status: { + template: "systems/fvtt-hellborn/templates/character-status.hbs", + }, + maleficas: { + template: "systems/fvtt-hellborn/templates/character-maleficas.hbs", }, equipment: { template: "systems/fvtt-hellborn/templates/character-equipment.hbs", @@ -44,7 +45,7 @@ export default class HellbornCharacterSheet extends HellbornActorSheet { /** @override */ tabGroups = { - sheet: "talents", + sheet: "status", } /** @@ -53,7 +54,8 @@ export default class HellbornCharacterSheet extends HellbornActorSheet { */ #getTabs() { const tabs = { - talents: { id: "talents", group: "sheet", icon: "fa-solid fa-compass", label: "HELLBORN.Label.talents" }, + status: { id: "status", group: "sheet", icon: "fa-solid fa-compass", label: "HELLBORN.Label.status" }, + maleficas: { id: "maleficas", group: "sheet", icon: "fa-solid fa-compass", label: "HELLBORN.Label.maleficas" }, equipment: { id: "equipment", group: "sheet", icon: "fa-solid fa-shapes", label: "HELLBORN.Label.equipment" }, biography: { id: "biography", group: "sheet", icon: "fa-solid fa-book", label: "HELLBORN.Label.biography" }, } @@ -69,28 +71,27 @@ export default class HellbornCharacterSheet extends HellbornActorSheet { 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 } /** @override */ async _preparePartContext(partId, context) { const doc = this.document + context.systemFields = this.document.system.schema.fields switch (partId) { case "main": break - case "talents": - context.tab = context.tabs.talents - context.talents = doc.itemTypes.talent - context.talents.sort((a, b) => a.name.localeCompare(b.name)) - context.implants = doc.itemTypes.implant - context.implants.sort((a, b) => a.name.localeCompare(b.name)) - context.psionics = doc.itemTypes.psionic - context.psionics.sort((a, b) => a.name.localeCompare(b.name)) - context.languages = doc.itemTypes.language - context.languages.sort((a, b) => a.name.localeCompare(b.name)) + case "status": + context.tab = context.tabs.status + context.perks = doc.itemTypes.perk + context.perks.sort((a, b) => a.name.localeCompare(b.name)) + break; + case "maleficas": + context.tab = context.tabs.maleficas + context.maleficas = doc.itemTypes.malefica + context.maleficas.sort((a, b) => a.name.localeCompare(b.name)) + context.rituals = doc.itemTypes.ritual + context.rituals.sort((a, b) => a.name.localeCompare(b.name)) break case "equipment": context.tab = context.tabs.equipment @@ -103,8 +104,21 @@ export default class HellbornCharacterSheet extends HellbornActorSheet { break case "biography": context.tab = context.tabs.biography - context.enrichedDescription = await TextEditor.enrichHTML(doc.system.description, { async: true }) - context.enrichedNotes = await TextEditor.enrichHTML(doc.system.notes, { async: true }) + context.deals = doc.itemTypes.deal + context.deals.sort((a, b) => a.name.localeCompare(b.name)) + context.tarot = doc.itemTypes.tarot + context.enrichedBackstory = await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.backstory, { async: true }) + context.enrichedAppearance = await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.appearance, { async: true }) + context.enrichedScars = await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.scars, { async: true }) + context.enrichedLikes = await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.likes, { async: true }) + context.enrichedDislikes = await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.dislikes, { async: true }) + context.enrichedFears = await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.fears, { async: true }) + context.enrichedVices = await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.vices, { async: true }) + context.enrichedGoals = await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.goals, { async: true }) + context.enrichedAmbitions = await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.ambitions, { async: true }) + context.enrichedValues = await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.values, { async: true }) + context.enrichedBonds = await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.bonds, { async: true }) + context.enrichedNotes = await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.notes, { async: true }) break } return context @@ -115,6 +129,18 @@ export default class HellbornCharacterSheet extends HellbornActorSheet { this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("HELLBORN.Label.newEquipment"), type: "equipment" }]) } + static #onCreateDeal(event, target) { + this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("HELLBORN.Label.newDeal"), type: "deal" }]) + } + + static #onCreateMalefica(event, target) { + this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("HELLBORN.Label.newMalefica"), type: "malefica" }]) + } + + static #onCreateRitual(event, target) { + this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("HELLBORN.Label.newRitual"), type: "ritual" }]) + } + static #onCreateWeapon(event, target) { this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("HELLBORN.Label.newWeapon"), type: "weapon" }]) } @@ -123,21 +149,6 @@ export default class HellbornCharacterSheet extends HellbornActorSheet { this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("HELLBORN.Label.newArmor"), type: "armor" }]) } - static #onCreateTalent(event, target) { - this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("HELLBORN.Label.newTalent"), type: "talent" }]) - } - - static #onCreateImplant(event, target) { - this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("HELLBORN.Label.newImplant"), type: "implant" }]) - } - - static #onCreatePsionic(event, target) { - this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("HELLBORN.Label.newPsionic"), type: "psionic" }]) - } - - static #onCreateLanguage(event, target) { - this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("HELLBORN.Label.newLanguage"), type: "language" }]) - } /** @@ -158,10 +169,11 @@ export default class HellbornCharacterSheet extends HellbornActorSheet { const rollType = $(event.currentTarget).data("roll-type") let item let li + let statKey switch (rollType) { - case "skill": - let skillId = $(event.currentTarget).data("skill-id"); - item = this.actor.system.skills[skillId]; + case "stat": + statKey = $(event.currentTarget).data("stat-id"); + item = this.actor.system.stats[statKey]; break case "weapon": case "damage": diff --git a/module/applications/sheets/deal-sheet.mjs b/module/applications/sheets/deal-sheet.mjs new file mode 100644 index 0000000..0e948d7 --- /dev/null +++ b/module/applications/sheets/deal-sheet.mjs @@ -0,0 +1,28 @@ +import HellbornItemSheet from "./base-item-sheet.mjs" + +export default class HellbornDealSheet extends HellbornItemSheet { + /** @override */ + static DEFAULT_OPTIONS = { + classes: ["deal"], + position: { + width: 600, + }, + window: { + contentClasses: ["deal-content"], + }, + } + + /** @override */ + static PARTS = { + main: { + template: "systems/fvtt-hellborn/templates/deal.hbs", + }, + } + + /** @override */ + async _prepareContext() { + const context = await super._prepareContext() + context.enrichedDescription = await TextEditor.enrichHTML(this.document.system.description, { async: true }) + return context + } +} diff --git a/module/applications/sheets/tarot-sheet.mjs b/module/applications/sheets/tarot-sheet.mjs new file mode 100644 index 0000000..8dbc2f6 --- /dev/null +++ b/module/applications/sheets/tarot-sheet.mjs @@ -0,0 +1,30 @@ +import HellbornItemSheet from "./base-item-sheet.mjs" + +export default class HellbornTarotSheet extends HellbornItemSheet { + /** @override */ + static DEFAULT_OPTIONS = { + classes: ["tarot"], + position: { + width: 800, + height: 640 + }, + window: { + contentClasses: ["tarot-content"], + }, + } + + /** @override */ + static PARTS = { + main: { + template: "systems/fvtt-hellborn/templates/tarot.hbs", + }, + } + + /** @override */ + async _prepareContext() { + const context = await super._prepareContext() + context.enrichedPositiveEffect = await TextEditor.enrichHTML(this.document.system.positiveEffect, { async: true }) + context.enrichedNegativeEffect = await TextEditor.enrichHTML(this.document.system.negativeEffect, { async: true }) + return context + } +} diff --git a/module/config/system.mjs b/module/config/system.mjs index 49e4241..ddb82a3 100644 --- a/module/config/system.mjs +++ b/module/config/system.mjs @@ -7,6 +7,30 @@ export const ASCII = ` ` +export const AILMENTS = { + "bleeding": { id: "bleeding", label: "Bleeding" }, + "blinded": { id: "blinded", label: "Blinded" }, + "burning": { id: "burning", label: "Burning" }, + "dazed": { id: "dazed", label: "Dazed" }, + "deafened": { id: "deafened", label: "Deafened" }, + "exposes": { id: "exposed", label: "Exposed" }, + "mortally": { id: "mortal", label: "Mortal" }, + "muted": { id: "muted", label: "Muted" }, + "prone": { id: "prone", label: "Prone" }, + "immobilized": { id: "immobilized", label: "Immobile" }, + "shaken": { id: "shaken", label: "Shaken" }, + "stunned": { id: "stunned", label: "Stunned" }, + "winded": { id: "winded", label: "Winded" } +} + +export const STATS = { + "flesh": { id: "flesh", label: "Flesh" }, + "skin": { id: "skin", label: "Skin" }, + "heart": { id: "heart", label: "Heart" }, + "mind": { id: "mind", label: "Mind" }, + "soul": { id: "soul", label: "Soul" } +} + export const PERK_ROLES = { "abbetor": { id: "abbetor", label: "Abbetor" }, "blade": { id: "blade", label: "Blade" }, @@ -68,47 +92,6 @@ export const ATTACK_MODIFIERS = { "aware": -1 } -export const TRIAGE_RESULTS = { - "none": { id: "none", dice:0, label: "HELLBORN.TriageResults.None" }, - "death": { id: "death", dice:3, label: "HELLBORN.TriageResults.Death" }, - "critical": { id: "critical", dice:4, label: "HELLBORN.TriageResults.Critical" }, - "severe": { id: "severe", dice:7, label: "HELLBORN.TriageResults.Severe" }, - "moderate": { id: "moderate", dice:10, label: "HELLBORN.TriageResults.Moderate" }, - "fleshwound": { id: "fleshwound", dice:12, label: "HELLBORN.TriageResults.FleshWound" } -} - -export const CREATURE_TERRAIN_TYPES = { - "cave": { id: "cave", label: "HELLBORN.Creature.Terrain.Cave", niche:0, size: 0 }, - "coast": { id: "coast", label: "HELLBORN.Creature.Terrain.Coast", niche:1, size: 0 }, - "desert": { id: "desert", label: "HELLBORN.Creature.Terrain.Desert", niche:-1, size: -1 }, - "forest": { id: "forest", label: "HELLBORN.Creature.Terrain.Forest", niche:1, size: 1 }, - "jungle": { id: "jungle", label: "HELLBORN.Creature.Terrain.Jungle", niche:1, size: 1 }, - "mixed": { id: "mixed", label: "HELLBORN.Creature.Terrain.Mixed", niche:0, size: 0 }, - "mountain": { id: "mountain", label: "HELLBORN.Creature.Terrain.Mountain", niche:-1, size: -1 }, - "ocean": { id: "ocean", label: "HELLBORN.Creature.Terrain.Ocean", niche:-1, size: 1 }, - "river": { id: "river", label: "HELLBORN.Creature.Terrain.River", niche:1, size: 0 }, - "ruins": { id: "ruins", label: "HELLBORN.Creature.Terrain.Ruins", niche:0, size: 1 }, - "savannah": { id: "savannah", label: "HELLBORN.Creature.Terrain.Savannah", niche:0, size: 1 }, - "shallows": { id: "shallows", label: "HELLBORN.Creature.Terrain.Shallows", niche:1, size: 0 }, - "swamp": { id: "swamp", label: "HELLBORN.Creature.Terrain.Swamp", niche:1, size: 1 } -} - -export const CREATURE_NICHES = { - "prey": { id: "prey", label: "HELLBORN.Creature.Niche.Prey" }, - "opportunist": { id: "opportunist", label: "HELLBORN.Creature.Niche.Opportunist" }, - "herbivore": { id: "herbivore", label: "HELLBORN.Creature.Niche.Herbivore" }, - "predator": { id: "predator", label: "HELLBORN.Creature.Niche.Predator" } -} - -export const CREATURE_SIZES = { - "tiny": { id: "tiny", label: "HELLBORN.Creature.Size.Tiny" }, - "small": { id: "small", label: "HELLBORN.Creature.Size.Small" }, - "medium": { id: "medium", label: "HELLBORN.Creature.Size.Medium" }, - "large": { id: "large", label: "HELLBORN.Creature.Size.Large" }, - "giant": { id: "giant", label: "HELLBORN.Creature.Size.Giant" }, - "titanic": { id: "titanic", label: "HELLBORN.Creature.Size.Titanic" } -} - export const MODIFIER_CHOICES = { "easy": { id: "easy", label: "HELLBORN.Label.Easy", value :"1" }, "moderate": { id: "moderate", label: "HELLBORN.Label.Moderate", value: "0" }, @@ -117,24 +100,14 @@ export const MODIFIER_CHOICES = { "impossible": { id: "impossible", label: "HELLBORN.Label.Impossible", value: "-4" } } -export const STARSHIP_HULL = { - "pod": { id: "pod", label: "HELLBORN.Starship.Hull.Pod" }, - "micro": { id: "micro", label: "HELLBORN.Starship.Hull.Micro" }, - "small": { id: "small", label: "HELLBORN.Starship.Hull.Small" }, - "scout": { id: "scout", label: "HELLBORN.Starship.Hull.Scout" }, - "picket": { id: "picket", label: "HELLBORN.Starship.Hull.Picket" }, - "destroyer": { id: "destroyer", label: "HELLBORN.Starship.Hull.Destroyer" }, - "cruiser": { id: "cruiser", label: "HELLBORN.Starship.Hull.Cruiser" }, - "battleship": { id: "battleship", label: "HELLBORN.Starship.Hull.Battleship" }, - "carrier": { id: "carrier", label: "HELLBORN.Starship.Hull.Carrier" } -} - /** * Include all constant definitions within the SYSTEM global export * @type {Object} */ export const SYSTEM = { id: SYSTEM_ID, + AILMENTS, + STATS, PERK_ROLES, PERK_LEVELS, MALEFICA_LEVELS, @@ -143,10 +116,5 @@ export const SYSTEM = { ATTACK_MODIFIERS, WEAPON_TYPES, RANGED_SUBTYPES, - TRIAGE_RESULTS, - CREATURE_TERRAIN_TYPES, - CREATURE_SIZES, - CREATURE_NICHES, - STARSHIP_HULL, ASCII } diff --git a/module/documents/item.mjs b/module/documents/item.mjs index e8a2d23..bef80fe 100644 --- a/module/documents/item.mjs +++ b/module/documents/item.mjs @@ -6,6 +6,8 @@ export const defaultItemImg = { perk: "systems/fvtt-hellborn/assets/icons/perk.webp", "species-trait": "systems/fvtt-hellborn/assets/icons/species-trait.webp", armor: "systems/fvtt-hellborn/assets/icons/armor.webp", + deal: "systems/fvtt-hellborn/assets/icons/deal.webp", + tarot: "systems/fvtt-hellborn/assets/icons/tarot.webp", } export default class HellbornItem extends Item { diff --git a/module/models/_module.mjs b/module/models/_module.mjs index b0e7716..7036bcd 100644 --- a/module/models/_module.mjs +++ b/module/models/_module.mjs @@ -8,3 +8,5 @@ export { default as HellbornMalefica } from "./malefica.mjs" export { default as HellbornSpeciesTrait } from "./species-trait.mjs" export { default as HellbornWeapon } from "./weapon.mjs" export { default as HellbornArmor } from "./armor.mjs" +export { default as HellbornTarot } from "./tarot.mjs" +export { default as HellbornDeal } from "./deal.mjs" diff --git a/module/models/character.mjs b/module/models/character.mjs index 511b95d..415c766 100644 --- a/module/models/character.mjs +++ b/module/models/character.mjs @@ -7,51 +7,100 @@ export default class HellbornActor extends foundry.abstract.TypeDataModel { const requiredInteger = { required: true, nullable: false, integer: true } const schema = {} - schema.description = new fields.HTMLField({ required: true, textSearch: true }) + + // Ailments + const ailmentField = (label) => { + const schema = { + enabled: new fields.BooleanField({ required: true, initial: false }), + label: new fields.StringField({ required: true, initial: label }) + } + return new fields.SchemaField(schema, { label }) + } + schema.ailments = new fields.SchemaField( + Object.values(SYSTEM.AILMENTS).reduce((obj, ailment) => { + obj[ailment.id] = ailmentField(ailment.label) + return obj + }, {}), + ) + + // Stats + 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.backstory = new fields.HTMLField({ required: true, textSearch: true }) + schema.appearance = new fields.HTMLField({ required: true, textSearch: true }) + schema.scars = new fields.HTMLField({ required: true, textSearch: true }) + schema.likes = new fields.HTMLField({ required: true, textSearch: true }) + schema.dislikes = new fields.HTMLField({ required: true, textSearch: true }) + schema.fears = new fields.HTMLField({ required: true, textSearch: true }) + schema.vices = new fields.HTMLField({ required: true, textSearch: true }) + schema.goals = new fields.HTMLField({ required: true, textSearch: true }) + schema.ambitions = new fields.HTMLField({ required: true, textSearch: true }) + schema.values = new fields.HTMLField({ required: true, textSearch: true }) + schema.bonds = new fields.HTMLField({ required: true, textSearch: true }) schema.notes = new fields.HTMLField({ required: true, textSearch: true }) - schema.name = new fields.StringField({ required: true, nullable: false, initial: "" }) + schema.pronouns = new fields.StringField({ required: true, nullable: false, initial: "" }) schema.species = new fields.StringField({ required: true, nullable: false, initial: "" }) schema.trait = new fields.StringField({ required: true, nullable: false, initial: "" }) - schema.upright = new fields.StringField({ required: true, nullable: false, initial: "" }) - schema.reversed = new fields.StringField({ required: true, nullable: false, initial: "" }) - schema.heroPoints = new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) - - schema.health = new fields.SchemaField({ - staminaValue: new fields.NumberField({ ...requiredInteger, initial: 1, min: 0 }), - staminaMax: new fields.NumberField({ ...requiredInteger, initial: 1, min: 0 }), - wounds: new fields.NumberField({ ...requiredInteger, initial:0, min: 0 }), - triageResults: new fields.StringField({ required: true, nullable: false, initial: "none", choices: SYSTEM.TRIAGE_RESULTS }) + schema.mortality = new fields.SchemaField({ + current: new fields.NumberField({ ...requiredInteger, initial: 1, min: 0 }), + max: new fields.NumberField({ ...requiredInteger, initial: 1, min: 0 }), }) - schema.enc = new fields.SchemaField({ - value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), - max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) + schema.trauma = new fields.SchemaField({ + current: new fields.NumberField({ ...requiredInteger, initial: 1, min: 0 }), + max: new fields.NumberField({ ...requiredInteger, initial: 1, min: 0 }), }) - schema.armor = new fields.SchemaField({ - value: new fields.NumberField({ ...requiredInteger, initial: 0, 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.credits = new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) - schema.rank = new fields.SchemaField({ - experienced: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 5 }), - expert: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 5 }), - veteran: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 5 }), - elite: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 5 }), - legend: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 5 }) + 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.experience = new fields.SchemaField({ + training: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + current: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), + total: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) }) schema.biodata = new fields.SchemaField({ age: new fields.NumberField({ ...requiredInteger, initial: 15, min: 6 }), height: new fields.NumberField({ ...requiredInteger, initial: 170, min: 50 }), - weight: new fields.NumberField({ ...requiredInteger, initial: 70, min: 1 }), - gender: new fields.StringField({ required: true, nullable: false, initial: "" }), - home: new fields.StringField({ required: true, nullable: false, initial: "" }), birthplace: new fields.StringField({ required: true, nullable: false, initial: "" }), - eyes: new fields.StringField({ required: true, nullable: false, initial: "" }), - hair: new fields.StringField({ required: true, nullable: false, initial: "" }) + home: new fields.StringField({ required: true, nullable: false, initial: "" }), + weight: new fields.NumberField({ ...requiredInteger, initial: 70, min: 1 }), + apparentAge: new fields.NumberField({ ...requiredInteger, initial: 20, min: 1 }), + chronologicalAge: new fields.NumberField({ ...requiredInteger, initial: 20, min: 1 }), + dod: new fields.StringField({ required: true, nullable: false, initial: "" }), + soul: new fields.StringField({ required: true, nullable: false, initial: "" }), + aliases: new fields.StringField({ required: true, nullable: false, initial: "" }) }) return schema @@ -65,10 +114,6 @@ export default class HellbornActor extends foundry.abstract.TypeDataModel { } - isEncumbered() { - return this.enc.value > this.enc.max - } - /** */ /** * Rolls a dice for a character. diff --git a/module/models/deal.mjs b/module/models/deal.mjs new file mode 100644 index 0000000..9f4c7f5 --- /dev/null +++ b/module/models/deal.mjs @@ -0,0 +1,16 @@ +import { SYSTEM } from "../config/system.mjs"; + +export default class HellbornDeal extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields; + const schema = {}; + + schema.promisor = new fields.StringField({ required: true, initial: "" }); + schema.description = new fields.HTMLField({ required: true, textSearch: true }) + + return schema; + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["HELLBORN.Deal"]; +} \ No newline at end of file diff --git a/module/models/tarot.mjs b/module/models/tarot.mjs new file mode 100644 index 0000000..682ffbd --- /dev/null +++ b/module/models/tarot.mjs @@ -0,0 +1,22 @@ +import { SYSTEM } from "../config/system.mjs"; + +export default class HellbornTarot extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields; + const schema = {}; + + schema.orientation = new fields.StringField({ required: true, initial: "Upright", choices: {"Upright": {label: "Upright"}, "Reversed": {label: "Reversed"}} }); + schema.positiveEffect = new fields.HTMLField({ required: true, textSearch: true }) + schema.negativeEffect = new fields.HTMLField({ required: true, textSearch: true }) + schema.image = new fields.FilePathField({ + required: false, + categories: ["IMAGE"], + default: "icons/svg/treasure.svg", + }) + + return schema; + } + + /** @override */ + static LOCALIZATION_PREFIXES = ["HELLBORN.Tarot"]; +} \ No newline at end of file diff --git a/styles/character.less b/styles/character.less index 3bc8268..b95f933 100644 --- a/styles/character.less +++ b/styles/character.less @@ -57,17 +57,6 @@ flex: none; } } - /*.character-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; - } - }*/ } .character-right { @@ -75,17 +64,19 @@ flex-direction: column; gap: 5px; - .character-spec { - label { - max-width: 6rem; + .character-definition { + .form-group { + display: flex; + align-items: center; + margin-bottom: 4px; } - .hero-armor { - display: grid; - grid-template-columns: repeat(2, 1fr); - gap: 4px; - input { - max-width: 3rem; - } + label { + max-width: 4rem; + } + input { + min-width: 16rem; + max-width: 16rem; + margin-bottom: auto; } } .character-name { @@ -110,17 +101,17 @@ min-width: 500px; } - .character-skills { + .character-stats { background-color: var(--color-light-1); display: flex; flex-direction: column; gap: 5px; flex: 1; - .character-skill { + .character-stat { display: flex; align-items: center; - .icon-skill { + .icon-stat { width: 24px; height: 24px; margin-right: 4px; @@ -131,98 +122,26 @@ cursor: pointer; } .rollable { - min-width: 4.5rem; - max-width: 4.5rem; + min-width: 3.5rem; + max-width: 3.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; - } + input { + min-width: 2.5rem; + max-width: 2.5rem; } } } - .character-skill-play { - min-width: 225px; + .character-stats-play { + min-width:120px; } - .character-skill-edit { - min-width: 225px; + .character-stats-edit { + min-width: 120px; } } -.character-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.character-skills { +.tab.character-status .main-div { background-color: var(--color-light-1); display: grid; grid-template-columns: 1fr; @@ -232,11 +151,44 @@ padding-left: 5px; } } - .skills { + .counters { + display: flex; + direction: column; + align-items: center; + gap: 4px; + margin-left: 4px; + input { + min-width: 2.5rem; + max-width: 2.5rem; + } + } + .ailments { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 4px; + .ailment { + display: flex; + align-items: center; + gap: 4px; + margin-left: 4px; + min-width: 8rem; + max-width: 8rem; + label { + min-width: 5rem; + max-width: 5rem; + } + .item-img { + width: 24px; + height: 24px; + margin: 4px 0 0 0; + } + } + } + .perks { display: grid; grid-template-columns: repeat(3, 1fr); gap: 4px; - .skill { + .perk { display: flex; align-items: center; gap: 4px; @@ -270,7 +222,7 @@ } } -.tab.character-status { +.tab.character-maleficas .main-div { background-color: var(--color-light-1); display: grid; grid-template-columns: 1fr; @@ -281,11 +233,11 @@ } } - .bonds { + .maleficas { display: grid; grid-template-columns: repeat(2, 1fr); gap: 4px; - .bond { + .malefica { display: flex; align-items: center; gap: 4px; @@ -316,11 +268,11 @@ } } - .motivations { + .rituals { display: grid; grid-template-columns: repeat(2, 1fr); gap: 4px; - .motivation { + .ritual { display: flex; align-items: center; gap: 4px; @@ -343,66 +295,10 @@ } } - .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.character-talents { + +.tab.character-equipment .main-div { background-color: var(--color-light-1); display: grid; grid-template-columns: 1fr; @@ -413,176 +309,6 @@ } } - .talents { - display: grid; - grid-template-columns: repeat(2, 1fr); - gap: 4px; - .talent { - 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; - } - } - } - - .languages { - display: grid; - grid-template-columns: repeat(2, 1fr); - gap: 4px; - .language { - 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.character-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); @@ -618,7 +344,7 @@ } } } - + .armors { display: grid; grid-template-columns: repeat(2, 1fr); @@ -689,3 +415,22 @@ min-height: 150px; } } + +.tab.character-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; + } + } + + prose-mirror.inactive { + min-height: 40px; + } + prose-mirror.active { + min-height: 150px; + } +} diff --git a/styles/deal.less b/styles/deal.less new file mode 100644 index 0000000..1e84861 --- /dev/null +++ b/styles/deal.less @@ -0,0 +1,39 @@ +.deal-content { + .sheet-common(); + .item-sheet-common(); + + fieldset { + margin-top: 8px; + background-color: var(--color-light-1); + .form-group { + display: flex; + align-items: center; + } + .form-group.long-input input { + min-width: 24rem; + max-width: 24rem; + text-align: left; + } + .form-group input { + min-width: 12rem; + max-width: 12rem; + } + .form-group select { + min-width: 12rem; + max-width: 12rem; + } + } + + .header { + background-color: var(--color-light-1); + display: flex; + img { + width: 50px; + height: 50px; + } + } + + label { + flex: 10%; + } +} diff --git a/styles/fvtt-hellborn.less b/styles/fvtt-hellborn.less index 35bfeab..35e9e4b 100644 --- a/styles/fvtt-hellborn.less +++ b/styles/fvtt-hellborn.less @@ -9,6 +9,8 @@ @import "weapon.less"; @import "equipment.less"; @import "armor.less"; + @import "deal.less"; + @import "tarot.less"; @import "ritual.less"; @import "perk.less"; @import "malefica.less"; diff --git a/styles/global.less b/styles/global.less index c9bacbc..1fe579f 100644 --- a/styles/global.less +++ b/styles/global.less @@ -2,7 +2,7 @@ --font-size-standard: 0.9rem; --font-size-result: 1.4rem; --background-image-base: linear-gradient(rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0.8)), - url("../assets/ui/ftl_nomad_background_01.webp"); + url("../assets/ui/sheet_background_01.webp"); --font-primary: "MinionProRegular"; --font-secondary: "MinionProRegular"; --font-title: "SupernaturalKnight"; @@ -16,16 +16,6 @@ --color-critical-failure: rgb(141, 32, 231); } -.d100 { - width: 18px; - height: 18px; - color: black; - border-width: 0px; -} - -.item .thumbnail, -.item-img { -} #logo { content: var(--logo-standard); @@ -34,15 +24,19 @@ margin-left: 15px; } +nav.tabs [data-tab] { + color: var(--title-color); +} + #pause > img { content: var(--logo-standard); - height: 192px; + height: 256px; width: 256px; top: -45px; left: calc(50% - 96px); } -i.fvtt-ftl-nomad { +i.fvtt-hellborn { width: 36px; height: 36px; background-image: var(--logo-standard); @@ -55,7 +49,7 @@ i.fvtt-ftl-nomad { transition: 0.3s; } -.application.dialog.fvtt-ftl-nomad { +.application.dialog.fvtt-hellborn { font-family: var(--font-primary); font-size: calc(var(--font-size-standard) * 1.0); background-image: var(--background-image-base); diff --git a/styles/ritual.less b/styles/ritual.less index 30d39c8..47d1394 100644 --- a/styles/ritual.less +++ b/styles/ritual.less @@ -9,8 +9,6 @@ display: flex; align-items: center; } - .form-group label { - } .form-group.long-input input { min-width: 24rem; max-width: 24rem; diff --git a/styles/species-trait.less b/styles/species-trait.less index 391886d..0570798 100644 --- a/styles/species-trait.less +++ b/styles/species-trait.less @@ -5,6 +5,23 @@ fieldset { margin-top: 8px; background-color: var(--color-light-1); + .form-group { + display: flex; + align-items: center; + } + .form-group.long-input input { + min-width: 24rem; + max-width: 24rem; + text-align: left; + } + .form-group input { + min-width: 12rem; + max-width: 12rem; + } + .form-group select { + min-width: 12rem; + max-width: 12rem; + } } .header { diff --git a/styles/tarot.less b/styles/tarot.less new file mode 100644 index 0000000..a38d2a5 --- /dev/null +++ b/styles/tarot.less @@ -0,0 +1,39 @@ +.tarot-content { + .sheet-common(); + .item-sheet-common(); + + fieldset { + margin-top: 8px; + background-color: var(--color-light-1); + .form-group { + display: flex; + align-items: center; + } + .form-group.long-input input { + min-width: 24rem; + max-width: 24rem; + text-align: left; + } + .form-group input { + min-width: 12rem; + max-width: 12rem; + } + .form-group select { + min-width: 12rem; + max-width: 12rem; + } + } + + .header { + background-color: var(--color-light-1); + display: flex; + img { + width: 50px; + height: 50px; + } + } + + label { + flex: 10%; + } +} diff --git a/system.json b/system.json index 0ff006f..40409be 100644 --- a/system.json +++ b/system.json @@ -33,7 +33,7 @@ ], "documentTypes": { "Actor": { - "character": { "htmlFields": ["description", "notes"] }, + "character": { "htmlFields": ["backstory", "notes", "appearance", "scars", "likes", "dislikes", "fears", "vices", "goals", "ammbitions", "values", "bonds"] }, "monster": { "htmlFields": ["description", "notes"] }, "vehicle": { "htmlFields": ["description", "notes"] } }, @@ -44,7 +44,9 @@ "equipment": { "htmlFields": ["description"] }, "malefica": { "htmlFields": ["description"] }, "species-trait": { "htmlFields": ["description"] }, - "ritual": { "htmlFields": ["description"] } + "ritual": { "htmlFields": ["description"] }, + "tarot": { "htmlFields": ["description"] }, + "deal": { "htmlFields": ["description"] } } }, "packs": [ diff --git a/templates/character-biography.hbs b/templates/character-biography.hbs index 0706a52..06df6e7 100644 --- a/templates/character-biography.hbs +++ b/templates/character-biography.hbs @@ -1,12 +1,9 @@
- +
- Rank - {{formField systemFields.rank.fields.experienced value=system.rank.experienced type="number" rootId=partId disabled=isPlayMode}} - {{formField systemFields.rank.fields.expert value=system.rank.expert type="number" rootId=partId disabled=isPlayMode}} - {{formField systemFields.rank.fields.veteran value=system.rank.veteran type="number" rootId=partId disabled=isPlayMode}} - {{formField systemFields.rank.fields.elite value=system.rank.elite type="number" rootId=partId disabled=isPlayMode}} - {{formField systemFields.rank.fields.legend value=system.rank.legend type="number" rootId=partId disabled=isPlayMode}} + Experience + {{formField systemFields.experience.fields.current value=system.experience.current type="number" rootId=partId disabled=isPlayMode}} + {{formField systemFields.experience.fields.max value=system.experience.max type="number" rootId=partId disabled=isPlayMode}}
@@ -23,12 +20,12 @@
{{localize "HELLBORN.Label.description"}} - {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} + {{formInput systemFields.backstory enriched=enrichedBackstory value=system.backstory name="system.backstory" toggled=true}}
- {{localize "HELLBORN.Label.notes"}} - {{formInput systemFields.notes enriched=enrichedNotes value=system.notes name="system.notes" toggled=true}} + {{localize "HELLBORN.Label.appearance"}} + {{formInput systemFields.appearance enriched=enrichedAppearance value=system.appearance name="system.appearance" toggled=true}}
- +
\ No newline at end of file diff --git a/templates/character-equipment.hbs b/templates/character-equipment.hbs index dcd49b8..f9e3d38 100644 --- a/templates/character-equipment.hbs +++ b/templates/character-equipment.hbs @@ -1,15 +1,5 @@
- -
- {{#if isEncumbered}} - {{formField systemFields.enc.fields.value value=system.enc.value rootId=partId disabled=true classes="encumbered"}} - {{else }} - {{formField systemFields.enc.fields.value value=system.enc.value rootId=partId disabled=true}} - {{/if}} - {{formField systemFields.enc.fields.max value=system.enc.max rootId=partId disabled=isPlayMode}} - {{formField systemFields.credits value=system.credits rootId=partId }} -
- +
{{localize "HELLBORN.Label.weapons"}}{{#if isEditMode}}
-
- {{localize "HELLBORN.Label.implants"}}{{#if isEditMode}} - {{/if}} - -
- {{#each implants as |item|}} - {{!log 'weapon' this}} - - {{/each}} -
-
-
{{localize "HELLBORN.Label.equipments"}}{{#if isEditMode}}
- +
\ No newline at end of file diff --git a/templates/character-main.hbs b/templates/character-main.hbs index 26f60c8..67b7702 100644 --- a/templates/character-main.hbs +++ b/templates/character-main.hbs @@ -9,13 +9,8 @@ data-tooltip="{{actor.name}}" />
- {{localize "HELLBORN.Label.Stamina"}} + {{localize "HELLBORN.Label.trauma"}}
- {{formField systemFields.health.fields.staminaValue value=system.health.staminaValue}} - {{formField systemFields.health.fields.staminaMax value=system.health.staminaMax rootId=partId disabled=true}} -
-
- {{formField systemFields.health.fields.wounds value=system.health.wounds }}
@@ -28,13 +23,15 @@
-
- {{formField systemFields.concept value=system.concept rootId=partId disabled=isPlayMode}} - {{formField systemFields.species value=system.species rootId=partId disabled=isPlayMode}} - {{formField systemFields.archetype value=system.archetype rootId=partId disabled=isPlayMode}} -
- {{formField systemFields.heroPoints value=system.heroPoints rootId=partId }} - {{formField systemFields.armor.fields.value value=system.armor.value rootId=partId disabled=isPlayMode}} +
+
+ {{formField systemFields.pronouns value=system.pronouns rootId=partId disabled=isPlayMode}} +
+
+ {{formField systemFields.species value=system.species rootId=partId disabled=isPlayMode}} +
+
+ {{formField systemFields.trait value=system.trait rootId=partId disabled=isPlayMode}}
@@ -42,58 +39,33 @@
-
- {{localize "HELLBORN.Label.skills"}} -
- - - {{formInput systemFields.skills.fields.combat.fields.value value=system.skills.combat.value rootId=partId disabled=isPlayMode type="number" }} +
+ {{localize "HELLBORN.Label.stats"}} +
+ + {{formInput systemFields.stats.fields.flesh.fields.value value=system.stats.flesh.value rootId=partId disabled=isPlayMode type="number" }}
-
- - - {{formInput systemFields.skills.fields.knowledge.fields.value value=system.skills.knowledge.value - rootId=partId disabled=isPlayMode type="number"}} +
+ + {{formInput systemFields.stats.fields.skin.fields.value value=system.stats.skin.value rootId=partId disabled=isPlayMode type="number" }}
-
- - - {{formInput systemFields.skills.fields.social.fields.value value=system.skills.social.value - rootId=partId disabled=isPlayMode type="number"}} +
+ + {{formInput systemFields.stats.fields.heart.fields.value value=system.stats.heart.value rootId=partId disabled=isPlayMode type="number" }}
-
- - - {{formInput systemFields.skills.fields.physical.fields.value value=system.skills.physical.value - rootId=partId disabled=isPlayMode type="number"}} +
+ + {{formInput systemFields.stats.fields.mind.fields.value value=system.stats.mind.value rootId=partId disabled=isPlayMode type="number" }}
-
- - - {{formInput systemFields.skills.fields.stealth.fields.value value=system.skills.stealth.value - rootId=partId disabled=isPlayMode type="number"}} -
-
- - - {{formInput systemFields.skills.fields.vehicles.fields.value value=system.skills.vehicles.value - rootId=partId disabled=isPlayMode type="number"}} -
-
- - - {{formInput systemFields.skills.fields.technology.fields.value value=system.skills.technology.value - rootId=partId disabled=isPlayMode type="number"}} +
+ + {{formInput systemFields.stats.fields.soul.fields.value value=system.stats.soul.value rootId=partId disabled=isPlayMode type="number" }}
- - \ No newline at end of file diff --git a/templates/character-maleficas.hbs b/templates/character-maleficas.hbs new file mode 100644 index 0000000..012c3a4 --- /dev/null +++ b/templates/character-maleficas.hbs @@ -0,0 +1,56 @@ +
+
+
+ {{localize "HELLBORN.Label.maleficas"}}{{#if isEditMode}} + {{/if}} + +
+ {{#each maleficas as |item|}} + {{!log 'weapon' this}} +
+ + + +
+ {{item.name}} +
+ +
+ + +
+
+ {{/each}} +
+
+ +
+ {{localize "HELLBORN.Label.rituals"}}{{#if isEditMode}} + {{/if}} + +
+ {{#each rituals as |item|}} +
+ + + +
+ {{item.name}} +
+ +
+ + +
+
+ {{/each}} +
+
+
+
\ No newline at end of file diff --git a/templates/character-status.hbs b/templates/character-status.hbs new file mode 100644 index 0000000..20ecaa6 --- /dev/null +++ b/templates/character-status.hbs @@ -0,0 +1,60 @@ +
+
+ +
+ {{localize "HELLBORN.Label.Counters"}} +
+ {{formInput systemFields.trauma.fields.current value=system.trauma.current}} / + {{formInput systemFields.trauma.fields.max value=system.trauma.max}} + {{formInput systemFields.darkness.fields.current value=system.darkness.current}} / + {{formInput systemFields.darkness.fields.max value=system.darkness.max}} + {{formInput systemFields.darkness.fields.value value=system.darkness.value}} + {{formInput systemFields.defense.fields.base value=system.defense.base}} + {{formInput systemFields.defense.fields.bonus value=system.defense.bonus }} + {{formInput systemFields.defense.fields.total value=system.defense.total}} + {{formInput systemFields.defense.fields.resistance value=system.defense.resistance}} + {{formInput systemFields.movement.fields.base value=system.movement.base}} + {{formInput systemFields.movement.fields.reduce value=system.defense.reduce }} +
+
+ +
+ {{localize "HELLBORN.Label.ailments"}} +
+ {{#each system.ailments as |item id|}} +
+ +
+ {{/each}} +
+
+ +
+ {{localize "HELLBORN.Label.perks"}}{{#if isEditMode}} + {{/if}} + +
+ {{#each perks as |item|}} +
+ + + +
+ {{item.name}} +
+ +
+ + +
+
+ {{/each}} +
+
+ + +
+
\ No newline at end of file diff --git a/templates/character-talents.hbs b/templates/character-talents.hbs deleted file mode 100644 index 3982d8d..0000000 --- a/templates/character-talents.hbs +++ /dev/null @@ -1,106 +0,0 @@ -
- -
- {{localize "HELLBORN.Label.talents"}}{{#if isEditMode}} - {{/if}} - -
- {{#each talents as |item|}} - {{!log 'weapon' this}} - - {{/each}} -
-
- -
- {{localize "HELLBORN.Label.psionics"}}{{#if isEditMode}} - {{/if}} - -
- {{#each psionics as |item|}} - {{!log 'weapon' this}} - - {{/each}} -
-
- -
- {{localize "HELLBORN.Label.languages"}}{{#if isEditMode}} - {{/if}} - -
- {{#each languages as |item|}} - {{!log 'weapon' this}} - - {{/each}} -
-
- - -
\ No newline at end of file diff --git a/templates/deal.hbs b/templates/deal.hbs new file mode 100644 index 0000000..c4ba23f --- /dev/null +++ b/templates/deal.hbs @@ -0,0 +1,17 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ +
+ {{formField systemFields.promisor value=system.promisor localize=true }} +
+ +
+ {{localize "HELLBORN.Label.description"}} + {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" + toggled=true}} +
+ +
\ No newline at end of file diff --git a/templates/tarot.hbs b/templates/tarot.hbs new file mode 100644 index 0000000..53c8b24 --- /dev/null +++ b/templates/tarot.hbs @@ -0,0 +1,28 @@ +
+
+ + {{formInput fields.name value=source.name}} +
+ +
+ {{formField systemFields.orientation value=system.orientation localize=true }} +
+ +
+
+
+ {{localize "HELLBORN.Label.positiveEffect"}} + {{formInput systemFields.positiveEffect enriched=enrichedPositiveEffect value=system.positiveEffect name="system.positiveEffect" + toggled=true}} + {{localize "HELLBORN.Label.negativeEffect"}} + {{formInput systemFields.negativeEffect enriched=enrichedNegativeEffect value=system.negativeEffect name="system.negativeEffect" + toggled=true}} +
+
+ + {{formField systemFields.image value=system.image localize=true }} +
+
+
+ +
\ No newline at end of file