diff --git a/assets/icons/misc-icons/armor-resist.svg b/assets/icons/misc-icons/armor-resist.svg new file mode 100644 index 00000000..75a52339 --- /dev/null +++ b/assets/icons/misc-icons/armor-resist.svg @@ -0,0 +1,118 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/icons/misc-icons/special-resist.svg b/assets/icons/misc-icons/special-resist.svg new file mode 100644 index 00000000..cde7629d --- /dev/null +++ b/assets/icons/misc-icons/special-resist.svg @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/css/style.min.css b/css/style.min.css index 2d6fbba9..2cd249a5 100644 --- a/css/style.min.css +++ b/css/style.min.css @@ -1991,6 +1991,61 @@ template { :root * .comp.consequence-display-container.consequence-accepted * .consequence-icon-container { top: -3px !important; } +:root .comp.consequence-display-container.consequence-accepted.consequence-resisted, +:root * .comp.consequence-display-container.consequence-accepted.consequence-resisted { + min-height: 60px; +} +:root .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted, +:root * .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted { + position: absolute; + width: 100%; + top: 11px; + left: 20px; + outline: 1px solid magenta !important; + z-index: 3; +} +:root .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .sub-consequence-resisted-roll-result .resistance-roll-intro, +:root * .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .sub-consequence-resisted-roll-result .resistance-roll-intro { + display: none; +} +:root .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .consequence-icon-container, +:root * .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .consequence-icon-container { + display: none; +} +:root .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .consequence-type-container, +:root * .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .consequence-type-container { + position: absolute; + top: 0px; + left: 0px; + width: 100%; +} +:root .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .special-resist-overlay, +:root * .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .special-resist-overlay { + position: absolute; + left: 0; + top: 0; + height: 100%; + width: 100%; +} +:root .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .special-resist-overlay .special-resist-overlay-img, +:root * .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .special-resist-overlay .special-resist-overlay-img { + position: absolute; + left: 0; + top: 0; + height: 100%; +} +:root .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted ~ .consequence-icon-container, +:root * .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted ~ .consequence-icon-container { + transform: translate(-20px, 0px); +} +:root .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted ~ .consequence-type-container, +:root * .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted ~ .consequence-type-container { + transform: translate(-20px, 0px); +} +:root .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted ~ .consequence-name-container, +:root * .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted ~ .consequence-name-container { + opacity: 0; +} :root .comp.consequence-display-container .base-consequence, :root * .comp.consequence-display-container .base-consequence { --csq-icon-dark: var(--blades-black); @@ -3785,6 +3840,51 @@ template { :root body.vtt.game.system-eunos-blades #clocks-overlay .comp.consequence-display-container.consequence-accepted .consequence-icon-container, :root body.vtt.game.system-eunos-blades #clocks-overlay .comp.consequence-display-container.consequence-accepted * .consequence-icon-container { top: -3px !important; } +:root body.vtt.game.system-eunos-blades #clocks-overlay .comp.consequence-display-container.consequence-accepted.consequence-resisted { + min-height: 60px; +} +:root body.vtt.game.system-eunos-blades #clocks-overlay .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted { + position: absolute; + width: 100%; + top: 11px; + left: 20px; + outline: 1px solid magenta !important; + z-index: 3; +} +:root body.vtt.game.system-eunos-blades #clocks-overlay .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .sub-consequence-resisted-roll-result .resistance-roll-intro { + display: none; +} +:root body.vtt.game.system-eunos-blades #clocks-overlay .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .consequence-icon-container { + display: none; +} +:root body.vtt.game.system-eunos-blades #clocks-overlay .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .consequence-type-container { + position: absolute; + top: 0px; + left: 0px; + width: 100%; +} +:root body.vtt.game.system-eunos-blades #clocks-overlay .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .special-resist-overlay { + position: absolute; + left: 0; + top: 0; + height: 100%; + width: 100%; +} +:root body.vtt.game.system-eunos-blades #clocks-overlay .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .special-resist-overlay .special-resist-overlay-img { + position: absolute; + left: 0; + top: 0; + height: 100%; +} +:root body.vtt.game.system-eunos-blades #clocks-overlay .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted ~ .consequence-icon-container { + transform: translate(-20px, 0px); +} +:root body.vtt.game.system-eunos-blades #clocks-overlay .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted ~ .consequence-type-container { + transform: translate(-20px, 0px); +} +:root body.vtt.game.system-eunos-blades #clocks-overlay .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted ~ .consequence-name-container { + opacity: 0; +} :root body.vtt.game.system-eunos-blades #clocks-overlay .comp.consequence-display-container .base-consequence { --csq-icon-dark: var(--blades-black); --csq-icon-med: var(--blades-grey); @@ -7090,6 +7190,91 @@ template { :root body.vtt.game.system-eunos-blades #players .comp.consequence-display-container.consequence-accepted * .consequence-icon-container { top: -3px !important; } +:root body.vtt.game.system-eunos-blades #interface .comp.consequence-display-container.consequence-accepted.consequence-resisted, +:root body.vtt.game.system-eunos-blades #controls .comp.consequence-display-container.consequence-accepted.consequence-resisted, +:root body.vtt.game.system-eunos-blades #navigation .comp.consequence-display-container.consequence-accepted.consequence-resisted, +:root body.vtt.game.system-eunos-blades #hotbar .comp.consequence-display-container.consequence-accepted.consequence-resisted, +:root body.vtt.game.system-eunos-blades #players .comp.consequence-display-container.consequence-accepted.consequence-resisted { + min-height: 60px; +} +:root body.vtt.game.system-eunos-blades #interface .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted, +:root body.vtt.game.system-eunos-blades #controls .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted, +:root body.vtt.game.system-eunos-blades #navigation .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted, +:root body.vtt.game.system-eunos-blades #hotbar .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted, +:root body.vtt.game.system-eunos-blades #players .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted { + position: absolute; + width: 100%; + top: 11px; + left: 20px; + outline: 1px solid magenta !important; + z-index: 3; +} +:root body.vtt.game.system-eunos-blades #interface .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .sub-consequence-resisted-roll-result .resistance-roll-intro, +:root body.vtt.game.system-eunos-blades #controls .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .sub-consequence-resisted-roll-result .resistance-roll-intro, +:root body.vtt.game.system-eunos-blades #navigation .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .sub-consequence-resisted-roll-result .resistance-roll-intro, +:root body.vtt.game.system-eunos-blades #hotbar .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .sub-consequence-resisted-roll-result .resistance-roll-intro, +:root body.vtt.game.system-eunos-blades #players .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .sub-consequence-resisted-roll-result .resistance-roll-intro { + display: none; +} +:root body.vtt.game.system-eunos-blades #interface .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .consequence-icon-container, +:root body.vtt.game.system-eunos-blades #controls .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .consequence-icon-container, +:root body.vtt.game.system-eunos-blades #navigation .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .consequence-icon-container, +:root body.vtt.game.system-eunos-blades #hotbar .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .consequence-icon-container, +:root body.vtt.game.system-eunos-blades #players .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .consequence-icon-container { + display: none; +} +:root body.vtt.game.system-eunos-blades #interface .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .consequence-type-container, +:root body.vtt.game.system-eunos-blades #controls .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .consequence-type-container, +:root body.vtt.game.system-eunos-blades #navigation .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .consequence-type-container, +:root body.vtt.game.system-eunos-blades #hotbar .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .consequence-type-container, +:root body.vtt.game.system-eunos-blades #players .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .consequence-type-container { + position: absolute; + top: 0px; + left: 0px; + width: 100%; +} +:root body.vtt.game.system-eunos-blades #interface .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .special-resist-overlay, +:root body.vtt.game.system-eunos-blades #controls .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .special-resist-overlay, +:root body.vtt.game.system-eunos-blades #navigation .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .special-resist-overlay, +:root body.vtt.game.system-eunos-blades #hotbar .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .special-resist-overlay, +:root body.vtt.game.system-eunos-blades #players .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .special-resist-overlay { + position: absolute; + left: 0; + top: 0; + height: 100%; + width: 100%; +} +:root body.vtt.game.system-eunos-blades #interface .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .special-resist-overlay .special-resist-overlay-img, +:root body.vtt.game.system-eunos-blades #controls .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .special-resist-overlay .special-resist-overlay-img, +:root body.vtt.game.system-eunos-blades #navigation .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .special-resist-overlay .special-resist-overlay-img, +:root body.vtt.game.system-eunos-blades #hotbar .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .special-resist-overlay .special-resist-overlay-img, +:root body.vtt.game.system-eunos-blades #players .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .special-resist-overlay .special-resist-overlay-img { + position: absolute; + left: 0; + top: 0; + height: 100%; +} +:root body.vtt.game.system-eunos-blades #interface .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted ~ .consequence-icon-container, +:root body.vtt.game.system-eunos-blades #controls .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted ~ .consequence-icon-container, +:root body.vtt.game.system-eunos-blades #navigation .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted ~ .consequence-icon-container, +:root body.vtt.game.system-eunos-blades #hotbar .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted ~ .consequence-icon-container, +:root body.vtt.game.system-eunos-blades #players .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted ~ .consequence-icon-container { + transform: translate(-20px, 0px); +} +:root body.vtt.game.system-eunos-blades #interface .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted ~ .consequence-type-container, +:root body.vtt.game.system-eunos-blades #controls .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted ~ .consequence-type-container, +:root body.vtt.game.system-eunos-blades #navigation .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted ~ .consequence-type-container, +:root body.vtt.game.system-eunos-blades #hotbar .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted ~ .consequence-type-container, +:root body.vtt.game.system-eunos-blades #players .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted ~ .consequence-type-container { + transform: translate(-20px, 0px); +} +:root body.vtt.game.system-eunos-blades #interface .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted ~ .consequence-name-container, +:root body.vtt.game.system-eunos-blades #controls .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted ~ .consequence-name-container, +:root body.vtt.game.system-eunos-blades #navigation .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted ~ .consequence-name-container, +:root body.vtt.game.system-eunos-blades #hotbar .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted ~ .consequence-name-container, +:root body.vtt.game.system-eunos-blades #players .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted ~ .consequence-name-container { + opacity: 0; +} :root body.vtt.game.system-eunos-blades #interface .comp.consequence-display-container .base-consequence, :root body.vtt.game.system-eunos-blades #controls .comp.consequence-display-container .base-consequence, :root body.vtt.game.system-eunos-blades #navigation .comp.consequence-display-container .base-consequence, @@ -10160,6 +10345,91 @@ template { :root body.vtt.game.system-eunos-blades #players #chat .comp.consequence-display-container.consequence-accepted * .consequence-icon-container { top: -3px !important; } +:root body.vtt.game.system-eunos-blades #interface #chat .comp.consequence-display-container.consequence-accepted.consequence-resisted, +:root body.vtt.game.system-eunos-blades #controls #chat .comp.consequence-display-container.consequence-accepted.consequence-resisted, +:root body.vtt.game.system-eunos-blades #navigation #chat .comp.consequence-display-container.consequence-accepted.consequence-resisted, +:root body.vtt.game.system-eunos-blades #hotbar #chat .comp.consequence-display-container.consequence-accepted.consequence-resisted, +:root body.vtt.game.system-eunos-blades #players #chat .comp.consequence-display-container.consequence-accepted.consequence-resisted { + min-height: 60px; +} +:root body.vtt.game.system-eunos-blades #interface #chat .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted, +:root body.vtt.game.system-eunos-blades #controls #chat .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted, +:root body.vtt.game.system-eunos-blades #navigation #chat .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted, +:root body.vtt.game.system-eunos-blades #hotbar #chat .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted, +:root body.vtt.game.system-eunos-blades #players #chat .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted { + position: absolute; + width: 100%; + top: 11px; + left: 20px; + outline: 1px solid magenta !important; + z-index: 3; +} +:root body.vtt.game.system-eunos-blades #interface #chat .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .sub-consequence-resisted-roll-result .resistance-roll-intro, +:root body.vtt.game.system-eunos-blades #controls #chat .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .sub-consequence-resisted-roll-result .resistance-roll-intro, +:root body.vtt.game.system-eunos-blades #navigation #chat .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .sub-consequence-resisted-roll-result .resistance-roll-intro, +:root body.vtt.game.system-eunos-blades #hotbar #chat .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .sub-consequence-resisted-roll-result .resistance-roll-intro, +:root body.vtt.game.system-eunos-blades #players #chat .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .sub-consequence-resisted-roll-result .resistance-roll-intro { + display: none; +} +:root body.vtt.game.system-eunos-blades #interface #chat .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .consequence-icon-container, +:root body.vtt.game.system-eunos-blades #controls #chat .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .consequence-icon-container, +:root body.vtt.game.system-eunos-blades #navigation #chat .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .consequence-icon-container, +:root body.vtt.game.system-eunos-blades #hotbar #chat .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .consequence-icon-container, +:root body.vtt.game.system-eunos-blades #players #chat .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .consequence-icon-container { + display: none; +} +:root body.vtt.game.system-eunos-blades #interface #chat .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .consequence-type-container, +:root body.vtt.game.system-eunos-blades #controls #chat .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .consequence-type-container, +:root body.vtt.game.system-eunos-blades #navigation #chat .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .consequence-type-container, +:root body.vtt.game.system-eunos-blades #hotbar #chat .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .consequence-type-container, +:root body.vtt.game.system-eunos-blades #players #chat .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .consequence-type-container { + position: absolute; + top: 0px; + left: 0px; + width: 100%; +} +:root body.vtt.game.system-eunos-blades #interface #chat .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .special-resist-overlay, +:root body.vtt.game.system-eunos-blades #controls #chat .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .special-resist-overlay, +:root body.vtt.game.system-eunos-blades #navigation #chat .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .special-resist-overlay, +:root body.vtt.game.system-eunos-blades #hotbar #chat .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .special-resist-overlay, +:root body.vtt.game.system-eunos-blades #players #chat .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .special-resist-overlay { + position: absolute; + left: 0; + top: 0; + height: 100%; + width: 100%; +} +:root body.vtt.game.system-eunos-blades #interface #chat .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .special-resist-overlay .special-resist-overlay-img, +:root body.vtt.game.system-eunos-blades #controls #chat .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .special-resist-overlay .special-resist-overlay-img, +:root body.vtt.game.system-eunos-blades #navigation #chat .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .special-resist-overlay .special-resist-overlay-img, +:root body.vtt.game.system-eunos-blades #hotbar #chat .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .special-resist-overlay .special-resist-overlay-img, +:root body.vtt.game.system-eunos-blades #players #chat .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .special-resist-overlay .special-resist-overlay-img { + position: absolute; + left: 0; + top: 0; + height: 100%; +} +:root body.vtt.game.system-eunos-blades #interface #chat .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted ~ .consequence-icon-container, +:root body.vtt.game.system-eunos-blades #controls #chat .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted ~ .consequence-icon-container, +:root body.vtt.game.system-eunos-blades #navigation #chat .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted ~ .consequence-icon-container, +:root body.vtt.game.system-eunos-blades #hotbar #chat .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted ~ .consequence-icon-container, +:root body.vtt.game.system-eunos-blades #players #chat .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted ~ .consequence-icon-container { + transform: translate(-20px, 0px); +} +:root body.vtt.game.system-eunos-blades #interface #chat .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted ~ .consequence-type-container, +:root body.vtt.game.system-eunos-blades #controls #chat .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted ~ .consequence-type-container, +:root body.vtt.game.system-eunos-blades #navigation #chat .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted ~ .consequence-type-container, +:root body.vtt.game.system-eunos-blades #hotbar #chat .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted ~ .consequence-type-container, +:root body.vtt.game.system-eunos-blades #players #chat .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted ~ .consequence-type-container { + transform: translate(-20px, 0px); +} +:root body.vtt.game.system-eunos-blades #interface #chat .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted ~ .consequence-name-container, +:root body.vtt.game.system-eunos-blades #controls #chat .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted ~ .consequence-name-container, +:root body.vtt.game.system-eunos-blades #navigation #chat .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted ~ .consequence-name-container, +:root body.vtt.game.system-eunos-blades #hotbar #chat .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted ~ .consequence-name-container, +:root body.vtt.game.system-eunos-blades #players #chat .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted ~ .consequence-name-container { + opacity: 0; +} :root body.vtt.game.system-eunos-blades #interface #chat .comp.consequence-display-container .base-consequence, :root body.vtt.game.system-eunos-blades #controls #chat .comp.consequence-display-container .base-consequence, :root body.vtt.game.system-eunos-blades #navigation #chat .comp.consequence-display-container .base-consequence, @@ -12828,6 +13098,17 @@ template { :root body.vtt.game.system-eunos-blades #players #chat #chat-log::-webkit-scrollbar { display: none; } +:root body.vtt.game.system-eunos-blades #interface #chat #chat-log, :root body.vtt.game.system-eunos-blades #interface #chat #chat-log *, +:root body.vtt.game.system-eunos-blades #controls #chat #chat-log, +:root body.vtt.game.system-eunos-blades #controls #chat #chat-log *, +:root body.vtt.game.system-eunos-blades #navigation #chat #chat-log, +:root body.vtt.game.system-eunos-blades #navigation #chat #chat-log *, +:root body.vtt.game.system-eunos-blades #hotbar #chat #chat-log, +:root body.vtt.game.system-eunos-blades #hotbar #chat #chat-log *, +:root body.vtt.game.system-eunos-blades #players #chat #chat-log, +:root body.vtt.game.system-eunos-blades #players #chat #chat-log * { + --font-primary: "Beaufort", ; +} :root body.vtt.game.system-eunos-blades #interface #chat .flexrow.jump-to-bottom, :root body.vtt.game.system-eunos-blades #controls #chat .flexrow.jump-to-bottom, :root body.vtt.game.system-eunos-blades #navigation #chat .flexrow.jump-to-bottom, @@ -12863,6 +13144,23 @@ template { :root body.vtt.game.system-eunos-blades #navigation #chat .chat-message[class*=-roll], :root body.vtt.game.system-eunos-blades #hotbar #chat .chat-message[class*=-roll], :root body.vtt.game.system-eunos-blades #players #chat .chat-message[class*=-roll] { + background: var(--blades-black-dark); + background: transparent; + border: 2px ouset var(--blades-white); + overflow: visible; + padding: 0; + margin: var(--chat-vertical-gap) 0px; + position: relative; +} +:root body.vtt.game.system-eunos-blades #interface #chat .chat-message[class*=-roll], :root body.vtt.game.system-eunos-blades #interface #chat .chat-message[class*=-roll] *, +:root body.vtt.game.system-eunos-blades #controls #chat .chat-message[class*=-roll], +:root body.vtt.game.system-eunos-blades #controls #chat .chat-message[class*=-roll] *, +:root body.vtt.game.system-eunos-blades #navigation #chat .chat-message[class*=-roll], +:root body.vtt.game.system-eunos-blades #navigation #chat .chat-message[class*=-roll] *, +:root body.vtt.game.system-eunos-blades #hotbar #chat .chat-message[class*=-roll], +:root body.vtt.game.system-eunos-blades #hotbar #chat .chat-message[class*=-roll] *, +:root body.vtt.game.system-eunos-blades #players #chat .chat-message[class*=-roll], +:root body.vtt.game.system-eunos-blades #players #chat .chat-message[class*=-roll] * { --chat-header-height: 15px; --chat-vertical-gap: 15px; --resistance-right-shift: 60px; @@ -12876,15 +13174,8 @@ template { --bg-fail: transparent; --dice-strip-bg: var(--blades-black-dark); --top-die-animation: none; - --ghost-die-animation: none; - --ghost-die-filter: blur(1px) sepia(1) saturate(2) hue-rotate(319deg) brightness(0.35); - background: var(--blades-black-dark); - background: transparent; - border: 2px ouset var(--blades-white); - overflow: visible; - padding: 0; - margin: var(--chat-vertical-gap) 0px; - position: relative; + --ghost-die-animation: die-ghost 2s ease infinite; + --ghost-die-filter: none; } :root body.vtt.game.system-eunos-blades #interface #chat .chat-message[class*=-roll] .message-header, :root body.vtt.game.system-eunos-blades #controls #chat .chat-message[class*=-roll] .message-header, @@ -13183,6 +13474,7 @@ template { transform-origin: 50% 50%; overflow: hidden; border-radius: calc(0.2 * var(--die-size)); + scale: 1.25; } :root body.vtt.game.system-eunos-blades #interface #chat .chat-message[class*=-roll] .message-content .blades-roll .dice-roll-strip .blades-die img, :root body.vtt.game.system-eunos-blades #controls #chat .chat-message[class*=-roll] .message-content .blades-roll .dice-roll-strip .blades-die img, @@ -13198,7 +13490,6 @@ template { :root body.vtt.game.system-eunos-blades #navigation #chat .chat-message[class*=-roll] .message-content .blades-roll .dice-roll-strip .blades-die.blades-die-critical, :root body.vtt.game.system-eunos-blades #hotbar #chat .chat-message[class*=-roll] .message-content .blades-roll .dice-roll-strip .blades-die.blades-die-critical, :root body.vtt.game.system-eunos-blades #players #chat .chat-message[class*=-roll] .message-content .blades-roll .dice-roll-strip .blades-die.blades-die-critical { - box-shadow: 0px 0px 5px 3px var(--blades-gold-bright); animation: var(--top-die-animation); z-index: 1; } @@ -13208,7 +13499,6 @@ template { :root body.vtt.game.system-eunos-blades #hotbar #chat .chat-message[class*=-roll] .message-content .blades-roll .dice-roll-strip .blades-die.blades-die-critical:first-child + .blades-die-critical, :root body.vtt.game.system-eunos-blades #players #chat .chat-message[class*=-roll] .message-content .blades-roll .dice-roll-strip .blades-die.blades-die-critical:first-child + .blades-die-critical { margin-left: 3px; - box-shadow: 0px 0px 5px 3px var(--blades-gold-bright); animation: var(--top-die-animation); animation-delay: 0.15s; } @@ -13217,7 +13507,6 @@ template { :root body.vtt.game.system-eunos-blades #navigation #chat .chat-message[class*=-roll] .message-content .blades-roll .dice-roll-strip .blades-die.blades-die-success:first-child, :root body.vtt.game.system-eunos-blades #hotbar #chat .chat-message[class*=-roll] .message-content .blades-roll .dice-roll-strip .blades-die.blades-die-success:first-child, :root body.vtt.game.system-eunos-blades #players #chat .chat-message[class*=-roll] .message-content .blades-roll .dice-roll-strip .blades-die.blades-die-success:first-child { - filter: drop-shadow(0px 0px calc(var(--die-size) * 0.1) var(--blades-white-bright)); animation: var(--top-die-animation); } :root body.vtt.game.system-eunos-blades #interface #chat .chat-message[class*=-roll] .message-content .blades-roll .dice-roll-strip .blades-die.blades-die-partial:first-child, @@ -13225,7 +13514,6 @@ template { :root body.vtt.game.system-eunos-blades #navigation #chat .chat-message[class*=-roll] .message-content .blades-roll .dice-roll-strip .blades-die.blades-die-partial:first-child, :root body.vtt.game.system-eunos-blades #hotbar #chat .chat-message[class*=-roll] .message-content .blades-roll .dice-roll-strip .blades-die.blades-die-partial:first-child, :root body.vtt.game.system-eunos-blades #players #chat .chat-message[class*=-roll] .message-content .blades-roll .dice-roll-strip .blades-die.blades-die-partial:first-child { - box-shadow: 0px 0px 5px var(--blades-white); animation: var(--top-die-animation); } :root body.vtt.game.system-eunos-blades #interface #chat .chat-message[class*=-roll] .message-content .blades-roll .dice-roll-strip .blades-die.blades-die-ghost, @@ -13233,9 +13521,8 @@ template { :root body.vtt.game.system-eunos-blades #navigation #chat .chat-message[class*=-roll] .message-content .blades-roll .dice-roll-strip .blades-die.blades-die-ghost, :root body.vtt.game.system-eunos-blades #hotbar #chat .chat-message[class*=-roll] .message-content .blades-roll .dice-roll-strip .blades-die.blades-die-ghost, :root body.vtt.game.system-eunos-blades #players #chat .chat-message[class*=-roll] .message-content .blades-roll .dice-roll-strip .blades-die.blades-die-ghost { - box-shadow: 0px 0px 5px 1px var(--blades-red); - scale: 0.8; - opacity: 0.8; + scale: 1; + opacity: 1; rotate: 10deg; animation: var(--ghost-die-animation); } @@ -13604,122 +13891,20 @@ template { z-index: -3; position: relative; } -:root body.vtt.game.system-eunos-blades #interface #chat .chat-message[class*=-roll] .message-content ~ *, -:root body.vtt.game.system-eunos-blades #controls #chat .chat-message[class*=-roll] .message-content ~ *, -:root body.vtt.game.system-eunos-blades #navigation #chat .chat-message[class*=-roll] .message-content ~ *, -:root body.vtt.game.system-eunos-blades #hotbar #chat .chat-message[class*=-roll] .message-content ~ *, -:root body.vtt.game.system-eunos-blades #players #chat .chat-message[class*=-roll] .message-content ~ * { - z-index: 3; -} -:root body.vtt.game.system-eunos-blades #interface #chat .chat-message[class*=-roll]:not(.unresolved-action-roll) .message-content .blades-roll .trait-label.trait-verb, -:root body.vtt.game.system-eunos-blades #controls #chat .chat-message[class*=-roll]:not(.unresolved-action-roll) .message-content .blades-roll .trait-label.trait-verb, -:root body.vtt.game.system-eunos-blades #navigation #chat .chat-message[class*=-roll]:not(.unresolved-action-roll) .message-content .blades-roll .trait-label.trait-verb, -:root body.vtt.game.system-eunos-blades #hotbar #chat .chat-message[class*=-roll]:not(.unresolved-action-roll) .message-content .blades-roll .trait-label.trait-verb, -:root body.vtt.game.system-eunos-blades #players #chat .chat-message[class*=-roll]:not(.unresolved-action-roll) .message-content .blades-roll .trait-label.trait-verb { - display: none; -} -:root body.vtt.game.system-eunos-blades #interface #chat .chat-message[class*=-roll]:not(.unresolved-action-roll) .message-content .blades-roll .consequence-icon-container .consequence-icon-circle.base-consequence, -:root body.vtt.game.system-eunos-blades #controls #chat .chat-message[class*=-roll]:not(.unresolved-action-roll) .message-content .blades-roll .consequence-icon-container .consequence-icon-circle.base-consequence, -:root body.vtt.game.system-eunos-blades #navigation #chat .chat-message[class*=-roll]:not(.unresolved-action-roll) .message-content .blades-roll .consequence-icon-container .consequence-icon-circle.base-consequence, -:root body.vtt.game.system-eunos-blades #hotbar #chat .chat-message[class*=-roll]:not(.unresolved-action-roll) .message-content .blades-roll .consequence-icon-container .consequence-icon-circle.base-consequence, -:root body.vtt.game.system-eunos-blades #players #chat .chat-message[class*=-roll]:not(.unresolved-action-roll) .message-content .blades-roll .consequence-icon-container .consequence-icon-circle.base-consequence { - animation: none !important; -} -:root body.vtt.game.system-eunos-blades #interface #chat .chat-message[class*=-roll]:not(.unresolved-action-roll) .message-content .blades-roll .consequence-icon-container .consequence-icon-circle.base-consequence img, -:root body.vtt.game.system-eunos-blades #controls #chat .chat-message[class*=-roll]:not(.unresolved-action-roll) .message-content .blades-roll .consequence-icon-container .consequence-icon-circle.base-consequence img, -:root body.vtt.game.system-eunos-blades #navigation #chat .chat-message[class*=-roll]:not(.unresolved-action-roll) .message-content .blades-roll .consequence-icon-container .consequence-icon-circle.base-consequence img, -:root body.vtt.game.system-eunos-blades #hotbar #chat .chat-message[class*=-roll]:not(.unresolved-action-roll) .message-content .blades-roll .consequence-icon-container .consequence-icon-circle.base-consequence img, -:root body.vtt.game.system-eunos-blades #players #chat .chat-message[class*=-roll]:not(.unresolved-action-roll) .message-content .blades-roll .consequence-icon-container .consequence-icon-circle.base-consequence img { - animation: none !important; -} -:root body.vtt.game.system-eunos-blades #interface #chat .chat-message[class*=-roll]:not(.unresolved-action-roll) .message-content .blades-roll .blades-roll > *:not(.chat-message-speaker-portrait-wrapper), -:root body.vtt.game.system-eunos-blades #controls #chat .chat-message[class*=-roll]:not(.unresolved-action-roll) .message-content .blades-roll .blades-roll > *:not(.chat-message-speaker-portrait-wrapper), -:root body.vtt.game.system-eunos-blades #navigation #chat .chat-message[class*=-roll]:not(.unresolved-action-roll) .message-content .blades-roll .blades-roll > *:not(.chat-message-speaker-portrait-wrapper), -:root body.vtt.game.system-eunos-blades #hotbar #chat .chat-message[class*=-roll]:not(.unresolved-action-roll) .message-content .blades-roll .blades-roll > *:not(.chat-message-speaker-portrait-wrapper), -:root body.vtt.game.system-eunos-blades #players #chat .chat-message[class*=-roll]:not(.unresolved-action-roll) .message-content .blades-roll .blades-roll > *:not(.chat-message-speaker-portrait-wrapper) { - filter: sepia(1) grayscale(0.5) brightness(0.6); -} -:root body.vtt.game.system-eunos-blades #interface #chat .chat-message[class*=-roll]:not(.unresolved-action-roll) .message-content .blades-roll .chat-message-speaker-portrait-wrapper, -:root body.vtt.game.system-eunos-blades #controls #chat .chat-message[class*=-roll]:not(.unresolved-action-roll) .message-content .blades-roll .chat-message-speaker-portrait-wrapper, -:root body.vtt.game.system-eunos-blades #navigation #chat .chat-message[class*=-roll]:not(.unresolved-action-roll) .message-content .blades-roll .chat-message-speaker-portrait-wrapper, -:root body.vtt.game.system-eunos-blades #hotbar #chat .chat-message[class*=-roll]:not(.unresolved-action-roll) .message-content .blades-roll .chat-message-speaker-portrait-wrapper, -:root body.vtt.game.system-eunos-blades #players #chat .chat-message[class*=-roll]:not(.unresolved-action-roll) .message-content .blades-roll .chat-message-speaker-portrait-wrapper { - --border-gradient: linear-gradient(-72deg, - #565656, - #9b9b9b 16%, - #565656 21%, - #9b9b9b 24%, - #383838 27%, - #565656 36%, - #9b9b9b 45%, - #9b9b9b 60%, - #565656 72%, - #9b9b9b 80%, - #565656 84%, - #232323); - transform-origin: 50% 0%; - scale: 0.6 0.75; -} -:root body.vtt.game.system-eunos-blades #interface #chat .chat-message[class*=-roll].roll-position-risky .msg-content .blades-roll .chat-header, -:root body.vtt.game.system-eunos-blades #interface #chat .chat-message[class*=-roll].roll-position-risky .msg-content .blades-roll .consequence-container, -:root body.vtt.game.system-eunos-blades #controls #chat .chat-message[class*=-roll].roll-position-risky .msg-content .blades-roll .chat-header, -:root body.vtt.game.system-eunos-blades #controls #chat .chat-message[class*=-roll].roll-position-risky .msg-content .blades-roll .consequence-container, -:root body.vtt.game.system-eunos-blades #navigation #chat .chat-message[class*=-roll].roll-position-risky .msg-content .blades-roll .chat-header, -:root body.vtt.game.system-eunos-blades #navigation #chat .chat-message[class*=-roll].roll-position-risky .msg-content .blades-roll .consequence-container, -:root body.vtt.game.system-eunos-blades #hotbar #chat .chat-message[class*=-roll].roll-position-risky .msg-content .blades-roll .chat-header, -:root body.vtt.game.system-eunos-blades #hotbar #chat .chat-message[class*=-roll].roll-position-risky .msg-content .blades-roll .consequence-container, -:root body.vtt.game.system-eunos-blades #players #chat .chat-message[class*=-roll].roll-position-risky .msg-content .blades-roll .chat-header, -:root body.vtt.game.system-eunos-blades #players #chat .chat-message[class*=-roll].roll-position-risky .msg-content .blades-roll .consequence-container { - background: var(--bg-risky); - background-size: cover; -} -:root body.vtt.game.system-eunos-blades #interface #chat .chat-message[class*=-roll].unresolved-action-roll .msg-content .blades-roll, -:root body.vtt.game.system-eunos-blades #controls #chat .chat-message[class*=-roll].unresolved-action-roll .msg-content .blades-roll, -:root body.vtt.game.system-eunos-blades #navigation #chat .chat-message[class*=-roll].unresolved-action-roll .msg-content .blades-roll, -:root body.vtt.game.system-eunos-blades #hotbar #chat .chat-message[class*=-roll].unresolved-action-roll .msg-content .blades-roll, -:root body.vtt.game.system-eunos-blades #players #chat .chat-message[class*=-roll].unresolved-action-roll .msg-content .blades-roll { - --bg-controlled: url("../assets/animations/chat/roll-position-controlled.webp"); - --bg-risky: url("../assets/animations/chat/roll-position-risky.webp"); - --bg-desperate: url("../assets/animations/chat/roll-position-desperate.webp"); - --bg-fail: url("../assets/animations/chat/fail-bg.webp"); - --dice-strip-bg: url("../assets/animations/chat/lightning-ray.webp") no-repeat center / 100% auto; - --top-die-animation: die-pulse 5s ease infinite; - --ghost-die-animation: die-ghost 4s ease infinite; - --ghost-die-filter: sepia(1) saturate(2) hue-rotate(319deg); - margin-bottom: 0px; - opacity: 1; - filter: drop-shadow(5px 5px 5px black); - background: transparent; - outline: none; -} -:root body.vtt.game.system-eunos-blades #interface #chat .chat-message[class*=-roll].unresolved-action-roll .msg-content .blades-roll .trait-label.trait-past-verb, -:root body.vtt.game.system-eunos-blades #controls #chat .chat-message[class*=-roll].unresolved-action-roll .msg-content .blades-roll .trait-label.trait-past-verb, -:root body.vtt.game.system-eunos-blades #navigation #chat .chat-message[class*=-roll].unresolved-action-roll .msg-content .blades-roll .trait-label.trait-past-verb, -:root body.vtt.game.system-eunos-blades #hotbar #chat .chat-message[class*=-roll].unresolved-action-roll .msg-content .blades-roll .trait-label.trait-past-verb, -:root body.vtt.game.system-eunos-blades #players #chat .chat-message[class*=-roll].unresolved-action-roll .msg-content .blades-roll .trait-label.trait-past-verb { - display: none; -} -:root body.vtt.game.system-eunos-blades #interface #chat .chat-message[class*=-roll].unresolved-action-roll .msg-content .blades-roll .dice-roll-strip, -:root body.vtt.game.system-eunos-blades #controls #chat .chat-message[class*=-roll].unresolved-action-roll .msg-content .blades-roll .dice-roll-strip, -:root body.vtt.game.system-eunos-blades #navigation #chat .chat-message[class*=-roll].unresolved-action-roll .msg-content .blades-roll .dice-roll-strip, -:root body.vtt.game.system-eunos-blades #hotbar #chat .chat-message[class*=-roll].unresolved-action-roll .msg-content .blades-roll .dice-roll-strip, -:root body.vtt.game.system-eunos-blades #players #chat .chat-message[class*=-roll].unresolved-action-roll .msg-content .blades-roll .dice-roll-strip { - margin-top: 5px; -} -:root body.vtt.game.system-eunos-blades #interface #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll, -:root body.vtt.game.system-eunos-blades #controls #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll, -:root body.vtt.game.system-eunos-blades #navigation #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll, -:root body.vtt.game.system-eunos-blades #hotbar #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll, -:root body.vtt.game.system-eunos-blades #players #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll { +:root body.vtt.game.system-eunos-blades #interface #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance, +:root body.vtt.game.system-eunos-blades #controls #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance, +:root body.vtt.game.system-eunos-blades #navigation #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance, +:root body.vtt.game.system-eunos-blades #hotbar #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance, +:root body.vtt.game.system-eunos-blades #players #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance { width: calc(100% - var(--resistance-right-shift)); left: var(--resistance-right-shift); top: 0; } -:root body.vtt.game.system-eunos-blades #interface #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .chat-message-bg, -:root body.vtt.game.system-eunos-blades #controls #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .chat-message-bg, -:root body.vtt.game.system-eunos-blades #navigation #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .chat-message-bg, -:root body.vtt.game.system-eunos-blades #hotbar #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .chat-message-bg, -:root body.vtt.game.system-eunos-blades #players #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .chat-message-bg { +:root body.vtt.game.system-eunos-blades #interface #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .chat-message-bg, +:root body.vtt.game.system-eunos-blades #controls #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .chat-message-bg, +:root body.vtt.game.system-eunos-blades #navigation #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .chat-message-bg, +:root body.vtt.game.system-eunos-blades #hotbar #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .chat-message-bg, +:root body.vtt.game.system-eunos-blades #players #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .chat-message-bg { display: block; background: var(--blades-grey); top: 0; @@ -13729,19 +13914,19 @@ template { border-bottom-left-radius: 16px; width: calc(100% + var(--resistance-right-shift)); } -:root body.vtt.game.system-eunos-blades #interface #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .resistance-roll-one-line, -:root body.vtt.game.system-eunos-blades #controls #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .resistance-roll-one-line, -:root body.vtt.game.system-eunos-blades #navigation #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .resistance-roll-one-line, -:root body.vtt.game.system-eunos-blades #hotbar #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .resistance-roll-one-line, -:root body.vtt.game.system-eunos-blades #players #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .resistance-roll-one-line { +:root body.vtt.game.system-eunos-blades #interface #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .resistance-roll-one-line, +:root body.vtt.game.system-eunos-blades #controls #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .resistance-roll-one-line, +:root body.vtt.game.system-eunos-blades #navigation #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .resistance-roll-one-line, +:root body.vtt.game.system-eunos-blades #hotbar #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .resistance-roll-one-line, +:root body.vtt.game.system-eunos-blades #players #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .resistance-roll-one-line { position: relative; justify-content: stretch; } -:root body.vtt.game.system-eunos-blades #interface #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .resistance-roll-one-line .resistance-roll-intro, -:root body.vtt.game.system-eunos-blades #controls #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .resistance-roll-one-line .resistance-roll-intro, -:root body.vtt.game.system-eunos-blades #navigation #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .resistance-roll-one-line .resistance-roll-intro, -:root body.vtt.game.system-eunos-blades #hotbar #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .resistance-roll-one-line .resistance-roll-intro, -:root body.vtt.game.system-eunos-blades #players #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .resistance-roll-one-line .resistance-roll-intro { +:root body.vtt.game.system-eunos-blades #interface #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .resistance-roll-one-line .resistance-roll-intro, +:root body.vtt.game.system-eunos-blades #controls #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .resistance-roll-one-line .resistance-roll-intro, +:root body.vtt.game.system-eunos-blades #navigation #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .resistance-roll-one-line .resistance-roll-intro, +:root body.vtt.game.system-eunos-blades #hotbar #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .resistance-roll-one-line .resistance-roll-intro, +:root body.vtt.game.system-eunos-blades #players #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .resistance-roll-one-line .resistance-roll-intro { color: var(--blades-gold-bright); z-index: 3; position: absolute; @@ -13755,39 +13940,39 @@ template { text-shadow: var(--text-shadow-dark-strong); top: 7px; } -:root body.vtt.game.system-eunos-blades #interface #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .resistance-roll-one-line .consequence-icon-img, -:root body.vtt.game.system-eunos-blades #controls #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .resistance-roll-one-line .consequence-icon-img, -:root body.vtt.game.system-eunos-blades #navigation #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .resistance-roll-one-line .consequence-icon-img, -:root body.vtt.game.system-eunos-blades #hotbar #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .resistance-roll-one-line .consequence-icon-img, -:root body.vtt.game.system-eunos-blades #players #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .resistance-roll-one-line .consequence-icon-img { +:root body.vtt.game.system-eunos-blades #interface #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .resistance-roll-one-line .consequence-icon-img, +:root body.vtt.game.system-eunos-blades #controls #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .resistance-roll-one-line .consequence-icon-img, +:root body.vtt.game.system-eunos-blades #navigation #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .resistance-roll-one-line .consequence-icon-img, +:root body.vtt.game.system-eunos-blades #hotbar #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .resistance-roll-one-line .consequence-icon-img, +:root body.vtt.game.system-eunos-blades #players #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .resistance-roll-one-line .consequence-icon-img { height: 32px; border-radius: 16px; background: var(--blades-black); position: absolute; left: -10px; } -:root body.vtt.game.system-eunos-blades #interface #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .resistance-roll-one-line .resistance-roll-vertical-right, -:root body.vtt.game.system-eunos-blades #controls #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .resistance-roll-one-line .resistance-roll-vertical-right, -:root body.vtt.game.system-eunos-blades #navigation #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .resistance-roll-one-line .resistance-roll-vertical-right, -:root body.vtt.game.system-eunos-blades #hotbar #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .resistance-roll-one-line .resistance-roll-vertical-right, -:root body.vtt.game.system-eunos-blades #players #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .resistance-roll-one-line .resistance-roll-vertical-right { +:root body.vtt.game.system-eunos-blades #interface #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .resistance-roll-one-line .resistance-roll-vertical-right, +:root body.vtt.game.system-eunos-blades #controls #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .resistance-roll-one-line .resistance-roll-vertical-right, +:root body.vtt.game.system-eunos-blades #navigation #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .resistance-roll-one-line .resistance-roll-vertical-right, +:root body.vtt.game.system-eunos-blades #hotbar #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .resistance-roll-one-line .resistance-roll-vertical-right, +:root body.vtt.game.system-eunos-blades #players #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .resistance-roll-one-line .resistance-roll-vertical-right { align-items: space-evenly; } -:root body.vtt.game.system-eunos-blades #interface #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .resistance-roll-one-line .resistance-roll-vertical-right .resistance-roll-attr-dice, -:root body.vtt.game.system-eunos-blades #controls #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .resistance-roll-one-line .resistance-roll-vertical-right .resistance-roll-attr-dice, -:root body.vtt.game.system-eunos-blades #navigation #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .resistance-roll-one-line .resistance-roll-vertical-right .resistance-roll-attr-dice, -:root body.vtt.game.system-eunos-blades #hotbar #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .resistance-roll-one-line .resistance-roll-vertical-right .resistance-roll-attr-dice, -:root body.vtt.game.system-eunos-blades #players #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .resistance-roll-one-line .resistance-roll-vertical-right .resistance-roll-attr-dice { +:root body.vtt.game.system-eunos-blades #interface #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .resistance-roll-one-line .resistance-roll-vertical-right .resistance-roll-attr-dice, +:root body.vtt.game.system-eunos-blades #controls #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .resistance-roll-one-line .resistance-roll-vertical-right .resistance-roll-attr-dice, +:root body.vtt.game.system-eunos-blades #navigation #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .resistance-roll-one-line .resistance-roll-vertical-right .resistance-roll-attr-dice, +:root body.vtt.game.system-eunos-blades #hotbar #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .resistance-roll-one-line .resistance-roll-vertical-right .resistance-roll-attr-dice, +:root body.vtt.game.system-eunos-blades #players #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .resistance-roll-one-line .resistance-roll-vertical-right .resistance-roll-attr-dice { height: 24px; justify-content: flex-start; align-items: center; padding: 0 10px 0 30px; } -:root body.vtt.game.system-eunos-blades #interface #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .resistance-roll-one-line .resistance-roll-vertical-right .resistance-roll-attr-dice .trait-intro, -:root body.vtt.game.system-eunos-blades #controls #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .resistance-roll-one-line .resistance-roll-vertical-right .resistance-roll-attr-dice .trait-intro, -:root body.vtt.game.system-eunos-blades #navigation #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .resistance-roll-one-line .resistance-roll-vertical-right .resistance-roll-attr-dice .trait-intro, -:root body.vtt.game.system-eunos-blades #hotbar #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .resistance-roll-one-line .resistance-roll-vertical-right .resistance-roll-attr-dice .trait-intro, -:root body.vtt.game.system-eunos-blades #players #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .resistance-roll-one-line .resistance-roll-vertical-right .resistance-roll-attr-dice .trait-intro { +:root body.vtt.game.system-eunos-blades #interface #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .resistance-roll-one-line .resistance-roll-vertical-right .resistance-roll-attr-dice .trait-intro, +:root body.vtt.game.system-eunos-blades #controls #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .resistance-roll-one-line .resistance-roll-vertical-right .resistance-roll-attr-dice .trait-intro, +:root body.vtt.game.system-eunos-blades #navigation #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .resistance-roll-one-line .resistance-roll-vertical-right .resistance-roll-attr-dice .trait-intro, +:root body.vtt.game.system-eunos-blades #hotbar #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .resistance-roll-one-line .resistance-roll-vertical-right .resistance-roll-attr-dice .trait-intro, +:root body.vtt.game.system-eunos-blades #players #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .resistance-roll-one-line .resistance-roll-vertical-right .resistance-roll-attr-dice .trait-intro { display: none; color: var(--blades-black); margin-right: 5px; @@ -13797,21 +13982,21 @@ template { margin-top: 3px; text-transform: uppercase; } -:root body.vtt.game.system-eunos-blades #interface #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .resistance-roll-one-line .resistance-roll-vertical-right .resistance-roll-attr-dice .trait-label, -:root body.vtt.game.system-eunos-blades #controls #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .resistance-roll-one-line .resistance-roll-vertical-right .resistance-roll-attr-dice .trait-label, -:root body.vtt.game.system-eunos-blades #navigation #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .resistance-roll-one-line .resistance-roll-vertical-right .resistance-roll-attr-dice .trait-label, -:root body.vtt.game.system-eunos-blades #hotbar #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .resistance-roll-one-line .resistance-roll-vertical-right .resistance-roll-attr-dice .trait-label, -:root body.vtt.game.system-eunos-blades #players #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .resistance-roll-one-line .resistance-roll-vertical-right .resistance-roll-attr-dice .trait-label { +:root body.vtt.game.system-eunos-blades #interface #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .resistance-roll-one-line .resistance-roll-vertical-right .resistance-roll-attr-dice .trait-label, +:root body.vtt.game.system-eunos-blades #controls #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .resistance-roll-one-line .resistance-roll-vertical-right .resistance-roll-attr-dice .trait-label, +:root body.vtt.game.system-eunos-blades #navigation #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .resistance-roll-one-line .resistance-roll-vertical-right .resistance-roll-attr-dice .trait-label, +:root body.vtt.game.system-eunos-blades #hotbar #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .resistance-roll-one-line .resistance-roll-vertical-right .resistance-roll-attr-dice .trait-label, +:root body.vtt.game.system-eunos-blades #players #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .resistance-roll-one-line .resistance-roll-vertical-right .resistance-roll-attr-dice .trait-label { font-family: var(--font-emphasis); color: var(--blades-gold-bright); line-height: 24px; text-shadow: var(--text-shadow-emboss); } -:root body.vtt.game.system-eunos-blades #interface #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .resistance-roll-one-line .resistance-roll-vertical-right .resistance-roll-attr-dice .dice-roll-strip, -:root body.vtt.game.system-eunos-blades #controls #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .resistance-roll-one-line .resistance-roll-vertical-right .resistance-roll-attr-dice .dice-roll-strip, -:root body.vtt.game.system-eunos-blades #navigation #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .resistance-roll-one-line .resistance-roll-vertical-right .resistance-roll-attr-dice .dice-roll-strip, -:root body.vtt.game.system-eunos-blades #hotbar #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .resistance-roll-one-line .resistance-roll-vertical-right .resistance-roll-attr-dice .dice-roll-strip, -:root body.vtt.game.system-eunos-blades #players #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .resistance-roll-one-line .resistance-roll-vertical-right .resistance-roll-attr-dice .dice-roll-strip { +:root body.vtt.game.system-eunos-blades #interface #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .resistance-roll-one-line .resistance-roll-vertical-right .resistance-roll-attr-dice .dice-roll-strip, +:root body.vtt.game.system-eunos-blades #controls #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .resistance-roll-one-line .resistance-roll-vertical-right .resistance-roll-attr-dice .dice-roll-strip, +:root body.vtt.game.system-eunos-blades #navigation #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .resistance-roll-one-line .resistance-roll-vertical-right .resistance-roll-attr-dice .dice-roll-strip, +:root body.vtt.game.system-eunos-blades #hotbar #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .resistance-roll-one-line .resistance-roll-vertical-right .resistance-roll-attr-dice .dice-roll-strip, +:root body.vtt.game.system-eunos-blades #players #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .resistance-roll-one-line .resistance-roll-vertical-right .resistance-roll-attr-dice .dice-roll-strip { height: 24px; width: fit-content; padding: 4px 0px; @@ -13820,116 +14005,207 @@ template { background: transparent; box-shadow: none; } -:root body.vtt.game.system-eunos-blades #interface #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .resistance-roll-one-line .resistance-roll-vertical-right .resistance-roll-attr-dice .dice-roll-strip .blades-die, -:root body.vtt.game.system-eunos-blades #controls #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .resistance-roll-one-line .resistance-roll-vertical-right .resistance-roll-attr-dice .dice-roll-strip .blades-die, -:root body.vtt.game.system-eunos-blades #navigation #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .resistance-roll-one-line .resistance-roll-vertical-right .resistance-roll-attr-dice .dice-roll-strip .blades-die, -:root body.vtt.game.system-eunos-blades #hotbar #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .resistance-roll-one-line .resistance-roll-vertical-right .resistance-roll-attr-dice .dice-roll-strip .blades-die, -:root body.vtt.game.system-eunos-blades #players #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .resistance-roll-one-line .resistance-roll-vertical-right .resistance-roll-attr-dice .dice-roll-strip .blades-die { +:root body.vtt.game.system-eunos-blades #interface #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .resistance-roll-one-line .resistance-roll-vertical-right .resistance-roll-attr-dice .dice-roll-strip .blades-die, +:root body.vtt.game.system-eunos-blades #controls #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .resistance-roll-one-line .resistance-roll-vertical-right .resistance-roll-attr-dice .dice-roll-strip .blades-die, +:root body.vtt.game.system-eunos-blades #navigation #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .resistance-roll-one-line .resistance-roll-vertical-right .resistance-roll-attr-dice .dice-roll-strip .blades-die, +:root body.vtt.game.system-eunos-blades #hotbar #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .resistance-roll-one-line .resistance-roll-vertical-right .resistance-roll-attr-dice .dice-roll-strip .blades-die, +:root body.vtt.game.system-eunos-blades #players #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .resistance-roll-one-line .resistance-roll-vertical-right .resistance-roll-attr-dice .dice-roll-strip .blades-die { height: 16px; border-radius: 3px; } -:root body.vtt.game.system-eunos-blades #interface #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .resistance-roll-one-line .resistance-roll-vertical-right .resistance-roll-attr-dice .dice-roll-strip .blades-die img, -:root body.vtt.game.system-eunos-blades #controls #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .resistance-roll-one-line .resistance-roll-vertical-right .resistance-roll-attr-dice .dice-roll-strip .blades-die img, -:root body.vtt.game.system-eunos-blades #navigation #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .resistance-roll-one-line .resistance-roll-vertical-right .resistance-roll-attr-dice .dice-roll-strip .blades-die img, -:root body.vtt.game.system-eunos-blades #hotbar #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .resistance-roll-one-line .resistance-roll-vertical-right .resistance-roll-attr-dice .dice-roll-strip .blades-die img, -:root body.vtt.game.system-eunos-blades #players #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .resistance-roll-one-line .resistance-roll-vertical-right .resistance-roll-attr-dice .dice-roll-strip .blades-die img { +:root body.vtt.game.system-eunos-blades #interface #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .resistance-roll-one-line .resistance-roll-vertical-right .resistance-roll-attr-dice .dice-roll-strip .blades-die img, +:root body.vtt.game.system-eunos-blades #controls #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .resistance-roll-one-line .resistance-roll-vertical-right .resistance-roll-attr-dice .dice-roll-strip .blades-die img, +:root body.vtt.game.system-eunos-blades #navigation #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .resistance-roll-one-line .resistance-roll-vertical-right .resistance-roll-attr-dice .dice-roll-strip .blades-die img, +:root body.vtt.game.system-eunos-blades #hotbar #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .resistance-roll-one-line .resistance-roll-vertical-right .resistance-roll-attr-dice .dice-roll-strip .blades-die img, +:root body.vtt.game.system-eunos-blades #players #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .resistance-roll-one-line .resistance-roll-vertical-right .resistance-roll-attr-dice .dice-roll-strip .blades-die img { height: 16px; width: 16px; filter: none; } -:root body.vtt.game.system-eunos-blades #interface #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .resistance-roll-one-line .resistance-roll-vertical-right .resistance-roll-attr-dice .dice-roll-strip .blades-die:not(.blades-die-resistance), -:root body.vtt.game.system-eunos-blades #controls #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .resistance-roll-one-line .resistance-roll-vertical-right .resistance-roll-attr-dice .dice-roll-strip .blades-die:not(.blades-die-resistance), -:root body.vtt.game.system-eunos-blades #navigation #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .resistance-roll-one-line .resistance-roll-vertical-right .resistance-roll-attr-dice .dice-roll-strip .blades-die:not(.blades-die-resistance), -:root body.vtt.game.system-eunos-blades #hotbar #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .resistance-roll-one-line .resistance-roll-vertical-right .resistance-roll-attr-dice .dice-roll-strip .blades-die:not(.blades-die-resistance), -:root body.vtt.game.system-eunos-blades #players #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .resistance-roll-one-line .resistance-roll-vertical-right .resistance-roll-attr-dice .dice-roll-strip .blades-die:not(.blades-die-resistance) { +:root body.vtt.game.system-eunos-blades #interface #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .resistance-roll-one-line .resistance-roll-vertical-right .resistance-roll-attr-dice .dice-roll-strip .blades-die:not(.blades-die-resistance), +:root body.vtt.game.system-eunos-blades #controls #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .resistance-roll-one-line .resistance-roll-vertical-right .resistance-roll-attr-dice .dice-roll-strip .blades-die:not(.blades-die-resistance), +:root body.vtt.game.system-eunos-blades #navigation #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .resistance-roll-one-line .resistance-roll-vertical-right .resistance-roll-attr-dice .dice-roll-strip .blades-die:not(.blades-die-resistance), +:root body.vtt.game.system-eunos-blades #hotbar #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .resistance-roll-one-line .resistance-roll-vertical-right .resistance-roll-attr-dice .dice-roll-strip .blades-die:not(.blades-die-resistance), +:root body.vtt.game.system-eunos-blades #players #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .resistance-roll-one-line .resistance-roll-vertical-right .resistance-roll-attr-dice .dice-roll-strip .blades-die:not(.blades-die-resistance) { opacity: 0.5; filter: blur(1px); } -:root body.vtt.game.system-eunos-blades #interface #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .resistance-roll-one-line .resistance-roll-vertical-right .resistance-roll-attr-dice .dice-roll-strip .blades-die + .blades-die + .blades-die + .blades-die + .blades-die ~ .blades-die:last-child, -:root body.vtt.game.system-eunos-blades #controls #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .resistance-roll-one-line .resistance-roll-vertical-right .resistance-roll-attr-dice .dice-roll-strip .blades-die + .blades-die + .blades-die + .blades-die + .blades-die ~ .blades-die:last-child, -:root body.vtt.game.system-eunos-blades #navigation #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .resistance-roll-one-line .resistance-roll-vertical-right .resistance-roll-attr-dice .dice-roll-strip .blades-die + .blades-die + .blades-die + .blades-die + .blades-die ~ .blades-die:last-child, -:root body.vtt.game.system-eunos-blades #hotbar #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .resistance-roll-one-line .resistance-roll-vertical-right .resistance-roll-attr-dice .dice-roll-strip .blades-die + .blades-die + .blades-die + .blades-die + .blades-die ~ .blades-die:last-child, -:root body.vtt.game.system-eunos-blades #players #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .resistance-roll-one-line .resistance-roll-vertical-right .resistance-roll-attr-dice .dice-roll-strip .blades-die + .blades-die + .blades-die + .blades-die + .blades-die ~ .blades-die:last-child { +:root body.vtt.game.system-eunos-blades #interface #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .resistance-roll-one-line .resistance-roll-vertical-right .resistance-roll-attr-dice .dice-roll-strip .blades-die + .blades-die + .blades-die + .blades-die + .blades-die ~ .blades-die:last-child, +:root body.vtt.game.system-eunos-blades #controls #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .resistance-roll-one-line .resistance-roll-vertical-right .resistance-roll-attr-dice .dice-roll-strip .blades-die + .blades-die + .blades-die + .blades-die + .blades-die ~ .blades-die:last-child, +:root body.vtt.game.system-eunos-blades #navigation #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .resistance-roll-one-line .resistance-roll-vertical-right .resistance-roll-attr-dice .dice-roll-strip .blades-die + .blades-die + .blades-die + .blades-die + .blades-die ~ .blades-die:last-child, +:root body.vtt.game.system-eunos-blades #hotbar #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .resistance-roll-one-line .resistance-roll-vertical-right .resistance-roll-attr-dice .dice-roll-strip .blades-die + .blades-die + .blades-die + .blades-die + .blades-die ~ .blades-die:last-child, +:root body.vtt.game.system-eunos-blades #players #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .resistance-roll-one-line .resistance-roll-vertical-right .resistance-roll-attr-dice .dice-roll-strip .blades-die + .blades-die + .blades-die + .blades-die + .blades-die ~ .blades-die:last-child { margin-right: -50px; } -:root body.vtt.game.system-eunos-blades #interface #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .resistance-roll-one-line .resistance-roll-vertical-right .resistance-cost-row h3, -:root body.vtt.game.system-eunos-blades #controls #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .resistance-roll-one-line .resistance-roll-vertical-right .resistance-cost-row h3, -:root body.vtt.game.system-eunos-blades #navigation #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .resistance-roll-one-line .resistance-roll-vertical-right .resistance-cost-row h3, -:root body.vtt.game.system-eunos-blades #hotbar #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .resistance-roll-one-line .resistance-roll-vertical-right .resistance-cost-row h3, -:root body.vtt.game.system-eunos-blades #players #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .resistance-roll-one-line .resistance-roll-vertical-right .resistance-cost-row h3 { +:root body.vtt.game.system-eunos-blades #interface #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .resistance-roll-one-line .resistance-roll-vertical-right .resistance-cost-row h3, +:root body.vtt.game.system-eunos-blades #controls #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .resistance-roll-one-line .resistance-roll-vertical-right .resistance-cost-row h3, +:root body.vtt.game.system-eunos-blades #navigation #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .resistance-roll-one-line .resistance-roll-vertical-right .resistance-cost-row h3, +:root body.vtt.game.system-eunos-blades #hotbar #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .resistance-roll-one-line .resistance-roll-vertical-right .resistance-cost-row h3, +:root body.vtt.game.system-eunos-blades #players #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .resistance-roll-one-line .resistance-roll-vertical-right .resistance-cost-row h3 { font-size: 12px; text-shadow: var(--text-shadow-dark-strong); } -:root body.vtt.game.system-eunos-blades #interface #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .resistance-roll-one-line .resistance-roll-vertical-right .resistance-cost-row.cost-bonus h3, -:root body.vtt.game.system-eunos-blades #controls #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .resistance-roll-one-line .resistance-roll-vertical-right .resistance-cost-row.cost-bonus h3, -:root body.vtt.game.system-eunos-blades #navigation #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .resistance-roll-one-line .resistance-roll-vertical-right .resistance-cost-row.cost-bonus h3, -:root body.vtt.game.system-eunos-blades #hotbar #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .resistance-roll-one-line .resistance-roll-vertical-right .resistance-cost-row.cost-bonus h3, -:root body.vtt.game.system-eunos-blades #players #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .resistance-roll-one-line .resistance-roll-vertical-right .resistance-cost-row.cost-bonus h3 { +:root body.vtt.game.system-eunos-blades #interface #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .resistance-roll-one-line .resistance-roll-vertical-right .resistance-cost-row.cost-bonus h3, +:root body.vtt.game.system-eunos-blades #controls #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .resistance-roll-one-line .resistance-roll-vertical-right .resistance-cost-row.cost-bonus h3, +:root body.vtt.game.system-eunos-blades #navigation #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .resistance-roll-one-line .resistance-roll-vertical-right .resistance-cost-row.cost-bonus h3, +:root body.vtt.game.system-eunos-blades #hotbar #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .resistance-roll-one-line .resistance-roll-vertical-right .resistance-cost-row.cost-bonus h3, +:root body.vtt.game.system-eunos-blades #players #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .resistance-roll-one-line .resistance-roll-vertical-right .resistance-cost-row.cost-bonus h3 { color: var(--blades-gold-bright); } -:root body.vtt.game.system-eunos-blades #interface #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .resistance-roll-one-line .resistance-roll-vertical-right .resistance-cost-row.cost-stress h3, -:root body.vtt.game.system-eunos-blades #controls #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .resistance-roll-one-line .resistance-roll-vertical-right .resistance-cost-row.cost-stress h3, -:root body.vtt.game.system-eunos-blades #navigation #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .resistance-roll-one-line .resistance-roll-vertical-right .resistance-cost-row.cost-stress h3, -:root body.vtt.game.system-eunos-blades #hotbar #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .resistance-roll-one-line .resistance-roll-vertical-right .resistance-cost-row.cost-stress h3, -:root body.vtt.game.system-eunos-blades #players #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .resistance-roll-one-line .resistance-roll-vertical-right .resistance-cost-row.cost-stress h3 { +:root body.vtt.game.system-eunos-blades #interface #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .resistance-roll-one-line .resistance-roll-vertical-right .resistance-cost-row.cost-stress h3, +:root body.vtt.game.system-eunos-blades #controls #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .resistance-roll-one-line .resistance-roll-vertical-right .resistance-cost-row.cost-stress h3, +:root body.vtt.game.system-eunos-blades #navigation #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .resistance-roll-one-line .resistance-roll-vertical-right .resistance-cost-row.cost-stress h3, +:root body.vtt.game.system-eunos-blades #hotbar #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .resistance-roll-one-line .resistance-roll-vertical-right .resistance-cost-row.cost-stress h3, +:root body.vtt.game.system-eunos-blades #players #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .resistance-roll-one-line .resistance-roll-vertical-right .resistance-cost-row.cost-stress h3 { color: var(--blades-red-bright); } -:root body.vtt.game.system-eunos-blades #interface #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .chat-header.roll-trait, -:root body.vtt.game.system-eunos-blades #controls #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .chat-header.roll-trait, -:root body.vtt.game.system-eunos-blades #navigation #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .chat-header.roll-trait, -:root body.vtt.game.system-eunos-blades #hotbar #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .chat-header.roll-trait, -:root body.vtt.game.system-eunos-blades #players #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .chat-header.roll-trait { +:root body.vtt.game.system-eunos-blades #interface #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .chat-header.roll-trait, +:root body.vtt.game.system-eunos-blades #controls #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .chat-header.roll-trait, +:root body.vtt.game.system-eunos-blades #navigation #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .chat-header.roll-trait, +:root body.vtt.game.system-eunos-blades #hotbar #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .chat-header.roll-trait, +:root body.vtt.game.system-eunos-blades #players #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .chat-header.roll-trait { font-size: 14px; color: var(--blades-black); } -:root body.vtt.game.system-eunos-blades #interface #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .consequence-container.consequence-original .comp.consequence-display-container .consequence-type-container, -:root body.vtt.game.system-eunos-blades #controls #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .consequence-container.consequence-original .comp.consequence-display-container .consequence-type-container, -:root body.vtt.game.system-eunos-blades #navigation #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .consequence-container.consequence-original .comp.consequence-display-container .consequence-type-container, -:root body.vtt.game.system-eunos-blades #hotbar #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .consequence-container.consequence-original .comp.consequence-display-container .consequence-type-container, -:root body.vtt.game.system-eunos-blades #players #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .consequence-container.consequence-original .comp.consequence-display-container .consequence-type-container { +:root body.vtt.game.system-eunos-blades #interface #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .consequence-container.consequence-original .comp.consequence-display-container .consequence-type-container, +:root body.vtt.game.system-eunos-blades #controls #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .consequence-container.consequence-original .comp.consequence-display-container .consequence-type-container, +:root body.vtt.game.system-eunos-blades #navigation #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .consequence-container.consequence-original .comp.consequence-display-container .consequence-type-container, +:root body.vtt.game.system-eunos-blades #hotbar #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .consequence-container.consequence-original .comp.consequence-display-container .consequence-type-container, +:root body.vtt.game.system-eunos-blades #players #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .consequence-container.consequence-original .comp.consequence-display-container .consequence-type-container { display: none; } -:root body.vtt.game.system-eunos-blades #interface #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .consequence-container.consequence-original .comp.consequence-display-container .consequence-name-container, -:root body.vtt.game.system-eunos-blades #controls #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .consequence-container.consequence-original .comp.consequence-display-container .consequence-name-container, -:root body.vtt.game.system-eunos-blades #navigation #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .consequence-container.consequence-original .comp.consequence-display-container .consequence-name-container, -:root body.vtt.game.system-eunos-blades #hotbar #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .consequence-container.consequence-original .comp.consequence-display-container .consequence-name-container, -:root body.vtt.game.system-eunos-blades #players #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .consequence-container.consequence-original .comp.consequence-display-container .consequence-name-container { +:root body.vtt.game.system-eunos-blades #interface #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .consequence-container.consequence-original .comp.consequence-display-container .consequence-name-container, +:root body.vtt.game.system-eunos-blades #controls #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .consequence-container.consequence-original .comp.consequence-display-container .consequence-name-container, +:root body.vtt.game.system-eunos-blades #navigation #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .consequence-container.consequence-original .comp.consequence-display-container .consequence-name-container, +:root body.vtt.game.system-eunos-blades #hotbar #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .consequence-container.consequence-original .comp.consequence-display-container .consequence-name-container, +:root body.vtt.game.system-eunos-blades #players #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .consequence-container.consequence-original .comp.consequence-display-container .consequence-name-container { display: none; } -:root body.vtt.game.system-eunos-blades #interface #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .consequence-container.consequence-resisted, -:root body.vtt.game.system-eunos-blades #controls #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .consequence-container.consequence-resisted, -:root body.vtt.game.system-eunos-blades #navigation #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .consequence-container.consequence-resisted, -:root body.vtt.game.system-eunos-blades #hotbar #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .consequence-container.consequence-resisted, -:root body.vtt.game.system-eunos-blades #players #chat .chat-message[class*=-roll].roll-type-resistance .msg-content .blades-roll .consequence-container.consequence-resisted { +:root body.vtt.game.system-eunos-blades #interface #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .consequence-container.consequence-resisted, +:root body.vtt.game.system-eunos-blades #controls #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .consequence-container.consequence-resisted, +:root body.vtt.game.system-eunos-blades #navigation #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .consequence-container.consequence-resisted, +:root body.vtt.game.system-eunos-blades #hotbar #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .consequence-container.consequence-resisted, +:root body.vtt.game.system-eunos-blades #players #chat .chat-message[class*=-roll] .message-content .blades-roll.roll-type-resistance .consequence-container.consequence-resisted { display: none; } -:root body.vtt.game.system-eunos-blades #interface #chat .chat-message[class*=-roll].resistance-roll, -:root body.vtt.game.system-eunos-blades #controls #chat .chat-message[class*=-roll].resistance-roll, -:root body.vtt.game.system-eunos-blades #navigation #chat .chat-message[class*=-roll].resistance-roll, -:root body.vtt.game.system-eunos-blades #hotbar #chat .chat-message[class*=-roll].resistance-roll, -:root body.vtt.game.system-eunos-blades #players #chat .chat-message[class*=-roll].resistance-roll { - margin: 0; +:root body.vtt.game.system-eunos-blades #interface #chat .chat-message[class*=-roll] .message-content ~ *, +:root body.vtt.game.system-eunos-blades #controls #chat .chat-message[class*=-roll] .message-content ~ *, +:root body.vtt.game.system-eunos-blades #navigation #chat .chat-message[class*=-roll] .message-content ~ *, +:root body.vtt.game.system-eunos-blades #hotbar #chat .chat-message[class*=-roll] .message-content ~ *, +:root body.vtt.game.system-eunos-blades #players #chat .chat-message[class*=-roll] .message-content ~ * { + z-index: 3; } -:root body.vtt.game.system-eunos-blades #interface #chat .chat-message[class*=-roll].resistance-roll .message-header, -:root body.vtt.game.system-eunos-blades #controls #chat .chat-message[class*=-roll].resistance-roll .message-header, -:root body.vtt.game.system-eunos-blades #navigation #chat .chat-message[class*=-roll].resistance-roll .message-header, -:root body.vtt.game.system-eunos-blades #hotbar #chat .chat-message[class*=-roll].resistance-roll .message-header, -:root body.vtt.game.system-eunos-blades #players #chat .chat-message[class*=-roll].resistance-roll .message-header { +:root body.vtt.game.system-eunos-blades #interface #chat .chat-message[class*=-roll]:not(.unresolved-action-roll) .message-content .blades-roll .consequence-icon-container .consequence-icon-circle.base-consequence, +:root body.vtt.game.system-eunos-blades #controls #chat .chat-message[class*=-roll]:not(.unresolved-action-roll) .message-content .blades-roll .consequence-icon-container .consequence-icon-circle.base-consequence, +:root body.vtt.game.system-eunos-blades #navigation #chat .chat-message[class*=-roll]:not(.unresolved-action-roll) .message-content .blades-roll .consequence-icon-container .consequence-icon-circle.base-consequence, +:root body.vtt.game.system-eunos-blades #hotbar #chat .chat-message[class*=-roll]:not(.unresolved-action-roll) .message-content .blades-roll .consequence-icon-container .consequence-icon-circle.base-consequence, +:root body.vtt.game.system-eunos-blades #players #chat .chat-message[class*=-roll]:not(.unresolved-action-roll) .message-content .blades-roll .consequence-icon-container .consequence-icon-circle.base-consequence { + animation: none !important; +} +:root body.vtt.game.system-eunos-blades #interface #chat .chat-message[class*=-roll]:not(.unresolved-action-roll) .message-content .blades-roll .consequence-icon-container .consequence-icon-circle.base-consequence img, +:root body.vtt.game.system-eunos-blades #controls #chat .chat-message[class*=-roll]:not(.unresolved-action-roll) .message-content .blades-roll .consequence-icon-container .consequence-icon-circle.base-consequence img, +:root body.vtt.game.system-eunos-blades #navigation #chat .chat-message[class*=-roll]:not(.unresolved-action-roll) .message-content .blades-roll .consequence-icon-container .consequence-icon-circle.base-consequence img, +:root body.vtt.game.system-eunos-blades #hotbar #chat .chat-message[class*=-roll]:not(.unresolved-action-roll) .message-content .blades-roll .consequence-icon-container .consequence-icon-circle.base-consequence img, +:root body.vtt.game.system-eunos-blades #players #chat .chat-message[class*=-roll]:not(.unresolved-action-roll) .message-content .blades-roll .consequence-icon-container .consequence-icon-circle.base-consequence img { + animation: none !important; +} +:root body.vtt.game.system-eunos-blades #interface #chat .chat-message[class*=-roll].active-chat-roll .message-content .blades-roll .trait-label.trait-past-verb, +:root body.vtt.game.system-eunos-blades #controls #chat .chat-message[class*=-roll].active-chat-roll .message-content .blades-roll .trait-label.trait-past-verb, +:root body.vtt.game.system-eunos-blades #navigation #chat .chat-message[class*=-roll].active-chat-roll .message-content .blades-roll .trait-label.trait-past-verb, +:root body.vtt.game.system-eunos-blades #hotbar #chat .chat-message[class*=-roll].active-chat-roll .message-content .blades-roll .trait-label.trait-past-verb, +:root body.vtt.game.system-eunos-blades #players #chat .chat-message[class*=-roll].active-chat-roll .message-content .blades-roll .trait-label.trait-past-verb { + display: none !important; +} +:root body.vtt.game.system-eunos-blades #interface #chat .chat-message[class*=-roll]:not(.unresolved-action-roll):not(.active-chat-roll) .message-content .blades-roll .trait-label.trait-verb, +:root body.vtt.game.system-eunos-blades #controls #chat .chat-message[class*=-roll]:not(.unresolved-action-roll):not(.active-chat-roll) .message-content .blades-roll .trait-label.trait-verb, +:root body.vtt.game.system-eunos-blades #navigation #chat .chat-message[class*=-roll]:not(.unresolved-action-roll):not(.active-chat-roll) .message-content .blades-roll .trait-label.trait-verb, +:root body.vtt.game.system-eunos-blades #hotbar #chat .chat-message[class*=-roll]:not(.unresolved-action-roll):not(.active-chat-roll) .message-content .blades-roll .trait-label.trait-verb, +:root body.vtt.game.system-eunos-blades #players #chat .chat-message[class*=-roll]:not(.unresolved-action-roll):not(.active-chat-roll) .message-content .blades-roll .trait-label.trait-verb { display: none; } -:root body.vtt.game.system-eunos-blades #interface #chat .chat-message[class*=-roll].action-roll + .chat-message.resistance-roll, -:root body.vtt.game.system-eunos-blades #controls #chat .chat-message[class*=-roll].action-roll + .chat-message.resistance-roll, -:root body.vtt.game.system-eunos-blades #navigation #chat .chat-message[class*=-roll].action-roll + .chat-message.resistance-roll, -:root body.vtt.game.system-eunos-blades #hotbar #chat .chat-message[class*=-roll].action-roll + .chat-message.resistance-roll, -:root body.vtt.game.system-eunos-blades #players #chat .chat-message[class*=-roll].action-roll + .chat-message.resistance-roll { - margin-top: calc(-1 * var(--chat-vertical-gap)); -} -:root body.vtt.game.system-eunos-blades #interface #chat .chat-message[class*=-roll].action-roll.unresolved-action-roll + .chat-message.resistance-roll, -:root body.vtt.game.system-eunos-blades #controls #chat .chat-message[class*=-roll].action-roll.unresolved-action-roll + .chat-message.resistance-roll, -:root body.vtt.game.system-eunos-blades #navigation #chat .chat-message[class*=-roll].action-roll.unresolved-action-roll + .chat-message.resistance-roll, -:root body.vtt.game.system-eunos-blades #hotbar #chat .chat-message[class*=-roll].action-roll.unresolved-action-roll + .chat-message.resistance-roll, -:root body.vtt.game.system-eunos-blades #players #chat .chat-message[class*=-roll].action-roll.unresolved-action-roll + .chat-message.resistance-roll { - margin-top: 0; +:root body.vtt.game.system-eunos-blades #interface #chat .chat-message[class*=-roll]:not(.unresolved-action-roll):not(.active-chat-roll) .message-content .blades-roll .blades-roll > *:not(.chat-message-speaker-portrait-wrapper), +:root body.vtt.game.system-eunos-blades #controls #chat .chat-message[class*=-roll]:not(.unresolved-action-roll):not(.active-chat-roll) .message-content .blades-roll .blades-roll > *:not(.chat-message-speaker-portrait-wrapper), +:root body.vtt.game.system-eunos-blades #navigation #chat .chat-message[class*=-roll]:not(.unresolved-action-roll):not(.active-chat-roll) .message-content .blades-roll .blades-roll > *:not(.chat-message-speaker-portrait-wrapper), +:root body.vtt.game.system-eunos-blades #hotbar #chat .chat-message[class*=-roll]:not(.unresolved-action-roll):not(.active-chat-roll) .message-content .blades-roll .blades-roll > *:not(.chat-message-speaker-portrait-wrapper), +:root body.vtt.game.system-eunos-blades #players #chat .chat-message[class*=-roll]:not(.unresolved-action-roll):not(.active-chat-roll) .message-content .blades-roll .blades-roll > *:not(.chat-message-speaker-portrait-wrapper) { + filter: sepia(1) grayscale(0.5) brightness(0.6); +} +:root body.vtt.game.system-eunos-blades #interface #chat .chat-message[class*=-roll]:not(.unresolved-action-roll):not(.active-chat-roll) .message-content .blades-roll .chat-message-speaker-portrait-wrapper, +:root body.vtt.game.system-eunos-blades #controls #chat .chat-message[class*=-roll]:not(.unresolved-action-roll):not(.active-chat-roll) .message-content .blades-roll .chat-message-speaker-portrait-wrapper, +:root body.vtt.game.system-eunos-blades #navigation #chat .chat-message[class*=-roll]:not(.unresolved-action-roll):not(.active-chat-roll) .message-content .blades-roll .chat-message-speaker-portrait-wrapper, +:root body.vtt.game.system-eunos-blades #hotbar #chat .chat-message[class*=-roll]:not(.unresolved-action-roll):not(.active-chat-roll) .message-content .blades-roll .chat-message-speaker-portrait-wrapper, +:root body.vtt.game.system-eunos-blades #players #chat .chat-message[class*=-roll]:not(.unresolved-action-roll):not(.active-chat-roll) .message-content .blades-roll .chat-message-speaker-portrait-wrapper { + --border-gradient: linear-gradient(-72deg, + #565656, + #9b9b9b 16%, + #565656 21%, + #9b9b9b 24%, + #383838 27%, + #565656 36%, + #9b9b9b 45%, + #9b9b9b 60%, + #565656 72%, + #9b9b9b 80%, + #565656 84%, + #232323); + transform-origin: 50% 0%; + scale: 0.6 0.75; +} +:root body.vtt.game.system-eunos-blades #interface #chat .chat-message[class*=-roll] .roll-position-risky .chat-header, +:root body.vtt.game.system-eunos-blades #interface #chat .chat-message[class*=-roll] .roll-position-risky .consequence-container, +:root body.vtt.game.system-eunos-blades #controls #chat .chat-message[class*=-roll] .roll-position-risky .chat-header, +:root body.vtt.game.system-eunos-blades #controls #chat .chat-message[class*=-roll] .roll-position-risky .consequence-container, +:root body.vtt.game.system-eunos-blades #navigation #chat .chat-message[class*=-roll] .roll-position-risky .chat-header, +:root body.vtt.game.system-eunos-blades #navigation #chat .chat-message[class*=-roll] .roll-position-risky .consequence-container, +:root body.vtt.game.system-eunos-blades #hotbar #chat .chat-message[class*=-roll] .roll-position-risky .chat-header, +:root body.vtt.game.system-eunos-blades #hotbar #chat .chat-message[class*=-roll] .roll-position-risky .consequence-container, +:root body.vtt.game.system-eunos-blades #players #chat .chat-message[class*=-roll] .roll-position-risky .chat-header, +:root body.vtt.game.system-eunos-blades #players #chat .chat-message[class*=-roll] .roll-position-risky .consequence-container { + background: var(--bg-risky); + background-size: cover; +} +:root body.vtt.game.system-eunos-blades #interface #chat .chat-message[class*=-roll].unresolved-action-roll .message-content .blades-roll, +:root body.vtt.game.system-eunos-blades #controls #chat .chat-message[class*=-roll].unresolved-action-roll .message-content .blades-roll, +:root body.vtt.game.system-eunos-blades #navigation #chat .chat-message[class*=-roll].unresolved-action-roll .message-content .blades-roll, +:root body.vtt.game.system-eunos-blades #hotbar #chat .chat-message[class*=-roll].unresolved-action-roll .message-content .blades-roll, +:root body.vtt.game.system-eunos-blades #players #chat .chat-message[class*=-roll].unresolved-action-roll .message-content .blades-roll { + margin-bottom: 0px; + opacity: 1; + filter: drop-shadow(5px 5px 5px black); + background: transparent; + outline: none; +} +:root body.vtt.game.system-eunos-blades #interface #chat .chat-message[class*=-roll].unresolved-action-roll .message-content .blades-roll .trait-label.trait-past-verb, +:root body.vtt.game.system-eunos-blades #controls #chat .chat-message[class*=-roll].unresolved-action-roll .message-content .blades-roll .trait-label.trait-past-verb, +:root body.vtt.game.system-eunos-blades #navigation #chat .chat-message[class*=-roll].unresolved-action-roll .message-content .blades-roll .trait-label.trait-past-verb, +:root body.vtt.game.system-eunos-blades #hotbar #chat .chat-message[class*=-roll].unresolved-action-roll .message-content .blades-roll .trait-label.trait-past-verb, +:root body.vtt.game.system-eunos-blades #players #chat .chat-message[class*=-roll].unresolved-action-roll .message-content .blades-roll .trait-label.trait-past-verb { + display: none !important; +} +:root body.vtt.game.system-eunos-blades #interface #chat .chat-message[class*=-roll].unresolved-action-roll .message-content .blades-roll .dice-roll-strip, +:root body.vtt.game.system-eunos-blades #controls #chat .chat-message[class*=-roll].unresolved-action-roll .message-content .blades-roll .dice-roll-strip, +:root body.vtt.game.system-eunos-blades #navigation #chat .chat-message[class*=-roll].unresolved-action-roll .message-content .blades-roll .dice-roll-strip, +:root body.vtt.game.system-eunos-blades #hotbar #chat .chat-message[class*=-roll].unresolved-action-roll .message-content .blades-roll .dice-roll-strip, +:root body.vtt.game.system-eunos-blades #players #chat .chat-message[class*=-roll].unresolved-action-roll .message-content .blades-roll .dice-roll-strip { + margin-top: 5px; +} +:root body.vtt.game.system-eunos-blades #interface #chat .chat-message.unresolved-action-roll, :root body.vtt.game.system-eunos-blades #interface #chat .chat-message.unresolved-action-roll *, +:root body.vtt.game.system-eunos-blades #controls #chat .chat-message.unresolved-action-roll, +:root body.vtt.game.system-eunos-blades #controls #chat .chat-message.unresolved-action-roll *, +:root body.vtt.game.system-eunos-blades #navigation #chat .chat-message.unresolved-action-roll, +:root body.vtt.game.system-eunos-blades #navigation #chat .chat-message.unresolved-action-roll *, +:root body.vtt.game.system-eunos-blades #hotbar #chat .chat-message.unresolved-action-roll, +:root body.vtt.game.system-eunos-blades #hotbar #chat .chat-message.unresolved-action-roll *, +:root body.vtt.game.system-eunos-blades #players #chat .chat-message.unresolved-action-roll, +:root body.vtt.game.system-eunos-blades #players #chat .chat-message.unresolved-action-roll * { + --bg-controlled: url("../assets/animations/chat/roll-position-controlled.webp"); + --bg-risky: url("../assets/animations/chat/roll-position-risky.webp"); + --bg-desperate: url("../assets/animations/chat/roll-position-desperate.webp"); + --bg-fail: url("../assets/animations/chat/fail-bg.webp"); + --dice-strip-bg: url("../assets/animations/chat/lightning-ray.webp") no-repeat center / 100% auto; + --top-die-animation: die-pulse 5s ease infinite; + --ghost-die-animation: die-ghost 4s ease infinite; + --ghost-die-filter: sepia(1) saturate(2) hue-rotate(319deg); } :root body.vtt.game.system-eunos-blades #interface .lightning-border-container { position: absolute; @@ -14970,6 +15246,51 @@ template { :root body.vtt.game.system-eunos-blades .app.window-app .comp.consequence-display-container.consequence-accepted .consequence-icon-container, :root body.vtt.game.system-eunos-blades .app.window-app .comp.consequence-display-container.consequence-accepted * .consequence-icon-container { top: -3px !important; } +:root body.vtt.game.system-eunos-blades .app.window-app .comp.consequence-display-container.consequence-accepted.consequence-resisted { + min-height: 60px; +} +:root body.vtt.game.system-eunos-blades .app.window-app .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted { + position: absolute; + width: 100%; + top: 11px; + left: 20px; + outline: 1px solid magenta !important; + z-index: 3; +} +:root body.vtt.game.system-eunos-blades .app.window-app .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .sub-consequence-resisted-roll-result .resistance-roll-intro { + display: none; +} +:root body.vtt.game.system-eunos-blades .app.window-app .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .consequence-icon-container { + display: none; +} +:root body.vtt.game.system-eunos-blades .app.window-app .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .consequence-type-container { + position: absolute; + top: 0px; + left: 0px; + width: 100%; +} +:root body.vtt.game.system-eunos-blades .app.window-app .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .special-resist-overlay { + position: absolute; + left: 0; + top: 0; + height: 100%; + width: 100%; +} +:root body.vtt.game.system-eunos-blades .app.window-app .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .special-resist-overlay .special-resist-overlay-img { + position: absolute; + left: 0; + top: 0; + height: 100%; +} +:root body.vtt.game.system-eunos-blades .app.window-app .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted ~ .consequence-icon-container { + transform: translate(-20px, 0px); +} +:root body.vtt.game.system-eunos-blades .app.window-app .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted ~ .consequence-type-container { + transform: translate(-20px, 0px); +} +:root body.vtt.game.system-eunos-blades .app.window-app .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted ~ .consequence-name-container { + opacity: 0; +} :root body.vtt.game.system-eunos-blades .app.window-app .comp.consequence-display-container .base-consequence { --csq-icon-dark: var(--blades-black); --csq-icon-med: var(--blades-grey); diff --git a/css/tinymce/content.min.css b/css/tinymce/content.min.css index e713d957..766bfda3 100644 --- a/css/tinymce/content.min.css +++ b/css/tinymce/content.min.css @@ -1125,6 +1125,51 @@ html .comp.consequence-display-container.consequence-accepted, html .comp.conseq html .comp.consequence-display-container.consequence-accepted .consequence-icon-container, html .comp.consequence-display-container.consequence-accepted * .consequence-icon-container, :root .comp.consequence-display-container.consequence-accepted .consequence-icon-container, :root .comp.consequence-display-container.consequence-accepted * .consequence-icon-container { top: -3px !important; } +html .comp.consequence-display-container.consequence-accepted.consequence-resisted, :root .comp.consequence-display-container.consequence-accepted.consequence-resisted { + min-height: 60px; +} +html .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted, :root .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted { + position: absolute; + width: 100%; + top: 11px; + left: 20px; + outline: 1px solid magenta !important; + z-index: 3; +} +html .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .sub-consequence-resisted-roll-result .resistance-roll-intro, :root .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .sub-consequence-resisted-roll-result .resistance-roll-intro { + display: none; +} +html .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .consequence-icon-container, :root .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .consequence-icon-container { + display: none; +} +html .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .consequence-type-container, :root .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .consequence-type-container { + position: absolute; + top: 0px; + left: 0px; + width: 100%; +} +html .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .special-resist-overlay, :root .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .special-resist-overlay { + position: absolute; + left: 0; + top: 0; + height: 100%; + width: 100%; +} +html .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .special-resist-overlay .special-resist-overlay-img, :root .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .special-resist-overlay .special-resist-overlay-img { + position: absolute; + left: 0; + top: 0; + height: 100%; +} +html .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted ~ .consequence-icon-container, :root .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted ~ .consequence-icon-container { + transform: translate(-20px, 0px); +} +html .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted ~ .consequence-type-container, :root .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted ~ .consequence-type-container { + transform: translate(-20px, 0px); +} +html .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted ~ .consequence-name-container, :root .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted ~ .consequence-name-container { + opacity: 0; +} html .comp.consequence-display-container .base-consequence, :root .comp.consequence-display-container .base-consequence { --csq-icon-dark: var(--blades-black); --csq-icon-med: var(--blades-grey); @@ -2800,6 +2845,51 @@ html .comp.consequence-display-container.consequence-accepted, html .comp.conseq html .comp.consequence-display-container.consequence-accepted .consequence-icon-container, html .comp.consequence-display-container.consequence-accepted * .consequence-icon-container, :root .comp.consequence-display-container.consequence-accepted .consequence-icon-container, :root .comp.consequence-display-container.consequence-accepted * .consequence-icon-container { top: -3px !important; } +html .comp.consequence-display-container.consequence-accepted.consequence-resisted, :root .comp.consequence-display-container.consequence-accepted.consequence-resisted { + min-height: 60px; +} +html .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted, :root .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted { + position: absolute; + width: 100%; + top: 11px; + left: 20px; + outline: 1px solid magenta !important; + z-index: 3; +} +html .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .sub-consequence-resisted-roll-result .resistance-roll-intro, :root .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .sub-consequence-resisted-roll-result .resistance-roll-intro { + display: none; +} +html .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .consequence-icon-container, :root .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .consequence-icon-container { + display: none; +} +html .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .consequence-type-container, :root .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .consequence-type-container { + position: absolute; + top: 0px; + left: 0px; + width: 100%; +} +html .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .special-resist-overlay, :root .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .special-resist-overlay { + position: absolute; + left: 0; + top: 0; + height: 100%; + width: 100%; +} +html .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .special-resist-overlay .special-resist-overlay-img, :root .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted .special-resist-overlay .special-resist-overlay-img { + position: absolute; + left: 0; + top: 0; + height: 100%; +} +html .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted ~ .consequence-icon-container, :root .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted ~ .consequence-icon-container { + transform: translate(-20px, 0px); +} +html .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted ~ .consequence-type-container, :root .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted ~ .consequence-type-container { + transform: translate(-20px, 0px); +} +html .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted ~ .consequence-name-container, :root .comp.consequence-display-container.consequence-accepted.consequence-resisted .sub-consequence-resisted ~ .consequence-name-container { + opacity: 0; +} html .comp.consequence-display-container .base-consequence, :root .comp.consequence-display-container .base-consequence { --csq-icon-dark: var(--blades-black); --csq-icon-med: var(--blades-grey); diff --git a/module/BladesChat.js b/module/BladesChat.js index 56c4dc90..cb5aaac0 100644 --- a/module/BladesChat.js +++ b/module/BladesChat.js @@ -4,11 +4,19 @@ import BladesConsequence from "./sheets/roll/BladesConsequence.js"; // #endregion class BladesChat extends ChatMessage { static Initialize() { + // let lastMessageID: string|false = Array.from(game.messages).pop()?.id ?? ""; Hooks.on("renderChatMessage", (_msg, html) => { ApplyTooltipAnimations(html); ApplyConsequenceAnimations(html); BladesConsequence.ApplyChatListeners(html); - setTimeout(() => { html.addClass("display-ok"); }, 2000); + html.addClass("display-ok"); + // if (lastMessageID && _msg.id === lastMessageID) { + // setTimeout(() => { + // $(document).find("#chat .chat-message:not([class*='-roll'])") + // .remove(); + // }, 500); + // lastMessageID = false; + // } }); return loadTemplates([ "systems/eunos-blades/templates/chat/roll-result-action-roll.hbs", diff --git a/module/BladesRoll.js b/module/BladesRoll.js index b76dd9b2..575571c2 100644 --- a/module/BladesRoll.js +++ b/module/BladesRoll.js @@ -1,6 +1,6 @@ // #region IMPORTS ~ import U from "./core/utilities.js"; -import C, { BladesActorType, BladesItemType, BladesPhase, RollPermissions, RollType, RollSubType, RollModStatus, RollModSection, ActionTrait, DowntimeAction, AttributeTrait, Position, Effect, Factor, RollResult, RollPhase, ConsequenceType, Tag } from "./core/constants.js"; +import C, { BladesActorType, BladesItemType, BladesPhase, RollPermissions, RollType, RollSubType, RollModType, RollModStatus, RollModSection, ActionTrait, DowntimeAction, AttributeTrait, Position, Effect, Factor, RollResult, RollPhase, ConsequenceType, Tag } from "./core/constants.js"; import { BladesActor, BladesPC, BladesCrew } from "./documents/BladesActorProxy.js"; import { BladesItem, BladesGMTracker } from "./documents/BladesItemProxy.js"; import { ApplyTooltipAnimations, ApplyConsequenceAnimations } from "./core/gsap.js"; @@ -182,7 +182,7 @@ class BladesRollMod { name: nameVal, section: catVal, base_status: RollModStatus.ToggledOff, - modType: "general", + modType: RollModType.general, value: 1, posNeg: posNegVal, tooltip: "" @@ -314,10 +314,10 @@ class BladesRollMod { get isInInactiveBlock() { if (game.user.isGM) { return [RollModStatus.Hidden, RollModStatus.ForcedOff, RollModStatus.ToggledOff].includes(this.status) - && (this.isConditional || [BladesItemType.ability].includes(this.modType)); + && (this.isConditional || this.modType === RollModType.ability); } return [RollModStatus.ForcedOff, RollModStatus.ToggledOff].includes(this.status) - && (this.isConditional || [BladesItemType.ability].includes(this.modType)); + && (this.isConditional || this.modType === RollModType.ability); } get isPush() { return Boolean(U.lCase(this.name) === "push" @@ -355,16 +355,18 @@ class BladesRollMod { } } /** - * Sets the conditional status of the roll instance. + * Sets the conditional status of the roll mod instance. * @returns {boolean} - Returns false if the status is ForcedOn or ToggledOff, true if the status is Hidden. */ setConditionalStatus() { - // If the roll instance is not conditional, return false + // If the roll mod instance is not conditional, return false if (!this.isConditional) { return false; } // If any auto-Traits/Types apply, set status to ForcedOn and return false const autoTypesOrTraitsApply = this.autoRollTypes.includes(this.rollInstance.rollType) + || (this.rollInstance.rollSubType && this.autoRollTypes.includes(this.rollInstance.rollSubType)) + || (this.rollInstance.rollDowntimeAction && this.autoRollTypes.includes(this.rollInstance.rollDowntimeAction)) || (!this.rollInstance.rollTrait || this.autoRollTraits.includes(this.rollInstance.rollTrait)); if (autoTypesOrTraitsApply) { this.heldStatus = RollModStatus.ForcedOn; @@ -397,8 +399,13 @@ class BladesRollMod { * @returns {boolean} - Returns true if any types or traits apply, false otherwise. */ checkTypesOrTraits(types, traits) { + if ([...types, ...traits].length === 0) { + return false; + } const typesApply = Boolean((!this.rollInstance.isParticipantRoll && types.length === 0) - || types.includes(this.rollInstance.rollType)); + || types.includes(this.rollInstance.rollType) + || (this.rollInstance.rollSubType && types.includes(this.rollInstance.rollSubType)) + || (this.rollInstance.rollDowntimeAction && types.includes(this.rollInstance.rollDowntimeAction))); const traitsApply = Boolean((!this.rollInstance.isParticipantRoll && traits.length === 0) || (this.rollInstance.rollTrait && traits.includes(this.rollInstance.rollTrait))); return typesApply && traitsApply; @@ -611,7 +618,7 @@ class BladesRollMod { }); } get selectOptions() { - if (this.modType !== "teamwork") { + if (this.modType !== RollModType.teamwork) { return null; } if (this.name === "Assist" || this.name === "Setup") { @@ -623,7 +630,7 @@ class BladesRollMod { return null; } get selectedParticipant() { - if (this.modType !== "teamwork") { + if (this.modType !== RollModType.teamwork) { return null; } return this.rollInstance.getRollParticipant(this.section, this.name); @@ -735,9 +742,12 @@ class BladesRollMod { this.conditionalRollTypes = modData.conditionalRollTypes ?? []; this.autoRollTypes = modData.autoRollTypes ?? []; this.participantRollTypes = modData.participantRollTypes ?? []; - this.conditionalRollTraits = modData.conditionalRollTraits ?? []; - this.autoRollTraits = modData.autoRollTraits ?? []; - this.participantRollTraits = modData.participantRollTraits ?? []; + this.conditionalRollTraits = (modData.conditionalRollTraits ?? []) + .map((trait) => U.lCase(trait)); + this.autoRollTraits = (modData.autoRollTraits ?? []) + .map((trait) => U.lCase(trait)); + this.participantRollTraits = (modData.participantRollTraits ?? []) + .map((trait) => U.lCase(trait)); this.section = modData.section; } } @@ -1189,6 +1199,19 @@ class BladesRollParticipant { } } class BladesRoll extends DocumentSheet { + static _Debug = { + modWatch: false + }; + static Debug = { + watchRollMod(name) { + if (typeof name === "string") { + BladesRoll._Debug.modWatch = new RegExp(name, "g"); + } + else { + BladesRoll._Debug.modWatch = false; + } + } + }; // #region STATIC METHODS: INITIALIZATION & DEFAULTS ~ static get defaultOptions() { return foundry.utils.mergeObject(super.defaultOptions, { @@ -1234,7 +1257,7 @@ class BladesRoll extends DocumentSheet { section: RollModSection.roll, base_status: RollModStatus.ToggledOff, posNeg: "positive", - modType: "general", + modType: RollModType.general, value: 1, effectKeys: ["ForceOff-Bargain", "Cost-Stress2"], tooltip: "

Push for +1d

For 2 Stress, add 1 die to your pool.

(You cannot also accept a Devil's Bargain to increase your dice pool: It's one or the other.)

" @@ -1245,7 +1268,7 @@ class BladesRoll extends DocumentSheet { section: RollModSection.roll, base_status: RollModStatus.Hidden, posNeg: "positive", - modType: "general", + modType: RollModType.general, value: 1, effectKeys: [], tooltip: "

Devil's Bargain

The GM has offered you a Devil's Bargain.

Accept the terms to add 1 die to your pool.

(You cannot also Push for +1d to increase your dice pool: It's one or the other.)

" @@ -1256,7 +1279,7 @@ class BladesRoll extends DocumentSheet { section: RollModSection.roll, base_status: RollModStatus.Hidden, posNeg: "positive", - modType: "teamwork", + modType: RollModType.teamwork, value: 1, tooltip: "

%DOC_NAME% Assists

%DOC_NAME% is Assisting your efforts, adding 1 die to your pool.

" }, @@ -1266,7 +1289,7 @@ class BladesRoll extends DocumentSheet { section: RollModSection.position, base_status: RollModStatus.Hidden, posNeg: "positive", - modType: "teamwork", + modType: RollModType.teamwork, value: 1, tooltip: "

%DOC_NAME% Sets You Up

%DOC_NAME% has set you up for success with a preceding Setup action, increasing your Position by one level.

" }, @@ -1276,7 +1299,7 @@ class BladesRoll extends DocumentSheet { section: RollModSection.effect, base_status: RollModStatus.ToggledOff, posNeg: "positive", - modType: "general", + modType: RollModType.general, value: 1, effectKeys: ["Cost-Stress2"], tooltip: "

Push for Effect

For 2 Stress, increase your Effect by one level.

" @@ -1287,7 +1310,7 @@ class BladesRoll extends DocumentSheet { section: RollModSection.effect, base_status: RollModStatus.Hidden, posNeg: "positive", - modType: "teamwork", + modType: RollModType.teamwork, value: 1, tooltip: "

%DOC_NAME% Sets You Up

%DOC_NAME% has set you up for success with a preceding Setup action, increasing your Effect by one level.

" }, @@ -1297,7 +1320,7 @@ class BladesRoll extends DocumentSheet { section: RollModSection.effect, base_status: RollModStatus.Hidden, posNeg: "positive", - modType: "general", + modType: RollModType.general, value: 1, tooltip: "

Potency

By circumstance or advantage, you have Potency in this action, increasing your Effect by one level.

" }, @@ -1307,7 +1330,7 @@ class BladesRoll extends DocumentSheet { section: RollModSection.effect, base_status: RollModStatus.Hidden, posNeg: "negative", - modType: "general", + modType: RollModType.general, value: 1, tooltip: "

Potency

By circumstance or advantage, @OPPOSITION_NAME@ has Potency against you, reducing your Effect by one level." } @@ -2189,17 +2212,58 @@ class BladesRoll extends DocumentSheet { this.rollFactorPenaltiesNegated = {}; this.tempGMBoosts = {}; this.rollMods = modsData.map((modData) => new BladesRollMod(modData, this)); + // ESLINT DISABLE: Dev Code. + // eslint-disable-next-line @typescript-eslint/no-explicit-any const initReport = {}; + let initReportCount = 0; + const watchMod = (label) => { + if (BladesRoll._Debug.modWatch === false) { + return; + } + const reportLabel = `(${initReportCount}) == ${label}`; + const rollMod = this.rollMods + .find((mod) => BladesRoll._Debug.modWatch && BladesRoll._Debug.modWatch.exec(mod.name)); + if (rollMod) { + initReport[`${reportLabel} : ${rollMod.status}`] = { + inst: rollMod, + data: { ...rollMod.data }, + sourceName: rollMod.sourceName, + status: { + ALL: rollMod.status, + base: rollMod.baseStatus, + held: rollMod.heldStatus, + user: rollMod.userStatus + }, + is: { + active: rollMod.isActive, + visible: rollMod.isVisible, + conditional: rollMod.isConditional, + inInactiveBlock: rollMod.isInInactiveBlock, + isPush: rollMod.isPush, + isBasicPush: rollMod.isBasicPush + }, + flags: { ...rollMod.flagParams } + }; + } + else { + initReport[reportLabel] = "MOD NOT FOUND"; + } + initReportCount++; + }; + watchMod("INITIAL"); /* *** PASS ZERO: ROLLTYPE VALIDATION PASS *** */ this.rollMods = this.rollMods.filter((rollMod) => rollMod.isValidForRollType()); + watchMod("ROLLTYPE VALIDATION"); /* *** PASS ONE: DISABLE PASS *** */ - this.rollMods - // ... Conditional Status Pass - .filter((rollMod) => !rollMod.setConditionalStatus()) - // ... AutoReveal/AutoEnable Pass - .filter((rollMod) => !rollMod.setAutoStatus()) - // ... Payable Pass - .forEach((rollMod) => { rollMod.setPayableStatus(); }); + // ... Conditional Status Pass + const conditionalDisablePass = this.rollMods.filter((rollMod) => !rollMod.setConditionalStatus()); + watchMod("DISABLE - CONDITIONAL"); + // ... AutoReveal/AutoEnable Pass + const autoRevealDisablePass = conditionalDisablePass.filter((rollMod) => !rollMod.setAutoStatus()); + watchMod("DISABLE - AUTO-REVEAL/ENABLE"); + // ... Payable Pass + autoRevealDisablePass.forEach((rollMod) => { rollMod.setPayableStatus(); }); + watchMod("DISABLE - PAYABLE"); /* *** PASS TWO: FORCE-ON PASS *** */ const parseForceOnKeys = (mod) => { const holdKeys = mod.effectKeys.filter((key) => key.startsWith("ForceOn")); @@ -2242,6 +2306,7 @@ class BladesRoll extends DocumentSheet { } }; this.getActiveRollMods().forEach((rollMod) => parseForceOnKeys(rollMod)); + watchMod("FORCE-ON PASS"); /* *** PASS THREE: PUSH-CHECK PASS *** */ // IF ROLL FORCED ... if (this.isForcePushed()) { @@ -2249,6 +2314,7 @@ class BladesRoll extends DocumentSheet { this.getInactivePushMods() .filter((mod) => !mod.isBasicPush) .forEach((mod) => { mod.heldStatus = RollModStatus.ForcedOff; }); + watchMod("PUSH-CHECK: FORCE-OFF IS-PUSH"); } // ... BY CATEGORY ... [RollModSection.roll, RollModSection.effect].forEach((cat) => { @@ -2260,17 +2326,20 @@ class BladesRoll extends DocumentSheet { bargainMod.heldStatus = RollModStatus.ForcedOff; } } + watchMod("PUSH-CHECK: FORCE OFF BARGAIN"); } else { // Otherwise, hide all Is-Push mods this.getInactivePushMods(cat) .filter((mod) => !mod.isBasicPush) .forEach((mod) => { mod.heldStatus = RollModStatus.Hidden; }); + watchMod("PUSH-CHECK: HIDE IS-PUSH"); } }); /* *** PASS FOUR: Relevancy Pass *** */ this.getVisibleRollMods() .forEach((mod) => { mod.setRelevancyStatus(); }); + watchMod("RELEVANCY PASS"); /* *** PASS FIVE: Overpayment Pass *** */ // ... If 'Cost-SpecialArmor' active, ForceOff other visible Cost-SpecialArmor mods const activeArmorCostMod = this.getActiveRollMods().find((mod) => mod.effectKeys.includes("Cost-SpecialArmor")); @@ -2278,6 +2347,7 @@ class BladesRoll extends DocumentSheet { this.getVisibleRollMods() .filter((mod) => !mod.isActive && mod.effectKeys.includes("Cost-SpecialArmor")) .forEach((mod) => { mod.heldStatus = RollModStatus.ForcedOff; }); + watchMod("OVERPAYMENT PASS"); } eLog.checkLog2("rollMods", "*** initRollMods() PASS ***", initReport); } @@ -2493,7 +2563,7 @@ class BladesRoll extends DocumentSheet { section: RollModSection.roll, base_status: RollModStatus.ToggledOff, posNeg: "positive", - modType: "general", + modType: RollModType.general, value: 1, effectKeys: [], tooltip: "

" @@ -2504,7 +2574,7 @@ class BladesRoll extends DocumentSheet { section: RollModSection.roll, base_status: RollModStatus.ToggledOff, posNeg: "negative", - modType: "general", + modType: RollModType.general, value: 1, effectKeys: [], tooltip: "

" @@ -2515,7 +2585,7 @@ class BladesRoll extends DocumentSheet { section: RollModSection.roll, base_status: RollModStatus.ToggledOff, posNeg: "positive", - modType: "general", + modType: RollModType.general, value: 1, effectKeys: [], tooltip: "

" @@ -2526,7 +2596,7 @@ class BladesRoll extends DocumentSheet { section: RollModSection.roll, base_status: RollModStatus.ToggledOff, posNeg: "negative", - modType: "general", + modType: RollModType.general, value: 1, effectKeys: [], tooltip: "

" @@ -2537,7 +2607,7 @@ class BladesRoll extends DocumentSheet { section: RollModSection.position, base_status: RollModStatus.ToggledOff, posNeg: "positive", - modType: "general", + modType: RollModType.general, value: 1, effectKeys: [], tooltip: "

Help From a Friend

Add +1d if you enlist the help of a friend or contact.

" @@ -2548,7 +2618,7 @@ class BladesRoll extends DocumentSheet { section: RollModSection.roll, base_status: RollModStatus.ToggledOff, posNeg: "negative", - modType: "general", + modType: RollModType.general, value: 1, effectKeys: [], tooltip: "

" @@ -2564,7 +2634,7 @@ class BladesRoll extends DocumentSheet { section: RollModSection.position, base_status: RollModStatus.ToggledOff, posNeg: "positive", - modType: "general", + modType: RollModType.general, value: 1, effectKeys: [], tooltip: "

Help From a Friend

Add +1d if you enlist the help of a friend or contact.

" @@ -2576,7 +2646,7 @@ class BladesRoll extends DocumentSheet { section: RollModSection.after, base_status: RollModStatus.ForcedOn, posNeg: "positive", - modType: "general", + modType: RollModType.general, value: 0, effectKeys: [], tooltip: "

Buying Result Level

After your roll, you can increase the result level by one for each Coin you spend.

" @@ -2590,7 +2660,7 @@ class BladesRoll extends DocumentSheet { section: RollModSection.roll, base_status: RollModStatus.ToggledOff, posNeg: "positive", - modType: "general", + modType: RollModType.general, value: 1, effectKeys: [], tooltip: "

Repeat Purchase Bonus

Add +1d if you have previously acquired this asset or service with a Acquire Asset Downtime activity.

" @@ -2601,7 +2671,7 @@ class BladesRoll extends DocumentSheet { section: RollModSection.after, base_status: RollModStatus.Hidden, posNeg: "negative", - modType: "general", + modType: RollModType.general, value: 0, effectKeys: ["Cost-Heat2"], tooltip: "

Restricted

Whether contraband goods or dangerous materials, this Acquire Asset Downtime activity will add +2 Heat to your crew.

" @@ -2617,7 +2687,7 @@ class BladesRoll extends DocumentSheet { section: RollModSection, base_status: RollModStatus, posNeg: "", - modType: "general", + modType: RollModType.general, value: 1, effectKeys: [], tooltip: "

" @@ -2645,7 +2715,7 @@ class BladesRoll extends DocumentSheet { section: RollModSection.position, base_status: RollModStatus.ForcedOn, posNeg: "negative", - modType: "general", + modType: RollModType.general, value: 1, effectKeys: [], tooltip: "

Worse Position

A Consequence on a previous roll has worsened your Position.

" @@ -2667,7 +2737,7 @@ class BladesRoll extends DocumentSheet { section: RollModSection.effect, base_status: RollModStatus.ForcedOn, posNeg: "negative", - modType: "general", + modType: RollModType.general, value: 1, effectKeys: [], tooltip: "

Reduced Effect

A Consequence has worsened your Effect.

" @@ -3199,14 +3269,14 @@ class BladesRoll extends DocumentSheet { const { chatID } = this.rollConsequence?.resistTo ?? {}; if (csqID && chatID) { const resistedCsq = await BladesConsequence.GetFromID(chatID, csqID); - if (resistedCsq) { - await resistedCsq.applyResistedConsequence("resist"); + if (resistedCsq && this.rollConsequence?.resistTo) { + await resistedCsq.applyResistedConsequence("resist", await this.getResultHTML(chatID, { icon: this.rollConsequence.resistTo.icon ?? "" })); } } if (BladesPC.IsType(this.rollPrimaryDoc)) { this.rollPrimaryDoc.adjustStress(this.resistanceStressCost); } - await this.outputRollToChat(); + // await this.outputRollToChat(); break; } } @@ -3237,11 +3307,9 @@ class BladesRoll extends DocumentSheet { // chatSpeaker.alias = `${chatSpeaker.alias} Rolls ...`; return chatSpeaker; } - async getResultHTML(chatMsgID) { - // eslint-disable-next-line @typescript-eslint/no-this-alias - const templateData = this; - templateData.chatMsgID = chatMsgID; - return await renderTemplate(`systems/eunos-blades/templates/chat/roll-result-${U.lCase(this.rollType)}-roll.hbs`, templateData); + async getResultHTML(chatMsgID, context = {}) { + context = Object.assign(this, context, { chatMsgID }); + return await renderTemplate(`systems/eunos-blades/templates/chat/roll-result-${U.lCase(this.rollType)}-roll.hbs`, context); } _chatMessageID; _chatMessageTemp; diff --git a/module/core/constants.js b/module/core/constants.js index c76cad70..7a90dacf 100644 --- a/module/core/constants.js +++ b/module/core/constants.js @@ -176,6 +176,16 @@ export var RollSubType; RollSubType["GroupLead"] = "GroupLead"; RollSubType["GroupParticipant"] = "GroupParticipant"; })(RollSubType || (RollSubType = {})); +export var RollModType; +(function (RollModType) { + RollModType["general"] = "general"; + RollModType["harm"] = "harm"; + RollModType["teamwork"] = "teamwork"; + RollModType["ability"] = "ability"; + RollModType["gear"] = "gear"; + RollModType["advantage"] = "advantage"; + RollModType["disadvantage"] = "disadvantage"; +})(RollModType || (RollModType = {})); export var ConsequenceType; (function (ConsequenceType) { ConsequenceType["ReducedEffect"] = "ReducedEffect"; diff --git a/module/documents/actors/BladesPC.js b/module/documents/actors/BladesPC.js index 2248d9bf..76a6b9c0 100644 --- a/module/documents/actors/BladesPC.js +++ b/module/documents/actors/BladesPC.js @@ -1,4 +1,4 @@ -import C, { AttributeTrait, Harm, BladesActorType, BladesItemType, Tag, RollModSection, RollModStatus } from "../../core/constants.js"; +import C, { AttributeTrait, Harm, BladesActorType, BladesItemType, Tag, RollModType, RollModSection, RollModStatus } from "../../core/constants.js"; import U from "../../core/utilities.js"; import { BladesActor } from "../BladesActorProxy.js"; import { BladesItem } from "../BladesItemProxy.js"; @@ -352,7 +352,7 @@ class BladesPC extends BladesActor { section: effectCat, posNeg: "negative", base_status: RollModStatus.ToggledOn, - modType: "harm", + modType: RollModType.harm, value: 1, tooltip: [ `

${effectCat === RollModSection.roll ? Harm.Impaired : Harm.Weakened} (Harm)

`, @@ -374,7 +374,7 @@ class BladesPC extends BladesActor { section: RollModSection.roll, posNeg: "negative", base_status: RollModStatus.ToggledOn, - modType: "harm", + modType: RollModType.harm, value: 0, effectKeys: ["Cost-Stress2"], tooltip: [ diff --git a/module/sheets/actor/BladesActorSheet.js b/module/sheets/actor/BladesActorSheet.js index bafa8c3b..db1fcbeb 100644 --- a/module/sheets/actor/BladesActorSheet.js +++ b/module/sheets/actor/BladesActorSheet.js @@ -357,7 +357,7 @@ class BladesActorSheet extends ActorSheet { if (!doc) { return; } - await G.effects.blurOut(elem$).then(async () => { + await G.effects.blurRemove(elem$).then(async () => { if (doc instanceof BladesItem) { await this.actor.remSubItem(doc); } @@ -372,7 +372,7 @@ class BladesActorSheet extends ActorSheet { if (!doc) { return; } - await G.effects.blurOut(elem$).then(async () => await doc.delete()); + await G.effects.blurRemove(elem$).then(async () => await doc.delete()); } async _onItemToggleClick(event) { event.preventDefault(); diff --git a/module/sheets/actor/BladesCrewSheet.js b/module/sheets/actor/BladesCrewSheet.js index 9acec92b..26a2e1f9 100644 --- a/module/sheets/actor/BladesCrewSheet.js +++ b/module/sheets/actor/BladesCrewSheet.js @@ -15,7 +15,7 @@ class BladesCrewSheet extends BladesActorSheet { eLog.checkLog("actor", "[BladesCrewSheet] super.getData()", { ...context }); const { activeSubItems } = this.actor; const sheetData = {}; - //~ Assemble embedded actors and items + // ~ Assemble embedded actors and items sheetData.preparedItems = Object.assign(context.preparedItems ?? {}, { abilities: activeSubItems.filter((item) => item.type === BladesItemType.crew_ability), playbook: this.actor.playbook, @@ -144,7 +144,7 @@ class BladesCrewSheet extends BladesActorSheet { html.find(".turf-select").on("click", async (event) => { const turf_id = $(event.currentTarget).data("turfId"); const turf_current_status = $(event.currentTarget).data("turfStatus"); - this.actor.playbook?.update({ ["system.turfs." + turf_id + ".value"]: !turf_current_status }) + this.actor.playbook?.update({ [`system.turfs.${turf_id}.value`]: !turf_current_status }) .then(() => this.render(false)); }); } diff --git a/module/sheets/roll/BladesConsequence.js b/module/sheets/roll/BladesConsequence.js index b31bb6b1..f56dc57b 100644 --- a/module/sheets/roll/BladesConsequence.js +++ b/module/sheets/roll/BladesConsequence.js @@ -350,74 +350,60 @@ class BladesConsequence { // If COMPLICATION -> No change to rollPrimary. // If LOST OPPORTUNITY -> No change to rollPrimary. } - async transformToConsequence(typeRef) { - const message$ = $(await this._chatMessage.getHTML()).find(".blades-roll"); - let icon = undefined; - let typeDisplay = ""; - let name = ""; - switch (typeRef) { - case "resist": { - if (!this._resistTo) { - throw new Error(`Cannot transform csq id '${this.id}' into "resist" consequence: no resistTo data found.`); - } - if (this._resistTo.type === ConsequenceType.None) { - break; - } - icon = this._resistTo.icon; - typeDisplay = this._resistTo.typeDisplay; - name = this._resistTo.name; - break; - } - case "armor": { - if (!this._armorTo) { - throw new Error(`Cannot transform csq id '${this.id}' into "armor" consequence: no armorTo data found.`); - } - if (this._armorTo.type === ConsequenceType.None) { - break; - } - icon = this._armorTo.icon; - typeDisplay = this._armorTo.typeDisplay; - name = this._armorTo.name; - break; - } - case "special": { - if (!this._specialTo) { - throw new Error(`Cannot transform csq id '${this.id}' into "special" consequence: no specialTo data found.`); - } - if (this._specialTo.type === ConsequenceType.None) { - break; - } - icon = this._specialTo.icon; - typeDisplay = this._specialTo.typeDisplay; - name = this._specialTo.name; - break; - } + async transformToConsequence(typeRef, rollHTML) { + const transformRecord = {}; + // Prepare template context for accepted (original) consequence. + const csqTemplateData = this; + csqTemplateData.blockClass = "consequence-resisted"; + // Create HTML for accepted version of this consequence + let csqAcceptedHTML = await renderTemplate("systems/eunos-blades/templates/components/consequence-accepted.hbs", Object.assign(this, { blockClass: "consequence-resisted" })); + transformRecord["1) csqAcceptedHTML"] = csqAcceptedHTML; + // Get the resisted consequence data according to typeRef + const rCsq = { + resist: this._resistTo, + armor: this._armorTo, + special: this._specialTo + }[typeRef]; + if (!rCsq) { + return; } - eLog.checkLog2("csqTransform", "Initial Message Code", { message$, message: message$[0] }); - // Locate consequence HTML + // Get HTML for the consequence it resisted to + let csqResistedHTML = await renderTemplate("systems/eunos-blades/templates/components/consequence-accepted.hbs", rCsq); + transformRecord["2) csqResistedHTML"] = csqResistedHTML; + // Add a class + csqResistedHTML = $(csqResistedHTML) + .addClass("sub-consequence-resisted")[0].outerHTML; + transformRecord["2.1) csqResistedHTML + class"] = csqResistedHTML; + // If roll HTML provided, prepend that to resisted consequence + if (rollHTML) { + csqResistedHTML = $(csqResistedHTML).prepend($(`
+ ${rollHTML} +
`))[0].outerHTML; + transformRecord["2.2) csqResistedHTML + rollHTML"] = csqResistedHTML; + } + // If "special" or "armor", add the roll overlay + if (["armor", "special"].includes(typeRef)) { + csqResistedHTML = $(csqResistedHTML).prepend($(` +
+ + + +
`))[0].outerHTML; + transformRecord["2.3) csqResistedHTML + overlay"] = csqResistedHTML; + } + // Prepend the resisted consequence HTML to the accepted consequence HTML + csqAcceptedHTML = $(csqAcceptedHTML).prepend($(csqResistedHTML))[0].outerHTML; + transformRecord["3) csqAcceptedHTML + csqResistedHTML"] = csqAcceptedHTML; + // Get message HTML + const message$ = $(await this._chatMessage.getHTML()); + transformRecord["4) message$ before Replace"] = message$[0].outerHTML; + // Replace consequence with new data message$.find(`.comp.consequence-display-container[data-csq-id='${this._id}']`) - // Replace with compiled consequence-accepted template, unless type is None, in which case erase it - .replaceWith(icon === undefined ? "" : ` -
- -
-
- -
-
- -
- -
- -
- -
- -
- `); - eLog.checkLog2("csqTransform", "Modified Message Code", { message$, message: message$[0], outerHTML: message$[0].outerHTML }); - await this._chatMessage.update({ content: message$[0].outerHTML }); + .replaceWith(csqAcceptedHTML); + transformRecord["4.5) message$ after Replace"] = message$[0].outerHTML; + transformRecord["5) message$.find(.blades-roll) = CONTENT"] = message$.find(".blades-roll")[0].outerHTML; + await this._chatMessage.update({ content: message$.find(".blades-roll")[0].outerHTML }); + eLog.checkLog2("transformConsequence", "Transform Record", transformRecord); } async acceptConsequence() { await this.applyConsequenceToPrimary(); @@ -490,7 +476,7 @@ class BladesConsequence { }; BladesRoll.NewRoll(resistConfig); } - async applyResistedConsequence(resistType) { + async applyResistedConsequence(resistType, rollHTML) { const rCsq = { resist: this._resistTo, armor: this._armorTo, @@ -499,15 +485,19 @@ class BladesConsequence { if (rCsq) { await rCsq.applyConsequenceToPrimary(); } - await this.transformToConsequence(resistType); + await this.transformToConsequence(resistType, rollHTML); } async resistArmorConsequence() { - this._primaryDoc.spendArmor(); - this.applyResistedConsequence("armor"); + if (this._armorTo) { + this._primaryDoc.spendArmor(); + this.applyResistedConsequence("armor", await renderTemplate("systems/eunos-blades/templates/components/consequence-accepted.hbs", Object.assign(this._armorTo, { isArmorResist: true }))); + } } async resistSpecialArmorConsequence() { - await this._primaryDoc.spendSpecialArmor(); - this.applyResistedConsequence("special"); + if (this._specialTo) { + this._primaryDoc.spendSpecialArmor(); + this.applyResistedConsequence("special", await renderTemplate("systems/eunos-blades/templates/components/consequence-accepted.hbs", Object.assign(this._specialTo, { isSpecialArmorResist: true }))); + } } } export default BladesConsequence; diff --git a/scss/chat/_chat.scss b/scss/chat/_chat.scss index f80e4a61..b701e783 100644 --- a/scss/chat/_chat.scss +++ b/scss/chat/_chat.scss @@ -12,6 +12,10 @@ width: 125%; margin-left: -25%; padding-left: 25%; + + &, * { + --font-primary: "Beaufort", + } } .flexrow.jump-to-bottom { @@ -27,30 +31,37 @@ z-index: 1; } } + .chat-message:not(.display-ok) { opacity: 0 !important; } -.chat-message[class*=-roll] { - // --font-primary: Beaufort, serif !important; - --chat-header-height: 15px; - --chat-vertical-gap: 15px; - --resistance-right-shift: 60px; - --speaker-portrait-height: 100px; +.chat-message[class*="-roll"] { + + &, * { + // --font-primary: Beaufort, serif !important; + + --chat-header-height: 15px; + --chat-vertical-gap: 15px; + --resistance-right-shift: 60px; - --bg-controlled: var(--blades-grey-bright); - --bg-risky: var(--blades-black-dark); - --bg-desperate: var(--blades-red-darkest); + --speaker-portrait-height: 100px; - --bg-critical: transparent; - --bg-success: transparent; - --bg-partial: transparent; - --bg-fail: transparent; + --bg-controlled: var(--blades-grey-bright); + --bg-risky: var(--blades-black-dark); + --bg-desperate: var(--blades-red-darkest); - --dice-strip-bg: var(--blades-black-dark); - --top-die-animation: none; - --ghost-die-animation: none; - --ghost-die-filter: blur(1px) sepia(1) saturate(2) hue-rotate(319deg) brightness(0.35); + --bg-critical: transparent; + --bg-success: transparent; + --bg-partial: transparent; + --bg-fail: transparent; + + --dice-strip-bg: var(--blades-black-dark); + --top-die-animation: none; + --ghost-die-animation: die-ghost 2s ease infinite; + // --ghost-die-filter: blur(1px) sepia(1) saturate(2) hue-rotate(319deg) brightness(0.35); + --ghost-die-filter: none; + } background: var(--blades-black-dark); background: transparent; @@ -315,6 +326,7 @@ transform-origin: 50% 50%; overflow: hidden; border-radius: calc(0.2 * var(--die-size)); + scale: 1.25; img { height: var(--die-size); @@ -323,14 +335,14 @@ } &.blades-die-critical { - box-shadow: 0px 0px 5px 3px var(--blades-gold-bright); + // box-shadow: 0px 0px 5px 3px var(--blades-gold-bright); animation: var(--top-die-animation); z-index: 1; } &.blades-die-critical:first-child + .blades-die-critical { // margin-left: calc(-0.05 * var(--die-size)); margin-left: 3px; - box-shadow: 0px 0px 5px 3px var(--blades-gold-bright); + // box-shadow: 0px 0px 5px 3px var(--blades-gold-bright); // Add a delay to the animation to create a staggered effect animation: var(--top-die-animation); animation-delay: 0.15s; @@ -338,18 +350,18 @@ // scale: 1.35; } &.blades-die-success:first-child { - filter: drop-shadow(0px 0px calc(var(--die-size) * 0.1) var(--blades-white-bright)); + // filter: drop-shadow(0px 0px calc(var(--die-size) * 0.1) var(--blades-white-bright)); animation: var(--top-die-animation); } &.blades-die-partial:first-child { - box-shadow: 0px 0px 5px var(--blades-white); + // box-shadow: 0px 0px 5px var(--blades-white); animation: var(--top-die-animation); } &.blades-die-ghost { - box-shadow: 0px 0px 5px 1px var(--blades-red); - scale: 0.8; - opacity: 0.8; + // box-shadow: 0px 0px 5px 1px var(--blades-red); + scale: 1; + opacity: 1; rotate: 10deg; animation: var(--ghost-die-animation); @@ -614,6 +626,156 @@ z-index: -3; position: relative; } + &.roll-type-resistance { + width: calc(100% - var(--resistance-right-shift)); + left: var(--resistance-right-shift); + top: 0; + + .chat-message-bg { + display: block; + background: var(--blades-grey); + top: 0; // calc(-1 * (var(--chat-header-height) + var(--chat-vertical-gap))); + height: 100%; // calc(100% + var(--chat-header-height) + var(--chat-vertical-gap)); + left: -15px; + border-top-left-radius: 16px; + border-bottom-left-radius: 16px; + width: calc(100% + var(--resistance-right-shift)); + } + + .resistance-roll-one-line { + position: relative; + justify-content: stretch; + + .resistance-roll-intro { + color: var(--blades-gold-bright); + // transform: translate(-50%, -50%); + // top: 50%; + z-index: 3; + // left: calc(-1 * var(--resistance-right-shift)); + position: absolute; + rotate: -45deg; + transform-origin: 50% 50%; + transform: translate(0%, 0%); + left: calc(-1 * var(--resistance-right-shift) - 0px); + // left: -19px; + text-transform: uppercase; + font-weight: bold; + font-size: 10px; + text-shadow: var(--text-shadow-dark-strong); + top: 7px; + } + + .consequence-icon-img { + height: 32px; + border-radius: 16px; + background: var(--blades-black); + position: absolute; + // left: calc(-1 * var(--resistance-right-shift) + 10px); + left: -10px; + } + + .resistance-roll-vertical-right { + align-items: space-evenly; + + .resistance-roll-attr-dice { + height: 24px; + justify-content: flex-start; + align-items: center; + padding: 0 10px 0 30px; + + .trait-intro { + display: none; + color: var(--blades-black); + margin-right: 5px; + line-height: 24px; + font-size: 10px; + font-weight: bold; + margin-top: 3px; + text-transform: uppercase; + } + + .trait-label { + font-family: var(--font-emphasis); + color: var(--blades-gold-bright); + line-height: 24px; + // margin-top: 3px; + text-shadow: var(--text-shadow-emboss); + + } + + .dice-roll-strip { + height: 24px; + width: fit-content; + padding: 4px 0px; + gap: 3px; + margin: 0 0 0 5px; + background: transparent; + box-shadow: none; + + + .blades-die { + height: 16px; + border-radius: 3px; + // scale: 1; + // filter: none; + // box-shadow: none; + // outline: none; + // border: none; + // background: transparent; + + img { height: 16px; width: 16px; filter: none; } + + &:not(.blades-die-resistance) { + opacity: 0.5; + filter: blur(1px); + } + } + + .blades-die + .blades-die + .blades-die + .blades-die + .blades-die ~ .blades-die:last-child { + margin-right: -50px; + } + } + } + + .resistance-cost-row { + h3 { + font-size: 12px; + text-shadow: var(--text-shadow-dark-strong); + } + + &.cost-bonus { + h3 { + color: var(--blades-gold-bright); + } + } + &.cost-stress { + h3 { + color: var(--blades-red-bright); + } + } + } + } + } + + .chat-header.roll-trait { + font-size: 14px; + color: var(--blades-black); + + } + + .consequence-container.consequence-original { + + .comp.consequence-display-container { + + .consequence-type-container { display: none } + .consequence-name-container { display: none } + + } + + } + .consequence-container.consequence-resisted { display: none } + } + } } @@ -622,15 +784,22 @@ } &:not(.unresolved-action-roll) .message-content .blades-roll { - - .trait-label.trait-verb { display: none; } - .consequence-icon-container { .consequence-icon-circle.base-consequence { animation: none !important; img { animation: none !important; } } } + } + + &.active-chat-roll .message-content .blades-roll { + .trait-label.trait-past-verb { display: none !important; } + } + + &:not(.unresolved-action-roll):not(.active-chat-roll) .message-content .blades-roll { + + .trait-label.trait-verb { display: none; } + .blades-roll > *:not(.chat-message-speaker-portrait-wrapper) { filter: sepia(1) grayscale(0.5) brightness(0.6); @@ -661,7 +830,7 @@ } } - &.roll-position-risky .msg-content .blades-roll { + .roll-position-risky { .chat-header, .consequence-container { background: var(--bg-risky); @@ -669,21 +838,8 @@ } } - &.unresolved-action-roll .msg-content .blades-roll { - --bg-controlled: url("../assets/animations/chat/roll-position-controlled.webp"); - --bg-risky: url("../assets/animations/chat/roll-position-risky.webp"); - --bg-desperate: url("../assets/animations/chat/roll-position-desperate.webp"); + &.unresolved-action-roll .message-content .blades-roll { - // --bg-critical: transparent; - // --bg-success: transparent; - // --bg-partial: transparent; - --bg-fail: url("../assets/animations/chat/fail-bg.webp"); - - --dice-strip-bg: url("../assets/animations/chat/lightning-ray.webp") no-repeat center / 100% auto; - - --top-die-animation: die-pulse 5s ease infinite; - --ghost-die-animation: die-ghost 4s ease infinite; - --ghost-die-filter: sepia(1) saturate(2) hue-rotate(319deg); margin-bottom: 0px; opacity: 1; @@ -691,170 +847,43 @@ background: transparent; outline: none; - .trait-label.trait-past-verb { display: none; } + .trait-label.trait-past-verb { display: none !important; } .dice-roll-strip { margin-top: 5px; } } - &.roll-type-resistance .msg-content .blades-roll { - width: calc(100% - var(--resistance-right-shift)); - left: var(--resistance-right-shift); - top: 0; - - .chat-message-bg { - display: block; - background: var(--blades-grey); - top: 0; // calc(-1 * (var(--chat-header-height) + var(--chat-vertical-gap))); - height: 100%; // calc(100% + var(--chat-header-height) + var(--chat-vertical-gap)); - left: -15px; - border-top-left-radius: 16px; - border-bottom-left-radius: 16px; - width: calc(100% + var(--resistance-right-shift)); - } - - .resistance-roll-one-line { - position: relative; - justify-content: stretch; - - .resistance-roll-intro { - color: var(--blades-gold-bright); - // transform: translate(-50%, -50%); - // top: 50%; - z-index: 3; - // left: calc(-1 * var(--resistance-right-shift)); - position: absolute; - rotate: -45deg; - transform-origin: 50% 50%; - transform: translate(0%, 0%); - left: calc(-1 * var(--resistance-right-shift) - 0px); - // left: -19px; - text-transform: uppercase; - font-weight: bold; - font-size: 10px; - text-shadow: var(--text-shadow-dark-strong); - top: 7px; - } - .consequence-icon-img { - height: 32px; - border-radius: 16px; - background: var(--blades-black); - position: absolute; - // left: calc(-1 * var(--resistance-right-shift) + 10px); - left: -10px; - } - - .resistance-roll-vertical-right { - align-items: space-evenly; - .resistance-roll-attr-dice { - height: 24px; - justify-content: flex-start; - align-items: center; - padding: 0 10px 0 30px; + // &.resistance-roll { + // margin: 0; + // .message-header { display: none; } + // } + // &.action-roll + .chat-message.resistance-roll { + // margin-top: calc(-1 * var(--chat-vertical-gap)); + // } + // &.action-roll.unresolved-action-roll + .chat-message.resistance-roll { + // margin-top: 0; + // } - .trait-intro { - display: none; - color: var(--blades-black); - margin-right: 5px; - line-height: 24px; - font-size: 10px; - font-weight: bold; - margin-top: 3px; - text-transform: uppercase; - } - - .trait-label { - font-family: var(--font-emphasis); - color: var(--blades-gold-bright); - line-height: 24px; - // margin-top: 3px; - text-shadow: var(--text-shadow-emboss); - - } - - .dice-roll-strip { - height: 24px; - width: fit-content; - padding: 4px 0px; - gap: 3px; - margin: 0 0 0 5px; - background: transparent; - box-shadow: none; - - - .blades-die { - height: 16px; - border-radius: 3px; - // scale: 1; - // filter: none; - // box-shadow: none; - // outline: none; - // border: none; - // background: transparent; - - img { height: 16px; width: 16px; filter: none; } - - &:not(.blades-die-resistance) { - opacity: 0.5; - filter: blur(1px); - } - } - - .blades-die + .blades-die + .blades-die + .blades-die + .blades-die ~ .blades-die:last-child { - margin-right: -50px; - } - } - } - - .resistance-cost-row { - h3 { - font-size: 12px; - text-shadow: var(--text-shadow-dark-strong); - } - - &.cost-bonus { - h3 { - color: var(--blades-gold-bright); - } - } - &.cost-stress { - h3 { - color: var(--blades-red-bright); - } - } - } - } - } - - .chat-header.roll-trait { - font-size: 14px; - color: var(--blades-black); - - } +} - .consequence-container.consequence-original { - .comp.consequence-display-container { +.chat-message.unresolved-action-roll { - .consequence-type-container { display: none } - .consequence-name-container { display: none } + &, * { + --bg-controlled: url("../assets/animations/chat/roll-position-controlled.webp"); + --bg-risky: url("../assets/animations/chat/roll-position-risky.webp"); + --bg-desperate: url("../assets/animations/chat/roll-position-desperate.webp"); - } + // --bg-critical: transparent; + // --bg-success: transparent; + // --bg-partial: transparent; + --bg-fail: url("../assets/animations/chat/fail-bg.webp"); - } - .consequence-container.consequence-resisted { display: none } - } + --dice-strip-bg: url("../assets/animations/chat/lightning-ray.webp") no-repeat center / 100% auto; - &.resistance-roll { - margin: 0; - .message-header { display: none; } - } - &.action-roll + .chat-message.resistance-roll { - margin-top: calc(-1 * var(--chat-vertical-gap)); - } - &.action-roll.unresolved-action-roll + .chat-message.resistance-roll { - margin-top: 0; + --top-die-animation: die-pulse 5s ease infinite; + --ghost-die-animation: die-ghost 4s ease infinite; + --ghost-die-filter: sepia(1) saturate(2) hue-rotate(319deg); } - } diff --git a/scss/components/_comps.scss b/scss/components/_comps.scss index d0d06da1..d4742ad1 100644 --- a/scss/components/_comps.scss +++ b/scss/components/_comps.scss @@ -875,6 +875,122 @@ } } + &.consequence-accepted.consequence-resisted { + min-height: 60px; + } + + &.consequence-accepted.consequence-resisted { + + .sub-consequence-resisted { + position: absolute; + width: 100%; + top: 11px; + left: 20px; + outline: 1px solid magenta !important; + z-index: 3; + + + .sub-consequence-resisted-roll-result { + + // .blades-roll.roll-type-resistance { + // left: -10px; + // z-index: 3; + // width: calc(100% + 10px); + + // .chat-message-bg { background: transparent; } + + // .resistance-roll-one-line { + + .resistance-roll-intro { display: none; } + + // .consequence-icon-img { + // left: 0; + // outline: 1px solid var(--blades-gold-bright); + // } + + // .resistance-roll-vertical-right { + // .resistance-roll-attr-dice { + // width: 100%; + // .trait-label { + // position: absolute; + // left: unset; + // right: 30px; + // top: -20px; + // } + // .dice-roll-strip { + // position: absolute; + // left: unset; + // right: 30px; + // } + // } + // } + + // } + // } + } + + .consequence-icon-container { + display: none; + } + + .consequence-type-container { + position: absolute; + top: 0px; + left: 0px; + width: 100%; + // text-align: right; + + .consequence-type { + // left: unset; + // right: 22px; + } + } + + .consequence-name-container { + + .consequence-name { + + } + } + + + .special-resist-overlay { + position: absolute; + left: 0; + top: 0; + height: 100%; + width: 100%; + + .special-resist-overlay-label { + + } + .special-resist-overlay-sub-label { + + } + .special-resist-overlay-img { + position: absolute; + left: 0; + top: 0; + height: 100%; + + } + } + + ~ .consequence-icon-container { + transform: translate(-20px, 0px); + } + + ~ .consequence-type-container { + transform: translate(-20px, 0px); + } + + ~ .consequence-name-container { + opacity: 0; + + } + } + } + .base-consequence { --csq-icon-dark: var(--blades-black); diff --git a/templates/chat/roll-result-resistance-roll.hbs b/templates/chat/roll-result-resistance-roll.hbs index 627eae95..20fd48d4 100644 --- a/templates/chat/roll-result-resistance-roll.hbs +++ b/templates/chat/roll-result-resistance-roll.hbs @@ -9,7 +9,11 @@ {{!-- Resistance Lead-in --}}
Resisted
{{!-- Consequence Icon --}} + {{#if icon}} + + {{else}} + {{/if}} {{!-- Vertical Container --}}
diff --git a/templates/components/consequence-accepted.hbs b/templates/components/consequence-accepted.hbs index ad790849..62759423 100644 --- a/templates/components/consequence-accepted.hbs +++ b/templates/components/consequence-accepted.hbs @@ -1,4 +1,5 @@ -
+{{eLog "Consequence-Accepted Context" this}} +
diff --git a/ts/@types/blades-roll.d.ts b/ts/@types/blades-roll.d.ts index aa058499..87b6afe5 100644 --- a/ts/@types/blades-roll.d.ts +++ b/ts/@types/blades-roll.d.ts @@ -1,4 +1,4 @@ -import {BladesActorType, BladesItemType, BladesPhase, RollType, RollSubType, ConsequenceType, RollModStatus, RollModSection, ActionTrait, DowntimeAction, AttributeTrait, Position, Effect, Factor, RollPhase, RollResult} from "../core/constants"; +import {BladesActorType, BladesItemType, BladesPhase, RollType, RollSubType, RollModType, ConsequenceType, RollModStatus, RollModSection, ActionTrait, DowntimeAction, AttributeTrait, Position, Effect, Factor, RollPhase, RollResult} from "../core/constants"; import BladesActor from "../BladesActor"; import BladesItem from "../BladesItem"; import {BladesRollMod, BladesRollPrimary, BladesRollOpposition, BladesRollParticipant} from "../BladesRoll"; @@ -78,8 +78,6 @@ declare global { costAmount: number } - export type ModType = BladesItemType | "general" | "harm" | "teamwork"; - export interface Config { rollType: RollType, rollSubType?: RollSubType, @@ -194,7 +192,7 @@ declare global { export type PartialSheetData = Partial & FlagData; export type AnyRollType = RollType|RollSubType|DowntimeAction; - export type RollTrait = ActionTrait|AttributeTrait|Factor|number|""|"Heat"|"Coin"|"Lifestyle"; + export type RollTrait = ActionTrait|AttributeTrait|Factor|number|""|"heat"|"coin"|"lifestyle"; export type FactorToggle = "isActive"|"isPrimary"|"isDominant"|"highFavorsPC"; @@ -216,7 +214,7 @@ declare global { type RollModData = { id: string, name: string, - modType: BladesItemType|"general"|"harm"|"teamwork", + modType: RollModType, source_name?: string, section: RollModSection, posNeg: "positive"|"negative", diff --git a/ts/BladesChat.ts b/ts/BladesChat.ts index e8ec104e..c38e233c 100644 --- a/ts/BladesChat.ts +++ b/ts/BladesChat.ts @@ -8,11 +8,20 @@ import BladesConsequence from "./sheets/roll/BladesConsequence"; class BladesChat extends ChatMessage { static Initialize() { + // let lastMessageID: string|false = Array.from(game.messages).pop()?.id ?? ""; Hooks.on("renderChatMessage", (_msg: ChatMessage, html: JQuery) => { ApplyTooltipAnimations(html); ApplyConsequenceAnimations(html); BladesConsequence.ApplyChatListeners(html); - setTimeout(() => { html.addClass("display-ok"); }, 2000); + html.addClass("display-ok"); + // if (lastMessageID && _msg.id === lastMessageID) { + // setTimeout(() => { + // $(document).find("#chat .chat-message:not([class*='-roll'])") + // .remove(); + // }, 500); + // lastMessageID = false; + // } + }); return loadTemplates([ "systems/eunos-blades/templates/chat/roll-result-action-roll.hbs", diff --git a/ts/BladesRoll.ts b/ts/BladesRoll.ts index 22eb3837..2cfa1993 100644 --- a/ts/BladesRoll.ts +++ b/ts/BladesRoll.ts @@ -1,6 +1,6 @@ // #region IMPORTS ~ import U from "./core/utilities"; -import C, {BladesActorType, BladesItemType, BladesPhase, RollPermissions, RollType, RollSubType, RollModStatus, RollModSection, ActionTrait, DowntimeAction, AttributeTrait, Position, Effect, Factor, RollResult, RollPhase, ConsequenceType, Tag} from "./core/constants"; +import C, {BladesActorType, BladesItemType, BladesPhase, RollPermissions, RollType, RollSubType, RollModType, RollModStatus, RollModSection, ActionTrait, DowntimeAction, AttributeTrait, Position, Effect, Factor, RollResult, RollPhase, ConsequenceType, Tag} from "./core/constants"; import {BladesActor, BladesPC, BladesCrew} from "./documents/BladesActorProxy"; import {BladesItem, BladesGMTracker} from "./documents/BladesItemProxy"; import {ApplyTooltipAnimations, ApplyConsequenceAnimations} from "./core/gsap"; @@ -177,7 +177,7 @@ class BladesRollMod { name: nameVal, section: catVal, base_status: RollModStatus.ToggledOff, - modType: "general", + modType: RollModType.general, value: 1, posNeg: posNegVal, tooltip: "" @@ -302,10 +302,10 @@ class BladesRollMod { get isInInactiveBlock(): boolean { if (game.user.isGM) { return [RollModStatus.Hidden, RollModStatus.ForcedOff, RollModStatus.ToggledOff].includes(this.status) - && (this.isConditional || [BladesItemType.ability].includes(this.modType as BladesItemType)); + && (this.isConditional || this.modType === RollModType.ability); } return [RollModStatus.ForcedOff, RollModStatus.ToggledOff].includes(this.status) - && (this.isConditional || [BladesItemType.ability].includes(this.modType as BladesItemType)); + && (this.isConditional || this.modType === RollModType.ability); } get isPush(): boolean { @@ -348,15 +348,17 @@ class BladesRollMod { } /** - * Sets the conditional status of the roll instance. + * Sets the conditional status of the roll mod instance. * @returns {boolean} - Returns false if the status is ForcedOn or ToggledOff, true if the status is Hidden. */ setConditionalStatus(): boolean { - // If the roll instance is not conditional, return false + // If the roll mod instance is not conditional, return false if (!this.isConditional) {return false;} // If any auto-Traits/Types apply, set status to ForcedOn and return false const autoTypesOrTraitsApply = this.autoRollTypes.includes(this.rollInstance.rollType) + || (this.rollInstance.rollSubType && this.autoRollTypes.includes(this.rollInstance.rollSubType)) + || (this.rollInstance.rollDowntimeAction && this.autoRollTypes.includes(this.rollInstance.rollDowntimeAction)) || (!this.rollInstance.rollTrait || this.autoRollTraits.includes(this.rollInstance.rollTrait)); if (autoTypesOrTraitsApply) { this.heldStatus = RollModStatus.ForcedOn; @@ -396,8 +398,11 @@ class BladesRollMod { * @returns {boolean} - Returns true if any types or traits apply, false otherwise. */ private checkTypesOrTraits(types: BladesRoll.AnyRollType[], traits: BladesRoll.RollTrait[]): boolean { + if ([...types, ...traits].length === 0) { return false; } const typesApply = Boolean((!this.rollInstance.isParticipantRoll && types.length === 0) - || types.includes(this.rollInstance.rollType)); + || types.includes(this.rollInstance.rollType) + || (this.rollInstance.rollSubType && types.includes(this.rollInstance.rollSubType)) + || (this.rollInstance.rollDowntimeAction && types.includes(this.rollInstance.rollDowntimeAction))); const traitsApply = Boolean((!this.rollInstance.isParticipantRoll && traits.length === 0) || (this.rollInstance.rollTrait && traits.includes(this.rollInstance.rollTrait))); return typesApply && traitsApply; @@ -608,7 +613,7 @@ class BladesRollMod { } get selectOptions(): Array> | null { - if (this.modType !== "teamwork") {return null;} + if (this.modType !== RollModType.teamwork) {return null;} if (this.name === "Assist" || this.name === "Setup") { return this.rollInstance.rollParticipantSelectOptions[this.name]; } else if (this.name.startsWith("Group_")) { @@ -618,7 +623,7 @@ class BladesRollMod { } get selectedParticipant(): BladesRollParticipant | null { - if (this.modType !== "teamwork") {return null;} + if (this.modType !== RollModType.teamwork) {return null;} return this.rollInstance.getRollParticipant(this.section, this.name); } @@ -721,7 +726,7 @@ class BladesRollMod { posNeg: "positive" | "negative"; - modType: BladesRoll.ModType; + modType: RollModType; conditionalRollTypes: BladesRoll.AnyRollType[]; @@ -754,9 +759,12 @@ class BladesRollMod { this.conditionalRollTypes = modData.conditionalRollTypes ?? []; this.autoRollTypes = modData.autoRollTypes ?? []; this.participantRollTypes = modData.participantRollTypes ?? []; - this.conditionalRollTraits = modData.conditionalRollTraits ?? []; - this.autoRollTraits = modData.autoRollTraits ?? []; - this.participantRollTraits = modData.participantRollTraits ?? []; + this.conditionalRollTraits = (modData.conditionalRollTraits ?? []) + .map((trait) => U.lCase(trait) as BladesRoll.RollTrait); + this.autoRollTraits = (modData.autoRollTraits ?? []) + .map((trait) => U.lCase(trait) as BladesRoll.RollTrait); + this.participantRollTraits = (modData.participantRollTraits ?? []) + .map((trait) => U.lCase(trait) as BladesRoll.RollTrait); this.section = modData.section; } } @@ -1292,6 +1300,22 @@ class BladesRollParticipant implements BladesRoll.ParticipantDocData { class BladesRoll extends DocumentSheet { + static _Debug: { + modWatch: RegExp|false + } = { + modWatch: false + }; + + static Debug = { + watchRollMod(name: string|false) { + if (typeof name === "string") { + BladesRoll._Debug.modWatch = new RegExp(name, "g"); + } else { + BladesRoll._Debug.modWatch = false; + } + } + }; + // #region STATIC METHODS: INITIALIZATION & DEFAULTS ~ static override get defaultOptions() { return foundry.utils.mergeObject(super.defaultOptions, { @@ -1340,7 +1364,7 @@ class BladesRoll extends DocumentSheet { section: RollModSection.roll, base_status: RollModStatus.ToggledOff, posNeg: "positive", - modType: "general", + modType: RollModType.general, value: 1, effectKeys: ["ForceOff-Bargain", "Cost-Stress2"], tooltip: "

Push for +1d

For 2 Stress, add 1 die to your pool.

(You cannot also accept a Devil's Bargain to increase your dice pool: It's one or the other.)

" @@ -1351,7 +1375,7 @@ class BladesRoll extends DocumentSheet { section: RollModSection.roll, base_status: RollModStatus.Hidden, posNeg: "positive", - modType: "general", + modType: RollModType.general, value: 1, effectKeys: [], tooltip: "

Devil's Bargain

The GM has offered you a Devil's Bargain.

Accept the terms to add 1 die to your pool.

(You cannot also Push for +1d to increase your dice pool: It's one or the other.)

" @@ -1362,7 +1386,7 @@ class BladesRoll extends DocumentSheet { section: RollModSection.roll, base_status: RollModStatus.Hidden, posNeg: "positive", - modType: "teamwork", + modType: RollModType.teamwork, value: 1, tooltip: "

%DOC_NAME% Assists

%DOC_NAME% is Assisting your efforts, adding 1 die to your pool.

" }, @@ -1372,7 +1396,7 @@ class BladesRoll extends DocumentSheet { section: RollModSection.position, base_status: RollModStatus.Hidden, posNeg: "positive", - modType: "teamwork", + modType: RollModType.teamwork, value: 1, tooltip: "

%DOC_NAME% Sets You Up

%DOC_NAME% has set you up for success with a preceding Setup action, increasing your Position by one level.

" }, @@ -1382,7 +1406,7 @@ class BladesRoll extends DocumentSheet { section: RollModSection.effect, base_status: RollModStatus.ToggledOff, posNeg: "positive", - modType: "general", + modType: RollModType.general, value: 1, effectKeys: ["Cost-Stress2"], tooltip: "

Push for Effect

For 2 Stress, increase your Effect by one level.

" @@ -1393,7 +1417,7 @@ class BladesRoll extends DocumentSheet { section: RollModSection.effect, base_status: RollModStatus.Hidden, posNeg: "positive", - modType: "teamwork", + modType: RollModType.teamwork, value: 1, tooltip: "

%DOC_NAME% Sets You Up

%DOC_NAME% has set you up for success with a preceding Setup action, increasing your Effect by one level.

" }, @@ -1403,7 +1427,7 @@ class BladesRoll extends DocumentSheet { section: RollModSection.effect, base_status: RollModStatus.Hidden, posNeg: "positive", - modType: "general", + modType: RollModType.general, value: 1, tooltip: "

Potency

By circumstance or advantage, you have Potency in this action, increasing your Effect by one level.

" }, @@ -1413,7 +1437,7 @@ class BladesRoll extends DocumentSheet { section: RollModSection.effect, base_status: RollModStatus.Hidden, posNeg: "negative", - modType: "general", + modType: RollModType.general, value: 1, tooltip: "

Potency

By circumstance or advantage, @OPPOSITION_NAME@ has Potency against you, reducing your Effect by one level." } @@ -2496,19 +2520,63 @@ class BladesRoll extends DocumentSheet { this.rollMods = modsData.map((modData) => new BladesRollMod(modData, this)); - const initReport: Record = {}; + // ESLINT DISABLE: Dev Code. + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const initReport: Record = {}; + + let initReportCount = 0; + const watchMod = (label: string) => { + if (BladesRoll._Debug.modWatch === false) { return; } + const reportLabel = `(${initReportCount}) == ${label}`; + const rollMod = this.rollMods + .find((mod) => BladesRoll._Debug.modWatch && BladesRoll._Debug.modWatch.exec(mod.name)); + if (rollMod) { + initReport[`${reportLabel} : ${rollMod.status}`] = { + inst: rollMod, + data: {...rollMod.data}, + sourceName: rollMod.sourceName, + status: { + ALL: rollMod.status, + base: rollMod.baseStatus, + held: rollMod.heldStatus, + user: rollMod.userStatus + }, + is: { + active: rollMod.isActive, + visible: rollMod.isVisible, + conditional: rollMod.isConditional, + inInactiveBlock: rollMod.isInInactiveBlock, + isPush: rollMod.isPush, + isBasicPush: rollMod.isBasicPush + }, + flags: {...rollMod.flagParams} + }; + } else { + initReport[reportLabel] = "MOD NOT FOUND"; + } + initReportCount++; + }; + + watchMod("INITIAL"); /* *** PASS ZERO: ROLLTYPE VALIDATION PASS *** */ this.rollMods = this.rollMods.filter((rollMod) => rollMod.isValidForRollType()); + watchMod("ROLLTYPE VALIDATION"); + /* *** PASS ONE: DISABLE PASS *** */ - this.rollMods - // ... Conditional Status Pass - .filter((rollMod) => !rollMod.setConditionalStatus()) - // ... AutoReveal/AutoEnable Pass - .filter((rollMod) => !rollMod.setAutoStatus()) - // ... Payable Pass - .forEach((rollMod) => {rollMod.setPayableStatus();}); + // ... Conditional Status Pass + + const conditionalDisablePass = this.rollMods.filter((rollMod) => !rollMod.setConditionalStatus()); + watchMod("DISABLE - CONDITIONAL"); + + // ... AutoReveal/AutoEnable Pass + const autoRevealDisablePass = conditionalDisablePass.filter((rollMod) => !rollMod.setAutoStatus()); + watchMod("DISABLE - AUTO-REVEAL/ENABLE"); + + // ... Payable Pass + autoRevealDisablePass.forEach((rollMod) => { rollMod.setPayableStatus(); }); + watchMod("DISABLE - PAYABLE"); /* *** PASS TWO: FORCE-ON PASS *** */ const parseForceOnKeys = (mod: BladesRollMod) => { @@ -2545,6 +2613,7 @@ class BladesRoll extends DocumentSheet { } }; this.getActiveRollMods().forEach((rollMod) => parseForceOnKeys(rollMod)); + watchMod("FORCE-ON PASS"); /* *** PASS THREE: PUSH-CHECK PASS *** */ @@ -2554,6 +2623,7 @@ class BladesRoll extends DocumentSheet { this.getInactivePushMods() .filter((mod) => !mod.isBasicPush) .forEach((mod) => {mod.heldStatus = RollModStatus.ForcedOff;}); + watchMod("PUSH-CHECK: FORCE-OFF IS-PUSH"); } // ... BY CATEGORY ... @@ -2566,11 +2636,13 @@ class BladesRoll extends DocumentSheet { bargainMod.heldStatus = RollModStatus.ForcedOff; } } + watchMod("PUSH-CHECK: FORCE OFF BARGAIN"); } else { // Otherwise, hide all Is-Push mods this.getInactivePushMods(cat) .filter((mod) => !mod.isBasicPush) .forEach((mod) => {mod.heldStatus = RollModStatus.Hidden;}); + watchMod("PUSH-CHECK: HIDE IS-PUSH"); } }); @@ -2578,6 +2650,7 @@ class BladesRoll extends DocumentSheet { this.getVisibleRollMods() .forEach((mod) => {mod.setRelevancyStatus();}); + watchMod("RELEVANCY PASS"); /* *** PASS FIVE: Overpayment Pass *** */ @@ -2587,6 +2660,7 @@ class BladesRoll extends DocumentSheet { this.getVisibleRollMods() .filter((mod) => !mod.isActive && mod.effectKeys.includes("Cost-SpecialArmor")) .forEach((mod) => {mod.heldStatus = RollModStatus.ForcedOff;}); + watchMod("OVERPAYMENT PASS"); } eLog.checkLog2("rollMods", "*** initRollMods() PASS ***", initReport); @@ -2843,7 +2917,7 @@ class BladesRoll extends DocumentSheet { section: RollModSection.roll, base_status: RollModStatus.ToggledOff, posNeg: "positive", - modType: "general", + modType: RollModType.general, value: 1, effectKeys: [], tooltip: "

" @@ -2854,7 +2928,7 @@ class BladesRoll extends DocumentSheet { section: RollModSection.roll, base_status: RollModStatus.ToggledOff, posNeg: "negative", - modType: "general", + modType: RollModType.general, value: 1, effectKeys: [], tooltip: "

" @@ -2865,7 +2939,7 @@ class BladesRoll extends DocumentSheet { section: RollModSection.roll, base_status: RollModStatus.ToggledOff, posNeg: "positive", - modType: "general", + modType: RollModType.general, value: 1, effectKeys: [], tooltip: "

" @@ -2876,7 +2950,7 @@ class BladesRoll extends DocumentSheet { section: RollModSection.roll, base_status: RollModStatus.ToggledOff, posNeg: "negative", - modType: "general", + modType: RollModType.general, value: 1, effectKeys: [], tooltip: "

" @@ -2887,7 +2961,7 @@ class BladesRoll extends DocumentSheet { section: RollModSection.position, base_status: RollModStatus.ToggledOff, posNeg: "positive", - modType: "general", + modType: RollModType.general, value: 1, effectKeys: [], tooltip: "

Help From a Friend

Add +1d if you enlist the help of a friend or contact.

" @@ -2898,7 +2972,7 @@ class BladesRoll extends DocumentSheet { section: RollModSection.roll, base_status: RollModStatus.ToggledOff, posNeg: "negative", - modType: "general", + modType: RollModType.general, value: 1, effectKeys: [], tooltip: "

" @@ -2916,7 +2990,7 @@ class BladesRoll extends DocumentSheet { section: RollModSection.position, base_status: RollModStatus.ToggledOff, posNeg: "positive", - modType: "general", + modType: RollModType.general, value: 1, effectKeys: [], tooltip: "

Help From a Friend

Add +1d if you enlist the help of a friend or contact.

" @@ -2928,7 +3002,7 @@ class BladesRoll extends DocumentSheet { section: RollModSection.after, base_status: RollModStatus.ForcedOn, posNeg: "positive", - modType: "general", + modType: RollModType.general, value: 0, effectKeys: [], tooltip: "

Buying Result Level

After your roll, you can increase the result level by one for each Coin you spend.

" @@ -2942,7 +3016,7 @@ class BladesRoll extends DocumentSheet { section: RollModSection.roll, base_status: RollModStatus.ToggledOff, posNeg: "positive", - modType: "general", + modType: RollModType.general, value: 1, effectKeys: [], tooltip: "

Repeat Purchase Bonus

Add +1d if you have previously acquired this asset or service with a Acquire Asset Downtime activity.

" @@ -2953,7 +3027,7 @@ class BladesRoll extends DocumentSheet { section: RollModSection.after, base_status: RollModStatus.Hidden, posNeg: "negative", - modType: "general", + modType: RollModType.general, value: 0, effectKeys: ["Cost-Heat2"], tooltip: "

Restricted

Whether contraband goods or dangerous materials, this Acquire Asset Downtime activity will add +2 Heat to your crew.

" @@ -2970,7 +3044,7 @@ class BladesRoll extends DocumentSheet { section: RollModSection, base_status: RollModStatus, posNeg: "", - modType: "general", + modType: RollModType.general, value: 1, effectKeys: [], tooltip: "

" @@ -2999,7 +3073,7 @@ class BladesRoll extends DocumentSheet { section: RollModSection.position, base_status: RollModStatus.ForcedOn, posNeg: "negative", - modType: "general", + modType: RollModType.general, value: 1, effectKeys: [], tooltip: "

Worse Position

A Consequence on a previous roll has worsened your Position.

" @@ -3024,7 +3098,7 @@ class BladesRoll extends DocumentSheet { section: RollModSection.effect, base_status: RollModStatus.ForcedOn, posNeg: "negative", - modType: "general", + modType: RollModType.general, value: 1, effectKeys: [], tooltip: "

Reduced Effect

A Consequence has worsened your Effect.

" @@ -3648,14 +3722,14 @@ class BladesRoll extends DocumentSheet { const {chatID} = this.rollConsequence?.resistTo ?? {}; if (csqID && chatID) { const resistedCsq = await BladesConsequence.GetFromID(chatID, csqID); - if (resistedCsq) { - await resistedCsq.applyResistedConsequence("resist"); + if (resistedCsq && this.rollConsequence?.resistTo) { + await resistedCsq.applyResistedConsequence("resist", await this.getResultHTML(chatID, {icon: this.rollConsequence.resistTo.icon ?? ""})); } } if (BladesPC.IsType(this.rollPrimaryDoc)) { this.rollPrimaryDoc.adjustStress(this.resistanceStressCost); } - await this.outputRollToChat(); + // await this.outputRollToChat(); break; } } @@ -3690,15 +3764,17 @@ class BladesRoll extends DocumentSheet { return chatSpeaker; } - async getResultHTML(chatMsgID: string) { + async getResultHTML(chatMsgID: string, context: Record = {}) { - // eslint-disable-next-line @typescript-eslint/no-this-alias - const templateData: BladesRoll & {chatMsgID?: string} = this; - templateData.chatMsgID = chatMsgID; + context = Object.assign( + this, + context, + {chatMsgID} + ); return await renderTemplate( `systems/eunos-blades/templates/chat/roll-result-${U.lCase(this.rollType)}-roll.hbs`, - templateData + context ); } diff --git a/ts/core/constants.ts b/ts/core/constants.ts index d3e17793..770e7960 100644 --- a/ts/core/constants.ts +++ b/ts/core/constants.ts @@ -171,6 +171,18 @@ export enum RollSubType { GroupParticipant = "GroupParticipant" } +export enum RollModType { + general = "general", + harm = "harm", + teamwork = "teamwork", + ability = "ability", + gear = "gear", + crew_ability = "crew_ability", + crew_upgrade = "crew_upgrade", + advantage = "advantage", + disadvantage = "disadvantage" +} + export enum ConsequenceType { ReducedEffect = "ReducedEffect", ComplicationMinor = "ComplicationMinor", diff --git a/ts/documents/actors/BladesPC.ts b/ts/documents/actors/BladesPC.ts index 6edb24cd..017b0b15 100644 --- a/ts/documents/actors/BladesPC.ts +++ b/ts/documents/actors/BladesPC.ts @@ -1,4 +1,4 @@ -import C, {Playbook, AttributeTrait, ActionTrait, Harm, BladesActorType, BladesItemType, Tag, RollModSection, RollModStatus} from "../../core/constants"; +import C, {Playbook, AttributeTrait, ActionTrait, Harm, BladesActorType, BladesItemType, Tag, RollModType, RollModSection, RollModStatus} from "../../core/constants"; import U from "../../core/utilities"; import {BladesActor, BladesCrew} from "../BladesActorProxy"; import {BladesItem} from "../BladesItemProxy"; @@ -376,7 +376,7 @@ class BladesPC extends BladesActor implements BladesActorSubClass.Scoundrel, section: effectCat, posNeg: "negative", base_status: RollModStatus.ToggledOn, - modType: "harm", + modType: RollModType.harm, value: 1, tooltip: [ `

${effectCat === RollModSection.roll ? Harm.Impaired : Harm.Weakened} (Harm)

`, @@ -398,7 +398,7 @@ class BladesPC extends BladesActor implements BladesActorSubClass.Scoundrel, section: RollModSection.roll, posNeg: "negative", base_status: RollModStatus.ToggledOn, - modType: "harm", + modType: RollModType.harm, value: 0, effectKeys: ["Cost-Stress2"], tooltip: [ diff --git a/ts/sheets/actor/BladesActorSheet.ts b/ts/sheets/actor/BladesActorSheet.ts index a0f53507..7ee50da5 100644 --- a/ts/sheets/actor/BladesActorSheet.ts +++ b/ts/sheets/actor/BladesActorSheet.ts @@ -424,7 +424,7 @@ class BladesActorSheet extends ActorSheet { if (!doc) { return; } - await G.effects.blurOut(elem$).then(async () => { + await G.effects.blurRemove(elem$).then(async () => { if (doc instanceof BladesItem) { await this.actor.remSubItem(doc); } else { @@ -439,7 +439,7 @@ class BladesActorSheet extends ActorSheet { if (!doc) { return; } - await G.effects.blurOut(elem$).then(async () => await doc.delete()); + await G.effects.blurRemove(elem$).then(async () => await doc.delete()); } async _onItemToggleClick(event: ClickEvent) { diff --git a/ts/sheets/actor/BladesCrewSheet.ts b/ts/sheets/actor/BladesCrewSheet.ts index d91ab757..b9966c7f 100644 --- a/ts/sheets/actor/BladesCrewSheet.ts +++ b/ts/sheets/actor/BladesCrewSheet.ts @@ -24,7 +24,7 @@ class BladesCrewSheet extends BladesActorSheet { const sheetData: Partial> = {}; - //~ Assemble embedded actors and items + // ~ Assemble embedded actors and items sheetData.preparedItems = Object.assign( context.preparedItems ?? {}, { @@ -150,7 +150,7 @@ class BladesCrewSheet extends BladesActorSheet { super.activateListeners(html); // Everything below here is only needed if the sheet is editable - if (!this.options.editable) {return} + if (!this.options.editable) {return;} // Update Inventory Item html.find(".item-sheet-open").on("click", (event) => { @@ -170,10 +170,10 @@ class BladesCrewSheet extends BladesActorSheet { const turf_id = $(event.currentTarget).data("turfId"); const turf_current_status = $(event.currentTarget).data("turfStatus"); - this.actor.playbook?.update({["system.turfs." + turf_id + ".value"]: !turf_current_status}) + this.actor.playbook?.update({[`system.turfs.${turf_id}.value`]: !turf_current_status}) .then(() => this.render(false)); }); } } -export default BladesCrewSheet; \ No newline at end of file +export default BladesCrewSheet; diff --git a/ts/sheets/roll/BladesConsequence.ts b/ts/sheets/roll/BladesConsequence.ts index b057c80b..07ed0ba4 100644 --- a/ts/sheets/roll/BladesConsequence.ts +++ b/ts/sheets/roll/BladesConsequence.ts @@ -387,68 +387,83 @@ class BladesConsequence { // If LOST OPPORTUNITY -> No change to rollPrimary. } - async transformToConsequence(typeRef: BladesConsequence.ResistanceType) { - const message$ = $(await this._chatMessage.getHTML()).find(".blades-roll"); + async transformToConsequence(typeRef: BladesConsequence.ResistanceType, rollHTML?: string) { - let icon: string|undefined = undefined; - let typeDisplay = ""; - let name = ""; - - switch (typeRef) { - case "resist": { - if (!this._resistTo) { throw new Error(`Cannot transform csq id '${this.id}' into "resist" consequence: no resistTo data found.`); } - if (this._resistTo.type === ConsequenceType.None) { break; } - icon = this._resistTo.icon; - typeDisplay = this._resistTo.typeDisplay; - name = this._resistTo.name; - break; - } - case "armor": { - if (!this._armorTo) { throw new Error(`Cannot transform csq id '${this.id}' into "armor" consequence: no armorTo data found.`); } - if (this._armorTo.type === ConsequenceType.None) { break; } - icon = this._armorTo.icon; - typeDisplay = this._armorTo.typeDisplay; - name = this._armorTo.name; - break; - } - case "special": { - if (!this._specialTo) { throw new Error(`Cannot transform csq id '${this.id}' into "special" consequence: no specialTo data found.`); } - if (this._specialTo.type === ConsequenceType.None) { break; } - icon = this._specialTo.icon; - typeDisplay = this._specialTo.typeDisplay; - name = this._specialTo.name; - break; - } + const transformRecord: Record = {}; + + // Prepare template context for accepted (original) consequence. + const csqTemplateData: BladesConsequence & {blockClass?: string} = this; + csqTemplateData.blockClass = "consequence-resisted"; + + // Create HTML for accepted version of this consequence + let csqAcceptedHTML = await renderTemplate( + "systems/eunos-blades/templates/components/consequence-accepted.hbs", + Object.assign(this, {blockClass: "consequence-resisted"}) + ); + + transformRecord["1) csqAcceptedHTML"] = csqAcceptedHTML; + + // Get the resisted consequence data according to typeRef + const rCsq = { + resist: this._resistTo, + armor: this._armorTo, + special: this._specialTo + }[typeRef]; + if (!rCsq) { return; } + + + // Get HTML for the consequence it resisted to + let csqResistedHTML = await renderTemplate( + "systems/eunos-blades/templates/components/consequence-accepted.hbs", + rCsq + ); + + transformRecord["2) csqResistedHTML"] = csqResistedHTML; + + // Add a class + csqResistedHTML = $(csqResistedHTML) + .addClass("sub-consequence-resisted")[0].outerHTML; + transformRecord["2.1) csqResistedHTML + class"] = csqResistedHTML; + + // If roll HTML provided, prepend that to resisted consequence + if (rollHTML) { + csqResistedHTML = $(csqResistedHTML).prepend($(`
+ ${rollHTML} +
`))[0].outerHTML; + transformRecord["2.2) csqResistedHTML + rollHTML"] = csqResistedHTML; } - eLog.checkLog2("csqTransform", "Initial Message Code", {message$, message: message$[0]}); + // If "special" or "armor", add the roll overlay + if (["armor", "special"].includes(typeRef)) { + csqResistedHTML = $(csqResistedHTML).prepend($(` +
+ + + +
`))[0].outerHTML; + transformRecord["2.3) csqResistedHTML + overlay"] = csqResistedHTML; + } - // Locate consequence HTML - message$.find(`.comp.consequence-display-container[data-csq-id='${this._id}']`) - // Replace with compiled consequence-accepted template, unless type is None, in which case erase it - .replaceWith(icon === undefined ? "" : ` -
+ // Prepend the resisted consequence HTML to the accepted consequence HTML + csqAcceptedHTML = $(csqAcceptedHTML).prepend($(csqResistedHTML))[0].outerHTML; -
-
- -
-
+ transformRecord["3) csqAcceptedHTML + csqResistedHTML"] = csqAcceptedHTML; -
- -
+ // Get message HTML + const message$ = $(await this._chatMessage.getHTML()); -
- -
+ transformRecord["4) message$ before Replace"] = message$[0].outerHTML; -
- `); + // Replace consequence with new data + message$.find(`.comp.consequence-display-container[data-csq-id='${this._id}']`) + .replaceWith(csqAcceptedHTML); - eLog.checkLog2("csqTransform", "Modified Message Code", {message$, message: message$[0], outerHTML: message$[0].outerHTML}); + transformRecord["4.5) message$ after Replace"] = message$[0].outerHTML; + transformRecord["5) message$.find(.blades-roll) = CONTENT"] = message$.find(".blades-roll")[0].outerHTML; - await this._chatMessage.update({content: message$[0].outerHTML}); + await this._chatMessage.update({content: message$.find(".blades-roll")[0].outerHTML}); + + eLog.checkLog2("transformConsequence", "Transform Record", transformRecord); } async acceptConsequence() { @@ -531,7 +546,7 @@ class BladesConsequence { BladesRoll.NewRoll(resistConfig); } - async applyResistedConsequence(resistType: "resist"|"armor"|"special") { + async applyResistedConsequence(resistType: "resist"|"armor"|"special", rollHTML: string) { const rCsq = { resist: this._resistTo, armor: this._armorTo, @@ -540,19 +555,34 @@ class BladesConsequence { if (rCsq) { await rCsq.applyConsequenceToPrimary(); } - await this.transformToConsequence(resistType); + await this.transformToConsequence(resistType, rollHTML); } async resistArmorConsequence() { - this._primaryDoc.spendArmor(); - this.applyResistedConsequence("armor"); + if (this._armorTo) { + this._primaryDoc.spendArmor(); + this.applyResistedConsequence("armor", await renderTemplate( + "systems/eunos-blades/templates/components/consequence-accepted.hbs", + Object.assign( + this._armorTo, + {isArmorResist: true} + ) + )); + } } async resistSpecialArmorConsequence() { - await this._primaryDoc.spendSpecialArmor(); - this.applyResistedConsequence("special"); + if (this._specialTo) { + this._primaryDoc.spendSpecialArmor(); + this.applyResistedConsequence("special", await renderTemplate( + "systems/eunos-blades/templates/components/consequence-accepted.hbs", + Object.assign( + this._specialTo, + {isSpecialArmorResist: true} + ) + )); + } } - } interface BladesConsequence {