mirror of
https://github.com/Nighthawk42/roll20-character-sheets.git
synced 2026-09-07 15:42:33 +00:00
Merge pull request #13771 from ggutenberg/v1.7.0
Palladium Rifts by Grinning Gecko v1.7.0. Features/fixes.
This commit is contained in:
@@ -1,5 +1,19 @@
|
||||
# Changelog
|
||||
|
||||
## [1.7.0] - 2025-02-08
|
||||
|
||||
### Added
|
||||
|
||||
- Add Damage to Ancient Weapon Proficiencies (applies to Pole Arm and Whip).
|
||||
- Add hideable YouTube tutorial link.
|
||||
- Output error message to chat when TT is clicked if the Active Profile has no attacks.
|
||||
- Add nameable Modern Damage 1, 2, and 3 to Modifiers and Profiles for extra damage types.
|
||||
|
||||
### Changed
|
||||
|
||||
- Add 20 to Turn Tracker initiative when a Natural 20 is rolled.
|
||||
- Fix some grid layout issues in Modifiers and Profiles.
|
||||
|
||||
## [1.6.1] - 2025-01-27
|
||||
|
||||
### Added
|
||||
|
||||
+14
-3
@@ -242,6 +242,9 @@ a {
|
||||
font-family: "dicefontd20";
|
||||
content: "t";
|
||||
}
|
||||
.charsheet main#megaverse .youtube-toggle[value="1"] ~ .youtube-link {
|
||||
display: none;
|
||||
}
|
||||
.charsheet main#megaverse h4 {
|
||||
text-decoration: underline;
|
||||
}
|
||||
@@ -453,7 +456,7 @@ a {
|
||||
.charsheet main#megaverse .modifiers-attributes {
|
||||
display: grid;
|
||||
gap: 1rem;
|
||||
grid-template-columns: repeat(auto-fit, minmax(20rem, 1fr));
|
||||
grid-template-columns: repeat(auto-fit, minmax(25rem, 1fr));
|
||||
align-items: start;
|
||||
margin-top: 0.5rem;
|
||||
}
|
||||
@@ -475,6 +478,10 @@ a {
|
||||
.charsheet main#megaverse .profiles .profile .modifiers-combat .bonus-type-container label {
|
||||
grid-template-columns: 1fr 1rem 5rem 4rem;
|
||||
}
|
||||
.charsheet main#megaverse .profiles .profile .modifiers-combat .bonus-type-container label > div {
|
||||
display: grid;
|
||||
grid-template-columns: auto auto;
|
||||
}
|
||||
.charsheet main#megaverse .bonus-ps-container {
|
||||
display: grid;
|
||||
gap: 0.5rem;
|
||||
@@ -484,7 +491,7 @@ a {
|
||||
display: grid;
|
||||
align-items: center;
|
||||
gap: 0.5rem;
|
||||
grid-template-columns: 6.5rem minmax(4rem, 1fr) 4rem 4rem;
|
||||
grid-template-columns: 6.5rem minmax(6rem, auto) 6.5rem 4rem;
|
||||
}
|
||||
.charsheet main#megaverse .bonus-ps-container label.select select {
|
||||
grid-column: 2/span 2;
|
||||
@@ -555,6 +562,10 @@ a {
|
||||
grid-template-columns: 1fr 5rem;
|
||||
width: 100%;
|
||||
}
|
||||
.charsheet main#megaverse .bonus-type-container label > div {
|
||||
display: grid;
|
||||
grid-template-columns: auto auto;
|
||||
}
|
||||
.charsheet main#megaverse .bonus-type-container label span {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
@@ -646,7 +657,7 @@ a {
|
||||
}
|
||||
.charsheet main#megaverse .wp-container .wp .heading,
|
||||
.charsheet main#megaverse .wp-container .wp .values {
|
||||
grid-template-columns: minmax(16rem, 1fr) 5rem 5rem 5rem 5rem 5rem 5rem 5rem 5rem 1fr;
|
||||
grid-template-columns: minmax(16rem, 1fr) 5rem 5rem 5rem 5rem 5rem 5rem 5rem 5rem 5rem 1fr;
|
||||
}
|
||||
.charsheet main#megaverse .wp-container .wpmodern .heading,
|
||||
.charsheet main#megaverse .wp-container .wpmodern .values {
|
||||
|
||||
+238
-3
@@ -5,6 +5,20 @@
|
||||
src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/Palladium%20Rifts%20by%20Grinning%20Gecko/rifts-logo.png"
|
||||
/>
|
||||
<span name="attr_character_name"></span>
|
||||
<input type="hidden" class="youtube-toggle" name="attr_youtube" />
|
||||
<span style="float:right;" class="youtube-link">
|
||||
Link will appear in chat:
|
||||
<button
|
||||
style="font-size: 1em;"
|
||||
class="no-dice"
|
||||
type="roll"
|
||||
value="[YouTube Sheet Tutorials](https://www.youtube.com/playlist?list=PLZk7Im2gciP87Imdx6GcVrZT6JAK10zvv)"
|
||||
name="roll_youtube"
|
||||
>
|
||||
YouTube Sheet Tutorials
|
||||
</button>
|
||||
</span>
|
||||
|
||||
<div class="r-tabbed">
|
||||
<input type="radio" id="tab-core" name="css-tabs" checked />
|
||||
<input type="radio" id="tab-skills" name="css-tabs" />
|
||||
@@ -1323,6 +1337,18 @@
|
||||
><span>Damage: Pulse/Burst</span>
|
||||
<input type="text" value="0" name="attr_damage_range_burst" />
|
||||
</label>
|
||||
<label
|
||||
><div><span>Damage 1</span><input type="text" value="" name="attr_damage_range_1_name" placeholder="Name" /></div>
|
||||
<input type="text" value="0" name="attr_damage_range_1" />
|
||||
</label>
|
||||
<label
|
||||
><div><span>Damage 2</span><input type="text" value="" name="attr_damage_range_2_name" placeholder="Name" /></div>
|
||||
<input type="text" value="0" name="attr_damage_range_2" />
|
||||
</label>
|
||||
<label
|
||||
><div><span>Damage 3</span><input type="text" value="" name="attr_damage_range_3_name" placeholder="Name" /></div>
|
||||
<input type="text" value="0" name="attr_damage_range_3" />
|
||||
</label>
|
||||
</div>
|
||||
<div class="combat-defense bonus-type-container">
|
||||
<h3><span>🛡</span> Defense <span>🥷</span></h3>
|
||||
@@ -1471,6 +1497,7 @@
|
||||
<h5>Weapon Proficiency</h5>
|
||||
<h5>Strike</h5>
|
||||
<h5>Parry</h5>
|
||||
<h5>Damage</h5>
|
||||
<h5>Disarm</h5>
|
||||
<h5>Throw</h5>
|
||||
<h5>Entangle</h5>
|
||||
@@ -1484,6 +1511,7 @@
|
||||
<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_damage" />
|
||||
<input type="number" value="0" name="attr_disarm" />
|
||||
<input type="number" value="0" name="attr_throw" />
|
||||
<input type="number" value="0" name="attr_entangle" />
|
||||
@@ -2240,6 +2268,18 @@
|
||||
><span>Damage: Pulse/Burst</span>
|
||||
<input type="text" value="0" name="attr_damage_range_burst" />
|
||||
</label>
|
||||
<label
|
||||
><div><span>Damage 1</span><input type="text" value="" name="attr_damage_range_1_name" placeholder="Name" /></div>
|
||||
<input type="text" value="0" name="attr_damage_range_1" />
|
||||
</label>
|
||||
<label
|
||||
><div><span>Damage 2</span><input type="text" value="" name="attr_damage_range_2_name" placeholder="Name" /></div>
|
||||
<input type="text" value="0" name="attr_damage_range_2" />
|
||||
</label>
|
||||
<label
|
||||
><div><span>Damage 3</span><input type="text" value="" name="attr_damage_range_3_name" placeholder="Name" /></div>
|
||||
<input type="text" value="0" name="attr_damage_range_3" />
|
||||
</label>
|
||||
</div>
|
||||
<div class="combat-defense bonus-type-container">
|
||||
<h3><span>🛡</span> Defense <span>🥷</span></h3>
|
||||
@@ -3077,6 +3117,18 @@
|
||||
><span>Damage: Pulse/Burst</span>
|
||||
<input type="text" value="0" name="attr_damage_range_burst" />
|
||||
</label>
|
||||
<label
|
||||
><div><span>Damage 1</span><input type="text" value="" name="attr_damage_range_1_name" placeholder="Name" /></div>
|
||||
<input type="text" value="0" name="attr_damage_range_1" />
|
||||
</label>
|
||||
<label
|
||||
><div><span>Damage 2</span><input type="text" value="" name="attr_damage_range_2_name" placeholder="Name" /></div>
|
||||
<input type="text" value="0" name="attr_damage_range_2" />
|
||||
</label>
|
||||
<label
|
||||
><div><span>Damage 3</span><input type="text" value="" name="attr_damage_range_3_name" placeholder="Name" /></div>
|
||||
<input type="text" value="0" name="attr_damage_range_3" />
|
||||
</label>
|
||||
</div>
|
||||
<div class="combat-defense bonus-type-container">
|
||||
<h3><span>🛡</span> Defense <span>🥷</span></h3>
|
||||
@@ -3915,6 +3967,18 @@
|
||||
><span>Damage: Pulse/Burst</span>
|
||||
<input type="text" value="0" name="attr_damage_range_burst" />
|
||||
</label>
|
||||
<label
|
||||
><div><span>Damage 1</span><input type="text" value="" name="attr_damage_range_1_name" placeholder="Name" /></div>
|
||||
<input type="text" value="0" name="attr_damage_range_1" />
|
||||
</label>
|
||||
<label
|
||||
><div><span>Damage 2</span><input type="text" value="" name="attr_damage_range_2_name" placeholder="Name" /></div>
|
||||
<input type="text" value="0" name="attr_damage_range_2" />
|
||||
</label>
|
||||
<label
|
||||
><div><span>Damage 3</span><input type="text" value="" name="attr_damage_range_3_name" placeholder="Name" /></div>
|
||||
<input type="text" value="0" name="attr_damage_range_3" />
|
||||
</label>
|
||||
</div>
|
||||
<div class="combat-defense bonus-type-container">
|
||||
<h3><span>🛡</span> Defense <span>🥷</span></h3>
|
||||
@@ -4631,6 +4695,18 @@
|
||||
><span>Damage: Pulse/Burst</span>
|
||||
<input type="text" value="0" name="attr_damage_range_burst" />
|
||||
</label>
|
||||
<label
|
||||
><div><span>Damage 1</span><input type="text" value="" name="attr_damage_range_1_name" placeholder="Name" /></div>
|
||||
<input type="text" value="0" name="attr_damage_range_1" />
|
||||
</label>
|
||||
<label
|
||||
><div><span>Damage 2</span><input type="text" value="" name="attr_damage_range_2_name" placeholder="Name" /></div>
|
||||
<input type="text" value="0" name="attr_damage_range_2" />
|
||||
</label>
|
||||
<label
|
||||
><div><span>Damage 3</span><input type="text" value="" name="attr_damage_range_3_name" placeholder="Name" /></div>
|
||||
<input type="text" value="0" name="attr_damage_range_3" />
|
||||
</label>
|
||||
</div>
|
||||
<div class="combat-defense bonus-type-container">
|
||||
<h3><span>🛡</span> Defense <span>🥷</span></h3>
|
||||
@@ -5293,6 +5369,51 @@
|
||||
name="roll_active_profile_bonus_damage_range_burst"
|
||||
></button>
|
||||
</label>
|
||||
<label
|
||||
><div><span>Damage 1</span><span name="attr_active_profile_damage_range_1_name"></span></div>
|
||||
<input
|
||||
type="hidden"
|
||||
value="0"
|
||||
name="attr_active_profile_damage_range_1"
|
||||
/>
|
||||
<span></span>
|
||||
<span name="attr_active_profile_damage_range_1"></span>
|
||||
<button
|
||||
type="roll"
|
||||
value="@{opt_whisper}&{template:custom} {{title=@{character_name} inflicts range damage from a @{active_profile_damage_range_1_name} shot!}} {{Range Damage=[[@{active_profile_damage_range_1}]]}}"
|
||||
name="roll_active_profile_bonus_damage_range_1"
|
||||
></button>
|
||||
</label>
|
||||
<label
|
||||
><div><span>Damage 2</span><span name="attr_active_profile_damage_range_2_name"></span></div>
|
||||
<input
|
||||
type="hidden"
|
||||
value="0"
|
||||
name="attr_active_profile_damage_range_2"
|
||||
/>
|
||||
<span></span>
|
||||
<span name="attr_active_profile_damage_range_2"></span>
|
||||
<button
|
||||
type="roll"
|
||||
value="@{opt_whisper}&{template:custom} {{title=@{character_name} inflicts range damage from a @{active_profile_damage_range_2_name} shot!}} {{Range Damage=[[@{active_profile_damage_range_2}]]}}"
|
||||
name="roll_active_profile_bonus_damage_range_2"
|
||||
></button>
|
||||
</label>
|
||||
<label
|
||||
><div><span>Damage 3</span><span name="attr_active_profile_damage_range_3_name"></span></div>
|
||||
<input
|
||||
type="hidden"
|
||||
value="0"
|
||||
name="attr_active_profile_damage_range_3"
|
||||
/>
|
||||
<span></span>
|
||||
<span name="attr_active_profile_damage_range_3"></span>
|
||||
<button
|
||||
type="roll"
|
||||
value="@{opt_whisper}&{template:custom} {{title=@{character_name} inflicts range damage from a @{active_profile_damage_range_3_name} shot!}} {{Range Damage=[[@{active_profile_damage_range_3}]]}}"
|
||||
name="roll_active_profile_bonus_damage_range_3"
|
||||
></button>
|
||||
</label>
|
||||
</div>
|
||||
<div class="combat-defense bonus-type-container">
|
||||
<h3><span>🛡</span> Defense <span>🥷</span></h3>
|
||||
@@ -6949,6 +7070,39 @@
|
||||
name="roll_bonus_damage_range_burst"
|
||||
></button>
|
||||
</label>
|
||||
<label
|
||||
><div><span>Damage 1</span><span name="attr_damage_range_1_name"></span></div>
|
||||
<input type="hidden" value="0" name="attr_damage_range_1" />
|
||||
<span></span>
|
||||
<span name="attr_damage_range_1"></span>
|
||||
<button
|
||||
type="roll"
|
||||
value="@{opt_whisper}&{template:custom} {{title=@{character_name} inflicts range damage!}} {{Range Damage=[[@{damage_range_1}]]}}"
|
||||
name="roll_bonus_damage_range_1"
|
||||
></button>
|
||||
</label>
|
||||
<label
|
||||
><div><span>Damage 2</span><span name="attr_damage_range_2_name"></span></div>
|
||||
<input type="hidden" value="0" name="attr_damage_range_2" />
|
||||
<span></span>
|
||||
<span name="attr_damage_range_2"></span>
|
||||
<button
|
||||
type="roll"
|
||||
value="@{opt_whisper}&{template:custom} {{title=@{character_name} inflicts range damage!}} {{Range Damage=[[@{damage_range_2}]]}}"
|
||||
name="roll_bonus_damage_range_2"
|
||||
></button>
|
||||
</label>
|
||||
<label
|
||||
><div><span>Damage 3</span><span name="attr_damage_range_3_name"></span></div>
|
||||
<input type="hidden" value="0" name="attr_damage_range_3" />
|
||||
<span></span>
|
||||
<span name="attr_damage_range_3"></span>
|
||||
<button
|
||||
type="roll"
|
||||
value="@{opt_whisper}&{template:custom} {{title=@{character_name} inflicts range damage!}} {{Range Damage=[[@{damage_range_3}]]}}"
|
||||
name="roll_bonus_damage_range_3"
|
||||
></button>
|
||||
</label>
|
||||
</div>
|
||||
<div class="combat-defense bonus-type-container">
|
||||
<h3><span>🛡</span> Defense <span>🥷</span></h3>
|
||||
@@ -8217,6 +8371,39 @@
|
||||
name="roll_bonus_damage_range_burst"
|
||||
></button>
|
||||
</label>
|
||||
<label
|
||||
><div><span>Damage 1</span><span name="attr_damage_range_1_name"></span></div>
|
||||
<input type="hidden" value="0" name="attr_damage_range_1" />
|
||||
<span></span>
|
||||
<span name="attr_damage_range_1"></span>
|
||||
<button
|
||||
type="roll"
|
||||
value="@{opt_whisper}&{template:custom} {{title=@{character_name} inflicts range damage!}} {{Range Damage=[[@{damage_range_1}]]}}"
|
||||
name="roll_bonus_damage_range_1"
|
||||
></button>
|
||||
</label>
|
||||
<label
|
||||
><div><span>Damage 2</span><span name="attr_damage_range_2_name"></span></div>
|
||||
<input type="hidden" value="0" name="attr_damage_range_2" />
|
||||
<span></span>
|
||||
<span name="attr_damage_range_2"></span>
|
||||
<button
|
||||
type="roll"
|
||||
value="@{opt_whisper}&{template:custom} {{title=@{character_name} inflicts range damage!}} {{Range Damage=[[@{damage_range_2}]]}}"
|
||||
name="roll_bonus_damage_range_2"
|
||||
></button>
|
||||
</label>
|
||||
<label
|
||||
><div><span>Damage 3</span><span name="attr_damage_range_3_name"></span></div>
|
||||
<input type="hidden" value="0" name="attr_damage_range_3" />
|
||||
<span></span>
|
||||
<span name="attr_damage_range_3"></span>
|
||||
<button
|
||||
type="roll"
|
||||
value="@{opt_whisper}&{template:custom} {{title=@{character_name} inflicts range damage!}} {{Range Damage=[[@{damage_range_3}]]}}"
|
||||
name="roll_bonus_damage_range_3"
|
||||
></button>
|
||||
</label>
|
||||
</div>
|
||||
<div class="combat-defense bonus-type-container">
|
||||
<h3><span>🛡</span> Defense <span>🥷</span></h3>
|
||||
@@ -9354,6 +9541,18 @@
|
||||
</p>
|
||||
</details>
|
||||
<p>Click <b>Instructions</b> for detailed instructions.</p>
|
||||
<span>
|
||||
Link will appear in chat:
|
||||
<button
|
||||
style="font-size: 1em;"
|
||||
class="no-dice"
|
||||
type="roll"
|
||||
value="[YouTube Sheet Tutorials](https://www.youtube.com/playlist?list=PLZk7Im2gciP87Imdx6GcVrZT6JAK10zvv)"
|
||||
name="roll_youtube"
|
||||
>
|
||||
YouTube Sheet Tutorials
|
||||
</button>
|
||||
</span>
|
||||
<hr />
|
||||
<h3>Options</h3>
|
||||
<input type="hidden" name="attr_version" value="1.2.0" />
|
||||
@@ -9376,6 +9575,9 @@
|
||||
><input type="checkbox" name="attr_debug" value="1" /> View Sheet in Debug
|
||||
Mode</label
|
||||
>
|
||||
<label
|
||||
><input type="checkbox" name="attr_youtube" value="1" /> Hide YouTube link above tabs</label
|
||||
>
|
||||
<label
|
||||
><input type="checkbox" name=attr_outputusage" value="1" /> Output
|
||||
ISP/PPE/Damage usage to chat</label
|
||||
@@ -10649,13 +10851,13 @@ const WP = {
|
||||
],
|
||||
"w.p. pole arm": [
|
||||
{ strike: 1, parry: 1 },
|
||||
{},
|
||||
{ damage: 2 },
|
||||
{ strike: 1, parry: 1, throw: 1 },
|
||||
{},
|
||||
{},
|
||||
{ strike: 1, parry: 1 },
|
||||
{},
|
||||
{ throw: 1 },
|
||||
{ damage: 2, throw: 1 },
|
||||
{ strike: 1, parry: 1 },
|
||||
{},
|
||||
{},
|
||||
@@ -10962,6 +11164,7 @@ const WP_KEYS = {
|
||||
"level",
|
||||
"strike",
|
||||
"parry",
|
||||
"damage",
|
||||
"disarm",
|
||||
"rof",
|
||||
"throw",
|
||||
@@ -11086,6 +11289,12 @@ const COMBAT_KEYS = [
|
||||
"damage_range",
|
||||
"damage_range_single",
|
||||
"damage_range_burst",
|
||||
"damage_range_1",
|
||||
"damage_range_1_name",
|
||||
"damage_range_2",
|
||||
"damage_range_2_name",
|
||||
"damage_range_3",
|
||||
"damage_range_3_name",
|
||||
"critical",
|
||||
"knockout",
|
||||
"deathblow",
|
||||
@@ -11619,6 +11828,13 @@ async function palladiumAddToTurnTracker(initKey, attacksKey) {
|
||||
initKey,
|
||||
attacksKey,
|
||||
]);
|
||||
if (!attacks) {
|
||||
const noAttacksMessage = await startRoll(
|
||||
`@{opt_whisper}&{template:custom} {{color=red}} {{title=@{selected|character_name} has no attacks with the Active Profile.}}`
|
||||
)
|
||||
finishRoll(noAttacksMessage.rollId);
|
||||
return;
|
||||
}
|
||||
const initString = init > 0 ? `+${init}` : `${init}`;
|
||||
const roll = await startRoll(
|
||||
`@{opt_whisper}&{template:initiative} {{title=@{selected|character_name} rolls initiative!}} {{diceroll=[[1d20]]}} {{modifier=${initString}}}`
|
||||
@@ -11629,8 +11845,11 @@ async function palladiumAddToTurnTracker(initKey, attacksKey) {
|
||||
finishRoll(roll.rollId, {
|
||||
diceroll: computed,
|
||||
});
|
||||
// Add 20 to the roll if a nat20 is rolled. Simplest way to bump the roll to the top of the turn order.
|
||||
const nat20bonus = roll.results.diceroll.result === 20 ? 20 : 0;
|
||||
const computedWithNat20 = computed + nat20bonus;
|
||||
const addToTracker = await startRoll(
|
||||
`@{opt_whisper}&{template:custom} {{title=@{selected|character_name} added to Turn Tracker}} {{Initiative=[[[[${computed}]] &{tracker}]]}}`
|
||||
`@{opt_whisper}&{template:custom} {{title=@{selected|character_name} added to Turn Tracker}} ${nat20bonus === 20 ? '{{Natural 20!=20 points added to initiative roll!}}' : ''} {{Initiative=[[[[${computedWithNat20}]] &{tracker}]]}}`
|
||||
);
|
||||
finishRoll(addToTracker.rollId);
|
||||
// https://app.roll20.net/forum/post/6817409/multiple-initiative-values-for-a-single-character/?pageforid=6817748#post-6817748
|
||||
@@ -11854,6 +12073,9 @@ async function migrateAttributes() {
|
||||
{
|
||||
version: "1.6.1",
|
||||
},
|
||||
{
|
||||
version: "1.7.0",
|
||||
}
|
||||
];
|
||||
|
||||
const { version, migrated } = await getAttrsAsync(["version", "migrated"]);
|
||||
@@ -12072,6 +12294,12 @@ async function combineBonuses(rowIds, destinationPrefix) {
|
||||
`${destinationPrefix}_damage_range`,
|
||||
`${destinationPrefix}_damage_range_single`,
|
||||
`${destinationPrefix}_damage_range_burst`,
|
||||
`${destinationPrefix}_damage_range_1`,
|
||||
`${destinationPrefix}_damage_range_1_name`,
|
||||
`${destinationPrefix}_damage_range_2`,
|
||||
`${destinationPrefix}_damage_range_2_name`,
|
||||
`${destinationPrefix}_damage_range_3`,
|
||||
`${destinationPrefix}_damage_range_3_name`,
|
||||
],
|
||||
section: "bonuses",
|
||||
fields: [
|
||||
@@ -12082,6 +12310,12 @@ async function combineBonuses(rowIds, destinationPrefix) {
|
||||
"damage_range",
|
||||
"damage_range_single",
|
||||
"damage_range_burst",
|
||||
"damage_range_1",
|
||||
"damage_range_1_name",
|
||||
"damage_range_2",
|
||||
"damage_range_2_name",
|
||||
"damage_range_3",
|
||||
"damage_range_3_name",
|
||||
],
|
||||
filter: rowIds,
|
||||
});
|
||||
@@ -12654,6 +12888,7 @@ async function addModifierToBonusesAsync(section, rowId) {
|
||||
const thingAttrs = REPEATING_BONUS_KEYS.map(
|
||||
(key) => `repeating_${section}_${rowId}_${key}`
|
||||
);
|
||||
console.log("thingAttrs", thingAttrs);
|
||||
thingAttrs.push(thingBonusId);
|
||||
const a = await getAttrsAsync(thingAttrs);
|
||||
console.log(a);
|
||||
|
||||
@@ -242,6 +242,9 @@ a {
|
||||
font-family: "dicefontd20";
|
||||
content: "t";
|
||||
}
|
||||
.charsheet main#megaverse .youtube-toggle[value="1"] ~ .youtube-link {
|
||||
display: none;
|
||||
}
|
||||
.charsheet main#megaverse h4 {
|
||||
text-decoration: underline;
|
||||
}
|
||||
@@ -453,7 +456,7 @@ a {
|
||||
.charsheet main#megaverse .modifiers-attributes {
|
||||
display: grid;
|
||||
gap: 1rem;
|
||||
grid-template-columns: repeat(auto-fit, minmax(20rem, 1fr));
|
||||
grid-template-columns: repeat(auto-fit, minmax(25rem, 1fr));
|
||||
align-items: start;
|
||||
margin-top: 0.5rem;
|
||||
}
|
||||
@@ -475,6 +478,10 @@ a {
|
||||
.charsheet main#megaverse .profiles .profile .modifiers-combat .bonus-type-container label {
|
||||
grid-template-columns: 1fr 1rem 5rem 4rem;
|
||||
}
|
||||
.charsheet main#megaverse .profiles .profile .modifiers-combat .bonus-type-container label > div {
|
||||
display: grid;
|
||||
grid-template-columns: auto auto;
|
||||
}
|
||||
.charsheet main#megaverse .bonus-ps-container {
|
||||
display: grid;
|
||||
gap: 0.5rem;
|
||||
@@ -484,7 +491,7 @@ a {
|
||||
display: grid;
|
||||
align-items: center;
|
||||
gap: 0.5rem;
|
||||
grid-template-columns: 6.5rem minmax(4rem, 1fr) 4rem 4rem;
|
||||
grid-template-columns: 6.5rem minmax(6rem, auto) 6.5rem 4rem;
|
||||
}
|
||||
.charsheet main#megaverse .bonus-ps-container label.select select {
|
||||
grid-column: 2/span 2;
|
||||
@@ -555,6 +562,10 @@ a {
|
||||
grid-template-columns: 1fr 5rem;
|
||||
width: 100%;
|
||||
}
|
||||
.charsheet main#megaverse .bonus-type-container label > div {
|
||||
display: grid;
|
||||
grid-template-columns: auto auto;
|
||||
}
|
||||
.charsheet main#megaverse .bonus-type-container label span {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
@@ -646,7 +657,7 @@ a {
|
||||
}
|
||||
.charsheet main#megaverse .wp-container .wp .heading,
|
||||
.charsheet main#megaverse .wp-container .wp .values {
|
||||
grid-template-columns: minmax(16rem, 1fr) 5rem 5rem 5rem 5rem 5rem 5rem 5rem 5rem 1fr;
|
||||
grid-template-columns: minmax(16rem, 1fr) 5rem 5rem 5rem 5rem 5rem 5rem 5rem 5rem 5rem 1fr;
|
||||
}
|
||||
.charsheet main#megaverse .wp-container .wpmodern .heading,
|
||||
.charsheet main#megaverse .wp-container .wpmodern .values {
|
||||
|
||||
@@ -5,6 +5,20 @@
|
||||
src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/Palladium%20Rifts%20by%20Grinning%20Gecko/rifts-logo.png"
|
||||
/>
|
||||
<span name="attr_character_name"></span>
|
||||
<input type="hidden" class="youtube-toggle" name="attr_youtube" />
|
||||
<span style="float:right;" class="youtube-link">
|
||||
Link will appear in chat:
|
||||
<button
|
||||
style="font-size: 1em;"
|
||||
class="no-dice"
|
||||
type="roll"
|
||||
value="[YouTube Sheet Tutorials](https://www.youtube.com/playlist?list=PLZk7Im2gciP87Imdx6GcVrZT6JAK10zvv)"
|
||||
name="roll_youtube"
|
||||
>
|
||||
YouTube Sheet Tutorials
|
||||
</button>
|
||||
</span>
|
||||
|
||||
<div class="r-tabbed">
|
||||
<input type="radio" id="tab-core" name="css-tabs" checked />
|
||||
<input type="radio" id="tab-skills" name="css-tabs" />
|
||||
@@ -1323,6 +1337,18 @@
|
||||
><span>Damage: Pulse/Burst</span>
|
||||
<input type="text" value="0" name="attr_damage_range_burst" />
|
||||
</label>
|
||||
<label
|
||||
><div><span>Damage 1</span><input type="text" value="" name="attr_damage_range_1_name" placeholder="Name" /></div>
|
||||
<input type="text" value="0" name="attr_damage_range_1" />
|
||||
</label>
|
||||
<label
|
||||
><div><span>Damage 2</span><input type="text" value="" name="attr_damage_range_2_name" placeholder="Name" /></div>
|
||||
<input type="text" value="0" name="attr_damage_range_2" />
|
||||
</label>
|
||||
<label
|
||||
><div><span>Damage 3</span><input type="text" value="" name="attr_damage_range_3_name" placeholder="Name" /></div>
|
||||
<input type="text" value="0" name="attr_damage_range_3" />
|
||||
</label>
|
||||
</div>
|
||||
<div class="combat-defense bonus-type-container">
|
||||
<h3><span>🛡</span> Defense <span>🥷</span></h3>
|
||||
@@ -1471,6 +1497,7 @@
|
||||
<h5>Weapon Proficiency</h5>
|
||||
<h5>Strike</h5>
|
||||
<h5>Parry</h5>
|
||||
<h5>Damage</h5>
|
||||
<h5>Disarm</h5>
|
||||
<h5>Throw</h5>
|
||||
<h5>Entangle</h5>
|
||||
@@ -1484,6 +1511,7 @@
|
||||
<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_damage" />
|
||||
<input type="number" value="0" name="attr_disarm" />
|
||||
<input type="number" value="0" name="attr_throw" />
|
||||
<input type="number" value="0" name="attr_entangle" />
|
||||
@@ -2240,6 +2268,18 @@
|
||||
><span>Damage: Pulse/Burst</span>
|
||||
<input type="text" value="0" name="attr_damage_range_burst" />
|
||||
</label>
|
||||
<label
|
||||
><div><span>Damage 1</span><input type="text" value="" name="attr_damage_range_1_name" placeholder="Name" /></div>
|
||||
<input type="text" value="0" name="attr_damage_range_1" />
|
||||
</label>
|
||||
<label
|
||||
><div><span>Damage 2</span><input type="text" value="" name="attr_damage_range_2_name" placeholder="Name" /></div>
|
||||
<input type="text" value="0" name="attr_damage_range_2" />
|
||||
</label>
|
||||
<label
|
||||
><div><span>Damage 3</span><input type="text" value="" name="attr_damage_range_3_name" placeholder="Name" /></div>
|
||||
<input type="text" value="0" name="attr_damage_range_3" />
|
||||
</label>
|
||||
</div>
|
||||
<div class="combat-defense bonus-type-container">
|
||||
<h3><span>🛡</span> Defense <span>🥷</span></h3>
|
||||
@@ -3077,6 +3117,18 @@
|
||||
><span>Damage: Pulse/Burst</span>
|
||||
<input type="text" value="0" name="attr_damage_range_burst" />
|
||||
</label>
|
||||
<label
|
||||
><div><span>Damage 1</span><input type="text" value="" name="attr_damage_range_1_name" placeholder="Name" /></div>
|
||||
<input type="text" value="0" name="attr_damage_range_1" />
|
||||
</label>
|
||||
<label
|
||||
><div><span>Damage 2</span><input type="text" value="" name="attr_damage_range_2_name" placeholder="Name" /></div>
|
||||
<input type="text" value="0" name="attr_damage_range_2" />
|
||||
</label>
|
||||
<label
|
||||
><div><span>Damage 3</span><input type="text" value="" name="attr_damage_range_3_name" placeholder="Name" /></div>
|
||||
<input type="text" value="0" name="attr_damage_range_3" />
|
||||
</label>
|
||||
</div>
|
||||
<div class="combat-defense bonus-type-container">
|
||||
<h3><span>🛡</span> Defense <span>🥷</span></h3>
|
||||
@@ -3915,6 +3967,18 @@
|
||||
><span>Damage: Pulse/Burst</span>
|
||||
<input type="text" value="0" name="attr_damage_range_burst" />
|
||||
</label>
|
||||
<label
|
||||
><div><span>Damage 1</span><input type="text" value="" name="attr_damage_range_1_name" placeholder="Name" /></div>
|
||||
<input type="text" value="0" name="attr_damage_range_1" />
|
||||
</label>
|
||||
<label
|
||||
><div><span>Damage 2</span><input type="text" value="" name="attr_damage_range_2_name" placeholder="Name" /></div>
|
||||
<input type="text" value="0" name="attr_damage_range_2" />
|
||||
</label>
|
||||
<label
|
||||
><div><span>Damage 3</span><input type="text" value="" name="attr_damage_range_3_name" placeholder="Name" /></div>
|
||||
<input type="text" value="0" name="attr_damage_range_3" />
|
||||
</label>
|
||||
</div>
|
||||
<div class="combat-defense bonus-type-container">
|
||||
<h3><span>🛡</span> Defense <span>🥷</span></h3>
|
||||
@@ -4631,6 +4695,18 @@
|
||||
><span>Damage: Pulse/Burst</span>
|
||||
<input type="text" value="0" name="attr_damage_range_burst" />
|
||||
</label>
|
||||
<label
|
||||
><div><span>Damage 1</span><input type="text" value="" name="attr_damage_range_1_name" placeholder="Name" /></div>
|
||||
<input type="text" value="0" name="attr_damage_range_1" />
|
||||
</label>
|
||||
<label
|
||||
><div><span>Damage 2</span><input type="text" value="" name="attr_damage_range_2_name" placeholder="Name" /></div>
|
||||
<input type="text" value="0" name="attr_damage_range_2" />
|
||||
</label>
|
||||
<label
|
||||
><div><span>Damage 3</span><input type="text" value="" name="attr_damage_range_3_name" placeholder="Name" /></div>
|
||||
<input type="text" value="0" name="attr_damage_range_3" />
|
||||
</label>
|
||||
</div>
|
||||
<div class="combat-defense bonus-type-container">
|
||||
<h3><span>🛡</span> Defense <span>🥷</span></h3>
|
||||
@@ -5293,6 +5369,51 @@
|
||||
name="roll_active_profile_bonus_damage_range_burst"
|
||||
></button>
|
||||
</label>
|
||||
<label
|
||||
><div><span>Damage 1</span><span name="attr_active_profile_damage_range_1_name"></span></div>
|
||||
<input
|
||||
type="hidden"
|
||||
value="0"
|
||||
name="attr_active_profile_damage_range_1"
|
||||
/>
|
||||
<span></span>
|
||||
<span name="attr_active_profile_damage_range_1"></span>
|
||||
<button
|
||||
type="roll"
|
||||
value="@{opt_whisper}&{template:custom} {{title=@{character_name} inflicts range damage from a @{active_profile_damage_range_1_name} shot!}} {{Range Damage=[[@{active_profile_damage_range_1}]]}}"
|
||||
name="roll_active_profile_bonus_damage_range_1"
|
||||
></button>
|
||||
</label>
|
||||
<label
|
||||
><div><span>Damage 2</span><span name="attr_active_profile_damage_range_2_name"></span></div>
|
||||
<input
|
||||
type="hidden"
|
||||
value="0"
|
||||
name="attr_active_profile_damage_range_2"
|
||||
/>
|
||||
<span></span>
|
||||
<span name="attr_active_profile_damage_range_2"></span>
|
||||
<button
|
||||
type="roll"
|
||||
value="@{opt_whisper}&{template:custom} {{title=@{character_name} inflicts range damage from a @{active_profile_damage_range_2_name} shot!}} {{Range Damage=[[@{active_profile_damage_range_2}]]}}"
|
||||
name="roll_active_profile_bonus_damage_range_2"
|
||||
></button>
|
||||
</label>
|
||||
<label
|
||||
><div><span>Damage 3</span><span name="attr_active_profile_damage_range_3_name"></span></div>
|
||||
<input
|
||||
type="hidden"
|
||||
value="0"
|
||||
name="attr_active_profile_damage_range_3"
|
||||
/>
|
||||
<span></span>
|
||||
<span name="attr_active_profile_damage_range_3"></span>
|
||||
<button
|
||||
type="roll"
|
||||
value="@{opt_whisper}&{template:custom} {{title=@{character_name} inflicts range damage from a @{active_profile_damage_range_3_name} shot!}} {{Range Damage=[[@{active_profile_damage_range_3}]]}}"
|
||||
name="roll_active_profile_bonus_damage_range_3"
|
||||
></button>
|
||||
</label>
|
||||
</div>
|
||||
<div class="combat-defense bonus-type-container">
|
||||
<h3><span>🛡</span> Defense <span>🥷</span></h3>
|
||||
@@ -6949,6 +7070,39 @@
|
||||
name="roll_bonus_damage_range_burst"
|
||||
></button>
|
||||
</label>
|
||||
<label
|
||||
><div><span>Damage 1</span><span name="attr_damage_range_1_name"></span></div>
|
||||
<input type="hidden" value="0" name="attr_damage_range_1" />
|
||||
<span></span>
|
||||
<span name="attr_damage_range_1"></span>
|
||||
<button
|
||||
type="roll"
|
||||
value="@{opt_whisper}&{template:custom} {{title=@{character_name} inflicts range damage!}} {{Range Damage=[[@{damage_range_1}]]}}"
|
||||
name="roll_bonus_damage_range_1"
|
||||
></button>
|
||||
</label>
|
||||
<label
|
||||
><div><span>Damage 2</span><span name="attr_damage_range_2_name"></span></div>
|
||||
<input type="hidden" value="0" name="attr_damage_range_2" />
|
||||
<span></span>
|
||||
<span name="attr_damage_range_2"></span>
|
||||
<button
|
||||
type="roll"
|
||||
value="@{opt_whisper}&{template:custom} {{title=@{character_name} inflicts range damage!}} {{Range Damage=[[@{damage_range_2}]]}}"
|
||||
name="roll_bonus_damage_range_2"
|
||||
></button>
|
||||
</label>
|
||||
<label
|
||||
><div><span>Damage 3</span><span name="attr_damage_range_3_name"></span></div>
|
||||
<input type="hidden" value="0" name="attr_damage_range_3" />
|
||||
<span></span>
|
||||
<span name="attr_damage_range_3"></span>
|
||||
<button
|
||||
type="roll"
|
||||
value="@{opt_whisper}&{template:custom} {{title=@{character_name} inflicts range damage!}} {{Range Damage=[[@{damage_range_3}]]}}"
|
||||
name="roll_bonus_damage_range_3"
|
||||
></button>
|
||||
</label>
|
||||
</div>
|
||||
<div class="combat-defense bonus-type-container">
|
||||
<h3><span>🛡</span> Defense <span>🥷</span></h3>
|
||||
@@ -8217,6 +8371,39 @@
|
||||
name="roll_bonus_damage_range_burst"
|
||||
></button>
|
||||
</label>
|
||||
<label
|
||||
><div><span>Damage 1</span><span name="attr_damage_range_1_name"></span></div>
|
||||
<input type="hidden" value="0" name="attr_damage_range_1" />
|
||||
<span></span>
|
||||
<span name="attr_damage_range_1"></span>
|
||||
<button
|
||||
type="roll"
|
||||
value="@{opt_whisper}&{template:custom} {{title=@{character_name} inflicts range damage!}} {{Range Damage=[[@{damage_range_1}]]}}"
|
||||
name="roll_bonus_damage_range_1"
|
||||
></button>
|
||||
</label>
|
||||
<label
|
||||
><div><span>Damage 2</span><span name="attr_damage_range_2_name"></span></div>
|
||||
<input type="hidden" value="0" name="attr_damage_range_2" />
|
||||
<span></span>
|
||||
<span name="attr_damage_range_2"></span>
|
||||
<button
|
||||
type="roll"
|
||||
value="@{opt_whisper}&{template:custom} {{title=@{character_name} inflicts range damage!}} {{Range Damage=[[@{damage_range_2}]]}}"
|
||||
name="roll_bonus_damage_range_2"
|
||||
></button>
|
||||
</label>
|
||||
<label
|
||||
><div><span>Damage 3</span><span name="attr_damage_range_3_name"></span></div>
|
||||
<input type="hidden" value="0" name="attr_damage_range_3" />
|
||||
<span></span>
|
||||
<span name="attr_damage_range_3"></span>
|
||||
<button
|
||||
type="roll"
|
||||
value="@{opt_whisper}&{template:custom} {{title=@{character_name} inflicts range damage!}} {{Range Damage=[[@{damage_range_3}]]}}"
|
||||
name="roll_bonus_damage_range_3"
|
||||
></button>
|
||||
</label>
|
||||
</div>
|
||||
<div class="combat-defense bonus-type-container">
|
||||
<h3><span>🛡</span> Defense <span>🥷</span></h3>
|
||||
@@ -9354,6 +9541,18 @@
|
||||
</p>
|
||||
</details>
|
||||
<p>Click <b>Instructions</b> for detailed instructions.</p>
|
||||
<span>
|
||||
Link will appear in chat:
|
||||
<button
|
||||
style="font-size: 1em;"
|
||||
class="no-dice"
|
||||
type="roll"
|
||||
value="[YouTube Sheet Tutorials](https://www.youtube.com/playlist?list=PLZk7Im2gciP87Imdx6GcVrZT6JAK10zvv)"
|
||||
name="roll_youtube"
|
||||
>
|
||||
YouTube Sheet Tutorials
|
||||
</button>
|
||||
</span>
|
||||
<hr />
|
||||
<h3>Options</h3>
|
||||
<input type="hidden" name="attr_version" value="1.2.0" />
|
||||
@@ -9376,6 +9575,9 @@
|
||||
><input type="checkbox" name="attr_debug" value="1" /> View Sheet in Debug
|
||||
Mode</label
|
||||
>
|
||||
<label
|
||||
><input type="checkbox" name="attr_youtube" value="1" /> Hide YouTube link above tabs</label
|
||||
>
|
||||
<label
|
||||
><input type="checkbox" name=attr_outputusage" value="1" /> Output
|
||||
ISP/PPE/Damage usage to chat</label
|
||||
@@ -10649,13 +10851,13 @@ const WP = {
|
||||
],
|
||||
"w.p. pole arm": [
|
||||
{ strike: 1, parry: 1 },
|
||||
{},
|
||||
{ damage: 2 },
|
||||
{ strike: 1, parry: 1, throw: 1 },
|
||||
{},
|
||||
{},
|
||||
{ strike: 1, parry: 1 },
|
||||
{},
|
||||
{ throw: 1 },
|
||||
{ damage: 2, throw: 1 },
|
||||
{ strike: 1, parry: 1 },
|
||||
{},
|
||||
{},
|
||||
@@ -10962,6 +11164,7 @@ const WP_KEYS = {
|
||||
"level",
|
||||
"strike",
|
||||
"parry",
|
||||
"damage",
|
||||
"disarm",
|
||||
"rof",
|
||||
"throw",
|
||||
@@ -11086,6 +11289,12 @@ const COMBAT_KEYS = [
|
||||
"damage_range",
|
||||
"damage_range_single",
|
||||
"damage_range_burst",
|
||||
"damage_range_1",
|
||||
"damage_range_1_name",
|
||||
"damage_range_2",
|
||||
"damage_range_2_name",
|
||||
"damage_range_3",
|
||||
"damage_range_3_name",
|
||||
"critical",
|
||||
"knockout",
|
||||
"deathblow",
|
||||
@@ -11619,6 +11828,13 @@ async function palladiumAddToTurnTracker(initKey, attacksKey) {
|
||||
initKey,
|
||||
attacksKey,
|
||||
]);
|
||||
if (!attacks) {
|
||||
const noAttacksMessage = await startRoll(
|
||||
`@{opt_whisper}&{template:custom} {{color=red}} {{title=@{selected|character_name} has no attacks with the Active Profile.}}`
|
||||
)
|
||||
finishRoll(noAttacksMessage.rollId);
|
||||
return;
|
||||
}
|
||||
const initString = init > 0 ? `+${init}` : `${init}`;
|
||||
const roll = await startRoll(
|
||||
`@{opt_whisper}&{template:initiative} {{title=@{selected|character_name} rolls initiative!}} {{diceroll=[[1d20]]}} {{modifier=${initString}}}`
|
||||
@@ -11629,8 +11845,11 @@ async function palladiumAddToTurnTracker(initKey, attacksKey) {
|
||||
finishRoll(roll.rollId, {
|
||||
diceroll: computed,
|
||||
});
|
||||
// Add 20 to the roll if a nat20 is rolled. Simplest way to bump the roll to the top of the turn order.
|
||||
const nat20bonus = roll.results.diceroll.result === 20 ? 20 : 0;
|
||||
const computedWithNat20 = computed + nat20bonus;
|
||||
const addToTracker = await startRoll(
|
||||
`@{opt_whisper}&{template:custom} {{title=@{selected|character_name} added to Turn Tracker}} {{Initiative=[[[[${computed}]] &{tracker}]]}}`
|
||||
`@{opt_whisper}&{template:custom} {{title=@{selected|character_name} added to Turn Tracker}} ${nat20bonus === 20 ? '{{Natural 20!=20 points added to initiative roll!}}' : ''} {{Initiative=[[[[${computedWithNat20}]] &{tracker}]]}}`
|
||||
);
|
||||
finishRoll(addToTracker.rollId);
|
||||
// https://app.roll20.net/forum/post/6817409/multiple-initiative-values-for-a-single-character/?pageforid=6817748#post-6817748
|
||||
@@ -11854,6 +12073,9 @@ async function migrateAttributes() {
|
||||
{
|
||||
version: "1.6.1",
|
||||
},
|
||||
{
|
||||
version: "1.7.0",
|
||||
}
|
||||
];
|
||||
|
||||
const { version, migrated } = await getAttrsAsync(["version", "migrated"]);
|
||||
@@ -12072,6 +12294,12 @@ async function combineBonuses(rowIds, destinationPrefix) {
|
||||
`${destinationPrefix}_damage_range`,
|
||||
`${destinationPrefix}_damage_range_single`,
|
||||
`${destinationPrefix}_damage_range_burst`,
|
||||
`${destinationPrefix}_damage_range_1`,
|
||||
`${destinationPrefix}_damage_range_1_name`,
|
||||
`${destinationPrefix}_damage_range_2`,
|
||||
`${destinationPrefix}_damage_range_2_name`,
|
||||
`${destinationPrefix}_damage_range_3`,
|
||||
`${destinationPrefix}_damage_range_3_name`,
|
||||
],
|
||||
section: "bonuses",
|
||||
fields: [
|
||||
@@ -12082,6 +12310,12 @@ async function combineBonuses(rowIds, destinationPrefix) {
|
||||
"damage_range",
|
||||
"damage_range_single",
|
||||
"damage_range_burst",
|
||||
"damage_range_1",
|
||||
"damage_range_1_name",
|
||||
"damage_range_2",
|
||||
"damage_range_2_name",
|
||||
"damage_range_3",
|
||||
"damage_range_3_name",
|
||||
],
|
||||
filter: rowIds,
|
||||
});
|
||||
@@ -12654,6 +12888,7 @@ async function addModifierToBonusesAsync(section, rowId) {
|
||||
const thingAttrs = REPEATING_BONUS_KEYS.map(
|
||||
(key) => `repeating_${section}_${rowId}_${key}`
|
||||
);
|
||||
console.log("thingAttrs", thingAttrs);
|
||||
thingAttrs.push(thingBonusId);
|
||||
const a = await getAttrsAsync(thingAttrs);
|
||||
console.log(a);
|
||||
|
||||
@@ -152,6 +152,12 @@ async function combineBonuses(rowIds, destinationPrefix) {
|
||||
`${destinationPrefix}_damage_range`,
|
||||
`${destinationPrefix}_damage_range_single`,
|
||||
`${destinationPrefix}_damage_range_burst`,
|
||||
`${destinationPrefix}_damage_range_1`,
|
||||
`${destinationPrefix}_damage_range_1_name`,
|
||||
`${destinationPrefix}_damage_range_2`,
|
||||
`${destinationPrefix}_damage_range_2_name`,
|
||||
`${destinationPrefix}_damage_range_3`,
|
||||
`${destinationPrefix}_damage_range_3_name`,
|
||||
],
|
||||
section: "bonuses",
|
||||
fields: [
|
||||
@@ -162,6 +168,12 @@ async function combineBonuses(rowIds, destinationPrefix) {
|
||||
"damage_range",
|
||||
"damage_range_single",
|
||||
"damage_range_burst",
|
||||
"damage_range_1",
|
||||
"damage_range_1_name",
|
||||
"damage_range_2",
|
||||
"damage_range_2_name",
|
||||
"damage_range_3",
|
||||
"damage_range_3_name",
|
||||
],
|
||||
filter: rowIds,
|
||||
});
|
||||
|
||||
@@ -503,6 +503,12 @@ const r = {
|
||||
"damage_range",
|
||||
"damage_range_single",
|
||||
"damage_range_burst",
|
||||
"damage_range_1",
|
||||
"damage_range_1_name",
|
||||
"damage_range_2",
|
||||
"damage_range_2_name",
|
||||
"damage_range_3",
|
||||
"damage_range_3_name",
|
||||
"critical",
|
||||
"knockout",
|
||||
"deathblow",
|
||||
@@ -622,6 +628,12 @@ const r = {
|
||||
"damage_range",
|
||||
"damage_range_single",
|
||||
"damage_range_burst",
|
||||
"damage_range_1",
|
||||
"damage_range_1_name",
|
||||
"damage_range_2",
|
||||
"damage_range_2_name",
|
||||
"damage_range_3",
|
||||
"damage_range_3_name",
|
||||
"ar",
|
||||
"critical",
|
||||
"knockout",
|
||||
|
||||
@@ -1062,13 +1062,13 @@ const WP = {
|
||||
],
|
||||
"w.p. pole arm": [
|
||||
{ strike: 1, parry: 1 },
|
||||
{},
|
||||
{ damage: 2 },
|
||||
{ strike: 1, parry: 1, throw: 1 },
|
||||
{},
|
||||
{},
|
||||
{ strike: 1, parry: 1 },
|
||||
{},
|
||||
{ throw: 1 },
|
||||
{ damage: 2, throw: 1 },
|
||||
{ strike: 1, parry: 1 },
|
||||
{},
|
||||
{},
|
||||
@@ -1375,6 +1375,7 @@ const WP_KEYS = {
|
||||
"level",
|
||||
"strike",
|
||||
"parry",
|
||||
"damage",
|
||||
"disarm",
|
||||
"rof",
|
||||
"throw",
|
||||
@@ -1499,6 +1500,12 @@ const COMBAT_KEYS = [
|
||||
"damage_range",
|
||||
"damage_range_single",
|
||||
"damage_range_burst",
|
||||
"damage_range_1",
|
||||
"damage_range_1_name",
|
||||
"damage_range_2",
|
||||
"damage_range_2_name",
|
||||
"damage_range_3",
|
||||
"damage_range_3_name",
|
||||
"critical",
|
||||
"knockout",
|
||||
"deathblow",
|
||||
|
||||
@@ -172,6 +172,9 @@ async function migrateAttributes() {
|
||||
{
|
||||
version: "1.6.1",
|
||||
},
|
||||
{
|
||||
version: "1.7.0",
|
||||
}
|
||||
];
|
||||
|
||||
const { version, migrated } = await getAttrsAsync(["version", "migrated"]);
|
||||
|
||||
@@ -297,6 +297,13 @@ async function palladiumAddToTurnTracker(initKey, attacksKey) {
|
||||
initKey,
|
||||
attacksKey,
|
||||
]);
|
||||
if (!attacks) {
|
||||
const noAttacksMessage = await startRoll(
|
||||
`@{opt_whisper}&{template:custom} {{color=red}} {{title=@{selected|character_name} has no attacks with the Active Profile.}}`
|
||||
)
|
||||
finishRoll(noAttacksMessage.rollId);
|
||||
return;
|
||||
}
|
||||
const initString = init > 0 ? `+${init}` : `${init}`;
|
||||
const roll = await startRoll(
|
||||
`@{opt_whisper}&{template:initiative} {{title=@{selected|character_name} rolls initiative!}} {{diceroll=[[1d20]]}} {{modifier=${initString}}}`
|
||||
@@ -307,8 +314,11 @@ async function palladiumAddToTurnTracker(initKey, attacksKey) {
|
||||
finishRoll(roll.rollId, {
|
||||
diceroll: computed,
|
||||
});
|
||||
// Add 20 to the roll if a nat20 is rolled. Simplest way to bump the roll to the top of the turn order.
|
||||
const nat20bonus = roll.results.diceroll.result === 20 ? 20 : 0;
|
||||
const computedWithNat20 = computed + nat20bonus;
|
||||
const addToTracker = await startRoll(
|
||||
`@{opt_whisper}&{template:custom} {{title=@{selected|character_name} added to Turn Tracker}} {{Initiative=[[[[${computed}]] &{tracker}]]}}`
|
||||
`@{opt_whisper}&{template:custom} {{title=@{selected|character_name} added to Turn Tracker}} ${nat20bonus === 20 ? '{{Natural 20!=20 points added to initiative roll!}}' : ''} {{Initiative=[[[[${computedWithNat20}]] &{tracker}]]}}`
|
||||
);
|
||||
finishRoll(addToTracker.rollId);
|
||||
// https://app.roll20.net/forum/post/6817409/multiple-initiative-values-for-a-single-character/?pageforid=6817748#post-6817748
|
||||
|
||||
@@ -519,6 +519,51 @@
|
||||
name="roll_active_profile_bonus_damage_range_burst"
|
||||
></button>
|
||||
</label>
|
||||
<label
|
||||
><div><span>Damage 1</span><span name="attr_active_profile_damage_range_1_name"></span></div>
|
||||
<input
|
||||
type="hidden"
|
||||
value="0"
|
||||
name="attr_active_profile_damage_range_1"
|
||||
/>
|
||||
<span></span>
|
||||
<span name="attr_active_profile_damage_range_1"></span>
|
||||
<button
|
||||
type="roll"
|
||||
value="@{opt_whisper}&{template:custom} {{title=@{character_name} inflicts range damage from a @{active_profile_damage_range_1_name} shot!}} {{Range Damage=[[@{active_profile_damage_range_1}]]}}"
|
||||
name="roll_active_profile_bonus_damage_range_1"
|
||||
></button>
|
||||
</label>
|
||||
<label
|
||||
><div><span>Damage 2</span><span name="attr_active_profile_damage_range_2_name"></span></div>
|
||||
<input
|
||||
type="hidden"
|
||||
value="0"
|
||||
name="attr_active_profile_damage_range_2"
|
||||
/>
|
||||
<span></span>
|
||||
<span name="attr_active_profile_damage_range_2"></span>
|
||||
<button
|
||||
type="roll"
|
||||
value="@{opt_whisper}&{template:custom} {{title=@{character_name} inflicts range damage from a @{active_profile_damage_range_2_name} shot!}} {{Range Damage=[[@{active_profile_damage_range_2}]]}}"
|
||||
name="roll_active_profile_bonus_damage_range_2"
|
||||
></button>
|
||||
</label>
|
||||
<label
|
||||
><div><span>Damage 3</span><span name="attr_active_profile_damage_range_3_name"></span></div>
|
||||
<input
|
||||
type="hidden"
|
||||
value="0"
|
||||
name="attr_active_profile_damage_range_3"
|
||||
/>
|
||||
<span></span>
|
||||
<span name="attr_active_profile_damage_range_3"></span>
|
||||
<button
|
||||
type="roll"
|
||||
value="@{opt_whisper}&{template:custom} {{title=@{character_name} inflicts range damage from a @{active_profile_damage_range_3_name} shot!}} {{Range Damage=[[@{active_profile_damage_range_3}]]}}"
|
||||
name="roll_active_profile_bonus_damage_range_3"
|
||||
></button>
|
||||
</label>
|
||||
</div>
|
||||
<div class="combat-defense bonus-type-container">
|
||||
<h3><span>🛡</span> Defense <span>🥷</span></h3>
|
||||
|
||||
@@ -298,6 +298,18 @@
|
||||
</p>
|
||||
</details>
|
||||
<p>Click <b>Instructions</b> for detailed instructions.</p>
|
||||
<span>
|
||||
Link will appear in chat:
|
||||
<button
|
||||
style="font-size: 1em;"
|
||||
class="no-dice"
|
||||
type="roll"
|
||||
value="[YouTube Sheet Tutorials](https://www.youtube.com/playlist?list=PLZk7Im2gciP87Imdx6GcVrZT6JAK10zvv)"
|
||||
name="roll_youtube"
|
||||
>
|
||||
YouTube Sheet Tutorials
|
||||
</button>
|
||||
</span>
|
||||
<hr />
|
||||
<h3>Options</h3>
|
||||
<input type="hidden" name="attr_version" value="1.2.0" />
|
||||
@@ -320,6 +332,9 @@
|
||||
><input type="checkbox" name="attr_debug" value="1" /> View Sheet in Debug
|
||||
Mode</label
|
||||
>
|
||||
<label
|
||||
><input type="checkbox" name="attr_youtube" value="1" /> Hide YouTube link above tabs</label
|
||||
>
|
||||
<label
|
||||
><input type="checkbox" name=attr_outputusage" value="1" /> Output
|
||||
ISP/PPE/Damage usage to chat</label
|
||||
|
||||
@@ -551,6 +551,18 @@
|
||||
><span>Damage: Pulse/Burst</span>
|
||||
<input type="text" value="0" name="attr_damage_range_burst" />
|
||||
</label>
|
||||
<label
|
||||
><div><span>Damage 1</span><input type="text" value="" name="attr_damage_range_1_name" placeholder="Name" /></div>
|
||||
<input type="text" value="0" name="attr_damage_range_1" />
|
||||
</label>
|
||||
<label
|
||||
><div><span>Damage 2</span><input type="text" value="" name="attr_damage_range_2_name" placeholder="Name" /></div>
|
||||
<input type="text" value="0" name="attr_damage_range_2" />
|
||||
</label>
|
||||
<label
|
||||
><div><span>Damage 3</span><input type="text" value="" name="attr_damage_range_3_name" placeholder="Name" /></div>
|
||||
<input type="text" value="0" name="attr_damage_range_3" />
|
||||
</label>
|
||||
</div>
|
||||
<div class="combat-defense bonus-type-container">
|
||||
<h3><span>🛡</span> Defense <span>🥷</span></h3>
|
||||
|
||||
@@ -384,6 +384,39 @@
|
||||
name="roll_bonus_damage_range_burst"
|
||||
></button>
|
||||
</label>
|
||||
<label
|
||||
><div><span>Damage 1</span><span name="attr_damage_range_1_name"></span></div>
|
||||
<input type="hidden" value="0" name="attr_damage_range_1" />
|
||||
<span></span>
|
||||
<span name="attr_damage_range_1"></span>
|
||||
<button
|
||||
type="roll"
|
||||
value="@{opt_whisper}&{template:custom} {{title=@{character_name} inflicts range damage!}} {{Range Damage=[[@{damage_range_1}]]}}"
|
||||
name="roll_bonus_damage_range_1"
|
||||
></button>
|
||||
</label>
|
||||
<label
|
||||
><div><span>Damage 2</span><span name="attr_damage_range_2_name"></span></div>
|
||||
<input type="hidden" value="0" name="attr_damage_range_2" />
|
||||
<span></span>
|
||||
<span name="attr_damage_range_2"></span>
|
||||
<button
|
||||
type="roll"
|
||||
value="@{opt_whisper}&{template:custom} {{title=@{character_name} inflicts range damage!}} {{Range Damage=[[@{damage_range_2}]]}}"
|
||||
name="roll_bonus_damage_range_2"
|
||||
></button>
|
||||
</label>
|
||||
<label
|
||||
><div><span>Damage 3</span><span name="attr_damage_range_3_name"></span></div>
|
||||
<input type="hidden" value="0" name="attr_damage_range_3" />
|
||||
<span></span>
|
||||
<span name="attr_damage_range_3"></span>
|
||||
<button
|
||||
type="roll"
|
||||
value="@{opt_whisper}&{template:custom} {{title=@{character_name} inflicts range damage!}} {{Range Damage=[[@{damage_range_3}]]}}"
|
||||
name="roll_bonus_damage_range_3"
|
||||
></button>
|
||||
</label>
|
||||
</div>
|
||||
<div class="combat-defense bonus-type-container">
|
||||
<h3><span>🛡</span> Defense <span>🥷</span></h3>
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
<h5>Weapon Proficiency</h5>
|
||||
<h5>Strike</h5>
|
||||
<h5>Parry</h5>
|
||||
<h5>Damage</h5>
|
||||
<h5>Disarm</h5>
|
||||
<h5>Throw</h5>
|
||||
<h5>Entangle</h5>
|
||||
@@ -35,6 +36,7 @@
|
||||
<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_damage" />
|
||||
<input type="number" value="0" name="attr_disarm" />
|
||||
<input type="number" value="0" name="attr_throw" />
|
||||
<input type="number" value="0" name="attr_entangle" />
|
||||
|
||||
@@ -5,6 +5,20 @@
|
||||
src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/Palladium%20Rifts%20by%20Grinning%20Gecko/rifts-logo.png"
|
||||
/>
|
||||
<span name="attr_character_name"></span>
|
||||
<input type="hidden" class="youtube-toggle" name="attr_youtube" />
|
||||
<span style="float:right;" class="youtube-link">
|
||||
Link will appear in chat:
|
||||
<button
|
||||
style="font-size: 1em;"
|
||||
class="no-dice"
|
||||
type="roll"
|
||||
value="[YouTube Sheet Tutorials](https://www.youtube.com/playlist?list=PLZk7Im2gciP87Imdx6GcVrZT6JAK10zvv)"
|
||||
name="roll_youtube"
|
||||
>
|
||||
YouTube Sheet Tutorials
|
||||
</button>
|
||||
</span>
|
||||
|
||||
<div class="r-tabbed">
|
||||
<input type="radio" id="tab-core" name="css-tabs" checked />
|
||||
<input type="radio" id="tab-skills" name="css-tabs" />
|
||||
|
||||
@@ -237,6 +237,10 @@ a {
|
||||
content: "t";
|
||||
}
|
||||
|
||||
.youtube-toggle[value="1"] ~ .youtube-link {
|
||||
display: none;
|
||||
}
|
||||
|
||||
h4 {
|
||||
text-decoration: underline;
|
||||
}
|
||||
@@ -468,7 +472,7 @@ a {
|
||||
.modifiers-attributes {
|
||||
display: grid;
|
||||
gap: 1rem;
|
||||
grid-template-columns: repeat(auto-fit, minmax(20rem, 1fr));
|
||||
grid-template-columns: repeat(auto-fit, minmax(25rem, 1fr));
|
||||
align-items: start;
|
||||
margin-top: 0.5rem;
|
||||
|
||||
@@ -493,6 +497,11 @@ a {
|
||||
.bonus-type-container {
|
||||
label {
|
||||
grid-template-columns: 1fr 1rem 5rem 4rem;
|
||||
|
||||
> div {
|
||||
display:grid;
|
||||
grid-template-columns: auto auto;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -508,7 +517,7 @@ a {
|
||||
display: grid;
|
||||
align-items: center;
|
||||
gap: 0.5rem;
|
||||
grid-template-columns: 6.5rem minmax(4rem, 1fr) 4rem 4rem;
|
||||
grid-template-columns: 6.5rem minmax(6rem, auto) 6.5rem 4rem;
|
||||
// grid-template-columns: auto auto auto auto;
|
||||
|
||||
&.select {
|
||||
@@ -572,6 +581,11 @@ a {
|
||||
grid-template-columns: 1fr 5rem;
|
||||
width: 100%;
|
||||
|
||||
> div {
|
||||
display:grid;
|
||||
grid-template-columns: auto auto;
|
||||
}
|
||||
|
||||
span {
|
||||
@include center;
|
||||
|
||||
@@ -676,7 +690,7 @@ a {
|
||||
.wp {
|
||||
.heading,
|
||||
.values {
|
||||
grid-template-columns: minmax(16rem, 1fr) 5rem 5rem 5rem 5rem 5rem 5rem 5rem 5rem 1fr;
|
||||
grid-template-columns: minmax(16rem, 1fr) 5rem 5rem 5rem 5rem 5rem 5rem 5rem 5rem 5rem 1fr;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user