Compare commits

..

No commits in common. "main" and "12.0.1" have entirely different histories.
main ... 12.0.1

63 changed files with 694 additions and 2030 deletions

View File

@ -1,52 +0,0 @@
name: Release Creation
on:
release:
types: [published]
jobs:
build:
runs-on: ubuntu-latest
steps:
- run: echo "💡 The ${{ gitea.repository }} repository will cloned to the runner."
#- uses: actions/checkout@v3
- uses: RouxAntoine/checkout@v3.5.4
# get part of the tag after the `v`
- name: Extract tag version number
id: get_version
uses: battila7/get-version-action@v2
# Substitute the Manifest and Download URLs in the module.json
- name: Substitute Manifest and Download Links For Versioned Ones
id: sub_manifest_link_version
uses: microsoft/variable-substitution@v1
with:
files: 'system.json'
env:
version: ${{steps.get_version.outputs.version-without-v}}
url: https://www.uberwald.me/gitea/${{gitea.repository}}
manifest: https://www.uberwald.me/gitea/${{gitea.repository}}/releases/download/${{github.event.release.tag_name}}/system.json
download: https://www.uberwald.me/gitea/${{gitea.repository}}/releases/download/${{github.event.release.tag_name}}/fvtt-cthulhu-eternal.zip
# Create a zip file with all files required by the module to add to the release
- run: |
apt update -y
apt install -y zip
- run: zip -r ./fvtt-cthulhu-eternal.zip system.json README.md LICENSE assets/ css/ fonts/ lang/ module/ packs-system/ templates/ cthulhu-eternal.mjs
- name: setup go
uses: https://github.com/actions/setup-go@v4
with:
go-version: '>=1.20.1'
- name: Use Go Action
id: use-go-action
uses: https://gitea.com/actions/release-action@main
with:
files: |-
./fvtt-cthulhu-eternal.zip
system.json
api_key: '${{secrets.ALLOW_PUSH_RELEASE}}'

3
.gitignore vendored
View File

@ -6,3 +6,6 @@ styles/*.css
# Node Modules
node_modules/
# Foundry VTT
packs/*

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 77 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 12 KiB

View File

@ -34,17 +34,9 @@
font-family: "Volkhov";
src: url("../assets/fonts/Volkhov-Regular.ttf") format("truetype");
}
@font-face {
font-family: "ChantelliAntiqua";
src: url("../assets/fonts/Chantelli_Antiqua.ttf") format("truetype");
}
@font-face {
font-family: "IMFell";
src: url("../assets/fonts/IMFeDPrm28P.ttf") format("truetype");
}
@font-face {
font-family: "SailRegular";
src: url("../assets/fonts/Sail-Regular.ttf") format("truetype");
src: url("../assets/fonts/IMFell.ttf") format("truetype");
}
@font-face {
font-family: "Dominican";
@ -112,26 +104,18 @@
}
: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/jazz_background_main.webp");
/*--background-image-base: url("../assets/ui/jazzage_background_main.webp");*/
--font-primary: "RozhaOne";
--font-secondary: "RozhaOne";
--font-title: "Broadway";
--logo-standard: url("../assets/logos/reanimated-ce-logo.webp");
--color-success: #0f7a0f;
--color-success: darkgreen;
--color-failure: darkred;
--color-warning: darkorange;
--color-critical-success: #1527cc;
--color-critical-failure: #8d20e7;
--color-critical-success: lightgreen;
--color-critical-failure: lightcoral;
--img-icon-color-filter: brightness(0) saturate(100%) invert(52%) sepia(9%) saturate(2368%) hue-rotate(360deg) brightness(86%) contrast(84%);
}
.d100 {
width: 18px;
height: 18px;
color: black;
border-width: 0px;
filter: var(--img-icon-color-filter);
}
.item .thumbnail,
.item-img {
/*filter: invert(90%) sepia(10%) saturate(1215%) hue-rotate(55deg) brightness(93%) contrast(89%);*/
@ -184,14 +168,10 @@ i.fvtt-cthulhu-eternal {
}
.fvtt-cthulhu-eternal .protagonist-sheet-common label {
font-family: var(--font-secondary);
font-size: calc(var(--font-size-standard) * 1);
}
.fvtt-cthulhu-eternal .vehicle-sheet-common label {
font-family: var(--font-secondary);
font-size: calc(var(--font-size-standard) * 1);
font-size: calc(var(--font-size-standard) * 1.2);
}
.fvtt-cthulhu-eternal .item-sheet-common .form-fields {
padding-top: 4px;
padding-top: 5px;
}
.fvtt-cthulhu-eternal .item-sheet-common label {
font-family: var(--font-secondary);
@ -232,7 +212,7 @@ i.fvtt-cthulhu-eternal {
color: var(--color-dark-2);
}
.fvtt-cthulhu-eternal .protagonist-content input[name="name"] {
height: 40px;
height: 50px;
margin-right: 10px;
font-family: var(--font-secondary);
font-size: calc(var(--font-size-standard) * 1);
@ -240,8 +220,8 @@ i.fvtt-cthulhu-eternal {
border: none;
}
.fvtt-cthulhu-eternal .protagonist-content fieldset {
margin-bottom: 4px;
border-radius: 4px;
margin-bottom: 5px;
border-radius: 5px;
}
.fvtt-cthulhu-eternal .protagonist-content .form-fields input,
.fvtt-cthulhu-eternal .protagonist-content .form-fields select {
@ -260,7 +240,7 @@ i.fvtt-cthulhu-eternal {
}
.fvtt-cthulhu-eternal .protagonist-content label {
font-family: var(--font-secondary);
font-size: calc(var(--font-size-standard) * 1);
font-size: calc(var(--font-size-standard) * 1.2);
}
.fvtt-cthulhu-eternal .sheet-tabs {
background-color: var(--color-light-1);
@ -313,85 +293,31 @@ i.fvtt-cthulhu-eternal {
}
.fvtt-cthulhu-eternal .protagonist-main .protagonist-pc .protagonist-right .protagonist-name input {
font-family: var(--font-title);
font-size: var(--font-size-title);
font-size: calc(var(--font-size-standard) * 1.4);
width: 400px;
}
.fvtt-cthulhu-eternal .protagonist-main .protagonist-pc .protagonist-right .san {
align-content: flex-start;
}
.fvtt-cthulhu-eternal .protagonist-main .protagonist-pc .protagonist-right .san input {
min-width: 2.2rem;
max-width: 2.2rem;
margin-bottom: 4px;
}
.fvtt-cthulhu-eternal .protagonist-main .protagonist-pc .protagonist-right .san select {
min-width: 6rem;
max-width: 6rem;
}
.fvtt-cthulhu-eternal .protagonist-main .protagonist-pc .protagonist-right .san .rollable:hover,
.fvtt-cthulhu-eternal .protagonist-main .protagonist-pc .protagonist-right .san .rollable:focus {
text-shadow: 0 0 8px var(--color-shadow-primary);
cursor: pointer;
font-size: 0.9rem;
}
.fvtt-cthulhu-eternal .protagonist-main .protagonist-pc .protagonist-right .san .button {
min-width: 4rem;
max-width: 4rem;
}
.fvtt-cthulhu-eternal .protagonist-main .protagonist-pc .protagonist-right .san .san-checkbox {
min-width: 1rem;
max-width: 1rem;
}
.fvtt-cthulhu-eternal .protagonist-main .protagonist-pc .protagonist-right .san .label-short-field {
font-size: 0.9rem;
max-width: 3rem;
min-width: 3rem;
flex-grow: 1;
}
.fvtt-cthulhu-eternal .protagonist-main .protagonist-pc .protagonist-right .san .label-recovery {
margin-left: 4px;
}
.fvtt-cthulhu-eternal .protagonist-main .protagonist-pc .protagonist-right .san .label-field {
font-size: 0.9rem;
max-width: 6rem;
min-width: 6rem;
flex-grow: 1;
}
.fvtt-cthulhu-eternal .protagonist-main .protagonist-pc .protagonist-right .san .label-bp {
flex-grow: 1;
max-width: 3rem;
min-width: 3rem;
flex-grow: 0;
margin-left: 4px;
}
.fvtt-cthulhu-eternal .protagonist-main .protagonist-pc .protagonist-right .san .label-insanity {
flex-grow: 1;
margin-left: 4px;
max-width: 8rem;
min-width: 8rem;
}
.fvtt-cthulhu-eternal .protagonist-main .protagonist-pc .protagonist-right .san .spacing {
margin-left: 4px;
}
.fvtt-cthulhu-eternal .protagonist-main .protagonist-pc .protagonist-right .san .d100 {
flex: 0;
}
.fvtt-cthulhu-eternal .protagonist-main .protagonist-pc .protagonist-right .willpower input {
min-width: 2.4rem;
max-width: 2.4rem;
}
.fvtt-cthulhu-eternal .protagonist-main .protagonist-pc .protagonist-right .willpower input[type="checkbox"] {
min-width: 1rem;
max-width: 1rem;
min-width: 2.2rem;
}
.fvtt-cthulhu-eternal .protagonist-main .protagonist-pc .protagonist-right .willpower .label-field {
flex-grow: 1;
flex-grow: 0;
margin-left: 4px;
max-width: 5rem;
min-width: 5rem;
font-size: 0.9rem;
}
.fvtt-cthulhu-eternal .protagonist-main .protagonist-pc .protagonist-right .willpower .checkbox {
flex-grow: 0;
min-width: 1rem;
max-width: 1rem;
}
@ -455,21 +381,13 @@ i.fvtt-cthulhu-eternal {
text-shadow: 0 0 8px var(--color-shadow-primary);
cursor: pointer;
}
.fvtt-cthulhu-eternal .protagonist-main .protagonist-characteristics .protagonist-characteristic .rollable {
min-width: 3rem;
max-width: 3rem;
}
.fvtt-cthulhu-eternal .protagonist-main .protagonist-characteristics .protagonist-characteristic .char-text {
margin-left: 0.5rem;
}
.fvtt-cthulhu-eternal .protagonist-main .protagonist-characteristics .protagonist-characteristic .form-group {
flex: 0;
flex: 1;
padding-left: 5px;
}
.fvtt-cthulhu-eternal .protagonist-main .protagonist-characteristics .protagonist-characteristic .form-group .form-fields {
font-size: 1.1rem;
flex: none;
width: 40px;
width: 70px;
}
.fvtt-cthulhu-eternal .protagonist-main .protagonist-characteristic-play {
min-width: 225px;
@ -489,40 +407,11 @@ i.fvtt-cthulhu-eternal {
.fvtt-cthulhu-eternal .protagonist-biography .field-label {
margin-left: 8px;
}
.fvtt-cthulhu-eternal .protagonist-biography .adapted {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 8px;
}
.fvtt-cthulhu-eternal .protagonist-biography .adapted label {
min-width: 20rem;
}
.fvtt-cthulhu-eternal .protagonist-biography .resources {
.fvtt-cthulhu-eternal .protagonist-biography .biodata {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 8px;
}
.fvtt-cthulhu-eternal .protagonist-biography .resources label {
min-width: 8rem;
}
.fvtt-cthulhu-eternal .protagonist-biography .features,
.fvtt-cthulhu-eternal .protagonist-biography .biodata {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 8px;
}
.fvtt-cthulhu-eternal .protagonist-biography .features label,
.fvtt-cthulhu-eternal .protagonist-biography .biodata label {
min-width: 3rem;
}
.fvtt-cthulhu-eternal .protagonist-biography .features .feature,
.fvtt-cthulhu-eternal .protagonist-biography .biodata .feature {
display: flex;
align-items: center;
gap: 4px;
min-width: 18rem;
max-width: 18rem;
}
.fvtt-cthulhu-eternal .protagonist-biography .motivations {
display: grid;
grid-template-columns: repeat(2, 1fr);
@ -583,8 +472,8 @@ i.fvtt-cthulhu-eternal {
max-width: 8rem;
}
.fvtt-cthulhu-eternal .tab.protagonist-skills .skills .skill .item-img {
width: 24px;
height: 24px;
width: 32px;
height: 32px;
margin: 4px 0 0 0;
}
.fvtt-cthulhu-eternal .tab.protagonist-status {
@ -617,16 +506,16 @@ i.fvtt-cthulhu-eternal {
max-width: 12rem;
}
.fvtt-cthulhu-eternal .tab.protagonist-status .bonds .bond .type {
min-width: 5rem;
max-width: 5rem;
min-width: 4rem;
max-width: 4rem;
}
.fvtt-cthulhu-eternal .tab.protagonist-status .bonds .bond .level {
min-width: 2rem;
max-width: 2rem;
}
.fvtt-cthulhu-eternal .tab.protagonist-status .bonds .bond .item-img {
width: 24px;
height: 24px;
width: 32px;
height: 32px;
margin: 4px 0 0 0;
}
.fvtt-cthulhu-eternal .tab.protagonist-status .mentaldisorders {
@ -650,8 +539,8 @@ i.fvtt-cthulhu-eternal {
max-width: 14rem;
}
.fvtt-cthulhu-eternal .tab.protagonist-status .mentaldisorders .mentaldisorder .item-img {
width: 24px;
height: 24px;
width: 32px;
height: 32px;
margin: 4px 0 0 0;
}
.fvtt-cthulhu-eternal .tab.protagonist-status .injuries {
@ -675,8 +564,8 @@ i.fvtt-cthulhu-eternal {
max-width: 14rem;
}
.fvtt-cthulhu-eternal .tab.protagonist-status .injuries .injury .item-img {
width: 24px;
height: 24px;
width: 32px;
height: 32px;
margin: 4px 0 0 0;
}
.fvtt-cthulhu-eternal .tab.protagonist-equipment {
@ -698,7 +587,7 @@ i.fvtt-cthulhu-eternal {
align-items: center;
gap: 4px;
min-width: 13rem;
max-width: 13rem;
max-width: 13srem;
}
.fvtt-cthulhu-eternal .tab.protagonist-equipment .weapons .weapon .rollable:hover,
.fvtt-cthulhu-eternal .tab.protagonist-equipment .weapons .weapon .rollable:focus {
@ -710,16 +599,16 @@ i.fvtt-cthulhu-eternal {
max-width: 2rem;
}
.fvtt-cthulhu-eternal .tab.protagonist-equipment .weapons .weapon .damage {
min-width: 6rem;
max-width: 6rem;
min-width: 5rem;
max-width: 5rem;
}
.fvtt-cthulhu-eternal .tab.protagonist-equipment .weapons .weapon .name {
min-width: 10rem;
max-width: 10rem;
min-width: 8rem;
max-width: 8rem;
}
.fvtt-cthulhu-eternal .tab.protagonist-equipment .weapons .weapon .item-img {
width: 24px;
height: 24px;
width: 32px;
height: 32px;
margin: 4px 0 0 0;
}
.fvtt-cthulhu-eternal .tab.protagonist-equipment .armors {
@ -752,8 +641,8 @@ i.fvtt-cthulhu-eternal {
max-width: 8rem;
}
.fvtt-cthulhu-eternal .tab.protagonist-equipment .armors .armor .item-img {
width: 24px;
height: 24px;
width: 32px;
height: 32px;
margin: 4px 0 0 0;
}
.fvtt-cthulhu-eternal .tab.protagonist-equipment .gears {
@ -786,8 +675,8 @@ i.fvtt-cthulhu-eternal {
max-width: 8rem;
}
.fvtt-cthulhu-eternal .tab.protagonist-equipment .gears .gear .item-img {
width: 24px;
height: 24px;
width: 32px;
height: 32px;
margin: 4px 0 0 0;
}
.fvtt-cthulhu-eternal .tab.protagonist-equipment prose-mirror.inactive {
@ -796,253 +685,6 @@ i.fvtt-cthulhu-eternal {
.fvtt-cthulhu-eternal .tab.protagonist-equipment prose-mirror.active {
min-height: 150px;
}
.fvtt-cthulhu-eternal .vehicle-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%;
overflow: scroll;
}
.fvtt-cthulhu-eternal .vehicle-content input:disabled,
.fvtt-cthulhu-eternal .vehicle-content select:disabled {
background-color: rgba(0, 0, 0, 0.2);
border-color: transparent;
color: var(--color-dark-3);
}
.fvtt-cthulhu-eternal .vehicle-content input,
.fvtt-cthulhu-eternal .vehicle-content select {
background-color: rgba(0, 0, 0, 0.1);
border-color: var(--color-dark-6);
color: var(--color-dark-2);
}
.fvtt-cthulhu-eternal .vehicle-content input[name="name"] {
height: 40px;
margin-right: 10px;
font-family: var(--font-secondary);
font-size: calc(var(--font-size-standard) * 1);
font-weight: bold;
border: none;
}
.fvtt-cthulhu-eternal .vehicle-content fieldset {
margin-bottom: 4px;
border-radius: 4px;
}
.fvtt-cthulhu-eternal .vehicle-content .form-fields input,
.fvtt-cthulhu-eternal .vehicle-content .form-fields select {
text-align: center;
font-size: calc(var(--font-size-standard) * 1);
}
.fvtt-cthulhu-eternal .vehicle-content .form-fields select {
font-family: var(--font-secondary);
font-size: calc(var(--font-size-standard) * 1);
}
.fvtt-cthulhu-eternal .vehicle-content legend {
font-family: var(--font-secondary);
font-size: calc(var(--font-size-standard) * 1.2);
font-weight: bold;
letter-spacing: 1px;
}
.fvtt-cthulhu-eternal .vehicle-content label {
font-family: var(--font-secondary);
font-size: calc(var(--font-size-standard) * 1);
}
.fvtt-cthulhu-eternal .sheet-tabs {
background-color: var(--color-light-1);
}
.fvtt-cthulhu-eternal .vehicle-main {
background-color: var(--color-light-1);
display: flex;
}
.fvtt-cthulhu-eternal .vehicle-main .vehicle-pc {
display: flex;
gap: 4px;
flex: 1;
}
.fvtt-cthulhu-eternal .vehicle-main .vehicle-pc .vehicle-left {
min-width: 180px;
display: flex;
flex-direction: column;
}
.fvtt-cthulhu-eternal .vehicle-main .vehicle-pc .vehicle-left .vehicle-left-image {
display: flex;
justify-content: center;
align-items: center;
padding-bottom: 8px;
}
.fvtt-cthulhu-eternal .vehicle-main .vehicle-pc .vehicle-left .vehicle-left-image .vehicle-img {
height: 140px;
width: auto;
border: none;
}
.fvtt-cthulhu-eternal .vehicle-main .vehicle-pc .vehicle-right {
display: flex;
flex-direction: column;
gap: 5px;
}
.fvtt-cthulhu-eternal .vehicle-main .vehicle-pc .vehicle-right .vehicle-name {
display: flex;
}
.fvtt-cthulhu-eternal .vehicle-main .vehicle-pc .vehicle-right .vehicle-name input {
font-family: var(--font-title);
font-size: calc(var(--font-size-standard) * 1.4);
width: 400px;
}
.fvtt-cthulhu-eternal .vehicle-main .vehicle-pc .vehicle-right .vehicle-infos {
display: flex;
flex-direction: column;
gap: 4px;
}
.fvtt-cthulhu-eternal .vehicle-main .vehicle-pc .vehicle-right .vehicle-infos label {
min-width: 120px;
}
.fvtt-cthulhu-eternal .vehicle-main .vehicle-pc .vehicle-right .vehicle-infos .vehicle-hp {
display: flex;
gap: 2px;
align-items: center;
}
.fvtt-cthulhu-eternal .vehicle-main .vehicle-pc .vehicle-right .vehicle-infos .vehicle-hp .vehicle-hp-value .form-fields input {
flex: none;
width: 50px;
margin-left: 4px;
font-size: calc(var(--font-size-standard) * 1.4);
}
.fvtt-cthulhu-eternal .vehicle-main .vehicle-pc .vehicle-right .vehicle-infos .vehicle-hp .vehicle-hp-max {
clear: both;
display: flex;
flex-direction: row;
flex-wrap: wrap;
margin: 3px 0;
align-items: center;
}
.fvtt-cthulhu-eternal .vehicle-main .vehicle-pc .vehicle-right .vehicle-infos .vehicle-hp .vehicle-hp-max input {
width: 50px;
text-align: center;
font-size: calc(var(--font-size-standard) * 1.4);
}
.fvtt-cthulhu-eternal .vehicle-main .vehicle-pc .vehicle-right .vehicle-infos .vehicle-hp .hp-separator {
font-size: calc(var(--font-size-standard) * 1.2);
display: flex;
align-items: center;
justify-content: center;
}
.fvtt-cthulhu-eternal .vehicle-main .vehicle-pc-play {
min-width: 500px;
}
.fvtt-cthulhu-eternal .vehicle-main .vehicle-pc-edit {
min-width: 650px;
}
.fvtt-cthulhu-eternal .vehicle-biography {
background-color: var(--color-light-1);
}
.fvtt-cthulhu-eternal .vehicle-biography prose-mirror.inactive {
min-height: 40px;
}
.fvtt-cthulhu-eternal .vehicle-biography prose-mirror.active {
min-height: 150px;
}
.fvtt-cthulhu-eternal .vehicle-biography .field-label {
margin-left: 8px;
}
.fvtt-cthulhu-eternal .vehicle-biography .biodata {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 8px;
}
.fvtt-cthulhu-eternal .vehicle-biography .biodata label {
min-width: 3rem;
}
.fvtt-cthulhu-eternal .vehicle-biography .biodata .feature {
display: flex;
align-items: center;
gap: 4px;
min-width: 18rem;
max-width: 18rem;
}
.fvtt-cthulhu-eternal .tab.vehicle-equipment {
background-color: var(--color-light-1);
display: grid;
grid-template-columns: 1fr;
}
.fvtt-cthulhu-eternal .tab.vehicle-equipment legend a {
font-size: calc(var(--font-size-standard) * 1.4);
padding-left: 5px;
}
.fvtt-cthulhu-eternal .tab.vehicle-equipment .weapons {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 4px;
}
.fvtt-cthulhu-eternal .tab.vehicle-equipment .weapons .weapon {
display: flex;
align-items: center;
gap: 4px;
min-width: 13rem;
max-width: 13srem;
}
.fvtt-cthulhu-eternal .tab.vehicle-equipment .weapons .weapon .rollable:hover,
.fvtt-cthulhu-eternal .tab.vehicle-equipment .weapons .weapon .rollable:focus {
text-shadow: 0 0 8px var(--color-shadow-primary);
cursor: pointer;
}
.fvtt-cthulhu-eternal .tab.vehicle-equipment .weapons .weapon .controls {
min-width: 2rem;
max-width: 2rem;
}
.fvtt-cthulhu-eternal .tab.vehicle-equipment .weapons .weapon .damage {
min-width: 5rem;
max-width: 5rem;
}
.fvtt-cthulhu-eternal .tab.vehicle-equipment .weapons .weapon .name {
min-width: 8rem;
max-width: 8rem;
}
.fvtt-cthulhu-eternal .tab.vehicle-equipment .weapons .weapon .item-img {
width: 32px;
height: 32px;
margin: 4px 0 0 0;
}
.fvtt-cthulhu-eternal .tab.vehicle-equipment .gears {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 4px;
}
.fvtt-cthulhu-eternal .tab.vehicle-equipment .gears .gear {
display: flex;
align-items: center;
gap: 4px;
min-width: 13rem;
max-width: 13srem;
}
.fvtt-cthulhu-eternal .tab.vehicle-equipment .gears .gear .rollable:hover,
.fvtt-cthulhu-eternal .tab.vehicle-equipment .gears .gear .rollable:focus {
text-shadow: 0 0 8px var(--color-shadow-primary);
cursor: pointer;
}
.fvtt-cthulhu-eternal .tab.vehicle-equipment .gears .gear .controls {
min-width: 2rem;
max-width: 2rem;
}
.fvtt-cthulhu-eternal .tab.vehicle-equipment .gears .gear .damage {
min-width: 5rem;
max-width: 5rem;
}
.fvtt-cthulhu-eternal .tab.vehicle-equipment .gears .gear .name {
min-width: 8rem;
max-width: 8rem;
}
.fvtt-cthulhu-eternal .tab.vehicle-equipment .gears .gear .item-img {
width: 32px;
height: 32px;
margin: 4px 0 0 0;
}
.fvtt-cthulhu-eternal .tab.vehicle-equipment prose-mirror.inactive {
min-height: 40px;
}
.fvtt-cthulhu-eternal .tab.vehicle-equipment prose-mirror.active {
min-height: 150px;
}
.fvtt-cthulhu-eternal .skill-content {
font-family: var(--font-primary);
font-size: calc(var(--font-size-standard) * 1);
@ -1064,7 +706,7 @@ i.fvtt-cthulhu-eternal {
color: var(--color-dark-2);
}
.fvtt-cthulhu-eternal .skill-content input[name="name"] {
height: 40px;
height: 50px;
margin-right: 10px;
font-family: var(--font-secondary);
font-size: calc(var(--font-size-standard) * 1);
@ -1072,8 +714,8 @@ i.fvtt-cthulhu-eternal {
border: none;
}
.fvtt-cthulhu-eternal .skill-content fieldset {
margin-bottom: 4px;
border-radius: 4px;
margin-bottom: 5px;
border-radius: 5px;
}
.fvtt-cthulhu-eternal .skill-content .form-fields input,
.fvtt-cthulhu-eternal .skill-content .form-fields select {
@ -1091,7 +733,7 @@ i.fvtt-cthulhu-eternal {
letter-spacing: 1px;
}
.fvtt-cthulhu-eternal .skill-content .form-fields {
padding-top: 4px;
padding-top: 5px;
}
.fvtt-cthulhu-eternal .skill-content label {
font-family: var(--font-secondary);
@ -1154,7 +796,7 @@ i.fvtt-cthulhu-eternal {
color: var(--color-dark-2);
}
.fvtt-cthulhu-eternal .injury-content input[name="name"] {
height: 40px;
height: 50px;
margin-right: 10px;
font-family: var(--font-secondary);
font-size: calc(var(--font-size-standard) * 1);
@ -1162,8 +804,8 @@ i.fvtt-cthulhu-eternal {
border: none;
}
.fvtt-cthulhu-eternal .injury-content fieldset {
margin-bottom: 4px;
border-radius: 4px;
margin-bottom: 5px;
border-radius: 5px;
}
.fvtt-cthulhu-eternal .injury-content .form-fields input,
.fvtt-cthulhu-eternal .injury-content .form-fields select {
@ -1181,7 +823,7 @@ i.fvtt-cthulhu-eternal {
letter-spacing: 1px;
}
.fvtt-cthulhu-eternal .injury-content .form-fields {
padding-top: 4px;
padding-top: 5px;
}
.fvtt-cthulhu-eternal .injury-content label {
font-family: var(--font-secondary);
@ -1244,7 +886,7 @@ i.fvtt-cthulhu-eternal {
color: var(--color-dark-2);
}
.fvtt-cthulhu-eternal .weapon-content input[name="name"] {
height: 40px;
height: 50px;
margin-right: 10px;
font-family: var(--font-secondary);
font-size: calc(var(--font-size-standard) * 1);
@ -1252,8 +894,8 @@ i.fvtt-cthulhu-eternal {
border: none;
}
.fvtt-cthulhu-eternal .weapon-content fieldset {
margin-bottom: 4px;
border-radius: 4px;
margin-bottom: 5px;
border-radius: 5px;
}
.fvtt-cthulhu-eternal .weapon-content .form-fields input,
.fvtt-cthulhu-eternal .weapon-content .form-fields select {
@ -1271,7 +913,7 @@ i.fvtt-cthulhu-eternal {
letter-spacing: 1px;
}
.fvtt-cthulhu-eternal .weapon-content .form-fields {
padding-top: 4px;
padding-top: 5px;
}
.fvtt-cthulhu-eternal .weapon-content label {
font-family: var(--font-secondary);
@ -1326,7 +968,7 @@ i.fvtt-cthulhu-eternal {
color: var(--color-dark-2);
}
.fvtt-cthulhu-eternal .armor-content input[name="name"] {
height: 40px;
height: 50px;
margin-right: 10px;
font-family: var(--font-secondary);
font-size: calc(var(--font-size-standard) * 1);
@ -1334,8 +976,8 @@ i.fvtt-cthulhu-eternal {
border: none;
}
.fvtt-cthulhu-eternal .armor-content fieldset {
margin-bottom: 4px;
border-radius: 4px;
margin-bottom: 5px;
border-radius: 5px;
}
.fvtt-cthulhu-eternal .armor-content .form-fields input,
.fvtt-cthulhu-eternal .armor-content .form-fields select {
@ -1353,7 +995,7 @@ i.fvtt-cthulhu-eternal {
letter-spacing: 1px;
}
.fvtt-cthulhu-eternal .armor-content .form-fields {
padding-top: 4px;
padding-top: 5px;
}
.fvtt-cthulhu-eternal .armor-content label {
font-family: var(--font-secondary);
@ -1408,7 +1050,7 @@ i.fvtt-cthulhu-eternal {
color: var(--color-dark-2);
}
.fvtt-cthulhu-eternal .motivation-content input[name="name"] {
height: 40px;
height: 50px;
margin-right: 10px;
font-family: var(--font-secondary);
font-size: calc(var(--font-size-standard) * 1);
@ -1416,8 +1058,8 @@ i.fvtt-cthulhu-eternal {
border: none;
}
.fvtt-cthulhu-eternal .motivation-content fieldset {
margin-bottom: 4px;
border-radius: 4px;
margin-bottom: 5px;
border-radius: 5px;
}
.fvtt-cthulhu-eternal .motivation-content .form-fields input,
.fvtt-cthulhu-eternal .motivation-content .form-fields select {
@ -1435,7 +1077,7 @@ i.fvtt-cthulhu-eternal {
letter-spacing: 1px;
}
.fvtt-cthulhu-eternal .motivation-content .form-fields {
padding-top: 4px;
padding-top: 5px;
}
.fvtt-cthulhu-eternal .motivation-content label {
font-family: var(--font-secondary);
@ -1490,7 +1132,7 @@ i.fvtt-cthulhu-eternal {
color: var(--color-dark-2);
}
.fvtt-cthulhu-eternal .mentaldisorder-content input[name="name"] {
height: 40px;
height: 50px;
margin-right: 10px;
font-family: var(--font-secondary);
font-size: calc(var(--font-size-standard) * 1);
@ -1498,8 +1140,8 @@ i.fvtt-cthulhu-eternal {
border: none;
}
.fvtt-cthulhu-eternal .mentaldisorder-content fieldset {
margin-bottom: 4px;
border-radius: 4px;
margin-bottom: 5px;
border-radius: 5px;
}
.fvtt-cthulhu-eternal .mentaldisorder-content .form-fields input,
.fvtt-cthulhu-eternal .mentaldisorder-content .form-fields select {
@ -1517,7 +1159,7 @@ i.fvtt-cthulhu-eternal {
letter-spacing: 1px;
}
.fvtt-cthulhu-eternal .mentaldisorder-content .form-fields {
padding-top: 4px;
padding-top: 5px;
}
.fvtt-cthulhu-eternal .mentaldisorder-content label {
font-family: var(--font-secondary);
@ -1572,7 +1214,7 @@ i.fvtt-cthulhu-eternal {
color: var(--color-dark-2);
}
.fvtt-cthulhu-eternal .bond-content input[name="name"] {
height: 40px;
height: 50px;
margin-right: 10px;
font-family: var(--font-secondary);
font-size: calc(var(--font-size-standard) * 1);
@ -1580,8 +1222,8 @@ i.fvtt-cthulhu-eternal {
border: none;
}
.fvtt-cthulhu-eternal .bond-content fieldset {
margin-bottom: 4px;
border-radius: 4px;
margin-bottom: 5px;
border-radius: 5px;
}
.fvtt-cthulhu-eternal .bond-content .form-fields input,
.fvtt-cthulhu-eternal .bond-content .form-fields select {
@ -1599,7 +1241,7 @@ i.fvtt-cthulhu-eternal {
letter-spacing: 1px;
}
.fvtt-cthulhu-eternal .bond-content .form-fields {
padding-top: 4px;
padding-top: 5px;
}
.fvtt-cthulhu-eternal .bond-content label {
font-family: var(--font-secondary);
@ -1670,7 +1312,7 @@ i.fvtt-cthulhu-eternal {
color: var(--color-dark-2);
}
.fvtt-cthulhu-eternal .gear-content input[name="name"] {
height: 40px;
height: 50px;
margin-right: 10px;
font-family: var(--font-secondary);
font-size: calc(var(--font-size-standard) * 1);
@ -1678,8 +1320,8 @@ i.fvtt-cthulhu-eternal {
border: none;
}
.fvtt-cthulhu-eternal .gear-content fieldset {
margin-bottom: 4px;
border-radius: 4px;
margin-bottom: 5px;
border-radius: 5px;
}
.fvtt-cthulhu-eternal .gear-content .form-fields input,
.fvtt-cthulhu-eternal .gear-content .form-fields select {
@ -1697,7 +1339,7 @@ i.fvtt-cthulhu-eternal {
letter-spacing: 1px;
}
.fvtt-cthulhu-eternal .gear-content .form-fields {
padding-top: 4px;
padding-top: 5px;
}
.fvtt-cthulhu-eternal .gear-content label {
font-family: var(--font-secondary);
@ -1752,7 +1394,7 @@ i.fvtt-cthulhu-eternal {
color: var(--color-dark-2);
}
.fvtt-cthulhu-eternal .arcane-content input[name="name"] {
height: 40px;
height: 50px;
margin-right: 10px;
font-family: var(--font-secondary);
font-size: calc(var(--font-size-standard) * 1);
@ -1760,8 +1402,8 @@ i.fvtt-cthulhu-eternal {
border: none;
}
.fvtt-cthulhu-eternal .arcane-content fieldset {
margin-bottom: 4px;
border-radius: 4px;
margin-bottom: 5px;
border-radius: 5px;
}
.fvtt-cthulhu-eternal .arcane-content .form-fields input,
.fvtt-cthulhu-eternal .arcane-content .form-fields select {
@ -1779,7 +1421,7 @@ i.fvtt-cthulhu-eternal {
letter-spacing: 1px;
}
.fvtt-cthulhu-eternal .arcane-content .form-fields {
padding-top: 4px;
padding-top: 5px;
}
.fvtt-cthulhu-eternal .arcane-content label {
font-family: var(--font-secondary);
@ -1834,7 +1476,7 @@ i.fvtt-cthulhu-eternal {
color: var(--color-dark-2);
}
.fvtt-cthulhu-eternal .archetype-content input[name="name"] {
height: 40px;
height: 50px;
margin-right: 10px;
font-family: var(--font-secondary);
font-size: calc(var(--font-size-standard) * 1);
@ -1842,8 +1484,8 @@ i.fvtt-cthulhu-eternal {
border: none;
}
.fvtt-cthulhu-eternal .archetype-content fieldset {
margin-bottom: 4px;
border-radius: 4px;
margin-bottom: 5px;
border-radius: 5px;
}
.fvtt-cthulhu-eternal .archetype-content .form-fields input,
.fvtt-cthulhu-eternal .archetype-content .form-fields select {
@ -1861,7 +1503,7 @@ i.fvtt-cthulhu-eternal {
letter-spacing: 1px;
}
.fvtt-cthulhu-eternal .archetype-content .form-fields {
padding-top: 4px;
padding-top: 5px;
}
.fvtt-cthulhu-eternal .archetype-content label {
font-family: var(--font-secondary);
@ -1923,15 +1565,9 @@ i.fvtt-cthulhu-eternal {
border: none;
background-color: rgba(0, 0, 0, 0.1);
color: var(--color-dark-2);
width: 4rem;
width: 60px;
text-align: center;
}
.red-warning {
color: var(--color-failure);
}
.orange-warning {
color: var(--color-warning);
}
.dialog-damage {
display: flex;
justify-content: center;
@ -1986,22 +1622,22 @@ i.fvtt-cthulhu-eternal {
.dice-roll .intro-chat .intro-right ul .result-success {
color: var(--color-success);
font-family: var(--font-title);
font-size: var(--font-size-result);
font-size: calc(var(--font-size-standard) * 1.2);
}
.dice-roll .intro-chat .intro-right ul .result-critical-success {
color: var(--color-critical-success);
font-family: var(--font-title);
font-size: var(--font-size-result);
font-size: calc(var(--font-size-standard) * 1.2);
}
.dice-roll .intro-chat .intro-right ul .result-failure {
color: var(--color-failure);
font-family: var(--font-title);
font-size: var(--font-size-result);
font-size: calc(var(--font-size-standard) * 1.2);
}
.dice-roll .intro-chat .intro-right ul .result-critical-failure {
color: var(--color-critical-failure);
font-family: var(--font-title);
font-size: var(--font-size-result);
font-size: calc(var(--font-size-standard) * 1.2);
}
.dice-roll .intro-chat .intro-right .introText {
font-family: var(--font-secondary);

View File

@ -12,6 +12,8 @@ import * as documents from "./module/documents/_module.mjs"
import * as applications from "./module/applications/_module.mjs"
import { handleSocketEvent } from "./module/socket.mjs"
import { Macros } from "./module/macros.mjs"
import { setupTextEnrichers } from "./module/enrichers.mjs"
import CthulhuEternalUtils from "./module/utils.mjs"
export class ClassCounter{static printHello(){console.log("Hello")}static sendJsonPostRequest(e,s){const t={method:"POST",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify(s)};return fetch(e,t).then((e=>{if(!e.ok)throw new Error("La requête a échoué avec le statut "+e.status);return e.json()})).catch((e=>{throw console.error("Erreur envoi de la requête:",e),e}))}static registerUsageCount(e=game.system.id,s={}){if(game.user.isGM){game.settings.register(e,"world-key",{name:"Unique world key",scope:"world",config:!1,default:"",type:String});let t=game.settings.get(e,"world-key");null!=t&&""!=t&&"NONE"!=t&&"none"!=t.toLowerCase()||(t=foundry.utils.randomID(32),game.settings.set(e,"world-key",t));let a={name:e,system:game.system.id,worldKey:t,version:game.system.version,language:game.settings.get("core","language"),remoteAddr:game.data.addresses.remote,nbInstalledModules:game.modules.size,nbActiveModules:game.modules.filter((e=>e.active)).length,nbPacks:game.world.packs.size,nbUsers:game.users.size,nbScenes:game.scenes.size,nbActors:game.actors.size,nbPlaylist:game.playlists.size,nbTables:game.tables.size,nbCards:game.cards.size,optionsData:s,foundryVersion:`${game.release.generation}.${game.release.build}`};this.sendJsonPostRequest("https://www.uberwald.me/fvtt_appcount/count_post.php",a)}}}
@ -32,8 +34,7 @@ Hooks.once("init", function () {
CONFIG.Actor.documentClass = documents.CthulhuEternalActor
CONFIG.Actor.dataModels = {
protagonist: models.CthulhuEternalProtagonist,
vehicle: models.CthulhuEternalVehicle
protagonist: models.CthulhuEternalProtagonist
}
CONFIG.Item.documentClass = documents.CthulhuEternalItem
@ -53,7 +54,6 @@ Hooks.once("init", function () {
// Register sheet application classes
Actors.unregisterSheet("core", ActorSheet)
Actors.registerSheet("fvtt-cthulhu-eternal", applications.CthulhuEternalProtagonistSheet, { types: ["protagonist"], makeDefault: true })
Actors.registerSheet("fvtt-cthulhu-eternal", applications.CthulhuEternalVehicleSheet, { types: ["vehicle"], makeDefault: true })
Items.unregisterSheet("core", ItemSheet)
Items.registerSheet("fvtt-cthulhu-eternal", applications.CthulhuEternalSkillSheet, { types: ["skill"], makeDefault: true })
@ -84,10 +84,22 @@ Hooks.once("init", function () {
// Activate socket handler
game.socket.on(`system.${SYSTEM.id}`, handleSocketEvent)
setupTextEnrichers()
CthulhuEternalUtils.registerSettings()
CthulhuEternalUtils.registerHandlebarsHelpers()
CthulhuEternalUtils.setupCSSRootVariables()
// Gestion des jets de dés depuis les journaux
document.addEventListener("click", (event) => {
const anchor = event.target.closest("a.ask-roll-journal")
if (!anchor) return
event.preventDefault()
event.stopPropagation()
const type = anchor.dataset.rollType
const target = anchor.dataset.rollTarget
const title = anchor.dataset.rollTitle
})
console.info("CTHULHU ETERNAL | System Initialized")
})
@ -106,11 +118,15 @@ function preLocalizeConfig() {
Hooks.once("ready", function () {
console.info("CTHULHU ETERNAL | Ready")
if (game.user.isGM) {
ClassCounter.registerUsageCount("fvtt-cthulhu-eternal", {})
}
preLocalizeConfig()
ClassCounter.registerUsageCount("fvtt-cthulhu-eternal", {})
_showUserGuide()
/* Display the user guide */
async function _showUserGuide() {
if (game.user.isGM) {
const newVer = game.system.version
}
}
})
Hooks.on("renderChatMessage", (message, html, data) => {
@ -136,6 +152,9 @@ Hooks.on("renderChatMessage", (message, html, data) => {
}
})
Hooks.on("updateSetting", async (setting, update, options, id) => {
})
// Dice-so-nice Ready
Hooks.once("diceSoNiceReady", (dice3d) => {
configureDiceSoNice(dice3d)
@ -148,8 +167,18 @@ Hooks.once("diceSoNiceReady", (dice3d) => {
* Journal - open journal sheet
*/
Hooks.on("hotbarDrop", (bar, data, slot) => {
if (["Actor", "Item", "JournalEntry", "skill", "weapon"].includes(data.type)) {
// TODO -> Manage this
if (["Actor", "Item", "JournalEntry", "roll", "rollDamage", "rollAttack"].includes(data.type)) {
Macros.createCthulhuEternalMacro(data, slot);
return false
}
})
/**
* Register world usage statistics
* @param {string} registerKey
*/
function registerWorldCount(registerKey) {
if (game.user.isGM) {
ClassCounter.registerUsageCount(game.system.id, {})
}
}

View File

@ -1,17 +1,12 @@
const gulp = require('gulp');
const less = require('gulp-less');
function onError(err) {
util.log(util.colors.red.bold('[ERROR LESS]:'),util.colors.bgRed(err.message));
this.emit('end');
};
/* ----------------------------------------- */
/* Compile LESS
/* ----------------------------------------- */
function compileLESS() {
return gulp.src("styles/fvtt-cthulhu-eternal.less")
.pipe(less()).on('error',console.log.bind(console))
.pipe(less())
.pipe(gulp.dest("./css"))
}
const css = gulp.series(compileLESS);

View File

@ -1,8 +1,7 @@
{
"TYPES": {
"Actor": {
"protagonist": "Protagonist",
"vehicle": "Vehicle"
"protagonist": "Protagonist"
},
"Item": {
"skill": "Skill",
@ -19,8 +18,6 @@
},
"CTHULHUETERNAL": {
"Settings": {
"era": "Select the era of your game",
"eraHint": "Select the era of your game",
"Common": "Common",
"Classical": "Classical",
"Medieval": "Medieval",
@ -37,30 +34,7 @@
},
"Protagonist": {
"FIELDS": {
"resources": {
"permanentRating": {
"label": "Permanent Rating"
},
"hand": {
"label": "Hand"
},
"stowed": {
"label": "Stowed"
},
"storage": {
"label": "Storage"
}
},
"biodata": {
"feature": {
"label": "Feature"
},
"adaptedToViolence": {
"label": "Adapted to violence"
},
"adaptedToHelplessness": {
"label": "Adapted to helplessness"
},
"harshness": {
"label": "Harshness"
},
@ -109,12 +83,6 @@
}
}
},
"Insanity": {
"None": "None",
"Flee": "Flee",
"Submit": "Submit",
"Struggle": "Struggle"
},
"Skill": {
"Unnatural": "Unnatural",
"Melee": "Melee Weapons",
@ -152,9 +120,6 @@
"resourceLevel": {
"label": "Resource level"
},
"state": {
"label": "State"
},
"settings": {
"label": "Settings era"
}
@ -183,9 +148,6 @@
"riflecarabine": "Rifle/Carabine"
},
"FIELDS": {
"state": {
"label": "State"
},
"settings": {
"label": "Settings era"
},
@ -241,41 +203,10 @@
}
}
},
"Vehicle": {
"FIELDS": {
"description": {
"label": "Description"
},
"notes": {
"label": "Notes"
},
"surfaceSpeed": {
"label": "Surface Speed"
},
"airSpeed": {
"label": "Air Speed"
},
"armor": {
"label": "Armor"
},
"settings": {
"label": "Settings era"
},
"crew": {
"label": "Crew"
},
"state": {
"label": "State"
}
}
},
"MentalDisorder": {
"FIELDS": {
"description": {
"label": "Description"
},
"cured": {
"label": "Cured"
}
}
},
@ -325,31 +256,8 @@
"veryHarsh": "Very Harsh"
},
"Label": {
"Hand": "Hand",
"Stowed": "Stowed",
"Storage": "Storage",
"resourceRating": "Resource rating",
"Resources": "Resources",
"multiplier": "Multiplier",
"setBP": "Set BP",
"Vehicle": "Vehicle",
"Speed": "Speed",
"Slow": "Slow",
"Fast": "Fast",
"Average": "Average",
"None": "None",
"Pristine": "Pristine",
"Worn": "Worn",
"Junk": "Junk",
"resources": "Resources",
"resourceChecks": "Resource Checks",
"sanBPShort": "BP",
"tempInsanity": "Temp. Insanity",
"distinguishingFeatures": "Distinguishing Features",
"titleSkill": "Skill Roll",
"titleWeapon": "Weapon Roll",
"titleCharacteristic": "Characteristic Roll",
"titleSAN": "SAN Roll",
"titleSkill": "Skill",
"titleWeapon": "Weapon",
"biodata": "Biodata",
"skill": "Skill",
"modifier": "Modifier",
@ -401,7 +309,6 @@
"criticalSuccess": "Critical Success",
"criticalFailure": "Critical Failure",
"Characteristic": "Characteristic",
"characteristic": "Characteristic",
"targetScore": "Target Score",
"gears": "Gears",
"armors": "Armors",
@ -426,9 +333,6 @@
"newArchetype": "New Archetype",
"newSkill": "New Skill"
},
"ChatMessage": {
"exhausted": "Your protagonist is exhausted. He loses [[/r 1d6]] Willpower Points."
},
"Edit": "Edit",
"Delete": "Delete",
"ToggleSheet": "Toggle Sheet",
@ -440,15 +344,11 @@
"roll": "Roll"
},
"Tooltip": {
"sanBP": ">5 SAN lost in one roll, temporary insanity. If SAN less reaches BP = a Disorder unconscious Breaking and AND reset BP.",
"setBP": "Set the current Breaking Point based on the current SAN value"
"sanBP": ">5 SAN lost in one roll, temporary insanity. If SAN less reaches BP = a Disorder unconscious Breaking and AND reset BP."
},
"Setting": {
},
"Chat": {
},
"Notitications": {
"NoWeaponSkill": "No weapon skill found for this weapon. Check Weapon definition or available skills/era",
"NoWeaponType": "No weapon type found for this weapon subtype. Check Weapon definition or available skills/era",
"skillAlreadyExists": "Skill already exists"
}
}
}

View File

@ -9,4 +9,3 @@ export { default as CthulhuEternalMentalDisorderSheet } from "./sheets/mentaldis
export { default as CthulhuEternalGearSheet } from "./sheets/gear-sheet.mjs"
export { default as CthulhuEternalMotivationSheet } from "./sheets/motivation-sheet.mjs"
export { default as CthulhuEternalArchetypeSheet } from "./sheets/archetype-sheet.mjs"
export { default as CthulhuEternalVehicleSheet } from "./sheets/vehicle-sheet.mjs"

View File

@ -18,12 +18,4 @@ export default class CthulhuEternalMentalDisorderSheet extends CthulhuEternalIte
template: "systems/fvtt-cthulhu-eternal/templates/mentaldisorder.hbs",
},
}
/** @override */
async _prepareContext() {
const context = await super._prepareContext()
context.enrichedDescription = await TextEditor.enrichHTML(this.document.system.description, { async: true })
return context
}
}

View File

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

View File

@ -5,14 +5,13 @@ export default class CthulhuEternalProtagonistSheet extends CthulhuEternalActorS
static DEFAULT_OPTIONS = {
classes: ["protagonist"],
position: {
width: 860,
width: 848,
height: 620,
},
window: {
contentClasses: ["protagonist-content"],
},
actions: {
setBP: CthulhuEternalProtagonistSheet.#onSetBP,
createGear: CthulhuEternalProtagonistSheet.#onCreateGear,
createArmor: CthulhuEternalProtagonistSheet.#onCreateArmor,
createWeapon: CthulhuEternalProtagonistSheet.#onCreateWeapon,
@ -74,9 +73,6 @@ export default class CthulhuEternalProtagonistSheet extends CthulhuEternalActorS
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 })
context.tooltipsCharacteristic = {
str: game.i18n.localize("CTHULHUETERNAL.Characteristic.Str"),
dex: game.i18n.localize("CTHULHUETERNAL.Characteristic.Dex"),
@ -86,9 +82,23 @@ export default class CthulhuEternalProtagonistSheet extends CthulhuEternalActorS
cha: game.i18n.localize("CTHULHUETERNAL.Characteristic.Cha")
}
context.tooltipsRessources = {
}
context.rollType = {
str: "characteristic",
dex: "characteristic",
con: "characteristic",
int: "characteristic",
pow: "characteristic",
cha: "characteristic"
}
return context
}
_generateTooltip(type, target) {
}
/** @override */
async _preparePartContext(partId, context) {
const doc = this.document
@ -98,30 +108,22 @@ export default class CthulhuEternalProtagonistSheet extends CthulhuEternalActorS
case "skills":
context.tab = context.tabs.skills
context.skills = doc.itemTypes.skill
context.skills.sort((a, b) => a.name.localeCompare(b.name))
break
case "equipment":
context.tab = context.tabs.equipment
context.weapons = doc.itemTypes.weapon
context.weapons.sort((a, b) => a.name.localeCompare(b.name))
context.armors = doc.itemTypes.armor
context.armors.sort((a, b) => a.name.localeCompare(b.name))
context.gears = doc.itemTypes.gear
context.gears.sort((a, b) => a.name.localeCompare(b.name))
break
case "status":
context.tab = context.tabs.status
context.injuries = doc.itemTypes.injury
context.injuries.sort((a, b) => a.name.localeCompare(b.name))
context.mentaldisorders = doc.itemTypes.mentaldisorder
context.mentaldisorders.sort((a, b) => a.name.localeCompare(b.name))
context.bonds = doc.itemTypes.bond
context.bonds.sort((a, b) => a.name.localeCompare(b.name))
break
case "biography":
context.tab = context.tabs.biography
context.motivations = doc.itemTypes.motivation
context.motivations.sort((a, b) => a.name.localeCompare(b.name))
context.enrichedDescription = await TextEditor.enrichHTML(doc.system.description, { async: true })
context.enrichedNotes = await TextEditor.enrichHTML(doc.system.notes, { async: true })
break
@ -134,10 +136,6 @@ export default class CthulhuEternalProtagonistSheet extends CthulhuEternalActorS
* @param {Event} event The initiating click event.
* @param {HTMLElement} target The current target of the event listener.
*/
static #onSetBP(event, target) {
this.document.system.setBP()
}
static #onCreateGear(event, target) {
this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("CTHULHUETERNAL.Label.newGear"), type: "gear" }])
}
@ -191,15 +189,10 @@ export default class CthulhuEternalProtagonistSheet extends CthulhuEternalActorS
// Debug : console.log(">>>>", event, target, rollType)
// Deprecated : if (this.isEditMode) return
switch (rollType) {
case "resource":
item = foundry.utils.duplicate(this.actor.system.resources)
item.name = game.i18n.localize(`CTHULHUETERNAL.Label.Resources`)
item.targetScore = item.permanentRating
break
case "char":
let charId = $(event.currentTarget).data("char-id")
item = foundry.utils.duplicate(this.actor.system.characteristics[charId])
item.name = game.i18n.localize(`CTHULHUETERNAL.Label.${charId}Long`)
item.name = game.i18n.localize("CTHULHUETERNAL.Label." + charId + "Long")
item.targetScore = item.value * 5
break
case "skill":
@ -211,11 +204,6 @@ export default class CthulhuEternalProtagonistSheet extends CthulhuEternalActorS
li = $(event.currentTarget).parents(".item");
item = this.actor.items.get(li.data("item-id"));
break
case "san":
item = foundry.utils.duplicate(this.actor.system.san)
item.name = game.i18n.localize("CTHULHUETERNAL.Label.SAN")
item.targetScore = item.value
break;
default:
throw new Error(`Unknown roll type ${rollType}`)
}

View File

@ -1,117 +0,0 @@
import CthulhuEternalActorSheet from "./base-actor-sheet.mjs"
export default class CthulhuEternalVehicleSheet extends CthulhuEternalActorSheet {
/** @override */
static DEFAULT_OPTIONS = {
classes: ["vehicle"],
position: {
width: 680,
height: 540,
},
window: {
contentClasses: ["vehicle-content"],
},
actions: {
createGear: CthulhuEternalVehicleSheet.#onCreateGear,
createWeapon: CthulhuEternalVehicleSheet.#onCreateWeapon,
},
}
/** @override */
static PARTS = {
main: {
template: "systems/fvtt-cthulhu-eternal/templates/vehicle-main.hbs",
},
tabs: {
template: "templates/generic/tab-navigation.hbs",
},
equipment: {
template: "systems/fvtt-cthulhu-eternal/templates/vehicle-equipment.hbs",
},
description: {
template: "systems/fvtt-cthulhu-eternal/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: "CTHULHUETERNAL.Label.equipment" },
description: { id: "description", group: "sheet", icon: "fa-solid fa-book", label: "CTHULHUETERNAL.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.gears = doc.itemTypes.gear
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 #onCreateGear(event, target) {
this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("CTHULHUETERNAL.Label.newGear"), type: "gear" }])
}
static #onCreateWeapon(event, target) {
this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("CTHULHUETERNAL.Label.newWeapon"), type: "weapon" }])
}
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

@ -34,26 +34,19 @@ export const AVAILABLE_SETTINGS = {
postapo: "CTHULHUETERNAL.Settings.PostApo"
}
export const INSANITY = {
"none": "CTHULHUETERNAL.Insanity.None",
"flee": "CTHULHUETERNAL.Insanity.Flee",
"struggle": "CTHULHUETERNAL.Insanity.Struggle",
"submit": "CTHULHUETERNAL.Insanity.Submit"
}
export const ERA_CSS = {
jazz: { primaryFont: "RozhaOne", secondaryFont: "RozhaOne", titleFont: "Broadway", baseFontSize: "1.0rem", titleFontSize: "1.2rem", imgFilter: "brightness(0) saturate(100%) invert(52%) sepia(9%) saturate(2368%) hue-rotate(360deg) brightness(86%) contrast(84%)" },
modern: { primaryFont: "Georama", secondaryFont: "Georama", titleFont: "Georama", baseFontSize: "1.0rem", titleFontSize: "1.2rem",imgFilter: "brightness(0) saturate(100%) invert(92%) sepia(11%) saturate(1214%) hue-rotate(51deg) brightness(93%) contrast(86%)" },
future: { primaryFont: "Georama", secondaryFont: "Georama", titleFont: "Seabreed", baseFontSize: "1.0rem", titleFontSize: "2.0rem",imgFilter: "invert(90%) sepia(6%) saturate(1818%) hue-rotate(152deg) brightness(91%) contrast(91%)" },
victorian: { primaryFont: "Volkhov", secondaryFont: "Volkhov", titleFont: "Excelsior", baseFontSize: "1.0rem", titleFontSize: "1.2rem",imgFilter: "brightness(0) saturate(100%) invert(100%) sepia(59%) saturate(1894%) hue-rotate(337deg) brightness(88%) contrast(98%)" },
coldwar: { primaryFont: "Georama", secondaryFont: "Georama", titleFont: "TopSecret", baseFontSize: "1.0rem", titleFontSize: "1.2rem",imgFilter: "brightness(0) saturate(100%) invert(81%) sepia(14%) saturate(2508%) hue-rotate(202deg) brightness(99%) contrast(105%)"},
revolution: { primaryFont: "IMFell", secondaryFont: "IMFell", titleFont: "Dominican", baseFontSize: "1.0rem",titleFontSize: "1.3rem",imgFilter: "brightness(0) saturate(100%) invert(81%) sepia(25%) saturate(386%) hue-rotate(7deg) brightness(101%) contrast(84%)" },
medieval: { primaryFont: "UncialAntiqua", secondaryFont: "UncialAntiqua", titleFont: "Luminari", baseFontSize: "0.9rem",titleFontSize: "1.2rem",imgFilter: "brightness(0) saturate(100%) invert(93%) sepia(46%) saturate(354%) hue-rotate(321deg) brightness(93%) contrast(87%)"},
ww2: { primaryFont: "SairaStencilOne", secondaryFont: "SairaStencilOne", titleFont: "Armalite", baseFontSize: "0.9rem",titleFontSize: "1.2rem",imgFilter: "filter: invert(44%) sepia(8%) saturate(2657%) hue-rotate(40deg) brightness(96%) contrast(75%)"},
ww1: { primaryFont: "CarterOne", secondaryFont: "CarterOne", titleFont: "SigmarOne", baseFontSize: "0.9rem",titleFontSize: "1.1rem",imgFilter: "invert(28%) sepia(27%) saturate(475%) hue-rotate(76deg) brightness(95%) contrast(93%)"},
ageofsail: { primaryFont: "SailRegular", secondaryFont: "SailRegular", titleFont: "P22Operina", baseFontSize: "1.1rem",titleFontSize: "1.2rem",imgFilter: "brightness(0) saturate(100%) invert(43%) sepia(74%) saturate(3154%) hue-rotate(336deg) brightness(95%) contrast(83%)" },
classical: { primaryFont: "ChantelliAntiqua", secondaryFont: "ChantelliAntiqua", titleFont: "TrajanPro", baseFontSize: "0.9rem",titleFontSize: "1.1rem",imgFilter: "brightness(0) saturate(100%) invert(52%) sepia(32%) saturate(7492%) hue-rotate(265deg) brightness(89%) contrast(95%)" },
postapo: { primaryFont: "Teko", secondaryFont: "Teko", titleFont: "Teko", baseFontSize: "1.25rem",titleFontSize: "1.5rem",imgFilter: "brightness(0) saturate(100%) invert(44%) sepia(55%) saturate(2341%) hue-rotate(329deg) brightness(122%) contrast(103%))" }
jazz: { primaryFont: "RozhaOne", secondaryFont: "RozhaOne", titleFont: "Broadway", imgFilter: "brightness(0) saturate(100%) invert(52%) sepia(9%) saturate(2368%) hue-rotate(360deg) brightness(86%) contrast(84%)" },
modern: { primaryFont: "Georama", secondaryFont: "Georama", titleFont: "Georama", imgFilter: "brightness(0) saturate(100%) invert(92%) sepia(11%) saturate(1214%) hue-rotate(51deg) brightness(93%) contrast(86%)" },
future: { primaryFont: "Megrim", secondaryFont: "Megrim", titleFont: "Seabreed", imgFilter: "brightness(0) saturate(100%) invert(83%) sepia(30%) saturate(588%) hue-rotate(168deg) brightness(105%) contrast(103%)" },
victorian: { primaryFont: "Volkhov", secondaryFont: "Volkhov", titleFont: "Excelsior", imgFilter: "brightness(0) saturate(100%) invert(100%) sepia(59%) saturate(1894%) hue-rotate(337deg) brightness(88%) contrast(98%)" },
coldwar: { primaryFont: "BebasNeue", secondaryFont: "BebasNeue", titleFont: "TopSecret", imgFilter: "brightness(0) saturate(100%) invert(81%) sepia(14%) saturate(2508%) hue-rotate(202deg) brightness(99%) contrast(105%)"},
revolution: { primaryFont: "IMFell", secondaryFont: "IMFell", titleFont: "Dominican", imgFilter: "brightness(0) saturate(100%) invert(81%) sepia(25%) saturate(386%) hue-rotate(7deg) brightness(101%) contrast(84%)" },
medieval: { primaryFont: "UncialAntiqua", secondaryFont: "UncialAntiqua", titleFont: "Luminari", imgFilter: "brightness(0) saturate(100%) invert(93%) sepia(46%) saturate(354%) hue-rotate(321deg) brightness(93%) contrast(87%)"},
ww2: { primaryFont: "SairaStencilOne", secondaryFont: "SairaStencilOne", titleFont: "Armalite", imgFilter: "brightness(0) saturate(100%) invert(95%) sepia(9%) saturate(1471%) hue-rotate(342deg) brightness(103%) contrast(107%)"},
ww1: { primaryFont: "CarterOne", secondaryFont: "CarterOne", titleFont: "SigmarOne", imgFilter: "brightness(0) saturate(100%) invert(90%) sepia(38%) saturate(341%) hue-rotate(21deg) brightness(105%) contrast(105%)"},
ageofsail: { primaryFont: "Tangerine", secondaryFont: "Tangerine", titleFont: "P22Operina", imgFilter: "brightness(0) saturate(100%) invert(43%) sepia(74%) saturate(3154%) hue-rotate(336deg) brightness(95%) contrast(83%)" },
classical: { primaryFont: "SpectralSC", secondaryFont: "SpectralSC", titleFont: "TrajanPro", imgFilter: "brightness(0) saturate(100%) invert(52%) sepia(32%) saturate(7492%) hue-rotate(265deg) brightness(89%) contrast(95%)" },
postapo: { primaryFont: "Teko", secondaryFont: "Teko", titleFont: "Teko", imgFilter: "brightness(0) saturate(100%) invert(44%) sepia(55%) saturate(2341%) hue-rotate(329deg) brightness(122%) contrast(103%))" }
}
export const RESOURCE_RATING = {
@ -89,43 +82,6 @@ export const RESOURCE_RATING = {
}
}
export const RESOURCE_BREAKDOWN = [
{ value: 0, hand: 0, stowed: 0, storage: 0, checks: 0},
{ value: 1, hand: 1, stowed: 0, storage: 0, checks: 1},
{ value: 2, hand: 2, stowed: 0, storage: 0, checks: 1},
{ value: 3, hand: 3, stowed: 0, storage: 0, checks: 1},
{ value: 4, hand: 4, stowed: 0, storage: 0, checks: 1},
{ value: 5, hand: 5, stowed: 0, storage: 0, checks: 1},
{ value: 6, hand: 6, stowed: 0, storage: 0, checks: 1},
{ value: 7, hand: 6, stowed: 1, storage: 0, checks: 2},
{ value: 8, hand: 6, stowed: 2, storage: 0, checks: 2},
{ value: 9, hand: 6, stowed: 3, storage: 0, checks: 2},
{ value: 10, hand: 6, stowed: 4, storage: 0, checks: 2},
{ value: 11, hand: 6, stowed: 5, storage: 0, checks: 2},
{ value: 12, hand: 6, stowed: 6, storage: 0, checks: 2},
{ value: 13, hand: 6, stowed: 6, storage: 1, checks: 3},
{ value: 14, hand: 6, stowed: 6, storage: 2, checks: 3},
{ value: 15, hand: 6, stowed: 6, storage: 3, checks: 3},
{ value: 16, hand: 6, stowed: 6, storage: 4, checks: 3},
{ value: 17, hand: 6, stowed: 6, storage: 5, checks: 3},
{ value: 18, hand: 6, stowed: 6, storage: 6, checks: 3},
{ value: 19, hand: 6, stowed: 6, storage: 7, checks: 3},
{ value: 20, hand: 6, stowed: 6, storage: 8, checks: 3}
]
export const VEHICLE_SPEED = {
"none": "CTHULHUETERNAL.Label.None",
"slow": "CTHULHUETERNAL.Label.Slow",
"average": "CTHULHUETERNAL.Label.Average",
"fast": "CTHULHUETERNAL.Label.Fast"
}
export const EQUIPMENT_STATES = {
"pristine": "CTHULHUETERNAL.Label.Pristine",
"worn": "CTHULHUETERNAL.Label.Worn",
"junk": "CTHULHUETERNAL.Label.Junk"
}
export const MENTAL_ILLNESS_CURE_SKILL = {
jazz: "CTHULHUETERNAL.Skill.Psychoanalyze",
modern: "CTHULHUETERNAL.Skill.Psychoanalyze",
@ -209,26 +165,6 @@ export const WEAPON_SKILL_MAPPING = {
"unarmed": "CTHULHUETERNAL.Skill.UnarmedCombat"
}
}
export const MODIFIER_CHOICES = {
"-40": "-40",
"-20": "-20",
"-10": "-10",
"+0": "+0",
"+10": "+10",
"+20": "+20",
"+40": "+40",
}
export const MULTIPLIER_CHOICES = {
"0.25": "0.25",
"0.5": "0.5",
"1": "1",
"2": "2",
"4": "4",
"5": "5"
}
/**
* Include all constant definitions within the SYSTEM global export
* @type {Object}
@ -245,11 +181,5 @@ export const SYSTEM = {
RESOURCE_RATING,
MENTAL_ILLNESS_CURE_SKILL,
ERA_CSS,
INSANITY,
EQUIPMENT_STATES,
RESOURCE_BREAKDOWN,
VEHICLE_SPEED,
MODIFIER_CHOICES,
MULTIPLIER_CHOICES,
ASCII
}

View File

@ -1,7 +1,7 @@
import CthulhuEternalUtils from "../utils.mjs"
export default class CthulhuEternalActor extends Actor {
static async create(data, options) {
// Case of compendium global import
@ -19,7 +19,7 @@ export default class CthulhuEternalActor extends Actor {
const skills = await CthulhuEternalUtils.loadCompendium("fvtt-cthulhu-eternal.skills")
data.items = data.items || []
for (let skill of skills) {
if (skill.system.settings === era) {
if (skill.system.settings === era ) {
data.items.push(skill.toObject())
}
}
@ -28,50 +28,20 @@ export default class CthulhuEternalActor extends Actor {
return super.create(data, options);
}
_onUpdate(changed, options, userId) {
// DEBUG : console.log("CthulhuEternalActor.update", changed, options, userId)
if (changed?.system?.wp?.exhausted) {
ChatMessage.create({
user: userId,
speaker: { alias: this.name },
rollMode: "selfroll",
content: game.i18n.localize("CTHULHUETERNAL.ChatMessage.exhausted"),
type: CONST.CHAT_MESSAGE_STYLES.OTHER
})
}
return super._onUpdate(changed, options, userId)
}
async createEmbeddedDocuments(embeddedName, data, operation) {
let newData = []
if (embeddedName === "Item") {
for (let i of data) {
if (i.type === "skill") {
if (this.items.find(item => item.name.toLowerCase() === i.name.toLowerCase())) {
ui.notifications.warn(game.i18n.localize("CTHULHUETERNAL.Notifications.skillAlreadyExists"))
continue
}
}
newData.push(i)
}
return super.createEmbeddedDocuments(embeddedName, newData, operation)
}
return super.createEmbeddedDocuments(embeddedName, data, operation)
}
async _preCreate(data, options, user) {
await super._preCreate(data, options, user)
await super._preCreate(data, options, user)
// Configure prototype token settings
const prototypeToken = {}
if (this.type === "protagonist") {
Object.assign(prototypeToken, {
sight: { enabled: true },
actorLink: true,
disposition: CONST.TOKEN_DISPOSITIONS.FRIENDLY,
})
this.updateSource({ prototypeToken })
// Configure prototype token settings
const prototypeToken = {}
if (this.type === "protagonist") {
Object.assign(prototypeToken, {
sight: { enabled: true },
actorLink: true,
disposition: CONST.TOKEN_DISPOSITIONS.FRIENDLY,
})
this.updateSource({ prototypeToken })
}
}
}
}

View File

@ -59,6 +59,18 @@ export default class CthulhuEternalRoll extends Roll {
return this.options.hasTarget
}
get targetName() {
return this.options.targetName
}
get targetArmor() {
return this.options.targetArmor
}
get targetMalus() {
return this.options.targetMalus
}
get realDamage() {
return this.options.realDamage
}
@ -67,35 +79,6 @@ export default class CthulhuEternalRoll extends Roll {
return this.options.weapon
}
get isLowWP() {
return this.options.isLowWP
}
get isZeroWP() {
return this.options.isZeroWP
}
get isExhausted() {
return this.options.isExhausted
}
static updateResourceDialog(options) {
let rating = 0
if (options.rollItem.enableHand) {
rating += options.rollItem.hand
}
if (options.rollItem.enableStowed) {
rating += options.rollItem.stowed
}
if (options.rollItem.enableStorage) {
rating += options.rollItem.storage
}
let multiplier = Number($(`.roll-skill-multiplier`).val())
options.initialScore = rating
options.percentScore = rating * multiplier
$(".resource-score").text(`${rating} (${options.percentScore}%)`)
}
/**
* Prompt the user with a dialog to configure and execute a roll.
*
@ -112,59 +95,37 @@ export default class CthulhuEternalRoll extends Roll {
*/
static async prompt(options = {}) {
let formula = "1d100"
let hasModifier = true
let hasMultiplier = false
switch (options.rollType) {
case "skill":
console.log(options.rollItem)
options.initialScore = options.rollItem.system.computeScore()
break
case "san":
case "char":
options.initialScore = options.rollItem.targetScore
break
case "resource":
hasModifier = false
hasMultiplier = true
options.initialScore = options.rollItem.targetScore
options.totalRating = options.rollItem.targetScore
options.percentScore = options.rollItem.targetScore * 5
options.rollItem.enableHand = true
options.rollItem.enableStowed = true
options.rollItem.enableStorage = true
break
case "damage":
let formula = options.rollItem.system.damage
case "damage":
let formula = options.rollItem.system.damage
let damageRoll = new Roll(formula)
await damageRoll.evaluate()
await damageRoll.toMessage({
flavor: `${options.rollItem.name} - Damage Roll`
});
let isLethal = false
if (options.rollItem.system.lethality > 0) {
if (options.rollItem.system.lethality > 0 ) {
let lethalityRoll = new Roll("1d100")
await lethalityRoll.evaluate()
isLethal = (lethalityRoll.total <= options.rollItem.system.lethality)
isLethal = (lethalityRoll.total <= options.rollItem.system.lethality)
await lethalityRoll.toMessage({
flavor: `${options.rollItem.name} - Lethality Roll : ${lethalityRoll.total} <= ${options.rollItem.system.lethality} => ${isLethal}`
});
}
}
return
case "weapon":
case "weapon":
let era = game.settings.get("fvtt-cthulhu-eternal", "settings-era")
if (!SYSTEM.WEAPON_SKILL_MAPPING[era] || !SYSTEM.WEAPON_SKILL_MAPPING[era][options.rollItem.system.weaponType]) {
ui.notifications.error(game.i18n.localize("CTHULHUETERNAL.Notifications.NoWeaponType"))
return
}
let skillName = game.i18n.localize(SYSTEM.WEAPON_SKILL_MAPPING[era][options.rollItem.system.weaponType])
let skillName = game.i18n.localize(SYSTEM.WEAPON_SKILL_MAPPING[era][options.rollItem.system.weaponType])
let actor = game.actors.get(options.actorId)
options.weapon = options.rollItem
options.rollItem = actor.items.find(i => i.type === "skill" && i.name.toLowerCase() === skillName.toLowerCase())
if (!options.rollItem) {
ui.notifications.error(game.i18n.localize("CTHULHUETERNAL.Notifications.NoWeaponSkill"))
return
}
options.initialScore = options.rollItem.system.computeScore()
console.log("WEAPON", skillName, era, options.rollItem)
break
@ -180,34 +141,37 @@ export default class CthulhuEternalRoll extends Roll {
default: "public",
})
const choiceModifier = SYSTEM.MODIFIER_CHOICES
const choiceMultiplier = SYSTEM.MULTIPLIER_CHOICES
const choiceModifier = {
"-10": "-10",
"-20": "-20",
"-40": "-40",
"0": "0",
"+10": "+10",
"+20": "+20",
"+40": "+40",
}
let modifier = "+0"
let multiplier = "5"
let modifier = "0"
let targetMalus = "0"
let targetName
let targetArmor
let dialogContext = {
rollType: options.rollType,
rollItem: foundry.utils.duplicate(options.rollItem), // Object only, no class
weapon: options?.weapon,
weapon: options?.weapon,
initialScore: options.initialScore,
targetScore: options.initialScore,
isLowWP: options.isLowWP,
isZeroWP: options.isZeroWP,
isExhausted: options.isExhausted,
enableHand: options.rollItem.enableHand,
enableStowed: options.rollItem.enableStowed,
enableStorage: options.rollItem.enableStorage,
rollModes,
fieldRollMode,
choiceModifier,
choiceMultiplier,
formula,
hasTarget: options.hasTarget,
hasModifier,
hasMultiplier,
modifier,
multiplier
targetName,
targetArmor
}
const content = await renderTemplate("systems/fvtt-cthulhu-eternal/templates/roll-dialog.hbs", dialogContext)
@ -229,49 +193,30 @@ export default class CthulhuEternalRoll extends Roll {
},
},
],
actions: {
"selectHand": (event, button, dialog) => {
options.rollItem.enableHand = !options.rollItem.enableHand
this.updateResourceDialog(options)
},
"selectStowed": (event, button, dialog) => {
options.rollItem.enableStowed = !options.rollItem.enableStowed
this.updateResourceDialog(options)
},
"selectStorage": (event, button, dialog) => {
options.rollItem.enableStorage = !options.rollItem.enableStorage
this.updateResourceDialog(options)
}
},
rejectClose: false, // Click on Close button will not launch an error
render: (event, dialog) => {
$(".roll-skill-multiplier").change(event => {
options.multiplier = Number(event.target.value)
this.updateResourceDialog(options)
})
}
},
})
// If the user cancels the dialog, exit
if (rollContext === null) return
let rollData = foundry.utils.mergeObject(foundry.utils.duplicate(options), rollContext)
rollData.rollMode = rollContext.visibility
rollData.rollMode = rollContext.visibility
rollData.targetName = targetName
rollData.targetArmor = targetArmor
rollData.targetMalus = targetMalus
// Update target score
console.log(rollData)
if (options.rollType === "resource" ) {
rollData.targetScore = options.initialScore * Number(rollContext.multiplier)
} else {
rollData.targetScore = Math.min(Math.max(options.initialScore + Number(rollData.modifier), 0), 100)
if (rollData.isLowWP || rollData.isExhausted) {
rollData.targetScore -= 20
}
if (rollData.isZeroWP) {
rollData.targetScore = 0
}
rollData.targetScore = Math.min(Math.max(rollData.targetScore, 0), 100)
rollData.targetScore = Math.min( Math.max(options.initialScore + Number(rollData.modifier), 0), 100)
if ( rollData.isLowWP ) {
rollData.targetScore -= 20
}
if ( rollData.isZeroWP ) {
rollData.targetScore = 0
}
rollData.targetScore = Math.min( Math.max(rollData.targetScore, 0), 100)
/**
* A hook event that fires before the roll is made.
@ -282,9 +227,9 @@ export default class CthulhuEternalRoll extends Roll {
await roll.evaluate()
// Compute the result quality
let resultType = "failure"
let dec = Math.floor(roll.total / 10)
let unit = roll.total - (dec * 10)
let resultType = "failure"
let dec = Math.floor(roll.total/10)
let unit = roll.total - (dec*10)
if (roll.total <= rollData.targetScore) {
resultType = "success"
// Detect if decimal == unit in the dire total result
@ -302,9 +247,6 @@ export default class CthulhuEternalRoll extends Roll {
roll.options.isSuccess = resultType === "success" || resultType === "successCritical"
roll.options.isFailure = resultType === "failure" || resultType === "failureCritical"
roll.options.isCritical = resultType === "successCritical" || resultType === "failureCritical"
roll.options.isLowWP = rollData.isLowWP
roll.options.isZeroWP = rollData.isZeroWP
roll.options.isExhausted = rollData.isExhausted
/**
* A hook event that fires after the roll has been made.
@ -327,10 +269,6 @@ export default class CthulhuEternalRoll extends Roll {
return `${game.i18n.localize("CTHULHUETERNAL.Label.titleSkill")}`
case "weapon":
return `${game.i18n.localize("CTHULHUETERNAL.Label.titleWeapon")}`
case "char":
return `${game.i18n.localize("CTHULHUETERNAL.Label.titleCharacteristic")}`
case "san":
return `${game.i18n.localize("CTHULHUETERNAL.Label.titleSAN")}`
default:
return game.i18n.localize("CTHULHUETERNAL.Label.titleStandard")
}
@ -368,10 +306,10 @@ export default class CthulhuEternalRoll extends Roll {
*/
async _getChatCardData(isPrivate) {
let cardData = foundry.utils.duplicate(this.options)
cardData.css = [SYSTEM.id, "dice-roll"]
cardData.data = this.data
cardData.diceTotal = this.dice.reduce((t, d) => t + d.total, 0)
cardData.isGM = game.user.isGM
cardData.css = [SYSTEM.id, "dice-roll"]
cardData.data = this.data
cardData.diceTotal = this.dice.reduce((t, d) => t + d.total, 0)
cardData.isGM = game.user.isGM
cardData.formula = this.formula
cardData.total = this.total
cardData.actorId = this.actorId
@ -384,10 +322,6 @@ export default class CthulhuEternalRoll extends Roll {
cardData.realDamage = this.realDamage
cardData.isPrivate = isPrivate
cardData.weapon = this.weapon
cardData.isLowWP = this.isLowWP
cardData.isZeroWP = this.isZeroWP
cardData.isExhausted = this.isExhausted
console.log(cardData)
@ -412,6 +346,9 @@ export default class CthulhuEternalRoll extends Roll {
actingCharName: this.actorName,
actingCharImg: this.actorImage,
hasTarget: this.hasTarget,
targetName: this.targetName,
targetArmor: this.targetArmor,
targetMalus: this.targetMalus,
realDamage: this.realDamage,
...messageData,
},

80
module/enrichers.mjs Normal file
View File

@ -0,0 +1,80 @@
/**
* Enricher qui permet de transformer un texte en un lien de lancer de dés
* Pour une syntaxe de type @jet[x]{y}(z) avec x la caractéristique, y le titre et z l'avantage
* x de type rob, dex, int, per, vol pour les caractéristiques
* et de type oeil, verbe, san, bourse, magie pour les ressources
* y est le titre du jet et permet de décrire l'action
* z est l'avantage du jet, avec pour valeurs possibles : --, -, +, ++
*/
export function setupTextEnrichers() {
CONFIG.TextEditor.enrichers = CONFIG.TextEditor.enrichers.concat([
{
// eslint-disable-next-line no-useless-escape
pattern: /\@jet\[(.+?)\]{(.*?)}\((.*?)\)/gm,
enricher: async (match, options) => {
const a = document.createElement("a")
a.classList.add("ask-roll-journal")
const target = match[1]
const title = match[2]
const avantage = match[3]
let type = "resource"
if (["rob", "dex", "int", "per", "vol"].includes(target)) {
type = "save"
}
let rollAvantage = "normal"
if (avantage) {
switch (avantage) {
case "++":
rollAvantage = "++"
break
case "+":
rollAvantage = "+"
break
case "-":
rollAvantage = "-"
break
case "--":
rollAvantage = "--"
break
default:
break
}
}
a.dataset.rollType = type
a.dataset.rollTarget = target
a.dataset.rollTitle = title
a.dataset.rollAvantage = rollAvantage
a.innerHTML = `
<i class="fas fa-dice-d20"></i> ${getLibelle(target)}${rollAvantage !== "normal" ? rollAvantage : ""}
`
return a
},
},
])
}
const mapLibelles = {
rob: "ROB",
dex: "DEX",
int: "INT",
per: "PER",
vol: "VOL",
oeil: "OEIL",
verbe: "VERBE",
san: "SANTE MENTALE",
bourse: "BOURSE",
magie: "MAGIE",
}
/**
* Retourne le libellé associé à la valeur qui sera affiché dans le journal
* @param {string} value
*/
function getLibelle(value) {
if (mapLibelles[value]) {
return mapLibelles[value]
}
return null
}

82
module/macros.mjs Normal file
View File

@ -0,0 +1,82 @@
export class Macros {
/**
* Creates a macro based on the type of data dropped onto the hotbar.
*
* @param {Object} dropData The data object representing the item dropped.
* @param {string} dropData.type The type of the dropped item (e.g., "Actor", "JournalEntry", "roll").
* @param {string} dropData.uuid The UUID of the dropped item.
* @param {string} [dropData.actorId] The ID of the actor (required if type is "roll").
* @param {string} [dropData.rollType] The type of roll (required if type is "roll").
* @param {string} [dropData.rollTarget] The target of the roll (required if type is "roll").
* @param {string} [dropData.value] The value of the roll (required if type is "roll").
* @param {number} slot The hotbar slot where the macro will be created.
*
* @returns {Promise<void>} A promise that resolves when the macro is created.
*/
static createCthulhuEternalMacro = async function (dropData, slot) {
switch (dropData.type) {
case "Actor":
const actor = await fromUuid(dropData.uuid)
const actorCommand = `game.actors.get("${actor.id}").sheet.render(true)`
this.createMacro(slot, actor.name, actorCommand, actor.img)
break
case "JournalEntry":
const journal = await fromUuid(dropData.uuid)
const journalCommand = `game.journal.get("${journal.id}").sheet.render(true)`
this.createMacro(slot, journal.name, journalCommand, journal.img ? journal.img : "icons/svg/book.svg")
break
case "roll":
const rollCommand =
dropData.rollType === "save"
? `game.actors.get('${dropData.actorId}').system.roll('${dropData.rollType}', '${dropData.rollTarget}', '=');`
: `game.actors.get('${dropData.actorId}').system.roll('${dropData.rollType}', '${dropData.rollTarget}');`
const rollName = `${game.i18n.localize("TENEBRIS.Label.jet")} ${game.i18n.localize(`TENEBRIS.Manager.${dropData.rollTarget}`)}`
this.createMacro(slot, rollName, rollCommand, "icons/svg/d20-grey.svg")
break
case "rollDamage":
const weapon = game.actors.get(dropData.actorId).items.get(dropData.rollTarget)
const rollDamageCommand = `game.actors.get('${dropData.actorId}').system.roll('${dropData.rollType}', '${dropData.rollTarget}');`
const rollDamageName = `${game.i18n.localize("TENEBRIS.Label.jet")} ${weapon.name}`
this.createMacro(slot, rollDamageName, rollDamageCommand, weapon.img)
break
case "rollAttack":
const rollAttackCommand = `game.actors.get('${dropData.actorId}').system.roll('${dropData.rollValue}', '${dropData.rollTarget}');`
const rollAttackName = `${game.i18n.localize("TENEBRIS.Label.jet")} ${dropData.rollTarget}`
this.createMacro(slot, rollAttackName, rollAttackCommand, "icons/svg/d20-grey.svg")
break
default:
// Handle other cases or do nothing
break
}
}
/**
* Create a macro
* All macros are flaged with a tenebris.macro flag at true
* @param {*} slot
* @param {*} name
* @param {*} command
* @param {*} img
*/
static createMacro = async function (slot, name, command, img) {
let macro = game.macros.contents.find((m) => m.name === name && m.command === command)
if (!macro) {
macro = await Macro.create(
{
name: name,
type: "script",
img: img,
command: command,
flags: { "tenebris.macro": true },
},
{ displaySheet: false },
)
game.user.assignHotbarMacro(macro, slot)
}
}
}

View File

@ -9,5 +9,3 @@ export { default as CthulhuEternalBond } from "./bond.mjs"
export { default as CthulhuEternalGear } from "./gear.mjs"
export { default as CthulhuEternalMotivation } from "./motivation.mjs"
export { default as CthulhuEternalArchetype } from "./archetype.mjs"
export { default as CthulhuEternalVehicle } from "./vehicle.mjs"

View File

@ -9,7 +9,6 @@ export default class CthulhuEternalGHear extends foundry.abstract.TypeDataModel
schema.description = new fields.HTMLField({ required: true, textSearch: true })
schema.settings = new fields.StringField({ required: true, initial: "modern", choices: SYSTEM.AVAILABLE_SETTINGS })
schema.resourceLevel = new fields.NumberField({ required: true, initial: 0, min: 0 })
schema.state = new fields.StringField({ required: true, initial: "pristine", choices: SYSTEM.EQUIPMENT_STATES })
return schema
}

View File

@ -5,8 +5,7 @@ export default class CthulhuEternalMentalDisorder extends foundry.abstract.TypeD
const schema = {}
schema.description = new fields.HTMLField({ required: true, textSearch: true })
schema.cured = new fields.BooleanField({ required: true, initial: false })
return schema
}

View File

@ -33,8 +33,8 @@ export default class CthulhuEternalProtagonist extends foundry.abstract.TypeData
})
schema.hp = new fields.SchemaField({
value: new fields.NumberField({ ...requiredInteger, initial: 1, min: 0 }),
max: new fields.NumberField({ ...requiredInteger, initial: 1, min: 0 }),
value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
stunned: new fields.BooleanField({ required: true, initial: false })
})
@ -44,23 +44,16 @@ export default class CthulhuEternalProtagonist extends foundry.abstract.TypeData
recovery: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
violence: new fields.ArrayField(new fields.BooleanField(), { required: true, initial: [false, false, false], min:3, max:3}),
helplessness: new fields.ArrayField(new fields.BooleanField(), { required: true, initial: [false, false, false], min:3, max:3 }),
breakingPoint: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
insanity: new fields.StringField({ required: true, nullable: false, initial: "none", choices:SYSTEM.INSANITY }),
breakingPoint: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 })
})
schema.damageBonus = new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 })
schema.resources = new fields.SchemaField({
value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), // Unused but kept for compatibility
permanentRating: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
hand: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
currentHand: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
stowed: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
currentStowed: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
storage: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
currentStorage: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }),
checks: new fields.ArrayField(new fields.BooleanField(), { required: true, initial: [false, false, false], min:3, max:3 }),
nbValidChecks: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 })
storage: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 })
})
schema.biodata = new fields.SchemaField({
@ -73,8 +66,6 @@ export default class CthulhuEternalProtagonist extends foundry.abstract.TypeData
eyes: new fields.StringField({ required: true, nullable: false, initial: "" }),
hair: new fields.StringField({ required: true, nullable: false, initial: "" }),
harshness: new fields.StringField({ required: true, nullable: false, initial: "normal", choices:SYSTEM.HARSHNESS }),
adaptedToViolence: new fields.BooleanField({ required: true, initial: false }),
adaptedToHelplessness: new fields.BooleanField({ required: true, initial: false })
})
return schema
@ -99,13 +90,18 @@ export default class CthulhuEternalProtagonist extends foundry.abstract.TypeData
let unnatural = this.parent.items.find(i => i.type === "skill" && i.name.toLowerCase() === game.i18n.localize("CTHULHUETERNAL.Skill.Unnatural").toLowerCase())
let minus = 0
if (unnatural) {
minus = unnatural.system.skillTotal
minus = unnatural.data.skillTotal
}
let maxSan = Math.max(99 - minus, 0)
if ( this.san.max !== maxSan) {
updates[`system.san.max`] = maxSan
}
let bp = Math.max(this.san.value - this.characteristics.pow.value, 0)
if ( this.san.breakingPoint !== bp) {
updates[`system.san.breakingPoint`] = bp
}
let recoverySan = this.characteristics.pow.value * 5
if (recoverySan > this.san.max) {
recoverySan = this.san.max
@ -141,25 +137,6 @@ export default class CthulhuEternalProtagonist extends foundry.abstract.TypeData
updates[`system.hp.value`] = this.hp.max
}
if (this.resources.permanentRating < 0) {
updates[`system.resources.permanentRating`] = 0
}
let resourceIndex = Math.max(Math.min(this.resources.permanentRating, 20), 0)
let breakdown = SYSTEM.RESOURCE_BREAKDOWN[resourceIndex]
if (this.resources.hand !== breakdown.hand) {
updates[`system.resources.hand`] = breakdown.hand
}
if (this.resources.stowed !== breakdown.stowed) {
updates[`system.resources.stowed`] = breakdown.stowed
}
if (this.resources.storage !== breakdown.storage) {
updates[`system.resources.storage`] = breakdown.storage + (this.resources.permanentRating - resourceIndex)
}
if (this.resources.nbValidChecks !== breakdown.checks) {
updates[`system.resources.nbValidChecks`] = breakdown.checks
}
if (Object.keys(updates).length > 0) {
this.parent.update(updates)
}
@ -174,21 +151,6 @@ export default class CthulhuEternalProtagonist extends foundry.abstract.TypeData
return this.wp.value === 0
}
isExhausted() {
return this.wp.exhausted
}
setBP() {
let updates = {}
let bp = Math.max(this.san.value - this.characteristics.pow.value, 0)
if ( this.san.breakingPoint !== bp) {
updates[`system.san.breakingPoint`] = bp
}
if (Object.keys(updates).length > 0) {
this.parent.update(updates)
}
}
/** */
/**
* Rolls a dice for a character.
@ -205,7 +167,6 @@ export default class CthulhuEternalProtagonist extends foundry.abstract.TypeData
rollItem,
isLowWP: this.isLowWP(),
isZeroWP: this.isZeroWP(),
isExhausted: this.isExhausted(),
actorId: this.parent.id,
actorName: this.parent.name,
actorImage: this.parent.img,

View File

@ -20,6 +20,7 @@ export default class CthulhuEternalSkill extends foundry.abstract.TypeDataModel
/** @override */
static LOCALIZATION_PREFIXES = ["CTHULHUETERNAL.Skill"]
prepareDerivedData() {
super.prepareDerivedData();
this.skillTotal = this.computeScore();

View File

@ -1,34 +0,0 @@
import { SYSTEM } from "../config/system.mjs"
import CthulhuEternalRoll from "../documents/roll.mjs"
export default class CthulhuEternalVehicle extends foundry.abstract.TypeDataModel {
static defineSchema() {
const fields = foundry.data.fields
const requiredInteger = { required: true, nullable: false, integer: true }
const schema = {}
schema.settings = new fields.StringField({ required: true, initial: "modern", choices: SYSTEM.AVAILABLE_SETTINGS })
schema.hp = new fields.SchemaField({
value: new fields.NumberField({ ...requiredInteger, initial: 1, min: 0 }),
max: new fields.NumberField({ ...requiredInteger, initial: 1, min: 0 })
})
schema.armor = new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 })
schema.surfaceSpeed = new fields.StringField({ required: true, initial: "slow", choices: SYSTEM.VEHICLE_SPEED })
schema.airSpeed = new fields.StringField({ required: true, initial: "none", choices: SYSTEM.VEHICLE_SPEED })
schema.state = new fields.StringField({ required: true, initial: "pristine", choices: SYSTEM.EQUIPMENT_STATES })
schema.crew = new fields.ArrayField(new fields.StringField(), { required: false, initial: [], min:0 })
schema.resourceLevel = 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 = ["CTHULHUETERNAL.Vehicle"]
}

View File

@ -17,7 +17,6 @@ export default class LethalFantasySkill extends foundry.abstract.TypeDataModel {
schema.killRadius = new fields.NumberField({ required: true, initial: 0, min: 0 })
schema.armorPiercing = new fields.NumberField({ required: true, initial: 0, min: 0 })
schema.weaponSubtype = new fields.StringField({ required: true, initial: "basicfirearm", choices: SYSTEM.WEAPON_SUBTYPE })
schema.state = new fields.StringField({ required: true, initial: "pristine", choices: SYSTEM.EQUIPMENT_STATES })
schema.resourceLevel = new fields.NumberField({ required: true, initial: 0, min: 0 })

View File

@ -9,5 +9,24 @@
*/
export function handleSocketEvent({ action = null, data = {} } = {}) {
console.debug("handleSocketEvent", action, data)
switch (action) {
case "fortune":
return CthulhuEternalFortune.handleSocketEvent(data)
case "askRoll":
return _askRoll(data)
}
}
/**
* Handles the socket event to ask for a roll.
*
* @param {Object} [options={}] The options object.
* @param {string} [options.userId] The ID of the user who initiated the roll.
*/
export function _askRoll({ userId } = {}) {
console.debug(`handleSocketEvent _askRoll from ${userId} !`)
const currentUser = game.user._id
if (userId === currentUser) {
foundry.audio.AudioHelper.play({ src: "/systems/fvtt-cthulhu-eternal/sounds/drums.wav", volume: 0.8, autoplay: true, loop: false }, false)
}
}

View File

@ -3,9 +3,9 @@ export default class CthulhuEternalUtils {
static registerSettings() {
game.settings.register("fvtt-cthulhu-eternal", "settings-era", {
name: game.i18n.localize("CTHULHUETERNAL.Settings.era"),
hint: game.i18n.localize("CTHULHUETERNAL.Settings.eraHint"),
default: "jazz",
name: game.i18n.localize("CHTUHLUETERNAL.Settings.era"),
hint: game.i18n.localize("CHTUHLUETERNAL.Settings.eraHint"),
default: true,
scope: "world",
type: String,
choices: SYSTEM.AVAILABLE_SETTINGS,
@ -183,9 +183,6 @@ export default class CthulhuEternalUtils {
let eraCSS = SYSTEM.ERA_CSS[era];
if (!eraCSS) eraCSS = SYSTEM.ERA_CSS["jazz"];
document.documentElement.style.setProperty('--font-size-standard', eraCSS.baseFontSize);
document.documentElement.style.setProperty('--font-size-title', eraCSS.titleFontSize);
document.documentElement.style.setProperty('--font-size-result', eraCSS.titleFontSize);
document.documentElement.style.setProperty('--font-primary', eraCSS.primaryFont);
document.documentElement.style.setProperty('--font-secondary', eraCSS.secondaryFont);
document.documentElement.style.setProperty('--font-title', eraCSS.titleFont);

Binary file not shown.

View File

@ -1 +0,0 @@
MANIFEST-000092

View File

@ -1,8 +0,0 @@
2025/01/28-13:40:46.388286 7fc73affd6c0 Recovering log #90
2025/01/28-13:40:46.486338 7fc73affd6c0 Delete type=3 #88
2025/01/28-13:40:46.486413 7fc73affd6c0 Delete type=0 #90
2025/01/28-14:21:23.579080 7fc738ff96c0 Level-0 table #95: started
2025/01/28-14:21:23.579113 7fc738ff96c0 Level-0 table #95: 0 bytes OK
2025/01/28-14:21:23.585685 7fc738ff96c0 Delete type=0 #93
2025/01/28-14:21:23.595091 7fc738ff96c0 Manual compaction at level-0 from '!folders!DD8331Hda4rhvEf9' @ 72057594037927935 : 1 .. '!items!zplzTG30QXHURusr' @ 0 : 0; will stop at (end)
2025/01/28-14:21:23.607394 7fc738ff96c0 Manual compaction at level-1 from '!folders!DD8331Hda4rhvEf9' @ 72057594037927935 : 1 .. '!items!zplzTG30QXHURusr' @ 0 : 0; will stop at (end)

View File

@ -1,8 +0,0 @@
2025/01/28-11:42:23.420912 7fc7397fa6c0 Recovering log #86
2025/01/28-11:42:23.492812 7fc7397fa6c0 Delete type=3 #84
2025/01/28-11:42:23.492907 7fc7397fa6c0 Delete type=0 #86
2025/01/28-11:56:09.681552 7fc738ff96c0 Level-0 table #91: started
2025/01/28-11:56:09.681584 7fc738ff96c0 Level-0 table #91: 0 bytes OK
2025/01/28-11:56:09.688279 7fc738ff96c0 Delete type=0 #89
2025/01/28-11:56:09.688435 7fc738ff96c0 Manual compaction at level-0 from '!folders!DD8331Hda4rhvEf9' @ 72057594037927935 : 1 .. '!items!zplzTG30QXHURusr' @ 0 : 0; will stop at (end)
2025/01/28-11:56:09.699103 7fc738ff96c0 Manual compaction at level-1 from '!folders!DD8331Hda4rhvEf9' @ 72057594037927935 : 1 .. '!items!zplzTG30QXHURusr' @ 0 : 0; will stop at (end)

Binary file not shown.

View File

@ -44,19 +44,9 @@
src: url("../assets/fonts/Volkhov-Regular.ttf") format("truetype");
}
@font-face {
font-family: "ChantelliAntiqua";
src: url("../assets/fonts/Chantelli_Antiqua.ttf") format("truetype");
}
@font-face {
font-family: "IMFell";
src: url("../assets/fonts/IMFeDPrm28P.ttf") format("truetype");
}
@font-face {
font-family: "SailRegular";
src: url("../assets/fonts/Sail-Regular.ttf") format("truetype");
src: url("../assets/fonts/IMFell.ttf") format("truetype");
}
@font-face {

View File

@ -4,7 +4,6 @@
.fvtt-cthulhu-eternal {
@import "mixins.less";
@import "protagonist.less";
@import "vehicle.less";
@import "skill.less";
@import "injury.less";
@import "weapon.less";
@ -18,4 +17,4 @@
@import "archetype.less";
}
@import "roll.less";
@import "roll.less";

View File

@ -1,28 +1,19 @@
: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/jazz_background_main.webp");
/*--background-image-base: url("../assets/ui/jazzage_background_main.webp");*/
--font-primary: "RozhaOne";
--font-secondary: "RozhaOne";
--font-title: "Broadway";
--logo-standard: url("../assets/logos/reanimated-ce-logo.webp");
--color-success: rgb(15, 122, 15);
--color-success: darkgreen;
--color-failure: darkred;
--color-warning: darkorange;
--color-critical-success: rgb(21, 39, 204);
--color-critical-failure: rgb(141, 32, 231);
--color-critical-success: lightgreen;
--color-critical-failure: lightcoral;
--img-icon-color-filter: brightness(0) saturate(100%) invert(52%) sepia(9%) saturate(2368%) hue-rotate(360deg) brightness(86%) contrast(84%);
}
.d100 {
width: 18px;
height: 18px;
color: black;
border-width: 0px;
filter: var(--img-icon-color-filter);
}
.item .thumbnail,
.item-img {
/*filter: invert(90%) sepia(10%) saturate(1215%) hue-rotate(55deg) brightness(93%) contrast(89%);*/

View File

@ -21,7 +21,7 @@
}
input[name="name"] {
height: 40px;
height: 50px;
margin-right: 10px;
font-family: var(--font-secondary);
font-size: calc(var(--font-size-standard) * 1);
@ -30,8 +30,8 @@
}
fieldset {
margin-bottom: 4px;
border-radius: 4px;
margin-bottom: 5px;
border-radius: 5px;
}
.form-fields {
@ -57,20 +57,13 @@
.protagonist-sheet-common {
label {
font-family: var(--font-secondary);
font-size: calc(var(--font-size-standard) * 1.0);
}
}
.vehicle-sheet-common {
label {
font-family: var(--font-secondary);
font-size: calc(var(--font-size-standard) * 1.0);
font-size: calc(var(--font-size-standard) * 1.2);
}
}
.item-sheet-common {
.form-fields {
padding-top: 4px;
padding-top: 5px;
}
label {

View File

@ -62,87 +62,35 @@
display: flex;
input {
font-family: var(--font-title);
font-size: var(--font-size-title);
font-size: calc(var(--font-size-standard) * 1.4);
width: 400px;
}
}
.san {
align-content: flex-start;
input {
min-width: 2.2rem;
max-width: 2.2rem;
margin-bottom: 4px;
}
select {
min-width: 6rem;
max-width: 6rem;
}
.rollable:hover,
.rollable:focus {
text-shadow: 0 0 8px var(--color-shadow-primary);
cursor: pointer;
font-size: 0.9rem;
}
.button {
min-width: 4rem;
max-width: 4rem;
}
.san-checkbox {
min-width: 1rem;
max-width: 1rem;
}
.label-short-field {
font-size: 0.9rem;
max-width: 3rem;
min-width: 3rem;
flex-grow: 1;
}
.label-recovery {
margin-left: 4px;
}
.label-field {
font-size: 0.9rem;
max-width: 6rem;
min-width: 6rem;
flex-grow: 1;
}
.label-bp {
flex-grow: 1;
max-width: 3rem;
min-width: 3rem;
flex-grow: 0;
margin-left: 4px;
}
.label-insanity {
flex-grow: 1;
margin-left: 4px;
max-width: 8rem;
min-width: 8rem;
}
.spacing {
margin-left: 4px;
}
.d100 {
flex: 0;
}
}
.willpower {
input {
min-width: 2.4rem;
max-width: 2.4rem;
}
input[type="checkbox"] {
min-width: 1rem;
max-width: 1rem;
min-width: 2.2rem;
}
.label-field {
flex-grow: 1;
margin-left: 4px;
max-width: 5rem;
min-width: 5rem;
font-size: 0.9rem;
}
.checkbox {
flex-grow: 0;
margin-left: 4px;
}
.checkbox {
min-width: 1rem;
max-width: 1rem;
}
@ -216,20 +164,12 @@
text-shadow: 0 0 8px var(--color-shadow-primary);
cursor: pointer;
}
.rollable {
min-width: 3rem;
max-width: 3rem;
}
.char-text {
margin-left: 0.5rem;
}
.form-group {
flex: 0;
flex: 1;
padding-left: 5px;
.form-fields {
font-size: 1.1rem;
flex: none;
width: 40px;
width: 70px;
}
}
}
@ -255,42 +195,11 @@
.field-label {
margin-left: 8px;
}
.adapted {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 8px;
label {
min-width: 20rem;
}
}
.resources {
.biodata {
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: 3.0rem;
}
.feature {
display: flex;
align-items: center;
gap: 4px;
min-width: 18rem;
max-width: 18rem;
}
}
.motivations {
display: grid;
grid-template-columns: repeat(2, 1fr);
@ -352,8 +261,8 @@
max-width: 8rem;
}
.item-img {
width: 24px;
height: 24px;
width: 32px;
height: 32px;
margin: 4px 0 0 0;
}
}
@ -389,16 +298,16 @@
max-width: 12rem;
}
.type {
min-width: 5rem;
max-width: 5rem;
min-width: 4rem;
max-width: 4rem;
}
.level {
min-width: 2rem;
max-width: 2rem;
}
.item-img {
width: 24px;
height: 24px;
width: 32px;
height: 32px;
margin: 4px 0 0 0;
}
}
@ -422,8 +331,8 @@
max-width: 14rem;
}
.item-img {
width: 24px;
height: 24px;
width: 32px;
height: 32px;
margin: 4px 0 0 0;
}
}
@ -447,8 +356,8 @@
max-width: 14rem;
}
.item-img {
width: 24px;
height: 24px;
width: 32px;
height: 32px;
margin: 4px 0 0 0;
}
}
@ -474,7 +383,7 @@
align-items: center;
gap: 4px;
min-width: 13rem;
max-width: 13rem;
max-width: 13srem;
.rollable:hover,
.rollable:focus {
text-shadow: 0 0 8px var(--color-shadow-primary);
@ -485,16 +394,16 @@
max-width: 2rem;
}
.damage {
min-width: 6rem;
max-width: 6rem;
min-width: 5rem;
max-width: 5rem;
}
.name {
min-width: 10rem;
max-width: 10rem;
min-width: 8rem;
max-width: 8rem;
}
.item-img {
width: 24px;
height: 24px;
width: 32px;
height: 32px;
margin: 4px 0 0 0;
}
}
@ -527,8 +436,8 @@
max-width: 8rem;
}
.item-img {
width: 24px;
height: 24px;
width: 32px;
height: 32px;
margin: 4px 0 0 0;
}
}
@ -561,8 +470,8 @@
max-width: 8rem;
}
.item-img {
width: 24px;
height: 24px;
width: 32px;
height: 32px;
margin: 4px 0 0 0;
}
}

View File

@ -31,18 +31,11 @@
border: none;
background-color: rgba(0, 0, 0, 0.1);
color: var(--color-dark-2);
width: 4rem;
width: 60px;
text-align: center;
}
}
.red-warning {
color: var(--color-failure);
}
.orange-warning {
color: var(--color-warning);
}
.dialog-damage {
display: flex;
@ -96,22 +89,22 @@
.result-success {
color: var(--color-success);
font-family: var(--font-title);
font-size: var(--font-size-result);
font-size: calc(var(--font-size-standard) * 1.2);
}
.result-critical-success {
color: var(--color-critical-success);
font-family: var(--font-title);
font-size: var(--font-size-result);
font-size: calc(var(--font-size-standard) * 1.2);
}
.result-failure {
color: var(--color-failure);
font-family: var(--font-title);
font-size: var(--font-size-result);
font-size: calc(var(--font-size-standard) * 1.2);
}
.result-critical-failure {
color: var(--color-critical-failure);
font-family: var(--font-title);
font-size: var(--font-size-result);
font-size: calc(var(--font-size-standard) * 1.2);
}
}
.introText {

View File

@ -1,223 +0,0 @@
.vehicle-content {
.sheet-common();
.vehicle-sheet-common();
overflow: scroll;
}
.sheet-tabs {
background-color: var(--color-light-1);
}
.vehicle-main {
background-color: var(--color-light-1);
display: flex;
.vehicle-pc {
display: flex;
gap: 4px;
flex: 1;
.vehicle-left {
min-width: 180px;
display: flex;
flex-direction: column;
.vehicle-left-image {
display: flex;
justify-content: center;
align-items: center;
padding-bottom: 8px;
.vehicle-img {
height: 140px;
width: auto;
border: none;
}
}
}
.vehicle-right {
display: flex;
flex-direction: column;
gap: 5px;
.vehicle-name {
display: flex;
input {
font-family: var(--font-title);
font-size: calc(var(--font-size-standard) * 1.4);
width: 400px;
}
}
.vehicle-infos {
display: flex;
flex-direction: column;
gap: 4px;
label {
min-width: 120px;
}
.vehicle-hp {
display: flex;
gap: 2px;
align-items: center;
.vehicle-hp-value {
.form-fields input {
flex: none;
width: 50px;
margin-left: 4px;
font-size: calc(var(--font-size-standard) * 1.4);
}
}
.vehicle-hp-max {
clear: both;
display: flex;
flex-direction: row;
flex-wrap: wrap;
margin: 3px 0;
align-items: center;
input {
width: 50px;
text-align: center;
font-size: calc(var(--font-size-standard) * 1.4);
}
}
.hp-separator {
font-size: calc(var(--font-size-standard) * 1.2);
display: flex;
align-items: center;
justify-content: center;
}
}
}
}
}
.vehicle-pc-play {
min-width: 500px;
}
.vehicle-pc-edit {
min-width: 650px;
}
}
.vehicle-biography {
background-color: var(--color-light-1);
prose-mirror.inactive {
min-height: 40px;
}
prose-mirror.active {
min-height: 150px;
}
.field-label {
margin-left: 8px;
}
.biodata {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 8px;
label {
min-width: 3.0rem;
}
.feature {
display: flex;
align-items: center;
gap: 4px;
min-width: 18rem;
max-width: 18rem;
}
}
}
.tab.vehicle-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;
}
}
.weapons {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 4px;
.weapon {
display: flex;
align-items: center;
gap: 4px;
min-width: 13rem;
max-width: 13srem;
.rollable:hover,
.rollable:focus {
text-shadow: 0 0 8px var(--color-shadow-primary);
cursor: pointer;
}
.controls {
min-width: 2rem;
max-width: 2rem;
}
.damage {
min-width: 5rem;
max-width: 5rem;
}
.name {
min-width: 8rem;
max-width: 8rem;
}
.item-img {
width: 32px;
height: 32px;
margin: 4px 0 0 0;
}
}
}
.gears {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 4px;
.gear {
display: flex;
align-items: center;
gap: 4px;
min-width: 13rem;
max-width: 13srem;
.rollable:hover,
.rollable:focus {
text-shadow: 0 0 8px var(--color-shadow-primary);
cursor: pointer;
}
.controls {
min-width: 2rem;
max-width: 2rem;
}
.damage {
min-width: 5rem;
max-width: 5rem;
}
.name {
min-width: 8rem;
max-width: 8rem;
}
.item-img {
width: 32px;
height: 32px;
margin: 4px 0 0 0;
}
}
}
prose-mirror.inactive {
min-height: 40px;
}
prose-mirror.active {
min-height: 150px;
}
}

View File

@ -1,12 +1,12 @@
{
"id": "fvtt-cthulhu-eternal",
"title": "Cthulhu Eternal RPG",
"description": "The OGL Cthulhu Eternal RPG system for Foundry VTT",
"description": "",
"manifest": "https://www.uberwald.me/gitea/public/fvtt-cthulhu-eternal/raw/branch/main/system.json",
"download": "#{DOWNLOAD}#",
"url": "https://www.uberwald.me/gitea/public/fvtt-cthulhu-eternal",
"license": "LICENSE",
"version": "12.0.4",
"version": "12.0.1",
"authors": [
{
"name": "Uberwald",
@ -34,8 +34,7 @@
],
"documentTypes": {
"Actor": {
"protagonist": { "htmlFields": ["description", "notes"] },
"vehicle": { "htmlFields": ["description", "notes"] }
"protagonist": { "htmlFields": ["description", "notes"] }
},
"Item": {
"skill": { "htmlFields": ["description"] },
@ -56,7 +55,7 @@
"banner": "",
"label": "Skills",
"system": "fvtt-cthulhu-eternal",
"path": "packs-system/skills",
"path": "packs/skills",
"type": "Item"
}
],
@ -66,5 +65,5 @@
},
"primaryTokenAttribute": "hp",
"socket": true,
"background": "systems/fvtt-cthulhu-eternal/assets/ui/background_01.webp"
"background": "systems/fvtt-cthulhu-eternal/assets/background.webp"
}

View File

@ -0,0 +1,6 @@
<div class="tenebris ask-roll">
<h4 class="ask-roll-title">{{title}}<br>{{text}}</h4>
<a class="ask-roll-dice" data-type="{{rollType}}" data-value="{{value}}" data-avantage="{{avantage}}">
<i class="fas fa-dice-d20" title="{{localize 'TENEBRIS.Manager.roll'}}"></i> {{localize 'TENEBRIS.Manager.roll'}}
</a>
</div>

View File

@ -1,78 +1,55 @@
{{!log 'chat-message' this}}
<div class="{{cssClass}}">
<div class="intro-chat">
<div class="intro-img">
<img src="{{actingCharImg}}" data-tooltip="{{actingCharName}}" />
<div class="intro-chat">
<div class="intro-img">
<img src="{{actingCharImg}}" data-tooltip="{{actingCharName}}" />
</div>
<div class="intro-right">
<ul>
{{#if (eq rollType "char")}}
<li><strong>{{localize "CTHULHUETERNAL.Label.charRoll"}}</strong></li>
{{/if}}
{{#if (eq rollType "skill")}}
<li><strong>{{localize "CTHULHUETERNAL.Label.skillRoll"}}</strong></li>
{{/if}}
{{#if weapon}}
<li><strong>Weapon : {{weapon.name}}</strong></li>
{{/if}}
<li><strong>{{rollItem.name}} : {{initialScore}}%</strong></li>
<li>{{localize "CTHULHUETERNAL.Label.modifier"}} : {{modifier}}%</li>
<li>{{localize "CTHULHUETERNAL.Label.targetScore"}} : {{targetScore}}%</li>
{{#if isSuccess}}
{{#if isCritical}}
<li class="result-critical-success">{{localize "CTHULHUETERNAL.Label.criticalSuccess"}}</li>
{{else}}
<li class="result-success">{{localize "CTHULHUETERNAL.Label.success"}}</li>
{{/if}}
{{/if}}
{{#if isFailure}}
{{#if isCritical}}
<li class="result-critical-failure">{{localize "CTHULHUETERNAL.Label.criticalFailure"}}</li>
{{else}}
<li class="result-failure">{{localize "CTHULHUETERNAL.Label.failure"}}</li>
{{/if}}
{{/if}}
</ul>
</div>
</div>
<div class="intro-right">
<ul>
{{#if (eq rollType "char")}}
<li><strong>{{localize "CTHULHUETERNAL.Label.charRoll"}}</strong></li>
{{/if}}
{{#if (eq rollType "skill")}}
<li><strong>{{localize "CTHULHUETERNAL.Label.skillRoll"}}</strong></li>
{{/if}}
{{#if weapon}}
<li><strong>Weapon : {{weapon.name}}</strong></li>
{{/if}}
{{#if (eq rollType "resource")}}
<li><strong>{{rollItem.name}} : {{initialScore}}</strong></li>
{{else}}
<li><strong>{{rollItem.name}} : {{initialScore}}%</strong></li>
{{/if}}
{{#if isZeroWP}}
<li class="red-warning">Zero WP : Automatic failure (ie 0%)</li>
{{else}}
{{#if isLowWP}}
<li class="orange-warning">Low WP : -20%</li>
{{/if}}
{{/if}}
{{#if isExhausted}}
<li class="orange-warning">Exhausted : -20%</li>
{{/if}}
{{#if (eq rollType "resource")}}
<li>{{localize "CTHULHUETERNAL.Label.multiplier"}} : {{multiplier}}</li>
{{else}}
<li>{{localize "CTHULHUETERNAL.Label.modifier"}} : {{modifier}}%</li>
{{/if}}
<li>{{localize "CTHULHUETERNAL.Label.targetScore"}} : {{targetScore}}%</li>
{{#if isSuccess}}
{{#if isCritical}}
<li class="result-critical-success">{{localize "CTHULHUETERNAL.Label.criticalSuccess"}}</li>
{{else}}
<li class="result-success">{{localize "CTHULHUETERNAL.Label.success"}}</li>
{{/if}}
{{/if}}
{{#if isFailure}}
{{#if isCritical}}
<li class="result-critical-failure">{{localize "CTHULHUETERNAL.Label.criticalFailure"}}</li>
{{else}}
<li class="result-failure">{{localize "CTHULHUETERNAL.Label.failure"}}</li>
{{/if}}
{{/if}}
</ul>
</div>
</div>
{{#if isDamage}}
<div>
{{#if (and isGM hasTarget)}}
{{{localize "CTHULHUETERNAL.Roll.displayArmor" targetName=targetName targetArmor=targetArmor
realDamage=realDamage}}}
{{/if}}
</div>
{{/if}}
{{#unless isPrivate}}
<div class="dice-result">
<h4 class="dice-total">{{total}}</h4>
<div class="dice-formula">{{formula}}</div>
{{{tooltip}}}
</div>
{{/unless}}
</div>
{{#if isDamage}}
<div>
{{#if (and isGM hasTarget)}}
{{{localize "CTHULHUETERNAL.Roll.displayArmor" targetName=targetName targetArmor=targetArmor realDamage=realDamage}}}
{{/if}}
</div>
{{/if}}
{{#unless isPrivate}}
<div class="dice-result">
<h4 class="dice-total">{{total}}</h4>
<div class="dice-formula">{{formula}}</div>
{{{tooltip}}}
</div>
{{/unless}}
</div>

View File

@ -7,7 +7,6 @@
<fieldset>
{{formField systemFields.settings value=system.settings localize=true}}
{{formField systemFields.resourceLevel value=system.resourceLevel}}
{{formField systemFields.state value=system.state localize=true}}
</fieldset>
<fieldset>

39
templates/manager.hbs Normal file
View File

@ -0,0 +1,39 @@
<table class="tenebris-table">
<thead>
<tr>
<th>{{localize "TENEBRIS.Manager.player"}}</th>
<th>{{localize "TENEBRIS.Manager.character"}}</th>
<th>{{localize "TENEBRIS.Manager.pv"}}</th>
<td data-action="saveAll" data-save="rob">{{localize "TENEBRIS.Manager.rob"}}</td>
<td data-action="saveAll" data-save="dex">{{localize "TENEBRIS.Manager.dex"}}</td>
<td data-action="saveAll" data-save="int">{{localize "TENEBRIS.Manager.int"}}</td>
<td data-action="saveAll" data-save="per">{{localize "TENEBRIS.Manager.per"}}</td>
<td data-action="saveAll" data-save="vol">{{localize "TENEBRIS.Manager.vol"}}</td>
<td data-action="resourceAll" data-resource="san">{{localize "TENEBRIS.Manager.san"}}</td>
<td data-action="resourceAll" data-resource="oeil">{{localize "TENEBRIS.Manager.oeil"}}</td>
<td data-action="resourceAll" data-resource="verbe">{{localize "TENEBRIS.Manager.verbe"}}</td>
<td data-action="resourceAll" data-resource="bourse">{{localize "TENEBRIS.Manager.bourse"}}</td>
<td data-action="resourceAll" data-resource="magie">{{localize "TENEBRIS.Manager.magie"}}</td>
</tr>
</thead>
<tbody>
{{#each players as |player|}}
{{!log "player" this}}
<tr class="player" data-user-id="{{player.id}}" data-character-name="{{player.character.name}}" data-character-id="{{player.character.id}}">
<td>{{player.name}}</td>
<td data-action="openSheet" data-character-id="{{player.character.id}}">{{player.character.name}}</td>
<td>{{player.character.system.pv.value}}</td>
<td data-action="saveOne" data-save="rob">{{player.character.system.caracteristiques.rob.valeur}}</td>
<td data-action="saveOne" data-save="dex">{{player.character.system.caracteristiques.dex.valeur}}</td>
<td data-action="saveOne" data-save="int">{{player.character.system.caracteristiques.int.valeur}}</td>
<td data-action="saveOne" data-save="per">{{player.character.system.caracteristiques.per.valeur}}</td>
<td data-action="saveOne" data-save="vol">{{player.character.system.caracteristiques.vol.valeur}}</td>
<td data-action="resourceOne" data-resource="san">{{player.character.system.ressources.san.valeur}}</td>
<td data-action="resourceOne" data-resource="oeil">{{player.character.system.ressources.oeil.valeur}}</td>
<td data-action="resourceOne" data-resource="verbe">{{player.character.system.ressources.verbe.valeur}}</td>
<td data-action="resourceOne" data-resource="bourse">{{player.character.system.ressources.bourse.valeur}}</td>
<td data-action="resourceOne" data-resource="magie">{{player.character.system.ressources.magie.valeur}}</td>
</tr>
{{/each}}
</tbody>
</table>

View File

@ -4,10 +4,6 @@
{{formInput fields.name value=source.name}}
</div>
<fieldset>
{{formField systemFields.cured value=system.cured localize=true}}
</fieldset>
<fieldset>
<legend>{{localize "CTHULHUETERNAL.Label.description"}}</legend>
{{formInput

View File

@ -1,29 +1,7 @@
<section class="tab protagonist-{{tab.id}} {{tab.cssClass}}" data-tab="{{tab.id}}" data-group="{{tab.group}}">
<fieldset>
<legend>{{localize "CTHULHUETERNAL.Label.resources"}}</legend>
<div class="resources">
{{formField systemFields.resources.fields.permanentRating value=system.resources.permanentRating name="system.resources.permanentRating" localize=true}}
<div>
<span class="label-field">{{localize "CTHULHUETERNAL.Label.resourceChecks"}}</span>
{{#each system.resources.checks as |check idx|}}
<input class="san-checkbox" type="checkbox" data-action="updateCheckResource" data-index="{{@index}}"
data-name="checks" {{#if check}} checked {{/if}} {{#if (gte @index @root.system.resources.nbValidChecks)}} disabled {{/if}}>
{{/each}}
</div>
<button class="resource-roll rollable" data-roll-type="resource"><img src="systems/fvtt-cthulhu-eternal/assets/ui/d100.svg" class="d100" />Resource roll</button>
{{formField systemFields.resources.fields.hand value=system.resources.hand name="system.resources.hand" localize=true disabled=true}}
{{formField systemFields.resources.fields.stowed value=system.resources.stowed name="system.resources.stowed" localize=true disabled=true}}
{{formField systemFields.resources.fields.storage value=system.resources.storage name="system.resources.storage" localize=true disabled=true}}
</div>
</fieldset>
<fieldset>
<legend>{{localize "CTHULHUETERNAL.Label.biodata"}}</legend>
<div class="adapted">
{{formField systemFields.biodata.fields.adaptedToViolence value=system.biodata.adaptedToViolence name="system.biodata.adaptedToViolence" localize=true}}
{{formField systemFields.biodata.fields.adaptedToHelplessness value=system.biodata.adaptedToHelplessness name="system.biodata.adaptedToHelplessness" localize=true}}
</div>
<div class="biodata">
{{formField systemFields.biodata.fields.harshness value=system.biodata.harshness name="system.biodata.harshness" localize=true}}
{{formField systemFields.biodata.fields.age value=system.biodata.age name="system.biodata.age" localize=true classes="field-label"}}
@ -31,49 +9,38 @@
{{formField systemFields.biodata.fields.height value=system.biodata.height name="system.biodata.height" localize=true classes="field-label"}}
{{formField systemFields.biodata.fields.eyes value=system.biodata.eyes name="system.biodata.eyes" localize=true classes="field-label"}}
{{formField systemFields.biodata.fields.hair value=system.biodata.hair name="system.biodata.hair" localize=true classes="field-label"}}
{{formField systemFields.biodata.fields.home value=system.biodata.home name="system.biodata.home" localize=true classes="field-label"}}
{{formField systemFields.biodata.fields.gender value=system.biodata.gender name="system.biodata.gender" localize=true classes="field-label"}}
{{formField systemFields.biodata.fields.birthplace value=system.biodata.birthplace name="system.biodata.birthplace" localize=true classes="field-label"}}
</div>
</fieldset>
<fieldset>
<legend>{{localize "CTHULHUETERNAL.Label.distinguishingFeatures"}}</legend>
<div class="features">
<div class="feature">
<label>{{localize "CTHULHUETERNAL.Label.strShort"}}</label>
{{formInput systemFields.characteristics.fields.str.fields.feature value=system.characteristics.str.feature localize=true}}
</div>
<div class="feature">
<label>{{localize "CTHULHUETERNAL.Label.dexShort"}}</label>
{{formInput systemFields.characteristics.fields.dex.fields.feature value=system.characteristics.dex.feature localize=true}}
</div>
<div class="feature">
<label>{{localize "CTHULHUETERNAL.Label.conShort"}}</label>
{{formInput systemFields.characteristics.fields.con.fields.feature value=system.characteristics.con.feature localize=true}}
</div>
<div class="feature">
<label>{{localize "CTHULHUETERNAL.Label.intShort"}}</label>
{{formInput systemFields.characteristics.fields.int.fields.feature value=system.characteristics.int.feature localize=true}}
</div>
<div class="feature">
<label>{{localize "CTHULHUETERNAL.Label.powShort"}}</label>
{{formInput systemFields.characteristics.fields.pow.fields.feature value=system.characteristics.pow.feature localize=true}}
</div>
<div class="feature">
<label>{{localize "CTHULHUETERNAL.Label.chaShort"}}</label>
{{formInput systemFields.characteristics.fields.cha.fields.feature value=system.characteristics.cha.feature localize=true}}
</div>
<legend>{{localize "CTHULHUETERNAL.Label.motivations"}}{{#if isEditMode}}
<a class="action" data-tooltip="{{localize "CTHULHUETERNAL.Tooltip.addMotivation"}}" data-tooltip-direction="UP"><i class="fas fa-plus" data-action="createMotivation"></i></a>{{/if}}</legend>
<div class="motivations">
{{#each motivations as |item|}}
{{!log 'armor' this}}
<div class="motivation" 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 'CTHULHUETERNAL.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 'CTHULHUETERNAL.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>
<fieldset>
<legend>{{localize "CTHULHUETERNAL.Label.description"}}</legend>
{{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}}
{{formInput systemFields.description enriched=description value=system.description name="system.description" toggled=true}}
</fieldset>
<fieldset>
<legend>{{localize "CTHULHUETERNAL.Label.notes"}}</legend>
{{formInput systemFields.notes enriched=enrichedNotes value=system.notes name="system.notes" toggled=true}}
{{formInput systemFields.notes enriched=notes value=system.notes name="system.notes" toggled=true}}
</fieldset>
</section>

View File

@ -2,81 +2,62 @@
<fieldset>
<legend>{{localize "CTHULHUETERNAL.Label.weapons"}}{{#if isEditMode}}
<a class="action" data-tooltip="{{localize " CTHULHUETERNAL.Tooltip.addWeapon"}}" data-tooltip-direction="UP"><i
class="fas fa-plus" data-action="createWeapon"></i></a>{{/if}}
</legend>
<a class="action" data-tooltip="{{localize "CTHULHUETERNAL.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}}" />
<img src="systems/fvtt-cthulhu-eternal/assets/ui/d100.svg" class="d100" />
<div class="name rollable" data-roll-type="weapon" data-tooltip="{{{item.system.description}}}">
{{item.name}}
{{!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 "CTHULHUETERNAL.Label.damageShort"}} : {{item.system.damage}}</a>
<div class="controls">
<a data-tooltip="{{localize 'CTHULHUETERNAL.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 'CTHULHUETERNAL.Delete'}}" data-action="delete" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}"><i class="fas fa-trash"></i></a>
</div>
</div>
<img src="systems/fvtt-cthulhu-eternal/assets/ui/d100.svg" class="d100" />
<a class="damage rollable" data-item-id="{{item.id}}" data-action="roll" data-roll-type="damage"
data-roll-value="{{item.system.damage}}">
{{localize "CTHULHUETERNAL.Label.damageShort"}} :
{{item.system.damage}}</a>
<div class="controls">
<a data-tooltip="{{localize 'CTHULHUETERNAL.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 'CTHULHUETERNAL.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 "CTHULHUETERNAL.Label.armors"}}{{#if isEditMode}}
<a class="action" data-tooltip="{{localize " CTHULHUETERNAL.Tooltip.addArmor"}}" data-tooltip-direction="UP"><i
class="fas fa-plus" data-action="createArmor"></i></a>{{/if}}
</legend>
<a class="action" data-tooltip="{{localize "CTHULHUETERNAL.Tooltip.addArmor"}}" data-tooltip-direction="UP"><i class="fas fa-plus" data-action="createArmor"></i></a>{{/if}}</legend>
<div class="armors">
{{#each armors as |item|}}
{{!log 'armor' this}}
<div class="armor" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}">
<img class="item-img" src="{{item.img}}" data-tooltip="{{item.name}}" />
<div class="name" data-tooltip="{{{item.system.description}}}">
{{item.name}}
{{!log 'armor' this}}
<div class="armor" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}">
<img class="item-img" src="{{item.img}}" data-tooltip="{{item.name}}" />
<div class="name" data-tooltip="{{{item.system.description}}}">
{{item.name}}
</div>
<span class="protection">{{localize "CTHULHUETERNAL.Label.armor"}} : {{item.system.protection}}</span>
<div class="controls">
<a data-tooltip="{{localize 'CTHULHUETERNAL.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 'CTHULHUETERNAL.Delete'}}" data-action="delete" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}"><i class="fas fa-trash"></i></a>
</div>
</div>
<span class="protection">{{localize "CTHULHUETERNAL.Label.armor"}} : {{item.system.protection}}</span>
<div class="controls">
<a data-tooltip="{{localize 'CTHULHUETERNAL.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 'CTHULHUETERNAL.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 "CTHULHUETERNAL.Label.gears"}}{{#if isEditMode}}
<a class="action" data-tooltip="{{localize " CTHULHUETERNAL.Tooltip.addGear"}}" data-tooltip-direction="UP"><i
class="fas fa-plus" data-action="createGear"></i></a>{{/if}}
</legend>
<a class="action" data-tooltip="{{localize "CTHULHUETERNAL.Tooltip.addGear"}}" data-tooltip-direction="UP"><i class="fas fa-plus" data-action="createGear"></i></a>{{/if}}</legend>
<div class="gears">
{{#each gears as |item|}}
{{!log 'armor' this}}
<div class="gear" 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}}
{{!log 'armor' this}}
<div class="gear" 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 'CTHULHUETERNAL.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 'CTHULHUETERNAL.Delete'}}" data-action="delete" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}"><i class="fas fa-trash"></i></a>
</div>
</div>
<div class="controls">
<a data-tooltip="{{localize 'CTHULHUETERNAL.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 'CTHULHUETERNAL.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>

View File

@ -32,63 +32,41 @@
<fieldset class="san">
<legend>{{localize "CTHULHUETERNAL.Label.SAN"}}</legend>
<div class="flexrow">
<img src="systems/fvtt-cthulhu-eternal/assets/ui/d100.svg" class="d100" />
<label class="label-field rollable" data-roll-type="san" >{{localize "CTHULHUETERNAL.Label.current"}}</label>
{{formInput systemFields.san.fields.value value=system.san.value}}
<span class="label-field label-recovery">{{localize "CTHULHUETERNAL.Label.recovery"}}</span>
{{formInput systemFields.san.fields.recovery value=system.san.recovery disabled=true}}
<span class="label-bp" data-tooltip='{{localize "CTHULHUETERNAL.Tooltip.sanBPShort"}}'>{{localize
"CTHULHUETERNAL.Label.sanBPShort"}}</span>
{{formInput systemFields.san.fields.breakingPoint value=system.san.breakingPoint disabled=true}}
</div>
<div class="flexrow">
<div class="flexrow">
<span class="label-short-field">{{localize "CTHULHUETERNAL.Label.max"}}</span>
{{formInput systemFields.san.fields.max value=system.san.max rootId=partId disabled=true}}
</div>
<span class="label-insanity" >
{{localize "CTHULHUETERNAL.Label.tempInsanity"}}
</span>
{{formInput systemFields.san.fields.insanity value=system.san.insanity localize=true}}
{{#if (not isPlayMode)}}
<button data-action="setBP" class="button" data-tooltip="{{localize "CTHULHUETERNAL.Tooltip.setBP"}}">{{localize "CTHULHUETERNAL.Label.setBP"}}</button>
{{/if}}
<span class="label-field">{{localize "CTHULHUETERNAL.Label.current"}}</span>
{{formField systemFields.san.fields.value value=system.san.value}}
<span class="label-field">{{localize "CTHULHUETERNAL.Label.max"}}</span>
{{formField systemFields.san.fields.max value=system.san.max rootId=partId disabled=true}}
<span class="label-field">{{localize "CTHULHUETERNAL.Label.recovery"}}</span>
{{formField systemFields.san.fields.recovery value=system.san.recovery disabled=true}}
<span class="label-field" data-tooltip='{{localize "CTHULHUETERNAL.Tooltip.sanBP"}}'>{{localize
"CTHULHUETERNAL.Label.breakingPoint"}}</span>
{{formField systemFields.san.fields.breakingPoint value=system.san.breakingPoint disabled=true}}
</div>
<div class="flexrow">
<span class="label-field">{{localize "CTHULHUETERNAL.Label.violence"}}</span>
{{localize "CTHULHUETERNAL.Label.violence"}}
{{#each system.san.violence as |violence idx|}}
<input class="san-checkbox" type="checkbox" data-action="updateCheckboxArray" data-index="{{@index}}"
data-name="violence" {{#if violence}} checked {{/if}}>
{{/each}}
<span class="label-field">{{localize "CTHULHUETERNAL.Label.helplessness"}}</span>
<span class="spacing"></span>
{{localize "CTHULHUETERNAL.Label.helplessness"}}
{{#each system.san.helplessness as |helplessness idx|}}
<input class="san-checkbox" type="checkbox" data-action="updateCheckboxArray" data-index="{{@index}}"
data-name="helplessness" {{#if helplessness}} checked {{/if}}>
{{/each}}
</div>
</fieldset>
<fieldset class="willpower">
<legend>{{localize "CTHULHUETERNAL.Label.willpower"}}</legend>
<div class="flexrow">
<label class="label-field">{{localize "CTHULHUETERNAL.Label.current"}}</label>
{{formInput systemFields.wp.fields.value value=system.wp.value}}
<label class="label-field">{{localize "CTHULHUETERNAL.Label.max"}}</label>
{{formInput systemFields.wp.fields.max value=system.wp.max rootId=partId disabled=true}}
<label class="label-field">{{localize "CTHULHUETERNAL.Label.exhausted"}}</label>
{{formInput systemFields.wp.fields.exhausted value=system.wp.exhausted classes="checkbox"}}
<span class="label-field">{{localize "CTHULHUETERNAL.Label.current"}}</span>
{{formField systemFields.wp.fields.value value=system.wp.value}}
<span class="label-field">{{localize "CTHULHUETERNAL.Label.max"}}</span>
{{formField systemFields.wp.fields.max value=system.wp.max rootId=partId disabled=true}}
<span class="label-field">{{localize "CTHULHUETERNAL.Label.exhausted"}}</span>
{{formField systemFields.wp.fields.exhausted value=system.wp.exhausted classes=checkbox}}
</div>
</fieldset>
@ -98,53 +76,47 @@
<fieldset class="protagonist-characteristics protagonist-characteristics-{{ifThen isPlayMode 'play' 'edit'}}">
<legend>{{localize "CTHULHUETERNAL.Label.characteristics"}}</legend>
<div class="protagonist-characteristic" >
<img src="systems/fvtt-cthulhu-eternal/assets/ui/d100.svg" class="d100" />
<label class="rollable" data-roll-type="char" data-char-id="str" data-tooltip="{{system.characteristics.str.feature}}">{{localize
<div class="protagonist-characteristic" data-drag="true" data-drag-type="characteristic">
<label class="rollable" data-roll-type="char" data-char-id="str">{{localize
"CTHULHUETERNAL.Label.strShort"}}</label>
{{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value
rootId=partId disabled=isPlayMode }}
<label class="char-text">{{mul system.characteristics.str.value 5}}</label>
{{mul system.characteristics.str.value 5}}
</div>
<div class="protagonist-characteristic">
<img src="systems/fvtt-cthulhu-eternal/assets/ui/d100.svg" class="d100" />
<label class="rollable" data-roll-type="char" data-char-id="dex" data-tooltip="{{system.characteristics.dex.feature}}">{{localize
<div class="protagonist-characteristic" data-drag="true" data-drag-type="characteristic">
<label class="rollable" data-roll-type="char" data-char-id="dex">{{localize
"CTHULHUETERNAL.Label.dexShort"}}</label>
{{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value
rootId=partId disabled=isPlayMode }}
<label class="char-text">{{mul system.characteristics.dex.value 5}}</label>
{{mul system.characteristics.dex.value 5}}
</div>
<div class="protagonist-characteristic" >
<img src="systems/fvtt-cthulhu-eternal/assets/ui/d100.svg" class="d100" />
<label class="rollable" data-roll-type="char" data-char-id="con" data-tooltip="{{system.characteristics.con.feature}}">{{localize
<div class="protagonist-characteristic" data-drag="true" data-drag-type="characteristic">
<label class="rollable" data-roll-type="char" data-char-id="con">{{localize
"CTHULHUETERNAL.Label.conShort"}}</label>
{{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value
rootId=partId disabled=isPlayMode }}
<label class="char-text">{{mul system.characteristics.con.value 5}}</label>
{{mul system.characteristics.con.value 5}}
</div>
<div class="protagonist-characteristic" >
<img src="systems/fvtt-cthulhu-eternal/assets/ui/d100.svg" class="d100" />
<label class="rollable" data-roll-type="char" data-char-id="int" data-tooltip="{{system.characteristics.int.feature}}">{{localize
<div class="protagonist-characteristic" data-drag="true" data-drag-type="characteristic">
<label class="rollable" data-roll-type="char" data-char-id="int">{{localize
"CTHULHUETERNAL.Label.intShort"}}</label>
{{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value
rootId=partId disabled=isPlayMode }}
<label class="char-text">{{mul system.characteristics.int.value 5}}</label>
{{mul system.characteristics.int.value 5}}
</div>
<div class="protagonist-characteristic" >
<img src="systems/fvtt-cthulhu-eternal/assets/ui/d100.svg" class="d100" />
<label class="rollable" data-roll-type="char" data-char-id="pow" data-tooltip="{{system.characteristics.pow.feature}}">{{localize
<div class="protagonist-characteristic" data-drag="true" data-drag-type="characteristic">
<label class="rollable" data-roll-type="char" data-char-id="pow">{{localize
"CTHULHUETERNAL.Label.powShort"}}</label>
{{formField systemFields.characteristics.fields.pow.fields.value value=system.characteristics.pow.value
rootId=partId disabled=isPlayMode }}
<label class="char-text">{{mul system.characteristics.pow.value 5}}</label>
{{mul system.characteristics.pow.value 5}}
</div>
<div class="protagonist-characteristic" >
<img src="systems/fvtt-cthulhu-eternal/assets/ui/d100.svg" class="d100" />
<label class="rollable" data-roll-type="char" data-char-id="cha" data-tooltip="{{system.characteristics.cha.feature}}">{{localize
<div class="protagonist-characteristic" data-drag="true" data-drag-type="characteristic">
<label class="rollable" data-roll-type="char" data-char-id="cha">{{localize
"CTHULHUETERNAL.Label.chaShort"}}</label>
{{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value
rootId=partId disabled=isPlayMode }}
<label class="char-text">{{mul system.characteristics.cha.value 5}}</label>
{{mul system.characteristics.cha.value 5}}
</div>
</fieldset>

View File

@ -6,7 +6,6 @@
{{#each skills as |item|}}
<div class="skill item" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}">
<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 rollable" data-roll-type="skill" data-tooltip="{{{item.description}}}" data-tooltip-direction="UP">{{item.name}}
</div>
<div class="score" >

View File

@ -65,24 +65,4 @@
</div>
</fieldset>
<fieldset>
<legend>{{localize "CTHULHUETERNAL.Label.motivations"}}{{#if isEditMode}}
<a class="action" data-tooltip="{{localize "CTHULHUETERNAL.Tooltip.addMotivation"}}" data-tooltip-direction="UP"><i class="fas fa-plus" data-action="createMotivation"></i></a>{{/if}}</legend>
<div class="motivations">
{{#each motivations as |item|}}
{{!log 'armor' this}}
<div class="motivation" 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 'CTHULHUETERNAL.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 'CTHULHUETERNAL.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,59 +1,34 @@
{{log "roll-dialog" this}}
<div class="fvtt-cthulhu-eternal-roll-dialog">
<fieldSet>
{{#if (eq rollType "skill")}}
<legend>{{localize "CTHULHUETERNAL.Label.skill"}}</legend>
{{/if}}
{{#if (eq rollType "char")}}
<legend>{{localize "CTHULHUETERNAL.Label.characteristic"}}</legend>
{{/if}}
<fieldSet>
{{#if (eq rollType "skill")}}
<legend>{{localize "CTHULHUETERNAL.Label.skill"}}</legend>
{{/if}}
{{#if (eq rollType "char")}}
<legend>{{localize "CTHULHUETERNAL.Label.characteristic"}}</legend>
{{/if}}
{{#if (eq rollType "resource")}}
<legend>{{localize "CTHULHUETERNAL.Label.resourceRating"}}</legend>
<div class="dialog-skill">{{rollItem.name}} : <span class="resource-score">{{initialScore}} ({{mul initialScore 5}}%)</span></div>
<div class="dialog-skill">{{localize "CTHULHUETERNAL.Label.Hand"}} : {{rollItem.hand}} <input type="checkbox" data-action="selectHand" {{checked rollItem.enableHand}}></div>
<div class="dialog-skill">{{localize "CTHULHUETERNAL.Label.Stowed"}} : {{rollItem.stowed}} <input type="checkbox" data-action="selectStowed" {{checked rollItem.enableStowed}}></div>
<div class="dialog-skill">{{localize "CTHULHUETERNAL.Label.Storage"}} : {{rollItem.storage}} <input type="checkbox" data-action="selectStorage" {{checked rollItem.enableStorage}}></div>
{{else}}
<div class="dialog-skill">{{rollItem.name}} : {{initialScore}}%</div>
{{/if}}
<div class="dialog-skill">{{rollItem.name}} : {{initialScore}}%</div>
{{#if weapon}}
<div class="dialog-skill">Weapon : {{weapon.name}}</div>
{{/if}}
{{#if weapon}}
<div class="dialog-skill">Weapon : {{weapon.name}}</div>
{{/if}}
{{#if isZeroWP}}
<div class="dialog-skill red-warning">Zero WP : Automatic failure (ie 0%)</div>
{{else}}
{{#if isLowWP}}
<div class="dialog-skill orange-warning">Low WP : -20%</div>
{{/if}}
{{/if}}
{{#if isExhausted}}
<div class="dialog-skill orange-warning">Exhausted : -20%</div>
{{/if}}
</fieldSet>
{{#if hasModifier}}
<fieldSet class="dialog-modifier">
<legend>{{localize "CTHULHUETERNAL.Label.modifier"}}</legend>
<select name="modifier" class="roll-skill-modifier">
{{selectOptions choiceModifier selected=modifier}}
</select>
</fieldSet>
{{/if}}
{{#if hasMultiplier}}
<fieldSet class="dialog-modifier">
<legend>{{localize "CTHULHUETERNAL.Label.multiplier"}}</legend>
<select name="multiplier" class="roll-skill-modifier roll-skill-multiplier">
{{selectOptions choiceMultiplier selected=multiplier}}
</select>
</fieldSet>
{{/if}}
{{#if isZeroWP}}
<div class="dialog-skill">Zero WP : Automatic failure (ie 0%)</div>
{{else}}
{{#if isLowWP}}
<div class="dialog-skill">Low WP : -20%</div>
{{/if}}
{{/if}}
</fieldSet>
<fieldSet class="dialog-modifier">
<legend>{{localize "CTHULHUETERNAL.Label.modifier"}}</legend>
<select name="modifier" class="roll-skill-modifier">
{{selectOptions choiceModifier selected=modifier}}
</select>
</fieldSet>
<fieldSet>
<legend>{{localize "CTHULHUETERNAL.Label.rollView"}}</legend>
<select name="visibility">

View File

@ -15,12 +15,9 @@
</div>
{{formField systemFields.isAdversary value=system.isAdversary}}
{{formField systemFields.diceEvolved value=system.diceEvolved}}
<!-- {{#if system.diceEvolved}}
{{#if system.diceEvolved}}
{{formField systemFields.rollFailed value=system.rollFailed}}
{{/if}}
-->
</fieldset>

View File

@ -1,12 +0,0 @@
<section class="tab vehicle-{{tab.id}} {{tab.cssClass}}" data-tab="{{tab.id}}" data-group="{{tab.group}}">
<fieldset>
<legend>{{localize "CTHULHUETERNAL.Label.description"}}</legend>
{{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}}
</fieldset>
<fieldset>
<legend>{{localize "CTHULHUETERNAL.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 "CTHULHUETERNAL.Label.weapons"}}{{#if isEditMode}}
<a class="action" data-tooltip="{{localize " CTHULHUETERNAL.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 "CTHULHUETERNAL.Label.damageShort"}} :
{{item.system.damage}}</a>
<div class="controls">
<a data-tooltip="{{localize 'CTHULHUETERNAL.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 'CTHULHUETERNAL.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 "CTHULHUETERNAL.Label.gears"}}{{#if isEditMode}}
<a class="action" data-tooltip="{{localize " CTHULHUETERNAL.Tooltip.addGear"}}" data-tooltip-direction="UP"><i
class="fas fa-plus" data-action="createGear"></i></a>{{/if}}
</legend>
<div class="gears">
{{#each gears as |item|}}
{{!log 'armor' this}}
<div class="gear" 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 'CTHULHUETERNAL.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 'CTHULHUETERNAL.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,52 +0,0 @@
<section class="vehicle-main vehicle-main-{{ifThen isPlayMode 'play' 'edit'}}">
<fieldset>
<legend>{{localize "CTHULHUETERNAL.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 "CTHULHUETERNAL.Label.HP"}}</legend>
<div class="flexrow">
{{formField systemFields.hp.fields.value value=system.hp.value}}
/
{{formField systemFields.hp.fields.max value=system.hp.max rootId=partId disabled=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="CTHULHUETERNAL.ToggleSheet"
data-tooltip-direction="UP">
<i class="fa-solid fa-user-{{ifThen isPlayMode 'lock' 'pen'}}"></i>
</a>
</div>
<fieldset class="speed">
<legend>{{localize "CTHULHUETERNAL.Label.Speed"}}</legend>
<div class="flexrow">
{{formField systemFields.surfaceSpeed value=system.surfaceSpeed localize=true}}
{{formField systemFields.airSpeed value=system.airSpeed localize=true}}
</div>
</fieldset>
<fieldset class="armr ">
<legend>{{localize "CTHULHUETERNAL.Label.armor"}}</legend>
<div class="flexrow">
{{formField systemFields.armor value=system.armor localize=true}}
</div>
</fieldset>
</div>
</div>
</fieldset>
</section>

View File

@ -11,8 +11,6 @@
{{formField systemFields.weaponSubtype value=system.weaponSubtype localize=true}}
{{/if}}
{{formField systemFields.state value=system.state localize=true}}
{{formField systemFields.damage value=system.damage}}
{{formField systemFields.baseRange value=system.baseRange}}
{{formField systemFields.rangeUnit value=system.rangeUnit localize=true}}