Merge pull request #1 from Cynicide/develop

Initial commit
This commit is contained in:
Cynicide 2022-08-29 20:23:11 +10:00 committed by GitHub
commit d4f758250a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
59 changed files with 3506 additions and 2 deletions

View File

@ -1,2 +1,20 @@
# RMSS-FoundryVTT
An Implementation of the Rolemaster Standard System for FoundryVTT
# Rolemaster Standard System for Foundry VTT
## Intro
This is an in development implementation of the Rolemaster Standard System for FoundryVTT. All rights to the system remain property of Iron Crown Enterprises (http://ironcrown.com/). This system will not include any of the book content and aims to provide only what is on the reproducable character sheet. If you need access to the Rolemaster Standard System please purchase a copy of the PDF's via Drive Thru RPG (https://www.drivethrurpg.com/browse/pub/461/Iron-Crown-Enterprises).
Early project goals include:
- A functionaing character sheet that automates some of the basic maths.
- A dice roller that allows you to perform the most common rolls in the system.
- A basic combat tracker
## Credits
This system is based on:
- the Foundry VTT Boilerplate system by XXX
- The video tutorials by Cédric Hauteville you can watch them here: https://www.youtube.com/playlist?list=PLFV9z59nkHDccUbRXVt623UdloPTclIrz
Icons have been provided by https://game-icons.net
This system uses less for CSS you can see a good installation guide for VSCode at https://code.visualstudio.com/docs/languages/css#_transpiling-sass-and-less-into-css

1
rmss/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
node_modules/

14
rmss/.vscode/tasks.json vendored Normal file
View File

@ -0,0 +1,14 @@
// Less configuration
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "Less Compile",
"type": "shell",
"command": "lessc less/rmss.less rmss.css",
"group": "build"
}
]
}

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 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

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
rmss/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();
})
);

235
rmss/lang/en.json Normal file
View File

@ -0,0 +1,235 @@
{
"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_tabs": {
"record": "Record",
"skill_categories": "Skill Categories",
"skills": "Skills",
"equipment": "Equipment",
"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",
"add_skillcat": "Add Skill Category"
},
"pc_sheet_items": {
"favorite": "Favorite",
"quantity": "Quantity",
"item_name": "Item Name",
"weight": "Weight",
"cost": "Cost",
"add_item": "Add Item"
},
"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": {
"description": "Other Notes",
"quantity": "Quantity",
"weight": "Weight",
"cost": "Cost",
"prod_time": "Production Time"
},
"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"
},
"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": {
"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:"
}
}
}

153
rmss/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;
}

118
rmss/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
rmss/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%
}
}
}

View File

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

6
rmss/less/rmss.less Normal file
View File

@ -0,0 +1,6 @@
@import "./item-sheet.less";
@import "./actor-sheet.less";
@import "./skillcat-sheet.less";
@import "./money-sheet.less";
@import "./table.less";
@import "./grid.less";

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;
}

19
rmss/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;
}

55
rmss/module/config.js Normal file
View File

@ -0,0 +1,55 @@
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"
}
}

View File

@ -0,0 +1,144 @@
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.data;
const data = actorData.data;
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 type specific data
*/
_prepareCharacterData(actorData) {
if (actorData.type !== 'character') return;
// Calculate Stat Bonuses in Actor
this.prepareStatBonuses(actorData)
// Calculate Resistance Rolls in Actor
this.prepareResistanceRolls(actorData);
// Iterate through and apply Stat bonuses for Skill Category Items
this.prepareSkillCatStatBonuses();
}
/**
* Prepare NPC type specific data.
*/
_prepareNpcData(actorData) {
if (actorData.type !== 'npc') return;
// Make modifications to data here. For example:
const data = actorData.data;
data.xp = (data.cr * data.cr) * 100;
}
prepareStatBonuses(actorData) {
const data = actorData.data;
actorData.data.stats.agility.stat_bonus = Number(data.stats.agility.racial_bonus)+Number(data.stats.agility.special_bonus)+Number(data.stats.agility.basic_bonus);
actorData.data.stats.constitution.stat_bonus = Number(data.stats.constitution.racial_bonus)+Number(data.stats.constitution.special_bonus)+Number(data.stats.constitution.basic_bonus);
actorData.data.stats.memory.stat_bonus = Number(data.stats.memory.racial_bonus)+Number(data.stats.memory.special_bonus)+Number(data.stats.memory.basic_bonus);
actorData.data.stats.reasoning.stat_bonus = Number(data.stats.reasoning.racial_bonus)+Number(data.stats.reasoning.special_bonus)+Number(data.stats.reasoning.basic_bonus);
actorData.data.stats.self_discipline.stat_bonus = Number(data.stats.self_discipline.racial_bonus)+Number(data.stats.self_discipline.special_bonus)+Number(data.stats.self_discipline.basic_bonus);
actorData.data.stats.empathy.stat_bonus = Number(data.stats.empathy.racial_bonus)+Number(data.stats.empathy.special_bonus)+Number(data.stats.empathy.basic_bonus);
actorData.data.stats.intuition.stat_bonus = Number(data.stats.intuition.racial_bonus)+Number(data.stats.intuition.special_bonus)+Number(data.stats.intuition.basic_bonus);
actorData.data.stats.presence.stat_bonus = Number(data.stats.presence.racial_bonus)+Number(data.stats.presence.special_bonus)+Number(data.stats.presence.basic_bonus);
actorData.data.stats.quickness.stat_bonus = Number(data.stats.quickness.racial_bonus)+Number(data.stats.quickness.special_bonus)+Number(data.stats.quickness.basic_bonus);
actorData.data.stats.strength.stat_bonus = Number(data.stats.strength.racial_bonus)+Number(data.stats.strength.special_bonus)+Number(data.stats.strength.basic_bonus);
}
prepareResistanceRolls(actorData) {
const data = actorData.data;
actorData.data.resistance_rolls.essence = Number(actorData.data.stats.empathy.stat_bonus * 3)
actorData.data.resistance_rolls.channeling = Number(actorData.data.stats.intuition.stat_bonus * 3)
actorData.data.resistance_rolls.mentalism = Number(actorData.data.stats.presence.stat_bonus * 3)
actorData.data.resistance_rolls.fear = Number(actorData.data.stats.self_discipline.stat_bonus * 3)
actorData.data.resistance_rolls.poison_disease = Number(actorData.data.stats.constitution.stat_bonus * 3)
actorData.data.resistance_rolls.chann_ess = Number(actorData.data.stats.intuition.stat_bonus) + Number(actorData.data.stats.empathy.stat_bonus)
actorData.data.resistance_rolls.chann_ment = Number(actorData.data.stats.intuition.stat_bonus) + Number(actorData.data.stats.presence.stat_bonus)
actorData.data.resistance_rolls.ess_ment = Number(actorData.data.stats.empathy.stat_bonus) + Number(actorData.data.stats.presence.stat_bonus)
actorData.data.resistance_rolls.arcane = Number(actorData.data.stats.empathy.stat_bonus) + Number(actorData.data.stats.intuition.stat_bonus) + Number(actorData.data.stats.presence.stat_bonus)
}
prepareSkillCatStatBonuses() {
console.log("Getting Items");
for (const item of this.items) {
if (item.type === "skill_category") {
// Get all the applicable stats for this skill category
var app_stat_1 = item.data.data.app_stat_1;
var app_stat_2 = item.data.data.app_stat_2;
var app_stat_3 = item.data.data.app_stat_3;
console.log(item.name + " " + app_stat_1 + " " + app_stat_2 + " " + app_stat_3);
// If the first one is None we don't need to do anything further
if (app_stat_1 === "None") {
continue;
}
else
{
var applicable_stat_bonus = 0;
var app_stat_1_found = false;
var app_stat_2_found = false;
var 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) {
console.log("Found first stat: " + stat);
app_stat_1_found = true;
// Get the Stat Bonus
console.log(this.data.data.stats[stat].stat_bonus);
applicable_stat_bonus = applicable_stat_bonus + this.data.data.stats[stat].stat_bonus
//console.log("New Applicable Stat Bonus: " + applicable_stat_bonus)
}
if (app_stat_2 === CONFIG.rmss.stats[stat].shortname) {
console.log("Found second stat: " + stat);
app_stat_2_found = true;
console.log(this.data.data.stats[stat].stat_bonus);
applicable_stat_bonus = applicable_stat_bonus + this.data.data.stats[stat].stat_bonus
//console.log("New Applicable Stat Bonus: " + applicable_stat_bonus)
}
if (app_stat_3 === CONFIG.rmss.stats[stat].shortname) {
console.log("Found third stat: " + stat);
app_stat_3_found = true;
console.log(this.data.data.stats[stat].stat_bonus);
applicable_stat_bonus = applicable_stat_bonus + this.data.data.stats[stat].stat_bonus
//console.log("New Applicable Stat Bonus: " + applicable_stat_bonus)
}
}
console.log("Applicable Stat Bonus: " + applicable_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.data.data.stat_bonus = applicable_stat_bonus;
// Update the total in the Item
item.calculateSkillCatTotalBonus(item.data);
}
}
}
}
}
}

View File

@ -0,0 +1,77 @@
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().
super.prepareData();
}
// Set the images for newly created images (need to fix for copied images).
async _preCreate(data, options, userId) {
await super._preCreate(data, options, userId);
if (!data.img) {
if (this.data.type == "armor") {
await this.data.update({img: "systems/rmss/assets/default/armor.svg"});
}
else if (this.data.type == "weapon") {
await this.data.update({img: "systems/rmss/assets/default/weapon.svg"});
}
else if (this.data.type == "skill") {
await this.data.update({img: "systems/rmss/assets/default/skill.svg"});
}
else if (this.data.type == "skill_category") {
await this.data.update({img: "systems/rmss/assets/default/skill_category.svg"});
}
else if (this.data.type == "spell") {
await this.data.update({img: "systems/rmss/assets/default/spell.svg"});
}
else if (this.data.type == "herb_or_poison") {
await this.data.update({img: "systems/rmss/assets/default/herb_or_poison.svg"});
}
else if (this.data.type == "transport") {
await this.data.update({img: "systems/rmss/assets/default/transport.svg"});
}
}
}
calculateSkillCatTotalBonus(itemData) {
// Calculate Stat Bonuses
const data = itemData.data;
itemData.data.total_bonus = Number(data.rank_bonus)+Number(data.stat_bonus)+Number(data.prof_bonus)+Number(data.special_bonus_1)+Number(data.special_bonus_2);
}
prepareDerivedData() {
const itemData = this.data;
const data = itemData.data;
const flags = itemData.flags.rmss || {};
// Make separate methods for each item type to keep things organized.
this._prepareSkillCategoryData(itemData);
this._prepareSkillData(itemData);
}
_prepareSkillCategoryData(itemData) {
if (itemData.type !== 'skill_category') return;
// Make modifications to data here. For example:
//const data = itemData.data;
// Calculate Stat Bonuses
this.calculateSkillCatTotalBonus(itemData);
}
_prepareSkillData(itemData) {
if (itemData.type !== 'skill') return;
// Make modifications to data here. For example:
const data = itemData.data;
// Calculate Stat Bonuses
itemData.data.total_bonus = Number(data.rank_bonus)+Number(data.category_bonus)+Number(data.item_bonus)+Number(data.special_bonus_1)+Number(data.special_bonus_2);
}
}

View File

@ -0,0 +1,139 @@
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, {
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
getData() {
const context = super.getData();
// Use a safe clone of the actor data for further operations.
const actorData = this.actor.data.toObject(false);
// Add the actor's data to context.data for easier access, as well as flags.
context.data = actorData.data;
context.flags = actorData.flags;
// 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;
}
_prepareCharacterData(context) {
}
_prepareItems(context) {
// Initialize containers.
const gear = [];
const playerskill= [];
const skillcat = [];
// 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' || i.type === 'armor' || i.type === 'weapon' || i.type === 'herb_or_poison') {
gear.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);
}
}
// 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;
}
activateListeners(html) {
super.activateListeners(html);
// NOTE: Can you do skill/item favorites this way?
// 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"));
console.log(this);
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 => {
const item = this.actor.items.get(ev.currentTarget.getAttribute("data-item-id"));
console.log(ev.currentTarget.getAttribute("data-item-id"));
item.delete();
});
}
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,33 @@
// 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
getData() {
const baseData = super.getData();
let sheetData = {
owner: this.item.isOwner,
editable :this.isEditable,
item: baseData.item,
data: baseData.item.data.data,
config: CONFIG.rmss
};
return sheetData;
}
}

View File

@ -0,0 +1,33 @@
// 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
getData() {
const baseData = super.getData();
let sheetData = {
owner: this.item.isOwner,
editable :this.isEditable,
item: baseData.item,
data: baseData.item.data.data,
config: CONFIG.rmss
};
return sheetData;
}
}

View File

@ -0,0 +1,33 @@
// 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
getData() {
const baseData = super.getData();
let sheetData = {
owner: this.item.isOwner,
editable :this.isEditable,
item: baseData.item,
data: baseData.item.data.data,
config: CONFIG.rmss
};
return sheetData;
}
}

View File

@ -0,0 +1,33 @@
// 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
getData() {
const baseData = super.getData();
let sheetData = {
owner: this.item.isOwner,
editable :this.isEditable,
item: baseData.item,
data: baseData.item.data.data,
config: CONFIG.rmss
};
return sheetData;
}
}

View File

@ -0,0 +1,33 @@
// 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
getData() {
const baseData = super.getData();
let sheetData = {
owner: this.item.isOwner,
editable :this.isEditable,
item: baseData.item,
data: baseData.item.data.data,
config: CONFIG.rmss
};
return sheetData;
}
}

View File

@ -0,0 +1,111 @@
// 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: 530,
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
getData() {
const baseData = super.getData();
// Get a list of stats that can be used as applicable stats
var applicable_stat_list = this.prepareApplicableStatValues(CONFIG);
//Get the currently selected value for all three applicable stats
var applicable_stat_1_selected = this.prepareApplicableSelectedStat("app_stat_1");
var applicable_stat_2_selected = this.prepareApplicableSelectedStat("app_stat_2");
var applicable_stat_3_selected = this.prepareApplicableSelectedStat("app_stat_3");
// Build the string for Applicable Stats
var applicable_stat_text = this.buildApplicableStatsText(applicable_stat_1_selected, applicable_stat_2_selected, applicable_stat_3_selected)
baseData.item.data.data['applicable_stats'] = applicable_stat_text
let sheetData = {
owner: this.item.isOwner,
editable :this.isEditable,
item: baseData.item,
data: baseData.item.data.data,
config: CONFIG.rmss,
applicable_stat_list: applicable_stat_list,
applicable_stat_1_selected: applicable_stat_1_selected,
applicable_stat_2_selected: applicable_stat_2_selected,
applicable_stat_3_selected: applicable_stat_3_selected
};
console.log(this.item)
return sheetData;
}
async _setApplicableStat(item, ev) {
// Build a JSON Object from the select tag value and select name (item data attribute key)
var update_key = ev.currentTarget.getAttribute("name");
var update_data = ev.target.value;
// Update Item Data
await item.update({[update_key]: update_data});
}
prepareApplicableStatValues(CONFIG) {
var applicable_stat_1_list = {None: "None"}
// Get a list of stat shortnames from the config
for (const item in CONFIG.rmss.stats) {
applicable_stat_1_list[CONFIG.rmss.stats[item]['shortname']] = CONFIG.rmss.stats[item]['shortname'];
}
return applicable_stat_1_list;
}
// Determine which Stat is selected for applicable stats
prepareApplicableSelectedStat(app_stat) {
var applicable_stat_selected = "";
applicable_stat_selected = this.item.data.data[app_stat];
return applicable_stat_selected;
}
// Build the text that is displayed in the Applicable Stats field
buildApplicableStatsText(app_stat_1, app_stat_2, app_stat_3) {
if (app_stat_1 === "None") {
return("None")
}
else if (app_stat_1 !== "None" && app_stat_2 === "None") {
return(app_stat_1)
}
else if (app_stat_1 !== "None" && app_stat_2 !== "None" && app_stat_3 === "None" ) {
return(app_stat_1 + "/" + app_stat_2 )
}
else if (app_stat_1 !== "None" && app_stat_2 !== "None" && app_stat_3 !== "None" ) {
return(app_stat_1 + "/" + app_stat_2 + "/" + app_stat_3 )
}
else {
return("None")
}
}
activateListeners(html) {
super.activateListeners(html);
// -------------------------------------------------------------
// Everything below here is only needed if the sheet is editable
if (!this.isEditable) return;
// Update Applicable Stats for Skill Categories
html.find('.stat-selector').change(ev => {
this._setApplicableStat(this.item, ev);
});
}
}

View File

@ -0,0 +1,33 @@
// 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
getData() {
const baseData = super.getData();
let sheetData = {
owner: this.item.isOwner,
editable :this.isEditable,
item: baseData.item,
data: baseData.item.data.data,
config: CONFIG.rmss
};
return sheetData;
}
}

View File

@ -0,0 +1,32 @@
// 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
getData() {
const baseData = super.getData();
let sheetData = {
owner: this.item.isOwner,
editable :this.isEditable,
item: baseData.item,
data: baseData.item.data.data,
config: CONFIG.rmss
};
return sheetData;
}
}

View File

@ -0,0 +1,55 @@
{"_id":"0d3EfynJXdtM5Dzm","name":"Armor • Light","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","data":{"description":"Description here.","applicable_stats":"Ag/St/Ag","development_cost":"0","ranks":0,"new_ranks":0,"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{}}
{"_id":"0w6sahjMDlHYSN8V","name":"Lore • Obscure","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","data":{"description":"Description here.","applicable_stats":"Me/Re/Me","development_cost":"0","ranks":0,"new_ranks":0,"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{}}
{"_id":"1G2k2fwahmEzCOFU","name":"Technical/Trade • Vocational","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","data":{"description":"Description here.","applicable_stats":"Me/In/Re","development_cost":"0","ranks":0,"new_ranks":0,"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{}}
{"_id":"4BM6WowdqAcmqKqQ","name":"Lore • Technical","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","data":{"description":"Description here.","applicable_stats":"Me/Re/Me","development_cost":"0","ranks":0,"new_ranks":0,"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{}}
{"_id":"4rr30P65Yc43Ncjh","name":"Science/Analytic • Specialized","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","data":{"description":"Description here.","applicable_stats":"Re/Me/Re","development_cost":"0","ranks":0,"new_ranks":0,"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{}}
{"name":"Body Development","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","data":{"description":"Description here.","applicable_stats":"Co/SD/Co","development_cost":"","ranks":0,"new_ranks":0,"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{"core":{"sourceId":"Item.HfkzoDVADnq2dYJ7"}},"_id":"5QRIgoZ6jew76BgE"}
{"_id":"8TZWjsbDPWi4xLNt","name":"Weapon • Thrown","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","data":{"description":"Description here.","applicable_stats":"Ag/St/Ag","development_cost":"0","ranks":0,"new_ranks":0,"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{}}
{"_id":"91zRgmv9jirmpA3u","name":"Subterfuge • Attack","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","data":{"description":"Description here.","applicable_stats":"Ag/SD/In","development_cost":"0","ranks":0,"new_ranks":0,"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{}}
{"name":"Influence","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","data":{"description":"Description here.","applicable_stats":"Pr/Em/In","development_cost":"0","ranks":0,"new_ranks":0,"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{"core":{"sourceId":"Item.elWpmeBUSeX7AdrX"}},"_id":"96thkRaRd0KvdiIY"}
{"name":"Self Control","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","data":{"description":"Description here.","applicable_stats":"SD/Pr/SD","development_cost":"0","ranks":0,"new_ranks":0,"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{"core":{"sourceId":"Item.rbe2UnhjpflyUZSE"}},"_id":"B1dbjqpZq0srb9tg"}
{"_id":"CegELmkfwbiBjnRk","name":"Athletic • Gymanstics","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","data":{"description":"Description here.","applicable_stats":"Ag/Qu/Ag","development_cost":"0","ranks":0,"new_ranks":0,"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{}}
{"name":"Power Awareness","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","data":{"description":"Description here.","applicable_stats":"Em/In/Pr","development_cost":"0","ranks":0,"new_ranks":0,"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{"core":{"sourceId":"Item.MddRxrypkR5XmFaA"}},"_id":"DowJf31x9cOtxFHF"}
{"_id":"FFdtMkQ6yupVjPeS","name":"Spells • Arcane Open Lists","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","data":{"description":"Description here.","applicable_stats":"","development_cost":"0","ranks":0,"new_ranks":0,"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{}}
{"_id":"Fcj10XbsHSUR5phg","name":"Subterfuge • Mechanics","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","data":{"description":"Description here.","applicable_stats":"In/Ag/Re","development_cost":"0","ranks":0,"new_ranks":0,"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{}}
{"_id":"G6EOQxjgxzXF178q","name":"Spells • Own Realm Other Base Lists","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","data":{"description":"Description here.","applicable_stats":"","development_cost":"0","ranks":0,"new_ranks":0,"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{}}
{"name":"Special Defenses","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","data":{"description":"Description here.","applicable_stats":"none","development_cost":"0","ranks":0,"new_ranks":0,"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{"core":{"sourceId":"Item.jCqolNb9eySmsuMB"}},"_id":"GLunI5fshwER51fi"}
{"_id":"Gtr6mVQnCpNtHViI","name":"Weapon • Missile","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","data":{"description":"Description here.","applicable_stats":"Ag/St/Ag","development_cost":"0","ranks":0,"new_ranks":0,"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{}}
{"_id":"HMWeRbDDZtl0tXEh","name":"Spells • Other Realm Base Lists","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","data":{"description":"Description here.","applicable_stats":"","development_cost":"0","ranks":0,"new_ranks":0,"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{}}
{"_id":"HpgMGMSEQ8Ts7YbG","name":"Armor • Medium","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","data":{"description":"Description here.","applicable_stats":"St/Ag/St","development_cost":"0","ranks":0,"new_ranks":0,"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{}}
{"_id":"IXcTjepLPq31vxVT","name":"Artistic • Active","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","data":{"description":"Description here.","applicable_stats":"Em/In/Pr","development_cost":"0","ranks":0,"new_ranks":0,"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{}}
{"_id":"Ip7mrF0VZ1ExBksX","name":"Outdoor • Animal","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","data":{"description":"Description here.","applicable_stats":"Em/Ag/Em","development_cost":"0","ranks":0,"new_ranks":0,"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{}}
{"_id":"Jnd5pdtnTal5h06A","name":"Science/Analytic • Basic","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","data":{"description":"Description here.","applicable_stats":"Re/Me/Re","development_cost":"0","ranks":0,"new_ranks":0,"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{}}
{"_id":"KnUkHQavTshrTjkg","name":"Awareness • Perceptions","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","data":{"description":"Description here.","applicable_stats":"In/Sd/In","development_cost":"0","ranks":0,"new_ranks":0,"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{}}
{"_id":"N42RNwyuUGHRjodJ","name":"Spells • Own Realm Closed Lists","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","data":{"description":"Description here.","applicable_stats":"","development_cost":"0","ranks":0,"new_ranks":0,"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{}}
{"_id":"OyH3yI187GiJcIc4","name":"Lore • Magical","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","data":{"description":"Description here.","applicable_stats":"Me/Re/Me","development_cost":"0","ranks":0,"new_ranks":0,"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{}}
{"_id":"Q4i7dMnuPsVqZHYw","name":"Artistic • Passive","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","data":{"description":"Description here.","applicable_stats":"Em/In/Pr","development_cost":"0","ranks":0,"new_ranks":0,"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{}}
{"_id":"QTDmhJB09fDe8iQv","name":"Martial Arts • Striking","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","data":{"description":"Description here.","applicable_stats":"St/Ag/St","development_cost":"0","ranks":0,"new_ranks":0,"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{}}
{"name":"Power Point Development","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","data":{"description":"Description here.","applicable_stats":"","development_cost":"0","ranks":0,"new_ranks":0,"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{"core":{"sourceId":"Item.2C7f9nvf1kuK8rXY"}},"_id":"QtaTRdx4XPibLhdr"}
{"_id":"Rl6sVmW7tYsp7AwE","name":"Weapon • Pole Arms","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","data":{"description":"Description here.","applicable_stats":"St/Ag/St","development_cost":"0","ranks":0,"new_ranks":0,"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{}}
{"name":"Power Manipulation","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","data":{"description":"Description here.","applicable_stats":"Em/In/Pr","development_cost":"0","ranks":0,"new_ranks":0,"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{"core":{"sourceId":"Item.qDbLIKRv8Q2Ciw74"}},"_id":"TW4y2IyruLOgQakC"}
{"_id":"Ta85zeG0pUbHtNBr","name":"Spells • Other Realm Open Lists","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","data":{"description":"Description here.","applicable_stats":"","development_cost":"0","ranks":0,"new_ranks":0,"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{}}
{"name":"Communications","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","data":{"description":"Description here.","applicable_stats":"Re/Me/Em","development_cost":"0","ranks":0,"new_ranks":0,"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{"core":{"sourceId":"Item.2JoQYKw8w0Hlpq4A"}},"_id":"UCh0IobVLOUEK6av"}
{"_id":"V8KDQbEuZHFyAVmr","name":"Awareness • Searching","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","data":{"description":"Description here.","applicable_stats":"In/Re/SD","development_cost":"0","ranks":0,"new_ranks":0,"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{}}
{"_id":"Vr9W9tfAwSitbMET","name":"Outdoor • Environmental","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","data":{"description":"Description here.","applicable_stats":"SD/In/Me","development_cost":"0","ranks":0,"new_ranks":0,"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{}}
{"_id":"YEEf2L6g7ZMzTcbF","name":"Technical/Trade • General","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","data":{"description":"Description here.","applicable_stats":"Re/Me/SD","development_cost":"0","ranks":0,"new_ranks":0,"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{}}
{"_id":"YmhpyPfe6QnhPvQt","name":"Armor • Heavy","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","data":{"description":"Description here.","applicable_stats":"St/Ag/St","development_cost":"0","ranks":0,"new_ranks":0,"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{}}
{"_id":"Yv6KAUTUixKBs2Wg","name":"Weapon • Missile Artillery","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","data":{"description":"Description here.","applicable_stats":"In/Ag/Re","development_cost":"","ranks":0,"new_ranks":0,"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{}}
{"_id":"aJG4v8JkqUiXORVC","name":"Athletic • Endurance","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","data":{"description":"Description here.","applicable_stats":"Co/Ag/St","development_cost":"0","ranks":0,"new_ranks":0,"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{}}
{"_id":"aMAh2dm9dNpXc594","name":"Technical/Trade • Professional","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","data":{"description":"Description here.","applicable_stats":"Re/Me/In","development_cost":"0","ranks":0,"new_ranks":0,"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{}}
{"_id":"apah6xF0sZmT2wbe","name":"Spells • Own Realm Open Lists","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","data":{"description":"Description here.","applicable_stats":"","development_cost":"0","ranks":0,"new_ranks":0,"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{}}
{"_id":"bBFVMX3i9ytyGBjc","name":"Combat Maneuvers","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","data":{"description":"Description here.","applicable_stats":"Ag/Qu/SD","development_cost":"0","ranks":0,"new_ranks":0,"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{"core":{"sourceId":"Item.tnvG5xaEcQocDS0w"}}}
{"_id":"bWXkqTxusDg3LD3p","name":"Lore • General","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","data":{"description":"Description here.","applicable_stats":"Me/Re/Me","development_cost":"0","ranks":0,"new_ranks":0,"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{}}
{"name":"Urban","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","data":{"description":"Description here.","applicable_stats":"In/Pr/Re","development_cost":"0","ranks":0,"new_ranks":0,"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{"core":{"sourceId":"Item.1ctWjqn6zIq1Ecah"}},"_id":"eGjI9piHe9tafzBC"}
{"_id":"eJ8HV5AYy1zzYrEL","name":"Weapon • 1-H Concussion","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","data":{"description":"Description here.","applicable_stats":"St/Ag/St","development_cost":"0","ranks":0,"new_ranks":0,"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{}}
{"_id":"fiTen0GICCayYkzd","name":"Athletic • Brawn","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","data":{"description":"Description here.","applicable_stats":"St/Co/Ag","development_cost":"0","ranks":0,"new_ranks":0,"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{}}
{"_id":"jOlyQllB1OMurWft","name":"Martial Arts • Sweeps","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","data":{"description":"Description here.","applicable_stats":"Ag/St/Ag","development_cost":"0","ranks":0,"new_ranks":0,"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{}}
{"name":"Special Attacks","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","data":{"description":"Description here.","applicable_stats":"St/Ag/St","development_cost":"0","ranks":0,"new_ranks":0,"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{"core":{"sourceId":"Item.DGkoTXdfa07tJWMt"}},"_id":"k5ybPxU5ZKdege0Q"}
{"_id":"m8dtArvtmCzVC1mA","name":"Subterfuge • Stealth","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","data":{"description":"Description here.","applicable_stats":"Ag/SD/In","development_cost":"0","ranks":0,"new_ranks":0,"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{}}
{"name":"Directed Spells","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","data":{"description":"Description here.","applicable_stats":"Ag/SD/Ag","development_cost":"0","ranks":0,"new_ranks":0,"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{"core":{"sourceId":"Item.OY1iAvwGdsBA3oi9"}},"_id":"pwCwq6GP5Kra9zKv"}
{"_id":"r9z7zKuzfWlORaes","name":"Spells • Own Realm Own Base Lists","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","data":{"description":"Description here.","applicable_stats":"","development_cost":"0","ranks":0,"new_ranks":0,"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{}}
{"_id":"th7zQOOVjKY0B1j1","name":"Weapon • 2-Handed","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","data":{"description":"Description here.","applicable_stats":"St/Ag/St","development_cost":"0","ranks":0,"new_ranks":0,"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{}}
{"name":"Crafts","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","data":{"description":"Description here.","applicable_stats":"Ag/Me/SD","development_cost":"0","ranks":0,"new_ranks":0,"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{"core":{"sourceId":"Item.EtAtBWxG9aujAxKn"}},"_id":"vcDgHmO9EhyzmTRj"}
{"_id":"wK30vs0JNMznlzWU","name":"Spells • Other Realm Closed List","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","data":{"description":"Description here.","applicable_stats":"","development_cost":"0","ranks":0,"new_ranks":0,"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{}}
{"_id":"y0bshWPNyGl1THYy","name":"Awareness • Senses","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","data":{"description":"Description here.","applicable_stats":"In/SD/In","development_cost":"0","ranks":0,"new_ranks":0,"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{}}
{"_id":"zyMFRGhlL3fuRjab","name":"Weapon • 1-H Edged","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","data":{"description":"Description here.","applicable_stats":"St/Ag/St","development_cost":"0","ranks":0,"new_ranks":0,"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"jFAyH93PxEe1ncxK":3},"flags":{}}

296
rmss/rmss.css Normal file
View File

@ -0,0 +1,296 @@
.sheet form {
display: flex;
flex-direction: column;
}
.sheet .sheet-content {
height: 100%;
display: flex;
flex-direction: column;
}
.sheet .sheet-content .editor {
height: 100%;
}
.container {
display: flex;
}
.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-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-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;
}
.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;
}
.money-column {
flex-direction: column;
}
.money-container {
flex-direction: column;
flex-shrink: 1;
}
.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;
}
.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;
}

91
rmss/rmss.js Normal file
View File

@ -0,0 +1,91 @@
// Import Configuration Object
console.log("rmss | Importing configuration javascript");
import {rmss} from "./module/config.js";
// Import document classes.
console.log("rmss | Importing document classes");
import { RMSSActor } from "./module/documents/actor.js";
import { RMSSItem } from "./module/documents/item.js";
// Import Sheets
console.log("rmss | Importing actor and item sheet");
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";
// 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-money.html",
"systems/rmss/templates/sheets/actors/parts/actor-skill-categories-grid.html",
"systems/rmss/templates/sheets/actors/parts/actor-skills-grid.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
};
// 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();
});

31
rmss/system.json Normal file
View File

@ -0,0 +1,31 @@
{
"name": "rmss",
"title": "Rolemaster Standard System",
"description": "The Rolemaster Standard System system for FoundryVTT.",
"author": "Cynicide",
"version": "0.0.1",
"minimumCoreVersion": "0.8.6",
"compatibleCoreVersion": "9",
"esmodules":[
"rmss.js"
],
"styles": ["rmss.css"],
"packs": [ {
"name": "skill_categories",
"label": "Skill Categories",
"system": "rmss",
"path": "./packs/skill_categories.db",
"type": "Item"
}
],
"languages": [
{
"lang": "en",
"name": "English",
"path": "lang/en.json"
}
],
"gridDistance": 5,
"gridUnits": "ft",
"license": "LICENSE.txt"
}

304
rmss/template.json Normal file
View File

@ -0,0 +1,304 @@
{
"Actor": {
"types": ["character", "npc"],
"templates": {
"role_traits": {
"role_traits": {
"appearance": 10,
"sex": "mysex",
"skin": "myskin",
"apparent_age": 30,
"actual_age": 35,
"height": "myheight",
"weight": "myweight",
"hair": "myhair",
"eyes": "myeyes",
"personality": "mypersonality",
"motivations": "mymotivations",
"alignment": "myalignment"
}
},
"race_stat_fixed_info": {
"race_stat_fixed_info" : {
"soul_departure_rounds": 5,
"recovery_multiplier": 7,
"body_development_progression": "research",
"pp_development_progression": "research",
"recover_hits_per_hour_resting": 6,
"recover_hits_per_sleep_cycle": 7,
"recover_pp_per_hour_resting": 8,
"recover_pp_per_sleep_cycle": 9
}
},
"armor_info": {
"armor_info": {
"armor_type": 7,
"mmp": -10,
"weight_penalty": -5,
"missile_penalty": 30,
"quickness_penalty": 40,
"quickness_bonus": 60,
"adrenal_defense": 50,
"shield_bonus": 20,
"magic": "research",
"total_db": 102
}
},
"fixed_info": {
"fixed_info": {
"race": "myrace",
"profession": "myprofession",
"training_packages": "mytrainingpackages",
"realm": "myrealm"
}
},
"resistance_rolls": {
"resistance_rolls": {
"channeling": 0,
"essence": 0,
"mentalism": 0,
"chann_ess": 0,
"chann_ment": 0,
"ess_ment": 0,
"arcane": 0,
"poison_disease": 0,
"fear": 0
}
},
"background": {
"background": {
"nationality": "mynationality",
"home_town": "myhometown",
"deity": "mydeity",
"patron": "mypatron",
"parents": "myparents",
"spouse": "myspouse",
"children": "mychildren",
"other": "myother"
}
},
"stats": {
"stats": {
"agility": {
"shortname": "Ag",
"temp": 1,
"potential": 2,
"basic_bonus": 3,
"racial_bonus": 4,
"special_bonus": 5,
"stat_bonus": 0
},
"constitution": {
"shortname": "Co",
"temp": 6,
"potential": 7,
"basic_bonus": 8,
"racial_bonus": 9,
"special_bonus": 10,
"stat_bonus": 0
},
"memory": {
"shortname": "Me",
"temp": 11,
"potential": 12,
"basic_bonus": 13,
"racial_bonus": 14,
"special_bonus": 15,
"stat_bonus": 0
},
"reasoning": {
"shortname": "Re",
"temp": 16,
"potential": 17,
"basic_bonus": 18,
"racial_bonus": 19,
"special_bonus": 20,
"stat_bonus": 0
},
"self_discipline": {
"shortname": "SD",
"temp": 21,
"potential": 22,
"basic_bonus": 23,
"racial_bonus": 24,
"special_bonus": 25,
"stat_bonus": 0
},
"empathy": {
"shortname": "Em",
"temp": 26,
"potential": 27,
"basic_bonus": 28,
"racial_bonus": 29,
"special_bonus": 30,
"stat_bonus": 0
},
"intuition": {
"shortname": "In",
"temp": 31,
"potential": 32,
"basic_bonus": 33,
"racial_bonus": 34,
"special_bonus": 35,
"stat_bonus": 0
},
"presence": {
"shortname": "Pr",
"temp": 36,
"potential": 37,
"basic_bonus": 38,
"racial_bonus": 39,
"special_bonus": 40,
"stat_bonus": 0
},
"quickness": {
"shortname": "Qu",
"temp": 41,
"potential": 42,
"basic_bonus": 43,
"racial_bonus": 44,
"special_bonus": 45,
"stat_bonus": 0
},
"strength": {
"shortname": "St",
"temp": 46,
"potential": 47,
"basic_bonus": 48,
"racial_bonus": 49,
"special_bonus": 50,
"stat_bonus": 0
}
}
},
"money": {
"mithril": 1,
"platinum": 2,
"gold": 3,
"silver": 4,
"bronze": 5,
"copper": 6,
"tin": 7,
"iron": 8
}
},
"character": {
"templates": ["background", "stats", "resistance_rolls", "armor_info", "fixed_info", "race_stat_fixed_info", "role_traits", "money"],
"attributes": {
"level": {
"value": 1
},
"hits": {
"current": 1,
"max": 1
},
"exhaustion_points": {
"current": 2,
"max": 2
},
"power_points": {
"current": 3,
"max": 3
},
"experience_points": {
"value": 0
}
}
}
},
"Item": {
"types": ["item", "skill_category", "skill", "armor", "weapon", "transport", "herb_or_poison", "spell"],
"templates": {
"base": {
"description": "Description here."
}
},
"item": {
"templates": ["base"],
"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"],
"quantity": 1,
"weight": 0,
"cost": 0,
"prod_time": 0,
"at": 0
},
"weapon": {
"templates": ["base"],
"quantity": 1,
"cost": 0,
"weight": 0,
"type" : "nothing",
"prod_time": 0,
"at": 0,
"breakage_range": "nothing",
"strength": "nothing",
"fumble_range": "nothing"
},
"herb_or_poison": {
"templates": ["base"],
"quantity": 1,
"weight": 0,
"codes": "nothing",
"form_and_prep" : "nothing",
"cost": 0,
"af": 0
},
"skill": {
"templates": ["base"],
"category" : "",
"ranks": 0,
"new_ranks": 0,
"rank_bonus": 0,
"category_bonus": 0,
"item_bonus": 0,
"special_bonus_1": 0,
"special_bonus_2": 0,
"total_bonus": 0,
"favorite": false
},
"skill_category": {
"templates": ["base"],
"applicable_stats": "St/Ag/St",
"app_stat_1": "None",
"app_stat_2": "None",
"app_stat_3": "None",
"development_cost": "0",
"ranks": 0,
"new_ranks": 0,
"rank_bonus": 0,
"stat_bonus": 0,
"prof_bonus": 0,
"special_bonus_1": 0,
"special_bonus_2": 0,
"total_bonus": 0,
"favorite": false
},
"spell": {
"spell_list": "Open Channeling",
"level": 1,
"area_of_effect": "10 x 10 x 1",
"duration": "C",
"range": 50,
"type": "E",
"description": "My New Spell!"
}
}
}

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="data.armor_info.armor_type" value="{{data.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="data.armor_info.mmp" value="{{data.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="data.armor_info.weight_penalty" value="{{data.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="data.armor_info.missile_penalty" value="{{data.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="data.armor_info.quickness_penalty" value="{{data.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="data.armor_info.quickness_bonus" value="{{data.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="data.armor_info.adrenal_defense" value="{{data.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="data.armor_info.shield_bonus" value="{{data.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="data.armor_info.magic" value="{{data.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="data.armor_info.total_db" value="{{data.armor_info.total_db}}" data-dtype="Number"/>
</div>
</section>

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="data.background.nationality" value="{{data.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="data.background.home_town" value="{{data.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="data.background.deity" value="{{data.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="data.background.patron" value="{{data.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="data.background.parents" value="{{data.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="data.background.spouse" value="{{data.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="data.background.children" value="{{data.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="data.background.other" value="{{data.background.other}}" data-dtype="String"/>
</div>
</section>

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.data.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.data.ranks}}</div></td>
<td><div class="skill-entry item-prop">{{skill.data.total_bonus}}</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="data.fixed_info.race" value="{{data.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="data.fixed_info.profession" value="{{data.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="data.fixed_info.training_packages" value="{{data.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="data.fixed_info.realm" value="{{data.fixed_info.realm}}" data-dtype="String"/>
</div>
</section>

View File

@ -0,0 +1,28 @@
<table>
<!-- LOCALIZE THE LAST STRINGS IN THIS PAGE. ALSO SKILLS AND SKILL CATEGORIES-->
<th><div class="item-name item-headeritem">{{ localize "rmss.pc_sheet_items.favorite" }}</div></th>
<th><div class="item-entry item-headeritem">{{ localize "rmss.pc_sheet_items.quantity" }}</div></th>
<th><div class="item-name item-headeritem">{{ localize "rmss.pc_sheet_items.item_name" }}</div></th>
<th><div class="item-entry item-headeritem">{{ localize "rmss.pc_sheet_items.weight" }}</div></th>
<th><div class="item-entry item-headeritem">{{ localize "rmss.pc_sheet_items.cost" }}</div></th>
<th><div class="item-controls">
<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></th>
{{#each gear as |item id|}}
<tr class="item" data-item-id="{{item._id}}">
<td><div class="item-entry item-prop"><input type="checkbox" name="data.favorite" {{checked item.data.favorite}}/></div></td>
<td><div class="item-entry item-prop">{{item.data.quantity}}</div></td>
<td><div class="item-name">
<h4>{{item.name}}</h4>
</div></td>
<td><div class="item-entry item-prop">{{item.data.weight}}</div></td>
<td><div class="item-entry item-prop">{{item.data.cost}}</div></td>
<td><div class="item-controls">
<a class="item-control item-edit" title="Edit Item"><i class="fas fa-edit"></i></a>
<a class="item-control item-delete" title="Delete Item"><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="data.money.mithril" value="{{data.money.mithril}}" data-dtype="Number"/></div>
<div class="money-name">Platinum: <input type="text" name="data.money.platinum" value="{{data.money.platinum}}" data-dtype="Number"/></div>
<div class="money-name">Gold: <input type="text" name="data.money.gold" value="{{data.money.gold}}" data-dtype="Number"/></div>
<div class="money-name">Silver: <input type="text" name="data.money.silver" value="{{data.money.silver}}" data-dtype="Number"/></div>
</div>
<div class="money-column">
<div class="money-name">Bronze: <input type="text" name="data.money.bronze" value="{{data.money.bronze}}" data-dtype="Number"/></div>
<div class="money-name">Copper:<input type="text" name="data.money.copper" value="{{data.money.copper}}" data-dtype="Number"/></div>
<div class="money-name">Tin: <input type="text" name="data.money.tin" value="{{data.money.tin}}" data-dtype="Number"/></div>
<div class="money-name">Iron: <input type="text" name="data.money.iron" value="{{data.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="data.race_stat_fixed_info.soul_departure_rounds" value="{{data.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="data.race_stat_fixed_info.recovery_multiplier" value="{{data.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="data.race_stat_fixed_info.body_development_progression" value="{{data.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="data.race_stat_fixed_info.pp_development_progression" value="{{data.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="data.race_stat_fixed_info.recover_hits_per_hour_resting" value="{{data.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="data.race_stat_fixed_info.recover_hits_per_sleep_cycle" value="{{data.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="data.race_stat_fixed_info.recover_pp_per_hour_resting" value="{{data.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="data.race_stat_fixed_info.recover_pp_per_sleep_cycle" value="{{data.race_stat_fixed_info.recover_pp_per_sleep_cycle}}" data-dtype="Number"/>
</div>
</section>

View File

@ -0,0 +1,84 @@
<section class="resistance-block">
<ol class="labels-list">
<li class="stat flexrow" >
<div class="label-name">
<h4>{{ localize "rmss.pc_sheet_resistances.channeling" }}</h4>
</div>
<div class="label-name">
<h4>{{data.resistance_rolls.channeling}}</h4>
</div>
</li>
<li class="stat flexrow" >
<div class="label-name">
<h4>{{ localize "rmss.pc_sheet_resistances.essence" }}</h4>
</div>
<div class="label-name">
<h4>{{data.resistance_rolls.essence}}</h4>
</div>
</li>
<li class="stat flexrow" >
<div class="label-name">
<h4>{{ localize "rmss.pc_sheet_resistances.mentalism" }}</h4>
</div>
<div class="label-name">
<h4>{{data.resistance_rolls.mentalism}}</h4>
</div>
</li>
<li class="stat flexrow" >
<div class="label-name">
<h4>{{ localize "rmss.pc_sheet_resistances.chann_ess" }}</h4>
</div>
<div class="label-name">
<h4>{{data.resistance_rolls.chann_ess}}</h4>
</div>
</li>
<li class="stat flexrow" >
<div class="label-name">
<h4>{{ localize "rmss.pc_sheet_resistances.chann_ment" }}</h4>
</div>
<div class="label-name">
<h4>{{data.resistance_rolls.chann_ment}}</h4>
</div>
</li>
<li class="stat flexrow" >
<div class="label-name">
<h4>{{ localize "rmss.pc_sheet_resistances.ess_ment" }}</h4>
</div>
<div class="label-name">
<h4>{{data.resistance_rolls.ess_ment}}</h4>
</div>
</li>
<li class="stat flexrow" >
<div class="label-name">
<h4>{{ localize "rmss.pc_sheet_resistances.arcane" }}</h4>
</div>
<div class="label-name">
<h4>{{data.resistance_rolls.arcane}}</h4>
</div>
</li>
<li class="stat flexrow" >
<div class="label-name">
<h4>{{ localize "rmss.pc_sheet_resistances.poison_disease" }}</h4>
</div>
<div class="label-name">
<h4>{{data.resistance_rolls.poison_disease}}</h4>
</div>
</li>
<li class="stat flexrow" >
<div class="label-name">
<h4>Fear</h4>
</div>
<div class="label-name">
<h4>{{data.resistance_rolls.fear}}</h4>
</div>
</li>
</ol>
</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="data.role_traits.appearance" value="{{data.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="data.role_traits.sex" value="{{data.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="data.role_traits.skin" value="{{data.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="data.role_traits.apparent_age" value="{{data.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="data.role_traits.actual_age" value="{{data.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="data.role_traits.height" value="{{data.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="data.role_traits.weight" value="{{data.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="data.role_traits.hair" value="{{data.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="data.role_traits.eyes" value="{{data.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="data.role_traits.personality" value="{{data.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="data.role_traits.motivations" value="{{data.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="data.role_traits.alignment" value="{{data.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.data.applicable_stats}}</div>
<div>{{skill_category.data.development_cost}}</div>
<div>{{skill_category.data.ranks}}</div>
<div>{{skill_category.data.new_ranks}}</div>
<div>{{skill_category.data.rank_bonus}}</div>
<div>{{skill_category.data.stat_bonus}}</div>
<div>{{skill_category.data.prof_bonus}}</div>
<div>{{skill_category.data.special_bonus_1}}</div>
<div>{{skill_category.data.special_bonus_2}}</div>
<div>{{skill_category.data.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,35 @@
<table>
<th><div class="table-font table-bold table-center">{{ localize "rmss.pc_sheet_skill_categories.skillcat_name" }}</div></th>
<th><div class="table-font table-bold table-center">{{ localize "rmss.pc_sheet_skill_categories.applicable_stats" }}</div></th>
<th><div class="table-font table-bold table-center">{{ localize "rmss.pc_sheet_skill_categories.dev_cost" }}</div></th>
<th><div class="table-font table-bold table-center">{{ localize "rmss.pc_sheet_skill_categories.ranks" }}</div></th>
<th><div class="table-font table-bold table-center">{{ localize "rmss.pc_sheet_skill_categories.new_ranks" }}</div></th>
<th><div class="table-font table-bold table-center">{{ localize "rmss.pc_sheet_skill_categories.rank_bonus" }}</div></th>
<th><div class="table-font table-bold table-center">{{ localize "rmss.pc_sheet_skill_categories.stat_bonus" }}</div></th>
<th><div class="table-font table-bold table-center">{{ localize "rmss.pc_sheet_skill_categories.prof_bonus" }}</div></th>
<th><div class="table-font table-bold table-center">{{ localize "rmss.pc_sheet_skill_categories.special_bonus" }}</div></th>
<th><div class="table-font table-bold table-center">{{ localize "rmss.pc_sheet_skill_categories.special_bonus" }}</div></th>
<th><div class="table-font table-bold table-center">{{ localize "rmss.pc_sheet_skill_categories.total_bonus" }}</div></th>
<th><div class="table-controls">
<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></th>
{{#each skillcat as |skill_category id|}}
<tr class="item" data-item-id="{{skill_category._id}}">
<td><div class="table-font table-bold">{{skill_category.name}}</div></td>
<td><div class="table-font">{{skill_category.data.applicable_stats}}</div></td>
<td><div class="table-font">{{skill_category.data.development_cost}}</div></td>
<td><div class="table-font">{{skill_category.data.ranks}}</div></td>
<td><div class="table-font">{{skill_category.data.new_ranks}}</div></td>
<td><div class="table-font">{{skill_category.data.rank_bonus}}</div></td>
<td><div class="table-font">{{skill_category.data.stat_bonus}}</div></td>
<td><div class="table-font">{{skill_category.data.prof_bonus}}</div></td>
<td><div class="table-font">{{skill_category.data.special_bonus_1}}</div></td>
<td><div class="table-font">{{skill_category.data.special_bonus_2}}</div></td>
<td><div class="table-font">{{skill_category.data.total_bonus}}</div></td>
<td><div class="table-controls">
<a class="item-edit" title="Edit Category"><i class="fas fa-edit"></i></a>
<a class="item-delete" title="Delete Category"><i class="fas fa-trash"></i></a>
</div></td>
</tr>
{{/each}}
</table>

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="data.favorite" {{checked skill.data.favorite}}/></div>
<div>{{skill.name}}</div>
<div>{{skill.data.ranks}}</div>
<div>{{skill.data.new_ranks}}</div>
<div>{{skill.data.rank_bonus}}</div>
<div>{{skill.data.category_bonus}}</div>
<div>{{skill.data.item_bonus}}</div>
<div>{{skill.data.special_bonus_1}}</div>
<div>{{skill.data.special_bonus_2}}</div>
<div>{{skill.data.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,35 @@
<table>
<th><div class="skill-name skill-headeritem">{{ localize "rmss.pc_sheet_skills.favorite" }}</div></th>
<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.new_ranks" }}</div></th>
<th><div class="skill-entry skill-headeritem">{{ localize "rmss.pc_sheet_skills.rank_bonus" }}</div></th>
<th><div class="skill-entry skill-headeritem">{{ localize "rmss.pc_sheet_skills.category_bonus" }}</div></th>
<th><div class="skill-entry skill-headeritem">{{ localize "rmss.pc_sheet_skills.item_bonus" }}</div></th>
<th><div class="skill-entry skill-headeritem">{{ localize "rmss.pc_sheet_skills.special_bonus" }}</div></th>
<th><div class="skill-entry skill-headeritem">{{ localize "rmss.pc_sheet_skills.special_bonus" }}</div></th>
<th><div class="skill-entry skill-headeritem">{{ localize "rmss.pc_sheet_skills.total_bonus" }}</div></th>
<th><div class="skill-controls">
<a class="skill-control item-create" title="Create Skill" data-type="skill"><i class="fas fa-plus"></i>{{ localize "rmss.pc_sheet_skills.add_skill" }}</a>
</div></th>
{{#each playerskill as |skill id|}}
<tr class="item" data-item-id="{{skill._id}}">
<td><div class="skill-entry item-prop"><input type="checkbox" name="data.favorite" {{checked skill.data.favorite}}/></div></td>
<td><div class="skill-name">
<h4>{{skill.name}}</h4>
</div></td>
<td><div class="skill-entry item-prop">{{skill.data.ranks}}</div></td>
<td><div class="skill-entry item-prop">{{skill.data.new_ranks}}</div></td>
<td><div class="skill-entry item-prop">{{skill.data.rank_bonus}}</div></td>
<td><div class="skill-entry item-prop">{{skill.data.category_bonus}}</div></td>
<td><div class="skill-entry item-prop">{{skill.data.item_bonus}}</div></td>
<td><div class="skill-entry item-prop">{{skill.data.special_bonus_1}}</div></td>
<td><div class="skill-entry item-prop">{{skill.data.special_bonus_2}}</div></td>
<td><div class="skill-entry item-prop">{{skill.data.total_bonus}}</div></td>
<td><div class="skill-controls">
<a class="skill-control item-edit" title="Edit Skill"><i class="fas fa-edit"></i></a>
<a class="skill-control item-delete" title="Delete Skill"><i class="fas fa-trash"></i></a>
</div></td>
</tr>
{{/each}}
</table>

View File

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

View File

@ -0,0 +1,108 @@
<form class="actor-sheet {{cssClass}}" autocomplete="off">
<!-- Header Section-->
<header class="sheet-header">
<div class="container">
<!-- Actor Icon Section-->
<div class="actor-icon">
<img src="{{actor.img}}" data-edit="img" title="{{actor.name}}" height="64" width="64"/>
</div>
<!-- Resource Boxes Section-->
<div class="resource-container">
<div class="resource-entry">
{{ localize "rmss.player_character.resources.hits" }}
<h4><input name="data.attributes.hits.current" type="text" value="{{data.attributes.hits.current}}"/>/<input name="data.attributes.hits.max" type="text" value="{{data.attributes.hits.max}}"/></h4>
</div>
<div class="resource-entry">
{{ localize "rmss.player_character.resources.exhaustion_points" }}
<h4><input name="data.attributes.exhaustion_points.current" type="text" value="{{data.attributes.exhaustion_points.current}}"/>/<input name="data.attributes.exhaustion_points.max" type="text" value="{{data.attributes.exhaustion_points.max}}"/></h4>
</div>
<div class="resource-entry">
{{ localize "rmss.player_character.resources.power_points" }}
<h4><input name="data.attributes.power_points.current" type="text" value="{{data.attributes.power_points.current}}"/>/<input name="data.attributes.power_points.max" type="text" value="{{data.attributes.power_points.max}}"/></h4>
</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="level" type="text" value="{{data.attributes.level.value}}"/>
</div>
<div class="header-text flexrow">
<label for="experience">{{ localize "rmss.player_character.experience" }}</label>
<input name="experience" type="text" value="{{data.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="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" }}
{{> "systems/rmss/templates/sheets/actors/parts/actor-fav-skills.html" }}
</div>
</div>
</div>
<div class="tab skill_categories" data-group="primary" data-tab="SkillCategory">
{{> "systems/rmss/templates/sheets/actors/parts/actor-skill-categories-grid.html" }}
</div>
<div class="tab skills" data-group="primary" data-tab="Skills">
{{> "systems/rmss/templates/sheets/actors/parts/actor-skills-grid.html" }}
</div>
<div class="tab equipment" data-group="primary" data-tab="Equipment">
<div class="container">
<div class="equipment-container">
{{> "systems/rmss/templates/sheets/actors/parts/actor-items.html" }}
</div>
<div class="money-container">
{{> "systems/rmss/templates/sheets/actors/parts/actor-money.html" }}
</div>
</div>
</div>
</section>
</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.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 name="data.quantity" type="text" value="{{data.quantity}}" data-dtype="Number"/>
</td>
<td>
<input name="data.weight" type="text" value="{{data.weight}}" data-dtype="Number"/>
</td>
<td>
<input name="data.cost" type="text" value="{{data.cost}}" data-dtype="String"/>
</td>
<td>
<input name="data.prod_time" type="text" value="{{data.prod_time}}" data-dtype="String"/>
</td>
<td>
<input name="data.at" type="text" value="{{data.at}}" data-dtype="Number"/>
</td>
</table>
{{localize "rmss.item.description"}}
{{editor content=data.description target="data.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="data.quantity" type="text" value="{{data.quantity}}" data-dtype="Number"/>
</td>
<td>
<input name="data.weight" type="text" value="{{data.weight}}" data-dtype="Number"/>
</td>
<td>
<input name="data.codes" type="text" value="{{data.codes}}" data-dtype="String"/>
</td>
<td>
<input name="data.form_and_prep" type="text" value="{{data.form_and_prep}}" data-dtype="String"/>
</td>
<td>
<input name="data.cost" type="text" value="{{data.cost}}" data-dtype="String"/>
</td>
<td>
<input name="data.af" type="text" value="{{data.af}}" data-dtype="Number"/>
</td>
</table>
{{localize "rmss.item.description"}}
{{editor content=data.description target="data.description" button=true owner=owner editable=editable}}
</div>
</div>
</form>

View File

@ -0,0 +1,32 @@
<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.item.weight"}}</th>
<th>{{localize "rmss.item.cost"}}</th>
<th>{{localize "rmss.item.prod_time"}}</th>
</tr>
<td>
<input name="data.quantity" type="text" value="{{data.quantity}}" data-dtype="Number"/>
</td>
<td>
<input name="data.weight" type="text" value="{{data.weight}}" data-dtype="Number"/>
</td>
<td>
<input name="data.cost" type="text" value="{{data.cost}}" data-dtype="String"/>
</td>
<td>
<input name="data.prod_time" type="text" value="{{data.prod_time}}" data-dtype="String"/>
</td>
</table>
{{localize "rmss.item.description"}}
{{editor content=data.description target="data.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="data.cost" type="text" value="{{data.cost}}" data-dtype="String"/>
</td>
<td>
<input name="data.feet_per_round" type="text" value="{{data.feet_per_round}}" data-dtype="Number"/>
</td>
<td>
<input name="data.miles_per_hour" type="text" value="{{data.miles_per_hour}}" data-dtype="Number"/>
</td>
<td>
<input name="data.maneuver" type="text" value="{{data.maneuver}}" data-dtype="Number"/>
</td>
<td>
<input name="data.height" type="text" value="{{data.height}}" data-dtype="Number"/>
</td>
<td>
<input name="data.weight" type="text" value="{{data.weight}}" data-dtype="Number"/>
</td>
<td>
<input name="data.capacity" type="text" value="{{data.capacity}}" data-dtype="Number"/>
</td>
<td>
<input name="data.offensive_bonus" type="text" value="{{data.offensive_bonus}}" data-dtype="Number"/>
</td>
</table>
{{localize "rmss.item.description"}}
{{editor content=data.description target="data.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.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 name="data.quantity" type="text" value="{{data.quantity}}" data-dtype="Number"/>
</td>
<td>
<input name="data.cost" type="text" value="{{data.cost}}" data-dtype="String"/>
</td>
<td>
<input name="data.type" type="text" value="{{data.type}}" data-dtype="String"/>
</td>
<td>
<input name="data.prod_time" type="text" value="{{data.prod_time}}" data-dtype="String"/>
</td>
<td>
<input name="data.weight" type="text" value="{{data.weight}}" data-dtype="Number"/>
</td>
<td>
<input name="data.breakage_range" type="text" value="{{data.breakage_range}}" data-dtype="String"/>
</td>
<td>
<input name="data.strength" type="text" value="{{data.strength}}" data-dtype="Number"/>
</td>
<td>
<input name="data.fumble_range" type="text" value="{{data.fumble_range}}" data-dtype="Number"/>
</td>
</table>
{{localize "rmss.item.description"}}
{{editor content=data.description target="data.description" button=true owner=owner editable=editable}}
</div>
</div>
</form>

View File

@ -0,0 +1,76 @@
<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="data.app_stat_1" class="app-stat-selector" value="{{data.app_stat_1}}" itemid="{{ item._id }}">
{{selectOptions applicable_stat_list selected=applicable_stat_1_selected }}
</select>
</div>
<div>
Applicable Stat 2
<select name="data.app_stat_2" class="app-stat-selector" value="{{data.app_stat_2}}" itemid="{{ item._id }}">
{{selectOptions applicable_stat_list selected=applicable_stat_2_selected }}
</select>
</div>
<div>
Applicable Stat 2
<select name="data.app_stat_3" class="app-stat-selector" value="{{data.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="data.applicable_stats" type="text" value="{{data.applicable_stats}}" data-dtype="String"/>
</td>
<td>
<input name="data.development_cost" type="text" value="{{data.development_cost}}" data-dtype="String"/>
</td>
<td>
<input name="data.ranks" type="text" value="{{data.ranks}}" data-dtype="Number"/>
</td>
<td>
<input name="data.new_ranks" type="text" value="{{data.new_ranks}}" data-dtype="Number"/>
</td>
<td>
<input name="data.rank_bonus" type="text" value="{{data.rank_bonus}}" data-dtype="Number"/>
</td>
<td>
<input name="data.stat_bonus" type="text" value="{{data.stat_bonus}}" data-dtype="Number"/>
</td>
<td>
<input name="data.prof_bonus" type="text" value="{{data.prof_bonus}}" data-dtype="Number"/>
</td>
<td>
<input name="data.special_bonus_1" type="text" value="{{data.special_bonus_1}}" data-dtype="Number"/>
</td>
<td>
<input name="data.special_bonus_2" type="text" value="{{data.special_bonus_2}}" data-dtype="Number"/>
</td>
<td>
<input name="data.total_bonus" type="text" value="{{data.total_bonus}}" data-dtype="Number"/>
</td>
</table>
{{localize "rmss.skill_category.description"}}
{{editor content=data.description target="data.description" button=true owner=owner editable=editable}}
</div>
</div>
</form>

View File

@ -0,0 +1,52 @@
<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.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="data.favorite" {{checked data.favorite}}/>
</td>
<td>
<input name="data.ranks" type="text" value="{{data.ranks}}" data-dtype="Number"/>
</td>
<td>
<input name="data.new_ranks" type="text" value="{{data.new_ranks}}" data-dtype="Number"/>
</td>
<td>
<input name="data.rank_bonus" type="text" value="{{data.rank_bonus}}" data-dtype="Number"/>
</td>
<td>
<input name="data.category_bonus" type="text" value="{{data.category_bonus}}" data-dtype="Number"/>
</td>
<td>
<input name="data.item_bonus" type="text" value="{{data.item_bonus}}" data-dtype="Number"/>
</td>
<td>
<input name="data.special_bonus_1" type="text" value="{{data.special_bonus_1}}" data-dtype="Number"/>
</td>
<td>
<input name="data.special_bonus_2" type="text" value="{{data.special_bonus_2}}" data-dtype="Number"/>
</td>
<td>
<input name="data.total_bonus" type="text" value="{{data.total_bonus}}" data-dtype="Number"/>
</td>
</table>
{{localize "rmss.skill.description"}}
{{editor content=data.description target="data.description" button=true owner=owner editable=editable}}
</div>
</div>
</form>

View File

@ -0,0 +1,42 @@
<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.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 name="data.spell_list" type="text" value="{{data.spell_list}}" data-dtype="String"/>
</td>
<td>
<input name="data.level" type="text" value="{{data.level}}" data-dtype="Number"/>
</td>
<td>
<input name="data.area_of_effect" type="text" value="{{data.area_of_effect}}" data-dtype="String"/>
</td>
<td>
<input name="data.duration" type="text" value="{{data.duration}}" data-dtype="String"/>
</td>
<td>
<input name="data.range" type="text" value="{{data.range}}" data-dtype="Number"/>
</td>
<td>
<input name="data.type" type="text" value="{{data.type}}" data-dtype="String"/>
</td>
</table>
{{localize "rmss.spell.description"}}
{{editor content=data.description target="data.description" button=true owner=owner editable=editable}}
</div>
</div>
</form>