diff --git a/assets/images/die/d10-0.webp b/assets/images/die/d10-0.webp index 14922af..5770b1f 100644 Binary files a/assets/images/die/d10-0.webp and b/assets/images/die/d10-0.webp differ diff --git a/assets/images/die/d10-1.webp b/assets/images/die/d10-1.webp index 8d5b058..0073fea 100644 Binary files a/assets/images/die/d10-1.webp and b/assets/images/die/d10-1.webp differ diff --git a/assets/images/die/d10-2.webp b/assets/images/die/d10-2.webp index d6b16a6..17816c0 100644 Binary files a/assets/images/die/d10-2.webp and b/assets/images/die/d10-2.webp differ diff --git a/assets/images/die/d10-3.webp b/assets/images/die/d10-3.webp index f34c565..aaf4cee 100644 Binary files a/assets/images/die/d10-3.webp and b/assets/images/die/d10-3.webp differ diff --git a/assets/images/die/d10-4.webp b/assets/images/die/d10-4.webp index f14888a..477a190 100644 Binary files a/assets/images/die/d10-4.webp and b/assets/images/die/d10-4.webp differ diff --git a/assets/images/die/d10-5.webp b/assets/images/die/d10-5.webp index 2bf3ed5..b12a974 100644 Binary files a/assets/images/die/d10-5.webp and b/assets/images/die/d10-5.webp differ diff --git a/assets/images/die/d10-6.webp b/assets/images/die/d10-6.webp index 59bed16..71b6b98 100644 Binary files a/assets/images/die/d10-6.webp and b/assets/images/die/d10-6.webp differ diff --git a/assets/images/die/d10-7.webp b/assets/images/die/d10-7.webp index db1e8ab..7c34824 100644 Binary files a/assets/images/die/d10-7.webp and b/assets/images/die/d10-7.webp differ diff --git a/assets/images/die/d10-8.webp b/assets/images/die/d10-8.webp index bc98e98..dac2a8d 100644 Binary files a/assets/images/die/d10-8.webp and b/assets/images/die/d10-8.webp differ diff --git a/assets/images/die/d10-9.webp b/assets/images/die/d10-9.webp index 19ad44e..82e8654 100644 Binary files a/assets/images/die/d10-9.webp and b/assets/images/die/d10-9.webp differ diff --git a/css/vermine2047.css b/css/vermine2047.css index 8c74403..6fe0877 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-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,.editor{height:100%;width:100%}.editor{min-height:75px;margin-bottom:1rem;min-width:100%}.editor .editor-content{min-width:100%;min-height:3rem}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:#fff;font-weight:100;font-size:smaller;text-align:center;opacity:0;text-shadow:0px 0px 5px #000}ol#chat-log .vermine-roll-message ul.roll-results li.die:hover::after{opacity:1;color:#fff}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.human::after,ol#chat-log .vermine-roll-message ul.roll-results li.die.adapted::after{content:""}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 +@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}img.profile-img{filter:drop-shadow(0px 0px 20px rgb(110, 133, 27))}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:1;transition:.2s}.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 .totem-details{position:relative}.system-vermine2047 .sheet.actor .totem-details img.img-totem{transform-origin:50% 50%;filter:grayscale(1);opacity:.15;position:absolute;width:30%;height:auto;pointer-events:none;aspect-ratio:1/1;left:35%}.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 h5.human,.system-vermine2047 .sheet.actor div.minor-totems h5.adapted{transition:.3s}.system-vermine2047 .sheet.actor div.minor-totems h5.human img.img-totem,.system-vermine2047 .sheet.actor div.minor-totems h5.adapted img.img-totem{filter:drop-shadow(0px 0px 20px rgb(0, 0, 0))}.system-vermine2047 .sheet.actor div.minor-totems h5.human.major,.system-vermine2047 .sheet.actor div.minor-totems h5.adapted.major{transform:scale(1.1)}.system-vermine2047 .sheet.actor div.minor-totems h5.human.major img,.system-vermine2047 .sheet.actor div.minor-totems h5.adapted.major img{filter:drop-shadow(0px 0px 10px red)}.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}@container ability-row (max-width: 240px){.skill-dots,span.hexa{display:none}}.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;flex-wrap:nowrap;min-width:min-content;container-type:inline-size;container-name:ability-row}.system-vermine2047 .sheet.actor .ability:hover{box-shadow:0px 0px 15px gray inset}.system-vermine2047 .sheet.actor .ability label{min-width:40%;flex:1.3}.system-vermine2047 .sheet.actor .ability span{max-width:fit-content;margin:0 1rem;flex:.5}.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;min-width:fit-content}.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%)}.system-vermine2047 .sheet.actor .preferred h4,.system-vermine2047 .sheet.actor .preferred label{text-shadow:0px 0px 5px rgba(0,128,0,.411)}.system-vermine2047 .sheet.actor #edit{background-color:#000;color:#fff}.system-vermine2047 .sheet.actor .reserve-grid{line-height:.5rem;transform-origin:0% 50%;max-width:fit-content;align-items:center;display:flex;flex-direction:column}.system-vermine2047 .sheet.actor .reserve-grid div.flexrow,.system-vermine2047 .sheet.actor .reserve-grid input,.system-vermine2047 .sheet.actor .reserve-grid .hexa{margin:0;padding:0;min-width:1rem;min-height:1rem}.system-vermine2047 .sheet.actor .reserve-grid>.flexrow{position:relative;max-width:fit-content;justify-content:center}.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}.hexa.checked{background:radial-gradient(circle, rgb(0, 0, 0) 0%, rgba(0, 0, 0, 0.288) 100%)}.hexa input[type=radio]{opacity:0}.hexa input[type=radio]::after,.hexa input[type=radio]::before{display:none}.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,.editor{height:100%;width:100%}.editor{min-height:75px;margin-bottom:1rem;min-width:100%}.editor .editor-content{min-width:100%;min-height:3rem}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;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:center}ol#chat-log .vermine-roll-message div.roll-total{transform:rotate(-3deg) scale(1.2) 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;width:75%}ol#chat-log .vermine-roll-message div.reroll{transition:.3s;max-height:1px;overflow:hidden;justify-content:end;text-align:center;align-items:center}ol#chat-log .vermine-roll-message div.reroll button{text-transform:uppercase;font-family:"DistressBlack";padding:0 1rem;max-width:fit-content;box-shadow:0px 0px 2px #000;background:50% 0%/cover no-repeat url(/systems/vermine2047/assets/images/ui/scotch.webp)}ol#chat-log .vermine-roll-message div.reroll.visible{max-height:15rem}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:#fff;font-weight:100;font-size:smaller;text-align:center;opacity:0;text-shadow:0px 0px 5px #000}ol#chat-log .vermine-roll-message ul.roll-results li.die:hover::after{opacity:1;color:#fff}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.human::after,ol#chat-log .vermine-roll-message ul.roll-results li.die.adapted::after{content:""}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}.sheet.item.vermine2047 .window-content .flexrow{align-items:center;box-shadow:0px 5px 10px 0px #000;margin:1rem}.sheet.item.vermine2047 .window-content header,.sheet.item.vermine2047 .window-content h1,.sheet.item.vermine2047 .window-content h2,.sheet.item.vermine2047 .window-content h3,.sheet.item.vermine2047 .window-content h4,.sheet.item.vermine2047 .window-content h5{background:50% 50%/cover no-repeat url(/systems/vermine2047/assets/images/ui/scotch.webp);text-transform:uppercase;font-family:"DistressBlack";margin-top:1rem;border-bottom:none}.sheet.item.vermine2047 .window-content h2,.sheet.item.vermine2047 .window-content h3,.sheet.item.vermine2047 .window-content h4{text-align:center}.sheet.item.vermine2047 .window-content h5{margin-bottom:0}.sheet.item.vermine2047 .window-content .resource{border:none;border-left:1px solid gray;padding:.2rem 1rem;text-align:center}.sheet.item.vermine2047 .window-content .resource .flexrow{min-width:5rem;box-shadow:none}.sheet.item.vermine2047 .window-content .damages-row{margin:0}.sheet.item.vermine2047 .window-content .damages-row .radios{margin:0;padding:.5rem}.sheet.item.vermine2047 .window-content .damage-pannes,.sheet.item.vermine2047 .window-content .damage-state,.sheet.item.vermine2047 .window-content .damage-effect{text-align:center;font-family:"DistressBlack"}.window-app.vermineDialog .window-content{background:url(/systems/vermine2047/assets/images/ui/box_background.webp) repeat}.window-app.vermineDialog .flexrow,.window-app.vermineDialog .grid{justify-content:space-around;box-shadow:0px 1px 10px rgba(0,0,0,.555);align-items:center;padding:.5rem .2rem}.window-app.vermineDialog .flexrow>*,.window-app.vermineDialog .grid>*{margin:0 .3rem}.window-app.vermineDialog label{font-family:"DistressBlack",sans-serif;font-size:larger}.window-app.vermineDialog select{max-width:fit-content}.window-app.vermineDialog select option{max-width:fit-content}.window-app.vermineDialog .dialog-buttons{display:flex;justify-content:space-around;flex-direction:row}.window-app.vermineDialog .dialog-buttons button{display:block;flex:.3}input[type=range]{appearance:none;background:rgba(0,0,0,0);cursor:pointer;width:100%}input[type=range]::-webkit-slider-runnable-track{background:url(../assets/images/ui/scotch.webp) no-repeat center;background-size:100% auto;height:.4rem;border:none;box-shadow:0px 0px 13px rgba(31,26,26,.979) inset}input[type=range]::-webkit-slider-thumb{appearance:none;margin-top:-0.3rem;height:1rem;width:1rem;border:none;border-radius:50%;background:url(/systems/vermine2047/assets/images/ui/totems/human.webp);background-size:cover;filter:contrast(2);box-shadow:0px 0px 10px #000}input[type=range]:focus::-webkit-slider-thumb{box-shadow:0px 0px 10px #ff0}select{border:none;background:url(../assets/images/ui/scotch.webp);background-size:100% 100%;box-shadow:0px 0px 3px rgba(31,26,26,.979) inset}select[disabled]{color:#000;text-shadow:0px 0px 15px #000}select option{appearance:none;border:none;background:url(../assets/images/ui/scotch.webp);background-size:100% 100%}input[type=checkbox],input[type=radio]{-webkit-appearance:none;appearance:none;background:rgba(0,0,0,0);box-shadow:0px 0px 3px #85854e;cursor:pointer;width:1.5rem;height:1rem;border-radius:.4rem;transition:.3s;clip-path:polygon(25% 0%, 75% 0%, 100% 50%, 75% 100%, 25% 100%, 0% 50%);box-shadow:0px 0px 6px #000 inset;background-color:rgba(61,11,11,.658)}input[type=checkbox][disabled=true],input[type=radio][disabled=true]{filter:grayscale(1)}input[type=checkbox]:after,input[type=radio]:after{content:" ";background:url(/systems/vermine2047/assets/images/ui/totems/human.webp);background-size:50% 150%;background-repeat:no-repeat;position:relative;top:10%;left:0%;width:100%;height:80%;display:block;border-radius:0%;padding:0;transition:.3s}input[type=checkbox]:checked,input[type=radio]:checked{background-color:rgba(26,107,12,.658)}input[type=checkbox]:checked:after,input[type=radio]:checked:after{font-weight:900;background-color:rgba(26,1,1,0);left:50%}input[type=radio]{width:1rem;height:1rem}input[type=radio]:after{width:.8rem;background-size:100% 100%;top:5%;left:5%;width:90%;height:90%;background-size:30% 30%;background-position:center}input[type=radio]:not([disabled]):hover::after{background-size:90% 90%}input[type=radio]:checked::after{content:"";background-size:70% 70%;top:5%;left:5%;position:relative;background-color:rgba(26,1,1,0)}:root{--color-text-light-highlight: #b0d9b0;--color-text-light-heading: #9fc7d8;--color-text-light-primary: #a4b5b3;--color-text-dark-primary: #131919;--color-text-dark-secondary: #444b4a;--color-text-dark-header: #1d2223;--color-text-dark-inactive: #71797a;--color-text-hyperlink: #0064ff;--color-text-light-0: #fff;--color-text-light-1: #e0f0f0;--color-text-light-2: #c0e0e0;--color-text-light-3: #a0d0d0;--color-text-light-4: #80c0c0;--color-text-light-5: #60b0b0;--color-text-light-6: #40a0a0;--color-text-light-7: #208080;--color-text-dark-1: #111;--color-text-dark-2: #222;--color-text-dark-3: #444;--color-text-dark-4: #555;--color-text-dark-5: #666;--color-text-dark-6: #777;--color-border-light-1: #b0d9b0;--color-border-light-2: #80c0c0;--color-border-dark-1: #131919;--color-border-dark-2: #1d2223;--color-border-dark-3: #2d3333;--color-border-dark-4: #3d4444;--color-border-dark-5: #668888;--color-shadow-primary: #0000ff;--color-shadow-highlight: #0064ff;--color-shadow-dark: #000;--color-underline-inactive: #71797a;--color-underline-active: #1a1944;--color-underline-header: #222782;--color-border-light-highlight: #b0d9b0;--color-border-light-primary: #a4b5b3;--color-border-light-secondary: #9fc7d8;--color-border-light-tertiary: #71797a;--color-border-dark: #000;--color-border-dark-primary: #131919;--color-border-dark-secondary: #1d2223;--color-border-dark-tertiary: #444b4a;--color-border-highlight: #0064ff;--color-border-highlight-alt: #0000ff;--color-bg-btn-minor-inactive: #9fc7d8;--color-bg-btn-minor-active: #a4b5b3;--color-bg-option: #ccdada;--color-checkbox-checked: #666;--color-ownership-none: #00ff55;--color-ownership-observer: #71797a;--color-ownership-owner: #a4b5b3;--z-index-canvas: 0;--z-index-app: 30;--z-index-ui: 60;--z-index-window: 100;--z-index-tooltip: 9999;--sidebar-width: 300px;--sidebar-header-height: 32px;--sidebar-item-height: 48px;--hotbar-height: 52px;--hotbar-width: 578px;--macro-size: 50px;--players-width: 200px;--form-field-height: 26px;--font-primary: "Signika", sans-serif;--font-mono: monospace;--font-awesome: "Font Awesome 6 Pro";--font-size-11: 0.6875rem;--font-size-12: 0.75rem;--font-size-13: 0.8125rem;--font-size-14: 0.875rem;--font-size-16: 1rem;--font-size-18: 1.125rem;--font-size-20: 1.25rem;--font-size-24: 1.5rem;--font-size-28: 1.75rem;--font-size-32: 2rem;--font-size-48: 3rem;--line-height-12: 0.75rem;--line-height-16: 1rem;--line-height-20: 1.25rem;--line-height-30: 1.875rem;--color-level-info: #b95c87;--color-level-warning: #04b184;--color-level-error: #03750;--color-level-success: #3c266c}::-webkit-scrollbar-thumb{outline:none;border-radius:3px;background:#577822;border:1px solid var(--color-border-highlight)}::-webkit-scrollbar{width:3px;height:3px} \ No newline at end of file diff --git a/module/sheets/actor-sheet.mjs b/module/sheets/actor-sheet.mjs index f3e6f73..df4d6ca 100644 --- a/module/sheets/actor-sheet.mjs +++ b/module/sheets/actor-sheet.mjs @@ -1,4 +1,5 @@ import { onManageActiveEffect, prepareActiveEffectCategories } from "../system/effects.mjs"; +import { preloadHandlebarsTemplates } from "../system/handlebars-manager.mjs"; /** * Extend the basic ActorSheet with some very simple modifications @@ -53,7 +54,7 @@ export class VermineActorSheet extends ActorSheet { /** @override */ activateListeners(html) { super.activateListeners(html); - + html.find('.min-max-edit').click(this._onMinMaxEdit.bind(this)) // Render the item sheet for viewing/editing prior to the editable check. html.find('.item-edit').click(ev => { const li = $(ev.currentTarget).parents(".item"); @@ -105,6 +106,35 @@ export class VermineActorSheet extends ActorSheet { this.actor.update(update) } + async _onMinMaxEdit(event) { + event.preventDefault(); + let propPath = event.currentTarget.dataset.prop; + let propName = propPath.split('.').slice(-1).pop() + let data = { + actorName: this.actor.name, + propName: propName + } + let html = await renderTemplate('systems/vermine2047/templates/dialogs/min-max-edit.hbs', data); + + let ui = new Dialog({ + title: "edit : " + propName, + content: html, + buttons: { + roll: { + label: "ok", + callback: (html) => { } + + + }, + cancel: { + label: game.i18n.localize('Close'), + callback: () => { } + } + } + } + ); + ui.render(true) + } async _onItemCreate(event) { event.preventDefault(); const header = event.currentTarget; diff --git a/module/sheets/character-sheet.mjs b/module/sheets/character-sheet.mjs index 190b42b..2ea83f3 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 { RollDialog } from "../system/dialogs.mjs"; +import RollDialog from "../system/dialogs/rollDialog.mjs"; import { TotemPicker } from "../system/applications.mjs"; /** @@ -14,7 +14,8 @@ export class VermineCharacterSheet extends VermineActorSheet { return mergeObject(super.defaultOptions, { classes: ["vermine2047", "sheet", "character", "actor"], template: "systems/vermine2047/templates/actor/actor-sheet.hbs", - + width: "fit-content", + height: "fit-content", tabs: [{ navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "features" }] }); } @@ -73,6 +74,14 @@ export class VermineCharacterSheet extends VermineActorSheet { for (let [k, v] of Object.entries(context.system.abilities)) { v.label = game.i18n.localize(context.system.abilities[k].label) ?? k; } + for (let [k, v] of Object.entries(context.system.skills)) { + if (v.value >= 2) { + let spe = this.actor.items.filter(it => it.type == "specialty").filter(spec => spec.system.skill == k); + v.specialties = spe + } + + } + } /** @@ -103,10 +112,23 @@ 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)) + html.find('[data-totem-name]').click(this._onClickTotemDice.bind(this)); + if (!this.actor.flags.world?.editMode) { + this.disableInputs(html) + } } + disableInputs(html) { + for (let input of html.find('input')) { + if (input.name != "flags.world.editMode") { + input.setAttribute('disabled', true) + } + } + for (let select of html.find('select')) { + select.setAttribute('disabled', true) + } + } async _onClickTotemDice(ev) { let el = ev.currentTarget; let totem = el.dataset.totemName; @@ -116,14 +138,17 @@ export class VermineCharacterSheet extends VermineActorSheet { 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') + //verifier le max des dés totems + let sum = value; + switch (totem) { + case "human": + sum += this.actor.system.adaptation.totems.adapted.value; + break; + case "adapted": + sum += this.actor.system.adaptation.totems.human.value; + break; } - console.log(sumTotems, updates) + if (sum > 5) { return ui.notifications.warn("pas plus de 5 dés totems") } await this.actor.update(updates); } /** diff --git a/module/sheets/item-sheet.mjs b/module/sheets/item-sheet.mjs index f4ec937..8b9744e 100644 --- a/module/sheets/item-sheet.mjs +++ b/module/sheets/item-sheet.mjs @@ -9,7 +9,7 @@ export class VermineItemSheet extends ItemSheet { return mergeObject(super.defaultOptions, { classes: ["vermine2047", "sheet", "item"], width: 520, - height: 480, + height: "auto", tabs: [{ navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "description" }] }); } @@ -34,7 +34,7 @@ export class VermineItemSheet extends ItemSheet { // Use a safe clone of the item data for further operations. const itemData = context.item; - + // Retrieve the roll data for TinyMCE editors. context.rollData = {}; let actor = this.object?.parent ?? null; @@ -58,7 +58,19 @@ export class VermineItemSheet extends ItemSheet { // Everything below here is only needed if the sheet is editable if (!this.isEditable) return; + //click on wound radio + html.find('.damages-row [type="radio"]').click(ev => { + this._onClickDamage(ev) + }) // Roll handlers, click handlers, etc. would go here. } + async _onClickDamage(ev) { + if (!ev.currentTarget.checked) { return } + let prop = ev.currentTarget.name; + let update = {}; + update[prop] = ev.currentTarget.value - 1 + + this.item.update(update) + } } diff --git a/module/system/dialogs.mjs b/module/system/dialogs.mjs index 7e9e156..021dfe4 100644 --- a/module/system/dialogs.mjs +++ b/module/system/dialogs.mjs @@ -35,268 +35,3 @@ export class CombatResultDialog extends Dialog { } - -/** - * Represents a dialog for rolling dice. - */ -export class RollDialog extends Dialog { - - /** - * Creates a new RollDialog instance. - * @param {Object} data - The data for the dialog. - * @param {HTMLElement} html - The HTML content of the dialog. - * @param {Object} options - The options for the dialog. - * @param {Function} close - The callback function for closing the dialog. - */ - - constructor(data, html, options, close = undefined) { - let conf = { - title: "jet de dés", - content: html, - buttons: { - roll: { - icon: '', - label: "Lancer !", - callback: () => { - this.roll() - } - }, - cancel: { - icon: '', - label: "Annuler", - callback: () => { this.close() } - } - }, - close: close, - } - return super({ ...conf, ...data }, options); - }; - - /** - * Creates a new RollDialog instance. - * @param {Object} data - The data for the dialog. - * @param {HTMLElement} html - The HTML content of the dialog. - * @param {Object} options - The options for the dialog. - * @param {Function} close - The callback function for closing the dialog. - */ - static async create(data = { - label: null, - rolltype: null, - NoD: 1, - Reroll: false, - actorId: game.user.character.id - }) { - // Retrieve the actor data based on the actorId - data.actor = await game.actors.get(data.actorId); - data.config = CONFIG.VERMINE; - // Define options for the dialog - let options = { classes: ["nocDialog"], width: 420, height: 'fit-content', 'z-index': 99999 }; - // Render the HTML template for the dialog - let html = await renderTemplate('systems/vermine2047/templates/roll-dialog.hbs', data); - - // Return a new RollDialog instance with the provided data, HTML, and options - return new RollDialog(data, html, options); - } - - /** - * Retrieves the default options for the RollDialog. - */ - static get defaultOptions() { - return foundry.utils.mergeObject(super.defaultOptions, { - focus: true, - classes: ["dialog vermine-roll"], - - }); - } - /** - * Retrieves the data for the dialog. - * @returns {Object} The context data for the dialog. - */ - getData() { - // Get the context data from the superclass - let context = super.getData(); - context.data = this.data; - context.config = CONFIG.VERMINE; - return context; - } - - /** - * Activates event listeners for the dialog. - * @param {HTMLElement} html - The HTML element of the dialog. - */ - async activateListeners(html) { - // Activate event listeners from the superclass - super.activateListeners(html); - // Retrieve roll data and set up event listeners - await this.getRollData(); - let rollInputs = html.find('[data-roll'); - for (let inp of rollInputs) { - // Add event listener for roll input changes - inp.addEventListener('change', await this.getRollData.bind(this)) - }; - let selectAbil = html.find('#ability')[0]; - // Set the maximum value for self control based on ability value - html.find("#self_control")[0].max = selectAbil.value; - selectAbil.addEventListener('change', this._onChangeAbility.bind(this)); - let selfControl = html.find('#self_control')[0] - // Add event listener for self control changes - selfControl.addEventListener('change', this._onChangeSelfControl.bind(this)); - }; - - /** - * Retrieves the roll data for the dialog. - * @param {Event} ev - The event triggering the roll data retrieval. - */ - async getRollData(ev) { - console.log(this) - // Calculate and store the roll data - 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() - } - }; - /** - * Handles the change in self control value. - * @param {Event} ev - The event triggering the change in self control value. - */ - _onChangeSelfControl(ev) { - let html = this.element[0]; - // Update the displayed self control value based on the event - html.querySelector('#self_control_value').innerText = ev.currentTarget.value; - }; - - /** - * Retrieves the self control value from the HTML element. - * @returns {number} The self control value. - */ - getSelfControl() { - let html = this.element[0]; - // Parse and return the self control value from the HTML element - let selfControl = parseInt(html.querySelector('#self_control').value) - return selfControl - } - - /** - * Retrieves the maximum effort value from the HTML element. - * @returns {number} The maximum effort value. - */ - getMaxEffort() { - let html = this.element[0]; - // Retrieve and return the maximum effort value from the HTML element - return parseInt(html.querySelector('#ability').value); - } - - /** - * Retrieves the selected totems from the HTML element. - * @returns {Object} An object containing the selected totems. - */ - getTotems() { - let html = this.element[0]; - // Check and store the status of human and adapted totems - let totems = { - human: html.querySelector('#human-totem')?.checked, - adapted: html.querySelector('#adapted-totem')?.checked, - } - return totems - } - - /** - * Handles the change in ability value. - * @param {Event} ev - The event triggering the change in ability value. - */ - _onChangeAbility(ev) { - let html = this.element[0]; - // Retrieve the selected ability score and update related elements - let score = html.querySelector('#ability').options[html.querySelector('#ability').selectedIndex].value; - // Check if the score is a number, otherwise set it to 0 - if (!typeof score == "number") { - score = 0 - } - html.querySelector('#abilityScore').value = score; - html.querySelector('#self_control').max = score; - } - /** - * Retrieves the total dice pool based on various factors. - * @returns {number} The total dice pool value. - */ - getDicePool() { - // Retrieve the HTML element - let html = this.element[0]; - // Get the ability value or set to 0 if not found - let abilValue = html.querySelector('#ability').options[html.querySelector('#ability').selectedIndex].value || 0; - // Get the skill value or set to 0 if not found - let skillValue = html.querySelector('#skill').options[html.querySelector('#skill').selectedIndex].dataset.pool || 0; - // Get the self control value - let selfControl = html.querySelector('#self_control').value; - // Calculate bonuses based on certain conditions - let bonuses = - (html.querySelector('#usingSpecialization').checked ? 1 : 0) + - (html.querySelector('#helped').checked ? 1 : 0) + - (html.querySelector('#usingTools').checked ? 1 : 0); - // Calculate the total dice pool - let total = parseInt(abilValue) + parseInt(selfControl) + parseInt(skillValue) + bonuses; - return total || 0; - } - - /** - * Retrieves the reroll value based on selected skill. - * @returns {number} The reroll value. - */ - getReroll() { - // Retrieve the HTML element - let html = this.element[0]; - // Get the selected skill index - let selected = html.querySelector('#skill').selectedIndex; - // Get the reroll value from the selected skill or set to 0 if not found - let reroll = html.querySelector('#skill').options[selected].dataset.reroll || 0; - return parseInt(reroll) || 0; - } - - /** - * Retrieves the difficulty value based on selected option. - * @returns {number} The difficulty value. - */ - - getDifficulty() { - // Retrieve the HTML element - let html = this.element[0]; - // Get the selected index for difficulty - let selected = html.querySelector('#difficulty').selectedIndex; - // Get the difficulty value from the selected option or set to 0 if not found - let diff = html.querySelector('#difficulty').options[selected].value || 0; - return parseInt(diff) || 0; - } - - /** - * Performs a dice roll based on the roll data and handles self control checks. - * @returns {Promise} A promise that resolves with the result of the dice roll. - */ - async roll() { - // Check if self control is required for the roll - if (this.rollData.self_control > 0) { - // Check if the actor has enough self control - if (this.rollData.actor.system.attributes.self_control.value < this.rollData.self_control) { - // Display a warning message if self control is insufficient - ui.notifications.warn('vous navez pas assez de sang-froid'); - // Re-render the dialog - this.render(true); - return false; // Exit the function if self control is insufficient - } - } - - // Deduct self control points if necessary - if (this.rollData.self_control > 0) { - // Update the actor's self control value - await this.rollData.actor.update({ "system.attributes.self_control.value": this.rollData.actor.system.attributes.self_control.value - this.rollData.self_control }); - } - - // Perform the dice roll using VermineUtils - return VermineUtils.roll({ ...this.rollData }); - } -} \ No newline at end of file diff --git a/module/system/dialogs/rollDialog.mjs b/module/system/dialogs/rollDialog.mjs new file mode 100644 index 0000000..6ba33fd --- /dev/null +++ b/module/system/dialogs/rollDialog.mjs @@ -0,0 +1,316 @@ +import { VermineUtils } from "../roll.mjs"; +/** + * Represents a dialog for rolling dice. + */ +export default class RollDialog extends Dialog { + + /** + * Creates a new RollDialog instance. + * @param {Object} data - The data for the dialog. + * @param {HTMLElement} html - The HTML content of the dialog. + * @param {Object} options - The options for the dialog. + * @param {Function} close - The callback function for closing the dialog. + */ + + constructor(data, html, options, close = undefined) { + let conf = { + title: "jet de dés", + content: html, + buttons: { + roll: { + icon: '', + label: "Lancer !", + callback: () => { + this.roll() + } + }, + cancel: { + icon: '', + label: "Annuler", + callback: () => { this.close() } + } + }, + close: close, + } + return super({ ...conf, ...data }, options); + }; + + /** + * Creates a new RollDialog instance. + * @param {Object} data - The data for the dialog. + * @param {HTMLElement} html - The HTML content of the dialog. + * @param {Object} options - The options for the dialog. + * @param {Function} close - The callback function for closing the dialog. + */ + static async create(data = { + label: null, + rolltype: null, + NoD: 1, + Reroll: false, + actorId: game.user.character.id + }) { + // Retrieve the actor data based on the actorId + data.actor = await game.actors.get(data.actorId); + data.availableSpecialties = data.actor.items.filter(it => it.type == "specialty"); + data.availableItems = data.actor.items.filter(it => it.type == "item"); + data.config = CONFIG.VERMINE; + // Define options for the dialog + let options = { classes: ["vermineDialog"], width: "fit-content", height: 'fit-content', 'z-index': 99999 }; + // Render the HTML template for the dialog + let html = await renderTemplate('systems/vermine2047/templates/dialogs/roll-dialog.hbs', data); + + // Return a new RollDialog instance with the provided data, HTML, and options + return new RollDialog(data, html, options); + } + + /** + * Retrieves the default options for the RollDialog. + */ + static get defaultOptions() { + return foundry.utils.mergeObject(super.defaultOptions, { + focus: true, + classes: ["dialog vermine-roll"], + + }); + } + /** + * Retrieves the data for the dialog. + * @returns {Object} The context data for the dialog. + */ + getData() { + // Get the context data from the superclass + let context = super.getData(); + context.data = this.data; + context.config = CONFIG.VERMINE; + + // Return the context data + return context; + + } + + prepareItems() { + return this.data.actor.items.filter(it => it.type == "item") + } + prepareSpecialties() { + return this.data.actor.items.filter(it => it.type == "specialty") + + } + + /** + * Activates event listeners for the dialog. + * @param {HTMLElement} html - The HTML element of the dialog. + */ + async activateListeners(html) { + // Activate event listeners from the superclass + super.activateListeners(html); + // Retrieve roll data and set up event listeners + await this.getRollData(); + let rollInputs = html.find('[data-roll'); + for (let inp of rollInputs) { + // Add event listener for roll input changes + inp.addEventListener('change', await this.getRollData.bind(this)) + }; + this.displaySpecialties(); + + let selectAbil = html.find('#ability')[0]; + // Set the maximum value for self control based on ability value + html.find("#self_control")[0].max = selectAbil.value; + selectAbil.addEventListener('change', this._onChangeAbility.bind(this)); + let selfControl = html.find('#self_control')[0] + // Add event listener for self control changes + selfControl.addEventListener('change', this._onChangeSelfControl.bind(this)); + + }; + + /** + * Retrieves the roll data for the dialog. + * @param {Event} ev - The event triggering the roll data retrieval. + */ + async getRollData(ev) { + console.log(this) + // Calculate and store the roll data + this.rollData = { + actor: this.data.actor, + NoD: this.getDicePool(), + Reroll: this.getReroll(), + difficulty: this.getDifficulty(), + handicap: this.getHandicap(), + rollType: this.getRollType(), + rollLabel: this.getLabel(), + totems: this.getTotems(), + self_control: this.getSelfControl(), + max_effort: this.getMaxEffort() + } + this.displaySpecialties(); + }; + + + /** + * Handles the change in self control value. + * @param {Event} ev - The event triggering the change in self control value. + */ + _onChangeSelfControl(ev) { + let html = this.element[0]; + // Update the displayed self control value based on the event + html.querySelector('#self_control_value').innerText = ev.currentTarget.value; + }; + getHandicap() { + let html = this.element[0]; + // Parse and return the self control value from the HTML element + let handicap = parseInt(html.querySelector('#handicap').value) + return handicap + } + getRollType() { + let html = this.element[0]; + // Update the displayed self control value based on the event + if (html.querySelector('select#skill').value) { + return "skill" + } return "ability" + } + getLabel() { + let html = this.element[0]; + if (this.getRollType() == "skill") { + return html.querySelector('select#skill').options[html.querySelector('select#skill').selectedIndex].dataset.label + } + return html.querySelector('select#ability').options[html.querySelector('select#ability').selectedIndex].dataset.label + } + displaySpecialties() { + console.log(this) + let specialties = this.element[0].querySelectorAll('[data-spec-skill]'); + for (let specEl of specialties) { + if (specEl.dataset.specSkill != this.getLabel()) { + specEl.style.display = "none"; + specEl.querySelector('input').checked = null; + } else { specEl.style.display = "inline" } + } + } + /** + * Retrieves the self control value from the HTML element. + * @returns {number} The self control value. + */ + getSelfControl() { + let html = this.element[0]; + // Parse and return the self control value from the HTML element + let selfControl = parseInt(html.querySelector('#self_control').value) + return selfControl + } + + /** + * Retrieves the maximum effort value from the HTML element. + * @returns {number} The maximum effort value. + */ + getMaxEffort() { + let html = this.element[0]; + // Retrieve and return the maximum effort value from the HTML element + return parseInt(html.querySelector('#ability').value); + } + + /** + * Retrieves the selected totems from the HTML element. + * @returns {Object} An object containing the selected totems. + */ + getTotems() { + let html = this.element[0]; + // Check and store the status of human and adapted totems + let totems = { + human: html.querySelector('#human-totem')?.checked, + adapted: html.querySelector('#adapted-totem')?.checked, + } + return totems + } + + /** + * Handles the change in ability value. + * @param {Event} ev - The event triggering the change in ability value. + */ + _onChangeAbility(ev) { + let html = this.element[0]; + // Retrieve the selected ability score and update related elements + let score = html.querySelector('#ability').options[html.querySelector('#ability').selectedIndex].value; + // Check if the score is a number, otherwise set it to 0 + if (!typeof score == "number") { + score = 0 + } + html.querySelector('#abilityScore').value = score; + html.querySelector('#self_control').max = score; + } + /** + * Retrieves the total dice pool based on various factors. + * @returns {number} The total dice pool value. + */ + getDicePool() { + // Retrieve the HTML element + let html = this.element[0]; + // Get the ability value or set to 0 if not found + let abilValue = html.querySelector('#ability').options[html.querySelector('#ability').selectedIndex].value || 0; + // Get the skill value or set to 0 if not found + let skillValue = html.querySelector('#skill').options[html.querySelector('#skill').selectedIndex].dataset.pool || 0; + // Get the self control value + let selfControl = html.querySelector('#self_control').value; + // Calculate bonuses based on certain conditions + console.log(html.querySelector('#usingTools').checked) + let bonuses = + (html.querySelector('#usingSpecialization')?.checked ? 1 : 0) + + (html.querySelector('#helped').checked ? 1 : 0) + + (html.querySelector('#usingTools').checked ? 1 : 0); + // Calculate the total dice pool + let total = parseInt(abilValue) + parseInt(selfControl) + parseInt(skillValue) + bonuses; + return total || 0; + } + + /** + * Retrieves the reroll value based on selected skill. + * @returns {number} The reroll value. + */ + getReroll() { + // Retrieve the HTML element + let html = this.element[0]; + // Get the selected skill index + let selected = html.querySelector('#skill').selectedIndex; + // Get the reroll value from the selected skill or set to 0 if not found + let reroll = html.querySelector('#skill').options[selected].dataset.reroll || 0; + return parseInt(reroll) || 0; + } + + /** + * Retrieves the difficulty value based on selected option. + * @returns {number} The difficulty value. + */ + + getDifficulty() { + // Retrieve the HTML element + let html = this.element[0]; + // Get the selected index for difficulty + let selected = html.querySelector('#difficulty').selectedIndex; + // Get the difficulty value from the selected option or set to 0 if not found + let diff = html.querySelector('#difficulty').options[selected].value || 0; + return parseInt(diff) || 0; + } + + /** + * Performs a dice roll based on the roll data and handles self control checks. + * @returns {Promise} A promise that resolves with the result of the dice roll. + */ + async roll() { + // Check if self control is required for the roll + if (this.rollData.self_control > 0) { + // Check if the actor has enough self control + if (this.rollData.actor.system.attributes.self_control.value < this.rollData.self_control) { + // Display a warning message if self control is insufficient + ui.notifications.warn('vous navez pas assez de sang-froid'); + // Re-render the dialog + this.render(true); + return false; // Exit the function if self control is insufficient + } + } + + // Deduct self control points if necessary + if (this.rollData.self_control > 0) { + // Update the actor's self control value + await this.rollData.actor.update({ "system.attributes.self_control.value": this.rollData.actor.system.attributes.self_control.value - this.rollData.self_control }); + } + + // Perform the dice roll using VermineUtils + return VermineUtils.roll({ ...this.rollData }); + } +} \ No newline at end of file diff --git a/module/system/dice3d.mjs b/module/system/dice3d.mjs index d2da01f..4317d00 100644 --- a/module/system/dice3d.mjs +++ b/module/system/dice3d.mjs @@ -10,32 +10,31 @@ export async function initUserDice(dice3d, user) { name: 'regular_' + user.name, description: "regular dice for " + user.name, category: "vermine 2047", - foreground: '#9F8003', + foreground: oppositeColor(baseColor), background: baseColor, outline: 'black', - texture: 'none', - material: 'plastic', - visibility: 'visible' - }); + visibility: 'visible', + + }, "preferred"); dice3d.addColorset({ name: 'human_' + user.name, description: "human totem dice for " + user.name, category: "vermine 2047", - foreground: '#9F8003', + foreground: oppositeColor(lightenColor(baseColor, 60)), background: lightenColor(baseColor, 60), outline: 'black', - material: 'plastic', - visibility: 'visible' + visibility: 'visible', + }); dice3d.addColorset({ name: 'adapted_' + user.name, description: "adapted totem dice for " + user.name, category: "vermine 2047", - foreground: '#9F8003', + foreground: oppositeColor(darkenColor(baseColor, 60)), background: darkenColor(baseColor, 60), outline: 'black', - material: 'plastic', - visibility: 'visible' + visibility: 'visible', + }); await user.setFlag("world", "diceInit", true); @@ -57,4 +56,11 @@ export function lightenColor(color, percent) { 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); +} +export function oppositeColor(color) { + const num = parseInt(color.replace('#', ''), 16); + const R = 255 - (num >> 16); + const G = 255 - ((num >> 8) & 0x00FF); + const B = 255 - (num & 0x0000FF); + return '#' + (0x1000000 + R * 0x10000 + G * 0x100 + 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 4d6eb12..b5cf391 100644 --- a/module/system/handlebars-manager.mjs +++ b/module/system/handlebars-manager.mjs @@ -35,8 +35,12 @@ export const preloadHandlebarsTemplates = async function () { // creature partials "systems/vermine2047/templates/actor/creature/creature-combat.hbs", - // additional templates - "systems/vermine2047/templates/roll-dialog.hbs", + // dialog templates + "systems/vermine2047/templates/dialogs/roll-dialog.hbs", + + //items damages + "systems/vermine2047/templates/item/partials/damages.html", + ]); }; @@ -98,7 +102,12 @@ export const registerHandlebarsHelpers = function () { return text; }); - + //return damge data + Handlebars.registerHelper('getDamagesData', function (damageObject, prop) { + let propObject = damageObject[prop] + let propValue = propObject[damageObject.value - 1] + return propValue + }); // return threat level information Handlebars.registerHelper('threatLevel', function (property, level, options) { if (level < 1 || level > 4) @@ -218,17 +227,8 @@ export const registerHandlebarsHelpers = function () { }); - Handlebars.registerHelper('range', function () { - var args = Array.prototype.slice.call(arguments), - rangeArgs = args.slice(0, -1), - options = args[args.length - 1]; - return range.apply(null, rangeArgs) - .map(function (num) { return options.fn(num); }) - .join(''); - }); - - // return age type information + // booleans if if equal if greater etc... Handlebars.registerHelper('ife', function (arg1, arg2, options) { return (arg1 == arg2) ? options.fn(this) : options.inverse(this); }); @@ -252,11 +252,34 @@ export const registerHandlebarsHelpers = function () { return (arg1.includes(arg2)) ? options.fn(this) : options.inverse(this); }); - Handlebars.registerHelper('repeat', function (times, start, block) { + + //math operations + + Handlebars.registerHelper('math_add', function (a, b, options) { + return (parseInt(a) + parseInt(b)) + }); + + Handlebars.registerHelper('math_subs', function (a, b, options) { + return (parseInt(a) - parseInt(b)) + }); + + Handlebars.registerHelper('math_mult', function (a, b, options) { + return (parseInt(a) * parseInt(b)) + }); + + Handlebars.registerHelper('math_div', function (a, b, options) { + return (parseInt(a) / parseInt(b)) + }); + + + + // loop with named index + Handlebars.registerHelper('repeat', function (times, start, indexLabel, block) { var accum = ''; + if (!indexLabel) { indexLabel = "index" } if (!start) { start = 0; } for (var i = start; i < times + start; ++i) { - block.data.index = i; + block.data[indexLabel] = i; block.data.first = i === start; block.data.last = i === (times + start - 1); accum += block.fn(this); @@ -264,4 +287,7 @@ export const registerHandlebarsHelpers = function () { return accum; }); + Handlebars.registerHelper("setVar", function (varName, varValue, options) { + options.data.root[varName] = varValue; + }); } \ No newline at end of file diff --git a/module/system/hooks.mjs b/module/system/hooks.mjs index 362e406..9eb40fd 100644 --- a/module/system/hooks.mjs +++ b/module/system/hooks.mjs @@ -1,4 +1,4 @@ -import { RollDialog } from "./dialogs.mjs"; +import RollDialog from "./dialogs/rollDialog.mjs"; import { initUserDice } from "./dice3d.mjs"; import { VermineUtils } from "./roll.mjs"; import { registerTours } from "./tour.mjs"; @@ -11,6 +11,11 @@ export const registerHooks = function () { Hooks.once('diceSoNiceReady', async (dice3d) => { dice3d.addSystem({ id: "Vermine2047", name: "Vermine 2047" }, "preferred"); + + game.users.forEach(user => { + initUserDice(dice3d, user) + }); + dice3d.addDicePreset({ type: "d10", labels: [ @@ -26,17 +31,17 @@ export const registerHooks = function () { "systems/vermine2047/assets/images/die/d10-0.webp", ], - system: "Vermine2047" - }); + system: "Vermine2047", - - game.users.forEach(user => { - initUserDice(dice3d, user) - }); + },); }); Hooks.on('renderChatMessage', async (message, html, data) => { + let rerollTitle = html[0].querySelector(".reroll-fromroll h4"); + if (rerollTitle) { + rerollTitle.addEventListener("click", () => { html[0].querySelector(".reroll").classList.toggle('visible') }) + } if (message.user._id != game.user._id || !game.user.isGM) { html[0].querySelectorAll("input").forEach(inp => inp.disabled = true); html[0].querySelectorAll("div.reroll-from-effort").forEach(el => el.style.display = "none") @@ -101,6 +106,7 @@ export const registerHooks = function () { if (actor.img == "icons/svg/mystery-man.svg") { actor.updateSource({ "img": `systems/vermine2047/assets/icons/actors/${actor.type}.webp` }); } + }); Hooks.on("preCreateItem", function (item) { @@ -136,18 +142,7 @@ export const registerHooks = function () { }*/ } }); - - /* 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("createActor", function (actor, options, id) { + actor.setFlag("world", "editMode", true) + }) +} \ No newline at end of file diff --git a/module/system/roll.mjs b/module/system/roll.mjs index 8c7ec41..7c215e1 100644 --- a/module/system/roll.mjs +++ b/module/system/roll.mjs @@ -13,9 +13,7 @@ export class VermineUtils { 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) { @@ -26,9 +24,7 @@ export class VermineUtils { } else { modFormula = "(1D10cs>=" + difficulty + `[adapted_${game.user.name}]*2)`; } - await actor.update({ - "system.adaptation.totems.adapted.value": actor.system.adaptation.totems.adapted.value - 1 - }) + }; // Construction de la formule de base @@ -45,6 +41,7 @@ export class VermineUtils { let roll = new Roll(formula, actor.getRollData()); //effectuer le lancé await roll.evaluate(); + roll.dice.forEach(die => die.options.appearance = { system: "vermine2047" }) //afficher le lancer 3d await VermineUtils.showDiceSoNice(roll); // afficher le résultat dans le chat diff --git a/module/vermine2047.mjs b/module/vermine2047.mjs index 3beab7f..f35f11f 100644 --- a/module/vermine2047.mjs +++ b/module/vermine2047.mjs @@ -18,7 +18,6 @@ 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 */ diff --git a/packs/adaptationsmutations/000178.log b/packs/adaptationsmutations/000220.log similarity index 100% rename from packs/adaptationsmutations/000178.log rename to packs/adaptationsmutations/000220.log diff --git a/packs/adaptationsmutations/CURRENT b/packs/adaptationsmutations/CURRENT index 0e27482..7d68d99 100644 --- a/packs/adaptationsmutations/CURRENT +++ b/packs/adaptationsmutations/CURRENT @@ -1 +1 @@ -MANIFEST-000177 +MANIFEST-000219 diff --git a/packs/adaptationsmutations/LOG b/packs/adaptationsmutations/LOG index cff334b..1bf5909 100644 --- a/packs/adaptationsmutations/LOG +++ b/packs/adaptationsmutations/LOG @@ -1,3 +1,3 @@ -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 +2024/05/13-06:46:44.023 2f70 Recovering log #218 +2024/05/13-06:46:44.027 2f70 Delete type=0 #218 +2024/05/13-06:46:44.028 2f70 Delete type=3 #217 diff --git a/packs/adaptationsmutations/LOG.old b/packs/adaptationsmutations/LOG.old index 903198e..37ee831 100644 --- a/packs/adaptationsmutations/LOG.old +++ b/packs/adaptationsmutations/LOG.old @@ -1,3 +1,3 @@ -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 +2024/05/13-06:37:40.648 22bc Recovering log #216 +2024/05/13-06:37:40.650 22bc Delete type=0 #216 +2024/05/13-06:37:40.650 22bc Delete type=3 #215 diff --git a/packs/adaptationsmutations/MANIFEST-000177 b/packs/adaptationsmutations/MANIFEST-000177 deleted file mode 100644 index 7bd1d8f..0000000 Binary files a/packs/adaptationsmutations/MANIFEST-000177 and /dev/null differ diff --git a/packs/adaptationsmutations/MANIFEST-000219 b/packs/adaptationsmutations/MANIFEST-000219 new file mode 100644 index 0000000..184f72e Binary files /dev/null and b/packs/adaptationsmutations/MANIFEST-000219 differ diff --git a/packs/deck-creatures/000178.log b/packs/deck-creatures/000220.log similarity index 100% rename from packs/deck-creatures/000178.log rename to packs/deck-creatures/000220.log diff --git a/packs/deck-creatures/CURRENT b/packs/deck-creatures/CURRENT index 0e27482..7d68d99 100644 --- a/packs/deck-creatures/CURRENT +++ b/packs/deck-creatures/CURRENT @@ -1 +1 @@ -MANIFEST-000177 +MANIFEST-000219 diff --git a/packs/deck-creatures/LOG b/packs/deck-creatures/LOG index e124eb0..50a3297 100644 --- a/packs/deck-creatures/LOG +++ b/packs/deck-creatures/LOG @@ -1,3 +1,3 @@ -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 +2024/05/13-06:46:44.093 2f70 Recovering log #218 +2024/05/13-06:46:44.098 2f70 Delete type=0 #218 +2024/05/13-06:46:44.098 2f70 Delete type=3 #217 diff --git a/packs/deck-creatures/LOG.old b/packs/deck-creatures/LOG.old index 9cabe3c..5587add 100644 --- a/packs/deck-creatures/LOG.old +++ b/packs/deck-creatures/LOG.old @@ -1,3 +1,3 @@ -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 +2024/05/13-06:37:40.710 22bc Recovering log #216 +2024/05/13-06:37:40.714 22bc Delete type=0 #216 +2024/05/13-06:37:40.715 22bc Delete type=3 #215 diff --git a/packs/deck-creatures/MANIFEST-000177 b/packs/deck-creatures/MANIFEST-000177 deleted file mode 100644 index 7bd1d8f..0000000 Binary files a/packs/deck-creatures/MANIFEST-000177 and /dev/null differ diff --git a/packs/deck-creatures/MANIFEST-000219 b/packs/deck-creatures/MANIFEST-000219 new file mode 100644 index 0000000..184f72e Binary files /dev/null and b/packs/deck-creatures/MANIFEST-000219 differ diff --git a/packs/historiques/000162.log b/packs/historiques/000204.log similarity index 100% rename from packs/historiques/000162.log rename to packs/historiques/000204.log diff --git a/packs/historiques/CURRENT b/packs/historiques/CURRENT index c1ddd5c..183d782 100644 --- a/packs/historiques/CURRENT +++ b/packs/historiques/CURRENT @@ -1 +1 @@ -MANIFEST-000161 +MANIFEST-000203 diff --git a/packs/historiques/LOG b/packs/historiques/LOG index 6939eb6..df5c933 100644 --- a/packs/historiques/LOG +++ b/packs/historiques/LOG @@ -1,3 +1,3 @@ -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 +2024/05/13-06:46:44.046 2f70 Recovering log #202 +2024/05/13-06:46:44.050 2f70 Delete type=0 #202 +2024/05/13-06:46:44.051 2f70 Delete type=3 #201 diff --git a/packs/historiques/LOG.old b/packs/historiques/LOG.old index e170284..a8ed1a0 100644 --- a/packs/historiques/LOG.old +++ b/packs/historiques/LOG.old @@ -1,3 +1,3 @@ -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 +2024/05/13-06:37:40.667 22bc Recovering log #200 +2024/05/13-06:37:40.671 22bc Delete type=0 #200 +2024/05/13-06:37:40.671 22bc Delete type=3 #199 diff --git a/packs/historiques/MANIFEST-000161 b/packs/historiques/MANIFEST-000161 deleted file mode 100644 index a378e95..0000000 Binary files a/packs/historiques/MANIFEST-000161 and /dev/null differ diff --git a/packs/historiques/MANIFEST-000203 b/packs/historiques/MANIFEST-000203 new file mode 100644 index 0000000..c60a65c Binary files /dev/null and b/packs/historiques/MANIFEST-000203 differ diff --git a/packs/pretires/000176.log b/packs/pretires/000218.log similarity index 100% rename from packs/pretires/000176.log rename to packs/pretires/000218.log diff --git a/packs/pretires/CURRENT b/packs/pretires/CURRENT index fb6ed1a..9aabe0c 100644 --- a/packs/pretires/CURRENT +++ b/packs/pretires/CURRENT @@ -1 +1 @@ -MANIFEST-000175 +MANIFEST-000217 diff --git a/packs/pretires/LOG b/packs/pretires/LOG index da18cc4..b1b9ada 100644 --- a/packs/pretires/LOG +++ b/packs/pretires/LOG @@ -1,3 +1,3 @@ -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 +2024/05/13-06:46:44.082 3304 Recovering log #216 +2024/05/13-06:46:44.087 3304 Delete type=0 #216 +2024/05/13-06:46:44.087 3304 Delete type=3 #215 diff --git a/packs/pretires/LOG.old b/packs/pretires/LOG.old index f2a6229..cbafbe2 100644 --- a/packs/pretires/LOG.old +++ b/packs/pretires/LOG.old @@ -1,3 +1,3 @@ -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 +2024/05/13-06:37:40.698 331c Recovering log #214 +2024/05/13-06:37:40.703 331c Delete type=0 #214 +2024/05/13-06:37:40.703 331c Delete type=3 #213 diff --git a/packs/pretires/MANIFEST-000175 b/packs/pretires/MANIFEST-000175 deleted file mode 100644 index 8f781b8..0000000 Binary files a/packs/pretires/MANIFEST-000175 and /dev/null differ diff --git a/packs/pretires/MANIFEST-000217 b/packs/pretires/MANIFEST-000217 new file mode 100644 index 0000000..2e1bfbd Binary files /dev/null and b/packs/pretires/MANIFEST-000217 differ diff --git a/packs/rites/000072.log b/packs/rites/000114.log similarity index 100% rename from packs/rites/000072.log rename to packs/rites/000114.log diff --git a/packs/rites/CURRENT b/packs/rites/CURRENT index be93edb..f97fd0f 100644 --- a/packs/rites/CURRENT +++ b/packs/rites/CURRENT @@ -1 +1 @@ -MANIFEST-000071 +MANIFEST-000113 diff --git a/packs/rites/LOG b/packs/rites/LOG index b94a8b2..d369ecd 100644 --- a/packs/rites/LOG +++ b/packs/rites/LOG @@ -1,3 +1,3 @@ -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 +2024/05/13-06:46:44.056 3304 Recovering log #112 +2024/05/13-06:46:44.062 3304 Delete type=0 #112 +2024/05/13-06:46:44.062 3304 Delete type=3 #111 diff --git a/packs/rites/LOG.old b/packs/rites/LOG.old index 3fe863d..ea641f3 100644 --- a/packs/rites/LOG.old +++ b/packs/rites/LOG.old @@ -1,3 +1,3 @@ -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 +2024/05/13-06:37:40.677 331c Recovering log #110 +2024/05/13-06:37:40.682 331c Delete type=0 #110 +2024/05/13-06:37:40.682 331c Delete type=3 #109 diff --git a/packs/rites/MANIFEST-000071 b/packs/rites/MANIFEST-000113 similarity index 68% rename from packs/rites/MANIFEST-000071 rename to packs/rites/MANIFEST-000113 index f914bb8..19d4d36 100644 Binary files a/packs/rites/MANIFEST-000071 and b/packs/rites/MANIFEST-000113 differ diff --git a/packs/tables/000069.log b/packs/tables/000111.log similarity index 100% rename from packs/tables/000069.log rename to packs/tables/000111.log diff --git a/packs/tables/CURRENT b/packs/tables/CURRENT index 284d53f..a451d53 100644 --- a/packs/tables/CURRENT +++ b/packs/tables/CURRENT @@ -1 +1 @@ -MANIFEST-000068 +MANIFEST-000110 diff --git a/packs/tables/LOG b/packs/tables/LOG index 86123c5..f5aec14 100644 --- a/packs/tables/LOG +++ b/packs/tables/LOG @@ -1,3 +1,3 @@ -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 +2024/05/13-06:46:44.069 2f70 Recovering log #109 +2024/05/13-06:46:44.074 2f70 Delete type=0 #109 +2024/05/13-06:46:44.075 2f70 Delete type=3 #108 diff --git a/packs/tables/LOG.old b/packs/tables/LOG.old index 6cdef0e..be1e512 100644 --- a/packs/tables/LOG.old +++ b/packs/tables/LOG.old @@ -1,3 +1,3 @@ -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 +2024/05/13-06:37:40.684 22bc Recovering log #107 +2024/05/13-06:37:40.693 22bc Delete type=0 #107 +2024/05/13-06:37:40.693 22bc Delete type=3 #106 diff --git a/packs/tables/MANIFEST-000068 b/packs/tables/MANIFEST-000110 similarity index 87% rename from packs/tables/MANIFEST-000068 rename to packs/tables/MANIFEST-000110 index d0bc23c..859065d 100644 Binary files a/packs/tables/MANIFEST-000068 and b/packs/tables/MANIFEST-000110 differ diff --git a/packs/traumatismes/000176.log b/packs/traumatismes/000218.log similarity index 100% rename from packs/traumatismes/000176.log rename to packs/traumatismes/000218.log diff --git a/packs/traumatismes/CURRENT b/packs/traumatismes/CURRENT index fb6ed1a..9aabe0c 100644 --- a/packs/traumatismes/CURRENT +++ b/packs/traumatismes/CURRENT @@ -1 +1 @@ -MANIFEST-000175 +MANIFEST-000217 diff --git a/packs/traumatismes/LOG b/packs/traumatismes/LOG index 7e84cb2..1729f66 100644 --- a/packs/traumatismes/LOG +++ b/packs/traumatismes/LOG @@ -1,3 +1,3 @@ -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 +2024/05/13-06:46:44.034 3304 Recovering log #216 +2024/05/13-06:46:44.038 3304 Delete type=0 #216 +2024/05/13-06:46:44.039 3304 Delete type=3 #215 diff --git a/packs/traumatismes/LOG.old b/packs/traumatismes/LOG.old index 7b447f7..c07b073 100644 --- a/packs/traumatismes/LOG.old +++ b/packs/traumatismes/LOG.old @@ -1,3 +1,3 @@ -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 +2024/05/13-06:37:40.650 331c Recovering log #214 +2024/05/13-06:37:40.662 331c Delete type=0 #214 +2024/05/13-06:37:40.662 331c Delete type=3 #213 diff --git a/packs/traumatismes/MANIFEST-000175 b/packs/traumatismes/MANIFEST-000175 deleted file mode 100644 index 8f781b8..0000000 Binary files a/packs/traumatismes/MANIFEST-000175 and /dev/null differ diff --git a/packs/traumatismes/MANIFEST-000217 b/packs/traumatismes/MANIFEST-000217 new file mode 100644 index 0000000..2e1bfbd Binary files /dev/null and b/packs/traumatismes/MANIFEST-000217 differ diff --git a/scss/base_work.scss b/scss/base_work.scss index 7c17990..b106795 100644 --- a/scss/base_work.scss +++ b/scss/base_work.scss @@ -23,6 +23,10 @@ font-style: normal; } +img.profile-img { + filter: drop-shadow(0px 0px 20px rgb(110, 133, 27)) +} + /* custom styles */ body.system-vermine2047 img#logo { content: url("/systems/vermine2047/assets/images/ui/logo_vermine_foundry.webp"); @@ -47,6 +51,8 @@ img { border: none; } + + ul.unstyled { list-style-type: none; padding: 0; @@ -130,14 +136,11 @@ ul.unstyled li { h4 { position: absolute; transform: rotate(-8deg); - opacity: 0.7; + opacity: 1; transition: 0.2s; } - &:hover h4 { - opacity: 1; - } } } @@ -263,6 +266,22 @@ ul.unstyled li { } } +.system-vermine2047 .sheet.actor .totem-details { + position: relative; + + img.img-totem { + transform-origin: 50% 50%; + filter: grayscale(1); + opacity: 0.15; + position: absolute; + width: 30%; + height: auto; + pointer-events: none; + aspect-ratio: 1/1; + left: 35%; + } +} + .system-vermine2047 .sheet.actor div.minor-totems { position: relative; background-color: #929c6f85; @@ -279,8 +298,29 @@ ul.unstyled li { } } + + + h5.human, + h5.adapted { + transition: 0.3s; + + img.img-totem { + filter: drop-shadow(0px 0px 20px rgb(0, 0, 0)); + } + + &.major { + transform: scale(1.1); + + & img { + filter: drop-shadow(0px 0px 10px red) + } + } + } + .totem-dice { + + .human-dice, .adapted-dice { display: flex; @@ -559,6 +599,18 @@ ul.unstyled li { height: 54px; } + +//Query pour les lignes de caract +@container ability-row (max-width: 240px) { + + .skill-dots, + span.hexa { + display: none + } + + +} + .system-vermine2047 .sheet.actor .ability { padding-right: 0.6rem; font-size: 0.8rem; @@ -566,13 +618,23 @@ ul.unstyled li { box-shadow: 0px 0px 15px rgba(128, 128, 128, 0) inset; transition: 0.2s; position: relative; + flex-wrap: nowrap; + min-width: min-content; + container-type: inline-size; + container-name: ability-row; + + &:hover { box-shadow: 0px 0px 15px gray inset; } + + + label { - min-width: fit-content; + min-width: 40%; + flex: 1.3; } @@ -583,21 +645,6 @@ ul.unstyled li { 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: center; - - &.checked { - background: radial-gradient(circle, rgb(0, 0, 0) 0%, rgba(0, 0, 0, 0.288) 100%); - } - - } div.specialties { position: absolute; @@ -611,6 +658,7 @@ ul.unstyled li { height: 100%; align-self: center; flex: 1.5; + min-width: fit-content; &>div { @@ -640,29 +688,68 @@ ul.unstyled li { } } -.vermine2047.sheet.actor input[type="radio"] { - &::after { - content: " "; - display: block; - width: 0.8rem; - height: 0.8rem; - background: radial-gradient(circle, rgba(217, 214, 204, 1) 0%, rgba(217, 214, 204, 1) 40%, rgb(85, 85, 85) 60%); - border-radius: 50%; - ; +.system-vermine2047 .sheet.actor .preferred { + + h4, + label { + text-shadow: 0px 0px 5px rgba(0, 128, 0, 0.411) + } +} + +.system-vermine2047 .sheet.actor #edit { + background-color: black; + color: white +} + +.system-vermine2047 .sheet.actor .reserve-grid { + line-height: 0.5rem; + transform-origin: 0% 50%; + max-width: fit-content; + align-items: center; + display: flex; + flex-direction: column; + + div.flexrow, + input, + .hexa { + margin: 0; + padding: 0; + min-width: 1rem; + min-height: 1rem; + } + + &>.flexrow { + position: relative; + max-width: fit-content; + justify-content: center; + } +} + +.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 { - &::after { - content: " "; - display: block; - width: 0.8rem; - height: 0.8rem; - background: radial-gradient(circle, rgb(75, 74, 74) 0%, rgb(27, 39, 28) 60%); - border-radius: 50%; - ; + background: radial-gradient(circle, rgb(0, 0, 0) 0%, rgba(0, 0, 0, 0.288) 100%); + } + ; + + input[type="radio"] { + opacity: 0; + + + &::after, + &::before { + display: none } - } } \ No newline at end of file diff --git a/scss/dialog.scss b/scss/dialog.scss new file mode 100644 index 0000000..69ff233 --- /dev/null +++ b/scss/dialog.scss @@ -0,0 +1,47 @@ +.window-app.vermineDialog { + .window-content { + background: url(/systems/vermine2047/assets/images/ui/box_background.webp) repeat; + + } + + .flexrow, + .grid { + justify-content: space-around; + box-shadow: 0px 1px 10px rgba(0, 0, 0, 0.555); + align-items: center; + padding: 0.5rem 0.2rem; + + &>* { + margin: 0 0.3rem; + } + + } + + ; + + label { + font-family: "DistressBlack", + sans-serif; + font-size: larger; + + } + + select { + max-width: fit-content; + + option { + max-width: fit-content + } + } + + .dialog-buttons { + button { + display: block; + flex: 0.3 + } + + display: flex; + justify-content: space-around; + flex-direction: row; + } +} \ No newline at end of file diff --git a/scss/item-sheet.scss b/scss/item-sheet.scss new file mode 100644 index 0000000..0c3a667 --- /dev/null +++ b/scss/item-sheet.scss @@ -0,0 +1,64 @@ +.sheet.item.vermine2047 { + .window-content { + .flexrow { + align-items: center; + box-shadow: 0px 5px 10px 0px black; + margin: 1rem; + } + + header, + h1, + h2, + h3, + h4, + h5 { + background: 50% 50%/cover no-repeat url(/systems/vermine2047/assets/images/ui/scotch.webp); + text-transform: uppercase; + font-family: "DistressBlack"; + margin-top: 1rem; + border-bottom: none; + } + + h2, + h3, + h4 { + text-align: center; + } + + h5 { + margin-bottom: 0; + } + + .resource { + border: none; + border-left: 1px solid gray; + padding: 0.2rem 1rem; + text-align: center; + + .flexrow { + min-width: 5rem; + box-shadow: none; + } + } + + .damages-row { + margin: 0; + + .radios { + margin: 0; + padding: 0.5rem; + } + } + + .damage-pannes, + .damage-state, + .damage-effect { + text-align: center; + font-family: "DistressBlack"; + + } + } + + + +} \ No newline at end of file diff --git a/scss/roll.scss b/scss/roll.scss index 0796d83..6fbb3dc 100644 --- a/scss/roll.scss +++ b/scss/roll.scss @@ -23,7 +23,6 @@ ol#chat-log { 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 { @@ -48,35 +47,42 @@ ol#chat-log { } h4 { - text-align: end; + text-align: center; } div.roll-total { - transform: rotate(-3deg) scale(1.3) translateX(2rem) translateY(0.5rem); + transform: rotate(-3deg) scale(1.2) 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; + width: 75%; } div.reroll { button { text-transform: uppercase; font-family: "DistressBlack"; - margin-top: 1rem; - box-shadow: 0px 0px 3px black; + padding: 0 1rem; + max-width: fit-content; + box-shadow: 0px 0px 2px black; background: 50% 0%/cover no-repeat url(/systems/vermine2047/assets/images/ui/scotch.webp); } - padding: 0 2rem; - padding-bottom: 2rem; + transition:0.3s; + max-height:1px; + overflow: hidden; justify-content: end; text-align: center; + align-items: center; + &.visible { + max-height: 15rem; + } } diff --git a/scss/special-inputs.scss b/scss/special-inputs.scss new file mode 100644 index 0000000..4f95052 --- /dev/null +++ b/scss/special-inputs.scss @@ -0,0 +1,140 @@ +input[type="range"] { + appearance: none; + background: transparent; + cursor: pointer; + width: 100%; + +} + +input[type="range"]::-webkit-slider-runnable-track { + background: url(../assets/images/ui/scotch.webp) no-repeat center; + background-size: 100% auto; + height: 0.4rem; + border: none; + box-shadow: 0px 0px 13px rgba(31, 26, 26, 0.979) inset; +} + +input[type="range"]::-webkit-slider-thumb { + + appearance: none; + margin-top: -0.3rem; + /* Centers thumb on the track */ + height: 1rem; + width: 1rem; + border: none; + border-radius: 50%; + background: url(/systems/vermine2047/assets/images/ui/totems/human.webp); + background-size: cover; + filter: contrast(2); + box-shadow: 0px 0px 10px black +} + +input[type="range"]:focus::-webkit-slider-thumb { + box-shadow: 0px 0px 10px yellow +} + +select { + border: none; + background: url(../assets/images/ui/scotch.webp); + background-size: 100% 100%; + box-shadow: 0px 0px 3px rgba(31, 26, 26, 0.979) inset; + + &[disabled] { + color: rgb(0, 0, 0); + text-shadow: 0px 0px 15px black; + } + + option { + appearance: none; + border: none; + background: url(../assets/images/ui/scotch.webp); + background-size: 100% 100%; + } +} + +input[type="checkbox"], +input[type="radio"] { + -webkit-appearance: none; + appearance: none; + background: transparent; + box-shadow: 0px 0px 3px rgb(133, 133, 78); + cursor: pointer; + width: 1.5rem; + height: 1rem; + border-radius: 0.4rem; + transition: 0.3s; + clip-path: polygon(25% 0%, 75% 0%, 100% 50%, 75% 100%, 25% 100%, 0% 50%); + box-shadow: 0px 0px 6px black inset; + background-color: rgba(61, 11, 11, 0.658); + + &[disabled="true"] { + filter: grayscale(1) + } + + &:after { + content: " "; + background: url(/systems/vermine2047/assets/images/ui/totems/human.webp); + background-size: 50% 150%; + background-repeat: no-repeat; + position: relative; + top: 10%; + left: 0%; + width: 100%; + height: 80%; + display: block; + border-radius: 0%; + padding: 0; + transition: 0.3s; + + + } + + + &:checked { + background-color: rgba(26, 107, 12, 0.658); + + + &:after { + font-weight: 900; + background-color: rgba(26, 1, 1, 0); + left: 50%; + + + + } + } +} + +input[type="radio"] { + + width: 1rem; + height: 1rem; + + &:after { + width: 0.8rem; + background-size: 100% 100%; + top: 5%; + left: 5%; + width: 90%; + height: 90%; + background-size: 30% 30%; + background-position: center; + + } + + &:not([disabled]):hover::after { + background-size: 90% 90%; + + } + + &:checked::after { + content: ""; + background-size: 70% 70%; + top: 5%; + left: 5%; + position: relative; + background-color: rgba(26, 1, 1, 0); + + + } +} \ No newline at end of file diff --git a/scss/vermine2047.scss b/scss/vermine2047.scss index b56b547..cc5e7a2 100644 --- a/scss/vermine2047.scss +++ b/scss/vermine2047.scss @@ -1,3 +1,113 @@ @import "./base_work.scss"; @import "./style.scss"; -@import "./roll.scss" \ No newline at end of file +@import "./roll.scss"; +@import "item-sheet.scss"; +@import "dialog.scss"; +@import "special-inputs.scss"; + + +// overwrites variables +:root { + --color-text-light-highlight: #b0d9b0; + --color-text-light-heading: #9fc7d8; + --color-text-light-primary: #a4b5b3; + --color-text-dark-primary: #131919; + --color-text-dark-secondary: #444b4a; + --color-text-dark-header: #1d2223; + --color-text-dark-inactive: #71797a; + --color-text-hyperlink: #0064ff; + --color-text-light-0: #fff; + --color-text-light-1: #e0f0f0; + --color-text-light-2: #c0e0e0; + --color-text-light-3: #a0d0d0; + --color-text-light-4: #80c0c0; + --color-text-light-5: #60b0b0; + --color-text-light-6: #40a0a0; + --color-text-light-7: #208080; + --color-text-dark-1: #111; + --color-text-dark-2: #222; + --color-text-dark-3: #444; + --color-text-dark-4: #555; + --color-text-dark-5: #666; + --color-text-dark-6: #777; + --color-border-light-1: #b0d9b0; + --color-border-light-2: #80c0c0; + --color-border-dark-1: #131919; + --color-border-dark-2: #1d2223; + --color-border-dark-3: #2d3333; + --color-border-dark-4: #3d4444; + --color-border-dark-5: #668888; + --color-shadow-primary: #0000ff; + --color-shadow-highlight: #0064ff; + --color-shadow-dark: #000; + --color-underline-inactive: #71797a; + --color-underline-active: #1a1944; + --color-underline-header: #222782; + --color-border-light-highlight: #b0d9b0; + --color-border-light-primary: #a4b5b3; + --color-border-light-secondary: #9fc7d8; + --color-border-light-tertiary: #71797a; + --color-border-dark: #000; + --color-border-dark-primary: #131919; + --color-border-dark-secondary: #1d2223; + --color-border-dark-tertiary: #444b4a; + --color-border-highlight: #0064ff; + --color-border-highlight-alt: #0000ff; + --color-bg-btn-minor-inactive: #9fc7d8; + --color-bg-btn-minor-active: #a4b5b3; + --color-bg-option: #ccdada; + --color-checkbox-checked: #666; + --color-ownership-none: #00ff55; + --color-ownership-observer: #71797a; + --color-ownership-owner: #a4b5b3; + --z-index-canvas: 0; + --z-index-app: 30; + --z-index-ui: 60; + --z-index-window: 100; + --z-index-tooltip: 9999; + --sidebar-width: 300px; + --sidebar-header-height: 32px; + --sidebar-item-height: 48px; + --hotbar-height: 52px; + --hotbar-width: 578px; + --macro-size: 50px; + --players-width: 200px; + --form-field-height: 26px; + --font-primary: "Signika", sans-serif; + --font-mono: monospace; + --font-awesome: "Font Awesome 6 Pro"; + --font-size-11: 0.6875rem; + --font-size-12: 0.75rem; + --font-size-13: 0.8125rem; + --font-size-14: 0.875rem; + --font-size-16: 1rem; + --font-size-18: 1.125rem; + --font-size-20: 1.25rem; + --font-size-24: 1.5rem; + --font-size-28: 1.75rem; + --font-size-32: 2rem; + --font-size-48: 3rem; + --line-height-12: 0.75rem; + --line-height-16: 1rem; + --line-height-20: 1.25rem; + --line-height-30: 1.875rem; + --color-level-info: #b95c87; + --color-level-warning: #04b184; + --color-level-error: #03750; + --color-level-success: #3c266c; +} + +/* ----------------------------------------- */ +/* Scrollbar +/* ----------------------------------------- */ +::-webkit-scrollbar-thumb { + outline: none; + border-radius: 3px; + background: #577822; + border: 1px solid var(--color-border-highlight); +} + +::-webkit-scrollbar { + width: 3px; + height: 3px; +} \ No newline at end of file diff --git a/template.json b/template.json index 42bc32e..2170f07 100644 --- a/template.json +++ b/template.json @@ -136,6 +136,33 @@ "category": "social" } }, + "skill_categories": { + "preferred": "", + "man": { + "label": "VERMINE.skill_category.man", + "preferred": false + }, + "animal": { + "label": "VERMINE.skill_category.animal", + "preferred": false + }, + "tool": { + "label": "VERMINE.skill_category.tool", + "preferred": false + }, + "weapon": { + "label": "VERMINE.skill_category.weapon", + "preferred": false + }, + "survival": { + "label": "VERMINE.skill_category.survival", + "preferred": false + }, + "world": { + "label": "VERMINE.skill_category.world", + "preferred": false + } + }, "skills": { "arts": { "value": 0, diff --git a/templates/actor/actor-character-sheet.hbs b/templates/actor/actor-character-sheet.hbs index 8baeaa4..a71a403 100644 --- a/templates/actor/actor-character-sheet.hbs +++ b/templates/actor/actor-character-sheet.hbs @@ -1,10 +1,21 @@