Merge pull request #5 from Cynicide/new-ranks-early-inventory
Add New Ranks chceckboxes
This commit is contained in:
commit
5f29bf1787
@ -1,4 +1,4 @@
|
||||
This tutorial is based on the video tutorials by Cédric Hauteville you can watch them here: https://www.youtube.com/playlist?list=PLFV9z59nkHDccUbRXVt623UdloPTclIrz parts of it were also lifted from the Foundry VTT Boilerplate system by XXX.
|
||||
This system is based on the video tutorials by Cédric Hauteville you can watch them here: https://www.youtube.com/playlist?list=PLFV9z59nkHDccUbRXVt623UdloPTclIrz parts of it were also lifted from the Foundry VTT Boilerplate system by XXX.
|
||||
|
||||
Icons have been sourced from https://game-icons.net
|
||||
|
||||
|
17
rmss/TODO
17
rmss/TODO
@ -1,27 +1,28 @@
|
||||
Small
|
||||
|
||||
1. DONE - Add Relationship between skills and skill categories
|
||||
2. Remove Tables and replace with CSS Grid
|
||||
3. Fix unaligned CSS
|
||||
2. DONE - Remove Tables from Player Sheet and replace with CSS Grid
|
||||
3. DONE - Fix unaligned CSS
|
||||
4. Prevent Duplication on Drag and Drop for Skills and Skill Categories, possibly spells too.
|
||||
DONE - Overriden _onDropItem on Player Sheet
|
||||
DONE - Skill Categories cannot be renamed if they are owned.
|
||||
DONE - Skills and Skill Categories are now seperate checks for Drag and Drop as some share names
|
||||
Spells ?
|
||||
5. Fix New Ranks Clickboxes - https://discord.com/channels/170995199584108546/670336275496042502/1018530650980102195
|
||||
5. DONE - Fix New Ranks Clickboxes - https://discord.com/channels/170995199584108546/670336275496042502/1018530650980102195
|
||||
https://github.com/megastruktur/foundryvtt-blades-in-the-dark/blob/master/templates/actor-sheet.html#L97
|
||||
https://github.com/megastruktur/foundryvtt-blades-in-the-dark/blob/00bed1cb1d222eab3ece62960941c54f3c272aac/module/blades.js#L69
|
||||
6. DONE - Fix Favorites Clickboxes on Actor Page
|
||||
DONE - Better Icon
|
||||
DONE - Make Clickable
|
||||
7. Create Default Values for Character sheet
|
||||
8. Make a Localization Pass for Missed Text
|
||||
|
||||
Medium
|
||||
|
||||
1. Inventory sorted by types
|
||||
i. Drag and drop should increment an item if it already exists.
|
||||
ii. Equipables
|
||||
iii. Favorites
|
||||
1. DONE Inventory sorted by types - Maybe Seperate Sections for now
|
||||
DONE (Will not Do - Not needed) - i. Drag and drop should increment an item if it already exists.
|
||||
DONE ii. Equipables
|
||||
DONE (Will not Do - Not Needed)iii. Favorites
|
||||
2. Creature Sheet
|
||||
3. Finish Character Sheet
|
||||
Inventory
|
||||
@ -29,7 +30,7 @@ Medium
|
||||
Status Record (Possibly large)
|
||||
XP
|
||||
4. Button to add all Skill Categories
|
||||
5. Revisit Skill and Skill Category Progression (Pg 33)
|
||||
5. Revisit Skill and Skill Category Progression (Pg 33, 69)
|
||||
6. DONE - Add occupational, everyman, and restricted skill categories
|
||||
|
||||
Large
|
||||
|
@ -130,6 +130,7 @@
|
||||
"add_skillcat": "Add Skill Category"
|
||||
},
|
||||
"pc_sheet_items": {
|
||||
"equipped": "Equipped",
|
||||
"favorite": "Favorite",
|
||||
"quantity": "Quantity",
|
||||
"item_name": "Item Name",
|
||||
@ -163,7 +164,8 @@
|
||||
"quantity": "Quantity",
|
||||
"weight": "Weight",
|
||||
"cost": "Cost",
|
||||
"prod_time": "Production Time"
|
||||
"prod_time": "Production Time",
|
||||
"equipped": "Equipped"
|
||||
},
|
||||
"armor": {
|
||||
"at": "AT",
|
||||
@ -178,7 +180,8 @@
|
||||
"weight": "Weight",
|
||||
"breakage_range": "B#s",
|
||||
"strength": "Str",
|
||||
"fumble_range": "Fumble"
|
||||
"fumble_range": "Fumble",
|
||||
"equipped": "Equipped"
|
||||
},
|
||||
"herb_or_poison": {
|
||||
"codes": "Codes",
|
||||
|
44
rmss/less/actor-sheet/actor-sheet-armor.less
Normal file
44
rmss/less/actor-sheet/actor-sheet-armor.less
Normal file
@ -0,0 +1,44 @@
|
||||
.armor-grid-container {
|
||||
display: grid;
|
||||
grid-template-columns: [name] 30% [equipped] 12% [at] 12% [quantity] 12% [weight] 12% [cost] 12% [controls] 10%;
|
||||
}
|
||||
|
||||
.armor-grid-container > div {
|
||||
font-family: Signika, sans-serif;
|
||||
font-size: 12px;
|
||||
text-align: center;
|
||||
border-bottom: 1px solid;
|
||||
padding-top: 3px;
|
||||
padding-bottom: 3px;
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
flex-direction: row;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.armor-grid-container > div:nth-child(14n+1),
|
||||
.armor-grid-container > div:nth-child(14n+2),
|
||||
.armor-grid-container > div:nth-child(14n+3),
|
||||
.armor-grid-container > div:nth-child(14n+4),
|
||||
.armor-grid-container > div:nth-child(14n+5),
|
||||
.armor-grid-container > div:nth-child(14n+6),
|
||||
.armor-grid-container > div:nth-child(14n+7)
|
||||
{
|
||||
font-family: Signika, sans-serif;
|
||||
font-size: 12px;
|
||||
text-align: center;
|
||||
border-bottom: 1px solid;
|
||||
padding-top: 3px;
|
||||
padding-bottom: 3px;
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
flex-direction: row;
|
||||
justify-content: center;
|
||||
background-image: linear-gradient(rgba(0, 0, 0, 0.1) 0 0);
|
||||
}
|
||||
|
||||
.armor-grid-heading {
|
||||
font-weight: bold;
|
||||
border-bottom: 1px solid;
|
||||
background-image: linear-gradient(rgba(0, 0, 0, 0.1) 0 0);
|
||||
}
|
44
rmss/less/actor-sheet/actor-sheet-herbs.less
Normal file
44
rmss/less/actor-sheet/actor-sheet-herbs.less
Normal file
@ -0,0 +1,44 @@
|
||||
.herbs-grid-container {
|
||||
display: grid;
|
||||
grid-template-columns: [name] 30% [quantity] 11% [codes] 12% [af] 12% [weight] 12% [cost] 11% [controls] 12%;
|
||||
}
|
||||
|
||||
.herbs-grid-container > div {
|
||||
font-family: Signika, sans-serif;
|
||||
font-size: 12px;
|
||||
text-align: center;
|
||||
border-bottom: 1px solid;
|
||||
padding-top: 3px;
|
||||
padding-bottom: 3px;
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
flex-direction: row;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.herbs-grid-container > div:nth-child(14n+1),
|
||||
.herbs-grid-container > div:nth-child(14n+2),
|
||||
.herbs-grid-container > div:nth-child(14n+3),
|
||||
.herbs-grid-container > div:nth-child(14n+4),
|
||||
.herbs-grid-container > div:nth-child(14n+5),
|
||||
.herbs-grid-container > div:nth-child(14n+6),
|
||||
.herbs-grid-container > div:nth-child(14n+7)
|
||||
{
|
||||
font-family: Signika, sans-serif;
|
||||
font-size: 12px;
|
||||
text-align: center;
|
||||
border-bottom: 1px solid;
|
||||
padding-top: 3px;
|
||||
padding-bottom: 3px;
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
flex-direction: row;
|
||||
justify-content: center;
|
||||
background-image: linear-gradient(rgba(0, 0, 0, 0.1) 0 0);
|
||||
}
|
||||
|
||||
.herbs-grid-heading {
|
||||
font-weight: bold;
|
||||
border-bottom: 1px solid;
|
||||
background-image: linear-gradient(rgba(0, 0, 0, 0.1) 0 0);
|
||||
}
|
42
rmss/less/actor-sheet/actor-sheet-items.less
Normal file
42
rmss/less/actor-sheet/actor-sheet-items.less
Normal file
@ -0,0 +1,42 @@
|
||||
.items-grid-container {
|
||||
display: grid;
|
||||
grid-template-columns: [name] 30% [quantity] 17% [weight] 17% [cost] 18% [controls] 18%;
|
||||
}
|
||||
|
||||
.items-grid-container > div {
|
||||
font-family: Signika, sans-serif;
|
||||
font-size: 12px;
|
||||
text-align: center;
|
||||
border-bottom: 1px solid;
|
||||
padding-top: 3px;
|
||||
padding-bottom: 3px;
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
flex-direction: row;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.items-grid-container > div:nth-child(10n+1),
|
||||
.items-grid-container > div:nth-child(10n+2),
|
||||
.items-grid-container > div:nth-child(10n+3),
|
||||
.items-grid-container > div:nth-child(10n+4),
|
||||
.items-grid-container > div:nth-child(10n+5)
|
||||
{
|
||||
font-family: Signika, sans-serif;
|
||||
font-size: 12px;
|
||||
text-align: center;
|
||||
border-bottom: 1px solid;
|
||||
padding-top: 3px;
|
||||
padding-bottom: 3px;
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
flex-direction: row;
|
||||
justify-content: center;
|
||||
background-image: linear-gradient(rgba(0, 0, 0, 0.1) 0 0);
|
||||
}
|
||||
|
||||
.items-grid-heading {
|
||||
font-weight: bold;
|
||||
border-bottom: 1px solid;
|
||||
background-image: linear-gradient(rgba(0, 0, 0, 0.1) 0 0);
|
||||
}
|
9
rmss/less/actor-sheet/actor-sheet-money.less
Normal file
9
rmss/less/actor-sheet/actor-sheet-money.less
Normal file
@ -0,0 +1,9 @@
|
||||
.money-column {
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.money-container {
|
||||
flex-direction: column;
|
||||
flex-shrink: 1;
|
||||
padding-left: 10px;
|
||||
}
|
49
rmss/less/actor-sheet/actor-sheet-skillcat.less
Normal file
49
rmss/less/actor-sheet/actor-sheet-skillcat.less
Normal file
@ -0,0 +1,49 @@
|
||||
.skillcat-grid-container {
|
||||
display: grid;
|
||||
grid-template-columns: [skill-category-name] 10% [applicable-stats] 10% [dev-cost] 8% [num-ranks] 8% [new-ranks] 8% [rank-bonus] 8% [stat-bonus] 8% [prof-bonus] 8% [special-bonus-1] 8% [special-bonus-2] 8% [total-bonus] 8% [controls] 8%;
|
||||
}
|
||||
|
||||
.skillcat-grid-container > div {
|
||||
font-family: Signika, sans-serif;
|
||||
font-size: 12px;
|
||||
text-align: center;
|
||||
border-bottom: 1px solid;
|
||||
padding-top: 3px;
|
||||
padding-bottom: 3px;
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.skillcat-grid-container > div:nth-child(24n+1),
|
||||
.skillcat-grid-container > div:nth-child(24n+2),
|
||||
.skillcat-grid-container > div:nth-child(24n+3),
|
||||
.skillcat-grid-container > div:nth-child(24n+4),
|
||||
.skillcat-grid-container > div:nth-child(24n+5),
|
||||
.skillcat-grid-container > div:nth-child(24n+6),
|
||||
.skillcat-grid-container > div:nth-child(24n+7),
|
||||
.skillcat-grid-container > div:nth-child(24n+8),
|
||||
.skillcat-grid-container > div:nth-child(24n+9),
|
||||
.skillcat-grid-container > div:nth-child(24n+10),
|
||||
.skillcat-grid-container > div:nth-child(24n+11),
|
||||
.skillcat-grid-container > div:nth-child(24n+12)
|
||||
{
|
||||
font-family: Signika, sans-serif;
|
||||
font-size: 12px;
|
||||
text-align: center;
|
||||
border-bottom: 1px solid;
|
||||
padding-top: 3px;
|
||||
padding-bottom: 3px;
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
background-image: linear-gradient(rgba(0, 0, 0, 0.1) 0 0);
|
||||
}
|
||||
|
||||
.skillcat-grid-heading {
|
||||
font-weight: bold;
|
||||
border-bottom: 1px solid;
|
||||
background-image: linear-gradient(rgba(0, 0, 0, 0.1) 0 0);
|
||||
}
|
48
rmss/less/actor-sheet/actor-sheet-skills.less
Normal file
48
rmss/less/actor-sheet/actor-sheet-skills.less
Normal file
@ -0,0 +1,48 @@
|
||||
.skills-grid-container {
|
||||
display: grid;
|
||||
grid-template-columns: [favorite] 9% [skill-name] 11% [num-ranks] 9% [new-ranks] 9% [rank-bonus] 9% [category-bonus] 9% [item-bonus] 9% [special-bonus-1] 9% [special-bonus-2] 9% [total-bonus] 9% [controls] 8%;
|
||||
}
|
||||
|
||||
.skills-grid-container > div {
|
||||
font-family: Signika, sans-serif;
|
||||
font-size: 12px;
|
||||
text-align: center;
|
||||
border-bottom: 1px solid;
|
||||
padding-top: 3px;
|
||||
padding-bottom: 3px;
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.skills-grid-container > div:nth-child(22n+1),
|
||||
.skills-grid-container > div:nth-child(22n+2),
|
||||
.skills-grid-container > div:nth-child(22n+3),
|
||||
.skills-grid-container > div:nth-child(22n+4),
|
||||
.skills-grid-container > div:nth-child(22n+5),
|
||||
.skills-grid-container > div:nth-child(22n+6),
|
||||
.skills-grid-container > div:nth-child(22n+7),
|
||||
.skills-grid-container > div:nth-child(22n+8),
|
||||
.skills-grid-container > div:nth-child(22n+9),
|
||||
.skills-grid-container > div:nth-child(22n+10),
|
||||
.skills-grid-container > div:nth-child(22n+11)
|
||||
{
|
||||
font-family: Signika, sans-serif;
|
||||
font-size: 12px;
|
||||
text-align: center;
|
||||
border-bottom: 1px solid;
|
||||
padding-top: 3px;
|
||||
padding-bottom: 3px;
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
background-image: linear-gradient(rgba(0, 0, 0, 0.1) 0 0);
|
||||
}
|
||||
|
||||
.skills-grid-heading {
|
||||
font-weight: bold;
|
||||
border-bottom: 1px solid;
|
||||
background-image: linear-gradient(rgba(0, 0, 0, 0.1) 0 0);
|
||||
}
|
46
rmss/less/actor-sheet/actor-sheet-weapons.less
Normal file
46
rmss/less/actor-sheet/actor-sheet-weapons.less
Normal file
@ -0,0 +1,46 @@
|
||||
.weapons-grid-container {
|
||||
display: grid;
|
||||
grid-template-columns: [name] 30% [equipped] 8% [breakage_range] 9% [fumble_range] 9% [strength] 9% [quantity] 9% [weight] 9% [cost] 9% [controls] 8%;
|
||||
}
|
||||
|
||||
.weapons-grid-container > div {
|
||||
font-family: Signika, sans-serif;
|
||||
font-size: 12px;
|
||||
text-align: center;
|
||||
border-bottom: 1px solid;
|
||||
padding-top: 3px;
|
||||
padding-bottom: 3px;
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
flex-direction: row;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.weapons-grid-container > div:nth-child(18n+1),
|
||||
.weapons-grid-container > div:nth-child(18n+2),
|
||||
.weapons-grid-container > div:nth-child(18n+3),
|
||||
.weapons-grid-container > div:nth-child(18n+4),
|
||||
.weapons-grid-container > div:nth-child(18n+5),
|
||||
.weapons-grid-container > div:nth-child(18n+6),
|
||||
.weapons-grid-container > div:nth-child(18n+7),
|
||||
.weapons-grid-container > div:nth-child(18n+8),
|
||||
.weapons-grid-container > div:nth-child(18n+9)
|
||||
{
|
||||
font-family: Signika, sans-serif;
|
||||
font-size: 12px;
|
||||
text-align: center;
|
||||
border-bottom: 1px solid;
|
||||
padding-top: 3px;
|
||||
padding-bottom: 3px;
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
flex-direction: row;
|
||||
justify-content: center;
|
||||
background-image: linear-gradient(rgba(0, 0, 0, 0.1) 0 0);
|
||||
}
|
||||
|
||||
.weapons-grid-heading {
|
||||
font-weight: bold;
|
||||
border-bottom: 1px solid;
|
||||
background-image: linear-gradient(rgba(0, 0, 0, 0.1) 0 0);
|
||||
}
|
157
rmss/less/actor-sheet/actor-sheet.less
Normal file
157
rmss/less/actor-sheet/actor-sheet.less
Normal file
@ -0,0 +1,157 @@
|
||||
// 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;
|
||||
align-items: center;
|
||||
padding: 1px;
|
||||
}
|
||||
|
||||
// Resource Elements in Headers
|
||||
|
||||
.resource-container {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
flex-grow: 3;
|
||||
text-align: -webkit-center;
|
||||
}
|
||||
|
||||
.resource-container > * {
|
||||
flex: 1 1 0;
|
||||
}
|
||||
|
||||
.resource-entry {
|
||||
outline: 1px solid; /* use instead of border */
|
||||
margin-top: 1px;
|
||||
margin-left: 1px;
|
||||
padding: 5px;
|
||||
}
|
||||
|
||||
.resource-entry input{
|
||||
width: 50px;
|
||||
border: none;
|
||||
}
|
||||
|
||||
.stat-container {
|
||||
flex-direction: column;
|
||||
flex-shrink: 1;
|
||||
}
|
||||
|
||||
.stat-row {
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.equipment-container {
|
||||
flex-direction: column;
|
||||
flex-grow: 1;
|
||||
}
|
||||
|
||||
.stat-block {
|
||||
outline: 1px solid; /* use instead of border */
|
||||
margin-top: 1px;
|
||||
margin-left: 1px;
|
||||
padding: 5px;
|
||||
}
|
||||
|
||||
.stat-name, .money-name {
|
||||
width: 75px;
|
||||
border: none;
|
||||
font-family: Signika, sans-serif;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.stat-name input {
|
||||
border: none;
|
||||
}
|
||||
|
||||
.stat-header {
|
||||
font-family: Signika, sans-serif;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
// Fixed Info CSS
|
||||
|
||||
.fixed-info-container {
|
||||
flex-grow: 3;
|
||||
flex-direction: row;
|
||||
font-family: Signika, sans-serif;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.fixed-info-section {
|
||||
outline: 1px solid; /* use instead of border */
|
||||
margin-top: 1px;
|
||||
margin-left: 1px;
|
||||
padding: 5px;
|
||||
}
|
||||
|
||||
.armor-block {
|
||||
outline: 1px solid; /* use instead of border */
|
||||
margin-top: 1px;
|
||||
margin-left: 1px;
|
||||
padding: 5px;
|
||||
}
|
||||
|
||||
.race-stat-fixed-info-block {
|
||||
outline: 1px solid; /* use instead of border */
|
||||
margin-top: 1px;
|
||||
margin-left: 1px;
|
||||
padding: 5px;
|
||||
}
|
||||
|
||||
.role-traits-block {
|
||||
outline: 1px solid; /* use instead of border */
|
||||
margin-top: 1px;
|
||||
margin-left: 1px;
|
||||
padding: 5px;
|
||||
}
|
||||
|
||||
.background-info-block {
|
||||
outline: 1px solid; /* use instead of border */
|
||||
margin-top: 1px;
|
||||
margin-left: 1px;
|
||||
padding: 5px;
|
||||
}
|
||||
|
||||
.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;
|
||||
}
|
@ -1,6 +1,21 @@
|
||||
|
||||
// Actor Sheet
|
||||
@import "./actor-sheet/actor-sheet-skillcat.less";
|
||||
@import "./actor-sheet/actor-sheet.less";
|
||||
@import "./actor-sheet/actor-sheet-skills.less";
|
||||
@import "./actor-sheet/actor-sheet-money.less";
|
||||
@import "./actor-sheet/actor-sheet-items.less";
|
||||
@import "./actor-sheet/actor-sheet-weapons.less";
|
||||
@import "./actor-sheet/actor-sheet-armor.less";
|
||||
@import "./actor-sheet/actor-sheet-herbs.less";
|
||||
|
||||
|
||||
|
||||
//Skill Category Sheet
|
||||
|
||||
@import "./skillcat-sheet/skillcat-sheet.less";
|
||||
@import "./skillcat-sheet/applicable-stats-grid.less";
|
||||
|
||||
// Generics
|
||||
@import "./item-sheet.less";
|
||||
@import "./actor-sheet.less";
|
||||
@import "./skillcat-sheet.less";
|
||||
@import "./money-sheet.less";
|
||||
@import "./table.less";
|
||||
@import "./grid.less";
|
||||
//@import "./table.less";
|
||||
|
19
rmss/less/skillcat-sheet/applicable-stats-grid.less
Normal file
19
rmss/less/skillcat-sheet/applicable-stats-grid.less
Normal file
@ -0,0 +1,19 @@
|
||||
|
||||
|
||||
.applicable-stats-grid-container {
|
||||
display: grid;
|
||||
grid-template-columns: [app-stat-1] 33% [app-stat-2] 33% [app-stat-3] 33%;
|
||||
}
|
||||
|
||||
.applicable-stats-grid-container > div {
|
||||
font-family: Signika, sans-serif;
|
||||
font-size: 12px;
|
||||
text-align: center;
|
||||
border-bottom: 1px solid;
|
||||
padding-top: 3px;
|
||||
padding-bottom: 3px;
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
}
|
23
rmss/less/skillcat-sheet/skillcat-sheet.less
Normal file
23
rmss/less/skillcat-sheet/skillcat-sheet.less
Normal 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;
|
||||
}
|
@ -53,8 +53,8 @@ rmss.stats = {
|
||||
};
|
||||
|
||||
rmss.skill_designations = {
|
||||
none: "None",
|
||||
occupational: "Occupational",
|
||||
everyman: "Everyman",
|
||||
restricted: "Restricted"
|
||||
None: "None",
|
||||
Occupational: "Occupational",
|
||||
Everyman: "Everyman",
|
||||
Restricted: "Restricted"
|
||||
};
|
||||
|
@ -146,26 +146,17 @@ export class RMSSActor extends Actor {
|
||||
// For each skill category return an object in this format.
|
||||
// {{ _id: "skill category name"}}
|
||||
// This is the format that the select helper on the skill sheet needs
|
||||
getOwnedSkillCategories() {
|
||||
var ownedSkillCategories = {None: "None"};
|
||||
console.log("rmss | actor.js | Getting owned skill categories for: " + this.name);
|
||||
|
||||
getOwnedItemsByType(item_type) {
|
||||
var ownedItems = {None: "None"};
|
||||
console.log("rmss | actor.js | Getting owned " + item_type + " for: " + this.name);
|
||||
for (const item of this.items) {
|
||||
if (item.type === "skill_category") {
|
||||
ownedSkillCategories[item._id] = item.name;
|
||||
if (item.type === item_type) {
|
||||
ownedItems[item._id] = item.name;
|
||||
}
|
||||
}
|
||||
return(ownedSkillCategories);
|
||||
return(ownedItems);
|
||||
}
|
||||
|
||||
getOwnedSkills() {
|
||||
var ownedSkills = {None: "None"};
|
||||
console.log("rmss | actor.js | Getting owned skills for: " + this.name);
|
||||
for (const item of this.items) {
|
||||
if (item.type === "skill") {
|
||||
ownedSkills[item._id] = item.name;
|
||||
}
|
||||
}
|
||||
return(ownedSkills);
|
||||
}
|
||||
|
||||
}
|
@ -45,9 +45,7 @@ export default class RMSSPlayerSheet extends ActorSheet {
|
||||
if (itemData.type === "skill_category"){
|
||||
|
||||
// Get the already owned Items from the actor and push into an array
|
||||
const owneditems = this.object.getOwnedSkillCategories();
|
||||
|
||||
console.log(owneditems);
|
||||
const owneditems = this.object.getOwnedItemsByType("skill_category");
|
||||
|
||||
var ownedskillcatlist = Object.values(owneditems);
|
||||
|
||||
@ -58,9 +56,7 @@ export default class RMSSPlayerSheet extends ActorSheet {
|
||||
}
|
||||
} else if ( itemData.type === "skill") {
|
||||
// Get the already owned Items from the actor and push into an array
|
||||
const owneditems = this.object.getOwnedSkills();
|
||||
|
||||
console.log(owneditems);
|
||||
const owneditems = this.object.getOwnedItemsByType("skill");
|
||||
|
||||
var ownedskilllist = Object.values(owneditems);
|
||||
|
||||
@ -84,14 +80,23 @@ export default class RMSSPlayerSheet extends ActorSheet {
|
||||
const gear = [];
|
||||
const playerskill= [];
|
||||
const skillcat = [];
|
||||
const weapons = [];
|
||||
const equipables = [];
|
||||
const herbs = [];
|
||||
|
||||
// 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') {
|
||||
if (i.type === 'item') {
|
||||
gear.push(i);
|
||||
}
|
||||
else if (i.type === 'weapon') {
|
||||
weapons.push(i);
|
||||
}
|
||||
else if (i.type === 'herb_or_poison') {
|
||||
herbs.push(i);
|
||||
}
|
||||
// Append to skill categories.
|
||||
else if (i.type === 'skill_category') {
|
||||
skillcat.push(i);
|
||||
@ -99,9 +104,13 @@ export default class RMSSPlayerSheet extends ActorSheet {
|
||||
// Append to playerskill
|
||||
else if (i.type === 'skill') {
|
||||
playerskill.push(i);
|
||||
}
|
||||
else if (i.type === 'armor') {
|
||||
equipables.push(i);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Sort Skill/Skillcat Arrays
|
||||
skillcat.sort(function (a, b){
|
||||
if (a.name < b.name) {
|
||||
@ -128,13 +137,14 @@ export default class RMSSPlayerSheet extends ActorSheet {
|
||||
context.gear = gear;
|
||||
context.skillcat = skillcat;
|
||||
context.playerskill = playerskill;
|
||||
context.weapons = weapons;
|
||||
context.equipables = equipables;
|
||||
context.herbs = herbs;
|
||||
}
|
||||
|
||||
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"));
|
||||
@ -151,8 +161,8 @@ export default class RMSSPlayerSheet extends ActorSheet {
|
||||
|
||||
// Delete Item
|
||||
html.find('.item-delete').click(ev => {
|
||||
console.log(ev.currentTarget.getAttribute("data-item-id"));
|
||||
const item = this.actor.items.get(ev.currentTarget.getAttribute("data-item-id"));
|
||||
//console.log(ev.currentTarget.getAttribute("data-item-id"));
|
||||
item.delete();
|
||||
});
|
||||
|
||||
@ -170,6 +180,52 @@ export default class RMSSPlayerSheet extends ActorSheet {
|
||||
}
|
||||
console.log("After change: " + item.system.favorite);
|
||||
});
|
||||
|
||||
// Equip/Unequip Item
|
||||
html.find('.equippable').click(ev => {
|
||||
const item = this.actor.items.get(ev.currentTarget.getAttribute("data-item-id"));
|
||||
console.log(item);
|
||||
console.log("Before change: " + item.system.equipped);
|
||||
if (item.system.equipped === true) {
|
||||
console.log("Setting False");
|
||||
item.update({system: {"equipped": false}});
|
||||
} else {
|
||||
console.log("Setting True");
|
||||
item.update({system: {"equipped": true}});
|
||||
}
|
||||
console.log("After change: " + item.system.equipped);
|
||||
});
|
||||
|
||||
// Change New Ranks value when clicked in player sheet. From 0-3.
|
||||
html.find('.skill-newrank').click(ev => {
|
||||
const item = this.actor.items.get(ev.currentTarget.getAttribute("data-item-id"));
|
||||
|
||||
console.log("Firing in the Player Sheet");
|
||||
console.log(ev.currentTarget.getAttribute("value"));
|
||||
console.log(ev.currentTarget.getAttribute("data-item-id"));
|
||||
|
||||
switch(ev.currentTarget.getAttribute("value")) {
|
||||
case "0":
|
||||
console.log("Skill NewRanks is 0 setting to 1");
|
||||
item.update({system: {new_ranks:{ "value": 1 }}});
|
||||
break;
|
||||
|
||||
case "1":
|
||||
console.log("Skill NewRanks is 1 setting to 2");
|
||||
item.update({system: {new_ranks:{ "value": 2 }}});
|
||||
break;
|
||||
|
||||
case "2":
|
||||
console.log("Skill NewRanks is 2 setting to 3");
|
||||
item.update({system: {new_ranks:{ "value": 3 }}});
|
||||
break;
|
||||
|
||||
case "3":
|
||||
console.log("Skill NewRanks is 3 setting to 0");
|
||||
item.update({system: {new_ranks:{ "value": 0 }}});
|
||||
break;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
async _onItemCreate(event) {
|
||||
|
@ -21,17 +21,16 @@ export default class RMSSSkillCategorySheet extends ItemSheet {
|
||||
const context = await super.getData();
|
||||
|
||||
// Get a list of stats that can be used as applicable stats
|
||||
var applicable_stat_list = this.prepareApplicableStatValues(CONFIG);
|
||||
var applicableStatList = this.prepareApplicableStatNames(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");
|
||||
var firstApplicableStat = this.prepareApplicableSelectedStat("app_stat_1");
|
||||
var secondApplicableStat = this.prepareApplicableSelectedStat("app_stat_2");
|
||||
var thirdApplicableStat = this.prepareApplicableSelectedStat("app_stat_3");
|
||||
|
||||
// Build and apply the display string for Applicable Stats
|
||||
var applicable_stat_text = this.buildApplicableStatsText(applicable_stat_1_selected, applicable_stat_2_selected, applicable_stat_3_selected);
|
||||
//context.item.system['applicable_stats'] = applicable_stat_text;
|
||||
context.item.system.applicable_stats = applicable_stat_text;
|
||||
var applicableStatText = this.buildApplicableStatsText(firstApplicableStat, secondApplicableStat, thirdApplicableStat);
|
||||
context.item.system.applicable_stats = applicableStatText;
|
||||
|
||||
var enrichedDescription = await TextEditor.enrichHTML(this.item.system.description, {async: true});
|
||||
|
||||
@ -41,55 +40,57 @@ export default class RMSSSkillCategorySheet extends ItemSheet {
|
||||
item: context.item,
|
||||
system: context.item.system,
|
||||
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,
|
||||
applicable_stat_list: applicableStatList,
|
||||
applicable_stat_1_selected: firstApplicableStat,
|
||||
applicable_stat_2_selected: secondApplicableStat,
|
||||
applicable_stat_3_selected: thirdApplicableStat,
|
||||
enrichedDescription: enrichedDescription
|
||||
};
|
||||
return sheetData;
|
||||
}
|
||||
|
||||
async _setApplicableStat(item, ev) {
|
||||
// Build a JSON Object from the select tag value and select name (item data attribute key)
|
||||
var update_key = ev.currentTarget.getAttribute("name");
|
||||
var update_data = ev.target.value;
|
||||
// Build a JSON Object from the selected tag value and selected name (item data attribute key)
|
||||
var updateKey = ev.currentTarget.getAttribute("name");
|
||||
var updateData = ev.target.value;
|
||||
|
||||
// Update Item Data
|
||||
await item.update({[update_key]: update_data});
|
||||
await item.update({[updateKey]: updateData});
|
||||
}
|
||||
|
||||
prepareApplicableStatValues(CONFIG) {
|
||||
var applicable_stat_list = {None: "None"};
|
||||
|
||||
// Get a list of stat shortnames from the config
|
||||
for (const item in CONFIG.rmss.stats) {
|
||||
applicable_stat_list[CONFIG.rmss.stats[item].shortname] = CONFIG.rmss.stats[item].shortname;
|
||||
// Each Skill Category can have up to three Applicable Stats that apply to it. We need to get a list of
|
||||
// the Stat Shortnames from Config so the user can select which stats are applicable to this Skill Category
|
||||
prepareApplicableStatNames(config) {
|
||||
var applicableStatList = {None: "None"};
|
||||
for (const item in config.rmss.stats) {
|
||||
applicableStatList[config.rmss.stats[item].shortname] = config.rmss.stats[item].shortname;
|
||||
}
|
||||
return applicable_stat_list;
|
||||
return applicableStatList;
|
||||
}
|
||||
|
||||
// Determine which Stat is selected for applicable stats
|
||||
prepareApplicableSelectedStat(app_stat) {
|
||||
var applicable_stat_selected = "";
|
||||
applicable_stat_selected = this.item.system[app_stat];
|
||||
return applicable_stat_selected;
|
||||
// Get the values for the currently selected Applicable Stat so we can display it on the Skill Category Sheet
|
||||
// If nothing is selected return an empty string.
|
||||
prepareApplicableSelectedStat(appStat) {
|
||||
var applicableStatSelected = "";
|
||||
applicableStatSelected = this.item.system[appStat];
|
||||
return applicableStatSelected;
|
||||
}
|
||||
|
||||
// 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") {
|
||||
// The character sheet has an information field that displays the applicable stats in the following format
|
||||
// St/Ag/St. This method checks the current applicable stats and builds that field so
|
||||
// it can be displayed to the user.
|
||||
buildApplicableStatsText(firstAppStat, secondAppStat, thirdAppStat) {
|
||||
if (firstAppStat === "None") {
|
||||
return("None");
|
||||
}
|
||||
else if (app_stat_1 !== "None" && app_stat_2 === "None") {
|
||||
return(app_stat_1);
|
||||
else if (firstAppStat !== "None" && secondAppStat === "None") {
|
||||
return(firstAppStat);
|
||||
}
|
||||
else if (app_stat_1 !== "None" && app_stat_2 !== "None" && app_stat_3 === "None" ) {
|
||||
return(app_stat_1 + "/" + app_stat_2 );
|
||||
else if (firstAppStat !== "None" && secondAppStat !== "None" && thirdAppStat === "None" ) {
|
||||
return(firstAppStat + "/" + secondAppStat );
|
||||
}
|
||||
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 if (firstAppStat !== "None" && secondAppStat !== "None" && thirdAppStat !== "None" ) {
|
||||
return(firstAppStat + "/" + secondAppStat + "/" + thirdAppStat );
|
||||
}
|
||||
else {
|
||||
return("None");
|
||||
@ -103,7 +104,8 @@ export default class RMSSSkillCategorySheet extends ItemSheet {
|
||||
// Everything below here is only needed if the sheet is editable
|
||||
if (!this.isEditable) return;
|
||||
|
||||
// Update Applicable Stats for Skill Categories
|
||||
// Every time the user selects one of the Applicable Stat dropdowns
|
||||
// fire an event to change the value in the Skill Category
|
||||
html.find('.stat-selector').change(ev => {
|
||||
this._setApplicableStat(this.item, ev);
|
||||
});
|
||||
|
@ -22,16 +22,11 @@ export default class RMSSSkillSheet extends ItemSheet {
|
||||
|
||||
var enrichedDescription = await TextEditor.enrichHTML(this.item.system.description, {async: true});
|
||||
|
||||
// Get a list of stats that can be used as applicable stats
|
||||
var designations = this.getSkillDesignations(CONFIG);
|
||||
|
||||
// Get a list of the parent item's skill categories for the dropdown
|
||||
var owned_skillcats = this.prepareSkillCategoryValues();
|
||||
var ownedSkillCategories = this.prepareSkillCategoryValues();
|
||||
|
||||
// Figure out if a valid Skill Category is already selected
|
||||
var selected_skillcat = this.prepareSelectedSkillCategory(owned_skillcats, this.object.system.category);
|
||||
|
||||
//this.prepareSelectedSkillCategoryBonus(selected_skillcat);
|
||||
var selectedSkillCategory = this.prepareSelectedSkillCategory(ownedSkillCategories, this.object.system.category);
|
||||
|
||||
let sheetData = {
|
||||
owner: this.item.isOwner,
|
||||
@ -39,53 +34,68 @@ export default class RMSSSkillSheet extends ItemSheet {
|
||||
item: baseData.item,
|
||||
system: baseData.item.system,
|
||||
config: CONFIG.rmss,
|
||||
owned_skillcats: owned_skillcats,
|
||||
owned_skillcats: ownedSkillCategories,
|
||||
enrichedDescription: enrichedDescription,
|
||||
selected_skillcat: selected_skillcat,
|
||||
designations: designations
|
||||
selected_skillcat: selectedSkillCategory,
|
||||
designations: CONFIG.rmss.skill_designations
|
||||
};
|
||||
|
||||
return sheetData;
|
||||
}
|
||||
|
||||
activateListeners(html) {
|
||||
super.activateListeners(html);
|
||||
|
||||
// Catch the event when the user clicks one of the New Ranks Checkboxes.
|
||||
// It will increment by one or wrap back to zero on a value of three
|
||||
html.find('.skillsheet-newrank').click(ev => {
|
||||
switch(ev.currentTarget.getAttribute("value")) {
|
||||
case "0":
|
||||
this.object.update({system: {new_ranks:{ "value": 1 }}});
|
||||
break;
|
||||
case "1":
|
||||
this.object.update({system: {new_ranks:{ "value": 2 }}});
|
||||
break;
|
||||
case "2":
|
||||
this.object.update({system: {new_ranks:{ "value": 3 }}});
|
||||
break;
|
||||
case "3":
|
||||
this.object.update({system: {new_ranks:{ "value": 0 }}});
|
||||
break;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Skills are related to Skill Categories so we need something to allow the user to choose that relationship
|
||||
// If this Skill is owned then we will return a list of Skill Categories and allow them to choose
|
||||
// Otherwise we'll just return 'Skill has no owner'
|
||||
prepareSkillCategoryValues() {
|
||||
// If there is no player owning this Skill then we cannot assign a category.
|
||||
var skillcat_list = {None: "Skill Has No Owner", };
|
||||
var skillNoOwner = {None: "Skill Has No Owner", };
|
||||
|
||||
if (this.item.isEmbedded === null) {
|
||||
return(skillcat_list);
|
||||
return(skillNoOwner);
|
||||
}
|
||||
else
|
||||
{
|
||||
const skillcats = this.item.parent.getOwnedSkillCategories();
|
||||
return(skillcats);
|
||||
const skillCategories = this.item.parent.getOwnedItemsByType("skill_category");
|
||||
return(skillCategories);
|
||||
}
|
||||
}
|
||||
|
||||
getSkillDesignations(CONFIG) {
|
||||
var designations = {};
|
||||
|
||||
// Get a list of designations from the config
|
||||
for (const item in CONFIG.rmss.skill_designations) {
|
||||
designations[CONFIG.rmss.skill_designations[item]] = CONFIG.rmss.skill_designations[item];
|
||||
}
|
||||
return designations;
|
||||
}
|
||||
|
||||
// Determine which Stat is selected and test that it is in the current list of categories.
|
||||
prepareSelectedSkillCategory(ownedskillcats, selected_category) {
|
||||
|
||||
// Start By setting the owned category to None, if nothing happens this will be the default
|
||||
var default_selected_category = "None";
|
||||
|
||||
// Get a list of keys from the currently owned skill categories and compare to the current value
|
||||
if (Object.keys(ownedskillcats).includes(selected_category)) {
|
||||
return(selected_category);
|
||||
// Determine which Skill Category is selected and test that it is in the current list of categories.
|
||||
// If it isn't set it to None.
|
||||
prepareSelectedSkillCategory(ownedSkillCategories, selectedSkillCategory) {
|
||||
var defaultSelectedCategory = "None";
|
||||
if (Object.keys(ownedSkillCategories).includes(selectedSkillCategory)) {
|
||||
return(selectedSkillCategory);
|
||||
} else {
|
||||
return(default_selected_category);
|
||||
return(defaultSelectedCategory);
|
||||
}
|
||||
}
|
||||
|
||||
// Populate the Skill Category Bonus field on the Skill Sheet.
|
||||
// Iterate through the owned skill categories and if one of them matches the item id of currently select skill category
|
||||
// then set the Skill Category Bonus field to the Total Bonus field of the Skill Category
|
||||
prepareSelectedSkillCategoryBonus(selected_skillcat) {
|
||||
if (this.item.isEmbedded === null) {
|
||||
console.log("Skill has no owner");
|
||||
|
360
rmss/rmss.css
360
rmss/rmss.css
@ -1,14 +1,47 @@
|
||||
.sheet form {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
.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%;
|
||||
}
|
||||
.sheet .sheet-content {
|
||||
height: 100%;
|
||||
.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;
|
||||
}
|
||||
.sheet .sheet-content .editor {
|
||||
height: 100%;
|
||||
.skillcat-grid-container > div:nth-child(24n+1),
|
||||
.skillcat-grid-container > div:nth-child(24n+2),
|
||||
.skillcat-grid-container > div:nth-child(24n+3),
|
||||
.skillcat-grid-container > div:nth-child(24n+4),
|
||||
.skillcat-grid-container > div:nth-child(24n+5),
|
||||
.skillcat-grid-container > div:nth-child(24n+6),
|
||||
.skillcat-grid-container > div:nth-child(24n+7),
|
||||
.skillcat-grid-container > div:nth-child(24n+8),
|
||||
.skillcat-grid-container > div:nth-child(24n+9),
|
||||
.skillcat-grid-container > div:nth-child(24n+10),
|
||||
.skillcat-grid-container > div:nth-child(24n+11),
|
||||
.skillcat-grid-container > div:nth-child(24n+12) {
|
||||
font-family: Signika, sans-serif;
|
||||
font-size: 12px;
|
||||
text-align: center;
|
||||
border-bottom: 1px solid;
|
||||
padding-top: 3px;
|
||||
padding-bottom: 3px;
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
background-image: linear-gradient(rgba(0, 0, 0, 0.1) 0 0);
|
||||
}
|
||||
.skillcat-grid-heading {
|
||||
font-weight: bold;
|
||||
border-bottom: 1px solid;
|
||||
background-image: linear-gradient(rgba(0, 0, 0, 0.1) 0 0);
|
||||
}
|
||||
.container {
|
||||
display: flex;
|
||||
@ -26,8 +59,8 @@
|
||||
}
|
||||
.header-text {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
padding: 1px;
|
||||
}
|
||||
.resource-container {
|
||||
display: flex;
|
||||
@ -53,6 +86,9 @@
|
||||
flex-direction: column;
|
||||
flex-shrink: 1;
|
||||
}
|
||||
.stat-row {
|
||||
align-items: center;
|
||||
}
|
||||
.equipment-container {
|
||||
flex-direction: column;
|
||||
flex-grow: 1;
|
||||
@ -138,102 +174,6 @@
|
||||
.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%;
|
||||
@ -278,9 +218,205 @@
|
||||
border-bottom: 1px solid;
|
||||
background-image: linear-gradient(rgba(0, 0, 0, 0.1) 0 0);
|
||||
}
|
||||
.money-column {
|
||||
flex-direction: column;
|
||||
}
|
||||
.money-container {
|
||||
flex-direction: column;
|
||||
flex-shrink: 1;
|
||||
padding-left: 10px;
|
||||
}
|
||||
.items-grid-container {
|
||||
display: grid;
|
||||
grid-template-columns: [name] 30% [quantity] 17% [weight] 17% [cost] 18% [controls] 18%;
|
||||
}
|
||||
.items-grid-container > div {
|
||||
font-family: Signika, sans-serif;
|
||||
font-size: 12px;
|
||||
text-align: center;
|
||||
border-bottom: 1px solid;
|
||||
padding-top: 3px;
|
||||
padding-bottom: 3px;
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
flex-direction: row;
|
||||
justify-content: center;
|
||||
}
|
||||
.items-grid-container > div:nth-child(10n+1),
|
||||
.items-grid-container > div:nth-child(10n+2),
|
||||
.items-grid-container > div:nth-child(10n+3),
|
||||
.items-grid-container > div:nth-child(10n+4),
|
||||
.items-grid-container > div:nth-child(10n+5) {
|
||||
font-family: Signika, sans-serif;
|
||||
font-size: 12px;
|
||||
text-align: center;
|
||||
border-bottom: 1px solid;
|
||||
padding-top: 3px;
|
||||
padding-bottom: 3px;
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
flex-direction: row;
|
||||
justify-content: center;
|
||||
background-image: linear-gradient(rgba(0, 0, 0, 0.1) 0 0);
|
||||
}
|
||||
.items-grid-heading {
|
||||
font-weight: bold;
|
||||
border-bottom: 1px solid;
|
||||
background-image: linear-gradient(rgba(0, 0, 0, 0.1) 0 0);
|
||||
}
|
||||
.weapons-grid-container {
|
||||
display: grid;
|
||||
grid-template-columns: [name] 30% [equipped] 8% [breakage_range] 9% [fumble_range] 9% [strength] 9% [quantity] 9% [weight] 9% [cost] 9% [controls] 8%;
|
||||
}
|
||||
.weapons-grid-container > div {
|
||||
font-family: Signika, sans-serif;
|
||||
font-size: 12px;
|
||||
text-align: center;
|
||||
border-bottom: 1px solid;
|
||||
padding-top: 3px;
|
||||
padding-bottom: 3px;
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
flex-direction: row;
|
||||
justify-content: center;
|
||||
}
|
||||
.weapons-grid-container > div:nth-child(18n+1),
|
||||
.weapons-grid-container > div:nth-child(18n+2),
|
||||
.weapons-grid-container > div:nth-child(18n+3),
|
||||
.weapons-grid-container > div:nth-child(18n+4),
|
||||
.weapons-grid-container > div:nth-child(18n+5),
|
||||
.weapons-grid-container > div:nth-child(18n+6),
|
||||
.weapons-grid-container > div:nth-child(18n+7),
|
||||
.weapons-grid-container > div:nth-child(18n+8),
|
||||
.weapons-grid-container > div:nth-child(18n+9) {
|
||||
font-family: Signika, sans-serif;
|
||||
font-size: 12px;
|
||||
text-align: center;
|
||||
border-bottom: 1px solid;
|
||||
padding-top: 3px;
|
||||
padding-bottom: 3px;
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
flex-direction: row;
|
||||
justify-content: center;
|
||||
background-image: linear-gradient(rgba(0, 0, 0, 0.1) 0 0);
|
||||
}
|
||||
.weapons-grid-heading {
|
||||
font-weight: bold;
|
||||
border-bottom: 1px solid;
|
||||
background-image: linear-gradient(rgba(0, 0, 0, 0.1) 0 0);
|
||||
}
|
||||
.armor-grid-container {
|
||||
display: grid;
|
||||
grid-template-columns: [name] 30% [equipped] 12% [at] 12% [quantity] 12% [weight] 12% [cost] 12% [controls] 10%;
|
||||
}
|
||||
.armor-grid-container > div {
|
||||
font-family: Signika, sans-serif;
|
||||
font-size: 12px;
|
||||
text-align: center;
|
||||
border-bottom: 1px solid;
|
||||
padding-top: 3px;
|
||||
padding-bottom: 3px;
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
flex-direction: row;
|
||||
justify-content: center;
|
||||
}
|
||||
.armor-grid-container > div:nth-child(14n+1),
|
||||
.armor-grid-container > div:nth-child(14n+2),
|
||||
.armor-grid-container > div:nth-child(14n+3),
|
||||
.armor-grid-container > div:nth-child(14n+4),
|
||||
.armor-grid-container > div:nth-child(14n+5),
|
||||
.armor-grid-container > div:nth-child(14n+6),
|
||||
.armor-grid-container > div:nth-child(14n+7) {
|
||||
font-family: Signika, sans-serif;
|
||||
font-size: 12px;
|
||||
text-align: center;
|
||||
border-bottom: 1px solid;
|
||||
padding-top: 3px;
|
||||
padding-bottom: 3px;
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
flex-direction: row;
|
||||
justify-content: center;
|
||||
background-image: linear-gradient(rgba(0, 0, 0, 0.1) 0 0);
|
||||
}
|
||||
.armor-grid-heading {
|
||||
font-weight: bold;
|
||||
border-bottom: 1px solid;
|
||||
background-image: linear-gradient(rgba(0, 0, 0, 0.1) 0 0);
|
||||
}
|
||||
.herbs-grid-container {
|
||||
display: grid;
|
||||
grid-template-columns: [name] 30% [quantity] 11% [codes] 12% [af] 12% [weight] 12% [cost] 11% [controls] 12%;
|
||||
}
|
||||
.herbs-grid-container > div {
|
||||
font-family: Signika, sans-serif;
|
||||
font-size: 12px;
|
||||
text-align: center;
|
||||
border-bottom: 1px solid;
|
||||
padding-top: 3px;
|
||||
padding-bottom: 3px;
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
flex-direction: row;
|
||||
justify-content: center;
|
||||
}
|
||||
.herbs-grid-container > div:nth-child(14n+1),
|
||||
.herbs-grid-container > div:nth-child(14n+2),
|
||||
.herbs-grid-container > div:nth-child(14n+3),
|
||||
.herbs-grid-container > div:nth-child(14n+4),
|
||||
.herbs-grid-container > div:nth-child(14n+5),
|
||||
.herbs-grid-container > div:nth-child(14n+6),
|
||||
.herbs-grid-container > div:nth-child(14n+7) {
|
||||
font-family: Signika, sans-serif;
|
||||
font-size: 12px;
|
||||
text-align: center;
|
||||
border-bottom: 1px solid;
|
||||
padding-top: 3px;
|
||||
padding-bottom: 3px;
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
flex-direction: row;
|
||||
justify-content: center;
|
||||
background-image: linear-gradient(rgba(0, 0, 0, 0.1) 0 0);
|
||||
}
|
||||
.herbs-grid-heading {
|
||||
font-weight: bold;
|
||||
border-bottom: 1px solid;
|
||||
background-image: linear-gradient(rgba(0, 0, 0, 0.1) 0 0);
|
||||
}
|
||||
.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;
|
||||
}
|
||||
.applicable-stats-grid-container {
|
||||
display: grid;
|
||||
grid-template-columns: [app-stat-1] 33% [app-stat-2] 33% [dapp-stat-3] 33%;
|
||||
grid-template-columns: [app-stat-1] 33% [app-stat-2] 33% [app-stat-3] 33%;
|
||||
}
|
||||
.applicable-stats-grid-container > div {
|
||||
font-family: Signika, sans-serif;
|
||||
@ -294,3 +430,15 @@
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
}
|
||||
.sheet form {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
.sheet .sheet-content {
|
||||
height: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
.sheet .sheet-content .editor {
|
||||
height: 100%;
|
||||
}
|
||||
|
138
rmss/rmss.js
138
rmss/rmss.js
@ -22,70 +22,86 @@ 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.html",
|
||||
"systems/rmss/templates/sheets/actors/parts/actor-skills.html"
|
||||
];
|
||||
return loadTemplates(templatePaths);
|
||||
const templatePaths = [
|
||||
"systems/rmss/templates/sheets/actors/parts/actor-stats.html",
|
||||
"systems/rmss/templates/sheets/actors/parts/actor-fixed-info.html",
|
||||
"systems/rmss/templates/sheets/actors/parts/actor-armor-info.html",
|
||||
"systems/rmss/templates/sheets/actors/parts/actor-resistance.html",
|
||||
"systems/rmss/templates/sheets/actors/parts/actor-race-stat-fixed-info.html",
|
||||
"systems/rmss/templates/sheets/actors/parts/actor-role-traits.html",
|
||||
"systems/rmss/templates/sheets/actors/parts/actor-background-info.html",
|
||||
"systems/rmss/templates/sheets/actors/parts/actor-skill-categories.html",
|
||||
"systems/rmss/templates/sheets/actors/parts/actor-skills.html",
|
||||
"systems/rmss/templates/sheets/actors/parts/actor-fav-skills.html",
|
||||
"systems/rmss/templates/sheets/actors/parts/actor-items.html",
|
||||
"systems/rmss/templates/sheets/actors/parts/actor-weapons.html",
|
||||
"systems/rmss/templates/sheets/actors/parts/actor-money.html",
|
||||
"systems/rmss/templates/sheets/actors/parts/actor-skill-categories.html",
|
||||
"systems/rmss/templates/sheets/actors/parts/actor-skills.html",
|
||||
"systems/rmss/templates/sheets/actors/parts/actor-armor.html",
|
||||
"systems/rmss/templates/sheets/actors/parts/actor-herbs.html"
|
||||
];
|
||||
return loadTemplates(templatePaths);
|
||||
}
|
||||
|
||||
// Hook the init function and set up our system
|
||||
Hooks.once("init", function () {
|
||||
console.log("rmss | Initialising Rolemaster Standard System");
|
||||
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();
|
||||
|
||||
// Handlebars Helpers
|
||||
|
||||
// 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();
|
||||
Handlebars.registerHelper('switch', function(value, options) {
|
||||
this.switch_value = value;
|
||||
return options.fn(this);
|
||||
});
|
||||
|
||||
Handlebars.registerHelper('case', function(value, options) {
|
||||
if (value == this.switch_value) {
|
||||
return options.fn(this);
|
||||
}
|
||||
});
|
||||
});
|
@ -171,15 +171,17 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"money": {
|
||||
"mithril": 1,
|
||||
"platinum": 2,
|
||||
"gold": 3,
|
||||
"silver": 4,
|
||||
"bronze": 5,
|
||||
"copper": 6,
|
||||
"tin": 7,
|
||||
"iron": 8
|
||||
"money": {
|
||||
"money": {
|
||||
"mithril": 1,
|
||||
"platinum": 2,
|
||||
"gold": 3,
|
||||
"silver": 4,
|
||||
"bronze": 5,
|
||||
"copper": 6,
|
||||
"tin": 7,
|
||||
"iron": 8
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
@ -234,6 +236,7 @@
|
||||
},
|
||||
"armor": {
|
||||
"templates": ["base"],
|
||||
"equipped": false,
|
||||
"quantity": 1,
|
||||
"weight": 0,
|
||||
"cost": 0,
|
||||
@ -242,6 +245,7 @@
|
||||
},
|
||||
"weapon": {
|
||||
"templates": ["base"],
|
||||
"equipped": false,
|
||||
"quantity": 1,
|
||||
"cost": 0,
|
||||
"weight": 0,
|
||||
@ -265,7 +269,11 @@
|
||||
"templates": ["base"],
|
||||
"category" : "",
|
||||
"ranks": 0,
|
||||
"new_ranks": 0,
|
||||
"new_ranks": {
|
||||
"value": [0],
|
||||
"max": 3,
|
||||
"max_default": 3
|
||||
},
|
||||
"rank_bonus": -15,
|
||||
"category_bonus": 0,
|
||||
"item_bonus": 0,
|
||||
@ -283,7 +291,11 @@
|
||||
"app_stat_3": "None",
|
||||
"development_cost": "0",
|
||||
"ranks": 0,
|
||||
"new_ranks": 0,
|
||||
"new_ranks": {
|
||||
"value": 0,
|
||||
"max": 3,
|
||||
"max_default": 3
|
||||
},
|
||||
"rank_bonus": -15,
|
||||
"stat_bonus": 0,
|
||||
"prof_bonus": 0,
|
||||
|
29
rmss/templates/sheets/actors/parts/actor-armor.html
Normal file
29
rmss/templates/sheets/actors/parts/actor-armor.html
Normal file
@ -0,0 +1,29 @@
|
||||
<div class="armor-grid-container">
|
||||
<!-- LOCALIZE THE LAST STRINGS IN THIS PAGE. ALSO SKILLS AND SKILL CATEGORIES-->
|
||||
|
||||
<div class="armor-grid-heading">{{ localize "rmss.pc_sheet_items.item_name" }}</div>
|
||||
<div class="armor-grid-heading">{{ localize "rmss.pc_sheet_items.equipped" }}</div>
|
||||
<div class="armor-grid-heading">{{ localize "rmss.armor.at" }}</div>
|
||||
<div class="armor-grid-heading">{{ localize "rmss.pc_sheet_items.quantity" }}</div>
|
||||
<div class="armor-grid-heading">{{ localize "rmss.pc_sheet_items.weight" }}</div>
|
||||
<div class="armor-grid-heading">{{ localize "rmss.pc_sheet_items.cost" }}</div>
|
||||
<div class="armor-grid-heading">
|
||||
<a class="item-control item-create" title="Create Item" data-type="armor"><i class="fas fa-plus"></i>{{ localize "rmss.pc_sheet_items.add_item" }}</a>
|
||||
</div>
|
||||
{{#each equipables as |equipable id|}}
|
||||
<div>{{equipable.name}}</div>
|
||||
{{#if equipable.system.equipped}}
|
||||
<div><a class="equippable" data-item-id="{{equipable._id}}"><i class="fa-regular fa-square-check"></i></a></div>
|
||||
{{else}}
|
||||
<div><a class="equippable" data-item-id="{{equipable._id}}"><i class="fa-regular fa-square"></i></a></div>
|
||||
{{/if}}
|
||||
<div>{{equipable.system.at}}</div>
|
||||
<div>{{equipable.system.quantity}}</div>
|
||||
<div>{{equipable.system.weight}}</div>
|
||||
<div>{{equipable.system.cost}}</div>
|
||||
<div class="item-controls">
|
||||
<a class="item-control item-edit" title="Edit Item" data-item-id="{{equipable._id}}"><i class="fas fa-edit"></i></a>
|
||||
<a class="item-control item-delete" title="Delete Item" data-item-id="{{equipable._id}}"><i class="fas fa-trash"></i></a>
|
||||
</div>
|
||||
{{/each}}
|
||||
</div>
|
25
rmss/templates/sheets/actors/parts/actor-herbs.html
Normal file
25
rmss/templates/sheets/actors/parts/actor-herbs.html
Normal file
@ -0,0 +1,25 @@
|
||||
<div class="herbs-grid-container">
|
||||
|
||||
<!-- LOCALIZE THE LAST STRINGS IN THIS PAGE. ALSO SKILLS AND SKILL CATEGORIES-->
|
||||
<div class="herbs-grid-heading">{{ localize "rmss.pc_sheet_items.item_name" }}</div>
|
||||
<div class="herbs-grid-heading">{{ localize "rmss.pc_sheet_items.quantity" }}</div>
|
||||
<div class="herbs-grid-heading">{{ localize "rmss.herb_or_poison.codes" }}</div>
|
||||
<div class="herbs-grid-heading">{{ localize "rmss.herb_or_poison.af" }}</div>
|
||||
<div class="herbs-grid-heading">{{ localize "rmss.pc_sheet_items.weight" }}</div>
|
||||
<div class="herbs-grid-heading">{{ localize "rmss.pc_sheet_items.cost" }}</div>
|
||||
<div class="herbs-grid-heading">
|
||||
<a class="item-control item-create" title="Create Item" data-type="herb_or_poison"><i class="fas fa-plus"></i>{{ localize "rmss.pc_sheet_items.add_item" }}</a>
|
||||
</div>
|
||||
{{#each herbs as |herb id|}}
|
||||
<div>{{herb.name}}</div>
|
||||
<div>{{herb.system.quantity}}</div>
|
||||
<div>{{herb.system.codes}}</div>
|
||||
<div>{{herb.system.af}}</div>
|
||||
<div>{{herb.system.weight}}</div>
|
||||
<div>{{herb.system.cost}}</div>
|
||||
<div>
|
||||
<a class="item-control item-edit" title="Edit Item" data-item-id="{{herb._id}}"><i class="fas fa-edit"></i></a>
|
||||
<a class="item-control item-delete" title="Delete Item" data-item-id="{{herb._id}}"><i class="fas fa-trash"></i></a>
|
||||
</div>
|
||||
{{/each}}
|
||||
</div>
|
@ -1,28 +1,21 @@
|
||||
<table>
|
||||
<div class="items-grid-container">
|
||||
|
||||
<!-- 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">
|
||||
<div class="items-grid-heading">{{ localize "rmss.pc_sheet_items.item_name" }}</div>
|
||||
<div class="items-grid-heading">{{ localize "rmss.pc_sheet_items.quantity" }}</div>
|
||||
<div class="items-grid-heading">{{ localize "rmss.pc_sheet_items.weight" }}</div>
|
||||
<div class="items-grid-heading">{{ localize "rmss.pc_sheet_items.cost" }}</div>
|
||||
<div class="items-grid-heading">
|
||||
<a class="item-control item-create" title="Create Item" data-type="item"><i class="fas fa-plus"></i>{{ localize "rmss.pc_sheet_items.add_item" }}</a>
|
||||
</div></th>
|
||||
</div>
|
||||
{{#each gear as |item id|}}
|
||||
<tr class="item" data-item-id="{{item._id}}">
|
||||
<td><div class="item-entry item-prop"><input type="checkbox" name="system.favorite" {{checked item.system.favorite}}/></div></td>
|
||||
<td><div class="item-entry item-prop">{{item.system.quantity}}</div></td>
|
||||
<td><div class="item-name">
|
||||
<h4>{{item.name}}</h4>
|
||||
</div></td>
|
||||
<td><div class="item-entry item-prop">{{item.system.weight}}</div></td>
|
||||
<td><div class="item-entry item-prop">{{item.system.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>
|
||||
<div>{{item.name}}</div>
|
||||
<div>{{item.system.quantity}}</div>
|
||||
<div>{{item.system.weight}}</div>
|
||||
<div>{{item.system.cost}}</div>
|
||||
<div>
|
||||
<a class="item-control item-edit" title="Edit Item" data-item-id="{{item._id}}"><i class="fas fa-edit"></i></a>
|
||||
<a class="item-control item-delete" title="Delete Item" data-item-id="{{item._id}}"><i class="fas fa-trash"></i></a>
|
||||
</div>
|
||||
{{/each}}
|
||||
</table>
|
||||
</div>
|
@ -21,7 +21,15 @@
|
||||
<!--<div><input type="checkbox" name="system.favorite" {{checked skill.system.favorite}}/></div>-->
|
||||
<div>{{skill.name}}</div>
|
||||
<div>{{skill.system.ranks}}</div>
|
||||
<div>{{skill.system.new_ranks}}</div>
|
||||
<div>
|
||||
{{#switch skill.system.new_ranks.value}}
|
||||
{{#case 0}} <a class="skill-newrank" data-item-id="{{skill._id}}" value="{{skill.system.new_ranks.value}}"><i class="fa-regular fa-square"></i> <i class="fa-regular fa-square"></i> <i class="fa-regular fa-square"></i></a> {{/case}}
|
||||
{{#case 1}} <a class="skill-newrank" data-item-id="{{skill._id}}" value="{{skill.system.new_ranks.value}}"><i class="fa-regular fa-square-check"></i> <i class="fa-regular fa-square"></i> <i class="fa-regular fa-square"></i></a> {{/case}}
|
||||
{{#case 2}} <a class="skill-newrank" data-item-id="{{skill._id}}" value="{{skill.system.new_ranks.value}}"><i class="fa-regular fa-square-check"></i> <i class="fa-regular fa-square-check"></i> <i class="fa-regular fa-square"></i></a> {{/case}}
|
||||
{{#case 3}} <a class="skill-newrank" data-item-id="{{skill._id}}" value="{{skill.system.new_ranks.value}}"><i class="fa-regular fa-square-check"></i> <i class="fa-regular fa-square-check"></i> <i class="fa-regular fa-square-check"></i></a> {{/case}}
|
||||
{{/switch}}
|
||||
|
||||
</div>
|
||||
<div>{{skill.system.rank_bonus}}</div>
|
||||
<div>{{skill.system.category_bonus}}</div>
|
||||
<div>{{skill.system.item_bonus}}</div>
|
||||
|
@ -1,6 +1,6 @@
|
||||
<section class="stat-block">
|
||||
<ol>
|
||||
<li class="flexrow">
|
||||
<li class="flexrow stat-row">
|
||||
<div class="stat-header">{{ localize "rmss.player_character.attribute_headers.stat" }}</div>
|
||||
<div class="stat-header">{{ localize "rmss.player_character.attribute_headers.temp" }}</div>
|
||||
<div class="stat-header">{{ localize "rmss.player_character.attribute_headers.pot" }}</div>
|
||||
@ -10,7 +10,7 @@
|
||||
<div class="stat-header">{{ localize "rmss.player_character.attribute_headers.stat_bonus" }}</div>
|
||||
</li>
|
||||
|
||||
<li class="flexrow">
|
||||
<li class="flexrow stat-row">
|
||||
<div class="stat-name">
|
||||
{{ localize "rmss.player_character.attribute.agility" }}
|
||||
</div>
|
||||
@ -40,7 +40,7 @@
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li class="flexrow">
|
||||
<li class="flexrow stat-row">
|
||||
<div class="stat-name">
|
||||
{{ localize "rmss.player_character.attribute.constitution" }}
|
||||
</div>
|
||||
@ -70,7 +70,7 @@
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li class="flexrow">
|
||||
<li class="flexrow stat-row">
|
||||
<div class="stat-name">
|
||||
{{ localize "rmss.player_character.attribute.memory" }}
|
||||
</div>
|
||||
@ -100,7 +100,7 @@
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li class="flexrow">
|
||||
<li class="flexrow stat-row">
|
||||
<div class="stat-name">
|
||||
{{ localize "rmss.player_character.attribute.reasoning" }}
|
||||
</div>
|
||||
@ -130,7 +130,7 @@
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li class="flexrow">
|
||||
<li class="flexrow stat-row">
|
||||
<div class="stat-name">
|
||||
{{ localize "rmss.player_character.attribute.self_discipline" }}
|
||||
</div>
|
||||
@ -160,7 +160,7 @@
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li class="flexrow">
|
||||
<li class="flexrow stat-row">
|
||||
<div class="stat-name">
|
||||
{{ localize "rmss.player_character.attribute.empathy" }}
|
||||
</div>
|
||||
@ -190,7 +190,7 @@
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li class="flexrow">
|
||||
<li class="flexrow stat-row">
|
||||
<div class="stat-name">
|
||||
{{ localize "rmss.player_character.attribute.intuition" }}
|
||||
</div>
|
||||
@ -220,7 +220,7 @@
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li class="flexrow">
|
||||
<li class="flexrow stat-row">
|
||||
<div class="stat-name">
|
||||
{{ localize "rmss.player_character.attribute.presence" }}
|
||||
</div>
|
||||
@ -250,7 +250,7 @@
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li class="flexrow">
|
||||
<li class="flexrow stat-row">
|
||||
<div class="stat-name">
|
||||
{{ localize "rmss.player_character.attribute.quickness" }}
|
||||
</div>
|
||||
@ -280,7 +280,7 @@
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li class="flexrow">
|
||||
<li class="flexrow stat-row">
|
||||
<div class="stat-name">
|
||||
{{ localize "rmss.player_character.attribute.strength" }}
|
||||
</div>
|
||||
|
33
rmss/templates/sheets/actors/parts/actor-weapons.html
Normal file
33
rmss/templates/sheets/actors/parts/actor-weapons.html
Normal file
@ -0,0 +1,33 @@
|
||||
<div class="weapons-grid-container">
|
||||
<!-- LOCALIZE THE LAST STRINGS IN THIS PAGE. ALSO SKILLS AND SKILL CATEGORIES-->
|
||||
|
||||
<div class="weapons-grid-heading">{{ localize "rmss.pc_sheet_items.item_name" }}</div>
|
||||
<div class="weapons-grid-heading">{{ localize "rmss.pc_sheet_items.equipped" }}</div>
|
||||
<div class="weapons-grid-heading">{{ localize "rmss.weapon.breakage_range" }}</div>
|
||||
<div class="weapons-grid-heading">{{ localize "rmss.weapon.fumble_range" }}</div>
|
||||
<div class="weapons-grid-heading">{{ localize "rmss.weapon.strength" }}</div>
|
||||
<div class="weapons-grid-heading">{{ localize "rmss.pc_sheet_items.quantity" }}</div>
|
||||
<div class="weapons-grid-heading">{{ localize "rmss.pc_sheet_items.weight" }}</div>
|
||||
<div class="weapons-grid-heading">{{ localize "rmss.pc_sheet_items.cost" }}</div>
|
||||
<div class="weapons-grid-heading">
|
||||
<a class="item-control item-create" title="Create Item" data-type="weapon"><i class="fas fa-plus"></i>{{ localize "rmss.pc_sheet_items.add_item" }}</a>
|
||||
</div>
|
||||
{{#each weapons as |weapon id|}}
|
||||
<div>{{weapon.name}}</div>
|
||||
{{#if weapon.system.equipped}}
|
||||
<div><a class="equippable" data-item-id="{{weapon._id}}"><i class="fa-regular fa-square-check"></i></a></div>
|
||||
{{else}}
|
||||
<div><a class="equippable" data-item-id="{{weapon._id}}"><i class="fa-regular fa-square"></i></a></div>
|
||||
{{/if}}
|
||||
<div>{{weapon.system.breakage_range}}</div>
|
||||
<div>{{weapon.system.fumble_range}}</div>
|
||||
<div>{{weapon.system.strength}}</div>
|
||||
<div>{{weapon.system.quantity}}</div>
|
||||
<div>{{weapon.system.weight}}</div>
|
||||
<div>{{weapon.system.cost}}</div>
|
||||
<div class="item-controls">
|
||||
<a class="item-control item-edit" title="Edit Item" data-item-id="{{weapon._id}}"><i class="fas fa-edit"></i></a>
|
||||
<a class="item-control item-delete" title="Delete Item" data-item-id="{{weapon._id}}"><i class="fas fa-trash"></i></a>
|
||||
</div>
|
||||
{{/each}}
|
||||
</div>
|
@ -96,9 +96,18 @@
|
||||
<div class="tab equipment" data-group="primary" data-tab="Equipment">
|
||||
<div class="container">
|
||||
<div class="equipment-container">
|
||||
<h2>Items</h2>
|
||||
{{> "systems/rmss/templates/sheets/actors/parts/actor-items.html" }}
|
||||
<h2>Weapons</h2>
|
||||
{{> "systems/rmss/templates/sheets/actors/parts/actor-weapons.html" }}
|
||||
<h2>Armor and Equipables</h2>
|
||||
{{> "systems/rmss/templates/sheets/actors/parts/actor-armor.html" }}
|
||||
<h2>Herbs and Poisons</h2>
|
||||
{{> "systems/rmss/templates/sheets/actors/parts/actor-herbs.html" }}
|
||||
</div>
|
||||
|
||||
<div class="money-container">
|
||||
<h2>Wealth</h2>
|
||||
{{> "systems/rmss/templates/sheets/actors/parts/actor-money.html" }}
|
||||
</div>
|
||||
</div>
|
||||
|
@ -7,12 +7,16 @@
|
||||
<div>
|
||||
<table>
|
||||
<tr>
|
||||
<th>{{localize "rmss.item.equipped"}}</th>
|
||||
<th>{{localize "rmss.item.quantity"}}</th>
|
||||
<th>{{localize "rmss.armor.weight"}}</th>
|
||||
<th>{{localize "rmss.armor.cost"}}</th>
|
||||
<th>{{localize "rmss.armor.prod_time"}}</th>
|
||||
<th>{{localize "rmss.armor.at"}}</th>
|
||||
</tr>
|
||||
<td>
|
||||
<input type="checkbox" name="system.equipped" {{checked system.equipped}}/>
|
||||
</td>
|
||||
<td>
|
||||
<input name="system.quantity" type="text" value="{{system.quantity}}" data-dtype="Number"/>
|
||||
</td>
|
||||
|
@ -7,6 +7,7 @@
|
||||
<div>
|
||||
<table>
|
||||
<tr>
|
||||
<th>{{localize "rmss.weapon.equipped"}}</th>
|
||||
<th>{{localize "rmss.item.quantity"}}</th>
|
||||
<th>{{localize "rmss.weapon.cost"}}</th>
|
||||
<th>{{localize "rmss.weapon.type"}}</th>
|
||||
@ -17,6 +18,9 @@
|
||||
<th>{{localize "rmss.weapon.fumble_range"}}</th>
|
||||
|
||||
</tr>
|
||||
<td>
|
||||
<input type="checkbox" name="system.equipped" {{checked system.equipped}}/>
|
||||
</td>
|
||||
<td>
|
||||
<input name="system.quantity" type="text" value="{{system.quantity}}" data-dtype="Number"/>
|
||||
</td>
|
||||
|
@ -36,7 +36,14 @@
|
||||
<input name="system.ranks" type="text" value="{{system.ranks}}" data-dtype="Number"/>
|
||||
</td>
|
||||
<td>
|
||||
<input name="system.new_ranks" type="text" value="{{system.new_ranks}}" data-dtype="Number"/>
|
||||
<div>
|
||||
{{#switch system.new_ranks.value}}
|
||||
{{#case 0}} <a class="skillsheet-newrank" data-item-id="{{item._id}}" value="{{system.new_ranks.value}}"><i class="fa-regular fa-square"></i> <i class="fa-regular fa-square"></i> <i class="fa-regular fa-square"></i></a> {{/case}}
|
||||
{{#case 1}} <a class="skillsheet-newrank" data-item-id="{{item._id}}" value="{{system.new_ranks.value}}"><i class="fa-regular fa-square-check"></i> <i class="fa-regular fa-square"></i> <i class="fa-regular fa-square"></i></a> {{/case}}
|
||||
{{#case 2}} <a class="skillsheet-newrank" data-item-id="{{item._id}}" value="{{system.new_ranks.value}}"><i class="fa-regular fa-square-check"></i> <i class="fa-regular fa-square-check"></i> <i class="fa-regular fa-square"></i></a> {{/case}}
|
||||
{{#case 3}} <a class="skillsheet-newrank" data-item-id="{{item._id}}" value="{{system.new_ranks.value}}"><i class="fa-regular fa-square-check"></i> <i class="fa-regular fa-square-check"></i> <i class="fa-regular fa-square-check"></i></a> {{/case}}
|
||||
{{/switch}}
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<input name="system.rank_bonus" type="text" value="{{system.rank_bonus}}" data-dtype="Number"/>
|
||||
|
Loading…
Reference in New Issue
Block a user