mirror of
https://github.com/Nighthawk42/roll20-character-sheets.git
synced 2026-08-30 03:40:32 +00:00
RolemasterUnified Official: Bugfix bonanza
So this is a lot of little bug fixes from various sources.
First is an update to consistant use the same name for the
injury and status penalties everywhere. Now they actually work
(and to roll20 staff; they are derived, they will get fixed
next time someone ends their turn, so no need to migrate them)
A fix to make crit rolls all work, a stupid typo for Healers casting
spells, you can manually remove stun effects.
Background updates include some tweaks to treasure law equipment...
and all of Creature Law creatures are now ready to rumble.
- Fix some typos in the skill roll messages.
- Fix crit roll lookups.
- Fix subtle penalty Channeling/Mentalism.
- Status and Injury penalty names were sometimes inconsistent.
- Move to statuspenalty and injurypenalty everywhere.
- Transitory data, so should not impact anyone.
- Fixes issue where penalties were not applying to attacks.
- Treasure Law:
- Fix sizes on some weapons.
- Correctly specify attack tables on weapons.
- Attacks:
- Add a button to remove target.
- Fix styling of the target drop downs.
- Staus
- Add a button (three actually) to remove stuns
- Creature
- Content complete
- Unscale creature hits.
This commit is contained in:
@@ -2291,6 +2291,9 @@ Lists Selected <input type='number' name='comp_cmbaselistcount'> / 6
|
||||
<button type='action' name='act_rmuattacktargetrefresh'
|
||||
class='rollbutton fancybutton fancybuttoninline'>
|
||||
<span style="font-family:Pictos;">1</span></button>
|
||||
<button type='action' name='act_rmuattacktargetdelete'
|
||||
class='rollbutton fancybutton fancybuttoninline'>
|
||||
<span style="font-family:Pictos;">#</span></button>
|
||||
</span>
|
||||
|
||||
<span class='foe_target_db'>
|
||||
@@ -2304,7 +2307,7 @@ Lists Selected <input type='number' name='comp_cmbaselistcount'> / 6
|
||||
pattern="\d|10|((\d,|10,){3}(\d|10))"
|
||||
title='Use AT of target (1-10) or 4 ATs separated by commas'>
|
||||
<span>Size</span>
|
||||
<select style='width:100%' name='attr_target_size'>
|
||||
<select style='width:100%' class='fancyselect' name='attr_target_size'>
|
||||
<option value="1">Miniscule</option>
|
||||
<option value="2">Diminutive</option>
|
||||
<option value="3">Tiny</option>
|
||||
@@ -2317,7 +2320,7 @@ Lists Selected <input type='number' name='comp_cmbaselistcount'> / 6
|
||||
<option value="10">Enormous</option>
|
||||
</select>
|
||||
<span>Crit. Red.</span>
|
||||
<select style='width:100%' name='attr_target_crit'>
|
||||
<select style='width:100%' class='fancyselect' name='attr_target_crit'>
|
||||
<option value="0">None</option>
|
||||
<option value="1">I</option>
|
||||
<option value="2">II</option>
|
||||
@@ -2424,17 +2427,30 @@ Lists Selected <input type='number' name='comp_cmbaselistcount'> / 6
|
||||
<input type='hidden' name='attr_statusstun75' class='hidenext'>
|
||||
<div class='prop_pair'>
|
||||
<span>Stun -75</span>
|
||||
<span><span name='attr_statusstun75info'>0</span> Rounds</span>
|
||||
<span><span name='attr_statusstun75info'>0</span> Rounds
|
||||
<button type='action' name='act_statusstun75delete'
|
||||
class='rollbutton fancybutton fancybuttoninline'>
|
||||
<span style="font-family:Pictos;">#</span></button>
|
||||
</span>
|
||||
|
||||
</div>
|
||||
<input type='hidden' name='attr_statusstun50' class='hidenext'>
|
||||
<div class='prop_pair'>
|
||||
<span>Stun -50</span>
|
||||
<span><span name='attr_statusstun50info'>0</span> Rounds</span>
|
||||
<span><span name='attr_statusstun50info'>0</span> Rounds
|
||||
<button type='action' name='act_statusstun50delete'
|
||||
class='rollbutton fancybutton fancybuttoninline'>
|
||||
<span style="font-family:Pictos;">#</span></button>
|
||||
</span>
|
||||
</div>
|
||||
<input type='hidden' name='attr_statusstun25' class='hidenext'>
|
||||
<div class='prop_pair'>
|
||||
<span>Stun -25</span>
|
||||
<span><span name='attr_statusstun25info'>0</span> Rounds</span>
|
||||
<span><span name='attr_statusstun25info'>0</span> Rounds
|
||||
<button type='action' name='act_statusstun25delete'
|
||||
class='rollbutton fancybutton fancybuttoninline'>
|
||||
<span style="font-family:Pictos;">#</span></button>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div class='prop_pair'>
|
||||
@@ -2491,7 +2507,7 @@ Lists Selected <input type='number' name='comp_cmbaselistcount'> / 6
|
||||
|
||||
<div class='prop_pair'>
|
||||
<span>Status Penalty:</span>
|
||||
<span name='attr_status_penalty'></span>
|
||||
<span name='attr_statuspenalty'></span>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -2885,17 +2901,30 @@ Lists Selected <input type='number' name='comp_cmbaselistcount'> / 6
|
||||
<input type='hidden' name='attr_statusstun75' class='hidenext'>
|
||||
<div class='prop_pair'>
|
||||
<span>Stun -75</span>
|
||||
<span><span name='attr_statusstun75info'>0</span> Rounds</span>
|
||||
<span><span name='attr_statusstun75info'>0</span> Rounds
|
||||
<button type='action' name='act_statusstun75delete'
|
||||
class='rollbutton fancybutton fancybuttoninline'>
|
||||
<span style="font-family:Pictos;">#</span></button>
|
||||
</span>
|
||||
|
||||
</div>
|
||||
<input type='hidden' name='attr_statusstun50' class='hidenext'>
|
||||
<div class='prop_pair'>
|
||||
<span>Stun -50</span>
|
||||
<span><span name='attr_statusstun50info'>0</span> Rounds</span>
|
||||
<span><span name='attr_statusstun50info'>0</span> Rounds
|
||||
<button type='action' name='act_statusstun50delete'
|
||||
class='rollbutton fancybutton fancybuttoninline'>
|
||||
<span style="font-family:Pictos;">#</span></button>
|
||||
</span>
|
||||
</div>
|
||||
<input type='hidden' name='attr_statusstun25' class='hidenext'>
|
||||
<div class='prop_pair'>
|
||||
<span>Stun -25</span>
|
||||
<span><span name='attr_statusstun25info'>0</span> Rounds</span>
|
||||
<span><span name='attr_statusstun25info'>0</span> Rounds
|
||||
<button type='action' name='act_statusstun25delete'
|
||||
class='rollbutton fancybutton fancybuttoninline'>
|
||||
<span style="font-family:Pictos;">#</span></button>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div class='prop_pair'>
|
||||
@@ -2952,7 +2981,7 @@ Lists Selected <input type='number' name='comp_cmbaselistcount'> / 6
|
||||
|
||||
<div class='prop_pair'>
|
||||
<span>Status Penalty:</span>
|
||||
<span name='attr_status_penalty'></span>
|
||||
<span name='attr_statuspenalty'></span>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -3017,6 +3046,9 @@ Lists Selected <input type='number' name='comp_cmbaselistcount'> / 6
|
||||
<button type='action' name='act_rmuattacktargetrefresh'
|
||||
class='rollbutton fancybutton fancybuttoninline'>
|
||||
<span style="font-family:Pictos;">1</span></button>
|
||||
<button type='action' name='act_rmuattacktargetdelete'
|
||||
class='rollbutton fancybutton fancybuttoninline'>
|
||||
<span style="font-family:Pictos;">#</span></button>
|
||||
</span>
|
||||
|
||||
<span class='foe_target_db'>
|
||||
@@ -3030,7 +3062,7 @@ Lists Selected <input type='number' name='comp_cmbaselistcount'> / 6
|
||||
pattern="\d|10|((\d,|10,){3}(\d|10))"
|
||||
title='Use AT of target (1-10) or 4 ATs separated by commas'>
|
||||
<span>Size</span>
|
||||
<select style='width:100%' name='attr_target_size'>
|
||||
<select style='width:100%' class='fancyselect' name='attr_target_size'>
|
||||
<option value="1">Miniscule</option>
|
||||
<option value="2">Diminutive</option>
|
||||
<option value="3">Tiny</option>
|
||||
@@ -3043,7 +3075,7 @@ Lists Selected <input type='number' name='comp_cmbaselistcount'> / 6
|
||||
<option value="10">Enormous</option>
|
||||
</select>
|
||||
<span>Crit. Red.</span>
|
||||
<select style='width:100%' name='attr_target_crit'>
|
||||
<select style='width:100%' class='fancyselect' name='attr_target_crit'>
|
||||
<option value="0">None</option>
|
||||
<option value="1">I</option>
|
||||
<option value="2">II</option>
|
||||
@@ -5716,7 +5748,7 @@ Sheet Version: <span name='attr_version'></span>
|
||||
|
||||
<br>
|
||||
|
||||
Revision ceec0b05fe360cc519d2ffba9e5f0dcdc8b5d16c
|
||||
Revision 20a01aa9562f0a96c4aacedcb90b08efb8809f43
|
||||
|
||||
|
||||
<hr>
|
||||
@@ -7278,7 +7310,7 @@ const skillrollresults = {
|
||||
},
|
||||
composition: {
|
||||
absolutefailure: "You artists types! In a fit of anger you destroy any work you have already accomplished. Your emotions get the better of you and you are at -25 to this sill until an Absolute Success is achieved.",
|
||||
failure: "Whatever is locked in your head remains so. You find yourself utterly unable to transfer your concept to the medium Perhaps another day with yield improvements.",
|
||||
failure: "Whatever is locked in your head remains so. You find yourself utterly unable to transfer your concept to the medium. Perhaps another day with yield improvements.",
|
||||
unusualevent: " Your interpretation is a profound departure from your normal style, from any style in fact. People will be unable to understand it and only leave confused. In a few days of contemplation they will see it as either the brilliant (success) or bad (failure) piece that it was.",
|
||||
partialsuccess: " Your temer flares as your attempts fall short of your expectations. Whie your work has merit, you have not effectively grasped your own intent.",
|
||||
success: " Twas nothing! You have once again demonstrated your ample genius to all with te ability to see. If only the whole world were not blind compared to you.",
|
||||
@@ -7336,7 +7368,7 @@ absolutesuccess : "The herb or poison has doubled potency. If treating a patien
|
||||
absolutefailure : "You are assailed by doubts and distractions. Your feeble attempt at fucus creates a mental block that hinders your future attempts giving you a -25 to this skill until an Absolute Success is achieved.",
|
||||
failure : "You call forth your discipline and… what was that noise? Sorry, trying to focus here. Why won't that itch go away? Your effort is insufficient to get past the distractions.",
|
||||
unusualevent : "Carefully you follow the path of thought before realizing it is seemingly unrelated to your task. If you succeed at your maneuver, the unexpected insite is treated as an Absolute Success. If you fail, it has led you far astray to an Absolute Failure.",
|
||||
partialsuccess : "Your discipline is assailed by distractions and you find it difficult to focus. You receive alf the usual benefit or may try again next round with a +10 modification.",
|
||||
partialsuccess : "Your discipline is assailed by distractions and you find it difficult to focus. You receive half the usual benefit or may try again next round with a +10 modification.",
|
||||
success : "Summoning all your training, you concentrate on your breathing and empty your mind permitting yourself to focus completely on the task at hand.",
|
||||
absolutesuccess : "You slip easily into a state of perfect focus, easily putting aside all distractions and doubts. You receive 2x normal benefits and +10 on subsequent rolls to maintain this state.",
|
||||
},
|
||||
@@ -7369,7 +7401,7 @@ absolutesuccess : "Brilliant! Your seldom-appreciated genius rises to heretofor
|
||||
influence : {
|
||||
absolutefailure : "Your clumsy attempts at manipulation are transparent to all, including the target who reacts accordingly. Future attempts to influence this target automatically fail until an Absolute Success is achieved.",
|
||||
failure : "You fail to influence your target in the least. Your target may make a social Awareness maneuver to notice your attempt.",
|
||||
unusualevent : "Your slick manner and glib tongue are utterly fascinating to your target. With Success, he will become your biggest fan to the point of annoyance. With Failure, h names you his arch-nemesis. Either way, you will really need to get rid of this person.",
|
||||
unusualevent : "Your slick manner and glib tongue are utterly fascinating to your target. With Success, he will become your biggest fan to the point of annoyance. With Failure, he names you his arch-nemesis. Either way, you will really need to get rid of this person.",
|
||||
partialsuccess : "You were doing great until you got impatient. You cut to the chase too soon and your target is wary. If appropriate, roll again next round with a -10.",
|
||||
success : "Oh ye of the silver tongue. You smooth-talk your target into tractability and get the desired result.",
|
||||
absolutesuccess : "You must have been an incubus in a former life. In any case, you have your target wrapped around your little finger and receive +30 to any future Influence attempts versus this target (until an Absolute Failure is achieved).",
|
||||
@@ -8684,7 +8716,7 @@ function getSubtlePenalty(realm, type, trickery, subtle, voice, hands, enc, meta
|
||||
} else if (realm == 'channelingessence' || realm == 'Channeling/Essence') {
|
||||
realm = 'chaness';
|
||||
} else if (realm == 'Channeling/Mentalism' || realm == 'channelingmentalism') {
|
||||
returm = 'chanment';
|
||||
realm = 'chanment';
|
||||
} else if (realm == 'Essence' || realm == 'essence') {
|
||||
realm = 'essence';
|
||||
} else if (realm == 'Channeling' || realm == 'channeling') {
|
||||
@@ -11871,7 +11903,8 @@ onCheck("mancerfinish:newcharacter", (ev) => {
|
||||
const update = {}
|
||||
update.pp = v.pp_max || 0;
|
||||
update.hp = v.hp_max || 0;
|
||||
update.injury_penalty = 0;
|
||||
update.injurypenalty = 0;
|
||||
update.hppenalty = 0;
|
||||
update.fatigue = 0;
|
||||
VrmuSetAttrs(update);
|
||||
});
|
||||
@@ -12808,7 +12841,7 @@ RMUInventory.itemfields = [ "itemname", "itemweight", "itemcount", "itemsystem",
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all the equipped eqipment and if it's Armor or Weapons add it
|
||||
* Get all the equipped equipment and if it's Armor or Weapons add it
|
||||
* to the front page of the character sheet.
|
||||
*
|
||||
* Pending sage
|
||||
@@ -12825,6 +12858,7 @@ RMUInventory.itemfields = [ "itemname", "itemweight", "itemcount", "itemsystem",
|
||||
toget.push(`repeating_stuff_${id}_itemsystem`);
|
||||
});
|
||||
getAttrsPending(toget, (stuff) => {
|
||||
console.log("Fetch equipment", stuff);
|
||||
let updates = {};
|
||||
let atinfo = miscBonusHighest(stuff.base_at_misc || "", 1);
|
||||
// Set default AT to base_at everywhere.
|
||||
@@ -13511,6 +13545,7 @@ attacks.critsToName = {
|
||||
Y: "Holy"
|
||||
};
|
||||
|
||||
// Also used to generate the critlist for rollcrits
|
||||
attacks.critnameToCode = {
|
||||
Acid: "A",
|
||||
Cold: "O",
|
||||
@@ -13919,7 +13954,7 @@ function sizeFromNumeric(value) {
|
||||
}
|
||||
}
|
||||
const tofetchflat = Object.keys(tofetch);
|
||||
console.log("Need to fetch", tofetch, tofetchflat);
|
||||
console.log("Need to fetch", tofetch, tofetchflat, crits);
|
||||
if (tofetchflat.length > 0) {
|
||||
getCompendiumPage("Criticals:" + attacks.critsToName[type], (data) => {
|
||||
// FIXME: Handle errots here & multiple
|
||||
@@ -14346,7 +14381,7 @@ function sizeFromNumeric(value) {
|
||||
`{\{target=${cdata.targetname}}} ` +
|
||||
`{\{targetescaped=${cdata.targetescaped}}} ` +
|
||||
`{\{weapon=${cdata.attackname}}} ` +
|
||||
`{\{statuspenalty=${cdata.status_penalty}}} ` +
|
||||
`{\{statuspenalty=${cdata.statuspenalty}}} ` +
|
||||
`{\{attackmoddescription=[[0]]}} ` +
|
||||
`{\{targetname=[[0]]}} ` +
|
||||
"{\{hitlocation=[[1d7]] }} " +
|
||||
@@ -14454,11 +14489,25 @@ function sizeFromNumeric(value) {
|
||||
});
|
||||
|
||||
onCheck('clicked:rmuattacktargetrefresh', (ev) => {
|
||||
getAttrs(["target_name"], (e) => {
|
||||
attacks.getTargetData(ev.target_name);
|
||||
getAttrs(["target_name", "token_id"], (e) => {
|
||||
if (e.tokenid && e.tokenid != 0) {
|
||||
attacks.getTargetData(ev.target_name);
|
||||
} else {
|
||||
console.log("Can't refresh when no target selected");
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
onCheck('clicked:rmuattacktargetdelete', (ev) => {
|
||||
console.log("Target delete");
|
||||
VsetAttrs({target_at: 1,
|
||||
target_name: 'Foe',
|
||||
target_db: 0,
|
||||
target_size: 5,
|
||||
target_crit: 0,
|
||||
target_tokenid: 0});
|
||||
});
|
||||
|
||||
attacks.getTargetData = function(whom) {
|
||||
const roll_string = "@{whispertype} &{template:rmuattacktarget} [[1d20]] " +
|
||||
"{\{who=@{character_name}}} " +
|
||||
@@ -14506,12 +14555,18 @@ function sizeFromNumeric(value) {
|
||||
|
||||
|
||||
onCheck('clicked:rollcrit', (ev) => {
|
||||
let critlist = ""
|
||||
{
|
||||
const strs = []
|
||||
for (const [key, value] of Object.entries(attacks.critnameToCode)) {
|
||||
strs.push(key + ',' + value)
|
||||
}
|
||||
critlist = strs.sort().join('|');
|
||||
}
|
||||
const roll_string = "@{whispertype} &{template:rmucritical}" +
|
||||
"{\{who=@{character_name}}}" +
|
||||
"{\{roll=[[1d100]]}}" +
|
||||
"{\{type=[[0[?{CriticalType|Acid,A|Cold,C|Electricity,E|Grapple,G|Heat,H|" +
|
||||
"Holy,Y|Impact,I|Krush,K|Puncture,P|Slash,S|Steam,M|Strikes,T|Subdual,B|" +
|
||||
"Sweeps,W|Unbalance,U}]]]}}" +
|
||||
`{\{type=[[0[?{Critical Type|${critlist}}]]]}}` +
|
||||
"{\{degree=[[0[?{Degree|A,0|B,1|C,2|D,3|E,4|F,5|G,6|H,7|I,8|J,9|Z (A-1),-1|Y (A-2),-2}]]]}}" +
|
||||
"{\{injurystring=[[0]]}}" +
|
||||
"{\{hascritical0=[[0]]}}" +
|
||||
@@ -14541,12 +14596,18 @@ function sizeFromNumeric(value) {
|
||||
});
|
||||
|
||||
onCheck('clicked:rollcritselect', (ev) => {
|
||||
let critlist = ""
|
||||
{
|
||||
const strs = []
|
||||
for (const [key, value] of Object.entries(attacks.critnameToCode)) {
|
||||
strs.push(key + ',' + value)
|
||||
}
|
||||
critlist = strs.sort().join('|');
|
||||
}
|
||||
const roll_string = "@{whispertype} &{template:rmucriticallookup}" +
|
||||
"{\{who=@{character_name}}}" +
|
||||
"{\{roll=[[?{What crit result?}]]}}" +
|
||||
"{\{type=[[0[?{CriticalType|Acid,A|Cold,C|Electricity,E|Grapple,G|Heat,H|" +
|
||||
"Holy,Y|Impact,I|Krush,K|Puncture,P|Slash,S|Steam,M|Strikes,T|Subdual,B|" +
|
||||
"Sweeps,W|Unbalance,U}]]]}}" +
|
||||
`{\{type=[[0[?{Critical Type|${critlist}}]]]}}` +
|
||||
"{\{degree=[[0[?{Degree|A,0|B,1|C,2|D,3|E,4|F,5|G,6|H,7|I,8|J,9|Z (A-1),-1|Y (A-2),-2}]]]}}" +
|
||||
"{\{injurystring=[[0]]}}" +
|
||||
"{\{hascritical0=[[0]]}}" +
|
||||
@@ -14860,6 +14921,27 @@ onCheck("clicked:deletebleed", () => {
|
||||
});
|
||||
});
|
||||
|
||||
onCheck("clicked:statusstun75delete", () => {
|
||||
getAttrs(["character_name"], (x) => {
|
||||
sendMessage(`${x.character_name} has stun-75 lifted.`);
|
||||
setAttrs({ statusstun75: 0 });
|
||||
});
|
||||
});
|
||||
|
||||
onCheck("clicked:statusstun50delete", () => {
|
||||
getAttrs(["character_name"], (x) => {
|
||||
sendMessage(`${x.character_name} has stun-50 lifted.`);
|
||||
setAttrs({ statusstun50: 0 });
|
||||
});
|
||||
});
|
||||
|
||||
onCheck("clicked:statusstun25delete", () => {
|
||||
getAttrs(["character_name"], (x) => {
|
||||
sendMessage(`${x.character_name} has stun-25 lifted.`);
|
||||
setAttrs({ statusstun25: 0 });
|
||||
});
|
||||
});
|
||||
|
||||
function handleFreeClicked() {
|
||||
getAttrs(["currentphase", "aptrack_freeused", "character_name"], (data) => {
|
||||
if (data.aptrack_freeused == 'on') {
|
||||
@@ -15523,7 +15605,7 @@ creature.parseJSONMaybe = function(jdata, def) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an Ovject or nul
|
||||
* Returns an Object or null
|
||||
* Nil if if does not match.
|
||||
* Object has:
|
||||
* - OB: The OB natch
|
||||
@@ -15699,7 +15781,7 @@ creature.newCreature = function(name, jdata) {
|
||||
updates.injurypenalty = 0;
|
||||
updates.endurance = cdata.Fatigue;
|
||||
updates.fatigue = 0;
|
||||
updates.status_penalty = 0;
|
||||
updates.statuspenalty = 0;
|
||||
|
||||
updates.rr_channeling_bonus = cdata.Ch;
|
||||
updates.rr_essence_bonus = cdata.Ess;
|
||||
@@ -15835,7 +15917,7 @@ onCheck('clicked:repeating_creatureattack:creaturemakeattack', (ev) => {
|
||||
'target_at',
|
||||
'target_size',
|
||||
'target_crit',
|
||||
'status_penalty',
|
||||
'statuspenalty',
|
||||
'statuseffect',
|
||||
];
|
||||
getAttrs(toget, (values) => {
|
||||
@@ -15857,7 +15939,7 @@ onCheck('clicked:repeating_creatureattack:creaturemakeattack', (ev) => {
|
||||
cdata.targetsize = parseIntDefault(values.target_size, 5);
|
||||
cdata.targetcrit = parseIntDefault(values.target_crit, 0);
|
||||
cdata.statuseffect = parseIntDefault(values.statuseffect, 0);
|
||||
cdata.status_penalty = parseIntDefault(values.status_penalty, 0);
|
||||
cdata.statuspenalty = parseIntDefault(values.statuspenalty, 0);
|
||||
// FIXME:
|
||||
cdata.parrymod = 0;
|
||||
cdata.othermod = 0;
|
||||
@@ -15902,7 +15984,7 @@ injury.criticalmaps = {
|
||||
// FIXME: Should take location and side
|
||||
injury.updateInjuryString = function(hits, critical, attacker, result) {
|
||||
let istr = "";
|
||||
console.log("Update Injury string", hits, critical);
|
||||
console.log("Update Injury string", hits, critical, attacker, result);
|
||||
// First get base hits + critical hits
|
||||
let totalhits = parseIntDefault(hits, 0);
|
||||
if (critical && critical.H) {
|
||||
@@ -16021,7 +16103,7 @@ injury.parseInjuryString = function (str) {
|
||||
const noknock = critresist.includes('!')
|
||||
|
||||
// Pull the fields out. If we modify save to updates
|
||||
// as well. So anything changed will ne in updates.
|
||||
// as well. So anything changed will be in updates.
|
||||
let hp = parseIntDefault(cdata.hp, 0);
|
||||
let injurypenalty = parseIntDefault(cdata.injurypenalty, 0);
|
||||
let fatigue = parseIntDefault(cdata.fatigue, 0);
|
||||
@@ -16117,7 +16199,7 @@ injury.parseInjuryString = function (str) {
|
||||
updates.grapplestatus = grapplestatus;
|
||||
sendMessage(`${cdata.character_name} is grappled at ${grapplestatus} (increase ${value}`);
|
||||
break;
|
||||
case 'L': case 'O': // Already saved... do notihing
|
||||
case 'L': case 'O': // Already saved... do nothing
|
||||
break;
|
||||
default:
|
||||
rmuerror("Can't handle ${res[0]} in injury ${str}");
|
||||
|
||||
@@ -19,5 +19,5 @@
|
||||
"descriptiontranslationkey": "DefaultCurrency"
|
||||
}
|
||||
],
|
||||
"version": "1743481215"
|
||||
"version": "1744695010"
|
||||
}
|
||||
|
||||
@@ -1,3 +1,24 @@
|
||||
# 2025-4-15
|
||||
|
||||
- Fix some typos in the skill roll messages.
|
||||
- Fix crit roll lookups.
|
||||
- Fix subtle penalty Channeling/Mentalism.
|
||||
- Status and Injury penalty names were sometimes inconsistent.
|
||||
- Move to statuspenalty and injurypenalty everywhere.
|
||||
- Transitory data, so should not impact anyone.
|
||||
- Fixes issue where penalties were not applying to attacks.
|
||||
- Treasure Law:
|
||||
- Fix sizes on some weapons.
|
||||
- Correctly specify attack tables on weapons.
|
||||
- Attacks:
|
||||
- Add a button to remove target.
|
||||
- Fix styling of the target drop downs.
|
||||
- Staus
|
||||
- Add a button (three actually) to remove stuns
|
||||
- Creature
|
||||
- Content complete
|
||||
- Unscale creature hits.
|
||||
|
||||
# 2025-4-1
|
||||
|
||||
- Fix for the stat abbrievations used in skill summaries
|
||||
@@ -6,6 +27,7 @@
|
||||
- Remove the trailing . in the PP message
|
||||
- Fix unbalanced brace in message for grace
|
||||
- Uses; clear per level count on level up
|
||||
- Remove purchase module.
|
||||
- Skills:
|
||||
- forEachSkill has a completion callback
|
||||
|
||||
|
||||
Reference in New Issue
Block a user