forked from public/fvtt-cthulhu-eternal
		
	Compare commits
	
		
			35 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 7070d4c1da | |||
| 3b79a19ca5 | |||
| f882a04c0b | |||
| eda24442e8 | |||
| 0ec2d53415 | |||
| 401a94da40 | |||
| 7758085bf8 | |||
| 70c4fd5a74 | |||
| 03a54d86e6 | |||
| 3adb34d721 | |||
| 034a60bf19 | |||
| 522bb08d35 | |||
| c144488d1d | |||
| 704dd83b1b | |||
| 3aab98b4b4 | |||
| 2c05594a7e | |||
| ce1844a070 | |||
| fa7d3ecfca | |||
| adb4923d00 | |||
| 44842ff655 | |||
| 4671f6f9fe | |||
| 50b7bafb43 | |||
| 2c3a92994a | |||
| dfe4aa0c56 | |||
| efc23f466b | |||
| 1b1c2b0cfd | |||
| e0f02ecacb | |||
| 4e39c5d0dc | |||
| 9f13961eaf | |||
| 3d6cd35fa4 | |||
| 33c11e2c05 | |||
| b600148247 | |||
| c0d240c5d0 | |||
| d6a1b2c62a | |||
| 82139eb634 | 
							
								
								
									
										52
									
								
								.gitea/workflows/release.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								.gitea/workflows/release.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,52 @@ | |||||||
|  | name: Release Creation | ||||||
|  |  | ||||||
|  | on:  | ||||||
|  |   release: | ||||||
|  |     types: [published] | ||||||
|  |  | ||||||
|  | jobs: | ||||||
|  |   build: | ||||||
|  |     runs-on: ubuntu-latest | ||||||
|  |     steps: | ||||||
|  |     - run: echo "💡 The ${{ gitea.repository }} repository will cloned to the runner." | ||||||
|  |      | ||||||
|  |     #- uses: actions/checkout@v3 | ||||||
|  |     - uses: RouxAntoine/checkout@v3.5.4 | ||||||
|  |  | ||||||
|  |     # get part of the tag after the `v` | ||||||
|  |     - name: Extract tag version number | ||||||
|  |       id: get_version | ||||||
|  |       uses: battila7/get-version-action@v2 | ||||||
|  |  | ||||||
|  |     # Substitute the Manifest and Download URLs in the module.json | ||||||
|  |     - name: Substitute Manifest and Download Links For Versioned Ones | ||||||
|  |       id: sub_manifest_link_version | ||||||
|  |       uses: microsoft/variable-substitution@v1 | ||||||
|  |       with: | ||||||
|  |         files: 'system.json' | ||||||
|  |       env: | ||||||
|  |         version: ${{steps.get_version.outputs.version-without-v}} | ||||||
|  |         url: https://www.uberwald.me/gitea/${{gitea.repository}} | ||||||
|  |         manifest: https://www.uberwald.me/gitea/${{gitea.repository}}/releases/download/${{github.event.release.tag_name}}/system.json | ||||||
|  |         download: https://www.uberwald.me/gitea/${{gitea.repository}}/releases/download/${{github.event.release.tag_name}}/fvtt-cthulhu-eternal.zip | ||||||
|  |      | ||||||
|  |     # Create a zip file with all files required by the module to add to the release | ||||||
|  |     - run: | | ||||||
|  |          apt update -y | ||||||
|  |          apt install -y zip | ||||||
|  |  | ||||||
|  |     - run: zip -r ./fvtt-cthulhu-eternal.zip system.json README.md LICENSE assets/ css/ fonts/ lang/ module/ packs-system/ templates/ cthulhu-eternal.mjs | ||||||
|  |      | ||||||
|  |     - name: setup go | ||||||
|  |       uses: https://github.com/actions/setup-go@v4 | ||||||
|  |       with: | ||||||
|  |         go-version: '>=1.20.1' | ||||||
|  |      | ||||||
|  |     - name: Use Go Action   | ||||||
|  |       id: use-go-action | ||||||
|  |       uses: https://gitea.com/actions/release-action@main | ||||||
|  |       with: | ||||||
|  |         files: |- | ||||||
|  |           ./fvtt-cthulhu-eternal.zip | ||||||
|  |           system.json | ||||||
|  |         api_key: '${{secrets.ALLOW_PUSH_RELEASE}}' | ||||||
							
								
								
									
										3
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -6,6 +6,3 @@ styles/*.css | |||||||
| # Node Modules | # Node Modules | ||||||
| node_modules/ | node_modules/ | ||||||
|  |  | ||||||
| # Foundry VTT |  | ||||||
| packs/* |  | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										
											BIN
										
									
								
								assets/ui/background_01.webp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								assets/ui/background_01.webp
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 77 KiB | 
							
								
								
									
										47
									
								
								assets/ui/d100.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								assets/ui/d100.svg
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| After Width: | Height: | Size: 12 KiB | 
| @@ -110,12 +110,20 @@ | |||||||
|   --font-secondary: "RozhaOne"; |   --font-secondary: "RozhaOne"; | ||||||
|   --font-title: "Broadway"; |   --font-title: "Broadway"; | ||||||
|   --logo-standard: url("../assets/logos/reanimated-ce-logo.webp"); |   --logo-standard: url("../assets/logos/reanimated-ce-logo.webp"); | ||||||
|   --color-success: darkgreen; |   --color-success: #12e912; | ||||||
|   --color-failure: darkred; |   --color-failure: darkred; | ||||||
|   --color-critical-success: lightgreen; |   --color-warning: darkorange; | ||||||
|   --color-critical-failure: lightcoral; |   --color-critical-success: #1527cc; | ||||||
|  |   --color-critical-failure: #8d20e7; | ||||||
|   --img-icon-color-filter: brightness(0) saturate(100%) invert(52%) sepia(9%) saturate(2368%) hue-rotate(360deg) brightness(86%) contrast(84%); |   --img-icon-color-filter: brightness(0) saturate(100%) invert(52%) sepia(9%) saturate(2368%) hue-rotate(360deg) brightness(86%) contrast(84%); | ||||||
| } | } | ||||||
|  | .d100 { | ||||||
|  |   width: 18px; | ||||||
|  |   height: 18px; | ||||||
|  |   color: black; | ||||||
|  |   border-width: 0px; | ||||||
|  |   filter: var(--img-icon-color-filter); | ||||||
|  | } | ||||||
| .item .thumbnail, | .item .thumbnail, | ||||||
| .item-img { | .item-img { | ||||||
|   /*filter: invert(90%) sepia(10%) saturate(1215%) hue-rotate(55deg) brightness(93%) contrast(89%);*/ |   /*filter: invert(90%) sepia(10%) saturate(1215%) hue-rotate(55deg) brightness(93%) contrast(89%);*/ | ||||||
| @@ -168,10 +176,14 @@ i.fvtt-cthulhu-eternal { | |||||||
| } | } | ||||||
| .fvtt-cthulhu-eternal .protagonist-sheet-common label { | .fvtt-cthulhu-eternal .protagonist-sheet-common label { | ||||||
|   font-family: var(--font-secondary); |   font-family: var(--font-secondary); | ||||||
|   font-size: calc(var(--font-size-standard) * 1.2); |   font-size: calc(var(--font-size-standard) * 1); | ||||||
|  | } | ||||||
|  | .fvtt-cthulhu-eternal .vehicle-sheet-common label { | ||||||
|  |   font-family: var(--font-secondary); | ||||||
|  |   font-size: calc(var(--font-size-standard) * 1); | ||||||
| } | } | ||||||
| .fvtt-cthulhu-eternal .item-sheet-common .form-fields { | .fvtt-cthulhu-eternal .item-sheet-common .form-fields { | ||||||
|   padding-top: 5px; |   padding-top: 4px; | ||||||
| } | } | ||||||
| .fvtt-cthulhu-eternal .item-sheet-common label { | .fvtt-cthulhu-eternal .item-sheet-common label { | ||||||
|   font-family: var(--font-secondary); |   font-family: var(--font-secondary); | ||||||
| @@ -212,7 +224,7 @@ i.fvtt-cthulhu-eternal { | |||||||
|   color: var(--color-dark-2); |   color: var(--color-dark-2); | ||||||
| } | } | ||||||
| .fvtt-cthulhu-eternal .protagonist-content input[name="name"] { | .fvtt-cthulhu-eternal .protagonist-content input[name="name"] { | ||||||
|   height: 50px; |   height: 40px; | ||||||
|   margin-right: 10px; |   margin-right: 10px; | ||||||
|   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); | ||||||
| @@ -220,8 +232,8 @@ i.fvtt-cthulhu-eternal { | |||||||
|   border: none; |   border: none; | ||||||
| } | } | ||||||
| .fvtt-cthulhu-eternal .protagonist-content fieldset { | .fvtt-cthulhu-eternal .protagonist-content fieldset { | ||||||
|   margin-bottom: 5px; |   margin-bottom: 4px; | ||||||
|   border-radius: 5px; |   border-radius: 4px; | ||||||
| } | } | ||||||
| .fvtt-cthulhu-eternal .protagonist-content .form-fields input, | .fvtt-cthulhu-eternal .protagonist-content .form-fields input, | ||||||
| .fvtt-cthulhu-eternal .protagonist-content .form-fields select { | .fvtt-cthulhu-eternal .protagonist-content .form-fields select { | ||||||
| @@ -240,7 +252,7 @@ i.fvtt-cthulhu-eternal { | |||||||
| } | } | ||||||
| .fvtt-cthulhu-eternal .protagonist-content label { | .fvtt-cthulhu-eternal .protagonist-content label { | ||||||
|   font-family: var(--font-secondary); |   font-family: var(--font-secondary); | ||||||
|   font-size: calc(var(--font-size-standard) * 1.2); |   font-size: calc(var(--font-size-standard) * 1); | ||||||
| } | } | ||||||
| .fvtt-cthulhu-eternal .sheet-tabs { | .fvtt-cthulhu-eternal .sheet-tabs { | ||||||
|   background-color: var(--color-light-1); |   background-color: var(--color-light-1); | ||||||
| @@ -296,28 +308,82 @@ i.fvtt-cthulhu-eternal { | |||||||
|   font-size: calc(var(--font-size-standard) * 1.4); |   font-size: calc(var(--font-size-standard) * 1.4); | ||||||
|   width: 400px; |   width: 400px; | ||||||
| } | } | ||||||
|  | .fvtt-cthulhu-eternal .protagonist-main .protagonist-pc .protagonist-right .san { | ||||||
|  |   align-content: flex-start; | ||||||
|  | } | ||||||
| .fvtt-cthulhu-eternal .protagonist-main .protagonist-pc .protagonist-right .san input { | .fvtt-cthulhu-eternal .protagonist-main .protagonist-pc .protagonist-right .san input { | ||||||
|   min-width: 2.2rem; |   min-width: 2.2rem; | ||||||
|  |   max-width: 2.2rem; | ||||||
|  |   margin-bottom: 4px; | ||||||
|  | } | ||||||
|  | .fvtt-cthulhu-eternal .protagonist-main .protagonist-pc .protagonist-right .san select { | ||||||
|  |   min-width: 6rem; | ||||||
|  |   max-width: 6rem; | ||||||
|  | } | ||||||
|  | .fvtt-cthulhu-eternal .protagonist-main .protagonist-pc .protagonist-right .san .rollable:hover, | ||||||
|  | .fvtt-cthulhu-eternal .protagonist-main .protagonist-pc .protagonist-right .san .rollable:focus { | ||||||
|  |   text-shadow: 0 0 8px var(--color-shadow-primary); | ||||||
|  |   cursor: pointer; | ||||||
|  |   font-size: 0.9rem; | ||||||
|  | } | ||||||
|  | .fvtt-cthulhu-eternal .protagonist-main .protagonist-pc .protagonist-right .san .button { | ||||||
|  |   min-width: 4rem; | ||||||
|  |   max-width: 4rem; | ||||||
| } | } | ||||||
| .fvtt-cthulhu-eternal .protagonist-main .protagonist-pc .protagonist-right .san .san-checkbox { | .fvtt-cthulhu-eternal .protagonist-main .protagonist-pc .protagonist-right .san .san-checkbox { | ||||||
|   min-width: 1rem; |   min-width: 1rem; | ||||||
|   max-width: 1rem; |   max-width: 1rem; | ||||||
| } | } | ||||||
| .fvtt-cthulhu-eternal .protagonist-main .protagonist-pc .protagonist-right .san .label-field { | .fvtt-cthulhu-eternal .protagonist-main .protagonist-pc .protagonist-right .san .label-short-field { | ||||||
|   flex-grow: 0; |   font-size: 0.9rem; | ||||||
|  |   max-width: 3rem; | ||||||
|  |   min-width: 3rem; | ||||||
|  |   flex-grow: 1; | ||||||
|  | } | ||||||
|  | .fvtt-cthulhu-eternal .protagonist-main .protagonist-pc .protagonist-right .san .label-recovery { | ||||||
|   margin-left: 4px; |   margin-left: 4px; | ||||||
| } | } | ||||||
|  | .fvtt-cthulhu-eternal .protagonist-main .protagonist-pc .protagonist-right .san .label-field { | ||||||
|  |   font-size: 0.9rem; | ||||||
|  |   max-width: 6rem; | ||||||
|  |   min-width: 6rem; | ||||||
|  |   flex-grow: 1; | ||||||
|  | } | ||||||
|  | .fvtt-cthulhu-eternal .protagonist-main .protagonist-pc .protagonist-right .san .label-bp { | ||||||
|  |   flex-grow: 1; | ||||||
|  |   max-width: 3rem; | ||||||
|  |   min-width: 3rem; | ||||||
|  |   margin-left: 4px; | ||||||
|  | } | ||||||
|  | .fvtt-cthulhu-eternal .protagonist-main .protagonist-pc .protagonist-right .san .label-insanity { | ||||||
|  |   flex-grow: 1; | ||||||
|  |   margin-left: 4px; | ||||||
|  |   max-width: 8rem; | ||||||
|  |   min-width: 8rem; | ||||||
|  | } | ||||||
| .fvtt-cthulhu-eternal .protagonist-main .protagonist-pc .protagonist-right .san .spacing { | .fvtt-cthulhu-eternal .protagonist-main .protagonist-pc .protagonist-right .san .spacing { | ||||||
|   margin-left: 4px; |   margin-left: 4px; | ||||||
| } | } | ||||||
|  | .fvtt-cthulhu-eternal .protagonist-main .protagonist-pc .protagonist-right .san .d100 { | ||||||
|  |   flex: 0; | ||||||
|  | } | ||||||
| .fvtt-cthulhu-eternal .protagonist-main .protagonist-pc .protagonist-right .willpower input { | .fvtt-cthulhu-eternal .protagonist-main .protagonist-pc .protagonist-right .willpower input { | ||||||
|   min-width: 2.2rem; |   min-width: 2.4rem; | ||||||
|  |   max-width: 2.4rem; | ||||||
|  | } | ||||||
|  | .fvtt-cthulhu-eternal .protagonist-main .protagonist-pc .protagonist-right .willpower input[type="checkbox"] { | ||||||
|  |   min-width: 1rem; | ||||||
|  |   max-width: 1rem; | ||||||
| } | } | ||||||
| .fvtt-cthulhu-eternal .protagonist-main .protagonist-pc .protagonist-right .willpower .label-field { | .fvtt-cthulhu-eternal .protagonist-main .protagonist-pc .protagonist-right .willpower .label-field { | ||||||
|   flex-grow: 0; |   flex-grow: 1; | ||||||
|   margin-left: 4px; |   margin-left: 4px; | ||||||
|  |   max-width: 5rem; | ||||||
|  |   min-width: 5rem; | ||||||
|  |   font-size: 0.9rem; | ||||||
| } | } | ||||||
| .fvtt-cthulhu-eternal .protagonist-main .protagonist-pc .protagonist-right .willpower .checkbox { | .fvtt-cthulhu-eternal .protagonist-main .protagonist-pc .protagonist-right .willpower .checkbox { | ||||||
|  |   flex-grow: 0; | ||||||
|   min-width: 1rem; |   min-width: 1rem; | ||||||
|   max-width: 1rem; |   max-width: 1rem; | ||||||
| } | } | ||||||
| @@ -381,13 +447,21 @@ i.fvtt-cthulhu-eternal { | |||||||
|   text-shadow: 0 0 8px var(--color-shadow-primary); |   text-shadow: 0 0 8px var(--color-shadow-primary); | ||||||
|   cursor: pointer; |   cursor: pointer; | ||||||
| } | } | ||||||
|  | .fvtt-cthulhu-eternal .protagonist-main .protagonist-characteristics .protagonist-characteristic .rollable { | ||||||
|  |   min-width: 3rem; | ||||||
|  |   max-width: 3rem; | ||||||
|  | } | ||||||
|  | .fvtt-cthulhu-eternal .protagonist-main .protagonist-characteristics .protagonist-characteristic .char-text { | ||||||
|  |   margin-left: 0.5rem; | ||||||
|  | } | ||||||
| .fvtt-cthulhu-eternal .protagonist-main .protagonist-characteristics .protagonist-characteristic .form-group { | .fvtt-cthulhu-eternal .protagonist-main .protagonist-characteristics .protagonist-characteristic .form-group { | ||||||
|   flex: 1; |   flex: 0; | ||||||
|   padding-left: 5px; |   padding-left: 5px; | ||||||
| } | } | ||||||
| .fvtt-cthulhu-eternal .protagonist-main .protagonist-characteristics .protagonist-characteristic .form-group .form-fields { | .fvtt-cthulhu-eternal .protagonist-main .protagonist-characteristics .protagonist-characteristic .form-group .form-fields { | ||||||
|  |   font-size: 1.1rem; | ||||||
|   flex: none; |   flex: none; | ||||||
|   width: 70px; |   width: 40px; | ||||||
| } | } | ||||||
| .fvtt-cthulhu-eternal .protagonist-main .protagonist-characteristic-play { | .fvtt-cthulhu-eternal .protagonist-main .protagonist-characteristic-play { | ||||||
|   min-width: 225px; |   min-width: 225px; | ||||||
| @@ -407,11 +481,40 @@ i.fvtt-cthulhu-eternal { | |||||||
| .fvtt-cthulhu-eternal .protagonist-biography .field-label { | .fvtt-cthulhu-eternal .protagonist-biography .field-label { | ||||||
|   margin-left: 8px; |   margin-left: 8px; | ||||||
| } | } | ||||||
| .fvtt-cthulhu-eternal .protagonist-biography .biodata { | .fvtt-cthulhu-eternal .protagonist-biography .adapted { | ||||||
|  |   display: grid; | ||||||
|  |   grid-template-columns: repeat(2, 1fr); | ||||||
|  |   gap: 8px; | ||||||
|  | } | ||||||
|  | .fvtt-cthulhu-eternal .protagonist-biography .adapted label { | ||||||
|  |   min-width: 20rem; | ||||||
|  | } | ||||||
|  | .fvtt-cthulhu-eternal .protagonist-biography .resources { | ||||||
|   display: grid; |   display: grid; | ||||||
|   grid-template-columns: repeat(3, 1fr); |   grid-template-columns: repeat(3, 1fr); | ||||||
|   gap: 8px; |   gap: 8px; | ||||||
| } | } | ||||||
|  | .fvtt-cthulhu-eternal .protagonist-biography .resources label { | ||||||
|  |   min-width: 8rem; | ||||||
|  | } | ||||||
|  | .fvtt-cthulhu-eternal .protagonist-biography .features, | ||||||
|  | .fvtt-cthulhu-eternal .protagonist-biography .biodata { | ||||||
|  |   display: grid; | ||||||
|  |   grid-template-columns: repeat(2, 1fr); | ||||||
|  |   gap: 8px; | ||||||
|  | } | ||||||
|  | .fvtt-cthulhu-eternal .protagonist-biography .features label, | ||||||
|  | .fvtt-cthulhu-eternal .protagonist-biography .biodata label { | ||||||
|  |   min-width: 3rem; | ||||||
|  | } | ||||||
|  | .fvtt-cthulhu-eternal .protagonist-biography .features .feature, | ||||||
|  | .fvtt-cthulhu-eternal .protagonist-biography .biodata .feature { | ||||||
|  |   display: flex; | ||||||
|  |   align-items: center; | ||||||
|  |   gap: 4px; | ||||||
|  |   min-width: 18rem; | ||||||
|  |   max-width: 18rem; | ||||||
|  | } | ||||||
| .fvtt-cthulhu-eternal .protagonist-biography .motivations { | .fvtt-cthulhu-eternal .protagonist-biography .motivations { | ||||||
|   display: grid; |   display: grid; | ||||||
|   grid-template-columns: repeat(2, 1fr); |   grid-template-columns: repeat(2, 1fr); | ||||||
| @@ -472,8 +575,8 @@ i.fvtt-cthulhu-eternal { | |||||||
|   max-width: 8rem; |   max-width: 8rem; | ||||||
| } | } | ||||||
| .fvtt-cthulhu-eternal .tab.protagonist-skills .skills .skill .item-img { | .fvtt-cthulhu-eternal .tab.protagonist-skills .skills .skill .item-img { | ||||||
|   width: 32px; |   width: 24px; | ||||||
|   height: 32px; |   height: 24px; | ||||||
|   margin: 4px 0 0 0; |   margin: 4px 0 0 0; | ||||||
| } | } | ||||||
| .fvtt-cthulhu-eternal .tab.protagonist-status { | .fvtt-cthulhu-eternal .tab.protagonist-status { | ||||||
| @@ -506,16 +609,16 @@ i.fvtt-cthulhu-eternal { | |||||||
|   max-width: 12rem; |   max-width: 12rem; | ||||||
| } | } | ||||||
| .fvtt-cthulhu-eternal .tab.protagonist-status .bonds .bond .type { | .fvtt-cthulhu-eternal .tab.protagonist-status .bonds .bond .type { | ||||||
|   min-width: 4rem; |   min-width: 5rem; | ||||||
|   max-width: 4rem; |   max-width: 5rem; | ||||||
| } | } | ||||||
| .fvtt-cthulhu-eternal .tab.protagonist-status .bonds .bond .level { | .fvtt-cthulhu-eternal .tab.protagonist-status .bonds .bond .level { | ||||||
|   min-width: 2rem; |   min-width: 2rem; | ||||||
|   max-width: 2rem; |   max-width: 2rem; | ||||||
| } | } | ||||||
| .fvtt-cthulhu-eternal .tab.protagonist-status .bonds .bond .item-img { | .fvtt-cthulhu-eternal .tab.protagonist-status .bonds .bond .item-img { | ||||||
|   width: 32px; |   width: 24px; | ||||||
|   height: 32px; |   height: 24px; | ||||||
|   margin: 4px 0 0 0; |   margin: 4px 0 0 0; | ||||||
| } | } | ||||||
| .fvtt-cthulhu-eternal .tab.protagonist-status .mentaldisorders { | .fvtt-cthulhu-eternal .tab.protagonist-status .mentaldisorders { | ||||||
| @@ -539,8 +642,8 @@ i.fvtt-cthulhu-eternal { | |||||||
|   max-width: 14rem; |   max-width: 14rem; | ||||||
| } | } | ||||||
| .fvtt-cthulhu-eternal .tab.protagonist-status .mentaldisorders .mentaldisorder .item-img { | .fvtt-cthulhu-eternal .tab.protagonist-status .mentaldisorders .mentaldisorder .item-img { | ||||||
|   width: 32px; |   width: 24px; | ||||||
|   height: 32px; |   height: 24px; | ||||||
|   margin: 4px 0 0 0; |   margin: 4px 0 0 0; | ||||||
| } | } | ||||||
| .fvtt-cthulhu-eternal .tab.protagonist-status .injuries { | .fvtt-cthulhu-eternal .tab.protagonist-status .injuries { | ||||||
| @@ -564,8 +667,8 @@ i.fvtt-cthulhu-eternal { | |||||||
|   max-width: 14rem; |   max-width: 14rem; | ||||||
| } | } | ||||||
| .fvtt-cthulhu-eternal .tab.protagonist-status .injuries .injury .item-img { | .fvtt-cthulhu-eternal .tab.protagonist-status .injuries .injury .item-img { | ||||||
|   width: 32px; |   width: 24px; | ||||||
|   height: 32px; |   height: 24px; | ||||||
|   margin: 4px 0 0 0; |   margin: 4px 0 0 0; | ||||||
| } | } | ||||||
| .fvtt-cthulhu-eternal .tab.protagonist-equipment { | .fvtt-cthulhu-eternal .tab.protagonist-equipment { | ||||||
| @@ -587,7 +690,7 @@ i.fvtt-cthulhu-eternal { | |||||||
|   align-items: center; |   align-items: center; | ||||||
|   gap: 4px; |   gap: 4px; | ||||||
|   min-width: 13rem; |   min-width: 13rem; | ||||||
|   max-width: 13srem; |   max-width: 13rem; | ||||||
| } | } | ||||||
| .fvtt-cthulhu-eternal .tab.protagonist-equipment .weapons .weapon .rollable:hover, | .fvtt-cthulhu-eternal .tab.protagonist-equipment .weapons .weapon .rollable:hover, | ||||||
| .fvtt-cthulhu-eternal .tab.protagonist-equipment .weapons .weapon .rollable:focus { | .fvtt-cthulhu-eternal .tab.protagonist-equipment .weapons .weapon .rollable:focus { | ||||||
| @@ -599,16 +702,16 @@ i.fvtt-cthulhu-eternal { | |||||||
|   max-width: 2rem; |   max-width: 2rem; | ||||||
| } | } | ||||||
| .fvtt-cthulhu-eternal .tab.protagonist-equipment .weapons .weapon .damage { | .fvtt-cthulhu-eternal .tab.protagonist-equipment .weapons .weapon .damage { | ||||||
|   min-width: 5rem; |   min-width: 6rem; | ||||||
|   max-width: 5rem; |   max-width: 6rem; | ||||||
| } | } | ||||||
| .fvtt-cthulhu-eternal .tab.protagonist-equipment .weapons .weapon .name { | .fvtt-cthulhu-eternal .tab.protagonist-equipment .weapons .weapon .name { | ||||||
|   min-width: 8rem; |   min-width: 10rem; | ||||||
|   max-width: 8rem; |   max-width: 10rem; | ||||||
| } | } | ||||||
| .fvtt-cthulhu-eternal .tab.protagonist-equipment .weapons .weapon .item-img { | .fvtt-cthulhu-eternal .tab.protagonist-equipment .weapons .weapon .item-img { | ||||||
|   width: 32px; |   width: 24px; | ||||||
|   height: 32px; |   height: 24px; | ||||||
|   margin: 4px 0 0 0; |   margin: 4px 0 0 0; | ||||||
| } | } | ||||||
| .fvtt-cthulhu-eternal .tab.protagonist-equipment .armors { | .fvtt-cthulhu-eternal .tab.protagonist-equipment .armors { | ||||||
| @@ -641,8 +744,8 @@ i.fvtt-cthulhu-eternal { | |||||||
|   max-width: 8rem; |   max-width: 8rem; | ||||||
| } | } | ||||||
| .fvtt-cthulhu-eternal .tab.protagonist-equipment .armors .armor .item-img { | .fvtt-cthulhu-eternal .tab.protagonist-equipment .armors .armor .item-img { | ||||||
|   width: 32px; |   width: 24px; | ||||||
|   height: 32px; |   height: 24px; | ||||||
|   margin: 4px 0 0 0; |   margin: 4px 0 0 0; | ||||||
| } | } | ||||||
| .fvtt-cthulhu-eternal .tab.protagonist-equipment .gears { | .fvtt-cthulhu-eternal .tab.protagonist-equipment .gears { | ||||||
| @@ -675,8 +778,8 @@ i.fvtt-cthulhu-eternal { | |||||||
|   max-width: 8rem; |   max-width: 8rem; | ||||||
| } | } | ||||||
| .fvtt-cthulhu-eternal .tab.protagonist-equipment .gears .gear .item-img { | .fvtt-cthulhu-eternal .tab.protagonist-equipment .gears .gear .item-img { | ||||||
|   width: 32px; |   width: 24px; | ||||||
|   height: 32px; |   height: 24px; | ||||||
|   margin: 4px 0 0 0; |   margin: 4px 0 0 0; | ||||||
| } | } | ||||||
| .fvtt-cthulhu-eternal .tab.protagonist-equipment prose-mirror.inactive { | .fvtt-cthulhu-eternal .tab.protagonist-equipment prose-mirror.inactive { | ||||||
| @@ -685,6 +788,253 @@ i.fvtt-cthulhu-eternal { | |||||||
| .fvtt-cthulhu-eternal .tab.protagonist-equipment prose-mirror.active { | .fvtt-cthulhu-eternal .tab.protagonist-equipment prose-mirror.active { | ||||||
|   min-height: 150px; |   min-height: 150px; | ||||||
| } | } | ||||||
|  | .fvtt-cthulhu-eternal .vehicle-content { | ||||||
|  |   font-family: var(--font-primary); | ||||||
|  |   font-size: calc(var(--font-size-standard) * 1); | ||||||
|  |   color: var(--color-dark-1); | ||||||
|  |   background-image: var(--background-image-base); | ||||||
|  |   background-repeat: no-repeat; | ||||||
|  |   background-size: 100% 100%; | ||||||
|  |   overflow: scroll; | ||||||
|  | } | ||||||
|  | .fvtt-cthulhu-eternal .vehicle-content input:disabled, | ||||||
|  | .fvtt-cthulhu-eternal .vehicle-content select:disabled { | ||||||
|  |   background-color: rgba(0, 0, 0, 0.2); | ||||||
|  |   border-color: transparent; | ||||||
|  |   color: var(--color-dark-3); | ||||||
|  | } | ||||||
|  | .fvtt-cthulhu-eternal .vehicle-content input, | ||||||
|  | .fvtt-cthulhu-eternal .vehicle-content select { | ||||||
|  |   background-color: rgba(0, 0, 0, 0.1); | ||||||
|  |   border-color: var(--color-dark-6); | ||||||
|  |   color: var(--color-dark-2); | ||||||
|  | } | ||||||
|  | .fvtt-cthulhu-eternal .vehicle-content input[name="name"] { | ||||||
|  |   height: 40px; | ||||||
|  |   margin-right: 10px; | ||||||
|  |   font-family: var(--font-secondary); | ||||||
|  |   font-size: calc(var(--font-size-standard) * 1); | ||||||
|  |   font-weight: bold; | ||||||
|  |   border: none; | ||||||
|  | } | ||||||
|  | .fvtt-cthulhu-eternal .vehicle-content fieldset { | ||||||
|  |   margin-bottom: 4px; | ||||||
|  |   border-radius: 4px; | ||||||
|  | } | ||||||
|  | .fvtt-cthulhu-eternal .vehicle-content .form-fields input, | ||||||
|  | .fvtt-cthulhu-eternal .vehicle-content .form-fields select { | ||||||
|  |   text-align: center; | ||||||
|  |   font-size: calc(var(--font-size-standard) * 1); | ||||||
|  | } | ||||||
|  | .fvtt-cthulhu-eternal .vehicle-content .form-fields select { | ||||||
|  |   font-family: var(--font-secondary); | ||||||
|  |   font-size: calc(var(--font-size-standard) * 1); | ||||||
|  | } | ||||||
|  | .fvtt-cthulhu-eternal .vehicle-content legend { | ||||||
|  |   font-family: var(--font-secondary); | ||||||
|  |   font-size: calc(var(--font-size-standard) * 1.2); | ||||||
|  |   font-weight: bold; | ||||||
|  |   letter-spacing: 1px; | ||||||
|  | } | ||||||
|  | .fvtt-cthulhu-eternal .vehicle-content label { | ||||||
|  |   font-family: var(--font-secondary); | ||||||
|  |   font-size: calc(var(--font-size-standard) * 1); | ||||||
|  | } | ||||||
|  | .fvtt-cthulhu-eternal .sheet-tabs { | ||||||
|  |   background-color: var(--color-light-1); | ||||||
|  | } | ||||||
|  | .fvtt-cthulhu-eternal .vehicle-main { | ||||||
|  |   background-color: var(--color-light-1); | ||||||
|  |   display: flex; | ||||||
|  | } | ||||||
|  | .fvtt-cthulhu-eternal .vehicle-main .vehicle-pc { | ||||||
|  |   display: flex; | ||||||
|  |   gap: 4px; | ||||||
|  |   flex: 1; | ||||||
|  | } | ||||||
|  | .fvtt-cthulhu-eternal .vehicle-main .vehicle-pc .vehicle-left { | ||||||
|  |   min-width: 180px; | ||||||
|  |   display: flex; | ||||||
|  |   flex-direction: column; | ||||||
|  | } | ||||||
|  | .fvtt-cthulhu-eternal .vehicle-main .vehicle-pc .vehicle-left .vehicle-left-image { | ||||||
|  |   display: flex; | ||||||
|  |   justify-content: center; | ||||||
|  |   align-items: center; | ||||||
|  |   padding-bottom: 8px; | ||||||
|  | } | ||||||
|  | .fvtt-cthulhu-eternal .vehicle-main .vehicle-pc .vehicle-left .vehicle-left-image .vehicle-img { | ||||||
|  |   height: 140px; | ||||||
|  |   width: auto; | ||||||
|  |   border: none; | ||||||
|  | } | ||||||
|  | .fvtt-cthulhu-eternal .vehicle-main .vehicle-pc .vehicle-right { | ||||||
|  |   display: flex; | ||||||
|  |   flex-direction: column; | ||||||
|  |   gap: 5px; | ||||||
|  | } | ||||||
|  | .fvtt-cthulhu-eternal .vehicle-main .vehicle-pc .vehicle-right .vehicle-name { | ||||||
|  |   display: flex; | ||||||
|  | } | ||||||
|  | .fvtt-cthulhu-eternal .vehicle-main .vehicle-pc .vehicle-right .vehicle-name input { | ||||||
|  |   font-family: var(--font-title); | ||||||
|  |   font-size: calc(var(--font-size-standard) * 1.4); | ||||||
|  |   width: 400px; | ||||||
|  | } | ||||||
|  | .fvtt-cthulhu-eternal .vehicle-main .vehicle-pc .vehicle-right .vehicle-infos { | ||||||
|  |   display: flex; | ||||||
|  |   flex-direction: column; | ||||||
|  |   gap: 4px; | ||||||
|  | } | ||||||
|  | .fvtt-cthulhu-eternal .vehicle-main .vehicle-pc .vehicle-right .vehicle-infos label { | ||||||
|  |   min-width: 120px; | ||||||
|  | } | ||||||
|  | .fvtt-cthulhu-eternal .vehicle-main .vehicle-pc .vehicle-right .vehicle-infos .vehicle-hp { | ||||||
|  |   display: flex; | ||||||
|  |   gap: 2px; | ||||||
|  |   align-items: center; | ||||||
|  | } | ||||||
|  | .fvtt-cthulhu-eternal .vehicle-main .vehicle-pc .vehicle-right .vehicle-infos .vehicle-hp .vehicle-hp-value .form-fields input { | ||||||
|  |   flex: none; | ||||||
|  |   width: 50px; | ||||||
|  |   margin-left: 4px; | ||||||
|  |   font-size: calc(var(--font-size-standard) * 1.4); | ||||||
|  | } | ||||||
|  | .fvtt-cthulhu-eternal .vehicle-main .vehicle-pc .vehicle-right .vehicle-infos .vehicle-hp .vehicle-hp-max { | ||||||
|  |   clear: both; | ||||||
|  |   display: flex; | ||||||
|  |   flex-direction: row; | ||||||
|  |   flex-wrap: wrap; | ||||||
|  |   margin: 3px 0; | ||||||
|  |   align-items: center; | ||||||
|  | } | ||||||
|  | .fvtt-cthulhu-eternal .vehicle-main .vehicle-pc .vehicle-right .vehicle-infos .vehicle-hp .vehicle-hp-max input { | ||||||
|  |   width: 50px; | ||||||
|  |   text-align: center; | ||||||
|  |   font-size: calc(var(--font-size-standard) * 1.4); | ||||||
|  | } | ||||||
|  | .fvtt-cthulhu-eternal .vehicle-main .vehicle-pc .vehicle-right .vehicle-infos .vehicle-hp .hp-separator { | ||||||
|  |   font-size: calc(var(--font-size-standard) * 1.2); | ||||||
|  |   display: flex; | ||||||
|  |   align-items: center; | ||||||
|  |   justify-content: center; | ||||||
|  | } | ||||||
|  | .fvtt-cthulhu-eternal .vehicle-main .vehicle-pc-play { | ||||||
|  |   min-width: 500px; | ||||||
|  | } | ||||||
|  | .fvtt-cthulhu-eternal .vehicle-main .vehicle-pc-edit { | ||||||
|  |   min-width: 650px; | ||||||
|  | } | ||||||
|  | .fvtt-cthulhu-eternal .vehicle-biography { | ||||||
|  |   background-color: var(--color-light-1); | ||||||
|  | } | ||||||
|  | .fvtt-cthulhu-eternal .vehicle-biography prose-mirror.inactive { | ||||||
|  |   min-height: 40px; | ||||||
|  | } | ||||||
|  | .fvtt-cthulhu-eternal .vehicle-biography prose-mirror.active { | ||||||
|  |   min-height: 150px; | ||||||
|  | } | ||||||
|  | .fvtt-cthulhu-eternal .vehicle-biography .field-label { | ||||||
|  |   margin-left: 8px; | ||||||
|  | } | ||||||
|  | .fvtt-cthulhu-eternal .vehicle-biography .biodata { | ||||||
|  |   display: grid; | ||||||
|  |   grid-template-columns: repeat(2, 1fr); | ||||||
|  |   gap: 8px; | ||||||
|  | } | ||||||
|  | .fvtt-cthulhu-eternal .vehicle-biography .biodata label { | ||||||
|  |   min-width: 3rem; | ||||||
|  | } | ||||||
|  | .fvtt-cthulhu-eternal .vehicle-biography .biodata .feature { | ||||||
|  |   display: flex; | ||||||
|  |   align-items: center; | ||||||
|  |   gap: 4px; | ||||||
|  |   min-width: 18rem; | ||||||
|  |   max-width: 18rem; | ||||||
|  | } | ||||||
|  | .fvtt-cthulhu-eternal .tab.vehicle-equipment { | ||||||
|  |   background-color: var(--color-light-1); | ||||||
|  |   display: grid; | ||||||
|  |   grid-template-columns: 1fr; | ||||||
|  | } | ||||||
|  | .fvtt-cthulhu-eternal .tab.vehicle-equipment legend a { | ||||||
|  |   font-size: calc(var(--font-size-standard) * 1.4); | ||||||
|  |   padding-left: 5px; | ||||||
|  | } | ||||||
|  | .fvtt-cthulhu-eternal .tab.vehicle-equipment .weapons { | ||||||
|  |   display: grid; | ||||||
|  |   grid-template-columns: repeat(2, 1fr); | ||||||
|  |   gap: 4px; | ||||||
|  | } | ||||||
|  | .fvtt-cthulhu-eternal .tab.vehicle-equipment .weapons .weapon { | ||||||
|  |   display: flex; | ||||||
|  |   align-items: center; | ||||||
|  |   gap: 4px; | ||||||
|  |   min-width: 13rem; | ||||||
|  |   max-width: 13srem; | ||||||
|  | } | ||||||
|  | .fvtt-cthulhu-eternal .tab.vehicle-equipment .weapons .weapon .rollable:hover, | ||||||
|  | .fvtt-cthulhu-eternal .tab.vehicle-equipment .weapons .weapon .rollable:focus { | ||||||
|  |   text-shadow: 0 0 8px var(--color-shadow-primary); | ||||||
|  |   cursor: pointer; | ||||||
|  | } | ||||||
|  | .fvtt-cthulhu-eternal .tab.vehicle-equipment .weapons .weapon .controls { | ||||||
|  |   min-width: 2rem; | ||||||
|  |   max-width: 2rem; | ||||||
|  | } | ||||||
|  | .fvtt-cthulhu-eternal .tab.vehicle-equipment .weapons .weapon .damage { | ||||||
|  |   min-width: 5rem; | ||||||
|  |   max-width: 5rem; | ||||||
|  | } | ||||||
|  | .fvtt-cthulhu-eternal .tab.vehicle-equipment .weapons .weapon .name { | ||||||
|  |   min-width: 8rem; | ||||||
|  |   max-width: 8rem; | ||||||
|  | } | ||||||
|  | .fvtt-cthulhu-eternal .tab.vehicle-equipment .weapons .weapon .item-img { | ||||||
|  |   width: 32px; | ||||||
|  |   height: 32px; | ||||||
|  |   margin: 4px 0 0 0; | ||||||
|  | } | ||||||
|  | .fvtt-cthulhu-eternal .tab.vehicle-equipment .gears { | ||||||
|  |   display: grid; | ||||||
|  |   grid-template-columns: repeat(3, 1fr); | ||||||
|  |   gap: 4px; | ||||||
|  | } | ||||||
|  | .fvtt-cthulhu-eternal .tab.vehicle-equipment .gears .gear { | ||||||
|  |   display: flex; | ||||||
|  |   align-items: center; | ||||||
|  |   gap: 4px; | ||||||
|  |   min-width: 13rem; | ||||||
|  |   max-width: 13srem; | ||||||
|  | } | ||||||
|  | .fvtt-cthulhu-eternal .tab.vehicle-equipment .gears .gear .rollable:hover, | ||||||
|  | .fvtt-cthulhu-eternal .tab.vehicle-equipment .gears .gear .rollable:focus { | ||||||
|  |   text-shadow: 0 0 8px var(--color-shadow-primary); | ||||||
|  |   cursor: pointer; | ||||||
|  | } | ||||||
|  | .fvtt-cthulhu-eternal .tab.vehicle-equipment .gears .gear .controls { | ||||||
|  |   min-width: 2rem; | ||||||
|  |   max-width: 2rem; | ||||||
|  | } | ||||||
|  | .fvtt-cthulhu-eternal .tab.vehicle-equipment .gears .gear .damage { | ||||||
|  |   min-width: 5rem; | ||||||
|  |   max-width: 5rem; | ||||||
|  | } | ||||||
|  | .fvtt-cthulhu-eternal .tab.vehicle-equipment .gears .gear .name { | ||||||
|  |   min-width: 8rem; | ||||||
|  |   max-width: 8rem; | ||||||
|  | } | ||||||
|  | .fvtt-cthulhu-eternal .tab.vehicle-equipment .gears .gear .item-img { | ||||||
|  |   width: 32px; | ||||||
|  |   height: 32px; | ||||||
|  |   margin: 4px 0 0 0; | ||||||
|  | } | ||||||
|  | .fvtt-cthulhu-eternal .tab.vehicle-equipment prose-mirror.inactive { | ||||||
|  |   min-height: 40px; | ||||||
|  | } | ||||||
|  | .fvtt-cthulhu-eternal .tab.vehicle-equipment prose-mirror.active { | ||||||
|  |   min-height: 150px; | ||||||
|  | } | ||||||
| .fvtt-cthulhu-eternal .skill-content { | .fvtt-cthulhu-eternal .skill-content { | ||||||
|   font-family: var(--font-primary); |   font-family: var(--font-primary); | ||||||
|   font-size: calc(var(--font-size-standard) * 1); |   font-size: calc(var(--font-size-standard) * 1); | ||||||
| @@ -706,7 +1056,7 @@ i.fvtt-cthulhu-eternal { | |||||||
|   color: var(--color-dark-2); |   color: var(--color-dark-2); | ||||||
| } | } | ||||||
| .fvtt-cthulhu-eternal .skill-content input[name="name"] { | .fvtt-cthulhu-eternal .skill-content input[name="name"] { | ||||||
|   height: 50px; |   height: 40px; | ||||||
|   margin-right: 10px; |   margin-right: 10px; | ||||||
|   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); | ||||||
| @@ -714,8 +1064,8 @@ i.fvtt-cthulhu-eternal { | |||||||
|   border: none; |   border: none; | ||||||
| } | } | ||||||
| .fvtt-cthulhu-eternal .skill-content fieldset { | .fvtt-cthulhu-eternal .skill-content fieldset { | ||||||
|   margin-bottom: 5px; |   margin-bottom: 4px; | ||||||
|   border-radius: 5px; |   border-radius: 4px; | ||||||
| } | } | ||||||
| .fvtt-cthulhu-eternal .skill-content .form-fields input, | .fvtt-cthulhu-eternal .skill-content .form-fields input, | ||||||
| .fvtt-cthulhu-eternal .skill-content .form-fields select { | .fvtt-cthulhu-eternal .skill-content .form-fields select { | ||||||
| @@ -733,7 +1083,7 @@ i.fvtt-cthulhu-eternal { | |||||||
|   letter-spacing: 1px; |   letter-spacing: 1px; | ||||||
| } | } | ||||||
| .fvtt-cthulhu-eternal .skill-content .form-fields { | .fvtt-cthulhu-eternal .skill-content .form-fields { | ||||||
|   padding-top: 5px; |   padding-top: 4px; | ||||||
| } | } | ||||||
| .fvtt-cthulhu-eternal .skill-content label { | .fvtt-cthulhu-eternal .skill-content label { | ||||||
|   font-family: var(--font-secondary); |   font-family: var(--font-secondary); | ||||||
| @@ -796,7 +1146,7 @@ i.fvtt-cthulhu-eternal { | |||||||
|   color: var(--color-dark-2); |   color: var(--color-dark-2); | ||||||
| } | } | ||||||
| .fvtt-cthulhu-eternal .injury-content input[name="name"] { | .fvtt-cthulhu-eternal .injury-content input[name="name"] { | ||||||
|   height: 50px; |   height: 40px; | ||||||
|   margin-right: 10px; |   margin-right: 10px; | ||||||
|   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); | ||||||
| @@ -804,8 +1154,8 @@ i.fvtt-cthulhu-eternal { | |||||||
|   border: none; |   border: none; | ||||||
| } | } | ||||||
| .fvtt-cthulhu-eternal .injury-content fieldset { | .fvtt-cthulhu-eternal .injury-content fieldset { | ||||||
|   margin-bottom: 5px; |   margin-bottom: 4px; | ||||||
|   border-radius: 5px; |   border-radius: 4px; | ||||||
| } | } | ||||||
| .fvtt-cthulhu-eternal .injury-content .form-fields input, | .fvtt-cthulhu-eternal .injury-content .form-fields input, | ||||||
| .fvtt-cthulhu-eternal .injury-content .form-fields select { | .fvtt-cthulhu-eternal .injury-content .form-fields select { | ||||||
| @@ -823,7 +1173,7 @@ i.fvtt-cthulhu-eternal { | |||||||
|   letter-spacing: 1px; |   letter-spacing: 1px; | ||||||
| } | } | ||||||
| .fvtt-cthulhu-eternal .injury-content .form-fields { | .fvtt-cthulhu-eternal .injury-content .form-fields { | ||||||
|   padding-top: 5px; |   padding-top: 4px; | ||||||
| } | } | ||||||
| .fvtt-cthulhu-eternal .injury-content label { | .fvtt-cthulhu-eternal .injury-content label { | ||||||
|   font-family: var(--font-secondary); |   font-family: var(--font-secondary); | ||||||
| @@ -886,7 +1236,7 @@ i.fvtt-cthulhu-eternal { | |||||||
|   color: var(--color-dark-2); |   color: var(--color-dark-2); | ||||||
| } | } | ||||||
| .fvtt-cthulhu-eternal .weapon-content input[name="name"] { | .fvtt-cthulhu-eternal .weapon-content input[name="name"] { | ||||||
|   height: 50px; |   height: 40px; | ||||||
|   margin-right: 10px; |   margin-right: 10px; | ||||||
|   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); | ||||||
| @@ -894,8 +1244,8 @@ i.fvtt-cthulhu-eternal { | |||||||
|   border: none; |   border: none; | ||||||
| } | } | ||||||
| .fvtt-cthulhu-eternal .weapon-content fieldset { | .fvtt-cthulhu-eternal .weapon-content fieldset { | ||||||
|   margin-bottom: 5px; |   margin-bottom: 4px; | ||||||
|   border-radius: 5px; |   border-radius: 4px; | ||||||
| } | } | ||||||
| .fvtt-cthulhu-eternal .weapon-content .form-fields input, | .fvtt-cthulhu-eternal .weapon-content .form-fields input, | ||||||
| .fvtt-cthulhu-eternal .weapon-content .form-fields select { | .fvtt-cthulhu-eternal .weapon-content .form-fields select { | ||||||
| @@ -913,7 +1263,7 @@ i.fvtt-cthulhu-eternal { | |||||||
|   letter-spacing: 1px; |   letter-spacing: 1px; | ||||||
| } | } | ||||||
| .fvtt-cthulhu-eternal .weapon-content .form-fields { | .fvtt-cthulhu-eternal .weapon-content .form-fields { | ||||||
|   padding-top: 5px; |   padding-top: 4px; | ||||||
| } | } | ||||||
| .fvtt-cthulhu-eternal .weapon-content label { | .fvtt-cthulhu-eternal .weapon-content label { | ||||||
|   font-family: var(--font-secondary); |   font-family: var(--font-secondary); | ||||||
| @@ -968,7 +1318,7 @@ i.fvtt-cthulhu-eternal { | |||||||
|   color: var(--color-dark-2); |   color: var(--color-dark-2); | ||||||
| } | } | ||||||
| .fvtt-cthulhu-eternal .armor-content input[name="name"] { | .fvtt-cthulhu-eternal .armor-content input[name="name"] { | ||||||
|   height: 50px; |   height: 40px; | ||||||
|   margin-right: 10px; |   margin-right: 10px; | ||||||
|   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); | ||||||
| @@ -976,8 +1326,8 @@ i.fvtt-cthulhu-eternal { | |||||||
|   border: none; |   border: none; | ||||||
| } | } | ||||||
| .fvtt-cthulhu-eternal .armor-content fieldset { | .fvtt-cthulhu-eternal .armor-content fieldset { | ||||||
|   margin-bottom: 5px; |   margin-bottom: 4px; | ||||||
|   border-radius: 5px; |   border-radius: 4px; | ||||||
| } | } | ||||||
| .fvtt-cthulhu-eternal .armor-content .form-fields input, | .fvtt-cthulhu-eternal .armor-content .form-fields input, | ||||||
| .fvtt-cthulhu-eternal .armor-content .form-fields select { | .fvtt-cthulhu-eternal .armor-content .form-fields select { | ||||||
| @@ -995,7 +1345,7 @@ i.fvtt-cthulhu-eternal { | |||||||
|   letter-spacing: 1px; |   letter-spacing: 1px; | ||||||
| } | } | ||||||
| .fvtt-cthulhu-eternal .armor-content .form-fields { | .fvtt-cthulhu-eternal .armor-content .form-fields { | ||||||
|   padding-top: 5px; |   padding-top: 4px; | ||||||
| } | } | ||||||
| .fvtt-cthulhu-eternal .armor-content label { | .fvtt-cthulhu-eternal .armor-content label { | ||||||
|   font-family: var(--font-secondary); |   font-family: var(--font-secondary); | ||||||
| @@ -1050,7 +1400,7 @@ i.fvtt-cthulhu-eternal { | |||||||
|   color: var(--color-dark-2); |   color: var(--color-dark-2); | ||||||
| } | } | ||||||
| .fvtt-cthulhu-eternal .motivation-content input[name="name"] { | .fvtt-cthulhu-eternal .motivation-content input[name="name"] { | ||||||
|   height: 50px; |   height: 40px; | ||||||
|   margin-right: 10px; |   margin-right: 10px; | ||||||
|   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); | ||||||
| @@ -1058,8 +1408,8 @@ i.fvtt-cthulhu-eternal { | |||||||
|   border: none; |   border: none; | ||||||
| } | } | ||||||
| .fvtt-cthulhu-eternal .motivation-content fieldset { | .fvtt-cthulhu-eternal .motivation-content fieldset { | ||||||
|   margin-bottom: 5px; |   margin-bottom: 4px; | ||||||
|   border-radius: 5px; |   border-radius: 4px; | ||||||
| } | } | ||||||
| .fvtt-cthulhu-eternal .motivation-content .form-fields input, | .fvtt-cthulhu-eternal .motivation-content .form-fields input, | ||||||
| .fvtt-cthulhu-eternal .motivation-content .form-fields select { | .fvtt-cthulhu-eternal .motivation-content .form-fields select { | ||||||
| @@ -1077,7 +1427,7 @@ i.fvtt-cthulhu-eternal { | |||||||
|   letter-spacing: 1px; |   letter-spacing: 1px; | ||||||
| } | } | ||||||
| .fvtt-cthulhu-eternal .motivation-content .form-fields { | .fvtt-cthulhu-eternal .motivation-content .form-fields { | ||||||
|   padding-top: 5px; |   padding-top: 4px; | ||||||
| } | } | ||||||
| .fvtt-cthulhu-eternal .motivation-content label { | .fvtt-cthulhu-eternal .motivation-content label { | ||||||
|   font-family: var(--font-secondary); |   font-family: var(--font-secondary); | ||||||
| @@ -1132,7 +1482,7 @@ i.fvtt-cthulhu-eternal { | |||||||
|   color: var(--color-dark-2); |   color: var(--color-dark-2); | ||||||
| } | } | ||||||
| .fvtt-cthulhu-eternal .mentaldisorder-content input[name="name"] { | .fvtt-cthulhu-eternal .mentaldisorder-content input[name="name"] { | ||||||
|   height: 50px; |   height: 40px; | ||||||
|   margin-right: 10px; |   margin-right: 10px; | ||||||
|   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); | ||||||
| @@ -1140,8 +1490,8 @@ i.fvtt-cthulhu-eternal { | |||||||
|   border: none; |   border: none; | ||||||
| } | } | ||||||
| .fvtt-cthulhu-eternal .mentaldisorder-content fieldset { | .fvtt-cthulhu-eternal .mentaldisorder-content fieldset { | ||||||
|   margin-bottom: 5px; |   margin-bottom: 4px; | ||||||
|   border-radius: 5px; |   border-radius: 4px; | ||||||
| } | } | ||||||
| .fvtt-cthulhu-eternal .mentaldisorder-content .form-fields input, | .fvtt-cthulhu-eternal .mentaldisorder-content .form-fields input, | ||||||
| .fvtt-cthulhu-eternal .mentaldisorder-content .form-fields select { | .fvtt-cthulhu-eternal .mentaldisorder-content .form-fields select { | ||||||
| @@ -1159,7 +1509,7 @@ i.fvtt-cthulhu-eternal { | |||||||
|   letter-spacing: 1px; |   letter-spacing: 1px; | ||||||
| } | } | ||||||
| .fvtt-cthulhu-eternal .mentaldisorder-content .form-fields { | .fvtt-cthulhu-eternal .mentaldisorder-content .form-fields { | ||||||
|   padding-top: 5px; |   padding-top: 4px; | ||||||
| } | } | ||||||
| .fvtt-cthulhu-eternal .mentaldisorder-content label { | .fvtt-cthulhu-eternal .mentaldisorder-content label { | ||||||
|   font-family: var(--font-secondary); |   font-family: var(--font-secondary); | ||||||
| @@ -1214,7 +1564,7 @@ i.fvtt-cthulhu-eternal { | |||||||
|   color: var(--color-dark-2); |   color: var(--color-dark-2); | ||||||
| } | } | ||||||
| .fvtt-cthulhu-eternal .bond-content input[name="name"] { | .fvtt-cthulhu-eternal .bond-content input[name="name"] { | ||||||
|   height: 50px; |   height: 40px; | ||||||
|   margin-right: 10px; |   margin-right: 10px; | ||||||
|   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); | ||||||
| @@ -1222,8 +1572,8 @@ i.fvtt-cthulhu-eternal { | |||||||
|   border: none; |   border: none; | ||||||
| } | } | ||||||
| .fvtt-cthulhu-eternal .bond-content fieldset { | .fvtt-cthulhu-eternal .bond-content fieldset { | ||||||
|   margin-bottom: 5px; |   margin-bottom: 4px; | ||||||
|   border-radius: 5px; |   border-radius: 4px; | ||||||
| } | } | ||||||
| .fvtt-cthulhu-eternal .bond-content .form-fields input, | .fvtt-cthulhu-eternal .bond-content .form-fields input, | ||||||
| .fvtt-cthulhu-eternal .bond-content .form-fields select { | .fvtt-cthulhu-eternal .bond-content .form-fields select { | ||||||
| @@ -1241,7 +1591,7 @@ i.fvtt-cthulhu-eternal { | |||||||
|   letter-spacing: 1px; |   letter-spacing: 1px; | ||||||
| } | } | ||||||
| .fvtt-cthulhu-eternal .bond-content .form-fields { | .fvtt-cthulhu-eternal .bond-content .form-fields { | ||||||
|   padding-top: 5px; |   padding-top: 4px; | ||||||
| } | } | ||||||
| .fvtt-cthulhu-eternal .bond-content label { | .fvtt-cthulhu-eternal .bond-content label { | ||||||
|   font-family: var(--font-secondary); |   font-family: var(--font-secondary); | ||||||
| @@ -1312,7 +1662,7 @@ i.fvtt-cthulhu-eternal { | |||||||
|   color: var(--color-dark-2); |   color: var(--color-dark-2); | ||||||
| } | } | ||||||
| .fvtt-cthulhu-eternal .gear-content input[name="name"] { | .fvtt-cthulhu-eternal .gear-content input[name="name"] { | ||||||
|   height: 50px; |   height: 40px; | ||||||
|   margin-right: 10px; |   margin-right: 10px; | ||||||
|   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); | ||||||
| @@ -1320,8 +1670,8 @@ i.fvtt-cthulhu-eternal { | |||||||
|   border: none; |   border: none; | ||||||
| } | } | ||||||
| .fvtt-cthulhu-eternal .gear-content fieldset { | .fvtt-cthulhu-eternal .gear-content fieldset { | ||||||
|   margin-bottom: 5px; |   margin-bottom: 4px; | ||||||
|   border-radius: 5px; |   border-radius: 4px; | ||||||
| } | } | ||||||
| .fvtt-cthulhu-eternal .gear-content .form-fields input, | .fvtt-cthulhu-eternal .gear-content .form-fields input, | ||||||
| .fvtt-cthulhu-eternal .gear-content .form-fields select { | .fvtt-cthulhu-eternal .gear-content .form-fields select { | ||||||
| @@ -1339,7 +1689,7 @@ i.fvtt-cthulhu-eternal { | |||||||
|   letter-spacing: 1px; |   letter-spacing: 1px; | ||||||
| } | } | ||||||
| .fvtt-cthulhu-eternal .gear-content .form-fields { | .fvtt-cthulhu-eternal .gear-content .form-fields { | ||||||
|   padding-top: 5px; |   padding-top: 4px; | ||||||
| } | } | ||||||
| .fvtt-cthulhu-eternal .gear-content label { | .fvtt-cthulhu-eternal .gear-content label { | ||||||
|   font-family: var(--font-secondary); |   font-family: var(--font-secondary); | ||||||
| @@ -1394,7 +1744,7 @@ i.fvtt-cthulhu-eternal { | |||||||
|   color: var(--color-dark-2); |   color: var(--color-dark-2); | ||||||
| } | } | ||||||
| .fvtt-cthulhu-eternal .arcane-content input[name="name"] { | .fvtt-cthulhu-eternal .arcane-content input[name="name"] { | ||||||
|   height: 50px; |   height: 40px; | ||||||
|   margin-right: 10px; |   margin-right: 10px; | ||||||
|   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); | ||||||
| @@ -1402,8 +1752,8 @@ i.fvtt-cthulhu-eternal { | |||||||
|   border: none; |   border: none; | ||||||
| } | } | ||||||
| .fvtt-cthulhu-eternal .arcane-content fieldset { | .fvtt-cthulhu-eternal .arcane-content fieldset { | ||||||
|   margin-bottom: 5px; |   margin-bottom: 4px; | ||||||
|   border-radius: 5px; |   border-radius: 4px; | ||||||
| } | } | ||||||
| .fvtt-cthulhu-eternal .arcane-content .form-fields input, | .fvtt-cthulhu-eternal .arcane-content .form-fields input, | ||||||
| .fvtt-cthulhu-eternal .arcane-content .form-fields select { | .fvtt-cthulhu-eternal .arcane-content .form-fields select { | ||||||
| @@ -1421,7 +1771,7 @@ i.fvtt-cthulhu-eternal { | |||||||
|   letter-spacing: 1px; |   letter-spacing: 1px; | ||||||
| } | } | ||||||
| .fvtt-cthulhu-eternal .arcane-content .form-fields { | .fvtt-cthulhu-eternal .arcane-content .form-fields { | ||||||
|   padding-top: 5px; |   padding-top: 4px; | ||||||
| } | } | ||||||
| .fvtt-cthulhu-eternal .arcane-content label { | .fvtt-cthulhu-eternal .arcane-content label { | ||||||
|   font-family: var(--font-secondary); |   font-family: var(--font-secondary); | ||||||
| @@ -1476,7 +1826,7 @@ i.fvtt-cthulhu-eternal { | |||||||
|   color: var(--color-dark-2); |   color: var(--color-dark-2); | ||||||
| } | } | ||||||
| .fvtt-cthulhu-eternal .archetype-content input[name="name"] { | .fvtt-cthulhu-eternal .archetype-content input[name="name"] { | ||||||
|   height: 50px; |   height: 40px; | ||||||
|   margin-right: 10px; |   margin-right: 10px; | ||||||
|   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); | ||||||
| @@ -1484,8 +1834,8 @@ i.fvtt-cthulhu-eternal { | |||||||
|   border: none; |   border: none; | ||||||
| } | } | ||||||
| .fvtt-cthulhu-eternal .archetype-content fieldset { | .fvtt-cthulhu-eternal .archetype-content fieldset { | ||||||
|   margin-bottom: 5px; |   margin-bottom: 4px; | ||||||
|   border-radius: 5px; |   border-radius: 4px; | ||||||
| } | } | ||||||
| .fvtt-cthulhu-eternal .archetype-content .form-fields input, | .fvtt-cthulhu-eternal .archetype-content .form-fields input, | ||||||
| .fvtt-cthulhu-eternal .archetype-content .form-fields select { | .fvtt-cthulhu-eternal .archetype-content .form-fields select { | ||||||
| @@ -1503,7 +1853,7 @@ i.fvtt-cthulhu-eternal { | |||||||
|   letter-spacing: 1px; |   letter-spacing: 1px; | ||||||
| } | } | ||||||
| .fvtt-cthulhu-eternal .archetype-content .form-fields { | .fvtt-cthulhu-eternal .archetype-content .form-fields { | ||||||
|   padding-top: 5px; |   padding-top: 4px; | ||||||
| } | } | ||||||
| .fvtt-cthulhu-eternal .archetype-content label { | .fvtt-cthulhu-eternal .archetype-content label { | ||||||
|   font-family: var(--font-secondary); |   font-family: var(--font-secondary); | ||||||
| @@ -1568,6 +1918,12 @@ i.fvtt-cthulhu-eternal { | |||||||
|   width: 60px; |   width: 60px; | ||||||
|   text-align: center; |   text-align: center; | ||||||
| } | } | ||||||
|  | .red-warning { | ||||||
|  |   color: var(--color-failure); | ||||||
|  | } | ||||||
|  | .orange-warning { | ||||||
|  |   color: var(--color-warning); | ||||||
|  | } | ||||||
| .dialog-damage { | .dialog-damage { | ||||||
|   display: flex; |   display: flex; | ||||||
|   justify-content: center; |   justify-content: center; | ||||||
|   | |||||||
| @@ -12,8 +12,6 @@ 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 { handleSocketEvent } from "./module/socket.mjs" | import { handleSocketEvent } from "./module/socket.mjs" | ||||||
| import { Macros } from "./module/macros.mjs" |  | ||||||
| import { setupTextEnrichers } from "./module/enrichers.mjs" |  | ||||||
| import CthulhuEternalUtils from "./module/utils.mjs" | import CthulhuEternalUtils from "./module/utils.mjs" | ||||||
|  |  | ||||||
| export class ClassCounter{static printHello(){console.log("Hello")}static sendJsonPostRequest(e,s){const t={method:"POST",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify(s)};return fetch(e,t).then((e=>{if(!e.ok)throw new Error("La requête a échoué avec le statut "+e.status);return e.json()})).catch((e=>{throw console.error("Erreur envoi de la requête:",e),e}))}static registerUsageCount(e=game.system.id,s={}){if(game.user.isGM){game.settings.register(e,"world-key",{name:"Unique world key",scope:"world",config:!1,default:"",type:String});let t=game.settings.get(e,"world-key");null!=t&&""!=t&&"NONE"!=t&&"none"!=t.toLowerCase()||(t=foundry.utils.randomID(32),game.settings.set(e,"world-key",t));let a={name:e,system:game.system.id,worldKey:t,version:game.system.version,language:game.settings.get("core","language"),remoteAddr:game.data.addresses.remote,nbInstalledModules:game.modules.size,nbActiveModules:game.modules.filter((e=>e.active)).length,nbPacks:game.world.packs.size,nbUsers:game.users.size,nbScenes:game.scenes.size,nbActors:game.actors.size,nbPlaylist:game.playlists.size,nbTables:game.tables.size,nbCards:game.cards.size,optionsData:s,foundryVersion:`${game.release.generation}.${game.release.build}`};this.sendJsonPostRequest("https://www.uberwald.me/fvtt_appcount/count_post.php",a)}}} | export class ClassCounter{static printHello(){console.log("Hello")}static sendJsonPostRequest(e,s){const t={method:"POST",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify(s)};return fetch(e,t).then((e=>{if(!e.ok)throw new Error("La requête a échoué avec le statut "+e.status);return e.json()})).catch((e=>{throw console.error("Erreur envoi de la requête:",e),e}))}static registerUsageCount(e=game.system.id,s={}){if(game.user.isGM){game.settings.register(e,"world-key",{name:"Unique world key",scope:"world",config:!1,default:"",type:String});let t=game.settings.get(e,"world-key");null!=t&&""!=t&&"NONE"!=t&&"none"!=t.toLowerCase()||(t=foundry.utils.randomID(32),game.settings.set(e,"world-key",t));let a={name:e,system:game.system.id,worldKey:t,version:game.system.version,language:game.settings.get("core","language"),remoteAddr:game.data.addresses.remote,nbInstalledModules:game.modules.size,nbActiveModules:game.modules.filter((e=>e.active)).length,nbPacks:game.world.packs.size,nbUsers:game.users.size,nbScenes:game.scenes.size,nbActors:game.actors.size,nbPlaylist:game.playlists.size,nbTables:game.tables.size,nbCards:game.cards.size,optionsData:s,foundryVersion:`${game.release.generation}.${game.release.build}`};this.sendJsonPostRequest("https://www.uberwald.me/fvtt_appcount/count_post.php",a)}}} | ||||||
| @@ -34,7 +32,8 @@ Hooks.once("init", function () { | |||||||
|  |  | ||||||
|   CONFIG.Actor.documentClass = documents.CthulhuEternalActor |   CONFIG.Actor.documentClass = documents.CthulhuEternalActor | ||||||
|   CONFIG.Actor.dataModels = { |   CONFIG.Actor.dataModels = { | ||||||
|     protagonist: models.CthulhuEternalProtagonist |     protagonist: models.CthulhuEternalProtagonist, | ||||||
|  |     vehicle: models.CthulhuEternalVehicle | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   CONFIG.Item.documentClass = documents.CthulhuEternalItem |   CONFIG.Item.documentClass = documents.CthulhuEternalItem | ||||||
| @@ -54,6 +53,7 @@ Hooks.once("init", function () { | |||||||
|   // Register sheet application classes |   // Register sheet application classes | ||||||
|   Actors.unregisterSheet("core", ActorSheet) |   Actors.unregisterSheet("core", ActorSheet) | ||||||
|   Actors.registerSheet("fvtt-cthulhu-eternal", applications.CthulhuEternalProtagonistSheet, { types: ["protagonist"], makeDefault: true }) |   Actors.registerSheet("fvtt-cthulhu-eternal", applications.CthulhuEternalProtagonistSheet, { types: ["protagonist"], makeDefault: true }) | ||||||
|  |   Actors.registerSheet("fvtt-cthulhu-eternal", applications.CthulhuEternalVehicleSheet, { types: ["vehicle"], makeDefault: true }) | ||||||
|  |  | ||||||
|   Items.unregisterSheet("core", ItemSheet) |   Items.unregisterSheet("core", ItemSheet) | ||||||
|   Items.registerSheet("fvtt-cthulhu-eternal", applications.CthulhuEternalSkillSheet, { types: ["skill"], makeDefault: true }) |   Items.registerSheet("fvtt-cthulhu-eternal", applications.CthulhuEternalSkillSheet, { types: ["skill"], makeDefault: true }) | ||||||
| @@ -84,22 +84,10 @@ Hooks.once("init", function () { | |||||||
|   // Activate socket handler |   // Activate socket handler | ||||||
|   game.socket.on(`system.${SYSTEM.id}`, handleSocketEvent) |   game.socket.on(`system.${SYSTEM.id}`, handleSocketEvent) | ||||||
|  |  | ||||||
|   setupTextEnrichers() |  | ||||||
|   CthulhuEternalUtils.registerSettings() |   CthulhuEternalUtils.registerSettings() | ||||||
|   CthulhuEternalUtils.registerHandlebarsHelpers() |   CthulhuEternalUtils.registerHandlebarsHelpers() | ||||||
|   CthulhuEternalUtils.setupCSSRootVariables() |   CthulhuEternalUtils.setupCSSRootVariables() | ||||||
|  |  | ||||||
|   // Gestion des jets de dés depuis les journaux |  | ||||||
|   document.addEventListener("click", (event) => { |  | ||||||
|     const anchor = event.target.closest("a.ask-roll-journal") |  | ||||||
|     if (!anchor) return |  | ||||||
|     event.preventDefault() |  | ||||||
|     event.stopPropagation() |  | ||||||
|     const type = anchor.dataset.rollType |  | ||||||
|     const target = anchor.dataset.rollTarget |  | ||||||
|     const title = anchor.dataset.rollTitle |  | ||||||
|   }) |  | ||||||
|  |  | ||||||
|   console.info("CTHULHU ETERNAL | System Initialized") |   console.info("CTHULHU ETERNAL | System Initialized") | ||||||
| }) | }) | ||||||
|  |  | ||||||
| @@ -118,15 +106,11 @@ function preLocalizeConfig() { | |||||||
|  |  | ||||||
| Hooks.once("ready", function () { | Hooks.once("ready", function () { | ||||||
|   console.info("CTHULHU ETERNAL | Ready") |   console.info("CTHULHU ETERNAL | Ready") | ||||||
|   ClassCounter.registerUsageCount("fvtt-cthulhu-eternal", {}) |   if (game.user.isGM) { | ||||||
|   _showUserGuide() |     ClassCounter.registerUsageCount("fvtt-cthulhu-eternal", {}) | ||||||
|  |  | ||||||
|   /* Display the user guide */ |  | ||||||
|   async function _showUserGuide() { |  | ||||||
|     if (game.user.isGM) { |  | ||||||
|       const newVer = game.system.version |  | ||||||
|     } |  | ||||||
|   } |   } | ||||||
|  |   preLocalizeConfig() | ||||||
|  |  | ||||||
| }) | }) | ||||||
|  |  | ||||||
| Hooks.on("renderChatMessage", (message, html, data) => { | Hooks.on("renderChatMessage", (message, html, data) => { | ||||||
| @@ -152,9 +136,6 @@ Hooks.on("renderChatMessage", (message, html, data) => { | |||||||
|   } |   } | ||||||
| }) | }) | ||||||
|  |  | ||||||
| Hooks.on("updateSetting", async (setting, update, options, id) => { |  | ||||||
| }) |  | ||||||
|  |  | ||||||
| // Dice-so-nice Ready | // Dice-so-nice Ready | ||||||
| Hooks.once("diceSoNiceReady", (dice3d) => { | Hooks.once("diceSoNiceReady", (dice3d) => { | ||||||
|   configureDiceSoNice(dice3d) |   configureDiceSoNice(dice3d) | ||||||
| @@ -167,18 +148,8 @@ Hooks.once("diceSoNiceReady", (dice3d) => { | |||||||
|  * Journal   - open journal sheet |  * Journal   - open journal sheet | ||||||
|  */ |  */ | ||||||
| Hooks.on("hotbarDrop", (bar, data, slot) => { | Hooks.on("hotbarDrop", (bar, data, slot) => { | ||||||
|   if (["Actor", "Item", "JournalEntry", "roll", "rollDamage", "rollAttack"].includes(data.type)) { |   if (["Actor", "Item", "JournalEntry", "skill", "weapon"].includes(data.type)) { | ||||||
|     Macros.createCthulhuEternalMacro(data, slot); |     // TODO -> Manage this | ||||||
|     return false |     return false | ||||||
|   } |   } | ||||||
| }) | }) | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * Register world usage statistics |  | ||||||
|  * @param {string} registerKey |  | ||||||
|  */ |  | ||||||
| function registerWorldCount(registerKey) { |  | ||||||
|   if (game.user.isGM) { |  | ||||||
|     ClassCounter.registerUsageCount(game.system.id, {}) |  | ||||||
|   } |  | ||||||
| } |  | ||||||
|   | |||||||
| @@ -1,12 +1,17 @@ | |||||||
| const gulp = require('gulp'); | const gulp = require('gulp'); | ||||||
| const less = require('gulp-less'); | const less = require('gulp-less'); | ||||||
|  |  | ||||||
|  | function onError(err) { | ||||||
|  |   util.log(util.colors.red.bold('[ERROR LESS]:'),util.colors.bgRed(err.message)); | ||||||
|  |   this.emit('end'); | ||||||
|  | }; | ||||||
|  |  | ||||||
| /* ----------------------------------------- */ | /* ----------------------------------------- */ | ||||||
| /*  Compile LESS | /*  Compile LESS | ||||||
| /* ----------------------------------------- */ | /* ----------------------------------------- */ | ||||||
| function compileLESS() { | function compileLESS() { | ||||||
|   return gulp.src("styles/fvtt-cthulhu-eternal.less") |   return gulp.src("styles/fvtt-cthulhu-eternal.less") | ||||||
|       .pipe(less()) |       .pipe(less()).on('error',console.log.bind(console)) | ||||||
|       .pipe(gulp.dest("./css")) |       .pipe(gulp.dest("./css")) | ||||||
| } | } | ||||||
| const css = gulp.series(compileLESS); | const css = gulp.series(compileLESS); | ||||||
|   | |||||||
							
								
								
									
										112
									
								
								lang/en.json
									
									
									
									
									
								
							
							
						
						
									
										112
									
								
								lang/en.json
									
									
									
									
									
								
							| @@ -1,7 +1,8 @@ | |||||||
| { | { | ||||||
|   "TYPES": { |   "TYPES": { | ||||||
|     "Actor": { |     "Actor": { | ||||||
|       "protagonist": "Protagonist" |       "protagonist": "Protagonist", | ||||||
|  |       "vehicle": "Vehicle" | ||||||
|     }, |     }, | ||||||
|     "Item": { |     "Item": { | ||||||
|       "skill": "Skill", |       "skill": "Skill", | ||||||
| @@ -18,6 +19,8 @@ | |||||||
|   }, |   }, | ||||||
|   "CTHULHUETERNAL": { |   "CTHULHUETERNAL": { | ||||||
|     "Settings": { |     "Settings": { | ||||||
|  |       "era": "Select the era of your game", | ||||||
|  |       "eraHint": "Select the era of your game", | ||||||
|       "Common": "Common", |       "Common": "Common", | ||||||
|       "Classical": "Classical", |       "Classical": "Classical", | ||||||
|       "Medieval": "Medieval", |       "Medieval": "Medieval", | ||||||
| @@ -34,7 +37,30 @@ | |||||||
|     }, |     }, | ||||||
|     "Protagonist": { |     "Protagonist": { | ||||||
|       "FIELDS": { |       "FIELDS": { | ||||||
|  |         "resources": { | ||||||
|  |           "permanentRating": { | ||||||
|  |             "label": "Permanent Rating" | ||||||
|  |           }, | ||||||
|  |           "hand": { | ||||||
|  |             "label": "Hand" | ||||||
|  |           }, | ||||||
|  |           "stowed": { | ||||||
|  |             "label": "Stowed" | ||||||
|  |           }, | ||||||
|  |           "storage": { | ||||||
|  |             "label": "Storage" | ||||||
|  |           } | ||||||
|  |         }, | ||||||
|         "biodata": { |         "biodata": { | ||||||
|  |           "feature": { | ||||||
|  |             "label": "Feature" | ||||||
|  |           }, | ||||||
|  |           "adaptedToViolence": { | ||||||
|  |             "label": "Adapted to violence" | ||||||
|  |           }, | ||||||
|  |           "adaptedToHelplessness": { | ||||||
|  |             "label": "Adapted to helplessness" | ||||||
|  |           }, | ||||||
|           "harshness": { |           "harshness": { | ||||||
|             "label": "Harshness" |             "label": "Harshness" | ||||||
|           }, |           }, | ||||||
| @@ -83,6 +109,12 @@ | |||||||
|         } |         } | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|  |     "Insanity": { | ||||||
|  |       "None": "None", | ||||||
|  |       "Flee": "Flee", | ||||||
|  |       "Submit": "Submit", | ||||||
|  |       "Struggle": "Struggle" | ||||||
|  |     }, | ||||||
|     "Skill": { |     "Skill": { | ||||||
|       "Unnatural": "Unnatural", |       "Unnatural": "Unnatural", | ||||||
|       "Melee": "Melee Weapons", |       "Melee": "Melee Weapons", | ||||||
| @@ -120,6 +152,9 @@ | |||||||
|         "resourceLevel": { |         "resourceLevel": { | ||||||
|           "label": "Resource level" |           "label": "Resource level" | ||||||
|         }, |         }, | ||||||
|  |         "state": { | ||||||
|  |           "label": "State" | ||||||
|  |         }, | ||||||
|         "settings": { |         "settings": { | ||||||
|           "label": "Settings era" |           "label": "Settings era" | ||||||
|         } |         } | ||||||
| @@ -148,6 +183,9 @@ | |||||||
|         "riflecarabine": "Rifle/Carabine" |         "riflecarabine": "Rifle/Carabine" | ||||||
|       }, |       }, | ||||||
|       "FIELDS": { |       "FIELDS": { | ||||||
|  |         "state": { | ||||||
|  |           "label": "State" | ||||||
|  |         }, | ||||||
|         "settings": { |         "settings": { | ||||||
|           "label": "Settings era" |           "label": "Settings era" | ||||||
|         }, |         }, | ||||||
| @@ -203,10 +241,41 @@ | |||||||
|         } |         } | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|  |     "Vehicle": { | ||||||
|  |       "FIELDS": { | ||||||
|  |         "description": { | ||||||
|  |           "label": "Description" | ||||||
|  |         }, | ||||||
|  |         "notes": { | ||||||
|  |           "label": "Notes" | ||||||
|  |         }, | ||||||
|  |         "surfaceSpeed": { | ||||||
|  |           "label": "Surface Speed" | ||||||
|  |         }, | ||||||
|  |         "airSpeed": { | ||||||
|  |           "label": "Air Speed" | ||||||
|  |         }, | ||||||
|  |         "armor": { | ||||||
|  |           "label": "Armor" | ||||||
|  |         }, | ||||||
|  |         "settings": { | ||||||
|  |           "label": "Settings era" | ||||||
|  |         }, | ||||||
|  |         "crew": { | ||||||
|  |           "label": "Crew" | ||||||
|  |         }, | ||||||
|  |         "state": { | ||||||
|  |           "label": "State" | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|     "MentalDisorder": { |     "MentalDisorder": { | ||||||
|       "FIELDS": { |       "FIELDS": { | ||||||
|         "description": { |         "description": { | ||||||
|           "label": "Description" |           "label": "Description" | ||||||
|  |         }, | ||||||
|  |         "cured": { | ||||||
|  |           "label": "Cured" | ||||||
|         } |         } | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
| @@ -256,8 +325,31 @@ | |||||||
|       "veryHarsh": "Very Harsh" |       "veryHarsh": "Very Harsh" | ||||||
|     }, |     }, | ||||||
|     "Label": { |     "Label": { | ||||||
|       "titleSkill": "Skill", |       "Hand": "Hand", | ||||||
|       "titleWeapon": "Weapon", |       "Stowed": "Stowed", | ||||||
|  |       "Storage": "Storage", | ||||||
|  |       "resourceRating": "Resource rating", | ||||||
|  |       "Resources": "Resources", | ||||||
|  |       "multiplier": "Multiplier", | ||||||
|  |       "setBP": "Set BP", | ||||||
|  |       "Vehicle": "Vehicle", | ||||||
|  |       "Speed": "Speed", | ||||||
|  |       "Slow": "Slow", | ||||||
|  |       "Fast": "Fast", | ||||||
|  |       "Average": "Average", | ||||||
|  |       "None": "None", | ||||||
|  |       "Pristine": "Pristine", | ||||||
|  |       "Worn": "Worn", | ||||||
|  |       "Junk": "Junk", | ||||||
|  |       "resources": "Resources", | ||||||
|  |       "resourceChecks": "Resource Checks", | ||||||
|  |       "sanBPShort": "BP", | ||||||
|  |       "tempInsanity": "Temp. Insanity", | ||||||
|  |       "distinguishingFeatures": "Distinguishing Features", | ||||||
|  |       "titleSkill": "Skill Roll", | ||||||
|  |       "titleWeapon": "Weapon Roll", | ||||||
|  |       "titleCharacteristic": "Characteristic Roll", | ||||||
|  |       "titleSAN": "SAN Roll", | ||||||
|       "biodata": "Biodata", |       "biodata": "Biodata", | ||||||
|       "skill": "Skill", |       "skill": "Skill", | ||||||
|       "modifier": "Modifier", |       "modifier": "Modifier", | ||||||
| @@ -309,6 +401,7 @@ | |||||||
|       "criticalSuccess": "Critical Success", |       "criticalSuccess": "Critical Success", | ||||||
|       "criticalFailure": "Critical Failure", |       "criticalFailure": "Critical Failure", | ||||||
|       "Characteristic": "Characteristic", |       "Characteristic": "Characteristic", | ||||||
|  |       "characteristic": "Characteristic", | ||||||
|       "targetScore": "Target Score", |       "targetScore": "Target Score", | ||||||
|       "gears": "Gears", |       "gears": "Gears", | ||||||
|       "armors": "Armors", |       "armors": "Armors", | ||||||
| @@ -333,6 +426,9 @@ | |||||||
|       "newArchetype": "New Archetype", |       "newArchetype": "New Archetype", | ||||||
|       "newSkill": "New Skill" |       "newSkill": "New Skill" | ||||||
|     }, |     }, | ||||||
|  |     "ChatMessage": { | ||||||
|  |       "exhausted": "Your protagonist is exhausted. He loses [[/r 1d6]] Willpower Points." | ||||||
|  |     }, | ||||||
|     "Edit": "Edit", |     "Edit": "Edit", | ||||||
|     "Delete": "Delete", |     "Delete": "Delete", | ||||||
|     "ToggleSheet": "Toggle Sheet", |     "ToggleSheet": "Toggle Sheet", | ||||||
| @@ -344,11 +440,15 @@ | |||||||
|       "roll": "Roll" |       "roll": "Roll" | ||||||
|     }, |     }, | ||||||
|     "Tooltip": { |     "Tooltip": { | ||||||
|       "sanBP": ">5 SAN lost in one roll, temporary insanity. If SAN less reaches BP = a Disorder unconscious Breaking and AND reset BP." |       "sanBP": ">5 SAN lost in one roll, temporary insanity. If SAN less reaches BP = a Disorder unconscious Breaking and AND reset BP.", | ||||||
|     }, |       "setBP": "Set the current Breaking Point based on the current SAN value" | ||||||
|     "Setting": { |  | ||||||
|     }, |     }, | ||||||
|     "Chat": { |     "Chat": { | ||||||
|  |     }, | ||||||
|  |     "Notitications": { | ||||||
|  |       "NoWeaponSkill": "No weapon skill found for this weapon. Check Weapon definition or available skills/era", | ||||||
|  |       "NoWeaponType": "No weapon type found for this weapon subtype. Check Weapon definition or available skills/era", | ||||||
|  |       "skillAlreadyExists": "Skill already exists" | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -9,3 +9,4 @@ export { default as CthulhuEternalMentalDisorderSheet } from "./sheets/mentaldis | |||||||
| export { default as CthulhuEternalGearSheet } from "./sheets/gear-sheet.mjs" | export { default as CthulhuEternalGearSheet } from "./sheets/gear-sheet.mjs" | ||||||
| export { default as CthulhuEternalMotivationSheet } from "./sheets/motivation-sheet.mjs" | export { default as CthulhuEternalMotivationSheet } from "./sheets/motivation-sheet.mjs" | ||||||
| export { default as CthulhuEternalArchetypeSheet } from "./sheets/archetype-sheet.mjs" | export { default as CthulhuEternalArchetypeSheet } from "./sheets/archetype-sheet.mjs" | ||||||
|  | export { default as CthulhuEternalVehicleSheet } from "./sheets/vehicle-sheet.mjs" | ||||||
|   | |||||||
| @@ -18,4 +18,12 @@ export default class CthulhuEternalMentalDisorderSheet extends CthulhuEternalIte | |||||||
|       template: "systems/fvtt-cthulhu-eternal/templates/mentaldisorder.hbs", |       template: "systems/fvtt-cthulhu-eternal/templates/mentaldisorder.hbs", | ||||||
|     }, |     }, | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  |   /** @override */ | ||||||
|  |   async _prepareContext() { | ||||||
|  |     const context = await super._prepareContext() | ||||||
|  |     context.enrichedDescription = await TextEditor.enrichHTML(this.document.system.description, { async: true }) | ||||||
|  |     return context | ||||||
|  |   } | ||||||
|  |  | ||||||
| } | } | ||||||
|   | |||||||
| @@ -22,6 +22,8 @@ export default class CthulhuEternalMotivationSheet extends CthulhuEternalItemShe | |||||||
|   /** @override */ |   /** @override */ | ||||||
|   async _prepareContext() { |   async _prepareContext() { | ||||||
|     const context = await super._prepareContext() |     const context = await super._prepareContext() | ||||||
|  |     context.enrichedDescription = await TextEditor.enrichHTML(this.document.system.description, { async: true }) | ||||||
|     return context |     return context | ||||||
|   } |   } | ||||||
|  |  | ||||||
| } | } | ||||||
|   | |||||||
| @@ -5,13 +5,14 @@ export default class CthulhuEternalProtagonistSheet extends CthulhuEternalActorS | |||||||
|   static DEFAULT_OPTIONS = { |   static DEFAULT_OPTIONS = { | ||||||
|     classes: ["protagonist"], |     classes: ["protagonist"], | ||||||
|     position: { |     position: { | ||||||
|       width: 848, |       width: 860, | ||||||
|       height: 620, |       height: 620, | ||||||
|     }, |     }, | ||||||
|     window: { |     window: { | ||||||
|       contentClasses: ["protagonist-content"], |       contentClasses: ["protagonist-content"], | ||||||
|     }, |     }, | ||||||
|     actions: { |     actions: { | ||||||
|  |       setBP: CthulhuEternalProtagonistSheet.#onSetBP, | ||||||
|       createGear: CthulhuEternalProtagonistSheet.#onCreateGear, |       createGear: CthulhuEternalProtagonistSheet.#onCreateGear, | ||||||
|       createArmor: CthulhuEternalProtagonistSheet.#onCreateArmor, |       createArmor: CthulhuEternalProtagonistSheet.#onCreateArmor, | ||||||
|       createWeapon: CthulhuEternalProtagonistSheet.#onCreateWeapon, |       createWeapon: CthulhuEternalProtagonistSheet.#onCreateWeapon, | ||||||
| @@ -73,6 +74,9 @@ export default class CthulhuEternalProtagonistSheet extends CthulhuEternalActorS | |||||||
|     const context = await super._prepareContext() |     const context = await super._prepareContext() | ||||||
|     context.tabs = this.#getTabs() |     context.tabs = this.#getTabs() | ||||||
|  |  | ||||||
|  |     context.enrichedDescription = await TextEditor.enrichHTML(this.document.system.description, { async: true }) | ||||||
|  |     context.enrichedNotes = await TextEditor.enrichHTML(this.document.system.notes, { async: true }) | ||||||
|  |      | ||||||
|     context.tooltipsCharacteristic = { |     context.tooltipsCharacteristic = { | ||||||
|       str: game.i18n.localize("CTHULHUETERNAL.Characteristic.Str"), |       str: game.i18n.localize("CTHULHUETERNAL.Characteristic.Str"), | ||||||
|       dex: game.i18n.localize("CTHULHUETERNAL.Characteristic.Dex"), |       dex: game.i18n.localize("CTHULHUETERNAL.Characteristic.Dex"), | ||||||
| @@ -82,23 +86,9 @@ export default class CthulhuEternalProtagonistSheet extends CthulhuEternalActorS | |||||||
|       cha: game.i18n.localize("CTHULHUETERNAL.Characteristic.Cha") |       cha: game.i18n.localize("CTHULHUETERNAL.Characteristic.Cha") | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     context.tooltipsRessources = { |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     context.rollType = { |  | ||||||
|       str: "characteristic", |  | ||||||
|       dex: "characteristic", |  | ||||||
|       con: "characteristic", |  | ||||||
|       int: "characteristic", |  | ||||||
|       pow: "characteristic", |  | ||||||
|       cha: "characteristic" |  | ||||||
|     } |  | ||||||
|     return context |     return context | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   _generateTooltip(type, target) { |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   /** @override */ |   /** @override */ | ||||||
|   async _preparePartContext(partId, context) { |   async _preparePartContext(partId, context) { | ||||||
|     const doc = this.document |     const doc = this.document | ||||||
| @@ -108,22 +98,30 @@ export default class CthulhuEternalProtagonistSheet extends CthulhuEternalActorS | |||||||
|       case "skills": |       case "skills": | ||||||
|         context.tab = context.tabs.skills |         context.tab = context.tabs.skills | ||||||
|         context.skills = doc.itemTypes.skill |         context.skills = doc.itemTypes.skill | ||||||
|  |         context.skills.sort((a, b) => a.name.localeCompare(b.name)) | ||||||
|         break |         break | ||||||
|       case "equipment": |       case "equipment": | ||||||
|         context.tab = context.tabs.equipment |         context.tab = context.tabs.equipment | ||||||
|         context.weapons = doc.itemTypes.weapon |         context.weapons = doc.itemTypes.weapon | ||||||
|  |         context.weapons.sort((a, b) => a.name.localeCompare(b.name)) | ||||||
|         context.armors = doc.itemTypes.armor |         context.armors = doc.itemTypes.armor | ||||||
|  |         context.armors.sort((a, b) => a.name.localeCompare(b.name)) | ||||||
|         context.gears = doc.itemTypes.gear |         context.gears = doc.itemTypes.gear | ||||||
|  |         context.gears.sort((a, b) => a.name.localeCompare(b.name)) | ||||||
|         break |         break | ||||||
|       case "status": |       case "status": | ||||||
|         context.tab = context.tabs.status |         context.tab = context.tabs.status | ||||||
|         context.injuries = doc.itemTypes.injury |         context.injuries = doc.itemTypes.injury | ||||||
|  |         context.injuries.sort((a, b) => a.name.localeCompare(b.name)) | ||||||
|         context.mentaldisorders = doc.itemTypes.mentaldisorder |         context.mentaldisorders = doc.itemTypes.mentaldisorder | ||||||
|  |         context.mentaldisorders.sort((a, b) => a.name.localeCompare(b.name)) | ||||||
|         context.bonds = doc.itemTypes.bond |         context.bonds = doc.itemTypes.bond | ||||||
|  |         context.bonds.sort((a, b) => a.name.localeCompare(b.name)) | ||||||
|         break |         break | ||||||
|       case "biography": |       case "biography": | ||||||
|         context.tab = context.tabs.biography |         context.tab = context.tabs.biography | ||||||
|         context.motivations = doc.itemTypes.motivation |         context.motivations = doc.itemTypes.motivation | ||||||
|  |         context.motivations.sort((a, b) => a.name.localeCompare(b.name)) | ||||||
|         context.enrichedDescription = await TextEditor.enrichHTML(doc.system.description, { async: true }) |         context.enrichedDescription = await TextEditor.enrichHTML(doc.system.description, { async: true }) | ||||||
|         context.enrichedNotes = await TextEditor.enrichHTML(doc.system.notes, { async: true }) |         context.enrichedNotes = await TextEditor.enrichHTML(doc.system.notes, { async: true }) | ||||||
|         break |         break | ||||||
| @@ -136,6 +134,10 @@ export default class CthulhuEternalProtagonistSheet extends CthulhuEternalActorS | |||||||
|    * @param {Event} event             The initiating click event. |    * @param {Event} event             The initiating click event. | ||||||
|    * @param {HTMLElement} target      The current target of the event listener. |    * @param {HTMLElement} target      The current target of the event listener. | ||||||
|    */ |    */ | ||||||
|  |   static #onSetBP(event, target) { | ||||||
|  |     this.document.system.setBP() | ||||||
|  |   } | ||||||
|  |    | ||||||
|   static #onCreateGear(event, target) { |   static #onCreateGear(event, target) { | ||||||
|     this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("CTHULHUETERNAL.Label.newGear"), type: "gear" }]) |     this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("CTHULHUETERNAL.Label.newGear"), type: "gear" }]) | ||||||
|   } |   } | ||||||
| @@ -189,10 +191,15 @@ export default class CthulhuEternalProtagonistSheet extends CthulhuEternalActorS | |||||||
|     // Debug : console.log(">>>>", event, target, rollType) |     // Debug : console.log(">>>>", event, target, rollType) | ||||||
|     // Deprecated : if (this.isEditMode) return |     // Deprecated : if (this.isEditMode) return | ||||||
|     switch (rollType) { |     switch (rollType) { | ||||||
|  |       case "resource":  | ||||||
|  |         item = foundry.utils.duplicate(this.actor.system.resources) | ||||||
|  |         item.name = game.i18n.localize(`CTHULHUETERNAL.Label.Resources`) | ||||||
|  |         item.targetScore = item.permanentRating | ||||||
|  |         break | ||||||
|       case "char": |       case "char": | ||||||
|         let charId = $(event.currentTarget).data("char-id") |         let charId = $(event.currentTarget).data("char-id") | ||||||
|         item = foundry.utils.duplicate(this.actor.system.characteristics[charId]) |         item = foundry.utils.duplicate(this.actor.system.characteristics[charId]) | ||||||
|         item.name = game.i18n.localize("CTHULHUETERNAL.Label." + charId + "Long") |         item.name = game.i18n.localize(`CTHULHUETERNAL.Label.${charId}Long`) | ||||||
|         item.targetScore = item.value * 5 |         item.targetScore = item.value * 5 | ||||||
|         break |         break | ||||||
|       case "skill": |       case "skill": | ||||||
| @@ -204,6 +211,11 @@ export default class CthulhuEternalProtagonistSheet extends CthulhuEternalActorS | |||||||
|         li = $(event.currentTarget).parents(".item"); |         li = $(event.currentTarget).parents(".item"); | ||||||
|         item = this.actor.items.get(li.data("item-id")); |         item = this.actor.items.get(li.data("item-id")); | ||||||
|         break |         break | ||||||
|  |       case "san":  | ||||||
|  |         item = foundry.utils.duplicate(this.actor.system.san) | ||||||
|  |         item.name = game.i18n.localize("CTHULHUETERNAL.Label.SAN") | ||||||
|  |         item.targetScore = item.value | ||||||
|  |         break; | ||||||
|       default: |       default: | ||||||
|         throw new Error(`Unknown roll type ${rollType}`) |         throw new Error(`Unknown roll type ${rollType}`) | ||||||
|     } |     } | ||||||
|   | |||||||
							
								
								
									
										117
									
								
								module/applications/sheets/vehicle-sheet.mjs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										117
									
								
								module/applications/sheets/vehicle-sheet.mjs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,117 @@ | |||||||
|  | import CthulhuEternalActorSheet from "./base-actor-sheet.mjs" | ||||||
|  |  | ||||||
|  | export default class CthulhuEternalVehicleSheet extends CthulhuEternalActorSheet { | ||||||
|  |   /** @override */ | ||||||
|  |   static DEFAULT_OPTIONS = { | ||||||
|  |     classes: ["vehicle"], | ||||||
|  |     position: { | ||||||
|  |       width: 680, | ||||||
|  |       height: 540, | ||||||
|  |     }, | ||||||
|  |     window: { | ||||||
|  |       contentClasses: ["vehicle-content"], | ||||||
|  |     }, | ||||||
|  |     actions: { | ||||||
|  |       createGear: CthulhuEternalVehicleSheet.#onCreateGear, | ||||||
|  |       createWeapon: CthulhuEternalVehicleSheet.#onCreateWeapon, | ||||||
|  |     }, | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   /** @override */ | ||||||
|  |   static PARTS = { | ||||||
|  |     main: { | ||||||
|  |       template: "systems/fvtt-cthulhu-eternal/templates/vehicle-main.hbs", | ||||||
|  |     }, | ||||||
|  |     tabs: { | ||||||
|  |       template: "templates/generic/tab-navigation.hbs", | ||||||
|  |     }, | ||||||
|  |     equipment: { | ||||||
|  |       template: "systems/fvtt-cthulhu-eternal/templates/vehicle-equipment.hbs", | ||||||
|  |     }, | ||||||
|  |     description: { | ||||||
|  |       template: "systems/fvtt-cthulhu-eternal/templates/vehicle-description.hbs", | ||||||
|  |     }, | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |    /** @override */ | ||||||
|  |    tabGroups = { | ||||||
|  |     sheet: "equipment", | ||||||
|  |   } | ||||||
|  |    | ||||||
|  |   /** | ||||||
|  |    * Prepare an array of form header tabs. | ||||||
|  |    * @returns {Record<string, Partial<ApplicationTab>>} | ||||||
|  |    */ | ||||||
|  |   #getTabs() { | ||||||
|  |     const tabs = { | ||||||
|  |       equipment: { id: "equipment", group: "sheet", icon: "fa-solid fa-shapes", label: "CTHULHUETERNAL.Label.equipment" }, | ||||||
|  |       description: { id: "description", group: "sheet", icon: "fa-solid fa-book", label: "CTHULHUETERNAL.Label.description" }, | ||||||
|  |     } | ||||||
|  |     for (const v of Object.values(tabs)) { | ||||||
|  |       v.active = this.tabGroups[v.group] === v.id | ||||||
|  |       v.cssClass = v.active ? "active" : "" | ||||||
|  |     } | ||||||
|  |     return tabs | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   /** @override */ | ||||||
|  |   async _prepareContext() { | ||||||
|  |     const context = await super._prepareContext() | ||||||
|  |     context.tabs = this.#getTabs() | ||||||
|  |  | ||||||
|  |     context.enrichedDescription = await TextEditor.enrichHTML(this.document.system.description, { async: true }) | ||||||
|  |     context.enrichedNotes = await TextEditor.enrichHTML(this.document.system.notes, { async: true }) | ||||||
|  |      | ||||||
|  |     return context | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   _generateTooltip(type, target) { | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   /** @override */ | ||||||
|  |   async _preparePartContext(partId, context) { | ||||||
|  |     const doc = this.document | ||||||
|  |     switch (partId) { | ||||||
|  |       case "main": | ||||||
|  |         break | ||||||
|  |       case "equipment": | ||||||
|  |         context.tab = context.tabs.equipment | ||||||
|  |         context.weapons = doc.itemTypes.weapon | ||||||
|  |         context.gears = doc.itemTypes.gear | ||||||
|  |         break   | ||||||
|  |       case "description": | ||||||
|  |         context.tab = context.tabs.description | ||||||
|  |         context.enrichedDescription = await TextEditor.enrichHTML(doc.system.description, { async: true }) | ||||||
|  |         context.enrichedNotes = await TextEditor.enrichHTML(doc.system.notes, { async: true }) | ||||||
|  |         break | ||||||
|  |     } | ||||||
|  |     return context | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * Creates a new attack item directly from the sheet and embeds it into the document. | ||||||
|  |    * @param {Event} event             The initiating click event. | ||||||
|  |    * @param {HTMLElement} target      The current target of the event listener. | ||||||
|  |    */ | ||||||
|  |   static #onCreateGear(event, target) { | ||||||
|  |     this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("CTHULHUETERNAL.Label.newGear"), type: "gear" }]) | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   static #onCreateWeapon(event, target) { | ||||||
|  |     this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("CTHULHUETERNAL.Label.newWeapon"), type: "weapon" }]) | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |   async _onDrop(event) { | ||||||
|  |     if (!this.isEditable || !this.isEditMode) return | ||||||
|  |     const data = TextEditor.getDragEventData(event) | ||||||
|  |  | ||||||
|  |     // Handle different data types | ||||||
|  |     switch (data.type) { | ||||||
|  |       case "Item": | ||||||
|  |         const item = await fromUuid(data.uuid) | ||||||
|  |         return super._onDropItem(item) | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |  | ||||||
|  | } | ||||||
| @@ -34,6 +34,13 @@ export const AVAILABLE_SETTINGS = { | |||||||
|   postapo: "CTHULHUETERNAL.Settings.PostApo" |   postapo: "CTHULHUETERNAL.Settings.PostApo" | ||||||
| } | } | ||||||
|  |  | ||||||
|  | export const INSANITY = { | ||||||
|  |   "none": "CTHULHUETERNAL.Insanity.None", | ||||||
|  |   "flee": "CTHULHUETERNAL.Insanity.Flee", | ||||||
|  |   "struggle": "CTHULHUETERNAL.Insanity.Struggle", | ||||||
|  |   "submit": "CTHULHUETERNAL.Insanity.Submit" | ||||||
|  | } | ||||||
|  |  | ||||||
| export const ERA_CSS = { | export const ERA_CSS = { | ||||||
|   jazz: { primaryFont: "RozhaOne", secondaryFont: "RozhaOne", titleFont: "Broadway", imgFilter: "brightness(0) saturate(100%) invert(52%) sepia(9%) saturate(2368%) hue-rotate(360deg) brightness(86%) contrast(84%)" }, |   jazz: { primaryFont: "RozhaOne", secondaryFont: "RozhaOne", titleFont: "Broadway", imgFilter: "brightness(0) saturate(100%) invert(52%) sepia(9%) saturate(2368%) hue-rotate(360deg) brightness(86%) contrast(84%)" }, | ||||||
|   modern: { primaryFont: "Georama", secondaryFont: "Georama", titleFont: "Georama", imgFilter: "brightness(0) saturate(100%) invert(92%) sepia(11%) saturate(1214%) hue-rotate(51deg) brightness(93%) contrast(86%)" }, |   modern: { primaryFont: "Georama", secondaryFont: "Georama", titleFont: "Georama", imgFilter: "brightness(0) saturate(100%) invert(92%) sepia(11%) saturate(1214%) hue-rotate(51deg) brightness(93%) contrast(86%)" }, | ||||||
| @@ -82,6 +89,43 @@ export const RESOURCE_RATING = { | |||||||
|   } |   } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | export const RESOURCE_BREAKDOWN = [ | ||||||
|  |   { value: 0, hand: 0, stowed: 0, storage: 0, checks: 0}, | ||||||
|  |   { value: 1, hand: 1, stowed: 0, storage: 0, checks: 1}, | ||||||
|  |   { value: 2, hand: 2, stowed: 0, storage: 0, checks: 1}, | ||||||
|  |   { value: 3, hand: 3, stowed: 0, storage: 0, checks: 1}, | ||||||
|  |   { value: 4, hand: 4, stowed: 0, storage: 0, checks: 1}, | ||||||
|  |   { value: 5, hand: 5, stowed: 0, storage: 0, checks: 1}, | ||||||
|  |   { value: 6, hand: 6, stowed: 0, storage: 0, checks: 1}, | ||||||
|  |   { value: 7, hand: 6, stowed: 1, storage: 0, checks: 2}, | ||||||
|  |   { value: 8, hand: 6, stowed: 2, storage: 0, checks: 2}, | ||||||
|  |   { value: 9, hand: 6, stowed: 3, storage: 0, checks: 2}, | ||||||
|  |   { value: 10, hand: 6, stowed: 4, storage: 0, checks: 2}, | ||||||
|  |   { value: 11, hand: 6, stowed: 5, storage: 0, checks: 2}, | ||||||
|  |   { value: 12, hand: 6, stowed: 6, storage: 0, checks: 2}, | ||||||
|  |   { value: 13, hand: 6, stowed: 6, storage: 1, checks: 3}, | ||||||
|  |   { value: 14, hand: 6, stowed: 6, storage: 2, checks: 3}, | ||||||
|  |   { value: 15, hand: 6, stowed: 6, storage: 3, checks: 3}, | ||||||
|  |   { value: 16, hand: 6, stowed: 6, storage: 4, checks: 3}, | ||||||
|  |   { value: 17, hand: 6, stowed: 6, storage: 5, checks: 3}, | ||||||
|  |   { value: 18, hand: 6, stowed: 6, storage: 6, checks: 3}, | ||||||
|  |   { value: 19, hand: 6, stowed: 6, storage: 7, checks: 3}, | ||||||
|  |   { value: 20, hand: 6, stowed: 6, storage: 8, checks: 3} | ||||||
|  | ] | ||||||
|  |  | ||||||
|  | export const VEHICLE_SPEED = { | ||||||
|  |   "none": "CTHULHUETERNAL.Label.None", | ||||||
|  |   "slow": "CTHULHUETERNAL.Label.Slow", | ||||||
|  |   "average": "CTHULHUETERNAL.Label.Average", | ||||||
|  |   "fast": "CTHULHUETERNAL.Label.Fast" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | export const EQUIPMENT_STATES = {  | ||||||
|  |   "pristine": "CTHULHUETERNAL.Label.Pristine", | ||||||
|  |   "worn": "CTHULHUETERNAL.Label.Worn", | ||||||
|  |   "junk": "CTHULHUETERNAL.Label.Junk" | ||||||
|  | } | ||||||
|  |  | ||||||
| export const MENTAL_ILLNESS_CURE_SKILL = { | export const MENTAL_ILLNESS_CURE_SKILL = { | ||||||
|   jazz: "CTHULHUETERNAL.Skill.Psychoanalyze", |   jazz: "CTHULHUETERNAL.Skill.Psychoanalyze", | ||||||
|   modern: "CTHULHUETERNAL.Skill.Psychoanalyze", |   modern: "CTHULHUETERNAL.Skill.Psychoanalyze", | ||||||
| @@ -165,6 +209,26 @@ export const WEAPON_SKILL_MAPPING = { | |||||||
|     "unarmed": "CTHULHUETERNAL.Skill.UnarmedCombat" |     "unarmed": "CTHULHUETERNAL.Skill.UnarmedCombat" | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | export const MODIFIER_CHOICES = { | ||||||
|  |   "-10": "-10", | ||||||
|  |   "-20": "-20", | ||||||
|  |   "-40": "-40", | ||||||
|  |   "+0": "+0", | ||||||
|  |   "+10": "+10", | ||||||
|  |   "+20": "+20", | ||||||
|  |   "+40": "+40", | ||||||
|  | } | ||||||
|  |  | ||||||
|  | export const MULTIPLIER_CHOICES = { | ||||||
|  |   "0.25": "0.25", | ||||||
|  |   "0.5": "0.5", | ||||||
|  |   "1": "1", | ||||||
|  |   "2": "2", | ||||||
|  |   "4": "4", | ||||||
|  |   "5": "5" | ||||||
|  | } | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * Include all constant definitions within the SYSTEM global export |  * Include all constant definitions within the SYSTEM global export | ||||||
|  * @type {Object} |  * @type {Object} | ||||||
| @@ -181,5 +245,11 @@ export const SYSTEM = { | |||||||
|   RESOURCE_RATING, |   RESOURCE_RATING, | ||||||
|   MENTAL_ILLNESS_CURE_SKILL, |   MENTAL_ILLNESS_CURE_SKILL, | ||||||
|   ERA_CSS, |   ERA_CSS, | ||||||
|  |   INSANITY, | ||||||
|  |   EQUIPMENT_STATES, | ||||||
|  |   RESOURCE_BREAKDOWN, | ||||||
|  |   VEHICLE_SPEED, | ||||||
|  |   MODIFIER_CHOICES, | ||||||
|  |   MULTIPLIER_CHOICES, | ||||||
|   ASCII |   ASCII | ||||||
| } | } | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| import CthulhuEternalUtils from "../utils.mjs" | import CthulhuEternalUtils from "../utils.mjs" | ||||||
|  |  | ||||||
| export default class CthulhuEternalActor extends Actor { | export default class CthulhuEternalActor extends Actor { | ||||||
|    |  | ||||||
|   static async create(data, options) { |   static async create(data, options) { | ||||||
|  |  | ||||||
|     // Case of compendium global import |     // Case of compendium global import | ||||||
| @@ -19,7 +19,7 @@ export default class CthulhuEternalActor extends Actor { | |||||||
|       const skills = await CthulhuEternalUtils.loadCompendium("fvtt-cthulhu-eternal.skills") |       const skills = await CthulhuEternalUtils.loadCompendium("fvtt-cthulhu-eternal.skills") | ||||||
|       data.items = data.items || [] |       data.items = data.items || [] | ||||||
|       for (let skill of skills) { |       for (let skill of skills) { | ||||||
|         if (skill.system.settings === era ) { |         if (skill.system.settings === era) { | ||||||
|           data.items.push(skill.toObject()) |           data.items.push(skill.toObject()) | ||||||
|         } |         } | ||||||
|       } |       } | ||||||
| @@ -28,20 +28,50 @@ export default class CthulhuEternalActor extends Actor { | |||||||
|     return super.create(data, options); |     return super.create(data, options); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  |   _onUpdate(changed, options, userId) { | ||||||
|   async _preCreate(data, options, user) { |     // DEBUG : console.log("CthulhuEternalActor.update", changed, options, userId) | ||||||
|     await super._preCreate(data, options, user) |     if (changed?.system?.wp?.exhausted) { | ||||||
|  |       ChatMessage.create({ | ||||||
|     // Configure prototype token settings |         user: userId, | ||||||
|     const prototypeToken = {} |         speaker: { alias: this.name }, | ||||||
|     if (this.type === "protagonist") { |         rollMode: "selfroll", | ||||||
|       Object.assign(prototypeToken, { |         content: game.i18n.localize("CTHULHUETERNAL.ChatMessage.exhausted"), | ||||||
|         sight: { enabled: true }, |         type: CONST.CHAT_MESSAGE_STYLES.OTHER | ||||||
|         actorLink: true, |  | ||||||
|         disposition: CONST.TOKEN_DISPOSITIONS.FRIENDLY, |  | ||||||
|       }) |       }) | ||||||
|       this.updateSource({ prototypeToken }) |  | ||||||
|     } |     } | ||||||
|  |     return super._onUpdate(changed, options, userId) | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  |   async createEmbeddedDocuments(embeddedName, data, operation) { | ||||||
|  |     let newData = [] | ||||||
|  |     if (embeddedName === "Item") { | ||||||
|  |       for (let i of data) { | ||||||
|  |         if (i.type === "skill") { | ||||||
|  |           if (this.items.find(item => item.name.toLowerCase() === i.name.toLowerCase())) { | ||||||
|  |             ui.notifications.warn(game.i18n.localize("CTHULHUETERNAL.Notifications.skillAlreadyExists")) | ||||||
|  |             continue | ||||||
|  |           } | ||||||
|  |         } | ||||||
|  |         newData.push(i) | ||||||
|  |       } | ||||||
|  |       return super.createEmbeddedDocuments(embeddedName, newData, operation) | ||||||
|  |     } | ||||||
|  |     return super.createEmbeddedDocuments(embeddedName, data, operation) | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   async _preCreate(data, options, user) { | ||||||
|  |   await super._preCreate(data, options, user) | ||||||
|  |  | ||||||
|  |   // Configure prototype token settings | ||||||
|  |   const prototypeToken = {} | ||||||
|  |   if (this.type === "protagonist") { | ||||||
|  |     Object.assign(prototypeToken, { | ||||||
|  |       sight: { enabled: true }, | ||||||
|  |       actorLink: true, | ||||||
|  |       disposition: CONST.TOKEN_DISPOSITIONS.FRIENDLY, | ||||||
|  |     }) | ||||||
|  |     this.updateSource({ prototypeToken }) | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
| } | } | ||||||
|   | |||||||
| @@ -59,18 +59,6 @@ export default class CthulhuEternalRoll extends Roll { | |||||||
|     return this.options.hasTarget |     return this.options.hasTarget | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   get targetName() { |  | ||||||
|     return this.options.targetName |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   get targetArmor() { |  | ||||||
|     return this.options.targetArmor |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   get targetMalus() { |  | ||||||
|     return this.options.targetMalus |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   get realDamage() { |   get realDamage() { | ||||||
|     return this.options.realDamage |     return this.options.realDamage | ||||||
|   } |   } | ||||||
| @@ -79,6 +67,35 @@ export default class CthulhuEternalRoll extends Roll { | |||||||
|     return this.options.weapon |     return this.options.weapon | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  |   get isLowWP() { | ||||||
|  |     return this.options.isLowWP | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   get isZeroWP() { | ||||||
|  |     return this.options.isZeroWP | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   get isExhausted() { | ||||||
|  |     return this.options.isExhausted | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   static updateResourceDialog(options) { | ||||||
|  |     let rating = 0 | ||||||
|  |     if (options.rollItem.enableHand) { | ||||||
|  |       rating += options.rollItem.hand | ||||||
|  |     } | ||||||
|  |     if (options.rollItem.enableStowed) { | ||||||
|  |       rating += options.rollItem.stowed | ||||||
|  |     } | ||||||
|  |     if (options.rollItem.enableStorage) { | ||||||
|  |       rating += options.rollItem.storage | ||||||
|  |     } | ||||||
|  |     let multiplier = Number($(`.roll-skill-multiplier`).val()) | ||||||
|  |     options.initialScore = rating | ||||||
|  |     options.percentScore = rating * multiplier | ||||||
|  |     $(".resource-score").text(`${rating} (${options.percentScore}%)`) | ||||||
|  |   } | ||||||
|  |  | ||||||
|   /** |   /** | ||||||
|    * Prompt the user with a dialog to configure and execute a roll. |    * Prompt the user with a dialog to configure and execute a roll. | ||||||
|    * |    * | ||||||
| @@ -95,37 +112,59 @@ export default class CthulhuEternalRoll extends Roll { | |||||||
|    */ |    */ | ||||||
|   static async prompt(options = {}) { |   static async prompt(options = {}) { | ||||||
|     let formula = "1d100" |     let formula = "1d100" | ||||||
|  |     let hasModifier = true | ||||||
|  |     let hasMultiplier = false  | ||||||
|  |  | ||||||
|     switch (options.rollType) { |     switch (options.rollType) { | ||||||
|       case "skill": |       case "skill": | ||||||
|         console.log(options.rollItem) |         console.log(options.rollItem) | ||||||
|         options.initialScore = options.rollItem.system.computeScore() |         options.initialScore = options.rollItem.system.computeScore() | ||||||
|         break |         break | ||||||
|  |       case "san": | ||||||
|       case "char": |       case "char": | ||||||
|         options.initialScore = options.rollItem.targetScore |         options.initialScore = options.rollItem.targetScore | ||||||
|         break |         break | ||||||
|       case "damage":  |       case "resource": | ||||||
|         let formula = options.rollItem.system.damage  |         hasModifier = false | ||||||
|  |         hasMultiplier = true | ||||||
|  |         options.initialScore = options.rollItem.targetScore | ||||||
|  |         options.totalRating = options.rollItem.targetScore | ||||||
|  |         options.percentScore = options.rollItem.targetScore * 5 | ||||||
|  |         options.rollItem.enableHand = true | ||||||
|  |         options.rollItem.enableStowed = true | ||||||
|  |         options.rollItem.enableStorage = true | ||||||
|  |         break | ||||||
|  |       case "damage": | ||||||
|  |         let formula = options.rollItem.system.damage | ||||||
|         let damageRoll = new Roll(formula) |         let damageRoll = new Roll(formula) | ||||||
|         await damageRoll.evaluate() |         await damageRoll.evaluate() | ||||||
|         await damageRoll.toMessage({ |         await damageRoll.toMessage({ | ||||||
|           flavor: `${options.rollItem.name} - Damage Roll` |           flavor: `${options.rollItem.name} - Damage Roll` | ||||||
|         }); |         }); | ||||||
|         let isLethal = false |         let isLethal = false | ||||||
|         if (options.rollItem.system.lethality > 0 ) { |         if (options.rollItem.system.lethality > 0) { | ||||||
|           let lethalityRoll = new Roll("1d100") |           let lethalityRoll = new Roll("1d100") | ||||||
|           await lethalityRoll.evaluate() |           await lethalityRoll.evaluate() | ||||||
|           isLethal = (lethalityRoll.total <= options.rollItem.system.lethality)  |           isLethal = (lethalityRoll.total <= options.rollItem.system.lethality) | ||||||
|           await lethalityRoll.toMessage({ |           await lethalityRoll.toMessage({ | ||||||
|             flavor: `${options.rollItem.name} - Lethality Roll : ${lethalityRoll.total} <= ${options.rollItem.system.lethality} => ${isLethal}` |             flavor: `${options.rollItem.name} - Lethality Roll : ${lethalityRoll.total} <= ${options.rollItem.system.lethality} => ${isLethal}` | ||||||
|           }); |           }); | ||||||
|           } |         } | ||||||
|         return |         return | ||||||
|       case "weapon":   |       case "weapon": | ||||||
|         let era = game.settings.get("fvtt-cthulhu-eternal", "settings-era") |         let era = game.settings.get("fvtt-cthulhu-eternal", "settings-era") | ||||||
|         let skillName = game.i18n.localize(SYSTEM.WEAPON_SKILL_MAPPING[era][options.rollItem.system.weaponType])   |         if (!SYSTEM.WEAPON_SKILL_MAPPING[era] || !SYSTEM.WEAPON_SKILL_MAPPING[era][options.rollItem.system.weaponType]) { | ||||||
|  |           ui.notifications.error(game.i18n.localize("CTHULHUETERNAL.Notifications.NoWeaponType")) | ||||||
|  |           return | ||||||
|  |         } | ||||||
|  |         let skillName = game.i18n.localize(SYSTEM.WEAPON_SKILL_MAPPING[era][options.rollItem.system.weaponType]) | ||||||
|         let actor = game.actors.get(options.actorId) |         let actor = game.actors.get(options.actorId) | ||||||
|         options.weapon = options.rollItem |         options.weapon = options.rollItem | ||||||
|         options.rollItem = actor.items.find(i => i.type === "skill" && i.name.toLowerCase() === skillName.toLowerCase()) |         options.rollItem = actor.items.find(i => i.type === "skill" && i.name.toLowerCase() === skillName.toLowerCase()) | ||||||
|  |         if (!options.rollItem) { | ||||||
|  |           ui.notifications.error(game.i18n.localize("CTHULHUETERNAL.Notifications.NoWeaponSkill")) | ||||||
|  |           return | ||||||
|  |         } | ||||||
|         options.initialScore = options.rollItem.system.computeScore() |         options.initialScore = options.rollItem.system.computeScore() | ||||||
|         console.log("WEAPON", skillName, era, options.rollItem) |         console.log("WEAPON", skillName, era, options.rollItem) | ||||||
|         break |         break | ||||||
| @@ -141,37 +180,34 @@ export default class CthulhuEternalRoll extends Roll { | |||||||
|       default: "public", |       default: "public", | ||||||
|     }) |     }) | ||||||
|  |  | ||||||
|     const choiceModifier = { |     const choiceModifier = SYSTEM.MODIFIER_CHOICES | ||||||
|       "-10": "-10", |     const choiceMultiplier = SYSTEM.MULTIPLIER_CHOICES | ||||||
|       "-20": "-20", |  | ||||||
|       "-40": "-40", |  | ||||||
|       "0": "0", |  | ||||||
|       "+10": "+10", |  | ||||||
|       "+20": "+20", |  | ||||||
|       "+40": "+40", |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     let modifier = "0" |     let modifier = "+0" | ||||||
|     let targetMalus = "0" |     let multiplier = "5" | ||||||
|     let targetName |  | ||||||
|     let targetArmor |  | ||||||
|  |  | ||||||
|     let dialogContext = { |     let dialogContext = { | ||||||
|       rollType: options.rollType, |       rollType: options.rollType, | ||||||
|       rollItem: foundry.utils.duplicate(options.rollItem), // Object only, no class |       rollItem: foundry.utils.duplicate(options.rollItem), // Object only, no class | ||||||
|       weapon: options?.weapon,  |       weapon: options?.weapon, | ||||||
|       initialScore: options.initialScore, |       initialScore: options.initialScore, | ||||||
|       targetScore: options.initialScore, |       targetScore: options.initialScore, | ||||||
|       isLowWP: options.isLowWP, |       isLowWP: options.isLowWP, | ||||||
|       isZeroWP: options.isZeroWP, |       isZeroWP: options.isZeroWP, | ||||||
|  |       isExhausted: options.isExhausted, | ||||||
|  |       enableHand: options.rollItem.enableHand, | ||||||
|  |       enableStowed: options.rollItem.enableStowed, | ||||||
|  |       enableStorage: options.rollItem.enableStorage, | ||||||
|       rollModes, |       rollModes, | ||||||
|       fieldRollMode, |       fieldRollMode, | ||||||
|       choiceModifier, |       choiceModifier, | ||||||
|  |       choiceMultiplier, | ||||||
|       formula, |       formula, | ||||||
|       hasTarget: options.hasTarget, |       hasTarget: options.hasTarget, | ||||||
|  |       hasModifier, | ||||||
|  |       hasMultiplier, | ||||||
|       modifier, |       modifier, | ||||||
|       targetName, |       multiplier | ||||||
|       targetArmor |  | ||||||
|     } |     } | ||||||
|     const content = await renderTemplate("systems/fvtt-cthulhu-eternal/templates/roll-dialog.hbs", dialogContext) |     const content = await renderTemplate("systems/fvtt-cthulhu-eternal/templates/roll-dialog.hbs", dialogContext) | ||||||
|  |  | ||||||
| @@ -193,30 +229,49 @@ export default class CthulhuEternalRoll extends Roll { | |||||||
|           }, |           }, | ||||||
|         }, |         }, | ||||||
|       ], |       ], | ||||||
|  |       actions: { | ||||||
|  |         "selectHand": (event, button, dialog) => { | ||||||
|  |           options.rollItem.enableHand = !options.rollItem.enableHand | ||||||
|  |           this.updateResourceDialog(options) | ||||||
|  |         }, | ||||||
|  |         "selectStowed": (event, button, dialog) => { | ||||||
|  |           options.rollItem.enableStowed = !options.rollItem.enableStowed | ||||||
|  |           this.updateResourceDialog(options) | ||||||
|  |         }, | ||||||
|  |         "selectStorage": (event, button, dialog) => { | ||||||
|  |           options.rollItem.enableStorage = !options.rollItem.enableStorage | ||||||
|  |           this.updateResourceDialog(options) | ||||||
|  |         } | ||||||
|  |       }, | ||||||
|       rejectClose: false, // Click on Close button will not launch an error |       rejectClose: false, // Click on Close button will not launch an error | ||||||
|       render: (event, dialog) => { |       render: (event, dialog) => { | ||||||
|       }, |         $(".roll-skill-multiplier").change(event => { | ||||||
|  |           options.multiplier = Number(event.target.value) | ||||||
|  |           this.updateResourceDialog(options)           | ||||||
|  |         }) | ||||||
|  |       } | ||||||
|     }) |     }) | ||||||
|  |  | ||||||
|     // If the user cancels the dialog, exit |     // If the user cancels the dialog, exit | ||||||
|     if (rollContext === null) return |     if (rollContext === null) return | ||||||
|  |  | ||||||
|     let rollData = foundry.utils.mergeObject(foundry.utils.duplicate(options), rollContext) |     let rollData = foundry.utils.mergeObject(foundry.utils.duplicate(options), rollContext) | ||||||
|     rollData.rollMode =  rollContext.visibility |     rollData.rollMode = rollContext.visibility | ||||||
|     rollData.targetName = targetName |  | ||||||
|     rollData.targetArmor = targetArmor |  | ||||||
|     rollData.targetMalus = targetMalus |  | ||||||
|  |  | ||||||
|     // Update target score |     // Update target score | ||||||
|     console.log(rollData) |     console.log(rollData) | ||||||
|     rollData.targetScore =  Math.min( Math.max(options.initialScore + Number(rollData.modifier), 0), 100) |     if (options.rollType === "resource" ) { | ||||||
|     if ( rollData.isLowWP ) { |       rollData.targetScore = options.initialScore * Number(rollContext.multiplier) | ||||||
|       rollData.targetScore -= 20 |     } else {  | ||||||
|  |       rollData.targetScore = Math.min(Math.max(options.initialScore + Number(rollData.modifier), 0), 100) | ||||||
|  |       if (rollData.isLowWP || rollData.isExhausted) { | ||||||
|  |         rollData.targetScore -= 20 | ||||||
|  |       } | ||||||
|  |       if (rollData.isZeroWP) { | ||||||
|  |         rollData.targetScore = 0 | ||||||
|  |       } | ||||||
|  |       rollData.targetScore = Math.min(Math.max(rollData.targetScore, 0), 100)   | ||||||
|     } |     } | ||||||
|     if ( rollData.isZeroWP ) { |  | ||||||
|       rollData.targetScore = 0 |  | ||||||
|     } |  | ||||||
|     rollData.targetScore = Math.min( Math.max(rollData.targetScore, 0), 100) |  | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * A hook event that fires before the roll is made. |      * A hook event that fires before the roll is made. | ||||||
| @@ -227,9 +282,9 @@ export default class CthulhuEternalRoll extends Roll { | |||||||
|     await roll.evaluate() |     await roll.evaluate() | ||||||
|  |  | ||||||
|     // Compute the result quality |     // Compute the result quality | ||||||
|     let resultType = "failure"   |     let resultType = "failure" | ||||||
|     let dec = Math.floor(roll.total/10) |     let dec = Math.floor(roll.total / 10) | ||||||
|     let unit = roll.total - (dec*10) |     let unit = roll.total - (dec * 10) | ||||||
|     if (roll.total <= rollData.targetScore) { |     if (roll.total <= rollData.targetScore) { | ||||||
|       resultType = "success" |       resultType = "success" | ||||||
|       // Detect if decimal == unit in the dire total result  |       // Detect if decimal == unit in the dire total result  | ||||||
| @@ -247,6 +302,9 @@ export default class CthulhuEternalRoll extends Roll { | |||||||
|     roll.options.isSuccess = resultType === "success" || resultType === "successCritical" |     roll.options.isSuccess = resultType === "success" || resultType === "successCritical" | ||||||
|     roll.options.isFailure = resultType === "failure" || resultType === "failureCritical" |     roll.options.isFailure = resultType === "failure" || resultType === "failureCritical" | ||||||
|     roll.options.isCritical = resultType === "successCritical" || resultType === "failureCritical" |     roll.options.isCritical = resultType === "successCritical" || resultType === "failureCritical" | ||||||
|  |     roll.options.isLowWP = rollData.isLowWP | ||||||
|  |     roll.options.isZeroWP = rollData.isZeroWP | ||||||
|  |     roll.options.isExhausted = rollData.isExhausted | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * A hook event that fires after the roll has been made. |      * A hook event that fires after the roll has been made. | ||||||
| @@ -269,6 +327,10 @@ export default class CthulhuEternalRoll extends Roll { | |||||||
|         return `${game.i18n.localize("CTHULHUETERNAL.Label.titleSkill")}` |         return `${game.i18n.localize("CTHULHUETERNAL.Label.titleSkill")}` | ||||||
|       case "weapon": |       case "weapon": | ||||||
|         return `${game.i18n.localize("CTHULHUETERNAL.Label.titleWeapon")}` |         return `${game.i18n.localize("CTHULHUETERNAL.Label.titleWeapon")}` | ||||||
|  |       case "char": | ||||||
|  |         return `${game.i18n.localize("CTHULHUETERNAL.Label.titleCharacteristic")}` | ||||||
|  |       case "san": | ||||||
|  |         return `${game.i18n.localize("CTHULHUETERNAL.Label.titleSAN")}` | ||||||
|       default: |       default: | ||||||
|         return game.i18n.localize("CTHULHUETERNAL.Label.titleStandard") |         return game.i18n.localize("CTHULHUETERNAL.Label.titleStandard") | ||||||
|     } |     } | ||||||
| @@ -306,10 +368,10 @@ export default class CthulhuEternalRoll extends Roll { | |||||||
|    */ |    */ | ||||||
|   async _getChatCardData(isPrivate) { |   async _getChatCardData(isPrivate) { | ||||||
|     let cardData = foundry.utils.duplicate(this.options) |     let cardData = foundry.utils.duplicate(this.options) | ||||||
|     cardData.css =  [SYSTEM.id, "dice-roll"] |     cardData.css = [SYSTEM.id, "dice-roll"] | ||||||
|     cardData.data =  this.data |     cardData.data = this.data | ||||||
|     cardData.diceTotal =  this.dice.reduce((t, d) => t + d.total, 0) |     cardData.diceTotal = this.dice.reduce((t, d) => t + d.total, 0) | ||||||
|     cardData.isGM =  game.user.isGM |     cardData.isGM = game.user.isGM | ||||||
|     cardData.formula = this.formula |     cardData.formula = this.formula | ||||||
|     cardData.total = this.total |     cardData.total = this.total | ||||||
|     cardData.actorId = this.actorId |     cardData.actorId = this.actorId | ||||||
| @@ -322,6 +384,10 @@ export default class CthulhuEternalRoll extends Roll { | |||||||
|     cardData.realDamage = this.realDamage |     cardData.realDamage = this.realDamage | ||||||
|     cardData.isPrivate = isPrivate |     cardData.isPrivate = isPrivate | ||||||
|     cardData.weapon = this.weapon |     cardData.weapon = this.weapon | ||||||
|  |     cardData.isLowWP = this.isLowWP | ||||||
|  |     cardData.isZeroWP = this.isZeroWP | ||||||
|  |     cardData.isExhausted = this.isExhausted | ||||||
|  |  | ||||||
|  |  | ||||||
|     console.log(cardData) |     console.log(cardData) | ||||||
|  |  | ||||||
| @@ -346,9 +412,6 @@ export default class CthulhuEternalRoll extends Roll { | |||||||
|         actingCharName: this.actorName, |         actingCharName: this.actorName, | ||||||
|         actingCharImg: this.actorImage, |         actingCharImg: this.actorImage, | ||||||
|         hasTarget: this.hasTarget, |         hasTarget: this.hasTarget, | ||||||
|         targetName: this.targetName, |  | ||||||
|         targetArmor: this.targetArmor, |  | ||||||
|         targetMalus: this.targetMalus, |  | ||||||
|         realDamage: this.realDamage, |         realDamage: this.realDamage, | ||||||
|         ...messageData, |         ...messageData, | ||||||
|       }, |       }, | ||||||
|   | |||||||
| @@ -1,80 +0,0 @@ | |||||||
| /** |  | ||||||
|  * Enricher qui permet de transformer un texte en un lien de lancer de dés |  | ||||||
|  * Pour une syntaxe de type @jet[x]{y}(z) avec x la caractéristique, y le titre et z l'avantage |  | ||||||
|  * x de type rob, dex, int, per, vol pour les caractéristiques |  | ||||||
|  * et de type oeil, verbe, san, bourse, magie pour les ressources |  | ||||||
|  * y est le titre du jet et permet de décrire l'action |  | ||||||
|  * z est l'avantage du jet, avec pour valeurs possibles : --, -, +, ++ |  | ||||||
|  */ |  | ||||||
| export function setupTextEnrichers() { |  | ||||||
|   CONFIG.TextEditor.enrichers = CONFIG.TextEditor.enrichers.concat([ |  | ||||||
|     { |  | ||||||
|       // eslint-disable-next-line no-useless-escape |  | ||||||
|       pattern: /\@jet\[(.+?)\]{(.*?)}\((.*?)\)/gm, |  | ||||||
|       enricher: async (match, options) => { |  | ||||||
|         const a = document.createElement("a") |  | ||||||
|         a.classList.add("ask-roll-journal") |  | ||||||
|         const target = match[1] |  | ||||||
|         const title = match[2] |  | ||||||
|         const avantage = match[3] |  | ||||||
|  |  | ||||||
|         let type = "resource" |  | ||||||
|         if (["rob", "dex", "int", "per", "vol"].includes(target)) { |  | ||||||
|           type = "save" |  | ||||||
|         } |  | ||||||
|  |  | ||||||
|         let rollAvantage = "normal" |  | ||||||
|         if (avantage) { |  | ||||||
|           switch (avantage) { |  | ||||||
|             case "++": |  | ||||||
|               rollAvantage = "++" |  | ||||||
|               break |  | ||||||
|             case "+": |  | ||||||
|               rollAvantage = "+" |  | ||||||
|               break |  | ||||||
|             case "-": |  | ||||||
|               rollAvantage = "-" |  | ||||||
|               break |  | ||||||
|             case "--": |  | ||||||
|               rollAvantage = "--" |  | ||||||
|               break |  | ||||||
|             default: |  | ||||||
|               break |  | ||||||
|           } |  | ||||||
|         } |  | ||||||
|  |  | ||||||
|         a.dataset.rollType = type |  | ||||||
|         a.dataset.rollTarget = target |  | ||||||
|         a.dataset.rollTitle = title |  | ||||||
|         a.dataset.rollAvantage = rollAvantage |  | ||||||
|         a.innerHTML = ` |  | ||||||
|             <i class="fas fa-dice-d20"></i> ${getLibelle(target)}${rollAvantage !== "normal" ? rollAvantage : ""} |  | ||||||
|           ` |  | ||||||
|         return a |  | ||||||
|       }, |  | ||||||
|     }, |  | ||||||
|   ]) |  | ||||||
| } |  | ||||||
| const mapLibelles = { |  | ||||||
|   rob: "ROB", |  | ||||||
|   dex: "DEX", |  | ||||||
|   int: "INT", |  | ||||||
|   per: "PER", |  | ||||||
|   vol: "VOL", |  | ||||||
|   oeil: "OEIL", |  | ||||||
|   verbe: "VERBE", |  | ||||||
|   san: "SANTE MENTALE", |  | ||||||
|   bourse: "BOURSE", |  | ||||||
|   magie: "MAGIE", |  | ||||||
| } |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * Retourne le libellé associé à la valeur qui sera affiché dans le journal |  | ||||||
|  * @param {string} value |  | ||||||
|  */ |  | ||||||
| function getLibelle(value) { |  | ||||||
|   if (mapLibelles[value]) { |  | ||||||
|     return mapLibelles[value] |  | ||||||
|   } |  | ||||||
|   return null |  | ||||||
| } |  | ||||||
| @@ -1,82 +0,0 @@ | |||||||
| export class Macros { |  | ||||||
|   /** |  | ||||||
|    * Creates a macro based on the type of data dropped onto the hotbar. |  | ||||||
|    * |  | ||||||
|    * @param {Object} dropData The data object representing the item dropped. |  | ||||||
|    * @param {string} dropData.type The type of the dropped item (e.g., "Actor", "JournalEntry", "roll"). |  | ||||||
|    * @param {string} dropData.uuid The UUID of the dropped item. |  | ||||||
|    * @param {string} [dropData.actorId] The ID of the actor (required if type is "roll"). |  | ||||||
|    * @param {string} [dropData.rollType] The type of roll (required if type is "roll"). |  | ||||||
|    * @param {string} [dropData.rollTarget] The target of the roll (required if type is "roll"). |  | ||||||
|    * @param {string} [dropData.value] The value of the roll (required if type is "roll"). |  | ||||||
|    * @param {number} slot The hotbar slot where the macro will be created. |  | ||||||
|    * |  | ||||||
|    * @returns {Promise<void>} A promise that resolves when the macro is created. |  | ||||||
|    */ |  | ||||||
|   static createCthulhuEternalMacro = async function (dropData, slot) { |  | ||||||
|     switch (dropData.type) { |  | ||||||
|       case "Actor": |  | ||||||
|         const actor = await fromUuid(dropData.uuid) |  | ||||||
|         const actorCommand = `game.actors.get("${actor.id}").sheet.render(true)` |  | ||||||
|         this.createMacro(slot, actor.name, actorCommand, actor.img) |  | ||||||
|         break |  | ||||||
|  |  | ||||||
|       case "JournalEntry": |  | ||||||
|         const journal = await fromUuid(dropData.uuid) |  | ||||||
|         const journalCommand = `game.journal.get("${journal.id}").sheet.render(true)` |  | ||||||
|         this.createMacro(slot, journal.name, journalCommand, journal.img ? journal.img : "icons/svg/book.svg") |  | ||||||
|         break |  | ||||||
|  |  | ||||||
|       case "roll": |  | ||||||
|         const rollCommand = |  | ||||||
|           dropData.rollType === "save" |  | ||||||
|             ? `game.actors.get('${dropData.actorId}').system.roll('${dropData.rollType}', '${dropData.rollTarget}', '=');` |  | ||||||
|             : `game.actors.get('${dropData.actorId}').system.roll('${dropData.rollType}', '${dropData.rollTarget}');` |  | ||||||
|         const rollName = `${game.i18n.localize("TENEBRIS.Label.jet")} ${game.i18n.localize(`TENEBRIS.Manager.${dropData.rollTarget}`)}` |  | ||||||
|         this.createMacro(slot, rollName, rollCommand, "icons/svg/d20-grey.svg") |  | ||||||
|         break |  | ||||||
|  |  | ||||||
|       case "rollDamage": |  | ||||||
|         const weapon = game.actors.get(dropData.actorId).items.get(dropData.rollTarget) |  | ||||||
|         const rollDamageCommand = `game.actors.get('${dropData.actorId}').system.roll('${dropData.rollType}', '${dropData.rollTarget}');` |  | ||||||
|         const rollDamageName = `${game.i18n.localize("TENEBRIS.Label.jet")} ${weapon.name}` |  | ||||||
|         this.createMacro(slot, rollDamageName, rollDamageCommand, weapon.img) |  | ||||||
|         break |  | ||||||
|  |  | ||||||
|       case "rollAttack": |  | ||||||
|         const rollAttackCommand = `game.actors.get('${dropData.actorId}').system.roll('${dropData.rollValue}', '${dropData.rollTarget}');` |  | ||||||
|         const rollAttackName = `${game.i18n.localize("TENEBRIS.Label.jet")} ${dropData.rollTarget}` |  | ||||||
|         this.createMacro(slot, rollAttackName, rollAttackCommand, "icons/svg/d20-grey.svg") |  | ||||||
|         break |  | ||||||
|  |  | ||||||
|       default: |  | ||||||
|         // Handle other cases or do nothing |  | ||||||
|         break |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   /** |  | ||||||
|    * Create a macro |  | ||||||
|    * All macros are flaged with a tenebris.macro flag at true |  | ||||||
|    * @param {*} slot |  | ||||||
|    * @param {*} name |  | ||||||
|    * @param {*} command |  | ||||||
|    * @param {*} img |  | ||||||
|    */ |  | ||||||
|   static createMacro = async function (slot, name, command, img) { |  | ||||||
|     let macro = game.macros.contents.find((m) => m.name === name && m.command === command) |  | ||||||
|     if (!macro) { |  | ||||||
|       macro = await Macro.create( |  | ||||||
|         { |  | ||||||
|           name: name, |  | ||||||
|           type: "script", |  | ||||||
|           img: img, |  | ||||||
|           command: command, |  | ||||||
|           flags: { "tenebris.macro": true }, |  | ||||||
|         }, |  | ||||||
|         { displaySheet: false }, |  | ||||||
|       ) |  | ||||||
|       game.user.assignHotbarMacro(macro, slot) |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| @@ -9,3 +9,5 @@ export { default as CthulhuEternalBond } from "./bond.mjs" | |||||||
| export { default as CthulhuEternalGear } from "./gear.mjs" | export { default as CthulhuEternalGear } from "./gear.mjs" | ||||||
| export { default as CthulhuEternalMotivation } from "./motivation.mjs" | export { default as CthulhuEternalMotivation } from "./motivation.mjs" | ||||||
| export { default as CthulhuEternalArchetype } from "./archetype.mjs" | export { default as CthulhuEternalArchetype } from "./archetype.mjs" | ||||||
|  | export { default as CthulhuEternalVehicle } from "./vehicle.mjs" | ||||||
|  |  | ||||||
|   | |||||||
| @@ -9,6 +9,7 @@ export default class CthulhuEternalGHear extends foundry.abstract.TypeDataModel | |||||||
|     schema.description = new fields.HTMLField({ required: true, textSearch: true }) |     schema.description = new fields.HTMLField({ required: true, textSearch: true }) | ||||||
|     schema.settings = new fields.StringField({ required: true, initial: "modern", choices: SYSTEM.AVAILABLE_SETTINGS }) |     schema.settings = new fields.StringField({ required: true, initial: "modern", choices: SYSTEM.AVAILABLE_SETTINGS }) | ||||||
|     schema.resourceLevel = new fields.NumberField({ required: true, initial: 0, min: 0 }) |     schema.resourceLevel = new fields.NumberField({ required: true, initial: 0, min: 0 }) | ||||||
|  |     schema.state = new fields.StringField({ required: true, initial: "pristine", choices: SYSTEM.EQUIPMENT_STATES }) | ||||||
|  |  | ||||||
|     return schema |     return schema | ||||||
|   } |   } | ||||||
|   | |||||||
| @@ -5,7 +5,8 @@ export default class CthulhuEternalMentalDisorder extends foundry.abstract.TypeD | |||||||
|     const schema = {} |     const schema = {} | ||||||
|  |  | ||||||
|     schema.description = new fields.HTMLField({ required: true, textSearch: true }) |     schema.description = new fields.HTMLField({ required: true, textSearch: true }) | ||||||
|  |     schema.cured = new fields.BooleanField({ required: true, initial: false }) | ||||||
|  |      | ||||||
|     return schema |     return schema | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -33,8 +33,8 @@ export default class CthulhuEternalProtagonist extends foundry.abstract.TypeData | |||||||
|     }) |     }) | ||||||
|  |  | ||||||
|     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 }), | ||||||
|       stunned: new fields.BooleanField({ required: true, initial: false }) |       stunned: new fields.BooleanField({ required: true, initial: false }) | ||||||
|     }) |     }) | ||||||
|  |  | ||||||
| @@ -44,16 +44,23 @@ export default class CthulhuEternalProtagonist extends foundry.abstract.TypeData | |||||||
|       recovery: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), |       recovery: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), | ||||||
|       violence:  new fields.ArrayField(new fields.BooleanField(), { required: true, initial: [false, false, false], min:3, max:3}), |       violence:  new fields.ArrayField(new fields.BooleanField(), { required: true, initial: [false, false, false], min:3, max:3}), | ||||||
|       helplessness: new fields.ArrayField(new fields.BooleanField(), { required: true, initial: [false, false, false], min:3, max:3 }), |       helplessness: new fields.ArrayField(new fields.BooleanField(), { required: true, initial: [false, false, false], min:3, max:3 }), | ||||||
|       breakingPoint: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) |       breakingPoint: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), | ||||||
|  |       insanity: new fields.StringField({ required: true, nullable: false, initial: "none", choices:SYSTEM.INSANITY }), | ||||||
|     }) |     }) | ||||||
|  |  | ||||||
|     schema.damageBonus = new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) |     schema.damageBonus = new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) | ||||||
|  |  | ||||||
|     schema.resources = new fields.SchemaField({ |     schema.resources = new fields.SchemaField({ | ||||||
|       value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), |       value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), // Unused but kept for compatibility | ||||||
|  |       permanentRating: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), | ||||||
|       hand: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), |       hand: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), | ||||||
|  |       currentHand: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), | ||||||
|       stowed: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), |       stowed: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), | ||||||
|       storage: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) |       currentStowed: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), | ||||||
|  |       storage: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), | ||||||
|  |       currentStorage: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }), | ||||||
|  |       checks: new fields.ArrayField(new fields.BooleanField(), { required: true, initial: [false, false, false], min:3, max:3 }), | ||||||
|  |       nbValidChecks: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) | ||||||
|     }) |     }) | ||||||
|  |  | ||||||
|     schema.biodata = new fields.SchemaField({ |     schema.biodata = new fields.SchemaField({ | ||||||
| @@ -66,6 +73,8 @@ export default class CthulhuEternalProtagonist extends foundry.abstract.TypeData | |||||||
|       eyes: new fields.StringField({ required: true, nullable: false, initial: "" }), |       eyes: new fields.StringField({ required: true, nullable: false, initial: "" }), | ||||||
|       hair: new fields.StringField({ required: true, nullable: false, initial: "" }), |       hair: new fields.StringField({ required: true, nullable: false, initial: "" }), | ||||||
|       harshness: new fields.StringField({ required: true, nullable: false, initial: "normal", choices:SYSTEM.HARSHNESS }), |       harshness: new fields.StringField({ required: true, nullable: false, initial: "normal", choices:SYSTEM.HARSHNESS }), | ||||||
|  |       adaptedToViolence: new fields.BooleanField({ required: true, initial: false }), | ||||||
|  |       adaptedToHelplessness: new fields.BooleanField({ required: true, initial: false }) | ||||||
|     }) |     }) | ||||||
|  |  | ||||||
|     return schema |     return schema | ||||||
| @@ -90,18 +99,13 @@ export default class CthulhuEternalProtagonist extends foundry.abstract.TypeData | |||||||
|     let unnatural = this.parent.items.find(i => i.type === "skill" && i.name.toLowerCase() === game.i18n.localize("CTHULHUETERNAL.Skill.Unnatural").toLowerCase()) |     let unnatural = this.parent.items.find(i => i.type === "skill" && i.name.toLowerCase() === game.i18n.localize("CTHULHUETERNAL.Skill.Unnatural").toLowerCase()) | ||||||
|     let minus = 0 |     let minus = 0 | ||||||
|     if (unnatural) { |     if (unnatural) { | ||||||
|       minus = unnatural.data.skillTotal |       minus = unnatural.system.skillTotal | ||||||
|     } |     } | ||||||
|     let maxSan = Math.max(99 - minus, 0) |     let maxSan = Math.max(99 - minus, 0) | ||||||
|     if ( this.san.max !== maxSan) { |     if ( this.san.max !== maxSan) { | ||||||
|       updates[`system.san.max`] = maxSan |       updates[`system.san.max`] = maxSan | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     let bp = Math.max(this.san.value - this.characteristics.pow.value, 0) |  | ||||||
|     if ( this.san.breakingPoint !== bp) { |  | ||||||
|       updates[`system.san.breakingPoint`] = bp |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     let recoverySan = this.characteristics.pow.value * 5 |     let recoverySan = this.characteristics.pow.value * 5 | ||||||
|     if (recoverySan > this.san.max) { |     if (recoverySan > this.san.max) { | ||||||
|       recoverySan = this.san.max |       recoverySan = this.san.max | ||||||
| @@ -137,6 +141,25 @@ export default class CthulhuEternalProtagonist extends foundry.abstract.TypeData | |||||||
|       updates[`system.hp.value`] = this.hp.max |       updates[`system.hp.value`] = this.hp.max | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     if (this.resources.permanentRating < 0) { | ||||||
|  |       updates[`system.resources.permanentRating`] = 0 | ||||||
|  |     } | ||||||
|  |      | ||||||
|  |     let resourceIndex = Math.max(Math.min(this.resources.permanentRating, 20), 0) | ||||||
|  |     let breakdown = SYSTEM.RESOURCE_BREAKDOWN[resourceIndex]  | ||||||
|  |     if (this.resources.hand !== breakdown.hand) { | ||||||
|  |       updates[`system.resources.hand`] = breakdown.hand | ||||||
|  |     } | ||||||
|  |     if (this.resources.stowed !== breakdown.stowed) { | ||||||
|  |       updates[`system.resources.stowed`] = breakdown.stowed | ||||||
|  |     } | ||||||
|  |     if (this.resources.storage !== breakdown.storage) { | ||||||
|  |       updates[`system.resources.storage`] = breakdown.storage + (this.resources.permanentRating - resourceIndex) | ||||||
|  |     } | ||||||
|  |     if (this.resources.nbValidChecks !== breakdown.checks) { | ||||||
|  |       updates[`system.resources.nbValidChecks`] = breakdown.checks | ||||||
|  |     } | ||||||
|  |      | ||||||
|     if (Object.keys(updates).length > 0) { |     if (Object.keys(updates).length > 0) { | ||||||
|       this.parent.update(updates) |       this.parent.update(updates) | ||||||
|     } |     } | ||||||
| @@ -151,6 +174,21 @@ export default class CthulhuEternalProtagonist extends foundry.abstract.TypeData | |||||||
|     return this.wp.value === 0 |     return this.wp.value === 0 | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  |   isExhausted() {  | ||||||
|  |     return this.wp.exhausted | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   setBP() { | ||||||
|  |     let updates = {} | ||||||
|  |     let bp = Math.max(this.san.value - this.characteristics.pow.value, 0) | ||||||
|  |     if ( this.san.breakingPoint !== bp) { | ||||||
|  |       updates[`system.san.breakingPoint`] = bp | ||||||
|  |     } | ||||||
|  |     if (Object.keys(updates).length > 0) { | ||||||
|  |       this.parent.update(updates) | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |    | ||||||
|   /** */ |   /** */ | ||||||
|   /** |   /** | ||||||
|    * Rolls a dice for a character. |    * Rolls a dice for a character. | ||||||
| @@ -167,6 +205,7 @@ export default class CthulhuEternalProtagonist extends foundry.abstract.TypeData | |||||||
|       rollItem, |       rollItem, | ||||||
|       isLowWP: this.isLowWP(), |       isLowWP: this.isLowWP(), | ||||||
|       isZeroWP: this.isZeroWP(), |       isZeroWP: this.isZeroWP(), | ||||||
|  |       isExhausted: this.isExhausted(), | ||||||
|       actorId: this.parent.id, |       actorId: this.parent.id, | ||||||
|       actorName: this.parent.name, |       actorName: this.parent.name, | ||||||
|       actorImage: this.parent.img, |       actorImage: this.parent.img, | ||||||
|   | |||||||
| @@ -20,7 +20,6 @@ export default class CthulhuEternalSkill extends foundry.abstract.TypeDataModel | |||||||
|   /** @override */ |   /** @override */ | ||||||
|   static LOCALIZATION_PREFIXES = ["CTHULHUETERNAL.Skill"] |   static LOCALIZATION_PREFIXES = ["CTHULHUETERNAL.Skill"] | ||||||
|  |  | ||||||
|    |  | ||||||
|   prepareDerivedData() { |   prepareDerivedData() { | ||||||
|     super.prepareDerivedData(); |     super.prepareDerivedData(); | ||||||
|     this.skillTotal = this.computeScore(); |     this.skillTotal = this.computeScore(); | ||||||
|   | |||||||
							
								
								
									
										34
									
								
								module/models/vehicle.mjs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								module/models/vehicle.mjs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,34 @@ | |||||||
|  | import { SYSTEM } from "../config/system.mjs" | ||||||
|  | import CthulhuEternalRoll from "../documents/roll.mjs" | ||||||
|  |  | ||||||
|  | export default class CthulhuEternalVehicle extends foundry.abstract.TypeDataModel { | ||||||
|  |   static defineSchema() { | ||||||
|  |     const fields = foundry.data.fields | ||||||
|  |     const requiredInteger = { required: true, nullable: false, integer: true } | ||||||
|  |     const schema = {} | ||||||
|  |  | ||||||
|  |     schema.settings = new fields.StringField({ required: true, initial: "modern", choices: SYSTEM.AVAILABLE_SETTINGS }) | ||||||
|  |  | ||||||
|  |     schema.hp = new fields.SchemaField({ | ||||||
|  |       value: new fields.NumberField({ ...requiredInteger, initial: 1, min: 0 }), | ||||||
|  |       max: new fields.NumberField({ ...requiredInteger, initial: 1, min: 0 }) | ||||||
|  |     }) | ||||||
|  |  | ||||||
|  |     schema.armor = new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) | ||||||
|  |     schema.surfaceSpeed = new fields.StringField({ required: true, initial: "slow", choices: SYSTEM.VEHICLE_SPEED }) | ||||||
|  |     schema.airSpeed = new fields.StringField({ required: true, initial: "none", choices: SYSTEM.VEHICLE_SPEED }) | ||||||
|  |     schema.state = new fields.StringField({ required: true, initial: "pristine", choices: SYSTEM.EQUIPMENT_STATES }) | ||||||
|  |      | ||||||
|  |     schema.crew = new fields.ArrayField(new fields.StringField(), { required: false, initial: [], min:0 }) | ||||||
|  |     schema.resourceLevel = new fields.NumberField({ required: true, initial: 0, min: 0 }) | ||||||
|  |  | ||||||
|  |     schema.description = new fields.HTMLField({ required: true, textSearch: true }) | ||||||
|  |     schema.notes = new fields.HTMLField({ required: true, textSearch: true }) | ||||||
|  |  | ||||||
|  |     return schema | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   /** @override */ | ||||||
|  |   static LOCALIZATION_PREFIXES = ["CTHULHUETERNAL.Vehicle"] | ||||||
|  |  | ||||||
|  | } | ||||||
| @@ -17,6 +17,7 @@ export default class LethalFantasySkill extends foundry.abstract.TypeDataModel { | |||||||
|     schema.killRadius = new fields.NumberField({ required: true, initial: 0, min: 0 }) |     schema.killRadius = new fields.NumberField({ required: true, initial: 0, min: 0 }) | ||||||
|     schema.armorPiercing = new fields.NumberField({ required: true, initial: 0, min: 0 }) |     schema.armorPiercing = new fields.NumberField({ required: true, initial: 0, min: 0 }) | ||||||
|     schema.weaponSubtype = new fields.StringField({ required: true, initial: "basicfirearm", choices: SYSTEM.WEAPON_SUBTYPE })   |     schema.weaponSubtype = new fields.StringField({ required: true, initial: "basicfirearm", choices: SYSTEM.WEAPON_SUBTYPE })   | ||||||
|  |     schema.state = new fields.StringField({ required: true, initial: "pristine", choices: SYSTEM.EQUIPMENT_STATES }) | ||||||
|  |  | ||||||
|     schema.resourceLevel = new fields.NumberField({ required: true, initial: 0, min: 0 }) |     schema.resourceLevel = new fields.NumberField({ required: true, initial: 0, min: 0 }) | ||||||
|      |      | ||||||
|   | |||||||
| @@ -9,24 +9,5 @@ | |||||||
|  */ |  */ | ||||||
| export function handleSocketEvent({ action = null, data = {} } = {}) { | export function handleSocketEvent({ action = null, data = {} } = {}) { | ||||||
|   console.debug("handleSocketEvent", action, data) |   console.debug("handleSocketEvent", action, data) | ||||||
|   switch (action) { |  | ||||||
|     case "fortune": |  | ||||||
|       return CthulhuEternalFortune.handleSocketEvent(data) |  | ||||||
|     case "askRoll": |  | ||||||
|       return _askRoll(data) |  | ||||||
|   } |  | ||||||
| } | } | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * Handles the socket event to ask for a roll. |  | ||||||
|  * |  | ||||||
|  * @param {Object} [options={}] The options object. |  | ||||||
|  * @param {string} [options.userId] The ID of the user who initiated the roll. |  | ||||||
|  */ |  | ||||||
| export function _askRoll({ userId } = {}) { |  | ||||||
|   console.debug(`handleSocketEvent _askRoll from ${userId} !`) |  | ||||||
|   const currentUser = game.user._id |  | ||||||
|   if (userId === currentUser) { |  | ||||||
|     foundry.audio.AudioHelper.play({ src: "/systems/fvtt-cthulhu-eternal/sounds/drums.wav", volume: 0.8, autoplay: true, loop: false }, false) |  | ||||||
|   } |  | ||||||
| } |  | ||||||
|   | |||||||
| @@ -3,9 +3,9 @@ export default class CthulhuEternalUtils { | |||||||
|  |  | ||||||
|   static registerSettings() { |   static registerSettings() { | ||||||
|     game.settings.register("fvtt-cthulhu-eternal", "settings-era", { |     game.settings.register("fvtt-cthulhu-eternal", "settings-era", { | ||||||
|       name: game.i18n.localize("CHTUHLUETERNAL.Settings.era"), |       name: game.i18n.localize("CTHULHUETERNAL.Settings.era"), | ||||||
|       hint: game.i18n.localize("CHTUHLUETERNAL.Settings.eraHint"), |       hint: game.i18n.localize("CTHULHUETERNAL.Settings.eraHint"), | ||||||
|       default: true, |       default: "jazz", | ||||||
|       scope: "world", |       scope: "world", | ||||||
|       type: String, |       type: String, | ||||||
|       choices: SYSTEM.AVAILABLE_SETTINGS, |       choices: SYSTEM.AVAILABLE_SETTINGS, | ||||||
|   | |||||||
							
								
								
									
										
											BIN
										
									
								
								packs-system/skills/000005.ldb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								packs-system/skills/000005.ldb
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										0
									
								
								packs-system/skills/000078.log
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								packs-system/skills/000078.log
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										1
									
								
								packs-system/skills/CURRENT
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								packs-system/skills/CURRENT
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | |||||||
|  | MANIFEST-000076 | ||||||
							
								
								
									
										0
									
								
								packs-system/skills/LOCK
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								packs-system/skills/LOCK
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										8
									
								
								packs-system/skills/LOG
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								packs-system/skills/LOG
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | |||||||
|  | 2025/01/25-20:17:02.992814 7f697a7fc6c0 Recovering log #74 | ||||||
|  | 2025/01/25-20:17:03.002900 7f697a7fc6c0 Delete type=3 #72 | ||||||
|  | 2025/01/25-20:17:03.002968 7f697a7fc6c0 Delete type=0 #74 | ||||||
|  | 2025/01/25-20:19:31.386247 7f6978bff6c0 Level-0 table #79: started | ||||||
|  | 2025/01/25-20:19:31.386288 7f6978bff6c0 Level-0 table #79: 0 bytes OK | ||||||
|  | 2025/01/25-20:19:31.417028 7f6978bff6c0 Delete type=0 #77 | ||||||
|  | 2025/01/25-20:19:31.593890 7f6978bff6c0 Manual compaction at level-0 from '!folders!DD8331Hda4rhvEf9' @ 72057594037927935 : 1 .. '!items!zplzTG30QXHURusr' @ 0 : 0; will stop at (end) | ||||||
|  | 2025/01/25-20:19:31.593942 7f6978bff6c0 Manual compaction at level-1 from '!folders!DD8331Hda4rhvEf9' @ 72057594037927935 : 1 .. '!items!zplzTG30QXHURusr' @ 0 : 0; will stop at (end) | ||||||
							
								
								
									
										8
									
								
								packs-system/skills/LOG.old
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								packs-system/skills/LOG.old
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | |||||||
|  | 2025/01/25-20:09:49.585129 7f697a7fc6c0 Recovering log #70 | ||||||
|  | 2025/01/25-20:09:49.662901 7f697a7fc6c0 Delete type=3 #68 | ||||||
|  | 2025/01/25-20:09:49.662960 7f697a7fc6c0 Delete type=0 #70 | ||||||
|  | 2025/01/25-20:11:19.050068 7f6978bff6c0 Level-0 table #75: started | ||||||
|  | 2025/01/25-20:11:19.050103 7f6978bff6c0 Level-0 table #75: 0 bytes OK | ||||||
|  | 2025/01/25-20:11:19.078755 7f6978bff6c0 Delete type=0 #73 | ||||||
|  | 2025/01/25-20:11:19.078917 7f6978bff6c0 Manual compaction at level-0 from '!folders!DD8331Hda4rhvEf9' @ 72057594037927935 : 1 .. '!items!zplzTG30QXHURusr' @ 0 : 0; will stop at (end) | ||||||
|  | 2025/01/25-20:11:19.078946 7f6978bff6c0 Manual compaction at level-1 from '!folders!DD8331Hda4rhvEf9' @ 72057594037927935 : 1 .. '!items!zplzTG30QXHURusr' @ 0 : 0; will stop at (end) | ||||||
							
								
								
									
										
											BIN
										
									
								
								packs-system/skills/MANIFEST-000076
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								packs-system/skills/MANIFEST-000076
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| @@ -4,6 +4,7 @@ | |||||||
| .fvtt-cthulhu-eternal { | .fvtt-cthulhu-eternal { | ||||||
|   @import "mixins.less"; |   @import "mixins.less"; | ||||||
|   @import "protagonist.less"; |   @import "protagonist.less"; | ||||||
|  |   @import "vehicle.less"; | ||||||
|   @import "skill.less"; |   @import "skill.less"; | ||||||
|   @import "injury.less"; |   @import "injury.less"; | ||||||
|   @import "weapon.less"; |   @import "weapon.less"; | ||||||
| @@ -17,4 +18,4 @@ | |||||||
|   @import "archetype.less"; |   @import "archetype.less"; | ||||||
| } | } | ||||||
|  |  | ||||||
| @import "roll.less"; | @import "roll.less"; | ||||||
| @@ -7,13 +7,22 @@ | |||||||
|   --font-secondary: "RozhaOne"; |   --font-secondary: "RozhaOne"; | ||||||
|   --font-title: "Broadway"; |   --font-title: "Broadway"; | ||||||
|   --logo-standard: url("../assets/logos/reanimated-ce-logo.webp"); |   --logo-standard: url("../assets/logos/reanimated-ce-logo.webp"); | ||||||
|   --color-success: darkgreen; |   --color-success: rgb(18, 233, 18); | ||||||
|   --color-failure: darkred; |   --color-failure: darkred; | ||||||
|   --color-critical-success: lightgreen; |   --color-warning: darkorange; | ||||||
|   --color-critical-failure: lightcoral; |   --color-critical-success: rgb(21, 39, 204); | ||||||
|  |   --color-critical-failure: rgb(141, 32, 231); | ||||||
|   --img-icon-color-filter: brightness(0) saturate(100%) invert(52%) sepia(9%) saturate(2368%) hue-rotate(360deg) brightness(86%) contrast(84%); |   --img-icon-color-filter: brightness(0) saturate(100%) invert(52%) sepia(9%) saturate(2368%) hue-rotate(360deg) brightness(86%) contrast(84%); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | .d100 { | ||||||
|  |   width: 18px; | ||||||
|  |   height: 18px; | ||||||
|  |   color: black; | ||||||
|  |   border-width: 0px; | ||||||
|  |   filter: var(--img-icon-color-filter); | ||||||
|  | } | ||||||
|  |  | ||||||
| .item .thumbnail, | .item .thumbnail, | ||||||
| .item-img { | .item-img { | ||||||
|   /*filter: invert(90%) sepia(10%) saturate(1215%) hue-rotate(55deg) brightness(93%) contrast(89%);*/ |   /*filter: invert(90%) sepia(10%) saturate(1215%) hue-rotate(55deg) brightness(93%) contrast(89%);*/ | ||||||
|   | |||||||
| @@ -21,7 +21,7 @@ | |||||||
|   } |   } | ||||||
|  |  | ||||||
|   input[name="name"] { |   input[name="name"] { | ||||||
|     height: 50px; |     height: 40px; | ||||||
|     margin-right: 10px; |     margin-right: 10px; | ||||||
|     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); | ||||||
| @@ -30,8 +30,8 @@ | |||||||
|   } |   } | ||||||
|  |  | ||||||
|   fieldset { |   fieldset { | ||||||
|     margin-bottom: 5px; |     margin-bottom: 4px; | ||||||
|     border-radius: 5px; |     border-radius: 4px; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   .form-fields { |   .form-fields { | ||||||
| @@ -57,13 +57,20 @@ | |||||||
| .protagonist-sheet-common { | .protagonist-sheet-common { | ||||||
|   label { |   label { | ||||||
|     font-family: var(--font-secondary); |     font-family: var(--font-secondary); | ||||||
|     font-size: calc(var(--font-size-standard) * 1.2); |     font-size: calc(var(--font-size-standard) * 1.0); | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .vehicle-sheet-common { | ||||||
|  |   label { | ||||||
|  |     font-family: var(--font-secondary); | ||||||
|  |     font-size: calc(var(--font-size-standard) * 1.0); | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  |  | ||||||
| .item-sheet-common { | .item-sheet-common { | ||||||
|   .form-fields { |   .form-fields { | ||||||
|     padding-top: 5px; |     padding-top: 4px; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   label { |   label { | ||||||
|   | |||||||
| @@ -67,30 +67,82 @@ | |||||||
|         } |         } | ||||||
|       } |       } | ||||||
|       .san { |       .san { | ||||||
|  |         align-content: flex-start; | ||||||
|         input { |         input { | ||||||
|           min-width: 2.2rem; |           min-width: 2.2rem; | ||||||
|  |           max-width: 2.2rem; | ||||||
|  |           margin-bottom: 4px; | ||||||
|  |         } | ||||||
|  |         select { | ||||||
|  |           min-width: 6rem; | ||||||
|  |           max-width: 6rem; | ||||||
|  |         } | ||||||
|  |         .rollable:hover, | ||||||
|  |         .rollable:focus { | ||||||
|  |           text-shadow: 0 0 8px var(--color-shadow-primary); | ||||||
|  |           cursor: pointer; | ||||||
|  |           font-size: 0.9rem; | ||||||
|  |         }   | ||||||
|  |         .button { | ||||||
|  |           min-width: 4rem; | ||||||
|  |           max-width: 4rem; | ||||||
|         } |         } | ||||||
|         .san-checkbox { |         .san-checkbox { | ||||||
|           min-width: 1rem; |           min-width: 1rem; | ||||||
|           max-width: 1rem; |           max-width: 1rem; | ||||||
|         } |         } | ||||||
|         .label-field { |         .label-short-field { | ||||||
|           flex-grow: 0; |           font-size: 0.9rem; | ||||||
|  |           max-width: 3rem; | ||||||
|  |           min-width: 3rem; | ||||||
|  |           flex-grow: 1; | ||||||
|  |         } | ||||||
|  |         .label-recovery { | ||||||
|           margin-left: 4px; |           margin-left: 4px; | ||||||
|         } |         } | ||||||
|  |         .label-field { | ||||||
|  |           font-size: 0.9rem; | ||||||
|  |           max-width: 6rem; | ||||||
|  |           min-width: 6rem; | ||||||
|  |           flex-grow: 1; | ||||||
|  |         } | ||||||
|  |         .label-bp { | ||||||
|  |           flex-grow: 1; | ||||||
|  |           max-width: 3rem; | ||||||
|  |           min-width: 3rem; | ||||||
|  |           margin-left: 4px; | ||||||
|  |         } | ||||||
|  |         .label-insanity { | ||||||
|  |           flex-grow: 1; | ||||||
|  |           margin-left: 4px; | ||||||
|  |           max-width: 8rem; | ||||||
|  |           min-width: 8rem; | ||||||
|  |         } | ||||||
|         .spacing { |         .spacing { | ||||||
|           margin-left: 4px; |           margin-left: 4px; | ||||||
|         } |         } | ||||||
|  |         .d100 { | ||||||
|  |           flex: 0; | ||||||
|  |         } | ||||||
|       } |       } | ||||||
|       .willpower { |       .willpower { | ||||||
|         input { |         input { | ||||||
|           min-width: 2.2rem; |           min-width: 2.4rem; | ||||||
|  |           max-width: 2.4rem; | ||||||
|  |         } | ||||||
|  |         input[type="checkbox"] { | ||||||
|  |           min-width: 1rem; | ||||||
|  |           max-width: 1rem; | ||||||
|         } |         } | ||||||
|         .label-field { |         .label-field { | ||||||
|           flex-grow: 0; |           flex-grow: 1; | ||||||
|           margin-left: 4px; |           margin-left: 4px; | ||||||
|  |           max-width: 5rem; | ||||||
|  |           min-width: 5rem; | ||||||
|  |           font-size: 0.9rem; | ||||||
|         } |         } | ||||||
|         .checkbox { |         .checkbox {        | ||||||
|  |           flex-grow: 0; | ||||||
|           min-width: 1rem; |           min-width: 1rem; | ||||||
|           max-width: 1rem; |           max-width: 1rem; | ||||||
|         } |         } | ||||||
| @@ -164,12 +216,20 @@ | |||||||
|         text-shadow: 0 0 8px var(--color-shadow-primary); |         text-shadow: 0 0 8px var(--color-shadow-primary); | ||||||
|         cursor: pointer; |         cursor: pointer; | ||||||
|       } |       } | ||||||
|  |       .rollable { | ||||||
|  |         min-width: 3rem; | ||||||
|  |         max-width: 3rem; | ||||||
|  |       } | ||||||
|  |       .char-text { | ||||||
|  |         margin-left: 0.5rem; | ||||||
|  |       } | ||||||
|       .form-group { |       .form-group { | ||||||
|         flex: 1; |         flex: 0; | ||||||
|         padding-left: 5px; |         padding-left: 5px; | ||||||
|         .form-fields { |         .form-fields { | ||||||
|  |           font-size: 1.1rem; | ||||||
|           flex: none; |           flex: none; | ||||||
|           width: 70px; |           width: 40px; | ||||||
|         } |         } | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
| @@ -195,11 +255,42 @@ | |||||||
|   .field-label { |   .field-label { | ||||||
|     margin-left: 8px; |     margin-left: 8px; | ||||||
|   } |   } | ||||||
|   .biodata { |    | ||||||
|  |   .adapted { | ||||||
|  |     display: grid; | ||||||
|  |     grid-template-columns: repeat(2, 1fr); | ||||||
|  |     gap: 8px; | ||||||
|  |     label { | ||||||
|  |       min-width: 20rem; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |    | ||||||
|  |   .resources { | ||||||
|     display: grid; |     display: grid; | ||||||
|     grid-template-columns: repeat(3, 1fr); |     grid-template-columns: repeat(3, 1fr); | ||||||
|     gap: 8px; |     gap: 8px; | ||||||
|  |     label { | ||||||
|  |       min-width: 8rem; | ||||||
|  |     } | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  |   .features, | ||||||
|  |   .biodata { | ||||||
|  |     display: grid; | ||||||
|  |     grid-template-columns: repeat(2, 1fr); | ||||||
|  |     gap: 8px; | ||||||
|  |     label { | ||||||
|  |       min-width: 3.0rem; | ||||||
|  |     } | ||||||
|  |     .feature { | ||||||
|  |         display: flex; | ||||||
|  |         align-items: center; | ||||||
|  |         gap: 4px; | ||||||
|  |         min-width: 18rem; | ||||||
|  |         max-width: 18rem;   | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |  | ||||||
|   .motivations { |   .motivations { | ||||||
|     display: grid; |     display: grid; | ||||||
|     grid-template-columns: repeat(2, 1fr); |     grid-template-columns: repeat(2, 1fr); | ||||||
| @@ -261,8 +352,8 @@ | |||||||
|         max-width: 8rem; |         max-width: 8rem; | ||||||
|       } |       } | ||||||
|       .item-img { |       .item-img { | ||||||
|         width: 32px; |         width: 24px; | ||||||
|         height: 32px; |         height: 24px; | ||||||
|         margin: 4px 0 0 0; |         margin: 4px 0 0 0; | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
| @@ -298,16 +389,16 @@ | |||||||
|         max-width: 12rem; |         max-width: 12rem; | ||||||
|       } |       } | ||||||
|       .type { |       .type { | ||||||
|         min-width: 4rem; |         min-width: 5rem; | ||||||
|         max-width: 4rem; |         max-width: 5rem; | ||||||
|       } |       } | ||||||
|       .level { |       .level { | ||||||
|         min-width: 2rem; |         min-width: 2rem; | ||||||
|         max-width: 2rem; |         max-width: 2rem; | ||||||
|       } |       } | ||||||
|       .item-img { |       .item-img { | ||||||
|         width: 32px; |         width: 24px; | ||||||
|         height: 32px; |         height: 24px; | ||||||
|         margin: 4px 0 0 0; |         margin: 4px 0 0 0; | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
| @@ -331,8 +422,8 @@ | |||||||
|         max-width: 14rem; |         max-width: 14rem; | ||||||
|       } |       } | ||||||
|       .item-img { |       .item-img { | ||||||
|         width: 32px; |         width: 24px; | ||||||
|         height: 32px; |         height: 24px; | ||||||
|         margin: 4px 0 0 0; |         margin: 4px 0 0 0; | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
| @@ -356,8 +447,8 @@ | |||||||
|         max-width: 14rem; |         max-width: 14rem; | ||||||
|       } |       } | ||||||
|       .item-img { |       .item-img { | ||||||
|         width: 32px; |         width: 24px; | ||||||
|         height: 32px; |         height: 24px; | ||||||
|         margin: 4px 0 0 0; |         margin: 4px 0 0 0; | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
| @@ -383,7 +474,7 @@ | |||||||
|       align-items: center; |       align-items: center; | ||||||
|       gap: 4px; |       gap: 4px; | ||||||
|       min-width: 13rem; |       min-width: 13rem; | ||||||
|       max-width: 13srem; |       max-width: 13rem; | ||||||
|       .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); | ||||||
| @@ -394,16 +485,16 @@ | |||||||
|         max-width: 2rem; |         max-width: 2rem; | ||||||
|       } |       } | ||||||
|       .damage { |       .damage { | ||||||
|         min-width: 5rem; |         min-width: 6rem; | ||||||
|         max-width: 5rem; |         max-width: 6rem; | ||||||
|       } |       } | ||||||
|       .name { |       .name { | ||||||
|         min-width: 8rem; |         min-width: 10rem; | ||||||
|         max-width: 8rem; |         max-width: 10rem; | ||||||
|       } |       } | ||||||
|       .item-img { |       .item-img { | ||||||
|         width: 32px; |         width: 24px; | ||||||
|         height: 32px; |         height: 24px; | ||||||
|         margin: 4px 0 0 0; |         margin: 4px 0 0 0; | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
| @@ -436,8 +527,8 @@ | |||||||
|         max-width: 8rem; |         max-width: 8rem; | ||||||
|       } |       } | ||||||
|       .item-img { |       .item-img { | ||||||
|         width: 32px; |         width: 24px; | ||||||
|         height: 32px; |         height: 24px; | ||||||
|         margin: 4px 0 0 0; |         margin: 4px 0 0 0; | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
| @@ -470,8 +561,8 @@ | |||||||
|         max-width: 8rem; |         max-width: 8rem; | ||||||
|       } |       } | ||||||
|       .item-img { |       .item-img { | ||||||
|         width: 32px; |         width: 24px; | ||||||
|         height: 32px; |         height: 24px; | ||||||
|         margin: 4px 0 0 0; |         margin: 4px 0 0 0; | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -36,6 +36,13 @@ | |||||||
|   } |   } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | .red-warning { | ||||||
|  |   color: var(--color-failure); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .orange-warning { | ||||||
|  |   color: var(--color-warning); | ||||||
|  | } | ||||||
|  |  | ||||||
| .dialog-damage { | .dialog-damage { | ||||||
|   display: flex; |   display: flex; | ||||||
|   | |||||||
							
								
								
									
										223
									
								
								styles/vehicle.less
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										223
									
								
								styles/vehicle.less
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,223 @@ | |||||||
|  | .vehicle-content { | ||||||
|  |   .sheet-common(); | ||||||
|  |   .vehicle-sheet-common(); | ||||||
|  |   overflow: scroll; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .sheet-tabs { | ||||||
|  |   background-color: var(--color-light-1); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .vehicle-main { | ||||||
|  |   background-color: var(--color-light-1); | ||||||
|  |   display: flex; | ||||||
|  |  | ||||||
|  |   .vehicle-pc { | ||||||
|  |     display: flex; | ||||||
|  |     gap: 4px; | ||||||
|  |     flex: 1; | ||||||
|  |  | ||||||
|  |     .vehicle-left { | ||||||
|  |       min-width: 180px; | ||||||
|  |       display: flex; | ||||||
|  |       flex-direction: column; | ||||||
|  |  | ||||||
|  |       .vehicle-left-image { | ||||||
|  |         display: flex; | ||||||
|  |         justify-content: center; | ||||||
|  |         align-items: center; | ||||||
|  |         padding-bottom: 8px; | ||||||
|  |         .vehicle-img { | ||||||
|  |           height: 140px; | ||||||
|  |           width: auto; | ||||||
|  |           border: none; | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |  | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     .vehicle-right { | ||||||
|  |       display: flex; | ||||||
|  |       flex-direction: column; | ||||||
|  |       gap: 5px; | ||||||
|  |  | ||||||
|  |       .vehicle-name { | ||||||
|  |         display: flex; | ||||||
|  |         input { | ||||||
|  |           font-family: var(--font-title); | ||||||
|  |           font-size: calc(var(--font-size-standard) * 1.4); | ||||||
|  |           width: 400px; | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |  | ||||||
|  |       .vehicle-infos { | ||||||
|  |         display: flex; | ||||||
|  |         flex-direction: column; | ||||||
|  |         gap: 4px; | ||||||
|  |  | ||||||
|  |         label { | ||||||
|  |           min-width: 120px; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         .vehicle-hp { | ||||||
|  |           display: flex; | ||||||
|  |           gap: 2px; | ||||||
|  |           align-items: center; | ||||||
|  |           .vehicle-hp-value { | ||||||
|  |             .form-fields input { | ||||||
|  |               flex: none; | ||||||
|  |               width: 50px; | ||||||
|  |               margin-left: 4px; | ||||||
|  |               font-size: calc(var(--font-size-standard) * 1.4); | ||||||
|  |             } | ||||||
|  |           }           | ||||||
|  |           .vehicle-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; | ||||||
|  |           } | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   .vehicle-pc-play { | ||||||
|  |     min-width: 500px; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   .vehicle-pc-edit { | ||||||
|  |     min-width: 650px; | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .vehicle-biography { | ||||||
|  |   background-color: var(--color-light-1); | ||||||
|  |   prose-mirror.inactive { | ||||||
|  |     min-height: 40px; | ||||||
|  |   } | ||||||
|  |   prose-mirror.active { | ||||||
|  |     min-height: 150px; | ||||||
|  |   } | ||||||
|  |   .field-label { | ||||||
|  |     margin-left: 8px; | ||||||
|  |   } | ||||||
|  |    | ||||||
|  |    | ||||||
|  |   .biodata { | ||||||
|  |     display: grid; | ||||||
|  |     grid-template-columns: repeat(2, 1fr); | ||||||
|  |     gap: 8px; | ||||||
|  |     label { | ||||||
|  |       min-width: 3.0rem; | ||||||
|  |     } | ||||||
|  |     .feature { | ||||||
|  |         display: flex; | ||||||
|  |         align-items: center; | ||||||
|  |         gap: 4px; | ||||||
|  |         min-width: 18rem; | ||||||
|  |         max-width: 18rem;   | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |  | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .tab.vehicle-equipment { | ||||||
|  |   background-color: var(--color-light-1); | ||||||
|  |   display: grid; | ||||||
|  |   grid-template-columns: 1fr; | ||||||
|  |   legend { | ||||||
|  |     a { | ||||||
|  |       font-size: calc(var(--font-size-standard) * 1.4); | ||||||
|  |       padding-left: 5px; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |   .weapons { | ||||||
|  |     display: grid; | ||||||
|  |     grid-template-columns: repeat(2, 1fr); | ||||||
|  |     gap: 4px; | ||||||
|  |     .weapon { | ||||||
|  |       display: flex; | ||||||
|  |       align-items: center; | ||||||
|  |       gap: 4px; | ||||||
|  |       min-width: 13rem; | ||||||
|  |       max-width: 13srem; | ||||||
|  |       .rollable:hover, | ||||||
|  |       .rollable:focus { | ||||||
|  |         text-shadow: 0 0 8px var(--color-shadow-primary); | ||||||
|  |         cursor: pointer; | ||||||
|  |       } | ||||||
|  |       .controls { | ||||||
|  |         min-width: 2rem; | ||||||
|  |         max-width: 2rem; | ||||||
|  |       } | ||||||
|  |       .damage { | ||||||
|  |         min-width: 5rem; | ||||||
|  |         max-width: 5rem; | ||||||
|  |       } | ||||||
|  |       .name { | ||||||
|  |         min-width: 8rem; | ||||||
|  |         max-width: 8rem; | ||||||
|  |       } | ||||||
|  |       .item-img { | ||||||
|  |         width: 32px; | ||||||
|  |         height: 32px; | ||||||
|  |         margin: 4px 0 0 0; | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |   .gears { | ||||||
|  |     display: grid; | ||||||
|  |     grid-template-columns: repeat(3, 1fr); | ||||||
|  |     gap: 4px; | ||||||
|  |     .gear { | ||||||
|  |       display: flex; | ||||||
|  |       align-items: center; | ||||||
|  |       gap: 4px; | ||||||
|  |       min-width: 13rem; | ||||||
|  |       max-width: 13srem; | ||||||
|  |       .rollable:hover, | ||||||
|  |       .rollable:focus { | ||||||
|  |         text-shadow: 0 0 8px var(--color-shadow-primary); | ||||||
|  |         cursor: pointer; | ||||||
|  |       } | ||||||
|  |       .controls { | ||||||
|  |         min-width: 2rem; | ||||||
|  |         max-width: 2rem; | ||||||
|  |       } | ||||||
|  |       .damage { | ||||||
|  |         min-width: 5rem; | ||||||
|  |         max-width: 5rem; | ||||||
|  |       } | ||||||
|  |       .name { | ||||||
|  |         min-width: 8rem; | ||||||
|  |         max-width: 8rem; | ||||||
|  |       } | ||||||
|  |       .item-img { | ||||||
|  |         width: 32px; | ||||||
|  |         height: 32px; | ||||||
|  |         margin: 4px 0 0 0; | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   prose-mirror.inactive { | ||||||
|  |     min-height: 40px; | ||||||
|  |   } | ||||||
|  |   prose-mirror.active { | ||||||
|  |     min-height: 150px; | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										11
									
								
								system.json
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								system.json
									
									
									
									
									
								
							| @@ -1,12 +1,12 @@ | |||||||
| { | { | ||||||
|   "id": "fvtt-cthulhu-eternal", |   "id": "fvtt-cthulhu-eternal", | ||||||
|   "title": "Cthulhu Eternal RPG", |   "title": "Cthulhu Eternal RPG", | ||||||
|   "description": "", |   "description": "The OGL Cthulhu Eternal RPG system for Foundry VTT", | ||||||
|   "manifest": "https://www.uberwald.me/gitea/public/fvtt-cthulhu-eternal/raw/branch/main/system.json", |   "manifest": "https://www.uberwald.me/gitea/public/fvtt-cthulhu-eternal/raw/branch/main/system.json", | ||||||
|   "download": "#{DOWNLOAD}#", |   "download": "#{DOWNLOAD}#", | ||||||
|   "url": "https://www.uberwald.me/gitea/public/fvtt-cthulhu-eternal", |   "url": "https://www.uberwald.me/gitea/public/fvtt-cthulhu-eternal", | ||||||
|   "license": "LICENSE", |   "license": "LICENSE", | ||||||
|   "version": "12.0.1", |   "version": "12.0.4", | ||||||
|   "authors": [ |   "authors": [ | ||||||
|     { |     { | ||||||
|       "name": "Uberwald", |       "name": "Uberwald", | ||||||
| @@ -34,7 +34,8 @@ | |||||||
|   ], |   ], | ||||||
|   "documentTypes": { |   "documentTypes": { | ||||||
|     "Actor": { |     "Actor": { | ||||||
|       "protagonist": { "htmlFields": ["description", "notes"] } |       "protagonist": { "htmlFields": ["description", "notes"] }, | ||||||
|  |       "vehicle": { "htmlFields": ["description", "notes"] } | ||||||
|     }, |     }, | ||||||
|     "Item": { |     "Item": { | ||||||
|       "skill": { "htmlFields": ["description"] }, |       "skill": { "htmlFields": ["description"] }, | ||||||
| @@ -55,7 +56,7 @@ | |||||||
|       "banner": "", |       "banner": "", | ||||||
|       "label": "Skills", |       "label": "Skills", | ||||||
|       "system": "fvtt-cthulhu-eternal", |       "system": "fvtt-cthulhu-eternal", | ||||||
|       "path": "packs/skills", |       "path": "packs-system/skills", | ||||||
|       "type": "Item" |       "type": "Item" | ||||||
|     } |     } | ||||||
|   ], |   ], | ||||||
| @@ -65,5 +66,5 @@ | |||||||
|   }, |   }, | ||||||
|   "primaryTokenAttribute": "hp", |   "primaryTokenAttribute": "hp", | ||||||
|   "socket": true, |   "socket": true, | ||||||
|   "background": "systems/fvtt-cthulhu-eternal/assets/background.webp" |   "background": "systems/fvtt-cthulhu-eternal/assets/ui/background_01.webp" | ||||||
| } | } | ||||||
|   | |||||||
| @@ -1,6 +0,0 @@ | |||||||
| <div class="tenebris ask-roll"> |  | ||||||
|     <h4 class="ask-roll-title">{{title}}<br>{{text}}</h4> |  | ||||||
|     <a class="ask-roll-dice" data-type="{{rollType}}" data-value="{{value}}" data-avantage="{{avantage}}"> |  | ||||||
|         <i class="fas fa-dice-d20" title="{{localize 'TENEBRIS.Manager.roll'}}"></i>  {{localize 'TENEBRIS.Manager.roll'}} |  | ||||||
|     </a> |  | ||||||
| </div> |  | ||||||
| @@ -1,55 +1,78 @@ | |||||||
| {{!log 'chat-message' this}} | {{!log 'chat-message' this}} | ||||||
| <div class="{{cssClass}}"> | <div class="{{cssClass}}"> | ||||||
|     <div class="intro-chat"> |   <div class="intro-chat"> | ||||||
|         <div class="intro-img"> |     <div class="intro-img"> | ||||||
|           <img src="{{actingCharImg}}" data-tooltip="{{actingCharName}}" /> |       <img src="{{actingCharImg}}" data-tooltip="{{actingCharName}}" /> | ||||||
|         </div> |  | ||||||
|         <div class="intro-right"> |  | ||||||
|             <ul> |  | ||||||
|               {{#if (eq rollType "char")}} |  | ||||||
|               <li><strong>{{localize "CTHULHUETERNAL.Label.charRoll"}}</strong></li> |  | ||||||
|               {{/if}} |  | ||||||
|                |  | ||||||
|               {{#if (eq rollType "skill")}} |  | ||||||
|               <li><strong>{{localize "CTHULHUETERNAL.Label.skillRoll"}}</strong></li> |  | ||||||
|               {{/if}}         |  | ||||||
|  |  | ||||||
|               {{#if weapon}} |  | ||||||
|               <li><strong>Weapon : {{weapon.name}}</strong></li> |  | ||||||
|               {{/if}}         |  | ||||||
|  |  | ||||||
|               <li><strong>{{rollItem.name}} : {{initialScore}}%</strong></li> |  | ||||||
|               <li>{{localize "CTHULHUETERNAL.Label.modifier"}} : {{modifier}}%</li> |  | ||||||
|               <li>{{localize "CTHULHUETERNAL.Label.targetScore"}} : {{targetScore}}%</li> |  | ||||||
|               {{#if isSuccess}} |  | ||||||
|                 {{#if isCritical}}   |  | ||||||
|                 <li class="result-critical-success">{{localize "CTHULHUETERNAL.Label.criticalSuccess"}}</li> |  | ||||||
|                 {{else}} |  | ||||||
|                 <li class="result-success">{{localize "CTHULHUETERNAL.Label.success"}}</li> |  | ||||||
|                 {{/if}} |  | ||||||
|               {{/if}} |  | ||||||
|               {{#if isFailure}} |  | ||||||
|                 {{#if isCritical}} |  | ||||||
|                 <li class="result-critical-failure">{{localize "CTHULHUETERNAL.Label.criticalFailure"}}</li> |  | ||||||
|                 {{else}} |  | ||||||
|                 <li class="result-failure">{{localize "CTHULHUETERNAL.Label.failure"}}</li> |  | ||||||
|                 {{/if}}  |  | ||||||
|               {{/if}} |  | ||||||
|             </ul> |  | ||||||
|         </div> |  | ||||||
|     </div> |     </div> | ||||||
|      {{#if isDamage}} |     <div class="intro-right"> | ||||||
|         <div> |       <ul> | ||||||
|             {{#if (and isGM hasTarget)}} |         {{#if (eq rollType "char")}} | ||||||
|                     {{{localize "CTHULHUETERNAL.Roll.displayArmor" targetName=targetName targetArmor=targetArmor realDamage=realDamage}}} |         <li><strong>{{localize "CTHULHUETERNAL.Label.charRoll"}}</strong></li> | ||||||
|             {{/if}} |         {{/if}} | ||||||
|         </div> |  | ||||||
|      {{/if}} |         {{#if (eq rollType "skill")}} | ||||||
|     {{#unless isPrivate}} |         <li><strong>{{localize "CTHULHUETERNAL.Label.skillRoll"}}</strong></li> | ||||||
|         <div class="dice-result"> |         {{/if}} | ||||||
|             <h4 class="dice-total">{{total}}</h4> |  | ||||||
|             <div class="dice-formula">{{formula}}</div> |         {{#if weapon}} | ||||||
|             {{{tooltip}}}         |         <li><strong>Weapon : {{weapon.name}}</strong></li> | ||||||
|         </div> |         {{/if}} | ||||||
|     {{/unless}} |          | ||||||
| </div> |         {{#if (eq rollType "resource")}} | ||||||
|  |         <li><strong>{{rollItem.name}} : {{initialScore}}</strong></li> | ||||||
|  |         {{else}} | ||||||
|  |         <li><strong>{{rollItem.name}} : {{initialScore}}%</strong></li> | ||||||
|  |         {{/if}} | ||||||
|  |  | ||||||
|  |         {{#if isZeroWP}} | ||||||
|  |         <li class="red-warning">Zero WP : Automatic failure (ie 0%)</li> | ||||||
|  |         {{else}} | ||||||
|  |         {{#if isLowWP}} | ||||||
|  |         <li class="orange-warning">Low WP : -20%</li> | ||||||
|  |         {{/if}} | ||||||
|  |         {{/if}} | ||||||
|  |  | ||||||
|  |         {{#if isExhausted}} | ||||||
|  |         <li class="orange-warning">Exhausted : -20%</li> | ||||||
|  |         {{/if}} | ||||||
|  |  | ||||||
|  |         {{#if  (eq rollType "resource")}} | ||||||
|  |         <li>{{localize "CTHULHUETERNAL.Label.multiplier"}} : {{multiplier}}</li> | ||||||
|  |         {{else}} | ||||||
|  |         <li>{{localize "CTHULHUETERNAL.Label.modifier"}} : {{modifier}}%</li> | ||||||
|  |         {{/if}} | ||||||
|  |    | ||||||
|  |         <li>{{localize "CTHULHUETERNAL.Label.targetScore"}} : {{targetScore}}%</li> | ||||||
|  |         {{#if isSuccess}} | ||||||
|  |         {{#if isCritical}} | ||||||
|  |         <li class="result-critical-success">{{localize "CTHULHUETERNAL.Label.criticalSuccess"}}</li> | ||||||
|  |         {{else}} | ||||||
|  |         <li class="result-success">{{localize "CTHULHUETERNAL.Label.success"}}</li> | ||||||
|  |         {{/if}} | ||||||
|  |         {{/if}} | ||||||
|  |         {{#if isFailure}} | ||||||
|  |         {{#if isCritical}} | ||||||
|  |         <li class="result-critical-failure">{{localize "CTHULHUETERNAL.Label.criticalFailure"}}</li> | ||||||
|  |         {{else}} | ||||||
|  |         <li class="result-failure">{{localize "CTHULHUETERNAL.Label.failure"}}</li> | ||||||
|  |         {{/if}} | ||||||
|  |         {{/if}} | ||||||
|  |       </ul> | ||||||
|  |     </div> | ||||||
|  |   </div> | ||||||
|  |   {{#if isDamage}} | ||||||
|  |   <div> | ||||||
|  |     {{#if (and isGM hasTarget)}} | ||||||
|  |     {{{localize "CTHULHUETERNAL.Roll.displayArmor" targetName=targetName targetArmor=targetArmor | ||||||
|  |     realDamage=realDamage}}} | ||||||
|  |     {{/if}} | ||||||
|  |   </div> | ||||||
|  |   {{/if}} | ||||||
|  |   {{#unless isPrivate}} | ||||||
|  |   <div class="dice-result"> | ||||||
|  |     <h4 class="dice-total">{{total}}</h4> | ||||||
|  |     <div class="dice-formula">{{formula}}</div> | ||||||
|  |     {{{tooltip}}} | ||||||
|  |   </div> | ||||||
|  |   {{/unless}} | ||||||
|  | </div> | ||||||
| @@ -7,6 +7,7 @@ | |||||||
|   <fieldset> |   <fieldset> | ||||||
|     {{formField systemFields.settings value=system.settings localize=true}} |     {{formField systemFields.settings value=system.settings localize=true}} | ||||||
|     {{formField systemFields.resourceLevel value=system.resourceLevel}} |     {{formField systemFields.resourceLevel value=system.resourceLevel}} | ||||||
|  |     {{formField systemFields.state value=system.state localize=true}} | ||||||
|   </fieldset> |   </fieldset> | ||||||
|  |  | ||||||
|   <fieldset> |   <fieldset> | ||||||
|   | |||||||
| @@ -4,6 +4,10 @@ | |||||||
|     {{formInput fields.name value=source.name}} |     {{formInput fields.name value=source.name}} | ||||||
|   </div>  |   </div>  | ||||||
|    |    | ||||||
|  |   <fieldset> | ||||||
|  |     {{formField systemFields.cured value=system.cured localize=true}} | ||||||
|  |   </fieldset> | ||||||
|  |  | ||||||
|   <fieldset> |   <fieldset> | ||||||
|     <legend>{{localize "CTHULHUETERNAL.Label.description"}}</legend> |     <legend>{{localize "CTHULHUETERNAL.Label.description"}}</legend> | ||||||
|     {{formInput |     {{formInput | ||||||
|   | |||||||
| @@ -1,7 +1,29 @@ | |||||||
| <section class="tab protagonist-{{tab.id}} {{tab.cssClass}}" data-tab="{{tab.id}}" data-group="{{tab.group}}"> | <section class="tab protagonist-{{tab.id}} {{tab.cssClass}}" data-tab="{{tab.id}}" data-group="{{tab.group}}"> | ||||||
|    |  | ||||||
|  |   <fieldset> | ||||||
|  |     <legend>{{localize "CTHULHUETERNAL.Label.resources"}}</legend> | ||||||
|  |      <div class="resources"> | ||||||
|  |       {{formField systemFields.resources.fields.permanentRating value=system.resources.permanentRating name="system.resources.permanentRating" localize=true}} | ||||||
|  |       <div> | ||||||
|  |         <span class="label-field">{{localize "CTHULHUETERNAL.Label.resourceChecks"}}</span> | ||||||
|  |         {{#each system.resources.checks as |check idx|}} | ||||||
|  |         <input class="san-checkbox" type="checkbox" data-action="updateCheckResource" data-index="{{@index}}" | ||||||
|  |           data-name="checks" {{#if check}} checked {{/if}}   {{#if (gte @index @root.system.resources.nbValidChecks)}} disabled {{/if}}> | ||||||
|  |         {{/each}} | ||||||
|  |       </div> | ||||||
|  |       <button class="resource-roll rollable" data-roll-type="resource"><img src="systems/fvtt-cthulhu-eternal/assets/ui/d100.svg" class="d100" />Resource roll</button> | ||||||
|  |       {{formField systemFields.resources.fields.hand value=system.resources.hand name="system.resources.hand" localize=true disabled=true}} | ||||||
|  |       {{formField systemFields.resources.fields.stowed value=system.resources.stowed name="system.resources.stowed" localize=true disabled=true}} | ||||||
|  |       {{formField systemFields.resources.fields.storage value=system.resources.storage name="system.resources.storage" localize=true disabled=true}} | ||||||
|  |       </div> | ||||||
|  |   </fieldset> | ||||||
|  |  | ||||||
|   <fieldset> |   <fieldset> | ||||||
|     <legend>{{localize "CTHULHUETERNAL.Label.biodata"}}</legend> |     <legend>{{localize "CTHULHUETERNAL.Label.biodata"}}</legend> | ||||||
|  |     <div class="adapted"> | ||||||
|  |       {{formField systemFields.biodata.fields.adaptedToViolence value=system.biodata.adaptedToViolence name="system.biodata.adaptedToViolence" localize=true}}       | ||||||
|  |       {{formField systemFields.biodata.fields.adaptedToHelplessness value=system.biodata.adaptedToHelplessness name="system.biodata.adaptedToHelplessness" localize=true}}             | ||||||
|  |     </div> | ||||||
|     <div class="biodata"> |     <div class="biodata"> | ||||||
|       {{formField systemFields.biodata.fields.harshness value=system.biodata.harshness name="system.biodata.harshness" localize=true}}       |       {{formField systemFields.biodata.fields.harshness value=system.biodata.harshness name="system.biodata.harshness" localize=true}}       | ||||||
|       {{formField systemFields.biodata.fields.age value=system.biodata.age name="system.biodata.age" localize=true classes="field-label"}} |       {{formField systemFields.biodata.fields.age value=system.biodata.age name="system.biodata.age" localize=true classes="field-label"}} | ||||||
| @@ -9,38 +31,49 @@ | |||||||
|       {{formField systemFields.biodata.fields.height value=system.biodata.height name="system.biodata.height" localize=true classes="field-label"}} |       {{formField systemFields.biodata.fields.height value=system.biodata.height name="system.biodata.height" localize=true classes="field-label"}} | ||||||
|       {{formField systemFields.biodata.fields.eyes value=system.biodata.eyes name="system.biodata.eyes" localize=true classes="field-label"}} |       {{formField systemFields.biodata.fields.eyes value=system.biodata.eyes name="system.biodata.eyes" localize=true classes="field-label"}} | ||||||
|       {{formField systemFields.biodata.fields.hair value=system.biodata.hair name="system.biodata.hair" localize=true classes="field-label"}} |       {{formField systemFields.biodata.fields.hair value=system.biodata.hair name="system.biodata.hair" localize=true classes="field-label"}} | ||||||
|       {{formField systemFields.biodata.fields.gender value=system.biodata.gender name="system.biodata.gender" localize=true classes="field-label"}} |       {{formField systemFields.biodata.fields.home value=system.biodata.home name="system.biodata.home" localize=true classes="field-label"}} | ||||||
|       {{formField systemFields.biodata.fields.birthplace value=system.biodata.birthplace name="system.biodata.birthplace" localize=true classes="field-label"}} |       {{formField systemFields.biodata.fields.birthplace value=system.biodata.birthplace name="system.biodata.birthplace" localize=true classes="field-label"}} | ||||||
|     </div> |     </div> | ||||||
|   </fieldset> |   </fieldset> | ||||||
|  |  | ||||||
|   <fieldset> |   <fieldset> | ||||||
|     <legend>{{localize "CTHULHUETERNAL.Label.motivations"}}{{#if isEditMode}} |     <legend>{{localize "CTHULHUETERNAL.Label.distinguishingFeatures"}}</legend> | ||||||
|       <a class="action" data-tooltip="{{localize "CTHULHUETERNAL.Tooltip.addMotivation"}}" data-tooltip-direction="UP"><i class="fas fa-plus" data-action="createMotivation"></i></a>{{/if}}</legend> |     <div class="features"> | ||||||
|     <div class="motivations"> |       <div class="feature">  | ||||||
|       {{#each motivations as |item|}} |         <label>{{localize "CTHULHUETERNAL.Label.strShort"}}</label> | ||||||
|         {{!log 'armor' this}} |         {{formInput systemFields.characteristics.fields.str.fields.feature value=system.characteristics.str.feature localize=true}}  | ||||||
|         <div class="motivation" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}"> |       </div> | ||||||
|           <img class="item-img" src="{{item.img}}" data-tooltip="{{item.name}}" /> |       <div class="feature">  | ||||||
|           <div class="name" data-tooltip="{{{item.system.description}}}"> |         <label>{{localize "CTHULHUETERNAL.Label.dexShort"}}</label> | ||||||
|             {{item.name}} |         {{formInput systemFields.characteristics.fields.dex.fields.feature value=system.characteristics.dex.feature localize=true}}  | ||||||
|           </div> |       </div> | ||||||
|           <div class="controls"> |       <div class="feature">  | ||||||
|             <a data-tooltip="{{localize 'CTHULHUETERNAL.Edit'}}" data-action="edit" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}"><i class="fas fa-edit"></i></a> |         <label>{{localize "CTHULHUETERNAL.Label.conShort"}}</label> | ||||||
|             <a data-tooltip="{{localize 'CTHULHUETERNAL.Delete'}}" data-action="delete" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}"><i class="fas fa-trash"></i></a> |         {{formInput systemFields.characteristics.fields.con.fields.feature value=system.characteristics.con.feature localize=true}}  | ||||||
|           </div> |       </div> | ||||||
|         </div> |       <div class="feature">  | ||||||
|       {{/each}} |         <label>{{localize "CTHULHUETERNAL.Label.intShort"}}</label> | ||||||
|  |         {{formInput systemFields.characteristics.fields.int.fields.feature value=system.characteristics.int.feature localize=true}}  | ||||||
|  |       </div> | ||||||
|  |       <div class="feature">  | ||||||
|  |         <label>{{localize "CTHULHUETERNAL.Label.powShort"}}</label> | ||||||
|  |         {{formInput systemFields.characteristics.fields.pow.fields.feature value=system.characteristics.pow.feature localize=true}}  | ||||||
|  |       </div> | ||||||
|  |       <div class="feature">  | ||||||
|  |         <label>{{localize "CTHULHUETERNAL.Label.chaShort"}}</label> | ||||||
|  |         {{formInput systemFields.characteristics.fields.cha.fields.feature value=system.characteristics.cha.feature localize=true}}  | ||||||
|  |       </div> | ||||||
|     </div> |     </div> | ||||||
|   </fieldset> |   </fieldset>  | ||||||
|  |  | ||||||
|  |  | ||||||
|   <fieldset> |   <fieldset> | ||||||
|     <legend>{{localize "CTHULHUETERNAL.Label.description"}}</legend> |     <legend>{{localize "CTHULHUETERNAL.Label.description"}}</legend> | ||||||
|     {{formInput systemFields.description enriched=description value=system.description name="system.description" toggled=true}} |     {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} | ||||||
|   </fieldset> |   </fieldset> | ||||||
|    |    | ||||||
|   <fieldset> |   <fieldset> | ||||||
|     <legend>{{localize "CTHULHUETERNAL.Label.notes"}}</legend> |     <legend>{{localize "CTHULHUETERNAL.Label.notes"}}</legend> | ||||||
|     {{formInput systemFields.notes enriched=notes value=system.notes name="system.notes" toggled=true}} |     {{formInput systemFields.notes enriched=enrichedNotes value=system.notes name="system.notes" toggled=true}} | ||||||
|   </fieldset> |   </fieldset> | ||||||
| </section> | </section> | ||||||
| @@ -2,62 +2,81 @@ | |||||||
|  |  | ||||||
|   <fieldset> |   <fieldset> | ||||||
|     <legend>{{localize "CTHULHUETERNAL.Label.weapons"}}{{#if isEditMode}} |     <legend>{{localize "CTHULHUETERNAL.Label.weapons"}}{{#if isEditMode}} | ||||||
|       <a class="action" data-tooltip="{{localize "CTHULHUETERNAL.Tooltip.addWeapon"}}" data-tooltip-direction="UP"><i class="fas fa-plus" data-action="createWeapon"></i></a>{{/if}}</legend> |       <a class="action" data-tooltip="{{localize " CTHULHUETERNAL.Tooltip.addWeapon"}}" data-tooltip-direction="UP"><i | ||||||
|  |           class="fas fa-plus" data-action="createWeapon"></i></a>{{/if}} | ||||||
|  |     </legend> | ||||||
|     <div class="weapons"> |     <div class="weapons"> | ||||||
|       {{#each weapons as |item|}} |       {{#each weapons as |item|}} | ||||||
|         {{!log 'weapon' this}} |       {{!log 'weapon' this}} | ||||||
|         <div class="weapon item" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}" data-drag="true" > |       <div class="weapon item" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}" data-drag="true"> | ||||||
|           <img class="item-img" src="{{item.img}}" data-tooltip="{{item.name}}" /> |  | ||||||
|           <div class="name rollable" data-roll-type="weapon" data-tooltip="{{{item.system.description}}}"> |         <img class="item-img" src="{{item.img}}" data-tooltip="{{item.name}}" /> | ||||||
|             {{item.name}} |         <img src="systems/fvtt-cthulhu-eternal/assets/ui/d100.svg" class="d100" /> | ||||||
|           </div> |         <div class="name rollable" data-roll-type="weapon" data-tooltip="{{{item.system.description}}}"> | ||||||
|           <a class="damage rollable" data-item-id="{{item.id}}" data-action="roll" data-roll-type="damage" data-roll-value="{{item.system.damage}}">{{localize "CTHULHUETERNAL.Label.damageShort"}} : {{item.system.damage}}</a> |           {{item.name}} | ||||||
|           <div class="controls"> |  | ||||||
|             <a data-tooltip="{{localize 'CTHULHUETERNAL.Edit'}}" data-action="edit" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}"><i class="fas fa-edit"></i></a> |  | ||||||
|             <a data-tooltip="{{localize 'CTHULHUETERNAL.Delete'}}" data-action="delete" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}"><i class="fas fa-trash"></i></a> |  | ||||||
|           </div> |  | ||||||
|         </div> |         </div> | ||||||
|  |  | ||||||
|  |         <img src="systems/fvtt-cthulhu-eternal/assets/ui/d100.svg" class="d100" /> | ||||||
|  |         <a class="damage rollable" data-item-id="{{item.id}}" data-action="roll" data-roll-type="damage" | ||||||
|  |           data-roll-value="{{item.system.damage}}"> | ||||||
|  |           {{localize "CTHULHUETERNAL.Label.damageShort"}} : | ||||||
|  |           {{item.system.damage}}</a> | ||||||
|  |         <div class="controls"> | ||||||
|  |           <a data-tooltip="{{localize 'CTHULHUETERNAL.Edit'}}" data-action="edit" data-item-id="{{item.id}}" | ||||||
|  |             data-item-uuid="{{item.uuid}}"><i class="fas fa-edit"></i></a> | ||||||
|  |           <a data-tooltip="{{localize 'CTHULHUETERNAL.Delete'}}" data-action="delete" data-item-id="{{item.id}}" | ||||||
|  |             data-item-uuid="{{item.uuid}}"><i class="fas fa-trash"></i></a> | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|       {{/each}} |       {{/each}} | ||||||
|     </div> |     </div> | ||||||
|   </fieldset> |   </fieldset> | ||||||
|  |  | ||||||
|   <fieldset> |   <fieldset> | ||||||
|     <legend>{{localize "CTHULHUETERNAL.Label.armors"}}{{#if isEditMode}} |     <legend>{{localize "CTHULHUETERNAL.Label.armors"}}{{#if isEditMode}} | ||||||
|       <a class="action" data-tooltip="{{localize "CTHULHUETERNAL.Tooltip.addArmor"}}" data-tooltip-direction="UP"><i class="fas fa-plus" data-action="createArmor"></i></a>{{/if}}</legend> |       <a class="action" data-tooltip="{{localize " CTHULHUETERNAL.Tooltip.addArmor"}}" data-tooltip-direction="UP"><i | ||||||
|  |           class="fas fa-plus" data-action="createArmor"></i></a>{{/if}} | ||||||
|  |     </legend> | ||||||
|     <div class="armors"> |     <div class="armors"> | ||||||
|       {{#each armors as |item|}} |       {{#each armors as |item|}} | ||||||
|         {{!log 'armor' this}} |       {{!log 'armor' this}} | ||||||
|         <div class="armor" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}"> |       <div class="armor" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}"> | ||||||
|           <img class="item-img" src="{{item.img}}" data-tooltip="{{item.name}}" /> |         <img class="item-img" src="{{item.img}}" data-tooltip="{{item.name}}" /> | ||||||
|           <div class="name" data-tooltip="{{{item.system.description}}}"> |         <div class="name" data-tooltip="{{{item.system.description}}}"> | ||||||
|             {{item.name}} |           {{item.name}} | ||||||
|           </div> |  | ||||||
|           <span class="protection">{{localize "CTHULHUETERNAL.Label.armor"}} : {{item.system.protection}}</span> |  | ||||||
|           <div class="controls"> |  | ||||||
|             <a data-tooltip="{{localize 'CTHULHUETERNAL.Edit'}}" data-action="edit" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}"><i class="fas fa-edit"></i></a> |  | ||||||
|             <a data-tooltip="{{localize 'CTHULHUETERNAL.Delete'}}" data-action="delete" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}"><i class="fas fa-trash"></i></a> |  | ||||||
|           </div> |  | ||||||
|         </div> |         </div> | ||||||
|  |         <span class="protection">{{localize "CTHULHUETERNAL.Label.armor"}} : {{item.system.protection}}</span> | ||||||
|  |         <div class="controls"> | ||||||
|  |           <a data-tooltip="{{localize 'CTHULHUETERNAL.Edit'}}" data-action="edit" data-item-id="{{item.id}}" | ||||||
|  |             data-item-uuid="{{item.uuid}}"><i class="fas fa-edit"></i></a> | ||||||
|  |           <a data-tooltip="{{localize 'CTHULHUETERNAL.Delete'}}" data-action="delete" data-item-id="{{item.id}}" | ||||||
|  |             data-item-uuid="{{item.uuid}}"><i class="fas fa-trash"></i></a> | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|       {{/each}} |       {{/each}} | ||||||
|     </div> |     </div> | ||||||
|   </fieldset> |   </fieldset> | ||||||
|  |  | ||||||
|   <fieldset> |   <fieldset> | ||||||
|     <legend>{{localize "CTHULHUETERNAL.Label.gears"}}{{#if isEditMode}} |     <legend>{{localize "CTHULHUETERNAL.Label.gears"}}{{#if isEditMode}} | ||||||
|       <a class="action" data-tooltip="{{localize "CTHULHUETERNAL.Tooltip.addGear"}}" data-tooltip-direction="UP"><i class="fas fa-plus" data-action="createGear"></i></a>{{/if}}</legend> |       <a class="action" data-tooltip="{{localize " CTHULHUETERNAL.Tooltip.addGear"}}" data-tooltip-direction="UP"><i | ||||||
|  |           class="fas fa-plus" data-action="createGear"></i></a>{{/if}} | ||||||
|  |     </legend> | ||||||
|     <div class="gears"> |     <div class="gears"> | ||||||
|       {{#each gears as |item|}} |       {{#each gears as |item|}} | ||||||
|         {{!log 'armor' this}} |       {{!log 'armor' this}} | ||||||
|         <div class="gear" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}"> |       <div class="gear" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}"> | ||||||
|           <img class="item-img" src="{{item.img}}" data-tooltip="{{item.name}}" /> |         <img class="item-img" src="{{item.img}}" data-tooltip="{{item.name}}" /> | ||||||
|           <div class="name" data-tooltip="{{{item.system.description}}}"> |         <div class="name" data-tooltip="{{{item.system.description}}}"> | ||||||
|             {{item.name}} |           {{item.name}} | ||||||
|           </div> |  | ||||||
|           <div class="controls"> |  | ||||||
|             <a data-tooltip="{{localize 'CTHULHUETERNAL.Edit'}}" data-action="edit" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}"><i class="fas fa-edit"></i></a> |  | ||||||
|             <a data-tooltip="{{localize 'CTHULHUETERNAL.Delete'}}" data-action="delete" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}"><i class="fas fa-trash"></i></a> |  | ||||||
|           </div> |  | ||||||
|         </div> |         </div> | ||||||
|  |         <div class="controls"> | ||||||
|  |           <a data-tooltip="{{localize 'CTHULHUETERNAL.Edit'}}" data-action="edit" data-item-id="{{item.id}}" | ||||||
|  |             data-item-uuid="{{item.uuid}}"><i class="fas fa-edit"></i></a> | ||||||
|  |           <a data-tooltip="{{localize 'CTHULHUETERNAL.Delete'}}" data-action="delete" data-item-id="{{item.id}}" | ||||||
|  |             data-item-uuid="{{item.uuid}}"><i class="fas fa-trash"></i></a> | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|       {{/each}} |       {{/each}} | ||||||
|     </div> |     </div> | ||||||
|   </fieldset> |   </fieldset> | ||||||
|   | |||||||
| @@ -32,41 +32,63 @@ | |||||||
|         <fieldset class="san"> |         <fieldset class="san"> | ||||||
|           <legend>{{localize "CTHULHUETERNAL.Label.SAN"}}</legend> |           <legend>{{localize "CTHULHUETERNAL.Label.SAN"}}</legend> | ||||||
|           <div class="flexrow"> |           <div class="flexrow"> | ||||||
|             <span class="label-field">{{localize "CTHULHUETERNAL.Label.current"}}</span> |             <img src="systems/fvtt-cthulhu-eternal/assets/ui/d100.svg" class="d100" /> | ||||||
|             {{formField systemFields.san.fields.value value=system.san.value}} |             <label class="label-field rollable" data-roll-type="san" >{{localize "CTHULHUETERNAL.Label.current"}}</label> | ||||||
|              <span class="label-field">{{localize "CTHULHUETERNAL.Label.max"}}</span>  |             {{formInput systemFields.san.fields.value value=system.san.value}} | ||||||
|              {{formField systemFields.san.fields.max value=system.san.max rootId=partId disabled=true}} |              | ||||||
|             <span class="label-field">{{localize "CTHULHUETERNAL.Label.recovery"}}</span>  |             <span class="label-field label-recovery">{{localize "CTHULHUETERNAL.Label.recovery"}}</span>  | ||||||
|             {{formField systemFields.san.fields.recovery value=system.san.recovery disabled=true}} |             {{formInput systemFields.san.fields.recovery value=system.san.recovery disabled=true}} | ||||||
|             <span class="label-field" data-tooltip='{{localize "CTHULHUETERNAL.Tooltip.sanBP"}}'>{{localize |  | ||||||
|               "CTHULHUETERNAL.Label.breakingPoint"}}</span>  |             <span class="label-bp" data-tooltip='{{localize "CTHULHUETERNAL.Tooltip.sanBPShort"}}'>{{localize | ||||||
|               {{formField systemFields.san.fields.breakingPoint value=system.san.breakingPoint disabled=true}} |               "CTHULHUETERNAL.Label.sanBPShort"}}</span>  | ||||||
|  |             {{formInput systemFields.san.fields.breakingPoint value=system.san.breakingPoint disabled=true}} | ||||||
|  |  | ||||||
|  |           </div> | ||||||
|  |  | ||||||
|  |           <div class="flexrow"> | ||||||
|  |              | ||||||
|  |             <div class="flexrow"> | ||||||
|  |              <span class="label-short-field">{{localize "CTHULHUETERNAL.Label.max"}}</span>  | ||||||
|  |               {{formInput systemFields.san.fields.max value=system.san.max rootId=partId disabled=true}} | ||||||
|  |             </div> | ||||||
|  |  | ||||||
|  |             <span class="label-insanity" > | ||||||
|  |               {{localize "CTHULHUETERNAL.Label.tempInsanity"}} | ||||||
|  |             </span> | ||||||
|  |             {{formInput systemFields.san.fields.insanity value=system.san.insanity localize=true}} | ||||||
|  |  | ||||||
|  |             {{#if (not isPlayMode)}} | ||||||
|  |               <button data-action="setBP" class="button" data-tooltip="{{localize "CTHULHUETERNAL.Tooltip.setBP"}}">{{localize "CTHULHUETERNAL.Label.setBP"}}</button> | ||||||
|  |             {{/if}} | ||||||
|  |  | ||||||
|           </div> |           </div> | ||||||
|           <div class="flexrow"> |           <div class="flexrow"> | ||||||
|             {{localize "CTHULHUETERNAL.Label.violence"}} |  | ||||||
|  |             <span class="label-field">{{localize "CTHULHUETERNAL.Label.violence"}}</span> | ||||||
|             {{#each system.san.violence as |violence idx|}} |             {{#each system.san.violence as |violence idx|}} | ||||||
|             <input class="san-checkbox" type="checkbox" data-action="updateCheckboxArray" data-index="{{@index}}" |             <input class="san-checkbox" type="checkbox" data-action="updateCheckboxArray" data-index="{{@index}}" | ||||||
|               data-name="violence" {{#if violence}} checked {{/if}}> |               data-name="violence" {{#if violence}} checked {{/if}}> | ||||||
|             {{/each}} |             {{/each}} | ||||||
|             <span class="spacing"></span> |              | ||||||
|             {{localize "CTHULHUETERNAL.Label.helplessness"}} |             <span class="label-field">{{localize "CTHULHUETERNAL.Label.helplessness"}}</span> | ||||||
|             {{#each system.san.helplessness as |helplessness idx|}} |             {{#each system.san.helplessness as |helplessness idx|}} | ||||||
|             <input class="san-checkbox" type="checkbox" data-action="updateCheckboxArray" data-index="{{@index}}" |             <input class="san-checkbox" type="checkbox" data-action="updateCheckboxArray" data-index="{{@index}}" | ||||||
|               data-name="helplessness" {{#if helplessness}} checked {{/if}}> |               data-name="helplessness" {{#if helplessness}} checked {{/if}}> | ||||||
|             {{/each}} |             {{/each}} | ||||||
|  |  | ||||||
|           </div> |           </div> | ||||||
|  |  | ||||||
|         </fieldset> |         </fieldset> | ||||||
|  |  | ||||||
|         <fieldset class="willpower"> |         <fieldset class="willpower"> | ||||||
|           <legend>{{localize "CTHULHUETERNAL.Label.willpower"}}</legend> |           <legend>{{localize "CTHULHUETERNAL.Label.willpower"}}</legend> | ||||||
|           <div class="flexrow"> |           <div class="flexrow"> | ||||||
|             <span class="label-field">{{localize "CTHULHUETERNAL.Label.current"}}</span> |             <label class="label-field">{{localize "CTHULHUETERNAL.Label.current"}}</label> | ||||||
|             {{formField systemFields.wp.fields.value value=system.wp.value}} |             {{formInput systemFields.wp.fields.value value=system.wp.value}} | ||||||
|             <span class="label-field">{{localize "CTHULHUETERNAL.Label.max"}}</span> |             <label class="label-field">{{localize "CTHULHUETERNAL.Label.max"}}</label> | ||||||
|             {{formField systemFields.wp.fields.max value=system.wp.max rootId=partId disabled=true}} |             {{formInput systemFields.wp.fields.max value=system.wp.max rootId=partId disabled=true}} | ||||||
|             <span class="label-field">{{localize "CTHULHUETERNAL.Label.exhausted"}}</span> |             <label class="label-field">{{localize "CTHULHUETERNAL.Label.exhausted"}}</label> | ||||||
|             {{formField systemFields.wp.fields.exhausted value=system.wp.exhausted classes=checkbox}} |             {{formInput systemFields.wp.fields.exhausted value=system.wp.exhausted classes="checkbox"}} | ||||||
|  |  | ||||||
|           </div> |           </div> | ||||||
|         </fieldset> |         </fieldset> | ||||||
|  |  | ||||||
| @@ -76,47 +98,53 @@ | |||||||
|  |  | ||||||
|   <fieldset class="protagonist-characteristics protagonist-characteristics-{{ifThen isPlayMode 'play' 'edit'}}"> |   <fieldset class="protagonist-characteristics protagonist-characteristics-{{ifThen isPlayMode 'play' 'edit'}}"> | ||||||
|     <legend>{{localize "CTHULHUETERNAL.Label.characteristics"}}</legend> |     <legend>{{localize "CTHULHUETERNAL.Label.characteristics"}}</legend> | ||||||
|     <div class="protagonist-characteristic" data-drag="true" data-drag-type="characteristic"> |     <div class="protagonist-characteristic" > | ||||||
|       <label class="rollable" data-roll-type="char" data-char-id="str">{{localize |       <img src="systems/fvtt-cthulhu-eternal/assets/ui/d100.svg" class="d100" /> | ||||||
|  |       <label class="rollable" data-roll-type="char" data-char-id="str" data-tooltip="{{system.characteristics.str.feature}}">{{localize | ||||||
|         "CTHULHUETERNAL.Label.strShort"}}</label> |         "CTHULHUETERNAL.Label.strShort"}}</label> | ||||||
|       {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value |       {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value | ||||||
|       rootId=partId disabled=isPlayMode }} |       rootId=partId disabled=isPlayMode }} | ||||||
|       {{mul system.characteristics.str.value 5}} |       <label class="char-text">{{mul system.characteristics.str.value 5}}</label> | ||||||
|     </div> |     </div> | ||||||
|     <div class="protagonist-characteristic" data-drag="true" data-drag-type="characteristic"> |     <div class="protagonist-characteristic"> | ||||||
|       <label class="rollable" data-roll-type="char" data-char-id="dex">{{localize |       <img src="systems/fvtt-cthulhu-eternal/assets/ui/d100.svg" class="d100" /> | ||||||
|  |       <label class="rollable" data-roll-type="char" data-char-id="dex" data-tooltip="{{system.characteristics.dex.feature}}">{{localize | ||||||
|         "CTHULHUETERNAL.Label.dexShort"}}</label> |         "CTHULHUETERNAL.Label.dexShort"}}</label> | ||||||
|       {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value |       {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value | ||||||
|       rootId=partId disabled=isPlayMode }} |       rootId=partId disabled=isPlayMode }} | ||||||
|       {{mul system.characteristics.dex.value 5}} |       <label class="char-text">{{mul system.characteristics.dex.value 5}}</label> | ||||||
|     </div> |     </div> | ||||||
|     <div class="protagonist-characteristic" data-drag="true" data-drag-type="characteristic"> |     <div class="protagonist-characteristic" > | ||||||
|       <label class="rollable" data-roll-type="char" data-char-id="con">{{localize |       <img src="systems/fvtt-cthulhu-eternal/assets/ui/d100.svg" class="d100" /> | ||||||
|  |       <label class="rollable" data-roll-type="char" data-char-id="con" data-tooltip="{{system.characteristics.con.feature}}">{{localize | ||||||
|         "CTHULHUETERNAL.Label.conShort"}}</label> |         "CTHULHUETERNAL.Label.conShort"}}</label> | ||||||
|       {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value |       {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value | ||||||
|       rootId=partId disabled=isPlayMode }} |       rootId=partId disabled=isPlayMode }} | ||||||
|       {{mul system.characteristics.con.value 5}} |        <label class="char-text">{{mul system.characteristics.con.value 5}}</label> | ||||||
|     </div> |     </div> | ||||||
|     <div class="protagonist-characteristic" data-drag="true" data-drag-type="characteristic"> |     <div class="protagonist-characteristic" > | ||||||
|       <label class="rollable" data-roll-type="char" data-char-id="int">{{localize |       <img src="systems/fvtt-cthulhu-eternal/assets/ui/d100.svg" class="d100" /> | ||||||
|  |       <label class="rollable" data-roll-type="char" data-char-id="int" data-tooltip="{{system.characteristics.int.feature}}">{{localize | ||||||
|         "CTHULHUETERNAL.Label.intShort"}}</label> |         "CTHULHUETERNAL.Label.intShort"}}</label> | ||||||
|       {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value |       {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value | ||||||
|       rootId=partId disabled=isPlayMode }} |       rootId=partId disabled=isPlayMode }} | ||||||
|       {{mul system.characteristics.int.value 5}} |        <label class="char-text">{{mul system.characteristics.int.value 5}}</label> | ||||||
|     </div> |     </div> | ||||||
|     <div class="protagonist-characteristic" data-drag="true" data-drag-type="characteristic"> |     <div class="protagonist-characteristic" > | ||||||
|       <label class="rollable" data-roll-type="char" data-char-id="pow">{{localize |       <img src="systems/fvtt-cthulhu-eternal/assets/ui/d100.svg" class="d100" /> | ||||||
|  |       <label class="rollable" data-roll-type="char" data-char-id="pow" data-tooltip="{{system.characteristics.pow.feature}}">{{localize | ||||||
|         "CTHULHUETERNAL.Label.powShort"}}</label> |         "CTHULHUETERNAL.Label.powShort"}}</label> | ||||||
|       {{formField systemFields.characteristics.fields.pow.fields.value value=system.characteristics.pow.value |       {{formField systemFields.characteristics.fields.pow.fields.value value=system.characteristics.pow.value | ||||||
|       rootId=partId disabled=isPlayMode }} |       rootId=partId disabled=isPlayMode }} | ||||||
|       {{mul system.characteristics.pow.value 5}} |        <label class="char-text">{{mul system.characteristics.pow.value 5}}</label> | ||||||
|     </div> |     </div> | ||||||
|     <div class="protagonist-characteristic" data-drag="true" data-drag-type="characteristic"> |     <div class="protagonist-characteristic" > | ||||||
|       <label class="rollable" data-roll-type="char" data-char-id="cha">{{localize |       <img src="systems/fvtt-cthulhu-eternal/assets/ui/d100.svg" class="d100" /> | ||||||
|  |       <label class="rollable" data-roll-type="char" data-char-id="cha" data-tooltip="{{system.characteristics.cha.feature}}">{{localize | ||||||
|         "CTHULHUETERNAL.Label.chaShort"}}</label> |         "CTHULHUETERNAL.Label.chaShort"}}</label> | ||||||
|       {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value |       {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value | ||||||
|       rootId=partId disabled=isPlayMode }} |       rootId=partId disabled=isPlayMode }} | ||||||
|       {{mul system.characteristics.cha.value 5}} |        <label class="char-text">{{mul system.characteristics.cha.value 5}}</label> | ||||||
|     </div> |     </div> | ||||||
|   </fieldset> |   </fieldset> | ||||||
|  |  | ||||||
|   | |||||||
| @@ -6,6 +6,7 @@ | |||||||
|         {{#each skills as |item|}} |         {{#each skills as |item|}} | ||||||
|           <div class="skill item" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}"> |           <div class="skill item" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}"> | ||||||
|             <img class="item-img" src="{{item.img}}" data-tooltip="{{item.name}}" /> |             <img class="item-img" src="{{item.img}}" data-tooltip="{{item.name}}" /> | ||||||
|  |             <img src="systems/fvtt-cthulhu-eternal/assets/ui/d100.svg" class="d100" /> | ||||||
|             <div class="name rollable" data-roll-type="skill" data-tooltip="{{{item.description}}}" data-tooltip-direction="UP">{{item.name}} |             <div class="name rollable" data-roll-type="skill" data-tooltip="{{{item.description}}}" data-tooltip-direction="UP">{{item.name}} | ||||||
|             </div> |             </div> | ||||||
|             <div class="score" > |             <div class="score" > | ||||||
|   | |||||||
| @@ -65,4 +65,24 @@ | |||||||
|     </div> |     </div> | ||||||
|   </fieldset> |   </fieldset> | ||||||
|  |  | ||||||
|  |   <fieldset> | ||||||
|  |     <legend>{{localize "CTHULHUETERNAL.Label.motivations"}}{{#if isEditMode}} | ||||||
|  |       <a class="action" data-tooltip="{{localize "CTHULHUETERNAL.Tooltip.addMotivation"}}" data-tooltip-direction="UP"><i class="fas fa-plus" data-action="createMotivation"></i></a>{{/if}}</legend> | ||||||
|  |     <div class="motivations"> | ||||||
|  |       {{#each motivations as |item|}} | ||||||
|  |         {{!log 'armor' this}} | ||||||
|  |         <div class="motivation" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}"> | ||||||
|  |           <img class="item-img" src="{{item.img}}" data-tooltip="{{item.name}}" /> | ||||||
|  |           <div class="name" data-tooltip="{{{item.system.description}}}"> | ||||||
|  |             {{item.name}} | ||||||
|  |           </div> | ||||||
|  |           <div class="controls"> | ||||||
|  |             <a data-tooltip="{{localize 'CTHULHUETERNAL.Edit'}}" data-action="edit" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}"><i class="fas fa-edit"></i></a> | ||||||
|  |             <a data-tooltip="{{localize 'CTHULHUETERNAL.Delete'}}" data-action="delete" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}"><i class="fas fa-trash"></i></a> | ||||||
|  |           </div> | ||||||
|  |         </div> | ||||||
|  |       {{/each}} | ||||||
|  |     </div> | ||||||
|  |   </fieldset> | ||||||
|  |  | ||||||
| </section> | </section> | ||||||
| @@ -1,34 +1,59 @@ | |||||||
| {{log "roll-dialog" this}} | {{log "roll-dialog" this}} | ||||||
| <div class="fvtt-cthulhu-eternal-roll-dialog"> | <div class="fvtt-cthulhu-eternal-roll-dialog"> | ||||||
|     <fieldSet> |   <fieldSet> | ||||||
|       {{#if (eq rollType "skill")}} |     {{#if (eq rollType "skill")}} | ||||||
|       <legend>{{localize "CTHULHUETERNAL.Label.skill"}}</legend> |     <legend>{{localize "CTHULHUETERNAL.Label.skill"}}</legend> | ||||||
|       {{/if}} |     {{/if}} | ||||||
|       {{#if (eq rollType "char")}} |     {{#if (eq rollType "char")}} | ||||||
|       <legend>{{localize "CTHULHUETERNAL.Label.characteristic"}}</legend> |     <legend>{{localize "CTHULHUETERNAL.Label.characteristic"}}</legend> | ||||||
|       {{/if}} |     {{/if}} | ||||||
|  |  | ||||||
|       <div class="dialog-skill">{{rollItem.name}} : {{initialScore}}%</div> |     {{#if (eq rollType "resource")}} | ||||||
|  |     <legend>{{localize "CTHULHUETERNAL.Label.resourceRating"}}</legend> | ||||||
|  |     <div class="dialog-skill">{{rollItem.name}} : <span class="resource-score">{{initialScore}} ({{mul initialScore 5}}%)</span></div>   | ||||||
|  |     <div class="dialog-skill">{{localize "CTHULHUETERNAL.Label.Hand"}} : {{rollItem.hand}} <input type="checkbox" data-action="selectHand" {{checked rollItem.enableHand}}></div>   | ||||||
|  |     <div class="dialog-skill">{{localize "CTHULHUETERNAL.Label.Stowed"}} : {{rollItem.stowed}} <input type="checkbox" data-action="selectStowed" {{checked rollItem.enableStowed}}></div>   | ||||||
|  |     <div class="dialog-skill">{{localize "CTHULHUETERNAL.Label.Storage"}} : {{rollItem.storage}} <input type="checkbox" data-action="selectStorage" {{checked rollItem.enableStorage}}></div>   | ||||||
|  |     {{else}} | ||||||
|  |     <div class="dialog-skill">{{rollItem.name}} : {{initialScore}}%</div> | ||||||
|  |     {{/if}} | ||||||
|  |  | ||||||
|       {{#if weapon}} |     {{#if weapon}} | ||||||
|       <div class="dialog-skill">Weapon : {{weapon.name}}</div> |     <div class="dialog-skill">Weapon : {{weapon.name}}</div> | ||||||
|       {{/if}} |     {{/if}} | ||||||
|  |  | ||||||
|       {{#if isZeroWP}} |     {{#if isZeroWP}} | ||||||
|       <div class="dialog-skill">Zero WP : Automatic failure (ie 0%)</div> |     <div class="dialog-skill red-warning">Zero WP : Automatic failure (ie 0%)</div> | ||||||
|       {{else}} |     {{else}} | ||||||
|         {{#if isLowWP}} |     {{#if isLowWP}} | ||||||
|         <div class="dialog-skill">Low WP : -20%</div> |     <div class="dialog-skill orange-warning">Low WP : -20%</div> | ||||||
|         {{/if}} |     {{/if}} | ||||||
|       {{/if}} |     {{/if}} | ||||||
|     </fieldSet> |  | ||||||
|  |     {{#if isExhausted}} | ||||||
|  |     <div class="dialog-skill orange-warning">Exhausted : -20%</div> | ||||||
|  |     {{/if}} | ||||||
|  |  | ||||||
|  |   </fieldSet> | ||||||
|  |  | ||||||
|  |   {{#if hasModifier}} | ||||||
|  |   <fieldSet class="dialog-modifier"> | ||||||
|  |     <legend>{{localize "CTHULHUETERNAL.Label.modifier"}}</legend> | ||||||
|  |     <select name="modifier" class="roll-skill-modifier"> | ||||||
|  |       {{selectOptions choiceModifier selected=modifier}} | ||||||
|  |     </select> | ||||||
|  |   </fieldSet> | ||||||
|  |   {{/if}} | ||||||
|  |  | ||||||
|  |   {{#if hasMultiplier}} | ||||||
|  |   <fieldSet class="dialog-modifier"> | ||||||
|  |     <legend>{{localize "CTHULHUETERNAL.Label.multiplier"}}</legend> | ||||||
|  |     <select name="multiplier" class="roll-skill-modifier roll-skill-multiplier"> | ||||||
|  |       {{selectOptions choiceMultiplier selected=multiplier}} | ||||||
|  |     </select> | ||||||
|  |   </fieldSet> | ||||||
|  |   {{/if}} | ||||||
|  |  | ||||||
|     <fieldSet class="dialog-modifier"> |  | ||||||
|       <legend>{{localize "CTHULHUETERNAL.Label.modifier"}}</legend> |  | ||||||
|       <select name="modifier" class="roll-skill-modifier"> |  | ||||||
|         {{selectOptions choiceModifier selected=modifier}} |  | ||||||
|       </select> |  | ||||||
|     </fieldSet> |  | ||||||
|   <fieldSet> |   <fieldSet> | ||||||
|     <legend>{{localize "CTHULHUETERNAL.Label.rollView"}}</legend> |     <legend>{{localize "CTHULHUETERNAL.Label.rollView"}}</legend> | ||||||
|     <select name="visibility"> |     <select name="visibility"> | ||||||
|   | |||||||
| @@ -15,9 +15,12 @@ | |||||||
|     </div> |     </div> | ||||||
|     {{formField systemFields.isAdversary value=system.isAdversary}} |     {{formField systemFields.isAdversary value=system.isAdversary}} | ||||||
|     {{formField systemFields.diceEvolved value=system.diceEvolved}} |     {{formField systemFields.diceEvolved value=system.diceEvolved}} | ||||||
|     {{#if system.diceEvolved}} |      | ||||||
|  |     <!-- {{#if system.diceEvolved}} | ||||||
|     {{formField systemFields.rollFailed value=system.rollFailed}} |     {{formField systemFields.rollFailed value=system.rollFailed}} | ||||||
|     {{/if}} |     {{/if}} | ||||||
|  |     --> | ||||||
|  |  | ||||||
|   </fieldset> |   </fieldset> | ||||||
|  |  | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										12
									
								
								templates/vehicle-description.hbs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								templates/vehicle-description.hbs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,12 @@ | |||||||
|  | <section class="tab vehicle-{{tab.id}} {{tab.cssClass}}" data-tab="{{tab.id}}" data-group="{{tab.group}}"> | ||||||
|  |  | ||||||
|  |   <fieldset> | ||||||
|  |     <legend>{{localize "CTHULHUETERNAL.Label.description"}}</legend> | ||||||
|  |     {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} | ||||||
|  |   </fieldset> | ||||||
|  |    | ||||||
|  |   <fieldset> | ||||||
|  |     <legend>{{localize "CTHULHUETERNAL.Label.notes"}}</legend> | ||||||
|  |     {{formInput systemFields.notes enriched=enrichedNotes value=system.notes name="system.notes" toggled=true}} | ||||||
|  |   </fieldset> | ||||||
|  | </section> | ||||||
							
								
								
									
										54
									
								
								templates/vehicle-equipment.hbs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								templates/vehicle-equipment.hbs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,54 @@ | |||||||
|  | <section class="tab vehicle-{{tab.id}} {{tab.cssClass}}" data-tab="{{tab.id}}" data-group="{{tab.group}}"> | ||||||
|  |  | ||||||
|  |   <fieldset> | ||||||
|  |     <legend>{{localize "CTHULHUETERNAL.Label.weapons"}}{{#if isEditMode}} | ||||||
|  |       <a class="action" data-tooltip="{{localize " CTHULHUETERNAL.Tooltip.addWeapon"}}" data-tooltip-direction="UP"><i | ||||||
|  |           class="fas fa-plus" data-action="createWeapon"></i></a>{{/if}} | ||||||
|  |     </legend> | ||||||
|  |     <div class="weapons"> | ||||||
|  |       {{#each weapons as |item|}} | ||||||
|  |       {{!log 'weapon' this}} | ||||||
|  |       <div class="weapon item" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}" data-drag="true"> | ||||||
|  |         <img class="item-img" src="{{item.img}}" data-tooltip="{{item.name}}" /> | ||||||
|  |         <div class="name rollable" data-roll-type="weapon" data-tooltip="{{{item.system.description}}}"> | ||||||
|  |           {{item.name}} | ||||||
|  |         </div> | ||||||
|  |         <a class="damage rollable" data-item-id="{{item.id}}" data-action="roll" data-roll-type="damage" | ||||||
|  |           data-roll-value="{{item.system.damage}}">{{localize "CTHULHUETERNAL.Label.damageShort"}} : | ||||||
|  |           {{item.system.damage}}</a> | ||||||
|  |         <div class="controls"> | ||||||
|  |           <a data-tooltip="{{localize 'CTHULHUETERNAL.Edit'}}" data-action="edit" data-item-id="{{item.id}}" | ||||||
|  |             data-item-uuid="{{item.uuid}}"><i class="fas fa-edit"></i></a> | ||||||
|  |           <a data-tooltip="{{localize 'CTHULHUETERNAL.Delete'}}" data-action="delete" data-item-id="{{item.id}}" | ||||||
|  |             data-item-uuid="{{item.uuid}}"><i class="fas fa-trash"></i></a> | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  |       {{/each}} | ||||||
|  |     </div> | ||||||
|  |   </fieldset> | ||||||
|  |  | ||||||
|  |   <fieldset> | ||||||
|  |     <legend>{{localize "CTHULHUETERNAL.Label.gears"}}{{#if isEditMode}} | ||||||
|  |       <a class="action" data-tooltip="{{localize " CTHULHUETERNAL.Tooltip.addGear"}}" data-tooltip-direction="UP"><i | ||||||
|  |           class="fas fa-plus" data-action="createGear"></i></a>{{/if}} | ||||||
|  |     </legend> | ||||||
|  |     <div class="gears"> | ||||||
|  |       {{#each gears as |item|}} | ||||||
|  |       {{!log 'armor' this}} | ||||||
|  |       <div class="gear" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}"> | ||||||
|  |         <img class="item-img" src="{{item.img}}" data-tooltip="{{item.name}}" /> | ||||||
|  |         <div class="name" data-tooltip="{{{item.system.description}}}"> | ||||||
|  |           {{item.name}} | ||||||
|  |         </div> | ||||||
|  |         <div class="controls"> | ||||||
|  |           <a data-tooltip="{{localize 'CTHULHUETERNAL.Edit'}}" data-action="edit" data-item-id="{{item.id}}" | ||||||
|  |             data-item-uuid="{{item.uuid}}"><i class="fas fa-edit"></i></a> | ||||||
|  |           <a data-tooltip="{{localize 'CTHULHUETERNAL.Delete'}}" data-action="delete" data-item-id="{{item.id}}" | ||||||
|  |             data-item-uuid="{{item.uuid}}"><i class="fas fa-trash"></i></a> | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  |       {{/each}} | ||||||
|  |     </div> | ||||||
|  |   </fieldset> | ||||||
|  |  | ||||||
|  | </section> | ||||||
							
								
								
									
										52
									
								
								templates/vehicle-main.hbs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								templates/vehicle-main.hbs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,52 @@ | |||||||
|  | <section class="vehicle-main vehicle-main-{{ifThen isPlayMode 'play' 'edit'}}"> | ||||||
|  |  | ||||||
|  |   <fieldset> | ||||||
|  |     <legend>{{localize "CTHULHUETERNAL.Label.vehicle"}}</legend> | ||||||
|  |     <div class="vehicle-pc vehicle-pc-{{ifThen isPlayMode 'play' 'edit'}}"> | ||||||
|  |       <div class="vehicle-left"> | ||||||
|  |         <div class="vehicle-left-image"> | ||||||
|  |           <img class="vehicle-img" src="{{actor.img}}" data-edit="img" data-action="editImage" | ||||||
|  |             data-tooltip="{{actor.name}}" /> | ||||||
|  |         </div> | ||||||
|  |         <fieldset> | ||||||
|  |           <legend>{{localize "CTHULHUETERNAL.Label.HP"}}</legend> | ||||||
|  |           <div class="flexrow"> | ||||||
|  |             {{formField systemFields.hp.fields.value value=system.hp.value}} | ||||||
|  |             / | ||||||
|  |             {{formField systemFields.hp.fields.max value=system.hp.max rootId=partId disabled=true}} | ||||||
|  |           </div> | ||||||
|  |         </fieldset> | ||||||
|  |  | ||||||
|  |       </div> | ||||||
|  |        | ||||||
|  |       <div class="vehicle-right"> | ||||||
|  |         <div class="vehicle-name"> | ||||||
|  |           {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} | ||||||
|  |           <a class="control" data-action="toggleSheet" data-tooltip="CTHULHUETERNAL.ToggleSheet" | ||||||
|  |             data-tooltip-direction="UP"> | ||||||
|  |             <i class="fa-solid fa-user-{{ifThen isPlayMode 'lock' 'pen'}}"></i> | ||||||
|  |           </a> | ||||||
|  |         </div> | ||||||
|  |  | ||||||
|  |  | ||||||
|  |         <fieldset class="speed"> | ||||||
|  |           <legend>{{localize "CTHULHUETERNAL.Label.Speed"}}</legend> | ||||||
|  |           <div class="flexrow"> | ||||||
|  |             {{formField systemFields.surfaceSpeed value=system.surfaceSpeed localize=true}} | ||||||
|  |             {{formField systemFields.airSpeed value=system.airSpeed localize=true}} | ||||||
|  |              | ||||||
|  |           </div> | ||||||
|  |         </fieldset> | ||||||
|  |  | ||||||
|  |         <fieldset class="armr "> | ||||||
|  |           <legend>{{localize "CTHULHUETERNAL.Label.armor"}}</legend> | ||||||
|  |           <div class="flexrow"> | ||||||
|  |             {{formField systemFields.armor value=system.armor localize=true}} | ||||||
|  |           </div> | ||||||
|  |         </fieldset> | ||||||
|  |  | ||||||
|  |       </div> | ||||||
|  |     </div> | ||||||
|  |   </fieldset> | ||||||
|  |  | ||||||
|  | </section> | ||||||
| @@ -11,6 +11,8 @@ | |||||||
|     {{formField systemFields.weaponSubtype value=system.weaponSubtype localize=true}} |     {{formField systemFields.weaponSubtype value=system.weaponSubtype localize=true}} | ||||||
|     {{/if}} |     {{/if}} | ||||||
|  |  | ||||||
|  |     {{formField systemFields.state value=system.state localize=true}} | ||||||
|  |  | ||||||
|     {{formField systemFields.damage value=system.damage}} |     {{formField systemFields.damage value=system.damage}} | ||||||
|     {{formField systemFields.baseRange value=system.baseRange}} |     {{formField systemFields.baseRange value=system.baseRange}} | ||||||
|     {{formField systemFields.rangeUnit value=system.rangeUnit localize=true}} |     {{formField systemFields.rangeUnit value=system.rangeUnit localize=true}} | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user