Rework folder organization

This commit is contained in:
LeRatierBretonnien 2024-07-26 09:20:48 +02:00
parent 03fffa2f19
commit 575bb63d2f
79 changed files with 5223 additions and 0 deletions

0
LICENSE.txt Normal file
View File

1
assets/default/armor.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" style="height: 512px; width: 512px;"><g class="" transform="translate(0,0)" style=""><path d="M156.7 25.83L89 39.38c-.1 58.57-1.74 119.32-43.49 167.22C104.4 246.5 189 260.7 247 248.8v-99L108.3 88.22l7.4-16.44L256 134.2l140.3-62.42 7.4 16.44L265 149.8v99c58 11.9 142.6-2.3 201.5-42.2-41.8-47.9-43.4-108.65-43.5-167.22l-67.7-13.55c-12.9 13.88-20.6 28.15-32.9 40.53C308.9 79.78 289.5 89 256 89c-33.5 0-52.9-9.22-66.4-22.64-12.3-12.38-20-26.65-32.9-40.53zM53.88 232.9C75.96 281 96.07 336.6 102.7 392.8l65 22.8c4.2-52.7 28.2-104 63.7-146.1-55.1 6.3-122.7-5.8-177.52-36.6zm404.22 0c-54.8 30.8-122.4 42.9-177.5 36.6 35.5 42.1 59.5 93.4 63.7 146.1l65.2-22.9c6.6-56.8 26.6-111.8 48.6-159.8zM256 269c-40.5 43.1-67.7 97.9-70.7 152.7l61.7 21.6V336h18v107.3l61.7-21.6c-3.1-54.8-30.2-109.6-70.7-152.7zm151.7 143.4L297 451.1v18.8l110.2-44.1c.1-4.5.3-8.9.5-13.4zm-303.3.1c.3 4.5.4 8.9.5 13.4l110.1 44v-18.7l-110.6-38.7zM279 457.4l-23 8.1-23-8v19.6l23 9.2 23-9.2v-19.7z" fill="#fff" fill-opacity="1"></path></g></svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" style="height: 512px; width: 512px;"><g class="" transform="translate(0,0)" style=""><path d="M181.78 33v51.53h149.407V33H181.78zm14.19 70.22c-.66 2.9-1.554 5.263-2.75 6.936-2.684 3.75-7.033 6.594-19.5 6.594-21.54 0-40.804 5.862-55.157 16.094-14.353 10.232-23.907 25.398-23.907 42.5V426.75c0 32.34 26.255 58.625 58.594 58.625h213.47c32.338 0 58.592-26.286 58.592-58.625V175.344c0-17.102-9.527-32.2-23.593-42.438-14.067-10.237-32.83-16.156-53.44-16.156-16.69 0-23.62-3.488-26.874-7.188-1.41-1.604-2.43-3.698-3.156-6.343h-19.125c1.073 6.658 3.37 13.137 8.25 18.686 8.11 9.223 21.523 13.53 40.906 13.53 16.978 0 32.056 5.008 42.44 12.564 10.38 7.556 15.905 17.1 15.905 27.344V426.75c0 22.355-17.55 39.938-39.906 39.938H153.25c-22.355 0-39.906-17.583-39.906-39.938V175.344c0-10.245 5.455-19.72 16.062-27.28 10.607-7.563 26.22-12.626 44.313-12.626 15.962 0 28.056-5.142 34.686-14.407 3.904-5.455 5.733-11.545 6.625-17.81h-19.06zm66.093 45.405c-30.545 0-50.062 12.865-63.282 32.313-12.295 18.09-18.387 42.315-19.186 66.062 25.033 12.795 39.555 27.632 43.844 44.97.734 2.967 1.173 5.942 1.312 8.905 9.01 5.134 23.22 8.44 37.813 8.438 12.935-.002 26.08-2.538 36.093-6.875.152-3.325.617-6.662 1.47-10 4.486-17.583 19.028-33.2 44.405-45.563-.838-22.46-6.793-46.595-19-64.938-13.2-19.84-32.745-33.312-63.467-33.312zM232.188 223.5c9.157 0 16.593 7.405 16.593 16.563 0 9.157-7.435 16.593-16.593 16.593-9.157 0-16.562-7.436-16.562-16.594 0-9.157 7.405-16.562 16.563-16.562zm55.437 0c9.158 0 16.594 7.405 16.594 16.563 0 9.157-7.438 16.593-16.595 16.593-9.158 0-16.563-7.436-16.563-16.594 0-9.157 7.405-16.562 16.563-16.562zm-28.844 33.594c6.275 13.248 11.25 26.503 13.72 39.75-9.148-3.022-18.29-3.426-27.438 0 3.34-13.25 7.352-26.504 13.72-39.75zm-37.03 63.47c-2.136 6.42-5.285 12.778-9.188 19.03 11.93 7.99 31.58 12.81 50.875 12.594 18.97-.214 36.878-5.57 46.22-12.407-3.55-5.764-6.412-11.8-8.344-18-11.947 4.416-25.424 6.375-38.75 6.376-14.447.002-28.77-2.222-40.813-7.594zm-70.656 17.06c-8.9 11.268-12.694 22.493-10.03 36.313 68.925 5.54 164.194 31.92 226.686 60.75 9.16-11.166 12.518-22.67 9.97-36.78-67.77-6.867-164.135-28.736-226.626-60.282zm216.594 0c-20.79 10.496-45.326 19.907-71.313 28.063 20.298 4.434 40.253 8.04 58.72 10.688 7.782-1.026 15.357-1.853 22.624-2.438 2.66-13.82-1.133-25.045-10.033-36.312zm-203.75 57.532c-7.904 1.084-15.56 2.01-22.875 2.75-2.55 14.11.81 25.615 9.968 36.78 21.375-9.86 46.575-19.447 73.25-27.998-20.87-4.912-41.385-8.868-60.343-11.532z" fill="#fff" fill-opacity="1"></path></g></svg>

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

@ -0,0 +1 @@
<svg style="height: 512px; width: 512px;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><g class="" style="" transform="translate(0,0)"><path d="M488 348.78h-70.24l-15.1 87.44-48.78-87.44H169v-50h190v-157h129zm-145-273v207H158.13l-48.79 87.47-15.11-87.47H24v-207zM136.724 215.324c0-10.139-12.257-15.214-19.425-8.046-7.168 7.168-2.093 19.426 8.046 19.426 6.285 0 11.38-5.095 11.38-11.38zm60.945 0c-.068-10.12-12.32-15.122-19.452-7.943-7.131 7.18-2.047 19.399 8.073 19.399 6.314 0 11.422-5.141 11.38-11.456zm60.945 0c0-10.139-12.257-15.214-19.425-8.046-7.169 7.168-2.093 19.426 8.046 19.426 6.284 0 11.38-5.095 11.38-11.38z" fill="#fff" fill-opacity="1"></path></g></svg>

After

Width:  |  Height:  |  Size: 680 B

1
assets/default/skill.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" style="height: 512px; width: 512px;"><g class="" transform="translate(0,0)" style=""><path d="M119.1 25v.1c-25 3.2-47.1 32-47.1 68.8 0 20.4 7.1 38.4 17.5 50.9L99.7 157 84 159.9c-13.7 2.6-23.8 9.9-32.2 21.5-8.5 11.5-14.9 27.5-19.4 45.8-8.2 33.6-9.9 74.7-10.1 110.5h44l11.9 158.4h96.3L185 337.7h41.9c0-36.2-.3-77.8-7.8-111.7-4-18.5-10.2-34.4-18.7-45.9-8.6-11.4-19.2-18.7-34.5-21l-16-2.5L160 144c10-12.5 16.7-30.2 16.7-50.1 0-39.2-24.8-68.8-52.4-68.8-2.9 0-4.7-.1-5.2-.1zM440 33c-17.2 0-31 13.77-31 31s13.8 31 31 31 31-13.77 31-31-13.8-31-31-31zM311 55v48H208v18h103v158h-55v18h55v110H208v18h103v32h80.8c-.5-2.9-.8-5.9-.8-9 0-3.1.3-6.1.8-9H329V297h62.8c-.5-2.9-.8-5.9-.8-9 0-3.1.3-6.1.8-9H329V73h62.8c-.5-2.92-.8-5.93-.8-9 0-3.07.3-6.08.8-9H311zm129 202c-17.2 0-31 13.8-31 31s13.8 31 31 31 31-13.8 31-31-13.8-31-31-31zm0 160c-17.2 0-31 13.8-31 31s13.8 31 31 31 31-13.8 31-31-13.8-31-31-31z" fill="#fff" fill-opacity="1"></path></g></svg>

After

Width:  |  Height:  |  Size: 996 B

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" style="height: 512px; width: 512px;"><g class="" transform="translate(0,0)" style=""><path d="M311.9 47.95c-17.6 0-34.6.7-50.7 2.43L244.6 93.5l-4.9-40.04c-2.5.46-5 .94-7.5 1.47-9.1 1.94-15.1 7.22-20.3 14.87-5.2 7.65-8.9 17.5-12.1 26.6C191 121.5 184 148 178.4 175c6 5.1 12 10.3 17.9 15.4l30.7-17.6 33.8 26.1 51.9-19.7 61 24.5-6.8 16.7-54.4-21.8-54.7 20.7-32.2-24.9-14.9 8.5c19.6 17.3 38.6 34.4 56.5 51.2l14-6.4 33.9 16.1 31.2-13.1 24.2 23.3-12.4 13-15.8-15.1-27.6 11.7-33-15.8c6.9 6.7 13.6 13.2 20.1 19.7l1.7 1.8 19.5 76.3-7.8-5.7-53 .4-38.1-17.8-42.4 14.6-5.8-17 49.2-17 41.1 19.2 24.7-.2-70.7-51.7c-19.7 4.6-39.4 2.8-58.1-3.7-4.2 44.4-5.9 85.7-7 118.7-.4 10.7 2.7 23 7.5 32.5 4.9 9.5 11.7 15.4 15 16.1 5.2 1.2 19 3.2 37.7 5.1l12.4-39 19.1 41.7c16.7 1.2 35 2 53.5 2.2 28.2.3 57.1-.9 82-4.7 15.8-2.3 29.6-6 40.7-10.4-11.8-5.1-21.6-10.6-29.1-16.6-11.1-8.9-18.2-19.3-17.3-30.9v.2c5.4-96.4 10.8-188.8 30.3-286l.1-.4.1-.4c5.3-17.9 17.9-39.86 36.1-55.83-13.9-2.06-28.6-4-43.7-5.66l-22.3 25.3-2.2-27.7c-19-1.64-38.4-2.71-57.4-2.92h-5.7zm148.5 20.44c-4.7 3.69-9.2 8.03-13.3 12.73 12.1 8.18 21.4 23.38 21.8 36.98.3 7.8-1.9 14.9-7.7 21.4-5.8 6.4-15.6 12.4-31.6 15.8l3.8 17.6c18.6-4 32.3-11.5 41.2-21.4 9-9.9 12.7-22.2 12.3-34-.6-19.3-11.1-37.59-26.5-49.11zM25.44 71.91c-.24 1.61-.38 3.43-.38 5.62.1 7.69 2.03 18.17 5.83 30.17 3.41 10.7 8.27 22.5 14.35 34.8 10.63-5.3 20.59-11 28.41-18.1-4.42 12.5-10.15 24.7-18.6 36.5 4.14 7.2 8.63 14.4 13.45 21.5 10.64-5.3 20.72-13 29.52-26.1-3.3 16-8.47 30.6-18.27 41.8 6.53 8.5 13.5 16.8 20.75 24.5 8.7-9.3 15.6-21 20.7-34.9 3.8 18.5 2.6 35.3-5.7 49.4 8 7.2 16.3 13.7 24.8 19.1 6.1-14 8.9-30.6 8.5-49.7 9.2 23.7 11.3 42.9 9.6 59.5 20.2 9.2 40.8 12 61.3 6.1l4.2-1.3 69.3 50.6-5.9-22.8c-73-72.8-175.4-156.7-261.86-226.69zM312.8 123.9l33.2 13.8 31.3-9.9 5.4 17.2-37.5 11.9-33.6-14-28.8 8.1-4.8-17.4zm107.3 236.2c-.7 0-1.3.1-2 .1-3.5.1-7.2.5-11.1 1.3l3.4 17.6c12.2-2.3 20-.4 24.5 2.5 4.4 2.9 6.3 6.8 6.4 12.5.1 9.3-7 23-23.3 32.5 5.4 2.9 11.9 5.9 19.3 8.7 14.4-11.6 22.1-26.8 22-41.4-.1-10.7-5.2-21.2-14.6-27.4-6.7-4.3-15-6.5-24.6-6.4z" fill="#fff" fill-opacity="1"></path></g></svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

1
assets/default/spell.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" style="height: 512px; width: 512px;"><g class="" transform="translate(0,0)" style=""><path d="M319.61 20.654c13.145 33.114 13.144 33.115-5.46 63.5 33.114-13.145 33.116-13.146 63.5 5.457-13.145-33.114-13.146-33.113 5.457-63.498-33.114 13.146-33.113 13.145-63.498-5.459zM113.024 38.021c-11.808 21.04-11.808 21.04-35.724 24.217 21.04 11.809 21.04 11.808 24.217 35.725 11.808-21.04 11.808-21.04 35.724-24.217-21.04-11.808-21.04-11.808-24.217-35.725zm76.55 56.184c-.952 50.588-.95 50.588-41.991 80.18 50.587.95 50.588.95 80.18 41.99.95-50.588.95-50.588 41.99-80.18-50.588-.95-50.588-.95-80.18-41.99zm191.177 55.885c-.046 24.127-.048 24.125-19.377 38.564 24.127.047 24.127.046 38.566 19.375.047-24.126.046-24.125 19.375-38.564-24.126-.047-24.125-.046-38.564-19.375zm-184.086 83.88c-1.191.024-2.36.07-3.492.134-18.591 1.064-41.868 8.416-77.445 22.556L76.012 433.582c78.487-20.734 132.97-21.909 170.99-4.615V247.71c-18.076-8.813-31.79-13.399-46.707-13.737a91.166 91.166 0 0 0-3.629-.002zm122.686 11.42c-2.916-.026-5.81.011-8.514.098-12.81.417-27.638 2.215-45.84 4.522V427.145c43.565-7.825 106.85-4.2 171.244 7.566l-39.78-177.197c-35.904-8.37-56.589-11.91-77.11-12.123zm2.289 16.95c18.889.204 36.852 2.768 53.707 5.02l4.437 16.523c-23.78-3.75-65.966-4.906-92.467-.98l-.636-17.805c11.959-2.154 23.625-2.88 34.959-2.758zm-250.483 4.658l-10.617 46.004h24.094l10.326-46.004H71.158zm345.881 0l39.742 177.031 2.239 9.973 22.591-.152-40.855-186.852h-23.717zm-78.857 57.82c16.993.026 33.67.791 49.146 2.223l3.524 17.174c-32.645-3.08-72.58-2.889-102.995 0l-.709-17.174c16.733-1.533 34.04-2.248 51.034-2.223zm-281.793 6.18l-6.924 30.004h24.394l6.735-30.004H56.389zm274.418 27.244c4.656.021 9.487.085 14.716.203l2.555 17.498c-19.97-.471-47.115.56-59.728 1.05l-.7-17.985c16.803-.493 29.189-.828 43.157-.766zm41.476.447c8.268.042 16.697.334 24.121.069l2.58 17.74c-8.653-.312-24.87-.83-32.064-.502l-2.807-17.234a257.25 257.25 0 0 1 8.17-.073zm-326.97 20.309l-17.985 77.928 25.035-.17 17.455-77.758H45.313zm303.164 11.848c19.608-.01 38.66.774 56.449 2.572l2.996 20.787c-34.305-4.244-85.755-7.697-119.1-3.244l-.14-17.922c20.02-1.379 40.186-2.183 59.795-2.193zm-166.606 44.05c-30.112.09-67.916 6.25-115.408 19.76l-7.22 2.053 187.759-1.27v-6.347c-16.236-9.206-37.42-14.278-65.13-14.196zm134.41 6.174c-19.63.067-37.112 1.439-51.283 4.182v10.064l177.594-1.203c-44.322-8.634-89.137-13.17-126.31-13.043zM26 475v18h460v-18H26z" fill="#fff" fill-opacity="1"></path></g></svg>

After

Width:  |  Height:  |  Size: 2.4 KiB

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" style="height: 512px; width: 512px;"><g class="" transform="translate(0,0)" style=""><path d="M400 16c-21.335 9.73-58.244 17.34-73.086 48.232-22.36 1.948-72.753 10.673-122.22 40.25-58.098 34.74-116.017 97.417-131.776 213.702l-.48 3.537-2.774 2.25c-30.87 25.002-40.657 38.937-44.416 61.153-3.536 20.9-.72 51.46-.363 101.877H328.36c3.455-16.892 10.44-29.245 12.472-41.568 2.337-14.176.19-29.938-20.812-58.547-43.078-58.683-46.853-129.458-12.916-171.28-8.654-2.765-15.09-6.887-19.458-12.546-6.115-7.924-7.4-17.006-8.57-25.884l17.848-2.352c1.112 8.446 2.38 13.88 4.97 17.237 2.59 3.356 7.31 6.472 19.55 8.46l-.022.128.172-.17 5.998 9.424c19.957 31.358 42.84 51.292 73.332 54.44l6.51.672 1.367 6.4c2.74 12.828 8.626 19.095 15.116 22.238 6.49 3.143 14.225 2.944 20.47.205 9.316-4.086 14.518-11.35 16.7-22.712 2.122-11.05.546-25.834-5.137-42.106-33.538-38.248-44.475-87.277-63.903-128.772-6.055-9.947-12.448-18.518-20.385-24.856C376.808 55.126 386.456 34.852 400 16zM214.068 34.97C179.55 35.06 146.075 43.06 96 58.58c31.146 9.92 70.397 18.9 86.037 39.01 4.463-3.017 8.94-5.88 13.418-8.56 40.51-24.22 80.387-35.286 108.23-40.04-35.854-9.477-63.047-14.094-89.617-14.023zM157.16 96.712c-1.13-.01-2.265-.01-3.402.004-30.353.37-63.1 9.745-96.647 31.283 27.186 3.672 54.67 3.724 72.58 15.398 15.9-17.92 33.144-32.634 50.677-44.668-7.548-1.244-15.292-1.938-23.207-2.017zM368 128a13.214 13.215 0 0 1 13.213 13.215A13.214 13.215 0 0 1 368 154.432a13.214 13.215 0 0 1-13.213-13.217A13.214 13.215 0 0 1 368 128zm-238.906 16.068c-36.395 1.495-68.903 6.53-104.76 24.766 33.236 7.095 50.913 13.507 65.025 33.83 11.522-22.53 25.045-41.93 39.734-58.596zM74.518 201.46C53.53 201.65 36.614 213.14 16 224c27.854 0 46.067 3.862 58.71 12.055 4.33-11.652 9.16-22.615 14.41-32.924-5.12-1.19-9.963-1.71-14.602-1.67zm-.623 36.82c-17.933 5.845-35.452 7.15-54.23 22.284 17.62 4.638 34.79 9.596 41.398 22.034 3.496-15.77 7.814-30.523 12.832-44.32zm370.142 8.57c1.617-.035 3.222.044 4.783.187l-1.64 17.926c-3.928-.36-5.513.416-5.57.465-.058.048-1.035.656-.635 5.886l-17.95 1.372c-.638-8.35 1.297-16.207 6.955-20.997 4.245-3.593 9.206-4.735 14.057-4.84zM52.215 290.723c-10.352.13-23.76 5.646-34.656 12.334 12.173 6.83 12.357 23.472 8.938 37.668 7.3-9.105 16.855-18.323 29.158-28.48 1.016-7.043 2.19-13.9 3.506-20.585-2.082-.67-4.42-.97-6.947-.937z" fill="#fff" fill-opacity="1"></path></g></svg>

After

Width:  |  Height:  |  Size: 2.4 KiB

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" style="height: 512px; width: 512px;"><g class="" transform="translate(0,0)" style=""><path d="M43.53 15.75c-15.73 0-28.31 12.583-28.31 28.313 0 14.086 10.092 25.644 23.5 27.906L42.687 68 68.81 41.906l2.626-2.625C69.188 25.86 57.63 15.75 43.53 15.75zm33.72 44.125l-17 17c15.885 39.37 43.45 66.684 78.75 87.406 8.167-8.585 16.65-16.898 25.438-24.936-22.488-35.103-51.535-62.294-87.188-79.47zM322.594 79.03l-51.25 4.314c-79.356 48.134-143.878 108.1-186.72 186.53l-4.31 51.47 44.155-18.656-2.94-34.094-.25-3.063 1.626-2.624c35.94-58.47 79.93-109.41 141.5-141.25l2.406-1.25 2.688.25 34.125 2.906 18.97-44.53zm-62.438 66.376c-10.008 5.886-19.5 12.338-28.562 19.313 46.688 47.93 87.208 108.588 114.72 166.5l11.248 23.717-23.718-11.28c-57.995-27.554-117.918-67.57-165.688-113.907-7.155 9.404-14.028 19.174-20.625 29.28 101.918 94.91 227.05 177.304 347.845 234.69-57.063-120.125-140.038-246.18-235.22-348.314zm-43.03 31.22c-13.37 11.703-25.72 24.58-37.282 38.436 39.36 38.452 88.085 72.83 136.687 98.844-26.054-48.633-60.754-97.847-99.405-137.28z" fill="#fff" fill-opacity="1"></path></g></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

18
gulpfile.js Normal file
View File

@ -0,0 +1,18 @@
var gulp = require('gulp');
var less = require('gulp.less');
gulp.task('less', function (cb) {
gulp
.src('less/rmss.less')
.pipe(less())
.pipe(gulp.dest("./"));
cb();
});
gulp.task(
'default',
gulp.series('less', function(cb) {
gulp.watch('less/*.less', gulp.series('less'));
cb();
})
);

265
lang/en.json Normal file
View File

@ -0,0 +1,265 @@
{
"rmss": {
"player_character": {
"name": "Name:",
"level": "Level:",
"experience": "XP:",
"resources": {
"hits": "Hits",
"exhaustion_points": "Exhaustion Points",
"power_points": "Power Points"
},
"attribute_headers": {
"stat": "Stat",
"temp": "Temp",
"pot": "Potential",
"basic_bonus": "Basic Bonus",
"racial_bonus": "Racial Bonus",
"special_bonus": "Special Bonus",
"stat_bonus": "Stat Bonus"
},
"attribute": {
"agility": "Agility",
"agility_short": "Ag",
"constitution": "Constitution",
"memory": "Memory",
"reasoning": "Reasoning",
"self_discipline": "Self Discipline",
"empathy": "Empathy",
"intuition": "Intuition",
"presence": "Presence",
"quickness": "Quickness",
"strength": "Strength",
"stat_total": "Total"
}
},
"pc_sheet": {
"import_skillcat": "Import"
},
"pc_sheet_tabs": {
"record": "Record",
"skill_categories": "Skill Categories",
"skills": "Skills",
"equipment": "Equipment",
"spells": "Spells",
"status_record": "Status Record",
"experience_points": "Experience Points"
},
"pc_sheet_fixed_info": {
"race": "Race:",
"profession": "Profession:",
"training_packages": "Training Packages:",
"realm": "Realm:"
},
"pc_sheet_armor_info": {
"armor_type": "Armor Type:",
"mmp": "MMP:",
"weight_penalty": "Weight Penalty:",
"missile_penalty": "Missile Penalty:",
"quickness_penalty": "Quickness Penalty:",
"quickness_bonus": "Quickness Bonus:",
"adrenal_defense": "Adrenal Defence:",
"shield_bonus": "Shield Bonus:",
"magic": "Magic (Spells, Items, etc.):",
"total_db": "Total DB:"
},
"pc_sheet_resistances": {
"channeling": "Channeling",
"essence": "Essence",
"mentalism": "Mentalism",
"chann_ess": "Chann/Ess",
"chann_ment": "Chann/Ment",
"ess_ment": "Ess/Ment",
"arcane": "Arcane",
"poison_disease": "Poison/Disease",
"fear": "Fear"
},
"pc_sheet_race_stat_fixed_info": {
"soul_departure": "Soul Departs in X Rounds:",
"recovery_multiplier": "Recovery Multiplier:",
"body_dev_progression": "Body Development Progression:",
"pp_dev_progression": "PP Development Progression:",
"recover_hits_per_hour": "Recover X hits/hour resting:",
"recover_hits_per_sleep_cycle": "Recover X hits/sleep cycle:",
"recover_pp_per_hour": "Recover X PP/hour resting:",
"recover_pp_per_sleep_cycle": "Recover X PP/sleep cycle:"
},
"pc_sheet_role_traits": {
"appearance": "Appearance:",
"sex": "Sex:",
"skin": "Skin:",
"apparent_age": "Apparent Age:",
"actual_age": "Actual Age:",
"height": "Height:",
"weight": "Weight:",
"hair": "Hair:",
"eyes": "Eyes:",
"personality": "Personality:",
"motivations": "Motivations:",
"alignment": "Alignment:"
},
"pc_sheet_background_info": {
"nationality": "Nationality:",
"home_town": "Home Town:",
"deity": "Deity:",
"patron": "Patron:",
"parents": "Parents:",
"spouse": "Spouse",
"children": "Children:",
"other": "Other:"
},
"pc_sheet_skills": {
"favorite": "Favorite?",
"skill_name": "Skill Name",
"ranks": "# Ranks",
"new_ranks": "New Ranks",
"rank_bonus": "Rank Bonus",
"category_bonus": "Category Bonus",
"item_bonus": "Item Bonus",
"special_bonus": "Special Bonus",
"total_bonus": "Total Bonus",
"add_skill": "Add Skill"
},
"pc_sheet_skill_categories": {
"skillcat_name": "Skill Category Name",
"applicable_stats": "Applicable Stats",
"dev_cost": "Dev Cost",
"ranks": "# Ranks",
"new_ranks": "New Ranks",
"rank_bonus": "Rank Bonus",
"stat_bonus": "Stat Bonus",
"prof_bonus": "Prof Bonus",
"special_bonus": "Special Bonus",
"total_bonus": "Total Bonus",
"import_skillcat": "Import Skill Categories"
},
"pc_sheet_items": {
"equipped": "Equipped",
"worn": "Worn",
"favorite": "Favorite",
"quantity": "Quantity",
"item_name": "Item Name",
"weight": "Weight",
"cost": "Cost",
"add_item": "Add Item"
},
"pc_sheet_spell": {
"favorite": "Favorite",
"level": "Level",
"name": "Name",
"spell_list": "Spell List",
"area_of_effect": "Area of Effect",
"duration": "Duration",
"range": "Range",
"type": "Type"
},
"pc_sheet_language": {
"name": "Name",
"spoken": "Spoken",
"written": "Written"
},
"entity_sheet": {
"spell": "RMSS Spell",
"weapon": "RMSS Weapon",
"item": "RMSS Armor",
"armor": "RMSS Item",
"herb_or_poison": "RMSS Herb or Poison",
"transport": "RMSS Transport",
"skill": "RMSS Skill",
"skill_category": "RMSS Skill Category",
"player_characrer": "RMSS Player Character",
"npc": "RMSS NPC",
"creature": "RMSS Creature"
},
"currency_type": {
"mp": "Mithril Pieces",
"pp": "Platinum Pieces",
"gp": "Gold Pieces",
"sp": "Silver Pieces",
"bp": "Bronze Pieces",
"cp": "Copper Pieces"
},
"item": {
"worn": "Worn",
"description": "Other Notes",
"quantity": "Quantity",
"weight": "Weight",
"cost": "Cost",
"prod_time": "Production Time",
"equipped": "Equipped"
},
"armor": {
"at": "AT",
"weight": "Weight",
"cost": "Cost",
"prod_time": "Production Time"
},
"weapon": {
"cost": "Cost",
"type": "Type",
"prod_time": "Production Time",
"weight": "Weight",
"breakage_range": "B#s",
"strength": "Str",
"fumble_range": "Fumble",
"equipped": "Equipped"
},
"herb_or_poison": {
"codes": "Codes",
"weight": "Weight",
"form_and_prep": "Form/Prep",
"cost": "Cost",
"af": "AF"
},
"transport": {
"cost": "Cost",
"feet_per_round": "ft/rnd",
"miles_per_hour": "mi/hr",
"maneuver": "Man",
"height": "Height",
"weight": "Weight",
"capacity": "Capacity",
"offensive_bonus": "OB"
},
"spell": {
"favorite": "Favorite",
"spell_list": "Spell List",
"level": "Level",
"area_of_effect": "Area of Effect",
"duration": "Duration",
"range": "Range",
"type": "Type",
"description": "Description"
},
"skill_category": {
"applicable_stats": "Applicable Stats:",
"development_cost" : "Development Cost:",
"ranks": "Ranks:",
"new_ranks": "New Ranks:",
"rank_bonus": "Rank Bonus:",
"stat_bonus": "Stat Bonus:",
"prof_bonus": "Prof Bonus:",
"special_bonus_1": "Special Bonus 1:",
"special_bonus_2": "Special Bonus 2:",
"total_bonus": "Total Bonus:",
"description": "Description:"
},
"skill": {
"favorite": "Favorite?",
"ranks": "Ranks:",
"new_ranks": "New Ranks:",
"rank_bonus": "Rank Bonus:",
"category_bonus": "Category Bonus:",
"item_bonus": "Item Bonus:",
"special_bonus_1": "Special Bonus 1:",
"special_bonus_2": "Special Bonus 2:",
"total_bonus": "Total Bonus:",
"description": "Description:"
},
"language": {
"spoken": "Spoken",
"written": "Written",
"description": "Description"
}
}
}

153
less/actor-sheet.less Normal file
View File

@ -0,0 +1,153 @@
// General Elements
.container {
display: flex;
}
// Header CSS
.actor-icon {
flex-shrink: 1;
}
.header-container {
flex-grow: 2;
outline: 1px solid; /* use instead of border */
margin-top: 1px;
margin-left: 1px;
padding: 5px;
}
.header-text {
display: flex;
flex-direction: row;
justify-content: center;
}
// Resource Elements in Headers
.resource-container {
display: flex;
flex-direction: row;
flex-grow: 3;
text-align: -webkit-center;
}
.resource-container > * {
flex: 1 1 0;
}
.resource-entry {
outline: 1px solid; /* use instead of border */
margin-top: 1px;
margin-left: 1px;
padding: 5px;
}
.resource-entry input{
width: 50px;
border: none;
}
.stat-container {
flex-direction: column;
flex-shrink: 1;
}
.equipment-container {
flex-direction: column;
flex-grow: 1;
}
.stat-block {
outline: 1px solid; /* use instead of border */
margin-top: 1px;
margin-left: 1px;
padding: 5px;
}
.stat-name, .money-name {
width: 75px;
border: none;
font-family: Signika, sans-serif;
font-size: 12px;
}
.stat-name input {
border: none;
}
.stat-header {
font-family: Signika, sans-serif;
font-size: 12px;
}
// Fixed Info CSS
.fixed-info-container {
flex-grow: 3;
flex-direction: row;
font-family: Signika, sans-serif;
font-size: 12px;
}
.fixed-info-section {
outline: 1px solid; /* use instead of border */
margin-top: 1px;
margin-left: 1px;
padding: 5px;
}
.armor-block {
outline: 1px solid; /* use instead of border */
margin-top: 1px;
margin-left: 1px;
padding: 5px;
}
.race-stat-fixed-info-block {
outline: 1px solid; /* use instead of border */
margin-top: 1px;
margin-left: 1px;
padding: 5px;
}
.role-traits-block {
outline: 1px solid; /* use instead of border */
margin-top: 1px;
margin-left: 1px;
padding: 5px;
}
.background-info-block {
outline: 1px solid; /* use instead of border */
margin-top: 1px;
margin-left: 1px;
padding: 5px;
}
.resistance-block {
outline: 1px solid; /* use instead of border */
margin-top: 1px;
margin-left: 1px;
padding: 5px;
}
// Debugging
.red {
background-color: orangered;
}
.blue {
background-color: lightblue;
}
.grey {
background-color: lightgrey;
}
.green {
background-color: lightseagreen;
}

View File

@ -0,0 +1,44 @@
.armor-grid-container {
display: grid;
grid-template-columns: [name] 30% [equipped] 12% [at] 12% [quantity] 12% [weight] 12% [cost] 12% [controls] 10%;
}
.armor-grid-container > div {
font-family: Signika, sans-serif;
font-size: 12px;
text-align: center;
border-bottom: 1px solid;
padding-top: 3px;
padding-bottom: 3px;
display: flex;
justify-content: flex-end;
flex-direction: row;
justify-content: center;
}
.armor-grid-container > div:nth-child(14n+1),
.armor-grid-container > div:nth-child(14n+2),
.armor-grid-container > div:nth-child(14n+3),
.armor-grid-container > div:nth-child(14n+4),
.armor-grid-container > div:nth-child(14n+5),
.armor-grid-container > div:nth-child(14n+6),
.armor-grid-container > div:nth-child(14n+7)
{
font-family: Signika, sans-serif;
font-size: 12px;
text-align: center;
border-bottom: 1px solid;
padding-top: 3px;
padding-bottom: 3px;
display: flex;
justify-content: flex-end;
flex-direction: row;
justify-content: center;
background-image: linear-gradient(rgba(0, 0, 0, 0.1) 0 0);
}
.armor-grid-heading {
font-weight: bold;
border-bottom: 1px solid;
background-image: linear-gradient(rgba(0, 0, 0, 0.1) 0 0);
}

View File

@ -0,0 +1,44 @@
.herbs-grid-container {
display: grid;
grid-template-columns: [name] 30% [quantity] 11% [codes] 12% [af] 12% [weight] 12% [cost] 11% [controls] 12%;
}
.herbs-grid-container > div {
font-family: Signika, sans-serif;
font-size: 12px;
text-align: center;
border-bottom: 1px solid;
padding-top: 3px;
padding-bottom: 3px;
display: flex;
justify-content: flex-end;
flex-direction: row;
justify-content: center;
}
.herbs-grid-container > div:nth-child(14n+1),
.herbs-grid-container > div:nth-child(14n+2),
.herbs-grid-container > div:nth-child(14n+3),
.herbs-grid-container > div:nth-child(14n+4),
.herbs-grid-container > div:nth-child(14n+5),
.herbs-grid-container > div:nth-child(14n+6),
.herbs-grid-container > div:nth-child(14n+7)
{
font-family: Signika, sans-serif;
font-size: 12px;
text-align: center;
border-bottom: 1px solid;
padding-top: 3px;
padding-bottom: 3px;
display: flex;
justify-content: flex-end;
flex-direction: row;
justify-content: center;
background-image: linear-gradient(rgba(0, 0, 0, 0.1) 0 0);
}
.herbs-grid-heading {
font-weight: bold;
border-bottom: 1px solid;
background-image: linear-gradient(rgba(0, 0, 0, 0.1) 0 0);
}

View File

@ -0,0 +1,43 @@
.items-grid-container {
display: grid;
grid-template-columns: [worn] 10% [name] 30% [quantity] 15% [weight] 15% [cost] 15% [controls] 15%;
}
.items-grid-container > div {
font-family: Signika, sans-serif;
font-size: 12px;
text-align: center;
border-bottom: 1px solid;
padding-top: 3px;
padding-bottom: 3px;
display: flex;
justify-content: flex-end;
flex-direction: row;
justify-content: center;
}
.items-grid-container > div:nth-child(12n+1),
.items-grid-container > div:nth-child(12n+2),
.items-grid-container > div:nth-child(12n+3),
.items-grid-container > div:nth-child(12n+4),
.items-grid-container > div:nth-child(12n+5),
.items-grid-container > div:nth-child(12n+6)
{
font-family: Signika, sans-serif;
font-size: 12px;
text-align: center;
border-bottom: 1px solid;
padding-top: 3px;
padding-bottom: 3px;
display: flex;
justify-content: flex-end;
flex-direction: row;
justify-content: center;
background-image: linear-gradient(rgba(0, 0, 0, 0.1) 0 0);
}
.items-grid-heading {
font-weight: bold;
border-bottom: 1px solid;
background-image: linear-gradient(rgba(0, 0, 0, 0.1) 0 0);
}

View File

@ -0,0 +1,9 @@
.money-column {
flex-direction: column;
}
.money-container {
flex-direction: column;
flex-shrink: 1;
padding-left: 10px;
}

View File

@ -0,0 +1,18 @@
.resistances-grid-container {
outline: 1px solid; /* use instead of border */
margin-top: 1px;
margin-left: 1px;
padding: 5px;
display: grid;
grid-template-columns: [Name] 40% [Value] 20% [Race_Mod] 20% [Total] 20%;
}
.resistances-grid-heading {
font-weight: bold;
border-bottom: 1px solid;
background-image: linear-gradient(rgba(0, 0, 0, 0.1) 0 0);
}
.resistance-input {
width: 50%
}

View File

@ -0,0 +1,49 @@
.skillcat-grid-container {
display: grid;
grid-template-columns: [skill-category-name] 10% [applicable-stats] 10% [dev-cost] 8% [num-ranks] 8% [new-ranks] 8% [rank-bonus] 8% [stat-bonus] 8% [prof-bonus] 8% [special-bonus-1] 8% [special-bonus-2] 8% [total-bonus] 8% [controls] 8%;
}
.skillcat-grid-container > div {
font-family: Signika, sans-serif;
font-size: 12px;
text-align: center;
border-bottom: 1px solid;
padding-top: 3px;
padding-bottom: 3px;
display: flex;
justify-content: flex-end;
flex-direction: column;
justify-content: center;
}
.skillcat-grid-container > div:nth-child(24n+1),
.skillcat-grid-container > div:nth-child(24n+2),
.skillcat-grid-container > div:nth-child(24n+3),
.skillcat-grid-container > div:nth-child(24n+4),
.skillcat-grid-container > div:nth-child(24n+5),
.skillcat-grid-container > div:nth-child(24n+6),
.skillcat-grid-container > div:nth-child(24n+7),
.skillcat-grid-container > div:nth-child(24n+8),
.skillcat-grid-container > div:nth-child(24n+9),
.skillcat-grid-container > div:nth-child(24n+10),
.skillcat-grid-container > div:nth-child(24n+11),
.skillcat-grid-container > div:nth-child(24n+12)
{
font-family: Signika, sans-serif;
font-size: 12px;
text-align: center;
border-bottom: 1px solid;
padding-top: 3px;
padding-bottom: 3px;
display: flex;
justify-content: flex-end;
flex-direction: column;
justify-content: center;
background-image: linear-gradient(rgba(0, 0, 0, 0.1) 0 0);
}
.skillcat-grid-heading {
font-weight: bold;
border-bottom: 1px solid;
background-image: linear-gradient(rgba(0, 0, 0, 0.1) 0 0);
}

View File

@ -0,0 +1,48 @@
.skills-grid-container {
display: grid;
grid-template-columns: [favorite] 9% [skill-name] 11% [num-ranks] 9% [new-ranks] 9% [rank-bonus] 9% [category-bonus] 9% [item-bonus] 9% [special-bonus-1] 9% [special-bonus-2] 9% [total-bonus] 9% [controls] 8%;
}
.skills-grid-container > div {
font-family: Signika, sans-serif;
font-size: 12px;
text-align: center;
border-bottom: 1px solid;
padding-top: 3px;
padding-bottom: 3px;
display: flex;
justify-content: flex-end;
flex-direction: column;
justify-content: center;
}
.skills-grid-container > div:nth-child(22n+1),
.skills-grid-container > div:nth-child(22n+2),
.skills-grid-container > div:nth-child(22n+3),
.skills-grid-container > div:nth-child(22n+4),
.skills-grid-container > div:nth-child(22n+5),
.skills-grid-container > div:nth-child(22n+6),
.skills-grid-container > div:nth-child(22n+7),
.skills-grid-container > div:nth-child(22n+8),
.skills-grid-container > div:nth-child(22n+9),
.skills-grid-container > div:nth-child(22n+10),
.skills-grid-container > div:nth-child(22n+11)
{
font-family: Signika, sans-serif;
font-size: 12px;
text-align: center;
border-bottom: 1px solid;
padding-top: 3px;
padding-bottom: 3px;
display: flex;
justify-content: flex-end;
flex-direction: column;
justify-content: center;
background-image: linear-gradient(rgba(0, 0, 0, 0.1) 0 0);
}
.skills-grid-heading {
font-weight: bold;
border-bottom: 1px solid;
background-image: linear-gradient(rgba(0, 0, 0, 0.1) 0 0);
}

View File

@ -0,0 +1,46 @@
.spell-grid-container {
display: grid;
grid-template-columns: [favorite] 9% [level] 8% [name] 30% [spell_list] 9% [area_of_effect] 9% [duration] 9% [range] 9% [type] 9% [controls] 8%;
}
.spell-grid-container > div {
font-family: Signika, sans-serif;
font-size: 12px;
text-align: center;
border-bottom: 1px solid;
padding-top: 3px;
padding-bottom: 3px;
display: flex;
justify-content: flex-end;
flex-direction: row;
justify-content: center;
}
.spell-grid-container > div:nth-child(18n+1),
.spell-grid-container > div:nth-child(18n+2),
.spell-grid-container > div:nth-child(18n+3),
.spell-grid-container > div:nth-child(18n+4),
.spell-grid-container > div:nth-child(18n+5),
.spell-grid-container > div:nth-child(18n+6),
.spell-grid-container > div:nth-child(18n+7),
.spell-grid-container > div:nth-child(18n+8),
.spell-grid-container > div:nth-child(18n+9)
{
font-family: Signika, sans-serif;
font-size: 12px;
text-align: center;
border-bottom: 1px solid;
padding-top: 3px;
padding-bottom: 3px;
display: flex;
justify-content: flex-end;
flex-direction: row;
justify-content: center;
background-image: linear-gradient(rgba(0, 0, 0, 0.1) 0 0);
}
.spell-grid-heading {
font-weight: bold;
border-bottom: 1px solid;
background-image: linear-gradient(rgba(0, 0, 0, 0.1) 0 0);
}

View File

@ -0,0 +1,46 @@
.weapons-grid-container {
display: grid;
grid-template-columns: [name] 30% [equipped] 8% [breakage_range] 9% [fumble_range] 9% [strength] 9% [quantity] 9% [weight] 9% [cost] 9% [controls] 8%;
}
.weapons-grid-container > div {
font-family: Signika, sans-serif;
font-size: 12px;
text-align: center;
border-bottom: 1px solid;
padding-top: 3px;
padding-bottom: 3px;
display: flex;
justify-content: flex-end;
flex-direction: row;
justify-content: center;
}
.weapons-grid-container > div:nth-child(18n+1),
.weapons-grid-container > div:nth-child(18n+2),
.weapons-grid-container > div:nth-child(18n+3),
.weapons-grid-container > div:nth-child(18n+4),
.weapons-grid-container > div:nth-child(18n+5),
.weapons-grid-container > div:nth-child(18n+6),
.weapons-grid-container > div:nth-child(18n+7),
.weapons-grid-container > div:nth-child(18n+8),
.weapons-grid-container > div:nth-child(18n+9)
{
font-family: Signika, sans-serif;
font-size: 12px;
text-align: center;
border-bottom: 1px solid;
padding-top: 3px;
padding-bottom: 3px;
display: flex;
justify-content: flex-end;
flex-direction: row;
justify-content: center;
background-image: linear-gradient(rgba(0, 0, 0, 0.1) 0 0);
}
.weapons-grid-heading {
font-weight: bold;
border-bottom: 1px solid;
background-image: linear-gradient(rgba(0, 0, 0, 0.1) 0 0);
}

View File

@ -0,0 +1,166 @@
// General Elements
.container {
display: flex;
}
// Header CSS
.actor-icon {
flex-shrink: 1;
}
.favorite-container {
padding: 5px;
}
.header-container {
flex-grow: 2;
outline: 1px solid; /* use instead of border */
margin-top: 1px;
margin-left: 1px;
padding: 5px;
}
.header-text {
display: flex;
align-items: center;
padding: 1px;
}
.settings-button, .playersheet-settings {
font-family: Signika, sans-serif;
font-size: 12px;
margin-right: 6px
}
// Resource Elements in Headers
.resource-container {
display: flex;
flex-direction: row;
flex-grow: 3;
text-align: -webkit-center;
}
.resource-container > * {
flex: 1 1 0;
}
.resource-entry {
outline: 1px solid; /* use instead of border */
margin-top: 1px;
margin-left: 1px;
padding: 5px;
}
.resource-entry input{
width: 50px;
border: none;
}
.stat-container {
flex-direction: column;
flex-shrink: 1;
}
.stat-row {
align-items: center;
}
.equipment-container {
flex-direction: column;
flex-grow: 1;
}
.stat-block {
outline: 1px solid; /* use instead of border */
margin-top: 1px;
margin-left: 1px;
padding: 5px;
}
.stat-name, .money-name {
width: 75px;
border: none;
font-family: Signika, sans-serif;
font-size: 12px;
}
.stat-name input {
border: none;
}
.stat-header {
font-family: Signika, sans-serif;
font-size: 12px;
}
// Fixed Info CSS
.fixed-info-container {
flex-grow: 3;
flex-direction: row;
font-family: Signika, sans-serif;
font-size: 12px;
}
.fixed-info-section {
outline: 1px solid; /* use instead of border */
margin-top: 1px;
margin-left: 1px;
padding: 5px;
}
.armor-block {
outline: 1px solid; /* use instead of border */
margin-top: 1px;
margin-left: 1px;
padding: 5px;
}
.race-stat-fixed-info-block {
outline: 1px solid; /* use instead of border */
margin-top: 1px;
margin-left: 1px;
padding: 5px;
}
.role-traits-block {
outline: 1px solid; /* use instead of border */
margin-top: 1px;
margin-left: 1px;
padding: 5px;
}
.background-info-block {
outline: 1px solid; /* use instead of border */
margin-top: 1px;
margin-left: 1px;
padding: 5px;
}
// Remove Me
.resistance-block {
outline: 1px solid; /* use instead of border */
margin-top: 1px;
margin-left: 1px;
padding: 5px;
}
// Debugging
.red {
background-color: orangered;
}
.blue {
background-color: lightblue;
}
.grey {
background-color: lightgrey;
}
.green {
background-color: lightseagreen;
}

118
less/grid.less Normal file
View File

@ -0,0 +1,118 @@
.skillcat-grid-container {
display: grid;
grid-template-columns: [skill-category-name] 10% [applicable-stats] 10% [dev-cost] 8% [num-ranks] 8% [new-ranks] 8% [rank-bonus] 8% [stat-bonus] 8% [prof-bonus] 8% [special-bonus-1] 8% [special-bonus-2] 8% [total-bonus] 8% [controls] 8%;
}
.skillcat-grid-container > div {
font-family: Signika, sans-serif;
font-size: 12px;
text-align: center;
border-bottom: 1px solid;
padding-top: 3px;
padding-bottom: 3px;
display: flex;
justify-content: flex-end;
flex-direction: column;
justify-content: center;
}
.skillcat-grid-container > div:nth-child(24n+1),
.skillcat-grid-container > div:nth-child(24n+2),
.skillcat-grid-container > div:nth-child(24n+3),
.skillcat-grid-container > div:nth-child(24n+4),
.skillcat-grid-container > div:nth-child(24n+5),
.skillcat-grid-container > div:nth-child(24n+6),
.skillcat-grid-container > div:nth-child(24n+7),
.skillcat-grid-container > div:nth-child(24n+8),
.skillcat-grid-container > div:nth-child(24n+9),
.skillcat-grid-container > div:nth-child(24n+10),
.skillcat-grid-container > div:nth-child(24n+11),
.skillcat-grid-container > div:nth-child(24n+12)
{
font-family: Signika, sans-serif;
font-size: 12px;
text-align: center;
border-bottom: 1px solid;
padding-top: 3px;
padding-bottom: 3px;
display: flex;
justify-content: flex-end;
flex-direction: column;
justify-content: center;
background-image: linear-gradient(rgba(0, 0, 0, 0.1) 0 0);
}
.skillcat-grid-heading {
font-weight: bold;
border-bottom: 1px solid;
background-image: linear-gradient(rgba(0, 0, 0, 0.1) 0 0);
}
.skills-grid-container {
display: grid;
grid-template-columns: [favorite] 9% [skill-name] 11% [num-ranks] 9% [new-ranks] 9% [rank-bonus] 9% [category-bonus] 9% [item-bonus] 9% [special-bonus-1] 9% [special-bonus-2] 9% [total-bonus] 9% [controls] 8%;
}
.skills-grid-container > div {
font-family: Signika, sans-serif;
font-size: 12px;
text-align: center;
border-bottom: 1px solid;
padding-top: 3px;
padding-bottom: 3px;
display: flex;
justify-content: flex-end;
flex-direction: column;
justify-content: center;
}
.skills-grid-container > div:nth-child(22n+1),
.skills-grid-container > div:nth-child(22n+2),
.skills-grid-container > div:nth-child(22n+3),
.skills-grid-container > div:nth-child(22n+4),
.skills-grid-container > div:nth-child(22n+5),
.skills-grid-container > div:nth-child(22n+6),
.skills-grid-container > div:nth-child(22n+7),
.skills-grid-container > div:nth-child(22n+8),
.skills-grid-container > div:nth-child(22n+9),
.skills-grid-container > div:nth-child(22n+10),
.skills-grid-container > div:nth-child(22n+11)
{
font-family: Signika, sans-serif;
font-size: 12px;
text-align: center;
border-bottom: 1px solid;
padding-top: 3px;
padding-bottom: 3px;
display: flex;
justify-content: flex-end;
flex-direction: column;
justify-content: center;
background-image: linear-gradient(rgba(0, 0, 0, 0.1) 0 0);
}
.skills-grid-heading {
font-weight: bold;
border-bottom: 1px solid;
background-image: linear-gradient(rgba(0, 0, 0, 0.1) 0 0);
}
.applicable-stats-grid-container {
display: grid;
grid-template-columns: [app-stat-1] 33% [app-stat-2] 33% [dapp-stat-3] 33%;
}
.applicable-stats-grid-container > div {
font-family: Signika, sans-serif;
font-size: 12px;
text-align: center;
border-bottom: 1px solid;
padding-top: 3px;
padding-bottom: 3px;
display: flex;
justify-content: flex-end;
flex-direction: column;
justify-content: center;
}

14
less/item-sheet.less Normal file
View File

@ -0,0 +1,14 @@
.sheet {
form {
display: flex;
flex-direction: column;
}
.sheet-content {
height: 100%;
display: flex;
flex-direction: column;
.editor {
height: 100%
}
}
}

8
less/money-sheet.less Normal file
View File

@ -0,0 +1,8 @@
.money-column {
flex-direction: column;
}
.money-container {
flex-direction: column;
flex-shrink: 1;
}

20
less/rmss.less Normal file
View File

@ -0,0 +1,20 @@
// Actor Sheet
@import "./actor-sheet/actor-sheet-skillcat.less";
@import "./actor-sheet/actor-sheet.less";
@import "./actor-sheet/actor-sheet-skills.less";
@import "./actor-sheet/actor-sheet-money.less";
@import "./actor-sheet/actor-sheet-items.less";
@import "./actor-sheet/actor-sheet-weapons.less";
@import "./actor-sheet/actor-sheet-armor.less";
@import "./actor-sheet/actor-sheet-herbs.less";
@import "./actor-sheet/actor-sheet-spells.less";
@import "./actor-sheet/actor-sheet-resistances.less";
//Skill Category Sheet
@import "./skillcat-sheet/skillcat-sheet.less";
@import "./skillcat-sheet/applicable-stats-grid.less";
// Generics
@import "./item-sheet.less";

23
less/skillcat-sheet.less Normal file
View File

@ -0,0 +1,23 @@
.skillcat-name, .skill-name, .item-name {
font-family: Signika, sans-serif;
font-size: 12px;
font-weight: bold;
text-align: center;
}
.skillcat-entry, .skill-entry, .item-entry {
font-family: Signika, sans-serif;
font-size: 12px;
text-align: center;
}
.skillcat-headeritem, .skill-headeritem, .item-headeritem {
text-align: center;
font-weight: bold;
}
.skillcat-controls, .skill-controls, .item-controls {
font-family: Signika, sans-serif;
font-size: 12px;
text-align: center;
}

View File

@ -0,0 +1,19 @@
.applicable-stats-grid-container {
display: grid;
grid-template-columns: [app-stat-1] 33% [app-stat-2] 33% [app-stat-3] 33%;
}
.applicable-stats-grid-container > div {
font-family: Signika, sans-serif;
font-size: 12px;
text-align: center;
border-bottom: 1px solid;
padding-top: 3px;
padding-bottom: 3px;
display: flex;
justify-content: flex-end;
flex-direction: column;
justify-content: center;
}

View File

@ -0,0 +1,23 @@
.skillcat-name, .skill-name, .item-name, .spell-name, .equipable-name {
font-family: Signika, sans-serif;
font-size: 12px;
font-weight: bold;
text-align: center;
}
.skillcat-entry, .skill-entry, .item-entry, .spell-entry, .equipable-entry {
font-family: Signika, sans-serif;
font-size: 12px;
text-align: center;
}
.skillcat-headeritem, .skill-headeritem, .item-headeritem, .spell-headeritem, .equipable-headeritem {
text-align: center;
font-weight: bold;
}
.skillcat-controls, .skill-controls, .item-controls {
font-family: Signika, sans-serif;
font-size: 12px;
text-align: center;
}

19
less/table.less Normal file
View File

@ -0,0 +1,19 @@
.table-font {
font-family: Signika, sans-serif;
font-size: 12px;
text-align: center;
}
.table-bold {
font-weight: bold;
}
.table-center {
text-align: center;
}
.table-controls {
font-family: Signika, sans-serif;
font-size: 12px;
text-align: center;
}

60
module/config.js Normal file
View File

@ -0,0 +1,60 @@
export const rmss = {};
rmss.curreny_type = {
mp: "rmss.curreny_type.mp",
pp: "rmss.curreny_type.pp",
gp: "rmss.curreny_type.gp",
sp: "rmss.curreny_type.sp",
bp: "rmss.curreny_type.bp",
cp: "rmss.curreny_type.cp"
};
rmss.stats = {
agility: {
fullname: "Agility",
shortname: "Ag"
},
constitution: {
fullname: "Constitution",
shortname: "Co"
},
memory: {
fullname: "Memory",
shortname: "Me"
},
reasoning: {
fullname: "Reasoning",
shortname: "Re"
},
self_discipline: {
fullname: "Self Discipline",
shortname: "SD"
},
empathy: {
fullname: "Empathy",
shortname: "Em"
},
intuition: {
fullname: "Intuition",
shortname: "In"
},
presence: {
fullname: "Presence",
shortname: "Pr"
},
quickness: {
fullname: "Quickness",
shortname: "Qu"
},
strength: {
fullname: "Strength",
shortname: "St"
}
};
rmss.skill_designations = {
None: "None",
Occupational: "Occupational",
Everyman: "Everyman",
Restricted: "Restricted"
};

248
module/documents/actor.js Normal file
View File

@ -0,0 +1,248 @@
export class RMSSActor extends Actor {
/** @override */
prepareData() {
// Prepare data for the actor. Calling the super version of this executes
// the following, in order: data reset (to clear active effects),
// prepareBaseData(), prepareEmbeddedDocuments() (including active effects),
// prepareDerivedData().
super.prepareData();
}
prepareDerivedData() {
const actorData = this;
const systemData = actorData.system;
const flags = actorData.flags.rmss || {};
// Make separate methods for each Actor type (character, npc, etc.) to keep
// things organized.
this._prepareCharacterData(actorData);
this._prepareNpcData(actorData);
}
/**
* Prepare Character specific data.
* @param {Actor} actorData The NPC Object to prepare data for
*/
_prepareCharacterData(actorData) {
if (actorData.type !== "character") return;
// Calculate Stat Bonuses for the Actor
this.calculateStatBonuses(actorData);
// Calculate Resistance Rolls for the Actor
this.calculateResistanceRolls(actorData);
// Iterate through and apply Stat bonuses for Skill Category Items
this.calculateSkillCategoryStatBonuses();
// Iterate through and apply Skill Category Bonuses for Skill items
this.calculateSkillBonuses();
}
/**
* Prepare NPC specific data.
* @param {Actor} actorData The NPC Object to prepare data for
*/
_prepareNpcData(actorData) {
if (actorData.type !== "npc") return;
// Make modifications to data here. For example:
const data = actorData.data;
}
// Tally each stat bonus and populate the total field.
calculateStatBonuses(actorData) {
const systemData = actorData.system;
actorData.system.stats.agility.stat_bonus = Number(systemData.stats.agility.racial_bonus)
+ Number(systemData.stats.agility.special_bonus)
+ Number(systemData.stats.agility.basic_bonus);
actorData.system.stats.constitution.stat_bonus = Number(systemData.stats.constitution.racial_bonus)
+ Number(systemData.stats.constitution.special_bonus)
+ Number(systemData.stats.constitution.basic_bonus);
actorData.system.stats.memory.stat_bonus = Number(systemData.stats.memory.racial_bonus)
+ Number(systemData.stats.memory.special_bonus)
+ Number(systemData.stats.memory.basic_bonus);
actorData.system.stats.reasoning.stat_bonus = Number(systemData.stats.reasoning.racial_bonus)
+ Number(systemData.stats.reasoning.special_bonus)
+ Number(systemData.stats.reasoning.basic_bonus);
actorData.system.stats.self_discipline.stat_bonus = Number(systemData.stats.self_discipline.racial_bonus)
+ Number(systemData.stats.self_discipline.special_bonus)
+ Number(systemData.stats.self_discipline.basic_bonus);
actorData.system.stats.empathy.stat_bonus = Number(systemData.stats.empathy.racial_bonus)
+ Number(systemData.stats.empathy.special_bonus)
+ Number(systemData.stats.empathy.basic_bonus);
actorData.system.stats.intuition.stat_bonus = Number(systemData.stats.intuition.racial_bonus)
+ Number(systemData.stats.intuition.special_bonus)
+ Number(systemData.stats.intuition.basic_bonus);
actorData.system.stats.presence.stat_bonus = Number(systemData.stats.presence.racial_bonus)
+ Number(systemData.stats.presence.special_bonus)
+ Number(systemData.stats.presence.basic_bonus);
actorData.system.stats.quickness.stat_bonus = Number(systemData.stats.quickness.racial_bonus)
+ Number(systemData.stats.quickness.special_bonus)
+ Number(systemData.stats.quickness.basic_bonus);
actorData.system.stats.strength.stat_bonus = Number(systemData.stats.strength.racial_bonus)
+ Number(systemData.stats.strength.special_bonus)
+ Number(systemData.stats.strength.basic_bonus);
}
// Calculate each Resistance Roll with the formula on the character sheet.
calculateResistanceRolls(actorData) {
const systemData = actorData.system;
actorData.system.resistance_rolls.essence.value = Number(systemData.stats.empathy.stat_bonus * 3);
actorData.system.resistance_rolls.channeling.value = Number(systemData.stats.intuition.stat_bonus * 3);
actorData.system.resistance_rolls.mentalism.value = Number(systemData.stats.presence.stat_bonus * 3);
actorData.system.resistance_rolls.fear.value = Number(systemData.stats.self_discipline.stat_bonus * 3);
actorData.system.resistance_rolls.poison_disease.value = Number(systemData.stats.constitution.stat_bonus * 3);
actorData.system.resistance_rolls.chann_ess.value = Number(systemData.stats.intuition.stat_bonus)
+ Number(systemData.stats.empathy.stat_bonus);
actorData.system.resistance_rolls.chann_ment.value = Number(systemData.stats.intuition.stat_bonus)
+ Number(systemData.stats.presence.stat_bonus);
actorData.system.resistance_rolls.ess_ment.value = Number(systemData.stats.empathy.stat_bonus)
+ Number(systemData.stats.presence.stat_bonus);
actorData.system.resistance_rolls.arcane.value = Number(systemData.stats.empathy.stat_bonus)
+ Number(systemData.stats.intuition.stat_bonus)
+ Number(systemData.stats.presence.stat_bonus);
actorData.system.resistance_rolls.essence.total = actorData.system.resistance_rolls.essence.value
+ actorData.system.resistance_rolls.essence.race_mod;
actorData.system.resistance_rolls.channeling.total = actorData.system.resistance_rolls.channeling.value
+ actorData.system.resistance_rolls.channeling.race_mod;
actorData.system.resistance_rolls.mentalism.total = actorData.system.resistance_rolls.mentalism.value
+ actorData.system.resistance_rolls.mentalism.race_mod;
actorData.system.resistance_rolls.fear.total = actorData.system.resistance_rolls.fear.value
+ actorData.system.resistance_rolls.fear.race_mod;
actorData.system.resistance_rolls.poison_disease.total = actorData.system.resistance_rolls.poison_disease.value
+ actorData.system.resistance_rolls.poison_disease.race_mod;
actorData.system.resistance_rolls.chann_ess.total = actorData.system.resistance_rolls.chann_ess.value
+ actorData.system.resistance_rolls.chann_ess.race_mod;
actorData.system.resistance_rolls.chann_ment.total = actorData.system.resistance_rolls.chann_ment.value
+ actorData.system.resistance_rolls.chann_ment.race_mod;
actorData.system.resistance_rolls.ess_ment.total = actorData.system.resistance_rolls.ess_ment.value
+ actorData.system.resistance_rolls.ess_ment.race_mod;
actorData.system.resistance_rolls.arcane.total = actorData.system.resistance_rolls.arcane.value
+ actorData.system.resistance_rolls.arcane.race_mod;
}
calculateSkillBonuses() {
for (const item of this.items) {
if (item.type === "skill") {
console.log(`rmss | actor.js | Calculating skill bonus for Skill: ${item.name}`);
console.log(`rmss | actor.js | Updating Skill Category Bonus for Skill: ${item.name}`);
item.calculateSelectedSkillCategoryBonus(item);
console.log(`rmss | actor.js | Updating Skill Total Bonus for Skill: ${item.name}`);
item.calculateSkillTotalBonus(item);
}
}
}
// Tallys the bonus for each Stat that is applicable to the Skill Category and then updates the total
calculateSkillCategoryStatBonuses() {
for (const item of this.items) {
if (item.type === "skill_category") {
console.log(`rmss | actor.js | Calculating Skill Category Stat Bonuses for: ${item.name}`);
// Get all the applicable stats for this skill category
let app_stat_1 = item.system.app_stat_1;
let app_stat_2 = item.system.app_stat_2;
let app_stat_3 = item.system.app_stat_3;
// If the first one is None we don't need to do anything further
if (app_stat_1 === "None") {
continue;
}
else
{
let applicable_stat_bonus = 0;
let app_stat_1_found = false;
let app_stat_2_found = false;
let app_stat_3_found = false;
// Iterate through the applicable stats and find their full names
for (const stat in CONFIG.rmss.stats) {
// If the configured App Stat matches the one of the stats in config
if (app_stat_1 === CONFIG.rmss.stats[stat].shortname) {
app_stat_1_found = true;
// Get the Stat Bonus
applicable_stat_bonus = applicable_stat_bonus + this.system.stats[stat].stat_bonus;
}
if (app_stat_2 === CONFIG.rmss.stats[stat].shortname) {
app_stat_2_found = true;
applicable_stat_bonus = applicable_stat_bonus + this.system.stats[stat].stat_bonus;
}
if (app_stat_3 === CONFIG.rmss.stats[stat].shortname) {
app_stat_3_found = true;
applicable_stat_bonus = applicable_stat_bonus + this.system.stats[stat].stat_bonus;
}
}
if (app_stat_1_found === true && app_stat_2_found === true && app_stat_3_found === true) {
// Apply the update if we found stat bonuses for every applicable stat
item.system.stat_bonus = applicable_stat_bonus;
// Update the total in the Item
item.calculateSkillCategoryTotalBonus(item);
}
else if (app_stat_1_found === true && app_stat_2_found === true && app_stat_3_found === false) {
// Apply the update if we found stat bonuses for the first two applicable stats
item.system.stat_bonus = applicable_stat_bonus;
// Update the total in the Item
item.calculateSkillCategoryTotalBonus(item);
}
else if (app_stat_1_found === true && app_stat_2_found === false && app_stat_3_found === false) {
// Apply the update if we found stat bonuses for the first applicable stat
item.system.stat_bonus = applicable_stat_bonus;
// Update the total in the Item
item.calculateSkillCategoryTotalBonus(item);
}
}
}
}
}
// For each skill category return an object in this format.
// {{ _id: "skill category name"}}
// This is the format that the select helper on the skill sheet needs
getOwnedItemsByType(item_type) {
let ownedItems = {None: "None"};
console.log(`rmss | actor.js | Getting owned ${item_type} for: ${this.name}`);
for (const item of this.items) {
if (item.type === item_type) {
ownedItems[item._id] = item.name;
}
}
return (ownedItems);
}
}

118
module/documents/item.js Normal file
View File

@ -0,0 +1,118 @@
export class RMSSItem extends Item {
/** @override */
prepareData() {
// Prepare data for the item. Calling the super version of this executes
// the following, in order: data reset (to clear active effects),
// prepareBaseData(), prepareEmbeddedDocuments() (including active effects),
// prepareDerivedData().
console.log(`rmss | item.js | prepareData for: ${this.name}`);
super.prepareData();
}
// Set the icon images for newly created images.
async _preCreate(data, options, userId) {
await super._preCreate(data, options, userId);
// Do not set on copied items if they have a custom Icon.
if (!data.name.includes("(Copy)"))
{
if (this.type === "armor") {
await this.updateSource({img: "systems/rmss/assets/default/armor.svg"});
}
else if (this.type === "weapon") {
await this.updateSource({img: "systems/rmss/assets/default/weapon.svg"});
}
else if (this.type === "skill") {
await this.updateSource({img: "systems/rmss/assets/default/skill.svg"});
}
else if (this.type === "skill_category") {
await this.updateSource({img: "systems/rmss/assets/default/skill_category.svg"});
}
else if (this.type === "spell") {
await this.updateSource({img: "systems/rmss/assets/default/spell.svg"});
}
else if (this.type === "herb_or_poison") {
await this.updateSource({img: "systems/rmss/assets/default/herb_or_poison.svg"});
}
else if (this.type === "transport") {
await this.updateSource({img: "systems/rmss/assets/default/transport.svg"});
}
}
}
prepareDerivedData() {
const itemData = this;
const systemData = itemData.system;
const flags = itemData.flags.rmss || {};
// Make separate methods for each item type to keep things organized.
if (itemData.type === "skill") {
this._prepareSkillCategoryData(itemData);
}
if (itemData.type === "skill") {
this._prepareSkillData(itemData);
}
}
_prepareSkillCategoryData(itemData) {
if (itemData.type !== "skill_category") return;
console.log(`rmss | item.js | Preparing Skill Category Data for: ${itemData.name}`);
// Calculate Skill Category Total Bonus
this.calculateSkillCategoryTotalBonus(itemData);
}
_prepareSkillData(itemData) {
if (itemData.type !== "skill") return;
console.log(`rmss | item.js | Preparing Skill Data for: ${itemData.name}`);
// Make modifications to data here. For example:
// const systemData = itemData.system;
// Calculate Skill Category Bonus
this.calculateSelectedSkillCategoryBonus(itemData);
// Calculate Skill Total Bonus
this.calculateSkillTotalBonus(itemData);
}
calculateSkillCategoryTotalBonus(itemData) {
if (this.type === "skill_category") {
console.log(`rmss | item.js | Calculating Skill Category Total Bonus for: ${itemData.name}`);
const systemData = itemData.system;
itemData.system.total_bonus = Number(systemData.rank_bonus)
+ Number(systemData.stat_bonus)
+ Number(systemData.prof_bonus)
+ Number(systemData.special_bonus_1)
+ Number(systemData.special_bonus_2);
}
}
calculateSkillTotalBonus(itemData) {
if (this.type === "skill") {
const systemData = itemData.system;
console.log(`rmss | item.js | Calculating Skill Total Bonus for: ${itemData.name}`);
itemData.system.total_bonus = Number(systemData.rank_bonus)
+ Number(systemData.category_bonus)
+ Number(systemData.item_bonus)
+ Number(systemData.special_bonus_1)
+ Number(systemData.special_bonus_2);
}
}
calculateSelectedSkillCategoryBonus(itemData) {
if (this.isEmbedded === null) {
console.log(`rmss | item.js | Skill ${this.name} has no owner. Not calculating Skill Category bonus`);
}
else
{
const items = this.parent.items;
console.log(`rmss | item.js | Skill ${this.name} has owner, calculating skill category bonus.`);
for (const item of items) {
if (item.type === "skill_category" && item._id === itemData.system.category) {
console.log(`rmss | item.js | Calculating Skill Category bonus for skill: ${this.name}`);
this.system.category_bonus = item.system.total_bonus;
}
}
}
}
}

View File

@ -0,0 +1,390 @@
export default class RMSSPlayerSheet extends ActorSheet {
// Override Default Options, Set CSS Classes, Set Default Sheet, Set up Sheet Tabs
static get defaultOptions() {
return mergeObject(super.defaultOptions, {
width: 860,
height: 780,
template: "systems/rmss/templates/sheets/actors/rmss-character-sheet.html",
classes: ["rmss", "sheet", "actor"],
tabs: [{ navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "features" }]
});
}
// Make the data available to the sheet template
async getData() {
const context = super.getData();
// Use a safe clone of the actor data for further operations.
const actorData = this.actor.toObject(false);
let enrichedDescription = await TextEditor.enrichHTML(this.actor.system.description, {async: true});
// Add the actor's data to context.data for easier access, as well as flags.
context.system = actorData.system;
context.flags = actorData.flags;
context.enrichedDescription = enrichedDescription;
// Prepare character data and items.
if (actorData.type === "character") {
this._prepareItems(context);
this._prepareCharacterData(context);
}
// Prepare NPC data and items.
if (actorData.type === "npc") {
this._prepareItems(context);
}
return context;
}
// Override this method to check for duplicates when things are dragged to the sheet
// We don't want duplicate skills and skill categories.
async _onDropItem(event, data) {
// Reconstruct the item from the event
const newitem = await Item.implementation.fromDropData(data);
const itemData = newitem.toObject();
// To Do: Seperate Skills and Skill Categories. Increment Counts for items
if (itemData.type === "skill_category") {
// Get the already owned Items from the actor and push into an array
const owneditems = this.object.getOwnedItemsByType("skill_category");
let ownedskillcatlist = Object.values(owneditems);
// Check if the dragged item is not in the array and not owned
if (!ownedskillcatlist.includes(itemData.name)) {
console.log("Not Owned!");
super._onDropItem(event, data);
}
} else if ( itemData.type === "skill") {
// Get the already owned Items from the actor and push into an array
const owneditems = this.object.getOwnedItemsByType("skill");
let ownedskilllist = Object.values(owneditems);
// Check if the dragged item is not in the array and not owned
if (!ownedskilllist.includes(itemData.name)) {
console.log("Not Owned!");
super._onDropItem(event, data);
}
}
else {
super._onDropItem(event, data);
}
}
_prepareCharacterData(context) {
// Calculate Power Point Exhaustion
let powerpointPercentage = (Number(context.system.attributes.power_points.current) / Number(context.system.attributes.power_points.max)) * 100;
console.log(true);
switch (true) {
case (powerpointPercentage < 25):
context.system.attributes.power_points.modifier = "PP Exhaustion Penalty: -30 ";
break;
case (powerpointPercentage < 50):
context.system.attributes.power_points.modifier = "PP Exhaustion Penalty: -20 ";
break;
case (powerpointPercentage < 75):
console.log("Less than 75");
context.system.attributes.power_points.modifier = "PP Exhaustion Penalty: -10 ";
break;
default:
console.log("Setting Default");
context.system.attributes.power_points.modifier = "PP Exhaustion Penalty: 0 ";
}
// Calculate Exhaustion Point Penalty
let exhaustionPercentage = (Number(context.system.attributes.exhaustion_points.current) / Number(context.system.attributes.exhaustion_points.max)) * 100;
console.log(true);
switch (true) {
case (exhaustionPercentage < 1):
context.system.attributes.exhaustion_points.modifier = "Exhaustion Penalty: -100 ";
break;
case (exhaustionPercentage < 10):
context.system.attributes.exhaustion_points.modifier = "Exhaustion Penalty: -60 ";
break;
case (exhaustionPercentage < 25):
context.system.attributes.exhaustion_points.modifier = "Exhaustion Penalty: -30 ";
break;
case (exhaustionPercentage < 50):
context.system.attributes.exhaustion_points.modifier = "Exhaustion Penalty: -15 ";
break;
case (exhaustionPercentage < 75):
console.log("Less than 75");
context.system.attributes.exhaustion_points.modifier = "Exhaustion Penalty: -5 ";
break;
default:
console.log("Setting Default");
context.system.attributes.exhaustion_points.modifier = "Exhaustion Penalty: 0 ";
}
}
_prepareItems(context) {
console.log(`rmss | rmss_player_sheet.js | Preparing items for: ${this.name}`);
// Initialize containers.
const gear = [];
const playerskill= [];
const skillcat = [];
const weapons = [];
const armor = [];
const herbs = [];
const spells = [];
const equipables = [];
// Iterate through items, allocating to containers
for (let i of context.items) {
i.img = i.img || DEFAULT_TOKEN;
// Append to gear.
if (i.type === "item") {
gear.push(i);
}
else if (i.type === "weapon") {
weapons.push(i);
}
else if (i.type === "herb_or_poison") {
herbs.push(i);
}
// Append to skill categories.
else if (i.type === "skill_category") {
skillcat.push(i);
}
// Append to playerskill
else if (i.type === "skill") {
playerskill.push(i);
}
else if (i.type === "armor") {
armor.push(i);
}
else if (i.type === "spell") {
spells.push(i);
}
}
// Sort Skill/Skillcat Arrays
skillcat.sort(function(a, b) {
if (a.name < b.name) {
return -1;
}
if (a.name > b.name) {
return 1;
}
return 0;
});
playerskill.sort(function(a, b) {
if (a.name < b.name) {
return -1;
}
if (a.name > b.name) {
return 1;
}
return 0;
});
// Assign and return
context.gear = gear;
context.skillcat = skillcat;
context.playerskill = playerskill;
context.weapons = weapons;
context.armor = armor;
context.herbs = herbs;
context.spells = spells;
}
async renderCharacterSettings(data) {
console.log(data);
const configSheet = await renderTemplate("systems/rmss/templates/sheets/actors/dialogs/actor-settings.html", data);
return (configSheet);
}
activateListeners(html) {
super.activateListeners(html);
// Render the item sheet for viewing/editing prior to the editable check.
html.find(".item-edit").click(ev => {
const item = this.actor.items.get(ev.currentTarget.getAttribute("data-item-id"));
item.sheet.render(true);
});
// -------------------------------------------------------------
// Everything below here is only needed if the sheet is editable
if (!this.isEditable) return;
// Add Item
html.find(".item-create").click(this._onItemCreate.bind(this));
// Delete Item
html.find(".item-delete").click(ev => {
console.log(ev.currentTarget.getAttribute("data-item-id"));
const item = this.actor.items.get(ev.currentTarget.getAttribute("data-item-id"));
item.delete();
});
// Show Sheet Settings
html.find(".import-skillcats").click(async ev => {
let selectOptions = {};
for (const pack of game.packs) {
selectOptions[pack.metadata.id] = pack.metadata.label;
}
new game.rmss.applications.RMSSActorSheetConfig(selectOptions, this.actor).render(true);
});
// Check/Uncheck Favorite Skill
html.find(".skill-favorite").click(ev => {
const item = this.actor.items.get(ev.currentTarget.getAttribute("data-item-id"));
console.log(item);
console.log(`Before change: ${item.system.favorite}`);
if (item.system.favorite === true) {
console.log("Setting False");
item.update({system: {favorite: false}});
} else {
console.log("Setting True");
item.update({system: {favorite: true}});
}
console.log(`After change: ${item.system.favorite}`);
});
// Check/Uncheck Favorite Spell
html.find(".spell-favorite").click(ev => {
const item = this.actor.items.get(ev.currentTarget.getAttribute("data-item-id"));
console.log(item);
console.log(`Before change: ${item.system.favorite}`);
if (item.system.favorite === true) {
console.log("Setting False");
item.update({system: {favorite: false}});
} else {
console.log("Setting True");
item.update({system: {favorite: true}});
}
console.log(`After change: ${item.system.favorite}`);
});
// Equip/Unequip Weapon/Armor
html.find(".equippable").click(ev => {
const item = this.actor.items.get(ev.currentTarget.getAttribute("data-item-id"));
console.log(item);
console.log(`Before change: ${item.system.equipped}`);
if (item.system.equipped === true) {
console.log("Setting False");
item.update({system: {equipped: false}});
} else {
console.log("Setting True");
item.update({system: {equipped: true}});
}
console.log(`After change: ${item.system.equipped}`);
});
// Wear/Remove Item
html.find(".wearable").click(ev => {
const item = this.actor.items.get(ev.currentTarget.getAttribute("data-item-id"));
console.log(item);
console.log(`Before change: ${item.system.equipped}`);
if (item.system.worn === true) {
console.log("Setting False");
item.update({system: {worn: false}});
} else {
console.log("Setting True");
item.update({system: {worn: true}});
}
console.log(`After change: ${item.system.equipped}`);
});
// Change New Ranks value when clicked in player sheet. From 0-3.
html.find(".skill-newrank").click(ev => {
const item = this.actor.items.get(ev.currentTarget.getAttribute("data-item-id"));
console.log("Firing in the Player Sheet");
console.log(ev.currentTarget.getAttribute("value"));
console.log(ev.currentTarget.getAttribute("data-item-id"));
switch (ev.currentTarget.getAttribute("value")) {
case "0":
console.log("Skill NewRanks is 0 setting to 1");
item.update({system: {new_ranks: { value: 1 }}});
break;
case "1":
console.log("Skill NewRanks is 1 setting to 2");
item.update({system: {new_ranks: { value: 2 }}});
break;
case "2":
console.log("Skill NewRanks is 2 setting to 3");
item.update({system: {new_ranks: { value: 3 }}});
break;
case "3":
console.log("Skill NewRanks is 3 setting to 0");
item.update({system: {new_ranks: { value: 0 }}});
break;
}
});
// Change New Ranks value when clicked in player sheet. From 0-3.
html.find(".skillcategory-newrank").click(ev => {
const item = this.actor.items.get(ev.currentTarget.getAttribute("data-item-id"));
console.log("Firing in the Player Sheet");
console.log(ev.currentTarget.getAttribute("value"));
console.log(ev.currentTarget.getAttribute("data-item-id"));
switch (ev.currentTarget.getAttribute("value")) {
case "0":
console.log("Skill Category NewRanks is 0 setting to 1");
item.update({system: {new_ranks: { value: 1 }}});
break;
case "1":
console.log("Skill Category NewRanks is 1 setting to 2");
item.update({system: {new_ranks: { value: 2 }}});
break;
case "2":
console.log("Skill Category NewRanks is 2 setting to 3");
item.update({system: {new_ranks: { value: 3 }}});
break;
case "3":
console.log("Skill Category NewRanks is 3 setting to 0");
item.update({system: {new_ranks: { value: 0 }}});
break;
}
});
}
async _onItemCreate(event) {
event.preventDefault();
const header = event.currentTarget;
// Get the type of item to create.
const type = header.dataset.type;
// Grab any data associated with this control.
const data = duplicate(header.dataset);
// Initialize a default name.
const name = `New ${type.capitalize()}`;
// Prepare the item object.
const itemData = {
name: name,
type: type,
data: data
};
// Remove the type from the dataset since it's in the itemData.type prop.
delete itemData.data.type;
// Finally, create the item!
return await Item.create(itemData, {parent: this.actor});
}
}

View File

@ -0,0 +1,55 @@
export default class RMSSActorSheetConfig extends FormApplication {
constructor(selectOptions, character) {
super();
this.selectOptions = selectOptions;
this.character = character;
}
static get defaultOptions() {
return mergeObject(super.defaultOptions, {
classes: ["form"],
popOut: true,
template: "systems/rmss/templates/sheets/actors/apps/actor-settings.html"
});
}
getData() {
// Send data to the template
return {
selectOptions: this.selectOptions
};
}
activateListeners(html) {
super.activateListeners(html);
}
async _updateObject(event, formData) {
console.log("Deleting Old Skill Categories.");
for (const item of this.character.items) {
if (item.type === "skill_category") {
item.delete();
}
}
const pack = game.packs.get(formData.selectOptions);
const skillCategoryData = await pack.getIndex();
console.log("Importing New Skill Categories.");
for (const sc of skillCategoryData) {
const newitem = await pack.getDocument(sc._id);
let newDocuments = [];
if (newitem.type === "skill_category") {
console.log(newitem);
newDocuments.push(newitem);
}
if (newDocuments.length > 0) {
await Item.createDocuments(newDocuments, {parent: this.character});
}
}
}
}

View File

@ -0,0 +1,36 @@
// Our Item Sheet extends the default
export default class RMSSArmorSheet extends ItemSheet {
// Set the height and width
static get defaultOptions() {
return mergeObject(super.defaultOptions, {
width: 530,
height: 440,
template: "systems/rmss/templates/sheets/items/rmss-armor-sheet.html",
classes: ["rmss", "sheet", "item"]
});
}
// If our sheet is called here it is.
get template() {
return "systems/rmss/templates/sheets/items/rmss-armor-sheet.html";
}
// Make the data available to the sheet template
async getData() {
const baseData = await super.getData();
let enrichedDescription = await TextEditor.enrichHTML(this.item.system.description, {async: true});
let sheetData = {
owner: this.item.isOwner,
editable: this.isEditable,
item: baseData.item,
system: baseData.item.system,
config: CONFIG.rmss,
enrichedDescription: enrichedDescription
};
return sheetData;
}
}

View File

@ -0,0 +1,36 @@
// Our Item Sheet extends the default
export default class RMSSHerbAndPoisonSheet extends ItemSheet {
// Set the height and width
static get defaultOptions() {
return mergeObject(super.defaultOptions, {
width: 530,
height: 440,
template: "systems/rmss/templates/sheets/items/rmss-herb-or-poison-sheet.html",
classes: ["rmss", "sheet", "item"]
});
}
// If our sheet is called here it is.
get template() {
return "systems/rmss/templates/sheets/items/rmss-herb-or-poison-sheet.html";
}
// Make the data available to the sheet template
async getData() {
const baseData = await super.getData();
let enrichedDescription = await TextEditor.enrichHTML(this.item.system.description, {async: true});
let sheetData = {
owner: this.item.isOwner,
editable: this.isEditable,
item: baseData.item,
system: baseData.item.system,
config: CONFIG.rmss,
enrichedDescription: enrichedDescription
};
return sheetData;
}
}

View File

@ -0,0 +1,36 @@
// Our Item Sheet extends the default
export default class RMSSItemSheet extends ItemSheet {
// Set the height and width
static get defaultOptions() {
return mergeObject(super.defaultOptions, {
width: 530,
height: 440,
template: "systems/rmss/templates/sheets/items/rmss-item-sheet.html",
classes: ["rmss", "sheet", "item"]
});
}
// If our sheet is called here it is.
get template() {
return "systems/rmss/templates/sheets/items/rmss-item-sheet.html";
}
// Make the data available to the sheet template
async getData() {
const baseData = await super.getData();
let enrichedDescription = await TextEditor.enrichHTML(this.item.system.description, {async: true});
let sheetData = {
owner: this.item.isOwner,
editable: this.isEditable,
item: baseData.item,
system: baseData.item.system,
config: CONFIG.rmss,
enrichedDescription: enrichedDescription
};
return sheetData;
}
}

View File

@ -0,0 +1,36 @@
// Our Item Sheet extends the default
export default class RMSSTransportSheet extends ItemSheet {
// Set the height and width
static get defaultOptions() {
return mergeObject(super.defaultOptions, {
width: 530,
height: 440,
template: "systems/rmss/templates/sheets/items/rmss-transport-sheet.html",
classes: ["rmss", "sheet", "item"]
});
}
// If our sheet is called here it is.
get template() {
return "systems/rmss/templates/sheets/items/rmss-transport-sheet.html";
}
// Make the data available to the sheet template
async getData() {
const baseData = await super.getData();
let enrichedDescription = await TextEditor.enrichHTML(this.item.system.description, {async: true});
let sheetData = {
owner: this.item.isOwner,
editable: this.isEditable,
item: baseData.item,
system: baseData.item.system,
config: CONFIG.rmss,
enrichedDescription: enrichedDescription
};
return sheetData;
}
}

View File

@ -0,0 +1,36 @@
// Our Item Sheet extends the default
export default class RMSSWeaponSheet extends ItemSheet {
// Set the height and width
static get defaultOptions() {
return mergeObject(super.defaultOptions, {
width: 530,
height: 440,
template: "systems/rmss/templates/sheets/items/rmss-weapon-sheet.html",
classes: ["rmss", "sheet", "item"]
});
}
// If our sheet is called here it is.
get template() {
return "systems/rmss/templates/sheets/items/rmss-weapon-sheet.html";
}
// Make the data available to the sheet template
async getData() {
const baseData = await super.getData();
let enrichedDescription = await TextEditor.enrichHTML(this.item.system.description, {async: true});
let sheetData = {
owner: this.item.isOwner,
editable: this.isEditable,
item: baseData.item,
system: baseData.item.system,
config: CONFIG.rmss,
enrichedDescription: enrichedDescription
};
return sheetData;
}
}

View File

@ -0,0 +1,133 @@
// Our Item Sheet extends the default
export default class RMSSSkillCategorySheet extends ItemSheet {
// Set the height and width
static get defaultOptions() {
return mergeObject(super.defaultOptions, {
width: 580,
height: 440,
template: "systems/rmss/templates/sheets/skills/rmss-skill-category-sheet.html",
classes: ["rmss", "sheet", "item"]
});
}
// If our sheet is called here it is.
get template() {
return "systems/rmss/templates/sheets/skills/rmss-skill-category-sheet.html";
}
// Make the data available to the sheet template
async getData() {
const context = await super.getData();
// Get a list of stats that can be used as applicable stats
let applicableStatList = this.prepareApplicableStatNames(CONFIG);
// Get the currently selected value for all three applicable stats
let firstApplicableStat = this.prepareApplicableSelectedStat("app_stat_1");
let secondApplicableStat = this.prepareApplicableSelectedStat("app_stat_2");
let thirdApplicableStat = this.prepareApplicableSelectedStat("app_stat_3");
// Build and apply the display string for Applicable Stats
let applicableStatText =
this.buildApplicableStatsText(firstApplicableStat, secondApplicableStat, thirdApplicableStat);
context.item.system.applicable_stats = applicableStatText;
let enrichedDescription = await TextEditor.enrichHTML(this.item.system.description, {async: true});
let sheetData = {
owner: this.item.isOwner,
editable: this.isEditable,
item: context.item,
system: context.item.system,
config: CONFIG.rmss,
applicable_stat_list: applicableStatList,
applicable_stat_1_selected: firstApplicableStat,
applicable_stat_2_selected: secondApplicableStat,
applicable_stat_3_selected: thirdApplicableStat,
enrichedDescription: enrichedDescription
};
return sheetData;
}
async _setApplicableStat(item, ev) {
// Build a JSON Object from the selected tag value and selected name (item data attribute key)
let updateKey = ev.currentTarget.getAttribute("name");
let updateData = ev.target.value;
// Update Item Data
await item.update({[updateKey]: updateData});
}
// Each Skill Category can have up to three Applicable Stats that apply to it. We need to get a list of
// the Stat Shortnames from Config so the user can select which stats are applicable to this Skill Category
prepareApplicableStatNames(config) {
let applicableStatList = {None: "None"};
for (const item in config.rmss.stats) {
applicableStatList[config.rmss.stats[item].shortname] = config.rmss.stats[item].shortname;
}
return applicableStatList;
}
// Get the values for the currently selected Applicable Stat so we can display it on the Skill Category Sheet
// If nothing is selected return an empty string.
prepareApplicableSelectedStat(appStat) {
let applicableStatSelected = "";
applicableStatSelected = this.item.system[appStat];
return applicableStatSelected;
}
// The character sheet has an information field that displays the applicable stats in the following format
// St/Ag/St. This method checks the current applicable stats and builds that field so
// it can be displayed to the user.
buildApplicableStatsText(firstAppStat, secondAppStat, thirdAppStat) {
if (firstAppStat === "None") {
return ("None");
}
else if (firstAppStat !== "None" && secondAppStat === "None") {
return (firstAppStat);
}
else if (firstAppStat !== "None" && secondAppStat !== "None" && thirdAppStat === "None" ) {
return (`${firstAppStat}/${secondAppStat}`);
}
else if (firstAppStat !== "None" && secondAppStat !== "None" && thirdAppStat !== "None" ) {
return (`${firstAppStat}/${secondAppStat}/${thirdAppStat}`);
}
else {
return ("None");
}
}
activateListeners(html) {
super.activateListeners(html);
// -------------------------------------------------------------
// Everything below here is only needed if the sheet is editable
if (!this.isEditable) return;
// Every time the user selects one of the Applicable Stat dropdowns
// fire an event to change the value in the Skill Category
html.find(".stat-selector").change(ev => {
this._setApplicableStat(this.item, ev);
});
// Catch the event when the user clicks one of the New Ranks Checkboxes in a Skill Category.
// It will increment by one or wrap back to zero on a value of three
html.find(".skillcategorysheet-newrank").click(ev => {
switch (ev.currentTarget.getAttribute("value")) {
case "0":
this.object.update({system: {new_ranks: { value: 1 }}});
break;
case "1":
this.object.update({system: {new_ranks: { value: 2 }}});
break;
case "2":
this.object.update({system: {new_ranks: { value: 3 }}});
break;
case "3":
this.object.update({system: {new_ranks: { value: 0 }}});
break;
}
});
}
}

View File

@ -0,0 +1,115 @@
// Our Item Sheet extends the default
export default class RMSSSkillSheet extends ItemSheet {
// Set the height and width
static get defaultOptions() {
return mergeObject(super.defaultOptions, {
width: 530,
height: 440,
template: "systems/rmss/templates/sheets/skills/rmss-skill-sheet.html",
classes: ["rmss", "sheet", "item"]
});
}
// If our sheet is called here it is.
get template() {
return "systems/rmss/templates/sheets/skills/rmss-skill-sheet.html";
}
// Make the data available to the sheet template
async getData() {
const baseData = await super.getData();
let enrichedDescription = await TextEditor.enrichHTML(this.item.system.description, {async: true});
// Get a list of the parent item's skill categories for the dropdown
let ownedSkillCategories = this.prepareSkillCategoryValues();
// Figure out if a valid Skill Category is already selected
let selectedSkillCategory = this.prepareSelectedSkillCategory(ownedSkillCategories, this.object.system.category);
let sheetData = {
owner: this.item.isOwner,
editable: this.isEditable,
item: baseData.item,
system: baseData.item.system,
config: CONFIG.rmss,
owned_skillcats: ownedSkillCategories,
enrichedDescription: enrichedDescription,
selected_skillcat: selectedSkillCategory,
designations: CONFIG.rmss.skill_designations
};
return sheetData;
}
activateListeners(html) {
super.activateListeners(html);
// Catch the event when the user clicks one of the New Ranks Checkboxes in a Skill.
// It will increment by one or wrap back to zero on a value of three
html.find(".skillsheet-newrank").click(ev => {
switch (ev.currentTarget.getAttribute("value")) {
case "0":
this.object.update({system: {new_ranks: { value: 1 }}});
break;
case "1":
this.object.update({system: {new_ranks: { value: 2 }}});
break;
case "2":
this.object.update({system: {new_ranks: { value: 3 }}});
break;
case "3":
this.object.update({system: {new_ranks: { value: 0 }}});
break;
}
});
}
// Skills are related to Skill Categories so we need something to allow the user to choose that relationship
// If this Skill is owned then we will return a list of Skill Categories and allow them to choose
// Otherwise we'll just return 'Skill has no owner'
prepareSkillCategoryValues() {
let skillNoOwner = {None: "Skill Has No Owner"};
if (this.item.isEmbedded === null) {
return (skillNoOwner);
}
else
{
const skillCategories = this.item.parent.getOwnedItemsByType("skill_category");
return (skillCategories);
}
}
// Determine which Skill Category is selected and test that it is in the current list of categories.
// If it isn't set it to None.
prepareSelectedSkillCategory(ownedSkillCategories, selectedSkillCategory) {
let defaultSelectedCategory = "None";
if (Object.keys(ownedSkillCategories).includes(selectedSkillCategory)) {
return (selectedSkillCategory);
} else {
return (defaultSelectedCategory);
}
}
// Populate the Skill Category Bonus field on the Skill Sheet.
// Iterate through the owned skill categories and if one of them matches the item id of currently
// selected skill category then set the Skill Category Bonus field to the Total Bonus field of the Skill Category
prepareSelectedSkillCategoryBonus(selected_skillcat) {
if (this.item.isEmbedded === null) {
console.log("Skill has no owner");
}
else
{
const items = this.object.parent.items;
for (const item of items) {
if (item.type === "skill_category" && item._id === selected_skillcat) {
console.log(`rmss | rmss_skill_sheet | Calculating Skill Category bonus for skill: ${this.object.name}`);
this.object.system.category_bonus = item.system.total_bonus;
}
}
}
}
}

View File

@ -0,0 +1,35 @@
// Our Item Sheet extends the default
export default class RMSSSpellSheet extends ItemSheet {
// Set the height and width
static get defaultOptions() {
return mergeObject(super.defaultOptions, {
width: 530,
height: 440,
classes: ["rmss", "sheet", "item"]
});
}
// If our sheet is called here it is.
get template() {
return "systems/rmss/templates/sheets/spells/rmss-spell-sheet.html";
}
// Make the data available to the sheet template
async getData() {
const baseData = await super.getData();
let enrichedDescription = await TextEditor.enrichHTML(this.item.system.description, {async: true});
let sheetData = {
owner: this.item.isOwner,
editable: this.isEditable,
item: baseData.item,
system: baseData.item.system,
config: CONFIG.rmss,
enrichedDescription: enrichedDescription
};
return sheetData;
}
}

53
packs/skill_categories.db Normal file
View File

@ -0,0 +1,53 @@
{"name":"Weapon • Missile Artillery","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"In/Ag/Re","app_stat_1":"In","app_stat_2":"Ag","app_stat_3":"Re","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"ownership":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{"core":{"sourceId":"Item.swVilWoSF4JH0yhZ"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.2","coreVersion":"10.285","createdTime":1662898842718,"modifiedTime":1663840828472,"lastModifiedBy":"jFAyH93PxEe1ncxK"},"folder":null,"sort":0,"_id":"1HevhbCbvMonyQXe"}
{"name":"Armor • Medium","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"St/Ag/St","app_stat_1":"St","app_stat_2":"Ag","app_stat_3":"St","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"ownership":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{"core":{"sourceId":"Item.ENiEBop9Kgrn9pBt"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.2","coreVersion":"10.285","createdTime":1662897408501,"modifiedTime":1663840704830,"lastModifiedBy":"jFAyH93PxEe1ncxK"},"folder":null,"sort":0,"_id":"2fdM9ICcj7vp8nFd"}
{"name":"Athletic • Gymnastics","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"Ag/Qu/Ag","app_stat_1":"Ag","app_stat_2":"Qu","app_stat_3":"Ag","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"ownership":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{"core":{"sourceId":"Item.TASzGNEwHMQUz1AV"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.2","coreVersion":"10.285","createdTime":1662897573841,"modifiedTime":1663840718046,"lastModifiedBy":"jFAyH93PxEe1ncxK"},"folder":null,"sort":0,"_id":"2rw9aaYaiTiuKX6p"}
{"name":"Weapon • Missile","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"Ag/St/Ag","app_stat_1":"Ag","app_stat_2":"St","app_stat_3":"Ag","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"ownership":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{"core":{"sourceId":"Item.8a1d0Z2MfJe0R1Eb"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.2","coreVersion":"10.285","createdTime":1662898823756,"modifiedTime":1663840820736,"lastModifiedBy":"jFAyH93PxEe1ncxK"},"folder":null,"sort":0,"_id":"2sTx95Y88soBT6Xm"}
{"name":"Technical/Trade • General","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"Re/Me/SD","app_stat_1":"Re","app_stat_2":"Me","app_stat_3":"SD","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"ownership":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{"core":{"sourceId":"Item.1td9QGD20b4nkD6h"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.2","coreVersion":"10.285","createdTime":1662898674902,"modifiedTime":1663840807018,"lastModifiedBy":"jFAyH93PxEe1ncxK"},"folder":null,"sort":0,"_id":"3mHLFWrWHEA8Fmyq"}
{"name":"Lore • Obscure","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"Me/Re/Me","app_stat_1":"Me","app_stat_2":"Re","app_stat_3":"Me","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"ownership":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{"core":{"sourceId":"Item.bsDoIUKcNUeqxQQO"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.2","coreVersion":"10.285","createdTime":1662897997337,"modifiedTime":1663840747755,"lastModifiedBy":"jFAyH93PxEe1ncxK"},"folder":null,"sort":0,"_id":"47foBA6Yk70CVg2i"}
{"name":"Weapon • Thown","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"Ag/St/Ag","app_stat_1":"Ag","app_stat_2":"St","app_stat_3":"Ag","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"ownership":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{"core":{"sourceId":"Item.kCtfktVNlH414NL2"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.2","coreVersion":"10.285","createdTime":1662898881742,"modifiedTime":1663840832033,"lastModifiedBy":"jFAyH93PxEe1ncxK"},"folder":null,"sort":0,"_id":"5e3r6vHlLHjZzyTu"}
{"name":"Technical/Trade • Professional","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"Re/Me/In","app_stat_1":"Re","app_stat_2":"Me","app_stat_3":"In","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"ownership":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{"core":{"sourceId":"Item.xNTn6oV9yMOmfP0Z"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.2","coreVersion":"10.285","createdTime":1662898699996,"modifiedTime":1663840810513,"lastModifiedBy":"jFAyH93PxEe1ncxK"},"folder":null,"sort":0,"_id":"67oz5EUQCrxKsh5e"}
{"name":"Spells • Other Realm Open Lists","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"None","app_stat_1":"None","app_stat_2":"None","app_stat_3":"None","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"ownership":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{"core":{"sourceId":"Item.AUzgIWYzrE15qCt9"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.2","coreVersion":"10.285","createdTime":1662898456160,"modifiedTime":1663840790383,"lastModifiedBy":"jFAyH93PxEe1ncxK"},"folder":null,"sort":0,"_id":"7z1BmP1Qlx11GL1C"}
{"name":"Lore • Technical","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"Me/Re/Me","app_stat_1":"Me","app_stat_2":"Re","app_stat_3":"Me","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"ownership":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{"core":{"sourceId":"Item.Tw2FXIQb5HA89kbX"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.2","coreVersion":"10.285","createdTime":1662898032616,"modifiedTime":1663840749775,"lastModifiedBy":"jFAyH93PxEe1ncxK"},"folder":null,"sort":0,"_id":"9XA38iy0DxyhUaaC"}
{"name":"Armor • Light","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"Ag/St/Ag","app_stat_1":"Ag","app_stat_2":"St","app_stat_3":"Ag","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"ownership":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{"core":{"sourceId":"Item.TMGapmlYutNuQaw8"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.2","coreVersion":"10.285","createdTime":1662897388838,"modifiedTime":1663840702933,"lastModifiedBy":"jFAyH93PxEe1ncxK"},"folder":null,"sort":0,"_id":"AIvpcHWyipCtWLvT"}
{"name":"Combat Maneuvers","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"Ag/Qu/SD","app_stat_1":"Ag","app_stat_2":"Qu","app_stat_3":"SD","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"ownership":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{"core":{"sourceId":"Item.bwL0nMJePO6OQNue"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.2","coreVersion":"10.285","createdTime":1662897819566,"modifiedTime":1663840727979,"lastModifiedBy":"jFAyH93PxEe1ncxK"},"folder":null,"sort":0,"_id":"Aa5S1GaRJmkyDjIR"}
{"name":"Awareness • Perceptions","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"In/SD/In","app_stat_1":"In","app_stat_2":"SD","app_stat_3":"In","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"ownership":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{"core":{"sourceId":"Item.gJHBJS3aEz62XbxE"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.2","coreVersion":"10.285","createdTime":1662897610482,"modifiedTime":1663840719487,"lastModifiedBy":"jFAyH93PxEe1ncxK"},"folder":null,"sort":0,"_id":"BJlyds9J8ILwLIyW"}
{"name":"Martial Arts • Sweeps","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"Ag/St/Ag","app_stat_1":"Ag","app_stat_2":"St","app_stat_3":"Ag","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"ownership":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{"core":{"sourceId":"Item.n9WaU79Ctzmf6JbC"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.2","coreVersion":"10.285","createdTime":1662898139942,"modifiedTime":1663840757073,"lastModifiedBy":"jFAyH93PxEe1ncxK"},"folder":null,"sort":0,"_id":"Bj3no8mNboD8qKTn"}
{"name":"Crafts","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"Ag/Me/SD","app_stat_1":"Ag","app_stat_2":"Me","app_stat_3":"SD","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"ownership":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{"core":{"sourceId":"Item.6nErPtcQ33WXkyH4"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.2","coreVersion":"10.285","createdTime":1662897865848,"modifiedTime":1663840734368,"lastModifiedBy":"jFAyH93PxEe1ncxK"},"folder":null,"sort":0,"_id":"CcUHr6zfVpRuu4xv"}
{"name":"Body Development","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"Co/SD/Co","app_stat_1":"Co","app_stat_2":"SD","app_stat_3":"Co","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"ownership":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{"core":{"sourceId":"Item.cWtQ0YU3kGBhL8iR"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.2","coreVersion":"10.285","createdTime":1662897724809,"modifiedTime":1663840726119,"lastModifiedBy":"jFAyH93PxEe1ncxK"},"folder":null,"sort":0,"_id":"DL9XZU3P2Bw87PJa"}
{"name":"Weapon • Pole Arms","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"St/Ag/St","app_stat_1":"St","app_stat_2":"Ag","app_stat_3":"St","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"ownership":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{"core":{"sourceId":"Item.hpmgFsJPXxBQHJSE"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.2","coreVersion":"10.285","createdTime":1662898862386,"modifiedTime":1663840830247,"lastModifiedBy":"jFAyH93PxEe1ncxK"},"folder":null,"sort":0,"_id":"HkZMP2SZyRVqzzCJ"}
{"name":"Self Control","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"SD/Pr/SD","app_stat_1":"SD","app_stat_2":"Pr","app_stat_3":"SD","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"ownership":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{"core":{"sourceId":"Item.1B82OxRKQ781NEa9"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.2","coreVersion":"10.285","createdTime":1662898315491,"modifiedTime":1663840773057,"lastModifiedBy":"jFAyH93PxEe1ncxK"},"folder":null,"sort":0,"_id":"IIQQyaCr7KJeeMGp"}
{"name":"Special Defenses","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"None","app_stat_1":"None","app_stat_2":"None","app_stat_3":"None","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"ownership":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{"core":{"sourceId":"Item.eH1iaAuxyIwDmuA8"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.2","coreVersion":"10.285","createdTime":1662898371453,"modifiedTime":1663840778477,"lastModifiedBy":"jFAyH93PxEe1ncxK"},"folder":null,"sort":0,"_id":"JmokU4vzQQ4lPicS"}
{"name":"Spells • Own Realm Open Lists","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"None","app_stat_1":"None","app_stat_2":"None","app_stat_3":"None","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"ownership":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{"core":{"sourceId":"Item.w8xibKSY2EShkDJq"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.2","coreVersion":"10.285","createdTime":1662898482739,"modifiedTime":1663840794007,"lastModifiedBy":"jFAyH93PxEe1ncxK"},"folder":null,"sort":0,"_id":"KICAwOwrP1cMTRKf"}
{"name":"Subterfuge • Stealth","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"Ag/SD/In","app_stat_1":"Ag","app_stat_2":"SD","app_stat_3":"In","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"ownership":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{"core":{"sourceId":"Item.FM9stBeKGFVdAPdc"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.2","coreVersion":"10.285","createdTime":1662898591826,"modifiedTime":1663840803256,"lastModifiedBy":"jFAyH93PxEe1ncxK"},"folder":null,"sort":0,"_id":"KmFEWAhhqtmRZCQv"}
{"name":"Subterfuge • Mechanics","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"In/Ag/Re","app_stat_1":"In","app_stat_2":"Ag","app_stat_3":"Re","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"ownership":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{"core":{"sourceId":"Item.O0Zwk5hAhCMx6ajP"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.2","coreVersion":"10.285","createdTime":1662898576285,"modifiedTime":1663840801090,"lastModifiedBy":"jFAyH93PxEe1ncxK"},"folder":null,"sort":0,"_id":"P6lna8uCBQeVNgau"}
{"name":"Influence","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"Pr/Em/In","app_stat_1":"Pr","app_stat_2":"Em","app_stat_3":"In","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"ownership":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{"core":{"sourceId":"Item.zOKTXAFd6bK3XJZ5"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.2","coreVersion":"10.285","createdTime":1662897929958,"modifiedTime":1663840741277,"lastModifiedBy":"jFAyH93PxEe1ncxK"},"folder":null,"sort":0,"_id":"PnBxiNuUS8b3KjGE"}
{"name":"Spells • Own Realm Other Base Lists","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"None","app_stat_1":"None","app_stat_2":"None","app_stat_3":"None","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"ownership":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{"core":{"sourceId":"Item.HeAonlDHotwBy2lx"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.2","coreVersion":"10.285","createdTime":1662898530167,"modifiedTime":1663840795735,"lastModifiedBy":"jFAyH93PxEe1ncxK"},"folder":null,"sort":0,"_id":"QolQRsysF7O5XJo8"}
{"name":"Power Awareness","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"Em/In/Pr","app_stat_1":"Em","app_stat_2":"In","app_stat_3":"Pr","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"ownership":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{"core":{"sourceId":"Item.cnnhsP9vAOoN7VMn"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.2","coreVersion":"10.285","createdTime":1662898233748,"modifiedTime":1663840766010,"lastModifiedBy":"jFAyH93PxEe1ncxK"},"folder":null,"sort":0,"_id":"R2wZUOFxekV1mBgc"}
{"name":"Spells • Arcane Open Lists","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"None","app_stat_1":"None","app_stat_2":"None","app_stat_3":"None","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"ownership":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{"core":{"sourceId":"Item.R3lQNaGBdz7C5Fhs"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.2","coreVersion":"10.285","createdTime":1662898407655,"modifiedTime":1663840780153,"lastModifiedBy":"jFAyH93PxEe1ncxK"},"folder":null,"sort":0,"_id":"RpiCBmS6DKnI8Pok"}
{"name":"Athletic • Endurance","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"Co/Ag/St","app_stat_1":"Co","app_stat_2":"Ag","app_stat_3":"St","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"ownership":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{"core":{"sourceId":"Item.ldmZhkHo8m4VvV2V"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.2","coreVersion":"10.285","createdTime":1662897539929,"modifiedTime":1663840716358,"lastModifiedBy":"jFAyH93PxEe1ncxK"},"folder":null,"sort":0,"_id":"Rug8mq3LdUxGhHXK"}
{"name":"Directed Spells","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"Ag/SD/Ag","app_stat_1":"Ag","app_stat_2":"SD","app_stat_3":"Ag","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"ownership":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{"core":{"sourceId":"Item.RA46DfHavzTTrp99"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.2","coreVersion":"10.285","createdTime":1662897900117,"modifiedTime":1663840738205,"lastModifiedBy":"jFAyH93PxEe1ncxK"},"folder":null,"sort":0,"_id":"US94Sx46Vn1Rs9D5"}
{"name":"Lore • Magical","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"Me/Re/Me","app_stat_1":"Me","app_stat_2":"Re","app_stat_3":"Me","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"ownership":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{"core":{"sourceId":"Item.V9otC0Kh0y0B3P8Q"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.2","coreVersion":"10.285","createdTime":1662897982070,"modifiedTime":1663840745751,"lastModifiedBy":"jFAyH93PxEe1ncxK"},"folder":null,"sort":0,"_id":"X8RmCDRpojxc6u09"}
{"name":"Weapon • 1-H Concussion","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"St/Ag/St","app_stat_1":"St","app_stat_2":"Ag","app_stat_3":"St","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"ownership":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{"core":{"sourceId":"Item.CXllZNGgTe80uZRQ"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.2","coreVersion":"10.285","createdTime":1662898744329,"modifiedTime":1663840814331,"lastModifiedBy":"jFAyH93PxEe1ncxK"},"folder":null,"sort":0,"_id":"YZw0sLV7fZwXD85n"}
{"name":"Weapon • 1-H Edged","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"St/Ag/St","app_stat_1":"St","app_stat_2":"Ag","app_stat_3":"St","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"ownership":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{"core":{"sourceId":"Item.MV3UkzR77MTPHTau"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.2","coreVersion":"10.285","createdTime":1662898787439,"modifiedTime":1663840817273,"lastModifiedBy":"jFAyH93PxEe1ncxK"},"folder":null,"sort":0,"_id":"ZS8ikAjF41M7eZg5"}
{"name":"Awareness • Searching","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"In/Re/SD","app_stat_1":"In","app_stat_2":"Re","app_stat_3":"SD","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"ownership":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{"core":{"sourceId":"Item.NZl30XPdtYjHqtwp"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.2","coreVersion":"10.285","createdTime":1662897647294,"modifiedTime":1663840720922,"lastModifiedBy":"jFAyH93PxEe1ncxK"},"folder":null,"sort":0,"_id":"ZaUdmzJSrTeI0gsl"}
{"name":"Lore • General","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"Me/Re/Me","app_stat_1":"Me","app_stat_2":"Re","app_stat_3":"Me","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"ownership":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{"core":{"sourceId":"Item.5fCeVMz6xVnkmH8o"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.2","coreVersion":"10.285","createdTime":1662897962808,"modifiedTime":1663840744241,"lastModifiedBy":"jFAyH93PxEe1ncxK"},"folder":null,"sort":0,"_id":"brpsxpqHEnUfC8a1"}
{"name":"Science/Analytic • Basic","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"Re/Me/Re","app_stat_1":"Re","app_stat_2":"Me","app_stat_3":"Re","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"ownership":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{"core":{"sourceId":"Item.BfDFjciYPFezmes0"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.2","coreVersion":"10.285","createdTime":1662898290307,"modifiedTime":1663840771526,"lastModifiedBy":"jFAyH93PxEe1ncxK"},"folder":null,"sort":0,"_id":"dKHsLzvDinagbTCm"}
{"name":"Power Manipulation","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"Em/In/Pr","app_stat_1":"Em","app_stat_2":"In","app_stat_3":"Pr","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"ownership":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{"core":{"sourceId":"Item.CQX0326xax4K3lEP"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.2","coreVersion":"10.285","createdTime":1662898250959,"modifiedTime":1663840767601,"lastModifiedBy":"jFAyH93PxEe1ncxK"},"folder":null,"sort":0,"_id":"g64EdTWn0WxJXJFq"}
{"name":"Subterfuge • Attack","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"Ag/SD/In","app_stat_1":"Ag","app_stat_2":"SD","app_stat_3":"In","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"ownership":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{"core":{"sourceId":"Item.Zva3DO0Zmk3G5xWT"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.2","coreVersion":"10.285","createdTime":1662898559045,"modifiedTime":1663840799076,"lastModifiedBy":"jFAyH93PxEe1ncxK"},"folder":null,"sort":0,"_id":"gYP00F897jg2I6pC"}
{"name":"Artistic • Passive","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"Em/In/Pr","app_stat_1":"Em","app_stat_2":"In","app_stat_3":"Pr","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"ownership":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{"core":{"sourceId":"Item.NTMvAPWeh5G55Kjs"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.2","coreVersion":"10.285","createdTime":1662897462965,"modifiedTime":1663840713026,"lastModifiedBy":"jFAyH93PxEe1ncxK"},"folder":null,"sort":0,"_id":"hFi8bJUxX2HvSoDj"}
{"name":"Athletic • Brawn","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"St/Co/Ag","app_stat_1":"St","app_stat_2":"Co","app_stat_3":"Ag","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"ownership":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{"core":{"sourceId":"Item.VufLKW42mP7RtinG"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.2","coreVersion":"10.285","createdTime":1662897509473,"modifiedTime":1663840714620,"lastModifiedBy":"jFAyH93PxEe1ncxK"},"folder":null,"sort":0,"_id":"iC37JIsE5RETzyd6"}
{"name":"Spells • Own Realm Own Base Lists","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"None","app_stat_1":"None","app_stat_2":"None","app_stat_3":"None","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"ownership":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{"core":{"sourceId":"Item.eEAr5sqnGKej7eiC"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.2","coreVersion":"10.285","createdTime":1662898544500,"modifiedTime":1663840797285,"lastModifiedBy":"jFAyH93PxEe1ncxK"},"folder":null,"sort":0,"_id":"iWL7y95CGF7Y1dAq"}
{"name":"Artistic • Active","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"Pr/Em/Ag","app_stat_1":"Pr","app_stat_2":"Em","app_stat_3":"Ag","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"ownership":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{"core":{"sourceId":"Item.cEffILww7nn8vqJ7"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.2","coreVersion":"10.285","createdTime":1662897441727,"modifiedTime":1663840706776,"lastModifiedBy":"jFAyH93PxEe1ncxK"},"folder":null,"sort":0,"_id":"iZn6Hzq4cr0zY7Uk"}
{"name":"Power Point Development","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"None","app_stat_1":"None","app_stat_2":"None","app_stat_3":"None","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"ownership":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{"core":{"sourceId":"Item.Q7rKLS4gJwH2Lygw"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.2","coreVersion":"10.285","createdTime":1662898277091,"modifiedTime":1663840769117,"lastModifiedBy":"jFAyH93PxEe1ncxK"},"folder":null,"sort":0,"_id":"jOywgkFX58CVDn7z"}
{"name":"Armor • Heavy","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"St/Ag/St","app_stat_1":"St","app_stat_2":"Ag","app_stat_3":"St","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"ownership":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{"core":{"sourceId":"Item.7UA8xwzcBrKZfFk9"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.2","coreVersion":"10.285","createdTime":1662897366792,"modifiedTime":1663840700907,"lastModifiedBy":"jFAyH93PxEe1ncxK"},"folder":null,"sort":0,"_id":"k4IOyyJU8t7MAySl"}
{"name":"Spells • Other Realm Closed Lists","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"None","app_stat_1":"None","app_stat_2":"None","app_stat_3":"None","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"ownership":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{"core":{"sourceId":"Item.7ka2nD2kPq6ixwWu"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.2","coreVersion":"10.285","createdTime":1662898426199,"modifiedTime":1663840788519,"lastModifiedBy":"jFAyH93PxEe1ncxK"},"folder":null,"sort":0,"_id":"kbOWBGenZjWIVqrC"}
{"name":"Awareness • Senses","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"In/SD/In","app_stat_1":"In","app_stat_2":"SD","app_stat_3":"In","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"ownership":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{"core":{"sourceId":"Item.QplAVXReCFVlKVB8"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.2","coreVersion":"10.285","createdTime":1662897666266,"modifiedTime":1663840724332,"lastModifiedBy":"jFAyH93PxEe1ncxK"},"folder":null,"sort":0,"_id":"pApyCNOxQb5sIOsf"}
{"name":"Weapon • 2-Handed","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"St/Ag/St","app_stat_1":"St","app_stat_2":"Ag","app_stat_3":"St","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"ownership":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{"core":{"sourceId":"Item.JiH6JhVoH9jrqptT"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.2","coreVersion":"10.285","createdTime":1662898804378,"modifiedTime":1663840819146,"lastModifiedBy":"jFAyH93PxEe1ncxK"},"folder":null,"sort":0,"_id":"qRNUoJcWrF2EmLSP"}
{"name":"Spells • Own Realm Closed Lists","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"None","app_stat_1":"None","app_stat_2":"None","app_stat_3":"None","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"ownership":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{"core":{"sourceId":"Item.cyNDeZDye15gUFzA"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.2","coreVersion":"10.285","createdTime":1662898478099,"modifiedTime":1663840792427,"lastModifiedBy":"jFAyH93PxEe1ncxK"},"folder":null,"sort":0,"_id":"ruxbCKHjuGsdQ79z"}
{"name":"Outdoor • Animal","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"Em/Ag/Em","app_stat_1":"Em","app_stat_2":"Ag","app_stat_3":"Em","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"ownership":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{"core":{"sourceId":"Item.6UjbXeI6IFrsdTEy"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.2","coreVersion":"10.285","createdTime":1662898166391,"modifiedTime":1663840758805,"lastModifiedBy":"jFAyH93PxEe1ncxK"},"folder":null,"sort":0,"_id":"v6tHhdaL7amLDnzR"}
{"name":"Outdoor • Environmental","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"SD/In/Me","app_stat_1":"SD","app_stat_2":"In","app_stat_3":"Me","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"ownership":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{"core":{"sourceId":"Item.49iK0oluVd5Z1fpc"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.2","coreVersion":"10.285","createdTime":1662898214394,"modifiedTime":1663840760505,"lastModifiedBy":"jFAyH93PxEe1ncxK"},"folder":null,"sort":0,"_id":"vM8rePr9QRXnG6HK"}
{"name":"Spells • Other Realm Base Lists","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"None","app_stat_1":"None","app_stat_2":"None","app_stat_3":"None","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"ownership":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{"core":{"sourceId":"Item.Wo1SrqGsgMYNoApO"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.2","coreVersion":"10.285","createdTime":1662898426199,"modifiedTime":1663840786314,"lastModifiedBy":"jFAyH93PxEe1ncxK"},"folder":null,"sort":0,"_id":"vlFr24F5zJ9fYzs7"}
{"name":"Urban","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"In/Pr/Re","app_stat_1":"In","app_stat_2":"Pr","app_stat_3":"Re","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"ownership":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{"core":{"sourceId":"Item.JAY4cM0lv1wZm3vo"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.2","coreVersion":"10.285","createdTime":1662898721300,"modifiedTime":1663840812646,"lastModifiedBy":"jFAyH93PxEe1ncxK"},"folder":null,"sort":0,"_id":"xHqAlnQjgEScetvh"}
{"name":"Martial Arts • Striking","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"St/Ag/St","app_stat_1":"St","app_stat_2":"Ag","app_stat_3":"St","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"ownership":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{"core":{"sourceId":"Item.HVistg0XNoVGsSKZ"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.2","coreVersion":"10.285","createdTime":1662898114714,"modifiedTime":1663840754969,"lastModifiedBy":"jFAyH93PxEe1ncxK"},"folder":null,"sort":0,"_id":"xJXObXAQcdPbSXg9"}
{"name":"Communcations","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"Re/Me/Em","app_stat_1":"Re","app_stat_2":"Me","app_stat_3":"Em","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"ownership":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{"core":{"sourceId":"Item.fh63pdckz6VYGAFc"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.2","coreVersion":"10.285","createdTime":1662897838640,"modifiedTime":1663840730283,"lastModifiedBy":"jFAyH93PxEe1ncxK"},"folder":null,"sort":0,"_id":"xTzO3HPhQe5OS255"}
{"name":"Special Attacks","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"St/Ag/SD","app_stat_1":"St","app_stat_2":"Ag","app_stat_3":"SD","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"ownership":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{"core":{"sourceId":"Item.by1LH6XYGWd5d9bs"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.2","coreVersion":"10.285","createdTime":1662898332987,"modifiedTime":1663840775989,"lastModifiedBy":"jFAyH93PxEe1ncxK"},"folder":null,"sort":0,"_id":"yRIFroc5VC9Oj3qY"}

519
rmss.css Normal file
View File

@ -0,0 +1,519 @@
.skillcat-grid-container {
display: grid;
grid-template-columns: [skill-category-name] 10% [applicable-stats] 10% [dev-cost] 8% [num-ranks] 8% [new-ranks] 8% [rank-bonus] 8% [stat-bonus] 8% [prof-bonus] 8% [special-bonus-1] 8% [special-bonus-2] 8% [total-bonus] 8% [controls] 8%;
}
.skillcat-grid-container > div {
font-family: Signika, sans-serif;
font-size: 12px;
text-align: center;
border-bottom: 1px solid;
padding-top: 3px;
padding-bottom: 3px;
display: flex;
justify-content: flex-end;
flex-direction: column;
justify-content: center;
}
.skillcat-grid-container > div:nth-child(24n+1),
.skillcat-grid-container > div:nth-child(24n+2),
.skillcat-grid-container > div:nth-child(24n+3),
.skillcat-grid-container > div:nth-child(24n+4),
.skillcat-grid-container > div:nth-child(24n+5),
.skillcat-grid-container > div:nth-child(24n+6),
.skillcat-grid-container > div:nth-child(24n+7),
.skillcat-grid-container > div:nth-child(24n+8),
.skillcat-grid-container > div:nth-child(24n+9),
.skillcat-grid-container > div:nth-child(24n+10),
.skillcat-grid-container > div:nth-child(24n+11),
.skillcat-grid-container > div:nth-child(24n+12) {
font-family: Signika, sans-serif;
font-size: 12px;
text-align: center;
border-bottom: 1px solid;
padding-top: 3px;
padding-bottom: 3px;
display: flex;
justify-content: flex-end;
flex-direction: column;
justify-content: center;
background-image: linear-gradient(rgba(0, 0, 0, 0.1) 0 0);
}
.skillcat-grid-heading {
font-weight: bold;
border-bottom: 1px solid;
background-image: linear-gradient(rgba(0, 0, 0, 0.1) 0 0);
}
.container {
display: flex;
}
.actor-icon {
flex-shrink: 1;
}
.favorite-container {
padding: 5px;
}
.header-container {
flex-grow: 2;
outline: 1px solid;
/* use instead of border */
margin-top: 1px;
margin-left: 1px;
padding: 5px;
}
.header-text {
display: flex;
align-items: center;
padding: 1px;
}
.settings-button,
.playersheet-settings {
font-family: Signika, sans-serif;
font-size: 12px;
margin-right: 6px;
}
.resource-container {
display: flex;
flex-direction: row;
flex-grow: 3;
text-align: -webkit-center;
}
.resource-container > * {
flex: 1 1 0;
}
.resource-entry {
outline: 1px solid;
/* use instead of border */
margin-top: 1px;
margin-left: 1px;
padding: 5px;
}
.resource-entry input {
width: 50px;
border: none;
}
.stat-container {
flex-direction: column;
flex-shrink: 1;
}
.stat-row {
align-items: center;
}
.equipment-container {
flex-direction: column;
flex-grow: 1;
}
.stat-block {
outline: 1px solid;
/* use instead of border */
margin-top: 1px;
margin-left: 1px;
padding: 5px;
}
.stat-name,
.money-name {
width: 75px;
border: none;
font-family: Signika, sans-serif;
font-size: 12px;
}
.stat-name input {
border: none;
}
.stat-header {
font-family: Signika, sans-serif;
font-size: 12px;
}
.fixed-info-container {
flex-grow: 3;
flex-direction: row;
font-family: Signika, sans-serif;
font-size: 12px;
}
.fixed-info-section {
outline: 1px solid;
/* use instead of border */
margin-top: 1px;
margin-left: 1px;
padding: 5px;
}
.armor-block {
outline: 1px solid;
/* use instead of border */
margin-top: 1px;
margin-left: 1px;
padding: 5px;
}
.race-stat-fixed-info-block {
outline: 1px solid;
/* use instead of border */
margin-top: 1px;
margin-left: 1px;
padding: 5px;
}
.role-traits-block {
outline: 1px solid;
/* use instead of border */
margin-top: 1px;
margin-left: 1px;
padding: 5px;
}
.background-info-block {
outline: 1px solid;
/* use instead of border */
margin-top: 1px;
margin-left: 1px;
padding: 5px;
}
.resistance-block {
outline: 1px solid;
/* use instead of border */
margin-top: 1px;
margin-left: 1px;
padding: 5px;
}
.red {
background-color: orangered;
}
.blue {
background-color: lightblue;
}
.grey {
background-color: lightgrey;
}
.green {
background-color: lightseagreen;
}
.skills-grid-container {
display: grid;
grid-template-columns: [favorite] 9% [skill-name] 11% [num-ranks] 9% [new-ranks] 9% [rank-bonus] 9% [category-bonus] 9% [item-bonus] 9% [special-bonus-1] 9% [special-bonus-2] 9% [total-bonus] 9% [controls] 8%;
}
.skills-grid-container > div {
font-family: Signika, sans-serif;
font-size: 12px;
text-align: center;
border-bottom: 1px solid;
padding-top: 3px;
padding-bottom: 3px;
display: flex;
justify-content: flex-end;
flex-direction: column;
justify-content: center;
}
.skills-grid-container > div:nth-child(22n+1),
.skills-grid-container > div:nth-child(22n+2),
.skills-grid-container > div:nth-child(22n+3),
.skills-grid-container > div:nth-child(22n+4),
.skills-grid-container > div:nth-child(22n+5),
.skills-grid-container > div:nth-child(22n+6),
.skills-grid-container > div:nth-child(22n+7),
.skills-grid-container > div:nth-child(22n+8),
.skills-grid-container > div:nth-child(22n+9),
.skills-grid-container > div:nth-child(22n+10),
.skills-grid-container > div:nth-child(22n+11) {
font-family: Signika, sans-serif;
font-size: 12px;
text-align: center;
border-bottom: 1px solid;
padding-top: 3px;
padding-bottom: 3px;
display: flex;
justify-content: flex-end;
flex-direction: column;
justify-content: center;
background-image: linear-gradient(rgba(0, 0, 0, 0.1) 0 0);
}
.skills-grid-heading {
font-weight: bold;
border-bottom: 1px solid;
background-image: linear-gradient(rgba(0, 0, 0, 0.1) 0 0);
}
.money-column {
flex-direction: column;
}
.money-container {
flex-direction: column;
flex-shrink: 1;
padding-left: 10px;
}
.items-grid-container {
display: grid;
grid-template-columns: [worn] 10% [name] 30% [quantity] 15% [weight] 15% [cost] 15% [controls] 15%;
}
.items-grid-container > div {
font-family: Signika, sans-serif;
font-size: 12px;
text-align: center;
border-bottom: 1px solid;
padding-top: 3px;
padding-bottom: 3px;
display: flex;
justify-content: flex-end;
flex-direction: row;
justify-content: center;
}
.items-grid-container > div:nth-child(12n+1),
.items-grid-container > div:nth-child(12n+2),
.items-grid-container > div:nth-child(12n+3),
.items-grid-container > div:nth-child(12n+4),
.items-grid-container > div:nth-child(12n+5),
.items-grid-container > div:nth-child(12n+6) {
font-family: Signika, sans-serif;
font-size: 12px;
text-align: center;
border-bottom: 1px solid;
padding-top: 3px;
padding-bottom: 3px;
display: flex;
justify-content: flex-end;
flex-direction: row;
justify-content: center;
background-image: linear-gradient(rgba(0, 0, 0, 0.1) 0 0);
}
.items-grid-heading {
font-weight: bold;
border-bottom: 1px solid;
background-image: linear-gradient(rgba(0, 0, 0, 0.1) 0 0);
}
.weapons-grid-container {
display: grid;
grid-template-columns: [name] 30% [equipped] 8% [breakage_range] 9% [fumble_range] 9% [strength] 9% [quantity] 9% [weight] 9% [cost] 9% [controls] 8%;
}
.weapons-grid-container > div {
font-family: Signika, sans-serif;
font-size: 12px;
text-align: center;
border-bottom: 1px solid;
padding-top: 3px;
padding-bottom: 3px;
display: flex;
justify-content: flex-end;
flex-direction: row;
justify-content: center;
}
.weapons-grid-container > div:nth-child(18n+1),
.weapons-grid-container > div:nth-child(18n+2),
.weapons-grid-container > div:nth-child(18n+3),
.weapons-grid-container > div:nth-child(18n+4),
.weapons-grid-container > div:nth-child(18n+5),
.weapons-grid-container > div:nth-child(18n+6),
.weapons-grid-container > div:nth-child(18n+7),
.weapons-grid-container > div:nth-child(18n+8),
.weapons-grid-container > div:nth-child(18n+9) {
font-family: Signika, sans-serif;
font-size: 12px;
text-align: center;
border-bottom: 1px solid;
padding-top: 3px;
padding-bottom: 3px;
display: flex;
justify-content: flex-end;
flex-direction: row;
justify-content: center;
background-image: linear-gradient(rgba(0, 0, 0, 0.1) 0 0);
}
.weapons-grid-heading {
font-weight: bold;
border-bottom: 1px solid;
background-image: linear-gradient(rgba(0, 0, 0, 0.1) 0 0);
}
.armor-grid-container {
display: grid;
grid-template-columns: [name] 30% [equipped] 12% [at] 12% [quantity] 12% [weight] 12% [cost] 12% [controls] 10%;
}
.armor-grid-container > div {
font-family: Signika, sans-serif;
font-size: 12px;
text-align: center;
border-bottom: 1px solid;
padding-top: 3px;
padding-bottom: 3px;
display: flex;
justify-content: flex-end;
flex-direction: row;
justify-content: center;
}
.armor-grid-container > div:nth-child(14n+1),
.armor-grid-container > div:nth-child(14n+2),
.armor-grid-container > div:nth-child(14n+3),
.armor-grid-container > div:nth-child(14n+4),
.armor-grid-container > div:nth-child(14n+5),
.armor-grid-container > div:nth-child(14n+6),
.armor-grid-container > div:nth-child(14n+7) {
font-family: Signika, sans-serif;
font-size: 12px;
text-align: center;
border-bottom: 1px solid;
padding-top: 3px;
padding-bottom: 3px;
display: flex;
justify-content: flex-end;
flex-direction: row;
justify-content: center;
background-image: linear-gradient(rgba(0, 0, 0, 0.1) 0 0);
}
.armor-grid-heading {
font-weight: bold;
border-bottom: 1px solid;
background-image: linear-gradient(rgba(0, 0, 0, 0.1) 0 0);
}
.herbs-grid-container {
display: grid;
grid-template-columns: [name] 30% [quantity] 11% [codes] 12% [af] 12% [weight] 12% [cost] 11% [controls] 12%;
}
.herbs-grid-container > div {
font-family: Signika, sans-serif;
font-size: 12px;
text-align: center;
border-bottom: 1px solid;
padding-top: 3px;
padding-bottom: 3px;
display: flex;
justify-content: flex-end;
flex-direction: row;
justify-content: center;
}
.herbs-grid-container > div:nth-child(14n+1),
.herbs-grid-container > div:nth-child(14n+2),
.herbs-grid-container > div:nth-child(14n+3),
.herbs-grid-container > div:nth-child(14n+4),
.herbs-grid-container > div:nth-child(14n+5),
.herbs-grid-container > div:nth-child(14n+6),
.herbs-grid-container > div:nth-child(14n+7) {
font-family: Signika, sans-serif;
font-size: 12px;
text-align: center;
border-bottom: 1px solid;
padding-top: 3px;
padding-bottom: 3px;
display: flex;
justify-content: flex-end;
flex-direction: row;
justify-content: center;
background-image: linear-gradient(rgba(0, 0, 0, 0.1) 0 0);
}
.herbs-grid-heading {
font-weight: bold;
border-bottom: 1px solid;
background-image: linear-gradient(rgba(0, 0, 0, 0.1) 0 0);
}
.spell-grid-container {
display: grid;
grid-template-columns: [favorite] 9% [level] 8% [name] 30% [spell_list] 9% [area_of_effect] 9% [duration] 9% [range] 9% [type] 9% [controls] 8%;
}
.spell-grid-container > div {
font-family: Signika, sans-serif;
font-size: 12px;
text-align: center;
border-bottom: 1px solid;
padding-top: 3px;
padding-bottom: 3px;
display: flex;
justify-content: flex-end;
flex-direction: row;
justify-content: center;
}
.spell-grid-container > div:nth-child(18n+1),
.spell-grid-container > div:nth-child(18n+2),
.spell-grid-container > div:nth-child(18n+3),
.spell-grid-container > div:nth-child(18n+4),
.spell-grid-container > div:nth-child(18n+5),
.spell-grid-container > div:nth-child(18n+6),
.spell-grid-container > div:nth-child(18n+7),
.spell-grid-container > div:nth-child(18n+8),
.spell-grid-container > div:nth-child(18n+9) {
font-family: Signika, sans-serif;
font-size: 12px;
text-align: center;
border-bottom: 1px solid;
padding-top: 3px;
padding-bottom: 3px;
display: flex;
justify-content: flex-end;
flex-direction: row;
justify-content: center;
background-image: linear-gradient(rgba(0, 0, 0, 0.1) 0 0);
}
.spell-grid-heading {
font-weight: bold;
border-bottom: 1px solid;
background-image: linear-gradient(rgba(0, 0, 0, 0.1) 0 0);
}
.resistances-grid-container {
outline: 1px solid;
/* use instead of border */
margin-top: 1px;
margin-left: 1px;
padding: 5px;
display: grid;
grid-template-columns: [Name] 40% [Value] 20% [Race_Mod] 20% [Total] 20%;
}
.resistances-grid-heading {
font-weight: bold;
border-bottom: 1px solid;
background-image: linear-gradient(rgba(0, 0, 0, 0.1) 0 0);
}
.resistance-input {
width: 50%;
}
.skillcat-name,
.skill-name,
.item-name,
.spell-name,
.equipable-name {
font-family: Signika, sans-serif;
font-size: 12px;
font-weight: bold;
text-align: center;
}
.skillcat-entry,
.skill-entry,
.item-entry,
.spell-entry,
.equipable-entry {
font-family: Signika, sans-serif;
font-size: 12px;
text-align: center;
}
.skillcat-headeritem,
.skill-headeritem,
.item-headeritem,
.spell-headeritem,
.equipable-headeritem {
text-align: center;
font-weight: bold;
}
.skillcat-controls,
.skill-controls,
.item-controls {
font-family: Signika, sans-serif;
font-size: 12px;
text-align: center;
}
.applicable-stats-grid-container {
display: grid;
grid-template-columns: [app-stat-1] 33% [app-stat-2] 33% [app-stat-3] 33%;
}
.applicable-stats-grid-container > div {
font-family: Signika, sans-serif;
font-size: 12px;
text-align: center;
border-bottom: 1px solid;
padding-top: 3px;
padding-bottom: 3px;
display: flex;
justify-content: flex-end;
flex-direction: column;
justify-content: center;
}
.sheet form {
display: flex;
flex-direction: column;
}
.sheet .sheet-content {
height: 100%;
display: flex;
flex-direction: column;
}
.sheet .sheet-content .editor {
height: 100%;
}

111
rmss.js Normal file
View File

@ -0,0 +1,111 @@
// Import Configuration Object
import { rmss } from "./module/config.js";
// Import document classes.
import { RMSSActor } from "./module/documents/actor.js";
import { RMSSItem } from "./module/documents/item.js";
// Import Sheets
import RMSSItemSheet from "./module/sheets/items/rmss_item_sheet.js";
import RMSSArmorSheet from "./module/sheets/items/rmss_armor_sheet.js";
import RMSSTransportSheet from "./module/sheets/items/rmss_transport_sheet.js";
import RMSSWeaponSheet from "./module/sheets/items/rmss_weapon_sheet.js";
import RMSSHerbOrPoisonSheet from "./module/sheets/items/rmss_herb_or_poison_sheet.js";
import RMSSSpellSheet from "./module/sheets/spells/rmss_spell_sheet.js";
import RMSSSkillCategorySheet from "./module/sheets/skills/rmss_skill_category_sheet.js";
import RMSSSkillSheet from "./module/sheets/skills/rmss_skill_sheet.js";
import RMSSPlayerSheet from "./module/sheets/actors/rmss_player_sheet.js";
import RMSSActorSheetConfig from "./module/sheets/actors/rmss_player_sheet_config.js";
/** Preload handlebars templates for character sheets */
async function preloadHandlebarsTemplates() {
const templatePaths = [
"systems/rmss/templates/sheets/actors/parts/actor-stats.html",
"systems/rmss/templates/sheets/actors/parts/actor-fixed-info.html",
"systems/rmss/templates/sheets/actors/parts/actor-armor-info.html",
"systems/rmss/templates/sheets/actors/parts/actor-resistance.html",
"systems/rmss/templates/sheets/actors/parts/actor-race-stat-fixed-info.html",
"systems/rmss/templates/sheets/actors/parts/actor-role-traits.html",
"systems/rmss/templates/sheets/actors/parts/actor-background-info.html",
"systems/rmss/templates/sheets/actors/parts/actor-skill-categories.html",
"systems/rmss/templates/sheets/actors/parts/actor-skills.html",
"systems/rmss/templates/sheets/actors/parts/actor-fav-skills.html",
"systems/rmss/templates/sheets/actors/parts/actor-items.html",
"systems/rmss/templates/sheets/actors/parts/actor-weapons.html",
"systems/rmss/templates/sheets/actors/parts/actor-money.html",
"systems/rmss/templates/sheets/actors/parts/actor-skill-categories.html",
"systems/rmss/templates/sheets/actors/parts/actor-skills.html",
"systems/rmss/templates/sheets/actors/parts/actor-armor.html",
"systems/rmss/templates/sheets/actors/parts/actor-herbs.html",
"systems/rmss/templates/sheets/actors/parts/actor-spells.html",
"systems/rmss/templates/sheets/actors/parts/actor-fav-spells.html",
"systems/rmss/templates/sheets/actors/parts/actor-fav-items.html",
"systems/rmss/templates/sheets/actors/apps/actor-settings.html"
];
return loadTemplates(templatePaths);
}
// Hook the init function and set up our system
Hooks.once("init", function() {
console.log("rmss | Initialising Rolemaster Standard System");
// Load our custom actor and item classes
console.log("rmss | Loading Rolemaster Actor and Item classes");
game.rmss = {
RMSSActor,
RMSSItem,
applications: {
RMSSActorSheetConfig
}
};
// Define custom Document classes
CONFIG.Actor.documentClass = RMSSActor;
CONFIG.Item.documentClass = RMSSItem;
// Make Config Data Available
CONFIG.rmss = rmss;
// Unregister Default Sheets
console.log("rmss | Unregistering core sheets");
Items.unregisterSheet("core", ItemSheet);
Actors.unregisterSheet("core", ActorSheet);
// Register RMSS Sheets
console.log("rmss | Registering RMSS sheets");
// Items
Items.registerSheet("rmss", RMSSItemSheet, {makeDefault: true, label: "rmss.entity_sheet.item", types: ["item"]});
Items.registerSheet("rmss", RMSSArmorSheet, {makeDefault: true, label: "rmss.entity_sheet.armor", types: ["armor"]});
Items.registerSheet("rmss", RMSSTransportSheet, {makeDefault: true, label: "rmss.entity_sheet.transport", types: ["transport"]});
Items.registerSheet("rmss", RMSSWeaponSheet, {makeDefault: true, label: "rmss.entity_sheet.weapon", types: ["weapon"]});
Items.registerSheet("rmss", RMSSHerbOrPoisonSheet, {makeDefault: true, label: "rmss.entity_sheet.herb_or_poison", types: ["herb_or_poison"]});
// Spells
Items.registerSheet("rmss", RMSSSpellSheet, {makeDefault: true, label: "rmss.entity_sheet.spell", types: ["spell"]});
// Skills
Items.registerSheet("rmss", RMSSSkillCategorySheet, {makeDefault: true, label: "rmss.entity_sheet.skill_category", types: ["skill_category"]});
Items.registerSheet("rmss", RMSSSkillSheet, {makeDefault: true, label: "rmss.entity_sheet.skill", types: ["skill"]});
// Actors
Actors.registerSheet("rmss", RMSSPlayerSheet, {makeDefault: true, label: "rmss.entity_sheet.player_characrer", types: ["character"]});
// Preload Handlebars Templates
console.log("rmss | Preloading Handlebars Templates");
preloadHandlebarsTemplates();
// Handlebars Helpers
Handlebars.registerHelper("switch", function(value, options) {
this.switch_value = value;
return options.fn(this);
});
Handlebars.registerHelper("case", function(value, options) {
if (value === this.switch_value) {
return options.fn(this);
}
});
});

45
system.json Normal file
View File

@ -0,0 +1,45 @@
{
"name": "fvtt-rolemaster-frp",
"title": "Rolemaster FRP System",
"description": "The Rolemaster FRP system for FoundryVTT.",
"manifest": "https://www.uberwald.me/gitea/public/fvtt-rolemaster-frp/raw/branch/develop/rmss/system.json",
"authors": [
{
"name": "Cynicide",
"email": ""
},
{
"name": "LeRatierBretonnien",
"email": ""
}
],
"version": "12.0.0",
"compatibility": {
"minimum": "12",
"verified": "12"
},
"esmodules":[
"rmss.js"
],
"styles": ["rmss.css"],
"packs": [ {
"name": "skill_categories",
"label": "Skill Categories",
"system": "fvtt-rolemaster-frp",
"path": "./packs/skill_categories.db",
"type": "Item"
}
],
"languages": [
{
"lang": "en",
"name": "English",
"path": "lang/en.json"
}
],
"grid": {
"distance": 5,
"units": "ft"
},
"license": "LICENSE.txt"
}

355
template.json Normal file
View File

@ -0,0 +1,355 @@
{
"Actor": {
"types": ["character", "npc"],
"templates": {
"role_traits": {
"role_traits": {
"appearance": 0,
"sex": "",
"skin": "",
"apparent_age": 0,
"actual_age": 0,
"height": "",
"weight": "",
"hair": "",
"eyes": "",
"personality": "",
"motivations": "",
"alignment": ""
}
},
"race_stat_fixed_info": {
"race_stat_fixed_info" : {
"soul_departure_rounds": 0,
"recovery_multiplier": 0,
"body_development_progression": "",
"pp_development_progression": "",
"recover_hits_per_hour_resting": 0,
"recover_hits_per_sleep_cycle": 0,
"recover_pp_per_hour_resting": 0,
"recover_pp_per_sleep_cycle": 0
}
},
"armor_info": {
"armor_info": {
"armor_type": 0,
"mmp": 0,
"weight_penalty": 0,
"missile_penalty": 0,
"quickness_penalty": 0,
"quickness_bonus": 0,
"adrenal_defense": 0,
"shield_bonus": 0,
"magic": "",
"total_db": 0
}
},
"fixed_info": {
"fixed_info": {
"race": "",
"profession": "",
"training_packages": "",
"realm": ""
}
},
"resistance_rolls": {
"resistance_rolls": {
"channeling": {
"value": 0,
"race_mod": 0,
"total": 0
},
"essence": {
"value": 0,
"race_mod": 0,
"total": 0
},
"mentalism": {
"value": 0,
"race_mod": 0,
"total": 0
},
"chann_ess": {
"value": 0,
"race_mod": 0,
"total": 0
},
"chann_ment": {
"value": 0,
"race_mod": 0,
"total": 0
},
"ess_ment": {
"value": 0,
"race_mod": 0,
"total": 0
},
"arcane": {
"value": 0,
"race_mod": 0,
"total": 0
},
"poison_disease": {
"value": 0,
"race_mod": 0,
"total": 0
},
"fear": {
"value": 0,
"race_mod": 0,
"total": 0
}
}
},
"background": {
"background": {
"nationality": "",
"home_town": "",
"deity": "",
"patron": "",
"parents": "",
"spouse": "",
"children": "",
"other": ""
}
},
"stats": {
"stats": {
"agility": {
"shortname": "Ag",
"temp": 0,
"potential": 0,
"basic_bonus": 0,
"racial_bonus": 0,
"special_bonus": 0,
"stat_bonus": 0
},
"constitution": {
"shortname": "Co",
"temp": 0,
"potential": 0,
"basic_bonus": 0,
"racial_bonus": 0,
"special_bonus": 0,
"stat_bonus": 0
},
"memory": {
"shortname": "Me",
"temp": 0,
"potential": 0,
"basic_bonus": 0,
"racial_bonus": 0,
"special_bonus": 0,
"stat_bonus": 0
},
"reasoning": {
"shortname": "Re",
"temp": 0,
"potential": 0,
"basic_bonus": 0,
"racial_bonus": 0,
"special_bonus": 0,
"stat_bonus": 0
},
"self_discipline": {
"shortname": "SD",
"temp": 0,
"potential": 0,
"basic_bonus": 0,
"racial_bonus": 0,
"special_bonus": 0,
"stat_bonus": 0
},
"empathy": {
"shortname": "Em",
"temp": 0,
"potential": 0,
"basic_bonus": 0,
"racial_bonus": 0,
"special_bonus": 0,
"stat_bonus": 0
},
"intuition": {
"shortname": "In",
"temp": 0,
"potential": 0,
"basic_bonus": 0,
"racial_bonus": 0,
"special_bonus": 0,
"stat_bonus": 0
},
"presence": {
"shortname": "Pr",
"temp": 0,
"potential": 0,
"basic_bonus": 0,
"racial_bonus": 0,
"special_bonus": 0,
"stat_bonus": 0
},
"quickness": {
"shortname": "Qu",
"temp": 0,
"potential": 0,
"basic_bonus": 0,
"racial_bonus": 0,
"special_bonus": 0,
"stat_bonus": 0
},
"strength": {
"shortname": "St",
"temp": 0,
"potential": 0,
"basic_bonus": 0,
"racial_bonus": 0,
"special_bonus": 0,
"stat_bonus": 0
}
}
},
"money": {
"money": {
"mithril": 0,
"platinum": 0,
"gold": 0,
"silver": 0,
"bronze": 0,
"copper": 0,
"tin": 0,
"iron": 0
}
}
},
"character": {
"templates": ["background", "stats", "resistance_rolls", "armor_info", "fixed_info", "race_stat_fixed_info", "role_traits", "money", "description"],
"attributes": {
"level": {
"value": 1
},
"hits": {
"current": 1,
"max": 1
},
"exhaustion_points": {
"current": 1,
"max": 1
},
"power_points": {
"current": 1,
"max": 1
},
"experience_points": {
"value": 0
}
},
"description": ""
}
},
"Item": {
"types": ["item", "skill_category", "skill", "armor", "weapon", "transport", "herb_or_poison", "spell", "language"],
"templates": {
"base": {
"description": "Description here."
}
},
"item": {
"templates": ["base"],
"worn": false,
"quantity": 1,
"weight": 0,
"cost": 0,
"prod_time": 0
},
"transport": {
"templates": ["base"],
"feet_per_round": 1,
"miles_per_hour": 0,
"cost": 0,
"maneuver": 0,
"height": 0,
"weight": 0,
"capacity": 0,
"offensive_bonus": 0
},
"armor": {
"templates": ["base"],
"equipped": false,
"quantity": 1,
"weight": 0,
"cost": 0,
"prod_time": 0,
"at": 0
},
"weapon": {
"templates": ["base"],
"equipped": false,
"quantity": 1,
"cost": 0,
"weight": 0,
"type" : "",
"prod_time": 0,
"at": 0,
"breakage_range": "",
"strength": "",
"fumble_range": ""
},
"herb_or_poison": {
"templates": ["base"],
"quantity": 1,
"weight": 0,
"codes": "",
"form_and_prep" : "",
"cost": 0,
"af": 0
},
"skill": {
"templates": ["base"],
"category" : "",
"ranks": 0,
"new_ranks": {
"value": 0,
"max": 3,
"max_default": 3
},
"rank_bonus": -15,
"category_bonus": 0,
"item_bonus": 0,
"special_bonus_1": 0,
"special_bonus_2": 0,
"total_bonus": 0,
"favorite": false,
"designation": "None"
},
"skill_category": {
"templates": ["base"],
"applicable_stats": "None",
"app_stat_1": "None",
"app_stat_2": "None",
"app_stat_3": "None",
"development_cost": "0",
"ranks": 0,
"new_ranks": {
"value": 0,
"max": 3,
"max_default": 3
},
"rank_bonus": -15,
"stat_bonus": 0,
"prof_bonus": 0,
"special_bonus_1": 0,
"special_bonus_2": 0,
"total_bonus": 0,
"favorite": false
},
"spell": {
"favorite": false,
"spell_list": "",
"level": 1,
"area_of_effect": "",
"duration": "",
"range": "",
"type": "",
"description": "Description here."
}
}
}

View File

@ -0,0 +1,17 @@
<form>
<div>
<h3>Import Skill Categories</h3>
<div>
WARNING: This will erase your existing Skill Categories and import all Skill Categories from the selected Compendium.
</div>
<div>
Select Compendium:
<select name="selectOptions" class="compendium-selector" value="None" itemid="blah">
{{selectOptions selectOptions}}
</select></div>
<div>
<button class="import-skillcats" title="Import">Import</button>
</div>
</div>
</form>

View File

@ -0,0 +1,62 @@
<section class="armor-block">
<div class="label-name">
{{ localize "rmss.pc_sheet_armor_info.armor_type" }}
</div>
<div class="label-name">
<input type="text" name="system.armor_info.armor_type" value="{{system.armor_info.armor_type}}" data-dtype="Number"/>
</div>
<div class="label-name">
{{ localize "rmss.pc_sheet_armor_info.mmp" }}
</div>
<div class="label-name">
<input type="text" name="system.armor_info.mmp" value="{{system.armor_info.mmp}}" data-dtype="Number"/>
</div>
<div class="label-name">
{{ localize "rmss.pc_sheet_armor_info.weight_penalty" }}
</div>
<div class="label-name">
<input type="text" name="system.armor_info.weight_penalty" value="{{system.armor_info.weight_penalty}}" data-dtype="Number"/>
</div>
<div class="label-name">
{{ localize "rmss.pc_sheet_armor_info.missile_penalty" }}
</div>
<div class="label-name">
<input type="text" name="system.armor_info.missile_penalty" value="{{system.armor_info.missile_penalty}}" data-dtype="Number"/>
</div>
<div class="label-name">
{{ localize "rmss.pc_sheet_armor_info.quickness_penalty" }}
</div>
<div class="label-name">
<input type="text" name="system.armor_info.quickness_penalty" value="{{system.armor_info.quickness_penalty}}" data-dtype="Number"/>
</div>
<div class="label-name">
{{ localize "rmss.pc_sheet_armor_info.quickness_bonus" }}
</div>
<div class="label-name">
<input type="text" name="system.armor_info.quickness_bonus" value="{{system.armor_info.quickness_bonus}}" data-dtype="Number"/>
</div>
<div class="label-name">
{{ localize "rmss.pc_sheet_armor_info.adrenal_defense" }}
</div>
<div class="label-name">
<input type="text" name="system.armor_info.adrenal_defense" value="{{system.armor_info.adrenal_defense}}" data-dtype="Number"/>
</div>
<div class="label-name">
{{ localize "rmss.pc_sheet_armor_info.shield_bonus" }}
</div>
<div class="label-name">
<input type="text" name="system.armor_info.shield_bonus" value="{{system.armor_info.shield_bonus}}" data-dtype="Number"/>
</div>
<div class="label-name">
{{ localize "rmss.pc_sheet_armor_info.magic" }}
</div>
<div class="label-name">
<input type="text" name="system.armor_info.magic" value="{{system.armor_info.magic}}" data-dtype="String"/>
</div>
<div class="label-name">
{{ localize "rmss.pc_sheet_armor_info.total_db" }}
</div>
<div class="label-name">
<input type="text" name="system.armor_info.total_db" value="{{system.armor_info.total_db}}" data-dtype="Number"/>
</div>
</section>

View File

@ -0,0 +1,29 @@
<div class="armor-grid-container">
<!-- LOCALIZE THE LAST STRINGS IN THIS PAGE. ALSO SKILLS AND SKILL CATEGORIES-->
<div class="armor-grid-heading">{{ localize "rmss.pc_sheet_items.item_name" }}</div>
<div class="armor-grid-heading">{{ localize "rmss.pc_sheet_items.equipped" }}</div>
<div class="armor-grid-heading">{{ localize "rmss.armor.at" }}</div>
<div class="armor-grid-heading">{{ localize "rmss.pc_sheet_items.quantity" }}</div>
<div class="armor-grid-heading">{{ localize "rmss.pc_sheet_items.weight" }}</div>
<div class="armor-grid-heading">{{ localize "rmss.pc_sheet_items.cost" }}</div>
<div class="armor-grid-heading">
<a class="item-control item-create" title="Create Item" data-type="armor"><i class="fas fa-plus"></i>{{ localize "rmss.pc_sheet_items.add_item" }}</a>
</div>
{{#each armor as |equipable id|}}
<div>{{equipable.name}}</div>
{{#if equipable.system.equipped}}
<div><a class="equippable" data-item-id="{{equipable._id}}"><i class="fa-regular fa-square-check"></i></a></div>
{{else}}
<div><a class="equippable" data-item-id="{{equipable._id}}"><i class="fa-regular fa-square"></i></a></div>
{{/if}}
<div>{{equipable.system.at}}</div>
<div>{{equipable.system.quantity}}</div>
<div>{{equipable.system.weight}}</div>
<div>{{equipable.system.cost}}</div>
<div class="item-controls">
<a class="item-control item-edit" title="Edit Item" data-item-id="{{equipable._id}}"><i class="fas fa-edit"></i></a>
<a class="item-control item-delete" title="Delete Item" data-item-id="{{equipable._id}}"><i class="fas fa-trash"></i></a>
</div>
{{/each}}
</div>

View File

@ -0,0 +1,50 @@
<section class="background-info-block">
<div class="label-name">
{{ localize "rmss.pc_sheet_background_info.nationality" }}
</div>
<div class="label-name">
<input type="text" name="system.background.nationality" value="{{system.background.nationality}}" data-dtype="String"/>
</div>
<div class="label-name">
{{ localize "rmss.pc_sheet_background_info.home_town" }}
</div>
<div class="label-name">
<input type="text" name="system.background.home_town" value="{{system.background.home_town}}" data-dtype="String"/>
</div>
<div class="label-name">
{{ localize "rmss.pc_sheet_background_info.deity" }}
</div>
<div class="label-name">
<input type="text" name="system.background.deity" value="{{system.background.deity}}" data-dtype="String"/>
</div>
<div class="label-name">
{{ localize "rmss.pc_sheet_background_info.patron" }}
</div>
<div class="label-name">
<input type="text" name="system.background.patron" value="{{system.background.patron}}" data-dtype="String"/>
</div>
<div class="label-name">
{{ localize "rmss.pc_sheet_background_info.parents" }}
</div>
<div class="label-name">
<input type="text" name="system.background.parents" value="{{system.background.parents}}" data-dtype="String"/>
</div>
<div class="label-name">
{{ localize "rmss.pc_sheet_background_info.spouse" }}
</div>
<div class="label-name">
<input type="text" name="system.background.spouse" value="{{system.background.spouse}}" data-dtype="String"/>
</div>
<div class="label-name">
{{ localize "rmss.pc_sheet_background_info.children" }}
</div>
<div class="label-name">
<input type="text" name="system.background.children" value="{{system.background.children}}" data-dtype="String"/>
</div>
<div class="label-name">
{{ localize "rmss.pc_sheet_background_info.other" }}
</div>
<div class="label-name">
<input type="text" name="system.background.other" value="{{system.background.other}}" data-dtype="String"/>
</div>
</section>

View File

@ -0,0 +1,33 @@
<table>
<th><div class="equipable-name equipable-headeritem">{{ localize "rmss.pc_sheet_items.item_name" }}</div></th>
<th><div class="equipable-entry equipable-headeritem">{{ localize "rmss.armor.at" }}</div></th>
<th><div class="equipable-entry equipable-headeritem">{{ localize "rmss.weapon.breakage_range" }}</div></th>
<th><div class="equipable-entry equipable-headeritem">{{ localize "rmss.weapon.fumble_range" }}</div></th>
<th><div class="equipable-entry equipable-headeritem">{{ localize "rmss.weapon.strength" }}</div></th>
{{#each armor as |equipable id|}}
{{#if equipable.system.equipped}}
<tr class="item" data-item-id="{{equipable._id}}">
<td><div class="equipable-name">
<h4>{{equipable.name}}</h4>
</div></td>
<td><div class="equipable-entry item-prop"><div>{{equipable.system.at}}</div></div></td>
<td><div class="equipable-entry item-prop"> - </div></td>
<td><div class="equipable-entry item-prop"> - </div></td>
<td><div class="equipable-entry item-prop"> - </div></td>
</tr>
{{/if}}
{{/each}}
{{#each weapons as |weapon id|}}
{{#if weapon.system.equipped}}
<tr class="item" data-item-id="{{weapon._id}}">
<td><div class="equipable-name">
<h4>{{weapon.name}}</h4>
</div></td>
<td><div class="equipable-entry item-prop"><div> - </div></div></td>
<td><div class="equipable-entry item-prop">{{weapon.system.breakage_range}}</div></td>
<td><div class="equipable-entry item-prop">{{weapon.system.fumble_range}}</div></td>
<td><div class="equipable-entry item-prop">{{weapon.system.strength}}</div></td>
</tr>
{{/if}}
{{/each}}
</table>

View File

@ -0,0 +1,16 @@
<table>
<th><div class="skill-name skill-headeritem">{{ localize "rmss.pc_sheet_skills.skill_name" }}</div></th>
<th><div class="skill-entry skill-headeritem">{{ localize "rmss.pc_sheet_skills.ranks" }}</div></th>
<th><div class="skill-entry skill-headeritem">{{ localize "rmss.pc_sheet_skills.total_bonus" }}</div></th>
{{#each playerskill as |skill id|}}
{{#if skill.system.favorite}}
<tr class="item" data-item-id="{{skill._id}}">
<td><div class="skill-name">
<h4>{{skill.name}}</h4>
</div></td>
<td><div class="skill-entry item-prop">{{skill.system.ranks}}</div></td>
<td><div class="skill-entry item-prop">{{skill.system.total_bonus}}</div></td>
</tr>
{{/if}}
{{/each}}
</table>

View File

@ -0,0 +1,20 @@
<table>
<th><div class="spell-name spell-headeritem">{{ localize "rmss.pc_sheet_spell.name" }}</div></th>
<th><div class="spell-entry spell-headeritem">{{ localize "rmss.pc_sheet_spell.area_of_effect" }}</div></th>
<th><div class="spell-entry spell-headeritem">{{ localize "rmss.pc_sheet_spell.duration" }}</div></th>
<th><div class="spell-entry spell-headeritem">{{ localize "rmss.pc_sheet_spell.range" }}</div></th>
<th><div class="spell-entry spell-headeritem">{{ localize "rmss.pc_sheet_spell.type" }}</div></th>
{{#each spells as |spell id|}}
{{#if spell.system.favorite}}
<tr class="item" data-item-id="{{spell._id}}">
<td><div class="spell-name">
<h4>{{spell.name}}</h4>
</div></td>
<td><div class="spell-entry item-prop">{{spell.system.area_of_effect}}</div></td>
<td><div class="spell-entry item-prop">{{spell.system.duration}}</div></td>
<td><div class="spell-entry item-prop">{{spell.system.range}}</div></td>
<td><div class="spell-entry item-prop">{{spell.system.type}}</div></td>
</tr>
{{/if}}
{{/each}}
</table>

View File

@ -0,0 +1,26 @@
<section class="fixed-info-section">
<div class="label-name">
{{ localize "rmss.pc_sheet_fixed_info.race" }}
</div>
<div class="label-name">
<input type="text" name="system.fixed_info.race" value="{{system.fixed_info.race}}" data-dtype="String"/>
</div>
<div class="label-name">
{{ localize "rmss.pc_sheet_fixed_info.profession" }}
</div>
<div class="label-name">
<input type="text" name="system.fixed_info.profession" value="{{system.fixed_info.profession}}" data-dtype="String"/>
</div>
<div class="label-name">
{{ localize "rmss.pc_sheet_fixed_info.training_packages" }}
</div>
<div class="label-name">
<input type="text" name="system.fixed_info.training_packages" value="{{system.fixed_info.training_packages}}" data-dtype="String"/>
</div>
<div class="label-name">
{{ localize "rmss.pc_sheet_fixed_info.realm" }}
</div>
<div class="label-name">
<input type="text" name="system.fixed_info.realm" value="{{system.fixed_info.realm}}" data-dtype="String"/>
</div>
</section>

View File

@ -0,0 +1,25 @@
<div class="herbs-grid-container">
<!-- LOCALIZE THE LAST STRINGS IN THIS PAGE. ALSO SKILLS AND SKILL CATEGORIES-->
<div class="herbs-grid-heading">{{ localize "rmss.pc_sheet_items.item_name" }}</div>
<div class="herbs-grid-heading">{{ localize "rmss.pc_sheet_items.quantity" }}</div>
<div class="herbs-grid-heading">{{ localize "rmss.herb_or_poison.codes" }}</div>
<div class="herbs-grid-heading">{{ localize "rmss.herb_or_poison.af" }}</div>
<div class="herbs-grid-heading">{{ localize "rmss.pc_sheet_items.weight" }}</div>
<div class="herbs-grid-heading">{{ localize "rmss.pc_sheet_items.cost" }}</div>
<div class="herbs-grid-heading">
<a class="item-control item-create" title="Create Item" data-type="herb_or_poison"><i class="fas fa-plus"></i>{{ localize "rmss.pc_sheet_items.add_item" }}</a>
</div>
{{#each herbs as |herb id|}}
<div>{{herb.name}}</div>
<div>{{herb.system.quantity}}</div>
<div>{{herb.system.codes}}</div>
<div>{{herb.system.af}}</div>
<div>{{herb.system.weight}}</div>
<div>{{herb.system.cost}}</div>
<div>
<a class="item-control item-edit" title="Edit Item" data-item-id="{{herb._id}}"><i class="fas fa-edit"></i></a>
<a class="item-control item-delete" title="Delete Item" data-item-id="{{herb._id}}"><i class="fas fa-trash"></i></a>
</div>
{{/each}}
</div>

View File

@ -0,0 +1,27 @@
<div class="items-grid-container">
<!-- LOCALIZE THE LAST STRINGS IN THIS PAGE. ALSO SKILLS AND SKILL CATEGORIES-->
<div class="items-grid-heading">{{ localize "rmss.pc_sheet_items.item_name" }}</div>
<div class="items-grid-heading">{{ localize "rmss.pc_sheet_items.worn" }}</div>
<div class="items-grid-heading">{{ localize "rmss.pc_sheet_items.quantity" }}</div>
<div class="items-grid-heading">{{ localize "rmss.pc_sheet_items.weight" }}</div>
<div class="items-grid-heading">{{ localize "rmss.pc_sheet_items.cost" }}</div>
<div class="items-grid-heading">
<a class="item-control item-create" title="Create Item" data-type="item"><i class="fas fa-plus"></i>{{ localize "rmss.pc_sheet_items.add_item" }}</a>
</div>
{{#each gear as |item id|}}
<div>{{item.name}}</div>
{{#if item.system.worn}}
<div><a class="wearable" data-item-id="{{item._id}}"><i class="fa-regular fa-square-check"></i></a></div>
{{else}}
<div><a class="wearable" data-item-id="{{item._id}}"><i class="fa-regular fa-square"></i></a></div>
{{/if}}
<div>{{item.system.quantity}}</div>
<div>{{item.system.weight}}</div>
<div>{{item.system.cost}}</div>
<div>
<a class="item-control item-edit" title="Edit Item" data-item-id="{{item._id}}"><i class="fas fa-edit"></i></a>
<a class="item-control item-delete" title="Delete Item" data-item-id="{{item._id}}"><i class="fas fa-trash"></i></a>
</div>
{{/each}}
</div>

View File

@ -0,0 +1,19 @@
<table>
<th><div class="language-name language-headeritem">{{ localize "rmss.pc_sheet_language.name" }}</div></th>
<th><div class="language-entry language-headeritem">{{ localize "rmss.pc_sheet_language.spoken" }}</div></th>
<th><div class="language-entry language-headeritem">{{ localize "rmss.pc_sheet_language.written" }}</div></th>
<th><div class="language-entry language-headeritem"> </div></th>
{{#each languages as |language id|}}
<tr class="item" data-item-id="{{language._id}}">
<td><div class="language-name">
<h4>{{language.name}}</h4>
</div></td>
<td><div class="language-entry item-prop">{{language.system.spoken}}</div></td>
<td><div class="language-entry item-prop">{{language.system.written}}</div></td>
<td><div class="language-entry item-prop">
<a class="item-edit" title="Edit Language" data-item-id="{{language._id}}"><i class="fas fa-edit"></i></a>
<a class="item-delete" title="Delete Language" data-item-id="{{language._id}}"><i class="fas fa-trash"></i></a>
</div></td>
</tr>
{{/each}}
</table>

View File

@ -0,0 +1,14 @@
<section class="container">
<div class="money-column">
<div class="money-name">Mithril: <input type="text" name="system.money.mithril" value="{{system.money.mithril}}" data-dtype="Number"/></div>
<div class="money-name">Platinum: <input type="text" name="system.money.platinum" value="{{system.money.platinum}}" data-dtype="Number"/></div>
<div class="money-name">Gold: <input type="text" name="system.money.gold" value="{{system.money.gold}}" data-dtype="Number"/></div>
<div class="money-name">Silver: <input type="text" name="system.money.silver" value="{{system.money.silver}}" data-dtype="Number"/></div>
</div>
<div class="money-column">
<div class="money-name">Bronze: <input type="text" name="system.money.bronze" value="{{system.money.bronze}}" data-dtype="Number"/></div>
<div class="money-name">Copper:<input type="text" name="system.money.copper" value="{{system.money.copper}}" data-dtype="Number"/></div>
<div class="money-name">Tin: <input type="text" name="system.money.tin" value="{{system.money.tin}}" data-dtype="Number"/></div>
<div class="money-name">Iron: <input type="text" name="system.money.iron" value="{{system.money.iron}}" data-dtype="Number"/></div>
</div>
</section>

View File

@ -0,0 +1,50 @@
<section class="race-stat-fixed-info-block">
<div class="label-name">
{{ localize "rmss.pc_sheet_race_stat_fixed_info.soul_departure" }}
</div>
<div class="label-name">
<input type="text" name="system.race_stat_fixed_info.soul_departure_rounds" value="{{system.race_stat_fixed_info.soul_departure_rounds}}" data-dtype="Number"/>
</div>
<div class="label-name">
{{ localize "rmss.pc_sheet_race_stat_fixed_info.recovery_multiplier" }}
</div>
<div class="label-name">
<input type="text" name="system.race_stat_fixed_info.recovery_multiplier" value="{{system.race_stat_fixed_info.recovery_multiplier}}" data-dtype="Number"/>
</div>
<div class="label-name">
{{ localize "rmss.pc_sheet_race_stat_fixed_info.body_dev_progression" }}
</div>
<div class="label-name">
<input type="text" name="system.race_stat_fixed_info.body_development_progression" value="{{system.race_stat_fixed_info.body_development_progression}}" data-dtype="String"/>
</div>
<div class="label-name">
{{ localize "rmss.pc_sheet_race_stat_fixed_info.pp_dev_progression" }}
</div>
<div class="label-name">
<input type="text" name="system.race_stat_fixed_info.pp_development_progression" value="{{system.race_stat_fixed_info.pp_development_progression}}" data-dtype="String"/>
</div>
<div class="label-name">
{{ localize "rmss.pc_sheet_race_stat_fixed_info.recover_hits_per_hour" }}
</div>
<div class="label-name">
<input type="text" name="system.race_stat_fixed_info.recover_hits_per_hour_resting" value="{{system.race_stat_fixed_info.recover_hits_per_hour_resting}}" data-dtype="Number"/>
</div>
<div class="label-name">
{{ localize "rmss.pc_sheet_race_stat_fixed_info.recover_hits_per_sleep_cycle" }}
</div>
<div class="label-name">
<input type="text" name="system.race_stat_fixed_info.recover_hits_per_sleep_cycle" value="{{system.race_stat_fixed_info.recover_hits_per_sleep_cycle}}" data-dtype="Number"/>
</div>
<div class="label-name">
{{ localize "rmss.pc_sheet_race_stat_fixed_info.recover_pp_per_hour" }}
</div>
<div class="label-name">
<input type="text" name="system.race_stat_fixed_info.recover_pp_per_hour_resting" value="{{system.race_stat_fixed_info.recover_pp_per_hour_resting}}" data-dtype="Number"/>
</div>
<div class="label-name">
{{ localize "rmss.pc_sheet_race_stat_fixed_info.recover_pp_per_sleep_cycle" }}
</div>
<div class="label-name">
<input type="text" name="system.race_stat_fixed_info.recover_pp_per_sleep_cycle" value="{{system.race_stat_fixed_info.recover_pp_per_sleep_cycle}}" data-dtype="Number"/>
</div>
</section>

View File

@ -0,0 +1,53 @@
<section class="resistances-grid-container">
<div class="resistances-grid-heading">Name</div>
<div class="resistances-grid-heading">Value</div>
<div class="resistances-grid-heading">Racial Mod</div>
<div class="resistances-grid-heading">Total</div>
<div>{{ localize "rmss.pc_sheet_resistances.channeling" }}</div>
<div>{{system.resistance_rolls.channeling.value}}</div>
<div class="resistance-input"><input type="text" name="system.resistance_rolls.channeling.race_mod" value="{{system.resistance_rolls.channeling.race_mod}}" data-dtype="Number"/></div>
<div>{{system.resistance_rolls.channeling.total}}</div>
<div>{{ localize "rmss.pc_sheet_resistances.essence" }}</div>
<div>{{system.resistance_rolls.essence.value}}</div>
<div class="resistance-input"><input type="text" name="system.resistance_rolls.essence.race_mod" value="{{system.resistance_rolls.essence.race_mod}}" data-dtype="Number"/></div>
<div>{{system.resistance_rolls.essence.total}}</div>
<div>{{ localize "rmss.pc_sheet_resistances.mentalism" }}</div>
<div>{{system.resistance_rolls.mentalism.value}}</div>
<div class="resistance-input"><input type="text" name="system.resistance_rolls.mentalism.race_mod" value="{{system.resistance_rolls.mentalism.race_mod}}" data-dtype="Number"/></div>
<div>{{system.resistance_rolls.mentalism.total}}</div>
<div>{{ localize "rmss.pc_sheet_resistances.chann_ess" }}</div>
<div>{{system.resistance_rolls.chann_ess.value}}</div>
<div class="resistance-input"><input type="text" name="system.resistance_rolls.chann_ess.race_mod" value="{{system.resistance_rolls.chann_ess.race_mod}}" data-dtype="Number"/></div>
<div>{{system.resistance_rolls.chann_ess.total}}</div>
<div>{{ localize "rmss.pc_sheet_resistances.chann_ment" }}</div>
<div>{{system.resistance_rolls.chann_ment.value}}</div>
<div class="resistance-input"><input type="text" name="system.resistance_rolls.chann_ment.race_mod" value="{{system.resistance_rolls.chann_ment.race_mod}}" data-dtype="Number"/></div>
<div>{{system.resistance_rolls.chann_ment.total}}</div>
<div>{{ localize "rmss.pc_sheet_resistances.ess_ment" }}</div>
<div>{{system.resistance_rolls.ess_ment.value}}</div>
<div class="resistance-input"><input type="text" name="system.resistance_rolls.ess_ment.race_mod" value="{{system.resistance_rolls.ess_ment.race_mod}}" data-dtype="Number"/></div>
<div>{{system.resistance_rolls.ess_ment.total}}</div>
<div>{{ localize "rmss.pc_sheet_resistances.arcane" }}</div>
<div>{{system.resistance_rolls.arcane.value}}</div>
<div class="resistance-input"><input type="text" name="system.resistance_rolls.arcane.race_mod" value="{{system.resistance_rolls.arcane.race_mod}}" data-dtype="Number"/></div>
<div>{{system.resistance_rolls.arcane.total}}</div>
<div>{{ localize "rmss.pc_sheet_resistances.poison_disease" }}</div>
<div>{{system.resistance_rolls.poison_disease.value}}</div>
<div class="resistance-input"><input type="text" name="system.resistance_rolls.poison_disease.race_mod" value="{{system.resistance_rolls.poison_disease.race_mod}}" data-dtype="Number"/></div>
<div>{{system.resistance_rolls.poison_disease.total}}</div>
<div>{{ localize "rmss.pc_sheet_resistances.fear" }}</div>
<div>{{system.resistance_rolls.fear.value}}</div>
<div class="resistance-input"><input type="text" name="system.resistance_rolls.fear.race_mod" value="{{system.resistance_rolls.fear.race_mod}}" data-dtype="Number"/></div>
<div>{{system.resistance_rolls.fear.total}}</div>
</section>

View File

@ -0,0 +1,74 @@
<section class="role-traits-block">
<div class="label-name">
{{ localize "rmss.pc_sheet_role_traits.appearance" }}
</div>
<div class="label-name">
<input type="text" name="system.role_traits.appearance" value="{{system.role_traits.appearance}}" data-dtype="Number"/>
</div>
<div class="label-name">
{{ localize "rmss.pc_sheet_role_traits.sex" }}
</div>
<div class="label-name">
<input type="text" name="system.role_traits.sex" value="{{system.role_traits.sex}}" data-dtype="String"/>
</div>
<div class="label-name">
{{ localize "rmss.pc_sheet_role_traits.skin" }}
</div>
<div class="label-name">
<input type="text" name="system.role_traits.skin" value="{{system.role_traits.skin}}" data-dtype="String"/>
</div>
<div class="label-name">
{{ localize "rmss.pc_sheet_role_traits.apparent_age" }}
</div>
<div class="label-name">
<input type="text" name="system.role_traits.apparent_age" value="{{system.role_traits.apparent_age}}" data-dtype="Number"/>
</div>
<div class="label-name">
{{ localize "rmss.pc_sheet_role_traits.actual_age" }}
</div>
<div class="label-name">
<input type="text" name="system.role_traits.actual_age" value="{{system.role_traits.actual_age}}" data-dtype="Number"/>
</div>
<div class="label-name">
{{ localize "rmss.pc_sheet_role_traits.height" }}
</div>
<div class="label-name">
<input type="text" name="system.role_traits.height" value="{{system.role_traits.height}}" data-dtype="String"/>
</div>
<div class="label-name">
{{ localize "rmss.pc_sheet_role_traits.weight" }}
</div>
<div class="label-name">
<input type="text" name="system.role_traits.weight" value="{{system.role_traits.weight}}" data-dtype="String"/>
</div>
<div class="label-name">
{{ localize "rmss.pc_sheet_role_traits.hair" }}
</div>
<div class="label-name">
<input type="text" name="system.role_traits.hair" value="{{system.role_traits.hair}}" data-dtype="String"/>
</div>
<div class="label-name">
{{ localize "rmss.pc_sheet_role_traits.eyes" }}
</div>
<div class="label-name">
<input type="text" name="system.role_traits.eyes" value="{{system.role_traits.eyes}}" data-dtype="String"/>
</div>
<div class="label-name">
{{ localize "rmss.pc_sheet_role_traits.personality" }}
</div>
<div class="label-name">
<input type="text" name="system.role_traits.personality" value="{{system.role_traits.personality}}" data-dtype="String"/>
</div>
<div class="label-name">
{{ localize "rmss.pc_sheet_role_traits.motivations" }}
</div>
<div class="label-name">
<input type="text" name="system.role_traits.motivations" value="{{system.role_traits.motivations}}" data-dtype="String"/>
</div>
<div class="label-name">
{{ localize "rmss.pc_sheet_role_traits.alignment" }}
</div>
<div class="label-name">
<input type="text" name="system.role_traits.alignment" value="{{system.role_traits.alignment}}" data-dtype="String"/>
</div>
</section>

View File

@ -0,0 +1,33 @@
<div class="skillcat-grid-container">
<div class="skillcat-grid-heading">{{ localize "rmss.pc_sheet_skill_categories.skillcat_name" }}</div>
<div class="skillcat-grid-heading">{{ localize "rmss.pc_sheet_skill_categories.applicable_stats" }}</div>
<div class="skillcat-grid-heading">{{ localize "rmss.pc_sheet_skill_categories.dev_cost" }}</div>
<div class="skillcat-grid-heading">{{ localize "rmss.pc_sheet_skill_categories.ranks" }}</div>
<div class="skillcat-grid-heading">{{ localize "rmss.pc_sheet_skill_categories.new_ranks" }}</div>
<div class="skillcat-grid-heading">{{ localize "rmss.pc_sheet_skill_categories.rank_bonus" }}</div>
<div class="skillcat-grid-heading">{{ localize "rmss.pc_sheet_skill_categories.stat_bonus" }}</div>
<div class="skillcat-grid-heading">{{ localize "rmss.pc_sheet_skill_categories.prof_bonus" }}</div>
<div class="skillcat-grid-heading">{{ localize "rmss.pc_sheet_skill_categories.special_bonus" }}</div>
<div class="skillcat-grid-heading">{{ localize "rmss.pc_sheet_skill_categories.special_bonus" }}</div>
<div class="skillcat-grid-heading">{{ localize "rmss.pc_sheet_skill_categories.total_bonus" }}</div>
<div class="skillcat-grid-heading">
<a class="item-create" title="Create Skill Category" data-type="skill_category"><i class="fas fa-plus"></i>{{ localize "rmss.pc_sheet_skill_categories.add_skillcat" }}</a>
</div>
{{#each skillcat as |skill_category id|}}
<div>{{skill_category.name}}</div>
<div>{{skill_category.system.applicable_stats}}</div>
<div>{{skill_category.system.development_cost}}</div>
<div>{{skill_category.system.ranks}}</div>
<div>{{skill_category.system.new_ranks}}</div>
<div>{{skill_category.system.rank_bonus}}</div>
<div>{{skill_category.system.stat_bonus}}</div>
<div>{{skill_category.system.prof_bonus}}</div>
<div>{{skill_category.system.special_bonus_1}}</div>
<div>{{skill_category.system.special_bonus_2}}</div>
<div>{{skill_category.system.total_bonus}}</div>
<div>
<a class="item-edit" title="Edit Category" data-item-id="{{skill_category._id}}"><i class="fas fa-edit"></i></a>
<a class="item-delete item" title="Delete Category" data-item-id="{{skill_category._id}}"><i class="fas fa-trash"></i></a>
</div>
{{/each}}
</div>

View File

@ -0,0 +1,42 @@
<div class="skillcat-grid-container">
<div class="skillcat-grid-heading">{{ localize "rmss.pc_sheet_skill_categories.skillcat_name" }}</div>
<div class="skillcat-grid-heading">{{ localize "rmss.pc_sheet_skill_categories.applicable_stats" }}</div>
<div class="skillcat-grid-heading">{{ localize "rmss.pc_sheet_skill_categories.dev_cost" }}</div>
<div class="skillcat-grid-heading">{{ localize "rmss.pc_sheet_skill_categories.ranks" }}</div>
<div class="skillcat-grid-heading">{{ localize "rmss.pc_sheet_skill_categories.new_ranks" }}</div>
<div class="skillcat-grid-heading">{{ localize "rmss.pc_sheet_skill_categories.rank_bonus" }}</div>
<div class="skillcat-grid-heading">{{ localize "rmss.pc_sheet_skill_categories.stat_bonus" }}</div>
<div class="skillcat-grid-heading">{{ localize "rmss.pc_sheet_skill_categories.prof_bonus" }}</div>
<div class="skillcat-grid-heading">{{ localize "rmss.pc_sheet_skill_categories.special_bonus" }}</div>
<div class="skillcat-grid-heading">{{ localize "rmss.pc_sheet_skill_categories.special_bonus" }}</div>
<div class="skillcat-grid-heading">{{ localize "rmss.pc_sheet_skill_categories.total_bonus" }}</div>
<div class="skillcat-grid-heading">
<div class="settings-button">
<button type="button" class="import-skillcats" title="Import" acotr_id="">{{ localize "rmss.pc_sheet.import_skillcat" }}</button>
</div>
</div>
{{#each skillcat as |skill_category id|}}
<div>{{skill_category.name}}</div>
<div>{{skill_category.system.applicable_stats}}</div>
<div>{{skill_category.system.development_cost}}</div>
<div>{{skill_category.system.ranks}}</div>
<div>
{{#switch skill_category.system.new_ranks.value}}
{{#case 0}} <a class="skillcategory-newrank" data-item-id="{{skill_category._id}}" value="{{skill_category.system.new_ranks.value}}"><i class="fa-regular fa-square"></i> <i class="fa-regular fa-square"></i> <i class="fa-regular fa-square"></i></a> {{/case}}
{{#case 1}} <a class="skillcategory-newrank" data-item-id="{{skill_category._id}}" value="{{skill_category.system.new_ranks.value}}"><i class="fa-regular fa-square-check"></i> <i class="fa-regular fa-square"></i> <i class="fa-regular fa-square"></i></a> {{/case}}
{{#case 2}} <a class="skillcategory-newrank" data-item-id="{{skill_category._id}}" value="{{skill_category.system.new_ranks.value}}"><i class="fa-regular fa-square-check"></i> <i class="fa-regular fa-square-check"></i> <i class="fa-regular fa-square"></i></a> {{/case}}
{{#case 3}} <a class="skillcategory-newrank" data-item-id="{{skill_category._id}}" value="{{skill_category.system.new_ranks.value}}"><i class="fa-regular fa-square-check"></i> <i class="fa-regular fa-square-check"></i> <i class="fa-regular fa-square-check"></i></a> {{/case}}
{{/switch}}
</div>
<div>{{skill_category.system.rank_bonus}}</div>
<div>{{skill_category.system.stat_bonus}}</div>
<div>{{skill_category.system.prof_bonus}}</div>
<div>{{skill_category.system.special_bonus_1}}</div>
<div>{{skill_category.system.special_bonus_2}}</div>
<div>{{skill_category.system.total_bonus}}</div>
<div>
<a class="item-edit" title="Edit Category" data-item-id="{{skill_category._id}}"><i class="fas fa-edit"></i></a>
<a class="item-delete item" title="Delete Category" data-item-id="{{skill_category._id}}"><i class="fas fa-trash"></i></a>
</div>
{{/each}}
</div>

View File

@ -0,0 +1,31 @@
<div class="skills-grid-container">
<div class="skills-grid-heading">{{ localize "rmss.pc_sheet_skills.favorite" }}</div>
<div class="skills-grid-heading">{{ localize "rmss.pc_sheet_skills.skill_name" }}</div>
<div class="skills-grid-heading">{{ localize "rmss.pc_sheet_skills.ranks" }}</div>
<div class="skills-grid-heading">{{ localize "rmss.pc_sheet_skills.new_ranks" }}</div>
<div class="skills-grid-heading">{{ localize "rmss.pc_sheet_skills.rank_bonus" }}</div>
<div class="skills-grid-heading">{{ localize "rmss.pc_sheet_skills.category_bonus" }}</div>
<div class="skills-grid-heading">{{ localize "rmss.pc_sheet_skills.item_bonus" }}</div>
<div class="skills-grid-heading">{{ localize "rmss.pc_sheet_skills.special_bonus" }}</div>
<div class="skills-grid-heading">{{ localize "rmss.pc_sheet_skills.special_bonus" }}</div>
<div class="skills-grid-heading">{{ localize "rmss.pc_sheet_skills.total_bonus" }}</div>
<div class="skills-grid-heading">
<a class="item-create" title="Create Skill" data-type="skill"><i class="fas fa-plus"></i>{{ localize "rmss.pc_sheet_skills.add_skill" }}</a>
</div>
{{#each playerskill as |skill id|}}
<div><input type="checkbox" name="system.favorite" {{checked skill.system.favorite}}/></div>
<div>{{skill.name}}</div>
<div>{{skill.system.ranks}}</div>
<div>{{skill.system.new_ranks}}</div>
<div>{{skill.system.rank_bonus}}</div>
<div>{{skill.system.category_bonus}}</div>
<div>{{skill.system.item_bonus}}</div>
<div>{{skill.system.special_bonus_1}}</div>
<div>{{skill.system.special_bonus_2}}</div>
<div>{{skill.system.total_bonus}}</div>
<div>
<a class="item-edit" title="Edit Skill" data-item-id="{{skill._id}}"><i class="fas fa-edit"></i></a>
<a class="item-delete" title="Delete Skill" data-item-id="{{skill._id}}"><i class="fas fa-trash"></i></a>
</div>
{{/each}}
</div>

View File

@ -0,0 +1,43 @@
<div class="skills-grid-container">
<div class="skills-grid-heading">{{ localize "rmss.pc_sheet_skills.favorite" }}</div>
<div class="skills-grid-heading">{{ localize "rmss.pc_sheet_skills.skill_name" }}</div>
<div class="skills-grid-heading">{{ localize "rmss.pc_sheet_skills.ranks" }}</div>
<div class="skills-grid-heading">{{ localize "rmss.pc_sheet_skills.new_ranks" }}</div>
<div class="skills-grid-heading">{{ localize "rmss.pc_sheet_skills.rank_bonus" }}</div>
<div class="skills-grid-heading">{{ localize "rmss.pc_sheet_skills.category_bonus" }}</div>
<div class="skills-grid-heading">{{ localize "rmss.pc_sheet_skills.item_bonus" }}</div>
<div class="skills-grid-heading">{{ localize "rmss.pc_sheet_skills.special_bonus" }}</div>
<div class="skills-grid-heading">{{ localize "rmss.pc_sheet_skills.special_bonus" }}</div>
<div class="skills-grid-heading">{{ localize "rmss.pc_sheet_skills.total_bonus" }}</div>
<div class="skills-grid-heading">
<!--<a class="item-create" title="Create Skill" data-type="skill"><i class="fas fa-plus"></i>{{ localize "rmss.pc_sheet_skills.add_skill" }}</a>-->
</div>
{{#each playerskill as |skill id|}}
{{#if skill.system.favorite}}
<div><a class="skill-favorite" data-item-id="{{skill._id}}"><i class="fa-regular fa-square-check"></i></a></div>
{{else}}
<div><a class="skill-favorite" data-item-id="{{skill._id}}"><i class="fa-regular fa-square"></i></a></div>
{{/if}}
<!--<div><input type="checkbox" name="system.favorite" {{checked skill.system.favorite}}/></div>-->
<div>{{skill.name}}</div>
<div>{{skill.system.ranks}}</div>
<div>
{{#switch skill.system.new_ranks.value}}
{{#case 0}} <a class="skill-newrank" data-item-id="{{skill._id}}" value="{{skill.system.new_ranks.value}}"><i class="fa-regular fa-square"></i> <i class="fa-regular fa-square"></i> <i class="fa-regular fa-square"></i></a> {{/case}}
{{#case 1}} <a class="skill-newrank" data-item-id="{{skill._id}}" value="{{skill.system.new_ranks.value}}"><i class="fa-regular fa-square-check"></i> <i class="fa-regular fa-square"></i> <i class="fa-regular fa-square"></i></a> {{/case}}
{{#case 2}} <a class="skill-newrank" data-item-id="{{skill._id}}" value="{{skill.system.new_ranks.value}}"><i class="fa-regular fa-square-check"></i> <i class="fa-regular fa-square-check"></i> <i class="fa-regular fa-square"></i></a> {{/case}}
{{#case 3}} <a class="skill-newrank" data-item-id="{{skill._id}}" value="{{skill.system.new_ranks.value}}"><i class="fa-regular fa-square-check"></i> <i class="fa-regular fa-square-check"></i> <i class="fa-regular fa-square-check"></i></a> {{/case}}
{{/switch}}
</div>
<div>{{skill.system.rank_bonus}}</div>
<div>{{skill.system.category_bonus}}</div>
<div>{{skill.system.item_bonus}}</div>
<div>{{skill.system.special_bonus_1}}</div>
<div>{{skill.system.special_bonus_2}}</div>
<div>{{skill.system.total_bonus}}</div>
<div>
<a class="item-edit" title="Edit Skill" data-item-id="{{skill._id}}"><i class="fas fa-edit"></i></a>
<a class="item-delete" title="Delete Skill" data-item-id="{{skill._id}}"><i class="fas fa-trash"></i></a>
</div>
{{/each}}
</div>

View File

@ -0,0 +1,30 @@
<div class="spell-grid-container">
<div class="spell-grid-heading">{{ localize "rmss.pc_sheet_spell.favorite" }}</div>
<div class="spell-grid-heading">{{ localize "rmss.pc_sheet_spell.level" }}</div>
<div class="spell-grid-heading">{{ localize "rmss.pc_sheet_spell.name" }}</div>
<div class="spell-grid-heading">{{ localize "rmss.pc_sheet_spell.spell_list" }}</div>
<div class="spell-grid-heading">{{ localize "rmss.pc_sheet_spell.area_of_effect" }}</div>
<div class="spell-grid-heading">{{ localize "rmss.pc_sheet_spell.duration" }}</div>
<div class="spell-grid-heading">{{ localize "rmss.pc_sheet_spell.range" }}</div>
<div class="spell-grid-heading">{{ localize "rmss.pc_sheet_spell.type" }}</div>
<div class="spell-grid-heading">
</div>
{{#each spells as |spell id|}}
{{#if spell.system.favorite}}
<div><a class="spell-favorite" data-item-id="{{spell._id}}"><i class="fa-regular fa-square-check"></i></a></div>
{{else}}
<div><a class="spell-favorite" data-item-id="{{spell._id}}"><i class="fa-regular fa-square"></i></a></div>
{{/if}}
<div>{{spell.system.level}}</div>
<div>{{spell.name}}</div>
<div>{{spell.system.spell_list}}</div>
<div>{{spell.system.area_of_effect}}</div>
<div>{{spell.system.duration}}</div>
<div>{{spell.system.range}}</div>
<div>{{spell.system.type}}</div>
<div>
<a class="item-edit" title="Edit Spell" data-item-id="{{spell._id}}"><i class="fas fa-edit"></i></a>
<a class="item-delete" title="Delete Spell" data-item-id="{{spell._id}}"><i class="fas fa-trash"></i></a>
</div>
{{/each}}
</div>

View File

@ -0,0 +1,313 @@
<section class="stat-block">
<ol>
<li class="flexrow stat-row">
<div class="stat-header">{{ localize "rmss.player_character.attribute_headers.stat" }}</div>
<div class="stat-header">{{ localize "rmss.player_character.attribute_headers.temp" }}</div>
<div class="stat-header">{{ localize "rmss.player_character.attribute_headers.pot" }}</div>
<div class="stat-header">{{ localize "rmss.player_character.attribute_headers.basic_bonus" }}</div>
<div class="stat-header">{{ localize "rmss.player_character.attribute_headers.racial_bonus" }}</div>
<div class="stat-header">{{ localize "rmss.player_character.attribute_headers.special_bonus" }}</div>
<div class="stat-header">{{ localize "rmss.player_character.attribute_headers.stat_bonus" }}</div>
</li>
<li class="flexrow stat-row">
<div class="stat-name">
{{ localize "rmss.player_character.attribute.agility" }}
</div>
<div class="stat-name">
<input type="text" name="system.stats.agility.temp" value="{{system.stats.agility.temp}}" data-dtype="Number"/>
</div>
<div class="stat-name">
<input type="text" name="system.stats.agility.potential" value="{{system.stats.agility.potential}}" data-dtype="Number"/>
</div>
<div class="stat-name">
<input type="text" name="system.stats.agility.basic_bonus" value="{{system.stats.agility.basic_bonus}}" data-dtype="Number"/>
</div>
<div class="stat-name">
<input type="text" name="system.stats.agility.racial_bonus" value="{{system.stats.agility.racial_bonus}}" data-dtype="Number"/>
</div>
<div class="stat-name">
<input type="text" name="system.stats.agility.special_bonus" value="{{system.stats.agility.special_bonus}}" data-dtype="Number"/>
</div>
<div class="stat-name">
{{system.stats.agility.stat_bonus}}
</div>
</li>
<li class="flexrow stat-row">
<div class="stat-name">
{{ localize "rmss.player_character.attribute.constitution" }}
</div>
<div class="stat-name">
<input type="text" name="system.stats.constitution.temp" value="{{system.stats.constitution.temp}}" data-dtype="Number"/>
</div>
<div class="stat-name">
<input type="text" name="system.stats.constitution.potential" value="{{system.stats.constitution.potential}}" data-dtype="Number"/>
</div>
<div class="stat-name">
<input type="text" name="system.stats.constitution.basic_bonus" value="{{system.stats.constitution.basic_bonus}}" data-dtype="Number"/>
</div>
<div class="stat-name">
<input type="text" name="system.stats.constitution.racial_bonus" value="{{system.stats.constitution.racial_bonus}}" data-dtype="Number"/>
</div>
<div class="stat-name">
<input type="text" name="system.stats.constitution.special_bonus" value="{{system.stats.constitution.special_bonus}}" data-dtype="Number"/>
</div>
<div class="stat-name">
{{system.stats.constitution.stat_bonus}}
</div>
</li>
<li class="flexrow stat-row">
<div class="stat-name">
{{ localize "rmss.player_character.attribute.memory" }}
</div>
<div class="stat-name">
<input type="text" name="system.stats.memory.temp" value="{{system.stats.memory.temp}}" data-dtype="Number"/>
</div>
<div class="stat-name">
<input type="text" name="system.stats.memory.potential" value="{{system.stats.memory.potential}}" data-dtype="Number"/>
</div>
<div class="stat-name">
<input type="text" name="system.stats.memory.basic_bonus" value="{{system.stats.memory.basic_bonus}}" data-dtype="Number"/>
</div>
<div class="stat-name">
<input type="text" name="system.stats.memory.racial_bonus" value="{{system.stats.memory.racial_bonus}}" data-dtype="Number"/>
</div>
<div class="stat-name">
<input type="text" name="system.stats.memory.special_bonus" value="{{system.stats.memory.special_bonus}}" data-dtype="Number"/>
</div>
<div class="stat-name">
{{system.stats.memory.stat_bonus}}
</div>
</li>
<li class="flexrow stat-row">
<div class="stat-name">
{{ localize "rmss.player_character.attribute.reasoning" }}
</div>
<div class="stat-name">
<input type="text" name="system.stats.reasoning.temp" value="{{system.stats.reasoning.temp}}" data-dtype="Number"/>
</div>
<div class="stat-name">
<input type="text" name="system.stats.reasoning.potential" value="{{system.stats.reasoning.potential}}" data-dtype="Number"/>
</div>
<div class="stat-name">
<input type="text" name="system.stats.reasoning.basic_bonus" value="{{system.stats.reasoning.basic_bonus}}" data-dtype="Number"/>
</div>
<div class="stat-name">
<input type="text" name="system.stats.reasoning.racial_bonus" value="{{system.stats.reasoning.racial_bonus}}" data-dtype="Number"/>
</div>
<div class="stat-name">
<input type="text" name="system.stats.reasoning.special_bonus" value="{{system.stats.reasoning.special_bonus}}" data-dtype="Number"/>
</div>
<div class="stat-name">
{{system.stats.reasoning.stat_bonus}}
</div>
</li>
<li class="flexrow stat-row">
<div class="stat-name">
{{ localize "rmss.player_character.attribute.self_discipline" }}
</div>
<div class="stat-name">
<input type="text" name="system.stats.self_discipline.temp" value="{{system.stats.self_discipline.temp}}" data-dtype="Number"/>
</div>
<div class="stat-name">
<input type="text" name="system.stats.self_discipline.potential" value="{{system.stats.self_discipline.potential}}" data-dtype="Number"/>
</div>
<div class="stat-name">
<input type="text" name="system.stats.self_discipline.basic_bonus" value="{{system.stats.self_discipline.basic_bonus}}" data-dtype="Number"/>
</div>
<div class="stat-name">
<input type="text" name="system.stats.self_discipline.racial_bonus" value="{{system.stats.self_discipline.racial_bonus}}" data-dtype="Number"/>
</div>
<div class="stat-name">
<input type="text" name="system.stats.self_discipline.special_bonus" value="{{system.stats.self_discipline.special_bonus}}" data-dtype="Number"/>
</div>
<div class="stat-name">
{{system.stats.self_discipline.stat_bonus}}
</div>
</li>
<li class="flexrow stat-row">
<div class="stat-name">
{{ localize "rmss.player_character.attribute.empathy" }}
</div>
<div class="stat-name">
<input type="text" name="system.stats.empathy.temp" value="{{system.stats.empathy.temp}}" data-dtype="Number"/>
</div>
<div class="stat-name">
<input type="text" name="system.stats.empathy.potential" value="{{system.stats.empathy.potential}}" data-dtype="Number"/>
</div>
<div class="stat-name">
<input type="text" name="system.stats.empathy.basic_bonus" value="{{system.stats.empathy.basic_bonus}}" data-dtype="Number"/>
</div>
<div class="stat-name">
<input type="text" name="system.stats.empathy.racial_bonus" value="{{system.stats.empathy.racial_bonus}}" data-dtype="Number"/>
</div>
<div class="stat-name">
<input type="text" name="system.stats.empathy.special_bonus" value="{{system.stats.empathy.special_bonus}}" data-dtype="Number"/>
</div>
<div class="stat-name">
{{system.stats.empathy.stat_bonus}}
</div>
</li>
<li class="flexrow stat-row">
<div class="stat-name">
{{ localize "rmss.player_character.attribute.intuition" }}
</div>
<div class="stat-name">
<input type="text" name="system.stats.intuition.temp" value="{{system.stats.intuition.temp}}" data-dtype="Number"/>
</div>
<div class="stat-name">
<input type="text" name="system.stats.intuition.potential" value="{{system.stats.intuition.potential}}" data-dtype="Number"/>
</div>
<div class="stat-name">
<input type="text" name="system.stats.intuition.basic_bonus" value="{{system.stats.intuition.basic_bonus}}" data-dtype="Number"/>
</div>
<div class="stat-name">
<input type="text" name="system.stats.intuition.racial_bonus" value="{{system.stats.intuition.racial_bonus}}" data-dtype="Number"/>
</div>
<div class="stat-name">
<input type="text" name="system.stats.intuition.special_bonus" value="{{system.stats.intuition.special_bonus}}" data-dtype="Number"/>
</div>
<div class="stat-name">
{{system.stats.intuition.stat_bonus}}
</div>
</li>
<li class="flexrow stat-row">
<div class="stat-name">
{{ localize "rmss.player_character.attribute.presence" }}
</div>
<div class="stat-name">
<input type="text" name="system.stats.presence.temp" value="{{system.stats.presence.temp}}" data-dtype="Number"/>
</div>
<div class="stat-name">
<input type="text" name="system.stats.presence.potential" value="{{system.stats.presence.potential}}" data-dtype="Number"/>
</div>
<div class="stat-name">
<input type="text" name="system.stats.presence.basic_bonus" value="{{system.stats.presence.basic_bonus}}" data-dtype="Number"/>
</div>
<div class="stat-name">
<input type="text" name="system.stats.presence.racial_bonus" value="{{system.stats.presence.racial_bonus}}" data-dtype="Number"/>
</div>
<div class="stat-name">
<input type="text" name="system.stats.presence.special_bonus" value="{{system.stats.presence.special_bonus}}" data-dtype="Number"/>
</div>
<div class="stat-name">
{{system.stats.presence.stat_bonus}}
</div>
</li>
<li class="flexrow stat-row">
<div class="stat-name">
{{ localize "rmss.player_character.attribute.quickness" }}
</div>
<div class="stat-name">
<input type="text" name="system.stats.quickness.temp" value="{{system.stats.quickness.temp}}" data-dtype="Number"/>
</div>
<div class="stat-name">
<input type="text" name="system.stats.quickness.potential" value="{{system.stats.quickness.potential}}" data-dtype="Number"/>
</div>
<div class="stat-name">
<input type="text" name="system.stats.quickness.basic_bonus" value="{{system.stats.quickness.basic_bonus}}" data-dtype="Number"/>
</div>
<div class="stat-name">
<input type="text" name="system.stats.quickness.racial_bonus" value="{{system.stats.quickness.racial_bonus}}" data-dtype="Number"/>
</div>
<div class="stat-name">
<input type="text" name="system.stats.quickness.special_bonus" value="{{system.stats.quickness.special_bonus}}" data-dtype="Number"/>
</div>
<div class="stat-name">
{{system.stats.quickness.stat_bonus}}
</div>
</li>
<li class="flexrow stat-row">
<div class="stat-name">
{{ localize "rmss.player_character.attribute.strength" }}
</div>
<div class="stat-name">
<input type="text" name="system.stats.strength.temp" value="{{system.stats.strength.temp}}" data-dtype="Number"/>
</div>
<div class="stat-name">
<input type="text" name="system.stats.strength.potential" value="{{system.stats.strength.potential}}" data-dtype="Number"/>
</div>
<div class="stat-name">
<input type="text" name="system.stats.strength.basic_bonus" value="{{system.stats.strength.basic_bonus}}" data-dtype="Number"/>
</div>
<div class="stat-name">
<input type="text" name="system.stats.strength.racial_bonus" value="{{system.stats.strength.racial_bonus}}" data-dtype="Number"/>
</div>
<div class="stat-name">
<input type="text" name="system.stats.strength.special_bonus" value="{{system.stats.strength.special_bonus}}" data-dtype="Number"/>
</div>
<div class="stat-name">
{{system.stats.strength.stat_bonus}}
</div>
</li>
</ol>
</section>

View File

@ -0,0 +1,33 @@
<div class="weapons-grid-container">
<!-- LOCALIZE THE LAST STRINGS IN THIS PAGE. ALSO SKILLS AND SKILL CATEGORIES-->
<div class="weapons-grid-heading">{{ localize "rmss.pc_sheet_items.item_name" }}</div>
<div class="weapons-grid-heading">{{ localize "rmss.pc_sheet_items.equipped" }}</div>
<div class="weapons-grid-heading">{{ localize "rmss.weapon.breakage_range" }}</div>
<div class="weapons-grid-heading">{{ localize "rmss.weapon.fumble_range" }}</div>
<div class="weapons-grid-heading">{{ localize "rmss.weapon.strength" }}</div>
<div class="weapons-grid-heading">{{ localize "rmss.pc_sheet_items.quantity" }}</div>
<div class="weapons-grid-heading">{{ localize "rmss.pc_sheet_items.weight" }}</div>
<div class="weapons-grid-heading">{{ localize "rmss.pc_sheet_items.cost" }}</div>
<div class="weapons-grid-heading">
<a class="item-control item-create" title="Create Item" data-type="weapon"><i class="fas fa-plus"></i>{{ localize "rmss.pc_sheet_items.add_item" }}</a>
</div>
{{#each weapons as |weapon id|}}
<div>{{weapon.name}}</div>
{{#if weapon.system.equipped}}
<div><a class="equippable" data-item-id="{{weapon._id}}"><i class="fa-regular fa-square-check"></i></a></div>
{{else}}
<div><a class="equippable" data-item-id="{{weapon._id}}"><i class="fa-regular fa-square"></i></a></div>
{{/if}}
<div>{{weapon.system.breakage_range}}</div>
<div>{{weapon.system.fumble_range}}</div>
<div>{{weapon.system.strength}}</div>
<div>{{weapon.system.quantity}}</div>
<div>{{weapon.system.weight}}</div>
<div>{{weapon.system.cost}}</div>
<div class="item-controls">
<a class="item-control item-edit" title="Edit Item" data-item-id="{{weapon._id}}"><i class="fas fa-edit"></i></a>
<a class="item-control item-delete" title="Delete Item" data-item-id="{{weapon._id}}"><i class="fas fa-trash"></i></a>
</div>
{{/each}}
</div>

View File

@ -0,0 +1,145 @@
<form class="actor-sheet {{cssClass}}" autocomplete="off">
<!-- Header Section-->
<header class="sheet-header">
<div class="container">
<!-- Actor Icon Section-->
<div>
<div class="actor-icon">
<img src="{{actor.img}}" data-edit="img" title="{{actor.name}}" height="64" width="64"/>
</div>
</div>
<!-- Resource Boxes Section-->
<div class="resource-container">
<div class="resource-entry">
{{ localize "rmss.player_character.resources.hits" }}
<h4><input name="system.attributes.hits.current" type="Number" value="{{system.attributes.hits.current}}"/>/<input name="system.attributes.hits.max" type="Number" value="{{system.attributes.hits.max}}"/></h4>
</div>
<div class="resource-entry">
<div class="exhaustion-resources">
{{ localize "rmss.player_character.resources.exhaustion_points" }}
<h4><input name="system.attributes.exhaustion_points.current" type="Number" value="{{system.attributes.exhaustion_points.current}}"/>/<input name="system.attributes.exhaustion_points.max" type="Number" value="{{system.attributes.exhaustion_points.max}}"/></h4>
</div>
<div class="exhaustion-modifier">
<label>{{system.attributes.exhaustion_points.modifier}}</label>
</div>
</div>
<div class="resource-entry">
<div class="pp-resources">
{{ localize "rmss.player_character.resources.power_points" }}
<h4><input name="system.attributes.power_points.current" type="Number" value="{{system.attributes.power_points.current}}"/>/<input name="system.attributes.power_points.max" type="Number" value="{{system.attributes.power_points.max}}"/></h4>
</div>
<div class="pp-exhaustion">
<label>{{system.attributes.power_points.modifier}}</label>
</div>
</div>
</div>
<!-- Name, XP and Level Section-->
<div class="header-container">
<div class="header-text">
<label for="name">{{ localize "rmss.player_character.name" }}</label>
<input name="name" type="text" value="{{actor.name}}" placeholder="{{ localize Name }}"/>
</div>
<div class="header-text flexrow">
<label for="level">{{ localize "rmss.player_character.level" }}</label>
<input name="system.attributes.level.value" type="text" value="{{system.attributes.level.value}}"/>
</div>
<div class="header-text flexrow">
<label for="experience">{{ localize "rmss.player_character.experience" }}</label>
<input name="system.attributes.experience_points.value" type="text" value="{{system.attributes.experience_points.value}}"/>
</div>
</div>
</div>
</header>
<!-- Page Selector -->
{{!-- Sheet Tab Navigation --}}
<nav class="sheet-tabs tabs" data-group="primary">
{{!-- Default tab is specified in actor-sheet.mjs --}}
<a class="item" data-tab="Record">{{ localize "rmss.pc_sheet_tabs.record" }}</a>
<a class="item" data-tab="SkillCategory">{{ localize "rmss.pc_sheet_tabs.skill_categories" }}</a>
<a class="item" data-tab="Skills">{{ localize "rmss.pc_sheet_tabs.skills" }}</a>
<a class="item" data-tab="Equipment">{{ localize "rmss.pc_sheet_tabs.equipment" }}</a>
<a class="item" data-tab="Spells">{{ localize "rmss.pc_sheet_tabs.spells" }}</a>
<a class="item" data-tab="StatusRecord">{{ localize "rmss.pc_sheet_tabs.status_record" }}</a>
<a class="item" data-tab="ExperiencePoints">{{ localize "rmss.pc_sheet_tabs.experience_points" }}</a>
</nav>
<!-- Body Section-->
<section class="sheet-body">
<div class="tab record" data-group="primary" data-tab="Record">
<div class="container">
<div class="fixed-info-container">
{{> "systems/rmss/templates/sheets/actors/parts/actor-fixed-info.html" }}
{{> "systems/rmss/templates/sheets/actors/parts/actor-armor-info.html" }}
{{> "systems/rmss/templates/sheets/actors/parts/actor-resistance.html" }}
{{> "systems/rmss/templates/sheets/actors/parts/actor-race-stat-fixed-info.html" }}
{{> "systems/rmss/templates/sheets/actors/parts/actor-role-traits.html" }}
{{> "systems/rmss/templates/sheets/actors/parts/actor-background-info.html" }}
</div>
<div class="stat-container">
{{> "systems/rmss/templates/sheets/actors/parts/actor-stats.html" }}
<div class="favorite-container">
<h2>Favorite Skills</h2>
{{> "systems/rmss/templates/sheets/actors/parts/actor-fav-skills.html" }}
<h2>Favorite Spells</h2>
{{> "systems/rmss/templates/sheets/actors/parts/actor-fav-spells.html" }}
<h2>Equipped Items</h2>
{{> "systems/rmss/templates/sheets/actors/parts/actor-fav-items.html" }}
<h2>Description</h2>
{{editor enrichedDescription target="system.description" button=true owner=owner editable=editable}}
</div>
</div>
</div>
</div>
<div class="tab skill_categories" data-group="primary" data-tab="SkillCategory">
{{> "systems/rmss/templates/sheets/actors/parts/actor-skill-categories.html" }}
</div>
<div class="tab skills" data-group="primary" data-tab="Skills">
{{> "systems/rmss/templates/sheets/actors/parts/actor-skills.html" }}
</div>
<div class="tab equipment" data-group="primary" data-tab="Equipment">
<div class="container">
<div class="equipment-container">
<h2>Items</h2>
{{> "systems/rmss/templates/sheets/actors/parts/actor-items.html" }}
<h2>Weapons</h2>
{{> "systems/rmss/templates/sheets/actors/parts/actor-weapons.html" }}
<h2>Armor and Equipables</h2>
{{> "systems/rmss/templates/sheets/actors/parts/actor-armor.html" }}
<h2>Herbs and Poisons</h2>
{{> "systems/rmss/templates/sheets/actors/parts/actor-herbs.html" }}
</div>
<div class="money-container">
<h2>Wealth</h2>
{{> "systems/rmss/templates/sheets/actors/parts/actor-money.html" }}
</div>
</div>
</div>
<div class="tab spells" data-group="primary" data-tab="Spells">
<div class="spell-container">
{{> "systems/rmss/templates/sheets/actors/parts/actor-spells.html" }}
</div>
</div>
</section>
</form>

View File

@ -0,0 +1,40 @@
<form class="{{cssClass}}" autocomplete="off">
<header class="sheet-header">
<img src="{{item.img}}" data-edit="img" title="{{item.name}}" height="64" width="64"/>
<h1><input name="name" type="text" value="{{item.name}}" placeholder="{{ localize 'Name' }}"/></h1>
</header>
<div class="sheet-content">
<div>
<table>
<tr>
<th>{{localize "rmss.item.equipped"}}</th>
<th>{{localize "rmss.item.quantity"}}</th>
<th>{{localize "rmss.armor.weight"}}</th>
<th>{{localize "rmss.armor.cost"}}</th>
<th>{{localize "rmss.armor.prod_time"}}</th>
<th>{{localize "rmss.armor.at"}}</th>
</tr>
<td>
<input type="checkbox" name="system.equipped" {{checked system.equipped}}/>
</td>
<td>
<input name="system.quantity" type="text" value="{{system.quantity}}" data-dtype="Number"/>
</td>
<td>
<input name="system.weight" type="text" value="{{system.weight}}" data-dtype="Number"/>
</td>
<td>
<input name="system.cost" type="text" value="{{system.cost}}" data-dtype="String"/>
</td>
<td>
<input name="system.prod_time" type="text" value="{{system.prod_time}}" data-dtype="String"/>
</td>
<td>
<input name="system.at" type="text" value="{{system.at}}" data-dtype="Number"/>
</td>
</table>
{{localize "rmss.item.description"}}
{{editor enrichedDescription target="system.description" button=true owner=owner editable=editable}}
</div>
</div>
</form>

View File

@ -0,0 +1,40 @@
<form class="{{cssClass}}" autocomplete="off">
<header class="sheet-header">
<img src="{{item.img}}" data-edit="img" title="{{item.name}}" height="64" width="64"/>
<h1><input name="name" type="text" value="{{item.name}}" placeholder="{{ localize 'Name' }}"/></h1>
</header>
<div class="sheet-content">
<div>
<table>
<tr>
<th>{{localize "rmss.item.quantity"}}</th>
<th>{{localize "rmss.herb_or_poison.weight"}}</th>
<th>{{localize "rmss.herb_or_poison.codes"}}</th>
<th>{{localize "rmss.herb_or_poison.form_and_prep"}}</th>
<th>{{localize "rmss.herb_or_poison.cost"}}</th>
<th>{{localize "rmss.herb_or_poison.af"}}</th>
</tr>
<td>
<input name="system.quantity" type="text" value="{{system.quantity}}" data-dtype="Number"/>
</td>
<td>
<input name="system.weight" type="text" value="{{system.weight}}" data-dtype="Number"/>
</td>
<td>
<input name="system.codes" type="text" value="{{system.codes}}" data-dtype="String"/>
</td>
<td>
<input name="system.form_and_prep" type="text" value="{{system.form_and_prep}}" data-dtype="String"/>
</td>
<td>
<input name="system.cost" type="text" value="{{system.cost}}" data-dtype="String"/>
</td>
<td>
<input name="system.af" type="text" value="{{system.af}}" data-dtype="Number"/>
</td>
</table>
{{localize "rmss.item.description"}}
{{editor enrichedDescription target="system.description" button=true owner=owner editable=editable}}
</div>
</div>
</form>

View File

@ -0,0 +1,36 @@
<form class="{{cssClass}}" autocomplete="off">
<header class="sheet-header">
<img src="{{item.img}}" data-edit="img" title="{{item.name}}" height="64" width="64"/>
<h1><input name="name" type="text" value="{{item.name}}" placeholder="{{ localize 'Name' }}"/></h1>
</header>
<div class="sheet-content">
<div>
<table>
<tr>
<th>{{localize "rmss.item.worn"}}</th>
<th>{{localize "rmss.item.quantity"}}</th>
<th>{{localize "rmss.item.weight"}}</th>
<th>{{localize "rmss.item.cost"}}</th>
<th>{{localize "rmss.item.prod_time"}}</th>
</tr>
<td>
<input type="checkbox" name="system.worn" {{checked system.worn}}/>
</td>
<td>
<input name="system.quantity" type="text" value="{{system.quantity}}" data-dtype="Number"/>
</td>
<td>
<input name="system.weight" type="text" value="{{system.weight}}" data-dtype="Number"/>
</td>
<td>
<input name="system.cost" type="text" value="{{system.cost}}" data-dtype="String"/>
</td>
<td>
<input name="system.prod_time" type="text" value="{{system.prod_time}}" data-dtype="String"/>
</td>
</table>
{{localize "rmss.item.description"}}
{{editor enrichedDescription target="system.description" button=true owner=owner editable=editable}}
</div>
</div>
</form>

View File

@ -0,0 +1,50 @@
<form class="{{cssClass}}" autocomplete="off">
<header class="sheet-header">
<img src="{{item.img}}" data-edit="img" title="{{item.name}}" height="64" width="64"/>
<h1><input name="name" type="text" value="{{item.name}}" placeholder="{{ localize 'Name' }}"/></h1>
</header>
<div class="sheet-content">
<div>
<table>
<tr>
<th>{{localize "rmss.transport.cost"}}</th>
<th>{{localize "rmss.transport.feet_per_round"}}</th>
<th>{{localize "rmss.transport.miles_per_hour"}}</th>
<th>{{localize "rmss.transport.maneuver"}}</th>
<th>{{localize "rmss.transport.height"}}</th>
<th>{{localize "rmss.transport.weight"}}</th>
<th>{{localize "rmss.transport.capacity"}}</th>
<th>{{localize "rmss.transport.offensive_bonus"}}</th>
</tr>
<td>
<input name="system.cost" type="text" value="{{system.cost}}" data-dtype="String"/>
</td>
<td>
<input name="system.feet_per_round" type="text" value="{{system.feet_per_round}}" data-dtype="Number"/>
</td>
<td>
<input name="system.miles_per_hour" type="text" value="{{system.miles_per_hour}}" data-dtype="Number"/>
</td>
<td>
<input name="system.maneuver" type="text" value="{{system.maneuver}}" data-dtype="Number"/>
</td>
<td>
<input name="system.height" type="text" value="{{system.height}}" data-dtype="Number"/>
</td>
<td>
<input name="system.weight" type="text" value="{{system.weight}}" data-dtype="Number"/>
</td>
<td>
<input name="system.capacity" type="text" value="{{system.capacity}}" data-dtype="Number"/>
</td>
<td>
<input name="system.offensive_bonus" type="text" value="{{system.offensive_bonus}}" data-dtype="Number"/>
</td>
</table>
{{localize "rmss.item.description"}}
{{editor enrichedDescription target="system.description" button=true owner=owner editable=editable}}
</div>
</div>
</form>

View File

@ -0,0 +1,54 @@
<form class="{{cssClass}}" autocomplete="off">
<header class="sheet-header">
<img src="{{item.img}}" data-edit="img" title="{{item.name}}" height="64" width="64"/>
<h1><input name="name" type="text" value="{{item.name}}" placeholder="{{ localize 'Name' }}"/></h1>
</header>
<div class="sheet-content">
<div>
<table>
<tr>
<th>{{localize "rmss.weapon.equipped"}}</th>
<th>{{localize "rmss.item.quantity"}}</th>
<th>{{localize "rmss.weapon.cost"}}</th>
<th>{{localize "rmss.weapon.type"}}</th>
<th>{{localize "rmss.weapon.prod_time"}}</th>
<th>{{localize "rmss.weapon.weight"}}</th>
<th>{{localize "rmss.weapon.breakage_range"}}</th>
<th>{{localize "rmss.weapon.strength"}}</th>
<th>{{localize "rmss.weapon.fumble_range"}}</th>
</tr>
<td>
<input type="checkbox" name="system.equipped" {{checked system.equipped}}/>
</td>
<td>
<input name="system.quantity" type="text" value="{{system.quantity}}" data-dtype="Number"/>
</td>
<td>
<input name="system.cost" type="text" value="{{system.cost}}" data-dtype="String"/>
</td>
<td>
<input name="system.type" type="text" value="{{system.type}}" data-dtype="String"/>
</td>
<td>
<input name="system.prod_time" type="text" value="{{system.prod_time}}" data-dtype="String"/>
</td>
<td>
<input name="system.weight" type="text" value="{{system.weight}}" data-dtype="Number"/>
</td>
<td>
<input name="system.breakage_range" type="text" value="{{system.breakage_range}}" data-dtype="String"/>
</td>
<td>
<input name="system.strength" type="text" value="{{system.strength}}" data-dtype="String"/>
</td>
<td>
<input name="system.fumble_range" type="text" value="{{system.fumble_range}}" data-dtype="String"/>
</td>
</table>
{{localize "rmss.item.description"}}
{{editor enrichedDescription target="system.description" button=true owner=owner editable=editable}}
</div>
</div>
</form>

View File

@ -0,0 +1,83 @@
<form class="{{cssClass}}" autocomplete="off">
<header class="sheet-header">
<img src="{{item.img}}" data-edit="img" title="{{item.name}}" height="64" width="64"/>
<h1><input name="name" type="text" value="{{item.name}}" placeholder="{{ localize 'Name' }}"/></h1>
</header>
<div class="sheet-content">
<div class="applicable-stats-grid-container">
<div>
Applicable Stat 1
<select name="system.app_stat_1" class="app-stat-selector" value="{{system.app_stat_1}}" itemid="{{ item._id }}">
{{selectOptions applicable_stat_list selected=applicable_stat_1_selected }}
</select>
</div>
<div>
Applicable Stat 2
<select name="system.app_stat_2" class="app-stat-selector" value="{{system.app_stat_2}}" itemid="{{ item._id }}">
{{selectOptions applicable_stat_list selected=applicable_stat_2_selected }}
</select>
</div>
<div>
Applicable Stat 2
<select name="system.app_stat_3" class="app-stat-selector" value="{{system.app_stat_3}}" itemid="{{ item._id }}">
{{selectOptions applicable_stat_list selected=applicable_stat_3_selected }}
</select>
</div>
</div>
<div>
<table>
<tr>
<th>{{localize "rmss.skill_category.applicable_stats"}}</th>
<th>{{localize "rmss.skill_category.development_cost"}}</th>
<th>{{localize "rmss.skill_category.ranks"}}</th>
<th>{{localize "rmss.skill_category.new_ranks"}}</th>
<th>{{localize "rmss.skill_category.rank_bonus"}}</th>
<th>{{localize "rmss.skill_category.stat_bonus"}}</th>
<th>{{localize "rmss.skill_category.prof_bonus"}}</th>
<th>{{localize "rmss.skill_category.special_bonus_1"}}</th>
<th>{{localize "rmss.skill_category.special_bonus_2"}}</th>
<th>{{localize "rmss.skill_category.total_bonus"}}</th>
</tr>
<td>
<input name="system.applicable_stats" type="text" value="{{system.applicable_stats}}" data-dtype="String"/>
</td>
<td>
<input name="system.development_cost" type="text" value="{{system.development_cost}}" data-dtype="String"/>
</td>
<td>
<input name="system.ranks" type="text" value="{{system.ranks}}" data-dtype="Number"/>
</td>
<td>
<div>
{{#switch system.new_ranks.value}}
{{#case 0}} <a class="skillcategorysheet-newrank" data-item-id="{{item._id}}" value="{{system.new_ranks.value}}"><i class="fa-regular fa-square"></i> <i class="fa-regular fa-square"></i> <i class="fa-regular fa-square"></i></a> {{/case}}
{{#case 1}} <a class="skillcategorysheet-newrank" data-item-id="{{item._id}}" value="{{system.new_ranks.value}}"><i class="fa-regular fa-square-check"></i> <i class="fa-regular fa-square"></i> <i class="fa-regular fa-square"></i></a> {{/case}}
{{#case 2}} <a class="skillcategorysheet-newrank" data-item-id="{{item._id}}" value="{{system.new_ranks.value}}"><i class="fa-regular fa-square-check"></i> <i class="fa-regular fa-square-check"></i> <i class="fa-regular fa-square"></i></a> {{/case}}
{{#case 3}} <a class="skillcategorysheet-newrank" data-item-id="{{item._id}}" value="{{system.new_ranks.value}}"><i class="fa-regular fa-square-check"></i> <i class="fa-regular fa-square-check"></i> <i class="fa-regular fa-square-check"></i></a> {{/case}}
{{/switch}}
</div>
</td>
<td>
<input name="system.rank_bonus" type="text" value="{{system.rank_bonus}}" data-dtype="Number"/>
</td>
<td>
<input name="system.stat_bonus" type="text" value="{{system.stat_bonus}}" data-dtype="Number"/>
</td>
<td>
<input name="system.prof_bonus" type="text" value="{{system.prof_bonus}}" data-dtype="Number"/>
</td>
<td>
<input name="system.special_bonus_1" type="text" value="{{system.special_bonus_1}}" data-dtype="Number"/>
</td>
<td>
<input name="system.special_bonus_2" type="text" value="{{system.special_bonus_2}}" data-dtype="Number"/>
</td>
<td>
<input name="system.total_bonus" type="text" value="{{system.total_bonus}}" data-dtype="Number"/>
</td>
</table>
{{localize "rmss.skill_category.description"}}
{{editor enrichedDescription target="system.description" button=true owner=owner editable=editable}}
</div>
</div>
</form>

View File

@ -0,0 +1,71 @@
<form class="{{cssClass}}" autocomplete="off">
<header class="sheet-header">
<img src="{{item.img}}" data-edit="img" title="{{item.name}}" height="64" width="64"/>
<h1><input name="name" type="text" value="{{item.name}}" placeholder="{{ localize 'Name' }}"/></h1>
</header>
<div class="sheet-content">
<div>
Skill Category
<select name="system.category" class="app-stat-selector" value="{{system.category}}" itemid="{{ item._id }}">
{{selectOptions owned_skillcats selected=selected_skillcat }}
</select>
</div>
<div>
Skill Designation
<select name="system.designation" class="app-stat-selector" value="{{system.designation}}" itemid="{{ item._id }}">
{{selectOptions designations selected=system.designation}}
</select>
</div>
<div>
<table>
<tr>
<th>{{localize "rmss.skill.favorite"}}</th>
<th>{{localize "rmss.skill.ranks"}}</th>
<th>{{localize "rmss.skill.new_ranks"}}</th>
<th>{{localize "rmss.skill.rank_bonus"}}</th>
<th>{{localize "rmss.skill.category_bonus"}}</th>
<th>{{localize "rmss.skill.item_bonus"}}</th>
<th>{{localize "rmss.skill.special_bonus_1"}}</th>
<th>{{localize "rmss.skill.special_bonus_2"}}</th>
<th>{{localize "rmss.skill.total_bonus"}}</th>
</tr>
<td>
<input type="checkbox" name="system.favorite" {{checked system.favorite}}/>
</td>
<td>
<input name="system.ranks" type="text" value="{{system.ranks}}" data-dtype="Number"/>
</td>
<td>
<div>
{{#switch system.new_ranks.value}}
{{#case 0}} <a class="skillsheet-newrank" data-item-id="{{item._id}}" value="{{system.new_ranks.value}}"><i class="fa-regular fa-square"></i> <i class="fa-regular fa-square"></i> <i class="fa-regular fa-square"></i></a> {{/case}}
{{#case 1}} <a class="skillsheet-newrank" data-item-id="{{item._id}}" value="{{system.new_ranks.value}}"><i class="fa-regular fa-square-check"></i> <i class="fa-regular fa-square"></i> <i class="fa-regular fa-square"></i></a> {{/case}}
{{#case 2}} <a class="skillsheet-newrank" data-item-id="{{item._id}}" value="{{system.new_ranks.value}}"><i class="fa-regular fa-square-check"></i> <i class="fa-regular fa-square-check"></i> <i class="fa-regular fa-square"></i></a> {{/case}}
{{#case 3}} <a class="skillsheet-newrank" data-item-id="{{item._id}}" value="{{system.new_ranks.value}}"><i class="fa-regular fa-square-check"></i> <i class="fa-regular fa-square-check"></i> <i class="fa-regular fa-square-check"></i></a> {{/case}}
{{/switch}}
</div>
</td>
<td>
<input name="system.rank_bonus" type="text" value="{{system.rank_bonus}}" data-dtype="Number"/>
</td>
<td>
<input name="system.category_bonus" type="text" value="{{system.category_bonus}}" data-dtype="Number"/>
</td>
<td>
<input name="system.item_bonus" type="text" value="{{system.item_bonus}}" data-dtype="Number"/>
</td>
<td>
<input name="system.special_bonus_1" type="text" value="{{system.special_bonus_1}}" data-dtype="Number"/>
</td>
<td>
<input name="system.special_bonus_2" type="text" value="{{system.special_bonus_2}}" data-dtype="Number"/>
</td>
<td>
<input name="system.total_bonus" type="text" value="{{system.total_bonus}}" data-dtype="Number"/>
</td>
</table>
{{localize "rmss.skill.description"}}
{{editor enrichedDescription target="system.description" button=true owner=owner editable=editable}}
</div>
</div>
</form>

View File

@ -0,0 +1,46 @@
<form class="{{cssClass}}" autocomplete="off">
<header class="sheet-header">
<img src="{{item.img}}" data-edit="img" title="{{item.name}}" height="64" width="64"/>
<h1><input name="name" type="text" value="{{item.name}}" placeholder="{{ localize 'Name' }}"/></h1>
</header>
<div class="sheet-content">
<div>
<table>
<tr>
<th>{{localize "rmss.spell.favorite"}}</th>
<th>{{localize "rmss.spell.spell_list"}}</th>
<th>{{localize "rmss.spell.level"}}</th>
<th>{{localize "rmss.spell.area_of_effect"}}</th>
<th>{{localize "rmss.spell.duration"}}</th>
<th>{{localize "rmss.spell.range"}}</th>
<th>{{localize "rmss.spell.type"}}</th>
</tr>
<td>
<input type="checkbox" name="system.favorite" {{checked system.favorite}}/>
</td>
<td>
<input name="system.spell_list" type="text" value="{{system.spell_list}}" data-dtype="String"/>
</td>
<td>
<input name="system.level" type="text" value="{{system.level}}" data-dtype="Number"/>
</td>
<td>
<input name="system.area_of_effect" type="text" value="{{system.area_of_effect}}" data-dtype="String"/>
</td>
<td>
<input name="system.duration" type="text" value="{{system.duration}}" data-dtype="String"/>
</td>
<td>
<input name="system.range" type="text" value="{{system.range}}" data-dtype="String"/>
</td>
<td>
<input name="system.type" type="text" value="{{system.type}}" data-dtype="String"/>
</td>
</table>
{{localize "rmss.spell.description"}}
{{editor enrichedDescription target="system.description" button=true owner=owner editable=editable}}
</div>
</div>
</form>