add effects of low hp on rolls

This commit is contained in:
Sven Balzer 2025-06-03 14:25:07 +02:00
parent df484039a5
commit 44500ad6d7

View File

@ -505,6 +505,14 @@ class DSA41_CharacterDocument extends Actor {
return actor;
}
get_hp_roll_modifier() {
if (this.system.lebenspunkte.aktuell < Math.round(this.system.computed.lebenspunkte.max / 4)) return 3;
if (this.system.lebenspunkte.aktuell < Math.round(this.system.computed.lebenspunkte.max / 3)) return 2;
if (this.system.lebenspunkte.aktuell < Math.round(this.system.computed.lebenspunkte.max / 2)) return 1;
return 0;
}
}
class DSA41_CharacterData extends TypeDataModel {
@ -1236,6 +1244,8 @@ class DSA41_ActorSheet extends DSA41_ApplicationMixin(ActorSheetV2) {
const item_id = event.target.closest("[data-item-id]")?.dataset.itemId;
const item = this.document.items.get(item_id);
const hp_roll_modifier = this.document.get_hp_roll_modifier();
let flavor = game.i18n.localize("DSA41.roll_types." + roll_type);
if (typeof success_value !== 'undefined') {
flavor += " <= " + success_value;
@ -1251,6 +1261,9 @@ class DSA41_ActorSheet extends DSA41_ApplicationMixin(ActorSheetV2) {
flavor += " <= " + (Number(success_value) + data.modifikator);
}
if (hp_roll_modifier !== 0)
roll_formula = roll_formula + " + " + hp_roll_modifier;
let roll = new Roll(roll_formula, this.document.system);
roll.toMessage({
speaker: ChatMessage.getSpeaker({ actor: this.document }),
@ -1275,6 +1288,9 @@ class DSA41_ActorSheet extends DSA41_ApplicationMixin(ActorSheetV2) {
const talentwert = item.system.talentwert - data.modifikator;
const roll_modifier = talentwert < 0 ? -talentwert: 0;
if (hp_roll_modifier !== 0)
roll_modifier += hp_roll_modifier;
const roll1 = (await new Roll("1d20").evaluate()).total + roll_modifier;
const roll2 = (await new Roll("1d20").evaluate()).total + roll_modifier;
@ -1330,6 +1346,9 @@ class DSA41_ActorSheet extends DSA41_ApplicationMixin(ActorSheetV2) {
flavor += " <= " + (Number(success_value) + data.modifikator);
}
if (hp_roll_modifier !== 0)
roll_formula = roll_formula + " + " + hp_roll_modifier;
let roll = new Roll(roll_formula, this.document.system);
roll.toMessage({
speaker: ChatMessage.getSpeaker({ actor: this.document }),
@ -1353,6 +1372,9 @@ class DSA41_ActorSheet extends DSA41_ApplicationMixin(ActorSheetV2) {
let flavor = game.i18n.localize("DSA41.roll_types." + roll_type);
flavor += " <= " + (Number((data.crit == "on") ? item.parade_crit : item.parade) + data.modifikator);
if (hp_roll_modifier !== 0)
roll_formula = roll_formula + " + " + hp_roll_modifier;
let roll = new Roll(roll_formula, this.document.system);
roll.toMessage({
speaker: ChatMessage.getSpeaker({ actor: this.document }),
@ -1399,7 +1421,7 @@ class DSA41_ActorSheet extends DSA41_ApplicationMixin(ActorSheetV2) {
const groessen_modifikator = Math.max(data.ziel_groesse + data.deckung + data.ziel_bewegung, -2);
const andere_modifikator = data.entfernung + data.wind + data.modifikator;
const total_modifikator = groessen_modifikator + andere_modifikator;
const total_modifikator = groessen_modifikator + andere_modifikator + hp_roll_modifier;
let roll = new Roll(roll_formula + " + " + total_modifikator, this.document.system);
roll.toMessage({
@ -1447,6 +1469,9 @@ class DSA41_ActorSheet extends DSA41_ApplicationMixin(ActorSheetV2) {
const zauberfertigkeitswert = item.system.zauberfertigkeitswert - data.modifikator - data.magieresistenz;
const roll_modifier = zauberfertigkeitswert < 0 ? -zauberfertigkeitswert: 0;
if (hp_roll_modifier !== 0)
roll_modifier += hp_roll_modifier;
const roll1 = (await new Roll("1d20").evaluate()).total + roll_modifier;
const roll2 = (await new Roll("1d20").evaluate()).total + roll_modifier;
const roll3 = (await new Roll("1d20").evaluate()).total + roll_modifier;