Squashed commit of the following:
commit cf7ce46860c97841018f0cc2af4be94ccfd3b44b Merge: 8387e7a4c5e54e9270Author: Garth Gutenberg <garth.gutenberg@gmail.com> Date: Fri Oct 15 14:39:44 2021 -0500 Merge branch 'master' into gg-rifts-1.2 commit 8387e7a4cd8e6ad197eac1ce2ab87c801320ed3e Author: Garth Gutenberg <garth.gutenberg@gmail.com> Date: Fri Oct 15 14:21:00 2021 -0500 changelog commit 59a47bd058a095d00afde94a24569b9cf3773132 Author: Garth Gutenberg <garth.gutenberg@gmail.com> Date: Fri Oct 15 14:01:29 2021 -0500 Add option to include IQ bonus on skill-based abilities commit e412bbb33ca83160c978a72cf403e2297c4a44b4 Author: Garth Gutenberg <garth.gutenberg@gmail.com> Date: Mon Oct 4 18:39:02 2021 -0500 Add initiative roll button that adds to the turn tracker, palladium style commit 427d17f878883c7c335d257f5d0914034eed2b6e Author: Garth Gutenberg <garth.gutenberg@gmail.com> Date: Mon Oct 4 12:00:02 2021 -0500 Fix css on psi vs. commit f86131f3c0b2c1590c9dce3f5b5c3d75a99eb1c9 Author: Garth Gutenberg <garth.gutenberg@gmail.com> Date: Mon Oct 4 11:51:04 2021 -0500 Reorder range disarm modifier list commit 8d2c1189b005db6f32760a5a316022cb310e1c8b Author: Garth Gutenberg <garth.gutenberg@gmail.com> Date: Sun Oct 3 17:24:06 2021 -0500 Add number of actions as title attribute for range attacks. Prompt for additional modifier on range disarm. commit 388e195f952a16c1da32b0396490f9929878054d Author: Garth Gutenberg <garth.gutenberg@gmail.com> Date: Sun Oct 3 14:02:06 2021 -0500 Add other RPA and space fighter bonuses from Phase World commit c6e6f4527295350819d6ed962b7053ea98d80a65 Author: Garth Gutenberg <garth.gutenberg@gmail.com> Date: Sun Oct 3 11:48:51 2021 -0500 Various additions and fixes. - Add "ly" (Light Year) to distance units - Add RPA Elite: Silverhawk - Fix issue with skills not updating when character level changes - Fix issue with export of units (range, damage, dc, duration) commit 17d45bb63cd181f6b0b0bf260eeafaa42a54a19f Author: Garth Gutenberg <garth.gutenberg@gmail.com> Date: Sat Sep 25 11:29:35 2021 -0500 css commit 2aeb2b222eacb044f9b9b74ed91a1c1990dd0bea Author: Garth Gutenberg <garth.gutenberg@gmail.com> Date: Fri Sep 24 14:45:31 2021 -0500 burst to pulse/burst commit 2f268bb15b6bec2f44dd42ab3622d07e0b4c446b Author: Garth Gutenberg <garth.gutenberg@gmail.com> Date: Fri Sep 24 14:07:59 2021 -0500 more css commit d32a9f128512d54bedc6c509d722130a72d18a71 Author: Garth Gutenberg <garth.gutenberg@gmail.com> Date: Fri Sep 24 13:45:59 2021 -0500 more css commit 02c22a6a82b1d4ff9d2c3c06002938458b67c9a7 Author: Garth Gutenberg <garth.gutenberg@gmail.com> Date: Fri Sep 24 13:42:18 2021 -0500 more css commit 01ed9fdccb04c6de13543302fe3367dc97f37266 Author: Garth Gutenberg <garth.gutenberg@gmail.com> Date: Fri Sep 24 13:36:48 2021 -0500 Better styling on active section commit 378b1bb96f3707ce8d6baa32f4f99aaceb80a516 Author: Garth Gutenberg <garth.gutenberg@gmail.com> Date: Fri Sep 24 13:17:12 2021 -0500 Fix text on strike: burst roll. Make Disease save a roll query commit b9dd1ec8c3c21d8ac3139c270bd5ee3b7bf2d8bb Author: Garth Gutenberg <garth.gutenberg@gmail.com> Date: Thu Sep 23 22:39:46 2021 -0500 changelog commit a7451df9ccf9497fa15b05f5fafb360a6a80e957 Author: Garth Gutenberg <garth.gutenberg@gmail.com> Date: Thu Sep 23 22:33:40 2021 -0500 Reorganize bonus sections commit 5235f0c7c59bb52a88e7ed6e9321dcebea74f3b2 Author: Garth Gutenberg <garth.gutenberg@gmail.com> Date: Thu Sep 23 21:51:21 2021 -0500 Indentation commit 96bee65c99a8cd0f2baa106393d35a072c043ec0 Author: Garth Gutenberg <garth.gutenberg@gmail.com> Date: Thu Sep 23 21:42:49 2021 -0500 Fix some active profile rolls commit be574eddb5f083abfbace0aacd06ed008efb58a4 Author: Garth Gutenberg <garth.gutenberg@gmail.com> Date: Wed Sep 22 11:05:18 2021 -0500 Instructions fixes commit a6fa6a26852838892543ec33149ef7ac204a1551 Author: Garth Gutenberg <garth.gutenberg@gmail.com> Date: Tue Sep 21 23:01:43 2021 -0500 Changelog commit e92804f65e2a5fa82d984254798d5c987dcdc6af Author: Garth Gutenberg <garth.gutenberg@gmail.com> Date: Tue Sep 21 22:59:08 2021 -0500 todo commit 77d31e8f6d8238183219943a647769effad27522 Author: Garth Gutenberg <garth.gutenberg@gmail.com> Date: Tue Sep 21 22:58:49 2021 -0500 Verbiage update to sheet.json commit bb803ccefca9fa5acf49f73a029029370289cd02 Author: Garth Gutenberg <garth.gutenberg@gmail.com> Date: Tue Sep 21 22:57:21 2021 -0500 Updated instructions commit 9c12a4a9d14f32bbf56720bfb14a79061167749c Author: Garth Gutenberg <garth.gutenberg@gmail.com> Date: Tue Sep 21 22:47:41 2021 -0500 Continuing with instructions commit eca16f5ac5c65c4df0c712828f8a273001d4671f Author: Garth Gutenberg <garth.gutenberg@gmail.com> Date: Tue Sep 21 21:50:49 2021 -0500 Beginning of better instructions. Make Active section more useable. Stylin' commit d7d7be7a7db292ba04579ef888a3f8e34a1611fb Author: Garth Gutenberg <garth.gutenberg@gmail.com> Date: Mon Sep 20 21:14:41 2021 -0500 todo commit e76c903507c60cc7f98046ff4da858740edbb48b Author: Garth Gutenberg <garth.gutenberg@gmail.com> Date: Mon Sep 20 21:10:15 2021 -0500 Update global active armor when active armor checkbox is changed commit b30a1da92bab3025f03af8f699c38bb4a96b254e Author: Garth Gutenberg <garth.gutenberg@gmail.com> Date: Mon Sep 20 20:52:08 2021 -0500 Change `currentmdc` and `basemdc` armor attributes to `mdc` and `mdc_max` respectively, including migration commit 2c671ffc772856239b62c40b5702c6bf532eab73 Author: Garth Gutenberg <garth.gutenberg@gmail.com> Date: Mon Sep 20 19:11:44 2021 -0500 comments and docs commit 7aab9fa82a017e790c9c4cfe36d3ec6de6b04ba8 Author: Garth Gutenberg <garth.gutenberg@gmail.com> Date: Mon Sep 20 19:10:07 2021 -0500 Add active.html commit cca10d4ed0d691d0e1eeec5e51b5bb287cc0a4ed Author: Garth Gutenberg <garth.gutenberg@gmail.com> Date: Mon Sep 20 19:09:45 2021 -0500 Add global profile and armor section for easier use with roll20 Attributes / token bar/bubble commit 125ba567f46acb60b6491b64fcde3b614c8403f6 Author: Garth Gutenberg <garth.gutenberg@gmail.com> Date: Mon Sep 20 16:00:55 2021 -0500 Change overflow:scroll to overflow:auto commit 0c1e2b6f56c1e21d8b746fa5b822507bd47d4c92 Author: Garth Gutenberg <garth.gutenberg@gmail.com> Date: Sat Sep 18 23:08:35 2021 -0500 changelog commit b8bd1fddb9f7a32c9121fa6bbb9bf72898d01f52 Author: Garth Gutenberg <garth.gutenberg@gmail.com> Date: Sat Sep 18 23:07:41 2021 -0500 Move combat section above attributes section in profiles commit a23f92a60c2f95166edfb977f2c899c3bfc0b77f Author: Garth Gutenberg <garth.gutenberg@gmail.com> Date: Sat Sep 18 23:04:40 2021 -0500 Add hand-to-hand from GM guide commit 0575e6443d8aa2d18e834ec9e5d0550dc45a314e Author: Garth Gutenberg <garth.gutenberg@gmail.com> Date: Sat Sep 18 21:29:00 2021 -0500 Update changelog commit4b480140f6Author: Garth Gutenberg <garth.gutenberg@gmail.com> Date: Fri Sep 17 15:09:07 2021 -0500 Factor spell strength from h2h:dragon commitad29a22c6bAuthor: Garth Gutenberg <garth.gutenberg@gmail.com> Date: Thu Sep 16 21:51:06 2021 -0500 Add Racial and Other skill categories. Add Break Fall defense bonus. Make h2h import/exportable. Add Aikido. commit35ed811836Author: Garth Gutenberg <garth.gutenberg@gmail.com> Date: Thu Sep 16 20:07:47 2021 -0500 Add H2H:Dragon and RPA Combat commit18929e169cAuthor: Garth Gutenberg <garth.gutenberg@gmail.com> Date: Thu Sep 16 19:04:26 2021 -0500 Allow custom H2H commit8a330a565cAuthor: Garth Gutenberg <garth.gutenberg@gmail.com> Date: Thu Sep 16 18:39:40 2021 -0500 Update H2H when character level changes commit8eb17bb24fAuthor: Garth Gutenberg <garth.gutenberg@gmail.com> Date: Thu Sep 16 18:31:55 2021 -0500 Add hand-to-hand selector and calculator. Change WPs tab to Combat Skills commitfdfd938367Author: Garth Gutenberg <garth.gutenberg@gmail.com> Date: Thu Sep 9 22:11:33 2021 -0500 Fix issue with absolute value calculation in profile commitcc9abf73deAuthor: Garth Gutenberg <garth.gutenberg@gmail.com> Date: Thu Sep 9 16:36:46 2021 -0500 Prompt for gunfire dodge penalty if option is enabled
This commit is contained in:
@@ -4,6 +4,34 @@
|
||||
|
||||
### Added
|
||||
|
||||
- Prompt for gunfire dodge penalty if option is enabled
|
||||
- Add hand-to-hand selector and calculator
|
||||
- Add RPA Combat selector and calculator
|
||||
- Add "Racial" and "Other" skill categories
|
||||
- Add Break Fall defense bonus
|
||||
- Add Body Block/Tackle, Leg Hook, and Backward Sweep Kick bonuses
|
||||
- Global Active Profile and Active Armor section
|
||||
- Add "ly" (Light Years) to distance units
|
||||
- Add number of actions as title attribute for range attacks
|
||||
- Add initiative roll button that adds to turn tracker, Palladium style (requires `dup-turn` API script)
|
||||
- Add option to include IQ bonus on skill-based abilities
|
||||
|
||||
### Changed
|
||||
|
||||
- Fix issue with absolute value calculation in profile
|
||||
- Change "WPs" tab to "Combat Skills"
|
||||
- Move Combat section above Attributes section in profile
|
||||
- Change `currentmdc` and `basemdc` armor attributes to `mdc` and `mdc_max` respectively, including migration
|
||||
- Change readonly spans from `overflow:scroll` to `overflow:auto` to get rid of the non-functional scrollbars on Windows
|
||||
- Moved all instructions to the Options tab and updated them / made them more thorough
|
||||
- Reorganized Ancient and Modern bonus sections
|
||||
- Fix text on `strike: burst` roll
|
||||
- Make Disease save a roll query
|
||||
- Fix issue with skills not updating when character level changes
|
||||
- Fix issue with export of units (range, damage, dc, duration)
|
||||
- Prompt for additional modifier on range disarm
|
||||
- Styling changes/fixes
|
||||
|
||||
## [1.1.0] - 2021-09-06
|
||||
|
||||
### Added
|
||||
|
||||
+115
-23
@@ -62,6 +62,7 @@ a {
|
||||
.withoutavatars .sheet-rolltemplate-strike,
|
||||
.withoutavatars .sheet-rolltemplate-goe,
|
||||
.withoutavatars .sheet-rolltemplate-skill,
|
||||
.withoutavatars .sheet-rolltemplate-initiative,
|
||||
.withoutavatars .sheet-rolltemplate-custom {
|
||||
margin-left: -7px;
|
||||
}
|
||||
@@ -70,12 +71,14 @@ a {
|
||||
.sheet-rolltemplate-strike,
|
||||
.sheet-rolltemplate-goe,
|
||||
.sheet-rolltemplate-skill,
|
||||
.sheet-rolltemplate-initiative,
|
||||
.sheet-rolltemplate-custom {
|
||||
margin-left: -37px;
|
||||
}
|
||||
.sheet-rolltemplate-strike .sheet-container,
|
||||
.sheet-rolltemplate-goe .sheet-container,
|
||||
.sheet-rolltemplate-skill .sheet-container,
|
||||
.sheet-rolltemplate-initiative .sheet-container,
|
||||
.sheet-rolltemplate-custom .sheet-container {
|
||||
border: 1px solid;
|
||||
/* by default, the border is the same color as the header. You can change this here, e.g. to black */
|
||||
@@ -86,12 +89,14 @@ a {
|
||||
.sheet-rolltemplate-strike .sheet-container.sheet-color-red,
|
||||
.sheet-rolltemplate-goe .sheet-container.sheet-color-red,
|
||||
.sheet-rolltemplate-skill .sheet-container.sheet-color-red,
|
||||
.sheet-rolltemplate-initiative .sheet-container.sheet-color-red,
|
||||
.sheet-rolltemplate-custom .sheet-container.sheet-color-red {
|
||||
--header-bg-color: #f00;
|
||||
}
|
||||
.sheet-rolltemplate-strike .sheet-container.sheet-color-green,
|
||||
.sheet-rolltemplate-goe .sheet-container.sheet-color-green,
|
||||
.sheet-rolltemplate-skill .sheet-container.sheet-color-green,
|
||||
.sheet-rolltemplate-initiative .sheet-container.sheet-color-green,
|
||||
.sheet-rolltemplate-custom .sheet-container.sheet-color-green {
|
||||
--header-bg-color: #0f0;
|
||||
--header-text-color: #000;
|
||||
@@ -99,6 +104,7 @@ a {
|
||||
.sheet-rolltemplate-strike .sheet-header,
|
||||
.sheet-rolltemplate-goe .sheet-header,
|
||||
.sheet-rolltemplate-skill .sheet-header,
|
||||
.sheet-rolltemplate-initiative .sheet-header,
|
||||
.sheet-rolltemplate-custom .sheet-header {
|
||||
background-color: var(--header-bg-color);
|
||||
/* change text-align to center to center the header text */
|
||||
@@ -109,18 +115,21 @@ a {
|
||||
.sheet-rolltemplate-strike .sheet-title,
|
||||
.sheet-rolltemplate-goe .sheet-title,
|
||||
.sheet-rolltemplate-skill .sheet-title,
|
||||
.sheet-rolltemplate-initiative .sheet-title,
|
||||
.sheet-rolltemplate-custom .sheet-title {
|
||||
font-size: 1.1em;
|
||||
}
|
||||
.sheet-rolltemplate-strike .sheet-subtitle,
|
||||
.sheet-rolltemplate-goe .sheet-subtitle,
|
||||
.sheet-rolltemplate-skill .sheet-subtitle,
|
||||
.sheet-rolltemplate-initiative .sheet-subtitle,
|
||||
.sheet-rolltemplate-custom .sheet-subtitle {
|
||||
font-size: 0.9em;
|
||||
}
|
||||
.sheet-rolltemplate-strike .sheet-content,
|
||||
.sheet-rolltemplate-goe .sheet-content,
|
||||
.sheet-rolltemplate-skill .sheet-content,
|
||||
.sheet-rolltemplate-initiative .sheet-content,
|
||||
.sheet-rolltemplate-custom .sheet-content {
|
||||
display: grid;
|
||||
background: #fff;
|
||||
@@ -132,12 +141,14 @@ a {
|
||||
.sheet-rolltemplate-strike .sheet-content > div,
|
||||
.sheet-rolltemplate-goe .sheet-content > div,
|
||||
.sheet-rolltemplate-skill .sheet-content > div,
|
||||
.sheet-rolltemplate-initiative .sheet-content > div,
|
||||
.sheet-rolltemplate-custom .sheet-content > div {
|
||||
padding: 5px;
|
||||
}
|
||||
.sheet-rolltemplate-strike .sheet-content .sheet-key,
|
||||
.sheet-rolltemplate-goe .sheet-content .sheet-key,
|
||||
.sheet-rolltemplate-skill .sheet-content .sheet-key,
|
||||
.sheet-rolltemplate-initiative .sheet-content .sheet-key,
|
||||
.sheet-rolltemplate-custom .sheet-content .sheet-key {
|
||||
font-weight: bold;
|
||||
padding-right: 10px;
|
||||
@@ -149,6 +160,8 @@ a {
|
||||
.sheet-rolltemplate-goe .sheet-content :nth-child(4n),
|
||||
.sheet-rolltemplate-skill .sheet-content :nth-child(4n+3),
|
||||
.sheet-rolltemplate-skill .sheet-content :nth-child(4n),
|
||||
.sheet-rolltemplate-initiative .sheet-content :nth-child(4n+3),
|
||||
.sheet-rolltemplate-initiative .sheet-content :nth-child(4n),
|
||||
.sheet-rolltemplate-custom .sheet-content :nth-child(4n+3),
|
||||
.sheet-rolltemplate-custom .sheet-content :nth-child(4n) {
|
||||
background: #eee;
|
||||
@@ -156,6 +169,7 @@ a {
|
||||
.sheet-rolltemplate-strike .sheet-desc,
|
||||
.sheet-rolltemplate-goe .sheet-desc,
|
||||
.sheet-rolltemplate-skill .sheet-desc,
|
||||
.sheet-rolltemplate-initiative .sheet-desc,
|
||||
.sheet-rolltemplate-custom .sheet-desc {
|
||||
grid-column: span 2;
|
||||
padding: 5px;
|
||||
@@ -163,8 +177,8 @@ a {
|
||||
}
|
||||
|
||||
.danger {
|
||||
background-color: #dc3545;
|
||||
color: white;
|
||||
background-color: #dc3545 !important;
|
||||
color: white !important;
|
||||
}
|
||||
|
||||
.charsheet .debug[value="0"] ~ main#megaverse .debuggable {
|
||||
@@ -183,6 +197,10 @@ a {
|
||||
.charsheet main#megaverse button[type=roll].no-dice::before {
|
||||
content: "";
|
||||
}
|
||||
.charsheet main#megaverse button.action-roll::before {
|
||||
font-family: "dicefontd20";
|
||||
content: "t";
|
||||
}
|
||||
.charsheet main#megaverse h4 {
|
||||
text-decoration: underline;
|
||||
}
|
||||
@@ -193,22 +211,40 @@ a {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
background-color: #f5f5f5;
|
||||
background-color: #eee;
|
||||
margin: 0.1rem 0.2rem;
|
||||
border-radius: 0.1rem;
|
||||
font-weight: normal;
|
||||
padding-left: 0.5rem;
|
||||
overflow: scroll;
|
||||
overflow-y: auto;
|
||||
}
|
||||
.charsheet main#megaverse textarea[readonly] {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
background-color: #eee;
|
||||
margin: 0.1rem 0.2rem;
|
||||
border-radius: 0.1rem;
|
||||
font-weight: normal;
|
||||
padding-left: 0.5rem;
|
||||
overflow-y: auto;
|
||||
}
|
||||
.charsheet main#megaverse details {
|
||||
display: revert;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
.charsheet main#megaverse details.info {
|
||||
display: block;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
.charsheet main#megaverse details.info > summary {
|
||||
display: block;
|
||||
}
|
||||
.charsheet main#megaverse details summary {
|
||||
display: revert;
|
||||
cursor: pointer;
|
||||
}
|
||||
.charsheet main#megaverse details summary > h3 {
|
||||
.charsheet main#megaverse details summary h2, .charsheet main#megaverse details summary > h3 {
|
||||
display: inline-block;
|
||||
}
|
||||
.charsheet main#megaverse details .details-body {
|
||||
@@ -234,13 +270,6 @@ a {
|
||||
.charsheet main#megaverse .repeating_profiles-inner details.info {
|
||||
display: inline-block;
|
||||
}
|
||||
.charsheet main#megaverse details.info {
|
||||
display: block;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
.charsheet main#megaverse details.info > summary {
|
||||
display: block;
|
||||
}
|
||||
.charsheet main#megaverse .full {
|
||||
width: 100% !important;
|
||||
}
|
||||
@@ -282,18 +311,24 @@ a {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
background-color: #f5f5f5;
|
||||
background-color: #eee;
|
||||
margin: 0.1rem 0.2rem;
|
||||
border-radius: 0.1rem;
|
||||
font-weight: normal;
|
||||
padding-left: 0.5rem;
|
||||
overflow: scroll;
|
||||
overflow-y: auto;
|
||||
}
|
||||
.charsheet main#megaverse .macro-help label {
|
||||
display: grid;
|
||||
gap: 0.5rem;
|
||||
grid-template-columns: 1fr 7fr !important;
|
||||
}
|
||||
.charsheet main#megaverse .psi-vs {
|
||||
justify-content: left !important;
|
||||
}
|
||||
.charsheet main#megaverse .psi-vs > span {
|
||||
padding-right: 0.5rem;
|
||||
}
|
||||
.charsheet main#megaverse .finance-grid {
|
||||
display: grid;
|
||||
gap: 0.5rem;
|
||||
@@ -400,12 +435,12 @@ a {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
background-color: #f5f5f5;
|
||||
background-color: #eee;
|
||||
margin: 0.1rem 0.2rem;
|
||||
border-radius: 0.1rem;
|
||||
font-weight: normal;
|
||||
padding-left: 0.5rem;
|
||||
overflow: scroll;
|
||||
overflow-y: auto;
|
||||
}
|
||||
.charsheet main#megaverse .bonus-type-container {
|
||||
display: grid;
|
||||
@@ -421,6 +456,14 @@ a {
|
||||
.charsheet main#megaverse .bonus-type-container.attributes > label input[type=text] {
|
||||
width: auto;
|
||||
}
|
||||
.charsheet main#megaverse .bonus-type-container hr {
|
||||
width: 100%;
|
||||
height: 1px;
|
||||
margin: 0;
|
||||
border: 0;
|
||||
background-color: #ccc;
|
||||
border: 0;
|
||||
}
|
||||
.charsheet main#megaverse .bonus-type-container input {
|
||||
width: 5rem;
|
||||
}
|
||||
@@ -439,12 +482,12 @@ a {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
background-color: #f5f5f5;
|
||||
background-color: #eee;
|
||||
margin: 0.1rem 0.2rem;
|
||||
border-radius: 0.1rem;
|
||||
font-weight: normal;
|
||||
padding-left: 0.5rem;
|
||||
overflow: scroll;
|
||||
overflow-y: auto;
|
||||
}
|
||||
.charsheet main#megaverse .bonus-type-container.allow-absolute label {
|
||||
grid-template-columns: 1fr 2rem 5rem;
|
||||
@@ -514,7 +557,7 @@ a {
|
||||
gap: 0.5rem;
|
||||
grid-template-columns: 2.5rem 1fr 10rem 5rem 5rem 5rem 5rem 4rem 4rem;
|
||||
}
|
||||
.charsheet main#megaverse .armor .armor-active label {
|
||||
.charsheet main#megaverse .armor-damage label {
|
||||
display: inline;
|
||||
}
|
||||
.charsheet main#megaverse .armor .armor-labels {
|
||||
@@ -566,6 +609,14 @@ a {
|
||||
.charsheet main#megaverse .profile-builder span.picker-title {
|
||||
font-weight: bold;
|
||||
}
|
||||
.charsheet main#megaverse .profile-builder .profiles hr {
|
||||
width: 100%;
|
||||
height: 1px;
|
||||
margin: 0;
|
||||
border: 0;
|
||||
background-color: #ccc;
|
||||
border: 0;
|
||||
}
|
||||
.charsheet main#megaverse .profile-builder .profiles .bonus-ps-container {
|
||||
grid-template-columns: repeat(auto-fill, minmax(18rem, 1fr));
|
||||
}
|
||||
@@ -590,6 +641,9 @@ a {
|
||||
.charsheet main#megaverse .profile-builder .profiles .bonus-type-container label.roller {
|
||||
grid-template-columns: 1fr 1rem 5rem 4rem;
|
||||
}
|
||||
.charsheet main#megaverse .profile-builder .profiles .bonus-type-container label.roller.initiative {
|
||||
grid-template-columns: 1fr 1rem 5rem 4rem 5rem;
|
||||
}
|
||||
.charsheet main#megaverse .profile-builder .profiles .bonus-type-container label.abs {
|
||||
display: none;
|
||||
}
|
||||
@@ -615,12 +669,12 @@ a {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
background-color: #f5f5f5;
|
||||
background-color: #eee;
|
||||
margin: 0.1rem 0.2rem;
|
||||
border-radius: 0.1rem;
|
||||
font-weight: normal;
|
||||
padding-left: 0.5rem;
|
||||
overflow: scroll;
|
||||
overflow-y: auto;
|
||||
}
|
||||
.charsheet main#megaverse .powersabilities .heading,
|
||||
.charsheet main#megaverse .powersabilities .abilities-list {
|
||||
@@ -640,6 +694,44 @@ a {
|
||||
gap: 0.5rem;
|
||||
grid-template-columns: 2.5rem 1fr 6rem 8rem 8rem 4rem 8rem 4rem 4rem 5rem 4rem;
|
||||
}
|
||||
.charsheet main#megaverse .active-container {
|
||||
padding: 0.5rem;
|
||||
background-color: #eee;
|
||||
box-shadow: rgba(0, 0, 0, 0.15) 1.95px 1.95px 2.6px;
|
||||
}
|
||||
.charsheet main#megaverse .active-container[open] {
|
||||
padding: 1rem;
|
||||
background-color: #ccc;
|
||||
box-shadow: rgba(0, 0, 0, 0.15) 1.95px 1.95px 2.6px 0px inset;
|
||||
}
|
||||
.charsheet main#megaverse .active-container .profile-builder hr {
|
||||
width: 100%;
|
||||
height: 1px;
|
||||
margin: 0;
|
||||
border: 0;
|
||||
background-color: #eee;
|
||||
border: 0;
|
||||
}
|
||||
.charsheet main#megaverse .active-container .modifiers-combat > div,
|
||||
.charsheet main#megaverse .active-container .modifiers-attributes > div {
|
||||
border: 1px solid #eee;
|
||||
padding: 0.5rem;
|
||||
}
|
||||
.charsheet main#megaverse .active-container .armor-row {
|
||||
display: grid;
|
||||
gap: 0.5rem;
|
||||
grid-template-columns: 15rem 10rem 10rem 10rem 11rem;
|
||||
align-items: center;
|
||||
}
|
||||
.charsheet main#megaverse .active-container .armor-row > label {
|
||||
display: flex;
|
||||
align-self: center;
|
||||
text-align: center;
|
||||
align-items: center;
|
||||
}
|
||||
.charsheet main#megaverse .armor-profiles {
|
||||
margin-left: 1rem;
|
||||
}
|
||||
|
||||
img.logo {
|
||||
max-height: 30px;
|
||||
@@ -664,12 +756,12 @@ img.logo {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
background-color: #f5f5f5;
|
||||
background-color: #eee;
|
||||
margin: 0.1rem 0.2rem;
|
||||
border-radius: 0.1rem;
|
||||
font-weight: normal;
|
||||
padding-left: 0.5rem;
|
||||
overflow: scroll;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
.ss-2b {
|
||||
|
||||
+5589
-2022
File diff suppressed because it is too large
Load Diff
@@ -62,6 +62,7 @@ a {
|
||||
.withoutavatars .sheet-rolltemplate-strike,
|
||||
.withoutavatars .sheet-rolltemplate-goe,
|
||||
.withoutavatars .sheet-rolltemplate-skill,
|
||||
.withoutavatars .sheet-rolltemplate-initiative,
|
||||
.withoutavatars .sheet-rolltemplate-custom {
|
||||
margin-left: -7px;
|
||||
}
|
||||
@@ -70,12 +71,14 @@ a {
|
||||
.sheet-rolltemplate-strike,
|
||||
.sheet-rolltemplate-goe,
|
||||
.sheet-rolltemplate-skill,
|
||||
.sheet-rolltemplate-initiative,
|
||||
.sheet-rolltemplate-custom {
|
||||
margin-left: -37px;
|
||||
}
|
||||
.sheet-rolltemplate-strike .sheet-container,
|
||||
.sheet-rolltemplate-goe .sheet-container,
|
||||
.sheet-rolltemplate-skill .sheet-container,
|
||||
.sheet-rolltemplate-initiative .sheet-container,
|
||||
.sheet-rolltemplate-custom .sheet-container {
|
||||
border: 1px solid;
|
||||
/* by default, the border is the same color as the header. You can change this here, e.g. to black */
|
||||
@@ -86,12 +89,14 @@ a {
|
||||
.sheet-rolltemplate-strike .sheet-container.sheet-color-red,
|
||||
.sheet-rolltemplate-goe .sheet-container.sheet-color-red,
|
||||
.sheet-rolltemplate-skill .sheet-container.sheet-color-red,
|
||||
.sheet-rolltemplate-initiative .sheet-container.sheet-color-red,
|
||||
.sheet-rolltemplate-custom .sheet-container.sheet-color-red {
|
||||
--header-bg-color: #f00;
|
||||
}
|
||||
.sheet-rolltemplate-strike .sheet-container.sheet-color-green,
|
||||
.sheet-rolltemplate-goe .sheet-container.sheet-color-green,
|
||||
.sheet-rolltemplate-skill .sheet-container.sheet-color-green,
|
||||
.sheet-rolltemplate-initiative .sheet-container.sheet-color-green,
|
||||
.sheet-rolltemplate-custom .sheet-container.sheet-color-green {
|
||||
--header-bg-color: #0f0;
|
||||
--header-text-color: #000;
|
||||
@@ -99,6 +104,7 @@ a {
|
||||
.sheet-rolltemplate-strike .sheet-header,
|
||||
.sheet-rolltemplate-goe .sheet-header,
|
||||
.sheet-rolltemplate-skill .sheet-header,
|
||||
.sheet-rolltemplate-initiative .sheet-header,
|
||||
.sheet-rolltemplate-custom .sheet-header {
|
||||
background-color: var(--header-bg-color);
|
||||
/* change text-align to center to center the header text */
|
||||
@@ -109,18 +115,21 @@ a {
|
||||
.sheet-rolltemplate-strike .sheet-title,
|
||||
.sheet-rolltemplate-goe .sheet-title,
|
||||
.sheet-rolltemplate-skill .sheet-title,
|
||||
.sheet-rolltemplate-initiative .sheet-title,
|
||||
.sheet-rolltemplate-custom .sheet-title {
|
||||
font-size: 1.1em;
|
||||
}
|
||||
.sheet-rolltemplate-strike .sheet-subtitle,
|
||||
.sheet-rolltemplate-goe .sheet-subtitle,
|
||||
.sheet-rolltemplate-skill .sheet-subtitle,
|
||||
.sheet-rolltemplate-initiative .sheet-subtitle,
|
||||
.sheet-rolltemplate-custom .sheet-subtitle {
|
||||
font-size: 0.9em;
|
||||
}
|
||||
.sheet-rolltemplate-strike .sheet-content,
|
||||
.sheet-rolltemplate-goe .sheet-content,
|
||||
.sheet-rolltemplate-skill .sheet-content,
|
||||
.sheet-rolltemplate-initiative .sheet-content,
|
||||
.sheet-rolltemplate-custom .sheet-content {
|
||||
display: grid;
|
||||
background: #fff;
|
||||
@@ -132,12 +141,14 @@ a {
|
||||
.sheet-rolltemplate-strike .sheet-content > div,
|
||||
.sheet-rolltemplate-goe .sheet-content > div,
|
||||
.sheet-rolltemplate-skill .sheet-content > div,
|
||||
.sheet-rolltemplate-initiative .sheet-content > div,
|
||||
.sheet-rolltemplate-custom .sheet-content > div {
|
||||
padding: 5px;
|
||||
}
|
||||
.sheet-rolltemplate-strike .sheet-content .sheet-key,
|
||||
.sheet-rolltemplate-goe .sheet-content .sheet-key,
|
||||
.sheet-rolltemplate-skill .sheet-content .sheet-key,
|
||||
.sheet-rolltemplate-initiative .sheet-content .sheet-key,
|
||||
.sheet-rolltemplate-custom .sheet-content .sheet-key {
|
||||
font-weight: bold;
|
||||
padding-right: 10px;
|
||||
@@ -149,6 +160,8 @@ a {
|
||||
.sheet-rolltemplate-goe .sheet-content :nth-child(4n),
|
||||
.sheet-rolltemplate-skill .sheet-content :nth-child(4n+3),
|
||||
.sheet-rolltemplate-skill .sheet-content :nth-child(4n),
|
||||
.sheet-rolltemplate-initiative .sheet-content :nth-child(4n+3),
|
||||
.sheet-rolltemplate-initiative .sheet-content :nth-child(4n),
|
||||
.sheet-rolltemplate-custom .sheet-content :nth-child(4n+3),
|
||||
.sheet-rolltemplate-custom .sheet-content :nth-child(4n) {
|
||||
background: #eee;
|
||||
@@ -156,6 +169,7 @@ a {
|
||||
.sheet-rolltemplate-strike .sheet-desc,
|
||||
.sheet-rolltemplate-goe .sheet-desc,
|
||||
.sheet-rolltemplate-skill .sheet-desc,
|
||||
.sheet-rolltemplate-initiative .sheet-desc,
|
||||
.sheet-rolltemplate-custom .sheet-desc {
|
||||
grid-column: span 2;
|
||||
padding: 5px;
|
||||
@@ -163,8 +177,8 @@ a {
|
||||
}
|
||||
|
||||
.danger {
|
||||
background-color: #dc3545;
|
||||
color: white;
|
||||
background-color: #dc3545 !important;
|
||||
color: white !important;
|
||||
}
|
||||
|
||||
.charsheet .debug[value="0"] ~ main#megaverse .debuggable {
|
||||
@@ -183,6 +197,10 @@ a {
|
||||
.charsheet main#megaverse button[type=roll].no-dice::before {
|
||||
content: "";
|
||||
}
|
||||
.charsheet main#megaverse button.action-roll::before {
|
||||
font-family: "dicefontd20";
|
||||
content: "t";
|
||||
}
|
||||
.charsheet main#megaverse h4 {
|
||||
text-decoration: underline;
|
||||
}
|
||||
@@ -193,22 +211,40 @@ a {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
background-color: #f5f5f5;
|
||||
background-color: #eee;
|
||||
margin: 0.1rem 0.2rem;
|
||||
border-radius: 0.1rem;
|
||||
font-weight: normal;
|
||||
padding-left: 0.5rem;
|
||||
overflow: scroll;
|
||||
overflow-y: auto;
|
||||
}
|
||||
.charsheet main#megaverse textarea[readonly] {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
background-color: #eee;
|
||||
margin: 0.1rem 0.2rem;
|
||||
border-radius: 0.1rem;
|
||||
font-weight: normal;
|
||||
padding-left: 0.5rem;
|
||||
overflow-y: auto;
|
||||
}
|
||||
.charsheet main#megaverse details {
|
||||
display: revert;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
.charsheet main#megaverse details.info {
|
||||
display: block;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
.charsheet main#megaverse details.info > summary {
|
||||
display: block;
|
||||
}
|
||||
.charsheet main#megaverse details summary {
|
||||
display: revert;
|
||||
cursor: pointer;
|
||||
}
|
||||
.charsheet main#megaverse details summary > h3 {
|
||||
.charsheet main#megaverse details summary h2, .charsheet main#megaverse details summary > h3 {
|
||||
display: inline-block;
|
||||
}
|
||||
.charsheet main#megaverse details .details-body {
|
||||
@@ -234,13 +270,6 @@ a {
|
||||
.charsheet main#megaverse .repeating_profiles-inner details.info {
|
||||
display: inline-block;
|
||||
}
|
||||
.charsheet main#megaverse details.info {
|
||||
display: block;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
.charsheet main#megaverse details.info > summary {
|
||||
display: block;
|
||||
}
|
||||
.charsheet main#megaverse .full {
|
||||
width: 100% !important;
|
||||
}
|
||||
@@ -282,18 +311,24 @@ a {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
background-color: #f5f5f5;
|
||||
background-color: #eee;
|
||||
margin: 0.1rem 0.2rem;
|
||||
border-radius: 0.1rem;
|
||||
font-weight: normal;
|
||||
padding-left: 0.5rem;
|
||||
overflow: scroll;
|
||||
overflow-y: auto;
|
||||
}
|
||||
.charsheet main#megaverse .macro-help label {
|
||||
display: grid;
|
||||
gap: 0.5rem;
|
||||
grid-template-columns: 1fr 7fr !important;
|
||||
}
|
||||
.charsheet main#megaverse .psi-vs {
|
||||
justify-content: left !important;
|
||||
}
|
||||
.charsheet main#megaverse .psi-vs > span {
|
||||
padding-right: 0.5rem;
|
||||
}
|
||||
.charsheet main#megaverse .finance-grid {
|
||||
display: grid;
|
||||
gap: 0.5rem;
|
||||
@@ -400,12 +435,12 @@ a {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
background-color: #f5f5f5;
|
||||
background-color: #eee;
|
||||
margin: 0.1rem 0.2rem;
|
||||
border-radius: 0.1rem;
|
||||
font-weight: normal;
|
||||
padding-left: 0.5rem;
|
||||
overflow: scroll;
|
||||
overflow-y: auto;
|
||||
}
|
||||
.charsheet main#megaverse .bonus-type-container {
|
||||
display: grid;
|
||||
@@ -421,6 +456,14 @@ a {
|
||||
.charsheet main#megaverse .bonus-type-container.attributes > label input[type=text] {
|
||||
width: auto;
|
||||
}
|
||||
.charsheet main#megaverse .bonus-type-container hr {
|
||||
width: 100%;
|
||||
height: 1px;
|
||||
margin: 0;
|
||||
border: 0;
|
||||
background-color: #ccc;
|
||||
border: 0;
|
||||
}
|
||||
.charsheet main#megaverse .bonus-type-container input {
|
||||
width: 5rem;
|
||||
}
|
||||
@@ -439,12 +482,12 @@ a {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
background-color: #f5f5f5;
|
||||
background-color: #eee;
|
||||
margin: 0.1rem 0.2rem;
|
||||
border-radius: 0.1rem;
|
||||
font-weight: normal;
|
||||
padding-left: 0.5rem;
|
||||
overflow: scroll;
|
||||
overflow-y: auto;
|
||||
}
|
||||
.charsheet main#megaverse .bonus-type-container.allow-absolute label {
|
||||
grid-template-columns: 1fr 2rem 5rem;
|
||||
@@ -514,7 +557,7 @@ a {
|
||||
gap: 0.5rem;
|
||||
grid-template-columns: 2.5rem 1fr 10rem 5rem 5rem 5rem 5rem 4rem 4rem;
|
||||
}
|
||||
.charsheet main#megaverse .armor .armor-active label {
|
||||
.charsheet main#megaverse .armor-damage label {
|
||||
display: inline;
|
||||
}
|
||||
.charsheet main#megaverse .armor .armor-labels {
|
||||
@@ -566,6 +609,14 @@ a {
|
||||
.charsheet main#megaverse .profile-builder span.picker-title {
|
||||
font-weight: bold;
|
||||
}
|
||||
.charsheet main#megaverse .profile-builder .profiles hr {
|
||||
width: 100%;
|
||||
height: 1px;
|
||||
margin: 0;
|
||||
border: 0;
|
||||
background-color: #ccc;
|
||||
border: 0;
|
||||
}
|
||||
.charsheet main#megaverse .profile-builder .profiles .bonus-ps-container {
|
||||
grid-template-columns: repeat(auto-fill, minmax(18rem, 1fr));
|
||||
}
|
||||
@@ -590,6 +641,9 @@ a {
|
||||
.charsheet main#megaverse .profile-builder .profiles .bonus-type-container label.roller {
|
||||
grid-template-columns: 1fr 1rem 5rem 4rem;
|
||||
}
|
||||
.charsheet main#megaverse .profile-builder .profiles .bonus-type-container label.roller.initiative {
|
||||
grid-template-columns: 1fr 1rem 5rem 4rem 5rem;
|
||||
}
|
||||
.charsheet main#megaverse .profile-builder .profiles .bonus-type-container label.abs {
|
||||
display: none;
|
||||
}
|
||||
@@ -615,12 +669,12 @@ a {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
background-color: #f5f5f5;
|
||||
background-color: #eee;
|
||||
margin: 0.1rem 0.2rem;
|
||||
border-radius: 0.1rem;
|
||||
font-weight: normal;
|
||||
padding-left: 0.5rem;
|
||||
overflow: scroll;
|
||||
overflow-y: auto;
|
||||
}
|
||||
.charsheet main#megaverse .powersabilities .heading,
|
||||
.charsheet main#megaverse .powersabilities .abilities-list {
|
||||
@@ -640,6 +694,44 @@ a {
|
||||
gap: 0.5rem;
|
||||
grid-template-columns: 2.5rem 1fr 6rem 8rem 8rem 4rem 8rem 4rem 4rem 5rem 4rem;
|
||||
}
|
||||
.charsheet main#megaverse .active-container {
|
||||
padding: 0.5rem;
|
||||
background-color: #eee;
|
||||
box-shadow: rgba(0, 0, 0, 0.15) 1.95px 1.95px 2.6px;
|
||||
}
|
||||
.charsheet main#megaverse .active-container[open] {
|
||||
padding: 1rem;
|
||||
background-color: #ccc;
|
||||
box-shadow: rgba(0, 0, 0, 0.15) 1.95px 1.95px 2.6px 0px inset;
|
||||
}
|
||||
.charsheet main#megaverse .active-container .profile-builder hr {
|
||||
width: 100%;
|
||||
height: 1px;
|
||||
margin: 0;
|
||||
border: 0;
|
||||
background-color: #eee;
|
||||
border: 0;
|
||||
}
|
||||
.charsheet main#megaverse .active-container .modifiers-combat > div,
|
||||
.charsheet main#megaverse .active-container .modifiers-attributes > div {
|
||||
border: 1px solid #eee;
|
||||
padding: 0.5rem;
|
||||
}
|
||||
.charsheet main#megaverse .active-container .armor-row {
|
||||
display: grid;
|
||||
gap: 0.5rem;
|
||||
grid-template-columns: 15rem 10rem 10rem 10rem 11rem;
|
||||
align-items: center;
|
||||
}
|
||||
.charsheet main#megaverse .active-container .armor-row > label {
|
||||
display: flex;
|
||||
align-self: center;
|
||||
text-align: center;
|
||||
align-items: center;
|
||||
}
|
||||
.charsheet main#megaverse .armor-profiles {
|
||||
margin-left: 1rem;
|
||||
}
|
||||
|
||||
img.logo {
|
||||
max-height: 30px;
|
||||
@@ -664,12 +756,12 @@ img.logo {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
background-color: #f5f5f5;
|
||||
background-color: #eee;
|
||||
margin: 0.1rem 0.2rem;
|
||||
border-radius: 0.1rem;
|
||||
font-weight: normal;
|
||||
padding-left: 0.5rem;
|
||||
overflow: scroll;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
.ss-2b {
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -4,9 +4,17 @@
|
||||
"authors": "Grinning Gecko",
|
||||
"roll20userid": "6479616",
|
||||
"preview": "preview.jpg",
|
||||
"instructions": "Rifts is a complicated game, and this is a complicated sheet. Please expand and review the instructions on each tab of the sheet in order to use it to its fullest. Happy gaming!",
|
||||
"instructions": "Rifts is a complicated game, and this is a complicated sheet. Please expand and review the instructions on the Options tab of the sheet in order to use it to its fullest. Happy gaming!",
|
||||
"legacy": false,
|
||||
"useroptions": [
|
||||
{
|
||||
"attribute": "opt_dodge_penalty",
|
||||
"displayname": "Apply Rifts: Ultimate Edition penalties to dodging gunfire",
|
||||
"description": "In Rifts: Ultimate Edition, characters are -10 to dodge gunfire at less than 10 feet, and -5 between 10 and 50 feet.",
|
||||
"type": "checkbox",
|
||||
"value": "?{Dodging gunfire?|> 50 feet,0|10-50 feet,5|< 10 feet,10}",
|
||||
"checked": "checked"
|
||||
},
|
||||
{
|
||||
"attribute": "opt_pp_extras",
|
||||
"displayname": "Add PP bonus to Disarm and Entangle",
|
||||
@@ -37,6 +45,13 @@
|
||||
"type": "checkbox",
|
||||
"value": "1",
|
||||
"checked": "checked"
|
||||
},
|
||||
{
|
||||
"attribute": "opt_iq_bonus",
|
||||
"displayname": "Apply IQ bonus to skill-based abilities",
|
||||
"description": "Adds IQ bonus to abilities/magic/psionic that use a skill-based percentage. Some examples include, but are not limited to, Telemechanics, Object Read, Locate, etc.",
|
||||
"type": "checkbox",
|
||||
"value": "1"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@ async function applyDamageToNextActiveArmor(section, damage) {
|
||||
const ids = await getSectionIDsOrderedAsync(section);
|
||||
const attrKeys = ids.flatMap((id) => [
|
||||
`repeating_${section}_${id}_is_active`,
|
||||
`repeating_${section}_${id}_currentmdc`,
|
||||
`repeating_${section}_${id}_mdc`,
|
||||
]);
|
||||
const attrs = {};
|
||||
const a = await getAttrsAsync(attrKeys);
|
||||
@@ -19,21 +19,49 @@ async function applyDamageToNextActiveArmor(section, damage) {
|
||||
}, []);
|
||||
|
||||
let i = 0;
|
||||
for (const id of activeIds) {
|
||||
currentMdc = +a[`repeating_${section}_${id}_currentmdc`] - damageCarry;
|
||||
let activeRowId;
|
||||
for (activeRowId of activeIds) {
|
||||
currentMdc = +a[`repeating_${section}_${activeRowId}_mdc`] - damageCarry;
|
||||
if (currentMdc < 0 && ++i < activeIds.length) {
|
||||
attrs[`repeating_${section}_${id}_currentmdc`] = 0;
|
||||
attrs[`repeating_${section}_${activeRowId}_mdc`] = 0;
|
||||
damageCarry = Math.abs(currentMdc);
|
||||
} else {
|
||||
attrs[`repeating_${section}_${id}_currentmdc`] = currentMdc;
|
||||
attrs[`repeating_${section}_${activeRowId}_mdc`] = currentMdc;
|
||||
break;
|
||||
}
|
||||
}
|
||||
await setAttrsAsync(attrs);
|
||||
await updateActiveArmor(activeRowId);
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates the global active_armor attributes with the values
|
||||
* from the currently active repeating armor row
|
||||
* @param {string} rowId Row ID of the active armor row
|
||||
*/
|
||||
async function updateActiveArmor(rowId) {
|
||||
console.log("updateActiveArmor", ARMOR_KEYS.length);
|
||||
const attrKeys = ARMOR_KEYS.map((key) => `repeating_armor_${rowId}_${key}`);
|
||||
const a = await getAttrsAsync(attrKeys);
|
||||
const attrs = ARMOR_KEYS.reduce((acc, cur) => {
|
||||
if (a[`repeating_armor_${rowId}_${cur}`] !== undefined) {
|
||||
if (cur === "mdc") {
|
||||
acc[`active_armor_mdc`] = a[`repeating_armor_${rowId}_${cur}`];
|
||||
} else if (cur === "mdc_max") {
|
||||
acc[`active_armor_mdc_max`] = a[`repeating_armor_${rowId}_${cur}`];
|
||||
} else {
|
||||
acc[`active_armor_${cur}`] = a[`repeating_armor_${rowId}_${cur}`];
|
||||
acc[`active_armor_${cur}_max`] = a[`repeating_armor_${rowId}_${cur}`];
|
||||
}
|
||||
}
|
||||
return acc;
|
||||
}, {});
|
||||
console.log(attrs);
|
||||
await setAttrsAsync(attrs);
|
||||
}
|
||||
|
||||
on("change:repeating_armor:movementpenalty", async (e) => {
|
||||
recalculateMovement();
|
||||
await recalculateMovement();
|
||||
});
|
||||
|
||||
on("clicked:armorapplydamage", async (e) => {
|
||||
@@ -45,11 +73,13 @@ on("clicked:armorapplydamage", async (e) => {
|
||||
on("clicked:repeating_armor:resetmdc", async (e) => {
|
||||
console.log("clicked:repeating_armor:resetmdc", e);
|
||||
const [r, section, rowId] = e.sourceAttribute.split("_");
|
||||
const a = await getAttrsAsync([`repeating_armor_${rowId}_basemdc`]);
|
||||
const a = await getAttrsAsync([`repeating_armor_${rowId}_mdc_max`]);
|
||||
await setAttrsAsync({
|
||||
[`repeating_armor_${rowId}_currentmdc`]:
|
||||
a[`repeating_armor_${rowId}_basemdc`],
|
||||
[`repeating_armor_${rowId}_mdc`]: a[`repeating_armor_${rowId}_mdc_max`],
|
||||
});
|
||||
});
|
||||
|
||||
on("change:repeating_armor:is_active", (e) => recalculateMovement());
|
||||
on("change:repeating_armor:is_active", async (e) => {
|
||||
await recalculateMovement();
|
||||
await applyDamageToNextActiveArmor("armor", 0);
|
||||
});
|
||||
|
||||
@@ -94,14 +94,17 @@ async function repeatingAbsoluteAttributes(rowIds, destinationPrefix) {
|
||||
rowIds.forEach((rowId) => {
|
||||
const rowFieldAbs = a[`repeating_bonuses_${rowId}_${field}_abs`];
|
||||
if (Boolean(Number(rowFieldAbs)) == true) {
|
||||
rowFieldValue = a[`repeating_bonuses_${rowId}_mod_${field}`];
|
||||
fieldAbsValue =
|
||||
fieldAbsValue > rowFieldValue ? fieldAbsValue : rowFieldValue;
|
||||
rowFieldValue = +a[`repeating_bonuses_${rowId}_mod_${field}`];
|
||||
fieldAbsValue = +(fieldAbsValue > rowFieldValue
|
||||
? fieldAbsValue
|
||||
: rowFieldValue);
|
||||
}
|
||||
});
|
||||
if (fieldAbsValue) {
|
||||
// compare the modified absolute value against the original attribute
|
||||
const coreValue = (await getAttrsAsync([field]))[field];
|
||||
// const coreValue = (await getAttrsAsync([field]))[field];
|
||||
const { [field]: rawCoreValue } = await getAttrsAsync([field]);
|
||||
const coreValue = +rawCoreValue;
|
||||
const newValue = coreValue > fieldAbsValue ? coreValue : fieldAbsValue;
|
||||
const attr = {
|
||||
[`${destinationPrefix}_mod_${field}`]: newValue,
|
||||
@@ -191,6 +194,7 @@ async function combineBonuses(rowIds, destinationPrefix) {
|
||||
"initiative",
|
||||
"pull",
|
||||
"roll",
|
||||
"breakfall",
|
||||
"strike_range",
|
||||
"strike_range_single",
|
||||
"strike_range_burst",
|
||||
@@ -210,6 +214,9 @@ async function combineBonuses(rowIds, destinationPrefix) {
|
||||
"dodge_motion",
|
||||
"dodge_underwater",
|
||||
"flipthrow",
|
||||
"tackle",
|
||||
"leghook",
|
||||
"backwardsweepkick",
|
||||
];
|
||||
|
||||
const ppExtras = ["disarm", "entangle"];
|
||||
|
||||
@@ -0,0 +1,66 @@
|
||||
async function updateHandToHands(section, newCharacterLevel) {
|
||||
const ids = await getSectionIDsAsync(section);
|
||||
const attrNames = ids.map((id) => `repeating_${section}_${id}_name`);
|
||||
const a = await getAttrsAsync(attrNames);
|
||||
for (rowId of ids) {
|
||||
const rowPrefix = `repeating_${section}_${rowId}`;
|
||||
await calculateH2h(
|
||||
section,
|
||||
rowId,
|
||||
rowPrefix,
|
||||
a[`${rowPrefix}_name`],
|
||||
newCharacterLevel
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
async function calculateH2h(section, rowId, keyPrefix, name, level) {
|
||||
console.log("calculateH2h", name, keyPrefix, level);
|
||||
const lowerCaseName = name.toLowerCase();
|
||||
if (!Object.keys(H2H).includes(lowerCaseName)) {
|
||||
// Exit if this isn't one of the pre-defined skills
|
||||
return;
|
||||
}
|
||||
const attrs = {};
|
||||
const levelBonuses = H2H[lowerCaseName].slice(0, level);
|
||||
const totalBonuses = mergeAndAddObjects(levelBonuses);
|
||||
console.log(totalBonuses);
|
||||
for (const [key, val] of Object.entries(totalBonuses)) {
|
||||
attrs[`${keyPrefix}_${key}`] = val;
|
||||
}
|
||||
attrs[`${keyPrefix}_level`] = level;
|
||||
console.log(attrs);
|
||||
await setAttrsAsync(attrs);
|
||||
await addModifierToBonusesAsync(section, rowId);
|
||||
}
|
||||
|
||||
on("change:repeating_h2h", async (e) => {
|
||||
/**
|
||||
* Allow custom Hand to Hand
|
||||
*/
|
||||
if (e.sourceType === "sheetworker") {
|
||||
return;
|
||||
}
|
||||
|
||||
const [r, section, rowId] = e.sourceAttribute.split("_");
|
||||
const rowPrefix = `repeating_${section}_${rowId}`;
|
||||
const { [`${rowPrefix}_name`]: h2hName } = await getAttrsAsync([
|
||||
`${rowPrefix}_name`,
|
||||
]);
|
||||
const lowerCaseName = h2hName.toLowerCase();
|
||||
if (Object.keys(H2H).includes(lowerCaseName)) {
|
||||
return;
|
||||
}
|
||||
|
||||
console.log("change:repeating_h2h", e);
|
||||
await addModifierToBonusesAsync(section, rowId);
|
||||
});
|
||||
|
||||
on("change:repeating_h2h:name change:repeating_h2h:level", async (e) => {
|
||||
console.log("change:repeating_h2h:name change:repeating_h2h:level", e);
|
||||
const [r, section, rowId] = e.sourceAttribute.split("_");
|
||||
const rowPrefix = `repeating_${section}_${rowId}`;
|
||||
const { [`${rowPrefix}_level`]: level, [`${rowPrefix}_name`]: h2hName } =
|
||||
await getAttrsAsync([`${rowPrefix}_level`, `${rowPrefix}_name`]);
|
||||
await calculateH2h(section, rowId, rowPrefix, h2hName, +level);
|
||||
});
|
||||
File diff suppressed because it is too large
Load Diff
@@ -33,6 +33,7 @@
|
||||
on("clicked:export", async (e) => {
|
||||
console.log("export", e);
|
||||
const attrs = {};
|
||||
attrs.h2h = await getRepeatingRowsAsync("h2h");
|
||||
attrs.wp = await getRepeatingRowsAsync("wp");
|
||||
attrs.wpmodern = await getRepeatingRowsAsync("wpmodern");
|
||||
attrs.skills = await getRepeatingRowsAsync("skills");
|
||||
@@ -98,6 +99,7 @@
|
||||
// importAll(data);
|
||||
// return;
|
||||
await setAttrsAsync(data.core);
|
||||
await setRepeatingRowsAsync("h2h", data.h2h);
|
||||
await setRepeatingRowsAsync("wp", data.wp);
|
||||
await setRepeatingRowsAsync("wpmodern", data.wpmodern);
|
||||
await setRepeatingRowsAsync("skills", data.skills);
|
||||
|
||||
@@ -12,6 +12,21 @@ async function migrateAttributes() {
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
version: "1.2.0",
|
||||
attributes: [
|
||||
{
|
||||
repeating: ["armor"],
|
||||
from: "currentmdc",
|
||||
to: ["mdc"],
|
||||
},
|
||||
{
|
||||
repeating: ["armor"],
|
||||
from: "basemdc",
|
||||
to: ["mdc_max"],
|
||||
},
|
||||
],
|
||||
},
|
||||
];
|
||||
|
||||
const { version, migrated } = await getAttrsAsync(["version", "migrated"]);
|
||||
|
||||
@@ -3,6 +3,24 @@ async function getDefaultProfileID() {
|
||||
return default_profile;
|
||||
}
|
||||
|
||||
async function updateActiveProfile(rowId) {
|
||||
console.log("updateActiveProfile", REPEATING_BONUS_KEYS.length);
|
||||
const attrKeys = REPEATING_BONUS_KEYS.map(
|
||||
(key) => `repeating_profiles_${rowId}_${key}`
|
||||
);
|
||||
const a = await getAttrsAsync(attrKeys);
|
||||
const attrs = REPEATING_BONUS_KEYS.reduce((acc, cur, idx) => {
|
||||
if (a[`repeating_profiles_${rowId}_${cur}`] !== undefined) {
|
||||
acc[`active_profile_${cur}`] = a[`repeating_profiles_${rowId}_${cur}`];
|
||||
acc[`active_profile_${cur}_max`] =
|
||||
a[`repeating_profiles_${rowId}_${cur}`];
|
||||
}
|
||||
return acc;
|
||||
}, {});
|
||||
console.log(attrs);
|
||||
await setAttrsAsync(attrs);
|
||||
}
|
||||
|
||||
async function updateProfile(rowId) {
|
||||
const bonusIds = (
|
||||
await getAttrsAsync(["repeating_profiles_bonus_ids"])
|
||||
@@ -20,6 +38,10 @@ async function updateProfile(rowId) {
|
||||
[`repeating_profiles_${rowId}_rowid`]: `repeating_profiles_${rowId}_`,
|
||||
});
|
||||
await combineBonuses(bonusIds, `repeating_profiles_${rowId}`);
|
||||
const isActive = await isDefault("profiles", rowId);
|
||||
if (isActive) {
|
||||
await updateActiveProfile(rowId);
|
||||
}
|
||||
}
|
||||
|
||||
async function setSingleAttributeFromDefaultProfile(attrName, profileAttrName) {
|
||||
@@ -124,6 +146,7 @@ on("change:default_profile", async (e) => {
|
||||
const a = await getAttrsAsync([`${prefix}_mdc`]);
|
||||
await setAttrsAsync({ default_mdc: a[`${prefix}_mdc`] });
|
||||
await updateSkills();
|
||||
await updateActiveProfile(e.newValue);
|
||||
});
|
||||
|
||||
on("change:repeating_profiles:is_default", async (e) => {
|
||||
@@ -212,32 +235,10 @@ on("clicked:getdefaultprofile", async (e) => {
|
||||
console.log(a);
|
||||
});
|
||||
|
||||
/**
|
||||
* Add a token {attack} times to the Turn Tracker in order against other tokens.
|
||||
* Requires API script access.
|
||||
* For use on an action button.
|
||||
*
|
||||
* [[d20+@{selected|repeating_profiles_-MibcwHG5hZXUJn6A7OG_initiative} &{tracker}]]
|
||||
*/
|
||||
async function palladiumAddToTurnTracker(e) {
|
||||
const [r, section, rowId] = e.sourceAttribute.split("_");
|
||||
const rowPrefix = `${r}_${section}_${rowId}`;
|
||||
const {
|
||||
[`${rowPrefix}_initiative`]: init,
|
||||
[`${rowPrefix}_attacks`]: attacks,
|
||||
} = await getAttrsAsync([`${rowPrefix}_initiative`, `${rowPrefix}_attacks`]);
|
||||
const roll = await startRoll(
|
||||
`&{template:test} {{name=Test}} {{roll1=[[1d20]]}}`
|
||||
on("clicked:active_profile_initiative_turntracker", async (e) => {
|
||||
console.log("clicked:active_profile_initiative_turntracker", e);
|
||||
await palladiumAddToTurnTracker(
|
||||
"active_profile_initiative",
|
||||
"active_profile_attacks"
|
||||
);
|
||||
console.log(roll);
|
||||
const computed = roll.results.roll1.result + init;
|
||||
console.log(computed);
|
||||
finishRoll(roll.rollId, {
|
||||
roll1: computed,
|
||||
});
|
||||
const addToTracker = await startRoll(`[[[[${computed}]] &{tracker}]]`);
|
||||
finishRoll(addToTracker.rollId);
|
||||
// https://app.roll20.net/forum/post/6817409/multiple-initiative-values-for-a-single-character/?pageforid=6817748#post-6817748
|
||||
const dupeTracker = await startRoll(`!dup-turn ${attacks}`);
|
||||
finishRoll(dupeTracker.rollId);
|
||||
}
|
||||
});
|
||||
|
||||
@@ -105,7 +105,9 @@ async function updateSkillLevels(newCharacterLevel, oldCharacterLevel) {
|
||||
|
||||
on("change:repeating_skills", async (e) => {
|
||||
console.log("change:repeating_skills", e);
|
||||
if (e.sourceType === "sheetworker") return;
|
||||
if (e.sourceType === "sheetworker" && !e.sourceAttribute.endsWith("_level")) {
|
||||
return;
|
||||
}
|
||||
if (e.sourceAttribute.endsWith("_name")) return;
|
||||
const sourceParts = e.sourceAttribute.split("_");
|
||||
// Return if no attribute is changed and it's the row itself
|
||||
|
||||
@@ -258,7 +258,11 @@ function mergeAndAddObjects(data) {
|
||||
data.forEach((obj) => {
|
||||
for (let [key, value] of Object.entries(obj)) {
|
||||
if (result[key]) {
|
||||
result[key] += value;
|
||||
if (key === "critical" || key === "knockout" || key === "deathblow") {
|
||||
result[key] = result[key] > value ? value : result[key];
|
||||
} else {
|
||||
result[key] += value;
|
||||
}
|
||||
} else {
|
||||
result[key] = value;
|
||||
}
|
||||
@@ -280,3 +284,34 @@ async function getSectionIDsOrderedAsync(sectionName) {
|
||||
];
|
||||
return ids;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a token {attack} times to the Turn Tracker in order against other tokens.
|
||||
* Requires API script access.
|
||||
* For use on an action button.
|
||||
*
|
||||
* [[d20+@{selected|repeating_profiles_-MibcwHG5hZXUJn6A7OG_initiative} &{tracker}]]
|
||||
*/
|
||||
async function palladiumAddToTurnTracker(initKey, attacksKey) {
|
||||
const { [initKey]: init, [attacksKey]: attacks } = await getAttrsAsync([
|
||||
initKey,
|
||||
attacksKey,
|
||||
]);
|
||||
const initString = init > 0 ? `+${init}` : `${init}`;
|
||||
const roll = await startRoll(
|
||||
`&{template:initiative} {{title=@{selected|character_name} rolls initiative!}} {{diceroll=[[1d20]]}} {{modifier=${initString}}}`
|
||||
);
|
||||
console.log(roll);
|
||||
const computed = roll.results.diceroll.result + init;
|
||||
console.log(computed);
|
||||
finishRoll(roll.rollId, {
|
||||
diceroll: computed,
|
||||
});
|
||||
const addToTracker = await startRoll(
|
||||
`Setting @{selected|character_name}'s initiative to [[[[${computed}]] &{tracker}]] in the Turn Tracker.`
|
||||
);
|
||||
finishRoll(addToTracker.rollId);
|
||||
// https://app.roll20.net/forum/post/6817409/multiple-initiative-values-for-a-single-character/?pageforid=6817748#post-6817748
|
||||
const dupeTracker = await startRoll(`!dup-turn ${attacks}`);
|
||||
finishRoll(dupeTracker.rollId);
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -3,12 +3,12 @@
|
||||
/></label>
|
||||
<input type="text" placeholder="Armor Name" name="attr_name" />
|
||||
<input type="number" placeholder="%" name="attr_movementpenalty" />
|
||||
<input type="number" placeholder="Base MDC" name="attr_basemdc" value="0" />
|
||||
<input type="number" placeholder="Base MDC" name="attr_mdc_max" value="0" />
|
||||
<input
|
||||
type="number"
|
||||
class="danger"
|
||||
placeholder="Current MDC"
|
||||
name="attr_currentmdc"
|
||||
name="attr_mdc"
|
||||
value="0"
|
||||
/>
|
||||
<button type="action" name="act_resetmdc">Reset MDC</button>
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
<option value="ft"></option>
|
||||
<option value="yd"></option>
|
||||
<option value="mi"></option>
|
||||
<option value="ly"></option>
|
||||
</datalist>
|
||||
<datalist id="damage-units">
|
||||
<option value="MDC"></option>
|
||||
@@ -30,14 +31,14 @@
|
||||
<option value="per year"></option>
|
||||
</datalist>
|
||||
<datalist id="spell-schools">
|
||||
<option value="Invocation"></option>
|
||||
<option value="Elemental"></option>
|
||||
<option value="Invocation"></option>
|
||||
<option value="Necromancy"></option>
|
||||
<option value="Space"></option>
|
||||
<option value="Temporal"></option>
|
||||
</datalist>
|
||||
<datalist id="combat-modifiers">
|
||||
<datalist id="modifiers">
|
||||
<option value="Custom - Type Your Own"></option>
|
||||
<option value="Hand to Hand: Basic"></option>
|
||||
<option value="Hand to Hand: Dragon"></option>
|
||||
<option value="RPA Basic"></option>
|
||||
<option value="RPA Elite: Glitter Boy"></option>
|
||||
<option value="Weapon: NG-P7"></option>
|
||||
@@ -49,6 +50,30 @@
|
||||
<option value="Psionic: Sixth Sense"></option>
|
||||
<option value="Magic Amulet: Charm"></option>
|
||||
</datalist>
|
||||
<datalist id="hand-to-hand">
|
||||
<option value="Hand to Hand: Basic"></option>
|
||||
<option value="Hand to Hand: Expert"></option>
|
||||
<option value="Hand to Hand: Martial Arts"></option>
|
||||
<option value="Hand to Hand: Assassin"></option>
|
||||
<option value="Hand to Hand: Commando"></option>
|
||||
<option value="Hand to Hand: Aikido"></option>
|
||||
<option value="Hand to Hand: Judo"></option>
|
||||
<option value="Hand to Hand: Jujitsu"></option>
|
||||
<option value="Hand to Hand: Karate"></option>
|
||||
<option value="Hand to Hand: Kendo"></option>
|
||||
<option value="Hand to Hand: Ninjitsu"></option>
|
||||
<option value="Hand to Hand: Samurai"></option>
|
||||
<option value="Hand to Hand: Teng-Jutsu"></option>
|
||||
<option value="Hand to Hand: Dragon"></option>
|
||||
<option value="RPA Combat: Basic"></option>
|
||||
<option value="RPA Combat: Flying Power Armor"></option>
|
||||
<option value="RPA Combat: Ground-Based Power Armor"></option>
|
||||
<option value="RPA Combat: Heavy Vehicular Style Robots"></option>
|
||||
<option value="RPA Combat: Heavy Ground Robots"></option>
|
||||
<option value="RPA Combat: Light Ground Robots"></option>
|
||||
<option value="RPA Combat: Glitter Boy"></option>
|
||||
<option value="RPA Combat: Silverhawk"></option>
|
||||
</datalist>
|
||||
<datalist id="weapon-proficiencies">
|
||||
<option value="W.P. Archery"></option>
|
||||
<option value="W.P. Axe"></option>
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
<span name="attr_percentage"></span>
|
||||
<button
|
||||
type="roll"
|
||||
value="&{template:skill} {{title=@{character_name} uses @{name}}} {{target=[[{@{percentage}+?{Modifier?|0},98}kl1]]}} {{roll=[[d100]]}}"
|
||||
value="&{template:skill} {{title=@{character_name} uses @{name}}} {{target=[[{@{percentage} + [[ {{ @{opt_iq_bonus},0 }dl1 } * @{active_profile_mod_iq_bonus} ]] +?{Modifier?|0},98}kl1]]}} {{roll=[[d100]]}}"
|
||||
name="roll_spell_skill"
|
||||
></button>
|
||||
<input type="number" value="0" name="attr_ppecost" />
|
||||
|
||||
@@ -1,7 +1,306 @@
|
||||
<div class="r-tab-content">
|
||||
<div class="importexport">
|
||||
<div class="options">
|
||||
<details>
|
||||
<summary><b>Instructions</b></summary>
|
||||
<p>
|
||||
Welcome to the Rifts Character Sheet on Roll20. Note that whenever you
|
||||
see this icon <b>ⓘ</b> it means you can click it and expand the
|
||||
row in order to see and input more detail. Get used to this - you will
|
||||
use it a lot.
|
||||
</p>
|
||||
<p>
|
||||
Profiles are the key to this sheet. Profiles can consist of any number
|
||||
of abilities, magic, psionics, weapons, gear, etc. Anything that can
|
||||
mechanically affect your character can be added to a Profile. Some
|
||||
examples of Profiles might be:
|
||||
</p>
|
||||
<ul>
|
||||
<li>Walking around town (no armor, no MDC weapons).</li>
|
||||
<li>Battle ready in a Glitter Boy.</li>
|
||||
<li>
|
||||
Prepped for battle with a number of active spells like Armor of Ithan
|
||||
and Superhuman Speed.
|
||||
</li>
|
||||
</ul>
|
||||
<p>
|
||||
But before you can create a Profile, you need to populate your Combat
|
||||
Skills, Abilities, Magic, Psionics, and Modifiers. I'll explain what
|
||||
each of those tabs is for (not necessarily in the order they appear in
|
||||
the sheet), and then I'll explain the simpler first three tabs - Core,
|
||||
Skills, and Equipment.
|
||||
</p>
|
||||
<h3>Modifiers</h3>
|
||||
<p>
|
||||
Modifiers are those crunchy bits of Palladium games. Combat bonuses,
|
||||
savings throws, attribute bonuses, etc. The sheet makes use of Modifiers
|
||||
in a couple of ways.
|
||||
</p>
|
||||
<ol>
|
||||
<li>
|
||||
A Modifiers tab lets you add generic modifiers. Some examples of items
|
||||
that could be added to the Modifiers tab are:
|
||||
<ul>
|
||||
<li>A magic amulet that gives a +1 vs. magic.</li>
|
||||
<li>
|
||||
Boxing, which adds to your PS, attacks, parry, dodge, roll, and
|
||||
SDC.
|
||||
</li>
|
||||
<li>OCC/RCC/Race bonuses.</li>
|
||||
<li>An NG-P7 that inflicts 1D4*10 MD.</li>
|
||||
<li>
|
||||
A vibro-sword daisho with 3D6 MD main hand and 2D6 MD off hand
|
||||
swords.
|
||||
</li>
|
||||
</ul>
|
||||
The list goes on. Primarily this section is for static things that
|
||||
don't have an off switch. That doesn't mean your character is always
|
||||
using these, but they don't require PPE/ISP to activate, and they
|
||||
don't increase per level. Every row you add to the Modifiers tab will
|
||||
show up in the <span class="picker-title">Modifier Picker</span> (more
|
||||
on that later).<br /><br />
|
||||
</li>
|
||||
<li>
|
||||
Modifiers are also a sub-section of Abilities, Magic, and Psionics.
|
||||
When you add one of those and expand it, you'll see that the first
|
||||
section is dedicated to how the power increases as you level, but the
|
||||
section below that is exactly the same as the Modifiers tab. Some
|
||||
examples of how you'd use these tabs would be:
|
||||
<ul>
|
||||
<li>
|
||||
Firing a laser beam from your eyes that gives +2 to strike and
|
||||
does 1D6 MD per level.
|
||||
</li>
|
||||
<li>
|
||||
A spell like Call Lightning that costs PPE and does increasing
|
||||
damage as you level.
|
||||
</li>
|
||||
<li>
|
||||
A spell like Superhuman Speed that costs PPE, provides static
|
||||
bonuses, and increases its duration as you level.
|
||||
</li>
|
||||
<li>
|
||||
A Techno-Wizard gun that costs PPE to activate and inflicts a
|
||||
static amount of damage.
|
||||
</li>
|
||||
</ul>
|
||||
In these cases, the top section would be used for the per-level values
|
||||
(if applicable), and the Modifiers section would be used for the
|
||||
static bonuses. If a power has a range (or whatever) that doesn't
|
||||
increase per level, just set that value as Starting and leave Per
|
||||
Level at 0.
|
||||
</li>
|
||||
</ol>
|
||||
<p>
|
||||
On some fields in Modifiers, you'll see this button
|
||||
<label class="abs" title="Relative or absolute value"
|
||||
><input type="checkbox" value="1" /><span></span></label
|
||||
>. By default, when the "+" is dark, it indicates that the value is to
|
||||
be additive. So, for example, if I have a Modifier for a gun that gives
|
||||
me +1 to strike, and I have a Weapon Proficiency for that gun, those
|
||||
will be added together. However, if I cast Superhuman Speed, it gives me
|
||||
an absolute Spd value of of 44. In this case it's not additive - it just
|
||||
is the value - so press the button to make the "+" grey/inactive -
|
||||
<label class="abs" title="Relative or absolute value"
|
||||
><input type="checkbox" value="1" checked /><span></span></label
|
||||
>.
|
||||
</p>
|
||||
<h3>Abilities, Magic, & Psionics</h3>
|
||||
<p>
|
||||
As mentioned above, these all contain Modifiers, but each also contains
|
||||
some additional fields that are specific to the type of power, though
|
||||
all are very similar.
|
||||
</p>
|
||||
<p>
|
||||
In all cases there are fields for range, duration, damage, D.C., and
|
||||
skill. Where they differ is that Psionics has an ISP field, Magic has a
|
||||
PPE field, and Abilities have a frequency (how often the ability can be
|
||||
performed) field. Magic and Psionics also have <button>Cast</button> /
|
||||
<button>Use</button> buttons respectively, which will deduct the PPE/ISP
|
||||
from your total. The total is pulled from your Active Profile (more on
|
||||
that later).
|
||||
</p>
|
||||
<p>
|
||||
Please note that you can track powers here that don't apply any
|
||||
Modifiers as well. Magic Pigeon, for example, could be tracked and the
|
||||
PPE and duration could be filled in. Because of this, not all powers are
|
||||
automatically added to the
|
||||
<span class="picker-title">Modifier Picker</span>. If you enter a power
|
||||
that <i>does</i> have Modifiers, you should check the box that says
|
||||
<label class="addtobonuses"
|
||||
><input type="checkbox" value="1" disabled /> Add to Profiles →
|
||||
<span class="picker-title">Modifier Picker</span></label
|
||||
>
|
||||
so that it's available to be added to a Profile.
|
||||
</p>
|
||||
<h3>Combat Skills</h3>
|
||||
<p>
|
||||
There are 2 main sections on the Combat Skills tab -
|
||||
<b>Hand to Hand & RPA Combat</b>, and <b>Weapon Proficiencies</b>. In
|
||||
both of these sections just add a new row and select from the list. It
|
||||
will auto-calculate the bonuses based on the level of the entry. If
|
||||
you're using a Hand to Hand or Weapon Proficiency that isn't part of
|
||||
Rifts, just type the name and fill in the bonuses yourself. A couple
|
||||
things to make note of if you go the manual route:
|
||||
</p>
|
||||
<ul>
|
||||
<li>You'll need to adjust the bonuses manually as you level up.</li>
|
||||
<li>
|
||||
Don't name it exactly the same as any of the items in the list, or the
|
||||
automatic level calculator will overwrite your changes.
|
||||
</li>
|
||||
<li>
|
||||
Names are not case sensitive, so "W.P. Sword" is the same as "w.p.
|
||||
sWORD".
|
||||
</li>
|
||||
</ul>
|
||||
<h3>Profiles</h3>
|
||||
<p>
|
||||
Here we get to the golden goose. The Profiles tab has 4 sections -
|
||||
Active, Armor, Profiles, and Modifier Picker. Unintuitively, I'm going
|
||||
to start at the bottom and work my way up.
|
||||
</p>
|
||||
<h4>Modifier Picker</h4>
|
||||
<p>
|
||||
The Modifier Picker is where all of the Abilities, Magic, Psionics (that
|
||||
you've checked the
|
||||
<label class="addtobonuses"
|
||||
><input type="checkbox" value="1" disabled /> Add to Profiles →
|
||||
<span class="picker-title">Modifier Picker</span></label
|
||||
>
|
||||
checkbox), and Modifiers show up in a list. You pick and choose / mix
|
||||
and match various Modifiers to create Profiles.
|
||||
</p>
|
||||
<h4>Profiles</h4>
|
||||
<p>
|
||||
Add a Profile and give it a name. Next select some Modifiers from the
|
||||
<span class="picker-title">Modifier Picker</span>, and click
|
||||
<button>
|
||||
Apply
|
||||
<span class="picker-title">Picked Modifiers</span>
|
||||
←</button
|
||||
>. This will attach all of the Modifiers have you have selected to the
|
||||
current Profile, and add up all of the bonuses.
|
||||
</p>
|
||||
<p>
|
||||
<b
|
||||
>Note that when adding new Modifiers to a Profile, it's a good idea to
|
||||
wait a few seconds, and then click <button>Refresh ⟳</button>.
|
||||
Due to the asynchronous nature of Roll20, sometimes bonuses get
|
||||
calculated before attributes (and their associated bonuses) get
|
||||
updated.
|
||||
</b>
|
||||
</p>
|
||||
<p>
|
||||
If you want to copy a Profile so that you can use it as the baseline for
|
||||
a new Profile, click
|
||||
<button>
|
||||
Replace <span class="picker-title">Picked Modifiers</span> using this
|
||||
profile →</button
|
||||
>. This will check off all of the Modifiers in the
|
||||
<span class="picker-title">Modifier Picker</span> that correspond with
|
||||
the selected Profile.
|
||||
</p>
|
||||
<p>
|
||||
Setting a Profile as Active makes it appear in the Active section (see
|
||||
below for details). If a Profile is already active and you update it in
|
||||
some way, press <button>Refresh ⟳</button> to update the data in
|
||||
the Active section.
|
||||
</p>
|
||||
<p>
|
||||
PP bonus is added to Strike, Parry, Throw, and all the Dodges. It is
|
||||
added to Disarm and Entangle if the option is enabled. Damage adds
|
||||
everything together as a rollable field, and prompts to add Punch or PS
|
||||
damage. Crit/Knockout/Death Blow use the lowest of the available options
|
||||
(ex. Crit: 17 is better than Crit: 19).
|
||||
</p>
|
||||
<h4>Armor</h4>
|
||||
<p>
|
||||
Armor is relatively straightforward. Enter as many different armor types
|
||||
as you have available, providing Name, Movement Modifier %, and Base
|
||||
MDC. Armor stacks, so you can have more than one Active Armor at a time.
|
||||
When you enter a value in the Damage field and press
|
||||
<button>Apply Damage</button>, that value is subtracted from the first
|
||||
Active Armor in the list. If it's already at 0, it will be subtracted
|
||||
from the next, and so on. If the last Active Armor is below zero, you're
|
||||
dead.
|
||||
</p>
|
||||
<p>
|
||||
Pressing
|
||||
<button>Reset MDC</button> will reset the Current MDC to the Base MDC
|
||||
value.
|
||||
</p>
|
||||
<h4>Active</h4>
|
||||
<p>
|
||||
The Active section shows a consolidated view of your active Profile and
|
||||
Armor. This is especially useful for assigning "active_armor_" or
|
||||
"active_profile_" attributes to your Token Bar and for use in other
|
||||
macros. By referencing the "active_" fields, when you switch Profiles,
|
||||
the macros stay the same, but the values update accordingly.
|
||||
</p>
|
||||
<p>
|
||||
The Active Armor shows the armor that last took damage. If it goes below
|
||||
zero and there's another Active Armor in the list, the Armor displayed
|
||||
in the Active section will change to that one. Note that you can also
|
||||
apply/track damage here.
|
||||
</p>
|
||||
<h3>Core</h3>
|
||||
<p>
|
||||
The Core tabs is mostly just informational. Attribute bonuses
|
||||
auto-calculate, so just enter your attributes without worrying about the
|
||||
bonuses. Beneath those, Hit Points through Perception must be entered
|
||||
manually, likely as the outcome of some dice rolling. Movement is
|
||||
calculated automatically based on the Spd attribute in your Active
|
||||
Profile.
|
||||
</p>
|
||||
<h3>Skills</h3>
|
||||
<p>
|
||||
Skill Total is calculated automatically. IQ Bonus of your Active Profile
|
||||
is added automatically. New skills start at level 1. All skills increase
|
||||
in level as your character does, and the total is recalculated. Ex. if
|
||||
you select Computer Programming when you're level 1, it will continue to
|
||||
match your level as you increase. If at level 3 you select Computer
|
||||
Hacking, it will start at level 1, and when you reach level 4, Computer
|
||||
Hacking will become level 2. You can adjust individual skill levels
|
||||
manually as well - they will always remain the same distance from your
|
||||
character level as it changes.
|
||||
</p>
|
||||
<h3>Equipment</h3>
|
||||
<p>
|
||||
Just some free-form equipment tracking, with a few fields for different
|
||||
currencies. Any gear that modifies your character in any way should be
|
||||
tracked in Modifiers or one of the other Powers tabs.
|
||||
</p>
|
||||
<h3>Options</h3>
|
||||
<p>
|
||||
This tab. There are a number of options you can select that will affect
|
||||
dice rolls, calculations, and other mechanics in the sheet. You can also
|
||||
export/import your character in JSON format so that you can easily move
|
||||
characters between games.
|
||||
</p>
|
||||
<p>
|
||||
<b>Note that importing a character can take a few minutes.</b> Again,
|
||||
due to the asynchronous nature of Roll20, it's difficult to
|
||||
programmatically know when the import is complete. The best way to know
|
||||
for sure is to open your browser console and wait until no messages have
|
||||
appeared for at least 30 seconds to a minute.
|
||||
</p>
|
||||
<h3>General Info</h3>
|
||||
<p>
|
||||
Each repeating row includes a read-only Row ID that can be used in
|
||||
macros.
|
||||
</p>
|
||||
<p>
|
||||
I intended to have the Description field within
|
||||
skills/abilities/magic/psionics to be used for copy/pasting the book
|
||||
description so that it's easier for both the player and the GM to find.
|
||||
However I've found that this has a tendency to slow down Roll20/the
|
||||
browser. So do so at your own risk.
|
||||
</p>
|
||||
</details>
|
||||
<p>Click <b>Instructions</b> for detailed instructions.</p>
|
||||
<hr />
|
||||
<h3>Options</h3>
|
||||
<input type="hidden" name="attr_version" value="1.1.0" />
|
||||
<input type="hidden" name="attr_version" value="1.2.0" />
|
||||
<label>Version: <span name="attr_version"></span></label>
|
||||
<input type="hidden" name="attr_migrated" value="0" />
|
||||
<label>Migrated: <span name="attr_migrated"></span></label>
|
||||
@@ -10,6 +309,18 @@
|
||||
Mode</label
|
||||
>
|
||||
<hr />
|
||||
<label
|
||||
><input
|
||||
type="checkbox"
|
||||
name="attr_opt_dodge_penalty"
|
||||
value="?{Dodging gunfire?|> 50 feet,0|10-50 feet,5|< 10 feet,10}"
|
||||
/>
|
||||
Apply Rifts: Ultimate Edition penalties to dodging gunfire</label
|
||||
>
|
||||
<p>
|
||||
In Rifts: Ultimate Edition, characters are -10 to dodge gunfire at less
|
||||
than 10 feet, and -5 between 10 and 50 feet.
|
||||
</p>
|
||||
<label
|
||||
><input type="checkbox" name="attr_opt_pp_extras" value="1" /> Add PP
|
||||
bonus to Disarm and Entangle</label
|
||||
@@ -45,6 +356,15 @@
|
||||
If a character has a critical on 19-20 or 18-20 from their Hand to Hand
|
||||
skill, apply this to modern weapons as well.
|
||||
</p>
|
||||
<label
|
||||
><input type="checkbox" name="attr_opt_iq_bonus" value="1" /> Apply IQ
|
||||
bonus to skill-based abilities</label
|
||||
>
|
||||
<p>
|
||||
Adds IQ bonus to abilities/magic/psionic that use a skill-based
|
||||
percentage. Some examples include, but are not limited to, Telemechanics,
|
||||
Object Read, Locate, etc.
|
||||
</p>
|
||||
<hr />
|
||||
<h3>Import/Export</h3>
|
||||
<details>
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
<span name="attr_percentage"></span>
|
||||
<button
|
||||
type="roll"
|
||||
value="&{template:skill} {{title=@{character_name} uses @{name}}} {{target=[[{@{percentage}+?{Modifier?|0},98}kl1]]}} {{roll=[[d100]]}}"
|
||||
value="&{template:skill} {{title=@{character_name} uses @{name}}} {{target=[[{@{percentage} + [[ {{ @{opt_iq_bonus},0 }dl1 } * @{active_profile_mod_iq_bonus} ]] +?{Modifier?|0},98}kl1]]}} {{roll=[[d100]]}}"
|
||||
name="roll_powerability_skill"
|
||||
></button>
|
||||
</div>
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
<span name="attr_percentage"></span>
|
||||
<button
|
||||
type="roll"
|
||||
value="&{template:skill} {{title=@{character_name} uses @{name}}} {{target=[[{@{percentage}+?{Modifier?|0},98}kl1]]}} {{roll=[[d100]]}}"
|
||||
value="&{template:skill} {{title=@{character_name} uses @{name}}} {{target=[[ {@{percentage} + [[ {{ @{opt_iq_bonus},0 }dl1 } * @{active_profile_mod_iq_bonus} ]] + ?{Modifier?|0},98}kl1 ]]}} {{roll=[[d100]]}}"
|
||||
name="roll_psionic_skill"
|
||||
></button>
|
||||
<input type="number" value="0" name="attr_ispcost" />
|
||||
|
||||
@@ -1,27 +0,0 @@
|
||||
<p>
|
||||
The Modifiers section has fields for <b>anything</b> that can be modified.
|
||||
Attributes, PS type, MDC, ISP, PPE, combat bonuses, saving throw bonuses, etc.
|
||||
This section is available for any Ability, Psionic, Magic, as well in its own
|
||||
Modifiers tab. If you have a magic amulet that gives +1 to save vs. magic,
|
||||
create an entry on the Modifier tab and add it. If you have an NG-P7 that does
|
||||
1d4*10 damage, create an entry on the Modifier tab and add it. Superhuman
|
||||
Speed sets your speed to an absolute value of 44 and adds +2 to parry and +6
|
||||
to dodge. Add those in the modifiers section in the spell details on the Magic
|
||||
tab. Use the
|
||||
<label class="abs" title="Relative or absolute value"
|
||||
><input type="checkbox" value="1" /><span></span
|
||||
></label>
|
||||
button/toggle next to Spd to indicate that the value is absolute, and not
|
||||
additive. If adding a Magic Spell, Psionic, or Ability that includes
|
||||
modifiers, check the <b>Add to Profiles</b> checkbox. This will make those
|
||||
modifiers available on the Profiles tab to be used in a Profile (see the
|
||||
Profiles tab instructions for details).
|
||||
</p>
|
||||
<p>
|
||||
Note that each section includes a read-only Row ID that can be used in macros.
|
||||
</p>
|
||||
<p>
|
||||
Don't forget to copy/paste the power description into the Description field to
|
||||
make life easier for your GM. Also use that field for any macros you may need
|
||||
like Strike with an arbitrary bonus.
|
||||
</p>
|
||||
@@ -407,22 +407,6 @@
|
||||
><span>Strike</span>
|
||||
<input type="number" value="0" name="attr_strike" />
|
||||
</label>
|
||||
<label
|
||||
><span>Damage</span>
|
||||
<input type="text" value="0" name="attr_damage" />
|
||||
</label>
|
||||
<label
|
||||
><span>Damage: Paired</span>
|
||||
<input type="text" value="0" name="attr_damage_paired" />
|
||||
</label>
|
||||
<label
|
||||
><span>Damage: Main Hand</span>
|
||||
<input type="text" value="0" name="attr_damage_mainhand" />
|
||||
</label>
|
||||
<label
|
||||
><span>Damage: Off Hand</span>
|
||||
<input type="text" value="0" name="attr_damage_offhand" />
|
||||
</label>
|
||||
<label
|
||||
><span>Disarm</span>
|
||||
<input type="number" value="0" name="attr_disarm" />
|
||||
@@ -443,6 +427,19 @@
|
||||
><span>Body Flip/Throw</span>
|
||||
<input type="number" value="0" name="attr_flipthrow" />
|
||||
</label>
|
||||
<label
|
||||
><span>Body Block/Tackle</span>
|
||||
<input type="number" value="0" name="attr_tackle" />
|
||||
</label>
|
||||
<label
|
||||
><span>Tripping/Leg Hook</span>
|
||||
<input type="number" value="0" name="attr_leghook" />
|
||||
</label>
|
||||
<label
|
||||
><span>Backward Sweep Kick</span>
|
||||
<input type="number" value="0" name="attr_backwardsweepkick" />
|
||||
</label>
|
||||
<hr />
|
||||
<label
|
||||
><span>Critical</span> <input type="number" value="" name="attr_critical"
|
||||
/></label>
|
||||
@@ -453,6 +450,23 @@
|
||||
><span>Death Blow</span>
|
||||
<input type="number" value="0" name="attr_deathblow"
|
||||
/></label>
|
||||
<hr />
|
||||
<label
|
||||
><span>Damage</span>
|
||||
<input type="text" value="0" name="attr_damage" />
|
||||
</label>
|
||||
<label
|
||||
><span>Damage: Paired</span>
|
||||
<input type="text" value="0" name="attr_damage_paired" />
|
||||
</label>
|
||||
<label
|
||||
><span>Damage: Main Hand</span>
|
||||
<input type="text" value="0" name="attr_damage_mainhand" />
|
||||
</label>
|
||||
<label
|
||||
><span>Damage: Off Hand</span>
|
||||
<input type="text" value="0" name="attr_damage_offhand" />
|
||||
</label>
|
||||
</div>
|
||||
<div class="combat-offense-range bonus-type-container">
|
||||
<h3><span>🔫</span> Modern <span>💣</span></h3>
|
||||
@@ -460,24 +474,12 @@
|
||||
><span>Strike</span>
|
||||
<input type="number" value="0" name="attr_strike_range" />
|
||||
</label>
|
||||
<label
|
||||
><span>Damage</span>
|
||||
<input type="text" value="0" name="attr_damage_range" />
|
||||
</label>
|
||||
<label
|
||||
><span>Damage: Single</span>
|
||||
<input type="text" value="0" name="attr_damage_range_single" />
|
||||
</label>
|
||||
<label
|
||||
><span>Damage: Pulse/Burst</span>
|
||||
<input type="text" value="0" name="attr_damage_range_burst" />
|
||||
</label>
|
||||
<label
|
||||
><span>Strike: Single</span>
|
||||
<input type="number" value="0" name="attr_strike_range_single" />
|
||||
</label>
|
||||
<label
|
||||
><span>Strike: Burst</span>
|
||||
><span>Strike: Pulse/Burst</span>
|
||||
<input type="number" value="0" name="attr_strike_range_burst" />
|
||||
</label>
|
||||
<label
|
||||
@@ -526,10 +528,24 @@
|
||||
/>
|
||||
<span name="attr_strike_range_aimed_called_pulse"></span>
|
||||
</label>
|
||||
<hr />
|
||||
<label
|
||||
><span>Disarm</span>
|
||||
<input type="number" value="0" name="attr_disarm_range" />
|
||||
</label>
|
||||
<hr />
|
||||
<label
|
||||
><span>Damage</span>
|
||||
<input type="text" value="0" name="attr_damage_range" />
|
||||
</label>
|
||||
<label
|
||||
><span>Damage: Single</span>
|
||||
<input type="text" value="0" name="attr_damage_range_single" />
|
||||
</label>
|
||||
<label
|
||||
><span>Damage: Pulse/Burst</span>
|
||||
<input type="text" value="0" name="attr_damage_range_burst" />
|
||||
</label>
|
||||
</div>
|
||||
<div class="combat-defense bonus-type-container">
|
||||
<h3><span>🛡</span> Defense <span>🥷</span></h3>
|
||||
@@ -565,6 +581,10 @@
|
||||
><span>Roll w/ Impact</span>
|
||||
<input type="number" value="0" name="attr_roll" />
|
||||
</label>
|
||||
<label
|
||||
><span>Break Fall</span>
|
||||
<input type="number" value="0" name="attr_breakfall" />
|
||||
</label>
|
||||
</div>
|
||||
<div class="bonus-type-container">
|
||||
<h3><span>🍀</span> Saving Throws <span>🪦</span></h3>
|
||||
|
||||
+746
-682
File diff suppressed because it is too large
Load Diff
@@ -87,19 +87,32 @@
|
||||
{{#allprops() title subtitle desc color}}
|
||||
<div class="sheet-key">{{key}}</div>
|
||||
<div class="sheet-value">{{value}}</div>
|
||||
{{/allprops() title subtitle desc color}} {{#desc}}
|
||||
{{/allprops() title subtitle desc color}}
|
||||
<!-- -->
|
||||
{{#desc}}
|
||||
<div class="sheet-desc">{{desc}}</div>
|
||||
{{/desc}}
|
||||
</div>
|
||||
</div>
|
||||
</rolltemplate>
|
||||
|
||||
<rolltemplate class="sheet-rolltemplate-test">
|
||||
<div class="sheet-template-container">
|
||||
<h1>{{name}}</h1>
|
||||
<div class="sheet-results">
|
||||
<h4>Result = {{roll1}}</h4>
|
||||
<h4>Custom Result = {{computed::roll1}}</h4>
|
||||
<rolltemplate class="sheet-rolltemplate-initiative">
|
||||
<div class="sheet-container sheet-color-{{color}}">
|
||||
<div class="sheet-header">
|
||||
{{#title}}
|
||||
<div class="sheet-title">{{title}}</div>
|
||||
{{/title}} {{#subtitle}}
|
||||
<div class="sheet-subtitle">{{subtitle}}</div>
|
||||
{{/subtitle}}
|
||||
</div>
|
||||
<div class="sheet-content">
|
||||
<div class="sheet-key">Dice Roll</div>
|
||||
<div class="sheet-value">{{diceroll}}</div>
|
||||
<div class="sheet-key">Mod {{modifier}}</div>
|
||||
<div class="sheet-value">{{computed::diceroll}}</div>
|
||||
{{#desc}}
|
||||
<div class="sheet-desc">{{desc}}</div>
|
||||
{{/desc}}
|
||||
</div>
|
||||
</div>
|
||||
</rolltemplate>
|
||||
|
||||
@@ -1,19 +1,5 @@
|
||||
<div class="skills">
|
||||
<h3>Skills</h3>
|
||||
<details>
|
||||
<summary><b>Instructions</b></summary>
|
||||
<p>
|
||||
Note that skills include IQ bonus. New skills will default to level 1. All
|
||||
skills levels will increase with your character level, and recalculate the
|
||||
Total.
|
||||
</p>
|
||||
<p>
|
||||
Click the <b>ⓘ</b> icon to expand each row so you can copy/paste the
|
||||
skill description to make life easier for your GM. Note that each section
|
||||
includes a read-only Row ID that can be used in macros.
|
||||
</p>
|
||||
</details>
|
||||
<p>Click <b>Instructions</b> for detailed instructions.</p>
|
||||
<div class="heading">
|
||||
<h5>Info</h5>
|
||||
<h5>Skill</h5>
|
||||
@@ -38,6 +24,8 @@
|
||||
<option value="related">O.C.C. Related</option>
|
||||
<option value="secondary">Secondary</option>
|
||||
<option value="rcc">R.C.C.</option>
|
||||
<option value="racial">Racial</option>
|
||||
<option value="other">Other</option>
|
||||
</select>
|
||||
<input type="number" value="0" name="attr_base" />
|
||||
<input type="number" value="0" name="attr_perlevel" />
|
||||
|
||||
@@ -1,58 +1,56 @@
|
||||
<div class="wp">
|
||||
<h3>Weapon Proficiencies</h3>
|
||||
<div class="wp-container">
|
||||
<details>
|
||||
<summary><b>Instructions</b></summary>
|
||||
<p>
|
||||
Add a row and select a WP from the list. Weapon Proficiencies
|
||||
<b>automatically</b> calculate their bonuses based on level.
|
||||
</p>
|
||||
<p>
|
||||
Weapon Proficiencies are automatically added to Profiles →
|
||||
<span class="picker-title">Modifier Picker</span>.
|
||||
</p>
|
||||
<p>
|
||||
W.P. Bayonet comes from Adventure Sourcebook - Mercenary Adventures,
|
||||
page 45.
|
||||
</p>
|
||||
</details>
|
||||
<p>Click <b>Instructions</b> for detailed instructions.</p>
|
||||
<h3>Ancient Weapon Proficiencies</h3>
|
||||
<fieldset class="repeating_wp">
|
||||
<h5>Weapon Proficiency</h5>
|
||||
<h5>Strike</h5>
|
||||
<h5>Parry</h5>
|
||||
<h5>Disarm</h5>
|
||||
<h5>Throw</h5>
|
||||
<h5>Entangle</h5>
|
||||
<h5 title="Rate of Fire">RoF</h5>
|
||||
<h5>Level</h5>
|
||||
<h5>Row ID</h5>
|
||||
<input type="hidden" name="attr_bonus_id" value="" />
|
||||
<input type="text" list="weapon-proficiencies" name="attr_name" />
|
||||
<input type="number" value="0" name="attr_strike" />
|
||||
<input type="number" value="0" name="attr_parry" />
|
||||
<input type="number" value="0" name="attr_disarm" />
|
||||
<input type="number" value="0" name="attr_throw" />
|
||||
<input type="number" value="0" name="attr_entangle" />
|
||||
<input type="number" value="0" name="attr_rof" title="Rate of Fire" />
|
||||
<input type="number" value="0" name="attr_level" />
|
||||
<input type="string" value="" name="attr_rowid" readonly />
|
||||
</fieldset>
|
||||
<hr />
|
||||
<h3>Modern Weapon Proficiencies</h3>
|
||||
<fieldset class="repeating_wpmodern">
|
||||
<h5>Weapon Proficiency</h5>
|
||||
<h5>Single</h5>
|
||||
<h5>Burst</h5>
|
||||
<h5>Level</h5>
|
||||
<h5>Row ID</h5>
|
||||
<input type="hidden" name="attr_bonus_id" value="" />
|
||||
<input type="text" list="weapon-proficiencies-modern" name="attr_name" />
|
||||
<input type="number" value="0" name="attr_strike_range_single" />
|
||||
<input type="number" value="0" name="attr_strike_range_burst" />
|
||||
<input type="number" value="0" name="attr_level" />
|
||||
<input type="text" value="" name="attr_rowid" readonly />
|
||||
</fieldset>
|
||||
</div>
|
||||
<h3>Weapon Proficiencies</h3>
|
||||
<div class="wp-container">
|
||||
<details>
|
||||
<summary><b>Instructions</b></summary>
|
||||
<p>
|
||||
Add a row and select a WP from the list. Weapon Proficiencies
|
||||
<b>automatically</b> calculate their bonuses based on level.
|
||||
</p>
|
||||
<p>
|
||||
Weapon Proficiencies are automatically added to Profiles →
|
||||
<span class="picker-title">Modifier Picker</span>.
|
||||
</p>
|
||||
<p>
|
||||
W.P. Bayonet comes from Adventure Sourcebook - Mercenary Adventures, page
|
||||
45.
|
||||
</p>
|
||||
</details>
|
||||
<p>Click <b>Instructions</b> for detailed instructions.</p>
|
||||
<h3>Ancient Weapon Proficiencies</h3>
|
||||
<fieldset class="repeating_wp">
|
||||
<h5>Weapon Proficiency</h5>
|
||||
<h5>Strike</h5>
|
||||
<h5>Parry</h5>
|
||||
<h5>Disarm</h5>
|
||||
<h5>Throw</h5>
|
||||
<h5>Entangle</h5>
|
||||
<h5 title="Rate of Fire">RoF</h5>
|
||||
<h5>Level</h5>
|
||||
<h5>Row ID</h5>
|
||||
<input type="hidden" name="attr_bonus_id" value="" />
|
||||
<input type="text" list="weapon-proficiencies" name="attr_name" />
|
||||
<input type="number" value="0" name="attr_strike" />
|
||||
<input type="number" value="0" name="attr_parry" />
|
||||
<input type="number" value="0" name="attr_disarm" />
|
||||
<input type="number" value="0" name="attr_throw" />
|
||||
<input type="number" value="0" name="attr_entangle" />
|
||||
<input type="number" value="0" name="attr_rof" title="Rate of Fire" />
|
||||
<input type="number" value="0" name="attr_level" />
|
||||
<input type="string" value="" name="attr_rowid" readonly />
|
||||
</fieldset>
|
||||
<hr />
|
||||
<h3>Modern Weapon Proficiencies</h3>
|
||||
<fieldset class="repeating_wpmodern">
|
||||
<h5>Weapon Proficiency</h5>
|
||||
<h5>Single</h5>
|
||||
<h5>Burst</h5>
|
||||
<h5>Level</h5>
|
||||
<h5>Row ID</h5>
|
||||
<input type="hidden" name="attr_bonus_id" value="" />
|
||||
<input type="text" list="weapon-proficiencies-modern" name="attr_name" />
|
||||
<input type="number" value="0" name="attr_strike_range_single" />
|
||||
<input type="number" value="0" name="attr_strike_range_burst" />
|
||||
<input type="number" value="0" name="attr_level" />
|
||||
<input type="text" value="" name="attr_rowid" readonly />
|
||||
</fieldset>
|
||||
</div>
|
||||
|
||||
@@ -23,9 +23,7 @@
|
||||
</li>
|
||||
<li class="r-tab"><label for="tab-skills">Skills</label></li>
|
||||
<li class="r-tab"><label for="tab-equipment">Equipment</label></li>
|
||||
<li class="r-tab">
|
||||
<label for="tab-wps" title="Weapon Proficiencies">WPs</label>
|
||||
</li>
|
||||
<li class="r-tab"><label for="tab-wps">Combat Skills</label></li>
|
||||
<li class="r-tab"><label for="tab-powersabilities">Abilities</label></li>
|
||||
<li class="r-tab"><label for="tab-magic">Magic</label></li>
|
||||
<li class="r-tab"><label for="tab-psionics">Psionics</label></li>
|
||||
@@ -174,29 +172,56 @@
|
||||
</div>
|
||||
|
||||
<div class="r-tab-content">
|
||||
<!-- inject:partials/weapon_proficiencies.html -->
|
||||
<!-- endinject -->
|
||||
<div class="wp">
|
||||
<h3>
|
||||
Hand to Hand & <span title="Robot/Power Armor">RPA</span> Combat
|
||||
</h3>
|
||||
<fieldset class="repeating_h2h">
|
||||
<details class="info">
|
||||
<summary>
|
||||
<div class="bonus-thing-heading">
|
||||
<b class="click-expand"
|
||||
><span title="Click for more info"> ⓘ</span></b
|
||||
>
|
||||
<label
|
||||
><span>Name</span>
|
||||
<input type="text" list="hand-to-hand" name="attr_name" />
|
||||
</label>
|
||||
<label
|
||||
><span>Level</span>
|
||||
<input type="number" value="1" name="attr_level" />
|
||||
</label>
|
||||
</div>
|
||||
</summary>
|
||||
<div class="details-body">
|
||||
<label class="description"
|
||||
><b>Description</b>
|
||||
<textarea
|
||||
class="full"
|
||||
name="attr_description"
|
||||
value=""
|
||||
></textarea>
|
||||
</label>
|
||||
<div class="macro-help">
|
||||
<label
|
||||
><span><b>Row ID:</b></span>
|
||||
<input type="text" readonly name="attr_rowid" value=""
|
||||
/></label>
|
||||
</div>
|
||||
<!-- inject:partials/repeating_modifiers.html -->
|
||||
<!-- endinject -->
|
||||
</div>
|
||||
</details>
|
||||
</fieldset>
|
||||
<hr />
|
||||
<!-- inject:partials/weapon_proficiencies.html -->
|
||||
<!-- endinject -->
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="r-tab-content">
|
||||
<div class="powersabilities">
|
||||
<h3>Natural Abilities / Powers</h3>
|
||||
<details>
|
||||
<summary><b>Instructions</b></summary>
|
||||
<p>
|
||||
Enter some natural abilities/powers that are neither magic nor
|
||||
psionic in nature. Click the <b>ⓘ</b> icon to expand each row.
|
||||
</p>
|
||||
<p>
|
||||
Range, Duration, Frequency, Damage, D.C., and Skill are all
|
||||
calculated from the per-level values you enter in the details. For
|
||||
Starting Damage and Damage per Level enter values that roll20 would
|
||||
use for dice rolls. Ex. "4d6", "1d6", etc.
|
||||
</p>
|
||||
<!-- inject:partials/repeated_instructions.html -->
|
||||
<!-- endinject -->
|
||||
</details>
|
||||
<p>Click <b>Instructions</b> for detailed instructions.</p>
|
||||
<div class="repeating-bonuses-outer">
|
||||
<div class="heading">
|
||||
<h5>Info</h5>
|
||||
@@ -245,28 +270,6 @@
|
||||
<div class="r-tab-content">
|
||||
<div class="magic">
|
||||
<h3>Magic</h3>
|
||||
<details>
|
||||
<summary><b>Instructions</b></summary>
|
||||
<p>
|
||||
Enter a Spell name and its PPE. Click the <b>ⓘ</b> icon to
|
||||
expand each row., and fill in the applicable values.
|
||||
</p>
|
||||
<p>
|
||||
Range, Duration, Damage, D.C., and Skill are all calculated from the
|
||||
per-level values you enter in the details. For Starting Damage and
|
||||
Damage per Level enter values that roll20 would use for dice rolls.
|
||||
Ex. "4d6", "1d6", etc.
|
||||
</p>
|
||||
<p>
|
||||
Press the Cast button to remove the PPE from the
|
||||
<b>Current PPE</b> input field. Click <b>Reset PPE</b> to set
|
||||
<b>Current PPE</b> back to the value on your Default Profile. Note
|
||||
the roll buttons beside Damage and Skill.
|
||||
</p>
|
||||
<!-- inject:partials/repeated_instructions.html -->
|
||||
<!-- endinject -->
|
||||
</details>
|
||||
<p>Click <b>Instructions</b> for detailed instructions.</p>
|
||||
<label
|
||||
><span>Current P.P.E.</span>
|
||||
<input type="number" name="attr_currentppe" value="0" />
|
||||
@@ -329,28 +332,6 @@
|
||||
<div class="r-tab-content">
|
||||
<div class="psionics">
|
||||
<h3>Psionics</h3>
|
||||
<details>
|
||||
<summary><b>Instructions</b></summary>
|
||||
<p>
|
||||
Enter a Psionic name and its ISP. Click the <b>ⓘ</b> icon to
|
||||
expand each row, and fill in the applicable values.
|
||||
</p>
|
||||
<p>
|
||||
Range, Duration, Damage, D.C., and Skill are all calculated from the
|
||||
per-level values you enter in the details. For Starting Damage and
|
||||
Damage per Level enter values that roll20 would use for dice rolls.
|
||||
Ex. "4d6", "1d6", etc.
|
||||
</p>
|
||||
<p>
|
||||
Press the Use button to remove the ISP from the
|
||||
<b>Current ISP</b> input field. Click <b>Reset ISP</b> to set
|
||||
<b>Current ISP</b> back to the value on your Default Profile. Note
|
||||
the roll button beside Damage and Skill.
|
||||
</p>
|
||||
<!-- inject:partials/repeated_instructions.html -->
|
||||
<!-- endinject -->
|
||||
</details>
|
||||
<p>Click <b>Instructions</b> for detailed instructions.</p>
|
||||
<label
|
||||
><span>Current I.S.P.</span>
|
||||
<input type="number" name="attr_currentisp" value="0" />
|
||||
@@ -418,18 +399,6 @@
|
||||
<div class="modifiers">
|
||||
<div class="bonuses-container">
|
||||
<h3>Modifiers, Weapons, Armor, Gear</h3>
|
||||
<details>
|
||||
<summary><b>Instructions</b></summary>
|
||||
<p>
|
||||
Complete the repeating sections for your various combat skills and
|
||||
modifiers. Modifier dropdowns are free-form, so you can type
|
||||
anything in them and don't need to select from the list. What's
|
||||
there is just a small sample.
|
||||
</p>
|
||||
<!-- inject:partials/repeated_instructions.html -->
|
||||
<!-- endinject -->
|
||||
</details>
|
||||
<p>Click <b>Instructions</b> for detailed instructions.</p>
|
||||
<div class="repeating-bonuses-outer">
|
||||
<fieldset class="repeating_modifiers">
|
||||
<details class="info">
|
||||
@@ -440,11 +409,7 @@
|
||||
>
|
||||
<label
|
||||
><span>Name</span>
|
||||
<input
|
||||
type="text"
|
||||
list="combat-modifiers"
|
||||
name="attr_name"
|
||||
/>
|
||||
<input type="text" name="attr_name" />
|
||||
</label>
|
||||
<label
|
||||
><span>Level</span>
|
||||
@@ -481,193 +446,156 @@
|
||||
<div class="bonuses">
|
||||
<div class="bonuses-container">
|
||||
<div class="combat-combined">
|
||||
<details>
|
||||
<summary><b>Instructions</b></summary>
|
||||
<p></p>
|
||||
<p>
|
||||
Any modifiers you add on the Modifiers tab will appear as
|
||||
checkboxes here. Additionally any Abilities, Magic, or Psionics
|
||||
that you checked <b>Add to Cumulative Modifiers</b> will appear
|
||||
here. Any Weapon Proficiencies you add on the WPs tab will
|
||||
appear on this page as well.
|
||||
</p>
|
||||
<p>
|
||||
Create a new Profile in the Profiles section. Check all of the
|
||||
items that make up that particular profile, click the
|
||||
<b>ⓘ</b> icon to expand the details, and click the
|
||||
<b>Apply Checked Modifiers to this Profile</b> button. This will
|
||||
aggregate all of the bonuses and values from all of the checked
|
||||
modifiers and store them in that profile. In simple cases, this
|
||||
may be all you need - stack all of your gear into one Profile,
|
||||
and that's that. But you might have a profile where you have
|
||||
some TW Armor that grants abilities, so that's a different
|
||||
profile than your default. Or you might have a series of spells
|
||||
you cast to buff up, which you might want to add to another
|
||||
profile. Or you might be a Glitter Boy pilot that has a totally
|
||||
different set of gear and bonuses inside and outside his armor.
|
||||
</p>
|
||||
<p>
|
||||
Profiles also allow you to set up different macros with
|
||||
different configurations, as you can reference the individual
|
||||
profiles. Note that each Profile includes a read-only field with
|
||||
the Row ID for use in macros.
|
||||
</p>
|
||||
<p>
|
||||
PP bonus is added to Strike, Parry, Dodge, Throw, Disarm,
|
||||
Entangle, Dodge: Flight, Dodge: Auto, Dodge: Teleport, and
|
||||
Dodge: Motion. Damage adds everything together as a rollable
|
||||
field, and prompts to add Punch damage. Crit/Knockout/Death Blow
|
||||
use the lowest of the available options (ex. Crit: 17 is better
|
||||
than Crit: 19).
|
||||
</p>
|
||||
<p>
|
||||
The first Profile in the list is considered the
|
||||
<b>Default</b> profile and is used to perform global
|
||||
calculations like speed over time and skill bonuses. Click the
|
||||
<b>Modify</b> button and drag to reorder as needed.
|
||||
</p>
|
||||
<p>
|
||||
Note that profiles aren't cumulative, but you can make multiple
|
||||
profiles that are very similar with only one or two differences.
|
||||
</p>
|
||||
<details class="info active-container">
|
||||
<summary>
|
||||
<h2>
|
||||
<span class="not-readonly" title="Click for more info"
|
||||
> ⓘ</span
|
||||
>
|
||||
Active
|
||||
</h2>
|
||||
</summary>
|
||||
<!-- inject:partials/active.html -->
|
||||
<!-- endinject -->
|
||||
</details>
|
||||
<p>Click <b>Instructions</b> for detailed instructions.</p>
|
||||
<hr />
|
||||
<div class="armor">
|
||||
<h3>Armor</h3>
|
||||
<div class="armor-active">
|
||||
<label
|
||||
>Damage
|
||||
<input
|
||||
type="number"
|
||||
placeholder="Damage"
|
||||
name="attr_armordamage"
|
||||
/>
|
||||
</label>
|
||||
<button type="action" name="act_armorapplydamage">
|
||||
Apply Damage
|
||||
</button>
|
||||
</div>
|
||||
<div class="armor-labels heading">
|
||||
<label>Active</label>
|
||||
<label>Name</label>
|
||||
<label>Movement Modifier %</label>
|
||||
<label>Base MDC</label>
|
||||
<label>Current MDC</label>
|
||||
</div>
|
||||
<fieldset class="repeating_armor">
|
||||
<div class="repeating_armor-inner">
|
||||
<!-- inject:partials/armor.html -->
|
||||
<!-- endinject -->
|
||||
</div>
|
||||
</fieldset>
|
||||
</div>
|
||||
<hr />
|
||||
<div class="profile-builder">
|
||||
<div class="profiles repeating-bonuses-outer">
|
||||
<div class="profiles-inner">
|
||||
<h3>Profiles</h3>
|
||||
<button type="action" name="act_getdefaultprofile">
|
||||
Debug Defaults
|
||||
</button>
|
||||
<input type="hidden" name="attr_default_mdc" />
|
||||
<input type="hidden" name="attr_default_profile" />
|
||||
<label>Active</label>
|
||||
<fieldset class="repeating_profiles">
|
||||
<div class="repeating_profiles-inner">
|
||||
<label>
|
||||
<input
|
||||
type="checkbox"
|
||||
class="is-default"
|
||||
name="attr_is_default"
|
||||
value="1"
|
||||
/>
|
||||
</label>
|
||||
<details class="info profile">
|
||||
<summary>
|
||||
<div class="bonus-thing-heading">
|
||||
<b class="click-expand"
|
||||
><span title="Click for more info"
|
||||
> ⓘ</span
|
||||
></b
|
||||
>
|
||||
<label
|
||||
><span>Name</span>
|
||||
<input type="text" name="attr_name" />
|
||||
</label>
|
||||
</div>
|
||||
</summary>
|
||||
<div class="details-body">
|
||||
<div class="profile-management">
|
||||
<input
|
||||
type="text"
|
||||
class="full"
|
||||
name="attr_bonus_ids"
|
||||
/>
|
||||
<input type="hidden" name="attr_bonus_names" />
|
||||
<div class="bonus-names">
|
||||
<span name="attr_bonus_names"></span>
|
||||
</div>
|
||||
<div class="buttons">
|
||||
<button
|
||||
type="action"
|
||||
name="act_updateprofile"
|
||||
class="metal-btn btn-silver-flat"
|
||||
>
|
||||
Refresh ⟳
|
||||
</button>
|
||||
<button
|
||||
type="action"
|
||||
name="act_copybonusids"
|
||||
class="metal-btn btn-silver-flat"
|
||||
>
|
||||
Apply
|
||||
<span class="picker-title"
|
||||
>Picked Modifiers</span
|
||||
>
|
||||
←
|
||||
</button>
|
||||
<hr />
|
||||
<button
|
||||
type="action"
|
||||
name="act_checkbonusids"
|
||||
class="metal-btn btn-silver-flat"
|
||||
>
|
||||
Replace
|
||||
<span class="picker-title"
|
||||
>Picked Modifiers</span
|
||||
>
|
||||
using this profile →
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<!-- inject:partials/repeating_modifiers_readonly.html -->
|
||||
<!-- endinject -->
|
||||
</div>
|
||||
</details>
|
||||
</div>
|
||||
</fieldset>
|
||||
</div>
|
||||
</div>
|
||||
<div class="picker">
|
||||
<div class="picker-inner">
|
||||
<h3 class="picker-title">Modifier Picker</h3>
|
||||
<fieldset class="repeating_bonusselections">
|
||||
<label>
|
||||
<input type="checkbox" name="attr_enabled" value="1" />
|
||||
<span name="attr_name"></span
|
||||
></label>
|
||||
<input type="hidden" name="attr_name" value="" />
|
||||
<input type="hidden" name="attr_bonus_id" value="" />
|
||||
</fieldset>
|
||||
<div class="selected-ids">
|
||||
<b>Selected IDs</b>
|
||||
<div class="armor-profiles">
|
||||
<div class="armor">
|
||||
<h3>Armor</h3>
|
||||
<div class="armor-damage">
|
||||
<label
|
||||
>Damage
|
||||
<input
|
||||
class="full"
|
||||
type="text"
|
||||
name="attr_bonus_ids_output"
|
||||
value=""
|
||||
type="number"
|
||||
placeholder="Damage"
|
||||
name="attr_armordamage"
|
||||
/>
|
||||
</label>
|
||||
<button type="action" name="act_armorapplydamage">
|
||||
Apply Damage
|
||||
</button>
|
||||
</div>
|
||||
<div class="armor-labels heading">
|
||||
<label>Active</label>
|
||||
<label>Name</label>
|
||||
<label>Movement Modifier %</label>
|
||||
<label>Base MDC</label>
|
||||
<label>Current MDC</label>
|
||||
</div>
|
||||
<fieldset class="repeating_armor">
|
||||
<div class="repeating_armor-inner">
|
||||
<!-- inject:partials/armor.html -->
|
||||
<!-- endinject -->
|
||||
</div>
|
||||
</fieldset>
|
||||
</div>
|
||||
<hr />
|
||||
<div class="profile-builder">
|
||||
<div class="profiles repeating-bonuses-outer">
|
||||
<div class="profiles-inner">
|
||||
<h3>Profiles</h3>
|
||||
<button type="action" name="act_getdefaultprofile">
|
||||
Debug Defaults
|
||||
</button>
|
||||
<input type="hidden" name="attr_default_mdc" />
|
||||
<input type="hidden" name="attr_default_profile" />
|
||||
<label>Active</label>
|
||||
<fieldset class="repeating_profiles">
|
||||
<div class="repeating_profiles-inner">
|
||||
<label>
|
||||
<input
|
||||
type="checkbox"
|
||||
class="is-default"
|
||||
name="attr_is_default"
|
||||
value="1"
|
||||
/>
|
||||
</label>
|
||||
<details class="info profile">
|
||||
<summary>
|
||||
<div class="bonus-thing-heading">
|
||||
<b class="click-expand"
|
||||
><span title="Click for more info"
|
||||
> ⓘ</span
|
||||
></b
|
||||
>
|
||||
<label
|
||||
><span>Name</span>
|
||||
<input type="text" name="attr_name" />
|
||||
</label>
|
||||
</div>
|
||||
</summary>
|
||||
<div class="details-body">
|
||||
<div class="profile-management">
|
||||
<input
|
||||
type="text"
|
||||
class="full"
|
||||
name="attr_bonus_ids"
|
||||
/>
|
||||
<input type="hidden" name="attr_bonus_names" />
|
||||
<div class="bonus-names">
|
||||
<span name="attr_bonus_names"></span>
|
||||
</div>
|
||||
<div class="buttons">
|
||||
<button
|
||||
type="action"
|
||||
name="act_updateprofile"
|
||||
class="metal-btn btn-silver-flat"
|
||||
>
|
||||
Refresh ⟳
|
||||
</button>
|
||||
<button
|
||||
type="action"
|
||||
name="act_copybonusids"
|
||||
class="metal-btn btn-silver-flat"
|
||||
>
|
||||
Apply
|
||||
<span class="picker-title"
|
||||
>Picked Modifiers</span
|
||||
>
|
||||
←
|
||||
</button>
|
||||
<hr />
|
||||
<button
|
||||
type="action"
|
||||
name="act_checkbonusids"
|
||||
class="metal-btn btn-silver-flat"
|
||||
>
|
||||
Replace
|
||||
<span class="picker-title"
|
||||
>Picked Modifiers</span
|
||||
>
|
||||
using this profile →
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<!-- inject:partials/repeating_modifiers_readonly.html -->
|
||||
<!-- endinject -->
|
||||
</div>
|
||||
</details>
|
||||
</div>
|
||||
</fieldset>
|
||||
</div>
|
||||
</div>
|
||||
<div class="picker">
|
||||
<div class="picker-inner">
|
||||
<h3 class="picker-title">Modifier Picker</h3>
|
||||
<fieldset class="repeating_bonusselections">
|
||||
<label>
|
||||
<input type="checkbox" name="attr_enabled" value="1" />
|
||||
<span name="attr_name"></span
|
||||
></label>
|
||||
<input type="hidden" name="attr_name" value="" />
|
||||
<input type="hidden" name="attr_bonus_id" value="" />
|
||||
</fieldset>
|
||||
<div class="selected-ids">
|
||||
<b>Selected IDs</b>
|
||||
<input
|
||||
class="full"
|
||||
type="text"
|
||||
name="attr_bonus_ids_output"
|
||||
value=""
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -686,11 +614,7 @@
|
||||
>
|
||||
<label
|
||||
><span>Name</span>
|
||||
<input
|
||||
type="text"
|
||||
list="combat-modifiers"
|
||||
name="attr_name"
|
||||
/>
|
||||
<input type="text" list="modifiers" name="attr_name" />
|
||||
</label>
|
||||
<label
|
||||
><span>Level</span>
|
||||
@@ -734,6 +658,9 @@
|
||||
/* inject:js/bonuses.js */
|
||||
/* endinject */
|
||||
|
||||
/* inject:js/combat_skills.js */
|
||||
/* endinject */
|
||||
|
||||
/* inject:js/wps.js */
|
||||
/* endinject */
|
||||
|
||||
@@ -762,11 +689,12 @@
|
||||
/* endinject */
|
||||
|
||||
/**
|
||||
* [] Add a non-repeating section for Default Profile so that profile attributes can be set on the token
|
||||
* [] Include non-zero modifier in roll template (ex -10 should appear as a line item to indicate it was factored in)
|
||||
* [] Represent Critical/Knockout from behind
|
||||
* [] Add skills (WP Paired) from h2h
|
||||
* [] Define "combat moves" somewhere - stuff from H2H with damage and penalties (loses initiave and one attack), etc.
|
||||
* [] Refactor to get rid of the Bonuses repeating section and instead go straight from Modifiers to Picked Modifiers. I think the Bonuses section causes weird issues related to network/multiple updates at the same time.
|
||||
* [] Fix CSS on "Psionics vs. [n]"
|
||||
* [] Add range to modifiers (guns)
|
||||
* [] Add minions/pets/henchmen (could just be equivalent to a Profile)
|
||||
* [] Factor in "Aimed Attack/Called Shot" (/disarm) from WP Targeting (RUE p328)
|
||||
* - [] Also factor in the natural 19-20 automatic success with a roll template/green highlight
|
||||
* - [] Including check has WP Targeting
|
||||
@@ -783,13 +711,6 @@
|
||||
* [] Add details/summary to some Core background fields like Insanity, Environment, Family Origin, Disposition
|
||||
* [] Add roll buttons for punches/kicks
|
||||
* [] Add WP Sharpshooting that takes into account the PP of the profile it's used in
|
||||
* [x] Make Imp/Exp -> Options, and add checkboxes for:
|
||||
* ** Or use sheet options - "useroptions" https://wiki.roll20.net/Sheet.json#Example
|
||||
* - [x] Add PP to disarm/entangle
|
||||
* - [x] Add IQ to Perception
|
||||
* - [x] Apply PS damage to each hand or total in Paired attack
|
||||
* - [] Add Supernatural (and Robotic) punch damage to melee attacks
|
||||
* - [] Increased magic at Ley Line (+50%, +100%, +200%)
|
||||
* [x] Two hands worth of damage
|
||||
* - [x] Separate Main Hand, Off Hand, and Combined damage
|
||||
* - [] Each damage should include a checkbox for "stacks" vs. "overrides". Overrides uses greatest of.
|
||||
@@ -815,6 +736,28 @@
|
||||
* [] Pressing space when typing an ability name expands and collapses the Details panel
|
||||
* [] Removing Bonus Sources doesn't remove them from Selections
|
||||
*
|
||||
* [x] Add option to include IQ bonus on skill-based abilities (Telemechanics, Object Read, Locate, etc.)
|
||||
* [x] Fix CSS on "Psionics vs. [n]"
|
||||
* [x] Note how many actions aimed/called shots take
|
||||
* [x] Skills don't appear to recalculate when the level changes due to character level adjustment
|
||||
* [x] Move Instructions to Options tab
|
||||
* [x] Checking Active armor needs to trigger a global armor update
|
||||
* [x] replace "currentmdc" and "basemdc" armor attributes with "mdc" and "mdc_max"
|
||||
* - [x] include migration
|
||||
* [x] Add a non-repeating section for Default Profile so that profile attributes can be set on the token
|
||||
* - [x] Also include Armor
|
||||
* [x] Make Imp/Exp -> Options, and add checkboxes for:
|
||||
* ** Or use sheet options - "useroptions" https://wiki.roll20.net/Sheet.json#Example
|
||||
* - [x] Add PP to disarm/entangle
|
||||
* - [x] Add IQ to Perception
|
||||
* - [x] Apply PS damage to each hand or total in Paired attack
|
||||
* - [x] Add Supernatural (and Robotic) punch damage to melee attacks
|
||||
* [x] Set spell strength modifier from h2h
|
||||
* [x] Add Break Fall defensive bonus
|
||||
* [x] Add "racial" and "other" to skill categories
|
||||
* [x] Add RPA to Combat Skills
|
||||
* [x] Add Hand to Hand selector / auto calculator
|
||||
* [x] Roll query for dodge - Range attack? 10', 50', N/A
|
||||
* [x] Add "vs. #" for rolls that are against a static target
|
||||
* [x] Fix iq_bonus() function to use default profile, not top.
|
||||
* - [x] skill bonuses aren't calculating properly.
|
||||
@@ -944,6 +887,7 @@
|
||||
e.previousValue = "1";
|
||||
}
|
||||
// Update WPs
|
||||
await updateHandToHands("h2h", e.newValue);
|
||||
await updateWeaponProficiencies("wp", e.newValue, e.previousValue);
|
||||
await updateWeaponProficiencies("wpmodern", e.newValue, e.previousValue);
|
||||
await updateSkillLevels(+e.newValue, +e.previousValue);
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
@use 'tabs';
|
||||
@use "tabs";
|
||||
|
||||
$picker-color: #3781bd;
|
||||
|
||||
@mixin center {
|
||||
display: flex;
|
||||
@@ -7,17 +9,47 @@
|
||||
}
|
||||
@mixin readonly {
|
||||
@include center;
|
||||
background-color: #f5f5f5;
|
||||
// background-color: #f5f5f5;
|
||||
background-color: #eee;
|
||||
margin: 0.1rem 0.2rem;
|
||||
border-radius: 0.1rem;
|
||||
font-weight: normal;
|
||||
padding-left: 0.5rem;
|
||||
overflow: scroll;
|
||||
overflow-y: auto;
|
||||
}
|
||||
@mixin section {
|
||||
border: 1px solid #ccc;
|
||||
padding: 0.5rem;
|
||||
}
|
||||
@mixin section-light {
|
||||
border: 1px solid #eee;
|
||||
padding: 0.5rem;
|
||||
}
|
||||
@mixin box-shadow-inset {
|
||||
box-shadow: #b0bbc6 3px 3px 6px 0px inset,
|
||||
rgba(255, 255, 255, 0.25) -3px -3px 6px 1px inset;
|
||||
}
|
||||
@mixin box-shadow-raised {
|
||||
box-shadow: rgba(6, 24, 44, 0.4) 0px 0px 0px 2px,
|
||||
rgba(6, 24, 44, 0.65) 0px 4px 6px -1px,
|
||||
rgba(255, 255, 255, 0.08) 0px 1px 0px inset;
|
||||
}
|
||||
@mixin hr-lightweight {
|
||||
width: 100%;
|
||||
height: 1px;
|
||||
margin: 0;
|
||||
border: 0;
|
||||
background-color: #ccc;
|
||||
border: 0;
|
||||
}
|
||||
@mixin hr-lightweight-light {
|
||||
width: 100%;
|
||||
height: 1px;
|
||||
margin: 0;
|
||||
border: 0;
|
||||
background-color: #eee;
|
||||
border: 0;
|
||||
}
|
||||
|
||||
/* globals */
|
||||
|
||||
@@ -51,6 +83,7 @@ a {
|
||||
.sheet-rolltemplate-strike,
|
||||
.sheet-rolltemplate-goe,
|
||||
.sheet-rolltemplate-skill,
|
||||
.sheet-rolltemplate-initiative,
|
||||
.sheet-rolltemplate-custom {
|
||||
margin-left: -7px;
|
||||
}
|
||||
@@ -59,6 +92,7 @@ a {
|
||||
.sheet-rolltemplate-strike,
|
||||
.sheet-rolltemplate-goe,
|
||||
.sheet-rolltemplate-skill,
|
||||
.sheet-rolltemplate-initiative,
|
||||
.sheet-rolltemplate-custom {
|
||||
margin-left: -37px;
|
||||
|
||||
@@ -132,8 +166,8 @@ a {
|
||||
}
|
||||
|
||||
.danger {
|
||||
background-color: rgb(220, 53, 69);
|
||||
color: white;
|
||||
background-color: rgb(220, 53, 69) !important;
|
||||
color: white !important;
|
||||
}
|
||||
|
||||
.charsheet {
|
||||
@@ -161,6 +195,11 @@ a {
|
||||
content: "";
|
||||
}
|
||||
|
||||
button.action-roll::before {
|
||||
font-family: "dicefontd20";
|
||||
content: "t";
|
||||
}
|
||||
|
||||
h4 {
|
||||
text-decoration: underline;
|
||||
}
|
||||
@@ -173,6 +212,10 @@ a {
|
||||
@include readonly;
|
||||
}
|
||||
|
||||
textarea[readonly] {
|
||||
@include readonly;
|
||||
}
|
||||
|
||||
details {
|
||||
display: revert;
|
||||
margin-bottom: 1rem;
|
||||
@@ -181,10 +224,20 @@ a {
|
||||
// display: none;
|
||||
// }
|
||||
|
||||
&.info {
|
||||
display: block;
|
||||
margin-bottom: 0;
|
||||
|
||||
& > summary {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
|
||||
summary {
|
||||
display: revert;
|
||||
cursor: pointer;
|
||||
|
||||
h2,
|
||||
& > h3 {
|
||||
display: inline-block;
|
||||
}
|
||||
@@ -223,15 +276,6 @@ a {
|
||||
}
|
||||
}
|
||||
|
||||
details.info {
|
||||
display: block;
|
||||
margin-bottom: 0;
|
||||
|
||||
& > summary {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
|
||||
.full {
|
||||
width: 100% !important;
|
||||
}
|
||||
@@ -289,6 +333,13 @@ a {
|
||||
}
|
||||
}
|
||||
|
||||
.psi-vs {
|
||||
justify-content: left !important;
|
||||
> span {
|
||||
padding-right: 0.5rem;
|
||||
}
|
||||
}
|
||||
|
||||
.finance-grid {
|
||||
display: grid;
|
||||
gap: 0.5rem;
|
||||
@@ -443,6 +494,10 @@ a {
|
||||
}
|
||||
}
|
||||
|
||||
hr {
|
||||
@include hr-lightweight;
|
||||
}
|
||||
|
||||
input {
|
||||
width: 5rem;
|
||||
}
|
||||
@@ -547,12 +602,12 @@ a {
|
||||
}
|
||||
}
|
||||
|
||||
.armor {
|
||||
.armor-active {
|
||||
label {
|
||||
display: inline;
|
||||
}
|
||||
.armor-damage {
|
||||
label {
|
||||
display: inline;
|
||||
}
|
||||
}
|
||||
.armor {
|
||||
.armor-labels {
|
||||
display: grid;
|
||||
gap: 0.5rem;
|
||||
@@ -601,7 +656,7 @@ a {
|
||||
}
|
||||
|
||||
.picker-title {
|
||||
color: #3781bd;
|
||||
color: $picker-color;
|
||||
}
|
||||
|
||||
.profile-builder {
|
||||
@@ -614,6 +669,10 @@ a {
|
||||
}
|
||||
|
||||
.profiles {
|
||||
hr {
|
||||
@include hr-lightweight;
|
||||
}
|
||||
|
||||
.bonus-ps-container {
|
||||
grid-template-columns: repeat(auto-fill, minmax(18rem, 1fr));
|
||||
}
|
||||
@@ -640,6 +699,10 @@ a {
|
||||
|
||||
&.roller {
|
||||
grid-template-columns: 1fr 1rem 5rem 4rem;
|
||||
|
||||
&.initiative {
|
||||
grid-template-columns: 1fr 1rem 5rem 4rem 5rem;
|
||||
}
|
||||
}
|
||||
|
||||
&.abs {
|
||||
@@ -705,6 +768,50 @@ a {
|
||||
grid-template-columns: 2.5rem 1fr 6rem 8rem 8rem 4rem 8rem 4rem 4rem 5rem 4rem;
|
||||
}
|
||||
}
|
||||
|
||||
.active-container {
|
||||
// border: 0.5rem ridge $picker-color;
|
||||
padding: 0.5rem;
|
||||
background-color: #eee;
|
||||
box-shadow: rgba(0, 0, 0, 0.15) 1.95px 1.95px 2.6px;
|
||||
|
||||
&[open] {
|
||||
padding: 1rem;
|
||||
background-color: #ccc;
|
||||
box-shadow: rgba(0, 0, 0, 0.15) 1.95px 1.95px 2.6px 0px inset;
|
||||
}
|
||||
|
||||
.profile-builder {
|
||||
hr {
|
||||
@include hr-lightweight-light;
|
||||
}
|
||||
}
|
||||
|
||||
.modifiers-combat,
|
||||
.modifiers-attributes {
|
||||
> div {
|
||||
@include section-light;
|
||||
}
|
||||
}
|
||||
|
||||
.armor-row {
|
||||
display: grid;
|
||||
gap: 0.5rem;
|
||||
grid-template-columns: 15rem 10rem 10rem 10rem 11rem;
|
||||
align-items: center;
|
||||
|
||||
> label {
|
||||
display: flex;
|
||||
align-self: center;
|
||||
text-align: center;
|
||||
align-items: center;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.armor-profiles {
|
||||
margin-left: 1rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user