Compare commits
	
		
			4 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| e54f998d29 | |||
| 7eee4fab7e | |||
| 9013229c20 | |||
| da9a69b916 | 
							
								
								
									
										1
									
								
								assets/icons/icon_combat.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1 @@ | ||||
| <svg style="height: 512px; width: 512px;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><defs><filter id="shadow-1" height="300%" width="300%" x="-100%" y="-100%"><feFlood flood-color="rgba(255, 255, 255, 1)" result="flood"></feFlood><feComposite in="flood" in2="SourceGraphic" operator="atop" result="composite"></feComposite><feGaussianBlur in="composite" stdDeviation="15" result="blur"></feGaussianBlur><feOffset dx="0" dy="0" result="offset"></feOffset><feComposite in="SourceGraphic" in2="offset" operator="over"></feComposite></filter></defs><g class="" style="" transform="translate(0,0)"><path d="M221.6 28.53c-5.2.1-10.6 2.18-15.8 6.35-7.7 6.03-14.4 16.44-17.8 29.58-3.3 13.14-2.5 26.2 1.1 36.24 3.6 9.9 9.4 16.4 16.6 18.9 6 2.1 12.6 1.3 19-2.6 2.3-13.6 9.9-24.28 21.3-31.6.1-.19.1-.38.2-.58 3.3-13.15 2.5-26.2-1.1-36.2-3.6-9.95-9.4-16.46-16.6-18.97-2.3-.78-4.6-1.16-6.9-1.12zm212.5 49.31c-3.2.72-11 3.44-18.7 7.15-8.7 4.14-17.4 8.86-22.4 11.5l-.9.45-.9.25c-38.1 10.61-57.5 17.91-88.3 23.21-2.2 6.1-6 12.5-11.3 19h-.1v.1c-6.2 7.4-12.4 14.7-18.7 21.9 45.8-8.5 78.8-16.7 132.7-38l4.1-1.6 3.9 2.3c5.5 3.4 13.4 5.8 19.6 6.3 3.1.3 5.8 0 7.4-.4 1.4-.4 1.4-.7 1.4-.6 5.4-11.9 7.3-24.4 5.5-33.8-1.7-8.89-5.7-14.64-13.3-17.76zM272.2 96.08c-8.9-.1-20.1 4.32-27.6 15.62-5.9 29.5-26.7 50.1-57.2 62.6l-6.8-16.6c12.7-5.2 22.6-11.2 30.1-18.6-3.1-.2-6.3-.9-9.4-2-10.4-3.7-18.6-11.6-24.1-21.4-14.6 2.8-22.6 6.3-32.8 14.6-4.1 36.5 6.8 67.5 27.6 96.6 41.7-25.4 73.7-60.5 105.7-98.9 8.2-10.2 10-17.6 9.5-21.9-.6-4.2-2.7-6.73-7.2-8.58-2.2-.91-4.9-1.42-7.8-1.44zM131.5 185.5c-1.7 23.2-.7 48.5-1 75v3.8l-2.7 2.6C75.51 317.5 33.9 400.5 20.36 495.7h40.62c9.12-41.2 17.47-82.3 34.69-115.7 18.23-35.3 47.83-62 96.23-67.5l4.8-.6 3.1 3.7c38.2 45.7 75.3 103.9 85.9 180.1h39.6c-6.3-88.4-46.8-156.5-97.1-229-9.8-14.1-10.2-29.8-6.5-44.9.9-3.8 2.1-7.7 3.4-11.7-15.5 13.6-32.3 26-51 36.7l-6.9 3.9-4.7-6.2c-14-18.2-24.8-37.8-31-59z" fill="#21d121" fill-opacity="1" stroke="#0f0101" stroke-opacity="1" stroke-width="8" filter="url(#shadow-1)"></path></g></svg> | ||||
| After Width: | Height: | Size: 2.0 KiB | 
							
								
								
									
										1
									
								
								assets/icons/icon_knowledge.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1 @@ | ||||
| <svg style="height: 512px; width: 512px;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><defs><filter id="shadow-1" height="300%" width="300%" x="-100%" y="-100%"><feFlood flood-color="rgba(255, 255, 255, 1)" result="flood"></feFlood><feComposite in="flood" in2="SourceGraphic" operator="atop" result="composite"></feComposite><feGaussianBlur in="composite" stdDeviation="15" result="blur"></feGaussianBlur><feOffset dx="0" dy="0" result="offset"></feOffset><feComposite in="SourceGraphic" in2="offset" operator="over"></feComposite></filter></defs><g class="" style="" transform="translate(0,0)"><path d="M104 37.25V215.1c3.6 9.9 10 14.1 20.9 17 11.4 2.9 27.1 3.1 43.9 3.1 16.8 0 34.6-.1 51.4 3.6 9.5 2.1 18.7 5.7 26.8 11.2V55.43c-7.2-9.9-15.9-13.69-27.3-15.09-12.2-1.49-27.3.55-42.9 2.83-15.7 2.28-31.9 4.81-47.7 2.88-8.7-1.07-17.3-3.87-25.1-8.8zm304 0c-7.8 4.93-16.4 7.73-25.1 8.8-15.8 1.93-32-.6-47.7-2.88-15.6-2.28-30.7-4.32-42.9-2.83-11.4 1.4-20.1 5.19-27.3 15.09V250c8.1-5.5 17.3-9.1 26.8-11.2 16.8-3.7 34.6-3.6 51.4-3.6 16.8 0 32.5-.2 43.9-3.1 10.9-2.9 17.3-7.1 20.9-17V37.25zM130.8 80.03h89.4v18h-89.4v-18zm161 0h89.4v18h-89.4v-18zm-161 44.47h89.4v18h-89.4v-18zm161 0h89.4v18h-89.4v-18zm-161 46.8h89.4v18h-89.4v-18zm161 0h89.4v18h-89.4v-18zM96 249c-17.3 0-29.19 7.3-37.77 18.9C49.66 279.4 45 295.7 45 312s4.66 32.6 13.23 44.1C66.81 367.7 78.7 375 96 375c22 0 35.7-7.1 44.4-14 8.6-6.9 11.5-13 11.5-13l2.5-5h203.2l2.5 5s2.9 6.1 11.5 13c8.7 6.9 22.4 14 44.4 14 17.3 0 29.2-7.3 37.8-18.9 8.5-11.5 13.2-27.8 13.2-44.1s-4.7-32.6-13.2-44.1c-8.6-11.6-20.5-18.9-37.8-18.9-22 0-35.7 7.1-44.4 14-8.6 6.9-11.5 13-11.5 13l-2.5 5H154.4l-2.5-5s-2.9-6.1-11.5-13c-8.7-6.9-22.4-14-44.4-14zm4.6 21.9c.9 0 1.9 0 2.9.1 13.5 1.2 28.2 8.9 44.1 24h216.8c15.9-15.1 30.6-22.8 44.1-24 14.2-1.2 26.6 5.8 33.1 16.2 13.1 20.9 7 53.9-20.6 72.3l-10-15c20.4-13.6 22.3-36.6 15.4-47.7-3.5-5.6-8.1-8.6-16.4-7.8-8.2.7-20.6 6.3-35.6 21.4l-2.7 2.6H140.3l-2.7-2.6c-15-15.1-27.4-20.7-35.6-21.4-8.26-.8-12.9 2.2-16.37 7.8-6.92 11.1-4.99 34.1 15.37 47.7l-9.99 15c-27.65-18.4-33.72-51.4-20.64-72.3 5.72-9.1 15.9-15.6 27.92-16.3h2.31zM169 361v126h30V361h-30zm48 0v126h30V361h-30zm48 0v126h30V361h-30zm48 0v126h30V361h-30z" fill="#21d121" fill-opacity="1" stroke="#0f0101" stroke-opacity="1" stroke-width="8" filter="url(#shadow-1)"></path></g></svg> | ||||
| After Width: | Height: | Size: 2.3 KiB | 
							
								
								
									
										1
									
								
								assets/icons/icon_physical.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1 @@ | ||||
| <svg style="height: 512px; width: 512px;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><defs><filter id="shadow-1" height="300%" width="300%" x="-100%" y="-100%"><feFlood flood-color="rgba(255, 255, 255, 1)" result="flood"></feFlood><feComposite in="flood" in2="SourceGraphic" operator="atop" result="composite"></feComposite><feGaussianBlur in="composite" stdDeviation="15" result="blur"></feGaussianBlur><feOffset dx="0" dy="0" result="offset"></feOffset><feComposite in="SourceGraphic" in2="offset" operator="over"></feComposite></filter></defs><g class="" style="" transform="translate(0,0)"><path d="M165.906 18.688C15.593 59.28-42.187 198.55 92.72 245.375h-1.095c.635.086 1.274.186 1.906.28 8.985 3.077 18.83 5.733 29.532 7.94C173.36 273.35 209.74 321.22 212.69 368c-33.514 23.096-59.47 62.844-59.47 62.844L179.5 469.53 138.28 493h81.97c-40.425-40.435-11.76-85.906 36.125-85.906 48.54 0 73.945 48.112 36.156 85.906h81.126l-40.375-23.47 26.283-38.686s-26.376-40.4-60.282-63.406c3.204-46.602 39.5-94.167 89.595-113.844 10.706-2.207 20.546-4.86 29.53-7.938.633-.095 1.273-.195 1.908-.28h-1.125c134.927-46.82 77.163-186.094-73.157-226.69-40.722 39.37 6.54 101.683 43.626 56.877 36.9 69.08 8.603 127.587-72.28 83.406-11.88 24.492-34.213 41.374-60.688 41.374-26.703 0-49.168-17.167-60.97-42-81.774 45.38-110.512-13.372-73.437-82.78 37.09 44.805 84.35-17.508 43.626-56.876zm90.79 35.92c-27.388 0-51.33 27.556-51.33 63.61 0 36.056 23.942 62.995 51.33 62.995 27.387 0 51.327-26.94 51.327-62.994 0-36.058-23.94-63.61-51.328-63.61z" fill="#21d121" fill-opacity="1" stroke="#0f0101" stroke-opacity="1" stroke-width="8" filter="url(#shadow-1)"></path></g></svg> | ||||
| After Width: | Height: | Size: 1.6 KiB | 
							
								
								
									
										1
									
								
								assets/icons/icon_social.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1 @@ | ||||
| <svg style="height: 512px; width: 512px;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><defs><filter id="shadow-1" height="300%" width="300%" x="-100%" y="-100%"><feFlood flood-color="rgba(255, 255, 255, 1)" result="flood"></feFlood><feComposite in="flood" in2="SourceGraphic" operator="atop" result="composite"></feComposite><feGaussianBlur in="composite" stdDeviation="15" result="blur"></feGaussianBlur><feOffset dx="0" dy="0" result="offset"></feOffset><feComposite in="SourceGraphic" in2="offset" operator="over"></feComposite></filter></defs><g class="" style="" transform="translate(0,0)"><path d="M494 61.363l-82.58 77.934 78.994 132.96 3.586-4.458V61.362zM18 62.5v225.893c4.48.582 9.863.903 15.295.96 11.87.125 21.654-.65 27.15-1.144L113.1 154.974 18 62.5zm389.154 104.86l-7.04 4.556c-.15.097-5.362 3.336-6.893 4.29l-10.605 6.42.15.09c-4.914 3.057-6.28 3.917-11.857 7.38-2.83 1.757-2.9 1.798-5.584 3.465-20.29-10.907-42.306-19.29-67.998-25.882-32.312 9.762-66.542 23.888-100.722 37.142 14.19 17.087 29.96 22.651 45.845 22.85 18.42.23 37.25-7.78 50.218-16.754l7.4-5.12 7.426 10.73 115.453 83.33 45.112-29.987-60.906-102.51zM126.477 170.1L81.11 284.887 97.76 297.69l30.795-34.905 2.467-2.795 3.72-.232c1.5-.094 2.98-.138 4.44-.13 10.212.066 19.342 2.716 26.19 8.76 5.072 4.472 8.444 10.426 10.4 17.32l2.28-.142c11.995-.75 22.802 1.725 30.63 8.63 7.827 6.907 11.63 17.323 12.38 29.32l.07 1.08c6.44 1.216 12.205 3.752 16.893 7.888 7.828 6.906 11.63 17.32 12.38 29.317l.197 3.12c.642.202 1.275.424 1.9.658l2.033-2.853 5.47-7.678 2.813-3.95 7.33 5.223 59.428 42.336c6.464-1.594 10.317-4.075 12.46-7.086 2.147-3.012 3.233-7.47 2.624-14.107l-71.258-51.03-7.318-5.24 5.19-7.246 6.67-9.365 7.33 5.223 80.335 57.226c6.464-1.593 10.32-4.074 12.463-7.085 2.144-3.01 3.23-7.457 2.625-14.082l-92.398-65.55-7.34-5.21 10.414-14.68 7.343 5.208 92.414 65.565c6.47-1.594 10.327-4.075 12.473-7.088 2.148-3.015 3.233-7.476 2.62-14.125l-110.44-79.71c-14.655 8.688-33.402 15.648-53.557 15.396-23.587-.295-48.817-11.566-67.377-40.05a9 9 0 0 1 4.343-13.327c13.014-4.945 26.163-10.17 39.343-15.354l-92.056-6.834zm12.902 107.62l-47.564 53.91c.927 6.746 3.04 10.942 5.887 13.454 2.847 2.512 7.275 4.085 14.084 4.164l47.563-53.908c-.927-6.747-3.04-10.945-5.887-13.457-2.847-2.512-7.274-4.084-14.084-4.162zm43.308 25.81l-53.713 60.88c.926 6.747 3.04 10.945 5.886 13.457 2.85 2.51 7.275 4.083 14.085 4.16l53.713-60.878c-.926-6.748-3.04-10.944-5.887-13.457-2.846-2.512-7.273-4.085-14.083-4.164zm29.34 38.286l-47.56 53.91c.927 6.746 3.04 10.943 5.887 13.456 2.848 2.512 7.275 4.083 14.084 4.162L232 359.44c-.927-6.75-3.04-10.947-5.887-13.46-2.847-2.512-7.274-4.083-14.084-4.162zm24.702 39.137l-38.794 44.28c.925 6.76 3.038 10.962 5.888 13.476 2.845 2.51 7.267 4.082 14.067 4.163l38.796-44.28c-.926-6.758-3.04-10.96-5.89-13.476-2.844-2.51-7.266-4.08-14.066-4.162zm35.342 4.79c1.694 4.62 2.673 9.74 3.014 15.192l.232 3.704-8.277 9.448 26.724 19.037c6.464-1.594 10.316-4.075 12.46-7.086 2.145-3.01 3.233-7.464 2.628-14.093l-36.78-26.2z" fill="#21d121" fill-opacity="1" stroke="#0f0101" stroke-opacity="1" stroke-width="8" filter="url(#shadow-1)"></path></g></svg> | ||||
| After Width: | Height: | Size: 3.1 KiB | 
							
								
								
									
										1
									
								
								assets/icons/icon_stealth.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1 @@ | ||||
| <svg style="height: 512px; width: 512px;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><defs><filter id="shadow-1" height="300%" width="300%" x="-100%" y="-100%"><feFlood flood-color="rgba(255, 255, 255, 1)" result="flood"></feFlood><feComposite in="flood" in2="SourceGraphic" operator="atop" result="composite"></feComposite><feGaussianBlur in="composite" stdDeviation="15" result="blur"></feGaussianBlur><feOffset dx="0" dy="0" result="offset"></feOffset><feComposite in="SourceGraphic" in2="offset" operator="over"></feComposite></filter></defs><g class="" style="" transform="translate(0,0)"><path d="M254.07 19.707c-56.303 28.998-106.297 107.317-122.64 168.707 32.445 2.11 58.63 12.963 78.638 30.848l9.334-10.198c-13.336-13.056-30.596-23.9-52.994-34.707 12.68-31.542 32.01-79.29 56.598-82.07 9.62-1.088 19.92 4.722 31.13 21.068 35.08-58.334 68.394 18.705 87.727 61.002-21.94 11.897-39.132 22.82-52.63 36.024l8.68 9.76c19.68-17.732 45.72-29.358 78.55-31.673C358.24 127.335 311.515 50.14 254.07 19.707zM219.617 144.57c-8.894 0-16.103 3.952-16.103 8.826 0 4.875 7.21 8.827 16.103 8.827 8.894 0 16.106-3.95 16.106-8.827 0-4.874-7.212-8.826-16.106-8.826zm68.965 0c-8.894 0-16.105 3.952-16.105 8.826 0 4.875 7.21 8.827 16.105 8.827 8.894 0 16.106-3.95 16.106-8.827 0-4.874-7.212-8.826-16.106-8.826zm-118.894 70.88c-2.19 3.672-4.343 7.497-6.444 11.52-25.587 48.98-43.26 123.643-43.896 223.48 32.776 18.89 64.322 31.324 95.707 36.988-35.5-24.36-60.375-80.893-60.375-146.754 0-45.97 12.12-87.39 31.51-116.506-5.098-3.372-10.583-6.29-16.502-8.727zm168.933.35c-5.852 2.477-11.27 5.412-16.298 8.764 19.24 29.095 31.254 70.354 31.254 116.12 0 65.82-24.844 122.322-60.306 146.707 30.88-5.598 62.44-17.812 95.656-36.947-.638-99.57-18.31-174.163-43.9-223.177-2.088-4.002-4.228-7.81-6.405-11.467zm-97.665 23.61c7.026 22.543 9.128 45.086.98 67.63h-41.552v18.513c10.057-3.24 20.25-5.39 30.502-6.594.066 50.215 1.313 96.574 19.82 145.435l4.193 11.074 4.485-10.962c19.48-47.615 18.045-95.297 17.933-145.024 10.257 1.333 20.463 3.4 30.545 6.07v-18.515h-41.374c-6.888-22.544-5.932-45.087.803-67.63h-26.335z" fill="#21d121" fill-opacity="1" stroke="#0f0101" stroke-opacity="1" stroke-width="8" filter="url(#shadow-1)"></path></g></svg> | ||||
| After Width: | Height: | Size: 2.2 KiB | 
							
								
								
									
										1
									
								
								assets/icons/icon_technology.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1 @@ | ||||
| <svg style="height: 512px; width: 512px;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><defs><filter id="shadow-1" height="300%" width="300%" x="-100%" y="-100%"><feFlood flood-color="rgba(255, 255, 255, 1)" result="flood"></feFlood><feComposite in="flood" in2="SourceGraphic" operator="atop" result="composite"></feComposite><feGaussianBlur in="composite" stdDeviation="15" result="blur"></feGaussianBlur><feOffset dx="0" dy="0" result="offset"></feOffset><feComposite in="SourceGraphic" in2="offset" operator="over"></feComposite></filter></defs><g class="" style="" transform="translate(0,0)"><path d="M228.844 32.22v114.218h17.687V32.218h-17.686zm-108.25.624c-15.507 0-28.094 12.586-28.094 28.093C92.5 76.444 105.087 89 120.594 89c12.655 0 23.34-8.372 26.844-19.875h44.937v77.313h17.688v-95H147.03c-3.888-10.837-14.262-18.593-26.436-18.593zm193.25 0c-15.507 0-28.063 12.586-28.063 28.093 0 12.124 7.677 22.45 18.44 26.376v59.124h17.655V87.844c11.596-3.452 20.063-14.193 20.063-26.906 0-15.508-12.587-28.094-28.094-28.094zM266.124 92.5v53.938h17.657V92.5h-17.655zm188.532 4.03c-15.507 0-28.094 12.588-28.094 28.095 0 13.083 8.948 24.074 21.063 27.188v27.468h-92.938v17.657h110.624v-46.342c10.223-4.192 17.407-14.233 17.407-25.97 0-15.507-12.557-28.094-28.064-28.094zM30.187 123.657v17.688H96.75v55.594h62.814V179.28h-45.126v-55.624h-84.25zm147.032 40.47v159.718h159.81v-159.72H177.22zm17.56 15.655h17.657v78.595l32.407 32.406h75.28v17.658H237.5l-2.594-2.594-10.75-10.75c-1.033 7.385-7.36 13.062-15.03 13.062-8.392 0-15.19-6.796-15.19-15.187 0-7.682 5.696-13.98 13.095-15l-9.655-9.658-2.594-2.593V179.78zm54.94.157h17.686v55.313h52.53l.002 17.688H249.72v-73zM53.124 217.375V307.344c-11.49 3.512-19.844 14.198-19.844 26.844 0 15.505 12.557 28.093 28.064 28.093s28.093-12.587 28.093-28.092c0-12.195-7.79-22.564-18.656-26.438v-72.72h88.782v-17.655H53.124zm301.563 0v17.656h53.968v-17.655h-53.97zm99.968 21.97c-10.898 0-20.342 6.21-25 15.28h-74.97l.002 17.688H427c2.325 13.168 13.824 23.187 27.656 23.187 15.507 0 28.063-12.588 28.063-28.094 0-15.507-12.557-28.062-28.064-28.062zm-349.062 15.28v17.688h53.97v-17.688h-53.97zm17.156 36.47v84.217c-11.498 3.513-19.875 14.2-19.875 26.844 0 15.506 12.587 28.094 28.094 28.094 15.506 0 28.06-12.588 28.06-28.094 0-12.194-7.766-22.564-18.624-26.437v-66.94h19.156v-17.686H122.75zm231.938 0v17.686h45.156v95.283c-11.323 3.624-19.53 14.26-19.53 26.78-.002 15.506 12.585 28.063 28.092 28.063 15.507 0 28.063-12.557 28.063-28.062 0-12.32-7.935-22.778-18.97-26.563V291.095h-62.814zM192.375 341.53v54.033h17.688V341.53h-17.688zm36.47 0v86.564c-11.013 3.794-18.94 14.233-18.94 26.53 0 15.506 12.588 28.095 28.095 28.095s28.063-12.59 28.063-28.095c0-12.53-8.203-23.14-19.532-26.75V341.53h-17.686zm37.28 0v54.033h17.688l-.032-54.032h-17.655zm38.094 0v140.064h17.655V341.53H304.22z" fill="#21d121" fill-opacity="1" stroke="#0f0101" stroke-opacity="1" stroke-width="8" filter="url(#shadow-1)"></path></g></svg> | ||||
| After Width: | Height: | Size: 2.9 KiB | 
							
								
								
									
										1
									
								
								assets/icons/icon_vehicles.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1 @@ | ||||
| <svg style="height: 512px; width: 512px;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><defs><filter id="shadow-1" height="300%" width="300%" x="-100%" y="-100%"><feFlood flood-color="rgba(255, 255, 255, 1)" result="flood"></feFlood><feComposite in="flood" in2="SourceGraphic" operator="atop" result="composite"></feComposite><feGaussianBlur in="composite" stdDeviation="15" result="blur"></feGaussianBlur><feOffset dx="0" dy="0" result="offset"></feOffset><feComposite in="SourceGraphic" in2="offset" operator="over"></feComposite></filter></defs><g class="" style="" transform="translate(0,0)"><path d="M18.313 17.78v62.095L170.22 231.75 43 211.625s64.877 30.418 116.344 54.438l-47.375 23.25L279.687 355c-3.582-3.086-7.13-6.347-10.594-9.813-39.543-39.54-54.888-88.3-34.28-108.906 20.605-20.604 69.362-5.26 108.905 34.282 3.355 3.356 6.53 6.754 9.53 10.22l-64.938-167.813L265 162.187c-24.094-51.623-55.03-117.532-55.03-117.532l19.468 122.875L79.655 17.78H18.312zm425.312 243.345l-43.406 46.938-23.595 5.875-33.594-18.344-50.06 50.094 18.31 33.562-5.874 23.563-46.03 42.562 80.093 14.03 28.717 28.72 13.188-13.22-51.5-51.53L469 471.625l-48.656-140.25 52.28 52.28 13.22-13.217-27.97-27.97-14.25-81.343zM392.062 357.5c69.03 70.208 33.083 106.35-37.218 37.22l37.22-37.22z" fill="#21d121" fill-opacity="1" stroke="#0f0101" stroke-opacity="1" stroke-width="8" filter="url(#shadow-1)"></path></g></svg> | ||||
| After Width: | Height: | Size: 1.4 KiB | 
| @@ -32,7 +32,7 @@ Hooks.once("init", function () { | ||||
|  | ||||
|   CONFIG.Actor.documentClass = documents.FTLNomadActor | ||||
|   CONFIG.Actor.dataModels = { | ||||
|     protagonist: models.FTLNomadCharacter, | ||||
|     character: models.FTLNomadCharacter, | ||||
|     vehicle: models.FTLNomadVehicle, | ||||
|     creature: models.FTLNomadCreature, | ||||
|     starship: models.FTLNomadStarship | ||||
|   | ||||
							
								
								
									
										963
									
								
								lang/en.json
									
									
									
									
									
								
							
							
						
						| @@ -66,6 +66,7 @@ export default class FTLNomadActorSheet extends HandlebarsApplicationMixin(found | ||||
|       actor: this.document, | ||||
|       system: this.document.system, | ||||
|       source: this.document.toObject(), | ||||
|       isEncumbered: this.document.system.isEncumbered(),  | ||||
|       enrichedDescription: await TextEditor.enrichHTML(this.document.system.description, { async: true }), | ||||
|       isEditMode: this.isEditMode, | ||||
|       isPlayMode: this.isPlayMode, | ||||
|   | ||||
| @@ -12,45 +12,39 @@ export default class FTLNomadCharacterSheet extends FTLNomadActorSheet { | ||||
|       contentClasses: ["character-content"], | ||||
|     }, | ||||
|     actions: { | ||||
|       setBP: FTLNomadCharacterSheet.#onSetBP, | ||||
|       createGear: FTLNomadCharacterSheet.#onCreateGear, | ||||
|       createEquipment: FTLNomadCharacterSheet.#onCreateEquipment, | ||||
|       createArmor: FTLNomadCharacterSheet.#onCreateArmor, | ||||
|       createWeapon: FTLNomadCharacterSheet.#onCreateWeapon, | ||||
|       createBond: FTLNomadCharacterSheet.#onCreateBond, | ||||
|       createInjury: FTLNomadCharacterSheet.#onCreateInjury, | ||||
|       createMentalDisorder: FTLNomadCharacterSheet.#onCreateMentalDisorder, | ||||
|       createMotivation: FTLNomadCharacterSheet.#onCreateMotivation, | ||||
|       createSkill: FTLNomadCharacterSheet.#onCreateSkill, | ||||
|       createRitual: FTLNomadCharacterSheet.#onCreateRitual, | ||||
|       createTome: FTLNomadCharacterSheet.#onCreateTome, | ||||
|       createTalent: FTLNomadCharacterSheet.#onCreateTalent, | ||||
|       createImplant: FTLNomadCharacterSheet.#onCreateImplant, | ||||
|       createPsionic: FTLNomadCharacterSheet.#onCreatePsionic, | ||||
|       createLanguage: FTLNomadCharacterSheet.#onCreateLanguage | ||||
|  | ||||
|     }, | ||||
|   } | ||||
|  | ||||
|   /** @override */ | ||||
|   static PARTS = { | ||||
|     main: { | ||||
|       template: "systems/fvtt-ftl-nomad/templates/protagonist-main.hbs", | ||||
|       template: "systems/fvtt-ftl-nomad/templates/character-main.hbs", | ||||
|     }, | ||||
|     tabs: { | ||||
|       template: "templates/generic/tab-navigation.hbs", | ||||
|     }, | ||||
|     skills: { | ||||
|       template: "systems/fvtt-ftl-nomad/templates/protagonist-skills.hbs", | ||||
|     }, | ||||
|     status: { | ||||
|       template: "systems/fvtt-ftl-nomad/templates/protagonist-status.hbs", | ||||
|     talents: { | ||||
|       template: "systems/fvtt-ftl-nomad/templates/character-talents.hbs", | ||||
|     }, | ||||
|     equipment: { | ||||
|       template: "systems/fvtt-ftl-nomad/templates/protagonist-equipment.hbs", | ||||
|       template: "systems/fvtt-ftl-nomad/templates/character-equipment.hbs", | ||||
|     }, | ||||
|     biography: { | ||||
|       template: "systems/fvtt-ftl-nomad/templates/protagonist-biography.hbs", | ||||
|       template: "systems/fvtt-ftl-nomad/templates/character-biography.hbs", | ||||
|     }, | ||||
|   } | ||||
|  | ||||
|   /** @override */ | ||||
|   tabGroups = { | ||||
|     sheet: "skills", | ||||
|     sheet: "talents", | ||||
|   } | ||||
|  | ||||
|   /** | ||||
| @@ -59,8 +53,7 @@ export default class FTLNomadCharacterSheet extends FTLNomadActorSheet { | ||||
|    */ | ||||
|   #getTabs() { | ||||
|     const tabs = { | ||||
|       skills: { id: "skills", group: "sheet", icon: "fa-solid fa-shapes", label: "FTLNOMAD.Label.skills" }, | ||||
|       status: { id: "status", group: "sheet", icon: "fa-solid fa-file-waveform", label: "FTLNOMAD.Label.status" }, | ||||
|       talents: { id: "talents", group: "sheet", icon: "fa-solid fa-compass", label: "FTLNOMAD.Label.talents" }, | ||||
|       equipment: { id: "equipment", group: "sheet", icon: "fa-solid fa-shapes", label: "FTLNOMAD.Label.equipment" }, | ||||
|       biography: { id: "biography", group: "sheet", icon: "fa-solid fa-book", label: "FTLNOMAD.Label.biography" }, | ||||
|     } | ||||
| @@ -78,15 +71,6 @@ export default class FTLNomadCharacterSheet extends FTLNomadActorSheet { | ||||
|  | ||||
|     context.enrichedDescription = await TextEditor.enrichHTML(this.document.system.description, { async: true }) | ||||
|     context.enrichedNotes = await TextEditor.enrichHTML(this.document.system.notes, { async: true }) | ||||
|      | ||||
|     context.tooltipsCharacteristic = { | ||||
|       str: game.i18n.localize("FTLNOMAD.Characteristic.Str"), | ||||
|       dex: game.i18n.localize("FTLNOMAD.Characteristic.Dex"), | ||||
|       con: game.i18n.localize("FTLNOMAD.Characteristic.Con"), | ||||
|       int: game.i18n.localize("FTLNOMAD.Characteristic.Int"), | ||||
|       pow: game.i18n.localize("FTLNOMAD.Characteristic.Pow"), | ||||
|       cha: game.i18n.localize("FTLNOMAD.Characteristic.Cha") | ||||
|     } | ||||
|  | ||||
|     return context | ||||
|   } | ||||
| @@ -97,10 +81,16 @@ export default class FTLNomadCharacterSheet extends FTLNomadActorSheet { | ||||
|     switch (partId) { | ||||
|       case "main": | ||||
|         break | ||||
|       case "skills": | ||||
|         context.tab = context.tabs.skills | ||||
|         context.skills = doc.itemTypes.skill | ||||
|         context.skills.sort((a, b) => a.name.localeCompare(b.name)) | ||||
|       case "talents": | ||||
|         context.tab = context.tabs.talents | ||||
|         context.talents = doc.itemTypes.talent | ||||
|         context.talents.sort((a, b) => a.name.localeCompare(b.name)) | ||||
|         context.implants = doc.itemTypes.implant | ||||
|         context.implants.sort((a, b) => a.name.localeCompare(b.name)) | ||||
|         context.psionics = doc.itemTypes.psionic | ||||
|         context.psionics.sort((a, b) => a.name.localeCompare(b.name)) | ||||
|         context.languages = doc.itemTypes.language | ||||
|         context.languages.sort((a, b) => a.name.localeCompare(b.name)) | ||||
|         break | ||||
|       case "equipment": | ||||
|         context.tab = context.tabs.equipment | ||||
| @@ -108,23 +98,8 @@ export default class FTLNomadCharacterSheet extends FTLNomadActorSheet { | ||||
|         context.weapons.sort((a, b) => a.name.localeCompare(b.name)) | ||||
|         context.armors = doc.itemTypes.armor | ||||
|         context.armors.sort((a, b) => a.name.localeCompare(b.name)) | ||||
|         context.gears = doc.itemTypes.gear | ||||
|         context.gears.sort((a, b) => a.name.localeCompare(b.name)) | ||||
|         context.rituals = doc.itemTypes.ritual | ||||
|         context.rituals.sort((a, b) => a.name.localeCompare(b.name)) | ||||
|         context.tomes = doc.itemTypes.tome | ||||
|         context.tomes.sort((a, b) => a.name.localeCompare(b.name)) | ||||
|         break | ||||
|       case "status": | ||||
|         context.tab = context.tabs.status | ||||
|         context.injuries = doc.itemTypes.injury | ||||
|         context.injuries.sort((a, b) => a.name.localeCompare(b.name)) | ||||
|         context.mentaldisorders = doc.itemTypes.mentaldisorder | ||||
|         context.mentaldisorders.sort((a, b) => a.name.localeCompare(b.name)) | ||||
|         context.motivations = doc.itemTypes.motivation | ||||
|         context.motivations.sort((a, b) => a.name.localeCompare(b.name)) | ||||
|         context.bonds = doc.itemTypes.bond | ||||
|         context.bonds.sort((a, b) => a.name.localeCompare(b.name)) | ||||
|         context.equipments = doc.itemTypes.equipment | ||||
|         context.equipments.sort((a, b) => a.name.localeCompare(b.name)) | ||||
|         break | ||||
|       case "biography": | ||||
|         context.tab = context.tabs.biography | ||||
| @@ -135,16 +110,8 @@ export default class FTLNomadCharacterSheet extends FTLNomadActorSheet { | ||||
|     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 #onSetBP(event, target) { | ||||
|     this.document.system.setBP() | ||||
|   } | ||||
|    | ||||
|   static #onCreateGear(event, target) { | ||||
|  | ||||
|   static #onCreateEquipment(event, target) { | ||||
|     this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("FTLNOMAD.Label.newGear"), type: "gear" }]) | ||||
|   } | ||||
|  | ||||
| @@ -156,33 +123,22 @@ export default class FTLNomadCharacterSheet extends FTLNomadActorSheet { | ||||
|     this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("FTLNOMAD.Label.newArmor"), type: "armor" }]) | ||||
|   } | ||||
|  | ||||
|   static #onCreateBond(event, target) { | ||||
|     this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("FTLNOMAD.Label.newBond"), type: "bond" }]) | ||||
|   static #onCreateTalent(event, target) { | ||||
|     this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("FTLNOMAD.Label.newTalent"), type: "talent" }]) | ||||
|   } | ||||
|  | ||||
|   static #onCreateInjury(event, target) { | ||||
|     this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("FTLNOMAD.Label.newInjury"), type: "injury" }]) | ||||
|   static #onCreateImplant(event, target) { | ||||
|     this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("FTLNOMAD.Label.newImplant"), type: "implant" }]) | ||||
|   } | ||||
|  | ||||
|   static #onCreateMentalDisorder(event, target) { | ||||
|     this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("FTLNOMAD.Label.newMentalDisorder"), type: "mentaldisorder" }]) | ||||
|   static #onCreatePsionic(event, target) { | ||||
|     this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("FTLNOMAD.Label.newPsionic"), type: "psionic" }]) | ||||
|   } | ||||
|  | ||||
|   static #onCreateMotivation(event, target) { | ||||
|     this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("FTLNOMAD.Label.newMotivation"), type: "motivation" }]) | ||||
|   } | ||||
|  | ||||
|   static #onCreateSkill(event, target) { | ||||
|     this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("FTLNOMAD.Label.newSkill"), type: "skill" }]) | ||||
|   } | ||||
|  | ||||
|   static #onCreateRitual(event, target) { | ||||
|     this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("FTLNOMAD.Label.newRitual"), type: "ritual" }]) | ||||
|   } | ||||
|  | ||||
|   static #onCreateTome(event, target) { | ||||
|     this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("FTLNOMAD.Label.newTome"), type: "tome" }]) | ||||
|   static #onCreateLanguage(event, target) { | ||||
|     this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("FTLNOMAD.Label.newLanguage"), type: "language" }]) | ||||
|   } | ||||
|    | ||||
|  | ||||
|   /** | ||||
|    * Handles the roll action triggered by user interaction. | ||||
| @@ -202,35 +158,16 @@ export default class FTLNomadCharacterSheet extends FTLNomadActorSheet { | ||||
|     const rollType = $(event.currentTarget).data("roll-type") | ||||
|     let item | ||||
|     let li | ||||
|     // Debug : console.log(">>>>", event, target, rollType) | ||||
|     // Deprecated : if (this.isEditMode) return | ||||
|     switch (rollType) { | ||||
|       case "resource":  | ||||
|         item = foundry.utils.duplicate(this.actor.system.resources) | ||||
|         item.name = game.i18n.localize(`FTLNOMAD.Label.Resources`) | ||||
|         item.targetScore = item.permanentRating | ||||
|         break | ||||
|       case "char": | ||||
|         let charId = $(event.currentTarget).data("char-id") | ||||
|         item = foundry.utils.duplicate(this.actor.system.characteristics[charId]) | ||||
|         item.name = game.i18n.localize(`FTLNOMAD.Label.${charId}Long`) | ||||
|         item.targetScore = item.value * 5 | ||||
|         break | ||||
|       case "skill": | ||||
|         li = $(event.currentTarget).parents(".item"); | ||||
|         item = this.actor.items.get(li.data("item-id")); | ||||
|         let skillId = $(event.currentTarget).data("skill-id"); | ||||
|         item = this.actor.system.skills[skillId]; | ||||
|         break | ||||
|       case "weapon": | ||||
|       case "damage": | ||||
|         li = $(event.currentTarget).parents(".item"); | ||||
|         item = this.actor.items.get(li.data("item-id")); | ||||
|         item.damageBonus = this.actor.system.damageBonus | ||||
|         break | ||||
|       case "san":  | ||||
|         item = foundry.utils.duplicate(this.actor.system.san) | ||||
|         item.name = game.i18n.localize("FTLNOMAD.Label.SAN") | ||||
|         item.targetScore = item.value | ||||
|         break; | ||||
|       default: | ||||
|         throw new Error(`Unknown roll type ${rollType}`) | ||||
|     } | ||||
|   | ||||
| @@ -12,10 +12,8 @@ export default class FTLNomadCreatureSheet extends FTLNomadActorSheet { | ||||
|       contentClasses: ["npc-content"], | ||||
|     }, | ||||
|     actions: { | ||||
|       createArmor: FTLNomadCreatureSheet.#onCreateArmor, | ||||
|       createWeapon: FTLNomadCreatureSheet.#onCreateWeapon, | ||||
|       createSkill: FTLNomadCreatureSheet.#onCreateSkill, | ||||
|  | ||||
|       createTrait: FTLNomadCreatureSheet.#onCreateTrait, | ||||
|       createAbility: FTLNomadCreatureSheet.#onCreateAbility | ||||
|     }, | ||||
|   } | ||||
|  | ||||
| @@ -27,8 +25,8 @@ export default class FTLNomadCreatureSheet extends FTLNomadActorSheet { | ||||
|     tabs: { | ||||
|       template: "templates/generic/tab-navigation.hbs", | ||||
|     }, | ||||
|     skills: { | ||||
|       template: "systems/fvtt-ftl-nomad/templates/creature-skills.hbs", | ||||
|     traits: { | ||||
|       template: "systems/fvtt-ftl-nomad/templates/creature-trait.hbs", | ||||
|     }, | ||||
|     biography: { | ||||
|       template: "systems/fvtt-ftl-nomad/templates/creature-biography.hbs", | ||||
| @@ -37,7 +35,7 @@ export default class FTLNomadCreatureSheet extends FTLNomadActorSheet { | ||||
|  | ||||
|   /** @override */ | ||||
|   tabGroups = { | ||||
|     sheet: "skills", | ||||
|     sheet: "traits", | ||||
|   } | ||||
|  | ||||
|   /** | ||||
| @@ -46,7 +44,7 @@ export default class FTLNomadCreatureSheet extends FTLNomadActorSheet { | ||||
|    */ | ||||
|   #getTabs() { | ||||
|     const tabs = { | ||||
|       skills: { id: "skills", group: "sheet", icon: "fa-solid fa-shapes", label: "FTLNOMAD.Label.skills" }, | ||||
|       traits: { id: "traits", group: "sheet", icon: "fa-solid fa-shapes", label: "FTLNOMAD.Label.traits" }, | ||||
|       biography: { id: "biography", group: "sheet", icon: "fa-solid fa-book", label: "FTLNOMAD.Label.biography" }, | ||||
|     } | ||||
|     for (const v of Object.values(tabs)) { | ||||
| @@ -63,7 +61,7 @@ export default class FTLNomadCreatureSheet extends FTLNomadActorSheet { | ||||
|  | ||||
|     context.enrichedDescription = await TextEditor.enrichHTML(this.document.system.description, { async: true }) | ||||
|     context.enrichedNotes = await TextEditor.enrichHTML(this.document.system.notes, { async: true }) | ||||
|      | ||||
|  | ||||
|     return context | ||||
|   } | ||||
|  | ||||
| @@ -73,14 +71,12 @@ export default class FTLNomadCreatureSheet extends FTLNomadActorSheet { | ||||
|     switch (partId) { | ||||
|       case "main": | ||||
|         break | ||||
|       case "skills": | ||||
|         context.tab = context.tabs.skills | ||||
|         context.skills = doc.itemTypes.skill | ||||
|         context.skills.sort((a, b) => a.name.localeCompare(b.name)) | ||||
|         context.weapons = doc.itemTypes.weapon | ||||
|         context.weapons.sort((a, b) => a.name.localeCompare(b.name)) | ||||
|         context.armors = doc.itemTypes.armor | ||||
|         context.armors.sort((a, b) => a.name.localeCompare(b.name)) | ||||
|       case "traits": | ||||
|         context.tab = context.tabs.traits | ||||
|         context.abilities = doc.itemTypes["creature-ability"] | ||||
|         context.abilities.sort((a, b) => a.name.localeCompare(b.name)) | ||||
|         context.traits = doc.itemTypes["creature-trait"] | ||||
|         context.traits.sort((a, b) => a.name.localeCompare(b.name)) | ||||
|         break | ||||
|       case "biography": | ||||
|         context.tab = context.tabs.biography | ||||
| @@ -96,16 +92,12 @@ export default class FTLNomadCreatureSheet extends FTLNomadActorSheet { | ||||
|    * @param {Event} event             The initiating click event. | ||||
|    * @param {HTMLElement} target      The current target of the event listener. | ||||
|    */ | ||||
|   static #onCreateWeapon(event, target) { | ||||
|     this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("FTLNOMAD.Label.newWeapon"), type: "weapon" }]) | ||||
|   static #onCreateTrait(event, target) { | ||||
|     this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("FTLNOMAD.Label.newTrait"), type: "creaturetrait" }]) | ||||
|   } | ||||
|  | ||||
|   static #onCreateArmor(event, target) { | ||||
|     this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("FTLNOMAD.Label.newArmor"), type: "armor" }]) | ||||
|   } | ||||
|  | ||||
|   static #onCreateSkill(event, target) { | ||||
|     this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("FTLNOMAD.Label.newSkill"), type: "skill" }]) | ||||
|   static #onCreateAbility(event, target) { | ||||
|     this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("FTLNOMAD.Label.newAbility"), type: "creatureability" }]) | ||||
|   } | ||||
|  | ||||
|   /** | ||||
| @@ -125,30 +117,31 @@ export default class FTLNomadCreatureSheet extends FTLNomadActorSheet { | ||||
|   async _onRoll(event, target) { | ||||
|     const rollType = $(event.currentTarget).data("roll-type") | ||||
|     let item | ||||
|     let li | ||||
|     // Debug : console.log(">>>>", event, target, rollType) | ||||
|     // Deprecated : if (this.isEditMode) return | ||||
|     let formula | ||||
|     let roll | ||||
|     switch (rollType) { | ||||
|       case "char": | ||||
|         let charId = $(event.currentTarget).data("char-id") | ||||
|         item = foundry.utils.duplicate(this.actor.system.characteristics[charId]) | ||||
|         item.name = game.i18n.localize(`FTLNOMAD.Label.${charId}Long`) | ||||
|         item.targetScore = item.value * 5 | ||||
|         break | ||||
|       case "skill": | ||||
|         li = $(event.currentTarget).parents(".item"); | ||||
|         item = this.actor.items.get(li.data("item-id")); | ||||
|         let skillId = $(event.currentTarget).data("skill-id"); | ||||
|         item = this.actor.system.skills[skillId]; | ||||
|         await this.document.system.roll(rollType, item) | ||||
|         break | ||||
|       case "weapon": | ||||
|       case "damage": | ||||
|         li = $(event.currentTarget).parents(".item"); | ||||
|         item = this.actor.items.get(li.data("item-id")); | ||||
|         item.damageBonus = this.actor.system.damageBonus | ||||
|       case "creature-damage": | ||||
|         formula = this.actor.system.damage | ||||
|         // Rolll the damage | ||||
|         roll = new Roll(formula) | ||||
|         await roll.evaluate() | ||||
|         roll.toMessage( { flavor: `${this.actor.name} : Damage roll` }) | ||||
|         break | ||||
|       case "creature-number": | ||||
|         formula = this.actor.system.numberAppearing | ||||
|         // Rolll the damage | ||||
|         roll = new Roll(formula) | ||||
|         await roll.evaluate() | ||||
|         roll.toMessage({flavor: `${this.actor.name} : Number Appearing roll`}) | ||||
|         break | ||||
|       default: | ||||
|         throw new Error(`Unknown roll type ${rollType}`) | ||||
|     } | ||||
|     await this.document.system.roll(rollType, item) | ||||
|   } | ||||
|  | ||||
|   async _onDrop(event) { | ||||
| @@ -162,5 +155,4 @@ export default class FTLNomadCreatureSheet extends FTLNomadActorSheet { | ||||
|         return super._onDropItem(item) | ||||
|     } | ||||
|   } | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -3,17 +3,15 @@ import FTLNomadActorSheet from "./base-actor-sheet.mjs" | ||||
| export default class FTLNomadStarshipSheet extends FTLNomadActorSheet { | ||||
|   /** @override */ | ||||
|   static DEFAULT_OPTIONS = { | ||||
|     classes: ["vehicle"], | ||||
|     classes: ["starship"], | ||||
|     position: { | ||||
|       width: 680, | ||||
|       height: 540, | ||||
|       height: 640, | ||||
|     }, | ||||
|     window: { | ||||
|       contentClasses: ["vehicle-content"], | ||||
|       contentClasses: ["starship-content"], | ||||
|     }, | ||||
|     actions: { | ||||
|       createGear: FTLNomadStarshipSheet.#onCreateGear, | ||||
|       createWeapon: FTLNomadStarshipSheet.#onCreateWeapon, | ||||
|     }, | ||||
|   } | ||||
|  | ||||
| @@ -25,9 +23,6 @@ export default class FTLNomadStarshipSheet extends FTLNomadActorSheet { | ||||
|     tabs: { | ||||
|       template: "templates/generic/tab-navigation.hbs", | ||||
|     }, | ||||
|     equipment: { | ||||
|       template: "systems/fvtt-ftl-nomad/templates/starship-equipment.hbs", | ||||
|     }, | ||||
|     description: { | ||||
|       template: "systems/fvtt-ftl-nomad/templates/starship-description.hbs", | ||||
|     }, | ||||
| @@ -35,7 +30,7 @@ export default class FTLNomadStarshipSheet extends FTLNomadActorSheet { | ||||
|  | ||||
|    /** @override */ | ||||
|    tabGroups = { | ||||
|     sheet: "equipment", | ||||
|     sheet: "description", | ||||
|   } | ||||
|    | ||||
|   /** | ||||
| @@ -44,7 +39,6 @@ export default class FTLNomadStarshipSheet extends FTLNomadActorSheet { | ||||
|    */ | ||||
|   #getTabs() { | ||||
|     const tabs = { | ||||
|       equipment: { id: "equipment", group: "sheet", icon: "fa-solid fa-shapes", label: "FTLNOMAD.Label.equipment" }, | ||||
|       description: { id: "description", group: "sheet", icon: "fa-solid fa-book", label: "FTLNOMAD.Label.description" }, | ||||
|     } | ||||
|     for (const v of Object.values(tabs)) { | ||||
| @@ -61,6 +55,7 @@ export default class FTLNomadStarshipSheet extends FTLNomadActorSheet { | ||||
|  | ||||
|     context.enrichedDescription = await TextEditor.enrichHTML(this.document.system.description, { async: true }) | ||||
|     context.enrichedNotes = await TextEditor.enrichHTML(this.document.system.notes, { async: true }) | ||||
|     context.enrichedModifications = await TextEditor.enrichHTML(this.document.system.modifications, { async: true }) | ||||
|      | ||||
|     return context | ||||
|   } | ||||
| @@ -74,11 +69,6 @@ export default class FTLNomadStarshipSheet extends FTLNomadActorSheet { | ||||
|     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 }) | ||||
| @@ -88,17 +78,22 @@ export default class FTLNomadStarshipSheet extends FTLNomadActorSheet { | ||||
|     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("FTLNOMAD.Label.newGear"), type: "gear" }]) | ||||
|   } | ||||
|  | ||||
|   static #onCreateWeapon(event, target) { | ||||
|     this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("FTLNOMAD.Label.newWeapon"), type: "weapon" }]) | ||||
|   async _onRoll(event, target) { | ||||
|     const rollType = $(event.currentTarget).data("roll-type") | ||||
|     let item | ||||
|     let formula | ||||
|     let roll | ||||
|     switch (rollType) { | ||||
|       case "starship-guns": | ||||
|         formula = this.actor.system.guns | ||||
|         // Rolll the damage | ||||
|         roll = new Roll(formula) | ||||
|         await roll.evaluate() | ||||
|         roll.toMessage( { flavor: `Starship ${this.actor.name} : Guns Damage` }) | ||||
|         break | ||||
|       default: | ||||
|         throw new Error(`Unknown roll type ${rollType}`) | ||||
|     } | ||||
|   } | ||||
|  | ||||
|  | ||||
|   | ||||
| @@ -12,7 +12,7 @@ export default class FTLNomadVehicleSheet extends FTLNomadActorSheet { | ||||
|       contentClasses: ["vehicle-content"], | ||||
|     }, | ||||
|     actions: { | ||||
|       createGear: FTLNomadVehicleSheet.#onCreateGear, | ||||
|       createEquipment: FTLNomadVehicleSheet.#onCreateEquipment, | ||||
|       createWeapon: FTLNomadVehicleSheet.#onCreateWeapon, | ||||
|     }, | ||||
|   } | ||||
| @@ -77,7 +77,9 @@ export default class FTLNomadVehicleSheet extends FTLNomadActorSheet { | ||||
|       case "equipment": | ||||
|         context.tab = context.tabs.equipment | ||||
|         context.weapons = doc.itemTypes.weapon | ||||
|         context.gears = doc.itemTypes.gear | ||||
|         context.weapons.sort((a, b) => a.name.localeCompare(b.name)) | ||||
|         context.equipments = doc.itemTypes.equipment | ||||
|         context.equipments.sort((a, b) => a.name.localeCompare(b.name)) | ||||
|         break   | ||||
|       case "description": | ||||
|         context.tab = context.tabs.description | ||||
| @@ -93,8 +95,8 @@ export default class FTLNomadVehicleSheet extends FTLNomadActorSheet { | ||||
|    * @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("FTLNOMAD.Label.newGear"), type: "gear" }]) | ||||
|   static #onCreateEquipment(event, target) { | ||||
|     this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("FTLNOMAD.Label.newEquipment"), type: "equipment" }]) | ||||
|   } | ||||
|  | ||||
|   static #onCreateWeapon(event, target) { | ||||
|   | ||||
| @@ -20,7 +20,7 @@ export const SKILLS = { | ||||
|   "social": { id: "social", label: "FTLNOMAD.Skill.Social" }, | ||||
|   "physical": { id: "physical", label: "FTLNOMAD.Skill.Physical" }, | ||||
|   "stealth": { id: "stealth", label: "FTLNOMAD.Skill.Stealth" }, | ||||
|   "vehicles": { id: "vehicle", label: "FTLNOMAD.Skill.Vehicles" }, | ||||
|   "vehicles": { id: "vehicles", label: "FTLNOMAD.Skill.Vehicles" }, | ||||
|   "technology": { id: "technology", label: "FTLNOMAD.Skill.Technology" } | ||||
| } | ||||
|  | ||||
| @@ -50,11 +50,26 @@ export const WEAPON_TYPES = { | ||||
|   "grenade": { id: "grenade", label: "FTLNOMAD.Weapon.Types.Grenade" }, | ||||
|   "vehicle": { id: "vehicle", label: "FTLNOMAD.Weapon.Types.Vehicle" } | ||||
| } | ||||
|  | ||||
| export const WEAPON_RANGE = { | ||||
|   "melee": { id: "melee", label: "FTLNOMAD.Weapon.Range.Melee" }, | ||||
|   "handgun": { id: "handgun", label: "FTLNOMAD.Weapon.Range.Handgun" }, | ||||
|   "rifle": { id: "rifle", label: "FTLNOMAD.Weapon.Range.Rifle" }, | ||||
|   "longrange": { id: "longrange", label: "FTLNOMAD.Weapon.Range.LongRange" } | ||||
|   "handgun": { id: "handgun", label: "FTLNOMAD.Weapon.Range.Handgun", range: {close: 0, near:0, far:-2} }, | ||||
|   "assault": { id: "assault", label: "FTLNOMAD.Weapon.Range.Assault", range: {close: -2, near:0, far:-1, distant: -2} }, | ||||
|   "rifle": { id: "rifle", label: "FTLNOMAD.Weapon.Range.Rifle", range: {close: -3, near:0, far:0, distant: -1} }, | ||||
|   "melee": { id: "melee", label: "FTLNOMAD.Weapon.Range.Melee", range: {close: 0} }, | ||||
|   "heavyweapon": { id: "heavyweapon", label: "FTLNOMAD.Weapon.Range.HeavyWeapon", range: {near:-1, far:0, distant: 0} }, | ||||
|   "thrownweapon": { id: "thrownweapon", label: "FTLNOMAD.Weapon.Range.ThrownWeapon", range: {close: 0, near:-1} } | ||||
| } | ||||
|  | ||||
| export const ATTACK_MODIFIERS = { | ||||
|   "two-attacks": -1, | ||||
|   "aiming": 1, | ||||
|   "dim": -1, | ||||
|   "darkness": -2, | ||||
|   "prone": -1, | ||||
|   "cover": -2, | ||||
|   "recoil-first": -1, | ||||
|   "recoil-third": -2, | ||||
|   "aware": -1 | ||||
| } | ||||
|  | ||||
| export const TRIAGE_RESULTS = { | ||||
| @@ -98,18 +113,42 @@ export const CREATURE_SIZES = { | ||||
|   "titanic": { id: "titanic", label: "FTLNOMAD.Creature.Size.Titanic" } | ||||
| } | ||||
|  | ||||
| export const MODIFIER_CHOICES = { | ||||
|   "easy": { id: "easy", label: "FTLNOMAD.Label.Easy", value :"1" }, | ||||
|   "moderate": { id: "moderate", label: "FTLNOMAD.Label.Moderate", value: "0" }, | ||||
|   "difficult": { id: "difficult", label: "FTLNOMAD.Label.Difficult", value: "-1" }, | ||||
|   "formidable": { id: "formidable", label: "FTLNOMAD.Label.Formidable", value: "-2" }, | ||||
|   "impossible": { id: "impossible", label: "FTLNOMAD.Label.Impossible", value: "-4" }   | ||||
| } | ||||
|  | ||||
| export const STARSHIP_HULL = { | ||||
|   "pod": { id: "pod", label: "FTLNOMAD.Starship.Hull.Pod" }, | ||||
|   "micro": { id: "micro", label: "FTLNOMAD.Starship.Hull.Micro" }, | ||||
|   "small": { id: "small", label: "FTLNOMAD.Starship.Hull.Small" }, | ||||
|   "scout": { id: "scout", label: "FTLNOMAD.Starship.Hull.Scout" }, | ||||
|   "picket": { id: "picket", label: "FTLNOMAD.Starship.Hull.Picket" }, | ||||
|   "destroyer": { id: "destroyer", label: "FTLNOMAD.Starship.Hull.Destroyer" }, | ||||
|   "cruiser": { id: "cruiser", label: "FTLNOMAD.Starship.Hull.Cruiser" }, | ||||
|   "battleship": { id: "battleship", label: "FTLNOMAD.Starship.Hull.Battleship" }, | ||||
|   "carrier": { id: "carrier", label: "FTLNOMAD.Starship.Hull.Carrier" } | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Include all constant definitions within the SYSTEM global export | ||||
|  * @type {Object} | ||||
|  */ | ||||
| export const SYSTEM = { | ||||
|   id: SYSTEM_ID, | ||||
|   MODIFIER_CHOICES, | ||||
|   ATTACK_MODIFIERS, | ||||
|   TECH_AGES, | ||||
|   WEAPON_TYPES, | ||||
|   WEAPON_RANGE, | ||||
|   TRIAGE_RESULTS, | ||||
|   CREATURE_TERRAIN_TYPES, | ||||
|   CREATURE_SIZES, | ||||
|   CREATURE_NICHES, | ||||
|   STARSHIP_HULL, | ||||
|   SKILLS, | ||||
|   ASCII | ||||
| } | ||||
|   | ||||
| @@ -40,14 +40,6 @@ export default class FTLNomadRoll extends Roll { | ||||
|     return this.options.help | ||||
|   } | ||||
|  | ||||
|   get gene() { | ||||
|     return this.options.gene | ||||
|   } | ||||
|  | ||||
|   get modifier() { | ||||
|     return this.options.modifier | ||||
|   } | ||||
|  | ||||
|   get resultType() { | ||||
|     return this.options.resultType | ||||
|   } | ||||
| @@ -68,41 +60,15 @@ export default class FTLNomadRoll extends Roll { | ||||
|     return this.options.weapon | ||||
|   } | ||||
|  | ||||
|   get isLowWP() { | ||||
|     return this.options.isLowWP | ||||
|   } | ||||
|  | ||||
|   get isZeroWP() { | ||||
|     return this.options.isZeroWP | ||||
|   } | ||||
|  | ||||
|   get isExhausted() { | ||||
|     return this.options.isExhausted | ||||
|   } | ||||
|  | ||||
|   get isNudgedRoll() { | ||||
|     return this.options.isNudgedRoll | ||||
|   } | ||||
|  | ||||
|   get wpCost()  { | ||||
|     return this.options.wpCost | ||||
|   } | ||||
|  | ||||
|   static updateResourceDialog(options) { | ||||
|     let rating = 0 | ||||
|     if (options.rollItem.enableHand) { | ||||
|       rating += options.rollItem.hand | ||||
|   static updateFullFormula(options) { | ||||
|     let fullFormula | ||||
|     if ( options.numericModifier >= 0) { | ||||
|       fullFormula = `${options.formula} + ${options.rollItem.value} + ${options.numericModifier}D`  | ||||
|     } else { | ||||
|       fullFormula = `${options.formula} + ${options.rollItem.value} - ${Math.abs(options.numericModifier)}D` | ||||
|     } | ||||
|     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}%)`) | ||||
|     $('#roll-dialog-full-formula').text(fullFormula) | ||||
|     options.fullFormula = fullFormula | ||||
|   } | ||||
|  | ||||
|   /** | ||||
| @@ -120,84 +86,25 @@ export default class FTLNomadRoll extends Roll { | ||||
|    * @returns {Promise<Object|null>} The roll result or null if the dialog was cancelled. | ||||
|    */ | ||||
|   static async prompt(options = {}) { | ||||
|     let formula = "1d100" | ||||
|     let hasModifier = true | ||||
|     let hasMultiplier = false | ||||
|     options.isNudge = true | ||||
|     let formula = "2d6" | ||||
|  | ||||
|     switch (options.rollType) { | ||||
|       case "skill": | ||||
|         console.log(options.rollItem) | ||||
|         options.initialScore = options.rollItem.system.computeScore() | ||||
|         break | ||||
|       case "san": | ||||
|       case "char": | ||||
|         options.initialScore = options.rollItem.targetScore | ||||
|         options.isNudge = (options.rollType !== "san") | ||||
|         break | ||||
|       case "resource": | ||||
|         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 | ||||
|         options.isNudge = false | ||||
|         break | ||||
|       case "damage": | ||||
|         let formula = options.rollItem.system.damage | ||||
|         if ( options.rollItem.system.weaponType === "melee" || options.rollItem.system.weaponType === "unarmed") { | ||||
|           formula += ` + ${options.rollItem.damageBonus}` | ||||
|         } | ||||
|         let damageRoll = new Roll(formula) | ||||
|         await damageRoll.evaluate() | ||||
|         await damageRoll.toMessage({ | ||||
|           flavor: `${options.rollItem.name} - Damage Roll` | ||||
|         }); | ||||
|         let isLethal = false | ||||
|         options.isNudge = false | ||||
|         if (options.rollItem.system.lethality > 0) { | ||||
|           let lethalityRoll = new Roll("1d100") | ||||
|           await lethalityRoll.evaluate() | ||||
|           isLethal = (lethalityRoll.total <= options.rollItem.system.lethality) | ||||
|           await lethalityRoll.toMessage({ | ||||
|             flavor: `${options.rollItem.name} - Lethality Roll : ${lethalityRoll.total} <= ${options.rollItem.system.lethality} => ${isLethal}` | ||||
|           }); | ||||
|         } | ||||
|         return | ||||
|       case "weapon": | ||||
|         let era = game.settings.get("fvtt-ftl-nomad", "settings-era") | ||||
|         if (era !== options.rollItem.system.settings) { | ||||
|           ui.notifications.error(game.i18n.localize("FTLNOMAD.Notifications.WrongEra")) | ||||
|           console.log("WP Wrong Era", era, options.rollItem.system.weaponType) | ||||
|           return | ||||
|         } | ||||
|         if (!SYSTEM.WEAPON_SKILL_MAPPING[era] || !SYSTEM.WEAPON_SKILL_MAPPING[era][options.rollItem.system.weaponType]) { | ||||
|           ui.notifications.error(game.i18n.localize("FTLNOMAD.Notifications.NoWeaponType")) | ||||
|           console.log("WP Not found", era, options.rollItem.system.weaponType) | ||||
|           return | ||||
|         } | ||||
|         options.weapon = options.rollItem | ||||
|         if (options.rollItem.system.hasDirectSkill) { | ||||
|           let skillName = options.rollItem.name | ||||
|           options.rollItem = {type: "skill", name: skillName, system: {base: 0, bonus:  options.weapon.system.directSkillValue} } | ||||
|           options.initialScore = options.weapon.system.directSkillValue | ||||
|         } else { | ||||
|           let skillName = game.i18n.localize(SYSTEM.WEAPON_SKILL_MAPPING[era][options.rollItem.system.weaponType]) | ||||
|           let actor = game.actors.get(options.actorId)           | ||||
|           options.rollItem = actor.items.find(i => i.type === "skill" && i.name.toLowerCase() === skillName.toLowerCase()) | ||||
|           if (!options.rollItem) { | ||||
|             ui.notifications.error(game.i18n.localize("FTLNOMAD.Notifications.NoWeaponSkill")) | ||||
|             return | ||||
|           } | ||||
|           options.initialScore = options.rollItem.system.computeScore() | ||||
|           console.log("WEAPON", skillName, era, options.rollItem) | ||||
|         } | ||||
|         let actor = game.actors.get(options.actorId)           | ||||
|         options.weapon = foundry.utils.duplicate(options.rollItem) | ||||
|         options.rollItem = actor.system.skills.combat | ||||
|         break | ||||
|       default: | ||||
|         options.initialScore = 50 | ||||
|         break | ||||
|     } | ||||
|  | ||||
| @@ -209,37 +116,53 @@ export default class FTLNomadRoll extends Roll { | ||||
|     }) | ||||
|  | ||||
|     const choiceModifier = SYSTEM.MODIFIER_CHOICES | ||||
|     const choiceMultiplier = SYSTEM.MULTIPLIER_CHOICES | ||||
|     let choiceRangeModifier = {} | ||||
|     let rangeModifier = 0 | ||||
|     if ( options.weapon) { | ||||
|       // Build the range modifiers | ||||
|       let range = SYSTEM.WEAPON_RANGE[options.weapon.system.rangeType] | ||||
|       for (let [key, value] of Object.entries(range.range)) { | ||||
|         choiceRangeModifier[key] = { label: `${key} (${value}D)`, value: value } | ||||
|         if (!rangeModifier && value) { | ||||
|           rangeModifier = value | ||||
|         }  | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     let modifier = "+0" | ||||
|     let multiplier = "5" | ||||
|     let modifier = "0" | ||||
|     options.numericModifier = rangeModifier | ||||
|     let fullFormula = `${formula} + ${options.rollItem.value}` | ||||
|     if (options.isEncumbered) { | ||||
|       options.numericModifier += -1 | ||||
|       fullFormula += ` - ${options.numericModifier}D` | ||||
|     } else { | ||||
|       options.numericModifier += 0 | ||||
|       fullFormula += ` + ${options.numericModifier}D` | ||||
|     } | ||||
|     options.fullFormula = fullFormula | ||||
|     options.formula = formula | ||||
|  | ||||
|     let dialogContext = { | ||||
|       actorId: options.actorId, | ||||
|       actorName: options.actorName, | ||||
|       rollType: options.rollType, | ||||
|       rollItem: foundry.utils.duplicate(options.rollItem), // Object only, no class | ||||
|       fullFormula, | ||||
|       weapon: options?.weapon, | ||||
|       initialScore: options.initialScore, | ||||
|       targetScore: options.initialScore, | ||||
|       isLowWP: options.isLowWP, | ||||
|       isZeroWP: options.isZeroWP, | ||||
|       isExhausted: options.isExhausted, | ||||
|       enableHand: options.rollItem.enableHand, | ||||
|       enableStowed: options.rollItem.enableStowed, | ||||
|       enableStorage: options.rollItem.enableStorage, | ||||
|       isEncumbered: options.isEncumbered, | ||||
|       talents: options.talents, | ||||
|       rollModes, | ||||
|       fieldRollMode, | ||||
|       choiceModifier, | ||||
|       choiceMultiplier, | ||||
|       choiceRangeModifier, | ||||
|       rangeModifier, | ||||
|       formula, | ||||
|       hasTarget: options.hasTarget, | ||||
|       hasModifier, | ||||
|       hasMultiplier, | ||||
|       modifier, | ||||
|       multiplier | ||||
|     } | ||||
|     const content = await renderTemplate("systems/fvtt-ftl-nomad/templates/roll-dialog.hbs", dialogContext) | ||||
|  | ||||
|     const title = CthulhuEternalRoll.createTitle(options.rollType, options.rollTarget) | ||||
|     const title = FTLNomadRoll.createTitle(options.rollType, options.rollTarget) | ||||
|     const label = game.i18n.localize("FTLNOMAD.Roll.roll") | ||||
|     const rollContext = await foundry.applications.api.DialogV2.wait({ | ||||
|       window: { title: title }, | ||||
| @@ -258,24 +181,27 @@ export default class FTLNomadRoll 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 | ||||
|       render: (event, dialog) => { | ||||
|         $(".roll-skill-multiplier").change(event => { | ||||
|           options.multiplier = Number(event.target.value) | ||||
|           this.updateResourceDialog(options) | ||||
|         $(".roll-skill-modifier").change(event => { | ||||
|           options.numericModifier += Number(event.target.value) | ||||
|           FTLNomadRoll.updateFullFormula(options) | ||||
|         }) | ||||
|         $(".roll-skill-range-modifier").change(event => { | ||||
|           options.numericModifier += Number(event.target.value) | ||||
|           FTLNomadRoll.updateFullFormula(options) | ||||
|         }) | ||||
|         $(".select-combat-option").change(event => { | ||||
|           console.log(event) | ||||
|           let field = $(event.target).data("field") | ||||
|           let modifier = SYSTEM.ATTACK_MODIFIERS[field] | ||||
|           if ( event.target.checked) { | ||||
|             options.numericModifier += modifier | ||||
|           } else { | ||||
|             options.numericModifier -= modifier | ||||
|           } | ||||
|           FTLNomadRoll.updateFullFormula(options) | ||||
|         }) | ||||
|       } | ||||
|     }) | ||||
| @@ -285,25 +211,19 @@ export default class FTLNomadRoll extends Roll { | ||||
|  | ||||
|     let rollData = foundry.utils.mergeObject(foundry.utils.duplicate(options), rollContext) | ||||
|     rollData.rollMode = rollContext.visibility | ||||
|  | ||||
|     // Update target score | ||||
|     console.log("Rolldata", rollData, options) | ||||
|     if (options.rollType === "resource") { | ||||
|       rollData.targetScore = options.initialScore * Number(rollContext.multiplier) | ||||
|     } 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) | ||||
|     } | ||||
|     rollData.targetScore = 8 | ||||
|  | ||||
|     if (Hooks.call("fvtt-ftl-nomad.preRoll", options, rollData) === false) return | ||||
|      | ||||
|     let diceFormula = `${2+Math.abs(options.numericModifier)}D6` | ||||
|     if ( options.numericModifier > 0 ) { | ||||
|       diceFormula += `kh2 + ${options.rollItem.value}` | ||||
|     } else { | ||||
|       diceFormula += `kl2 + ${options.rollItem.value}` | ||||
|     } | ||||
|  | ||||
|     const roll = new this(formula, options.data, rollData) | ||||
|     const roll = new this(diceFormula, options.data, rollData) | ||||
|     await roll.evaluate() | ||||
|  | ||||
|     roll.displayRollResult(roll, options, rollData) | ||||
| @@ -317,34 +237,15 @@ export default class FTLNomadRoll extends Roll { | ||||
|  | ||||
|     // Compute the result quality | ||||
|     let resultType = "failure" | ||||
|     let dec = Math.floor(this.total / 10) | ||||
|     let unit = this.total - (dec * 10) | ||||
|     if (this.total <= rollData.targetScore) { | ||||
|     if (this.total >= 8) { | ||||
|       resultType = "success" | ||||
|       // Detect if decimal == unit in the dire total result  | ||||
|       if (dec === unit || this.total === 1) { | ||||
|         resultType = "successCritical" | ||||
|       } | ||||
|     } else { | ||||
|       // Detect if decimal == unit in the dire total result  | ||||
|       if (dec === unit || this.total === 100) { | ||||
|         resultType = "failureCritical" | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     this.options.resultType = resultType | ||||
|     if (this.options.isNudgedRoll) {  | ||||
|       this.options.isSuccess = resultType === "success" || resultType === "successCritical" | ||||
|       this.options.isFailure = resultType === "failure" || resultType === "failureCritical" | ||||
|       this.options.isCritical = false | ||||
|     } else { | ||||
|       this.options.isSuccess = resultType === "success" || resultType === "successCritical" | ||||
|       this.options.isFailure = resultType === "failure" || resultType === "failureCritical" | ||||
|       this.options.isCritical = resultType === "successCritical" || resultType === "failureCritical" | ||||
|     } | ||||
|     this.options.isLowWP = rollData.isLowWP | ||||
|     this.options.isZeroWP = rollData.isZeroWP | ||||
|     this.options.isExhausted = rollData.isExhausted | ||||
|     this.options.isSuccess = resultType === "success"  | ||||
|     this.options.isFailure = resultType === "failure"  | ||||
|     this.options.isEncumbered = rollData.isEncumbered | ||||
|     this.options.rollData = foundry.utils.duplicate(rollData) | ||||
|   } | ||||
|  | ||||
| @@ -361,10 +262,6 @@ export default class FTLNomadRoll extends Roll { | ||||
|         return `${game.i18n.localize("FTLNOMAD.Label.titleSkill")}` | ||||
|       case "weapon": | ||||
|         return `${game.i18n.localize("FTLNOMAD.Label.titleWeapon")}` | ||||
|       case "char": | ||||
|         return `${game.i18n.localize("FTLNOMAD.Label.titleCharacteristic")}` | ||||
|       case "san": | ||||
|         return `${game.i18n.localize("FTLNOMAD.Label.titleSAN")}` | ||||
|       default: | ||||
|         return game.i18n.localize("FTLNOMAD.Label.titleStandard") | ||||
|     } | ||||
| @@ -407,6 +304,8 @@ export default class FTLNomadRoll extends Roll { | ||||
|     cardData.diceTotal = this.dice.reduce((t, d) => t + d.total, 0) | ||||
|     cardData.isGM = game.user.isGM | ||||
|     cardData.formula = this.formula | ||||
|     cardData.fullFormula = this.options.fullFormula | ||||
|     cardData.numericModifier = this.options.numericModifier | ||||
|     cardData.total = this.total | ||||
|     cardData.actorId = this.actorId | ||||
|     cardData.actingCharName = this.actorName | ||||
| @@ -418,11 +317,7 @@ export default class FTLNomadRoll extends Roll { | ||||
|     cardData.realDamage = this.realDamage | ||||
|     cardData.isPrivate = isPrivate | ||||
|     cardData.weapon = this.weapon | ||||
|     cardData.isLowWP = this.isLowWP | ||||
|     cardData.isZeroWP = this.isZeroWP | ||||
|     cardData.isExhausted = this.isExhausted | ||||
|     cardData.isNudgedRoll = this.isNudgedRoll | ||||
|     cardData.wpCost = this.wpCost | ||||
|     cardData.isEncumbered = this.isEncumbered | ||||
|  | ||||
|     cardData.cssClass = cardData.css.join(" ") | ||||
|     cardData.tooltip = isPrivate ? "" : await this.getTooltip() | ||||
|   | ||||
| @@ -18,6 +18,7 @@ export default class FTLNomadProtagonist extends foundry.abstract.TypeDataModel | ||||
|     const skillField = (label) => { | ||||
|       const schema = { | ||||
|         value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 5 }), | ||||
|         label: new fields.StringField({ required: true, nullable: false, initial: label }) | ||||
|       } | ||||
|       return new fields.SchemaField(schema, { label }) | ||||
|     } | ||||
| @@ -43,6 +44,10 @@ export default class FTLNomadProtagonist extends foundry.abstract.TypeDataModel | ||||
|       max: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) | ||||
|     }) | ||||
|  | ||||
|     schema.armor = new fields.SchemaField({ | ||||
|       value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) | ||||
|     }) | ||||
|  | ||||
|     schema.credits = new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) | ||||
|     schema.rank = new fields.SchemaField({ | ||||
|       experienced: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 5 }), | ||||
| @@ -55,6 +60,7 @@ export default class FTLNomadProtagonist extends foundry.abstract.TypeDataModel | ||||
|     schema.biodata = new fields.SchemaField({ | ||||
|       age: new fields.NumberField({ ...requiredInteger, initial: 15, min: 6 }), | ||||
|       height: new fields.NumberField({ ...requiredInteger, initial: 170, min: 50 }), | ||||
|       weight: new fields.NumberField({ ...requiredInteger, initial: 70, min: 1 }), | ||||
|       gender: new fields.StringField({ required: true, nullable: false, initial: "" }), | ||||
|       home: new fields.StringField({ required: true, nullable: false, initial: "" }), | ||||
|       birthplace: new fields.StringField({ required: true, nullable: false, initial: "" }), | ||||
| @@ -70,9 +76,37 @@ export default class FTLNomadProtagonist extends foundry.abstract.TypeDataModel | ||||
|  | ||||
|   prepareDerivedData() { | ||||
|     super.prepareDerivedData(); | ||||
|  | ||||
|      | ||||
|     let encMax = 10 + (2*this.skills.physical.value) | ||||
|     if (encMax !== this.enc.max) { | ||||
|       this.enc.max = encMax | ||||
|     } | ||||
|     let enc = 0 | ||||
|     let armor = 0 | ||||
|     for (let i of this.parent.items)  { | ||||
|       if (i.system?.enc) { | ||||
|         enc += i.system.enc | ||||
|       } | ||||
|       if ( i.system?.protection) { | ||||
|         armor += i.system.protection | ||||
|       } | ||||
|     } | ||||
|     if (enc !== this.enc.value) { | ||||
|       this.enc.value = enc | ||||
|     } | ||||
|     if (armor !== this.armor.value) { | ||||
|       this.armor.value = armor | ||||
|     } | ||||
|     let staminaMax = 14 + (3*this.skills.physical.value) | ||||
|     if (staminaMax !== this.health.staminaMax) { | ||||
|       this.health.staminaMax = staminaMax | ||||
|     } | ||||
|   } | ||||
|    | ||||
|   isEncumbered() { | ||||
|     return this.enc.value > this.enc.max | ||||
|   } | ||||
|  | ||||
|   /** */ | ||||
|   /** | ||||
|    * Rolls a dice for a character. | ||||
| @@ -84,12 +118,14 @@ export default class FTLNomadProtagonist extends foundry.abstract.TypeDataModel | ||||
|     let opponentTarget | ||||
|     const hasTarget = opponentTarget !== undefined | ||||
|  | ||||
|     let roll = await CthulhuEternalRoll.prompt({ | ||||
|     let roll = await FTLNomadRoll.prompt({ | ||||
|       rollType, | ||||
|       rollItem, | ||||
|       actorId: this.parent.id, | ||||
|       actorName: this.parent.name, | ||||
|       actorImage: this.parent.img, | ||||
|       talents: this.parent.items.filter(i => i.type === "talent" && i.system.isAdvantage), | ||||
|       isEncumbered: this.isEncumbered(), | ||||
|       hasTarget, | ||||
|       target: opponentTarget | ||||
|     }) | ||||
|   | ||||
| @@ -7,9 +7,11 @@ export default class FTLNomadCreature extends foundry.abstract.TypeDataModel { | ||||
|     const requiredInteger = { required: true, nullable: false, integer: true } | ||||
|     const schema = {} | ||||
|  | ||||
|     // Carac | ||||
|     const skillField = (label) => { | ||||
|       const schema = { | ||||
|         value: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0, max: 5 }), | ||||
|         label: new fields.StringField({ required: true, nullable: false, initial: label }), | ||||
|         enabled: new fields.BooleanField({ required: true, initial: true }), | ||||
|       } | ||||
|       return new fields.SchemaField(schema, { label }) | ||||
| @@ -42,32 +44,29 @@ export default class FTLNomadCreature extends foundry.abstract.TypeDataModel { | ||||
|   /** @override */ | ||||
|   static LOCALIZATION_PREFIXES = ["FTLNOMAD.Creature"] | ||||
|  | ||||
|     /** */ | ||||
|     /** | ||||
|      * Rolls a dice for a character. | ||||
|      * @param {("save"|"resource|damage")} rollType The type of the roll. | ||||
|      * @param {number} rollItem The target value for the roll. Which caracteristic or resource. If the roll is a damage roll, this is the id of the item. | ||||
|      * @returns {Promise<null>} - A promise that resolves to null if the roll is cancelled. | ||||
|      */ | ||||
|     async roll(rollType, rollItem) { | ||||
|       let opponentTarget | ||||
|       const hasTarget = opponentTarget !== undefined | ||||
|    | ||||
|       let roll = await CthulhuEternalRoll.prompt({ | ||||
|         rollType, | ||||
|         rollItem, | ||||
|         isLowWP: false, | ||||
|         isZeroWP: false, | ||||
|         isExhausted: false, | ||||
|         actorId: this.parent.id, | ||||
|         actorName: this.parent.name, | ||||
|         actorImage: this.parent.img, | ||||
|         hasTarget, | ||||
|         target: opponentTarget | ||||
|       }) | ||||
|       if (!roll) return null | ||||
|    | ||||
|       await roll.toMessage({}, { rollMode: roll.options.rollMode }) | ||||
|     } | ||||
|    | ||||
|   isEncumbered() { | ||||
|     return false | ||||
|   } | ||||
|  | ||||
|   async roll(rollType, rollItem) { | ||||
|     let opponentTarget | ||||
|     const hasTarget = opponentTarget !== undefined | ||||
|  | ||||
|     let roll = await FTLNomadRoll.prompt({ | ||||
|       rollType, | ||||
|       rollItem, | ||||
|       actorId: this.parent.id, | ||||
|       actorName: this.parent.name, | ||||
|       actorImage: this.parent.img, | ||||
|       traits: this.parent.items.filter(i => i.type === "creature-trait" && i.system.isAdvantage), | ||||
|       abilities: this.parent.items.filter(i => i.type === "creature-ability" && i.system.isAdvantage), | ||||
|       isEncumbered: this.isEncumbered(), | ||||
|       hasTarget, | ||||
|       target: opponentTarget | ||||
|     }) | ||||
|     if (!roll) return null | ||||
|  | ||||
|     await roll.toMessage({}, { rollMode: roll.options.rollMode }) | ||||
|   } | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -28,4 +28,8 @@ export default class FTLNomadStarship extends foundry.abstract.TypeDataModel { | ||||
|   /** @override */ | ||||
|   static LOCALIZATION_PREFIXES = ["FTLNOMAD.Starship"] | ||||
|  | ||||
|   isEncumbered() { | ||||
|     return false | ||||
|   } | ||||
|    | ||||
| } | ||||
|   | ||||
| @@ -8,7 +8,7 @@ export default class FTLNomadVehicle extends foundry.abstract.TypeDataModel { | ||||
|     const schema = {} | ||||
|  | ||||
|     schema.agility = new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) | ||||
|     schema.armor = new fields.StringField({ required: true, initial: "" }) | ||||
|     schema.armor = new fields.StringField({ required: true, initial: 0, min:0 }) | ||||
|     schema.cargo = new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 }) | ||||
|     schema.crew = new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 }) | ||||
|     schema.force = new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 }) | ||||
| @@ -28,4 +28,8 @@ export default class FTLNomadVehicle extends foundry.abstract.TypeDataModel { | ||||
|   /** @override */ | ||||
|   static LOCALIZATION_PREFIXES = ["FTLNOMAD.Vehicle"] | ||||
|  | ||||
|   isEncumbered() { | ||||
|     return false | ||||
|   } | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -39,11 +39,9 @@ | ||||
|         align-items: center; | ||||
|         input { | ||||
|           flex: none; | ||||
|           width: 2rem; | ||||
|           margin-left: 4px; | ||||
|         } | ||||
|         .damage-bonus { | ||||
|           font-size: calc(var(--font-size-standard) * 0.8); | ||||
|           width: 2.5rem; | ||||
|           margin-left: 2px; | ||||
|           margin-right: 4px; | ||||
|         } | ||||
|         .hp-separator { | ||||
|           font-size: calc(var(--font-size-standard) * 1.2); | ||||
| @@ -77,6 +75,19 @@ | ||||
|       flex-direction: column; | ||||
|       gap: 5px; | ||||
|  | ||||
|       .character-spec { | ||||
|         label { | ||||
|           max-width: 6rem; | ||||
|         } | ||||
|         .hero-armor { | ||||
|           display: grid; | ||||
|           grid-template-columns: repeat(2, 1fr); | ||||
|           gap: 4px; | ||||
|           input { | ||||
|             max-width: 3rem; | ||||
|           }  | ||||
|         } | ||||
|       } | ||||
|       .character-name { | ||||
|         display: flex; | ||||
|         input { | ||||
| @@ -85,87 +96,6 @@ | ||||
|           width: 400px; | ||||
|         } | ||||
|       } | ||||
|       .san { | ||||
|         align-content: flex-start; | ||||
|         input { | ||||
|           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 { | ||||
|           min-width: 1rem; | ||||
|           max-width: 1rem; | ||||
|         } | ||||
|         .label-short-field { | ||||
|           font-size: 0.9rem; | ||||
|           max-width: 3rem; | ||||
|           min-width: 3rem; | ||||
|           flex-grow: 1; | ||||
|         } | ||||
|         .label-recovery { | ||||
|           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 { | ||||
|           margin-left: 4px; | ||||
|         } | ||||
|         .d100 { | ||||
|           flex: 0; | ||||
|         } | ||||
|       } | ||||
|       .willpower { | ||||
|         input { | ||||
|           min-width: 2.4rem; | ||||
|           max-width: 2.4rem; | ||||
|         } | ||||
|         input[type="checkbox"] { | ||||
|           min-width: 1rem; | ||||
|           max-width: 1rem; | ||||
|         } | ||||
|         .label-field { | ||||
|           flex-grow: 1; | ||||
|           margin-left: 4px; | ||||
|           max-width: 5rem; | ||||
|           min-width: 5rem; | ||||
|           font-size: 0.9rem; | ||||
|         } | ||||
|         .checkbox { | ||||
|           flex-grow: 0; | ||||
|           min-width: 1rem; | ||||
|           max-width: 1rem; | ||||
|         } | ||||
|       } | ||||
|       label { | ||||
|         min-width: 120px; | ||||
|       } | ||||
| @@ -180,24 +110,29 @@ | ||||
|     min-width: 650px; | ||||
|   } | ||||
|  | ||||
|   .character-characteristics { | ||||
|   .character-skills { | ||||
|     background-color: var(--color-light-1); | ||||
|     display: flex; | ||||
|     flex-direction: column; | ||||
|     gap: 5px; | ||||
|     flex: 1; | ||||
|  | ||||
|     .character-characteristic { | ||||
|     .character-skill { | ||||
|       display: flex; | ||||
|       align-items: center; | ||||
|       .icon-skill { | ||||
|         width: 24px; | ||||
|         height: 24px; | ||||
|         margin-right: 4px; | ||||
|       } | ||||
|       .rollable:hover, | ||||
|       .rollable:focus { | ||||
|         text-shadow: 0 0 8px var(--color-shadow-primary); | ||||
|         cursor: pointer; | ||||
|       } | ||||
|       .rollable { | ||||
|         min-width: 3rem; | ||||
|         max-width: 3rem; | ||||
|         min-width: 4.5rem; | ||||
|         max-width: 4.5rem; | ||||
|       } | ||||
|       .char-text { | ||||
|         margin-left: 0.5rem; | ||||
| @@ -218,11 +153,11 @@ | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   .character-characteristic-play { | ||||
|   .character-skill-play { | ||||
|     min-width: 225px; | ||||
|   } | ||||
|  | ||||
|   .character-characteristic-edit { | ||||
|   .character-skill-edit { | ||||
|     min-width: 400px; | ||||
|   } | ||||
| } | ||||
| @@ -239,12 +174,24 @@ | ||||
|     margin-left: 8px; | ||||
|   } | ||||
|  | ||||
|   .adapted { | ||||
|   .rank { | ||||
|     display: grid; | ||||
|     grid-template-columns: repeat(5, 1fr); | ||||
|     gap: 8px; | ||||
|     label { | ||||
|       min-width: 6rem; | ||||
|     } | ||||
|     input { | ||||
|       max-width: 4rem; | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   .biodata { | ||||
|     display: grid; | ||||
|     grid-template-columns: repeat(2, 1fr); | ||||
|     gap: 8px; | ||||
|     label { | ||||
|       min-width: 20rem; | ||||
|       min-width: 12rem; | ||||
|     } | ||||
|   } | ||||
|  | ||||
| @@ -455,6 +402,127 @@ | ||||
|   } | ||||
| } | ||||
|  | ||||
| .tab.character-talents { | ||||
|   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; | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   .talents { | ||||
|     display: grid; | ||||
|     grid-template-columns: repeat(2, 1fr); | ||||
|     gap: 4px; | ||||
|     .talent { | ||||
|       display: flex; | ||||
|       align-items: center; | ||||
|       gap: 4px; | ||||
|       min-width: 13rem; | ||||
|       max-width: 13rem; | ||||
|       .rollable:hover, | ||||
|       .rollable:focus { | ||||
|         text-shadow: 0 0 8px var(--color-shadow-primary); | ||||
|         cursor: pointer; | ||||
|       } | ||||
|       .controls { | ||||
|         font-size: 0.7rem; | ||||
|         min-width: 1.8rem; | ||||
|         max-width: 1.8rem; | ||||
|       } | ||||
|       .damage { | ||||
|         min-width: 6rem; | ||||
|         max-width: 6rem; | ||||
|       } | ||||
|       .name { | ||||
|         min-width: 10rem; | ||||
|         max-width: 10rem; | ||||
|       } | ||||
|       .item-img { | ||||
|         width: 24px; | ||||
|         height: 24px; | ||||
|         margin: 4px 0 0 0; | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   .languages { | ||||
|     display: grid; | ||||
|     grid-template-columns: repeat(2, 1fr); | ||||
|     gap: 4px; | ||||
|     .language { | ||||
|       display: flex; | ||||
|       align-items: center; | ||||
|       gap: 4px; | ||||
|       min-width: 13rem; | ||||
|       max-width: 13rem; | ||||
|       .rollable:hover, | ||||
|       .rollable:focus { | ||||
|         text-shadow: 0 0 8px var(--color-shadow-primary); | ||||
|         cursor: pointer; | ||||
|       } | ||||
|       .controls { | ||||
|         font-size: 0.7rem; | ||||
|         min-width: 1.8rem; | ||||
|         max-width: 1.8rem; | ||||
|       } | ||||
|       .damage { | ||||
|         min-width: 6rem; | ||||
|         max-width: 6rem; | ||||
|       } | ||||
|       .name { | ||||
|         min-width: 10rem; | ||||
|         max-width: 10rem; | ||||
|       } | ||||
|       .item-img { | ||||
|         width: 24px; | ||||
|         height: 24px; | ||||
|         margin: 4px 0 0 0; | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   .psionics { | ||||
|     display: grid; | ||||
|     grid-template-columns: repeat(2, 1fr); | ||||
|     gap: 4px; | ||||
|     .psionic { | ||||
|       display: flex; | ||||
|       align-items: center; | ||||
|       gap: 4px; | ||||
|       min-width: 13rem; | ||||
|       max-width: 13rem; | ||||
|       .rollable:hover, | ||||
|       .rollable:focus { | ||||
|         text-shadow: 0 0 8px var(--color-shadow-primary); | ||||
|         cursor: pointer; | ||||
|       } | ||||
|       .controls { | ||||
|         font-size: 0.7rem; | ||||
|         min-width: 1.8rem; | ||||
|         max-width: 1.8rem; | ||||
|       } | ||||
|       .damage { | ||||
|         min-width: 6rem; | ||||
|         max-width: 6rem; | ||||
|       } | ||||
|       .name { | ||||
|         min-width: 10rem; | ||||
|         max-width: 10rem; | ||||
|       } | ||||
|       .item-img { | ||||
|         width: 24px; | ||||
|         height: 24px; | ||||
|         margin: 4px 0 0 0; | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|  | ||||
| } | ||||
|  | ||||
| .tab.character-equipment { | ||||
|   background-color: var(--color-light-1); | ||||
|   display: grid; | ||||
| @@ -465,6 +533,56 @@ | ||||
|       padding-left: 5px; | ||||
|     } | ||||
|   } | ||||
|   .encumbrance { | ||||
|     display: grid; | ||||
|     grid-template-columns: repeat(4, 1fr); | ||||
|     gap: 4px; | ||||
|     input { | ||||
|       max-width: 4rem; | ||||
|     } | ||||
|     .encumbered { | ||||
|       color: red; | ||||
|       font-weight: bold; | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   .implants { | ||||
|     display: grid; | ||||
|     grid-template-columns: repeat(2, 1fr); | ||||
|     gap: 4px; | ||||
|     .implant { | ||||
|       display: flex; | ||||
|       align-items: center; | ||||
|       gap: 4px; | ||||
|       min-width: 13rem; | ||||
|       max-width: 13rem; | ||||
|       .rollable:hover, | ||||
|       .rollable:focus { | ||||
|         text-shadow: 0 0 8px var(--color-shadow-primary); | ||||
|         cursor: pointer; | ||||
|       } | ||||
|       .controls { | ||||
|         font-size: 0.7rem; | ||||
|         min-width: 1.8rem; | ||||
|         max-width: 1.8rem; | ||||
|       } | ||||
|       .damage { | ||||
|         min-width: 6rem; | ||||
|         max-width: 6rem; | ||||
|       } | ||||
|       .name { | ||||
|         min-width: 10rem; | ||||
|         max-width: 10rem; | ||||
|       } | ||||
|       .item-img { | ||||
|         width: 24px; | ||||
|         height: 24px; | ||||
|         margin: 4px 0 0 0; | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|  | ||||
|    | ||||
|   .weapons { | ||||
|     display: grid; | ||||
|     grid-template-columns: repeat(2, 1fr); | ||||
| @@ -500,9 +618,10 @@ | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|    | ||||
|   .armors { | ||||
|     display: grid; | ||||
|     grid-template-columns: repeat(3, 1fr); | ||||
|     grid-template-columns: repeat(2, 1fr); | ||||
|     gap: 4px; | ||||
|     .armor { | ||||
|       display: flex; | ||||
| @@ -510,23 +629,18 @@ | ||||
|       gap: 4px; | ||||
|       min-width: 13rem; | ||||
|       max-width: 13rem; | ||||
|       .rollable:hover, | ||||
|       .rollable:focus { | ||||
|         text-shadow: 0 0 8px var(--color-shadow-primary); | ||||
|         cursor: pointer; | ||||
|       } | ||||
|       .controls { | ||||
|         font-size: 0.7rem; | ||||
|         min-width: 1.8rem; | ||||
|         max-width: 1.8rem; | ||||
|       } | ||||
|       .protection { | ||||
|         min-width: 5rem; | ||||
|         max-width: 5rem; | ||||
|         min-width: 6rem; | ||||
|         max-width: 6rem; | ||||
|       } | ||||
|       .name { | ||||
|         min-width: 8rem; | ||||
|         max-width: 8rem; | ||||
|         min-width: 10rem; | ||||
|         max-width: 10rem; | ||||
|       } | ||||
|       .item-img { | ||||
|         width: 24px; | ||||
| @@ -536,11 +650,11 @@ | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   .gears { | ||||
|   .equipments { | ||||
|     display: grid; | ||||
|     grid-template-columns: repeat(3, 1fr); | ||||
|     gap: 4px; | ||||
|     .gear { | ||||
|     .equipment { | ||||
|       display: flex; | ||||
|       align-items: center; | ||||
|       gap: 4px; | ||||
| @@ -568,70 +682,6 @@ | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   .rituals { | ||||
|     display: grid; | ||||
|     grid-template-columns: repeat(2, 1fr); | ||||
|     gap: 4px; | ||||
|     .ritual { | ||||
|       display: flex; | ||||
|       align-items: center; | ||||
|       gap: 4px; | ||||
|       min-width: 20rem; | ||||
|       max-width: 20rem; | ||||
|       .rollable:hover, | ||||
|       .rollable:focus { | ||||
|         text-shadow: 0 0 8px var(--color-shadow-primary); | ||||
|         cursor: pointer; | ||||
|       } | ||||
|       .controls { | ||||
|         font-size: 0.7rem; | ||||
|         min-width: 1.8rem; | ||||
|         max-width: 1.8rem; | ||||
|       } | ||||
|       .name { | ||||
|         min-width: 17rem; | ||||
|         max-width: 17rem; | ||||
|       } | ||||
|       .item-img { | ||||
|         width: 24px; | ||||
|         height: 24px; | ||||
|         margin: 4px 0 0 0; | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   .tomes { | ||||
|     display: grid; | ||||
|     grid-template-columns: repeat(2, 1fr); | ||||
|     gap: 4px; | ||||
|     .tome { | ||||
|       display: flex; | ||||
|       align-items: center; | ||||
|       gap: 4px; | ||||
|       min-width: 20rem; | ||||
|       max-width: 20rem; | ||||
|       .rollable:hover, | ||||
|       .rollable:focus { | ||||
|         text-shadow: 0 0 8px var(--color-shadow-primary); | ||||
|         cursor: pointer; | ||||
|       } | ||||
|       .controls { | ||||
|         font-size: 0.7rem; | ||||
|         min-width: 1.8rem; | ||||
|         max-width: 1.8rem; | ||||
|       } | ||||
|       .name { | ||||
|         min-width: 17rem; | ||||
|         max-width: 17rem; | ||||
|       } | ||||
|       .item-img { | ||||
|         width: 24px; | ||||
|         height: 24px; | ||||
|         margin: 4px 0 0 0; | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   prose-mirror.inactive { | ||||
|     min-height: 40px; | ||||
|   } | ||||
|   | ||||
| @@ -39,11 +39,9 @@ | ||||
|         align-items: center; | ||||
|         input { | ||||
|           flex: none; | ||||
|           width: 2rem; | ||||
|           margin-left: 4px; | ||||
|         } | ||||
|         .damage-bonus { | ||||
|           font-size: calc(var(--font-size-standard) * 0.8); | ||||
|           width: 2.5rem; | ||||
|           margin-left: 2px; | ||||
|           margin-right: 4px; | ||||
|         } | ||||
|         .hp-separator { | ||||
|           font-size: calc(var(--font-size-standard) * 1.2); | ||||
| @@ -77,6 +75,28 @@ | ||||
|       flex-direction: column; | ||||
|       gap: 5px; | ||||
|  | ||||
|       .creature-spec { | ||||
|         label { | ||||
|           max-width: 8rem; | ||||
|         } | ||||
|         select { | ||||
|           max-width: 10rem; | ||||
|         } | ||||
|         input { | ||||
|           max-width: 6rem; | ||||
|         } | ||||
|         .dice-2d6 { | ||||
|           max-width: 1.5rem; | ||||
|         } | ||||
|         .rollable:hover, | ||||
|         .rollable:focus { | ||||
|           text-shadow: 0 0 8px var(--color-shadow-primary); | ||||
|           cursor: pointer; | ||||
|         } | ||||
|         .rollable { | ||||
|         }   | ||||
|       } | ||||
|  | ||||
|       .creature-name { | ||||
|         display: flex; | ||||
|         input { | ||||
| @@ -85,87 +105,6 @@ | ||||
|           width: 400px; | ||||
|         } | ||||
|       } | ||||
|       .san { | ||||
|         align-content: flex-start; | ||||
|         input { | ||||
|           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 { | ||||
|           min-width: 1rem; | ||||
|           max-width: 1rem; | ||||
|         } | ||||
|         .label-short-field { | ||||
|           font-size: 0.9rem; | ||||
|           max-width: 3rem; | ||||
|           min-width: 3rem; | ||||
|           flex-grow: 1; | ||||
|         } | ||||
|         .label-recovery { | ||||
|           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 { | ||||
|           margin-left: 4px; | ||||
|         } | ||||
|         .d100 { | ||||
|           flex: 0; | ||||
|         } | ||||
|       } | ||||
|       .willpower { | ||||
|         input { | ||||
|           min-width: 2.4rem; | ||||
|           max-width: 2.4rem; | ||||
|         } | ||||
|         input[type="checkbox"] { | ||||
|           min-width: 1rem; | ||||
|           max-width: 1rem; | ||||
|         } | ||||
|         .label-field { | ||||
|           flex-grow: 1; | ||||
|           margin-left: 4px; | ||||
|           max-width: 5rem; | ||||
|           min-width: 5rem; | ||||
|           font-size: 0.9rem; | ||||
|         } | ||||
|         .checkbox { | ||||
|           flex-grow: 0; | ||||
|           min-width: 1rem; | ||||
|           max-width: 1rem; | ||||
|         } | ||||
|       } | ||||
|       label { | ||||
|         min-width: 120px; | ||||
|       } | ||||
| @@ -180,24 +119,29 @@ | ||||
|     min-width: 650px; | ||||
|   } | ||||
|  | ||||
|   .creature-characteristics { | ||||
|   .creature-skills { | ||||
|     background-color: var(--color-light-1); | ||||
|     display: flex; | ||||
|     flex-direction: column; | ||||
|     gap: 5px; | ||||
|     flex: 1; | ||||
|  | ||||
|     .creature-characteristic { | ||||
|     .creature-skill { | ||||
|       display: flex; | ||||
|       align-items: center; | ||||
|       .icon-skill { | ||||
|         width: 24px; | ||||
|         height: 24px; | ||||
|         margin-right: 4px; | ||||
|       } | ||||
|       .rollable:hover, | ||||
|       .rollable:focus { | ||||
|         text-shadow: 0 0 8px var(--color-shadow-primary); | ||||
|         cursor: pointer; | ||||
|       } | ||||
|       .rollable { | ||||
|         min-width: 3rem; | ||||
|         max-width: 3rem; | ||||
|         min-width: 4.5rem; | ||||
|         max-width: 4.5rem; | ||||
|       } | ||||
|       .char-text { | ||||
|         margin-left: 0.5rem; | ||||
| @@ -218,11 +162,11 @@ | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   .creature-characteristic-play { | ||||
|   .creature-skill-play { | ||||
|     min-width: 225px; | ||||
|   } | ||||
|  | ||||
|   .creature-characteristic-edit { | ||||
|   .creature-skill-edit { | ||||
|     min-width: 400px; | ||||
|   } | ||||
| } | ||||
| @@ -239,12 +183,24 @@ | ||||
|     margin-left: 8px; | ||||
|   } | ||||
|  | ||||
|   .adapted { | ||||
|   .rank { | ||||
|     display: grid; | ||||
|     grid-template-columns: repeat(5, 1fr); | ||||
|     gap: 8px; | ||||
|     label { | ||||
|       min-width: 6rem; | ||||
|     } | ||||
|     input { | ||||
|       max-width: 4rem; | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   .biodata { | ||||
|     display: grid; | ||||
|     grid-template-columns: repeat(2, 1fr); | ||||
|     gap: 8px; | ||||
|     label { | ||||
|       min-width: 20rem; | ||||
|       min-width: 12rem; | ||||
|     } | ||||
|   } | ||||
|  | ||||
| @@ -285,79 +241,6 @@ | ||||
|       padding-left: 5px; | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   .armors { | ||||
|     display: grid; | ||||
|     grid-template-columns: repeat(3, 1fr); | ||||
|     gap: 4px; | ||||
|     .armor { | ||||
|       display: flex; | ||||
|       align-items: center; | ||||
|       gap: 4px; | ||||
|       min-width: 13rem; | ||||
|       max-width: 13rem; | ||||
|       .rollable:hover, | ||||
|       .rollable:focus { | ||||
|         text-shadow: 0 0 8px var(--color-shadow-primary); | ||||
|         cursor: pointer; | ||||
|       } | ||||
|       .controls { | ||||
|         font-size: 0.7rem; | ||||
|         min-width: 1.8rem; | ||||
|         max-width: 1.8rem; | ||||
|       } | ||||
|       .protection { | ||||
|         min-width: 5rem; | ||||
|         max-width: 5rem; | ||||
|       } | ||||
|       .name { | ||||
|         min-width: 8rem; | ||||
|         max-width: 8rem; | ||||
|       } | ||||
|       .item-img { | ||||
|         width: 24px; | ||||
|         height: 24px; | ||||
|         margin: 4px 0 0 0; | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   .weapons { | ||||
|     display: grid; | ||||
|     grid-template-columns: repeat(2, 1fr); | ||||
|     gap: 4px; | ||||
|     .weapon { | ||||
|       display: flex; | ||||
|       align-items: center; | ||||
|       gap: 4px; | ||||
|       min-width: 13rem; | ||||
|       max-width: 13rem; | ||||
|       .rollable:hover, | ||||
|       .rollable:focus { | ||||
|         text-shadow: 0 0 8px var(--color-shadow-primary); | ||||
|         cursor: pointer; | ||||
|       } | ||||
|       .controls { | ||||
|         font-size: 0.7rem; | ||||
|         min-width: 1.8rem; | ||||
|         max-width: 1.8rem; | ||||
|       } | ||||
|       .damage { | ||||
|         min-width: 6rem; | ||||
|         max-width: 6rem; | ||||
|       } | ||||
|       .name { | ||||
|         min-width: 10rem; | ||||
|         max-width: 10rem; | ||||
|       } | ||||
|       .item-img { | ||||
|         width: 24px; | ||||
|         height: 24px; | ||||
|         margin: 4px 0 0 0; | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   .skills { | ||||
|     display: grid; | ||||
|     grid-template-columns: repeat(3, 1fr); | ||||
| @@ -528,7 +411,7 @@ | ||||
|   } | ||||
| } | ||||
|  | ||||
| .tab.creature-equipment { | ||||
| .tab.creature-traits { | ||||
|   background-color: var(--color-light-1); | ||||
|   display: grid; | ||||
|   grid-template-columns: 1fr; | ||||
| @@ -539,11 +422,248 @@ | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   .gears { | ||||
|   .traits { | ||||
|     display: grid; | ||||
|     grid-template-columns: repeat(2, 1fr); | ||||
|     gap: 4px; | ||||
|     .trait { | ||||
|       display: flex; | ||||
|       align-items: center; | ||||
|       gap: 4px; | ||||
|       min-width: 13rem; | ||||
|       max-width: 13rem; | ||||
|       .rollable:hover, | ||||
|       .rollable:focus { | ||||
|         text-shadow: 0 0 8px var(--color-shadow-primary); | ||||
|         cursor: pointer; | ||||
|       } | ||||
|       .controls { | ||||
|         font-size: 0.7rem; | ||||
|         min-width: 1.8rem; | ||||
|         max-width: 1.8rem; | ||||
|       } | ||||
|       .damage { | ||||
|         min-width: 6rem; | ||||
|         max-width: 6rem; | ||||
|       } | ||||
|       .name { | ||||
|         min-width: 10rem; | ||||
|         max-width: 10rem; | ||||
|       } | ||||
|       .item-img { | ||||
|         width: 24px; | ||||
|         height: 24px; | ||||
|         margin: 4px 0 0 0; | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   .abilities { | ||||
|     display: grid; | ||||
|     grid-template-columns: repeat(2, 1fr); | ||||
|     gap: 4px; | ||||
|     .ability { | ||||
|       display: flex; | ||||
|       align-items: center; | ||||
|       gap: 4px; | ||||
|       min-width: 13rem; | ||||
|       max-width: 13rem; | ||||
|       .rollable:hover, | ||||
|       .rollable:focus { | ||||
|         text-shadow: 0 0 8px var(--color-shadow-primary); | ||||
|         cursor: pointer; | ||||
|       } | ||||
|       .controls { | ||||
|         font-size: 0.7rem; | ||||
|         min-width: 1.8rem; | ||||
|         max-width: 1.8rem; | ||||
|       } | ||||
|       .damage { | ||||
|         min-width: 6rem; | ||||
|         max-width: 6rem; | ||||
|       } | ||||
|       .name { | ||||
|         min-width: 10rem; | ||||
|         max-width: 10rem; | ||||
|       } | ||||
|       .item-img { | ||||
|         width: 24px; | ||||
|         height: 24px; | ||||
|         margin: 4px 0 0 0; | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   .psionics { | ||||
|     display: grid; | ||||
|     grid-template-columns: repeat(2, 1fr); | ||||
|     gap: 4px; | ||||
|     .psionic { | ||||
|       display: flex; | ||||
|       align-items: center; | ||||
|       gap: 4px; | ||||
|       min-width: 13rem; | ||||
|       max-width: 13rem; | ||||
|       .rollable:hover, | ||||
|       .rollable:focus { | ||||
|         text-shadow: 0 0 8px var(--color-shadow-primary); | ||||
|         cursor: pointer; | ||||
|       } | ||||
|       .controls { | ||||
|         font-size: 0.7rem; | ||||
|         min-width: 1.8rem; | ||||
|         max-width: 1.8rem; | ||||
|       } | ||||
|       .damage { | ||||
|         min-width: 6rem; | ||||
|         max-width: 6rem; | ||||
|       } | ||||
|       .name { | ||||
|         min-width: 10rem; | ||||
|         max-width: 10rem; | ||||
|       } | ||||
|       .item-img { | ||||
|         width: 24px; | ||||
|         height: 24px; | ||||
|         margin: 4px 0 0 0; | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|  | ||||
| } | ||||
|  | ||||
| .tab.creature-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; | ||||
|     } | ||||
|   } | ||||
|   .encumbrance { | ||||
|     display: grid; | ||||
|     grid-template-columns: repeat(4, 1fr); | ||||
|     gap: 4px; | ||||
|     input { | ||||
|       max-width: 4rem; | ||||
|     } | ||||
|     .encumbered { | ||||
|       color: red; | ||||
|       font-weight: bold; | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   .implants { | ||||
|     display: grid; | ||||
|     grid-template-columns: repeat(2, 1fr); | ||||
|     gap: 4px; | ||||
|     .implant { | ||||
|       display: flex; | ||||
|       align-items: center; | ||||
|       gap: 4px; | ||||
|       min-width: 13rem; | ||||
|       max-width: 13rem; | ||||
|       .rollable:hover, | ||||
|       .rollable:focus { | ||||
|         text-shadow: 0 0 8px var(--color-shadow-primary); | ||||
|         cursor: pointer; | ||||
|       } | ||||
|       .controls { | ||||
|         font-size: 0.7rem; | ||||
|         min-width: 1.8rem; | ||||
|         max-width: 1.8rem; | ||||
|       } | ||||
|       .damage { | ||||
|         min-width: 6rem; | ||||
|         max-width: 6rem; | ||||
|       } | ||||
|       .name { | ||||
|         min-width: 10rem; | ||||
|         max-width: 10rem; | ||||
|       } | ||||
|       .item-img { | ||||
|         width: 24px; | ||||
|         height: 24px; | ||||
|         margin: 4px 0 0 0; | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|  | ||||
|    | ||||
|   .weapons { | ||||
|     display: grid; | ||||
|     grid-template-columns: repeat(2, 1fr); | ||||
|     gap: 4px; | ||||
|     .weapon { | ||||
|       display: flex; | ||||
|       align-items: center; | ||||
|       gap: 4px; | ||||
|       min-width: 13rem; | ||||
|       max-width: 13rem; | ||||
|       .rollable:hover, | ||||
|       .rollable:focus { | ||||
|         text-shadow: 0 0 8px var(--color-shadow-primary); | ||||
|         cursor: pointer; | ||||
|       } | ||||
|       .controls { | ||||
|         font-size: 0.7rem; | ||||
|         min-width: 1.8rem; | ||||
|         max-width: 1.8rem; | ||||
|       } | ||||
|       .damage { | ||||
|         min-width: 6rem; | ||||
|         max-width: 6rem; | ||||
|       } | ||||
|       .name { | ||||
|         min-width: 10rem; | ||||
|         max-width: 10rem; | ||||
|       } | ||||
|       .item-img { | ||||
|         width: 24px; | ||||
|         height: 24px; | ||||
|         margin: 4px 0 0 0; | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|    | ||||
|   .armors { | ||||
|     display: grid; | ||||
|     grid-template-columns: repeat(2, 1fr); | ||||
|     gap: 4px; | ||||
|     .armor { | ||||
|       display: flex; | ||||
|       align-items: center; | ||||
|       gap: 4px; | ||||
|       min-width: 13rem; | ||||
|       max-width: 13rem; | ||||
|       .controls { | ||||
|         font-size: 0.7rem; | ||||
|         min-width: 1.8rem; | ||||
|         max-width: 1.8rem; | ||||
|       } | ||||
|       .protection { | ||||
|         min-width: 6rem; | ||||
|         max-width: 6rem; | ||||
|       } | ||||
|       .name { | ||||
|         min-width: 10rem; | ||||
|         max-width: 10rem; | ||||
|       } | ||||
|       .item-img { | ||||
|         width: 24px; | ||||
|         height: 24px; | ||||
|         margin: 4px 0 0 0; | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   .equipments { | ||||
|     display: grid; | ||||
|     grid-template-columns: repeat(3, 1fr); | ||||
|     gap: 4px; | ||||
|     .gear { | ||||
|     .equipment { | ||||
|       display: flex; | ||||
|       align-items: center; | ||||
|       gap: 4px; | ||||
| @@ -571,70 +691,6 @@ | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   .rituals { | ||||
|     display: grid; | ||||
|     grid-template-columns: repeat(2, 1fr); | ||||
|     gap: 4px; | ||||
|     .ritual { | ||||
|       display: flex; | ||||
|       align-items: center; | ||||
|       gap: 4px; | ||||
|       min-width: 20rem; | ||||
|       max-width: 20rem; | ||||
|       .rollable:hover, | ||||
|       .rollable:focus { | ||||
|         text-shadow: 0 0 8px var(--color-shadow-primary); | ||||
|         cursor: pointer; | ||||
|       } | ||||
|       .controls { | ||||
|         font-size: 0.7rem; | ||||
|         min-width: 1.8rem; | ||||
|         max-width: 1.8rem; | ||||
|       } | ||||
|       .name { | ||||
|         min-width: 17rem; | ||||
|         max-width: 17rem; | ||||
|       } | ||||
|       .item-img { | ||||
|         width: 24px; | ||||
|         height: 24px; | ||||
|         margin: 4px 0 0 0; | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   .tomes { | ||||
|     display: grid; | ||||
|     grid-template-columns: repeat(2, 1fr); | ||||
|     gap: 4px; | ||||
|     .tome { | ||||
|       display: flex; | ||||
|       align-items: center; | ||||
|       gap: 4px; | ||||
|       min-width: 20rem; | ||||
|       max-width: 20rem; | ||||
|       .rollable:hover, | ||||
|       .rollable:focus { | ||||
|         text-shadow: 0 0 8px var(--color-shadow-primary); | ||||
|         cursor: pointer; | ||||
|       } | ||||
|       .controls { | ||||
|         font-size: 0.7rem; | ||||
|         min-width: 1.8rem; | ||||
|         max-width: 1.8rem; | ||||
|       } | ||||
|       .name { | ||||
|         min-width: 17rem; | ||||
|         max-width: 17rem; | ||||
|       } | ||||
|       .item-img { | ||||
|         width: 24px; | ||||
|         height: 24px; | ||||
|         margin: 4px 0 0 0; | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   prose-mirror.inactive { | ||||
|     min-height: 40px; | ||||
|   } | ||||
|   | ||||
| @@ -31,7 +31,7 @@ | ||||
|     border: none; | ||||
|     background-color: rgba(0, 0, 0, 0.1); | ||||
|     color: var(--color-dark-2); | ||||
|     width: 4rem; | ||||
|     width: 10rem; | ||||
|     text-align: center; | ||||
|   } | ||||
| } | ||||
|   | ||||
| @@ -34,6 +34,15 @@ | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .spec { | ||||
|         label { | ||||
|           max-width: 5rem; | ||||
|         } | ||||
|         input { | ||||
|           max-width: 3rem; | ||||
|         } | ||||
|       } | ||||
|  | ||||
|     } | ||||
|  | ||||
|     .starship-right { | ||||
| @@ -50,6 +59,42 @@ | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .capacity { | ||||
|         .dice-2d6 { | ||||
|           max-width: 1.5rem; | ||||
|           margin-left: 0.2rem; | ||||
|         } | ||||
|         .rollable:hover, | ||||
|         .rollable:focus { | ||||
|           text-shadow: 0 0 8px var(--color-shadow-primary); | ||||
|           cursor: pointer; | ||||
|         }   | ||||
|         label { | ||||
|           margin-left: 0.2rem; | ||||
|           max-width: 10rem; | ||||
|         } | ||||
|         input { | ||||
|           max-width: 4rem; | ||||
|         } | ||||
|         select { | ||||
|           max-width: 5rem; | ||||
|         } | ||||
|       } | ||||
|       .cargo { | ||||
|         label { | ||||
|           margin-left: 0.2rem; | ||||
|           max-width: 10rem; | ||||
|         } | ||||
|         input { | ||||
|           max-width: 4rem; | ||||
|         } | ||||
|         select { | ||||
|           max-width: 5rem; | ||||
|         } | ||||
|  | ||||
|       } | ||||
|  | ||||
|  | ||||
|       .starship-infos { | ||||
|         display: flex; | ||||
|         flex-direction: column; | ||||
| @@ -104,7 +149,7 @@ | ||||
|   } | ||||
| } | ||||
|  | ||||
| .starship-biography { | ||||
| .starship-description { | ||||
|   background-color: var(--color-light-1); | ||||
|   prose-mirror.inactive { | ||||
|     min-height: 40px; | ||||
|   | ||||
| @@ -50,6 +50,17 @@ | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .cargo, | ||||
|       .capacity { | ||||
|         label { | ||||
|           max-width: 5rem; | ||||
|         } | ||||
|         input { | ||||
|           max-width: 3.5rem; | ||||
|           margin-right: 0.5rem; | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .vehicle-infos { | ||||
|         display: flex; | ||||
|         flex-direction: column; | ||||
| @@ -104,7 +115,7 @@ | ||||
|   } | ||||
| } | ||||
|  | ||||
| .vehicle-biography { | ||||
| .vehicle-description { | ||||
|   background-color: var(--color-light-1); | ||||
|   prose-mirror.inactive { | ||||
|     min-height: 40px; | ||||
| @@ -179,11 +190,12 @@ | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|   .gears { | ||||
|    | ||||
|   .equipments { | ||||
|     display: grid; | ||||
|     grid-template-columns: repeat(3, 1fr); | ||||
|     gap: 4px; | ||||
|     .gear { | ||||
|     .equipment { | ||||
|       display: flex; | ||||
|       align-items: center; | ||||
|       gap: 4px; | ||||
|   | ||||
| @@ -6,7 +6,7 @@ | ||||
|   "download": "#{DOWNLOAD}#", | ||||
|   "url": "https://www.uberwald.me/gitea/public/fvtt-ftl-nomad", | ||||
|   "license": "LICENSE", | ||||
|   "version": "12.0.0", | ||||
|   "version": "12.0.1", | ||||
|   "authors": [ | ||||
|     { | ||||
|       "name": "Uberwald", | ||||
| @@ -59,5 +59,5 @@ | ||||
|   }, | ||||
|   "primaryTokenAttribute": "hp", | ||||
|   "socket": true, | ||||
|   "background": "systems/fvtt-ftl-nomad/assets/ui/background_01.webp" | ||||
|   "background": "systems/fvtt-ftl-nomad/assets/ui/ftl_nomad_background_01.webp" | ||||
| } | ||||
|   | ||||
| @@ -1,72 +1,26 @@ | ||||
| <section class="tab protagonist-{{tab.id}} {{tab.cssClass}}" data-tab="{{tab.id}}" data-group="{{tab.group}}"> | ||||
| <section class="tab character-{{tab.id}} {{tab.cssClass}}" data-tab="{{tab.id}}" data-group="{{tab.group}}"> | ||||
|  | ||||
|   <fieldset> | ||||
|     <legend>{{localize "FTLNOMAD.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 "FTLNOMAD.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 class="rank"> | ||||
|     <legend>Rank</legend> | ||||
|     {{formField systemFields.rank.fields.experienced value=system.rank.experienced type="number" rootId=partId disabled=isPlayMode}} | ||||
|     {{formField systemFields.rank.fields.expert value=system.rank.expert type="number" rootId=partId disabled=isPlayMode}} | ||||
|     {{formField systemFields.rank.fields.veteran value=system.rank.veteran type="number" rootId=partId disabled=isPlayMode}} | ||||
|     {{formField systemFields.rank.fields.elite value=system.rank.elite type="number" rootId=partId disabled=isPlayMode}} | ||||
|     {{formField systemFields.rank.fields.legend value=system.rank.legend type="number" rootId=partId disabled=isPlayMode}} | ||||
|   </fieldset> | ||||
|  | ||||
|   <fieldset> | ||||
|   <fieldset class="biodata"> | ||||
|     <legend>{{localize "FTLNOMAD.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"> | ||||
|       {{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.gender value=system.biodata.gender name="system.biodata.gender" 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.hair value=system.biodata.hair name="system.biodata.hair" 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"}} | ||||
|     </div> | ||||
|     {{formField systemFields.biodata.fields.gender value=system.biodata.gender rootId=partId disabled=isPlayMode classes="short"}} | ||||
|     {{formField systemFields.biodata.fields.age value=system.biodata.age rootId=partId disabled=isPlayMode classes="short"}} | ||||
|     {{formField systemFields.biodata.fields.height value=system.biodata.height rootId=partId disabled=isPlayMode classes="short"}} | ||||
|     {{formField systemFields.biodata.fields.weight value=system.biodata.weight rootId=partId disabled=isPlayMode classes="short"}} | ||||
|     {{formField systemFields.biodata.fields.eyes value=system.biodata.eyes rootId=partId disabled=isPlayMode classes="short"}} | ||||
|     {{formField systemFields.biodata.fields.hair value=system.biodata.hair rootId=partId disabled=isPlayMode classes="short"}} | ||||
|     {{formField systemFields.biodata.fields.home value=system.biodata.home rootId=partId disabled=isPlayMode}} | ||||
|     {{formField systemFields.biodata.fields.birthplace value=system.biodata.birthplace rootId=partId disabled=isPlayMode}} | ||||
|   </fieldset> | ||||
|  | ||||
|   <fieldset> | ||||
|     <legend>{{localize "FTLNOMAD.Label.distinguishingFeatures"}}</legend> | ||||
|     <div class="features"> | ||||
|       <div class="feature">  | ||||
|         <label>{{localize "FTLNOMAD.Label.strShort"}}</label> | ||||
|         {{formInput systemFields.characteristics.fields.str.fields.feature value=system.characteristics.str.feature localize=true}}  | ||||
|       </div> | ||||
|       <div class="feature">  | ||||
|         <label>{{localize "FTLNOMAD.Label.dexShort"}}</label> | ||||
|         {{formInput systemFields.characteristics.fields.dex.fields.feature value=system.characteristics.dex.feature localize=true}}  | ||||
|       </div> | ||||
|       <div class="feature">  | ||||
|         <label>{{localize "FTLNOMAD.Label.conShort"}}</label> | ||||
|         {{formInput systemFields.characteristics.fields.con.fields.feature value=system.characteristics.con.feature localize=true}}  | ||||
|       </div> | ||||
|       <div class="feature">  | ||||
|         <label>{{localize "FTLNOMAD.Label.intShort"}}</label> | ||||
|         {{formInput systemFields.characteristics.fields.int.fields.feature value=system.characteristics.int.feature localize=true}}  | ||||
|       </div> | ||||
|       <div class="feature">  | ||||
|         <label>{{localize "FTLNOMAD.Label.powShort"}}</label> | ||||
|         {{formInput systemFields.characteristics.fields.pow.fields.feature value=system.characteristics.pow.feature localize=true}}  | ||||
|       </div> | ||||
|       <div class="feature">  | ||||
|         <label>{{localize "FTLNOMAD.Label.chaShort"}}</label> | ||||
|         {{formInput systemFields.characteristics.fields.cha.fields.feature value=system.characteristics.cha.feature localize=true}}  | ||||
|       </div> | ||||
|     </div> | ||||
|   </fieldset>  | ||||
|  | ||||
|  | ||||
|   <fieldset> | ||||
|     <legend>{{localize "FTLNOMAD.Label.description"}}</legend> | ||||
|     {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} | ||||
| @@ -76,4 +30,5 @@ | ||||
|     <legend>{{localize "FTLNOMAD.Label.notes"}}</legend> | ||||
|     {{formInput systemFields.notes enriched=enrichedNotes value=system.notes name="system.notes" toggled=true}} | ||||
|   </fieldset> | ||||
|    | ||||
| </section> | ||||
| @@ -1,4 +1,14 @@ | ||||
| <section class="tab protagonist-{{tab.id}} {{tab.cssClass}}" data-tab="{{tab.id}}" data-group="{{tab.group}}"> | ||||
| <section class="tab character-{{tab.id}} {{tab.cssClass}}" data-tab="{{tab.id}}" data-group="{{tab.group}}"> | ||||
|  | ||||
|   <fieldset class="encumbrance"> | ||||
|     {{#if isEncumbered}} | ||||
|       {{formField systemFields.enc.fields.value value=system.enc.value rootId=partId disabled=true classes="encumbered"}} | ||||
|     {{else }} | ||||
|       {{formField systemFields.enc.fields.value value=system.enc.value rootId=partId disabled=true}}   | ||||
|     {{/if}} | ||||
|     {{formField systemFields.enc.fields.max value=system.enc.max rootId=partId disabled=isPlayMode}} | ||||
|     {{formField systemFields.credits value=system.credits rootId=partId }} | ||||
|   </fieldset> | ||||
|  | ||||
|   <fieldset> | ||||
|     <legend>{{localize "FTLNOMAD.Label.weapons"}}{{#if isEditMode}} | ||||
| @@ -7,16 +17,15 @@ | ||||
|     </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}}" /> | ||||
|         <img src="systems/fvtt-cthulhu-eternal/assets/ui/d100.svg" class="d100" /> | ||||
|         <i class="fa-regular fa-dice"></i> | ||||
|         <div class="name rollable" data-roll-type="weapon" data-tooltip="{{{item.system.description}}}"> | ||||
|           {{item.name}} | ||||
|         </div> | ||||
|  | ||||
|         <img src="systems/fvtt-cthulhu-eternal/assets/ui/d100.svg" class="d100" /> | ||||
|         <i class="fa-regular fa-dice"></i> | ||||
|         <a class="damage rollable" data-item-id="{{item.id}}" data-action="roll" data-roll-type="damage" | ||||
|           data-roll-value="{{item.system.damage}}"> | ||||
|           {{localize "FTLNOMAD.Label.damageShort"}} : | ||||
| @@ -39,8 +48,7 @@ | ||||
|     </legend> | ||||
|     <div class="armors"> | ||||
|       {{#each armors as |item|}} | ||||
|       {{!log 'armor' this}} | ||||
|       <div class="armor" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}"> | ||||
|       <div class="armor item" 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}} | ||||
| @@ -58,14 +66,48 @@ | ||||
|   </fieldset> | ||||
|  | ||||
|   <fieldset> | ||||
|     <legend>{{localize "FTLNOMAD.Label.gears"}}{{#if isEditMode}} | ||||
|     <legend>{{localize "FTLNOMAD.Label.implants"}}{{#if isEditMode}} | ||||
|       <a class="action" data-tooltip="{{localize " FTLNOMAD.Tooltip.addTalent"}}" data-tooltip-direction="UP"><i | ||||
|           class="fas fa-plus" data-action="createImplant"></i></a>{{/if}} | ||||
|     </legend> | ||||
|     <div class="implants"> | ||||
|       {{#each implants as |item|}} | ||||
|       {{!log 'weapon' this}} | ||||
|       <div class="implant 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}}" /> | ||||
|         <img src="systems/fvtt-cthulhu-eternal/assets/ui/d100.svg" class="d100" /> | ||||
|         <div class="name" data-roll-type="weapon" data-tooltip="{{{item.system.description}}}"> | ||||
|           {{item.name}} | ||||
|         </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}}"> | ||||
|           {{#if item.system.isAdvantage}} | ||||
|           <i data-tooltip="Provides advantage" class="fas fa-circle-chevron-up"></i> | ||||
|           {{else}} | ||||
|           {{/if}} | ||||
|         <div class="controls"> | ||||
|           <a data-tooltip="{{localize 'FTLNOMAD.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 'FTLNOMAD.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 "FTLNOMAD.Label.equipments"}}{{#if isEditMode}} | ||||
|       <a class="action" data-tooltip="{{localize " FTLNOMAD.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|}} | ||||
|     <div class="equipments"> | ||||
|       {{#each equipments as |item|}} | ||||
|       {{!log 'armor' this}} | ||||
|       <div class="gear" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}"> | ||||
|       <div class="equipment" 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}} | ||||
| @@ -81,55 +123,4 @@ | ||||
|     </div> | ||||
|   </fieldset> | ||||
|  | ||||
|   {{#if (count tomes)}} | ||||
|   <fieldset> | ||||
|     <legend>{{localize "FTLNOMAD.Label.Tomes"}}{{#if isEditMode}} | ||||
|       <a class="action" data-tooltip="{{localize "FTLNOMAD.Tooltip.addTome"}}" data-tooltip-direction="UP"><i | ||||
|           class="fas fa-plus" data-action="createTome"></i></a>{{/if}} | ||||
|     </legend> | ||||
|     <div class="tomes"> | ||||
|       {{#each tomes as |item|}} | ||||
|       <div class="tome" 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 'FTLNOMAD.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 'FTLNOMAD.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> | ||||
|   {{/if}} | ||||
|  | ||||
|   {{#if (count rituals)}} | ||||
|   <fieldset> | ||||
|     <legend>{{localize "FTLNOMAD.Label.Rituals"}}{{#if isEditMode}} | ||||
|       <a class="action" data-tooltip="{{localize "FTLNOMAD.Tooltip.addRitual"}}" data-tooltip-direction="UP"><i | ||||
|           class="fas fa-plus" data-action="createRitual"></i></a>{{/if}} | ||||
|     </legend> | ||||
|     <div class="rituals"> | ||||
|       {{#each rituals as |item|}} | ||||
|       <div class="ritual" 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 'FTLNOMAD.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 'FTLNOMAD.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> | ||||
|   {{/if}} | ||||
|  | ||||
|  | ||||
| </section> | ||||
| @@ -1,98 +1,40 @@ | ||||
| <section class="protagonist-main protagonist-main-{{ifThen isPlayMode 'play' 'edit'}}"> | ||||
|   {{!log "protagonist-main" this}} | ||||
|  | ||||
| <section class="character-main character-main-{{ifThen isPlayMode 'play' 'edit'}}"> | ||||
|   {{!log "character-main" this}} | ||||
|   <fieldset> | ||||
|     <legend>{{localize "FTLNOMAD.Label.protagonist"}}</legend> | ||||
|     <div class="protagonist-pc protagonist-pc-{{ifThen isPlayMode 'play' 'edit'}}"> | ||||
|       <div class="protagonist-left"> | ||||
|         <div class="protagonist-left-image"> | ||||
|           <img class="protagonist-img" src="{{actor.img}}" data-edit="img" data-action="editImage" | ||||
|     <legend>{{localize "FTLNOMAD.Label.character"}}</legend> | ||||
|     <div class="character-pc character-pc-{{ifThen isPlayMode 'play' 'edit'}}"> | ||||
|       <div class="character-left"> | ||||
|         <div class="character-left-image"> | ||||
|           <img class="character-img" src="{{actor.img}}" data-edit="img" data-action="editImage" | ||||
|             data-tooltip="{{actor.name}}" /> | ||||
|         </div> | ||||
|         <fieldset class="protagonist-hp">  | ||||
|           <legend>{{localize "FTLNOMAD.Label.HP"}}</legend> | ||||
|         <fieldset class="character-hp"> | ||||
|           <legend>{{localize "FTLNOMAD.Label.Stamina"}}</legend> | ||||
|           <div class="flexrow"> | ||||
|             {{formField systemFields.hp.fields.value value=system.hp.value}} | ||||
|             <span class="hp-separator">/</span> | ||||
|             {{formField systemFields.hp.fields.max value=system.hp.max rootId=partId disabled=true}} | ||||
|             {{formField systemFields.health.fields.staminaValue value=health.staminaValue}} | ||||
|             {{formField systemFields.health.fields.staminaMax value=system.health.staminaMax rootId=partId disabled=true}} | ||||
|           </div> | ||||
|           <div class="flexrow "> | ||||
|             {{formField systemFields.damageBonus value=system.damageBonus classes="damage-bonus"}} | ||||
|           <div class="flexrow"> | ||||
|             {{formField systemFields.health.fields.wounds value=system.health.wounds }} | ||||
|           </div> | ||||
|         </fieldset> | ||||
|  | ||||
|       </div> | ||||
|       <div class="protagonist-right"> | ||||
|         <div class="protagonist-name"> | ||||
|       <div class="character-right"> | ||||
|         <div class="character-name"> | ||||
|           {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} | ||||
|           <a class="control" data-action="toggleSheet" data-tooltip="FTLNOMAD.ToggleSheet" | ||||
|             data-tooltip-direction="UP"> | ||||
|           <a class="control" data-action="toggleSheet" data-tooltip="FTLNOMAD.ToggleSheet" data-tooltip-direction="UP"> | ||||
|             <i class="fa-solid fa-user-{{ifThen isPlayMode 'lock' 'pen'}}"></i> | ||||
|           </a> | ||||
|         </div> | ||||
|  | ||||
|  | ||||
|         <fieldset class="san"> | ||||
|           <legend>{{localize "FTLNOMAD.Label.SAN"}}</legend> | ||||
|           <div class="flexrow"> | ||||
|              | ||||
|             <label class="label-field rollable" data-roll-type="san" ><img src="systems/fvtt-cthulhu-eternal/assets/ui/d100.svg" class="d100" />  | ||||
|             {{localize "FTLNOMAD.Label.current"}}</label> | ||||
|             {{formInput systemFields.san.fields.value value=system.san.value}} | ||||
|              | ||||
|             <span class="label-field label-recovery">{{localize "FTLNOMAD.Label.recovery"}}</span>  | ||||
|             {{formInput systemFields.san.fields.recovery value=system.san.recovery disabled=true}} | ||||
|  | ||||
|             <span class="label-bp" data-tooltip='{{localize "FTLNOMAD.Tooltip.sanBPShort"}}'>{{localize | ||||
|               "FTLNOMAD.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 "FTLNOMAD.Label.max"}}</span>  | ||||
|               {{formInput systemFields.san.fields.max value=system.san.max rootId=partId disabled=true}} | ||||
|             </div> | ||||
|  | ||||
|             <span class="label-insanity" > | ||||
|               {{localize "FTLNOMAD.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 "FTLNOMAD.Tooltip.setBP"}}">{{localize "FTLNOMAD.Label.setBP"}}</button> | ||||
|             {{/if}} | ||||
|  | ||||
|           </div> | ||||
|           <div class="flexrow"> | ||||
|  | ||||
|             <span class="label-field">{{localize "FTLNOMAD.Label.violence"}}</span> | ||||
|             {{#each system.san.violence as |violence idx|}} | ||||
|             <input class="san-checkbox" type="checkbox" data-action="updateCheckboxArray" data-index="{{@index}}" | ||||
|               data-name="violence" {{#if violence}} checked {{/if}}> | ||||
|             {{/each}} | ||||
|              | ||||
|             <span class="label-field">{{localize "FTLNOMAD.Label.helplessness"}}</span> | ||||
|             {{#each system.san.helplessness as |helplessness idx|}} | ||||
|             <input class="san-checkbox" type="checkbox" data-action="updateCheckboxArray" data-index="{{@index}}" | ||||
|               data-name="helplessness" {{#if helplessness}} checked {{/if}}> | ||||
|             {{/each}} | ||||
|  | ||||
|           </div> | ||||
|  | ||||
|         </fieldset> | ||||
|  | ||||
|         <fieldset class="willpower"> | ||||
|           <legend>{{localize "FTLNOMAD.Label.willpower"}}</legend> | ||||
|           <div class="flexrow"> | ||||
|             <label class="label-field">{{localize "FTLNOMAD.Label.current"}}</label> | ||||
|             {{formInput systemFields.wp.fields.value value=system.wp.value}} | ||||
|             <label class="label-field">{{localize "FTLNOMAD.Label.max"}}</label> | ||||
|             {{formInput systemFields.wp.fields.max value=system.wp.max rootId=partId disabled=true}} | ||||
|             <label class="label-field">{{localize "FTLNOMAD.Label.exhausted"}}</label> | ||||
|             {{formInput systemFields.wp.fields.exhausted value=system.wp.exhausted classes="checkbox"}} | ||||
|         <fieldset class="character-spec"> | ||||
|           {{formField systemFields.concept value=system.concept rootId=partId disabled=isPlayMode}} | ||||
|           {{formField systemFields.species value=system.species rootId=partId disabled=isPlayMode}} | ||||
|           {{formField systemFields.archetype value=system.archetype rootId=partId disabled=isPlayMode}} | ||||
|           <div class="hero-armor">           | ||||
|             {{formField systemFields.heroPoints value=system.heroPoints rootId=partId disabled=isPlayMode}} | ||||
|             {{formField systemFields.armor.fields.value value=system.armor.value rootId=partId disabled=isPlayMode}} | ||||
|           </div> | ||||
|         </fieldset> | ||||
|  | ||||
| @@ -100,56 +42,58 @@ | ||||
|     </div> | ||||
|   </fieldset> | ||||
|  | ||||
|   <fieldset class="protagonist-characteristics protagonist-characteristics-{{ifThen isPlayMode 'play' 'edit'}}"> | ||||
|     <legend>{{localize "FTLNOMAD.Label.characteristics"}}</legend> | ||||
|     <div class="protagonist-characteristic" > | ||||
|       <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 | ||||
|         "FTLNOMAD.Label.strShort"}}</label> | ||||
|       {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value | ||||
|       rootId=partId disabled=isPlayMode }} | ||||
|       <label class="char-text">{{mul system.characteristics.str.value 5}}</label> | ||||
|   <fieldset class="character-skills character-skills-{{ifThen isPlayMode 'play' 'edit'}}"> | ||||
|     <legend>{{localize "FTLNOMAD.Label.skills"}}</legend> | ||||
|     <div class="character-skill"> | ||||
|       <img src="systems/fvtt-ftl-nomad/assets/icons/icon_combat.svg" class="icon-skill" /> | ||||
|       <label class="rollable" data-roll-type="skill" data-skill-id="combat">{{localize | ||||
|         "FTLNOMAD.Label.combat"}}</label> | ||||
|       {{formInput systemFields.skills.fields.combat.fields.value value=system.skills.combat.value rootId=partId disabled=isPlayMode type="number" }} | ||||
|     </div> | ||||
|     <div class="protagonist-characteristic"> | ||||
|       <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 | ||||
|         "FTLNOMAD.Label.dexShort"}}</label> | ||||
|       {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value | ||||
|       rootId=partId disabled=isPlayMode }} | ||||
|       <label class="char-text">{{mul system.characteristics.dex.value 5}}</label> | ||||
|     <div class="character-skill"> | ||||
|       <img src="systems/fvtt-ftl-nomad/assets/icons/icon_knowledge.svg" class="icon-skill" /> | ||||
|       <label class="rollable" data-roll-type="skill" data-skill-id="knowledge">{{localize | ||||
|         "FTLNOMAD.Label.knowledge"}}</label> | ||||
|       {{formInput systemFields.skills.fields.knowledge.fields.value value=system.skills.knowledge.value | ||||
|       rootId=partId disabled=isPlayMode  type="number"}} | ||||
|     </div> | ||||
|     <div class="protagonist-characteristic" > | ||||
|       <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 | ||||
|         "FTLNOMAD.Label.conShort"}}</label> | ||||
|       {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value | ||||
|       rootId=partId disabled=isPlayMode }} | ||||
|        <label class="char-text">{{mul system.characteristics.con.value 5}}</label> | ||||
|     <div class="character-skill"> | ||||
|       <img src="systems/fvtt-ftl-nomad/assets/icons/icon_social.svg" class="icon-skill" /> | ||||
|       <label class="rollable" data-roll-type="skill" data-skill-id="social">{{localize | ||||
|         "FTLNOMAD.Label.social"}}</label> | ||||
|       {{formInput systemFields.skills.fields.social.fields.value value=system.skills.social.value | ||||
|       rootId=partId disabled=isPlayMode  type="number"}} | ||||
|     </div> | ||||
|     <div class="protagonist-characteristic" > | ||||
|       <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 | ||||
|         "FTLNOMAD.Label.intShort"}}</label> | ||||
|       {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value | ||||
|       rootId=partId disabled=isPlayMode }} | ||||
|        <label class="char-text">{{mul system.characteristics.int.value 5}}</label> | ||||
|     <div class="character-skill"> | ||||
|       <img src="systems/fvtt-ftl-nomad/assets/icons/icon_physical.svg" class="icon-skill" /> | ||||
|       <label class="rollable" data-roll-type="skill" data-skill-id="physical">{{localize | ||||
|         "FTLNOMAD.Label.physical"}}</label> | ||||
|       {{formInput systemFields.skills.fields.physical.fields.value value=system.skills.physical.value | ||||
|       rootId=partId disabled=isPlayMode  type="number"}} | ||||
|     </div> | ||||
|     <div class="protagonist-characteristic" > | ||||
|       <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 | ||||
|         "FTLNOMAD.Label.powShort"}}</label> | ||||
|       {{formField systemFields.characteristics.fields.pow.fields.value value=system.characteristics.pow.value | ||||
|       rootId=partId disabled=isPlayMode }} | ||||
|        <label class="char-text">{{mul system.characteristics.pow.value 5}}</label> | ||||
|     <div class="character-skill"> | ||||
|       <img src="systems/fvtt-ftl-nomad/assets/icons/icon_stealth.svg" class="icon-skill" /> | ||||
|       <label class="rollable" data-roll-type="skill" data-skill-id="stealth">{{localize | ||||
|         "FTLNOMAD.Label.stealth"}}</label> | ||||
|       {{formInput systemFields.skills.fields.stealth.fields.value value=system.skills.stealth.value | ||||
|       rootId=partId disabled=isPlayMode  type="number"}} | ||||
|     </div> | ||||
|     <div class="protagonist-characteristic" > | ||||
|       <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 | ||||
|         "FTLNOMAD.Label.chaShort"}}</label> | ||||
|       {{formField systemFields.characteristics.fields.cha.fields.value value=system.characteristics.cha.value | ||||
|       rootId=partId disabled=isPlayMode }} | ||||
|        <label class="char-text">{{mul system.characteristics.cha.value 5}}</label> | ||||
|     <div class="character-skill"> | ||||
|       <img src="systems/fvtt-ftl-nomad/assets/icons/icon_vehicles.svg" class="icon-skill" /> | ||||
|       <label class="rollable" data-roll-type="skill" data-skill-id="vehicles">{{localize | ||||
|         "FTLNOMAD.Label.vehicles"}}</label> | ||||
|       {{formInput systemFields.skills.fields.vehicles.fields.value value=system.skills.vehicles.value | ||||
|       rootId=partId disabled=isPlayMode  type="number"}} | ||||
|     </div> | ||||
|     <div class="character-skill"> | ||||
|       <img src="systems/fvtt-ftl-nomad/assets/icons/icon_technology.svg" class="icon-skill" /> | ||||
|       <label class="rollable" data-roll-type="skill" data-skill-id="technology">{{localize | ||||
|         "FTLNOMAD.Label.technology"}}</label> | ||||
|       {{formInput systemFields.skills.fields.technology.fields.value value=system.skills.technology.value | ||||
|       rootId=partId disabled=isPlayMode  type="number"}} | ||||
|     </div> | ||||
|   </fieldset> | ||||
|  | ||||
|  | ||||
|  | ||||
| </section> | ||||
| @@ -1,25 +0,0 @@ | ||||
| <section class="tab protagonist-{{tab.id}} {{tab.cssClass}}" data-tab="{{tab.id}}" data-group="{{tab.group}}"> | ||||
|   {{log this}} | ||||
|   <fieldset> | ||||
|     <legend data-tooltip="{{localize "FTLNOMAD.Tooltip.skills"}}" data-tooltip-direction="UP">{{localize "FTLNOMAD.Label.skills"}}</legend> | ||||
|     <div class="skills"> | ||||
|         {{#each skills as |item|}} | ||||
|           <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 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> | ||||
|             <div class="score" > | ||||
|               {{item.system.skillTotal}} | ||||
|             </div> | ||||
|             <div class="controls"> | ||||
|               <a data-tooltip="{{localize 'FTLNOMAD.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 'FTLNOMAD.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> | ||||
| @@ -1,95 +0,0 @@ | ||||
| <section class="tab protagonist-{{tab.id}} {{tab.cssClass}}" data-tab="{{tab.id}}" data-group="{{tab.group}}"> | ||||
|  | ||||
|   <fieldset> | ||||
|     <legend>{{localize "FTLNOMAD.Label.bonds"}}{{#if isEditMode}} | ||||
|       <a class="action" data-tooltip="{{localize "FTLNOMAD.Tooltip.addBond"}}" data-tooltip-direction="UP"><i class="fas fa-plus" data-action="createBond"></i></a>{{/if}}</legend> | ||||
|     <div class="bonds"> | ||||
|       {{#each bonds as |item|}} | ||||
|         {{!log 'weapon' this}} | ||||
|         <div class="bond" 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="type"> | ||||
|             {{upperFirst item.system.bondType}} | ||||
|           </div> | ||||
|           <div class="level"> | ||||
|             {{item.system.value}} | ||||
|           </div> | ||||
|           <div class="controls"> | ||||
|             <a data-tooltip="{{localize 'FTLNOMAD.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 'FTLNOMAD.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 "FTLNOMAD.Label.injuries"}}{{#if isEditMode}} | ||||
|       <a class="action" data-tooltip="{{localize "FTLNOMAD.Tooltip.addInjury"}}" data-tooltip-direction="UP"><i class="fas fa-plus" data-action="createInjury"></i></a>{{/if}}</legend> | ||||
|     <div class="injuries"> | ||||
|       {{#each injuries as |item|}} | ||||
|         <div class="injury" 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 'FTLNOMAD.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 'FTLNOMAD.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 "FTLNOMAD.Label.mentaldisorders"}}{{#if isEditMode}} | ||||
|       <a class="action" data-tooltip="{{localize "FTLNOMAD.Tooltip.addMentalDisorder"}}" data-tooltip-direction="UP"><i class="fas fa-plus" data-action="createMentalDisorder"></i></a>{{/if}}</legend> | ||||
|     <div class="mentaldisorders"> | ||||
|       {{#each mentaldisorders as |item|}} | ||||
|         {{!log 'armor' this}} | ||||
|         <div class="mentaldisorder" 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="cured"> | ||||
|             {{#if item.system.cured}} | ||||
|               {{localize 'FTLNOMAD.Label.Cured'}} | ||||
|             {{else}} | ||||
|               {{localize 'FTLNOMAD.Label.Uncured'}} | ||||
|             {{/if}} | ||||
|           </div> | ||||
|           <div class="controls"> | ||||
|             <a data-tooltip="{{localize 'FTLNOMAD.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 'FTLNOMAD.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 "FTLNOMAD.Label.motivations"}}{{#if isEditMode}} | ||||
|       <a class="action" data-tooltip="{{localize "FTLNOMAD.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 'FTLNOMAD.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 'FTLNOMAD.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> | ||||
							
								
								
									
										106
									
								
								templates/character-talents.hbs
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,106 @@ | ||||
| <section class="tab character-{{tab.id}} {{tab.cssClass}}" data-tab="{{tab.id}}" data-group="{{tab.group}}"> | ||||
|  | ||||
|   <fieldset> | ||||
|     <legend>{{localize "FTLNOMAD.Label.talents"}}{{#if isEditMode}} | ||||
|       <a class="action" data-tooltip="{{localize " FTLNOMAD.Tooltip.addTalent"}}" data-tooltip-direction="UP"><i | ||||
|           class="fas fa-plus" data-action="createTalent"></i></a>{{/if}} | ||||
|     </legend> | ||||
|     <div class="talents"> | ||||
|       {{#each talents as |item|}} | ||||
|       {{!log 'weapon' this}} | ||||
|       <div class="talent 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}}" /> | ||||
|         <img src="systems/fvtt-cthulhu-eternal/assets/ui/d100.svg" class="d100" /> | ||||
|         <div class="name" data-roll-type="weapon" data-tooltip="{{{item.system.description}}}"> | ||||
|           {{item.name}} | ||||
|         </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}}"> | ||||
|           {{#if item.system.isAdvantage}} | ||||
|           <i data-tooltip="Provides advantage" class="fas fa-circle-chevron-up"></i> | ||||
|           {{else}} | ||||
|           {{/if}} | ||||
|         <div class="controls"> | ||||
|           <a data-tooltip="{{localize 'FTLNOMAD.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 'FTLNOMAD.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 "FTLNOMAD.Label.psionics"}}{{#if isEditMode}} | ||||
|       <a class="action" data-tooltip="{{localize " FTLNOMAD.Tooltip.addImplant"}}" data-tooltip-direction="UP"><i | ||||
|           class="fas fa-plus" data-action="createPsionic"></i></a>{{/if}} | ||||
|     </legend> | ||||
|     <div class="psionics"> | ||||
|       {{#each psionics as |item|}} | ||||
|       {{!log 'weapon' this}} | ||||
|       <div class="psionic 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}}" /> | ||||
|         <img src="systems/fvtt-cthulhu-eternal/assets/ui/d100.svg" class="d100" /> | ||||
|         <div class="name" data-roll-type="weapon" data-tooltip="{{{item.system.description}}}"> | ||||
|           {{item.name}} | ||||
|         </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}}"> | ||||
|           {{#if item.system.isAdvantage}} | ||||
|           <i data-tooltip="Provides advantage" class="fas fa-circle-chevron-up"></i> | ||||
|           {{else}} | ||||
|           {{/if}} | ||||
|         <div class="controls"> | ||||
|           <a data-tooltip="{{localize 'FTLNOMAD.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 'FTLNOMAD.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 "FTLNOMAD.Label.languages"}}{{#if isEditMode}} | ||||
|       <a class="action" data-tooltip="{{localize " FTLNOMAD.Tooltip.addLanguage"}}" data-tooltip-direction="UP"><i | ||||
|           class="fas fa-plus" data-action="createLanguage"></i></a>{{/if}} | ||||
|     </legend> | ||||
|     <div class="languages"> | ||||
|       {{#each languages as |item|}} | ||||
|       {{!log 'weapon' this}} | ||||
|       <div class="language 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}}" /> | ||||
|         <img src="systems/fvtt-cthulhu-eternal/assets/ui/d100.svg" class="d100" /> | ||||
|         <div class="name" data-roll-type="weapon" data-tooltip="{{{item.system.description}}}"> | ||||
|           {{item.name}} | ||||
|         </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}}"> | ||||
|           {{#if item.system.isAdvantage}} | ||||
|           <i data-tooltip="Provides advantage" class="fas fa-circle-chevron-up"></i> | ||||
|           {{else}} | ||||
|           {{/if}} | ||||
|         <div class="controls"> | ||||
|           <a data-tooltip="{{localize 'FTLNOMAD.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 'FTLNOMAD.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> | ||||
| @@ -6,74 +6,39 @@ | ||||
|     </div> | ||||
|     <div class="intro-right"> | ||||
|       <ul> | ||||
|         {{#if (eq rollType "char")}} | ||||
|         <li><strong>{{localize "FTLNOMAD.Label.charRoll"}}</strong></li> | ||||
|         {{/if}} | ||||
|  | ||||
|         {{#if (eq rollType "skill")}} | ||||
|         <li><strong>{{localize "FTLNOMAD.Label.skillRoll"}}</strong></li> | ||||
|         {{/if}} | ||||
|  | ||||
|         {{#if isNudgedRoll}} | ||||
|         <li><strong>{{localize "FTLNOMAD.Label.nudgedRoll"}} : {{wpCost}} WP spent</strong></li> | ||||
|         {{/if}} | ||||
|  | ||||
|         {{#if weapon}} | ||||
|         <li><strong>Weapon : {{weapon.name}}</strong></li> | ||||
|         {{/if}} | ||||
|          | ||||
|         {{#if (eq rollType "resource")}} | ||||
|         <li><strong>{{rollItem.name}} : {{initialScore}}</strong></li> | ||||
|         {{else}} | ||||
|         <li><strong>{{rollItem.name}} : {{initialScore}}%</strong></li> | ||||
|         <li><strong>{{localize rollItem.label}} : {{fullFormula}}</strong></li> | ||||
|  | ||||
|         {{#if isEncumbered}} | ||||
|         <li class="red-warning">Encumbered : -1D</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 "FTLNOMAD.Label.multiplier"}} : {{multiplier}}</li> | ||||
|         {{else}} | ||||
|         <li>{{localize "FTLNOMAD.Label.modifier"}} : {{modifier}}%</li> | ||||
|         {{/if}} | ||||
|         <li>{{localize "FTLNOMAD.Label.modifier"}} : {{numericModifier}}D</li> | ||||
|    | ||||
|         <li>{{localize "FTLNOMAD.Label.targetScore"}} : {{targetScore}}%</li> | ||||
|         {{#if isSuccess}} | ||||
|         {{#if isCritical}} | ||||
|         <li class="result-critical-success">{{localize "FTLNOMAD.Label.criticalSuccess"}}</li> | ||||
|         {{else}} | ||||
|         <li class="result-success"> | ||||
|           {{localize "FTLNOMAD.Label.success"}} | ||||
|           {{#if isNudge}} | ||||
|             <a class="nudge-roll"><i class="fa-solid fa-circle-sort-down"></i></a> | ||||
|           {{/if}} | ||||
|         </li> | ||||
|         {{/if}} | ||||
|         {{/if}} | ||||
|  | ||||
|         {{#if isFailure}} | ||||
|         {{#if isCritical}} | ||||
|         <li class="result-critical-failure">{{localize "FTLNOMAD.Label.criticalFailure"}}</li> | ||||
|         {{else}} | ||||
|         <li class="result-failure"> | ||||
|           {{localize "FTLNOMAD.Label.failure"}} | ||||
|           {{#if isNudge}} | ||||
|             <a class="nudge-roll"><i class="fa-solid fa-circle-sort-down"></i></a> | ||||
|           {{/if}} | ||||
|         </li> | ||||
|         {{/if}} | ||||
|         {{/if}} | ||||
|       </ul> | ||||
|     </div> | ||||
|   </div> | ||||
|  | ||||
|   {{#if isDamage}} | ||||
|   <div> | ||||
|     {{#if (and isGM hasTarget)}} | ||||
|   | ||||
| @@ -1,10 +1,12 @@ | ||||
| <section class="tab creature-{{tab.id}} {{tab.cssClass}}" data-tab="{{tab.id}}" data-group="{{tab.group}}"> | ||||
|  | ||||
|  | ||||
|   <fieldset> | ||||
|     <legend>{{localize "FTLNOMAD.Label.description"}}</legend> | ||||
|     {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} | ||||
|     {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" | ||||
|     toggled=true}} | ||||
|   </fieldset> | ||||
|    | ||||
|  | ||||
|   <fieldset> | ||||
|     <legend>{{localize "FTLNOMAD.Label.notes"}}</legend> | ||||
|     {{formInput systemFields.notes enriched=enrichedNotes value=system.notes name="system.notes" toggled=true}} | ||||
|   | ||||
| @@ -1,4 +1,5 @@ | ||||
| <section class="creature-main creature-main-{{ifThen isPlayMode 'play' 'edit'}}"> | ||||
|   {{!log "creature-main" this}} | ||||
|   <fieldset> | ||||
|     <legend>{{localize "FTLNOMAD.Label.creature"}}</legend> | ||||
|     <div class="creature-pc creature-pc-{{ifThen isPlayMode 'play' 'edit'}}"> | ||||
| @@ -7,89 +8,96 @@ | ||||
|           <img class="creature-img" src="{{actor.img}}" data-edit="img" data-action="editImage" | ||||
|             data-tooltip="{{actor.name}}" /> | ||||
|         </div> | ||||
|         <fieldset class="creature-hp"> | ||||
|           <legend>{{localize "FTLNOMAD.Label.Stamina"}}</legend> | ||||
|           <div class="flexrow"> | ||||
|             Curr. {{formField systemFields.health.fields.staminaValue value=health.staminaValue}} | ||||
|             Max {{formField systemFields.health.fields.staminaMax value=system.health.staminaMax rootId=partId}} | ||||
|           </div> | ||||
|         </fieldset> | ||||
|  | ||||
|       </div> | ||||
|       <div class="creature-right"> | ||||
|         <div class="creature-name"> | ||||
|           {{formInput fields.name value=source.name rootId=partId disabled=isPlayMode}} | ||||
|           <a class="control" data-action="toggleSheet" data-tooltip="FTLNOMAD.ToggleSheet" | ||||
|             data-tooltip-direction="UP"> | ||||
|           <a class="control" data-action="toggleSheet" data-tooltip="FTLNOMAD.ToggleSheet" data-tooltip-direction="UP"> | ||||
|             <i class="fa-solid fa-user-{{ifThen isPlayMode 'lock' 'pen'}}"></i> | ||||
|           </a> | ||||
|         </div> | ||||
|         <fieldset class="creature-hp">  | ||||
|           <legend>{{localize "FTLNOMAD.Label.HP"}}</legend> | ||||
|           <div class="flexrow"> | ||||
|             {{formField systemFields.hp.fields.value value=system.hp.value}} | ||||
|             <span class="hp-separator">/</span> | ||||
|             {{formField systemFields.hp.fields.max value=system.hp.max }} | ||||
|           </div> | ||||
|           <div class="flexrow "> | ||||
|             {{formField systemFields.damageBonus value=system.damageBonus classes="damage-bonus"}} | ||||
|           </div> | ||||
|         </fieldset> | ||||
|  | ||||
|         <fieldset class="willpower"> | ||||
|           <legend>{{localize "FTLNOMAD.Label.willpower"}}</legend> | ||||
|           <div class="flexrow"> | ||||
|             <label class="label-field">{{localize "FTLNOMAD.Label.current"}}</label> | ||||
|             {{formInput systemFields.wp.fields.value value=system.wp.value}} | ||||
|             <label class="label-field">{{localize "FTLNOMAD.Label.max"}}</label> | ||||
|             {{formInput systemFields.wp.fields.max value=system.wp.max rootId=partId }} | ||||
|             <label class="label-field">{{localize "FTLNOMAD.Label.exhausted"}}</label> | ||||
|             {{formInput systemFields.wp.fields.exhausted value=system.wp.exhausted classes="checkbox"}} | ||||
|         <fieldset class="creature-spec"> | ||||
|           <legend>{{localize "FTLNOMAD.Label.Details"}}</legend> | ||||
|           {{formField systemFields.terrain value=system.terrain rootId=partId disabled=isPlayMode localize=true}} | ||||
|           {{formField systemFields.niche value=system.niche rootId=partId disabled=isPlayMode localize=true}} | ||||
|           {{formField systemFields.size value=system.size rootId=partId disabled=isPlayMode localize=true}} | ||||
|           <div class="flexrow rollable" data-roll-type="creature-number"> | ||||
|             <i class="fa-regular fa-dice dice-2d6"></i> | ||||
|             {{formField systemFields.numberAppearing value=system.numberAppearing rootId=partId disabled=isPlayMode | ||||
|             localize=true}} | ||||
|           </div> | ||||
|           <div class="flexrow rollable" data-roll-type="creature-damage"> | ||||
|             <i class="fa-regular fa-dice dice-2d6"></i> | ||||
|             {{formField systemFields.damage value=system.damage rootId=partId disabled=isPlayMode localize=true}} | ||||
|           </div> | ||||
|         </fieldset> | ||||
|  | ||||
|       </div> | ||||
|  | ||||
|        | ||||
|     </div> | ||||
|   </fieldset> | ||||
|  | ||||
|   <fieldset class="creature-characteristics creature-characteristics-{{ifThen isPlayMode 'play' 'edit'}}"> | ||||
|     <legend>{{localize "FTLNOMAD.Label.characteristics"}}</legend> | ||||
|     <div class="creature-characteristic" > | ||||
|       <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 | ||||
|         "FTLNOMAD.Label.strShort"}}</label> | ||||
|       {{formField systemFields.characteristics.fields.str.fields.value value=system.characteristics.str.value | ||||
|       rootId=partId disabled=isPlayMode }} | ||||
|       <label class="char-text">{{mul system.characteristics.str.value 5}}</label> | ||||
|   <fieldset class="creature-skills creature-skills-{{ifThen isPlayMode 'play' 'edit'}}"> | ||||
|     <legend>{{localize "FTLNOMAD.Label.skills"}}</legend> | ||||
|     <div class="creature-skill"> | ||||
|       <img src="systems/fvtt-ftl-nomad/assets/icons/icon_combat.svg" class="icon-skill" /> | ||||
|       <label class="rollable" data-roll-type="skill" data-skill-id="combat">{{localize | ||||
|         "FTLNOMAD.Label.combat"}}</label> | ||||
|       {{formInput systemFields.skills.fields.combat.fields.value value=system.skills.combat.value rootId=partId | ||||
|       disabled=isPlayMode type="number" }} | ||||
|     </div> | ||||
|     <div class="creature-characteristic"> | ||||
|       <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 | ||||
|         "FTLNOMAD.Label.dexShort"}}</label> | ||||
|       {{formField systemFields.characteristics.fields.dex.fields.value value=system.characteristics.dex.value | ||||
|       rootId=partId disabled=isPlayMode }} | ||||
|       <label class="char-text">{{mul system.characteristics.dex.value 5}}</label> | ||||
|     <div class="creature-skill"> | ||||
|       <img src="systems/fvtt-ftl-nomad/assets/icons/icon_knowledge.svg" class="icon-skill" /> | ||||
|       <label class="rollable" data-roll-type="skill" data-skill-id="knowledge">{{localize | ||||
|         "FTLNOMAD.Label.knowledge"}}</label> | ||||
|       {{formInput systemFields.skills.fields.knowledge.fields.value value=system.skills.knowledge.value | ||||
|       rootId=partId disabled=isPlayMode type="number"}} | ||||
|     </div> | ||||
|     <div class="creature-characteristic" > | ||||
|       <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 | ||||
|         "FTLNOMAD.Label.conShort"}}</label> | ||||
|       {{formField systemFields.characteristics.fields.con.fields.value value=system.characteristics.con.value | ||||
|       rootId=partId disabled=isPlayMode }} | ||||
|        <label class="char-text">{{mul system.characteristics.con.value 5}}</label> | ||||
|     <div class="creature-skill"> | ||||
|       <img src="systems/fvtt-ftl-nomad/assets/icons/icon_social.svg" class="icon-skill" /> | ||||
|       <label class="rollable" data-roll-type="skill" data-skill-id="social">{{localize | ||||
|         "FTLNOMAD.Label.social"}}</label> | ||||
|       {{formInput systemFields.skills.fields.social.fields.value value=system.skills.social.value | ||||
|       rootId=partId disabled=isPlayMode type="number"}} | ||||
|     </div> | ||||
|     <div class="creature-characteristic" > | ||||
|       <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 | ||||
|         "FTLNOMAD.Label.intShort"}}</label> | ||||
|       {{formField systemFields.characteristics.fields.int.fields.value value=system.characteristics.int.value | ||||
|       rootId=partId disabled=isPlayMode }} | ||||
|        <label class="char-text">{{mul system.characteristics.int.value 5}}</label> | ||||
|     <div class="creature-skill"> | ||||
|       <img src="systems/fvtt-ftl-nomad/assets/icons/icon_physical.svg" class="icon-skill" /> | ||||
|       <label class="rollable" data-roll-type="skill" data-skill-id="physical">{{localize | ||||
|         "FTLNOMAD.Label.physical"}}</label> | ||||
|       {{formInput systemFields.skills.fields.physical.fields.value value=system.skills.physical.value | ||||
|       rootId=partId disabled=isPlayMode type="number"}} | ||||
|     </div> | ||||
|     <div class="creature-characteristic" > | ||||
|       <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 | ||||
|         "FTLNOMAD.Label.powShort"}}</label> | ||||
|       {{formField systemFields.characteristics.fields.pow.fields.value value=system.characteristics.pow.value | ||||
|       rootId=partId disabled=isPlayMode }} | ||||
|        <label class="char-text">{{mul system.characteristics.pow.value 5}}</label> | ||||
|     <div class="creature-skill"> | ||||
|       <img src="systems/fvtt-ftl-nomad/assets/icons/icon_stealth.svg" class="icon-skill" /> | ||||
|       <label class="rollable" data-roll-type="skill" data-skill-id="stealth">{{localize | ||||
|         "FTLNOMAD.Label.stealth"}}</label> | ||||
|       {{formInput systemFields.skills.fields.stealth.fields.value value=system.skills.stealth.value | ||||
|       rootId=partId disabled=isPlayMode type="number"}} | ||||
|     </div> | ||||
|     <div class="creature-skill"> | ||||
|       <img src="systems/fvtt-ftl-nomad/assets/icons/icon_vehicles.svg" class="icon-skill" /> | ||||
|       <label class="rollable" data-roll-type="skill" data-skill-id="vehicles">{{localize | ||||
|         "FTLNOMAD.Label.vehicles"}}</label> | ||||
|       {{formInput systemFields.skills.fields.vehicles.fields.value value=system.skills.vehicles.value | ||||
|       rootId=partId disabled=isPlayMode type="number"}} | ||||
|     </div> | ||||
|     <div class="creature-skill"> | ||||
|       <img src="systems/fvtt-ftl-nomad/assets/icons/icon_technology.svg" class="icon-skill" /> | ||||
|       <label class="rollable" data-roll-type="skill" data-skill-id="technology">{{localize | ||||
|         "FTLNOMAD.Label.technology"}}</label> | ||||
|       {{formInput systemFields.skills.fields.technology.fields.value value=system.skills.technology.value | ||||
|       rootId=partId disabled=isPlayMode type="number"}} | ||||
|     </div> | ||||
|  | ||||
|   </fieldset> | ||||
|  | ||||
|  | ||||
|  | ||||
| </section> | ||||
| @@ -1,57 +0,0 @@ | ||||
| <section class="tab creature-{{tab.id}} {{tab.cssClass}}" data-tab="{{tab.id}}" data-group="{{tab.group}}"> | ||||
|  | ||||
|   <fieldset> | ||||
|     <legend>{{localize "FTLNOMAD.Label.weapons"}}{{#if isEditMode}} | ||||
|       <a class="action" data-tooltip="{{localize " FTLNOMAD.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}}" /> | ||||
|         <img src="systems/fvtt-cthulhu-eternal/assets/ui/d100.svg" class="d100" /> | ||||
|         <div class="name rollable" data-roll-type="weapon" data-tooltip="{{{item.system.description}}}"> | ||||
|           {{item.name}} | ||||
|         </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 "FTLNOMAD.Label.damageShort"}} : | ||||
|           {{item.system.damage}}</a> | ||||
|         <div class="controls"> | ||||
|           <a data-tooltip="{{localize 'FTLNOMAD.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 'FTLNOMAD.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 data-tooltip="{{localize "FTLNOMAD.Tooltip.skills"}}" data-tooltip-direction="UP">{{localize "FTLNOMAD.Label.skills"}}</legend> | ||||
|     <div class="skills"> | ||||
|         {{#each skills as |item|}} | ||||
|           <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 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> | ||||
|             <div class="score" > | ||||
|               {{item.system.skillTotal}} | ||||
|             </div> | ||||
|             <div class="controls"> | ||||
|               <a data-tooltip="{{localize 'FTLNOMAD.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 'FTLNOMAD.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> | ||||
| @@ -1,21 +1,50 @@ | ||||
| <section> | ||||
|   <div class="header"> | ||||
|     <img class="item-img" src="{{item.img}}" data-edit="img" data-action="editImage" data-tooltip="{{item.name}}" /> | ||||
|     {{formInput fields.name value=source.name}} | ||||
|   </div>  | ||||
|    | ||||
| <section class="tab creature-{{tab.id}} {{tab.cssClass}}" data-tab="{{tab.id}}" data-group="{{tab.group}}"> | ||||
|  | ||||
|   <fieldset> | ||||
|     {{formField systemFields.isAdvantage value=system.isAdvantage}} | ||||
|     <legend>{{localize "FTLNOMAD.Label.traits"}}{{#if isEditMode}} | ||||
|       <a class="action" data-tooltip="{{localize " FTLNOMAD.Tooltip.addTrait"}}" data-tooltip-direction="UP"><i | ||||
|           class="fas fa-plus" data-action="createTrait"></i></a>{{/if}} | ||||
|     </legend> | ||||
|     <div class="traits"> | ||||
|       {{#each traits as |item|}} | ||||
|       <div class="trait 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" data-tooltip="{{{item.system.description}}}"> | ||||
|           {{item.name}} | ||||
|         </div> | ||||
|         <div class="controls"> | ||||
|           <a data-tooltip="{{localize 'FTLNOMAD.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 'FTLNOMAD.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 "FTLNOMAD.Label.description"}}</legend> | ||||
|     {{formInput | ||||
|       systemFields.description | ||||
|       enriched=description | ||||
|       value=system.description | ||||
|       name="system.description" | ||||
|       toggled="false" | ||||
|     }} | ||||
|     <legend>{{localize "FTLNOMAD.Label.abilities"}}{{#if isEditMode}} | ||||
|       <a class="action" data-tooltip="{{localize " FTLNOMAD.Tooltip.addAbility"}}" data-tooltip-direction="UP"><i | ||||
|           class="fas fa-plus" data-action="createAbility"></i></a>{{/if}} | ||||
|     </legend> | ||||
|     <div class="abilities"> | ||||
|       {{#each abilities as |item|}} | ||||
|       {{!log 'armor' this}} | ||||
|       <div class="ability" 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 'FTLNOMAD.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 'FTLNOMAD.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> | ||||
| @@ -1,57 +1,53 @@ | ||||
| <div class="fvtt-cthulhu-eternal-roll-dialog"> | ||||
| <div class="fvtt-ftl-nomad-roll-dialog"> | ||||
|    | ||||
|   <fieldSet> | ||||
|  | ||||
|     {{#if (eq rollType "skill")}} | ||||
|     <legend>{{localize "FTLNOMAD.Label.skill"}}</legend> | ||||
|     {{/if}} | ||||
|     {{#if (eq rollType "char")}} | ||||
|     <legend>{{localize "FTLNOMAD.Label.characteristic"}}</legend> | ||||
|     {{/if}} | ||||
|  | ||||
|     {{#if (eq rollType "resource")}} | ||||
|     <legend>{{localize "FTLNOMAD.Label.resourceRating"}}</legend> | ||||
|     <div class="dialog-skill">{{rollItem.name}} : <span class="resource-score">{{initialScore}} ({{mul initialScore 5}}%)</span></div>   | ||||
|     <div class="dialog-skill">{{localize "FTLNOMAD.Label.Hand"}} : {{rollItem.hand}} <input type="checkbox" data-action="selectHand" {{checked rollItem.enableHand}}></div>   | ||||
|     <div class="dialog-skill">{{localize "FTLNOMAD.Label.Stowed"}} : {{rollItem.stowed}} <input type="checkbox" data-action="selectStowed" {{checked rollItem.enableStowed}}></div>   | ||||
|     <div class="dialog-skill">{{localize "FTLNOMAD.Label.Storage"}} : {{rollItem.storage}} <input type="checkbox" data-action="selectStorage" {{checked rollItem.enableStorage}}></div>   | ||||
|     {{else}} | ||||
|     <div class="dialog-skill">{{rollItem.name}} : {{initialScore}}%</div> | ||||
|     {{/if}} | ||||
|     <div class="dialog-skill">{{localize rollItem.label}} : 2d6+{{rollItem.value}}</div> | ||||
|  | ||||
|     {{#if weapon}} | ||||
|     <div class="dialog-skill">Weapon : {{weapon.name}}</div> | ||||
|     {{/if}} | ||||
|  | ||||
|     {{#if isZeroWP}} | ||||
|     <div class="dialog-skill red-warning">Zero WP : Automatic failure (ie 0%)</div> | ||||
|     {{else}} | ||||
|     {{#if isLowWP}} | ||||
|     <div class="dialog-skill orange-warning">Low WP : -20%</div> | ||||
|     {{/if}} | ||||
|     {{/if}} | ||||
|  | ||||
|     {{#if isExhausted}} | ||||
|     <div class="dialog-skill orange-warning">Exhausted : -20%</div> | ||||
|     {{#if isEncumbered}} | ||||
|     <div class="dialog-skill red-warning">Encumbered : -1D</div> | ||||
|     {{/if}} | ||||
|  | ||||
|   </fieldSet> | ||||
|  | ||||
|   {{#if hasModifier}} | ||||
|   <fieldSet class="dialog-modifier"> | ||||
|     <legend>{{localize "FTLNOMAD.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 "FTLNOMAD.Label.multiplier"}}</legend> | ||||
|     <select name="multiplier" class="roll-skill-modifier roll-skill-multiplier"> | ||||
|       {{selectOptions choiceMultiplier selected=multiplier}} | ||||
|     <select name="modifier" class="roll-skill-modifier"> | ||||
|       {{selectOptions choiceModifier selected=modifier localize=true}} | ||||
|     </select> | ||||
|  | ||||
|       {{#if weapon}} | ||||
|       <select name="range-modifier" class="roll-skill-range-modifier"> | ||||
|         {{selectOptions choiceRangeModifier selected=rangeModifier}} | ||||
|       </select> | ||||
|       <ul> | ||||
|         <li>Two Attacks : <input type="checkbox" name="isAiming" data-field="two-attacks" class="select-combat-option"></li> | ||||
|         <li>Aiming : <input type="checkbox" data-field="aiming" class="select-combat-option"></li> | ||||
|         <li>Dim Lightning : <input type="checkbox" data-field="dim" class="select-combat-option"></li> | ||||
|         <li>Darkness : <input type="checkbox" data-field="darkness" class="select-combat-option"></li> | ||||
|         <li>Target Prone/Obscured : <input type="checkbox" data-field="prone" class="select-combat-option"></li> | ||||
|         <li>Target Cover : <input type="checkbox" data-field="cover" class="select-combat-option"></li> | ||||
|         <li>1/2 Auto Fire Recoil : <input type="checkbox" data-field="recoil-first" class="select-combat-option"></li> | ||||
|         <li>2+ Auto Fire Recoil : <input type="checkbox" data-field="recoil-third" class="select-combat-option"></li> | ||||
|         <li>Target Aware : <input type="checkbox" data-field="aware" class="select-combat-option"></li> | ||||
|       </ul> | ||||
|     {{/if}} | ||||
|  | ||||
|   </fieldSet> | ||||
|  | ||||
|   <fieldSet class="dialog-formula"> | ||||
|     <legend>{{localize "FTLNOMAD.Label.formula"}}</legend> | ||||
|     <label name="fullFormula" id="roll-dialog-full-formula" >{{fullFormula}}</label> | ||||
|   </fieldSet> | ||||
|   {{/if}} | ||||
|  | ||||
|   <fieldSet> | ||||
|     <legend>{{localize "FTLNOMAD.Label.rollView"}}</legend> | ||||
| @@ -59,4 +55,5 @@ | ||||
|       {{selectOptions rollModes selected=visibility}} | ||||
|     </select> | ||||
|   </fieldSet> | ||||
|  | ||||
| </div> | ||||
							
								
								
									
										18
									
								
								templates/starship-description.hbs
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,18 @@ | ||||
| <section class="tab starship-{{tab.id}} {{tab.cssClass}}" data-tab="{{tab.id}}" data-group="{{tab.group}}"> | ||||
|  | ||||
|   <fieldset> | ||||
|     <legend>{{localize "FTLNOMAD.Label.description"}}</legend> | ||||
|     {{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}} | ||||
|   </fieldset> | ||||
|  | ||||
|   <fieldset> | ||||
|     <legend>{{localize "FTLNOMAD.Label.modifications"}}</legend> | ||||
|     {{formInput systemFields.modifications enriched=enrichedModifications value=system.modifications name="system.modifications" toggled=true}} | ||||
|   </fieldset> | ||||
|  | ||||
|   <fieldset> | ||||
|     <legend>{{localize "FTLNOMAD.Label.notes"}}</legend> | ||||
|     {{formInput systemFields.notes enriched=enrichedNotes value=system.notes name="system.notes" toggled=true}} | ||||
|   </fieldset> | ||||
|  | ||||
| </section> | ||||
| @@ -8,13 +8,10 @@ | ||||
|           <img class="starship-img" src="{{actor.img}}" data-edit="img" data-action="editImage" | ||||
|             data-tooltip="{{actor.name}}" /> | ||||
|         </div> | ||||
|         <fieldset> | ||||
|           <legend>{{localize "FTLNOMAD.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 class="spec"> | ||||
|           {{formField systemFields.agility value=system.agility localize=true}} | ||||
|           {{formField systemFields.armor value=system.armor localize=true}}             | ||||
|           {{formField systemFields.endurance value=system.endurance localize=true}} | ||||
|         </fieldset> | ||||
|  | ||||
|       </div> | ||||
| @@ -28,20 +25,29 @@ | ||||
|           </a> | ||||
|         </div> | ||||
|  | ||||
|  | ||||
|         <fieldset class="speed"> | ||||
|           <legend>{{localize "FTLNOMAD.Label.Speed"}}</legend> | ||||
|         <fieldset class="capacity "> | ||||
|           <legend>{{localize "FTLNOMAD.Label.capacity"}}</legend> | ||||
|           <div class="flexrow"> | ||||
|             {{formField systemFields.surfaceSpeed value=system.surfaceSpeed localize=true}} | ||||
|             {{formField systemFields.airSpeed value=system.airSpeed localize=true}} | ||||
|              | ||||
|             {{formField systemFields.hullType value=system.hullType localize=true}} | ||||
|             <div class="flexrow rollable" data-roll-type="starship-guns"> | ||||
|               <i class="fa-regular fa-dice dice-2d6"></i> | ||||
|               {{formField systemFields.guns value=system.guns localize=true}}             | ||||
|             </div> | ||||
|           </div> | ||||
|           <div class="flexrow"> | ||||
|             {{formField systemFields.cost value=system.cost localize=true}}             | ||||
|             {{formField systemFields.monthlyCost value=system.monthlyCost localize=true}}             | ||||
|           </div> | ||||
|           <div class="flexrow"> | ||||
|             {{formField systemFields.travelMultiplier value=system.travelMultiplier localize=true}}             | ||||
|           </div> | ||||
|         </fieldset> | ||||
|  | ||||
|         <fieldset class="armr "> | ||||
|           <legend>{{localize "FTLNOMAD.Label.armor"}}</legend> | ||||
|         <fieldset class="cargo"> | ||||
|           <legend>{{localize "FTLNOMAD.Label.cargo"}}</legend> | ||||
|           <div class="flexrow"> | ||||
|             {{formField systemFields.armor value=system.armor localize=true}} | ||||
|             {{formField systemFields.crew value=system.crew localize=true}}             | ||||
|             {{formField systemFields.cargo value=system.cargo localize=true}} | ||||
|           </div> | ||||
|         </fieldset> | ||||
|  | ||||
|   | ||||
| @@ -9,4 +9,5 @@ | ||||
|     <legend>{{localize "FTLNOMAD.Label.notes"}}</legend> | ||||
|     {{formInput systemFields.notes enriched=enrichedNotes value=system.notes name="system.notes" toggled=true}} | ||||
|   </fieldset> | ||||
|  | ||||
| </section> | ||||
| @@ -28,14 +28,14 @@ | ||||
|   </fieldset> | ||||
|  | ||||
|   <fieldset> | ||||
|     <legend>{{localize "FTLNOMAD.Label.gears"}}{{#if isEditMode}} | ||||
|       <a class="action" data-tooltip="{{localize " FTLNOMAD.Tooltip.addGear"}}" data-tooltip-direction="UP"><i | ||||
|           class="fas fa-plus" data-action="createGear"></i></a>{{/if}} | ||||
|     <legend>{{localize "FTLNOMAD.Label.equipment"}}{{#if isEditMode}} | ||||
|       <a class="action" data-tooltip="{{localize " FTLNOMAD.Tooltip.addEquipment"}}" data-tooltip-direction="UP"><i | ||||
|           class="fas fa-plus" data-action="createEquipment"></i></a>{{/if}} | ||||
|     </legend> | ||||
|     <div class="gears"> | ||||
|       {{#each gears as |item|}} | ||||
|     <div class="equipments"> | ||||
|       {{#each equipments as |item|}} | ||||
|       {{!log 'armor' this}} | ||||
|       <div class="gear" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}"> | ||||
|       <div class="equipment" 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}} | ||||
|   | ||||
| @@ -9,11 +9,9 @@ | ||||
|             data-tooltip="{{actor.name}}" /> | ||||
|         </div> | ||||
|         <fieldset> | ||||
|           <legend>{{localize "FTLNOMAD.Label.HP"}}</legend> | ||||
|           <legend>{{localize "FTLNOMAD.Label.Agility"}}</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}} | ||||
|             {{formField systemFields.agility value=system.agility localize=true}} | ||||
|           </div> | ||||
|         </fieldset> | ||||
|  | ||||
| @@ -28,20 +26,24 @@ | ||||
|           </a> | ||||
|         </div> | ||||
|  | ||||
|  | ||||
|         <fieldset class="speed"> | ||||
|           <legend>{{localize "FTLNOMAD.Label.Speed"}}</legend> | ||||
|         <fieldset class="capacity "> | ||||
|           <legend>{{localize "FTLNOMAD.Label.capacity"}}</legend> | ||||
|           <div class="flexrow"> | ||||
|             {{formField systemFields.surfaceSpeed value=system.surfaceSpeed localize=true}} | ||||
|             {{formField systemFields.airSpeed value=system.airSpeed localize=true}} | ||||
|              | ||||
|             {{formField systemFields.armor value=system.armor localize=true}} | ||||
|             {{formField systemFields.force value=system.force localize=true}} | ||||
|           </div> | ||||
|           <div class="flexrow"> | ||||
|             {{formField systemFields.range value=system.range localize=true}}             | ||||
|             {{formField systemFields.speed value=system.speed localize=true}}             | ||||
|           </div> | ||||
|         </fieldset> | ||||
|  | ||||
|         <fieldset class="armr "> | ||||
|           <legend>{{localize "FTLNOMAD.Label.armor"}}</legend> | ||||
|         <fieldset class="cargo"> | ||||
|           <legend>{{localize "FTLNOMAD.Label.cargo"}}</legend> | ||||
|           <div class="flexrow"> | ||||
|             {{formField systemFields.armor value=system.armor localize=true}} | ||||
|             {{formField systemFields.crew value=system.crew localize=true}}             | ||||
|             {{formField systemFields.cargo value=system.cargo localize=true}} | ||||
|             {{formField systemFields.tonnage value=system.tonnage localize=true}}             | ||||
|           </div> | ||||
|         </fieldset> | ||||
|  | ||||
|   | ||||