Start combat management
This commit is contained in:
		| @@ -8,7 +8,7 @@ | |||||||
| } | } | ||||||
| :root { | :root { | ||||||
|   --font-primary: "TimesNewRoman", serif; |   --font-primary: "TimesNewRoman", serif; | ||||||
|   --font-size-standard: 0.9rem; |   --font-size-standard: 0.8rem; | ||||||
|   --background-image-base: url("../assets/ui/lethal_fantasy_background.webp"); |   --background-image-base: url("../assets/ui/lethal_fantasy_background.webp"); | ||||||
|   --font-secondary: "BaskervilleBold", serif; |   --font-secondary: "BaskervilleBold", serif; | ||||||
|   --logo-standard: url("../assets/ui/lf_logo_small_02.webp"); |   --logo-standard: url("../assets/ui/lf_logo_small_02.webp"); | ||||||
| @@ -65,7 +65,7 @@ i.lethalfantasy { | |||||||
|   font-size: calc(var(--font-size-standard) * 1.2); |   font-size: calc(var(--font-size-standard) * 1.2); | ||||||
| } | } | ||||||
| .lethalfantasy .item-sheet-common .form-fields { | .lethalfantasy .item-sheet-common .form-fields { | ||||||
|   padding-top: 5px; |   padding-top: 4px; | ||||||
| } | } | ||||||
| .lethalfantasy .item-sheet-common label { | .lethalfantasy .item-sheet-common label { | ||||||
|   font-family: var(--font-secondary); |   font-family: var(--font-secondary); | ||||||
| @@ -101,21 +101,22 @@ i.lethalfantasy { | |||||||
| } | } | ||||||
| .lethalfantasy .character-content input, | .lethalfantasy .character-content input, | ||||||
| .lethalfantasy .character-content select { | .lethalfantasy .character-content select { | ||||||
|  |   height: 1.5rem; | ||||||
|   background-color: rgba(0, 0, 0, 0.1); |   background-color: rgba(0, 0, 0, 0.1); | ||||||
|   border-color: var(--color-dark-6); |   border-color: var(--color-dark-6); | ||||||
|   color: var(--color-dark-2); |   color: var(--color-dark-2); | ||||||
| } | } | ||||||
| .lethalfantasy .character-content input[name="name"] { | .lethalfantasy .character-content input[name="name"] { | ||||||
|   height: 50px; |   height: 2.5rem; | ||||||
|   margin-right: 10px; |   margin-right: 4px; | ||||||
|   font-family: var(--font-secondary); |   font-family: var(--font-secondary); | ||||||
|   font-size: calc(var(--font-size-standard) * 1); |   font-size: calc(var(--font-size-standard) * 1.2); | ||||||
|   font-weight: bold; |   font-weight: bold; | ||||||
|   border: none; |   border: none; | ||||||
| } | } | ||||||
| .lethalfantasy .character-content fieldset { | .lethalfantasy .character-content fieldset { | ||||||
|   margin-bottom: 5px; |   margin-bottom: 4px; | ||||||
|   border-radius: 5px; |   border-radius: 4px; | ||||||
| } | } | ||||||
| .lethalfantasy .character-content .form-fields input, | .lethalfantasy .character-content .form-fields input, | ||||||
| .lethalfantasy .character-content .form-fields select { | .lethalfantasy .character-content .form-fields select { | ||||||
| @@ -145,7 +146,8 @@ i.lethalfantasy { | |||||||
|   flex: 1; |   flex: 1; | ||||||
| } | } | ||||||
| .lethalfantasy .character-main .character-pc .character-left { | .lethalfantasy .character-main .character-pc .character-left { | ||||||
|   min-width: 180px; |   min-width: 220px; | ||||||
|  |   max-width: 220px; | ||||||
|   display: flex; |   display: flex; | ||||||
|   flex-direction: column; |   flex-direction: column; | ||||||
| } | } | ||||||
| @@ -153,53 +155,27 @@ i.lethalfantasy { | |||||||
|   display: flex; |   display: flex; | ||||||
|   justify-content: center; |   justify-content: center; | ||||||
|   align-items: center; |   align-items: center; | ||||||
|   padding-bottom: 20px; |   padding-bottom: 8px; | ||||||
| } | } | ||||||
| .lethalfantasy .character-main .character-pc .character-left .character-left-image .character-img { | .lethalfantasy .character-main .character-pc .character-left .character-left-image .character-img { | ||||||
|   height: 140px; |   height: 140px; | ||||||
|  |   width: 140px; | ||||||
|   width: auto; |   width: auto; | ||||||
|   border: none; |   border: none; | ||||||
| } | } | ||||||
| .lethalfantasy .character-main .character-pc .character-left .character-hp-edit input { | .lethalfantasy .character-main .character-pc .character-left .character-hp { | ||||||
|   display: flex; |  | ||||||
|   width: 60px; |  | ||||||
|   font-size: calc(var(--font-size-standard) * 1.4); |  | ||||||
|   align-items: center; |  | ||||||
|   justify-content: center; |  | ||||||
|   padding: 0 5px 0 5px; |  | ||||||
|   text-align: center; |  | ||||||
| } |  | ||||||
| .lethalfantasy .character-main .character-pc .character-right { |  | ||||||
|   display: flex; |  | ||||||
|   flex-direction: column; |  | ||||||
|   gap: 5px; |  | ||||||
| } |  | ||||||
| .lethalfantasy .character-main .character-pc .character-right .character-name { |  | ||||||
|   display: flex; |  | ||||||
| } |  | ||||||
| .lethalfantasy .character-main .character-pc .character-right .character-name input { |  | ||||||
|   width: 400px; |  | ||||||
| } |  | ||||||
| .lethalfantasy .character-main .character-pc .character-right .character-infos { |  | ||||||
|   display: flex; |  | ||||||
|   flex-direction: column; |  | ||||||
|   gap: 10px; |  | ||||||
| } |  | ||||||
| .lethalfantasy .character-main .character-pc .character-right .character-infos label { |  | ||||||
|   min-width: 120px; |  | ||||||
| } |  | ||||||
| .lethalfantasy .character-main .character-pc .character-right .character-infos .character-hp { |  | ||||||
|   display: flex; |   display: flex; | ||||||
|   gap: 2px; |   gap: 2px; | ||||||
|   align-items: center; |   align-items: center; | ||||||
| } | } | ||||||
| .lethalfantasy .character-main .character-pc .character-right .character-infos .character-hp .character-hp-value .form-fields input { | .lethalfantasy .character-main .character-pc .character-left .character-hp .character-hp-value .form-fields input { | ||||||
|   flex: none; |   flex: none; | ||||||
|   width: 50px; |   min-width: 3rem; | ||||||
|  |   max-width: 3rem; | ||||||
|   margin-left: 10px; |   margin-left: 10px; | ||||||
|   font-size: calc(var(--font-size-standard) * 1.4); |   font-size: calc(var(--font-size-standard) * 1.4); | ||||||
| } | } | ||||||
| .lethalfantasy .character-main .character-pc .character-right .character-infos .character-hp .character-hp-max { | .lethalfantasy .character-main .character-pc .character-left .character-hp .character-hp-max { | ||||||
|   clear: both; |   clear: both; | ||||||
|   display: flex; |   display: flex; | ||||||
|   flex-direction: row; |   flex-direction: row; | ||||||
| @@ -207,27 +183,32 @@ i.lethalfantasy { | |||||||
|   margin: 3px 0; |   margin: 3px 0; | ||||||
|   align-items: center; |   align-items: center; | ||||||
| } | } | ||||||
| .lethalfantasy .character-main .character-pc .character-right .character-infos .character-hp .character-hp-max input { | .lethalfantasy .character-main .character-pc .character-left .character-hp .character-hp-max input { | ||||||
|   width: 50px; |   width: 50px; | ||||||
|   text-align: center; |   text-align: center; | ||||||
|   font-size: calc(var(--font-size-standard) * 1.4); |   font-size: calc(var(--font-size-standard) * 1.4); | ||||||
| } | } | ||||||
| .lethalfantasy .character-main .character-pc .character-right .character-infos .character-hp .hp-separator { | .lethalfantasy .character-main .character-pc .character-right { | ||||||
|   font-size: calc(var(--font-size-standard) * 1.2); |  | ||||||
|   display: flex; |   display: flex; | ||||||
|   align-items: center; |   flex-direction: column; | ||||||
|   justify-content: center; |   gap: 4px; | ||||||
|  | } | ||||||
|  | .lethalfantasy .character-main .character-pc .character-right .character-name { | ||||||
|  |   display: flex; | ||||||
|  | } | ||||||
|  | .lethalfantasy .character-main .character-pc .character-right .character-name input { | ||||||
|  |   width: 400px; | ||||||
| } | } | ||||||
| .lethalfantasy .character-main .character-pc-play { | .lethalfantasy .character-main .character-pc-play { | ||||||
|   min-width: 500px; |   min-width: 400px; | ||||||
| } | } | ||||||
| .lethalfantasy .character-main .character-pc-edit { | .lethalfantasy .character-main .character-pc-edit { | ||||||
|   min-width: 650px; |   min-width: 400px; | ||||||
| } | } | ||||||
| .lethalfantasy .character-main .character-characteristics { | .lethalfantasy .character-main .character-characteristics { | ||||||
|   display: flex; |   display: flex; | ||||||
|   flex-direction: column; |   flex-direction: column; | ||||||
|   gap: 5px; |   gap: 4px; | ||||||
|   flex: 1; |   flex: 1; | ||||||
| } | } | ||||||
| .lethalfantasy .character-main .character-characteristics .character-characteristic { | .lethalfantasy .character-main .character-characteristics .character-characteristic { | ||||||
| @@ -241,22 +222,22 @@ i.lethalfantasy { | |||||||
| } | } | ||||||
| .lethalfantasy .character-main .character-characteristics .character-characteristic .form-group { | .lethalfantasy .character-main .character-characteristics .character-characteristic .form-group { | ||||||
|   flex: 1; |   flex: 1; | ||||||
|   padding-left: 5px; |   padding-left: 4px; | ||||||
| } | } | ||||||
| .lethalfantasy .character-main .character-characteristics .character-characteristic .form-group .form-fields { | .lethalfantasy .character-main .character-characteristics .character-characteristic .form-group .form-fields { | ||||||
|   flex: none; |   flex: none; | ||||||
|   width: 70px; |   width: 3rem; | ||||||
| } | } | ||||||
| .lethalfantasy .character-main .character-challenges { | .lethalfantasy .character-main .character-challenges { | ||||||
|   display: flex; |   display: flex; | ||||||
|   flex-direction: column; |   flex-direction: column; | ||||||
|   gap: 5px; |   gap: 4px; | ||||||
|   flex: 1; |   flex: 1; | ||||||
| } | } | ||||||
| .lethalfantasy .character-main .character-challenges .character-challenge { | .lethalfantasy .character-main .character-challenges .character-challenge { | ||||||
|   display: flex; |   display: flex; | ||||||
|   align-items: center; |   align-items: center; | ||||||
|   margin-right: 1rem; |   margin-right: 0.5rem; | ||||||
| } | } | ||||||
| .lethalfantasy .character-main .character-challenges .character-challenge .rollable:hover, | .lethalfantasy .character-main .character-challenges .character-challenge .rollable:hover, | ||||||
| .lethalfantasy .character-main .character-challenges .character-challenge .rollable:focus { | .lethalfantasy .character-main .character-challenges .character-challenge .rollable:focus { | ||||||
| @@ -270,7 +251,7 @@ i.lethalfantasy { | |||||||
| } | } | ||||||
| .lethalfantasy .character-main .character-challenges .character-challenge .form-group { | .lethalfantasy .character-main .character-challenges .character-challenge .form-group { | ||||||
|   flex: 1; |   flex: 1; | ||||||
|   padding-left: 5px; |   padding-left: 4px; | ||||||
| } | } | ||||||
| .lethalfantasy .character-main .character-challenges .character-challenge .form-group .form-fields { | .lethalfantasy .character-main .character-challenges .character-challenge .form-group .form-fields { | ||||||
|   flex: none; |   flex: none; | ||||||
| @@ -279,13 +260,13 @@ i.lethalfantasy { | |||||||
| .lethalfantasy .character-main .character-movements { | .lethalfantasy .character-main .character-movements { | ||||||
|   display: flex; |   display: flex; | ||||||
|   flex-direction: column; |   flex-direction: column; | ||||||
|   gap: 5px; |   gap: 4px; | ||||||
|   flex: 1; |   flex: 1; | ||||||
| } | } | ||||||
| .lethalfantasy .character-main .character-movements .character-movement { | .lethalfantasy .character-main .character-movements .character-movement { | ||||||
|   display: flex; |   display: flex; | ||||||
|   align-items: center; |   align-items: center; | ||||||
|   margin-right: 1rem; |   margin-right: 0.5rem; | ||||||
| } | } | ||||||
| .lethalfantasy .character-main .character-movements .character-movement .rollable:hover, | .lethalfantasy .character-main .character-movements .character-movement .rollable:hover, | ||||||
| .lethalfantasy .character-main .character-movements .character-movement .rollable:focus { | .lethalfantasy .character-main .character-movements .character-movement .rollable:focus { | ||||||
| @@ -299,7 +280,7 @@ i.lethalfantasy { | |||||||
| } | } | ||||||
| .lethalfantasy .character-main .character-movements .character-movement .form-group { | .lethalfantasy .character-main .character-movements .character-movement .form-group { | ||||||
|   flex: 1; |   flex: 1; | ||||||
|   padding-left: 5px; |   padding-left: 4px; | ||||||
| } | } | ||||||
| .lethalfantasy .character-main .character-movements .character-movement .form-group .form-fields { | .lethalfantasy .character-main .character-movements .character-movement .form-group .form-fields { | ||||||
|   flex: none; |   flex: none; | ||||||
| @@ -308,13 +289,13 @@ i.lethalfantasy { | |||||||
| .lethalfantasy .character-main .character-saves { | .lethalfantasy .character-main .character-saves { | ||||||
|   display: flex; |   display: flex; | ||||||
|   flex-direction: column; |   flex-direction: column; | ||||||
|   gap: 5px; |   gap: 4px; | ||||||
|   flex: 1; |   flex: 1; | ||||||
| } | } | ||||||
| .lethalfantasy .character-main .character-saves .character-save { | .lethalfantasy .character-main .character-saves .character-save { | ||||||
|   display: flex; |   display: flex; | ||||||
|   align-items: center; |   align-items: center; | ||||||
|   margin-right: 0.2rem; |   margin-right: 0.5rem; | ||||||
| } | } | ||||||
| .lethalfantasy .character-main .character-saves .character-save .rollable:hover, | .lethalfantasy .character-main .character-saves .character-save .rollable:hover, | ||||||
| .lethalfantasy .character-main .character-saves .character-save .rollable:focus { | .lethalfantasy .character-main .character-saves .character-save .rollable:focus { | ||||||
| @@ -325,17 +306,17 @@ i.lethalfantasy { | |||||||
|   flex: 0; |   flex: 0; | ||||||
|   min-width: 5rem; |   min-width: 5rem; | ||||||
|   max-width: 5rem; |   max-width: 5rem; | ||||||
|   margin-left: 0.7rem; |   margin-left: 0.5rem; | ||||||
| } | } | ||||||
| .lethalfantasy .character-main .character-saves .character-save .name-pain { | .lethalfantasy .character-main .character-saves .character-save .name-pain { | ||||||
|   flex: 0; |   flex: 0; | ||||||
|   min-width: 3rem; |   min-width: 3rem; | ||||||
|   max-width: 3rem; |   max-width: 3rem; | ||||||
|   margin-left: 0.7rem; |   margin-left: 0.5rem; | ||||||
| } | } | ||||||
| .lethalfantasy .character-main .character-saves .character-save .form-group { | .lethalfantasy .character-main .character-saves .character-save .form-group { | ||||||
|   flex: 0; |   flex: 0; | ||||||
|   padding-left: 5px; |   padding-left: 4px; | ||||||
| } | } | ||||||
| .lethalfantasy .character-main .character-saves .character-save .form-group .form-fields { | .lethalfantasy .character-main .character-saves .character-save .form-group .form-fields { | ||||||
|   flex: none; |   flex: none; | ||||||
| @@ -347,72 +328,20 @@ i.lethalfantasy { | |||||||
| .lethalfantasy .character-main .character-characteristic-edit { | .lethalfantasy .character-main .character-characteristic-edit { | ||||||
|   min-width: 400px; |   min-width: 400px; | ||||||
| } | } | ||||||
| .lethalfantasy .character-main .character-resources { |  | ||||||
|   display: flex; |  | ||||||
|   flex-direction: column; |  | ||||||
|   gap: 5px; |  | ||||||
|   flex: 1; |  | ||||||
| } |  | ||||||
| .lethalfantasy .character-main .character-resources .character-resource { |  | ||||||
|   display: flex; |  | ||||||
|   align-items: center; |  | ||||||
| } |  | ||||||
| .lethalfantasy .character-main .character-resources .character-resource .rollable:hover, |  | ||||||
| .lethalfantasy .character-main .character-resources .character-resource .rollable:focus { |  | ||||||
|   text-shadow: 0 0 8px var(--color-shadow-primary); |  | ||||||
|   cursor: pointer; |  | ||||||
| } |  | ||||||
| .lethalfantasy .character-main .character-resources .character-resource .form-group { |  | ||||||
|   flex: 1; |  | ||||||
|   padding-left: 5px; |  | ||||||
| } |  | ||||||
| .lethalfantasy .character-main .character-resources .character-resource .form-group .form-fields { |  | ||||||
|   flex: none; |  | ||||||
|   width: 70px; |  | ||||||
| } |  | ||||||
| .lethalfantasy .character-main .character-resources .character-resource .character-resource-edit { |  | ||||||
|   display: flex; |  | ||||||
|   align-items: center; |  | ||||||
|   gap: 10px; |  | ||||||
|   margin-left: 10px; |  | ||||||
| } |  | ||||||
| .lethalfantasy .character-main .character-resources .character-resource .character-resource-edit input { |  | ||||||
|   display: flex; |  | ||||||
|   width: 70px; |  | ||||||
|   font-size: calc(var(--font-size-standard) * 1.4); |  | ||||||
|   align-items: center; |  | ||||||
|   justify-content: center; |  | ||||||
|   padding: 0 5px 0 5px; |  | ||||||
| } |  | ||||||
| .lethalfantasy .character-main .character-resources .character-resource .character-resource-edit input[type="number"] { |  | ||||||
|   text-align: center; |  | ||||||
| } |  | ||||||
| .lethalfantasy .character-main .character-resources .character-resource .character-resource-edit select { |  | ||||||
|   font-family: var(--font-secondary); |  | ||||||
|   font-size: calc(var(--font-size-standard) * 1.5); |  | ||||||
|   text-align: center; |  | ||||||
|   width: 75px; |  | ||||||
| } |  | ||||||
| .lethalfantasy .character-main .character-resources-play { |  | ||||||
|   min-width: 235px; |  | ||||||
| } |  | ||||||
| .lethalfantasy .character-main .character-resources-edit { |  | ||||||
|   min-width: 400px; |  | ||||||
| } |  | ||||||
| .lethalfantasy .tab.character-biography .biodata { | .lethalfantasy .tab.character-biography .biodata { | ||||||
|   display: grid; |   display: grid; | ||||||
|   grid-template-columns: repeat(4, 1fr); |   grid-template-columns: repeat(4, 1fr); | ||||||
|   gap: 10px; |   gap: 4px; | ||||||
| } | } | ||||||
| .lethalfantasy .tab.character-biography .biodata .biodata-elem { | .lethalfantasy .tab.character-biography .biodata .biodata-elem { | ||||||
|   display: flex; |   display: flex; | ||||||
|   align-items: center; |   align-items: center; | ||||||
|   gap: 10px; |   gap: 4px; | ||||||
| } | } | ||||||
| .lethalfantasy .tab.character-biography .biodata .biodata-elem .item-img { | .lethalfantasy .tab.character-biography .biodata .biodata-elem .item-img { | ||||||
|   width: 32px; |   width: 24px; | ||||||
|   height: 32px; |   height: 24px; | ||||||
|   margin: 5px 0 0 0; |   margin: 4px 0 0 0; | ||||||
| } | } | ||||||
| .lethalfantasy .tab.character-biography .biodata .biodata-elem .name { | .lethalfantasy .tab.character-biography .biodata .biodata-elem .name { | ||||||
|   min-width: 8rem; |   min-width: 8rem; | ||||||
| @@ -429,21 +358,21 @@ i.lethalfantasy { | |||||||
| } | } | ||||||
| .lethalfantasy .tab.character-skills legend a { | .lethalfantasy .tab.character-skills legend a { | ||||||
|   font-size: calc(var(--font-size-standard) * 1); |   font-size: calc(var(--font-size-standard) * 1); | ||||||
|   padding-left: 5px; |   padding-left: 4px; | ||||||
| } | } | ||||||
| .lethalfantasy .tab.character-skills .skills { | .lethalfantasy .tab.character-skills .skills { | ||||||
|   display: grid; |   display: grid; | ||||||
|   grid-template-columns: repeat(3, 1fr); |   grid-template-columns: repeat(3, 1fr); | ||||||
|   gap: 10px; |   gap: 4px; | ||||||
| } | } | ||||||
| .lethalfantasy .tab.character-skills .skills .skill { | .lethalfantasy .tab.character-skills .skills .skill { | ||||||
|   display: flex; |   display: flex; | ||||||
|   align-items: center; |   align-items: center; | ||||||
|   gap: 10px; |   gap: 4px; | ||||||
| } | } | ||||||
| .lethalfantasy .tab.character-skills .skills .skill .item-img { | .lethalfantasy .tab.character-skills .skills .skill .item-img { | ||||||
|   width: 32px; |   width: 24px; | ||||||
|   height: 32px; |   height: 24px; | ||||||
| } | } | ||||||
| .lethalfantasy .tab.character-skills .skills .skill .name { | .lethalfantasy .tab.character-skills .skills .skill .name { | ||||||
|   min-width: 12rem; |   min-width: 12rem; | ||||||
| @@ -451,16 +380,16 @@ i.lethalfantasy { | |||||||
| .lethalfantasy .tab.character-skills .gifts { | .lethalfantasy .tab.character-skills .gifts { | ||||||
|   display: grid; |   display: grid; | ||||||
|   grid-template-columns: repeat(3, 1fr); |   grid-template-columns: repeat(3, 1fr); | ||||||
|   gap: 10px; |   gap: 4px; | ||||||
| } | } | ||||||
| .lethalfantasy .tab.character-skills .gifts .gift { | .lethalfantasy .tab.character-skills .gifts .gift { | ||||||
|   display: flex; |   display: flex; | ||||||
|   align-items: center; |   align-items: center; | ||||||
|   gap: 10px; |   gap: 4px; | ||||||
| } | } | ||||||
| .lethalfantasy .tab.character-skills .gifts .gift .item-img { | .lethalfantasy .tab.character-skills .gifts .gift .item-img { | ||||||
|   width: 32px; |   width: 24px; | ||||||
|   height: 32px; |   height: 24px; | ||||||
| } | } | ||||||
| .lethalfantasy .tab.character-skills .gifts .gift .name { | .lethalfantasy .tab.character-skills .gifts .gift .name { | ||||||
|   min-width: 12rem; |   min-width: 12rem; | ||||||
| @@ -468,16 +397,16 @@ i.lethalfantasy { | |||||||
| .lethalfantasy .tab.character-skills .vulnerabilities { | .lethalfantasy .tab.character-skills .vulnerabilities { | ||||||
|   display: grid; |   display: grid; | ||||||
|   grid-template-columns: repeat(3, 1fr); |   grid-template-columns: repeat(3, 1fr); | ||||||
|   gap: 10px; |   gap: 4px; | ||||||
| } | } | ||||||
| .lethalfantasy .tab.character-skills .vulnerabilities .vulnerability { | .lethalfantasy .tab.character-skills .vulnerabilities .vulnerability { | ||||||
|   display: flex; |   display: flex; | ||||||
|   align-items: center; |   align-items: center; | ||||||
|   gap: 10px; |   gap: 4px; | ||||||
| } | } | ||||||
| .lethalfantasy .tab.character-skills .vulnerabilities .vulnerability .item-img { | .lethalfantasy .tab.character-skills .vulnerabilities .vulnerability .item-img { | ||||||
|   width: 32px; |   width: 24px; | ||||||
|   height: 32px; |   height: 24px; | ||||||
| } | } | ||||||
| .lethalfantasy .tab.character-skills .vulnerabilities .vulnerability .name { | .lethalfantasy .tab.character-skills .vulnerabilities .vulnerability .name { | ||||||
|   min-width: 12rem; |   min-width: 12rem; | ||||||
| @@ -488,27 +417,27 @@ i.lethalfantasy { | |||||||
| } | } | ||||||
| .lethalfantasy .tab.character-equipment legend a { | .lethalfantasy .tab.character-equipment legend a { | ||||||
|   font-size: calc(var(--font-size-standard) * 1.4); |   font-size: calc(var(--font-size-standard) * 1.4); | ||||||
|   padding-left: 5px; |   padding-left: 4px; | ||||||
| } | } | ||||||
| .lethalfantasy .tab.character-equipment .moneys { | .lethalfantasy .tab.character-equipment .moneys { | ||||||
|   display: grid; |   display: grid; | ||||||
|   grid-template-columns: repeat(5, 1fr); |   grid-template-columns: repeat(5, 1fr); | ||||||
|   gap: 10px; |   gap: 4px; | ||||||
| } | } | ||||||
| .lethalfantasy .tab.character-equipment .equipments { | .lethalfantasy .tab.character-equipment .equipments { | ||||||
|   display: grid; |   display: grid; | ||||||
|   grid-template-columns: repeat(3, 1fr); |   grid-template-columns: repeat(3, 1fr); | ||||||
|   gap: 10px; |   gap: 4px; | ||||||
| } | } | ||||||
| .lethalfantasy .tab.character-equipment .equipments .equipment { | .lethalfantasy .tab.character-equipment .equipments .equipment { | ||||||
|   display: flex; |   display: flex; | ||||||
|   align-items: center; |   align-items: center; | ||||||
|   gap: 10px; |   gap: 4px; | ||||||
| } | } | ||||||
| .lethalfantasy .tab.character-equipment .equipments .equipment .item-img { | .lethalfantasy .tab.character-equipment .equipments .equipment .item-img { | ||||||
|   width: 32px; |   width: 24px; | ||||||
|   height: 32px; |   height: 24px; | ||||||
|   margin: 5px 0 0 0; |   margin: 4px 0 0 0; | ||||||
| } | } | ||||||
| .lethalfantasy .tab.character-equipment .equipments .equipment .name { | .lethalfantasy .tab.character-equipment .equipments .equipment .name { | ||||||
|   min-width: 12rem; |   min-width: 12rem; | ||||||
| @@ -522,17 +451,20 @@ i.lethalfantasy { | |||||||
| } | } | ||||||
| .lethalfantasy .tab.character-combat legend a { | .lethalfantasy .tab.character-combat legend a { | ||||||
|   font-size: calc(var(--font-size-standard) * 1.4); |   font-size: calc(var(--font-size-standard) * 1.4); | ||||||
|   padding-left: 5px; |   padding-left: 4px; | ||||||
| } | } | ||||||
| .lethalfantasy .tab.character-combat .combat-details { | .lethalfantasy .tab.character-combat .combat-details { | ||||||
|   display: grid; |   display: grid; | ||||||
|   grid-template-columns: repeat(2, 1fr); |   grid-template-columns: repeat(2, 1fr); | ||||||
|   gap: 10px; |   gap: 4px; | ||||||
| } | } | ||||||
| .lethalfantasy .tab.character-combat .combat-details .combat-detail { | .lethalfantasy .tab.character-combat .combat-details .combat-detail { | ||||||
|   display: flex; |   display: flex; | ||||||
|   align-items: center; |   align-items: center; | ||||||
|   gap: 10px; |   gap: 4px; | ||||||
|  | } | ||||||
|  | .lethalfantasy .tab.character-combat .combat-details .combat-detail button { | ||||||
|  |   min-width: 10rem; | ||||||
| } | } | ||||||
| .lethalfantasy .tab.character-combat .combat-details .combat-detail .armor-hp { | .lethalfantasy .tab.character-combat .combat-details .combat-detail .armor-hp { | ||||||
|   min-width: 20rem; |   min-width: 20rem; | ||||||
| @@ -545,12 +477,12 @@ i.lethalfantasy { | |||||||
| .lethalfantasy .tab.character-combat .wounds { | .lethalfantasy .tab.character-combat .wounds { | ||||||
|   display: grid; |   display: grid; | ||||||
|   grid-template-columns: repeat(2, 1fr); |   grid-template-columns: repeat(2, 1fr); | ||||||
|   gap: 10px; |   gap: 4px; | ||||||
| } | } | ||||||
| .lethalfantasy .tab.character-combat .wounds .wound { | .lethalfantasy .tab.character-combat .wounds .wound { | ||||||
|   display: flex; |   display: flex; | ||||||
|   align-items: center; |   align-items: center; | ||||||
|   gap: 10px; |   gap: 4px; | ||||||
| } | } | ||||||
| .lethalfantasy .tab.character-combat .wounds .wound .wound-description { | .lethalfantasy .tab.character-combat .wounds .wound .wound-description { | ||||||
|   min-width: 16rem; |   min-width: 16rem; | ||||||
| @@ -565,9 +497,9 @@ i.lethalfantasy { | |||||||
|   max-width: 3rem; |   max-width: 3rem; | ||||||
| } | } | ||||||
| .lethalfantasy .tab.character-combat .wounds .wound .item-img { | .lethalfantasy .tab.character-combat .wounds .wound .item-img { | ||||||
|   width: 32px; |   width: 24px; | ||||||
|   height: 32px; |   height: 24px; | ||||||
|   margin: 5px 0 0 0; |   margin: 4px 0 0 0; | ||||||
| } | } | ||||||
| .lethalfantasy .tab.character-combat .wounds .wound .name { | .lethalfantasy .tab.character-combat .wounds .wound .name { | ||||||
|   min-width: 12rem; |   min-width: 12rem; | ||||||
| @@ -575,17 +507,17 @@ i.lethalfantasy { | |||||||
| .lethalfantasy .tab.character-combat .weapons { | .lethalfantasy .tab.character-combat .weapons { | ||||||
|   display: grid; |   display: grid; | ||||||
|   grid-template-columns: repeat(2, 1fr); |   grid-template-columns: repeat(2, 1fr); | ||||||
|   gap: 10px; |   gap: 4px; | ||||||
| } | } | ||||||
| .lethalfantasy .tab.character-combat .weapons .weapon { | .lethalfantasy .tab.character-combat .weapons .weapon { | ||||||
|   display: flex; |   display: flex; | ||||||
|   align-items: center; |   align-items: center; | ||||||
|   gap: 10px; |   gap: 4px; | ||||||
| } | } | ||||||
| .lethalfantasy .tab.character-combat .weapons .weapon .item-img { | .lethalfantasy .tab.character-combat .weapons .weapon .item-img { | ||||||
|   width: 32px; |   width: 24px; | ||||||
|   height: 32px; |   height: 24px; | ||||||
|   margin: 5px 0 0 0; |   margin: 4px 0 0 0; | ||||||
| } | } | ||||||
| .lethalfantasy .tab.character-combat .weapons .weapon .name { | .lethalfantasy .tab.character-combat .weapons .weapon .name { | ||||||
|   min-width: 12rem; |   min-width: 12rem; | ||||||
| @@ -597,17 +529,17 @@ i.lethalfantasy { | |||||||
| .lethalfantasy .tab.character-combat .armors { | .lethalfantasy .tab.character-combat .armors { | ||||||
|   display: grid; |   display: grid; | ||||||
|   grid-template-columns: repeat(3, 1fr); |   grid-template-columns: repeat(3, 1fr); | ||||||
|   gap: 10px; |   gap: 4px; | ||||||
| } | } | ||||||
| .lethalfantasy .tab.character-combat .armors .armor { | .lethalfantasy .tab.character-combat .armors .armor { | ||||||
|   display: flex; |   display: flex; | ||||||
|   align-items: center; |   align-items: center; | ||||||
|   gap: 10px; |   gap: 4px; | ||||||
| } | } | ||||||
| .lethalfantasy .tab.character-combat .armors .armor .item-img { | .lethalfantasy .tab.character-combat .armors .armor .item-img { | ||||||
|   width: 32px; |   width: 24px; | ||||||
|   height: 32px; |   height: 24px; | ||||||
|   margin: 5px 0 0 0; |   margin: 4px 0 0 0; | ||||||
| } | } | ||||||
| .lethalfantasy .tab.character-combat .armors .name { | .lethalfantasy .tab.character-combat .armors .name { | ||||||
|   min-width: 12rem; |   min-width: 12rem; | ||||||
| @@ -618,21 +550,21 @@ i.lethalfantasy { | |||||||
| } | } | ||||||
| .lethalfantasy .tab.character-spells legend a { | .lethalfantasy .tab.character-spells legend a { | ||||||
|   font-size: calc(var(--font-size-standard) * 1.4); |   font-size: calc(var(--font-size-standard) * 1.4); | ||||||
|   padding-left: 5px; |   padding-left: 4px; | ||||||
| } | } | ||||||
| .lethalfantasy .tab.character-spells .spells { | .lethalfantasy .tab.character-spells .spells { | ||||||
|   display: grid; |   display: grid; | ||||||
|   grid-template-columns: repeat(3, 1fr); |   grid-template-columns: repeat(3, 1fr); | ||||||
|   gap: 10px; |   gap: 4px; | ||||||
| } | } | ||||||
| .lethalfantasy .tab.character-spells .spells .spell { | .lethalfantasy .tab.character-spells .spells .spell { | ||||||
|   display: flex; |   display: flex; | ||||||
|   align-items: center; |   align-items: center; | ||||||
|   gap: 10px; |   gap: 4px; | ||||||
| } | } | ||||||
| .lethalfantasy .tab.character-spells .spells .spell .item-img { | .lethalfantasy .tab.character-spells .spells .spell .item-img { | ||||||
|   width: 32px; |   width: 24px; | ||||||
|   height: 32px; |   height: 24px; | ||||||
| } | } | ||||||
| .lethalfantasy .tab.character-spells .spells .spell .name { | .lethalfantasy .tab.character-spells .spells .spell .name { | ||||||
|   min-width: 12rem; |   min-width: 12rem; | ||||||
| @@ -649,21 +581,21 @@ i.lethalfantasy { | |||||||
| } | } | ||||||
| .lethalfantasy .tab.character-miracles legend a { | .lethalfantasy .tab.character-miracles legend a { | ||||||
|   font-size: calc(var(--font-size-standard) * 1.4); |   font-size: calc(var(--font-size-standard) * 1.4); | ||||||
|   padding-left: 5px; |   padding-left: 4px; | ||||||
| } | } | ||||||
| .lethalfantasy .tab.character-miracles .miracles { | .lethalfantasy .tab.character-miracles .miracles { | ||||||
|   display: grid; |   display: grid; | ||||||
|   grid-template-columns: repeat(3, 1fr); |   grid-template-columns: repeat(3, 1fr); | ||||||
|   gap: 10px; |   gap: 4px; | ||||||
| } | } | ||||||
| .lethalfantasy .tab.character-miracles .miracles .miracle { | .lethalfantasy .tab.character-miracles .miracles .miracle { | ||||||
|   display: flex; |   display: flex; | ||||||
|   align-items: center; |   align-items: center; | ||||||
|   gap: 10px; |   gap: 4px; | ||||||
| } | } | ||||||
| .lethalfantasy .tab.character-miracles .miracles .miracle .item-img { | .lethalfantasy .tab.character-miracles .miracles .miracle .item-img { | ||||||
|   width: 32px; |   width: 24px; | ||||||
|   height: 32px; |   height: 24px; | ||||||
| } | } | ||||||
| .lethalfantasy .tab.character-miracles .miracles .miracle .name { | .lethalfantasy .tab.character-miracles .miracles .miracle .name { | ||||||
|   min-width: 12rem; |   min-width: 12rem; | ||||||
| @@ -691,21 +623,22 @@ i.lethalfantasy { | |||||||
| } | } | ||||||
| .lethalfantasy .opponent-content input, | .lethalfantasy .opponent-content input, | ||||||
| .lethalfantasy .opponent-content select { | .lethalfantasy .opponent-content select { | ||||||
|  |   height: 1.5rem; | ||||||
|   background-color: rgba(0, 0, 0, 0.1); |   background-color: rgba(0, 0, 0, 0.1); | ||||||
|   border-color: var(--color-dark-6); |   border-color: var(--color-dark-6); | ||||||
|   color: var(--color-dark-2); |   color: var(--color-dark-2); | ||||||
| } | } | ||||||
| .lethalfantasy .opponent-content input[name="name"] { | .lethalfantasy .opponent-content input[name="name"] { | ||||||
|   height: 50px; |   height: 2.5rem; | ||||||
|   margin-right: 10px; |   margin-right: 4px; | ||||||
|   font-family: var(--font-secondary); |   font-family: var(--font-secondary); | ||||||
|   font-size: calc(var(--font-size-standard) * 1); |   font-size: calc(var(--font-size-standard) * 1.2); | ||||||
|   font-weight: bold; |   font-weight: bold; | ||||||
|   border: none; |   border: none; | ||||||
| } | } | ||||||
| .lethalfantasy .opponent-content fieldset { | .lethalfantasy .opponent-content fieldset { | ||||||
|   margin-bottom: 5px; |   margin-bottom: 4px; | ||||||
|   border-radius: 5px; |   border-radius: 4px; | ||||||
| } | } | ||||||
| .lethalfantasy .opponent-content .form-fields input, | .lethalfantasy .opponent-content .form-fields input, | ||||||
| .lethalfantasy .opponent-content .form-fields select { | .lethalfantasy .opponent-content .form-fields select { | ||||||
| @@ -805,21 +738,22 @@ i.lethalfantasy { | |||||||
| } | } | ||||||
| .lethalfantasy .skill-content input, | .lethalfantasy .skill-content input, | ||||||
| .lethalfantasy .skill-content select { | .lethalfantasy .skill-content select { | ||||||
|  |   height: 1.5rem; | ||||||
|   background-color: rgba(0, 0, 0, 0.1); |   background-color: rgba(0, 0, 0, 0.1); | ||||||
|   border-color: var(--color-dark-6); |   border-color: var(--color-dark-6); | ||||||
|   color: var(--color-dark-2); |   color: var(--color-dark-2); | ||||||
| } | } | ||||||
| .lethalfantasy .skill-content input[name="name"] { | .lethalfantasy .skill-content input[name="name"] { | ||||||
|   height: 50px; |   height: 2.5rem; | ||||||
|   margin-right: 10px; |   margin-right: 4px; | ||||||
|   font-family: var(--font-secondary); |   font-family: var(--font-secondary); | ||||||
|   font-size: calc(var(--font-size-standard) * 1); |   font-size: calc(var(--font-size-standard) * 1.2); | ||||||
|   font-weight: bold; |   font-weight: bold; | ||||||
|   border: none; |   border: none; | ||||||
| } | } | ||||||
| .lethalfantasy .skill-content fieldset { | .lethalfantasy .skill-content fieldset { | ||||||
|   margin-bottom: 5px; |   margin-bottom: 4px; | ||||||
|   border-radius: 5px; |   border-radius: 4px; | ||||||
| } | } | ||||||
| .lethalfantasy .skill-content .form-fields input, | .lethalfantasy .skill-content .form-fields input, | ||||||
| .lethalfantasy .skill-content .form-fields select { | .lethalfantasy .skill-content .form-fields select { | ||||||
| @@ -837,7 +771,7 @@ i.lethalfantasy { | |||||||
|   letter-spacing: 1px; |   letter-spacing: 1px; | ||||||
| } | } | ||||||
| .lethalfantasy .skill-content .form-fields { | .lethalfantasy .skill-content .form-fields { | ||||||
|   padding-top: 5px; |   padding-top: 4px; | ||||||
| } | } | ||||||
| .lethalfantasy .skill-content label { | .lethalfantasy .skill-content label { | ||||||
|   font-family: var(--font-secondary); |   font-family: var(--font-secondary); | ||||||
| @@ -890,21 +824,22 @@ i.lethalfantasy { | |||||||
| } | } | ||||||
| .lethalfantasy .gift-content input, | .lethalfantasy .gift-content input, | ||||||
| .lethalfantasy .gift-content select { | .lethalfantasy .gift-content select { | ||||||
|  |   height: 1.5rem; | ||||||
|   background-color: rgba(0, 0, 0, 0.1); |   background-color: rgba(0, 0, 0, 0.1); | ||||||
|   border-color: var(--color-dark-6); |   border-color: var(--color-dark-6); | ||||||
|   color: var(--color-dark-2); |   color: var(--color-dark-2); | ||||||
| } | } | ||||||
| .lethalfantasy .gift-content input[name="name"] { | .lethalfantasy .gift-content input[name="name"] { | ||||||
|   height: 50px; |   height: 2.5rem; | ||||||
|   margin-right: 10px; |   margin-right: 4px; | ||||||
|   font-family: var(--font-secondary); |   font-family: var(--font-secondary); | ||||||
|   font-size: calc(var(--font-size-standard) * 1); |   font-size: calc(var(--font-size-standard) * 1.2); | ||||||
|   font-weight: bold; |   font-weight: bold; | ||||||
|   border: none; |   border: none; | ||||||
| } | } | ||||||
| .lethalfantasy .gift-content fieldset { | .lethalfantasy .gift-content fieldset { | ||||||
|   margin-bottom: 5px; |   margin-bottom: 4px; | ||||||
|   border-radius: 5px; |   border-radius: 4px; | ||||||
| } | } | ||||||
| .lethalfantasy .gift-content .form-fields input, | .lethalfantasy .gift-content .form-fields input, | ||||||
| .lethalfantasy .gift-content .form-fields select { | .lethalfantasy .gift-content .form-fields select { | ||||||
| @@ -922,7 +857,7 @@ i.lethalfantasy { | |||||||
|   letter-spacing: 1px; |   letter-spacing: 1px; | ||||||
| } | } | ||||||
| .lethalfantasy .gift-content .form-fields { | .lethalfantasy .gift-content .form-fields { | ||||||
|   padding-top: 5px; |   padding-top: 4px; | ||||||
| } | } | ||||||
| .lethalfantasy .gift-content label { | .lethalfantasy .gift-content label { | ||||||
|   font-family: var(--font-secondary); |   font-family: var(--font-secondary); | ||||||
| @@ -975,21 +910,22 @@ i.lethalfantasy { | |||||||
| } | } | ||||||
| .lethalfantasy .weapon-content input, | .lethalfantasy .weapon-content input, | ||||||
| .lethalfantasy .weapon-content select { | .lethalfantasy .weapon-content select { | ||||||
|  |   height: 1.5rem; | ||||||
|   background-color: rgba(0, 0, 0, 0.1); |   background-color: rgba(0, 0, 0, 0.1); | ||||||
|   border-color: var(--color-dark-6); |   border-color: var(--color-dark-6); | ||||||
|   color: var(--color-dark-2); |   color: var(--color-dark-2); | ||||||
| } | } | ||||||
| .lethalfantasy .weapon-content input[name="name"] { | .lethalfantasy .weapon-content input[name="name"] { | ||||||
|   height: 50px; |   height: 2.5rem; | ||||||
|   margin-right: 10px; |   margin-right: 4px; | ||||||
|   font-family: var(--font-secondary); |   font-family: var(--font-secondary); | ||||||
|   font-size: calc(var(--font-size-standard) * 1); |   font-size: calc(var(--font-size-standard) * 1.2); | ||||||
|   font-weight: bold; |   font-weight: bold; | ||||||
|   border: none; |   border: none; | ||||||
| } | } | ||||||
| .lethalfantasy .weapon-content fieldset { | .lethalfantasy .weapon-content fieldset { | ||||||
|   margin-bottom: 5px; |   margin-bottom: 4px; | ||||||
|   border-radius: 5px; |   border-radius: 4px; | ||||||
| } | } | ||||||
| .lethalfantasy .weapon-content .form-fields input, | .lethalfantasy .weapon-content .form-fields input, | ||||||
| .lethalfantasy .weapon-content .form-fields select { | .lethalfantasy .weapon-content .form-fields select { | ||||||
| @@ -1007,7 +943,7 @@ i.lethalfantasy { | |||||||
|   letter-spacing: 1px; |   letter-spacing: 1px; | ||||||
| } | } | ||||||
| .lethalfantasy .weapon-content .form-fields { | .lethalfantasy .weapon-content .form-fields { | ||||||
|   padding-top: 5px; |   padding-top: 4px; | ||||||
| } | } | ||||||
| .lethalfantasy .weapon-content label { | .lethalfantasy .weapon-content label { | ||||||
|   font-family: var(--font-secondary); |   font-family: var(--font-secondary); | ||||||
| @@ -1052,21 +988,22 @@ i.lethalfantasy { | |||||||
| } | } | ||||||
| .lethalfantasy .armor-content input, | .lethalfantasy .armor-content input, | ||||||
| .lethalfantasy .armor-content select { | .lethalfantasy .armor-content select { | ||||||
|  |   height: 1.5rem; | ||||||
|   background-color: rgba(0, 0, 0, 0.1); |   background-color: rgba(0, 0, 0, 0.1); | ||||||
|   border-color: var(--color-dark-6); |   border-color: var(--color-dark-6); | ||||||
|   color: var(--color-dark-2); |   color: var(--color-dark-2); | ||||||
| } | } | ||||||
| .lethalfantasy .armor-content input[name="name"] { | .lethalfantasy .armor-content input[name="name"] { | ||||||
|   height: 50px; |   height: 2.5rem; | ||||||
|   margin-right: 10px; |   margin-right: 4px; | ||||||
|   font-family: var(--font-secondary); |   font-family: var(--font-secondary); | ||||||
|   font-size: calc(var(--font-size-standard) * 1); |   font-size: calc(var(--font-size-standard) * 1.2); | ||||||
|   font-weight: bold; |   font-weight: bold; | ||||||
|   border: none; |   border: none; | ||||||
| } | } | ||||||
| .lethalfantasy .armor-content fieldset { | .lethalfantasy .armor-content fieldset { | ||||||
|   margin-bottom: 5px; |   margin-bottom: 4px; | ||||||
|   border-radius: 5px; |   border-radius: 4px; | ||||||
| } | } | ||||||
| .lethalfantasy .armor-content .form-fields input, | .lethalfantasy .armor-content .form-fields input, | ||||||
| .lethalfantasy .armor-content .form-fields select { | .lethalfantasy .armor-content .form-fields select { | ||||||
| @@ -1084,7 +1021,7 @@ i.lethalfantasy { | |||||||
|   letter-spacing: 1px; |   letter-spacing: 1px; | ||||||
| } | } | ||||||
| .lethalfantasy .armor-content .form-fields { | .lethalfantasy .armor-content .form-fields { | ||||||
|   padding-top: 5px; |   padding-top: 4px; | ||||||
| } | } | ||||||
| .lethalfantasy .armor-content label { | .lethalfantasy .armor-content label { | ||||||
|   font-family: var(--font-secondary); |   font-family: var(--font-secondary); | ||||||
| @@ -1129,21 +1066,22 @@ i.lethalfantasy { | |||||||
| } | } | ||||||
| .lethalfantasy .spell-content input, | .lethalfantasy .spell-content input, | ||||||
| .lethalfantasy .spell-content select { | .lethalfantasy .spell-content select { | ||||||
|  |   height: 1.5rem; | ||||||
|   background-color: rgba(0, 0, 0, 0.1); |   background-color: rgba(0, 0, 0, 0.1); | ||||||
|   border-color: var(--color-dark-6); |   border-color: var(--color-dark-6); | ||||||
|   color: var(--color-dark-2); |   color: var(--color-dark-2); | ||||||
| } | } | ||||||
| .lethalfantasy .spell-content input[name="name"] { | .lethalfantasy .spell-content input[name="name"] { | ||||||
|   height: 50px; |   height: 2.5rem; | ||||||
|   margin-right: 10px; |   margin-right: 4px; | ||||||
|   font-family: var(--font-secondary); |   font-family: var(--font-secondary); | ||||||
|   font-size: calc(var(--font-size-standard) * 1); |   font-size: calc(var(--font-size-standard) * 1.2); | ||||||
|   font-weight: bold; |   font-weight: bold; | ||||||
|   border: none; |   border: none; | ||||||
| } | } | ||||||
| .lethalfantasy .spell-content fieldset { | .lethalfantasy .spell-content fieldset { | ||||||
|   margin-bottom: 5px; |   margin-bottom: 4px; | ||||||
|   border-radius: 5px; |   border-radius: 4px; | ||||||
| } | } | ||||||
| .lethalfantasy .spell-content .form-fields input, | .lethalfantasy .spell-content .form-fields input, | ||||||
| .lethalfantasy .spell-content .form-fields select { | .lethalfantasy .spell-content .form-fields select { | ||||||
| @@ -1161,7 +1099,7 @@ i.lethalfantasy { | |||||||
|   letter-spacing: 1px; |   letter-spacing: 1px; | ||||||
| } | } | ||||||
| .lethalfantasy .spell-content .form-fields { | .lethalfantasy .spell-content .form-fields { | ||||||
|   padding-top: 5px; |   padding-top: 4px; | ||||||
| } | } | ||||||
| .lethalfantasy .spell-content label { | .lethalfantasy .spell-content label { | ||||||
|   font-family: var(--font-secondary); |   font-family: var(--font-secondary); | ||||||
| @@ -1206,21 +1144,22 @@ i.lethalfantasy { | |||||||
| } | } | ||||||
| .lethalfantasy .vulnerability-content input, | .lethalfantasy .vulnerability-content input, | ||||||
| .lethalfantasy .vulnerability-content select { | .lethalfantasy .vulnerability-content select { | ||||||
|  |   height: 1.5rem; | ||||||
|   background-color: rgba(0, 0, 0, 0.1); |   background-color: rgba(0, 0, 0, 0.1); | ||||||
|   border-color: var(--color-dark-6); |   border-color: var(--color-dark-6); | ||||||
|   color: var(--color-dark-2); |   color: var(--color-dark-2); | ||||||
| } | } | ||||||
| .lethalfantasy .vulnerability-content input[name="name"] { | .lethalfantasy .vulnerability-content input[name="name"] { | ||||||
|   height: 50px; |   height: 2.5rem; | ||||||
|   margin-right: 10px; |   margin-right: 4px; | ||||||
|   font-family: var(--font-secondary); |   font-family: var(--font-secondary); | ||||||
|   font-size: calc(var(--font-size-standard) * 1); |   font-size: calc(var(--font-size-standard) * 1.2); | ||||||
|   font-weight: bold; |   font-weight: bold; | ||||||
|   border: none; |   border: none; | ||||||
| } | } | ||||||
| .lethalfantasy .vulnerability-content fieldset { | .lethalfantasy .vulnerability-content fieldset { | ||||||
|   margin-bottom: 5px; |   margin-bottom: 4px; | ||||||
|   border-radius: 5px; |   border-radius: 4px; | ||||||
| } | } | ||||||
| .lethalfantasy .vulnerability-content .form-fields input, | .lethalfantasy .vulnerability-content .form-fields input, | ||||||
| .lethalfantasy .vulnerability-content .form-fields select { | .lethalfantasy .vulnerability-content .form-fields select { | ||||||
| @@ -1238,7 +1177,7 @@ i.lethalfantasy { | |||||||
|   letter-spacing: 1px; |   letter-spacing: 1px; | ||||||
| } | } | ||||||
| .lethalfantasy .vulnerability-content .form-fields { | .lethalfantasy .vulnerability-content .form-fields { | ||||||
|   padding-top: 5px; |   padding-top: 4px; | ||||||
| } | } | ||||||
| .lethalfantasy .vulnerability-content label { | .lethalfantasy .vulnerability-content label { | ||||||
|   font-family: var(--font-secondary); |   font-family: var(--font-secondary); | ||||||
| @@ -1329,21 +1268,22 @@ i.lethalfantasy { | |||||||
| } | } | ||||||
| .lethalfantasy .equipment-content input, | .lethalfantasy .equipment-content input, | ||||||
| .lethalfantasy .equipment-content select { | .lethalfantasy .equipment-content select { | ||||||
|  |   height: 1.5rem; | ||||||
|   background-color: rgba(0, 0, 0, 0.1); |   background-color: rgba(0, 0, 0, 0.1); | ||||||
|   border-color: var(--color-dark-6); |   border-color: var(--color-dark-6); | ||||||
|   color: var(--color-dark-2); |   color: var(--color-dark-2); | ||||||
| } | } | ||||||
| .lethalfantasy .equipment-content input[name="name"] { | .lethalfantasy .equipment-content input[name="name"] { | ||||||
|   height: 50px; |   height: 2.5rem; | ||||||
|   margin-right: 10px; |   margin-right: 4px; | ||||||
|   font-family: var(--font-secondary); |   font-family: var(--font-secondary); | ||||||
|   font-size: calc(var(--font-size-standard) * 1); |   font-size: calc(var(--font-size-standard) * 1.2); | ||||||
|   font-weight: bold; |   font-weight: bold; | ||||||
|   border: none; |   border: none; | ||||||
| } | } | ||||||
| .lethalfantasy .equipment-content fieldset { | .lethalfantasy .equipment-content fieldset { | ||||||
|   margin-bottom: 5px; |   margin-bottom: 4px; | ||||||
|   border-radius: 5px; |   border-radius: 4px; | ||||||
| } | } | ||||||
| .lethalfantasy .equipment-content .form-fields input, | .lethalfantasy .equipment-content .form-fields input, | ||||||
| .lethalfantasy .equipment-content .form-fields select { | .lethalfantasy .equipment-content .form-fields select { | ||||||
| @@ -1361,7 +1301,7 @@ i.lethalfantasy { | |||||||
|   letter-spacing: 1px; |   letter-spacing: 1px; | ||||||
| } | } | ||||||
| .lethalfantasy .equipment-content .form-fields { | .lethalfantasy .equipment-content .form-fields { | ||||||
|   padding-top: 5px; |   padding-top: 4px; | ||||||
| } | } | ||||||
| .lethalfantasy .equipment-content label { | .lethalfantasy .equipment-content label { | ||||||
|   font-family: var(--font-secondary); |   font-family: var(--font-secondary); | ||||||
| @@ -1406,21 +1346,22 @@ i.lethalfantasy { | |||||||
| } | } | ||||||
| .lethalfantasy .shield-content input, | .lethalfantasy .shield-content input, | ||||||
| .lethalfantasy .shield-content select { | .lethalfantasy .shield-content select { | ||||||
|  |   height: 1.5rem; | ||||||
|   background-color: rgba(0, 0, 0, 0.1); |   background-color: rgba(0, 0, 0, 0.1); | ||||||
|   border-color: var(--color-dark-6); |   border-color: var(--color-dark-6); | ||||||
|   color: var(--color-dark-2); |   color: var(--color-dark-2); | ||||||
| } | } | ||||||
| .lethalfantasy .shield-content input[name="name"] { | .lethalfantasy .shield-content input[name="name"] { | ||||||
|   height: 50px; |   height: 2.5rem; | ||||||
|   margin-right: 10px; |   margin-right: 4px; | ||||||
|   font-family: var(--font-secondary); |   font-family: var(--font-secondary); | ||||||
|   font-size: calc(var(--font-size-standard) * 1); |   font-size: calc(var(--font-size-standard) * 1.2); | ||||||
|   font-weight: bold; |   font-weight: bold; | ||||||
|   border: none; |   border: none; | ||||||
| } | } | ||||||
| .lethalfantasy .shield-content fieldset { | .lethalfantasy .shield-content fieldset { | ||||||
|   margin-bottom: 5px; |   margin-bottom: 4px; | ||||||
|   border-radius: 5px; |   border-radius: 4px; | ||||||
| } | } | ||||||
| .lethalfantasy .shield-content .form-fields input, | .lethalfantasy .shield-content .form-fields input, | ||||||
| .lethalfantasy .shield-content .form-fields select { | .lethalfantasy .shield-content .form-fields select { | ||||||
| @@ -1438,7 +1379,7 @@ i.lethalfantasy { | |||||||
|   letter-spacing: 1px; |   letter-spacing: 1px; | ||||||
| } | } | ||||||
| .lethalfantasy .shield-content .form-fields { | .lethalfantasy .shield-content .form-fields { | ||||||
|   padding-top: 5px; |   padding-top: 4px; | ||||||
| } | } | ||||||
| .lethalfantasy .shield-content label { | .lethalfantasy .shield-content label { | ||||||
|   font-family: var(--font-secondary); |   font-family: var(--font-secondary); | ||||||
| @@ -1483,21 +1424,22 @@ i.lethalfantasy { | |||||||
| } | } | ||||||
| .lethalfantasy .miracle-content input, | .lethalfantasy .miracle-content input, | ||||||
| .lethalfantasy .miracle-content select { | .lethalfantasy .miracle-content select { | ||||||
|  |   height: 1.5rem; | ||||||
|   background-color: rgba(0, 0, 0, 0.1); |   background-color: rgba(0, 0, 0, 0.1); | ||||||
|   border-color: var(--color-dark-6); |   border-color: var(--color-dark-6); | ||||||
|   color: var(--color-dark-2); |   color: var(--color-dark-2); | ||||||
| } | } | ||||||
| .lethalfantasy .miracle-content input[name="name"] { | .lethalfantasy .miracle-content input[name="name"] { | ||||||
|   height: 50px; |   height: 2.5rem; | ||||||
|   margin-right: 10px; |   margin-right: 4px; | ||||||
|   font-family: var(--font-secondary); |   font-family: var(--font-secondary); | ||||||
|   font-size: calc(var(--font-size-standard) * 1); |   font-size: calc(var(--font-size-standard) * 1.2); | ||||||
|   font-weight: bold; |   font-weight: bold; | ||||||
|   border: none; |   border: none; | ||||||
| } | } | ||||||
| .lethalfantasy .miracle-content fieldset { | .lethalfantasy .miracle-content fieldset { | ||||||
|   margin-bottom: 5px; |   margin-bottom: 4px; | ||||||
|   border-radius: 5px; |   border-radius: 4px; | ||||||
| } | } | ||||||
| .lethalfantasy .miracle-content .form-fields input, | .lethalfantasy .miracle-content .form-fields input, | ||||||
| .lethalfantasy .miracle-content .form-fields select { | .lethalfantasy .miracle-content .form-fields select { | ||||||
| @@ -1515,7 +1457,7 @@ i.lethalfantasy { | |||||||
|   letter-spacing: 1px; |   letter-spacing: 1px; | ||||||
| } | } | ||||||
| .lethalfantasy .miracle-content .form-fields { | .lethalfantasy .miracle-content .form-fields { | ||||||
|   padding-top: 5px; |   padding-top: 4px; | ||||||
| } | } | ||||||
| .lethalfantasy .miracle-content label { | .lethalfantasy .miracle-content label { | ||||||
|   font-family: var(--font-secondary); |   font-family: var(--font-secondary); | ||||||
|   | |||||||
							
								
								
									
										13
									
								
								lang/en.json
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								lang/en.json
									
									
									
									
									
								
							| @@ -1,4 +1,9 @@ | |||||||
| { | { | ||||||
|  |   "COMBAT": { | ||||||
|  |     "Round":        "Second", | ||||||
|  |     "Rounds":       "Seconds", | ||||||
|  |     "RoundNext":    "Next second" | ||||||
|  |   }, | ||||||
|   "LETHALFANTASY": { |   "LETHALFANTASY": { | ||||||
|     "Armor": { |     "Armor": { | ||||||
|       "Category": { |       "Category": { | ||||||
| @@ -178,7 +183,10 @@ | |||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "Label": { |     "Label": { | ||||||
|  |       "initiative": "Initiative", | ||||||
|  |       "maxInitiativeWisdom": "Max initiative (from wisdom)", | ||||||
|       "combat": "Combat", |       "combat": "Combat", | ||||||
|  |       "rollInitiative": "Roll initiative", | ||||||
|       "money": "Money", |       "money": "Money", | ||||||
|       "favorResult": "Favor result", |       "favorResult": "Favor result", | ||||||
|       "disfavorResult": "Disfavor result", |       "disfavorResult": "Disfavor result", | ||||||
| @@ -233,7 +241,10 @@ | |||||||
|         "jog": "Jog", |         "jog": "Jog", | ||||||
|         "run": "Run", |         "run": "Run", | ||||||
|         "sprint": "Sprint", |         "sprint": "Sprint", | ||||||
|         "walk": "Walk" |         "walk": "Walk", | ||||||
|  |         "jumpBroad": "Broad jump", | ||||||
|  |         "jumpRunning": "Running jump", | ||||||
|  |         "jumpVertical": "Vertical jump" | ||||||
|       }, |       }, | ||||||
|       "newArmor": "New armor", |       "newArmor": "New armor", | ||||||
|       "newWeapon": "New weapon", |       "newWeapon": "New weapon", | ||||||
|   | |||||||
| @@ -11,6 +11,7 @@ import * as models from "./module/models/_module.mjs" | |||||||
| import * as documents from "./module/documents/_module.mjs" | import * as documents from "./module/documents/_module.mjs" | ||||||
| import * as applications from "./module/applications/_module.mjs" | import * as applications from "./module/applications/_module.mjs" | ||||||
|  |  | ||||||
|  | import { LethalFantasyCombatTracker, LethalFantasyCombat} from "./module/applications/combat.mjs" | ||||||
| import { handleSocketEvent } from "./module/socket.mjs" | import { handleSocketEvent } from "./module/socket.mjs" | ||||||
| import { Macros } from "./module/macros.mjs" | import { Macros } from "./module/macros.mjs" | ||||||
| import { initControlButtons } from "./module/control-buttons.mjs" | import { initControlButtons } from "./module/control-buttons.mjs" | ||||||
| @@ -33,6 +34,9 @@ Hooks.once("init", function () { | |||||||
|     documents, |     documents, | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  |   CONFIG.ui.combat = LethalFantasyCombatTracker | ||||||
|  |   CONFIG.Combat.documentClass = LethalFantasyCombat; | ||||||
|  |  | ||||||
|   CONFIG.Actor.documentClass = documents.LethalFantasyActor |   CONFIG.Actor.documentClass = documents.LethalFantasyActor | ||||||
|   CONFIG.Actor.dataModels = { |   CONFIG.Actor.dataModels = { | ||||||
|     character: models.LethalFantasyCharacter, |     character: models.LethalFantasyCharacter, | ||||||
|   | |||||||
							
								
								
									
										191
									
								
								module/applications/combat.mjs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										191
									
								
								module/applications/combat.mjs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,191 @@ | |||||||
|  |  | ||||||
|  | /* -------------------------------------------- */ | ||||||
|  | export class LethalFantasyCombatTracker extends CombatTracker { | ||||||
|  |  | ||||||
|  |   /* -------------------------------------------- */ | ||||||
|  |   static get defaultOptions() { | ||||||
|  |     let path = "systems/fvtt-lethal-fantasy/templates/combat-tracker.hbs"; | ||||||
|  |     return foundry.utils.mergeObject(super.defaultOptions, { | ||||||
|  |       template: path, | ||||||
|  |     }); | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | export class LethalFantasyCombat extends Combat { | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |  * Return the Array of combatants sorted into initiative order, breaking ties alphabetically by name. | ||||||
|  |  * @returns {Combatant[]} | ||||||
|  |  */ | ||||||
|  |   setupTurns() { | ||||||
|  |     console?.log("Setup Turns...."); | ||||||
|  |     this.turns ||= []; | ||||||
|  |  | ||||||
|  |     // Determine the turn order and the current turn | ||||||
|  |     const turns = this.combatants.contents.sort(this.sortCombatantsLF); | ||||||
|  |     if (this.turn !== null) this.turn = Math.clamp(this.turn, 0, turns.length - 1); | ||||||
|  |  | ||||||
|  |     // Update state tracking | ||||||
|  |     let c = turns[this.turn]; | ||||||
|  |     this.current = this._getCurrentState(c); | ||||||
|  |     if (!this.previous) this.previous = this.current; | ||||||
|  |  | ||||||
|  |     // Return the array of prepared turns | ||||||
|  |     return this.turns = turns; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   async rollInitiative(ids, options) { | ||||||
|  |     console.log("%%%%%%%%% Roll Initiative", ids, options); | ||||||
|  |     await this.setFlag("acks", "lock-turns", true); | ||||||
|  |  | ||||||
|  |     ids = typeof ids === "string" ? [ids] : ids; | ||||||
|  |     let messages = []; | ||||||
|  |     let rollMode = game.settings.get("core", "rollMode"); | ||||||
|  |  | ||||||
|  |     // Get current groups  | ||||||
|  |     let groups = this.getFlag('acks', 'groups') || []; | ||||||
|  |     let maxInit = { value: -1, cId: "" } | ||||||
|  |     let updates = []; | ||||||
|  |     for (let cId of ids) { | ||||||
|  |       const c = this.combatants.get(cId); | ||||||
|  |       //console.log("Init for combattant", cId, c, ids) | ||||||
|  |       let id = c._id || c.id | ||||||
|  |       // get the associated token  | ||||||
|  |       let tokenId = c.token.id; | ||||||
|  |       // Check if the current token ID is in a group   | ||||||
|  |       let groupData = groups.find((groupData) => groupData.tokens.includes(tokenId)); | ||||||
|  |       let initValue = -1; | ||||||
|  |       let showMessage = true | ||||||
|  |       let roll | ||||||
|  |       if (groupData && groupData.initiative > 0) { | ||||||
|  |         initValue = groupData.initiative; | ||||||
|  |         showMessage = false | ||||||
|  |       } else { | ||||||
|  |         roll = c.getInitiativeRoll(); | ||||||
|  |         await roll.evaluate(); | ||||||
|  |         initValue = roll.total; | ||||||
|  |       } | ||||||
|  |       if (groupData) { | ||||||
|  |         groupData.initiative = initValue | ||||||
|  |       } | ||||||
|  |       updates.push({ _id: id, initiative: initValue }); | ||||||
|  |       if (initValue > maxInit.value) { | ||||||
|  |         maxInit.value = initValue; | ||||||
|  |         maxInit.cId = id; | ||||||
|  |       } | ||||||
|  |  | ||||||
|  |       if (showMessage) { | ||||||
|  |         // Determine the roll mode | ||||||
|  |         if ((c.token.hidden || c.hidden) | ||||||
|  |           && (rollMode === "roll")) { | ||||||
|  |           rollMode = "gmroll"; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         // Construct chat message data | ||||||
|  |         const messageData = foundry.utils.mergeObject({ | ||||||
|  |           speaker: { | ||||||
|  |             scene: canvas.scene._id, | ||||||
|  |             actor: c.actor?.id || null, | ||||||
|  |             token: c.token.id, | ||||||
|  |             alias: c.token.name | ||||||
|  |           }, | ||||||
|  |           flavor: game.i18n.format('ACKS.roll.individualInit', { | ||||||
|  |             name: c.token.name, | ||||||
|  |           }), | ||||||
|  |         }, {}); | ||||||
|  |  | ||||||
|  |         const chatData = await roll.toMessage(messageData, { | ||||||
|  |           rollMode, | ||||||
|  |           create: false, | ||||||
|  |         }); | ||||||
|  |         if (messages.length > 0) { | ||||||
|  |           chatData.sound = null; | ||||||
|  |         } | ||||||
|  |         messages.push(chatData); | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     await CONFIG.ChatMessage.documentClass.create(messages); | ||||||
|  |     this.pools = AcksCombat.getCombatantsPool(); | ||||||
|  |     await this.processOutNumbering(); | ||||||
|  |  | ||||||
|  |     await this.setFlag("acks", "lock-turns", false); | ||||||
|  |     await this.updateEmbeddedDocuments("Combatant", updates); | ||||||
|  |  | ||||||
|  |     setTimeout(function () { | ||||||
|  |       const updateData = { turn: 0 }; | ||||||
|  |       game.combat.update(updateData); | ||||||
|  |     }, 200); | ||||||
|  |  | ||||||
|  |     return this; | ||||||
|  |  | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   async startCombat() { | ||||||
|  |     console.log("Start Combat 1 !") | ||||||
|  |     // Send chat message to all players to roll for initiative | ||||||
|  |     ChatMessage.create({ | ||||||
|  |       user: game.user.id, | ||||||
|  |       content: await renderTemplate(`systems/fvtt-lethal-fantasy/templates/chat-ask-initiative.hbs`, { | ||||||
|  |         title: "Initiative roll requested", | ||||||
|  |         text: text, | ||||||
|  |         rollType: type, | ||||||
|  |       }), | ||||||
|  |       flags: { "fvtt-lethal-fantasy": { msg: "request-initiative-roll", content: {} } }, | ||||||
|  |     }) | ||||||
|  |     ChatMessage.create({ content: message, type: CONST.CHAT_MESSAGE_TYPES.GAME }); | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   async nextTurn() { | ||||||
|  |     console.log("NEXT TURN"); | ||||||
|  |  | ||||||
|  |     let turn = this.turn ?? -1; | ||||||
|  |     let skipDefeated = this.settings.skipDefeated; | ||||||
|  |  | ||||||
|  |     // Determine the next turn number | ||||||
|  |     let next = null; | ||||||
|  |     for (let [i, t] of this.turns.entries()) { | ||||||
|  |       console.log("Turn", t); | ||||||
|  |       if (i <= turn) continue; | ||||||
|  |       if (skipDefeated && t.isDefeated) continue; | ||||||
|  |       next = i; | ||||||
|  |       break; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     // Maybe advance to the next round | ||||||
|  |     let round = this.round; | ||||||
|  |     if ((this.round === 0) || (next === null) || (next >= this.turns.length)) { | ||||||
|  |       return this.nextRound(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     // Update the document, passing data through a hook first | ||||||
|  |     const updateData = { round, turn: next }; | ||||||
|  |     const updateOptions = { advanceTime: CONFIG.time.turnTime, direction: 1 }; | ||||||
|  |     Hooks.callAll("combatTurn", this, updateData, updateOptions); | ||||||
|  |     return this.update(updateData, updateOptions); | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   async nextRound() { | ||||||
|  |     console.log('NEXT ROUND') | ||||||
|  |     this.turnsDone = false | ||||||
|  |  | ||||||
|  |     let turn = this.turn === null ? null : 0; // Preserve the fact that it's no-one's turn currently. | ||||||
|  |     console.log("ROUND", this.round, this.turns); | ||||||
|  |  | ||||||
|  |     let advanceTime = Math.max(this.turns.length - this.turn, 0) * CONFIG.time.turnTime; | ||||||
|  |     advanceTime += CONFIG.time.roundTime; | ||||||
|  |     let nextRound = this.round + 1; | ||||||
|  |  | ||||||
|  |     // Update the document, passing data through a hook first | ||||||
|  |     const updateData = { round: nextRound, turn }; | ||||||
|  |     const updateOptions = { advanceTime, direction: 1 }; | ||||||
|  |     Hooks.callAll("combatRound", this, updateData, updateOptions); | ||||||
|  |     return this.update(updateData, updateOptions); | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |   sortCombatantsLF(a, b) { | ||||||
|  |     return a.initiative - b.initiative; | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
| @@ -6,7 +6,7 @@ export default class LethalFantasyCharacterSheet extends LethalFantasyActorSheet | |||||||
|   static DEFAULT_OPTIONS = { |   static DEFAULT_OPTIONS = { | ||||||
|     classes: ["character"], |     classes: ["character"], | ||||||
|     position: { |     position: { | ||||||
|       width: 1150, |       width: 1080, | ||||||
|       height: 780, |       height: 780, | ||||||
|     }, |     }, | ||||||
|     window: { |     window: { | ||||||
| @@ -15,6 +15,7 @@ export default class LethalFantasyCharacterSheet extends LethalFantasyActorSheet | |||||||
|     actions: { |     actions: { | ||||||
|       createEquipment: LethalFantasyCharacterSheet.#onCreateEquipment, |       createEquipment: LethalFantasyCharacterSheet.#onCreateEquipment, | ||||||
|       rangedAttackDefense: LethalFantasyCharacterSheet.#onRangedAttackDefense, |       rangedAttackDefense: LethalFantasyCharacterSheet.#onRangedAttackDefense, | ||||||
|  |       rollInitiative: LethalFantasyCharacterSheet.#onRollInitiative, | ||||||
|       armorHitPointsPlus: LethalFantasyCharacterSheet.#onArmorHitPointsPlus, |       armorHitPointsPlus: LethalFantasyCharacterSheet.#onArmorHitPointsPlus, | ||||||
|       armorHitPointsMinus: LethalFantasyCharacterSheet.#onArmorHitPointsMinus, |       armorHitPointsMinus: LethalFantasyCharacterSheet.#onArmorHitPointsMinus, | ||||||
|     }, |     }, | ||||||
| @@ -149,10 +150,30 @@ export default class LethalFantasyCharacterSheet extends LethalFantasyActorSheet | |||||||
|  |  | ||||||
|   static async #onRangedAttackDefense(event, target) { |   static async #onRangedAttackDefense(event, target) { | ||||||
|     const hasTarget = false |     const hasTarget = false | ||||||
|  |  | ||||||
|     let roll = await LethalFantasyRoll.promptRangedDefense({ |     let roll = await LethalFantasyRoll.promptRangedDefense({ | ||||||
|       actorId: this.actor.id, |       actorId: this.actor.id, | ||||||
|       actorName: this.actor.name, |       actorName: this.actor.name, | ||||||
|       actorImage: this.actor.img |       actorImage: this.actor.img, | ||||||
|  |     }) | ||||||
|  |     if (!roll) return null | ||||||
|  |  | ||||||
|  |     await roll.toMessage({}, { rollMode: roll.options.rollMode }) | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   static async #onRollInitiative(event, target) { | ||||||
|  |     const hasTarget = false | ||||||
|  |     let actorClass = this.actor.system.biodata.class; | ||||||
|  |      | ||||||
|  |     let wisDef = SYSTEM.CHARACTERISTICS_TABLES.wis.find((c) => c.value === this.actor.system.characteristics.wis.value) | ||||||
|  |     let maxInit = Number(wisDef.init_cap) || 1000     | ||||||
|  |  | ||||||
|  |     let roll = await LethalFantasyRoll.promptInitiative({ | ||||||
|  |       actorId: this.actor.id, | ||||||
|  |       actorName: this.actor.name, | ||||||
|  |       actorImage: this.actor.img, | ||||||
|  |       actorClass, | ||||||
|  |       maxInit, | ||||||
|     }) |     }) | ||||||
|     if (!roll) return null |     if (!roll) return null | ||||||
|  |  | ||||||
|   | |||||||
| @@ -85,6 +85,61 @@ export const ATTACKER_AIM_CHOICES = { | |||||||
|   "focused": {label: "Focused (-8)", value: "-8"} |   "focused": {label: "Focused (-8)", value: "-8"} | ||||||
| } | } | ||||||
|  |  | ||||||
|  | export const INITIATIVE_DICE_CHOICES_PER_CLASS = { | ||||||
|  |   "untrained": [ | ||||||
|  |     { "name": "Asleep or totally distracted (2D12)", "value": "2D12" }, | ||||||
|  |     { "name": "Awake but unsuspecting (2D8)", "value": "2D8" }, | ||||||
|  |     { "name": "Declared Ready on Alert (2D6)", "value": "2D6" }, | ||||||
|  |     { "name": "Aware of the enemy, can hear them but not see (2D4)", "value": "2D4" }, | ||||||
|  |     { "name": "Aware and know exactly where the enemy is (2D3)", "value": "2D3" } | ||||||
|  |   ], | ||||||
|  |   "fighter": [  | ||||||
|  |     { "name": "Asleep or totally distracted (1D12)", "value": "1D12" }, | ||||||
|  |     { "name": "Awake but unsuspecting (1D8)", "value": "1D8" }, | ||||||
|  |     { "name": "Declared Ready on Alert (1D6)", "value": "1D6" }, | ||||||
|  |     { "name": "Aware of the enemy, can hear them but not see (1D4)", "value": "1D4" }, | ||||||
|  |     { "name": "Aware and know exactly where the enemy is (1D3)", "value": "1D3" } | ||||||
|  |   ], | ||||||
|  |   "rogue": [ | ||||||
|  |     { "name": "Asleep or totally distracted (1D10)", "value": "1D10" }, | ||||||
|  |     { "name": "Awake but unsuspecting (1D8)", "value": "1D8" }, | ||||||
|  |     { "name": "Declared Ready on Alert (1D6)", "value": "1D6" }, | ||||||
|  |     { "name": "Aware of the enemy, can hear them but not see (1D3)", "value": "1D3" }, | ||||||
|  |     { "name": "Aware and know exactly where the enemy is (1D2)", "value": "1D2" } | ||||||
|  |   ], | ||||||
|  |   "ranger": [ | ||||||
|  |     { "name": "Asleep or totally distracted (1D10)", "value": "1D10" }, | ||||||
|  |     { "name": "Awake but unsuspecting (1D8)", "value": "1D8" }, | ||||||
|  |     { "name": "Declared Ready on Alert (1D6)", "value": "1D6" }, | ||||||
|  |     { "name": "Aware of the enemy, can hear them but not see (1D4)", "value": "1D4" }, | ||||||
|  |     { "name": "Aware and know exactly where the enemy is (1D3)", "value": "1D3"} | ||||||
|  |   ], | ||||||
|  |   "cleric": [ | ||||||
|  |     { "name": "Asleep or totally distracted (1D2)", "value": "1D12" }, | ||||||
|  |     { "name": "Awake but unsuspecting (1D10)", "value": "1D10" }, | ||||||
|  |     { "name": "Declared Ready on Alert (1D8)", "value": "1D8" }, | ||||||
|  |     { "name": "Aware of the enemy, can hear them but not see (1D6)", "value": "1D6" }, | ||||||
|  |     { "name": "Aware and know exactly where the enemy is (1D4)", "value": "1D4" } | ||||||
|  |   ], | ||||||
|  |   "magicuser": [ | ||||||
|  |     { "name": "Sleeping to recover Aether Points (2D20)", "value": "2D20" }, | ||||||
|  |     { "name": "Asleep or totally distracted (1D20)", "value": "1D20" }, | ||||||
|  |     { "name": "Awake but unsuspecting (1D12)", "value": "1D12" }, | ||||||
|  |     { "name": "Declared Ready on Alert (1D10)", "value": "1D10" }, | ||||||
|  |     { "name": "Aware of the enemy, can hear them but not see (1D8)", "value": "1D8" }, | ||||||
|  |     { "name": "Aware and know exactly where the enemy is (1D6)", "value": "1D6" } | ||||||
|  |   ] | ||||||
|  | } | ||||||
|  |  | ||||||
|  | export const CHAR_CLASSES = { | ||||||
|  |   "untrained": "Untrained", | ||||||
|  |   "fighter": "Fighter", | ||||||
|  |   "rogue": "Rogue", | ||||||
|  |   "ranger": "Ranger", | ||||||
|  |   "cleric": "Cleric", | ||||||
|  |   "magicuser": "Magic User"   | ||||||
|  | } | ||||||
|  |  | ||||||
| export const DICE_VALUES = { | export const DICE_VALUES = { | ||||||
|   "d3": "D3",   |   "d3": "D3",   | ||||||
|   "d4": "D4", |   "d4": "D4", | ||||||
| @@ -189,6 +244,8 @@ export const SYSTEM = { | |||||||
|   CHARACTERISTIC_ATTACK, |   CHARACTERISTIC_ATTACK, | ||||||
|   CHARACTERISTIC_DEFENSE, |   CHARACTERISTIC_DEFENSE, | ||||||
|   CHARACTERISTIC_DAMAGE, |   CHARACTERISTIC_DAMAGE, | ||||||
|  |   INITIATIVE_DICE_CHOICES_PER_CLASS, | ||||||
|  |   CHAR_CLASSES, | ||||||
|   MONEY, |   MONEY, | ||||||
|   ASCII, |   ASCII, | ||||||
|   CHOICE_MODIFIERS, |   CHOICE_MODIFIERS, | ||||||
|   | |||||||
| @@ -1,6 +1,7 @@ | |||||||
| import LethalFantasyRoll from "./roll.mjs" | import LethalFantasyRoll from "./roll.mjs" | ||||||
|  |  | ||||||
| export default class LethalFantasyChatMessage extends ChatMessage { | export default class LethalFantasyChatMessage extends ChatMessage { | ||||||
|  |    | ||||||
|   async _renderRollContent(messageData) { |   async _renderRollContent(messageData) { | ||||||
|     const data = messageData.message |     const data = messageData.message | ||||||
|     if (this.rolls[0] instanceof LethalFantasyRoll) { |     if (this.rolls[0] instanceof LethalFantasyRoll) { | ||||||
|   | |||||||
| @@ -131,6 +131,7 @@ export default class LethalFantasyRoll extends Roll { | |||||||
|         maxValue = Number(options.rollTarget.value.match(/\d+/)[0]) |         maxValue = Number(options.rollTarget.value.match(/\d+/)[0]) | ||||||
|         hasModifier = false |         hasModifier = false | ||||||
|         hasChangeDice = true |         hasChangeDice = true | ||||||
|  |         hasFavor = true | ||||||
|       } else { |       } else { | ||||||
|         dice = "1D20" |         dice = "1D20" | ||||||
|         maxValue = 20 |         maxValue = 20 | ||||||
| @@ -302,7 +303,7 @@ export default class LethalFantasyRoll extends Roll { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     // Specific pain/poison/contagion case |     // Specific pain/poison/contagion case | ||||||
|     if (options.rollType === "save" && options.rollTarget.rollKey.includes(["pain", "poison", "contagion"])) { |     if (options.rollType === "save" && (options.rollTarget.rollKey === "pain" || options.rollTarget.rollKey === "poison" || options.rollTarget.rollKey === "contagion")) { | ||||||
|       hasD30 = false |       hasD30 = false | ||||||
|     } |     } | ||||||
|      |      | ||||||
| @@ -428,8 +429,60 @@ export default class LethalFantasyRoll extends Roll { | |||||||
|     return rollBase |     return rollBase | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  |   static async promptInitiative(options = {}) { | ||||||
|  |     const rollModes = Object.fromEntries(Object.entries(CONFIG.Dice.rollModes).map(([key, value]) => [key, game.i18n.localize(value)])) | ||||||
|  |     const fieldRollMode = new foundry.data.fields.StringField({ | ||||||
|  |       choices: rollModes, | ||||||
|  |       blank: false, | ||||||
|  |       default: "public", | ||||||
|  |     }) | ||||||
|  |  | ||||||
|  |     if ( SYSTEM.INITIATIVE_DICE_CHOICES_PER_CLASS[options.actorClass] ) { | ||||||
|  |       options.initiativeDiceChoice = SYSTEM.INITIATIVE_DICE_CHOICES_PER_CLASS[options.actorClass] | ||||||
|  |     } else  { | ||||||
|  |       options.initiativeDiceChoice = SYSTEM.INITIATIVE_DICE_CHOICES_PER_CLASS["untrained"] | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     let dialogContext = { | ||||||
|  |       actorClass: options.actorClass, | ||||||
|  |       initiativeDiceChoice: options.initiativeDiceChoice, | ||||||
|  |       initiativeDice: "1D20", | ||||||
|  |       maxInit: options.maxInit, | ||||||
|  |       fieldRollMode, | ||||||
|  |       rollModes | ||||||
|  |     } | ||||||
|  |     console.log("CTX", dialogContext) | ||||||
|  |      | ||||||
|  |     const content = await renderTemplate("systems/fvtt-lethal-fantasy/templates/roll-initiative-dialog.hbs", dialogContext) | ||||||
|  |  | ||||||
|  |     const label = game.i18n.localize("LETHALFANTASY.Label.initiative") | ||||||
|  |     const rollContext = await foundry.applications.api.DialogV2.wait({ | ||||||
|  |       window: { title: "Initiative Roll" }, | ||||||
|  |       classes: ["lethalfantasy"], | ||||||
|  |       content, | ||||||
|  |       buttons: [ | ||||||
|  |         { | ||||||
|  |           label: label, | ||||||
|  |           callback: (event, button, dialog) => { | ||||||
|  |             const output = Array.from(button.form.elements).reduce((obj, input) => { | ||||||
|  |               if (input.name) obj[input.name] = input.value | ||||||
|  |               return obj | ||||||
|  |             }, {}) | ||||||
|  |             return output | ||||||
|  |           }, | ||||||
|  |         }, | ||||||
|  |       ], | ||||||
|  |       rejectClose: false // Click on Close button will not launch an error | ||||||
|  |     }) | ||||||
|  |  | ||||||
|  |     let initRoll = new Roll(`min(${rollContext.initiativeDice}, ${options.maxInit})`, options.data, rollContext) | ||||||
|  |     await initRoll.evaluate() | ||||||
|  |     initRoll.toMessage( {flavor: `Initiative for ${options.actorName}`}, {rollMode: rollContext.visibility} ) | ||||||
|  |   } | ||||||
|  |  | ||||||
|   static async promptRangedDefense(rollTarget) { |   static async promptRangedDefense(rollTarget) { | ||||||
|  |  | ||||||
|  |      | ||||||
|     const rollModes = Object.fromEntries(Object.entries(CONFIG.Dice.rollModes).map(([key, value]) => [key, game.i18n.localize(value)])) |     const rollModes = Object.fromEntries(Object.entries(CONFIG.Dice.rollModes).map(([key, value]) => [key, game.i18n.localize(value)])) | ||||||
|     const fieldRollMode = new foundry.data.fields.StringField({ |     const fieldRollMode = new foundry.data.fields.StringField({ | ||||||
|       choices: rollModes, |       choices: rollModes, | ||||||
|   | |||||||
| @@ -65,8 +65,8 @@ export default class LethalFantasyCharacter extends foundry.abstract.TypeDataMod | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     schema.hp = new fields.SchemaField({ |     schema.hp = new fields.SchemaField({ | ||||||
|       value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), |       value: new fields.NumberField({ ...requiredInteger, initial: 1, min: 0 }), | ||||||
|       max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), |       max: new fields.NumberField({ ...requiredInteger, initial: 1, min: 0 }), | ||||||
|       painDamage: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), |       painDamage: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), | ||||||
|       wounds: new fields.ArrayField(new fields.SchemaField(woundFieldSchema ) , { initial: [{description:"", value:0, duration:0},{description:"", value:0, duration:0}, |       wounds: new fields.ArrayField(new fields.SchemaField(woundFieldSchema ) , { initial: [{description:"", value:0, duration:0},{description:"", value:0, duration:0}, | ||||||
|         {description:"", value:0, duration:0},{description:"", value:0, duration:0},{description:"", value:0, duration:0},{description:"", value:0, duration:0}, |         {description:"", value:0, duration:0},{description:"", value:0, duration:0},{description:"", value:0, duration:0},{description:"", value:0, duration:0}, | ||||||
| @@ -93,8 +93,13 @@ export default class LethalFantasyCharacter extends foundry.abstract.TypeDataMod | |||||||
|       run: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), |       run: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), | ||||||
|       armorAdjust: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), |       armorAdjust: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), | ||||||
|     }) |     }) | ||||||
|  |     schema.jump = new fields.SchemaField({ | ||||||
|  |       broad: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), | ||||||
|  |       running: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), | ||||||
|  |       vertical: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), | ||||||
|  |     }) | ||||||
|     schema.biodata = new fields.SchemaField({ |     schema.biodata = new fields.SchemaField({ | ||||||
|       class: new fields.StringField({ required: true, nullable: false, initial: "" }), |       class: new fields.StringField({required: true, initial: "untrained", choices: SYSTEM.CHAR_CLASSES}), | ||||||
|       level: new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 }), |       level: new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 }), | ||||||
|       mortal: new fields.StringField({ required: true, nullable: false, initial: "" }), |       mortal: new fields.StringField({ required: true, nullable: false, initial: "" }), | ||||||
|       alignment: new fields.StringField({ required: true, nullable: false, initial: "" }), |       alignment: new fields.StringField({ required: true, nullable: false, initial: "" }), | ||||||
|   | |||||||
| @@ -1 +1 @@ | |||||||
| MANIFEST-000010 | MANIFEST-000026 | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| 2025/01/09-22:31:28.606227 7f0abbfff6c0 Recovering log #8 | 2025/01/12-15:30:20.575853 7f0abaffd6c0 Recovering log #24 | ||||||
| 2025/01/09-22:31:28.615890 7f0abbfff6c0 Delete type=3 #6 | 2025/01/12-15:30:20.585410 7f0abaffd6c0 Delete type=3 #22 | ||||||
| 2025/01/09-22:31:28.615953 7f0abbfff6c0 Delete type=0 #8 | 2025/01/12-15:30:20.585495 7f0abaffd6c0 Delete type=0 #24 | ||||||
| 2025/01/09-22:43:31.203725 7f0ab9bff6c0 Level-0 table #13: started | 2025/01/12-15:39:07.053127 7f0ab9bff6c0 Level-0 table #29: started | ||||||
| 2025/01/09-22:43:31.203752 7f0ab9bff6c0 Level-0 table #13: 0 bytes OK | 2025/01/12-15:39:07.053167 7f0ab9bff6c0 Level-0 table #29: 0 bytes OK | ||||||
| 2025/01/09-22:43:31.296594 7f0ab9bff6c0 Delete type=0 #11 | 2025/01/12-15:39:07.059547 7f0ab9bff6c0 Delete type=0 #27 | ||||||
| 2025/01/09-22:43:31.296887 7f0ab9bff6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end) | 2025/01/12-15:39:07.066140 7f0ab9bff6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end) | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| 2025/01/09-22:06:01.230631 7f0abbfff6c0 Recovering log #4 | 2025/01/12-10:35:21.828083 7f0abaffd6c0 Recovering log #20 | ||||||
| 2025/01/09-22:06:01.239976 7f0abbfff6c0 Delete type=3 #2 | 2025/01/12-10:35:21.838218 7f0abaffd6c0 Delete type=3 #18 | ||||||
| 2025/01/09-22:06:01.240081 7f0abbfff6c0 Delete type=0 #4 | 2025/01/12-10:35:21.838276 7f0abaffd6c0 Delete type=0 #20 | ||||||
| 2025/01/09-22:26:22.511134 7f0ab9bff6c0 Level-0 table #9: started | 2025/01/12-10:41:38.476442 7f0ab9bff6c0 Level-0 table #25: started | ||||||
| 2025/01/09-22:26:22.511166 7f0ab9bff6c0 Level-0 table #9: 0 bytes OK | 2025/01/12-10:41:38.476474 7f0ab9bff6c0 Level-0 table #25: 0 bytes OK | ||||||
| 2025/01/09-22:26:22.540103 7f0ab9bff6c0 Delete type=0 #7 | 2025/01/12-10:41:38.511873 7f0ab9bff6c0 Delete type=0 #23 | ||||||
| 2025/01/09-22:26:22.609664 7f0ab9bff6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end) | 2025/01/12-10:41:38.546259 7f0ab9bff6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end) | ||||||
|   | |||||||
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								packs-system/lf-equipment/MANIFEST-000026
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								packs-system/lf-equipment/MANIFEST-000026
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| @@ -1 +1 @@ | |||||||
| MANIFEST-000010 | MANIFEST-000026 | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| 2025/01/09-22:31:28.618153 7f0abb7fe6c0 Recovering log #8 | 2025/01/12-15:30:20.587864 7f0abbfff6c0 Recovering log #24 | ||||||
| 2025/01/09-22:31:28.629092 7f0abb7fe6c0 Delete type=3 #6 | 2025/01/12-15:30:20.598665 7f0abbfff6c0 Delete type=3 #22 | ||||||
| 2025/01/09-22:31:28.629179 7f0abb7fe6c0 Delete type=0 #8 | 2025/01/12-15:30:20.598718 7f0abbfff6c0 Delete type=0 #24 | ||||||
| 2025/01/09-22:43:31.034575 7f0ab9bff6c0 Level-0 table #13: started | 2025/01/12-15:39:07.046715 7f0ab9bff6c0 Level-0 table #29: started | ||||||
| 2025/01/09-22:43:31.034610 7f0ab9bff6c0 Level-0 table #13: 0 bytes OK | 2025/01/12-15:39:07.046747 7f0ab9bff6c0 Level-0 table #29: 0 bytes OK | ||||||
| 2025/01/09-22:43:31.125906 7f0ab9bff6c0 Delete type=0 #11 | 2025/01/12-15:39:07.052973 7f0ab9bff6c0 Delete type=0 #27 | ||||||
| 2025/01/09-22:43:31.296849 7f0ab9bff6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end) | 2025/01/12-15:39:07.066129 7f0ab9bff6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end) | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| 2025/01/09-22:06:01.242474 7f0abb7fe6c0 Recovering log #4 | 2025/01/12-10:35:21.840236 7f0abb7fe6c0 Recovering log #20 | ||||||
| 2025/01/09-22:06:01.252331 7f0abb7fe6c0 Delete type=3 #2 | 2025/01/12-10:35:21.850711 7f0abb7fe6c0 Delete type=3 #18 | ||||||
| 2025/01/09-22:06:01.252401 7f0abb7fe6c0 Delete type=0 #4 | 2025/01/12-10:35:21.850769 7f0abb7fe6c0 Delete type=0 #20 | ||||||
| 2025/01/09-22:26:22.580727 7f0ab9bff6c0 Level-0 table #9: started | 2025/01/12-10:41:38.512028 7f0ab9bff6c0 Level-0 table #25: started | ||||||
| 2025/01/09-22:26:22.580760 7f0ab9bff6c0 Level-0 table #9: 0 bytes OK | 2025/01/12-10:41:38.512054 7f0ab9bff6c0 Level-0 table #25: 0 bytes OK | ||||||
| 2025/01/09-22:26:22.609536 7f0ab9bff6c0 Delete type=0 #7 | 2025/01/12-10:41:38.546064 7f0ab9bff6c0 Delete type=0 #23 | ||||||
| 2025/01/09-22:26:22.609684 7f0ab9bff6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end) | 2025/01/12-10:41:38.546272 7f0ab9bff6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end) | ||||||
|   | |||||||
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								packs-system/lf-gifts/MANIFEST-000026
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								packs-system/lf-gifts/MANIFEST-000026
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| @@ -1 +1 @@ | |||||||
| MANIFEST-000010 | MANIFEST-000026 | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| 2025/01/09-22:31:28.593009 7f0aba7fc6c0 Recovering log #8 | 2025/01/12-15:30:20.563784 7f0abb7fe6c0 Recovering log #24 | ||||||
| 2025/01/09-22:31:28.603392 7f0aba7fc6c0 Delete type=3 #6 | 2025/01/12-15:30:20.573785 7f0abb7fe6c0 Delete type=3 #22 | ||||||
| 2025/01/09-22:31:28.603450 7f0aba7fc6c0 Delete type=0 #8 | 2025/01/12-15:30:20.573842 7f0abb7fe6c0 Delete type=0 #24 | ||||||
| 2025/01/09-22:43:30.943627 7f0ab9bff6c0 Level-0 table #13: started | 2025/01/12-15:39:07.059698 7f0ab9bff6c0 Level-0 table #29: started | ||||||
| 2025/01/09-22:43:30.943704 7f0ab9bff6c0 Level-0 table #13: 0 bytes OK | 2025/01/12-15:39:07.059727 7f0ab9bff6c0 Level-0 table #29: 0 bytes OK | ||||||
| 2025/01/09-22:43:31.034381 7f0ab9bff6c0 Delete type=0 #11 | 2025/01/12-15:39:07.066010 7f0ab9bff6c0 Delete type=0 #27 | ||||||
| 2025/01/09-22:43:31.296823 7f0ab9bff6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end) | 2025/01/12-15:39:07.066153 7f0ab9bff6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end) | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| 2025/01/09-22:06:01.218155 7f0abaffd6c0 Recovering log #4 | 2025/01/12-10:35:21.813613 7f0abbfff6c0 Recovering log #20 | ||||||
| 2025/01/09-22:06:01.228492 7f0abaffd6c0 Delete type=3 #2 | 2025/01/12-10:35:21.823625 7f0abbfff6c0 Delete type=3 #18 | ||||||
| 2025/01/09-22:06:01.228577 7f0abaffd6c0 Delete type=0 #4 | 2025/01/12-10:35:21.823728 7f0abbfff6c0 Delete type=0 #20 | ||||||
| 2025/01/09-22:26:22.540188 7f0ab9bff6c0 Level-0 table #9: started | 2025/01/12-10:41:38.447331 7f0ab9bff6c0 Level-0 table #25: started | ||||||
| 2025/01/09-22:26:22.540210 7f0ab9bff6c0 Level-0 table #9: 0 bytes OK | 2025/01/12-10:41:38.447362 7f0ab9bff6c0 Level-0 table #25: 0 bytes OK | ||||||
| 2025/01/09-22:26:22.580587 7f0ab9bff6c0 Delete type=0 #7 | 2025/01/12-10:41:38.476202 7f0ab9bff6c0 Delete type=0 #23 | ||||||
| 2025/01/09-22:26:22.609674 7f0ab9bff6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end) | 2025/01/12-10:41:38.546247 7f0ab9bff6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end) | ||||||
|   | |||||||
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								packs-system/lf-skills/MANIFEST-000026
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								packs-system/lf-skills/MANIFEST-000026
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| @@ -1 +1 @@ | |||||||
| MANIFEST-000010 | MANIFEST-000026 | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| 2025/01/09-22:31:28.631702 7f0abaffd6c0 Recovering log #8 | 2025/01/12-15:30:20.600324 7f0aba7fc6c0 Recovering log #24 | ||||||
| 2025/01/09-22:31:28.641622 7f0abaffd6c0 Delete type=3 #6 | 2025/01/12-15:30:20.611083 7f0aba7fc6c0 Delete type=3 #22 | ||||||
| 2025/01/09-22:31:28.641694 7f0abaffd6c0 Delete type=0 #8 | 2025/01/12-15:30:20.611177 7f0aba7fc6c0 Delete type=0 #24 | ||||||
| 2025/01/09-22:43:31.126046 7f0ab9bff6c0 Level-0 table #13: started | 2025/01/12-15:39:07.039586 7f0ab9bff6c0 Level-0 table #29: started | ||||||
| 2025/01/09-22:43:31.126074 7f0ab9bff6c0 Level-0 table #13: 0 bytes OK | 2025/01/12-15:39:07.039637 7f0ab9bff6c0 Level-0 table #29: 0 bytes OK | ||||||
| 2025/01/09-22:43:31.203593 7f0ab9bff6c0 Delete type=0 #11 | 2025/01/12-15:39:07.046575 7f0ab9bff6c0 Delete type=0 #27 | ||||||
| 2025/01/09-22:43:31.296871 7f0ab9bff6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end) | 2025/01/12-15:39:07.066113 7f0ab9bff6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end) | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| 2025/01/09-22:06:01.254140 7f0aba7fc6c0 Recovering log #4 | 2025/01/12-10:35:21.852854 7f0aba7fc6c0 Recovering log #20 | ||||||
| 2025/01/09-22:06:01.264214 7f0aba7fc6c0 Delete type=3 #2 | 2025/01/12-10:35:21.862623 7f0aba7fc6c0 Delete type=3 #18 | ||||||
| 2025/01/09-22:06:01.264273 7f0aba7fc6c0 Delete type=0 #4 | 2025/01/12-10:35:21.862679 7f0aba7fc6c0 Delete type=0 #20 | ||||||
| 2025/01/09-22:26:22.480492 7f0ab9bff6c0 Level-0 table #9: started | 2025/01/12-10:41:38.411505 7f0ab9bff6c0 Level-0 table #25: started | ||||||
| 2025/01/09-22:26:22.480548 7f0ab9bff6c0 Level-0 table #9: 0 bytes OK | 2025/01/12-10:41:38.411560 7f0ab9bff6c0 Level-0 table #25: 0 bytes OK | ||||||
| 2025/01/09-22:26:22.511014 7f0ab9bff6c0 Delete type=0 #7 | 2025/01/12-10:41:38.447140 7f0ab9bff6c0 Delete type=0 #23 | ||||||
| 2025/01/09-22:26:22.609652 7f0ab9bff6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end) | 2025/01/12-10:41:38.546228 7f0ab9bff6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end) | ||||||
|   | |||||||
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								packs-system/lf-vulnerabilities/MANIFEST-000026
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								packs-system/lf-vulnerabilities/MANIFEST-000026
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| @@ -6,14 +6,15 @@ | |||||||
|  |  | ||||||
| .character-main { | .character-main { | ||||||
|   display: flex; |   display: flex; | ||||||
|    |  | ||||||
|   .character-pc { |   .character-pc { | ||||||
|     display: flex; |     display: flex; | ||||||
|     gap: 10px; |     gap: 10px; | ||||||
|     flex: 1; |     flex: 1; | ||||||
|  |  | ||||||
|     .character-left { |     .character-left { | ||||||
|       min-width: 180px; |       min-width: 220px; | ||||||
|  |       max-width: 220px; | ||||||
|       display: flex; |       display: flex; | ||||||
|       flex-direction: column; |       flex-direction: column; | ||||||
|  |  | ||||||
| @@ -21,23 +22,39 @@ | |||||||
|         display: flex; |         display: flex; | ||||||
|         justify-content: center; |         justify-content: center; | ||||||
|         align-items: center; |         align-items: center; | ||||||
|         padding-bottom: 20px; |         padding-bottom: 8px; | ||||||
|         .character-img { |         .character-img { | ||||||
|           height: 140px; |           height: 140px; | ||||||
|  |           width: 140px; | ||||||
|           width: auto; |           width: auto; | ||||||
|           border: none; |           border: none; | ||||||
|         } |         } | ||||||
|       } |       } | ||||||
|  |       .character-hp { | ||||||
|       .character-hp-edit { |         display: flex; | ||||||
|         input { |         gap: 2px; | ||||||
|  |         align-items: center; | ||||||
|  |         .character-hp-value { | ||||||
|  |           .form-fields input { | ||||||
|  |             flex: none; | ||||||
|  |             min-width: 3rem; | ||||||
|  |             max-width: 3rem; | ||||||
|  |             margin-left: 10px; | ||||||
|  |             font-size: calc(var(--font-size-standard) * 1.4); | ||||||
|  |           } | ||||||
|  |         } | ||||||
|  |         .character-hp-max { | ||||||
|  |           clear: both; | ||||||
|           display: flex; |           display: flex; | ||||||
|           width: 60px; |           flex-direction: row; | ||||||
|           font-size: calc(var(--font-size-standard) * 1.4); |           flex-wrap: wrap; | ||||||
|  |           margin: 3px 0; | ||||||
|           align-items: center; |           align-items: center; | ||||||
|           justify-content: center; |           input { | ||||||
|           padding: 0 5px 0 5px; |             width: 50px; | ||||||
|           text-align: center; |             text-align: center; | ||||||
|  |             font-size: calc(var(--font-size-standard) * 1.4); | ||||||
|  |           } | ||||||
|         } |         } | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
| @@ -45,7 +62,7 @@ | |||||||
|     .character-right { |     .character-right { | ||||||
|       display: flex; |       display: flex; | ||||||
|       flex-direction: column; |       flex-direction: column; | ||||||
|       gap: 5px; |       gap: 4px; | ||||||
|  |  | ||||||
|       .character-name { |       .character-name { | ||||||
|         display: flex; |         display: flex; | ||||||
| @@ -53,63 +70,21 @@ | |||||||
|           width: 400px; |           width: 400px; | ||||||
|         } |         } | ||||||
|       } |       } | ||||||
|  |  | ||||||
|       .character-infos { |  | ||||||
|         display: flex; |  | ||||||
|         flex-direction: column; |  | ||||||
|         gap: 10px; |  | ||||||
|  |  | ||||||
|         label { |  | ||||||
|           min-width: 120px; |  | ||||||
|         } |  | ||||||
|         .character-hp { |  | ||||||
|           display: flex; |  | ||||||
|           gap: 2px; |  | ||||||
|           align-items: center; |  | ||||||
|           .character-hp-value { |  | ||||||
|             .form-fields input { |  | ||||||
|               flex: none; |  | ||||||
|               width: 50px; |  | ||||||
|               margin-left: 10px; |  | ||||||
|               font-size: calc(var(--font-size-standard) * 1.4); |  | ||||||
|             } |  | ||||||
|           } |  | ||||||
|           .character-hp-max { |  | ||||||
|             clear: both; |  | ||||||
|             display: flex; |  | ||||||
|             flex-direction: row; |  | ||||||
|             flex-wrap: wrap; |  | ||||||
|             margin: 3px 0; |  | ||||||
|             align-items: center; |  | ||||||
|             input { |  | ||||||
|               width: 50px; |  | ||||||
|               text-align: center; |  | ||||||
|               font-size: calc(var(--font-size-standard) * 1.4); |  | ||||||
|             } |  | ||||||
|           } |  | ||||||
|           .hp-separator { |  | ||||||
|             font-size: calc(var(--font-size-standard) * 1.2); |  | ||||||
|             display: flex; |  | ||||||
|             align-items: center; |  | ||||||
|             justify-content: center; |  | ||||||
|           } |  | ||||||
|         } |  | ||||||
|       } |  | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   .character-pc-play { |   .character-pc-play { | ||||||
|     min-width: 500px; |     min-width: 400px; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   .character-pc-edit { |   .character-pc-edit { | ||||||
|     min-width: 650px; |     min-width: 400px; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   .character-characteristics { |   .character-characteristics { | ||||||
|     display: flex; |     display: flex; | ||||||
|     flex-direction: column; |     flex-direction: column; | ||||||
|     gap: 5px; |     gap: 4px; | ||||||
|     flex: 1; |     flex: 1; | ||||||
|  |  | ||||||
|     .character-characteristic { |     .character-characteristic { | ||||||
| @@ -122,10 +97,10 @@ | |||||||
|       } |       } | ||||||
|       .form-group { |       .form-group { | ||||||
|         flex: 1; |         flex: 1; | ||||||
|         padding-left: 5px; |         padding-left: 4px; | ||||||
|         .form-fields { |         .form-fields { | ||||||
|           flex: none; |           flex: none; | ||||||
|           width: 70px; |           width: 3rem; | ||||||
|         } |         } | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
| @@ -133,13 +108,13 @@ | |||||||
|   .character-challenges { |   .character-challenges { | ||||||
|     display: flex; |     display: flex; | ||||||
|     flex-direction: column; |     flex-direction: column; | ||||||
|     gap: 5px; |     gap: 4px; | ||||||
|     flex: 1; |     flex: 1; | ||||||
|  |  | ||||||
|     .character-challenge { |     .character-challenge { | ||||||
|       display: flex; |       display: flex; | ||||||
|       align-items: center; |       align-items: center; | ||||||
|       margin-right: 1rem; |       margin-right: 0.5rem; | ||||||
|       .rollable:hover, |       .rollable:hover, | ||||||
|       .rollable:focus { |       .rollable:focus { | ||||||
|         text-shadow: 0 0 8px var(--color-shadow-primary); |         text-shadow: 0 0 8px var(--color-shadow-primary); | ||||||
| @@ -152,7 +127,7 @@ | |||||||
|       } |       } | ||||||
|       .form-group { |       .form-group { | ||||||
|         flex: 1; |         flex: 1; | ||||||
|         padding-left: 5px; |         padding-left: 4px; | ||||||
|         .form-fields { |         .form-fields { | ||||||
|           flex: none; |           flex: none; | ||||||
|           width: 50px; |           width: 50px; | ||||||
| @@ -164,13 +139,13 @@ | |||||||
|   .character-movements { |   .character-movements { | ||||||
|     display: flex; |     display: flex; | ||||||
|     flex-direction: column; |     flex-direction: column; | ||||||
|     gap: 5px; |     gap: 4px; | ||||||
|     flex: 1; |     flex: 1; | ||||||
|  |  | ||||||
|     .character-movement { |     .character-movement { | ||||||
|       display: flex; |       display: flex; | ||||||
|       align-items: center; |       align-items: center; | ||||||
|       margin-right: 1rem; |       margin-right: 0.5rem; | ||||||
|       .rollable:hover, |       .rollable:hover, | ||||||
|       .rollable:focus { |       .rollable:focus { | ||||||
|         text-shadow: 0 0 8px var(--color-shadow-primary); |         text-shadow: 0 0 8px var(--color-shadow-primary); | ||||||
| @@ -183,7 +158,7 @@ | |||||||
|       } |       } | ||||||
|       .form-group { |       .form-group { | ||||||
|         flex: 1; |         flex: 1; | ||||||
|         padding-left: 5px; |         padding-left: 4px; | ||||||
|         .form-fields { |         .form-fields { | ||||||
|           flex: none; |           flex: none; | ||||||
|           width: 50px; |           width: 50px; | ||||||
| @@ -195,13 +170,13 @@ | |||||||
|   .character-saves { |   .character-saves { | ||||||
|     display: flex; |     display: flex; | ||||||
|     flex-direction: column; |     flex-direction: column; | ||||||
|     gap: 5px; |     gap: 4px; | ||||||
|     flex: 1; |     flex: 1; | ||||||
|  |  | ||||||
|     .character-save { |     .character-save { | ||||||
|       display: flex; |       display: flex; | ||||||
|       align-items: center; |       align-items: center; | ||||||
|       margin-right: 0.2rem; |       margin-right: 0.5rem; | ||||||
|       .rollable:hover, |       .rollable:hover, | ||||||
|       .rollable:focus { |       .rollable:focus { | ||||||
|         text-shadow: 0 0 8px var(--color-shadow-primary); |         text-shadow: 0 0 8px var(--color-shadow-primary); | ||||||
| @@ -211,17 +186,17 @@ | |||||||
|         flex: 0; |         flex: 0; | ||||||
|         min-width: 5rem; |         min-width: 5rem; | ||||||
|         max-width: 5rem; |         max-width: 5rem; | ||||||
|         margin-left: 0.7rem; |         margin-left: 0.5rem; | ||||||
|       }       |       } | ||||||
|       .name-pain { |       .name-pain { | ||||||
|         flex: 0; |         flex: 0; | ||||||
|         min-width: 3rem; |         min-width: 3rem; | ||||||
|         max-width: 3rem; |         max-width: 3rem; | ||||||
|         margin-left: 0.7rem; |         margin-left: 0.5rem; | ||||||
|       } |       } | ||||||
|       .form-group { |       .form-group { | ||||||
|         flex: 0; |         flex: 0; | ||||||
|         padding-left: 5px; |         padding-left: 4px; | ||||||
|         .form-fields { |         .form-fields { | ||||||
|           flex: none; |           flex: none; | ||||||
|           width: 50px; |           width: 50px; | ||||||
| @@ -237,78 +212,21 @@ | |||||||
|   .character-characteristic-edit { |   .character-characteristic-edit { | ||||||
|     min-width: 400px; |     min-width: 400px; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   .character-resources { |  | ||||||
|     display: flex; |  | ||||||
|     flex-direction: column; |  | ||||||
|     gap: 5px; |  | ||||||
|     flex: 1; |  | ||||||
|  |  | ||||||
|     .character-resource { |  | ||||||
|       display: flex; |  | ||||||
|       align-items: center; |  | ||||||
|       .rollable:hover, |  | ||||||
|       .rollable:focus { |  | ||||||
|         text-shadow: 0 0 8px var(--color-shadow-primary); |  | ||||||
|         cursor: |  | ||||||
|           pointer; |  | ||||||
|       } |  | ||||||
|       .form-group { |  | ||||||
|         flex: 1; |  | ||||||
|         padding-left: 5px; |  | ||||||
|         .form-fields { |  | ||||||
|           flex: none; |  | ||||||
|           width: 70px; |  | ||||||
|         } |  | ||||||
|       } |  | ||||||
|       .character-resource-edit { |  | ||||||
|         display: flex; |  | ||||||
|         align-items: center; |  | ||||||
|         gap: 10px; |  | ||||||
|         margin-left: 10px; |  | ||||||
|         input { |  | ||||||
|           display: flex; |  | ||||||
|           width: 70px; |  | ||||||
|           font-size: calc(var(--font-size-standard) * 1.4); |  | ||||||
|           align-items: center; |  | ||||||
|           justify-content: center; |  | ||||||
|           padding: 0 5px 0 5px; |  | ||||||
|         } |  | ||||||
|         input[type="number"] { |  | ||||||
|           text-align: center; |  | ||||||
|         } |  | ||||||
|         select { |  | ||||||
|           font-family: var(--font-secondary); |  | ||||||
|           font-size: calc(var(--font-size-standard) * 1.5); |  | ||||||
|           text-align: center; |  | ||||||
|           width: 75px; |  | ||||||
|         } |  | ||||||
|       } |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   .character-resources-play { |  | ||||||
|     min-width: 235px; |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   .character-resources-edit { |  | ||||||
|     min-width: 400px; |  | ||||||
|   } |  | ||||||
| } | } | ||||||
|  |  | ||||||
| .tab.character-biography { | .tab.character-biography { | ||||||
|   .biodata { |   .biodata { | ||||||
|     display: grid; |     display: grid; | ||||||
|     grid-template-columns: repeat(4, 1fr); |     grid-template-columns: repeat(4, 1fr); | ||||||
|     gap: 10px; |     gap: 4px; | ||||||
|     .biodata-elem { |     .biodata-elem { | ||||||
|       display: flex; |       display: flex; | ||||||
|       align-items: center; |       align-items: center; | ||||||
|       gap: 10px; |       gap: 4px; | ||||||
|       .item-img { |       .item-img { | ||||||
|         width: 32px; |         width: 24px; | ||||||
|         height: 32px; |         height: 24px; | ||||||
|         margin: 5px 0 0 0; |         margin: 4px 0 0 0; | ||||||
|       } |       } | ||||||
|       .name { |       .name { | ||||||
|         min-width: 8rem; |         min-width: 8rem; | ||||||
| @@ -331,21 +249,21 @@ | |||||||
|   grid-template-columns: 1fr; |   grid-template-columns: 1fr; | ||||||
|   legend { |   legend { | ||||||
|     a { |     a { | ||||||
|       font-size: calc(var(--font-size-standard) * 1.0); |       font-size: calc(var(--font-size-standard) * 1); | ||||||
|       padding-left: 5px; |       padding-left: 4px; | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
|   .skills { |   .skills { | ||||||
|     display: grid; |     display: grid; | ||||||
|     grid-template-columns: repeat(3, 1fr); |     grid-template-columns: repeat(3, 1fr); | ||||||
|     gap: 10px; |     gap: 4px; | ||||||
|     .skill { |     .skill { | ||||||
|       display: flex; |       display: flex; | ||||||
|       align-items: center; |       align-items: center; | ||||||
|       gap: 10px; |       gap: 4px; | ||||||
|       .item-img { |       .item-img { | ||||||
|         width: 32px; |         width: 24px; | ||||||
|         height: 32px; |         height: 24px; | ||||||
|       } |       } | ||||||
|       .name { |       .name { | ||||||
|         min-width: 12rem; |         min-width: 12rem; | ||||||
| @@ -355,14 +273,14 @@ | |||||||
|   .gifts { |   .gifts { | ||||||
|     display: grid; |     display: grid; | ||||||
|     grid-template-columns: repeat(3, 1fr); |     grid-template-columns: repeat(3, 1fr); | ||||||
|     gap: 10px; |     gap: 4px; | ||||||
|     .gift { |     .gift { | ||||||
|       display: flex; |       display: flex; | ||||||
|       align-items: center; |       align-items: center; | ||||||
|       gap: 10px; |       gap: 4px; | ||||||
|       .item-img { |       .item-img { | ||||||
|         width: 32px; |         width: 24px; | ||||||
|         height: 32px; |         height: 24px; | ||||||
|       } |       } | ||||||
|       .name { |       .name { | ||||||
|         min-width: 12rem; |         min-width: 12rem; | ||||||
| @@ -372,14 +290,14 @@ | |||||||
|   .vulnerabilities { |   .vulnerabilities { | ||||||
|     display: grid; |     display: grid; | ||||||
|     grid-template-columns: repeat(3, 1fr); |     grid-template-columns: repeat(3, 1fr); | ||||||
|     gap: 10px; |     gap: 4px; | ||||||
|     .vulnerability { |     .vulnerability { | ||||||
|       display: flex; |       display: flex; | ||||||
|       align-items: center; |       align-items: center; | ||||||
|       gap: 10px; |       gap: 4px; | ||||||
|       .item-img { |       .item-img { | ||||||
|         width: 32px; |         width: 24px; | ||||||
|         height: 32px; |         height: 24px; | ||||||
|       } |       } | ||||||
|       .name { |       .name { | ||||||
|         min-width: 12rem; |         min-width: 12rem; | ||||||
| @@ -394,28 +312,28 @@ | |||||||
|   legend { |   legend { | ||||||
|     a { |     a { | ||||||
|       font-size: calc(var(--font-size-standard) * 1.4); |       font-size: calc(var(--font-size-standard) * 1.4); | ||||||
|       padding-left: 5px; |       padding-left: 4px; | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   .moneys { |   .moneys { | ||||||
|     display: grid; |     display: grid; | ||||||
|     grid-template-columns: repeat(5, 1fr); |     grid-template-columns: repeat(5, 1fr); | ||||||
|     gap: 10px; |     gap: 4px; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   .equipments { |   .equipments { | ||||||
|     display: grid; |     display: grid; | ||||||
|     grid-template-columns: repeat(3, 1fr); |     grid-template-columns: repeat(3, 1fr); | ||||||
|     gap: 10px; |     gap: 4px; | ||||||
|     .equipment{ |     .equipment { | ||||||
|       display: flex; |       display: flex; | ||||||
|       align-items: center; |       align-items: center; | ||||||
|       gap: 10px; |       gap: 4px; | ||||||
|       .item-img { |       .item-img { | ||||||
|         width: 32px; |         width: 24px; | ||||||
|         height: 32px; |         height: 24px; | ||||||
|         margin: 5px 0 0 0; |         margin: 4px 0 0 0; | ||||||
|       } |       } | ||||||
|       .name { |       .name { | ||||||
|         min-width: 12rem; |         min-width: 12rem; | ||||||
| @@ -428,30 +346,33 @@ | |||||||
| } | } | ||||||
|  |  | ||||||
| .tab.character-combat { | .tab.character-combat { | ||||||
|     display: grid; |   display: grid; | ||||||
|     grid-template-columns: 1fr; |   grid-template-columns: 1fr; | ||||||
|     legend { |   legend { | ||||||
|       a { |     a { | ||||||
|         font-size: calc(var(--font-size-standard) * 1.4); |       font-size: calc(var(--font-size-standard) * 1.4); | ||||||
|         padding-left: 5px; |       padding-left: 4px; | ||||||
|       } |  | ||||||
|     } |     } | ||||||
|  |   } | ||||||
|  |  | ||||||
|   .combat-details { |   .combat-details { | ||||||
|     display: grid; |     display: grid; | ||||||
|     grid-template-columns: repeat(2, 1fr); |     grid-template-columns: repeat(2, 1fr); | ||||||
|     gap: 10px; |     gap: 4px; | ||||||
|     .combat-detail { |     .combat-detail { | ||||||
|       display: flex; |       display: flex; | ||||||
|       align-items: center; |       align-items: center; | ||||||
|       gap: 10px; |       gap: 4px; | ||||||
|  |       button { | ||||||
|  |         min-width: 10rem; | ||||||
|  |       } | ||||||
|       .armor-hp { |       .armor-hp { | ||||||
|         min-width: 20rem; |         min-width: 20rem; | ||||||
|         max-width: 20rem; |         max-width: 20rem; | ||||||
|         .input { |         .input { | ||||||
|           min-width: 3rem; |           min-width: 3rem; | ||||||
|           max-width: 3rem; |           max-width: 3rem; | ||||||
|         }  |         } | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
| @@ -459,11 +380,11 @@ | |||||||
|   .wounds { |   .wounds { | ||||||
|     display: grid; |     display: grid; | ||||||
|     grid-template-columns: repeat(2, 1fr); |     grid-template-columns: repeat(2, 1fr); | ||||||
|     gap: 10px; |     gap: 4px; | ||||||
|     .wound { |     .wound { | ||||||
|       display: flex; |       display: flex; | ||||||
|       align-items: center; |       align-items: center; | ||||||
|       gap: 10px; |       gap: 4px; | ||||||
|       .wound-description { |       .wound-description { | ||||||
|         min-width: 16rem; |         min-width: 16rem; | ||||||
|         max-width: 16rem; |         max-width: 16rem; | ||||||
| @@ -477,9 +398,9 @@ | |||||||
|         max-width: 3rem; |         max-width: 3rem; | ||||||
|       } |       } | ||||||
|       .item-img { |       .item-img { | ||||||
|         width: 32px; |         width: 24px; | ||||||
|         height: 32px; |         height: 24px; | ||||||
|         margin: 5px 0 0 0; |         margin: 4px 0 0 0; | ||||||
|       } |       } | ||||||
|       .name { |       .name { | ||||||
|         min-width: 12rem; |         min-width: 12rem; | ||||||
| @@ -490,15 +411,15 @@ | |||||||
|   .weapons { |   .weapons { | ||||||
|     display: grid; |     display: grid; | ||||||
|     grid-template-columns: repeat(2, 1fr); |     grid-template-columns: repeat(2, 1fr); | ||||||
|     gap: 10px; |     gap: 4px; | ||||||
|     .weapon { |     .weapon { | ||||||
|       display: flex; |       display: flex; | ||||||
|       align-items: center; |       align-items: center; | ||||||
|       gap: 10px; |       gap: 4px; | ||||||
|       .item-img { |       .item-img { | ||||||
|         width: 32px; |         width: 24px; | ||||||
|         height: 32px; |         height: 24px; | ||||||
|         margin: 5px 0 0 0; |         margin: 4px 0 0 0; | ||||||
|       } |       } | ||||||
|       .name { |       .name { | ||||||
|         min-width: 12rem; |         min-width: 12rem; | ||||||
| @@ -512,15 +433,15 @@ | |||||||
|   .armors { |   .armors { | ||||||
|     display: grid; |     display: grid; | ||||||
|     grid-template-columns: repeat(3, 1fr); |     grid-template-columns: repeat(3, 1fr); | ||||||
|     gap: 10px; |     gap: 4px; | ||||||
|     .armor { |     .armor { | ||||||
|       display: flex; |       display: flex; | ||||||
|       align-items: center; |       align-items: center; | ||||||
|       gap: 10px; |       gap: 4px; | ||||||
|       .item-img { |       .item-img { | ||||||
|         width: 32px; |         width: 24px; | ||||||
|         height: 32px; |         height: 24px; | ||||||
|         margin: 5px 0 0 0; |         margin: 4px 0 0 0; | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
|     .name { |     .name { | ||||||
| @@ -535,21 +456,21 @@ | |||||||
|   legend { |   legend { | ||||||
|     a { |     a { | ||||||
|       font-size: calc(var(--font-size-standard) * 1.4); |       font-size: calc(var(--font-size-standard) * 1.4); | ||||||
|       padding-left: 5px; |       padding-left: 4px; | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   .spells { |   .spells { | ||||||
|     display: grid; |     display: grid; | ||||||
|     grid-template-columns: repeat(3, 1fr); |     grid-template-columns: repeat(3, 1fr); | ||||||
|     gap: 10px; |     gap: 4px; | ||||||
|     .spell { |     .spell { | ||||||
|       display: flex; |       display: flex; | ||||||
|       align-items: center; |       align-items: center; | ||||||
|       gap: 10px; |       gap: 4px; | ||||||
|       .item-img { |       .item-img { | ||||||
|         width: 32px; |         width: 24px; | ||||||
|         height: 32px; |         height: 24px; | ||||||
|       } |       } | ||||||
|       .name { |       .name { | ||||||
|         min-width: 12rem; |         min-width: 12rem; | ||||||
| @@ -557,7 +478,6 @@ | |||||||
|     } |     } | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  |  | ||||||
|   prose-mirror.inactive { |   prose-mirror.inactive { | ||||||
|     min-height: 40px; |     min-height: 40px; | ||||||
|   } |   } | ||||||
| @@ -572,21 +492,21 @@ | |||||||
|   legend { |   legend { | ||||||
|     a { |     a { | ||||||
|       font-size: calc(var(--font-size-standard) * 1.4); |       font-size: calc(var(--font-size-standard) * 1.4); | ||||||
|       padding-left: 5px; |       padding-left: 4px; | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   .miracles { |   .miracles { | ||||||
|     display: grid; |     display: grid; | ||||||
|     grid-template-columns: repeat(3, 1fr); |     grid-template-columns: repeat(3, 1fr); | ||||||
|     gap: 10px; |     gap: 4px; | ||||||
|     .miracle { |     .miracle { | ||||||
|       display: flex; |       display: flex; | ||||||
|       align-items: center; |       align-items: center; | ||||||
|       gap: 10px; |       gap: 4px; | ||||||
|       .item-img { |       .item-img { | ||||||
|         width: 32px; |         width: 24px; | ||||||
|         height: 32px; |         height: 24px; | ||||||
|       } |       } | ||||||
|       .name { |       .name { | ||||||
|         min-width: 12rem; |         min-width: 12rem; | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| :root { | :root { | ||||||
|   --font-primary: "TimesNewRoman", serif; |   --font-primary: "TimesNewRoman", serif; | ||||||
|   --font-size-standard: 0.9rem; |   --font-size-standard: 0.8rem; | ||||||
|   --background-image-base: url("../assets/ui/lethal_fantasy_background.webp"); |   --background-image-base: url("../assets/ui/lethal_fantasy_background.webp"); | ||||||
|   --font-secondary: "BaskervilleBold", serif; |   --font-secondary: "BaskervilleBold", serif; | ||||||
|   --logo-standard: url("../assets/ui/lf_logo_small_02.webp"); |   --logo-standard: url("../assets/ui/lf_logo_small_02.webp"); | ||||||
|   | |||||||
| @@ -15,23 +15,24 @@ | |||||||
|  |  | ||||||
|   input, |   input, | ||||||
|   select { |   select { | ||||||
|  |     height: 1.5rem; | ||||||
|     background-color: rgba(0, 0, 0, 0.1); |     background-color: rgba(0, 0, 0, 0.1); | ||||||
|     border-color: var(--color-dark-6); |     border-color: var(--color-dark-6); | ||||||
|     color: var(--color-dark-2); |     color: var(--color-dark-2); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   input[name="name"] { |   input[name="name"] { | ||||||
|     height: 50px; |     height: 2.5rem; | ||||||
|     margin-right: 10px; |     margin-right: 4px; | ||||||
|     font-family: var(--font-secondary); |     font-family: var(--font-secondary); | ||||||
|     font-size: calc(var(--font-size-standard) * 1); |     font-size: calc(var(--font-size-standard) * 1.2); | ||||||
|     font-weight: bold; |     font-weight: bold; | ||||||
|     border: none; |     border: none; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   fieldset { |   fieldset { | ||||||
|     margin-bottom: 5px; |     margin-bottom: 4px; | ||||||
|     border-radius: 5px; |     border-radius: 4px; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   .form-fields { |   .form-fields { | ||||||
| @@ -63,7 +64,7 @@ | |||||||
|  |  | ||||||
| .item-sheet-common { | .item-sheet-common { | ||||||
|   .form-fields { |   .form-fields { | ||||||
|     padding-top: 5px; |     padding-top: 4px; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   label { |   label { | ||||||
|   | |||||||
| @@ -4,8 +4,14 @@ | |||||||
|     <legend>{{localize "LETHALFANTASY.Label.combatDetails"}}</legend> |     <legend>{{localize "LETHALFANTASY.Label.combatDetails"}}</legend> | ||||||
|     <div class="combat-details"> |     <div class="combat-details"> | ||||||
|       <div class="combat-detail"> |       <div class="combat-detail"> | ||||||
|         <button class="action" data-action="rangedAttackDefense">{{localize |          | ||||||
|         "LETHALFANTASY.Label.rangedAttackDefense"}}</button> |         <button class="action" data-action="rangedAttackDefense"> | ||||||
|  |           {{localize "LETHALFANTASY.Label.rangedAttackDefense"}} | ||||||
|  |         </button> | ||||||
|  |  | ||||||
|  |         <button class="action" data-action="rollInitiative"> | ||||||
|  |           {{localize "LETHALFANTASY.Label.rollInitiative"}} | ||||||
|  |         </button> | ||||||
|  |  | ||||||
|         {{formField systemFields.combat.fields.armorHitPoints value=system.combat.armorHitPoints localize=true classes="armor-hp"}} |         {{formField systemFields.combat.fields.armorHitPoints value=system.combat.armorHitPoints localize=true classes="armor-hp"}} | ||||||
|         <a data-action="armorHitPointsPlus"><i class="fa-solid fa-hexagon-plus"></i></a> |         <a data-action="armorHitPointsPlus"><i class="fa-solid fa-hexagon-plus"></i></a> | ||||||
| @@ -20,8 +26,8 @@ | |||||||
|         {{#each system.hp.wounds as |wound idx|}} |         {{#each system.hp.wounds as |wound idx|}} | ||||||
|         <div class="wound"> |         <div class="wound"> | ||||||
|           Name:<input class="wound-description wound-data" type="text" data-type="String" data-index="{{@index}}" value="{{wound.description}}" data-name="description" > |           Name:<input class="wound-description wound-data" type="text" data-type="String" data-index="{{@index}}" value="{{wound.description}}" data-name="description" > | ||||||
|           HP:<input class="wound-value wound-data" type="text" data-type="Number" data-index="{{@index}}" value="{{wound.value}}" data-name="value" > |  | ||||||
|           Duration:<input class="wound-duration wound-data" type="text" data-type="Number" data-index="{{@index}}" value="{{wound.duration}}" data-name="duration" > |           Duration:<input class="wound-duration wound-data" type="text" data-type="Number" data-index="{{@index}}" value="{{wound.duration}}" data-name="duration" > | ||||||
|  |           HP:<input class="wound-value wound-data" type="text" data-type="Number" data-index="{{@index}}" value="{{wound.value}}" data-name="value" > | ||||||
|         </div> |         </div> | ||||||
|         {{/each}} |         {{/each}} | ||||||
|     </div> |     </div> | ||||||
|   | |||||||
| @@ -13,9 +13,9 @@ | |||||||
|         <fieldset class="character-characteristics character-characteristics-{{ifThen isPlayMode 'play' 'edit'}}"> |         <fieldset class="character-characteristics character-characteristics-{{ifThen isPlayMode 'play' 'edit'}}"> | ||||||
|           <div class="flexrow character-hp"> |           <div class="flexrow character-hp"> | ||||||
|             <span class="name">{{localize "LETHALFANTASY.Label.HP"}}</span> |             <span class="name">{{localize "LETHALFANTASY.Label.HP"}}</span> | ||||||
|             {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp"}} |             {{formInput systemFields.hp.fields.value value=system.hp.value disabled=isPlayMode classes="character-hp-value"}} | ||||||
|              /  |              /  | ||||||
|             {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp"}} |             {{formInput systemFields.hp.fields.max value=system.hp.max disabled=isPlayMode classes="character-hp-value"}} | ||||||
|           </div> |           </div> | ||||||
|           <div class="flexrow character-hp"> |           <div class="flexrow character-hp"> | ||||||
|             <span class="name">{{localize "LETHALFANTASY.Label.perception"}}</span> |             <span class="name">{{localize "LETHALFANTASY.Label.perception"}}</span> | ||||||
| @@ -108,6 +108,10 @@ | |||||||
|                 </a> |                 </a> | ||||||
|                 </span> |                 </span> | ||||||
|               {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=true}} |               {{formField systemFields.saves.fields.pain.fields.value value=system.saves.pain.value disabled=true}} | ||||||
|  |                | ||||||
|  |               <span data-tooltip="Pain save if wound exceeds"> | ||||||
|  |               {{formField systemFields.hp.fields.painDamage value=system.hp.painDamage disabled=isPlayMode tooltip="Pain Damage"}} | ||||||
|  |               </span> | ||||||
|             </div> |             </div> | ||||||
|           </div> |           </div> | ||||||
|         </fieldset> |         </fieldset> | ||||||
| @@ -150,6 +154,14 @@ | |||||||
|               <span class="name">{{localize "LETHALFANTASY.Label.movement.sprint"}}</span> |               <span class="name">{{localize "LETHALFANTASY.Label.movement.sprint"}}</span> | ||||||
|               {{formField systemFields.movement.fields.sprint value=system.movement.sprint disabled=isPlayMode}} |               {{formField systemFields.movement.fields.sprint value=system.movement.sprint disabled=isPlayMode}} | ||||||
|             </div> |             </div> | ||||||
|  |             <div class="character-movement"> | ||||||
|  |               <span class="name">{{localize "LETHALFANTASY.Label.movement.jumpBroad"}}</span> | ||||||
|  |               {{formField systemFields.jump.fields.broad value=system.jump.broad disabled=isPlayMode}} | ||||||
|  |               <span class="name">{{localize "LETHALFANTASY.Label.movement.jumpRunning"}}</span> | ||||||
|  |               {{formField systemFields.jump.fields.running value=system.jump.running disabled=isPlayMode}} | ||||||
|  |               <span class="name">{{localize "LETHALFANTASY.Label.movement.jumpVertical"}}</span> | ||||||
|  |               {{formField systemFields.jump.fields.vertical value=system.jump.vertical disabled=isPlayMode}} | ||||||
|  |             </div> | ||||||
|           </div> |           </div> | ||||||
|         </fieldset> |         </fieldset> | ||||||
|  |  | ||||||
| @@ -162,14 +174,14 @@ | |||||||
|     <div class="character-characteristic"> |     <div class="character-characteristic"> | ||||||
|       {{localize "LETHALFANTASY.Label.str"}} |       {{localize "LETHALFANTASY.Label.str"}} | ||||||
|       {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value |       {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value | ||||||
|       disabled=isPlayMode classes="rollable" data-char-id="str" }} |       disabled=isPlayMode data-char-id="str" }} | ||||||
|       {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent |       {{formField systemFields.characteristics.fields.str.fields.percent value=system.characteristics.str.percent | ||||||
|       disabled=isPlayMode type="number"}} |       disabled=isPlayMode type="number"}} | ||||||
|     </div> |     </div> | ||||||
|     <div class="character-characteristic"> |     <div class="character-characteristic"> | ||||||
|       {{localize "LETHALFANTASY.Label.int"}} |       {{localize "LETHALFANTASY.Label.int"}} | ||||||
|       {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value |       {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value | ||||||
|       disabled=isPlayMode classes="rollable" data-char-id="int" }} |       disabled=isPlayMode data-char-id="int" }} | ||||||
|  |  | ||||||
|       {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent |       {{formField systemFields.characteristics.fields.int.fields.percent value=system.characteristics.int.percent | ||||||
|       disabled=isPlayMode type="number" }} |       disabled=isPlayMode type="number" }} | ||||||
| @@ -177,7 +189,7 @@ | |||||||
|     <div class="character-characteristic"> |     <div class="character-characteristic"> | ||||||
|       {{localize "LETHALFANTASY.Label.wis"}} |       {{localize "LETHALFANTASY.Label.wis"}} | ||||||
|       {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value |       {{formField systemFields.characteristics.fields.wis.fields.value value=system.characteristics.wis.value | ||||||
|       disabled=isPlayMode classes="rollable" data-char-id="wis" }} |       disabled=isPlayMode data-char-id="wis" }} | ||||||
|  |  | ||||||
|       {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent |       {{formField systemFields.characteristics.fields.wis.fields.percent value=system.characteristics.wis.percent | ||||||
|       disabled=isPlayMode type="number"}} |       disabled=isPlayMode type="number"}} | ||||||
| @@ -185,7 +197,7 @@ | |||||||
|     <div class="character-characteristic"> |     <div class="character-characteristic"> | ||||||
|       {{localize "LETHALFANTASY.Label.dex"}} |       {{localize "LETHALFANTASY.Label.dex"}} | ||||||
|       {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value |       {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value | ||||||
|       disabled=isPlayMode classes="rollable" data-char-id="wis" }} |       disabled=isPlayMode data-char-id="wis" }} | ||||||
|  |  | ||||||
|       {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent |       {{formField systemFields.characteristics.fields.dex.fields.percent value=system.characteristics.dex.percent | ||||||
|       disabled=isPlayMode type="number" }} |       disabled=isPlayMode type="number" }} | ||||||
| @@ -193,7 +205,7 @@ | |||||||
|     <div class="character-characteristic"> |     <div class="character-characteristic"> | ||||||
|       {{localize "LETHALFANTASY.Label.con"}} |       {{localize "LETHALFANTASY.Label.con"}} | ||||||
|       {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value |       {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value | ||||||
|       disabled=isPlayMode classes="rollable" data-char-id="con" }} |       disabled=isPlayMode data-char-id="con" }} | ||||||
|  |  | ||||||
|       {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent |       {{formField systemFields.characteristics.fields.con.fields.percent value=system.characteristics.con.percent | ||||||
|       disabled=isPlayMode type="number"}} |       disabled=isPlayMode type="number"}} | ||||||
| @@ -201,7 +213,7 @@ | |||||||
|     <div class="character-characteristic"> |     <div class="character-characteristic"> | ||||||
|       {{localize "LETHALFANTASY.Label.cha"}} |       {{localize "LETHALFANTASY.Label.cha"}} | ||||||
|       {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value |       {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value | ||||||
|       disabled=isPlayMode classes="rollable" data-char-id="cha" }} |       disabled=isPlayMode data-char-id="cha" }} | ||||||
|  |  | ||||||
|       {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent |       {{formField systemFields.characteristics.fields.cha.fields.percent value=system.characteristics.cha.percent | ||||||
|       disabled=isPlayMode type="number"}} |       disabled=isPlayMode type="number"}} | ||||||
| @@ -209,7 +221,7 @@ | |||||||
|     <div class="character-characteristic"> |     <div class="character-characteristic"> | ||||||
|       {{localize "LETHALFANTASY.Label.luc"}} |       {{localize "LETHALFANTASY.Label.luc"}} | ||||||
|       {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value |       {{formField systemFields.characteristics.fields.luc.fields.value value=system.characteristics.luc.value | ||||||
|       disabled=isPlayMode classes="rollable" data-char-id="luc" }} |       disabled=isPlayMode data-char-id="luc" }} | ||||||
|  |  | ||||||
|       {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent |       {{formField systemFields.characteristics.fields.luc.fields.percent value=system.characteristics.luc.percent | ||||||
|       disabled=isPlayMode type="number"}} |       disabled=isPlayMode type="number"}} | ||||||
| @@ -217,7 +229,7 @@ | |||||||
|     <div class="character-characteristic"> |     <div class="character-characteristic"> | ||||||
|       {{localize "LETHALFANTASY.Label.app"}} |       {{localize "LETHALFANTASY.Label.app"}} | ||||||
|       {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value |       {{formField systemFields.characteristics.fields.app.fields.value value=system.characteristics.app.value | ||||||
|       disabled=isPlayMode classes="rollable" data-char-id="app" }} |       disabled=isPlayMode data-char-id="app" }} | ||||||
|  |  | ||||||
|       {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent |       {{formField systemFields.characteristics.fields.app.fields.percent value=system.characteristics.app.percent | ||||||
|       disabled=isPlayMode type="number"}} |       disabled=isPlayMode type="number"}} | ||||||
|   | |||||||
							
								
								
									
										148
									
								
								templates/combat-tracker.hbs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										148
									
								
								templates/combat-tracker.hbs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,148 @@ | |||||||
|  | <section class="{{cssClass}} directory flexcol" id="{{cssId}}" data-tab="{{tabName}}"> | ||||||
|  |   <header class="combat-tracker-header"> | ||||||
|  |     {{#if user.isGM}} | ||||||
|  |     <nav class="encounters flexrow" aria-label="{{localize 'COMBAT.NavLabel'}}"> | ||||||
|  |       <a class="combat-button combat-create" aria-label="{{localize 'COMBAT.Create'}}" role="button" | ||||||
|  |         data-tooltip="COMBAT.Create"> | ||||||
|  |         <i class="fas fa-plus"></i> | ||||||
|  |       </a> | ||||||
|  |       {{#if combatCount}} | ||||||
|  |       <a class="combat-button combat-cycle" aria-label="{{localize 'COMBAT.EncounterPrevious'}}" role="button" | ||||||
|  |         data-tooltip="COMBAT.EncounterPrevious" {{#if previousId}}data-document-id="{{previousId}}" | ||||||
|  |         {{else}}disabled{{/if}}> | ||||||
|  |         <i class="fas fa-caret-left"></i> | ||||||
|  |       </a> | ||||||
|  |       <h4 class="encounter">{{localize "COMBAT.Encounter"}} {{currentIndex}} / {{combatCount}}</h4> | ||||||
|  |       <a class="combat-button combat-cycle" aria-label="{{localize 'COMBAT.EncounterNext'}}" role="button" | ||||||
|  |         data-tooltip="COMBAT.EncounterNext" {{#if nextId}}data-document-id="{{nextId}}" {{else}}disabled{{/if}}> | ||||||
|  |         <i class="fas fa-caret-right"></i> | ||||||
|  |       </a> | ||||||
|  |       {{/if}} | ||||||
|  |       <a class="combat-button combat-control" aria-label="{{localize 'COMBAT.Delete'}}" role="button" | ||||||
|  |         data-tooltip="COMBAT.Delete" data-control="endCombat" {{#unless combatCount}}disabled{{/unless}}> | ||||||
|  |         <i class="fas fa-trash"></i> | ||||||
|  |       </a> | ||||||
|  |     </nav> | ||||||
|  |     {{/if}} | ||||||
|  |  | ||||||
|  |     <div class="encounter-controls flexrow {{#if hasCombat}}combat{{/if}}"> | ||||||
|  |       {{#if user.isGM}} | ||||||
|  |       <a class="combat-button combat-control" aria-label="{{localize 'COMBAT.RollAll'}}" role="button" | ||||||
|  |         data-tooltip="COMBAT.RollAll" data-control="rollAll" {{#unless turns}}disabled{{/unless}}> | ||||||
|  |         <i class="fas fa-users"></i> | ||||||
|  |       </a> | ||||||
|  |       <a class="combat-button combat-control" aria-label="{{localize 'COMBAT.RollNPC'}}" role="button" | ||||||
|  |         data-tooltip="COMBAT.RollNPC" data-control="rollNPC" {{#unless turns}}disabled{{/unless}}> | ||||||
|  |         <i class="fas fa-users-cog"></i> | ||||||
|  |       </a> | ||||||
|  |       | ||||||
|  |       {{/if}} | ||||||
|  |  | ||||||
|  |       {{#if combatCount}} | ||||||
|  |       {{#if combat.round}} | ||||||
|  |       <h3 class="encounter-title noborder">{{localize 'COMBAT.Round'}} {{combat.round}}</h3> | ||||||
|  |       {{else}} | ||||||
|  |       <h3 class="encounter-title noborder">{{localize 'COMBAT.NotStarted'}}</h3> | ||||||
|  |       {{/if}} | ||||||
|  |       {{else}} | ||||||
|  |       <h3 class="encounter-title noborder">{{localize "COMBAT.None"}}</h3> | ||||||
|  |       {{/if}} | ||||||
|  |  | ||||||
|  |       {{#if user.isGM}} | ||||||
|  |       <a class="combat-button combat-control" aria-label="{{localize 'COMBAT.InitiativeReset'}}" role="button" | ||||||
|  |         data-tooltip="COMBAT.InitiativeReset" data-control="resetAll" {{#unless hasCombat}}disabled{{/unless}}> | ||||||
|  |         <i class="fas fa-undo"></i> | ||||||
|  |       </a> | ||||||
|  |       <a class="combat-button combat-control" aria-label="{{localize 'labels.scope'}}" role="button" | ||||||
|  |         data-tooltip="{{labels.scope}}" data-control="toggleSceneLink" {{#unless hasCombat}}disabled{{/unless}}> | ||||||
|  |         <i class="fas fa-{{#unless linked}}un{{/unless}}link"></i> | ||||||
|  |       </a> | ||||||
|  |       {{/if}} | ||||||
|  |       <a class="combat-button combat-settings" aria-label="{{localize 'COMBAT.Settings'}}" role="button" | ||||||
|  |         data-tooltip="COMBAT.Settings" data-control="trackerSettings"> | ||||||
|  |         <i class="fas fa-cog"></i> | ||||||
|  |       </a> | ||||||
|  |     </div> | ||||||
|  |   </header> | ||||||
|  |  | ||||||
|  |   <ol id="combat-tracker" class="directory-list"> | ||||||
|  |     {{#each turns}} | ||||||
|  |     <li class="combatant actor directory-item flexrow {{this.css}}" data-combatant-id="{{this.id}}"> | ||||||
|  |       <img class="token-image" data-src="{{this.img}}" alt="{{this.name}}" /> | ||||||
|  |       <div class="token-name flexcol"> | ||||||
|  |         <h4>{{this.name}}</h4> | ||||||
|  |         <div class="combatant-controls flexrow"> | ||||||
|  |           {{#if ../user.isGM}} | ||||||
|  |           <a class="combatant-control {{#if this.hidden}}active{{/if}}" aria-label="{{localize 'COMBAT.ToggleVis'}}" | ||||||
|  |             role="button" data-tooltip="COMBAT.ToggleVis" data-control="toggleHidden"> | ||||||
|  |             <i class="fas fa-eye-slash"></i> | ||||||
|  |           </a> | ||||||
|  |           <a class="combatant-control {{#if this.defeated}}active{{/if}}" aria-label="{{localize 'COMBAT.ToggleDead'}}" | ||||||
|  |             role="button" data-tooltip="COMBAT.ToggleDead" data-control="toggleDefeated"> | ||||||
|  |             <i class="fas fa-skull"></i> | ||||||
|  |           </a> | ||||||
|  |           {{/if}} | ||||||
|  |           {{#if this.canPing}} | ||||||
|  |           <a class="combatant-control" aria-label="{{localize 'COMBAT.PingCombatant'}}" role="button" | ||||||
|  |             data-tooltip="COMBAT.PingCombatant" data-control="pingCombatant"> | ||||||
|  |             <i class="fa-solid fa-bullseye-arrow"></i> | ||||||
|  |           </a> | ||||||
|  |           {{/if}} | ||||||
|  |           <div class="token-effects"> | ||||||
|  |             {{#each this.effects}} | ||||||
|  |             <img class="token-effect" src="{{this}}" /> | ||||||
|  |             {{/each}} | ||||||
|  |           </div> | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  |  | ||||||
|  |       {{#if this.hasResource}} | ||||||
|  |       <div class="token-resource"> | ||||||
|  |         <span class="resource">{{this.resource}}</span> | ||||||
|  |       </div> | ||||||
|  |       {{/if}} | ||||||
|  |  | ||||||
|  |       <div class="token-initiative"> | ||||||
|  |         {{#if this.hasRolled}} | ||||||
|  |         <span class="initiative">{{this.initiative}}</span> | ||||||
|  |         {{else if this.owner}} | ||||||
|  |         <a class="combatant-control roll" aria-label="{{localize 'COMBAT.InitiativeRoll'}}" role="button" | ||||||
|  |           data-tooltip="COMBAT.InitiativeRoll" data-control="rollInitiative"></a> | ||||||
|  |         {{/if}} | ||||||
|  |       </div> | ||||||
|  |     </li> | ||||||
|  |     {{/each}} | ||||||
|  |   </ol> | ||||||
|  |  | ||||||
|  |   <nav id="combat-controls" class="directory-footer flexrow" data-tooltip-direction="UP"> | ||||||
|  |     {{#if hasCombat}} | ||||||
|  |     {{#if user.isGM}} | ||||||
|  |     {{#if round}} | ||||||
|  |     <!-- <a class="combat-control" aria-label="{{localize 'COMBAT.RoundPrev'}}" role="button" data-tooltip="COMBAT.RoundPrev" | ||||||
|  |       data-control="previousRound"><i class="fas fa-step-backward"></i></a> | ||||||
|  |     <a class="combat-control" aria-label="{{localize 'COMBAT.TurnPrev'}}" role="button" data-tooltip="COMBAT.TurnPrev" | ||||||
|  |       data-control="previousTurn"><i class="fas fa-arrow-left"></i></a> | ||||||
|  |       --> | ||||||
|  |     <a class="combat-control" aria-label="{{localize 'COMBAT.End'}}" role="button" | ||||||
|  |       data-control="endCombat">{{localize 'COMBAT.End'}}</a> | ||||||
|  |     <!-- <a class="combat-control" aria-label="{{localize 'COMBAT.TurnNext'}}" role="button" data-tooltip="COMBAT.TurnNext" | ||||||
|  |       data-control="nextTurn"><i class="fas fa-arrow-right"></i></a> --> | ||||||
|  |     <a class="combat-control" aria-label="{{localize 'COMBAT.RoundNext'}}" role="button" data-tooltip="COMBAT.RoundNext" | ||||||
|  |       data-control="nextRound"><i class="fas fa-step-forward"></i></a> | ||||||
|  |     {{else}} | ||||||
|  |     <a class="combat-control center" aria-label="{{localize 'COMBAT.Begin'}}" role="button" | ||||||
|  |       data-control="startCombat">{{localize 'COMBAT.Begin'}}</a> | ||||||
|  |     {{/if}} | ||||||
|  |     {{else if control}} | ||||||
|  |     <!--  | ||||||
|  |     <a class="combat-control" aria-label="{{localize 'COMBAT.TurnPrev'}}" role="button" data-tooltip="COMBAT.TurnPrev" | ||||||
|  |       data-control="previousTurn"><i class="fas fa-arrow-left"></i></a> | ||||||
|  |     <a class="combat-control center" aria-label="{{localize 'COMBAT.TurnEnd'}}" role="button" | ||||||
|  |       data-control="nextTurn">{{localize 'COMBAT.TurnEnd'}}</a> | ||||||
|  |     <a class="combat-control" aria-label="{{localize 'COMBAT.TurnNext'}}" role="button" data-tooltip="COMBAT.TurnNext" | ||||||
|  |       data-control="nextTurn"><i class="fas fa-arrow-right"></i></a> | ||||||
|  |       --> | ||||||
|  |     {{/if}} | ||||||
|  |     {{/if}} | ||||||
|  |   </nav> | ||||||
|  | </section> | ||||||
| @@ -1,39 +0,0 @@ | |||||||
| <table class="tenebris-table"> |  | ||||||
|   <thead> |  | ||||||
|     <tr> |  | ||||||
|       <th>{{localize "TENEBRIS.Manager.player"}}</th> |  | ||||||
|       <th>{{localize "TENEBRIS.Manager.character"}}</th> |  | ||||||
|       <th>{{localize "TENEBRIS.Manager.pv"}}</th> |  | ||||||
|       <td data-action="saveAll" data-save="rob">{{localize "TENEBRIS.Manager.rob"}}</td> |  | ||||||
|       <td data-action="saveAll" data-save="dex">{{localize "TENEBRIS.Manager.dex"}}</td> |  | ||||||
|       <td data-action="saveAll" data-save="int">{{localize "TENEBRIS.Manager.int"}}</td> |  | ||||||
|       <td data-action="saveAll" data-save="per">{{localize "TENEBRIS.Manager.per"}}</td> |  | ||||||
|       <td data-action="saveAll" data-save="vol">{{localize "TENEBRIS.Manager.vol"}}</td> |  | ||||||
|       <td data-action="resourceAll" data-resource="san">{{localize "TENEBRIS.Manager.san"}}</td> |  | ||||||
|       <td data-action="resourceAll" data-resource="oeil">{{localize "TENEBRIS.Manager.oeil"}}</td> |  | ||||||
|       <td data-action="resourceAll" data-resource="verbe">{{localize "TENEBRIS.Manager.verbe"}}</td> |  | ||||||
|       <td data-action="resourceAll" data-resource="bourse">{{localize "TENEBRIS.Manager.bourse"}}</td> |  | ||||||
|       <td data-action="resourceAll" data-resource="magie">{{localize "TENEBRIS.Manager.magie"}}</td> |  | ||||||
|     </tr> |  | ||||||
|   </thead> |  | ||||||
|   <tbody> |  | ||||||
|     {{#each players as |player|}} |  | ||||||
|       {{!log "player" this}} |  | ||||||
|       <tr class="player" data-user-id="{{player.id}}" data-character-name="{{player.character.name}}" data-character-id="{{player.character.id}}"> |  | ||||||
|         <td>{{player.name}}</td> |  | ||||||
|         <td data-action="openSheet" data-character-id="{{player.character.id}}">{{player.character.name}}</td> |  | ||||||
|         <td>{{player.character.system.pv.value}}</td> |  | ||||||
|         <td data-action="saveOne" data-save="rob">{{player.character.system.caracteristiques.rob.valeur}}</td> |  | ||||||
|         <td data-action="saveOne" data-save="dex">{{player.character.system.caracteristiques.dex.valeur}}</td> |  | ||||||
|         <td data-action="saveOne" data-save="int">{{player.character.system.caracteristiques.int.valeur}}</td> |  | ||||||
|         <td data-action="saveOne" data-save="per">{{player.character.system.caracteristiques.per.valeur}}</td> |  | ||||||
|         <td data-action="saveOne" data-save="vol">{{player.character.system.caracteristiques.vol.valeur}}</td> |  | ||||||
|         <td data-action="resourceOne" data-resource="san">{{player.character.system.ressources.san.valeur}}</td> |  | ||||||
|         <td data-action="resourceOne" data-resource="oeil">{{player.character.system.ressources.oeil.valeur}}</td> |  | ||||||
|         <td data-action="resourceOne" data-resource="verbe">{{player.character.system.ressources.verbe.valeur}}</td> |  | ||||||
|         <td data-action="resourceOne" data-resource="bourse">{{player.character.system.ressources.bourse.valeur}}</td> |  | ||||||
|         <td data-action="resourceOne" data-resource="magie">{{player.character.system.ressources.magie.valeur}}</td> |  | ||||||
|       </tr> |  | ||||||
|     {{/each}} |  | ||||||
|   </tbody> |  | ||||||
| </table> |  | ||||||
							
								
								
									
										20
									
								
								templates/roll-initiative-dialog.hbs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								templates/roll-initiative-dialog.hbs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,20 @@ | |||||||
|  | <div class="lethalfantasy-roll-initiative-dialog"> | ||||||
|  |  | ||||||
|  |   <fieldSet class=""> | ||||||
|  |     <legend>{{localize "LETHALFANTASY.Label.initiative"}}</legend> | ||||||
|  |  | ||||||
|  |     <select name="initiativeDice" data-tooltip-direction="UP"> | ||||||
|  |       {{selectOptions initiativeDiceChoice selected=initiativeDice valueAttr="value" labelAttr="name"}} | ||||||
|  |     </select> | ||||||
|  |  | ||||||
|  |     <label>{{localize "LETHALFANTASY.Label.maxInitiativeWisdom"}} : {{maxInit}}</label> | ||||||
|  |   </fieldSet> | ||||||
|  |  | ||||||
|  |   <fieldSet> | ||||||
|  |     <legend>{{localize "LETHALFANTASY.Roll.visibility"}}</legend> | ||||||
|  |     <select name="visibility"> | ||||||
|  |       {{selectOptions rollModes selected=visibility}} | ||||||
|  |     </select> | ||||||
|  |   </fieldSet> | ||||||
|  |    | ||||||
|  | </div> | ||||||
		Reference in New Issue
	
	Block a user