diff --git a/.gitattributes b/.gitattributes index cc4f7d5..e9b9e29 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1 +1,2 @@ -packs/** binary \ No newline at end of file +packs/** binary +node_modules/ diff --git a/README.md b/README.md index ea411a8..7b16d84 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,11 @@ ##TODO - [ ] envoyer les spécialités utilisables au rollDialog -- [ ] refacto des template chat de roll -- [ ] gérer les dés de totems humains et adapté : couleur différente/double succès -- [ ] gérer les rerolls depuis chat(cf noc) -- [ ] repasser sur les différents itemTypes et sheets \ No newline at end of file +- [X] refacto des template chat de roll +- [X] gérer les dés de totems humains et adapté : couleur différente/double succès +update actor +- [X] gérer les rerolls depuis chat(cf noc) +- [X] gérer les rerolls après le jet en fonction du score d'effort et de la carac +- [ ] repasser sur les différents itemTypes et sheets +- [ ] update des reserves de sang-froids lors de jets +- [ ] gérer les rolls d'items +- [ ] ajout des domaines de prédilections \ No newline at end of file diff --git a/assets/images/archives/2-removebg-preview.png b/assets/images/archives/2-removebg-preview.png deleted file mode 100644 index aeb45c5..0000000 Binary files a/assets/images/archives/2-removebg-preview.png and /dev/null differ diff --git a/assets/images/archives/2047_KitDeSurvie_WIP_01-90_1-90_1476395034_copie-removebg-preview.png b/assets/images/archives/2047_KitDeSurvie_WIP_01-90_1-90_1476395034_copie-removebg-preview.png deleted file mode 100644 index 143e7f5..0000000 Binary files a/assets/images/archives/2047_KitDeSurvie_WIP_01-90_1-90_1476395034_copie-removebg-preview.png and /dev/null differ diff --git a/assets/images/archives/2047_KitDeSurvie_WIP_01-90_1-90_1476395041_copie-removebg-preview.png b/assets/images/archives/2047_KitDeSurvie_WIP_01-90_1-90_1476395041_copie-removebg-preview.png deleted file mode 100644 index 0aa433f..0000000 Binary files a/assets/images/archives/2047_KitDeSurvie_WIP_01-90_1-90_1476395041_copie-removebg-preview.png and /dev/null differ diff --git a/assets/images/archives/2334-removebg-preview.png b/assets/images/archives/2334-removebg-preview.png deleted file mode 100644 index c6302c8..0000000 Binary files a/assets/images/archives/2334-removebg-preview.png and /dev/null differ diff --git a/assets/images/archives/233456-removebg-preview.png b/assets/images/archives/233456-removebg-preview.png deleted file mode 100644 index a3c9e08..0000000 Binary files a/assets/images/archives/233456-removebg-preview.png and /dev/null differ diff --git a/assets/images/archives/2334567-removebg-preview.png b/assets/images/archives/2334567-removebg-preview.png deleted file mode 100644 index c4a30fa..0000000 Binary files a/assets/images/archives/2334567-removebg-preview.png and /dev/null differ diff --git a/assets/images/archives/23345678-removebg-preview.png b/assets/images/archives/23345678-removebg-preview.png deleted file mode 100644 index 51640eb..0000000 Binary files a/assets/images/archives/23345678-removebg-preview.png and /dev/null differ diff --git a/assets/images/archives/233456789-removebg-preview.png b/assets/images/archives/233456789-removebg-preview.png deleted file mode 100644 index 1b07920..0000000 Binary files a/assets/images/archives/233456789-removebg-preview.png and /dev/null differ diff --git a/assets/images/archives/2334567891-removebg-preview.png b/assets/images/archives/2334567891-removebg-preview.png deleted file mode 100644 index 02fe95d..0000000 Binary files a/assets/images/archives/2334567891-removebg-preview.png and /dev/null differ diff --git a/assets/images/archives/COMP_RARETER-removebg-preview.png b/assets/images/archives/COMP_RARETER-removebg-preview.png deleted file mode 100644 index cad31fd..0000000 Binary files a/assets/images/archives/COMP_RARETER-removebg-preview.png and /dev/null differ diff --git a/assets/images/archives/CONFIDENTIEL-removebg-preview.png b/assets/images/archives/CONFIDENTIEL-removebg-preview.png deleted file mode 100644 index f88ca6e..0000000 Binary files a/assets/images/archives/CONFIDENTIEL-removebg-preview.png and /dev/null differ diff --git a/assets/images/archives/DIFF-removebg-preview.png b/assets/images/archives/DIFF-removebg-preview.png deleted file mode 100644 index 7f56f27..0000000 Binary files a/assets/images/archives/DIFF-removebg-preview.png and /dev/null differ diff --git a/assets/images/archives/DOMMAGES__MATERIEL-removebg-preview.png b/assets/images/archives/DOMMAGES__MATERIEL-removebg-preview.png deleted file mode 100644 index f866a90..0000000 Binary files a/assets/images/archives/DOMMAGES__MATERIEL-removebg-preview.png and /dev/null differ diff --git a/assets/images/archives/IMPORTANTS.png b/assets/images/archives/IMPORTANTS.png deleted file mode 100644 index b78415a..0000000 Binary files a/assets/images/archives/IMPORTANTS.png and /dev/null differ diff --git a/assets/images/archives/INSTINCT.png b/assets/images/archives/INSTINCT.png deleted file mode 100644 index a5442f5..0000000 Binary files a/assets/images/archives/INSTINCT.png and /dev/null differ diff --git a/assets/images/archives/LES REUSSITES.png b/assets/images/archives/LES REUSSITES.png deleted file mode 100644 index e6b1afd..0000000 Binary files a/assets/images/archives/LES REUSSITES.png and /dev/null differ diff --git a/assets/images/archives/MATERIEL-removebg-preview.png b/assets/images/archives/MATERIEL-removebg-preview.png deleted file mode 100644 index 97dae9a..0000000 Binary files a/assets/images/archives/MATERIEL-removebg-preview.png and /dev/null differ diff --git a/assets/images/archives/OBJECTIFS.png b/assets/images/archives/OBJECTIFS.png deleted file mode 100644 index f5d6344..0000000 Binary files a/assets/images/archives/OBJECTIFS.png and /dev/null differ diff --git a/assets/images/archives/REACTION-removebg-preview.png b/assets/images/archives/REACTION-removebg-preview.png deleted file mode 100644 index 099d4e9..0000000 Binary files a/assets/images/archives/REACTION-removebg-preview.png and /dev/null differ diff --git a/assets/images/archives/RESERVES_EPUISER-removebg-preview.png b/assets/images/archives/RESERVES_EPUISER-removebg-preview.png deleted file mode 100644 index 14962ca..0000000 Binary files a/assets/images/archives/RESERVES_EPUISER-removebg-preview.png and /dev/null differ diff --git a/assets/images/archives/Sans_titre23-removebg-preview.png b/assets/images/archives/Sans_titre23-removebg-preview.png deleted file mode 100644 index a12e576..0000000 Binary files a/assets/images/archives/Sans_titre23-removebg-preview.png and /dev/null differ diff --git a/assets/images/archives/vermine2047_logo_jdr_roleplayinggame_02.jpg b/assets/images/archives/vermine2047_logo_jdr_roleplayinggame_02.jpg deleted file mode 100644 index ad7cf06..0000000 Binary files a/assets/images/archives/vermine2047_logo_jdr_roleplayinggame_02.jpg and /dev/null differ diff --git a/assets/images/archives/vide-removebg-preview.png b/assets/images/archives/vide-removebg-preview.png deleted file mode 100644 index 6707f1f..0000000 Binary files a/assets/images/archives/vide-removebg-preview.png and /dev/null differ diff --git a/css/vermine2047.css b/css/vermine2047.css index d6e2be9..cc2f59c 100644 --- a/css/vermine2047.css +++ b/css/vermine2047.css @@ -1 +1 @@ -@import"https://fonts.googleapis.com/css2?family=Roboto:wght@400;700&display=swap";@font-face{font-family:"DistressBlack";src:url("../assets/fonts/dcc_sharp_distress_black_by_dccanim.otf")}.sans-font{font-family:"DistressBlack",sans-serif}.app{box-shadow:0 0 20px #7e4444;color:#dfdfdf}.sheet .charname input{color:#191813;font-family:"DistressBlack",sans-serif;font-size:30px;font-style:normal}body.system-vermine2047 img#logo{content:url("/systems/vermine2047/assets/images/ui/logo_vermine_foundry.webp");height:auto}#chat-form textarea{background:url(/systems/vermine2047/assets/images/ui/box_background.webp) repeat}#chat-log .message{background:url(/systems/vermine2047/assets/images/ui/box_background.webp) repeat}img{border:none}ul.unstyled{list-style-type:none;padding:0;margin:0}ul.unstyled li{padding:0;margin:0}.padding-with-frieze{margin-left:18% !important;margin-right:10% !important}.padding-with-frieze li{max-width:100%}.w-full{width:100%}.mx-auto{margin-left:auto;margin-right:auto}.system-vermine2047 .sheet .window-content{background:url(/systems/vermine2047/assets/images/ui/box_background.webp);padding:0;overflow-y:hidden}.system-vermine2047 .dialog .window-content{background:url(/systems/vermine2047/assets/images/ui/fond_chat_box.webp);padding:.5rem;overflow-y:hidden}.window-content .row.smb{margin-bottom:.25rem}.window-content .row.mdb{margin-bottom:.5rem}.window-content .row.lgb{margin-bottom:1rem}.actor.sheet form .form{display:grid;grid-template-columns:minmax(230px, 1fr) 3fr;grid-template-rows:1fr;align-items:flex-start;height:100%;overflow:auto}.actor.sheet .form aside{grid-row:span 1/span 1;background-image:url(/systems/vermine2047/assets/images/ui/barre_laterale.webp);background-repeat:no-repeat;background-position:12% 50%;background-size:400%;height:100%;box-shadow:-20px 0px 100px rgba(0,0,0,.7098039216) inset}.actor.sheet .form main{box-shadow:10px 0px 100px rgba(0,0,0,.7098039216) inset;padding-left:1rem;grid-row:span 1/span 1;height:100%}.actor.sheet .form aside .image-wrapper{margin:1rem auto 3rem;text-align:center}.actor.sheet .form aside .image-wrapper img{width:170px;height:145px}.actor.sheet .form aside .paper{margin-top:1rem;height:350px}.actor.sheet .form aside .second-paper{margin-top:4rem;height:150px}.actor.sheet .form h3{font-family:"DistressBlack",sans-serif;text-align:center;text-transform:uppercase;color:#4e564c;font-size:1.7rem;border-bottom:none;margin:0}.actor.sheet .form h4,.item.sheet .form h4{font-family:"DistressBlack",sans-serif;font-size:1.4em;text-transform:uppercase;margin:0 0 .2rem}.actor.sheet .form .characteristics h4{font-size:1.25rem;margin-top:0 .1rem}.actor.sheet .form .tab.totem h4,.actor.sheet .form .tab.equipment h4,.actor.sheet .form .tab.stories h4{margin-top:.875rem}.system-vermine2047 .char-header{font-family:"DistressBlack",sans-serif}.system-vermine2047 .char-header section{display:flex;flex-direction:column;align-items:flex-start;justify-content:flex-start}.system-vermine2047 .char-header h1.char-name,.system-vermine2047 .char-vermine2047{border-bottom:none;line-height:2rem}.system-vermine2047 .char-vermine2047{font-size:1.5rem}.system-vermine2047 .sheet.actor form{width:100%;height:100%;overflow:hidden}.system-vermine2047 .sheet.actor form input[type=text],.system-vermine2047 .sheet.actor form input[type=number]{width:calc(100% - 2px);height:calc(100% - 2px);background:none;padding:0;margin:1px 0;color:#333;border:1px solid rgba(0,0,0,0)}.system-vermine2047 .sheet.actor form input[type=text].hexa,.system-vermine2047 .sheet.actor form input[type=number].hexa{clip-path:polygon(25% 0%, 75% 0%, 100% 50%, 75% 100%, 25% 100%, 0% 50%);background:radial-gradient(circle, rgba(255, 255, 255, 0.425) 0%, rgba(0, 0, 0, 0.288) 100%);height:unset;max-width:1.5rem;aspect-ratio:1/1;color:#000}.system-vermine2047 .sheet.actor form input[type=text]:hover:not(:disabled),.system-vermine2047 .sheet.actor form input[type=text]:focus,.system-vermine2047 .sheet.actor form select:hover:not(:disabled),.system-vermine2047 .sheet.actor form select:focus,.system-vermine2047 .sheet.actor form input[type=number]:hover:not(:disabled),.system-vermine2047 .sheet.actor form input[type=number]:focus,.system-vermine2047 .sheet.actor form textarea:hover:not(:disabled),.system-vermine2047 .sheet.actor form textarea:focus{box-shadow:0 0 10px #005a3c inset}.system-vermine2047 .sheet.actor form select{font-size:.6rem;border:none;appearance:none;min-width:fit-content;max-width:fit-content;padding:0 .2rem;margin:0 .2rem;cursor:help}.system-vermine2047 .sheet.actor form label{display:block}.system-vermine2047 .sheet.actor form .mce-panel span{display:inherit}.system-vermine2047 .sheet.actor form.editable .rollable:hover,.system-vermine2047 .sheet.actor form.editable a:hover{color:#000;text-shadow:0 5px 5px #1fa832;cursor:pointer}.system-vermine2047 .sheet.actor form .sheet-tabs{font-weight:500;height:30px}.system-vermine2047 .sheet.actor form .sheet-tabs>.list-row{line-height:24px;padding-top:3px;font-size:2rem;text-align:center}.system-vermine2047 .sheet.actor form .sheet-tabs>.list-row:last-of-type{padding-right:4px}.system-vermine2047 .sheet.actor form .sheet-tabs>.list-row.active{color:#000;font-weight:700}.system-vermine2047 .sheet.actor form .tab{flex:1;overflow:hidden}.system-vermine2047 .sheet.actor form .tag-legacy{float:left;margin:0 2px 2px 0;padding:0 3px;font-size:var(--font-size-10);line-height:16px;border:1px solid #999;border-radius:3px;white-space:normal;font-weight:500}.system-vermine2047 .sheet.actor,.system-vermine2047 .sheet.actor .window-content{min-width:690px}.system-vermine2047 .sheet.actor .sidebar{width:230px;min-height:518px}.system-vermine2047 .sheet.actor .floatright{float:right}.system-vermine2047 .sheet.actor .sheet-upper{height:268px}.system-vermine2047 .sheet.actor .sheet-upper .sheet-header{height:48px}.system-vermine2047 .sheet.actor .sheet-upper .sheet-profile,.system-vermine2047 .sheet.actor .sheet-upper .sheet-showcase{height:220px}.system-vermine2047 .sheet.actor .sheet-content{padding:4px}.system-vermine2047 .sheet.actor .sheet-sidebar{height:calc(100% - 48px);display:flex;flex-direction:column;flex-wrap:nowrap;overflow-x:hidden;overflow-y:auto}.system-vermine2047 .sheet.actor .sheet-sidebar>*{flex:1}.system-vermine2047 .sheet.actor .sheet-sidebar .sidebar-summary{overflow-y:hidden}.system-vermine2047 .sheet.actor.npc-sheet .sheet-upper{height:220px}.system-vermine2047 .sheet.actor.npc-sheet .sheet-upper .sheet-showcase{height:172px}.system-vermine2047 .sheet.actor.npc-sheet .sheet-lower{height:calc(100% - 220px - 32px)}.system-vermine2047 .sheet.actor .sheet-navigation{border-top:1px solid var(--secondary-background);border-bottom:1px solid var(--primary-background)}.system-vermine2047 .sheet.actor .sheet-navigation .sheet-tabs>.list-row{border-radius:5px 5px 0 0}.system-vermine2047 .sheet.actor .sheet-navigation .sheet-tabs>.list-row.active{border:1px solid #666;border-bottom:none;background:var(--primary-background);color:#fff;text-shadow:none;color:#000;text-shadow:0 0 10px #00005a;cursor:pointer}.actor.sheet nav.sheet-navigation{display:inline-flex;justify-content:space-around;align-items:center;height:54px;background:url(../assets/images/ui/barre_haut.webp) no-repeat right top;background-size:100% 100%;width:100%;position:relative;padding-right:4rem;font-size:1.4rem}.actor.sheet nav.sheet-navigation.tabs .item{height:2.4rem;display:inline-block;z-index:1;transition:all .1s ease-out;color:#606060;box-shadow:0px 0px 0px rgba(0,0,0,.404)}.actor.sheet nav.sheet-navigation.tabs .item:hover,.actor.sheet nav.sheet-navigation.tabs .item.active{color:#000;text-shadow:0 5px 5px #1fa832;cursor:pointer}.actor.sheet nav.sheet-navigation.tabs .item:hover{text-shadow:0 5px 5px rgba(30,82,37,.6039215686)}.system-vermine2047 .sheet.actor form nav.sheet-navigation.sheet-tabs{height:54px}.system-vermine2047 .sheet.actor .ability{padding-right:.6rem;font-size:.8rem;border-bottom:1px solid rgba(170,170,152,.664);box-shadow:0px 0px 15px rgba(128,128,128,0) inset;transition:.2s;position:relative}.system-vermine2047 .sheet.actor .ability:hover{box-shadow:0px 0px 15px gray inset}.system-vermine2047 .sheet.actor .ability label{min-width:fit-content}.system-vermine2047 .sheet.actor .ability span{max-width:fit-content;margin:0 1rem;flex:.5}.system-vermine2047 .sheet.actor .ability span.hexa{text-align:center;clip-path:polygon(25% 0%, 75% 0%, 100% 50%, 75% 100%, 25% 100%, 0% 50%);background:radial-gradient(circle, rgba(255, 255, 255, 0.425) 0%, rgba(0, 0, 0, 0.288) 100%);max-height:1.2rem;max-width:1.2rem;aspect-ratio:1/1;color:#000;vertical-align:bottom}.system-vermine2047 .sheet.actor .ability div.specialties{position:absolute;bottom:0;font-size:.7rem}.system-vermine2047 .sheet.actor .ability .skill-dots{height:100%;align-self:center;flex:1.5}.system-vermine2047 .sheet.actor .ability .skill-dots>div{max-width:.7rem;height:.7rem;aspect-ratio:1/1;border-radius:50%;font-weight:700;text-align:center;padding-bottom:.2rem;font-style:oblique;align-self:flex-start}.system-vermine2047 .sheet.actor .ability .skill-dots>div.dice-pool-dot{background:radial-gradient(circle, rgb(94, 90, 77) 25%, rgb(0, 0, 0) 100%);max-width:.7rem;aspect-ratio:1/1;border-radius:50%}.system-vermine2047 .sheet.actor .ability .skill-dots>div.dice-reroll-dot{background:radial-gradient(circle, rgb(187, 182, 165) 25%, rgb(0, 0, 0) 100%)}.vermine2047.sheet.actor input[type=radio]::after{content:" ";display:block;width:.8rem;height:.8rem;background:radial-gradient(circle, rgb(217, 214, 204) 0%, rgb(217, 214, 204) 40%, rgb(85, 85, 85) 60%);border-radius:50%}.vermine2047.sheet.actor input[type=radio].checked::after{content:" ";display:block;width:.8rem;height:.8rem;background:radial-gradient(circle, rgb(75, 74, 74) 0%, rgb(27, 39, 28) 60%);border-radius:50%}.window-app{font-family:"Roboto",sans-serif;box-shadow:0px 0px 30px #454e2c}.rollable:hover,.rollable:focus{color:#000;text-shadow:0 0 10px red;cursor:pointer}.grid,.grid-2col{display:grid;grid-column:span 2/span 2;grid-template-columns:repeat(2, minmax(0, 1fr));gap:10px;margin:5px 0;padding:0}.grid-3col{grid-column:span 3/span 3;grid-template-columns:repeat(3, minmax(0, 1fr))}.grid-4col{grid-column:span 4/span 4;grid-template-columns:repeat(4, minmax(0, 1fr))}.grid-5col{grid-column:span 5/span 5;grid-template-columns:repeat(5, minmax(0, 1fr))}.grid-6col{grid-column:span 6/span 6;grid-template-columns:repeat(6, minmax(0, 1fr))}.grid-7col{grid-column:span 7/span 7;grid-template-columns:repeat(7, minmax(0, 1fr))}.grid-8col{grid-column:span 8/span 8;grid-template-columns:repeat(8, minmax(0, 1fr))}.grid-9col{grid-column:span 9/span 9;grid-template-columns:repeat(9, minmax(0, 1fr))}.grid-10col{grid-column:span 10/span 10;grid-template-columns:repeat(10, minmax(0, 1fr))}.grid-11col{grid-column:span 11/span 11;grid-template-columns:repeat(11, minmax(0, 1fr))}.grid-12col{grid-column:span 12/span 12;grid-template-columns:repeat(12, minmax(0, 1fr))}.grid-start-2{grid-column-start:2}.grid-start-3{grid-column-start:3}.grid-start-4{grid-column-start:4}.grid-start-5{grid-column-start:5}.grid-start-6{grid-column-start:6}.grid-start-7{grid-column-start:7}.grid-start-8{grid-column-start:8}.grid-start-9{grid-column-start:9}.grid-start-10{grid-column-start:10}.grid-start-11{grid-column-start:11}.grid-start-12{grid-column-start:12}.grid-span-2{grid-column-end:span 2}.grid-span-3{grid-column-end:span 3}.grid-span-4{grid-column-end:span 4}.grid-span-5{grid-column-end:span 5}.grid-span-6{grid-column-end:span 6}.grid-span-7{grid-column-end:span 7}.grid-span-8{grid-column-end:span 8}.grid-span-9{grid-column-end:span 9}.grid-span-10{grid-column-end:span 10}.grid-span-11{grid-column-end:span 11}.grid-span-12{grid-column-end:span 12}.flex-group-center,.flex-group-left,.flex-group-right{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;text-align:center}.flex-group-left{-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;text-align:left}.flex-group-right{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;text-align:right}.flex-align-left{align-items:flex-start}.flex-align-right{align-items:flex-end}.gap-xs{gap:2px}.gap-sm{gap:4px}.gap-md{gap:8px}.gap-lg{gap:16px}.flexshrink{-webkit-box-flex:0;-ms-flex:0;flex:0}.flex-between{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.flexlarge{-webkit-box-flex:2;-ms-flex:2;flex:2}.align-left{-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;text-align:left}.align-right{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;text-align:right}.align-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;text-align:center}.system-vermine2047 .item-form{font-family:"Roboto",sans-serif}.system-vermine2047 .sheet-header{-webkit-box-flex:0;-ms-flex:0 auto;flex:0 auto;overflow:hidden;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;margin-bottom:10px}.system-vermine2047 .sheet-header .profile-img{-webkit-box-flex:0;-ms-flex:0 0 100px;flex:0 0 100px;height:100px;margin-right:10px}.system-vermine2047 .sheet-header .header-fields{-webkit-box-flex:1;-ms-flex:1;flex:1}.system-vermine2047 .sheet-header h1.charname{height:50px;padding:0px;margin:5px 0;border-bottom:0}.system-vermine2047 .sheet-header h1.charname input{width:100%;height:100%;margin:0}.system-vermine2047 .sheet-tabs{-webkit-box-flex:0;-ms-flex:0;flex:0}.system-vermine2047 .sheet-body .tab,.system-vermine2047 .sheet-body .tab .editor{height:100%;min-width:100%}.system-vermine2047 .sheet-body .tab .editor{min-height:75px;margin-bottom:1rem;min-width:100%}.system-vermine2047 .sheet-body .tab .editor .editor-content{min-width:100%;min-height:3rem}.system-vermine2047 editor:hover .editor-edit{display:block}.system-vermine2047 .tox{min-height:25vh}.system-vermine2047 .tox .tox-editor-container{background:#fff}.system-vermine2047 .tox .tox-edit-area{padding:0 8px}.system-vermine2047 .resource-label{font-weight:bold}.system-vermine2047 .items-header{height:28px;margin:2px 0;padding:0;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:rgba(0,0,0,.05);border:2px groove #eeede0;font-weight:bold}.system-vermine2047 .items-header>*{font-size:14px;text-align:center}.system-vermine2047 .items-header .item-name{font-weight:bold;padding-left:5px;text-align:left;display:-webkit-box;display:-ms-flexbox;display:flex}.system-vermine2047 .items-list{list-style:none;margin:0;padding:0;overflow-y:auto;scrollbar-width:thin;color:#444}.system-vermine2047 .items-list .item-list{list-style:none;margin:0;padding:0}.system-vermine2047 .items-list .item-name{-webkit-box-flex:2;-ms-flex:2;flex:2;margin:0;overflow:hidden;font-size:13px;text-align:left;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex}.system-vermine2047 .items-list .item-name h3,.system-vermine2047 .items-list .item-name h4{margin:0;white-space:nowrap;overflow-x:hidden}.system-vermine2047 .items-list .item-controls{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.system-vermine2047 .items-list .item-controls a{font-size:12px;text-align:center;margin:0 6px}.system-vermine2047 .items-list .item{-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:0 2px;border-bottom:1px solid #c9c7b8}.system-vermine2047 .items-list .item:last-child{border-bottom:none}.system-vermine2047 .items-list .item .item-name{color:#191813}.system-vermine2047 .items-list .item .item-name .item-image{-webkit-box-flex:0;-ms-flex:0 0 30px;flex:0 0 30px;height:30px;background-size:30px;border:none;margin-right:5px}.system-vermine2047 .items-list .item-prop{text-align:center;border-left:1px solid #c9c7b8;border-right:1px solid #c9c7b8;font-size:12px}.system-vermine2047 .items-list .items-header{height:28px;margin:2px 0;padding:0;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:rgba(0,0,0,.05);border:2px groove #eeede0;font-weight:bold}.system-vermine2047 .items-list .items-header>*{font-size:12px;text-align:center}.system-vermine2047 .items-list .items-header .item-name{padding-left:5px;text-align:left}.system-vermine2047 .item-formula{-webkit-box-flex:0;-ms-flex:0 0 200px;flex:0 0 200px;padding:0 8px}.system-vermine2047 .effects .item .effect-source,.system-vermine2047 .effects .item .effect-duration,.system-vermine2047 .effects .item .effect-controls{text-align:center;border-left:1px solid #c9c7b8;border-right:1px solid #c9c7b8;font-size:12px}.system-vermine2047 .effects .item .effect-controls{border:none}.chat-message .message-header{line-height:20px;color:#fff;text-shadow:0px 0px 5px #000;background:rgba(25,24,19,.368627451)}span.game-mode{font-family:"DistressBlack",sans-serif;position:absolute;margin-left:auto;color:rgba(0,0,0,0);top:1rem;z-index:900;width:55%;text-align:center;text-transform:uppercase;font-weight:900;background:linear-gradient(180deg, rgba(255, 255, 255, 0.767) 0%, rgba(0, 0, 0, 0.61) 17%, rgba(0, 0, 0, 0.548) 19%, rgba(222, 255, 221, 0.575) 24%, rgba(255, 255, 255, 0.637) 43%, rgba(0, 0, 0, 0.486) 47%, rgba(254, 255, 254, 0.466) 50%, rgba(0, 0, 0, 0.699) 63%, rgba(134, 160, 137, 0.479) 64%, rgba(213, 248, 210, 0.493) 100%);background-clip:text}span.game-mode#game-mode-1{color:rgba(235,218,143,.8)}span.game-mode#game-mode-2{color:#83f883}span.game-mode#game-mode-3{color:rgba(245,124,124,.8)} \ No newline at end of file +@import"https://fonts.googleapis.com/css2?family=Roboto:wght@400;700&display=swap";@font-face{font-family:"DistressBlack";src:url("../assets/fonts/dcc_sharp_distress_black_by_dccanim.otf")}.sans-font{font-family:"DistressBlack",sans-serif}.app{box-shadow:0 0 20px #7e4444;color:#dfdfdf}.sheet .charname input{color:#191813;font-family:"DistressBlack",sans-serif;font-size:30px;font-style:normal}body.system-vermine2047 img#logo{content:url("/systems/vermine2047/assets/images/ui/logo_vermine_foundry.webp");height:auto}#chat-form textarea{background:url(/systems/vermine2047/assets/images/ui/box_background.webp) repeat}#chat-log .message{background:url(/systems/vermine2047/assets/images/ui/box_background.webp) repeat}img{border:none}ul.unstyled{list-style-type:none;padding:0;margin:0}ul.unstyled li{padding:0;margin:0}.padding-with-frieze{margin-left:18% !important;margin-right:10% !important}.padding-with-frieze li{max-width:100%}.w-full{width:100%}.mx-auto{margin-left:auto;margin-right:auto}.system-vermine2047 .sheet .window-content{background:url(/systems/vermine2047/assets/images/ui/box_background.webp);padding:0;overflow-y:hidden}.system-vermine2047 .dialog .window-content{background:url(/systems/vermine2047/assets/images/ui/fond_chat_box.webp);padding:.5rem;overflow-y:hidden}.window-content .row.smb{margin-bottom:.25rem}.window-content .row.mdb{margin-bottom:.5rem}.window-content .row.lgb{margin-bottom:1rem}.actor.sheet form .form{display:grid;grid-template-columns:minmax(230px, 1fr) 3fr;grid-template-rows:1fr;align-items:flex-start;height:100%;overflow:auto}.actor.sheet .form aside{grid-row:span 1/span 1;background-image:url(/systems/vermine2047/assets/images/ui/barre_laterale.webp);background-repeat:no-repeat;background-size:cover;height:100%;width:240px;padding:0 .3rem;box-shadow:-20px 0px 100px rgba(0,0,0,.7098039216) inset}.actor.sheet .form aside .major-totem{position:relative}.actor.sheet .form aside .major-totem h4{position:absolute;transform:rotate(-8deg);opacity:.7;transition:.2s}.actor.sheet .form aside .major-totem:hover h4{opacity:1}.actor.sheet .form main{box-shadow:10px 0px 100px rgba(0,0,0,.7098039216) inset;padding-left:1rem;grid-row:span 1/span 1;height:100%}.actor.sheet .form aside .image-wrapper{text-align:center}.actor.sheet .form aside .image-wrapper img{width:170px;height:145px}.actor.sheet .form aside .paper{margin-top:1rem;height:350px}.actor.sheet .form aside .second-paper{margin-top:4rem;height:150px}.actor.sheet .form h3{font-family:"DistressBlack",sans-serif;text-align:center;text-transform:uppercase;color:#4e564c;font-size:1.7rem;border-bottom:none;margin:0}.actor.sheet .form h4,.item.sheet .form h4{font-family:"DistressBlack",sans-serif;font-size:1.4em;text-transform:uppercase;margin:0 0 .2rem}.actor.sheet .form .characteristics h4{font-size:1.25rem;margin-top:0 .1rem}.actor.sheet .form .tab.totem h4,.actor.sheet .form .tab.equipment h4,.actor.sheet .form .tab.stories h4{margin-top:.875rem}.system-vermine2047 .char-header{font-family:"DistressBlack",sans-serif}.system-vermine2047 .char-header section{display:flex;flex-direction:column;align-items:flex-start;justify-content:flex-start}.system-vermine2047 .char-header h1.char-name,.system-vermine2047 .char-vermine2047{border-bottom:none;line-height:2rem}.system-vermine2047 .char-vermine2047{font-size:1.5rem}.system-vermine2047 .sheet.actor form{width:100%;height:100%;overflow:hidden}.system-vermine2047 .sheet.actor form div.hexa{clip-path:polygon(25% 0%, 75% 0%, 100% 50%, 75% 100%, 25% 100%, 0% 50%);background:radial-gradient(circle, rgba(255, 255, 255, 0.425) 0%, rgba(0, 0, 0, 0.288) 100%);height:unset;max-width:1.5rem;aspect-ratio:1/1;color:#000;transform:rotate(90deg);transition:.2s;margin:.2rem}.system-vermine2047 .sheet.actor form div.hexa:hover{background:radial-gradient(circle, rgba(255, 255, 255, 0.425) 0%, rgba(0, 0, 0, 0.288) 100%)}.system-vermine2047 .sheet.actor form div.hexa input{opacity:1;min-width:100%;min-height:100%;opacity:0}.system-vermine2047 .sheet.actor form div.hexa.checked{background:radial-gradient(circle, rgb(0, 0, 0) 0%, rgba(0, 0, 0, 0.288) 100%)}.system-vermine2047 .sheet.actor form div.hexa.checked:hover{background:radial-gradient(circle, rgb(43, 43, 43) 0%, rgba(0, 0, 0, 0.288) 100%)}.system-vermine2047 .sheet.actor form div.hexa.unavailable{background:radial-gradient(circle, rgba(66, 15, 15, 0.664) 0%, rgba(131, 70, 70, 0.432) 100%)}.system-vermine2047 .sheet.actor div.minor-totems{position:relative;background-color:rgba(146,156,111,.5215686275)}.system-vermine2047 .sheet.actor div.minor-totems h5{position:absolute;top:0}.system-vermine2047 .sheet.actor div.minor-totems h5 img{max-width:2rem;position:absolute;bottom:-2rem}.system-vermine2047 .sheet.actor div.minor-totems .totem-dice .human-dice,.system-vermine2047 .sheet.actor div.minor-totems .totem-dice .adapted-dice{display:flex;flex-direction:row;margin-left:2rem}.system-vermine2047 .sheet.actor div.minor-totems .totem-dice .human-dice i,.system-vermine2047 .sheet.actor div.minor-totems .totem-dice .adapted-dice i{padding-top:.5rem;color:#064930}.system-vermine2047 .sheet.actor div.minor-totems .totem-dice .adapted-dice{justify-content:flex-end;margin-left:0;margin-right:2rem;transform:rotate(180deg)}.system-vermine2047 .sheet.actor div.minor-totems .totem-dice .adapted-dice i{transform:rotate(180deg);padding-top:.5rem;color:#553402}.system-vermine2047 .sheet.actor div.minor-totems .human{left:0}.system-vermine2047 .sheet.actor div.minor-totems .human img{left:0}.system-vermine2047 .sheet.actor div.minor-totems .adapted{right:0}.system-vermine2047 .sheet.actor div.minor-totems .adapted img{right:0}.system-vermine2047 .sheet.actor form input[type=text],.system-vermine2047 .sheet.actor form input[type=number]{width:calc(100% - 2px);height:calc(100% - 2px);background:none;padding:0;margin:1px 0;color:#333;border:1px solid rgba(0,0,0,0)}.system-vermine2047 .sheet.actor form input[type=text].hexa,.system-vermine2047 .sheet.actor form input[type=number].hexa{clip-path:polygon(25% 0%, 75% 0%, 100% 50%, 75% 100%, 25% 100%, 0% 50%);background:radial-gradient(circle, rgba(255, 255, 255, 0.425) 0%, rgba(0, 0, 0, 0.288) 100%);height:unset;max-width:1.5rem;aspect-ratio:1/1;color:#000}.system-vermine2047 .sheet.actor form input[type=text]:hover:not(:disabled),.system-vermine2047 .sheet.actor form input[type=text]:focus,.system-vermine2047 .sheet.actor form select:hover:not(:disabled),.system-vermine2047 .sheet.actor form select:focus,.system-vermine2047 .sheet.actor form input[type=number]:hover:not(:disabled),.system-vermine2047 .sheet.actor form input[type=number]:focus,.system-vermine2047 .sheet.actor form textarea:hover:not(:disabled),.system-vermine2047 .sheet.actor form textarea:focus{box-shadow:0 0 10px #005a3c inset}.system-vermine2047 .sheet.actor form select{font-size:.6rem;border:none;appearance:none;min-width:fit-content;max-width:fit-content;padding:0 .2rem;margin:0 .2rem;cursor:help}.system-vermine2047 .sheet.actor form label{display:block}.system-vermine2047 .sheet.actor form .mce-panel span{display:inherit}.system-vermine2047 .sheet.actor form.editable .rollable:hover,.system-vermine2047 .sheet.actor form.editable a:hover{color:#000;text-shadow:0 5px 5px #1fa832;cursor:pointer}.system-vermine2047 .sheet.actor form .sheet-tabs{font-weight:500;height:30px}.system-vermine2047 .sheet.actor form .sheet-tabs>.list-row{line-height:24px;padding-top:3px;font-size:2rem;text-align:center}.system-vermine2047 .sheet.actor form .sheet-tabs>.list-row:last-of-type{padding-right:4px}.system-vermine2047 .sheet.actor form .sheet-tabs>.list-row.active{color:#000;font-weight:700}.system-vermine2047 .sheet.actor form .tab{flex:1;overflow:hidden}.system-vermine2047 .sheet.actor form .tag-legacy{float:left;margin:0 2px 2px 0;padding:0 3px;font-size:var(--font-size-10);line-height:16px;border:1px solid #999;border-radius:3px;white-space:normal;font-weight:500}.system-vermine2047 .sheet.actor,.system-vermine2047 .sheet.actor .window-content{min-width:690px}.system-vermine2047 .sheet.actor .sidebar{width:230px;min-height:518px}.system-vermine2047 .sheet.actor .floatright{float:right}.system-vermine2047 .sheet.actor .sheet-upper{height:268px}.system-vermine2047 .sheet.actor .sheet-upper .sheet-header{height:48px}.system-vermine2047 .sheet.actor .sheet-upper .sheet-profile,.system-vermine2047 .sheet.actor .sheet-upper .sheet-showcase{height:220px}.system-vermine2047 .sheet.actor .sheet-content{padding:4px}.system-vermine2047 .sheet.actor .sheet-sidebar{height:calc(100% - 48px);display:flex;flex-direction:column;flex-wrap:nowrap;overflow-x:hidden;overflow-y:auto}.system-vermine2047 .sheet.actor .sheet-sidebar>*{flex:1}.system-vermine2047 .sheet.actor .sheet-sidebar .sidebar-summary{overflow-y:hidden}.system-vermine2047 .sheet.actor.npc-sheet .sheet-upper{height:220px}.system-vermine2047 .sheet.actor.npc-sheet .sheet-upper .sheet-showcase{height:172px}.system-vermine2047 .sheet.actor.npc-sheet .sheet-lower{height:calc(100% - 220px - 32px)}.system-vermine2047 .sheet.actor .sheet-navigation{border-top:1px solid var(--secondary-background);border-bottom:1px solid var(--primary-background)}.system-vermine2047 .sheet.actor .sheet-navigation .sheet-tabs>.list-row{border-radius:5px 5px 0 0}.system-vermine2047 .sheet.actor .sheet-navigation .sheet-tabs>.list-row.active{border:1px solid #666;border-bottom:none;background:var(--primary-background);color:#fff;text-shadow:none;color:#000;text-shadow:0 0 10px #00005a;cursor:pointer}.actor.sheet nav.sheet-navigation{display:inline-flex;justify-content:space-around;align-items:center;height:54px;background:url(../assets/images/ui/barre_haut.webp) no-repeat right top;background-size:100% 100%;width:100%;position:relative;padding-right:4rem;font-size:1.4rem}.actor.sheet nav.sheet-navigation.tabs .item{height:2.4rem;display:inline-block;z-index:1;transition:all .1s ease-out;color:#606060;box-shadow:0px 0px 0px rgba(0,0,0,.404)}.actor.sheet nav.sheet-navigation.tabs .item:hover,.actor.sheet nav.sheet-navigation.tabs .item.active{color:#000;text-shadow:0 5px 5px #1fa832;cursor:pointer}.actor.sheet nav.sheet-navigation.tabs .item:hover{text-shadow:0 5px 5px rgba(30,82,37,.6039215686)}.system-vermine2047 .sheet.actor form nav.sheet-navigation.sheet-tabs{height:54px}.system-vermine2047 .sheet.actor .ability{padding-right:.6rem;font-size:.8rem;border-bottom:1px solid rgba(170,170,152,.664);box-shadow:0px 0px 15px rgba(128,128,128,0) inset;transition:.2s;position:relative}.system-vermine2047 .sheet.actor .ability:hover{box-shadow:0px 0px 15px gray inset}.system-vermine2047 .sheet.actor .ability label{min-width:fit-content}.system-vermine2047 .sheet.actor .ability span{max-width:fit-content;margin:0 1rem;flex:.5}.system-vermine2047 .sheet.actor .ability .hexa{text-align:center;clip-path:polygon(25% 0%, 75% 0%, 100% 50%, 75% 100%, 25% 100%, 0% 50%);background:radial-gradient(circle, rgba(255, 255, 255, 0.425) 0%, rgba(0, 0, 0, 0.288) 100%);max-height:1.2rem;max-width:1.2rem;aspect-ratio:1/1;color:#000;vertical-align:center}.system-vermine2047 .sheet.actor .ability .hexa.checked{background:radial-gradient(circle, rgb(0, 0, 0) 0%, rgba(0, 0, 0, 0.288) 100%)}.system-vermine2047 .sheet.actor .ability div.specialties{position:absolute;bottom:0;font-size:.7rem}.system-vermine2047 .sheet.actor .ability .skill-dots{height:100%;align-self:center;flex:1.5}.system-vermine2047 .sheet.actor .ability .skill-dots>div{max-width:.7rem;height:.7rem;aspect-ratio:1/1;border-radius:50%;font-weight:700;text-align:center;padding-bottom:.2rem;font-style:oblique;align-self:flex-start}.system-vermine2047 .sheet.actor .ability .skill-dots>div.dice-pool-dot{background:radial-gradient(circle, rgb(94, 90, 77) 25%, rgb(0, 0, 0) 100%);max-width:.7rem;aspect-ratio:1/1;border-radius:50%}.system-vermine2047 .sheet.actor .ability .skill-dots>div.dice-reroll-dot{background:radial-gradient(circle, rgb(187, 182, 165) 25%, rgb(0, 0, 0) 100%)}.vermine2047.sheet.actor input[type=radio]::after{content:" ";display:block;width:.8rem;height:.8rem;background:radial-gradient(circle, rgb(217, 214, 204) 0%, rgb(217, 214, 204) 40%, rgb(85, 85, 85) 60%);border-radius:50%}.vermine2047.sheet.actor input[type=radio].checked::after{content:" ";display:block;width:.8rem;height:.8rem;background:radial-gradient(circle, rgb(75, 74, 74) 0%, rgb(27, 39, 28) 60%);border-radius:50%}.window-app{font-family:"Roboto",sans-serif;box-shadow:0px 0px 30px #454e2c}.rollable:hover,.rollable:focus{color:#000;text-shadow:0 0 10px red;cursor:pointer}.grid,.grid-2col{display:grid;grid-column:span 2/span 2;grid-template-columns:repeat(2, minmax(0, 1fr));gap:10px;margin:5px 0;padding:0}.grid-3col{grid-column:span 3/span 3;grid-template-columns:repeat(3, minmax(0, 1fr))}.grid-4col{grid-column:span 4/span 4;grid-template-columns:repeat(4, minmax(0, 1fr))}.grid-5col{grid-column:span 5/span 5;grid-template-columns:repeat(5, minmax(0, 1fr))}.grid-6col{grid-column:span 6/span 6;grid-template-columns:repeat(6, minmax(0, 1fr))}.grid-7col{grid-column:span 7/span 7;grid-template-columns:repeat(7, minmax(0, 1fr))}.grid-8col{grid-column:span 8/span 8;grid-template-columns:repeat(8, minmax(0, 1fr))}.grid-9col{grid-column:span 9/span 9;grid-template-columns:repeat(9, minmax(0, 1fr))}.grid-10col{grid-column:span 10/span 10;grid-template-columns:repeat(10, minmax(0, 1fr))}.grid-11col{grid-column:span 11/span 11;grid-template-columns:repeat(11, minmax(0, 1fr))}.grid-12col{grid-column:span 12/span 12;grid-template-columns:repeat(12, minmax(0, 1fr))}.grid-start-2{grid-column-start:2}.grid-start-3{grid-column-start:3}.grid-start-4{grid-column-start:4}.grid-start-5{grid-column-start:5}.grid-start-6{grid-column-start:6}.grid-start-7{grid-column-start:7}.grid-start-8{grid-column-start:8}.grid-start-9{grid-column-start:9}.grid-start-10{grid-column-start:10}.grid-start-11{grid-column-start:11}.grid-start-12{grid-column-start:12}.grid-span-2{grid-column-end:span 2}.grid-span-3{grid-column-end:span 3}.grid-span-4{grid-column-end:span 4}.grid-span-5{grid-column-end:span 5}.grid-span-6{grid-column-end:span 6}.grid-span-7{grid-column-end:span 7}.grid-span-8{grid-column-end:span 8}.grid-span-9{grid-column-end:span 9}.grid-span-10{grid-column-end:span 10}.grid-span-11{grid-column-end:span 11}.grid-span-12{grid-column-end:span 12}.flex-group-center,.flex-group-left,.flex-group-right{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;text-align:center}.flex-group-left{-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;text-align:left}.flex-group-right{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;text-align:right}.flex-align-left{align-items:flex-start}.flex-align-right{align-items:flex-end}.gap-xs{gap:2px}.gap-sm{gap:4px}.gap-md{gap:8px}.gap-lg{gap:16px}.flexshrink{-webkit-box-flex:0;-ms-flex:0;flex:0}.flex-between{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.flexlarge{-webkit-box-flex:2;-ms-flex:2;flex:2}.align-left{-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;text-align:left}.align-right{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;text-align:right}.align-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;text-align:center}.system-vermine2047 .item-form{font-family:"Roboto",sans-serif}.system-vermine2047 .sheet-header{-webkit-box-flex:0;-ms-flex:0 auto;flex:0 auto;overflow:hidden;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;margin-bottom:10px}.system-vermine2047 .sheet-header .profile-img{-webkit-box-flex:0;-ms-flex:0 0 100px;flex:0 0 100px;height:100px;margin-right:10px}.system-vermine2047 .sheet-header .header-fields{-webkit-box-flex:1;-ms-flex:1;flex:1}.system-vermine2047 .sheet-header h1.charname{height:50px;padding:0px;margin:5px 0;border-bottom:0}.system-vermine2047 .sheet-header h1.charname input{width:100%;height:100%;margin:0}.system-vermine2047 .sheet-tabs{-webkit-box-flex:0;-ms-flex:0;flex:0}.system-vermine2047 .sheet-body .tab,.system-vermine2047 .sheet-body .tab .editor{height:100%;min-width:100%}.system-vermine2047 .sheet-body .tab .editor{min-height:75px;margin-bottom:1rem;min-width:100%}.system-vermine2047 .sheet-body .tab .editor .editor-content{min-width:100%;min-height:3rem}.system-vermine2047 editor:hover .editor-edit{display:block}.system-vermine2047 .tox{min-height:25vh}.system-vermine2047 .tox .tox-editor-container{background:#fff}.system-vermine2047 .tox .tox-edit-area{padding:0 8px}.system-vermine2047 .resource-label{font-weight:bold}.system-vermine2047 .items-header{height:28px;margin:2px 0;padding:0;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:rgba(0,0,0,.05);border:2px groove #eeede0;font-weight:bold}.system-vermine2047 .items-header>*{font-size:14px;text-align:center}.system-vermine2047 .items-header .item-name{font-weight:bold;padding-left:5px;text-align:left;display:-webkit-box;display:-ms-flexbox;display:flex}.system-vermine2047 .items-list{list-style:none;margin:0;padding:0;overflow-y:auto;scrollbar-width:thin;color:#444}.system-vermine2047 .items-list .item-list{list-style:none;margin:0;padding:0}.system-vermine2047 .items-list .item-name{-webkit-box-flex:2;-ms-flex:2;flex:2;margin:0;overflow:hidden;font-size:13px;text-align:left;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex}.system-vermine2047 .items-list .item-name h3,.system-vermine2047 .items-list .item-name h4{margin:0;white-space:nowrap;overflow-x:hidden}.system-vermine2047 .items-list .item-controls{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.system-vermine2047 .items-list .item-controls a{font-size:12px;text-align:center;margin:0 6px}.system-vermine2047 .items-list .item{-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:0 2px;border-bottom:1px solid #c9c7b8}.system-vermine2047 .items-list .item:last-child{border-bottom:none}.system-vermine2047 .items-list .item .item-name{color:#191813}.system-vermine2047 .items-list .item .item-name .item-image{-webkit-box-flex:0;-ms-flex:0 0 30px;flex:0 0 30px;height:30px;background-size:30px;border:none;margin-right:5px}.system-vermine2047 .items-list .item-prop{text-align:center;border-left:1px solid #c9c7b8;border-right:1px solid #c9c7b8;font-size:12px}.system-vermine2047 .items-list .items-header{height:28px;margin:2px 0;padding:0;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:rgba(0,0,0,.05);border:2px groove #eeede0;font-weight:bold}.system-vermine2047 .items-list .items-header>*{font-size:12px;text-align:center}.system-vermine2047 .items-list .items-header .item-name{padding-left:5px;text-align:left}.system-vermine2047 .item-formula{-webkit-box-flex:0;-ms-flex:0 0 200px;flex:0 0 200px;padding:0 8px}.system-vermine2047 .effects .item .effect-source,.system-vermine2047 .effects .item .effect-duration,.system-vermine2047 .effects .item .effect-controls{text-align:center;border-left:1px solid #c9c7b8;border-right:1px solid #c9c7b8;font-size:12px}.system-vermine2047 .effects .item .effect-controls{border:none}.chat-message .message-header{line-height:20px;color:#fff;text-shadow:0px 0px 5px #000;background:rgba(25,24,19,.368627451)}span.game-mode{font-family:"DistressBlack",sans-serif;position:absolute;margin-left:auto;color:rgba(0,0,0,0);top:1rem;z-index:900;width:55%;text-align:center;text-transform:uppercase;font-weight:900;background:linear-gradient(180deg, rgba(255, 255, 255, 0.767) 0%, rgba(0, 0, 0, 0.61) 17%, rgba(0, 0, 0, 0.548) 19%, rgba(222, 255, 221, 0.575) 24%, rgba(255, 255, 255, 0.637) 43%, rgba(0, 0, 0, 0.486) 47%, rgba(254, 255, 254, 0.466) 50%, rgba(0, 0, 0, 0.699) 63%, rgba(134, 160, 137, 0.479) 64%, rgba(213, 248, 210, 0.493) 100%);background-clip:text}span.game-mode#game-mode-1{color:rgba(235,218,143,.8)}span.game-mode#game-mode-2{color:#83f883}span.game-mode#game-mode-3{color:rgba(245,124,124,.8)}ol#chat-log header.message-header{background-color:#000;padding:0 1rem}ol#chat-log .vermine-roll-message{overflow:hidden;box-shadow:0px 0px 30px #fff inset;padding:0;position:relative}ol#chat-log .vermine-roll-message .flexrow{align-items:center;box-shadow:0px 5px 10px 0px #000}ol#chat-log .vermine-roll-message h3,ol#chat-log .vermine-roll-message h4{text-transform:uppercase;font-family:"DistressBlack";margin-top:1rem;border-bottom:none;font-weight:900;font-weight:900;background:50% 0%/cover no-repeat url(/systems/vermine2047/assets/images/ui/scotch.webp)}ol#chat-log .vermine-roll-message h3+span,ol#chat-log .vermine-roll-message h4+span{font-family:"DistressBlack";font-size:large;text-transform:unset;padding-left:2rem;background:-100% 0%/cover no-repeat url(/systems/vermine2047/assets/images/ui/scotch.webp)}ol#chat-log .vermine-roll-message h3+span#allowed_reroll,ol#chat-log .vermine-roll-message h4+span#allowed_reroll{font-size:large}ol#chat-log .vermine-roll-message h3{background:url(/systems/vermine2047/assets/images/ui/scotch.webp);background-position:center;background-size:200%}ol#chat-log .vermine-roll-message h4{text-align:end}ol#chat-log .vermine-roll-message div.roll-total{transform:rotate(-3deg) scale(1.3) translateX(2rem) translateY(0.5rem);background:url(/systems/vermine2047/assets/images/ui/scotch.webp);background-position:center;background-size:200%;margin-bottom:2rem;padding:0;z-index:1}ol#chat-log .vermine-roll-message div.reroll{padding:0 2rem;padding-bottom:2rem;justify-content:end;text-align:center}ol#chat-log .vermine-roll-message div.reroll button{text-transform:uppercase;font-family:"DistressBlack";margin-top:1rem;box-shadow:0px 0px 3px #000;background:50% 0%/cover no-repeat url(/systems/vermine2047/assets/images/ui/scotch.webp)}ol#chat-log .vermine-roll-message ul.roll-results{list-style:none}ol#chat-log .vermine-roll-message ul.roll-results li.die{position:relative;max-width:3rem;line-height:3rem;float:left;margin:.2rem;background-image:url(/icons/dice/d10black.svg);background-position:center;background-repeat:no-repeat;background-size:contain;font-weight:800;font-size:1rem;color:#fff;text-align:center;transition:.3s;border-bottom:5px solid red;border-radius:2rem}ol#chat-log .vermine-roll-message ul.roll-results li.die::after{content:"";position:absolute;top:-1rem;text-wrap:nowrap;color:#000;font-weight:100;font-size:smaller;text-align:center;opacity:0}ol#chat-log .vermine-roll-message ul.roll-results li.die:hover::after{opacity:1}ol#chat-log .vermine-roll-message ul.roll-results li.die.human,ol#chat-log .vermine-roll-message ul.roll-results li.die.adapted{border-top:5px solid #ffd900}ol#chat-log .vermine-roll-message ul.roll-results li.die.rerollable{cursor:pointer}ol#chat-log .vermine-roll-message ul.roll-results li.die.rerollable:hover{transform:translateY(0.5rem)}ol#chat-log .vermine-roll-message ul.roll-results li.die.success{border-bottom:5px solid #008f07}ol#chat-log .vermine-roll-message ul.roll-results li.die.adapted::after{content:"adapté"}ol#chat-log .vermine-roll-message ul.roll-results li.die.human::after{content:"humain"}ol#chat-log .vermine-roll-message ul.roll-results li.die.rerolled{transform:translateY(0rem)}ol#chat-log .vermine-roll-message ul.roll-results li.die span{text-align:center;font-size:larger;text-shadow:0px 0px 8px #000} \ No newline at end of file diff --git a/module/sheets/actor-sheet.mjs b/module/sheets/actor-sheet.mjs index e0ad21a..f3e6f73 100644 --- a/module/sheets/actor-sheet.mjs +++ b/module/sheets/actor-sheet.mjs @@ -91,17 +91,16 @@ export class VermineActorSheet extends ActorSheet { } //click on wound radio - html.find('[type="radio"][data-wound]').click(ev => { - this._onWoundClick(ev) + html.find('.hexa [type="radio"]').click(ev => { + this._onClickRadioHexa(ev) }) } - _onWoundClick(ev) { + _onClickRadioHexa(ev) { if (!ev.currentTarget.checked) { return } - let woundType = ev.currentTarget.dataset.wound; - let targetProp = "system." + woundType + ".value"; + let prop = ev.currentTarget.name; let update = {}; - update[targetProp] = ev.currentTarget.value - 1 + update[prop] = ev.currentTarget.value - 1 this.actor.update(update) diff --git a/module/sheets/character-sheet.mjs b/module/sheets/character-sheet.mjs index 048a545..190b42b 100644 --- a/module/sheets/character-sheet.mjs +++ b/module/sheets/character-sheet.mjs @@ -1,6 +1,6 @@ import { onManageActiveEffect, prepareActiveEffectCategories } from "../system/effects.mjs"; import { VermineActorSheet } from "./actor-sheet.mjs"; -import { getRollBox } from "../system/dialogs.mjs"; +import { RollDialog } from "../system/dialogs.mjs"; import { TotemPicker } from "../system/applications.mjs"; /** @@ -103,16 +103,35 @@ export class VermineCharacterSheet extends VermineActorSheet { // Choose Totem html.find('.chooseTotem').click(this._onTotemButton.bind(this)); html.find('.ability .rollable').click(this._onRoll.bind(this)); + html.find('[data-totem-name]').click(this._onClickTotemDice.bind(this)) } + async _onClickTotemDice(ev) { + let el = ev.currentTarget; + let totem = el.dataset.totemName; + let value = parseInt(el.dataset.totemValue); + let oldValue = this.actor.system.adaptation.totems[totem].value; + if (value === oldValue) { value-- }; + let updates = {}; + updates[`system.adaptation.totems.${totem}.value`] = value; + let totems = this.actor.system.adaptation.totems; + let sumTotems = Object.keys(totems).reduce(function (previous, key) { + return previous + totems[key].value; + }, 0); + if (sumTotems >5) { + ui.notifications.warn('vous ne pouvez pas avoir plus de 5 dés totems') + } + console.log(sumTotems, updates) + await this.actor.update(updates); + } /** * Handle clickable rolls. * @param {Event} event The originating click event * @private */ - _onRoll(event) { + async _onRoll(event) { event.preventDefault(); const element = event.currentTarget; const dataset = element.dataset; @@ -129,26 +148,17 @@ export class VermineCharacterSheet extends VermineActorSheet { // Handle rolls that supply the formula directly. if (dataset.label) { dataset.rollType = dataset.type; - /*const label = game.i18n.localize(dataset.label) ? `[ability] ${game.i18n.localize(dataset.label)}` : ''; - console.log($(element).attr('for')); - const NoD = this.actor.system.skills[$(element).attr('for').split('.')[2]]?.value || 0 - return game.vermine2047.VermineRoll.roll(this.actor.id, label, NoD, 0, {});*/ + let data = { actorId: this.actor.id, - abilities: this.actor.system.abilities, - skills: this.actor.system.skills, rollType: dataset.rollType, labelKey: dataset.label, - abilityScore: 0, - skillScore: 0, + label: game.i18n.localize(dataset.label) }; - if (dataset.type == 'ability') { - data.abilityScore = this.actor.system.abilities[dataset.label].value; - } else if (dataset.type == 'skill') { - data.skillScore = this.actor.system.skills[dataset.label].value; - } - getRollBox(data); + + let dial = await RollDialog.create(data); + dial.render(true) return true; } } diff --git a/module/system/dialogs.mjs b/module/system/dialogs.mjs index 1792c0c..341190c 100644 --- a/module/system/dialogs.mjs +++ b/module/system/dialogs.mjs @@ -35,24 +35,40 @@ export class CombatResultDialog extends Dialog { } export class RollDialog extends Dialog { - static async create(rollData) { - let options = { classes: ["vermine-roll"], width: 420, height: 'fit-content', 'z-index': 99999 }; - let html = await renderTemplate('systems/vermine2047/templates/roll.hbs', rollData); + static async create(data = { + label: null, + rolltype: null, + NoD: 1, + Reroll: false, + actorId: game.user.character.id + }) { + data.actor = await game.actors.get(data.actorId); + data.config = CONFIG.VERMINE; + let options = { classes: ["nocDialog"], width: 420, height: 'fit-content', 'z-index': 99999 }; + let html = await renderTemplate('systems/vermine2047/templates/roll-dialog.hbs', data); - return new RollDialog(actor, rollData, html, options); + return new RollDialog(data, html, options); } + static get defaultOptions() { + return foundry.utils.mergeObject(super.defaultOptions, { + focus: true, + classes: ["dialog vermine-roll"], + }); + } /* -------------------------------------------- */ constructor(data, html, options, close = undefined) { let conf = { - title: "", + title: "jet de dés", content: html, buttons: { roll: { icon: '', label: "Lancer !", - callback: () => { this.roll(data.actorId, data.label, data.NoD, data.Reroll) } + callback: () => { + this.roll() + } }, cancel: { icon: '', @@ -60,124 +76,117 @@ export class RollDialog extends Dialog { callback: () => { this.close() } } }, - close: close + close: close, } - super(conf, options); + return super({ ...conf, ...data }, options); - this.data = data; + + }; + getData() { + let context = super.getData(); + context.data = this.data; + context.config = CONFIG.VERMINE; + return context; + } + async activateListeners(html) { + super.activateListeners(html); + this.getRollData(); + let rollInputs = html.find('[data-roll'); + for (let inp of rollInputs) { + inp.addEventListener('change', await this.getRollData.bind(this)) + }; + let selectAbil = html.find('#ability')[0]; + html.find("#self_control")[0].max = selectAbil.value; + selectAbil.addEventListener('change', this._onChangeAbility.bind(this)); + let selfControl = html.find('#self_control')[0] + selfControl.addEventListener('change', this._onChangeSelfControl.bind(this)); + }; + async getRollData(ev) { + console.log(this) + this.rollData = { + actor: this.data.actor, + NoD: this.getDicePool(), + Reroll: this.getReroll(), + difficulty: this.getDifficulty(), + rollLabel: this.data.labelKey, + totems: this.getTotems(), + self_control: this.getSelfControl(), + max_effort: this.getMaxEffort() + } + console.log('____________________________________calculating roll', this.rollData); + + }; + _onChangeSelfControl(ev) { + let html = this.element[0]; + html.querySelector('#self_control_value').innerText = ev.currentTarget.value; + + + }; + getSelfControl() { + let html = this.element[0]; + let selfControl = parseInt(html.querySelector('#self_control').value) + return selfControl + } + getMaxEffort() { + let html = this.element[0]; + return parseInt(html.querySelector('#ability').value); + } + getTotems() { + let html = this.element[0]; + let totems = { + human: html.querySelector('#human-totem').checked, + adapted: html.querySelector('#adapted-totem').checked, + } + return totems + } + _onChangeAbility(ev) { + let html = this.element[0]; + let score = html.querySelector('#ability').options[html.querySelector('#ability').selectedIndex].value; + + if (!typeof score == "number") { + score = 0 + } + html.querySelector('#abilityScore').value = score; + html.querySelector('#self_control').max = score; + + + } + getDicePool() { + let html = this.element[0]; + let abilValue = html.querySelector('#ability').options[html.querySelector('#ability').selectedIndex].value || 0; + let skillValue = html.querySelector('#skill').options[html.querySelector('#skill').selectedIndex].dataset.pool || 0; + let selfControl = html.querySelector('#self_control').value; + let bonuses = + (html.querySelector('#usingSpecialization').checked ? 1 : 0) + + (html.querySelector('#helped').checked ? 1 : 0) + + (html.querySelector('#usingTools').checked ? 1 : 0); + let total = parseInt(abilValue) + parseInt(selfControl) + parseInt(skillValue) + bonuses; + + return total || 0; + + } + getReroll() { + let html = this.element[0]; + let selected = html.querySelector('#skill').selectedIndex; + let reroll = html.querySelector('#skill').options[selected].dataset.reroll || 0; + return parseInt(reroll) || 0; + + } + getDifficulty() { + let html = this.element[0]; + let selected = html.querySelector('#difficulty').selectedIndex; + let diff = html.querySelector('#difficulty').options[selected].value || 0; + return parseInt(diff) || 0; } roll() { - VermineUtils.roll(actorId, label, NoD, Reroll = 0, params = {}) + if (this.rollData.self_control > 0) { + if (this.rollData.actor.system.attributes.self_control.value < this.rollData.self_control) { + return ui.notifications.warn('vous navez pas assez de sang-froid') + } + } + return VermineUtils.roll({ ...this.rollData }) } -} -export const getRollBox = async function (data) { - console.log(data) - let actor = await game.actors.get(data.actorId) - let html = await renderTemplate('systems/vermine2047/templates/roll.hbs', data); - let dial = new Dialog({ - title: game.i18n.localize("ROLLS.tool"), - content: html, - buttons: { - roll: { - label: game.i18n.localize('ROLLS.roll_dice'), - callback: async (html) => { - let form = html.find('#dice-pool-form'); - if (!form[0].checkValidity()) { - throw "Invalid Data"; - } - let formData = {}; - form.serializeArray().map(item => { - formData[item.name] = item.value; - }); - // console.log("roll form data", formData); - let NoD = parseInt(formData.abilityScore, 10); - let Reroll = 0; - // difficulty - data.difficulty = (formData.difficulty != undefined) ? formData.difficulty : 7; - // maîtrise bonus - if (formData.rollType == 'skill') { - NoD += CONFIG.VERMINE.SkillLevels[formData.skillScore].dicePool || 0; - Reroll += CONFIG.VERMINE.SkillLevels[formData.skillScore].reroll || 0; - } - console.log('reroll', Reroll); - - // réserves - if (formData.self_control > 0) { - NoD += parseInt(formData.self_control, 10); - let newSelfControl = actor.system.attributes.self_control.value - parseInt(formData.self_control); - if (newSelfControl < 0) { - return async () => { - await ui.notifications.notify(`vous ne disposez pas d'assez de sang-froid`); - dial.render(true); - } - - - } - await actor.update({ - "system.attributes.self_control.value": newSelfControl - }) - } - if (formData.group > 0) { - NoD += parseInt(formData.group, 10); - } - // checks - if (formData.usingSpecialization !== undefined && formData.usingSpecialization == 1) { - NoD += 1; - } - if (formData.usingTools !== undefined && formData.usingTools == 1) { - NoD += 1; - } - if (formData.helped !== undefined && formData.helped == 1) { - NoD += 1; - } - if (formData.abilityScore == 0 || !formData.abilityScore) { - ui.notifications.notify(`veuillez saisir une caractéristique`); - dial.render(true); - } else - return VermineUtils.roll(data.actorId, data.label, NoD, Reroll, data); - } - }, - close: { - label: game.i18n.localize('Close'), - callback: () => { } - } - }, - render: function (h) { - if (h.find('input[name="abilityScore"]').val() == 0 && data.rollType == 'ability') { - h.find('input[name="abilityScore"]').val(data.abilities[data.label].value); - } - - h.find('select[name="ability"]').change((event) => { - if (event.target.value != undefined) { - const abilityScore = data.abilities[event.target.value].value; - console.log('ability', abilityScore); - // on enregistre la valeur de la caractéristique - h.find('input[name="abilityScore"]').val(abilityScore); - } - }); - - h.find('select[name="skill"]').change((event) => { - if (data.rollType == 'skill' && event.target.value != undefined) { - const skillScore = data.skills[event.target.value].value; - // on enregistre la valeur de la compétence - h.find('input[name="skillScore"]').val(skillScore); - // on met à jour les infos de niveaux de compétence - const skillLevel = CONFIG.VERMINE.SkillLevels[skillScore]; - if (skillLevel != undefined) { - h.find('#skillLevel').text(game.i18n.localize(skillLevel.label)); - h.find('#skillDicePool').text(skillLevel.dicePool); - h.find('#skillReroll').text(skillLevel.reroll); - } else { - h.find('#skillLevel').text('Inconnu'); - h.find('#skillDicePool').text(0); - h.find('#skillReroll').text(0); - } - } - }); - } - }); - dial.render(true); -} \ No newline at end of file +} \ No newline at end of file diff --git a/module/system/dice3d.mjs b/module/system/dice3d.mjs new file mode 100644 index 0000000..f6f34bc --- /dev/null +++ b/module/system/dice3d.mjs @@ -0,0 +1,54 @@ +export async function initUserDice(dice3d) { + let baseColor = game.user.color; + dice3d.addColorset({ + name: 'regular_' + game.user.name, + description: "regular dice for " + game.user.name, + category: "vermine 2047", + foreground: '#9F8003', + background: baseColor, + outline: 'black', + texture: 'none', + material: 'plastic', + visibility: 'visible' + }); + dice3d.addColorset({ + name: 'human_' + game.user.name, + description: "human totem dice for " + game.user.name, + category: "vermine 2047", + foreground: '#9F8003', + background: lightenColor(baseColor, 40), + outline: 'black', + material: 'plastic', + visibility: 'visible' + }); + dice3d.addColorset({ + name: 'adapted_' + game.user.name, + description: "adapted totem dice for " + game.user.name, + category: "vermine 2047", + foreground: '#9F8003', + background: darkenColor(baseColor, 40), + outline: 'black', + material: 'plastic', + visibility: 'visible' + }); + + await game.user.setFlag("world", "diceInit", true); +} + +export function darkenColor(color, percent) { + const num = parseInt(color.replace('#', ''), 16); + const amt = Math.round(2.55 * percent); + const R = (num >> 16) + amt; + const G = ((num >> 8) & 0x00FF) + amt; + const B = (num & 0x0000FF) + amt; + return '#' + (0x1000000 + (R < 255 ? R < 1 ? 0 : R : 255) * 0x10000 + (G < 255 ? G < 1 ? 0 : G : 255) * 0x100 + (B < 255 ? B < 1 ? 0 : B : 255)).toString(16).slice(1); +} + +export function lightenColor(color, percent) { + const num = parseInt(color.replace('#', ''), 16); + const amt = Math.round(2.55 * percent); + const R = (num >> 16) - amt; + const G = ((num >> 8) & 0x00FF) - amt; + const B = (num & 0x0000FF) - amt; + return '#' + (0x1000000 + (R < 0 ? 0 : R > 255 ? 255 : R) * 0x10000 + (G < 0 ? 0 : G > 255 ? 255 : G) * 0x100 + (B < 0 ? 0 : B > 255 ? 255 : B)).toString(16).slice(1); +} \ No newline at end of file diff --git a/module/system/handlebars-manager.mjs b/module/system/handlebars-manager.mjs index 42d8ecd..4d6eb12 100644 --- a/module/system/handlebars-manager.mjs +++ b/module/system/handlebars-manager.mjs @@ -36,7 +36,7 @@ export const preloadHandlebarsTemplates = async function () { "systems/vermine2047/templates/actor/creature/creature-combat.hbs", // additional templates - "systems/vermine2047/templates/roll.hbs", + "systems/vermine2047/templates/roll-dialog.hbs", ]); }; @@ -176,6 +176,7 @@ export const registerHandlebarsHelpers = function () { Handlebars.registerHelper('skillLevel', function (property, level, options) { if (level < 1 || level > 5) return ""; + level = parseInt(level); let levelData = CONFIG.VERMINE.SkillLevels[level]; if (property == 'label') { return (levelData !== undefined) ? game.i18n.localize(levelData[property]) : ""; @@ -247,6 +248,9 @@ export const registerHandlebarsHelpers = function () { if (a <= b) { return options.fn(this); } return options.inverse(this); }); + Handlebars.registerHelper('ifincludes', function (arg1, arg2, options) { + return (arg1.includes(arg2)) ? options.fn(this) : options.inverse(this); + }); Handlebars.registerHelper('repeat', function (times, start, block) { var accum = ''; diff --git a/module/system/hooks.mjs b/module/system/hooks.mjs index 813de80..d2036d9 100644 --- a/module/system/hooks.mjs +++ b/module/system/hooks.mjs @@ -1,20 +1,62 @@ +import { RollDialog } from "./dialogs.mjs"; +import { initUserDice } from "./dice3d.mjs"; +import { VermineUtils } from "./roll.mjs"; import { registerTours } from "./tour.mjs"; export const registerHooks = function () { /** * Ready hook loads tables, and override's foundry's entity link functions to provide extension to pseudo entities */ + CONFIG.debug.hooks = true; + Hooks.once('diceSoNiceReady', async (dice3d) => { + dice3d.addSystem({ id: "Vermine2047", name: "Vermine 2047" }, "preferred"); + dice3d.addDicePreset({ + type: "d10", + labels: [ + "systems/vermine2047/assets/images/die/d10-1.webp", + "systems/vermine2047/assets/images/die/d10-2.webp", + "systems/vermine2047/assets/images/die/d10-3.webp", + "systems/vermine2047/assets/images/die/d10-4.webp", + "systems/vermine2047/assets/images/die/d10-5.webp", + "systems/vermine2047/assets/images/die/d10-6.webp", + "systems/vermine2047/assets/images/die/d10-7.webp", + "systems/vermine2047/assets/images/die/d10-8.webp", + "systems/vermine2047/assets/images/die/d10-9.webp", + "systems/vermine2047/assets/images/die/d10-0.webp", + ], + + system: "Vermine2047" + }); + + + await initUserDice(dice3d); + + }); + + Hooks.on('renderChatMessage', async (message, html, data) => { + if (message.user._id != game.user._id) { return } + await VermineUtils.chatListenners(html) + }) + + + Hooks.on('updateUser', async () => { + if (game.dice3d) { + initUserDice(game.dice3d) + + } + }) Hooks.once("ready", async () => { console.info("Vermine 2047 | System Initialized."); await registerTours(); + }); // changement de la pause Hooks.on("renderPause", async function () { if ($("#pause").attr("class") !== "paused") return; $(".paused img").attr("src", 'systems/vermine2047/assets/images/ui/vermine_pause.webp'); - $(".paused img").css({ "opacity": 1}); + $(".paused img").css({ "opacity": 1 }); $("#pause.paused figcaption").text("Communauté endormie..."); }); @@ -34,16 +76,17 @@ export const registerHooks = function () { return false; }); - Hooks.on('getSceneControlButtons', (controls) => { - /*controls.find((c) => c.name === 'token').tools.push({ - name: 'Dice Roller', - title: game.i18n.localize("VERMINE.RollTool"), - icon: 'fas fa-dice-d6', - button: true, - onClick() { - VermineRoll.ui(); - } - });*/ + Hooks.on('getSceneControlButtons', async (controls) => { + console.log; + controls.find((c) => c.name === 'token').tools.push({ + name: 'Dice Roller', + title: game.i18n.localize("VERMINE.RollTool"), + icon: 'fas fa-dice-d10', + button: true, + onClick() { + RollDialog.create().then(d => d.render(true)); + } + }); }); /* -------------------------------------------- */ @@ -53,17 +96,17 @@ export const registerHooks = function () { Hooks.on("preCreateActor", function (actor) { console.log('pre create actor', actor.img); if (actor.img == "icons/svg/mystery-man.svg") { - actor.updateSource({"img": `systems/vermine2047/assets/icons/actors/${actor.type}.webp`}); + actor.updateSource({ "img": `systems/vermine2047/assets/icons/actors/${actor.type}.webp` }); } }); - + Hooks.on("preCreateItem", function (item) { if (item.img == "icons/svg/item-bag.svg") { - item.updateSource({"img": `systems/vermine2047/assets/icons/items/${item.type}.webp`}); - // item.updateSource({"img": `systems/vermine2047/icons/competence.webp`}); + item.updateSource({ "img": `systems/vermine2047/assets/icons/items/${item.type}.webp` }); + // item.updateSource({"img": `systems/vermine2047/icons/competence.webp`}); } }); - + /* -------------------------------------------- */ /* Combat Hooks */ /* -------------------------------------------- */ @@ -79,29 +122,29 @@ export const registerHooks = function () { Hooks.on("updateCombat", function () { if (game.user.isGM) { - let combatant = (game.combat.combatant) ? game.combat.combatant.actor : ""; - - console.log('update combat', game.combat); - - /*if (combatant.type == "marker" && combatant.system.settings.general.isCounter == true) { - let step = (!combatant.system.settings.general.counting) ? -1 : combatant.system.settings.general.counting; - let newQuantity = combatant.system.pools.quantity.value + step; - combatant.update({"system.pools.quantity.value": newQuantity}); - }*/ + let combatant = (game.combat.combatant) ? game.combat.combatant.actor : ""; + + console.log('update combat', game.combat); + + /*if (combatant.type == "marker" && combatant.system.settings.general.isCounter == true) { + let step = (!combatant.system.settings.general.counting) ? -1 : combatant.system.settings.general.counting; + let newQuantity = combatant.system.pools.quantity.value + step; + combatant.update({"system.pools.quantity.value": newQuantity}); + }*/ } }); - /* Hooks.on("chatCommandsReady", function (chatCommands) { - chatCommands.registerCommand(chatCommands.createCommandFromData({ - commandKey: "/dr", - invokeOnCommand: (chatlog, messageText, chatdata) => { - Roll.get().parse(messageText); - }, - shouldDisplayToChat: false, - iconClass: "fa-dice-d6", - description: "Roll Vermine 2047 check" - })); - });*/ - - + /* Hooks.on("chatCommandsReady", function (chatCommands) { + chatCommands.registerCommand(chatCommands.createCommandFromData({ + commandKey: "/dr", + invokeOnCommand: (chatlog, messageText, chatdata) => { + Roll.get().parse(messageText); + }, + shouldDisplayToChat: false, + iconClass: "fa-dice-d6", + description: "Roll Vermine 2047 check" + })); + });*/ + + } diff --git a/module/system/roll.mjs b/module/system/roll.mjs index c76eb1d..396e3d7 100644 --- a/module/system/roll.mjs +++ b/module/system/roll.mjs @@ -1,20 +1,180 @@ export class VermineUtils { + /** + * Méthode pour effectuer un jet de dés avec différentes options + * @param {Object} options - Les options du jet de dés + * @returns {Roll} - Le résultat du jet de dés + */ + static async roll({ actor, NoD, Reroll = 0, difficulty = 7, self_control = 0, rollLabel = "jet custom", totems = { human: false, adapted: false }, max_effort = 0 }) { + // Déclaration des variables + let formula = ""; + let modFormula = null; - static roll(actorId, label, NoD, Reroll = 0, params = {}) { - const actor = game.actors.get(actorId); - let formula = '' + NoD + "d10"; + // Vérification des totems humains + if (totems.human) { + NoD--; + modFormula = "(1D10cs>=" + difficulty + `[human_${game.user.name}]*2)`; + await actor.update({ + "system.adaptation.totems.human.value": actor.system.adaptation.totems.human.value - 1 + }) + } + // Vérification des totems adaptés + if (totems.adapted) { + NoD--; + // Construction de la formule modifiée + if (modFormula != null) { + modFormula = modFormula + "+(1D10cs>=" + difficulty + `[adapted_${game.user.name}]*2)`; + } else { + modFormula = "(1D10cs>=" + difficulty + `[adapted_${game.user.name}]*2)`; + } + await actor.update({ + "system.adaptation.totems.adapted.value": actor.system.adaptation.totems.adapted.value - 1 + }) + }; - formula += (params.difficulty != undefined) ? "cs>=" + params.difficulty : "cs>=7"; + // Construction de la formule de base + let baseFormula = '' + NoD + "d10"; + baseFormula += (difficulty != undefined) ? "cs>=" + difficulty : "cs>=7"; + baseFormula += `[regular_${game.user.name}]` + + // Construction de la formule finale + if (modFormula != null) { + formula = baseFormula + "+" + modFormula; + } else { formula = baseFormula } + + // Création du jet de dés let roll = new Roll(formula, actor.getRollData()); - roll.toMessage({ - speaker: ChatMessage.getSpeaker({ actor: actor }), - flavor: label, - rollMode: game.settings.get('core', 'rollMode'), - }); + await roll.evaluate(); + await VermineUtils.showDiceSoNice(roll); + VermineUtils.diplayChatRoll(roll, ...arguments); return roll; } - /* -------------------------------------------- */ + /** + * Méthode pour gérer les événements de relance de dés + * @param {Object} message - Le message contenant l'événement de relance + * @param {Object} ev - L'événement de relance + */ + static async _onRerollSelect(message, ev) { + // Vérification de l'utilisateur + if (game.user._id != message.user._id) { + ui.notifications.warn('vous ne pouvez pas relancer un dés sur ce jet') + return false + } + + // Récupération du nombre de relances autorisé + let rerollCount = ev.currentTarget.closest('div.vermine-roll-message').querySelector('#allowed_reroll')?.innerText; + // Vérification du nombre de relances restantes + if (!rerollCount || parseInt(rerollCount) < 1) { + console.log('no reroll') + ui.notifications.warn("plus de relance possible"); + let rerollables = ev.currentTarget.closest('ul').querySelectorAll('.rerollable'); + rerollables.forEach(el => el.classList.remove('rerollable')); + + // Mise à jour du nombre de relances restantes + ev.currentTarget.closest('div.vermine-roll-message').querySelector('#allowed_reroll').innerText = rerollCount - 1; + + let content = ev.currentTarget.closest('div.message-content').outerHTML; + + await message.update({ + content: content + }) + return false + } + ev.currentTarget.classList.add('rerolled'); + + // Mise en place de la relance + await message.setFlag("world", "reroll", true); + + // Récupération de la difficulté et du type de dé + let difficulty = ev.currentTarget.closest('ul').dataset.difficulty; + let diceType = ev.currentTarget.dataset.diceType; + + // Mise à jour du nombre de relances restantes + ev.currentTarget.closest('div.vermine-roll-message').querySelector('#allowed_reroll').innerText = rerollCount - 1; + + // Construction de la formule de relance + let formula = `1d10cs>=${difficulty}`; + console.log(diceType) + switch (diceType.trim()) { + case 'human': + formula = `(1d10cs>=${difficulty}[human_${game.user.name}])*2` + break; + case 'adapted': + formula = `(1d10cs>=${difficulty}[adapted_${game.user.name}])*2` + break; + default: + formula += `[regular_${game.user.name}]` + break; + }; + + // Création et évaluation du jet de dés de relance + let reroll = await new Roll(formula); + await reroll.evaluate(); + await VermineUtils.showDiceSoNice(reroll); + // mise à jour de l'affichage du dés + console.log(reroll) + let result = reroll.dice[0].results[0].result; + ev.currentTarget.querySelector('span').innerText = result; + //mise à jour du total + let success = reroll.dice[0].results[0].success; + if (success) { + ev.currentTarget.classList.add('success') + let total = parseInt(ev.currentTarget.closest('.vermine-roll-message').querySelector('#total').innerText) + reroll.total + ev.currentTarget.closest('.vermine-roll-message').querySelector('#total').innerText = total + } + // Mise à jour de l'affichagedu message + ev.currentTarget.classList.remove("rerollable") + let content = ev.currentTarget.closest('div.message-content').outerHTML; + console.log(reroll, message); + + await message.update({ + content: content + }) + } + + /** + * Méthode pour gérer les événements de chat + * @param {HTMLElement} html - L'élément HTML contenant les événements de chat + */ + static async chatListenners(html) { + let reroll = html.find('#allowed_reroll')[0]?.innerText; + if (!reroll || parseInt(reroll) < 1) { + for (let die of html.find('.die')) { + die.classList.remove("rerollable") + }; + } else { + for (let die of html.find('.die')) { + die.classList.add("rerollable") + }; + } + html.find('.rerollable').click(async (ev) => { + ev.preventDefault(); + let msgId = ev.currentTarget.closest("li.message").dataset.messageId; + let message = await game.messages.get(msgId); + await VermineUtils._onRerollSelect(message, ev); + }); + + html.find("#effort-reroll").change(ev => { + let label = html.find("#granted-reroll")[0] + label.innerText = ev.currentTarget.value + }); + html.find("button.grant-reroll").click(async (ev) => { + html.find("#allowed_reroll")[0].innerText = html.find('#granted-reroll')[0].innerText + let mesEl = ev.currentTarget.closest('[data-message-id]') + let messageId = mesEl.dataset.messageId; + ev.currentTarget.closest('.reroll-from-effort').style.display="none" + let content = ev.currentTarget.closest(".vermine-roll-message").outerHTML; + let message = await game.messages.get(messageId); + await message.update({ content: content }); + }); + + } + + /** + * Méthode pour afficher les résultats des dés de manière graphique + * @param {Roll} roll - Le jet de dés à afficher + * @param {string} rollMode - Le mode d'affichage du jet de dés + */ static async showDiceSoNice(roll, rollMode) { if (game.modules.get("dice-so-nice")?.active) { if (game.dice3d) { @@ -39,22 +199,36 @@ export class VermineUtils { } } - /* -------------------------------------------- */ - static async chatListeners(html) { - - html.on("click", '.roll-dice-bonus', event => { - let rollData = this.getRollDataFromMessage(event) - - let msgId = VermineRoll.findChatMessageId(event.currentTarget) - nocUtility.removeChatMessageId(msgId) - - let nbDice = $(event.target).data('nb-dice') - console.log(">>>>>", nbDice) - this.rollBonus(rollData, nbDice) - }) + /** + * Méthode pour récupérer un jet de dés à partir d'un message + * @param {string} messageId - L'identifiant du message contenant le jet de dés + */ + static async getRollFromMessage(messageId) { + let message = await game.messages.get(messageId); } + + /** + * Méthode pour afficher un jet de dés dans le chat + * @param {Roll} roll - Le jet de dés à afficher + * @param {Object} param - Les paramètres du jet de dés + * @returns {ChatMessage} - Le message affichant le jet de dés + */ + static async diplayChatRoll(roll, param) { + let content = await renderTemplate("systems/vermine2047/templates/roll-message.hbs", { roll, param }) + let chatData = { + user: game.user._id, + speaker: ChatMessage.getSpeaker(), + content: content, + roll: roll + }; + let msg = await ChatMessage.create(chatData); + await msg.setFlag('world', 'roll', roll); + return msg + } + + } diff --git a/module/vermine2047.mjs b/module/vermine2047.mjs index 2922fd2..3beab7f 100644 --- a/module/vermine2047.mjs +++ b/module/vermine2047.mjs @@ -18,6 +18,7 @@ import { VermineCombat, VermineCombatTracker } from "./system/fight.mjs"; // Import helper/utility classes and constants. import { preloadHandlebarsTemplates, registerHandlebarsHelpers } from "./system/handlebars-manager.mjs"; import { VERMINE } from "./system/config.mjs"; +import { initUserDice } from "./system/dice3d.mjs"; /* -------------------------------------------- */ /* Init Hook */ @@ -37,7 +38,6 @@ Hooks.once('init', async function () { // Add custom constants for configuration. CONFIG.VERMINE = VERMINE; CONFIG.VERMINE.model = game.system.model - console.log('__________________', CONFIG.VERMINE) /** * Set an initiative formula for the system * @type {String} @@ -97,6 +97,9 @@ Hooks.once('init', async function () { el.classList.add('game-mode'); el.id = 'game-mode-' + mode; document.querySelector('#ui-left').prepend(el); + + + // Preload Handlebars templates. return preloadHandlebarsTemplates(); diff --git a/package.json b/package.json index 4af2133..c3c6b95 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1", - "launch Foundry11": "cd C:/Program Files/Foundry Virtual Tabletop_V11/resources/app && node main.js", + "launch window Foundry11": "cd C:/Program Files/Foundry Virtual Tabletop_V11/resources/app && node main.js", "watch": "gulp watch", "buildStyle": "gulp buildStyles" }, diff --git a/packs/adaptationsmutations/000150.log b/packs/adaptationsmutations/000178.log similarity index 100% rename from packs/adaptationsmutations/000150.log rename to packs/adaptationsmutations/000178.log diff --git a/packs/adaptationsmutations/CURRENT b/packs/adaptationsmutations/CURRENT index 1dec270..0e27482 100644 --- a/packs/adaptationsmutations/CURRENT +++ b/packs/adaptationsmutations/CURRENT @@ -1 +1 @@ -MANIFEST-000149 +MANIFEST-000177 diff --git a/packs/adaptationsmutations/LOG b/packs/adaptationsmutations/LOG index f4131b2..cff334b 100644 --- a/packs/adaptationsmutations/LOG +++ b/packs/adaptationsmutations/LOG @@ -1,3 +1,3 @@ -2024/04/21-11:00:14.926 40b8 Recovering log #147 -2024/04/21-11:00:14.930 40b8 Delete type=0 #147 -2024/04/21-11:00:14.930 40b8 Delete type=3 #145 +2024/04/28-09:24:23.659 2504 Recovering log #176 +2024/04/28-09:24:23.664 2504 Delete type=0 #176 +2024/04/28-09:24:23.664 2504 Delete type=3 #175 diff --git a/packs/adaptationsmutations/LOG.old b/packs/adaptationsmutations/LOG.old index 43437e0..903198e 100644 --- a/packs/adaptationsmutations/LOG.old +++ b/packs/adaptationsmutations/LOG.old @@ -1,7 +1,3 @@ -2024/04/21-08:39:21.586 3594 Recovering log #144 -2024/04/21-08:39:21.591 3594 Delete type=0 #144 -2024/04/21-08:39:21.591 3594 Delete type=3 #143 -2024/04/21-10:20:47.336 5c50 Level-0 table #148: started -2024/04/21-10:20:47.336 5c50 Level-0 table #148: 0 bytes OK -2024/04/21-10:20:47.337 5c50 Delete type=0 #146 -2024/04/21-10:20:47.355 5c50 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end) +2024/04/26-22:48:34.076 b5c Recovering log #174 +2024/04/26-22:48:34.079 b5c Delete type=0 #174 +2024/04/26-22:48:34.081 b5c Delete type=3 #173 diff --git a/packs/adaptationsmutations/MANIFEST-000149 b/packs/adaptationsmutations/MANIFEST-000149 deleted file mode 100644 index 078457e..0000000 Binary files a/packs/adaptationsmutations/MANIFEST-000149 and /dev/null differ diff --git a/packs/adaptationsmutations/MANIFEST-000177 b/packs/adaptationsmutations/MANIFEST-000177 new file mode 100644 index 0000000..7bd1d8f Binary files /dev/null and b/packs/adaptationsmutations/MANIFEST-000177 differ diff --git a/packs/deck-creatures/000150.log b/packs/deck-creatures/000178.log similarity index 100% rename from packs/deck-creatures/000150.log rename to packs/deck-creatures/000178.log diff --git a/packs/deck-creatures/CURRENT b/packs/deck-creatures/CURRENT index 1dec270..0e27482 100644 --- a/packs/deck-creatures/CURRENT +++ b/packs/deck-creatures/CURRENT @@ -1 +1 @@ -MANIFEST-000149 +MANIFEST-000177 diff --git a/packs/deck-creatures/LOG b/packs/deck-creatures/LOG index 013c55e..e124eb0 100644 --- a/packs/deck-creatures/LOG +++ b/packs/deck-creatures/LOG @@ -1,3 +1,3 @@ -2024/04/21-11:00:14.993 40b8 Recovering log #147 -2024/04/21-11:00:14.999 40b8 Delete type=0 #147 -2024/04/21-11:00:14.999 40b8 Delete type=3 #145 +2024/04/28-09:24:23.727 2504 Recovering log #176 +2024/04/28-09:24:23.733 2504 Delete type=0 #176 +2024/04/28-09:24:23.733 2504 Delete type=3 #175 diff --git a/packs/deck-creatures/LOG.old b/packs/deck-creatures/LOG.old index b88eade..9cabe3c 100644 --- a/packs/deck-creatures/LOG.old +++ b/packs/deck-creatures/LOG.old @@ -1,7 +1,3 @@ -2024/04/21-08:39:21.654 3594 Recovering log #144 -2024/04/21-08:39:21.658 3594 Delete type=0 #144 -2024/04/21-08:39:21.658 3594 Delete type=3 #143 -2024/04/21-10:20:47.365 5c50 Level-0 table #148: started -2024/04/21-10:20:47.365 5c50 Level-0 table #148: 0 bytes OK -2024/04/21-10:20:47.367 5c50 Delete type=0 #146 -2024/04/21-10:20:47.367 5c50 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end) +2024/04/26-22:48:34.179 b5c Recovering log #174 +2024/04/26-22:48:34.188 b5c Delete type=0 #174 +2024/04/26-22:48:34.188 b5c Delete type=3 #173 diff --git a/packs/deck-creatures/MANIFEST-000149 b/packs/deck-creatures/MANIFEST-000149 deleted file mode 100644 index 078457e..0000000 Binary files a/packs/deck-creatures/MANIFEST-000149 and /dev/null differ diff --git a/packs/deck-creatures/MANIFEST-000177 b/packs/deck-creatures/MANIFEST-000177 new file mode 100644 index 0000000..7bd1d8f Binary files /dev/null and b/packs/deck-creatures/MANIFEST-000177 differ diff --git a/packs/historiques/000134.log b/packs/historiques/000162.log similarity index 100% rename from packs/historiques/000134.log rename to packs/historiques/000162.log diff --git a/packs/historiques/CURRENT b/packs/historiques/CURRENT index b72c871..c1ddd5c 100644 --- a/packs/historiques/CURRENT +++ b/packs/historiques/CURRENT @@ -1 +1 @@ -MANIFEST-000133 +MANIFEST-000161 diff --git a/packs/historiques/LOG b/packs/historiques/LOG index 016c448..6939eb6 100644 --- a/packs/historiques/LOG +++ b/packs/historiques/LOG @@ -1,3 +1,3 @@ -2024/04/21-11:00:14.944 40b8 Recovering log #131 -2024/04/21-11:00:14.950 40b8 Delete type=0 #131 -2024/04/21-11:00:14.950 40b8 Delete type=3 #129 +2024/04/28-09:24:23.680 2504 Recovering log #160 +2024/04/28-09:24:23.685 2504 Delete type=0 #160 +2024/04/28-09:24:23.685 2504 Delete type=3 #159 diff --git a/packs/historiques/LOG.old b/packs/historiques/LOG.old index c93fee8..e170284 100644 --- a/packs/historiques/LOG.old +++ b/packs/historiques/LOG.old @@ -1,7 +1,3 @@ -2024/04/21-08:39:21.607 3594 Recovering log #128 -2024/04/21-08:39:21.613 3594 Delete type=0 #128 -2024/04/21-08:39:21.613 3594 Delete type=3 #127 -2024/04/21-10:20:47.362 5c50 Level-0 table #132: started -2024/04/21-10:20:47.362 5c50 Level-0 table #132: 0 bytes OK -2024/04/21-10:20:47.363 5c50 Delete type=0 #130 -2024/04/21-10:20:47.364 5c50 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end) +2024/04/26-22:48:34.099 b5c Recovering log #158 +2024/04/26-22:48:34.107 b5c Delete type=0 #158 +2024/04/26-22:48:34.107 b5c Delete type=3 #157 diff --git a/packs/historiques/MANIFEST-000133 b/packs/historiques/MANIFEST-000133 deleted file mode 100644 index 69575f8..0000000 Binary files a/packs/historiques/MANIFEST-000133 and /dev/null differ diff --git a/packs/historiques/MANIFEST-000161 b/packs/historiques/MANIFEST-000161 new file mode 100644 index 0000000..a378e95 Binary files /dev/null and b/packs/historiques/MANIFEST-000161 differ diff --git a/packs/pretires/000148.log b/packs/pretires/000176.log similarity index 100% rename from packs/pretires/000148.log rename to packs/pretires/000176.log diff --git a/packs/pretires/CURRENT b/packs/pretires/CURRENT index 1021bdc..fb6ed1a 100644 --- a/packs/pretires/CURRENT +++ b/packs/pretires/CURRENT @@ -1 +1 @@ -MANIFEST-000147 +MANIFEST-000175 diff --git a/packs/pretires/LOG b/packs/pretires/LOG index 118e14a..da18cc4 100644 --- a/packs/pretires/LOG +++ b/packs/pretires/LOG @@ -1,3 +1,3 @@ -2024/04/21-11:00:14.982 56d0 Recovering log #145 -2024/04/21-11:00:14.987 56d0 Delete type=0 #145 -2024/04/21-11:00:14.987 56d0 Delete type=3 #143 +2024/04/28-09:24:23.715 d84 Recovering log #174 +2024/04/28-09:24:23.721 d84 Delete type=0 #174 +2024/04/28-09:24:23.721 d84 Delete type=3 #173 diff --git a/packs/pretires/LOG.old b/packs/pretires/LOG.old index e9fab12..f2a6229 100644 --- a/packs/pretires/LOG.old +++ b/packs/pretires/LOG.old @@ -1,7 +1,3 @@ -2024/04/21-08:39:21.641 5300 Recovering log #142 -2024/04/21-08:39:21.646 5300 Delete type=0 #142 -2024/04/21-08:39:21.647 5300 Delete type=3 #141 -2024/04/21-10:20:47.358 5c50 Level-0 table #146: started -2024/04/21-10:20:47.358 5c50 Level-0 table #146: 0 bytes OK -2024/04/21-10:20:47.360 5c50 Delete type=0 #144 -2024/04/21-10:20:47.364 5c50 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end) +2024/04/26-22:48:34.159 1544 Recovering log #172 +2024/04/26-22:48:34.165 1544 Delete type=0 #172 +2024/04/26-22:48:34.166 1544 Delete type=3 #171 diff --git a/packs/pretires/MANIFEST-000147 b/packs/pretires/MANIFEST-000147 deleted file mode 100644 index 201e8ae..0000000 Binary files a/packs/pretires/MANIFEST-000147 and /dev/null differ diff --git a/packs/pretires/MANIFEST-000175 b/packs/pretires/MANIFEST-000175 new file mode 100644 index 0000000..8f781b8 Binary files /dev/null and b/packs/pretires/MANIFEST-000175 differ diff --git a/packs/rites/000044.log b/packs/rites/000072.log similarity index 100% rename from packs/rites/000044.log rename to packs/rites/000072.log diff --git a/packs/rites/CURRENT b/packs/rites/CURRENT index 4b2848f..be93edb 100644 --- a/packs/rites/CURRENT +++ b/packs/rites/CURRENT @@ -1 +1 @@ -MANIFEST-000043 +MANIFEST-000071 diff --git a/packs/rites/LOG b/packs/rites/LOG index c0a39c9..b94a8b2 100644 --- a/packs/rites/LOG +++ b/packs/rites/LOG @@ -1,3 +1,3 @@ -2024/04/21-11:00:14.957 56d0 Recovering log #41 -2024/04/21-11:00:14.962 56d0 Delete type=0 #41 -2024/04/21-11:00:14.962 56d0 Delete type=3 #39 +2024/04/28-09:24:23.691 d84 Recovering log #70 +2024/04/28-09:24:23.695 d84 Delete type=0 #70 +2024/04/28-09:24:23.695 d84 Delete type=3 #69 diff --git a/packs/rites/LOG.old b/packs/rites/LOG.old index c8a22f2..3fe863d 100644 --- a/packs/rites/LOG.old +++ b/packs/rites/LOG.old @@ -1,8 +1,3 @@ -2024/04/21-08:39:21.618 5300 Recovering log #38 -2024/04/21-08:39:21.623 5300 Delete type=0 #38 -2024/04/21-08:39:21.623 5300 Delete type=3 #37 -2024/04/21-10:20:47.360 5c50 Level-0 table #42: started -2024/04/21-10:20:47.360 5c50 Level-0 table #42: 0 bytes OK -2024/04/21-10:20:47.362 5c50 Delete type=0 #40 -2024/04/21-10:20:47.364 5c50 Manual compaction at level-0 from '!items!10vhNURxl8FOwfy0' @ 72057594037927935 : 1 .. '!items!vX832Z4LpasxLIIx' @ 0 : 0; will stop at (end) -2024/04/21-10:20:47.364 5c50 Manual compaction at level-1 from '!items!10vhNURxl8FOwfy0' @ 72057594037927935 : 1 .. '!items!vX832Z4LpasxLIIx' @ 0 : 0; will stop at (end) +2024/04/26-22:48:34.121 1544 Recovering log #68 +2024/04/26-22:48:34.127 1544 Delete type=0 #68 +2024/04/26-22:48:34.127 1544 Delete type=3 #67 diff --git a/packs/rites/MANIFEST-000043 b/packs/rites/MANIFEST-000071 similarity index 68% rename from packs/rites/MANIFEST-000043 rename to packs/rites/MANIFEST-000071 index 0e09531..f914bb8 100644 Binary files a/packs/rites/MANIFEST-000043 and b/packs/rites/MANIFEST-000071 differ diff --git a/packs/tables/000041.log b/packs/tables/000069.log similarity index 100% rename from packs/tables/000041.log rename to packs/tables/000069.log diff --git a/packs/tables/CURRENT b/packs/tables/CURRENT index e2c0c4b..284d53f 100644 --- a/packs/tables/CURRENT +++ b/packs/tables/CURRENT @@ -1 +1 @@ -MANIFEST-000040 +MANIFEST-000068 diff --git a/packs/tables/LOG b/packs/tables/LOG index 3e7725a..86123c5 100644 --- a/packs/tables/LOG +++ b/packs/tables/LOG @@ -1,3 +1,3 @@ -2024/04/21-11:00:14.969 40b8 Recovering log #38 -2024/04/21-11:00:14.975 40b8 Delete type=0 #38 -2024/04/21-11:00:14.975 40b8 Delete type=3 #36 +2024/04/28-09:24:23.703 2504 Recovering log #67 +2024/04/28-09:24:23.708 2504 Delete type=0 #67 +2024/04/28-09:24:23.708 2504 Delete type=3 #66 diff --git a/packs/tables/LOG.old b/packs/tables/LOG.old index 60ed8ce..6cdef0e 100644 --- a/packs/tables/LOG.old +++ b/packs/tables/LOG.old @@ -1,8 +1,3 @@ -2024/04/21-08:39:21.629 3594 Recovering log #35 -2024/04/21-08:39:21.634 3594 Delete type=0 #35 -2024/04/21-08:39:21.634 3594 Delete type=3 #34 -2024/04/21-10:20:47.356 5c50 Level-0 table #39: started -2024/04/21-10:20:47.356 5c50 Level-0 table #39: 0 bytes OK -2024/04/21-10:20:47.358 5c50 Delete type=0 #37 -2024/04/21-10:20:47.364 5c50 Manual compaction at level-0 from '!tables!UxgGMRs0kTplpTbe' @ 72057594037927935 : 1 .. '!tables.results!dXo0EN9ieo1tSnRY.ymnitiW2yAuk75M3' @ 0 : 0; will stop at (end) -2024/04/21-10:20:47.364 5c50 Manual compaction at level-1 from '!tables!UxgGMRs0kTplpTbe' @ 72057594037927935 : 1 .. '!tables.results!dXo0EN9ieo1tSnRY.ymnitiW2yAuk75M3' @ 0 : 0; will stop at (end) +2024/04/26-22:48:34.142 b5c Recovering log #65 +2024/04/26-22:48:34.148 b5c Delete type=0 #65 +2024/04/26-22:48:34.148 b5c Delete type=3 #64 diff --git a/packs/tables/MANIFEST-000040 b/packs/tables/MANIFEST-000068 similarity index 87% rename from packs/tables/MANIFEST-000040 rename to packs/tables/MANIFEST-000068 index 8c4c747..d0bc23c 100644 Binary files a/packs/tables/MANIFEST-000040 and b/packs/tables/MANIFEST-000068 differ diff --git a/packs/traumatismes/000148.log b/packs/traumatismes/000176.log similarity index 100% rename from packs/traumatismes/000148.log rename to packs/traumatismes/000176.log diff --git a/packs/traumatismes/CURRENT b/packs/traumatismes/CURRENT index 1021bdc..fb6ed1a 100644 --- a/packs/traumatismes/CURRENT +++ b/packs/traumatismes/CURRENT @@ -1 +1 @@ -MANIFEST-000147 +MANIFEST-000175 diff --git a/packs/traumatismes/LOG b/packs/traumatismes/LOG index 37822d5..7e84cb2 100644 --- a/packs/traumatismes/LOG +++ b/packs/traumatismes/LOG @@ -1,3 +1,3 @@ -2024/04/21-11:00:14.935 56d0 Recovering log #145 -2024/04/21-11:00:14.939 56d0 Delete type=0 #145 -2024/04/21-11:00:14.939 56d0 Delete type=3 #143 +2024/04/28-09:24:23.670 d84 Recovering log #174 +2024/04/28-09:24:23.674 d84 Delete type=0 #174 +2024/04/28-09:24:23.675 d84 Delete type=3 #173 diff --git a/packs/traumatismes/LOG.old b/packs/traumatismes/LOG.old index b23e8e7..7b447f7 100644 --- a/packs/traumatismes/LOG.old +++ b/packs/traumatismes/LOG.old @@ -1,7 +1,3 @@ -2024/04/21-08:39:21.598 5300 Recovering log #142 -2024/04/21-08:39:21.602 5300 Delete type=0 #142 -2024/04/21-08:39:21.602 5300 Delete type=3 #141 -2024/04/21-10:20:47.353 5c50 Level-0 table #146: started -2024/04/21-10:20:47.353 5c50 Level-0 table #146: 0 bytes OK -2024/04/21-10:20:47.354 5c50 Delete type=0 #144 -2024/04/21-10:20:47.355 5c50 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end) +2024/04/26-22:48:34.087 1544 Recovering log #172 +2024/04/26-22:48:34.091 1544 Delete type=0 #172 +2024/04/26-22:48:34.092 1544 Delete type=3 #171 diff --git a/packs/traumatismes/MANIFEST-000147 b/packs/traumatismes/MANIFEST-000147 deleted file mode 100644 index 201e8ae..0000000 Binary files a/packs/traumatismes/MANIFEST-000147 and /dev/null differ diff --git a/packs/traumatismes/MANIFEST-000175 b/packs/traumatismes/MANIFEST-000175 new file mode 100644 index 0000000..8f781b8 Binary files /dev/null and b/packs/traumatismes/MANIFEST-000175 differ diff --git a/scss/base_work.scss b/scss/base_work.scss index cbe2859..7c17990 100644 --- a/scss/base_work.scss +++ b/scss/base_work.scss @@ -105,10 +105,7 @@ ul.unstyled li { .actor.sheet form .form { display: grid; - /*grid: - "sidebar header" 75px - "sidebar nav" minmax(min-content, max-content) - "sidebar content" 1fr/230px 1fr;*/ + grid-template-columns: minmax(230px, 1fr) 3fr; grid-template-rows: 1fr; align-items: flex-start; @@ -120,10 +117,28 @@ ul.unstyled li { grid-row: span 1 / span 1; background-image: url(/systems/vermine2047/assets/images/ui/barre_laterale.webp); background-repeat: no-repeat; - background-position: 12% 50%; - background-size: 400%; + background-size: cover; height: 100%; - box-shadow: -20px 0px 100px #000000b5 inset + width: 240px; + padding: 0 0.3rem; + box-shadow: -20px 0px 100px #000000b5 inset; + + + .major-totem { + position: relative; + + h4 { + position: absolute; + transform: rotate(-8deg); + opacity: 0.7; + transition: 0.2s; + + } + + &:hover h4 { + opacity: 1; + } + } } .actor.sheet .form main { @@ -134,7 +149,6 @@ ul.unstyled li { } .actor.sheet .form aside .image-wrapper { - margin: 1rem auto 3rem; text-align: center; } @@ -211,6 +225,111 @@ ul.unstyled li { overflow: hidden; } +.system-vermine2047 .sheet.actor form div.hexa { + clip-path: polygon(25% 0%, 75% 0%, 100% 50%, 75% 100%, 25% 100%, 0% 50%); + background: radial-gradient(circle, rgba(255, 255, 255, 0.425) 0%, rgba(0, 0, 0, 0.288) 100%); + height: unset; + max-width: 1.5rem; + aspect-ratio: 1/1; + color: black; + transform: rotate(90deg); + transition: 0.2s; + margin: 0.2rem; + + &:hover { + background: radial-gradient(circle, rgba(255, 255, 255, 0.425) 0%, rgba(0, 0, 0, 0.288) 100%); + + } + + input { + opacity: 1; + min-width: 100%; + min-height: 100%; + opacity: 0 + } + + &.checked { + &:hover { + background: radial-gradient(circle, rgb(43, 43, 43) 0%, rgba(0, 0, 0, 0.288) 100%); + + } + + background: radial-gradient(circle, rgb(0, 0, 0) 0%, rgba(0, 0, 0, 0.288) 100%); + } + + &.unavailable { + background: radial-gradient(circle, rgba(66, 15, 15, 0.664) 0%, rgba(131, 70, 70, 0.432) 100%); + + } +} + +.system-vermine2047 .sheet.actor div.minor-totems { + position: relative; + background-color: #929c6f85; + + h5 { + position: absolute; + top: 0; + + img { + max-width: 2rem; + position: absolute; + bottom: -2rem; + + } + } + + .totem-dice { + + .human-dice, + .adapted-dice { + display: flex; + flex-direction: row; + margin-left: 2rem; + + + i { + padding-top: 0.5rem; + color: #064930; + } + } + + + + + + .adapted-dice { + justify-content: flex-end; + margin-left: 0; + margin-right: 2rem; + transform: rotate(180deg); + + i { + transform: rotate(180deg); + padding-top: 0.5rem; + color: rgb(85, 52, 2); + } + } + } + + .human { + left: 0; + + img { + left: 0; + + } + } + + .adapted { + right: 0; + + img { + right: 0 + } + } +} + .system-vermine2047 .sheet.actor form input[type=text], .system-vermine2047 .sheet.actor form input[type=number] { width: calc(100% - 2px); @@ -462,17 +581,22 @@ ul.unstyled li { margin: 0 1rem; flex: 0.5; + } - &.hexa { - text-align: center; - clip-path: polygon(25% 0%, 75% 0%, 100% 50%, 75% 100%, 25% 100%, 0% 50%); - background: radial-gradient(circle, rgba(255, 255, 255, 0.425) 0%, rgba(0, 0, 0, 0.288) 100%); - max-height: 1.2rem; - max-width: 1.2rem; - aspect-ratio: 1/1; - color: black; - vertical-align: bottom; + .hexa { + text-align: center; + clip-path: polygon(25% 0%, 75% 0%, 100% 50%, 75% 100%, 25% 100%, 0% 50%); + background: radial-gradient(circle, rgba(255, 255, 255, 0.425) 0%, rgba(0, 0, 0, 0.288) 100%); + max-height: 1.2rem; + max-width: 1.2rem; + aspect-ratio: 1/1; + color: black; + vertical-align: center; + + &.checked { + background: radial-gradient(circle, rgb(0, 0, 0) 0%, rgba(0, 0, 0, 0.288) 100%); } + } div.specialties { diff --git a/scss/roll.scss b/scss/roll.scss new file mode 100644 index 0000000..748568d --- /dev/null +++ b/scss/roll.scss @@ -0,0 +1,178 @@ +ol#chat-log { + header.message-header { + background-color: black; + padding: 0 1rem; + } + + .vermine-roll-message { + overflow: hidden; + box-shadow: 0px 0px 30px white inset; + padding: 0; + position: relative; + + + .flexrow { + align-items: center; + box-shadow: 0px 5px 10px 0px black; + } + + h3, + h4 { + text-transform: uppercase; + font-family: "DistressBlack"; + margin-top: 1rem; + border-bottom: none; + font-weight: 900; + font-weight: 900; + background: 50% 0%/cover no-repeat url(/systems/vermine2047/assets/images/ui/scotch.webp); + + &+span { + font-family: "DistressBlack"; + font-size: large; + text-transform: unset; + + padding-left: 2rem; + background: -100% 0%/cover no-repeat url(/systems/vermine2047/assets/images/ui/scotch.webp); + + allowed_reroll { + font-size: large; + + } + } + } + + h3 { + background: url(/systems/vermine2047/assets/images/ui/scotch.webp); + background-position: center; + background-size: 200%; + } + + h4 { + text-align: end; + } + + div.roll-total { + transform: rotate(-3deg) scale(1.3) translateX(2rem) translateY(0.5rem); + background: url(/systems/vermine2047/assets/images/ui/scotch.webp); + background-position: center; + background-size: 200%; + margin-bottom: 2rem; + padding: 0; + z-index: +1; + } + + div.reroll { + button { + text-transform: uppercase; + font-family: "DistressBlack"; + margin-top: 1rem; + box-shadow: 0px 0px 3px black; + background: 50% 0%/cover no-repeat url(/systems/vermine2047/assets/images/ui/scotch.webp); + + } + + padding: 0 2rem; + padding-bottom: 2rem; + justify-content: end; + text-align: center; + + + + + } + + ul.roll-results { + list-style: none; + + li.die { + position: relative; + max-width: 3rem; + line-height: 3rem; + float: left; + margin: 0.2rem; + background-image: url(/icons/dice/d10black.svg); + background-position: center; + background-repeat: no-repeat; + background-size: contain; + font-weight: 800; + font-size: 1rem; + color: #ffffff; + text-align: center; + transition: 0.3s; + border-bottom: 5px solid rgb(255, 0, 0); + border-radius: 2rem; + + + + + &::after { + content: ""; + position: absolute; + top: -1rem; + text-wrap: nowrap; + color: black; + font-weight: 100; + font-size: smaller; + text-align: center; + opacity: 0; + + + + } + + &:hover::after { + opacity: 1 + } + + + &.human, + &.adapted { + border-top: 5px solid rgb(255, 217, 0); + } + + &.rerollable { + cursor: pointer; + + &:hover { + transform: translateY(0.5rem) + } + } + + &.success { + border-bottom: 5px solid rgb(0, 143, 7); + } + + &.adapted { + + &::after { + content: "adapté" + } + + + + } + + &.human { + &::after { + + content: "humain" + } + } + + &.rerolled { + transform: translateY(-0rem); + } + + span { + text-align: center; + font-size: larger; + text-shadow: 0px 0px 8px black; + } + + + + } + } + } + +} \ No newline at end of file diff --git a/scss/vermine2047.scss b/scss/vermine2047.scss index dc26a94..b56b547 100644 --- a/scss/vermine2047.scss +++ b/scss/vermine2047.scss @@ -1,2 +1,3 @@ @import "./base_work.scss"; -@import "./style.scss"; \ No newline at end of file +@import "./style.scss"; +@import "./roll.scss" \ No newline at end of file diff --git a/template.json b/template.json index 72ac5b2..a1f4702 100644 --- a/template.json +++ b/template.json @@ -32,6 +32,23 @@ "templates": [ "base" ], + "adaptation": { + "value": 1, + "min": 0, + "max": 5, + "totems": { + "human": { + "value": 1, + "min": 0, + "max": 3 + }, + "adapted": { + "value": 1, + "min": 0, + "max": 3 + } + } + }, "identity": { "height": 0, "weight": 0, diff --git a/templates/actor/character/character-combat.hbs b/templates/actor/character/character-combat.hbs index e0b17ad..6ddb120 100644 --- a/templates/actor/character/character-combat.hbs +++ b/templates/actor/character/character-combat.hbs @@ -1,23 +1,73 @@
- / {{ - system.attributes.self_control.max }} -
+- / {{ - system.attributes.effort.max }} -
+
+
+
+ height="80" />
diff --git a/templates/roll-message.hbs b/templates/roll-message.hbs index 6b8fbbc..b5afaeb 100644 --- a/templates/roll-message.hbs +++ b/templates/roll-message.hbs @@ -1,26 +1,75 @@ -