Manage ers

This commit is contained in:
LeRatierBretonnien 2024-12-22 23:04:15 +01:00
parent 93901d5f1e
commit 15f512ea3a
57 changed files with 1132 additions and 146 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
assets/fonts/IMFell.ttf Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
assets/fonts/Seabreed.ttf Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
assets/fonts/Top-Secret.ttf Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
assets/fonts/armalite.ttf Normal file

Binary file not shown.

BIN
assets/fonts/dominican.ttf Normal file

Binary file not shown.

View File

Before

Width:  |  Height:  |  Size: 4.2 KiB

After

Width:  |  Height:  |  Size: 4.2 KiB

View File

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

BIN
assets/ui/cover_future.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

BIN
assets/ui/cover_modern.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

BIN
assets/ui/cover_ww1.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

BIN
assets/ui/cover_ww2.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

View File

@ -1,6 +1,86 @@
@font-face { @font-face {
font-family: "Georama"; font-family: "Georama";
src: url("../assets/fonts/georama.woff2") format("woff2"); src: url("../assets/fonts/Georama-Regular.ttf") format("truetype");
}
@font-face {
font-family: "Tangerine";
src: url("../assets/fonts/Tangerine-Regular.ttf") format("truetype");
}
@font-face {
font-family: "TrajanPro";
src: url("../assets/fonts/Trajan-Pro-Regular.ttf") format("truetype");
}
@font-face {
font-family: "Teko";
src: url("../assets/fonts/Teko-Regular.ttf") format("truetype");
}
@font-face {
font-family: "P22Operina";
src: url("../assets/fonts/P22-Operina.ttf") format("truetype");
}
@font-face {
font-family: "SpectralSC";
src: url("../assets/fonts/SpectralSC-Regular.ttf") format("truetype");
}
@font-face {
font-family: "RozhaOne";
src: url("../assets/fonts/RozhaOne-Regular.ttf") format("truetype");
}
@font-face {
font-family: "Megrim";
src: url("../assets/fonts/Megrim-Regular.ttf") format("truetype");
}
@font-face {
font-family: "Volkhov";
src: url("../assets/fonts/Volkhov-Regular.ttf") format("truetype");
}
@font-face {
font-family: "IMFell";
src: url("../assets/fonts/IMFell.ttf") format("truetype");
}
@font-face {
font-family: "Dominican";
src: url("../assets/fonts/dominican.ttf") format("truetype");
}
@font-face {
font-family: "UncialAntiqua";
src: url("../assets/fonts/UncialAntiqua-Regular.ttf") format("truetype");
}
@font-face {
font-family: "Luminari";
src: url("../assets/fonts/Luminari-Regular.ttf") format("truetype");
}
@font-face {
font-family: "SairaStencilOne";
src: url("../assets/fonts/SairaStencilOne-Regular.ttf") format("truetype");
}
@font-face {
font-family: "Armalite";
src: url("../assets/fonts/armalite.ttf") format("truetype");
}
@font-face {
font-family: "CarterOne";
src: url("../assets/fonts/CarterOne-Regular.ttf") format("truetype");
}
@font-face {
font-family: "SigmarOne";
src: url("../assets/fonts/SigmarOne-Regular.ttf") format("truetype");
}
@font-face {
font-family: "Excelsior";
src: url("../assets/fonts/Excelsior-Normal.ttf") format("truetype");
}
@font-face {
font-family: "TopSecret";
src: url("../assets/fonts/Top-Secret.ttf") format("truetype");
}
@font-face {
font-family: "BebasNeue";
src: url("../assets/fonts/BebasNeue-Regular.ttf") format("truetype");
}
@font-face {
font-family: "Seabreed";
src: url("../assets/fonts/Seabreed.ttf") format("truetype");
} }
@font-face { @font-face {
font-family: "Broadway"; font-family: "Broadway";
@ -26,18 +106,21 @@
--font-size-standard: 0.9rem; --font-size-standard: 0.9rem;
--background-image-base: linear-gradient(rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0.8)), url("../assets/ui/jazzage_background_main.webp"); --background-image-base: linear-gradient(rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0.8)), url("../assets/ui/jazzage_background_main.webp");
/*--background-image-base: url("../assets/ui/jazzage_background_main.webp");*/ /*--background-image-base: url("../assets/ui/jazzage_background_main.webp");*/
--font-primary: "Georama"; --font-primary: "RozhaOne";
--font-secondary: "Georama"; --font-secondary: "RozhaOne";
--font-title: "Broadway"; --font-title: "Broadway";
--logo-standard: url("../assets/logos/reanimated-ce-logo.webp"); --logo-standard: url("../assets/logos/reanimated-ce-logo.webp");
--color-success: darkgreen; --color-success: darkgreen;
--color-failure: darkred; --color-failure: darkred;
--color-critical-success: lightgreen; --color-critical-success: lightgreen;
--color-critical-failure: lightcoral; --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%);
} }
.era-icon-color { .item .thumbnail,
.item-img {
/*filter: invert(90%) sepia(10%) saturate(1215%) hue-rotate(55deg) brightness(93%) contrast(89%);*/ /*filter: invert(90%) sepia(10%) saturate(1215%) hue-rotate(55deg) brightness(93%) contrast(89%);*/
/*filter: invert(48%) sepia(79%) saturate(2476%) hue-rotate(86deg) brightness(118%) contrast(119%);*/ /*filter: invert(48%) sepia(79%) saturate(2476%) hue-rotate(86deg) brightness(118%) contrast(119%);*/
filter: var(--img-icon-color-filter);
} }
#logo { #logo {
content: var(--logo-standard); content: var(--logo-standard);
@ -213,6 +296,31 @@ i.fvtt-cthulhu-eternal {
font-size: calc(var(--font-size-standard) * 1.4); font-size: calc(var(--font-size-standard) * 1.4);
width: 400px; width: 400px;
} }
.fvtt-cthulhu-eternal .protagonist-main .protagonist-pc .protagonist-right .san input {
min-width: 2.2rem;
}
.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-field {
flex-grow: 0;
margin-left: 4px;
}
.fvtt-cthulhu-eternal .protagonist-main .protagonist-pc .protagonist-right .san .spacing {
margin-left: 4px;
}
.fvtt-cthulhu-eternal .protagonist-main .protagonist-pc .protagonist-right .willpower input {
min-width: 2.2rem;
}
.fvtt-cthulhu-eternal .protagonist-main .protagonist-pc .protagonist-right .willpower .label-field {
flex-grow: 0;
margin-left: 4px;
}
.fvtt-cthulhu-eternal .protagonist-main .protagonist-pc .protagonist-right .willpower .checkbox {
min-width: 1rem;
max-width: 1rem;
}
.fvtt-cthulhu-eternal .protagonist-main .protagonist-pc .protagonist-right .protagonist-infos { .fvtt-cthulhu-eternal .protagonist-main .protagonist-pc .protagonist-right .protagonist-infos {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
@ -296,6 +404,39 @@ i.fvtt-cthulhu-eternal {
.fvtt-cthulhu-eternal .protagonist-biography prose-mirror.active { .fvtt-cthulhu-eternal .protagonist-biography prose-mirror.active {
min-height: 150px; min-height: 150px;
} }
.fvtt-cthulhu-eternal .protagonist-biography .field-label {
margin-left: 8px;
}
.fvtt-cthulhu-eternal .protagonist-biography .biodata {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 8px;
}
.fvtt-cthulhu-eternal .protagonist-biography .motivations {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 4px;
}
.fvtt-cthulhu-eternal .protagonist-biography .motivations .motivation {
display: flex;
align-items: center;
gap: 4px;
min-width: 14rem;
max-width: 14rem;
}
.fvtt-cthulhu-eternal .protagonist-biography .motivations .motivation .controls {
min-width: 2rem;
max-width: 2rem;
}
.fvtt-cthulhu-eternal .protagonist-biography .motivations .motivation .name {
min-width: 8rem;
max-width: 8rem;
}
.fvtt-cthulhu-eternal .protagonist-biography .motivations .motivation .item-img {
width: 32px;
height: 32px;
margin: 4px 0 0 0;
}
.fvtt-cthulhu-eternal .tab.protagonist-skills { .fvtt-cthulhu-eternal .tab.protagonist-skills {
background-color: var(--color-light-1); background-color: var(--color-light-1);
display: grid; display: grid;
@ -335,6 +476,98 @@ i.fvtt-cthulhu-eternal {
height: 32px; height: 32px;
margin: 4px 0 0 0; margin: 4px 0 0 0;
} }
.fvtt-cthulhu-eternal .tab.protagonist-status {
background-color: var(--color-light-1);
display: grid;
grid-template-columns: 1fr;
}
.fvtt-cthulhu-eternal .tab.protagonist-status legend a {
font-size: calc(var(--font-size-standard) * 1.4);
padding-left: 5px;
}
.fvtt-cthulhu-eternal .tab.protagonist-status .bonds {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 4px;
}
.fvtt-cthulhu-eternal .tab.protagonist-status .bonds .bond {
display: flex;
align-items: center;
gap: 4px;
min-width: 16rem;
max-width: 16rem;
}
.fvtt-cthulhu-eternal .tab.protagonist-status .bonds .bond .controls {
min-width: 2rem;
max-width: 2rem;
}
.fvtt-cthulhu-eternal .tab.protagonist-status .bonds .bond .name {
min-width: 12rem;
max-width: 12rem;
}
.fvtt-cthulhu-eternal .tab.protagonist-status .bonds .bond .type {
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: 32px;
height: 32px;
margin: 4px 0 0 0;
}
.fvtt-cthulhu-eternal .tab.protagonist-status .mentaldisorders {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 4px;
}
.fvtt-cthulhu-eternal .tab.protagonist-status .mentaldisorders .mentaldisorder {
display: flex;
align-items: center;
gap: 4px;
min-width: 16rem;
max-width: 16rem;
}
.fvtt-cthulhu-eternal .tab.protagonist-status .mentaldisorders .mentaldisorder .controls {
min-width: 2rem;
max-width: 2rem;
}
.fvtt-cthulhu-eternal .tab.protagonist-status .mentaldisorders .mentaldisorder .name {
min-width: 14rem;
max-width: 14rem;
}
.fvtt-cthulhu-eternal .tab.protagonist-status .mentaldisorders .mentaldisorder .item-img {
width: 32px;
height: 32px;
margin: 4px 0 0 0;
}
.fvtt-cthulhu-eternal .tab.protagonist-status .injuries {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 4px;
}
.fvtt-cthulhu-eternal .tab.protagonist-status .injuries .injury {
display: flex;
align-items: center;
gap: 4px;
min-width: 16rem;
max-width: 16rem;
}
.fvtt-cthulhu-eternal .tab.protagonist-status .injuries .injury .controls {
min-width: 2rem;
max-width: 2rem;
}
.fvtt-cthulhu-eternal .tab.protagonist-status .injuries .injury .name {
min-width: 14rem;
max-width: 14rem;
}
.fvtt-cthulhu-eternal .tab.protagonist-status .injuries .injury .item-img {
width: 32px;
height: 32px;
margin: 4px 0 0 0;
}
.fvtt-cthulhu-eternal .tab.protagonist-equipment { .fvtt-cthulhu-eternal .tab.protagonist-equipment {
background-color: var(--color-light-1); background-color: var(--color-light-1);
display: grid; display: grid;
@ -346,18 +579,37 @@ i.fvtt-cthulhu-eternal {
} }
.fvtt-cthulhu-eternal .tab.protagonist-equipment .weapons { .fvtt-cthulhu-eternal .tab.protagonist-equipment .weapons {
display: grid; display: grid;
grid-template-columns: repeat(4, 1fr); grid-template-columns: repeat(2, 1fr);
gap: 4px; gap: 4px;
} }
.fvtt-cthulhu-eternal .tab.protagonist-equipment .weapons .weapon { .fvtt-cthulhu-eternal .tab.protagonist-equipment .weapons .weapon {
display: flex; display: flex;
align-items: center; align-items: center;
gap: 4px; gap: 4px;
min-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 {
text-shadow: 0 0 8px var(--color-shadow-primary);
cursor: pointer;
}
.fvtt-cthulhu-eternal .tab.protagonist-equipment .weapons .weapon .controls {
min-width: 2rem;
max-width: 2rem;
}
.fvtt-cthulhu-eternal .tab.protagonist-equipment .weapons .weapon .damage {
min-width: 5rem;
max-width: 5rem;
}
.fvtt-cthulhu-eternal .tab.protagonist-equipment .weapons .weapon .name {
min-width: 8rem;
max-width: 8rem;
} }
.fvtt-cthulhu-eternal .tab.protagonist-equipment .weapons .weapon .item-img { .fvtt-cthulhu-eternal .tab.protagonist-equipment .weapons .weapon .item-img {
width: 50px; width: 32px;
height: 50px; height: 32px;
margin: 5px 0 0 0; margin: 4px 0 0 0;
} }
.fvtt-cthulhu-eternal .tab.protagonist-equipment .armors { .fvtt-cthulhu-eternal .tab.protagonist-equipment .armors {
display: grid; display: grid;
@ -368,11 +620,30 @@ i.fvtt-cthulhu-eternal {
display: flex; display: flex;
align-items: center; align-items: center;
gap: 4px; gap: 4px;
min-width: 13rem;
max-width: 13srem;
}
.fvtt-cthulhu-eternal .tab.protagonist-equipment .armors .armor .rollable:hover,
.fvtt-cthulhu-eternal .tab.protagonist-equipment .armors .armor .rollable:focus {
text-shadow: 0 0 8px var(--color-shadow-primary);
cursor: pointer;
}
.fvtt-cthulhu-eternal .tab.protagonist-equipment .armors .armor .controls {
min-width: 2rem;
max-width: 2rem;
}
.fvtt-cthulhu-eternal .tab.protagonist-equipment .armors .armor .protection {
min-width: 5rem;
max-width: 5rem;
}
.fvtt-cthulhu-eternal .tab.protagonist-equipment .armors .armor .name {
min-width: 8rem;
max-width: 8rem;
} }
.fvtt-cthulhu-eternal .tab.protagonist-equipment .armors .armor .item-img { .fvtt-cthulhu-eternal .tab.protagonist-equipment .armors .armor .item-img {
width: 50px; width: 32px;
height: 50px; height: 32px;
margin: 5px 0 0 0; margin: 4px 0 0 0;
} }
.fvtt-cthulhu-eternal .tab.protagonist-equipment .gears { .fvtt-cthulhu-eternal .tab.protagonist-equipment .gears {
display: grid; display: grid;
@ -383,11 +654,30 @@ i.fvtt-cthulhu-eternal {
display: flex; display: flex;
align-items: center; align-items: center;
gap: 4px; gap: 4px;
min-width: 13rem;
max-width: 13srem;
}
.fvtt-cthulhu-eternal .tab.protagonist-equipment .gears .gear .rollable:hover,
.fvtt-cthulhu-eternal .tab.protagonist-equipment .gears .gear .rollable:focus {
text-shadow: 0 0 8px var(--color-shadow-primary);
cursor: pointer;
}
.fvtt-cthulhu-eternal .tab.protagonist-equipment .gears .gear .controls {
min-width: 2rem;
max-width: 2rem;
}
.fvtt-cthulhu-eternal .tab.protagonist-equipment .gears .gear .damage {
min-width: 5rem;
max-width: 5rem;
}
.fvtt-cthulhu-eternal .tab.protagonist-equipment .gears .gear .name {
min-width: 8rem;
max-width: 8rem;
} }
.fvtt-cthulhu-eternal .tab.protagonist-equipment .gears .gear .item-img { .fvtt-cthulhu-eternal .tab.protagonist-equipment .gears .gear .item-img {
width: 50px; width: 32px;
height: 50px; height: 32px;
margin: 5px 0 0 0; margin: 4px 0 0 0;
} }
.fvtt-cthulhu-eternal .tab.protagonist-equipment prose-mirror.inactive { .fvtt-cthulhu-eternal .tab.protagonist-equipment prose-mirror.inactive {
min-height: 40px; min-height: 40px;

View File

@ -85,7 +85,9 @@ Hooks.once("init", function () {
game.socket.on(`system.${SYSTEM.id}`, handleSocketEvent) game.socket.on(`system.${SYSTEM.id}`, handleSocketEvent)
setupTextEnrichers() setupTextEnrichers()
CthulhuEternalUtils.registerSettings()
CthulhuEternalUtils.registerHandlebarsHelpers() CthulhuEternalUtils.registerHandlebarsHelpers()
CthulhuEternalUtils.setupCSSRootVariables()
// Gestion des jets de dés depuis les journaux // Gestion des jets de dés depuis les journaux
document.addEventListener("click", (event) => { document.addEventListener("click", (event) => {

View File

@ -29,10 +29,38 @@
"WW2": "World War 2", "WW2": "World War 2",
"ColdWar": "Cold War", "ColdWar": "Cold War",
"Victorian": "Victorian", "Victorian": "Victorian",
"AgeOfSail": "Age of Sail" "AgeOfSail": "Age of Sail",
"PostApo": "Post-Apocalyptic"
}, },
"Protagonist": { "Protagonist": {
"FIELDS": { "FIELDS": {
"biodata": {
"harshness": {
"label": "Harshness"
},
"age": {
"label": "Age"
},
"gender": {
"label": "Gender"
},
"hair": {
"label": "Hair"
},
"eyes": {
"label": "Eyes"
},
"height": {
"label": "Height"
},
"home": {
"label": "Home"
},
"birthplace": {
"label": "Birthplace"
},
"label": "Biodata"
},
"characteristics:": { "characteristics:": {
"str": { "str": {
"label": "Strength" "label": "Strength"
@ -57,6 +85,12 @@
}, },
"Skill": { "Skill": {
"Unnatural": "Unnatural", "Unnatural": "Unnatural",
"Melee": "Melee Weapons",
"Firearms": "Firearms",
"Athletics": "Athletics",
"UnarmedCombat": "Unarmed Combat",
"RangedWeapons": "Ranged Weapons",
"FirearmsBeams": "Firearms / Beam Weapons",
"FIELDS": { "FIELDS": {
"settings": { "settings": {
"label": "Settings era" "label": "Settings era"
@ -243,8 +277,6 @@
"gear": "Gear", "gear": "Gear",
"damage": "Damage", "damage": "Damage",
"resource": "Resource", "resource": "Resource",
"newArmor": "New Armor",
"newWeapon": "New Weapon",
"armor": "Armor", "armor": "Armor",
"malus": "Malus", "malus": "Malus",
"experience": "Experience", "experience": "Experience",
@ -272,7 +304,29 @@
"criticalSuccess": "Critical Success", "criticalSuccess": "Critical Success",
"criticalFailure": "Critical Failure", "criticalFailure": "Critical Failure",
"Characteristic": "Characteristic", "Characteristic": "Characteristic",
"targetScore": "Target Score" "targetScore": "Target Score",
"gears": "Gears",
"armors": "Armors",
"motivations": "Motivations",
"mentalDisorders": "Mental Disorders",
"bonds": "Bonds",
"arcane": "Arcane",
"archetypes": "Archetypes",
"bondType": "Bond Type",
"injuries": "Injuries",
"damageShort": "Dmg",
"status": "Status",
"mentaldisorders": "Mental Disorders",
"newBond": "New Bond",
"newMotivation": "New Motivation",
"newMentalDisorder": "New Mental Disorder",
"newWeapon": "New Weapon",
"newArmor": "New Armor",
"newInjury": "New Injury",
"newGear": "New Gear",
"newArcane": "New Arcane",
"newArchetype": "New Archetype",
"newSkill": "New Skill"
}, },
"Edit": "Edit", "Edit": "Edit",
"Delete": "Delete", "Delete": "Delete",

View File

@ -5,14 +5,21 @@ export default class CthulhuEternalProtagonistSheet extends CthulhuEternalActorS
static DEFAULT_OPTIONS = { static DEFAULT_OPTIONS = {
classes: ["protagonist"], classes: ["protagonist"],
position: { position: {
width: 840, width: 848,
height: 620, height: 620,
}, },
window: { window: {
contentClasses: ["protagonist-content"], contentClasses: ["protagonist-content"],
}, },
actions: { actions: {
createEquipment: CthulhuEternalProtagonistSheet.#onCreateEquipment, createGear: CthulhuEternalProtagonistSheet.#onCreateGear,
createArmor: CthulhuEternalProtagonistSheet.#onCreateArmor,
createWeapon: CthulhuEternalProtagonistSheet.#onCreateWeapon,
createBond: CthulhuEternalProtagonistSheet.#onCreateBond,
createInjury: CthulhuEternalProtagonistSheet.#onCreateInjury,
createMentalDisorder: CthulhuEternalProtagonistSheet.#onCreateMentalDisorder,
createMotivation: CthulhuEternalProtagonistSheet.#onCreateMotivation,
createSkill: CthulhuEternalProtagonistSheet.#onCreateSkill
}, },
} }
@ -27,6 +34,9 @@ export default class CthulhuEternalProtagonistSheet extends CthulhuEternalActorS
skills: { skills: {
template: "systems/fvtt-cthulhu-eternal/templates/protagonist-skills.hbs", template: "systems/fvtt-cthulhu-eternal/templates/protagonist-skills.hbs",
}, },
status: {
template: "systems/fvtt-cthulhu-eternal/templates/protagonist-status.hbs",
},
equipment: { equipment: {
template: "systems/fvtt-cthulhu-eternal/templates/protagonist-equipment.hbs", template: "systems/fvtt-cthulhu-eternal/templates/protagonist-equipment.hbs",
}, },
@ -47,6 +57,7 @@ export default class CthulhuEternalProtagonistSheet extends CthulhuEternalActorS
#getTabs() { #getTabs() {
const tabs = { const tabs = {
skills: { id: "skills", group: "sheet", icon: "fa-solid fa-shapes", label: "CTHULHUETERNAL.Label.skills" }, skills: { id: "skills", group: "sheet", icon: "fa-solid fa-shapes", label: "CTHULHUETERNAL.Label.skills" },
status: { id: "status", group: "sheet", icon: "fa-solid fa-file-waveform", label: "CTHULHUETERNAL.Label.status" },
equipment: { id: "equipment", group: "sheet", icon: "fa-solid fa-shapes", label: "CTHULHUETERNAL.Label.equipment" }, equipment: { id: "equipment", group: "sheet", icon: "fa-solid fa-shapes", label: "CTHULHUETERNAL.Label.equipment" },
biography: { id: "biography", group: "sheet", icon: "fa-solid fa-book", label: "CTHULHUETERNAL.Label.biography" }, biography: { id: "biography", group: "sheet", icon: "fa-solid fa-book", label: "CTHULHUETERNAL.Label.biography" },
} }
@ -104,8 +115,15 @@ export default class CthulhuEternalProtagonistSheet extends CthulhuEternalActorS
context.armors = doc.itemTypes.armor context.armors = doc.itemTypes.armor
context.gears = doc.itemTypes.gear context.gears = doc.itemTypes.gear
break break
case "status":
context.tab = context.tabs.status
context.injuries = doc.itemTypes.injury
context.mentaldisorders = doc.itemTypes.mentaldisorder
context.bonds = doc.itemTypes.bond
break
case "biography": case "biography":
context.tab = context.tabs.biography context.tab = context.tabs.biography
context.motivations = doc.itemTypes.motivation
context.enrichedDescription = await TextEditor.enrichHTML(doc.system.description, { async: true }) context.enrichedDescription = await TextEditor.enrichHTML(doc.system.description, { async: true })
context.enrichedNotes = await TextEditor.enrichHTML(doc.system.notes, { async: true }) context.enrichedNotes = await TextEditor.enrichHTML(doc.system.notes, { async: true })
break break
@ -118,15 +136,36 @@ export default class CthulhuEternalProtagonistSheet extends CthulhuEternalActorS
* @param {Event} event The initiating click event. * @param {Event} event The initiating click event.
* @param {HTMLElement} target The current target of the event listener. * @param {HTMLElement} target The current target of the event listener.
*/ */
static #onCreateEquipment(event, target) { static #onCreateGear(event, target) {
// Création d'une armure this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("CTHULHUETERNAL.Label.newGear"), type: "gear" }])
if (event.shiftKey) {
this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("CTHULHUETERNAL.Label.newArmor"), type: "armor" }])
} }
// Création d'une arme
else { static #onCreateWeapon(event, target) {
this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("CTHULHUETERNAL.Label.newWeapon"), type: "weapon" }]) this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("CTHULHUETERNAL.Label.newWeapon"), type: "weapon" }])
} }
static #onCreateArmor(event, target) {
this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("CTHULHUETERNAL.Label.newArmor"), type: "armor" }])
}
static #onCreateBond(event, target) {
this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("CTHULHUETERNAL.Label.newBond"), type: "bond" }])
}
static #onCreateInjury(event, target) {
this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("CTHULHUETERNAL.Label.newInjury"), type: "injury" }])
}
static #onCreateMentalDisorder(event, target) {
this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("CTHULHUETERNAL.Label.newMentalDisorder"), type: "mentaldisorder" }])
}
static #onCreateMotivation(event, target) {
this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("CTHULHUETERNAL.Label.newMotivation"), type: "motivation" }])
}
static #onCreateSkill(event, target) {
this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("CTHULHUETERNAL.Label.newSkill"), type: "skill" }])
} }
/** /**

View File

@ -5,21 +5,6 @@ import * as BOND from "./bond.mjs"
export const SYSTEM_ID = "fvtt-cthulhu-eternal" export const SYSTEM_ID = "fvtt-cthulhu-eternal"
export const AVAILABLE_SETTINGS = {
common: "CTHULHUETERNAL.Settings.Common",
modern: "CTHULHUETERNAL.Settings.Modern",
jazz: "CTHULHUETERNAL.Settings.Jazz",
future: "CTHULHUETERNAL.Settings.Future",
coldwar: "CTHULHUETERNAL.Settings.ColdWar",
ww2: "CTHULHUETERNAL.Settings.WW2",
ww1: "CTHULHUETERNAL.Settings.WW1",
victorian: "CTHULHUETERNAL.Settings.Victorian",
revolution: "CTHULHUETERNAL.Settings.Revolution",
medieval: "CTHULHUETERNAL.Settings.Medieval",
ageofsail: "CTHULHUETERNAL.Settings.AgeOfSail",
classical: "CTHULHUETERNAL.Settings.Classical"
}
export const ASCII = ` export const ASCII = `
@ -31,10 +16,155 @@ export const ASCII = `
` `
export const AVAILABLE_SETTINGS = {
modern: "CTHULHUETERNAL.Settings.Modern",
jazz: "CTHULHUETERNAL.Settings.Jazz",
future: "CTHULHUETERNAL.Settings.Future",
coldwar: "CTHULHUETERNAL.Settings.ColdWar",
ww2: "CTHULHUETERNAL.Settings.WW2",
ww1: "CTHULHUETERNAL.Settings.WW1",
victorian: "CTHULHUETERNAL.Settings.Victorian",
revolution: "CTHULHUETERNAL.Settings.Revolution",
medieval: "CTHULHUETERNAL.Settings.Medieval",
ageofsail: "CTHULHUETERNAL.Settings.AgeOfSail",
classical: "CTHULHUETERNAL.Settings.Classical",
postapo: "CTHULHUETERNAL.Settings.PostApo"
}
export const ERA_CSS = {
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 = {
jazz: {
0: {name: "Penury", description: "CTHULHUETERNAL.Resource.Penury", income: 0, assets: "CTHULHUETERNAL.Resource.NoAssets"},
4: {name: "Poor", description: "CTHULHUETERNAL.Resource.Poor", income: 700, assets: "CTHULHUETERNAL.Resource.PoorJazz"},
8: {name: "Average", description: "CTHULHUETERNAL.Resource.Average", income: 3000, assets: "CTHULHUETERNAL.Resource.AverageJazz"},
12: {name: "Above Average", description: "CTHULHUETERNAL.Resource.AboveAverage", income: 5000, assets: "CTHULHUETERNAL.Resource.AboveAverageJazz"},
16: {name: "Well Off", description: "CTHULHUETERNAL.Resource.WellOff", income: 10000, assets: "CTHULHUETERNAL.Resource.WellOffJazz"},
18: {name: "Rich", description: "CTHULHUETERNAL.Resource.Rich", income: 15000, assets: "CTHULHUETERNAL.Resource.RichJazz"},
19: {name: "Very Rich", description: "CTHULHUETERNAL.Resource.VeryRich", income: 50000, assets: "CTHULHUETERNAL.Resource.VeryRichJazz"},
20: {name: "Super Rich", description: "CTHULHUETERNAL.Resource.SuperRich", income: 100000, assets: "CTHULHUETERNAL.Resource.SuperRichJazz"}
},
modern: {
0: {name: "Penury", description: "CTHULHUETERNAL.Resource.Penury", income: 0, assets: "CTHULHUETERNAL.Resource.NoAssets"},
4: {name: "Poor", description: "CTHULHUETERNAL.Resource.Poor", income: 20000, assets: "CTHULHUETERNAL.Resource.PoorModern"},
8: {name: "Average", description: "CTHULHUETERNAL.Resource.Average", income: 50000, assets: "CTHULHUETERNAL.Resource.AverageModern"},
12: {name: "Above Average", description: "CTHULHUETERNAL.Resource.AboveAverage", income: 100000, assets: "CTHULHUETERNAL.Resource.AboveAverageModern"},
16: {name: "Well Off", description: "CTHULHUETERNAL.Resource.WellOff", income: 150000, assets: "CTHULHUETERNAL.Resource.WellOffModern"},
18: {name: "Rich", description: "CTHULHUETERNAL.Resource.Rich", income: 20000, assets: "CTHULHUETERNAL.Resource.RichModern"},
19: {name: "Very Rich", description: "CTHULHUETERNAL.Resource.VeryRich", income: 500000, assets: "CTHULHUETERNAL.Resource.VeryRichModern"},
20: {name: "Super Rich", description: "CTHULHUETERNAL.Resource.SuperRich", income: 1000000, assets: "CTHULHUETERNAL.Resource.SuperRichModern"}
},
victorian: {
0: {name: "Penury", description: "CTHULHUETERNAL.Resource.Penury", income: 0, assets: "CTHULHUETERNAL.Resource.NoAssets"},
4: {name: "Poor", description: "CTHULHUETERNAL.Resource.Poor", income: 30, assets: "CTHULHUETERNAL.Resource.PoorVictorian"},
8: {name: "Average", description: "CTHULHUETERNAL.Resource.Average", income: 90, assets: "CTHULHUETERNAL.Resource.AverageVictorian"},
12: {name: "Above Average", description: "CTHULHUETERNAL.Resource.AboveAverage", income: 400, assets: "CTHULHUETERNAL.Resource.AboveAverageVictorian"},
16: {name: "Well Off", description: "CTHULHUETERNAL.Resource.WellOff", income: 1500, assets: "CTHULHUETERNAL.Resource.WellOffVictorian"},
18: {name: "Rich", description: "CTHULHUETERNAL.Resource.Rich", income: 5000, assets: "CTHULHUETERNAL.Resource.RichVictorian"},
19: {name: "Very Rich", description: "CTHULHUETERNAL.Resource.VeryRich", income: 40000, assets: "CTHULHUETERNAL.Resource.VeryRichVictorian"},
20: {name: "Super Rich", description: "CTHULHUETERNAL.Resource.SuperRich", income: 200000, assets: "CTHULHUETERNAL.Resource.SuperRichVictorian"}
}
}
export const MENTAL_ILLNESS_CURE_SKILL = {
jazz: "CTHULHUETERNAL.Skill.Psychoanalyze",
modern: "CTHULHUETERNAL.Skill.Psychoanalyze",
victorian: "CTHULHUETERNAL.Skill.Reassure",
}
export const WEAPON_SKILL_MAPPING = {
modern: {
"melee": "CTHULHUETERNAL.Skill.Melee",
"rangedprimitive": "CTHULHUETERNAL.Skill.Firearms",
"rangedthrown": "CTHULHUETERNAL.Skill.Athletics",
"rangedfirearm": "CTHULHUETERNAL.Skill.Firearms",
"unarmed": "CTHULHUETERNAL.Skill.UnarmedCombat"
},
jazz: {
"melee": "CTHULHUETERNAL.Skill.Melee",
"rangedprimitive": "CTHULHUETERNAL.Skill.Firearms",
"rangedthrown": "CTHULHUETERNAL.Skill.Athletics",
"rangedfirearm": "CTHULHUETERNAL.Skill.Firearms",
"unarmed": "CTHULHUETERNAL.Skill.UnarmedCombat"
},
victorian: {
"melee": "CTHULHUETERNAL.Skill.Melee",
"rangedprimitive": "CTHULHUETERNAL.Skill.Firearms",
"rangedthrown": "CTHULHUETERNAL.Skill.Athletics",
"rangedfirearm": "CTHULHUETERNAL.Skill.Firearms",
"unarmed": "CTHULHUETERNAL.Skill.UnarmedCombat"
},
coldwar: {
"melee": "CTHULHUETERNAL.Skill.Melee",
"rangedprimitive": "CTHULHUETERNAL.Skill.Firearms",
"rangedthrown": "CTHULHUETERNAL.Skill.Athletics",
"rangedfirearm": "CTHULHUETERNAL.Skill.Firearms",
"unarmed": "CTHULHUETERNAL.Skill.UnarmedCombat"
},
ww1: {
"melee": "CTHULHUETERNAL.Skill.Melee",
"rangedprimitive": "CTHULHUETERNAL.Skill.Firearms",
"rangedthrown": "CTHULHUETERNAL.Skill.Athletics",
"rangedfirearm": "CTHULHUETERNAL.Skill.Firearms",
"unarmed": "CTHULHUETERNAL.Skill.UnarmedCombat"
},
ww2: {
"melee": "CTHULHUETERNAL.Skill.Melee",
"rangedprimitive": "CTHULHUETERNAL.Skill.Firearms",
"rangedthrown": "CTHULHUETERNAL.Skill.Athletics",
"rangedfirearm": "CTHULHUETERNAL.Skill.Firearms",
"unarmed": "CTHULHUETERNAL.Skill.UnarmedCombat"
},
future: {
"melee": "CTHULHUETERNAL.Skill.Melee",
"rangedprimitive": "CTHULHUETERNAL.Skill.FirearmsBeams",
"rangedthrown": "CTHULHUETERNAL.Skill.Athletics",
"rangedfirearm": "CTHULHUETERNAL.Skill.FirearmsBeams",
"unarmed": "CTHULHUETERNAL.Skill.UnarmedCombat"
},
revolution: {
"melee": "CTHULHUETERNAL.Skill.Melee",
"rangedprimitive": "CTHULHUETERNAL.Skill.RangedWeapons",
"rangedthrown": "CTHULHUETERNAL.Skill.Athletics",
"rangedfirearm": "CTHULHUETERNAL.Skill.Firearms",
"unarmed": "CTHULHUETERNAL.Skill.UnarmedCombat"
},
ageofsail: {
"melee": "CTHULHUETERNAL.Skill.Melee",
"rangedprimitive": "CTHULHUETERNAL.Skill.RangedWeapons",
"rangedthrown": "CTHULHUETERNAL.Skill.Athletics",
"rangedfirearm": "CTHULHUETERNAL.Skill.Firearms",
"unarmed": "CTHULHUETERNAL.Skill.UnarmedCombat"
},
medieval: {
"melee": "CTHULHUETERNAL.Skill.Melee",
"rangedprimitive": "CTHULHUETERNAL.Skill.RangedWeapons",
"rangedthrown": "CTHULHUETERNAL.Skill.Athletics",
"unarmed": "CTHULHUETERNAL.Skill.UnarmedCombat"
},
classical: {
"melee": "CTHULHUETERNAL.Skill.Melee",
"rangedprimitive": "CTHULHUETERNAL.Skill.RangedWeapons",
"rangedthrown": "CTHULHUETERNAL.Skill.Athletics",
"unarmed": "CTHULHUETERNAL.Skill.UnarmedCombat"
}
}
/** /**
* Include all constant definitions within the SYSTEM global export * Include all constant definitions within the SYSTEM global export
* @type {Object} * @type {Object}
@ -45,7 +175,11 @@ export const SYSTEM = {
HARSHNESS: PROTAGONIST.HARSHNESS, HARSHNESS: PROTAGONIST.HARSHNESS,
WEAPON_TYPE: WEAPON.WEAPON_TYPE, WEAPON_TYPE: WEAPON.WEAPON_TYPE,
WEAPON_SUBTYPE: WEAPON.WEAPON_SUBTYPE, WEAPON_SUBTYPE: WEAPON.WEAPON_SUBTYPE,
WEAPON_SKILL_MAPPING,
BOND_TYPE: BOND.BOND_TYPE, BOND_TYPE: BOND.BOND_TYPE,
AVAILABLE_SETTINGS, AVAILABLE_SETTINGS,
RESOURCE_RATING,
MENTAL_ILLNESS_CURE_SKILL,
ERA_CSS,
ASCII ASCII
} }

View File

@ -5,7 +5,7 @@ export const defaultItemImg = {
skill: "systems/fvtt-cthulhu-eternal/assets/icons/icon_skill.svg", skill: "systems/fvtt-cthulhu-eternal/assets/icons/icon_skill.svg",
archetype: "systems/fvtt-cthulhu-eternal/assets/icons/icon_archetype.svg", archetype: "systems/fvtt-cthulhu-eternal/assets/icons/icon_archetype.svg",
bond: "systems/fvtt-cthulhu-eternal/assets/icons/icon_bond.svg", bond: "systems/fvtt-cthulhu-eternal/assets/icons/icon_bond.svg",
mentaldisorder: "systems/fvtt-cthulhu-eternal/assets/icons/icon_mentaldisorder.svg", mentaldisorder: "systems/fvtt-cthulhu-eternal/assets/icons/icon_mental_disorder.svg",
arcane: "systems/fvtt-cthulhu-eternal/assets/icons/icon_arcane.svg", arcane: "systems/fvtt-cthulhu-eternal/assets/icons/icon_arcane.svg",
injury: "systems/fvtt-cthulhu-eternal/assets/icons/icon_injury.svg", injury: "systems/fvtt-cthulhu-eternal/assets/icons/icon_injury.svg",
motivation: "systems/fvtt-cthulhu-eternal/assets/icons/icon_motivation.svg", motivation: "systems/fvtt-cthulhu-eternal/assets/icons/icon_motivation.svg",

View File

@ -130,6 +130,8 @@ export default class CthulhuEternalRoll extends Roll {
rollItem: foundry.utils.duplicate(options.rollItem), // Object only, no class rollItem: foundry.utils.duplicate(options.rollItem), // Object only, no class
initialScore: options.initialScore, initialScore: options.initialScore,
targetScore: options.initialScore, targetScore: options.initialScore,
isLowWP: options.isLowWP,
isZeroWP: options.isZeroWP,
rollModes, rollModes,
fieldRollMode, fieldRollMode,
choiceModifier, choiceModifier,
@ -167,23 +169,22 @@ export default class CthulhuEternalRoll extends Roll {
// If the user cancels the dialog, exit // If the user cancels the dialog, exit
if (rollContext === null) return if (rollContext === null) return
const rollData = { let rollData = foundry.utils.mergeObject(foundry.utils.duplicate(options), rollContext)
rollType: options.rollType, rollData.rollMode = rollContext.visibility
rollItem: options.rollItem, rollData.targetName = targetName
actorId: options.actorId, rollData.targetArmor = targetArmor
actorName: options.actorName, rollData.targetMalus = targetMalus
actorImage: options.actorImage,
rollMode: rollContext.visibility,
hasTarget: options.hasTarget,
initialScore: options.initialScore,
targetName,
targetArmor,
targetMalus,
...rollContext,
}
// Update target score // Update target score
console.log(rollData)
rollData.targetScore = Math.min( Math.max(options.initialScore + Number(rollData.modifier), 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. * A hook event that fires before the roll is made.
@ -270,32 +271,25 @@ export default class CthulhuEternalRoll extends Roll {
* @property {string} tooltip - The tooltip text for the chat card. * @property {string} tooltip - The tooltip text for the chat card.
*/ */
async _getChatCardData(isPrivate) { async _getChatCardData(isPrivate) {
const cardData = { let cardData = foundry.utils.duplicate(this.options)
css: [SYSTEM.id, "dice-roll"], cardData.css = [SYSTEM.id, "dice-roll"]
data: this.data, cardData.data = this.data
diceTotal: this.dice.reduce((t, d) => t + d.total, 0), cardData.diceTotal = this.dice.reduce((t, d) => t + d.total, 0)
isGM: game.user.isGM, cardData.isGM = game.user.isGM
rollItem: this.options.rollItem, cardData.formula = this.formula
initialScore: this.options.initialScore, cardData.total = this.total
targetScore: this.options.targetScore, cardData.actorId = this.actorId
rollType: this.options.rollType, cardData.actingCharName = this.actorName
modifier: this.options.modifier, cardData.actingCharImg = this.actorImage
formula: this.formula, cardData.resultType = this.resultType
total: this.total, cardData.hasTarget = this.hasTarget
isSuccess: this.options.isSuccess, cardData.targetName = this.targetName
isFailure: this.options.isFailure, cardData.targetArmor = this.targetArmor
isCritical: this.options.isCritical, cardData.realDamage = this.realDamage
actorId: this.actorId, cardData.isPrivate = isPrivate
actingCharName: this.actorName,
actingCharImg: this.actorImage,
resultType: this.resultType,
hasTarget: this.hasTarget,
targetName: this.targetName,
targetArmor: this.targetArmor,
realDamage: this.realDamage,
isPrivate: isPrivate,
}
console.log(cardData) console.log(cardData)
cardData.cssClass = cardData.css.join(" ") cardData.cssClass = cardData.css.join(" ")
cardData.tooltip = isPrivate ? "" : await this.getTooltip() cardData.tooltip = isPrivate ? "" : await this.getTooltip()
return cardData return cardData

View File

@ -5,7 +5,7 @@ export default class CthulhuEternalArchetype extends foundry.abstract.TypeDataMo
const requiredInteger = { required: true, nullable: false, integer: true } const requiredInteger = { required: true, nullable: false, integer: true }
const schema = {} const schema = {}
schema.settings = new fields.StringField({ required: true, initial: "common", choices: SYSTEM.AVAILABLE_SETTINGS }) schema.settings = new fields.StringField({ required: true, initial: "modern", choices: SYSTEM.AVAILABLE_SETTINGS })
schema.description = new fields.HTMLField({ schema.description = new fields.HTMLField({
required: false, required: false,

View File

@ -6,7 +6,7 @@ export default class CthulhuEternalArmor extends foundry.abstract.TypeDataModel
const requiredInteger = { required: true, nullable: false, integer: true } const requiredInteger = { required: true, nullable: false, integer: true }
schema.description = new fields.HTMLField({ required: true, textSearch: true }) schema.description = new fields.HTMLField({ required: true, textSearch: true })
schema.settings = new fields.StringField({ required: true, initial: "common", choices: SYSTEM.AVAILABLE_SETTINGS }) schema.settings = new fields.StringField({ required: true, initial: "modern", choices: SYSTEM.AVAILABLE_SETTINGS })
schema.protection = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) schema.protection = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 })
schema.resourceLevel = new fields.NumberField({ required: true, initial: 0, min: 0 }) schema.resourceLevel = new fields.NumberField({ required: true, initial: 0, min: 0 })

View File

@ -7,7 +7,7 @@ export default class CthulhuEternalGHear extends foundry.abstract.TypeDataModel
const requiredInteger = { required: true, nullable: false, integer: true } const requiredInteger = { required: true, nullable: false, integer: true }
schema.description = new fields.HTMLField({ required: true, textSearch: true }) schema.description = new fields.HTMLField({ required: true, textSearch: true })
schema.settings = new fields.StringField({ required: true, initial: "common", choices: SYSTEM.AVAILABLE_SETTINGS }) 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.resourceLevel = new fields.NumberField({ required: true, initial: 0, min: 0 })
return schema return schema

View File

@ -142,6 +142,15 @@ export default class CthulhuEternalProtagonist extends foundry.abstract.TypeData
} }
} }
isLowWP() {
return this.wp.value <= 2
}
isZeroWP() {
return this.wp.value === 0
}
/** */ /** */
/** /**
* Rolls a dice for a character. * Rolls a dice for a character.
@ -168,6 +177,8 @@ export default class CthulhuEternalProtagonist extends foundry.abstract.TypeData
let roll = await CthulhuEternalRoll.prompt({ let roll = await CthulhuEternalRoll.prompt({
rollType, rollType,
rollItem, rollItem,
isLowWP: this.isLowWP(),
isZeroWP: this.isZeroWP(),
actorId: this.parent.id, actorId: this.parent.id,
actorName: this.parent.name, actorName: this.parent.name,
actorImage: this.parent.img, actorImage: this.parent.img,

View File

@ -6,9 +6,9 @@ export default class CthulhuEternalSkill extends foundry.abstract.TypeDataModel
const requiredInteger = { required: true, nullable: false, integer: true } const requiredInteger = { required: true, nullable: false, integer: true }
schema.description = new fields.HTMLField({ required: true, textSearch: true }) schema.description = new fields.HTMLField({ required: true, textSearch: true })
schema.settings = new fields.StringField({ required: true, initial: "common", choices: SYSTEM.AVAILABLE_SETTINGS }) schema.settings = new fields.StringField({ required: true, initial: "modern", choices: SYSTEM.AVAILABLE_SETTINGS })
schema.base = new fields.StringField({ required: true, initial: "WIS" }) schema.base = new fields.StringField({ required: true, initial: "0" })
schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 }) schema.bonus = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 })
schema.diceEvolved = new fields.BooleanField({ required: true, initial: true }) schema.diceEvolved = new fields.BooleanField({ required: true, initial: true })
schema.rollFailed = new fields.BooleanField({ required: true, initial: false }) schema.rollFailed = new fields.BooleanField({ required: true, initial: false })

View File

@ -7,7 +7,7 @@ export default class LethalFantasySkill extends foundry.abstract.TypeDataModel {
const requiredInteger = { required: true, nullable: false, integer: true } const requiredInteger = { required: true, nullable: false, integer: true }
schema.description = new fields.HTMLField({ required: true, textSearch: true }) schema.description = new fields.HTMLField({ required: true, textSearch: true })
schema.settings = new fields.StringField({ required: true, initial: "common", choices: SYSTEM.AVAILABLE_SETTINGS }) schema.settings = new fields.StringField({ required: true, initial: "modern", choices: SYSTEM.AVAILABLE_SETTINGS })
schema.weaponType = new fields.StringField({ required: true, initial: "melee", choices: SYSTEM.WEAPON_TYPE }) schema.weaponType = new fields.StringField({ required: true, initial: "melee", choices: SYSTEM.WEAPON_TYPE })
schema.damage = new fields.StringField({required: true, initial: "1d6"}) schema.damage = new fields.StringField({required: true, initial: "1d6"})

View File

@ -1,6 +1,19 @@
export class CthulhuEternalUtils { export class CthulhuEternalUtils {
static registerSettings() {
game.settings.register("fvtt-cthulhu-eternal", "settings-era", {
name: game.i18n.localize("CHTUHLUETERNAL.Settings.era"),
hint: game.i18n.localize("CHTUHLUETERNAL.Settings.eraHint"),
default: true,
scope: "world",
type: String,
choices: SYSTEM.AVAILABLE_SETTINGS,
config: true,
onChange: _ => window.location.reload()
});
}
static registerHandlebarsHelpers() { static registerHandlebarsHelpers() {
Handlebars.registerHelper('isNull', function (val) { Handlebars.registerHelper('isNull', function (val) {
@ -153,4 +166,17 @@ export class CthulhuEternalUtils {
}); });
} }
static setupCSSRootVariables() {
const era = game.settings.get("fvtt-cthulhu-eternal", "settings-era")
let eraCSS = SYSTEM.ERA_CSS[era];
if (!eraCSS) eraCSS = SYSTEM.ERA_CSS["jazz"];
document.documentElement.style.setProperty('--font-primary', eraCSS.primaryFont);
document.documentElement.style.setProperty('--font-secondary', eraCSS.secondaryFont);
document.documentElement.style.setProperty('--font-title', eraCSS.titleFont);
document.documentElement.style.setProperty('--img-icon-color-filter', eraCSS.imgFilter);
}
} }

View File

@ -1,6 +1,107 @@
@font-face { @font-face {
font-family: "Georama"; font-family: "Georama";
src: url("../assets/fonts/georama.woff2") format("woff2"); src: url("../assets/fonts/Georama-Regular.ttf") format("truetype");
}
@font-face {
font-family: "Tangerine";
src: url("../assets/fonts/Tangerine-Regular.ttf") format("truetype");
}
@font-face {
font-family: "TrajanPro";
src: url("../assets/fonts/Trajan-Pro-Regular.ttf") format("truetype");
}
@font-face {
font-family: "Teko";
src: url("../assets/fonts/Teko-Regular.ttf") format("truetype");
}
@font-face {
font-family: "P22Operina";
src: url("../assets/fonts/P22-Operina.ttf") format("truetype");
}
@font-face {
font-family: "SpectralSC";
src: url("../assets/fonts/SpectralSC-Regular.ttf") format("truetype");
}
@font-face {
font-family: "RozhaOne";
src: url("../assets/fonts/RozhaOne-Regular.ttf") format("truetype");
}
@font-face {
font-family: "Megrim";
src: url("../assets/fonts/Megrim-Regular.ttf") format("truetype");
}
@font-face {
font-family: "Volkhov";
src: url("../assets/fonts/Volkhov-Regular.ttf") format("truetype");
}
@font-face {
font-family: "IMFell";
src: url("../assets/fonts/IMFell.ttf") format("truetype");
}
@font-face {
font-family: "Dominican";
src: url("../assets/fonts/dominican.ttf") format("truetype");
}
@font-face {
font-family: "UncialAntiqua";
src: url("../assets/fonts/UncialAntiqua-Regular.ttf") format("truetype");
}
@font-face {
font-family: "Luminari";
src: url("../assets/fonts/Luminari-Regular.ttf") format("truetype");
}
@font-face {
font-family: "SairaStencilOne";
src: url("../assets/fonts/SairaStencilOne-Regular.ttf") format("truetype");
}
@font-face {
font-family: "Armalite";
src: url("../assets/fonts/armalite.ttf") format("truetype");
}
@font-face {
font-family: "CarterOne";
src: url("../assets/fonts/CarterOne-Regular.ttf") format("truetype");
}
@font-face {
font-family: "SigmarOne";
src: url("../assets/fonts/SigmarOne-Regular.ttf") format("truetype");
}
@font-face {
font-family: "Excelsior";
src: url("../assets/fonts/Excelsior-Normal.ttf") format("truetype");
}
@font-face {
font-family: "TopSecret";
src: url("../assets/fonts/Top-Secret.ttf") format("truetype");
}
@font-face {
font-family: "BebasNeue";
src: url("../assets/fonts/BebasNeue-Regular.ttf") format("truetype");
}
@font-face {
font-family: "Seabreed";
src: url("../assets/fonts/Seabreed.ttf") format("truetype");
} }
@font-face { @font-face {

View File

@ -3,19 +3,22 @@
--background-image-base: linear-gradient(rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0.8)), --background-image-base: linear-gradient(rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0.8)),
url("../assets/ui/jazzage_background_main.webp"); url("../assets/ui/jazzage_background_main.webp");
/*--background-image-base: url("../assets/ui/jazzage_background_main.webp");*/ /*--background-image-base: url("../assets/ui/jazzage_background_main.webp");*/
--font-primary: "Georama"; --font-primary: "RozhaOne";
--font-secondary: "Georama"; --font-secondary: "RozhaOne";
--font-title: "Broadway"; --font-title: "Broadway";
--logo-standard: url("../assets/logos/reanimated-ce-logo.webp"); --logo-standard: url("../assets/logos/reanimated-ce-logo.webp");
--color-success: darkgreen; --color-success: darkgreen;
--color-failure: darkred; --color-failure: darkred;
--color-critical-success: lightgreen; --color-critical-success: lightgreen;
--color-critical-failure: lightcoral; --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%);
} }
.era-icon-color { .item .thumbnail,
.item-img {
/*filter: invert(90%) sepia(10%) saturate(1215%) hue-rotate(55deg) brightness(93%) contrast(89%);*/ /*filter: invert(90%) sepia(10%) saturate(1215%) hue-rotate(55deg) brightness(93%) contrast(89%);*/
/*filter: invert(48%) sepia(79%) saturate(2476%) hue-rotate(86deg) brightness(118%) contrast(119%);*/ /*filter: invert(48%) sepia(79%) saturate(2476%) hue-rotate(86deg) brightness(118%) contrast(119%);*/
filter: var(--img-icon-color-filter);
} }
#logo { #logo {

View File

@ -12,7 +12,6 @@
background-color: var(--color-light-1); background-color: var(--color-light-1);
display: flex; display: flex;
.protagonist-pc { .protagonist-pc {
display: flex; display: flex;
gap: 4px; gap: 4px;
@ -67,7 +66,36 @@
width: 400px; width: 400px;
} }
} }
.san {
input {
min-width: 2.2rem;
}
.san-checkbox {
min-width: 1rem;
max-width: 1rem;
}
.label-field {
flex-grow: 0;
margin-left: 4px;
}
.spacing {
margin-left: 4px;
}
}
.willpower {
input {
min-width: 2.2rem;
}
.label-field {
flex-grow: 0;
margin-left: 4px;
}
.checkbox {
min-width: 1rem;
max-width: 1rem;
}
}
.protagonist-infos { .protagonist-infos {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
@ -154,7 +182,6 @@
.protagonist-characteristic-edit { .protagonist-characteristic-edit {
min-width: 400px; min-width: 400px;
} }
} }
.protagonist-biography { .protagonist-biography {
@ -165,6 +192,39 @@
prose-mirror.active { prose-mirror.active {
min-height: 150px; min-height: 150px;
} }
.field-label {
margin-left: 8px;
}
.biodata {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 8px;
}
.motivations {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 4px;
.motivation {
display: flex;
align-items: center;
gap: 4px;
min-width: 14rem;
max-width: 14rem;
.controls {
min-width: 2rem;
max-width: 2rem;
}
.name {
min-width: 8rem;
max-width: 8rem;
}
.item-img {
width: 32px;
height: 32px;
margin: 4px 0 0 0;
}
}
}
} }
.tab.protagonist-skills { .tab.protagonist-skills {
@ -209,6 +269,101 @@
} }
} }
.tab.protagonist-status {
background-color: var(--color-light-1);
display: grid;
grid-template-columns: 1fr;
legend {
a {
font-size: calc(var(--font-size-standard) * 1.4);
padding-left: 5px;
}
}
.bonds {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 4px;
.bond {
display: flex;
align-items: center;
gap: 4px;
min-width: 16rem;
max-width: 16rem;
.controls {
min-width: 2rem;
max-width: 2rem;
}
.name {
min-width: 12rem;
max-width: 12rem;
}
.type {
min-width: 4rem;
max-width: 4rem;
}
.level {
min-width: 2rem;
max-width: 2rem;
}
.item-img {
width: 32px;
height: 32px;
margin: 4px 0 0 0;
}
}
}
.mentaldisorders {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 4px;
.mentaldisorder {
display: flex;
align-items: center;
gap: 4px;
min-width: 16rem;
max-width: 16rem;
.controls {
min-width: 2rem;
max-width: 2rem;
}
.name {
min-width: 14rem;
max-width: 14rem;
}
.item-img {
width: 32px;
height: 32px;
margin: 4px 0 0 0;
}
}
}
.injuries {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 4px;
.injury {
display: flex;
align-items: center;
gap: 4px;
min-width: 16rem;
max-width: 16rem;
.controls {
min-width: 2rem;
max-width: 2rem;
}
.name {
min-width: 14rem;
max-width: 14rem;
}
.item-img {
width: 32px;
height: 32px;
margin: 4px 0 0 0;
}
}
}
}
.tab.protagonist-equipment { .tab.protagonist-equipment {
background-color: var(--color-light-1); background-color: var(--color-light-1);
display: grid; display: grid;
@ -221,16 +376,35 @@
} }
.weapons { .weapons {
display: grid; display: grid;
grid-template-columns: repeat(4, 1fr); grid-template-columns: repeat(2, 1fr);
gap: 4px; gap: 4px;
.weapon { .weapon {
display: flex; display: flex;
align-items: center; align-items: center;
gap: 4px; 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 { .item-img {
width: 50px; width: 32px;
height: 50px; height: 32px;
margin: 5px 0 0 0; margin: 4px 0 0 0;
} }
} }
} }
@ -242,10 +416,29 @@
display: flex; display: flex;
align-items: center; align-items: center;
gap: 4px; 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;
}
.protection {
min-width: 5rem;
max-width: 5rem;
}
.name {
min-width: 8rem;
max-width: 8rem;
}
.item-img { .item-img {
width: 50px; width: 32px;
height: 50px; height: 32px;
margin: 5px 0 0 0; margin: 4px 0 0 0;
} }
} }
} }
@ -257,10 +450,29 @@
display: flex; display: flex;
align-items: center; align-items: center;
gap: 4px; 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 { .item-img {
width: 50px; width: 32px;
height: 50px; height: 32px;
margin: 5px 0 0 0; margin: 4px 0 0 0;
} }
} }
} }

View File

@ -1,6 +1,6 @@
<section> <section>
<div class="header"> <div class="header">
<img class="item-img" src="{{item.img}}" data-edit="img" data-action="editImage" data-tooltip="{{item.name}}" /> <img class="item-img era-icon-color" src="{{item.img}}" data-edit="img" data-action="editImage" data-tooltip="{{item.name}}" />
{{formInput fields.name value=source.name}} {{formInput fields.name value=source.name}}
</div> </div>

View File

@ -2,13 +2,43 @@
<fieldset> <fieldset>
<legend>{{localize "CTHULHUETERNAL.Label.biodata"}}</legend> <legend>{{localize "CTHULHUETERNAL.Label.biodata"}}</legend>
{{formInput systemFields.biodata.fields.harshness value=system.biodata.harshness name="system.biodata.harshness" localize=true}} <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"}}
{{formField systemFields.biodata.fields.gender value=system.biodata.gender name="system.biodata.gender" localize=true classes="field-label"}}
{{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.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.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> <fieldset>
<legend>{{localize "CTHULHUETERNAL.Label.description"}}</legend> <legend>{{localize "CTHULHUETERNAL.Label.description"}}</legend>
{{formInput systemFields.description enriched=description value=system.description name="system.description" toggled=true}} {{formInput systemFields.description enriched=description value=system.description name="system.description" toggled=true}}
</fieldset> </fieldset>
<fieldset> <fieldset>
<legend>{{localize "CTHULHUETERNAL.Label.notes"}}</legend> <legend>{{localize "CTHULHUETERNAL.Label.notes"}}</legend>
{{formInput systemFields.notes enriched=notes value=system.notes name="system.notes" toggled=true}} {{formInput systemFields.notes enriched=notes value=system.notes name="system.notes" toggled=true}}

View File

@ -2,25 +2,28 @@
<fieldset> <fieldset>
<legend>{{localize "CTHULHUETERNAL.Label.weapons"}}{{#if isEditMode}} <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="createEquipment"></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"> <div class="weapons">
{{#each weapons as |item|}} {{#each weapons as |item|}}
{{!log 'weapon' this}} {{!log 'weapon' this}}
<div class="weapon" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}" data-drag="true" data-drag-type="damage"> <div class="weapon" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}" data-drag="true" data-drag-type="damage">
<img class="item-img" src="{{item.img}}" data-tooltip="{{item.name}}" /> <img class="item-img" src="{{item.img}}" data-tooltip="{{item.name}}" />
<div class="name" data-tooltip="{{{item.system.description}}}"> <div class="name rollable" data-tooltip="{{{item.system.description}}}">
{{item.name}} {{item.name}}
</div> </div>
<a class="rollable" data-item-id="{{item.id}}" data-action="roll" data-roll-type="damage" data-roll-value="{{item.system.degats}}">{{localize "CTHULHUETERNAL.Label.damage"}} : {{item.system.damage}}</a> <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>
{{#if @root.isEditMode}}
<div class="controls"> <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.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> <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>
{{/if}}
</div> </div>
{{/each}} {{/each}}
</div> </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>
<div class="armors"> <div class="armors">
{{#each armors as |item|}} {{#each armors as |item|}}
{{!log 'armor' this}} {{!log 'armor' this}}
@ -29,7 +32,7 @@
<div class="name" data-tooltip="{{{item.system.description}}}"> <div class="name" data-tooltip="{{{item.system.description}}}">
{{item.name}} {{item.name}}
</div> </div>
{{localize "CTHULHUETERNAL.Label.armor"}} : {{item.system.protection}} <span class="protection">{{localize "CTHULHUETERNAL.Label.armor"}} : {{item.system.protection}}</span>
<div class="controls"> <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.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> <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>
@ -37,7 +40,11 @@
</div> </div>
{{/each}} {{/each}}
</div> </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"> <div class="gears">
{{#each gears as |item|}} {{#each gears as |item|}}
{{!log 'armor' this}} {{!log 'armor' this}}
@ -46,7 +53,6 @@
<div class="name" data-tooltip="{{{item.system.description}}}"> <div class="name" data-tooltip="{{{item.system.description}}}">
{{item.name}} {{item.name}}
</div> </div>
{{localize "CTHULHUETERNAL.Label.gear"}} : {{item.system.protection}}
<div class="controls"> <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.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> <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>

View File

@ -29,44 +29,47 @@
</div> </div>
<fieldset> <fieldset class="san">
<legend>{{localize "CTHULHUETERNAL.Label.SAN"}}</legend> <legend>{{localize "CTHULHUETERNAL.Label.SAN"}}</legend>
<div class="flexrow"> <div class="flexrow">
{{localize "CTHULHUETERNAL.Label.current"}} {{formField systemFields.san.fields.value <span class="label-field">{{localize "CTHULHUETERNAL.Label.current"}}</span>
value=system.san.value}} {{formField systemFields.san.fields.value value=system.san.value}}
{{localize "CTHULHUETERNAL.Label.max"}} {{formField systemFields.san.fields.max value=system.san.max <span class="label-field">{{localize "CTHULHUETERNAL.Label.max"}}</span>
rootId=partId disabled=true}} {{formField systemFields.san.fields.max value=system.san.max rootId=partId disabled=true}}
{{localize "CTHULHUETERNAL.Label.recovery"}} {{formField systemFields.san.fields.recovery <span class="label-field">{{localize "CTHULHUETERNAL.Label.recovery"}}</span>
value=system.san.recovery disabled=true}} {{formField systemFields.san.fields.recovery value=system.san.recovery disabled=true}}
<span data-tooltip='{{localize "CTHULHUETERNAL.Tooltip.sanBP"}}'>{{localize "CTHULHUETERNAL.Label.breakingPoint"}}</span> {{formField systemFields.san.fields.breakingPoint <span class="label-field" data-tooltip='{{localize "CTHULHUETERNAL.Tooltip.sanBP"}}'>{{localize
value=system.san.breakingPoint disabled=true}} "CTHULHUETERNAL.Label.breakingPoint"}}</span>
{{formField systemFields.san.fields.breakingPoint value=system.san.breakingPoint disabled=true}}
</div> </div>
<div class="flexrow"> <div class="flexrow">
{{localize "CTHULHUETERNAL.Label.violence"}} {{localize "CTHULHUETERNAL.Label.violence"}}
{{#each system.san.violence as |violence idx|}} {{#each system.san.violence as |violence idx|}}
<input type="checkbox" data-action="updateCheckboxArray" data-index="{{@index}}" data-name="violence" {{#if <input class="san-checkbox" type="checkbox" data-action="updateCheckboxArray" data-index="{{@index}}"
violence}} checked {{/if}}> data-name="violence" {{#if violence}} checked {{/if}}>
{{/each}} {{/each}}
</div> <span class="spacing"></span>
<div class="flexrow">
{{localize "CTHULHUETERNAL.Label.helplessness"}} {{localize "CTHULHUETERNAL.Label.helplessness"}}
{{#each system.san.helplessness as |helplessness idx|}} {{#each system.san.helplessness as |helplessness idx|}}
<input type="checkbox" data-action="updateCheckboxArray" data-index="{{@index}}" data-name="helplessness" <input class="san-checkbox" type="checkbox" data-action="updateCheckboxArray" data-index="{{@index}}"
{{#if helplessness}} checked {{/if}}> data-name="helplessness" {{#if helplessness}} checked {{/if}}>
{{/each}} {{/each}}
</div> </div>
</fieldset> </fieldset>
<fieldset>
<fieldset class="willpower">
<legend>{{localize "CTHULHUETERNAL.Label.willpower"}}</legend> <legend>{{localize "CTHULHUETERNAL.Label.willpower"}}</legend>
<div class="flexrow"> <div class="flexrow">
{{localize "CTHULHUETERNAL.Label.current"}}{{formField systemFields.wp.fields.value value=system.wp.value}} <span class="label-field">{{localize "CTHULHUETERNAL.Label.current"}}</span>
{{localize "CTHULHUETERNAL.Label.max"}}{{formField systemFields.wp.fields.max value=system.wp.max rootId=partId disabled=true}} {{formField systemFields.wp.fields.value value=system.wp.value}}
{{localize "CTHULHUETERNAL.Label.exhausted"}}{{formField systemFields.wp.fields.exhausted value=system.wp.exhausted }} <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> </div>
</fieldset> </fieldset>
</div> </div>
</div> </div>
</fieldset> </fieldset>
@ -74,37 +77,43 @@
<fieldset class="protagonist-characteristics protagonist-characteristics-{{ifThen isPlayMode 'play' 'edit'}}"> <fieldset class="protagonist-characteristics protagonist-characteristics-{{ifThen isPlayMode 'play' 'edit'}}">
<legend>{{localize "CTHULHUETERNAL.Label.characteristics"}}</legend> <legend>{{localize "CTHULHUETERNAL.Label.characteristics"}}</legend>
<div class="protagonist-characteristic" data-drag="true" data-drag-type="characteristic"> <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> <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 {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value
rootId=partId disabled=isPlayMode }} rootId=partId disabled=isPlayMode }}
{{mul system.characteristics.str.value 5}} {{mul system.characteristics.str.value 5}}
</div> </div>
<div class="protagonist-characteristic" data-drag="true" data-drag-type="characteristic"> <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> <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 {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value
rootId=partId disabled=isPlayMode }} rootId=partId disabled=isPlayMode }}
{{mul system.characteristics.dex.value 5}} {{mul system.characteristics.dex.value 5}}
</div> </div>
<div class="protagonist-characteristic" data-drag="true" data-drag-type="characteristic"> <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> <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 {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value
rootId=partId disabled=isPlayMode }} rootId=partId disabled=isPlayMode }}
{{mul system.characteristics.con.value 5}} {{mul system.characteristics.con.value 5}}
</div> </div>
<div class="protagonist-characteristic" data-drag="true" data-drag-type="characteristic"> <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> <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 {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value
rootId=partId disabled=isPlayMode }} rootId=partId disabled=isPlayMode }}
{{mul system.characteristics.int.value 5}} {{mul system.characteristics.int.value 5}}
</div> </div>
<div class="protagonist-characteristic" data-drag="true" data-drag-type="characteristic"> <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> <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 {{formField systemFields.characteristics.fields.pow.fields.value value=system.characteristics.pow.value
rootId=partId disabled=isPlayMode }} rootId=partId disabled=isPlayMode }}
{{mul system.characteristics.pow.value 5}} {{mul system.characteristics.pow.value 5}}
</div> </div>
<div class="protagonist-characteristic" data-drag="true" data-drag-type="characteristic"> <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> <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 {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value
rootId=partId disabled=isPlayMode }} rootId=partId disabled=isPlayMode }}
{{mul system.characteristics.cha.value 5}} {{mul system.characteristics.cha.value 5}}

View File

@ -0,0 +1,68 @@
<section class="tab protagonist-{{tab.id}} {{tab.cssClass}}" data-tab="{{tab.id}}" data-group="{{tab.group}}">
<fieldset>
<legend>{{localize "CTHULHUETERNAL.Label.bonds"}}{{#if isEditMode}}
<a class="action" data-tooltip="{{localize "CTHULHUETERNAL.Tooltip.addBond"}}" data-tooltip-direction="UP"><i class="fas fa-plus" data-action="createBond"></i></a>{{/if}}</legend>
<div class="bonds">
{{#each bonds as |item|}}
{{!log 'weapon' this}}
<div class="bond" 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="type">
{{item.system.bondType}}
</div>
<div class="level">
{{item.system.value}}
</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>
<legend>{{localize "CTHULHUETERNAL.Label.injuries"}}{{#if isEditMode}}
<a class="action" data-tooltip="{{localize "CTHULHUETERNAL.Tooltip.addInjury"}}" data-tooltip-direction="UP"><i class="fas fa-plus" data-action="createInjury"></i></a>{{/if}}</legend>
<div class="injuries">
{{#each injuries as |item|}}
<div class="injury" 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>
<legend>{{localize "CTHULHUETERNAL.Label.mentaldisorders"}}{{#if isEditMode}}
<a class="action" data-tooltip="{{localize "CTHULHUETERNAL.Tooltip.addMentalDisorder"}}" data-tooltip-direction="UP"><i class="fas fa-plus" data-action="createMentalDisorder"></i></a>{{/if}}</legend>
<div class="mentaldisorders">
{{#each mentaldisorders as |item|}}
{{!log 'armor' this}}
<div class="mentaldisorder" 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

@ -8,6 +8,13 @@
<legend>{{localize "CTHULHUETERNAL.Label.characteristic"}}</legend> <legend>{{localize "CTHULHUETERNAL.Label.characteristic"}}</legend>
{{/if}} {{/if}}
<div class="dialog-skill">{{rollItem.name}} : {{initialScore}}%</div> <div class="dialog-skill">{{rollItem.name}} : {{initialScore}}%</div>
{{#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>
<fieldSet class="dialog-modifier"> <fieldSet class="dialog-modifier">